#!/usr/bin/env node
// Vort CLI Single-File Bundle
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
  get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
}) : x)(function(x) {
  if (typeof require !== "undefined") return require.apply(this, arguments);
  throw Error('Dynamic require of "' + x + '" is not supported');
});
var __commonJS = (cb, mod) => function __require2() {
  return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __copyProps = (to, from, except, desc) => {
  if (from && typeof from === "object" || typeof from === "function") {
    for (let key of __getOwnPropNames(from))
      if (!__hasOwnProp.call(to, key) && key !== except)
        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  }
  return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
  // If the importer is in node compatibility mode or this is not an ESM
  // file that has been converted to a CommonJS file using a Babel-
  // compatible transform (i.e. "__esModule" has not been set), then set
  // "default" to the CommonJS "module.exports" for node compatibility.
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
  mod
));

// node_modules/process-nextick-args/index.js
var require_process_nextick_args = __commonJS({
  "node_modules/process-nextick-args/index.js"(exports, module) {
    "use strict";
    if (typeof process === "undefined" || !process.version || process.version.indexOf("v0.") === 0 || process.version.indexOf("v1.") === 0 && process.version.indexOf("v1.8.") !== 0) {
      module.exports = { nextTick };
    } else {
      module.exports = process;
    }
    function nextTick(fn, arg1, arg2, arg3) {
      if (typeof fn !== "function") {
        throw new TypeError('"callback" argument must be a function');
      }
      var len = arguments.length;
      var args, i;
      switch (len) {
        case 0:
        case 1:
          return process.nextTick(fn);
        case 2:
          return process.nextTick(function afterTickOne() {
            fn.call(null, arg1);
          });
        case 3:
          return process.nextTick(function afterTickTwo() {
            fn.call(null, arg1, arg2);
          });
        case 4:
          return process.nextTick(function afterTickThree() {
            fn.call(null, arg1, arg2, arg3);
          });
        default:
          args = new Array(len - 1);
          i = 0;
          while (i < args.length) {
            args[i++] = arguments[i];
          }
          return process.nextTick(function afterTick() {
            fn.apply(null, args);
          });
      }
    }
  }
});

// node_modules/isarray/index.js
var require_isarray = __commonJS({
  "node_modules/isarray/index.js"(exports, module) {
    var toString2 = {}.toString;
    module.exports = Array.isArray || function(arr) {
      return toString2.call(arr) == "[object Array]";
    };
  }
});

// node_modules/readable-stream/lib/internal/streams/stream.js
var require_stream = __commonJS({
  "node_modules/readable-stream/lib/internal/streams/stream.js"(exports, module) {
    module.exports = __require("stream");
  }
});

// node_modules/safe-buffer/index.js
var require_safe_buffer = __commonJS({
  "node_modules/safe-buffer/index.js"(exports, module) {
    var buffer = __require("buffer");
    var Buffer2 = buffer.Buffer;
    function copyProps(src, dst) {
      for (var key in src) {
        dst[key] = src[key];
      }
    }
    if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) {
      module.exports = buffer;
    } else {
      copyProps(buffer, exports);
      exports.Buffer = SafeBuffer;
    }
    function SafeBuffer(arg, encodingOrOffset, length) {
      return Buffer2(arg, encodingOrOffset, length);
    }
    copyProps(Buffer2, SafeBuffer);
    SafeBuffer.from = function(arg, encodingOrOffset, length) {
      if (typeof arg === "number") {
        throw new TypeError("Argument must not be a number");
      }
      return Buffer2(arg, encodingOrOffset, length);
    };
    SafeBuffer.alloc = function(size, fill, encoding) {
      if (typeof size !== "number") {
        throw new TypeError("Argument must be a number");
      }
      var buf = Buffer2(size);
      if (fill !== void 0) {
        if (typeof encoding === "string") {
          buf.fill(fill, encoding);
        } else {
          buf.fill(fill);
        }
      } else {
        buf.fill(0);
      }
      return buf;
    };
    SafeBuffer.allocUnsafe = function(size) {
      if (typeof size !== "number") {
        throw new TypeError("Argument must be a number");
      }
      return Buffer2(size);
    };
    SafeBuffer.allocUnsafeSlow = function(size) {
      if (typeof size !== "number") {
        throw new TypeError("Argument must be a number");
      }
      return buffer.SlowBuffer(size);
    };
  }
});

// node_modules/core-util-is/lib/util.js
var require_util = __commonJS({
  "node_modules/core-util-is/lib/util.js"(exports) {
    function isArray(arg) {
      if (Array.isArray) {
        return Array.isArray(arg);
      }
      return objectToString(arg) === "[object Array]";
    }
    exports.isArray = isArray;
    function isBoolean(arg) {
      return typeof arg === "boolean";
    }
    exports.isBoolean = isBoolean;
    function isNull(arg) {
      return arg === null;
    }
    exports.isNull = isNull;
    function isNullOrUndefined(arg) {
      return arg == null;
    }
    exports.isNullOrUndefined = isNullOrUndefined;
    function isNumber(arg) {
      return typeof arg === "number";
    }
    exports.isNumber = isNumber;
    function isString(arg) {
      return typeof arg === "string";
    }
    exports.isString = isString;
    function isSymbol(arg) {
      return typeof arg === "symbol";
    }
    exports.isSymbol = isSymbol;
    function isUndefined(arg) {
      return arg === void 0;
    }
    exports.isUndefined = isUndefined;
    function isRegExp(re) {
      return objectToString(re) === "[object RegExp]";
    }
    exports.isRegExp = isRegExp;
    function isObject(arg) {
      return typeof arg === "object" && arg !== null;
    }
    exports.isObject = isObject;
    function isDate(d) {
      return objectToString(d) === "[object Date]";
    }
    exports.isDate = isDate;
    function isError(e) {
      return objectToString(e) === "[object Error]" || e instanceof Error;
    }
    exports.isError = isError;
    function isFunction(arg) {
      return typeof arg === "function";
    }
    exports.isFunction = isFunction;
    function isPrimitive(arg) {
      return arg === null || typeof arg === "boolean" || typeof arg === "number" || typeof arg === "string" || typeof arg === "symbol" || // ES6 symbol
      typeof arg === "undefined";
    }
    exports.isPrimitive = isPrimitive;
    exports.isBuffer = __require("buffer").Buffer.isBuffer;
    function objectToString(o) {
      return Object.prototype.toString.call(o);
    }
  }
});

// node_modules/inherits/inherits_browser.js
var require_inherits_browser = __commonJS({
  "node_modules/inherits/inherits_browser.js"(exports, module) {
    if (typeof Object.create === "function") {
      module.exports = function inherits(ctor, superCtor) {
        if (superCtor) {
          ctor.super_ = superCtor;
          ctor.prototype = Object.create(superCtor.prototype, {
            constructor: {
              value: ctor,
              enumerable: false,
              writable: true,
              configurable: true
            }
          });
        }
      };
    } else {
      module.exports = function inherits(ctor, superCtor) {
        if (superCtor) {
          ctor.super_ = superCtor;
          var TempCtor = function() {
          };
          TempCtor.prototype = superCtor.prototype;
          ctor.prototype = new TempCtor();
          ctor.prototype.constructor = ctor;
        }
      };
    }
  }
});

// node_modules/inherits/inherits.js
var require_inherits = __commonJS({
  "node_modules/inherits/inherits.js"(exports, module) {
    try {
      util = __require("util");
      if (typeof util.inherits !== "function") throw "";
      module.exports = util.inherits;
    } catch (e) {
      module.exports = require_inherits_browser();
    }
    var util;
  }
});

// node_modules/readable-stream/lib/internal/streams/BufferList.js
var require_BufferList = __commonJS({
  "node_modules/readable-stream/lib/internal/streams/BufferList.js"(exports, module) {
    "use strict";
    function _classCallCheck(instance, Constructor) {
      if (!(instance instanceof Constructor)) {
        throw new TypeError("Cannot call a class as a function");
      }
    }
    var Buffer2 = require_safe_buffer().Buffer;
    var util = __require("util");
    function copyBuffer(src, target, offset) {
      src.copy(target, offset);
    }
    module.exports = function() {
      function BufferList() {
        _classCallCheck(this, BufferList);
        this.head = null;
        this.tail = null;
        this.length = 0;
      }
      BufferList.prototype.push = function push(v) {
        var entry = { data: v, next: null };
        if (this.length > 0) this.tail.next = entry;
        else this.head = entry;
        this.tail = entry;
        ++this.length;
      };
      BufferList.prototype.unshift = function unshift(v) {
        var entry = { data: v, next: this.head };
        if (this.length === 0) this.tail = entry;
        this.head = entry;
        ++this.length;
      };
      BufferList.prototype.shift = function shift() {
        if (this.length === 0) return;
        var ret = this.head.data;
        if (this.length === 1) this.head = this.tail = null;
        else this.head = this.head.next;
        --this.length;
        return ret;
      };
      BufferList.prototype.clear = function clear() {
        this.head = this.tail = null;
        this.length = 0;
      };
      BufferList.prototype.join = function join(s) {
        if (this.length === 0) return "";
        var p = this.head;
        var ret = "" + p.data;
        while (p = p.next) {
          ret += s + p.data;
        }
        return ret;
      };
      BufferList.prototype.concat = function concat(n) {
        if (this.length === 0) return Buffer2.alloc(0);
        var ret = Buffer2.allocUnsafe(n >>> 0);
        var p = this.head;
        var i = 0;
        while (p) {
          copyBuffer(p.data, ret, i);
          i += p.data.length;
          p = p.next;
        }
        return ret;
      };
      return BufferList;
    }();
    if (util && util.inspect && util.inspect.custom) {
      module.exports.prototype[util.inspect.custom] = function() {
        var obj = util.inspect({ length: this.length });
        return this.constructor.name + " " + obj;
      };
    }
  }
});

// node_modules/readable-stream/lib/internal/streams/destroy.js
var require_destroy = __commonJS({
  "node_modules/readable-stream/lib/internal/streams/destroy.js"(exports, module) {
    "use strict";
    var pna = require_process_nextick_args();
    function destroy(err, cb) {
      var _this = this;
      var readableDestroyed = this._readableState && this._readableState.destroyed;
      var writableDestroyed = this._writableState && this._writableState.destroyed;
      if (readableDestroyed || writableDestroyed) {
        if (cb) {
          cb(err);
        } else if (err) {
          if (!this._writableState) {
            pna.nextTick(emitErrorNT, this, err);
          } else if (!this._writableState.errorEmitted) {
            this._writableState.errorEmitted = true;
            pna.nextTick(emitErrorNT, this, err);
          }
        }
        return this;
      }
      if (this._readableState) {
        this._readableState.destroyed = true;
      }
      if (this._writableState) {
        this._writableState.destroyed = true;
      }
      this._destroy(err || null, function(err2) {
        if (!cb && err2) {
          if (!_this._writableState) {
            pna.nextTick(emitErrorNT, _this, err2);
          } else if (!_this._writableState.errorEmitted) {
            _this._writableState.errorEmitted = true;
            pna.nextTick(emitErrorNT, _this, err2);
          }
        } else if (cb) {
          cb(err2);
        }
      });
      return this;
    }
    function undestroy() {
      if (this._readableState) {
        this._readableState.destroyed = false;
        this._readableState.reading = false;
        this._readableState.ended = false;
        this._readableState.endEmitted = false;
      }
      if (this._writableState) {
        this._writableState.destroyed = false;
        this._writableState.ended = false;
        this._writableState.ending = false;
        this._writableState.finalCalled = false;
        this._writableState.prefinished = false;
        this._writableState.finished = false;
        this._writableState.errorEmitted = false;
      }
    }
    function emitErrorNT(self2, err) {
      self2.emit("error", err);
    }
    module.exports = {
      destroy,
      undestroy
    };
  }
});

// node_modules/util-deprecate/node.js
var require_node = __commonJS({
  "node_modules/util-deprecate/node.js"(exports, module) {
    module.exports = __require("util").deprecate;
  }
});

// node_modules/readable-stream/lib/_stream_writable.js
var require_stream_writable = __commonJS({
  "node_modules/readable-stream/lib/_stream_writable.js"(exports, module) {
    "use strict";
    var pna = require_process_nextick_args();
    module.exports = Writable;
    function CorkedRequest(state) {
      var _this = this;
      this.next = null;
      this.entry = null;
      this.finish = function() {
        onCorkedFinish(_this, state);
      };
    }
    var asyncWrite = !process.browser && ["v0.10", "v0.9."].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;
    var Duplex;
    Writable.WritableState = WritableState;
    var util = Object.create(require_util());
    util.inherits = require_inherits();
    var internalUtil = {
      deprecate: require_node()
    };
    var Stream = require_stream();
    var Buffer2 = require_safe_buffer().Buffer;
    var OurUint8Array = (typeof global !== "undefined" ? global : typeof window !== "undefined" ? window : typeof self !== "undefined" ? self : {}).Uint8Array || function() {
    };
    function _uint8ArrayToBuffer(chunk) {
      return Buffer2.from(chunk);
    }
    function _isUint8Array(obj) {
      return Buffer2.isBuffer(obj) || obj instanceof OurUint8Array;
    }
    var destroyImpl = require_destroy();
    util.inherits(Writable, Stream);
    function nop() {
    }
    function WritableState(options, stream) {
      Duplex = Duplex || require_stream_duplex();
      options = options || {};
      var isDuplex = stream instanceof Duplex;
      this.objectMode = !!options.objectMode;
      if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
      var hwm = options.highWaterMark;
      var writableHwm = options.writableHighWaterMark;
      var defaultHwm = this.objectMode ? 16 : 16 * 1024;
      if (hwm || hwm === 0) this.highWaterMark = hwm;
      else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;
      else this.highWaterMark = defaultHwm;
      this.highWaterMark = Math.floor(this.highWaterMark);
      this.finalCalled = false;
      this.needDrain = false;
      this.ending = false;
      this.ended = false;
      this.finished = false;
      this.destroyed = false;
      var noDecode = options.decodeStrings === false;
      this.decodeStrings = !noDecode;
      this.defaultEncoding = options.defaultEncoding || "utf8";
      this.length = 0;
      this.writing = false;
      this.corked = 0;
      this.sync = true;
      this.bufferProcessing = false;
      this.onwrite = function(er) {
        onwrite(stream, er);
      };
      this.writecb = null;
      this.writelen = 0;
      this.bufferedRequest = null;
      this.lastBufferedRequest = null;
      this.pendingcb = 0;
      this.prefinished = false;
      this.errorEmitted = false;
      this.bufferedRequestCount = 0;
      this.corkedRequestsFree = new CorkedRequest(this);
    }
    WritableState.prototype.getBuffer = function getBuffer() {
      var current = this.bufferedRequest;
      var out = [];
      while (current) {
        out.push(current);
        current = current.next;
      }
      return out;
    };
    (function() {
      try {
        Object.defineProperty(WritableState.prototype, "buffer", {
          get: internalUtil.deprecate(function() {
            return this.getBuffer();
          }, "_writableState.buffer is deprecated. Use _writableState.getBuffer instead.", "DEP0003")
        });
      } catch (_) {
      }
    })();
    var realHasInstance;
    if (typeof Symbol === "function" && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === "function") {
      realHasInstance = Function.prototype[Symbol.hasInstance];
      Object.defineProperty(Writable, Symbol.hasInstance, {
        value: function(object) {
          if (realHasInstance.call(this, object)) return true;
          if (this !== Writable) return false;
          return object && object._writableState instanceof WritableState;
        }
      });
    } else {
      realHasInstance = function(object) {
        return object instanceof this;
      };
    }
    function Writable(options) {
      Duplex = Duplex || require_stream_duplex();
      if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
        return new Writable(options);
      }
      this._writableState = new WritableState(options, this);
      this.writable = true;
      if (options) {
        if (typeof options.write === "function") this._write = options.write;
        if (typeof options.writev === "function") this._writev = options.writev;
        if (typeof options.destroy === "function") this._destroy = options.destroy;
        if (typeof options.final === "function") this._final = options.final;
      }
      Stream.call(this);
    }
    Writable.prototype.pipe = function() {
      this.emit("error", new Error("Cannot pipe, not readable"));
    };
    function writeAfterEnd(stream, cb) {
      var er = new Error("write after end");
      stream.emit("error", er);
      pna.nextTick(cb, er);
    }
    function validChunk(stream, state, chunk, cb) {
      var valid = true;
      var er = false;
      if (chunk === null) {
        er = new TypeError("May not write null values to stream");
      } else if (typeof chunk !== "string" && chunk !== void 0 && !state.objectMode) {
        er = new TypeError("Invalid non-string/buffer chunk");
      }
      if (er) {
        stream.emit("error", er);
        pna.nextTick(cb, er);
        valid = false;
      }
      return valid;
    }
    Writable.prototype.write = function(chunk, encoding, cb) {
      var state = this._writableState;
      var ret = false;
      var isBuf = !state.objectMode && _isUint8Array(chunk);
      if (isBuf && !Buffer2.isBuffer(chunk)) {
        chunk = _uint8ArrayToBuffer(chunk);
      }
      if (typeof encoding === "function") {
        cb = encoding;
        encoding = null;
      }
      if (isBuf) encoding = "buffer";
      else if (!encoding) encoding = state.defaultEncoding;
      if (typeof cb !== "function") cb = nop;
      if (state.ended) writeAfterEnd(this, cb);
      else if (isBuf || validChunk(this, state, chunk, cb)) {
        state.pendingcb++;
        ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
      }
      return ret;
    };
    Writable.prototype.cork = function() {
      var state = this._writableState;
      state.corked++;
    };
    Writable.prototype.uncork = function() {
      var state = this._writableState;
      if (state.corked) {
        state.corked--;
        if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
      }
    };
    Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
      if (typeof encoding === "string") encoding = encoding.toLowerCase();
      if (!(["hex", "utf8", "utf-8", "ascii", "binary", "base64", "ucs2", "ucs-2", "utf16le", "utf-16le", "raw"].indexOf((encoding + "").toLowerCase()) > -1)) throw new TypeError("Unknown encoding: " + encoding);
      this._writableState.defaultEncoding = encoding;
      return this;
    };
    function decodeChunk(state, chunk, encoding) {
      if (!state.objectMode && state.decodeStrings !== false && typeof chunk === "string") {
        chunk = Buffer2.from(chunk, encoding);
      }
      return chunk;
    }
    Object.defineProperty(Writable.prototype, "writableHighWaterMark", {
      // making it explicit this property is not enumerable
      // because otherwise some prototype manipulation in
      // userland will fail
      enumerable: false,
      get: function() {
        return this._writableState.highWaterMark;
      }
    });
    function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
      if (!isBuf) {
        var newChunk = decodeChunk(state, chunk, encoding);
        if (chunk !== newChunk) {
          isBuf = true;
          encoding = "buffer";
          chunk = newChunk;
        }
      }
      var len = state.objectMode ? 1 : chunk.length;
      state.length += len;
      var ret = state.length < state.highWaterMark;
      if (!ret) state.needDrain = true;
      if (state.writing || state.corked) {
        var last = state.lastBufferedRequest;
        state.lastBufferedRequest = {
          chunk,
          encoding,
          isBuf,
          callback: cb,
          next: null
        };
        if (last) {
          last.next = state.lastBufferedRequest;
        } else {
          state.bufferedRequest = state.lastBufferedRequest;
        }
        state.bufferedRequestCount += 1;
      } else {
        doWrite(stream, state, false, len, chunk, encoding, cb);
      }
      return ret;
    }
    function doWrite(stream, state, writev, len, chunk, encoding, cb) {
      state.writelen = len;
      state.writecb = cb;
      state.writing = true;
      state.sync = true;
      if (writev) stream._writev(chunk, state.onwrite);
      else stream._write(chunk, encoding, state.onwrite);
      state.sync = false;
    }
    function onwriteError(stream, state, sync, er, cb) {
      --state.pendingcb;
      if (sync) {
        pna.nextTick(cb, er);
        pna.nextTick(finishMaybe, stream, state);
        stream._writableState.errorEmitted = true;
        stream.emit("error", er);
      } else {
        cb(er);
        stream._writableState.errorEmitted = true;
        stream.emit("error", er);
        finishMaybe(stream, state);
      }
    }
    function onwriteStateUpdate(state) {
      state.writing = false;
      state.writecb = null;
      state.length -= state.writelen;
      state.writelen = 0;
    }
    function onwrite(stream, er) {
      var state = stream._writableState;
      var sync = state.sync;
      var cb = state.writecb;
      onwriteStateUpdate(state);
      if (er) onwriteError(stream, state, sync, er, cb);
      else {
        var finished = needFinish(state);
        if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
          clearBuffer(stream, state);
        }
        if (sync) {
          asyncWrite(afterWrite, stream, state, finished, cb);
        } else {
          afterWrite(stream, state, finished, cb);
        }
      }
    }
    function afterWrite(stream, state, finished, cb) {
      if (!finished) onwriteDrain(stream, state);
      state.pendingcb--;
      cb();
      finishMaybe(stream, state);
    }
    function onwriteDrain(stream, state) {
      if (state.length === 0 && state.needDrain) {
        state.needDrain = false;
        stream.emit("drain");
      }
    }
    function clearBuffer(stream, state) {
      state.bufferProcessing = true;
      var entry = state.bufferedRequest;
      if (stream._writev && entry && entry.next) {
        var l = state.bufferedRequestCount;
        var buffer = new Array(l);
        var holder = state.corkedRequestsFree;
        holder.entry = entry;
        var count = 0;
        var allBuffers = true;
        while (entry) {
          buffer[count] = entry;
          if (!entry.isBuf) allBuffers = false;
          entry = entry.next;
          count += 1;
        }
        buffer.allBuffers = allBuffers;
        doWrite(stream, state, true, state.length, buffer, "", holder.finish);
        state.pendingcb++;
        state.lastBufferedRequest = null;
        if (holder.next) {
          state.corkedRequestsFree = holder.next;
          holder.next = null;
        } else {
          state.corkedRequestsFree = new CorkedRequest(state);
        }
        state.bufferedRequestCount = 0;
      } else {
        while (entry) {
          var chunk = entry.chunk;
          var encoding = entry.encoding;
          var cb = entry.callback;
          var len = state.objectMode ? 1 : chunk.length;
          doWrite(stream, state, false, len, chunk, encoding, cb);
          entry = entry.next;
          state.bufferedRequestCount--;
          if (state.writing) {
            break;
          }
        }
        if (entry === null) state.lastBufferedRequest = null;
      }
      state.bufferedRequest = entry;
      state.bufferProcessing = false;
    }
    Writable.prototype._write = function(chunk, encoding, cb) {
      cb(new Error("_write() is not implemented"));
    };
    Writable.prototype._writev = null;
    Writable.prototype.end = function(chunk, encoding, cb) {
      var state = this._writableState;
      if (typeof chunk === "function") {
        cb = chunk;
        chunk = null;
        encoding = null;
      } else if (typeof encoding === "function") {
        cb = encoding;
        encoding = null;
      }
      if (chunk !== null && chunk !== void 0) this.write(chunk, encoding);
      if (state.corked) {
        state.corked = 1;
        this.uncork();
      }
      if (!state.ending) endWritable(this, state, cb);
    };
    function needFinish(state) {
      return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
    }
    function callFinal(stream, state) {
      stream._final(function(err) {
        state.pendingcb--;
        if (err) {
          stream.emit("error", err);
        }
        state.prefinished = true;
        stream.emit("prefinish");
        finishMaybe(stream, state);
      });
    }
    function prefinish(stream, state) {
      if (!state.prefinished && !state.finalCalled) {
        if (typeof stream._final === "function") {
          state.pendingcb++;
          state.finalCalled = true;
          pna.nextTick(callFinal, stream, state);
        } else {
          state.prefinished = true;
          stream.emit("prefinish");
        }
      }
    }
    function finishMaybe(stream, state) {
      var need = needFinish(state);
      if (need) {
        prefinish(stream, state);
        if (state.pendingcb === 0) {
          state.finished = true;
          stream.emit("finish");
        }
      }
      return need;
    }
    function endWritable(stream, state, cb) {
      state.ending = true;
      finishMaybe(stream, state);
      if (cb) {
        if (state.finished) pna.nextTick(cb);
        else stream.once("finish", cb);
      }
      state.ended = true;
      stream.writable = false;
    }
    function onCorkedFinish(corkReq, state, err) {
      var entry = corkReq.entry;
      corkReq.entry = null;
      while (entry) {
        var cb = entry.callback;
        state.pendingcb--;
        cb(err);
        entry = entry.next;
      }
      state.corkedRequestsFree.next = corkReq;
    }
    Object.defineProperty(Writable.prototype, "destroyed", {
      get: function() {
        if (this._writableState === void 0) {
          return false;
        }
        return this._writableState.destroyed;
      },
      set: function(value) {
        if (!this._writableState) {
          return;
        }
        this._writableState.destroyed = value;
      }
    });
    Writable.prototype.destroy = destroyImpl.destroy;
    Writable.prototype._undestroy = destroyImpl.undestroy;
    Writable.prototype._destroy = function(err, cb) {
      this.end();
      cb(err);
    };
  }
});

// node_modules/readable-stream/lib/_stream_duplex.js
var require_stream_duplex = __commonJS({
  "node_modules/readable-stream/lib/_stream_duplex.js"(exports, module) {
    "use strict";
    var pna = require_process_nextick_args();
    var objectKeys = Object.keys || function(obj) {
      var keys2 = [];
      for (var key in obj) {
        keys2.push(key);
      }
      return keys2;
    };
    module.exports = Duplex;
    var util = Object.create(require_util());
    util.inherits = require_inherits();
    var Readable = require_stream_readable();
    var Writable = require_stream_writable();
    util.inherits(Duplex, Readable);
    {
      keys = objectKeys(Writable.prototype);
      for (v = 0; v < keys.length; v++) {
        method = keys[v];
        if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
      }
    }
    var keys;
    var method;
    var v;
    function Duplex(options) {
      if (!(this instanceof Duplex)) return new Duplex(options);
      Readable.call(this, options);
      Writable.call(this, options);
      if (options && options.readable === false) this.readable = false;
      if (options && options.writable === false) this.writable = false;
      this.allowHalfOpen = true;
      if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
      this.once("end", onend);
    }
    Object.defineProperty(Duplex.prototype, "writableHighWaterMark", {
      // making it explicit this property is not enumerable
      // because otherwise some prototype manipulation in
      // userland will fail
      enumerable: false,
      get: function() {
        return this._writableState.highWaterMark;
      }
    });
    function onend() {
      if (this.allowHalfOpen || this._writableState.ended) return;
      pna.nextTick(onEndNT, this);
    }
    function onEndNT(self2) {
      self2.end();
    }
    Object.defineProperty(Duplex.prototype, "destroyed", {
      get: function() {
        if (this._readableState === void 0 || this._writableState === void 0) {
          return false;
        }
        return this._readableState.destroyed && this._writableState.destroyed;
      },
      set: function(value) {
        if (this._readableState === void 0 || this._writableState === void 0) {
          return;
        }
        this._readableState.destroyed = value;
        this._writableState.destroyed = value;
      }
    });
    Duplex.prototype._destroy = function(err, cb) {
      this.push(null);
      this.end();
      pna.nextTick(cb, err);
    };
  }
});

// node_modules/readable-stream/lib/_stream_readable.js
var require_stream_readable = __commonJS({
  "node_modules/readable-stream/lib/_stream_readable.js"(exports, module) {
    "use strict";
    var pna = require_process_nextick_args();
    module.exports = Readable;
    var isArray = require_isarray();
    var Duplex;
    Readable.ReadableState = ReadableState;
    var EE = __require("events").EventEmitter;
    var EElistenerCount = function(emitter, type) {
      return emitter.listeners(type).length;
    };
    var Stream = require_stream();
    var Buffer2 = require_safe_buffer().Buffer;
    var OurUint8Array = (typeof global !== "undefined" ? global : typeof window !== "undefined" ? window : typeof self !== "undefined" ? self : {}).Uint8Array || function() {
    };
    function _uint8ArrayToBuffer(chunk) {
      return Buffer2.from(chunk);
    }
    function _isUint8Array(obj) {
      return Buffer2.isBuffer(obj) || obj instanceof OurUint8Array;
    }
    var util = Object.create(require_util());
    util.inherits = require_inherits();
    var debugUtil = __require("util");
    var debug = void 0;
    if (debugUtil && debugUtil.debuglog) {
      debug = debugUtil.debuglog("stream");
    } else {
      debug = function() {
      };
    }
    var BufferList = require_BufferList();
    var destroyImpl = require_destroy();
    var StringDecoder;
    util.inherits(Readable, Stream);
    var kProxyEvents = ["error", "close", "destroy", "pause", "resume"];
    function prependListener(emitter, event, fn) {
      if (typeof emitter.prependListener === "function") return emitter.prependListener(event, fn);
      if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);
      else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);
      else emitter._events[event] = [fn, emitter._events[event]];
    }
    function ReadableState(options, stream) {
      Duplex = Duplex || require_stream_duplex();
      options = options || {};
      var isDuplex = stream instanceof Duplex;
      this.objectMode = !!options.objectMode;
      if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
      var hwm = options.highWaterMark;
      var readableHwm = options.readableHighWaterMark;
      var defaultHwm = this.objectMode ? 16 : 16 * 1024;
      if (hwm || hwm === 0) this.highWaterMark = hwm;
      else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;
      else this.highWaterMark = defaultHwm;
      this.highWaterMark = Math.floor(this.highWaterMark);
      this.buffer = new BufferList();
      this.length = 0;
      this.pipes = null;
      this.pipesCount = 0;
      this.flowing = null;
      this.ended = false;
      this.endEmitted = false;
      this.reading = false;
      this.sync = true;
      this.needReadable = false;
      this.emittedReadable = false;
      this.readableListening = false;
      this.resumeScheduled = false;
      this.destroyed = false;
      this.defaultEncoding = options.defaultEncoding || "utf8";
      this.awaitDrain = 0;
      this.readingMore = false;
      this.decoder = null;
      this.encoding = null;
      if (options.encoding) {
        if (!StringDecoder) StringDecoder = __require("string_decoder/").StringDecoder;
        this.decoder = new StringDecoder(options.encoding);
        this.encoding = options.encoding;
      }
    }
    function Readable(options) {
      Duplex = Duplex || require_stream_duplex();
      if (!(this instanceof Readable)) return new Readable(options);
      this._readableState = new ReadableState(options, this);
      this.readable = true;
      if (options) {
        if (typeof options.read === "function") this._read = options.read;
        if (typeof options.destroy === "function") this._destroy = options.destroy;
      }
      Stream.call(this);
    }
    Object.defineProperty(Readable.prototype, "destroyed", {
      get: function() {
        if (this._readableState === void 0) {
          return false;
        }
        return this._readableState.destroyed;
      },
      set: function(value) {
        if (!this._readableState) {
          return;
        }
        this._readableState.destroyed = value;
      }
    });
    Readable.prototype.destroy = destroyImpl.destroy;
    Readable.prototype._undestroy = destroyImpl.undestroy;
    Readable.prototype._destroy = function(err, cb) {
      this.push(null);
      cb(err);
    };
    Readable.prototype.push = function(chunk, encoding) {
      var state = this._readableState;
      var skipChunkCheck;
      if (!state.objectMode) {
        if (typeof chunk === "string") {
          encoding = encoding || state.defaultEncoding;
          if (encoding !== state.encoding) {
            chunk = Buffer2.from(chunk, encoding);
            encoding = "";
          }
          skipChunkCheck = true;
        }
      } else {
        skipChunkCheck = true;
      }
      return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
    };
    Readable.prototype.unshift = function(chunk) {
      return readableAddChunk(this, chunk, null, true, false);
    };
    function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
      var state = stream._readableState;
      if (chunk === null) {
        state.reading = false;
        onEofChunk(stream, state);
      } else {
        var er;
        if (!skipChunkCheck) er = chunkInvalid(state, chunk);
        if (er) {
          stream.emit("error", er);
        } else if (state.objectMode || chunk && chunk.length > 0) {
          if (typeof chunk !== "string" && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer2.prototype) {
            chunk = _uint8ArrayToBuffer(chunk);
          }
          if (addToFront) {
            if (state.endEmitted) stream.emit("error", new Error("stream.unshift() after end event"));
            else addChunk(stream, state, chunk, true);
          } else if (state.ended) {
            stream.emit("error", new Error("stream.push() after EOF"));
          } else {
            state.reading = false;
            if (state.decoder && !encoding) {
              chunk = state.decoder.write(chunk);
              if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);
              else maybeReadMore(stream, state);
            } else {
              addChunk(stream, state, chunk, false);
            }
          }
        } else if (!addToFront) {
          state.reading = false;
        }
      }
      return needMoreData(state);
    }
    function addChunk(stream, state, chunk, addToFront) {
      if (state.flowing && state.length === 0 && !state.sync) {
        stream.emit("data", chunk);
        stream.read(0);
      } else {
        state.length += state.objectMode ? 1 : chunk.length;
        if (addToFront) state.buffer.unshift(chunk);
        else state.buffer.push(chunk);
        if (state.needReadable) emitReadable(stream);
      }
      maybeReadMore(stream, state);
    }
    function chunkInvalid(state, chunk) {
      var er;
      if (!_isUint8Array(chunk) && typeof chunk !== "string" && chunk !== void 0 && !state.objectMode) {
        er = new TypeError("Invalid non-string/buffer chunk");
      }
      return er;
    }
    function needMoreData(state) {
      return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
    }
    Readable.prototype.isPaused = function() {
      return this._readableState.flowing === false;
    };
    Readable.prototype.setEncoding = function(enc) {
      if (!StringDecoder) StringDecoder = __require("string_decoder/").StringDecoder;
      this._readableState.decoder = new StringDecoder(enc);
      this._readableState.encoding = enc;
      return this;
    };
    var MAX_HWM = 8388608;
    function computeNewHighWaterMark(n) {
      if (n >= MAX_HWM) {
        n = MAX_HWM;
      } else {
        n--;
        n |= n >>> 1;
        n |= n >>> 2;
        n |= n >>> 4;
        n |= n >>> 8;
        n |= n >>> 16;
        n++;
      }
      return n;
    }
    function howMuchToRead(n, state) {
      if (n <= 0 || state.length === 0 && state.ended) return 0;
      if (state.objectMode) return 1;
      if (n !== n) {
        if (state.flowing && state.length) return state.buffer.head.data.length;
        else return state.length;
      }
      if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
      if (n <= state.length) return n;
      if (!state.ended) {
        state.needReadable = true;
        return 0;
      }
      return state.length;
    }
    Readable.prototype.read = function(n) {
      debug("read", n);
      n = parseInt(n, 10);
      var state = this._readableState;
      var nOrig = n;
      if (n !== 0) state.emittedReadable = false;
      if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
        debug("read: emitReadable", state.length, state.ended);
        if (state.length === 0 && state.ended) endReadable(this);
        else emitReadable(this);
        return null;
      }
      n = howMuchToRead(n, state);
      if (n === 0 && state.ended) {
        if (state.length === 0) endReadable(this);
        return null;
      }
      var doRead = state.needReadable;
      debug("need readable", doRead);
      if (state.length === 0 || state.length - n < state.highWaterMark) {
        doRead = true;
        debug("length less than watermark", doRead);
      }
      if (state.ended || state.reading) {
        doRead = false;
        debug("reading or ended", doRead);
      } else if (doRead) {
        debug("do read");
        state.reading = true;
        state.sync = true;
        if (state.length === 0) state.needReadable = true;
        this._read(state.highWaterMark);
        state.sync = false;
        if (!state.reading) n = howMuchToRead(nOrig, state);
      }
      var ret;
      if (n > 0) ret = fromList(n, state);
      else ret = null;
      if (ret === null) {
        state.needReadable = true;
        n = 0;
      } else {
        state.length -= n;
      }
      if (state.length === 0) {
        if (!state.ended) state.needReadable = true;
        if (nOrig !== n && state.ended) endReadable(this);
      }
      if (ret !== null) this.emit("data", ret);
      return ret;
    };
    function onEofChunk(stream, state) {
      if (state.ended) return;
      if (state.decoder) {
        var chunk = state.decoder.end();
        if (chunk && chunk.length) {
          state.buffer.push(chunk);
          state.length += state.objectMode ? 1 : chunk.length;
        }
      }
      state.ended = true;
      emitReadable(stream);
    }
    function emitReadable(stream) {
      var state = stream._readableState;
      state.needReadable = false;
      if (!state.emittedReadable) {
        debug("emitReadable", state.flowing);
        state.emittedReadable = true;
        if (state.sync) pna.nextTick(emitReadable_, stream);
        else emitReadable_(stream);
      }
    }
    function emitReadable_(stream) {
      debug("emit readable");
      stream.emit("readable");
      flow(stream);
    }
    function maybeReadMore(stream, state) {
      if (!state.readingMore) {
        state.readingMore = true;
        pna.nextTick(maybeReadMore_, stream, state);
      }
    }
    function maybeReadMore_(stream, state) {
      var len = state.length;
      while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
        debug("maybeReadMore read 0");
        stream.read(0);
        if (len === state.length)
          break;
        else len = state.length;
      }
      state.readingMore = false;
    }
    Readable.prototype._read = function(n) {
      this.emit("error", new Error("_read() is not implemented"));
    };
    Readable.prototype.pipe = function(dest, pipeOpts) {
      var src = this;
      var state = this._readableState;
      switch (state.pipesCount) {
        case 0:
          state.pipes = dest;
          break;
        case 1:
          state.pipes = [state.pipes, dest];
          break;
        default:
          state.pipes.push(dest);
          break;
      }
      state.pipesCount += 1;
      debug("pipe count=%d opts=%j", state.pipesCount, pipeOpts);
      var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
      var endFn = doEnd ? onend : unpipe;
      if (state.endEmitted) pna.nextTick(endFn);
      else src.once("end", endFn);
      dest.on("unpipe", onunpipe);
      function onunpipe(readable, unpipeInfo) {
        debug("onunpipe");
        if (readable === src) {
          if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
            unpipeInfo.hasUnpiped = true;
            cleanup();
          }
        }
      }
      function onend() {
        debug("onend");
        dest.end();
      }
      var ondrain = pipeOnDrain(src);
      dest.on("drain", ondrain);
      var cleanedUp = false;
      function cleanup() {
        debug("cleanup");
        dest.removeListener("close", onclose);
        dest.removeListener("finish", onfinish);
        dest.removeListener("drain", ondrain);
        dest.removeListener("error", onerror);
        dest.removeListener("unpipe", onunpipe);
        src.removeListener("end", onend);
        src.removeListener("end", unpipe);
        src.removeListener("data", ondata);
        cleanedUp = true;
        if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
      }
      var increasedAwaitDrain = false;
      src.on("data", ondata);
      function ondata(chunk) {
        debug("ondata");
        increasedAwaitDrain = false;
        var ret = dest.write(chunk);
        if (false === ret && !increasedAwaitDrain) {
          if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
            debug("false write response, pause", state.awaitDrain);
            state.awaitDrain++;
            increasedAwaitDrain = true;
          }
          src.pause();
        }
      }
      function onerror(er) {
        debug("onerror", er);
        unpipe();
        dest.removeListener("error", onerror);
        if (EElistenerCount(dest, "error") === 0) dest.emit("error", er);
      }
      prependListener(dest, "error", onerror);
      function onclose() {
        dest.removeListener("finish", onfinish);
        unpipe();
      }
      dest.once("close", onclose);
      function onfinish() {
        debug("onfinish");
        dest.removeListener("close", onclose);
        unpipe();
      }
      dest.once("finish", onfinish);
      function unpipe() {
        debug("unpipe");
        src.unpipe(dest);
      }
      dest.emit("pipe", src);
      if (!state.flowing) {
        debug("pipe resume");
        src.resume();
      }
      return dest;
    };
    function pipeOnDrain(src) {
      return function() {
        var state = src._readableState;
        debug("pipeOnDrain", state.awaitDrain);
        if (state.awaitDrain) state.awaitDrain--;
        if (state.awaitDrain === 0 && EElistenerCount(src, "data")) {
          state.flowing = true;
          flow(src);
        }
      };
    }
    Readable.prototype.unpipe = function(dest) {
      var state = this._readableState;
      var unpipeInfo = { hasUnpiped: false };
      if (state.pipesCount === 0) return this;
      if (state.pipesCount === 1) {
        if (dest && dest !== state.pipes) return this;
        if (!dest) dest = state.pipes;
        state.pipes = null;
        state.pipesCount = 0;
        state.flowing = false;
        if (dest) dest.emit("unpipe", this, unpipeInfo);
        return this;
      }
      if (!dest) {
        var dests = state.pipes;
        var len = state.pipesCount;
        state.pipes = null;
        state.pipesCount = 0;
        state.flowing = false;
        for (var i = 0; i < len; i++) {
          dests[i].emit("unpipe", this, { hasUnpiped: false });
        }
        return this;
      }
      var index = indexOf(state.pipes, dest);
      if (index === -1) return this;
      state.pipes.splice(index, 1);
      state.pipesCount -= 1;
      if (state.pipesCount === 1) state.pipes = state.pipes[0];
      dest.emit("unpipe", this, unpipeInfo);
      return this;
    };
    Readable.prototype.on = function(ev, fn) {
      var res = Stream.prototype.on.call(this, ev, fn);
      if (ev === "data") {
        if (this._readableState.flowing !== false) this.resume();
      } else if (ev === "readable") {
        var state = this._readableState;
        if (!state.endEmitted && !state.readableListening) {
          state.readableListening = state.needReadable = true;
          state.emittedReadable = false;
          if (!state.reading) {
            pna.nextTick(nReadingNextTick, this);
          } else if (state.length) {
            emitReadable(this);
          }
        }
      }
      return res;
    };
    Readable.prototype.addListener = Readable.prototype.on;
    function nReadingNextTick(self2) {
      debug("readable nexttick read 0");
      self2.read(0);
    }
    Readable.prototype.resume = function() {
      var state = this._readableState;
      if (!state.flowing) {
        debug("resume");
        state.flowing = true;
        resume(this, state);
      }
      return this;
    };
    function resume(stream, state) {
      if (!state.resumeScheduled) {
        state.resumeScheduled = true;
        pna.nextTick(resume_, stream, state);
      }
    }
    function resume_(stream, state) {
      if (!state.reading) {
        debug("resume read 0");
        stream.read(0);
      }
      state.resumeScheduled = false;
      state.awaitDrain = 0;
      stream.emit("resume");
      flow(stream);
      if (state.flowing && !state.reading) stream.read(0);
    }
    Readable.prototype.pause = function() {
      debug("call pause flowing=%j", this._readableState.flowing);
      if (false !== this._readableState.flowing) {
        debug("pause");
        this._readableState.flowing = false;
        this.emit("pause");
      }
      return this;
    };
    function flow(stream) {
      var state = stream._readableState;
      debug("flow", state.flowing);
      while (state.flowing && stream.read() !== null) {
      }
    }
    Readable.prototype.wrap = function(stream) {
      var _this = this;
      var state = this._readableState;
      var paused = false;
      stream.on("end", function() {
        debug("wrapped end");
        if (state.decoder && !state.ended) {
          var chunk = state.decoder.end();
          if (chunk && chunk.length) _this.push(chunk);
        }
        _this.push(null);
      });
      stream.on("data", function(chunk) {
        debug("wrapped data");
        if (state.decoder) chunk = state.decoder.write(chunk);
        if (state.objectMode && (chunk === null || chunk === void 0)) return;
        else if (!state.objectMode && (!chunk || !chunk.length)) return;
        var ret = _this.push(chunk);
        if (!ret) {
          paused = true;
          stream.pause();
        }
      });
      for (var i in stream) {
        if (this[i] === void 0 && typeof stream[i] === "function") {
          this[i] = /* @__PURE__ */ function(method) {
            return function() {
              return stream[method].apply(stream, arguments);
            };
          }(i);
        }
      }
      for (var n = 0; n < kProxyEvents.length; n++) {
        stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));
      }
      this._read = function(n2) {
        debug("wrapped _read", n2);
        if (paused) {
          paused = false;
          stream.resume();
        }
      };
      return this;
    };
    Object.defineProperty(Readable.prototype, "readableHighWaterMark", {
      // making it explicit this property is not enumerable
      // because otherwise some prototype manipulation in
      // userland will fail
      enumerable: false,
      get: function() {
        return this._readableState.highWaterMark;
      }
    });
    Readable._fromList = fromList;
    function fromList(n, state) {
      if (state.length === 0) return null;
      var ret;
      if (state.objectMode) ret = state.buffer.shift();
      else if (!n || n >= state.length) {
        if (state.decoder) ret = state.buffer.join("");
        else if (state.buffer.length === 1) ret = state.buffer.head.data;
        else ret = state.buffer.concat(state.length);
        state.buffer.clear();
      } else {
        ret = fromListPartial(n, state.buffer, state.decoder);
      }
      return ret;
    }
    function fromListPartial(n, list, hasStrings) {
      var ret;
      if (n < list.head.data.length) {
        ret = list.head.data.slice(0, n);
        list.head.data = list.head.data.slice(n);
      } else if (n === list.head.data.length) {
        ret = list.shift();
      } else {
        ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
      }
      return ret;
    }
    function copyFromBufferString(n, list) {
      var p = list.head;
      var c = 1;
      var ret = p.data;
      n -= ret.length;
      while (p = p.next) {
        var str = p.data;
        var nb = n > str.length ? str.length : n;
        if (nb === str.length) ret += str;
        else ret += str.slice(0, n);
        n -= nb;
        if (n === 0) {
          if (nb === str.length) {
            ++c;
            if (p.next) list.head = p.next;
            else list.head = list.tail = null;
          } else {
            list.head = p;
            p.data = str.slice(nb);
          }
          break;
        }
        ++c;
      }
      list.length -= c;
      return ret;
    }
    function copyFromBuffer(n, list) {
      var ret = Buffer2.allocUnsafe(n);
      var p = list.head;
      var c = 1;
      p.data.copy(ret);
      n -= p.data.length;
      while (p = p.next) {
        var buf = p.data;
        var nb = n > buf.length ? buf.length : n;
        buf.copy(ret, ret.length - n, 0, nb);
        n -= nb;
        if (n === 0) {
          if (nb === buf.length) {
            ++c;
            if (p.next) list.head = p.next;
            else list.head = list.tail = null;
          } else {
            list.head = p;
            p.data = buf.slice(nb);
          }
          break;
        }
        ++c;
      }
      list.length -= c;
      return ret;
    }
    function endReadable(stream) {
      var state = stream._readableState;
      if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
      if (!state.endEmitted) {
        state.ended = true;
        pna.nextTick(endReadableNT, state, stream);
      }
    }
    function endReadableNT(state, stream) {
      if (!state.endEmitted && state.length === 0) {
        state.endEmitted = true;
        stream.readable = false;
        stream.emit("end");
      }
    }
    function indexOf(xs, x) {
      for (var i = 0, l = xs.length; i < l; i++) {
        if (xs[i] === x) return i;
      }
      return -1;
    }
  }
});

// node_modules/readable-stream/lib/_stream_transform.js
var require_stream_transform = __commonJS({
  "node_modules/readable-stream/lib/_stream_transform.js"(exports, module) {
    "use strict";
    module.exports = Transform;
    var Duplex = require_stream_duplex();
    var util = Object.create(require_util());
    util.inherits = require_inherits();
    util.inherits(Transform, Duplex);
    function afterTransform(er, data) {
      var ts = this._transformState;
      ts.transforming = false;
      var cb = ts.writecb;
      if (!cb) {
        return this.emit("error", new Error("write callback called multiple times"));
      }
      ts.writechunk = null;
      ts.writecb = null;
      if (data != null)
        this.push(data);
      cb(er);
      var rs = this._readableState;
      rs.reading = false;
      if (rs.needReadable || rs.length < rs.highWaterMark) {
        this._read(rs.highWaterMark);
      }
    }
    function Transform(options) {
      if (!(this instanceof Transform)) return new Transform(options);
      Duplex.call(this, options);
      this._transformState = {
        afterTransform: afterTransform.bind(this),
        needTransform: false,
        transforming: false,
        writecb: null,
        writechunk: null,
        writeencoding: null
      };
      this._readableState.needReadable = true;
      this._readableState.sync = false;
      if (options) {
        if (typeof options.transform === "function") this._transform = options.transform;
        if (typeof options.flush === "function") this._flush = options.flush;
      }
      this.on("prefinish", prefinish);
    }
    function prefinish() {
      var _this = this;
      if (typeof this._flush === "function") {
        this._flush(function(er, data) {
          done(_this, er, data);
        });
      } else {
        done(this, null, null);
      }
    }
    Transform.prototype.push = function(chunk, encoding) {
      this._transformState.needTransform = false;
      return Duplex.prototype.push.call(this, chunk, encoding);
    };
    Transform.prototype._transform = function(chunk, encoding, cb) {
      throw new Error("_transform() is not implemented");
    };
    Transform.prototype._write = function(chunk, encoding, cb) {
      var ts = this._transformState;
      ts.writecb = cb;
      ts.writechunk = chunk;
      ts.writeencoding = encoding;
      if (!ts.transforming) {
        var rs = this._readableState;
        if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
      }
    };
    Transform.prototype._read = function(n) {
      var ts = this._transformState;
      if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
        ts.transforming = true;
        this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
      } else {
        ts.needTransform = true;
      }
    };
    Transform.prototype._destroy = function(err, cb) {
      var _this2 = this;
      Duplex.prototype._destroy.call(this, err, function(err2) {
        cb(err2);
        _this2.emit("close");
      });
    };
    function done(stream, er, data) {
      if (er) return stream.emit("error", er);
      if (data != null)
        stream.push(data);
      if (stream._writableState.length) throw new Error("Calling transform done when ws.length != 0");
      if (stream._transformState.transforming) throw new Error("Calling transform done when still transforming");
      return stream.push(null);
    }
  }
});

// node_modules/readable-stream/lib/_stream_passthrough.js
var require_stream_passthrough = __commonJS({
  "node_modules/readable-stream/lib/_stream_passthrough.js"(exports, module) {
    "use strict";
    module.exports = PassThrough;
    var Transform = require_stream_transform();
    var util = Object.create(require_util());
    util.inherits = require_inherits();
    util.inherits(PassThrough, Transform);
    function PassThrough(options) {
      if (!(this instanceof PassThrough)) return new PassThrough(options);
      Transform.call(this, options);
    }
    PassThrough.prototype._transform = function(chunk, encoding, cb) {
      cb(null, chunk);
    };
  }
});

// node_modules/readable-stream/readable.js
var require_readable = __commonJS({
  "node_modules/readable-stream/readable.js"(exports, module) {
    var Stream = __require("stream");
    if (process.env.READABLE_STREAM === "disable" && Stream) {
      module.exports = Stream;
      exports = module.exports = Stream.Readable;
      exports.Readable = Stream.Readable;
      exports.Writable = Stream.Writable;
      exports.Duplex = Stream.Duplex;
      exports.Transform = Stream.Transform;
      exports.PassThrough = Stream.PassThrough;
      exports.Stream = Stream;
    } else {
      exports = module.exports = require_stream_readable();
      exports.Stream = Stream || exports;
      exports.Readable = exports;
      exports.Writable = require_stream_writable();
      exports.Duplex = require_stream_duplex();
      exports.Transform = require_stream_transform();
      exports.PassThrough = require_stream_passthrough();
    }
  }
});

// node_modules/jszip/lib/support.js
var require_support = __commonJS({
  "node_modules/jszip/lib/support.js"(exports) {
    "use strict";
    exports.base64 = true;
    exports.array = true;
    exports.string = true;
    exports.arraybuffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined";
    exports.nodebuffer = typeof Buffer !== "undefined";
    exports.uint8array = typeof Uint8Array !== "undefined";
    if (typeof ArrayBuffer === "undefined") {
      exports.blob = false;
    } else {
      buffer = new ArrayBuffer(0);
      try {
        exports.blob = new Blob([buffer], {
          type: "application/zip"
        }).size === 0;
      } catch (e) {
        try {
          Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;
          builder = new Builder();
          builder.append(buffer);
          exports.blob = builder.getBlob("application/zip").size === 0;
        } catch (e2) {
          exports.blob = false;
        }
      }
    }
    var buffer;
    var Builder;
    var builder;
    try {
      exports.nodestream = !!require_readable().Readable;
    } catch (e) {
      exports.nodestream = false;
    }
  }
});

// node_modules/jszip/lib/base64.js
var require_base64 = __commonJS({
  "node_modules/jszip/lib/base64.js"(exports) {
    "use strict";
    var utils = require_utils();
    var support = require_support();
    var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    exports.encode = function(input) {
      var output = [];
      var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
      var i = 0, len = input.length, remainingBytes = len;
      var isArray = utils.getTypeOf(input) !== "string";
      while (i < input.length) {
        remainingBytes = len - i;
        if (!isArray) {
          chr1 = input.charCodeAt(i++);
          chr2 = i < len ? input.charCodeAt(i++) : 0;
          chr3 = i < len ? input.charCodeAt(i++) : 0;
        } else {
          chr1 = input[i++];
          chr2 = i < len ? input[i++] : 0;
          chr3 = i < len ? input[i++] : 0;
        }
        enc1 = chr1 >> 2;
        enc2 = (chr1 & 3) << 4 | chr2 >> 4;
        enc3 = remainingBytes > 1 ? (chr2 & 15) << 2 | chr3 >> 6 : 64;
        enc4 = remainingBytes > 2 ? chr3 & 63 : 64;
        output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4));
      }
      return output.join("");
    };
    exports.decode = function(input) {
      var chr1, chr2, chr3;
      var enc1, enc2, enc3, enc4;
      var i = 0, resultIndex = 0;
      var dataUrlPrefix = "data:";
      if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) {
        throw new Error("Invalid base64 input, it looks like a data url.");
      }
      input = input.replace(/[^A-Za-z0-9+/=]/g, "");
      var totalLength = input.length * 3 / 4;
      if (input.charAt(input.length - 1) === _keyStr.charAt(64)) {
        totalLength--;
      }
      if (input.charAt(input.length - 2) === _keyStr.charAt(64)) {
        totalLength--;
      }
      if (totalLength % 1 !== 0) {
        throw new Error("Invalid base64 input, bad content length.");
      }
      var output;
      if (support.uint8array) {
        output = new Uint8Array(totalLength | 0);
      } else {
        output = new Array(totalLength | 0);
      }
      while (i < input.length) {
        enc1 = _keyStr.indexOf(input.charAt(i++));
        enc2 = _keyStr.indexOf(input.charAt(i++));
        enc3 = _keyStr.indexOf(input.charAt(i++));
        enc4 = _keyStr.indexOf(input.charAt(i++));
        chr1 = enc1 << 2 | enc2 >> 4;
        chr2 = (enc2 & 15) << 4 | enc3 >> 2;
        chr3 = (enc3 & 3) << 6 | enc4;
        output[resultIndex++] = chr1;
        if (enc3 !== 64) {
          output[resultIndex++] = chr2;
        }
        if (enc4 !== 64) {
          output[resultIndex++] = chr3;
        }
      }
      return output;
    };
  }
});

// node_modules/jszip/lib/nodejsUtils.js
var require_nodejsUtils = __commonJS({
  "node_modules/jszip/lib/nodejsUtils.js"(exports, module) {
    "use strict";
    module.exports = {
      /**
       * True if this is running in Nodejs, will be undefined in a browser.
       * In a browser, browserify won't include this file and the whole module
       * will be resolved an empty object.
       */
      isNode: typeof Buffer !== "undefined",
      /**
       * Create a new nodejs Buffer from an existing content.
       * @param {Object} data the data to pass to the constructor.
       * @param {String} encoding the encoding to use.
       * @return {Buffer} a new Buffer.
       */
      newBufferFrom: function(data, encoding) {
        if (Buffer.from && Buffer.from !== Uint8Array.from) {
          return Buffer.from(data, encoding);
        } else {
          if (typeof data === "number") {
            throw new Error('The "data" argument must not be a number');
          }
          return new Buffer(data, encoding);
        }
      },
      /**
       * Create a new nodejs Buffer with the specified size.
       * @param {Integer} size the size of the buffer.
       * @return {Buffer} a new Buffer.
       */
      allocBuffer: function(size) {
        if (Buffer.alloc) {
          return Buffer.alloc(size);
        } else {
          var buf = new Buffer(size);
          buf.fill(0);
          return buf;
        }
      },
      /**
       * Find out if an object is a Buffer.
       * @param {Object} b the object to test.
       * @return {Boolean} true if the object is a Buffer, false otherwise.
       */
      isBuffer: function(b) {
        return Buffer.isBuffer(b);
      },
      isStream: function(obj) {
        return obj && typeof obj.on === "function" && typeof obj.pause === "function" && typeof obj.resume === "function";
      }
    };
  }
});

// node_modules/immediate/lib/index.js
var require_lib = __commonJS({
  "node_modules/immediate/lib/index.js"(exports, module) {
    "use strict";
    var Mutation = global.MutationObserver || global.WebKitMutationObserver;
    var scheduleDrain;
    if (process.browser) {
      if (Mutation) {
        called = 0;
        observer = new Mutation(nextTick);
        element = global.document.createTextNode("");
        observer.observe(element, {
          characterData: true
        });
        scheduleDrain = function() {
          element.data = called = ++called % 2;
        };
      } else if (!global.setImmediate && typeof global.MessageChannel !== "undefined") {
        channel = new global.MessageChannel();
        channel.port1.onmessage = nextTick;
        scheduleDrain = function() {
          channel.port2.postMessage(0);
        };
      } else if ("document" in global && "onreadystatechange" in global.document.createElement("script")) {
        scheduleDrain = function() {
          var scriptEl = global.document.createElement("script");
          scriptEl.onreadystatechange = function() {
            nextTick();
            scriptEl.onreadystatechange = null;
            scriptEl.parentNode.removeChild(scriptEl);
            scriptEl = null;
          };
          global.document.documentElement.appendChild(scriptEl);
        };
      } else {
        scheduleDrain = function() {
          setTimeout(nextTick, 0);
        };
      }
    } else {
      scheduleDrain = function() {
        process.nextTick(nextTick);
      };
    }
    var called;
    var observer;
    var element;
    var channel;
    var draining;
    var queue = [];
    function nextTick() {
      draining = true;
      var i, oldQueue;
      var len = queue.length;
      while (len) {
        oldQueue = queue;
        queue = [];
        i = -1;
        while (++i < len) {
          oldQueue[i]();
        }
        len = queue.length;
      }
      draining = false;
    }
    module.exports = immediate;
    function immediate(task) {
      if (queue.push(task) === 1 && !draining) {
        scheduleDrain();
      }
    }
  }
});

// node_modules/lie/lib/index.js
var require_lib2 = __commonJS({
  "node_modules/lie/lib/index.js"(exports, module) {
    "use strict";
    var immediate = require_lib();
    function INTERNAL() {
    }
    var handlers = {};
    var REJECTED = ["REJECTED"];
    var FULFILLED = ["FULFILLED"];
    var PENDING = ["PENDING"];
    if (!process.browser) {
      UNHANDLED = ["UNHANDLED"];
    }
    var UNHANDLED;
    module.exports = Promise2;
    function Promise2(resolver) {
      if (typeof resolver !== "function") {
        throw new TypeError("resolver must be a function");
      }
      this.state = PENDING;
      this.queue = [];
      this.outcome = void 0;
      if (!process.browser) {
        this.handled = UNHANDLED;
      }
      if (resolver !== INTERNAL) {
        safelyResolveThenable(this, resolver);
      }
    }
    Promise2.prototype.finally = function(callback) {
      if (typeof callback !== "function") {
        return this;
      }
      var p = this.constructor;
      return this.then(resolve2, reject2);
      function resolve2(value) {
        function yes() {
          return value;
        }
        return p.resolve(callback()).then(yes);
      }
      function reject2(reason) {
        function no() {
          throw reason;
        }
        return p.resolve(callback()).then(no);
      }
    };
    Promise2.prototype.catch = function(onRejected) {
      return this.then(null, onRejected);
    };
    Promise2.prototype.then = function(onFulfilled, onRejected) {
      if (typeof onFulfilled !== "function" && this.state === FULFILLED || typeof onRejected !== "function" && this.state === REJECTED) {
        return this;
      }
      var promise = new this.constructor(INTERNAL);
      if (!process.browser) {
        if (this.handled === UNHANDLED) {
          this.handled = null;
        }
      }
      if (this.state !== PENDING) {
        var resolver = this.state === FULFILLED ? onFulfilled : onRejected;
        unwrap(promise, resolver, this.outcome);
      } else {
        this.queue.push(new QueueItem(promise, onFulfilled, onRejected));
      }
      return promise;
    };
    function QueueItem(promise, onFulfilled, onRejected) {
      this.promise = promise;
      if (typeof onFulfilled === "function") {
        this.onFulfilled = onFulfilled;
        this.callFulfilled = this.otherCallFulfilled;
      }
      if (typeof onRejected === "function") {
        this.onRejected = onRejected;
        this.callRejected = this.otherCallRejected;
      }
    }
    QueueItem.prototype.callFulfilled = function(value) {
      handlers.resolve(this.promise, value);
    };
    QueueItem.prototype.otherCallFulfilled = function(value) {
      unwrap(this.promise, this.onFulfilled, value);
    };
    QueueItem.prototype.callRejected = function(value) {
      handlers.reject(this.promise, value);
    };
    QueueItem.prototype.otherCallRejected = function(value) {
      unwrap(this.promise, this.onRejected, value);
    };
    function unwrap(promise, func, value) {
      immediate(function() {
        var returnValue;
        try {
          returnValue = func(value);
        } catch (e) {
          return handlers.reject(promise, e);
        }
        if (returnValue === promise) {
          handlers.reject(promise, new TypeError("Cannot resolve promise with itself"));
        } else {
          handlers.resolve(promise, returnValue);
        }
      });
    }
    handlers.resolve = function(self2, value) {
      var result = tryCatch(getThen, value);
      if (result.status === "error") {
        return handlers.reject(self2, result.value);
      }
      var thenable = result.value;
      if (thenable) {
        safelyResolveThenable(self2, thenable);
      } else {
        self2.state = FULFILLED;
        self2.outcome = value;
        var i = -1;
        var len = self2.queue.length;
        while (++i < len) {
          self2.queue[i].callFulfilled(value);
        }
      }
      return self2;
    };
    handlers.reject = function(self2, error) {
      self2.state = REJECTED;
      self2.outcome = error;
      if (!process.browser) {
        if (self2.handled === UNHANDLED) {
          immediate(function() {
            if (self2.handled === UNHANDLED) {
              process.emit("unhandledRejection", error, self2);
            }
          });
        }
      }
      var i = -1;
      var len = self2.queue.length;
      while (++i < len) {
        self2.queue[i].callRejected(error);
      }
      return self2;
    };
    function getThen(obj) {
      var then = obj && obj.then;
      if (obj && (typeof obj === "object" || typeof obj === "function") && typeof then === "function") {
        return function appyThen() {
          then.apply(obj, arguments);
        };
      }
    }
    function safelyResolveThenable(self2, thenable) {
      var called = false;
      function onError(value) {
        if (called) {
          return;
        }
        called = true;
        handlers.reject(self2, value);
      }
      function onSuccess(value) {
        if (called) {
          return;
        }
        called = true;
        handlers.resolve(self2, value);
      }
      function tryToUnwrap() {
        thenable(onSuccess, onError);
      }
      var result = tryCatch(tryToUnwrap);
      if (result.status === "error") {
        onError(result.value);
      }
    }
    function tryCatch(func, value) {
      var out = {};
      try {
        out.value = func(value);
        out.status = "success";
      } catch (e) {
        out.status = "error";
        out.value = e;
      }
      return out;
    }
    Promise2.resolve = resolve;
    function resolve(value) {
      if (value instanceof this) {
        return value;
      }
      return handlers.resolve(new this(INTERNAL), value);
    }
    Promise2.reject = reject;
    function reject(reason) {
      var promise = new this(INTERNAL);
      return handlers.reject(promise, reason);
    }
    Promise2.all = all;
    function all(iterable) {
      var self2 = this;
      if (Object.prototype.toString.call(iterable) !== "[object Array]") {
        return this.reject(new TypeError("must be an array"));
      }
      var len = iterable.length;
      var called = false;
      if (!len) {
        return this.resolve([]);
      }
      var values = new Array(len);
      var resolved = 0;
      var i = -1;
      var promise = new this(INTERNAL);
      while (++i < len) {
        allResolver(iterable[i], i);
      }
      return promise;
      function allResolver(value, i2) {
        self2.resolve(value).then(resolveFromAll, function(error) {
          if (!called) {
            called = true;
            handlers.reject(promise, error);
          }
        });
        function resolveFromAll(outValue) {
          values[i2] = outValue;
          if (++resolved === len && !called) {
            called = true;
            handlers.resolve(promise, values);
          }
        }
      }
    }
    Promise2.race = race;
    function race(iterable) {
      var self2 = this;
      if (Object.prototype.toString.call(iterable) !== "[object Array]") {
        return this.reject(new TypeError("must be an array"));
      }
      var len = iterable.length;
      var called = false;
      if (!len) {
        return this.resolve([]);
      }
      var i = -1;
      var promise = new this(INTERNAL);
      while (++i < len) {
        resolver(iterable[i]);
      }
      return promise;
      function resolver(value) {
        self2.resolve(value).then(function(response) {
          if (!called) {
            called = true;
            handlers.resolve(promise, response);
          }
        }, function(error) {
          if (!called) {
            called = true;
            handlers.reject(promise, error);
          }
        });
      }
    }
  }
});

// node_modules/jszip/lib/external.js
var require_external = __commonJS({
  "node_modules/jszip/lib/external.js"(exports, module) {
    "use strict";
    var ES6Promise = null;
    if (typeof Promise !== "undefined") {
      ES6Promise = Promise;
    } else {
      ES6Promise = require_lib2();
    }
    module.exports = {
      Promise: ES6Promise
    };
  }
});

// node_modules/setimmediate/setImmediate.js
var require_setImmediate = __commonJS({
  "node_modules/setimmediate/setImmediate.js"(exports) {
    (function(global2, undefined2) {
      "use strict";
      if (global2.setImmediate) {
        return;
      }
      var nextHandle = 1;
      var tasksByHandle = {};
      var currentlyRunningATask = false;
      var doc = global2.document;
      var registerImmediate;
      function setImmediate2(callback) {
        if (typeof callback !== "function") {
          callback = new Function("" + callback);
        }
        var args = new Array(arguments.length - 1);
        for (var i = 0; i < args.length; i++) {
          args[i] = arguments[i + 1];
        }
        var task = { callback, args };
        tasksByHandle[nextHandle] = task;
        registerImmediate(nextHandle);
        return nextHandle++;
      }
      function clearImmediate(handle) {
        delete tasksByHandle[handle];
      }
      function run(task) {
        var callback = task.callback;
        var args = task.args;
        switch (args.length) {
          case 0:
            callback();
            break;
          case 1:
            callback(args[0]);
            break;
          case 2:
            callback(args[0], args[1]);
            break;
          case 3:
            callback(args[0], args[1], args[2]);
            break;
          default:
            callback.apply(undefined2, args);
            break;
        }
      }
      function runIfPresent(handle) {
        if (currentlyRunningATask) {
          setTimeout(runIfPresent, 0, handle);
        } else {
          var task = tasksByHandle[handle];
          if (task) {
            currentlyRunningATask = true;
            try {
              run(task);
            } finally {
              clearImmediate(handle);
              currentlyRunningATask = false;
            }
          }
        }
      }
      function installNextTickImplementation() {
        registerImmediate = function(handle) {
          process.nextTick(function() {
            runIfPresent(handle);
          });
        };
      }
      function canUsePostMessage() {
        if (global2.postMessage && !global2.importScripts) {
          var postMessageIsAsynchronous = true;
          var oldOnMessage = global2.onmessage;
          global2.onmessage = function() {
            postMessageIsAsynchronous = false;
          };
          global2.postMessage("", "*");
          global2.onmessage = oldOnMessage;
          return postMessageIsAsynchronous;
        }
      }
      function installPostMessageImplementation() {
        var messagePrefix = "setImmediate$" + Math.random() + "$";
        var onGlobalMessage = function(event) {
          if (event.source === global2 && typeof event.data === "string" && event.data.indexOf(messagePrefix) === 0) {
            runIfPresent(+event.data.slice(messagePrefix.length));
          }
        };
        if (global2.addEventListener) {
          global2.addEventListener("message", onGlobalMessage, false);
        } else {
          global2.attachEvent("onmessage", onGlobalMessage);
        }
        registerImmediate = function(handle) {
          global2.postMessage(messagePrefix + handle, "*");
        };
      }
      function installMessageChannelImplementation() {
        var channel = new MessageChannel();
        channel.port1.onmessage = function(event) {
          var handle = event.data;
          runIfPresent(handle);
        };
        registerImmediate = function(handle) {
          channel.port2.postMessage(handle);
        };
      }
      function installReadyStateChangeImplementation() {
        var html = doc.documentElement;
        registerImmediate = function(handle) {
          var script = doc.createElement("script");
          script.onreadystatechange = function() {
            runIfPresent(handle);
            script.onreadystatechange = null;
            html.removeChild(script);
            script = null;
          };
          html.appendChild(script);
        };
      }
      function installSetTimeoutImplementation() {
        registerImmediate = function(handle) {
          setTimeout(runIfPresent, 0, handle);
        };
      }
      var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global2);
      attachTo = attachTo && attachTo.setTimeout ? attachTo : global2;
      if ({}.toString.call(global2.process) === "[object process]") {
        installNextTickImplementation();
      } else if (canUsePostMessage()) {
        installPostMessageImplementation();
      } else if (global2.MessageChannel) {
        installMessageChannelImplementation();
      } else if (doc && "onreadystatechange" in doc.createElement("script")) {
        installReadyStateChangeImplementation();
      } else {
        installSetTimeoutImplementation();
      }
      attachTo.setImmediate = setImmediate2;
      attachTo.clearImmediate = clearImmediate;
    })(typeof self === "undefined" ? typeof global === "undefined" ? exports : global : self);
  }
});

// node_modules/jszip/lib/utils.js
var require_utils = __commonJS({
  "node_modules/jszip/lib/utils.js"(exports) {
    "use strict";
    var support = require_support();
    var base64 = require_base64();
    var nodejsUtils = require_nodejsUtils();
    var external = require_external();
    require_setImmediate();
    function string2binary(str) {
      var result = null;
      if (support.uint8array) {
        result = new Uint8Array(str.length);
      } else {
        result = new Array(str.length);
      }
      return stringToArrayLike(str, result);
    }
    exports.newBlob = function(part, type) {
      exports.checkSupport("blob");
      try {
        return new Blob([part], {
          type
        });
      } catch (e) {
        try {
          var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;
          var builder = new Builder();
          builder.append(part);
          return builder.getBlob(type);
        } catch (e2) {
          throw new Error("Bug : can't construct the Blob.");
        }
      }
    };
    function identity(input) {
      return input;
    }
    function stringToArrayLike(str, array) {
      for (var i = 0; i < str.length; ++i) {
        array[i] = str.charCodeAt(i) & 255;
      }
      return array;
    }
    var arrayToStringHelper = {
      /**
       * Transform an array of int into a string, chunk by chunk.
       * See the performances notes on arrayLikeToString.
       * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.
       * @param {String} type the type of the array.
       * @param {Integer} chunk the chunk size.
       * @return {String} the resulting string.
       * @throws Error if the chunk is too big for the stack.
       */
      stringifyByChunk: function(array, type, chunk) {
        var result = [], k = 0, len = array.length;
        if (len <= chunk) {
          return String.fromCharCode.apply(null, array);
        }
        while (k < len) {
          if (type === "array" || type === "nodebuffer") {
            result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));
          } else {
            result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));
          }
          k += chunk;
        }
        return result.join("");
      },
      /**
       * Call String.fromCharCode on every item in the array.
       * This is the naive implementation, which generate A LOT of intermediate string.
       * This should be used when everything else fail.
       * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.
       * @return {String} the result.
       */
      stringifyByChar: function(array) {
        var resultStr = "";
        for (var i = 0; i < array.length; i++) {
          resultStr += String.fromCharCode(array[i]);
        }
        return resultStr;
      },
      applyCanBeUsed: {
        /**
         * true if the browser accepts to use String.fromCharCode on Uint8Array
         */
        uint8array: function() {
          try {
            return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1;
          } catch (e) {
            return false;
          }
        }(),
        /**
         * true if the browser accepts to use String.fromCharCode on nodejs Buffer.
         */
        nodebuffer: function() {
          try {
            return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1;
          } catch (e) {
            return false;
          }
        }()
      }
    };
    function arrayLikeToString(array) {
      var chunk = 65536, type = exports.getTypeOf(array), canUseApply = true;
      if (type === "uint8array") {
        canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array;
      } else if (type === "nodebuffer") {
        canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer;
      }
      if (canUseApply) {
        while (chunk > 1) {
          try {
            return arrayToStringHelper.stringifyByChunk(array, type, chunk);
          } catch (e) {
            chunk = Math.floor(chunk / 2);
          }
        }
      }
      return arrayToStringHelper.stringifyByChar(array);
    }
    exports.applyFromCharCode = arrayLikeToString;
    function arrayLikeToArrayLike(arrayFrom, arrayTo) {
      for (var i = 0; i < arrayFrom.length; i++) {
        arrayTo[i] = arrayFrom[i];
      }
      return arrayTo;
    }
    var transform = {};
    transform["string"] = {
      "string": identity,
      "array": function(input) {
        return stringToArrayLike(input, new Array(input.length));
      },
      "arraybuffer": function(input) {
        return transform["string"]["uint8array"](input).buffer;
      },
      "uint8array": function(input) {
        return stringToArrayLike(input, new Uint8Array(input.length));
      },
      "nodebuffer": function(input) {
        return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length));
      }
    };
    transform["array"] = {
      "string": arrayLikeToString,
      "array": identity,
      "arraybuffer": function(input) {
        return new Uint8Array(input).buffer;
      },
      "uint8array": function(input) {
        return new Uint8Array(input);
      },
      "nodebuffer": function(input) {
        return nodejsUtils.newBufferFrom(input);
      }
    };
    transform["arraybuffer"] = {
      "string": function(input) {
        return arrayLikeToString(new Uint8Array(input));
      },
      "array": function(input) {
        return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength));
      },
      "arraybuffer": identity,
      "uint8array": function(input) {
        return new Uint8Array(input);
      },
      "nodebuffer": function(input) {
        return nodejsUtils.newBufferFrom(new Uint8Array(input));
      }
    };
    transform["uint8array"] = {
      "string": arrayLikeToString,
      "array": function(input) {
        return arrayLikeToArrayLike(input, new Array(input.length));
      },
      "arraybuffer": function(input) {
        return input.buffer;
      },
      "uint8array": identity,
      "nodebuffer": function(input) {
        return nodejsUtils.newBufferFrom(input);
      }
    };
    transform["nodebuffer"] = {
      "string": arrayLikeToString,
      "array": function(input) {
        return arrayLikeToArrayLike(input, new Array(input.length));
      },
      "arraybuffer": function(input) {
        return transform["nodebuffer"]["uint8array"](input).buffer;
      },
      "uint8array": function(input) {
        return arrayLikeToArrayLike(input, new Uint8Array(input.length));
      },
      "nodebuffer": identity
    };
    exports.transformTo = function(outputType, input) {
      if (!input) {
        input = "";
      }
      if (!outputType) {
        return input;
      }
      exports.checkSupport(outputType);
      var inputType = exports.getTypeOf(input);
      var result = transform[inputType][outputType](input);
      return result;
    };
    exports.resolve = function(path5) {
      var parts = path5.split("/");
      var result = [];
      for (var index = 0; index < parts.length; index++) {
        var part = parts[index];
        if (part === "." || part === "" && index !== 0 && index !== parts.length - 1) {
          continue;
        } else if (part === "..") {
          result.pop();
        } else {
          result.push(part);
        }
      }
      return result.join("/");
    };
    exports.getTypeOf = function(input) {
      if (typeof input === "string") {
        return "string";
      }
      if (Object.prototype.toString.call(input) === "[object Array]") {
        return "array";
      }
      if (support.nodebuffer && nodejsUtils.isBuffer(input)) {
        return "nodebuffer";
      }
      if (support.uint8array && input instanceof Uint8Array) {
        return "uint8array";
      }
      if (support.arraybuffer && input instanceof ArrayBuffer) {
        return "arraybuffer";
      }
    };
    exports.checkSupport = function(type) {
      var supported = support[type.toLowerCase()];
      if (!supported) {
        throw new Error(type + " is not supported by this platform");
      }
    };
    exports.MAX_VALUE_16BITS = 65535;
    exports.MAX_VALUE_32BITS = -1;
    exports.pretty = function(str) {
      var res = "", code, i;
      for (i = 0; i < (str || "").length; i++) {
        code = str.charCodeAt(i);
        res += "\\x" + (code < 16 ? "0" : "") + code.toString(16).toUpperCase();
      }
      return res;
    };
    exports.delay = function(callback, args, self2) {
      setImmediate(function() {
        callback.apply(self2 || null, args || []);
      });
    };
    exports.inherits = function(ctor, superCtor) {
      var Obj = function() {
      };
      Obj.prototype = superCtor.prototype;
      ctor.prototype = new Obj();
    };
    exports.extend = function() {
      var result = {}, i, attr;
      for (i = 0; i < arguments.length; i++) {
        for (attr in arguments[i]) {
          if (Object.prototype.hasOwnProperty.call(arguments[i], attr) && typeof result[attr] === "undefined") {
            result[attr] = arguments[i][attr];
          }
        }
      }
      return result;
    };
    exports.prepareContent = function(name, inputData, isBinary, isOptimizedBinaryString, isBase64) {
      var promise = external.Promise.resolve(inputData).then(function(data) {
        var isBlob = support.blob && (data instanceof Blob || ["[object File]", "[object Blob]"].indexOf(Object.prototype.toString.call(data)) !== -1);
        if (isBlob && typeof FileReader !== "undefined") {
          return new external.Promise(function(resolve, reject) {
            var reader = new FileReader();
            reader.onload = function(e) {
              resolve(e.target.result);
            };
            reader.onerror = function(e) {
              reject(e.target.error);
            };
            reader.readAsArrayBuffer(data);
          });
        } else {
          return data;
        }
      });
      return promise.then(function(data) {
        var dataType = exports.getTypeOf(data);
        if (!dataType) {
          return external.Promise.reject(
            new Error("Can't read the data of '" + name + "'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?")
          );
        }
        if (dataType === "arraybuffer") {
          data = exports.transformTo("uint8array", data);
        } else if (dataType === "string") {
          if (isBase64) {
            data = base64.decode(data);
          } else if (isBinary) {
            if (isOptimizedBinaryString !== true) {
              data = string2binary(data);
            }
          }
        }
        return data;
      });
    };
  }
});

// node_modules/jszip/lib/stream/GenericWorker.js
var require_GenericWorker = __commonJS({
  "node_modules/jszip/lib/stream/GenericWorker.js"(exports, module) {
    "use strict";
    function GenericWorker(name) {
      this.name = name || "default";
      this.streamInfo = {};
      this.generatedError = null;
      this.extraStreamInfo = {};
      this.isPaused = true;
      this.isFinished = false;
      this.isLocked = false;
      this._listeners = {
        "data": [],
        "end": [],
        "error": []
      };
      this.previous = null;
    }
    GenericWorker.prototype = {
      /**
       * Push a chunk to the next workers.
       * @param {Object} chunk the chunk to push
       */
      push: function(chunk) {
        this.emit("data", chunk);
      },
      /**
       * End the stream.
       * @return {Boolean} true if this call ended the worker, false otherwise.
       */
      end: function() {
        if (this.isFinished) {
          return false;
        }
        this.flush();
        try {
          this.emit("end");
          this.cleanUp();
          this.isFinished = true;
        } catch (e) {
          this.emit("error", e);
        }
        return true;
      },
      /**
       * End the stream with an error.
       * @param {Error} e the error which caused the premature end.
       * @return {Boolean} true if this call ended the worker with an error, false otherwise.
       */
      error: function(e) {
        if (this.isFinished) {
          return false;
        }
        if (this.isPaused) {
          this.generatedError = e;
        } else {
          this.isFinished = true;
          this.emit("error", e);
          if (this.previous) {
            this.previous.error(e);
          }
          this.cleanUp();
        }
        return true;
      },
      /**
       * Add a callback on an event.
       * @param {String} name the name of the event (data, end, error)
       * @param {Function} listener the function to call when the event is triggered
       * @return {GenericWorker} the current object for chainability
       */
      on: function(name, listener) {
        this._listeners[name].push(listener);
        return this;
      },
      /**
       * Clean any references when a worker is ending.
       */
      cleanUp: function() {
        this.streamInfo = this.generatedError = this.extraStreamInfo = null;
        this._listeners = [];
      },
      /**
       * Trigger an event. This will call registered callback with the provided arg.
       * @param {String} name the name of the event (data, end, error)
       * @param {Object} arg the argument to call the callback with.
       */
      emit: function(name, arg) {
        if (this._listeners[name]) {
          for (var i = 0; i < this._listeners[name].length; i++) {
            this._listeners[name][i].call(this, arg);
          }
        }
      },
      /**
       * Chain a worker with an other.
       * @param {Worker} next the worker receiving events from the current one.
       * @return {worker} the next worker for chainability
       */
      pipe: function(next) {
        return next.registerPrevious(this);
      },
      /**
       * Same as `pipe` in the other direction.
       * Using an API with `pipe(next)` is very easy.
       * Implementing the API with the point of view of the next one registering
       * a source is easier, see the ZipFileWorker.
       * @param {Worker} previous the previous worker, sending events to this one
       * @return {Worker} the current worker for chainability
       */
      registerPrevious: function(previous) {
        if (this.isLocked) {
          throw new Error("The stream '" + this + "' has already been used.");
        }
        this.streamInfo = previous.streamInfo;
        this.mergeStreamInfo();
        this.previous = previous;
        var self2 = this;
        previous.on("data", function(chunk) {
          self2.processChunk(chunk);
        });
        previous.on("end", function() {
          self2.end();
        });
        previous.on("error", function(e) {
          self2.error(e);
        });
        return this;
      },
      /**
       * Pause the stream so it doesn't send events anymore.
       * @return {Boolean} true if this call paused the worker, false otherwise.
       */
      pause: function() {
        if (this.isPaused || this.isFinished) {
          return false;
        }
        this.isPaused = true;
        if (this.previous) {
          this.previous.pause();
        }
        return true;
      },
      /**
       * Resume a paused stream.
       * @return {Boolean} true if this call resumed the worker, false otherwise.
       */
      resume: function() {
        if (!this.isPaused || this.isFinished) {
          return false;
        }
        this.isPaused = false;
        var withError = false;
        if (this.generatedError) {
          this.error(this.generatedError);
          withError = true;
        }
        if (this.previous) {
          this.previous.resume();
        }
        return !withError;
      },
      /**
       * Flush any remaining bytes as the stream is ending.
       */
      flush: function() {
      },
      /**
       * Process a chunk. This is usually the method overridden.
       * @param {Object} chunk the chunk to process.
       */
      processChunk: function(chunk) {
        this.push(chunk);
      },
      /**
       * Add a key/value to be added in the workers chain streamInfo once activated.
       * @param {String} key the key to use
       * @param {Object} value the associated value
       * @return {Worker} the current worker for chainability
       */
      withStreamInfo: function(key, value) {
        this.extraStreamInfo[key] = value;
        this.mergeStreamInfo();
        return this;
      },
      /**
       * Merge this worker's streamInfo into the chain's streamInfo.
       */
      mergeStreamInfo: function() {
        for (var key in this.extraStreamInfo) {
          if (!Object.prototype.hasOwnProperty.call(this.extraStreamInfo, key)) {
            continue;
          }
          this.streamInfo[key] = this.extraStreamInfo[key];
        }
      },
      /**
       * Lock the stream to prevent further updates on the workers chain.
       * After calling this method, all calls to pipe will fail.
       */
      lock: function() {
        if (this.isLocked) {
          throw new Error("The stream '" + this + "' has already been used.");
        }
        this.isLocked = true;
        if (this.previous) {
          this.previous.lock();
        }
      },
      /**
       *
       * Pretty print the workers chain.
       */
      toString: function() {
        var me = "Worker " + this.name;
        if (this.previous) {
          return this.previous + " -> " + me;
        } else {
          return me;
        }
      }
    };
    module.exports = GenericWorker;
  }
});

// node_modules/jszip/lib/utf8.js
var require_utf8 = __commonJS({
  "node_modules/jszip/lib/utf8.js"(exports) {
    "use strict";
    var utils = require_utils();
    var support = require_support();
    var nodejsUtils = require_nodejsUtils();
    var GenericWorker = require_GenericWorker();
    var _utf8len = new Array(256);
    for (i = 0; i < 256; i++) {
      _utf8len[i] = i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1;
    }
    var i;
    _utf8len[254] = _utf8len[254] = 1;
    var string2buf = function(str) {
      var buf, c, c2, m_pos, i2, str_len = str.length, buf_len = 0;
      for (m_pos = 0; m_pos < str_len; m_pos++) {
        c = str.charCodeAt(m_pos);
        if ((c & 64512) === 55296 && m_pos + 1 < str_len) {
          c2 = str.charCodeAt(m_pos + 1);
          if ((c2 & 64512) === 56320) {
            c = 65536 + (c - 55296 << 10) + (c2 - 56320);
            m_pos++;
          }
        }
        buf_len += c < 128 ? 1 : c < 2048 ? 2 : c < 65536 ? 3 : 4;
      }
      if (support.uint8array) {
        buf = new Uint8Array(buf_len);
      } else {
        buf = new Array(buf_len);
      }
      for (i2 = 0, m_pos = 0; i2 < buf_len; m_pos++) {
        c = str.charCodeAt(m_pos);
        if ((c & 64512) === 55296 && m_pos + 1 < str_len) {
          c2 = str.charCodeAt(m_pos + 1);
          if ((c2 & 64512) === 56320) {
            c = 65536 + (c - 55296 << 10) + (c2 - 56320);
            m_pos++;
          }
        }
        if (c < 128) {
          buf[i2++] = c;
        } else if (c < 2048) {
          buf[i2++] = 192 | c >>> 6;
          buf[i2++] = 128 | c & 63;
        } else if (c < 65536) {
          buf[i2++] = 224 | c >>> 12;
          buf[i2++] = 128 | c >>> 6 & 63;
          buf[i2++] = 128 | c & 63;
        } else {
          buf[i2++] = 240 | c >>> 18;
          buf[i2++] = 128 | c >>> 12 & 63;
          buf[i2++] = 128 | c >>> 6 & 63;
          buf[i2++] = 128 | c & 63;
        }
      }
      return buf;
    };
    var utf8border = function(buf, max) {
      var pos;
      max = max || buf.length;
      if (max > buf.length) {
        max = buf.length;
      }
      pos = max - 1;
      while (pos >= 0 && (buf[pos] & 192) === 128) {
        pos--;
      }
      if (pos < 0) {
        return max;
      }
      if (pos === 0) {
        return max;
      }
      return pos + _utf8len[buf[pos]] > max ? pos : max;
    };
    var buf2string = function(buf) {
      var i2, out, c, c_len;
      var len = buf.length;
      var utf16buf = new Array(len * 2);
      for (out = 0, i2 = 0; i2 < len; ) {
        c = buf[i2++];
        if (c < 128) {
          utf16buf[out++] = c;
          continue;
        }
        c_len = _utf8len[c];
        if (c_len > 4) {
          utf16buf[out++] = 65533;
          i2 += c_len - 1;
          continue;
        }
        c &= c_len === 2 ? 31 : c_len === 3 ? 15 : 7;
        while (c_len > 1 && i2 < len) {
          c = c << 6 | buf[i2++] & 63;
          c_len--;
        }
        if (c_len > 1) {
          utf16buf[out++] = 65533;
          continue;
        }
        if (c < 65536) {
          utf16buf[out++] = c;
        } else {
          c -= 65536;
          utf16buf[out++] = 55296 | c >> 10 & 1023;
          utf16buf[out++] = 56320 | c & 1023;
        }
      }
      if (utf16buf.length !== out) {
        if (utf16buf.subarray) {
          utf16buf = utf16buf.subarray(0, out);
        } else {
          utf16buf.length = out;
        }
      }
      return utils.applyFromCharCode(utf16buf);
    };
    exports.utf8encode = function utf8encode(str) {
      if (support.nodebuffer) {
        return nodejsUtils.newBufferFrom(str, "utf-8");
      }
      return string2buf(str);
    };
    exports.utf8decode = function utf8decode(buf) {
      if (support.nodebuffer) {
        return utils.transformTo("nodebuffer", buf).toString("utf-8");
      }
      buf = utils.transformTo(support.uint8array ? "uint8array" : "array", buf);
      return buf2string(buf);
    };
    function Utf8DecodeWorker() {
      GenericWorker.call(this, "utf-8 decode");
      this.leftOver = null;
    }
    utils.inherits(Utf8DecodeWorker, GenericWorker);
    Utf8DecodeWorker.prototype.processChunk = function(chunk) {
      var data = utils.transformTo(support.uint8array ? "uint8array" : "array", chunk.data);
      if (this.leftOver && this.leftOver.length) {
        if (support.uint8array) {
          var previousData = data;
          data = new Uint8Array(previousData.length + this.leftOver.length);
          data.set(this.leftOver, 0);
          data.set(previousData, this.leftOver.length);
        } else {
          data = this.leftOver.concat(data);
        }
        this.leftOver = null;
      }
      var nextBoundary = utf8border(data);
      var usableData = data;
      if (nextBoundary !== data.length) {
        if (support.uint8array) {
          usableData = data.subarray(0, nextBoundary);
          this.leftOver = data.subarray(nextBoundary, data.length);
        } else {
          usableData = data.slice(0, nextBoundary);
          this.leftOver = data.slice(nextBoundary, data.length);
        }
      }
      this.push({
        data: exports.utf8decode(usableData),
        meta: chunk.meta
      });
    };
    Utf8DecodeWorker.prototype.flush = function() {
      if (this.leftOver && this.leftOver.length) {
        this.push({
          data: exports.utf8decode(this.leftOver),
          meta: {}
        });
        this.leftOver = null;
      }
    };
    exports.Utf8DecodeWorker = Utf8DecodeWorker;
    function Utf8EncodeWorker() {
      GenericWorker.call(this, "utf-8 encode");
    }
    utils.inherits(Utf8EncodeWorker, GenericWorker);
    Utf8EncodeWorker.prototype.processChunk = function(chunk) {
      this.push({
        data: exports.utf8encode(chunk.data),
        meta: chunk.meta
      });
    };
    exports.Utf8EncodeWorker = Utf8EncodeWorker;
  }
});

// node_modules/jszip/lib/stream/ConvertWorker.js
var require_ConvertWorker = __commonJS({
  "node_modules/jszip/lib/stream/ConvertWorker.js"(exports, module) {
    "use strict";
    var GenericWorker = require_GenericWorker();
    var utils = require_utils();
    function ConvertWorker(destType) {
      GenericWorker.call(this, "ConvertWorker to " + destType);
      this.destType = destType;
    }
    utils.inherits(ConvertWorker, GenericWorker);
    ConvertWorker.prototype.processChunk = function(chunk) {
      this.push({
        data: utils.transformTo(this.destType, chunk.data),
        meta: chunk.meta
      });
    };
    module.exports = ConvertWorker;
  }
});

// node_modules/jszip/lib/nodejs/NodejsStreamOutputAdapter.js
var require_NodejsStreamOutputAdapter = __commonJS({
  "node_modules/jszip/lib/nodejs/NodejsStreamOutputAdapter.js"(exports, module) {
    "use strict";
    var Readable = require_readable().Readable;
    var utils = require_utils();
    utils.inherits(NodejsStreamOutputAdapter, Readable);
    function NodejsStreamOutputAdapter(helper, options, updateCb) {
      Readable.call(this, options);
      this._helper = helper;
      var self2 = this;
      helper.on("data", function(data, meta) {
        if (!self2.push(data)) {
          self2._helper.pause();
        }
        if (updateCb) {
          updateCb(meta);
        }
      }).on("error", function(e) {
        self2.emit("error", e);
      }).on("end", function() {
        self2.push(null);
      });
    }
    NodejsStreamOutputAdapter.prototype._read = function() {
      this._helper.resume();
    };
    module.exports = NodejsStreamOutputAdapter;
  }
});

// node_modules/jszip/lib/stream/StreamHelper.js
var require_StreamHelper = __commonJS({
  "node_modules/jszip/lib/stream/StreamHelper.js"(exports, module) {
    "use strict";
    var utils = require_utils();
    var ConvertWorker = require_ConvertWorker();
    var GenericWorker = require_GenericWorker();
    var base64 = require_base64();
    var support = require_support();
    var external = require_external();
    var NodejsStreamOutputAdapter = null;
    if (support.nodestream) {
      try {
        NodejsStreamOutputAdapter = require_NodejsStreamOutputAdapter();
      } catch (e) {
      }
    }
    function transformZipOutput(type, content, mimeType) {
      switch (type) {
        case "blob":
          return utils.newBlob(utils.transformTo("arraybuffer", content), mimeType);
        case "base64":
          return base64.encode(content);
        default:
          return utils.transformTo(type, content);
      }
    }
    function concat(type, dataArray) {
      var i, index = 0, res = null, totalLength = 0;
      for (i = 0; i < dataArray.length; i++) {
        totalLength += dataArray[i].length;
      }
      switch (type) {
        case "string":
          return dataArray.join("");
        case "array":
          return Array.prototype.concat.apply([], dataArray);
        case "uint8array":
          res = new Uint8Array(totalLength);
          for (i = 0; i < dataArray.length; i++) {
            res.set(dataArray[i], index);
            index += dataArray[i].length;
          }
          return res;
        case "nodebuffer":
          return Buffer.concat(dataArray);
        default:
          throw new Error("concat : unsupported type '" + type + "'");
      }
    }
    function accumulate(helper, updateCallback) {
      return new external.Promise(function(resolve, reject) {
        var dataArray = [];
        var chunkType = helper._internalType, resultType = helper._outputType, mimeType = helper._mimeType;
        helper.on("data", function(data, meta) {
          dataArray.push(data);
          if (updateCallback) {
            updateCallback(meta);
          }
        }).on("error", function(err) {
          dataArray = [];
          reject(err);
        }).on("end", function() {
          try {
            var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType);
            resolve(result);
          } catch (e) {
            reject(e);
          }
          dataArray = [];
        }).resume();
      });
    }
    function StreamHelper(worker, outputType, mimeType) {
      var internalType = outputType;
      switch (outputType) {
        case "blob":
        case "arraybuffer":
          internalType = "uint8array";
          break;
        case "base64":
          internalType = "string";
          break;
      }
      try {
        this._internalType = internalType;
        this._outputType = outputType;
        this._mimeType = mimeType;
        utils.checkSupport(internalType);
        this._worker = worker.pipe(new ConvertWorker(internalType));
        worker.lock();
      } catch (e) {
        this._worker = new GenericWorker("error");
        this._worker.error(e);
      }
    }
    StreamHelper.prototype = {
      /**
       * Listen a StreamHelper, accumulate its content and concatenate it into a
       * complete block.
       * @param {Function} updateCb the update callback.
       * @return Promise the promise for the accumulation.
       */
      accumulate: function(updateCb) {
        return accumulate(this, updateCb);
      },
      /**
       * Add a listener on an event triggered on a stream.
       * @param {String} evt the name of the event
       * @param {Function} fn the listener
       * @return {StreamHelper} the current helper.
       */
      on: function(evt, fn) {
        var self2 = this;
        if (evt === "data") {
          this._worker.on(evt, function(chunk) {
            fn.call(self2, chunk.data, chunk.meta);
          });
        } else {
          this._worker.on(evt, function() {
            utils.delay(fn, arguments, self2);
          });
        }
        return this;
      },
      /**
       * Resume the flow of chunks.
       * @return {StreamHelper} the current helper.
       */
      resume: function() {
        utils.delay(this._worker.resume, [], this._worker);
        return this;
      },
      /**
       * Pause the flow of chunks.
       * @return {StreamHelper} the current helper.
       */
      pause: function() {
        this._worker.pause();
        return this;
      },
      /**
       * Return a nodejs stream for this helper.
       * @param {Function} updateCb the update callback.
       * @return {NodejsStreamOutputAdapter} the nodejs stream.
       */
      toNodejsStream: function(updateCb) {
        utils.checkSupport("nodestream");
        if (this._outputType !== "nodebuffer") {
          throw new Error(this._outputType + " is not supported by this method");
        }
        return new NodejsStreamOutputAdapter(this, {
          objectMode: this._outputType !== "nodebuffer"
        }, updateCb);
      }
    };
    module.exports = StreamHelper;
  }
});

// node_modules/jszip/lib/defaults.js
var require_defaults = __commonJS({
  "node_modules/jszip/lib/defaults.js"(exports) {
    "use strict";
    exports.base64 = false;
    exports.binary = false;
    exports.dir = false;
    exports.createFolders = true;
    exports.date = null;
    exports.compression = null;
    exports.compressionOptions = null;
    exports.comment = null;
    exports.unixPermissions = null;
    exports.dosPermissions = null;
  }
});

// node_modules/jszip/lib/stream/DataWorker.js
var require_DataWorker = __commonJS({
  "node_modules/jszip/lib/stream/DataWorker.js"(exports, module) {
    "use strict";
    var utils = require_utils();
    var GenericWorker = require_GenericWorker();
    var DEFAULT_BLOCK_SIZE = 16 * 1024;
    function DataWorker(dataP) {
      GenericWorker.call(this, "DataWorker");
      var self2 = this;
      this.dataIsReady = false;
      this.index = 0;
      this.max = 0;
      this.data = null;
      this.type = "";
      this._tickScheduled = false;
      dataP.then(function(data) {
        self2.dataIsReady = true;
        self2.data = data;
        self2.max = data && data.length || 0;
        self2.type = utils.getTypeOf(data);
        if (!self2.isPaused) {
          self2._tickAndRepeat();
        }
      }, function(e) {
        self2.error(e);
      });
    }
    utils.inherits(DataWorker, GenericWorker);
    DataWorker.prototype.cleanUp = function() {
      GenericWorker.prototype.cleanUp.call(this);
      this.data = null;
    };
    DataWorker.prototype.resume = function() {
      if (!GenericWorker.prototype.resume.call(this)) {
        return false;
      }
      if (!this._tickScheduled && this.dataIsReady) {
        this._tickScheduled = true;
        utils.delay(this._tickAndRepeat, [], this);
      }
      return true;
    };
    DataWorker.prototype._tickAndRepeat = function() {
      this._tickScheduled = false;
      if (this.isPaused || this.isFinished) {
        return;
      }
      this._tick();
      if (!this.isFinished) {
        utils.delay(this._tickAndRepeat, [], this);
        this._tickScheduled = true;
      }
    };
    DataWorker.prototype._tick = function() {
      if (this.isPaused || this.isFinished) {
        return false;
      }
      var size = DEFAULT_BLOCK_SIZE;
      var data = null, nextIndex = Math.min(this.max, this.index + size);
      if (this.index >= this.max) {
        return this.end();
      } else {
        switch (this.type) {
          case "string":
            data = this.data.substring(this.index, nextIndex);
            break;
          case "uint8array":
            data = this.data.subarray(this.index, nextIndex);
            break;
          case "array":
          case "nodebuffer":
            data = this.data.slice(this.index, nextIndex);
            break;
        }
        this.index = nextIndex;
        return this.push({
          data,
          meta: {
            percent: this.max ? this.index / this.max * 100 : 0
          }
        });
      }
    };
    module.exports = DataWorker;
  }
});

// node_modules/jszip/lib/crc32.js
var require_crc32 = __commonJS({
  "node_modules/jszip/lib/crc32.js"(exports, module) {
    "use strict";
    var utils = require_utils();
    function makeTable() {
      var c, table = [];
      for (var n = 0; n < 256; n++) {
        c = n;
        for (var k = 0; k < 8; k++) {
          c = c & 1 ? 3988292384 ^ c >>> 1 : c >>> 1;
        }
        table[n] = c;
      }
      return table;
    }
    var crcTable = makeTable();
    function crc32(crc, buf, len, pos) {
      var t = crcTable, end = pos + len;
      crc = crc ^ -1;
      for (var i = pos; i < end; i++) {
        crc = crc >>> 8 ^ t[(crc ^ buf[i]) & 255];
      }
      return crc ^ -1;
    }
    function crc32str(crc, str, len, pos) {
      var t = crcTable, end = pos + len;
      crc = crc ^ -1;
      for (var i = pos; i < end; i++) {
        crc = crc >>> 8 ^ t[(crc ^ str.charCodeAt(i)) & 255];
      }
      return crc ^ -1;
    }
    module.exports = function crc32wrapper(input, crc) {
      if (typeof input === "undefined" || !input.length) {
        return 0;
      }
      var isArray = utils.getTypeOf(input) !== "string";
      if (isArray) {
        return crc32(crc | 0, input, input.length, 0);
      } else {
        return crc32str(crc | 0, input, input.length, 0);
      }
    };
  }
});

// node_modules/jszip/lib/stream/Crc32Probe.js
var require_Crc32Probe = __commonJS({
  "node_modules/jszip/lib/stream/Crc32Probe.js"(exports, module) {
    "use strict";
    var GenericWorker = require_GenericWorker();
    var crc32 = require_crc32();
    var utils = require_utils();
    function Crc32Probe() {
      GenericWorker.call(this, "Crc32Probe");
      this.withStreamInfo("crc32", 0);
    }
    utils.inherits(Crc32Probe, GenericWorker);
    Crc32Probe.prototype.processChunk = function(chunk) {
      this.streamInfo.crc32 = crc32(chunk.data, this.streamInfo.crc32 || 0);
      this.push(chunk);
    };
    module.exports = Crc32Probe;
  }
});

// node_modules/jszip/lib/stream/DataLengthProbe.js
var require_DataLengthProbe = __commonJS({
  "node_modules/jszip/lib/stream/DataLengthProbe.js"(exports, module) {
    "use strict";
    var utils = require_utils();
    var GenericWorker = require_GenericWorker();
    function DataLengthProbe(propName) {
      GenericWorker.call(this, "DataLengthProbe for " + propName);
      this.propName = propName;
      this.withStreamInfo(propName, 0);
    }
    utils.inherits(DataLengthProbe, GenericWorker);
    DataLengthProbe.prototype.processChunk = function(chunk) {
      if (chunk) {
        var length = this.streamInfo[this.propName] || 0;
        this.streamInfo[this.propName] = length + chunk.data.length;
      }
      GenericWorker.prototype.processChunk.call(this, chunk);
    };
    module.exports = DataLengthProbe;
  }
});

// node_modules/jszip/lib/compressedObject.js
var require_compressedObject = __commonJS({
  "node_modules/jszip/lib/compressedObject.js"(exports, module) {
    "use strict";
    var external = require_external();
    var DataWorker = require_DataWorker();
    var Crc32Probe = require_Crc32Probe();
    var DataLengthProbe = require_DataLengthProbe();
    function CompressedObject(compressedSize, uncompressedSize, crc32, compression, data) {
      this.compressedSize = compressedSize;
      this.uncompressedSize = uncompressedSize;
      this.crc32 = crc32;
      this.compression = compression;
      this.compressedContent = data;
    }
    CompressedObject.prototype = {
      /**
       * Create a worker to get the uncompressed content.
       * @return {GenericWorker} the worker.
       */
      getContentWorker: function() {
        var worker = new DataWorker(external.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new DataLengthProbe("data_length"));
        var that = this;
        worker.on("end", function() {
          if (this.streamInfo["data_length"] !== that.uncompressedSize) {
            throw new Error("Bug : uncompressed data size mismatch");
          }
        });
        return worker;
      },
      /**
       * Create a worker to get the compressed content.
       * @return {GenericWorker} the worker.
       */
      getCompressedWorker: function() {
        return new DataWorker(external.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize", this.compressedSize).withStreamInfo("uncompressedSize", this.uncompressedSize).withStreamInfo("crc32", this.crc32).withStreamInfo("compression", this.compression);
      }
    };
    CompressedObject.createWorkerFrom = function(uncompressedWorker, compression, compressionOptions) {
      return uncompressedWorker.pipe(new Crc32Probe()).pipe(new DataLengthProbe("uncompressedSize")).pipe(compression.compressWorker(compressionOptions)).pipe(new DataLengthProbe("compressedSize")).withStreamInfo("compression", compression);
    };
    module.exports = CompressedObject;
  }
});

// node_modules/jszip/lib/zipObject.js
var require_zipObject = __commonJS({
  "node_modules/jszip/lib/zipObject.js"(exports, module) {
    "use strict";
    var StreamHelper = require_StreamHelper();
    var DataWorker = require_DataWorker();
    var utf8 = require_utf8();
    var CompressedObject = require_compressedObject();
    var GenericWorker = require_GenericWorker();
    var ZipObject = function(name, data, options) {
      this.name = name;
      this.dir = options.dir;
      this.date = options.date;
      this.comment = options.comment;
      this.unixPermissions = options.unixPermissions;
      this.dosPermissions = options.dosPermissions;
      this._data = data;
      this._dataBinary = options.binary;
      this.options = {
        compression: options.compression,
        compressionOptions: options.compressionOptions
      };
    };
    ZipObject.prototype = {
      /**
       * Create an internal stream for the content of this object.
       * @param {String} type the type of each chunk.
       * @return StreamHelper the stream.
       */
      internalStream: function(type) {
        var result = null, outputType = "string";
        try {
          if (!type) {
            throw new Error("No output type specified.");
          }
          outputType = type.toLowerCase();
          var askUnicodeString = outputType === "string" || outputType === "text";
          if (outputType === "binarystring" || outputType === "text") {
            outputType = "string";
          }
          result = this._decompressWorker();
          var isUnicodeString = !this._dataBinary;
          if (isUnicodeString && !askUnicodeString) {
            result = result.pipe(new utf8.Utf8EncodeWorker());
          }
          if (!isUnicodeString && askUnicodeString) {
            result = result.pipe(new utf8.Utf8DecodeWorker());
          }
        } catch (e) {
          result = new GenericWorker("error");
          result.error(e);
        }
        return new StreamHelper(result, outputType, "");
      },
      /**
       * Prepare the content in the asked type.
       * @param {String} type the type of the result.
       * @param {Function} onUpdate a function to call on each internal update.
       * @return Promise the promise of the result.
       */
      async: function(type, onUpdate) {
        return this.internalStream(type).accumulate(onUpdate);
      },
      /**
       * Prepare the content as a nodejs stream.
       * @param {String} type the type of each chunk.
       * @param {Function} onUpdate a function to call on each internal update.
       * @return Stream the stream.
       */
      nodeStream: function(type, onUpdate) {
        return this.internalStream(type || "nodebuffer").toNodejsStream(onUpdate);
      },
      /**
       * Return a worker for the compressed content.
       * @private
       * @param {Object} compression the compression object to use.
       * @param {Object} compressionOptions the options to use when compressing.
       * @return Worker the worker.
       */
      _compressWorker: function(compression, compressionOptions) {
        if (this._data instanceof CompressedObject && this._data.compression.magic === compression.magic) {
          return this._data.getCompressedWorker();
        } else {
          var result = this._decompressWorker();
          if (!this._dataBinary) {
            result = result.pipe(new utf8.Utf8EncodeWorker());
          }
          return CompressedObject.createWorkerFrom(result, compression, compressionOptions);
        }
      },
      /**
       * Return a worker for the decompressed content.
       * @private
       * @return Worker the worker.
       */
      _decompressWorker: function() {
        if (this._data instanceof CompressedObject) {
          return this._data.getContentWorker();
        } else if (this._data instanceof GenericWorker) {
          return this._data;
        } else {
          return new DataWorker(this._data);
        }
      }
    };
    var removedMethods = ["asText", "asBinary", "asNodeBuffer", "asUint8Array", "asArrayBuffer"];
    var removedFn = function() {
      throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.");
    };
    for (i = 0; i < removedMethods.length; i++) {
      ZipObject.prototype[removedMethods[i]] = removedFn;
    }
    var i;
    module.exports = ZipObject;
  }
});

// node_modules/pako/lib/utils/common.js
var require_common = __commonJS({
  "node_modules/pako/lib/utils/common.js"(exports) {
    "use strict";
    var TYPED_OK = typeof Uint8Array !== "undefined" && typeof Uint16Array !== "undefined" && typeof Int32Array !== "undefined";
    function _has(obj, key) {
      return Object.prototype.hasOwnProperty.call(obj, key);
    }
    exports.assign = function(obj) {
      var sources = Array.prototype.slice.call(arguments, 1);
      while (sources.length) {
        var source = sources.shift();
        if (!source) {
          continue;
        }
        if (typeof source !== "object") {
          throw new TypeError(source + "must be non-object");
        }
        for (var p in source) {
          if (_has(source, p)) {
            obj[p] = source[p];
          }
        }
      }
      return obj;
    };
    exports.shrinkBuf = function(buf, size) {
      if (buf.length === size) {
        return buf;
      }
      if (buf.subarray) {
        return buf.subarray(0, size);
      }
      buf.length = size;
      return buf;
    };
    var fnTyped = {
      arraySet: function(dest, src, src_offs, len, dest_offs) {
        if (src.subarray && dest.subarray) {
          dest.set(src.subarray(src_offs, src_offs + len), dest_offs);
          return;
        }
        for (var i = 0; i < len; i++) {
          dest[dest_offs + i] = src[src_offs + i];
        }
      },
      // Join array of chunks to single array.
      flattenChunks: function(chunks) {
        var i, l, len, pos, chunk, result;
        len = 0;
        for (i = 0, l = chunks.length; i < l; i++) {
          len += chunks[i].length;
        }
        result = new Uint8Array(len);
        pos = 0;
        for (i = 0, l = chunks.length; i < l; i++) {
          chunk = chunks[i];
          result.set(chunk, pos);
          pos += chunk.length;
        }
        return result;
      }
    };
    var fnUntyped = {
      arraySet: function(dest, src, src_offs, len, dest_offs) {
        for (var i = 0; i < len; i++) {
          dest[dest_offs + i] = src[src_offs + i];
        }
      },
      // Join array of chunks to single array.
      flattenChunks: function(chunks) {
        return [].concat.apply([], chunks);
      }
    };
    exports.setTyped = function(on) {
      if (on) {
        exports.Buf8 = Uint8Array;
        exports.Buf16 = Uint16Array;
        exports.Buf32 = Int32Array;
        exports.assign(exports, fnTyped);
      } else {
        exports.Buf8 = Array;
        exports.Buf16 = Array;
        exports.Buf32 = Array;
        exports.assign(exports, fnUntyped);
      }
    };
    exports.setTyped(TYPED_OK);
  }
});

// node_modules/pako/lib/zlib/trees.js
var require_trees = __commonJS({
  "node_modules/pako/lib/zlib/trees.js"(exports) {
    "use strict";
    var utils = require_common();
    var Z_FIXED = 4;
    var Z_BINARY = 0;
    var Z_TEXT = 1;
    var Z_UNKNOWN = 2;
    function zero(buf) {
      var len = buf.length;
      while (--len >= 0) {
        buf[len] = 0;
      }
    }
    var STORED_BLOCK = 0;
    var STATIC_TREES = 1;
    var DYN_TREES = 2;
    var MIN_MATCH = 3;
    var MAX_MATCH = 258;
    var LENGTH_CODES = 29;
    var LITERALS = 256;
    var L_CODES = LITERALS + 1 + LENGTH_CODES;
    var D_CODES = 30;
    var BL_CODES = 19;
    var HEAP_SIZE = 2 * L_CODES + 1;
    var MAX_BITS = 15;
    var Buf_size = 16;
    var MAX_BL_BITS = 7;
    var END_BLOCK = 256;
    var REP_3_6 = 16;
    var REPZ_3_10 = 17;
    var REPZ_11_138 = 18;
    var extra_lbits = (
      /* extra bits for each length code */
      [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]
    );
    var extra_dbits = (
      /* extra bits for each distance code */
      [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]
    );
    var extra_blbits = (
      /* extra bits for each bit length code */
      [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7]
    );
    var bl_order = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
    var DIST_CODE_LEN = 512;
    var static_ltree = new Array((L_CODES + 2) * 2);
    zero(static_ltree);
    var static_dtree = new Array(D_CODES * 2);
    zero(static_dtree);
    var _dist_code = new Array(DIST_CODE_LEN);
    zero(_dist_code);
    var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);
    zero(_length_code);
    var base_length = new Array(LENGTH_CODES);
    zero(base_length);
    var base_dist = new Array(D_CODES);
    zero(base_dist);
    function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {
      this.static_tree = static_tree;
      this.extra_bits = extra_bits;
      this.extra_base = extra_base;
      this.elems = elems;
      this.max_length = max_length;
      this.has_stree = static_tree && static_tree.length;
    }
    var static_l_desc;
    var static_d_desc;
    var static_bl_desc;
    function TreeDesc(dyn_tree, stat_desc) {
      this.dyn_tree = dyn_tree;
      this.max_code = 0;
      this.stat_desc = stat_desc;
    }
    function d_code(dist) {
      return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];
    }
    function put_short(s, w) {
      s.pending_buf[s.pending++] = w & 255;
      s.pending_buf[s.pending++] = w >>> 8 & 255;
    }
    function send_bits(s, value, length) {
      if (s.bi_valid > Buf_size - length) {
        s.bi_buf |= value << s.bi_valid & 65535;
        put_short(s, s.bi_buf);
        s.bi_buf = value >> Buf_size - s.bi_valid;
        s.bi_valid += length - Buf_size;
      } else {
        s.bi_buf |= value << s.bi_valid & 65535;
        s.bi_valid += length;
      }
    }
    function send_code(s, c, tree) {
      send_bits(
        s,
        tree[c * 2],
        tree[c * 2 + 1]
        /*.Len*/
      );
    }
    function bi_reverse(code, len) {
      var res = 0;
      do {
        res |= code & 1;
        code >>>= 1;
        res <<= 1;
      } while (--len > 0);
      return res >>> 1;
    }
    function bi_flush(s) {
      if (s.bi_valid === 16) {
        put_short(s, s.bi_buf);
        s.bi_buf = 0;
        s.bi_valid = 0;
      } else if (s.bi_valid >= 8) {
        s.pending_buf[s.pending++] = s.bi_buf & 255;
        s.bi_buf >>= 8;
        s.bi_valid -= 8;
      }
    }
    function gen_bitlen(s, desc) {
      var tree = desc.dyn_tree;
      var max_code = desc.max_code;
      var stree = desc.stat_desc.static_tree;
      var has_stree = desc.stat_desc.has_stree;
      var extra = desc.stat_desc.extra_bits;
      var base = desc.stat_desc.extra_base;
      var max_length = desc.stat_desc.max_length;
      var h;
      var n, m;
      var bits;
      var xbits;
      var f;
      var overflow = 0;
      for (bits = 0; bits <= MAX_BITS; bits++) {
        s.bl_count[bits] = 0;
      }
      tree[s.heap[s.heap_max] * 2 + 1] = 0;
      for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {
        n = s.heap[h];
        bits = tree[tree[n * 2 + 1] * 2 + 1] + 1;
        if (bits > max_length) {
          bits = max_length;
          overflow++;
        }
        tree[n * 2 + 1] = bits;
        if (n > max_code) {
          continue;
        }
        s.bl_count[bits]++;
        xbits = 0;
        if (n >= base) {
          xbits = extra[n - base];
        }
        f = tree[n * 2];
        s.opt_len += f * (bits + xbits);
        if (has_stree) {
          s.static_len += f * (stree[n * 2 + 1] + xbits);
        }
      }
      if (overflow === 0) {
        return;
      }
      do {
        bits = max_length - 1;
        while (s.bl_count[bits] === 0) {
          bits--;
        }
        s.bl_count[bits]--;
        s.bl_count[bits + 1] += 2;
        s.bl_count[max_length]--;
        overflow -= 2;
      } while (overflow > 0);
      for (bits = max_length; bits !== 0; bits--) {
        n = s.bl_count[bits];
        while (n !== 0) {
          m = s.heap[--h];
          if (m > max_code) {
            continue;
          }
          if (tree[m * 2 + 1] !== bits) {
            s.opt_len += (bits - tree[m * 2 + 1]) * tree[m * 2];
            tree[m * 2 + 1] = bits;
          }
          n--;
        }
      }
    }
    function gen_codes(tree, max_code, bl_count) {
      var next_code = new Array(MAX_BITS + 1);
      var code = 0;
      var bits;
      var n;
      for (bits = 1; bits <= MAX_BITS; bits++) {
        next_code[bits] = code = code + bl_count[bits - 1] << 1;
      }
      for (n = 0; n <= max_code; n++) {
        var len = tree[n * 2 + 1];
        if (len === 0) {
          continue;
        }
        tree[n * 2] = bi_reverse(next_code[len]++, len);
      }
    }
    function tr_static_init() {
      var n;
      var bits;
      var length;
      var code;
      var dist;
      var bl_count = new Array(MAX_BITS + 1);
      length = 0;
      for (code = 0; code < LENGTH_CODES - 1; code++) {
        base_length[code] = length;
        for (n = 0; n < 1 << extra_lbits[code]; n++) {
          _length_code[length++] = code;
        }
      }
      _length_code[length - 1] = code;
      dist = 0;
      for (code = 0; code < 16; code++) {
        base_dist[code] = dist;
        for (n = 0; n < 1 << extra_dbits[code]; n++) {
          _dist_code[dist++] = code;
        }
      }
      dist >>= 7;
      for (; code < D_CODES; code++) {
        base_dist[code] = dist << 7;
        for (n = 0; n < 1 << extra_dbits[code] - 7; n++) {
          _dist_code[256 + dist++] = code;
        }
      }
      for (bits = 0; bits <= MAX_BITS; bits++) {
        bl_count[bits] = 0;
      }
      n = 0;
      while (n <= 143) {
        static_ltree[n * 2 + 1] = 8;
        n++;
        bl_count[8]++;
      }
      while (n <= 255) {
        static_ltree[n * 2 + 1] = 9;
        n++;
        bl_count[9]++;
      }
      while (n <= 279) {
        static_ltree[n * 2 + 1] = 7;
        n++;
        bl_count[7]++;
      }
      while (n <= 287) {
        static_ltree[n * 2 + 1] = 8;
        n++;
        bl_count[8]++;
      }
      gen_codes(static_ltree, L_CODES + 1, bl_count);
      for (n = 0; n < D_CODES; n++) {
        static_dtree[n * 2 + 1] = 5;
        static_dtree[n * 2] = bi_reverse(n, 5);
      }
      static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);
      static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);
      static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);
    }
    function init_block(s) {
      var n;
      for (n = 0; n < L_CODES; n++) {
        s.dyn_ltree[n * 2] = 0;
      }
      for (n = 0; n < D_CODES; n++) {
        s.dyn_dtree[n * 2] = 0;
      }
      for (n = 0; n < BL_CODES; n++) {
        s.bl_tree[n * 2] = 0;
      }
      s.dyn_ltree[END_BLOCK * 2] = 1;
      s.opt_len = s.static_len = 0;
      s.last_lit = s.matches = 0;
    }
    function bi_windup(s) {
      if (s.bi_valid > 8) {
        put_short(s, s.bi_buf);
      } else if (s.bi_valid > 0) {
        s.pending_buf[s.pending++] = s.bi_buf;
      }
      s.bi_buf = 0;
      s.bi_valid = 0;
    }
    function copy_block(s, buf, len, header) {
      bi_windup(s);
      if (header) {
        put_short(s, len);
        put_short(s, ~len);
      }
      utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);
      s.pending += len;
    }
    function smaller(tree, n, m, depth) {
      var _n2 = n * 2;
      var _m2 = m * 2;
      return tree[_n2] < tree[_m2] || tree[_n2] === tree[_m2] && depth[n] <= depth[m];
    }
    function pqdownheap(s, tree, k) {
      var v = s.heap[k];
      var j = k << 1;
      while (j <= s.heap_len) {
        if (j < s.heap_len && smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {
          j++;
        }
        if (smaller(tree, v, s.heap[j], s.depth)) {
          break;
        }
        s.heap[k] = s.heap[j];
        k = j;
        j <<= 1;
      }
      s.heap[k] = v;
    }
    function compress_block(s, ltree, dtree) {
      var dist;
      var lc;
      var lx = 0;
      var code;
      var extra;
      if (s.last_lit !== 0) {
        do {
          dist = s.pending_buf[s.d_buf + lx * 2] << 8 | s.pending_buf[s.d_buf + lx * 2 + 1];
          lc = s.pending_buf[s.l_buf + lx];
          lx++;
          if (dist === 0) {
            send_code(s, lc, ltree);
          } else {
            code = _length_code[lc];
            send_code(s, code + LITERALS + 1, ltree);
            extra = extra_lbits[code];
            if (extra !== 0) {
              lc -= base_length[code];
              send_bits(s, lc, extra);
            }
            dist--;
            code = d_code(dist);
            send_code(s, code, dtree);
            extra = extra_dbits[code];
            if (extra !== 0) {
              dist -= base_dist[code];
              send_bits(s, dist, extra);
            }
          }
        } while (lx < s.last_lit);
      }
      send_code(s, END_BLOCK, ltree);
    }
    function build_tree(s, desc) {
      var tree = desc.dyn_tree;
      var stree = desc.stat_desc.static_tree;
      var has_stree = desc.stat_desc.has_stree;
      var elems = desc.stat_desc.elems;
      var n, m;
      var max_code = -1;
      var node;
      s.heap_len = 0;
      s.heap_max = HEAP_SIZE;
      for (n = 0; n < elems; n++) {
        if (tree[n * 2] !== 0) {
          s.heap[++s.heap_len] = max_code = n;
          s.depth[n] = 0;
        } else {
          tree[n * 2 + 1] = 0;
        }
      }
      while (s.heap_len < 2) {
        node = s.heap[++s.heap_len] = max_code < 2 ? ++max_code : 0;
        tree[node * 2] = 1;
        s.depth[node] = 0;
        s.opt_len--;
        if (has_stree) {
          s.static_len -= stree[node * 2 + 1];
        }
      }
      desc.max_code = max_code;
      for (n = s.heap_len >> 1; n >= 1; n--) {
        pqdownheap(s, tree, n);
      }
      node = elems;
      do {
        n = s.heap[
          1
          /*SMALLEST*/
        ];
        s.heap[
          1
          /*SMALLEST*/
        ] = s.heap[s.heap_len--];
        pqdownheap(
          s,
          tree,
          1
          /*SMALLEST*/
        );
        m = s.heap[
          1
          /*SMALLEST*/
        ];
        s.heap[--s.heap_max] = n;
        s.heap[--s.heap_max] = m;
        tree[node * 2] = tree[n * 2] + tree[m * 2];
        s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;
        tree[n * 2 + 1] = tree[m * 2 + 1] = node;
        s.heap[
          1
          /*SMALLEST*/
        ] = node++;
        pqdownheap(
          s,
          tree,
          1
          /*SMALLEST*/
        );
      } while (s.heap_len >= 2);
      s.heap[--s.heap_max] = s.heap[
        1
        /*SMALLEST*/
      ];
      gen_bitlen(s, desc);
      gen_codes(tree, max_code, s.bl_count);
    }
    function scan_tree(s, tree, max_code) {
      var n;
      var prevlen = -1;
      var curlen;
      var nextlen = tree[0 * 2 + 1];
      var count = 0;
      var max_count = 7;
      var min_count = 4;
      if (nextlen === 0) {
        max_count = 138;
        min_count = 3;
      }
      tree[(max_code + 1) * 2 + 1] = 65535;
      for (n = 0; n <= max_code; n++) {
        curlen = nextlen;
        nextlen = tree[(n + 1) * 2 + 1];
        if (++count < max_count && curlen === nextlen) {
          continue;
        } else if (count < min_count) {
          s.bl_tree[curlen * 2] += count;
        } else if (curlen !== 0) {
          if (curlen !== prevlen) {
            s.bl_tree[curlen * 2]++;
          }
          s.bl_tree[REP_3_6 * 2]++;
        } else if (count <= 10) {
          s.bl_tree[REPZ_3_10 * 2]++;
        } else {
          s.bl_tree[REPZ_11_138 * 2]++;
        }
        count = 0;
        prevlen = curlen;
        if (nextlen === 0) {
          max_count = 138;
          min_count = 3;
        } else if (curlen === nextlen) {
          max_count = 6;
          min_count = 3;
        } else {
          max_count = 7;
          min_count = 4;
        }
      }
    }
    function send_tree(s, tree, max_code) {
      var n;
      var prevlen = -1;
      var curlen;
      var nextlen = tree[0 * 2 + 1];
      var count = 0;
      var max_count = 7;
      var min_count = 4;
      if (nextlen === 0) {
        max_count = 138;
        min_count = 3;
      }
      for (n = 0; n <= max_code; n++) {
        curlen = nextlen;
        nextlen = tree[(n + 1) * 2 + 1];
        if (++count < max_count && curlen === nextlen) {
          continue;
        } else if (count < min_count) {
          do {
            send_code(s, curlen, s.bl_tree);
          } while (--count !== 0);
        } else if (curlen !== 0) {
          if (curlen !== prevlen) {
            send_code(s, curlen, s.bl_tree);
            count--;
          }
          send_code(s, REP_3_6, s.bl_tree);
          send_bits(s, count - 3, 2);
        } else if (count <= 10) {
          send_code(s, REPZ_3_10, s.bl_tree);
          send_bits(s, count - 3, 3);
        } else {
          send_code(s, REPZ_11_138, s.bl_tree);
          send_bits(s, count - 11, 7);
        }
        count = 0;
        prevlen = curlen;
        if (nextlen === 0) {
          max_count = 138;
          min_count = 3;
        } else if (curlen === nextlen) {
          max_count = 6;
          min_count = 3;
        } else {
          max_count = 7;
          min_count = 4;
        }
      }
    }
    function build_bl_tree(s) {
      var max_blindex;
      scan_tree(s, s.dyn_ltree, s.l_desc.max_code);
      scan_tree(s, s.dyn_dtree, s.d_desc.max_code);
      build_tree(s, s.bl_desc);
      for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {
        if (s.bl_tree[bl_order[max_blindex] * 2 + 1] !== 0) {
          break;
        }
      }
      s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;
      return max_blindex;
    }
    function send_all_trees(s, lcodes, dcodes, blcodes) {
      var rank;
      send_bits(s, lcodes - 257, 5);
      send_bits(s, dcodes - 1, 5);
      send_bits(s, blcodes - 4, 4);
      for (rank = 0; rank < blcodes; rank++) {
        send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1], 3);
      }
      send_tree(s, s.dyn_ltree, lcodes - 1);
      send_tree(s, s.dyn_dtree, dcodes - 1);
    }
    function detect_data_type(s) {
      var black_mask = 4093624447;
      var n;
      for (n = 0; n <= 31; n++, black_mask >>>= 1) {
        if (black_mask & 1 && s.dyn_ltree[n * 2] !== 0) {
          return Z_BINARY;
        }
      }
      if (s.dyn_ltree[9 * 2] !== 0 || s.dyn_ltree[10 * 2] !== 0 || s.dyn_ltree[13 * 2] !== 0) {
        return Z_TEXT;
      }
      for (n = 32; n < LITERALS; n++) {
        if (s.dyn_ltree[n * 2] !== 0) {
          return Z_TEXT;
        }
      }
      return Z_BINARY;
    }
    var static_init_done = false;
    function _tr_init(s) {
      if (!static_init_done) {
        tr_static_init();
        static_init_done = true;
      }
      s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);
      s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);
      s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);
      s.bi_buf = 0;
      s.bi_valid = 0;
      init_block(s);
    }
    function _tr_stored_block(s, buf, stored_len, last) {
      send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);
      copy_block(s, buf, stored_len, true);
    }
    function _tr_align(s) {
      send_bits(s, STATIC_TREES << 1, 3);
      send_code(s, END_BLOCK, static_ltree);
      bi_flush(s);
    }
    function _tr_flush_block(s, buf, stored_len, last) {
      var opt_lenb, static_lenb;
      var max_blindex = 0;
      if (s.level > 0) {
        if (s.strm.data_type === Z_UNKNOWN) {
          s.strm.data_type = detect_data_type(s);
        }
        build_tree(s, s.l_desc);
        build_tree(s, s.d_desc);
        max_blindex = build_bl_tree(s);
        opt_lenb = s.opt_len + 3 + 7 >>> 3;
        static_lenb = s.static_len + 3 + 7 >>> 3;
        if (static_lenb <= opt_lenb) {
          opt_lenb = static_lenb;
        }
      } else {
        opt_lenb = static_lenb = stored_len + 5;
      }
      if (stored_len + 4 <= opt_lenb && buf !== -1) {
        _tr_stored_block(s, buf, stored_len, last);
      } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {
        send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);
        compress_block(s, static_ltree, static_dtree);
      } else {
        send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);
        send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);
        compress_block(s, s.dyn_ltree, s.dyn_dtree);
      }
      init_block(s);
      if (last) {
        bi_windup(s);
      }
    }
    function _tr_tally(s, dist, lc) {
      s.pending_buf[s.d_buf + s.last_lit * 2] = dist >>> 8 & 255;
      s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 255;
      s.pending_buf[s.l_buf + s.last_lit] = lc & 255;
      s.last_lit++;
      if (dist === 0) {
        s.dyn_ltree[lc * 2]++;
      } else {
        s.matches++;
        dist--;
        s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]++;
        s.dyn_dtree[d_code(dist) * 2]++;
      }
      return s.last_lit === s.lit_bufsize - 1;
    }
    exports._tr_init = _tr_init;
    exports._tr_stored_block = _tr_stored_block;
    exports._tr_flush_block = _tr_flush_block;
    exports._tr_tally = _tr_tally;
    exports._tr_align = _tr_align;
  }
});

// node_modules/pako/lib/zlib/adler32.js
var require_adler32 = __commonJS({
  "node_modules/pako/lib/zlib/adler32.js"(exports, module) {
    "use strict";
    function adler32(adler, buf, len, pos) {
      var s1 = adler & 65535 | 0, s2 = adler >>> 16 & 65535 | 0, n = 0;
      while (len !== 0) {
        n = len > 2e3 ? 2e3 : len;
        len -= n;
        do {
          s1 = s1 + buf[pos++] | 0;
          s2 = s2 + s1 | 0;
        } while (--n);
        s1 %= 65521;
        s2 %= 65521;
      }
      return s1 | s2 << 16 | 0;
    }
    module.exports = adler32;
  }
});

// node_modules/pako/lib/zlib/crc32.js
var require_crc322 = __commonJS({
  "node_modules/pako/lib/zlib/crc32.js"(exports, module) {
    "use strict";
    function makeTable() {
      var c, table = [];
      for (var n = 0; n < 256; n++) {
        c = n;
        for (var k = 0; k < 8; k++) {
          c = c & 1 ? 3988292384 ^ c >>> 1 : c >>> 1;
        }
        table[n] = c;
      }
      return table;
    }
    var crcTable = makeTable();
    function crc32(crc, buf, len, pos) {
      var t = crcTable, end = pos + len;
      crc ^= -1;
      for (var i = pos; i < end; i++) {
        crc = crc >>> 8 ^ t[(crc ^ buf[i]) & 255];
      }
      return crc ^ -1;
    }
    module.exports = crc32;
  }
});

// node_modules/pako/lib/zlib/messages.js
var require_messages = __commonJS({
  "node_modules/pako/lib/zlib/messages.js"(exports, module) {
    "use strict";
    module.exports = {
      2: "need dictionary",
      /* Z_NEED_DICT       2  */
      1: "stream end",
      /* Z_STREAM_END      1  */
      0: "",
      /* Z_OK              0  */
      "-1": "file error",
      /* Z_ERRNO         (-1) */
      "-2": "stream error",
      /* Z_STREAM_ERROR  (-2) */
      "-3": "data error",
      /* Z_DATA_ERROR    (-3) */
      "-4": "insufficient memory",
      /* Z_MEM_ERROR     (-4) */
      "-5": "buffer error",
      /* Z_BUF_ERROR     (-5) */
      "-6": "incompatible version"
      /* Z_VERSION_ERROR (-6) */
    };
  }
});

// node_modules/pako/lib/zlib/deflate.js
var require_deflate = __commonJS({
  "node_modules/pako/lib/zlib/deflate.js"(exports) {
    "use strict";
    var utils = require_common();
    var trees = require_trees();
    var adler32 = require_adler32();
    var crc32 = require_crc322();
    var msg = require_messages();
    var Z_NO_FLUSH = 0;
    var Z_PARTIAL_FLUSH = 1;
    var Z_FULL_FLUSH = 3;
    var Z_FINISH = 4;
    var Z_BLOCK = 5;
    var Z_OK = 0;
    var Z_STREAM_END = 1;
    var Z_STREAM_ERROR = -2;
    var Z_DATA_ERROR = -3;
    var Z_BUF_ERROR = -5;
    var Z_DEFAULT_COMPRESSION = -1;
    var Z_FILTERED = 1;
    var Z_HUFFMAN_ONLY = 2;
    var Z_RLE = 3;
    var Z_FIXED = 4;
    var Z_DEFAULT_STRATEGY = 0;
    var Z_UNKNOWN = 2;
    var Z_DEFLATED = 8;
    var MAX_MEM_LEVEL = 9;
    var MAX_WBITS = 15;
    var DEF_MEM_LEVEL = 8;
    var LENGTH_CODES = 29;
    var LITERALS = 256;
    var L_CODES = LITERALS + 1 + LENGTH_CODES;
    var D_CODES = 30;
    var BL_CODES = 19;
    var HEAP_SIZE = 2 * L_CODES + 1;
    var MAX_BITS = 15;
    var MIN_MATCH = 3;
    var MAX_MATCH = 258;
    var MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1;
    var PRESET_DICT = 32;
    var INIT_STATE = 42;
    var EXTRA_STATE = 69;
    var NAME_STATE = 73;
    var COMMENT_STATE = 91;
    var HCRC_STATE = 103;
    var BUSY_STATE = 113;
    var FINISH_STATE = 666;
    var BS_NEED_MORE = 1;
    var BS_BLOCK_DONE = 2;
    var BS_FINISH_STARTED = 3;
    var BS_FINISH_DONE = 4;
    var OS_CODE = 3;
    function err(strm, errorCode) {
      strm.msg = msg[errorCode];
      return errorCode;
    }
    function rank(f) {
      return (f << 1) - (f > 4 ? 9 : 0);
    }
    function zero(buf) {
      var len = buf.length;
      while (--len >= 0) {
        buf[len] = 0;
      }
    }
    function flush_pending(strm) {
      var s = strm.state;
      var len = s.pending;
      if (len > strm.avail_out) {
        len = strm.avail_out;
      }
      if (len === 0) {
        return;
      }
      utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);
      strm.next_out += len;
      s.pending_out += len;
      strm.total_out += len;
      strm.avail_out -= len;
      s.pending -= len;
      if (s.pending === 0) {
        s.pending_out = 0;
      }
    }
    function flush_block_only(s, last) {
      trees._tr_flush_block(s, s.block_start >= 0 ? s.block_start : -1, s.strstart - s.block_start, last);
      s.block_start = s.strstart;
      flush_pending(s.strm);
    }
    function put_byte(s, b) {
      s.pending_buf[s.pending++] = b;
    }
    function putShortMSB(s, b) {
      s.pending_buf[s.pending++] = b >>> 8 & 255;
      s.pending_buf[s.pending++] = b & 255;
    }
    function read_buf(strm, buf, start, size) {
      var len = strm.avail_in;
      if (len > size) {
        len = size;
      }
      if (len === 0) {
        return 0;
      }
      strm.avail_in -= len;
      utils.arraySet(buf, strm.input, strm.next_in, len, start);
      if (strm.state.wrap === 1) {
        strm.adler = adler32(strm.adler, buf, len, start);
      } else if (strm.state.wrap === 2) {
        strm.adler = crc32(strm.adler, buf, len, start);
      }
      strm.next_in += len;
      strm.total_in += len;
      return len;
    }
    function longest_match(s, cur_match) {
      var chain_length = s.max_chain_length;
      var scan = s.strstart;
      var match;
      var len;
      var best_len = s.prev_length;
      var nice_match = s.nice_match;
      var limit = s.strstart > s.w_size - MIN_LOOKAHEAD ? s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0;
      var _win = s.window;
      var wmask = s.w_mask;
      var prev = s.prev;
      var strend = s.strstart + MAX_MATCH;
      var scan_end1 = _win[scan + best_len - 1];
      var scan_end = _win[scan + best_len];
      if (s.prev_length >= s.good_match) {
        chain_length >>= 2;
      }
      if (nice_match > s.lookahead) {
        nice_match = s.lookahead;
      }
      do {
        match = cur_match;
        if (_win[match + best_len] !== scan_end || _win[match + best_len - 1] !== scan_end1 || _win[match] !== _win[scan] || _win[++match] !== _win[scan + 1]) {
          continue;
        }
        scan += 2;
        match++;
        do {
        } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && scan < strend);
        len = MAX_MATCH - (strend - scan);
        scan = strend - MAX_MATCH;
        if (len > best_len) {
          s.match_start = cur_match;
          best_len = len;
          if (len >= nice_match) {
            break;
          }
          scan_end1 = _win[scan + best_len - 1];
          scan_end = _win[scan + best_len];
        }
      } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);
      if (best_len <= s.lookahead) {
        return best_len;
      }
      return s.lookahead;
    }
    function fill_window(s) {
      var _w_size = s.w_size;
      var p, n, m, more, str;
      do {
        more = s.window_size - s.lookahead - s.strstart;
        if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {
          utils.arraySet(s.window, s.window, _w_size, _w_size, 0);
          s.match_start -= _w_size;
          s.strstart -= _w_size;
          s.block_start -= _w_size;
          n = s.hash_size;
          p = n;
          do {
            m = s.head[--p];
            s.head[p] = m >= _w_size ? m - _w_size : 0;
          } while (--n);
          n = _w_size;
          p = n;
          do {
            m = s.prev[--p];
            s.prev[p] = m >= _w_size ? m - _w_size : 0;
          } while (--n);
          more += _w_size;
        }
        if (s.strm.avail_in === 0) {
          break;
        }
        n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);
        s.lookahead += n;
        if (s.lookahead + s.insert >= MIN_MATCH) {
          str = s.strstart - s.insert;
          s.ins_h = s.window[str];
          s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + 1]) & s.hash_mask;
          while (s.insert) {
            s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;
            s.prev[str & s.w_mask] = s.head[s.ins_h];
            s.head[s.ins_h] = str;
            str++;
            s.insert--;
            if (s.lookahead + s.insert < MIN_MATCH) {
              break;
            }
          }
        }
      } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);
    }
    function deflate_stored(s, flush) {
      var max_block_size = 65535;
      if (max_block_size > s.pending_buf_size - 5) {
        max_block_size = s.pending_buf_size - 5;
      }
      for (; ; ) {
        if (s.lookahead <= 1) {
          fill_window(s);
          if (s.lookahead === 0 && flush === Z_NO_FLUSH) {
            return BS_NEED_MORE;
          }
          if (s.lookahead === 0) {
            break;
          }
        }
        s.strstart += s.lookahead;
        s.lookahead = 0;
        var max_start = s.block_start + max_block_size;
        if (s.strstart === 0 || s.strstart >= max_start) {
          s.lookahead = s.strstart - max_start;
          s.strstart = max_start;
          flush_block_only(s, false);
          if (s.strm.avail_out === 0) {
            return BS_NEED_MORE;
          }
        }
        if (s.strstart - s.block_start >= s.w_size - MIN_LOOKAHEAD) {
          flush_block_only(s, false);
          if (s.strm.avail_out === 0) {
            return BS_NEED_MORE;
          }
        }
      }
      s.insert = 0;
      if (flush === Z_FINISH) {
        flush_block_only(s, true);
        if (s.strm.avail_out === 0) {
          return BS_FINISH_STARTED;
        }
        return BS_FINISH_DONE;
      }
      if (s.strstart > s.block_start) {
        flush_block_only(s, false);
        if (s.strm.avail_out === 0) {
          return BS_NEED_MORE;
        }
      }
      return BS_NEED_MORE;
    }
    function deflate_fast(s, flush) {
      var hash_head;
      var bflush;
      for (; ; ) {
        if (s.lookahead < MIN_LOOKAHEAD) {
          fill_window(s);
          if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
            return BS_NEED_MORE;
          }
          if (s.lookahead === 0) {
            break;
          }
        }
        hash_head = 0;
        if (s.lookahead >= MIN_MATCH) {
          s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
          s.head[s.ins_h] = s.strstart;
        }
        if (hash_head !== 0 && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD) {
          s.match_length = longest_match(s, hash_head);
        }
        if (s.match_length >= MIN_MATCH) {
          bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);
          s.lookahead -= s.match_length;
          if (s.match_length <= s.max_lazy_match && s.lookahead >= MIN_MATCH) {
            s.match_length--;
            do {
              s.strstart++;
              s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
              hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
              s.head[s.ins_h] = s.strstart;
            } while (--s.match_length !== 0);
            s.strstart++;
          } else {
            s.strstart += s.match_length;
            s.match_length = 0;
            s.ins_h = s.window[s.strstart];
            s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + 1]) & s.hash_mask;
          }
        } else {
          bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
          s.lookahead--;
          s.strstart++;
        }
        if (bflush) {
          flush_block_only(s, false);
          if (s.strm.avail_out === 0) {
            return BS_NEED_MORE;
          }
        }
      }
      s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;
      if (flush === Z_FINISH) {
        flush_block_only(s, true);
        if (s.strm.avail_out === 0) {
          return BS_FINISH_STARTED;
        }
        return BS_FINISH_DONE;
      }
      if (s.last_lit) {
        flush_block_only(s, false);
        if (s.strm.avail_out === 0) {
          return BS_NEED_MORE;
        }
      }
      return BS_BLOCK_DONE;
    }
    function deflate_slow(s, flush) {
      var hash_head;
      var bflush;
      var max_insert;
      for (; ; ) {
        if (s.lookahead < MIN_LOOKAHEAD) {
          fill_window(s);
          if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
            return BS_NEED_MORE;
          }
          if (s.lookahead === 0) {
            break;
          }
        }
        hash_head = 0;
        if (s.lookahead >= MIN_MATCH) {
          s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
          s.head[s.ins_h] = s.strstart;
        }
        s.prev_length = s.match_length;
        s.prev_match = s.match_start;
        s.match_length = MIN_MATCH - 1;
        if (hash_head !== 0 && s.prev_length < s.max_lazy_match && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD) {
          s.match_length = longest_match(s, hash_head);
          if (s.match_length <= 5 && (s.strategy === Z_FILTERED || s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096)) {
            s.match_length = MIN_MATCH - 1;
          }
        }
        if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {
          max_insert = s.strstart + s.lookahead - MIN_MATCH;
          bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);
          s.lookahead -= s.prev_length - 1;
          s.prev_length -= 2;
          do {
            if (++s.strstart <= max_insert) {
              s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
              hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
              s.head[s.ins_h] = s.strstart;
            }
          } while (--s.prev_length !== 0);
          s.match_available = 0;
          s.match_length = MIN_MATCH - 1;
          s.strstart++;
          if (bflush) {
            flush_block_only(s, false);
            if (s.strm.avail_out === 0) {
              return BS_NEED_MORE;
            }
          }
        } else if (s.match_available) {
          bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);
          if (bflush) {
            flush_block_only(s, false);
          }
          s.strstart++;
          s.lookahead--;
          if (s.strm.avail_out === 0) {
            return BS_NEED_MORE;
          }
        } else {
          s.match_available = 1;
          s.strstart++;
          s.lookahead--;
        }
      }
      if (s.match_available) {
        bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);
        s.match_available = 0;
      }
      s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;
      if (flush === Z_FINISH) {
        flush_block_only(s, true);
        if (s.strm.avail_out === 0) {
          return BS_FINISH_STARTED;
        }
        return BS_FINISH_DONE;
      }
      if (s.last_lit) {
        flush_block_only(s, false);
        if (s.strm.avail_out === 0) {
          return BS_NEED_MORE;
        }
      }
      return BS_BLOCK_DONE;
    }
    function deflate_rle(s, flush) {
      var bflush;
      var prev;
      var scan, strend;
      var _win = s.window;
      for (; ; ) {
        if (s.lookahead <= MAX_MATCH) {
          fill_window(s);
          if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {
            return BS_NEED_MORE;
          }
          if (s.lookahead === 0) {
            break;
          }
        }
        s.match_length = 0;
        if (s.lookahead >= MIN_MATCH && s.strstart > 0) {
          scan = s.strstart - 1;
          prev = _win[scan];
          if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {
            strend = s.strstart + MAX_MATCH;
            do {
            } while (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && scan < strend);
            s.match_length = MAX_MATCH - (strend - scan);
            if (s.match_length > s.lookahead) {
              s.match_length = s.lookahead;
            }
          }
        }
        if (s.match_length >= MIN_MATCH) {
          bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);
          s.lookahead -= s.match_length;
          s.strstart += s.match_length;
          s.match_length = 0;
        } else {
          bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
          s.lookahead--;
          s.strstart++;
        }
        if (bflush) {
          flush_block_only(s, false);
          if (s.strm.avail_out === 0) {
            return BS_NEED_MORE;
          }
        }
      }
      s.insert = 0;
      if (flush === Z_FINISH) {
        flush_block_only(s, true);
        if (s.strm.avail_out === 0) {
          return BS_FINISH_STARTED;
        }
        return BS_FINISH_DONE;
      }
      if (s.last_lit) {
        flush_block_only(s, false);
        if (s.strm.avail_out === 0) {
          return BS_NEED_MORE;
        }
      }
      return BS_BLOCK_DONE;
    }
    function deflate_huff(s, flush) {
      var bflush;
      for (; ; ) {
        if (s.lookahead === 0) {
          fill_window(s);
          if (s.lookahead === 0) {
            if (flush === Z_NO_FLUSH) {
              return BS_NEED_MORE;
            }
            break;
          }
        }
        s.match_length = 0;
        bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
        s.lookahead--;
        s.strstart++;
        if (bflush) {
          flush_block_only(s, false);
          if (s.strm.avail_out === 0) {
            return BS_NEED_MORE;
          }
        }
      }
      s.insert = 0;
      if (flush === Z_FINISH) {
        flush_block_only(s, true);
        if (s.strm.avail_out === 0) {
          return BS_FINISH_STARTED;
        }
        return BS_FINISH_DONE;
      }
      if (s.last_lit) {
        flush_block_only(s, false);
        if (s.strm.avail_out === 0) {
          return BS_NEED_MORE;
        }
      }
      return BS_BLOCK_DONE;
    }
    function Config(good_length, max_lazy, nice_length, max_chain, func) {
      this.good_length = good_length;
      this.max_lazy = max_lazy;
      this.nice_length = nice_length;
      this.max_chain = max_chain;
      this.func = func;
    }
    var configuration_table;
    configuration_table = [
      /*      good lazy nice chain */
      new Config(0, 0, 0, 0, deflate_stored),
      /* 0 store only */
      new Config(4, 4, 8, 4, deflate_fast),
      /* 1 max speed, no lazy matches */
      new Config(4, 5, 16, 8, deflate_fast),
      /* 2 */
      new Config(4, 6, 32, 32, deflate_fast),
      /* 3 */
      new Config(4, 4, 16, 16, deflate_slow),
      /* 4 lazy matches */
      new Config(8, 16, 32, 32, deflate_slow),
      /* 5 */
      new Config(8, 16, 128, 128, deflate_slow),
      /* 6 */
      new Config(8, 32, 128, 256, deflate_slow),
      /* 7 */
      new Config(32, 128, 258, 1024, deflate_slow),
      /* 8 */
      new Config(32, 258, 258, 4096, deflate_slow)
      /* 9 max compression */
    ];
    function lm_init(s) {
      s.window_size = 2 * s.w_size;
      zero(s.head);
      s.max_lazy_match = configuration_table[s.level].max_lazy;
      s.good_match = configuration_table[s.level].good_length;
      s.nice_match = configuration_table[s.level].nice_length;
      s.max_chain_length = configuration_table[s.level].max_chain;
      s.strstart = 0;
      s.block_start = 0;
      s.lookahead = 0;
      s.insert = 0;
      s.match_length = s.prev_length = MIN_MATCH - 1;
      s.match_available = 0;
      s.ins_h = 0;
    }
    function DeflateState() {
      this.strm = null;
      this.status = 0;
      this.pending_buf = null;
      this.pending_buf_size = 0;
      this.pending_out = 0;
      this.pending = 0;
      this.wrap = 0;
      this.gzhead = null;
      this.gzindex = 0;
      this.method = Z_DEFLATED;
      this.last_flush = -1;
      this.w_size = 0;
      this.w_bits = 0;
      this.w_mask = 0;
      this.window = null;
      this.window_size = 0;
      this.prev = null;
      this.head = null;
      this.ins_h = 0;
      this.hash_size = 0;
      this.hash_bits = 0;
      this.hash_mask = 0;
      this.hash_shift = 0;
      this.block_start = 0;
      this.match_length = 0;
      this.prev_match = 0;
      this.match_available = 0;
      this.strstart = 0;
      this.match_start = 0;
      this.lookahead = 0;
      this.prev_length = 0;
      this.max_chain_length = 0;
      this.max_lazy_match = 0;
      this.level = 0;
      this.strategy = 0;
      this.good_match = 0;
      this.nice_match = 0;
      this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);
      this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);
      this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);
      zero(this.dyn_ltree);
      zero(this.dyn_dtree);
      zero(this.bl_tree);
      this.l_desc = null;
      this.d_desc = null;
      this.bl_desc = null;
      this.bl_count = new utils.Buf16(MAX_BITS + 1);
      this.heap = new utils.Buf16(2 * L_CODES + 1);
      zero(this.heap);
      this.heap_len = 0;
      this.heap_max = 0;
      this.depth = new utils.Buf16(2 * L_CODES + 1);
      zero(this.depth);
      this.l_buf = 0;
      this.lit_bufsize = 0;
      this.last_lit = 0;
      this.d_buf = 0;
      this.opt_len = 0;
      this.static_len = 0;
      this.matches = 0;
      this.insert = 0;
      this.bi_buf = 0;
      this.bi_valid = 0;
    }
    function deflateResetKeep(strm) {
      var s;
      if (!strm || !strm.state) {
        return err(strm, Z_STREAM_ERROR);
      }
      strm.total_in = strm.total_out = 0;
      strm.data_type = Z_UNKNOWN;
      s = strm.state;
      s.pending = 0;
      s.pending_out = 0;
      if (s.wrap < 0) {
        s.wrap = -s.wrap;
      }
      s.status = s.wrap ? INIT_STATE : BUSY_STATE;
      strm.adler = s.wrap === 2 ? 0 : 1;
      s.last_flush = Z_NO_FLUSH;
      trees._tr_init(s);
      return Z_OK;
    }
    function deflateReset(strm) {
      var ret = deflateResetKeep(strm);
      if (ret === Z_OK) {
        lm_init(strm.state);
      }
      return ret;
    }
    function deflateSetHeader(strm, head) {
      if (!strm || !strm.state) {
        return Z_STREAM_ERROR;
      }
      if (strm.state.wrap !== 2) {
        return Z_STREAM_ERROR;
      }
      strm.state.gzhead = head;
      return Z_OK;
    }
    function deflateInit2(strm, level, method, windowBits, memLevel, strategy) {
      if (!strm) {
        return Z_STREAM_ERROR;
      }
      var wrap = 1;
      if (level === Z_DEFAULT_COMPRESSION) {
        level = 6;
      }
      if (windowBits < 0) {
        wrap = 0;
        windowBits = -windowBits;
      } else if (windowBits > 15) {
        wrap = 2;
        windowBits -= 16;
      }
      if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) {
        return err(strm, Z_STREAM_ERROR);
      }
      if (windowBits === 8) {
        windowBits = 9;
      }
      var s = new DeflateState();
      strm.state = s;
      s.strm = strm;
      s.wrap = wrap;
      s.gzhead = null;
      s.w_bits = windowBits;
      s.w_size = 1 << s.w_bits;
      s.w_mask = s.w_size - 1;
      s.hash_bits = memLevel + 7;
      s.hash_size = 1 << s.hash_bits;
      s.hash_mask = s.hash_size - 1;
      s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);
      s.window = new utils.Buf8(s.w_size * 2);
      s.head = new utils.Buf16(s.hash_size);
      s.prev = new utils.Buf16(s.w_size);
      s.lit_bufsize = 1 << memLevel + 6;
      s.pending_buf_size = s.lit_bufsize * 4;
      s.pending_buf = new utils.Buf8(s.pending_buf_size);
      s.d_buf = 1 * s.lit_bufsize;
      s.l_buf = (1 + 2) * s.lit_bufsize;
      s.level = level;
      s.strategy = strategy;
      s.method = method;
      return deflateReset(strm);
    }
    function deflateInit(strm, level) {
      return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);
    }
    function deflate(strm, flush) {
      var old_flush, s;
      var beg, val;
      if (!strm || !strm.state || flush > Z_BLOCK || flush < 0) {
        return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;
      }
      s = strm.state;
      if (!strm.output || !strm.input && strm.avail_in !== 0 || s.status === FINISH_STATE && flush !== Z_FINISH) {
        return err(strm, strm.avail_out === 0 ? Z_BUF_ERROR : Z_STREAM_ERROR);
      }
      s.strm = strm;
      old_flush = s.last_flush;
      s.last_flush = flush;
      if (s.status === INIT_STATE) {
        if (s.wrap === 2) {
          strm.adler = 0;
          put_byte(s, 31);
          put_byte(s, 139);
          put_byte(s, 8);
          if (!s.gzhead) {
            put_byte(s, 0);
            put_byte(s, 0);
            put_byte(s, 0);
            put_byte(s, 0);
            put_byte(s, 0);
            put_byte(s, s.level === 9 ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0);
            put_byte(s, OS_CODE);
            s.status = BUSY_STATE;
          } else {
            put_byte(
              s,
              (s.gzhead.text ? 1 : 0) + (s.gzhead.hcrc ? 2 : 0) + (!s.gzhead.extra ? 0 : 4) + (!s.gzhead.name ? 0 : 8) + (!s.gzhead.comment ? 0 : 16)
            );
            put_byte(s, s.gzhead.time & 255);
            put_byte(s, s.gzhead.time >> 8 & 255);
            put_byte(s, s.gzhead.time >> 16 & 255);
            put_byte(s, s.gzhead.time >> 24 & 255);
            put_byte(s, s.level === 9 ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0);
            put_byte(s, s.gzhead.os & 255);
            if (s.gzhead.extra && s.gzhead.extra.length) {
              put_byte(s, s.gzhead.extra.length & 255);
              put_byte(s, s.gzhead.extra.length >> 8 & 255);
            }
            if (s.gzhead.hcrc) {
              strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);
            }
            s.gzindex = 0;
            s.status = EXTRA_STATE;
          }
        } else {
          var header = Z_DEFLATED + (s.w_bits - 8 << 4) << 8;
          var level_flags = -1;
          if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {
            level_flags = 0;
          } else if (s.level < 6) {
            level_flags = 1;
          } else if (s.level === 6) {
            level_flags = 2;
          } else {
            level_flags = 3;
          }
          header |= level_flags << 6;
          if (s.strstart !== 0) {
            header |= PRESET_DICT;
          }
          header += 31 - header % 31;
          s.status = BUSY_STATE;
          putShortMSB(s, header);
          if (s.strstart !== 0) {
            putShortMSB(s, strm.adler >>> 16);
            putShortMSB(s, strm.adler & 65535);
          }
          strm.adler = 1;
        }
      }
      if (s.status === EXTRA_STATE) {
        if (s.gzhead.extra) {
          beg = s.pending;
          while (s.gzindex < (s.gzhead.extra.length & 65535)) {
            if (s.pending === s.pending_buf_size) {
              if (s.gzhead.hcrc && s.pending > beg) {
                strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
              }
              flush_pending(strm);
              beg = s.pending;
              if (s.pending === s.pending_buf_size) {
                break;
              }
            }
            put_byte(s, s.gzhead.extra[s.gzindex] & 255);
            s.gzindex++;
          }
          if (s.gzhead.hcrc && s.pending > beg) {
            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
          }
          if (s.gzindex === s.gzhead.extra.length) {
            s.gzindex = 0;
            s.status = NAME_STATE;
          }
        } else {
          s.status = NAME_STATE;
        }
      }
      if (s.status === NAME_STATE) {
        if (s.gzhead.name) {
          beg = s.pending;
          do {
            if (s.pending === s.pending_buf_size) {
              if (s.gzhead.hcrc && s.pending > beg) {
                strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
              }
              flush_pending(strm);
              beg = s.pending;
              if (s.pending === s.pending_buf_size) {
                val = 1;
                break;
              }
            }
            if (s.gzindex < s.gzhead.name.length) {
              val = s.gzhead.name.charCodeAt(s.gzindex++) & 255;
            } else {
              val = 0;
            }
            put_byte(s, val);
          } while (val !== 0);
          if (s.gzhead.hcrc && s.pending > beg) {
            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
          }
          if (val === 0) {
            s.gzindex = 0;
            s.status = COMMENT_STATE;
          }
        } else {
          s.status = COMMENT_STATE;
        }
      }
      if (s.status === COMMENT_STATE) {
        if (s.gzhead.comment) {
          beg = s.pending;
          do {
            if (s.pending === s.pending_buf_size) {
              if (s.gzhead.hcrc && s.pending > beg) {
                strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
              }
              flush_pending(strm);
              beg = s.pending;
              if (s.pending === s.pending_buf_size) {
                val = 1;
                break;
              }
            }
            if (s.gzindex < s.gzhead.comment.length) {
              val = s.gzhead.comment.charCodeAt(s.gzindex++) & 255;
            } else {
              val = 0;
            }
            put_byte(s, val);
          } while (val !== 0);
          if (s.gzhead.hcrc && s.pending > beg) {
            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
          }
          if (val === 0) {
            s.status = HCRC_STATE;
          }
        } else {
          s.status = HCRC_STATE;
        }
      }
      if (s.status === HCRC_STATE) {
        if (s.gzhead.hcrc) {
          if (s.pending + 2 > s.pending_buf_size) {
            flush_pending(strm);
          }
          if (s.pending + 2 <= s.pending_buf_size) {
            put_byte(s, strm.adler & 255);
            put_byte(s, strm.adler >> 8 & 255);
            strm.adler = 0;
            s.status = BUSY_STATE;
          }
        } else {
          s.status = BUSY_STATE;
        }
      }
      if (s.pending !== 0) {
        flush_pending(strm);
        if (strm.avail_out === 0) {
          s.last_flush = -1;
          return Z_OK;
        }
      } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && flush !== Z_FINISH) {
        return err(strm, Z_BUF_ERROR);
      }
      if (s.status === FINISH_STATE && strm.avail_in !== 0) {
        return err(strm, Z_BUF_ERROR);
      }
      if (strm.avail_in !== 0 || s.lookahead !== 0 || flush !== Z_NO_FLUSH && s.status !== FINISH_STATE) {
        var bstate = s.strategy === Z_HUFFMAN_ONLY ? deflate_huff(s, flush) : s.strategy === Z_RLE ? deflate_rle(s, flush) : configuration_table[s.level].func(s, flush);
        if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {
          s.status = FINISH_STATE;
        }
        if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {
          if (strm.avail_out === 0) {
            s.last_flush = -1;
          }
          return Z_OK;
        }
        if (bstate === BS_BLOCK_DONE) {
          if (flush === Z_PARTIAL_FLUSH) {
            trees._tr_align(s);
          } else if (flush !== Z_BLOCK) {
            trees._tr_stored_block(s, 0, 0, false);
            if (flush === Z_FULL_FLUSH) {
              zero(s.head);
              if (s.lookahead === 0) {
                s.strstart = 0;
                s.block_start = 0;
                s.insert = 0;
              }
            }
          }
          flush_pending(strm);
          if (strm.avail_out === 0) {
            s.last_flush = -1;
            return Z_OK;
          }
        }
      }
      if (flush !== Z_FINISH) {
        return Z_OK;
      }
      if (s.wrap <= 0) {
        return Z_STREAM_END;
      }
      if (s.wrap === 2) {
        put_byte(s, strm.adler & 255);
        put_byte(s, strm.adler >> 8 & 255);
        put_byte(s, strm.adler >> 16 & 255);
        put_byte(s, strm.adler >> 24 & 255);
        put_byte(s, strm.total_in & 255);
        put_byte(s, strm.total_in >> 8 & 255);
        put_byte(s, strm.total_in >> 16 & 255);
        put_byte(s, strm.total_in >> 24 & 255);
      } else {
        putShortMSB(s, strm.adler >>> 16);
        putShortMSB(s, strm.adler & 65535);
      }
      flush_pending(strm);
      if (s.wrap > 0) {
        s.wrap = -s.wrap;
      }
      return s.pending !== 0 ? Z_OK : Z_STREAM_END;
    }
    function deflateEnd(strm) {
      var status;
      if (!strm || !strm.state) {
        return Z_STREAM_ERROR;
      }
      status = strm.state.status;
      if (status !== INIT_STATE && status !== EXTRA_STATE && status !== NAME_STATE && status !== COMMENT_STATE && status !== HCRC_STATE && status !== BUSY_STATE && status !== FINISH_STATE) {
        return err(strm, Z_STREAM_ERROR);
      }
      strm.state = null;
      return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;
    }
    function deflateSetDictionary(strm, dictionary) {
      var dictLength = dictionary.length;
      var s;
      var str, n;
      var wrap;
      var avail;
      var next;
      var input;
      var tmpDict;
      if (!strm || !strm.state) {
        return Z_STREAM_ERROR;
      }
      s = strm.state;
      wrap = s.wrap;
      if (wrap === 2 || wrap === 1 && s.status !== INIT_STATE || s.lookahead) {
        return Z_STREAM_ERROR;
      }
      if (wrap === 1) {
        strm.adler = adler32(strm.adler, dictionary, dictLength, 0);
      }
      s.wrap = 0;
      if (dictLength >= s.w_size) {
        if (wrap === 0) {
          zero(s.head);
          s.strstart = 0;
          s.block_start = 0;
          s.insert = 0;
        }
        tmpDict = new utils.Buf8(s.w_size);
        utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);
        dictionary = tmpDict;
        dictLength = s.w_size;
      }
      avail = strm.avail_in;
      next = strm.next_in;
      input = strm.input;
      strm.avail_in = dictLength;
      strm.next_in = 0;
      strm.input = dictionary;
      fill_window(s);
      while (s.lookahead >= MIN_MATCH) {
        str = s.strstart;
        n = s.lookahead - (MIN_MATCH - 1);
        do {
          s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;
          s.prev[str & s.w_mask] = s.head[s.ins_h];
          s.head[s.ins_h] = str;
          str++;
        } while (--n);
        s.strstart = str;
        s.lookahead = MIN_MATCH - 1;
        fill_window(s);
      }
      s.strstart += s.lookahead;
      s.block_start = s.strstart;
      s.insert = s.lookahead;
      s.lookahead = 0;
      s.match_length = s.prev_length = MIN_MATCH - 1;
      s.match_available = 0;
      strm.next_in = next;
      strm.input = input;
      strm.avail_in = avail;
      s.wrap = wrap;
      return Z_OK;
    }
    exports.deflateInit = deflateInit;
    exports.deflateInit2 = deflateInit2;
    exports.deflateReset = deflateReset;
    exports.deflateResetKeep = deflateResetKeep;
    exports.deflateSetHeader = deflateSetHeader;
    exports.deflate = deflate;
    exports.deflateEnd = deflateEnd;
    exports.deflateSetDictionary = deflateSetDictionary;
    exports.deflateInfo = "pako deflate (from Nodeca project)";
  }
});

// node_modules/pako/lib/utils/strings.js
var require_strings = __commonJS({
  "node_modules/pako/lib/utils/strings.js"(exports) {
    "use strict";
    var utils = require_common();
    var STR_APPLY_OK = true;
    var STR_APPLY_UIA_OK = true;
    try {
      String.fromCharCode.apply(null, [0]);
    } catch (__) {
      STR_APPLY_OK = false;
    }
    try {
      String.fromCharCode.apply(null, new Uint8Array(1));
    } catch (__) {
      STR_APPLY_UIA_OK = false;
    }
    var _utf8len = new utils.Buf8(256);
    for (q = 0; q < 256; q++) {
      _utf8len[q] = q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1;
    }
    var q;
    _utf8len[254] = _utf8len[254] = 1;
    exports.string2buf = function(str) {
      var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;
      for (m_pos = 0; m_pos < str_len; m_pos++) {
        c = str.charCodeAt(m_pos);
        if ((c & 64512) === 55296 && m_pos + 1 < str_len) {
          c2 = str.charCodeAt(m_pos + 1);
          if ((c2 & 64512) === 56320) {
            c = 65536 + (c - 55296 << 10) + (c2 - 56320);
            m_pos++;
          }
        }
        buf_len += c < 128 ? 1 : c < 2048 ? 2 : c < 65536 ? 3 : 4;
      }
      buf = new utils.Buf8(buf_len);
      for (i = 0, m_pos = 0; i < buf_len; m_pos++) {
        c = str.charCodeAt(m_pos);
        if ((c & 64512) === 55296 && m_pos + 1 < str_len) {
          c2 = str.charCodeAt(m_pos + 1);
          if ((c2 & 64512) === 56320) {
            c = 65536 + (c - 55296 << 10) + (c2 - 56320);
            m_pos++;
          }
        }
        if (c < 128) {
          buf[i++] = c;
        } else if (c < 2048) {
          buf[i++] = 192 | c >>> 6;
          buf[i++] = 128 | c & 63;
        } else if (c < 65536) {
          buf[i++] = 224 | c >>> 12;
          buf[i++] = 128 | c >>> 6 & 63;
          buf[i++] = 128 | c & 63;
        } else {
          buf[i++] = 240 | c >>> 18;
          buf[i++] = 128 | c >>> 12 & 63;
          buf[i++] = 128 | c >>> 6 & 63;
          buf[i++] = 128 | c & 63;
        }
      }
      return buf;
    };
    function buf2binstring(buf, len) {
      if (len < 65534) {
        if (buf.subarray && STR_APPLY_UIA_OK || !buf.subarray && STR_APPLY_OK) {
          return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));
        }
      }
      var result = "";
      for (var i = 0; i < len; i++) {
        result += String.fromCharCode(buf[i]);
      }
      return result;
    }
    exports.buf2binstring = function(buf) {
      return buf2binstring(buf, buf.length);
    };
    exports.binstring2buf = function(str) {
      var buf = new utils.Buf8(str.length);
      for (var i = 0, len = buf.length; i < len; i++) {
        buf[i] = str.charCodeAt(i);
      }
      return buf;
    };
    exports.buf2string = function(buf, max) {
      var i, out, c, c_len;
      var len = max || buf.length;
      var utf16buf = new Array(len * 2);
      for (out = 0, i = 0; i < len; ) {
        c = buf[i++];
        if (c < 128) {
          utf16buf[out++] = c;
          continue;
        }
        c_len = _utf8len[c];
        if (c_len > 4) {
          utf16buf[out++] = 65533;
          i += c_len - 1;
          continue;
        }
        c &= c_len === 2 ? 31 : c_len === 3 ? 15 : 7;
        while (c_len > 1 && i < len) {
          c = c << 6 | buf[i++] & 63;
          c_len--;
        }
        if (c_len > 1) {
          utf16buf[out++] = 65533;
          continue;
        }
        if (c < 65536) {
          utf16buf[out++] = c;
        } else {
          c -= 65536;
          utf16buf[out++] = 55296 | c >> 10 & 1023;
          utf16buf[out++] = 56320 | c & 1023;
        }
      }
      return buf2binstring(utf16buf, out);
    };
    exports.utf8border = function(buf, max) {
      var pos;
      max = max || buf.length;
      if (max > buf.length) {
        max = buf.length;
      }
      pos = max - 1;
      while (pos >= 0 && (buf[pos] & 192) === 128) {
        pos--;
      }
      if (pos < 0) {
        return max;
      }
      if (pos === 0) {
        return max;
      }
      return pos + _utf8len[buf[pos]] > max ? pos : max;
    };
  }
});

// node_modules/pako/lib/zlib/zstream.js
var require_zstream = __commonJS({
  "node_modules/pako/lib/zlib/zstream.js"(exports, module) {
    "use strict";
    function ZStream() {
      this.input = null;
      this.next_in = 0;
      this.avail_in = 0;
      this.total_in = 0;
      this.output = null;
      this.next_out = 0;
      this.avail_out = 0;
      this.total_out = 0;
      this.msg = "";
      this.state = null;
      this.data_type = 2;
      this.adler = 0;
    }
    module.exports = ZStream;
  }
});

// node_modules/pako/lib/deflate.js
var require_deflate2 = __commonJS({
  "node_modules/pako/lib/deflate.js"(exports) {
    "use strict";
    var zlib_deflate = require_deflate();
    var utils = require_common();
    var strings = require_strings();
    var msg = require_messages();
    var ZStream = require_zstream();
    var toString2 = Object.prototype.toString;
    var Z_NO_FLUSH = 0;
    var Z_FINISH = 4;
    var Z_OK = 0;
    var Z_STREAM_END = 1;
    var Z_SYNC_FLUSH = 2;
    var Z_DEFAULT_COMPRESSION = -1;
    var Z_DEFAULT_STRATEGY = 0;
    var Z_DEFLATED = 8;
    function Deflate(options) {
      if (!(this instanceof Deflate)) return new Deflate(options);
      this.options = utils.assign({
        level: Z_DEFAULT_COMPRESSION,
        method: Z_DEFLATED,
        chunkSize: 16384,
        windowBits: 15,
        memLevel: 8,
        strategy: Z_DEFAULT_STRATEGY,
        to: ""
      }, options || {});
      var opt = this.options;
      if (opt.raw && opt.windowBits > 0) {
        opt.windowBits = -opt.windowBits;
      } else if (opt.gzip && opt.windowBits > 0 && opt.windowBits < 16) {
        opt.windowBits += 16;
      }
      this.err = 0;
      this.msg = "";
      this.ended = false;
      this.chunks = [];
      this.strm = new ZStream();
      this.strm.avail_out = 0;
      var status = zlib_deflate.deflateInit2(
        this.strm,
        opt.level,
        opt.method,
        opt.windowBits,
        opt.memLevel,
        opt.strategy
      );
      if (status !== Z_OK) {
        throw new Error(msg[status]);
      }
      if (opt.header) {
        zlib_deflate.deflateSetHeader(this.strm, opt.header);
      }
      if (opt.dictionary) {
        var dict;
        if (typeof opt.dictionary === "string") {
          dict = strings.string2buf(opt.dictionary);
        } else if (toString2.call(opt.dictionary) === "[object ArrayBuffer]") {
          dict = new Uint8Array(opt.dictionary);
        } else {
          dict = opt.dictionary;
        }
        status = zlib_deflate.deflateSetDictionary(this.strm, dict);
        if (status !== Z_OK) {
          throw new Error(msg[status]);
        }
        this._dict_set = true;
      }
    }
    Deflate.prototype.push = function(data, mode) {
      var strm = this.strm;
      var chunkSize = this.options.chunkSize;
      var status, _mode;
      if (this.ended) {
        return false;
      }
      _mode = mode === ~~mode ? mode : mode === true ? Z_FINISH : Z_NO_FLUSH;
      if (typeof data === "string") {
        strm.input = strings.string2buf(data);
      } else if (toString2.call(data) === "[object ArrayBuffer]") {
        strm.input = new Uint8Array(data);
      } else {
        strm.input = data;
      }
      strm.next_in = 0;
      strm.avail_in = strm.input.length;
      do {
        if (strm.avail_out === 0) {
          strm.output = new utils.Buf8(chunkSize);
          strm.next_out = 0;
          strm.avail_out = chunkSize;
        }
        status = zlib_deflate.deflate(strm, _mode);
        if (status !== Z_STREAM_END && status !== Z_OK) {
          this.onEnd(status);
          this.ended = true;
          return false;
        }
        if (strm.avail_out === 0 || strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH)) {
          if (this.options.to === "string") {
            this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));
          } else {
            this.onData(utils.shrinkBuf(strm.output, strm.next_out));
          }
        }
      } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);
      if (_mode === Z_FINISH) {
        status = zlib_deflate.deflateEnd(this.strm);
        this.onEnd(status);
        this.ended = true;
        return status === Z_OK;
      }
      if (_mode === Z_SYNC_FLUSH) {
        this.onEnd(Z_OK);
        strm.avail_out = 0;
        return true;
      }
      return true;
    };
    Deflate.prototype.onData = function(chunk) {
      this.chunks.push(chunk);
    };
    Deflate.prototype.onEnd = function(status) {
      if (status === Z_OK) {
        if (this.options.to === "string") {
          this.result = this.chunks.join("");
        } else {
          this.result = utils.flattenChunks(this.chunks);
        }
      }
      this.chunks = [];
      this.err = status;
      this.msg = this.strm.msg;
    };
    function deflate(input, options) {
      var deflator = new Deflate(options);
      deflator.push(input, true);
      if (deflator.err) {
        throw deflator.msg || msg[deflator.err];
      }
      return deflator.result;
    }
    function deflateRaw(input, options) {
      options = options || {};
      options.raw = true;
      return deflate(input, options);
    }
    function gzip(input, options) {
      options = options || {};
      options.gzip = true;
      return deflate(input, options);
    }
    exports.Deflate = Deflate;
    exports.deflate = deflate;
    exports.deflateRaw = deflateRaw;
    exports.gzip = gzip;
  }
});

// node_modules/pako/lib/zlib/inffast.js
var require_inffast = __commonJS({
  "node_modules/pako/lib/zlib/inffast.js"(exports, module) {
    "use strict";
    var BAD = 30;
    var TYPE = 12;
    module.exports = function inflate_fast(strm, start) {
      var state;
      var _in;
      var last;
      var _out;
      var beg;
      var end;
      var dmax;
      var wsize;
      var whave;
      var wnext;
      var s_window;
      var hold;
      var bits;
      var lcode;
      var dcode;
      var lmask;
      var dmask;
      var here;
      var op;
      var len;
      var dist;
      var from;
      var from_source;
      var input, output;
      state = strm.state;
      _in = strm.next_in;
      input = strm.input;
      last = _in + (strm.avail_in - 5);
      _out = strm.next_out;
      output = strm.output;
      beg = _out - (start - strm.avail_out);
      end = _out + (strm.avail_out - 257);
      dmax = state.dmax;
      wsize = state.wsize;
      whave = state.whave;
      wnext = state.wnext;
      s_window = state.window;
      hold = state.hold;
      bits = state.bits;
      lcode = state.lencode;
      dcode = state.distcode;
      lmask = (1 << state.lenbits) - 1;
      dmask = (1 << state.distbits) - 1;
      top:
        do {
          if (bits < 15) {
            hold += input[_in++] << bits;
            bits += 8;
            hold += input[_in++] << bits;
            bits += 8;
          }
          here = lcode[hold & lmask];
          dolen:
            for (; ; ) {
              op = here >>> 24;
              hold >>>= op;
              bits -= op;
              op = here >>> 16 & 255;
              if (op === 0) {
                output[_out++] = here & 65535;
              } else if (op & 16) {
                len = here & 65535;
                op &= 15;
                if (op) {
                  if (bits < op) {
                    hold += input[_in++] << bits;
                    bits += 8;
                  }
                  len += hold & (1 << op) - 1;
                  hold >>>= op;
                  bits -= op;
                }
                if (bits < 15) {
                  hold += input[_in++] << bits;
                  bits += 8;
                  hold += input[_in++] << bits;
                  bits += 8;
                }
                here = dcode[hold & dmask];
                dodist:
                  for (; ; ) {
                    op = here >>> 24;
                    hold >>>= op;
                    bits -= op;
                    op = here >>> 16 & 255;
                    if (op & 16) {
                      dist = here & 65535;
                      op &= 15;
                      if (bits < op) {
                        hold += input[_in++] << bits;
                        bits += 8;
                        if (bits < op) {
                          hold += input[_in++] << bits;
                          bits += 8;
                        }
                      }
                      dist += hold & (1 << op) - 1;
                      if (dist > dmax) {
                        strm.msg = "invalid distance too far back";
                        state.mode = BAD;
                        break top;
                      }
                      hold >>>= op;
                      bits -= op;
                      op = _out - beg;
                      if (dist > op) {
                        op = dist - op;
                        if (op > whave) {
                          if (state.sane) {
                            strm.msg = "invalid distance too far back";
                            state.mode = BAD;
                            break top;
                          }
                        }
                        from = 0;
                        from_source = s_window;
                        if (wnext === 0) {
                          from += wsize - op;
                          if (op < len) {
                            len -= op;
                            do {
                              output[_out++] = s_window[from++];
                            } while (--op);
                            from = _out - dist;
                            from_source = output;
                          }
                        } else if (wnext < op) {
                          from += wsize + wnext - op;
                          op -= wnext;
                          if (op < len) {
                            len -= op;
                            do {
                              output[_out++] = s_window[from++];
                            } while (--op);
                            from = 0;
                            if (wnext < len) {
                              op = wnext;
                              len -= op;
                              do {
                                output[_out++] = s_window[from++];
                              } while (--op);
                              from = _out - dist;
                              from_source = output;
                            }
                          }
                        } else {
                          from += wnext - op;
                          if (op < len) {
                            len -= op;
                            do {
                              output[_out++] = s_window[from++];
                            } while (--op);
                            from = _out - dist;
                            from_source = output;
                          }
                        }
                        while (len > 2) {
                          output[_out++] = from_source[from++];
                          output[_out++] = from_source[from++];
                          output[_out++] = from_source[from++];
                          len -= 3;
                        }
                        if (len) {
                          output[_out++] = from_source[from++];
                          if (len > 1) {
                            output[_out++] = from_source[from++];
                          }
                        }
                      } else {
                        from = _out - dist;
                        do {
                          output[_out++] = output[from++];
                          output[_out++] = output[from++];
                          output[_out++] = output[from++];
                          len -= 3;
                        } while (len > 2);
                        if (len) {
                          output[_out++] = output[from++];
                          if (len > 1) {
                            output[_out++] = output[from++];
                          }
                        }
                      }
                    } else if ((op & 64) === 0) {
                      here = dcode[(here & 65535) + (hold & (1 << op) - 1)];
                      continue dodist;
                    } else {
                      strm.msg = "invalid distance code";
                      state.mode = BAD;
                      break top;
                    }
                    break;
                  }
              } else if ((op & 64) === 0) {
                here = lcode[(here & 65535) + (hold & (1 << op) - 1)];
                continue dolen;
              } else if (op & 32) {
                state.mode = TYPE;
                break top;
              } else {
                strm.msg = "invalid literal/length code";
                state.mode = BAD;
                break top;
              }
              break;
            }
        } while (_in < last && _out < end);
      len = bits >> 3;
      _in -= len;
      bits -= len << 3;
      hold &= (1 << bits) - 1;
      strm.next_in = _in;
      strm.next_out = _out;
      strm.avail_in = _in < last ? 5 + (last - _in) : 5 - (_in - last);
      strm.avail_out = _out < end ? 257 + (end - _out) : 257 - (_out - end);
      state.hold = hold;
      state.bits = bits;
      return;
    };
  }
});

// node_modules/pako/lib/zlib/inftrees.js
var require_inftrees = __commonJS({
  "node_modules/pako/lib/zlib/inftrees.js"(exports, module) {
    "use strict";
    var utils = require_common();
    var MAXBITS = 15;
    var ENOUGH_LENS = 852;
    var ENOUGH_DISTS = 592;
    var CODES = 0;
    var LENS = 1;
    var DISTS = 2;
    var lbase = [
      /* Length codes 257..285 base */
      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,
      0,
      0
    ];
    var lext = [
      /* Length codes 257..285 extra */
      16,
      16,
      16,
      16,
      16,
      16,
      16,
      16,
      17,
      17,
      17,
      17,
      18,
      18,
      18,
      18,
      19,
      19,
      19,
      19,
      20,
      20,
      20,
      20,
      21,
      21,
      21,
      21,
      16,
      72,
      78
    ];
    var dbase = [
      /* Distance codes 0..29 base */
      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,
      0,
      0
    ];
    var dext = [
      /* Distance codes 0..29 extra */
      16,
      16,
      16,
      16,
      17,
      17,
      18,
      18,
      19,
      19,
      20,
      20,
      21,
      21,
      22,
      22,
      23,
      23,
      24,
      24,
      25,
      25,
      26,
      26,
      27,
      27,
      28,
      28,
      29,
      29,
      64,
      64
    ];
    module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) {
      var bits = opts.bits;
      var len = 0;
      var sym = 0;
      var min = 0, max = 0;
      var root = 0;
      var curr = 0;
      var drop = 0;
      var left = 0;
      var used = 0;
      var huff = 0;
      var incr;
      var fill;
      var low;
      var mask;
      var next;
      var base = null;
      var base_index = 0;
      var end;
      var count = new utils.Buf16(MAXBITS + 1);
      var offs = new utils.Buf16(MAXBITS + 1);
      var extra = null;
      var extra_index = 0;
      var here_bits, here_op, here_val;
      for (len = 0; len <= MAXBITS; len++) {
        count[len] = 0;
      }
      for (sym = 0; sym < codes; sym++) {
        count[lens[lens_index + sym]]++;
      }
      root = bits;
      for (max = MAXBITS; max >= 1; max--) {
        if (count[max] !== 0) {
          break;
        }
      }
      if (root > max) {
        root = max;
      }
      if (max === 0) {
        table[table_index++] = 1 << 24 | 64 << 16 | 0;
        table[table_index++] = 1 << 24 | 64 << 16 | 0;
        opts.bits = 1;
        return 0;
      }
      for (min = 1; min < max; min++) {
        if (count[min] !== 0) {
          break;
        }
      }
      if (root < min) {
        root = min;
      }
      left = 1;
      for (len = 1; len <= MAXBITS; len++) {
        left <<= 1;
        left -= count[len];
        if (left < 0) {
          return -1;
        }
      }
      if (left > 0 && (type === CODES || max !== 1)) {
        return -1;
      }
      offs[1] = 0;
      for (len = 1; len < MAXBITS; len++) {
        offs[len + 1] = offs[len] + count[len];
      }
      for (sym = 0; sym < codes; sym++) {
        if (lens[lens_index + sym] !== 0) {
          work[offs[lens[lens_index + sym]]++] = sym;
        }
      }
      if (type === CODES) {
        base = extra = work;
        end = 19;
      } else if (type === LENS) {
        base = lbase;
        base_index -= 257;
        extra = lext;
        extra_index -= 257;
        end = 256;
      } else {
        base = dbase;
        extra = dext;
        end = -1;
      }
      huff = 0;
      sym = 0;
      len = min;
      next = table_index;
      curr = root;
      drop = 0;
      low = -1;
      used = 1 << root;
      mask = used - 1;
      if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) {
        return 1;
      }
      for (; ; ) {
        here_bits = len - drop;
        if (work[sym] < end) {
          here_op = 0;
          here_val = work[sym];
        } else if (work[sym] > end) {
          here_op = extra[extra_index + work[sym]];
          here_val = base[base_index + work[sym]];
        } else {
          here_op = 32 + 64;
          here_val = 0;
        }
        incr = 1 << len - drop;
        fill = 1 << curr;
        min = fill;
        do {
          fill -= incr;
          table[next + (huff >> drop) + fill] = here_bits << 24 | here_op << 16 | here_val | 0;
        } while (fill !== 0);
        incr = 1 << len - 1;
        while (huff & incr) {
          incr >>= 1;
        }
        if (incr !== 0) {
          huff &= incr - 1;
          huff += incr;
        } else {
          huff = 0;
        }
        sym++;
        if (--count[len] === 0) {
          if (len === max) {
            break;
          }
          len = lens[lens_index + work[sym]];
        }
        if (len > root && (huff & mask) !== low) {
          if (drop === 0) {
            drop = root;
          }
          next += min;
          curr = len - drop;
          left = 1 << curr;
          while (curr + drop < max) {
            left -= count[curr + drop];
            if (left <= 0) {
              break;
            }
            curr++;
            left <<= 1;
          }
          used += 1 << curr;
          if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) {
            return 1;
          }
          low = huff & mask;
          table[low] = root << 24 | curr << 16 | next - table_index | 0;
        }
      }
      if (huff !== 0) {
        table[next + huff] = len - drop << 24 | 64 << 16 | 0;
      }
      opts.bits = root;
      return 0;
    };
  }
});

// node_modules/pako/lib/zlib/inflate.js
var require_inflate = __commonJS({
  "node_modules/pako/lib/zlib/inflate.js"(exports) {
    "use strict";
    var utils = require_common();
    var adler32 = require_adler32();
    var crc32 = require_crc322();
    var inflate_fast = require_inffast();
    var inflate_table = require_inftrees();
    var CODES = 0;
    var LENS = 1;
    var DISTS = 2;
    var Z_FINISH = 4;
    var Z_BLOCK = 5;
    var Z_TREES = 6;
    var Z_OK = 0;
    var Z_STREAM_END = 1;
    var Z_NEED_DICT = 2;
    var Z_STREAM_ERROR = -2;
    var Z_DATA_ERROR = -3;
    var Z_MEM_ERROR = -4;
    var Z_BUF_ERROR = -5;
    var Z_DEFLATED = 8;
    var HEAD = 1;
    var FLAGS = 2;
    var TIME = 3;
    var OS = 4;
    var EXLEN = 5;
    var EXTRA = 6;
    var NAME = 7;
    var COMMENT = 8;
    var HCRC = 9;
    var DICTID = 10;
    var DICT = 11;
    var TYPE = 12;
    var TYPEDO = 13;
    var STORED = 14;
    var COPY_ = 15;
    var COPY = 16;
    var TABLE = 17;
    var LENLENS = 18;
    var CODELENS = 19;
    var LEN_ = 20;
    var LEN = 21;
    var LENEXT = 22;
    var DIST = 23;
    var DISTEXT = 24;
    var MATCH = 25;
    var LIT = 26;
    var CHECK = 27;
    var LENGTH = 28;
    var DONE = 29;
    var BAD = 30;
    var MEM = 31;
    var SYNC = 32;
    var ENOUGH_LENS = 852;
    var ENOUGH_DISTS = 592;
    var MAX_WBITS = 15;
    var DEF_WBITS = MAX_WBITS;
    function zswap32(q) {
      return (q >>> 24 & 255) + (q >>> 8 & 65280) + ((q & 65280) << 8) + ((q & 255) << 24);
    }
    function InflateState() {
      this.mode = 0;
      this.last = false;
      this.wrap = 0;
      this.havedict = false;
      this.flags = 0;
      this.dmax = 0;
      this.check = 0;
      this.total = 0;
      this.head = null;
      this.wbits = 0;
      this.wsize = 0;
      this.whave = 0;
      this.wnext = 0;
      this.window = null;
      this.hold = 0;
      this.bits = 0;
      this.length = 0;
      this.offset = 0;
      this.extra = 0;
      this.lencode = null;
      this.distcode = null;
      this.lenbits = 0;
      this.distbits = 0;
      this.ncode = 0;
      this.nlen = 0;
      this.ndist = 0;
      this.have = 0;
      this.next = null;
      this.lens = new utils.Buf16(320);
      this.work = new utils.Buf16(288);
      this.lendyn = null;
      this.distdyn = null;
      this.sane = 0;
      this.back = 0;
      this.was = 0;
    }
    function inflateResetKeep(strm) {
      var state;
      if (!strm || !strm.state) {
        return Z_STREAM_ERROR;
      }
      state = strm.state;
      strm.total_in = strm.total_out = state.total = 0;
      strm.msg = "";
      if (state.wrap) {
        strm.adler = state.wrap & 1;
      }
      state.mode = HEAD;
      state.last = 0;
      state.havedict = 0;
      state.dmax = 32768;
      state.head = null;
      state.hold = 0;
      state.bits = 0;
      state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);
      state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);
      state.sane = 1;
      state.back = -1;
      return Z_OK;
    }
    function inflateReset(strm) {
      var state;
      if (!strm || !strm.state) {
        return Z_STREAM_ERROR;
      }
      state = strm.state;
      state.wsize = 0;
      state.whave = 0;
      state.wnext = 0;
      return inflateResetKeep(strm);
    }
    function inflateReset2(strm, windowBits) {
      var wrap;
      var state;
      if (!strm || !strm.state) {
        return Z_STREAM_ERROR;
      }
      state = strm.state;
      if (windowBits < 0) {
        wrap = 0;
        windowBits = -windowBits;
      } else {
        wrap = (windowBits >> 4) + 1;
        if (windowBits < 48) {
          windowBits &= 15;
        }
      }
      if (windowBits && (windowBits < 8 || windowBits > 15)) {
        return Z_STREAM_ERROR;
      }
      if (state.window !== null && state.wbits !== windowBits) {
        state.window = null;
      }
      state.wrap = wrap;
      state.wbits = windowBits;
      return inflateReset(strm);
    }
    function inflateInit2(strm, windowBits) {
      var ret;
      var state;
      if (!strm) {
        return Z_STREAM_ERROR;
      }
      state = new InflateState();
      strm.state = state;
      state.window = null;
      ret = inflateReset2(strm, windowBits);
      if (ret !== Z_OK) {
        strm.state = null;
      }
      return ret;
    }
    function inflateInit(strm) {
      return inflateInit2(strm, DEF_WBITS);
    }
    var virgin = true;
    var lenfix;
    var distfix;
    function fixedtables(state) {
      if (virgin) {
        var sym;
        lenfix = new utils.Buf32(512);
        distfix = new utils.Buf32(32);
        sym = 0;
        while (sym < 144) {
          state.lens[sym++] = 8;
        }
        while (sym < 256) {
          state.lens[sym++] = 9;
        }
        while (sym < 280) {
          state.lens[sym++] = 7;
        }
        while (sym < 288) {
          state.lens[sym++] = 8;
        }
        inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });
        sym = 0;
        while (sym < 32) {
          state.lens[sym++] = 5;
        }
        inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });
        virgin = false;
      }
      state.lencode = lenfix;
      state.lenbits = 9;
      state.distcode = distfix;
      state.distbits = 5;
    }
    function updatewindow(strm, src, end, copy) {
      var dist;
      var state = strm.state;
      if (state.window === null) {
        state.wsize = 1 << state.wbits;
        state.wnext = 0;
        state.whave = 0;
        state.window = new utils.Buf8(state.wsize);
      }
      if (copy >= state.wsize) {
        utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);
        state.wnext = 0;
        state.whave = state.wsize;
      } else {
        dist = state.wsize - state.wnext;
        if (dist > copy) {
          dist = copy;
        }
        utils.arraySet(state.window, src, end - copy, dist, state.wnext);
        copy -= dist;
        if (copy) {
          utils.arraySet(state.window, src, end - copy, copy, 0);
          state.wnext = copy;
          state.whave = state.wsize;
        } else {
          state.wnext += dist;
          if (state.wnext === state.wsize) {
            state.wnext = 0;
          }
          if (state.whave < state.wsize) {
            state.whave += dist;
          }
        }
      }
      return 0;
    }
    function inflate(strm, flush) {
      var state;
      var input, output;
      var next;
      var put;
      var have, left;
      var hold;
      var bits;
      var _in, _out;
      var copy;
      var from;
      var from_source;
      var here = 0;
      var here_bits, here_op, here_val;
      var last_bits, last_op, last_val;
      var len;
      var ret;
      var hbuf = new utils.Buf8(4);
      var opts;
      var n;
      var order = (
        /* permutation of code lengths */
        [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]
      );
      if (!strm || !strm.state || !strm.output || !strm.input && strm.avail_in !== 0) {
        return Z_STREAM_ERROR;
      }
      state = strm.state;
      if (state.mode === TYPE) {
        state.mode = TYPEDO;
      }
      put = strm.next_out;
      output = strm.output;
      left = strm.avail_out;
      next = strm.next_in;
      input = strm.input;
      have = strm.avail_in;
      hold = state.hold;
      bits = state.bits;
      _in = have;
      _out = left;
      ret = Z_OK;
      inf_leave:
        for (; ; ) {
          switch (state.mode) {
            case HEAD:
              if (state.wrap === 0) {
                state.mode = TYPEDO;
                break;
              }
              while (bits < 16) {
                if (have === 0) {
                  break inf_leave;
                }
                have--;
                hold += input[next++] << bits;
                bits += 8;
              }
              if (state.wrap & 2 && hold === 35615) {
                state.check = 0;
                hbuf[0] = hold & 255;
                hbuf[1] = hold >>> 8 & 255;
                state.check = crc32(state.check, hbuf, 2, 0);
                hold = 0;
                bits = 0;
                state.mode = FLAGS;
                break;
              }
              state.flags = 0;
              if (state.head) {
                state.head.done = false;
              }
              if (!(state.wrap & 1) || /* check if zlib header allowed */
              (((hold & 255) << 8) + (hold >> 8)) % 31) {
                strm.msg = "incorrect header check";
                state.mode = BAD;
                break;
              }
              if ((hold & 15) !== Z_DEFLATED) {
                strm.msg = "unknown compression method";
                state.mode = BAD;
                break;
              }
              hold >>>= 4;
              bits -= 4;
              len = (hold & 15) + 8;
              if (state.wbits === 0) {
                state.wbits = len;
              } else if (len > state.wbits) {
                strm.msg = "invalid window size";
                state.mode = BAD;
                break;
              }
              state.dmax = 1 << len;
              strm.adler = state.check = 1;
              state.mode = hold & 512 ? DICTID : TYPE;
              hold = 0;
              bits = 0;
              break;
            case FLAGS:
              while (bits < 16) {
                if (have === 0) {
                  break inf_leave;
                }
                have--;
                hold += input[next++] << bits;
                bits += 8;
              }
              state.flags = hold;
              if ((state.flags & 255) !== Z_DEFLATED) {
                strm.msg = "unknown compression method";
                state.mode = BAD;
                break;
              }
              if (state.flags & 57344) {
                strm.msg = "unknown header flags set";
                state.mode = BAD;
                break;
              }
              if (state.head) {
                state.head.text = hold >> 8 & 1;
              }
              if (state.flags & 512) {
                hbuf[0] = hold & 255;
                hbuf[1] = hold >>> 8 & 255;
                state.check = crc32(state.check, hbuf, 2, 0);
              }
              hold = 0;
              bits = 0;
              state.mode = TIME;
            case TIME:
              while (bits < 32) {
                if (have === 0) {
                  break inf_leave;
                }
                have--;
                hold += input[next++] << bits;
                bits += 8;
              }
              if (state.head) {
                state.head.time = hold;
              }
              if (state.flags & 512) {
                hbuf[0] = hold & 255;
                hbuf[1] = hold >>> 8 & 255;
                hbuf[2] = hold >>> 16 & 255;
                hbuf[3] = hold >>> 24 & 255;
                state.check = crc32(state.check, hbuf, 4, 0);
              }
              hold = 0;
              bits = 0;
              state.mode = OS;
            case OS:
              while (bits < 16) {
                if (have === 0) {
                  break inf_leave;
                }
                have--;
                hold += input[next++] << bits;
                bits += 8;
              }
              if (state.head) {
                state.head.xflags = hold & 255;
                state.head.os = hold >> 8;
              }
              if (state.flags & 512) {
                hbuf[0] = hold & 255;
                hbuf[1] = hold >>> 8 & 255;
                state.check = crc32(state.check, hbuf, 2, 0);
              }
              hold = 0;
              bits = 0;
              state.mode = EXLEN;
            case EXLEN:
              if (state.flags & 1024) {
                while (bits < 16) {
                  if (have === 0) {
                    break inf_leave;
                  }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                state.length = hold;
                if (state.head) {
                  state.head.extra_len = hold;
                }
                if (state.flags & 512) {
                  hbuf[0] = hold & 255;
                  hbuf[1] = hold >>> 8 & 255;
                  state.check = crc32(state.check, hbuf, 2, 0);
                }
                hold = 0;
                bits = 0;
              } else if (state.head) {
                state.head.extra = null;
              }
              state.mode = EXTRA;
            case EXTRA:
              if (state.flags & 1024) {
                copy = state.length;
                if (copy > have) {
                  copy = have;
                }
                if (copy) {
                  if (state.head) {
                    len = state.head.extra_len - state.length;
                    if (!state.head.extra) {
                      state.head.extra = new Array(state.head.extra_len);
                    }
                    utils.arraySet(
                      state.head.extra,
                      input,
                      next,
                      // extra field is limited to 65536 bytes
                      // - no need for additional size check
                      copy,
                      /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
                      len
                    );
                  }
                  if (state.flags & 512) {
                    state.check = crc32(state.check, input, copy, next);
                  }
                  have -= copy;
                  next += copy;
                  state.length -= copy;
                }
                if (state.length) {
                  break inf_leave;
                }
              }
              state.length = 0;
              state.mode = NAME;
            case NAME:
              if (state.flags & 2048) {
                if (have === 0) {
                  break inf_leave;
                }
                copy = 0;
                do {
                  len = input[next + copy++];
                  if (state.head && len && state.length < 65536) {
                    state.head.name += String.fromCharCode(len);
                  }
                } while (len && copy < have);
                if (state.flags & 512) {
                  state.check = crc32(state.check, input, copy, next);
                }
                have -= copy;
                next += copy;
                if (len) {
                  break inf_leave;
                }
              } else if (state.head) {
                state.head.name = null;
              }
              state.length = 0;
              state.mode = COMMENT;
            case COMMENT:
              if (state.flags & 4096) {
                if (have === 0) {
                  break inf_leave;
                }
                copy = 0;
                do {
                  len = input[next + copy++];
                  if (state.head && len && state.length < 65536) {
                    state.head.comment += String.fromCharCode(len);
                  }
                } while (len && copy < have);
                if (state.flags & 512) {
                  state.check = crc32(state.check, input, copy, next);
                }
                have -= copy;
                next += copy;
                if (len) {
                  break inf_leave;
                }
              } else if (state.head) {
                state.head.comment = null;
              }
              state.mode = HCRC;
            case HCRC:
              if (state.flags & 512) {
                while (bits < 16) {
                  if (have === 0) {
                    break inf_leave;
                  }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                if (hold !== (state.check & 65535)) {
                  strm.msg = "header crc mismatch";
                  state.mode = BAD;
                  break;
                }
                hold = 0;
                bits = 0;
              }
              if (state.head) {
                state.head.hcrc = state.flags >> 9 & 1;
                state.head.done = true;
              }
              strm.adler = state.check = 0;
              state.mode = TYPE;
              break;
            case DICTID:
              while (bits < 32) {
                if (have === 0) {
                  break inf_leave;
                }
                have--;
                hold += input[next++] << bits;
                bits += 8;
              }
              strm.adler = state.check = zswap32(hold);
              hold = 0;
              bits = 0;
              state.mode = DICT;
            case DICT:
              if (state.havedict === 0) {
                strm.next_out = put;
                strm.avail_out = left;
                strm.next_in = next;
                strm.avail_in = have;
                state.hold = hold;
                state.bits = bits;
                return Z_NEED_DICT;
              }
              strm.adler = state.check = 1;
              state.mode = TYPE;
            case TYPE:
              if (flush === Z_BLOCK || flush === Z_TREES) {
                break inf_leave;
              }
            case TYPEDO:
              if (state.last) {
                hold >>>= bits & 7;
                bits -= bits & 7;
                state.mode = CHECK;
                break;
              }
              while (bits < 3) {
                if (have === 0) {
                  break inf_leave;
                }
                have--;
                hold += input[next++] << bits;
                bits += 8;
              }
              state.last = hold & 1;
              hold >>>= 1;
              bits -= 1;
              switch (hold & 3) {
                case 0:
                  state.mode = STORED;
                  break;
                case 1:
                  fixedtables(state);
                  state.mode = LEN_;
                  if (flush === Z_TREES) {
                    hold >>>= 2;
                    bits -= 2;
                    break inf_leave;
                  }
                  break;
                case 2:
                  state.mode = TABLE;
                  break;
                case 3:
                  strm.msg = "invalid block type";
                  state.mode = BAD;
              }
              hold >>>= 2;
              bits -= 2;
              break;
            case STORED:
              hold >>>= bits & 7;
              bits -= bits & 7;
              while (bits < 32) {
                if (have === 0) {
                  break inf_leave;
                }
                have--;
                hold += input[next++] << bits;
                bits += 8;
              }
              if ((hold & 65535) !== (hold >>> 16 ^ 65535)) {
                strm.msg = "invalid stored block lengths";
                state.mode = BAD;
                break;
              }
              state.length = hold & 65535;
              hold = 0;
              bits = 0;
              state.mode = COPY_;
              if (flush === Z_TREES) {
                break inf_leave;
              }
            case COPY_:
              state.mode = COPY;
            case COPY:
              copy = state.length;
              if (copy) {
                if (copy > have) {
                  copy = have;
                }
                if (copy > left) {
                  copy = left;
                }
                if (copy === 0) {
                  break inf_leave;
                }
                utils.arraySet(output, input, next, copy, put);
                have -= copy;
                next += copy;
                left -= copy;
                put += copy;
                state.length -= copy;
                break;
              }
              state.mode = TYPE;
              break;
            case TABLE:
              while (bits < 14) {
                if (have === 0) {
                  break inf_leave;
                }
                have--;
                hold += input[next++] << bits;
                bits += 8;
              }
              state.nlen = (hold & 31) + 257;
              hold >>>= 5;
              bits -= 5;
              state.ndist = (hold & 31) + 1;
              hold >>>= 5;
              bits -= 5;
              state.ncode = (hold & 15) + 4;
              hold >>>= 4;
              bits -= 4;
              if (state.nlen > 286 || state.ndist > 30) {
                strm.msg = "too many length or distance symbols";
                state.mode = BAD;
                break;
              }
              state.have = 0;
              state.mode = LENLENS;
            case LENLENS:
              while (state.have < state.ncode) {
                while (bits < 3) {
                  if (have === 0) {
                    break inf_leave;
                  }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                state.lens[order[state.have++]] = hold & 7;
                hold >>>= 3;
                bits -= 3;
              }
              while (state.have < 19) {
                state.lens[order[state.have++]] = 0;
              }
              state.lencode = state.lendyn;
              state.lenbits = 7;
              opts = { bits: state.lenbits };
              ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);
              state.lenbits = opts.bits;
              if (ret) {
                strm.msg = "invalid code lengths set";
                state.mode = BAD;
                break;
              }
              state.have = 0;
              state.mode = CODELENS;
            case CODELENS:
              while (state.have < state.nlen + state.ndist) {
                for (; ; ) {
                  here = state.lencode[hold & (1 << state.lenbits) - 1];
                  here_bits = here >>> 24;
                  here_op = here >>> 16 & 255;
                  here_val = here & 65535;
                  if (here_bits <= bits) {
                    break;
                  }
                  if (have === 0) {
                    break inf_leave;
                  }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                if (here_val < 16) {
                  hold >>>= here_bits;
                  bits -= here_bits;
                  state.lens[state.have++] = here_val;
                } else {
                  if (here_val === 16) {
                    n = here_bits + 2;
                    while (bits < n) {
                      if (have === 0) {
                        break inf_leave;
                      }
                      have--;
                      hold += input[next++] << bits;
                      bits += 8;
                    }
                    hold >>>= here_bits;
                    bits -= here_bits;
                    if (state.have === 0) {
                      strm.msg = "invalid bit length repeat";
                      state.mode = BAD;
                      break;
                    }
                    len = state.lens[state.have - 1];
                    copy = 3 + (hold & 3);
                    hold >>>= 2;
                    bits -= 2;
                  } else if (here_val === 17) {
                    n = here_bits + 3;
                    while (bits < n) {
                      if (have === 0) {
                        break inf_leave;
                      }
                      have--;
                      hold += input[next++] << bits;
                      bits += 8;
                    }
                    hold >>>= here_bits;
                    bits -= here_bits;
                    len = 0;
                    copy = 3 + (hold & 7);
                    hold >>>= 3;
                    bits -= 3;
                  } else {
                    n = here_bits + 7;
                    while (bits < n) {
                      if (have === 0) {
                        break inf_leave;
                      }
                      have--;
                      hold += input[next++] << bits;
                      bits += 8;
                    }
                    hold >>>= here_bits;
                    bits -= here_bits;
                    len = 0;
                    copy = 11 + (hold & 127);
                    hold >>>= 7;
                    bits -= 7;
                  }
                  if (state.have + copy > state.nlen + state.ndist) {
                    strm.msg = "invalid bit length repeat";
                    state.mode = BAD;
                    break;
                  }
                  while (copy--) {
                    state.lens[state.have++] = len;
                  }
                }
              }
              if (state.mode === BAD) {
                break;
              }
              if (state.lens[256] === 0) {
                strm.msg = "invalid code -- missing end-of-block";
                state.mode = BAD;
                break;
              }
              state.lenbits = 9;
              opts = { bits: state.lenbits };
              ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);
              state.lenbits = opts.bits;
              if (ret) {
                strm.msg = "invalid literal/lengths set";
                state.mode = BAD;
                break;
              }
              state.distbits = 6;
              state.distcode = state.distdyn;
              opts = { bits: state.distbits };
              ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);
              state.distbits = opts.bits;
              if (ret) {
                strm.msg = "invalid distances set";
                state.mode = BAD;
                break;
              }
              state.mode = LEN_;
              if (flush === Z_TREES) {
                break inf_leave;
              }
            case LEN_:
              state.mode = LEN;
            case LEN:
              if (have >= 6 && left >= 258) {
                strm.next_out = put;
                strm.avail_out = left;
                strm.next_in = next;
                strm.avail_in = have;
                state.hold = hold;
                state.bits = bits;
                inflate_fast(strm, _out);
                put = strm.next_out;
                output = strm.output;
                left = strm.avail_out;
                next = strm.next_in;
                input = strm.input;
                have = strm.avail_in;
                hold = state.hold;
                bits = state.bits;
                if (state.mode === TYPE) {
                  state.back = -1;
                }
                break;
              }
              state.back = 0;
              for (; ; ) {
                here = state.lencode[hold & (1 << state.lenbits) - 1];
                here_bits = here >>> 24;
                here_op = here >>> 16 & 255;
                here_val = here & 65535;
                if (here_bits <= bits) {
                  break;
                }
                if (have === 0) {
                  break inf_leave;
                }
                have--;
                hold += input[next++] << bits;
                bits += 8;
              }
              if (here_op && (here_op & 240) === 0) {
                last_bits = here_bits;
                last_op = here_op;
                last_val = here_val;
                for (; ; ) {
                  here = state.lencode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)];
                  here_bits = here >>> 24;
                  here_op = here >>> 16 & 255;
                  here_val = here & 65535;
                  if (last_bits + here_bits <= bits) {
                    break;
                  }
                  if (have === 0) {
                    break inf_leave;
                  }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                hold >>>= last_bits;
                bits -= last_bits;
                state.back += last_bits;
              }
              hold >>>= here_bits;
              bits -= here_bits;
              state.back += here_bits;
              state.length = here_val;
              if (here_op === 0) {
                state.mode = LIT;
                break;
              }
              if (here_op & 32) {
                state.back = -1;
                state.mode = TYPE;
                break;
              }
              if (here_op & 64) {
                strm.msg = "invalid literal/length code";
                state.mode = BAD;
                break;
              }
              state.extra = here_op & 15;
              state.mode = LENEXT;
            case LENEXT:
              if (state.extra) {
                n = state.extra;
                while (bits < n) {
                  if (have === 0) {
                    break inf_leave;
                  }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                state.length += hold & (1 << state.extra) - 1;
                hold >>>= state.extra;
                bits -= state.extra;
                state.back += state.extra;
              }
              state.was = state.length;
              state.mode = DIST;
            case DIST:
              for (; ; ) {
                here = state.distcode[hold & (1 << state.distbits) - 1];
                here_bits = here >>> 24;
                here_op = here >>> 16 & 255;
                here_val = here & 65535;
                if (here_bits <= bits) {
                  break;
                }
                if (have === 0) {
                  break inf_leave;
                }
                have--;
                hold += input[next++] << bits;
                bits += 8;
              }
              if ((here_op & 240) === 0) {
                last_bits = here_bits;
                last_op = here_op;
                last_val = here_val;
                for (; ; ) {
                  here = state.distcode[last_val + ((hold & (1 << last_bits + last_op) - 1) >> last_bits)];
                  here_bits = here >>> 24;
                  here_op = here >>> 16 & 255;
                  here_val = here & 65535;
                  if (last_bits + here_bits <= bits) {
                    break;
                  }
                  if (have === 0) {
                    break inf_leave;
                  }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                hold >>>= last_bits;
                bits -= last_bits;
                state.back += last_bits;
              }
              hold >>>= here_bits;
              bits -= here_bits;
              state.back += here_bits;
              if (here_op & 64) {
                strm.msg = "invalid distance code";
                state.mode = BAD;
                break;
              }
              state.offset = here_val;
              state.extra = here_op & 15;
              state.mode = DISTEXT;
            case DISTEXT:
              if (state.extra) {
                n = state.extra;
                while (bits < n) {
                  if (have === 0) {
                    break inf_leave;
                  }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                state.offset += hold & (1 << state.extra) - 1;
                hold >>>= state.extra;
                bits -= state.extra;
                state.back += state.extra;
              }
              if (state.offset > state.dmax) {
                strm.msg = "invalid distance too far back";
                state.mode = BAD;
                break;
              }
              state.mode = MATCH;
            case MATCH:
              if (left === 0) {
                break inf_leave;
              }
              copy = _out - left;
              if (state.offset > copy) {
                copy = state.offset - copy;
                if (copy > state.whave) {
                  if (state.sane) {
                    strm.msg = "invalid distance too far back";
                    state.mode = BAD;
                    break;
                  }
                }
                if (copy > state.wnext) {
                  copy -= state.wnext;
                  from = state.wsize - copy;
                } else {
                  from = state.wnext - copy;
                }
                if (copy > state.length) {
                  copy = state.length;
                }
                from_source = state.window;
              } else {
                from_source = output;
                from = put - state.offset;
                copy = state.length;
              }
              if (copy > left) {
                copy = left;
              }
              left -= copy;
              state.length -= copy;
              do {
                output[put++] = from_source[from++];
              } while (--copy);
              if (state.length === 0) {
                state.mode = LEN;
              }
              break;
            case LIT:
              if (left === 0) {
                break inf_leave;
              }
              output[put++] = state.length;
              left--;
              state.mode = LEN;
              break;
            case CHECK:
              if (state.wrap) {
                while (bits < 32) {
                  if (have === 0) {
                    break inf_leave;
                  }
                  have--;
                  hold |= input[next++] << bits;
                  bits += 8;
                }
                _out -= left;
                strm.total_out += _out;
                state.total += _out;
                if (_out) {
                  strm.adler = state.check = /*UPDATE(state.check, put - _out, _out);*/
                  state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out);
                }
                _out = left;
                if ((state.flags ? hold : zswap32(hold)) !== state.check) {
                  strm.msg = "incorrect data check";
                  state.mode = BAD;
                  break;
                }
                hold = 0;
                bits = 0;
              }
              state.mode = LENGTH;
            case LENGTH:
              if (state.wrap && state.flags) {
                while (bits < 32) {
                  if (have === 0) {
                    break inf_leave;
                  }
                  have--;
                  hold += input[next++] << bits;
                  bits += 8;
                }
                if (hold !== (state.total & 4294967295)) {
                  strm.msg = "incorrect length check";
                  state.mode = BAD;
                  break;
                }
                hold = 0;
                bits = 0;
              }
              state.mode = DONE;
            case DONE:
              ret = Z_STREAM_END;
              break inf_leave;
            case BAD:
              ret = Z_DATA_ERROR;
              break inf_leave;
            case MEM:
              return Z_MEM_ERROR;
            case SYNC:
            default:
              return Z_STREAM_ERROR;
          }
        }
      strm.next_out = put;
      strm.avail_out = left;
      strm.next_in = next;
      strm.avail_in = have;
      state.hold = hold;
      state.bits = bits;
      if (state.wsize || _out !== strm.avail_out && state.mode < BAD && (state.mode < CHECK || flush !== Z_FINISH)) {
        if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {
          state.mode = MEM;
          return Z_MEM_ERROR;
        }
      }
      _in -= strm.avail_in;
      _out -= strm.avail_out;
      strm.total_in += _in;
      strm.total_out += _out;
      state.total += _out;
      if (state.wrap && _out) {
        strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/
        state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out);
      }
      strm.data_type = state.bits + (state.last ? 64 : 0) + (state.mode === TYPE ? 128 : 0) + (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);
      if ((_in === 0 && _out === 0 || flush === Z_FINISH) && ret === Z_OK) {
        ret = Z_BUF_ERROR;
      }
      return ret;
    }
    function inflateEnd(strm) {
      if (!strm || !strm.state) {
        return Z_STREAM_ERROR;
      }
      var state = strm.state;
      if (state.window) {
        state.window = null;
      }
      strm.state = null;
      return Z_OK;
    }
    function inflateGetHeader(strm, head) {
      var state;
      if (!strm || !strm.state) {
        return Z_STREAM_ERROR;
      }
      state = strm.state;
      if ((state.wrap & 2) === 0) {
        return Z_STREAM_ERROR;
      }
      state.head = head;
      head.done = false;
      return Z_OK;
    }
    function inflateSetDictionary(strm, dictionary) {
      var dictLength = dictionary.length;
      var state;
      var dictid;
      var ret;
      if (!strm || !strm.state) {
        return Z_STREAM_ERROR;
      }
      state = strm.state;
      if (state.wrap !== 0 && state.mode !== DICT) {
        return Z_STREAM_ERROR;
      }
      if (state.mode === DICT) {
        dictid = 1;
        dictid = adler32(dictid, dictionary, dictLength, 0);
        if (dictid !== state.check) {
          return Z_DATA_ERROR;
        }
      }
      ret = updatewindow(strm, dictionary, dictLength, dictLength);
      if (ret) {
        state.mode = MEM;
        return Z_MEM_ERROR;
      }
      state.havedict = 1;
      return Z_OK;
    }
    exports.inflateReset = inflateReset;
    exports.inflateReset2 = inflateReset2;
    exports.inflateResetKeep = inflateResetKeep;
    exports.inflateInit = inflateInit;
    exports.inflateInit2 = inflateInit2;
    exports.inflate = inflate;
    exports.inflateEnd = inflateEnd;
    exports.inflateGetHeader = inflateGetHeader;
    exports.inflateSetDictionary = inflateSetDictionary;
    exports.inflateInfo = "pako inflate (from Nodeca project)";
  }
});

// node_modules/pako/lib/zlib/constants.js
var require_constants = __commonJS({
  "node_modules/pako/lib/zlib/constants.js"(exports, module) {
    "use strict";
    module.exports = {
      /* Allowed flush values; see deflate() and inflate() below for details */
      Z_NO_FLUSH: 0,
      Z_PARTIAL_FLUSH: 1,
      Z_SYNC_FLUSH: 2,
      Z_FULL_FLUSH: 3,
      Z_FINISH: 4,
      Z_BLOCK: 5,
      Z_TREES: 6,
      /* Return codes for the compression/decompression functions. Negative values
      * are errors, positive values are used for special but normal events.
      */
      Z_OK: 0,
      Z_STREAM_END: 1,
      Z_NEED_DICT: 2,
      Z_ERRNO: -1,
      Z_STREAM_ERROR: -2,
      Z_DATA_ERROR: -3,
      //Z_MEM_ERROR:     -4,
      Z_BUF_ERROR: -5,
      //Z_VERSION_ERROR: -6,
      /* compression levels */
      Z_NO_COMPRESSION: 0,
      Z_BEST_SPEED: 1,
      Z_BEST_COMPRESSION: 9,
      Z_DEFAULT_COMPRESSION: -1,
      Z_FILTERED: 1,
      Z_HUFFMAN_ONLY: 2,
      Z_RLE: 3,
      Z_FIXED: 4,
      Z_DEFAULT_STRATEGY: 0,
      /* Possible values of the data_type field (though see inflate()) */
      Z_BINARY: 0,
      Z_TEXT: 1,
      //Z_ASCII:                1, // = Z_TEXT (deprecated)
      Z_UNKNOWN: 2,
      /* The deflate compression method */
      Z_DEFLATED: 8
      //Z_NULL:                 null // Use -1 or null inline, depending on var type
    };
  }
});

// node_modules/pako/lib/zlib/gzheader.js
var require_gzheader = __commonJS({
  "node_modules/pako/lib/zlib/gzheader.js"(exports, module) {
    "use strict";
    function GZheader() {
      this.text = 0;
      this.time = 0;
      this.xflags = 0;
      this.os = 0;
      this.extra = null;
      this.extra_len = 0;
      this.name = "";
      this.comment = "";
      this.hcrc = 0;
      this.done = false;
    }
    module.exports = GZheader;
  }
});

// node_modules/pako/lib/inflate.js
var require_inflate2 = __commonJS({
  "node_modules/pako/lib/inflate.js"(exports) {
    "use strict";
    var zlib_inflate = require_inflate();
    var utils = require_common();
    var strings = require_strings();
    var c = require_constants();
    var msg = require_messages();
    var ZStream = require_zstream();
    var GZheader = require_gzheader();
    var toString2 = Object.prototype.toString;
    function Inflate(options) {
      if (!(this instanceof Inflate)) return new Inflate(options);
      this.options = utils.assign({
        chunkSize: 16384,
        windowBits: 0,
        to: ""
      }, options || {});
      var opt = this.options;
      if (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) {
        opt.windowBits = -opt.windowBits;
        if (opt.windowBits === 0) {
          opt.windowBits = -15;
        }
      }
      if (opt.windowBits >= 0 && opt.windowBits < 16 && !(options && options.windowBits)) {
        opt.windowBits += 32;
      }
      if (opt.windowBits > 15 && opt.windowBits < 48) {
        if ((opt.windowBits & 15) === 0) {
          opt.windowBits |= 15;
        }
      }
      this.err = 0;
      this.msg = "";
      this.ended = false;
      this.chunks = [];
      this.strm = new ZStream();
      this.strm.avail_out = 0;
      var status = zlib_inflate.inflateInit2(
        this.strm,
        opt.windowBits
      );
      if (status !== c.Z_OK) {
        throw new Error(msg[status]);
      }
      this.header = new GZheader();
      zlib_inflate.inflateGetHeader(this.strm, this.header);
      if (opt.dictionary) {
        if (typeof opt.dictionary === "string") {
          opt.dictionary = strings.string2buf(opt.dictionary);
        } else if (toString2.call(opt.dictionary) === "[object ArrayBuffer]") {
          opt.dictionary = new Uint8Array(opt.dictionary);
        }
        if (opt.raw) {
          status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);
          if (status !== c.Z_OK) {
            throw new Error(msg[status]);
          }
        }
      }
    }
    Inflate.prototype.push = function(data, mode) {
      var strm = this.strm;
      var chunkSize = this.options.chunkSize;
      var dictionary = this.options.dictionary;
      var status, _mode;
      var next_out_utf8, tail, utf8str;
      var allowBufError = false;
      if (this.ended) {
        return false;
      }
      _mode = mode === ~~mode ? mode : mode === true ? c.Z_FINISH : c.Z_NO_FLUSH;
      if (typeof data === "string") {
        strm.input = strings.binstring2buf(data);
      } else if (toString2.call(data) === "[object ArrayBuffer]") {
        strm.input = new Uint8Array(data);
      } else {
        strm.input = data;
      }
      strm.next_in = 0;
      strm.avail_in = strm.input.length;
      do {
        if (strm.avail_out === 0) {
          strm.output = new utils.Buf8(chunkSize);
          strm.next_out = 0;
          strm.avail_out = chunkSize;
        }
        status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH);
        if (status === c.Z_NEED_DICT && dictionary) {
          status = zlib_inflate.inflateSetDictionary(this.strm, dictionary);
        }
        if (status === c.Z_BUF_ERROR && allowBufError === true) {
          status = c.Z_OK;
          allowBufError = false;
        }
        if (status !== c.Z_STREAM_END && status !== c.Z_OK) {
          this.onEnd(status);
          this.ended = true;
          return false;
        }
        if (strm.next_out) {
          if (strm.avail_out === 0 || status === c.Z_STREAM_END || strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH)) {
            if (this.options.to === "string") {
              next_out_utf8 = strings.utf8border(strm.output, strm.next_out);
              tail = strm.next_out - next_out_utf8;
              utf8str = strings.buf2string(strm.output, next_out_utf8);
              strm.next_out = tail;
              strm.avail_out = chunkSize - tail;
              if (tail) {
                utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0);
              }
              this.onData(utf8str);
            } else {
              this.onData(utils.shrinkBuf(strm.output, strm.next_out));
            }
          }
        }
        if (strm.avail_in === 0 && strm.avail_out === 0) {
          allowBufError = true;
        }
      } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);
      if (status === c.Z_STREAM_END) {
        _mode = c.Z_FINISH;
      }
      if (_mode === c.Z_FINISH) {
        status = zlib_inflate.inflateEnd(this.strm);
        this.onEnd(status);
        this.ended = true;
        return status === c.Z_OK;
      }
      if (_mode === c.Z_SYNC_FLUSH) {
        this.onEnd(c.Z_OK);
        strm.avail_out = 0;
        return true;
      }
      return true;
    };
    Inflate.prototype.onData = function(chunk) {
      this.chunks.push(chunk);
    };
    Inflate.prototype.onEnd = function(status) {
      if (status === c.Z_OK) {
        if (this.options.to === "string") {
          this.result = this.chunks.join("");
        } else {
          this.result = utils.flattenChunks(this.chunks);
        }
      }
      this.chunks = [];
      this.err = status;
      this.msg = this.strm.msg;
    };
    function inflate(input, options) {
      var inflator = new Inflate(options);
      inflator.push(input, true);
      if (inflator.err) {
        throw inflator.msg || msg[inflator.err];
      }
      return inflator.result;
    }
    function inflateRaw(input, options) {
      options = options || {};
      options.raw = true;
      return inflate(input, options);
    }
    exports.Inflate = Inflate;
    exports.inflate = inflate;
    exports.inflateRaw = inflateRaw;
    exports.ungzip = inflate;
  }
});

// node_modules/pako/index.js
var require_pako = __commonJS({
  "node_modules/pako/index.js"(exports, module) {
    "use strict";
    var assign = require_common().assign;
    var deflate = require_deflate2();
    var inflate = require_inflate2();
    var constants = require_constants();
    var pako = {};
    assign(pako, deflate, inflate, constants);
    module.exports = pako;
  }
});

// node_modules/jszip/lib/flate.js
var require_flate = __commonJS({
  "node_modules/jszip/lib/flate.js"(exports) {
    "use strict";
    var USE_TYPEDARRAY = typeof Uint8Array !== "undefined" && typeof Uint16Array !== "undefined" && typeof Uint32Array !== "undefined";
    var pako = require_pako();
    var utils = require_utils();
    var GenericWorker = require_GenericWorker();
    var ARRAY_TYPE = USE_TYPEDARRAY ? "uint8array" : "array";
    exports.magic = "\b\0";
    function FlateWorker(action, options) {
      GenericWorker.call(this, "FlateWorker/" + action);
      this._pako = null;
      this._pakoAction = action;
      this._pakoOptions = options;
      this.meta = {};
    }
    utils.inherits(FlateWorker, GenericWorker);
    FlateWorker.prototype.processChunk = function(chunk) {
      this.meta = chunk.meta;
      if (this._pako === null) {
        this._createPako();
      }
      this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false);
    };
    FlateWorker.prototype.flush = function() {
      GenericWorker.prototype.flush.call(this);
      if (this._pako === null) {
        this._createPako();
      }
      this._pako.push([], true);
    };
    FlateWorker.prototype.cleanUp = function() {
      GenericWorker.prototype.cleanUp.call(this);
      this._pako = null;
    };
    FlateWorker.prototype._createPako = function() {
      this._pako = new pako[this._pakoAction]({
        raw: true,
        level: this._pakoOptions.level || -1
        // default compression
      });
      var self2 = this;
      this._pako.onData = function(data) {
        self2.push({
          data,
          meta: self2.meta
        });
      };
    };
    exports.compressWorker = function(compressionOptions) {
      return new FlateWorker("Deflate", compressionOptions);
    };
    exports.uncompressWorker = function() {
      return new FlateWorker("Inflate", {});
    };
  }
});

// node_modules/jszip/lib/compressions.js
var require_compressions = __commonJS({
  "node_modules/jszip/lib/compressions.js"(exports) {
    "use strict";
    var GenericWorker = require_GenericWorker();
    exports.STORE = {
      magic: "\0\0",
      compressWorker: function() {
        return new GenericWorker("STORE compression");
      },
      uncompressWorker: function() {
        return new GenericWorker("STORE decompression");
      }
    };
    exports.DEFLATE = require_flate();
  }
});

// node_modules/jszip/lib/signature.js
var require_signature = __commonJS({
  "node_modules/jszip/lib/signature.js"(exports) {
    "use strict";
    exports.LOCAL_FILE_HEADER = "PK";
    exports.CENTRAL_FILE_HEADER = "PK";
    exports.CENTRAL_DIRECTORY_END = "PK";
    exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x07";
    exports.ZIP64_CENTRAL_DIRECTORY_END = "PK";
    exports.DATA_DESCRIPTOR = "PK\x07\b";
  }
});

// node_modules/jszip/lib/generate/ZipFileWorker.js
var require_ZipFileWorker = __commonJS({
  "node_modules/jszip/lib/generate/ZipFileWorker.js"(exports, module) {
    "use strict";
    var utils = require_utils();
    var GenericWorker = require_GenericWorker();
    var utf8 = require_utf8();
    var crc32 = require_crc32();
    var signature = require_signature();
    var decToHex = function(dec, bytes) {
      var hex = "", i;
      for (i = 0; i < bytes; i++) {
        hex += String.fromCharCode(dec & 255);
        dec = dec >>> 8;
      }
      return hex;
    };
    var generateUnixExternalFileAttr = function(unixPermissions, isDir) {
      var result = unixPermissions;
      if (!unixPermissions) {
        result = isDir ? 16893 : 33204;
      }
      return (result & 65535) << 16;
    };
    var generateDosExternalFileAttr = function(dosPermissions) {
      return (dosPermissions || 0) & 63;
    };
    var generateZipParts = function(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) {
      var file = streamInfo["file"], compression = streamInfo["compression"], useCustomEncoding = encodeFileName !== utf8.utf8encode, encodedFileName = utils.transformTo("string", encodeFileName(file.name)), utfEncodedFileName = utils.transformTo("string", utf8.utf8encode(file.name)), comment = file.comment, encodedComment = utils.transformTo("string", encodeFileName(comment)), utfEncodedComment = utils.transformTo("string", utf8.utf8encode(comment)), useUTF8ForFileName = utfEncodedFileName.length !== file.name.length, useUTF8ForComment = utfEncodedComment.length !== comment.length, dosTime, dosDate, extraFields = "", unicodePathExtraField = "", unicodeCommentExtraField = "", dir = file.dir, date = file.date;
      var dataInfo = {
        crc32: 0,
        compressedSize: 0,
        uncompressedSize: 0
      };
      if (!streamedContent || streamingEnded) {
        dataInfo.crc32 = streamInfo["crc32"];
        dataInfo.compressedSize = streamInfo["compressedSize"];
        dataInfo.uncompressedSize = streamInfo["uncompressedSize"];
      }
      var bitflag = 0;
      if (streamedContent) {
        bitflag |= 8;
      }
      if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) {
        bitflag |= 2048;
      }
      var extFileAttr = 0;
      var versionMadeBy = 0;
      if (dir) {
        extFileAttr |= 16;
      }
      if (platform === "UNIX") {
        versionMadeBy = 798;
        extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir);
      } else {
        versionMadeBy = 20;
        extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir);
      }
      dosTime = date.getUTCHours();
      dosTime = dosTime << 6;
      dosTime = dosTime | date.getUTCMinutes();
      dosTime = dosTime << 5;
      dosTime = dosTime | date.getUTCSeconds() / 2;
      dosDate = date.getUTCFullYear() - 1980;
      dosDate = dosDate << 4;
      dosDate = dosDate | date.getUTCMonth() + 1;
      dosDate = dosDate << 5;
      dosDate = dosDate | date.getUTCDate();
      if (useUTF8ForFileName) {
        unicodePathExtraField = // Version
        decToHex(1, 1) + // NameCRC32
        decToHex(crc32(encodedFileName), 4) + // UnicodeName
        utfEncodedFileName;
        extraFields += // Info-ZIP Unicode Path Extra Field
        "up" + // size
        decToHex(unicodePathExtraField.length, 2) + // content
        unicodePathExtraField;
      }
      if (useUTF8ForComment) {
        unicodeCommentExtraField = // Version
        decToHex(1, 1) + // CommentCRC32
        decToHex(crc32(encodedComment), 4) + // UnicodeName
        utfEncodedComment;
        extraFields += // Info-ZIP Unicode Path Extra Field
        "uc" + // size
        decToHex(unicodeCommentExtraField.length, 2) + // content
        unicodeCommentExtraField;
      }
      var header = "";
      header += "\n\0";
      header += decToHex(bitflag, 2);
      header += compression.magic;
      header += decToHex(dosTime, 2);
      header += decToHex(dosDate, 2);
      header += decToHex(dataInfo.crc32, 4);
      header += decToHex(dataInfo.compressedSize, 4);
      header += decToHex(dataInfo.uncompressedSize, 4);
      header += decToHex(encodedFileName.length, 2);
      header += decToHex(extraFields.length, 2);
      var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields;
      var dirRecord = signature.CENTRAL_FILE_HEADER + // version made by (00: DOS)
      decToHex(versionMadeBy, 2) + // file header (common to file and central directory)
      header + // file comment length
      decToHex(encodedComment.length, 2) + // disk number start
      "\0\0\0\0" + // external file attributes
      decToHex(extFileAttr, 4) + // relative offset of local header
      decToHex(offset, 4) + // file name
      encodedFileName + // extra field
      extraFields + // file comment
      encodedComment;
      return {
        fileRecord,
        dirRecord
      };
    };
    var generateCentralDirectoryEnd = function(entriesCount, centralDirLength, localDirLength, comment, encodeFileName) {
      var dirEnd = "";
      var encodedComment = utils.transformTo("string", encodeFileName(comment));
      dirEnd = signature.CENTRAL_DIRECTORY_END + // number of this disk
      "\0\0\0\0" + // total number of entries in the central directory on this disk
      decToHex(entriesCount, 2) + // total number of entries in the central directory
      decToHex(entriesCount, 2) + // size of the central directory   4 bytes
      decToHex(centralDirLength, 4) + // offset of start of central directory with respect to the starting disk number
      decToHex(localDirLength, 4) + // .ZIP file comment length
      decToHex(encodedComment.length, 2) + // .ZIP file comment
      encodedComment;
      return dirEnd;
    };
    var generateDataDescriptors = function(streamInfo) {
      var descriptor = "";
      descriptor = signature.DATA_DESCRIPTOR + // crc-32                          4 bytes
      decToHex(streamInfo["crc32"], 4) + // compressed size                 4 bytes
      decToHex(streamInfo["compressedSize"], 4) + // uncompressed size               4 bytes
      decToHex(streamInfo["uncompressedSize"], 4);
      return descriptor;
    };
    function ZipFileWorker(streamFiles, comment, platform, encodeFileName) {
      GenericWorker.call(this, "ZipFileWorker");
      this.bytesWritten = 0;
      this.zipComment = comment;
      this.zipPlatform = platform;
      this.encodeFileName = encodeFileName;
      this.streamFiles = streamFiles;
      this.accumulate = false;
      this.contentBuffer = [];
      this.dirRecords = [];
      this.currentSourceOffset = 0;
      this.entriesCount = 0;
      this.currentFile = null;
      this._sources = [];
    }
    utils.inherits(ZipFileWorker, GenericWorker);
    ZipFileWorker.prototype.push = function(chunk) {
      var currentFilePercent = chunk.meta.percent || 0;
      var entriesCount = this.entriesCount;
      var remainingFiles = this._sources.length;
      if (this.accumulate) {
        this.contentBuffer.push(chunk);
      } else {
        this.bytesWritten += chunk.data.length;
        GenericWorker.prototype.push.call(this, {
          data: chunk.data,
          meta: {
            currentFile: this.currentFile,
            percent: entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100
          }
        });
      }
    };
    ZipFileWorker.prototype.openedSource = function(streamInfo) {
      this.currentSourceOffset = this.bytesWritten;
      this.currentFile = streamInfo["file"].name;
      var streamedContent = this.streamFiles && !streamInfo["file"].dir;
      if (streamedContent) {
        var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);
        this.push({
          data: record.fileRecord,
          meta: { percent: 0 }
        });
      } else {
        this.accumulate = true;
      }
    };
    ZipFileWorker.prototype.closedSource = function(streamInfo) {
      this.accumulate = false;
      var streamedContent = this.streamFiles && !streamInfo["file"].dir;
      var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);
      this.dirRecords.push(record.dirRecord);
      if (streamedContent) {
        this.push({
          data: generateDataDescriptors(streamInfo),
          meta: { percent: 100 }
        });
      } else {
        this.push({
          data: record.fileRecord,
          meta: { percent: 0 }
        });
        while (this.contentBuffer.length) {
          this.push(this.contentBuffer.shift());
        }
      }
      this.currentFile = null;
    };
    ZipFileWorker.prototype.flush = function() {
      var localDirLength = this.bytesWritten;
      for (var i = 0; i < this.dirRecords.length; i++) {
        this.push({
          data: this.dirRecords[i],
          meta: { percent: 100 }
        });
      }
      var centralDirLength = this.bytesWritten - localDirLength;
      var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName);
      this.push({
        data: dirEnd,
        meta: { percent: 100 }
      });
    };
    ZipFileWorker.prototype.prepareNextSource = function() {
      this.previous = this._sources.shift();
      this.openedSource(this.previous.streamInfo);
      if (this.isPaused) {
        this.previous.pause();
      } else {
        this.previous.resume();
      }
    };
    ZipFileWorker.prototype.registerPrevious = function(previous) {
      this._sources.push(previous);
      var self2 = this;
      previous.on("data", function(chunk) {
        self2.processChunk(chunk);
      });
      previous.on("end", function() {
        self2.closedSource(self2.previous.streamInfo);
        if (self2._sources.length) {
          self2.prepareNextSource();
        } else {
          self2.end();
        }
      });
      previous.on("error", function(e) {
        self2.error(e);
      });
      return this;
    };
    ZipFileWorker.prototype.resume = function() {
      if (!GenericWorker.prototype.resume.call(this)) {
        return false;
      }
      if (!this.previous && this._sources.length) {
        this.prepareNextSource();
        return true;
      }
      if (!this.previous && !this._sources.length && !this.generatedError) {
        this.end();
        return true;
      }
    };
    ZipFileWorker.prototype.error = function(e) {
      var sources = this._sources;
      if (!GenericWorker.prototype.error.call(this, e)) {
        return false;
      }
      for (var i = 0; i < sources.length; i++) {
        try {
          sources[i].error(e);
        } catch (e2) {
        }
      }
      return true;
    };
    ZipFileWorker.prototype.lock = function() {
      GenericWorker.prototype.lock.call(this);
      var sources = this._sources;
      for (var i = 0; i < sources.length; i++) {
        sources[i].lock();
      }
    };
    module.exports = ZipFileWorker;
  }
});

// node_modules/jszip/lib/generate/index.js
var require_generate = __commonJS({
  "node_modules/jszip/lib/generate/index.js"(exports) {
    "use strict";
    var compressions = require_compressions();
    var ZipFileWorker = require_ZipFileWorker();
    var getCompression = function(fileCompression, zipCompression) {
      var compressionName = fileCompression || zipCompression;
      var compression = compressions[compressionName];
      if (!compression) {
        throw new Error(compressionName + " is not a valid compression method !");
      }
      return compression;
    };
    exports.generateWorker = function(zip, options, comment) {
      var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName);
      var entriesCount = 0;
      try {
        zip.forEach(function(relativePath, file) {
          entriesCount++;
          var compression = getCompression(file.options.compression, options.compression);
          var compressionOptions = file.options.compressionOptions || options.compressionOptions || {};
          var dir = file.dir, date = file.date;
          file._compressWorker(compression, compressionOptions).withStreamInfo("file", {
            name: relativePath,
            dir,
            date,
            comment: file.comment || "",
            unixPermissions: file.unixPermissions,
            dosPermissions: file.dosPermissions
          }).pipe(zipFileWorker);
        });
        zipFileWorker.entriesCount = entriesCount;
      } catch (e) {
        zipFileWorker.error(e);
      }
      return zipFileWorker;
    };
  }
});

// node_modules/jszip/lib/nodejs/NodejsStreamInputAdapter.js
var require_NodejsStreamInputAdapter = __commonJS({
  "node_modules/jszip/lib/nodejs/NodejsStreamInputAdapter.js"(exports, module) {
    "use strict";
    var utils = require_utils();
    var GenericWorker = require_GenericWorker();
    function NodejsStreamInputAdapter(filename, stream) {
      GenericWorker.call(this, "Nodejs stream input adapter for " + filename);
      this._upstreamEnded = false;
      this._bindStream(stream);
    }
    utils.inherits(NodejsStreamInputAdapter, GenericWorker);
    NodejsStreamInputAdapter.prototype._bindStream = function(stream) {
      var self2 = this;
      this._stream = stream;
      stream.pause();
      stream.on("data", function(chunk) {
        self2.push({
          data: chunk,
          meta: {
            percent: 0
          }
        });
      }).on("error", function(e) {
        if (self2.isPaused) {
          this.generatedError = e;
        } else {
          self2.error(e);
        }
      }).on("end", function() {
        if (self2.isPaused) {
          self2._upstreamEnded = true;
        } else {
          self2.end();
        }
      });
    };
    NodejsStreamInputAdapter.prototype.pause = function() {
      if (!GenericWorker.prototype.pause.call(this)) {
        return false;
      }
      this._stream.pause();
      return true;
    };
    NodejsStreamInputAdapter.prototype.resume = function() {
      if (!GenericWorker.prototype.resume.call(this)) {
        return false;
      }
      if (this._upstreamEnded) {
        this.end();
      } else {
        this._stream.resume();
      }
      return true;
    };
    module.exports = NodejsStreamInputAdapter;
  }
});

// node_modules/jszip/lib/object.js
var require_object = __commonJS({
  "node_modules/jszip/lib/object.js"(exports, module) {
    "use strict";
    var utf8 = require_utf8();
    var utils = require_utils();
    var GenericWorker = require_GenericWorker();
    var StreamHelper = require_StreamHelper();
    var defaults = require_defaults();
    var CompressedObject = require_compressedObject();
    var ZipObject = require_zipObject();
    var generate = require_generate();
    var nodejsUtils = require_nodejsUtils();
    var NodejsStreamInputAdapter = require_NodejsStreamInputAdapter();
    var fileAdd = function(name, data, originalOptions) {
      var dataType = utils.getTypeOf(data), parent;
      var o = utils.extend(originalOptions || {}, defaults);
      o.date = o.date || /* @__PURE__ */ new Date();
      if (o.compression !== null) {
        o.compression = o.compression.toUpperCase();
      }
      if (typeof o.unixPermissions === "string") {
        o.unixPermissions = parseInt(o.unixPermissions, 8);
      }
      if (o.unixPermissions && o.unixPermissions & 16384) {
        o.dir = true;
      }
      if (o.dosPermissions && o.dosPermissions & 16) {
        o.dir = true;
      }
      if (o.dir) {
        name = forceTrailingSlash(name);
      }
      if (o.createFolders && (parent = parentFolder(name))) {
        folderAdd.call(this, parent, true);
      }
      var isUnicodeString = dataType === "string" && o.binary === false && o.base64 === false;
      if (!originalOptions || typeof originalOptions.binary === "undefined") {
        o.binary = !isUnicodeString;
      }
      var isCompressedEmpty = data instanceof CompressedObject && data.uncompressedSize === 0;
      if (isCompressedEmpty || o.dir || !data || data.length === 0) {
        o.base64 = false;
        o.binary = true;
        data = "";
        o.compression = "STORE";
        dataType = "string";
      }
      var zipObjectContent = null;
      if (data instanceof CompressedObject || data instanceof GenericWorker) {
        zipObjectContent = data;
      } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {
        zipObjectContent = new NodejsStreamInputAdapter(name, data);
      } else {
        zipObjectContent = utils.prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64);
      }
      var object = new ZipObject(name, zipObjectContent, o);
      this.files[name] = object;
    };
    var parentFolder = function(path5) {
      if (path5.slice(-1) === "/") {
        path5 = path5.substring(0, path5.length - 1);
      }
      var lastSlash = path5.lastIndexOf("/");
      return lastSlash > 0 ? path5.substring(0, lastSlash) : "";
    };
    var forceTrailingSlash = function(path5) {
      if (path5.slice(-1) !== "/") {
        path5 += "/";
      }
      return path5;
    };
    var folderAdd = function(name, createFolders) {
      createFolders = typeof createFolders !== "undefined" ? createFolders : defaults.createFolders;
      name = forceTrailingSlash(name);
      if (!this.files[name]) {
        fileAdd.call(this, name, null, {
          dir: true,
          createFolders
        });
      }
      return this.files[name];
    };
    function isRegExp(object) {
      return Object.prototype.toString.call(object) === "[object RegExp]";
    }
    var out = {
      /**
       * @see loadAsync
       */
      load: function() {
        throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.");
      },
      /**
       * Call a callback function for each entry at this folder level.
       * @param {Function} cb the callback function:
       * function (relativePath, file) {...}
       * It takes 2 arguments : the relative path and the file.
       */
      forEach: function(cb) {
        var filename, relativePath, file;
        for (filename in this.files) {
          file = this.files[filename];
          relativePath = filename.slice(this.root.length, filename.length);
          if (relativePath && filename.slice(0, this.root.length) === this.root) {
            cb(relativePath, file);
          }
        }
      },
      /**
       * Filter nested files/folders with the specified function.
       * @param {Function} search the predicate to use :
       * function (relativePath, file) {...}
       * It takes 2 arguments : the relative path and the file.
       * @return {Array} An array of matching elements.
       */
      filter: function(search) {
        var result = [];
        this.forEach(function(relativePath, entry) {
          if (search(relativePath, entry)) {
            result.push(entry);
          }
        });
        return result;
      },
      /**
       * Add a file to the zip file, or search a file.
       * @param   {string|RegExp} name The name of the file to add (if data is defined),
       * the name of the file to find (if no data) or a regex to match files.
       * @param   {String|ArrayBuffer|Uint8Array|Buffer} data  The file data, either raw or base64 encoded
       * @param   {Object} o     File options
       * @return  {JSZip|Object|Array} this JSZip object (when adding a file),
       * a file (when searching by string) or an array of files (when searching by regex).
       */
      file: function(name, data, o) {
        if (arguments.length === 1) {
          if (isRegExp(name)) {
            var regexp = name;
            return this.filter(function(relativePath, file) {
              return !file.dir && regexp.test(relativePath);
            });
          } else {
            var obj = this.files[this.root + name];
            if (obj && !obj.dir) {
              return obj;
            } else {
              return null;
            }
          }
        } else {
          name = this.root + name;
          fileAdd.call(this, name, data, o);
        }
        return this;
      },
      /**
       * Add a directory to the zip file, or search.
       * @param   {String|RegExp} arg The name of the directory to add, or a regex to search folders.
       * @return  {JSZip} an object with the new directory as the root, or an array containing matching folders.
       */
      folder: function(arg) {
        if (!arg) {
          return this;
        }
        if (isRegExp(arg)) {
          return this.filter(function(relativePath, file) {
            return file.dir && arg.test(relativePath);
          });
        }
        var name = this.root + arg;
        var newFolder = folderAdd.call(this, name);
        var ret = this.clone();
        ret.root = newFolder.name;
        return ret;
      },
      /**
       * Delete a file, or a directory and all sub-files, from the zip
       * @param {string} name the name of the file to delete
       * @return {JSZip} this JSZip object
       */
      remove: function(name) {
        name = this.root + name;
        var file = this.files[name];
        if (!file) {
          if (name.slice(-1) !== "/") {
            name += "/";
          }
          file = this.files[name];
        }
        if (file && !file.dir) {
          delete this.files[name];
        } else {
          var kids = this.filter(function(relativePath, file2) {
            return file2.name.slice(0, name.length) === name;
          });
          for (var i = 0; i < kids.length; i++) {
            delete this.files[kids[i].name];
          }
        }
        return this;
      },
      /**
       * @deprecated This method has been removed in JSZip 3.0, please check the upgrade guide.
       */
      generate: function() {
        throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.");
      },
      /**
       * Generate the complete zip file as an internal stream.
       * @param {Object} options the options to generate the zip file :
       * - compression, "STORE" by default.
       * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob.
       * @return {StreamHelper} the streamed zip file.
       */
      generateInternalStream: function(options) {
        var worker, opts = {};
        try {
          opts = utils.extend(options || {}, {
            streamFiles: false,
            compression: "STORE",
            compressionOptions: null,
            type: "",
            platform: "DOS",
            comment: null,
            mimeType: "application/zip",
            encodeFileName: utf8.utf8encode
          });
          opts.type = opts.type.toLowerCase();
          opts.compression = opts.compression.toUpperCase();
          if (opts.type === "binarystring") {
            opts.type = "string";
          }
          if (!opts.type) {
            throw new Error("No output type specified.");
          }
          utils.checkSupport(opts.type);
          if (opts.platform === "darwin" || opts.platform === "freebsd" || opts.platform === "linux" || opts.platform === "sunos") {
            opts.platform = "UNIX";
          }
          if (opts.platform === "win32") {
            opts.platform = "DOS";
          }
          var comment = opts.comment || this.comment || "";
          worker = generate.generateWorker(this, opts, comment);
        } catch (e) {
          worker = new GenericWorker("error");
          worker.error(e);
        }
        return new StreamHelper(worker, opts.type || "string", opts.mimeType);
      },
      /**
       * Generate the complete zip file asynchronously.
       * @see generateInternalStream
       */
      generateAsync: function(options, onUpdate) {
        return this.generateInternalStream(options).accumulate(onUpdate);
      },
      /**
       * Generate the complete zip file asynchronously.
       * @see generateInternalStream
       */
      generateNodeStream: function(options, onUpdate) {
        options = options || {};
        if (!options.type) {
          options.type = "nodebuffer";
        }
        return this.generateInternalStream(options).toNodejsStream(onUpdate);
      }
    };
    module.exports = out;
  }
});

// node_modules/jszip/lib/reader/DataReader.js
var require_DataReader = __commonJS({
  "node_modules/jszip/lib/reader/DataReader.js"(exports, module) {
    "use strict";
    var utils = require_utils();
    function DataReader(data) {
      this.data = data;
      this.length = data.length;
      this.index = 0;
      this.zero = 0;
    }
    DataReader.prototype = {
      /**
       * Check that the offset will not go too far.
       * @param {string} offset the additional offset to check.
       * @throws {Error} an Error if the offset is out of bounds.
       */
      checkOffset: function(offset) {
        this.checkIndex(this.index + offset);
      },
      /**
       * Check that the specified index will not be too far.
       * @param {string} newIndex the index to check.
       * @throws {Error} an Error if the index is out of bounds.
       */
      checkIndex: function(newIndex) {
        if (this.length < this.zero + newIndex || newIndex < 0) {
          throw new Error("End of data reached (data length = " + this.length + ", asked index = " + newIndex + "). Corrupted zip ?");
        }
      },
      /**
       * Change the index.
       * @param {number} newIndex The new index.
       * @throws {Error} if the new index is out of the data.
       */
      setIndex: function(newIndex) {
        this.checkIndex(newIndex);
        this.index = newIndex;
      },
      /**
       * Skip the next n bytes.
       * @param {number} n the number of bytes to skip.
       * @throws {Error} if the new index is out of the data.
       */
      skip: function(n) {
        this.setIndex(this.index + n);
      },
      /**
       * Get the byte at the specified index.
       * @param {number} i the index to use.
       * @return {number} a byte.
       */
      byteAt: function() {
      },
      /**
       * Get the next number with a given byte size.
       * @param {number} size the number of bytes to read.
       * @return {number} the corresponding number.
       */
      readInt: function(size) {
        var result = 0, i;
        this.checkOffset(size);
        for (i = this.index + size - 1; i >= this.index; i--) {
          result = (result << 8) + this.byteAt(i);
        }
        this.index += size;
        return result;
      },
      /**
       * Get the next string with a given byte size.
       * @param {number} size the number of bytes to read.
       * @return {string} the corresponding string.
       */
      readString: function(size) {
        return utils.transformTo("string", this.readData(size));
      },
      /**
       * Get raw data without conversion, <size> bytes.
       * @param {number} size the number of bytes to read.
       * @return {Object} the raw data, implementation specific.
       */
      readData: function() {
      },
      /**
       * Find the last occurrence of a zip signature (4 bytes).
       * @param {string} sig the signature to find.
       * @return {number} the index of the last occurrence, -1 if not found.
       */
      lastIndexOfSignature: function() {
      },
      /**
       * Read the signature (4 bytes) at the current position and compare it with sig.
       * @param {string} sig the expected signature
       * @return {boolean} true if the signature matches, false otherwise.
       */
      readAndCheckSignature: function() {
      },
      /**
       * Get the next date.
       * @return {Date} the date.
       */
      readDate: function() {
        var dostime = this.readInt(4);
        return new Date(Date.UTC(
          (dostime >> 25 & 127) + 1980,
          // year
          (dostime >> 21 & 15) - 1,
          // month
          dostime >> 16 & 31,
          // day
          dostime >> 11 & 31,
          // hour
          dostime >> 5 & 63,
          // minute
          (dostime & 31) << 1
        ));
      }
    };
    module.exports = DataReader;
  }
});

// node_modules/jszip/lib/reader/ArrayReader.js
var require_ArrayReader = __commonJS({
  "node_modules/jszip/lib/reader/ArrayReader.js"(exports, module) {
    "use strict";
    var DataReader = require_DataReader();
    var utils = require_utils();
    function ArrayReader(data) {
      DataReader.call(this, data);
      for (var i = 0; i < this.data.length; i++) {
        data[i] = data[i] & 255;
      }
    }
    utils.inherits(ArrayReader, DataReader);
    ArrayReader.prototype.byteAt = function(i) {
      return this.data[this.zero + i];
    };
    ArrayReader.prototype.lastIndexOfSignature = function(sig) {
      var sig0 = sig.charCodeAt(0), sig1 = sig.charCodeAt(1), sig2 = sig.charCodeAt(2), sig3 = sig.charCodeAt(3);
      for (var i = this.length - 4; i >= 0; --i) {
        if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) {
          return i - this.zero;
        }
      }
      return -1;
    };
    ArrayReader.prototype.readAndCheckSignature = function(sig) {
      var sig0 = sig.charCodeAt(0), sig1 = sig.charCodeAt(1), sig2 = sig.charCodeAt(2), sig3 = sig.charCodeAt(3), data = this.readData(4);
      return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3];
    };
    ArrayReader.prototype.readData = function(size) {
      this.checkOffset(size);
      if (size === 0) {
        return [];
      }
      var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);
      this.index += size;
      return result;
    };
    module.exports = ArrayReader;
  }
});

// node_modules/jszip/lib/reader/StringReader.js
var require_StringReader = __commonJS({
  "node_modules/jszip/lib/reader/StringReader.js"(exports, module) {
    "use strict";
    var DataReader = require_DataReader();
    var utils = require_utils();
    function StringReader(data) {
      DataReader.call(this, data);
    }
    utils.inherits(StringReader, DataReader);
    StringReader.prototype.byteAt = function(i) {
      return this.data.charCodeAt(this.zero + i);
    };
    StringReader.prototype.lastIndexOfSignature = function(sig) {
      return this.data.lastIndexOf(sig) - this.zero;
    };
    StringReader.prototype.readAndCheckSignature = function(sig) {
      var data = this.readData(4);
      return sig === data;
    };
    StringReader.prototype.readData = function(size) {
      this.checkOffset(size);
      var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);
      this.index += size;
      return result;
    };
    module.exports = StringReader;
  }
});

// node_modules/jszip/lib/reader/Uint8ArrayReader.js
var require_Uint8ArrayReader = __commonJS({
  "node_modules/jszip/lib/reader/Uint8ArrayReader.js"(exports, module) {
    "use strict";
    var ArrayReader = require_ArrayReader();
    var utils = require_utils();
    function Uint8ArrayReader(data) {
      ArrayReader.call(this, data);
    }
    utils.inherits(Uint8ArrayReader, ArrayReader);
    Uint8ArrayReader.prototype.readData = function(size) {
      this.checkOffset(size);
      if (size === 0) {
        return new Uint8Array(0);
      }
      var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size);
      this.index += size;
      return result;
    };
    module.exports = Uint8ArrayReader;
  }
});

// node_modules/jszip/lib/reader/NodeBufferReader.js
var require_NodeBufferReader = __commonJS({
  "node_modules/jszip/lib/reader/NodeBufferReader.js"(exports, module) {
    "use strict";
    var Uint8ArrayReader = require_Uint8ArrayReader();
    var utils = require_utils();
    function NodeBufferReader(data) {
      Uint8ArrayReader.call(this, data);
    }
    utils.inherits(NodeBufferReader, Uint8ArrayReader);
    NodeBufferReader.prototype.readData = function(size) {
      this.checkOffset(size);
      var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);
      this.index += size;
      return result;
    };
    module.exports = NodeBufferReader;
  }
});

// node_modules/jszip/lib/reader/readerFor.js
var require_readerFor = __commonJS({
  "node_modules/jszip/lib/reader/readerFor.js"(exports, module) {
    "use strict";
    var utils = require_utils();
    var support = require_support();
    var ArrayReader = require_ArrayReader();
    var StringReader = require_StringReader();
    var NodeBufferReader = require_NodeBufferReader();
    var Uint8ArrayReader = require_Uint8ArrayReader();
    module.exports = function(data) {
      var type = utils.getTypeOf(data);
      utils.checkSupport(type);
      if (type === "string" && !support.uint8array) {
        return new StringReader(data);
      }
      if (type === "nodebuffer") {
        return new NodeBufferReader(data);
      }
      if (support.uint8array) {
        return new Uint8ArrayReader(utils.transformTo("uint8array", data));
      }
      return new ArrayReader(utils.transformTo("array", data));
    };
  }
});

// node_modules/jszip/lib/zipEntry.js
var require_zipEntry = __commonJS({
  "node_modules/jszip/lib/zipEntry.js"(exports, module) {
    "use strict";
    var readerFor = require_readerFor();
    var utils = require_utils();
    var CompressedObject = require_compressedObject();
    var crc32fn = require_crc32();
    var utf8 = require_utf8();
    var compressions = require_compressions();
    var support = require_support();
    var MADE_BY_DOS = 0;
    var MADE_BY_UNIX = 3;
    var findCompression = function(compressionMethod) {
      for (var method in compressions) {
        if (!Object.prototype.hasOwnProperty.call(compressions, method)) {
          continue;
        }
        if (compressions[method].magic === compressionMethod) {
          return compressions[method];
        }
      }
      return null;
    };
    function ZipEntry(options, loadOptions) {
      this.options = options;
      this.loadOptions = loadOptions;
    }
    ZipEntry.prototype = {
      /**
       * say if the file is encrypted.
       * @return {boolean} true if the file is encrypted, false otherwise.
       */
      isEncrypted: function() {
        return (this.bitFlag & 1) === 1;
      },
      /**
       * say if the file has utf-8 filename/comment.
       * @return {boolean} true if the filename/comment is in utf-8, false otherwise.
       */
      useUTF8: function() {
        return (this.bitFlag & 2048) === 2048;
      },
      /**
       * Read the local part of a zip file and add the info in this object.
       * @param {DataReader} reader the reader to use.
       */
      readLocalPart: function(reader) {
        var compression, localExtraFieldsLength;
        reader.skip(22);
        this.fileNameLength = reader.readInt(2);
        localExtraFieldsLength = reader.readInt(2);
        this.fileName = reader.readData(this.fileNameLength);
        reader.skip(localExtraFieldsLength);
        if (this.compressedSize === -1 || this.uncompressedSize === -1) {
          throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");
        }
        compression = findCompression(this.compressionMethod);
        if (compression === null) {
          throw new Error("Corrupted zip : compression " + utils.pretty(this.compressionMethod) + " unknown (inner file : " + utils.transformTo("string", this.fileName) + ")");
        }
        this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize));
      },
      /**
       * Read the central part of a zip file and add the info in this object.
       * @param {DataReader} reader the reader to use.
       */
      readCentralPart: function(reader) {
        this.versionMadeBy = reader.readInt(2);
        reader.skip(2);
        this.bitFlag = reader.readInt(2);
        this.compressionMethod = reader.readString(2);
        this.date = reader.readDate();
        this.crc32 = reader.readInt(4);
        this.compressedSize = reader.readInt(4);
        this.uncompressedSize = reader.readInt(4);
        var fileNameLength = reader.readInt(2);
        this.extraFieldsLength = reader.readInt(2);
        this.fileCommentLength = reader.readInt(2);
        this.diskNumberStart = reader.readInt(2);
        this.internalFileAttributes = reader.readInt(2);
        this.externalFileAttributes = reader.readInt(4);
        this.localHeaderOffset = reader.readInt(4);
        if (this.isEncrypted()) {
          throw new Error("Encrypted zip are not supported");
        }
        reader.skip(fileNameLength);
        this.readExtraFields(reader);
        this.parseZIP64ExtraField(reader);
        this.fileComment = reader.readData(this.fileCommentLength);
      },
      /**
       * Parse the external file attributes and get the unix/dos permissions.
       */
      processAttributes: function() {
        this.unixPermissions = null;
        this.dosPermissions = null;
        var madeBy = this.versionMadeBy >> 8;
        this.dir = this.externalFileAttributes & 16 ? true : false;
        if (madeBy === MADE_BY_DOS) {
          this.dosPermissions = this.externalFileAttributes & 63;
        }
        if (madeBy === MADE_BY_UNIX) {
          this.unixPermissions = this.externalFileAttributes >> 16 & 65535;
        }
        if (!this.dir && this.fileNameStr.slice(-1) === "/") {
          this.dir = true;
        }
      },
      /**
       * Parse the ZIP64 extra field and merge the info in the current ZipEntry.
       * @param {DataReader} reader the reader to use.
       */
      parseZIP64ExtraField: function() {
        if (!this.extraFields[1]) {
          return;
        }
        var extraReader = readerFor(this.extraFields[1].value);
        if (this.uncompressedSize === utils.MAX_VALUE_32BITS) {
          this.uncompressedSize = extraReader.readInt(8);
        }
        if (this.compressedSize === utils.MAX_VALUE_32BITS) {
          this.compressedSize = extraReader.readInt(8);
        }
        if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) {
          this.localHeaderOffset = extraReader.readInt(8);
        }
        if (this.diskNumberStart === utils.MAX_VALUE_32BITS) {
          this.diskNumberStart = extraReader.readInt(4);
        }
      },
      /**
       * Read the central part of a zip file and add the info in this object.
       * @param {DataReader} reader the reader to use.
       */
      readExtraFields: function(reader) {
        var end = reader.index + this.extraFieldsLength, extraFieldId, extraFieldLength, extraFieldValue;
        if (!this.extraFields) {
          this.extraFields = {};
        }
        while (reader.index + 4 < end) {
          extraFieldId = reader.readInt(2);
          extraFieldLength = reader.readInt(2);
          extraFieldValue = reader.readData(extraFieldLength);
          this.extraFields[extraFieldId] = {
            id: extraFieldId,
            length: extraFieldLength,
            value: extraFieldValue
          };
        }
        reader.setIndex(end);
      },
      /**
       * Apply an UTF8 transformation if needed.
       */
      handleUTF8: function() {
        var decodeParamType = support.uint8array ? "uint8array" : "array";
        if (this.useUTF8()) {
          this.fileNameStr = utf8.utf8decode(this.fileName);
          this.fileCommentStr = utf8.utf8decode(this.fileComment);
        } else {
          var upath = this.findExtraFieldUnicodePath();
          if (upath !== null) {
            this.fileNameStr = upath;
          } else {
            var fileNameByteArray = utils.transformTo(decodeParamType, this.fileName);
            this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray);
          }
          var ucomment = this.findExtraFieldUnicodeComment();
          if (ucomment !== null) {
            this.fileCommentStr = ucomment;
          } else {
            var commentByteArray = utils.transformTo(decodeParamType, this.fileComment);
            this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray);
          }
        }
      },
      /**
       * Find the unicode path declared in the extra field, if any.
       * @return {String} the unicode path, null otherwise.
       */
      findExtraFieldUnicodePath: function() {
        var upathField = this.extraFields[28789];
        if (upathField) {
          var extraReader = readerFor(upathField.value);
          if (extraReader.readInt(1) !== 1) {
            return null;
          }
          if (crc32fn(this.fileName) !== extraReader.readInt(4)) {
            return null;
          }
          return utf8.utf8decode(extraReader.readData(upathField.length - 5));
        }
        return null;
      },
      /**
       * Find the unicode comment declared in the extra field, if any.
       * @return {String} the unicode comment, null otherwise.
       */
      findExtraFieldUnicodeComment: function() {
        var ucommentField = this.extraFields[25461];
        if (ucommentField) {
          var extraReader = readerFor(ucommentField.value);
          if (extraReader.readInt(1) !== 1) {
            return null;
          }
          if (crc32fn(this.fileComment) !== extraReader.readInt(4)) {
            return null;
          }
          return utf8.utf8decode(extraReader.readData(ucommentField.length - 5));
        }
        return null;
      }
    };
    module.exports = ZipEntry;
  }
});

// node_modules/jszip/lib/zipEntries.js
var require_zipEntries = __commonJS({
  "node_modules/jszip/lib/zipEntries.js"(exports, module) {
    "use strict";
    var readerFor = require_readerFor();
    var utils = require_utils();
    var sig = require_signature();
    var ZipEntry = require_zipEntry();
    var support = require_support();
    function ZipEntries(loadOptions) {
      this.files = [];
      this.loadOptions = loadOptions;
    }
    ZipEntries.prototype = {
      /**
       * Check that the reader is on the specified signature.
       * @param {string} expectedSignature the expected signature.
       * @throws {Error} if it is an other signature.
       */
      checkSignature: function(expectedSignature) {
        if (!this.reader.readAndCheckSignature(expectedSignature)) {
          this.reader.index -= 4;
          var signature = this.reader.readString(4);
          throw new Error("Corrupted zip or bug: unexpected signature (" + utils.pretty(signature) + ", expected " + utils.pretty(expectedSignature) + ")");
        }
      },
      /**
       * Check if the given signature is at the given index.
       * @param {number} askedIndex the index to check.
       * @param {string} expectedSignature the signature to expect.
       * @return {boolean} true if the signature is here, false otherwise.
       */
      isSignature: function(askedIndex, expectedSignature) {
        var currentIndex = this.reader.index;
        this.reader.setIndex(askedIndex);
        var signature = this.reader.readString(4);
        var result = signature === expectedSignature;
        this.reader.setIndex(currentIndex);
        return result;
      },
      /**
       * Read the end of the central directory.
       */
      readBlockEndOfCentral: function() {
        this.diskNumber = this.reader.readInt(2);
        this.diskWithCentralDirStart = this.reader.readInt(2);
        this.centralDirRecordsOnThisDisk = this.reader.readInt(2);
        this.centralDirRecords = this.reader.readInt(2);
        this.centralDirSize = this.reader.readInt(4);
        this.centralDirOffset = this.reader.readInt(4);
        this.zipCommentLength = this.reader.readInt(2);
        var zipComment = this.reader.readData(this.zipCommentLength);
        var decodeParamType = support.uint8array ? "uint8array" : "array";
        var decodeContent = utils.transformTo(decodeParamType, zipComment);
        this.zipComment = this.loadOptions.decodeFileName(decodeContent);
      },
      /**
       * Read the end of the Zip 64 central directory.
       * Not merged with the method readEndOfCentral :
       * The end of central can coexist with its Zip64 brother,
       * I don't want to read the wrong number of bytes !
       */
      readBlockZip64EndOfCentral: function() {
        this.zip64EndOfCentralSize = this.reader.readInt(8);
        this.reader.skip(4);
        this.diskNumber = this.reader.readInt(4);
        this.diskWithCentralDirStart = this.reader.readInt(4);
        this.centralDirRecordsOnThisDisk = this.reader.readInt(8);
        this.centralDirRecords = this.reader.readInt(8);
        this.centralDirSize = this.reader.readInt(8);
        this.centralDirOffset = this.reader.readInt(8);
        this.zip64ExtensibleData = {};
        var extraDataSize = this.zip64EndOfCentralSize - 44, index = 0, extraFieldId, extraFieldLength, extraFieldValue;
        while (index < extraDataSize) {
          extraFieldId = this.reader.readInt(2);
          extraFieldLength = this.reader.readInt(4);
          extraFieldValue = this.reader.readData(extraFieldLength);
          this.zip64ExtensibleData[extraFieldId] = {
            id: extraFieldId,
            length: extraFieldLength,
            value: extraFieldValue
          };
        }
      },
      /**
       * Read the end of the Zip 64 central directory locator.
       */
      readBlockZip64EndOfCentralLocator: function() {
        this.diskWithZip64CentralDirStart = this.reader.readInt(4);
        this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8);
        this.disksCount = this.reader.readInt(4);
        if (this.disksCount > 1) {
          throw new Error("Multi-volumes zip are not supported");
        }
      },
      /**
       * Read the local files, based on the offset read in the central part.
       */
      readLocalFiles: function() {
        var i, file;
        for (i = 0; i < this.files.length; i++) {
          file = this.files[i];
          this.reader.setIndex(file.localHeaderOffset);
          this.checkSignature(sig.LOCAL_FILE_HEADER);
          file.readLocalPart(this.reader);
          file.handleUTF8();
          file.processAttributes();
        }
      },
      /**
       * Read the central directory.
       */
      readCentralDir: function() {
        var file;
        this.reader.setIndex(this.centralDirOffset);
        while (this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)) {
          file = new ZipEntry({
            zip64: this.zip64
          }, this.loadOptions);
          file.readCentralPart(this.reader);
          this.files.push(file);
        }
        if (this.centralDirRecords !== this.files.length) {
          if (this.centralDirRecords !== 0 && this.files.length === 0) {
            throw new Error("Corrupted zip or bug: expected " + this.centralDirRecords + " records in central dir, got " + this.files.length);
          } else {
          }
        }
      },
      /**
       * Read the end of central directory.
       */
      readEndOfCentral: function() {
        var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END);
        if (offset < 0) {
          var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER);
          if (isGarbage) {
            throw new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html");
          } else {
            throw new Error("Corrupted zip: can't find end of central directory");
          }
        }
        this.reader.setIndex(offset);
        var endOfCentralDirOffset = offset;
        this.checkSignature(sig.CENTRAL_DIRECTORY_END);
        this.readBlockEndOfCentral();
        if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) {
          this.zip64 = true;
          offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);
          if (offset < 0) {
            throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");
          }
          this.reader.setIndex(offset);
          this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);
          this.readBlockZip64EndOfCentralLocator();
          if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) {
            this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);
            if (this.relativeOffsetEndOfZip64CentralDir < 0) {
              throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");
            }
          }
          this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);
          this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);
          this.readBlockZip64EndOfCentral();
        }
        var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize;
        if (this.zip64) {
          expectedEndOfCentralDirOffset += 20;
          expectedEndOfCentralDirOffset += 12 + this.zip64EndOfCentralSize;
        }
        var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset;
        if (extraBytes > 0) {
          if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) {
          } else {
            this.reader.zero = extraBytes;
          }
        } else if (extraBytes < 0) {
          throw new Error("Corrupted zip: missing " + Math.abs(extraBytes) + " bytes.");
        }
      },
      prepareReader: function(data) {
        this.reader = readerFor(data);
      },
      /**
       * Read a zip file and create ZipEntries.
       * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file.
       */
      load: function(data) {
        this.prepareReader(data);
        this.readEndOfCentral();
        this.readCentralDir();
        this.readLocalFiles();
      }
    };
    module.exports = ZipEntries;
  }
});

// node_modules/jszip/lib/load.js
var require_load = __commonJS({
  "node_modules/jszip/lib/load.js"(exports, module) {
    "use strict";
    var utils = require_utils();
    var external = require_external();
    var utf8 = require_utf8();
    var ZipEntries = require_zipEntries();
    var Crc32Probe = require_Crc32Probe();
    var nodejsUtils = require_nodejsUtils();
    function checkEntryCRC32(zipEntry) {
      return new external.Promise(function(resolve, reject) {
        var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe());
        worker.on("error", function(e) {
          reject(e);
        }).on("end", function() {
          if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) {
            reject(new Error("Corrupted zip : CRC32 mismatch"));
          } else {
            resolve();
          }
        }).resume();
      });
    }
    module.exports = function(data, options) {
      var zip = this;
      options = utils.extend(options || {}, {
        base64: false,
        checkCRC32: false,
        optimizedBinaryString: false,
        createFolders: false,
        decodeFileName: utf8.utf8decode
      });
      if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {
        return external.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file."));
      }
      return utils.prepareContent("the loaded zip file", data, true, options.optimizedBinaryString, options.base64).then(function(data2) {
        var zipEntries = new ZipEntries(options);
        zipEntries.load(data2);
        return zipEntries;
      }).then(function checkCRC32(zipEntries) {
        var promises = [external.Promise.resolve(zipEntries)];
        var files = zipEntries.files;
        if (options.checkCRC32) {
          for (var i = 0; i < files.length; i++) {
            promises.push(checkEntryCRC32(files[i]));
          }
        }
        return external.Promise.all(promises);
      }).then(function addFiles(results) {
        var zipEntries = results.shift();
        var files = zipEntries.files;
        for (var i = 0; i < files.length; i++) {
          var input = files[i];
          var unsafeName = input.fileNameStr;
          var safeName = utils.resolve(input.fileNameStr);
          zip.file(safeName, input.decompressed, {
            binary: true,
            optimizedBinaryString: true,
            date: input.date,
            dir: input.dir,
            comment: input.fileCommentStr.length ? input.fileCommentStr : null,
            unixPermissions: input.unixPermissions,
            dosPermissions: input.dosPermissions,
            createFolders: options.createFolders
          });
          if (!input.dir) {
            zip.file(safeName).unsafeOriginalName = unsafeName;
          }
        }
        if (zipEntries.zipComment.length) {
          zip.comment = zipEntries.zipComment;
        }
        return zip;
      });
    };
  }
});

// node_modules/jszip/lib/index.js
var require_lib3 = __commonJS({
  "node_modules/jszip/lib/index.js"(exports, module) {
    "use strict";
    function JSZip3() {
      if (!(this instanceof JSZip3)) {
        return new JSZip3();
      }
      if (arguments.length) {
        throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");
      }
      this.files = /* @__PURE__ */ Object.create(null);
      this.comment = null;
      this.root = "";
      this.clone = function() {
        var newObj = new JSZip3();
        for (var i in this) {
          if (typeof this[i] !== "function") {
            newObj[i] = this[i];
          }
        }
        return newObj;
      };
    }
    JSZip3.prototype = require_object();
    JSZip3.prototype.loadAsync = require_load();
    JSZip3.support = require_support();
    JSZip3.defaults = require_defaults();
    JSZip3.version = "3.10.1";
    JSZip3.loadAsync = function(content, options) {
      return new JSZip3().loadAsync(content, options);
    };
    JSZip3.external = require_external();
    module.exports = JSZip3;
  }
});

// node_modules/xlsx/dist/cpexcel.js
var require_cpexcel = __commonJS({
  "node_modules/xlsx/dist/cpexcel.js"(exports, module) {
    var cptable2 = { version: "1.15.0" };
    cptable2[437] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[620] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xC7\xFC\xE9\xE2\xE4\xE0\u0105\xE7\xEA\xEB\xE8\xEF\xEE\u0107\xC4\u0104\u0118\u0119\u0142\xF4\xF6\u0106\xFB\xF9\u015A\xD6\xDC\xA2\u0141\xA5\u015B\u0192\u0179\u017B\xF3\xD3\u0144\u0143\u017A\u017C\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[737] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u03C5\u03C6\u03C7\u03C8\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03C9\u03AC\u03AD\u03AE\u03CA\u03AF\u03CC\u03CD\u03CB\u03CE\u0386\u0388\u0389\u038A\u038C\u038E\u038F\xB1\u2265\u2264\u03AA\u03AB\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[850] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xF0\xD0\xCA\xCB\xC8\u0131\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[852] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xC7\xFC\xE9\xE2\xE4\u016F\u0107\xE7\u0142\xEB\u0150\u0151\xEE\u0179\xC4\u0106\xC9\u0139\u013A\xF4\xF6\u013D\u013E\u015A\u015B\xD6\xDC\u0164\u0165\u0141\xD7\u010D\xE1\xED\xF3\xFA\u0104\u0105\u017D\u017E\u0118\u0119\xAC\u017A\u010C\u015F\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\u011A\u015E\u2563\u2551\u2557\u255D\u017B\u017C\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0102\u0103\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\u0111\u0110\u010E\xCB\u010F\u0147\xCD\xCE\u011B\u2518\u250C\u2588\u2584\u0162\u016E\u2580\xD3\xDF\xD4\u0143\u0144\u0148\u0160\u0161\u0154\xDA\u0155\u0170\xFD\xDD\u0163\xB4\xAD\u02DD\u02DB\u02C7\u02D8\xA7\xF7\xB8\xB0\xA8\u02D9\u0171\u0158\u0159\u25A0\xA0", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[857] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\u0131\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\u0130\xD6\xDC\xF8\xA3\xD8\u015E\u015F\xE1\xED\xF3\xFA\xF1\xD1\u011E\u011F\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xBA\xAA\xCA\xCB\xC8\uFFFD\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\uFFFD\xD7\xDA\xDB\xD9\xEC\xFF\xAF\xB4\xAD\xB1\uFFFD\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[861] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xD0\xF0\xDE\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xFE\xFB\xDD\xFD\xD6\xDC\xF8\xA3\xD8\u20A7\u0192\xE1\xED\xF3\xFA\xC1\xCD\xD3\xDA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[865] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xA4\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[866] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\xB0\u2219\xB7\u221A\u2116\xA4\u25A0\xA0", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[874] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\u20AC\uFFFD\uFFFD\uFFFD\uFFFD\u2026\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\xA0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[895] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\u010C\xFC\xE9\u010F\xE4\u010E\u0164\u010D\u011B\u011A\u0139\xCD\u013E\u01EA\xC4\xC1\xC9\u017E\u017D\xF4\xF6\xD3\u016F\xDA\xFD\xD6\xDC\u0160\u013D\xDD\u0158\u0165\xE1\xED\xF3\xFA\u0148\u0147\u016E\xD4\u0161\u0159\u0155\u0154\xBC\xA7\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[932] = function() {
      var d = [], e = {}, D = [], j;
      D[0] = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFF61\uFF62\uFF63\uFF64\uFF65\uFF66\uFF67\uFF68\uFF69\uFF6A\uFF6B\uFF6C\uFF6D\uFF6E\uFF6F\uFF70\uFF71\uFF72\uFF73\uFF74\uFF75\uFF76\uFF77\uFF78\uFF79\uFF7A\uFF7B\uFF7C\uFF7D\uFF7E\uFF7F\uFF80\uFF81\uFF82\uFF83\uFF84\uFF85\uFF86\uFF87\uFF88\uFF89\uFF8A\uFF8B\uFF8C\uFF8D\uFF8E\uFF8F\uFF90\uFF91\uFF92\uFF93\uFF94\uFF95\uFF96\uFF97\uFF98\uFF99\uFF9A\uFF9B\uFF9C\uFF9D\uFF9E\uFF9F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[0].length; ++j) if (D[0][j].charCodeAt(0) !== 65533) {
        e[D[0][j]] = 0 + j;
        d[0 + j] = D[0][j];
      }
      D[129] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\xB4\uFF40\xA8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008\u3009\u300A\u300B\u300C\u300D\u300E\u300F\u3010\u3011\uFF0B\uFF0D\xB1\xD7\uFFFD\xF7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\xB0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\xA7\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u212B\u2030\u266F\u266D\u266A\u2020\u2021\xB6\uFFFD\uFFFD\uFFFD\uFFFD\u25EF\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[129].length; ++j) if (D[129][j].charCodeAt(0) !== 65533) {
        e[D[129][j]] = 33024 + j;
        d[33024 + j] = D[129][j];
      }
      D[130] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFF10\uFF11\uFF12\uFF13\uFF14\uFF15\uFF16\uFF17\uFF18\uFF19\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFF21\uFF22\uFF23\uFF24\uFF25\uFF26\uFF27\uFF28\uFF29\uFF2A\uFF2B\uFF2C\uFF2D\uFF2E\uFF2F\uFF30\uFF31\uFF32\uFF33\uFF34\uFF35\uFF36\uFF37\uFF38\uFF39\uFF3A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFF41\uFF42\uFF43\uFF44\uFF45\uFF46\uFF47\uFF48\uFF49\uFF4A\uFF4B\uFF4C\uFF4D\uFF4E\uFF4F\uFF50\uFF51\uFF52\uFF53\uFF54\uFF55\uFF56\uFF57\uFF58\uFF59\uFF5A\uFFFD\uFFFD\uFFFD\uFFFD\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048\u3049\u304A\u304B\u304C\u304D\u304E\u304F\u3050\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058\u3059\u305A\u305B\u305C\u305D\u305E\u305F\u3060\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069\u306A\u306B\u306C\u306D\u306E\u306F\u3070\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078\u3079\u307A\u307B\u307C\u307D\u307E\u307F\u3080\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088\u3089\u308A\u308B\u308C\u308D\u308E\u308F\u3090\u3091\u3092\u3093\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[130].length; ++j) if (D[130][j].charCodeAt(0) !== 65533) {
        e[D[130][j]] = 33280 + j;
        d[33280 + j] = D[130][j];
      }
      D[131] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u30A1\u30A2\u30A3\u30A4\u30A5\u30A6\u30A7\u30A8\u30A9\u30AA\u30AB\u30AC\u30AD\u30AE\u30AF\u30B0\u30B1\u30B2\u30B3\u30B4\u30B5\u30B6\u30B7\u30B8\u30B9\u30BA\u30BB\u30BC\u30BD\u30BE\u30BF\u30C0\u30C1\u30C2\u30C3\u30C4\u30C5\u30C6\u30C7\u30C8\u30C9\u30CA\u30CB\u30CC\u30CD\u30CE\u30CF\u30D0\u30D1\u30D2\u30D3\u30D4\u30D5\u30D6\u30D7\u30D8\u30D9\u30DA\u30DB\u30DC\u30DD\u30DE\u30DF\uFFFD\u30E0\u30E1\u30E2\u30E3\u30E4\u30E5\u30E6\u30E7\u30E8\u30E9\u30EA\u30EB\u30EC\u30ED\u30EE\u30EF\u30F0\u30F1\u30F2\u30F3\u30F4\u30F5\u30F6\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[131].length; ++j) if (D[131][j].charCodeAt(0) !== 65533) {
        e[D[131][j]] = 33536 + j;
        d[33536 + j] = D[131][j];
      }
      D[132] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0410\u0411\u0412\u0413\u0414\u0415\u0401\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0430\u0431\u0432\u0433\u0434\u0435\u0451\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\uFFFD\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[132].length; ++j) if (D[132][j].charCodeAt(0) !== 65533) {
        e[D[132][j]] = 33792 + j;
        d[33792 + j] = D[132][j];
      }
      D[135] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467\u2468\u2469\u246A\u246B\u246C\u246D\u246E\u246F\u2470\u2471\u2472\u2473\u2160\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168\u2169\uFFFD\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u337B\uFFFD\u301D\u301F\u2116\u33CD\u2121\u32A4\u32A5\u32A6\u32A7\u32A8\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[135].length; ++j) if (D[135][j].charCodeAt(0) !== 65533) {
        e[D[135][j]] = 34560 + j;
        d[34560 + j] = D[135][j];
      }
      D[136] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[136].length; ++j) if (D[136][j].charCodeAt(0) !== 65533) {
        e[D[136][j]] = 34816 + j;
        d[34816 + j] = D[136][j];
      }
      D[137] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186\uFFFD\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[137].length; ++j) if (D[137][j].charCodeAt(0) !== 65533) {
        e[D[137][j]] = 35072 + j;
        d[35072 + j] = D[137][j];
      }
      D[138] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B\uFFFD\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[138].length; ++j) if (D[138][j].charCodeAt(0) !== 65533) {
        e[D[138][j]] = 35328 + j;
        d[35328 + j] = D[138][j];
      }
      D[139] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551\uFFFD\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[139].length; ++j) if (D[139][j].charCodeAt(0) !== 65533) {
        e[D[139][j]] = 35584 + j;
        d[35584 + j] = D[139][j];
      }
      D[140] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8\uFFFD\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[140].length; ++j) if (D[140][j].charCodeAt(0) !== 65533) {
        e[D[140][j]] = 35840 + j;
        d[35840 + j] = D[140][j];
      }
      D[141] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D\uFFFD\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[141].length; ++j) if (D[141][j].charCodeAt(0) !== 65533) {
        e[D[141][j]] = 36096 + j;
        d[36096 + j] = D[141][j];
      }
      D[142] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62\uFFFD\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[142].length; ++j) if (D[142][j].charCodeAt(0) !== 65533) {
        e[D[142][j]] = 36352 + j;
        d[36352 + j] = D[142][j];
      }
      D[143] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3\uFFFD\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[143].length; ++j) if (D[143][j].charCodeAt(0) !== 65533) {
        e[D[143][j]] = 36608 + j;
        d[36608 + j] = D[143][j];
      }
      D[144] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8\uFFFD\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[144].length; ++j) if (D[144][j].charCodeAt(0) !== 65533) {
        e[D[144][j]] = 36864 + j;
        d[36864 + j] = D[144][j];
      }
      D[145] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB\uFFFD\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[145].length; ++j) if (D[145][j].charCodeAt(0) !== 65533) {
        e[D[145][j]] = 37120 + j;
        d[37120 + j] = D[145][j];
      }
      D[146] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4\uFFFD\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[146].length; ++j) if (D[146][j].charCodeAt(0) !== 65533) {
        e[D[146][j]] = 37376 + j;
        d[37376 + j] = D[146][j];
      }
      D[147] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC\uFFFD\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[147].length; ++j) if (D[147][j].charCodeAt(0) !== 65533) {
        e[D[147][j]] = 37632 + j;
        d[37632 + j] = D[147][j];
      }
      D[148] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885\uFFFD\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[148].length; ++j) if (D[148][j].charCodeAt(0) !== 65533) {
        e[D[148][j]] = 37888 + j;
        d[37888 + j] = D[148][j];
      }
      D[149] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577\uFFFD\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[149].length; ++j) if (D[149][j].charCodeAt(0) !== 65533) {
        e[D[149][j]] = 38144 + j;
        d[38144 + j] = D[149][j];
      }
      D[150] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6\uFFFD\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[150].length; ++j) if (D[150][j].charCodeAt(0) !== 65533) {
        e[D[150][j]] = 38400 + j;
        d[38400 + j] = D[150][j];
      }
      D[151] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32\uFFFD\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[151].length; ++j) if (D[151][j].charCodeAt(0) !== 65533) {
        e[D[151][j]] = 38656 + j;
        d[38656 + j] = D[151][j];
      }
      D[152] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[152].length; ++j) if (D[152][j].charCodeAt(0) !== 65533) {
        e[D[152][j]] = 38912 + j;
        d[38912 + j] = D[152][j];
      }
      D[153] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED\uFFFD\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[153].length; ++j) if (D[153][j].charCodeAt(0) !== 65533) {
        e[D[153][j]] = 39168 + j;
        d[39168 + j] = D[153][j];
      }
      D[154] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638\uFFFD\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[154].length; ++j) if (D[154][j].charCodeAt(0) !== 65533) {
        e[D[154][j]] = 39424 + j;
        d[39424 + j] = D[154][j];
      }
      D[155] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80\uFFFD\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[155].length; ++j) if (D[155][j].charCodeAt(0) !== 65533) {
        e[D[155][j]] = 39680 + j;
        d[39680 + j] = D[155][j];
      }
      D[156] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060\uFFFD\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[156].length; ++j) if (D[156][j].charCodeAt(0) !== 65533) {
        e[D[156][j]] = 39936 + j;
        d[39936 + j] = D[156][j];
      }
      D[157] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B\uFFFD\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[157].length; ++j) if (D[157][j].charCodeAt(0) !== 65533) {
        e[D[157][j]] = 40192 + j;
        d[40192 + j] = D[157][j];
      }
      D[158] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E\uFFFD\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[158].length; ++j) if (D[158][j].charCodeAt(0) !== 65533) {
        e[D[158][j]] = 40448 + j;
        d[40448 + j] = D[158][j];
      }
      D[159] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF\uFFFD\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[159].length; ++j) if (D[159][j].charCodeAt(0) !== 65533) {
        e[D[159][j]] = 40704 + j;
        d[40704 + j] = D[159][j];
      }
      D[224] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD\uFFFD\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[224].length; ++j) if (D[224][j].charCodeAt(0) !== 65533) {
        e[D[224][j]] = 57344 + j;
        d[57344 + j] = D[224][j];
      }
      D[225] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF\uFFFD\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[225].length; ++j) if (D[225][j].charCodeAt(0) !== 65533) {
        e[D[225][j]] = 57600 + j;
        d[57600 + j] = D[225][j];
      }
      D[226] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0\uFFFD\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[226].length; ++j) if (D[226][j].charCodeAt(0) !== 65533) {
        e[D[226][j]] = 57856 + j;
        d[57856 + j] = D[226][j];
      }
      D[227] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37\uFFFD\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[227].length; ++j) if (D[227][j].charCodeAt(0) !== 65533) {
        e[D[227][j]] = 58112 + j;
        d[58112 + j] = D[227][j];
      }
      D[228] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264\uFFFD\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[228].length; ++j) if (D[228][j].charCodeAt(0) !== 65533) {
        e[D[228][j]] = 58368 + j;
        d[58368 + j] = D[228][j];
      }
      D[229] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC\uFFFD\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[229].length; ++j) if (D[229][j].charCodeAt(0) !== 65533) {
        e[D[229][j]] = 58624 + j;
        d[58624 + j] = D[229][j];
      }
      D[230] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\uFFFD\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[230].length; ++j) if (D[230][j].charCodeAt(0) !== 65533) {
        e[D[230][j]] = 58880 + j;
        d[58880 + j] = D[230][j];
      }
      D[231] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C\uFFFD\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[231].length; ++j) if (D[231][j].charCodeAt(0) !== 65533) {
        e[D[231][j]] = 59136 + j;
        d[59136 + j] = D[231][j];
      }
      D[232] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599\uFFFD\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[232].length; ++j) if (D[232][j].charCodeAt(0) !== 65533) {
        e[D[232][j]] = 59392 + j;
        d[59392 + j] = D[232][j];
      }
      D[233] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43\uFFFD\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[233].length; ++j) if (D[233][j].charCodeAt(0) !== 65533) {
        e[D[233][j]] = 59648 + j;
        d[59648 + j] = D[233][j];
      }
      D[234] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\uFFFD\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0\u582F\u69C7\u9059\u7464\u51DC\u7199\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[234].length; ++j) if (D[234][j].charCodeAt(0) !== 65533) {
        e[D[234][j]] = 59904 + j;
        d[59904 + j] = D[234][j];
      }
      D[237] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFFFD\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[237].length; ++j) if (D[237][j].charCodeAt(0) !== 65533) {
        e[D[237][j]] = 60672 + j;
        d[60672 + j] = D[237][j];
      }
      D[238] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\uFFFD\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1\uFFFD\uFFFD\u2170\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178\u2179\uFFE2\uFFE4\uFF07\uFF02\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[238].length; ++j) if (D[238][j].charCodeAt(0) !== 65533) {
        e[D[238][j]] = 60928 + j;
        d[60928 + j] = D[238][j];
      }
      D[250] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2170\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178\u2179\u2160\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168\u2169\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u2235\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\uFFFD\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[250].length; ++j) if (D[250][j].charCodeAt(0) !== 65533) {
        e[D[250][j]] = 64e3 + j;
        d[64e3 + j] = D[250][j];
      }
      D[251] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFFFD\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[251].length; ++j) if (D[251][j].charCodeAt(0) !== 65533) {
        e[D[251][j]] = 64256 + j;
        d[64256 + j] = D[251][j];
      }
      D[252] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[252].length; ++j) if (D[252][j].charCodeAt(0) !== 65533) {
        e[D[252][j]] = 64512 + j;
        d[64512 + j] = D[252][j];
      }
      return { "enc": e, "dec": d };
    }();
    cptable2[936] = function() {
      var d = [], e = {}, D = [], j;
      D[0] = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\u20AC\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[0].length; ++j) if (D[0][j].charCodeAt(0) !== 65533) {
        e[D[0][j]] = 0 + j;
        d[0 + j] = D[0][j];
      }
      D[129] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u4E02\u4E04\u4E05\u4E06\u4E0F\u4E12\u4E17\u4E1F\u4E20\u4E21\u4E23\u4E26\u4E29\u4E2E\u4E2F\u4E31\u4E33\u4E35\u4E37\u4E3C\u4E40\u4E41\u4E42\u4E44\u4E46\u4E4A\u4E51\u4E55\u4E57\u4E5A\u4E5B\u4E62\u4E63\u4E64\u4E65\u4E67\u4E68\u4E6A\u4E6B\u4E6C\u4E6D\u4E6E\u4E6F\u4E72\u4E74\u4E75\u4E76\u4E77\u4E78\u4E79\u4E7A\u4E7B\u4E7C\u4E7D\u4E7F\u4E80\u4E81\u4E82\u4E83\u4E84\u4E85\u4E87\u4E8A\uFFFD\u4E90\u4E96\u4E97\u4E99\u4E9C\u4E9D\u4E9E\u4EA3\u4EAA\u4EAF\u4EB0\u4EB1\u4EB4\u4EB6\u4EB7\u4EB8\u4EB9\u4EBC\u4EBD\u4EBE\u4EC8\u4ECC\u4ECF\u4ED0\u4ED2\u4EDA\u4EDB\u4EDC\u4EE0\u4EE2\u4EE6\u4EE7\u4EE9\u4EED\u4EEE\u4EEF\u4EF1\u4EF4\u4EF8\u4EF9\u4EFA\u4EFC\u4EFE\u4F00\u4F02\u4F03\u4F04\u4F05\u4F06\u4F07\u4F08\u4F0B\u4F0C\u4F12\u4F13\u4F14\u4F15\u4F16\u4F1C\u4F1D\u4F21\u4F23\u4F28\u4F29\u4F2C\u4F2D\u4F2E\u4F31\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\u4F3F\u4F40\u4F41\u4F42\u4F44\u4F45\u4F47\u4F48\u4F49\u4F4A\u4F4B\u4F4C\u4F52\u4F54\u4F56\u4F61\u4F62\u4F66\u4F68\u4F6A\u4F6B\u4F6D\u4F6E\u4F71\u4F72\u4F75\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F80\u4F81\u4F82\u4F85\u4F86\u4F87\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F95\u4F96\u4F98\u4F99\u4F9A\u4F9C\u4F9E\u4F9F\u4FA1\u4FA2\uFFFD".split("");
      for (j = 0; j != D[129].length; ++j) if (D[129][j].charCodeAt(0) !== 65533) {
        e[D[129][j]] = 33024 + j;
        d[33024 + j] = D[129][j];
      }
      D[130] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u4FA4\u4FAB\u4FAD\u4FB0\u4FB1\u4FB2\u4FB3\u4FB4\u4FB6\u4FB7\u4FB8\u4FB9\u4FBA\u4FBB\u4FBC\u4FBD\u4FBE\u4FC0\u4FC1\u4FC2\u4FC6\u4FC7\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FD2\u4FD3\u4FD4\u4FD5\u4FD6\u4FD9\u4FDB\u4FE0\u4FE2\u4FE4\u4FE5\u4FE7\u4FEB\u4FEC\u4FF0\u4FF2\u4FF4\u4FF5\u4FF6\u4FF7\u4FF9\u4FFB\u4FFC\u4FFD\u4FFF\u5000\u5001\u5002\u5003\u5004\u5005\u5006\u5007\u5008\u5009\u500A\uFFFD\u500B\u500E\u5010\u5011\u5013\u5015\u5016\u5017\u501B\u501D\u501E\u5020\u5022\u5023\u5024\u5027\u502B\u502F\u5030\u5031\u5032\u5033\u5034\u5035\u5036\u5037\u5038\u5039\u503B\u503D\u503F\u5040\u5041\u5042\u5044\u5045\u5046\u5049\u504A\u504B\u504D\u5050\u5051\u5052\u5053\u5054\u5056\u5057\u5058\u5059\u505B\u505D\u505E\u505F\u5060\u5061\u5062\u5063\u5064\u5066\u5067\u5068\u5069\u506A\u506B\u506D\u506E\u506F\u5070\u5071\u5072\u5073\u5074\u5075\u5078\u5079\u507A\u507C\u507D\u5081\u5082\u5083\u5084\u5086\u5087\u5089\u508A\u508B\u508C\u508E\u508F\u5090\u5091\u5092\u5093\u5094\u5095\u5096\u5097\u5098\u5099\u509A\u509B\u509C\u509D\u509E\u509F\u50A0\u50A1\u50A2\u50A4\u50A6\u50AA\u50AB\u50AD\u50AE\u50AF\u50B0\u50B1\u50B3\u50B4\u50B5\u50B6\u50B7\u50B8\u50B9\u50BC\uFFFD".split("");
      for (j = 0; j != D[130].length; ++j) if (D[130][j].charCodeAt(0) !== 65533) {
        e[D[130][j]] = 33280 + j;
        d[33280 + j] = D[130][j];
      }
      D[131] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u50BD\u50BE\u50BF\u50C0\u50C1\u50C2\u50C3\u50C4\u50C5\u50C6\u50C7\u50C8\u50C9\u50CA\u50CB\u50CC\u50CD\u50CE\u50D0\u50D1\u50D2\u50D3\u50D4\u50D5\u50D7\u50D8\u50D9\u50DB\u50DC\u50DD\u50DE\u50DF\u50E0\u50E1\u50E2\u50E3\u50E4\u50E5\u50E8\u50E9\u50EA\u50EB\u50EF\u50F0\u50F1\u50F2\u50F4\u50F6\u50F7\u50F8\u50F9\u50FA\u50FC\u50FD\u50FE\u50FF\u5100\u5101\u5102\u5103\u5104\u5105\u5108\uFFFD\u5109\u510A\u510C\u510D\u510E\u510F\u5110\u5111\u5113\u5114\u5115\u5116\u5117\u5118\u5119\u511A\u511B\u511C\u511D\u511E\u511F\u5120\u5122\u5123\u5124\u5125\u5126\u5127\u5128\u5129\u512A\u512B\u512C\u512D\u512E\u512F\u5130\u5131\u5132\u5133\u5134\u5135\u5136\u5137\u5138\u5139\u513A\u513B\u513C\u513D\u513E\u5142\u5147\u514A\u514C\u514E\u514F\u5150\u5152\u5153\u5157\u5158\u5159\u515B\u515D\u515E\u515F\u5160\u5161\u5163\u5164\u5166\u5167\u5169\u516A\u516F\u5172\u517A\u517E\u517F\u5183\u5184\u5186\u5187\u518A\u518B\u518E\u518F\u5190\u5191\u5193\u5194\u5198\u519A\u519D\u519E\u519F\u51A1\u51A3\u51A6\u51A7\u51A8\u51A9\u51AA\u51AD\u51AE\u51B4\u51B8\u51B9\u51BA\u51BE\u51BF\u51C1\u51C2\u51C3\u51C5\u51C8\u51CA\u51CD\u51CE\u51D0\u51D2\u51D3\u51D4\u51D5\u51D6\u51D7\uFFFD".split("");
      for (j = 0; j != D[131].length; ++j) if (D[131][j].charCodeAt(0) !== 65533) {
        e[D[131][j]] = 33536 + j;
        d[33536 + j] = D[131][j];
      }
      D[132] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u51D8\u51D9\u51DA\u51DC\u51DE\u51DF\u51E2\u51E3\u51E5\u51E6\u51E7\u51E8\u51E9\u51EA\u51EC\u51EE\u51F1\u51F2\u51F4\u51F7\u51FE\u5204\u5205\u5209\u520B\u520C\u520F\u5210\u5213\u5214\u5215\u521C\u521E\u521F\u5221\u5222\u5223\u5225\u5226\u5227\u522A\u522C\u522F\u5231\u5232\u5234\u5235\u523C\u523E\u5244\u5245\u5246\u5247\u5248\u5249\u524B\u524E\u524F\u5252\u5253\u5255\u5257\u5258\uFFFD\u5259\u525A\u525B\u525D\u525F\u5260\u5262\u5263\u5264\u5266\u5268\u526B\u526C\u526D\u526E\u5270\u5271\u5273\u5274\u5275\u5276\u5277\u5278\u5279\u527A\u527B\u527C\u527E\u5280\u5283\u5284\u5285\u5286\u5287\u5289\u528A\u528B\u528C\u528D\u528E\u528F\u5291\u5292\u5294\u5295\u5296\u5297\u5298\u5299\u529A\u529C\u52A4\u52A5\u52A6\u52A7\u52AE\u52AF\u52B0\u52B4\u52B5\u52B6\u52B7\u52B8\u52B9\u52BA\u52BB\u52BC\u52BD\u52C0\u52C1\u52C2\u52C4\u52C5\u52C6\u52C8\u52CA\u52CC\u52CD\u52CE\u52CF\u52D1\u52D3\u52D4\u52D5\u52D7\u52D9\u52DA\u52DB\u52DC\u52DD\u52DE\u52E0\u52E1\u52E2\u52E3\u52E5\u52E6\u52E7\u52E8\u52E9\u52EA\u52EB\u52EC\u52ED\u52EE\u52EF\u52F1\u52F2\u52F3\u52F4\u52F5\u52F6\u52F7\u52F8\u52FB\u52FC\u52FD\u5301\u5302\u5303\u5304\u5307\u5309\u530A\u530B\u530C\u530E\uFFFD".split("");
      for (j = 0; j != D[132].length; ++j) if (D[132][j].charCodeAt(0) !== 65533) {
        e[D[132][j]] = 33792 + j;
        d[33792 + j] = D[132][j];
      }
      D[133] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5311\u5312\u5313\u5314\u5318\u531B\u531C\u531E\u531F\u5322\u5324\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u532F\u5330\u5331\u5332\u5333\u5334\u5335\u5336\u5337\u5338\u533C\u533D\u5340\u5342\u5344\u5346\u534B\u534C\u534D\u5350\u5354\u5358\u5359\u535B\u535D\u5365\u5368\u536A\u536C\u536D\u5372\u5376\u5379\u537B\u537C\u537D\u537E\u5380\u5381\u5383\u5387\u5388\u538A\u538E\u538F\uFFFD\u5390\u5391\u5392\u5393\u5394\u5396\u5397\u5399\u539B\u539C\u539E\u53A0\u53A1\u53A4\u53A7\u53AA\u53AB\u53AC\u53AD\u53AF\u53B0\u53B1\u53B2\u53B3\u53B4\u53B5\u53B7\u53B8\u53B9\u53BA\u53BC\u53BD\u53BE\u53C0\u53C3\u53C4\u53C5\u53C6\u53C7\u53CE\u53CF\u53D0\u53D2\u53D3\u53D5\u53DA\u53DC\u53DD\u53DE\u53E1\u53E2\u53E7\u53F4\u53FA\u53FE\u53FF\u5400\u5402\u5405\u5407\u540B\u5414\u5418\u5419\u541A\u541C\u5422\u5424\u5425\u542A\u5430\u5433\u5436\u5437\u543A\u543D\u543F\u5441\u5442\u5444\u5445\u5447\u5449\u544C\u544D\u544E\u544F\u5451\u545A\u545D\u545E\u545F\u5460\u5461\u5463\u5465\u5467\u5469\u546A\u546B\u546C\u546D\u546E\u546F\u5470\u5474\u5479\u547A\u547E\u547F\u5481\u5483\u5485\u5487\u5488\u5489\u548A\u548D\u5491\u5493\u5497\u5498\u549C\u549E\u549F\u54A0\u54A1\uFFFD".split("");
      for (j = 0; j != D[133].length; ++j) if (D[133][j].charCodeAt(0) !== 65533) {
        e[D[133][j]] = 34048 + j;
        d[34048 + j] = D[133][j];
      }
      D[134] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u54A2\u54A5\u54AE\u54B0\u54B2\u54B5\u54B6\u54B7\u54B9\u54BA\u54BC\u54BE\u54C3\u54C5\u54CA\u54CB\u54D6\u54D8\u54DB\u54E0\u54E1\u54E2\u54E3\u54E4\u54EB\u54EC\u54EF\u54F0\u54F1\u54F4\u54F5\u54F6\u54F7\u54F8\u54F9\u54FB\u54FE\u5500\u5502\u5503\u5504\u5505\u5508\u550A\u550B\u550C\u550D\u550E\u5512\u5513\u5515\u5516\u5517\u5518\u5519\u551A\u551C\u551D\u551E\u551F\u5521\u5525\u5526\uFFFD\u5528\u5529\u552B\u552D\u5532\u5534\u5535\u5536\u5538\u5539\u553A\u553B\u553D\u5540\u5542\u5545\u5547\u5548\u554B\u554C\u554D\u554E\u554F\u5551\u5552\u5553\u5554\u5557\u5558\u5559\u555A\u555B\u555D\u555E\u555F\u5560\u5562\u5563\u5568\u5569\u556B\u556F\u5570\u5571\u5572\u5573\u5574\u5579\u557A\u557D\u557F\u5585\u5586\u558C\u558D\u558E\u5590\u5592\u5593\u5595\u5596\u5597\u559A\u559B\u559E\u55A0\u55A1\u55A2\u55A3\u55A4\u55A5\u55A6\u55A8\u55A9\u55AA\u55AB\u55AC\u55AD\u55AE\u55AF\u55B0\u55B2\u55B4\u55B6\u55B8\u55BA\u55BC\u55BF\u55C0\u55C1\u55C2\u55C3\u55C6\u55C7\u55C8\u55CA\u55CB\u55CE\u55CF\u55D0\u55D5\u55D7\u55D8\u55D9\u55DA\u55DB\u55DE\u55E0\u55E2\u55E7\u55E9\u55ED\u55EE\u55F0\u55F1\u55F4\u55F6\u55F8\u55F9\u55FA\u55FB\u55FC\u55FF\u5602\u5603\u5604\u5605\uFFFD".split("");
      for (j = 0; j != D[134].length; ++j) if (D[134][j].charCodeAt(0) !== 65533) {
        e[D[134][j]] = 34304 + j;
        d[34304 + j] = D[134][j];
      }
      D[135] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5606\u5607\u560A\u560B\u560D\u5610\u5611\u5612\u5613\u5614\u5615\u5616\u5617\u5619\u561A\u561C\u561D\u5620\u5621\u5622\u5625\u5626\u5628\u5629\u562A\u562B\u562E\u562F\u5630\u5633\u5635\u5637\u5638\u563A\u563C\u563D\u563E\u5640\u5641\u5642\u5643\u5644\u5645\u5646\u5647\u5648\u5649\u564A\u564B\u564F\u5650\u5651\u5652\u5653\u5655\u5656\u565A\u565B\u565D\u565E\u565F\u5660\u5661\uFFFD\u5663\u5665\u5666\u5667\u566D\u566E\u566F\u5670\u5672\u5673\u5674\u5675\u5677\u5678\u5679\u567A\u567D\u567E\u567F\u5680\u5681\u5682\u5683\u5684\u5687\u5688\u5689\u568A\u568B\u568C\u568D\u5690\u5691\u5692\u5694\u5695\u5696\u5697\u5698\u5699\u569A\u569B\u569C\u569D\u569E\u569F\u56A0\u56A1\u56A2\u56A4\u56A5\u56A6\u56A7\u56A8\u56A9\u56AA\u56AB\u56AC\u56AD\u56AE\u56B0\u56B1\u56B2\u56B3\u56B4\u56B5\u56B6\u56B8\u56B9\u56BA\u56BB\u56BD\u56BE\u56BF\u56C0\u56C1\u56C2\u56C3\u56C4\u56C5\u56C6\u56C7\u56C8\u56C9\u56CB\u56CC\u56CD\u56CE\u56CF\u56D0\u56D1\u56D2\u56D3\u56D5\u56D6\u56D8\u56D9\u56DC\u56E3\u56E5\u56E6\u56E7\u56E8\u56E9\u56EA\u56EC\u56EE\u56EF\u56F2\u56F3\u56F6\u56F7\u56F8\u56FB\u56FC\u5700\u5701\u5702\u5705\u5707\u570B\u570C\u570D\u570E\u570F\u5710\u5711\uFFFD".split("");
      for (j = 0; j != D[135].length; ++j) if (D[135][j].charCodeAt(0) !== 65533) {
        e[D[135][j]] = 34560 + j;
        d[34560 + j] = D[135][j];
      }
      D[136] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5712\u5713\u5714\u5715\u5716\u5717\u5718\u5719\u571A\u571B\u571D\u571E\u5720\u5721\u5722\u5724\u5725\u5726\u5727\u572B\u5731\u5732\u5734\u5735\u5736\u5737\u5738\u573C\u573D\u573F\u5741\u5743\u5744\u5745\u5746\u5748\u5749\u574B\u5752\u5753\u5754\u5755\u5756\u5758\u5759\u5762\u5763\u5765\u5767\u576C\u576E\u5770\u5771\u5772\u5774\u5775\u5778\u5779\u577A\u577D\u577E\u577F\u5780\uFFFD\u5781\u5787\u5788\u5789\u578A\u578D\u578E\u578F\u5790\u5791\u5794\u5795\u5796\u5797\u5798\u5799\u579A\u579C\u579D\u579E\u579F\u57A5\u57A8\u57AA\u57AC\u57AF\u57B0\u57B1\u57B3\u57B5\u57B6\u57B7\u57B9\u57BA\u57BB\u57BC\u57BD\u57BE\u57BF\u57C0\u57C1\u57C4\u57C5\u57C6\u57C7\u57C8\u57C9\u57CA\u57CC\u57CD\u57D0\u57D1\u57D3\u57D6\u57D7\u57DB\u57DC\u57DE\u57E1\u57E2\u57E3\u57E5\u57E6\u57E7\u57E8\u57E9\u57EA\u57EB\u57EC\u57EE\u57F0\u57F1\u57F2\u57F3\u57F5\u57F6\u57F7\u57FB\u57FC\u57FE\u57FF\u5801\u5803\u5804\u5805\u5808\u5809\u580A\u580C\u580E\u580F\u5810\u5812\u5813\u5814\u5816\u5817\u5818\u581A\u581B\u581C\u581D\u581F\u5822\u5823\u5825\u5826\u5827\u5828\u5829\u582B\u582C\u582D\u582E\u582F\u5831\u5832\u5833\u5834\u5836\u5837\u5838\u5839\u583A\u583B\u583C\u583D\uFFFD".split("");
      for (j = 0; j != D[136].length; ++j) if (D[136][j].charCodeAt(0) !== 65533) {
        e[D[136][j]] = 34816 + j;
        d[34816 + j] = D[136][j];
      }
      D[137] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u583E\u583F\u5840\u5841\u5842\u5843\u5845\u5846\u5847\u5848\u5849\u584A\u584B\u584E\u584F\u5850\u5852\u5853\u5855\u5856\u5857\u5859\u585A\u585B\u585C\u585D\u585F\u5860\u5861\u5862\u5863\u5864\u5866\u5867\u5868\u5869\u586A\u586D\u586E\u586F\u5870\u5871\u5872\u5873\u5874\u5875\u5876\u5877\u5878\u5879\u587A\u587B\u587C\u587D\u587F\u5882\u5884\u5886\u5887\u5888\u588A\u588B\u588C\uFFFD\u588D\u588E\u588F\u5890\u5891\u5894\u5895\u5896\u5897\u5898\u589B\u589C\u589D\u58A0\u58A1\u58A2\u58A3\u58A4\u58A5\u58A6\u58A7\u58AA\u58AB\u58AC\u58AD\u58AE\u58AF\u58B0\u58B1\u58B2\u58B3\u58B4\u58B5\u58B6\u58B7\u58B8\u58B9\u58BA\u58BB\u58BD\u58BE\u58BF\u58C0\u58C2\u58C3\u58C4\u58C6\u58C7\u58C8\u58C9\u58CA\u58CB\u58CC\u58CD\u58CE\u58CF\u58D0\u58D2\u58D3\u58D4\u58D6\u58D7\u58D8\u58D9\u58DA\u58DB\u58DC\u58DD\u58DE\u58DF\u58E0\u58E1\u58E2\u58E3\u58E5\u58E6\u58E7\u58E8\u58E9\u58EA\u58ED\u58EF\u58F1\u58F2\u58F4\u58F5\u58F7\u58F8\u58FA\u58FB\u58FC\u58FD\u58FE\u58FF\u5900\u5901\u5903\u5905\u5906\u5908\u5909\u590A\u590B\u590C\u590E\u5910\u5911\u5912\u5913\u5917\u5918\u591B\u591D\u591E\u5920\u5921\u5922\u5923\u5926\u5928\u592C\u5930\u5932\u5933\u5935\u5936\u593B\uFFFD".split("");
      for (j = 0; j != D[137].length; ++j) if (D[137][j].charCodeAt(0) !== 65533) {
        e[D[137][j]] = 35072 + j;
        d[35072 + j] = D[137][j];
      }
      D[138] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u593D\u593E\u593F\u5940\u5943\u5945\u5946\u594A\u594C\u594D\u5950\u5952\u5953\u5959\u595B\u595C\u595D\u595E\u595F\u5961\u5963\u5964\u5966\u5967\u5968\u5969\u596A\u596B\u596C\u596D\u596E\u596F\u5970\u5971\u5972\u5975\u5977\u597A\u597B\u597C\u597E\u597F\u5980\u5985\u5989\u598B\u598C\u598E\u598F\u5990\u5991\u5994\u5995\u5998\u599A\u599B\u599C\u599D\u599F\u59A0\u59A1\u59A2\u59A6\uFFFD\u59A7\u59AC\u59AD\u59B0\u59B1\u59B3\u59B4\u59B5\u59B6\u59B7\u59B8\u59BA\u59BC\u59BD\u59BF\u59C0\u59C1\u59C2\u59C3\u59C4\u59C5\u59C7\u59C8\u59C9\u59CC\u59CD\u59CE\u59CF\u59D5\u59D6\u59D9\u59DB\u59DE\u59DF\u59E0\u59E1\u59E2\u59E4\u59E6\u59E7\u59E9\u59EA\u59EB\u59ED\u59EE\u59EF\u59F0\u59F1\u59F2\u59F3\u59F4\u59F5\u59F6\u59F7\u59F8\u59FA\u59FC\u59FD\u59FE\u5A00\u5A02\u5A0A\u5A0B\u5A0D\u5A0E\u5A0F\u5A10\u5A12\u5A14\u5A15\u5A16\u5A17\u5A19\u5A1A\u5A1B\u5A1D\u5A1E\u5A21\u5A22\u5A24\u5A26\u5A27\u5A28\u5A2A\u5A2B\u5A2C\u5A2D\u5A2E\u5A2F\u5A30\u5A33\u5A35\u5A37\u5A38\u5A39\u5A3A\u5A3B\u5A3D\u5A3E\u5A3F\u5A41\u5A42\u5A43\u5A44\u5A45\u5A47\u5A48\u5A4B\u5A4C\u5A4D\u5A4E\u5A4F\u5A50\u5A51\u5A52\u5A53\u5A54\u5A56\u5A57\u5A58\u5A59\u5A5B\u5A5C\u5A5D\u5A5E\u5A5F\u5A60\uFFFD".split("");
      for (j = 0; j != D[138].length; ++j) if (D[138][j].charCodeAt(0) !== 65533) {
        e[D[138][j]] = 35328 + j;
        d[35328 + j] = D[138][j];
      }
      D[139] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5A61\u5A63\u5A64\u5A65\u5A66\u5A68\u5A69\u5A6B\u5A6C\u5A6D\u5A6E\u5A6F\u5A70\u5A71\u5A72\u5A73\u5A78\u5A79\u5A7B\u5A7C\u5A7D\u5A7E\u5A80\u5A81\u5A82\u5A83\u5A84\u5A85\u5A86\u5A87\u5A88\u5A89\u5A8A\u5A8B\u5A8C\u5A8D\u5A8E\u5A8F\u5A90\u5A91\u5A93\u5A94\u5A95\u5A96\u5A97\u5A98\u5A99\u5A9C\u5A9D\u5A9E\u5A9F\u5AA0\u5AA1\u5AA2\u5AA3\u5AA4\u5AA5\u5AA6\u5AA7\u5AA8\u5AA9\u5AAB\u5AAC\uFFFD\u5AAD\u5AAE\u5AAF\u5AB0\u5AB1\u5AB4\u5AB6\u5AB7\u5AB9\u5ABA\u5ABB\u5ABC\u5ABD\u5ABF\u5AC0\u5AC3\u5AC4\u5AC5\u5AC6\u5AC7\u5AC8\u5ACA\u5ACB\u5ACD\u5ACE\u5ACF\u5AD0\u5AD1\u5AD3\u5AD5\u5AD7\u5AD9\u5ADA\u5ADB\u5ADD\u5ADE\u5ADF\u5AE2\u5AE4\u5AE5\u5AE7\u5AE8\u5AEA\u5AEC\u5AED\u5AEE\u5AEF\u5AF0\u5AF2\u5AF3\u5AF4\u5AF5\u5AF6\u5AF7\u5AF8\u5AF9\u5AFA\u5AFB\u5AFC\u5AFD\u5AFE\u5AFF\u5B00\u5B01\u5B02\u5B03\u5B04\u5B05\u5B06\u5B07\u5B08\u5B0A\u5B0B\u5B0C\u5B0D\u5B0E\u5B0F\u5B10\u5B11\u5B12\u5B13\u5B14\u5B15\u5B18\u5B19\u5B1A\u5B1B\u5B1C\u5B1D\u5B1E\u5B1F\u5B20\u5B21\u5B22\u5B23\u5B24\u5B25\u5B26\u5B27\u5B28\u5B29\u5B2A\u5B2B\u5B2C\u5B2D\u5B2E\u5B2F\u5B30\u5B31\u5B33\u5B35\u5B36\u5B38\u5B39\u5B3A\u5B3B\u5B3C\u5B3D\u5B3E\u5B3F\u5B41\u5B42\u5B43\u5B44\u5B45\u5B46\u5B47\uFFFD".split("");
      for (j = 0; j != D[139].length; ++j) if (D[139][j].charCodeAt(0) !== 65533) {
        e[D[139][j]] = 35584 + j;
        d[35584 + j] = D[139][j];
      }
      D[140] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5B48\u5B49\u5B4A\u5B4B\u5B4C\u5B4D\u5B4E\u5B4F\u5B52\u5B56\u5B5E\u5B60\u5B61\u5B67\u5B68\u5B6B\u5B6D\u5B6E\u5B6F\u5B72\u5B74\u5B76\u5B77\u5B78\u5B79\u5B7B\u5B7C\u5B7E\u5B7F\u5B82\u5B86\u5B8A\u5B8D\u5B8E\u5B90\u5B91\u5B92\u5B94\u5B96\u5B9F\u5BA7\u5BA8\u5BA9\u5BAC\u5BAD\u5BAE\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBB\u5BBC\u5BC0\u5BC1\u5BC3\u5BC8\u5BC9\u5BCA\u5BCB\u5BCD\u5BCE\u5BCF\uFFFD\u5BD1\u5BD4\u5BD5\u5BD6\u5BD7\u5BD8\u5BD9\u5BDA\u5BDB\u5BDC\u5BE0\u5BE2\u5BE3\u5BE6\u5BE7\u5BE9\u5BEA\u5BEB\u5BEC\u5BED\u5BEF\u5BF1\u5BF2\u5BF3\u5BF4\u5BF5\u5BF6\u5BF7\u5BFD\u5BFE\u5C00\u5C02\u5C03\u5C05\u5C07\u5C08\u5C0B\u5C0C\u5C0D\u5C0E\u5C10\u5C12\u5C13\u5C17\u5C19\u5C1B\u5C1E\u5C1F\u5C20\u5C21\u5C23\u5C26\u5C28\u5C29\u5C2A\u5C2B\u5C2D\u5C2E\u5C2F\u5C30\u5C32\u5C33\u5C35\u5C36\u5C37\u5C43\u5C44\u5C46\u5C47\u5C4C\u5C4D\u5C52\u5C53\u5C54\u5C56\u5C57\u5C58\u5C5A\u5C5B\u5C5C\u5C5D\u5C5F\u5C62\u5C64\u5C67\u5C68\u5C69\u5C6A\u5C6B\u5C6C\u5C6D\u5C70\u5C72\u5C73\u5C74\u5C75\u5C76\u5C77\u5C78\u5C7B\u5C7C\u5C7D\u5C7E\u5C80\u5C83\u5C84\u5C85\u5C86\u5C87\u5C89\u5C8A\u5C8B\u5C8E\u5C8F\u5C92\u5C93\u5C95\u5C9D\u5C9E\u5C9F\u5CA0\u5CA1\u5CA4\u5CA5\u5CA6\u5CA7\u5CA8\uFFFD".split("");
      for (j = 0; j != D[140].length; ++j) if (D[140][j].charCodeAt(0) !== 65533) {
        e[D[140][j]] = 35840 + j;
        d[35840 + j] = D[140][j];
      }
      D[141] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5CAA\u5CAE\u5CAF\u5CB0\u5CB2\u5CB4\u5CB6\u5CB9\u5CBA\u5CBB\u5CBC\u5CBE\u5CC0\u5CC2\u5CC3\u5CC5\u5CC6\u5CC7\u5CC8\u5CC9\u5CCA\u5CCC\u5CCD\u5CCE\u5CCF\u5CD0\u5CD1\u5CD3\u5CD4\u5CD5\u5CD6\u5CD7\u5CD8\u5CDA\u5CDB\u5CDC\u5CDD\u5CDE\u5CDF\u5CE0\u5CE2\u5CE3\u5CE7\u5CE9\u5CEB\u5CEC\u5CEE\u5CEF\u5CF1\u5CF2\u5CF3\u5CF4\u5CF5\u5CF6\u5CF7\u5CF8\u5CF9\u5CFA\u5CFC\u5CFD\u5CFE\u5CFF\u5D00\uFFFD\u5D01\u5D04\u5D05\u5D08\u5D09\u5D0A\u5D0B\u5D0C\u5D0D\u5D0F\u5D10\u5D11\u5D12\u5D13\u5D15\u5D17\u5D18\u5D19\u5D1A\u5D1C\u5D1D\u5D1F\u5D20\u5D21\u5D22\u5D23\u5D25\u5D28\u5D2A\u5D2B\u5D2C\u5D2F\u5D30\u5D31\u5D32\u5D33\u5D35\u5D36\u5D37\u5D38\u5D39\u5D3A\u5D3B\u5D3C\u5D3F\u5D40\u5D41\u5D42\u5D43\u5D44\u5D45\u5D46\u5D48\u5D49\u5D4D\u5D4E\u5D4F\u5D50\u5D51\u5D52\u5D53\u5D54\u5D55\u5D56\u5D57\u5D59\u5D5A\u5D5C\u5D5E\u5D5F\u5D60\u5D61\u5D62\u5D63\u5D64\u5D65\u5D66\u5D67\u5D68\u5D6A\u5D6D\u5D6E\u5D70\u5D71\u5D72\u5D73\u5D75\u5D76\u5D77\u5D78\u5D79\u5D7A\u5D7B\u5D7C\u5D7D\u5D7E\u5D7F\u5D80\u5D81\u5D83\u5D84\u5D85\u5D86\u5D87\u5D88\u5D89\u5D8A\u5D8B\u5D8C\u5D8D\u5D8E\u5D8F\u5D90\u5D91\u5D92\u5D93\u5D94\u5D95\u5D96\u5D97\u5D98\u5D9A\u5D9B\u5D9C\u5D9E\u5D9F\u5DA0\uFFFD".split("");
      for (j = 0; j != D[141].length; ++j) if (D[141][j].charCodeAt(0) !== 65533) {
        e[D[141][j]] = 36096 + j;
        d[36096 + j] = D[141][j];
      }
      D[142] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5DA1\u5DA2\u5DA3\u5DA4\u5DA5\u5DA6\u5DA7\u5DA8\u5DA9\u5DAA\u5DAB\u5DAC\u5DAD\u5DAE\u5DAF\u5DB0\u5DB1\u5DB2\u5DB3\u5DB4\u5DB5\u5DB6\u5DB8\u5DB9\u5DBA\u5DBB\u5DBC\u5DBD\u5DBE\u5DBF\u5DC0\u5DC1\u5DC2\u5DC3\u5DC4\u5DC6\u5DC7\u5DC8\u5DC9\u5DCA\u5DCB\u5DCC\u5DCE\u5DCF\u5DD0\u5DD1\u5DD2\u5DD3\u5DD4\u5DD5\u5DD6\u5DD7\u5DD8\u5DD9\u5DDA\u5DDC\u5DDF\u5DE0\u5DE3\u5DE4\u5DEA\u5DEC\u5DED\uFFFD\u5DF0\u5DF5\u5DF6\u5DF8\u5DF9\u5DFA\u5DFB\u5DFC\u5DFF\u5E00\u5E04\u5E07\u5E09\u5E0A\u5E0B\u5E0D\u5E0E\u5E12\u5E13\u5E17\u5E1E\u5E1F\u5E20\u5E21\u5E22\u5E23\u5E24\u5E25\u5E28\u5E29\u5E2A\u5E2B\u5E2C\u5E2F\u5E30\u5E32\u5E33\u5E34\u5E35\u5E36\u5E39\u5E3A\u5E3E\u5E3F\u5E40\u5E41\u5E43\u5E46\u5E47\u5E48\u5E49\u5E4A\u5E4B\u5E4D\u5E4E\u5E4F\u5E50\u5E51\u5E52\u5E53\u5E56\u5E57\u5E58\u5E59\u5E5A\u5E5C\u5E5D\u5E5F\u5E60\u5E63\u5E64\u5E65\u5E66\u5E67\u5E68\u5E69\u5E6A\u5E6B\u5E6C\u5E6D\u5E6E\u5E6F\u5E70\u5E71\u5E75\u5E77\u5E79\u5E7E\u5E81\u5E82\u5E83\u5E85\u5E88\u5E89\u5E8C\u5E8D\u5E8E\u5E92\u5E98\u5E9B\u5E9D\u5EA1\u5EA2\u5EA3\u5EA4\u5EA8\u5EA9\u5EAA\u5EAB\u5EAC\u5EAE\u5EAF\u5EB0\u5EB1\u5EB2\u5EB4\u5EBA\u5EBB\u5EBC\u5EBD\u5EBF\u5EC0\u5EC1\u5EC2\u5EC3\u5EC4\u5EC5\uFFFD".split("");
      for (j = 0; j != D[142].length; ++j) if (D[142][j].charCodeAt(0) !== 65533) {
        e[D[142][j]] = 36352 + j;
        d[36352 + j] = D[142][j];
      }
      D[143] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5EC6\u5EC7\u5EC8\u5ECB\u5ECC\u5ECD\u5ECE\u5ECF\u5ED0\u5ED4\u5ED5\u5ED7\u5ED8\u5ED9\u5EDA\u5EDC\u5EDD\u5EDE\u5EDF\u5EE0\u5EE1\u5EE2\u5EE3\u5EE4\u5EE5\u5EE6\u5EE7\u5EE9\u5EEB\u5EEC\u5EED\u5EEE\u5EEF\u5EF0\u5EF1\u5EF2\u5EF3\u5EF5\u5EF8\u5EF9\u5EFB\u5EFC\u5EFD\u5F05\u5F06\u5F07\u5F09\u5F0C\u5F0D\u5F0E\u5F10\u5F12\u5F14\u5F16\u5F19\u5F1A\u5F1C\u5F1D\u5F1E\u5F21\u5F22\u5F23\u5F24\uFFFD\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F32\u5F33\u5F34\u5F35\u5F36\u5F37\u5F38\u5F3B\u5F3D\u5F3E\u5F3F\u5F41\u5F42\u5F43\u5F44\u5F45\u5F46\u5F47\u5F48\u5F49\u5F4A\u5F4B\u5F4C\u5F4D\u5F4E\u5F4F\u5F51\u5F54\u5F59\u5F5A\u5F5B\u5F5C\u5F5E\u5F5F\u5F60\u5F63\u5F65\u5F67\u5F68\u5F6B\u5F6E\u5F6F\u5F72\u5F74\u5F75\u5F76\u5F78\u5F7A\u5F7D\u5F7E\u5F7F\u5F83\u5F86\u5F8D\u5F8E\u5F8F\u5F91\u5F93\u5F94\u5F96\u5F9A\u5F9B\u5F9D\u5F9E\u5F9F\u5FA0\u5FA2\u5FA3\u5FA4\u5FA5\u5FA6\u5FA7\u5FA9\u5FAB\u5FAC\u5FAF\u5FB0\u5FB1\u5FB2\u5FB3\u5FB4\u5FB6\u5FB8\u5FB9\u5FBA\u5FBB\u5FBE\u5FBF\u5FC0\u5FC1\u5FC2\u5FC7\u5FC8\u5FCA\u5FCB\u5FCE\u5FD3\u5FD4\u5FD5\u5FDA\u5FDB\u5FDC\u5FDE\u5FDF\u5FE2\u5FE3\u5FE5\u5FE6\u5FE8\u5FE9\u5FEC\u5FEF\u5FF0\u5FF2\u5FF3\u5FF4\u5FF6\u5FF7\u5FF9\u5FFA\u5FFC\u6007\uFFFD".split("");
      for (j = 0; j != D[143].length; ++j) if (D[143][j].charCodeAt(0) !== 65533) {
        e[D[143][j]] = 36608 + j;
        d[36608 + j] = D[143][j];
      }
      D[144] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6008\u6009\u600B\u600C\u6010\u6011\u6013\u6017\u6018\u601A\u601E\u601F\u6022\u6023\u6024\u602C\u602D\u602E\u6030\u6031\u6032\u6033\u6034\u6036\u6037\u6038\u6039\u603A\u603D\u603E\u6040\u6044\u6045\u6046\u6047\u6048\u6049\u604A\u604C\u604E\u604F\u6051\u6053\u6054\u6056\u6057\u6058\u605B\u605C\u605E\u605F\u6060\u6061\u6065\u6066\u606E\u6071\u6072\u6074\u6075\u6077\u607E\u6080\uFFFD\u6081\u6082\u6085\u6086\u6087\u6088\u608A\u608B\u608E\u608F\u6090\u6091\u6093\u6095\u6097\u6098\u6099\u609C\u609E\u60A1\u60A2\u60A4\u60A5\u60A7\u60A9\u60AA\u60AE\u60B0\u60B3\u60B5\u60B6\u60B7\u60B9\u60BA\u60BD\u60BE\u60BF\u60C0\u60C1\u60C2\u60C3\u60C4\u60C7\u60C8\u60C9\u60CC\u60CD\u60CE\u60CF\u60D0\u60D2\u60D3\u60D4\u60D6\u60D7\u60D9\u60DB\u60DE\u60E1\u60E2\u60E3\u60E4\u60E5\u60EA\u60F1\u60F2\u60F5\u60F7\u60F8\u60FB\u60FC\u60FD\u60FE\u60FF\u6102\u6103\u6104\u6105\u6107\u610A\u610B\u610C\u6110\u6111\u6112\u6113\u6114\u6116\u6117\u6118\u6119\u611B\u611C\u611D\u611E\u6121\u6122\u6125\u6128\u6129\u612A\u612C\u612D\u612E\u612F\u6130\u6131\u6132\u6133\u6134\u6135\u6136\u6137\u6138\u6139\u613A\u613B\u613C\u613D\u613E\u6140\u6141\u6142\u6143\u6144\u6145\u6146\uFFFD".split("");
      for (j = 0; j != D[144].length; ++j) if (D[144][j].charCodeAt(0) !== 65533) {
        e[D[144][j]] = 36864 + j;
        d[36864 + j] = D[144][j];
      }
      D[145] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6147\u6149\u614B\u614D\u614F\u6150\u6152\u6153\u6154\u6156\u6157\u6158\u6159\u615A\u615B\u615C\u615E\u615F\u6160\u6161\u6163\u6164\u6165\u6166\u6169\u616A\u616B\u616C\u616D\u616E\u616F\u6171\u6172\u6173\u6174\u6176\u6178\u6179\u617A\u617B\u617C\u617D\u617E\u617F\u6180\u6181\u6182\u6183\u6184\u6185\u6186\u6187\u6188\u6189\u618A\u618C\u618D\u618F\u6190\u6191\u6192\u6193\u6195\uFFFD\u6196\u6197\u6198\u6199\u619A\u619B\u619C\u619E\u619F\u61A0\u61A1\u61A2\u61A3\u61A4\u61A5\u61A6\u61AA\u61AB\u61AD\u61AE\u61AF\u61B0\u61B1\u61B2\u61B3\u61B4\u61B5\u61B6\u61B8\u61B9\u61BA\u61BB\u61BC\u61BD\u61BF\u61C0\u61C1\u61C3\u61C4\u61C5\u61C6\u61C7\u61C9\u61CC\u61CD\u61CE\u61CF\u61D0\u61D3\u61D5\u61D6\u61D7\u61D8\u61D9\u61DA\u61DB\u61DC\u61DD\u61DE\u61DF\u61E0\u61E1\u61E2\u61E3\u61E4\u61E5\u61E7\u61E8\u61E9\u61EA\u61EB\u61EC\u61ED\u61EE\u61EF\u61F0\u61F1\u61F2\u61F3\u61F4\u61F6\u61F7\u61F8\u61F9\u61FA\u61FB\u61FC\u61FD\u61FE\u6200\u6201\u6202\u6203\u6204\u6205\u6207\u6209\u6213\u6214\u6219\u621C\u621D\u621E\u6220\u6223\u6226\u6227\u6228\u6229\u622B\u622D\u622F\u6230\u6231\u6232\u6235\u6236\u6238\u6239\u623A\u623B\u623C\u6242\u6244\u6245\u6246\u624A\uFFFD".split("");
      for (j = 0; j != D[145].length; ++j) if (D[145][j].charCodeAt(0) !== 65533) {
        e[D[145][j]] = 37120 + j;
        d[37120 + j] = D[145][j];
      }
      D[146] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u624F\u6250\u6255\u6256\u6257\u6259\u625A\u625C\u625D\u625E\u625F\u6260\u6261\u6262\u6264\u6265\u6268\u6271\u6272\u6274\u6275\u6277\u6278\u627A\u627B\u627D\u6281\u6282\u6283\u6285\u6286\u6287\u6288\u628B\u628C\u628D\u628E\u628F\u6290\u6294\u6299\u629C\u629D\u629E\u62A3\u62A6\u62A7\u62A9\u62AA\u62AD\u62AE\u62AF\u62B0\u62B2\u62B3\u62B4\u62B6\u62B7\u62B8\u62BA\u62BE\u62C0\u62C1\uFFFD\u62C3\u62CB\u62CF\u62D1\u62D5\u62DD\u62DE\u62E0\u62E1\u62E4\u62EA\u62EB\u62F0\u62F2\u62F5\u62F8\u62F9\u62FA\u62FB\u6300\u6303\u6304\u6305\u6306\u630A\u630B\u630C\u630D\u630F\u6310\u6312\u6313\u6314\u6315\u6317\u6318\u6319\u631C\u6326\u6327\u6329\u632C\u632D\u632E\u6330\u6331\u6333\u6334\u6335\u6336\u6337\u6338\u633B\u633C\u633E\u633F\u6340\u6341\u6344\u6347\u6348\u634A\u6351\u6352\u6353\u6354\u6356\u6357\u6358\u6359\u635A\u635B\u635C\u635D\u6360\u6364\u6365\u6366\u6368\u636A\u636B\u636C\u636F\u6370\u6372\u6373\u6374\u6375\u6378\u6379\u637C\u637D\u637E\u637F\u6381\u6383\u6384\u6385\u6386\u638B\u638D\u6391\u6393\u6394\u6395\u6397\u6399\u639A\u639B\u639C\u639D\u639E\u639F\u63A1\u63A4\u63A6\u63AB\u63AF\u63B1\u63B2\u63B5\u63B6\u63B9\u63BB\u63BD\u63BF\u63C0\uFFFD".split("");
      for (j = 0; j != D[146].length; ++j) if (D[146][j].charCodeAt(0) !== 65533) {
        e[D[146][j]] = 37376 + j;
        d[37376 + j] = D[146][j];
      }
      D[147] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u63C1\u63C2\u63C3\u63C5\u63C7\u63C8\u63CA\u63CB\u63CC\u63D1\u63D3\u63D4\u63D5\u63D7\u63D8\u63D9\u63DA\u63DB\u63DC\u63DD\u63DF\u63E2\u63E4\u63E5\u63E6\u63E7\u63E8\u63EB\u63EC\u63EE\u63EF\u63F0\u63F1\u63F3\u63F5\u63F7\u63F9\u63FA\u63FB\u63FC\u63FE\u6403\u6404\u6406\u6407\u6408\u6409\u640A\u640D\u640E\u6411\u6412\u6415\u6416\u6417\u6418\u6419\u641A\u641D\u641F\u6422\u6423\u6424\uFFFD\u6425\u6427\u6428\u6429\u642B\u642E\u642F\u6430\u6431\u6432\u6433\u6435\u6436\u6437\u6438\u6439\u643B\u643C\u643E\u6440\u6442\u6443\u6449\u644B\u644C\u644D\u644E\u644F\u6450\u6451\u6453\u6455\u6456\u6457\u6459\u645A\u645B\u645C\u645D\u645F\u6460\u6461\u6462\u6463\u6464\u6465\u6466\u6468\u646A\u646B\u646C\u646E\u646F\u6470\u6471\u6472\u6473\u6474\u6475\u6476\u6477\u647B\u647C\u647D\u647E\u647F\u6480\u6481\u6483\u6486\u6488\u6489\u648A\u648B\u648C\u648D\u648E\u648F\u6490\u6493\u6494\u6497\u6498\u649A\u649B\u649C\u649D\u649F\u64A0\u64A1\u64A2\u64A3\u64A5\u64A6\u64A7\u64A8\u64AA\u64AB\u64AF\u64B1\u64B2\u64B3\u64B4\u64B6\u64B9\u64BB\u64BD\u64BE\u64BF\u64C1\u64C3\u64C4\u64C6\u64C7\u64C8\u64C9\u64CA\u64CB\u64CC\u64CF\u64D1\u64D3\u64D4\u64D5\u64D6\u64D9\u64DA\uFFFD".split("");
      for (j = 0; j != D[147].length; ++j) if (D[147][j].charCodeAt(0) !== 65533) {
        e[D[147][j]] = 37632 + j;
        d[37632 + j] = D[147][j];
      }
      D[148] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u64DB\u64DC\u64DD\u64DF\u64E0\u64E1\u64E3\u64E5\u64E7\u64E8\u64E9\u64EA\u64EB\u64EC\u64ED\u64EE\u64EF\u64F0\u64F1\u64F2\u64F3\u64F4\u64F5\u64F6\u64F7\u64F8\u64F9\u64FA\u64FB\u64FC\u64FD\u64FE\u64FF\u6501\u6502\u6503\u6504\u6505\u6506\u6507\u6508\u650A\u650B\u650C\u650D\u650E\u650F\u6510\u6511\u6513\u6514\u6515\u6516\u6517\u6519\u651A\u651B\u651C\u651D\u651E\u651F\u6520\u6521\uFFFD\u6522\u6523\u6524\u6526\u6527\u6528\u6529\u652A\u652C\u652D\u6530\u6531\u6532\u6533\u6537\u653A\u653C\u653D\u6540\u6541\u6542\u6543\u6544\u6546\u6547\u654A\u654B\u654D\u654E\u6550\u6552\u6553\u6554\u6557\u6558\u655A\u655C\u655F\u6560\u6561\u6564\u6565\u6567\u6568\u6569\u656A\u656D\u656E\u656F\u6571\u6573\u6575\u6576\u6578\u6579\u657A\u657B\u657C\u657D\u657E\u657F\u6580\u6581\u6582\u6583\u6584\u6585\u6586\u6588\u6589\u658A\u658D\u658E\u658F\u6592\u6594\u6595\u6596\u6598\u659A\u659D\u659E\u65A0\u65A2\u65A3\u65A6\u65A8\u65AA\u65AC\u65AE\u65B1\u65B2\u65B3\u65B4\u65B5\u65B6\u65B7\u65B8\u65BA\u65BB\u65BE\u65BF\u65C0\u65C2\u65C7\u65C8\u65C9\u65CA\u65CD\u65D0\u65D1\u65D3\u65D4\u65D5\u65D8\u65D9\u65DA\u65DB\u65DC\u65DD\u65DE\u65DF\u65E1\u65E3\u65E4\u65EA\u65EB\uFFFD".split("");
      for (j = 0; j != D[148].length; ++j) if (D[148][j].charCodeAt(0) !== 65533) {
        e[D[148][j]] = 37888 + j;
        d[37888 + j] = D[148][j];
      }
      D[149] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u65F2\u65F3\u65F4\u65F5\u65F8\u65F9\u65FB\u65FC\u65FD\u65FE\u65FF\u6601\u6604\u6605\u6607\u6608\u6609\u660B\u660D\u6610\u6611\u6612\u6616\u6617\u6618\u661A\u661B\u661C\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6632\u6633\u6637\u6638\u6639\u663A\u663B\u663D\u663F\u6640\u6642\u6644\u6645\u6646\u6647\u6648\u6649\u664A\u664D\u664E\u6650\u6651\u6658\uFFFD\u6659\u665B\u665C\u665D\u665E\u6660\u6662\u6663\u6665\u6667\u6669\u666A\u666B\u666C\u666D\u6671\u6672\u6673\u6675\u6678\u6679\u667B\u667C\u667D\u667F\u6680\u6681\u6683\u6685\u6686\u6688\u6689\u668A\u668B\u668D\u668E\u668F\u6690\u6692\u6693\u6694\u6695\u6698\u6699\u669A\u669B\u669C\u669E\u669F\u66A0\u66A1\u66A2\u66A3\u66A4\u66A5\u66A6\u66A9\u66AA\u66AB\u66AC\u66AD\u66AF\u66B0\u66B1\u66B2\u66B3\u66B5\u66B6\u66B7\u66B8\u66BA\u66BB\u66BC\u66BD\u66BF\u66C0\u66C1\u66C2\u66C3\u66C4\u66C5\u66C6\u66C7\u66C8\u66C9\u66CA\u66CB\u66CC\u66CD\u66CE\u66CF\u66D0\u66D1\u66D2\u66D3\u66D4\u66D5\u66D6\u66D7\u66D8\u66DA\u66DE\u66DF\u66E0\u66E1\u66E2\u66E3\u66E4\u66E5\u66E7\u66E8\u66EA\u66EB\u66EC\u66ED\u66EE\u66EF\u66F1\u66F5\u66F6\u66F8\u66FA\u66FB\u66FD\u6701\u6702\u6703\uFFFD".split("");
      for (j = 0; j != D[149].length; ++j) if (D[149][j].charCodeAt(0) !== 65533) {
        e[D[149][j]] = 38144 + j;
        d[38144 + j] = D[149][j];
      }
      D[150] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6704\u6705\u6706\u6707\u670C\u670E\u670F\u6711\u6712\u6713\u6716\u6718\u6719\u671A\u671C\u671E\u6720\u6721\u6722\u6723\u6724\u6725\u6727\u6729\u672E\u6730\u6732\u6733\u6736\u6737\u6738\u6739\u673B\u673C\u673E\u673F\u6741\u6744\u6745\u6747\u674A\u674B\u674D\u6752\u6754\u6755\u6757\u6758\u6759\u675A\u675B\u675D\u6762\u6763\u6764\u6766\u6767\u676B\u676C\u676E\u6771\u6774\u6776\uFFFD\u6778\u6779\u677A\u677B\u677D\u6780\u6782\u6783\u6785\u6786\u6788\u678A\u678C\u678D\u678E\u678F\u6791\u6792\u6793\u6794\u6796\u6799\u679B\u679F\u67A0\u67A1\u67A4\u67A6\u67A9\u67AC\u67AE\u67B1\u67B2\u67B4\u67B9\u67BA\u67BB\u67BC\u67BD\u67BE\u67BF\u67C0\u67C2\u67C5\u67C6\u67C7\u67C8\u67C9\u67CA\u67CB\u67CC\u67CD\u67CE\u67D5\u67D6\u67D7\u67DB\u67DF\u67E1\u67E3\u67E4\u67E6\u67E7\u67E8\u67EA\u67EB\u67ED\u67EE\u67F2\u67F5\u67F6\u67F7\u67F8\u67F9\u67FA\u67FB\u67FC\u67FE\u6801\u6802\u6803\u6804\u6806\u680D\u6810\u6812\u6814\u6815\u6818\u6819\u681A\u681B\u681C\u681E\u681F\u6820\u6822\u6823\u6824\u6825\u6826\u6827\u6828\u682B\u682C\u682D\u682E\u682F\u6830\u6831\u6834\u6835\u6836\u683A\u683B\u683F\u6847\u684B\u684D\u684F\u6852\u6856\u6857\u6858\u6859\u685A\u685B\uFFFD".split("");
      for (j = 0; j != D[150].length; ++j) if (D[150][j].charCodeAt(0) !== 65533) {
        e[D[150][j]] = 38400 + j;
        d[38400 + j] = D[150][j];
      }
      D[151] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u685C\u685D\u685E\u685F\u686A\u686C\u686D\u686E\u686F\u6870\u6871\u6872\u6873\u6875\u6878\u6879\u687A\u687B\u687C\u687D\u687E\u687F\u6880\u6882\u6884\u6887\u6888\u6889\u688A\u688B\u688C\u688D\u688E\u6890\u6891\u6892\u6894\u6895\u6896\u6898\u6899\u689A\u689B\u689C\u689D\u689E\u689F\u68A0\u68A1\u68A3\u68A4\u68A5\u68A9\u68AA\u68AB\u68AC\u68AE\u68B1\u68B2\u68B4\u68B6\u68B7\u68B8\uFFFD\u68B9\u68BA\u68BB\u68BC\u68BD\u68BE\u68BF\u68C1\u68C3\u68C4\u68C5\u68C6\u68C7\u68C8\u68CA\u68CC\u68CE\u68CF\u68D0\u68D1\u68D3\u68D4\u68D6\u68D7\u68D9\u68DB\u68DC\u68DD\u68DE\u68DF\u68E1\u68E2\u68E4\u68E5\u68E6\u68E7\u68E8\u68E9\u68EA\u68EB\u68EC\u68ED\u68EF\u68F2\u68F3\u68F4\u68F6\u68F7\u68F8\u68FB\u68FD\u68FE\u68FF\u6900\u6902\u6903\u6904\u6906\u6907\u6908\u6909\u690A\u690C\u690F\u6911\u6913\u6914\u6915\u6916\u6917\u6918\u6919\u691A\u691B\u691C\u691D\u691E\u6921\u6922\u6923\u6925\u6926\u6927\u6928\u6929\u692A\u692B\u692C\u692E\u692F\u6931\u6932\u6933\u6935\u6936\u6937\u6938\u693A\u693B\u693C\u693E\u6940\u6941\u6943\u6944\u6945\u6946\u6947\u6948\u6949\u694A\u694B\u694C\u694D\u694E\u694F\u6950\u6951\u6952\u6953\u6955\u6956\u6958\u6959\u695B\u695C\u695F\uFFFD".split("");
      for (j = 0; j != D[151].length; ++j) if (D[151][j].charCodeAt(0) !== 65533) {
        e[D[151][j]] = 38656 + j;
        d[38656 + j] = D[151][j];
      }
      D[152] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6961\u6962\u6964\u6965\u6967\u6968\u6969\u696A\u696C\u696D\u696F\u6970\u6972\u6973\u6974\u6975\u6976\u697A\u697B\u697D\u697E\u697F\u6981\u6983\u6985\u698A\u698B\u698C\u698E\u698F\u6990\u6991\u6992\u6993\u6996\u6997\u6999\u699A\u699D\u699E\u699F\u69A0\u69A1\u69A2\u69A3\u69A4\u69A5\u69A6\u69A9\u69AA\u69AC\u69AE\u69AF\u69B0\u69B2\u69B3\u69B5\u69B6\u69B8\u69B9\u69BA\u69BC\u69BD\uFFFD\u69BE\u69BF\u69C0\u69C2\u69C3\u69C4\u69C5\u69C6\u69C7\u69C8\u69C9\u69CB\u69CD\u69CF\u69D1\u69D2\u69D3\u69D5\u69D6\u69D7\u69D8\u69D9\u69DA\u69DC\u69DD\u69DE\u69E1\u69E2\u69E3\u69E4\u69E5\u69E6\u69E7\u69E8\u69E9\u69EA\u69EB\u69EC\u69EE\u69EF\u69F0\u69F1\u69F3\u69F4\u69F5\u69F6\u69F7\u69F8\u69F9\u69FA\u69FB\u69FC\u69FE\u6A00\u6A01\u6A02\u6A03\u6A04\u6A05\u6A06\u6A07\u6A08\u6A09\u6A0B\u6A0C\u6A0D\u6A0E\u6A0F\u6A10\u6A11\u6A12\u6A13\u6A14\u6A15\u6A16\u6A19\u6A1A\u6A1B\u6A1C\u6A1D\u6A1E\u6A20\u6A22\u6A23\u6A24\u6A25\u6A26\u6A27\u6A29\u6A2B\u6A2C\u6A2D\u6A2E\u6A30\u6A32\u6A33\u6A34\u6A36\u6A37\u6A38\u6A39\u6A3A\u6A3B\u6A3C\u6A3F\u6A40\u6A41\u6A42\u6A43\u6A45\u6A46\u6A48\u6A49\u6A4A\u6A4B\u6A4C\u6A4D\u6A4E\u6A4F\u6A51\u6A52\u6A53\u6A54\u6A55\u6A56\u6A57\u6A5A\uFFFD".split("");
      for (j = 0; j != D[152].length; ++j) if (D[152][j].charCodeAt(0) !== 65533) {
        e[D[152][j]] = 38912 + j;
        d[38912 + j] = D[152][j];
      }
      D[153] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6A5C\u6A5D\u6A5E\u6A5F\u6A60\u6A62\u6A63\u6A64\u6A66\u6A67\u6A68\u6A69\u6A6A\u6A6B\u6A6C\u6A6D\u6A6E\u6A6F\u6A70\u6A72\u6A73\u6A74\u6A75\u6A76\u6A77\u6A78\u6A7A\u6A7B\u6A7D\u6A7E\u6A7F\u6A81\u6A82\u6A83\u6A85\u6A86\u6A87\u6A88\u6A89\u6A8A\u6A8B\u6A8C\u6A8D\u6A8F\u6A92\u6A93\u6A94\u6A95\u6A96\u6A98\u6A99\u6A9A\u6A9B\u6A9C\u6A9D\u6A9E\u6A9F\u6AA1\u6AA2\u6AA3\u6AA4\u6AA5\u6AA6\uFFFD\u6AA7\u6AA8\u6AAA\u6AAD\u6AAE\u6AAF\u6AB0\u6AB1\u6AB2\u6AB3\u6AB4\u6AB5\u6AB6\u6AB7\u6AB8\u6AB9\u6ABA\u6ABB\u6ABC\u6ABD\u6ABE\u6ABF\u6AC0\u6AC1\u6AC2\u6AC3\u6AC4\u6AC5\u6AC6\u6AC7\u6AC8\u6AC9\u6ACA\u6ACB\u6ACC\u6ACD\u6ACE\u6ACF\u6AD0\u6AD1\u6AD2\u6AD3\u6AD4\u6AD5\u6AD6\u6AD7\u6AD8\u6AD9\u6ADA\u6ADB\u6ADC\u6ADD\u6ADE\u6ADF\u6AE0\u6AE1\u6AE2\u6AE3\u6AE4\u6AE5\u6AE6\u6AE7\u6AE8\u6AE9\u6AEA\u6AEB\u6AEC\u6AED\u6AEE\u6AEF\u6AF0\u6AF1\u6AF2\u6AF3\u6AF4\u6AF5\u6AF6\u6AF7\u6AF8\u6AF9\u6AFA\u6AFB\u6AFC\u6AFD\u6AFE\u6AFF\u6B00\u6B01\u6B02\u6B03\u6B04\u6B05\u6B06\u6B07\u6B08\u6B09\u6B0A\u6B0B\u6B0C\u6B0D\u6B0E\u6B0F\u6B10\u6B11\u6B12\u6B13\u6B14\u6B15\u6B16\u6B17\u6B18\u6B19\u6B1A\u6B1B\u6B1C\u6B1D\u6B1E\u6B1F\u6B25\u6B26\u6B28\u6B29\u6B2A\u6B2B\u6B2C\u6B2D\u6B2E\uFFFD".split("");
      for (j = 0; j != D[153].length; ++j) if (D[153][j].charCodeAt(0) !== 65533) {
        e[D[153][j]] = 39168 + j;
        d[39168 + j] = D[153][j];
      }
      D[154] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6B2F\u6B30\u6B31\u6B33\u6B34\u6B35\u6B36\u6B38\u6B3B\u6B3C\u6B3D\u6B3F\u6B40\u6B41\u6B42\u6B44\u6B45\u6B48\u6B4A\u6B4B\u6B4D\u6B4E\u6B4F\u6B50\u6B51\u6B52\u6B53\u6B54\u6B55\u6B56\u6B57\u6B58\u6B5A\u6B5B\u6B5C\u6B5D\u6B5E\u6B5F\u6B60\u6B61\u6B68\u6B69\u6B6B\u6B6C\u6B6D\u6B6E\u6B6F\u6B70\u6B71\u6B72\u6B73\u6B74\u6B75\u6B76\u6B77\u6B78\u6B7A\u6B7D\u6B7E\u6B7F\u6B80\u6B85\u6B88\uFFFD\u6B8C\u6B8E\u6B8F\u6B90\u6B91\u6B94\u6B95\u6B97\u6B98\u6B99\u6B9C\u6B9D\u6B9E\u6B9F\u6BA0\u6BA2\u6BA3\u6BA4\u6BA5\u6BA6\u6BA7\u6BA8\u6BA9\u6BAB\u6BAC\u6BAD\u6BAE\u6BAF\u6BB0\u6BB1\u6BB2\u6BB6\u6BB8\u6BB9\u6BBA\u6BBB\u6BBC\u6BBD\u6BBE\u6BC0\u6BC3\u6BC4\u6BC6\u6BC7\u6BC8\u6BC9\u6BCA\u6BCC\u6BCE\u6BD0\u6BD1\u6BD8\u6BDA\u6BDC\u6BDD\u6BDE\u6BDF\u6BE0\u6BE2\u6BE3\u6BE4\u6BE5\u6BE6\u6BE7\u6BE8\u6BE9\u6BEC\u6BED\u6BEE\u6BF0\u6BF1\u6BF2\u6BF4\u6BF6\u6BF7\u6BF8\u6BFA\u6BFB\u6BFC\u6BFE\u6BFF\u6C00\u6C01\u6C02\u6C03\u6C04\u6C08\u6C09\u6C0A\u6C0B\u6C0C\u6C0E\u6C12\u6C17\u6C1C\u6C1D\u6C1E\u6C20\u6C23\u6C25\u6C2B\u6C2C\u6C2D\u6C31\u6C33\u6C36\u6C37\u6C39\u6C3A\u6C3B\u6C3C\u6C3E\u6C3F\u6C43\u6C44\u6C45\u6C48\u6C4B\u6C4C\u6C4D\u6C4E\u6C4F\u6C51\u6C52\u6C53\u6C56\u6C58\uFFFD".split("");
      for (j = 0; j != D[154].length; ++j) if (D[154][j].charCodeAt(0) !== 65533) {
        e[D[154][j]] = 39424 + j;
        d[39424 + j] = D[154][j];
      }
      D[155] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6C59\u6C5A\u6C62\u6C63\u6C65\u6C66\u6C67\u6C6B\u6C6C\u6C6D\u6C6E\u6C6F\u6C71\u6C73\u6C75\u6C77\u6C78\u6C7A\u6C7B\u6C7C\u6C7F\u6C80\u6C84\u6C87\u6C8A\u6C8B\u6C8D\u6C8E\u6C91\u6C92\u6C95\u6C96\u6C97\u6C98\u6C9A\u6C9C\u6C9D\u6C9E\u6CA0\u6CA2\u6CA8\u6CAC\u6CAF\u6CB0\u6CB4\u6CB5\u6CB6\u6CB7\u6CBA\u6CC0\u6CC1\u6CC2\u6CC3\u6CC6\u6CC7\u6CC8\u6CCB\u6CCD\u6CCE\u6CCF\u6CD1\u6CD2\u6CD8\uFFFD\u6CD9\u6CDA\u6CDC\u6CDD\u6CDF\u6CE4\u6CE6\u6CE7\u6CE9\u6CEC\u6CED\u6CF2\u6CF4\u6CF9\u6CFF\u6D00\u6D02\u6D03\u6D05\u6D06\u6D08\u6D09\u6D0A\u6D0D\u6D0F\u6D10\u6D11\u6D13\u6D14\u6D15\u6D16\u6D18\u6D1C\u6D1D\u6D1F\u6D20\u6D21\u6D22\u6D23\u6D24\u6D26\u6D28\u6D29\u6D2C\u6D2D\u6D2F\u6D30\u6D34\u6D36\u6D37\u6D38\u6D3A\u6D3F\u6D40\u6D42\u6D44\u6D49\u6D4C\u6D50\u6D55\u6D56\u6D57\u6D58\u6D5B\u6D5D\u6D5F\u6D61\u6D62\u6D64\u6D65\u6D67\u6D68\u6D6B\u6D6C\u6D6D\u6D70\u6D71\u6D72\u6D73\u6D75\u6D76\u6D79\u6D7A\u6D7B\u6D7D\u6D7E\u6D7F\u6D80\u6D81\u6D83\u6D84\u6D86\u6D87\u6D8A\u6D8B\u6D8D\u6D8F\u6D90\u6D92\u6D96\u6D97\u6D98\u6D99\u6D9A\u6D9C\u6DA2\u6DA5\u6DAC\u6DAD\u6DB0\u6DB1\u6DB3\u6DB4\u6DB6\u6DB7\u6DB9\u6DBA\u6DBB\u6DBC\u6DBD\u6DBE\u6DC1\u6DC2\u6DC3\u6DC8\u6DC9\u6DCA\uFFFD".split("");
      for (j = 0; j != D[155].length; ++j) if (D[155][j].charCodeAt(0) !== 65533) {
        e[D[155][j]] = 39680 + j;
        d[39680 + j] = D[155][j];
      }
      D[156] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6DCD\u6DCE\u6DCF\u6DD0\u6DD2\u6DD3\u6DD4\u6DD5\u6DD7\u6DDA\u6DDB\u6DDC\u6DDF\u6DE2\u6DE3\u6DE5\u6DE7\u6DE8\u6DE9\u6DEA\u6DED\u6DEF\u6DF0\u6DF2\u6DF4\u6DF5\u6DF6\u6DF8\u6DFA\u6DFD\u6DFE\u6DFF\u6E00\u6E01\u6E02\u6E03\u6E04\u6E06\u6E07\u6E08\u6E09\u6E0B\u6E0F\u6E12\u6E13\u6E15\u6E18\u6E19\u6E1B\u6E1C\u6E1E\u6E1F\u6E22\u6E26\u6E27\u6E28\u6E2A\u6E2C\u6E2E\u6E30\u6E31\u6E33\u6E35\uFFFD\u6E36\u6E37\u6E39\u6E3B\u6E3C\u6E3D\u6E3E\u6E3F\u6E40\u6E41\u6E42\u6E45\u6E46\u6E47\u6E48\u6E49\u6E4A\u6E4B\u6E4C\u6E4F\u6E50\u6E51\u6E52\u6E55\u6E57\u6E59\u6E5A\u6E5C\u6E5D\u6E5E\u6E60\u6E61\u6E62\u6E63\u6E64\u6E65\u6E66\u6E67\u6E68\u6E69\u6E6A\u6E6C\u6E6D\u6E6F\u6E70\u6E71\u6E72\u6E73\u6E74\u6E75\u6E76\u6E77\u6E78\u6E79\u6E7A\u6E7B\u6E7C\u6E7D\u6E80\u6E81\u6E82\u6E84\u6E87\u6E88\u6E8A\u6E8B\u6E8C\u6E8D\u6E8E\u6E91\u6E92\u6E93\u6E94\u6E95\u6E96\u6E97\u6E99\u6E9A\u6E9B\u6E9D\u6E9E\u6EA0\u6EA1\u6EA3\u6EA4\u6EA6\u6EA8\u6EA9\u6EAB\u6EAC\u6EAD\u6EAE\u6EB0\u6EB3\u6EB5\u6EB8\u6EB9\u6EBC\u6EBE\u6EBF\u6EC0\u6EC3\u6EC4\u6EC5\u6EC6\u6EC8\u6EC9\u6ECA\u6ECC\u6ECD\u6ECE\u6ED0\u6ED2\u6ED6\u6ED8\u6ED9\u6EDB\u6EDC\u6EDD\u6EE3\u6EE7\u6EEA\u6EEB\u6EEC\u6EED\u6EEE\u6EEF\uFFFD".split("");
      for (j = 0; j != D[156].length; ++j) if (D[156][j].charCodeAt(0) !== 65533) {
        e[D[156][j]] = 39936 + j;
        d[39936 + j] = D[156][j];
      }
      D[157] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6EF0\u6EF1\u6EF2\u6EF3\u6EF5\u6EF6\u6EF7\u6EF8\u6EFA\u6EFB\u6EFC\u6EFD\u6EFE\u6EFF\u6F00\u6F01\u6F03\u6F04\u6F05\u6F07\u6F08\u6F0A\u6F0B\u6F0C\u6F0D\u6F0E\u6F10\u6F11\u6F12\u6F16\u6F17\u6F18\u6F19\u6F1A\u6F1B\u6F1C\u6F1D\u6F1E\u6F1F\u6F21\u6F22\u6F23\u6F25\u6F26\u6F27\u6F28\u6F2C\u6F2E\u6F30\u6F32\u6F34\u6F35\u6F37\u6F38\u6F39\u6F3A\u6F3B\u6F3C\u6F3D\u6F3F\u6F40\u6F41\u6F42\uFFFD\u6F43\u6F44\u6F45\u6F48\u6F49\u6F4A\u6F4C\u6F4E\u6F4F\u6F50\u6F51\u6F52\u6F53\u6F54\u6F55\u6F56\u6F57\u6F59\u6F5A\u6F5B\u6F5D\u6F5F\u6F60\u6F61\u6F63\u6F64\u6F65\u6F67\u6F68\u6F69\u6F6A\u6F6B\u6F6C\u6F6F\u6F70\u6F71\u6F73\u6F75\u6F76\u6F77\u6F79\u6F7B\u6F7D\u6F7E\u6F7F\u6F80\u6F81\u6F82\u6F83\u6F85\u6F86\u6F87\u6F8A\u6F8B\u6F8F\u6F90\u6F91\u6F92\u6F93\u6F94\u6F95\u6F96\u6F97\u6F98\u6F99\u6F9A\u6F9B\u6F9D\u6F9E\u6F9F\u6FA0\u6FA2\u6FA3\u6FA4\u6FA5\u6FA6\u6FA8\u6FA9\u6FAA\u6FAB\u6FAC\u6FAD\u6FAE\u6FAF\u6FB0\u6FB1\u6FB2\u6FB4\u6FB5\u6FB7\u6FB8\u6FBA\u6FBB\u6FBC\u6FBD\u6FBE\u6FBF\u6FC1\u6FC3\u6FC4\u6FC5\u6FC6\u6FC7\u6FC8\u6FCA\u6FCB\u6FCC\u6FCD\u6FCE\u6FCF\u6FD0\u6FD3\u6FD4\u6FD5\u6FD6\u6FD7\u6FD8\u6FD9\u6FDA\u6FDB\u6FDC\u6FDD\u6FDF\u6FE2\u6FE3\u6FE4\u6FE5\uFFFD".split("");
      for (j = 0; j != D[157].length; ++j) if (D[157][j].charCodeAt(0) !== 65533) {
        e[D[157][j]] = 40192 + j;
        d[40192 + j] = D[157][j];
      }
      D[158] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6FE6\u6FE7\u6FE8\u6FE9\u6FEA\u6FEB\u6FEC\u6FED\u6FF0\u6FF1\u6FF2\u6FF3\u6FF4\u6FF5\u6FF6\u6FF7\u6FF8\u6FF9\u6FFA\u6FFB\u6FFC\u6FFD\u6FFE\u6FFF\u7000\u7001\u7002\u7003\u7004\u7005\u7006\u7007\u7008\u7009\u700A\u700B\u700C\u700D\u700E\u700F\u7010\u7012\u7013\u7014\u7015\u7016\u7017\u7018\u7019\u701C\u701D\u701E\u701F\u7020\u7021\u7022\u7024\u7025\u7026\u7027\u7028\u7029\u702A\uFFFD\u702B\u702C\u702D\u702E\u702F\u7030\u7031\u7032\u7033\u7034\u7036\u7037\u7038\u703A\u703B\u703C\u703D\u703E\u703F\u7040\u7041\u7042\u7043\u7044\u7045\u7046\u7047\u7048\u7049\u704A\u704B\u704D\u704E\u7050\u7051\u7052\u7053\u7054\u7055\u7056\u7057\u7058\u7059\u705A\u705B\u705C\u705D\u705F\u7060\u7061\u7062\u7063\u7064\u7065\u7066\u7067\u7068\u7069\u706A\u706E\u7071\u7072\u7073\u7074\u7077\u7079\u707A\u707B\u707D\u7081\u7082\u7083\u7084\u7086\u7087\u7088\u708B\u708C\u708D\u708F\u7090\u7091\u7093\u7097\u7098\u709A\u709B\u709E\u709F\u70A0\u70A1\u70A2\u70A3\u70A4\u70A5\u70A6\u70A7\u70A8\u70A9\u70AA\u70B0\u70B2\u70B4\u70B5\u70B6\u70BA\u70BE\u70BF\u70C4\u70C5\u70C6\u70C7\u70C9\u70CB\u70CC\u70CD\u70CE\u70CF\u70D0\u70D1\u70D2\u70D3\u70D4\u70D5\u70D6\u70D7\u70DA\uFFFD".split("");
      for (j = 0; j != D[158].length; ++j) if (D[158][j].charCodeAt(0) !== 65533) {
        e[D[158][j]] = 40448 + j;
        d[40448 + j] = D[158][j];
      }
      D[159] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u70DC\u70DD\u70DE\u70E0\u70E1\u70E2\u70E3\u70E5\u70EA\u70EE\u70F0\u70F1\u70F2\u70F3\u70F4\u70F5\u70F6\u70F8\u70FA\u70FB\u70FC\u70FE\u70FF\u7100\u7101\u7102\u7103\u7104\u7105\u7106\u7107\u7108\u710B\u710C\u710D\u710E\u710F\u7111\u7112\u7114\u7117\u711B\u711C\u711D\u711E\u711F\u7120\u7121\u7122\u7123\u7124\u7125\u7127\u7128\u7129\u712A\u712B\u712C\u712D\u712E\u7132\u7133\u7134\uFFFD\u7135\u7137\u7138\u7139\u713A\u713B\u713C\u713D\u713E\u713F\u7140\u7141\u7142\u7143\u7144\u7146\u7147\u7148\u7149\u714B\u714D\u714F\u7150\u7151\u7152\u7153\u7154\u7155\u7156\u7157\u7158\u7159\u715A\u715B\u715D\u715F\u7160\u7161\u7162\u7163\u7165\u7169\u716A\u716B\u716C\u716D\u716F\u7170\u7171\u7174\u7175\u7176\u7177\u7179\u717B\u717C\u717E\u717F\u7180\u7181\u7182\u7183\u7185\u7186\u7187\u7188\u7189\u718B\u718C\u718D\u718E\u7190\u7191\u7192\u7193\u7195\u7196\u7197\u719A\u719B\u719C\u719D\u719E\u71A1\u71A2\u71A3\u71A4\u71A5\u71A6\u71A7\u71A9\u71AA\u71AB\u71AD\u71AE\u71AF\u71B0\u71B1\u71B2\u71B4\u71B6\u71B7\u71B8\u71BA\u71BB\u71BC\u71BD\u71BE\u71BF\u71C0\u71C1\u71C2\u71C4\u71C5\u71C6\u71C7\u71C8\u71C9\u71CA\u71CB\u71CC\u71CD\u71CF\u71D0\u71D1\u71D2\u71D3\uFFFD".split("");
      for (j = 0; j != D[159].length; ++j) if (D[159][j].charCodeAt(0) !== 65533) {
        e[D[159][j]] = 40704 + j;
        d[40704 + j] = D[159][j];
      }
      D[160] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u71D6\u71D7\u71D8\u71D9\u71DA\u71DB\u71DC\u71DD\u71DE\u71DF\u71E1\u71E2\u71E3\u71E4\u71E6\u71E8\u71E9\u71EA\u71EB\u71EC\u71ED\u71EF\u71F0\u71F1\u71F2\u71F3\u71F4\u71F5\u71F6\u71F7\u71F8\u71FA\u71FB\u71FC\u71FD\u71FE\u71FF\u7200\u7201\u7202\u7203\u7204\u7205\u7207\u7208\u7209\u720A\u720B\u720C\u720D\u720E\u720F\u7210\u7211\u7212\u7213\u7214\u7215\u7216\u7217\u7218\u7219\u721A\uFFFD\u721B\u721C\u721E\u721F\u7220\u7221\u7222\u7223\u7224\u7225\u7226\u7227\u7229\u722B\u722D\u722E\u722F\u7232\u7233\u7234\u723A\u723C\u723E\u7240\u7241\u7242\u7243\u7244\u7245\u7246\u7249\u724A\u724B\u724E\u724F\u7250\u7251\u7253\u7254\u7255\u7257\u7258\u725A\u725C\u725E\u7260\u7263\u7264\u7265\u7268\u726A\u726B\u726C\u726D\u7270\u7271\u7273\u7274\u7276\u7277\u7278\u727B\u727C\u727D\u7282\u7283\u7285\u7286\u7287\u7288\u7289\u728C\u728E\u7290\u7291\u7293\u7294\u7295\u7296\u7297\u7298\u7299\u729A\u729B\u729C\u729D\u729E\u72A0\u72A1\u72A2\u72A3\u72A4\u72A5\u72A6\u72A7\u72A8\u72A9\u72AA\u72AB\u72AE\u72B1\u72B2\u72B3\u72B5\u72BA\u72BB\u72BC\u72BD\u72BE\u72BF\u72C0\u72C5\u72C6\u72C7\u72C9\u72CA\u72CB\u72CC\u72CF\u72D1\u72D3\u72D4\u72D5\u72D6\u72D8\u72DA\u72DB\uFFFD".split("");
      for (j = 0; j != D[160].length; ++j) if (D[160][j].charCodeAt(0) !== 65533) {
        e[D[160][j]] = 40960 + j;
        d[40960 + j] = D[160][j];
      }
      D[161] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u3000\u3001\u3002\xB7\u02C9\u02C7\xA8\u3003\u3005\u2014\uFF5E\u2016\u2026\u2018\u2019\u201C\u201D\u3014\u3015\u3008\u3009\u300A\u300B\u300C\u300D\u300E\u300F\u3016\u3017\u3010\u3011\xB1\xD7\xF7\u2236\u2227\u2228\u2211\u220F\u222A\u2229\u2208\u2237\u221A\u22A5\u2225\u2220\u2312\u2299\u222B\u222E\u2261\u224C\u2248\u223D\u221D\u2260\u226E\u226F\u2264\u2265\u221E\u2235\u2234\u2642\u2640\xB0\u2032\u2033\u2103\uFF04\xA4\uFFE0\uFFE1\u2030\xA7\u2116\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u203B\u2192\u2190\u2191\u2193\u3013\uFFFD".split("");
      for (j = 0; j != D[161].length; ++j) if (D[161][j].charCodeAt(0) !== 65533) {
        e[D[161][j]] = 41216 + j;
        d[41216 + j] = D[161][j];
      }
      D[162] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2170\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178\u2179\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2488\u2489\u248A\u248B\u248C\u248D\u248E\u248F\u2490\u2491\u2492\u2493\u2494\u2495\u2496\u2497\u2498\u2499\u249A\u249B\u2474\u2475\u2476\u2477\u2478\u2479\u247A\u247B\u247C\u247D\u247E\u247F\u2480\u2481\u2482\u2483\u2484\u2485\u2486\u2487\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467\u2468\u2469\uFFFD\uFFFD\u3220\u3221\u3222\u3223\u3224\u3225\u3226\u3227\u3228\u3229\uFFFD\uFFFD\u2160\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168\u2169\u216A\u216B\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[162].length; ++j) if (D[162][j].charCodeAt(0) !== 65533) {
        e[D[162][j]] = 41472 + j;
        d[41472 + j] = D[162][j];
      }
      D[163] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFF01\uFF02\uFF03\uFFE5\uFF05\uFF06\uFF07\uFF08\uFF09\uFF0A\uFF0B\uFF0C\uFF0D\uFF0E\uFF0F\uFF10\uFF11\uFF12\uFF13\uFF14\uFF15\uFF16\uFF17\uFF18\uFF19\uFF1A\uFF1B\uFF1C\uFF1D\uFF1E\uFF1F\uFF20\uFF21\uFF22\uFF23\uFF24\uFF25\uFF26\uFF27\uFF28\uFF29\uFF2A\uFF2B\uFF2C\uFF2D\uFF2E\uFF2F\uFF30\uFF31\uFF32\uFF33\uFF34\uFF35\uFF36\uFF37\uFF38\uFF39\uFF3A\uFF3B\uFF3C\uFF3D\uFF3E\uFF3F\uFF40\uFF41\uFF42\uFF43\uFF44\uFF45\uFF46\uFF47\uFF48\uFF49\uFF4A\uFF4B\uFF4C\uFF4D\uFF4E\uFF4F\uFF50\uFF51\uFF52\uFF53\uFF54\uFF55\uFF56\uFF57\uFF58\uFF59\uFF5A\uFF5B\uFF5C\uFF5D\uFFE3\uFFFD".split("");
      for (j = 0; j != D[163].length; ++j) if (D[163][j].charCodeAt(0) !== 65533) {
        e[D[163][j]] = 41728 + j;
        d[41728 + j] = D[163][j];
      }
      D[164] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048\u3049\u304A\u304B\u304C\u304D\u304E\u304F\u3050\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058\u3059\u305A\u305B\u305C\u305D\u305E\u305F\u3060\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069\u306A\u306B\u306C\u306D\u306E\u306F\u3070\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078\u3079\u307A\u307B\u307C\u307D\u307E\u307F\u3080\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088\u3089\u308A\u308B\u308C\u308D\u308E\u308F\u3090\u3091\u3092\u3093\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[164].length; ++j) if (D[164][j].charCodeAt(0) !== 65533) {
        e[D[164][j]] = 41984 + j;
        d[41984 + j] = D[164][j];
      }
      D[165] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u30A1\u30A2\u30A3\u30A4\u30A5\u30A6\u30A7\u30A8\u30A9\u30AA\u30AB\u30AC\u30AD\u30AE\u30AF\u30B0\u30B1\u30B2\u30B3\u30B4\u30B5\u30B6\u30B7\u30B8\u30B9\u30BA\u30BB\u30BC\u30BD\u30BE\u30BF\u30C0\u30C1\u30C2\u30C3\u30C4\u30C5\u30C6\u30C7\u30C8\u30C9\u30CA\u30CB\u30CC\u30CD\u30CE\u30CF\u30D0\u30D1\u30D2\u30D3\u30D4\u30D5\u30D6\u30D7\u30D8\u30D9\u30DA\u30DB\u30DC\u30DD\u30DE\u30DF\u30E0\u30E1\u30E2\u30E3\u30E4\u30E5\u30E6\u30E7\u30E8\u30E9\u30EA\u30EB\u30EC\u30ED\u30EE\u30EF\u30F0\u30F1\u30F2\u30F3\u30F4\u30F5\u30F6\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[165].length; ++j) if (D[165][j].charCodeAt(0) !== 65533) {
        e[D[165][j]] = 42240 + j;
        d[42240 + j] = D[165][j];
      }
      D[166] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFE35\uFE36\uFE39\uFE3A\uFE3F\uFE40\uFE3D\uFE3E\uFE41\uFE42\uFE43\uFE44\uFFFD\uFFFD\uFE3B\uFE3C\uFE37\uFE38\uFE31\uFFFD\uFE33\uFE34\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[166].length; ++j) if (D[166][j].charCodeAt(0) !== 65533) {
        e[D[166][j]] = 42496 + j;
        d[42496 + j] = D[166][j];
      }
      D[167] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0410\u0411\u0412\u0413\u0414\u0415\u0401\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0430\u0431\u0432\u0433\u0434\u0435\u0451\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[167].length; ++j) if (D[167][j].charCodeAt(0) !== 65533) {
        e[D[167][j]] = 42752 + j;
        d[42752 + j] = D[167][j];
      }
      D[168] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u02CA\u02CB\u02D9\u2013\u2015\u2025\u2035\u2105\u2109\u2196\u2197\u2198\u2199\u2215\u221F\u2223\u2252\u2266\u2267\u22BF\u2550\u2551\u2552\u2553\u2554\u2555\u2556\u2557\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F\u2560\u2561\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569\u256A\u256B\u256C\u256D\u256E\u256F\u2570\u2571\u2572\u2573\u2581\u2582\u2583\u2584\u2585\u2586\u2587\uFFFD\u2588\u2589\u258A\u258B\u258C\u258D\u258E\u258F\u2593\u2594\u2595\u25BC\u25BD\u25E2\u25E3\u25E4\u25E5\u2609\u2295\u3012\u301D\u301E\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0101\xE1\u01CE\xE0\u0113\xE9\u011B\xE8\u012B\xED\u01D0\xEC\u014D\xF3\u01D2\xF2\u016B\xFA\u01D4\xF9\u01D6\u01D8\u01DA\u01DC\xFC\xEA\u0251\uFFFD\u0144\u0148\uFFFD\u0261\uFFFD\uFFFD\uFFFD\uFFFD\u3105\u3106\u3107\u3108\u3109\u310A\u310B\u310C\u310D\u310E\u310F\u3110\u3111\u3112\u3113\u3114\u3115\u3116\u3117\u3118\u3119\u311A\u311B\u311C\u311D\u311E\u311F\u3120\u3121\u3122\u3123\u3124\u3125\u3126\u3127\u3128\u3129\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[168].length; ++j) if (D[168][j].charCodeAt(0) !== 65533) {
        e[D[168][j]] = 43008 + j;
        d[43008 + j] = D[168][j];
      }
      D[169] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u3021\u3022\u3023\u3024\u3025\u3026\u3027\u3028\u3029\u32A3\u338E\u338F\u339C\u339D\u339E\u33A1\u33C4\u33CE\u33D1\u33D2\u33D5\uFE30\uFFE2\uFFE4\uFFFD\u2121\u3231\uFFFD\u2010\uFFFD\uFFFD\uFFFD\u30FC\u309B\u309C\u30FD\u30FE\u3006\u309D\u309E\uFE49\uFE4A\uFE4B\uFE4C\uFE4D\uFE4E\uFE4F\uFE50\uFE51\uFE52\uFE54\uFE55\uFE56\uFE57\uFE59\uFE5A\uFE5B\uFE5C\uFE5D\uFE5E\uFE5F\uFE60\uFE61\uFFFD\uFE62\uFE63\uFE64\uFE65\uFE66\uFE68\uFE69\uFE6A\uFE6B\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u3007\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2500\u2501\u2502\u2503\u2504\u2505\u2506\u2507\u2508\u2509\u250A\u250B\u250C\u250D\u250E\u250F\u2510\u2511\u2512\u2513\u2514\u2515\u2516\u2517\u2518\u2519\u251A\u251B\u251C\u251D\u251E\u251F\u2520\u2521\u2522\u2523\u2524\u2525\u2526\u2527\u2528\u2529\u252A\u252B\u252C\u252D\u252E\u252F\u2530\u2531\u2532\u2533\u2534\u2535\u2536\u2537\u2538\u2539\u253A\u253B\u253C\u253D\u253E\u253F\u2540\u2541\u2542\u2543\u2544\u2545\u2546\u2547\u2548\u2549\u254A\u254B\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[169].length; ++j) if (D[169][j].charCodeAt(0) !== 65533) {
        e[D[169][j]] = 43264 + j;
        d[43264 + j] = D[169][j];
      }
      D[170] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u72DC\u72DD\u72DF\u72E2\u72E3\u72E4\u72E5\u72E6\u72E7\u72EA\u72EB\u72F5\u72F6\u72F9\u72FD\u72FE\u72FF\u7300\u7302\u7304\u7305\u7306\u7307\u7308\u7309\u730B\u730C\u730D\u730F\u7310\u7311\u7312\u7314\u7318\u7319\u731A\u731F\u7320\u7323\u7324\u7326\u7327\u7328\u732D\u732F\u7330\u7332\u7333\u7335\u7336\u733A\u733B\u733C\u733D\u7340\u7341\u7342\u7343\u7344\u7345\u7346\u7347\u7348\uFFFD\u7349\u734A\u734B\u734C\u734E\u734F\u7351\u7353\u7354\u7355\u7356\u7358\u7359\u735A\u735B\u735C\u735D\u735E\u735F\u7361\u7362\u7363\u7364\u7365\u7366\u7367\u7368\u7369\u736A\u736B\u736E\u7370\u7371\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[170].length; ++j) if (D[170][j].charCodeAt(0) !== 65533) {
        e[D[170][j]] = 43520 + j;
        d[43520 + j] = D[170][j];
      }
      D[171] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7372\u7373\u7374\u7375\u7376\u7377\u7378\u7379\u737A\u737B\u737C\u737D\u737F\u7380\u7381\u7382\u7383\u7385\u7386\u7388\u738A\u738C\u738D\u738F\u7390\u7392\u7393\u7394\u7395\u7397\u7398\u7399\u739A\u739C\u739D\u739E\u73A0\u73A1\u73A3\u73A4\u73A5\u73A6\u73A7\u73A8\u73AA\u73AC\u73AD\u73B1\u73B4\u73B5\u73B6\u73B8\u73B9\u73BC\u73BD\u73BE\u73BF\u73C1\u73C3\u73C4\u73C5\u73C6\u73C7\uFFFD\u73CB\u73CC\u73CE\u73D2\u73D3\u73D4\u73D5\u73D6\u73D7\u73D8\u73DA\u73DB\u73DC\u73DD\u73DF\u73E1\u73E2\u73E3\u73E4\u73E6\u73E8\u73EA\u73EB\u73EC\u73EE\u73EF\u73F0\u73F1\u73F3\u73F4\u73F5\u73F6\u73F7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[171].length; ++j) if (D[171][j].charCodeAt(0) !== 65533) {
        e[D[171][j]] = 43776 + j;
        d[43776 + j] = D[171][j];
      }
      D[172] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u73F8\u73F9\u73FA\u73FB\u73FC\u73FD\u73FE\u73FF\u7400\u7401\u7402\u7404\u7407\u7408\u740B\u740C\u740D\u740E\u7411\u7412\u7413\u7414\u7415\u7416\u7417\u7418\u7419\u741C\u741D\u741E\u741F\u7420\u7421\u7423\u7424\u7427\u7429\u742B\u742D\u742F\u7431\u7432\u7437\u7438\u7439\u743A\u743B\u743D\u743E\u743F\u7440\u7442\u7443\u7444\u7445\u7446\u7447\u7448\u7449\u744A\u744B\u744C\u744D\uFFFD\u744E\u744F\u7450\u7451\u7452\u7453\u7454\u7456\u7458\u745D\u7460\u7461\u7462\u7463\u7464\u7465\u7466\u7467\u7468\u7469\u746A\u746B\u746C\u746E\u746F\u7471\u7472\u7473\u7474\u7475\u7478\u7479\u747A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[172].length; ++j) if (D[172][j].charCodeAt(0) !== 65533) {
        e[D[172][j]] = 44032 + j;
        d[44032 + j] = D[172][j];
      }
      D[173] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u747B\u747C\u747D\u747F\u7482\u7484\u7485\u7486\u7488\u7489\u748A\u748C\u748D\u748F\u7491\u7492\u7493\u7494\u7495\u7496\u7497\u7498\u7499\u749A\u749B\u749D\u749F\u74A0\u74A1\u74A2\u74A3\u74A4\u74A5\u74A6\u74AA\u74AB\u74AC\u74AD\u74AE\u74AF\u74B0\u74B1\u74B2\u74B3\u74B4\u74B5\u74B6\u74B7\u74B8\u74B9\u74BB\u74BC\u74BD\u74BE\u74BF\u74C0\u74C1\u74C2\u74C3\u74C4\u74C5\u74C6\u74C7\uFFFD\u74C8\u74C9\u74CA\u74CB\u74CC\u74CD\u74CE\u74CF\u74D0\u74D1\u74D3\u74D4\u74D5\u74D6\u74D7\u74D8\u74D9\u74DA\u74DB\u74DD\u74DF\u74E1\u74E5\u74E7\u74E8\u74E9\u74EA\u74EB\u74EC\u74ED\u74F0\u74F1\u74F2\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[173].length; ++j) if (D[173][j].charCodeAt(0) !== 65533) {
        e[D[173][j]] = 44288 + j;
        d[44288 + j] = D[173][j];
      }
      D[174] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u74F3\u74F5\u74F8\u74F9\u74FA\u74FB\u74FC\u74FD\u74FE\u7500\u7501\u7502\u7503\u7505\u7506\u7507\u7508\u7509\u750A\u750B\u750C\u750E\u7510\u7512\u7514\u7515\u7516\u7517\u751B\u751D\u751E\u7520\u7521\u7522\u7523\u7524\u7526\u7527\u752A\u752E\u7534\u7536\u7539\u753C\u753D\u753F\u7541\u7542\u7543\u7544\u7546\u7547\u7549\u754A\u754D\u7550\u7551\u7552\u7553\u7555\u7556\u7557\u7558\uFFFD\u755D\u755E\u755F\u7560\u7561\u7562\u7563\u7564\u7567\u7568\u7569\u756B\u756C\u756D\u756E\u756F\u7570\u7571\u7573\u7575\u7576\u7577\u757A\u757B\u757C\u757D\u757E\u7580\u7581\u7582\u7584\u7585\u7587\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[174].length; ++j) if (D[174][j].charCodeAt(0) !== 65533) {
        e[D[174][j]] = 44544 + j;
        d[44544 + j] = D[174][j];
      }
      D[175] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7588\u7589\u758A\u758C\u758D\u758E\u7590\u7593\u7595\u7598\u759B\u759C\u759E\u75A2\u75A6\u75A7\u75A8\u75A9\u75AA\u75AD\u75B6\u75B7\u75BA\u75BB\u75BF\u75C0\u75C1\u75C6\u75CB\u75CC\u75CE\u75CF\u75D0\u75D1\u75D3\u75D7\u75D9\u75DA\u75DC\u75DD\u75DF\u75E0\u75E1\u75E5\u75E9\u75EC\u75ED\u75EE\u75EF\u75F2\u75F3\u75F5\u75F6\u75F7\u75F8\u75FA\u75FB\u75FD\u75FE\u7602\u7604\u7606\u7607\uFFFD\u7608\u7609\u760B\u760D\u760E\u760F\u7611\u7612\u7613\u7614\u7616\u761A\u761C\u761D\u761E\u7621\u7623\u7627\u7628\u762C\u762E\u762F\u7631\u7632\u7636\u7637\u7639\u763A\u763B\u763D\u7641\u7642\u7644\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[175].length; ++j) if (D[175][j].charCodeAt(0) !== 65533) {
        e[D[175][j]] = 44800 + j;
        d[44800 + j] = D[175][j];
      }
      D[176] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7645\u7646\u7647\u7648\u7649\u764A\u764B\u764E\u764F\u7650\u7651\u7652\u7653\u7655\u7657\u7658\u7659\u765A\u765B\u765D\u765F\u7660\u7661\u7662\u7664\u7665\u7666\u7667\u7668\u7669\u766A\u766C\u766D\u766E\u7670\u7671\u7672\u7673\u7674\u7675\u7676\u7677\u7679\u767A\u767C\u767F\u7680\u7681\u7683\u7685\u7689\u768A\u768C\u768D\u768F\u7690\u7692\u7694\u7695\u7697\u7698\u769A\u769B\uFFFD\u769C\u769D\u769E\u769F\u76A0\u76A1\u76A2\u76A3\u76A5\u76A6\u76A7\u76A8\u76A9\u76AA\u76AB\u76AC\u76AD\u76AF\u76B0\u76B3\u76B5\u76B6\u76B7\u76B8\u76B9\u76BA\u76BB\u76BC\u76BD\u76BE\u76C0\u76C1\u76C3\u554A\u963F\u57C3\u6328\u54CE\u5509\u54C0\u7691\u764C\u853C\u77EE\u827E\u788D\u7231\u9698\u978D\u6C28\u5B89\u4FFA\u6309\u6697\u5CB8\u80FA\u6848\u80AE\u6602\u76CE\u51F9\u6556\u71AC\u7FF1\u8884\u50B2\u5965\u61CA\u6FB3\u82AD\u634C\u6252\u53ED\u5427\u7B06\u516B\u75A4\u5DF4\u62D4\u8DCB\u9776\u628A\u8019\u575D\u9738\u7F62\u7238\u767D\u67CF\u767E\u6446\u4F70\u8D25\u62DC\u7A17\u6591\u73ED\u642C\u6273\u822C\u9881\u677F\u7248\u626E\u62CC\u4F34\u74E3\u534A\u529E\u7ECA\u90A6\u5E2E\u6886\u699C\u8180\u7ED1\u68D2\u78C5\u868C\u9551\u508D\u8C24\u82DE\u80DE\u5305\u8912\u5265\uFFFD".split("");
      for (j = 0; j != D[176].length; ++j) if (D[176][j].charCodeAt(0) !== 65533) {
        e[D[176][j]] = 45056 + j;
        d[45056 + j] = D[176][j];
      }
      D[177] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u76C4\u76C7\u76C9\u76CB\u76CC\u76D3\u76D5\u76D9\u76DA\u76DC\u76DD\u76DE\u76E0\u76E1\u76E2\u76E3\u76E4\u76E6\u76E7\u76E8\u76E9\u76EA\u76EB\u76EC\u76ED\u76F0\u76F3\u76F5\u76F6\u76F7\u76FA\u76FB\u76FD\u76FF\u7700\u7702\u7703\u7705\u7706\u770A\u770C\u770E\u770F\u7710\u7711\u7712\u7713\u7714\u7715\u7716\u7717\u7718\u771B\u771C\u771D\u771E\u7721\u7723\u7724\u7725\u7727\u772A\u772B\uFFFD\u772C\u772E\u7730\u7731\u7732\u7733\u7734\u7739\u773B\u773D\u773E\u773F\u7742\u7744\u7745\u7746\u7748\u7749\u774A\u774B\u774C\u774D\u774E\u774F\u7752\u7753\u7754\u7755\u7756\u7757\u7758\u7759\u775C\u8584\u96F9\u4FDD\u5821\u9971\u5B9D\u62B1\u62A5\u66B4\u8C79\u9C8D\u7206\u676F\u7891\u60B2\u5351\u5317\u8F88\u80CC\u8D1D\u94A1\u500D\u72C8\u5907\u60EB\u7119\u88AB\u5954\u82EF\u672C\u7B28\u5D29\u7EF7\u752D\u6CF5\u8E66\u8FF8\u903C\u9F3B\u6BD4\u9119\u7B14\u5F7C\u78A7\u84D6\u853D\u6BD5\u6BD9\u6BD6\u5E01\u5E87\u75F9\u95ED\u655D\u5F0A\u5FC5\u8F9F\u58C1\u81C2\u907F\u965B\u97AD\u8FB9\u7F16\u8D2C\u6241\u4FBF\u53D8\u535E\u8FA8\u8FA9\u8FAB\u904D\u6807\u5F6A\u8198\u8868\u9CD6\u618B\u522B\u762A\u5F6C\u658C\u6FD2\u6EE8\u5BBE\u6448\u5175\u51B0\u67C4\u4E19\u79C9\u997C\u70B3\uFFFD".split("");
      for (j = 0; j != D[177].length; ++j) if (D[177][j].charCodeAt(0) !== 65533) {
        e[D[177][j]] = 45312 + j;
        d[45312 + j] = D[177][j];
      }
      D[178] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u775D\u775E\u775F\u7760\u7764\u7767\u7769\u776A\u776D\u776E\u776F\u7770\u7771\u7772\u7773\u7774\u7775\u7776\u7777\u7778\u777A\u777B\u777C\u7781\u7782\u7783\u7786\u7787\u7788\u7789\u778A\u778B\u778F\u7790\u7793\u7794\u7795\u7796\u7797\u7798\u7799\u779A\u779B\u779C\u779D\u779E\u77A1\u77A3\u77A4\u77A6\u77A8\u77AB\u77AD\u77AE\u77AF\u77B1\u77B2\u77B4\u77B6\u77B7\u77B8\u77B9\u77BA\uFFFD\u77BC\u77BE\u77C0\u77C1\u77C2\u77C3\u77C4\u77C5\u77C6\u77C7\u77C8\u77C9\u77CA\u77CB\u77CC\u77CE\u77CF\u77D0\u77D1\u77D2\u77D3\u77D4\u77D5\u77D6\u77D8\u77D9\u77DA\u77DD\u77DE\u77DF\u77E0\u77E1\u77E4\u75C5\u5E76\u73BB\u83E0\u64AD\u62E8\u94B5\u6CE2\u535A\u52C3\u640F\u94C2\u7B94\u4F2F\u5E1B\u8236\u8116\u818A\u6E24\u6CCA\u9A73\u6355\u535C\u54FA\u8865\u57E0\u4E0D\u5E03\u6B65\u7C3F\u90E8\u6016\u64E6\u731C\u88C1\u6750\u624D\u8D22\u776C\u8E29\u91C7\u5F69\u83DC\u8521\u9910\u53C2\u8695\u6B8B\u60ED\u60E8\u707F\u82CD\u8231\u4ED3\u6CA7\u85CF\u64CD\u7CD9\u69FD\u66F9\u8349\u5395\u7B56\u4FA7\u518C\u6D4B\u5C42\u8E6D\u63D2\u53C9\u832C\u8336\u67E5\u78B4\u643D\u5BDF\u5C94\u5DEE\u8BE7\u62C6\u67F4\u8C7A\u6400\u63BA\u8749\u998B\u8C17\u7F20\u94F2\u4EA7\u9610\u98A4\u660C\u7316\uFFFD".split("");
      for (j = 0; j != D[178].length; ++j) if (D[178][j].charCodeAt(0) !== 65533) {
        e[D[178][j]] = 45568 + j;
        d[45568 + j] = D[178][j];
      }
      D[179] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u77E6\u77E8\u77EA\u77EF\u77F0\u77F1\u77F2\u77F4\u77F5\u77F7\u77F9\u77FA\u77FB\u77FC\u7803\u7804\u7805\u7806\u7807\u7808\u780A\u780B\u780E\u780F\u7810\u7813\u7815\u7819\u781B\u781E\u7820\u7821\u7822\u7824\u7828\u782A\u782B\u782E\u782F\u7831\u7832\u7833\u7835\u7836\u783D\u783F\u7841\u7842\u7843\u7844\u7846\u7848\u7849\u784A\u784B\u784D\u784F\u7851\u7853\u7854\u7858\u7859\u785A\uFFFD\u785B\u785C\u785E\u785F\u7860\u7861\u7862\u7863\u7864\u7865\u7866\u7867\u7868\u7869\u786F\u7870\u7871\u7872\u7873\u7874\u7875\u7876\u7878\u7879\u787A\u787B\u787D\u787E\u787F\u7880\u7881\u7882\u7883\u573A\u5C1D\u5E38\u957F\u507F\u80A0\u5382\u655E\u7545\u5531\u5021\u8D85\u6284\u949E\u671D\u5632\u6F6E\u5DE2\u5435\u7092\u8F66\u626F\u64A4\u63A3\u5F7B\u6F88\u90F4\u81E3\u8FB0\u5C18\u6668\u5FF1\u6C89\u9648\u8D81\u886C\u6491\u79F0\u57CE\u6A59\u6210\u5448\u4E58\u7A0B\u60E9\u6F84\u8BDA\u627F\u901E\u9A8B\u79E4\u5403\u75F4\u6301\u5319\u6C60\u8FDF\u5F1B\u9A70\u803B\u9F7F\u4F88\u5C3A\u8D64\u7FC5\u65A5\u70BD\u5145\u51B2\u866B\u5D07\u5BA0\u62BD\u916C\u7574\u8E0C\u7A20\u6101\u7B79\u4EC7\u7EF8\u7785\u4E11\u81ED\u521D\u51FA\u6A71\u53A8\u8E87\u9504\u96CF\u6EC1\u9664\u695A\uFFFD".split("");
      for (j = 0; j != D[179].length; ++j) if (D[179][j].charCodeAt(0) !== 65533) {
        e[D[179][j]] = 45824 + j;
        d[45824 + j] = D[179][j];
      }
      D[180] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7884\u7885\u7886\u7888\u788A\u788B\u788F\u7890\u7892\u7894\u7895\u7896\u7899\u789D\u789E\u78A0\u78A2\u78A4\u78A6\u78A8\u78A9\u78AA\u78AB\u78AC\u78AD\u78AE\u78AF\u78B5\u78B6\u78B7\u78B8\u78BA\u78BB\u78BC\u78BD\u78BF\u78C0\u78C2\u78C3\u78C4\u78C6\u78C7\u78C8\u78CC\u78CD\u78CE\u78CF\u78D1\u78D2\u78D3\u78D6\u78D7\u78D8\u78DA\u78DB\u78DC\u78DD\u78DE\u78DF\u78E0\u78E1\u78E2\u78E3\uFFFD\u78E4\u78E5\u78E6\u78E7\u78E9\u78EA\u78EB\u78ED\u78EE\u78EF\u78F0\u78F1\u78F3\u78F5\u78F6\u78F8\u78F9\u78FB\u78FC\u78FD\u78FE\u78FF\u7900\u7902\u7903\u7904\u7906\u7907\u7908\u7909\u790A\u790B\u790C\u7840\u50A8\u77D7\u6410\u89E6\u5904\u63E3\u5DDD\u7A7F\u693D\u4F20\u8239\u5598\u4E32\u75AE\u7A97\u5E62\u5E8A\u95EF\u521B\u5439\u708A\u6376\u9524\u5782\u6625\u693F\u9187\u5507\u6DF3\u7EAF\u8822\u6233\u7EF0\u75B5\u8328\u78C1\u96CC\u8F9E\u6148\u74F7\u8BCD\u6B64\u523A\u8D50\u6B21\u806A\u8471\u56F1\u5306\u4ECE\u4E1B\u51D1\u7C97\u918B\u7C07\u4FC3\u8E7F\u7BE1\u7A9C\u6467\u5D14\u50AC\u8106\u7601\u7CB9\u6DEC\u7FE0\u6751\u5B58\u5BF8\u78CB\u64AE\u6413\u63AA\u632B\u9519\u642D\u8FBE\u7B54\u7629\u6253\u5927\u5446\u6B79\u50A3\u6234\u5E26\u6B86\u4EE3\u8D37\u888B\u5F85\u902E\uFFFD".split("");
      for (j = 0; j != D[180].length; ++j) if (D[180][j].charCodeAt(0) !== 65533) {
        e[D[180][j]] = 46080 + j;
        d[46080 + j] = D[180][j];
      }
      D[181] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u790D\u790E\u790F\u7910\u7911\u7912\u7914\u7915\u7916\u7917\u7918\u7919\u791A\u791B\u791C\u791D\u791F\u7920\u7921\u7922\u7923\u7925\u7926\u7927\u7928\u7929\u792A\u792B\u792C\u792D\u792E\u792F\u7930\u7931\u7932\u7933\u7935\u7936\u7937\u7938\u7939\u793D\u793F\u7942\u7943\u7944\u7945\u7947\u794A\u794B\u794C\u794D\u794E\u794F\u7950\u7951\u7952\u7954\u7955\u7958\u7959\u7961\u7963\uFFFD\u7964\u7966\u7969\u796A\u796B\u796C\u796E\u7970\u7971\u7972\u7973\u7974\u7975\u7976\u7979\u797B\u797C\u797D\u797E\u797F\u7982\u7983\u7986\u7987\u7988\u7989\u798B\u798C\u798D\u798E\u7990\u7991\u7992\u6020\u803D\u62C5\u4E39\u5355\u90F8\u63B8\u80C6\u65E6\u6C2E\u4F46\u60EE\u6DE1\u8BDE\u5F39\u86CB\u5F53\u6321\u515A\u8361\u6863\u5200\u6363\u8E48\u5012\u5C9B\u7977\u5BFC\u5230\u7A3B\u60BC\u9053\u76D7\u5FB7\u5F97\u7684\u8E6C\u706F\u767B\u7B49\u77AA\u51F3\u9093\u5824\u4F4E\u6EF4\u8FEA\u654C\u7B1B\u72C4\u6DA4\u7FDF\u5AE1\u62B5\u5E95\u5730\u8482\u7B2C\u5E1D\u5F1F\u9012\u7F14\u98A0\u6382\u6EC7\u7898\u70B9\u5178\u975B\u57AB\u7535\u4F43\u7538\u5E97\u60E6\u5960\u6DC0\u6BBF\u7889\u53FC\u96D5\u51CB\u5201\u6389\u540A\u9493\u8C03\u8DCC\u7239\u789F\u8776\u8FED\u8C0D\u53E0\uFFFD".split("");
      for (j = 0; j != D[181].length; ++j) if (D[181][j].charCodeAt(0) !== 65533) {
        e[D[181][j]] = 46336 + j;
        d[46336 + j] = D[181][j];
      }
      D[182] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7993\u7994\u7995\u7996\u7997\u7998\u7999\u799B\u799C\u799D\u799E\u799F\u79A0\u79A1\u79A2\u79A3\u79A4\u79A5\u79A6\u79A8\u79A9\u79AA\u79AB\u79AC\u79AD\u79AE\u79AF\u79B0\u79B1\u79B2\u79B4\u79B5\u79B6\u79B7\u79B8\u79BC\u79BF\u79C2\u79C4\u79C5\u79C7\u79C8\u79CA\u79CC\u79CE\u79CF\u79D0\u79D3\u79D4\u79D6\u79D7\u79D9\u79DA\u79DB\u79DC\u79DD\u79DE\u79E0\u79E1\u79E2\u79E5\u79E8\u79EA\uFFFD\u79EC\u79EE\u79F1\u79F2\u79F3\u79F4\u79F5\u79F6\u79F7\u79F9\u79FA\u79FC\u79FE\u79FF\u7A01\u7A04\u7A05\u7A07\u7A08\u7A09\u7A0A\u7A0C\u7A0F\u7A10\u7A11\u7A12\u7A13\u7A15\u7A16\u7A18\u7A19\u7A1B\u7A1C\u4E01\u76EF\u53EE\u9489\u9876\u9F0E\u952D\u5B9A\u8BA2\u4E22\u4E1C\u51AC\u8463\u61C2\u52A8\u680B\u4F97\u606B\u51BB\u6D1E\u515C\u6296\u6597\u9661\u8C46\u9017\u75D8\u90FD\u7763\u6BD2\u728A\u72EC\u8BFB\u5835\u7779\u8D4C\u675C\u9540\u809A\u5EA6\u6E21\u5992\u7AEF\u77ED\u953B\u6BB5\u65AD\u7F0E\u5806\u5151\u961F\u5BF9\u58A9\u5428\u8E72\u6566\u987F\u56E4\u949D\u76FE\u9041\u6387\u54C6\u591A\u593A\u579B\u8EB2\u6735\u8DFA\u8235\u5241\u60F0\u5815\u86FE\u5CE8\u9E45\u4FC4\u989D\u8BB9\u5A25\u6076\u5384\u627C\u904F\u9102\u997F\u6069\u800C\u513F\u8033\u5C14\u9975\u6D31\u4E8C\uFFFD".split("");
      for (j = 0; j != D[182].length; ++j) if (D[182][j].charCodeAt(0) !== 65533) {
        e[D[182][j]] = 46592 + j;
        d[46592 + j] = D[182][j];
      }
      D[183] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7A1D\u7A1F\u7A21\u7A22\u7A24\u7A25\u7A26\u7A27\u7A28\u7A29\u7A2A\u7A2B\u7A2C\u7A2D\u7A2E\u7A2F\u7A30\u7A31\u7A32\u7A34\u7A35\u7A36\u7A38\u7A3A\u7A3E\u7A40\u7A41\u7A42\u7A43\u7A44\u7A45\u7A47\u7A48\u7A49\u7A4A\u7A4B\u7A4C\u7A4D\u7A4E\u7A4F\u7A50\u7A52\u7A53\u7A54\u7A55\u7A56\u7A58\u7A59\u7A5A\u7A5B\u7A5C\u7A5D\u7A5E\u7A5F\u7A60\u7A61\u7A62\u7A63\u7A64\u7A65\u7A66\u7A67\u7A68\uFFFD\u7A69\u7A6A\u7A6B\u7A6C\u7A6D\u7A6E\u7A6F\u7A71\u7A72\u7A73\u7A75\u7A7B\u7A7C\u7A7D\u7A7E\u7A82\u7A85\u7A87\u7A89\u7A8A\u7A8B\u7A8C\u7A8E\u7A8F\u7A90\u7A93\u7A94\u7A99\u7A9A\u7A9B\u7A9E\u7AA1\u7AA2\u8D30\u53D1\u7F5A\u7B4F\u4F10\u4E4F\u9600\u6CD5\u73D0\u85E9\u5E06\u756A\u7FFB\u6A0A\u77FE\u9492\u7E41\u51E1\u70E6\u53CD\u8FD4\u8303\u8D29\u72AF\u996D\u6CDB\u574A\u82B3\u65B9\u80AA\u623F\u9632\u59A8\u4EFF\u8BBF\u7EBA\u653E\u83F2\u975E\u5561\u98DE\u80A5\u532A\u8BFD\u5420\u80BA\u5E9F\u6CB8\u8D39\u82AC\u915A\u5429\u6C1B\u5206\u7EB7\u575F\u711A\u6C7E\u7C89\u594B\u4EFD\u5FFF\u6124\u7CAA\u4E30\u5C01\u67AB\u8702\u5CF0\u950B\u98CE\u75AF\u70FD\u9022\u51AF\u7F1D\u8BBD\u5949\u51E4\u4F5B\u5426\u592B\u6577\u80A4\u5B75\u6276\u62C2\u8F90\u5E45\u6C1F\u7B26\u4F0F\u4FD8\u670D\uFFFD".split("");
      for (j = 0; j != D[183].length; ++j) if (D[183][j].charCodeAt(0) !== 65533) {
        e[D[183][j]] = 46848 + j;
        d[46848 + j] = D[183][j];
      }
      D[184] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7AA3\u7AA4\u7AA7\u7AA9\u7AAA\u7AAB\u7AAE\u7AAF\u7AB0\u7AB1\u7AB2\u7AB4\u7AB5\u7AB6\u7AB7\u7AB8\u7AB9\u7ABA\u7ABB\u7ABC\u7ABD\u7ABE\u7AC0\u7AC1\u7AC2\u7AC3\u7AC4\u7AC5\u7AC6\u7AC7\u7AC8\u7AC9\u7ACA\u7ACC\u7ACD\u7ACE\u7ACF\u7AD0\u7AD1\u7AD2\u7AD3\u7AD4\u7AD5\u7AD7\u7AD8\u7ADA\u7ADB\u7ADC\u7ADD\u7AE1\u7AE2\u7AE4\u7AE7\u7AE8\u7AE9\u7AEA\u7AEB\u7AEC\u7AEE\u7AF0\u7AF1\u7AF2\u7AF3\uFFFD\u7AF4\u7AF5\u7AF6\u7AF7\u7AF8\u7AFB\u7AFC\u7AFE\u7B00\u7B01\u7B02\u7B05\u7B07\u7B09\u7B0C\u7B0D\u7B0E\u7B10\u7B12\u7B13\u7B16\u7B17\u7B18\u7B1A\u7B1C\u7B1D\u7B1F\u7B21\u7B22\u7B23\u7B27\u7B29\u7B2D\u6D6E\u6DAA\u798F\u88B1\u5F17\u752B\u629A\u8F85\u4FEF\u91DC\u65A7\u812F\u8151\u5E9C\u8150\u8D74\u526F\u8986\u8D4B\u590D\u5085\u4ED8\u961C\u7236\u8179\u8D1F\u5BCC\u8BA3\u9644\u5987\u7F1A\u5490\u5676\u560E\u8BE5\u6539\u6982\u9499\u76D6\u6E89\u5E72\u7518\u6746\u67D1\u7AFF\u809D\u8D76\u611F\u79C6\u6562\u8D63\u5188\u521A\u94A2\u7F38\u809B\u7EB2\u5C97\u6E2F\u6760\u7BD9\u768B\u9AD8\u818F\u7F94\u7CD5\u641E\u9550\u7A3F\u544A\u54E5\u6B4C\u6401\u6208\u9E3D\u80F3\u7599\u5272\u9769\u845B\u683C\u86E4\u9601\u9694\u94EC\u4E2A\u5404\u7ED9\u6839\u8DDF\u8015\u66F4\u5E9A\u7FB9\uFFFD".split("");
      for (j = 0; j != D[184].length; ++j) if (D[184][j].charCodeAt(0) !== 65533) {
        e[D[184][j]] = 47104 + j;
        d[47104 + j] = D[184][j];
      }
      D[185] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7B2F\u7B30\u7B32\u7B34\u7B35\u7B36\u7B37\u7B39\u7B3B\u7B3D\u7B3F\u7B40\u7B41\u7B42\u7B43\u7B44\u7B46\u7B48\u7B4A\u7B4D\u7B4E\u7B53\u7B55\u7B57\u7B59\u7B5C\u7B5E\u7B5F\u7B61\u7B63\u7B64\u7B65\u7B66\u7B67\u7B68\u7B69\u7B6A\u7B6B\u7B6C\u7B6D\u7B6F\u7B70\u7B73\u7B74\u7B76\u7B78\u7B7A\u7B7C\u7B7D\u7B7F\u7B81\u7B82\u7B83\u7B84\u7B86\u7B87\u7B88\u7B89\u7B8A\u7B8B\u7B8C\u7B8E\u7B8F\uFFFD\u7B91\u7B92\u7B93\u7B96\u7B98\u7B99\u7B9A\u7B9B\u7B9E\u7B9F\u7BA0\u7BA3\u7BA4\u7BA5\u7BAE\u7BAF\u7BB0\u7BB2\u7BB3\u7BB5\u7BB6\u7BB7\u7BB9\u7BBA\u7BBB\u7BBC\u7BBD\u7BBE\u7BBF\u7BC0\u7BC2\u7BC3\u7BC4\u57C2\u803F\u6897\u5DE5\u653B\u529F\u606D\u9F9A\u4F9B\u8EAC\u516C\u5BAB\u5F13\u5DE9\u6C5E\u62F1\u8D21\u5171\u94A9\u52FE\u6C9F\u82DF\u72D7\u57A2\u6784\u8D2D\u591F\u8F9C\u83C7\u5495\u7B8D\u4F30\u6CBD\u5B64\u59D1\u9F13\u53E4\u86CA\u9AA8\u8C37\u80A1\u6545\u987E\u56FA\u96C7\u522E\u74DC\u5250\u5BE1\u6302\u8902\u4E56\u62D0\u602A\u68FA\u5173\u5B98\u51A0\u89C2\u7BA1\u9986\u7F50\u60EF\u704C\u8D2F\u5149\u5E7F\u901B\u7470\u89C4\u572D\u7845\u5F52\u9F9F\u95FA\u8F68\u9B3C\u8BE1\u7678\u6842\u67DC\u8DEA\u8D35\u523D\u8F8A\u6EDA\u68CD\u9505\u90ED\u56FD\u679C\u88F9\u8FC7\u54C8\uFFFD".split("");
      for (j = 0; j != D[185].length; ++j) if (D[185][j].charCodeAt(0) !== 65533) {
        e[D[185][j]] = 47360 + j;
        d[47360 + j] = D[185][j];
      }
      D[186] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7BC5\u7BC8\u7BC9\u7BCA\u7BCB\u7BCD\u7BCE\u7BCF\u7BD0\u7BD2\u7BD4\u7BD5\u7BD6\u7BD7\u7BD8\u7BDB\u7BDC\u7BDE\u7BDF\u7BE0\u7BE2\u7BE3\u7BE4\u7BE7\u7BE8\u7BE9\u7BEB\u7BEC\u7BED\u7BEF\u7BF0\u7BF2\u7BF3\u7BF4\u7BF5\u7BF6\u7BF8\u7BF9\u7BFA\u7BFB\u7BFD\u7BFF\u7C00\u7C01\u7C02\u7C03\u7C04\u7C05\u7C06\u7C08\u7C09\u7C0A\u7C0D\u7C0E\u7C10\u7C11\u7C12\u7C13\u7C14\u7C15\u7C17\u7C18\u7C19\uFFFD\u7C1A\u7C1B\u7C1C\u7C1D\u7C1E\u7C20\u7C21\u7C22\u7C23\u7C24\u7C25\u7C28\u7C29\u7C2B\u7C2C\u7C2D\u7C2E\u7C2F\u7C30\u7C31\u7C32\u7C33\u7C34\u7C35\u7C36\u7C37\u7C39\u7C3A\u7C3B\u7C3C\u7C3D\u7C3E\u7C42\u9AB8\u5B69\u6D77\u6C26\u4EA5\u5BB3\u9A87\u9163\u61A8\u90AF\u97E9\u542B\u6DB5\u5BD2\u51FD\u558A\u7F55\u7FF0\u64BC\u634D\u65F1\u61BE\u608D\u710A\u6C57\u6C49\u592F\u676D\u822A\u58D5\u568E\u8C6A\u6BEB\u90DD\u597D\u8017\u53F7\u6D69\u5475\u559D\u8377\u83CF\u6838\u79BE\u548C\u4F55\u5408\u76D2\u8C89\u9602\u6CB3\u6DB8\u8D6B\u8910\u9E64\u8D3A\u563F\u9ED1\u75D5\u5F88\u72E0\u6068\u54FC\u4EA8\u6A2A\u8861\u6052\u8F70\u54C4\u70D8\u8679\u9E3F\u6D2A\u5B8F\u5F18\u7EA2\u5589\u4FAF\u7334\u543C\u539A\u5019\u540E\u547C\u4E4E\u5FFD\u745A\u58F6\u846B\u80E1\u8774\u72D0\u7CCA\u6E56\uFFFD".split("");
      for (j = 0; j != D[186].length; ++j) if (D[186][j].charCodeAt(0) !== 65533) {
        e[D[186][j]] = 47616 + j;
        d[47616 + j] = D[186][j];
      }
      D[187] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7C43\u7C44\u7C45\u7C46\u7C47\u7C48\u7C49\u7C4A\u7C4B\u7C4C\u7C4E\u7C4F\u7C50\u7C51\u7C52\u7C53\u7C54\u7C55\u7C56\u7C57\u7C58\u7C59\u7C5A\u7C5B\u7C5C\u7C5D\u7C5E\u7C5F\u7C60\u7C61\u7C62\u7C63\u7C64\u7C65\u7C66\u7C67\u7C68\u7C69\u7C6A\u7C6B\u7C6C\u7C6D\u7C6E\u7C6F\u7C70\u7C71\u7C72\u7C75\u7C76\u7C77\u7C78\u7C79\u7C7A\u7C7E\u7C7F\u7C80\u7C81\u7C82\u7C83\u7C84\u7C85\u7C86\u7C87\uFFFD\u7C88\u7C8A\u7C8B\u7C8C\u7C8D\u7C8E\u7C8F\u7C90\u7C93\u7C94\u7C96\u7C99\u7C9A\u7C9B\u7CA0\u7CA1\u7CA3\u7CA6\u7CA7\u7CA8\u7CA9\u7CAB\u7CAC\u7CAD\u7CAF\u7CB0\u7CB4\u7CB5\u7CB6\u7CB7\u7CB8\u7CBA\u7CBB\u5F27\u864E\u552C\u62A4\u4E92\u6CAA\u6237\u82B1\u54D7\u534E\u733E\u6ED1\u753B\u5212\u5316\u8BDD\u69D0\u5F8A\u6000\u6DEE\u574F\u6B22\u73AF\u6853\u8FD8\u7F13\u6362\u60A3\u5524\u75EA\u8C62\u7115\u6DA3\u5BA6\u5E7B\u8352\u614C\u9EC4\u78FA\u8757\u7C27\u7687\u51F0\u60F6\u714C\u6643\u5E4C\u604D\u8C0E\u7070\u6325\u8F89\u5FBD\u6062\u86D4\u56DE\u6BC1\u6094\u6167\u5349\u60E0\u6666\u8D3F\u79FD\u4F1A\u70E9\u6C47\u8BB3\u8BF2\u7ED8\u8364\u660F\u5A5A\u9B42\u6D51\u6DF7\u8C41\u6D3B\u4F19\u706B\u83B7\u6216\u60D1\u970D\u8D27\u7978\u51FB\u573E\u57FA\u673A\u7578\u7A3D\u79EF\u7B95\uFFFD".split("");
      for (j = 0; j != D[187].length; ++j) if (D[187][j].charCodeAt(0) !== 65533) {
        e[D[187][j]] = 47872 + j;
        d[47872 + j] = D[187][j];
      }
      D[188] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7CBF\u7CC0\u7CC2\u7CC3\u7CC4\u7CC6\u7CC9\u7CCB\u7CCE\u7CCF\u7CD0\u7CD1\u7CD2\u7CD3\u7CD4\u7CD8\u7CDA\u7CDB\u7CDD\u7CDE\u7CE1\u7CE2\u7CE3\u7CE4\u7CE5\u7CE6\u7CE7\u7CE9\u7CEA\u7CEB\u7CEC\u7CED\u7CEE\u7CF0\u7CF1\u7CF2\u7CF3\u7CF4\u7CF5\u7CF6\u7CF7\u7CF9\u7CFA\u7CFC\u7CFD\u7CFE\u7CFF\u7D00\u7D01\u7D02\u7D03\u7D04\u7D05\u7D06\u7D07\u7D08\u7D09\u7D0B\u7D0C\u7D0D\u7D0E\u7D0F\u7D10\uFFFD\u7D11\u7D12\u7D13\u7D14\u7D15\u7D16\u7D17\u7D18\u7D19\u7D1A\u7D1B\u7D1C\u7D1D\u7D1E\u7D1F\u7D21\u7D23\u7D24\u7D25\u7D26\u7D28\u7D29\u7D2A\u7D2C\u7D2D\u7D2E\u7D30\u7D31\u7D32\u7D33\u7D34\u7D35\u7D36\u808C\u9965\u8FF9\u6FC0\u8BA5\u9E21\u59EC\u7EE9\u7F09\u5409\u6781\u68D8\u8F91\u7C4D\u96C6\u53CA\u6025\u75BE\u6C72\u5373\u5AC9\u7EA7\u6324\u51E0\u810A\u5DF1\u84DF\u6280\u5180\u5B63\u4F0E\u796D\u5242\u60B8\u6D4E\u5BC4\u5BC2\u8BA1\u8BB0\u65E2\u5FCC\u9645\u5993\u7EE7\u7EAA\u5609\u67B7\u5939\u4F73\u5BB6\u52A0\u835A\u988A\u8D3E\u7532\u94BE\u5047\u7A3C\u4EF7\u67B6\u9A7E\u5AC1\u6B7C\u76D1\u575A\u5C16\u7B3A\u95F4\u714E\u517C\u80A9\u8270\u5978\u7F04\u8327\u68C0\u67EC\u78B1\u7877\u62E3\u6361\u7B80\u4FED\u526A\u51CF\u8350\u69DB\u9274\u8DF5\u8D31\u89C1\u952E\u7BAD\u4EF6\uFFFD".split("");
      for (j = 0; j != D[188].length; ++j) if (D[188][j].charCodeAt(0) !== 65533) {
        e[D[188][j]] = 48128 + j;
        d[48128 + j] = D[188][j];
      }
      D[189] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7D37\u7D38\u7D39\u7D3A\u7D3B\u7D3C\u7D3D\u7D3E\u7D3F\u7D40\u7D41\u7D42\u7D43\u7D44\u7D45\u7D46\u7D47\u7D48\u7D49\u7D4A\u7D4B\u7D4C\u7D4D\u7D4E\u7D4F\u7D50\u7D51\u7D52\u7D53\u7D54\u7D55\u7D56\u7D57\u7D58\u7D59\u7D5A\u7D5B\u7D5C\u7D5D\u7D5E\u7D5F\u7D60\u7D61\u7D62\u7D63\u7D64\u7D65\u7D66\u7D67\u7D68\u7D69\u7D6A\u7D6B\u7D6C\u7D6D\u7D6F\u7D70\u7D71\u7D72\u7D73\u7D74\u7D75\u7D76\uFFFD\u7D78\u7D79\u7D7A\u7D7B\u7D7C\u7D7D\u7D7E\u7D7F\u7D80\u7D81\u7D82\u7D83\u7D84\u7D85\u7D86\u7D87\u7D88\u7D89\u7D8A\u7D8B\u7D8C\u7D8D\u7D8E\u7D8F\u7D90\u7D91\u7D92\u7D93\u7D94\u7D95\u7D96\u7D97\u7D98\u5065\u8230\u5251\u996F\u6E10\u6E85\u6DA7\u5EFA\u50F5\u59DC\u5C06\u6D46\u6C5F\u7586\u848B\u6868\u5956\u8BB2\u5320\u9171\u964D\u8549\u6912\u7901\u7126\u80F6\u4EA4\u90CA\u6D47\u9A84\u5A07\u56BC\u6405\u94F0\u77EB\u4FA5\u811A\u72E1\u89D2\u997A\u7F34\u7EDE\u527F\u6559\u9175\u8F7F\u8F83\u53EB\u7A96\u63ED\u63A5\u7686\u79F8\u8857\u9636\u622A\u52AB\u8282\u6854\u6770\u6377\u776B\u7AED\u6D01\u7ED3\u89E3\u59D0\u6212\u85C9\u82A5\u754C\u501F\u4ECB\u75A5\u8BEB\u5C4A\u5DFE\u7B4B\u65A4\u91D1\u4ECA\u6D25\u895F\u7D27\u9526\u4EC5\u8C28\u8FDB\u9773\u664B\u7981\u8FD1\u70EC\u6D78\uFFFD".split("");
      for (j = 0; j != D[189].length; ++j) if (D[189][j].charCodeAt(0) !== 65533) {
        e[D[189][j]] = 48384 + j;
        d[48384 + j] = D[189][j];
      }
      D[190] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7D99\u7D9A\u7D9B\u7D9C\u7D9D\u7D9E\u7D9F\u7DA0\u7DA1\u7DA2\u7DA3\u7DA4\u7DA5\u7DA7\u7DA8\u7DA9\u7DAA\u7DAB\u7DAC\u7DAD\u7DAF\u7DB0\u7DB1\u7DB2\u7DB3\u7DB4\u7DB5\u7DB6\u7DB7\u7DB8\u7DB9\u7DBA\u7DBB\u7DBC\u7DBD\u7DBE\u7DBF\u7DC0\u7DC1\u7DC2\u7DC3\u7DC4\u7DC5\u7DC6\u7DC7\u7DC8\u7DC9\u7DCA\u7DCB\u7DCC\u7DCD\u7DCE\u7DCF\u7DD0\u7DD1\u7DD2\u7DD3\u7DD4\u7DD5\u7DD6\u7DD7\u7DD8\u7DD9\uFFFD\u7DDA\u7DDB\u7DDC\u7DDD\u7DDE\u7DDF\u7DE0\u7DE1\u7DE2\u7DE3\u7DE4\u7DE5\u7DE6\u7DE7\u7DE8\u7DE9\u7DEA\u7DEB\u7DEC\u7DED\u7DEE\u7DEF\u7DF0\u7DF1\u7DF2\u7DF3\u7DF4\u7DF5\u7DF6\u7DF7\u7DF8\u7DF9\u7DFA\u5C3D\u52B2\u8346\u5162\u830E\u775B\u6676\u9CB8\u4EAC\u60CA\u7CBE\u7CB3\u7ECF\u4E95\u8B66\u666F\u9888\u9759\u5883\u656C\u955C\u5F84\u75C9\u9756\u7ADF\u7ADE\u51C0\u70AF\u7A98\u63EA\u7A76\u7EA0\u7396\u97ED\u4E45\u7078\u4E5D\u9152\u53A9\u6551\u65E7\u81FC\u8205\u548E\u5C31\u759A\u97A0\u62D8\u72D9\u75BD\u5C45\u9A79\u83CA\u5C40\u5480\u77E9\u4E3E\u6CAE\u805A\u62D2\u636E\u5DE8\u5177\u8DDD\u8E1E\u952F\u4FF1\u53E5\u60E7\u70AC\u5267\u6350\u9E43\u5A1F\u5026\u7737\u5377\u7EE2\u6485\u652B\u6289\u6398\u5014\u7235\u89C9\u51B3\u8BC0\u7EDD\u5747\u83CC\u94A7\u519B\u541B\u5CFB\uFFFD".split("");
      for (j = 0; j != D[190].length; ++j) if (D[190][j].charCodeAt(0) !== 65533) {
        e[D[190][j]] = 48640 + j;
        d[48640 + j] = D[190][j];
      }
      D[191] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7DFB\u7DFC\u7DFD\u7DFE\u7DFF\u7E00\u7E01\u7E02\u7E03\u7E04\u7E05\u7E06\u7E07\u7E08\u7E09\u7E0A\u7E0B\u7E0C\u7E0D\u7E0E\u7E0F\u7E10\u7E11\u7E12\u7E13\u7E14\u7E15\u7E16\u7E17\u7E18\u7E19\u7E1A\u7E1B\u7E1C\u7E1D\u7E1E\u7E1F\u7E20\u7E21\u7E22\u7E23\u7E24\u7E25\u7E26\u7E27\u7E28\u7E29\u7E2A\u7E2B\u7E2C\u7E2D\u7E2E\u7E2F\u7E30\u7E31\u7E32\u7E33\u7E34\u7E35\u7E36\u7E37\u7E38\u7E39\uFFFD\u7E3A\u7E3C\u7E3D\u7E3E\u7E3F\u7E40\u7E42\u7E43\u7E44\u7E45\u7E46\u7E48\u7E49\u7E4A\u7E4B\u7E4C\u7E4D\u7E4E\u7E4F\u7E50\u7E51\u7E52\u7E53\u7E54\u7E55\u7E56\u7E57\u7E58\u7E59\u7E5A\u7E5B\u7E5C\u7E5D\u4FCA\u7AE3\u6D5A\u90E1\u9A8F\u5580\u5496\u5361\u54AF\u5F00\u63E9\u6977\u51EF\u6168\u520A\u582A\u52D8\u574E\u780D\u770B\u5EB7\u6177\u7CE0\u625B\u6297\u4EA2\u7095\u8003\u62F7\u70E4\u9760\u5777\u82DB\u67EF\u68F5\u78D5\u9897\u79D1\u58F3\u54B3\u53EF\u6E34\u514B\u523B\u5BA2\u8BFE\u80AF\u5543\u57A6\u6073\u5751\u542D\u7A7A\u6050\u5B54\u63A7\u62A0\u53E3\u6263\u5BC7\u67AF\u54ED\u7A9F\u82E6\u9177\u5E93\u88E4\u5938\u57AE\u630E\u8DE8\u80EF\u5757\u7B77\u4FA9\u5FEB\u5BBD\u6B3E\u5321\u7B50\u72C2\u6846\u77FF\u7736\u65F7\u51B5\u4E8F\u76D4\u5CBF\u7AA5\u8475\u594E\u9B41\u5080\uFFFD".split("");
      for (j = 0; j != D[191].length; ++j) if (D[191][j].charCodeAt(0) !== 65533) {
        e[D[191][j]] = 48896 + j;
        d[48896 + j] = D[191][j];
      }
      D[192] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7E5E\u7E5F\u7E60\u7E61\u7E62\u7E63\u7E64\u7E65\u7E66\u7E67\u7E68\u7E69\u7E6A\u7E6B\u7E6C\u7E6D\u7E6E\u7E6F\u7E70\u7E71\u7E72\u7E73\u7E74\u7E75\u7E76\u7E77\u7E78\u7E79\u7E7A\u7E7B\u7E7C\u7E7D\u7E7E\u7E7F\u7E80\u7E81\u7E83\u7E84\u7E85\u7E86\u7E87\u7E88\u7E89\u7E8A\u7E8B\u7E8C\u7E8D\u7E8E\u7E8F\u7E90\u7E91\u7E92\u7E93\u7E94\u7E95\u7E96\u7E97\u7E98\u7E99\u7E9A\u7E9C\u7E9D\u7E9E\uFFFD\u7EAE\u7EB4\u7EBB\u7EBC\u7ED6\u7EE4\u7EEC\u7EF9\u7F0A\u7F10\u7F1E\u7F37\u7F39\u7F3B\u7F3C\u7F3D\u7F3E\u7F3F\u7F40\u7F41\u7F43\u7F46\u7F47\u7F48\u7F49\u7F4A\u7F4B\u7F4C\u7F4D\u7F4E\u7F4F\u7F52\u7F53\u9988\u6127\u6E83\u5764\u6606\u6346\u56F0\u62EC\u6269\u5ED3\u9614\u5783\u62C9\u5587\u8721\u814A\u8FA3\u5566\u83B1\u6765\u8D56\u84DD\u5A6A\u680F\u62E6\u7BEE\u9611\u5170\u6F9C\u8C30\u63FD\u89C8\u61D2\u7F06\u70C2\u6EE5\u7405\u6994\u72FC\u5ECA\u90CE\u6717\u6D6A\u635E\u52B3\u7262\u8001\u4F6C\u59E5\u916A\u70D9\u6D9D\u52D2\u4E50\u96F7\u956D\u857E\u78CA\u7D2F\u5121\u5792\u64C2\u808B\u7C7B\u6CEA\u68F1\u695E\u51B7\u5398\u68A8\u7281\u9ECE\u7BF1\u72F8\u79BB\u6F13\u7406\u674E\u91CC\u9CA4\u793C\u8389\u8354\u540F\u6817\u4E3D\u5389\u52B1\u783E\u5386\u5229\u5088\u4F8B\u4FD0\uFFFD".split("");
      for (j = 0; j != D[192].length; ++j) if (D[192][j].charCodeAt(0) !== 65533) {
        e[D[192][j]] = 49152 + j;
        d[49152 + j] = D[192][j];
      }
      D[193] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7F56\u7F59\u7F5B\u7F5C\u7F5D\u7F5E\u7F60\u7F63\u7F64\u7F65\u7F66\u7F67\u7F6B\u7F6C\u7F6D\u7F6F\u7F70\u7F73\u7F75\u7F76\u7F77\u7F78\u7F7A\u7F7B\u7F7C\u7F7D\u7F7F\u7F80\u7F82\u7F83\u7F84\u7F85\u7F86\u7F87\u7F88\u7F89\u7F8B\u7F8D\u7F8F\u7F90\u7F91\u7F92\u7F93\u7F95\u7F96\u7F97\u7F98\u7F99\u7F9B\u7F9C\u7FA0\u7FA2\u7FA3\u7FA5\u7FA6\u7FA8\u7FA9\u7FAA\u7FAB\u7FAC\u7FAD\u7FAE\u7FB1\uFFFD\u7FB3\u7FB4\u7FB5\u7FB6\u7FB7\u7FBA\u7FBB\u7FBE\u7FC0\u7FC2\u7FC3\u7FC4\u7FC6\u7FC7\u7FC8\u7FC9\u7FCB\u7FCD\u7FCF\u7FD0\u7FD1\u7FD2\u7FD3\u7FD6\u7FD7\u7FD9\u7FDA\u7FDB\u7FDC\u7FDD\u7FDE\u7FE2\u7FE3\u75E2\u7ACB\u7C92\u6CA5\u96B6\u529B\u7483\u54E9\u4FE9\u8054\u83B2\u8FDE\u9570\u5EC9\u601C\u6D9F\u5E18\u655B\u8138\u94FE\u604B\u70BC\u7EC3\u7CAE\u51C9\u6881\u7CB1\u826F\u4E24\u8F86\u91CF\u667E\u4EAE\u8C05\u64A9\u804A\u50DA\u7597\u71CE\u5BE5\u8FBD\u6F66\u4E86\u6482\u9563\u5ED6\u6599\u5217\u88C2\u70C8\u52A3\u730E\u7433\u6797\u78F7\u9716\u4E34\u90BB\u9CDE\u6DCB\u51DB\u8D41\u541D\u62CE\u73B2\u83F1\u96F6\u9F84\u94C3\u4F36\u7F9A\u51CC\u7075\u9675\u5CAD\u9886\u53E6\u4EE4\u6E9C\u7409\u69B4\u786B\u998F\u7559\u5218\u7624\u6D41\u67F3\u516D\u9F99\u804B\u5499\u7B3C\u7ABF\uFFFD".split("");
      for (j = 0; j != D[193].length; ++j) if (D[193][j].charCodeAt(0) !== 65533) {
        e[D[193][j]] = 49408 + j;
        d[49408 + j] = D[193][j];
      }
      D[194] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7FE4\u7FE7\u7FE8\u7FEA\u7FEB\u7FEC\u7FED\u7FEF\u7FF2\u7FF4\u7FF5\u7FF6\u7FF7\u7FF8\u7FF9\u7FFA\u7FFD\u7FFE\u7FFF\u8002\u8007\u8008\u8009\u800A\u800E\u800F\u8011\u8013\u801A\u801B\u801D\u801E\u801F\u8021\u8023\u8024\u802B\u802C\u802D\u802E\u802F\u8030\u8032\u8034\u8039\u803A\u803C\u803E\u8040\u8041\u8044\u8045\u8047\u8048\u8049\u804E\u804F\u8050\u8051\u8053\u8055\u8056\u8057\uFFFD\u8059\u805B\u805C\u805D\u805E\u805F\u8060\u8061\u8062\u8063\u8064\u8065\u8066\u8067\u8068\u806B\u806C\u806D\u806E\u806F\u8070\u8072\u8073\u8074\u8075\u8076\u8077\u8078\u8079\u807A\u807B\u807C\u807D\u9686\u5784\u62E2\u9647\u697C\u5A04\u6402\u7BD3\u6F0F\u964B\u82A6\u5362\u9885\u5E90\u7089\u63B3\u5364\u864F\u9C81\u9E93\u788C\u9732\u8DEF\u8D42\u9E7F\u6F5E\u7984\u5F55\u9646\u622E\u9A74\u5415\u94DD\u4FA3\u65C5\u5C65\u5C61\u7F15\u8651\u6C2F\u5F8B\u7387\u6EE4\u7EFF\u5CE6\u631B\u5B6A\u6EE6\u5375\u4E71\u63A0\u7565\u62A1\u8F6E\u4F26\u4ED1\u6CA6\u7EB6\u8BBA\u841D\u87BA\u7F57\u903B\u9523\u7BA9\u9AA1\u88F8\u843D\u6D1B\u9A86\u7EDC\u5988\u9EBB\u739B\u7801\u8682\u9A6C\u9A82\u561B\u5417\u57CB\u4E70\u9EA6\u5356\u8FC8\u8109\u7792\u9992\u86EE\u6EE1\u8513\u66FC\u6162\u6F2B\uFFFD".split("");
      for (j = 0; j != D[194].length; ++j) if (D[194][j].charCodeAt(0) !== 65533) {
        e[D[194][j]] = 49664 + j;
        d[49664 + j] = D[194][j];
      }
      D[195] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u807E\u8081\u8082\u8085\u8088\u808A\u808D\u808E\u808F\u8090\u8091\u8092\u8094\u8095\u8097\u8099\u809E\u80A3\u80A6\u80A7\u80A8\u80AC\u80B0\u80B3\u80B5\u80B6\u80B8\u80B9\u80BB\u80C5\u80C7\u80C8\u80C9\u80CA\u80CB\u80CF\u80D0\u80D1\u80D2\u80D3\u80D4\u80D5\u80D8\u80DF\u80E0\u80E2\u80E3\u80E6\u80EE\u80F5\u80F7\u80F9\u80FB\u80FE\u80FF\u8100\u8101\u8103\u8104\u8105\u8107\u8108\u810B\uFFFD\u810C\u8115\u8117\u8119\u811B\u811C\u811D\u811F\u8120\u8121\u8122\u8123\u8124\u8125\u8126\u8127\u8128\u8129\u812A\u812B\u812D\u812E\u8130\u8133\u8134\u8135\u8137\u8139\u813A\u813B\u813C\u813D\u813F\u8C29\u8292\u832B\u76F2\u6C13\u5FD9\u83BD\u732B\u8305\u951A\u6BDB\u77DB\u94C6\u536F\u8302\u5192\u5E3D\u8C8C\u8D38\u4E48\u73AB\u679A\u6885\u9176\u9709\u7164\u6CA1\u7709\u5A92\u9541\u6BCF\u7F8E\u6627\u5BD0\u59B9\u5A9A\u95E8\u95F7\u4EEC\u840C\u8499\u6AAC\u76DF\u9530\u731B\u68A6\u5B5F\u772F\u919A\u9761\u7CDC\u8FF7\u8C1C\u5F25\u7C73\u79D8\u89C5\u6CCC\u871C\u5BC6\u5E42\u68C9\u7720\u7EF5\u5195\u514D\u52C9\u5A29\u7F05\u9762\u82D7\u63CF\u7784\u85D0\u79D2\u6E3A\u5E99\u5999\u8511\u706D\u6C11\u62BF\u76BF\u654F\u60AF\u95FD\u660E\u879F\u9E23\u94ED\u540D\u547D\u8C2C\u6478\uFFFD".split("");
      for (j = 0; j != D[195].length; ++j) if (D[195][j].charCodeAt(0) !== 65533) {
        e[D[195][j]] = 49920 + j;
        d[49920 + j] = D[195][j];
      }
      D[196] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8140\u8141\u8142\u8143\u8144\u8145\u8147\u8149\u814D\u814E\u814F\u8152\u8156\u8157\u8158\u815B\u815C\u815D\u815E\u815F\u8161\u8162\u8163\u8164\u8166\u8168\u816A\u816B\u816C\u816F\u8172\u8173\u8175\u8176\u8177\u8178\u8181\u8183\u8184\u8185\u8186\u8187\u8189\u818B\u818C\u818D\u818E\u8190\u8192\u8193\u8194\u8195\u8196\u8197\u8199\u819A\u819E\u819F\u81A0\u81A1\u81A2\u81A4\u81A5\uFFFD\u81A7\u81A9\u81AB\u81AC\u81AD\u81AE\u81AF\u81B0\u81B1\u81B2\u81B4\u81B5\u81B6\u81B7\u81B8\u81B9\u81BC\u81BD\u81BE\u81BF\u81C4\u81C5\u81C7\u81C8\u81C9\u81CB\u81CD\u81CE\u81CF\u81D0\u81D1\u81D2\u81D3\u6479\u8611\u6A21\u819C\u78E8\u6469\u9B54\u62B9\u672B\u83AB\u58A8\u9ED8\u6CAB\u6F20\u5BDE\u964C\u8C0B\u725F\u67D0\u62C7\u7261\u4EA9\u59C6\u6BCD\u5893\u66AE\u5E55\u52DF\u6155\u6728\u76EE\u7766\u7267\u7A46\u62FF\u54EA\u5450\u94A0\u90A3\u5A1C\u7EB3\u6C16\u4E43\u5976\u8010\u5948\u5357\u7537\u96BE\u56CA\u6320\u8111\u607C\u95F9\u6DD6\u5462\u9981\u5185\u5AE9\u80FD\u59AE\u9713\u502A\u6CE5\u5C3C\u62DF\u4F60\u533F\u817B\u9006\u6EBA\u852B\u62C8\u5E74\u78BE\u64B5\u637B\u5FF5\u5A18\u917F\u9E1F\u5C3F\u634F\u8042\u5B7D\u556E\u954A\u954D\u6D85\u60A8\u67E0\u72DE\u51DD\u5B81\uFFFD".split("");
      for (j = 0; j != D[196].length; ++j) if (D[196][j].charCodeAt(0) !== 65533) {
        e[D[196][j]] = 50176 + j;
        d[50176 + j] = D[196][j];
      }
      D[197] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u81D4\u81D5\u81D6\u81D7\u81D8\u81D9\u81DA\u81DB\u81DC\u81DD\u81DE\u81DF\u81E0\u81E1\u81E2\u81E4\u81E5\u81E6\u81E8\u81E9\u81EB\u81EE\u81EF\u81F0\u81F1\u81F2\u81F5\u81F6\u81F7\u81F8\u81F9\u81FA\u81FD\u81FF\u8203\u8207\u8208\u8209\u820A\u820B\u820E\u820F\u8211\u8213\u8215\u8216\u8217\u8218\u8219\u821A\u821D\u8220\u8224\u8225\u8226\u8227\u8229\u822E\u8232\u823A\u823C\u823D\u823F\uFFFD\u8240\u8241\u8242\u8243\u8245\u8246\u8248\u824A\u824C\u824D\u824E\u8250\u8251\u8252\u8253\u8254\u8255\u8256\u8257\u8259\u825B\u825C\u825D\u825E\u8260\u8261\u8262\u8263\u8264\u8265\u8266\u8267\u8269\u62E7\u6CDE\u725B\u626D\u94AE\u7EBD\u8113\u6D53\u519C\u5F04\u5974\u52AA\u6012\u5973\u6696\u8650\u759F\u632A\u61E6\u7CEF\u8BFA\u54E6\u6B27\u9E25\u6BB4\u85D5\u5455\u5076\u6CA4\u556A\u8DB4\u722C\u5E15\u6015\u7436\u62CD\u6392\u724C\u5F98\u6E43\u6D3E\u6500\u6F58\u76D8\u78D0\u76FC\u7554\u5224\u53DB\u4E53\u5E9E\u65C1\u802A\u80D6\u629B\u5486\u5228\u70AE\u888D\u8DD1\u6CE1\u5478\u80DA\u57F9\u88F4\u8D54\u966A\u914D\u4F69\u6C9B\u55B7\u76C6\u7830\u62A8\u70F9\u6F8E\u5F6D\u84EC\u68DA\u787C\u7BF7\u81A8\u670B\u9E4F\u6367\u78B0\u576F\u7812\u9739\u6279\u62AB\u5288\u7435\u6BD7\uFFFD".split("");
      for (j = 0; j != D[197].length; ++j) if (D[197][j].charCodeAt(0) !== 65533) {
        e[D[197][j]] = 50432 + j;
        d[50432 + j] = D[197][j];
      }
      D[198] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u826A\u826B\u826C\u826D\u8271\u8275\u8276\u8277\u8278\u827B\u827C\u8280\u8281\u8283\u8285\u8286\u8287\u8289\u828C\u8290\u8293\u8294\u8295\u8296\u829A\u829B\u829E\u82A0\u82A2\u82A3\u82A7\u82B2\u82B5\u82B6\u82BA\u82BB\u82BC\u82BF\u82C0\u82C2\u82C3\u82C5\u82C6\u82C9\u82D0\u82D6\u82D9\u82DA\u82DD\u82E2\u82E7\u82E8\u82E9\u82EA\u82EC\u82ED\u82EE\u82F0\u82F2\u82F3\u82F5\u82F6\u82F8\uFFFD\u82FA\u82FC\u82FD\u82FE\u82FF\u8300\u830A\u830B\u830D\u8310\u8312\u8313\u8316\u8318\u8319\u831D\u831E\u831F\u8320\u8321\u8322\u8323\u8324\u8325\u8326\u8329\u832A\u832E\u8330\u8332\u8337\u833B\u833D\u5564\u813E\u75B2\u76AE\u5339\u75DE\u50FB\u5C41\u8B6C\u7BC7\u504F\u7247\u9A97\u98D8\u6F02\u74E2\u7968\u6487\u77A5\u62FC\u9891\u8D2B\u54C1\u8058\u4E52\u576A\u82F9\u840D\u5E73\u51ED\u74F6\u8BC4\u5C4F\u5761\u6CFC\u9887\u5A46\u7834\u9B44\u8FEB\u7C95\u5256\u6251\u94FA\u4EC6\u8386\u8461\u83E9\u84B2\u57D4\u6734\u5703\u666E\u6D66\u8C31\u66DD\u7011\u671F\u6B3A\u6816\u621A\u59BB\u4E03\u51C4\u6F06\u67D2\u6C8F\u5176\u68CB\u5947\u6B67\u7566\u5D0E\u8110\u9F50\u65D7\u7948\u7941\u9A91\u8D77\u5C82\u4E5E\u4F01\u542F\u5951\u780C\u5668\u6C14\u8FC4\u5F03\u6C7D\u6CE3\u8BAB\u6390\uFFFD".split("");
      for (j = 0; j != D[198].length; ++j) if (D[198][j].charCodeAt(0) !== 65533) {
        e[D[198][j]] = 50688 + j;
        d[50688 + j] = D[198][j];
      }
      D[199] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u833E\u833F\u8341\u8342\u8344\u8345\u8348\u834A\u834B\u834C\u834D\u834E\u8353\u8355\u8356\u8357\u8358\u8359\u835D\u8362\u8370\u8371\u8372\u8373\u8374\u8375\u8376\u8379\u837A\u837E\u837F\u8380\u8381\u8382\u8383\u8384\u8387\u8388\u838A\u838B\u838C\u838D\u838F\u8390\u8391\u8394\u8395\u8396\u8397\u8399\u839A\u839D\u839F\u83A1\u83A2\u83A3\u83A4\u83A5\u83A6\u83A7\u83AC\u83AD\u83AE\uFFFD\u83AF\u83B5\u83BB\u83BE\u83BF\u83C2\u83C3\u83C4\u83C6\u83C8\u83C9\u83CB\u83CD\u83CE\u83D0\u83D1\u83D2\u83D3\u83D5\u83D7\u83D9\u83DA\u83DB\u83DE\u83E2\u83E3\u83E4\u83E6\u83E7\u83E8\u83EB\u83EC\u83ED\u6070\u6D3D\u7275\u6266\u948E\u94C5\u5343\u8FC1\u7B7E\u4EDF\u8C26\u4E7E\u9ED4\u94B1\u94B3\u524D\u6F5C\u9063\u6D45\u8C34\u5811\u5D4C\u6B20\u6B49\u67AA\u545B\u8154\u7F8C\u5899\u8537\u5F3A\u62A2\u6A47\u9539\u6572\u6084\u6865\u77A7\u4E54\u4FA8\u5DE7\u9798\u64AC\u7FD8\u5CED\u4FCF\u7A8D\u5207\u8304\u4E14\u602F\u7A83\u94A6\u4FB5\u4EB2\u79E6\u7434\u52E4\u82B9\u64D2\u79BD\u5BDD\u6C81\u9752\u8F7B\u6C22\u503E\u537F\u6E05\u64CE\u6674\u6C30\u60C5\u9877\u8BF7\u5E86\u743C\u7A77\u79CB\u4E18\u90B1\u7403\u6C42\u56DA\u914B\u6CC5\u8D8B\u533A\u86C6\u66F2\u8EAF\u5C48\u9A71\u6E20\uFFFD".split("");
      for (j = 0; j != D[199].length; ++j) if (D[199][j].charCodeAt(0) !== 65533) {
        e[D[199][j]] = 50944 + j;
        d[50944 + j] = D[199][j];
      }
      D[200] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u83EE\u83EF\u83F3\u83F4\u83F5\u83F6\u83F7\u83FA\u83FB\u83FC\u83FE\u83FF\u8400\u8402\u8405\u8407\u8408\u8409\u840A\u8410\u8412\u8413\u8414\u8415\u8416\u8417\u8419\u841A\u841B\u841E\u841F\u8420\u8421\u8422\u8423\u8429\u842A\u842B\u842C\u842D\u842E\u842F\u8430\u8432\u8433\u8434\u8435\u8436\u8437\u8439\u843A\u843B\u843E\u843F\u8440\u8441\u8442\u8443\u8444\u8445\u8447\u8448\u8449\uFFFD\u844A\u844B\u844C\u844D\u844E\u844F\u8450\u8452\u8453\u8454\u8455\u8456\u8458\u845D\u845E\u845F\u8460\u8462\u8464\u8465\u8466\u8467\u8468\u846A\u846E\u846F\u8470\u8472\u8474\u8477\u8479\u847B\u847C\u53D6\u5A36\u9F8B\u8DA3\u53BB\u5708\u98A7\u6743\u919B\u6CC9\u5168\u75CA\u62F3\u72AC\u5238\u529D\u7F3A\u7094\u7638\u5374\u9E4A\u69B7\u786E\u96C0\u88D9\u7FA4\u7136\u71C3\u5189\u67D3\u74E4\u58E4\u6518\u56B7\u8BA9\u9976\u6270\u7ED5\u60F9\u70ED\u58EC\u4EC1\u4EBA\u5FCD\u97E7\u4EFB\u8BA4\u5203\u598A\u7EAB\u6254\u4ECD\u65E5\u620E\u8338\u84C9\u8363\u878D\u7194\u6EB6\u5BB9\u7ED2\u5197\u63C9\u67D4\u8089\u8339\u8815\u5112\u5B7A\u5982\u8FB1\u4E73\u6C5D\u5165\u8925\u8F6F\u962E\u854A\u745E\u9510\u95F0\u6DA6\u82E5\u5F31\u6492\u6D12\u8428\u816E\u9CC3\u585E\u8D5B\u4E09\u53C1\uFFFD".split("");
      for (j = 0; j != D[200].length; ++j) if (D[200][j].charCodeAt(0) !== 65533) {
        e[D[200][j]] = 51200 + j;
        d[51200 + j] = D[200][j];
      }
      D[201] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u847D\u847E\u847F\u8480\u8481\u8483\u8484\u8485\u8486\u848A\u848D\u848F\u8490\u8491\u8492\u8493\u8494\u8495\u8496\u8498\u849A\u849B\u849D\u849E\u849F\u84A0\u84A2\u84A3\u84A4\u84A5\u84A6\u84A7\u84A8\u84A9\u84AA\u84AB\u84AC\u84AD\u84AE\u84B0\u84B1\u84B3\u84B5\u84B6\u84B7\u84BB\u84BC\u84BE\u84C0\u84C2\u84C3\u84C5\u84C6\u84C7\u84C8\u84CB\u84CC\u84CE\u84CF\u84D2\u84D4\u84D5\u84D7\uFFFD\u84D8\u84D9\u84DA\u84DB\u84DC\u84DE\u84E1\u84E2\u84E4\u84E7\u84E8\u84E9\u84EA\u84EB\u84ED\u84EE\u84EF\u84F1\u84F2\u84F3\u84F4\u84F5\u84F6\u84F7\u84F8\u84F9\u84FA\u84FB\u84FD\u84FE\u8500\u8501\u8502\u4F1E\u6563\u6851\u55D3\u4E27\u6414\u9A9A\u626B\u5AC2\u745F\u8272\u6DA9\u68EE\u50E7\u838E\u7802\u6740\u5239\u6C99\u7EB1\u50BB\u5565\u715E\u7B5B\u6652\u73CA\u82EB\u6749\u5C71\u5220\u717D\u886B\u95EA\u9655\u64C5\u8D61\u81B3\u5584\u6C55\u6247\u7F2E\u5892\u4F24\u5546\u8D4F\u664C\u4E0A\u5C1A\u88F3\u68A2\u634E\u7A0D\u70E7\u828D\u52FA\u97F6\u5C11\u54E8\u90B5\u7ECD\u5962\u8D4A\u86C7\u820C\u820D\u8D66\u6444\u5C04\u6151\u6D89\u793E\u8BBE\u7837\u7533\u547B\u4F38\u8EAB\u6DF1\u5A20\u7EC5\u795E\u6C88\u5BA1\u5A76\u751A\u80BE\u614E\u6E17\u58F0\u751F\u7525\u7272\u5347\u7EF3\uFFFD".split("");
      for (j = 0; j != D[201].length; ++j) if (D[201][j].charCodeAt(0) !== 65533) {
        e[D[201][j]] = 51456 + j;
        d[51456 + j] = D[201][j];
      }
      D[202] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8503\u8504\u8505\u8506\u8507\u8508\u8509\u850A\u850B\u850D\u850E\u850F\u8510\u8512\u8514\u8515\u8516\u8518\u8519\u851B\u851C\u851D\u851E\u8520\u8522\u8523\u8524\u8525\u8526\u8527\u8528\u8529\u852A\u852D\u852E\u852F\u8530\u8531\u8532\u8533\u8534\u8535\u8536\u853E\u853F\u8540\u8541\u8542\u8544\u8545\u8546\u8547\u854B\u854C\u854D\u854E\u854F\u8550\u8551\u8552\u8553\u8554\u8555\uFFFD\u8557\u8558\u855A\u855B\u855C\u855D\u855F\u8560\u8561\u8562\u8563\u8565\u8566\u8567\u8569\u856A\u856B\u856C\u856D\u856E\u856F\u8570\u8571\u8573\u8575\u8576\u8577\u8578\u857C\u857D\u857F\u8580\u8581\u7701\u76DB\u5269\u80DC\u5723\u5E08\u5931\u72EE\u65BD\u6E7F\u8BD7\u5C38\u8671\u5341\u77F3\u62FE\u65F6\u4EC0\u98DF\u8680\u5B9E\u8BC6\u53F2\u77E2\u4F7F\u5C4E\u9A76\u59CB\u5F0F\u793A\u58EB\u4E16\u67FF\u4E8B\u62ED\u8A93\u901D\u52BF\u662F\u55DC\u566C\u9002\u4ED5\u4F8D\u91CA\u9970\u6C0F\u5E02\u6043\u5BA4\u89C6\u8BD5\u6536\u624B\u9996\u5B88\u5BFF\u6388\u552E\u53D7\u7626\u517D\u852C\u67A2\u68B3\u6B8A\u6292\u8F93\u53D4\u8212\u6DD1\u758F\u4E66\u8D4E\u5B70\u719F\u85AF\u6691\u66D9\u7F72\u8700\u9ECD\u9F20\u5C5E\u672F\u8FF0\u6811\u675F\u620D\u7AD6\u5885\u5EB6\u6570\u6F31\uFFFD".split("");
      for (j = 0; j != D[202].length; ++j) if (D[202][j].charCodeAt(0) !== 65533) {
        e[D[202][j]] = 51712 + j;
        d[51712 + j] = D[202][j];
      }
      D[203] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8582\u8583\u8586\u8588\u8589\u858A\u858B\u858C\u858D\u858E\u8590\u8591\u8592\u8593\u8594\u8595\u8596\u8597\u8598\u8599\u859A\u859D\u859E\u859F\u85A0\u85A1\u85A2\u85A3\u85A5\u85A6\u85A7\u85A9\u85AB\u85AC\u85AD\u85B1\u85B2\u85B3\u85B4\u85B5\u85B6\u85B8\u85BA\u85BB\u85BC\u85BD\u85BE\u85BF\u85C0\u85C2\u85C3\u85C4\u85C5\u85C6\u85C7\u85C8\u85CA\u85CB\u85CC\u85CD\u85CE\u85D1\u85D2\uFFFD\u85D4\u85D6\u85D7\u85D8\u85D9\u85DA\u85DB\u85DD\u85DE\u85DF\u85E0\u85E1\u85E2\u85E3\u85E5\u85E6\u85E7\u85E8\u85EA\u85EB\u85EC\u85ED\u85EE\u85EF\u85F0\u85F1\u85F2\u85F3\u85F4\u85F5\u85F6\u85F7\u85F8\u6055\u5237\u800D\u6454\u8870\u7529\u5E05\u6813\u62F4\u971C\u53CC\u723D\u8C01\u6C34\u7761\u7A0E\u542E\u77AC\u987A\u821C\u8BF4\u7855\u6714\u70C1\u65AF\u6495\u5636\u601D\u79C1\u53F8\u4E1D\u6B7B\u8086\u5BFA\u55E3\u56DB\u4F3A\u4F3C\u9972\u5DF3\u677E\u8038\u6002\u9882\u9001\u5B8B\u8BBC\u8BF5\u641C\u8258\u64DE\u55FD\u82CF\u9165\u4FD7\u7D20\u901F\u7C9F\u50F3\u5851\u6EAF\u5BBF\u8BC9\u8083\u9178\u849C\u7B97\u867D\u968B\u968F\u7EE5\u9AD3\u788E\u5C81\u7A57\u9042\u96A7\u795F\u5B59\u635F\u7B0B\u84D1\u68AD\u5506\u7F29\u7410\u7D22\u9501\u6240\u584C\u4ED6\u5B83\u5979\u5854\uFFFD".split("");
      for (j = 0; j != D[203].length; ++j) if (D[203][j].charCodeAt(0) !== 65533) {
        e[D[203][j]] = 51968 + j;
        d[51968 + j] = D[203][j];
      }
      D[204] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u85F9\u85FA\u85FC\u85FD\u85FE\u8600\u8601\u8602\u8603\u8604\u8606\u8607\u8608\u8609\u860A\u860B\u860C\u860D\u860E\u860F\u8610\u8612\u8613\u8614\u8615\u8617\u8618\u8619\u861A\u861B\u861C\u861D\u861E\u861F\u8620\u8621\u8622\u8623\u8624\u8625\u8626\u8628\u862A\u862B\u862C\u862D\u862E\u862F\u8630\u8631\u8632\u8633\u8634\u8635\u8636\u8637\u8639\u863A\u863B\u863D\u863E\u863F\u8640\uFFFD\u8641\u8642\u8643\u8644\u8645\u8646\u8647\u8648\u8649\u864A\u864B\u864C\u8652\u8653\u8655\u8656\u8657\u8658\u8659\u865B\u865C\u865D\u865F\u8660\u8661\u8663\u8664\u8665\u8666\u8667\u8668\u8669\u866A\u736D\u631E\u8E4B\u8E0F\u80CE\u82D4\u62AC\u53F0\u6CF0\u915E\u592A\u6001\u6C70\u574D\u644A\u8D2A\u762B\u6EE9\u575B\u6A80\u75F0\u6F6D\u8C2D\u8C08\u5766\u6BEF\u8892\u78B3\u63A2\u53F9\u70AD\u6C64\u5858\u642A\u5802\u68E0\u819B\u5510\u7CD6\u5018\u8EBA\u6DCC\u8D9F\u70EB\u638F\u6D9B\u6ED4\u7EE6\u8404\u6843\u9003\u6DD8\u9676\u8BA8\u5957\u7279\u85E4\u817E\u75BC\u8A8A\u68AF\u5254\u8E22\u9511\u63D0\u9898\u8E44\u557C\u4F53\u66FF\u568F\u60D5\u6D95\u5243\u5C49\u5929\u6DFB\u586B\u7530\u751C\u606C\u8214\u8146\u6311\u6761\u8FE2\u773A\u8DF3\u8D34\u94C1\u5E16\u5385\u542C\u70C3\uFFFD".split("");
      for (j = 0; j != D[204].length; ++j) if (D[204][j].charCodeAt(0) !== 65533) {
        e[D[204][j]] = 52224 + j;
        d[52224 + j] = D[204][j];
      }
      D[205] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u866D\u866F\u8670\u8672\u8673\u8674\u8675\u8676\u8677\u8678\u8683\u8684\u8685\u8686\u8687\u8688\u8689\u868E\u868F\u8690\u8691\u8692\u8694\u8696\u8697\u8698\u8699\u869A\u869B\u869E\u869F\u86A0\u86A1\u86A2\u86A5\u86A6\u86AB\u86AD\u86AE\u86B2\u86B3\u86B7\u86B8\u86B9\u86BB\u86BC\u86BD\u86BE\u86BF\u86C1\u86C2\u86C3\u86C5\u86C8\u86CC\u86CD\u86D2\u86D3\u86D5\u86D6\u86D7\u86DA\u86DC\uFFFD\u86DD\u86E0\u86E1\u86E2\u86E3\u86E5\u86E6\u86E7\u86E8\u86EA\u86EB\u86EC\u86EF\u86F5\u86F6\u86F7\u86FA\u86FB\u86FC\u86FD\u86FF\u8701\u8704\u8705\u8706\u870B\u870C\u870E\u870F\u8710\u8711\u8714\u8716\u6C40\u5EF7\u505C\u4EAD\u5EAD\u633A\u8247\u901A\u6850\u916E\u77B3\u540C\u94DC\u5F64\u7AE5\u6876\u6345\u7B52\u7EDF\u75DB\u5077\u6295\u5934\u900F\u51F8\u79C3\u7A81\u56FE\u5F92\u9014\u6D82\u5C60\u571F\u5410\u5154\u6E4D\u56E2\u63A8\u9893\u817F\u8715\u892A\u9000\u541E\u5C6F\u81C0\u62D6\u6258\u8131\u9E35\u9640\u9A6E\u9A7C\u692D\u59A5\u62D3\u553E\u6316\u54C7\u86D9\u6D3C\u5A03\u74E6\u889C\u6B6A\u5916\u8C4C\u5F2F\u6E7E\u73A9\u987D\u4E38\u70F7\u5B8C\u7897\u633D\u665A\u7696\u60CB\u5B9B\u5A49\u4E07\u8155\u6C6A\u738B\u4EA1\u6789\u7F51\u5F80\u65FA\u671B\u5FD8\u5984\u5A01\uFFFD".split("");
      for (j = 0; j != D[205].length; ++j) if (D[205][j].charCodeAt(0) !== 65533) {
        e[D[205][j]] = 52480 + j;
        d[52480 + j] = D[205][j];
      }
      D[206] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8719\u871B\u871D\u871F\u8720\u8724\u8726\u8727\u8728\u872A\u872B\u872C\u872D\u872F\u8730\u8732\u8733\u8735\u8736\u8738\u8739\u873A\u873C\u873D\u8740\u8741\u8742\u8743\u8744\u8745\u8746\u874A\u874B\u874D\u874F\u8750\u8751\u8752\u8754\u8755\u8756\u8758\u875A\u875B\u875C\u875D\u875E\u875F\u8761\u8762\u8766\u8767\u8768\u8769\u876A\u876B\u876C\u876D\u876F\u8771\u8772\u8773\u8775\uFFFD\u8777\u8778\u8779\u877A\u877F\u8780\u8781\u8784\u8786\u8787\u8789\u878A\u878C\u878E\u878F\u8790\u8791\u8792\u8794\u8795\u8796\u8798\u8799\u879A\u879B\u879C\u879D\u879E\u87A0\u87A1\u87A2\u87A3\u87A4\u5DCD\u5FAE\u5371\u97E6\u8FDD\u6845\u56F4\u552F\u60DF\u4E3A\u6F4D\u7EF4\u82C7\u840E\u59D4\u4F1F\u4F2A\u5C3E\u7EAC\u672A\u851A\u5473\u754F\u80C3\u5582\u9B4F\u4F4D\u6E2D\u8C13\u5C09\u6170\u536B\u761F\u6E29\u868A\u6587\u95FB\u7EB9\u543B\u7A33\u7D0A\u95EE\u55E1\u7FC1\u74EE\u631D\u8717\u6DA1\u7A9D\u6211\u65A1\u5367\u63E1\u6C83\u5DEB\u545C\u94A8\u4E4C\u6C61\u8BEC\u5C4B\u65E0\u829C\u68A7\u543E\u5434\u6BCB\u6B66\u4E94\u6342\u5348\u821E\u4F0D\u4FAE\u575E\u620A\u96FE\u6664\u7269\u52FF\u52A1\u609F\u8BEF\u6614\u7199\u6790\u897F\u7852\u77FD\u6670\u563B\u5438\u9521\u727A\uFFFD".split("");
      for (j = 0; j != D[206].length; ++j) if (D[206][j].charCodeAt(0) !== 65533) {
        e[D[206][j]] = 52736 + j;
        d[52736 + j] = D[206][j];
      }
      D[207] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u87A5\u87A6\u87A7\u87A9\u87AA\u87AE\u87B0\u87B1\u87B2\u87B4\u87B6\u87B7\u87B8\u87B9\u87BB\u87BC\u87BE\u87BF\u87C1\u87C2\u87C3\u87C4\u87C5\u87C7\u87C8\u87C9\u87CC\u87CD\u87CE\u87CF\u87D0\u87D4\u87D5\u87D6\u87D7\u87D8\u87D9\u87DA\u87DC\u87DD\u87DE\u87DF\u87E1\u87E2\u87E3\u87E4\u87E6\u87E7\u87E8\u87E9\u87EB\u87EC\u87ED\u87EF\u87F0\u87F1\u87F2\u87F3\u87F4\u87F5\u87F6\u87F7\u87F8\uFFFD\u87FA\u87FB\u87FC\u87FD\u87FF\u8800\u8801\u8802\u8804\u8805\u8806\u8807\u8808\u8809\u880B\u880C\u880D\u880E\u880F\u8810\u8811\u8812\u8814\u8817\u8818\u8819\u881A\u881C\u881D\u881E\u881F\u8820\u8823\u7A00\u606F\u5E0C\u6089\u819D\u5915\u60DC\u7184\u70EF\u6EAA\u6C50\u7280\u6A84\u88AD\u5E2D\u4E60\u5AB3\u559C\u94E3\u6D17\u7CFB\u9699\u620F\u7EC6\u778E\u867E\u5323\u971E\u8F96\u6687\u5CE1\u4FA0\u72ED\u4E0B\u53A6\u590F\u5413\u6380\u9528\u5148\u4ED9\u9C9C\u7EA4\u54B8\u8D24\u8854\u8237\u95F2\u6D8E\u5F26\u5ACC\u663E\u9669\u73B0\u732E\u53BF\u817A\u9985\u7FA1\u5BAA\u9677\u9650\u7EBF\u76F8\u53A2\u9576\u9999\u7BB1\u8944\u6E58\u4E61\u7FD4\u7965\u8BE6\u60F3\u54CD\u4EAB\u9879\u5DF7\u6A61\u50CF\u5411\u8C61\u8427\u785D\u9704\u524A\u54EE\u56A3\u9500\u6D88\u5BB5\u6DC6\u6653\uFFFD".split("");
      for (j = 0; j != D[207].length; ++j) if (D[207][j].charCodeAt(0) !== 65533) {
        e[D[207][j]] = 52992 + j;
        d[52992 + j] = D[207][j];
      }
      D[208] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8824\u8825\u8826\u8827\u8828\u8829\u882A\u882B\u882C\u882D\u882E\u882F\u8830\u8831\u8833\u8834\u8835\u8836\u8837\u8838\u883A\u883B\u883D\u883E\u883F\u8841\u8842\u8843\u8846\u8847\u8848\u8849\u884A\u884B\u884E\u884F\u8850\u8851\u8852\u8853\u8855\u8856\u8858\u885A\u885B\u885C\u885D\u885E\u885F\u8860\u8866\u8867\u886A\u886D\u886F\u8871\u8873\u8874\u8875\u8876\u8878\u8879\u887A\uFFFD\u887B\u887C\u8880\u8883\u8886\u8887\u8889\u888A\u888C\u888E\u888F\u8890\u8891\u8893\u8894\u8895\u8897\u8898\u8899\u889A\u889B\u889D\u889E\u889F\u88A0\u88A1\u88A3\u88A5\u88A6\u88A7\u88A8\u88A9\u88AA\u5C0F\u5B5D\u6821\u8096\u5578\u7B11\u6548\u6954\u4E9B\u6B47\u874E\u978B\u534F\u631F\u643A\u90AA\u659C\u80C1\u8C10\u5199\u68B0\u5378\u87F9\u61C8\u6CC4\u6CFB\u8C22\u5C51\u85AA\u82AF\u950C\u6B23\u8F9B\u65B0\u5FFB\u5FC3\u4FE1\u8845\u661F\u8165\u7329\u60FA\u5174\u5211\u578B\u5F62\u90A2\u884C\u9192\u5E78\u674F\u6027\u59D3\u5144\u51F6\u80F8\u5308\u6C79\u96C4\u718A\u4F11\u4FEE\u7F9E\u673D\u55C5\u9508\u79C0\u8896\u7EE3\u589F\u620C\u9700\u865A\u5618\u987B\u5F90\u8BB8\u84C4\u9157\u53D9\u65ED\u5E8F\u755C\u6064\u7D6E\u5A7F\u7EEA\u7EED\u8F69\u55A7\u5BA3\u60AC\u65CB\u7384\uFFFD".split("");
      for (j = 0; j != D[208].length; ++j) if (D[208][j].charCodeAt(0) !== 65533) {
        e[D[208][j]] = 53248 + j;
        d[53248 + j] = D[208][j];
      }
      D[209] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u88AC\u88AE\u88AF\u88B0\u88B2\u88B3\u88B4\u88B5\u88B6\u88B8\u88B9\u88BA\u88BB\u88BD\u88BE\u88BF\u88C0\u88C3\u88C4\u88C7\u88C8\u88CA\u88CB\u88CC\u88CD\u88CF\u88D0\u88D1\u88D3\u88D6\u88D7\u88DA\u88DB\u88DC\u88DD\u88DE\u88E0\u88E1\u88E6\u88E7\u88E9\u88EA\u88EB\u88EC\u88ED\u88EE\u88EF\u88F2\u88F5\u88F6\u88F7\u88FA\u88FB\u88FD\u88FF\u8900\u8901\u8903\u8904\u8905\u8906\u8907\u8908\uFFFD\u8909\u890B\u890C\u890D\u890E\u890F\u8911\u8914\u8915\u8916\u8917\u8918\u891C\u891D\u891E\u891F\u8920\u8922\u8923\u8924\u8926\u8927\u8928\u8929\u892C\u892D\u892E\u892F\u8931\u8932\u8933\u8935\u8937\u9009\u7663\u7729\u7EDA\u9774\u859B\u5B66\u7A74\u96EA\u8840\u52CB\u718F\u5FAA\u65EC\u8BE2\u5BFB\u9A6F\u5DE1\u6B89\u6C5B\u8BAD\u8BAF\u900A\u8FC5\u538B\u62BC\u9E26\u9E2D\u5440\u4E2B\u82BD\u7259\u869C\u5D16\u8859\u6DAF\u96C5\u54D1\u4E9A\u8BB6\u7109\u54BD\u9609\u70DF\u6DF9\u76D0\u4E25\u7814\u8712\u5CA9\u5EF6\u8A00\u989C\u960E\u708E\u6CBF\u5944\u63A9\u773C\u884D\u6F14\u8273\u5830\u71D5\u538C\u781A\u96C1\u5501\u5F66\u7130\u5BB4\u8C1A\u9A8C\u6B83\u592E\u9E2F\u79E7\u6768\u626C\u4F6F\u75A1\u7F8A\u6D0B\u9633\u6C27\u4EF0\u75D2\u517B\u6837\u6F3E\u9080\u8170\u5996\u7476\uFFFD".split("");
      for (j = 0; j != D[209].length; ++j) if (D[209][j].charCodeAt(0) !== 65533) {
        e[D[209][j]] = 53504 + j;
        d[53504 + j] = D[209][j];
      }
      D[210] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8938\u8939\u893A\u893B\u893C\u893D\u893E\u893F\u8940\u8942\u8943\u8945\u8946\u8947\u8948\u8949\u894A\u894B\u894C\u894D\u894E\u894F\u8950\u8951\u8952\u8953\u8954\u8955\u8956\u8957\u8958\u8959\u895A\u895B\u895C\u895D\u8960\u8961\u8962\u8963\u8964\u8965\u8967\u8968\u8969\u896A\u896B\u896C\u896D\u896E\u896F\u8970\u8971\u8972\u8973\u8974\u8975\u8976\u8977\u8978\u8979\u897A\u897C\uFFFD\u897D\u897E\u8980\u8982\u8984\u8985\u8987\u8988\u8989\u898A\u898B\u898C\u898D\u898E\u898F\u8990\u8991\u8992\u8993\u8994\u8995\u8996\u8997\u8998\u8999\u899A\u899B\u899C\u899D\u899E\u899F\u89A0\u89A1\u6447\u5C27\u9065\u7A91\u8C23\u59DA\u54AC\u8200\u836F\u8981\u8000\u6930\u564E\u8036\u7237\u91CE\u51B6\u4E5F\u9875\u6396\u4E1A\u53F6\u66F3\u814B\u591C\u6DB2\u4E00\u58F9\u533B\u63D6\u94F1\u4F9D\u4F0A\u8863\u9890\u5937\u9057\u79FB\u4EEA\u80F0\u7591\u6C82\u5B9C\u59E8\u5F5D\u6905\u8681\u501A\u5DF2\u4E59\u77E3\u4EE5\u827A\u6291\u6613\u9091\u5C79\u4EBF\u5F79\u81C6\u9038\u8084\u75AB\u4EA6\u88D4\u610F\u6BC5\u5FC6\u4E49\u76CA\u6EA2\u8BE3\u8BAE\u8C0A\u8BD1\u5F02\u7FFC\u7FCC\u7ECE\u8335\u836B\u56E0\u6BB7\u97F3\u9634\u59FB\u541F\u94F6\u6DEB\u5BC5\u996E\u5C39\u5F15\u9690\uFFFD".split("");
      for (j = 0; j != D[210].length; ++j) if (D[210][j].charCodeAt(0) !== 65533) {
        e[D[210][j]] = 53760 + j;
        d[53760 + j] = D[210][j];
      }
      D[211] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u89A2\u89A3\u89A4\u89A5\u89A6\u89A7\u89A8\u89A9\u89AA\u89AB\u89AC\u89AD\u89AE\u89AF\u89B0\u89B1\u89B2\u89B3\u89B4\u89B5\u89B6\u89B7\u89B8\u89B9\u89BA\u89BB\u89BC\u89BD\u89BE\u89BF\u89C0\u89C3\u89CD\u89D3\u89D4\u89D5\u89D7\u89D8\u89D9\u89DB\u89DD\u89DF\u89E0\u89E1\u89E2\u89E4\u89E7\u89E8\u89E9\u89EA\u89EC\u89ED\u89EE\u89F0\u89F1\u89F2\u89F4\u89F5\u89F6\u89F7\u89F8\u89F9\u89FA\uFFFD\u89FB\u89FC\u89FD\u89FE\u89FF\u8A01\u8A02\u8A03\u8A04\u8A05\u8A06\u8A08\u8A09\u8A0A\u8A0B\u8A0C\u8A0D\u8A0E\u8A0F\u8A10\u8A11\u8A12\u8A13\u8A14\u8A15\u8A16\u8A17\u8A18\u8A19\u8A1A\u8A1B\u8A1C\u8A1D\u5370\u82F1\u6A31\u5A74\u9E70\u5E94\u7F28\u83B9\u8424\u8425\u8367\u8747\u8FCE\u8D62\u76C8\u5F71\u9896\u786C\u6620\u54DF\u62E5\u4F63\u81C3\u75C8\u5EB8\u96CD\u8E0A\u86F9\u548F\u6CF3\u6D8C\u6C38\u607F\u52C7\u7528\u5E7D\u4F18\u60A0\u5FE7\u5C24\u7531\u90AE\u94C0\u72B9\u6CB9\u6E38\u9149\u6709\u53CB\u53F3\u4F51\u91C9\u8BF1\u53C8\u5E7C\u8FC2\u6DE4\u4E8E\u76C2\u6986\u865E\u611A\u8206\u4F59\u4FDE\u903E\u9C7C\u6109\u6E1D\u6E14\u9685\u4E88\u5A31\u96E8\u4E0E\u5C7F\u79B9\u5B87\u8BED\u7FBD\u7389\u57DF\u828B\u90C1\u5401\u9047\u55BB\u5CEA\u5FA1\u6108\u6B32\u72F1\u80B2\u8A89\uFFFD".split("");
      for (j = 0; j != D[211].length; ++j) if (D[211][j].charCodeAt(0) !== 65533) {
        e[D[211][j]] = 54016 + j;
        d[54016 + j] = D[211][j];
      }
      D[212] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8A1E\u8A1F\u8A20\u8A21\u8A22\u8A23\u8A24\u8A25\u8A26\u8A27\u8A28\u8A29\u8A2A\u8A2B\u8A2C\u8A2D\u8A2E\u8A2F\u8A30\u8A31\u8A32\u8A33\u8A34\u8A35\u8A36\u8A37\u8A38\u8A39\u8A3A\u8A3B\u8A3C\u8A3D\u8A3F\u8A40\u8A41\u8A42\u8A43\u8A44\u8A45\u8A46\u8A47\u8A49\u8A4A\u8A4B\u8A4C\u8A4D\u8A4E\u8A4F\u8A50\u8A51\u8A52\u8A53\u8A54\u8A55\u8A56\u8A57\u8A58\u8A59\u8A5A\u8A5B\u8A5C\u8A5D\u8A5E\uFFFD\u8A5F\u8A60\u8A61\u8A62\u8A63\u8A64\u8A65\u8A66\u8A67\u8A68\u8A69\u8A6A\u8A6B\u8A6C\u8A6D\u8A6E\u8A6F\u8A70\u8A71\u8A72\u8A73\u8A74\u8A75\u8A76\u8A77\u8A78\u8A7A\u8A7B\u8A7C\u8A7D\u8A7E\u8A7F\u8A80\u6D74\u5BD3\u88D5\u9884\u8C6B\u9A6D\u9E33\u6E0A\u51A4\u5143\u57A3\u8881\u539F\u63F4\u8F95\u56ED\u5458\u5706\u733F\u6E90\u7F18\u8FDC\u82D1\u613F\u6028\u9662\u66F0\u7EA6\u8D8A\u8DC3\u94A5\u5CB3\u7CA4\u6708\u60A6\u9605\u8018\u4E91\u90E7\u5300\u9668\u5141\u8FD0\u8574\u915D\u6655\u97F5\u5B55\u531D\u7838\u6742\u683D\u54C9\u707E\u5BB0\u8F7D\u518D\u5728\u54B1\u6512\u6682\u8D5E\u8D43\u810F\u846C\u906D\u7CDF\u51FF\u85FB\u67A3\u65E9\u6FA1\u86A4\u8E81\u566A\u9020\u7682\u7076\u71E5\u8D23\u62E9\u5219\u6CFD\u8D3C\u600E\u589E\u618E\u66FE\u8D60\u624E\u55B3\u6E23\u672D\u8F67\uFFFD".split("");
      for (j = 0; j != D[212].length; ++j) if (D[212][j].charCodeAt(0) !== 65533) {
        e[D[212][j]] = 54272 + j;
        d[54272 + j] = D[212][j];
      }
      D[213] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8A81\u8A82\u8A83\u8A84\u8A85\u8A86\u8A87\u8A88\u8A8B\u8A8C\u8A8D\u8A8E\u8A8F\u8A90\u8A91\u8A92\u8A94\u8A95\u8A96\u8A97\u8A98\u8A99\u8A9A\u8A9B\u8A9C\u8A9D\u8A9E\u8A9F\u8AA0\u8AA1\u8AA2\u8AA3\u8AA4\u8AA5\u8AA6\u8AA7\u8AA8\u8AA9\u8AAA\u8AAB\u8AAC\u8AAD\u8AAE\u8AAF\u8AB0\u8AB1\u8AB2\u8AB3\u8AB4\u8AB5\u8AB6\u8AB7\u8AB8\u8AB9\u8ABA\u8ABB\u8ABC\u8ABD\u8ABE\u8ABF\u8AC0\u8AC1\u8AC2\uFFFD\u8AC3\u8AC4\u8AC5\u8AC6\u8AC7\u8AC8\u8AC9\u8ACA\u8ACB\u8ACC\u8ACD\u8ACE\u8ACF\u8AD0\u8AD1\u8AD2\u8AD3\u8AD4\u8AD5\u8AD6\u8AD7\u8AD8\u8AD9\u8ADA\u8ADB\u8ADC\u8ADD\u8ADE\u8ADF\u8AE0\u8AE1\u8AE2\u8AE3\u94E1\u95F8\u7728\u6805\u69A8\u548B\u4E4D\u70B8\u8BC8\u6458\u658B\u5B85\u7A84\u503A\u5BE8\u77BB\u6BE1\u8A79\u7C98\u6CBE\u76CF\u65A9\u8F97\u5D2D\u5C55\u8638\u6808\u5360\u6218\u7AD9\u6E5B\u7EFD\u6A1F\u7AE0\u5F70\u6F33\u5F20\u638C\u6DA8\u6756\u4E08\u5E10\u8D26\u4ED7\u80C0\u7634\u969C\u62DB\u662D\u627E\u6CBC\u8D75\u7167\u7F69\u5146\u8087\u53EC\u906E\u6298\u54F2\u86F0\u8F99\u8005\u9517\u8517\u8FD9\u6D59\u73CD\u659F\u771F\u7504\u7827\u81FB\u8D1E\u9488\u4FA6\u6795\u75B9\u8BCA\u9707\u632F\u9547\u9635\u84B8\u6323\u7741\u5F81\u72F0\u4E89\u6014\u6574\u62EF\u6B63\u653F\uFFFD".split("");
      for (j = 0; j != D[213].length; ++j) if (D[213][j].charCodeAt(0) !== 65533) {
        e[D[213][j]] = 54528 + j;
        d[54528 + j] = D[213][j];
      }
      D[214] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8\u8AE9\u8AEA\u8AEB\u8AEC\u8AED\u8AEE\u8AEF\u8AF0\u8AF1\u8AF2\u8AF3\u8AF4\u8AF5\u8AF6\u8AF7\u8AF8\u8AF9\u8AFA\u8AFB\u8AFC\u8AFD\u8AFE\u8AFF\u8B00\u8B01\u8B02\u8B03\u8B04\u8B05\u8B06\u8B08\u8B09\u8B0A\u8B0B\u8B0C\u8B0D\u8B0E\u8B0F\u8B10\u8B11\u8B12\u8B13\u8B14\u8B15\u8B16\u8B17\u8B18\u8B19\u8B1A\u8B1B\u8B1C\u8B1D\u8B1E\u8B1F\u8B20\u8B21\u8B22\u8B23\uFFFD\u8B24\u8B25\u8B27\u8B28\u8B29\u8B2A\u8B2B\u8B2C\u8B2D\u8B2E\u8B2F\u8B30\u8B31\u8B32\u8B33\u8B34\u8B35\u8B36\u8B37\u8B38\u8B39\u8B3A\u8B3B\u8B3C\u8B3D\u8B3E\u8B3F\u8B40\u8B41\u8B42\u8B43\u8B44\u8B45\u5E27\u75C7\u90D1\u8BC1\u829D\u679D\u652F\u5431\u8718\u77E5\u80A2\u8102\u6C41\u4E4B\u7EC7\u804C\u76F4\u690D\u6B96\u6267\u503C\u4F84\u5740\u6307\u6B62\u8DBE\u53EA\u65E8\u7EB8\u5FD7\u631A\u63B7\u81F3\u81F4\u7F6E\u5E1C\u5CD9\u5236\u667A\u79E9\u7A1A\u8D28\u7099\u75D4\u6EDE\u6CBB\u7A92\u4E2D\u76C5\u5FE0\u949F\u8877\u7EC8\u79CD\u80BF\u91CD\u4EF2\u4F17\u821F\u5468\u5DDE\u6D32\u8BCC\u7CA5\u8F74\u8098\u5E1A\u5492\u76B1\u5B99\u663C\u9AA4\u73E0\u682A\u86DB\u6731\u732A\u8BF8\u8BDB\u9010\u7AF9\u70DB\u716E\u62C4\u77A9\u5631\u4E3B\u8457\u67F1\u52A9\u86C0\u8D2E\u94F8\u7B51\uFFFD".split("");
      for (j = 0; j != D[214].length; ++j) if (D[214][j].charCodeAt(0) !== 65533) {
        e[D[214][j]] = 54784 + j;
        d[54784 + j] = D[214][j];
      }
      D[215] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8B46\u8B47\u8B48\u8B49\u8B4A\u8B4B\u8B4C\u8B4D\u8B4E\u8B4F\u8B50\u8B51\u8B52\u8B53\u8B54\u8B55\u8B56\u8B57\u8B58\u8B59\u8B5A\u8B5B\u8B5C\u8B5D\u8B5E\u8B5F\u8B60\u8B61\u8B62\u8B63\u8B64\u8B65\u8B67\u8B68\u8B69\u8B6A\u8B6B\u8B6D\u8B6E\u8B6F\u8B70\u8B71\u8B72\u8B73\u8B74\u8B75\u8B76\u8B77\u8B78\u8B79\u8B7A\u8B7B\u8B7C\u8B7D\u8B7E\u8B7F\u8B80\u8B81\u8B82\u8B83\u8B84\u8B85\u8B86\uFFFD\u8B87\u8B88\u8B89\u8B8A\u8B8B\u8B8C\u8B8D\u8B8E\u8B8F\u8B90\u8B91\u8B92\u8B93\u8B94\u8B95\u8B96\u8B97\u8B98\u8B99\u8B9A\u8B9B\u8B9C\u8B9D\u8B9E\u8B9F\u8BAC\u8BB1\u8BBB\u8BC7\u8BD0\u8BEA\u8C09\u8C1E\u4F4F\u6CE8\u795D\u9A7B\u6293\u722A\u62FD\u4E13\u7816\u8F6C\u64B0\u8D5A\u7BC6\u6869\u5E84\u88C5\u5986\u649E\u58EE\u72B6\u690E\u9525\u8FFD\u8D58\u5760\u7F00\u8C06\u51C6\u6349\u62D9\u5353\u684C\u7422\u8301\u914C\u5544\u7740\u707C\u6D4A\u5179\u54A8\u8D44\u59FF\u6ECB\u6DC4\u5B5C\u7D2B\u4ED4\u7C7D\u6ED3\u5B50\u81EA\u6E0D\u5B57\u9B03\u68D5\u8E2A\u5B97\u7EFC\u603B\u7EB5\u90B9\u8D70\u594F\u63CD\u79DF\u8DB3\u5352\u65CF\u7956\u8BC5\u963B\u7EC4\u94BB\u7E82\u5634\u9189\u6700\u7F6A\u5C0A\u9075\u6628\u5DE6\u4F50\u67DE\u505A\u4F5C\u5750\u5EA7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[215].length; ++j) if (D[215][j].charCodeAt(0) !== 65533) {
        e[D[215][j]] = 55040 + j;
        d[55040 + j] = D[215][j];
      }
      D[216] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8C38\u8C39\u8C3A\u8C3B\u8C3C\u8C3D\u8C3E\u8C3F\u8C40\u8C42\u8C43\u8C44\u8C45\u8C48\u8C4A\u8C4B\u8C4D\u8C4E\u8C4F\u8C50\u8C51\u8C52\u8C53\u8C54\u8C56\u8C57\u8C58\u8C59\u8C5B\u8C5C\u8C5D\u8C5E\u8C5F\u8C60\u8C63\u8C64\u8C65\u8C66\u8C67\u8C68\u8C69\u8C6C\u8C6D\u8C6E\u8C6F\u8C70\u8C71\u8C72\u8C74\u8C75\u8C76\u8C77\u8C7B\u8C7C\u8C7D\u8C7E\u8C7F\u8C80\u8C81\u8C83\u8C84\u8C86\u8C87\uFFFD\u8C88\u8C8B\u8C8D\u8C8E\u8C8F\u8C90\u8C91\u8C92\u8C93\u8C95\u8C96\u8C97\u8C99\u8C9A\u8C9B\u8C9C\u8C9D\u8C9E\u8C9F\u8CA0\u8CA1\u8CA2\u8CA3\u8CA4\u8CA5\u8CA6\u8CA7\u8CA8\u8CA9\u8CAA\u8CAB\u8CAC\u8CAD\u4E8D\u4E0C\u5140\u4E10\u5EFF\u5345\u4E15\u4E98\u4E1E\u9B32\u5B6C\u5669\u4E28\u79BA\u4E3F\u5315\u4E47\u592D\u723B\u536E\u6C10\u56DF\u80E4\u9997\u6BD3\u777E\u9F17\u4E36\u4E9F\u9F10\u4E5C\u4E69\u4E93\u8288\u5B5B\u556C\u560F\u4EC4\u538D\u539D\u53A3\u53A5\u53AE\u9765\u8D5D\u531A\u53F5\u5326\u532E\u533E\u8D5C\u5366\u5363\u5202\u5208\u520E\u522D\u5233\u523F\u5240\u524C\u525E\u5261\u525C\u84AF\u527D\u5282\u5281\u5290\u5293\u5182\u7F54\u4EBB\u4EC3\u4EC9\u4EC2\u4EE8\u4EE1\u4EEB\u4EDE\u4F1B\u4EF3\u4F22\u4F64\u4EF5\u4F25\u4F27\u4F09\u4F2B\u4F5E\u4F67\u6538\u4F5A\u4F5D\uFFFD".split("");
      for (j = 0; j != D[216].length; ++j) if (D[216][j].charCodeAt(0) !== 65533) {
        e[D[216][j]] = 55296 + j;
        d[55296 + j] = D[216][j];
      }
      D[217] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8CAE\u8CAF\u8CB0\u8CB1\u8CB2\u8CB3\u8CB4\u8CB5\u8CB6\u8CB7\u8CB8\u8CB9\u8CBA\u8CBB\u8CBC\u8CBD\u8CBE\u8CBF\u8CC0\u8CC1\u8CC2\u8CC3\u8CC4\u8CC5\u8CC6\u8CC7\u8CC8\u8CC9\u8CCA\u8CCB\u8CCC\u8CCD\u8CCE\u8CCF\u8CD0\u8CD1\u8CD2\u8CD3\u8CD4\u8CD5\u8CD6\u8CD7\u8CD8\u8CD9\u8CDA\u8CDB\u8CDC\u8CDD\u8CDE\u8CDF\u8CE0\u8CE1\u8CE2\u8CE3\u8CE4\u8CE5\u8CE6\u8CE7\u8CE8\u8CE9\u8CEA\u8CEB\u8CEC\uFFFD\u8CED\u8CEE\u8CEF\u8CF0\u8CF1\u8CF2\u8CF3\u8CF4\u8CF5\u8CF6\u8CF7\u8CF8\u8CF9\u8CFA\u8CFB\u8CFC\u8CFD\u8CFE\u8CFF\u8D00\u8D01\u8D02\u8D03\u8D04\u8D05\u8D06\u8D07\u8D08\u8D09\u8D0A\u8D0B\u8D0C\u8D0D\u4F5F\u4F57\u4F32\u4F3D\u4F76\u4F74\u4F91\u4F89\u4F83\u4F8F\u4F7E\u4F7B\u4FAA\u4F7C\u4FAC\u4F94\u4FE6\u4FE8\u4FEA\u4FC5\u4FDA\u4FE3\u4FDC\u4FD1\u4FDF\u4FF8\u5029\u504C\u4FF3\u502C\u500F\u502E\u502D\u4FFE\u501C\u500C\u5025\u5028\u507E\u5043\u5055\u5048\u504E\u506C\u507B\u50A5\u50A7\u50A9\u50BA\u50D6\u5106\u50ED\u50EC\u50E6\u50EE\u5107\u510B\u4EDD\u6C3D\u4F58\u4F65\u4FCE\u9FA0\u6C46\u7C74\u516E\u5DFD\u9EC9\u9998\u5181\u5914\u52F9\u530D\u8A07\u5310\u51EB\u5919\u5155\u4EA0\u5156\u4EB3\u886E\u88A4\u4EB5\u8114\u88D2\u7980\u5B34\u8803\u7FB8\u51AB\u51B1\u51BD\u51BC\uFFFD".split("");
      for (j = 0; j != D[217].length; ++j) if (D[217][j].charCodeAt(0) !== 65533) {
        e[D[217][j]] = 55552 + j;
        d[55552 + j] = D[217][j];
      }
      D[218] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8D0E\u8D0F\u8D10\u8D11\u8D12\u8D13\u8D14\u8D15\u8D16\u8D17\u8D18\u8D19\u8D1A\u8D1B\u8D1C\u8D20\u8D51\u8D52\u8D57\u8D5F\u8D65\u8D68\u8D69\u8D6A\u8D6C\u8D6E\u8D6F\u8D71\u8D72\u8D78\u8D79\u8D7A\u8D7B\u8D7C\u8D7D\u8D7E\u8D7F\u8D80\u8D82\u8D83\u8D86\u8D87\u8D88\u8D89\u8D8C\u8D8D\u8D8E\u8D8F\u8D90\u8D92\u8D93\u8D95\u8D96\u8D97\u8D98\u8D99\u8D9A\u8D9B\u8D9C\u8D9D\u8D9E\u8DA0\u8DA1\uFFFD\u8DA2\u8DA4\u8DA5\u8DA6\u8DA7\u8DA8\u8DA9\u8DAA\u8DAB\u8DAC\u8DAD\u8DAE\u8DAF\u8DB0\u8DB2\u8DB6\u8DB7\u8DB9\u8DBB\u8DBD\u8DC0\u8DC1\u8DC2\u8DC5\u8DC7\u8DC8\u8DC9\u8DCA\u8DCD\u8DD0\u8DD2\u8DD3\u8DD4\u51C7\u5196\u51A2\u51A5\u8BA0\u8BA6\u8BA7\u8BAA\u8BB4\u8BB5\u8BB7\u8BC2\u8BC3\u8BCB\u8BCF\u8BCE\u8BD2\u8BD3\u8BD4\u8BD6\u8BD8\u8BD9\u8BDC\u8BDF\u8BE0\u8BE4\u8BE8\u8BE9\u8BEE\u8BF0\u8BF3\u8BF6\u8BF9\u8BFC\u8BFF\u8C00\u8C02\u8C04\u8C07\u8C0C\u8C0F\u8C11\u8C12\u8C14\u8C15\u8C16\u8C19\u8C1B\u8C18\u8C1D\u8C1F\u8C20\u8C21\u8C25\u8C27\u8C2A\u8C2B\u8C2E\u8C2F\u8C32\u8C33\u8C35\u8C36\u5369\u537A\u961D\u9622\u9621\u9631\u962A\u963D\u963C\u9642\u9649\u9654\u965F\u9667\u966C\u9672\u9674\u9688\u968D\u9697\u96B0\u9097\u909B\u909D\u9099\u90AC\u90A1\u90B4\u90B3\u90B6\u90BA\uFFFD".split("");
      for (j = 0; j != D[218].length; ++j) if (D[218][j].charCodeAt(0) !== 65533) {
        e[D[218][j]] = 55808 + j;
        d[55808 + j] = D[218][j];
      }
      D[219] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8DD5\u8DD8\u8DD9\u8DDC\u8DE0\u8DE1\u8DE2\u8DE5\u8DE6\u8DE7\u8DE9\u8DED\u8DEE\u8DF0\u8DF1\u8DF2\u8DF4\u8DF6\u8DFC\u8DFE\u8DFF\u8E00\u8E01\u8E02\u8E03\u8E04\u8E06\u8E07\u8E08\u8E0B\u8E0D\u8E0E\u8E10\u8E11\u8E12\u8E13\u8E15\u8E16\u8E17\u8E18\u8E19\u8E1A\u8E1B\u8E1C\u8E20\u8E21\u8E24\u8E25\u8E26\u8E27\u8E28\u8E2B\u8E2D\u8E30\u8E32\u8E33\u8E34\u8E36\u8E37\u8E38\u8E3B\u8E3C\u8E3E\uFFFD\u8E3F\u8E43\u8E45\u8E46\u8E4C\u8E4D\u8E4E\u8E4F\u8E50\u8E53\u8E54\u8E55\u8E56\u8E57\u8E58\u8E5A\u8E5B\u8E5C\u8E5D\u8E5E\u8E5F\u8E60\u8E61\u8E62\u8E63\u8E64\u8E65\u8E67\u8E68\u8E6A\u8E6B\u8E6E\u8E71\u90B8\u90B0\u90CF\u90C5\u90BE\u90D0\u90C4\u90C7\u90D3\u90E6\u90E2\u90DC\u90D7\u90DB\u90EB\u90EF\u90FE\u9104\u9122\u911E\u9123\u9131\u912F\u9139\u9143\u9146\u520D\u5942\u52A2\u52AC\u52AD\u52BE\u54FF\u52D0\u52D6\u52F0\u53DF\u71EE\u77CD\u5EF4\u51F5\u51FC\u9B2F\u53B6\u5F01\u755A\u5DEF\u574C\u57A9\u57A1\u587E\u58BC\u58C5\u58D1\u5729\u572C\u572A\u5733\u5739\u572E\u572F\u575C\u573B\u5742\u5769\u5785\u576B\u5786\u577C\u577B\u5768\u576D\u5776\u5773\u57AD\u57A4\u578C\u57B2\u57CF\u57A7\u57B4\u5793\u57A0\u57D5\u57D8\u57DA\u57D9\u57D2\u57B8\u57F4\u57EF\u57F8\u57E4\u57DD\uFFFD".split("");
      for (j = 0; j != D[219].length; ++j) if (D[219][j].charCodeAt(0) !== 65533) {
        e[D[219][j]] = 56064 + j;
        d[56064 + j] = D[219][j];
      }
      D[220] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8E73\u8E75\u8E77\u8E78\u8E79\u8E7A\u8E7B\u8E7D\u8E7E\u8E80\u8E82\u8E83\u8E84\u8E86\u8E88\u8E89\u8E8A\u8E8B\u8E8C\u8E8D\u8E8E\u8E91\u8E92\u8E93\u8E95\u8E96\u8E97\u8E98\u8E99\u8E9A\u8E9B\u8E9D\u8E9F\u8EA0\u8EA1\u8EA2\u8EA3\u8EA4\u8EA5\u8EA6\u8EA7\u8EA8\u8EA9\u8EAA\u8EAD\u8EAE\u8EB0\u8EB1\u8EB3\u8EB4\u8EB5\u8EB6\u8EB7\u8EB8\u8EB9\u8EBB\u8EBC\u8EBD\u8EBE\u8EBF\u8EC0\u8EC1\u8EC2\uFFFD\u8EC3\u8EC4\u8EC5\u8EC6\u8EC7\u8EC8\u8EC9\u8ECA\u8ECB\u8ECC\u8ECD\u8ECF\u8ED0\u8ED1\u8ED2\u8ED3\u8ED4\u8ED5\u8ED6\u8ED7\u8ED8\u8ED9\u8EDA\u8EDB\u8EDC\u8EDD\u8EDE\u8EDF\u8EE0\u8EE1\u8EE2\u8EE3\u8EE4\u580B\u580D\u57FD\u57ED\u5800\u581E\u5819\u5844\u5820\u5865\u586C\u5881\u5889\u589A\u5880\u99A8\u9F19\u61FF\u8279\u827D\u827F\u828F\u828A\u82A8\u8284\u828E\u8291\u8297\u8299\u82AB\u82B8\u82BE\u82B0\u82C8\u82CA\u82E3\u8298\u82B7\u82AE\u82CB\u82CC\u82C1\u82A9\u82B4\u82A1\u82AA\u829F\u82C4\u82CE\u82A4\u82E1\u8309\u82F7\u82E4\u830F\u8307\u82DC\u82F4\u82D2\u82D8\u830C\u82FB\u82D3\u8311\u831A\u8306\u8314\u8315\u82E0\u82D5\u831C\u8351\u835B\u835C\u8308\u8392\u833C\u8334\u8331\u839B\u835E\u832F\u834F\u8347\u8343\u835F\u8340\u8317\u8360\u832D\u833A\u8333\u8366\u8365\uFFFD".split("");
      for (j = 0; j != D[220].length; ++j) if (D[220][j].charCodeAt(0) !== 65533) {
        e[D[220][j]] = 56320 + j;
        d[56320 + j] = D[220][j];
      }
      D[221] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8EE5\u8EE6\u8EE7\u8EE8\u8EE9\u8EEA\u8EEB\u8EEC\u8EED\u8EEE\u8EEF\u8EF0\u8EF1\u8EF2\u8EF3\u8EF4\u8EF5\u8EF6\u8EF7\u8EF8\u8EF9\u8EFA\u8EFB\u8EFC\u8EFD\u8EFE\u8EFF\u8F00\u8F01\u8F02\u8F03\u8F04\u8F05\u8F06\u8F07\u8F08\u8F09\u8F0A\u8F0B\u8F0C\u8F0D\u8F0E\u8F0F\u8F10\u8F11\u8F12\u8F13\u8F14\u8F15\u8F16\u8F17\u8F18\u8F19\u8F1A\u8F1B\u8F1C\u8F1D\u8F1E\u8F1F\u8F20\u8F21\u8F22\u8F23\uFFFD\u8F24\u8F25\u8F26\u8F27\u8F28\u8F29\u8F2A\u8F2B\u8F2C\u8F2D\u8F2E\u8F2F\u8F30\u8F31\u8F32\u8F33\u8F34\u8F35\u8F36\u8F37\u8F38\u8F39\u8F3A\u8F3B\u8F3C\u8F3D\u8F3E\u8F3F\u8F40\u8F41\u8F42\u8F43\u8F44\u8368\u831B\u8369\u836C\u836A\u836D\u836E\u83B0\u8378\u83B3\u83B4\u83A0\u83AA\u8393\u839C\u8385\u837C\u83B6\u83A9\u837D\u83B8\u837B\u8398\u839E\u83A8\u83BA\u83BC\u83C1\u8401\u83E5\u83D8\u5807\u8418\u840B\u83DD\u83FD\u83D6\u841C\u8438\u8411\u8406\u83D4\u83DF\u840F\u8403\u83F8\u83F9\u83EA\u83C5\u83C0\u8426\u83F0\u83E1\u845C\u8451\u845A\u8459\u8473\u8487\u8488\u847A\u8489\u8478\u843C\u8446\u8469\u8476\u848C\u848E\u8431\u846D\u84C1\u84CD\u84D0\u84E6\u84BD\u84D3\u84CA\u84BF\u84BA\u84E0\u84A1\u84B9\u84B4\u8497\u84E5\u84E3\u850C\u750D\u8538\u84F0\u8539\u851F\u853A\uFFFD".split("");
      for (j = 0; j != D[221].length; ++j) if (D[221][j].charCodeAt(0) !== 65533) {
        e[D[221][j]] = 56576 + j;
        d[56576 + j] = D[221][j];
      }
      D[222] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8F45\u8F46\u8F47\u8F48\u8F49\u8F4A\u8F4B\u8F4C\u8F4D\u8F4E\u8F4F\u8F50\u8F51\u8F52\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58\u8F59\u8F5A\u8F5B\u8F5C\u8F5D\u8F5E\u8F5F\u8F60\u8F61\u8F62\u8F63\u8F64\u8F65\u8F6A\u8F80\u8F8C\u8F92\u8F9D\u8FA0\u8FA1\u8FA2\u8FA4\u8FA5\u8FA6\u8FA7\u8FAA\u8FAC\u8FAD\u8FAE\u8FAF\u8FB2\u8FB3\u8FB4\u8FB5\u8FB7\u8FB8\u8FBA\u8FBB\u8FBC\u8FBF\u8FC0\u8FC3\u8FC6\uFFFD\u8FC9\u8FCA\u8FCB\u8FCC\u8FCD\u8FCF\u8FD2\u8FD6\u8FD7\u8FDA\u8FE0\u8FE1\u8FE3\u8FE7\u8FEC\u8FEF\u8FF1\u8FF2\u8FF4\u8FF5\u8FF6\u8FFA\u8FFB\u8FFC\u8FFE\u8FFF\u9007\u9008\u900C\u900E\u9013\u9015\u9018\u8556\u853B\u84FF\u84FC\u8559\u8548\u8568\u8564\u855E\u857A\u77A2\u8543\u8572\u857B\u85A4\u85A8\u8587\u858F\u8579\u85AE\u859C\u8585\u85B9\u85B7\u85B0\u85D3\u85C1\u85DC\u85FF\u8627\u8605\u8629\u8616\u863C\u5EFE\u5F08\u593C\u5941\u8037\u5955\u595A\u5958\u530F\u5C22\u5C25\u5C2C\u5C34\u624C\u626A\u629F\u62BB\u62CA\u62DA\u62D7\u62EE\u6322\u62F6\u6339\u634B\u6343\u63AD\u63F6\u6371\u637A\u638E\u63B4\u636D\u63AC\u638A\u6369\u63AE\u63BC\u63F2\u63F8\u63E0\u63FF\u63C4\u63DE\u63CE\u6452\u63C6\u63BE\u6445\u6441\u640B\u641B\u6420\u640C\u6426\u6421\u645E\u6484\u646D\u6496\uFFFD".split("");
      for (j = 0; j != D[222].length; ++j) if (D[222][j].charCodeAt(0) !== 65533) {
        e[D[222][j]] = 56832 + j;
        d[56832 + j] = D[222][j];
      }
      D[223] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9019\u901C\u9023\u9024\u9025\u9027\u9028\u9029\u902A\u902B\u902C\u9030\u9031\u9032\u9033\u9034\u9037\u9039\u903A\u903D\u903F\u9040\u9043\u9045\u9046\u9048\u9049\u904A\u904B\u904C\u904E\u9054\u9055\u9056\u9059\u905A\u905C\u905D\u905E\u905F\u9060\u9061\u9064\u9066\u9067\u9069\u906A\u906B\u906C\u906F\u9070\u9071\u9072\u9073\u9076\u9077\u9078\u9079\u907A\u907B\u907C\u907E\u9081\uFFFD\u9084\u9085\u9086\u9087\u9089\u908A\u908C\u908D\u908E\u908F\u9090\u9092\u9094\u9096\u9098\u909A\u909C\u909E\u909F\u90A0\u90A4\u90A5\u90A7\u90A8\u90A9\u90AB\u90AD\u90B2\u90B7\u90BC\u90BD\u90BF\u90C0\u647A\u64B7\u64B8\u6499\u64BA\u64C0\u64D0\u64D7\u64E4\u64E2\u6509\u6525\u652E\u5F0B\u5FD2\u7519\u5F11\u535F\u53F1\u53FD\u53E9\u53E8\u53FB\u5412\u5416\u5406\u544B\u5452\u5453\u5454\u5456\u5443\u5421\u5457\u5459\u5423\u5432\u5482\u5494\u5477\u5471\u5464\u549A\u549B\u5484\u5476\u5466\u549D\u54D0\u54AD\u54C2\u54B4\u54D2\u54A7\u54A6\u54D3\u54D4\u5472\u54A3\u54D5\u54BB\u54BF\u54CC\u54D9\u54DA\u54DC\u54A9\u54AA\u54A4\u54DD\u54CF\u54DE\u551B\u54E7\u5520\u54FD\u5514\u54F3\u5522\u5523\u550F\u5511\u5527\u552A\u5567\u558F\u55B5\u5549\u556D\u5541\u5555\u553F\u5550\u553C\uFFFD".split("");
      for (j = 0; j != D[223].length; ++j) if (D[223][j].charCodeAt(0) !== 65533) {
        e[D[223][j]] = 57088 + j;
        d[57088 + j] = D[223][j];
      }
      D[224] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u90C2\u90C3\u90C6\u90C8\u90C9\u90CB\u90CC\u90CD\u90D2\u90D4\u90D5\u90D6\u90D8\u90D9\u90DA\u90DE\u90DF\u90E0\u90E3\u90E4\u90E5\u90E9\u90EA\u90EC\u90EE\u90F0\u90F1\u90F2\u90F3\u90F5\u90F6\u90F7\u90F9\u90FA\u90FB\u90FC\u90FF\u9100\u9101\u9103\u9105\u9106\u9107\u9108\u9109\u910A\u910B\u910C\u910D\u910E\u910F\u9110\u9111\u9112\u9113\u9114\u9115\u9116\u9117\u9118\u911A\u911B\u911C\uFFFD\u911D\u911F\u9120\u9121\u9124\u9125\u9126\u9127\u9128\u9129\u912A\u912B\u912C\u912D\u912E\u9130\u9132\u9133\u9134\u9135\u9136\u9137\u9138\u913A\u913B\u913C\u913D\u913E\u913F\u9140\u9141\u9142\u9144\u5537\u5556\u5575\u5576\u5577\u5533\u5530\u555C\u558B\u55D2\u5583\u55B1\u55B9\u5588\u5581\u559F\u557E\u55D6\u5591\u557B\u55DF\u55BD\u55BE\u5594\u5599\u55EA\u55F7\u55C9\u561F\u55D1\u55EB\u55EC\u55D4\u55E6\u55DD\u55C4\u55EF\u55E5\u55F2\u55F3\u55CC\u55CD\u55E8\u55F5\u55E4\u8F94\u561E\u5608\u560C\u5601\u5624\u5623\u55FE\u5600\u5627\u562D\u5658\u5639\u5657\u562C\u564D\u5662\u5659\u565C\u564C\u5654\u5686\u5664\u5671\u566B\u567B\u567C\u5685\u5693\u56AF\u56D4\u56D7\u56DD\u56E1\u56F5\u56EB\u56F9\u56FF\u5704\u570A\u5709\u571C\u5E0F\u5E19\u5E14\u5E11\u5E31\u5E3B\u5E3C\uFFFD".split("");
      for (j = 0; j != D[224].length; ++j) if (D[224][j].charCodeAt(0) !== 65533) {
        e[D[224][j]] = 57344 + j;
        d[57344 + j] = D[224][j];
      }
      D[225] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9145\u9147\u9148\u9151\u9153\u9154\u9155\u9156\u9158\u9159\u915B\u915C\u915F\u9160\u9166\u9167\u9168\u916B\u916D\u9173\u917A\u917B\u917C\u9180\u9181\u9182\u9183\u9184\u9186\u9188\u918A\u918E\u918F\u9193\u9194\u9195\u9196\u9197\u9198\u9199\u919C\u919D\u919E\u919F\u91A0\u91A1\u91A4\u91A5\u91A6\u91A7\u91A8\u91A9\u91AB\u91AC\u91B0\u91B1\u91B2\u91B3\u91B6\u91B7\u91B8\u91B9\u91BB\uFFFD\u91BC\u91BD\u91BE\u91BF\u91C0\u91C1\u91C2\u91C3\u91C4\u91C5\u91C6\u91C8\u91CB\u91D0\u91D2\u91D3\u91D4\u91D5\u91D6\u91D7\u91D8\u91D9\u91DA\u91DB\u91DD\u91DE\u91DF\u91E0\u91E1\u91E2\u91E3\u91E4\u91E5\u5E37\u5E44\u5E54\u5E5B\u5E5E\u5E61\u5C8C\u5C7A\u5C8D\u5C90\u5C96\u5C88\u5C98\u5C99\u5C91\u5C9A\u5C9C\u5CB5\u5CA2\u5CBD\u5CAC\u5CAB\u5CB1\u5CA3\u5CC1\u5CB7\u5CC4\u5CD2\u5CE4\u5CCB\u5CE5\u5D02\u5D03\u5D27\u5D26\u5D2E\u5D24\u5D1E\u5D06\u5D1B\u5D58\u5D3E\u5D34\u5D3D\u5D6C\u5D5B\u5D6F\u5D5D\u5D6B\u5D4B\u5D4A\u5D69\u5D74\u5D82\u5D99\u5D9D\u8C73\u5DB7\u5DC5\u5F73\u5F77\u5F82\u5F87\u5F89\u5F8C\u5F95\u5F99\u5F9C\u5FA8\u5FAD\u5FB5\u5FBC\u8862\u5F61\u72AD\u72B0\u72B4\u72B7\u72B8\u72C3\u72C1\u72CE\u72CD\u72D2\u72E8\u72EF\u72E9\u72F2\u72F4\u72F7\u7301\u72F3\u7303\u72FA\uFFFD".split("");
      for (j = 0; j != D[225].length; ++j) if (D[225][j].charCodeAt(0) !== 65533) {
        e[D[225][j]] = 57600 + j;
        d[57600 + j] = D[225][j];
      }
      D[226] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u91E6\u91E7\u91E8\u91E9\u91EA\u91EB\u91EC\u91ED\u91EE\u91EF\u91F0\u91F1\u91F2\u91F3\u91F4\u91F5\u91F6\u91F7\u91F8\u91F9\u91FA\u91FB\u91FC\u91FD\u91FE\u91FF\u9200\u9201\u9202\u9203\u9204\u9205\u9206\u9207\u9208\u9209\u920A\u920B\u920C\u920D\u920E\u920F\u9210\u9211\u9212\u9213\u9214\u9215\u9216\u9217\u9218\u9219\u921A\u921B\u921C\u921D\u921E\u921F\u9220\u9221\u9222\u9223\u9224\uFFFD\u9225\u9226\u9227\u9228\u9229\u922A\u922B\u922C\u922D\u922E\u922F\u9230\u9231\u9232\u9233\u9234\u9235\u9236\u9237\u9238\u9239\u923A\u923B\u923C\u923D\u923E\u923F\u9240\u9241\u9242\u9243\u9244\u9245\u72FB\u7317\u7313\u7321\u730A\u731E\u731D\u7315\u7322\u7339\u7325\u732C\u7338\u7331\u7350\u734D\u7357\u7360\u736C\u736F\u737E\u821B\u5925\u98E7\u5924\u5902\u9963\u9967\u9968\u9969\u996A\u996B\u996C\u9974\u9977\u997D\u9980\u9984\u9987\u998A\u998D\u9990\u9991\u9993\u9994\u9995\u5E80\u5E91\u5E8B\u5E96\u5EA5\u5EA0\u5EB9\u5EB5\u5EBE\u5EB3\u8D53\u5ED2\u5ED1\u5EDB\u5EE8\u5EEA\u81BA\u5FC4\u5FC9\u5FD6\u5FCF\u6003\u5FEE\u6004\u5FE1\u5FE4\u5FFE\u6005\u6006\u5FEA\u5FED\u5FF8\u6019\u6035\u6026\u601B\u600F\u600D\u6029\u602B\u600A\u603F\u6021\u6078\u6079\u607B\u607A\u6042\uFFFD".split("");
      for (j = 0; j != D[226].length; ++j) if (D[226][j].charCodeAt(0) !== 65533) {
        e[D[226][j]] = 57856 + j;
        d[57856 + j] = D[226][j];
      }
      D[227] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9246\u9247\u9248\u9249\u924A\u924B\u924C\u924D\u924E\u924F\u9250\u9251\u9252\u9253\u9254\u9255\u9256\u9257\u9258\u9259\u925A\u925B\u925C\u925D\u925E\u925F\u9260\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u9268\u9269\u926A\u926B\u926C\u926D\u926E\u926F\u9270\u9271\u9272\u9273\u9275\u9276\u9277\u9278\u9279\u927A\u927B\u927C\u927D\u927E\u927F\u9280\u9281\u9282\u9283\u9284\u9285\uFFFD\u9286\u9287\u9288\u9289\u928A\u928B\u928C\u928D\u928F\u9290\u9291\u9292\u9293\u9294\u9295\u9296\u9297\u9298\u9299\u929A\u929B\u929C\u929D\u929E\u929F\u92A0\u92A1\u92A2\u92A3\u92A4\u92A5\u92A6\u92A7\u606A\u607D\u6096\u609A\u60AD\u609D\u6083\u6092\u608C\u609B\u60EC\u60BB\u60B1\u60DD\u60D8\u60C6\u60DA\u60B4\u6120\u6126\u6115\u6123\u60F4\u6100\u610E\u612B\u614A\u6175\u61AC\u6194\u61A7\u61B7\u61D4\u61F5\u5FDD\u96B3\u95E9\u95EB\u95F1\u95F3\u95F5\u95F6\u95FC\u95FE\u9603\u9604\u9606\u9608\u960A\u960B\u960C\u960D\u960F\u9612\u9615\u9616\u9617\u9619\u961A\u4E2C\u723F\u6215\u6C35\u6C54\u6C5C\u6C4A\u6CA3\u6C85\u6C90\u6C94\u6C8C\u6C68\u6C69\u6C74\u6C76\u6C86\u6CA9\u6CD0\u6CD4\u6CAD\u6CF7\u6CF8\u6CF1\u6CD7\u6CB2\u6CE0\u6CD6\u6CFA\u6CEB\u6CEE\u6CB1\u6CD3\u6CEF\u6CFE\uFFFD".split("");
      for (j = 0; j != D[227].length; ++j) if (D[227][j].charCodeAt(0) !== 65533) {
        e[D[227][j]] = 58112 + j;
        d[58112 + j] = D[227][j];
      }
      D[228] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u92A8\u92A9\u92AA\u92AB\u92AC\u92AD\u92AF\u92B0\u92B1\u92B2\u92B3\u92B4\u92B5\u92B6\u92B7\u92B8\u92B9\u92BA\u92BB\u92BC\u92BD\u92BE\u92BF\u92C0\u92C1\u92C2\u92C3\u92C4\u92C5\u92C6\u92C7\u92C9\u92CA\u92CB\u92CC\u92CD\u92CE\u92CF\u92D0\u92D1\u92D2\u92D3\u92D4\u92D5\u92D6\u92D7\u92D8\u92D9\u92DA\u92DB\u92DC\u92DD\u92DE\u92DF\u92E0\u92E1\u92E2\u92E3\u92E4\u92E5\u92E6\u92E7\u92E8\uFFFD\u92E9\u92EA\u92EB\u92EC\u92ED\u92EE\u92EF\u92F0\u92F1\u92F2\u92F3\u92F4\u92F5\u92F6\u92F7\u92F8\u92F9\u92FA\u92FB\u92FC\u92FD\u92FE\u92FF\u9300\u9301\u9302\u9303\u9304\u9305\u9306\u9307\u9308\u9309\u6D39\u6D27\u6D0C\u6D43\u6D48\u6D07\u6D04\u6D19\u6D0E\u6D2B\u6D4D\u6D2E\u6D35\u6D1A\u6D4F\u6D52\u6D54\u6D33\u6D91\u6D6F\u6D9E\u6DA0\u6D5E\u6D93\u6D94\u6D5C\u6D60\u6D7C\u6D63\u6E1A\u6DC7\u6DC5\u6DDE\u6E0E\u6DBF\u6DE0\u6E11\u6DE6\u6DDD\u6DD9\u6E16\u6DAB\u6E0C\u6DAE\u6E2B\u6E6E\u6E4E\u6E6B\u6EB2\u6E5F\u6E86\u6E53\u6E54\u6E32\u6E25\u6E44\u6EDF\u6EB1\u6E98\u6EE0\u6F2D\u6EE2\u6EA5\u6EA7\u6EBD\u6EBB\u6EB7\u6ED7\u6EB4\u6ECF\u6E8F\u6EC2\u6E9F\u6F62\u6F46\u6F47\u6F24\u6F15\u6EF9\u6F2F\u6F36\u6F4B\u6F74\u6F2A\u6F09\u6F29\u6F89\u6F8D\u6F8C\u6F78\u6F72\u6F7C\u6F7A\u6FD1\uFFFD".split("");
      for (j = 0; j != D[228].length; ++j) if (D[228][j].charCodeAt(0) !== 65533) {
        e[D[228][j]] = 58368 + j;
        d[58368 + j] = D[228][j];
      }
      D[229] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u930A\u930B\u930C\u930D\u930E\u930F\u9310\u9311\u9312\u9313\u9314\u9315\u9316\u9317\u9318\u9319\u931A\u931B\u931C\u931D\u931E\u931F\u9320\u9321\u9322\u9323\u9324\u9325\u9326\u9327\u9328\u9329\u932A\u932B\u932C\u932D\u932E\u932F\u9330\u9331\u9332\u9333\u9334\u9335\u9336\u9337\u9338\u9339\u933A\u933B\u933C\u933D\u933F\u9340\u9341\u9342\u9343\u9344\u9345\u9346\u9347\u9348\u9349\uFFFD\u934A\u934B\u934C\u934D\u934E\u934F\u9350\u9351\u9352\u9353\u9354\u9355\u9356\u9357\u9358\u9359\u935A\u935B\u935C\u935D\u935E\u935F\u9360\u9361\u9362\u9363\u9364\u9365\u9366\u9367\u9368\u9369\u936B\u6FC9\u6FA7\u6FB9\u6FB6\u6FC2\u6FE1\u6FEE\u6FDE\u6FE0\u6FEF\u701A\u7023\u701B\u7039\u7035\u704F\u705E\u5B80\u5B84\u5B95\u5B93\u5BA5\u5BB8\u752F\u9A9E\u6434\u5BE4\u5BEE\u8930\u5BF0\u8E47\u8B07\u8FB6\u8FD3\u8FD5\u8FE5\u8FEE\u8FE4\u8FE9\u8FE6\u8FF3\u8FE8\u9005\u9004\u900B\u9026\u9011\u900D\u9016\u9021\u9035\u9036\u902D\u902F\u9044\u9051\u9052\u9050\u9068\u9058\u9062\u905B\u66B9\u9074\u907D\u9082\u9088\u9083\u908B\u5F50\u5F57\u5F56\u5F58\u5C3B\u54AB\u5C50\u5C59\u5B71\u5C63\u5C66\u7FBC\u5F2A\u5F29\u5F2D\u8274\u5F3C\u9B3B\u5C6E\u5981\u5983\u598D\u59A9\u59AA\u59A3\uFFFD".split("");
      for (j = 0; j != D[229].length; ++j) if (D[229][j].charCodeAt(0) !== 65533) {
        e[D[229][j]] = 58624 + j;
        d[58624 + j] = D[229][j];
      }
      D[230] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u936C\u936D\u936E\u936F\u9370\u9371\u9372\u9373\u9374\u9375\u9376\u9377\u9378\u9379\u937A\u937B\u937C\u937D\u937E\u937F\u9380\u9381\u9382\u9383\u9384\u9385\u9386\u9387\u9388\u9389\u938A\u938B\u938C\u938D\u938E\u9390\u9391\u9392\u9393\u9394\u9395\u9396\u9397\u9398\u9399\u939A\u939B\u939C\u939D\u939E\u939F\u93A0\u93A1\u93A2\u93A3\u93A4\u93A5\u93A6\u93A7\u93A8\u93A9\u93AA\u93AB\uFFFD\u93AC\u93AD\u93AE\u93AF\u93B0\u93B1\u93B2\u93B3\u93B4\u93B5\u93B6\u93B7\u93B8\u93B9\u93BA\u93BB\u93BC\u93BD\u93BE\u93BF\u93C0\u93C1\u93C2\u93C3\u93C4\u93C5\u93C6\u93C7\u93C8\u93C9\u93CB\u93CC\u93CD\u5997\u59CA\u59AB\u599E\u59A4\u59D2\u59B2\u59AF\u59D7\u59BE\u5A05\u5A06\u59DD\u5A08\u59E3\u59D8\u59F9\u5A0C\u5A09\u5A32\u5A34\u5A11\u5A23\u5A13\u5A40\u5A67\u5A4A\u5A55\u5A3C\u5A62\u5A75\u80EC\u5AAA\u5A9B\u5A77\u5A7A\u5ABE\u5AEB\u5AB2\u5AD2\u5AD4\u5AB8\u5AE0\u5AE3\u5AF1\u5AD6\u5AE6\u5AD8\u5ADC\u5B09\u5B17\u5B16\u5B32\u5B37\u5B40\u5C15\u5C1C\u5B5A\u5B65\u5B73\u5B51\u5B53\u5B62\u9A75\u9A77\u9A78\u9A7A\u9A7F\u9A7D\u9A80\u9A81\u9A85\u9A88\u9A8A\u9A90\u9A92\u9A93\u9A96\u9A98\u9A9B\u9A9C\u9A9D\u9A9F\u9AA0\u9AA2\u9AA3\u9AA5\u9AA7\u7E9F\u7EA1\u7EA3\u7EA5\u7EA8\u7EA9\uFFFD".split("");
      for (j = 0; j != D[230].length; ++j) if (D[230][j].charCodeAt(0) !== 65533) {
        e[D[230][j]] = 58880 + j;
        d[58880 + j] = D[230][j];
      }
      D[231] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u93CE\u93CF\u93D0\u93D1\u93D2\u93D3\u93D4\u93D5\u93D7\u93D8\u93D9\u93DA\u93DB\u93DC\u93DD\u93DE\u93DF\u93E0\u93E1\u93E2\u93E3\u93E4\u93E5\u93E6\u93E7\u93E8\u93E9\u93EA\u93EB\u93EC\u93ED\u93EE\u93EF\u93F0\u93F1\u93F2\u93F3\u93F4\u93F5\u93F6\u93F7\u93F8\u93F9\u93FA\u93FB\u93FC\u93FD\u93FE\u93FF\u9400\u9401\u9402\u9403\u9404\u9405\u9406\u9407\u9408\u9409\u940A\u940B\u940C\u940D\uFFFD\u940E\u940F\u9410\u9411\u9412\u9413\u9414\u9415\u9416\u9417\u9418\u9419\u941A\u941B\u941C\u941D\u941E\u941F\u9420\u9421\u9422\u9423\u9424\u9425\u9426\u9427\u9428\u9429\u942A\u942B\u942C\u942D\u942E\u7EAD\u7EB0\u7EBE\u7EC0\u7EC1\u7EC2\u7EC9\u7ECB\u7ECC\u7ED0\u7ED4\u7ED7\u7EDB\u7EE0\u7EE1\u7EE8\u7EEB\u7EEE\u7EEF\u7EF1\u7EF2\u7F0D\u7EF6\u7EFA\u7EFB\u7EFE\u7F01\u7F02\u7F03\u7F07\u7F08\u7F0B\u7F0C\u7F0F\u7F11\u7F12\u7F17\u7F19\u7F1C\u7F1B\u7F1F\u7F21\u7F22\u7F23\u7F24\u7F25\u7F26\u7F27\u7F2A\u7F2B\u7F2C\u7F2D\u7F2F\u7F30\u7F31\u7F32\u7F33\u7F35\u5E7A\u757F\u5DDB\u753E\u9095\u738E\u7391\u73AE\u73A2\u739F\u73CF\u73C2\u73D1\u73B7\u73B3\u73C0\u73C9\u73C8\u73E5\u73D9\u987C\u740A\u73E9\u73E7\u73DE\u73BA\u73F2\u740F\u742A\u745B\u7426\u7425\u7428\u7430\u742E\u742C\uFFFD".split("");
      for (j = 0; j != D[231].length; ++j) if (D[231][j].charCodeAt(0) !== 65533) {
        e[D[231][j]] = 59136 + j;
        d[59136 + j] = D[231][j];
      }
      D[232] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u942F\u9430\u9431\u9432\u9433\u9434\u9435\u9436\u9437\u9438\u9439\u943A\u943B\u943C\u943D\u943F\u9440\u9441\u9442\u9443\u9444\u9445\u9446\u9447\u9448\u9449\u944A\u944B\u944C\u944D\u944E\u944F\u9450\u9451\u9452\u9453\u9454\u9455\u9456\u9457\u9458\u9459\u945A\u945B\u945C\u945D\u945E\u945F\u9460\u9461\u9462\u9463\u9464\u9465\u9466\u9467\u9468\u9469\u946A\u946C\u946D\u946E\u946F\uFFFD\u9470\u9471\u9472\u9473\u9474\u9475\u9476\u9477\u9478\u9479\u947A\u947B\u947C\u947D\u947E\u947F\u9480\u9481\u9482\u9483\u9484\u9491\u9496\u9498\u94C7\u94CF\u94D3\u94D4\u94DA\u94E6\u94FB\u951C\u9520\u741B\u741A\u7441\u745C\u7457\u7455\u7459\u7477\u746D\u747E\u749C\u748E\u7480\u7481\u7487\u748B\u749E\u74A8\u74A9\u7490\u74A7\u74D2\u74BA\u97EA\u97EB\u97EC\u674C\u6753\u675E\u6748\u6769\u67A5\u6787\u676A\u6773\u6798\u67A7\u6775\u67A8\u679E\u67AD\u678B\u6777\u677C\u67F0\u6809\u67D8\u680A\u67E9\u67B0\u680C\u67D9\u67B5\u67DA\u67B3\u67DD\u6800\u67C3\u67B8\u67E2\u680E\u67C1\u67FD\u6832\u6833\u6860\u6861\u684E\u6862\u6844\u6864\u6883\u681D\u6855\u6866\u6841\u6867\u6840\u683E\u684A\u6849\u6829\u68B5\u688F\u6874\u6877\u6893\u686B\u68C2\u696E\u68FC\u691F\u6920\u68F9\uFFFD".split("");
      for (j = 0; j != D[232].length; ++j) if (D[232][j].charCodeAt(0) !== 65533) {
        e[D[232][j]] = 59392 + j;
        d[59392 + j] = D[232][j];
      }
      D[233] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9527\u9533\u953D\u9543\u9548\u954B\u9555\u955A\u9560\u956E\u9574\u9575\u9577\u9578\u9579\u957A\u957B\u957C\u957D\u957E\u9580\u9581\u9582\u9583\u9584\u9585\u9586\u9587\u9588\u9589\u958A\u958B\u958C\u958D\u958E\u958F\u9590\u9591\u9592\u9593\u9594\u9595\u9596\u9597\u9598\u9599\u959A\u959B\u959C\u959D\u959E\u959F\u95A0\u95A1\u95A2\u95A3\u95A4\u95A5\u95A6\u95A7\u95A8\u95A9\u95AA\uFFFD\u95AB\u95AC\u95AD\u95AE\u95AF\u95B0\u95B1\u95B2\u95B3\u95B4\u95B5\u95B6\u95B7\u95B8\u95B9\u95BA\u95BB\u95BC\u95BD\u95BE\u95BF\u95C0\u95C1\u95C2\u95C3\u95C4\u95C5\u95C6\u95C7\u95C8\u95C9\u95CA\u95CB\u6924\u68F0\u690B\u6901\u6957\u68E3\u6910\u6971\u6939\u6960\u6942\u695D\u6984\u696B\u6980\u6998\u6978\u6934\u69CC\u6987\u6988\u69CE\u6989\u6966\u6963\u6979\u699B\u69A7\u69BB\u69AB\u69AD\u69D4\u69B1\u69C1\u69CA\u69DF\u6995\u69E0\u698D\u69FF\u6A2F\u69ED\u6A17\u6A18\u6A65\u69F2\u6A44\u6A3E\u6AA0\u6A50\u6A5B\u6A35\u6A8E\u6A79\u6A3D\u6A28\u6A58\u6A7C\u6A91\u6A90\u6AA9\u6A97\u6AAB\u7337\u7352\u6B81\u6B82\u6B87\u6B84\u6B92\u6B93\u6B8D\u6B9A\u6B9B\u6BA1\u6BAA\u8F6B\u8F6D\u8F71\u8F72\u8F73\u8F75\u8F76\u8F78\u8F77\u8F79\u8F7A\u8F7C\u8F7E\u8F81\u8F82\u8F84\u8F87\u8F8B\uFFFD".split("");
      for (j = 0; j != D[233].length; ++j) if (D[233][j].charCodeAt(0) !== 65533) {
        e[D[233][j]] = 59648 + j;
        d[59648 + j] = D[233][j];
      }
      D[234] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u95CC\u95CD\u95CE\u95CF\u95D0\u95D1\u95D2\u95D3\u95D4\u95D5\u95D6\u95D7\u95D8\u95D9\u95DA\u95DB\u95DC\u95DD\u95DE\u95DF\u95E0\u95E1\u95E2\u95E3\u95E4\u95E5\u95E6\u95E7\u95EC\u95FF\u9607\u9613\u9618\u961B\u961E\u9620\u9623\u9624\u9625\u9626\u9627\u9628\u9629\u962B\u962C\u962D\u962F\u9630\u9637\u9638\u9639\u963A\u963E\u9641\u9643\u964A\u964E\u964F\u9651\u9652\u9653\u9656\u9657\uFFFD\u9658\u9659\u965A\u965C\u965D\u965E\u9660\u9663\u9665\u9666\u966B\u966D\u966E\u966F\u9670\u9671\u9673\u9678\u9679\u967A\u967B\u967C\u967D\u967E\u967F\u9680\u9681\u9682\u9683\u9684\u9687\u9689\u968A\u8F8D\u8F8E\u8F8F\u8F98\u8F9A\u8ECE\u620B\u6217\u621B\u621F\u6222\u6221\u6225\u6224\u622C\u81E7\u74EF\u74F4\u74FF\u750F\u7511\u7513\u6534\u65EE\u65EF\u65F0\u660A\u6619\u6772\u6603\u6615\u6600\u7085\u66F7\u661D\u6634\u6631\u6636\u6635\u8006\u665F\u6654\u6641\u664F\u6656\u6661\u6657\u6677\u6684\u668C\u66A7\u669D\u66BE\u66DB\u66DC\u66E6\u66E9\u8D32\u8D33\u8D36\u8D3B\u8D3D\u8D40\u8D45\u8D46\u8D48\u8D49\u8D47\u8D4D\u8D55\u8D59\u89C7\u89CA\u89CB\u89CC\u89CE\u89CF\u89D0\u89D1\u726E\u729F\u725D\u7266\u726F\u727E\u727F\u7284\u728B\u728D\u728F\u7292\u6308\u6332\u63B0\uFFFD".split("");
      for (j = 0; j != D[234].length; ++j) if (D[234][j].charCodeAt(0) !== 65533) {
        e[D[234][j]] = 59904 + j;
        d[59904 + j] = D[234][j];
      }
      D[235] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u968C\u968E\u9691\u9692\u9693\u9695\u9696\u969A\u969B\u969D\u969E\u969F\u96A0\u96A1\u96A2\u96A3\u96A4\u96A5\u96A6\u96A8\u96A9\u96AA\u96AB\u96AC\u96AD\u96AE\u96AF\u96B1\u96B2\u96B4\u96B5\u96B7\u96B8\u96BA\u96BB\u96BF\u96C2\u96C3\u96C8\u96CA\u96CB\u96D0\u96D1\u96D3\u96D4\u96D6\u96D7\u96D8\u96D9\u96DA\u96DB\u96DC\u96DD\u96DE\u96DF\u96E1\u96E2\u96E3\u96E4\u96E5\u96E6\u96E7\u96EB\uFFFD\u96EC\u96ED\u96EE\u96F0\u96F1\u96F2\u96F4\u96F5\u96F8\u96FA\u96FB\u96FC\u96FD\u96FF\u9702\u9703\u9705\u970A\u970B\u970C\u9710\u9711\u9712\u9714\u9715\u9717\u9718\u9719\u971A\u971B\u971D\u971F\u9720\u643F\u64D8\u8004\u6BEA\u6BF3\u6BFD\u6BF5\u6BF9\u6C05\u6C07\u6C06\u6C0D\u6C15\u6C18\u6C19\u6C1A\u6C21\u6C29\u6C24\u6C2A\u6C32\u6535\u6555\u656B\u724D\u7252\u7256\u7230\u8662\u5216\u809F\u809C\u8093\u80BC\u670A\u80BD\u80B1\u80AB\u80AD\u80B4\u80B7\u80E7\u80E8\u80E9\u80EA\u80DB\u80C2\u80C4\u80D9\u80CD\u80D7\u6710\u80DD\u80EB\u80F1\u80F4\u80ED\u810D\u810E\u80F2\u80FC\u6715\u8112\u8C5A\u8136\u811E\u812C\u8118\u8132\u8148\u814C\u8153\u8174\u8159\u815A\u8171\u8160\u8169\u817C\u817D\u816D\u8167\u584D\u5AB5\u8188\u8182\u8191\u6ED5\u81A3\u81AA\u81CC\u6726\u81CA\u81BB\uFFFD".split("");
      for (j = 0; j != D[235].length; ++j) if (D[235][j].charCodeAt(0) !== 65533) {
        e[D[235][j]] = 60160 + j;
        d[60160 + j] = D[235][j];
      }
      D[236] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9721\u9722\u9723\u9724\u9725\u9726\u9727\u9728\u9729\u972B\u972C\u972E\u972F\u9731\u9733\u9734\u9735\u9736\u9737\u973A\u973B\u973C\u973D\u973F\u9740\u9741\u9742\u9743\u9744\u9745\u9746\u9747\u9748\u9749\u974A\u974B\u974C\u974D\u974E\u974F\u9750\u9751\u9754\u9755\u9757\u9758\u975A\u975C\u975D\u975F\u9763\u9764\u9766\u9767\u9768\u976A\u976B\u976C\u976D\u976E\u976F\u9770\u9771\uFFFD\u9772\u9775\u9777\u9778\u9779\u977A\u977B\u977D\u977E\u977F\u9780\u9781\u9782\u9783\u9784\u9786\u9787\u9788\u9789\u978A\u978C\u978E\u978F\u9790\u9793\u9795\u9796\u9797\u9799\u979A\u979B\u979C\u979D\u81C1\u81A6\u6B24\u6B37\u6B39\u6B43\u6B46\u6B59\u98D1\u98D2\u98D3\u98D5\u98D9\u98DA\u6BB3\u5F40\u6BC2\u89F3\u6590\u9F51\u6593\u65BC\u65C6\u65C4\u65C3\u65CC\u65CE\u65D2\u65D6\u7080\u709C\u7096\u709D\u70BB\u70C0\u70B7\u70AB\u70B1\u70E8\u70CA\u7110\u7113\u7116\u712F\u7131\u7173\u715C\u7168\u7145\u7172\u714A\u7178\u717A\u7198\u71B3\u71B5\u71A8\u71A0\u71E0\u71D4\u71E7\u71F9\u721D\u7228\u706C\u7118\u7166\u71B9\u623E\u623D\u6243\u6248\u6249\u793B\u7940\u7946\u7949\u795B\u795C\u7953\u795A\u7962\u7957\u7960\u796F\u7967\u797A\u7985\u798A\u799A\u79A7\u79B3\u5FD1\u5FD0\uFFFD".split("");
      for (j = 0; j != D[236].length; ++j) if (D[236][j].charCodeAt(0) !== 65533) {
        e[D[236][j]] = 60416 + j;
        d[60416 + j] = D[236][j];
      }
      D[237] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u979E\u979F\u97A1\u97A2\u97A4\u97A5\u97A6\u97A7\u97A8\u97A9\u97AA\u97AC\u97AE\u97B0\u97B1\u97B3\u97B5\u97B6\u97B7\u97B8\u97B9\u97BA\u97BB\u97BC\u97BD\u97BE\u97BF\u97C0\u97C1\u97C2\u97C3\u97C4\u97C5\u97C6\u97C7\u97C8\u97C9\u97CA\u97CB\u97CC\u97CD\u97CE\u97CF\u97D0\u97D1\u97D2\u97D3\u97D4\u97D5\u97D6\u97D7\u97D8\u97D9\u97DA\u97DB\u97DC\u97DD\u97DE\u97DF\u97E0\u97E1\u97E2\u97E3\uFFFD\u97E4\u97E5\u97E8\u97EE\u97EF\u97F0\u97F1\u97F2\u97F4\u97F7\u97F8\u97F9\u97FA\u97FB\u97FC\u97FD\u97FE\u97FF\u9800\u9801\u9802\u9803\u9804\u9805\u9806\u9807\u9808\u9809\u980A\u980B\u980C\u980D\u980E\u603C\u605D\u605A\u6067\u6041\u6059\u6063\u60AB\u6106\u610D\u615D\u61A9\u619D\u61CB\u61D1\u6206\u8080\u807F\u6C93\u6CF6\u6DFC\u77F6\u77F8\u7800\u7809\u7817\u7818\u7811\u65AB\u782D\u781C\u781D\u7839\u783A\u783B\u781F\u783C\u7825\u782C\u7823\u7829\u784E\u786D\u7856\u7857\u7826\u7850\u7847\u784C\u786A\u789B\u7893\u789A\u7887\u789C\u78A1\u78A3\u78B2\u78B9\u78A5\u78D4\u78D9\u78C9\u78EC\u78F2\u7905\u78F4\u7913\u7924\u791E\u7934\u9F9B\u9EF9\u9EFB\u9EFC\u76F1\u7704\u770D\u76F9\u7707\u7708\u771A\u7722\u7719\u772D\u7726\u7735\u7738\u7750\u7751\u7747\u7743\u775A\u7768\uFFFD".split("");
      for (j = 0; j != D[237].length; ++j) if (D[237][j].charCodeAt(0) !== 65533) {
        e[D[237][j]] = 60672 + j;
        d[60672 + j] = D[237][j];
      }
      D[238] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u980F\u9810\u9811\u9812\u9813\u9814\u9815\u9816\u9817\u9818\u9819\u981A\u981B\u981C\u981D\u981E\u981F\u9820\u9821\u9822\u9823\u9824\u9825\u9826\u9827\u9828\u9829\u982A\u982B\u982C\u982D\u982E\u982F\u9830\u9831\u9832\u9833\u9834\u9835\u9836\u9837\u9838\u9839\u983A\u983B\u983C\u983D\u983E\u983F\u9840\u9841\u9842\u9843\u9844\u9845\u9846\u9847\u9848\u9849\u984A\u984B\u984C\u984D\uFFFD\u984E\u984F\u9850\u9851\u9852\u9853\u9854\u9855\u9856\u9857\u9858\u9859\u985A\u985B\u985C\u985D\u985E\u985F\u9860\u9861\u9862\u9863\u9864\u9865\u9866\u9867\u9868\u9869\u986A\u986B\u986C\u986D\u986E\u7762\u7765\u777F\u778D\u777D\u7780\u778C\u7791\u779F\u77A0\u77B0\u77B5\u77BD\u753A\u7540\u754E\u754B\u7548\u755B\u7572\u7579\u7583\u7F58\u7F61\u7F5F\u8A48\u7F68\u7F74\u7F71\u7F79\u7F81\u7F7E\u76CD\u76E5\u8832\u9485\u9486\u9487\u948B\u948A\u948C\u948D\u948F\u9490\u9494\u9497\u9495\u949A\u949B\u949C\u94A3\u94A4\u94AB\u94AA\u94AD\u94AC\u94AF\u94B0\u94B2\u94B4\u94B6\u94B7\u94B8\u94B9\u94BA\u94BC\u94BD\u94BF\u94C4\u94C8\u94C9\u94CA\u94CB\u94CC\u94CD\u94CE\u94D0\u94D1\u94D2\u94D5\u94D6\u94D7\u94D9\u94D8\u94DB\u94DE\u94DF\u94E0\u94E2\u94E4\u94E5\u94E7\u94E8\u94EA\uFFFD".split("");
      for (j = 0; j != D[238].length; ++j) if (D[238][j].charCodeAt(0) !== 65533) {
        e[D[238][j]] = 60928 + j;
        d[60928 + j] = D[238][j];
      }
      D[239] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u986F\u9870\u9871\u9872\u9873\u9874\u988B\u988E\u9892\u9895\u9899\u98A3\u98A8\u98A9\u98AA\u98AB\u98AC\u98AD\u98AE\u98AF\u98B0\u98B1\u98B2\u98B3\u98B4\u98B5\u98B6\u98B7\u98B8\u98B9\u98BA\u98BB\u98BC\u98BD\u98BE\u98BF\u98C0\u98C1\u98C2\u98C3\u98C4\u98C5\u98C6\u98C7\u98C8\u98C9\u98CA\u98CB\u98CC\u98CD\u98CF\u98D0\u98D4\u98D6\u98D7\u98DB\u98DC\u98DD\u98E0\u98E1\u98E2\u98E3\u98E4\uFFFD\u98E5\u98E6\u98E9\u98EA\u98EB\u98EC\u98ED\u98EE\u98EF\u98F0\u98F1\u98F2\u98F3\u98F4\u98F5\u98F6\u98F7\u98F8\u98F9\u98FA\u98FB\u98FC\u98FD\u98FE\u98FF\u9900\u9901\u9902\u9903\u9904\u9905\u9906\u9907\u94E9\u94EB\u94EE\u94EF\u94F3\u94F4\u94F5\u94F7\u94F9\u94FC\u94FD\u94FF\u9503\u9502\u9506\u9507\u9509\u950A\u950D\u950E\u950F\u9512\u9513\u9514\u9515\u9516\u9518\u951B\u951D\u951E\u951F\u9522\u952A\u952B\u9529\u952C\u9531\u9532\u9534\u9536\u9537\u9538\u953C\u953E\u953F\u9542\u9535\u9544\u9545\u9546\u9549\u954C\u954E\u954F\u9552\u9553\u9554\u9556\u9557\u9558\u9559\u955B\u955E\u955F\u955D\u9561\u9562\u9564\u9565\u9566\u9567\u9568\u9569\u956A\u956B\u956C\u956F\u9571\u9572\u9573\u953A\u77E7\u77EC\u96C9\u79D5\u79ED\u79E3\u79EB\u7A06\u5D47\u7A03\u7A02\u7A1E\u7A14\uFFFD".split("");
      for (j = 0; j != D[239].length; ++j) if (D[239][j].charCodeAt(0) !== 65533) {
        e[D[239][j]] = 61184 + j;
        d[61184 + j] = D[239][j];
      }
      D[240] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9908\u9909\u990A\u990B\u990C\u990E\u990F\u9911\u9912\u9913\u9914\u9915\u9916\u9917\u9918\u9919\u991A\u991B\u991C\u991D\u991E\u991F\u9920\u9921\u9922\u9923\u9924\u9925\u9926\u9927\u9928\u9929\u992A\u992B\u992C\u992D\u992F\u9930\u9931\u9932\u9933\u9934\u9935\u9936\u9937\u9938\u9939\u993A\u993B\u993C\u993D\u993E\u993F\u9940\u9941\u9942\u9943\u9944\u9945\u9946\u9947\u9948\u9949\uFFFD\u994A\u994B\u994C\u994D\u994E\u994F\u9950\u9951\u9952\u9953\u9956\u9957\u9958\u9959\u995A\u995B\u995C\u995D\u995E\u995F\u9960\u9961\u9962\u9964\u9966\u9973\u9978\u9979\u997B\u997E\u9982\u9983\u9989\u7A39\u7A37\u7A51\u9ECF\u99A5\u7A70\u7688\u768E\u7693\u7699\u76A4\u74DE\u74E0\u752C\u9E20\u9E22\u9E28\u9E29\u9E2A\u9E2B\u9E2C\u9E32\u9E31\u9E36\u9E38\u9E37\u9E39\u9E3A\u9E3E\u9E41\u9E42\u9E44\u9E46\u9E47\u9E48\u9E49\u9E4B\u9E4C\u9E4E\u9E51\u9E55\u9E57\u9E5A\u9E5B\u9E5C\u9E5E\u9E63\u9E66\u9E67\u9E68\u9E69\u9E6A\u9E6B\u9E6C\u9E71\u9E6D\u9E73\u7592\u7594\u7596\u75A0\u759D\u75AC\u75A3\u75B3\u75B4\u75B8\u75C4\u75B1\u75B0\u75C3\u75C2\u75D6\u75CD\u75E3\u75E8\u75E6\u75E4\u75EB\u75E7\u7603\u75F1\u75FC\u75FF\u7610\u7600\u7605\u760C\u7617\u760A\u7625\u7618\u7615\u7619\uFFFD".split("");
      for (j = 0; j != D[240].length; ++j) if (D[240][j].charCodeAt(0) !== 65533) {
        e[D[240][j]] = 61440 + j;
        d[61440 + j] = D[240][j];
      }
      D[241] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u998C\u998E\u999A\u999B\u999C\u999D\u999E\u999F\u99A0\u99A1\u99A2\u99A3\u99A4\u99A6\u99A7\u99A9\u99AA\u99AB\u99AC\u99AD\u99AE\u99AF\u99B0\u99B1\u99B2\u99B3\u99B4\u99B5\u99B6\u99B7\u99B8\u99B9\u99BA\u99BB\u99BC\u99BD\u99BE\u99BF\u99C0\u99C1\u99C2\u99C3\u99C4\u99C5\u99C6\u99C7\u99C8\u99C9\u99CA\u99CB\u99CC\u99CD\u99CE\u99CF\u99D0\u99D1\u99D2\u99D3\u99D4\u99D5\u99D6\u99D7\u99D8\uFFFD\u99D9\u99DA\u99DB\u99DC\u99DD\u99DE\u99DF\u99E0\u99E1\u99E2\u99E3\u99E4\u99E5\u99E6\u99E7\u99E8\u99E9\u99EA\u99EB\u99EC\u99ED\u99EE\u99EF\u99F0\u99F1\u99F2\u99F3\u99F4\u99F5\u99F6\u99F7\u99F8\u99F9\u761B\u763C\u7622\u7620\u7640\u762D\u7630\u763F\u7635\u7643\u763E\u7633\u764D\u765E\u7654\u765C\u7656\u766B\u766F\u7FCA\u7AE6\u7A78\u7A79\u7A80\u7A86\u7A88\u7A95\u7AA6\u7AA0\u7AAC\u7AA8\u7AAD\u7AB3\u8864\u8869\u8872\u887D\u887F\u8882\u88A2\u88C6\u88B7\u88BC\u88C9\u88E2\u88CE\u88E3\u88E5\u88F1\u891A\u88FC\u88E8\u88FE\u88F0\u8921\u8919\u8913\u891B\u890A\u8934\u892B\u8936\u8941\u8966\u897B\u758B\u80E5\u76B2\u76B4\u77DC\u8012\u8014\u8016\u801C\u8020\u8022\u8025\u8026\u8027\u8029\u8028\u8031\u800B\u8035\u8043\u8046\u804D\u8052\u8069\u8071\u8983\u9878\u9880\u9883\uFFFD".split("");
      for (j = 0; j != D[241].length; ++j) if (D[241][j].charCodeAt(0) !== 65533) {
        e[D[241][j]] = 61696 + j;
        d[61696 + j] = D[241][j];
      }
      D[242] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u99FA\u99FB\u99FC\u99FD\u99FE\u99FF\u9A00\u9A01\u9A02\u9A03\u9A04\u9A05\u9A06\u9A07\u9A08\u9A09\u9A0A\u9A0B\u9A0C\u9A0D\u9A0E\u9A0F\u9A10\u9A11\u9A12\u9A13\u9A14\u9A15\u9A16\u9A17\u9A18\u9A19\u9A1A\u9A1B\u9A1C\u9A1D\u9A1E\u9A1F\u9A20\u9A21\u9A22\u9A23\u9A24\u9A25\u9A26\u9A27\u9A28\u9A29\u9A2A\u9A2B\u9A2C\u9A2D\u9A2E\u9A2F\u9A30\u9A31\u9A32\u9A33\u9A34\u9A35\u9A36\u9A37\u9A38\uFFFD\u9A39\u9A3A\u9A3B\u9A3C\u9A3D\u9A3E\u9A3F\u9A40\u9A41\u9A42\u9A43\u9A44\u9A45\u9A46\u9A47\u9A48\u9A49\u9A4A\u9A4B\u9A4C\u9A4D\u9A4E\u9A4F\u9A50\u9A51\u9A52\u9A53\u9A54\u9A55\u9A56\u9A57\u9A58\u9A59\u9889\u988C\u988D\u988F\u9894\u989A\u989B\u989E\u989F\u98A1\u98A2\u98A5\u98A6\u864D\u8654\u866C\u866E\u867F\u867A\u867C\u867B\u86A8\u868D\u868B\u86AC\u869D\u86A7\u86A3\u86AA\u8693\u86A9\u86B6\u86C4\u86B5\u86CE\u86B0\u86BA\u86B1\u86AF\u86C9\u86CF\u86B4\u86E9\u86F1\u86F2\u86ED\u86F3\u86D0\u8713\u86DE\u86F4\u86DF\u86D8\u86D1\u8703\u8707\u86F8\u8708\u870A\u870D\u8709\u8723\u873B\u871E\u8725\u872E\u871A\u873E\u8748\u8734\u8731\u8729\u8737\u873F\u8782\u8722\u877D\u877E\u877B\u8760\u8770\u874C\u876E\u878B\u8753\u8763\u877C\u8764\u8759\u8765\u8793\u87AF\u87A8\u87D2\uFFFD".split("");
      for (j = 0; j != D[242].length; ++j) if (D[242][j].charCodeAt(0) !== 65533) {
        e[D[242][j]] = 61952 + j;
        d[61952 + j] = D[242][j];
      }
      D[243] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9A5A\u9A5B\u9A5C\u9A5D\u9A5E\u9A5F\u9A60\u9A61\u9A62\u9A63\u9A64\u9A65\u9A66\u9A67\u9A68\u9A69\u9A6A\u9A6B\u9A72\u9A83\u9A89\u9A8D\u9A8E\u9A94\u9A95\u9A99\u9AA6\u9AA9\u9AAA\u9AAB\u9AAC\u9AAD\u9AAE\u9AAF\u9AB2\u9AB3\u9AB4\u9AB5\u9AB9\u9ABB\u9ABD\u9ABE\u9ABF\u9AC3\u9AC4\u9AC6\u9AC7\u9AC8\u9AC9\u9ACA\u9ACD\u9ACE\u9ACF\u9AD0\u9AD2\u9AD4\u9AD5\u9AD6\u9AD7\u9AD9\u9ADA\u9ADB\u9ADC\uFFFD\u9ADD\u9ADE\u9AE0\u9AE2\u9AE3\u9AE4\u9AE5\u9AE7\u9AE8\u9AE9\u9AEA\u9AEC\u9AEE\u9AF0\u9AF1\u9AF2\u9AF3\u9AF4\u9AF5\u9AF6\u9AF7\u9AF8\u9AFA\u9AFC\u9AFD\u9AFE\u9AFF\u9B00\u9B01\u9B02\u9B04\u9B05\u9B06\u87C6\u8788\u8785\u87AD\u8797\u8783\u87AB\u87E5\u87AC\u87B5\u87B3\u87CB\u87D3\u87BD\u87D1\u87C0\u87CA\u87DB\u87EA\u87E0\u87EE\u8816\u8813\u87FE\u880A\u881B\u8821\u8839\u883C\u7F36\u7F42\u7F44\u7F45\u8210\u7AFA\u7AFD\u7B08\u7B03\u7B04\u7B15\u7B0A\u7B2B\u7B0F\u7B47\u7B38\u7B2A\u7B19\u7B2E\u7B31\u7B20\u7B25\u7B24\u7B33\u7B3E\u7B1E\u7B58\u7B5A\u7B45\u7B75\u7B4C\u7B5D\u7B60\u7B6E\u7B7B\u7B62\u7B72\u7B71\u7B90\u7BA6\u7BA7\u7BB8\u7BAC\u7B9D\u7BA8\u7B85\u7BAA\u7B9C\u7BA2\u7BAB\u7BB4\u7BD1\u7BC1\u7BCC\u7BDD\u7BDA\u7BE5\u7BE6\u7BEA\u7C0C\u7BFE\u7BFC\u7C0F\u7C16\u7C0B\uFFFD".split("");
      for (j = 0; j != D[243].length; ++j) if (D[243][j].charCodeAt(0) !== 65533) {
        e[D[243][j]] = 62208 + j;
        d[62208 + j] = D[243][j];
      }
      D[244] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9B07\u9B09\u9B0A\u9B0B\u9B0C\u9B0D\u9B0E\u9B10\u9B11\u9B12\u9B14\u9B15\u9B16\u9B17\u9B18\u9B19\u9B1A\u9B1B\u9B1C\u9B1D\u9B1E\u9B20\u9B21\u9B22\u9B24\u9B25\u9B26\u9B27\u9B28\u9B29\u9B2A\u9B2B\u9B2C\u9B2D\u9B2E\u9B30\u9B31\u9B33\u9B34\u9B35\u9B36\u9B37\u9B38\u9B39\u9B3A\u9B3D\u9B3E\u9B3F\u9B40\u9B46\u9B4A\u9B4B\u9B4C\u9B4E\u9B50\u9B52\u9B53\u9B55\u9B56\u9B57\u9B58\u9B59\u9B5A\uFFFD\u9B5B\u9B5C\u9B5D\u9B5E\u9B5F\u9B60\u9B61\u9B62\u9B63\u9B64\u9B65\u9B66\u9B67\u9B68\u9B69\u9B6A\u9B6B\u9B6C\u9B6D\u9B6E\u9B6F\u9B70\u9B71\u9B72\u9B73\u9B74\u9B75\u9B76\u9B77\u9B78\u9B79\u9B7A\u9B7B\u7C1F\u7C2A\u7C26\u7C38\u7C41\u7C40\u81FE\u8201\u8202\u8204\u81EC\u8844\u8221\u8222\u8223\u822D\u822F\u8228\u822B\u8238\u823B\u8233\u8234\u823E\u8244\u8249\u824B\u824F\u825A\u825F\u8268\u887E\u8885\u8888\u88D8\u88DF\u895E\u7F9D\u7F9F\u7FA7\u7FAF\u7FB0\u7FB2\u7C7C\u6549\u7C91\u7C9D\u7C9C\u7C9E\u7CA2\u7CB2\u7CBC\u7CBD\u7CC1\u7CC7\u7CCC\u7CCD\u7CC8\u7CC5\u7CD7\u7CE8\u826E\u66A8\u7FBF\u7FCE\u7FD5\u7FE5\u7FE1\u7FE6\u7FE9\u7FEE\u7FF3\u7CF8\u7D77\u7DA6\u7DAE\u7E47\u7E9B\u9EB8\u9EB4\u8D73\u8D84\u8D94\u8D91\u8DB1\u8D67\u8D6D\u8C47\u8C49\u914A\u9150\u914E\u914F\u9164\uFFFD".split("");
      for (j = 0; j != D[244].length; ++j) if (D[244][j].charCodeAt(0) !== 65533) {
        e[D[244][j]] = 62464 + j;
        d[62464 + j] = D[244][j];
      }
      D[245] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9B7C\u9B7D\u9B7E\u9B7F\u9B80\u9B81\u9B82\u9B83\u9B84\u9B85\u9B86\u9B87\u9B88\u9B89\u9B8A\u9B8B\u9B8C\u9B8D\u9B8E\u9B8F\u9B90\u9B91\u9B92\u9B93\u9B94\u9B95\u9B96\u9B97\u9B98\u9B99\u9B9A\u9B9B\u9B9C\u9B9D\u9B9E\u9B9F\u9BA0\u9BA1\u9BA2\u9BA3\u9BA4\u9BA5\u9BA6\u9BA7\u9BA8\u9BA9\u9BAA\u9BAB\u9BAC\u9BAD\u9BAE\u9BAF\u9BB0\u9BB1\u9BB2\u9BB3\u9BB4\u9BB5\u9BB6\u9BB7\u9BB8\u9BB9\u9BBA\uFFFD\u9BBB\u9BBC\u9BBD\u9BBE\u9BBF\u9BC0\u9BC1\u9BC2\u9BC3\u9BC4\u9BC5\u9BC6\u9BC7\u9BC8\u9BC9\u9BCA\u9BCB\u9BCC\u9BCD\u9BCE\u9BCF\u9BD0\u9BD1\u9BD2\u9BD3\u9BD4\u9BD5\u9BD6\u9BD7\u9BD8\u9BD9\u9BDA\u9BDB\u9162\u9161\u9170\u9169\u916F\u917D\u917E\u9172\u9174\u9179\u918C\u9185\u9190\u918D\u9191\u91A2\u91A3\u91AA\u91AD\u91AE\u91AF\u91B5\u91B4\u91BA\u8C55\u9E7E\u8DB8\u8DEB\u8E05\u8E59\u8E69\u8DB5\u8DBF\u8DBC\u8DBA\u8DC4\u8DD6\u8DD7\u8DDA\u8DDE\u8DCE\u8DCF\u8DDB\u8DC6\u8DEC\u8DF7\u8DF8\u8DE3\u8DF9\u8DFB\u8DE4\u8E09\u8DFD\u8E14\u8E1D\u8E1F\u8E2C\u8E2E\u8E23\u8E2F\u8E3A\u8E40\u8E39\u8E35\u8E3D\u8E31\u8E49\u8E41\u8E42\u8E51\u8E52\u8E4A\u8E70\u8E76\u8E7C\u8E6F\u8E74\u8E85\u8E8F\u8E94\u8E90\u8E9C\u8E9E\u8C78\u8C82\u8C8A\u8C85\u8C98\u8C94\u659B\u89D6\u89DE\u89DA\u89DC\uFFFD".split("");
      for (j = 0; j != D[245].length; ++j) if (D[245][j].charCodeAt(0) !== 65533) {
        e[D[245][j]] = 62720 + j;
        d[62720 + j] = D[245][j];
      }
      D[246] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9BDC\u9BDD\u9BDE\u9BDF\u9BE0\u9BE1\u9BE2\u9BE3\u9BE4\u9BE5\u9BE6\u9BE7\u9BE8\u9BE9\u9BEA\u9BEB\u9BEC\u9BED\u9BEE\u9BEF\u9BF0\u9BF1\u9BF2\u9BF3\u9BF4\u9BF5\u9BF6\u9BF7\u9BF8\u9BF9\u9BFA\u9BFB\u9BFC\u9BFD\u9BFE\u9BFF\u9C00\u9C01\u9C02\u9C03\u9C04\u9C05\u9C06\u9C07\u9C08\u9C09\u9C0A\u9C0B\u9C0C\u9C0D\u9C0E\u9C0F\u9C10\u9C11\u9C12\u9C13\u9C14\u9C15\u9C16\u9C17\u9C18\u9C19\u9C1A\uFFFD\u9C1B\u9C1C\u9C1D\u9C1E\u9C1F\u9C20\u9C21\u9C22\u9C23\u9C24\u9C25\u9C26\u9C27\u9C28\u9C29\u9C2A\u9C2B\u9C2C\u9C2D\u9C2E\u9C2F\u9C30\u9C31\u9C32\u9C33\u9C34\u9C35\u9C36\u9C37\u9C38\u9C39\u9C3A\u9C3B\u89E5\u89EB\u89EF\u8A3E\u8B26\u9753\u96E9\u96F3\u96EF\u9706\u9701\u9708\u970F\u970E\u972A\u972D\u9730\u973E\u9F80\u9F83\u9F85\u9F86\u9F87\u9F88\u9F89\u9F8A\u9F8C\u9EFE\u9F0B\u9F0D\u96B9\u96BC\u96BD\u96CE\u96D2\u77BF\u96E0\u928E\u92AE\u92C8\u933E\u936A\u93CA\u938F\u943E\u946B\u9C7F\u9C82\u9C85\u9C86\u9C87\u9C88\u7A23\u9C8B\u9C8E\u9C90\u9C91\u9C92\u9C94\u9C95\u9C9A\u9C9B\u9C9E\u9C9F\u9CA0\u9CA1\u9CA2\u9CA3\u9CA5\u9CA6\u9CA7\u9CA8\u9CA9\u9CAB\u9CAD\u9CAE\u9CB0\u9CB1\u9CB2\u9CB3\u9CB4\u9CB5\u9CB6\u9CB7\u9CBA\u9CBB\u9CBC\u9CBD\u9CC4\u9CC5\u9CC6\u9CC7\u9CCA\u9CCB\uFFFD".split("");
      for (j = 0; j != D[246].length; ++j) if (D[246][j].charCodeAt(0) !== 65533) {
        e[D[246][j]] = 62976 + j;
        d[62976 + j] = D[246][j];
      }
      D[247] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9C3C\u9C3D\u9C3E\u9C3F\u9C40\u9C41\u9C42\u9C43\u9C44\u9C45\u9C46\u9C47\u9C48\u9C49\u9C4A\u9C4B\u9C4C\u9C4D\u9C4E\u9C4F\u9C50\u9C51\u9C52\u9C53\u9C54\u9C55\u9C56\u9C57\u9C58\u9C59\u9C5A\u9C5B\u9C5C\u9C5D\u9C5E\u9C5F\u9C60\u9C61\u9C62\u9C63\u9C64\u9C65\u9C66\u9C67\u9C68\u9C69\u9C6A\u9C6B\u9C6C\u9C6D\u9C6E\u9C6F\u9C70\u9C71\u9C72\u9C73\u9C74\u9C75\u9C76\u9C77\u9C78\u9C79\u9C7A\uFFFD\u9C7B\u9C7D\u9C7E\u9C80\u9C83\u9C84\u9C89\u9C8A\u9C8C\u9C8F\u9C93\u9C96\u9C97\u9C98\u9C99\u9C9D\u9CAA\u9CAC\u9CAF\u9CB9\u9CBE\u9CBF\u9CC0\u9CC1\u9CC2\u9CC8\u9CC9\u9CD1\u9CD2\u9CDA\u9CDB\u9CE0\u9CE1\u9CCC\u9CCD\u9CCE\u9CCF\u9CD0\u9CD3\u9CD4\u9CD5\u9CD7\u9CD8\u9CD9\u9CDC\u9CDD\u9CDF\u9CE2\u977C\u9785\u9791\u9792\u9794\u97AF\u97AB\u97A3\u97B2\u97B4\u9AB1\u9AB0\u9AB7\u9E58\u9AB6\u9ABA\u9ABC\u9AC1\u9AC0\u9AC5\u9AC2\u9ACB\u9ACC\u9AD1\u9B45\u9B43\u9B47\u9B49\u9B48\u9B4D\u9B51\u98E8\u990D\u992E\u9955\u9954\u9ADF\u9AE1\u9AE6\u9AEF\u9AEB\u9AFB\u9AED\u9AF9\u9B08\u9B0F\u9B13\u9B1F\u9B23\u9EBD\u9EBE\u7E3B\u9E82\u9E87\u9E88\u9E8B\u9E92\u93D6\u9E9D\u9E9F\u9EDB\u9EDC\u9EDD\u9EE0\u9EDF\u9EE2\u9EE9\u9EE7\u9EE5\u9EEA\u9EEF\u9F22\u9F2C\u9F2F\u9F39\u9F37\u9F3D\u9F3E\u9F44\uFFFD".split("");
      for (j = 0; j != D[247].length; ++j) if (D[247][j].charCodeAt(0) !== 65533) {
        e[D[247][j]] = 63232 + j;
        d[63232 + j] = D[247][j];
      }
      D[248] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9CE3\u9CE4\u9CE5\u9CE6\u9CE7\u9CE8\u9CE9\u9CEA\u9CEB\u9CEC\u9CED\u9CEE\u9CEF\u9CF0\u9CF1\u9CF2\u9CF3\u9CF4\u9CF5\u9CF6\u9CF7\u9CF8\u9CF9\u9CFA\u9CFB\u9CFC\u9CFD\u9CFE\u9CFF\u9D00\u9D01\u9D02\u9D03\u9D04\u9D05\u9D06\u9D07\u9D08\u9D09\u9D0A\u9D0B\u9D0C\u9D0D\u9D0E\u9D0F\u9D10\u9D11\u9D12\u9D13\u9D14\u9D15\u9D16\u9D17\u9D18\u9D19\u9D1A\u9D1B\u9D1C\u9D1D\u9D1E\u9D1F\u9D20\u9D21\uFFFD\u9D22\u9D23\u9D24\u9D25\u9D26\u9D27\u9D28\u9D29\u9D2A\u9D2B\u9D2C\u9D2D\u9D2E\u9D2F\u9D30\u9D31\u9D32\u9D33\u9D34\u9D35\u9D36\u9D37\u9D38\u9D39\u9D3A\u9D3B\u9D3C\u9D3D\u9D3E\u9D3F\u9D40\u9D41\u9D42\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[248].length; ++j) if (D[248][j].charCodeAt(0) !== 65533) {
        e[D[248][j]] = 63488 + j;
        d[63488 + j] = D[248][j];
      }
      D[249] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9D43\u9D44\u9D45\u9D46\u9D47\u9D48\u9D49\u9D4A\u9D4B\u9D4C\u9D4D\u9D4E\u9D4F\u9D50\u9D51\u9D52\u9D53\u9D54\u9D55\u9D56\u9D57\u9D58\u9D59\u9D5A\u9D5B\u9D5C\u9D5D\u9D5E\u9D5F\u9D60\u9D61\u9D62\u9D63\u9D64\u9D65\u9D66\u9D67\u9D68\u9D69\u9D6A\u9D6B\u9D6C\u9D6D\u9D6E\u9D6F\u9D70\u9D71\u9D72\u9D73\u9D74\u9D75\u9D76\u9D77\u9D78\u9D79\u9D7A\u9D7B\u9D7C\u9D7D\u9D7E\u9D7F\u9D80\u9D81\uFFFD\u9D82\u9D83\u9D84\u9D85\u9D86\u9D87\u9D88\u9D89\u9D8A\u9D8B\u9D8C\u9D8D\u9D8E\u9D8F\u9D90\u9D91\u9D92\u9D93\u9D94\u9D95\u9D96\u9D97\u9D98\u9D99\u9D9A\u9D9B\u9D9C\u9D9D\u9D9E\u9D9F\u9DA0\u9DA1\u9DA2\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[249].length; ++j) if (D[249][j].charCodeAt(0) !== 65533) {
        e[D[249][j]] = 63744 + j;
        d[63744 + j] = D[249][j];
      }
      D[250] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9DA3\u9DA4\u9DA5\u9DA6\u9DA7\u9DA8\u9DA9\u9DAA\u9DAB\u9DAC\u9DAD\u9DAE\u9DAF\u9DB0\u9DB1\u9DB2\u9DB3\u9DB4\u9DB5\u9DB6\u9DB7\u9DB8\u9DB9\u9DBA\u9DBB\u9DBC\u9DBD\u9DBE\u9DBF\u9DC0\u9DC1\u9DC2\u9DC3\u9DC4\u9DC5\u9DC6\u9DC7\u9DC8\u9DC9\u9DCA\u9DCB\u9DCC\u9DCD\u9DCE\u9DCF\u9DD0\u9DD1\u9DD2\u9DD3\u9DD4\u9DD5\u9DD6\u9DD7\u9DD8\u9DD9\u9DDA\u9DDB\u9DDC\u9DDD\u9DDE\u9DDF\u9DE0\u9DE1\uFFFD\u9DE2\u9DE3\u9DE4\u9DE5\u9DE6\u9DE7\u9DE8\u9DE9\u9DEA\u9DEB\u9DEC\u9DED\u9DEE\u9DEF\u9DF0\u9DF1\u9DF2\u9DF3\u9DF4\u9DF5\u9DF6\u9DF7\u9DF8\u9DF9\u9DFA\u9DFB\u9DFC\u9DFD\u9DFE\u9DFF\u9E00\u9E01\u9E02\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[250].length; ++j) if (D[250][j].charCodeAt(0) !== 65533) {
        e[D[250][j]] = 64e3 + j;
        d[64e3 + j] = D[250][j];
      }
      D[251] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9E03\u9E04\u9E05\u9E06\u9E07\u9E08\u9E09\u9E0A\u9E0B\u9E0C\u9E0D\u9E0E\u9E0F\u9E10\u9E11\u9E12\u9E13\u9E14\u9E15\u9E16\u9E17\u9E18\u9E19\u9E1A\u9E1B\u9E1C\u9E1D\u9E1E\u9E24\u9E27\u9E2E\u9E30\u9E34\u9E3B\u9E3C\u9E40\u9E4D\u9E50\u9E52\u9E53\u9E54\u9E56\u9E59\u9E5D\u9E5F\u9E60\u9E61\u9E62\u9E65\u9E6E\u9E6F\u9E72\u9E74\u9E75\u9E76\u9E77\u9E78\u9E79\u9E7A\u9E7B\u9E7C\u9E7D\u9E80\uFFFD\u9E81\u9E83\u9E84\u9E85\u9E86\u9E89\u9E8A\u9E8C\u9E8D\u9E8E\u9E8F\u9E90\u9E91\u9E94\u9E95\u9E96\u9E97\u9E98\u9E99\u9E9A\u9E9B\u9E9C\u9E9E\u9EA0\u9EA1\u9EA2\u9EA3\u9EA4\u9EA5\u9EA7\u9EA8\u9EA9\u9EAA\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[251].length; ++j) if (D[251][j].charCodeAt(0) !== 65533) {
        e[D[251][j]] = 64256 + j;
        d[64256 + j] = D[251][j];
      }
      D[252] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9EAB\u9EAC\u9EAD\u9EAE\u9EAF\u9EB0\u9EB1\u9EB2\u9EB3\u9EB5\u9EB6\u9EB7\u9EB9\u9EBA\u9EBC\u9EBF\u9EC0\u9EC1\u9EC2\u9EC3\u9EC5\u9EC6\u9EC7\u9EC8\u9ECA\u9ECB\u9ECC\u9ED0\u9ED2\u9ED3\u9ED5\u9ED6\u9ED7\u9ED9\u9EDA\u9EDE\u9EE1\u9EE3\u9EE4\u9EE6\u9EE8\u9EEB\u9EEC\u9EED\u9EEE\u9EF0\u9EF1\u9EF2\u9EF3\u9EF4\u9EF5\u9EF6\u9EF7\u9EF8\u9EFA\u9EFD\u9EFF\u9F00\u9F01\u9F02\u9F03\u9F04\u9F05\uFFFD\u9F06\u9F07\u9F08\u9F09\u9F0A\u9F0C\u9F0F\u9F11\u9F12\u9F14\u9F15\u9F16\u9F18\u9F1A\u9F1B\u9F1C\u9F1D\u9F1E\u9F1F\u9F21\u9F23\u9F24\u9F25\u9F26\u9F27\u9F28\u9F29\u9F2A\u9F2B\u9F2D\u9F2E\u9F30\u9F31\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[252].length; ++j) if (D[252][j].charCodeAt(0) !== 65533) {
        e[D[252][j]] = 64512 + j;
        d[64512 + j] = D[252][j];
      }
      D[253] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9F32\u9F33\u9F34\u9F35\u9F36\u9F38\u9F3A\u9F3C\u9F3F\u9F40\u9F41\u9F42\u9F43\u9F45\u9F46\u9F47\u9F48\u9F49\u9F4A\u9F4B\u9F4C\u9F4D\u9F4E\u9F4F\u9F52\u9F53\u9F54\u9F55\u9F56\u9F57\u9F58\u9F59\u9F5A\u9F5B\u9F5C\u9F5D\u9F5E\u9F5F\u9F60\u9F61\u9F62\u9F63\u9F64\u9F65\u9F66\u9F67\u9F68\u9F69\u9F6A\u9F6B\u9F6C\u9F6D\u9F6E\u9F6F\u9F70\u9F71\u9F72\u9F73\u9F74\u9F75\u9F76\u9F77\u9F78\uFFFD\u9F79\u9F7A\u9F7B\u9F7C\u9F7D\u9F7E\u9F81\u9F82\u9F8D\u9F8E\u9F8F\u9F90\u9F91\u9F92\u9F93\u9F94\u9F95\u9F96\u9F97\u9F98\u9F9C\u9F9D\u9F9E\u9FA1\u9FA2\u9FA3\u9FA4\u9FA5\uF92C\uF979\uF995\uF9E7\uF9F1\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[253].length; ++j) if (D[253][j].charCodeAt(0) !== 65533) {
        e[D[253][j]] = 64768 + j;
        d[64768 + j] = D[253][j];
      }
      D[254] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFA0C\uFA0D\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA18\uFA1F\uFA20\uFA21\uFA23\uFA24\uFA27\uFA28\uFA29\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[254].length; ++j) if (D[254][j].charCodeAt(0) !== 65533) {
        e[D[254][j]] = 65024 + j;
        d[65024 + j] = D[254][j];
      }
      return { "enc": e, "dec": d };
    }();
    cptable2[949] = function() {
      var d = [], e = {}, D = [], j;
      D[0] = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[0].length; ++j) if (D[0][j].charCodeAt(0) !== 65533) {
        e[D[0][j]] = 0 + j;
        d[0 + j] = D[0][j];
      }
      D[129] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uAC02\uAC03\uAC05\uAC06\uAC0B\uAC0C\uAC0D\uAC0E\uAC0F\uAC18\uAC1E\uAC1F\uAC21\uAC22\uAC23\uAC25\uAC26\uAC27\uAC28\uAC29\uAC2A\uAC2B\uAC2E\uAC32\uAC33\uAC34\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uAC35\uAC36\uAC37\uAC3A\uAC3B\uAC3D\uAC3E\uAC3F\uAC41\uAC42\uAC43\uAC44\uAC45\uAC46\uAC47\uAC48\uAC49\uAC4A\uAC4C\uAC4E\uAC4F\uAC50\uAC51\uAC52\uAC53\uAC55\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uAC56\uAC57\uAC59\uAC5A\uAC5B\uAC5D\uAC5E\uAC5F\uAC60\uAC61\uAC62\uAC63\uAC64\uAC65\uAC66\uAC67\uAC68\uAC69\uAC6A\uAC6B\uAC6C\uAC6D\uAC6E\uAC6F\uAC72\uAC73\uAC75\uAC76\uAC79\uAC7B\uAC7C\uAC7D\uAC7E\uAC7F\uAC82\uAC87\uAC88\uAC8D\uAC8E\uAC8F\uAC91\uAC92\uAC93\uAC95\uAC96\uAC97\uAC98\uAC99\uAC9A\uAC9B\uAC9E\uACA2\uACA3\uACA4\uACA5\uACA6\uACA7\uACAB\uACAD\uACAE\uACB1\uACB2\uACB3\uACB4\uACB5\uACB6\uACB7\uACBA\uACBE\uACBF\uACC0\uACC2\uACC3\uACC5\uACC6\uACC7\uACC9\uACCA\uACCB\uACCD\uACCE\uACCF\uACD0\uACD1\uACD2\uACD3\uACD4\uACD6\uACD8\uACD9\uACDA\uACDB\uACDC\uACDD\uACDE\uACDF\uACE2\uACE3\uACE5\uACE6\uACE9\uACEB\uACED\uACEE\uACF2\uACF4\uACF7\uACF8\uACF9\uACFA\uACFB\uACFE\uACFF\uAD01\uAD02\uAD03\uAD05\uAD07\uAD08\uAD09\uAD0A\uAD0B\uAD0E\uAD10\uAD12\uAD13\uFFFD".split("");
      for (j = 0; j != D[129].length; ++j) if (D[129][j].charCodeAt(0) !== 65533) {
        e[D[129][j]] = 33024 + j;
        d[33024 + j] = D[129][j];
      }
      D[130] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uAD14\uAD15\uAD16\uAD17\uAD19\uAD1A\uAD1B\uAD1D\uAD1E\uAD1F\uAD21\uAD22\uAD23\uAD24\uAD25\uAD26\uAD27\uAD28\uAD2A\uAD2B\uAD2E\uAD2F\uAD30\uAD31\uAD32\uAD33\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uAD36\uAD37\uAD39\uAD3A\uAD3B\uAD3D\uAD3E\uAD3F\uAD40\uAD41\uAD42\uAD43\uAD46\uAD48\uAD4A\uAD4B\uAD4C\uAD4D\uAD4E\uAD4F\uAD51\uAD52\uAD53\uAD55\uAD56\uAD57\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uAD59\uAD5A\uAD5B\uAD5C\uAD5D\uAD5E\uAD5F\uAD60\uAD62\uAD64\uAD65\uAD66\uAD67\uAD68\uAD69\uAD6A\uAD6B\uAD6E\uAD6F\uAD71\uAD72\uAD77\uAD78\uAD79\uAD7A\uAD7E\uAD80\uAD83\uAD84\uAD85\uAD86\uAD87\uAD8A\uAD8B\uAD8D\uAD8E\uAD8F\uAD91\uAD92\uAD93\uAD94\uAD95\uAD96\uAD97\uAD98\uAD99\uAD9A\uAD9B\uAD9E\uAD9F\uADA0\uADA1\uADA2\uADA3\uADA5\uADA6\uADA7\uADA8\uADA9\uADAA\uADAB\uADAC\uADAD\uADAE\uADAF\uADB0\uADB1\uADB2\uADB3\uADB4\uADB5\uADB6\uADB8\uADB9\uADBA\uADBB\uADBC\uADBD\uADBE\uADBF\uADC2\uADC3\uADC5\uADC6\uADC7\uADC9\uADCA\uADCB\uADCC\uADCD\uADCE\uADCF\uADD2\uADD4\uADD5\uADD6\uADD7\uADD8\uADD9\uADDA\uADDB\uADDD\uADDE\uADDF\uADE1\uADE2\uADE3\uADE5\uADE6\uADE7\uADE8\uADE9\uADEA\uADEB\uADEC\uADED\uADEE\uADEF\uADF0\uADF1\uADF2\uADF3\uADF4\uADF5\uADF6\uADF7\uFFFD".split("");
      for (j = 0; j != D[130].length; ++j) if (D[130][j].charCodeAt(0) !== 65533) {
        e[D[130][j]] = 33280 + j;
        d[33280 + j] = D[130][j];
      }
      D[131] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uADFA\uADFB\uADFD\uADFE\uAE02\uAE03\uAE04\uAE05\uAE06\uAE07\uAE0A\uAE0C\uAE0E\uAE0F\uAE10\uAE11\uAE12\uAE13\uAE15\uAE16\uAE17\uAE18\uAE19\uAE1A\uAE1B\uAE1C\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uAE1D\uAE1E\uAE1F\uAE20\uAE21\uAE22\uAE23\uAE24\uAE25\uAE26\uAE27\uAE28\uAE29\uAE2A\uAE2B\uAE2C\uAE2D\uAE2E\uAE2F\uAE32\uAE33\uAE35\uAE36\uAE39\uAE3B\uAE3C\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uAE3D\uAE3E\uAE3F\uAE42\uAE44\uAE47\uAE48\uAE49\uAE4B\uAE4F\uAE51\uAE52\uAE53\uAE55\uAE57\uAE58\uAE59\uAE5A\uAE5B\uAE5E\uAE62\uAE63\uAE64\uAE66\uAE67\uAE6A\uAE6B\uAE6D\uAE6E\uAE6F\uAE71\uAE72\uAE73\uAE74\uAE75\uAE76\uAE77\uAE7A\uAE7E\uAE7F\uAE80\uAE81\uAE82\uAE83\uAE86\uAE87\uAE88\uAE89\uAE8A\uAE8B\uAE8D\uAE8E\uAE8F\uAE90\uAE91\uAE92\uAE93\uAE94\uAE95\uAE96\uAE97\uAE98\uAE99\uAE9A\uAE9B\uAE9C\uAE9D\uAE9E\uAE9F\uAEA0\uAEA1\uAEA2\uAEA3\uAEA4\uAEA5\uAEA6\uAEA7\uAEA8\uAEA9\uAEAA\uAEAB\uAEAC\uAEAD\uAEAE\uAEAF\uAEB0\uAEB1\uAEB2\uAEB3\uAEB4\uAEB5\uAEB6\uAEB7\uAEB8\uAEB9\uAEBA\uAEBB\uAEBF\uAEC1\uAEC2\uAEC3\uAEC5\uAEC6\uAEC7\uAEC8\uAEC9\uAECA\uAECB\uAECE\uAED2\uAED3\uAED4\uAED5\uAED6\uAED7\uAEDA\uAEDB\uAEDD\uAEDE\uAEDF\uAEE0\uAEE1\uAEE2\uAEE3\uAEE4\uAEE5\uFFFD".split("");
      for (j = 0; j != D[131].length; ++j) if (D[131][j].charCodeAt(0) !== 65533) {
        e[D[131][j]] = 33536 + j;
        d[33536 + j] = D[131][j];
      }
      D[132] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uAEE6\uAEE7\uAEE9\uAEEA\uAEEC\uAEEE\uAEEF\uAEF0\uAEF1\uAEF2\uAEF3\uAEF5\uAEF6\uAEF7\uAEF9\uAEFA\uAEFB\uAEFD\uAEFE\uAEFF\uAF00\uAF01\uAF02\uAF03\uAF04\uAF05\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uAF06\uAF09\uAF0A\uAF0B\uAF0C\uAF0E\uAF0F\uAF11\uAF12\uAF13\uAF14\uAF15\uAF16\uAF17\uAF18\uAF19\uAF1A\uAF1B\uAF1C\uAF1D\uAF1E\uAF1F\uAF20\uAF21\uAF22\uAF23\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uAF24\uAF25\uAF26\uAF27\uAF28\uAF29\uAF2A\uAF2B\uAF2E\uAF2F\uAF31\uAF33\uAF35\uAF36\uAF37\uAF38\uAF39\uAF3A\uAF3B\uAF3E\uAF40\uAF44\uAF45\uAF46\uAF47\uAF4A\uAF4B\uAF4C\uAF4D\uAF4E\uAF4F\uAF51\uAF52\uAF53\uAF54\uAF55\uAF56\uAF57\uAF58\uAF59\uAF5A\uAF5B\uAF5E\uAF5F\uAF60\uAF61\uAF62\uAF63\uAF66\uAF67\uAF68\uAF69\uAF6A\uAF6B\uAF6C\uAF6D\uAF6E\uAF6F\uAF70\uAF71\uAF72\uAF73\uAF74\uAF75\uAF76\uAF77\uAF78\uAF7A\uAF7B\uAF7C\uAF7D\uAF7E\uAF7F\uAF81\uAF82\uAF83\uAF85\uAF86\uAF87\uAF89\uAF8A\uAF8B\uAF8C\uAF8D\uAF8E\uAF8F\uAF92\uAF93\uAF94\uAF96\uAF97\uAF98\uAF99\uAF9A\uAF9B\uAF9D\uAF9E\uAF9F\uAFA0\uAFA1\uAFA2\uAFA3\uAFA4\uAFA5\uAFA6\uAFA7\uAFA8\uAFA9\uAFAA\uAFAB\uAFAC\uAFAD\uAFAE\uAFAF\uAFB0\uAFB1\uAFB2\uAFB3\uAFB4\uAFB5\uAFB6\uAFB7\uAFBA\uAFBB\uAFBD\uAFBE\uFFFD".split("");
      for (j = 0; j != D[132].length; ++j) if (D[132][j].charCodeAt(0) !== 65533) {
        e[D[132][j]] = 33792 + j;
        d[33792 + j] = D[132][j];
      }
      D[133] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uAFBF\uAFC1\uAFC2\uAFC3\uAFC4\uAFC5\uAFC6\uAFCA\uAFCC\uAFCF\uAFD0\uAFD1\uAFD2\uAFD3\uAFD5\uAFD6\uAFD7\uAFD8\uAFD9\uAFDA\uAFDB\uAFDD\uAFDE\uAFDF\uAFE0\uAFE1\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uAFE2\uAFE3\uAFE4\uAFE5\uAFE6\uAFE7\uAFEA\uAFEB\uAFEC\uAFED\uAFEE\uAFEF\uAFF2\uAFF3\uAFF5\uAFF6\uAFF7\uAFF9\uAFFA\uAFFB\uAFFC\uAFFD\uAFFE\uAFFF\uB002\uB003\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB005\uB006\uB007\uB008\uB009\uB00A\uB00B\uB00D\uB00E\uB00F\uB011\uB012\uB013\uB015\uB016\uB017\uB018\uB019\uB01A\uB01B\uB01E\uB01F\uB020\uB021\uB022\uB023\uB024\uB025\uB026\uB027\uB029\uB02A\uB02B\uB02C\uB02D\uB02E\uB02F\uB030\uB031\uB032\uB033\uB034\uB035\uB036\uB037\uB038\uB039\uB03A\uB03B\uB03C\uB03D\uB03E\uB03F\uB040\uB041\uB042\uB043\uB046\uB047\uB049\uB04B\uB04D\uB04F\uB050\uB051\uB052\uB056\uB058\uB05A\uB05B\uB05C\uB05E\uB05F\uB060\uB061\uB062\uB063\uB064\uB065\uB066\uB067\uB068\uB069\uB06A\uB06B\uB06C\uB06D\uB06E\uB06F\uB070\uB071\uB072\uB073\uB074\uB075\uB076\uB077\uB078\uB079\uB07A\uB07B\uB07E\uB07F\uB081\uB082\uB083\uB085\uB086\uB087\uB088\uB089\uB08A\uB08B\uB08E\uB090\uB092\uB093\uB094\uB095\uB096\uB097\uB09B\uB09D\uB09E\uB0A3\uB0A4\uFFFD".split("");
      for (j = 0; j != D[133].length; ++j) if (D[133][j].charCodeAt(0) !== 65533) {
        e[D[133][j]] = 34048 + j;
        d[34048 + j] = D[133][j];
      }
      D[134] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB0A5\uB0A6\uB0A7\uB0AA\uB0B0\uB0B2\uB0B6\uB0B7\uB0B9\uB0BA\uB0BB\uB0BD\uB0BE\uB0BF\uB0C0\uB0C1\uB0C2\uB0C3\uB0C6\uB0CA\uB0CB\uB0CC\uB0CD\uB0CE\uB0CF\uB0D2\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB0D3\uB0D5\uB0D6\uB0D7\uB0D9\uB0DA\uB0DB\uB0DC\uB0DD\uB0DE\uB0DF\uB0E1\uB0E2\uB0E3\uB0E4\uB0E6\uB0E7\uB0E8\uB0E9\uB0EA\uB0EB\uB0EC\uB0ED\uB0EE\uB0EF\uB0F0\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB0F1\uB0F2\uB0F3\uB0F4\uB0F5\uB0F6\uB0F7\uB0F8\uB0F9\uB0FA\uB0FB\uB0FC\uB0FD\uB0FE\uB0FF\uB100\uB101\uB102\uB103\uB104\uB105\uB106\uB107\uB10A\uB10D\uB10E\uB10F\uB111\uB114\uB115\uB116\uB117\uB11A\uB11E\uB11F\uB120\uB121\uB122\uB126\uB127\uB129\uB12A\uB12B\uB12D\uB12E\uB12F\uB130\uB131\uB132\uB133\uB136\uB13A\uB13B\uB13C\uB13D\uB13E\uB13F\uB142\uB143\uB145\uB146\uB147\uB149\uB14A\uB14B\uB14C\uB14D\uB14E\uB14F\uB152\uB153\uB156\uB157\uB159\uB15A\uB15B\uB15D\uB15E\uB15F\uB161\uB162\uB163\uB164\uB165\uB166\uB167\uB168\uB169\uB16A\uB16B\uB16C\uB16D\uB16E\uB16F\uB170\uB171\uB172\uB173\uB174\uB175\uB176\uB177\uB17A\uB17B\uB17D\uB17E\uB17F\uB181\uB183\uB184\uB185\uB186\uB187\uB18A\uB18C\uB18E\uB18F\uB190\uB191\uB195\uB196\uB197\uB199\uB19A\uB19B\uB19D\uFFFD".split("");
      for (j = 0; j != D[134].length; ++j) if (D[134][j].charCodeAt(0) !== 65533) {
        e[D[134][j]] = 34304 + j;
        d[34304 + j] = D[134][j];
      }
      D[135] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB19E\uB19F\uB1A0\uB1A1\uB1A2\uB1A3\uB1A4\uB1A5\uB1A6\uB1A7\uB1A9\uB1AA\uB1AB\uB1AC\uB1AD\uB1AE\uB1AF\uB1B0\uB1B1\uB1B2\uB1B3\uB1B4\uB1B5\uB1B6\uB1B7\uB1B8\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB1B9\uB1BA\uB1BB\uB1BC\uB1BD\uB1BE\uB1BF\uB1C0\uB1C1\uB1C2\uB1C3\uB1C4\uB1C5\uB1C6\uB1C7\uB1C8\uB1C9\uB1CA\uB1CB\uB1CD\uB1CE\uB1CF\uB1D1\uB1D2\uB1D3\uB1D5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB1D6\uB1D7\uB1D8\uB1D9\uB1DA\uB1DB\uB1DE\uB1E0\uB1E1\uB1E2\uB1E3\uB1E4\uB1E5\uB1E6\uB1E7\uB1EA\uB1EB\uB1ED\uB1EE\uB1EF\uB1F1\uB1F2\uB1F3\uB1F4\uB1F5\uB1F6\uB1F7\uB1F8\uB1FA\uB1FC\uB1FE\uB1FF\uB200\uB201\uB202\uB203\uB206\uB207\uB209\uB20A\uB20D\uB20E\uB20F\uB210\uB211\uB212\uB213\uB216\uB218\uB21A\uB21B\uB21C\uB21D\uB21E\uB21F\uB221\uB222\uB223\uB224\uB225\uB226\uB227\uB228\uB229\uB22A\uB22B\uB22C\uB22D\uB22E\uB22F\uB230\uB231\uB232\uB233\uB235\uB236\uB237\uB238\uB239\uB23A\uB23B\uB23D\uB23E\uB23F\uB240\uB241\uB242\uB243\uB244\uB245\uB246\uB247\uB248\uB249\uB24A\uB24B\uB24C\uB24D\uB24E\uB24F\uB250\uB251\uB252\uB253\uB254\uB255\uB256\uB257\uB259\uB25A\uB25B\uB25D\uB25E\uB25F\uB261\uB262\uB263\uB264\uB265\uB266\uB267\uB26A\uB26B\uB26C\uB26D\uB26E\uFFFD".split("");
      for (j = 0; j != D[135].length; ++j) if (D[135][j].charCodeAt(0) !== 65533) {
        e[D[135][j]] = 34560 + j;
        d[34560 + j] = D[135][j];
      }
      D[136] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB26F\uB270\uB271\uB272\uB273\uB276\uB277\uB278\uB279\uB27A\uB27B\uB27D\uB27E\uB27F\uB280\uB281\uB282\uB283\uB286\uB287\uB288\uB28A\uB28B\uB28C\uB28D\uB28E\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB28F\uB292\uB293\uB295\uB296\uB297\uB29B\uB29C\uB29D\uB29E\uB29F\uB2A2\uB2A4\uB2A7\uB2A8\uB2A9\uB2AB\uB2AD\uB2AE\uB2AF\uB2B1\uB2B2\uB2B3\uB2B5\uB2B6\uB2B7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB2B8\uB2B9\uB2BA\uB2BB\uB2BC\uB2BD\uB2BE\uB2BF\uB2C0\uB2C1\uB2C2\uB2C3\uB2C4\uB2C5\uB2C6\uB2C7\uB2CA\uB2CB\uB2CD\uB2CE\uB2CF\uB2D1\uB2D3\uB2D4\uB2D5\uB2D6\uB2D7\uB2DA\uB2DC\uB2DE\uB2DF\uB2E0\uB2E1\uB2E3\uB2E7\uB2E9\uB2EA\uB2F0\uB2F1\uB2F2\uB2F6\uB2FC\uB2FD\uB2FE\uB302\uB303\uB305\uB306\uB307\uB309\uB30A\uB30B\uB30C\uB30D\uB30E\uB30F\uB312\uB316\uB317\uB318\uB319\uB31A\uB31B\uB31D\uB31E\uB31F\uB320\uB321\uB322\uB323\uB324\uB325\uB326\uB327\uB328\uB329\uB32A\uB32B\uB32C\uB32D\uB32E\uB32F\uB330\uB331\uB332\uB333\uB334\uB335\uB336\uB337\uB338\uB339\uB33A\uB33B\uB33C\uB33D\uB33E\uB33F\uB340\uB341\uB342\uB343\uB344\uB345\uB346\uB347\uB348\uB349\uB34A\uB34B\uB34C\uB34D\uB34E\uB34F\uB350\uB351\uB352\uB353\uB357\uB359\uB35A\uB35D\uB360\uB361\uB362\uB363\uFFFD".split("");
      for (j = 0; j != D[136].length; ++j) if (D[136][j].charCodeAt(0) !== 65533) {
        e[D[136][j]] = 34816 + j;
        d[34816 + j] = D[136][j];
      }
      D[137] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB366\uB368\uB36A\uB36C\uB36D\uB36F\uB372\uB373\uB375\uB376\uB377\uB379\uB37A\uB37B\uB37C\uB37D\uB37E\uB37F\uB382\uB386\uB387\uB388\uB389\uB38A\uB38B\uB38D\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB38E\uB38F\uB391\uB392\uB393\uB395\uB396\uB397\uB398\uB399\uB39A\uB39B\uB39C\uB39D\uB39E\uB39F\uB3A2\uB3A3\uB3A4\uB3A5\uB3A6\uB3A7\uB3A9\uB3AA\uB3AB\uB3AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB3AE\uB3AF\uB3B0\uB3B1\uB3B2\uB3B3\uB3B4\uB3B5\uB3B6\uB3B7\uB3B8\uB3B9\uB3BA\uB3BB\uB3BC\uB3BD\uB3BE\uB3BF\uB3C0\uB3C1\uB3C2\uB3C3\uB3C6\uB3C7\uB3C9\uB3CA\uB3CD\uB3CF\uB3D1\uB3D2\uB3D3\uB3D6\uB3D8\uB3DA\uB3DC\uB3DE\uB3DF\uB3E1\uB3E2\uB3E3\uB3E5\uB3E6\uB3E7\uB3E9\uB3EA\uB3EB\uB3EC\uB3ED\uB3EE\uB3EF\uB3F0\uB3F1\uB3F2\uB3F3\uB3F4\uB3F5\uB3F6\uB3F7\uB3F8\uB3F9\uB3FA\uB3FB\uB3FD\uB3FE\uB3FF\uB400\uB401\uB402\uB403\uB404\uB405\uB406\uB407\uB408\uB409\uB40A\uB40B\uB40C\uB40D\uB40E\uB40F\uB411\uB412\uB413\uB414\uB415\uB416\uB417\uB419\uB41A\uB41B\uB41D\uB41E\uB41F\uB421\uB422\uB423\uB424\uB425\uB426\uB427\uB42A\uB42C\uB42D\uB42E\uB42F\uB430\uB431\uB432\uB433\uB435\uB436\uB437\uB438\uB439\uB43A\uB43B\uB43C\uB43D\uB43E\uB43F\uB440\uB441\uB442\uB443\uB444\uFFFD".split("");
      for (j = 0; j != D[137].length; ++j) if (D[137][j].charCodeAt(0) !== 65533) {
        e[D[137][j]] = 35072 + j;
        d[35072 + j] = D[137][j];
      }
      D[138] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB445\uB446\uB447\uB448\uB449\uB44A\uB44B\uB44C\uB44D\uB44E\uB44F\uB452\uB453\uB455\uB456\uB457\uB459\uB45A\uB45B\uB45C\uB45D\uB45E\uB45F\uB462\uB464\uB466\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB467\uB468\uB469\uB46A\uB46B\uB46D\uB46E\uB46F\uB470\uB471\uB472\uB473\uB474\uB475\uB476\uB477\uB478\uB479\uB47A\uB47B\uB47C\uB47D\uB47E\uB47F\uB481\uB482\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB483\uB484\uB485\uB486\uB487\uB489\uB48A\uB48B\uB48C\uB48D\uB48E\uB48F\uB490\uB491\uB492\uB493\uB494\uB495\uB496\uB497\uB498\uB499\uB49A\uB49B\uB49C\uB49E\uB49F\uB4A0\uB4A1\uB4A2\uB4A3\uB4A5\uB4A6\uB4A7\uB4A9\uB4AA\uB4AB\uB4AD\uB4AE\uB4AF\uB4B0\uB4B1\uB4B2\uB4B3\uB4B4\uB4B6\uB4B8\uB4BA\uB4BB\uB4BC\uB4BD\uB4BE\uB4BF\uB4C1\uB4C2\uB4C3\uB4C5\uB4C6\uB4C7\uB4C9\uB4CA\uB4CB\uB4CC\uB4CD\uB4CE\uB4CF\uB4D1\uB4D2\uB4D3\uB4D4\uB4D6\uB4D7\uB4D8\uB4D9\uB4DA\uB4DB\uB4DE\uB4DF\uB4E1\uB4E2\uB4E5\uB4E7\uB4E8\uB4E9\uB4EA\uB4EB\uB4EE\uB4F0\uB4F2\uB4F3\uB4F4\uB4F5\uB4F6\uB4F7\uB4F9\uB4FA\uB4FB\uB4FC\uB4FD\uB4FE\uB4FF\uB500\uB501\uB502\uB503\uB504\uB505\uB506\uB507\uB508\uB509\uB50A\uB50B\uB50C\uB50D\uB50E\uB50F\uB510\uB511\uB512\uB513\uB516\uB517\uB519\uB51A\uB51D\uFFFD".split("");
      for (j = 0; j != D[138].length; ++j) if (D[138][j].charCodeAt(0) !== 65533) {
        e[D[138][j]] = 35328 + j;
        d[35328 + j] = D[138][j];
      }
      D[139] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB51E\uB51F\uB520\uB521\uB522\uB523\uB526\uB52B\uB52C\uB52D\uB52E\uB52F\uB532\uB533\uB535\uB536\uB537\uB539\uB53A\uB53B\uB53C\uB53D\uB53E\uB53F\uB542\uB546\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB547\uB548\uB549\uB54A\uB54E\uB54F\uB551\uB552\uB553\uB555\uB556\uB557\uB558\uB559\uB55A\uB55B\uB55E\uB562\uB563\uB564\uB565\uB566\uB567\uB568\uB569\uB56A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB56B\uB56C\uB56D\uB56E\uB56F\uB570\uB571\uB572\uB573\uB574\uB575\uB576\uB577\uB578\uB579\uB57A\uB57B\uB57C\uB57D\uB57E\uB57F\uB580\uB581\uB582\uB583\uB584\uB585\uB586\uB587\uB588\uB589\uB58A\uB58B\uB58C\uB58D\uB58E\uB58F\uB590\uB591\uB592\uB593\uB594\uB595\uB596\uB597\uB598\uB599\uB59A\uB59B\uB59C\uB59D\uB59E\uB59F\uB5A2\uB5A3\uB5A5\uB5A6\uB5A7\uB5A9\uB5AC\uB5AD\uB5AE\uB5AF\uB5B2\uB5B6\uB5B7\uB5B8\uB5B9\uB5BA\uB5BE\uB5BF\uB5C1\uB5C2\uB5C3\uB5C5\uB5C6\uB5C7\uB5C8\uB5C9\uB5CA\uB5CB\uB5CE\uB5D2\uB5D3\uB5D4\uB5D5\uB5D6\uB5D7\uB5D9\uB5DA\uB5DB\uB5DC\uB5DD\uB5DE\uB5DF\uB5E0\uB5E1\uB5E2\uB5E3\uB5E4\uB5E5\uB5E6\uB5E7\uB5E8\uB5E9\uB5EA\uB5EB\uB5ED\uB5EE\uB5EF\uB5F0\uB5F1\uB5F2\uB5F3\uB5F4\uB5F5\uB5F6\uB5F7\uB5F8\uB5F9\uB5FA\uB5FB\uB5FC\uB5FD\uB5FE\uB5FF\uFFFD".split("");
      for (j = 0; j != D[139].length; ++j) if (D[139][j].charCodeAt(0) !== 65533) {
        e[D[139][j]] = 35584 + j;
        d[35584 + j] = D[139][j];
      }
      D[140] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB600\uB601\uB602\uB603\uB604\uB605\uB606\uB607\uB608\uB609\uB60A\uB60B\uB60C\uB60D\uB60E\uB60F\uB612\uB613\uB615\uB616\uB617\uB619\uB61A\uB61B\uB61C\uB61D\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB61E\uB61F\uB620\uB621\uB622\uB623\uB624\uB626\uB627\uB628\uB629\uB62A\uB62B\uB62D\uB62E\uB62F\uB630\uB631\uB632\uB633\uB635\uB636\uB637\uB638\uB639\uB63A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB63B\uB63C\uB63D\uB63E\uB63F\uB640\uB641\uB642\uB643\uB644\uB645\uB646\uB647\uB649\uB64A\uB64B\uB64C\uB64D\uB64E\uB64F\uB650\uB651\uB652\uB653\uB654\uB655\uB656\uB657\uB658\uB659\uB65A\uB65B\uB65C\uB65D\uB65E\uB65F\uB660\uB661\uB662\uB663\uB665\uB666\uB667\uB669\uB66A\uB66B\uB66C\uB66D\uB66E\uB66F\uB670\uB671\uB672\uB673\uB674\uB675\uB676\uB677\uB678\uB679\uB67A\uB67B\uB67C\uB67D\uB67E\uB67F\uB680\uB681\uB682\uB683\uB684\uB685\uB686\uB687\uB688\uB689\uB68A\uB68B\uB68C\uB68D\uB68E\uB68F\uB690\uB691\uB692\uB693\uB694\uB695\uB696\uB697\uB698\uB699\uB69A\uB69B\uB69E\uB69F\uB6A1\uB6A2\uB6A3\uB6A5\uB6A6\uB6A7\uB6A8\uB6A9\uB6AA\uB6AD\uB6AE\uB6AF\uB6B0\uB6B2\uB6B3\uB6B4\uB6B5\uB6B6\uB6B7\uB6B8\uB6B9\uB6BA\uB6BB\uB6BC\uB6BD\uB6BE\uB6BF\uB6C0\uB6C1\uB6C2\uFFFD".split("");
      for (j = 0; j != D[140].length; ++j) if (D[140][j].charCodeAt(0) !== 65533) {
        e[D[140][j]] = 35840 + j;
        d[35840 + j] = D[140][j];
      }
      D[141] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB6C3\uB6C4\uB6C5\uB6C6\uB6C7\uB6C8\uB6C9\uB6CA\uB6CB\uB6CC\uB6CD\uB6CE\uB6CF\uB6D0\uB6D1\uB6D2\uB6D3\uB6D5\uB6D6\uB6D7\uB6D8\uB6D9\uB6DA\uB6DB\uB6DC\uB6DD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB6DE\uB6DF\uB6E0\uB6E1\uB6E2\uB6E3\uB6E4\uB6E5\uB6E6\uB6E7\uB6E8\uB6E9\uB6EA\uB6EB\uB6EC\uB6ED\uB6EE\uB6EF\uB6F1\uB6F2\uB6F3\uB6F5\uB6F6\uB6F7\uB6F9\uB6FA\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB6FB\uB6FC\uB6FD\uB6FE\uB6FF\uB702\uB703\uB704\uB706\uB707\uB708\uB709\uB70A\uB70B\uB70C\uB70D\uB70E\uB70F\uB710\uB711\uB712\uB713\uB714\uB715\uB716\uB717\uB718\uB719\uB71A\uB71B\uB71C\uB71D\uB71E\uB71F\uB720\uB721\uB722\uB723\uB724\uB725\uB726\uB727\uB72A\uB72B\uB72D\uB72E\uB731\uB732\uB733\uB734\uB735\uB736\uB737\uB73A\uB73C\uB73D\uB73E\uB73F\uB740\uB741\uB742\uB743\uB745\uB746\uB747\uB749\uB74A\uB74B\uB74D\uB74E\uB74F\uB750\uB751\uB752\uB753\uB756\uB757\uB758\uB759\uB75A\uB75B\uB75C\uB75D\uB75E\uB75F\uB761\uB762\uB763\uB765\uB766\uB767\uB769\uB76A\uB76B\uB76C\uB76D\uB76E\uB76F\uB772\uB774\uB776\uB777\uB778\uB779\uB77A\uB77B\uB77E\uB77F\uB781\uB782\uB783\uB785\uB786\uB787\uB788\uB789\uB78A\uB78B\uB78E\uB793\uB794\uB795\uB79A\uB79B\uB79D\uB79E\uFFFD".split("");
      for (j = 0; j != D[141].length; ++j) if (D[141][j].charCodeAt(0) !== 65533) {
        e[D[141][j]] = 36096 + j;
        d[36096 + j] = D[141][j];
      }
      D[142] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB79F\uB7A1\uB7A2\uB7A3\uB7A4\uB7A5\uB7A6\uB7A7\uB7AA\uB7AE\uB7AF\uB7B0\uB7B1\uB7B2\uB7B3\uB7B6\uB7B7\uB7B9\uB7BA\uB7BB\uB7BC\uB7BD\uB7BE\uB7BF\uB7C0\uB7C1\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB7C2\uB7C3\uB7C4\uB7C5\uB7C6\uB7C8\uB7CA\uB7CB\uB7CC\uB7CD\uB7CE\uB7CF\uB7D0\uB7D1\uB7D2\uB7D3\uB7D4\uB7D5\uB7D6\uB7D7\uB7D8\uB7D9\uB7DA\uB7DB\uB7DC\uB7DD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB7DE\uB7DF\uB7E0\uB7E1\uB7E2\uB7E3\uB7E4\uB7E5\uB7E6\uB7E7\uB7E8\uB7E9\uB7EA\uB7EB\uB7EE\uB7EF\uB7F1\uB7F2\uB7F3\uB7F5\uB7F6\uB7F7\uB7F8\uB7F9\uB7FA\uB7FB\uB7FE\uB802\uB803\uB804\uB805\uB806\uB80A\uB80B\uB80D\uB80E\uB80F\uB811\uB812\uB813\uB814\uB815\uB816\uB817\uB81A\uB81C\uB81E\uB81F\uB820\uB821\uB822\uB823\uB826\uB827\uB829\uB82A\uB82B\uB82D\uB82E\uB82F\uB830\uB831\uB832\uB833\uB836\uB83A\uB83B\uB83C\uB83D\uB83E\uB83F\uB841\uB842\uB843\uB845\uB846\uB847\uB848\uB849\uB84A\uB84B\uB84C\uB84D\uB84E\uB84F\uB850\uB852\uB854\uB855\uB856\uB857\uB858\uB859\uB85A\uB85B\uB85E\uB85F\uB861\uB862\uB863\uB865\uB866\uB867\uB868\uB869\uB86A\uB86B\uB86E\uB870\uB872\uB873\uB874\uB875\uB876\uB877\uB879\uB87A\uB87B\uB87D\uB87E\uB87F\uB880\uB881\uB882\uB883\uB884\uFFFD".split("");
      for (j = 0; j != D[142].length; ++j) if (D[142][j].charCodeAt(0) !== 65533) {
        e[D[142][j]] = 36352 + j;
        d[36352 + j] = D[142][j];
      }
      D[143] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB885\uB886\uB887\uB888\uB889\uB88A\uB88B\uB88C\uB88E\uB88F\uB890\uB891\uB892\uB893\uB894\uB895\uB896\uB897\uB898\uB899\uB89A\uB89B\uB89C\uB89D\uB89E\uB89F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB8A0\uB8A1\uB8A2\uB8A3\uB8A4\uB8A5\uB8A6\uB8A7\uB8A9\uB8AA\uB8AB\uB8AC\uB8AD\uB8AE\uB8AF\uB8B1\uB8B2\uB8B3\uB8B5\uB8B6\uB8B7\uB8B9\uB8BA\uB8BB\uB8BC\uB8BD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB8BE\uB8BF\uB8C2\uB8C4\uB8C6\uB8C7\uB8C8\uB8C9\uB8CA\uB8CB\uB8CD\uB8CE\uB8CF\uB8D1\uB8D2\uB8D3\uB8D5\uB8D6\uB8D7\uB8D8\uB8D9\uB8DA\uB8DB\uB8DC\uB8DE\uB8E0\uB8E2\uB8E3\uB8E4\uB8E5\uB8E6\uB8E7\uB8EA\uB8EB\uB8ED\uB8EE\uB8EF\uB8F1\uB8F2\uB8F3\uB8F4\uB8F5\uB8F6\uB8F7\uB8FA\uB8FC\uB8FE\uB8FF\uB900\uB901\uB902\uB903\uB905\uB906\uB907\uB908\uB909\uB90A\uB90B\uB90C\uB90D\uB90E\uB90F\uB910\uB911\uB912\uB913\uB914\uB915\uB916\uB917\uB919\uB91A\uB91B\uB91C\uB91D\uB91E\uB91F\uB921\uB922\uB923\uB924\uB925\uB926\uB927\uB928\uB929\uB92A\uB92B\uB92C\uB92D\uB92E\uB92F\uB930\uB931\uB932\uB933\uB934\uB935\uB936\uB937\uB938\uB939\uB93A\uB93B\uB93E\uB93F\uB941\uB942\uB943\uB945\uB946\uB947\uB948\uB949\uB94A\uB94B\uB94D\uB94E\uB950\uB952\uB953\uB954\uB955\uB956\uB957\uFFFD".split("");
      for (j = 0; j != D[143].length; ++j) if (D[143][j].charCodeAt(0) !== 65533) {
        e[D[143][j]] = 36608 + j;
        d[36608 + j] = D[143][j];
      }
      D[144] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB95A\uB95B\uB95D\uB95E\uB95F\uB961\uB962\uB963\uB964\uB965\uB966\uB967\uB96A\uB96C\uB96E\uB96F\uB970\uB971\uB972\uB973\uB976\uB977\uB979\uB97A\uB97B\uB97D\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB97E\uB97F\uB980\uB981\uB982\uB983\uB986\uB988\uB98B\uB98C\uB98F\uB990\uB991\uB992\uB993\uB994\uB995\uB996\uB997\uB998\uB999\uB99A\uB99B\uB99C\uB99D\uB99E\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uB99F\uB9A0\uB9A1\uB9A2\uB9A3\uB9A4\uB9A5\uB9A6\uB9A7\uB9A8\uB9A9\uB9AA\uB9AB\uB9AE\uB9AF\uB9B1\uB9B2\uB9B3\uB9B5\uB9B6\uB9B7\uB9B8\uB9B9\uB9BA\uB9BB\uB9BE\uB9C0\uB9C2\uB9C3\uB9C4\uB9C5\uB9C6\uB9C7\uB9CA\uB9CB\uB9CD\uB9D3\uB9D4\uB9D5\uB9D6\uB9D7\uB9DA\uB9DC\uB9DF\uB9E0\uB9E2\uB9E6\uB9E7\uB9E9\uB9EA\uB9EB\uB9ED\uB9EE\uB9EF\uB9F0\uB9F1\uB9F2\uB9F3\uB9F6\uB9FB\uB9FC\uB9FD\uB9FE\uB9FF\uBA02\uBA03\uBA04\uBA05\uBA06\uBA07\uBA09\uBA0A\uBA0B\uBA0C\uBA0D\uBA0E\uBA0F\uBA10\uBA11\uBA12\uBA13\uBA14\uBA16\uBA17\uBA18\uBA19\uBA1A\uBA1B\uBA1C\uBA1D\uBA1E\uBA1F\uBA20\uBA21\uBA22\uBA23\uBA24\uBA25\uBA26\uBA27\uBA28\uBA29\uBA2A\uBA2B\uBA2C\uBA2D\uBA2E\uBA2F\uBA30\uBA31\uBA32\uBA33\uBA34\uBA35\uBA36\uBA37\uBA3A\uBA3B\uBA3D\uBA3E\uBA3F\uBA41\uBA43\uBA44\uBA45\uBA46\uFFFD".split("");
      for (j = 0; j != D[144].length; ++j) if (D[144][j].charCodeAt(0) !== 65533) {
        e[D[144][j]] = 36864 + j;
        d[36864 + j] = D[144][j];
      }
      D[145] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uBA47\uBA4A\uBA4C\uBA4F\uBA50\uBA51\uBA52\uBA56\uBA57\uBA59\uBA5A\uBA5B\uBA5D\uBA5E\uBA5F\uBA60\uBA61\uBA62\uBA63\uBA66\uBA6A\uBA6B\uBA6C\uBA6D\uBA6E\uBA6F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uBA72\uBA73\uBA75\uBA76\uBA77\uBA79\uBA7A\uBA7B\uBA7C\uBA7D\uBA7E\uBA7F\uBA80\uBA81\uBA82\uBA86\uBA88\uBA89\uBA8A\uBA8B\uBA8D\uBA8E\uBA8F\uBA90\uBA91\uBA92\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uBA93\uBA94\uBA95\uBA96\uBA97\uBA98\uBA99\uBA9A\uBA9B\uBA9C\uBA9D\uBA9E\uBA9F\uBAA0\uBAA1\uBAA2\uBAA3\uBAA4\uBAA5\uBAA6\uBAA7\uBAAA\uBAAD\uBAAE\uBAAF\uBAB1\uBAB3\uBAB4\uBAB5\uBAB6\uBAB7\uBABA\uBABC\uBABE\uBABF\uBAC0\uBAC1\uBAC2\uBAC3\uBAC5\uBAC6\uBAC7\uBAC9\uBACA\uBACB\uBACC\uBACD\uBACE\uBACF\uBAD0\uBAD1\uBAD2\uBAD3\uBAD4\uBAD5\uBAD6\uBAD7\uBADA\uBADB\uBADC\uBADD\uBADE\uBADF\uBAE0\uBAE1\uBAE2\uBAE3\uBAE4\uBAE5\uBAE6\uBAE7\uBAE8\uBAE9\uBAEA\uBAEB\uBAEC\uBAED\uBAEE\uBAEF\uBAF0\uBAF1\uBAF2\uBAF3\uBAF4\uBAF5\uBAF6\uBAF7\uBAF8\uBAF9\uBAFA\uBAFB\uBAFD\uBAFE\uBAFF\uBB01\uBB02\uBB03\uBB05\uBB06\uBB07\uBB08\uBB09\uBB0A\uBB0B\uBB0C\uBB0E\uBB10\uBB12\uBB13\uBB14\uBB15\uBB16\uBB17\uBB19\uBB1A\uBB1B\uBB1D\uBB1E\uBB1F\uBB21\uBB22\uBB23\uBB24\uBB25\uBB26\uBB27\uFFFD".split("");
      for (j = 0; j != D[145].length; ++j) if (D[145][j].charCodeAt(0) !== 65533) {
        e[D[145][j]] = 37120 + j;
        d[37120 + j] = D[145][j];
      }
      D[146] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uBB28\uBB2A\uBB2C\uBB2D\uBB2E\uBB2F\uBB30\uBB31\uBB32\uBB33\uBB37\uBB39\uBB3A\uBB3F\uBB40\uBB41\uBB42\uBB43\uBB46\uBB48\uBB4A\uBB4B\uBB4C\uBB4E\uBB51\uBB52\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uBB53\uBB55\uBB56\uBB57\uBB59\uBB5A\uBB5B\uBB5C\uBB5D\uBB5E\uBB5F\uBB60\uBB62\uBB64\uBB65\uBB66\uBB67\uBB68\uBB69\uBB6A\uBB6B\uBB6D\uBB6E\uBB6F\uBB70\uBB71\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uBB72\uBB73\uBB74\uBB75\uBB76\uBB77\uBB78\uBB79\uBB7A\uBB7B\uBB7C\uBB7D\uBB7E\uBB7F\uBB80\uBB81\uBB82\uBB83\uBB84\uBB85\uBB86\uBB87\uBB89\uBB8A\uBB8B\uBB8D\uBB8E\uBB8F\uBB91\uBB92\uBB93\uBB94\uBB95\uBB96\uBB97\uBB98\uBB99\uBB9A\uBB9B\uBB9C\uBB9D\uBB9E\uBB9F\uBBA0\uBBA1\uBBA2\uBBA3\uBBA5\uBBA6\uBBA7\uBBA9\uBBAA\uBBAB\uBBAD\uBBAE\uBBAF\uBBB0\uBBB1\uBBB2\uBBB3\uBBB5\uBBB6\uBBB8\uBBB9\uBBBA\uBBBB\uBBBC\uBBBD\uBBBE\uBBBF\uBBC1\uBBC2\uBBC3\uBBC5\uBBC6\uBBC7\uBBC9\uBBCA\uBBCB\uBBCC\uBBCD\uBBCE\uBBCF\uBBD1\uBBD2\uBBD4\uBBD5\uBBD6\uBBD7\uBBD8\uBBD9\uBBDA\uBBDB\uBBDC\uBBDD\uBBDE\uBBDF\uBBE0\uBBE1\uBBE2\uBBE3\uBBE4\uBBE5\uBBE6\uBBE7\uBBE8\uBBE9\uBBEA\uBBEB\uBBEC\uBBED\uBBEE\uBBEF\uBBF0\uBBF1\uBBF2\uBBF3\uBBF4\uBBF5\uBBF6\uBBF7\uBBFA\uBBFB\uBBFD\uBBFE\uBC01\uFFFD".split("");
      for (j = 0; j != D[146].length; ++j) if (D[146][j].charCodeAt(0) !== 65533) {
        e[D[146][j]] = 37376 + j;
        d[37376 + j] = D[146][j];
      }
      D[147] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uBC03\uBC04\uBC05\uBC06\uBC07\uBC0A\uBC0E\uBC10\uBC12\uBC13\uBC19\uBC1A\uBC20\uBC21\uBC22\uBC23\uBC26\uBC28\uBC2A\uBC2B\uBC2C\uBC2E\uBC2F\uBC32\uBC33\uBC35\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uBC36\uBC37\uBC39\uBC3A\uBC3B\uBC3C\uBC3D\uBC3E\uBC3F\uBC42\uBC46\uBC47\uBC48\uBC4A\uBC4B\uBC4E\uBC4F\uBC51\uBC52\uBC53\uBC54\uBC55\uBC56\uBC57\uBC58\uBC59\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uBC5A\uBC5B\uBC5C\uBC5E\uBC5F\uBC60\uBC61\uBC62\uBC63\uBC64\uBC65\uBC66\uBC67\uBC68\uBC69\uBC6A\uBC6B\uBC6C\uBC6D\uBC6E\uBC6F\uBC70\uBC71\uBC72\uBC73\uBC74\uBC75\uBC76\uBC77\uBC78\uBC79\uBC7A\uBC7B\uBC7C\uBC7D\uBC7E\uBC7F\uBC80\uBC81\uBC82\uBC83\uBC86\uBC87\uBC89\uBC8A\uBC8D\uBC8F\uBC90\uBC91\uBC92\uBC93\uBC96\uBC98\uBC9B\uBC9C\uBC9D\uBC9E\uBC9F\uBCA2\uBCA3\uBCA5\uBCA6\uBCA9\uBCAA\uBCAB\uBCAC\uBCAD\uBCAE\uBCAF\uBCB2\uBCB6\uBCB7\uBCB8\uBCB9\uBCBA\uBCBB\uBCBE\uBCBF\uBCC1\uBCC2\uBCC3\uBCC5\uBCC6\uBCC7\uBCC8\uBCC9\uBCCA\uBCCB\uBCCC\uBCCE\uBCD2\uBCD3\uBCD4\uBCD6\uBCD7\uBCD9\uBCDA\uBCDB\uBCDD\uBCDE\uBCDF\uBCE0\uBCE1\uBCE2\uBCE3\uBCE4\uBCE5\uBCE6\uBCE7\uBCE8\uBCE9\uBCEA\uBCEB\uBCEC\uBCED\uBCEE\uBCEF\uBCF0\uBCF1\uBCF2\uBCF3\uBCF7\uBCF9\uBCFA\uBCFB\uBCFD\uFFFD".split("");
      for (j = 0; j != D[147].length; ++j) if (D[147][j].charCodeAt(0) !== 65533) {
        e[D[147][j]] = 37632 + j;
        d[37632 + j] = D[147][j];
      }
      D[148] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uBCFE\uBCFF\uBD00\uBD01\uBD02\uBD03\uBD06\uBD08\uBD0A\uBD0B\uBD0C\uBD0D\uBD0E\uBD0F\uBD11\uBD12\uBD13\uBD15\uBD16\uBD17\uBD18\uBD19\uBD1A\uBD1B\uBD1C\uBD1D\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uBD1E\uBD1F\uBD20\uBD21\uBD22\uBD23\uBD25\uBD26\uBD27\uBD28\uBD29\uBD2A\uBD2B\uBD2D\uBD2E\uBD2F\uBD30\uBD31\uBD32\uBD33\uBD34\uBD35\uBD36\uBD37\uBD38\uBD39\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uBD3A\uBD3B\uBD3C\uBD3D\uBD3E\uBD3F\uBD41\uBD42\uBD43\uBD44\uBD45\uBD46\uBD47\uBD4A\uBD4B\uBD4D\uBD4E\uBD4F\uBD51\uBD52\uBD53\uBD54\uBD55\uBD56\uBD57\uBD5A\uBD5B\uBD5C\uBD5D\uBD5E\uBD5F\uBD60\uBD61\uBD62\uBD63\uBD65\uBD66\uBD67\uBD69\uBD6A\uBD6B\uBD6C\uBD6D\uBD6E\uBD6F\uBD70\uBD71\uBD72\uBD73\uBD74\uBD75\uBD76\uBD77\uBD78\uBD79\uBD7A\uBD7B\uBD7C\uBD7D\uBD7E\uBD7F\uBD82\uBD83\uBD85\uBD86\uBD8B\uBD8C\uBD8D\uBD8E\uBD8F\uBD92\uBD94\uBD96\uBD97\uBD98\uBD9B\uBD9D\uBD9E\uBD9F\uBDA0\uBDA1\uBDA2\uBDA3\uBDA5\uBDA6\uBDA7\uBDA8\uBDA9\uBDAA\uBDAB\uBDAC\uBDAD\uBDAE\uBDAF\uBDB1\uBDB2\uBDB3\uBDB4\uBDB5\uBDB6\uBDB7\uBDB9\uBDBA\uBDBB\uBDBC\uBDBD\uBDBE\uBDBF\uBDC0\uBDC1\uBDC2\uBDC3\uBDC4\uBDC5\uBDC6\uBDC7\uBDC8\uBDC9\uBDCA\uBDCB\uBDCC\uBDCD\uBDCE\uBDCF\uBDD0\uBDD1\uFFFD".split("");
      for (j = 0; j != D[148].length; ++j) if (D[148][j].charCodeAt(0) !== 65533) {
        e[D[148][j]] = 37888 + j;
        d[37888 + j] = D[148][j];
      }
      D[149] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uBDD2\uBDD3\uBDD6\uBDD7\uBDD9\uBDDA\uBDDB\uBDDD\uBDDE\uBDDF\uBDE0\uBDE1\uBDE2\uBDE3\uBDE4\uBDE5\uBDE6\uBDE7\uBDE8\uBDEA\uBDEB\uBDEC\uBDED\uBDEE\uBDEF\uBDF1\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uBDF2\uBDF3\uBDF5\uBDF6\uBDF7\uBDF9\uBDFA\uBDFB\uBDFC\uBDFD\uBDFE\uBDFF\uBE01\uBE02\uBE04\uBE06\uBE07\uBE08\uBE09\uBE0A\uBE0B\uBE0E\uBE0F\uBE11\uBE12\uBE13\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uBE15\uBE16\uBE17\uBE18\uBE19\uBE1A\uBE1B\uBE1E\uBE20\uBE21\uBE22\uBE23\uBE24\uBE25\uBE26\uBE27\uBE28\uBE29\uBE2A\uBE2B\uBE2C\uBE2D\uBE2E\uBE2F\uBE30\uBE31\uBE32\uBE33\uBE34\uBE35\uBE36\uBE37\uBE38\uBE39\uBE3A\uBE3B\uBE3C\uBE3D\uBE3E\uBE3F\uBE40\uBE41\uBE42\uBE43\uBE46\uBE47\uBE49\uBE4A\uBE4B\uBE4D\uBE4F\uBE50\uBE51\uBE52\uBE53\uBE56\uBE58\uBE5C\uBE5D\uBE5E\uBE5F\uBE62\uBE63\uBE65\uBE66\uBE67\uBE69\uBE6B\uBE6C\uBE6D\uBE6E\uBE6F\uBE72\uBE76\uBE77\uBE78\uBE79\uBE7A\uBE7E\uBE7F\uBE81\uBE82\uBE83\uBE85\uBE86\uBE87\uBE88\uBE89\uBE8A\uBE8B\uBE8E\uBE92\uBE93\uBE94\uBE95\uBE96\uBE97\uBE9A\uBE9B\uBE9C\uBE9D\uBE9E\uBE9F\uBEA0\uBEA1\uBEA2\uBEA3\uBEA4\uBEA5\uBEA6\uBEA7\uBEA9\uBEAA\uBEAB\uBEAC\uBEAD\uBEAE\uBEAF\uBEB0\uBEB1\uBEB2\uBEB3\uBEB4\uBEB5\uBEB6\uBEB7\uFFFD".split("");
      for (j = 0; j != D[149].length; ++j) if (D[149][j].charCodeAt(0) !== 65533) {
        e[D[149][j]] = 38144 + j;
        d[38144 + j] = D[149][j];
      }
      D[150] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uBEB8\uBEB9\uBEBA\uBEBB\uBEBC\uBEBD\uBEBE\uBEBF\uBEC0\uBEC1\uBEC2\uBEC3\uBEC4\uBEC5\uBEC6\uBEC7\uBEC8\uBEC9\uBECA\uBECB\uBECC\uBECD\uBECE\uBECF\uBED2\uBED3\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uBED5\uBED6\uBED9\uBEDA\uBEDB\uBEDC\uBEDD\uBEDE\uBEDF\uBEE1\uBEE2\uBEE6\uBEE7\uBEE8\uBEE9\uBEEA\uBEEB\uBEED\uBEEE\uBEEF\uBEF0\uBEF1\uBEF2\uBEF3\uBEF4\uBEF5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uBEF6\uBEF7\uBEF8\uBEF9\uBEFA\uBEFB\uBEFC\uBEFD\uBEFE\uBEFF\uBF00\uBF02\uBF03\uBF04\uBF05\uBF06\uBF07\uBF0A\uBF0B\uBF0C\uBF0D\uBF0E\uBF0F\uBF10\uBF11\uBF12\uBF13\uBF14\uBF15\uBF16\uBF17\uBF1A\uBF1E\uBF1F\uBF20\uBF21\uBF22\uBF23\uBF24\uBF25\uBF26\uBF27\uBF28\uBF29\uBF2A\uBF2B\uBF2C\uBF2D\uBF2E\uBF2F\uBF30\uBF31\uBF32\uBF33\uBF34\uBF35\uBF36\uBF37\uBF38\uBF39\uBF3A\uBF3B\uBF3C\uBF3D\uBF3E\uBF3F\uBF42\uBF43\uBF45\uBF46\uBF47\uBF49\uBF4A\uBF4B\uBF4C\uBF4D\uBF4E\uBF4F\uBF52\uBF53\uBF54\uBF56\uBF57\uBF58\uBF59\uBF5A\uBF5B\uBF5C\uBF5D\uBF5E\uBF5F\uBF60\uBF61\uBF62\uBF63\uBF64\uBF65\uBF66\uBF67\uBF68\uBF69\uBF6A\uBF6B\uBF6C\uBF6D\uBF6E\uBF6F\uBF70\uBF71\uBF72\uBF73\uBF74\uBF75\uBF76\uBF77\uBF78\uBF79\uBF7A\uBF7B\uBF7C\uBF7D\uBF7E\uBF7F\uBF80\uBF81\uBF82\uFFFD".split("");
      for (j = 0; j != D[150].length; ++j) if (D[150][j].charCodeAt(0) !== 65533) {
        e[D[150][j]] = 38400 + j;
        d[38400 + j] = D[150][j];
      }
      D[151] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uBF83\uBF84\uBF85\uBF86\uBF87\uBF88\uBF89\uBF8A\uBF8B\uBF8C\uBF8D\uBF8E\uBF8F\uBF90\uBF91\uBF92\uBF93\uBF95\uBF96\uBF97\uBF98\uBF99\uBF9A\uBF9B\uBF9C\uBF9D\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uBF9E\uBF9F\uBFA0\uBFA1\uBFA2\uBFA3\uBFA4\uBFA5\uBFA6\uBFA7\uBFA8\uBFA9\uBFAA\uBFAB\uBFAC\uBFAD\uBFAE\uBFAF\uBFB1\uBFB2\uBFB3\uBFB4\uBFB5\uBFB6\uBFB7\uBFB8\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uBFB9\uBFBA\uBFBB\uBFBC\uBFBD\uBFBE\uBFBF\uBFC0\uBFC1\uBFC2\uBFC3\uBFC4\uBFC6\uBFC7\uBFC8\uBFC9\uBFCA\uBFCB\uBFCE\uBFCF\uBFD1\uBFD2\uBFD3\uBFD5\uBFD6\uBFD7\uBFD8\uBFD9\uBFDA\uBFDB\uBFDD\uBFDE\uBFE0\uBFE2\uBFE3\uBFE4\uBFE5\uBFE6\uBFE7\uBFE8\uBFE9\uBFEA\uBFEB\uBFEC\uBFED\uBFEE\uBFEF\uBFF0\uBFF1\uBFF2\uBFF3\uBFF4\uBFF5\uBFF6\uBFF7\uBFF8\uBFF9\uBFFA\uBFFB\uBFFC\uBFFD\uBFFE\uBFFF\uC000\uC001\uC002\uC003\uC004\uC005\uC006\uC007\uC008\uC009\uC00A\uC00B\uC00C\uC00D\uC00E\uC00F\uC010\uC011\uC012\uC013\uC014\uC015\uC016\uC017\uC018\uC019\uC01A\uC01B\uC01C\uC01D\uC01E\uC01F\uC020\uC021\uC022\uC023\uC024\uC025\uC026\uC027\uC028\uC029\uC02A\uC02B\uC02C\uC02D\uC02E\uC02F\uC030\uC031\uC032\uC033\uC034\uC035\uC036\uC037\uC038\uC039\uC03A\uC03B\uC03D\uC03E\uC03F\uFFFD".split("");
      for (j = 0; j != D[151].length; ++j) if (D[151][j].charCodeAt(0) !== 65533) {
        e[D[151][j]] = 38656 + j;
        d[38656 + j] = D[151][j];
      }
      D[152] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC040\uC041\uC042\uC043\uC044\uC045\uC046\uC047\uC048\uC049\uC04A\uC04B\uC04C\uC04D\uC04E\uC04F\uC050\uC052\uC053\uC054\uC055\uC056\uC057\uC059\uC05A\uC05B\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC05D\uC05E\uC05F\uC061\uC062\uC063\uC064\uC065\uC066\uC067\uC06A\uC06B\uC06C\uC06D\uC06E\uC06F\uC070\uC071\uC072\uC073\uC074\uC075\uC076\uC077\uC078\uC079\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC07A\uC07B\uC07C\uC07D\uC07E\uC07F\uC080\uC081\uC082\uC083\uC084\uC085\uC086\uC087\uC088\uC089\uC08A\uC08B\uC08C\uC08D\uC08E\uC08F\uC092\uC093\uC095\uC096\uC097\uC099\uC09A\uC09B\uC09C\uC09D\uC09E\uC09F\uC0A2\uC0A4\uC0A6\uC0A7\uC0A8\uC0A9\uC0AA\uC0AB\uC0AE\uC0B1\uC0B2\uC0B7\uC0B8\uC0B9\uC0BA\uC0BB\uC0BE\uC0C2\uC0C3\uC0C4\uC0C6\uC0C7\uC0CA\uC0CB\uC0CD\uC0CE\uC0CF\uC0D1\uC0D2\uC0D3\uC0D4\uC0D5\uC0D6\uC0D7\uC0DA\uC0DE\uC0DF\uC0E0\uC0E1\uC0E2\uC0E3\uC0E6\uC0E7\uC0E9\uC0EA\uC0EB\uC0ED\uC0EE\uC0EF\uC0F0\uC0F1\uC0F2\uC0F3\uC0F6\uC0F8\uC0FA\uC0FB\uC0FC\uC0FD\uC0FE\uC0FF\uC101\uC102\uC103\uC105\uC106\uC107\uC109\uC10A\uC10B\uC10C\uC10D\uC10E\uC10F\uC111\uC112\uC113\uC114\uC116\uC117\uC118\uC119\uC11A\uC11B\uC121\uC122\uC125\uC128\uC129\uC12A\uC12B\uC12E\uFFFD".split("");
      for (j = 0; j != D[152].length; ++j) if (D[152][j].charCodeAt(0) !== 65533) {
        e[D[152][j]] = 38912 + j;
        d[38912 + j] = D[152][j];
      }
      D[153] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC132\uC133\uC134\uC135\uC137\uC13A\uC13B\uC13D\uC13E\uC13F\uC141\uC142\uC143\uC144\uC145\uC146\uC147\uC14A\uC14E\uC14F\uC150\uC151\uC152\uC153\uC156\uC157\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC159\uC15A\uC15B\uC15D\uC15E\uC15F\uC160\uC161\uC162\uC163\uC166\uC16A\uC16B\uC16C\uC16D\uC16E\uC16F\uC171\uC172\uC173\uC175\uC176\uC177\uC179\uC17A\uC17B\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC17C\uC17D\uC17E\uC17F\uC180\uC181\uC182\uC183\uC184\uC186\uC187\uC188\uC189\uC18A\uC18B\uC18F\uC191\uC192\uC193\uC195\uC197\uC198\uC199\uC19A\uC19B\uC19E\uC1A0\uC1A2\uC1A3\uC1A4\uC1A6\uC1A7\uC1AA\uC1AB\uC1AD\uC1AE\uC1AF\uC1B1\uC1B2\uC1B3\uC1B4\uC1B5\uC1B6\uC1B7\uC1B8\uC1B9\uC1BA\uC1BB\uC1BC\uC1BE\uC1BF\uC1C0\uC1C1\uC1C2\uC1C3\uC1C5\uC1C6\uC1C7\uC1C9\uC1CA\uC1CB\uC1CD\uC1CE\uC1CF\uC1D0\uC1D1\uC1D2\uC1D3\uC1D5\uC1D6\uC1D9\uC1DA\uC1DB\uC1DC\uC1DD\uC1DE\uC1DF\uC1E1\uC1E2\uC1E3\uC1E5\uC1E6\uC1E7\uC1E9\uC1EA\uC1EB\uC1EC\uC1ED\uC1EE\uC1EF\uC1F2\uC1F4\uC1F5\uC1F6\uC1F7\uC1F8\uC1F9\uC1FA\uC1FB\uC1FE\uC1FF\uC201\uC202\uC203\uC205\uC206\uC207\uC208\uC209\uC20A\uC20B\uC20E\uC210\uC212\uC213\uC214\uC215\uC216\uC217\uC21A\uC21B\uC21D\uC21E\uC221\uC222\uC223\uFFFD".split("");
      for (j = 0; j != D[153].length; ++j) if (D[153][j].charCodeAt(0) !== 65533) {
        e[D[153][j]] = 39168 + j;
        d[39168 + j] = D[153][j];
      }
      D[154] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC224\uC225\uC226\uC227\uC22A\uC22C\uC22E\uC230\uC233\uC235\uC236\uC237\uC238\uC239\uC23A\uC23B\uC23C\uC23D\uC23E\uC23F\uC240\uC241\uC242\uC243\uC244\uC245\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC246\uC247\uC249\uC24A\uC24B\uC24C\uC24D\uC24E\uC24F\uC252\uC253\uC255\uC256\uC257\uC259\uC25A\uC25B\uC25C\uC25D\uC25E\uC25F\uC261\uC262\uC263\uC264\uC266\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC267\uC268\uC269\uC26A\uC26B\uC26E\uC26F\uC271\uC272\uC273\uC275\uC276\uC277\uC278\uC279\uC27A\uC27B\uC27E\uC280\uC282\uC283\uC284\uC285\uC286\uC287\uC28A\uC28B\uC28C\uC28D\uC28E\uC28F\uC291\uC292\uC293\uC294\uC295\uC296\uC297\uC299\uC29A\uC29C\uC29E\uC29F\uC2A0\uC2A1\uC2A2\uC2A3\uC2A6\uC2A7\uC2A9\uC2AA\uC2AB\uC2AE\uC2AF\uC2B0\uC2B1\uC2B2\uC2B3\uC2B6\uC2B8\uC2BA\uC2BB\uC2BC\uC2BD\uC2BE\uC2BF\uC2C0\uC2C1\uC2C2\uC2C3\uC2C4\uC2C5\uC2C6\uC2C7\uC2C8\uC2C9\uC2CA\uC2CB\uC2CC\uC2CD\uC2CE\uC2CF\uC2D0\uC2D1\uC2D2\uC2D3\uC2D4\uC2D5\uC2D6\uC2D7\uC2D8\uC2D9\uC2DA\uC2DB\uC2DE\uC2DF\uC2E1\uC2E2\uC2E5\uC2E6\uC2E7\uC2E8\uC2E9\uC2EA\uC2EE\uC2F0\uC2F2\uC2F3\uC2F4\uC2F5\uC2F7\uC2FA\uC2FD\uC2FE\uC2FF\uC301\uC302\uC303\uC304\uC305\uC306\uC307\uC30A\uC30B\uC30E\uC30F\uFFFD".split("");
      for (j = 0; j != D[154].length; ++j) if (D[154][j].charCodeAt(0) !== 65533) {
        e[D[154][j]] = 39424 + j;
        d[39424 + j] = D[154][j];
      }
      D[155] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC310\uC311\uC312\uC316\uC317\uC319\uC31A\uC31B\uC31D\uC31E\uC31F\uC320\uC321\uC322\uC323\uC326\uC327\uC32A\uC32B\uC32C\uC32D\uC32E\uC32F\uC330\uC331\uC332\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC333\uC334\uC335\uC336\uC337\uC338\uC339\uC33A\uC33B\uC33C\uC33D\uC33E\uC33F\uC340\uC341\uC342\uC343\uC344\uC346\uC347\uC348\uC349\uC34A\uC34B\uC34C\uC34D\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC34E\uC34F\uC350\uC351\uC352\uC353\uC354\uC355\uC356\uC357\uC358\uC359\uC35A\uC35B\uC35C\uC35D\uC35E\uC35F\uC360\uC361\uC362\uC363\uC364\uC365\uC366\uC367\uC36A\uC36B\uC36D\uC36E\uC36F\uC371\uC373\uC374\uC375\uC376\uC377\uC37A\uC37B\uC37E\uC37F\uC380\uC381\uC382\uC383\uC385\uC386\uC387\uC389\uC38A\uC38B\uC38D\uC38E\uC38F\uC390\uC391\uC392\uC393\uC394\uC395\uC396\uC397\uC398\uC399\uC39A\uC39B\uC39C\uC39D\uC39E\uC39F\uC3A0\uC3A1\uC3A2\uC3A3\uC3A4\uC3A5\uC3A6\uC3A7\uC3A8\uC3A9\uC3AA\uC3AB\uC3AC\uC3AD\uC3AE\uC3AF\uC3B0\uC3B1\uC3B2\uC3B3\uC3B4\uC3B5\uC3B6\uC3B7\uC3B8\uC3B9\uC3BA\uC3BB\uC3BC\uC3BD\uC3BE\uC3BF\uC3C1\uC3C2\uC3C3\uC3C4\uC3C5\uC3C6\uC3C7\uC3C8\uC3C9\uC3CA\uC3CB\uC3CC\uC3CD\uC3CE\uC3CF\uC3D0\uC3D1\uC3D2\uC3D3\uC3D4\uC3D5\uC3D6\uC3D7\uC3DA\uFFFD".split("");
      for (j = 0; j != D[155].length; ++j) if (D[155][j].charCodeAt(0) !== 65533) {
        e[D[155][j]] = 39680 + j;
        d[39680 + j] = D[155][j];
      }
      D[156] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC3DB\uC3DD\uC3DE\uC3E1\uC3E3\uC3E4\uC3E5\uC3E6\uC3E7\uC3EA\uC3EB\uC3EC\uC3EE\uC3EF\uC3F0\uC3F1\uC3F2\uC3F3\uC3F6\uC3F7\uC3F9\uC3FA\uC3FB\uC3FC\uC3FD\uC3FE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC3FF\uC400\uC401\uC402\uC403\uC404\uC405\uC406\uC407\uC409\uC40A\uC40B\uC40C\uC40D\uC40E\uC40F\uC411\uC412\uC413\uC414\uC415\uC416\uC417\uC418\uC419\uC41A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC41B\uC41C\uC41D\uC41E\uC41F\uC420\uC421\uC422\uC423\uC425\uC426\uC427\uC428\uC429\uC42A\uC42B\uC42D\uC42E\uC42F\uC431\uC432\uC433\uC435\uC436\uC437\uC438\uC439\uC43A\uC43B\uC43E\uC43F\uC440\uC441\uC442\uC443\uC444\uC445\uC446\uC447\uC449\uC44A\uC44B\uC44C\uC44D\uC44E\uC44F\uC450\uC451\uC452\uC453\uC454\uC455\uC456\uC457\uC458\uC459\uC45A\uC45B\uC45C\uC45D\uC45E\uC45F\uC460\uC461\uC462\uC463\uC466\uC467\uC469\uC46A\uC46B\uC46D\uC46E\uC46F\uC470\uC471\uC472\uC473\uC476\uC477\uC478\uC47A\uC47B\uC47C\uC47D\uC47E\uC47F\uC481\uC482\uC483\uC484\uC485\uC486\uC487\uC488\uC489\uC48A\uC48B\uC48C\uC48D\uC48E\uC48F\uC490\uC491\uC492\uC493\uC495\uC496\uC497\uC498\uC499\uC49A\uC49B\uC49D\uC49E\uC49F\uC4A0\uC4A1\uC4A2\uC4A3\uC4A4\uC4A5\uC4A6\uC4A7\uC4A8\uC4A9\uFFFD".split("");
      for (j = 0; j != D[156].length; ++j) if (D[156][j].charCodeAt(0) !== 65533) {
        e[D[156][j]] = 39936 + j;
        d[39936 + j] = D[156][j];
      }
      D[157] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC4AA\uC4AB\uC4AC\uC4AD\uC4AE\uC4AF\uC4B0\uC4B1\uC4B2\uC4B3\uC4B4\uC4B5\uC4B6\uC4B7\uC4B9\uC4BA\uC4BB\uC4BD\uC4BE\uC4BF\uC4C0\uC4C1\uC4C2\uC4C3\uC4C4\uC4C5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC4C6\uC4C7\uC4C8\uC4C9\uC4CA\uC4CB\uC4CC\uC4CD\uC4CE\uC4CF\uC4D0\uC4D1\uC4D2\uC4D3\uC4D4\uC4D5\uC4D6\uC4D7\uC4D8\uC4D9\uC4DA\uC4DB\uC4DC\uC4DD\uC4DE\uC4DF\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC4E0\uC4E1\uC4E2\uC4E3\uC4E4\uC4E5\uC4E6\uC4E7\uC4E8\uC4EA\uC4EB\uC4EC\uC4ED\uC4EE\uC4EF\uC4F2\uC4F3\uC4F5\uC4F6\uC4F7\uC4F9\uC4FB\uC4FC\uC4FD\uC4FE\uC502\uC503\uC504\uC505\uC506\uC507\uC508\uC509\uC50A\uC50B\uC50D\uC50E\uC50F\uC511\uC512\uC513\uC515\uC516\uC517\uC518\uC519\uC51A\uC51B\uC51D\uC51E\uC51F\uC520\uC521\uC522\uC523\uC524\uC525\uC526\uC527\uC52A\uC52B\uC52D\uC52E\uC52F\uC531\uC532\uC533\uC534\uC535\uC536\uC537\uC53A\uC53C\uC53E\uC53F\uC540\uC541\uC542\uC543\uC546\uC547\uC54B\uC54F\uC550\uC551\uC552\uC556\uC55A\uC55B\uC55C\uC55F\uC562\uC563\uC565\uC566\uC567\uC569\uC56A\uC56B\uC56C\uC56D\uC56E\uC56F\uC572\uC576\uC577\uC578\uC579\uC57A\uC57B\uC57E\uC57F\uC581\uC582\uC583\uC585\uC586\uC588\uC589\uC58A\uC58B\uC58E\uC590\uC592\uC593\uC594\uFFFD".split("");
      for (j = 0; j != D[157].length; ++j) if (D[157][j].charCodeAt(0) !== 65533) {
        e[D[157][j]] = 40192 + j;
        d[40192 + j] = D[157][j];
      }
      D[158] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC596\uC599\uC59A\uC59B\uC59D\uC59E\uC59F\uC5A1\uC5A2\uC5A3\uC5A4\uC5A5\uC5A6\uC5A7\uC5A8\uC5AA\uC5AB\uC5AC\uC5AD\uC5AE\uC5AF\uC5B0\uC5B1\uC5B2\uC5B3\uC5B6\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC5B7\uC5BA\uC5BF\uC5C0\uC5C1\uC5C2\uC5C3\uC5CB\uC5CD\uC5CF\uC5D2\uC5D3\uC5D5\uC5D6\uC5D7\uC5D9\uC5DA\uC5DB\uC5DC\uC5DD\uC5DE\uC5DF\uC5E2\uC5E4\uC5E6\uC5E7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC5E8\uC5E9\uC5EA\uC5EB\uC5EF\uC5F1\uC5F2\uC5F3\uC5F5\uC5F8\uC5F9\uC5FA\uC5FB\uC602\uC603\uC604\uC609\uC60A\uC60B\uC60D\uC60E\uC60F\uC611\uC612\uC613\uC614\uC615\uC616\uC617\uC61A\uC61D\uC61E\uC61F\uC620\uC621\uC622\uC623\uC626\uC627\uC629\uC62A\uC62B\uC62F\uC631\uC632\uC636\uC638\uC63A\uC63C\uC63D\uC63E\uC63F\uC642\uC643\uC645\uC646\uC647\uC649\uC64A\uC64B\uC64C\uC64D\uC64E\uC64F\uC652\uC656\uC657\uC658\uC659\uC65A\uC65B\uC65E\uC65F\uC661\uC662\uC663\uC664\uC665\uC666\uC667\uC668\uC669\uC66A\uC66B\uC66D\uC66E\uC670\uC672\uC673\uC674\uC675\uC676\uC677\uC67A\uC67B\uC67D\uC67E\uC67F\uC681\uC682\uC683\uC684\uC685\uC686\uC687\uC68A\uC68C\uC68E\uC68F\uC690\uC691\uC692\uC693\uC696\uC697\uC699\uC69A\uC69B\uC69D\uC69E\uC69F\uC6A0\uC6A1\uC6A2\uC6A3\uC6A6\uFFFD".split("");
      for (j = 0; j != D[158].length; ++j) if (D[158][j].charCodeAt(0) !== 65533) {
        e[D[158][j]] = 40448 + j;
        d[40448 + j] = D[158][j];
      }
      D[159] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC6A8\uC6AA\uC6AB\uC6AC\uC6AD\uC6AE\uC6AF\uC6B2\uC6B3\uC6B5\uC6B6\uC6B7\uC6BB\uC6BC\uC6BD\uC6BE\uC6BF\uC6C2\uC6C4\uC6C6\uC6C7\uC6C8\uC6C9\uC6CA\uC6CB\uC6CE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC6CF\uC6D1\uC6D2\uC6D3\uC6D5\uC6D6\uC6D7\uC6D8\uC6D9\uC6DA\uC6DB\uC6DE\uC6DF\uC6E2\uC6E3\uC6E4\uC6E5\uC6E6\uC6E7\uC6EA\uC6EB\uC6ED\uC6EE\uC6EF\uC6F1\uC6F2\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC6F3\uC6F4\uC6F5\uC6F6\uC6F7\uC6FA\uC6FB\uC6FC\uC6FE\uC6FF\uC700\uC701\uC702\uC703\uC706\uC707\uC709\uC70A\uC70B\uC70D\uC70E\uC70F\uC710\uC711\uC712\uC713\uC716\uC718\uC71A\uC71B\uC71C\uC71D\uC71E\uC71F\uC722\uC723\uC725\uC726\uC727\uC729\uC72A\uC72B\uC72C\uC72D\uC72E\uC72F\uC732\uC734\uC736\uC738\uC739\uC73A\uC73B\uC73E\uC73F\uC741\uC742\uC743\uC745\uC746\uC747\uC748\uC749\uC74B\uC74E\uC750\uC759\uC75A\uC75B\uC75D\uC75E\uC75F\uC761\uC762\uC763\uC764\uC765\uC766\uC767\uC769\uC76A\uC76C\uC76D\uC76E\uC76F\uC770\uC771\uC772\uC773\uC776\uC777\uC779\uC77A\uC77B\uC77F\uC780\uC781\uC782\uC786\uC78B\uC78C\uC78D\uC78F\uC792\uC793\uC795\uC799\uC79B\uC79C\uC79D\uC79E\uC79F\uC7A2\uC7A7\uC7A8\uC7A9\uC7AA\uC7AB\uC7AE\uC7AF\uC7B1\uC7B2\uC7B3\uC7B5\uC7B6\uC7B7\uFFFD".split("");
      for (j = 0; j != D[159].length; ++j) if (D[159][j].charCodeAt(0) !== 65533) {
        e[D[159][j]] = 40704 + j;
        d[40704 + j] = D[159][j];
      }
      D[160] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC7B8\uC7B9\uC7BA\uC7BB\uC7BE\uC7C2\uC7C3\uC7C4\uC7C5\uC7C6\uC7C7\uC7CA\uC7CB\uC7CD\uC7CF\uC7D1\uC7D2\uC7D3\uC7D4\uC7D5\uC7D6\uC7D7\uC7D9\uC7DA\uC7DB\uC7DC\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC7DE\uC7DF\uC7E0\uC7E1\uC7E2\uC7E3\uC7E5\uC7E6\uC7E7\uC7E9\uC7EA\uC7EB\uC7ED\uC7EE\uC7EF\uC7F0\uC7F1\uC7F2\uC7F3\uC7F4\uC7F5\uC7F6\uC7F7\uC7F8\uC7F9\uC7FA\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC7FB\uC7FC\uC7FD\uC7FE\uC7FF\uC802\uC803\uC805\uC806\uC807\uC809\uC80B\uC80C\uC80D\uC80E\uC80F\uC812\uC814\uC817\uC818\uC819\uC81A\uC81B\uC81E\uC81F\uC821\uC822\uC823\uC825\uC826\uC827\uC828\uC829\uC82A\uC82B\uC82E\uC830\uC832\uC833\uC834\uC835\uC836\uC837\uC839\uC83A\uC83B\uC83D\uC83E\uC83F\uC841\uC842\uC843\uC844\uC845\uC846\uC847\uC84A\uC84B\uC84E\uC84F\uC850\uC851\uC852\uC853\uC855\uC856\uC857\uC858\uC859\uC85A\uC85B\uC85C\uC85D\uC85E\uC85F\uC860\uC861\uC862\uC863\uC864\uC865\uC866\uC867\uC868\uC869\uC86A\uC86B\uC86C\uC86D\uC86E\uC86F\uC872\uC873\uC875\uC876\uC877\uC879\uC87B\uC87C\uC87D\uC87E\uC87F\uC882\uC884\uC888\uC889\uC88A\uC88E\uC88F\uC890\uC891\uC892\uC893\uC895\uC896\uC897\uC898\uC899\uC89A\uC89B\uC89C\uC89E\uC8A0\uC8A2\uC8A3\uC8A4\uFFFD".split("");
      for (j = 0; j != D[160].length; ++j) if (D[160][j].charCodeAt(0) !== 65533) {
        e[D[160][j]] = 40960 + j;
        d[40960 + j] = D[160][j];
      }
      D[161] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC8A5\uC8A6\uC8A7\uC8A9\uC8AA\uC8AB\uC8AC\uC8AD\uC8AE\uC8AF\uC8B0\uC8B1\uC8B2\uC8B3\uC8B4\uC8B5\uC8B6\uC8B7\uC8B8\uC8B9\uC8BA\uC8BB\uC8BE\uC8BF\uC8C0\uC8C1\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC8C2\uC8C3\uC8C5\uC8C6\uC8C7\uC8C9\uC8CA\uC8CB\uC8CD\uC8CE\uC8CF\uC8D0\uC8D1\uC8D2\uC8D3\uC8D6\uC8D8\uC8DA\uC8DB\uC8DC\uC8DD\uC8DE\uC8DF\uC8E2\uC8E3\uC8E5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC8E6\uC8E7\uC8E8\uC8E9\uC8EA\uC8EB\uC8EC\uC8ED\uC8EE\uC8EF\uC8F0\uC8F1\uC8F2\uC8F3\uC8F4\uC8F6\uC8F7\uC8F8\uC8F9\uC8FA\uC8FB\uC8FE\uC8FF\uC901\uC902\uC903\uC907\uC908\uC909\uC90A\uC90B\uC90E\u3000\u3001\u3002\xB7\u2025\u2026\xA8\u3003\xAD\u2015\u2225\uFF3C\u223C\u2018\u2019\u201C\u201D\u3014\u3015\u3008\u3009\u300A\u300B\u300C\u300D\u300E\u300F\u3010\u3011\xB1\xD7\xF7\u2260\u2264\u2265\u221E\u2234\xB0\u2032\u2033\u2103\u212B\uFFE0\uFFE1\uFFE5\u2642\u2640\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\xA7\u203B\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u2192\u2190\u2191\u2193\u2194\u3013\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\u2227\u2228\uFFE2\uFFFD".split("");
      for (j = 0; j != D[161].length; ++j) if (D[161][j].charCodeAt(0) !== 65533) {
        e[D[161][j]] = 41216 + j;
        d[41216 + j] = D[161][j];
      }
      D[162] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC910\uC912\uC913\uC914\uC915\uC916\uC917\uC919\uC91A\uC91B\uC91C\uC91D\uC91E\uC91F\uC920\uC921\uC922\uC923\uC924\uC925\uC926\uC927\uC928\uC929\uC92A\uC92B\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC92D\uC92E\uC92F\uC930\uC931\uC932\uC933\uC935\uC936\uC937\uC938\uC939\uC93A\uC93B\uC93C\uC93D\uC93E\uC93F\uC940\uC941\uC942\uC943\uC944\uC945\uC946\uC947\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC948\uC949\uC94A\uC94B\uC94C\uC94D\uC94E\uC94F\uC952\uC953\uC955\uC956\uC957\uC959\uC95A\uC95B\uC95C\uC95D\uC95E\uC95F\uC962\uC964\uC965\uC966\uC967\uC968\uC969\uC96A\uC96B\uC96D\uC96E\uC96F\u21D2\u21D4\u2200\u2203\xB4\uFF5E\u02C7\u02D8\u02DD\u02DA\u02D9\xB8\u02DB\xA1\xBF\u02D0\u222E\u2211\u220F\xA4\u2109\u2030\u25C1\u25C0\u25B7\u25B6\u2664\u2660\u2661\u2665\u2667\u2663\u2299\u25C8\u25A3\u25D0\u25D1\u2592\u25A4\u25A5\u25A8\u25A7\u25A6\u25A9\u2668\u260F\u260E\u261C\u261E\xB6\u2020\u2021\u2195\u2197\u2199\u2196\u2198\u266D\u2669\u266A\u266C\u327F\u321C\u2116\u33C7\u2122\u33C2\u33D8\u2121\u20AC\xAE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[162].length; ++j) if (D[162][j].charCodeAt(0) !== 65533) {
        e[D[162][j]] = 41472 + j;
        d[41472 + j] = D[162][j];
      }
      D[163] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC971\uC972\uC973\uC975\uC976\uC977\uC978\uC979\uC97A\uC97B\uC97D\uC97E\uC97F\uC980\uC981\uC982\uC983\uC984\uC985\uC986\uC987\uC98A\uC98B\uC98D\uC98E\uC98F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC991\uC992\uC993\uC994\uC995\uC996\uC997\uC99A\uC99C\uC99E\uC99F\uC9A0\uC9A1\uC9A2\uC9A3\uC9A4\uC9A5\uC9A6\uC9A7\uC9A8\uC9A9\uC9AA\uC9AB\uC9AC\uC9AD\uC9AE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC9AF\uC9B0\uC9B1\uC9B2\uC9B3\uC9B4\uC9B5\uC9B6\uC9B7\uC9B8\uC9B9\uC9BA\uC9BB\uC9BC\uC9BD\uC9BE\uC9BF\uC9C2\uC9C3\uC9C5\uC9C6\uC9C9\uC9CB\uC9CC\uC9CD\uC9CE\uC9CF\uC9D2\uC9D4\uC9D7\uC9D8\uC9DB\uFF01\uFF02\uFF03\uFF04\uFF05\uFF06\uFF07\uFF08\uFF09\uFF0A\uFF0B\uFF0C\uFF0D\uFF0E\uFF0F\uFF10\uFF11\uFF12\uFF13\uFF14\uFF15\uFF16\uFF17\uFF18\uFF19\uFF1A\uFF1B\uFF1C\uFF1D\uFF1E\uFF1F\uFF20\uFF21\uFF22\uFF23\uFF24\uFF25\uFF26\uFF27\uFF28\uFF29\uFF2A\uFF2B\uFF2C\uFF2D\uFF2E\uFF2F\uFF30\uFF31\uFF32\uFF33\uFF34\uFF35\uFF36\uFF37\uFF38\uFF39\uFF3A\uFF3B\uFFE6\uFF3D\uFF3E\uFF3F\uFF40\uFF41\uFF42\uFF43\uFF44\uFF45\uFF46\uFF47\uFF48\uFF49\uFF4A\uFF4B\uFF4C\uFF4D\uFF4E\uFF4F\uFF50\uFF51\uFF52\uFF53\uFF54\uFF55\uFF56\uFF57\uFF58\uFF59\uFF5A\uFF5B\uFF5C\uFF5D\uFFE3\uFFFD".split("");
      for (j = 0; j != D[163].length; ++j) if (D[163][j].charCodeAt(0) !== 65533) {
        e[D[163][j]] = 41728 + j;
        d[41728 + j] = D[163][j];
      }
      D[164] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uC9DE\uC9DF\uC9E1\uC9E3\uC9E5\uC9E6\uC9E8\uC9E9\uC9EA\uC9EB\uC9EE\uC9F2\uC9F3\uC9F4\uC9F5\uC9F6\uC9F7\uC9FA\uC9FB\uC9FD\uC9FE\uC9FF\uCA01\uCA02\uCA03\uCA04\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCA05\uCA06\uCA07\uCA0A\uCA0E\uCA0F\uCA10\uCA11\uCA12\uCA13\uCA15\uCA16\uCA17\uCA19\uCA1A\uCA1B\uCA1C\uCA1D\uCA1E\uCA1F\uCA20\uCA21\uCA22\uCA23\uCA24\uCA25\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCA26\uCA27\uCA28\uCA2A\uCA2B\uCA2C\uCA2D\uCA2E\uCA2F\uCA30\uCA31\uCA32\uCA33\uCA34\uCA35\uCA36\uCA37\uCA38\uCA39\uCA3A\uCA3B\uCA3C\uCA3D\uCA3E\uCA3F\uCA40\uCA41\uCA42\uCA43\uCA44\uCA45\uCA46\u3131\u3132\u3133\u3134\u3135\u3136\u3137\u3138\u3139\u313A\u313B\u313C\u313D\u313E\u313F\u3140\u3141\u3142\u3143\u3144\u3145\u3146\u3147\u3148\u3149\u314A\u314B\u314C\u314D\u314E\u314F\u3150\u3151\u3152\u3153\u3154\u3155\u3156\u3157\u3158\u3159\u315A\u315B\u315C\u315D\u315E\u315F\u3160\u3161\u3162\u3163\u3164\u3165\u3166\u3167\u3168\u3169\u316A\u316B\u316C\u316D\u316E\u316F\u3170\u3171\u3172\u3173\u3174\u3175\u3176\u3177\u3178\u3179\u317A\u317B\u317C\u317D\u317E\u317F\u3180\u3181\u3182\u3183\u3184\u3185\u3186\u3187\u3188\u3189\u318A\u318B\u318C\u318D\u318E\uFFFD".split("");
      for (j = 0; j != D[164].length; ++j) if (D[164][j].charCodeAt(0) !== 65533) {
        e[D[164][j]] = 41984 + j;
        d[41984 + j] = D[164][j];
      }
      D[165] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCA47\uCA48\uCA49\uCA4A\uCA4B\uCA4E\uCA4F\uCA51\uCA52\uCA53\uCA55\uCA56\uCA57\uCA58\uCA59\uCA5A\uCA5B\uCA5E\uCA62\uCA63\uCA64\uCA65\uCA66\uCA67\uCA69\uCA6A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCA6B\uCA6C\uCA6D\uCA6E\uCA6F\uCA70\uCA71\uCA72\uCA73\uCA74\uCA75\uCA76\uCA77\uCA78\uCA79\uCA7A\uCA7B\uCA7C\uCA7E\uCA7F\uCA80\uCA81\uCA82\uCA83\uCA85\uCA86\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCA87\uCA88\uCA89\uCA8A\uCA8B\uCA8C\uCA8D\uCA8E\uCA8F\uCA90\uCA91\uCA92\uCA93\uCA94\uCA95\uCA96\uCA97\uCA99\uCA9A\uCA9B\uCA9C\uCA9D\uCA9E\uCA9F\uCAA0\uCAA1\uCAA2\uCAA3\uCAA4\uCAA5\uCAA6\uCAA7\u2170\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178\u2179\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2160\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168\u2169\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[165].length; ++j) if (D[165][j].charCodeAt(0) !== 65533) {
        e[D[165][j]] = 42240 + j;
        d[42240 + j] = D[165][j];
      }
      D[166] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCAA8\uCAA9\uCAAA\uCAAB\uCAAC\uCAAD\uCAAE\uCAAF\uCAB0\uCAB1\uCAB2\uCAB3\uCAB4\uCAB5\uCAB6\uCAB7\uCAB8\uCAB9\uCABA\uCABB\uCABE\uCABF\uCAC1\uCAC2\uCAC3\uCAC5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCAC6\uCAC7\uCAC8\uCAC9\uCACA\uCACB\uCACE\uCAD0\uCAD2\uCAD4\uCAD5\uCAD6\uCAD7\uCADA\uCADB\uCADC\uCADD\uCADE\uCADF\uCAE1\uCAE2\uCAE3\uCAE4\uCAE5\uCAE6\uCAE7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCAE8\uCAE9\uCAEA\uCAEB\uCAED\uCAEE\uCAEF\uCAF0\uCAF1\uCAF2\uCAF3\uCAF5\uCAF6\uCAF7\uCAF8\uCAF9\uCAFA\uCAFB\uCAFC\uCAFD\uCAFE\uCAFF\uCB00\uCB01\uCB02\uCB03\uCB04\uCB05\uCB06\uCB07\uCB09\uCB0A\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\u2512\u2511\u251A\u2519\u2516\u2515\u250E\u250D\u251E\u251F\u2521\u2522\u2526\u2527\u2529\u252A\u252D\u252E\u2531\u2532\u2535\u2536\u2539\u253A\u253D\u253E\u2540\u2541\u2543\u2544\u2545\u2546\u2547\u2548\u2549\u254A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[166].length; ++j) if (D[166][j].charCodeAt(0) !== 65533) {
        e[D[166][j]] = 42496 + j;
        d[42496 + j] = D[166][j];
      }
      D[167] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCB0B\uCB0C\uCB0D\uCB0E\uCB0F\uCB11\uCB12\uCB13\uCB15\uCB16\uCB17\uCB19\uCB1A\uCB1B\uCB1C\uCB1D\uCB1E\uCB1F\uCB22\uCB23\uCB24\uCB25\uCB26\uCB27\uCB28\uCB29\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCB2A\uCB2B\uCB2C\uCB2D\uCB2E\uCB2F\uCB30\uCB31\uCB32\uCB33\uCB34\uCB35\uCB36\uCB37\uCB38\uCB39\uCB3A\uCB3B\uCB3C\uCB3D\uCB3E\uCB3F\uCB40\uCB42\uCB43\uCB44\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCB45\uCB46\uCB47\uCB4A\uCB4B\uCB4D\uCB4E\uCB4F\uCB51\uCB52\uCB53\uCB54\uCB55\uCB56\uCB57\uCB5A\uCB5B\uCB5C\uCB5E\uCB5F\uCB60\uCB61\uCB62\uCB63\uCB65\uCB66\uCB67\uCB68\uCB69\uCB6A\uCB6B\uCB6C\u3395\u3396\u3397\u2113\u3398\u33C4\u33A3\u33A4\u33A5\u33A6\u3399\u339A\u339B\u339C\u339D\u339E\u339F\u33A0\u33A1\u33A2\u33CA\u338D\u338E\u338F\u33CF\u3388\u3389\u33C8\u33A7\u33A8\u33B0\u33B1\u33B2\u33B3\u33B4\u33B5\u33B6\u33B7\u33B8\u33B9\u3380\u3381\u3382\u3383\u3384\u33BA\u33BB\u33BC\u33BD\u33BE\u33BF\u3390\u3391\u3392\u3393\u3394\u2126\u33C0\u33C1\u338A\u338B\u338C\u33D6\u33C5\u33AD\u33AE\u33AF\u33DB\u33A9\u33AA\u33AB\u33AC\u33DD\u33D0\u33D3\u33C3\u33C9\u33DC\u33C6\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[167].length; ++j) if (D[167][j].charCodeAt(0) !== 65533) {
        e[D[167][j]] = 42752 + j;
        d[42752 + j] = D[167][j];
      }
      D[168] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCB6D\uCB6E\uCB6F\uCB70\uCB71\uCB72\uCB73\uCB74\uCB75\uCB76\uCB77\uCB7A\uCB7B\uCB7C\uCB7D\uCB7E\uCB7F\uCB80\uCB81\uCB82\uCB83\uCB84\uCB85\uCB86\uCB87\uCB88\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCB89\uCB8A\uCB8B\uCB8C\uCB8D\uCB8E\uCB8F\uCB90\uCB91\uCB92\uCB93\uCB94\uCB95\uCB96\uCB97\uCB98\uCB99\uCB9A\uCB9B\uCB9D\uCB9E\uCB9F\uCBA0\uCBA1\uCBA2\uCBA3\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCBA4\uCBA5\uCBA6\uCBA7\uCBA8\uCBA9\uCBAA\uCBAB\uCBAC\uCBAD\uCBAE\uCBAF\uCBB0\uCBB1\uCBB2\uCBB3\uCBB4\uCBB5\uCBB6\uCBB7\uCBB9\uCBBA\uCBBB\uCBBC\uCBBD\uCBBE\uCBBF\uCBC0\uCBC1\uCBC2\uCBC3\uCBC4\xC6\xD0\xAA\u0126\uFFFD\u0132\uFFFD\u013F\u0141\xD8\u0152\xBA\xDE\u0166\u014A\uFFFD\u3260\u3261\u3262\u3263\u3264\u3265\u3266\u3267\u3268\u3269\u326A\u326B\u326C\u326D\u326E\u326F\u3270\u3271\u3272\u3273\u3274\u3275\u3276\u3277\u3278\u3279\u327A\u327B\u24D0\u24D1\u24D2\u24D3\u24D4\u24D5\u24D6\u24D7\u24D8\u24D9\u24DA\u24DB\u24DC\u24DD\u24DE\u24DF\u24E0\u24E1\u24E2\u24E3\u24E4\u24E5\u24E6\u24E7\u24E8\u24E9\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467\u2468\u2469\u246A\u246B\u246C\u246D\u246E\xBD\u2153\u2154\xBC\xBE\u215B\u215C\u215D\u215E\uFFFD".split("");
      for (j = 0; j != D[168].length; ++j) if (D[168][j].charCodeAt(0) !== 65533) {
        e[D[168][j]] = 43008 + j;
        d[43008 + j] = D[168][j];
      }
      D[169] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCBC5\uCBC6\uCBC7\uCBC8\uCBC9\uCBCA\uCBCB\uCBCC\uCBCD\uCBCE\uCBCF\uCBD0\uCBD1\uCBD2\uCBD3\uCBD5\uCBD6\uCBD7\uCBD8\uCBD9\uCBDA\uCBDB\uCBDC\uCBDD\uCBDE\uCBDF\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCBE0\uCBE1\uCBE2\uCBE3\uCBE5\uCBE6\uCBE8\uCBEA\uCBEB\uCBEC\uCBED\uCBEE\uCBEF\uCBF0\uCBF1\uCBF2\uCBF3\uCBF4\uCBF5\uCBF6\uCBF7\uCBF8\uCBF9\uCBFA\uCBFB\uCBFC\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCBFD\uCBFE\uCBFF\uCC00\uCC01\uCC02\uCC03\uCC04\uCC05\uCC06\uCC07\uCC08\uCC09\uCC0A\uCC0B\uCC0E\uCC0F\uCC11\uCC12\uCC13\uCC15\uCC16\uCC17\uCC18\uCC19\uCC1A\uCC1B\uCC1E\uCC1F\uCC20\uCC23\uCC24\xE6\u0111\xF0\u0127\u0131\u0133\u0138\u0140\u0142\xF8\u0153\xDF\xFE\u0167\u014B\u0149\u3200\u3201\u3202\u3203\u3204\u3205\u3206\u3207\u3208\u3209\u320A\u320B\u320C\u320D\u320E\u320F\u3210\u3211\u3212\u3213\u3214\u3215\u3216\u3217\u3218\u3219\u321A\u321B\u249C\u249D\u249E\u249F\u24A0\u24A1\u24A2\u24A3\u24A4\u24A5\u24A6\u24A7\u24A8\u24A9\u24AA\u24AB\u24AC\u24AD\u24AE\u24AF\u24B0\u24B1\u24B2\u24B3\u24B4\u24B5\u2474\u2475\u2476\u2477\u2478\u2479\u247A\u247B\u247C\u247D\u247E\u247F\u2480\u2481\u2482\xB9\xB2\xB3\u2074\u207F\u2081\u2082\u2083\u2084\uFFFD".split("");
      for (j = 0; j != D[169].length; ++j) if (D[169][j].charCodeAt(0) !== 65533) {
        e[D[169][j]] = 43264 + j;
        d[43264 + j] = D[169][j];
      }
      D[170] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCC25\uCC26\uCC2A\uCC2B\uCC2D\uCC2F\uCC31\uCC32\uCC33\uCC34\uCC35\uCC36\uCC37\uCC3A\uCC3F\uCC40\uCC41\uCC42\uCC43\uCC46\uCC47\uCC49\uCC4A\uCC4B\uCC4D\uCC4E\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCC4F\uCC50\uCC51\uCC52\uCC53\uCC56\uCC5A\uCC5B\uCC5C\uCC5D\uCC5E\uCC5F\uCC61\uCC62\uCC63\uCC65\uCC67\uCC69\uCC6A\uCC6B\uCC6C\uCC6D\uCC6E\uCC6F\uCC71\uCC72\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCC73\uCC74\uCC76\uCC77\uCC78\uCC79\uCC7A\uCC7B\uCC7C\uCC7D\uCC7E\uCC7F\uCC80\uCC81\uCC82\uCC83\uCC84\uCC85\uCC86\uCC87\uCC88\uCC89\uCC8A\uCC8B\uCC8C\uCC8D\uCC8E\uCC8F\uCC90\uCC91\uCC92\uCC93\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048\u3049\u304A\u304B\u304C\u304D\u304E\u304F\u3050\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058\u3059\u305A\u305B\u305C\u305D\u305E\u305F\u3060\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069\u306A\u306B\u306C\u306D\u306E\u306F\u3070\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078\u3079\u307A\u307B\u307C\u307D\u307E\u307F\u3080\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088\u3089\u308A\u308B\u308C\u308D\u308E\u308F\u3090\u3091\u3092\u3093\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[170].length; ++j) if (D[170][j].charCodeAt(0) !== 65533) {
        e[D[170][j]] = 43520 + j;
        d[43520 + j] = D[170][j];
      }
      D[171] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCC94\uCC95\uCC96\uCC97\uCC9A\uCC9B\uCC9D\uCC9E\uCC9F\uCCA1\uCCA2\uCCA3\uCCA4\uCCA5\uCCA6\uCCA7\uCCAA\uCCAE\uCCAF\uCCB0\uCCB1\uCCB2\uCCB3\uCCB6\uCCB7\uCCB9\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCCBA\uCCBB\uCCBD\uCCBE\uCCBF\uCCC0\uCCC1\uCCC2\uCCC3\uCCC6\uCCC8\uCCCA\uCCCB\uCCCC\uCCCD\uCCCE\uCCCF\uCCD1\uCCD2\uCCD3\uCCD5\uCCD6\uCCD7\uCCD8\uCCD9\uCCDA\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCCDB\uCCDC\uCCDD\uCCDE\uCCDF\uCCE0\uCCE1\uCCE2\uCCE3\uCCE5\uCCE6\uCCE7\uCCE8\uCCE9\uCCEA\uCCEB\uCCED\uCCEE\uCCEF\uCCF1\uCCF2\uCCF3\uCCF4\uCCF5\uCCF6\uCCF7\uCCF8\uCCF9\uCCFA\uCCFB\uCCFC\uCCFD\u30A1\u30A2\u30A3\u30A4\u30A5\u30A6\u30A7\u30A8\u30A9\u30AA\u30AB\u30AC\u30AD\u30AE\u30AF\u30B0\u30B1\u30B2\u30B3\u30B4\u30B5\u30B6\u30B7\u30B8\u30B9\u30BA\u30BB\u30BC\u30BD\u30BE\u30BF\u30C0\u30C1\u30C2\u30C3\u30C4\u30C5\u30C6\u30C7\u30C8\u30C9\u30CA\u30CB\u30CC\u30CD\u30CE\u30CF\u30D0\u30D1\u30D2\u30D3\u30D4\u30D5\u30D6\u30D7\u30D8\u30D9\u30DA\u30DB\u30DC\u30DD\u30DE\u30DF\u30E0\u30E1\u30E2\u30E3\u30E4\u30E5\u30E6\u30E7\u30E8\u30E9\u30EA\u30EB\u30EC\u30ED\u30EE\u30EF\u30F0\u30F1\u30F2\u30F3\u30F4\u30F5\u30F6\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[171].length; ++j) if (D[171][j].charCodeAt(0) !== 65533) {
        e[D[171][j]] = 43776 + j;
        d[43776 + j] = D[171][j];
      }
      D[172] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCCFE\uCCFF\uCD00\uCD02\uCD03\uCD04\uCD05\uCD06\uCD07\uCD0A\uCD0B\uCD0D\uCD0E\uCD0F\uCD11\uCD12\uCD13\uCD14\uCD15\uCD16\uCD17\uCD1A\uCD1C\uCD1E\uCD1F\uCD20\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCD21\uCD22\uCD23\uCD25\uCD26\uCD27\uCD29\uCD2A\uCD2B\uCD2D\uCD2E\uCD2F\uCD30\uCD31\uCD32\uCD33\uCD34\uCD35\uCD36\uCD37\uCD38\uCD3A\uCD3B\uCD3C\uCD3D\uCD3E\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCD3F\uCD40\uCD41\uCD42\uCD43\uCD44\uCD45\uCD46\uCD47\uCD48\uCD49\uCD4A\uCD4B\uCD4C\uCD4D\uCD4E\uCD4F\uCD50\uCD51\uCD52\uCD53\uCD54\uCD55\uCD56\uCD57\uCD58\uCD59\uCD5A\uCD5B\uCD5D\uCD5E\uCD5F\u0410\u0411\u0412\u0413\u0414\u0415\u0401\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0430\u0431\u0432\u0433\u0434\u0435\u0451\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[172].length; ++j) if (D[172][j].charCodeAt(0) !== 65533) {
        e[D[172][j]] = 44032 + j;
        d[44032 + j] = D[172][j];
      }
      D[173] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCD61\uCD62\uCD63\uCD65\uCD66\uCD67\uCD68\uCD69\uCD6A\uCD6B\uCD6E\uCD70\uCD72\uCD73\uCD74\uCD75\uCD76\uCD77\uCD79\uCD7A\uCD7B\uCD7C\uCD7D\uCD7E\uCD7F\uCD80\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCD81\uCD82\uCD83\uCD84\uCD85\uCD86\uCD87\uCD89\uCD8A\uCD8B\uCD8C\uCD8D\uCD8E\uCD8F\uCD90\uCD91\uCD92\uCD93\uCD96\uCD97\uCD99\uCD9A\uCD9B\uCD9D\uCD9E\uCD9F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCDA0\uCDA1\uCDA2\uCDA3\uCDA6\uCDA8\uCDAA\uCDAB\uCDAC\uCDAD\uCDAE\uCDAF\uCDB1\uCDB2\uCDB3\uCDB4\uCDB5\uCDB6\uCDB7\uCDB8\uCDB9\uCDBA\uCDBB\uCDBC\uCDBD\uCDBE\uCDBF\uCDC0\uCDC1\uCDC2\uCDC3\uCDC5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[173].length; ++j) if (D[173][j].charCodeAt(0) !== 65533) {
        e[D[173][j]] = 44288 + j;
        d[44288 + j] = D[173][j];
      }
      D[174] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCDC6\uCDC7\uCDC8\uCDC9\uCDCA\uCDCB\uCDCD\uCDCE\uCDCF\uCDD1\uCDD2\uCDD3\uCDD4\uCDD5\uCDD6\uCDD7\uCDD8\uCDD9\uCDDA\uCDDB\uCDDC\uCDDD\uCDDE\uCDDF\uCDE0\uCDE1\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCDE2\uCDE3\uCDE4\uCDE5\uCDE6\uCDE7\uCDE9\uCDEA\uCDEB\uCDED\uCDEE\uCDEF\uCDF1\uCDF2\uCDF3\uCDF4\uCDF5\uCDF6\uCDF7\uCDFA\uCDFC\uCDFE\uCDFF\uCE00\uCE01\uCE02\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCE03\uCE05\uCE06\uCE07\uCE09\uCE0A\uCE0B\uCE0D\uCE0E\uCE0F\uCE10\uCE11\uCE12\uCE13\uCE15\uCE16\uCE17\uCE18\uCE1A\uCE1B\uCE1C\uCE1D\uCE1E\uCE1F\uCE22\uCE23\uCE25\uCE26\uCE27\uCE29\uCE2A\uCE2B\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[174].length; ++j) if (D[174][j].charCodeAt(0) !== 65533) {
        e[D[174][j]] = 44544 + j;
        d[44544 + j] = D[174][j];
      }
      D[175] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCE2C\uCE2D\uCE2E\uCE2F\uCE32\uCE34\uCE36\uCE37\uCE38\uCE39\uCE3A\uCE3B\uCE3C\uCE3D\uCE3E\uCE3F\uCE40\uCE41\uCE42\uCE43\uCE44\uCE45\uCE46\uCE47\uCE48\uCE49\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCE4A\uCE4B\uCE4C\uCE4D\uCE4E\uCE4F\uCE50\uCE51\uCE52\uCE53\uCE54\uCE55\uCE56\uCE57\uCE5A\uCE5B\uCE5D\uCE5E\uCE62\uCE63\uCE64\uCE65\uCE66\uCE67\uCE6A\uCE6C\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCE6E\uCE6F\uCE70\uCE71\uCE72\uCE73\uCE76\uCE77\uCE79\uCE7A\uCE7B\uCE7D\uCE7E\uCE7F\uCE80\uCE81\uCE82\uCE83\uCE86\uCE88\uCE8A\uCE8B\uCE8C\uCE8D\uCE8E\uCE8F\uCE92\uCE93\uCE95\uCE96\uCE97\uCE99\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[175].length; ++j) if (D[175][j].charCodeAt(0) !== 65533) {
        e[D[175][j]] = 44800 + j;
        d[44800 + j] = D[175][j];
      }
      D[176] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCE9A\uCE9B\uCE9C\uCE9D\uCE9E\uCE9F\uCEA2\uCEA6\uCEA7\uCEA8\uCEA9\uCEAA\uCEAB\uCEAE\uCEAF\uCEB0\uCEB1\uCEB2\uCEB3\uCEB4\uCEB5\uCEB6\uCEB7\uCEB8\uCEB9\uCEBA\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCEBB\uCEBC\uCEBD\uCEBE\uCEBF\uCEC0\uCEC2\uCEC3\uCEC4\uCEC5\uCEC6\uCEC7\uCEC8\uCEC9\uCECA\uCECB\uCECC\uCECD\uCECE\uCECF\uCED0\uCED1\uCED2\uCED3\uCED4\uCED5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCED6\uCED7\uCED8\uCED9\uCEDA\uCEDB\uCEDC\uCEDD\uCEDE\uCEDF\uCEE0\uCEE1\uCEE2\uCEE3\uCEE6\uCEE7\uCEE9\uCEEA\uCEED\uCEEE\uCEEF\uCEF0\uCEF1\uCEF2\uCEF3\uCEF6\uCEFA\uCEFB\uCEFC\uCEFD\uCEFE\uCEFF\uAC00\uAC01\uAC04\uAC07\uAC08\uAC09\uAC0A\uAC10\uAC11\uAC12\uAC13\uAC14\uAC15\uAC16\uAC17\uAC19\uAC1A\uAC1B\uAC1C\uAC1D\uAC20\uAC24\uAC2C\uAC2D\uAC2F\uAC30\uAC31\uAC38\uAC39\uAC3C\uAC40\uAC4B\uAC4D\uAC54\uAC58\uAC5C\uAC70\uAC71\uAC74\uAC77\uAC78\uAC7A\uAC80\uAC81\uAC83\uAC84\uAC85\uAC86\uAC89\uAC8A\uAC8B\uAC8C\uAC90\uAC94\uAC9C\uAC9D\uAC9F\uACA0\uACA1\uACA8\uACA9\uACAA\uACAC\uACAF\uACB0\uACB8\uACB9\uACBB\uACBC\uACBD\uACC1\uACC4\uACC8\uACCC\uACD5\uACD7\uACE0\uACE1\uACE4\uACE7\uACE8\uACEA\uACEC\uACEF\uACF0\uACF1\uACF3\uACF5\uACF6\uACFC\uACFD\uAD00\uAD04\uAD06\uFFFD".split("");
      for (j = 0; j != D[176].length; ++j) if (D[176][j].charCodeAt(0) !== 65533) {
        e[D[176][j]] = 45056 + j;
        d[45056 + j] = D[176][j];
      }
      D[177] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCF02\uCF03\uCF05\uCF06\uCF07\uCF09\uCF0A\uCF0B\uCF0C\uCF0D\uCF0E\uCF0F\uCF12\uCF14\uCF16\uCF17\uCF18\uCF19\uCF1A\uCF1B\uCF1D\uCF1E\uCF1F\uCF21\uCF22\uCF23\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCF25\uCF26\uCF27\uCF28\uCF29\uCF2A\uCF2B\uCF2E\uCF32\uCF33\uCF34\uCF35\uCF36\uCF37\uCF39\uCF3A\uCF3B\uCF3C\uCF3D\uCF3E\uCF3F\uCF40\uCF41\uCF42\uCF43\uCF44\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCF45\uCF46\uCF47\uCF48\uCF49\uCF4A\uCF4B\uCF4C\uCF4D\uCF4E\uCF4F\uCF50\uCF51\uCF52\uCF53\uCF56\uCF57\uCF59\uCF5A\uCF5B\uCF5D\uCF5E\uCF5F\uCF60\uCF61\uCF62\uCF63\uCF66\uCF68\uCF6A\uCF6B\uCF6C\uAD0C\uAD0D\uAD0F\uAD11\uAD18\uAD1C\uAD20\uAD29\uAD2C\uAD2D\uAD34\uAD35\uAD38\uAD3C\uAD44\uAD45\uAD47\uAD49\uAD50\uAD54\uAD58\uAD61\uAD63\uAD6C\uAD6D\uAD70\uAD73\uAD74\uAD75\uAD76\uAD7B\uAD7C\uAD7D\uAD7F\uAD81\uAD82\uAD88\uAD89\uAD8C\uAD90\uAD9C\uAD9D\uADA4\uADB7\uADC0\uADC1\uADC4\uADC8\uADD0\uADD1\uADD3\uADDC\uADE0\uADE4\uADF8\uADF9\uADFC\uADFF\uAE00\uAE01\uAE08\uAE09\uAE0B\uAE0D\uAE14\uAE30\uAE31\uAE34\uAE37\uAE38\uAE3A\uAE40\uAE41\uAE43\uAE45\uAE46\uAE4A\uAE4C\uAE4D\uAE4E\uAE50\uAE54\uAE56\uAE5C\uAE5D\uAE5F\uAE60\uAE61\uAE65\uAE68\uAE69\uAE6C\uAE70\uAE78\uFFFD".split("");
      for (j = 0; j != D[177].length; ++j) if (D[177][j].charCodeAt(0) !== 65533) {
        e[D[177][j]] = 45312 + j;
        d[45312 + j] = D[177][j];
      }
      D[178] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCF6D\uCF6E\uCF6F\uCF72\uCF73\uCF75\uCF76\uCF77\uCF79\uCF7A\uCF7B\uCF7C\uCF7D\uCF7E\uCF7F\uCF81\uCF82\uCF83\uCF84\uCF86\uCF87\uCF88\uCF89\uCF8A\uCF8B\uCF8D\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCF8E\uCF8F\uCF90\uCF91\uCF92\uCF93\uCF94\uCF95\uCF96\uCF97\uCF98\uCF99\uCF9A\uCF9B\uCF9C\uCF9D\uCF9E\uCF9F\uCFA0\uCFA2\uCFA3\uCFA4\uCFA5\uCFA6\uCFA7\uCFA9\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCFAA\uCFAB\uCFAC\uCFAD\uCFAE\uCFAF\uCFB1\uCFB2\uCFB3\uCFB4\uCFB5\uCFB6\uCFB7\uCFB8\uCFB9\uCFBA\uCFBB\uCFBC\uCFBD\uCFBE\uCFBF\uCFC0\uCFC1\uCFC2\uCFC3\uCFC5\uCFC6\uCFC7\uCFC8\uCFC9\uCFCA\uCFCB\uAE79\uAE7B\uAE7C\uAE7D\uAE84\uAE85\uAE8C\uAEBC\uAEBD\uAEBE\uAEC0\uAEC4\uAECC\uAECD\uAECF\uAED0\uAED1\uAED8\uAED9\uAEDC\uAEE8\uAEEB\uAEED\uAEF4\uAEF8\uAEFC\uAF07\uAF08\uAF0D\uAF10\uAF2C\uAF2D\uAF30\uAF32\uAF34\uAF3C\uAF3D\uAF3F\uAF41\uAF42\uAF43\uAF48\uAF49\uAF50\uAF5C\uAF5D\uAF64\uAF65\uAF79\uAF80\uAF84\uAF88\uAF90\uAF91\uAF95\uAF9C\uAFB8\uAFB9\uAFBC\uAFC0\uAFC7\uAFC8\uAFC9\uAFCB\uAFCD\uAFCE\uAFD4\uAFDC\uAFE8\uAFE9\uAFF0\uAFF1\uAFF4\uAFF8\uB000\uB001\uB004\uB00C\uB010\uB014\uB01C\uB01D\uB028\uB044\uB045\uB048\uB04A\uB04C\uB04E\uB053\uB054\uB055\uB057\uB059\uFFFD".split("");
      for (j = 0; j != D[178].length; ++j) if (D[178][j].charCodeAt(0) !== 65533) {
        e[D[178][j]] = 45568 + j;
        d[45568 + j] = D[178][j];
      }
      D[179] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCFCC\uCFCD\uCFCE\uCFCF\uCFD0\uCFD1\uCFD2\uCFD3\uCFD4\uCFD5\uCFD6\uCFD7\uCFD8\uCFD9\uCFDA\uCFDB\uCFDC\uCFDD\uCFDE\uCFDF\uCFE2\uCFE3\uCFE5\uCFE6\uCFE7\uCFE9\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uCFEA\uCFEB\uCFEC\uCFED\uCFEE\uCFEF\uCFF2\uCFF4\uCFF6\uCFF7\uCFF8\uCFF9\uCFFA\uCFFB\uCFFD\uCFFE\uCFFF\uD001\uD002\uD003\uD005\uD006\uD007\uD008\uD009\uD00A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD00B\uD00C\uD00D\uD00E\uD00F\uD010\uD012\uD013\uD014\uD015\uD016\uD017\uD019\uD01A\uD01B\uD01C\uD01D\uD01E\uD01F\uD020\uD021\uD022\uD023\uD024\uD025\uD026\uD027\uD028\uD029\uD02A\uD02B\uD02C\uB05D\uB07C\uB07D\uB080\uB084\uB08C\uB08D\uB08F\uB091\uB098\uB099\uB09A\uB09C\uB09F\uB0A0\uB0A1\uB0A2\uB0A8\uB0A9\uB0AB\uB0AC\uB0AD\uB0AE\uB0AF\uB0B1\uB0B3\uB0B4\uB0B5\uB0B8\uB0BC\uB0C4\uB0C5\uB0C7\uB0C8\uB0C9\uB0D0\uB0D1\uB0D4\uB0D8\uB0E0\uB0E5\uB108\uB109\uB10B\uB10C\uB110\uB112\uB113\uB118\uB119\uB11B\uB11C\uB11D\uB123\uB124\uB125\uB128\uB12C\uB134\uB135\uB137\uB138\uB139\uB140\uB141\uB144\uB148\uB150\uB151\uB154\uB155\uB158\uB15C\uB160\uB178\uB179\uB17C\uB180\uB182\uB188\uB189\uB18B\uB18D\uB192\uB193\uB194\uB198\uB19C\uB1A8\uB1CC\uB1D0\uB1D4\uB1DC\uB1DD\uFFFD".split("");
      for (j = 0; j != D[179].length; ++j) if (D[179][j].charCodeAt(0) !== 65533) {
        e[D[179][j]] = 45824 + j;
        d[45824 + j] = D[179][j];
      }
      D[180] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD02E\uD02F\uD030\uD031\uD032\uD033\uD036\uD037\uD039\uD03A\uD03B\uD03D\uD03E\uD03F\uD040\uD041\uD042\uD043\uD046\uD048\uD04A\uD04B\uD04C\uD04D\uD04E\uD04F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD051\uD052\uD053\uD055\uD056\uD057\uD059\uD05A\uD05B\uD05C\uD05D\uD05E\uD05F\uD061\uD062\uD063\uD064\uD065\uD066\uD067\uD068\uD069\uD06A\uD06B\uD06E\uD06F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD071\uD072\uD073\uD075\uD076\uD077\uD078\uD079\uD07A\uD07B\uD07E\uD07F\uD080\uD082\uD083\uD084\uD085\uD086\uD087\uD088\uD089\uD08A\uD08B\uD08C\uD08D\uD08E\uD08F\uD090\uD091\uD092\uD093\uD094\uB1DF\uB1E8\uB1E9\uB1EC\uB1F0\uB1F9\uB1FB\uB1FD\uB204\uB205\uB208\uB20B\uB20C\uB214\uB215\uB217\uB219\uB220\uB234\uB23C\uB258\uB25C\uB260\uB268\uB269\uB274\uB275\uB27C\uB284\uB285\uB289\uB290\uB291\uB294\uB298\uB299\uB29A\uB2A0\uB2A1\uB2A3\uB2A5\uB2A6\uB2AA\uB2AC\uB2B0\uB2B4\uB2C8\uB2C9\uB2CC\uB2D0\uB2D2\uB2D8\uB2D9\uB2DB\uB2DD\uB2E2\uB2E4\uB2E5\uB2E6\uB2E8\uB2EB\uB2EC\uB2ED\uB2EE\uB2EF\uB2F3\uB2F4\uB2F5\uB2F7\uB2F8\uB2F9\uB2FA\uB2FB\uB2FF\uB300\uB301\uB304\uB308\uB310\uB311\uB313\uB314\uB315\uB31C\uB354\uB355\uB356\uB358\uB35B\uB35C\uB35E\uB35F\uB364\uB365\uFFFD".split("");
      for (j = 0; j != D[180].length; ++j) if (D[180][j].charCodeAt(0) !== 65533) {
        e[D[180][j]] = 46080 + j;
        d[46080 + j] = D[180][j];
      }
      D[181] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD095\uD096\uD097\uD098\uD099\uD09A\uD09B\uD09C\uD09D\uD09E\uD09F\uD0A0\uD0A1\uD0A2\uD0A3\uD0A6\uD0A7\uD0A9\uD0AA\uD0AB\uD0AD\uD0AE\uD0AF\uD0B0\uD0B1\uD0B2\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD0B3\uD0B6\uD0B8\uD0BA\uD0BB\uD0BC\uD0BD\uD0BE\uD0BF\uD0C2\uD0C3\uD0C5\uD0C6\uD0C7\uD0CA\uD0CB\uD0CC\uD0CD\uD0CE\uD0CF\uD0D2\uD0D6\uD0D7\uD0D8\uD0D9\uD0DA\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD0DB\uD0DE\uD0DF\uD0E1\uD0E2\uD0E3\uD0E5\uD0E6\uD0E7\uD0E8\uD0E9\uD0EA\uD0EB\uD0EE\uD0F2\uD0F3\uD0F4\uD0F5\uD0F6\uD0F7\uD0F9\uD0FA\uD0FB\uD0FC\uD0FD\uD0FE\uD0FF\uD100\uD101\uD102\uD103\uD104\uB367\uB369\uB36B\uB36E\uB370\uB371\uB374\uB378\uB380\uB381\uB383\uB384\uB385\uB38C\uB390\uB394\uB3A0\uB3A1\uB3A8\uB3AC\uB3C4\uB3C5\uB3C8\uB3CB\uB3CC\uB3CE\uB3D0\uB3D4\uB3D5\uB3D7\uB3D9\uB3DB\uB3DD\uB3E0\uB3E4\uB3E8\uB3FC\uB410\uB418\uB41C\uB420\uB428\uB429\uB42B\uB434\uB450\uB451\uB454\uB458\uB460\uB461\uB463\uB465\uB46C\uB480\uB488\uB49D\uB4A4\uB4A8\uB4AC\uB4B5\uB4B7\uB4B9\uB4C0\uB4C4\uB4C8\uB4D0\uB4D5\uB4DC\uB4DD\uB4E0\uB4E3\uB4E4\uB4E6\uB4EC\uB4ED\uB4EF\uB4F1\uB4F8\uB514\uB515\uB518\uB51B\uB51C\uB524\uB525\uB527\uB528\uB529\uB52A\uB530\uB531\uB534\uB538\uFFFD".split("");
      for (j = 0; j != D[181].length; ++j) if (D[181][j].charCodeAt(0) !== 65533) {
        e[D[181][j]] = 46336 + j;
        d[46336 + j] = D[181][j];
      }
      D[182] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD105\uD106\uD107\uD108\uD109\uD10A\uD10B\uD10C\uD10E\uD10F\uD110\uD111\uD112\uD113\uD114\uD115\uD116\uD117\uD118\uD119\uD11A\uD11B\uD11C\uD11D\uD11E\uD11F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD120\uD121\uD122\uD123\uD124\uD125\uD126\uD127\uD128\uD129\uD12A\uD12B\uD12C\uD12D\uD12E\uD12F\uD132\uD133\uD135\uD136\uD137\uD139\uD13B\uD13C\uD13D\uD13E\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD13F\uD142\uD146\uD147\uD148\uD149\uD14A\uD14B\uD14E\uD14F\uD151\uD152\uD153\uD155\uD156\uD157\uD158\uD159\uD15A\uD15B\uD15E\uD160\uD162\uD163\uD164\uD165\uD166\uD167\uD169\uD16A\uD16B\uD16D\uB540\uB541\uB543\uB544\uB545\uB54B\uB54C\uB54D\uB550\uB554\uB55C\uB55D\uB55F\uB560\uB561\uB5A0\uB5A1\uB5A4\uB5A8\uB5AA\uB5AB\uB5B0\uB5B1\uB5B3\uB5B4\uB5B5\uB5BB\uB5BC\uB5BD\uB5C0\uB5C4\uB5CC\uB5CD\uB5CF\uB5D0\uB5D1\uB5D8\uB5EC\uB610\uB611\uB614\uB618\uB625\uB62C\uB634\uB648\uB664\uB668\uB69C\uB69D\uB6A0\uB6A4\uB6AB\uB6AC\uB6B1\uB6D4\uB6F0\uB6F4\uB6F8\uB700\uB701\uB705\uB728\uB729\uB72C\uB72F\uB730\uB738\uB739\uB73B\uB744\uB748\uB74C\uB754\uB755\uB760\uB764\uB768\uB770\uB771\uB773\uB775\uB77C\uB77D\uB780\uB784\uB78C\uB78D\uB78F\uB790\uB791\uB792\uB796\uB797\uFFFD".split("");
      for (j = 0; j != D[182].length; ++j) if (D[182][j].charCodeAt(0) !== 65533) {
        e[D[182][j]] = 46592 + j;
        d[46592 + j] = D[182][j];
      }
      D[183] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD16E\uD16F\uD170\uD171\uD172\uD173\uD174\uD175\uD176\uD177\uD178\uD179\uD17A\uD17B\uD17D\uD17E\uD17F\uD180\uD181\uD182\uD183\uD185\uD186\uD187\uD189\uD18A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD18B\uD18C\uD18D\uD18E\uD18F\uD190\uD191\uD192\uD193\uD194\uD195\uD196\uD197\uD198\uD199\uD19A\uD19B\uD19C\uD19D\uD19E\uD19F\uD1A2\uD1A3\uD1A5\uD1A6\uD1A7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD1A9\uD1AA\uD1AB\uD1AC\uD1AD\uD1AE\uD1AF\uD1B2\uD1B4\uD1B6\uD1B7\uD1B8\uD1B9\uD1BB\uD1BD\uD1BE\uD1BF\uD1C1\uD1C2\uD1C3\uD1C4\uD1C5\uD1C6\uD1C7\uD1C8\uD1C9\uD1CA\uD1CB\uD1CC\uD1CD\uD1CE\uD1CF\uB798\uB799\uB79C\uB7A0\uB7A8\uB7A9\uB7AB\uB7AC\uB7AD\uB7B4\uB7B5\uB7B8\uB7C7\uB7C9\uB7EC\uB7ED\uB7F0\uB7F4\uB7FC\uB7FD\uB7FF\uB800\uB801\uB807\uB808\uB809\uB80C\uB810\uB818\uB819\uB81B\uB81D\uB824\uB825\uB828\uB82C\uB834\uB835\uB837\uB838\uB839\uB840\uB844\uB851\uB853\uB85C\uB85D\uB860\uB864\uB86C\uB86D\uB86F\uB871\uB878\uB87C\uB88D\uB8A8\uB8B0\uB8B4\uB8B8\uB8C0\uB8C1\uB8C3\uB8C5\uB8CC\uB8D0\uB8D4\uB8DD\uB8DF\uB8E1\uB8E8\uB8E9\uB8EC\uB8F0\uB8F8\uB8F9\uB8FB\uB8FD\uB904\uB918\uB920\uB93C\uB93D\uB940\uB944\uB94C\uB94F\uB951\uB958\uB959\uB95C\uB960\uB968\uB969\uFFFD".split("");
      for (j = 0; j != D[183].length; ++j) if (D[183][j].charCodeAt(0) !== 65533) {
        e[D[183][j]] = 46848 + j;
        d[46848 + j] = D[183][j];
      }
      D[184] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD1D0\uD1D1\uD1D2\uD1D3\uD1D4\uD1D5\uD1D6\uD1D7\uD1D9\uD1DA\uD1DB\uD1DC\uD1DD\uD1DE\uD1DF\uD1E0\uD1E1\uD1E2\uD1E3\uD1E4\uD1E5\uD1E6\uD1E7\uD1E8\uD1E9\uD1EA\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD1EB\uD1EC\uD1ED\uD1EE\uD1EF\uD1F0\uD1F1\uD1F2\uD1F3\uD1F5\uD1F6\uD1F7\uD1F9\uD1FA\uD1FB\uD1FC\uD1FD\uD1FE\uD1FF\uD200\uD201\uD202\uD203\uD204\uD205\uD206\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD208\uD20A\uD20B\uD20C\uD20D\uD20E\uD20F\uD211\uD212\uD213\uD214\uD215\uD216\uD217\uD218\uD219\uD21A\uD21B\uD21C\uD21D\uD21E\uD21F\uD220\uD221\uD222\uD223\uD224\uD225\uD226\uD227\uD228\uD229\uB96B\uB96D\uB974\uB975\uB978\uB97C\uB984\uB985\uB987\uB989\uB98A\uB98D\uB98E\uB9AC\uB9AD\uB9B0\uB9B4\uB9BC\uB9BD\uB9BF\uB9C1\uB9C8\uB9C9\uB9CC\uB9CE\uB9CF\uB9D0\uB9D1\uB9D2\uB9D8\uB9D9\uB9DB\uB9DD\uB9DE\uB9E1\uB9E3\uB9E4\uB9E5\uB9E8\uB9EC\uB9F4\uB9F5\uB9F7\uB9F8\uB9F9\uB9FA\uBA00\uBA01\uBA08\uBA15\uBA38\uBA39\uBA3C\uBA40\uBA42\uBA48\uBA49\uBA4B\uBA4D\uBA4E\uBA53\uBA54\uBA55\uBA58\uBA5C\uBA64\uBA65\uBA67\uBA68\uBA69\uBA70\uBA71\uBA74\uBA78\uBA83\uBA84\uBA85\uBA87\uBA8C\uBAA8\uBAA9\uBAAB\uBAAC\uBAB0\uBAB2\uBAB8\uBAB9\uBABB\uBABD\uBAC4\uBAC8\uBAD8\uBAD9\uBAFC\uFFFD".split("");
      for (j = 0; j != D[184].length; ++j) if (D[184][j].charCodeAt(0) !== 65533) {
        e[D[184][j]] = 47104 + j;
        d[47104 + j] = D[184][j];
      }
      D[185] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD22A\uD22B\uD22E\uD22F\uD231\uD232\uD233\uD235\uD236\uD237\uD238\uD239\uD23A\uD23B\uD23E\uD240\uD242\uD243\uD244\uD245\uD246\uD247\uD249\uD24A\uD24B\uD24C\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD24D\uD24E\uD24F\uD250\uD251\uD252\uD253\uD254\uD255\uD256\uD257\uD258\uD259\uD25A\uD25B\uD25D\uD25E\uD25F\uD260\uD261\uD262\uD263\uD265\uD266\uD267\uD268\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD269\uD26A\uD26B\uD26C\uD26D\uD26E\uD26F\uD270\uD271\uD272\uD273\uD274\uD275\uD276\uD277\uD278\uD279\uD27A\uD27B\uD27C\uD27D\uD27E\uD27F\uD282\uD283\uD285\uD286\uD287\uD289\uD28A\uD28B\uD28C\uBB00\uBB04\uBB0D\uBB0F\uBB11\uBB18\uBB1C\uBB20\uBB29\uBB2B\uBB34\uBB35\uBB36\uBB38\uBB3B\uBB3C\uBB3D\uBB3E\uBB44\uBB45\uBB47\uBB49\uBB4D\uBB4F\uBB50\uBB54\uBB58\uBB61\uBB63\uBB6C\uBB88\uBB8C\uBB90\uBBA4\uBBA8\uBBAC\uBBB4\uBBB7\uBBC0\uBBC4\uBBC8\uBBD0\uBBD3\uBBF8\uBBF9\uBBFC\uBBFF\uBC00\uBC02\uBC08\uBC09\uBC0B\uBC0C\uBC0D\uBC0F\uBC11\uBC14\uBC15\uBC16\uBC17\uBC18\uBC1B\uBC1C\uBC1D\uBC1E\uBC1F\uBC24\uBC25\uBC27\uBC29\uBC2D\uBC30\uBC31\uBC34\uBC38\uBC40\uBC41\uBC43\uBC44\uBC45\uBC49\uBC4C\uBC4D\uBC50\uBC5D\uBC84\uBC85\uBC88\uBC8B\uBC8C\uBC8E\uBC94\uBC95\uBC97\uFFFD".split("");
      for (j = 0; j != D[185].length; ++j) if (D[185][j].charCodeAt(0) !== 65533) {
        e[D[185][j]] = 47360 + j;
        d[47360 + j] = D[185][j];
      }
      D[186] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD28D\uD28E\uD28F\uD292\uD293\uD294\uD296\uD297\uD298\uD299\uD29A\uD29B\uD29D\uD29E\uD29F\uD2A1\uD2A2\uD2A3\uD2A5\uD2A6\uD2A7\uD2A8\uD2A9\uD2AA\uD2AB\uD2AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD2AE\uD2AF\uD2B0\uD2B2\uD2B3\uD2B4\uD2B5\uD2B6\uD2B7\uD2BA\uD2BB\uD2BD\uD2BE\uD2C1\uD2C3\uD2C4\uD2C5\uD2C6\uD2C7\uD2CA\uD2CC\uD2CD\uD2CE\uD2CF\uD2D0\uD2D1\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD2D2\uD2D3\uD2D5\uD2D6\uD2D7\uD2D9\uD2DA\uD2DB\uD2DD\uD2DE\uD2DF\uD2E0\uD2E1\uD2E2\uD2E3\uD2E6\uD2E7\uD2E8\uD2E9\uD2EA\uD2EB\uD2EC\uD2ED\uD2EE\uD2EF\uD2F2\uD2F3\uD2F5\uD2F6\uD2F7\uD2F9\uD2FA\uBC99\uBC9A\uBCA0\uBCA1\uBCA4\uBCA7\uBCA8\uBCB0\uBCB1\uBCB3\uBCB4\uBCB5\uBCBC\uBCBD\uBCC0\uBCC4\uBCCD\uBCCF\uBCD0\uBCD1\uBCD5\uBCD8\uBCDC\uBCF4\uBCF5\uBCF6\uBCF8\uBCFC\uBD04\uBD05\uBD07\uBD09\uBD10\uBD14\uBD24\uBD2C\uBD40\uBD48\uBD49\uBD4C\uBD50\uBD58\uBD59\uBD64\uBD68\uBD80\uBD81\uBD84\uBD87\uBD88\uBD89\uBD8A\uBD90\uBD91\uBD93\uBD95\uBD99\uBD9A\uBD9C\uBDA4\uBDB0\uBDB8\uBDD4\uBDD5\uBDD8\uBDDC\uBDE9\uBDF0\uBDF4\uBDF8\uBE00\uBE03\uBE05\uBE0C\uBE0D\uBE10\uBE14\uBE1C\uBE1D\uBE1F\uBE44\uBE45\uBE48\uBE4C\uBE4E\uBE54\uBE55\uBE57\uBE59\uBE5A\uBE5B\uBE60\uBE61\uBE64\uFFFD".split("");
      for (j = 0; j != D[186].length; ++j) if (D[186][j].charCodeAt(0) !== 65533) {
        e[D[186][j]] = 47616 + j;
        d[47616 + j] = D[186][j];
      }
      D[187] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD2FB\uD2FC\uD2FD\uD2FE\uD2FF\uD302\uD304\uD306\uD307\uD308\uD309\uD30A\uD30B\uD30F\uD311\uD312\uD313\uD315\uD317\uD318\uD319\uD31A\uD31B\uD31E\uD322\uD323\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD324\uD326\uD327\uD32A\uD32B\uD32D\uD32E\uD32F\uD331\uD332\uD333\uD334\uD335\uD336\uD337\uD33A\uD33E\uD33F\uD340\uD341\uD342\uD343\uD346\uD347\uD348\uD349\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD34A\uD34B\uD34C\uD34D\uD34E\uD34F\uD350\uD351\uD352\uD353\uD354\uD355\uD356\uD357\uD358\uD359\uD35A\uD35B\uD35C\uD35D\uD35E\uD35F\uD360\uD361\uD362\uD363\uD364\uD365\uD366\uD367\uD368\uD369\uBE68\uBE6A\uBE70\uBE71\uBE73\uBE74\uBE75\uBE7B\uBE7C\uBE7D\uBE80\uBE84\uBE8C\uBE8D\uBE8F\uBE90\uBE91\uBE98\uBE99\uBEA8\uBED0\uBED1\uBED4\uBED7\uBED8\uBEE0\uBEE3\uBEE4\uBEE5\uBEEC\uBF01\uBF08\uBF09\uBF18\uBF19\uBF1B\uBF1C\uBF1D\uBF40\uBF41\uBF44\uBF48\uBF50\uBF51\uBF55\uBF94\uBFB0\uBFC5\uBFCC\uBFCD\uBFD0\uBFD4\uBFDC\uBFDF\uBFE1\uC03C\uC051\uC058\uC05C\uC060\uC068\uC069\uC090\uC091\uC094\uC098\uC0A0\uC0A1\uC0A3\uC0A5\uC0AC\uC0AD\uC0AF\uC0B0\uC0B3\uC0B4\uC0B5\uC0B6\uC0BC\uC0BD\uC0BF\uC0C0\uC0C1\uC0C5\uC0C8\uC0C9\uC0CC\uC0D0\uC0D8\uC0D9\uC0DB\uC0DC\uC0DD\uC0E4\uFFFD".split("");
      for (j = 0; j != D[187].length; ++j) if (D[187][j].charCodeAt(0) !== 65533) {
        e[D[187][j]] = 47872 + j;
        d[47872 + j] = D[187][j];
      }
      D[188] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD36A\uD36B\uD36C\uD36D\uD36E\uD36F\uD370\uD371\uD372\uD373\uD374\uD375\uD376\uD377\uD378\uD379\uD37A\uD37B\uD37E\uD37F\uD381\uD382\uD383\uD385\uD386\uD387\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD388\uD389\uD38A\uD38B\uD38E\uD392\uD393\uD394\uD395\uD396\uD397\uD39A\uD39B\uD39D\uD39E\uD39F\uD3A1\uD3A2\uD3A3\uD3A4\uD3A5\uD3A6\uD3A7\uD3AA\uD3AC\uD3AE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD3AF\uD3B0\uD3B1\uD3B2\uD3B3\uD3B5\uD3B6\uD3B7\uD3B9\uD3BA\uD3BB\uD3BD\uD3BE\uD3BF\uD3C0\uD3C1\uD3C2\uD3C3\uD3C6\uD3C7\uD3CA\uD3CB\uD3CC\uD3CD\uD3CE\uD3CF\uD3D1\uD3D2\uD3D3\uD3D4\uD3D5\uD3D6\uC0E5\uC0E8\uC0EC\uC0F4\uC0F5\uC0F7\uC0F9\uC100\uC104\uC108\uC110\uC115\uC11C\uC11D\uC11E\uC11F\uC120\uC123\uC124\uC126\uC127\uC12C\uC12D\uC12F\uC130\uC131\uC136\uC138\uC139\uC13C\uC140\uC148\uC149\uC14B\uC14C\uC14D\uC154\uC155\uC158\uC15C\uC164\uC165\uC167\uC168\uC169\uC170\uC174\uC178\uC185\uC18C\uC18D\uC18E\uC190\uC194\uC196\uC19C\uC19D\uC19F\uC1A1\uC1A5\uC1A8\uC1A9\uC1AC\uC1B0\uC1BD\uC1C4\uC1C8\uC1CC\uC1D4\uC1D7\uC1D8\uC1E0\uC1E4\uC1E8\uC1F0\uC1F1\uC1F3\uC1FC\uC1FD\uC200\uC204\uC20C\uC20D\uC20F\uC211\uC218\uC219\uC21C\uC21F\uC220\uC228\uC229\uC22B\uC22D\uFFFD".split("");
      for (j = 0; j != D[188].length; ++j) if (D[188][j].charCodeAt(0) !== 65533) {
        e[D[188][j]] = 48128 + j;
        d[48128 + j] = D[188][j];
      }
      D[189] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD3D7\uD3D9\uD3DA\uD3DB\uD3DC\uD3DD\uD3DE\uD3DF\uD3E0\uD3E2\uD3E4\uD3E5\uD3E6\uD3E7\uD3E8\uD3E9\uD3EA\uD3EB\uD3EE\uD3EF\uD3F1\uD3F2\uD3F3\uD3F5\uD3F6\uD3F7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD3F8\uD3F9\uD3FA\uD3FB\uD3FE\uD400\uD402\uD403\uD404\uD405\uD406\uD407\uD409\uD40A\uD40B\uD40C\uD40D\uD40E\uD40F\uD410\uD411\uD412\uD413\uD414\uD415\uD416\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD417\uD418\uD419\uD41A\uD41B\uD41C\uD41E\uD41F\uD420\uD421\uD422\uD423\uD424\uD425\uD426\uD427\uD428\uD429\uD42A\uD42B\uD42C\uD42D\uD42E\uD42F\uD430\uD431\uD432\uD433\uD434\uD435\uD436\uD437\uC22F\uC231\uC232\uC234\uC248\uC250\uC251\uC254\uC258\uC260\uC265\uC26C\uC26D\uC270\uC274\uC27C\uC27D\uC27F\uC281\uC288\uC289\uC290\uC298\uC29B\uC29D\uC2A4\uC2A5\uC2A8\uC2AC\uC2AD\uC2B4\uC2B5\uC2B7\uC2B9\uC2DC\uC2DD\uC2E0\uC2E3\uC2E4\uC2EB\uC2EC\uC2ED\uC2EF\uC2F1\uC2F6\uC2F8\uC2F9\uC2FB\uC2FC\uC300\uC308\uC309\uC30C\uC30D\uC313\uC314\uC315\uC318\uC31C\uC324\uC325\uC328\uC329\uC345\uC368\uC369\uC36C\uC370\uC372\uC378\uC379\uC37C\uC37D\uC384\uC388\uC38C\uC3C0\uC3D8\uC3D9\uC3DC\uC3DF\uC3E0\uC3E2\uC3E8\uC3E9\uC3ED\uC3F4\uC3F5\uC3F8\uC408\uC410\uC424\uC42C\uC430\uFFFD".split("");
      for (j = 0; j != D[189].length; ++j) if (D[189][j].charCodeAt(0) !== 65533) {
        e[D[189][j]] = 48384 + j;
        d[48384 + j] = D[189][j];
      }
      D[190] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD438\uD439\uD43A\uD43B\uD43C\uD43D\uD43E\uD43F\uD441\uD442\uD443\uD445\uD446\uD447\uD448\uD449\uD44A\uD44B\uD44C\uD44D\uD44E\uD44F\uD450\uD451\uD452\uD453\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD454\uD455\uD456\uD457\uD458\uD459\uD45A\uD45B\uD45D\uD45E\uD45F\uD461\uD462\uD463\uD465\uD466\uD467\uD468\uD469\uD46A\uD46B\uD46C\uD46E\uD470\uD471\uD472\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD473\uD474\uD475\uD476\uD477\uD47A\uD47B\uD47D\uD47E\uD481\uD483\uD484\uD485\uD486\uD487\uD48A\uD48C\uD48E\uD48F\uD490\uD491\uD492\uD493\uD495\uD496\uD497\uD498\uD499\uD49A\uD49B\uD49C\uD49D\uC434\uC43C\uC43D\uC448\uC464\uC465\uC468\uC46C\uC474\uC475\uC479\uC480\uC494\uC49C\uC4B8\uC4BC\uC4E9\uC4F0\uC4F1\uC4F4\uC4F8\uC4FA\uC4FF\uC500\uC501\uC50C\uC510\uC514\uC51C\uC528\uC529\uC52C\uC530\uC538\uC539\uC53B\uC53D\uC544\uC545\uC548\uC549\uC54A\uC54C\uC54D\uC54E\uC553\uC554\uC555\uC557\uC558\uC559\uC55D\uC55E\uC560\uC561\uC564\uC568\uC570\uC571\uC573\uC574\uC575\uC57C\uC57D\uC580\uC584\uC587\uC58C\uC58D\uC58F\uC591\uC595\uC597\uC598\uC59C\uC5A0\uC5A9\uC5B4\uC5B5\uC5B8\uC5B9\uC5BB\uC5BC\uC5BD\uC5BE\uC5C4\uC5C5\uC5C6\uC5C7\uC5C8\uC5C9\uC5CA\uC5CC\uC5CE\uFFFD".split("");
      for (j = 0; j != D[190].length; ++j) if (D[190][j].charCodeAt(0) !== 65533) {
        e[D[190][j]] = 48640 + j;
        d[48640 + j] = D[190][j];
      }
      D[191] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD49E\uD49F\uD4A0\uD4A1\uD4A2\uD4A3\uD4A4\uD4A5\uD4A6\uD4A7\uD4A8\uD4AA\uD4AB\uD4AC\uD4AD\uD4AE\uD4AF\uD4B0\uD4B1\uD4B2\uD4B3\uD4B4\uD4B5\uD4B6\uD4B7\uD4B8\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD4B9\uD4BA\uD4BB\uD4BC\uD4BD\uD4BE\uD4BF\uD4C0\uD4C1\uD4C2\uD4C3\uD4C4\uD4C5\uD4C6\uD4C7\uD4C8\uD4C9\uD4CA\uD4CB\uD4CD\uD4CE\uD4CF\uD4D1\uD4D2\uD4D3\uD4D5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD4D6\uD4D7\uD4D8\uD4D9\uD4DA\uD4DB\uD4DD\uD4DE\uD4E0\uD4E1\uD4E2\uD4E3\uD4E4\uD4E5\uD4E6\uD4E7\uD4E9\uD4EA\uD4EB\uD4ED\uD4EE\uD4EF\uD4F1\uD4F2\uD4F3\uD4F4\uD4F5\uD4F6\uD4F7\uD4F9\uD4FA\uD4FC\uC5D0\uC5D1\uC5D4\uC5D8\uC5E0\uC5E1\uC5E3\uC5E5\uC5EC\uC5ED\uC5EE\uC5F0\uC5F4\uC5F6\uC5F7\uC5FC\uC5FD\uC5FE\uC5FF\uC600\uC601\uC605\uC606\uC607\uC608\uC60C\uC610\uC618\uC619\uC61B\uC61C\uC624\uC625\uC628\uC62C\uC62D\uC62E\uC630\uC633\uC634\uC635\uC637\uC639\uC63B\uC640\uC641\uC644\uC648\uC650\uC651\uC653\uC654\uC655\uC65C\uC65D\uC660\uC66C\uC66F\uC671\uC678\uC679\uC67C\uC680\uC688\uC689\uC68B\uC68D\uC694\uC695\uC698\uC69C\uC6A4\uC6A5\uC6A7\uC6A9\uC6B0\uC6B1\uC6B4\uC6B8\uC6B9\uC6BA\uC6C0\uC6C1\uC6C3\uC6C5\uC6CC\uC6CD\uC6D0\uC6D4\uC6DC\uC6DD\uC6E0\uC6E1\uC6E8\uFFFD".split("");
      for (j = 0; j != D[191].length; ++j) if (D[191][j].charCodeAt(0) !== 65533) {
        e[D[191][j]] = 48896 + j;
        d[48896 + j] = D[191][j];
      }
      D[192] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD4FE\uD4FF\uD500\uD501\uD502\uD503\uD505\uD506\uD507\uD509\uD50A\uD50B\uD50D\uD50E\uD50F\uD510\uD511\uD512\uD513\uD516\uD518\uD519\uD51A\uD51B\uD51C\uD51D\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD51E\uD51F\uD520\uD521\uD522\uD523\uD524\uD525\uD526\uD527\uD528\uD529\uD52A\uD52B\uD52C\uD52D\uD52E\uD52F\uD530\uD531\uD532\uD533\uD534\uD535\uD536\uD537\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD538\uD539\uD53A\uD53B\uD53E\uD53F\uD541\uD542\uD543\uD545\uD546\uD547\uD548\uD549\uD54A\uD54B\uD54E\uD550\uD552\uD553\uD554\uD555\uD556\uD557\uD55A\uD55B\uD55D\uD55E\uD55F\uD561\uD562\uD563\uC6E9\uC6EC\uC6F0\uC6F8\uC6F9\uC6FD\uC704\uC705\uC708\uC70C\uC714\uC715\uC717\uC719\uC720\uC721\uC724\uC728\uC730\uC731\uC733\uC735\uC737\uC73C\uC73D\uC740\uC744\uC74A\uC74C\uC74D\uC74F\uC751\uC752\uC753\uC754\uC755\uC756\uC757\uC758\uC75C\uC760\uC768\uC76B\uC774\uC775\uC778\uC77C\uC77D\uC77E\uC783\uC784\uC785\uC787\uC788\uC789\uC78A\uC78E\uC790\uC791\uC794\uC796\uC797\uC798\uC79A\uC7A0\uC7A1\uC7A3\uC7A4\uC7A5\uC7A6\uC7AC\uC7AD\uC7B0\uC7B4\uC7BC\uC7BD\uC7BF\uC7C0\uC7C1\uC7C8\uC7C9\uC7CC\uC7CE\uC7D0\uC7D8\uC7DD\uC7E4\uC7E8\uC7EC\uC800\uC801\uC804\uC808\uC80A\uFFFD".split("");
      for (j = 0; j != D[192].length; ++j) if (D[192][j].charCodeAt(0) !== 65533) {
        e[D[192][j]] = 49152 + j;
        d[49152 + j] = D[192][j];
      }
      D[193] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD564\uD566\uD567\uD56A\uD56C\uD56E\uD56F\uD570\uD571\uD572\uD573\uD576\uD577\uD579\uD57A\uD57B\uD57D\uD57E\uD57F\uD580\uD581\uD582\uD583\uD586\uD58A\uD58B\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD58C\uD58D\uD58E\uD58F\uD591\uD592\uD593\uD594\uD595\uD596\uD597\uD598\uD599\uD59A\uD59B\uD59C\uD59D\uD59E\uD59F\uD5A0\uD5A1\uD5A2\uD5A3\uD5A4\uD5A6\uD5A7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD5A8\uD5A9\uD5AA\uD5AB\uD5AC\uD5AD\uD5AE\uD5AF\uD5B0\uD5B1\uD5B2\uD5B3\uD5B4\uD5B5\uD5B6\uD5B7\uD5B8\uD5B9\uD5BA\uD5BB\uD5BC\uD5BD\uD5BE\uD5BF\uD5C0\uD5C1\uD5C2\uD5C3\uD5C4\uD5C5\uD5C6\uD5C7\uC810\uC811\uC813\uC815\uC816\uC81C\uC81D\uC820\uC824\uC82C\uC82D\uC82F\uC831\uC838\uC83C\uC840\uC848\uC849\uC84C\uC84D\uC854\uC870\uC871\uC874\uC878\uC87A\uC880\uC881\uC883\uC885\uC886\uC887\uC88B\uC88C\uC88D\uC894\uC89D\uC89F\uC8A1\uC8A8\uC8BC\uC8BD\uC8C4\uC8C8\uC8CC\uC8D4\uC8D5\uC8D7\uC8D9\uC8E0\uC8E1\uC8E4\uC8F5\uC8FC\uC8FD\uC900\uC904\uC905\uC906\uC90C\uC90D\uC90F\uC911\uC918\uC92C\uC934\uC950\uC951\uC954\uC958\uC960\uC961\uC963\uC96C\uC970\uC974\uC97C\uC988\uC989\uC98C\uC990\uC998\uC999\uC99B\uC99D\uC9C0\uC9C1\uC9C4\uC9C7\uC9C8\uC9CA\uC9D0\uC9D1\uC9D3\uFFFD".split("");
      for (j = 0; j != D[193].length; ++j) if (D[193][j].charCodeAt(0) !== 65533) {
        e[D[193][j]] = 49408 + j;
        d[49408 + j] = D[193][j];
      }
      D[194] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD5CA\uD5CB\uD5CD\uD5CE\uD5CF\uD5D1\uD5D3\uD5D4\uD5D5\uD5D6\uD5D7\uD5DA\uD5DC\uD5DE\uD5DF\uD5E0\uD5E1\uD5E2\uD5E3\uD5E6\uD5E7\uD5E9\uD5EA\uD5EB\uD5ED\uD5EE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD5EF\uD5F0\uD5F1\uD5F2\uD5F3\uD5F6\uD5F8\uD5FA\uD5FB\uD5FC\uD5FD\uD5FE\uD5FF\uD602\uD603\uD605\uD606\uD607\uD609\uD60A\uD60B\uD60C\uD60D\uD60E\uD60F\uD612\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD616\uD617\uD618\uD619\uD61A\uD61B\uD61D\uD61E\uD61F\uD621\uD622\uD623\uD625\uD626\uD627\uD628\uD629\uD62A\uD62B\uD62C\uD62E\uD62F\uD630\uD631\uD632\uD633\uD634\uD635\uD636\uD637\uD63A\uD63B\uC9D5\uC9D6\uC9D9\uC9DA\uC9DC\uC9DD\uC9E0\uC9E2\uC9E4\uC9E7\uC9EC\uC9ED\uC9EF\uC9F0\uC9F1\uC9F8\uC9F9\uC9FC\uCA00\uCA08\uCA09\uCA0B\uCA0C\uCA0D\uCA14\uCA18\uCA29\uCA4C\uCA4D\uCA50\uCA54\uCA5C\uCA5D\uCA5F\uCA60\uCA61\uCA68\uCA7D\uCA84\uCA98\uCABC\uCABD\uCAC0\uCAC4\uCACC\uCACD\uCACF\uCAD1\uCAD3\uCAD8\uCAD9\uCAE0\uCAEC\uCAF4\uCB08\uCB10\uCB14\uCB18\uCB20\uCB21\uCB41\uCB48\uCB49\uCB4C\uCB50\uCB58\uCB59\uCB5D\uCB64\uCB78\uCB79\uCB9C\uCBB8\uCBD4\uCBE4\uCBE7\uCBE9\uCC0C\uCC0D\uCC10\uCC14\uCC1C\uCC1D\uCC21\uCC22\uCC27\uCC28\uCC29\uCC2C\uCC2E\uCC30\uCC38\uCC39\uCC3B\uFFFD".split("");
      for (j = 0; j != D[194].length; ++j) if (D[194][j].charCodeAt(0) !== 65533) {
        e[D[194][j]] = 49664 + j;
        d[49664 + j] = D[194][j];
      }
      D[195] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD63D\uD63E\uD63F\uD641\uD642\uD643\uD644\uD646\uD647\uD64A\uD64C\uD64E\uD64F\uD650\uD652\uD653\uD656\uD657\uD659\uD65A\uD65B\uD65D\uD65E\uD65F\uD660\uD661\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD662\uD663\uD664\uD665\uD666\uD668\uD66A\uD66B\uD66C\uD66D\uD66E\uD66F\uD672\uD673\uD675\uD676\uD677\uD678\uD679\uD67A\uD67B\uD67C\uD67D\uD67E\uD67F\uD680\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD681\uD682\uD684\uD686\uD687\uD688\uD689\uD68A\uD68B\uD68E\uD68F\uD691\uD692\uD693\uD695\uD696\uD697\uD698\uD699\uD69A\uD69B\uD69C\uD69E\uD6A0\uD6A2\uD6A3\uD6A4\uD6A5\uD6A6\uD6A7\uD6A9\uD6AA\uCC3C\uCC3D\uCC3E\uCC44\uCC45\uCC48\uCC4C\uCC54\uCC55\uCC57\uCC58\uCC59\uCC60\uCC64\uCC66\uCC68\uCC70\uCC75\uCC98\uCC99\uCC9C\uCCA0\uCCA8\uCCA9\uCCAB\uCCAC\uCCAD\uCCB4\uCCB5\uCCB8\uCCBC\uCCC4\uCCC5\uCCC7\uCCC9\uCCD0\uCCD4\uCCE4\uCCEC\uCCF0\uCD01\uCD08\uCD09\uCD0C\uCD10\uCD18\uCD19\uCD1B\uCD1D\uCD24\uCD28\uCD2C\uCD39\uCD5C\uCD60\uCD64\uCD6C\uCD6D\uCD6F\uCD71\uCD78\uCD88\uCD94\uCD95\uCD98\uCD9C\uCDA4\uCDA5\uCDA7\uCDA9\uCDB0\uCDC4\uCDCC\uCDD0\uCDE8\uCDEC\uCDF0\uCDF8\uCDF9\uCDFB\uCDFD\uCE04\uCE08\uCE0C\uCE14\uCE19\uCE20\uCE21\uCE24\uCE28\uCE30\uCE31\uCE33\uCE35\uFFFD".split("");
      for (j = 0; j != D[195].length; ++j) if (D[195][j].charCodeAt(0) !== 65533) {
        e[D[195][j]] = 49920 + j;
        d[49920 + j] = D[195][j];
      }
      D[196] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD6AB\uD6AD\uD6AE\uD6AF\uD6B1\uD6B2\uD6B3\uD6B4\uD6B5\uD6B6\uD6B7\uD6B8\uD6BA\uD6BC\uD6BD\uD6BE\uD6BF\uD6C0\uD6C1\uD6C2\uD6C3\uD6C6\uD6C7\uD6C9\uD6CA\uD6CB\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD6CD\uD6CE\uD6CF\uD6D0\uD6D2\uD6D3\uD6D5\uD6D6\uD6D8\uD6DA\uD6DB\uD6DC\uD6DD\uD6DE\uD6DF\uD6E1\uD6E2\uD6E3\uD6E5\uD6E6\uD6E7\uD6E9\uD6EA\uD6EB\uD6EC\uD6ED\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD6EE\uD6EF\uD6F1\uD6F2\uD6F3\uD6F4\uD6F6\uD6F7\uD6F8\uD6F9\uD6FA\uD6FB\uD6FE\uD6FF\uD701\uD702\uD703\uD705\uD706\uD707\uD708\uD709\uD70A\uD70B\uD70C\uD70D\uD70E\uD70F\uD710\uD712\uD713\uD714\uCE58\uCE59\uCE5C\uCE5F\uCE60\uCE61\uCE68\uCE69\uCE6B\uCE6D\uCE74\uCE75\uCE78\uCE7C\uCE84\uCE85\uCE87\uCE89\uCE90\uCE91\uCE94\uCE98\uCEA0\uCEA1\uCEA3\uCEA4\uCEA5\uCEAC\uCEAD\uCEC1\uCEE4\uCEE5\uCEE8\uCEEB\uCEEC\uCEF4\uCEF5\uCEF7\uCEF8\uCEF9\uCF00\uCF01\uCF04\uCF08\uCF10\uCF11\uCF13\uCF15\uCF1C\uCF20\uCF24\uCF2C\uCF2D\uCF2F\uCF30\uCF31\uCF38\uCF54\uCF55\uCF58\uCF5C\uCF64\uCF65\uCF67\uCF69\uCF70\uCF71\uCF74\uCF78\uCF80\uCF85\uCF8C\uCFA1\uCFA8\uCFB0\uCFC4\uCFE0\uCFE1\uCFE4\uCFE8\uCFF0\uCFF1\uCFF3\uCFF5\uCFFC\uD000\uD004\uD011\uD018\uD02D\uD034\uD035\uD038\uD03C\uFFFD".split("");
      for (j = 0; j != D[196].length; ++j) if (D[196][j].charCodeAt(0) !== 65533) {
        e[D[196][j]] = 50176 + j;
        d[50176 + j] = D[196][j];
      }
      D[197] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD715\uD716\uD717\uD71A\uD71B\uD71D\uD71E\uD71F\uD721\uD722\uD723\uD724\uD725\uD726\uD727\uD72A\uD72C\uD72E\uD72F\uD730\uD731\uD732\uD733\uD736\uD737\uD739\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD73A\uD73B\uD73D\uD73E\uD73F\uD740\uD741\uD742\uD743\uD745\uD746\uD748\uD74A\uD74B\uD74C\uD74D\uD74E\uD74F\uD752\uD753\uD755\uD75A\uD75B\uD75C\uD75D\uD75E\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD75F\uD762\uD764\uD766\uD767\uD768\uD76A\uD76B\uD76D\uD76E\uD76F\uD771\uD772\uD773\uD775\uD776\uD777\uD778\uD779\uD77A\uD77B\uD77E\uD77F\uD780\uD782\uD783\uD784\uD785\uD786\uD787\uD78A\uD78B\uD044\uD045\uD047\uD049\uD050\uD054\uD058\uD060\uD06C\uD06D\uD070\uD074\uD07C\uD07D\uD081\uD0A4\uD0A5\uD0A8\uD0AC\uD0B4\uD0B5\uD0B7\uD0B9\uD0C0\uD0C1\uD0C4\uD0C8\uD0C9\uD0D0\uD0D1\uD0D3\uD0D4\uD0D5\uD0DC\uD0DD\uD0E0\uD0E4\uD0EC\uD0ED\uD0EF\uD0F0\uD0F1\uD0F8\uD10D\uD130\uD131\uD134\uD138\uD13A\uD140\uD141\uD143\uD144\uD145\uD14C\uD14D\uD150\uD154\uD15C\uD15D\uD15F\uD161\uD168\uD16C\uD17C\uD184\uD188\uD1A0\uD1A1\uD1A4\uD1A8\uD1B0\uD1B1\uD1B3\uD1B5\uD1BA\uD1BC\uD1C0\uD1D8\uD1F4\uD1F8\uD207\uD209\uD210\uD22C\uD22D\uD230\uD234\uD23C\uD23D\uD23F\uD241\uD248\uD25C\uFFFD".split("");
      for (j = 0; j != D[197].length; ++j) if (D[197][j].charCodeAt(0) !== 65533) {
        e[D[197][j]] = 50432 + j;
        d[50432 + j] = D[197][j];
      }
      D[198] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD78D\uD78E\uD78F\uD791\uD792\uD793\uD794\uD795\uD796\uD797\uD79A\uD79C\uD79E\uD79F\uD7A0\uD7A1\uD7A2\uD7A3\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD264\uD280\uD281\uD284\uD288\uD290\uD291\uD295\uD29C\uD2A0\uD2A4\uD2AC\uD2B1\uD2B8\uD2B9\uD2BC\uD2BF\uD2C0\uD2C2\uD2C8\uD2C9\uD2CB\uD2D4\uD2D8\uD2DC\uD2E4\uD2E5\uD2F0\uD2F1\uD2F4\uD2F8\uD300\uD301\uD303\uD305\uD30C\uD30D\uD30E\uD310\uD314\uD316\uD31C\uD31D\uD31F\uD320\uD321\uD325\uD328\uD329\uD32C\uD330\uD338\uD339\uD33B\uD33C\uD33D\uD344\uD345\uD37C\uD37D\uD380\uD384\uD38C\uD38D\uD38F\uD390\uD391\uD398\uD399\uD39C\uD3A0\uD3A8\uD3A9\uD3AB\uD3AD\uD3B4\uD3B8\uD3BC\uD3C4\uD3C5\uD3C8\uD3C9\uD3D0\uD3D8\uD3E1\uD3E3\uD3EC\uD3ED\uD3F0\uD3F4\uD3FC\uD3FD\uD3FF\uD401\uFFFD".split("");
      for (j = 0; j != D[198].length; ++j) if (D[198][j].charCodeAt(0) !== 65533) {
        e[D[198][j]] = 50688 + j;
        d[50688 + j] = D[198][j];
      }
      D[199] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD408\uD41D\uD440\uD444\uD45C\uD460\uD464\uD46D\uD46F\uD478\uD479\uD47C\uD47F\uD480\uD482\uD488\uD489\uD48B\uD48D\uD494\uD4A9\uD4CC\uD4D0\uD4D4\uD4DC\uD4DF\uD4E8\uD4EC\uD4F0\uD4F8\uD4FB\uD4FD\uD504\uD508\uD50C\uD514\uD515\uD517\uD53C\uD53D\uD540\uD544\uD54C\uD54D\uD54F\uD551\uD558\uD559\uD55C\uD560\uD565\uD568\uD569\uD56B\uD56D\uD574\uD575\uD578\uD57C\uD584\uD585\uD587\uD588\uD589\uD590\uD5A5\uD5C8\uD5C9\uD5CC\uD5D0\uD5D2\uD5D8\uD5D9\uD5DB\uD5DD\uD5E4\uD5E5\uD5E8\uD5EC\uD5F4\uD5F5\uD5F7\uD5F9\uD600\uD601\uD604\uD608\uD610\uD611\uD613\uD614\uD615\uD61C\uD620\uFFFD".split("");
      for (j = 0; j != D[199].length; ++j) if (D[199][j].charCodeAt(0) !== 65533) {
        e[D[199][j]] = 50944 + j;
        d[50944 + j] = D[199][j];
      }
      D[200] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uD624\uD62D\uD638\uD639\uD63C\uD640\uD645\uD648\uD649\uD64B\uD64D\uD651\uD654\uD655\uD658\uD65C\uD667\uD669\uD670\uD671\uD674\uD683\uD685\uD68C\uD68D\uD690\uD694\uD69D\uD69F\uD6A1\uD6A8\uD6AC\uD6B0\uD6B9\uD6BB\uD6C4\uD6C5\uD6C8\uD6CC\uD6D1\uD6D4\uD6D7\uD6D9\uD6E0\uD6E4\uD6E8\uD6F0\uD6F5\uD6FC\uD6FD\uD700\uD704\uD711\uD718\uD719\uD71C\uD720\uD728\uD729\uD72B\uD72D\uD734\uD735\uD738\uD73C\uD744\uD747\uD749\uD750\uD751\uD754\uD756\uD757\uD758\uD759\uD760\uD761\uD763\uD765\uD769\uD76C\uD770\uD774\uD77C\uD77D\uD781\uD788\uD789\uD78C\uD790\uD798\uD799\uD79B\uD79D\uFFFD".split("");
      for (j = 0; j != D[200].length; ++j) if (D[200][j].charCodeAt(0) !== 65533) {
        e[D[200][j]] = 51200 + j;
        d[51200 + j] = D[200][j];
      }
      D[202] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u4F3D\u4F73\u5047\u50F9\u52A0\u53EF\u5475\u54E5\u5609\u5AC1\u5BB6\u6687\u67B6\u67B7\u67EF\u6B4C\u73C2\u75C2\u7A3C\u82DB\u8304\u8857\u8888\u8A36\u8CC8\u8DCF\u8EFB\u8FE6\u99D5\u523B\u5374\u5404\u606A\u6164\u6BBC\u73CF\u811A\u89BA\u89D2\u95A3\u4F83\u520A\u58BE\u5978\u59E6\u5E72\u5E79\u61C7\u63C0\u6746\u67EC\u687F\u6F97\u764E\u770B\u78F5\u7A08\u7AFF\u7C21\u809D\u826E\u8271\u8AEB\u9593\u4E6B\u559D\u66F7\u6E34\u78A3\u7AED\u845B\u8910\u874E\u97A8\u52D8\u574E\u582A\u5D4C\u611F\u61BE\u6221\u6562\u67D1\u6A44\u6E1B\u7518\u75B3\u76E3\u77B0\u7D3A\u90AF\u9451\u9452\u9F95\uFFFD".split("");
      for (j = 0; j != D[202].length; ++j) if (D[202][j].charCodeAt(0) !== 65533) {
        e[D[202][j]] = 51712 + j;
        d[51712 + j] = D[202][j];
      }
      D[203] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5323\u5CAC\u7532\u80DB\u9240\u9598\u525B\u5808\u59DC\u5CA1\u5D17\u5EB7\u5F3A\u5F4A\u6177\u6C5F\u757A\u7586\u7CE0\u7D73\u7DB1\u7F8C\u8154\u8221\u8591\u8941\u8B1B\u92FC\u964D\u9C47\u4ECB\u4EF7\u500B\u51F1\u584F\u6137\u613E\u6168\u6539\u69EA\u6F11\u75A5\u7686\u76D6\u7B87\u82A5\u84CB\uF900\u93A7\u958B\u5580\u5BA2\u5751\uF901\u7CB3\u7FB9\u91B5\u5028\u53BB\u5C45\u5DE8\u62D2\u636E\u64DA\u64E7\u6E20\u70AC\u795B\u8DDD\u8E1E\uF902\u907D\u9245\u92F8\u4E7E\u4EF6\u5065\u5DFE\u5EFA\u6106\u6957\u8171\u8654\u8E47\u9375\u9A2B\u4E5E\u5091\u6770\u6840\u5109\u528D\u5292\u6AA2\uFFFD".split("");
      for (j = 0; j != D[203].length; ++j) if (D[203][j].charCodeAt(0) !== 65533) {
        e[D[203][j]] = 51968 + j;
        d[51968 + j] = D[203][j];
      }
      D[204] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u77BC\u9210\u9ED4\u52AB\u602F\u8FF2\u5048\u61A9\u63ED\u64CA\u683C\u6A84\u6FC0\u8188\u89A1\u9694\u5805\u727D\u72AC\u7504\u7D79\u7E6D\u80A9\u898B\u8B74\u9063\u9D51\u6289\u6C7A\u6F54\u7D50\u7F3A\u8A23\u517C\u614A\u7B9D\u8B19\u9257\u938C\u4EAC\u4FD3\u501E\u50BE\u5106\u52C1\u52CD\u537F\u5770\u5883\u5E9A\u5F91\u6176\u61AC\u64CE\u656C\u666F\u66BB\u66F4\u6897\u6D87\u7085\u70F1\u749F\u74A5\u74CA\u75D9\u786C\u78EC\u7ADF\u7AF6\u7D45\u7D93\u8015\u803F\u811B\u8396\u8B66\u8F15\u9015\u93E1\u9803\u9838\u9A5A\u9BE8\u4FC2\u5553\u583A\u5951\u5B63\u5C46\u60B8\u6212\u6842\u68B0\uFFFD".split("");
      for (j = 0; j != D[204].length; ++j) if (D[204][j].charCodeAt(0) !== 65533) {
        e[D[204][j]] = 52224 + j;
        d[52224 + j] = D[204][j];
      }
      D[205] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u68E8\u6EAA\u754C\u7678\u78CE\u7A3D\u7CFB\u7E6B\u7E7C\u8A08\u8AA1\u8C3F\u968E\u9DC4\u53E4\u53E9\u544A\u5471\u56FA\u59D1\u5B64\u5C3B\u5EAB\u62F7\u6537\u6545\u6572\u66A0\u67AF\u69C1\u6CBD\u75FC\u7690\u777E\u7A3F\u7F94\u8003\u80A1\u818F\u82E6\u82FD\u83F0\u85C1\u8831\u88B4\u8AA5\uF903\u8F9C\u932E\u96C7\u9867\u9AD8\u9F13\u54ED\u659B\u66F2\u688F\u7A40\u8C37\u9D60\u56F0\u5764\u5D11\u6606\u68B1\u68CD\u6EFE\u7428\u889E\u9BE4\u6C68\uF904\u9AA8\u4F9B\u516C\u5171\u529F\u5B54\u5DE5\u6050\u606D\u62F1\u63A7\u653B\u73D9\u7A7A\u86A3\u8CA2\u978F\u4E32\u5BE1\u6208\u679C\u74DC\uFFFD".split("");
      for (j = 0; j != D[205].length; ++j) if (D[205][j].charCodeAt(0) !== 65533) {
        e[D[205][j]] = 52480 + j;
        d[52480 + j] = D[205][j];
      }
      D[206] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u79D1\u83D3\u8A87\u8AB2\u8DE8\u904E\u934B\u9846\u5ED3\u69E8\u85FF\u90ED\uF905\u51A0\u5B98\u5BEC\u6163\u68FA\u6B3E\u704C\u742F\u74D8\u7BA1\u7F50\u83C5\u89C0\u8CAB\u95DC\u9928\u522E\u605D\u62EC\u9002\u4F8A\u5149\u5321\u58D9\u5EE3\u66E0\u6D38\u709A\u72C2\u73D6\u7B50\u80F1\u945B\u5366\u639B\u7F6B\u4E56\u5080\u584A\u58DE\u602A\u6127\u62D0\u69D0\u9B41\u5B8F\u7D18\u80B1\u8F5F\u4EA4\u50D1\u54AC\u55AC\u5B0C\u5DA0\u5DE7\u652A\u654E\u6821\u6A4B\u72E1\u768E\u77EF\u7D5E\u7FF9\u81A0\u854E\u86DF\u8F03\u8F4E\u90CA\u9903\u9A55\u9BAB\u4E18\u4E45\u4E5D\u4EC7\u4FF1\u5177\u52FE\uFFFD".split("");
      for (j = 0; j != D[206].length; ++j) if (D[206][j].charCodeAt(0) !== 65533) {
        e[D[206][j]] = 52736 + j;
        d[52736 + j] = D[206][j];
      }
      D[207] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5340\u53E3\u53E5\u548E\u5614\u5775\u57A2\u5BC7\u5D87\u5ED0\u61FC\u62D8\u6551\u67B8\u67E9\u69CB\u6B50\u6BC6\u6BEC\u6C42\u6E9D\u7078\u72D7\u7396\u7403\u77BF\u77E9\u7A76\u7D7F\u8009\u81FC\u8205\u820A\u82DF\u8862\u8B33\u8CFC\u8EC0\u9011\u90B1\u9264\u92B6\u99D2\u9A45\u9CE9\u9DD7\u9F9C\u570B\u5C40\u83CA\u97A0\u97AB\u9EB4\u541B\u7A98\u7FA4\u88D9\u8ECD\u90E1\u5800\u5C48\u6398\u7A9F\u5BAE\u5F13\u7A79\u7AAE\u828E\u8EAC\u5026\u5238\u52F8\u5377\u5708\u62F3\u6372\u6B0A\u6DC3\u7737\u53A5\u7357\u8568\u8E76\u95D5\u673A\u6AC3\u6F70\u8A6D\u8ECC\u994B\uF906\u6677\u6B78\u8CB4\uFFFD".split("");
      for (j = 0; j != D[207].length; ++j) if (D[207][j].charCodeAt(0) !== 65533) {
        e[D[207][j]] = 52992 + j;
        d[52992 + j] = D[207][j];
      }
      D[208] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9B3C\uF907\u53EB\u572D\u594E\u63C6\u69FB\u73EA\u7845\u7ABA\u7AC5\u7CFE\u8475\u898F\u8D73\u9035\u95A8\u52FB\u5747\u7547\u7B60\u83CC\u921E\uF908\u6A58\u514B\u524B\u5287\u621F\u68D8\u6975\u9699\u50C5\u52A4\u52E4\u61C3\u65A4\u6839\u69FF\u747E\u7B4B\u82B9\u83EB\u89B2\u8B39\u8FD1\u9949\uF909\u4ECA\u5997\u64D2\u6611\u6A8E\u7434\u7981\u79BD\u82A9\u887E\u887F\u895F\uF90A\u9326\u4F0B\u53CA\u6025\u6271\u6C72\u7D1A\u7D66\u4E98\u5162\u77DC\u80AF\u4F01\u4F0E\u5176\u5180\u55DC\u5668\u573B\u57FA\u57FC\u5914\u5947\u5993\u5BC4\u5C90\u5D0E\u5DF1\u5E7E\u5FCC\u6280\u65D7\u65E3\uFFFD".split("");
      for (j = 0; j != D[208].length; ++j) if (D[208][j].charCodeAt(0) !== 65533) {
        e[D[208][j]] = 53248 + j;
        d[53248 + j] = D[208][j];
      }
      D[209] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u671E\u671F\u675E\u68CB\u68C4\u6A5F\u6B3A\u6C23\u6C7D\u6C82\u6DC7\u7398\u7426\u742A\u7482\u74A3\u7578\u757F\u7881\u78EF\u7941\u7947\u7948\u797A\u7B95\u7D00\u7DBA\u7F88\u8006\u802D\u808C\u8A18\u8B4F\u8C48\u8D77\u9321\u9324\u98E2\u9951\u9A0E\u9A0F\u9A65\u9E92\u7DCA\u4F76\u5409\u62EE\u6854\u91D1\u55AB\u513A\uF90B\uF90C\u5A1C\u61E6\uF90D\u62CF\u62FF\uF90E\uF90F\uF910\uF911\uF912\uF913\u90A3\uF914\uF915\uF916\uF917\uF918\u8AFE\uF919\uF91A\uF91B\uF91C\u6696\uF91D\u7156\uF91E\uF91F\u96E3\uF920\u634F\u637A\u5357\uF921\u678F\u6960\u6E73\uF922\u7537\uF923\uF924\uF925\uFFFD".split("");
      for (j = 0; j != D[209].length; ++j) if (D[209][j].charCodeAt(0) !== 65533) {
        e[D[209][j]] = 53504 + j;
        d[53504 + j] = D[209][j];
      }
      D[210] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7D0D\uF926\uF927\u8872\u56CA\u5A18\uF928\uF929\uF92A\uF92B\uF92C\u4E43\uF92D\u5167\u5948\u67F0\u8010\uF92E\u5973\u5E74\u649A\u79CA\u5FF5\u606C\u62C8\u637B\u5BE7\u5BD7\u52AA\uF92F\u5974\u5F29\u6012\uF930\uF931\uF932\u7459\uF933\uF934\uF935\uF936\uF937\uF938\u99D1\uF939\uF93A\uF93B\uF93C\uF93D\uF93E\uF93F\uF940\uF941\uF942\uF943\u6FC3\uF944\uF945\u81BF\u8FB2\u60F1\uF946\uF947\u8166\uF948\uF949\u5C3F\uF94A\uF94B\uF94C\uF94D\uF94E\uF94F\uF950\uF951\u5AE9\u8A25\u677B\u7D10\uF952\uF953\uF954\uF955\uF956\uF957\u80FD\uF958\uF959\u5C3C\u6CE5\u533F\u6EBA\u591A\u8336\uFFFD".split("");
      for (j = 0; j != D[210].length; ++j) if (D[210][j].charCodeAt(0) !== 65533) {
        e[D[210][j]] = 53760 + j;
        d[53760 + j] = D[210][j];
      }
      D[211] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u4E39\u4EB6\u4F46\u55AE\u5718\u58C7\u5F56\u65B7\u65E6\u6A80\u6BB5\u6E4D\u77ED\u7AEF\u7C1E\u7DDE\u86CB\u8892\u9132\u935B\u64BB\u6FBE\u737A\u75B8\u9054\u5556\u574D\u61BA\u64D4\u66C7\u6DE1\u6E5B\u6F6D\u6FB9\u75F0\u8043\u81BD\u8541\u8983\u8AC7\u8B5A\u931F\u6C93\u7553\u7B54\u8E0F\u905D\u5510\u5802\u5858\u5E62\u6207\u649E\u68E0\u7576\u7CD6\u87B3\u9EE8\u4EE3\u5788\u576E\u5927\u5C0D\u5CB1\u5E36\u5F85\u6234\u64E1\u73B3\u81FA\u888B\u8CB8\u968A\u9EDB\u5B85\u5FB7\u60B3\u5012\u5200\u5230\u5716\u5835\u5857\u5C0E\u5C60\u5CF6\u5D8B\u5EA6\u5F92\u60BC\u6311\u6389\u6417\u6843\uFFFD".split("");
      for (j = 0; j != D[211].length; ++j) if (D[211][j].charCodeAt(0) !== 65533) {
        e[D[211][j]] = 54016 + j;
        d[54016 + j] = D[211][j];
      }
      D[212] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u68F9\u6AC2\u6DD8\u6E21\u6ED4\u6FE4\u71FE\u76DC\u7779\u79B1\u7A3B\u8404\u89A9\u8CED\u8DF3\u8E48\u9003\u9014\u9053\u90FD\u934D\u9676\u97DC\u6BD2\u7006\u7258\u72A2\u7368\u7763\u79BF\u7BE4\u7E9B\u8B80\u58A9\u60C7\u6566\u65FD\u66BE\u6C8C\u711E\u71C9\u8C5A\u9813\u4E6D\u7A81\u4EDD\u51AC\u51CD\u52D5\u540C\u61A7\u6771\u6850\u68DF\u6D1E\u6F7C\u75BC\u77B3\u7AE5\u80F4\u8463\u9285\u515C\u6597\u675C\u6793\u75D8\u7AC7\u8373\uF95A\u8C46\u9017\u982D\u5C6F\u81C0\u829A\u9041\u906F\u920D\u5F97\u5D9D\u6A59\u71C8\u767B\u7B49\u85E4\u8B04\u9127\u9A30\u5587\u61F6\uF95B\u7669\u7F85\uFFFD".split("");
      for (j = 0; j != D[212].length; ++j) if (D[212][j].charCodeAt(0) !== 65533) {
        e[D[212][j]] = 54272 + j;
        d[54272 + j] = D[212][j];
      }
      D[213] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u863F\u87BA\u88F8\u908F\uF95C\u6D1B\u70D9\u73DE\u7D61\u843D\uF95D\u916A\u99F1\uF95E\u4E82\u5375\u6B04\u6B12\u703E\u721B\u862D\u9E1E\u524C\u8FA3\u5D50\u64E5\u652C\u6B16\u6FEB\u7C43\u7E9C\u85CD\u8964\u89BD\u62C9\u81D8\u881F\u5ECA\u6717\u6D6A\u72FC\u7405\u746F\u8782\u90DE\u4F86\u5D0D\u5FA0\u840A\u51B7\u63A0\u7565\u4EAE\u5006\u5169\u51C9\u6881\u6A11\u7CAE\u7CB1\u7CE7\u826F\u8AD2\u8F1B\u91CF\u4FB6\u5137\u52F5\u5442\u5EEC\u616E\u623E\u65C5\u6ADA\u6FFE\u792A\u85DC\u8823\u95AD\u9A62\u9A6A\u9E97\u9ECE\u529B\u66C6\u6B77\u701D\u792B\u8F62\u9742\u6190\u6200\u6523\u6F23\uFFFD".split("");
      for (j = 0; j != D[213].length; ++j) if (D[213][j].charCodeAt(0) !== 65533) {
        e[D[213][j]] = 54528 + j;
        d[54528 + j] = D[213][j];
      }
      D[214] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7149\u7489\u7DF4\u806F\u84EE\u8F26\u9023\u934A\u51BD\u5217\u52A3\u6D0C\u70C8\u88C2\u5EC9\u6582\u6BAE\u6FC2\u7C3E\u7375\u4EE4\u4F36\u56F9\uF95F\u5CBA\u5DBA\u601C\u73B2\u7B2D\u7F9A\u7FCE\u8046\u901E\u9234\u96F6\u9748\u9818\u9F61\u4F8B\u6FA7\u79AE\u91B4\u96B7\u52DE\uF960\u6488\u64C4\u6AD3\u6F5E\u7018\u7210\u76E7\u8001\u8606\u865C\u8DEF\u8F05\u9732\u9B6F\u9DFA\u9E75\u788C\u797F\u7DA0\u83C9\u9304\u9E7F\u9E93\u8AD6\u58DF\u5F04\u6727\u7027\u74CF\u7C60\u807E\u5121\u7028\u7262\u78CA\u8CC2\u8CDA\u8CF4\u96F7\u4E86\u50DA\u5BEE\u5ED6\u6599\u71CE\u7642\u77AD\u804A\u84FC\uFFFD".split("");
      for (j = 0; j != D[214].length; ++j) if (D[214][j].charCodeAt(0) !== 65533) {
        e[D[214][j]] = 54784 + j;
        d[54784 + j] = D[214][j];
      }
      D[215] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u907C\u9B27\u9F8D\u58D8\u5A41\u5C62\u6A13\u6DDA\u6F0F\u763B\u7D2F\u7E37\u851E\u8938\u93E4\u964B\u5289\u65D2\u67F3\u69B4\u6D41\u6E9C\u700F\u7409\u7460\u7559\u7624\u786B\u8B2C\u985E\u516D\u622E\u9678\u4F96\u502B\u5D19\u6DEA\u7DB8\u8F2A\u5F8B\u6144\u6817\uF961\u9686\u52D2\u808B\u51DC\u51CC\u695E\u7A1C\u7DBE\u83F1\u9675\u4FDA\u5229\u5398\u540F\u550E\u5C65\u60A7\u674E\u68A8\u6D6C\u7281\u72F8\u7406\u7483\uF962\u75E2\u7C6C\u7F79\u7FB8\u8389\u88CF\u88E1\u91CC\u91D0\u96E2\u9BC9\u541D\u6F7E\u71D0\u7498\u85FA\u8EAA\u96A3\u9C57\u9E9F\u6797\u6DCB\u7433\u81E8\u9716\u782C\uFFFD".split("");
      for (j = 0; j != D[215].length; ++j) if (D[215][j].charCodeAt(0) !== 65533) {
        e[D[215][j]] = 55040 + j;
        d[55040 + j] = D[215][j];
      }
      D[216] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7ACB\u7B20\u7C92\u6469\u746A\u75F2\u78BC\u78E8\u99AC\u9B54\u9EBB\u5BDE\u5E55\u6F20\u819C\u83AB\u9088\u4E07\u534D\u5A29\u5DD2\u5F4E\u6162\u633D\u6669\u66FC\u6EFF\u6F2B\u7063\u779E\u842C\u8513\u883B\u8F13\u9945\u9C3B\u551C\u62B9\u672B\u6CAB\u8309\u896A\u977A\u4EA1\u5984\u5FD8\u5FD9\u671B\u7DB2\u7F54\u8292\u832B\u83BD\u8F1E\u9099\u57CB\u59B9\u5A92\u5BD0\u6627\u679A\u6885\u6BCF\u7164\u7F75\u8CB7\u8CE3\u9081\u9B45\u8108\u8C8A\u964C\u9A40\u9EA5\u5B5F\u6C13\u731B\u76F2\u76DF\u840C\u51AA\u8993\u514D\u5195\u52C9\u68C9\u6C94\u7704\u7720\u7DBF\u7DEC\u9762\u9EB5\u6EC5\uFFFD".split("");
      for (j = 0; j != D[216].length; ++j) if (D[216][j].charCodeAt(0) !== 65533) {
        e[D[216][j]] = 55296 + j;
        d[55296 + j] = D[216][j];
      }
      D[217] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8511\u51A5\u540D\u547D\u660E\u669D\u6927\u6E9F\u76BF\u7791\u8317\u84C2\u879F\u9169\u9298\u9CF4\u8882\u4FAE\u5192\u52DF\u59C6\u5E3D\u6155\u6478\u6479\u66AE\u67D0\u6A21\u6BCD\u6BDB\u725F\u7261\u7441\u7738\u77DB\u8017\u82BC\u8305\u8B00\u8B28\u8C8C\u6728\u6C90\u7267\u76EE\u7766\u7A46\u9DA9\u6B7F\u6C92\u5922\u6726\u8499\u536F\u5893\u5999\u5EDF\u63CF\u6634\u6773\u6E3A\u732B\u7AD7\u82D7\u9328\u52D9\u5DEB\u61AE\u61CB\u620A\u62C7\u64AB\u65E0\u6959\u6B66\u6BCB\u7121\u73F7\u755D\u7E46\u821E\u8302\u856A\u8AA3\u8CBF\u9727\u9D61\u58A8\u9ED8\u5011\u520E\u543B\u554F\u6587\uFFFD".split("");
      for (j = 0; j != D[217].length; ++j) if (D[217][j].charCodeAt(0) !== 65533) {
        e[D[217][j]] = 55552 + j;
        d[55552 + j] = D[217][j];
      }
      D[218] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6C76\u7D0A\u7D0B\u805E\u868A\u9580\u96EF\u52FF\u6C95\u7269\u5473\u5A9A\u5C3E\u5D4B\u5F4C\u5FAE\u672A\u68B6\u6963\u6E3C\u6E44\u7709\u7C73\u7F8E\u8587\u8B0E\u8FF7\u9761\u9EF4\u5CB7\u60B6\u610D\u61AB\u654F\u65FB\u65FC\u6C11\u6CEF\u739F\u73C9\u7DE1\u9594\u5BC6\u871C\u8B10\u525D\u535A\u62CD\u640F\u64B2\u6734\u6A38\u6CCA\u73C0\u749E\u7B94\u7C95\u7E1B\u818A\u8236\u8584\u8FEB\u96F9\u99C1\u4F34\u534A\u53CD\u53DB\u62CC\u642C\u6500\u6591\u69C3\u6CEE\u6F58\u73ED\u7554\u7622\u76E4\u76FC\u78D0\u78FB\u792C\u7D46\u822C\u87E0\u8FD4\u9812\u98EF\u52C3\u62D4\u64A5\u6E24\u6F51\uFFFD".split("");
      for (j = 0; j != D[218].length; ++j) if (D[218][j].charCodeAt(0) !== 65533) {
        e[D[218][j]] = 55808 + j;
        d[55808 + j] = D[218][j];
      }
      D[219] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u767C\u8DCB\u91B1\u9262\u9AEE\u9B43\u5023\u508D\u574A\u59A8\u5C28\u5E47\u5F77\u623F\u653E\u65B9\u65C1\u6609\u678B\u699C\u6EC2\u78C5\u7D21\u80AA\u8180\u822B\u82B3\u84A1\u868C\u8A2A\u8B17\u90A6\u9632\u9F90\u500D\u4FF3\uF963\u57F9\u5F98\u62DC\u6392\u676F\u6E43\u7119\u76C3\u80CC\u80DA\u88F4\u88F5\u8919\u8CE0\u8F29\u914D\u966A\u4F2F\u4F70\u5E1B\u67CF\u6822\u767D\u767E\u9B44\u5E61\u6A0A\u7169\u71D4\u756A\uF964\u7E41\u8543\u85E9\u98DC\u4F10\u7B4F\u7F70\u95A5\u51E1\u5E06\u68B5\u6C3E\u6C4E\u6CDB\u72AF\u7BC4\u8303\u6CD5\u743A\u50FB\u5288\u58C1\u64D8\u6A97\u74A7\u7656\uFFFD".split("");
      for (j = 0; j != D[219].length; ++j) if (D[219][j].charCodeAt(0) !== 65533) {
        e[D[219][j]] = 56064 + j;
        d[56064 + j] = D[219][j];
      }
      D[220] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u78A7\u8617\u95E2\u9739\uF965\u535E\u5F01\u8B8A\u8FA8\u8FAF\u908A\u5225\u77A5\u9C49\u9F08\u4E19\u5002\u5175\u5C5B\u5E77\u661E\u663A\u67C4\u68C5\u70B3\u7501\u75C5\u79C9\u7ADD\u8F27\u9920\u9A08\u4FDD\u5821\u5831\u5BF6\u666E\u6B65\u6D11\u6E7A\u6F7D\u73E4\u752B\u83E9\u88DC\u8913\u8B5C\u8F14\u4F0F\u50D5\u5310\u535C\u5B93\u5FA9\u670D\u798F\u8179\u832F\u8514\u8907\u8986\u8F39\u8F3B\u99A5\u9C12\u672C\u4E76\u4FF8\u5949\u5C01\u5CEF\u5CF0\u6367\u68D2\u70FD\u71A2\u742B\u7E2B\u84EC\u8702\u9022\u92D2\u9CF3\u4E0D\u4ED8\u4FEF\u5085\u5256\u526F\u5426\u5490\u57E0\u592B\u5A66\uFFFD".split("");
      for (j = 0; j != D[220].length; ++j) if (D[220][j].charCodeAt(0) !== 65533) {
        e[D[220][j]] = 56320 + j;
        d[56320 + j] = D[220][j];
      }
      D[221] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5B5A\u5B75\u5BCC\u5E9C\uF966\u6276\u6577\u65A7\u6D6E\u6EA5\u7236\u7B26\u7C3F\u7F36\u8150\u8151\u819A\u8240\u8299\u83A9\u8A03\u8CA0\u8CE6\u8CFB\u8D74\u8DBA\u90E8\u91DC\u961C\u9644\u99D9\u9CE7\u5317\u5206\u5429\u5674\u58B3\u5954\u596E\u5FFF\u61A4\u626E\u6610\u6C7E\u711A\u76C6\u7C89\u7CDE\u7D1B\u82AC\u8CC1\u96F0\uF967\u4F5B\u5F17\u5F7F\u62C2\u5D29\u670B\u68DA\u787C\u7E43\u9D6C\u4E15\u5099\u5315\u532A\u5351\u5983\u5A62\u5E87\u60B2\u618A\u6249\u6279\u6590\u6787\u69A7\u6BD4\u6BD6\u6BD7\u6BD8\u6CB8\uF968\u7435\u75FA\u7812\u7891\u79D5\u79D8\u7C83\u7DCB\u7FE1\u80A5\uFFFD".split("");
      for (j = 0; j != D[221].length; ++j) if (D[221][j].charCodeAt(0) !== 65533) {
        e[D[221][j]] = 56576 + j;
        d[56576 + j] = D[221][j];
      }
      D[222] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u813E\u81C2\u83F2\u871A\u88E8\u8AB9\u8B6C\u8CBB\u9119\u975E\u98DB\u9F3B\u56AC\u5B2A\u5F6C\u658C\u6AB3\u6BAF\u6D5C\u6FF1\u7015\u725D\u73AD\u8CA7\u8CD3\u983B\u6191\u6C37\u8058\u9A01\u4E4D\u4E8B\u4E9B\u4ED5\u4F3A\u4F3C\u4F7F\u4FDF\u50FF\u53F2\u53F8\u5506\u55E3\u56DB\u58EB\u5962\u5A11\u5BEB\u5BFA\u5C04\u5DF3\u5E2B\u5F99\u601D\u6368\u659C\u65AF\u67F6\u67FB\u68AD\u6B7B\u6C99\u6CD7\u6E23\u7009\u7345\u7802\u793E\u7940\u7960\u79C1\u7BE9\u7D17\u7D72\u8086\u820D\u838E\u84D1\u86C7\u88DF\u8A50\u8A5E\u8B1D\u8CDC\u8D66\u8FAD\u90AA\u98FC\u99DF\u9E9D\u524A\uF969\u6714\uF96A\uFFFD".split("");
      for (j = 0; j != D[222].length; ++j) if (D[222][j].charCodeAt(0) !== 65533) {
        e[D[222][j]] = 56832 + j;
        d[56832 + j] = D[222][j];
      }
      D[223] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5098\u522A\u5C71\u6563\u6C55\u73CA\u7523\u759D\u7B97\u849C\u9178\u9730\u4E77\u6492\u6BBA\u715E\u85A9\u4E09\uF96B\u6749\u68EE\u6E17\u829F\u8518\u886B\u63F7\u6F81\u9212\u98AF\u4E0A\u50B7\u50CF\u511F\u5546\u55AA\u5617\u5B40\u5C19\u5CE0\u5E38\u5E8A\u5EA0\u5EC2\u60F3\u6851\u6A61\u6E58\u723D\u7240\u72C0\u76F8\u7965\u7BB1\u7FD4\u88F3\u89F4\u8A73\u8C61\u8CDE\u971C\u585E\u74BD\u8CFD\u55C7\uF96C\u7A61\u7D22\u8272\u7272\u751F\u7525\uF96D\u7B19\u5885\u58FB\u5DBC\u5E8F\u5EB6\u5F90\u6055\u6292\u637F\u654D\u6691\u66D9\u66F8\u6816\u68F2\u7280\u745E\u7B6E\u7D6E\u7DD6\u7F72\uFFFD".split("");
      for (j = 0; j != D[223].length; ++j) if (D[223][j].charCodeAt(0) !== 65533) {
        e[D[223][j]] = 57088 + j;
        d[57088 + j] = D[223][j];
      }
      D[224] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u80E5\u8212\u85AF\u897F\u8A93\u901D\u92E4\u9ECD\u9F20\u5915\u596D\u5E2D\u60DC\u6614\u6673\u6790\u6C50\u6DC5\u6F5F\u77F3\u78A9\u84C6\u91CB\u932B\u4ED9\u50CA\u5148\u5584\u5B0B\u5BA3\u6247\u657E\u65CB\u6E32\u717D\u7401\u7444\u7487\u74BF\u766C\u79AA\u7DDA\u7E55\u7FA8\u817A\u81B3\u8239\u861A\u87EC\u8A75\u8DE3\u9078\u9291\u9425\u994D\u9BAE\u5368\u5C51\u6954\u6CC4\u6D29\u6E2B\u820C\u859B\u893B\u8A2D\u8AAA\u96EA\u9F67\u5261\u66B9\u6BB2\u7E96\u87FE\u8D0D\u9583\u965D\u651D\u6D89\u71EE\uF96E\u57CE\u59D3\u5BAC\u6027\u60FA\u6210\u661F\u665F\u7329\u73F9\u76DB\u7701\u7B6C\uFFFD".split("");
      for (j = 0; j != D[224].length; ++j) if (D[224][j].charCodeAt(0) !== 65533) {
        e[D[224][j]] = 57344 + j;
        d[57344 + j] = D[224][j];
      }
      D[225] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8056\u8072\u8165\u8AA0\u9192\u4E16\u52E2\u6B72\u6D17\u7A05\u7B39\u7D30\uF96F\u8CB0\u53EC\u562F\u5851\u5BB5\u5C0F\u5C11\u5DE2\u6240\u6383\u6414\u662D\u68B3\u6CBC\u6D88\u6EAF\u701F\u70A4\u71D2\u7526\u758F\u758E\u7619\u7B11\u7BE0\u7C2B\u7D20\u7D39\u852C\u856D\u8607\u8A34\u900D\u9061\u90B5\u92B7\u97F6\u9A37\u4FD7\u5C6C\u675F\u6D91\u7C9F\u7E8C\u8B16\u8D16\u901F\u5B6B\u5DFD\u640D\u84C0\u905C\u98E1\u7387\u5B8B\u609A\u677E\u6DDE\u8A1F\u8AA6\u9001\u980C\u5237\uF970\u7051\u788E\u9396\u8870\u91D7\u4FEE\u53D7\u55FD\u56DA\u5782\u58FD\u5AC2\u5B88\u5CAB\u5CC0\u5E25\u6101\uFFFD".split("");
      for (j = 0; j != D[225].length; ++j) if (D[225][j].charCodeAt(0) !== 65533) {
        e[D[225][j]] = 57600 + j;
        d[57600 + j] = D[225][j];
      }
      D[226] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u620D\u624B\u6388\u641C\u6536\u6578\u6A39\u6B8A\u6C34\u6D19\u6F31\u71E7\u72E9\u7378\u7407\u74B2\u7626\u7761\u79C0\u7A57\u7AEA\u7CB9\u7D8F\u7DAC\u7E61\u7F9E\u8129\u8331\u8490\u84DA\u85EA\u8896\u8AB0\u8B90\u8F38\u9042\u9083\u916C\u9296\u92B9\u968B\u96A7\u96A8\u96D6\u9700\u9808\u9996\u9AD3\u9B1A\u53D4\u587E\u5919\u5B70\u5BBF\u6DD1\u6F5A\u719F\u7421\u74B9\u8085\u83FD\u5DE1\u5F87\u5FAA\u6042\u65EC\u6812\u696F\u6A53\u6B89\u6D35\u6DF3\u73E3\u76FE\u77AC\u7B4D\u7D14\u8123\u821C\u8340\u84F4\u8563\u8A62\u8AC4\u9187\u931E\u9806\u99B4\u620C\u8853\u8FF0\u9265\u5D07\u5D27\uFFFD".split("");
      for (j = 0; j != D[226].length; ++j) if (D[226][j].charCodeAt(0) !== 65533) {
        e[D[226][j]] = 57856 + j;
        d[57856 + j] = D[226][j];
      }
      D[227] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5D69\u745F\u819D\u8768\u6FD5\u62FE\u7FD2\u8936\u8972\u4E1E\u4E58\u50E7\u52DD\u5347\u627F\u6607\u7E69\u8805\u965E\u4F8D\u5319\u5636\u59CB\u5AA4\u5C38\u5C4E\u5C4D\u5E02\u5F11\u6043\u65BD\u662F\u6642\u67BE\u67F4\u731C\u77E2\u793A\u7FC5\u8494\u84CD\u8996\u8A66\u8A69\u8AE1\u8C55\u8C7A\u57F4\u5BD4\u5F0F\u606F\u62ED\u690D\u6B96\u6E5C\u7184\u7BD2\u8755\u8B58\u8EFE\u98DF\u98FE\u4F38\u4F81\u4FE1\u547B\u5A20\u5BB8\u613C\u65B0\u6668\u71FC\u7533\u795E\u7D33\u814E\u81E3\u8398\u85AA\u85CE\u8703\u8A0A\u8EAB\u8F9B\uF971\u8FC5\u5931\u5BA4\u5BE6\u6089\u5BE9\u5C0B\u5FC3\u6C81\uFFFD".split("");
      for (j = 0; j != D[227].length; ++j) if (D[227][j].charCodeAt(0) !== 65533) {
        e[D[227][j]] = 58112 + j;
        d[58112 + j] = D[227][j];
      }
      D[228] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uF972\u6DF1\u700B\u751A\u82AF\u8AF6\u4EC0\u5341\uF973\u96D9\u6C0F\u4E9E\u4FC4\u5152\u555E\u5A25\u5CE8\u6211\u7259\u82BD\u83AA\u86FE\u8859\u8A1D\u963F\u96C5\u9913\u9D09\u9D5D\u580A\u5CB3\u5DBD\u5E44\u60E1\u6115\u63E1\u6A02\u6E25\u9102\u9354\u984E\u9C10\u9F77\u5B89\u5CB8\u6309\u664F\u6848\u773C\u96C1\u978D\u9854\u9B9F\u65A1\u8B01\u8ECB\u95BC\u5535\u5CA9\u5DD6\u5EB5\u6697\u764C\u83F4\u95C7\u58D3\u62BC\u72CE\u9D28\u4EF0\u592E\u600F\u663B\u6B83\u79E7\u9D26\u5393\u54C0\u57C3\u5D16\u611B\u66D6\u6DAF\u788D\u827E\u9698\u9744\u5384\u627C\u6396\u6DB2\u7E0A\u814B\u984D\uFFFD".split("");
      for (j = 0; j != D[228].length; ++j) if (D[228][j].charCodeAt(0) !== 65533) {
        e[D[228][j]] = 58368 + j;
        d[58368 + j] = D[228][j];
      }
      D[229] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6AFB\u7F4C\u9DAF\u9E1A\u4E5F\u503B\u51B6\u591C\u60F9\u63F6\u6930\u723A\u8036\uF974\u91CE\u5F31\uF975\uF976\u7D04\u82E5\u846F\u84BB\u85E5\u8E8D\uF977\u4F6F\uF978\uF979\u58E4\u5B43\u6059\u63DA\u6518\u656D\u6698\uF97A\u694A\u6A23\u6D0B\u7001\u716C\u75D2\u760D\u79B3\u7A70\uF97B\u7F8A\uF97C\u8944\uF97D\u8B93\u91C0\u967D\uF97E\u990A\u5704\u5FA1\u65BC\u6F01\u7600\u79A6\u8A9E\u99AD\u9B5A\u9F6C\u5104\u61B6\u6291\u6A8D\u81C6\u5043\u5830\u5F66\u7109\u8A00\u8AFA\u5B7C\u8616\u4FFA\u513C\u56B4\u5944\u63A9\u6DF9\u5DAA\u696D\u5186\u4E88\u4F59\uF97F\uF980\uF981\u5982\uF982\uFFFD".split("");
      for (j = 0; j != D[229].length; ++j) if (D[229][j].charCodeAt(0) !== 65533) {
        e[D[229][j]] = 58624 + j;
        d[58624 + j] = D[229][j];
      }
      D[230] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uF983\u6B5F\u6C5D\uF984\u74B5\u7916\uF985\u8207\u8245\u8339\u8F3F\u8F5D\uF986\u9918\uF987\uF988\uF989\u4EA6\uF98A\u57DF\u5F79\u6613\uF98B\uF98C\u75AB\u7E79\u8B6F\uF98D\u9006\u9A5B\u56A5\u5827\u59F8\u5A1F\u5BB4\uF98E\u5EF6\uF98F\uF990\u6350\u633B\uF991\u693D\u6C87\u6CBF\u6D8E\u6D93\u6DF5\u6F14\uF992\u70DF\u7136\u7159\uF993\u71C3\u71D5\uF994\u784F\u786F\uF995\u7B75\u7DE3\uF996\u7E2F\uF997\u884D\u8EDF\uF998\uF999\uF99A\u925B\uF99B\u9CF6\uF99C\uF99D\uF99E\u6085\u6D85\uF99F\u71B1\uF9A0\uF9A1\u95B1\u53AD\uF9A2\uF9A3\uF9A4\u67D3\uF9A5\u708E\u7130\u7430\u8276\u82D2\uFFFD".split("");
      for (j = 0; j != D[230].length; ++j) if (D[230][j].charCodeAt(0) !== 65533) {
        e[D[230][j]] = 58880 + j;
        d[58880 + j] = D[230][j];
      }
      D[231] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uF9A6\u95BB\u9AE5\u9E7D\u66C4\uF9A7\u71C1\u8449\uF9A8\uF9A9\u584B\uF9AA\uF9AB\u5DB8\u5F71\uF9AC\u6620\u668E\u6979\u69AE\u6C38\u6CF3\u6E36\u6F41\u6FDA\u701B\u702F\u7150\u71DF\u7370\uF9AD\u745B\uF9AE\u74D4\u76C8\u7A4E\u7E93\uF9AF\uF9B0\u82F1\u8A60\u8FCE\uF9B1\u9348\uF9B2\u9719\uF9B3\uF9B4\u4E42\u502A\uF9B5\u5208\u53E1\u66F3\u6C6D\u6FCA\u730A\u777F\u7A62\u82AE\u85DD\u8602\uF9B6\u88D4\u8A63\u8B7D\u8C6B\uF9B7\u92B3\uF9B8\u9713\u9810\u4E94\u4F0D\u4FC9\u50B2\u5348\u543E\u5433\u55DA\u5862\u58BA\u5967\u5A1B\u5BE4\u609F\uF9B9\u61CA\u6556\u65FF\u6664\u68A7\u6C5A\u6FB3\uFFFD".split("");
      for (j = 0; j != D[231].length; ++j) if (D[231][j].charCodeAt(0) !== 65533) {
        e[D[231][j]] = 59136 + j;
        d[59136 + j] = D[231][j];
      }
      D[232] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u70CF\u71AC\u7352\u7B7D\u8708\u8AA4\u9C32\u9F07\u5C4B\u6C83\u7344\u7389\u923A\u6EAB\u7465\u761F\u7A69\u7E15\u860A\u5140\u58C5\u64C1\u74EE\u7515\u7670\u7FC1\u9095\u96CD\u9954\u6E26\u74E6\u7AA9\u7AAA\u81E5\u86D9\u8778\u8A1B\u5A49\u5B8C\u5B9B\u68A1\u6900\u6D63\u73A9\u7413\u742C\u7897\u7DE9\u7FEB\u8118\u8155\u839E\u8C4C\u962E\u9811\u66F0\u5F80\u65FA\u6789\u6C6A\u738B\u502D\u5A03\u6B6A\u77EE\u5916\u5D6C\u5DCD\u7325\u754F\uF9BA\uF9BB\u50E5\u51F9\u582F\u592D\u5996\u59DA\u5BE5\uF9BC\uF9BD\u5DA2\u62D7\u6416\u6493\u64FE\uF9BE\u66DC\uF9BF\u6A48\uF9C0\u71FF\u7464\uF9C1\uFFFD".split("");
      for (j = 0; j != D[232].length; ++j) if (D[232][j].charCodeAt(0) !== 65533) {
        e[D[232][j]] = 59392 + j;
        d[59392 + j] = D[232][j];
      }
      D[233] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7A88\u7AAF\u7E47\u7E5E\u8000\u8170\uF9C2\u87EF\u8981\u8B20\u9059\uF9C3\u9080\u9952\u617E\u6B32\u6D74\u7E1F\u8925\u8FB1\u4FD1\u50AD\u5197\u52C7\u57C7\u5889\u5BB9\u5EB8\u6142\u6995\u6D8C\u6E67\u6EB6\u7194\u7462\u7528\u752C\u8073\u8338\u84C9\u8E0A\u9394\u93DE\uF9C4\u4E8E\u4F51\u5076\u512A\u53C8\u53CB\u53F3\u5B87\u5BD3\u5C24\u611A\u6182\u65F4\u725B\u7397\u7440\u76C2\u7950\u7991\u79B9\u7D06\u7FBD\u828B\u85D5\u865E\u8FC2\u9047\u90F5\u91EA\u9685\u96E8\u96E9\u52D6\u5F67\u65ED\u6631\u682F\u715C\u7A36\u90C1\u980A\u4E91\uF9C5\u6A52\u6B9E\u6F90\u7189\u8018\u82B8\u8553\uFFFD".split("");
      for (j = 0; j != D[233].length; ++j) if (D[233][j].charCodeAt(0) !== 65533) {
        e[D[233][j]] = 59648 + j;
        d[59648 + j] = D[233][j];
      }
      D[234] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u904B\u9695\u96F2\u97FB\u851A\u9B31\u4E90\u718A\u96C4\u5143\u539F\u54E1\u5713\u5712\u57A3\u5A9B\u5AC4\u5BC3\u6028\u613F\u63F4\u6C85\u6D39\u6E72\u6E90\u7230\u733F\u7457\u82D1\u8881\u8F45\u9060\uF9C6\u9662\u9858\u9D1B\u6708\u8D8A\u925E\u4F4D\u5049\u50DE\u5371\u570D\u59D4\u5A01\u5C09\u6170\u6690\u6E2D\u7232\u744B\u7DEF\u80C3\u840E\u8466\u853F\u875F\u885B\u8918\u8B02\u9055\u97CB\u9B4F\u4E73\u4F91\u5112\u516A\uF9C7\u552F\u55A9\u5B7A\u5BA5\u5E7C\u5E7D\u5EBE\u60A0\u60DF\u6108\u6109\u63C4\u6538\u6709\uF9C8\u67D4\u67DA\uF9C9\u6961\u6962\u6CB9\u6D27\uF9CA\u6E38\uF9CB\uFFFD".split("");
      for (j = 0; j != D[234].length; ++j) if (D[234][j].charCodeAt(0) !== 65533) {
        e[D[234][j]] = 59904 + j;
        d[59904 + j] = D[234][j];
      }
      D[235] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6FE1\u7336\u7337\uF9CC\u745C\u7531\uF9CD\u7652\uF9CE\uF9CF\u7DAD\u81FE\u8438\u88D5\u8A98\u8ADB\u8AED\u8E30\u8E42\u904A\u903E\u907A\u9149\u91C9\u936E\uF9D0\uF9D1\u5809\uF9D2\u6BD3\u8089\u80B2\uF9D3\uF9D4\u5141\u596B\u5C39\uF9D5\uF9D6\u6F64\u73A7\u80E4\u8D07\uF9D7\u9217\u958F\uF9D8\uF9D9\uF9DA\uF9DB\u807F\u620E\u701C\u7D68\u878D\uF9DC\u57A0\u6069\u6147\u6BB7\u8ABE\u9280\u96B1\u4E59\u541F\u6DEB\u852D\u9670\u97F3\u98EE\u63D6\u6CE3\u9091\u51DD\u61C9\u81BA\u9DF9\u4F9D\u501A\u5100\u5B9C\u610F\u61FF\u64EC\u6905\u6BC5\u7591\u77E3\u7FA9\u8264\u858F\u87FB\u8863\u8ABC\uFFFD".split("");
      for (j = 0; j != D[235].length; ++j) if (D[235][j].charCodeAt(0) !== 65533) {
        e[D[235][j]] = 60160 + j;
        d[60160 + j] = D[235][j];
      }
      D[236] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8B70\u91AB\u4E8C\u4EE5\u4F0A\uF9DD\uF9DE\u5937\u59E8\uF9DF\u5DF2\u5F1B\u5F5B\u6021\uF9E0\uF9E1\uF9E2\uF9E3\u723E\u73E5\uF9E4\u7570\u75CD\uF9E5\u79FB\uF9E6\u800C\u8033\u8084\u82E1\u8351\uF9E7\uF9E8\u8CBD\u8CB3\u9087\uF9E9\uF9EA\u98F4\u990C\uF9EB\uF9EC\u7037\u76CA\u7FCA\u7FCC\u7FFC\u8B1A\u4EBA\u4EC1\u5203\u5370\uF9ED\u54BD\u56E0\u59FB\u5BC5\u5F15\u5FCD\u6E6E\uF9EE\uF9EF\u7D6A\u8335\uF9F0\u8693\u8A8D\uF9F1\u976D\u9777\uF9F2\uF9F3\u4E00\u4F5A\u4F7E\u58F9\u65E5\u6EA2\u9038\u93B0\u99B9\u4EFB\u58EC\u598A\u59D9\u6041\uF9F4\uF9F5\u7A14\uF9F6\u834F\u8CC3\u5165\u5344\uFFFD".split("");
      for (j = 0; j != D[236].length; ++j) if (D[236][j].charCodeAt(0) !== 65533) {
        e[D[236][j]] = 60416 + j;
        d[60416 + j] = D[236][j];
      }
      D[237] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uF9F7\uF9F8\uF9F9\u4ECD\u5269\u5B55\u82BF\u4ED4\u523A\u54A8\u59C9\u59FF\u5B50\u5B57\u5B5C\u6063\u6148\u6ECB\u7099\u716E\u7386\u74F7\u75B5\u78C1\u7D2B\u8005\u81EA\u8328\u8517\u85C9\u8AEE\u8CC7\u96CC\u4F5C\u52FA\u56BC\u65AB\u6628\u707C\u70B8\u7235\u7DBD\u828D\u914C\u96C0\u9D72\u5B71\u68E7\u6B98\u6F7A\u76DE\u5C91\u66AB\u6F5B\u7BB4\u7C2A\u8836\u96DC\u4E08\u4ED7\u5320\u5834\u58BB\u58EF\u596C\u5C07\u5E33\u5E84\u5F35\u638C\u66B2\u6756\u6A1F\u6AA3\u6B0C\u6F3F\u7246\uF9FA\u7350\u748B\u7AE0\u7CA7\u8178\u81DF\u81E7\u838A\u846C\u8523\u8594\u85CF\u88DD\u8D13\u91AC\u9577\uFFFD".split("");
      for (j = 0; j != D[237].length; ++j) if (D[237][j].charCodeAt(0) !== 65533) {
        e[D[237][j]] = 60672 + j;
        d[60672 + j] = D[237][j];
      }
      D[238] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u969C\u518D\u54C9\u5728\u5BB0\u624D\u6750\u683D\u6893\u6E3D\u6ED3\u707D\u7E21\u88C1\u8CA1\u8F09\u9F4B\u9F4E\u722D\u7B8F\u8ACD\u931A\u4F47\u4F4E\u5132\u5480\u59D0\u5E95\u62B5\u6775\u696E\u6A17\u6CAE\u6E1A\u72D9\u732A\u75BD\u7BB8\u7D35\u82E7\u83F9\u8457\u85F7\u8A5B\u8CAF\u8E87\u9019\u90B8\u96CE\u9F5F\u52E3\u540A\u5AE1\u5BC2\u6458\u6575\u6EF4\u72C4\uF9FB\u7684\u7A4D\u7B1B\u7C4D\u7E3E\u7FDF\u837B\u8B2B\u8CCA\u8D64\u8DE1\u8E5F\u8FEA\u8FF9\u9069\u93D1\u4F43\u4F7A\u50B3\u5168\u5178\u524D\u526A\u5861\u587C\u5960\u5C08\u5C55\u5EDB\u609B\u6230\u6813\u6BBF\u6C08\u6FB1\uFFFD".split("");
      for (j = 0; j != D[238].length; ++j) if (D[238][j].charCodeAt(0) !== 65533) {
        e[D[238][j]] = 60928 + j;
        d[60928 + j] = D[238][j];
      }
      D[239] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u714E\u7420\u7530\u7538\u7551\u7672\u7B4C\u7B8B\u7BAD\u7BC6\u7E8F\u8A6E\u8F3E\u8F49\u923F\u9293\u9322\u942B\u96FB\u985A\u986B\u991E\u5207\u622A\u6298\u6D59\u7664\u7ACA\u7BC0\u7D76\u5360\u5CBE\u5E97\u6F38\u70B9\u7C98\u9711\u9B8E\u9EDE\u63A5\u647A\u8776\u4E01\u4E95\u4EAD\u505C\u5075\u5448\u59C3\u5B9A\u5E40\u5EAD\u5EF7\u5F81\u60C5\u633A\u653F\u6574\u65CC\u6676\u6678\u67FE\u6968\u6A89\u6B63\u6C40\u6DC0\u6DE8\u6E1F\u6E5E\u701E\u70A1\u738E\u73FD\u753A\u775B\u7887\u798E\u7A0B\u7A7D\u7CBE\u7D8E\u8247\u8A02\u8AEA\u8C9E\u912D\u914A\u91D8\u9266\u92CC\u9320\u9706\u9756\uFFFD".split("");
      for (j = 0; j != D[239].length; ++j) if (D[239][j].charCodeAt(0) !== 65533) {
        e[D[239][j]] = 61184 + j;
        d[61184 + j] = D[239][j];
      }
      D[240] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u975C\u9802\u9F0E\u5236\u5291\u557C\u5824\u5E1D\u5F1F\u608C\u63D0\u68AF\u6FDF\u796D\u7B2C\u81CD\u85BA\u88FD\u8AF8\u8E44\u918D\u9664\u969B\u973D\u984C\u9F4A\u4FCE\u5146\u51CB\u52A9\u5632\u5F14\u5F6B\u63AA\u64CD\u65E9\u6641\u66FA\u66F9\u671D\u689D\u68D7\u69FD\u6F15\u6F6E\u7167\u71E5\u722A\u74AA\u773A\u7956\u795A\u79DF\u7A20\u7A95\u7C97\u7CDF\u7D44\u7E70\u8087\u85FB\u86A4\u8A54\u8ABF\u8D99\u8E81\u9020\u906D\u91E3\u963B\u96D5\u9CE5\u65CF\u7C07\u8DB3\u93C3\u5B58\u5C0A\u5352\u62D9\u731D\u5027\u5B97\u5F9E\u60B0\u616B\u68D5\u6DD9\u742E\u7A2E\u7D42\u7D9C\u7E31\u816B\uFFFD".split("");
      for (j = 0; j != D[240].length; ++j) if (D[240][j].charCodeAt(0) !== 65533) {
        e[D[240][j]] = 61440 + j;
        d[61440 + j] = D[240][j];
      }
      D[241] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8E2A\u8E35\u937E\u9418\u4F50\u5750\u5DE6\u5EA7\u632B\u7F6A\u4E3B\u4F4F\u4F8F\u505A\u59DD\u80C4\u546A\u5468\u55FE\u594F\u5B99\u5DDE\u5EDA\u665D\u6731\u67F1\u682A\u6CE8\u6D32\u6E4A\u6F8D\u70B7\u73E0\u7587\u7C4C\u7D02\u7D2C\u7DA2\u821F\u86DB\u8A3B\u8A85\u8D70\u8E8A\u8F33\u9031\u914E\u9152\u9444\u99D0\u7AF9\u7CA5\u4FCA\u5101\u51C6\u57C8\u5BEF\u5CFB\u6659\u6A3D\u6D5A\u6E96\u6FEC\u710C\u756F\u7AE3\u8822\u9021\u9075\u96CB\u99FF\u8301\u4E2D\u4EF2\u8846\u91CD\u537D\u6ADB\u696B\u6C41\u847A\u589E\u618E\u66FE\u62EF\u70DD\u7511\u75C7\u7E52\u84B8\u8B49\u8D08\u4E4B\u53EA\uFFFD".split("");
      for (j = 0; j != D[241].length; ++j) if (D[241][j].charCodeAt(0) !== 65533) {
        e[D[241][j]] = 61696 + j;
        d[61696 + j] = D[241][j];
      }
      D[242] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u54AB\u5730\u5740\u5FD7\u6301\u6307\u646F\u652F\u65E8\u667A\u679D\u67B3\u6B62\u6C60\u6C9A\u6F2C\u77E5\u7825\u7949\u7957\u7D19\u80A2\u8102\u81F3\u829D\u82B7\u8718\u8A8C\uF9FC\u8D04\u8DBE\u9072\u76F4\u7A19\u7A37\u7E54\u8077\u5507\u55D4\u5875\u632F\u6422\u6649\u664B\u686D\u699B\u6B84\u6D25\u6EB1\u73CD\u7468\u74A1\u755B\u75B9\u76E1\u771E\u778B\u79E6\u7E09\u7E1D\u81FB\u852F\u8897\u8A3A\u8CD1\u8EEB\u8FB0\u9032\u93AD\u9663\u9673\u9707\u4F84\u53F1\u59EA\u5AC9\u5E19\u684E\u74C6\u75BE\u79E9\u7A92\u81A3\u86ED\u8CEA\u8DCC\u8FED\u659F\u6715\uF9FD\u57F7\u6F57\u7DDD\u8F2F\uFFFD".split("");
      for (j = 0; j != D[242].length; ++j) if (D[242][j].charCodeAt(0) !== 65533) {
        e[D[242][j]] = 61952 + j;
        d[61952 + j] = D[242][j];
      }
      D[243] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u93F6\u96C6\u5FB5\u61F2\u6F84\u4E14\u4F98\u501F\u53C9\u55DF\u5D6F\u5DEE\u6B21\u6B64\u78CB\u7B9A\uF9FE\u8E49\u8ECA\u906E\u6349\u643E\u7740\u7A84\u932F\u947F\u9F6A\u64B0\u6FAF\u71E6\u74A8\u74DA\u7AC4\u7C12\u7E82\u7CB2\u7E98\u8B9A\u8D0A\u947D\u9910\u994C\u5239\u5BDF\u64E6\u672D\u7D2E\u50ED\u53C3\u5879\u6158\u6159\u61FA\u65AC\u7AD9\u8B92\u8B96\u5009\u5021\u5275\u5531\u5A3C\u5EE0\u5F70\u6134\u655E\u660C\u6636\u66A2\u69CD\u6EC4\u6F32\u7316\u7621\u7A93\u8139\u8259\u83D6\u84BC\u50B5\u57F0\u5BC0\u5BE8\u5F69\u63A1\u7826\u7DB5\u83DC\u8521\u91C7\u91F5\u518A\u67F5\u7B56\uFFFD".split("");
      for (j = 0; j != D[243].length; ++j) if (D[243][j].charCodeAt(0) !== 65533) {
        e[D[243][j]] = 62208 + j;
        d[62208 + j] = D[243][j];
      }
      D[244] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8CAC\u51C4\u59BB\u60BD\u8655\u501C\uF9FF\u5254\u5C3A\u617D\u621A\u62D3\u64F2\u65A5\u6ECC\u7620\u810A\u8E60\u965F\u96BB\u4EDF\u5343\u5598\u5929\u5DDD\u64C5\u6CC9\u6DFA\u7394\u7A7F\u821B\u85A6\u8CE4\u8E10\u9077\u91E7\u95E1\u9621\u97C6\u51F8\u54F2\u5586\u5FB9\u64A4\u6F88\u7DB4\u8F1F\u8F4D\u9435\u50C9\u5C16\u6CBE\u6DFB\u751B\u77BB\u7C3D\u7C64\u8A79\u8AC2\u581E\u59BE\u5E16\u6377\u7252\u758A\u776B\u8ADC\u8CBC\u8F12\u5EF3\u6674\u6DF8\u807D\u83C1\u8ACB\u9751\u9BD6\uFA00\u5243\u66FF\u6D95\u6EEF\u7DE0\u8AE6\u902E\u905E\u9AD4\u521D\u527F\u54E8\u6194\u6284\u62DB\u68A2\uFFFD".split("");
      for (j = 0; j != D[244].length; ++j) if (D[244][j].charCodeAt(0) !== 65533) {
        e[D[244][j]] = 62464 + j;
        d[62464 + j] = D[244][j];
      }
      D[245] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6912\u695A\u6A35\u7092\u7126\u785D\u7901\u790E\u79D2\u7A0D\u8096\u8278\u82D5\u8349\u8549\u8C82\u8D85\u9162\u918B\u91AE\u4FC3\u56D1\u71ED\u77D7\u8700\u89F8\u5BF8\u5FD6\u6751\u90A8\u53E2\u585A\u5BF5\u60A4\u6181\u6460\u7E3D\u8070\u8525\u9283\u64AE\u50AC\u5D14\u6700\u589C\u62BD\u63A8\u690E\u6978\u6A1E\u6E6B\u76BA\u79CB\u82BB\u8429\u8ACF\u8DA8\u8FFD\u9112\u914B\u919C\u9310\u9318\u939A\u96DB\u9A36\u9C0D\u4E11\u755C\u795D\u7AFA\u7B51\u7BC9\u7E2E\u84C4\u8E59\u8E74\u8EF8\u9010\u6625\u693F\u7443\u51FA\u672E\u9EDC\u5145\u5FE0\u6C96\u87F2\u885D\u8877\u60B4\u81B5\u8403\uFFFD".split("");
      for (j = 0; j != D[245].length; ++j) if (D[245][j].charCodeAt(0) !== 65533) {
        e[D[245][j]] = 62720 + j;
        d[62720 + j] = D[245][j];
      }
      D[246] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8D05\u53D6\u5439\u5634\u5A36\u5C31\u708A\u7FE0\u805A\u8106\u81ED\u8DA3\u9189\u9A5F\u9DF2\u5074\u4EC4\u53A0\u60FB\u6E2C\u5C64\u4F88\u5024\u55E4\u5CD9\u5E5F\u6065\u6894\u6CBB\u6DC4\u71BE\u75D4\u75F4\u7661\u7A1A\u7A49\u7DC7\u7DFB\u7F6E\u81F4\u86A9\u8F1C\u96C9\u99B3\u9F52\u5247\u52C5\u98ED\u89AA\u4E03\u67D2\u6F06\u4FB5\u5BE2\u6795\u6C88\u6D78\u741B\u7827\u91DD\u937C\u87C4\u79E4\u7A31\u5FEB\u4ED6\u54A4\u553E\u58AE\u59A5\u60F0\u6253\u62D6\u6736\u6955\u8235\u9640\u99B1\u99DD\u502C\u5353\u5544\u577C\uFA01\u6258\uFA02\u64E2\u666B\u67DD\u6FC1\u6FEF\u7422\u7438\u8A17\uFFFD".split("");
      for (j = 0; j != D[246].length; ++j) if (D[246][j].charCodeAt(0) !== 65533) {
        e[D[246][j]] = 62976 + j;
        d[62976 + j] = D[246][j];
      }
      D[247] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9438\u5451\u5606\u5766\u5F48\u619A\u6B4E\u7058\u70AD\u7DBB\u8A95\u596A\u812B\u63A2\u7708\u803D\u8CAA\u5854\u642D\u69BB\u5B95\u5E11\u6E6F\uFA03\u8569\u514C\u53F0\u592A\u6020\u614B\u6B86\u6C70\u6CF0\u7B1E\u80CE\u82D4\u8DC6\u90B0\u98B1\uFA04\u64C7\u6FA4\u6491\u6504\u514E\u5410\u571F\u8A0E\u615F\u6876\uFA05\u75DB\u7B52\u7D71\u901A\u5806\u69CC\u817F\u892A\u9000\u9839\u5078\u5957\u59AC\u6295\u900F\u9B2A\u615D\u7279\u95D6\u5761\u5A46\u5DF4\u628A\u64AD\u64FA\u6777\u6CE2\u6D3E\u722C\u7436\u7834\u7F77\u82AD\u8DDB\u9817\u5224\u5742\u677F\u7248\u74E3\u8CA9\u8FA6\u9211\uFFFD".split("");
      for (j = 0; j != D[247].length; ++j) if (D[247][j].charCodeAt(0) !== 65533) {
        e[D[247][j]] = 63232 + j;
        d[63232 + j] = D[247][j];
      }
      D[248] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u962A\u516B\u53ED\u634C\u4F69\u5504\u6096\u6557\u6C9B\u6D7F\u724C\u72FD\u7A17\u8987\u8C9D\u5F6D\u6F8E\u70F9\u81A8\u610E\u4FBF\u504F\u6241\u7247\u7BC7\u7DE8\u7FE9\u904D\u97AD\u9A19\u8CB6\u576A\u5E73\u67B0\u840D\u8A55\u5420\u5B16\u5E63\u5EE2\u5F0A\u6583\u80BA\u853D\u9589\u965B\u4F48\u5305\u530D\u530F\u5486\u54FA\u5703\u5E03\u6016\u629B\u62B1\u6355\uFA06\u6CE1\u6D66\u75B1\u7832\u80DE\u812F\u82DE\u8461\u84B2\u888D\u8912\u900B\u92EA\u98FD\u9B91\u5E45\u66B4\u66DD\u7011\u7206\uFA07\u4FF5\u527D\u5F6A\u6153\u6753\u6A19\u6F02\u74E2\u7968\u8868\u8C79\u98C7\u98C4\u9A43\uFFFD".split("");
      for (j = 0; j != D[248].length; ++j) if (D[248][j].charCodeAt(0) !== 65533) {
        e[D[248][j]] = 63488 + j;
        d[63488 + j] = D[248][j];
      }
      D[249] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u54C1\u7A1F\u6953\u8AF7\u8C4A\u98A8\u99AE\u5F7C\u62AB\u75B2\u76AE\u88AB\u907F\u9642\u5339\u5F3C\u5FC5\u6CCC\u73CC\u7562\u758B\u7B46\u82FE\u999D\u4E4F\u903C\u4E0B\u4F55\u53A6\u590F\u5EC8\u6630\u6CB3\u7455\u8377\u8766\u8CC0\u9050\u971E\u9C15\u58D1\u5B78\u8650\u8B14\u9DB4\u5BD2\u6068\u608D\u65F1\u6C57\u6F22\u6FA3\u701A\u7F55\u7FF0\u9591\u9592\u9650\u97D3\u5272\u8F44\u51FD\u542B\u54B8\u5563\u558A\u6ABB\u6DB5\u7DD8\u8266\u929C\u9677\u9E79\u5408\u54C8\u76D2\u86E4\u95A4\u95D4\u965C\u4EA2\u4F09\u59EE\u5AE6\u5DF7\u6052\u6297\u676D\u6841\u6C86\u6E2F\u7F38\u809B\u822A\uFFFD".split("");
      for (j = 0; j != D[249].length; ++j) if (D[249][j].charCodeAt(0) !== 65533) {
        e[D[249][j]] = 63744 + j;
        d[63744 + j] = D[249][j];
      }
      D[250] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFA08\uFA09\u9805\u4EA5\u5055\u54B3\u5793\u595A\u5B69\u5BB3\u61C8\u6977\u6D77\u7023\u87F9\u89E3\u8A72\u8AE7\u9082\u99ED\u9AB8\u52BE\u6838\u5016\u5E78\u674F\u8347\u884C\u4EAB\u5411\u56AE\u73E6\u9115\u97FF\u9909\u9957\u9999\u5653\u589F\u865B\u8A31\u61B2\u6AF6\u737B\u8ED2\u6B47\u96AA\u9A57\u5955\u7200\u8D6B\u9769\u4FD4\u5CF4\u5F26\u61F8\u665B\u6CEB\u70AB\u7384\u73B9\u73FE\u7729\u774D\u7D43\u7D62\u7E23\u8237\u8852\uFA0A\u8CE2\u9249\u986F\u5B51\u7A74\u8840\u9801\u5ACC\u4FE0\u5354\u593E\u5CFD\u633E\u6D79\u72F9\u8105\u8107\u83A2\u92CF\u9830\u4EA8\u5144\u5211\u578B\uFFFD".split("");
      for (j = 0; j != D[250].length; ++j) if (D[250][j].charCodeAt(0) !== 65533) {
        e[D[250][j]] = 64e3 + j;
        d[64e3 + j] = D[250][j];
      }
      D[251] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5F62\u6CC2\u6ECE\u7005\u7050\u70AF\u7192\u73E9\u7469\u834A\u87A2\u8861\u9008\u90A2\u93A3\u99A8\u516E\u5F57\u60E0\u6167\u66B3\u8559\u8E4A\u91AF\u978B\u4E4E\u4E92\u547C\u58D5\u58FA\u597D\u5CB5\u5F27\u6236\u6248\u660A\u6667\u6BEB\u6D69\u6DCF\u6E56\u6EF8\u6F94\u6FE0\u6FE9\u705D\u72D0\u7425\u745A\u74E0\u7693\u795C\u7CCA\u7E1E\u80E1\u82A6\u846B\u84BF\u864E\u865F\u8774\u8B77\u8C6A\u93AC\u9800\u9865\u60D1\u6216\u9177\u5A5A\u660F\u6DF7\u6E3E\u743F\u9B42\u5FFD\u60DA\u7B0F\u54C4\u5F18\u6C5E\u6CD3\u6D2A\u70D8\u7D05\u8679\u8A0C\u9D3B\u5316\u548C\u5B05\u6A3A\u706B\u7575\uFFFD".split("");
      for (j = 0; j != D[251].length; ++j) if (D[251][j].charCodeAt(0) !== 65533) {
        e[D[251][j]] = 64256 + j;
        d[64256 + j] = D[251][j];
      }
      D[252] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u798D\u79BE\u82B1\u83EF\u8A71\u8B41\u8CA8\u9774\uFA0B\u64F4\u652B\u78BA\u78BB\u7A6B\u4E38\u559A\u5950\u5BA6\u5E7B\u60A3\u63DB\u6B61\u6665\u6853\u6E19\u7165\u74B0\u7D08\u9084\u9A69\u9C25\u6D3B\u6ED1\u733E\u8C41\u95CA\u51F0\u5E4C\u5FA8\u604D\u60F6\u6130\u614C\u6643\u6644\u69A5\u6CC1\u6E5F\u6EC9\u6F62\u714C\u749C\u7687\u7BC1\u7C27\u8352\u8757\u9051\u968D\u9EC3\u532F\u56DE\u5EFB\u5F8A\u6062\u6094\u61F7\u6666\u6703\u6A9C\u6DEE\u6FAE\u7070\u736A\u7E6A\u81BE\u8334\u86D4\u8AA8\u8CC4\u5283\u7372\u5B96\u6A6B\u9404\u54EE\u5686\u5B5D\u6548\u6585\u66C9\u689F\u6D8D\u6DC6\uFFFD".split("");
      for (j = 0; j != D[252].length; ++j) if (D[252][j].charCodeAt(0) !== 65533) {
        e[D[252][j]] = 64512 + j;
        d[64512 + j] = D[252][j];
      }
      D[253] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u723B\u80B4\u9175\u9A4D\u4FAF\u5019\u539A\u540E\u543C\u5589\u55C5\u5E3F\u5F8C\u673D\u7166\u73DD\u9005\u52DB\u52F3\u5864\u58CE\u7104\u718F\u71FB\u85B0\u8A13\u6688\u85A8\u55A7\u6684\u714A\u8431\u5349\u5599\u6BC1\u5F59\u5FBD\u63EE\u6689\u7147\u8AF1\u8F1D\u9EBE\u4F11\u643A\u70CB\u7566\u8667\u6064\u8B4E\u9DF8\u5147\u51F6\u5308\u6D36\u80F8\u9ED1\u6615\u6B23\u7098\u75D5\u5403\u5C79\u7D07\u8A16\u6B20\u6B3D\u6B46\u5438\u6070\u6D3D\u7FD5\u8208\u50D6\u51DE\u559C\u566B\u56CD\u59EC\u5B09\u5E0C\u6199\u6198\u6231\u665E\u66E6\u7199\u71B9\u71BA\u72A7\u79A7\u7A00\u7FB2\u8A70\uFFFD".split("");
      for (j = 0; j != D[253].length; ++j) if (D[253][j].charCodeAt(0) !== 65533) {
        e[D[253][j]] = 64768 + j;
        d[64768 + j] = D[253][j];
      }
      return { "enc": e, "dec": d };
    }();
    cptable2[950] = function() {
      var d = [], e = {}, D = [], j;
      D[0] = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[0].length; ++j) if (D[0][j].charCodeAt(0) !== 65533) {
        e[D[0][j]] = 0 + j;
        d[0 + j] = D[0][j];
      }
      D[161] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u3000\uFF0C\u3001\u3002\uFF0E\u2027\uFF1B\uFF1A\uFF1F\uFF01\uFE30\u2026\u2025\uFE50\uFE51\uFE52\xB7\uFE54\uFE55\uFE56\uFE57\uFF5C\u2013\uFE31\u2014\uFE33\u2574\uFE34\uFE4F\uFF08\uFF09\uFE35\uFE36\uFF5B\uFF5D\uFE37\uFE38\u3014\u3015\uFE39\uFE3A\u3010\u3011\uFE3B\uFE3C\u300A\u300B\uFE3D\uFE3E\u3008\u3009\uFE3F\uFE40\u300C\u300D\uFE41\uFE42\u300E\u300F\uFE43\uFE44\uFE59\uFE5A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFE5B\uFE5C\uFE5D\uFE5E\u2018\u2019\u201C\u201D\u301D\u301E\u2035\u2032\uFF03\uFF06\uFF0A\u203B\xA7\u3003\u25CB\u25CF\u25B3\u25B2\u25CE\u2606\u2605\u25C7\u25C6\u25A1\u25A0\u25BD\u25BC\u32A3\u2105\xAF\uFFE3\uFF3F\u02CD\uFE49\uFE4A\uFE4D\uFE4E\uFE4B\uFE4C\uFE5F\uFE60\uFE61\uFF0B\uFF0D\xD7\xF7\xB1\u221A\uFF1C\uFF1E\uFF1D\u2266\u2267\u2260\u221E\u2252\u2261\uFE62\uFE63\uFE64\uFE65\uFE66\uFF5E\u2229\u222A\u22A5\u2220\u221F\u22BF\u33D2\u33D1\u222B\u222E\u2235\u2234\u2640\u2642\u2295\u2299\u2191\u2193\u2190\u2192\u2196\u2197\u2199\u2198\u2225\u2223\uFF0F\uFFFD".split("");
      for (j = 0; j != D[161].length; ++j) if (D[161][j].charCodeAt(0) !== 65533) {
        e[D[161][j]] = 41216 + j;
        d[41216 + j] = D[161][j];
      }
      D[162] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFF3C\u2215\uFE68\uFF04\uFFE5\u3012\uFFE0\uFFE1\uFF05\uFF20\u2103\u2109\uFE69\uFE6A\uFE6B\u33D5\u339C\u339D\u339E\u33CE\u33A1\u338E\u338F\u33C4\xB0\u5159\u515B\u515E\u515D\u5161\u5163\u55E7\u74E9\u7CCE\u2581\u2582\u2583\u2584\u2585\u2586\u2587\u2588\u258F\u258E\u258D\u258C\u258B\u258A\u2589\u253C\u2534\u252C\u2524\u251C\u2594\u2500\u2502\u2595\u250C\u2510\u2514\u2518\u256D\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u256E\u2570\u256F\u2550\u255E\u256A\u2561\u25E2\u25E3\u25E5\u25E4\u2571\u2572\u2573\uFF10\uFF11\uFF12\uFF13\uFF14\uFF15\uFF16\uFF17\uFF18\uFF19\u2160\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168\u2169\u3021\u3022\u3023\u3024\u3025\u3026\u3027\u3028\u3029\u5341\u5344\u5345\uFF21\uFF22\uFF23\uFF24\uFF25\uFF26\uFF27\uFF28\uFF29\uFF2A\uFF2B\uFF2C\uFF2D\uFF2E\uFF2F\uFF30\uFF31\uFF32\uFF33\uFF34\uFF35\uFF36\uFF37\uFF38\uFF39\uFF3A\uFF41\uFF42\uFF43\uFF44\uFF45\uFF46\uFF47\uFF48\uFF49\uFF4A\uFF4B\uFF4C\uFF4D\uFF4E\uFF4F\uFF50\uFF51\uFF52\uFF53\uFF54\uFF55\uFF56\uFFFD".split("");
      for (j = 0; j != D[162].length; ++j) if (D[162][j].charCodeAt(0) !== 65533) {
        e[D[162][j]] = 41472 + j;
        d[41472 + j] = D[162][j];
      }
      D[163] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFF57\uFF58\uFF59\uFF5A\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u3105\u3106\u3107\u3108\u3109\u310A\u310B\u310C\u310D\u310E\u310F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u3110\u3111\u3112\u3113\u3114\u3115\u3116\u3117\u3118\u3119\u311A\u311B\u311C\u311D\u311E\u311F\u3120\u3121\u3122\u3123\u3124\u3125\u3126\u3127\u3128\u3129\u02D9\u02C9\u02CA\u02C7\u02CB\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u20AC\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[163].length; ++j) if (D[163][j].charCodeAt(0) !== 65533) {
        e[D[163][j]] = 41728 + j;
        d[41728 + j] = D[163][j];
      }
      D[164] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u4E00\u4E59\u4E01\u4E03\u4E43\u4E5D\u4E86\u4E8C\u4EBA\u513F\u5165\u516B\u51E0\u5200\u5201\u529B\u5315\u5341\u535C\u53C8\u4E09\u4E0B\u4E08\u4E0A\u4E2B\u4E38\u51E1\u4E45\u4E48\u4E5F\u4E5E\u4E8E\u4EA1\u5140\u5203\u52FA\u5343\u53C9\u53E3\u571F\u58EB\u5915\u5927\u5973\u5B50\u5B51\u5B53\u5BF8\u5C0F\u5C22\u5C38\u5C71\u5DDD\u5DE5\u5DF1\u5DF2\u5DF3\u5DFE\u5E72\u5EFE\u5F0B\u5F13\u624D\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u4E11\u4E10\u4E0D\u4E2D\u4E30\u4E39\u4E4B\u5C39\u4E88\u4E91\u4E95\u4E92\u4E94\u4EA2\u4EC1\u4EC0\u4EC3\u4EC6\u4EC7\u4ECD\u4ECA\u4ECB\u4EC4\u5143\u5141\u5167\u516D\u516E\u516C\u5197\u51F6\u5206\u5207\u5208\u52FB\u52FE\u52FF\u5316\u5339\u5348\u5347\u5345\u535E\u5384\u53CB\u53CA\u53CD\u58EC\u5929\u592B\u592A\u592D\u5B54\u5C11\u5C24\u5C3A\u5C6F\u5DF4\u5E7B\u5EFF\u5F14\u5F15\u5FC3\u6208\u6236\u624B\u624E\u652F\u6587\u6597\u65A4\u65B9\u65E5\u66F0\u6708\u6728\u6B20\u6B62\u6B79\u6BCB\u6BD4\u6BDB\u6C0F\u6C34\u706B\u722A\u7236\u723B\u7247\u7259\u725B\u72AC\u738B\u4E19\uFFFD".split("");
      for (j = 0; j != D[164].length; ++j) if (D[164][j].charCodeAt(0) !== 65533) {
        e[D[164][j]] = 41984 + j;
        d[41984 + j] = D[164][j];
      }
      D[165] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u4E16\u4E15\u4E14\u4E18\u4E3B\u4E4D\u4E4F\u4E4E\u4EE5\u4ED8\u4ED4\u4ED5\u4ED6\u4ED7\u4EE3\u4EE4\u4ED9\u4EDE\u5145\u5144\u5189\u518A\u51AC\u51F9\u51FA\u51F8\u520A\u52A0\u529F\u5305\u5306\u5317\u531D\u4EDF\u534A\u5349\u5361\u5360\u536F\u536E\u53BB\u53EF\u53E4\u53F3\u53EC\u53EE\u53E9\u53E8\u53FC\u53F8\u53F5\u53EB\u53E6\u53EA\u53F2\u53F1\u53F0\u53E5\u53ED\u53FB\u56DB\u56DA\u5916\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u592E\u5931\u5974\u5976\u5B55\u5B83\u5C3C\u5DE8\u5DE7\u5DE6\u5E02\u5E03\u5E73\u5E7C\u5F01\u5F18\u5F17\u5FC5\u620A\u6253\u6254\u6252\u6251\u65A5\u65E6\u672E\u672C\u672A\u672B\u672D\u6B63\u6BCD\u6C11\u6C10\u6C38\u6C41\u6C40\u6C3E\u72AF\u7384\u7389\u74DC\u74E6\u7518\u751F\u7528\u7529\u7530\u7531\u7532\u7533\u758B\u767D\u76AE\u76BF\u76EE\u77DB\u77E2\u77F3\u793A\u79BE\u7A74\u7ACB\u4E1E\u4E1F\u4E52\u4E53\u4E69\u4E99\u4EA4\u4EA6\u4EA5\u4EFF\u4F09\u4F19\u4F0A\u4F15\u4F0D\u4F10\u4F11\u4F0F\u4EF2\u4EF6\u4EFB\u4EF0\u4EF3\u4EFD\u4F01\u4F0B\u5149\u5147\u5146\u5148\u5168\uFFFD".split("");
      for (j = 0; j != D[165].length; ++j) if (D[165][j].charCodeAt(0) !== 65533) {
        e[D[165][j]] = 42240 + j;
        d[42240 + j] = D[165][j];
      }
      D[166] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5171\u518D\u51B0\u5217\u5211\u5212\u520E\u5216\u52A3\u5308\u5321\u5320\u5370\u5371\u5409\u540F\u540C\u540A\u5410\u5401\u540B\u5404\u5411\u540D\u5408\u5403\u540E\u5406\u5412\u56E0\u56DE\u56DD\u5733\u5730\u5728\u572D\u572C\u572F\u5729\u5919\u591A\u5937\u5938\u5984\u5978\u5983\u597D\u5979\u5982\u5981\u5B57\u5B58\u5B87\u5B88\u5B85\u5B89\u5BFA\u5C16\u5C79\u5DDE\u5E06\u5E76\u5E74\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5F0F\u5F1B\u5FD9\u5FD6\u620E\u620C\u620D\u6210\u6263\u625B\u6258\u6536\u65E9\u65E8\u65EC\u65ED\u66F2\u66F3\u6709\u673D\u6734\u6731\u6735\u6B21\u6B64\u6B7B\u6C16\u6C5D\u6C57\u6C59\u6C5F\u6C60\u6C50\u6C55\u6C61\u6C5B\u6C4D\u6C4E\u7070\u725F\u725D\u767E\u7AF9\u7C73\u7CF8\u7F36\u7F8A\u7FBD\u8001\u8003\u800C\u8012\u8033\u807F\u8089\u808B\u808C\u81E3\u81EA\u81F3\u81FC\u820C\u821B\u821F\u826E\u8272\u827E\u866B\u8840\u884C\u8863\u897F\u9621\u4E32\u4EA8\u4F4D\u4F4F\u4F47\u4F57\u4F5E\u4F34\u4F5B\u4F55\u4F30\u4F50\u4F51\u4F3D\u4F3A\u4F38\u4F43\u4F54\u4F3C\u4F46\u4F63\uFFFD".split("");
      for (j = 0; j != D[166].length; ++j) if (D[166][j].charCodeAt(0) !== 65533) {
        e[D[166][j]] = 42496 + j;
        d[42496 + j] = D[166][j];
      }
      D[167] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u4F5C\u4F60\u4F2F\u4F4E\u4F36\u4F59\u4F5D\u4F48\u4F5A\u514C\u514B\u514D\u5175\u51B6\u51B7\u5225\u5224\u5229\u522A\u5228\u52AB\u52A9\u52AA\u52AC\u5323\u5373\u5375\u541D\u542D\u541E\u543E\u5426\u544E\u5427\u5446\u5443\u5433\u5448\u5442\u541B\u5429\u544A\u5439\u543B\u5438\u542E\u5435\u5436\u5420\u543C\u5440\u5431\u542B\u541F\u542C\u56EA\u56F0\u56E4\u56EB\u574A\u5751\u5740\u574D\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5747\u574E\u573E\u5750\u574F\u573B\u58EF\u593E\u599D\u5992\u59A8\u599E\u59A3\u5999\u5996\u598D\u59A4\u5993\u598A\u59A5\u5B5D\u5B5C\u5B5A\u5B5B\u5B8C\u5B8B\u5B8F\u5C2C\u5C40\u5C41\u5C3F\u5C3E\u5C90\u5C91\u5C94\u5C8C\u5DEB\u5E0C\u5E8F\u5E87\u5E8A\u5EF7\u5F04\u5F1F\u5F64\u5F62\u5F77\u5F79\u5FD8\u5FCC\u5FD7\u5FCD\u5FF1\u5FEB\u5FF8\u5FEA\u6212\u6211\u6284\u6297\u6296\u6280\u6276\u6289\u626D\u628A\u627C\u627E\u6279\u6273\u6292\u626F\u6298\u626E\u6295\u6293\u6291\u6286\u6539\u653B\u6538\u65F1\u66F4\u675F\u674E\u674F\u6750\u6751\u675C\u6756\u675E\u6749\u6746\u6760\uFFFD".split("");
      for (j = 0; j != D[167].length; ++j) if (D[167][j].charCodeAt(0) !== 65533) {
        e[D[167][j]] = 42752 + j;
        d[42752 + j] = D[167][j];
      }
      D[168] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6753\u6757\u6B65\u6BCF\u6C42\u6C5E\u6C99\u6C81\u6C88\u6C89\u6C85\u6C9B\u6C6A\u6C7A\u6C90\u6C70\u6C8C\u6C68\u6C96\u6C92\u6C7D\u6C83\u6C72\u6C7E\u6C74\u6C86\u6C76\u6C8D\u6C94\u6C98\u6C82\u7076\u707C\u707D\u7078\u7262\u7261\u7260\u72C4\u72C2\u7396\u752C\u752B\u7537\u7538\u7682\u76EF\u77E3\u79C1\u79C0\u79BF\u7A76\u7CFB\u7F55\u8096\u8093\u809D\u8098\u809B\u809A\u80B2\u826F\u8292\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u828B\u828D\u898B\u89D2\u8A00\u8C37\u8C46\u8C55\u8C9D\u8D64\u8D70\u8DB3\u8EAB\u8ECA\u8F9B\u8FB0\u8FC2\u8FC6\u8FC5\u8FC4\u5DE1\u9091\u90A2\u90AA\u90A6\u90A3\u9149\u91C6\u91CC\u9632\u962E\u9631\u962A\u962C\u4E26\u4E56\u4E73\u4E8B\u4E9B\u4E9E\u4EAB\u4EAC\u4F6F\u4F9D\u4F8D\u4F73\u4F7F\u4F6C\u4F9B\u4F8B\u4F86\u4F83\u4F70\u4F75\u4F88\u4F69\u4F7B\u4F96\u4F7E\u4F8F\u4F91\u4F7A\u5154\u5152\u5155\u5169\u5177\u5176\u5178\u51BD\u51FD\u523B\u5238\u5237\u523A\u5230\u522E\u5236\u5241\u52BE\u52BB\u5352\u5354\u5353\u5351\u5366\u5377\u5378\u5379\u53D6\u53D4\u53D7\u5473\u5475\uFFFD".split("");
      for (j = 0; j != D[168].length; ++j) if (D[168][j].charCodeAt(0) !== 65533) {
        e[D[168][j]] = 43008 + j;
        d[43008 + j] = D[168][j];
      }
      D[169] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5496\u5478\u5495\u5480\u547B\u5477\u5484\u5492\u5486\u547C\u5490\u5471\u5476\u548C\u549A\u5462\u5468\u548B\u547D\u548E\u56FA\u5783\u5777\u576A\u5769\u5761\u5766\u5764\u577C\u591C\u5949\u5947\u5948\u5944\u5954\u59BE\u59BB\u59D4\u59B9\u59AE\u59D1\u59C6\u59D0\u59CD\u59CB\u59D3\u59CA\u59AF\u59B3\u59D2\u59C5\u5B5F\u5B64\u5B63\u5B97\u5B9A\u5B98\u5B9C\u5B99\u5B9B\u5C1A\u5C48\u5C45\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5C46\u5CB7\u5CA1\u5CB8\u5CA9\u5CAB\u5CB1\u5CB3\u5E18\u5E1A\u5E16\u5E15\u5E1B\u5E11\u5E78\u5E9A\u5E97\u5E9C\u5E95\u5E96\u5EF6\u5F26\u5F27\u5F29\u5F80\u5F81\u5F7F\u5F7C\u5FDD\u5FE0\u5FFD\u5FF5\u5FFF\u600F\u6014\u602F\u6035\u6016\u602A\u6015\u6021\u6027\u6029\u602B\u601B\u6216\u6215\u623F\u623E\u6240\u627F\u62C9\u62CC\u62C4\u62BF\u62C2\u62B9\u62D2\u62DB\u62AB\u62D3\u62D4\u62CB\u62C8\u62A8\u62BD\u62BC\u62D0\u62D9\u62C7\u62CD\u62B5\u62DA\u62B1\u62D8\u62D6\u62D7\u62C6\u62AC\u62CE\u653E\u65A7\u65BC\u65FA\u6614\u6613\u660C\u6606\u6602\u660E\u6600\u660F\u6615\u660A\uFFFD".split("");
      for (j = 0; j != D[169].length; ++j) if (D[169][j].charCodeAt(0) !== 65533) {
        e[D[169][j]] = 43264 + j;
        d[43264 + j] = D[169][j];
      }
      D[170] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6607\u670D\u670B\u676D\u678B\u6795\u6771\u679C\u6773\u6777\u6787\u679D\u6797\u676F\u6770\u677F\u6789\u677E\u6790\u6775\u679A\u6793\u677C\u676A\u6772\u6B23\u6B66\u6B67\u6B7F\u6C13\u6C1B\u6CE3\u6CE8\u6CF3\u6CB1\u6CCC\u6CE5\u6CB3\u6CBD\u6CBE\u6CBC\u6CE2\u6CAB\u6CD5\u6CD3\u6CB8\u6CC4\u6CB9\u6CC1\u6CAE\u6CD7\u6CC5\u6CF1\u6CBF\u6CBB\u6CE1\u6CDB\u6CCA\u6CAC\u6CEF\u6CDC\u6CD6\u6CE0\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7095\u708E\u7092\u708A\u7099\u722C\u722D\u7238\u7248\u7267\u7269\u72C0\u72CE\u72D9\u72D7\u72D0\u73A9\u73A8\u739F\u73AB\u73A5\u753D\u759D\u7599\u759A\u7684\u76C2\u76F2\u76F4\u77E5\u77FD\u793E\u7940\u7941\u79C9\u79C8\u7A7A\u7A79\u7AFA\u7CFE\u7F54\u7F8C\u7F8B\u8005\u80BA\u80A5\u80A2\u80B1\u80A1\u80AB\u80A9\u80B4\u80AA\u80AF\u81E5\u81FE\u820D\u82B3\u829D\u8299\u82AD\u82BD\u829F\u82B9\u82B1\u82AC\u82A5\u82AF\u82B8\u82A3\u82B0\u82BE\u82B7\u864E\u8671\u521D\u8868\u8ECB\u8FCE\u8FD4\u8FD1\u90B5\u90B8\u90B1\u90B6\u91C7\u91D1\u9577\u9580\u961C\u9640\u963F\u963B\u9644\uFFFD".split("");
      for (j = 0; j != D[170].length; ++j) if (D[170][j].charCodeAt(0) !== 65533) {
        e[D[170][j]] = 43520 + j;
        d[43520 + j] = D[170][j];
      }
      D[171] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9642\u96B9\u96E8\u9752\u975E\u4E9F\u4EAD\u4EAE\u4FE1\u4FB5\u4FAF\u4FBF\u4FE0\u4FD1\u4FCF\u4FDD\u4FC3\u4FB6\u4FD8\u4FDF\u4FCA\u4FD7\u4FAE\u4FD0\u4FC4\u4FC2\u4FDA\u4FCE\u4FDE\u4FB7\u5157\u5192\u5191\u51A0\u524E\u5243\u524A\u524D\u524C\u524B\u5247\u52C7\u52C9\u52C3\u52C1\u530D\u5357\u537B\u539A\u53DB\u54AC\u54C0\u54A8\u54CE\u54C9\u54B8\u54A6\u54B3\u54C7\u54C2\u54BD\u54AA\u54C1\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u54C4\u54C8\u54AF\u54AB\u54B1\u54BB\u54A9\u54A7\u54BF\u56FF\u5782\u578B\u57A0\u57A3\u57A2\u57CE\u57AE\u5793\u5955\u5951\u594F\u594E\u5950\u59DC\u59D8\u59FF\u59E3\u59E8\u5A03\u59E5\u59EA\u59DA\u59E6\u5A01\u59FB\u5B69\u5BA3\u5BA6\u5BA4\u5BA2\u5BA5\u5C01\u5C4E\u5C4F\u5C4D\u5C4B\u5CD9\u5CD2\u5DF7\u5E1D\u5E25\u5E1F\u5E7D\u5EA0\u5EA6\u5EFA\u5F08\u5F2D\u5F65\u5F88\u5F85\u5F8A\u5F8B\u5F87\u5F8C\u5F89\u6012\u601D\u6020\u6025\u600E\u6028\u604D\u6070\u6068\u6062\u6046\u6043\u606C\u606B\u606A\u6064\u6241\u62DC\u6316\u6309\u62FC\u62ED\u6301\u62EE\u62FD\u6307\u62F1\u62F7\uFFFD".split("");
      for (j = 0; j != D[171].length; ++j) if (D[171][j].charCodeAt(0) !== 65533) {
        e[D[171][j]] = 43776 + j;
        d[43776 + j] = D[171][j];
      }
      D[172] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u62EF\u62EC\u62FE\u62F4\u6311\u6302\u653F\u6545\u65AB\u65BD\u65E2\u6625\u662D\u6620\u6627\u662F\u661F\u6628\u6631\u6624\u66F7\u67FF\u67D3\u67F1\u67D4\u67D0\u67EC\u67B6\u67AF\u67F5\u67E9\u67EF\u67C4\u67D1\u67B4\u67DA\u67E5\u67B8\u67CF\u67DE\u67F3\u67B0\u67D9\u67E2\u67DD\u67D2\u6B6A\u6B83\u6B86\u6BB5\u6BD2\u6BD7\u6C1F\u6CC9\u6D0B\u6D32\u6D2A\u6D41\u6D25\u6D0C\u6D31\u6D1E\u6D17\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6D3B\u6D3D\u6D3E\u6D36\u6D1B\u6CF5\u6D39\u6D27\u6D38\u6D29\u6D2E\u6D35\u6D0E\u6D2B\u70AB\u70BA\u70B3\u70AC\u70AF\u70AD\u70B8\u70AE\u70A4\u7230\u7272\u726F\u7274\u72E9\u72E0\u72E1\u73B7\u73CA\u73BB\u73B2\u73CD\u73C0\u73B3\u751A\u752D\u754F\u754C\u754E\u754B\u75AB\u75A4\u75A5\u75A2\u75A3\u7678\u7686\u7687\u7688\u76C8\u76C6\u76C3\u76C5\u7701\u76F9\u76F8\u7709\u770B\u76FE\u76FC\u7707\u77DC\u7802\u7814\u780C\u780D\u7946\u7949\u7948\u7947\u79B9\u79BA\u79D1\u79D2\u79CB\u7A7F\u7A81\u7AFF\u7AFD\u7C7D\u7D02\u7D05\u7D00\u7D09\u7D07\u7D04\u7D06\u7F38\u7F8E\u7FBF\u8004\uFFFD".split("");
      for (j = 0; j != D[172].length; ++j) if (D[172][j].charCodeAt(0) !== 65533) {
        e[D[172][j]] = 44032 + j;
        d[44032 + j] = D[172][j];
      }
      D[173] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8010\u800D\u8011\u8036\u80D6\u80E5\u80DA\u80C3\u80C4\u80CC\u80E1\u80DB\u80CE\u80DE\u80E4\u80DD\u81F4\u8222\u82E7\u8303\u8305\u82E3\u82DB\u82E6\u8304\u82E5\u8302\u8309\u82D2\u82D7\u82F1\u8301\u82DC\u82D4\u82D1\u82DE\u82D3\u82DF\u82EF\u8306\u8650\u8679\u867B\u867A\u884D\u886B\u8981\u89D4\u8A08\u8A02\u8A03\u8C9E\u8CA0\u8D74\u8D73\u8DB4\u8ECD\u8ECC\u8FF0\u8FE6\u8FE2\u8FEA\u8FE5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8FED\u8FEB\u8FE4\u8FE8\u90CA\u90CE\u90C1\u90C3\u914B\u914A\u91CD\u9582\u9650\u964B\u964C\u964D\u9762\u9769\u97CB\u97ED\u97F3\u9801\u98A8\u98DB\u98DF\u9996\u9999\u4E58\u4EB3\u500C\u500D\u5023\u4FEF\u5026\u5025\u4FF8\u5029\u5016\u5006\u503C\u501F\u501A\u5012\u5011\u4FFA\u5000\u5014\u5028\u4FF1\u5021\u500B\u5019\u5018\u4FF3\u4FEE\u502D\u502A\u4FFE\u502B\u5009\u517C\u51A4\u51A5\u51A2\u51CD\u51CC\u51C6\u51CB\u5256\u525C\u5254\u525B\u525D\u532A\u537F\u539F\u539D\u53DF\u54E8\u5510\u5501\u5537\u54FC\u54E5\u54F2\u5506\u54FA\u5514\u54E9\u54ED\u54E1\u5509\u54EE\u54EA\uFFFD".split("");
      for (j = 0; j != D[173].length; ++j) if (D[173][j].charCodeAt(0) !== 65533) {
        e[D[173][j]] = 44288 + j;
        d[44288 + j] = D[173][j];
      }
      D[174] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u54E6\u5527\u5507\u54FD\u550F\u5703\u5704\u57C2\u57D4\u57CB\u57C3\u5809\u590F\u5957\u5958\u595A\u5A11\u5A18\u5A1C\u5A1F\u5A1B\u5A13\u59EC\u5A20\u5A23\u5A29\u5A25\u5A0C\u5A09\u5B6B\u5C58\u5BB0\u5BB3\u5BB6\u5BB4\u5BAE\u5BB5\u5BB9\u5BB8\u5C04\u5C51\u5C55\u5C50\u5CED\u5CFD\u5CFB\u5CEA\u5CE8\u5CF0\u5CF6\u5D01\u5CF4\u5DEE\u5E2D\u5E2B\u5EAB\u5EAD\u5EA7\u5F31\u5F92\u5F91\u5F90\u6059\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6063\u6065\u6050\u6055\u606D\u6069\u606F\u6084\u609F\u609A\u608D\u6094\u608C\u6085\u6096\u6247\u62F3\u6308\u62FF\u634E\u633E\u632F\u6355\u6342\u6346\u634F\u6349\u633A\u6350\u633D\u632A\u632B\u6328\u634D\u634C\u6548\u6549\u6599\u65C1\u65C5\u6642\u6649\u664F\u6643\u6652\u664C\u6645\u6641\u66F8\u6714\u6715\u6717\u6821\u6838\u6848\u6846\u6853\u6839\u6842\u6854\u6829\u68B3\u6817\u684C\u6851\u683D\u67F4\u6850\u6840\u683C\u6843\u682A\u6845\u6813\u6818\u6841\u6B8A\u6B89\u6BB7\u6C23\u6C27\u6C28\u6C26\u6C24\u6CF0\u6D6A\u6D95\u6D88\u6D87\u6D66\u6D78\u6D77\u6D59\u6D93\uFFFD".split("");
      for (j = 0; j != D[174].length; ++j) if (D[174][j].charCodeAt(0) !== 65533) {
        e[D[174][j]] = 44544 + j;
        d[44544 + j] = D[174][j];
      }
      D[175] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6D6C\u6D89\u6D6E\u6D5A\u6D74\u6D69\u6D8C\u6D8A\u6D79\u6D85\u6D65\u6D94\u70CA\u70D8\u70E4\u70D9\u70C8\u70CF\u7239\u7279\u72FC\u72F9\u72FD\u72F8\u72F7\u7386\u73ED\u7409\u73EE\u73E0\u73EA\u73DE\u7554\u755D\u755C\u755A\u7559\u75BE\u75C5\u75C7\u75B2\u75B3\u75BD\u75BC\u75B9\u75C2\u75B8\u768B\u76B0\u76CA\u76CD\u76CE\u7729\u771F\u7720\u7728\u77E9\u7830\u7827\u7838\u781D\u7834\u7837\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7825\u782D\u7820\u781F\u7832\u7955\u7950\u7960\u795F\u7956\u795E\u795D\u7957\u795A\u79E4\u79E3\u79E7\u79DF\u79E6\u79E9\u79D8\u7A84\u7A88\u7AD9\u7B06\u7B11\u7C89\u7D21\u7D17\u7D0B\u7D0A\u7D20\u7D22\u7D14\u7D10\u7D15\u7D1A\u7D1C\u7D0D\u7D19\u7D1B\u7F3A\u7F5F\u7F94\u7FC5\u7FC1\u8006\u8018\u8015\u8019\u8017\u803D\u803F\u80F1\u8102\u80F0\u8105\u80ED\u80F4\u8106\u80F8\u80F3\u8108\u80FD\u810A\u80FC\u80EF\u81ED\u81EC\u8200\u8210\u822A\u822B\u8228\u822C\u82BB\u832B\u8352\u8354\u834A\u8338\u8350\u8349\u8335\u8334\u834F\u8332\u8339\u8336\u8317\u8340\u8331\u8328\u8343\uFFFD".split("");
      for (j = 0; j != D[175].length; ++j) if (D[175][j].charCodeAt(0) !== 65533) {
        e[D[175][j]] = 44800 + j;
        d[44800 + j] = D[175][j];
      }
      D[176] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8654\u868A\u86AA\u8693\u86A4\u86A9\u868C\u86A3\u869C\u8870\u8877\u8881\u8882\u887D\u8879\u8A18\u8A10\u8A0E\u8A0C\u8A15\u8A0A\u8A17\u8A13\u8A16\u8A0F\u8A11\u8C48\u8C7A\u8C79\u8CA1\u8CA2\u8D77\u8EAC\u8ED2\u8ED4\u8ECF\u8FB1\u9001\u9006\u8FF7\u9000\u8FFA\u8FF4\u9003\u8FFD\u9005\u8FF8\u9095\u90E1\u90DD\u90E2\u9152\u914D\u914C\u91D8\u91DD\u91D7\u91DC\u91D9\u9583\u9662\u9663\u9661\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u965B\u965D\u9664\u9658\u965E\u96BB\u98E2\u99AC\u9AA8\u9AD8\u9B25\u9B32\u9B3C\u4E7E\u507A\u507D\u505C\u5047\u5043\u504C\u505A\u5049\u5065\u5076\u504E\u5055\u5075\u5074\u5077\u504F\u500F\u506F\u506D\u515C\u5195\u51F0\u526A\u526F\u52D2\u52D9\u52D8\u52D5\u5310\u530F\u5319\u533F\u5340\u533E\u53C3\u66FC\u5546\u556A\u5566\u5544\u555E\u5561\u5543\u554A\u5531\u5556\u554F\u5555\u552F\u5564\u5538\u552E\u555C\u552C\u5563\u5533\u5541\u5557\u5708\u570B\u5709\u57DF\u5805\u580A\u5806\u57E0\u57E4\u57FA\u5802\u5835\u57F7\u57F9\u5920\u5962\u5A36\u5A41\u5A49\u5A66\u5A6A\u5A40\uFFFD".split("");
      for (j = 0; j != D[176].length; ++j) if (D[176][j].charCodeAt(0) !== 65533) {
        e[D[176][j]] = 45056 + j;
        d[45056 + j] = D[176][j];
      }
      D[177] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5A3C\u5A62\u5A5A\u5A46\u5A4A\u5B70\u5BC7\u5BC5\u5BC4\u5BC2\u5BBF\u5BC6\u5C09\u5C08\u5C07\u5C60\u5C5C\u5C5D\u5D07\u5D06\u5D0E\u5D1B\u5D16\u5D22\u5D11\u5D29\u5D14\u5D19\u5D24\u5D27\u5D17\u5DE2\u5E38\u5E36\u5E33\u5E37\u5EB7\u5EB8\u5EB6\u5EB5\u5EBE\u5F35\u5F37\u5F57\u5F6C\u5F69\u5F6B\u5F97\u5F99\u5F9E\u5F98\u5FA1\u5FA0\u5F9C\u607F\u60A3\u6089\u60A0\u60A8\u60CB\u60B4\u60E6\u60BD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u60C5\u60BB\u60B5\u60DC\u60BC\u60D8\u60D5\u60C6\u60DF\u60B8\u60DA\u60C7\u621A\u621B\u6248\u63A0\u63A7\u6372\u6396\u63A2\u63A5\u6377\u6367\u6398\u63AA\u6371\u63A9\u6389\u6383\u639B\u636B\u63A8\u6384\u6388\u6399\u63A1\u63AC\u6392\u638F\u6380\u637B\u6369\u6368\u637A\u655D\u6556\u6551\u6559\u6557\u555F\u654F\u6558\u6555\u6554\u659C\u659B\u65AC\u65CF\u65CB\u65CC\u65CE\u665D\u665A\u6664\u6668\u6666\u665E\u66F9\u52D7\u671B\u6881\u68AF\u68A2\u6893\u68B5\u687F\u6876\u68B1\u68A7\u6897\u68B0\u6883\u68C4\u68AD\u6886\u6885\u6894\u689D\u68A8\u689F\u68A1\u6882\u6B32\u6BBA\uFFFD".split("");
      for (j = 0; j != D[177].length; ++j) if (D[177][j].charCodeAt(0) !== 65533) {
        e[D[177][j]] = 45312 + j;
        d[45312 + j] = D[177][j];
      }
      D[178] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6BEB\u6BEC\u6C2B\u6D8E\u6DBC\u6DF3\u6DD9\u6DB2\u6DE1\u6DCC\u6DE4\u6DFB\u6DFA\u6E05\u6DC7\u6DCB\u6DAF\u6DD1\u6DAE\u6DDE\u6DF9\u6DB8\u6DF7\u6DF5\u6DC5\u6DD2\u6E1A\u6DB5\u6DDA\u6DEB\u6DD8\u6DEA\u6DF1\u6DEE\u6DE8\u6DC6\u6DC4\u6DAA\u6DEC\u6DBF\u6DE6\u70F9\u7109\u710A\u70FD\u70EF\u723D\u727D\u7281\u731C\u731B\u7316\u7313\u7319\u7387\u7405\u740A\u7403\u7406\u73FE\u740D\u74E0\u74F6\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u74F7\u751C\u7522\u7565\u7566\u7562\u7570\u758F\u75D4\u75D5\u75B5\u75CA\u75CD\u768E\u76D4\u76D2\u76DB\u7737\u773E\u773C\u7736\u7738\u773A\u786B\u7843\u784E\u7965\u7968\u796D\u79FB\u7A92\u7A95\u7B20\u7B28\u7B1B\u7B2C\u7B26\u7B19\u7B1E\u7B2E\u7C92\u7C97\u7C95\u7D46\u7D43\u7D71\u7D2E\u7D39\u7D3C\u7D40\u7D30\u7D33\u7D44\u7D2F\u7D42\u7D32\u7D31\u7F3D\u7F9E\u7F9A\u7FCC\u7FCE\u7FD2\u801C\u804A\u8046\u812F\u8116\u8123\u812B\u8129\u8130\u8124\u8202\u8235\u8237\u8236\u8239\u838E\u839E\u8398\u8378\u83A2\u8396\u83BD\u83AB\u8392\u838A\u8393\u8389\u83A0\u8377\u837B\u837C\uFFFD".split("");
      for (j = 0; j != D[178].length; ++j) if (D[178][j].charCodeAt(0) !== 65533) {
        e[D[178][j]] = 45568 + j;
        d[45568 + j] = D[178][j];
      }
      D[179] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8386\u83A7\u8655\u5F6A\u86C7\u86C0\u86B6\u86C4\u86B5\u86C6\u86CB\u86B1\u86AF\u86C9\u8853\u889E\u8888\u88AB\u8892\u8896\u888D\u888B\u8993\u898F\u8A2A\u8A1D\u8A23\u8A25\u8A31\u8A2D\u8A1F\u8A1B\u8A22\u8C49\u8C5A\u8CA9\u8CAC\u8CAB\u8CA8\u8CAA\u8CA7\u8D67\u8D66\u8DBE\u8DBA\u8EDB\u8EDF\u9019\u900D\u901A\u9017\u9023\u901F\u901D\u9010\u9015\u901E\u9020\u900F\u9022\u9016\u901B\u9014\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u90E8\u90ED\u90FD\u9157\u91CE\u91F5\u91E6\u91E3\u91E7\u91ED\u91E9\u9589\u966A\u9675\u9673\u9678\u9670\u9674\u9676\u9677\u966C\u96C0\u96EA\u96E9\u7AE0\u7ADF\u9802\u9803\u9B5A\u9CE5\u9E75\u9E7F\u9EA5\u9EBB\u50A2\u508D\u5085\u5099\u5091\u5080\u5096\u5098\u509A\u6700\u51F1\u5272\u5274\u5275\u5269\u52DE\u52DD\u52DB\u535A\u53A5\u557B\u5580\u55A7\u557C\u558A\u559D\u5598\u5582\u559C\u55AA\u5594\u5587\u558B\u5583\u55B3\u55AE\u559F\u553E\u55B2\u559A\u55BB\u55AC\u55B1\u557E\u5589\u55AB\u5599\u570D\u582F\u582A\u5834\u5824\u5830\u5831\u5821\u581D\u5820\u58F9\u58FA\u5960\uFFFD".split("");
      for (j = 0; j != D[179].length; ++j) if (D[179][j].charCodeAt(0) !== 65533) {
        e[D[179][j]] = 45824 + j;
        d[45824 + j] = D[179][j];
      }
      D[180] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5A77\u5A9A\u5A7F\u5A92\u5A9B\u5AA7\u5B73\u5B71\u5BD2\u5BCC\u5BD3\u5BD0\u5C0A\u5C0B\u5C31\u5D4C\u5D50\u5D34\u5D47\u5DFD\u5E45\u5E3D\u5E40\u5E43\u5E7E\u5ECA\u5EC1\u5EC2\u5EC4\u5F3C\u5F6D\u5FA9\u5FAA\u5FA8\u60D1\u60E1\u60B2\u60B6\u60E0\u611C\u6123\u60FA\u6115\u60F0\u60FB\u60F4\u6168\u60F1\u610E\u60F6\u6109\u6100\u6112\u621F\u6249\u63A3\u638C\u63CF\u63C0\u63E9\u63C9\u63C6\u63CD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u63D2\u63E3\u63D0\u63E1\u63D6\u63ED\u63EE\u6376\u63F4\u63EA\u63DB\u6452\u63DA\u63F9\u655E\u6566\u6562\u6563\u6591\u6590\u65AF\u666E\u6670\u6674\u6676\u666F\u6691\u667A\u667E\u6677\u66FE\u66FF\u671F\u671D\u68FA\u68D5\u68E0\u68D8\u68D7\u6905\u68DF\u68F5\u68EE\u68E7\u68F9\u68D2\u68F2\u68E3\u68CB\u68CD\u690D\u6912\u690E\u68C9\u68DA\u696E\u68FB\u6B3E\u6B3A\u6B3D\u6B98\u6B96\u6BBC\u6BEF\u6C2E\u6C2F\u6C2C\u6E2F\u6E38\u6E54\u6E21\u6E32\u6E67\u6E4A\u6E20\u6E25\u6E23\u6E1B\u6E5B\u6E58\u6E24\u6E56\u6E6E\u6E2D\u6E26\u6E6F\u6E34\u6E4D\u6E3A\u6E2C\u6E43\u6E1D\u6E3E\u6ECB\uFFFD".split("");
      for (j = 0; j != D[180].length; ++j) if (D[180][j].charCodeAt(0) !== 65533) {
        e[D[180][j]] = 46080 + j;
        d[46080 + j] = D[180][j];
      }
      D[181] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6E89\u6E19\u6E4E\u6E63\u6E44\u6E72\u6E69\u6E5F\u7119\u711A\u7126\u7130\u7121\u7136\u716E\u711C\u724C\u7284\u7280\u7336\u7325\u7334\u7329\u743A\u742A\u7433\u7422\u7425\u7435\u7436\u7434\u742F\u741B\u7426\u7428\u7525\u7526\u756B\u756A\u75E2\u75DB\u75E3\u75D9\u75D8\u75DE\u75E0\u767B\u767C\u7696\u7693\u76B4\u76DC\u774F\u77ED\u785D\u786C\u786F\u7A0D\u7A08\u7A0B\u7A05\u7A00\u7A98\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7A97\u7A96\u7AE5\u7AE3\u7B49\u7B56\u7B46\u7B50\u7B52\u7B54\u7B4D\u7B4B\u7B4F\u7B51\u7C9F\u7CA5\u7D5E\u7D50\u7D68\u7D55\u7D2B\u7D6E\u7D72\u7D61\u7D66\u7D62\u7D70\u7D73\u5584\u7FD4\u7FD5\u800B\u8052\u8085\u8155\u8154\u814B\u8151\u814E\u8139\u8146\u813E\u814C\u8153\u8174\u8212\u821C\u83E9\u8403\u83F8\u840D\u83E0\u83C5\u840B\u83C1\u83EF\u83F1\u83F4\u8457\u840A\u83F0\u840C\u83CC\u83FD\u83F2\u83CA\u8438\u840E\u8404\u83DC\u8407\u83D4\u83DF\u865B\u86DF\u86D9\u86ED\u86D4\u86DB\u86E4\u86D0\u86DE\u8857\u88C1\u88C2\u88B1\u8983\u8996\u8A3B\u8A60\u8A55\u8A5E\u8A3C\u8A41\uFFFD".split("");
      for (j = 0; j != D[181].length; ++j) if (D[181][j].charCodeAt(0) !== 65533) {
        e[D[181][j]] = 46336 + j;
        d[46336 + j] = D[181][j];
      }
      D[182] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8A54\u8A5B\u8A50\u8A46\u8A34\u8A3A\u8A36\u8A56\u8C61\u8C82\u8CAF\u8CBC\u8CB3\u8CBD\u8CC1\u8CBB\u8CC0\u8CB4\u8CB7\u8CB6\u8CBF\u8CB8\u8D8A\u8D85\u8D81\u8DCE\u8DDD\u8DCB\u8DDA\u8DD1\u8DCC\u8DDB\u8DC6\u8EFB\u8EF8\u8EFC\u8F9C\u902E\u9035\u9031\u9038\u9032\u9036\u9102\u90F5\u9109\u90FE\u9163\u9165\u91CF\u9214\u9215\u9223\u9209\u921E\u920D\u9210\u9207\u9211\u9594\u958F\u958B\u9591\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9593\u9592\u958E\u968A\u968E\u968B\u967D\u9685\u9686\u968D\u9672\u9684\u96C1\u96C5\u96C4\u96C6\u96C7\u96EF\u96F2\u97CC\u9805\u9806\u9808\u98E7\u98EA\u98EF\u98E9\u98F2\u98ED\u99AE\u99AD\u9EC3\u9ECD\u9ED1\u4E82\u50AD\u50B5\u50B2\u50B3\u50C5\u50BE\u50AC\u50B7\u50BB\u50AF\u50C7\u527F\u5277\u527D\u52DF\u52E6\u52E4\u52E2\u52E3\u532F\u55DF\u55E8\u55D3\u55E6\u55CE\u55DC\u55C7\u55D1\u55E3\u55E4\u55EF\u55DA\u55E1\u55C5\u55C6\u55E5\u55C9\u5712\u5713\u585E\u5851\u5858\u5857\u585A\u5854\u586B\u584C\u586D\u584A\u5862\u5852\u584B\u5967\u5AC1\u5AC9\u5ACC\u5ABE\u5ABD\u5ABC\uFFFD".split("");
      for (j = 0; j != D[182].length; ++j) if (D[182][j].charCodeAt(0) !== 65533) {
        e[D[182][j]] = 46592 + j;
        d[46592 + j] = D[182][j];
      }
      D[183] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5AB3\u5AC2\u5AB2\u5D69\u5D6F\u5E4C\u5E79\u5EC9\u5EC8\u5F12\u5F59\u5FAC\u5FAE\u611A\u610F\u6148\u611F\u60F3\u611B\u60F9\u6101\u6108\u614E\u614C\u6144\u614D\u613E\u6134\u6127\u610D\u6106\u6137\u6221\u6222\u6413\u643E\u641E\u642A\u642D\u643D\u642C\u640F\u641C\u6414\u640D\u6436\u6416\u6417\u6406\u656C\u659F\u65B0\u6697\u6689\u6687\u6688\u6696\u6684\u6698\u668D\u6703\u6994\u696D\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u695A\u6977\u6960\u6954\u6975\u6930\u6982\u694A\u6968\u696B\u695E\u6953\u6979\u6986\u695D\u6963\u695B\u6B47\u6B72\u6BC0\u6BBF\u6BD3\u6BFD\u6EA2\u6EAF\u6ED3\u6EB6\u6EC2\u6E90\u6E9D\u6EC7\u6EC5\u6EA5\u6E98\u6EBC\u6EBA\u6EAB\u6ED1\u6E96\u6E9C\u6EC4\u6ED4\u6EAA\u6EA7\u6EB4\u714E\u7159\u7169\u7164\u7149\u7167\u715C\u716C\u7166\u714C\u7165\u715E\u7146\u7168\u7156\u723A\u7252\u7337\u7345\u733F\u733E\u746F\u745A\u7455\u745F\u745E\u7441\u743F\u7459\u745B\u745C\u7576\u7578\u7600\u75F0\u7601\u75F2\u75F1\u75FA\u75FF\u75F4\u75F3\u76DE\u76DF\u775B\u776B\u7766\u775E\u7763\uFFFD".split("");
      for (j = 0; j != D[183].length; ++j) if (D[183][j].charCodeAt(0) !== 65533) {
        e[D[183][j]] = 46848 + j;
        d[46848 + j] = D[183][j];
      }
      D[184] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7779\u776A\u776C\u775C\u7765\u7768\u7762\u77EE\u788E\u78B0\u7897\u7898\u788C\u7889\u787C\u7891\u7893\u787F\u797A\u797F\u7981\u842C\u79BD\u7A1C\u7A1A\u7A20\u7A14\u7A1F\u7A1E\u7A9F\u7AA0\u7B77\u7BC0\u7B60\u7B6E\u7B67\u7CB1\u7CB3\u7CB5\u7D93\u7D79\u7D91\u7D81\u7D8F\u7D5B\u7F6E\u7F69\u7F6A\u7F72\u7FA9\u7FA8\u7FA4\u8056\u8058\u8086\u8084\u8171\u8170\u8178\u8165\u816E\u8173\u816B\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8179\u817A\u8166\u8205\u8247\u8482\u8477\u843D\u8431\u8475\u8466\u846B\u8449\u846C\u845B\u843C\u8435\u8461\u8463\u8469\u846D\u8446\u865E\u865C\u865F\u86F9\u8713\u8708\u8707\u8700\u86FE\u86FB\u8702\u8703\u8706\u870A\u8859\u88DF\u88D4\u88D9\u88DC\u88D8\u88DD\u88E1\u88CA\u88D5\u88D2\u899C\u89E3\u8A6B\u8A72\u8A73\u8A66\u8A69\u8A70\u8A87\u8A7C\u8A63\u8AA0\u8A71\u8A85\u8A6D\u8A62\u8A6E\u8A6C\u8A79\u8A7B\u8A3E\u8A68\u8C62\u8C8A\u8C89\u8CCA\u8CC7\u8CC8\u8CC4\u8CB2\u8CC3\u8CC2\u8CC5\u8DE1\u8DDF\u8DE8\u8DEF\u8DF3\u8DFA\u8DEA\u8DE4\u8DE6\u8EB2\u8F03\u8F09\u8EFE\u8F0A\uFFFD".split("");
      for (j = 0; j != D[184].length; ++j) if (D[184][j].charCodeAt(0) !== 65533) {
        e[D[184][j]] = 47104 + j;
        d[47104 + j] = D[184][j];
      }
      D[185] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8F9F\u8FB2\u904B\u904A\u9053\u9042\u9054\u903C\u9055\u9050\u9047\u904F\u904E\u904D\u9051\u903E\u9041\u9112\u9117\u916C\u916A\u9169\u91C9\u9237\u9257\u9238\u923D\u9240\u923E\u925B\u924B\u9264\u9251\u9234\u9249\u924D\u9245\u9239\u923F\u925A\u9598\u9698\u9694\u9695\u96CD\u96CB\u96C9\u96CA\u96F7\u96FB\u96F9\u96F6\u9756\u9774\u9776\u9810\u9811\u9813\u980A\u9812\u980C\u98FC\u98F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u98FD\u98FE\u99B3\u99B1\u99B4\u9AE1\u9CE9\u9E82\u9F0E\u9F13\u9F20\u50E7\u50EE\u50E5\u50D6\u50ED\u50DA\u50D5\u50CF\u50D1\u50F1\u50CE\u50E9\u5162\u51F3\u5283\u5282\u5331\u53AD\u55FE\u5600\u561B\u5617\u55FD\u5614\u5606\u5609\u560D\u560E\u55F7\u5616\u561F\u5608\u5610\u55F6\u5718\u5716\u5875\u587E\u5883\u5893\u588A\u5879\u5885\u587D\u58FD\u5925\u5922\u5924\u596A\u5969\u5AE1\u5AE6\u5AE9\u5AD7\u5AD6\u5AD8\u5AE3\u5B75\u5BDE\u5BE7\u5BE1\u5BE5\u5BE6\u5BE8\u5BE2\u5BE4\u5BDF\u5C0D\u5C62\u5D84\u5D87\u5E5B\u5E63\u5E55\u5E57\u5E54\u5ED3\u5ED6\u5F0A\u5F46\u5F70\u5FB9\u6147\uFFFD".split("");
      for (j = 0; j != D[185].length; ++j) if (D[185][j].charCodeAt(0) !== 65533) {
        e[D[185][j]] = 47360 + j;
        d[47360 + j] = D[185][j];
      }
      D[186] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u613F\u614B\u6177\u6162\u6163\u615F\u615A\u6158\u6175\u622A\u6487\u6458\u6454\u64A4\u6478\u645F\u647A\u6451\u6467\u6434\u646D\u647B\u6572\u65A1\u65D7\u65D6\u66A2\u66A8\u669D\u699C\u69A8\u6995\u69C1\u69AE\u69D3\u69CB\u699B\u69B7\u69BB\u69AB\u69B4\u69D0\u69CD\u69AD\u69CC\u69A6\u69C3\u69A3\u6B49\u6B4C\u6C33\u6F33\u6F14\u6EFE\u6F13\u6EF4\u6F29\u6F3E\u6F20\u6F2C\u6F0F\u6F02\u6F22\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6EFF\u6EEF\u6F06\u6F31\u6F38\u6F32\u6F23\u6F15\u6F2B\u6F2F\u6F88\u6F2A\u6EEC\u6F01\u6EF2\u6ECC\u6EF7\u7194\u7199\u717D\u718A\u7184\u7192\u723E\u7292\u7296\u7344\u7350\u7464\u7463\u746A\u7470\u746D\u7504\u7591\u7627\u760D\u760B\u7609\u7613\u76E1\u76E3\u7784\u777D\u777F\u7761\u78C1\u789F\u78A7\u78B3\u78A9\u78A3\u798E\u798F\u798D\u7A2E\u7A31\u7AAA\u7AA9\u7AED\u7AEF\u7BA1\u7B95\u7B8B\u7B75\u7B97\u7B9D\u7B94\u7B8F\u7BB8\u7B87\u7B84\u7CB9\u7CBD\u7CBE\u7DBB\u7DB0\u7D9C\u7DBD\u7DBE\u7DA0\u7DCA\u7DB4\u7DB2\u7DB1\u7DBA\u7DA2\u7DBF\u7DB5\u7DB8\u7DAD\u7DD2\u7DC7\u7DAC\uFFFD".split("");
      for (j = 0; j != D[186].length; ++j) if (D[186][j].charCodeAt(0) !== 65533) {
        e[D[186][j]] = 47616 + j;
        d[47616 + j] = D[186][j];
      }
      D[187] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7F70\u7FE0\u7FE1\u7FDF\u805E\u805A\u8087\u8150\u8180\u818F\u8188\u818A\u817F\u8182\u81E7\u81FA\u8207\u8214\u821E\u824B\u84C9\u84BF\u84C6\u84C4\u8499\u849E\u84B2\u849C\u84CB\u84B8\u84C0\u84D3\u8490\u84BC\u84D1\u84CA\u873F\u871C\u873B\u8722\u8725\u8734\u8718\u8755\u8737\u8729\u88F3\u8902\u88F4\u88F9\u88F8\u88FD\u88E8\u891A\u88EF\u8AA6\u8A8C\u8A9E\u8AA3\u8A8D\u8AA1\u8A93\u8AA4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8AAA\u8AA5\u8AA8\u8A98\u8A91\u8A9A\u8AA7\u8C6A\u8C8D\u8C8C\u8CD3\u8CD1\u8CD2\u8D6B\u8D99\u8D95\u8DFC\u8F14\u8F12\u8F15\u8F13\u8FA3\u9060\u9058\u905C\u9063\u9059\u905E\u9062\u905D\u905B\u9119\u9118\u911E\u9175\u9178\u9177\u9174\u9278\u9280\u9285\u9298\u9296\u927B\u9293\u929C\u92A8\u927C\u9291\u95A1\u95A8\u95A9\u95A3\u95A5\u95A4\u9699\u969C\u969B\u96CC\u96D2\u9700\u977C\u9785\u97F6\u9817\u9818\u98AF\u98B1\u9903\u9905\u990C\u9909\u99C1\u9AAF\u9AB0\u9AE6\u9B41\u9B42\u9CF4\u9CF6\u9CF3\u9EBC\u9F3B\u9F4A\u5104\u5100\u50FB\u50F5\u50F9\u5102\u5108\u5109\u5105\u51DC\uFFFD".split("");
      for (j = 0; j != D[187].length; ++j) if (D[187][j].charCodeAt(0) !== 65533) {
        e[D[187][j]] = 47872 + j;
        d[47872 + j] = D[187][j];
      }
      D[188] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5287\u5288\u5289\u528D\u528A\u52F0\u53B2\u562E\u563B\u5639\u5632\u563F\u5634\u5629\u5653\u564E\u5657\u5674\u5636\u562F\u5630\u5880\u589F\u589E\u58B3\u589C\u58AE\u58A9\u58A6\u596D\u5B09\u5AFB\u5B0B\u5AF5\u5B0C\u5B08\u5BEE\u5BEC\u5BE9\u5BEB\u5C64\u5C65\u5D9D\u5D94\u5E62\u5E5F\u5E61\u5EE2\u5EDA\u5EDF\u5EDD\u5EE3\u5EE0\u5F48\u5F71\u5FB7\u5FB5\u6176\u6167\u616E\u615D\u6155\u6182\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u617C\u6170\u616B\u617E\u61A7\u6190\u61AB\u618E\u61AC\u619A\u61A4\u6194\u61AE\u622E\u6469\u646F\u6479\u649E\u64B2\u6488\u6490\u64B0\u64A5\u6493\u6495\u64A9\u6492\u64AE\u64AD\u64AB\u649A\u64AC\u6499\u64A2\u64B3\u6575\u6577\u6578\u66AE\u66AB\u66B4\u66B1\u6A23\u6A1F\u69E8\u6A01\u6A1E\u6A19\u69FD\u6A21\u6A13\u6A0A\u69F3\u6A02\u6A05\u69ED\u6A11\u6B50\u6B4E\u6BA4\u6BC5\u6BC6\u6F3F\u6F7C\u6F84\u6F51\u6F66\u6F54\u6F86\u6F6D\u6F5B\u6F78\u6F6E\u6F8E\u6F7A\u6F70\u6F64\u6F97\u6F58\u6ED5\u6F6F\u6F60\u6F5F\u719F\u71AC\u71B1\u71A8\u7256\u729B\u734E\u7357\u7469\u748B\u7483\uFFFD".split("");
      for (j = 0; j != D[188].length; ++j) if (D[188][j].charCodeAt(0) !== 65533) {
        e[D[188][j]] = 48128 + j;
        d[48128 + j] = D[188][j];
      }
      D[189] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u747E\u7480\u757F\u7620\u7629\u761F\u7624\u7626\u7621\u7622\u769A\u76BA\u76E4\u778E\u7787\u778C\u7791\u778B\u78CB\u78C5\u78BA\u78CA\u78BE\u78D5\u78BC\u78D0\u7A3F\u7A3C\u7A40\u7A3D\u7A37\u7A3B\u7AAF\u7AAE\u7BAD\u7BB1\u7BC4\u7BB4\u7BC6\u7BC7\u7BC1\u7BA0\u7BCC\u7CCA\u7DE0\u7DF4\u7DEF\u7DFB\u7DD8\u7DEC\u7DDD\u7DE8\u7DE3\u7DDA\u7DDE\u7DE9\u7D9E\u7DD9\u7DF2\u7DF9\u7F75\u7F77\u7FAF\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7FE9\u8026\u819B\u819C\u819D\u81A0\u819A\u8198\u8517\u853D\u851A\u84EE\u852C\u852D\u8513\u8511\u8523\u8521\u8514\u84EC\u8525\u84FF\u8506\u8782\u8774\u8776\u8760\u8766\u8778\u8768\u8759\u8757\u874C\u8753\u885B\u885D\u8910\u8907\u8912\u8913\u8915\u890A\u8ABC\u8AD2\u8AC7\u8AC4\u8A95\u8ACB\u8AF8\u8AB2\u8AC9\u8AC2\u8ABF\u8AB0\u8AD6\u8ACD\u8AB6\u8AB9\u8ADB\u8C4C\u8C4E\u8C6C\u8CE0\u8CDE\u8CE6\u8CE4\u8CEC\u8CED\u8CE2\u8CE3\u8CDC\u8CEA\u8CE1\u8D6D\u8D9F\u8DA3\u8E2B\u8E10\u8E1D\u8E22\u8E0F\u8E29\u8E1F\u8E21\u8E1E\u8EBA\u8F1D\u8F1B\u8F1F\u8F29\u8F26\u8F2A\u8F1C\u8F1E\uFFFD".split("");
      for (j = 0; j != D[189].length; ++j) if (D[189][j].charCodeAt(0) !== 65533) {
        e[D[189][j]] = 48384 + j;
        d[48384 + j] = D[189][j];
      }
      D[190] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8F25\u9069\u906E\u9068\u906D\u9077\u9130\u912D\u9127\u9131\u9187\u9189\u918B\u9183\u92C5\u92BB\u92B7\u92EA\u92AC\u92E4\u92C1\u92B3\u92BC\u92D2\u92C7\u92F0\u92B2\u95AD\u95B1\u9704\u9706\u9707\u9709\u9760\u978D\u978B\u978F\u9821\u982B\u981C\u98B3\u990A\u9913\u9912\u9918\u99DD\u99D0\u99DF\u99DB\u99D1\u99D5\u99D2\u99D9\u9AB7\u9AEE\u9AEF\u9B27\u9B45\u9B44\u9B77\u9B6F\u9D06\u9D09\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9D03\u9EA9\u9EBE\u9ECE\u58A8\u9F52\u5112\u5118\u5114\u5110\u5115\u5180\u51AA\u51DD\u5291\u5293\u52F3\u5659\u566B\u5679\u5669\u5664\u5678\u566A\u5668\u5665\u5671\u566F\u566C\u5662\u5676\u58C1\u58BE\u58C7\u58C5\u596E\u5B1D\u5B34\u5B78\u5BF0\u5C0E\u5F4A\u61B2\u6191\u61A9\u618A\u61CD\u61B6\u61BE\u61CA\u61C8\u6230\u64C5\u64C1\u64CB\u64BB\u64BC\u64DA\u64C4\u64C7\u64C2\u64CD\u64BF\u64D2\u64D4\u64BE\u6574\u66C6\u66C9\u66B9\u66C4\u66C7\u66B8\u6A3D\u6A38\u6A3A\u6A59\u6A6B\u6A58\u6A39\u6A44\u6A62\u6A61\u6A4B\u6A47\u6A35\u6A5F\u6A48\u6B59\u6B77\u6C05\u6FC2\u6FB1\u6FA1\uFFFD".split("");
      for (j = 0; j != D[190].length; ++j) if (D[190][j].charCodeAt(0) !== 65533) {
        e[D[190][j]] = 48640 + j;
        d[48640 + j] = D[190][j];
      }
      D[191] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6FC3\u6FA4\u6FC1\u6FA7\u6FB3\u6FC0\u6FB9\u6FB6\u6FA6\u6FA0\u6FB4\u71BE\u71C9\u71D0\u71D2\u71C8\u71D5\u71B9\u71CE\u71D9\u71DC\u71C3\u71C4\u7368\u749C\u74A3\u7498\u749F\u749E\u74E2\u750C\u750D\u7634\u7638\u763A\u76E7\u76E5\u77A0\u779E\u779F\u77A5\u78E8\u78DA\u78EC\u78E7\u79A6\u7A4D\u7A4E\u7A46\u7A4C\u7A4B\u7ABA\u7BD9\u7C11\u7BC9\u7BE4\u7BDB\u7BE1\u7BE9\u7BE6\u7CD5\u7CD6\u7E0A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7E11\u7E08\u7E1B\u7E23\u7E1E\u7E1D\u7E09\u7E10\u7F79\u7FB2\u7FF0\u7FF1\u7FEE\u8028\u81B3\u81A9\u81A8\u81FB\u8208\u8258\u8259\u854A\u8559\u8548\u8568\u8569\u8543\u8549\u856D\u856A\u855E\u8783\u879F\u879E\u87A2\u878D\u8861\u892A\u8932\u8925\u892B\u8921\u89AA\u89A6\u8AE6\u8AFA\u8AEB\u8AF1\u8B00\u8ADC\u8AE7\u8AEE\u8AFE\u8B01\u8B02\u8AF7\u8AED\u8AF3\u8AF6\u8AFC\u8C6B\u8C6D\u8C93\u8CF4\u8E44\u8E31\u8E34\u8E42\u8E39\u8E35\u8F3B\u8F2F\u8F38\u8F33\u8FA8\u8FA6\u9075\u9074\u9078\u9072\u907C\u907A\u9134\u9192\u9320\u9336\u92F8\u9333\u932F\u9322\u92FC\u932B\u9304\u931A\uFFFD".split("");
      for (j = 0; j != D[191].length; ++j) if (D[191][j].charCodeAt(0) !== 65533) {
        e[D[191][j]] = 48896 + j;
        d[48896 + j] = D[191][j];
      }
      D[192] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9310\u9326\u9321\u9315\u932E\u9319\u95BB\u96A7\u96A8\u96AA\u96D5\u970E\u9711\u9716\u970D\u9713\u970F\u975B\u975C\u9766\u9798\u9830\u9838\u983B\u9837\u982D\u9839\u9824\u9910\u9928\u991E\u991B\u9921\u991A\u99ED\u99E2\u99F1\u9AB8\u9ABC\u9AFB\u9AED\u9B28\u9B91\u9D15\u9D23\u9D26\u9D28\u9D12\u9D1B\u9ED8\u9ED4\u9F8D\u9F9C\u512A\u511F\u5121\u5132\u52F5\u568E\u5680\u5690\u5685\u5687\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u568F\u58D5\u58D3\u58D1\u58CE\u5B30\u5B2A\u5B24\u5B7A\u5C37\u5C68\u5DBC\u5DBA\u5DBD\u5DB8\u5E6B\u5F4C\u5FBD\u61C9\u61C2\u61C7\u61E6\u61CB\u6232\u6234\u64CE\u64CA\u64D8\u64E0\u64F0\u64E6\u64EC\u64F1\u64E2\u64ED\u6582\u6583\u66D9\u66D6\u6A80\u6A94\u6A84\u6AA2\u6A9C\u6ADB\u6AA3\u6A7E\u6A97\u6A90\u6AA0\u6B5C\u6BAE\u6BDA\u6C08\u6FD8\u6FF1\u6FDF\u6FE0\u6FDB\u6FE4\u6FEB\u6FEF\u6F80\u6FEC\u6FE1\u6FE9\u6FD5\u6FEE\u6FF0\u71E7\u71DF\u71EE\u71E6\u71E5\u71ED\u71EC\u71F4\u71E0\u7235\u7246\u7370\u7372\u74A9\u74B0\u74A6\u74A8\u7646\u7642\u764C\u76EA\u77B3\u77AA\u77B0\u77AC\uFFFD".split("");
      for (j = 0; j != D[192].length; ++j) if (D[192][j].charCodeAt(0) !== 65533) {
        e[D[192][j]] = 49152 + j;
        d[49152 + j] = D[192][j];
      }
      D[193] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u77A7\u77AD\u77EF\u78F7\u78FA\u78F4\u78EF\u7901\u79A7\u79AA\u7A57\u7ABF\u7C07\u7C0D\u7BFE\u7BF7\u7C0C\u7BE0\u7CE0\u7CDC\u7CDE\u7CE2\u7CDF\u7CD9\u7CDD\u7E2E\u7E3E\u7E46\u7E37\u7E32\u7E43\u7E2B\u7E3D\u7E31\u7E45\u7E41\u7E34\u7E39\u7E48\u7E35\u7E3F\u7E2F\u7F44\u7FF3\u7FFC\u8071\u8072\u8070\u806F\u8073\u81C6\u81C3\u81BA\u81C2\u81C0\u81BF\u81BD\u81C9\u81BE\u81E8\u8209\u8271\u85AA\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8584\u857E\u859C\u8591\u8594\u85AF\u859B\u8587\u85A8\u858A\u8667\u87C0\u87D1\u87B3\u87D2\u87C6\u87AB\u87BB\u87BA\u87C8\u87CB\u893B\u8936\u8944\u8938\u893D\u89AC\u8B0E\u8B17\u8B19\u8B1B\u8B0A\u8B20\u8B1D\u8B04\u8B10\u8C41\u8C3F\u8C73\u8CFA\u8CFD\u8CFC\u8CF8\u8CFB\u8DA8\u8E49\u8E4B\u8E48\u8E4A\u8F44\u8F3E\u8F42\u8F45\u8F3F\u907F\u907D\u9084\u9081\u9082\u9080\u9139\u91A3\u919E\u919C\u934D\u9382\u9328\u9375\u934A\u9365\u934B\u9318\u937E\u936C\u935B\u9370\u935A\u9354\u95CA\u95CB\u95CC\u95C8\u95C6\u96B1\u96B8\u96D6\u971C\u971E\u97A0\u97D3\u9846\u98B6\u9935\u9A01\uFFFD".split("");
      for (j = 0; j != D[193].length; ++j) if (D[193][j].charCodeAt(0) !== 65533) {
        e[D[193][j]] = 49408 + j;
        d[49408 + j] = D[193][j];
      }
      D[194] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u99FF\u9BAE\u9BAB\u9BAA\u9BAD\u9D3B\u9D3F\u9E8B\u9ECF\u9EDE\u9EDC\u9EDD\u9EDB\u9F3E\u9F4B\u53E2\u5695\u56AE\u58D9\u58D8\u5B38\u5F5D\u61E3\u6233\u64F4\u64F2\u64FE\u6506\u64FA\u64FB\u64F7\u65B7\u66DC\u6726\u6AB3\u6AAC\u6AC3\u6ABB\u6AB8\u6AC2\u6AAE\u6AAF\u6B5F\u6B78\u6BAF\u7009\u700B\u6FFE\u7006\u6FFA\u7011\u700F\u71FB\u71FC\u71FE\u71F8\u7377\u7375\u74A7\u74BF\u7515\u7656\u7658\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7652\u77BD\u77BF\u77BB\u77BC\u790E\u79AE\u7A61\u7A62\u7A60\u7AC4\u7AC5\u7C2B\u7C27\u7C2A\u7C1E\u7C23\u7C21\u7CE7\u7E54\u7E55\u7E5E\u7E5A\u7E61\u7E52\u7E59\u7F48\u7FF9\u7FFB\u8077\u8076\u81CD\u81CF\u820A\u85CF\u85A9\u85CD\u85D0\u85C9\u85B0\u85BA\u85B9\u85A6\u87EF\u87EC\u87F2\u87E0\u8986\u89B2\u89F4\u8B28\u8B39\u8B2C\u8B2B\u8C50\u8D05\u8E59\u8E63\u8E66\u8E64\u8E5F\u8E55\u8EC0\u8F49\u8F4D\u9087\u9083\u9088\u91AB\u91AC\u91D0\u9394\u938A\u9396\u93A2\u93B3\u93AE\u93AC\u93B0\u9398\u939A\u9397\u95D4\u95D6\u95D0\u95D5\u96E2\u96DC\u96D9\u96DB\u96DE\u9724\u97A3\u97A6\uFFFD".split("");
      for (j = 0; j != D[194].length; ++j) if (D[194][j].charCodeAt(0) !== 65533) {
        e[D[194][j]] = 49664 + j;
        d[49664 + j] = D[194][j];
      }
      D[195] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u97AD\u97F9\u984D\u984F\u984C\u984E\u9853\u98BA\u993E\u993F\u993D\u992E\u99A5\u9A0E\u9AC1\u9B03\u9B06\u9B4F\u9B4E\u9B4D\u9BCA\u9BC9\u9BFD\u9BC8\u9BC0\u9D51\u9D5D\u9D60\u9EE0\u9F15\u9F2C\u5133\u56A5\u58DE\u58DF\u58E2\u5BF5\u9F90\u5EEC\u61F2\u61F7\u61F6\u61F5\u6500\u650F\u66E0\u66DD\u6AE5\u6ADD\u6ADA\u6AD3\u701B\u701F\u7028\u701A\u701D\u7015\u7018\u7206\u720D\u7258\u72A2\u7378\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u737A\u74BD\u74CA\u74E3\u7587\u7586\u765F\u7661\u77C7\u7919\u79B1\u7A6B\u7A69\u7C3E\u7C3F\u7C38\u7C3D\u7C37\u7C40\u7E6B\u7E6D\u7E79\u7E69\u7E6A\u7F85\u7E73\u7FB6\u7FB9\u7FB8\u81D8\u85E9\u85DD\u85EA\u85D5\u85E4\u85E5\u85F7\u87FB\u8805\u880D\u87F9\u87FE\u8960\u895F\u8956\u895E\u8B41\u8B5C\u8B58\u8B49\u8B5A\u8B4E\u8B4F\u8B46\u8B59\u8D08\u8D0A\u8E7C\u8E72\u8E87\u8E76\u8E6C\u8E7A\u8E74\u8F54\u8F4E\u8FAD\u908A\u908B\u91B1\u91AE\u93E1\u93D1\u93DF\u93C3\u93C8\u93DC\u93DD\u93D6\u93E2\u93CD\u93D8\u93E4\u93D7\u93E8\u95DC\u96B4\u96E3\u972A\u9727\u9761\u97DC\u97FB\u985E\uFFFD".split("");
      for (j = 0; j != D[195].length; ++j) if (D[195][j].charCodeAt(0) !== 65533) {
        e[D[195][j]] = 49920 + j;
        d[49920 + j] = D[195][j];
      }
      D[196] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9858\u985B\u98BC\u9945\u9949\u9A16\u9A19\u9B0D\u9BE8\u9BE7\u9BD6\u9BDB\u9D89\u9D61\u9D72\u9D6A\u9D6C\u9E92\u9E97\u9E93\u9EB4\u52F8\u56A8\u56B7\u56B6\u56B4\u56BC\u58E4\u5B40\u5B43\u5B7D\u5BF6\u5DC9\u61F8\u61FA\u6518\u6514\u6519\u66E6\u6727\u6AEC\u703E\u7030\u7032\u7210\u737B\u74CF\u7662\u7665\u7926\u792A\u792C\u792B\u7AC7\u7AF6\u7C4C\u7C43\u7C4D\u7CEF\u7CF0\u8FAE\u7E7D\u7E7C\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7E82\u7F4C\u8000\u81DA\u8266\u85FB\u85F9\u8611\u85FA\u8606\u860B\u8607\u860A\u8814\u8815\u8964\u89BA\u89F8\u8B70\u8B6C\u8B66\u8B6F\u8B5F\u8B6B\u8D0F\u8D0D\u8E89\u8E81\u8E85\u8E82\u91B4\u91CB\u9418\u9403\u93FD\u95E1\u9730\u98C4\u9952\u9951\u99A8\u9A2B\u9A30\u9A37\u9A35\u9C13\u9C0D\u9E79\u9EB5\u9EE8\u9F2F\u9F5F\u9F63\u9F61\u5137\u5138\u56C1\u56C0\u56C2\u5914\u5C6C\u5DCD\u61FC\u61FE\u651D\u651C\u6595\u66E9\u6AFB\u6B04\u6AFA\u6BB2\u704C\u721B\u72A7\u74D6\u74D4\u7669\u77D3\u7C50\u7E8F\u7E8C\u7FBC\u8617\u862D\u861A\u8823\u8822\u8821\u881F\u896A\u896C\u89BD\u8B74\uFFFD".split("");
      for (j = 0; j != D[196].length; ++j) if (D[196][j].charCodeAt(0) !== 65533) {
        e[D[196][j]] = 50176 + j;
        d[50176 + j] = D[196][j];
      }
      D[197] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8B77\u8B7D\u8D13\u8E8A\u8E8D\u8E8B\u8F5F\u8FAF\u91BA\u942E\u9433\u9435\u943A\u9438\u9432\u942B\u95E2\u9738\u9739\u9732\u97FF\u9867\u9865\u9957\u9A45\u9A43\u9A40\u9A3E\u9ACF\u9B54\u9B51\u9C2D\u9C25\u9DAF\u9DB4\u9DC2\u9DB8\u9E9D\u9EEF\u9F19\u9F5C\u9F66\u9F67\u513C\u513B\u56C8\u56CA\u56C9\u5B7F\u5DD4\u5DD2\u5F4E\u61FF\u6524\u6B0A\u6B61\u7051\u7058\u7380\u74E4\u758A\u766E\u766C\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u79B3\u7C60\u7C5F\u807E\u807D\u81DF\u8972\u896F\u89FC\u8B80\u8D16\u8D17\u8E91\u8E93\u8F61\u9148\u9444\u9451\u9452\u973D\u973E\u97C3\u97C1\u986B\u9955\u9A55\u9A4D\u9AD2\u9B1A\u9C49\u9C31\u9C3E\u9C3B\u9DD3\u9DD7\u9F34\u9F6C\u9F6A\u9F94\u56CC\u5DD6\u6200\u6523\u652B\u652A\u66EC\u6B10\u74DA\u7ACA\u7C64\u7C63\u7C65\u7E93\u7E96\u7E94\u81E2\u8638\u863F\u8831\u8B8A\u9090\u908F\u9463\u9460\u9464\u9768\u986F\u995C\u9A5A\u9A5B\u9A57\u9AD3\u9AD4\u9AD1\u9C54\u9C57\u9C56\u9DE5\u9E9F\u9EF4\u56D1\u58E9\u652C\u705E\u7671\u7672\u77D7\u7F50\u7F88\u8836\u8839\u8862\u8B93\u8B92\uFFFD".split("");
      for (j = 0; j != D[197].length; ++j) if (D[197][j].charCodeAt(0) !== 65533) {
        e[D[197][j]] = 50432 + j;
        d[50432 + j] = D[197][j];
      }
      D[198] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8B96\u8277\u8D1B\u91C0\u946A\u9742\u9748\u9744\u97C6\u9870\u9A5F\u9B22\u9B58\u9C5F\u9DF9\u9DFA\u9E7C\u9E7D\u9F07\u9F77\u9F72\u5EF3\u6B16\u7063\u7C6C\u7C6E\u883B\u89C0\u8EA1\u91C1\u9472\u9470\u9871\u995E\u9AD6\u9B23\u9ECC\u7064\u77DA\u8B9A\u9477\u97C9\u9A62\u9A65\u7E9C\u8B9C\u8EAA\u91C5\u947D\u947E\u947C\u9C77\u9C78\u9EF7\u8C54\u947F\u9E1A\u7228\u9A6A\u9B31\u9E1B\u9E1E\u7C72\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[198].length; ++j) if (D[198][j].charCodeAt(0) !== 65533) {
        e[D[198][j]] = 50688 + j;
        d[50688 + j] = D[198][j];
      }
      D[201] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u4E42\u4E5C\u51F5\u531A\u5382\u4E07\u4E0C\u4E47\u4E8D\u56D7\uFA0C\u5C6E\u5F73\u4E0F\u5187\u4E0E\u4E2E\u4E93\u4EC2\u4EC9\u4EC8\u5198\u52FC\u536C\u53B9\u5720\u5903\u592C\u5C10\u5DFF\u65E1\u6BB3\u6BCC\u6C14\u723F\u4E31\u4E3C\u4EE8\u4EDC\u4EE9\u4EE1\u4EDD\u4EDA\u520C\u531C\u534C\u5722\u5723\u5917\u592F\u5B81\u5B84\u5C12\u5C3B\u5C74\u5C73\u5E04\u5E80\u5E82\u5FC9\u6209\u6250\u6C15\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6C36\u6C43\u6C3F\u6C3B\u72AE\u72B0\u738A\u79B8\u808A\u961E\u4F0E\u4F18\u4F2C\u4EF5\u4F14\u4EF1\u4F00\u4EF7\u4F08\u4F1D\u4F02\u4F05\u4F22\u4F13\u4F04\u4EF4\u4F12\u51B1\u5213\u5209\u5210\u52A6\u5322\u531F\u534D\u538A\u5407\u56E1\u56DF\u572E\u572A\u5734\u593C\u5980\u597C\u5985\u597B\u597E\u5977\u597F\u5B56\u5C15\u5C25\u5C7C\u5C7A\u5C7B\u5C7E\u5DDF\u5E75\u5E84\u5F02\u5F1A\u5F74\u5FD5\u5FD4\u5FCF\u625C\u625E\u6264\u6261\u6266\u6262\u6259\u6260\u625A\u6265\u65EF\u65EE\u673E\u6739\u6738\u673B\u673A\u673F\u673C\u6733\u6C18\u6C46\u6C52\u6C5C\u6C4F\u6C4A\u6C54\u6C4B\uFFFD".split("");
      for (j = 0; j != D[201].length; ++j) if (D[201][j].charCodeAt(0) !== 65533) {
        e[D[201][j]] = 51456 + j;
        d[51456 + j] = D[201][j];
      }
      D[202] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6C4C\u7071\u725E\u72B4\u72B5\u738E\u752A\u767F\u7A75\u7F51\u8278\u827C\u8280\u827D\u827F\u864D\u897E\u9099\u9097\u9098\u909B\u9094\u9622\u9624\u9620\u9623\u4F56\u4F3B\u4F62\u4F49\u4F53\u4F64\u4F3E\u4F67\u4F52\u4F5F\u4F41\u4F58\u4F2D\u4F33\u4F3F\u4F61\u518F\u51B9\u521C\u521E\u5221\u52AD\u52AE\u5309\u5363\u5372\u538E\u538F\u5430\u5437\u542A\u5454\u5445\u5419\u541C\u5425\u5418\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u543D\u544F\u5441\u5428\u5424\u5447\u56EE\u56E7\u56E5\u5741\u5745\u574C\u5749\u574B\u5752\u5906\u5940\u59A6\u5998\u59A0\u5997\u598E\u59A2\u5990\u598F\u59A7\u59A1\u5B8E\u5B92\u5C28\u5C2A\u5C8D\u5C8F\u5C88\u5C8B\u5C89\u5C92\u5C8A\u5C86\u5C93\u5C95\u5DE0\u5E0A\u5E0E\u5E8B\u5E89\u5E8C\u5E88\u5E8D\u5F05\u5F1D\u5F78\u5F76\u5FD2\u5FD1\u5FD0\u5FED\u5FE8\u5FEE\u5FF3\u5FE1\u5FE4\u5FE3\u5FFA\u5FEF\u5FF7\u5FFB\u6000\u5FF4\u623A\u6283\u628C\u628E\u628F\u6294\u6287\u6271\u627B\u627A\u6270\u6281\u6288\u6277\u627D\u6272\u6274\u6537\u65F0\u65F4\u65F3\u65F2\u65F5\u6745\u6747\uFFFD".split("");
      for (j = 0; j != D[202].length; ++j) if (D[202][j].charCodeAt(0) !== 65533) {
        e[D[202][j]] = 51712 + j;
        d[51712 + j] = D[202][j];
      }
      D[203] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6759\u6755\u674C\u6748\u675D\u674D\u675A\u674B\u6BD0\u6C19\u6C1A\u6C78\u6C67\u6C6B\u6C84\u6C8B\u6C8F\u6C71\u6C6F\u6C69\u6C9A\u6C6D\u6C87\u6C95\u6C9C\u6C66\u6C73\u6C65\u6C7B\u6C8E\u7074\u707A\u7263\u72BF\u72BD\u72C3\u72C6\u72C1\u72BA\u72C5\u7395\u7397\u7393\u7394\u7392\u753A\u7539\u7594\u7595\u7681\u793D\u8034\u8095\u8099\u8090\u8092\u809C\u8290\u828F\u8285\u828E\u8291\u8293\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u828A\u8283\u8284\u8C78\u8FC9\u8FBF\u909F\u90A1\u90A5\u909E\u90A7\u90A0\u9630\u9628\u962F\u962D\u4E33\u4F98\u4F7C\u4F85\u4F7D\u4F80\u4F87\u4F76\u4F74\u4F89\u4F84\u4F77\u4F4C\u4F97\u4F6A\u4F9A\u4F79\u4F81\u4F78\u4F90\u4F9C\u4F94\u4F9E\u4F92\u4F82\u4F95\u4F6B\u4F6E\u519E\u51BC\u51BE\u5235\u5232\u5233\u5246\u5231\u52BC\u530A\u530B\u533C\u5392\u5394\u5487\u547F\u5481\u5491\u5482\u5488\u546B\u547A\u547E\u5465\u546C\u5474\u5466\u548D\u546F\u5461\u5460\u5498\u5463\u5467\u5464\u56F7\u56F9\u576F\u5772\u576D\u576B\u5771\u5770\u5776\u5780\u5775\u577B\u5773\u5774\u5762\uFFFD".split("");
      for (j = 0; j != D[203].length; ++j) if (D[203][j].charCodeAt(0) !== 65533) {
        e[D[203][j]] = 51968 + j;
        d[51968 + j] = D[203][j];
      }
      D[204] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5768\u577D\u590C\u5945\u59B5\u59BA\u59CF\u59CE\u59B2\u59CC\u59C1\u59B6\u59BC\u59C3\u59D6\u59B1\u59BD\u59C0\u59C8\u59B4\u59C7\u5B62\u5B65\u5B93\u5B95\u5C44\u5C47\u5CAE\u5CA4\u5CA0\u5CB5\u5CAF\u5CA8\u5CAC\u5C9F\u5CA3\u5CAD\u5CA2\u5CAA\u5CA7\u5C9D\u5CA5\u5CB6\u5CB0\u5CA6\u5E17\u5E14\u5E19\u5F28\u5F22\u5F23\u5F24\u5F54\u5F82\u5F7E\u5F7D\u5FDE\u5FE5\u602D\u6026\u6019\u6032\u600B\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6034\u600A\u6017\u6033\u601A\u601E\u602C\u6022\u600D\u6010\u602E\u6013\u6011\u600C\u6009\u601C\u6214\u623D\u62AD\u62B4\u62D1\u62BE\u62AA\u62B6\u62CA\u62AE\u62B3\u62AF\u62BB\u62A9\u62B0\u62B8\u653D\u65A8\u65BB\u6609\u65FC\u6604\u6612\u6608\u65FB\u6603\u660B\u660D\u6605\u65FD\u6611\u6610\u66F6\u670A\u6785\u676C\u678E\u6792\u6776\u677B\u6798\u6786\u6784\u6774\u678D\u678C\u677A\u679F\u6791\u6799\u6783\u677D\u6781\u6778\u6779\u6794\u6B25\u6B80\u6B7E\u6BDE\u6C1D\u6C93\u6CEC\u6CEB\u6CEE\u6CD9\u6CB6\u6CD4\u6CAD\u6CE7\u6CB7\u6CD0\u6CC2\u6CBA\u6CC3\u6CC6\u6CED\u6CF2\uFFFD".split("");
      for (j = 0; j != D[204].length; ++j) if (D[204][j].charCodeAt(0) !== 65533) {
        e[D[204][j]] = 52224 + j;
        d[52224 + j] = D[204][j];
      }
      D[205] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6CD2\u6CDD\u6CB4\u6C8A\u6C9D\u6C80\u6CDE\u6CC0\u6D30\u6CCD\u6CC7\u6CB0\u6CF9\u6CCF\u6CE9\u6CD1\u7094\u7098\u7085\u7093\u7086\u7084\u7091\u7096\u7082\u709A\u7083\u726A\u72D6\u72CB\u72D8\u72C9\u72DC\u72D2\u72D4\u72DA\u72CC\u72D1\u73A4\u73A1\u73AD\u73A6\u73A2\u73A0\u73AC\u739D\u74DD\u74E8\u753F\u7540\u753E\u758C\u7598\u76AF\u76F3\u76F1\u76F0\u76F5\u77F8\u77FC\u77F9\u77FB\u77FA\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u77F7\u7942\u793F\u79C5\u7A78\u7A7B\u7AFB\u7C75\u7CFD\u8035\u808F\u80AE\u80A3\u80B8\u80B5\u80AD\u8220\u82A0\u82C0\u82AB\u829A\u8298\u829B\u82B5\u82A7\u82AE\u82BC\u829E\u82BA\u82B4\u82A8\u82A1\u82A9\u82C2\u82A4\u82C3\u82B6\u82A2\u8670\u866F\u866D\u866E\u8C56\u8FD2\u8FCB\u8FD3\u8FCD\u8FD6\u8FD5\u8FD7\u90B2\u90B4\u90AF\u90B3\u90B0\u9639\u963D\u963C\u963A\u9643\u4FCD\u4FC5\u4FD3\u4FB2\u4FC9\u4FCB\u4FC1\u4FD4\u4FDC\u4FD9\u4FBB\u4FB3\u4FDB\u4FC7\u4FD6\u4FBA\u4FC0\u4FB9\u4FEC\u5244\u5249\u52C0\u52C2\u533D\u537C\u5397\u5396\u5399\u5398\u54BA\u54A1\u54AD\u54A5\u54CF\uFFFD".split("");
      for (j = 0; j != D[205].length; ++j) if (D[205][j].charCodeAt(0) !== 65533) {
        e[D[205][j]] = 52480 + j;
        d[52480 + j] = D[205][j];
      }
      D[206] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u54C3\u830D\u54B7\u54AE\u54D6\u54B6\u54C5\u54C6\u54A0\u5470\u54BC\u54A2\u54BE\u5472\u54DE\u54B0\u57B5\u579E\u579F\u57A4\u578C\u5797\u579D\u579B\u5794\u5798\u578F\u5799\u57A5\u579A\u5795\u58F4\u590D\u5953\u59E1\u59DE\u59EE\u5A00\u59F1\u59DD\u59FA\u59FD\u59FC\u59F6\u59E4\u59F2\u59F7\u59DB\u59E9\u59F3\u59F5\u59E0\u59FE\u59F4\u59ED\u5BA8\u5C4C\u5CD0\u5CD8\u5CCC\u5CD7\u5CCB\u5CDB\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5CDE\u5CDA\u5CC9\u5CC7\u5CCA\u5CD6\u5CD3\u5CD4\u5CCF\u5CC8\u5CC6\u5CCE\u5CDF\u5CF8\u5DF9\u5E21\u5E22\u5E23\u5E20\u5E24\u5EB0\u5EA4\u5EA2\u5E9B\u5EA3\u5EA5\u5F07\u5F2E\u5F56\u5F86\u6037\u6039\u6054\u6072\u605E\u6045\u6053\u6047\u6049\u605B\u604C\u6040\u6042\u605F\u6024\u6044\u6058\u6066\u606E\u6242\u6243\u62CF\u630D\u630B\u62F5\u630E\u6303\u62EB\u62F9\u630F\u630C\u62F8\u62F6\u6300\u6313\u6314\u62FA\u6315\u62FB\u62F0\u6541\u6543\u65AA\u65BF\u6636\u6621\u6632\u6635\u661C\u6626\u6622\u6633\u662B\u663A\u661D\u6634\u6639\u662E\u670F\u6710\u67C1\u67F2\u67C8\u67BA\uFFFD".split("");
      for (j = 0; j != D[206].length; ++j) if (D[206][j].charCodeAt(0) !== 65533) {
        e[D[206][j]] = 52736 + j;
        d[52736 + j] = D[206][j];
      }
      D[207] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u67DC\u67BB\u67F8\u67D8\u67C0\u67B7\u67C5\u67EB\u67E4\u67DF\u67B5\u67CD\u67B3\u67F7\u67F6\u67EE\u67E3\u67C2\u67B9\u67CE\u67E7\u67F0\u67B2\u67FC\u67C6\u67ED\u67CC\u67AE\u67E6\u67DB\u67FA\u67C9\u67CA\u67C3\u67EA\u67CB\u6B28\u6B82\u6B84\u6BB6\u6BD6\u6BD8\u6BE0\u6C20\u6C21\u6D28\u6D34\u6D2D\u6D1F\u6D3C\u6D3F\u6D12\u6D0A\u6CDA\u6D33\u6D04\u6D19\u6D3A\u6D1A\u6D11\u6D00\u6D1D\u6D42\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6D01\u6D18\u6D37\u6D03\u6D0F\u6D40\u6D07\u6D20\u6D2C\u6D08\u6D22\u6D09\u6D10\u70B7\u709F\u70BE\u70B1\u70B0\u70A1\u70B4\u70B5\u70A9\u7241\u7249\u724A\u726C\u7270\u7273\u726E\u72CA\u72E4\u72E8\u72EB\u72DF\u72EA\u72E6\u72E3\u7385\u73CC\u73C2\u73C8\u73C5\u73B9\u73B6\u73B5\u73B4\u73EB\u73BF\u73C7\u73BE\u73C3\u73C6\u73B8\u73CB\u74EC\u74EE\u752E\u7547\u7548\u75A7\u75AA\u7679\u76C4\u7708\u7703\u7704\u7705\u770A\u76F7\u76FB\u76FA\u77E7\u77E8\u7806\u7811\u7812\u7805\u7810\u780F\u780E\u7809\u7803\u7813\u794A\u794C\u794B\u7945\u7944\u79D5\u79CD\u79CF\u79D6\u79CE\u7A80\uFFFD".split("");
      for (j = 0; j != D[207].length; ++j) if (D[207][j].charCodeAt(0) !== 65533) {
        e[D[207][j]] = 52992 + j;
        d[52992 + j] = D[207][j];
      }
      D[208] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7A7E\u7AD1\u7B00\u7B01\u7C7A\u7C78\u7C79\u7C7F\u7C80\u7C81\u7D03\u7D08\u7D01\u7F58\u7F91\u7F8D\u7FBE\u8007\u800E\u800F\u8014\u8037\u80D8\u80C7\u80E0\u80D1\u80C8\u80C2\u80D0\u80C5\u80E3\u80D9\u80DC\u80CA\u80D5\u80C9\u80CF\u80D7\u80E6\u80CD\u81FF\u8221\u8294\u82D9\u82FE\u82F9\u8307\u82E8\u8300\u82D5\u833A\u82EB\u82D6\u82F4\u82EC\u82E1\u82F2\u82F5\u830C\u82FB\u82F6\u82F0\u82EA\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u82E4\u82E0\u82FA\u82F3\u82ED\u8677\u8674\u867C\u8673\u8841\u884E\u8867\u886A\u8869\u89D3\u8A04\u8A07\u8D72\u8FE3\u8FE1\u8FEE\u8FE0\u90F1\u90BD\u90BF\u90D5\u90C5\u90BE\u90C7\u90CB\u90C8\u91D4\u91D3\u9654\u964F\u9651\u9653\u964A\u964E\u501E\u5005\u5007\u5013\u5022\u5030\u501B\u4FF5\u4FF4\u5033\u5037\u502C\u4FF6\u4FF7\u5017\u501C\u5020\u5027\u5035\u502F\u5031\u500E\u515A\u5194\u5193\u51CA\u51C4\u51C5\u51C8\u51CE\u5261\u525A\u5252\u525E\u525F\u5255\u5262\u52CD\u530E\u539E\u5526\u54E2\u5517\u5512\u54E7\u54F3\u54E4\u551A\u54FF\u5504\u5508\u54EB\u5511\u5505\u54F1\uFFFD".split("");
      for (j = 0; j != D[208].length; ++j) if (D[208][j].charCodeAt(0) !== 65533) {
        e[D[208][j]] = 53248 + j;
        d[53248 + j] = D[208][j];
      }
      D[209] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u550A\u54FB\u54F7\u54F8\u54E0\u550E\u5503\u550B\u5701\u5702\u57CC\u5832\u57D5\u57D2\u57BA\u57C6\u57BD\u57BC\u57B8\u57B6\u57BF\u57C7\u57D0\u57B9\u57C1\u590E\u594A\u5A19\u5A16\u5A2D\u5A2E\u5A15\u5A0F\u5A17\u5A0A\u5A1E\u5A33\u5B6C\u5BA7\u5BAD\u5BAC\u5C03\u5C56\u5C54\u5CEC\u5CFF\u5CEE\u5CF1\u5CF7\u5D00\u5CF9\u5E29\u5E28\u5EA8\u5EAE\u5EAA\u5EAC\u5F33\u5F30\u5F67\u605D\u605A\u6067\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6041\u60A2\u6088\u6080\u6092\u6081\u609D\u6083\u6095\u609B\u6097\u6087\u609C\u608E\u6219\u6246\u62F2\u6310\u6356\u632C\u6344\u6345\u6336\u6343\u63E4\u6339\u634B\u634A\u633C\u6329\u6341\u6334\u6358\u6354\u6359\u632D\u6347\u6333\u635A\u6351\u6338\u6357\u6340\u6348\u654A\u6546\u65C6\u65C3\u65C4\u65C2\u664A\u665F\u6647\u6651\u6712\u6713\u681F\u681A\u6849\u6832\u6833\u683B\u684B\u684F\u6816\u6831\u681C\u6835\u682B\u682D\u682F\u684E\u6844\u6834\u681D\u6812\u6814\u6826\u6828\u682E\u684D\u683A\u6825\u6820\u6B2C\u6B2F\u6B2D\u6B31\u6B34\u6B6D\u8082\u6B88\u6BE6\u6BE4\uFFFD".split("");
      for (j = 0; j != D[209].length; ++j) if (D[209][j].charCodeAt(0) !== 65533) {
        e[D[209][j]] = 53504 + j;
        d[53504 + j] = D[209][j];
      }
      D[210] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6BE8\u6BE3\u6BE2\u6BE7\u6C25\u6D7A\u6D63\u6D64\u6D76\u6D0D\u6D61\u6D92\u6D58\u6D62\u6D6D\u6D6F\u6D91\u6D8D\u6DEF\u6D7F\u6D86\u6D5E\u6D67\u6D60\u6D97\u6D70\u6D7C\u6D5F\u6D82\u6D98\u6D2F\u6D68\u6D8B\u6D7E\u6D80\u6D84\u6D16\u6D83\u6D7B\u6D7D\u6D75\u6D90\u70DC\u70D3\u70D1\u70DD\u70CB\u7F39\u70E2\u70D7\u70D2\u70DE\u70E0\u70D4\u70CD\u70C5\u70C6\u70C7\u70DA\u70CE\u70E1\u7242\u7278\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7277\u7276\u7300\u72FA\u72F4\u72FE\u72F6\u72F3\u72FB\u7301\u73D3\u73D9\u73E5\u73D6\u73BC\u73E7\u73E3\u73E9\u73DC\u73D2\u73DB\u73D4\u73DD\u73DA\u73D7\u73D8\u73E8\u74DE\u74DF\u74F4\u74F5\u7521\u755B\u755F\u75B0\u75C1\u75BB\u75C4\u75C0\u75BF\u75B6\u75BA\u768A\u76C9\u771D\u771B\u7710\u7713\u7712\u7723\u7711\u7715\u7719\u771A\u7722\u7727\u7823\u782C\u7822\u7835\u782F\u7828\u782E\u782B\u7821\u7829\u7833\u782A\u7831\u7954\u795B\u794F\u795C\u7953\u7952\u7951\u79EB\u79EC\u79E0\u79EE\u79ED\u79EA\u79DC\u79DE\u79DD\u7A86\u7A89\u7A85\u7A8B\u7A8C\u7A8A\u7A87\u7AD8\u7B10\uFFFD".split("");
      for (j = 0; j != D[210].length; ++j) if (D[210][j].charCodeAt(0) !== 65533) {
        e[D[210][j]] = 53760 + j;
        d[53760 + j] = D[210][j];
      }
      D[211] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7B04\u7B13\u7B05\u7B0F\u7B08\u7B0A\u7B0E\u7B09\u7B12\u7C84\u7C91\u7C8A\u7C8C\u7C88\u7C8D\u7C85\u7D1E\u7D1D\u7D11\u7D0E\u7D18\u7D16\u7D13\u7D1F\u7D12\u7D0F\u7D0C\u7F5C\u7F61\u7F5E\u7F60\u7F5D\u7F5B\u7F96\u7F92\u7FC3\u7FC2\u7FC0\u8016\u803E\u8039\u80FA\u80F2\u80F9\u80F5\u8101\u80FB\u8100\u8201\u822F\u8225\u8333\u832D\u8344\u8319\u8351\u8325\u8356\u833F\u8341\u8326\u831C\u8322\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8342\u834E\u831B\u832A\u8308\u833C\u834D\u8316\u8324\u8320\u8337\u832F\u8329\u8347\u8345\u834C\u8353\u831E\u832C\u834B\u8327\u8348\u8653\u8652\u86A2\u86A8\u8696\u868D\u8691\u869E\u8687\u8697\u8686\u868B\u869A\u8685\u86A5\u8699\u86A1\u86A7\u8695\u8698\u868E\u869D\u8690\u8694\u8843\u8844\u886D\u8875\u8876\u8872\u8880\u8871\u887F\u886F\u8883\u887E\u8874\u887C\u8A12\u8C47\u8C57\u8C7B\u8CA4\u8CA3\u8D76\u8D78\u8DB5\u8DB7\u8DB6\u8ED1\u8ED3\u8FFE\u8FF5\u9002\u8FFF\u8FFB\u9004\u8FFC\u8FF6\u90D6\u90E0\u90D9\u90DA\u90E3\u90DF\u90E5\u90D8\u90DB\u90D7\u90DC\u90E4\u9150\uFFFD".split("");
      for (j = 0; j != D[211].length; ++j) if (D[211][j].charCodeAt(0) !== 65533) {
        e[D[211][j]] = 54016 + j;
        d[54016 + j] = D[211][j];
      }
      D[212] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u914E\u914F\u91D5\u91E2\u91DA\u965C\u965F\u96BC\u98E3\u9ADF\u9B2F\u4E7F\u5070\u506A\u5061\u505E\u5060\u5053\u504B\u505D\u5072\u5048\u504D\u5041\u505B\u504A\u5062\u5015\u5045\u505F\u5069\u506B\u5063\u5064\u5046\u5040\u506E\u5073\u5057\u5051\u51D0\u526B\u526D\u526C\u526E\u52D6\u52D3\u532D\u539C\u5575\u5576\u553C\u554D\u5550\u5534\u552A\u5551\u5562\u5536\u5535\u5530\u5552\u5545\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u550C\u5532\u5565\u554E\u5539\u5548\u552D\u553B\u5540\u554B\u570A\u5707\u57FB\u5814\u57E2\u57F6\u57DC\u57F4\u5800\u57ED\u57FD\u5808\u57F8\u580B\u57F3\u57CF\u5807\u57EE\u57E3\u57F2\u57E5\u57EC\u57E1\u580E\u57FC\u5810\u57E7\u5801\u580C\u57F1\u57E9\u57F0\u580D\u5804\u595C\u5A60\u5A58\u5A55\u5A67\u5A5E\u5A38\u5A35\u5A6D\u5A50\u5A5F\u5A65\u5A6C\u5A53\u5A64\u5A57\u5A43\u5A5D\u5A52\u5A44\u5A5B\u5A48\u5A8E\u5A3E\u5A4D\u5A39\u5A4C\u5A70\u5A69\u5A47\u5A51\u5A56\u5A42\u5A5C\u5B72\u5B6E\u5BC1\u5BC0\u5C59\u5D1E\u5D0B\u5D1D\u5D1A\u5D20\u5D0C\u5D28\u5D0D\u5D26\u5D25\u5D0F\uFFFD".split("");
      for (j = 0; j != D[212].length; ++j) if (D[212][j].charCodeAt(0) !== 65533) {
        e[D[212][j]] = 54272 + j;
        d[54272 + j] = D[212][j];
      }
      D[213] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5D30\u5D12\u5D23\u5D1F\u5D2E\u5E3E\u5E34\u5EB1\u5EB4\u5EB9\u5EB2\u5EB3\u5F36\u5F38\u5F9B\u5F96\u5F9F\u608A\u6090\u6086\u60BE\u60B0\u60BA\u60D3\u60D4\u60CF\u60E4\u60D9\u60DD\u60C8\u60B1\u60DB\u60B7\u60CA\u60BF\u60C3\u60CD\u60C0\u6332\u6365\u638A\u6382\u637D\u63BD\u639E\u63AD\u639D\u6397\u63AB\u638E\u636F\u6387\u6390\u636E\u63AF\u6375\u639C\u636D\u63AE\u637C\u63A4\u633B\u639F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6378\u6385\u6381\u6391\u638D\u6370\u6553\u65CD\u6665\u6661\u665B\u6659\u665C\u6662\u6718\u6879\u6887\u6890\u689C\u686D\u686E\u68AE\u68AB\u6956\u686F\u68A3\u68AC\u68A9\u6875\u6874\u68B2\u688F\u6877\u6892\u687C\u686B\u6872\u68AA\u6880\u6871\u687E\u689B\u6896\u688B\u68A0\u6889\u68A4\u6878\u687B\u6891\u688C\u688A\u687D\u6B36\u6B33\u6B37\u6B38\u6B91\u6B8F\u6B8D\u6B8E\u6B8C\u6C2A\u6DC0\u6DAB\u6DB4\u6DB3\u6E74\u6DAC\u6DE9\u6DE2\u6DB7\u6DF6\u6DD4\u6E00\u6DC8\u6DE0\u6DDF\u6DD6\u6DBE\u6DE5\u6DDC\u6DDD\u6DDB\u6DF4\u6DCA\u6DBD\u6DED\u6DF0\u6DBA\u6DD5\u6DC2\u6DCF\u6DC9\uFFFD".split("");
      for (j = 0; j != D[213].length; ++j) if (D[213][j].charCodeAt(0) !== 65533) {
        e[D[213][j]] = 54528 + j;
        d[54528 + j] = D[213][j];
      }
      D[214] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6DD0\u6DF2\u6DD3\u6DFD\u6DD7\u6DCD\u6DE3\u6DBB\u70FA\u710D\u70F7\u7117\u70F4\u710C\u70F0\u7104\u70F3\u7110\u70FC\u70FF\u7106\u7113\u7100\u70F8\u70F6\u710B\u7102\u710E\u727E\u727B\u727C\u727F\u731D\u7317\u7307\u7311\u7318\u730A\u7308\u72FF\u730F\u731E\u7388\u73F6\u73F8\u73F5\u7404\u7401\u73FD\u7407\u7400\u73FA\u73FC\u73FF\u740C\u740B\u73F4\u7408\u7564\u7563\u75CE\u75D2\u75CF\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u75CB\u75CC\u75D1\u75D0\u768F\u7689\u76D3\u7739\u772F\u772D\u7731\u7732\u7734\u7733\u773D\u7725\u773B\u7735\u7848\u7852\u7849\u784D\u784A\u784C\u7826\u7845\u7850\u7964\u7967\u7969\u796A\u7963\u796B\u7961\u79BB\u79FA\u79F8\u79F6\u79F7\u7A8F\u7A94\u7A90\u7B35\u7B47\u7B34\u7B25\u7B30\u7B22\u7B24\u7B33\u7B18\u7B2A\u7B1D\u7B31\u7B2B\u7B2D\u7B2F\u7B32\u7B38\u7B1A\u7B23\u7C94\u7C98\u7C96\u7CA3\u7D35\u7D3D\u7D38\u7D36\u7D3A\u7D45\u7D2C\u7D29\u7D41\u7D47\u7D3E\u7D3F\u7D4A\u7D3B\u7D28\u7F63\u7F95\u7F9C\u7F9D\u7F9B\u7FCA\u7FCB\u7FCD\u7FD0\u7FD1\u7FC7\u7FCF\u7FC9\u801F\uFFFD".split("");
      for (j = 0; j != D[214].length; ++j) if (D[214][j].charCodeAt(0) !== 65533) {
        e[D[214][j]] = 54784 + j;
        d[54784 + j] = D[214][j];
      }
      D[215] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u801E\u801B\u8047\u8043\u8048\u8118\u8125\u8119\u811B\u812D\u811F\u812C\u811E\u8121\u8115\u8127\u811D\u8122\u8211\u8238\u8233\u823A\u8234\u8232\u8274\u8390\u83A3\u83A8\u838D\u837A\u8373\u83A4\u8374\u838F\u8381\u8395\u8399\u8375\u8394\u83A9\u837D\u8383\u838C\u839D\u839B\u83AA\u838B\u837E\u83A5\u83AF\u8388\u8397\u83B0\u837F\u83A6\u8387\u83AE\u8376\u839A\u8659\u8656\u86BF\u86B7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u86C2\u86C1\u86C5\u86BA\u86B0\u86C8\u86B9\u86B3\u86B8\u86CC\u86B4\u86BB\u86BC\u86C3\u86BD\u86BE\u8852\u8889\u8895\u88A8\u88A2\u88AA\u889A\u8891\u88A1\u889F\u8898\u88A7\u8899\u889B\u8897\u88A4\u88AC\u888C\u8893\u888E\u8982\u89D6\u89D9\u89D5\u8A30\u8A27\u8A2C\u8A1E\u8C39\u8C3B\u8C5C\u8C5D\u8C7D\u8CA5\u8D7D\u8D7B\u8D79\u8DBC\u8DC2\u8DB9\u8DBF\u8DC1\u8ED8\u8EDE\u8EDD\u8EDC\u8ED7\u8EE0\u8EE1\u9024\u900B\u9011\u901C\u900C\u9021\u90EF\u90EA\u90F0\u90F4\u90F2\u90F3\u90D4\u90EB\u90EC\u90E9\u9156\u9158\u915A\u9153\u9155\u91EC\u91F4\u91F1\u91F3\u91F8\u91E4\u91F9\u91EA\uFFFD".split("");
      for (j = 0; j != D[215].length; ++j) if (D[215][j].charCodeAt(0) !== 65533) {
        e[D[215][j]] = 55040 + j;
        d[55040 + j] = D[215][j];
      }
      D[216] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u91EB\u91F7\u91E8\u91EE\u957A\u9586\u9588\u967C\u966D\u966B\u9671\u966F\u96BF\u976A\u9804\u98E5\u9997\u509B\u5095\u5094\u509E\u508B\u50A3\u5083\u508C\u508E\u509D\u5068\u509C\u5092\u5082\u5087\u515F\u51D4\u5312\u5311\u53A4\u53A7\u5591\u55A8\u55A5\u55AD\u5577\u5645\u55A2\u5593\u5588\u558F\u55B5\u5581\u55A3\u5592\u55A4\u557D\u558C\u55A6\u557F\u5595\u55A1\u558E\u570C\u5829\u5837\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5819\u581E\u5827\u5823\u5828\u57F5\u5848\u5825\u581C\u581B\u5833\u583F\u5836\u582E\u5839\u5838\u582D\u582C\u583B\u5961\u5AAF\u5A94\u5A9F\u5A7A\u5AA2\u5A9E\u5A78\u5AA6\u5A7C\u5AA5\u5AAC\u5A95\u5AAE\u5A37\u5A84\u5A8A\u5A97\u5A83\u5A8B\u5AA9\u5A7B\u5A7D\u5A8C\u5A9C\u5A8F\u5A93\u5A9D\u5BEA\u5BCD\u5BCB\u5BD4\u5BD1\u5BCA\u5BCE\u5C0C\u5C30\u5D37\u5D43\u5D6B\u5D41\u5D4B\u5D3F\u5D35\u5D51\u5D4E\u5D55\u5D33\u5D3A\u5D52\u5D3D\u5D31\u5D59\u5D42\u5D39\u5D49\u5D38\u5D3C\u5D32\u5D36\u5D40\u5D45\u5E44\u5E41\u5F58\u5FA6\u5FA5\u5FAB\u60C9\u60B9\u60CC\u60E2\u60CE\u60C4\u6114\uFFFD".split("");
      for (j = 0; j != D[216].length; ++j) if (D[216][j].charCodeAt(0) !== 65533) {
        e[D[216][j]] = 55296 + j;
        d[55296 + j] = D[216][j];
      }
      D[217] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u60F2\u610A\u6116\u6105\u60F5\u6113\u60F8\u60FC\u60FE\u60C1\u6103\u6118\u611D\u6110\u60FF\u6104\u610B\u624A\u6394\u63B1\u63B0\u63CE\u63E5\u63E8\u63EF\u63C3\u649D\u63F3\u63CA\u63E0\u63F6\u63D5\u63F2\u63F5\u6461\u63DF\u63BE\u63DD\u63DC\u63C4\u63D8\u63D3\u63C2\u63C7\u63CC\u63CB\u63C8\u63F0\u63D7\u63D9\u6532\u6567\u656A\u6564\u655C\u6568\u6565\u658C\u659D\u659E\u65AE\u65D0\u65D2\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u667C\u666C\u667B\u6680\u6671\u6679\u666A\u6672\u6701\u690C\u68D3\u6904\u68DC\u692A\u68EC\u68EA\u68F1\u690F\u68D6\u68F7\u68EB\u68E4\u68F6\u6913\u6910\u68F3\u68E1\u6907\u68CC\u6908\u6970\u68B4\u6911\u68EF\u68C6\u6914\u68F8\u68D0\u68FD\u68FC\u68E8\u690B\u690A\u6917\u68CE\u68C8\u68DD\u68DE\u68E6\u68F4\u68D1\u6906\u68D4\u68E9\u6915\u6925\u68C7\u6B39\u6B3B\u6B3F\u6B3C\u6B94\u6B97\u6B99\u6B95\u6BBD\u6BF0\u6BF2\u6BF3\u6C30\u6DFC\u6E46\u6E47\u6E1F\u6E49\u6E88\u6E3C\u6E3D\u6E45\u6E62\u6E2B\u6E3F\u6E41\u6E5D\u6E73\u6E1C\u6E33\u6E4B\u6E40\u6E51\u6E3B\u6E03\u6E2E\u6E5E\uFFFD".split("");
      for (j = 0; j != D[217].length; ++j) if (D[217][j].charCodeAt(0) !== 65533) {
        e[D[217][j]] = 55552 + j;
        d[55552 + j] = D[217][j];
      }
      D[218] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6E68\u6E5C\u6E61\u6E31\u6E28\u6E60\u6E71\u6E6B\u6E39\u6E22\u6E30\u6E53\u6E65\u6E27\u6E78\u6E64\u6E77\u6E55\u6E79\u6E52\u6E66\u6E35\u6E36\u6E5A\u7120\u711E\u712F\u70FB\u712E\u7131\u7123\u7125\u7122\u7132\u711F\u7128\u713A\u711B\u724B\u725A\u7288\u7289\u7286\u7285\u728B\u7312\u730B\u7330\u7322\u7331\u7333\u7327\u7332\u732D\u7326\u7323\u7335\u730C\u742E\u742C\u7430\u742B\u7416\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u741A\u7421\u742D\u7431\u7424\u7423\u741D\u7429\u7420\u7432\u74FB\u752F\u756F\u756C\u75E7\u75DA\u75E1\u75E6\u75DD\u75DF\u75E4\u75D7\u7695\u7692\u76DA\u7746\u7747\u7744\u774D\u7745\u774A\u774E\u774B\u774C\u77DE\u77EC\u7860\u7864\u7865\u785C\u786D\u7871\u786A\u786E\u7870\u7869\u7868\u785E\u7862\u7974\u7973\u7972\u7970\u7A02\u7A0A\u7A03\u7A0C\u7A04\u7A99\u7AE6\u7AE4\u7B4A\u7B3B\u7B44\u7B48\u7B4C\u7B4E\u7B40\u7B58\u7B45\u7CA2\u7C9E\u7CA8\u7CA1\u7D58\u7D6F\u7D63\u7D53\u7D56\u7D67\u7D6A\u7D4F\u7D6D\u7D5C\u7D6B\u7D52\u7D54\u7D69\u7D51\u7D5F\u7D4E\u7F3E\u7F3F\u7F65\uFFFD".split("");
      for (j = 0; j != D[218].length; ++j) if (D[218][j].charCodeAt(0) !== 65533) {
        e[D[218][j]] = 55808 + j;
        d[55808 + j] = D[218][j];
      }
      D[219] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7F66\u7FA2\u7FA0\u7FA1\u7FD7\u8051\u804F\u8050\u80FE\u80D4\u8143\u814A\u8152\u814F\u8147\u813D\u814D\u813A\u81E6\u81EE\u81F7\u81F8\u81F9\u8204\u823C\u823D\u823F\u8275\u833B\u83CF\u83F9\u8423\u83C0\u83E8\u8412\u83E7\u83E4\u83FC\u83F6\u8410\u83C6\u83C8\u83EB\u83E3\u83BF\u8401\u83DD\u83E5\u83D8\u83FF\u83E1\u83CB\u83CE\u83D6\u83F5\u83C9\u8409\u840F\u83DE\u8411\u8406\u83C2\u83F3\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u83D5\u83FA\u83C7\u83D1\u83EA\u8413\u83C3\u83EC\u83EE\u83C4\u83FB\u83D7\u83E2\u841B\u83DB\u83FE\u86D8\u86E2\u86E6\u86D3\u86E3\u86DA\u86EA\u86DD\u86EB\u86DC\u86EC\u86E9\u86D7\u86E8\u86D1\u8848\u8856\u8855\u88BA\u88D7\u88B9\u88B8\u88C0\u88BE\u88B6\u88BC\u88B7\u88BD\u88B2\u8901\u88C9\u8995\u8998\u8997\u89DD\u89DA\u89DB\u8A4E\u8A4D\u8A39\u8A59\u8A40\u8A57\u8A58\u8A44\u8A45\u8A52\u8A48\u8A51\u8A4A\u8A4C\u8A4F\u8C5F\u8C81\u8C80\u8CBA\u8CBE\u8CB0\u8CB9\u8CB5\u8D84\u8D80\u8D89\u8DD8\u8DD3\u8DCD\u8DC7\u8DD6\u8DDC\u8DCF\u8DD5\u8DD9\u8DC8\u8DD7\u8DC5\u8EEF\u8EF7\u8EFA\uFFFD".split("");
      for (j = 0; j != D[219].length; ++j) if (D[219][j].charCodeAt(0) !== 65533) {
        e[D[219][j]] = 56064 + j;
        d[56064 + j] = D[219][j];
      }
      D[220] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8EF9\u8EE6\u8EEE\u8EE5\u8EF5\u8EE7\u8EE8\u8EF6\u8EEB\u8EF1\u8EEC\u8EF4\u8EE9\u902D\u9034\u902F\u9106\u912C\u9104\u90FF\u90FC\u9108\u90F9\u90FB\u9101\u9100\u9107\u9105\u9103\u9161\u9164\u915F\u9162\u9160\u9201\u920A\u9225\u9203\u921A\u9226\u920F\u920C\u9200\u9212\u91FF\u91FD\u9206\u9204\u9227\u9202\u921C\u9224\u9219\u9217\u9205\u9216\u957B\u958D\u958C\u9590\u9687\u967E\u9688\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9689\u9683\u9680\u96C2\u96C8\u96C3\u96F1\u96F0\u976C\u9770\u976E\u9807\u98A9\u98EB\u9CE6\u9EF9\u4E83\u4E84\u4EB6\u50BD\u50BF\u50C6\u50AE\u50C4\u50CA\u50B4\u50C8\u50C2\u50B0\u50C1\u50BA\u50B1\u50CB\u50C9\u50B6\u50B8\u51D7\u527A\u5278\u527B\u527C\u55C3\u55DB\u55CC\u55D0\u55CB\u55CA\u55DD\u55C0\u55D4\u55C4\u55E9\u55BF\u55D2\u558D\u55CF\u55D5\u55E2\u55D6\u55C8\u55F2\u55CD\u55D9\u55C2\u5714\u5853\u5868\u5864\u584F\u584D\u5849\u586F\u5855\u584E\u585D\u5859\u5865\u585B\u583D\u5863\u5871\u58FC\u5AC7\u5AC4\u5ACB\u5ABA\u5AB8\u5AB1\u5AB5\u5AB0\u5ABF\u5AC8\u5ABB\u5AC6\uFFFD".split("");
      for (j = 0; j != D[220].length; ++j) if (D[220][j].charCodeAt(0) !== 65533) {
        e[D[220][j]] = 56320 + j;
        d[56320 + j] = D[220][j];
      }
      D[221] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5AB7\u5AC0\u5ACA\u5AB4\u5AB6\u5ACD\u5AB9\u5A90\u5BD6\u5BD8\u5BD9\u5C1F\u5C33\u5D71\u5D63\u5D4A\u5D65\u5D72\u5D6C\u5D5E\u5D68\u5D67\u5D62\u5DF0\u5E4F\u5E4E\u5E4A\u5E4D\u5E4B\u5EC5\u5ECC\u5EC6\u5ECB\u5EC7\u5F40\u5FAF\u5FAD\u60F7\u6149\u614A\u612B\u6145\u6136\u6132\u612E\u6146\u612F\u614F\u6129\u6140\u6220\u9168\u6223\u6225\u6224\u63C5\u63F1\u63EB\u6410\u6412\u6409\u6420\u6424\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6433\u6443\u641F\u6415\u6418\u6439\u6437\u6422\u6423\u640C\u6426\u6430\u6428\u6441\u6435\u642F\u640A\u641A\u6440\u6425\u6427\u640B\u63E7\u641B\u642E\u6421\u640E\u656F\u6592\u65D3\u6686\u668C\u6695\u6690\u668B\u668A\u6699\u6694\u6678\u6720\u6966\u695F\u6938\u694E\u6962\u6971\u693F\u6945\u696A\u6939\u6942\u6957\u6959\u697A\u6948\u6949\u6935\u696C\u6933\u693D\u6965\u68F0\u6978\u6934\u6969\u6940\u696F\u6944\u6976\u6958\u6941\u6974\u694C\u693B\u694B\u6937\u695C\u694F\u6951\u6932\u6952\u692F\u697B\u693C\u6B46\u6B45\u6B43\u6B42\u6B48\u6B41\u6B9B\uFA0D\u6BFB\u6BFC\uFFFD".split("");
      for (j = 0; j != D[221].length; ++j) if (D[221][j].charCodeAt(0) !== 65533) {
        e[D[221][j]] = 56576 + j;
        d[56576 + j] = D[221][j];
      }
      D[222] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6BF9\u6BF7\u6BF8\u6E9B\u6ED6\u6EC8\u6E8F\u6EC0\u6E9F\u6E93\u6E94\u6EA0\u6EB1\u6EB9\u6EC6\u6ED2\u6EBD\u6EC1\u6E9E\u6EC9\u6EB7\u6EB0\u6ECD\u6EA6\u6ECF\u6EB2\u6EBE\u6EC3\u6EDC\u6ED8\u6E99\u6E92\u6E8E\u6E8D\u6EA4\u6EA1\u6EBF\u6EB3\u6ED0\u6ECA\u6E97\u6EAE\u6EA3\u7147\u7154\u7152\u7163\u7160\u7141\u715D\u7162\u7172\u7178\u716A\u7161\u7142\u7158\u7143\u714B\u7170\u715F\u7150\u7153\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7144\u714D\u715A\u724F\u728D\u728C\u7291\u7290\u728E\u733C\u7342\u733B\u733A\u7340\u734A\u7349\u7444\u744A\u744B\u7452\u7451\u7457\u7440\u744F\u7450\u744E\u7442\u7446\u744D\u7454\u74E1\u74FF\u74FE\u74FD\u751D\u7579\u7577\u6983\u75EF\u760F\u7603\u75F7\u75FE\u75FC\u75F9\u75F8\u7610\u75FB\u75F6\u75ED\u75F5\u75FD\u7699\u76B5\u76DD\u7755\u775F\u7760\u7752\u7756\u775A\u7769\u7767\u7754\u7759\u776D\u77E0\u7887\u789A\u7894\u788F\u7884\u7895\u7885\u7886\u78A1\u7883\u7879\u7899\u7880\u7896\u787B\u797C\u7982\u797D\u7979\u7A11\u7A18\u7A19\u7A12\u7A17\u7A15\u7A22\u7A13\uFFFD".split("");
      for (j = 0; j != D[222].length; ++j) if (D[222][j].charCodeAt(0) !== 65533) {
        e[D[222][j]] = 56832 + j;
        d[56832 + j] = D[222][j];
      }
      D[223] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7A1B\u7A10\u7AA3\u7AA2\u7A9E\u7AEB\u7B66\u7B64\u7B6D\u7B74\u7B69\u7B72\u7B65\u7B73\u7B71\u7B70\u7B61\u7B78\u7B76\u7B63\u7CB2\u7CB4\u7CAF\u7D88\u7D86\u7D80\u7D8D\u7D7F\u7D85\u7D7A\u7D8E\u7D7B\u7D83\u7D7C\u7D8C\u7D94\u7D84\u7D7D\u7D92\u7F6D\u7F6B\u7F67\u7F68\u7F6C\u7FA6\u7FA5\u7FA7\u7FDB\u7FDC\u8021\u8164\u8160\u8177\u815C\u8169\u815B\u8162\u8172\u6721\u815E\u8176\u8167\u816F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8144\u8161\u821D\u8249\u8244\u8240\u8242\u8245\u84F1\u843F\u8456\u8476\u8479\u848F\u848D\u8465\u8451\u8440\u8486\u8467\u8430\u844D\u847D\u845A\u8459\u8474\u8473\u845D\u8507\u845E\u8437\u843A\u8434\u847A\u8443\u8478\u8432\u8445\u8429\u83D9\u844B\u842F\u8442\u842D\u845F\u8470\u8439\u844E\u844C\u8452\u846F\u84C5\u848E\u843B\u8447\u8436\u8433\u8468\u847E\u8444\u842B\u8460\u8454\u846E\u8450\u870B\u8704\u86F7\u870C\u86FA\u86D6\u86F5\u874D\u86F8\u870E\u8709\u8701\u86F6\u870D\u8705\u88D6\u88CB\u88CD\u88CE\u88DE\u88DB\u88DA\u88CC\u88D0\u8985\u899B\u89DF\u89E5\u89E4\uFFFD".split("");
      for (j = 0; j != D[223].length; ++j) if (D[223][j].charCodeAt(0) !== 65533) {
        e[D[223][j]] = 57088 + j;
        d[57088 + j] = D[223][j];
      }
      D[224] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u89E1\u89E0\u89E2\u89DC\u89E6\u8A76\u8A86\u8A7F\u8A61\u8A3F\u8A77\u8A82\u8A84\u8A75\u8A83\u8A81\u8A74\u8A7A\u8C3C\u8C4B\u8C4A\u8C65\u8C64\u8C66\u8C86\u8C84\u8C85\u8CCC\u8D68\u8D69\u8D91\u8D8C\u8D8E\u8D8F\u8D8D\u8D93\u8D94\u8D90\u8D92\u8DF0\u8DE0\u8DEC\u8DF1\u8DEE\u8DD0\u8DE9\u8DE3\u8DE2\u8DE7\u8DF2\u8DEB\u8DF4\u8F06\u8EFF\u8F01\u8F00\u8F05\u8F07\u8F08\u8F02\u8F0B\u9052\u903F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9044\u9049\u903D\u9110\u910D\u910F\u9111\u9116\u9114\u910B\u910E\u916E\u916F\u9248\u9252\u9230\u923A\u9266\u9233\u9265\u925E\u9283\u922E\u924A\u9246\u926D\u926C\u924F\u9260\u9267\u926F\u9236\u9261\u9270\u9231\u9254\u9263\u9250\u9272\u924E\u9253\u924C\u9256\u9232\u959F\u959C\u959E\u959B\u9692\u9693\u9691\u9697\u96CE\u96FA\u96FD\u96F8\u96F5\u9773\u9777\u9778\u9772\u980F\u980D\u980E\u98AC\u98F6\u98F9\u99AF\u99B2\u99B0\u99B5\u9AAD\u9AAB\u9B5B\u9CEA\u9CED\u9CE7\u9E80\u9EFD\u50E6\u50D4\u50D7\u50E8\u50F3\u50DB\u50EA\u50DD\u50E4\u50D3\u50EC\u50F0\u50EF\u50E3\u50E0\uFFFD".split("");
      for (j = 0; j != D[224].length; ++j) if (D[224][j].charCodeAt(0) !== 65533) {
        e[D[224][j]] = 57344 + j;
        d[57344 + j] = D[224][j];
      }
      D[225] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u51D8\u5280\u5281\u52E9\u52EB\u5330\u53AC\u5627\u5615\u560C\u5612\u55FC\u560F\u561C\u5601\u5613\u5602\u55FA\u561D\u5604\u55FF\u55F9\u5889\u587C\u5890\u5898\u5886\u5881\u587F\u5874\u588B\u587A\u5887\u5891\u588E\u5876\u5882\u5888\u587B\u5894\u588F\u58FE\u596B\u5ADC\u5AEE\u5AE5\u5AD5\u5AEA\u5ADA\u5AED\u5AEB\u5AF3\u5AE2\u5AE0\u5ADB\u5AEC\u5ADE\u5ADD\u5AD9\u5AE8\u5ADF\u5B77\u5BE0\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5BE3\u5C63\u5D82\u5D80\u5D7D\u5D86\u5D7A\u5D81\u5D77\u5D8A\u5D89\u5D88\u5D7E\u5D7C\u5D8D\u5D79\u5D7F\u5E58\u5E59\u5E53\u5ED8\u5ED1\u5ED7\u5ECE\u5EDC\u5ED5\u5ED9\u5ED2\u5ED4\u5F44\u5F43\u5F6F\u5FB6\u612C\u6128\u6141\u615E\u6171\u6173\u6152\u6153\u6172\u616C\u6180\u6174\u6154\u617A\u615B\u6165\u613B\u616A\u6161\u6156\u6229\u6227\u622B\u642B\u644D\u645B\u645D\u6474\u6476\u6472\u6473\u647D\u6475\u6466\u64A6\u644E\u6482\u645E\u645C\u644B\u6453\u6460\u6450\u647F\u643F\u646C\u646B\u6459\u6465\u6477\u6573\u65A0\u66A1\u66A0\u669F\u6705\u6704\u6722\u69B1\u69B6\u69C9\uFFFD".split("");
      for (j = 0; j != D[225].length; ++j) if (D[225][j].charCodeAt(0) !== 65533) {
        e[D[225][j]] = 57600 + j;
        d[57600 + j] = D[225][j];
      }
      D[226] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u69A0\u69CE\u6996\u69B0\u69AC\u69BC\u6991\u6999\u698E\u69A7\u698D\u69A9\u69BE\u69AF\u69BF\u69C4\u69BD\u69A4\u69D4\u69B9\u69CA\u699A\u69CF\u69B3\u6993\u69AA\u69A1\u699E\u69D9\u6997\u6990\u69C2\u69B5\u69A5\u69C6\u6B4A\u6B4D\u6B4B\u6B9E\u6B9F\u6BA0\u6BC3\u6BC4\u6BFE\u6ECE\u6EF5\u6EF1\u6F03\u6F25\u6EF8\u6F37\u6EFB\u6F2E\u6F09\u6F4E\u6F19\u6F1A\u6F27\u6F18\u6F3B\u6F12\u6EED\u6F0A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6F36\u6F73\u6EF9\u6EEE\u6F2D\u6F40\u6F30\u6F3C\u6F35\u6EEB\u6F07\u6F0E\u6F43\u6F05\u6EFD\u6EF6\u6F39\u6F1C\u6EFC\u6F3A\u6F1F\u6F0D\u6F1E\u6F08\u6F21\u7187\u7190\u7189\u7180\u7185\u7182\u718F\u717B\u7186\u7181\u7197\u7244\u7253\u7297\u7295\u7293\u7343\u734D\u7351\u734C\u7462\u7473\u7471\u7475\u7472\u7467\u746E\u7500\u7502\u7503\u757D\u7590\u7616\u7608\u760C\u7615\u7611\u760A\u7614\u76B8\u7781\u777C\u7785\u7782\u776E\u7780\u776F\u777E\u7783\u78B2\u78AA\u78B4\u78AD\u78A8\u787E\u78AB\u789E\u78A5\u78A0\u78AC\u78A2\u78A4\u7998\u798A\u798B\u7996\u7995\u7994\u7993\uFFFD".split("");
      for (j = 0; j != D[226].length; ++j) if (D[226][j].charCodeAt(0) !== 65533) {
        e[D[226][j]] = 57856 + j;
        d[57856 + j] = D[226][j];
      }
      D[227] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7997\u7988\u7992\u7990\u7A2B\u7A4A\u7A30\u7A2F\u7A28\u7A26\u7AA8\u7AAB\u7AAC\u7AEE\u7B88\u7B9C\u7B8A\u7B91\u7B90\u7B96\u7B8D\u7B8C\u7B9B\u7B8E\u7B85\u7B98\u5284\u7B99\u7BA4\u7B82\u7CBB\u7CBF\u7CBC\u7CBA\u7DA7\u7DB7\u7DC2\u7DA3\u7DAA\u7DC1\u7DC0\u7DC5\u7D9D\u7DCE\u7DC4\u7DC6\u7DCB\u7DCC\u7DAF\u7DB9\u7D96\u7DBC\u7D9F\u7DA6\u7DAE\u7DA9\u7DA1\u7DC9\u7F73\u7FE2\u7FE3\u7FE5\u7FDE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8024\u805D\u805C\u8189\u8186\u8183\u8187\u818D\u818C\u818B\u8215\u8497\u84A4\u84A1\u849F\u84BA\u84CE\u84C2\u84AC\u84AE\u84AB\u84B9\u84B4\u84C1\u84CD\u84AA\u849A\u84B1\u84D0\u849D\u84A7\u84BB\u84A2\u8494\u84C7\u84CC\u849B\u84A9\u84AF\u84A8\u84D6\u8498\u84B6\u84CF\u84A0\u84D7\u84D4\u84D2\u84DB\u84B0\u8491\u8661\u8733\u8723\u8728\u876B\u8740\u872E\u871E\u8721\u8719\u871B\u8743\u872C\u8741\u873E\u8746\u8720\u8732\u872A\u872D\u873C\u8712\u873A\u8731\u8735\u8742\u8726\u8727\u8738\u8724\u871A\u8730\u8711\u88F7\u88E7\u88F1\u88F2\u88FA\u88FE\u88EE\u88FC\u88F6\u88FB\uFFFD".split("");
      for (j = 0; j != D[227].length; ++j) if (D[227][j].charCodeAt(0) !== 65533) {
        e[D[227][j]] = 58112 + j;
        d[58112 + j] = D[227][j];
      }
      D[228] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u88F0\u88EC\u88EB\u899D\u89A1\u899F\u899E\u89E9\u89EB\u89E8\u8AAB\u8A99\u8A8B\u8A92\u8A8F\u8A96\u8C3D\u8C68\u8C69\u8CD5\u8CCF\u8CD7\u8D96\u8E09\u8E02\u8DFF\u8E0D\u8DFD\u8E0A\u8E03\u8E07\u8E06\u8E05\u8DFE\u8E00\u8E04\u8F10\u8F11\u8F0E\u8F0D\u9123\u911C\u9120\u9122\u911F\u911D\u911A\u9124\u9121\u911B\u917A\u9172\u9179\u9173\u92A5\u92A4\u9276\u929B\u927A\u92A0\u9294\u92AA\u928D\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u92A6\u929A\u92AB\u9279\u9297\u927F\u92A3\u92EE\u928E\u9282\u9295\u92A2\u927D\u9288\u92A1\u928A\u9286\u928C\u9299\u92A7\u927E\u9287\u92A9\u929D\u928B\u922D\u969E\u96A1\u96FF\u9758\u977D\u977A\u977E\u9783\u9780\u9782\u977B\u9784\u9781\u977F\u97CE\u97CD\u9816\u98AD\u98AE\u9902\u9900\u9907\u999D\u999C\u99C3\u99B9\u99BB\u99BA\u99C2\u99BD\u99C7\u9AB1\u9AE3\u9AE7\u9B3E\u9B3F\u9B60\u9B61\u9B5F\u9CF1\u9CF2\u9CF5\u9EA7\u50FF\u5103\u5130\u50F8\u5106\u5107\u50F6\u50FE\u510B\u510C\u50FD\u510A\u528B\u528C\u52F1\u52EF\u5648\u5642\u564C\u5635\u5641\u564A\u5649\u5646\u5658\uFFFD".split("");
      for (j = 0; j != D[228].length; ++j) if (D[228][j].charCodeAt(0) !== 65533) {
        e[D[228][j]] = 58368 + j;
        d[58368 + j] = D[228][j];
      }
      D[229] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u565A\u5640\u5633\u563D\u562C\u563E\u5638\u562A\u563A\u571A\u58AB\u589D\u58B1\u58A0\u58A3\u58AF\u58AC\u58A5\u58A1\u58FF\u5AFF\u5AF4\u5AFD\u5AF7\u5AF6\u5B03\u5AF8\u5B02\u5AF9\u5B01\u5B07\u5B05\u5B0F\u5C67\u5D99\u5D97\u5D9F\u5D92\u5DA2\u5D93\u5D95\u5DA0\u5D9C\u5DA1\u5D9A\u5D9E\u5E69\u5E5D\u5E60\u5E5C\u7DF3\u5EDB\u5EDE\u5EE1\u5F49\u5FB2\u618B\u6183\u6179\u61B1\u61B0\u61A2\u6189\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u619B\u6193\u61AF\u61AD\u619F\u6192\u61AA\u61A1\u618D\u6166\u61B3\u622D\u646E\u6470\u6496\u64A0\u6485\u6497\u649C\u648F\u648B\u648A\u648C\u64A3\u649F\u6468\u64B1\u6498\u6576\u657A\u6579\u657B\u65B2\u65B3\u66B5\u66B0\u66A9\u66B2\u66B7\u66AA\u66AF\u6A00\u6A06\u6A17\u69E5\u69F8\u6A15\u69F1\u69E4\u6A20\u69FF\u69EC\u69E2\u6A1B\u6A1D\u69FE\u6A27\u69F2\u69EE\u6A14\u69F7\u69E7\u6A40\u6A08\u69E6\u69FB\u6A0D\u69FC\u69EB\u6A09\u6A04\u6A18\u6A25\u6A0F\u69F6\u6A26\u6A07\u69F4\u6A16\u6B51\u6BA5\u6BA3\u6BA2\u6BA6\u6C01\u6C00\u6BFF\u6C02\u6F41\u6F26\u6F7E\u6F87\u6FC6\u6F92\uFFFD".split("");
      for (j = 0; j != D[229].length; ++j) if (D[229][j].charCodeAt(0) !== 65533) {
        e[D[229][j]] = 58624 + j;
        d[58624 + j] = D[229][j];
      }
      D[230] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6F8D\u6F89\u6F8C\u6F62\u6F4F\u6F85\u6F5A\u6F96\u6F76\u6F6C\u6F82\u6F55\u6F72\u6F52\u6F50\u6F57\u6F94\u6F93\u6F5D\u6F00\u6F61\u6F6B\u6F7D\u6F67\u6F90\u6F53\u6F8B\u6F69\u6F7F\u6F95\u6F63\u6F77\u6F6A\u6F7B\u71B2\u71AF\u719B\u71B0\u71A0\u719A\u71A9\u71B5\u719D\u71A5\u719E\u71A4\u71A1\u71AA\u719C\u71A7\u71B3\u7298\u729A\u7358\u7352\u735E\u735F\u7360\u735D\u735B\u7361\u735A\u7359\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7362\u7487\u7489\u748A\u7486\u7481\u747D\u7485\u7488\u747C\u7479\u7508\u7507\u757E\u7625\u761E\u7619\u761D\u761C\u7623\u761A\u7628\u761B\u769C\u769D\u769E\u769B\u778D\u778F\u7789\u7788\u78CD\u78BB\u78CF\u78CC\u78D1\u78CE\u78D4\u78C8\u78C3\u78C4\u78C9\u799A\u79A1\u79A0\u799C\u79A2\u799B\u6B76\u7A39\u7AB2\u7AB4\u7AB3\u7BB7\u7BCB\u7BBE\u7BAC\u7BCE\u7BAF\u7BB9\u7BCA\u7BB5\u7CC5\u7CC8\u7CCC\u7CCB\u7DF7\u7DDB\u7DEA\u7DE7\u7DD7\u7DE1\u7E03\u7DFA\u7DE6\u7DF6\u7DF1\u7DF0\u7DEE\u7DDF\u7F76\u7FAC\u7FB0\u7FAD\u7FED\u7FEB\u7FEA\u7FEC\u7FE6\u7FE8\u8064\u8067\u81A3\u819F\uFFFD".split("");
      for (j = 0; j != D[230].length; ++j) if (D[230][j].charCodeAt(0) !== 65533) {
        e[D[230][j]] = 58880 + j;
        d[58880 + j] = D[230][j];
      }
      D[231] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u819E\u8195\u81A2\u8199\u8197\u8216\u824F\u8253\u8252\u8250\u824E\u8251\u8524\u853B\u850F\u8500\u8529\u850E\u8509\u850D\u851F\u850A\u8527\u851C\u84FB\u852B\u84FA\u8508\u850C\u84F4\u852A\u84F2\u8515\u84F7\u84EB\u84F3\u84FC\u8512\u84EA\u84E9\u8516\u84FE\u8528\u851D\u852E\u8502\u84FD\u851E\u84F6\u8531\u8526\u84E7\u84E8\u84F0\u84EF\u84F9\u8518\u8520\u8530\u850B\u8519\u852F\u8662\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8756\u8763\u8764\u8777\u87E1\u8773\u8758\u8754\u875B\u8752\u8761\u875A\u8751\u875E\u876D\u876A\u8750\u874E\u875F\u875D\u876F\u876C\u877A\u876E\u875C\u8765\u874F\u877B\u8775\u8762\u8767\u8769\u885A\u8905\u890C\u8914\u890B\u8917\u8918\u8919\u8906\u8916\u8911\u890E\u8909\u89A2\u89A4\u89A3\u89ED\u89F0\u89EC\u8ACF\u8AC6\u8AB8\u8AD3\u8AD1\u8AD4\u8AD5\u8ABB\u8AD7\u8ABE\u8AC0\u8AC5\u8AD8\u8AC3\u8ABA\u8ABD\u8AD9\u8C3E\u8C4D\u8C8F\u8CE5\u8CDF\u8CD9\u8CE8\u8CDA\u8CDD\u8CE7\u8DA0\u8D9C\u8DA1\u8D9B\u8E20\u8E23\u8E25\u8E24\u8E2E\u8E15\u8E1B\u8E16\u8E11\u8E19\u8E26\u8E27\uFFFD".split("");
      for (j = 0; j != D[231].length; ++j) if (D[231][j].charCodeAt(0) !== 65533) {
        e[D[231][j]] = 59136 + j;
        d[59136 + j] = D[231][j];
      }
      D[232] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8E14\u8E12\u8E18\u8E13\u8E1C\u8E17\u8E1A\u8F2C\u8F24\u8F18\u8F1A\u8F20\u8F23\u8F16\u8F17\u9073\u9070\u906F\u9067\u906B\u912F\u912B\u9129\u912A\u9132\u9126\u912E\u9185\u9186\u918A\u9181\u9182\u9184\u9180\u92D0\u92C3\u92C4\u92C0\u92D9\u92B6\u92CF\u92F1\u92DF\u92D8\u92E9\u92D7\u92DD\u92CC\u92EF\u92C2\u92E8\u92CA\u92C8\u92CE\u92E6\u92CD\u92D5\u92C9\u92E0\u92DE\u92E7\u92D1\u92D3\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u92B5\u92E1\u92C6\u92B4\u957C\u95AC\u95AB\u95AE\u95B0\u96A4\u96A2\u96D3\u9705\u9708\u9702\u975A\u978A\u978E\u9788\u97D0\u97CF\u981E\u981D\u9826\u9829\u9828\u9820\u981B\u9827\u98B2\u9908\u98FA\u9911\u9914\u9916\u9917\u9915\u99DC\u99CD\u99CF\u99D3\u99D4\u99CE\u99C9\u99D6\u99D8\u99CB\u99D7\u99CC\u9AB3\u9AEC\u9AEB\u9AF3\u9AF2\u9AF1\u9B46\u9B43\u9B67\u9B74\u9B71\u9B66\u9B76\u9B75\u9B70\u9B68\u9B64\u9B6C\u9CFC\u9CFA\u9CFD\u9CFF\u9CF7\u9D07\u9D00\u9CF9\u9CFB\u9D08\u9D05\u9D04\u9E83\u9ED3\u9F0F\u9F10\u511C\u5113\u5117\u511A\u5111\u51DE\u5334\u53E1\u5670\u5660\u566E\uFFFD".split("");
      for (j = 0; j != D[232].length; ++j) if (D[232][j].charCodeAt(0) !== 65533) {
        e[D[232][j]] = 59392 + j;
        d[59392 + j] = D[232][j];
      }
      D[233] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5673\u5666\u5663\u566D\u5672\u565E\u5677\u571C\u571B\u58C8\u58BD\u58C9\u58BF\u58BA\u58C2\u58BC\u58C6\u5B17\u5B19\u5B1B\u5B21\u5B14\u5B13\u5B10\u5B16\u5B28\u5B1A\u5B20\u5B1E\u5BEF\u5DAC\u5DB1\u5DA9\u5DA7\u5DB5\u5DB0\u5DAE\u5DAA\u5DA8\u5DB2\u5DAD\u5DAF\u5DB4\u5E67\u5E68\u5E66\u5E6F\u5EE9\u5EE7\u5EE6\u5EE8\u5EE5\u5F4B\u5FBC\u619D\u61A8\u6196\u61C5\u61B4\u61C6\u61C1\u61CC\u61BA\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u61BF\u61B8\u618C\u64D7\u64D6\u64D0\u64CF\u64C9\u64BD\u6489\u64C3\u64DB\u64F3\u64D9\u6533\u657F\u657C\u65A2\u66C8\u66BE\u66C0\u66CA\u66CB\u66CF\u66BD\u66BB\u66BA\u66CC\u6723\u6A34\u6A66\u6A49\u6A67\u6A32\u6A68\u6A3E\u6A5D\u6A6D\u6A76\u6A5B\u6A51\u6A28\u6A5A\u6A3B\u6A3F\u6A41\u6A6A\u6A64\u6A50\u6A4F\u6A54\u6A6F\u6A69\u6A60\u6A3C\u6A5E\u6A56\u6A55\u6A4D\u6A4E\u6A46\u6B55\u6B54\u6B56\u6BA7\u6BAA\u6BAB\u6BC8\u6BC7\u6C04\u6C03\u6C06\u6FAD\u6FCB\u6FA3\u6FC7\u6FBC\u6FCE\u6FC8\u6F5E\u6FC4\u6FBD\u6F9E\u6FCA\u6FA8\u7004\u6FA5\u6FAE\u6FBA\u6FAC\u6FAA\u6FCF\u6FBF\u6FB8\uFFFD".split("");
      for (j = 0; j != D[233].length; ++j) if (D[233][j].charCodeAt(0) !== 65533) {
        e[D[233][j]] = 59648 + j;
        d[59648 + j] = D[233][j];
      }
      D[234] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6FA2\u6FC9\u6FAB\u6FCD\u6FAF\u6FB2\u6FB0\u71C5\u71C2\u71BF\u71B8\u71D6\u71C0\u71C1\u71CB\u71D4\u71CA\u71C7\u71CF\u71BD\u71D8\u71BC\u71C6\u71DA\u71DB\u729D\u729E\u7369\u7366\u7367\u736C\u7365\u736B\u736A\u747F\u749A\u74A0\u7494\u7492\u7495\u74A1\u750B\u7580\u762F\u762D\u7631\u763D\u7633\u763C\u7635\u7632\u7630\u76BB\u76E6\u779A\u779D\u77A1\u779C\u779B\u77A2\u77A3\u7795\u7799\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7797\u78DD\u78E9\u78E5\u78EA\u78DE\u78E3\u78DB\u78E1\u78E2\u78ED\u78DF\u78E0\u79A4\u7A44\u7A48\u7A47\u7AB6\u7AB8\u7AB5\u7AB1\u7AB7\u7BDE\u7BE3\u7BE7\u7BDD\u7BD5\u7BE5\u7BDA\u7BE8\u7BF9\u7BD4\u7BEA\u7BE2\u7BDC\u7BEB\u7BD8\u7BDF\u7CD2\u7CD4\u7CD7\u7CD0\u7CD1\u7E12\u7E21\u7E17\u7E0C\u7E1F\u7E20\u7E13\u7E0E\u7E1C\u7E15\u7E1A\u7E22\u7E0B\u7E0F\u7E16\u7E0D\u7E14\u7E25\u7E24\u7F43\u7F7B\u7F7C\u7F7A\u7FB1\u7FEF\u802A\u8029\u806C\u81B1\u81A6\u81AE\u81B9\u81B5\u81AB\u81B0\u81AC\u81B4\u81B2\u81B7\u81A7\u81F2\u8255\u8256\u8257\u8556\u8545\u856B\u854D\u8553\u8561\u8558\uFFFD".split("");
      for (j = 0; j != D[234].length; ++j) if (D[234][j].charCodeAt(0) !== 65533) {
        e[D[234][j]] = 59904 + j;
        d[59904 + j] = D[234][j];
      }
      D[235] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8540\u8546\u8564\u8541\u8562\u8544\u8551\u8547\u8563\u853E\u855B\u8571\u854E\u856E\u8575\u8555\u8567\u8560\u858C\u8566\u855D\u8554\u8565\u856C\u8663\u8665\u8664\u879B\u878F\u8797\u8793\u8792\u8788\u8781\u8796\u8798\u8779\u8787\u87A3\u8785\u8790\u8791\u879D\u8784\u8794\u879C\u879A\u8789\u891E\u8926\u8930\u892D\u892E\u8927\u8931\u8922\u8929\u8923\u892F\u892C\u891F\u89F1\u8AE0\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8AE2\u8AF2\u8AF4\u8AF5\u8ADD\u8B14\u8AE4\u8ADF\u8AF0\u8AC8\u8ADE\u8AE1\u8AE8\u8AFF\u8AEF\u8AFB\u8C91\u8C92\u8C90\u8CF5\u8CEE\u8CF1\u8CF0\u8CF3\u8D6C\u8D6E\u8DA5\u8DA7\u8E33\u8E3E\u8E38\u8E40\u8E45\u8E36\u8E3C\u8E3D\u8E41\u8E30\u8E3F\u8EBD\u8F36\u8F2E\u8F35\u8F32\u8F39\u8F37\u8F34\u9076\u9079\u907B\u9086\u90FA\u9133\u9135\u9136\u9193\u9190\u9191\u918D\u918F\u9327\u931E\u9308\u931F\u9306\u930F\u937A\u9338\u933C\u931B\u9323\u9312\u9301\u9346\u932D\u930E\u930D\u92CB\u931D\u92FA\u9325\u9313\u92F9\u92F7\u9334\u9302\u9324\u92FF\u9329\u9339\u9335\u932A\u9314\u930C\uFFFD".split("");
      for (j = 0; j != D[235].length; ++j) if (D[235][j].charCodeAt(0) !== 65533) {
        e[D[235][j]] = 60160 + j;
        d[60160 + j] = D[235][j];
      }
      D[236] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u930B\u92FE\u9309\u9300\u92FB\u9316\u95BC\u95CD\u95BE\u95B9\u95BA\u95B6\u95BF\u95B5\u95BD\u96A9\u96D4\u970B\u9712\u9710\u9799\u9797\u9794\u97F0\u97F8\u9835\u982F\u9832\u9924\u991F\u9927\u9929\u999E\u99EE\u99EC\u99E5\u99E4\u99F0\u99E3\u99EA\u99E9\u99E7\u9AB9\u9ABF\u9AB4\u9ABB\u9AF6\u9AFA\u9AF9\u9AF7\u9B33\u9B80\u9B85\u9B87\u9B7C\u9B7E\u9B7B\u9B82\u9B93\u9B92\u9B90\u9B7A\u9B95\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9B7D\u9B88\u9D25\u9D17\u9D20\u9D1E\u9D14\u9D29\u9D1D\u9D18\u9D22\u9D10\u9D19\u9D1F\u9E88\u9E86\u9E87\u9EAE\u9EAD\u9ED5\u9ED6\u9EFA\u9F12\u9F3D\u5126\u5125\u5122\u5124\u5120\u5129\u52F4\u5693\u568C\u568D\u5686\u5684\u5683\u567E\u5682\u567F\u5681\u58D6\u58D4\u58CF\u58D2\u5B2D\u5B25\u5B32\u5B23\u5B2C\u5B27\u5B26\u5B2F\u5B2E\u5B7B\u5BF1\u5BF2\u5DB7\u5E6C\u5E6A\u5FBE\u5FBB\u61C3\u61B5\u61BC\u61E7\u61E0\u61E5\u61E4\u61E8\u61DE\u64EF\u64E9\u64E3\u64EB\u64E4\u64E8\u6581\u6580\u65B6\u65DA\u66D2\u6A8D\u6A96\u6A81\u6AA5\u6A89\u6A9F\u6A9B\u6AA1\u6A9E\u6A87\u6A93\u6A8E\uFFFD".split("");
      for (j = 0; j != D[236].length; ++j) if (D[236][j].charCodeAt(0) !== 65533) {
        e[D[236][j]] = 60416 + j;
        d[60416 + j] = D[236][j];
      }
      D[237] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6A95\u6A83\u6AA8\u6AA4\u6A91\u6A7F\u6AA6\u6A9A\u6A85\u6A8C\u6A92\u6B5B\u6BAD\u6C09\u6FCC\u6FA9\u6FF4\u6FD4\u6FE3\u6FDC\u6FED\u6FE7\u6FE6\u6FDE\u6FF2\u6FDD\u6FE2\u6FE8\u71E1\u71F1\u71E8\u71F2\u71E4\u71F0\u71E2\u7373\u736E\u736F\u7497\u74B2\u74AB\u7490\u74AA\u74AD\u74B1\u74A5\u74AF\u7510\u7511\u7512\u750F\u7584\u7643\u7648\u7649\u7647\u76A4\u76E9\u77B5\u77AB\u77B2\u77B7\u77B6\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u77B4\u77B1\u77A8\u77F0\u78F3\u78FD\u7902\u78FB\u78FC\u78F2\u7905\u78F9\u78FE\u7904\u79AB\u79A8\u7A5C\u7A5B\u7A56\u7A58\u7A54\u7A5A\u7ABE\u7AC0\u7AC1\u7C05\u7C0F\u7BF2\u7C00\u7BFF\u7BFB\u7C0E\u7BF4\u7C0B\u7BF3\u7C02\u7C09\u7C03\u7C01\u7BF8\u7BFD\u7C06\u7BF0\u7BF1\u7C10\u7C0A\u7CE8\u7E2D\u7E3C\u7E42\u7E33\u9848\u7E38\u7E2A\u7E49\u7E40\u7E47\u7E29\u7E4C\u7E30\u7E3B\u7E36\u7E44\u7E3A\u7F45\u7F7F\u7F7E\u7F7D\u7FF4\u7FF2\u802C\u81BB\u81C4\u81CC\u81CA\u81C5\u81C7\u81BC\u81E9\u825B\u825A\u825C\u8583\u8580\u858F\u85A7\u8595\u85A0\u858B\u85A3\u857B\u85A4\u859A\u859E\uFFFD".split("");
      for (j = 0; j != D[237].length; ++j) if (D[237][j].charCodeAt(0) !== 65533) {
        e[D[237][j]] = 60672 + j;
        d[60672 + j] = D[237][j];
      }
      D[238] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8577\u857C\u8589\u85A1\u857A\u8578\u8557\u858E\u8596\u8586\u858D\u8599\u859D\u8581\u85A2\u8582\u8588\u8585\u8579\u8576\u8598\u8590\u859F\u8668\u87BE\u87AA\u87AD\u87C5\u87B0\u87AC\u87B9\u87B5\u87BC\u87AE\u87C9\u87C3\u87C2\u87CC\u87B7\u87AF\u87C4\u87CA\u87B4\u87B6\u87BF\u87B8\u87BD\u87DE\u87B2\u8935\u8933\u893C\u893E\u8941\u8952\u8937\u8942\u89AD\u89AF\u89AE\u89F2\u89F3\u8B1E\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8B18\u8B16\u8B11\u8B05\u8B0B\u8B22\u8B0F\u8B12\u8B15\u8B07\u8B0D\u8B08\u8B06\u8B1C\u8B13\u8B1A\u8C4F\u8C70\u8C72\u8C71\u8C6F\u8C95\u8C94\u8CF9\u8D6F\u8E4E\u8E4D\u8E53\u8E50\u8E4C\u8E47\u8F43\u8F40\u9085\u907E\u9138\u919A\u91A2\u919B\u9199\u919F\u91A1\u919D\u91A0\u93A1\u9383\u93AF\u9364\u9356\u9347\u937C\u9358\u935C\u9376\u9349\u9350\u9351\u9360\u936D\u938F\u934C\u936A\u9379\u9357\u9355\u9352\u934F\u9371\u9377\u937B\u9361\u935E\u9363\u9367\u9380\u934E\u9359\u95C7\u95C0\u95C9\u95C3\u95C5\u95B7\u96AE\u96B0\u96AC\u9720\u971F\u9718\u971D\u9719\u979A\u97A1\u979C\uFFFD".split("");
      for (j = 0; j != D[238].length; ++j) if (D[238][j].charCodeAt(0) !== 65533) {
        e[D[238][j]] = 60928 + j;
        d[60928 + j] = D[238][j];
      }
      D[239] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u979E\u979D\u97D5\u97D4\u97F1\u9841\u9844\u984A\u9849\u9845\u9843\u9925\u992B\u992C\u992A\u9933\u9932\u992F\u992D\u9931\u9930\u9998\u99A3\u99A1\u9A02\u99FA\u99F4\u99F7\u99F9\u99F8\u99F6\u99FB\u99FD\u99FE\u99FC\u9A03\u9ABE\u9AFE\u9AFD\u9B01\u9AFC\u9B48\u9B9A\u9BA8\u9B9E\u9B9B\u9BA6\u9BA1\u9BA5\u9BA4\u9B86\u9BA2\u9BA0\u9BAF\u9D33\u9D41\u9D67\u9D36\u9D2E\u9D2F\u9D31\u9D38\u9D30\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9D45\u9D42\u9D43\u9D3E\u9D37\u9D40\u9D3D\u7FF5\u9D2D\u9E8A\u9E89\u9E8D\u9EB0\u9EC8\u9EDA\u9EFB\u9EFF\u9F24\u9F23\u9F22\u9F54\u9FA0\u5131\u512D\u512E\u5698\u569C\u5697\u569A\u569D\u5699\u5970\u5B3C\u5C69\u5C6A\u5DC0\u5E6D\u5E6E\u61D8\u61DF\u61ED\u61EE\u61F1\u61EA\u61F0\u61EB\u61D6\u61E9\u64FF\u6504\u64FD\u64F8\u6501\u6503\u64FC\u6594\u65DB\u66DA\u66DB\u66D8\u6AC5\u6AB9\u6ABD\u6AE1\u6AC6\u6ABA\u6AB6\u6AB7\u6AC7\u6AB4\u6AAD\u6B5E\u6BC9\u6C0B\u7007\u700C\u700D\u7001\u7005\u7014\u700E\u6FFF\u7000\u6FFB\u7026\u6FFC\u6FF7\u700A\u7201\u71FF\u71F9\u7203\u71FD\u7376\uFFFD".split("");
      for (j = 0; j != D[239].length; ++j) if (D[239][j].charCodeAt(0) !== 65533) {
        e[D[239][j]] = 61184 + j;
        d[61184 + j] = D[239][j];
      }
      D[240] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u74B8\u74C0\u74B5\u74C1\u74BE\u74B6\u74BB\u74C2\u7514\u7513\u765C\u7664\u7659\u7650\u7653\u7657\u765A\u76A6\u76BD\u76EC\u77C2\u77BA\u78FF\u790C\u7913\u7914\u7909\u7910\u7912\u7911\u79AD\u79AC\u7A5F\u7C1C\u7C29\u7C19\u7C20\u7C1F\u7C2D\u7C1D\u7C26\u7C28\u7C22\u7C25\u7C30\u7E5C\u7E50\u7E56\u7E63\u7E58\u7E62\u7E5F\u7E51\u7E60\u7E57\u7E53\u7FB5\u7FB3\u7FF7\u7FF8\u8075\u81D1\u81D2\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u81D0\u825F\u825E\u85B4\u85C6\u85C0\u85C3\u85C2\u85B3\u85B5\u85BD\u85C7\u85C4\u85BF\u85CB\u85CE\u85C8\u85C5\u85B1\u85B6\u85D2\u8624\u85B8\u85B7\u85BE\u8669\u87E7\u87E6\u87E2\u87DB\u87EB\u87EA\u87E5\u87DF\u87F3\u87E4\u87D4\u87DC\u87D3\u87ED\u87D8\u87E3\u87A4\u87D7\u87D9\u8801\u87F4\u87E8\u87DD\u8953\u894B\u894F\u894C\u8946\u8950\u8951\u8949\u8B2A\u8B27\u8B23\u8B33\u8B30\u8B35\u8B47\u8B2F\u8B3C\u8B3E\u8B31\u8B25\u8B37\u8B26\u8B36\u8B2E\u8B24\u8B3B\u8B3D\u8B3A\u8C42\u8C75\u8C99\u8C98\u8C97\u8CFE\u8D04\u8D02\u8D00\u8E5C\u8E62\u8E60\u8E57\u8E56\u8E5E\u8E65\u8E67\uFFFD".split("");
      for (j = 0; j != D[240].length; ++j) if (D[240][j].charCodeAt(0) !== 65533) {
        e[D[240][j]] = 61440 + j;
        d[61440 + j] = D[240][j];
      }
      D[241] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8E5B\u8E5A\u8E61\u8E5D\u8E69\u8E54\u8F46\u8F47\u8F48\u8F4B\u9128\u913A\u913B\u913E\u91A8\u91A5\u91A7\u91AF\u91AA\u93B5\u938C\u9392\u93B7\u939B\u939D\u9389\u93A7\u938E\u93AA\u939E\u93A6\u9395\u9388\u9399\u939F\u938D\u93B1\u9391\u93B2\u93A4\u93A8\u93B4\u93A3\u93A5\u95D2\u95D3\u95D1\u96B3\u96D7\u96DA\u5DC2\u96DF\u96D8\u96DD\u9723\u9722\u9725\u97AC\u97AE\u97A8\u97AB\u97A4\u97AA\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u97A2\u97A5\u97D7\u97D9\u97D6\u97D8\u97FA\u9850\u9851\u9852\u98B8\u9941\u993C\u993A\u9A0F\u9A0B\u9A09\u9A0D\u9A04\u9A11\u9A0A\u9A05\u9A07\u9A06\u9AC0\u9ADC\u9B08\u9B04\u9B05\u9B29\u9B35\u9B4A\u9B4C\u9B4B\u9BC7\u9BC6\u9BC3\u9BBF\u9BC1\u9BB5\u9BB8\u9BD3\u9BB6\u9BC4\u9BB9\u9BBD\u9D5C\u9D53\u9D4F\u9D4A\u9D5B\u9D4B\u9D59\u9D56\u9D4C\u9D57\u9D52\u9D54\u9D5F\u9D58\u9D5A\u9E8E\u9E8C\u9EDF\u9F01\u9F00\u9F16\u9F25\u9F2B\u9F2A\u9F29\u9F28\u9F4C\u9F55\u5134\u5135\u5296\u52F7\u53B4\u56AB\u56AD\u56A6\u56A7\u56AA\u56AC\u58DA\u58DD\u58DB\u5912\u5B3D\u5B3E\u5B3F\u5DC3\u5E70\uFFFD".split("");
      for (j = 0; j != D[241].length; ++j) if (D[241][j].charCodeAt(0) !== 65533) {
        e[D[241][j]] = 61696 + j;
        d[61696 + j] = D[241][j];
      }
      D[242] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5FBF\u61FB\u6507\u6510\u650D\u6509\u650C\u650E\u6584\u65DE\u65DD\u66DE\u6AE7\u6AE0\u6ACC\u6AD1\u6AD9\u6ACB\u6ADF\u6ADC\u6AD0\u6AEB\u6ACF\u6ACD\u6ADE\u6B60\u6BB0\u6C0C\u7019\u7027\u7020\u7016\u702B\u7021\u7022\u7023\u7029\u7017\u7024\u701C\u702A\u720C\u720A\u7207\u7202\u7205\u72A5\u72A6\u72A4\u72A3\u72A1\u74CB\u74C5\u74B7\u74C3\u7516\u7660\u77C9\u77CA\u77C4\u77F1\u791D\u791B\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7921\u791C\u7917\u791E\u79B0\u7A67\u7A68\u7C33\u7C3C\u7C39\u7C2C\u7C3B\u7CEC\u7CEA\u7E76\u7E75\u7E78\u7E70\u7E77\u7E6F\u7E7A\u7E72\u7E74\u7E68\u7F4B\u7F4A\u7F83\u7F86\u7FB7\u7FFD\u7FFE\u8078\u81D7\u81D5\u8264\u8261\u8263\u85EB\u85F1\u85ED\u85D9\u85E1\u85E8\u85DA\u85D7\u85EC\u85F2\u85F8\u85D8\u85DF\u85E3\u85DC\u85D1\u85F0\u85E6\u85EF\u85DE\u85E2\u8800\u87FA\u8803\u87F6\u87F7\u8809\u880C\u880B\u8806\u87FC\u8808\u87FF\u880A\u8802\u8962\u895A\u895B\u8957\u8961\u895C\u8958\u895D\u8959\u8988\u89B7\u89B6\u89F6\u8B50\u8B48\u8B4A\u8B40\u8B53\u8B56\u8B54\u8B4B\u8B55\uFFFD".split("");
      for (j = 0; j != D[242].length; ++j) if (D[242][j].charCodeAt(0) !== 65533) {
        e[D[242][j]] = 61952 + j;
        d[61952 + j] = D[242][j];
      }
      D[243] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8B51\u8B42\u8B52\u8B57\u8C43\u8C77\u8C76\u8C9A\u8D06\u8D07\u8D09\u8DAC\u8DAA\u8DAD\u8DAB\u8E6D\u8E78\u8E73\u8E6A\u8E6F\u8E7B\u8EC2\u8F52\u8F51\u8F4F\u8F50\u8F53\u8FB4\u9140\u913F\u91B0\u91AD\u93DE\u93C7\u93CF\u93C2\u93DA\u93D0\u93F9\u93EC\u93CC\u93D9\u93A9\u93E6\u93CA\u93D4\u93EE\u93E3\u93D5\u93C4\u93CE\u93C0\u93D2\u93E7\u957D\u95DA\u95DB\u96E1\u9729\u972B\u972C\u9728\u9726\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u97B3\u97B7\u97B6\u97DD\u97DE\u97DF\u985C\u9859\u985D\u9857\u98BF\u98BD\u98BB\u98BE\u9948\u9947\u9943\u99A6\u99A7\u9A1A\u9A15\u9A25\u9A1D\u9A24\u9A1B\u9A22\u9A20\u9A27\u9A23\u9A1E\u9A1C\u9A14\u9AC2\u9B0B\u9B0A\u9B0E\u9B0C\u9B37\u9BEA\u9BEB\u9BE0\u9BDE\u9BE4\u9BE6\u9BE2\u9BF0\u9BD4\u9BD7\u9BEC\u9BDC\u9BD9\u9BE5\u9BD5\u9BE1\u9BDA\u9D77\u9D81\u9D8A\u9D84\u9D88\u9D71\u9D80\u9D78\u9D86\u9D8B\u9D8C\u9D7D\u9D6B\u9D74\u9D75\u9D70\u9D69\u9D85\u9D73\u9D7B\u9D82\u9D6F\u9D79\u9D7F\u9D87\u9D68\u9E94\u9E91\u9EC0\u9EFC\u9F2D\u9F40\u9F41\u9F4D\u9F56\u9F57\u9F58\u5337\u56B2\uFFFD".split("");
      for (j = 0; j != D[243].length; ++j) if (D[243][j].charCodeAt(0) !== 65533) {
        e[D[243][j]] = 62208 + j;
        d[62208 + j] = D[243][j];
      }
      D[244] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u56B5\u56B3\u58E3\u5B45\u5DC6\u5DC7\u5EEE\u5EEF\u5FC0\u5FC1\u61F9\u6517\u6516\u6515\u6513\u65DF\u66E8\u66E3\u66E4\u6AF3\u6AF0\u6AEA\u6AE8\u6AF9\u6AF1\u6AEE\u6AEF\u703C\u7035\u702F\u7037\u7034\u7031\u7042\u7038\u703F\u703A\u7039\u7040\u703B\u7033\u7041\u7213\u7214\u72A8\u737D\u737C\u74BA\u76AB\u76AA\u76BE\u76ED\u77CC\u77CE\u77CF\u77CD\u77F2\u7925\u7923\u7927\u7928\u7924\u7929\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u79B2\u7A6E\u7A6C\u7A6D\u7AF7\u7C49\u7C48\u7C4A\u7C47\u7C45\u7CEE\u7E7B\u7E7E\u7E81\u7E80\u7FBA\u7FFF\u8079\u81DB\u81D9\u820B\u8268\u8269\u8622\u85FF\u8601\u85FE\u861B\u8600\u85F6\u8604\u8609\u8605\u860C\u85FD\u8819\u8810\u8811\u8817\u8813\u8816\u8963\u8966\u89B9\u89F7\u8B60\u8B6A\u8B5D\u8B68\u8B63\u8B65\u8B67\u8B6D\u8DAE\u8E86\u8E88\u8E84\u8F59\u8F56\u8F57\u8F55\u8F58\u8F5A\u908D\u9143\u9141\u91B7\u91B5\u91B2\u91B3\u940B\u9413\u93FB\u9420\u940F\u9414\u93FE\u9415\u9410\u9428\u9419\u940D\u93F5\u9400\u93F7\u9407\u940E\u9416\u9412\u93FA\u9409\u93F8\u940A\u93FF\uFFFD".split("");
      for (j = 0; j != D[244].length; ++j) if (D[244][j].charCodeAt(0) !== 65533) {
        e[D[244][j]] = 62464 + j;
        d[62464 + j] = D[244][j];
      }
      D[245] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u93FC\u940C\u93F6\u9411\u9406\u95DE\u95E0\u95DF\u972E\u972F\u97B9\u97BB\u97FD\u97FE\u9860\u9862\u9863\u985F\u98C1\u98C2\u9950\u994E\u9959\u994C\u994B\u9953\u9A32\u9A34\u9A31\u9A2C\u9A2A\u9A36\u9A29\u9A2E\u9A38\u9A2D\u9AC7\u9ACA\u9AC6\u9B10\u9B12\u9B11\u9C0B\u9C08\u9BF7\u9C05\u9C12\u9BF8\u9C40\u9C07\u9C0E\u9C06\u9C17\u9C14\u9C09\u9D9F\u9D99\u9DA4\u9D9D\u9D92\u9D98\u9D90\u9D9B\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9DA0\u9D94\u9D9C\u9DAA\u9D97\u9DA1\u9D9A\u9DA2\u9DA8\u9D9E\u9DA3\u9DBF\u9DA9\u9D96\u9DA6\u9DA7\u9E99\u9E9B\u9E9A\u9EE5\u9EE4\u9EE7\u9EE6\u9F30\u9F2E\u9F5B\u9F60\u9F5E\u9F5D\u9F59\u9F91\u513A\u5139\u5298\u5297\u56C3\u56BD\u56BE\u5B48\u5B47\u5DCB\u5DCF\u5EF1\u61FD\u651B\u6B02\u6AFC\u6B03\u6AF8\u6B00\u7043\u7044\u704A\u7048\u7049\u7045\u7046\u721D\u721A\u7219\u737E\u7517\u766A\u77D0\u792D\u7931\u792F\u7C54\u7C53\u7CF2\u7E8A\u7E87\u7E88\u7E8B\u7E86\u7E8D\u7F4D\u7FBB\u8030\u81DD\u8618\u862A\u8626\u861F\u8623\u861C\u8619\u8627\u862E\u8621\u8620\u8629\u861E\u8625\uFFFD".split("");
      for (j = 0; j != D[245].length; ++j) if (D[245][j].charCodeAt(0) !== 65533) {
        e[D[245][j]] = 62720 + j;
        d[62720 + j] = D[245][j];
      }
      D[246] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8829\u881D\u881B\u8820\u8824\u881C\u882B\u884A\u896D\u8969\u896E\u896B\u89FA\u8B79\u8B78\u8B45\u8B7A\u8B7B\u8D10\u8D14\u8DAF\u8E8E\u8E8C\u8F5E\u8F5B\u8F5D\u9146\u9144\u9145\u91B9\u943F\u943B\u9436\u9429\u943D\u943C\u9430\u9439\u942A\u9437\u942C\u9440\u9431\u95E5\u95E4\u95E3\u9735\u973A\u97BF\u97E1\u9864\u98C9\u98C6\u98C0\u9958\u9956\u9A39\u9A3D\u9A46\u9A44\u9A42\u9A41\u9A3A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9A3F\u9ACD\u9B15\u9B17\u9B18\u9B16\u9B3A\u9B52\u9C2B\u9C1D\u9C1C\u9C2C\u9C23\u9C28\u9C29\u9C24\u9C21\u9DB7\u9DB6\u9DBC\u9DC1\u9DC7\u9DCA\u9DCF\u9DBE\u9DC5\u9DC3\u9DBB\u9DB5\u9DCE\u9DB9\u9DBA\u9DAC\u9DC8\u9DB1\u9DAD\u9DCC\u9DB3\u9DCD\u9DB2\u9E7A\u9E9C\u9EEB\u9EEE\u9EED\u9F1B\u9F18\u9F1A\u9F31\u9F4E\u9F65\u9F64\u9F92\u4EB9\u56C6\u56C5\u56CB\u5971\u5B4B\u5B4C\u5DD5\u5DD1\u5EF2\u6521\u6520\u6526\u6522\u6B0B\u6B08\u6B09\u6C0D\u7055\u7056\u7057\u7052\u721E\u721F\u72A9\u737F\u74D8\u74D5\u74D9\u74D7\u766D\u76AD\u7935\u79B4\u7A70\u7A71\u7C57\u7C5C\u7C59\u7C5B\u7C5A\uFFFD".split("");
      for (j = 0; j != D[246].length; ++j) if (D[246][j].charCodeAt(0) !== 65533) {
        e[D[246][j]] = 62976 + j;
        d[62976 + j] = D[246][j];
      }
      D[247] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7CF4\u7CF1\u7E91\u7F4F\u7F87\u81DE\u826B\u8634\u8635\u8633\u862C\u8632\u8636\u882C\u8828\u8826\u882A\u8825\u8971\u89BF\u89BE\u89FB\u8B7E\u8B84\u8B82\u8B86\u8B85\u8B7F\u8D15\u8E95\u8E94\u8E9A\u8E92\u8E90\u8E96\u8E97\u8F60\u8F62\u9147\u944C\u9450\u944A\u944B\u944F\u9447\u9445\u9448\u9449\u9446\u973F\u97E3\u986A\u9869\u98CB\u9954\u995B\u9A4E\u9A53\u9A54\u9A4C\u9A4F\u9A48\u9A4A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9A49\u9A52\u9A50\u9AD0\u9B19\u9B2B\u9B3B\u9B56\u9B55\u9C46\u9C48\u9C3F\u9C44\u9C39\u9C33\u9C41\u9C3C\u9C37\u9C34\u9C32\u9C3D\u9C36\u9DDB\u9DD2\u9DDE\u9DDA\u9DCB\u9DD0\u9DDC\u9DD1\u9DDF\u9DE9\u9DD9\u9DD8\u9DD6\u9DF5\u9DD5\u9DDD\u9EB6\u9EF0\u9F35\u9F33\u9F32\u9F42\u9F6B\u9F95\u9FA2\u513D\u5299\u58E8\u58E7\u5972\u5B4D\u5DD8\u882F\u5F4F\u6201\u6203\u6204\u6529\u6525\u6596\u66EB\u6B11\u6B12\u6B0F\u6BCA\u705B\u705A\u7222\u7382\u7381\u7383\u7670\u77D4\u7C67\u7C66\u7E95\u826C\u863A\u8640\u8639\u863C\u8631\u863B\u863E\u8830\u8832\u882E\u8833\u8976\u8974\u8973\u89FE\uFFFD".split("");
      for (j = 0; j != D[247].length; ++j) if (D[247][j].charCodeAt(0) !== 65533) {
        e[D[247][j]] = 63232 + j;
        d[63232 + j] = D[247][j];
      }
      D[248] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8B8C\u8B8E\u8B8B\u8B88\u8C45\u8D19\u8E98\u8F64\u8F63\u91BC\u9462\u9455\u945D\u9457\u945E\u97C4\u97C5\u9800\u9A56\u9A59\u9B1E\u9B1F\u9B20\u9C52\u9C58\u9C50\u9C4A\u9C4D\u9C4B\u9C55\u9C59\u9C4C\u9C4E\u9DFB\u9DF7\u9DEF\u9DE3\u9DEB\u9DF8\u9DE4\u9DF6\u9DE1\u9DEE\u9DE6\u9DF2\u9DF0\u9DE2\u9DEC\u9DF4\u9DF3\u9DE8\u9DED\u9EC2\u9ED0\u9EF2\u9EF3\u9F06\u9F1C\u9F38\u9F37\u9F36\u9F43\u9F4F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9F71\u9F70\u9F6E\u9F6F\u56D3\u56CD\u5B4E\u5C6D\u652D\u66ED\u66EE\u6B13\u705F\u7061\u705D\u7060\u7223\u74DB\u74E5\u77D5\u7938\u79B7\u79B6\u7C6A\u7E97\u7F89\u826D\u8643\u8838\u8837\u8835\u884B\u8B94\u8B95\u8E9E\u8E9F\u8EA0\u8E9D\u91BE\u91BD\u91C2\u946B\u9468\u9469\u96E5\u9746\u9743\u9747\u97C7\u97E5\u9A5E\u9AD5\u9B59\u9C63\u9C67\u9C66\u9C62\u9C5E\u9C60\u9E02\u9DFE\u9E07\u9E03\u9E06\u9E05\u9E00\u9E01\u9E09\u9DFF\u9DFD\u9E04\u9EA0\u9F1E\u9F46\u9F74\u9F75\u9F76\u56D4\u652E\u65B8\u6B18\u6B19\u6B17\u6B1A\u7062\u7226\u72AA\u77D8\u77D9\u7939\u7C69\u7C6B\u7CF6\u7E9A\uFFFD".split("");
      for (j = 0; j != D[248].length; ++j) if (D[248][j].charCodeAt(0) !== 65533) {
        e[D[248][j]] = 63488 + j;
        d[63488 + j] = D[248][j];
      }
      D[249] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7E98\u7E9B\u7E99\u81E0\u81E1\u8646\u8647\u8648\u8979\u897A\u897C\u897B\u89FF\u8B98\u8B99\u8EA5\u8EA4\u8EA3\u946E\u946D\u946F\u9471\u9473\u9749\u9872\u995F\u9C68\u9C6E\u9C6D\u9E0B\u9E0D\u9E10\u9E0F\u9E12\u9E11\u9EA1\u9EF5\u9F09\u9F47\u9F78\u9F7B\u9F7A\u9F79\u571E\u7066\u7C6F\u883C\u8DB2\u8EA6\u91C3\u9474\u9478\u9476\u9475\u9A60\u9C74\u9C73\u9C71\u9C75\u9E14\u9E13\u9EF6\u9F0A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9FA4\u7068\u7065\u7CF7\u866A\u883E\u883D\u883F\u8B9E\u8C9C\u8EA9\u8EC9\u974B\u9873\u9874\u98CC\u9961\u99AB\u9A64\u9A66\u9A67\u9B24\u9E15\u9E17\u9F48\u6207\u6B1E\u7227\u864C\u8EA8\u9482\u9480\u9481\u9A69\u9A68\u9B2E\u9E19\u7229\u864B\u8B9F\u9483\u9C79\u9EB7\u7675\u9A6B\u9C7A\u9E1D\u7069\u706A\u9EA4\u9F7E\u9F49\u9F98\u7881\u92B9\u88CF\u58BB\u6052\u7CA7\u5AFA\u2554\u2566\u2557\u2560\u256C\u2563\u255A\u2569\u255D\u2552\u2564\u2555\u255E\u256A\u2561\u2558\u2567\u255B\u2553\u2565\u2556\u255F\u256B\u2562\u2559\u2568\u255C\u2551\u2550\u256D\u256E\u2570\u256F\u2593\uFFFD".split("");
      for (j = 0; j != D[249].length; ++j) if (D[249][j].charCodeAt(0) !== 65533) {
        e[D[249][j]] = 63744 + j;
        d[63744 + j] = D[249][j];
      }
      return { "enc": e, "dec": d };
    }();
    cptable2[1250] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\u0160\u2039\u015A\u0164\u017D\u0179\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0161\u203A\u015B\u0165\u017E\u017A\xA0\u02C7\u02D8\u0141\xA4\u0104\xA6\xA7\xA8\xA9\u015E\xAB\xAC\xAD\xAE\u017B\xB0\xB1\u02DB\u0142\xB4\xB5\xB6\xB7\xB8\u0105\u015F\xBB\u013D\u02DD\u013E\u017C\u0154\xC1\xC2\u0102\xC4\u0139\u0106\xC7\u010C\xC9\u0118\xCB\u011A\xCD\xCE\u010E\u0110\u0143\u0147\xD3\xD4\u0150\xD6\xD7\u0158\u016E\xDA\u0170\xDC\xDD\u0162\xDF\u0155\xE1\xE2\u0103\xE4\u013A\u0107\xE7\u010D\xE9\u0119\xEB\u011B\xED\xEE\u010F\u0111\u0144\u0148\xF3\xF4\u0151\xF6\xF7\u0159\u016F\xFA\u0171\xFC\xFD\u0163\u02D9", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[1251] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u040C\u040B\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u045C\u045B\u045F\xA0\u040E\u045E\u0408\xA4\u0490\xA6\xA7\u0401\xA9\u0404\xAB\xAC\xAD\xAE\u0407\xB0\xB1\u0406\u0456\u0491\xB5\xB6\xB7\u0451\u2116\u0454\xBB\u0458\u0405\u0455\u0457\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[1252] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\u017D\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\u017E\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[1253] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\xA0\u0385\u0386\xA3\xA4\xA5\xA6\xA7\xA8\xA9\uFFFD\xAB\xAC\xAD\xAE\u2015\xB0\xB1\xB2\xB3\u0384\xB5\xB6\xB7\u0388\u0389\u038A\xBB\u038C\xBD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[1254] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\uFFFD\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u011E\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u0130\u015E\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u011F\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u0131\u015F\xFF", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[1255] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\xA0\xA1\xA2\xA3\u20AA\xA5\xA6\xA7\xA8\xA9\xD7\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xF7\xBB\xBC\xBD\xBE\xBF\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9\uFFFD\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1\u05C2\u05C3\u05F0\u05F1\u05F2\u05F3\u05F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[1256] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\u20AC\u067E\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0679\u2039\u0152\u0686\u0698\u0688\u06AF\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u06A9\u2122\u0691\u203A\u0153\u200C\u200D\u06BA\xA0\u060C\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\u06BE\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\u061B\xBB\xBC\xBD\xBE\u061F\u06C1\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\xD7\u0637\u0638\u0639\u063A\u0640\u0641\u0642\u0643\xE0\u0644\xE2\u0645\u0646\u0647\u0648\xE7\xE8\xE9\xEA\xEB\u0649\u064A\xEE\xEF\u064B\u064C\u064D\u064E\xF4\u064F\u0650\xF7\u0651\xF9\u0652\xFB\xFC\u200E\u200F\u06D2", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[1257] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\xA8\u02C7\xB8\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\xAF\u02DB\uFFFD\xA0\uFFFD\xA2\xA3\xA4\uFFFD\xA6\xA7\xD8\xA9\u0156\xAB\xAC\xAD\xAE\xC6\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xF8\xB9\u0157\xBB\xBC\xBD\xBE\xE6\u0104\u012E\u0100\u0106\xC4\xC5\u0118\u0112\u010C\xC9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\xD3\u014C\xD5\xD6\xD7\u0172\u0141\u015A\u016A\xDC\u017B\u017D\xDF\u0105\u012F\u0101\u0107\xE4\xE5\u0119\u0113\u010D\xE9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\xF3\u014D\xF5\xF6\xF7\u0173\u0142\u015B\u016B\xFC\u017C\u017E\u02D9", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[1258] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\u0153\uFFFD\uFFFD\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\u0102\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\u0300\xCD\xCE\xCF\u0110\xD1\u0309\xD3\xD4\u01A0\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u01AF\u0303\xDF\xE0\xE1\xE2\u0103\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\u0301\xED\xEE\xEF\u0111\xF1\u0323\xF3\xF4\u01A1\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u01B0\u20AB\xFF", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[1e4] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\u2039\u203A\uFB01\uFB02\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[10006] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xC4\xB9\xB2\xC9\xB3\xD6\xDC\u0385\xE0\xE2\xE4\u0384\xA8\xE7\xE9\xE8\xEA\xEB\xA3\u2122\xEE\xEF\u2022\xBD\u2030\xF4\xF6\xA6\xAD\xF9\xFB\xFC\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\xDF\xAE\xA9\u03A3\u03AA\xA7\u2260\xB0\u0387\u0391\xB1\u2264\u2265\xA5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\xAC\u039F\u03A1\u2248\u03A4\xAB\xBB\u2026\xA0\u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\xF7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\uFFFD", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[10007] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\xB0\xA2\xA3\xA7\u2022\xB6\u0406\xAE\xA9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\xB1\u2264\u2265\u0456\xB5\u2202\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\xA4", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[10008] = function() {
      var d = [], e = {}, D = [], j;
      D[0] = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\x80\uF8D8\uF8D9\uF8DA\uF8DB\uF8DC\uF8DD\uF8DE\uF8DF\uF8E0\uF8E1\uF8E2\uF8E3\uF8E4\uF8E5\uF8E6\uF8E7\uF8E8\uF8E9\uF8EA\uF8EB\uF8EC\uF8ED\uF8EE\uF8EF\uF8F0\uF8F1\uF8F2\uF8F3\uF8F4\uF8F5\uF8F6\uF8F7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uF8F8\uF8F9\uF8FA\uF8FB\uF8FC\uF8FD\uF8FE\uF8FF".split("");
      for (j = 0; j != D[0].length; ++j) if (D[0][j].charCodeAt(0) !== 65533) {
        e[D[0][j]] = 0 + j;
        d[0 + j] = D[0][j];
      }
      D[161] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u3000\u3001\u3002\u30FB\u02C9\u02C7\xA8\u3003\u3005\u2015\uFF5E\uFFFD\u2026\u2018\u2019\u201C\u201D\u3014\u3015\u3008\u3009\u300A\u300B\u300C\u300D\u300E\u300F\u3016\u3017\u3010\u3011\xB1\xD7\xF7\u2236\u2227\u2228\u2211\u220F\u222A\u2229\u2208\u2237\u221A\u22A5\u2225\u2220\u2312\u2299\u222B\u222E\u2261\u224C\u2248\u223D\u221D\u2260\u226E\u226F\u2264\u2265\u221E\u2235\u2234\u2642\u2640\xB0\u2032\u2033\u2103\uFF04\xA4\uFFE0\uFFE1\u2030\xA7\u2116\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u203B\u2192\u2190\u2191\u2193\u3013\uFFFD".split("");
      for (j = 0; j != D[161].length; ++j) if (D[161][j].charCodeAt(0) !== 65533) {
        e[D[161][j]] = 41216 + j;
        d[41216 + j] = D[161][j];
      }
      D[162] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2488\u2489\u248A\u248B\u248C\u248D\u248E\u248F\u2490\u2491\u2492\u2493\u2494\u2495\u2496\u2497\u2498\u2499\u249A\u249B\u2474\u2475\u2476\u2477\u2478\u2479\u247A\u247B\u247C\u247D\u247E\u247F\u2480\u2481\u2482\u2483\u2484\u2485\u2486\u2487\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467\u2468\u2469\uFFFD\uFFFD\u3220\u3221\u3222\u3223\u3224\u3225\u3226\u3227\u3228\u3229\uFFFD\uFFFD\u2160\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168\u2169\u216A\u216B\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[162].length; ++j) if (D[162][j].charCodeAt(0) !== 65533) {
        e[D[162][j]] = 41472 + j;
        d[41472 + j] = D[162][j];
      }
      D[163] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFF01\uFF02\uFF03\uFFE5\uFF05\uFF06\uFF07\uFF08\uFF09\uFF0A\uFF0B\uFF0C\uFF0D\uFF0E\uFF0F\uFF10\uFF11\uFF12\uFF13\uFF14\uFF15\uFF16\uFF17\uFF18\uFF19\uFF1A\uFF1B\uFF1C\uFF1D\uFF1E\uFF1F\uFF20\uFF21\uFF22\uFF23\uFF24\uFF25\uFF26\uFF27\uFF28\uFF29\uFF2A\uFF2B\uFF2C\uFF2D\uFF2E\uFF2F\uFF30\uFF31\uFF32\uFF33\uFF34\uFF35\uFF36\uFF37\uFF38\uFF39\uFF3A\uFF3B\uFF3C\uFF3D\uFF3E\uFF3F\uFF40\uFF41\uFF42\uFF43\uFF44\uFF45\uFF46\uFF47\uFF48\uFF49\uFF4A\uFF4B\uFF4C\uFF4D\uFF4E\uFF4F\uFF50\uFF51\uFF52\uFF53\uFF54\uFF55\uFF56\uFF57\uFF58\uFF59\uFF5A\uFF5B\uFF5C\uFF5D\uFFE3\uFFFD".split("");
      for (j = 0; j != D[163].length; ++j) if (D[163][j].charCodeAt(0) !== 65533) {
        e[D[163][j]] = 41728 + j;
        d[41728 + j] = D[163][j];
      }
      D[164] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048\u3049\u304A\u304B\u304C\u304D\u304E\u304F\u3050\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058\u3059\u305A\u305B\u305C\u305D\u305E\u305F\u3060\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069\u306A\u306B\u306C\u306D\u306E\u306F\u3070\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078\u3079\u307A\u307B\u307C\u307D\u307E\u307F\u3080\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088\u3089\u308A\u308B\u308C\u308D\u308E\u308F\u3090\u3091\u3092\u3093\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[164].length; ++j) if (D[164][j].charCodeAt(0) !== 65533) {
        e[D[164][j]] = 41984 + j;
        d[41984 + j] = D[164][j];
      }
      D[165] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u30A1\u30A2\u30A3\u30A4\u30A5\u30A6\u30A7\u30A8\u30A9\u30AA\u30AB\u30AC\u30AD\u30AE\u30AF\u30B0\u30B1\u30B2\u30B3\u30B4\u30B5\u30B6\u30B7\u30B8\u30B9\u30BA\u30BB\u30BC\u30BD\u30BE\u30BF\u30C0\u30C1\u30C2\u30C3\u30C4\u30C5\u30C6\u30C7\u30C8\u30C9\u30CA\u30CB\u30CC\u30CD\u30CE\u30CF\u30D0\u30D1\u30D2\u30D3\u30D4\u30D5\u30D6\u30D7\u30D8\u30D9\u30DA\u30DB\u30DC\u30DD\u30DE\u30DF\u30E0\u30E1\u30E2\u30E3\u30E4\u30E5\u30E6\u30E7\u30E8\u30E9\u30EA\u30EB\u30EC\u30ED\u30EE\u30EF\u30F0\u30F1\u30F2\u30F3\u30F4\u30F5\u30F6\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[165].length; ++j) if (D[165][j].charCodeAt(0) !== 65533) {
        e[D[165][j]] = 42240 + j;
        d[42240 + j] = D[165][j];
      }
      D[166] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[166].length; ++j) if (D[166][j].charCodeAt(0) !== 65533) {
        e[D[166][j]] = 42496 + j;
        d[42496 + j] = D[166][j];
      }
      D[167] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0410\u0411\u0412\u0413\u0414\u0415\u0401\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0430\u0431\u0432\u0433\u0434\u0435\u0451\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[167].length; ++j) if (D[167][j].charCodeAt(0) !== 65533) {
        e[D[167][j]] = 42752 + j;
        d[42752 + j] = D[167][j];
      }
      D[168] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0101\xE1\u01CE\xE0\u0113\xE9\u011B\xE8\u012B\xED\u01D0\xEC\u014D\xF3\u01D2\xF2\u016B\xFA\u01D4\xF9\u01D6\u01D8\u01DA\u01DC\xFC\xEA\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u3105\u3106\u3107\u3108\u3109\u310A\u310B\u310C\u310D\u310E\u310F\u3110\u3111\u3112\u3113\u3114\u3115\u3116\u3117\u3118\u3119\u311A\u311B\u311C\u311D\u311E\u311F\u3120\u3121\u3122\u3123\u3124\u3125\u3126\u3127\u3128\u3129\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[168].length; ++j) if (D[168][j].charCodeAt(0) !== 65533) {
        e[D[168][j]] = 43008 + j;
        d[43008 + j] = D[168][j];
      }
      D[169] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2500\u2501\u2502\u2503\u2504\u2505\u2506\u2507\u2508\u2509\u250A\u250B\u250C\u250D\u250E\u250F\u2510\u2511\u2512\u2513\u2514\u2515\u2516\u2517\u2518\u2519\u251A\u251B\u251C\u251D\u251E\u251F\u2520\u2521\u2522\u2523\u2524\u2525\u2526\u2527\u2528\u2529\u252A\u252B\u252C\u252D\u252E\u252F\u2530\u2531\u2532\u2533\u2534\u2535\u2536\u2537\u2538\u2539\u253A\u253B\u253C\u253D\u253E\u253F\u2540\u2541\u2542\u2543\u2544\u2545\u2546\u2547\u2548\u2549\u254A\u254B\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[169].length; ++j) if (D[169][j].charCodeAt(0) !== 65533) {
        e[D[169][j]] = 43264 + j;
        d[43264 + j] = D[169][j];
      }
      D[176] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u554A\u963F\u57C3\u6328\u54CE\u5509\u54C0\u7691\u764C\u853C\u77EE\u827E\u788D\u7231\u9698\u978D\u6C28\u5B89\u4FFA\u6309\u6697\u5CB8\u80FA\u6848\u80AE\u6602\u76CE\u51F9\u6556\u71AC\u7FF1\u8884\u50B2\u5965\u61CA\u6FB3\u82AD\u634C\u6252\u53ED\u5427\u7B06\u516B\u75A4\u5DF4\u62D4\u8DCB\u9776\u628A\u8019\u575D\u9738\u7F62\u7238\u767D\u67CF\u767E\u6446\u4F70\u8D25\u62DC\u7A17\u6591\u73ED\u642C\u6273\u822C\u9881\u677F\u7248\u626E\u62CC\u4F34\u74E3\u534A\u529E\u7ECA\u90A6\u5E2E\u6886\u699C\u8180\u7ED1\u68D2\u78C5\u868C\u9551\u508D\u8C24\u82DE\u80DE\u5305\u8912\u5265\uFFFD".split("");
      for (j = 0; j != D[176].length; ++j) if (D[176][j].charCodeAt(0) !== 65533) {
        e[D[176][j]] = 45056 + j;
        d[45056 + j] = D[176][j];
      }
      D[177] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8584\u96F9\u4FDD\u5821\u9971\u5B9D\u62B1\u62A5\u66B4\u8C79\u9C8D\u7206\u676F\u7891\u60B2\u5351\u5317\u8F88\u80CC\u8D1D\u94A1\u500D\u72C8\u5907\u60EB\u7119\u88AB\u5954\u82EF\u672C\u7B28\u5D29\u7EF7\u752D\u6CF5\u8E66\u8FF8\u903C\u9F3B\u6BD4\u9119\u7B14\u5F7C\u78A7\u84D6\u853D\u6BD5\u6BD9\u6BD6\u5E01\u5E87\u75F9\u95ED\u655D\u5F0A\u5FC5\u8F9F\u58C1\u81C2\u907F\u965B\u97AD\u8FB9\u7F16\u8D2C\u6241\u4FBF\u53D8\u535E\u8FA8\u8FA9\u8FAB\u904D\u6807\u5F6A\u8198\u8868\u9CD6\u618B\u522B\u762A\u5F6C\u658C\u6FD2\u6EE8\u5BBE\u6448\u5175\u51B0\u67C4\u4E19\u79C9\u997C\u70B3\uFFFD".split("");
      for (j = 0; j != D[177].length; ++j) if (D[177][j].charCodeAt(0) !== 65533) {
        e[D[177][j]] = 45312 + j;
        d[45312 + j] = D[177][j];
      }
      D[178] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u75C5\u5E76\u73BB\u83E0\u64AD\u62E8\u94B5\u6CE2\u535A\u52C3\u640F\u94C2\u7B94\u4F2F\u5E1B\u8236\u8116\u818A\u6E24\u6CCA\u9A73\u6355\u535C\u54FA\u8865\u57E0\u4E0D\u5E03\u6B65\u7C3F\u90E8\u6016\u64E6\u731C\u88C1\u6750\u624D\u8D22\u776C\u8E29\u91C7\u5F69\u83DC\u8521\u9910\u53C2\u8695\u6B8B\u60ED\u60E8\u707F\u82CD\u8231\u4ED3\u6CA7\u85CF\u64CD\u7CD9\u69FD\u66F9\u8349\u5395\u7B56\u4FA7\u518C\u6D4B\u5C42\u8E6D\u63D2\u53C9\u832C\u8336\u67E5\u78B4\u643D\u5BDF\u5C94\u5DEE\u8BE7\u62C6\u67F4\u8C7A\u6400\u63BA\u8749\u998B\u8C17\u7F20\u94F2\u4EA7\u9610\u98A4\u660C\u7316\uFFFD".split("");
      for (j = 0; j != D[178].length; ++j) if (D[178][j].charCodeAt(0) !== 65533) {
        e[D[178][j]] = 45568 + j;
        d[45568 + j] = D[178][j];
      }
      D[179] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u573A\u5C1D\u5E38\u957F\u507F\u80A0\u5382\u655E\u7545\u5531\u5021\u8D85\u6284\u949E\u671D\u5632\u6F6E\u5DE2\u5435\u7092\u8F66\u626F\u64A4\u63A3\u5F7B\u6F88\u90F4\u81E3\u8FB0\u5C18\u6668\u5FF1\u6C89\u9648\u8D81\u886C\u6491\u79F0\u57CE\u6A59\u6210\u5448\u4E58\u7A0B\u60E9\u6F84\u8BDA\u627F\u901E\u9A8B\u79E4\u5403\u75F4\u6301\u5319\u6C60\u8FDF\u5F1B\u9A70\u803B\u9F7F\u4F88\u5C3A\u8D64\u7FC5\u65A5\u70BD\u5145\u51B2\u866B\u5D07\u5BA0\u62BD\u916C\u7574\u8E0C\u7A20\u6101\u7B79\u4EC7\u7EF8\u7785\u4E11\u81ED\u521D\u51FA\u6A71\u53A8\u8E87\u9504\u96CF\u6EC1\u9664\u695A\uFFFD".split("");
      for (j = 0; j != D[179].length; ++j) if (D[179][j].charCodeAt(0) !== 65533) {
        e[D[179][j]] = 45824 + j;
        d[45824 + j] = D[179][j];
      }
      D[180] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7840\u50A8\u77D7\u6410\u89E6\u5904\u63E3\u5DDD\u7A7F\u693D\u4F20\u8239\u5598\u4E32\u75AE\u7A97\u5E62\u5E8A\u95EF\u521B\u5439\u708A\u6376\u9524\u5782\u6625\u693F\u9187\u5507\u6DF3\u7EAF\u8822\u6233\u7EF0\u75B5\u8328\u78C1\u96CC\u8F9E\u6148\u74F7\u8BCD\u6B64\u523A\u8D50\u6B21\u806A\u8471\u56F1\u5306\u4ECE\u4E1B\u51D1\u7C97\u918B\u7C07\u4FC3\u8E7F\u7BE1\u7A9C\u6467\u5D14\u50AC\u8106\u7601\u7CB9\u6DEC\u7FE0\u6751\u5B58\u5BF8\u78CB\u64AE\u6413\u63AA\u632B\u9519\u642D\u8FBE\u7B54\u7629\u6253\u5927\u5446\u6B79\u50A3\u6234\u5E26\u6B86\u4EE3\u8D37\u888B\u5F85\u902E\uFFFD".split("");
      for (j = 0; j != D[180].length; ++j) if (D[180][j].charCodeAt(0) !== 65533) {
        e[D[180][j]] = 46080 + j;
        d[46080 + j] = D[180][j];
      }
      D[181] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6020\u803D\u62C5\u4E39\u5355\u90F8\u63B8\u80C6\u65E6\u6C2E\u4F46\u60EE\u6DE1\u8BDE\u5F39\u86CB\u5F53\u6321\u515A\u8361\u6863\u5200\u6363\u8E48\u5012\u5C9B\u7977\u5BFC\u5230\u7A3B\u60BC\u9053\u76D7\u5FB7\u5F97\u7684\u8E6C\u706F\u767B\u7B49\u77AA\u51F3\u9093\u5824\u4F4E\u6EF4\u8FEA\u654C\u7B1B\u72C4\u6DA4\u7FDF\u5AE1\u62B5\u5E95\u5730\u8482\u7B2C\u5E1D\u5F1F\u9012\u7F14\u98A0\u6382\u6EC7\u7898\u70B9\u5178\u975B\u57AB\u7535\u4F43\u7538\u5E97\u60E6\u5960\u6DC0\u6BBF\u7889\u53FC\u96D5\u51CB\u5201\u6389\u540A\u9493\u8C03\u8DCC\u7239\u789F\u8776\u8FED\u8C0D\u53E0\uFFFD".split("");
      for (j = 0; j != D[181].length; ++j) if (D[181][j].charCodeAt(0) !== 65533) {
        e[D[181][j]] = 46336 + j;
        d[46336 + j] = D[181][j];
      }
      D[182] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u4E01\u76EF\u53EE\u9489\u9876\u9F0E\u952D\u5B9A\u8BA2\u4E22\u4E1C\u51AC\u8463\u61C2\u52A8\u680B\u4F97\u606B\u51BB\u6D1E\u515C\u6296\u6597\u9661\u8C46\u9017\u75D8\u90FD\u7763\u6BD2\u728A\u72EC\u8BFB\u5835\u7779\u8D4C\u675C\u9540\u809A\u5EA6\u6E21\u5992\u7AEF\u77ED\u953B\u6BB5\u65AD\u7F0E\u5806\u5151\u961F\u5BF9\u58A9\u5428\u8E72\u6566\u987F\u56E4\u949D\u76FE\u9041\u6387\u54C6\u591A\u593A\u579B\u8EB2\u6735\u8DFA\u8235\u5241\u60F0\u5815\u86FE\u5CE8\u9E45\u4FC4\u989D\u8BB9\u5A25\u6076\u5384\u627C\u904F\u9102\u997F\u6069\u800C\u513F\u8033\u5C14\u9975\u6D31\u4E8C\uFFFD".split("");
      for (j = 0; j != D[182].length; ++j) if (D[182][j].charCodeAt(0) !== 65533) {
        e[D[182][j]] = 46592 + j;
        d[46592 + j] = D[182][j];
      }
      D[183] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8D30\u53D1\u7F5A\u7B4F\u4F10\u4E4F\u9600\u6CD5\u73D0\u85E9\u5E06\u756A\u7FFB\u6A0A\u77FE\u9492\u7E41\u51E1\u70E6\u53CD\u8FD4\u8303\u8D29\u72AF\u996D\u6CDB\u574A\u82B3\u65B9\u80AA\u623F\u9632\u59A8\u4EFF\u8BBF\u7EBA\u653E\u83F2\u975E\u5561\u98DE\u80A5\u532A\u8BFD\u5420\u80BA\u5E9F\u6CB8\u8D39\u82AC\u915A\u5429\u6C1B\u5206\u7EB7\u575F\u711A\u6C7E\u7C89\u594B\u4EFD\u5FFF\u6124\u7CAA\u4E30\u5C01\u67AB\u8702\u5CF0\u950B\u98CE\u75AF\u70FD\u9022\u51AF\u7F1D\u8BBD\u5949\u51E4\u4F5B\u5426\u592B\u6577\u80A4\u5B75\u6276\u62C2\u8F90\u5E45\u6C1F\u7B26\u4F0F\u4FD8\u670D\uFFFD".split("");
      for (j = 0; j != D[183].length; ++j) if (D[183][j].charCodeAt(0) !== 65533) {
        e[D[183][j]] = 46848 + j;
        d[46848 + j] = D[183][j];
      }
      D[184] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6D6E\u6DAA\u798F\u88B1\u5F17\u752B\u629A\u8F85\u4FEF\u91DC\u65A7\u812F\u8151\u5E9C\u8150\u8D74\u526F\u8986\u8D4B\u590D\u5085\u4ED8\u961C\u7236\u8179\u8D1F\u5BCC\u8BA3\u9644\u5987\u7F1A\u5490\u5676\u560E\u8BE5\u6539\u6982\u9499\u76D6\u6E89\u5E72\u7518\u6746\u67D1\u7AFF\u809D\u8D76\u611F\u79C6\u6562\u8D63\u5188\u521A\u94A2\u7F38\u809B\u7EB2\u5C97\u6E2F\u6760\u7BD9\u768B\u9AD8\u818F\u7F94\u7CD5\u641E\u9550\u7A3F\u544A\u54E5\u6B4C\u6401\u6208\u9E3D\u80F3\u7599\u5272\u9769\u845B\u683C\u86E4\u9601\u9694\u94EC\u4E2A\u5404\u7ED9\u6839\u8DDF\u8015\u66F4\u5E9A\u7FB9\uFFFD".split("");
      for (j = 0; j != D[184].length; ++j) if (D[184][j].charCodeAt(0) !== 65533) {
        e[D[184][j]] = 47104 + j;
        d[47104 + j] = D[184][j];
      }
      D[185] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u57C2\u803F\u6897\u5DE5\u653B\u529F\u606D\u9F9A\u4F9B\u8EAC\u516C\u5BAB\u5F13\u5DE9\u6C5E\u62F1\u8D21\u5171\u94A9\u52FE\u6C9F\u82DF\u72D7\u57A2\u6784\u8D2D\u591F\u8F9C\u83C7\u5495\u7B8D\u4F30\u6CBD\u5B64\u59D1\u9F13\u53E4\u86CA\u9AA8\u8C37\u80A1\u6545\u987E\u56FA\u96C7\u522E\u74DC\u5250\u5BE1\u6302\u8902\u4E56\u62D0\u602A\u68FA\u5173\u5B98\u51A0\u89C2\u7BA1\u9986\u7F50\u60EF\u704C\u8D2F\u5149\u5E7F\u901B\u7470\u89C4\u572D\u7845\u5F52\u9F9F\u95FA\u8F68\u9B3C\u8BE1\u7678\u6842\u67DC\u8DEA\u8D35\u523D\u8F8A\u6EDA\u68CD\u9505\u90ED\u56FD\u679C\u88F9\u8FC7\u54C8\uFFFD".split("");
      for (j = 0; j != D[185].length; ++j) if (D[185][j].charCodeAt(0) !== 65533) {
        e[D[185][j]] = 47360 + j;
        d[47360 + j] = D[185][j];
      }
      D[186] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9AB8\u5B69\u6D77\u6C26\u4EA5\u5BB3\u9A87\u9163\u61A8\u90AF\u97E9\u542B\u6DB5\u5BD2\u51FD\u558A\u7F55\u7FF0\u64BC\u634D\u65F1\u61BE\u608D\u710A\u6C57\u6C49\u592F\u676D\u822A\u58D5\u568E\u8C6A\u6BEB\u90DD\u597D\u8017\u53F7\u6D69\u5475\u559D\u8377\u83CF\u6838\u79BE\u548C\u4F55\u5408\u76D2\u8C89\u9602\u6CB3\u6DB8\u8D6B\u8910\u9E64\u8D3A\u563F\u9ED1\u75D5\u5F88\u72E0\u6068\u54FC\u4EA8\u6A2A\u8861\u6052\u8F70\u54C4\u70D8\u8679\u9E3F\u6D2A\u5B8F\u5F18\u7EA2\u5589\u4FAF\u7334\u543C\u539A\u5019\u540E\u547C\u4E4E\u5FFD\u745A\u58F6\u846B\u80E1\u8774\u72D0\u7CCA\u6E56\uFFFD".split("");
      for (j = 0; j != D[186].length; ++j) if (D[186][j].charCodeAt(0) !== 65533) {
        e[D[186][j]] = 47616 + j;
        d[47616 + j] = D[186][j];
      }
      D[187] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5F27\u864E\u552C\u62A4\u4E92\u6CAA\u6237\u82B1\u54D7\u534E\u733E\u6ED1\u753B\u5212\u5316\u8BDD\u69D0\u5F8A\u6000\u6DEE\u574F\u6B22\u73AF\u6853\u8FD8\u7F13\u6362\u60A3\u5524\u75EA\u8C62\u7115\u6DA3\u5BA6\u5E7B\u8352\u614C\u9EC4\u78FA\u8757\u7C27\u7687\u51F0\u60F6\u714C\u6643\u5E4C\u604D\u8C0E\u7070\u6325\u8F89\u5FBD\u6062\u86D4\u56DE\u6BC1\u6094\u6167\u5349\u60E0\u6666\u8D3F\u79FD\u4F1A\u70E9\u6C47\u8BB3\u8BF2\u7ED8\u8364\u660F\u5A5A\u9B42\u6D51\u6DF7\u8C41\u6D3B\u4F19\u706B\u83B7\u6216\u60D1\u970D\u8D27\u7978\u51FB\u573E\u57FA\u673A\u7578\u7A3D\u79EF\u7B95\uFFFD".split("");
      for (j = 0; j != D[187].length; ++j) if (D[187][j].charCodeAt(0) !== 65533) {
        e[D[187][j]] = 47872 + j;
        d[47872 + j] = D[187][j];
      }
      D[188] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u808C\u9965\u8FF9\u6FC0\u8BA5\u9E21\u59EC\u7EE9\u7F09\u5409\u6781\u68D8\u8F91\u7C4D\u96C6\u53CA\u6025\u75BE\u6C72\u5373\u5AC9\u7EA7\u6324\u51E0\u810A\u5DF1\u84DF\u6280\u5180\u5B63\u4F0E\u796D\u5242\u60B8\u6D4E\u5BC4\u5BC2\u8BA1\u8BB0\u65E2\u5FCC\u9645\u5993\u7EE7\u7EAA\u5609\u67B7\u5939\u4F73\u5BB6\u52A0\u835A\u988A\u8D3E\u7532\u94BE\u5047\u7A3C\u4EF7\u67B6\u9A7E\u5AC1\u6B7C\u76D1\u575A\u5C16\u7B3A\u95F4\u714E\u517C\u80A9\u8270\u5978\u7F04\u8327\u68C0\u67EC\u78B1\u7877\u62E3\u6361\u7B80\u4FED\u526A\u51CF\u8350\u69DB\u9274\u8DF5\u8D31\u89C1\u952E\u7BAD\u4EF6\uFFFD".split("");
      for (j = 0; j != D[188].length; ++j) if (D[188][j].charCodeAt(0) !== 65533) {
        e[D[188][j]] = 48128 + j;
        d[48128 + j] = D[188][j];
      }
      D[189] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5065\u8230\u5251\u996F\u6E10\u6E85\u6DA7\u5EFA\u50F5\u59DC\u5C06\u6D46\u6C5F\u7586\u848B\u6868\u5956\u8BB2\u5320\u9171\u964D\u8549\u6912\u7901\u7126\u80F6\u4EA4\u90CA\u6D47\u9A84\u5A07\u56BC\u6405\u94F0\u77EB\u4FA5\u811A\u72E1\u89D2\u997A\u7F34\u7EDE\u527F\u6559\u9175\u8F7F\u8F83\u53EB\u7A96\u63ED\u63A5\u7686\u79F8\u8857\u9636\u622A\u52AB\u8282\u6854\u6770\u6377\u776B\u7AED\u6D01\u7ED3\u89E3\u59D0\u6212\u85C9\u82A5\u754C\u501F\u4ECB\u75A5\u8BEB\u5C4A\u5DFE\u7B4B\u65A4\u91D1\u4ECA\u6D25\u895F\u7D27\u9526\u4EC5\u8C28\u8FDB\u9773\u664B\u7981\u8FD1\u70EC\u6D78\uFFFD".split("");
      for (j = 0; j != D[189].length; ++j) if (D[189][j].charCodeAt(0) !== 65533) {
        e[D[189][j]] = 48384 + j;
        d[48384 + j] = D[189][j];
      }
      D[190] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5C3D\u52B2\u8346\u5162\u830E\u775B\u6676\u9CB8\u4EAC\u60CA\u7CBE\u7CB3\u7ECF\u4E95\u8B66\u666F\u9888\u9759\u5883\u656C\u955C\u5F84\u75C9\u9756\u7ADF\u7ADE\u51C0\u70AF\u7A98\u63EA\u7A76\u7EA0\u7396\u97ED\u4E45\u7078\u4E5D\u9152\u53A9\u6551\u65E7\u81FC\u8205\u548E\u5C31\u759A\u97A0\u62D8\u72D9\u75BD\u5C45\u9A79\u83CA\u5C40\u5480\u77E9\u4E3E\u6CAE\u805A\u62D2\u636E\u5DE8\u5177\u8DDD\u8E1E\u952F\u4FF1\u53E5\u60E7\u70AC\u5267\u6350\u9E43\u5A1F\u5026\u7737\u5377\u7EE2\u6485\u652B\u6289\u6398\u5014\u7235\u89C9\u51B3\u8BC0\u7EDD\u5747\u83CC\u94A7\u519B\u541B\u5CFB\uFFFD".split("");
      for (j = 0; j != D[190].length; ++j) if (D[190][j].charCodeAt(0) !== 65533) {
        e[D[190][j]] = 48640 + j;
        d[48640 + j] = D[190][j];
      }
      D[191] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u4FCA\u7AE3\u6D5A\u90E1\u9A8F\u5580\u5496\u5361\u54AF\u5F00\u63E9\u6977\u51EF\u6168\u520A\u582A\u52D8\u574E\u780D\u770B\u5EB7\u6177\u7CE0\u625B\u6297\u4EA2\u7095\u8003\u62F7\u70E4\u9760\u5777\u82DB\u67EF\u68F5\u78D5\u9897\u79D1\u58F3\u54B3\u53EF\u6E34\u514B\u523B\u5BA2\u8BFE\u80AF\u5543\u57A6\u6073\u5751\u542D\u7A7A\u6050\u5B54\u63A7\u62A0\u53E3\u6263\u5BC7\u67AF\u54ED\u7A9F\u82E6\u9177\u5E93\u88E4\u5938\u57AE\u630E\u8DE8\u80EF\u5757\u7B77\u4FA9\u5FEB\u5BBD\u6B3E\u5321\u7B50\u72C2\u6846\u77FF\u7736\u65F7\u51B5\u4E8F\u76D4\u5CBF\u7AA5\u8475\u594E\u9B41\u5080\uFFFD".split("");
      for (j = 0; j != D[191].length; ++j) if (D[191][j].charCodeAt(0) !== 65533) {
        e[D[191][j]] = 48896 + j;
        d[48896 + j] = D[191][j];
      }
      D[192] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9988\u6127\u6E83\u5764\u6606\u6346\u56F0\u62EC\u6269\u5ED3\u9614\u5783\u62C9\u5587\u8721\u814A\u8FA3\u5566\u83B1\u6765\u8D56\u84DD\u5A6A\u680F\u62E6\u7BEE\u9611\u5170\u6F9C\u8C30\u63FD\u89C8\u61D2\u7F06\u70C2\u6EE5\u7405\u6994\u72FC\u5ECA\u90CE\u6717\u6D6A\u635E\u52B3\u7262\u8001\u4F6C\u59E5\u916A\u70D9\u6D9D\u52D2\u4E50\u96F7\u956D\u857E\u78CA\u7D2F\u5121\u5792\u64C2\u808B\u7C7B\u6CEA\u68F1\u695E\u51B7\u5398\u68A8\u7281\u9ECE\u7BF1\u72F8\u79BB\u6F13\u7406\u674E\u91CC\u9CA4\u793C\u8389\u8354\u540F\u6817\u4E3D\u5389\u52B1\u783E\u5386\u5229\u5088\u4F8B\u4FD0\uFFFD".split("");
      for (j = 0; j != D[192].length; ++j) if (D[192][j].charCodeAt(0) !== 65533) {
        e[D[192][j]] = 49152 + j;
        d[49152 + j] = D[192][j];
      }
      D[193] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u75E2\u7ACB\u7C92\u6CA5\u96B6\u529B\u7483\u54E9\u4FE9\u8054\u83B2\u8FDE\u9570\u5EC9\u601C\u6D9F\u5E18\u655B\u8138\u94FE\u604B\u70BC\u7EC3\u7CAE\u51C9\u6881\u7CB1\u826F\u4E24\u8F86\u91CF\u667E\u4EAE\u8C05\u64A9\u804A\u50DA\u7597\u71CE\u5BE5\u8FBD\u6F66\u4E86\u6482\u9563\u5ED6\u6599\u5217\u88C2\u70C8\u52A3\u730E\u7433\u6797\u78F7\u9716\u4E34\u90BB\u9CDE\u6DCB\u51DB\u8D41\u541D\u62CE\u73B2\u83F1\u96F6\u9F84\u94C3\u4F36\u7F9A\u51CC\u7075\u9675\u5CAD\u9886\u53E6\u4EE4\u6E9C\u7409\u69B4\u786B\u998F\u7559\u5218\u7624\u6D41\u67F3\u516D\u9F99\u804B\u5499\u7B3C\u7ABF\uFFFD".split("");
      for (j = 0; j != D[193].length; ++j) if (D[193][j].charCodeAt(0) !== 65533) {
        e[D[193][j]] = 49408 + j;
        d[49408 + j] = D[193][j];
      }
      D[194] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9686\u5784\u62E2\u9647\u697C\u5A04\u6402\u7BD3\u6F0F\u964B\u82A6\u5362\u9885\u5E90\u7089\u63B3\u5364\u864F\u9C81\u9E93\u788C\u9732\u8DEF\u8D42\u9E7F\u6F5E\u7984\u5F55\u9646\u622E\u9A74\u5415\u94DD\u4FA3\u65C5\u5C65\u5C61\u7F15\u8651\u6C2F\u5F8B\u7387\u6EE4\u7EFF\u5CE6\u631B\u5B6A\u6EE6\u5375\u4E71\u63A0\u7565\u62A1\u8F6E\u4F26\u4ED1\u6CA6\u7EB6\u8BBA\u841D\u87BA\u7F57\u903B\u9523\u7BA9\u9AA1\u88F8\u843D\u6D1B\u9A86\u7EDC\u5988\u9EBB\u739B\u7801\u8682\u9A6C\u9A82\u561B\u5417\u57CB\u4E70\u9EA6\u5356\u8FC8\u8109\u7792\u9992\u86EE\u6EE1\u8513\u66FC\u6162\u6F2B\uFFFD".split("");
      for (j = 0; j != D[194].length; ++j) if (D[194][j].charCodeAt(0) !== 65533) {
        e[D[194][j]] = 49664 + j;
        d[49664 + j] = D[194][j];
      }
      D[195] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8C29\u8292\u832B\u76F2\u6C13\u5FD9\u83BD\u732B\u8305\u951A\u6BDB\u77DB\u94C6\u536F\u8302\u5192\u5E3D\u8C8C\u8D38\u4E48\u73AB\u679A\u6885\u9176\u9709\u7164\u6CA1\u7709\u5A92\u9541\u6BCF\u7F8E\u6627\u5BD0\u59B9\u5A9A\u95E8\u95F7\u4EEC\u840C\u8499\u6AAC\u76DF\u9530\u731B\u68A6\u5B5F\u772F\u919A\u9761\u7CDC\u8FF7\u8C1C\u5F25\u7C73\u79D8\u89C5\u6CCC\u871C\u5BC6\u5E42\u68C9\u7720\u7EF5\u5195\u514D\u52C9\u5A29\u7F05\u9762\u82D7\u63CF\u7784\u85D0\u79D2\u6E3A\u5E99\u5999\u8511\u706D\u6C11\u62BF\u76BF\u654F\u60AF\u95FD\u660E\u879F\u9E23\u94ED\u540D\u547D\u8C2C\u6478\uFFFD".split("");
      for (j = 0; j != D[195].length; ++j) if (D[195][j].charCodeAt(0) !== 65533) {
        e[D[195][j]] = 49920 + j;
        d[49920 + j] = D[195][j];
      }
      D[196] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6479\u8611\u6A21\u819C\u78E8\u6469\u9B54\u62B9\u672B\u83AB\u58A8\u9ED8\u6CAB\u6F20\u5BDE\u964C\u8C0B\u725F\u67D0\u62C7\u7261\u4EA9\u59C6\u6BCD\u5893\u66AE\u5E55\u52DF\u6155\u6728\u76EE\u7766\u7267\u7A46\u62FF\u54EA\u5450\u94A0\u90A3\u5A1C\u7EB3\u6C16\u4E43\u5976\u8010\u5948\u5357\u7537\u96BE\u56CA\u6320\u8111\u607C\u95F9\u6DD6\u5462\u9981\u5185\u5AE9\u80FD\u59AE\u9713\u502A\u6CE5\u5C3C\u62DF\u4F60\u533F\u817B\u9006\u6EBA\u852B\u62C8\u5E74\u78BE\u64B5\u637B\u5FF5\u5A18\u917F\u9E1F\u5C3F\u634F\u8042\u5B7D\u556E\u954A\u954D\u6D85\u60A8\u67E0\u72DE\u51DD\u5B81\uFFFD".split("");
      for (j = 0; j != D[196].length; ++j) if (D[196][j].charCodeAt(0) !== 65533) {
        e[D[196][j]] = 50176 + j;
        d[50176 + j] = D[196][j];
      }
      D[197] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u62E7\u6CDE\u725B\u626D\u94AE\u7EBD\u8113\u6D53\u519C\u5F04\u5974\u52AA\u6012\u5973\u6696\u8650\u759F\u632A\u61E6\u7CEF\u8BFA\u54E6\u6B27\u9E25\u6BB4\u85D5\u5455\u5076\u6CA4\u556A\u8DB4\u722C\u5E15\u6015\u7436\u62CD\u6392\u724C\u5F98\u6E43\u6D3E\u6500\u6F58\u76D8\u78D0\u76FC\u7554\u5224\u53DB\u4E53\u5E9E\u65C1\u802A\u80D6\u629B\u5486\u5228\u70AE\u888D\u8DD1\u6CE1\u5478\u80DA\u57F9\u88F4\u8D54\u966A\u914D\u4F69\u6C9B\u55B7\u76C6\u7830\u62A8\u70F9\u6F8E\u5F6D\u84EC\u68DA\u787C\u7BF7\u81A8\u670B\u9E4F\u6367\u78B0\u576F\u7812\u9739\u6279\u62AB\u5288\u7435\u6BD7\uFFFD".split("");
      for (j = 0; j != D[197].length; ++j) if (D[197][j].charCodeAt(0) !== 65533) {
        e[D[197][j]] = 50432 + j;
        d[50432 + j] = D[197][j];
      }
      D[198] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5564\u813E\u75B2\u76AE\u5339\u75DE\u50FB\u5C41\u8B6C\u7BC7\u504F\u7247\u9A97\u98D8\u6F02\u74E2\u7968\u6487\u77A5\u62FC\u9891\u8D2B\u54C1\u8058\u4E52\u576A\u82F9\u840D\u5E73\u51ED\u74F6\u8BC4\u5C4F\u5761\u6CFC\u9887\u5A46\u7834\u9B44\u8FEB\u7C95\u5256\u6251\u94FA\u4EC6\u8386\u8461\u83E9\u84B2\u57D4\u6734\u5703\u666E\u6D66\u8C31\u66DD\u7011\u671F\u6B3A\u6816\u621A\u59BB\u4E03\u51C4\u6F06\u67D2\u6C8F\u5176\u68CB\u5947\u6B67\u7566\u5D0E\u8110\u9F50\u65D7\u7948\u7941\u9A91\u8D77\u5C82\u4E5E\u4F01\u542F\u5951\u780C\u5668\u6C14\u8FC4\u5F03\u6C7D\u6CE3\u8BAB\u6390\uFFFD".split("");
      for (j = 0; j != D[198].length; ++j) if (D[198][j].charCodeAt(0) !== 65533) {
        e[D[198][j]] = 50688 + j;
        d[50688 + j] = D[198][j];
      }
      D[199] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6070\u6D3D\u7275\u6266\u948E\u94C5\u5343\u8FC1\u7B7E\u4EDF\u8C26\u4E7E\u9ED4\u94B1\u94B3\u524D\u6F5C\u9063\u6D45\u8C34\u5811\u5D4C\u6B20\u6B49\u67AA\u545B\u8154\u7F8C\u5899\u8537\u5F3A\u62A2\u6A47\u9539\u6572\u6084\u6865\u77A7\u4E54\u4FA8\u5DE7\u9798\u64AC\u7FD8\u5CED\u4FCF\u7A8D\u5207\u8304\u4E14\u602F\u7A83\u94A6\u4FB5\u4EB2\u79E6\u7434\u52E4\u82B9\u64D2\u79BD\u5BDD\u6C81\u9752\u8F7B\u6C22\u503E\u537F\u6E05\u64CE\u6674\u6C30\u60C5\u9877\u8BF7\u5E86\u743C\u7A77\u79CB\u4E18\u90B1\u7403\u6C42\u56DA\u914B\u6CC5\u8D8B\u533A\u86C6\u66F2\u8EAF\u5C48\u9A71\u6E20\uFFFD".split("");
      for (j = 0; j != D[199].length; ++j) if (D[199][j].charCodeAt(0) !== 65533) {
        e[D[199][j]] = 50944 + j;
        d[50944 + j] = D[199][j];
      }
      D[200] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u53D6\u5A36\u9F8B\u8DA3\u53BB\u5708\u98A7\u6743\u919B\u6CC9\u5168\u75CA\u62F3\u72AC\u5238\u529D\u7F3A\u7094\u7638\u5374\u9E4A\u69B7\u786E\u96C0\u88D9\u7FA4\u7136\u71C3\u5189\u67D3\u74E4\u58E4\u6518\u56B7\u8BA9\u9976\u6270\u7ED5\u60F9\u70ED\u58EC\u4EC1\u4EBA\u5FCD\u97E7\u4EFB\u8BA4\u5203\u598A\u7EAB\u6254\u4ECD\u65E5\u620E\u8338\u84C9\u8363\u878D\u7194\u6EB6\u5BB9\u7ED2\u5197\u63C9\u67D4\u8089\u8339\u8815\u5112\u5B7A\u5982\u8FB1\u4E73\u6C5D\u5165\u8925\u8F6F\u962E\u854A\u745E\u9510\u95F0\u6DA6\u82E5\u5F31\u6492\u6D12\u8428\u816E\u9CC3\u585E\u8D5B\u4E09\u53C1\uFFFD".split("");
      for (j = 0; j != D[200].length; ++j) if (D[200][j].charCodeAt(0) !== 65533) {
        e[D[200][j]] = 51200 + j;
        d[51200 + j] = D[200][j];
      }
      D[201] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u4F1E\u6563\u6851\u55D3\u4E27\u6414\u9A9A\u626B\u5AC2\u745F\u8272\u6DA9\u68EE\u50E7\u838E\u7802\u6740\u5239\u6C99\u7EB1\u50BB\u5565\u715E\u7B5B\u6652\u73CA\u82EB\u6749\u5C71\u5220\u717D\u886B\u95EA\u9655\u64C5\u8D61\u81B3\u5584\u6C55\u6247\u7F2E\u5892\u4F24\u5546\u8D4F\u664C\u4E0A\u5C1A\u88F3\u68A2\u634E\u7A0D\u70E7\u828D\u52FA\u97F6\u5C11\u54E8\u90B5\u7ECD\u5962\u8D4A\u86C7\u820C\u820D\u8D66\u6444\u5C04\u6151\u6D89\u793E\u8BBE\u7837\u7533\u547B\u4F38\u8EAB\u6DF1\u5A20\u7EC5\u795E\u6C88\u5BA1\u5A76\u751A\u80BE\u614E\u6E17\u58F0\u751F\u7525\u7272\u5347\u7EF3\uFFFD".split("");
      for (j = 0; j != D[201].length; ++j) if (D[201][j].charCodeAt(0) !== 65533) {
        e[D[201][j]] = 51456 + j;
        d[51456 + j] = D[201][j];
      }
      D[202] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7701\u76DB\u5269\u80DC\u5723\u5E08\u5931\u72EE\u65BD\u6E7F\u8BD7\u5C38\u8671\u5341\u77F3\u62FE\u65F6\u4EC0\u98DF\u8680\u5B9E\u8BC6\u53F2\u77E2\u4F7F\u5C4E\u9A76\u59CB\u5F0F\u793A\u58EB\u4E16\u67FF\u4E8B\u62ED\u8A93\u901D\u52BF\u662F\u55DC\u566C\u9002\u4ED5\u4F8D\u91CA\u9970\u6C0F\u5E02\u6043\u5BA4\u89C6\u8BD5\u6536\u624B\u9996\u5B88\u5BFF\u6388\u552E\u53D7\u7626\u517D\u852C\u67A2\u68B3\u6B8A\u6292\u8F93\u53D4\u8212\u6DD1\u758F\u4E66\u8D4E\u5B70\u719F\u85AF\u6691\u66D9\u7F72\u8700\u9ECD\u9F20\u5C5E\u672F\u8FF0\u6811\u675F\u620D\u7AD6\u5885\u5EB6\u6570\u6F31\uFFFD".split("");
      for (j = 0; j != D[202].length; ++j) if (D[202][j].charCodeAt(0) !== 65533) {
        e[D[202][j]] = 51712 + j;
        d[51712 + j] = D[202][j];
      }
      D[203] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6055\u5237\u800D\u6454\u8870\u7529\u5E05\u6813\u62F4\u971C\u53CC\u723D\u8C01\u6C34\u7761\u7A0E\u542E\u77AC\u987A\u821C\u8BF4\u7855\u6714\u70C1\u65AF\u6495\u5636\u601D\u79C1\u53F8\u4E1D\u6B7B\u8086\u5BFA\u55E3\u56DB\u4F3A\u4F3C\u9972\u5DF3\u677E\u8038\u6002\u9882\u9001\u5B8B\u8BBC\u8BF5\u641C\u8258\u64DE\u55FD\u82CF\u9165\u4FD7\u7D20\u901F\u7C9F\u50F3\u5851\u6EAF\u5BBF\u8BC9\u8083\u9178\u849C\u7B97\u867D\u968B\u968F\u7EE5\u9AD3\u788E\u5C81\u7A57\u9042\u96A7\u795F\u5B59\u635F\u7B0B\u84D1\u68AD\u5506\u7F29\u7410\u7D22\u9501\u6240\u584C\u4ED6\u5B83\u5979\u5854\uFFFD".split("");
      for (j = 0; j != D[203].length; ++j) if (D[203][j].charCodeAt(0) !== 65533) {
        e[D[203][j]] = 51968 + j;
        d[51968 + j] = D[203][j];
      }
      D[204] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u736D\u631E\u8E4B\u8E0F\u80CE\u82D4\u62AC\u53F0\u6CF0\u915E\u592A\u6001\u6C70\u574D\u644A\u8D2A\u762B\u6EE9\u575B\u6A80\u75F0\u6F6D\u8C2D\u8C08\u5766\u6BEF\u8892\u78B3\u63A2\u53F9\u70AD\u6C64\u5858\u642A\u5802\u68E0\u819B\u5510\u7CD6\u5018\u8EBA\u6DCC\u8D9F\u70EB\u638F\u6D9B\u6ED4\u7EE6\u8404\u6843\u9003\u6DD8\u9676\u8BA8\u5957\u7279\u85E4\u817E\u75BC\u8A8A\u68AF\u5254\u8E22\u9511\u63D0\u9898\u8E44\u557C\u4F53\u66FF\u568F\u60D5\u6D95\u5243\u5C49\u5929\u6DFB\u586B\u7530\u751C\u606C\u8214\u8146\u6311\u6761\u8FE2\u773A\u8DF3\u8D34\u94C1\u5E16\u5385\u542C\u70C3\uFFFD".split("");
      for (j = 0; j != D[204].length; ++j) if (D[204][j].charCodeAt(0) !== 65533) {
        e[D[204][j]] = 52224 + j;
        d[52224 + j] = D[204][j];
      }
      D[205] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6C40\u5EF7\u505C\u4EAD\u5EAD\u633A\u8247\u901A\u6850\u916E\u77B3\u540C\u94DC\u5F64\u7AE5\u6876\u6345\u7B52\u7EDF\u75DB\u5077\u6295\u5934\u900F\u51F8\u79C3\u7A81\u56FE\u5F92\u9014\u6D82\u5C60\u571F\u5410\u5154\u6E4D\u56E2\u63A8\u9893\u817F\u8715\u892A\u9000\u541E\u5C6F\u81C0\u62D6\u6258\u8131\u9E35\u9640\u9A6E\u9A7C\u692D\u59A5\u62D3\u553E\u6316\u54C7\u86D9\u6D3C\u5A03\u74E6\u889C\u6B6A\u5916\u8C4C\u5F2F\u6E7E\u73A9\u987D\u4E38\u70F7\u5B8C\u7897\u633D\u665A\u7696\u60CB\u5B9B\u5A49\u4E07\u8155\u6C6A\u738B\u4EA1\u6789\u7F51\u5F80\u65FA\u671B\u5FD8\u5984\u5A01\uFFFD".split("");
      for (j = 0; j != D[205].length; ++j) if (D[205][j].charCodeAt(0) !== 65533) {
        e[D[205][j]] = 52480 + j;
        d[52480 + j] = D[205][j];
      }
      D[206] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5DCD\u5FAE\u5371\u97E6\u8FDD\u6845\u56F4\u552F\u60DF\u4E3A\u6F4D\u7EF4\u82C7\u840E\u59D4\u4F1F\u4F2A\u5C3E\u7EAC\u672A\u851A\u5473\u754F\u80C3\u5582\u9B4F\u4F4D\u6E2D\u8C13\u5C09\u6170\u536B\u761F\u6E29\u868A\u6587\u95FB\u7EB9\u543B\u7A33\u7D0A\u95EE\u55E1\u7FC1\u74EE\u631D\u8717\u6DA1\u7A9D\u6211\u65A1\u5367\u63E1\u6C83\u5DEB\u545C\u94A8\u4E4C\u6C61\u8BEC\u5C4B\u65E0\u829C\u68A7\u543E\u5434\u6BCB\u6B66\u4E94\u6342\u5348\u821E\u4F0D\u4FAE\u575E\u620A\u96FE\u6664\u7269\u52FF\u52A1\u609F\u8BEF\u6614\u7199\u6790\u897F\u7852\u77FD\u6670\u563B\u5438\u9521\u727A\uFFFD".split("");
      for (j = 0; j != D[206].length; ++j) if (D[206][j].charCodeAt(0) !== 65533) {
        e[D[206][j]] = 52736 + j;
        d[52736 + j] = D[206][j];
      }
      D[207] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7A00\u606F\u5E0C\u6089\u819D\u5915\u60DC\u7184\u70EF\u6EAA\u6C50\u7280\u6A84\u88AD\u5E2D\u4E60\u5AB3\u559C\u94E3\u6D17\u7CFB\u9699\u620F\u7EC6\u778E\u867E\u5323\u971E\u8F96\u6687\u5CE1\u4FA0\u72ED\u4E0B\u53A6\u590F\u5413\u6380\u9528\u5148\u4ED9\u9C9C\u7EA4\u54B8\u8D24\u8854\u8237\u95F2\u6D8E\u5F26\u5ACC\u663E\u9669\u73B0\u732E\u53BF\u817A\u9985\u7FA1\u5BAA\u9677\u9650\u7EBF\u76F8\u53A2\u9576\u9999\u7BB1\u8944\u6E58\u4E61\u7FD4\u7965\u8BE6\u60F3\u54CD\u4EAB\u9879\u5DF7\u6A61\u50CF\u5411\u8C61\u8427\u785D\u9704\u524A\u54EE\u56A3\u9500\u6D88\u5BB5\u6DC6\u6653\uFFFD".split("");
      for (j = 0; j != D[207].length; ++j) if (D[207][j].charCodeAt(0) !== 65533) {
        e[D[207][j]] = 52992 + j;
        d[52992 + j] = D[207][j];
      }
      D[208] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5C0F\u5B5D\u6821\u8096\u5578\u7B11\u6548\u6954\u4E9B\u6B47\u874E\u978B\u534F\u631F\u643A\u90AA\u659C\u80C1\u8C10\u5199\u68B0\u5378\u87F9\u61C8\u6CC4\u6CFB\u8C22\u5C51\u85AA\u82AF\u950C\u6B23\u8F9B\u65B0\u5FFB\u5FC3\u4FE1\u8845\u661F\u8165\u7329\u60FA\u5174\u5211\u578B\u5F62\u90A2\u884C\u9192\u5E78\u674F\u6027\u59D3\u5144\u51F6\u80F8\u5308\u6C79\u96C4\u718A\u4F11\u4FEE\u7F9E\u673D\u55C5\u9508\u79C0\u8896\u7EE3\u589F\u620C\u9700\u865A\u5618\u987B\u5F90\u8BB8\u84C4\u9157\u53D9\u65ED\u5E8F\u755C\u6064\u7D6E\u5A7F\u7EEA\u7EED\u8F69\u55A7\u5BA3\u60AC\u65CB\u7384\uFFFD".split("");
      for (j = 0; j != D[208].length; ++j) if (D[208][j].charCodeAt(0) !== 65533) {
        e[D[208][j]] = 53248 + j;
        d[53248 + j] = D[208][j];
      }
      D[209] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9009\u7663\u7729\u7EDA\u9774\u859B\u5B66\u7A74\u96EA\u8840\u52CB\u718F\u5FAA\u65EC\u8BE2\u5BFB\u9A6F\u5DE1\u6B89\u6C5B\u8BAD\u8BAF\u900A\u8FC5\u538B\u62BC\u9E26\u9E2D\u5440\u4E2B\u82BD\u7259\u869C\u5D16\u8859\u6DAF\u96C5\u54D1\u4E9A\u8BB6\u7109\u54BD\u9609\u70DF\u6DF9\u76D0\u4E25\u7814\u8712\u5CA9\u5EF6\u8A00\u989C\u960E\u708E\u6CBF\u5944\u63A9\u773C\u884D\u6F14\u8273\u5830\u71D5\u538C\u781A\u96C1\u5501\u5F66\u7130\u5BB4\u8C1A\u9A8C\u6B83\u592E\u9E2F\u79E7\u6768\u626C\u4F6F\u75A1\u7F8A\u6D0B\u9633\u6C27\u4EF0\u75D2\u517B\u6837\u6F3E\u9080\u8170\u5996\u7476\uFFFD".split("");
      for (j = 0; j != D[209].length; ++j) if (D[209][j].charCodeAt(0) !== 65533) {
        e[D[209][j]] = 53504 + j;
        d[53504 + j] = D[209][j];
      }
      D[210] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6447\u5C27\u9065\u7A91\u8C23\u59DA\u54AC\u8200\u836F\u8981\u8000\u6930\u564E\u8036\u7237\u91CE\u51B6\u4E5F\u9875\u6396\u4E1A\u53F6\u66F3\u814B\u591C\u6DB2\u4E00\u58F9\u533B\u63D6\u94F1\u4F9D\u4F0A\u8863\u9890\u5937\u9057\u79FB\u4EEA\u80F0\u7591\u6C82\u5B9C\u59E8\u5F5D\u6905\u8681\u501A\u5DF2\u4E59\u77E3\u4EE5\u827A\u6291\u6613\u9091\u5C79\u4EBF\u5F79\u81C6\u9038\u8084\u75AB\u4EA6\u88D4\u610F\u6BC5\u5FC6\u4E49\u76CA\u6EA2\u8BE3\u8BAE\u8C0A\u8BD1\u5F02\u7FFC\u7FCC\u7ECE\u8335\u836B\u56E0\u6BB7\u97F3\u9634\u59FB\u541F\u94F6\u6DEB\u5BC5\u996E\u5C39\u5F15\u9690\uFFFD".split("");
      for (j = 0; j != D[210].length; ++j) if (D[210][j].charCodeAt(0) !== 65533) {
        e[D[210][j]] = 53760 + j;
        d[53760 + j] = D[210][j];
      }
      D[211] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5370\u82F1\u6A31\u5A74\u9E70\u5E94\u7F28\u83B9\u8424\u8425\u8367\u8747\u8FCE\u8D62\u76C8\u5F71\u9896\u786C\u6620\u54DF\u62E5\u4F63\u81C3\u75C8\u5EB8\u96CD\u8E0A\u86F9\u548F\u6CF3\u6D8C\u6C38\u607F\u52C7\u7528\u5E7D\u4F18\u60A0\u5FE7\u5C24\u7531\u90AE\u94C0\u72B9\u6CB9\u6E38\u9149\u6709\u53CB\u53F3\u4F51\u91C9\u8BF1\u53C8\u5E7C\u8FC2\u6DE4\u4E8E\u76C2\u6986\u865E\u611A\u8206\u4F59\u4FDE\u903E\u9C7C\u6109\u6E1D\u6E14\u9685\u4E88\u5A31\u96E8\u4E0E\u5C7F\u79B9\u5B87\u8BED\u7FBD\u7389\u57DF\u828B\u90C1\u5401\u9047\u55BB\u5CEA\u5FA1\u6108\u6B32\u72F1\u80B2\u8A89\uFFFD".split("");
      for (j = 0; j != D[211].length; ++j) if (D[211][j].charCodeAt(0) !== 65533) {
        e[D[211][j]] = 54016 + j;
        d[54016 + j] = D[211][j];
      }
      D[212] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6D74\u5BD3\u88D5\u9884\u8C6B\u9A6D\u9E33\u6E0A\u51A4\u5143\u57A3\u8881\u539F\u63F4\u8F95\u56ED\u5458\u5706\u733F\u6E90\u7F18\u8FDC\u82D1\u613F\u6028\u9662\u66F0\u7EA6\u8D8A\u8DC3\u94A5\u5CB3\u7CA4\u6708\u60A6\u9605\u8018\u4E91\u90E7\u5300\u9668\u5141\u8FD0\u8574\u915D\u6655\u97F5\u5B55\u531D\u7838\u6742\u683D\u54C9\u707E\u5BB0\u8F7D\u518D\u5728\u54B1\u6512\u6682\u8D5E\u8D43\u810F\u846C\u906D\u7CDF\u51FF\u85FB\u67A3\u65E9\u6FA1\u86A4\u8E81\u566A\u9020\u7682\u7076\u71E5\u8D23\u62E9\u5219\u6CFD\u8D3C\u600E\u589E\u618E\u66FE\u8D60\u624E\u55B3\u6E23\u672D\u8F67\uFFFD".split("");
      for (j = 0; j != D[212].length; ++j) if (D[212][j].charCodeAt(0) !== 65533) {
        e[D[212][j]] = 54272 + j;
        d[54272 + j] = D[212][j];
      }
      D[213] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u94E1\u95F8\u7728\u6805\u69A8\u548B\u4E4D\u70B8\u8BC8\u6458\u658B\u5B85\u7A84\u503A\u5BE8\u77BB\u6BE1\u8A79\u7C98\u6CBE\u76CF\u65A9\u8F97\u5D2D\u5C55\u8638\u6808\u5360\u6218\u7AD9\u6E5B\u7EFD\u6A1F\u7AE0\u5F70\u6F33\u5F20\u638C\u6DA8\u6756\u4E08\u5E10\u8D26\u4ED7\u80C0\u7634\u969C\u62DB\u662D\u627E\u6CBC\u8D75\u7167\u7F69\u5146\u8087\u53EC\u906E\u6298\u54F2\u86F0\u8F99\u8005\u9517\u8517\u8FD9\u6D59\u73CD\u659F\u771F\u7504\u7827\u81FB\u8D1E\u9488\u4FA6\u6795\u75B9\u8BCA\u9707\u632F\u9547\u9635\u84B8\u6323\u7741\u5F81\u72F0\u4E89\u6014\u6574\u62EF\u6B63\u653F\uFFFD".split("");
      for (j = 0; j != D[213].length; ++j) if (D[213][j].charCodeAt(0) !== 65533) {
        e[D[213][j]] = 54528 + j;
        d[54528 + j] = D[213][j];
      }
      D[214] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5E27\u75C7\u90D1\u8BC1\u829D\u679D\u652F\u5431\u8718\u77E5\u80A2\u8102\u6C41\u4E4B\u7EC7\u804C\u76F4\u690D\u6B96\u6267\u503C\u4F84\u5740\u6307\u6B62\u8DBE\u53EA\u65E8\u7EB8\u5FD7\u631A\u63B7\u81F3\u81F4\u7F6E\u5E1C\u5CD9\u5236\u667A\u79E9\u7A1A\u8D28\u7099\u75D4\u6EDE\u6CBB\u7A92\u4E2D\u76C5\u5FE0\u949F\u8877\u7EC8\u79CD\u80BF\u91CD\u4EF2\u4F17\u821F\u5468\u5DDE\u6D32\u8BCC\u7CA5\u8F74\u8098\u5E1A\u5492\u76B1\u5B99\u663C\u9AA4\u73E0\u682A\u86DB\u6731\u732A\u8BF8\u8BDB\u9010\u7AF9\u70DB\u716E\u62C4\u77A9\u5631\u4E3B\u8457\u67F1\u52A9\u86C0\u8D2E\u94F8\u7B51\uFFFD".split("");
      for (j = 0; j != D[214].length; ++j) if (D[214][j].charCodeAt(0) !== 65533) {
        e[D[214][j]] = 54784 + j;
        d[54784 + j] = D[214][j];
      }
      D[215] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u4F4F\u6CE8\u795D\u9A7B\u6293\u722A\u62FD\u4E13\u7816\u8F6C\u64B0\u8D5A\u7BC6\u6869\u5E84\u88C5\u5986\u649E\u58EE\u72B6\u690E\u9525\u8FFD\u8D58\u5760\u7F00\u8C06\u51C6\u6349\u62D9\u5353\u684C\u7422\u8301\u914C\u5544\u7740\u707C\u6D4A\u5179\u54A8\u8D44\u59FF\u6ECB\u6DC4\u5B5C\u7D2B\u4ED4\u7C7D\u6ED3\u5B50\u81EA\u6E0D\u5B57\u9B03\u68D5\u8E2A\u5B97\u7EFC\u603B\u7EB5\u90B9\u8D70\u594F\u63CD\u79DF\u8DB3\u5352\u65CF\u7956\u8BC5\u963B\u7EC4\u94BB\u7E82\u5634\u9189\u6700\u7F6A\u5C0A\u9075\u6628\u5DE6\u4F50\u67DE\u505A\u4F5C\u5750\u5EA7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD".split("");
      for (j = 0; j != D[215].length; ++j) if (D[215][j].charCodeAt(0) !== 65533) {
        e[D[215][j]] = 55040 + j;
        d[55040 + j] = D[215][j];
      }
      D[216] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u4E8D\u4E0C\u5140\u4E10\u5EFF\u5345\u4E15\u4E98\u4E1E\u9B32\u5B6C\u5669\u4E28\u79BA\u4E3F\u5315\u4E47\u592D\u723B\u536E\u6C10\u56DF\u80E4\u9997\u6BD3\u777E\u9F17\u4E36\u4E9F\u9F10\u4E5C\u4E69\u4E93\u8288\u5B5B\u556C\u560F\u4EC4\u538D\u539D\u53A3\u53A5\u53AE\u9765\u8D5D\u531A\u53F5\u5326\u532E\u533E\u8D5C\u5366\u5363\u5202\u5208\u520E\u522D\u5233\u523F\u5240\u524C\u525E\u5261\u525C\u84AF\u527D\u5282\u5281\u5290\u5293\u5182\u7F54\u4EBB\u4EC3\u4EC9\u4EC2\u4EE8\u4EE1\u4EEB\u4EDE\u4F1B\u4EF3\u4F22\u4F64\u4EF5\u4F25\u4F27\u4F09\u4F2B\u4F5E\u4F67\u6538\u4F5A\u4F5D\uFFFD".split("");
      for (j = 0; j != D[216].length; ++j) if (D[216][j].charCodeAt(0) !== 65533) {
        e[D[216][j]] = 55296 + j;
        d[55296 + j] = D[216][j];
      }
      D[217] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u4F5F\u4F57\u4F32\u4F3D\u4F76\u4F74\u4F91\u4F89\u4F83\u4F8F\u4F7E\u4F7B\u4FAA\u4F7C\u4FAC\u4F94\u4FE6\u4FE8\u4FEA\u4FC5\u4FDA\u4FE3\u4FDC\u4FD1\u4FDF\u4FF8\u5029\u504C\u4FF3\u502C\u500F\u502E\u502D\u4FFE\u501C\u500C\u5025\u5028\u507E\u5043\u5055\u5048\u504E\u506C\u507B\u50A5\u50A7\u50A9\u50BA\u50D6\u5106\u50ED\u50EC\u50E6\u50EE\u5107\u510B\u4EDD\u6C3D\u4F58\u4F65\u4FCE\u9FA0\u6C46\u7C74\u516E\u5DFD\u9EC9\u9998\u5181\u5914\u52F9\u530D\u8A07\u5310\u51EB\u5919\u5155\u4EA0\u5156\u4EB3\u886E\u88A4\u4EB5\u8114\u88D2\u7980\u5B34\u8803\u7FB8\u51AB\u51B1\u51BD\u51BC\uFFFD".split("");
      for (j = 0; j != D[217].length; ++j) if (D[217][j].charCodeAt(0) !== 65533) {
        e[D[217][j]] = 55552 + j;
        d[55552 + j] = D[217][j];
      }
      D[218] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u51C7\u5196\u51A2\u51A5\u8BA0\u8BA6\u8BA7\u8BAA\u8BB4\u8BB5\u8BB7\u8BC2\u8BC3\u8BCB\u8BCF\u8BCE\u8BD2\u8BD3\u8BD4\u8BD6\u8BD8\u8BD9\u8BDC\u8BDF\u8BE0\u8BE4\u8BE8\u8BE9\u8BEE\u8BF0\u8BF3\u8BF6\u8BF9\u8BFC\u8BFF\u8C00\u8C02\u8C04\u8C07\u8C0C\u8C0F\u8C11\u8C12\u8C14\u8C15\u8C16\u8C19\u8C1B\u8C18\u8C1D\u8C1F\u8C20\u8C21\u8C25\u8C27\u8C2A\u8C2B\u8C2E\u8C2F\u8C32\u8C33\u8C35\u8C36\u5369\u537A\u961D\u9622\u9621\u9631\u962A\u963D\u963C\u9642\u9649\u9654\u965F\u9667\u966C\u9672\u9674\u9688\u968D\u9697\u96B0\u9097\u909B\u909D\u9099\u90AC\u90A1\u90B4\u90B3\u90B6\u90BA\uFFFD".split("");
      for (j = 0; j != D[218].length; ++j) if (D[218][j].charCodeAt(0) !== 65533) {
        e[D[218][j]] = 55808 + j;
        d[55808 + j] = D[218][j];
      }
      D[219] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u90B8\u90B0\u90CF\u90C5\u90BE\u90D0\u90C4\u90C7\u90D3\u90E6\u90E2\u90DC\u90D7\u90DB\u90EB\u90EF\u90FE\u9104\u9122\u911E\u9123\u9131\u912F\u9139\u9143\u9146\u520D\u5942\u52A2\u52AC\u52AD\u52BE\u54FF\u52D0\u52D6\u52F0\u53DF\u71EE\u77CD\u5EF4\u51F5\u51FC\u9B2F\u53B6\u5F01\u755A\u5DEF\u574C\u57A9\u57A1\u587E\u58BC\u58C5\u58D1\u5729\u572C\u572A\u5733\u5739\u572E\u572F\u575C\u573B\u5742\u5769\u5785\u576B\u5786\u577C\u577B\u5768\u576D\u5776\u5773\u57AD\u57A4\u578C\u57B2\u57CF\u57A7\u57B4\u5793\u57A0\u57D5\u57D8\u57DA\u57D9\u57D2\u57B8\u57F4\u57EF\u57F8\u57E4\u57DD\uFFFD".split("");
      for (j = 0; j != D[219].length; ++j) if (D[219][j].charCodeAt(0) !== 65533) {
        e[D[219][j]] = 56064 + j;
        d[56064 + j] = D[219][j];
      }
      D[220] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u580B\u580D\u57FD\u57ED\u5800\u581E\u5819\u5844\u5820\u5865\u586C\u5881\u5889\u589A\u5880\u99A8\u9F19\u61FF\u8279\u827D\u827F\u828F\u828A\u82A8\u8284\u828E\u8291\u8297\u8299\u82AB\u82B8\u82BE\u82B0\u82C8\u82CA\u82E3\u8298\u82B7\u82AE\u82CB\u82CC\u82C1\u82A9\u82B4\u82A1\u82AA\u829F\u82C4\u82CE\u82A4\u82E1\u8309\u82F7\u82E4\u830F\u8307\u82DC\u82F4\u82D2\u82D8\u830C\u82FB\u82D3\u8311\u831A\u8306\u8314\u8315\u82E0\u82D5\u831C\u8351\u835B\u835C\u8308\u8392\u833C\u8334\u8331\u839B\u835E\u832F\u834F\u8347\u8343\u835F\u8340\u8317\u8360\u832D\u833A\u8333\u8366\u8365\uFFFD".split("");
      for (j = 0; j != D[220].length; ++j) if (D[220][j].charCodeAt(0) !== 65533) {
        e[D[220][j]] = 56320 + j;
        d[56320 + j] = D[220][j];
      }
      D[221] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8368\u831B\u8369\u836C\u836A\u836D\u836E\u83B0\u8378\u83B3\u83B4\u83A0\u83AA\u8393\u839C\u8385\u837C\u83B6\u83A9\u837D\u83B8\u837B\u8398\u839E\u83A8\u83BA\u83BC\u83C1\u8401\u83E5\u83D8\u5807\u8418\u840B\u83DD\u83FD\u83D6\u841C\u8438\u8411\u8406\u83D4\u83DF\u840F\u8403\u83F8\u83F9\u83EA\u83C5\u83C0\u8426\u83F0\u83E1\u845C\u8451\u845A\u8459\u8473\u8487\u8488\u847A\u8489\u8478\u843C\u8446\u8469\u8476\u848C\u848E\u8431\u846D\u84C1\u84CD\u84D0\u84E6\u84BD\u84D3\u84CA\u84BF\u84BA\u84E0\u84A1\u84B9\u84B4\u8497\u84E5\u84E3\u850C\u750D\u8538\u84F0\u8539\u851F\u853A\uFFFD".split("");
      for (j = 0; j != D[221].length; ++j) if (D[221][j].charCodeAt(0) !== 65533) {
        e[D[221][j]] = 56576 + j;
        d[56576 + j] = D[221][j];
      }
      D[222] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8556\u853B\u84FF\u84FC\u8559\u8548\u8568\u8564\u855E\u857A\u77A2\u8543\u8572\u857B\u85A4\u85A8\u8587\u858F\u8579\u85AE\u859C\u8585\u85B9\u85B7\u85B0\u85D3\u85C1\u85DC\u85FF\u8627\u8605\u8629\u8616\u863C\u5EFE\u5F08\u593C\u5941\u8037\u5955\u595A\u5958\u530F\u5C22\u5C25\u5C2C\u5C34\u624C\u626A\u629F\u62BB\u62CA\u62DA\u62D7\u62EE\u6322\u62F6\u6339\u634B\u6343\u63AD\u63F6\u6371\u637A\u638E\u63B4\u636D\u63AC\u638A\u6369\u63AE\u63BC\u63F2\u63F8\u63E0\u63FF\u63C4\u63DE\u63CE\u6452\u63C6\u63BE\u6445\u6441\u640B\u641B\u6420\u640C\u6426\u6421\u645E\u6484\u646D\u6496\uFFFD".split("");
      for (j = 0; j != D[222].length; ++j) if (D[222][j].charCodeAt(0) !== 65533) {
        e[D[222][j]] = 56832 + j;
        d[56832 + j] = D[222][j];
      }
      D[223] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u647A\u64B7\u64B8\u6499\u64BA\u64C0\u64D0\u64D7\u64E4\u64E2\u6509\u6525\u652E\u5F0B\u5FD2\u7519\u5F11\u535F\u53F1\u53FD\u53E9\u53E8\u53FB\u5412\u5416\u5406\u544B\u5452\u5453\u5454\u5456\u5443\u5421\u5457\u5459\u5423\u5432\u5482\u5494\u5477\u5471\u5464\u549A\u549B\u5484\u5476\u5466\u549D\u54D0\u54AD\u54C2\u54B4\u54D2\u54A7\u54A6\u54D3\u54D4\u5472\u54A3\u54D5\u54BB\u54BF\u54CC\u54D9\u54DA\u54DC\u54A9\u54AA\u54A4\u54DD\u54CF\u54DE\u551B\u54E7\u5520\u54FD\u5514\u54F3\u5522\u5523\u550F\u5511\u5527\u552A\u5567\u558F\u55B5\u5549\u556D\u5541\u5555\u553F\u5550\u553C\uFFFD".split("");
      for (j = 0; j != D[223].length; ++j) if (D[223][j].charCodeAt(0) !== 65533) {
        e[D[223][j]] = 57088 + j;
        d[57088 + j] = D[223][j];
      }
      D[224] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5537\u5556\u5575\u5576\u5577\u5533\u5530\u555C\u558B\u55D2\u5583\u55B1\u55B9\u5588\u5581\u559F\u557E\u55D6\u5591\u557B\u55DF\u55BD\u55BE\u5594\u5599\u55EA\u55F7\u55C9\u561F\u55D1\u55EB\u55EC\u55D4\u55E6\u55DD\u55C4\u55EF\u55E5\u55F2\u55F3\u55CC\u55CD\u55E8\u55F5\u55E4\u8F94\u561E\u5608\u560C\u5601\u5624\u5623\u55FE\u5600\u5627\u562D\u5658\u5639\u5657\u562C\u564D\u5662\u5659\u565C\u564C\u5654\u5686\u5664\u5671\u566B\u567B\u567C\u5685\u5693\u56AF\u56D4\u56D7\u56DD\u56E1\u56F5\u56EB\u56F9\u56FF\u5704\u570A\u5709\u571C\u5E0F\u5E19\u5E14\u5E11\u5E31\u5E3B\u5E3C\uFFFD".split("");
      for (j = 0; j != D[224].length; ++j) if (D[224][j].charCodeAt(0) !== 65533) {
        e[D[224][j]] = 57344 + j;
        d[57344 + j] = D[224][j];
      }
      D[225] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5E37\u5E44\u5E54\u5E5B\u5E5E\u5E61\u5C8C\u5C7A\u5C8D\u5C90\u5C96\u5C88\u5C98\u5C99\u5C91\u5C9A\u5C9C\u5CB5\u5CA2\u5CBD\u5CAC\u5CAB\u5CB1\u5CA3\u5CC1\u5CB7\u5CC4\u5CD2\u5CE4\u5CCB\u5CE5\u5D02\u5D03\u5D27\u5D26\u5D2E\u5D24\u5D1E\u5D06\u5D1B\u5D58\u5D3E\u5D34\u5D3D\u5D6C\u5D5B\u5D6F\u5D5D\u5D6B\u5D4B\u5D4A\u5D69\u5D74\u5D82\u5D99\u5D9D\u8C73\u5DB7\u5DC5\u5F73\u5F77\u5F82\u5F87\u5F89\u5F8C\u5F95\u5F99\u5F9C\u5FA8\u5FAD\u5FB5\u5FBC\u8862\u5F61\u72AD\u72B0\u72B4\u72B7\u72B8\u72C3\u72C1\u72CE\u72CD\u72D2\u72E8\u72EF\u72E9\u72F2\u72F4\u72F7\u7301\u72F3\u7303\u72FA\uFFFD".split("");
      for (j = 0; j != D[225].length; ++j) if (D[225][j].charCodeAt(0) !== 65533) {
        e[D[225][j]] = 57600 + j;
        d[57600 + j] = D[225][j];
      }
      D[226] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u72FB\u7317\u7313\u7321\u730A\u731E\u731D\u7315\u7322\u7339\u7325\u732C\u7338\u7331\u7350\u734D\u7357\u7360\u736C\u736F\u737E\u821B\u5925\u98E7\u5924\u5902\u9963\u9967\u9968\u9969\u996A\u996B\u996C\u9974\u9977\u997D\u9980\u9984\u9987\u998A\u998D\u9990\u9991\u9993\u9994\u9995\u5E80\u5E91\u5E8B\u5E96\u5EA5\u5EA0\u5EB9\u5EB5\u5EBE\u5EB3\u8D53\u5ED2\u5ED1\u5EDB\u5EE8\u5EEA\u81BA\u5FC4\u5FC9\u5FD6\u5FCF\u6003\u5FEE\u6004\u5FE1\u5FE4\u5FFE\u6005\u6006\u5FEA\u5FED\u5FF8\u6019\u6035\u6026\u601B\u600F\u600D\u6029\u602B\u600A\u603F\u6021\u6078\u6079\u607B\u607A\u6042\uFFFD".split("");
      for (j = 0; j != D[226].length; ++j) if (D[226][j].charCodeAt(0) !== 65533) {
        e[D[226][j]] = 57856 + j;
        d[57856 + j] = D[226][j];
      }
      D[227] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u606A\u607D\u6096\u609A\u60AD\u609D\u6083\u6092\u608C\u609B\u60EC\u60BB\u60B1\u60DD\u60D8\u60C6\u60DA\u60B4\u6120\u6126\u6115\u6123\u60F4\u6100\u610E\u612B\u614A\u6175\u61AC\u6194\u61A7\u61B7\u61D4\u61F5\u5FDD\u96B3\u95E9\u95EB\u95F1\u95F3\u95F5\u95F6\u95FC\u95FE\u9603\u9604\u9606\u9608\u960A\u960B\u960C\u960D\u960F\u9612\u9615\u9616\u9617\u9619\u961A\u4E2C\u723F\u6215\u6C35\u6C54\u6C5C\u6C4A\u6CA3\u6C85\u6C90\u6C94\u6C8C\u6C68\u6C69\u6C74\u6C76\u6C86\u6CA9\u6CD0\u6CD4\u6CAD\u6CF7\u6CF8\u6CF1\u6CD7\u6CB2\u6CE0\u6CD6\u6CFA\u6CEB\u6CEE\u6CB1\u6CD3\u6CEF\u6CFE\uFFFD".split("");
      for (j = 0; j != D[227].length; ++j) if (D[227][j].charCodeAt(0) !== 65533) {
        e[D[227][j]] = 58112 + j;
        d[58112 + j] = D[227][j];
      }
      D[228] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6D39\u6D27\u6D0C\u6D43\u6D48\u6D07\u6D04\u6D19\u6D0E\u6D2B\u6D4D\u6D2E\u6D35\u6D1A\u6D4F\u6D52\u6D54\u6D33\u6D91\u6D6F\u6D9E\u6DA0\u6D5E\u6D93\u6D94\u6D5C\u6D60\u6D7C\u6D63\u6E1A\u6DC7\u6DC5\u6DDE\u6E0E\u6DBF\u6DE0\u6E11\u6DE6\u6DDD\u6DD9\u6E16\u6DAB\u6E0C\u6DAE\u6E2B\u6E6E\u6E4E\u6E6B\u6EB2\u6E5F\u6E86\u6E53\u6E54\u6E32\u6E25\u6E44\u6EDF\u6EB1\u6E98\u6EE0\u6F2D\u6EE2\u6EA5\u6EA7\u6EBD\u6EBB\u6EB7\u6ED7\u6EB4\u6ECF\u6E8F\u6EC2\u6E9F\u6F62\u6F46\u6F47\u6F24\u6F15\u6EF9\u6F2F\u6F36\u6F4B\u6F74\u6F2A\u6F09\u6F29\u6F89\u6F8D\u6F8C\u6F78\u6F72\u6F7C\u6F7A\u6FD1\uFFFD".split("");
      for (j = 0; j != D[228].length; ++j) if (D[228][j].charCodeAt(0) !== 65533) {
        e[D[228][j]] = 58368 + j;
        d[58368 + j] = D[228][j];
      }
      D[229] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6FC9\u6FA7\u6FB9\u6FB6\u6FC2\u6FE1\u6FEE\u6FDE\u6FE0\u6FEF\u701A\u7023\u701B\u7039\u7035\u704F\u705E\u5B80\u5B84\u5B95\u5B93\u5BA5\u5BB8\u752F\u9A9E\u6434\u5BE4\u5BEE\u8930\u5BF0\u8E47\u8B07\u8FB6\u8FD3\u8FD5\u8FE5\u8FEE\u8FE4\u8FE9\u8FE6\u8FF3\u8FE8\u9005\u9004\u900B\u9026\u9011\u900D\u9016\u9021\u9035\u9036\u902D\u902F\u9044\u9051\u9052\u9050\u9068\u9058\u9062\u905B\u66B9\u9074\u907D\u9082\u9088\u9083\u908B\u5F50\u5F57\u5F56\u5F58\u5C3B\u54AB\u5C50\u5C59\u5B71\u5C63\u5C66\u7FBC\u5F2A\u5F29\u5F2D\u8274\u5F3C\u9B3B\u5C6E\u5981\u5983\u598D\u59A9\u59AA\u59A3\uFFFD".split("");
      for (j = 0; j != D[229].length; ++j) if (D[229][j].charCodeAt(0) !== 65533) {
        e[D[229][j]] = 58624 + j;
        d[58624 + j] = D[229][j];
      }
      D[230] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u5997\u59CA\u59AB\u599E\u59A4\u59D2\u59B2\u59AF\u59D7\u59BE\u5A05\u5A06\u59DD\u5A08\u59E3\u59D8\u59F9\u5A0C\u5A09\u5A32\u5A34\u5A11\u5A23\u5A13\u5A40\u5A67\u5A4A\u5A55\u5A3C\u5A62\u5A75\u80EC\u5AAA\u5A9B\u5A77\u5A7A\u5ABE\u5AEB\u5AB2\u5AD2\u5AD4\u5AB8\u5AE0\u5AE3\u5AF1\u5AD6\u5AE6\u5AD8\u5ADC\u5B09\u5B17\u5B16\u5B32\u5B37\u5B40\u5C15\u5C1C\u5B5A\u5B65\u5B73\u5B51\u5B53\u5B62\u9A75\u9A77\u9A78\u9A7A\u9A7F\u9A7D\u9A80\u9A81\u9A85\u9A88\u9A8A\u9A90\u9A92\u9A93\u9A96\u9A98\u9A9B\u9A9C\u9A9D\u9A9F\u9AA0\u9AA2\u9AA3\u9AA5\u9AA7\u7E9F\u7EA1\u7EA3\u7EA5\u7EA8\u7EA9\uFFFD".split("");
      for (j = 0; j != D[230].length; ++j) if (D[230][j].charCodeAt(0) !== 65533) {
        e[D[230][j]] = 58880 + j;
        d[58880 + j] = D[230][j];
      }
      D[231] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7EAD\u7EB0\u7EBE\u7EC0\u7EC1\u7EC2\u7EC9\u7ECB\u7ECC\u7ED0\u7ED4\u7ED7\u7EDB\u7EE0\u7EE1\u7EE8\u7EEB\u7EEE\u7EEF\u7EF1\u7EF2\u7F0D\u7EF6\u7EFA\u7EFB\u7EFE\u7F01\u7F02\u7F03\u7F07\u7F08\u7F0B\u7F0C\u7F0F\u7F11\u7F12\u7F17\u7F19\u7F1C\u7F1B\u7F1F\u7F21\u7F22\u7F23\u7F24\u7F25\u7F26\u7F27\u7F2A\u7F2B\u7F2C\u7F2D\u7F2F\u7F30\u7F31\u7F32\u7F33\u7F35\u5E7A\u757F\u5DDB\u753E\u9095\u738E\u7391\u73AE\u73A2\u739F\u73CF\u73C2\u73D1\u73B7\u73B3\u73C0\u73C9\u73C8\u73E5\u73D9\u987C\u740A\u73E9\u73E7\u73DE\u73BA\u73F2\u740F\u742A\u745B\u7426\u7425\u7428\u7430\u742E\u742C\uFFFD".split("");
      for (j = 0; j != D[231].length; ++j) if (D[231][j].charCodeAt(0) !== 65533) {
        e[D[231][j]] = 59136 + j;
        d[59136 + j] = D[231][j];
      }
      D[232] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u741B\u741A\u7441\u745C\u7457\u7455\u7459\u7477\u746D\u747E\u749C\u748E\u7480\u7481\u7487\u748B\u749E\u74A8\u74A9\u7490\u74A7\u74D2\u74BA\u97EA\u97EB\u97EC\u674C\u6753\u675E\u6748\u6769\u67A5\u6787\u676A\u6773\u6798\u67A7\u6775\u67A8\u679E\u67AD\u678B\u6777\u677C\u67F0\u6809\u67D8\u680A\u67E9\u67B0\u680C\u67D9\u67B5\u67DA\u67B3\u67DD\u6800\u67C3\u67B8\u67E2\u680E\u67C1\u67FD\u6832\u6833\u6860\u6861\u684E\u6862\u6844\u6864\u6883\u681D\u6855\u6866\u6841\u6867\u6840\u683E\u684A\u6849\u6829\u68B5\u688F\u6874\u6877\u6893\u686B\u68C2\u696E\u68FC\u691F\u6920\u68F9\uFFFD".split("");
      for (j = 0; j != D[232].length; ++j) if (D[232][j].charCodeAt(0) !== 65533) {
        e[D[232][j]] = 59392 + j;
        d[59392 + j] = D[232][j];
      }
      D[233] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u6924\u68F0\u690B\u6901\u6957\u68E3\u6910\u6971\u6939\u6960\u6942\u695D\u6984\u696B\u6980\u6998\u6978\u6934\u69CC\u6987\u6988\u69CE\u6989\u6966\u6963\u6979\u699B\u69A7\u69BB\u69AB\u69AD\u69D4\u69B1\u69C1\u69CA\u69DF\u6995\u69E0\u698D\u69FF\u6A2F\u69ED\u6A17\u6A18\u6A65\u69F2\u6A44\u6A3E\u6AA0\u6A50\u6A5B\u6A35\u6A8E\u6A79\u6A3D\u6A28\u6A58\u6A7C\u6A91\u6A90\u6AA9\u6A97\u6AAB\u7337\u7352\u6B81\u6B82\u6B87\u6B84\u6B92\u6B93\u6B8D\u6B9A\u6B9B\u6BA1\u6BAA\u8F6B\u8F6D\u8F71\u8F72\u8F73\u8F75\u8F76\u8F78\u8F77\u8F79\u8F7A\u8F7C\u8F7E\u8F81\u8F82\u8F84\u8F87\u8F8B\uFFFD".split("");
      for (j = 0; j != D[233].length; ++j) if (D[233][j].charCodeAt(0) !== 65533) {
        e[D[233][j]] = 59648 + j;
        d[59648 + j] = D[233][j];
      }
      D[234] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u8F8D\u8F8E\u8F8F\u8F98\u8F9A\u8ECE\u620B\u6217\u621B\u621F\u6222\u6221\u6225\u6224\u622C\u81E7\u74EF\u74F4\u74FF\u750F\u7511\u7513\u6534\u65EE\u65EF\u65F0\u660A\u6619\u6772\u6603\u6615\u6600\u7085\u66F7\u661D\u6634\u6631\u6636\u6635\u8006\u665F\u6654\u6641\u664F\u6656\u6661\u6657\u6677\u6684\u668C\u66A7\u669D\u66BE\u66DB\u66DC\u66E6\u66E9\u8D32\u8D33\u8D36\u8D3B\u8D3D\u8D40\u8D45\u8D46\u8D48\u8D49\u8D47\u8D4D\u8D55\u8D59\u89C7\u89CA\u89CB\u89CC\u89CE\u89CF\u89D0\u89D1\u726E\u729F\u725D\u7266\u726F\u727E\u727F\u7284\u728B\u728D\u728F\u7292\u6308\u6332\u63B0\uFFFD".split("");
      for (j = 0; j != D[234].length; ++j) if (D[234][j].charCodeAt(0) !== 65533) {
        e[D[234][j]] = 59904 + j;
        d[59904 + j] = D[234][j];
      }
      D[235] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u643F\u64D8\u8004\u6BEA\u6BF3\u6BFD\u6BF5\u6BF9\u6C05\u6C07\u6C06\u6C0D\u6C15\u6C18\u6C19\u6C1A\u6C21\u6C29\u6C24\u6C2A\u6C32\u6535\u6555\u656B\u724D\u7252\u7256\u7230\u8662\u5216\u809F\u809C\u8093\u80BC\u670A\u80BD\u80B1\u80AB\u80AD\u80B4\u80B7\u80E7\u80E8\u80E9\u80EA\u80DB\u80C2\u80C4\u80D9\u80CD\u80D7\u6710\u80DD\u80EB\u80F1\u80F4\u80ED\u810D\u810E\u80F2\u80FC\u6715\u8112\u8C5A\u8136\u811E\u812C\u8118\u8132\u8148\u814C\u8153\u8174\u8159\u815A\u8171\u8160\u8169\u817C\u817D\u816D\u8167\u584D\u5AB5\u8188\u8182\u8191\u6ED5\u81A3\u81AA\u81CC\u6726\u81CA\u81BB\uFFFD".split("");
      for (j = 0; j != D[235].length; ++j) if (D[235][j].charCodeAt(0) !== 65533) {
        e[D[235][j]] = 60160 + j;
        d[60160 + j] = D[235][j];
      }
      D[236] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u81C1\u81A6\u6B24\u6B37\u6B39\u6B43\u6B46\u6B59\u98D1\u98D2\u98D3\u98D5\u98D9\u98DA\u6BB3\u5F40\u6BC2\u89F3\u6590\u9F51\u6593\u65BC\u65C6\u65C4\u65C3\u65CC\u65CE\u65D2\u65D6\u7080\u709C\u7096\u709D\u70BB\u70C0\u70B7\u70AB\u70B1\u70E8\u70CA\u7110\u7113\u7116\u712F\u7131\u7173\u715C\u7168\u7145\u7172\u714A\u7178\u717A\u7198\u71B3\u71B5\u71A8\u71A0\u71E0\u71D4\u71E7\u71F9\u721D\u7228\u706C\u7118\u7166\u71B9\u623E\u623D\u6243\u6248\u6249\u793B\u7940\u7946\u7949\u795B\u795C\u7953\u795A\u7962\u7957\u7960\u796F\u7967\u797A\u7985\u798A\u799A\u79A7\u79B3\u5FD1\u5FD0\uFFFD".split("");
      for (j = 0; j != D[236].length; ++j) if (D[236][j].charCodeAt(0) !== 65533) {
        e[D[236][j]] = 60416 + j;
        d[60416 + j] = D[236][j];
      }
      D[237] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u603C\u605D\u605A\u6067\u6041\u6059\u6063\u60AB\u6106\u610D\u615D\u61A9\u619D\u61CB\u61D1\u6206\u8080\u807F\u6C93\u6CF6\u6DFC\u77F6\u77F8\u7800\u7809\u7817\u7818\u7811\u65AB\u782D\u781C\u781D\u7839\u783A\u783B\u781F\u783C\u7825\u782C\u7823\u7829\u784E\u786D\u7856\u7857\u7826\u7850\u7847\u784C\u786A\u789B\u7893\u789A\u7887\u789C\u78A1\u78A3\u78B2\u78B9\u78A5\u78D4\u78D9\u78C9\u78EC\u78F2\u7905\u78F4\u7913\u7924\u791E\u7934\u9F9B\u9EF9\u9EFB\u9EFC\u76F1\u7704\u770D\u76F9\u7707\u7708\u771A\u7722\u7719\u772D\u7726\u7735\u7738\u7750\u7751\u7747\u7743\u775A\u7768\uFFFD".split("");
      for (j = 0; j != D[237].length; ++j) if (D[237][j].charCodeAt(0) !== 65533) {
        e[D[237][j]] = 60672 + j;
        d[60672 + j] = D[237][j];
      }
      D[238] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7762\u7765\u777F\u778D\u777D\u7780\u778C\u7791\u779F\u77A0\u77B0\u77B5\u77BD\u753A\u7540\u754E\u754B\u7548\u755B\u7572\u7579\u7583\u7F58\u7F61\u7F5F\u8A48\u7F68\u7F74\u7F71\u7F79\u7F81\u7F7E\u76CD\u76E5\u8832\u9485\u9486\u9487\u948B\u948A\u948C\u948D\u948F\u9490\u9494\u9497\u9495\u949A\u949B\u949C\u94A3\u94A4\u94AB\u94AA\u94AD\u94AC\u94AF\u94B0\u94B2\u94B4\u94B6\u94B7\u94B8\u94B9\u94BA\u94BC\u94BD\u94BF\u94C4\u94C8\u94C9\u94CA\u94CB\u94CC\u94CD\u94CE\u94D0\u94D1\u94D2\u94D5\u94D6\u94D7\u94D9\u94D8\u94DB\u94DE\u94DF\u94E0\u94E2\u94E4\u94E5\u94E7\u94E8\u94EA\uFFFD".split("");
      for (j = 0; j != D[238].length; ++j) if (D[238][j].charCodeAt(0) !== 65533) {
        e[D[238][j]] = 60928 + j;
        d[60928 + j] = D[238][j];
      }
      D[239] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u94E9\u94EB\u94EE\u94EF\u94F3\u94F4\u94F5\u94F7\u94F9\u94FC\u94FD\u94FF\u9503\u9502\u9506\u9507\u9509\u950A\u950D\u950E\u950F\u9512\u9513\u9514\u9515\u9516\u9518\u951B\u951D\u951E\u951F\u9522\u952A\u952B\u9529\u952C\u9531\u9532\u9534\u9536\u9537\u9538\u953C\u953E\u953F\u9542\u9535\u9544\u9545\u9546\u9549\u954C\u954E\u954F\u9552\u9553\u9554\u9556\u9557\u9558\u9559\u955B\u955E\u955F\u955D\u9561\u9562\u9564\u9565\u9566\u9567\u9568\u9569\u956A\u956B\u956C\u956F\u9571\u9572\u9573\u953A\u77E7\u77EC\u96C9\u79D5\u79ED\u79E3\u79EB\u7A06\u5D47\u7A03\u7A02\u7A1E\u7A14\uFFFD".split("");
      for (j = 0; j != D[239].length; ++j) if (D[239][j].charCodeAt(0) !== 65533) {
        e[D[239][j]] = 61184 + j;
        d[61184 + j] = D[239][j];
      }
      D[240] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7A39\u7A37\u7A51\u9ECF\u99A5\u7A70\u7688\u768E\u7693\u7699\u76A4\u74DE\u74E0\u752C\u9E20\u9E22\u9E28\u9E29\u9E2A\u9E2B\u9E2C\u9E32\u9E31\u9E36\u9E38\u9E37\u9E39\u9E3A\u9E3E\u9E41\u9E42\u9E44\u9E46\u9E47\u9E48\u9E49\u9E4B\u9E4C\u9E4E\u9E51\u9E55\u9E57\u9E5A\u9E5B\u9E5C\u9E5E\u9E63\u9E66\u9E67\u9E68\u9E69\u9E6A\u9E6B\u9E6C\u9E71\u9E6D\u9E73\u7592\u7594\u7596\u75A0\u759D\u75AC\u75A3\u75B3\u75B4\u75B8\u75C4\u75B1\u75B0\u75C3\u75C2\u75D6\u75CD\u75E3\u75E8\u75E6\u75E4\u75EB\u75E7\u7603\u75F1\u75FC\u75FF\u7610\u7600\u7605\u760C\u7617\u760A\u7625\u7618\u7615\u7619\uFFFD".split("");
      for (j = 0; j != D[240].length; ++j) if (D[240][j].charCodeAt(0) !== 65533) {
        e[D[240][j]] = 61440 + j;
        d[61440 + j] = D[240][j];
      }
      D[241] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u761B\u763C\u7622\u7620\u7640\u762D\u7630\u763F\u7635\u7643\u763E\u7633\u764D\u765E\u7654\u765C\u7656\u766B\u766F\u7FCA\u7AE6\u7A78\u7A79\u7A80\u7A86\u7A88\u7A95\u7AA6\u7AA0\u7AAC\u7AA8\u7AAD\u7AB3\u8864\u8869\u8872\u887D\u887F\u8882\u88A2\u88C6\u88B7\u88BC\u88C9\u88E2\u88CE\u88E3\u88E5\u88F1\u891A\u88FC\u88E8\u88FE\u88F0\u8921\u8919\u8913\u891B\u890A\u8934\u892B\u8936\u8941\u8966\u897B\u758B\u80E5\u76B2\u76B4\u77DC\u8012\u8014\u8016\u801C\u8020\u8022\u8025\u8026\u8027\u8029\u8028\u8031\u800B\u8035\u8043\u8046\u804D\u8052\u8069\u8071\u8983\u9878\u9880\u9883\uFFFD".split("");
      for (j = 0; j != D[241].length; ++j) if (D[241][j].charCodeAt(0) !== 65533) {
        e[D[241][j]] = 61696 + j;
        d[61696 + j] = D[241][j];
      }
      D[242] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9889\u988C\u988D\u988F\u9894\u989A\u989B\u989E\u989F\u98A1\u98A2\u98A5\u98A6\u864D\u8654\u866C\u866E\u867F\u867A\u867C\u867B\u86A8\u868D\u868B\u86AC\u869D\u86A7\u86A3\u86AA\u8693\u86A9\u86B6\u86C4\u86B5\u86CE\u86B0\u86BA\u86B1\u86AF\u86C9\u86CF\u86B4\u86E9\u86F1\u86F2\u86ED\u86F3\u86D0\u8713\u86DE\u86F4\u86DF\u86D8\u86D1\u8703\u8707\u86F8\u8708\u870A\u870D\u8709\u8723\u873B\u871E\u8725\u872E\u871A\u873E\u8748\u8734\u8731\u8729\u8737\u873F\u8782\u8722\u877D\u877E\u877B\u8760\u8770\u874C\u876E\u878B\u8753\u8763\u877C\u8764\u8759\u8765\u8793\u87AF\u87A8\u87D2\uFFFD".split("");
      for (j = 0; j != D[242].length; ++j) if (D[242][j].charCodeAt(0) !== 65533) {
        e[D[242][j]] = 61952 + j;
        d[61952 + j] = D[242][j];
      }
      D[243] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u87C6\u8788\u8785\u87AD\u8797\u8783\u87AB\u87E5\u87AC\u87B5\u87B3\u87CB\u87D3\u87BD\u87D1\u87C0\u87CA\u87DB\u87EA\u87E0\u87EE\u8816\u8813\u87FE\u880A\u881B\u8821\u8839\u883C\u7F36\u7F42\u7F44\u7F45\u8210\u7AFA\u7AFD\u7B08\u7B03\u7B04\u7B15\u7B0A\u7B2B\u7B0F\u7B47\u7B38\u7B2A\u7B19\u7B2E\u7B31\u7B20\u7B25\u7B24\u7B33\u7B3E\u7B1E\u7B58\u7B5A\u7B45\u7B75\u7B4C\u7B5D\u7B60\u7B6E\u7B7B\u7B62\u7B72\u7B71\u7B90\u7BA6\u7BA7\u7BB8\u7BAC\u7B9D\u7BA8\u7B85\u7BAA\u7B9C\u7BA2\u7BAB\u7BB4\u7BD1\u7BC1\u7BCC\u7BDD\u7BDA\u7BE5\u7BE6\u7BEA\u7C0C\u7BFE\u7BFC\u7C0F\u7C16\u7C0B\uFFFD".split("");
      for (j = 0; j != D[243].length; ++j) if (D[243][j].charCodeAt(0) !== 65533) {
        e[D[243][j]] = 62208 + j;
        d[62208 + j] = D[243][j];
      }
      D[244] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u7C1F\u7C2A\u7C26\u7C38\u7C41\u7C40\u81FE\u8201\u8202\u8204\u81EC\u8844\u8221\u8222\u8223\u822D\u822F\u8228\u822B\u8238\u823B\u8233\u8234\u823E\u8244\u8249\u824B\u824F\u825A\u825F\u8268\u887E\u8885\u8888\u88D8\u88DF\u895E\u7F9D\u7F9F\u7FA7\u7FAF\u7FB0\u7FB2\u7C7C\u6549\u7C91\u7C9D\u7C9C\u7C9E\u7CA2\u7CB2\u7CBC\u7CBD\u7CC1\u7CC7\u7CCC\u7CCD\u7CC8\u7CC5\u7CD7\u7CE8\u826E\u66A8\u7FBF\u7FCE\u7FD5\u7FE5\u7FE1\u7FE6\u7FE9\u7FEE\u7FF3\u7CF8\u7D77\u7DA6\u7DAE\u7E47\u7E9B\u9EB8\u9EB4\u8D73\u8D84\u8D94\u8D91\u8DB1\u8D67\u8D6D\u8C47\u8C49\u914A\u9150\u914E\u914F\u9164\uFFFD".split("");
      for (j = 0; j != D[244].length; ++j) if (D[244][j].charCodeAt(0) !== 65533) {
        e[D[244][j]] = 62464 + j;
        d[62464 + j] = D[244][j];
      }
      D[245] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9162\u9161\u9170\u9169\u916F\u917D\u917E\u9172\u9174\u9179\u918C\u9185\u9190\u918D\u9191\u91A2\u91A3\u91AA\u91AD\u91AE\u91AF\u91B5\u91B4\u91BA\u8C55\u9E7E\u8DB8\u8DEB\u8E05\u8E59\u8E69\u8DB5\u8DBF\u8DBC\u8DBA\u8DC4\u8DD6\u8DD7\u8DDA\u8DDE\u8DCE\u8DCF\u8DDB\u8DC6\u8DEC\u8DF7\u8DF8\u8DE3\u8DF9\u8DFB\u8DE4\u8E09\u8DFD\u8E14\u8E1D\u8E1F\u8E2C\u8E2E\u8E23\u8E2F\u8E3A\u8E40\u8E39\u8E35\u8E3D\u8E31\u8E49\u8E41\u8E42\u8E51\u8E52\u8E4A\u8E70\u8E76\u8E7C\u8E6F\u8E74\u8E85\u8E8F\u8E94\u8E90\u8E9C\u8E9E\u8C78\u8C82\u8C8A\u8C85\u8C98\u8C94\u659B\u89D6\u89DE\u89DA\u89DC\uFFFD".split("");
      for (j = 0; j != D[245].length; ++j) if (D[245][j].charCodeAt(0) !== 65533) {
        e[D[245][j]] = 62720 + j;
        d[62720 + j] = D[245][j];
      }
      D[246] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u89E5\u89EB\u89EF\u8A3E\u8B26\u9753\u96E9\u96F3\u96EF\u9706\u9701\u9708\u970F\u970E\u972A\u972D\u9730\u973E\u9F80\u9F83\u9F85\u9F86\u9F87\u9F88\u9F89\u9F8A\u9F8C\u9EFE\u9F0B\u9F0D\u96B9\u96BC\u96BD\u96CE\u96D2\u77BF\u96E0\u928E\u92AE\u92C8\u933E\u936A\u93CA\u938F\u943E\u946B\u9C7F\u9C82\u9C85\u9C86\u9C87\u9C88\u7A23\u9C8B\u9C8E\u9C90\u9C91\u9C92\u9C94\u9C95\u9C9A\u9C9B\u9C9E\u9C9F\u9CA0\u9CA1\u9CA2\u9CA3\u9CA5\u9CA6\u9CA7\u9CA8\u9CA9\u9CAB\u9CAD\u9CAE\u9CB0\u9CB1\u9CB2\u9CB3\u9CB4\u9CB5\u9CB6\u9CB7\u9CBA\u9CBB\u9CBC\u9CBD\u9CC4\u9CC5\u9CC6\u9CC7\u9CCA\u9CCB\uFFFD".split("");
      for (j = 0; j != D[246].length; ++j) if (D[246][j].charCodeAt(0) !== 65533) {
        e[D[246][j]] = 62976 + j;
        d[62976 + j] = D[246][j];
      }
      D[247] = "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u9CCC\u9CCD\u9CCE\u9CCF\u9CD0\u9CD3\u9CD4\u9CD5\u9CD7\u9CD8\u9CD9\u9CDC\u9CDD\u9CDF\u9CE2\u977C\u9785\u9791\u9792\u9794\u97AF\u97AB\u97A3\u97B2\u97B4\u9AB1\u9AB0\u9AB7\u9E58\u9AB6\u9ABA\u9ABC\u9AC1\u9AC0\u9AC5\u9AC2\u9ACB\u9ACC\u9AD1\u9B45\u9B43\u9B47\u9B49\u9B48\u9B4D\u9B51\u98E8\u990D\u992E\u9955\u9954\u9ADF\u9AE1\u9AE6\u9AEF\u9AEB\u9AFB\u9AED\u9AF9\u9B08\u9B0F\u9B13\u9B1F\u9B23\u9EBD\u9EBE\u7E3B\u9E82\u9E87\u9E88\u9E8B\u9E92\u93D6\u9E9D\u9E9F\u9EDB\u9EDC\u9EDD\u9EE0\u9EDF\u9EE2\u9EE9\u9EE7\u9EE5\u9EEA\u9EEF\u9F22\u9F2C\u9F2F\u9F39\u9F37\u9F3D\u9F3E\u9F44\uFFFD".split("");
      for (j = 0; j != D[247].length; ++j) if (D[247][j].charCodeAt(0) !== 65533) {
        e[D[247][j]] = 63232 + j;
        d[63232 + j] = D[247][j];
      }
      return { "enc": e, "dec": d };
    }();
    cptable2[10029] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xC4\u0100\u0101\xC9\u0104\xD6\xDC\xE1\u0105\u010C\xE4\u010D\u0106\u0107\xE9\u0179\u017A\u010E\xED\u010F\u0112\u0113\u0116\xF3\u0117\xF4\xF6\xF5\xFA\u011A\u011B\xFC\u2020\xB0\u0118\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\u0119\xA8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\xAC\u221A\u0144\u0147\u2206\xAB\xBB\u2026\xA0\u0148\u0150\xD5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\xC1\u0164\u0165\xCD\u017D\u017E\u016A\xD3\xD4\u016B\u016E\xDA\u016F\u0170\u0171\u0172\u0173\xDD\xFD\u0137\u017B\u0141\u017C\u0122\u02C7", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[10079] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\xDD\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\xD0\xF0\xDE\xFE\xFD\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[10081] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\uFFFD\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    cptable2[28591] = function() {
      var d = "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF", D = [], e = {};
      for (var i = 0; i != d.length; ++i) {
        if (d.charCodeAt(i) !== 65533) e[d.charAt(i)] = i;
        D[i] = d.charAt(i);
      }
      return { "enc": e, "dec": D };
    }();
    if (typeof module !== "undefined" && module.exports && typeof DO_NOT_EXPORT_CODEPAGE === "undefined") module.exports = cptable2;
    (function(root, factory) {
      "use strict";
      if (typeof cptable2 === "undefined") {
        if (typeof __require !== "undefined") {
          var cpt = cptable2;
          if (typeof module !== "undefined" && module.exports && typeof DO_NOT_EXPORT_CODEPAGE === "undefined") module.exports = factory(cpt);
          else root.cptable = factory(cpt);
        } else throw new Error("cptable not found");
      } else cptable2 = factory(cptable2);
    })(exports, function(cpt) {
      "use strict";
      var magic = {
        "1200": "utf16le",
        "1201": "utf16be",
        "12000": "utf32le",
        "12001": "utf32be",
        "16969": "utf64le",
        "20127": "ascii",
        "65000": "utf7",
        "65001": "utf8"
      };
      var sbcs_cache = [874, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1e4];
      var dbcs_cache = [932, 936, 949, 950];
      var magic_cache = [65001];
      var magic_decode = {};
      var magic_encode = {};
      var cpdcache = {};
      var cpecache = {};
      var sfcc = function sfcc2(x) {
        return String.fromCharCode(x);
      };
      var cca = function cca2(x) {
        return x.charCodeAt(0);
      };
      var has_buf = typeof Buffer !== "undefined";
      var Buffer_from = function() {
      };
      if (has_buf) {
        var nbfs = !Buffer.from;
        if (!nbfs) try {
          Buffer.from("foo", "utf8");
        } catch (e) {
          nbfs = true;
        }
        Buffer_from = nbfs ? function(buf, enc) {
          return enc ? new Buffer(buf, enc) : new Buffer(buf);
        } : Buffer.from.bind(Buffer);
        if (!Buffer.allocUnsafe) Buffer.allocUnsafe = function(n) {
          return new Buffer(n);
        };
        var mdl = 1024, mdb = Buffer.allocUnsafe(mdl);
        var make_EE = function make_EE2(E) {
          var EE = Buffer.allocUnsafe(65536);
          for (var i = 0; i < 65536; ++i) EE[i] = 0;
          var keys = Object.keys(E), len = keys.length;
          for (var ee = 0, e = keys[ee]; ee < len; ++ee) {
            if (!(e = keys[ee])) continue;
            EE[e.charCodeAt(0)] = E[e];
          }
          return EE;
        };
        var sbcs_encode = function make_sbcs_encode(cp) {
          var EE = make_EE(cpt[cp].enc);
          return function sbcs_e(data, ofmt) {
            var len = data.length;
            var out, i = 0, j = 0, D = 0, w = 0;
            if (typeof data === "string") {
              out = Buffer.allocUnsafe(len);
              for (i = 0; i < len; ++i) out[i] = EE[data.charCodeAt(i)];
            } else if (Buffer.isBuffer(data)) {
              out = Buffer.allocUnsafe(2 * len);
              j = 0;
              for (i = 0; i < len; ++i) {
                D = data[i];
                if (D < 128) out[j++] = EE[D];
                else if (D < 224) {
                  out[j++] = EE[((D & 31) << 6) + (data[i + 1] & 63)];
                  ++i;
                } else if (D < 240) {
                  out[j++] = EE[((D & 15) << 12) + ((data[i + 1] & 63) << 6) + (data[i + 2] & 63)];
                  i += 2;
                } else {
                  w = ((D & 7) << 18) + ((data[i + 1] & 63) << 12) + ((data[i + 2] & 63) << 6) + (data[i + 3] & 63);
                  i += 3;
                  if (w < 65536) out[j++] = EE[w];
                  else {
                    w -= 65536;
                    out[j++] = EE[55296 + (w >> 10 & 1023)];
                    out[j++] = EE[56320 + (w & 1023)];
                  }
                }
              }
              out = out.slice(0, j);
            } else {
              out = Buffer.allocUnsafe(len);
              for (i = 0; i < len; ++i) out[i] = EE[data[i].charCodeAt(0)];
            }
            if (!ofmt || ofmt === "buf") return out;
            if (ofmt !== "arr") return out.toString("binary");
            return [].slice.call(out);
          };
        };
        var sbcs_decode = function make_sbcs_decode(cp) {
          var D = cpt[cp].dec;
          var DD = Buffer.allocUnsafe(131072), d = 0, c = "";
          for (d = 0; d < D.length; ++d) {
            if (!(c = D[d])) continue;
            var w = c.charCodeAt(0);
            DD[2 * d] = w & 255;
            DD[2 * d + 1] = w >> 8;
          }
          return function sbcs_d(data) {
            var len = data.length, i = 0, j = 0;
            if (2 * len > mdl) {
              mdl = 2 * len;
              mdb = Buffer.allocUnsafe(mdl);
            }
            if (Buffer.isBuffer(data)) {
              for (i = 0; i < len; i++) {
                j = 2 * data[i];
                mdb[2 * i] = DD[j];
                mdb[2 * i + 1] = DD[j + 1];
              }
            } else if (typeof data === "string") {
              for (i = 0; i < len; i++) {
                j = 2 * data.charCodeAt(i);
                mdb[2 * i] = DD[j];
                mdb[2 * i + 1] = DD[j + 1];
              }
            } else {
              for (i = 0; i < len; i++) {
                j = 2 * data[i];
                mdb[2 * i] = DD[j];
                mdb[2 * i + 1] = DD[j + 1];
              }
            }
            return mdb.slice(0, 2 * len).toString("ucs2");
          };
        };
        var dbcs_encode = function make_dbcs_encode(cp) {
          var E = cpt[cp].enc;
          var EE = Buffer.allocUnsafe(131072);
          for (var i = 0; i < 131072; ++i) EE[i] = 0;
          var keys = Object.keys(E);
          for (var ee = 0, e = keys[ee]; ee < keys.length; ++ee) {
            if (!(e = keys[ee])) continue;
            var f = e.charCodeAt(0);
            EE[2 * f] = E[e] & 255;
            EE[2 * f + 1] = E[e] >> 8;
          }
          return function dbcs_e(data, ofmt) {
            var len = data.length, out = Buffer.allocUnsafe(2 * len), i2 = 0, j = 0, jj = 0, k = 0, D = 0;
            if (typeof data === "string") {
              for (i2 = k = 0; i2 < len; ++i2) {
                j = data.charCodeAt(i2) * 2;
                out[k++] = EE[j + 1] || EE[j];
                if (EE[j + 1] > 0) out[k++] = EE[j];
              }
              out = out.slice(0, k);
            } else if (Buffer.isBuffer(data)) {
              for (i2 = k = 0; i2 < len; ++i2) {
                D = data[i2];
                if (D < 128) j = D;
                else if (D < 224) {
                  j = ((D & 31) << 6) + (data[i2 + 1] & 63);
                  ++i2;
                } else if (D < 240) {
                  j = ((D & 15) << 12) + ((data[i2 + 1] & 63) << 6) + (data[i2 + 2] & 63);
                  i2 += 2;
                } else {
                  j = ((D & 7) << 18) + ((data[i2 + 1] & 63) << 12) + ((data[i2 + 2] & 63) << 6) + (data[i2 + 3] & 63);
                  i2 += 3;
                }
                if (j < 65536) {
                  j *= 2;
                  out[k++] = EE[j + 1] || EE[j];
                  if (EE[j + 1] > 0) out[k++] = EE[j];
                } else {
                  jj = j - 65536;
                  j = 2 * (55296 + (jj >> 10 & 1023));
                  out[k++] = EE[j + 1] || EE[j];
                  if (EE[j + 1] > 0) out[k++] = EE[j];
                  j = 2 * (56320 + (jj & 1023));
                  out[k++] = EE[j + 1] || EE[j];
                  if (EE[j + 1] > 0) out[k++] = EE[j];
                }
              }
              out = out.slice(0, k);
            } else {
              for (i2 = k = 0; i2 < len; i2++) {
                j = data[i2].charCodeAt(0) * 2;
                out[k++] = EE[j + 1] || EE[j];
                if (EE[j + 1] > 0) out[k++] = EE[j];
              }
            }
            if (!ofmt || ofmt === "buf") return out;
            if (ofmt !== "arr") return out.toString("binary");
            return [].slice.call(out);
          };
        };
        var dbcs_decode = function make_dbcs_decode(cp) {
          var D = cpt[cp].dec;
          var DD = Buffer.allocUnsafe(131072), d = 0, c, w = 0, j = 0, i = 0;
          for (i = 0; i < 65536; ++i) {
            DD[2 * i] = 255;
            DD[2 * i + 1] = 253;
          }
          for (d = 0; d < D.length; ++d) {
            if (!(c = D[d])) continue;
            w = c.charCodeAt(0);
            j = 2 * d;
            DD[j] = w & 255;
            DD[j + 1] = w >> 8;
          }
          return function dbcs_d(data) {
            var len = data.length, out = Buffer.allocUnsafe(2 * len), i2 = 0, j2 = 0, k = 0;
            if (Buffer.isBuffer(data)) {
              for (i2 = 0; i2 < len; i2++) {
                j2 = 2 * data[i2];
                if (DD[j2] === 255 && DD[j2 + 1] === 253) {
                  j2 = 2 * ((data[i2] << 8) + data[i2 + 1]);
                  ++i2;
                }
                out[k++] = DD[j2];
                out[k++] = DD[j2 + 1];
              }
            } else if (typeof data === "string") {
              for (i2 = 0; i2 < len; i2++) {
                j2 = 2 * data.charCodeAt(i2);
                if (DD[j2] === 255 && DD[j2 + 1] === 253) {
                  j2 = 2 * ((data.charCodeAt(i2) << 8) + data.charCodeAt(i2 + 1));
                  ++i2;
                }
                out[k++] = DD[j2];
                out[k++] = DD[j2 + 1];
              }
            } else {
              for (i2 = 0; i2 < len; i2++) {
                j2 = 2 * data[i2];
                if (DD[j2] === 255 && DD[j2 + 1] === 253) {
                  j2 = 2 * ((data[i2] << 8) + data[i2 + 1]);
                  ++i2;
                }
                out[k++] = DD[j2];
                out[k++] = DD[j2 + 1];
              }
            }
            return out.slice(0, k).toString("ucs2");
          };
        };
        magic_decode[65001] = function utf8_d(data) {
          if (typeof data === "string") return utf8_d(data.split("").map(cca));
          var len = data.length, w = 0, ww = 0;
          if (4 * len > mdl) {
            mdl = 4 * len;
            mdb = Buffer.allocUnsafe(mdl);
          }
          var i = 0;
          if (len >= 3 && data[0] == 239) {
            if (data[1] == 187 && data[2] == 191) i = 3;
          }
          for (var j = 1, k = 0, D = 0; i < len; i += j) {
            j = 1;
            D = data[i];
            if (D < 128) w = D;
            else if (D < 224) {
              w = (D & 31) * 64 + (data[i + 1] & 63);
              j = 2;
            } else if (D < 240) {
              w = ((D & 15) << 12) + (data[i + 1] & 63) * 64 + (data[i + 2] & 63);
              j = 3;
            } else {
              w = (D & 7) * 262144 + ((data[i + 1] & 63) << 12) + (data[i + 2] & 63) * 64 + (data[i + 3] & 63);
              j = 4;
            }
            if (w < 65536) {
              mdb[k++] = w & 255;
              mdb[k++] = w >> 8;
            } else {
              w -= 65536;
              ww = 55296 + (w >> 10 & 1023);
              w = 56320 + (w & 1023);
              mdb[k++] = ww & 255;
              mdb[k++] = ww >>> 8;
              mdb[k++] = w & 255;
              mdb[k++] = w >>> 8 & 255;
            }
          }
          return mdb.slice(0, k).toString("ucs2");
        };
        magic_encode[65001] = function utf8_e(data, ofmt) {
          if (has_buf && Buffer.isBuffer(data)) {
            if (!ofmt || ofmt === "buf") return data;
            if (ofmt !== "arr") return data.toString("binary");
            return [].slice.call(data);
          }
          var len = data.length, w = 0, ww = 0, j = 0;
          var direct = typeof data === "string";
          if (4 * len > mdl) {
            mdl = 4 * len;
            mdb = Buffer.allocUnsafe(mdl);
          }
          for (var i = 0; i < len; ++i) {
            w = direct ? data.charCodeAt(i) : data[i].charCodeAt(0);
            if (w <= 127) mdb[j++] = w;
            else if (w <= 2047) {
              mdb[j++] = 192 + (w >> 6);
              mdb[j++] = 128 + (w & 63);
            } else if (w >= 55296 && w <= 57343) {
              w -= 55296;
              ++i;
              ww = (direct ? data.charCodeAt(i) : data[i].charCodeAt(0)) - 56320 + (w << 10);
              mdb[j++] = 240 + (ww >>> 18 & 7);
              mdb[j++] = 144 + (ww >>> 12 & 63);
              mdb[j++] = 128 + (ww >>> 6 & 63);
              mdb[j++] = 128 + (ww & 63);
            } else {
              mdb[j++] = 224 + (w >> 12);
              mdb[j++] = 128 + (w >> 6 & 63);
              mdb[j++] = 128 + (w & 63);
            }
          }
          if (!ofmt || ofmt === "buf") return mdb.slice(0, j);
          if (ofmt !== "arr") return mdb.slice(0, j).toString("binary");
          return [].slice.call(mdb, 0, j);
        };
      }
      var encache = function encache2() {
        if (has_buf) {
          if (cpdcache[sbcs_cache[0]]) return;
          var i = 0, s = 0;
          for (i = 0; i < sbcs_cache.length; ++i) {
            s = sbcs_cache[i];
            if (cpt[s]) {
              cpdcache[s] = sbcs_decode(s);
              cpecache[s] = sbcs_encode(s);
            }
          }
          for (i = 0; i < dbcs_cache.length; ++i) {
            s = dbcs_cache[i];
            if (cpt[s]) {
              cpdcache[s] = dbcs_decode(s);
              cpecache[s] = dbcs_encode(s);
            }
          }
          for (i = 0; i < magic_cache.length; ++i) {
            s = magic_cache[i];
            if (magic_decode[s]) cpdcache[s] = magic_decode[s];
            if (magic_encode[s]) cpecache[s] = magic_encode[s];
          }
        }
      };
      var null_enc = function(data, ofmt) {
        return "";
      };
      var cp_decache = function cp_decache2(cp) {
        delete cpdcache[cp];
        delete cpecache[cp];
      };
      var decache = function decache2() {
        if (has_buf) {
          if (!cpdcache[sbcs_cache[0]]) return;
          sbcs_cache.forEach(cp_decache);
          dbcs_cache.forEach(cp_decache);
          magic_cache.forEach(cp_decache);
        }
        last_enc = null_enc;
        last_cp = 0;
      };
      var cache = {
        encache,
        decache,
        sbcs: sbcs_cache,
        dbcs: dbcs_cache
      };
      encache();
      var BM = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
      var SetD = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'(),-./:?";
      var last_enc = null_enc, last_cp = 0;
      var encode = function encode2(cp, data, ofmt) {
        if (cp === last_cp && last_enc) {
          return last_enc(data, ofmt);
        }
        if (cpecache[cp]) {
          last_enc = cpecache[last_cp = cp];
          return last_enc(data, ofmt);
        }
        if (has_buf && Buffer.isBuffer(data)) data = data.toString("utf8");
        var len = data.length;
        var out = has_buf ? Buffer.allocUnsafe(4 * len) : [], w = 0, i = 0, j = 0, ww = 0;
        var C = cpt[cp], E, M = "";
        var isstr = typeof data === "string";
        if (C && (E = C.enc)) for (i = 0; i < len; ++i, ++j) {
          w = E[isstr ? data.charAt(i) : data[i]];
          if (w > 255) {
            out[j] = w >> 8;
            out[++j] = w & 255;
          } else out[j] = w & 255;
        }
        else if (M = magic[cp]) switch (M) {
          case "utf8":
            if (has_buf && isstr) {
              out = Buffer_from(data, M);
              j = out.length;
              break;
            }
            for (i = 0; i < len; ++i, ++j) {
              w = isstr ? data.charCodeAt(i) : data[i].charCodeAt(0);
              if (w <= 127) out[j] = w;
              else if (w <= 2047) {
                out[j] = 192 + (w >> 6);
                out[++j] = 128 + (w & 63);
              } else if (w >= 55296 && w <= 57343) {
                w -= 55296;
                ww = (isstr ? data.charCodeAt(++i) : data[++i].charCodeAt(0)) - 56320 + (w << 10);
                out[j] = 240 + (ww >>> 18 & 7);
                out[++j] = 144 + (ww >>> 12 & 63);
                out[++j] = 128 + (ww >>> 6 & 63);
                out[++j] = 128 + (ww & 63);
              } else {
                out[j] = 224 + (w >> 12);
                out[++j] = 128 + (w >> 6 & 63);
                out[++j] = 128 + (w & 63);
              }
            }
            break;
          case "ascii":
            if (has_buf && typeof data === "string") {
              out = Buffer_from(data, M);
              j = out.length;
              break;
            }
            for (i = 0; i < len; ++i, ++j) {
              w = isstr ? data.charCodeAt(i) : data[i].charCodeAt(0);
              if (w <= 127) out[j] = w;
              else throw new Error("bad ascii " + w);
            }
            break;
          case "utf16le":
            if (has_buf && typeof data === "string") {
              out = Buffer_from(data, M);
              j = out.length;
              break;
            }
            for (i = 0; i < len; ++i) {
              w = isstr ? data.charCodeAt(i) : data[i].charCodeAt(0);
              out[j++] = w & 255;
              out[j++] = w >> 8;
            }
            break;
          case "utf16be":
            for (i = 0; i < len; ++i) {
              w = isstr ? data.charCodeAt(i) : data[i].charCodeAt(0);
              out[j++] = w >> 8;
              out[j++] = w & 255;
            }
            break;
          case "utf32le":
            for (i = 0; i < len; ++i) {
              w = isstr ? data.charCodeAt(i) : data[i].charCodeAt(0);
              if (w >= 55296 && w <= 57343) w = 65536 + (w - 55296 << 10) + (data[++i].charCodeAt(0) - 56320);
              out[j++] = w & 255;
              w >>= 8;
              out[j++] = w & 255;
              w >>= 8;
              out[j++] = w & 255;
              w >>= 8;
              out[j++] = w & 255;
            }
            break;
          case "utf32be":
            for (i = 0; i < len; ++i) {
              w = isstr ? data.charCodeAt(i) : data[i].charCodeAt(0);
              if (w >= 55296 && w <= 57343) w = 65536 + (w - 55296 << 10) + (data[++i].charCodeAt(0) - 56320);
              out[j + 3] = w & 255;
              w >>= 8;
              out[j + 2] = w & 255;
              w >>= 8;
              out[j + 1] = w & 255;
              w >>= 8;
              out[j] = w & 255;
              j += 4;
            }
            break;
          case "utf7":
            for (i = 0; i < len; i++) {
              var c = isstr ? data.charAt(i) : data[i].charAt(0);
              if (c === "+") {
                out[j++] = 43;
                out[j++] = 45;
                continue;
              }
              if (SetD.indexOf(c) > -1) {
                out[j++] = c.charCodeAt(0);
                continue;
              }
              var tt = encode2(1201, c);
              out[j++] = 43;
              out[j++] = BM.charCodeAt(tt[0] >> 2);
              out[j++] = BM.charCodeAt(((tt[0] & 3) << 4) + ((tt[1] || 0) >> 4));
              out[j++] = BM.charCodeAt(((tt[1] & 15) << 2) + ((tt[2] || 0) >> 6));
              out[j++] = 45;
            }
            break;
          default:
            throw new Error("Unsupported magic: " + cp + " " + magic[cp]);
        }
        else throw new Error("Unrecognized CP: " + cp);
        out = out.slice(0, j);
        if (!has_buf) return ofmt == "str" ? out.map(sfcc).join("") : out;
        if (!ofmt || ofmt === "buf") return out;
        if (ofmt !== "arr") return out.toString("binary");
        return [].slice.call(out);
      };
      var decode = function decode2(cp, data) {
        var F;
        if (F = cpdcache[cp]) return F(data);
        if (typeof data === "string") return decode2(cp, data.split("").map(cca));
        var len = data.length, out = new Array(len), s = "", w = 0, i = 0, j = 1, k = 0, ww = 0;
        var C = cpt[cp], D, M = "";
        if (C && (D = C.dec)) {
          for (i = 0; i < len; i += j) {
            j = 2;
            s = D[(data[i] << 8) + data[i + 1]];
            if (!s) {
              j = 1;
              s = D[data[i]];
            }
            if (!s) throw new Error("Unrecognized code: " + data[i] + " " + data[i + j - 1] + " " + i + " " + j + " " + D[data[i]]);
            out[k++] = s;
          }
        } else if (M = magic[cp]) switch (M) {
          case "utf8":
            if (len >= 3 && data[0] == 239) {
              if (data[1] == 187 && data[2] == 191) i = 3;
            }
            for (; i < len; i += j) {
              j = 1;
              if (data[i] < 128) w = data[i];
              else if (data[i] < 224) {
                w = (data[i] & 31) * 64 + (data[i + 1] & 63);
                j = 2;
              } else if (data[i] < 240) {
                w = ((data[i] & 15) << 12) + (data[i + 1] & 63) * 64 + (data[i + 2] & 63);
                j = 3;
              } else {
                w = (data[i] & 7) * 262144 + ((data[i + 1] & 63) << 12) + (data[i + 2] & 63) * 64 + (data[i + 3] & 63);
                j = 4;
              }
              if (w < 65536) {
                out[k++] = String.fromCharCode(w);
              } else {
                w -= 65536;
                ww = 55296 + (w >> 10 & 1023);
                w = 56320 + (w & 1023);
                out[k++] = String.fromCharCode(ww);
                out[k++] = String.fromCharCode(w);
              }
            }
            break;
          case "ascii":
            if (has_buf && Buffer.isBuffer(data)) return data.toString(M);
            for (i = 0; i < len; i++) out[i] = String.fromCharCode(data[i]);
            k = len;
            break;
          case "utf16le":
            if (len >= 2 && data[0] == 255) {
              if (data[1] == 254) i = 2;
            }
            if (has_buf && Buffer.isBuffer(data)) return data.toString(M);
            j = 2;
            for (; i + 1 < len; i += j) {
              out[k++] = String.fromCharCode((data[i + 1] << 8) + data[i]);
            }
            break;
          case "utf16be":
            if (len >= 2 && data[0] == 254) {
              if (data[1] == 255) i = 2;
            }
            j = 2;
            for (; i + 1 < len; i += j) {
              out[k++] = String.fromCharCode((data[i] << 8) + data[i + 1]);
            }
            break;
          case "utf32le":
            if (len >= 4 && data[0] == 255) {
              if (data[1] == 254 && data[2] === 0 && data[3] === 0) i = 4;
            }
            j = 4;
            for (; i < len; i += j) {
              w = (data[i + 3] << 24) + (data[i + 2] << 16) + (data[i + 1] << 8) + data[i];
              if (w > 65535) {
                w -= 65536;
                out[k++] = String.fromCharCode(55296 + (w >> 10 & 1023));
                out[k++] = String.fromCharCode(56320 + (w & 1023));
              } else out[k++] = String.fromCharCode(w);
            }
            break;
          case "utf32be":
            if (len >= 4 && data[3] == 255) {
              if (data[2] == 254 && data[1] === 0 && data[0] === 0) i = 4;
            }
            j = 4;
            for (; i < len; i += j) {
              w = (data[i] << 24) + (data[i + 1] << 16) + (data[i + 2] << 8) + data[i + 3];
              if (w > 65535) {
                w -= 65536;
                out[k++] = String.fromCharCode(55296 + (w >> 10 & 1023));
                out[k++] = String.fromCharCode(56320 + (w & 1023));
              } else out[k++] = String.fromCharCode(w);
            }
            break;
          case "utf7":
            if (len >= 4 && data[0] == 43 && data[1] == 47 && data[2] == 118) {
              if (len >= 5 && data[3] == 56 && data[4] == 45) i = 5;
              else if (data[3] == 56 || data[3] == 57 || data[3] == 43 || data[3] == 47) i = 4;
            }
            for (; i < len; i += j) {
              if (data[i] !== 43) {
                j = 1;
                out[k++] = String.fromCharCode(data[i]);
                continue;
              }
              j = 1;
              if (data[i + 1] === 45) {
                j = 2;
                out[k++] = "+";
                continue;
              }
              while (String.fromCharCode(data[i + j]).match(/[A-Za-z0-9+\/]/)) j++;
              var dash = 0;
              if (data[i + j] === 45) {
                ++j;
                dash = 1;
              }
              var tt = [];
              var o64 = "";
              var c1 = 0, c2 = 0, c3 = 0;
              var e1 = 0, e2 = 0, e3 = 0, e4 = 0;
              for (var l = 1; l < j - dash; ) {
                e1 = BM.indexOf(String.fromCharCode(data[i + l++]));
                e2 = BM.indexOf(String.fromCharCode(data[i + l++]));
                c1 = e1 << 2 | e2 >> 4;
                tt.push(c1);
                e3 = BM.indexOf(String.fromCharCode(data[i + l++]));
                if (e3 === -1) break;
                c2 = (e2 & 15) << 4 | e3 >> 2;
                tt.push(c2);
                e4 = BM.indexOf(String.fromCharCode(data[i + l++]));
                if (e4 === -1) break;
                c3 = (e3 & 3) << 6 | e4;
                if (e4 < 64) tt.push(c3);
              }
              o64 = decode2(1201, tt);
              for (l = 0; l < o64.length; ++l) out[k++] = o64.charAt(l);
            }
            break;
          default:
            throw new Error("Unsupported magic: " + cp + " " + magic[cp]);
        }
        else throw new Error("Unrecognized CP: " + cp);
        return out.slice(0, k).join("");
      };
      var hascp = function hascp2(cp) {
        return !!(cpt[cp] || magic[cp]);
      };
      cpt.utils = { decode, encode, hascp, magic, cache };
      return cpt;
    });
  }
});

// node_modules/xlsx/xlsx.js
var require_xlsx = __commonJS({
  "node_modules/xlsx/xlsx.js"(exports, module) {
    var XLSX = {};
    function make_xlsx_lib(XLSX2) {
      XLSX2.version = "0.18.5";
      var current_codepage = 1200, current_ansi = 1252;
      var $cptable;
      if (typeof cptable !== "undefined") $cptable = cptable;
      else if (typeof module !== "undefined" && typeof __require !== "undefined") {
        $cptable = require_cpexcel();
      }
      var VALID_ANSI = [874, 932, 936, 949, 950, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1e4];
      var CS2CP = {
        0: 1252,
        /* ANSI */
        1: 65001,
        /* DEFAULT */
        2: 65001,
        /* SYMBOL */
        77: 1e4,
        /* MAC */
        128: 932,
        /* SHIFTJIS */
        129: 949,
        /* HANGUL */
        130: 1361,
        /* JOHAB */
        134: 936,
        /* GB2312 */
        136: 950,
        /* CHINESEBIG5 */
        161: 1253,
        /* GREEK */
        162: 1254,
        /* TURKISH */
        163: 1258,
        /* VIETNAMESE */
        177: 1255,
        /* HEBREW */
        178: 1256,
        /* ARABIC */
        186: 1257,
        /* BALTIC */
        204: 1251,
        /* RUSSIAN */
        222: 874,
        /* THAI */
        238: 1250,
        /* EASTEUROPE */
        255: 1252,
        /* OEM */
        69: 6969
        /* MISC */
      };
      var set_ansi = function(cp) {
        if (VALID_ANSI.indexOf(cp) == -1) return;
        current_ansi = CS2CP[0] = cp;
      };
      function reset_ansi() {
        set_ansi(1252);
      }
      var set_cp = function(cp) {
        current_codepage = cp;
        set_ansi(cp);
      };
      function reset_cp() {
        set_cp(1200);
        reset_ansi();
      }
      function char_codes(data) {
        var o = [];
        for (var i = 0, len = data.length; i < len; ++i) o[i] = data.charCodeAt(i);
        return o;
      }
      function utf16leread(data) {
        var o = [];
        for (var i = 0; i < data.length >> 1; ++i) o[i] = String.fromCharCode(data.charCodeAt(2 * i) + (data.charCodeAt(2 * i + 1) << 8));
        return o.join("");
      }
      function utf16beread(data) {
        var o = [];
        for (var i = 0; i < data.length >> 1; ++i) o[i] = String.fromCharCode(data.charCodeAt(2 * i + 1) + (data.charCodeAt(2 * i) << 8));
        return o.join("");
      }
      var debom = function(data) {
        var c1 = data.charCodeAt(0), c2 = data.charCodeAt(1);
        if (c1 == 255 && c2 == 254) return utf16leread(data.slice(2));
        if (c1 == 254 && c2 == 255) return utf16beread(data.slice(2));
        if (c1 == 65279) return data.slice(1);
        return data;
      };
      var _getchar = function _gc1(x) {
        return String.fromCharCode(x);
      };
      var _getansi = function _ga1(x) {
        return String.fromCharCode(x);
      };
      if (typeof $cptable !== "undefined") {
        set_cp = function(cp) {
          current_codepage = cp;
          set_ansi(cp);
        };
        debom = function(data) {
          if (data.charCodeAt(0) === 255 && data.charCodeAt(1) === 254) {
            return $cptable.utils.decode(1200, char_codes(data.slice(2)));
          }
          return data;
        };
        _getchar = function _gc2(x) {
          if (current_codepage === 1200) return String.fromCharCode(x);
          return $cptable.utils.decode(current_codepage, [x & 255, x >> 8])[0];
        };
        _getansi = function _ga2(x) {
          return $cptable.utils.decode(current_ansi, [x])[0];
        };
      }
      var DENSE = null;
      var DIF_XL = true;
      var Base64_map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
      function Base64_encode(input) {
        var o = "";
        var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;
        for (var i = 0; i < input.length; ) {
          c1 = input.charCodeAt(i++);
          e1 = c1 >> 2;
          c2 = input.charCodeAt(i++);
          e2 = (c1 & 3) << 4 | c2 >> 4;
          c3 = input.charCodeAt(i++);
          e3 = (c2 & 15) << 2 | c3 >> 6;
          e4 = c3 & 63;
          if (isNaN(c2)) {
            e3 = e4 = 64;
          } else if (isNaN(c3)) {
            e4 = 64;
          }
          o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);
        }
        return o;
      }
      function Base64_decode(input) {
        var o = "";
        var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;
        input = input.replace(/[^\w\+\/\=]/g, "");
        for (var i = 0; i < input.length; ) {
          e1 = Base64_map.indexOf(input.charAt(i++));
          e2 = Base64_map.indexOf(input.charAt(i++));
          c1 = e1 << 2 | e2 >> 4;
          o += String.fromCharCode(c1);
          e3 = Base64_map.indexOf(input.charAt(i++));
          c2 = (e2 & 15) << 4 | e3 >> 2;
          if (e3 !== 64) {
            o += String.fromCharCode(c2);
          }
          e4 = Base64_map.indexOf(input.charAt(i++));
          c3 = (e3 & 3) << 6 | e4;
          if (e4 !== 64) {
            o += String.fromCharCode(c3);
          }
        }
        return o;
      }
      var has_buf = function() {
        return typeof Buffer !== "undefined" && typeof process !== "undefined" && typeof process.versions !== "undefined" && !!process.versions.node;
      }();
      var Buffer_from = function() {
        if (typeof Buffer !== "undefined") {
          var nbfs = !Buffer.from;
          if (!nbfs) try {
            Buffer.from("foo", "utf8");
          } catch (e) {
            nbfs = true;
          }
          return nbfs ? function(buf, enc) {
            return enc ? new Buffer(buf, enc) : new Buffer(buf);
          } : Buffer.from.bind(Buffer);
        }
        return function() {
        };
      }();
      function new_raw_buf(len) {
        if (has_buf) return Buffer.alloc ? Buffer.alloc(len) : new Buffer(len);
        return typeof Uint8Array != "undefined" ? new Uint8Array(len) : new Array(len);
      }
      function new_unsafe_buf(len) {
        if (has_buf) return Buffer.allocUnsafe ? Buffer.allocUnsafe(len) : new Buffer(len);
        return typeof Uint8Array != "undefined" ? new Uint8Array(len) : new Array(len);
      }
      var s2a = function s2a2(s) {
        if (has_buf) return Buffer_from(s, "binary");
        return s.split("").map(function(x) {
          return x.charCodeAt(0) & 255;
        });
      };
      function s2ab(s) {
        if (typeof ArrayBuffer === "undefined") return s2a(s);
        var buf = new ArrayBuffer(s.length), view = new Uint8Array(buf);
        for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 255;
        return buf;
      }
      function a2s(data) {
        if (Array.isArray(data)) return data.map(function(c) {
          return String.fromCharCode(c);
        }).join("");
        var o = [];
        for (var i = 0; i < data.length; ++i) o[i] = String.fromCharCode(data[i]);
        return o.join("");
      }
      function a2u(data) {
        if (typeof Uint8Array === "undefined") throw new Error("Unsupported");
        return new Uint8Array(data);
      }
      function ab2a(data) {
        if (typeof ArrayBuffer == "undefined") throw new Error("Unsupported");
        if (data instanceof ArrayBuffer) return ab2a(new Uint8Array(data));
        var o = new Array(data.length);
        for (var i = 0; i < data.length; ++i) o[i] = data[i];
        return o;
      }
      var bconcat = has_buf ? function(bufs) {
        return Buffer.concat(bufs.map(function(buf) {
          return Buffer.isBuffer(buf) ? buf : Buffer_from(buf);
        }));
      } : function(bufs) {
        if (typeof Uint8Array !== "undefined") {
          var i = 0, maxlen = 0;
          for (i = 0; i < bufs.length; ++i) maxlen += bufs[i].length;
          var o = new Uint8Array(maxlen);
          var len = 0;
          for (i = 0, maxlen = 0; i < bufs.length; maxlen += len, ++i) {
            len = bufs[i].length;
            if (bufs[i] instanceof Uint8Array) o.set(bufs[i], maxlen);
            else if (typeof bufs[i] == "string") {
              throw "wtf";
            } else o.set(new Uint8Array(bufs[i]), maxlen);
          }
          return o;
        }
        return [].concat.apply([], bufs.map(function(buf) {
          return Array.isArray(buf) ? buf : [].slice.call(buf);
        }));
      };
      function utf8decode(content) {
        var out = [], widx = 0, L = content.length + 250;
        var o = new_raw_buf(content.length + 255);
        for (var ridx = 0; ridx < content.length; ++ridx) {
          var c = content.charCodeAt(ridx);
          if (c < 128) o[widx++] = c;
          else if (c < 2048) {
            o[widx++] = 192 | c >> 6 & 31;
            o[widx++] = 128 | c & 63;
          } else if (c >= 55296 && c < 57344) {
            c = (c & 1023) + 64;
            var d = content.charCodeAt(++ridx) & 1023;
            o[widx++] = 240 | c >> 8 & 7;
            o[widx++] = 128 | c >> 2 & 63;
            o[widx++] = 128 | d >> 6 & 15 | (c & 3) << 4;
            o[widx++] = 128 | d & 63;
          } else {
            o[widx++] = 224 | c >> 12 & 15;
            o[widx++] = 128 | c >> 6 & 63;
            o[widx++] = 128 | c & 63;
          }
          if (widx > L) {
            out.push(o.slice(0, widx));
            widx = 0;
            o = new_raw_buf(65535);
            L = 65530;
          }
        }
        out.push(o.slice(0, widx));
        return bconcat(out);
      }
      var chr0 = /\u0000/g, chr1 = /[\u0001-\u0006]/g;
      function _strrev(x) {
        var o = "", i = x.length - 1;
        while (i >= 0) o += x.charAt(i--);
        return o;
      }
      function pad0(v, d) {
        var t = "" + v;
        return t.length >= d ? t : fill("0", d - t.length) + t;
      }
      function pad_(v, d) {
        var t = "" + v;
        return t.length >= d ? t : fill(" ", d - t.length) + t;
      }
      function rpad_(v, d) {
        var t = "" + v;
        return t.length >= d ? t : t + fill(" ", d - t.length);
      }
      function pad0r1(v, d) {
        var t = "" + Math.round(v);
        return t.length >= d ? t : fill("0", d - t.length) + t;
      }
      function pad0r2(v, d) {
        var t = "" + v;
        return t.length >= d ? t : fill("0", d - t.length) + t;
      }
      var p2_32 = Math.pow(2, 32);
      function pad0r(v, d) {
        if (v > p2_32 || v < -p2_32) return pad0r1(v, d);
        var i = Math.round(v);
        return pad0r2(i, d);
      }
      function SSF_isgeneral(s, i) {
        i = i || 0;
        return s.length >= 7 + i && (s.charCodeAt(i) | 32) === 103 && (s.charCodeAt(i + 1) | 32) === 101 && (s.charCodeAt(i + 2) | 32) === 110 && (s.charCodeAt(i + 3) | 32) === 101 && (s.charCodeAt(i + 4) | 32) === 114 && (s.charCodeAt(i + 5) | 32) === 97 && (s.charCodeAt(i + 6) | 32) === 108;
      }
      var days = [
        ["Sun", "Sunday"],
        ["Mon", "Monday"],
        ["Tue", "Tuesday"],
        ["Wed", "Wednesday"],
        ["Thu", "Thursday"],
        ["Fri", "Friday"],
        ["Sat", "Saturday"]
      ];
      var months = [
        ["J", "Jan", "January"],
        ["F", "Feb", "February"],
        ["M", "Mar", "March"],
        ["A", "Apr", "April"],
        ["M", "May", "May"],
        ["J", "Jun", "June"],
        ["J", "Jul", "July"],
        ["A", "Aug", "August"],
        ["S", "Sep", "September"],
        ["O", "Oct", "October"],
        ["N", "Nov", "November"],
        ["D", "Dec", "December"]
      ];
      function SSF_init_table(t) {
        if (!t) t = {};
        t[0] = "General";
        t[1] = "0";
        t[2] = "0.00";
        t[3] = "#,##0";
        t[4] = "#,##0.00";
        t[9] = "0%";
        t[10] = "0.00%";
        t[11] = "0.00E+00";
        t[12] = "# ?/?";
        t[13] = "# ??/??";
        t[14] = "m/d/yy";
        t[15] = "d-mmm-yy";
        t[16] = "d-mmm";
        t[17] = "mmm-yy";
        t[18] = "h:mm AM/PM";
        t[19] = "h:mm:ss AM/PM";
        t[20] = "h:mm";
        t[21] = "h:mm:ss";
        t[22] = "m/d/yy h:mm";
        t[37] = "#,##0 ;(#,##0)";
        t[38] = "#,##0 ;[Red](#,##0)";
        t[39] = "#,##0.00;(#,##0.00)";
        t[40] = "#,##0.00;[Red](#,##0.00)";
        t[45] = "mm:ss";
        t[46] = "[h]:mm:ss";
        t[47] = "mmss.0";
        t[48] = "##0.0E+0";
        t[49] = "@";
        t[56] = '"\u4E0A\u5348/\u4E0B\u5348 "hh"\u6642"mm"\u5206"ss"\u79D2 "';
        return t;
      }
      var table_fmt = {
        0: "General",
        1: "0",
        2: "0.00",
        3: "#,##0",
        4: "#,##0.00",
        9: "0%",
        10: "0.00%",
        11: "0.00E+00",
        12: "# ?/?",
        13: "# ??/??",
        14: "m/d/yy",
        15: "d-mmm-yy",
        16: "d-mmm",
        17: "mmm-yy",
        18: "h:mm AM/PM",
        19: "h:mm:ss AM/PM",
        20: "h:mm",
        21: "h:mm:ss",
        22: "m/d/yy h:mm",
        37: "#,##0 ;(#,##0)",
        38: "#,##0 ;[Red](#,##0)",
        39: "#,##0.00;(#,##0.00)",
        40: "#,##0.00;[Red](#,##0.00)",
        45: "mm:ss",
        46: "[h]:mm:ss",
        47: "mmss.0",
        48: "##0.0E+0",
        49: "@",
        56: '"\u4E0A\u5348/\u4E0B\u5348 "hh"\u6642"mm"\u5206"ss"\u79D2 "'
      };
      var SSF_default_map = {
        5: 37,
        6: 38,
        7: 39,
        8: 40,
        //  5 -> 37 ...  8 -> 40
        23: 0,
        24: 0,
        25: 0,
        26: 0,
        // 23 ->  0 ... 26 ->  0
        27: 14,
        28: 14,
        29: 14,
        30: 14,
        31: 14,
        // 27 -> 14 ... 31 -> 14
        50: 14,
        51: 14,
        52: 14,
        53: 14,
        54: 14,
        // 50 -> 14 ... 58 -> 14
        55: 14,
        56: 14,
        57: 14,
        58: 14,
        59: 1,
        60: 2,
        61: 3,
        62: 4,
        // 59 ->  1 ... 62 ->  4
        67: 9,
        68: 10,
        // 67 ->  9 ... 68 -> 10
        69: 12,
        70: 13,
        71: 14,
        // 69 -> 12 ... 71 -> 14
        72: 14,
        73: 15,
        74: 16,
        75: 17,
        // 72 -> 14 ... 75 -> 17
        76: 20,
        77: 21,
        78: 22,
        // 76 -> 20 ... 78 -> 22
        79: 45,
        80: 46,
        81: 47,
        // 79 -> 45 ... 81 -> 47
        82: 0
        // 82 ->  0 ... 65536 -> 0 (omitted)
      };
      var SSF_default_str = {
        //  5 -- Currency,   0 decimal, black negative
        5: '"$"#,##0_);\\("$"#,##0\\)',
        63: '"$"#,##0_);\\("$"#,##0\\)',
        //  6 -- Currency,   0 decimal, red   negative
        6: '"$"#,##0_);[Red]\\("$"#,##0\\)',
        64: '"$"#,##0_);[Red]\\("$"#,##0\\)',
        //  7 -- Currency,   2 decimal, black negative
        7: '"$"#,##0.00_);\\("$"#,##0.00\\)',
        65: '"$"#,##0.00_);\\("$"#,##0.00\\)',
        //  8 -- Currency,   2 decimal, red   negative
        8: '"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',
        66: '"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',
        // 41 -- Accounting, 0 decimal, No Symbol
        41: '_(* #,##0_);_(* \\(#,##0\\);_(* "-"_);_(@_)',
        // 42 -- Accounting, 0 decimal, $  Symbol
        42: '_("$"* #,##0_);_("$"* \\(#,##0\\);_("$"* "-"_);_(@_)',
        // 43 -- Accounting, 2 decimal, No Symbol
        43: '_(* #,##0.00_);_(* \\(#,##0.00\\);_(* "-"??_);_(@_)',
        // 44 -- Accounting, 2 decimal, $  Symbol
        44: '_("$"* #,##0.00_);_("$"* \\(#,##0.00\\);_("$"* "-"??_);_(@_)'
      };
      function SSF_frac(x, D, mixed) {
        var sgn = x < 0 ? -1 : 1;
        var B = x * sgn;
        var P_2 = 0, P_1 = 1, P = 0;
        var Q_2 = 1, Q_1 = 0, Q = 0;
        var A = Math.floor(B);
        while (Q_1 < D) {
          A = Math.floor(B);
          P = A * P_1 + P_2;
          Q = A * Q_1 + Q_2;
          if (B - A < 5e-8) break;
          B = 1 / (B - A);
          P_2 = P_1;
          P_1 = P;
          Q_2 = Q_1;
          Q_1 = Q;
        }
        if (Q > D) {
          if (Q_1 > D) {
            Q = Q_2;
            P = P_2;
          } else {
            Q = Q_1;
            P = P_1;
          }
        }
        if (!mixed) return [0, sgn * P, Q];
        var q = Math.floor(sgn * P / Q);
        return [q, sgn * P - q * Q, Q];
      }
      function SSF_parse_date_code(v, opts, b2) {
        if (v > 2958465 || v < 0) return null;
        var date = v | 0, time = Math.floor(86400 * (v - date)), dow = 0;
        var dout = [];
        var out = { D: date, T: time, u: 86400 * (v - date) - time, y: 0, m: 0, d: 0, H: 0, M: 0, S: 0, q: 0 };
        if (Math.abs(out.u) < 1e-6) out.u = 0;
        if (opts && opts.date1904) date += 1462;
        if (out.u > 0.9999) {
          out.u = 0;
          if (++time == 86400) {
            out.T = time = 0;
            ++date;
            ++out.D;
          }
        }
        if (date === 60) {
          dout = b2 ? [1317, 10, 29] : [1900, 2, 29];
          dow = 3;
        } else if (date === 0) {
          dout = b2 ? [1317, 8, 29] : [1900, 1, 0];
          dow = 6;
        } else {
          if (date > 60) --date;
          var d = new Date(1900, 0, 1);
          d.setDate(d.getDate() + date - 1);
          dout = [d.getFullYear(), d.getMonth() + 1, d.getDate()];
          dow = d.getDay();
          if (date < 60) dow = (dow + 6) % 7;
          if (b2) dow = SSF_fix_hijri(d, dout);
        }
        out.y = dout[0];
        out.m = dout[1];
        out.d = dout[2];
        out.S = time % 60;
        time = Math.floor(time / 60);
        out.M = time % 60;
        time = Math.floor(time / 60);
        out.H = time;
        out.q = dow;
        return out;
      }
      var SSFbasedate = new Date(1899, 11, 31, 0, 0, 0);
      var SSFdnthresh = SSFbasedate.getTime();
      var SSFbase1904 = new Date(1900, 2, 1, 0, 0, 0);
      function datenum_local(v, date1904) {
        var epoch = v.getTime();
        if (date1904) epoch -= 1461 * 24 * 60 * 60 * 1e3;
        else if (v >= SSFbase1904) epoch += 24 * 60 * 60 * 1e3;
        return (epoch - (SSFdnthresh + (v.getTimezoneOffset() - SSFbasedate.getTimezoneOffset()) * 6e4)) / (24 * 60 * 60 * 1e3);
      }
      function SSF_strip_decimal(o) {
        return o.indexOf(".") == -1 ? o : o.replace(/(?:\.0*|(\.\d*[1-9])0+)$/, "$1");
      }
      function SSF_normalize_exp(o) {
        if (o.indexOf("E") == -1) return o;
        return o.replace(/(?:\.0*|(\.\d*[1-9])0+)[Ee]/, "$1E").replace(/(E[+-])(\d)$/, "$10$2");
      }
      function SSF_small_exp(v) {
        var w = v < 0 ? 12 : 11;
        var o = SSF_strip_decimal(v.toFixed(12));
        if (o.length <= w) return o;
        o = v.toPrecision(10);
        if (o.length <= w) return o;
        return v.toExponential(5);
      }
      function SSF_large_exp(v) {
        var o = SSF_strip_decimal(v.toFixed(11));
        return o.length > (v < 0 ? 12 : 11) || o === "0" || o === "-0" ? v.toPrecision(6) : o;
      }
      function SSF_general_num(v) {
        var V = Math.floor(Math.log(Math.abs(v)) * Math.LOG10E), o;
        if (V >= -4 && V <= -1) o = v.toPrecision(10 + V);
        else if (Math.abs(V) <= 9) o = SSF_small_exp(v);
        else if (V === 10) o = v.toFixed(10).substr(0, 12);
        else o = SSF_large_exp(v);
        return SSF_strip_decimal(SSF_normalize_exp(o.toUpperCase()));
      }
      function SSF_general(v, opts) {
        switch (typeof v) {
          case "string":
            return v;
          case "boolean":
            return v ? "TRUE" : "FALSE";
          case "number":
            return (v | 0) === v ? v.toString(10) : SSF_general_num(v);
          case "undefined":
            return "";
          case "object":
            if (v == null) return "";
            if (v instanceof Date) return SSF_format(14, datenum_local(v, opts && opts.date1904), opts);
        }
        throw new Error("unsupported value in General format: " + v);
      }
      function SSF_fix_hijri(date, o) {
        o[0] -= 581;
        var dow = date.getDay();
        if (date < 60) dow = (dow + 6) % 7;
        return dow;
      }
      function SSF_write_date(type, fmt, val, ss0) {
        var o = "", ss = 0, tt = 0, y = val.y, out, outl = 0;
        switch (type) {
          case 98:
            y = val.y + 543;
          case 121:
            switch (fmt.length) {
              case 1:
              case 2:
                out = y % 100;
                outl = 2;
                break;
              default:
                out = y % 1e4;
                outl = 4;
                break;
            }
            break;
          case 109:
            switch (fmt.length) {
              case 1:
              case 2:
                out = val.m;
                outl = fmt.length;
                break;
              case 3:
                return months[val.m - 1][1];
              case 5:
                return months[val.m - 1][0];
              default:
                return months[val.m - 1][2];
            }
            break;
          case 100:
            switch (fmt.length) {
              case 1:
              case 2:
                out = val.d;
                outl = fmt.length;
                break;
              case 3:
                return days[val.q][0];
              default:
                return days[val.q][1];
            }
            break;
          case 104:
            switch (fmt.length) {
              case 1:
              case 2:
                out = 1 + (val.H + 11) % 12;
                outl = fmt.length;
                break;
              default:
                throw "bad hour format: " + fmt;
            }
            break;
          case 72:
            switch (fmt.length) {
              case 1:
              case 2:
                out = val.H;
                outl = fmt.length;
                break;
              default:
                throw "bad hour format: " + fmt;
            }
            break;
          case 77:
            switch (fmt.length) {
              case 1:
              case 2:
                out = val.M;
                outl = fmt.length;
                break;
              default:
                throw "bad minute format: " + fmt;
            }
            break;
          case 115:
            if (fmt != "s" && fmt != "ss" && fmt != ".0" && fmt != ".00" && fmt != ".000") throw "bad second format: " + fmt;
            if (val.u === 0 && (fmt == "s" || fmt == "ss")) return pad0(val.S, fmt.length);
            if (ss0 >= 2) tt = ss0 === 3 ? 1e3 : 100;
            else tt = ss0 === 1 ? 10 : 1;
            ss = Math.round(tt * (val.S + val.u));
            if (ss >= 60 * tt) ss = 0;
            if (fmt === "s") return ss === 0 ? "0" : "" + ss / tt;
            o = pad0(ss, 2 + ss0);
            if (fmt === "ss") return o.substr(0, 2);
            return "." + o.substr(2, fmt.length - 1);
          case 90:
            switch (fmt) {
              case "[h]":
              case "[hh]":
                out = val.D * 24 + val.H;
                break;
              case "[m]":
              case "[mm]":
                out = (val.D * 24 + val.H) * 60 + val.M;
                break;
              case "[s]":
              case "[ss]":
                out = ((val.D * 24 + val.H) * 60 + val.M) * 60 + Math.round(val.S + val.u);
                break;
              default:
                throw "bad abstime format: " + fmt;
            }
            outl = fmt.length === 3 ? 1 : 2;
            break;
          case 101:
            out = y;
            outl = 1;
            break;
        }
        var outstr = outl > 0 ? pad0(out, outl) : "";
        return outstr;
      }
      function commaify(s) {
        var w = 3;
        if (s.length <= w) return s;
        var j = s.length % w, o = s.substr(0, j);
        for (; j != s.length; j += w) o += (o.length > 0 ? "," : "") + s.substr(j, w);
        return o;
      }
      var pct1 = /%/g;
      function write_num_pct(type, fmt, val) {
        var sfmt = fmt.replace(pct1, ""), mul = fmt.length - sfmt.length;
        return write_num(type, sfmt, val * Math.pow(10, 2 * mul)) + fill("%", mul);
      }
      function write_num_cm(type, fmt, val) {
        var idx = fmt.length - 1;
        while (fmt.charCodeAt(idx - 1) === 44) --idx;
        return write_num(type, fmt.substr(0, idx), val / Math.pow(10, 3 * (fmt.length - idx)));
      }
      function write_num_exp(fmt, val) {
        var o;
        var idx = fmt.indexOf("E") - fmt.indexOf(".") - 1;
        if (fmt.match(/^#+0.0E\+0$/)) {
          if (val == 0) return "0.0E+0";
          else if (val < 0) return "-" + write_num_exp(fmt, -val);
          var period = fmt.indexOf(".");
          if (period === -1) period = fmt.indexOf("E");
          var ee = Math.floor(Math.log(val) * Math.LOG10E) % period;
          if (ee < 0) ee += period;
          o = (val / Math.pow(10, ee)).toPrecision(idx + 1 + (period + ee) % period);
          if (o.indexOf("e") === -1) {
            var fakee = Math.floor(Math.log(val) * Math.LOG10E);
            if (o.indexOf(".") === -1) o = o.charAt(0) + "." + o.substr(1) + "E+" + (fakee - o.length + ee);
            else o += "E+" + (fakee - ee);
            while (o.substr(0, 2) === "0.") {
              o = o.charAt(0) + o.substr(2, period) + "." + o.substr(2 + period);
              o = o.replace(/^0+([1-9])/, "$1").replace(/^0+\./, "0.");
            }
            o = o.replace(/\+-/, "-");
          }
          o = o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/, function($$, $1, $2, $3) {
            return $1 + $2 + $3.substr(0, (period + ee) % period) + "." + $3.substr(ee) + "E";
          });
        } else o = val.toExponential(idx);
        if (fmt.match(/E\+00$/) && o.match(/e[+-]\d$/)) o = o.substr(0, o.length - 1) + "0" + o.charAt(o.length - 1);
        if (fmt.match(/E\-/) && o.match(/e\+/)) o = o.replace(/e\+/, "e");
        return o.replace("e", "E");
      }
      var frac1 = /# (\?+)( ?)\/( ?)(\d+)/;
      function write_num_f1(r, aval, sign) {
        var den = parseInt(r[4], 10), rr = Math.round(aval * den), base = Math.floor(rr / den);
        var myn = rr - base * den, myd = den;
        return sign + (base === 0 ? "" : "" + base) + " " + (myn === 0 ? fill(" ", r[1].length + 1 + r[4].length) : pad_(myn, r[1].length) + r[2] + "/" + r[3] + pad0(myd, r[4].length));
      }
      function write_num_f2(r, aval, sign) {
        return sign + (aval === 0 ? "" : "" + aval) + fill(" ", r[1].length + 2 + r[4].length);
      }
      var dec1 = /^#*0*\.([0#]+)/;
      var closeparen = /\).*[0#]/;
      var phone = /\(###\) ###\\?-####/;
      function hashq(str) {
        var o = "", cc;
        for (var i = 0; i != str.length; ++i) switch (cc = str.charCodeAt(i)) {
          case 35:
            break;
          case 63:
            o += " ";
            break;
          case 48:
            o += "0";
            break;
          default:
            o += String.fromCharCode(cc);
        }
        return o;
      }
      function rnd(val, d) {
        var dd = Math.pow(10, d);
        return "" + Math.round(val * dd) / dd;
      }
      function dec(val, d) {
        var _frac = val - Math.floor(val), dd = Math.pow(10, d);
        if (d < ("" + Math.round(_frac * dd)).length) return 0;
        return Math.round(_frac * dd);
      }
      function carry(val, d) {
        if (d < ("" + Math.round((val - Math.floor(val)) * Math.pow(10, d))).length) {
          return 1;
        }
        return 0;
      }
      function flr(val) {
        if (val < 2147483647 && val > -2147483648) return "" + (val >= 0 ? val | 0 : val - 1 | 0);
        return "" + Math.floor(val);
      }
      function write_num_flt(type, fmt, val) {
        if (type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {
          var ffmt = fmt.replace(/\( */, "").replace(/ \)/, "").replace(/\)/, "");
          if (val >= 0) return write_num_flt("n", ffmt, val);
          return "(" + write_num_flt("n", ffmt, -val) + ")";
        }
        if (fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);
        if (fmt.indexOf("%") !== -1) return write_num_pct(type, fmt, val);
        if (fmt.indexOf("E") !== -1) return write_num_exp(fmt, val);
        if (fmt.charCodeAt(0) === 36) return "$" + write_num_flt(type, fmt.substr(fmt.charAt(1) == " " ? 2 : 1), val);
        var o;
        var r, ri, ff, aval = Math.abs(val), sign = val < 0 ? "-" : "";
        if (fmt.match(/^00+$/)) return sign + pad0r(aval, fmt.length);
        if (fmt.match(/^[#?]+$/)) {
          o = pad0r(val, 0);
          if (o === "0") o = "";
          return o.length > fmt.length ? o : hashq(fmt.substr(0, fmt.length - o.length)) + o;
        }
        if (r = fmt.match(frac1)) return write_num_f1(r, aval, sign);
        if (fmt.match(/^#+0+$/)) return sign + pad0r(aval, fmt.length - fmt.indexOf("0"));
        if (r = fmt.match(dec1)) {
          o = rnd(val, r[1].length).replace(/^([^\.]+)$/, "$1." + hashq(r[1])).replace(/\.$/, "." + hashq(r[1])).replace(/\.(\d*)$/, function($$, $1) {
            return "." + $1 + fill("0", hashq(r[1]).length - $1.length);
          });
          return fmt.indexOf("0.") !== -1 ? o : o.replace(/^0\./, ".");
        }
        fmt = fmt.replace(/^#+([0.])/, "$1");
        if (r = fmt.match(/^(0*)\.(#*)$/)) {
          return sign + rnd(aval, r[2].length).replace(/\.(\d*[1-9])0*$/, ".$1").replace(/^(-?\d*)$/, "$1.").replace(/^0\./, r[1].length ? "0." : ".");
        }
        if (r = fmt.match(/^#{1,3},##0(\.?)$/)) return sign + commaify(pad0r(aval, 0));
        if (r = fmt.match(/^#,##0\.([#0]*0)$/)) {
          return val < 0 ? "-" + write_num_flt(type, fmt, -val) : commaify("" + (Math.floor(val) + carry(val, r[1].length))) + "." + pad0(dec(val, r[1].length), r[1].length);
        }
        if (r = fmt.match(/^#,#*,#0/)) return write_num_flt(type, fmt.replace(/^#,#*,/, ""), val);
        if (r = fmt.match(/^([0#]+)(\\?-([0#]+))+$/)) {
          o = _strrev(write_num_flt(type, fmt.replace(/[\\-]/g, ""), val));
          ri = 0;
          return _strrev(_strrev(fmt.replace(/\\/g, "")).replace(/[0#]/g, function(x2) {
            return ri < o.length ? o.charAt(ri++) : x2 === "0" ? "0" : "";
          }));
        }
        if (fmt.match(phone)) {
          o = write_num_flt(type, "##########", val);
          return "(" + o.substr(0, 3) + ") " + o.substr(3, 3) + "-" + o.substr(6);
        }
        var oa = "";
        if (r = fmt.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/)) {
          ri = Math.min(r[4].length, 7);
          ff = SSF_frac(aval, Math.pow(10, ri) - 1, false);
          o = "" + sign;
          oa = write_num("n", r[1], ff[1]);
          if (oa.charAt(oa.length - 1) == " ") oa = oa.substr(0, oa.length - 1) + "0";
          o += oa + r[2] + "/" + r[3];
          oa = rpad_(ff[2], ri);
          if (oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length - oa.length)) + oa;
          o += oa;
          return o;
        }
        if (r = fmt.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/)) {
          ri = Math.min(Math.max(r[1].length, r[4].length), 7);
          ff = SSF_frac(aval, Math.pow(10, ri) - 1, true);
          return sign + (ff[0] || (ff[1] ? "" : "0")) + " " + (ff[1] ? pad_(ff[1], ri) + r[2] + "/" + r[3] + rpad_(ff[2], ri) : fill(" ", 2 * ri + 1 + r[2].length + r[3].length));
        }
        if (r = fmt.match(/^[#0?]+$/)) {
          o = pad0r(val, 0);
          if (fmt.length <= o.length) return o;
          return hashq(fmt.substr(0, fmt.length - o.length)) + o;
        }
        if (r = fmt.match(/^([#0?]+)\.([#0]+)$/)) {
          o = "" + val.toFixed(Math.min(r[2].length, 10)).replace(/([^0])0+$/, "$1");
          ri = o.indexOf(".");
          var lres = fmt.indexOf(".") - ri, rres = fmt.length - o.length - lres;
          return hashq(fmt.substr(0, lres) + o + fmt.substr(fmt.length - rres));
        }
        if (r = fmt.match(/^00,000\.([#0]*0)$/)) {
          ri = dec(val, r[1].length);
          return val < 0 ? "-" + write_num_flt(type, fmt, -val) : commaify(flr(val)).replace(/^\d,\d{3}$/, "0$&").replace(/^\d*$/, function($$) {
            return "00," + ($$.length < 3 ? pad0(0, 3 - $$.length) : "") + $$;
          }) + "." + pad0(ri, r[1].length);
        }
        switch (fmt) {
          case "###,##0.00":
            return write_num_flt(type, "#,##0.00", val);
          case "###,###":
          case "##,###":
          case "#,###":
            var x = commaify(pad0r(aval, 0));
            return x !== "0" ? sign + x : "";
          case "###,###.00":
            return write_num_flt(type, "###,##0.00", val).replace(/^0\./, ".");
          case "#,###.00":
            return write_num_flt(type, "#,##0.00", val).replace(/^0\./, ".");
          default:
        }
        throw new Error("unsupported format |" + fmt + "|");
      }
      function write_num_cm2(type, fmt, val) {
        var idx = fmt.length - 1;
        while (fmt.charCodeAt(idx - 1) === 44) --idx;
        return write_num(type, fmt.substr(0, idx), val / Math.pow(10, 3 * (fmt.length - idx)));
      }
      function write_num_pct2(type, fmt, val) {
        var sfmt = fmt.replace(pct1, ""), mul = fmt.length - sfmt.length;
        return write_num(type, sfmt, val * Math.pow(10, 2 * mul)) + fill("%", mul);
      }
      function write_num_exp2(fmt, val) {
        var o;
        var idx = fmt.indexOf("E") - fmt.indexOf(".") - 1;
        if (fmt.match(/^#+0.0E\+0$/)) {
          if (val == 0) return "0.0E+0";
          else if (val < 0) return "-" + write_num_exp2(fmt, -val);
          var period = fmt.indexOf(".");
          if (period === -1) period = fmt.indexOf("E");
          var ee = Math.floor(Math.log(val) * Math.LOG10E) % period;
          if (ee < 0) ee += period;
          o = (val / Math.pow(10, ee)).toPrecision(idx + 1 + (period + ee) % period);
          if (!o.match(/[Ee]/)) {
            var fakee = Math.floor(Math.log(val) * Math.LOG10E);
            if (o.indexOf(".") === -1) o = o.charAt(0) + "." + o.substr(1) + "E+" + (fakee - o.length + ee);
            else o += "E+" + (fakee - ee);
            o = o.replace(/\+-/, "-");
          }
          o = o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/, function($$, $1, $2, $3) {
            return $1 + $2 + $3.substr(0, (period + ee) % period) + "." + $3.substr(ee) + "E";
          });
        } else o = val.toExponential(idx);
        if (fmt.match(/E\+00$/) && o.match(/e[+-]\d$/)) o = o.substr(0, o.length - 1) + "0" + o.charAt(o.length - 1);
        if (fmt.match(/E\-/) && o.match(/e\+/)) o = o.replace(/e\+/, "e");
        return o.replace("e", "E");
      }
      function write_num_int(type, fmt, val) {
        if (type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {
          var ffmt = fmt.replace(/\( */, "").replace(/ \)/, "").replace(/\)/, "");
          if (val >= 0) return write_num_int("n", ffmt, val);
          return "(" + write_num_int("n", ffmt, -val) + ")";
        }
        if (fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);
        if (fmt.indexOf("%") !== -1) return write_num_pct2(type, fmt, val);
        if (fmt.indexOf("E") !== -1) return write_num_exp2(fmt, val);
        if (fmt.charCodeAt(0) === 36) return "$" + write_num_int(type, fmt.substr(fmt.charAt(1) == " " ? 2 : 1), val);
        var o;
        var r, ri, ff, aval = Math.abs(val), sign = val < 0 ? "-" : "";
        if (fmt.match(/^00+$/)) return sign + pad0(aval, fmt.length);
        if (fmt.match(/^[#?]+$/)) {
          o = "" + val;
          if (val === 0) o = "";
          return o.length > fmt.length ? o : hashq(fmt.substr(0, fmt.length - o.length)) + o;
        }
        if (r = fmt.match(frac1)) return write_num_f2(r, aval, sign);
        if (fmt.match(/^#+0+$/)) return sign + pad0(aval, fmt.length - fmt.indexOf("0"));
        if (r = fmt.match(dec1)) {
          o = ("" + val).replace(/^([^\.]+)$/, "$1." + hashq(r[1])).replace(/\.$/, "." + hashq(r[1]));
          o = o.replace(/\.(\d*)$/, function($$, $1) {
            return "." + $1 + fill("0", hashq(r[1]).length - $1.length);
          });
          return fmt.indexOf("0.") !== -1 ? o : o.replace(/^0\./, ".");
        }
        fmt = fmt.replace(/^#+([0.])/, "$1");
        if (r = fmt.match(/^(0*)\.(#*)$/)) {
          return sign + ("" + aval).replace(/\.(\d*[1-9])0*$/, ".$1").replace(/^(-?\d*)$/, "$1.").replace(/^0\./, r[1].length ? "0." : ".");
        }
        if (r = fmt.match(/^#{1,3},##0(\.?)$/)) return sign + commaify("" + aval);
        if (r = fmt.match(/^#,##0\.([#0]*0)$/)) {
          return val < 0 ? "-" + write_num_int(type, fmt, -val) : commaify("" + val) + "." + fill("0", r[1].length);
        }
        if (r = fmt.match(/^#,#*,#0/)) return write_num_int(type, fmt.replace(/^#,#*,/, ""), val);
        if (r = fmt.match(/^([0#]+)(\\?-([0#]+))+$/)) {
          o = _strrev(write_num_int(type, fmt.replace(/[\\-]/g, ""), val));
          ri = 0;
          return _strrev(_strrev(fmt.replace(/\\/g, "")).replace(/[0#]/g, function(x2) {
            return ri < o.length ? o.charAt(ri++) : x2 === "0" ? "0" : "";
          }));
        }
        if (fmt.match(phone)) {
          o = write_num_int(type, "##########", val);
          return "(" + o.substr(0, 3) + ") " + o.substr(3, 3) + "-" + o.substr(6);
        }
        var oa = "";
        if (r = fmt.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/)) {
          ri = Math.min(r[4].length, 7);
          ff = SSF_frac(aval, Math.pow(10, ri) - 1, false);
          o = "" + sign;
          oa = write_num("n", r[1], ff[1]);
          if (oa.charAt(oa.length - 1) == " ") oa = oa.substr(0, oa.length - 1) + "0";
          o += oa + r[2] + "/" + r[3];
          oa = rpad_(ff[2], ri);
          if (oa.length < r[4].length) oa = hashq(r[4].substr(r[4].length - oa.length)) + oa;
          o += oa;
          return o;
        }
        if (r = fmt.match(/^# ([#0?]+)( ?)\/( ?)([#0?]+)/)) {
          ri = Math.min(Math.max(r[1].length, r[4].length), 7);
          ff = SSF_frac(aval, Math.pow(10, ri) - 1, true);
          return sign + (ff[0] || (ff[1] ? "" : "0")) + " " + (ff[1] ? pad_(ff[1], ri) + r[2] + "/" + r[3] + rpad_(ff[2], ri) : fill(" ", 2 * ri + 1 + r[2].length + r[3].length));
        }
        if (r = fmt.match(/^[#0?]+$/)) {
          o = "" + val;
          if (fmt.length <= o.length) return o;
          return hashq(fmt.substr(0, fmt.length - o.length)) + o;
        }
        if (r = fmt.match(/^([#0]+)\.([#0]+)$/)) {
          o = "" + val.toFixed(Math.min(r[2].length, 10)).replace(/([^0])0+$/, "$1");
          ri = o.indexOf(".");
          var lres = fmt.indexOf(".") - ri, rres = fmt.length - o.length - lres;
          return hashq(fmt.substr(0, lres) + o + fmt.substr(fmt.length - rres));
        }
        if (r = fmt.match(/^00,000\.([#0]*0)$/)) {
          return val < 0 ? "-" + write_num_int(type, fmt, -val) : commaify("" + val).replace(/^\d,\d{3}$/, "0$&").replace(/^\d*$/, function($$) {
            return "00," + ($$.length < 3 ? pad0(0, 3 - $$.length) : "") + $$;
          }) + "." + pad0(0, r[1].length);
        }
        switch (fmt) {
          case "###,###":
          case "##,###":
          case "#,###":
            var x = commaify("" + aval);
            return x !== "0" ? sign + x : "";
          default:
            if (fmt.match(/\.[0#?]*$/)) return write_num_int(type, fmt.slice(0, fmt.lastIndexOf(".")), val) + hashq(fmt.slice(fmt.lastIndexOf(".")));
        }
        throw new Error("unsupported format |" + fmt + "|");
      }
      function write_num(type, fmt, val) {
        return (val | 0) === val ? write_num_int(type, fmt, val) : write_num_flt(type, fmt, val);
      }
      function SSF_split_fmt(fmt) {
        var out = [];
        var in_str = false;
        for (var i = 0, j = 0; i < fmt.length; ++i) switch (
          /*cc=*/
          fmt.charCodeAt(i)
        ) {
          case 34:
            in_str = !in_str;
            break;
          case 95:
          case 42:
          case 92:
            ++i;
            break;
          case 59:
            out[out.length] = fmt.substr(j, i - j);
            j = i + 1;
        }
        out[out.length] = fmt.substr(j);
        if (in_str === true) throw new Error("Format |" + fmt + "| unterminated string ");
        return out;
      }
      var SSF_abstime = /\[[HhMmSs\u0E0A\u0E19\u0E17]*\]/;
      function fmt_is_date(fmt) {
        var i = 0, c = "", o = "";
        while (i < fmt.length) {
          switch (c = fmt.charAt(i)) {
            case "G":
              if (SSF_isgeneral(fmt, i)) i += 6;
              i++;
              break;
            case '"':
              for (
                ;
                /*cc=*/
                fmt.charCodeAt(++i) !== 34 && i < fmt.length;
              ) {
              }
              ++i;
              break;
            case "\\":
              i += 2;
              break;
            case "_":
              i += 2;
              break;
            case "@":
              ++i;
              break;
            case "B":
            case "b":
              if (fmt.charAt(i + 1) === "1" || fmt.charAt(i + 1) === "2") return true;
            case "M":
            case "D":
            case "Y":
            case "H":
            case "S":
            case "E":
            case "m":
            case "d":
            case "y":
            case "h":
            case "s":
            case "e":
            case "g":
              return true;
            case "A":
            case "a":
            case "\u4E0A":
              if (fmt.substr(i, 3).toUpperCase() === "A/P") return true;
              if (fmt.substr(i, 5).toUpperCase() === "AM/PM") return true;
              if (fmt.substr(i, 5).toUpperCase() === "\u4E0A\u5348/\u4E0B\u5348") return true;
              ++i;
              break;
            case "[":
              o = c;
              while (fmt.charAt(i++) !== "]" && i < fmt.length) o += fmt.charAt(i);
              if (o.match(SSF_abstime)) return true;
              break;
            case ".":
            case "0":
            case "#":
              while (i < fmt.length && ("0#?.,E+-%".indexOf(c = fmt.charAt(++i)) > -1 || c == "\\" && fmt.charAt(i + 1) == "-" && "0#".indexOf(fmt.charAt(i + 2)) > -1)) {
              }
              break;
            case "?":
              while (fmt.charAt(++i) === c) {
              }
              break;
            case "*":
              ++i;
              if (fmt.charAt(i) == " " || fmt.charAt(i) == "*") ++i;
              break;
            case "(":
            case ")":
              ++i;
              break;
            case "1":
            case "2":
            case "3":
            case "4":
            case "5":
            case "6":
            case "7":
            case "8":
            case "9":
              while (i < fmt.length && "0123456789".indexOf(fmt.charAt(++i)) > -1) {
              }
              break;
            case " ":
              ++i;
              break;
            default:
              ++i;
              break;
          }
        }
        return false;
      }
      function eval_fmt(fmt, v, opts, flen) {
        var out = [], o = "", i = 0, c = "", lst = "t", dt, j, cc;
        var hr = "H";
        while (i < fmt.length) {
          switch (c = fmt.charAt(i)) {
            case "G":
              if (!SSF_isgeneral(fmt, i)) throw new Error("unrecognized character " + c + " in " + fmt);
              out[out.length] = { t: "G", v: "General" };
              i += 7;
              break;
            case '"':
              for (o = ""; (cc = fmt.charCodeAt(++i)) !== 34 && i < fmt.length; ) o += String.fromCharCode(cc);
              out[out.length] = { t: "t", v: o };
              ++i;
              break;
            case "\\":
              var w = fmt.charAt(++i), t = w === "(" || w === ")" ? w : "t";
              out[out.length] = { t, v: w };
              ++i;
              break;
            case "_":
              out[out.length] = { t: "t", v: " " };
              i += 2;
              break;
            case "@":
              out[out.length] = { t: "T", v };
              ++i;
              break;
            case "B":
            case "b":
              if (fmt.charAt(i + 1) === "1" || fmt.charAt(i + 1) === "2") {
                if (dt == null) {
                  dt = SSF_parse_date_code(v, opts, fmt.charAt(i + 1) === "2");
                  if (dt == null) return "";
                }
                out[out.length] = { t: "X", v: fmt.substr(i, 2) };
                lst = c;
                i += 2;
                break;
              }
            case "M":
            case "D":
            case "Y":
            case "H":
            case "S":
            case "E":
              c = c.toLowerCase();
            case "m":
            case "d":
            case "y":
            case "h":
            case "s":
            case "e":
            case "g":
              if (v < 0) return "";
              if (dt == null) {
                dt = SSF_parse_date_code(v, opts);
                if (dt == null) return "";
              }
              o = c;
              while (++i < fmt.length && fmt.charAt(i).toLowerCase() === c) o += c;
              if (c === "m" && lst.toLowerCase() === "h") c = "M";
              if (c === "h") c = hr;
              out[out.length] = { t: c, v: o };
              lst = c;
              break;
            case "A":
            case "a":
            case "\u4E0A":
              var q = { t: c, v: c };
              if (dt == null) dt = SSF_parse_date_code(v, opts);
              if (fmt.substr(i, 3).toUpperCase() === "A/P") {
                if (dt != null) q.v = dt.H >= 12 ? "P" : "A";
                q.t = "T";
                hr = "h";
                i += 3;
              } else if (fmt.substr(i, 5).toUpperCase() === "AM/PM") {
                if (dt != null) q.v = dt.H >= 12 ? "PM" : "AM";
                q.t = "T";
                i += 5;
                hr = "h";
              } else if (fmt.substr(i, 5).toUpperCase() === "\u4E0A\u5348/\u4E0B\u5348") {
                if (dt != null) q.v = dt.H >= 12 ? "\u4E0B\u5348" : "\u4E0A\u5348";
                q.t = "T";
                i += 5;
                hr = "h";
              } else {
                q.t = "t";
                ++i;
              }
              if (dt == null && q.t === "T") return "";
              out[out.length] = q;
              lst = c;
              break;
            case "[":
              o = c;
              while (fmt.charAt(i++) !== "]" && i < fmt.length) o += fmt.charAt(i);
              if (o.slice(-1) !== "]") throw 'unterminated "[" block: |' + o + "|";
              if (o.match(SSF_abstime)) {
                if (dt == null) {
                  dt = SSF_parse_date_code(v, opts);
                  if (dt == null) return "";
                }
                out[out.length] = { t: "Z", v: o.toLowerCase() };
                lst = o.charAt(1);
              } else if (o.indexOf("$") > -1) {
                o = (o.match(/\$([^-\[\]]*)/) || [])[1] || "$";
                if (!fmt_is_date(fmt)) out[out.length] = { t: "t", v: o };
              }
              break;
            case ".":
              if (dt != null) {
                o = c;
                while (++i < fmt.length && (c = fmt.charAt(i)) === "0") o += c;
                out[out.length] = { t: "s", v: o };
                break;
              }
            case "0":
            case "#":
              o = c;
              while (++i < fmt.length && "0#?.,E+-%".indexOf(c = fmt.charAt(i)) > -1) o += c;
              out[out.length] = { t: "n", v: o };
              break;
            case "?":
              o = c;
              while (fmt.charAt(++i) === c) o += c;
              out[out.length] = { t: c, v: o };
              lst = c;
              break;
            case "*":
              ++i;
              if (fmt.charAt(i) == " " || fmt.charAt(i) == "*") ++i;
              break;
            case "(":
            case ")":
              out[out.length] = { t: flen === 1 ? "t" : c, v: c };
              ++i;
              break;
            case "1":
            case "2":
            case "3":
            case "4":
            case "5":
            case "6":
            case "7":
            case "8":
            case "9":
              o = c;
              while (i < fmt.length && "0123456789".indexOf(fmt.charAt(++i)) > -1) o += fmt.charAt(i);
              out[out.length] = { t: "D", v: o };
              break;
            case " ":
              out[out.length] = { t: c, v: c };
              ++i;
              break;
            case "$":
              out[out.length] = { t: "t", v: "$" };
              ++i;
              break;
            default:
              if (",$-+/():!^&'~{}<>=\u20ACacfijklopqrtuvwxzP".indexOf(c) === -1) throw new Error("unrecognized character " + c + " in " + fmt);
              out[out.length] = { t: "t", v: c };
              ++i;
              break;
          }
        }
        var bt = 0, ss0 = 0, ssm;
        for (i = out.length - 1, lst = "t"; i >= 0; --i) {
          switch (out[i].t) {
            case "h":
            case "H":
              out[i].t = hr;
              lst = "h";
              if (bt < 1) bt = 1;
              break;
            case "s":
              if (ssm = out[i].v.match(/\.0+$/)) ss0 = Math.max(ss0, ssm[0].length - 1);
              if (bt < 3) bt = 3;
            case "d":
            case "y":
            case "M":
            case "e":
              lst = out[i].t;
              break;
            case "m":
              if (lst === "s") {
                out[i].t = "M";
                if (bt < 2) bt = 2;
              }
              break;
            case "X":
              break;
            case "Z":
              if (bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;
              if (bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;
              if (bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;
          }
        }
        switch (bt) {
          case 0:
            break;
          case 1:
            if (dt.u >= 0.5) {
              dt.u = 0;
              ++dt.S;
            }
            if (dt.S >= 60) {
              dt.S = 0;
              ++dt.M;
            }
            if (dt.M >= 60) {
              dt.M = 0;
              ++dt.H;
            }
            break;
          case 2:
            if (dt.u >= 0.5) {
              dt.u = 0;
              ++dt.S;
            }
            if (dt.S >= 60) {
              dt.S = 0;
              ++dt.M;
            }
            break;
        }
        var nstr = "", jj;
        for (i = 0; i < out.length; ++i) {
          switch (out[i].t) {
            case "t":
            case "T":
            case " ":
            case "D":
              break;
            case "X":
              out[i].v = "";
              out[i].t = ";";
              break;
            case "d":
            case "m":
            case "y":
            case "h":
            case "H":
            case "M":
            case "s":
            case "e":
            case "b":
            case "Z":
              out[i].v = SSF_write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);
              out[i].t = "t";
              break;
            case "n":
            case "?":
              jj = i + 1;
              while (out[jj] != null && ((c = out[jj].t) === "?" || c === "D" || (c === " " || c === "t") && out[jj + 1] != null && (out[jj + 1].t === "?" || out[jj + 1].t === "t" && out[jj + 1].v === "/") || out[i].t === "(" && (c === " " || c === "n" || c === ")") || c === "t" && (out[jj].v === "/" || out[jj].v === " " && out[jj + 1] != null && out[jj + 1].t == "?"))) {
                out[i].v += out[jj].v;
                out[jj] = { v: "", t: ";" };
                ++jj;
              }
              nstr += out[i].v;
              i = jj - 1;
              break;
            case "G":
              out[i].t = "t";
              out[i].v = SSF_general(v, opts);
              break;
          }
        }
        var vv = "", myv, ostr;
        if (nstr.length > 0) {
          if (nstr.charCodeAt(0) == 40) {
            myv = v < 0 && nstr.charCodeAt(0) === 45 ? -v : v;
            ostr = write_num("n", nstr, myv);
          } else {
            myv = v < 0 && flen > 1 ? -v : v;
            ostr = write_num("n", nstr, myv);
            if (myv < 0 && out[0] && out[0].t == "t") {
              ostr = ostr.substr(1);
              out[0].v = "-" + out[0].v;
            }
          }
          jj = ostr.length - 1;
          var decpt = out.length;
          for (i = 0; i < out.length; ++i) if (out[i] != null && out[i].t != "t" && out[i].v.indexOf(".") > -1) {
            decpt = i;
            break;
          }
          var lasti = out.length;
          if (decpt === out.length && ostr.indexOf("E") === -1) {
            for (i = out.length - 1; i >= 0; --i) {
              if (out[i] == null || "n?".indexOf(out[i].t) === -1) continue;
              if (jj >= out[i].v.length - 1) {
                jj -= out[i].v.length;
                out[i].v = ostr.substr(jj + 1, out[i].v.length);
              } else if (jj < 0) out[i].v = "";
              else {
                out[i].v = ostr.substr(0, jj + 1);
                jj = -1;
              }
              out[i].t = "t";
              lasti = i;
            }
            if (jj >= 0 && lasti < out.length) out[lasti].v = ostr.substr(0, jj + 1) + out[lasti].v;
          } else if (decpt !== out.length && ostr.indexOf("E") === -1) {
            jj = ostr.indexOf(".") - 1;
            for (i = decpt; i >= 0; --i) {
              if (out[i] == null || "n?".indexOf(out[i].t) === -1) continue;
              j = out[i].v.indexOf(".") > -1 && i === decpt ? out[i].v.indexOf(".") - 1 : out[i].v.length - 1;
              vv = out[i].v.substr(j + 1);
              for (; j >= 0; --j) {
                if (jj >= 0 && (out[i].v.charAt(j) === "0" || out[i].v.charAt(j) === "#")) vv = ostr.charAt(jj--) + vv;
              }
              out[i].v = vv;
              out[i].t = "t";
              lasti = i;
            }
            if (jj >= 0 && lasti < out.length) out[lasti].v = ostr.substr(0, jj + 1) + out[lasti].v;
            jj = ostr.indexOf(".") + 1;
            for (i = decpt; i < out.length; ++i) {
              if (out[i] == null || "n?(".indexOf(out[i].t) === -1 && i !== decpt) continue;
              j = out[i].v.indexOf(".") > -1 && i === decpt ? out[i].v.indexOf(".") + 1 : 0;
              vv = out[i].v.substr(0, j);
              for (; j < out[i].v.length; ++j) {
                if (jj < ostr.length) vv += ostr.charAt(jj++);
              }
              out[i].v = vv;
              out[i].t = "t";
              lasti = i;
            }
          }
        }
        for (i = 0; i < out.length; ++i) if (out[i] != null && "n?".indexOf(out[i].t) > -1) {
          myv = flen > 1 && v < 0 && i > 0 && out[i - 1].v === "-" ? -v : v;
          out[i].v = write_num(out[i].t, out[i].v, myv);
          out[i].t = "t";
        }
        var retval = "";
        for (i = 0; i !== out.length; ++i) if (out[i] != null) retval += out[i].v;
        return retval;
      }
      var cfregex2 = /\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;
      function chkcond(v, rr) {
        if (rr == null) return false;
        var thresh = parseFloat(rr[2]);
        switch (rr[1]) {
          case "=":
            if (v == thresh) return true;
            break;
          case ">":
            if (v > thresh) return true;
            break;
          case "<":
            if (v < thresh) return true;
            break;
          case "<>":
            if (v != thresh) return true;
            break;
          case ">=":
            if (v >= thresh) return true;
            break;
          case "<=":
            if (v <= thresh) return true;
            break;
        }
        return false;
      }
      function choose_fmt(f, v) {
        var fmt = SSF_split_fmt(f);
        var l = fmt.length, lat = fmt[l - 1].indexOf("@");
        if (l < 4 && lat > -1) --l;
        if (fmt.length > 4) throw new Error("cannot find right format for |" + fmt.join("|") + "|");
        if (typeof v !== "number") return [4, fmt.length === 4 || lat > -1 ? fmt[fmt.length - 1] : "@"];
        switch (fmt.length) {
          case 1:
            fmt = lat > -1 ? ["General", "General", "General", fmt[0]] : [fmt[0], fmt[0], fmt[0], "@"];
            break;
          case 2:
            fmt = lat > -1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], "@"];
            break;
          case 3:
            fmt = lat > -1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], "@"];
            break;
          case 4:
            break;
        }
        var ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];
        if (fmt[0].indexOf("[") === -1 && fmt[1].indexOf("[") === -1) return [l, ff];
        if (fmt[0].match(/\[[=<>]/) != null || fmt[1].match(/\[[=<>]/) != null) {
          var m1 = fmt[0].match(cfregex2);
          var m2 = fmt[1].match(cfregex2);
          return chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];
        }
        return [l, ff];
      }
      function SSF_format(fmt, v, o) {
        if (o == null) o = {};
        var sfmt = "";
        switch (typeof fmt) {
          case "string":
            if (fmt == "m/d/yy" && o.dateNF) sfmt = o.dateNF;
            else sfmt = fmt;
            break;
          case "number":
            if (fmt == 14 && o.dateNF) sfmt = o.dateNF;
            else sfmt = (o.table != null ? o.table : table_fmt)[fmt];
            if (sfmt == null) sfmt = o.table && o.table[SSF_default_map[fmt]] || table_fmt[SSF_default_map[fmt]];
            if (sfmt == null) sfmt = SSF_default_str[fmt] || "General";
            break;
        }
        if (SSF_isgeneral(sfmt, 0)) return SSF_general(v, o);
        if (v instanceof Date) v = datenum_local(v, o.date1904);
        var f = choose_fmt(sfmt, v);
        if (SSF_isgeneral(f[1])) return SSF_general(v, o);
        if (v === true) v = "TRUE";
        else if (v === false) v = "FALSE";
        else if (v === "" || v == null) return "";
        return eval_fmt(f[1], v, o, f[0]);
      }
      function SSF_load(fmt, idx) {
        if (typeof idx != "number") {
          idx = +idx || -1;
          for (var i = 0; i < 392; ++i) {
            if (table_fmt[i] == void 0) {
              if (idx < 0) idx = i;
              continue;
            }
            if (table_fmt[i] == fmt) {
              idx = i;
              break;
            }
          }
          if (idx < 0) idx = 391;
        }
        table_fmt[idx] = fmt;
        return idx;
      }
      function SSF_load_table(tbl) {
        for (var i = 0; i != 392; ++i)
          if (tbl[i] !== void 0) SSF_load(tbl[i], i);
      }
      function make_ssf() {
        table_fmt = SSF_init_table();
      }
      var SSF = {
        format: SSF_format,
        load: SSF_load,
        _table: table_fmt,
        load_table: SSF_load_table,
        parse_date_code: SSF_parse_date_code,
        is_date: fmt_is_date,
        get_table: function get_table() {
          return SSF._table = table_fmt;
        }
      };
      var SSFImplicit = {
        "5": '"$"#,##0_);\\("$"#,##0\\)',
        "6": '"$"#,##0_);[Red]\\("$"#,##0\\)',
        "7": '"$"#,##0.00_);\\("$"#,##0.00\\)',
        "8": '"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',
        "23": "General",
        "24": "General",
        "25": "General",
        "26": "General",
        "27": "m/d/yy",
        "28": "m/d/yy",
        "29": "m/d/yy",
        "30": "m/d/yy",
        "31": "m/d/yy",
        "32": "h:mm:ss",
        "33": "h:mm:ss",
        "34": "h:mm:ss",
        "35": "h:mm:ss",
        "36": "m/d/yy",
        "41": '_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)',
        "42": '_("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)',
        "43": '_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)',
        "44": '_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)',
        "50": "m/d/yy",
        "51": "m/d/yy",
        "52": "m/d/yy",
        "53": "m/d/yy",
        "54": "m/d/yy",
        "55": "m/d/yy",
        "56": "m/d/yy",
        "57": "m/d/yy",
        "58": "m/d/yy",
        "59": "0",
        "60": "0.00",
        "61": "#,##0",
        "62": "#,##0.00",
        "63": '"$"#,##0_);\\("$"#,##0\\)',
        "64": '"$"#,##0_);[Red]\\("$"#,##0\\)',
        "65": '"$"#,##0.00_);\\("$"#,##0.00\\)',
        "66": '"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',
        "67": "0%",
        "68": "0.00%",
        "69": "# ?/?",
        "70": "# ??/??",
        "71": "m/d/yy",
        "72": "m/d/yy",
        "73": "d-mmm-yy",
        "74": "d-mmm",
        "75": "mmm-yy",
        "76": "h:mm",
        "77": "h:mm:ss",
        "78": "m/d/yy h:mm",
        "79": "mm:ss",
        "80": "[h]:mm:ss",
        "81": "mmss.0"
      };
      var dateNFregex = /[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;
      function dateNF_regex(dateNF) {
        var fmt = typeof dateNF == "number" ? table_fmt[dateNF] : dateNF;
        fmt = fmt.replace(dateNFregex, "(\\d+)");
        return new RegExp("^" + fmt + "$");
      }
      function dateNF_fix(str, dateNF, match) {
        var Y = -1, m = -1, d = -1, H = -1, M = -1, S = -1;
        (dateNF.match(dateNFregex) || []).forEach(function(n, i) {
          var v = parseInt(match[i + 1], 10);
          switch (n.toLowerCase().charAt(0)) {
            case "y":
              Y = v;
              break;
            case "d":
              d = v;
              break;
            case "h":
              H = v;
              break;
            case "s":
              S = v;
              break;
            case "m":
              if (H >= 0) M = v;
              else m = v;
              break;
          }
        });
        if (S >= 0 && M == -1 && m >= 0) {
          M = m;
          m = -1;
        }
        var datestr = ("" + (Y >= 0 ? Y : (/* @__PURE__ */ new Date()).getFullYear())).slice(-4) + "-" + ("00" + (m >= 1 ? m : 1)).slice(-2) + "-" + ("00" + (d >= 1 ? d : 1)).slice(-2);
        if (datestr.length == 7) datestr = "0" + datestr;
        if (datestr.length == 8) datestr = "20" + datestr;
        var timestr = ("00" + (H >= 0 ? H : 0)).slice(-2) + ":" + ("00" + (M >= 0 ? M : 0)).slice(-2) + ":" + ("00" + (S >= 0 ? S : 0)).slice(-2);
        if (H == -1 && M == -1 && S == -1) return datestr;
        if (Y == -1 && m == -1 && d == -1) return timestr;
        return datestr + "T" + timestr;
      }
      var CRC32 = function() {
        var CRC322 = {};
        CRC322.version = "1.2.0";
        function signed_crc_table() {
          var c = 0, table = new Array(256);
          for (var n = 0; n != 256; ++n) {
            c = n;
            c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;
            c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;
            c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;
            c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;
            c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;
            c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;
            c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;
            c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;
            table[n] = c;
          }
          return typeof Int32Array !== "undefined" ? new Int32Array(table) : table;
        }
        var T0 = signed_crc_table();
        function slice_by_16_tables(T) {
          var c = 0, v = 0, n = 0, table = typeof Int32Array !== "undefined" ? new Int32Array(4096) : new Array(4096);
          for (n = 0; n != 256; ++n) table[n] = T[n];
          for (n = 0; n != 256; ++n) {
            v = T[n];
            for (c = 256 + n; c < 4096; c += 256) v = table[c] = v >>> 8 ^ T[v & 255];
          }
          var out = [];
          for (n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== "undefined" ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256);
          return out;
        }
        var TT = slice_by_16_tables(T0);
        var T1 = TT[0], T2 = TT[1], T3 = TT[2], T4 = TT[3], T5 = TT[4];
        var T6 = TT[5], T7 = TT[6], T8 = TT[7], T9 = TT[8], Ta = TT[9];
        var Tb = TT[10], Tc = TT[11], Td = TT[12], Te = TT[13], Tf = TT[14];
        function crc32_bstr(bstr, seed) {
          var C = seed ^ -1;
          for (var i = 0, L = bstr.length; i < L; ) C = C >>> 8 ^ T0[(C ^ bstr.charCodeAt(i++)) & 255];
          return ~C;
        }
        function crc32_buf(B, seed) {
          var C = seed ^ -1, L = B.length - 15, i = 0;
          for (; i < L; ) C = Tf[B[i++] ^ C & 255] ^ Te[B[i++] ^ C >> 8 & 255] ^ Td[B[i++] ^ C >> 16 & 255] ^ Tc[B[i++] ^ C >>> 24] ^ Tb[B[i++]] ^ Ta[B[i++]] ^ T9[B[i++]] ^ T8[B[i++]] ^ T7[B[i++]] ^ T6[B[i++]] ^ T5[B[i++]] ^ T4[B[i++]] ^ T3[B[i++]] ^ T2[B[i++]] ^ T1[B[i++]] ^ T0[B[i++]];
          L += 15;
          while (i < L) C = C >>> 8 ^ T0[(C ^ B[i++]) & 255];
          return ~C;
        }
        function crc32_str(str, seed) {
          var C = seed ^ -1;
          for (var i = 0, L = str.length, c = 0, d = 0; i < L; ) {
            c = str.charCodeAt(i++);
            if (c < 128) {
              C = C >>> 8 ^ T0[(C ^ c) & 255];
            } else if (c < 2048) {
              C = C >>> 8 ^ T0[(C ^ (192 | c >> 6 & 31)) & 255];
              C = C >>> 8 ^ T0[(C ^ (128 | c & 63)) & 255];
            } else if (c >= 55296 && c < 57344) {
              c = (c & 1023) + 64;
              d = str.charCodeAt(i++) & 1023;
              C = C >>> 8 ^ T0[(C ^ (240 | c >> 8 & 7)) & 255];
              C = C >>> 8 ^ T0[(C ^ (128 | c >> 2 & 63)) & 255];
              C = C >>> 8 ^ T0[(C ^ (128 | d >> 6 & 15 | (c & 3) << 4)) & 255];
              C = C >>> 8 ^ T0[(C ^ (128 | d & 63)) & 255];
            } else {
              C = C >>> 8 ^ T0[(C ^ (224 | c >> 12 & 15)) & 255];
              C = C >>> 8 ^ T0[(C ^ (128 | c >> 6 & 63)) & 255];
              C = C >>> 8 ^ T0[(C ^ (128 | c & 63)) & 255];
            }
          }
          return ~C;
        }
        CRC322.table = T0;
        CRC322.bstr = crc32_bstr;
        CRC322.buf = crc32_buf;
        CRC322.str = crc32_str;
        return CRC322;
      }();
      var CFB = function _CFB() {
        var exports2 = {};
        exports2.version = "1.2.1";
        function namecmp(l, r) {
          var L = l.split("/"), R = r.split("/");
          for (var i2 = 0, c = 0, Z = Math.min(L.length, R.length); i2 < Z; ++i2) {
            if (c = L[i2].length - R[i2].length) return c;
            if (L[i2] != R[i2]) return L[i2] < R[i2] ? -1 : 1;
          }
          return L.length - R.length;
        }
        function dirname(p) {
          if (p.charAt(p.length - 1) == "/") return p.slice(0, -1).indexOf("/") === -1 ? p : dirname(p.slice(0, -1));
          var c = p.lastIndexOf("/");
          return c === -1 ? p : p.slice(0, c + 1);
        }
        function filename(p) {
          if (p.charAt(p.length - 1) == "/") return filename(p.slice(0, -1));
          var c = p.lastIndexOf("/");
          return c === -1 ? p : p.slice(c + 1);
        }
        function write_dos_date(buf, date) {
          if (typeof date === "string") date = new Date(date);
          var hms = date.getHours();
          hms = hms << 6 | date.getMinutes();
          hms = hms << 5 | date.getSeconds() >>> 1;
          buf.write_shift(2, hms);
          var ymd = date.getFullYear() - 1980;
          ymd = ymd << 4 | date.getMonth() + 1;
          ymd = ymd << 5 | date.getDate();
          buf.write_shift(2, ymd);
        }
        function parse_dos_date(buf) {
          var hms = buf.read_shift(2) & 65535;
          var ymd = buf.read_shift(2) & 65535;
          var val = /* @__PURE__ */ new Date();
          var d = ymd & 31;
          ymd >>>= 5;
          var m = ymd & 15;
          ymd >>>= 4;
          val.setMilliseconds(0);
          val.setFullYear(ymd + 1980);
          val.setMonth(m - 1);
          val.setDate(d);
          var S = hms & 31;
          hms >>>= 5;
          var M = hms & 63;
          hms >>>= 6;
          val.setHours(hms);
          val.setMinutes(M);
          val.setSeconds(S << 1);
          return val;
        }
        function parse_extra_field(blob) {
          prep_blob(blob, 0);
          var o = {};
          var flags = 0;
          while (blob.l <= blob.length - 4) {
            var type = blob.read_shift(2);
            var sz = blob.read_shift(2), tgt = blob.l + sz;
            var p = {};
            switch (type) {
              case 21589:
                {
                  flags = blob.read_shift(1);
                  if (flags & 1) p.mtime = blob.read_shift(4);
                  if (sz > 5) {
                    if (flags & 2) p.atime = blob.read_shift(4);
                    if (flags & 4) p.ctime = blob.read_shift(4);
                  }
                  if (p.mtime) p.mt = new Date(p.mtime * 1e3);
                }
                break;
            }
            blob.l = tgt;
            o[type] = p;
          }
          return o;
        }
        var fs16;
        function get_fs() {
          return fs16 || (fs16 = __require("fs"));
        }
        function parse(file, options) {
          if (file[0] == 80 && file[1] == 75) return parse_zip2(file, options);
          if ((file[0] | 32) == 109 && (file[1] | 32) == 105) return parse_mad(file, options);
          if (file.length < 512) throw new Error("CFB file size " + file.length + " < 512");
          var mver = 3;
          var ssz = 512;
          var nmfs = 0;
          var difat_sec_cnt = 0;
          var dir_start = 0;
          var minifat_start = 0;
          var difat_start = 0;
          var fat_addrs = [];
          var blob = file.slice(0, 512);
          prep_blob(blob, 0);
          var mv = check_get_mver(blob);
          mver = mv[0];
          switch (mver) {
            case 3:
              ssz = 512;
              break;
            case 4:
              ssz = 4096;
              break;
            case 0:
              if (mv[1] == 0) return parse_zip2(file, options);
            default:
              throw new Error("Major Version: Expected 3 or 4 saw " + mver);
          }
          if (ssz !== 512) {
            blob = file.slice(0, ssz);
            prep_blob(
              blob,
              28
              /* blob.l */
            );
          }
          var header = file.slice(0, ssz);
          check_shifts(blob, mver);
          var dir_cnt = blob.read_shift(4, "i");
          if (mver === 3 && dir_cnt !== 0) throw new Error("# Directory Sectors: Expected 0 saw " + dir_cnt);
          blob.l += 4;
          dir_start = blob.read_shift(4, "i");
          blob.l += 4;
          blob.chk("00100000", "Mini Stream Cutoff Size: ");
          minifat_start = blob.read_shift(4, "i");
          nmfs = blob.read_shift(4, "i");
          difat_start = blob.read_shift(4, "i");
          difat_sec_cnt = blob.read_shift(4, "i");
          for (var q2 = -1, j = 0; j < 109; ++j) {
            q2 = blob.read_shift(4, "i");
            if (q2 < 0) break;
            fat_addrs[j] = q2;
          }
          var sectors = sectorify(file, ssz);
          sleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs);
          var sector_list = make_sector_list(sectors, dir_start, fat_addrs, ssz);
          sector_list[dir_start].name = "!Directory";
          if (nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = "!MiniFAT";
          sector_list[fat_addrs[0]].name = "!FAT";
          sector_list.fat_addrs = fat_addrs;
          sector_list.ssz = ssz;
          var files = {}, Paths = [], FileIndex = [], FullPaths = [];
          read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start);
          build_full_paths(FileIndex, FullPaths, Paths);
          Paths.shift();
          var o = {
            FileIndex,
            FullPaths
          };
          if (options && options.raw) o.raw = { header, sectors };
          return o;
        }
        function check_get_mver(blob) {
          if (blob[blob.l] == 80 && blob[blob.l + 1] == 75) return [0, 0];
          blob.chk(HEADER_SIGNATURE, "Header Signature: ");
          blob.l += 16;
          var mver = blob.read_shift(2, "u");
          return [blob.read_shift(2, "u"), mver];
        }
        function check_shifts(blob, mver) {
          var shift = 9;
          blob.l += 2;
          switch (shift = blob.read_shift(2)) {
            case 9:
              if (mver != 3) throw new Error("Sector Shift: Expected 9 saw " + shift);
              break;
            case 12:
              if (mver != 4) throw new Error("Sector Shift: Expected 12 saw " + shift);
              break;
            default:
              throw new Error("Sector Shift: Expected 9 or 12 saw " + shift);
          }
          blob.chk("0600", "Mini Sector Shift: ");
          blob.chk("000000000000", "Reserved: ");
        }
        function sectorify(file, ssz) {
          var nsectors = Math.ceil(file.length / ssz) - 1;
          var sectors = [];
          for (var i2 = 1; i2 < nsectors; ++i2) sectors[i2 - 1] = file.slice(i2 * ssz, (i2 + 1) * ssz);
          sectors[nsectors - 1] = file.slice(nsectors * ssz);
          return sectors;
        }
        function build_full_paths(FI, FP, Paths) {
          var i2 = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length;
          var dad = [], q2 = [];
          for (; i2 < pl; ++i2) {
            dad[i2] = q2[i2] = i2;
            FP[i2] = Paths[i2];
          }
          for (; j < q2.length; ++j) {
            i2 = q2[j];
            L = FI[i2].L;
            R = FI[i2].R;
            C = FI[i2].C;
            if (dad[i2] === i2) {
              if (L !== -1 && dad[L] !== L) dad[i2] = dad[L];
              if (R !== -1 && dad[R] !== R) dad[i2] = dad[R];
            }
            if (C !== -1) dad[C] = i2;
            if (L !== -1 && i2 != dad[i2]) {
              dad[L] = dad[i2];
              if (q2.lastIndexOf(L) < j) q2.push(L);
            }
            if (R !== -1 && i2 != dad[i2]) {
              dad[R] = dad[i2];
              if (q2.lastIndexOf(R) < j) q2.push(R);
            }
          }
          for (i2 = 1; i2 < pl; ++i2) if (dad[i2] === i2) {
            if (R !== -1 && dad[R] !== R) dad[i2] = dad[R];
            else if (L !== -1 && dad[L] !== L) dad[i2] = dad[L];
          }
          for (i2 = 1; i2 < pl; ++i2) {
            if (FI[i2].type === 0) continue;
            j = i2;
            if (j != dad[j]) do {
              j = dad[j];
              FP[i2] = FP[j] + "/" + FP[i2];
            } while (j !== 0 && -1 !== dad[j] && j != dad[j]);
            dad[i2] = -1;
          }
          FP[0] += "/";
          for (i2 = 1; i2 < pl; ++i2) {
            if (FI[i2].type !== 2) FP[i2] += "/";
          }
        }
        function get_mfat_entry(entry, payload, mini) {
          var start = entry.start, size = entry.size;
          var o = [];
          var idx = start;
          while (mini && size > 0 && idx >= 0) {
            o.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ));
            size -= MSSZ;
            idx = __readInt32LE(mini, idx * 4);
          }
          if (o.length === 0) return new_buf(0);
          return bconcat(o).slice(0, entry.size);
        }
        function sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) {
          var q2 = ENDOFCHAIN;
          if (idx === ENDOFCHAIN) {
            if (cnt !== 0) throw new Error("DIFAT chain shorter than expected");
          } else if (idx !== -1) {
            var sector = sectors[idx], m = (ssz >>> 2) - 1;
            if (!sector) return;
            for (var i2 = 0; i2 < m; ++i2) {
              if ((q2 = __readInt32LE(sector, i2 * 4)) === ENDOFCHAIN) break;
              fat_addrs.push(q2);
            }
            sleuth_fat(__readInt32LE(sector, ssz - 4), cnt - 1, sectors, ssz, fat_addrs);
          }
        }
        function get_sector_list(sectors, start, fat_addrs, ssz, chkd) {
          var buf = [], buf_chain = [];
          if (!chkd) chkd = [];
          var modulus = ssz - 1, j = 0, jj = 0;
          for (j = start; j >= 0; ) {
            chkd[j] = true;
            buf[buf.length] = j;
            buf_chain.push(sectors[j]);
            var addr = fat_addrs[Math.floor(j * 4 / ssz)];
            jj = j * 4 & modulus;
            if (ssz < 4 + jj) throw new Error("FAT boundary crossed: " + j + " 4 " + ssz);
            if (!sectors[addr]) break;
            j = __readInt32LE(sectors[addr], jj);
          }
          return { nodes: buf, data: __toBuffer([buf_chain]) };
        }
        function make_sector_list(sectors, dir_start, fat_addrs, ssz) {
          var sl = sectors.length, sector_list = [];
          var chkd = [], buf = [], buf_chain = [];
          var modulus = ssz - 1, i2 = 0, j = 0, k = 0, jj = 0;
          for (i2 = 0; i2 < sl; ++i2) {
            buf = [];
            k = i2 + dir_start;
            if (k >= sl) k -= sl;
            if (chkd[k]) continue;
            buf_chain = [];
            var seen = [];
            for (j = k; j >= 0; ) {
              seen[j] = true;
              chkd[j] = true;
              buf[buf.length] = j;
              buf_chain.push(sectors[j]);
              var addr = fat_addrs[Math.floor(j * 4 / ssz)];
              jj = j * 4 & modulus;
              if (ssz < 4 + jj) throw new Error("FAT boundary crossed: " + j + " 4 " + ssz);
              if (!sectors[addr]) break;
              j = __readInt32LE(sectors[addr], jj);
              if (seen[j]) break;
            }
            sector_list[k] = { nodes: buf, data: __toBuffer([buf_chain]) };
          }
          return sector_list;
        }
        function read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, mini) {
          var minifat_store = 0, pl = Paths.length ? 2 : 0;
          var sector = sector_list[dir_start].data;
          var i2 = 0, namelen = 0, name;
          for (; i2 < sector.length; i2 += 128) {
            var blob = sector.slice(i2, i2 + 128);
            prep_blob(blob, 64);
            namelen = blob.read_shift(2);
            name = __utf16le(blob, 0, namelen - pl);
            Paths.push(name);
            var o = {
              name,
              type: blob.read_shift(1),
              color: blob.read_shift(1),
              L: blob.read_shift(4, "i"),
              R: blob.read_shift(4, "i"),
              C: blob.read_shift(4, "i"),
              clsid: blob.read_shift(16),
              state: blob.read_shift(4, "i"),
              start: 0,
              size: 0
            };
            var ctime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);
            if (ctime !== 0) o.ct = read_date(blob, blob.l - 8);
            var mtime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);
            if (mtime !== 0) o.mt = read_date(blob, blob.l - 8);
            o.start = blob.read_shift(4, "i");
            o.size = blob.read_shift(4, "i");
            if (o.size < 0 && o.start < 0) {
              o.size = o.type = 0;
              o.start = ENDOFCHAIN;
              o.name = "";
            }
            if (o.type === 5) {
              minifat_store = o.start;
              if (nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = "!StreamData";
            } else if (o.size >= 4096) {
              o.storage = "fat";
              if (sector_list[o.start] === void 0) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);
              sector_list[o.start].name = o.name;
              o.content = sector_list[o.start].data.slice(0, o.size);
            } else {
              o.storage = "minifat";
              if (o.size < 0) o.size = 0;
              else if (minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) {
                o.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini] || {}).data);
              }
            }
            if (o.content) prep_blob(o.content, 0);
            files[name] = o;
            FileIndex.push(o);
          }
        }
        function read_date(blob, offset) {
          return new Date((__readUInt32LE(blob, offset + 4) / 1e7 * Math.pow(2, 32) + __readUInt32LE(blob, offset) / 1e7 - 11644473600) * 1e3);
        }
        function read_file(filename2, options) {
          get_fs();
          return parse(fs16.readFileSync(filename2), options);
        }
        function read(blob, options) {
          var type = options && options.type;
          if (!type) {
            if (has_buf && Buffer.isBuffer(blob)) type = "buffer";
          }
          switch (type || "base64") {
            case "file":
              return read_file(blob, options);
            case "base64":
              return parse(s2a(Base64_decode(blob)), options);
            case "binary":
              return parse(s2a(blob), options);
          }
          return parse(blob, options);
        }
        function init_cfb(cfb, opts) {
          var o = opts || {}, root = o.root || "Root Entry";
          if (!cfb.FullPaths) cfb.FullPaths = [];
          if (!cfb.FileIndex) cfb.FileIndex = [];
          if (cfb.FullPaths.length !== cfb.FileIndex.length) throw new Error("inconsistent CFB structure");
          if (cfb.FullPaths.length === 0) {
            cfb.FullPaths[0] = root + "/";
            cfb.FileIndex[0] = { name: root, type: 5 };
          }
          if (o.CLSID) cfb.FileIndex[0].clsid = o.CLSID;
          seed_cfb(cfb);
        }
        function seed_cfb(cfb) {
          var nm = "Sh33tJ5";
          if (CFB.find(cfb, "/" + nm)) return;
          var p = new_buf(4);
          p[0] = 55;
          p[1] = p[3] = 50;
          p[2] = 54;
          cfb.FileIndex.push({ name: nm, type: 2, content: p, size: 4, L: 69, R: 69, C: 69 });
          cfb.FullPaths.push(cfb.FullPaths[0] + nm);
          rebuild_cfb(cfb);
        }
        function rebuild_cfb(cfb, f) {
          init_cfb(cfb);
          var gc = false, s = false;
          for (var i2 = cfb.FullPaths.length - 1; i2 >= 0; --i2) {
            var _file = cfb.FileIndex[i2];
            switch (_file.type) {
              case 0:
                if (s) gc = true;
                else {
                  cfb.FileIndex.pop();
                  cfb.FullPaths.pop();
                }
                break;
              case 1:
              case 2:
              case 5:
                s = true;
                if (isNaN(_file.R * _file.L * _file.C)) gc = true;
                if (_file.R > -1 && _file.L > -1 && _file.R == _file.L) gc = true;
                break;
              default:
                gc = true;
                break;
            }
          }
          if (!gc && !f) return;
          var now = new Date(1987, 1, 19), j = 0;
          var fullPaths = Object.create ? /* @__PURE__ */ Object.create(null) : {};
          var data = [];
          for (i2 = 0; i2 < cfb.FullPaths.length; ++i2) {
            fullPaths[cfb.FullPaths[i2]] = true;
            if (cfb.FileIndex[i2].type === 0) continue;
            data.push([cfb.FullPaths[i2], cfb.FileIndex[i2]]);
          }
          for (i2 = 0; i2 < data.length; ++i2) {
            var dad = dirname(data[i2][0]);
            s = fullPaths[dad];
            if (!s) {
              data.push([dad, {
                name: filename(dad).replace("/", ""),
                type: 1,
                clsid: HEADER_CLSID,
                ct: now,
                mt: now,
                content: null
              }]);
              fullPaths[dad] = true;
            }
          }
          data.sort(function(x, y) {
            return namecmp(x[0], y[0]);
          });
          cfb.FullPaths = [];
          cfb.FileIndex = [];
          for (i2 = 0; i2 < data.length; ++i2) {
            cfb.FullPaths[i2] = data[i2][0];
            cfb.FileIndex[i2] = data[i2][1];
          }
          for (i2 = 0; i2 < data.length; ++i2) {
            var elt = cfb.FileIndex[i2];
            var nm = cfb.FullPaths[i2];
            elt.name = filename(nm).replace("/", "");
            elt.L = elt.R = elt.C = -(elt.color = 1);
            elt.size = elt.content ? elt.content.length : 0;
            elt.start = 0;
            elt.clsid = elt.clsid || HEADER_CLSID;
            if (i2 === 0) {
              elt.C = data.length > 1 ? 1 : -1;
              elt.size = 0;
              elt.type = 5;
            } else if (nm.slice(-1) == "/") {
              for (j = i2 + 1; j < data.length; ++j) if (dirname(cfb.FullPaths[j]) == nm) break;
              elt.C = j >= data.length ? -1 : j;
              for (j = i2 + 1; j < data.length; ++j) if (dirname(cfb.FullPaths[j]) == dirname(nm)) break;
              elt.R = j >= data.length ? -1 : j;
              elt.type = 1;
            } else {
              if (dirname(cfb.FullPaths[i2 + 1] || "") == dirname(nm)) elt.R = i2 + 1;
              elt.type = 2;
            }
          }
        }
        function _write(cfb, options) {
          var _opts = options || {};
          if (_opts.fileType == "mad") return write_mad(cfb, _opts);
          rebuild_cfb(cfb);
          switch (_opts.fileType) {
            case "zip":
              return write_zip2(cfb, _opts);
          }
          var L = function(cfb2) {
            var mini_size = 0, fat_size = 0;
            for (var i3 = 0; i3 < cfb2.FileIndex.length; ++i3) {
              var file2 = cfb2.FileIndex[i3];
              if (!file2.content) continue;
              var flen2 = file2.content.length;
              if (flen2 > 0) {
                if (flen2 < 4096) mini_size += flen2 + 63 >> 6;
                else fat_size += flen2 + 511 >> 9;
              }
            }
            var dir_cnt = cfb2.FullPaths.length + 3 >> 2;
            var mini_cnt = mini_size + 7 >> 3;
            var mfat_cnt = mini_size + 127 >> 7;
            var fat_base = mini_cnt + fat_size + dir_cnt + mfat_cnt;
            var fat_cnt = fat_base + 127 >> 7;
            var difat_cnt = fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt - 109) / 127);
            while (fat_base + fat_cnt + difat_cnt + 127 >> 7 > fat_cnt) difat_cnt = ++fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt - 109) / 127);
            var L2 = [1, difat_cnt, fat_cnt, mfat_cnt, dir_cnt, fat_size, mini_size, 0];
            cfb2.FileIndex[0].size = mini_size << 6;
            L2[7] = (cfb2.FileIndex[0].start = L2[0] + L2[1] + L2[2] + L2[3] + L2[4] + L2[5]) + (L2[6] + 7 >> 3);
            return L2;
          }(cfb);
          var o = new_buf(L[7] << 9);
          var i2 = 0, T = 0;
          {
            for (i2 = 0; i2 < 8; ++i2) o.write_shift(1, HEADER_SIG[i2]);
            for (i2 = 0; i2 < 8; ++i2) o.write_shift(2, 0);
            o.write_shift(2, 62);
            o.write_shift(2, 3);
            o.write_shift(2, 65534);
            o.write_shift(2, 9);
            o.write_shift(2, 6);
            for (i2 = 0; i2 < 3; ++i2) o.write_shift(2, 0);
            o.write_shift(4, 0);
            o.write_shift(4, L[2]);
            o.write_shift(4, L[0] + L[1] + L[2] + L[3] - 1);
            o.write_shift(4, 0);
            o.write_shift(4, 1 << 12);
            o.write_shift(4, L[3] ? L[0] + L[1] + L[2] - 1 : ENDOFCHAIN);
            o.write_shift(4, L[3]);
            o.write_shift(-4, L[1] ? L[0] - 1 : ENDOFCHAIN);
            o.write_shift(4, L[1]);
            for (i2 = 0; i2 < 109; ++i2) o.write_shift(-4, i2 < L[2] ? L[1] + i2 : -1);
          }
          if (L[1]) {
            for (T = 0; T < L[1]; ++T) {
              for (; i2 < 236 + T * 127; ++i2) o.write_shift(-4, i2 < L[2] ? L[1] + i2 : -1);
              o.write_shift(-4, T === L[1] - 1 ? ENDOFCHAIN : T + 1);
            }
          }
          var chainit = function(w) {
            for (T += w; i2 < T - 1; ++i2) o.write_shift(-4, i2 + 1);
            if (w) {
              ++i2;
              o.write_shift(-4, ENDOFCHAIN);
            }
          };
          T = i2 = 0;
          for (T += L[1]; i2 < T; ++i2) o.write_shift(-4, consts.DIFSECT);
          for (T += L[2]; i2 < T; ++i2) o.write_shift(-4, consts.FATSECT);
          chainit(L[3]);
          chainit(L[4]);
          var j = 0, flen = 0;
          var file = cfb.FileIndex[0];
          for (; j < cfb.FileIndex.length; ++j) {
            file = cfb.FileIndex[j];
            if (!file.content) continue;
            flen = file.content.length;
            if (flen < 4096) continue;
            file.start = T;
            chainit(flen + 511 >> 9);
          }
          chainit(L[6] + 7 >> 3);
          while (o.l & 511) o.write_shift(-4, consts.ENDOFCHAIN);
          T = i2 = 0;
          for (j = 0; j < cfb.FileIndex.length; ++j) {
            file = cfb.FileIndex[j];
            if (!file.content) continue;
            flen = file.content.length;
            if (!flen || flen >= 4096) continue;
            file.start = T;
            chainit(flen + 63 >> 6);
          }
          while (o.l & 511) o.write_shift(-4, consts.ENDOFCHAIN);
          for (i2 = 0; i2 < L[4] << 2; ++i2) {
            var nm = cfb.FullPaths[i2];
            if (!nm || nm.length === 0) {
              for (j = 0; j < 17; ++j) o.write_shift(4, 0);
              for (j = 0; j < 3; ++j) o.write_shift(4, -1);
              for (j = 0; j < 12; ++j) o.write_shift(4, 0);
              continue;
            }
            file = cfb.FileIndex[i2];
            if (i2 === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;
            var _nm = i2 === 0 && _opts.root || file.name;
            flen = 2 * (_nm.length + 1);
            o.write_shift(64, _nm, "utf16le");
            o.write_shift(2, flen);
            o.write_shift(1, file.type);
            o.write_shift(1, file.color);
            o.write_shift(-4, file.L);
            o.write_shift(-4, file.R);
            o.write_shift(-4, file.C);
            if (!file.clsid) for (j = 0; j < 4; ++j) o.write_shift(4, 0);
            else o.write_shift(16, file.clsid, "hex");
            o.write_shift(4, file.state || 0);
            o.write_shift(4, 0);
            o.write_shift(4, 0);
            o.write_shift(4, 0);
            o.write_shift(4, 0);
            o.write_shift(4, file.start);
            o.write_shift(4, file.size);
            o.write_shift(4, 0);
          }
          for (i2 = 1; i2 < cfb.FileIndex.length; ++i2) {
            file = cfb.FileIndex[i2];
            if (file.size >= 4096) {
              o.l = file.start + 1 << 9;
              if (has_buf && Buffer.isBuffer(file.content)) {
                file.content.copy(o, o.l, 0, file.size);
                o.l += file.size + 511 & -512;
              } else {
                for (j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);
                for (; j & 511; ++j) o.write_shift(1, 0);
              }
            }
          }
          for (i2 = 1; i2 < cfb.FileIndex.length; ++i2) {
            file = cfb.FileIndex[i2];
            if (file.size > 0 && file.size < 4096) {
              if (has_buf && Buffer.isBuffer(file.content)) {
                file.content.copy(o, o.l, 0, file.size);
                o.l += file.size + 63 & -64;
              } else {
                for (j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);
                for (; j & 63; ++j) o.write_shift(1, 0);
              }
            }
          }
          if (has_buf) {
            o.l = o.length;
          } else {
            while (o.l < o.length) o.write_shift(1, 0);
          }
          return o;
        }
        function find(cfb, path5) {
          var UCFullPaths = cfb.FullPaths.map(function(x) {
            return x.toUpperCase();
          });
          var UCPaths = UCFullPaths.map(function(x) {
            var y = x.split("/");
            return y[y.length - (x.slice(-1) == "/" ? 2 : 1)];
          });
          var k = false;
          if (path5.charCodeAt(0) === 47) {
            k = true;
            path5 = UCFullPaths[0].slice(0, -1) + path5;
          } else k = path5.indexOf("/") !== -1;
          var UCPath = path5.toUpperCase();
          var w = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);
          if (w !== -1) return cfb.FileIndex[w];
          var m = !UCPath.match(chr1);
          UCPath = UCPath.replace(chr0, "");
          if (m) UCPath = UCPath.replace(chr1, "!");
          for (w = 0; w < UCFullPaths.length; ++w) {
            if ((m ? UCFullPaths[w].replace(chr1, "!") : UCFullPaths[w]).replace(chr0, "") == UCPath) return cfb.FileIndex[w];
            if ((m ? UCPaths[w].replace(chr1, "!") : UCPaths[w]).replace(chr0, "") == UCPath) return cfb.FileIndex[w];
          }
          return null;
        }
        var MSSZ = 64;
        var ENDOFCHAIN = -2;
        var HEADER_SIGNATURE = "d0cf11e0a1b11ae1";
        var HEADER_SIG = [208, 207, 17, 224, 161, 177, 26, 225];
        var HEADER_CLSID = "00000000000000000000000000000000";
        var consts = {
          /* 2.1 Compund File Sector Numbers and Types */
          MAXREGSECT: -6,
          DIFSECT: -4,
          FATSECT: -3,
          ENDOFCHAIN,
          FREESECT: -1,
          /* 2.2 Compound File Header */
          HEADER_SIGNATURE,
          HEADER_MINOR_VERSION: "3e00",
          MAXREGSID: -6,
          NOSTREAM: -1,
          HEADER_CLSID,
          /* 2.6.1 Compound File Directory Entry */
          EntryTypes: ["unknown", "storage", "stream", "lockbytes", "property", "root"]
        };
        function write_file(cfb, filename2, options) {
          get_fs();
          var o = _write(cfb, options);
          fs16.writeFileSync(filename2, o);
        }
        function a2s2(o) {
          var out = new Array(o.length);
          for (var i2 = 0; i2 < o.length; ++i2) out[i2] = String.fromCharCode(o[i2]);
          return out.join("");
        }
        function write(cfb, options) {
          var o = _write(cfb, options);
          switch (options && options.type || "buffer") {
            case "file":
              get_fs();
              fs16.writeFileSync(options.filename, o);
              return o;
            case "binary":
              return typeof o == "string" ? o : a2s2(o);
            case "base64":
              return Base64_encode(typeof o == "string" ? o : a2s2(o));
            case "buffer":
              if (has_buf) return Buffer.isBuffer(o) ? o : Buffer_from(o);
            case "array":
              return typeof o == "string" ? s2a(o) : o;
          }
          return o;
        }
        var _zlib;
        function use_zlib(zlib) {
          try {
            var InflateRaw = zlib.InflateRaw;
            var InflRaw = new InflateRaw();
            InflRaw._processChunk(new Uint8Array([3, 0]), InflRaw._finishFlushFlag);
            if (InflRaw.bytesRead) _zlib = zlib;
            else throw new Error("zlib does not expose bytesRead");
          } catch (e) {
            console.error("cannot use native zlib: " + (e.message || e));
          }
        }
        function _inflateRawSync(payload, usz) {
          if (!_zlib) return _inflate(payload, usz);
          var InflateRaw = _zlib.InflateRaw;
          var InflRaw = new InflateRaw();
          var out = InflRaw._processChunk(payload.slice(payload.l), InflRaw._finishFlushFlag);
          payload.l += InflRaw.bytesRead;
          return out;
        }
        function _deflateRawSync(payload) {
          return _zlib ? _zlib.deflateRawSync(payload) : _deflate(payload);
        }
        var CLEN_ORDER = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];
        var LEN_LN = [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];
        var DST_LN = [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];
        function bit_swap_8(n) {
          var t = (n << 1 | n << 11) & 139536 | (n << 5 | n << 15) & 558144;
          return (t >> 16 | t >> 8 | t) & 255;
        }
        var use_typed_arrays = typeof Uint8Array !== "undefined";
        var bitswap8 = use_typed_arrays ? new Uint8Array(1 << 8) : [];
        for (var q = 0; q < 1 << 8; ++q) bitswap8[q] = bit_swap_8(q);
        function bit_swap_n(n, b) {
          var rev = bitswap8[n & 255];
          if (b <= 8) return rev >>> 8 - b;
          rev = rev << 8 | bitswap8[n >> 8 & 255];
          if (b <= 16) return rev >>> 16 - b;
          rev = rev << 8 | bitswap8[n >> 16 & 255];
          return rev >>> 24 - b;
        }
        function read_bits_2(buf, bl) {
          var w = bl & 7, h = bl >>> 3;
          return (buf[h] | (w <= 6 ? 0 : buf[h + 1] << 8)) >>> w & 3;
        }
        function read_bits_3(buf, bl) {
          var w = bl & 7, h = bl >>> 3;
          return (buf[h] | (w <= 5 ? 0 : buf[h + 1] << 8)) >>> w & 7;
        }
        function read_bits_4(buf, bl) {
          var w = bl & 7, h = bl >>> 3;
          return (buf[h] | (w <= 4 ? 0 : buf[h + 1] << 8)) >>> w & 15;
        }
        function read_bits_5(buf, bl) {
          var w = bl & 7, h = bl >>> 3;
          return (buf[h] | (w <= 3 ? 0 : buf[h + 1] << 8)) >>> w & 31;
        }
        function read_bits_7(buf, bl) {
          var w = bl & 7, h = bl >>> 3;
          return (buf[h] | (w <= 1 ? 0 : buf[h + 1] << 8)) >>> w & 127;
        }
        function read_bits_n(buf, bl, n) {
          var w = bl & 7, h = bl >>> 3, f = (1 << n) - 1;
          var v = buf[h] >>> w;
          if (n < 8 - w) return v & f;
          v |= buf[h + 1] << 8 - w;
          if (n < 16 - w) return v & f;
          v |= buf[h + 2] << 16 - w;
          if (n < 24 - w) return v & f;
          v |= buf[h + 3] << 24 - w;
          return v & f;
        }
        function write_bits_3(buf, bl, v) {
          var w = bl & 7, h = bl >>> 3;
          if (w <= 5) buf[h] |= (v & 7) << w;
          else {
            buf[h] |= v << w & 255;
            buf[h + 1] = (v & 7) >> 8 - w;
          }
          return bl + 3;
        }
        function write_bits_1(buf, bl, v) {
          var w = bl & 7, h = bl >>> 3;
          v = (v & 1) << w;
          buf[h] |= v;
          return bl + 1;
        }
        function write_bits_8(buf, bl, v) {
          var w = bl & 7, h = bl >>> 3;
          v <<= w;
          buf[h] |= v & 255;
          v >>>= 8;
          buf[h + 1] = v;
          return bl + 8;
        }
        function write_bits_16(buf, bl, v) {
          var w = bl & 7, h = bl >>> 3;
          v <<= w;
          buf[h] |= v & 255;
          v >>>= 8;
          buf[h + 1] = v & 255;
          buf[h + 2] = v >>> 8;
          return bl + 16;
        }
        function realloc(b, sz) {
          var L = b.length, M = 2 * L > sz ? 2 * L : sz + 5, i2 = 0;
          if (L >= sz) return b;
          if (has_buf) {
            var o = new_unsafe_buf(M);
            if (b.copy) b.copy(o);
            else for (; i2 < b.length; ++i2) o[i2] = b[i2];
            return o;
          } else if (use_typed_arrays) {
            var a = new Uint8Array(M);
            if (a.set) a.set(b);
            else for (; i2 < L; ++i2) a[i2] = b[i2];
            return a;
          }
          b.length = M;
          return b;
        }
        function zero_fill_array(n) {
          var o = new Array(n);
          for (var i2 = 0; i2 < n; ++i2) o[i2] = 0;
          return o;
        }
        function build_tree(clens, cmap, MAX) {
          var maxlen = 1, w = 0, i2 = 0, j = 0, ccode = 0, L = clens.length;
          var bl_count = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);
          for (i2 = 0; i2 < 32; ++i2) bl_count[i2] = 0;
          for (i2 = L; i2 < MAX; ++i2) clens[i2] = 0;
          L = clens.length;
          var ctree = use_typed_arrays ? new Uint16Array(L) : zero_fill_array(L);
          for (i2 = 0; i2 < L; ++i2) {
            bl_count[w = clens[i2]]++;
            if (maxlen < w) maxlen = w;
            ctree[i2] = 0;
          }
          bl_count[0] = 0;
          for (i2 = 1; i2 <= maxlen; ++i2) bl_count[i2 + 16] = ccode = ccode + bl_count[i2 - 1] << 1;
          for (i2 = 0; i2 < L; ++i2) {
            ccode = clens[i2];
            if (ccode != 0) ctree[i2] = bl_count[ccode + 16]++;
          }
          var cleni = 0;
          for (i2 = 0; i2 < L; ++i2) {
            cleni = clens[i2];
            if (cleni != 0) {
              ccode = bit_swap_n(ctree[i2], maxlen) >> maxlen - cleni;
              for (j = (1 << maxlen + 4 - cleni) - 1; j >= 0; --j)
                cmap[ccode | j << cleni] = cleni & 15 | i2 << 4;
            }
          }
          return maxlen;
        }
        var fix_lmap = use_typed_arrays ? new Uint16Array(512) : zero_fill_array(512);
        var fix_dmap = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);
        if (!use_typed_arrays) {
          for (var i = 0; i < 512; ++i) fix_lmap[i] = 0;
          for (i = 0; i < 32; ++i) fix_dmap[i] = 0;
        }
        (function() {
          var dlens = [];
          var i2 = 0;
          for (; i2 < 32; i2++) dlens.push(5);
          build_tree(dlens, fix_dmap, 32);
          var clens = [];
          i2 = 0;
          for (; i2 <= 143; i2++) clens.push(8);
          for (; i2 <= 255; i2++) clens.push(9);
          for (; i2 <= 279; i2++) clens.push(7);
          for (; i2 <= 287; i2++) clens.push(8);
          build_tree(clens, fix_lmap, 288);
        })();
        var _deflateRaw = function _deflateRawIIFE() {
          var DST_LN_RE = use_typed_arrays ? new Uint8Array(32768) : [];
          var j = 0, k = 0;
          for (; j < DST_LN.length - 1; ++j) {
            for (; k < DST_LN[j + 1]; ++k) DST_LN_RE[k] = j;
          }
          for (; k < 32768; ++k) DST_LN_RE[k] = 29;
          var LEN_LN_RE = use_typed_arrays ? new Uint8Array(259) : [];
          for (j = 0, k = 0; j < LEN_LN.length - 1; ++j) {
            for (; k < LEN_LN[j + 1]; ++k) LEN_LN_RE[k] = j;
          }
          function write_stored(data, out) {
            var boff = 0;
            while (boff < data.length) {
              var L = Math.min(65535, data.length - boff);
              var h = boff + L == data.length;
              out.write_shift(1, +h);
              out.write_shift(2, L);
              out.write_shift(2, ~L & 65535);
              while (L-- > 0) out[out.l++] = data[boff++];
            }
            return out.l;
          }
          function write_huff_fixed(data, out) {
            var bl = 0;
            var boff = 0;
            var addrs = use_typed_arrays ? new Uint16Array(32768) : [];
            while (boff < data.length) {
              var L = (
                /* data.length - boff; */
                Math.min(65535, data.length - boff)
              );
              if (L < 10) {
                bl = write_bits_3(out, bl, +!!(boff + L == data.length));
                if (bl & 7) bl += 8 - (bl & 7);
                out.l = bl / 8 | 0;
                out.write_shift(2, L);
                out.write_shift(2, ~L & 65535);
                while (L-- > 0) out[out.l++] = data[boff++];
                bl = out.l * 8;
                continue;
              }
              bl = write_bits_3(out, bl, +!!(boff + L == data.length) + 2);
              var hash = 0;
              while (L-- > 0) {
                var d = data[boff];
                hash = (hash << 5 ^ d) & 32767;
                var match = -1, mlen = 0;
                if (match = addrs[hash]) {
                  match |= boff & ~32767;
                  if (match > boff) match -= 32768;
                  if (match < boff) while (data[match + mlen] == data[boff + mlen] && mlen < 250) ++mlen;
                }
                if (mlen > 2) {
                  d = LEN_LN_RE[mlen];
                  if (d <= 22) bl = write_bits_8(out, bl, bitswap8[d + 1] >> 1) - 1;
                  else {
                    write_bits_8(out, bl, 3);
                    bl += 5;
                    write_bits_8(out, bl, bitswap8[d - 23] >> 5);
                    bl += 3;
                  }
                  var len_eb = d < 8 ? 0 : d - 4 >> 2;
                  if (len_eb > 0) {
                    write_bits_16(out, bl, mlen - LEN_LN[d]);
                    bl += len_eb;
                  }
                  d = DST_LN_RE[boff - match];
                  bl = write_bits_8(out, bl, bitswap8[d] >> 3);
                  bl -= 3;
                  var dst_eb = d < 4 ? 0 : d - 2 >> 1;
                  if (dst_eb > 0) {
                    write_bits_16(out, bl, boff - match - DST_LN[d]);
                    bl += dst_eb;
                  }
                  for (var q2 = 0; q2 < mlen; ++q2) {
                    addrs[hash] = boff & 32767;
                    hash = (hash << 5 ^ data[boff]) & 32767;
                    ++boff;
                  }
                  L -= mlen - 1;
                } else {
                  if (d <= 143) d = d + 48;
                  else bl = write_bits_1(out, bl, 1);
                  bl = write_bits_8(out, bl, bitswap8[d]);
                  addrs[hash] = boff & 32767;
                  ++boff;
                }
              }
              bl = write_bits_8(out, bl, 0) - 1;
            }
            out.l = (bl + 7) / 8 | 0;
            return out.l;
          }
          return function _deflateRaw2(data, out) {
            if (data.length < 8) return write_stored(data, out);
            return write_huff_fixed(data, out);
          };
        }();
        function _deflate(data) {
          var buf = new_buf(50 + Math.floor(data.length * 1.1));
          var off = _deflateRaw(data, buf);
          return buf.slice(0, off);
        }
        var dyn_lmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);
        var dyn_dmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);
        var dyn_cmap = use_typed_arrays ? new Uint16Array(128) : zero_fill_array(128);
        var dyn_len_1 = 1, dyn_len_2 = 1;
        function dyn(data, boff) {
          var _HLIT = read_bits_5(data, boff) + 257;
          boff += 5;
          var _HDIST = read_bits_5(data, boff) + 1;
          boff += 5;
          var _HCLEN = read_bits_4(data, boff) + 4;
          boff += 4;
          var w = 0;
          var clens = use_typed_arrays ? new Uint8Array(19) : zero_fill_array(19);
          var ctree = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
          var maxlen = 1;
          var bl_count = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);
          var next_code = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);
          var L = clens.length;
          for (var i2 = 0; i2 < _HCLEN; ++i2) {
            clens[CLEN_ORDER[i2]] = w = read_bits_3(data, boff);
            if (maxlen < w) maxlen = w;
            bl_count[w]++;
            boff += 3;
          }
          var ccode = 0;
          bl_count[0] = 0;
          for (i2 = 1; i2 <= maxlen; ++i2) next_code[i2] = ccode = ccode + bl_count[i2 - 1] << 1;
          for (i2 = 0; i2 < L; ++i2) if ((ccode = clens[i2]) != 0) ctree[i2] = next_code[ccode]++;
          var cleni = 0;
          for (i2 = 0; i2 < L; ++i2) {
            cleni = clens[i2];
            if (cleni != 0) {
              ccode = bitswap8[ctree[i2]] >> 8 - cleni;
              for (var j = (1 << 7 - cleni) - 1; j >= 0; --j) dyn_cmap[ccode | j << cleni] = cleni & 7 | i2 << 3;
            }
          }
          var hcodes = [];
          maxlen = 1;
          for (; hcodes.length < _HLIT + _HDIST; ) {
            ccode = dyn_cmap[read_bits_7(data, boff)];
            boff += ccode & 7;
            switch (ccode >>>= 3) {
              case 16:
                w = 3 + read_bits_2(data, boff);
                boff += 2;
                ccode = hcodes[hcodes.length - 1];
                while (w-- > 0) hcodes.push(ccode);
                break;
              case 17:
                w = 3 + read_bits_3(data, boff);
                boff += 3;
                while (w-- > 0) hcodes.push(0);
                break;
              case 18:
                w = 11 + read_bits_7(data, boff);
                boff += 7;
                while (w-- > 0) hcodes.push(0);
                break;
              default:
                hcodes.push(ccode);
                if (maxlen < ccode) maxlen = ccode;
                break;
            }
          }
          var h1 = hcodes.slice(0, _HLIT), h2 = hcodes.slice(_HLIT);
          for (i2 = _HLIT; i2 < 286; ++i2) h1[i2] = 0;
          for (i2 = _HDIST; i2 < 30; ++i2) h2[i2] = 0;
          dyn_len_1 = build_tree(h1, dyn_lmap, 286);
          dyn_len_2 = build_tree(h2, dyn_dmap, 30);
          return boff;
        }
        function inflate(data, usz) {
          if (data[0] == 3 && !(data[1] & 3)) {
            return [new_raw_buf(usz), 2];
          }
          var boff = 0;
          var header = 0;
          var outbuf = new_unsafe_buf(usz ? usz : 1 << 18);
          var woff = 0;
          var OL = outbuf.length >>> 0;
          var max_len_1 = 0, max_len_2 = 0;
          while ((header & 1) == 0) {
            header = read_bits_3(data, boff);
            boff += 3;
            if (header >>> 1 == 0) {
              if (boff & 7) boff += 8 - (boff & 7);
              var sz = data[boff >>> 3] | data[(boff >>> 3) + 1] << 8;
              boff += 32;
              if (sz > 0) {
                if (!usz && OL < woff + sz) {
                  outbuf = realloc(outbuf, woff + sz);
                  OL = outbuf.length;
                }
                while (sz-- > 0) {
                  outbuf[woff++] = data[boff >>> 3];
                  boff += 8;
                }
              }
              continue;
            } else if (header >> 1 == 1) {
              max_len_1 = 9;
              max_len_2 = 5;
            } else {
              boff = dyn(data, boff);
              max_len_1 = dyn_len_1;
              max_len_2 = dyn_len_2;
            }
            for (; ; ) {
              if (!usz && OL < woff + 32767) {
                outbuf = realloc(outbuf, woff + 32767);
                OL = outbuf.length;
              }
              var bits = read_bits_n(data, boff, max_len_1);
              var code = header >>> 1 == 1 ? fix_lmap[bits] : dyn_lmap[bits];
              boff += code & 15;
              code >>>= 4;
              if ((code >>> 8 & 255) === 0) outbuf[woff++] = code;
              else if (code == 256) break;
              else {
                code -= 257;
                var len_eb = code < 8 ? 0 : code - 4 >> 2;
                if (len_eb > 5) len_eb = 0;
                var tgt = woff + LEN_LN[code];
                if (len_eb > 0) {
                  tgt += read_bits_n(data, boff, len_eb);
                  boff += len_eb;
                }
                bits = read_bits_n(data, boff, max_len_2);
                code = header >>> 1 == 1 ? fix_dmap[bits] : dyn_dmap[bits];
                boff += code & 15;
                code >>>= 4;
                var dst_eb = code < 4 ? 0 : code - 2 >> 1;
                var dst = DST_LN[code];
                if (dst_eb > 0) {
                  dst += read_bits_n(data, boff, dst_eb);
                  boff += dst_eb;
                }
                if (!usz && OL < tgt) {
                  outbuf = realloc(outbuf, tgt + 100);
                  OL = outbuf.length;
                }
                while (woff < tgt) {
                  outbuf[woff] = outbuf[woff - dst];
                  ++woff;
                }
              }
            }
          }
          if (usz) return [outbuf, boff + 7 >>> 3];
          return [outbuf.slice(0, woff), boff + 7 >>> 3];
        }
        function _inflate(payload, usz) {
          var data = payload.slice(payload.l || 0);
          var out = inflate(data, usz);
          payload.l += out[1];
          return out[0];
        }
        function warn_or_throw(wrn, msg) {
          if (wrn) {
            if (typeof console !== "undefined") console.error(msg);
          } else throw new Error(msg);
        }
        function parse_zip2(file, options) {
          var blob = file;
          prep_blob(blob, 0);
          var FileIndex = [], FullPaths = [];
          var o = {
            FileIndex,
            FullPaths
          };
          init_cfb(o, { root: options.root });
          var i2 = blob.length - 4;
          while ((blob[i2] != 80 || blob[i2 + 1] != 75 || blob[i2 + 2] != 5 || blob[i2 + 3] != 6) && i2 >= 0) --i2;
          blob.l = i2 + 4;
          blob.l += 4;
          var fcnt = blob.read_shift(2);
          blob.l += 6;
          var start_cd = blob.read_shift(4);
          blob.l = start_cd;
          for (i2 = 0; i2 < fcnt; ++i2) {
            blob.l += 20;
            var csz = blob.read_shift(4);
            var usz = blob.read_shift(4);
            var namelen = blob.read_shift(2);
            var efsz = blob.read_shift(2);
            var fcsz = blob.read_shift(2);
            blob.l += 8;
            var offset = blob.read_shift(4);
            var EF = parse_extra_field(blob.slice(blob.l + namelen, blob.l + namelen + efsz));
            blob.l += namelen + efsz + fcsz;
            var L = blob.l;
            blob.l = offset + 4;
            parse_local_file(blob, csz, usz, o, EF);
            blob.l = L;
          }
          return o;
        }
        function parse_local_file(blob, csz, usz, o, EF) {
          blob.l += 2;
          var flags = blob.read_shift(2);
          var meth = blob.read_shift(2);
          var date = parse_dos_date(blob);
          if (flags & 8257) throw new Error("Unsupported ZIP encryption");
          var crc32 = blob.read_shift(4);
          var _csz = blob.read_shift(4);
          var _usz = blob.read_shift(4);
          var namelen = blob.read_shift(2);
          var efsz = blob.read_shift(2);
          var name = "";
          for (var i2 = 0; i2 < namelen; ++i2) name += String.fromCharCode(blob[blob.l++]);
          if (efsz) {
            var ef = parse_extra_field(blob.slice(blob.l, blob.l + efsz));
            if ((ef[21589] || {}).mt) date = ef[21589].mt;
            if (((EF || {})[21589] || {}).mt) date = EF[21589].mt;
          }
          blob.l += efsz;
          var data = blob.slice(blob.l, blob.l + _csz);
          switch (meth) {
            case 8:
              data = _inflateRawSync(blob, _usz);
              break;
            case 0:
              break;
            default:
              throw new Error("Unsupported ZIP Compression method " + meth);
          }
          var wrn = false;
          if (flags & 8) {
            crc32 = blob.read_shift(4);
            if (crc32 == 134695760) {
              crc32 = blob.read_shift(4);
              wrn = true;
            }
            _csz = blob.read_shift(4);
            _usz = blob.read_shift(4);
          }
          if (_csz != csz) warn_or_throw(wrn, "Bad compressed size: " + csz + " != " + _csz);
          if (_usz != usz) warn_or_throw(wrn, "Bad uncompressed size: " + usz + " != " + _usz);
          cfb_add(o, name, data, { unsafe: true, mt: date });
        }
        function write_zip2(cfb, options) {
          var _opts = options || {};
          var out = [], cdirs = [];
          var o = new_buf(1);
          var method = _opts.compression ? 8 : 0, flags = 0;
          var desc = false;
          if (desc) flags |= 8;
          var i2 = 0, j = 0;
          var start_cd = 0, fcnt = 0;
          var root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];
          var crcs = [];
          var sz_cd = 0;
          for (i2 = 1; i2 < cfb.FullPaths.length; ++i2) {
            fp = cfb.FullPaths[i2].slice(root.length);
            fi = cfb.FileIndex[i2];
            if (!fi.size || !fi.content || fp == "Sh33tJ5") continue;
            var start = start_cd;
            var namebuf = new_buf(fp.length);
            for (j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 127);
            namebuf = namebuf.slice(0, namebuf.l);
            crcs[fcnt] = CRC32.buf(fi.content, 0);
            var outbuf = fi.content;
            if (method == 8) outbuf = _deflateRawSync(outbuf);
            o = new_buf(30);
            o.write_shift(4, 67324752);
            o.write_shift(2, 20);
            o.write_shift(2, flags);
            o.write_shift(2, method);
            if (fi.mt) write_dos_date(o, fi.mt);
            else o.write_shift(4, 0);
            o.write_shift(-4, flags & 8 ? 0 : crcs[fcnt]);
            o.write_shift(4, flags & 8 ? 0 : outbuf.length);
            o.write_shift(4, flags & 8 ? 0 : fi.content.length);
            o.write_shift(2, namebuf.length);
            o.write_shift(2, 0);
            start_cd += o.length;
            out.push(o);
            start_cd += namebuf.length;
            out.push(namebuf);
            start_cd += outbuf.length;
            out.push(outbuf);
            if (flags & 8) {
              o = new_buf(12);
              o.write_shift(-4, crcs[fcnt]);
              o.write_shift(4, outbuf.length);
              o.write_shift(4, fi.content.length);
              start_cd += o.l;
              out.push(o);
            }
            o = new_buf(46);
            o.write_shift(4, 33639248);
            o.write_shift(2, 0);
            o.write_shift(2, 20);
            o.write_shift(2, flags);
            o.write_shift(2, method);
            o.write_shift(4, 0);
            o.write_shift(-4, crcs[fcnt]);
            o.write_shift(4, outbuf.length);
            o.write_shift(4, fi.content.length);
            o.write_shift(2, namebuf.length);
            o.write_shift(2, 0);
            o.write_shift(2, 0);
            o.write_shift(2, 0);
            o.write_shift(2, 0);
            o.write_shift(4, 0);
            o.write_shift(4, start);
            sz_cd += o.l;
            cdirs.push(o);
            sz_cd += namebuf.length;
            cdirs.push(namebuf);
            ++fcnt;
          }
          o = new_buf(22);
          o.write_shift(4, 101010256);
          o.write_shift(2, 0);
          o.write_shift(2, 0);
          o.write_shift(2, fcnt);
          o.write_shift(2, fcnt);
          o.write_shift(4, sz_cd);
          o.write_shift(4, start_cd);
          o.write_shift(2, 0);
          return bconcat([bconcat(out), bconcat(cdirs), o]);
        }
        var ContentTypeMap = {
          "htm": "text/html",
          "xml": "text/xml",
          "gif": "image/gif",
          "jpg": "image/jpeg",
          "png": "image/png",
          "mso": "application/x-mso",
          "thmx": "application/vnd.ms-officetheme",
          "sh33tj5": "application/octet-stream"
        };
        function get_content_type(fi, fp) {
          if (fi.ctype) return fi.ctype;
          var ext = fi.name || "", m = ext.match(/\.([^\.]+)$/);
          if (m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];
          if (fp) {
            m = (ext = fp).match(/[\.\\]([^\.\\])+$/);
            if (m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];
          }
          return "application/octet-stream";
        }
        function write_base64_76(bstr) {
          var data = Base64_encode(bstr);
          var o = [];
          for (var i2 = 0; i2 < data.length; i2 += 76) o.push(data.slice(i2, i2 + 76));
          return o.join("\r\n") + "\r\n";
        }
        function write_quoted_printable(text) {
          var encoded = text.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7E-\xFF=]/g, function(c) {
            var w = c.charCodeAt(0).toString(16).toUpperCase();
            return "=" + (w.length == 1 ? "0" + w : w);
          });
          encoded = encoded.replace(/ $/mg, "=20").replace(/\t$/mg, "=09");
          if (encoded.charAt(0) == "\n") encoded = "=0D" + encoded.slice(1);
          encoded = encoded.replace(/\r(?!\n)/mg, "=0D").replace(/\n\n/mg, "\n=0A").replace(/([^\r\n])\n/mg, "$1=0A");
          var o = [], split = encoded.split("\r\n");
          for (var si = 0; si < split.length; ++si) {
            var str = split[si];
            if (str.length == 0) {
              o.push("");
              continue;
            }
            for (var i2 = 0; i2 < str.length; ) {
              var end = 76;
              var tmp = str.slice(i2, i2 + end);
              if (tmp.charAt(end - 1) == "=") end--;
              else if (tmp.charAt(end - 2) == "=") end -= 2;
              else if (tmp.charAt(end - 3) == "=") end -= 3;
              tmp = str.slice(i2, i2 + end);
              i2 += end;
              if (i2 < str.length) tmp += "=";
              o.push(tmp);
            }
          }
          return o.join("\r\n");
        }
        function parse_quoted_printable(data) {
          var o = [];
          for (var di = 0; di < data.length; ++di) {
            var line = data[di];
            while (di <= data.length && line.charAt(line.length - 1) == "=") line = line.slice(0, line.length - 1) + data[++di];
            o.push(line);
          }
          for (var oi = 0; oi < o.length; ++oi) o[oi] = o[oi].replace(/[=][0-9A-Fa-f]{2}/g, function($$) {
            return String.fromCharCode(parseInt($$.slice(1), 16));
          });
          return s2a(o.join("\r\n"));
        }
        function parse_mime(cfb, data, root) {
          var fname = "", cte = "", ctype = "", fdata;
          var di = 0;
          for (; di < 10; ++di) {
            var line = data[di];
            if (!line || line.match(/^\s*$/)) break;
            var m = line.match(/^(.*?):\s*([^\s].*)$/);
            if (m) switch (m[1].toLowerCase()) {
              case "content-location":
                fname = m[2].trim();
                break;
              case "content-type":
                ctype = m[2].trim();
                break;
              case "content-transfer-encoding":
                cte = m[2].trim();
                break;
            }
          }
          ++di;
          switch (cte.toLowerCase()) {
            case "base64":
              fdata = s2a(Base64_decode(data.slice(di).join("")));
              break;
            case "quoted-printable":
              fdata = parse_quoted_printable(data.slice(di));
              break;
            default:
              throw new Error("Unsupported Content-Transfer-Encoding " + cte);
          }
          var file = cfb_add(cfb, fname.slice(root.length), fdata, { unsafe: true });
          if (ctype) file.ctype = ctype;
        }
        function parse_mad(file, options) {
          if (a2s2(file.slice(0, 13)).toLowerCase() != "mime-version:") throw new Error("Unsupported MAD header");
          var root = options && options.root || "";
          var data = (has_buf && Buffer.isBuffer(file) ? file.toString("binary") : a2s2(file)).split("\r\n");
          var di = 0, row = "";
          for (di = 0; di < data.length; ++di) {
            row = data[di];
            if (!/^Content-Location:/i.test(row)) continue;
            row = row.slice(row.indexOf("file"));
            if (!root) root = row.slice(0, row.lastIndexOf("/") + 1);
            if (row.slice(0, root.length) == root) continue;
            while (root.length > 0) {
              root = root.slice(0, root.length - 1);
              root = root.slice(0, root.lastIndexOf("/") + 1);
              if (row.slice(0, root.length) == root) break;
            }
          }
          var mboundary = (data[1] || "").match(/boundary="(.*?)"/);
          if (!mboundary) throw new Error("MAD cannot find boundary");
          var boundary = "--" + (mboundary[1] || "");
          var FileIndex = [], FullPaths = [];
          var o = {
            FileIndex,
            FullPaths
          };
          init_cfb(o);
          var start_di, fcnt = 0;
          for (di = 0; di < data.length; ++di) {
            var line = data[di];
            if (line !== boundary && line !== boundary + "--") continue;
            if (fcnt++) parse_mime(o, data.slice(start_di, di), root);
            start_di = di;
          }
          return o;
        }
        function write_mad(cfb, options) {
          var opts = options || {};
          var boundary = opts.boundary || "SheetJS";
          boundary = "------=" + boundary;
          var out = [
            "MIME-Version: 1.0",
            'Content-Type: multipart/related; boundary="' + boundary.slice(2) + '"',
            "",
            "",
            ""
          ];
          var root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];
          for (var i2 = 1; i2 < cfb.FullPaths.length; ++i2) {
            fp = cfb.FullPaths[i2].slice(root.length);
            fi = cfb.FileIndex[i2];
            if (!fi.size || !fi.content || fp == "Sh33tJ5") continue;
            fp = fp.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7E-\xFF]/g, function(c) {
              return "_x" + c.charCodeAt(0).toString(16) + "_";
            }).replace(/[\u0080-\uFFFF]/g, function(u) {
              return "_u" + u.charCodeAt(0).toString(16) + "_";
            });
            var ca = fi.content;
            var cstr = has_buf && Buffer.isBuffer(ca) ? ca.toString("binary") : a2s2(ca);
            var dispcnt = 0, L = Math.min(1024, cstr.length), cc = 0;
            for (var csl = 0; csl <= L; ++csl) if ((cc = cstr.charCodeAt(csl)) >= 32 && cc < 128) ++dispcnt;
            var qp = dispcnt >= L * 4 / 5;
            out.push(boundary);
            out.push("Content-Location: " + (opts.root || "file:///C:/SheetJS/") + fp);
            out.push("Content-Transfer-Encoding: " + (qp ? "quoted-printable" : "base64"));
            out.push("Content-Type: " + get_content_type(fi, fp));
            out.push("");
            out.push(qp ? write_quoted_printable(cstr) : write_base64_76(cstr));
          }
          out.push(boundary + "--\r\n");
          return out.join("\r\n");
        }
        function cfb_new(opts) {
          var o = {};
          init_cfb(o, opts);
          return o;
        }
        function cfb_add(cfb, name, content, opts) {
          var unsafe = opts && opts.unsafe;
          if (!unsafe) init_cfb(cfb);
          var file = !unsafe && CFB.find(cfb, name);
          if (!file) {
            var fpath = cfb.FullPaths[0];
            if (name.slice(0, fpath.length) == fpath) fpath = name;
            else {
              if (fpath.slice(-1) != "/") fpath += "/";
              fpath = (fpath + name).replace("//", "/");
            }
            file = { name: filename(name), type: 2 };
            cfb.FileIndex.push(file);
            cfb.FullPaths.push(fpath);
            if (!unsafe) CFB.utils.cfb_gc(cfb);
          }
          file.content = content;
          file.size = content ? content.length : 0;
          if (opts) {
            if (opts.CLSID) file.clsid = opts.CLSID;
            if (opts.mt) file.mt = opts.mt;
            if (opts.ct) file.ct = opts.ct;
          }
          return file;
        }
        function cfb_del(cfb, name) {
          init_cfb(cfb);
          var file = CFB.find(cfb, name);
          if (file) {
            for (var j = 0; j < cfb.FileIndex.length; ++j) if (cfb.FileIndex[j] == file) {
              cfb.FileIndex.splice(j, 1);
              cfb.FullPaths.splice(j, 1);
              return true;
            }
          }
          return false;
        }
        function cfb_mov(cfb, old_name, new_name) {
          init_cfb(cfb);
          var file = CFB.find(cfb, old_name);
          if (file) {
            for (var j = 0; j < cfb.FileIndex.length; ++j) if (cfb.FileIndex[j] == file) {
              cfb.FileIndex[j].name = filename(new_name);
              cfb.FullPaths[j] = new_name;
              return true;
            }
          }
          return false;
        }
        function cfb_gc(cfb) {
          rebuild_cfb(cfb, true);
        }
        exports2.find = find;
        exports2.read = read;
        exports2.parse = parse;
        exports2.write = write;
        exports2.writeFile = write_file;
        exports2.utils = {
          cfb_new,
          cfb_add,
          cfb_del,
          cfb_mov,
          cfb_gc,
          ReadShift,
          CheckField,
          prep_blob,
          bconcat,
          use_zlib,
          _deflateRaw: _deflate,
          _inflateRaw: _inflate,
          consts
        };
        return exports2;
      }();
      var _fs;
      if (typeof __require !== "undefined") try {
        _fs = __require("fs");
      } catch (e) {
      }
      function blobify(data) {
        if (typeof data === "string") return s2ab(data);
        if (Array.isArray(data)) return a2u(data);
        return data;
      }
      function write_dl(fname, payload, enc) {
        if (typeof _fs !== "undefined" && _fs.writeFileSync) return enc ? _fs.writeFileSync(fname, payload, enc) : _fs.writeFileSync(fname, payload);
        if (typeof Deno !== "undefined") {
          if (enc && typeof payload == "string") switch (enc) {
            case "utf8":
              payload = new TextEncoder(enc).encode(payload);
              break;
            case "binary":
              payload = s2ab(payload);
              break;
            default:
              throw new Error("Unsupported encoding " + enc);
          }
          return Deno.writeFileSync(fname, payload);
        }
        var data = enc == "utf8" ? utf8write(payload) : payload;
        if (typeof IE_SaveFile !== "undefined") return IE_SaveFile(data, fname);
        if (typeof Blob !== "undefined") {
          var blob = new Blob([blobify(data)], { type: "application/octet-stream" });
          if (typeof navigator !== "undefined" && navigator.msSaveBlob) return navigator.msSaveBlob(blob, fname);
          if (typeof saveAs !== "undefined") return saveAs(blob, fname);
          if (typeof URL !== "undefined" && typeof document !== "undefined" && document.createElement && URL.createObjectURL) {
            var url = URL.createObjectURL(blob);
            if (typeof chrome === "object" && typeof (chrome.downloads || {}).download == "function") {
              if (URL.revokeObjectURL && typeof setTimeout !== "undefined") setTimeout(function() {
                URL.revokeObjectURL(url);
              }, 6e4);
              return chrome.downloads.download({ url, filename: fname, saveAs: true });
            }
            var a = document.createElement("a");
            if (a.download != null) {
              a.download = fname;
              a.href = url;
              document.body.appendChild(a);
              a.click();
              document.body.removeChild(a);
              if (URL.revokeObjectURL && typeof setTimeout !== "undefined") setTimeout(function() {
                URL.revokeObjectURL(url);
              }, 6e4);
              return url;
            }
          }
        }
        if (typeof $ !== "undefined" && typeof File !== "undefined" && typeof Folder !== "undefined") try {
          var out = File(fname);
          out.open("w");
          out.encoding = "binary";
          if (Array.isArray(payload)) payload = a2s(payload);
          out.write(payload);
          out.close();
          return payload;
        } catch (e) {
          if (!e.message || !e.message.match(/onstruct/)) throw e;
        }
        throw new Error("cannot save file " + fname);
      }
      function read_binary(path5) {
        if (typeof _fs !== "undefined") return _fs.readFileSync(path5);
        if (typeof Deno !== "undefined") return Deno.readFileSync(path5);
        if (typeof $ !== "undefined" && typeof File !== "undefined" && typeof Folder !== "undefined") try {
          var infile = File(path5);
          infile.open("r");
          infile.encoding = "binary";
          var data = infile.read();
          infile.close();
          return data;
        } catch (e) {
          if (!e.message || !e.message.match(/onstruct/)) throw e;
        }
        throw new Error("Cannot access file " + path5);
      }
      function keys(o) {
        var ks = Object.keys(o), o2 = [];
        for (var i = 0; i < ks.length; ++i) if (Object.prototype.hasOwnProperty.call(o, ks[i])) o2.push(ks[i]);
        return o2;
      }
      function evert_key(obj, key) {
        var o = [], K = keys(obj);
        for (var i = 0; i !== K.length; ++i) if (o[obj[K[i]][key]] == null) o[obj[K[i]][key]] = K[i];
        return o;
      }
      function evert(obj) {
        var o = [], K = keys(obj);
        for (var i = 0; i !== K.length; ++i) o[obj[K[i]]] = K[i];
        return o;
      }
      function evert_num(obj) {
        var o = [], K = keys(obj);
        for (var i = 0; i !== K.length; ++i) o[obj[K[i]]] = parseInt(K[i], 10);
        return o;
      }
      function evert_arr(obj) {
        var o = [], K = keys(obj);
        for (var i = 0; i !== K.length; ++i) {
          if (o[obj[K[i]]] == null) o[obj[K[i]]] = [];
          o[obj[K[i]]].push(K[i]);
        }
        return o;
      }
      var basedate = new Date(1899, 11, 30, 0, 0, 0);
      function datenum(v, date1904) {
        var epoch = v.getTime();
        if (date1904) epoch -= 1462 * 24 * 60 * 60 * 1e3;
        var dnthresh2 = basedate.getTime() + (v.getTimezoneOffset() - basedate.getTimezoneOffset()) * 6e4;
        return (epoch - dnthresh2) / (24 * 60 * 60 * 1e3);
      }
      var refdate = /* @__PURE__ */ new Date();
      var dnthresh = basedate.getTime() + (refdate.getTimezoneOffset() - basedate.getTimezoneOffset()) * 6e4;
      var refoffset = refdate.getTimezoneOffset();
      function numdate(v) {
        var out = /* @__PURE__ */ new Date();
        out.setTime(v * 24 * 60 * 60 * 1e3 + dnthresh);
        if (out.getTimezoneOffset() !== refoffset) {
          out.setTime(out.getTime() + (out.getTimezoneOffset() - refoffset) * 6e4);
        }
        return out;
      }
      function parse_isodur(s) {
        var sec = 0, mt = 0, time = false;
        var m = s.match(/P([0-9\.]+Y)?([0-9\.]+M)?([0-9\.]+D)?T([0-9\.]+H)?([0-9\.]+M)?([0-9\.]+S)?/);
        if (!m) throw new Error("|" + s + "| is not an ISO8601 Duration");
        for (var i = 1; i != m.length; ++i) {
          if (!m[i]) continue;
          mt = 1;
          if (i > 3) time = true;
          switch (m[i].slice(m[i].length - 1)) {
            case "Y":
              throw new Error("Unsupported ISO Duration Field: " + m[i].slice(m[i].length - 1));
            case "D":
              mt *= 24;
            case "H":
              mt *= 60;
            case "M":
              if (!time) throw new Error("Unsupported ISO Duration Field: M");
              else mt *= 60;
            case "S":
              break;
          }
          sec += mt * parseInt(m[i], 10);
        }
        return sec;
      }
      var good_pd_date_1 = /* @__PURE__ */ new Date("2017-02-19T19:06:09.000Z");
      var good_pd_date = isNaN(good_pd_date_1.getFullYear()) ? /* @__PURE__ */ new Date("2/19/17") : good_pd_date_1;
      var good_pd = good_pd_date.getFullYear() == 2017;
      function parseDate(str, fixdate) {
        var d = new Date(str);
        if (good_pd) {
          if (fixdate > 0) d.setTime(d.getTime() + d.getTimezoneOffset() * 60 * 1e3);
          else if (fixdate < 0) d.setTime(d.getTime() - d.getTimezoneOffset() * 60 * 1e3);
          return d;
        }
        if (str instanceof Date) return str;
        if (good_pd_date.getFullYear() == 1917 && !isNaN(d.getFullYear())) {
          var s = d.getFullYear();
          if (str.indexOf("" + s) > -1) return d;
          d.setFullYear(d.getFullYear() + 100);
          return d;
        }
        var n = str.match(/\d+/g) || ["2017", "2", "19", "0", "0", "0"];
        var out = new Date(+n[0], +n[1] - 1, +n[2], +n[3] || 0, +n[4] || 0, +n[5] || 0);
        if (str.indexOf("Z") > -1) out = new Date(out.getTime() - out.getTimezoneOffset() * 60 * 1e3);
        return out;
      }
      function cc2str(arr, debomit) {
        if (has_buf && Buffer.isBuffer(arr)) {
          if (debomit) {
            if (arr[0] == 255 && arr[1] == 254) return utf8write(arr.slice(2).toString("utf16le"));
            if (arr[1] == 254 && arr[2] == 255) return utf8write(utf16beread(arr.slice(2).toString("binary")));
          }
          return arr.toString("binary");
        }
        if (typeof TextDecoder !== "undefined") try {
          if (debomit) {
            if (arr[0] == 255 && arr[1] == 254) return utf8write(new TextDecoder("utf-16le").decode(arr.slice(2)));
            if (arr[0] == 254 && arr[1] == 255) return utf8write(new TextDecoder("utf-16be").decode(arr.slice(2)));
          }
          var rev = {
            "\u20AC": "\x80",
            "\u201A": "\x82",
            "\u0192": "\x83",
            "\u201E": "\x84",
            "\u2026": "\x85",
            "\u2020": "\x86",
            "\u2021": "\x87",
            "\u02C6": "\x88",
            "\u2030": "\x89",
            "\u0160": "\x8A",
            "\u2039": "\x8B",
            "\u0152": "\x8C",
            "\u017D": "\x8E",
            "\u2018": "\x91",
            "\u2019": "\x92",
            "\u201C": "\x93",
            "\u201D": "\x94",
            "\u2022": "\x95",
            "\u2013": "\x96",
            "\u2014": "\x97",
            "\u02DC": "\x98",
            "\u2122": "\x99",
            "\u0161": "\x9A",
            "\u203A": "\x9B",
            "\u0153": "\x9C",
            "\u017E": "\x9E",
            "\u0178": "\x9F"
          };
          if (Array.isArray(arr)) arr = new Uint8Array(arr);
          return new TextDecoder("latin1").decode(arr).replace(/[€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ]/g, function(c) {
            return rev[c] || c;
          });
        } catch (e) {
        }
        var o = [];
        for (var i = 0; i != arr.length; ++i) o.push(String.fromCharCode(arr[i]));
        return o.join("");
      }
      function dup(o) {
        if (typeof JSON != "undefined" && !Array.isArray(o)) return JSON.parse(JSON.stringify(o));
        if (typeof o != "object" || o == null) return o;
        if (o instanceof Date) return new Date(o.getTime());
        var out = {};
        for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) out[k] = dup(o[k]);
        return out;
      }
      function fill(c, l) {
        var o = "";
        while (o.length < l) o += c;
        return o;
      }
      function fuzzynum(s) {
        var v = Number(s);
        if (!isNaN(v)) return isFinite(v) ? v : NaN;
        if (!/\d/.test(s)) return v;
        var wt = 1;
        var ss = s.replace(/([\d]),([\d])/g, "$1$2").replace(/[$]/g, "").replace(/[%]/g, function() {
          wt *= 100;
          return "";
        });
        if (!isNaN(v = Number(ss))) return v / wt;
        ss = ss.replace(/[(](.*)[)]/, function($$, $1) {
          wt = -wt;
          return $1;
        });
        if (!isNaN(v = Number(ss))) return v / wt;
        return v;
      }
      var lower_months = ["january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"];
      function fuzzydate(s) {
        var o = new Date(s), n = /* @__PURE__ */ new Date(NaN);
        var y = o.getYear(), m = o.getMonth(), d = o.getDate();
        if (isNaN(d)) return n;
        var lower = s.toLowerCase();
        if (lower.match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)) {
          lower = lower.replace(/[^a-z]/g, "").replace(/([^a-z]|^)[ap]m?([^a-z]|$)/, "");
          if (lower.length > 3 && lower_months.indexOf(lower) == -1) return n;
        } else if (lower.match(/[a-z]/)) return n;
        if (y < 0 || y > 8099) return n;
        if ((m > 0 || d > 1) && y != 101) return o;
        if (s.match(/[^-0-9:,\/\\]/)) return n;
        return o;
      }
      var split_regex = function() {
        var safe_split_regex = "abacaba".split(/(:?b)/i).length == 5;
        return function split_regex2(str, re, def) {
          if (safe_split_regex || typeof re == "string") return str.split(re);
          var p = str.split(re), o = [p[0]];
          for (var i = 1; i < p.length; ++i) {
            o.push(def);
            o.push(p[i]);
          }
          return o;
        };
      }();
      function getdatastr(data) {
        if (!data) return null;
        if (data.content && data.type) return cc2str(data.content, true);
        if (data.data) return debom(data.data);
        if (data.asNodeBuffer && has_buf) return debom(data.asNodeBuffer().toString("binary"));
        if (data.asBinary) return debom(data.asBinary());
        if (data._data && data._data.getContent) return debom(cc2str(Array.prototype.slice.call(data._data.getContent(), 0)));
        return null;
      }
      function getdatabin(data) {
        if (!data) return null;
        if (data.data) return char_codes(data.data);
        if (data.asNodeBuffer && has_buf) return data.asNodeBuffer();
        if (data._data && data._data.getContent) {
          var o = data._data.getContent();
          if (typeof o == "string") return char_codes(o);
          return Array.prototype.slice.call(o);
        }
        if (data.content && data.type) return data.content;
        return null;
      }
      function getdata(data) {
        return data && data.name.slice(-4) === ".bin" ? getdatabin(data) : getdatastr(data);
      }
      function safegetzipfile(zip, file) {
        var k = zip.FullPaths || keys(zip.files);
        var f = file.toLowerCase().replace(/[\/]/g, "\\"), g = f.replace(/\\/g, "/");
        for (var i = 0; i < k.length; ++i) {
          var n = k[i].replace(/^Root Entry[\/]/, "").toLowerCase();
          if (f == n || g == n) return zip.files ? zip.files[k[i]] : zip.FileIndex[i];
        }
        return null;
      }
      function getzipfile(zip, file) {
        var o = safegetzipfile(zip, file);
        if (o == null) throw new Error("Cannot find file " + file + " in zip");
        return o;
      }
      function getzipdata(zip, file, safe) {
        if (!safe) return getdata(getzipfile(zip, file));
        if (!file) return null;
        try {
          return getzipdata(zip, file);
        } catch (e) {
          return null;
        }
      }
      function getzipstr(zip, file, safe) {
        if (!safe) return getdatastr(getzipfile(zip, file));
        if (!file) return null;
        try {
          return getzipstr(zip, file);
        } catch (e) {
          return null;
        }
      }
      function getzipbin(zip, file, safe) {
        if (!safe) return getdatabin(getzipfile(zip, file));
        if (!file) return null;
        try {
          return getzipbin(zip, file);
        } catch (e) {
          return null;
        }
      }
      function zipentries(zip) {
        var k = zip.FullPaths || keys(zip.files), o = [];
        for (var i = 0; i < k.length; ++i) if (k[i].slice(-1) != "/") o.push(k[i].replace(/^Root Entry[\/]/, ""));
        return o.sort();
      }
      function zip_add_file(zip, path5, content) {
        if (zip.FullPaths) {
          if (typeof content == "string") {
            var res;
            if (has_buf) res = Buffer_from(content);
            else res = utf8decode(content);
            return CFB.utils.cfb_add(zip, path5, res);
          }
          CFB.utils.cfb_add(zip, path5, content);
        } else zip.file(path5, content);
      }
      function zip_new() {
        return CFB.utils.cfb_new();
      }
      function zip_read(d, o) {
        switch (o.type) {
          case "base64":
            return CFB.read(d, { type: "base64" });
          case "binary":
            return CFB.read(d, { type: "binary" });
          case "buffer":
          case "array":
            return CFB.read(d, { type: "buffer" });
        }
        throw new Error("Unrecognized type " + o.type);
      }
      function resolve_path(path5, base) {
        if (path5.charAt(0) == "/") return path5.slice(1);
        var result = base.split("/");
        if (base.slice(-1) != "/") result.pop();
        var target = path5.split("/");
        while (target.length !== 0) {
          var step = target.shift();
          if (step === "..") result.pop();
          else if (step !== ".") result.push(step);
        }
        return result.join("/");
      }
      var XML_HEADER = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r\n';
      var attregexg = /([^"\s?>\/]+)\s*=\s*((?:")([^"]*)(?:")|(?:')([^']*)(?:')|([^'">\s]+))/g;
      var tagregex1 = /<[\/\?]?[a-zA-Z0-9:_-]+(?:\s+[^"\s?>\/]+\s*=\s*(?:"[^"]*"|'[^']*'|[^'">\s=]+))*\s*[\/\?]?>/mg, tagregex2 = /<[^>]*>/g;
      var tagregex = XML_HEADER.match(tagregex1) ? tagregex1 : tagregex2;
      var nsregex = /<\w*:/, nsregex2 = /<(\/?)\w+:/;
      function parsexmltag(tag, skip_root, skip_LC) {
        var z = {};
        var eq = 0, c = 0;
        for (; eq !== tag.length; ++eq) if ((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;
        if (!skip_root) z[0] = tag.slice(0, eq);
        if (eq === tag.length) return z;
        var m = tag.match(attregexg), j = 0, v = "", i = 0, q = "", cc = "", quot = 1;
        if (m) for (i = 0; i != m.length; ++i) {
          cc = m[i];
          for (c = 0; c != cc.length; ++c) if (cc.charCodeAt(c) === 61) break;
          q = cc.slice(0, c).trim();
          while (cc.charCodeAt(c + 1) == 32) ++c;
          quot = (eq = cc.charCodeAt(c + 1)) == 34 || eq == 39 ? 1 : 0;
          v = cc.slice(c + 1 + quot, cc.length - quot);
          for (j = 0; j != q.length; ++j) if (q.charCodeAt(j) === 58) break;
          if (j === q.length) {
            if (q.indexOf("_") > 0) q = q.slice(0, q.indexOf("_"));
            z[q] = v;
            if (!skip_LC) z[q.toLowerCase()] = v;
          } else {
            var k = (j === 5 && q.slice(0, 5) === "xmlns" ? "xmlns" : "") + q.slice(j + 1);
            if (z[k] && q.slice(j - 3, j) == "ext") continue;
            z[k] = v;
            if (!skip_LC) z[k.toLowerCase()] = v;
          }
        }
        return z;
      }
      function strip_ns(x) {
        return x.replace(nsregex2, "<$1");
      }
      var encodings = {
        "&quot;": '"',
        "&apos;": "'",
        "&gt;": ">",
        "&lt;": "<",
        "&amp;": "&"
      };
      var rencoding = evert(encodings);
      var unescapexml = /* @__PURE__ */ function() {
        var encregex = /&(?:quot|apos|gt|lt|amp|#x?([\da-fA-F]+));/ig, coderegex = /_x([\da-fA-F]{4})_/ig;
        return function unescapexml2(text) {
          var s = text + "", i = s.indexOf("<![CDATA[");
          if (i == -1) return s.replace(encregex, function($$, $1) {
            return encodings[$$] || String.fromCharCode(parseInt($1, $$.indexOf("x") > -1 ? 16 : 10)) || $$;
          }).replace(coderegex, function(m, c) {
            return String.fromCharCode(parseInt(c, 16));
          });
          var j = s.indexOf("]]>");
          return unescapexml2(s.slice(0, i)) + s.slice(i + 9, j) + unescapexml2(s.slice(j + 3));
        };
      }();
      var decregex = /[&<>'"]/g, charegex = /[\u0000-\u0008\u000b-\u001f]/g;
      function escapexml(text) {
        var s = text + "";
        return s.replace(decregex, function(y) {
          return rencoding[y];
        }).replace(charegex, function(s2) {
          return "_x" + ("000" + s2.charCodeAt(0).toString(16)).slice(-4) + "_";
        });
      }
      function escapexmltag(text) {
        return escapexml(text).replace(/ /g, "_x0020_");
      }
      var htmlcharegex = /[\u0000-\u001f]/g;
      function escapehtml(text) {
        var s = text + "";
        return s.replace(decregex, function(y) {
          return rencoding[y];
        }).replace(/\n/g, "<br/>").replace(htmlcharegex, function(s2) {
          return "&#x" + ("000" + s2.charCodeAt(0).toString(16)).slice(-4) + ";";
        });
      }
      function escapexlml(text) {
        var s = text + "";
        return s.replace(decregex, function(y) {
          return rencoding[y];
        }).replace(htmlcharegex, function(s2) {
          return "&#x" + s2.charCodeAt(0).toString(16).toUpperCase() + ";";
        });
      }
      var xlml_fixstr = /* @__PURE__ */ function() {
        var entregex = /&#(\d+);/g;
        function entrepl($$, $1) {
          return String.fromCharCode(parseInt($1, 10));
        }
        return function xlml_fixstr2(str) {
          return str.replace(entregex, entrepl);
        };
      }();
      function xlml_unfixstr(str) {
        return str.replace(/(\r\n|[\r\n])/g, "&#10;");
      }
      function parsexmlbool(value) {
        switch (value) {
          case 1:
          case true:
          case "1":
          case "true":
          case "TRUE":
            return true;
          default:
            return false;
        }
      }
      function utf8reada(orig) {
        var out = "", i = 0, c = 0, d = 0, e = 0, f = 0, w = 0;
        while (i < orig.length) {
          c = orig.charCodeAt(i++);
          if (c < 128) {
            out += String.fromCharCode(c);
            continue;
          }
          d = orig.charCodeAt(i++);
          if (c > 191 && c < 224) {
            f = (c & 31) << 6;
            f |= d & 63;
            out += String.fromCharCode(f);
            continue;
          }
          e = orig.charCodeAt(i++);
          if (c < 240) {
            out += String.fromCharCode((c & 15) << 12 | (d & 63) << 6 | e & 63);
            continue;
          }
          f = orig.charCodeAt(i++);
          w = ((c & 7) << 18 | (d & 63) << 12 | (e & 63) << 6 | f & 63) - 65536;
          out += String.fromCharCode(55296 + (w >>> 10 & 1023));
          out += String.fromCharCode(56320 + (w & 1023));
        }
        return out;
      }
      function utf8readb(data) {
        var out = new_raw_buf(2 * data.length), w, i, j = 1, k = 0, ww = 0, c;
        for (i = 0; i < data.length; i += j) {
          j = 1;
          if ((c = data.charCodeAt(i)) < 128) w = c;
          else if (c < 224) {
            w = (c & 31) * 64 + (data.charCodeAt(i + 1) & 63);
            j = 2;
          } else if (c < 240) {
            w = (c & 15) * 4096 + (data.charCodeAt(i + 1) & 63) * 64 + (data.charCodeAt(i + 2) & 63);
            j = 3;
          } else {
            j = 4;
            w = (c & 7) * 262144 + (data.charCodeAt(i + 1) & 63) * 4096 + (data.charCodeAt(i + 2) & 63) * 64 + (data.charCodeAt(i + 3) & 63);
            w -= 65536;
            ww = 55296 + (w >>> 10 & 1023);
            w = 56320 + (w & 1023);
          }
          if (ww !== 0) {
            out[k++] = ww & 255;
            out[k++] = ww >>> 8;
            ww = 0;
          }
          out[k++] = w % 256;
          out[k++] = w >>> 8;
        }
        return out.slice(0, k).toString("ucs2");
      }
      function utf8readc(data) {
        return Buffer_from(data, "binary").toString("utf8");
      }
      var utf8corpus = "foo bar baz\xE2\x98\x83\xF0\x9F\x8D\xA3";
      var utf8read = has_buf && (utf8readc(utf8corpus) == utf8reada(utf8corpus) && utf8readc || utf8readb(utf8corpus) == utf8reada(utf8corpus) && utf8readb) || utf8reada;
      var utf8write = has_buf ? function(data) {
        return Buffer_from(data, "utf8").toString("binary");
      } : function(orig) {
        var out = [], i = 0, c = 0, d = 0;
        while (i < orig.length) {
          c = orig.charCodeAt(i++);
          switch (true) {
            case c < 128:
              out.push(String.fromCharCode(c));
              break;
            case c < 2048:
              out.push(String.fromCharCode(192 + (c >> 6)));
              out.push(String.fromCharCode(128 + (c & 63)));
              break;
            case (c >= 55296 && c < 57344):
              c -= 55296;
              d = orig.charCodeAt(i++) - 56320 + (c << 10);
              out.push(String.fromCharCode(240 + (d >> 18 & 7)));
              out.push(String.fromCharCode(144 + (d >> 12 & 63)));
              out.push(String.fromCharCode(128 + (d >> 6 & 63)));
              out.push(String.fromCharCode(128 + (d & 63)));
              break;
            default:
              out.push(String.fromCharCode(224 + (c >> 12)));
              out.push(String.fromCharCode(128 + (c >> 6 & 63)));
              out.push(String.fromCharCode(128 + (c & 63)));
          }
        }
        return out.join("");
      };
      var matchtag = /* @__PURE__ */ function() {
        var mtcache = {};
        return function matchtag2(f, g) {
          var t = f + "|" + (g || "");
          if (mtcache[t]) return mtcache[t];
          return mtcache[t] = new RegExp("<(?:\\w+:)?" + f + '(?: xml:space="preserve")?(?:[^>]*)>([\\s\\S]*?)</(?:\\w+:)?' + f + ">", g || "");
        };
      }();
      var htmldecode = function() {
        var entities = [
          ["nbsp", " "],
          ["middot", "\xB7"],
          ["quot", '"'],
          ["apos", "'"],
          ["gt", ">"],
          ["lt", "<"],
          ["amp", "&"]
        ].map(function(x) {
          return [new RegExp("&" + x[0] + ";", "ig"), x[1]];
        });
        return function htmldecode2(str) {
          var o = str.replace(/^[\t\n\r ]+/, "").replace(/[\t\n\r ]+$/, "").replace(/>\s+/g, ">").replace(/\s+</g, "<").replace(/[\t\n\r ]+/g, " ").replace(/<\s*[bB][rR]\s*\/?>/g, "\n").replace(/<[^>]*>/g, "");
          for (var i = 0; i < entities.length; ++i) o = o.replace(entities[i][0], entities[i][1]);
          return o;
        };
      }();
      var vtregex = /* @__PURE__ */ function() {
        var vt_cache = {};
        return function vt_regex(bt) {
          if (vt_cache[bt] !== void 0) return vt_cache[bt];
          return vt_cache[bt] = new RegExp("<(?:vt:)?" + bt + ">([\\s\\S]*?)</(?:vt:)?" + bt + ">", "g");
        };
      }();
      var vtvregex = /<\/?(?:vt:)?variant>/g, vtmregex = /<(?:vt:)([^>]*)>([\s\S]*)</;
      function parseVector(data, opts) {
        var h = parsexmltag(data);
        var matches = data.match(vtregex(h.baseType)) || [];
        var res = [];
        if (matches.length != h.size) {
          if (opts.WTF) throw new Error("unexpected vector length " + matches.length + " != " + h.size);
          return res;
        }
        matches.forEach(function(x) {
          var v = x.replace(vtvregex, "").match(vtmregex);
          if (v) res.push({ v: utf8read(v[2]), t: v[1] });
        });
        return res;
      }
      var wtregex = /(^\s|\s$|\n)/;
      function writetag(f, g) {
        return "<" + f + (g.match(wtregex) ? ' xml:space="preserve"' : "") + ">" + g + "</" + f + ">";
      }
      function wxt_helper(h) {
        return keys(h).map(function(k) {
          return " " + k + '="' + h[k] + '"';
        }).join("");
      }
      function writextag(f, g, h) {
        return "<" + f + (h != null ? wxt_helper(h) : "") + (g != null ? (g.match(wtregex) ? ' xml:space="preserve"' : "") + ">" + g + "</" + f : "/") + ">";
      }
      function write_w3cdtf(d, t) {
        try {
          return d.toISOString().replace(/\.\d*/, "");
        } catch (e) {
          if (t) throw e;
        }
        return "";
      }
      function write_vt(s, xlsx2) {
        switch (typeof s) {
          case "string":
            var o = writextag("vt:lpwstr", escapexml(s));
            if (xlsx2) o = o.replace(/&quot;/g, "_x0022_");
            return o;
          case "number":
            return writextag((s | 0) == s ? "vt:i4" : "vt:r8", escapexml(String(s)));
          case "boolean":
            return writextag("vt:bool", s ? "true" : "false");
        }
        if (s instanceof Date) return writextag("vt:filetime", write_w3cdtf(s));
        throw new Error("Unable to serialize " + s);
      }
      function xlml_normalize(d) {
        if (has_buf && Buffer.isBuffer(d)) return d.toString("utf8");
        if (typeof d === "string") return d;
        if (typeof Uint8Array !== "undefined" && d instanceof Uint8Array) return utf8read(a2s(ab2a(d)));
        throw new Error("Bad input format: expected Buffer or string");
      }
      var xlmlregex = /<(\/?)([^\s?><!\/:]*:|)([^\s?<>:\/]+)(?:[\s?:\/][^>]*)?>/mg;
      var XMLNS = {
        CORE_PROPS: "http://schemas.openxmlformats.org/package/2006/metadata/core-properties",
        CUST_PROPS: "http://schemas.openxmlformats.org/officeDocument/2006/custom-properties",
        EXT_PROPS: "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties",
        CT: "http://schemas.openxmlformats.org/package/2006/content-types",
        RELS: "http://schemas.openxmlformats.org/package/2006/relationships",
        TCMNT: "http://schemas.microsoft.com/office/spreadsheetml/2018/threadedcomments",
        "dc": "http://purl.org/dc/elements/1.1/",
        "dcterms": "http://purl.org/dc/terms/",
        "dcmitype": "http://purl.org/dc/dcmitype/",
        "mx": "http://schemas.microsoft.com/office/mac/excel/2008/main",
        "r": "http://schemas.openxmlformats.org/officeDocument/2006/relationships",
        "sjs": "http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties",
        "vt": "http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",
        "xsi": "http://www.w3.org/2001/XMLSchema-instance",
        "xsd": "http://www.w3.org/2001/XMLSchema"
      };
      var XMLNS_main = [
        "http://schemas.openxmlformats.org/spreadsheetml/2006/main",
        "http://purl.oclc.org/ooxml/spreadsheetml/main",
        "http://schemas.microsoft.com/office/excel/2006/main",
        "http://schemas.microsoft.com/office/excel/2006/2"
      ];
      var XLMLNS = {
        "o": "urn:schemas-microsoft-com:office:office",
        "x": "urn:schemas-microsoft-com:office:excel",
        "ss": "urn:schemas-microsoft-com:office:spreadsheet",
        "dt": "uuid:C2F41010-65B3-11d1-A29F-00AA00C14882",
        "mv": "http://macVmlSchemaUri",
        "v": "urn:schemas-microsoft-com:vml",
        "html": "http://www.w3.org/TR/REC-html40"
      };
      function read_double_le(b, idx) {
        var s = 1 - 2 * (b[idx + 7] >>> 7);
        var e = ((b[idx + 7] & 127) << 4) + (b[idx + 6] >>> 4 & 15);
        var m = b[idx + 6] & 15;
        for (var i = 5; i >= 0; --i) m = m * 256 + b[idx + i];
        if (e == 2047) return m == 0 ? s * Infinity : NaN;
        if (e == 0) e = -1022;
        else {
          e -= 1023;
          m += Math.pow(2, 52);
        }
        return s * Math.pow(2, e - 52) * m;
      }
      function write_double_le(b, v, idx) {
        var bs = (v < 0 || 1 / v == -Infinity ? 1 : 0) << 7, e = 0, m = 0;
        var av = bs ? -v : v;
        if (!isFinite(av)) {
          e = 2047;
          m = isNaN(v) ? 26985 : 0;
        } else if (av == 0) e = m = 0;
        else {
          e = Math.floor(Math.log(av) / Math.LN2);
          m = av * Math.pow(2, 52 - e);
          if (e <= -1023 && (!isFinite(m) || m < Math.pow(2, 52))) {
            e = -1022;
          } else {
            m -= Math.pow(2, 52);
            e += 1023;
          }
        }
        for (var i = 0; i <= 5; ++i, m /= 256) b[idx + i] = m & 255;
        b[idx + 6] = (e & 15) << 4 | m & 15;
        b[idx + 7] = e >> 4 | bs;
      }
      var ___toBuffer = function(bufs) {
        var x = [], w = 10240;
        for (var i = 0; i < bufs[0].length; ++i) if (bufs[0][i]) for (var j = 0, L = bufs[0][i].length; j < L; j += w) x.push.apply(x, bufs[0][i].slice(j, j + w));
        return x;
      };
      var __toBuffer = has_buf ? function(bufs) {
        return bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0]) ? Buffer.concat(bufs[0].map(function(x) {
          return Buffer.isBuffer(x) ? x : Buffer_from(x);
        })) : ___toBuffer(bufs);
      } : ___toBuffer;
      var ___utf16le = function(b, s, e) {
        var ss = [];
        for (var i = s; i < e; i += 2) ss.push(String.fromCharCode(__readUInt16LE(b, i)));
        return ss.join("").replace(chr0, "");
      };
      var __utf16le = has_buf ? function(b, s, e) {
        if (!Buffer.isBuffer(b)) return ___utf16le(b, s, e);
        return b.toString("utf16le", s, e).replace(chr0, "");
      } : ___utf16le;
      var ___hexlify = function(b, s, l) {
        var ss = [];
        for (var i = s; i < s + l; ++i) ss.push(("0" + b[i].toString(16)).slice(-2));
        return ss.join("");
      };
      var __hexlify = has_buf ? function(b, s, l) {
        return Buffer.isBuffer(b) ? b.toString("hex", s, s + l) : ___hexlify(b, s, l);
      } : ___hexlify;
      var ___utf8 = function(b, s, e) {
        var ss = [];
        for (var i = s; i < e; i++) ss.push(String.fromCharCode(__readUInt8(b, i)));
        return ss.join("");
      };
      var __utf8 = has_buf ? function utf8_b(b, s, e) {
        return Buffer.isBuffer(b) ? b.toString("utf8", s, e) : ___utf8(b, s, e);
      } : ___utf8;
      var ___lpstr = function(b, i) {
        var len = __readUInt32LE(b, i);
        return len > 0 ? __utf8(b, i + 4, i + 4 + len - 1) : "";
      };
      var __lpstr = ___lpstr;
      var ___cpstr = function(b, i) {
        var len = __readUInt32LE(b, i);
        return len > 0 ? __utf8(b, i + 4, i + 4 + len - 1) : "";
      };
      var __cpstr = ___cpstr;
      var ___lpwstr = function(b, i) {
        var len = 2 * __readUInt32LE(b, i);
        return len > 0 ? __utf8(b, i + 4, i + 4 + len - 1) : "";
      };
      var __lpwstr = ___lpwstr;
      var ___lpp4 = function lpp4_(b, i) {
        var len = __readUInt32LE(b, i);
        return len > 0 ? __utf16le(b, i + 4, i + 4 + len) : "";
      };
      var __lpp4 = ___lpp4;
      var ___8lpp4 = function(b, i) {
        var len = __readUInt32LE(b, i);
        return len > 0 ? __utf8(b, i + 4, i + 4 + len) : "";
      };
      var __8lpp4 = ___8lpp4;
      var ___double = function(b, idx) {
        return read_double_le(b, idx);
      };
      var __double = ___double;
      var is_buf = function is_buf_a(a) {
        return Array.isArray(a) || typeof Uint8Array !== "undefined" && a instanceof Uint8Array;
      };
      if (has_buf) {
        __lpstr = function lpstr_b(b, i) {
          if (!Buffer.isBuffer(b)) return ___lpstr(b, i);
          var len = b.readUInt32LE(i);
          return len > 0 ? b.toString("utf8", i + 4, i + 4 + len - 1) : "";
        };
        __cpstr = function cpstr_b(b, i) {
          if (!Buffer.isBuffer(b)) return ___cpstr(b, i);
          var len = b.readUInt32LE(i);
          return len > 0 ? b.toString("utf8", i + 4, i + 4 + len - 1) : "";
        };
        __lpwstr = function lpwstr_b(b, i) {
          if (!Buffer.isBuffer(b)) return ___lpwstr(b, i);
          var len = 2 * b.readUInt32LE(i);
          return b.toString("utf16le", i + 4, i + 4 + len - 1);
        };
        __lpp4 = function lpp4_b(b, i) {
          if (!Buffer.isBuffer(b)) return ___lpp4(b, i);
          var len = b.readUInt32LE(i);
          return b.toString("utf16le", i + 4, i + 4 + len);
        };
        __8lpp4 = function lpp4_8b(b, i) {
          if (!Buffer.isBuffer(b)) return ___8lpp4(b, i);
          var len = b.readUInt32LE(i);
          return b.toString("utf8", i + 4, i + 4 + len);
        };
        __double = function double_(b, i) {
          if (Buffer.isBuffer(b)) return b.readDoubleLE(i);
          return ___double(b, i);
        };
        is_buf = function is_buf_b(a) {
          return Buffer.isBuffer(a) || Array.isArray(a) || typeof Uint8Array !== "undefined" && a instanceof Uint8Array;
        };
      }
      function cpdoit() {
        __utf16le = function(b, s, e) {
          return $cptable.utils.decode(1200, b.slice(s, e)).replace(chr0, "");
        };
        __utf8 = function(b, s, e) {
          return $cptable.utils.decode(65001, b.slice(s, e));
        };
        __lpstr = function(b, i) {
          var len = __readUInt32LE(b, i);
          return len > 0 ? $cptable.utils.decode(current_ansi, b.slice(i + 4, i + 4 + len - 1)) : "";
        };
        __cpstr = function(b, i) {
          var len = __readUInt32LE(b, i);
          return len > 0 ? $cptable.utils.decode(current_codepage, b.slice(i + 4, i + 4 + len - 1)) : "";
        };
        __lpwstr = function(b, i) {
          var len = 2 * __readUInt32LE(b, i);
          return len > 0 ? $cptable.utils.decode(1200, b.slice(i + 4, i + 4 + len - 1)) : "";
        };
        __lpp4 = function(b, i) {
          var len = __readUInt32LE(b, i);
          return len > 0 ? $cptable.utils.decode(1200, b.slice(i + 4, i + 4 + len)) : "";
        };
        __8lpp4 = function(b, i) {
          var len = __readUInt32LE(b, i);
          return len > 0 ? $cptable.utils.decode(65001, b.slice(i + 4, i + 4 + len)) : "";
        };
      }
      if (typeof $cptable !== "undefined") cpdoit();
      var __readUInt8 = function(b, idx) {
        return b[idx];
      };
      var __readUInt16LE = function(b, idx) {
        return b[idx + 1] * (1 << 8) + b[idx];
      };
      var __readInt16LE = function(b, idx) {
        var u = b[idx + 1] * (1 << 8) + b[idx];
        return u < 32768 ? u : (65535 - u + 1) * -1;
      };
      var __readUInt32LE = function(b, idx) {
        return b[idx + 3] * (1 << 24) + (b[idx + 2] << 16) + (b[idx + 1] << 8) + b[idx];
      };
      var __readInt32LE = function(b, idx) {
        return b[idx + 3] << 24 | b[idx + 2] << 16 | b[idx + 1] << 8 | b[idx];
      };
      var __readInt32BE = function(b, idx) {
        return b[idx] << 24 | b[idx + 1] << 16 | b[idx + 2] << 8 | b[idx + 3];
      };
      function ReadShift(size, t) {
        var o = "", oI, oR, oo = [], w, vv, i, loc;
        switch (t) {
          case "dbcs":
            loc = this.l;
            if (has_buf && Buffer.isBuffer(this)) o = this.slice(this.l, this.l + 2 * size).toString("utf16le");
            else for (i = 0; i < size; ++i) {
              o += String.fromCharCode(__readUInt16LE(this, loc));
              loc += 2;
            }
            size *= 2;
            break;
          case "utf8":
            o = __utf8(this, this.l, this.l + size);
            break;
          case "utf16le":
            size *= 2;
            o = __utf16le(this, this.l, this.l + size);
            break;
          case "wstr":
            if (typeof $cptable !== "undefined") o = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l + 2 * size));
            else return ReadShift.call(this, size, "dbcs");
            size = 2 * size;
            break;
          case "lpstr-ansi":
            o = __lpstr(this, this.l);
            size = 4 + __readUInt32LE(this, this.l);
            break;
          case "lpstr-cp":
            o = __cpstr(this, this.l);
            size = 4 + __readUInt32LE(this, this.l);
            break;
          case "lpwstr":
            o = __lpwstr(this, this.l);
            size = 4 + 2 * __readUInt32LE(this, this.l);
            break;
          case "lpp4":
            size = 4 + __readUInt32LE(this, this.l);
            o = __lpp4(this, this.l);
            if (size & 2) size += 2;
            break;
          case "8lpp4":
            size = 4 + __readUInt32LE(this, this.l);
            o = __8lpp4(this, this.l);
            if (size & 3) size += 4 - (size & 3);
            break;
          case "cstr":
            size = 0;
            o = "";
            while ((w = __readUInt8(this, this.l + size++)) !== 0) oo.push(_getchar(w));
            o = oo.join("");
            break;
          case "_wstr":
            size = 0;
            o = "";
            while ((w = __readUInt16LE(this, this.l + size)) !== 0) {
              oo.push(_getchar(w));
              size += 2;
            }
            size += 2;
            o = oo.join("");
            break;
          case "dbcs-cont":
            o = "";
            loc = this.l;
            for (i = 0; i < size; ++i) {
              if (this.lens && this.lens.indexOf(loc) !== -1) {
                w = __readUInt8(this, loc);
                this.l = loc + 1;
                vv = ReadShift.call(this, size - i, w ? "dbcs-cont" : "sbcs-cont");
                return oo.join("") + vv;
              }
              oo.push(_getchar(__readUInt16LE(this, loc)));
              loc += 2;
            }
            o = oo.join("");
            size *= 2;
            break;
          case "cpstr":
            if (typeof $cptable !== "undefined") {
              o = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l + size));
              break;
            }
          case "sbcs-cont":
            o = "";
            loc = this.l;
            for (i = 0; i != size; ++i) {
              if (this.lens && this.lens.indexOf(loc) !== -1) {
                w = __readUInt8(this, loc);
                this.l = loc + 1;
                vv = ReadShift.call(this, size - i, w ? "dbcs-cont" : "sbcs-cont");
                return oo.join("") + vv;
              }
              oo.push(_getchar(__readUInt8(this, loc)));
              loc += 1;
            }
            o = oo.join("");
            break;
          default:
            switch (size) {
              case 1:
                oI = __readUInt8(this, this.l);
                this.l++;
                return oI;
              case 2:
                oI = (t === "i" ? __readInt16LE : __readUInt16LE)(this, this.l);
                this.l += 2;
                return oI;
              case 4:
              case -4:
                if (t === "i" || (this[this.l + 3] & 128) === 0) {
                  oI = (size > 0 ? __readInt32LE : __readInt32BE)(this, this.l);
                  this.l += 4;
                  return oI;
                } else {
                  oR = __readUInt32LE(this, this.l);
                  this.l += 4;
                }
                return oR;
              case 8:
              case -8:
                if (t === "f") {
                  if (size == 8) oR = __double(this, this.l);
                  else oR = __double([this[this.l + 7], this[this.l + 6], this[this.l + 5], this[this.l + 4], this[this.l + 3], this[this.l + 2], this[this.l + 1], this[this.l + 0]], 0);
                  this.l += 8;
                  return oR;
                } else size = 8;
              case 16:
                o = __hexlify(this, this.l, size);
                break;
            }
        }
        this.l += size;
        return o;
      }
      var __writeUInt32LE = function(b, val, idx) {
        b[idx] = val & 255;
        b[idx + 1] = val >>> 8 & 255;
        b[idx + 2] = val >>> 16 & 255;
        b[idx + 3] = val >>> 24 & 255;
      };
      var __writeInt32LE = function(b, val, idx) {
        b[idx] = val & 255;
        b[idx + 1] = val >> 8 & 255;
        b[idx + 2] = val >> 16 & 255;
        b[idx + 3] = val >> 24 & 255;
      };
      var __writeUInt16LE = function(b, val, idx) {
        b[idx] = val & 255;
        b[idx + 1] = val >>> 8 & 255;
      };
      function WriteShift(t, val, f) {
        var size = 0, i = 0;
        if (f === "dbcs") {
          for (i = 0; i != val.length; ++i) __writeUInt16LE(this, val.charCodeAt(i), this.l + 2 * i);
          size = 2 * val.length;
        } else if (f === "sbcs") {
          if (typeof $cptable !== "undefined" && current_ansi == 874) {
            for (i = 0; i != val.length; ++i) {
              var cppayload = $cptable.utils.encode(current_ansi, val.charAt(i));
              this[this.l + i] = cppayload[0];
            }
          } else {
            val = val.replace(/[^\x00-\x7F]/g, "_");
            for (i = 0; i != val.length; ++i) this[this.l + i] = val.charCodeAt(i) & 255;
          }
          size = val.length;
        } else if (f === "hex") {
          for (; i < t; ++i) {
            this[this.l++] = parseInt(val.slice(2 * i, 2 * i + 2), 16) || 0;
          }
          return this;
        } else if (f === "utf16le") {
          var end = Math.min(this.l + t, this.length);
          for (i = 0; i < Math.min(val.length, t); ++i) {
            var cc = val.charCodeAt(i);
            this[this.l++] = cc & 255;
            this[this.l++] = cc >> 8;
          }
          while (this.l < end) this[this.l++] = 0;
          return this;
        } else switch (t) {
          case 1:
            size = 1;
            this[this.l] = val & 255;
            break;
          case 2:
            size = 2;
            this[this.l] = val & 255;
            val >>>= 8;
            this[this.l + 1] = val & 255;
            break;
          case 3:
            size = 3;
            this[this.l] = val & 255;
            val >>>= 8;
            this[this.l + 1] = val & 255;
            val >>>= 8;
            this[this.l + 2] = val & 255;
            break;
          case 4:
            size = 4;
            __writeUInt32LE(this, val, this.l);
            break;
          case 8:
            size = 8;
            if (f === "f") {
              write_double_le(this, val, this.l);
              break;
            }
          case 16:
            break;
          case -4:
            size = 4;
            __writeInt32LE(this, val, this.l);
            break;
        }
        this.l += size;
        return this;
      }
      function CheckField(hexstr, fld) {
        var m = __hexlify(this, this.l, hexstr.length >> 1);
        if (m !== hexstr) throw new Error(fld + "Expected " + hexstr + " saw " + m);
        this.l += hexstr.length >> 1;
      }
      function prep_blob(blob, pos) {
        blob.l = pos;
        blob.read_shift = ReadShift;
        blob.chk = CheckField;
        blob.write_shift = WriteShift;
      }
      function parsenoop(blob, length) {
        blob.l += length;
      }
      function new_buf(sz) {
        var o = new_raw_buf(sz);
        prep_blob(o, 0);
        return o;
      }
      function recordhopper(data, cb, opts) {
        if (!data) return;
        var tmpbyte, cntbyte, length;
        prep_blob(data, data.l || 0);
        var L = data.length, RT = 0, tgt = 0;
        while (data.l < L) {
          RT = data.read_shift(1);
          if (RT & 128) RT = (RT & 127) + ((data.read_shift(1) & 127) << 7);
          var R = XLSBRecordEnum[RT] || XLSBRecordEnum[65535];
          tmpbyte = data.read_shift(1);
          length = tmpbyte & 127;
          for (cntbyte = 1; cntbyte < 4 && tmpbyte & 128; ++cntbyte) length += ((tmpbyte = data.read_shift(1)) & 127) << 7 * cntbyte;
          tgt = data.l + length;
          var d = R.f && R.f(data, length, opts);
          data.l = tgt;
          if (cb(d, R, RT)) return;
        }
      }
      function buf_array() {
        var bufs = [], blksz = has_buf ? 256 : 2048;
        var newblk = function ba_newblk(sz) {
          var o = new_buf(sz);
          prep_blob(o, 0);
          return o;
        };
        var curbuf = newblk(blksz);
        var endbuf = function ba_endbuf() {
          if (!curbuf) return;
          if (curbuf.length > curbuf.l) {
            curbuf = curbuf.slice(0, curbuf.l);
            curbuf.l = curbuf.length;
          }
          if (curbuf.length > 0) bufs.push(curbuf);
          curbuf = null;
        };
        var next = function ba_next(sz) {
          if (curbuf && sz < curbuf.length - curbuf.l) return curbuf;
          endbuf();
          return curbuf = newblk(Math.max(sz + 1, blksz));
        };
        var end = function ba_end() {
          endbuf();
          return bconcat(bufs);
        };
        var push = function ba_push(buf) {
          endbuf();
          curbuf = buf;
          if (curbuf.l == null) curbuf.l = curbuf.length;
          next(blksz);
        };
        return { next, push, end, _bufs: bufs };
      }
      function write_record(ba, type, payload, length) {
        var t = +type, l;
        if (isNaN(t)) return;
        if (!length) length = XLSBRecordEnum[t].p || (payload || []).length || 0;
        l = 1 + (t >= 128 ? 1 : 0) + 1;
        if (length >= 128) ++l;
        if (length >= 16384) ++l;
        if (length >= 2097152) ++l;
        var o = ba.next(l);
        if (t <= 127) o.write_shift(1, t);
        else {
          o.write_shift(1, (t & 127) + 128);
          o.write_shift(1, t >> 7);
        }
        for (var i = 0; i != 4; ++i) {
          if (length >= 128) {
            o.write_shift(1, (length & 127) + 128);
            length >>= 7;
          } else {
            o.write_shift(1, length);
            break;
          }
        }
        if (length > 0 && is_buf(payload)) ba.push(payload);
      }
      function shift_cell_xls(cell, tgt, opts) {
        var out = dup(cell);
        if (tgt.s) {
          if (out.cRel) out.c += tgt.s.c;
          if (out.rRel) out.r += tgt.s.r;
        } else {
          if (out.cRel) out.c += tgt.c;
          if (out.rRel) out.r += tgt.r;
        }
        if (!opts || opts.biff < 12) {
          while (out.c >= 256) out.c -= 256;
          while (out.r >= 65536) out.r -= 65536;
        }
        return out;
      }
      function shift_range_xls(cell, range, opts) {
        var out = dup(cell);
        out.s = shift_cell_xls(out.s, range.s, opts);
        out.e = shift_cell_xls(out.e, range.s, opts);
        return out;
      }
      function encode_cell_xls(c, biff) {
        if (c.cRel && c.c < 0) {
          c = dup(c);
          while (c.c < 0) c.c += biff > 8 ? 16384 : 256;
        }
        if (c.rRel && c.r < 0) {
          c = dup(c);
          while (c.r < 0) c.r += biff > 8 ? 1048576 : biff > 5 ? 65536 : 16384;
        }
        var s = encode_cell(c);
        if (!c.cRel && c.cRel != null) s = fix_col(s);
        if (!c.rRel && c.rRel != null) s = fix_row(s);
        return s;
      }
      function encode_range_xls(r, opts) {
        if (r.s.r == 0 && !r.s.rRel) {
          if (r.e.r == (opts.biff >= 12 ? 1048575 : opts.biff >= 8 ? 65536 : 16384) && !r.e.rRel) {
            return (r.s.cRel ? "" : "$") + encode_col(r.s.c) + ":" + (r.e.cRel ? "" : "$") + encode_col(r.e.c);
          }
        }
        if (r.s.c == 0 && !r.s.cRel) {
          if (r.e.c == (opts.biff >= 12 ? 16383 : 255) && !r.e.cRel) {
            return (r.s.rRel ? "" : "$") + encode_row(r.s.r) + ":" + (r.e.rRel ? "" : "$") + encode_row(r.e.r);
          }
        }
        return encode_cell_xls(r.s, opts.biff) + ":" + encode_cell_xls(r.e, opts.biff);
      }
      function decode_row(rowstr) {
        return parseInt(unfix_row(rowstr), 10) - 1;
      }
      function encode_row(row) {
        return "" + (row + 1);
      }
      function fix_row(cstr) {
        return cstr.replace(/([A-Z]|^)(\d+)$/, "$1$$$2");
      }
      function unfix_row(cstr) {
        return cstr.replace(/\$(\d+)$/, "$1");
      }
      function decode_col(colstr) {
        var c = unfix_col(colstr), d = 0, i = 0;
        for (; i !== c.length; ++i) d = 26 * d + c.charCodeAt(i) - 64;
        return d - 1;
      }
      function encode_col(col) {
        if (col < 0) throw new Error("invalid column " + col);
        var s = "";
        for (++col; col; col = Math.floor((col - 1) / 26)) s = String.fromCharCode((col - 1) % 26 + 65) + s;
        return s;
      }
      function fix_col(cstr) {
        return cstr.replace(/^([A-Z])/, "$$$1");
      }
      function unfix_col(cstr) {
        return cstr.replace(/^\$([A-Z])/, "$1");
      }
      function split_cell(cstr) {
        return cstr.replace(/(\$?[A-Z]*)(\$?\d*)/, "$1,$2").split(",");
      }
      function decode_cell(cstr) {
        var R = 0, C = 0;
        for (var i = 0; i < cstr.length; ++i) {
          var cc = cstr.charCodeAt(i);
          if (cc >= 48 && cc <= 57) R = 10 * R + (cc - 48);
          else if (cc >= 65 && cc <= 90) C = 26 * C + (cc - 64);
        }
        return { c: C - 1, r: R - 1 };
      }
      function encode_cell(cell) {
        var col = cell.c + 1;
        var s = "";
        for (; col; col = (col - 1) / 26 | 0) s = String.fromCharCode((col - 1) % 26 + 65) + s;
        return s + (cell.r + 1);
      }
      function decode_range(range) {
        var idx = range.indexOf(":");
        if (idx == -1) return { s: decode_cell(range), e: decode_cell(range) };
        return { s: decode_cell(range.slice(0, idx)), e: decode_cell(range.slice(idx + 1)) };
      }
      function encode_range(cs, ce) {
        if (typeof ce === "undefined" || typeof ce === "number") {
          return encode_range(cs.s, cs.e);
        }
        if (typeof cs !== "string") cs = encode_cell(cs);
        if (typeof ce !== "string") ce = encode_cell(ce);
        return cs == ce ? cs : cs + ":" + ce;
      }
      function safe_decode_range(range) {
        var o = { s: { c: 0, r: 0 }, e: { c: 0, r: 0 } };
        var idx = 0, i = 0, cc = 0;
        var len = range.length;
        for (idx = 0; i < len; ++i) {
          if ((cc = range.charCodeAt(i) - 64) < 1 || cc > 26) break;
          idx = 26 * idx + cc;
        }
        o.s.c = --idx;
        for (idx = 0; i < len; ++i) {
          if ((cc = range.charCodeAt(i) - 48) < 0 || cc > 9) break;
          idx = 10 * idx + cc;
        }
        o.s.r = --idx;
        if (i === len || cc != 10) {
          o.e.c = o.s.c;
          o.e.r = o.s.r;
          return o;
        }
        ++i;
        for (idx = 0; i != len; ++i) {
          if ((cc = range.charCodeAt(i) - 64) < 1 || cc > 26) break;
          idx = 26 * idx + cc;
        }
        o.e.c = --idx;
        for (idx = 0; i != len; ++i) {
          if ((cc = range.charCodeAt(i) - 48) < 0 || cc > 9) break;
          idx = 10 * idx + cc;
        }
        o.e.r = --idx;
        return o;
      }
      function safe_format_cell(cell, v) {
        var q = cell.t == "d" && v instanceof Date;
        if (cell.z != null) try {
          return cell.w = SSF_format(cell.z, q ? datenum(v) : v);
        } catch (e) {
        }
        try {
          return cell.w = SSF_format((cell.XF || {}).numFmtId || (q ? 14 : 0), q ? datenum(v) : v);
        } catch (e) {
          return "" + v;
        }
      }
      function format_cell(cell, v, o) {
        if (cell == null || cell.t == null || cell.t == "z") return "";
        if (cell.w !== void 0) return cell.w;
        if (cell.t == "d" && !cell.z && o && o.dateNF) cell.z = o.dateNF;
        if (cell.t == "e") return BErr[cell.v] || cell.v;
        if (v == void 0) return safe_format_cell(cell, cell.v);
        return safe_format_cell(cell, v);
      }
      function sheet_to_workbook(sheet, opts) {
        var n = opts && opts.sheet ? opts.sheet : "Sheet1";
        var sheets = {};
        sheets[n] = sheet;
        return { SheetNames: [n], Sheets: sheets };
      }
      function sheet_add_aoa(_ws, data, opts) {
        var o = opts || {};
        var dense = _ws ? Array.isArray(_ws) : o.dense;
        if (DENSE != null && dense == null) dense = DENSE;
        var ws = _ws || (dense ? [] : {});
        var _R = 0, _C = 0;
        if (ws && o.origin != null) {
          if (typeof o.origin == "number") _R = o.origin;
          else {
            var _origin = typeof o.origin == "string" ? decode_cell(o.origin) : o.origin;
            _R = _origin.r;
            _C = _origin.c;
          }
          if (!ws["!ref"]) ws["!ref"] = "A1:A1";
        }
        var range = { s: { c: 1e7, r: 1e7 }, e: { c: 0, r: 0 } };
        if (ws["!ref"]) {
          var _range = safe_decode_range(ws["!ref"]);
          range.s.c = _range.s.c;
          range.s.r = _range.s.r;
          range.e.c = Math.max(range.e.c, _range.e.c);
          range.e.r = Math.max(range.e.r, _range.e.r);
          if (_R == -1) range.e.r = _R = _range.e.r + 1;
        }
        for (var R = 0; R != data.length; ++R) {
          if (!data[R]) continue;
          if (!Array.isArray(data[R])) throw new Error("aoa_to_sheet expects an array of arrays");
          for (var C = 0; C != data[R].length; ++C) {
            if (typeof data[R][C] === "undefined") continue;
            var cell = { v: data[R][C] };
            var __R = _R + R, __C = _C + C;
            if (range.s.r > __R) range.s.r = __R;
            if (range.s.c > __C) range.s.c = __C;
            if (range.e.r < __R) range.e.r = __R;
            if (range.e.c < __C) range.e.c = __C;
            if (data[R][C] && typeof data[R][C] === "object" && !Array.isArray(data[R][C]) && !(data[R][C] instanceof Date)) cell = data[R][C];
            else {
              if (Array.isArray(cell.v)) {
                cell.f = data[R][C][1];
                cell.v = cell.v[0];
              }
              if (cell.v === null) {
                if (cell.f) cell.t = "n";
                else if (o.nullError) {
                  cell.t = "e";
                  cell.v = 0;
                } else if (!o.sheetStubs) continue;
                else cell.t = "z";
              } else if (typeof cell.v === "number") cell.t = "n";
              else if (typeof cell.v === "boolean") cell.t = "b";
              else if (cell.v instanceof Date) {
                cell.z = o.dateNF || table_fmt[14];
                if (o.cellDates) {
                  cell.t = "d";
                  cell.w = SSF_format(cell.z, datenum(cell.v));
                } else {
                  cell.t = "n";
                  cell.v = datenum(cell.v);
                  cell.w = SSF_format(cell.z, cell.v);
                }
              } else cell.t = "s";
            }
            if (dense) {
              if (!ws[__R]) ws[__R] = [];
              if (ws[__R][__C] && ws[__R][__C].z) cell.z = ws[__R][__C].z;
              ws[__R][__C] = cell;
            } else {
              var cell_ref = encode_cell({ c: __C, r: __R });
              if (ws[cell_ref] && ws[cell_ref].z) cell.z = ws[cell_ref].z;
              ws[cell_ref] = cell;
            }
          }
        }
        if (range.s.c < 1e7) ws["!ref"] = encode_range(range);
        return ws;
      }
      function aoa_to_sheet(data, opts) {
        return sheet_add_aoa(null, data, opts);
      }
      function parse_Int32LE(data) {
        return data.read_shift(4, "i");
      }
      function write_UInt32LE(x, o) {
        if (!o) o = new_buf(4);
        o.write_shift(4, x);
        return o;
      }
      function parse_XLWideString(data) {
        var cchCharacters = data.read_shift(4);
        return cchCharacters === 0 ? "" : data.read_shift(cchCharacters, "dbcs");
      }
      function write_XLWideString(data, o) {
        var _null = false;
        if (o == null) {
          _null = true;
          o = new_buf(4 + 2 * data.length);
        }
        o.write_shift(4, data.length);
        if (data.length > 0) o.write_shift(0, data, "dbcs");
        return _null ? o.slice(0, o.l) : o;
      }
      function parse_StrRun(data) {
        return { ich: data.read_shift(2), ifnt: data.read_shift(2) };
      }
      function write_StrRun(run, o) {
        if (!o) o = new_buf(4);
        o.write_shift(2, run.ich || 0);
        o.write_shift(2, run.ifnt || 0);
        return o;
      }
      function parse_RichStr(data, length) {
        var start = data.l;
        var flags = data.read_shift(1);
        var str = parse_XLWideString(data);
        var rgsStrRun = [];
        var z = { t: str, h: str };
        if ((flags & 1) !== 0) {
          var dwSizeStrRun = data.read_shift(4);
          for (var i = 0; i != dwSizeStrRun; ++i) rgsStrRun.push(parse_StrRun(data));
          z.r = rgsStrRun;
        } else z.r = [{ ich: 0, ifnt: 0 }];
        data.l = start + length;
        return z;
      }
      function write_RichStr(str, o) {
        var _null = false;
        if (o == null) {
          _null = true;
          o = new_buf(15 + 4 * str.t.length);
        }
        o.write_shift(1, 0);
        write_XLWideString(str.t, o);
        return _null ? o.slice(0, o.l) : o;
      }
      var parse_BrtCommentText = parse_RichStr;
      function write_BrtCommentText(str, o) {
        var _null = false;
        if (o == null) {
          _null = true;
          o = new_buf(23 + 4 * str.t.length);
        }
        o.write_shift(1, 1);
        write_XLWideString(str.t, o);
        o.write_shift(4, 1);
        write_StrRun({ ich: 0, ifnt: 0 }, o);
        return _null ? o.slice(0, o.l) : o;
      }
      function parse_XLSBCell(data) {
        var col = data.read_shift(4);
        var iStyleRef = data.read_shift(2);
        iStyleRef += data.read_shift(1) << 16;
        data.l++;
        return { c: col, iStyleRef };
      }
      function write_XLSBCell(cell, o) {
        if (o == null) o = new_buf(8);
        o.write_shift(-4, cell.c);
        o.write_shift(3, cell.iStyleRef || cell.s);
        o.write_shift(1, 0);
        return o;
      }
      function parse_XLSBShortCell(data) {
        var iStyleRef = data.read_shift(2);
        iStyleRef += data.read_shift(1) << 16;
        data.l++;
        return { c: -1, iStyleRef };
      }
      function write_XLSBShortCell(cell, o) {
        if (o == null) o = new_buf(4);
        o.write_shift(3, cell.iStyleRef || cell.s);
        o.write_shift(1, 0);
        return o;
      }
      var parse_XLSBCodeName = parse_XLWideString;
      var write_XLSBCodeName = write_XLWideString;
      function parse_XLNullableWideString(data) {
        var cchCharacters = data.read_shift(4);
        return cchCharacters === 0 || cchCharacters === 4294967295 ? "" : data.read_shift(cchCharacters, "dbcs");
      }
      function write_XLNullableWideString(data, o) {
        var _null = false;
        if (o == null) {
          _null = true;
          o = new_buf(127);
        }
        o.write_shift(4, data.length > 0 ? data.length : 4294967295);
        if (data.length > 0) o.write_shift(0, data, "dbcs");
        return _null ? o.slice(0, o.l) : o;
      }
      var parse_XLNameWideString = parse_XLWideString;
      var parse_RelID = parse_XLNullableWideString;
      var write_RelID = write_XLNullableWideString;
      function parse_RkNumber(data) {
        var b = data.slice(data.l, data.l + 4);
        var fX100 = b[0] & 1, fInt = b[0] & 2;
        data.l += 4;
        var RK = fInt === 0 ? __double([0, 0, 0, 0, b[0] & 252, b[1], b[2], b[3]], 0) : __readInt32LE(b, 0) >> 2;
        return fX100 ? RK / 100 : RK;
      }
      function write_RkNumber(data, o) {
        if (o == null) o = new_buf(4);
        var fX100 = 0, fInt = 0, d100 = data * 100;
        if (data == (data | 0) && data >= -(1 << 29) && data < 1 << 29) {
          fInt = 1;
        } else if (d100 == (d100 | 0) && d100 >= -(1 << 29) && d100 < 1 << 29) {
          fInt = 1;
          fX100 = 1;
        }
        if (fInt) o.write_shift(-4, ((fX100 ? d100 : data) << 2) + (fX100 + 2));
        else throw new Error("unsupported RkNumber " + data);
      }
      function parse_RfX(data) {
        var cell = { s: {}, e: {} };
        cell.s.r = data.read_shift(4);
        cell.e.r = data.read_shift(4);
        cell.s.c = data.read_shift(4);
        cell.e.c = data.read_shift(4);
        return cell;
      }
      function write_RfX(r, o) {
        if (!o) o = new_buf(16);
        o.write_shift(4, r.s.r);
        o.write_shift(4, r.e.r);
        o.write_shift(4, r.s.c);
        o.write_shift(4, r.e.c);
        return o;
      }
      var parse_UncheckedRfX = parse_RfX;
      var write_UncheckedRfX = write_RfX;
      function parse_Xnum(data) {
        if (data.length - data.l < 8) throw "XLS Xnum Buffer underflow";
        return data.read_shift(8, "f");
      }
      function write_Xnum(data, o) {
        return (o || new_buf(8)).write_shift(8, data, "f");
      }
      function parse_BrtColor(data) {
        var out = {};
        var d = data.read_shift(1);
        var xColorType = d >>> 1;
        var index = data.read_shift(1);
        var nTS = data.read_shift(2, "i");
        var bR = data.read_shift(1);
        var bG = data.read_shift(1);
        var bB = data.read_shift(1);
        data.l++;
        switch (xColorType) {
          case 0:
            out.auto = 1;
            break;
          case 1:
            out.index = index;
            var icv = XLSIcv[index];
            if (icv) out.rgb = rgb2Hex(icv);
            break;
          case 2:
            out.rgb = rgb2Hex([bR, bG, bB]);
            break;
          case 3:
            out.theme = index;
            break;
        }
        if (nTS != 0) out.tint = nTS > 0 ? nTS / 32767 : nTS / 32768;
        return out;
      }
      function write_BrtColor(color, o) {
        if (!o) o = new_buf(8);
        if (!color || color.auto) {
          o.write_shift(4, 0);
          o.write_shift(4, 0);
          return o;
        }
        if (color.index != null) {
          o.write_shift(1, 2);
          o.write_shift(1, color.index);
        } else if (color.theme != null) {
          o.write_shift(1, 6);
          o.write_shift(1, color.theme);
        } else {
          o.write_shift(1, 5);
          o.write_shift(1, 0);
        }
        var nTS = color.tint || 0;
        if (nTS > 0) nTS *= 32767;
        else if (nTS < 0) nTS *= 32768;
        o.write_shift(2, nTS);
        if (!color.rgb || color.theme != null) {
          o.write_shift(2, 0);
          o.write_shift(1, 0);
          o.write_shift(1, 0);
        } else {
          var rgb = color.rgb || "FFFFFF";
          if (typeof rgb == "number") rgb = ("000000" + rgb.toString(16)).slice(-6);
          o.write_shift(1, parseInt(rgb.slice(0, 2), 16));
          o.write_shift(1, parseInt(rgb.slice(2, 4), 16));
          o.write_shift(1, parseInt(rgb.slice(4, 6), 16));
          o.write_shift(1, 255);
        }
        return o;
      }
      function parse_FontFlags(data) {
        var d = data.read_shift(1);
        data.l++;
        var out = {
          fBold: d & 1,
          fItalic: d & 2,
          fUnderline: d & 4,
          fStrikeout: d & 8,
          fOutline: d & 16,
          fShadow: d & 32,
          fCondense: d & 64,
          fExtend: d & 128
        };
        return out;
      }
      function write_FontFlags(font, o) {
        if (!o) o = new_buf(2);
        var grbit = (font.italic ? 2 : 0) | (font.strike ? 8 : 0) | (font.outline ? 16 : 0) | (font.shadow ? 32 : 0) | (font.condense ? 64 : 0) | (font.extend ? 128 : 0);
        o.write_shift(1, grbit);
        o.write_shift(1, 0);
        return o;
      }
      function parse_ClipboardFormatOrString(o, w) {
        var ClipFmt = { 2: "BITMAP", 3: "METAFILEPICT", 8: "DIB", 14: "ENHMETAFILE" };
        var m = o.read_shift(4);
        switch (m) {
          case 0:
            return "";
          case 4294967295:
          case 4294967294:
            return ClipFmt[o.read_shift(4)] || "";
        }
        if (m > 400) throw new Error("Unsupported Clipboard: " + m.toString(16));
        o.l -= 4;
        return o.read_shift(0, w == 1 ? "lpstr" : "lpwstr");
      }
      function parse_ClipboardFormatOrAnsiString(o) {
        return parse_ClipboardFormatOrString(o, 1);
      }
      function parse_ClipboardFormatOrUnicodeString(o) {
        return parse_ClipboardFormatOrString(o, 2);
      }
      var VT_I2 = 2;
      var VT_I4 = 3;
      var VT_BOOL = 11;
      var VT_VARIANT = 12;
      var VT_UI4 = 19;
      var VT_LPSTR = 30;
      var VT_FILETIME = 64;
      var VT_BLOB = 65;
      var VT_CF = 71;
      var VT_VECTOR = 4096;
      var VT_VECTOR_VARIANT = 4108;
      var VT_VECTOR_LPSTR = 4126;
      var VT_STRING = 80;
      var VT_USTR = 81;
      var VT_CUSTOM = [VT_STRING, VT_USTR];
      var DocSummaryPIDDSI = {
        1: { n: "CodePage", t: VT_I2 },
        2: { n: "Category", t: VT_STRING },
        3: { n: "PresentationFormat", t: VT_STRING },
        4: { n: "ByteCount", t: VT_I4 },
        5: { n: "LineCount", t: VT_I4 },
        6: { n: "ParagraphCount", t: VT_I4 },
        7: { n: "SlideCount", t: VT_I4 },
        8: { n: "NoteCount", t: VT_I4 },
        9: { n: "HiddenCount", t: VT_I4 },
        10: { n: "MultimediaClipCount", t: VT_I4 },
        11: { n: "ScaleCrop", t: VT_BOOL },
        12: {
          n: "HeadingPairs",
          t: VT_VECTOR_VARIANT
          /* VT_VECTOR | VT_VARIANT */
        },
        13: {
          n: "TitlesOfParts",
          t: VT_VECTOR_LPSTR
          /* VT_VECTOR | VT_LPSTR */
        },
        14: { n: "Manager", t: VT_STRING },
        15: { n: "Company", t: VT_STRING },
        16: { n: "LinksUpToDate", t: VT_BOOL },
        17: { n: "CharacterCount", t: VT_I4 },
        19: { n: "SharedDoc", t: VT_BOOL },
        22: { n: "HyperlinksChanged", t: VT_BOOL },
        23: { n: "AppVersion", t: VT_I4, p: "version" },
        24: { n: "DigSig", t: VT_BLOB },
        26: { n: "ContentType", t: VT_STRING },
        27: { n: "ContentStatus", t: VT_STRING },
        28: { n: "Language", t: VT_STRING },
        29: { n: "Version", t: VT_STRING },
        255: {},
        /* [MS-OLEPS] 2.18 */
        2147483648: { n: "Locale", t: VT_UI4 },
        2147483651: { n: "Behavior", t: VT_UI4 },
        1919054434: {}
      };
      var SummaryPIDSI = {
        1: { n: "CodePage", t: VT_I2 },
        2: { n: "Title", t: VT_STRING },
        3: { n: "Subject", t: VT_STRING },
        4: { n: "Author", t: VT_STRING },
        5: { n: "Keywords", t: VT_STRING },
        6: { n: "Comments", t: VT_STRING },
        7: { n: "Template", t: VT_STRING },
        8: { n: "LastAuthor", t: VT_STRING },
        9: { n: "RevNumber", t: VT_STRING },
        10: { n: "EditTime", t: VT_FILETIME },
        11: { n: "LastPrinted", t: VT_FILETIME },
        12: { n: "CreatedDate", t: VT_FILETIME },
        13: { n: "ModifiedDate", t: VT_FILETIME },
        14: { n: "PageCount", t: VT_I4 },
        15: { n: "WordCount", t: VT_I4 },
        16: { n: "CharCount", t: VT_I4 },
        17: { n: "Thumbnail", t: VT_CF },
        18: { n: "Application", t: VT_STRING },
        19: { n: "DocSecurity", t: VT_I4 },
        255: {},
        /* [MS-OLEPS] 2.18 */
        2147483648: { n: "Locale", t: VT_UI4 },
        2147483651: { n: "Behavior", t: VT_UI4 },
        1919054434: {}
      };
      var CountryEnum = {
        1: "US",
        // United States
        2: "CA",
        // Canada
        3: "",
        // Latin America (except Brazil)
        7: "RU",
        // Russia
        20: "EG",
        // Egypt
        30: "GR",
        // Greece
        31: "NL",
        // Netherlands
        32: "BE",
        // Belgium
        33: "FR",
        // France
        34: "ES",
        // Spain
        36: "HU",
        // Hungary
        39: "IT",
        // Italy
        41: "CH",
        // Switzerland
        43: "AT",
        // Austria
        44: "GB",
        // United Kingdom
        45: "DK",
        // Denmark
        46: "SE",
        // Sweden
        47: "NO",
        // Norway
        48: "PL",
        // Poland
        49: "DE",
        // Germany
        52: "MX",
        // Mexico
        55: "BR",
        // Brazil
        61: "AU",
        // Australia
        64: "NZ",
        // New Zealand
        66: "TH",
        // Thailand
        81: "JP",
        // Japan
        82: "KR",
        // Korea
        84: "VN",
        // Viet Nam
        86: "CN",
        // China
        90: "TR",
        // Turkey
        105: "JS",
        // Ramastan
        213: "DZ",
        // Algeria
        216: "MA",
        // Morocco
        218: "LY",
        // Libya
        351: "PT",
        // Portugal
        354: "IS",
        // Iceland
        358: "FI",
        // Finland
        420: "CZ",
        // Czech Republic
        886: "TW",
        // Taiwan
        961: "LB",
        // Lebanon
        962: "JO",
        // Jordan
        963: "SY",
        // Syria
        964: "IQ",
        // Iraq
        965: "KW",
        // Kuwait
        966: "SA",
        // Saudi Arabia
        971: "AE",
        // United Arab Emirates
        972: "IL",
        // Israel
        974: "QA",
        // Qatar
        981: "IR",
        // Iran
        65535: "US"
        // United States
      };
      var XLSFillPattern = [
        null,
        "solid",
        "mediumGray",
        "darkGray",
        "lightGray",
        "darkHorizontal",
        "darkVertical",
        "darkDown",
        "darkUp",
        "darkGrid",
        "darkTrellis",
        "lightHorizontal",
        "lightVertical",
        "lightDown",
        "lightUp",
        "lightGrid",
        "lightTrellis",
        "gray125",
        "gray0625"
      ];
      function rgbify(arr) {
        return arr.map(function(x) {
          return [x >> 16 & 255, x >> 8 & 255, x & 255];
        });
      }
      var _XLSIcv = rgbify([
        /* Color Constants */
        0,
        16777215,
        16711680,
        65280,
        255,
        16776960,
        16711935,
        65535,
        /* Overridable Defaults */
        0,
        16777215,
        16711680,
        65280,
        255,
        16776960,
        16711935,
        65535,
        8388608,
        32768,
        128,
        8421376,
        8388736,
        32896,
        12632256,
        8421504,
        10066431,
        10040166,
        16777164,
        13434879,
        6684774,
        16744576,
        26316,
        13421823,
        128,
        16711935,
        16776960,
        65535,
        8388736,
        8388608,
        32896,
        255,
        52479,
        13434879,
        13434828,
        16777113,
        10079487,
        16751052,
        13408767,
        16764057,
        3368703,
        3394764,
        10079232,
        16763904,
        16750848,
        16737792,
        6710937,
        9868950,
        13158,
        3381606,
        13056,
        3355392,
        10040064,
        10040166,
        3355545,
        3355443,
        /* Other entries to appease BIFF8/12 */
        16777215,
        /* 0x40 icvForeground ?? */
        0,
        /* 0x41 icvBackground ?? */
        0,
        /* 0x42 icvFrame ?? */
        0,
        /* 0x43 icv3D ?? */
        0,
        /* 0x44 icv3DText ?? */
        0,
        /* 0x45 icv3DHilite ?? */
        0,
        /* 0x46 icv3DShadow ?? */
        0,
        /* 0x47 icvHilite ?? */
        0,
        /* 0x48 icvCtlText ?? */
        0,
        /* 0x49 icvCtlScrl ?? */
        0,
        /* 0x4A icvCtlInv ?? */
        0,
        /* 0x4B icvCtlBody ?? */
        0,
        /* 0x4C icvCtlFrame ?? */
        0,
        /* 0x4D icvCtlFore ?? */
        0,
        /* 0x4E icvCtlBack ?? */
        0,
        /* 0x4F icvCtlNeutral */
        0,
        /* 0x50 icvInfoBk ?? */
        0
        /* 0x51 icvInfoText ?? */
      ]);
      var XLSIcv = dup(_XLSIcv);
      var BErr = {
        0: "#NULL!",
        7: "#DIV/0!",
        15: "#VALUE!",
        23: "#REF!",
        29: "#NAME?",
        36: "#NUM!",
        42: "#N/A",
        43: "#GETTING_DATA",
        255: "#WTF?"
      };
      var RBErr = {
        "#NULL!": 0,
        "#DIV/0!": 7,
        "#VALUE!": 15,
        "#REF!": 23,
        "#NAME?": 29,
        "#NUM!": 36,
        "#N/A": 42,
        "#GETTING_DATA": 43,
        "#WTF?": 255
      };
      var ct2type = {
        /* Workbook */
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": "workbooks",
        "application/vnd.ms-excel.sheet.macroEnabled.main+xml": "workbooks",
        "application/vnd.ms-excel.sheet.binary.macroEnabled.main": "workbooks",
        "application/vnd.ms-excel.addin.macroEnabled.main+xml": "workbooks",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": "workbooks",
        /* Worksheet */
        "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": "sheets",
        "application/vnd.ms-excel.worksheet": "sheets",
        "application/vnd.ms-excel.binIndexWs": "TODO",
        /* Binary Index */
        /* Chartsheet */
        "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": "charts",
        "application/vnd.ms-excel.chartsheet": "charts",
        /* Macrosheet */
        "application/vnd.ms-excel.macrosheet+xml": "macros",
        "application/vnd.ms-excel.macrosheet": "macros",
        "application/vnd.ms-excel.intlmacrosheet": "TODO",
        "application/vnd.ms-excel.binIndexMs": "TODO",
        /* Binary Index */
        /* Dialogsheet */
        "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": "dialogs",
        "application/vnd.ms-excel.dialogsheet": "dialogs",
        /* Shared Strings */
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml": "strs",
        "application/vnd.ms-excel.sharedStrings": "strs",
        /* Styles */
        "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": "styles",
        "application/vnd.ms-excel.styles": "styles",
        /* File Properties */
        "application/vnd.openxmlformats-package.core-properties+xml": "coreprops",
        "application/vnd.openxmlformats-officedocument.custom-properties+xml": "custprops",
        "application/vnd.openxmlformats-officedocument.extended-properties+xml": "extprops",
        /* Custom Data Properties */
        "application/vnd.openxmlformats-officedocument.customXmlProperties+xml": "TODO",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty": "TODO",
        /* Comments */
        "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": "comments",
        "application/vnd.ms-excel.comments": "comments",
        "application/vnd.ms-excel.threadedcomments+xml": "threadedcomments",
        "application/vnd.ms-excel.person+xml": "people",
        /* Metadata (Stock/Geography and Dynamic Array) */
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml": "metadata",
        "application/vnd.ms-excel.sheetMetadata": "metadata",
        /* PivotTable */
        "application/vnd.ms-excel.pivotTable": "TODO",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml": "TODO",
        /* Chart Objects */
        "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": "TODO",
        /* Chart Colors */
        "application/vnd.ms-office.chartcolorstyle+xml": "TODO",
        /* Chart Style */
        "application/vnd.ms-office.chartstyle+xml": "TODO",
        /* Chart Advanced */
        "application/vnd.ms-office.chartex+xml": "TODO",
        /* Calculation Chain */
        "application/vnd.ms-excel.calcChain": "calcchains",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml": "calcchains",
        /* Printer Settings */
        "application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings": "TODO",
        /* ActiveX */
        "application/vnd.ms-office.activeX": "TODO",
        "application/vnd.ms-office.activeX+xml": "TODO",
        /* Custom Toolbars */
        "application/vnd.ms-excel.attachedToolbars": "TODO",
        /* External Data Connections */
        "application/vnd.ms-excel.connections": "TODO",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": "TODO",
        /* External Links */
        "application/vnd.ms-excel.externalLink": "links",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml": "links",
        /* PivotCache */
        "application/vnd.ms-excel.pivotCacheDefinition": "TODO",
        "application/vnd.ms-excel.pivotCacheRecords": "TODO",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml": "TODO",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml": "TODO",
        /* Query Table */
        "application/vnd.ms-excel.queryTable": "TODO",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml": "TODO",
        /* Shared Workbook */
        "application/vnd.ms-excel.userNames": "TODO",
        "application/vnd.ms-excel.revisionHeaders": "TODO",
        "application/vnd.ms-excel.revisionLog": "TODO",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml": "TODO",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml": "TODO",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml": "TODO",
        /* Single Cell Table */
        "application/vnd.ms-excel.tableSingleCells": "TODO",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml": "TODO",
        /* Slicer */
        "application/vnd.ms-excel.slicer": "TODO",
        "application/vnd.ms-excel.slicerCache": "TODO",
        "application/vnd.ms-excel.slicer+xml": "TODO",
        "application/vnd.ms-excel.slicerCache+xml": "TODO",
        /* Sort Map */
        "application/vnd.ms-excel.wsSortMap": "TODO",
        /* Table */
        "application/vnd.ms-excel.table": "TODO",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": "TODO",
        /* Themes */
        "application/vnd.openxmlformats-officedocument.theme+xml": "themes",
        /* Theme Override */
        "application/vnd.openxmlformats-officedocument.themeOverride+xml": "TODO",
        /* Timeline */
        "application/vnd.ms-excel.Timeline+xml": "TODO",
        /* verify */
        "application/vnd.ms-excel.TimelineCache+xml": "TODO",
        /* verify */
        /* VBA */
        "application/vnd.ms-office.vbaProject": "vba",
        "application/vnd.ms-office.vbaProjectSignature": "TODO",
        /* Volatile Dependencies */
        "application/vnd.ms-office.volatileDependencies": "TODO",
        "application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml": "TODO",
        /* Control Properties */
        "application/vnd.ms-excel.controlproperties+xml": "TODO",
        /* Data Model */
        "application/vnd.openxmlformats-officedocument.model+data": "TODO",
        /* Survey */
        "application/vnd.ms-excel.Survey+xml": "TODO",
        /* Drawing */
        "application/vnd.openxmlformats-officedocument.drawing+xml": "drawings",
        "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": "TODO",
        "application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml": "TODO",
        "application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml": "TODO",
        "application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml": "TODO",
        "application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml": "TODO",
        /* VML */
        "application/vnd.openxmlformats-officedocument.vmlDrawing": "TODO",
        "application/vnd.openxmlformats-package.relationships+xml": "rels",
        "application/vnd.openxmlformats-officedocument.oleObject": "TODO",
        /* Image */
        "image/png": "TODO",
        "sheet": "js"
      };
      var CT_LIST = {
        workbooks: {
          xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",
          xlsm: "application/vnd.ms-excel.sheet.macroEnabled.main+xml",
          xlsb: "application/vnd.ms-excel.sheet.binary.macroEnabled.main",
          xlam: "application/vnd.ms-excel.addin.macroEnabled.main+xml",
          xltx: "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"
        },
        strs: {
          /* Shared Strings */
          xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",
          xlsb: "application/vnd.ms-excel.sharedStrings"
        },
        comments: {
          /* Comments */
          xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml",
          xlsb: "application/vnd.ms-excel.comments"
        },
        sheets: {
          /* Worksheet */
          xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",
          xlsb: "application/vnd.ms-excel.worksheet"
        },
        charts: {
          /* Chartsheet */
          xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml",
          xlsb: "application/vnd.ms-excel.chartsheet"
        },
        dialogs: {
          /* Dialogsheet */
          xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml",
          xlsb: "application/vnd.ms-excel.dialogsheet"
        },
        macros: {
          /* Macrosheet (Excel 4.0 Macros) */
          xlsx: "application/vnd.ms-excel.macrosheet+xml",
          xlsb: "application/vnd.ms-excel.macrosheet"
        },
        metadata: {
          /* Metadata (Stock/Geography and Dynamic Array) */
          xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml",
          xlsb: "application/vnd.ms-excel.sheetMetadata"
        },
        styles: {
          /* Styles */
          xlsx: "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",
          xlsb: "application/vnd.ms-excel.styles"
        }
      };
      function new_ct() {
        return {
          workbooks: [],
          sheets: [],
          charts: [],
          dialogs: [],
          macros: [],
          rels: [],
          strs: [],
          comments: [],
          threadedcomments: [],
          links: [],
          coreprops: [],
          extprops: [],
          custprops: [],
          themes: [],
          styles: [],
          calcchains: [],
          vba: [],
          drawings: [],
          metadata: [],
          people: [],
          TODO: [],
          xmlns: ""
        };
      }
      function parse_ct(data) {
        var ct = new_ct();
        if (!data || !data.match) return ct;
        var ctext = {};
        (data.match(tagregex) || []).forEach(function(x) {
          var y = parsexmltag(x);
          switch (y[0].replace(nsregex, "<")) {
            case "<?xml":
              break;
            case "<Types":
              ct.xmlns = y["xmlns" + (y[0].match(/<(\w+):/) || ["", ""])[1]];
              break;
            case "<Default":
              ctext[y.Extension] = y.ContentType;
              break;
            case "<Override":
              if (ct[ct2type[y.ContentType]] !== void 0) ct[ct2type[y.ContentType]].push(y.PartName);
              break;
          }
        });
        if (ct.xmlns !== XMLNS.CT) throw new Error("Unknown Namespace: " + ct.xmlns);
        ct.calcchain = ct.calcchains.length > 0 ? ct.calcchains[0] : "";
        ct.sst = ct.strs.length > 0 ? ct.strs[0] : "";
        ct.style = ct.styles.length > 0 ? ct.styles[0] : "";
        ct.defaults = ctext;
        delete ct.calcchains;
        return ct;
      }
      function write_ct(ct, opts) {
        var type2ct = evert_arr(ct2type);
        var o = [], v;
        o[o.length] = XML_HEADER;
        o[o.length] = writextag("Types", null, {
          "xmlns": XMLNS.CT,
          "xmlns:xsd": XMLNS.xsd,
          "xmlns:xsi": XMLNS.xsi
        });
        o = o.concat([
          ["xml", "application/xml"],
          ["bin", "application/vnd.ms-excel.sheet.binary.macroEnabled.main"],
          ["vml", "application/vnd.openxmlformats-officedocument.vmlDrawing"],
          ["data", "application/vnd.openxmlformats-officedocument.model+data"],
          /* from test files */
          ["bmp", "image/bmp"],
          ["png", "image/png"],
          ["gif", "image/gif"],
          ["emf", "image/x-emf"],
          ["wmf", "image/x-wmf"],
          ["jpg", "image/jpeg"],
          ["jpeg", "image/jpeg"],
          ["tif", "image/tiff"],
          ["tiff", "image/tiff"],
          ["pdf", "application/pdf"],
          ["rels", "application/vnd.openxmlformats-package.relationships+xml"]
        ].map(function(x) {
          return writextag("Default", null, { "Extension": x[0], "ContentType": x[1] });
        }));
        var f1 = function(w) {
          if (ct[w] && ct[w].length > 0) {
            v = ct[w][0];
            o[o.length] = writextag("Override", null, {
              "PartName": (v[0] == "/" ? "" : "/") + v,
              "ContentType": CT_LIST[w][opts.bookType] || CT_LIST[w]["xlsx"]
            });
          }
        };
        var f2 = function(w) {
          (ct[w] || []).forEach(function(v2) {
            o[o.length] = writextag("Override", null, {
              "PartName": (v2[0] == "/" ? "" : "/") + v2,
              "ContentType": CT_LIST[w][opts.bookType] || CT_LIST[w]["xlsx"]
            });
          });
        };
        var f3 = function(t) {
          (ct[t] || []).forEach(function(v2) {
            o[o.length] = writextag("Override", null, {
              "PartName": (v2[0] == "/" ? "" : "/") + v2,
              "ContentType": type2ct[t][0]
            });
          });
        };
        f1("workbooks");
        f2("sheets");
        f2("charts");
        f3("themes");
        ["strs", "styles"].forEach(f1);
        ["coreprops", "extprops", "custprops"].forEach(f3);
        f3("vba");
        f3("comments");
        f3("threadedcomments");
        f3("drawings");
        f2("metadata");
        f3("people");
        if (o.length > 2) {
          o[o.length] = "</Types>";
          o[1] = o[1].replace("/>", ">");
        }
        return o.join("");
      }
      var RELS = {
        WB: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",
        SHEET: "http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument",
        HLINK: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",
        VML: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",
        XPATH: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath",
        XMISS: "http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing",
        XLINK: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink",
        CXML: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml",
        CXMLP: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps",
        CMNT: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",
        CORE_PROPS: "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",
        EXT_PROPS: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",
        CUST_PROPS: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties",
        SST: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",
        STY: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",
        THEME: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",
        CHART: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart",
        CHARTEX: "http://schemas.microsoft.com/office/2014/relationships/chartEx",
        CS: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet",
        WS: [
          "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet",
          "http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet"
        ],
        DS: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet",
        MS: "http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet",
        IMG: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",
        DRAW: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",
        XLMETA: "http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata",
        TCMNT: "http://schemas.microsoft.com/office/2017/10/relationships/threadedComment",
        PEOPLE: "http://schemas.microsoft.com/office/2017/10/relationships/person",
        VBA: "http://schemas.microsoft.com/office/2006/relationships/vbaProject"
      };
      function get_rels_path(file) {
        var n = file.lastIndexOf("/");
        return file.slice(0, n + 1) + "_rels/" + file.slice(n + 1) + ".rels";
      }
      function parse_rels(data, currentFilePath) {
        var rels = { "!id": {} };
        if (!data) return rels;
        if (currentFilePath.charAt(0) !== "/") {
          currentFilePath = "/" + currentFilePath;
        }
        var hash = {};
        (data.match(tagregex) || []).forEach(function(x) {
          var y = parsexmltag(x);
          if (y[0] === "<Relationship") {
            var rel = {};
            rel.Type = y.Type;
            rel.Target = y.Target;
            rel.Id = y.Id;
            if (y.TargetMode) rel.TargetMode = y.TargetMode;
            var canonictarget = y.TargetMode === "External" ? y.Target : resolve_path(y.Target, currentFilePath);
            rels[canonictarget] = rel;
            hash[y.Id] = rel;
          }
        });
        rels["!id"] = hash;
        return rels;
      }
      function write_rels(rels) {
        var o = [XML_HEADER, writextag("Relationships", null, {
          //'xmlns:ns0': XMLNS.RELS,
          "xmlns": XMLNS.RELS
        })];
        keys(rels["!id"]).forEach(function(rid) {
          o[o.length] = writextag("Relationship", null, rels["!id"][rid]);
        });
        if (o.length > 2) {
          o[o.length] = "</Relationships>";
          o[1] = o[1].replace("/>", ">");
        }
        return o.join("");
      }
      function add_rels(rels, rId, f, type, relobj, targetmode) {
        if (!relobj) relobj = {};
        if (!rels["!id"]) rels["!id"] = {};
        if (!rels["!idx"]) rels["!idx"] = 1;
        if (rId < 0) for (rId = rels["!idx"]; rels["!id"]["rId" + rId]; ++rId) {
        }
        rels["!idx"] = rId + 1;
        relobj.Id = "rId" + rId;
        relobj.Type = type;
        relobj.Target = f;
        if (targetmode) relobj.TargetMode = targetmode;
        else if ([RELS.HLINK, RELS.XPATH, RELS.XMISS].indexOf(relobj.Type) > -1) relobj.TargetMode = "External";
        if (rels["!id"][relobj.Id]) throw new Error("Cannot rewrite rId " + rId);
        rels["!id"][relobj.Id] = relobj;
        rels[("/" + relobj.Target).replace("//", "/")] = relobj;
        return rId;
      }
      var CT_ODS = "application/vnd.oasis.opendocument.spreadsheet";
      function parse_manifest(d, opts) {
        var str = xlml_normalize(d);
        var Rn;
        var FEtag;
        while (Rn = xlmlregex.exec(str)) switch (Rn[3]) {
          case "manifest":
            break;
          case "file-entry":
            FEtag = parsexmltag(Rn[0], false);
            if (FEtag.path == "/" && FEtag.type !== CT_ODS) throw new Error("This OpenDocument is not a spreadsheet");
            break;
          case "encryption-data":
          case "algorithm":
          case "start-key-generation":
          case "key-derivation":
            throw new Error("Unsupported ODS Encryption");
          default:
            if (opts && opts.WTF) throw Rn;
        }
      }
      function write_manifest(manifest) {
        var o = [XML_HEADER];
        o.push('<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2">\n');
        o.push('  <manifest:file-entry manifest:full-path="/" manifest:version="1.2" manifest:media-type="application/vnd.oasis.opendocument.spreadsheet"/>\n');
        for (var i = 0; i < manifest.length; ++i) o.push('  <manifest:file-entry manifest:full-path="' + manifest[i][0] + '" manifest:media-type="' + manifest[i][1] + '"/>\n');
        o.push("</manifest:manifest>");
        return o.join("");
      }
      function write_rdf_type(file, res, tag) {
        return [
          '  <rdf:Description rdf:about="' + file + '">\n',
          '    <rdf:type rdf:resource="http://docs.oasis-open.org/ns/office/1.2/meta/' + (tag || "odf") + "#" + res + '"/>\n',
          "  </rdf:Description>\n"
        ].join("");
      }
      function write_rdf_has(base, file) {
        return [
          '  <rdf:Description rdf:about="' + base + '">\n',
          '    <ns0:hasPart xmlns:ns0="http://docs.oasis-open.org/ns/office/1.2/meta/pkg#" rdf:resource="' + file + '"/>\n',
          "  </rdf:Description>\n"
        ].join("");
      }
      function write_rdf(rdf) {
        var o = [XML_HEADER];
        o.push('<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\n');
        for (var i = 0; i != rdf.length; ++i) {
          o.push(write_rdf_type(rdf[i][0], rdf[i][1]));
          o.push(write_rdf_has("", rdf[i][0]));
        }
        o.push(write_rdf_type("", "Document", "pkg"));
        o.push("</rdf:RDF>");
        return o.join("");
      }
      function write_meta_ods() {
        return '<office:document-meta xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xlink="http://www.w3.org/1999/xlink" office:version="1.2"><office:meta><meta:generator>SheetJS ' + XLSX2.version + "</meta:generator></office:meta></office:document-meta>";
      }
      var CORE_PROPS = [
        ["cp:category", "Category"],
        ["cp:contentStatus", "ContentStatus"],
        ["cp:keywords", "Keywords"],
        ["cp:lastModifiedBy", "LastAuthor"],
        ["cp:lastPrinted", "LastPrinted"],
        ["cp:revision", "RevNumber"],
        ["cp:version", "Version"],
        ["dc:creator", "Author"],
        ["dc:description", "Comments"],
        ["dc:identifier", "Identifier"],
        ["dc:language", "Language"],
        ["dc:subject", "Subject"],
        ["dc:title", "Title"],
        ["dcterms:created", "CreatedDate", "date"],
        ["dcterms:modified", "ModifiedDate", "date"]
      ];
      var CORE_PROPS_REGEX = function() {
        var r = new Array(CORE_PROPS.length);
        for (var i = 0; i < CORE_PROPS.length; ++i) {
          var f = CORE_PROPS[i];
          var g = "(?:" + f[0].slice(0, f[0].indexOf(":")) + ":)" + f[0].slice(f[0].indexOf(":") + 1);
          r[i] = new RegExp("<" + g + "[^>]*>([\\s\\S]*?)</" + g + ">");
        }
        return r;
      }();
      function parse_core_props(data) {
        var p = {};
        data = utf8read(data);
        for (var i = 0; i < CORE_PROPS.length; ++i) {
          var f = CORE_PROPS[i], cur = data.match(CORE_PROPS_REGEX[i]);
          if (cur != null && cur.length > 0) p[f[1]] = unescapexml(cur[1]);
          if (f[2] === "date" && p[f[1]]) p[f[1]] = parseDate(p[f[1]]);
        }
        return p;
      }
      function cp_doit(f, g, h, o, p) {
        if (p[f] != null || g == null || g === "") return;
        p[f] = g;
        g = escapexml(g);
        o[o.length] = h ? writextag(f, g, h) : writetag(f, g);
      }
      function write_core_props(cp, _opts) {
        var opts = _opts || {};
        var o = [XML_HEADER, writextag("cp:coreProperties", null, {
          //'xmlns': XMLNS.CORE_PROPS,
          "xmlns:cp": XMLNS.CORE_PROPS,
          "xmlns:dc": XMLNS.dc,
          "xmlns:dcterms": XMLNS.dcterms,
          "xmlns:dcmitype": XMLNS.dcmitype,
          "xmlns:xsi": XMLNS.xsi
        })], p = {};
        if (!cp && !opts.Props) return o.join("");
        if (cp) {
          if (cp.CreatedDate != null) cp_doit("dcterms:created", typeof cp.CreatedDate === "string" ? cp.CreatedDate : write_w3cdtf(cp.CreatedDate, opts.WTF), { "xsi:type": "dcterms:W3CDTF" }, o, p);
          if (cp.ModifiedDate != null) cp_doit("dcterms:modified", typeof cp.ModifiedDate === "string" ? cp.ModifiedDate : write_w3cdtf(cp.ModifiedDate, opts.WTF), { "xsi:type": "dcterms:W3CDTF" }, o, p);
        }
        for (var i = 0; i != CORE_PROPS.length; ++i) {
          var f = CORE_PROPS[i];
          var v = opts.Props && opts.Props[f[1]] != null ? opts.Props[f[1]] : cp ? cp[f[1]] : null;
          if (v === true) v = "1";
          else if (v === false) v = "0";
          else if (typeof v == "number") v = String(v);
          if (v != null) cp_doit(f[0], v, null, o, p);
        }
        if (o.length > 2) {
          o[o.length] = "</cp:coreProperties>";
          o[1] = o[1].replace("/>", ">");
        }
        return o.join("");
      }
      var EXT_PROPS = [
        ["Application", "Application", "string"],
        ["AppVersion", "AppVersion", "string"],
        ["Company", "Company", "string"],
        ["DocSecurity", "DocSecurity", "string"],
        ["Manager", "Manager", "string"],
        ["HyperlinksChanged", "HyperlinksChanged", "bool"],
        ["SharedDoc", "SharedDoc", "bool"],
        ["LinksUpToDate", "LinksUpToDate", "bool"],
        ["ScaleCrop", "ScaleCrop", "bool"],
        ["HeadingPairs", "HeadingPairs", "raw"],
        ["TitlesOfParts", "TitlesOfParts", "raw"]
      ];
      var PseudoPropsPairs = [
        "Worksheets",
        "SheetNames",
        "NamedRanges",
        "DefinedNames",
        "Chartsheets",
        "ChartNames"
      ];
      function load_props_pairs(HP, TOP, props, opts) {
        var v = [];
        if (typeof HP == "string") v = parseVector(HP, opts);
        else for (var j = 0; j < HP.length; ++j) v = v.concat(HP[j].map(function(hp) {
          return { v: hp };
        }));
        var parts = typeof TOP == "string" ? parseVector(TOP, opts).map(function(x) {
          return x.v;
        }) : TOP;
        var idx = 0, len = 0;
        if (parts.length > 0) for (var i = 0; i !== v.length; i += 2) {
          len = +v[i + 1].v;
          switch (v[i].v) {
            case "Worksheets":
            case "\u5DE5\u4F5C\u8868":
            case "\u041B\u0438\u0441\u0442\u044B":
            case "\u0623\u0648\u0631\u0627\u0642 \u0627\u0644\u0639\u0645\u0644":
            case "\u30EF\u30FC\u30AF\u30B7\u30FC\u30C8":
            case "\u05D2\u05DC\u05D9\u05D5\u05E0\u05D5\u05EA \u05E2\u05D1\u05D5\u05D3\u05D4":
            case "Arbeitsbl\xE4tter":
            case "\xC7al\u0131\u015Fma Sayfalar\u0131":
            case "Feuilles de calcul":
            case "Fogli di lavoro":
            case "Folhas de c\xE1lculo":
            case "Planilhas":
            case "Regneark":
            case "Hojas de c\xE1lculo":
            case "Werkbladen":
              props.Worksheets = len;
              props.SheetNames = parts.slice(idx, idx + len);
              break;
            case "Named Ranges":
            case "Rangos con nombre":
            case "\u540D\u524D\u4ED8\u304D\u4E00\u89A7":
            case "Benannte Bereiche":
            case "Navngivne omr\xE5der":
              props.NamedRanges = len;
              props.DefinedNames = parts.slice(idx, idx + len);
              break;
            case "Charts":
            case "Diagramme":
              props.Chartsheets = len;
              props.ChartNames = parts.slice(idx, idx + len);
              break;
          }
          idx += len;
        }
      }
      function parse_ext_props(data, p, opts) {
        var q = {};
        if (!p) p = {};
        data = utf8read(data);
        EXT_PROPS.forEach(function(f) {
          var xml = (data.match(matchtag(f[0])) || [])[1];
          switch (f[2]) {
            case "string":
              if (xml) p[f[1]] = unescapexml(xml);
              break;
            case "bool":
              p[f[1]] = xml === "true";
              break;
            case "raw":
              var cur = data.match(new RegExp("<" + f[0] + "[^>]*>([\\s\\S]*?)</" + f[0] + ">"));
              if (cur && cur.length > 0) q[f[1]] = cur[1];
              break;
          }
        });
        if (q.HeadingPairs && q.TitlesOfParts) load_props_pairs(q.HeadingPairs, q.TitlesOfParts, p, opts);
        return p;
      }
      function write_ext_props(cp) {
        var o = [], W = writextag;
        if (!cp) cp = {};
        cp.Application = "SheetJS";
        o[o.length] = XML_HEADER;
        o[o.length] = writextag("Properties", null, {
          "xmlns": XMLNS.EXT_PROPS,
          "xmlns:vt": XMLNS.vt
        });
        EXT_PROPS.forEach(function(f) {
          if (cp[f[1]] === void 0) return;
          var v;
          switch (f[2]) {
            case "string":
              v = escapexml(String(cp[f[1]]));
              break;
            case "bool":
              v = cp[f[1]] ? "true" : "false";
              break;
          }
          if (v !== void 0) o[o.length] = W(f[0], v);
        });
        o[o.length] = W("HeadingPairs", W("vt:vector", W("vt:variant", "<vt:lpstr>Worksheets</vt:lpstr>") + W("vt:variant", W("vt:i4", String(cp.Worksheets))), { size: 2, baseType: "variant" }));
        o[o.length] = W("TitlesOfParts", W("vt:vector", cp.SheetNames.map(function(s) {
          return "<vt:lpstr>" + escapexml(s) + "</vt:lpstr>";
        }).join(""), { size: cp.Worksheets, baseType: "lpstr" }));
        if (o.length > 2) {
          o[o.length] = "</Properties>";
          o[1] = o[1].replace("/>", ">");
        }
        return o.join("");
      }
      var custregex = /<[^>]+>[^<]*/g;
      function parse_cust_props(data, opts) {
        var p = {}, name = "";
        var m = data.match(custregex);
        if (m) for (var i = 0; i != m.length; ++i) {
          var x = m[i], y = parsexmltag(x);
          switch (y[0]) {
            case "<?xml":
              break;
            case "<Properties":
              break;
            case "<property":
              name = unescapexml(y.name);
              break;
            case "</property>":
              name = null;
              break;
            default:
              if (x.indexOf("<vt:") === 0) {
                var toks = x.split(">");
                var type = toks[0].slice(4), text = toks[1];
                switch (type) {
                  case "lpstr":
                  case "bstr":
                  case "lpwstr":
                    p[name] = unescapexml(text);
                    break;
                  case "bool":
                    p[name] = parsexmlbool(text);
                    break;
                  case "i1":
                  case "i2":
                  case "i4":
                  case "i8":
                  case "int":
                  case "uint":
                    p[name] = parseInt(text, 10);
                    break;
                  case "r4":
                  case "r8":
                  case "decimal":
                    p[name] = parseFloat(text);
                    break;
                  case "filetime":
                  case "date":
                    p[name] = parseDate(text);
                    break;
                  case "cy":
                  case "error":
                    p[name] = unescapexml(text);
                    break;
                  default:
                    if (type.slice(-1) == "/") break;
                    if (opts.WTF && typeof console !== "undefined") console.warn("Unexpected", x, type, toks);
                }
              } else if (x.slice(0, 2) === "</") {
              } else if (opts.WTF) throw new Error(x);
          }
        }
        return p;
      }
      function write_cust_props(cp) {
        var o = [XML_HEADER, writextag("Properties", null, {
          "xmlns": XMLNS.CUST_PROPS,
          "xmlns:vt": XMLNS.vt
        })];
        if (!cp) return o.join("");
        var pid = 1;
        keys(cp).forEach(function custprop(k) {
          ++pid;
          o[o.length] = writextag("property", write_vt(cp[k], true), {
            "fmtid": "{D5CDD505-2E9C-101B-9397-08002B2CF9AE}",
            "pid": pid,
            "name": escapexml(k)
          });
        });
        if (o.length > 2) {
          o[o.length] = "</Properties>";
          o[1] = o[1].replace("/>", ">");
        }
        return o.join("");
      }
      var XLMLDocPropsMap = {
        Title: "Title",
        Subject: "Subject",
        Author: "Author",
        Keywords: "Keywords",
        Comments: "Description",
        LastAuthor: "LastAuthor",
        RevNumber: "Revision",
        Application: "AppName",
        /* TotalTime: 'TotalTime', */
        LastPrinted: "LastPrinted",
        CreatedDate: "Created",
        ModifiedDate: "LastSaved",
        /* Pages */
        /* Words */
        /* Characters */
        Category: "Category",
        /* PresentationFormat */
        Manager: "Manager",
        Company: "Company",
        /* Guid */
        /* HyperlinkBase */
        /* Bytes */
        /* Lines */
        /* Paragraphs */
        /* CharactersWithSpaces */
        AppVersion: "Version",
        ContentStatus: "ContentStatus",
        /* NOTE: missing from schema */
        Identifier: "Identifier",
        /* NOTE: missing from schema */
        Language: "Language"
        /* NOTE: missing from schema */
      };
      var evert_XLMLDPM;
      function xlml_set_prop(Props, tag, val) {
        if (!evert_XLMLDPM) evert_XLMLDPM = evert(XLMLDocPropsMap);
        tag = evert_XLMLDPM[tag] || tag;
        Props[tag] = val;
      }
      function xlml_write_docprops(Props, opts) {
        var o = [];
        keys(XLMLDocPropsMap).map(function(m) {
          for (var i = 0; i < CORE_PROPS.length; ++i) if (CORE_PROPS[i][1] == m) return CORE_PROPS[i];
          for (i = 0; i < EXT_PROPS.length; ++i) if (EXT_PROPS[i][1] == m) return EXT_PROPS[i];
          throw m;
        }).forEach(function(p) {
          if (Props[p[1]] == null) return;
          var m = opts && opts.Props && opts.Props[p[1]] != null ? opts.Props[p[1]] : Props[p[1]];
          switch (p[2]) {
            case "date":
              m = new Date(m).toISOString().replace(/\.\d*Z/, "Z");
              break;
          }
          if (typeof m == "number") m = String(m);
          else if (m === true || m === false) {
            m = m ? "1" : "0";
          } else if (m instanceof Date) m = new Date(m).toISOString().replace(/\.\d*Z/, "");
          o.push(writetag(XLMLDocPropsMap[p[1]] || p[1], m));
        });
        return writextag("DocumentProperties", o.join(""), { xmlns: XLMLNS.o });
      }
      function xlml_write_custprops(Props, Custprops) {
        var BLACKLIST = ["Worksheets", "SheetNames"];
        var T = "CustomDocumentProperties";
        var o = [];
        if (Props) keys(Props).forEach(function(k) {
          if (!Object.prototype.hasOwnProperty.call(Props, k)) return;
          for (var i = 0; i < CORE_PROPS.length; ++i) if (k == CORE_PROPS[i][1]) return;
          for (i = 0; i < EXT_PROPS.length; ++i) if (k == EXT_PROPS[i][1]) return;
          for (i = 0; i < BLACKLIST.length; ++i) if (k == BLACKLIST[i]) return;
          var m = Props[k];
          var t = "string";
          if (typeof m == "number") {
            t = "float";
            m = String(m);
          } else if (m === true || m === false) {
            t = "boolean";
            m = m ? "1" : "0";
          } else m = String(m);
          o.push(writextag(escapexmltag(k), m, { "dt:dt": t }));
        });
        if (Custprops) keys(Custprops).forEach(function(k) {
          if (!Object.prototype.hasOwnProperty.call(Custprops, k)) return;
          if (Props && Object.prototype.hasOwnProperty.call(Props, k)) return;
          var m = Custprops[k];
          var t = "string";
          if (typeof m == "number") {
            t = "float";
            m = String(m);
          } else if (m === true || m === false) {
            t = "boolean";
            m = m ? "1" : "0";
          } else if (m instanceof Date) {
            t = "dateTime.tz";
            m = m.toISOString();
          } else m = String(m);
          o.push(writextag(escapexmltag(k), m, { "dt:dt": t }));
        });
        return "<" + T + ' xmlns="' + XLMLNS.o + '">' + o.join("") + "</" + T + ">";
      }
      function parse_FILETIME(blob) {
        var dwLowDateTime = blob.read_shift(4), dwHighDateTime = blob.read_shift(4);
        return new Date((dwHighDateTime / 1e7 * Math.pow(2, 32) + dwLowDateTime / 1e7 - 11644473600) * 1e3).toISOString().replace(/\.000/, "");
      }
      function write_FILETIME(time) {
        var date = typeof time == "string" ? new Date(Date.parse(time)) : time;
        var t = date.getTime() / 1e3 + 11644473600;
        var l = t % Math.pow(2, 32), h = (t - l) / Math.pow(2, 32);
        l *= 1e7;
        h *= 1e7;
        var w = l / Math.pow(2, 32) | 0;
        if (w > 0) {
          l = l % Math.pow(2, 32);
          h += w;
        }
        var o = new_buf(8);
        o.write_shift(4, l);
        o.write_shift(4, h);
        return o;
      }
      function parse_lpstr(blob, type, pad) {
        var start = blob.l;
        var str = blob.read_shift(0, "lpstr-cp");
        if (pad) while (blob.l - start & 3) ++blob.l;
        return str;
      }
      function parse_lpwstr(blob, type, pad) {
        var str = blob.read_shift(0, "lpwstr");
        if (pad) blob.l += 4 - (str.length + 1 & 3) & 3;
        return str;
      }
      function parse_VtStringBase(blob, stringType, pad) {
        if (stringType === 31) return parse_lpwstr(blob);
        return parse_lpstr(blob, stringType, pad);
      }
      function parse_VtString(blob, t, pad) {
        return parse_VtStringBase(blob, t, pad === false ? 0 : 4);
      }
      function parse_VtUnalignedString(blob, t) {
        if (!t) throw new Error("VtUnalignedString must have positive length");
        return parse_VtStringBase(blob, t, 0);
      }
      function parse_VtVecLpwstrValue(blob) {
        var length = blob.read_shift(4);
        var ret = [];
        for (var i = 0; i != length; ++i) {
          var start = blob.l;
          ret[i] = blob.read_shift(0, "lpwstr").replace(chr0, "");
          if (blob.l - start & 2) blob.l += 2;
        }
        return ret;
      }
      function parse_VtVecUnalignedLpstrValue(blob) {
        var length = blob.read_shift(4);
        var ret = [];
        for (var i = 0; i != length; ++i) ret[i] = blob.read_shift(0, "lpstr-cp").replace(chr0, "");
        return ret;
      }
      function parse_VtHeadingPair(blob) {
        var start = blob.l;
        var headingString = parse_TypedPropertyValue(blob, VT_USTR);
        if (blob[blob.l] == 0 && blob[blob.l + 1] == 0 && blob.l - start & 2) blob.l += 2;
        var headerParts = parse_TypedPropertyValue(blob, VT_I4);
        return [headingString, headerParts];
      }
      function parse_VtVecHeadingPairValue(blob) {
        var cElements = blob.read_shift(4);
        var out = [];
        for (var i = 0; i < cElements / 2; ++i) out.push(parse_VtHeadingPair(blob));
        return out;
      }
      function parse_dictionary(blob, CodePage) {
        var cnt = blob.read_shift(4);
        var dict = {};
        for (var j = 0; j != cnt; ++j) {
          var pid = blob.read_shift(4);
          var len = blob.read_shift(4);
          dict[pid] = blob.read_shift(len, CodePage === 1200 ? "utf16le" : "utf8").replace(chr0, "").replace(chr1, "!");
          if (CodePage === 1200 && len % 2) blob.l += 2;
        }
        if (blob.l & 3) blob.l = blob.l >> 2 + 1 << 2;
        return dict;
      }
      function parse_BLOB(blob) {
        var size = blob.read_shift(4);
        var bytes = blob.slice(blob.l, blob.l + size);
        blob.l += size;
        if ((size & 3) > 0) blob.l += 4 - (size & 3) & 3;
        return bytes;
      }
      function parse_ClipboardData(blob) {
        var o = {};
        o.Size = blob.read_shift(4);
        blob.l += o.Size + 3 - (o.Size - 1) % 4;
        return o;
      }
      function parse_TypedPropertyValue(blob, type, _opts) {
        var t = blob.read_shift(2), ret, opts = _opts || {};
        blob.l += 2;
        if (type !== VT_VARIANT) {
          if (t !== type && VT_CUSTOM.indexOf(type) === -1 && !((type & 65534) == 4126 && (t & 65534) == 4126)) throw new Error("Expected type " + type + " saw " + t);
        }
        switch (type === VT_VARIANT ? t : type) {
          case 2:
            ret = blob.read_shift(2, "i");
            if (!opts.raw) blob.l += 2;
            return ret;
          case 3:
            ret = blob.read_shift(4, "i");
            return ret;
          case 11:
            return blob.read_shift(4) !== 0;
          case 19:
            ret = blob.read_shift(4);
            return ret;
          case 30:
            return parse_lpstr(blob, t, 4).replace(chr0, "");
          case 31:
            return parse_lpwstr(blob);
          case 64:
            return parse_FILETIME(blob);
          case 65:
            return parse_BLOB(blob);
          case 71:
            return parse_ClipboardData(blob);
          case 80:
            return parse_VtString(blob, t, !opts.raw).replace(chr0, "");
          case 81:
            return parse_VtUnalignedString(
              blob,
              t
              /*, 4*/
            ).replace(chr0, "");
          case 4108:
            return parse_VtVecHeadingPairValue(blob);
          case 4126:
          case 4127:
            return t == 4127 ? parse_VtVecLpwstrValue(blob) : parse_VtVecUnalignedLpstrValue(blob);
          default:
            throw new Error("TypedPropertyValue unrecognized type " + type + " " + t);
        }
      }
      function write_TypedPropertyValue(type, value) {
        var o = new_buf(4), p = new_buf(4);
        o.write_shift(4, type == 80 ? 31 : type);
        switch (type) {
          case 3:
            p.write_shift(-4, value);
            break;
          case 5:
            p = new_buf(8);
            p.write_shift(8, value, "f");
            break;
          case 11:
            p.write_shift(4, value ? 1 : 0);
            break;
          case 64:
            p = write_FILETIME(value);
            break;
          case 31:
          case 80:
            p = new_buf(4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));
            p.write_shift(4, value.length + 1);
            p.write_shift(0, value, "dbcs");
            while (p.l != p.length) p.write_shift(1, 0);
            break;
          default:
            throw new Error("TypedPropertyValue unrecognized type " + type + " " + value);
        }
        return bconcat([o, p]);
      }
      function parse_PropertySet(blob, PIDSI) {
        var start_addr = blob.l;
        var size = blob.read_shift(4);
        var NumProps = blob.read_shift(4);
        var Props = [], i = 0;
        var CodePage = 0;
        var Dictionary = -1, DictObj = {};
        for (i = 0; i != NumProps; ++i) {
          var PropID = blob.read_shift(4);
          var Offset = blob.read_shift(4);
          Props[i] = [PropID, Offset + start_addr];
        }
        Props.sort(function(x, y) {
          return x[1] - y[1];
        });
        var PropH = {};
        for (i = 0; i != NumProps; ++i) {
          if (blob.l !== Props[i][1]) {
            var fail = true;
            if (i > 0 && PIDSI) switch (PIDSI[Props[i - 1][0]].t) {
              case 2:
                if (blob.l + 2 === Props[i][1]) {
                  blob.l += 2;
                  fail = false;
                }
                break;
              case 80:
                if (blob.l <= Props[i][1]) {
                  blob.l = Props[i][1];
                  fail = false;
                }
                break;
              case 4108:
                if (blob.l <= Props[i][1]) {
                  blob.l = Props[i][1];
                  fail = false;
                }
                break;
            }
            if ((!PIDSI || i == 0) && blob.l <= Props[i][1]) {
              fail = false;
              blob.l = Props[i][1];
            }
            if (fail) throw new Error("Read Error: Expected address " + Props[i][1] + " at " + blob.l + " :" + i);
          }
          if (PIDSI) {
            var piddsi = PIDSI[Props[i][0]];
            PropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, { raw: true });
            if (piddsi.p === "version") PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + "." + ("0000" + String(PropH[piddsi.n] & 65535)).slice(-4);
            if (piddsi.n == "CodePage") switch (PropH[piddsi.n]) {
              case 0:
                PropH[piddsi.n] = 1252;
              case 874:
              case 932:
              case 936:
              case 949:
              case 950:
              case 1250:
              case 1251:
              case 1253:
              case 1254:
              case 1255:
              case 1256:
              case 1257:
              case 1258:
              case 1e4:
              case 1200:
              case 1201:
              case 1252:
              case 65e3:
              case -536:
              case 65001:
              case -535:
                set_cp(CodePage = PropH[piddsi.n] >>> 0 & 65535);
                break;
              default:
                throw new Error("Unsupported CodePage: " + PropH[piddsi.n]);
            }
          } else {
            if (Props[i][0] === 1) {
              CodePage = PropH.CodePage = parse_TypedPropertyValue(blob, VT_I2);
              set_cp(CodePage);
              if (Dictionary !== -1) {
                var oldpos = blob.l;
                blob.l = Props[Dictionary][1];
                DictObj = parse_dictionary(blob, CodePage);
                blob.l = oldpos;
              }
            } else if (Props[i][0] === 0) {
              if (CodePage === 0) {
                Dictionary = i;
                blob.l = Props[i + 1][1];
                continue;
              }
              DictObj = parse_dictionary(blob, CodePage);
            } else {
              var name = DictObj[Props[i][0]];
              var val;
              switch (blob[blob.l]) {
                case 65:
                  blob.l += 4;
                  val = parse_BLOB(blob);
                  break;
                case 30:
                  blob.l += 4;
                  val = parse_VtString(blob, blob[blob.l - 4]).replace(/\u0000+$/, "");
                  break;
                case 31:
                  blob.l += 4;
                  val = parse_VtString(blob, blob[blob.l - 4]).replace(/\u0000+$/, "");
                  break;
                case 3:
                  blob.l += 4;
                  val = blob.read_shift(4, "i");
                  break;
                case 19:
                  blob.l += 4;
                  val = blob.read_shift(4);
                  break;
                case 5:
                  blob.l += 4;
                  val = blob.read_shift(8, "f");
                  break;
                case 11:
                  blob.l += 4;
                  val = parsebool(blob, 4);
                  break;
                case 64:
                  blob.l += 4;
                  val = parseDate(parse_FILETIME(blob));
                  break;
                default:
                  throw new Error("unparsed value: " + blob[blob.l]);
              }
              PropH[name] = val;
            }
          }
        }
        blob.l = start_addr + size;
        return PropH;
      }
      var XLSPSSkip = ["CodePage", "Thumbnail", "_PID_LINKBASE", "_PID_HLINKS", "SystemIdentifier", "FMTID"];
      function guess_property_type(val) {
        switch (typeof val) {
          case "boolean":
            return 11;
          case "number":
            return (val | 0) == val ? 3 : 5;
          case "string":
            return 31;
          case "object":
            if (val instanceof Date) return 64;
            break;
        }
        return -1;
      }
      function write_PropertySet(entries, RE, PIDSI) {
        var hdr = new_buf(8), piao = [], prop = [];
        var sz = 8, i = 0;
        var pr = new_buf(8), pio = new_buf(8);
        pr.write_shift(4, 2);
        pr.write_shift(4, 1200);
        pio.write_shift(4, 1);
        prop.push(pr);
        piao.push(pio);
        sz += 8 + pr.length;
        if (!RE) {
          pio = new_buf(8);
          pio.write_shift(4, 0);
          piao.unshift(pio);
          var bufs = [new_buf(4)];
          bufs[0].write_shift(4, entries.length);
          for (i = 0; i < entries.length; ++i) {
            var value = entries[i][0];
            pr = new_buf(4 + 4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));
            pr.write_shift(4, i + 2);
            pr.write_shift(4, value.length + 1);
            pr.write_shift(0, value, "dbcs");
            while (pr.l != pr.length) pr.write_shift(1, 0);
            bufs.push(pr);
          }
          pr = bconcat(bufs);
          prop.unshift(pr);
          sz += 8 + pr.length;
        }
        for (i = 0; i < entries.length; ++i) {
          if (RE && !RE[entries[i][0]]) continue;
          if (XLSPSSkip.indexOf(entries[i][0]) > -1 || PseudoPropsPairs.indexOf(entries[i][0]) > -1) continue;
          if (entries[i][1] == null) continue;
          var val = entries[i][1], idx = 0;
          if (RE) {
            idx = +RE[entries[i][0]];
            var pinfo = PIDSI[idx];
            if (pinfo.p == "version" && typeof val == "string") {
              var arr = val.split(".");
              val = (+arr[0] << 16) + (+arr[1] || 0);
            }
            pr = write_TypedPropertyValue(pinfo.t, val);
          } else {
            var T = guess_property_type(val);
            if (T == -1) {
              T = 31;
              val = String(val);
            }
            pr = write_TypedPropertyValue(T, val);
          }
          prop.push(pr);
          pio = new_buf(8);
          pio.write_shift(4, !RE ? 2 + i : idx);
          piao.push(pio);
          sz += 8 + pr.length;
        }
        var w = 8 * (prop.length + 1);
        for (i = 0; i < prop.length; ++i) {
          piao[i].write_shift(4, w);
          w += prop[i].length;
        }
        hdr.write_shift(4, sz);
        hdr.write_shift(4, prop.length);
        return bconcat([hdr].concat(piao).concat(prop));
      }
      function parse_PropertySetStream(file, PIDSI, clsid) {
        var blob = file.content;
        if (!blob) return {};
        prep_blob(blob, 0);
        var NumSets, FMTID0, FMTID1, Offset0, Offset1 = 0;
        blob.chk("feff", "Byte Order: ");
        blob.read_shift(2);
        var SystemIdentifier = blob.read_shift(4);
        var CLSID = blob.read_shift(16);
        if (CLSID !== CFB.utils.consts.HEADER_CLSID && CLSID !== clsid) throw new Error("Bad PropertySet CLSID " + CLSID);
        NumSets = blob.read_shift(4);
        if (NumSets !== 1 && NumSets !== 2) throw new Error("Unrecognized #Sets: " + NumSets);
        FMTID0 = blob.read_shift(16);
        Offset0 = blob.read_shift(4);
        if (NumSets === 1 && Offset0 !== blob.l) throw new Error("Length mismatch: " + Offset0 + " !== " + blob.l);
        else if (NumSets === 2) {
          FMTID1 = blob.read_shift(16);
          Offset1 = blob.read_shift(4);
        }
        var PSet0 = parse_PropertySet(blob, PIDSI);
        var rval = { SystemIdentifier };
        for (var y in PSet0) rval[y] = PSet0[y];
        rval.FMTID = FMTID0;
        if (NumSets === 1) return rval;
        if (Offset1 - blob.l == 2) blob.l += 2;
        if (blob.l !== Offset1) throw new Error("Length mismatch 2: " + blob.l + " !== " + Offset1);
        var PSet1;
        try {
          PSet1 = parse_PropertySet(blob, null);
        } catch (e) {
        }
        for (y in PSet1) rval[y] = PSet1[y];
        rval.FMTID = [FMTID0, FMTID1];
        return rval;
      }
      function write_PropertySetStream(entries, clsid, RE, PIDSI, entries2, clsid2) {
        var hdr = new_buf(entries2 ? 68 : 48);
        var bufs = [hdr];
        hdr.write_shift(2, 65534);
        hdr.write_shift(2, 0);
        hdr.write_shift(4, 842412599);
        hdr.write_shift(16, CFB.utils.consts.HEADER_CLSID, "hex");
        hdr.write_shift(4, entries2 ? 2 : 1);
        hdr.write_shift(16, clsid, "hex");
        hdr.write_shift(4, entries2 ? 68 : 48);
        var ps0 = write_PropertySet(entries, RE, PIDSI);
        bufs.push(ps0);
        if (entries2) {
          var ps1 = write_PropertySet(entries2, null, null);
          hdr.write_shift(16, clsid2, "hex");
          hdr.write_shift(4, 68 + ps0.length);
          bufs.push(ps1);
        }
        return bconcat(bufs);
      }
      function parsenoop2(blob, length) {
        blob.read_shift(length);
        return null;
      }
      function writezeroes(n, o) {
        if (!o) o = new_buf(n);
        for (var j = 0; j < n; ++j) o.write_shift(1, 0);
        return o;
      }
      function parslurp(blob, length, cb) {
        var arr = [], target = blob.l + length;
        while (blob.l < target) arr.push(cb(blob, target - blob.l));
        if (target !== blob.l) throw new Error("Slurp error");
        return arr;
      }
      function parsebool(blob, length) {
        return blob.read_shift(length) === 1;
      }
      function writebool(v, o) {
        if (!o) o = new_buf(2);
        o.write_shift(2, +!!v);
        return o;
      }
      function parseuint16(blob) {
        return blob.read_shift(2, "u");
      }
      function writeuint16(v, o) {
        if (!o) o = new_buf(2);
        o.write_shift(2, v);
        return o;
      }
      function parseuint16a(blob, length) {
        return parslurp(blob, length, parseuint16);
      }
      function parse_Bes(blob) {
        var v = blob.read_shift(1), t = blob.read_shift(1);
        return t === 1 ? v : v === 1;
      }
      function write_Bes(v, t, o) {
        if (!o) o = new_buf(2);
        o.write_shift(1, t == "e" ? +v : +!!v);
        o.write_shift(1, t == "e" ? 1 : 0);
        return o;
      }
      function parse_ShortXLUnicodeString(blob, length, opts) {
        var cch = blob.read_shift(opts && opts.biff >= 12 ? 2 : 1);
        var encoding = "sbcs-cont";
        var cp = current_codepage;
        if (opts && opts.biff >= 8) current_codepage = 1200;
        if (!opts || opts.biff == 8) {
          var fHighByte = blob.read_shift(1);
          if (fHighByte) {
            encoding = "dbcs-cont";
          }
        } else if (opts.biff == 12) {
          encoding = "wstr";
        }
        if (opts.biff >= 2 && opts.biff <= 5) encoding = "cpstr";
        var o = cch ? blob.read_shift(cch, encoding) : "";
        current_codepage = cp;
        return o;
      }
      function parse_XLUnicodeRichExtendedString(blob) {
        var cp = current_codepage;
        current_codepage = 1200;
        var cch = blob.read_shift(2), flags = blob.read_shift(1);
        var fExtSt = flags & 4, fRichSt = flags & 8;
        var width = 1 + (flags & 1);
        var cRun = 0, cbExtRst;
        var z = {};
        if (fRichSt) cRun = blob.read_shift(2);
        if (fExtSt) cbExtRst = blob.read_shift(4);
        var encoding = width == 2 ? "dbcs-cont" : "sbcs-cont";
        var msg = cch === 0 ? "" : blob.read_shift(cch, encoding);
        if (fRichSt) blob.l += 4 * cRun;
        if (fExtSt) blob.l += cbExtRst;
        z.t = msg;
        if (!fRichSt) {
          z.raw = "<t>" + z.t + "</t>";
          z.r = z.t;
        }
        current_codepage = cp;
        return z;
      }
      function write_XLUnicodeRichExtendedString(xlstr) {
        var str = xlstr.t || "", nfmts = 1;
        var hdr = new_buf(3 + (nfmts > 1 ? 2 : 0));
        hdr.write_shift(2, str.length);
        hdr.write_shift(1, (nfmts > 1 ? 8 : 0) | 1);
        if (nfmts > 1) hdr.write_shift(2, nfmts);
        var otext = new_buf(2 * str.length);
        otext.write_shift(2 * str.length, str, "utf16le");
        var out = [hdr, otext];
        return bconcat(out);
      }
      function parse_XLUnicodeStringNoCch(blob, cch, opts) {
        var retval;
        if (opts) {
          if (opts.biff >= 2 && opts.biff <= 5) return blob.read_shift(cch, "cpstr");
          if (opts.biff >= 12) return blob.read_shift(cch, "dbcs-cont");
        }
        var fHighByte = blob.read_shift(1);
        if (fHighByte === 0) {
          retval = blob.read_shift(cch, "sbcs-cont");
        } else {
          retval = blob.read_shift(cch, "dbcs-cont");
        }
        return retval;
      }
      function parse_XLUnicodeString(blob, length, opts) {
        var cch = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);
        if (cch === 0) {
          blob.l++;
          return "";
        }
        return parse_XLUnicodeStringNoCch(blob, cch, opts);
      }
      function parse_XLUnicodeString2(blob, length, opts) {
        if (opts.biff > 5) return parse_XLUnicodeString(blob, length, opts);
        var cch = blob.read_shift(1);
        if (cch === 0) {
          blob.l++;
          return "";
        }
        return blob.read_shift(cch, opts.biff <= 4 || !blob.lens ? "cpstr" : "sbcs-cont");
      }
      function write_XLUnicodeString(str, opts, o) {
        if (!o) o = new_buf(3 + 2 * str.length);
        o.write_shift(2, str.length);
        o.write_shift(1, 1);
        o.write_shift(31, str, "utf16le");
        return o;
      }
      function parse_ControlInfo(blob) {
        var flags = blob.read_shift(1);
        blob.l++;
        var accel = blob.read_shift(2);
        blob.l += 2;
        return [flags, accel];
      }
      function parse_URLMoniker(blob) {
        var len = blob.read_shift(4), start = blob.l;
        var extra = false;
        if (len > 24) {
          blob.l += len - 24;
          if (blob.read_shift(16) === "795881f43b1d7f48af2c825dc4852763") extra = true;
          blob.l = start;
        }
        var url = blob.read_shift((extra ? len - 24 : len) >> 1, "utf16le").replace(chr0, "");
        if (extra) blob.l += 24;
        return url;
      }
      function parse_FileMoniker(blob) {
        var cAnti = blob.read_shift(2);
        var preamble = "";
        while (cAnti-- > 0) preamble += "../";
        var ansiPath = blob.read_shift(0, "lpstr-ansi");
        blob.l += 2;
        if (blob.read_shift(2) != 57005) throw new Error("Bad FileMoniker");
        var sz = blob.read_shift(4);
        if (sz === 0) return preamble + ansiPath.replace(/\\/g, "/");
        var bytes = blob.read_shift(4);
        if (blob.read_shift(2) != 3) throw new Error("Bad FileMoniker");
        var unicodePath = blob.read_shift(bytes >> 1, "utf16le").replace(chr0, "");
        return preamble + unicodePath;
      }
      function parse_HyperlinkMoniker(blob, length) {
        var clsid = blob.read_shift(16);
        length -= 16;
        switch (clsid) {
          case "e0c9ea79f9bace118c8200aa004ba90b":
            return parse_URLMoniker(blob, length);
          case "0303000000000000c000000000000046":
            return parse_FileMoniker(blob, length);
          default:
            throw new Error("Unsupported Moniker " + clsid);
        }
      }
      function parse_HyperlinkString(blob) {
        var len = blob.read_shift(4);
        var o = len > 0 ? blob.read_shift(len, "utf16le").replace(chr0, "") : "";
        return o;
      }
      function write_HyperlinkString(str, o) {
        if (!o) o = new_buf(6 + str.length * 2);
        o.write_shift(4, 1 + str.length);
        for (var i = 0; i < str.length; ++i) o.write_shift(2, str.charCodeAt(i));
        o.write_shift(2, 0);
        return o;
      }
      function parse_Hyperlink(blob, length) {
        var end = blob.l + length;
        var sVer = blob.read_shift(4);
        if (sVer !== 2) throw new Error("Unrecognized streamVersion: " + sVer);
        var flags = blob.read_shift(2);
        blob.l += 2;
        var displayName, targetFrameName, moniker, oleMoniker, Loc = "", guid, fileTime;
        if (flags & 16) displayName = parse_HyperlinkString(blob, end - blob.l);
        if (flags & 128) targetFrameName = parse_HyperlinkString(blob, end - blob.l);
        if ((flags & 257) === 257) moniker = parse_HyperlinkString(blob, end - blob.l);
        if ((flags & 257) === 1) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l);
        if (flags & 8) Loc = parse_HyperlinkString(blob, end - blob.l);
        if (flags & 32) guid = blob.read_shift(16);
        if (flags & 64) fileTime = parse_FILETIME(
          blob
          /*, 8*/
        );
        blob.l = end;
        var target = targetFrameName || moniker || oleMoniker || "";
        if (target && Loc) target += "#" + Loc;
        if (!target) target = "#" + Loc;
        if (flags & 2 && target.charAt(0) == "/" && target.charAt(1) != "/") target = "file://" + target;
        var out = { Target: target };
        if (guid) out.guid = guid;
        if (fileTime) out.time = fileTime;
        if (displayName) out.Tooltip = displayName;
        return out;
      }
      function write_Hyperlink(hl) {
        var out = new_buf(512), i = 0;
        var Target = hl.Target;
        if (Target.slice(0, 7) == "file://") Target = Target.slice(7);
        var hashidx = Target.indexOf("#");
        var F = hashidx > -1 ? 31 : 23;
        switch (Target.charAt(0)) {
          case "#":
            F = 28;
            break;
          case ".":
            F &= ~2;
            break;
        }
        out.write_shift(4, 2);
        out.write_shift(4, F);
        var data = [8, 6815827, 6619237, 4849780, 83];
        for (i = 0; i < data.length; ++i) out.write_shift(4, data[i]);
        if (F == 28) {
          Target = Target.slice(1);
          write_HyperlinkString(Target, out);
        } else if (F & 2) {
          data = "e0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b".split(" ");
          for (i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));
          var Pretarget = hashidx > -1 ? Target.slice(0, hashidx) : Target;
          out.write_shift(4, 2 * (Pretarget.length + 1));
          for (i = 0; i < Pretarget.length; ++i) out.write_shift(2, Pretarget.charCodeAt(i));
          out.write_shift(2, 0);
          if (F & 8) write_HyperlinkString(hashidx > -1 ? Target.slice(hashidx + 1) : "", out);
        } else {
          data = "03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46".split(" ");
          for (i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));
          var P = 0;
          while (Target.slice(P * 3, P * 3 + 3) == "../" || Target.slice(P * 3, P * 3 + 3) == "..\\") ++P;
          out.write_shift(2, P);
          out.write_shift(4, Target.length - 3 * P + 1);
          for (i = 0; i < Target.length - 3 * P; ++i) out.write_shift(1, Target.charCodeAt(i + 3 * P) & 255);
          out.write_shift(1, 0);
          out.write_shift(2, 65535);
          out.write_shift(2, 57005);
          for (i = 0; i < 6; ++i) out.write_shift(4, 0);
        }
        return out.slice(0, out.l);
      }
      function parse_LongRGBA(blob) {
        var r = blob.read_shift(1), g = blob.read_shift(1), b = blob.read_shift(1), a = blob.read_shift(1);
        return [r, g, b, a];
      }
      function parse_LongRGB(blob, length) {
        var x = parse_LongRGBA(blob, length);
        x[3] = 0;
        return x;
      }
      function parse_XLSCell(blob) {
        var rw = blob.read_shift(2);
        var col = blob.read_shift(2);
        var ixfe = blob.read_shift(2);
        return { r: rw, c: col, ixfe };
      }
      function write_XLSCell(R, C, ixfe, o) {
        if (!o) o = new_buf(6);
        o.write_shift(2, R);
        o.write_shift(2, C);
        o.write_shift(2, ixfe || 0);
        return o;
      }
      function parse_frtHeader(blob) {
        var rt = blob.read_shift(2);
        var flags = blob.read_shift(2);
        blob.l += 8;
        return { type: rt, flags };
      }
      function parse_OptXLUnicodeString(blob, length, opts) {
        return length === 0 ? "" : parse_XLUnicodeString2(blob, length, opts);
      }
      function parse_XTI(blob, length, opts) {
        var w = opts.biff > 8 ? 4 : 2;
        var iSupBook = blob.read_shift(w), itabFirst = blob.read_shift(w, "i"), itabLast = blob.read_shift(w, "i");
        return [iSupBook, itabFirst, itabLast];
      }
      function parse_RkRec(blob) {
        var ixfe = blob.read_shift(2);
        var RK = parse_RkNumber(blob);
        return [ixfe, RK];
      }
      function parse_AddinUdf(blob, length, opts) {
        blob.l += 4;
        length -= 4;
        var l = blob.l + length;
        var udfName = parse_ShortXLUnicodeString(blob, length, opts);
        var cb = blob.read_shift(2);
        l -= blob.l;
        if (cb !== l) throw new Error("Malformed AddinUdf: padding = " + l + " != " + cb);
        blob.l += cb;
        return udfName;
      }
      function parse_Ref8U(blob) {
        var rwFirst = blob.read_shift(2);
        var rwLast = blob.read_shift(2);
        var colFirst = blob.read_shift(2);
        var colLast = blob.read_shift(2);
        return { s: { c: colFirst, r: rwFirst }, e: { c: colLast, r: rwLast } };
      }
      function write_Ref8U(r, o) {
        if (!o) o = new_buf(8);
        o.write_shift(2, r.s.r);
        o.write_shift(2, r.e.r);
        o.write_shift(2, r.s.c);
        o.write_shift(2, r.e.c);
        return o;
      }
      function parse_RefU(blob) {
        var rwFirst = blob.read_shift(2);
        var rwLast = blob.read_shift(2);
        var colFirst = blob.read_shift(1);
        var colLast = blob.read_shift(1);
        return { s: { c: colFirst, r: rwFirst }, e: { c: colLast, r: rwLast } };
      }
      var parse_Ref = parse_RefU;
      function parse_FtCmo(blob) {
        blob.l += 4;
        var ot = blob.read_shift(2);
        var id = blob.read_shift(2);
        var flags = blob.read_shift(2);
        blob.l += 12;
        return [id, ot, flags];
      }
      function parse_FtNts(blob) {
        var out = {};
        blob.l += 4;
        blob.l += 16;
        out.fSharedNote = blob.read_shift(2);
        blob.l += 4;
        return out;
      }
      function parse_FtCf(blob) {
        var out = {};
        blob.l += 4;
        blob.cf = blob.read_shift(2);
        return out;
      }
      function parse_FtSkip(blob) {
        blob.l += 2;
        blob.l += blob.read_shift(2);
      }
      var FtTab = {
        0: parse_FtSkip,
        /* FtEnd */
        4: parse_FtSkip,
        /* FtMacro */
        5: parse_FtSkip,
        /* FtButton */
        6: parse_FtSkip,
        /* FtGmo */
        7: parse_FtCf,
        /* FtCf */
        8: parse_FtSkip,
        /* FtPioGrbit */
        9: parse_FtSkip,
        /* FtPictFmla */
        10: parse_FtSkip,
        /* FtCbls */
        11: parse_FtSkip,
        /* FtRbo */
        12: parse_FtSkip,
        /* FtSbs */
        13: parse_FtNts,
        /* FtNts */
        14: parse_FtSkip,
        /* FtSbsFmla */
        15: parse_FtSkip,
        /* FtGboData */
        16: parse_FtSkip,
        /* FtEdoData */
        17: parse_FtSkip,
        /* FtRboData */
        18: parse_FtSkip,
        /* FtCblsData */
        19: parse_FtSkip,
        /* FtLbsData */
        20: parse_FtSkip,
        /* FtCblsFmla */
        21: parse_FtCmo
      };
      function parse_FtArray(blob, length) {
        var tgt = blob.l + length;
        var fts = [];
        while (blob.l < tgt) {
          var ft = blob.read_shift(2);
          blob.l -= 2;
          try {
            fts.push(FtTab[ft](blob, tgt - blob.l));
          } catch (e) {
            blob.l = tgt;
            return fts;
          }
        }
        if (blob.l != tgt) blob.l = tgt;
        return fts;
      }
      function parse_BOF(blob, length) {
        var o = { BIFFVer: 0, dt: 0 };
        o.BIFFVer = blob.read_shift(2);
        length -= 2;
        if (length >= 2) {
          o.dt = blob.read_shift(2);
          blob.l -= 2;
        }
        switch (o.BIFFVer) {
          case 1536:
          case 1280:
          case 1024:
          case 768:
          case 512:
          case 2:
          case 7:
            break;
          default:
            if (length > 6) throw new Error("Unexpected BIFF Ver " + o.BIFFVer);
        }
        blob.read_shift(length);
        return o;
      }
      function write_BOF(wb, t, o) {
        var h = 1536, w = 16;
        switch (o.bookType) {
          case "biff8":
            break;
          case "biff5":
            h = 1280;
            w = 8;
            break;
          case "biff4":
            h = 4;
            w = 6;
            break;
          case "biff3":
            h = 3;
            w = 6;
            break;
          case "biff2":
            h = 2;
            w = 4;
            break;
          case "xla":
            break;
          default:
            throw new Error("unsupported BIFF version");
        }
        var out = new_buf(w);
        out.write_shift(2, h);
        out.write_shift(2, t);
        if (w > 4) out.write_shift(2, 29282);
        if (w > 6) out.write_shift(2, 1997);
        if (w > 8) {
          out.write_shift(2, 49161);
          out.write_shift(2, 1);
          out.write_shift(2, 1798);
          out.write_shift(2, 0);
        }
        return out;
      }
      function parse_InterfaceHdr(blob, length) {
        if (length === 0) return 1200;
        if (blob.read_shift(2) !== 1200) {
        }
        return 1200;
      }
      function parse_WriteAccess(blob, length, opts) {
        if (opts.enc) {
          blob.l += length;
          return "";
        }
        var l = blob.l;
        var UserName = parse_XLUnicodeString2(blob, 0, opts);
        blob.read_shift(length + l - blob.l);
        return UserName;
      }
      function write_WriteAccess(s, opts) {
        var b8 = !opts || opts.biff == 8;
        var o = new_buf(b8 ? 112 : 54);
        o.write_shift(opts.biff == 8 ? 2 : 1, 7);
        if (b8) o.write_shift(1, 0);
        o.write_shift(4, 859007059);
        o.write_shift(4, 5458548 | (b8 ? 0 : 536870912));
        while (o.l < o.length) o.write_shift(1, b8 ? 0 : 32);
        return o;
      }
      function parse_WsBool(blob, length, opts) {
        var flags = opts && opts.biff == 8 || length == 2 ? blob.read_shift(2) : (blob.l += length, 0);
        return { fDialog: flags & 16, fBelow: flags & 64, fRight: flags & 128 };
      }
      function parse_BoundSheet8(blob, length, opts) {
        var pos = blob.read_shift(4);
        var hidden = blob.read_shift(1) & 3;
        var dt = blob.read_shift(1);
        switch (dt) {
          case 0:
            dt = "Worksheet";
            break;
          case 1:
            dt = "Macrosheet";
            break;
          case 2:
            dt = "Chartsheet";
            break;
          case 6:
            dt = "VBAModule";
            break;
        }
        var name = parse_ShortXLUnicodeString(blob, 0, opts);
        if (name.length === 0) name = "Sheet1";
        return { pos, hs: hidden, dt, name };
      }
      function write_BoundSheet8(data, opts) {
        var w = !opts || opts.biff >= 8 ? 2 : 1;
        var o = new_buf(8 + w * data.name.length);
        o.write_shift(4, data.pos);
        o.write_shift(1, data.hs || 0);
        o.write_shift(1, data.dt);
        o.write_shift(1, data.name.length);
        if (opts.biff >= 8) o.write_shift(1, 1);
        o.write_shift(w * data.name.length, data.name, opts.biff < 8 ? "sbcs" : "utf16le");
        var out = o.slice(0, o.l);
        out.l = o.l;
        return out;
      }
      function parse_SST(blob, length) {
        var end = blob.l + length;
        var cnt = blob.read_shift(4);
        var ucnt = blob.read_shift(4);
        var strs2 = [];
        for (var i = 0; i != ucnt && blob.l < end; ++i) {
          strs2.push(parse_XLUnicodeRichExtendedString(blob));
        }
        strs2.Count = cnt;
        strs2.Unique = ucnt;
        return strs2;
      }
      function write_SST(sst, opts) {
        var header = new_buf(8);
        header.write_shift(4, sst.Count);
        header.write_shift(4, sst.Unique);
        var strs2 = [];
        for (var j = 0; j < sst.length; ++j) strs2[j] = write_XLUnicodeRichExtendedString(sst[j], opts);
        var o = bconcat([header].concat(strs2));
        o.parts = [header.length].concat(strs2.map(function(str) {
          return str.length;
        }));
        return o;
      }
      function parse_ExtSST(blob, length) {
        var extsst = {};
        extsst.dsst = blob.read_shift(2);
        blob.l += length - 2;
        return extsst;
      }
      function parse_Row(blob) {
        var z = {};
        z.r = blob.read_shift(2);
        z.c = blob.read_shift(2);
        z.cnt = blob.read_shift(2) - z.c;
        var miyRw = blob.read_shift(2);
        blob.l += 4;
        var flags = blob.read_shift(1);
        blob.l += 3;
        if (flags & 7) z.level = flags & 7;
        if (flags & 32) z.hidden = true;
        if (flags & 64) z.hpt = miyRw / 20;
        return z;
      }
      function parse_ForceFullCalculation(blob) {
        var header = parse_frtHeader(blob);
        if (header.type != 2211) throw new Error("Invalid Future Record " + header.type);
        var fullcalc = blob.read_shift(4);
        return fullcalc !== 0;
      }
      function parse_RecalcId(blob) {
        blob.read_shift(2);
        return blob.read_shift(4);
      }
      function parse_DefaultRowHeight(blob, length, opts) {
        var f = 0;
        if (!(opts && opts.biff == 2)) {
          f = blob.read_shift(2);
        }
        var miyRw = blob.read_shift(2);
        if (opts && opts.biff == 2) {
          f = 1 - (miyRw >> 15);
          miyRw &= 32767;
        }
        var fl = { Unsynced: f & 1, DyZero: (f & 2) >> 1, ExAsc: (f & 4) >> 2, ExDsc: (f & 8) >> 3 };
        return [fl, miyRw];
      }
      function parse_Window1(blob) {
        var xWn = blob.read_shift(2), yWn = blob.read_shift(2), dxWn = blob.read_shift(2), dyWn = blob.read_shift(2);
        var flags = blob.read_shift(2), iTabCur = blob.read_shift(2), iTabFirst = blob.read_shift(2);
        var ctabSel = blob.read_shift(2), wTabRatio = blob.read_shift(2);
        return {
          Pos: [xWn, yWn],
          Dim: [dxWn, dyWn],
          Flags: flags,
          CurTab: iTabCur,
          FirstTab: iTabFirst,
          Selected: ctabSel,
          TabRatio: wTabRatio
        };
      }
      function write_Window1() {
        var o = new_buf(18);
        o.write_shift(2, 0);
        o.write_shift(2, 0);
        o.write_shift(2, 29280);
        o.write_shift(2, 17600);
        o.write_shift(2, 56);
        o.write_shift(2, 0);
        o.write_shift(2, 0);
        o.write_shift(2, 1);
        o.write_shift(2, 500);
        return o;
      }
      function parse_Window2(blob, length, opts) {
        if (opts && opts.biff >= 2 && opts.biff < 5) return {};
        var f = blob.read_shift(2);
        return { RTL: f & 64 };
      }
      function write_Window2(view) {
        var o = new_buf(18), f = 1718;
        if (view && view.RTL) f |= 64;
        o.write_shift(2, f);
        o.write_shift(4, 0);
        o.write_shift(4, 64);
        o.write_shift(4, 0);
        o.write_shift(4, 0);
        return o;
      }
      function parse_Pane() {
      }
      function parse_Font(blob, length, opts) {
        var o = {
          dyHeight: blob.read_shift(2),
          fl: blob.read_shift(2)
        };
        switch (opts && opts.biff || 8) {
          case 2:
            break;
          case 3:
          case 4:
            blob.l += 2;
            break;
          default:
            blob.l += 10;
            break;
        }
        o.name = parse_ShortXLUnicodeString(blob, 0, opts);
        return o;
      }
      function write_Font(data, opts) {
        var name = data.name || "Arial";
        var b5 = opts && opts.biff == 5, w = b5 ? 15 + name.length : 16 + 2 * name.length;
        var o = new_buf(w);
        o.write_shift(2, (data.sz || 12) * 20);
        o.write_shift(4, 0);
        o.write_shift(2, 400);
        o.write_shift(4, 0);
        o.write_shift(2, 0);
        o.write_shift(1, name.length);
        if (!b5) o.write_shift(1, 1);
        o.write_shift((b5 ? 1 : 2) * name.length, name, b5 ? "sbcs" : "utf16le");
        return o;
      }
      function parse_LabelSst(blob) {
        var cell = parse_XLSCell(blob);
        cell.isst = blob.read_shift(4);
        return cell;
      }
      function write_LabelSst(R, C, v, os) {
        var o = new_buf(10);
        write_XLSCell(R, C, os, o);
        o.write_shift(4, v);
        return o;
      }
      function parse_Label(blob, length, opts) {
        if (opts.biffguess && opts.biff == 2) opts.biff = 5;
        var target = blob.l + length;
        var cell = parse_XLSCell(blob, 6);
        if (opts.biff == 2) blob.l++;
        var str = parse_XLUnicodeString(blob, target - blob.l, opts);
        cell.val = str;
        return cell;
      }
      function write_Label(R, C, v, os, opts) {
        var b8 = !opts || opts.biff == 8;
        var o = new_buf(6 + 2 + +b8 + (1 + b8) * v.length);
        write_XLSCell(R, C, os, o);
        o.write_shift(2, v.length);
        if (b8) o.write_shift(1, 1);
        o.write_shift((1 + b8) * v.length, v, b8 ? "utf16le" : "sbcs");
        return o;
      }
      function parse_Format(blob, length, opts) {
        var numFmtId = blob.read_shift(2);
        var fmtstr = parse_XLUnicodeString2(blob, 0, opts);
        return [numFmtId, fmtstr];
      }
      function write_Format(i, f, opts, o) {
        var b5 = opts && opts.biff == 5;
        if (!o) o = new_buf(b5 ? 3 + f.length : 5 + 2 * f.length);
        o.write_shift(2, i);
        o.write_shift(b5 ? 1 : 2, f.length);
        if (!b5) o.write_shift(1, 1);
        o.write_shift((b5 ? 1 : 2) * f.length, f, b5 ? "sbcs" : "utf16le");
        var out = o.length > o.l ? o.slice(0, o.l) : o;
        if (out.l == null) out.l = out.length;
        return out;
      }
      var parse_BIFF2Format = parse_XLUnicodeString2;
      function parse_Dimensions(blob, length, opts) {
        var end = blob.l + length;
        var w = opts.biff == 8 || !opts.biff ? 4 : 2;
        var r = blob.read_shift(w), R = blob.read_shift(w);
        var c = blob.read_shift(2), C = blob.read_shift(2);
        blob.l = end;
        return { s: { r, c }, e: { r: R, c: C } };
      }
      function write_Dimensions(range, opts) {
        var w = opts.biff == 8 || !opts.biff ? 4 : 2;
        var o = new_buf(2 * w + 6);
        o.write_shift(w, range.s.r);
        o.write_shift(w, range.e.r + 1);
        o.write_shift(2, range.s.c);
        o.write_shift(2, range.e.c + 1);
        o.write_shift(2, 0);
        return o;
      }
      function parse_RK(blob) {
        var rw = blob.read_shift(2), col = blob.read_shift(2);
        var rkrec = parse_RkRec(blob);
        return { r: rw, c: col, ixfe: rkrec[0], rknum: rkrec[1] };
      }
      function parse_MulRk(blob, length) {
        var target = blob.l + length - 2;
        var rw = blob.read_shift(2), col = blob.read_shift(2);
        var rkrecs = [];
        while (blob.l < target) rkrecs.push(parse_RkRec(blob));
        if (blob.l !== target) throw new Error("MulRK read error");
        var lastcol = blob.read_shift(2);
        if (rkrecs.length != lastcol - col + 1) throw new Error("MulRK length mismatch");
        return { r: rw, c: col, C: lastcol, rkrec: rkrecs };
      }
      function parse_MulBlank(blob, length) {
        var target = blob.l + length - 2;
        var rw = blob.read_shift(2), col = blob.read_shift(2);
        var ixfes = [];
        while (blob.l < target) ixfes.push(blob.read_shift(2));
        if (blob.l !== target) throw new Error("MulBlank read error");
        var lastcol = blob.read_shift(2);
        if (ixfes.length != lastcol - col + 1) throw new Error("MulBlank length mismatch");
        return { r: rw, c: col, C: lastcol, ixfe: ixfes };
      }
      function parse_CellStyleXF(blob, length, style, opts) {
        var o = {};
        var a = blob.read_shift(4), b = blob.read_shift(4);
        var c = blob.read_shift(4), d = blob.read_shift(2);
        o.patternType = XLSFillPattern[c >> 26];
        if (!opts.cellStyles) return o;
        o.alc = a & 7;
        o.fWrap = a >> 3 & 1;
        o.alcV = a >> 4 & 7;
        o.fJustLast = a >> 7 & 1;
        o.trot = a >> 8 & 255;
        o.cIndent = a >> 16 & 15;
        o.fShrinkToFit = a >> 20 & 1;
        o.iReadOrder = a >> 22 & 2;
        o.fAtrNum = a >> 26 & 1;
        o.fAtrFnt = a >> 27 & 1;
        o.fAtrAlc = a >> 28 & 1;
        o.fAtrBdr = a >> 29 & 1;
        o.fAtrPat = a >> 30 & 1;
        o.fAtrProt = a >> 31 & 1;
        o.dgLeft = b & 15;
        o.dgRight = b >> 4 & 15;
        o.dgTop = b >> 8 & 15;
        o.dgBottom = b >> 12 & 15;
        o.icvLeft = b >> 16 & 127;
        o.icvRight = b >> 23 & 127;
        o.grbitDiag = b >> 30 & 3;
        o.icvTop = c & 127;
        o.icvBottom = c >> 7 & 127;
        o.icvDiag = c >> 14 & 127;
        o.dgDiag = c >> 21 & 15;
        o.icvFore = d & 127;
        o.icvBack = d >> 7 & 127;
        o.fsxButton = d >> 14 & 1;
        return o;
      }
      function parse_XF(blob, length, opts) {
        var o = {};
        o.ifnt = blob.read_shift(2);
        o.numFmtId = blob.read_shift(2);
        o.flags = blob.read_shift(2);
        o.fStyle = o.flags >> 2 & 1;
        length -= 6;
        o.data = parse_CellStyleXF(blob, length, o.fStyle, opts);
        return o;
      }
      function write_XF(data, ixfeP, opts, o) {
        var b5 = opts && opts.biff == 5;
        if (!o) o = new_buf(b5 ? 16 : 20);
        o.write_shift(2, 0);
        if (data.style) {
          o.write_shift(2, data.numFmtId || 0);
          o.write_shift(2, 65524);
        } else {
          o.write_shift(2, data.numFmtId || 0);
          o.write_shift(2, ixfeP << 4);
        }
        var f = 0;
        if (data.numFmtId > 0 && b5) f |= 1024;
        o.write_shift(4, f);
        o.write_shift(4, 0);
        if (!b5) o.write_shift(4, 0);
        o.write_shift(2, 0);
        return o;
      }
      function parse_Guts(blob) {
        blob.l += 4;
        var out = [blob.read_shift(2), blob.read_shift(2)];
        if (out[0] !== 0) out[0]--;
        if (out[1] !== 0) out[1]--;
        if (out[0] > 7 || out[1] > 7) throw new Error("Bad Gutters: " + out.join("|"));
        return out;
      }
      function write_Guts(guts) {
        var o = new_buf(8);
        o.write_shift(4, 0);
        o.write_shift(2, guts[0] ? guts[0] + 1 : 0);
        o.write_shift(2, guts[1] ? guts[1] + 1 : 0);
        return o;
      }
      function parse_BoolErr(blob, length, opts) {
        var cell = parse_XLSCell(blob, 6);
        if (opts.biff == 2 || length == 9) ++blob.l;
        var val = parse_Bes(blob, 2);
        cell.val = val;
        cell.t = val === true || val === false ? "b" : "e";
        return cell;
      }
      function write_BoolErr(R, C, v, os, opts, t) {
        var o = new_buf(8);
        write_XLSCell(R, C, os, o);
        write_Bes(v, t, o);
        return o;
      }
      function parse_Number(blob, length, opts) {
        if (opts.biffguess && opts.biff == 2) opts.biff = 5;
        var cell = parse_XLSCell(blob, 6);
        var xnum = parse_Xnum(blob, 8);
        cell.val = xnum;
        return cell;
      }
      function write_Number(R, C, v, os) {
        var o = new_buf(14);
        write_XLSCell(R, C, os, o);
        write_Xnum(v, o);
        return o;
      }
      var parse_XLHeaderFooter = parse_OptXLUnicodeString;
      function parse_SupBook(blob, length, opts) {
        var end = blob.l + length;
        var ctab = blob.read_shift(2);
        var cch = blob.read_shift(2);
        opts.sbcch = cch;
        if (cch == 1025 || cch == 14849) return [cch, ctab];
        if (cch < 1 || cch > 255) throw new Error("Unexpected SupBook type: " + cch);
        var virtPath = parse_XLUnicodeStringNoCch(blob, cch);
        var rgst = [];
        while (end > blob.l) rgst.push(parse_XLUnicodeString(blob));
        return [cch, ctab, virtPath, rgst];
      }
      function parse_ExternName(blob, length, opts) {
        var flags = blob.read_shift(2);
        var body;
        var o = {
          fBuiltIn: flags & 1,
          fWantAdvise: flags >>> 1 & 1,
          fWantPict: flags >>> 2 & 1,
          fOle: flags >>> 3 & 1,
          fOleLink: flags >>> 4 & 1,
          cf: flags >>> 5 & 1023,
          fIcon: flags >>> 15 & 1
        };
        if (opts.sbcch === 14849) body = parse_AddinUdf(blob, length - 2, opts);
        o.body = body || blob.read_shift(length - 2);
        if (typeof body === "string") o.Name = body;
        return o;
      }
      var XLSLblBuiltIn = [
        "_xlnm.Consolidate_Area",
        "_xlnm.Auto_Open",
        "_xlnm.Auto_Close",
        "_xlnm.Extract",
        "_xlnm.Database",
        "_xlnm.Criteria",
        "_xlnm.Print_Area",
        "_xlnm.Print_Titles",
        "_xlnm.Recorder",
        "_xlnm.Data_Form",
        "_xlnm.Auto_Activate",
        "_xlnm.Auto_Deactivate",
        "_xlnm.Sheet_Title",
        "_xlnm._FilterDatabase"
      ];
      function parse_Lbl(blob, length, opts) {
        var target = blob.l + length;
        var flags = blob.read_shift(2);
        var chKey = blob.read_shift(1);
        var cch = blob.read_shift(1);
        var cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);
        var itab = 0;
        if (!opts || opts.biff >= 5) {
          if (opts.biff != 5) blob.l += 2;
          itab = blob.read_shift(2);
          if (opts.biff == 5) blob.l += 2;
          blob.l += 4;
        }
        var name = parse_XLUnicodeStringNoCch(blob, cch, opts);
        if (flags & 32) name = XLSLblBuiltIn[name.charCodeAt(0)];
        var npflen = target - blob.l;
        if (opts && opts.biff == 2) --npflen;
        var rgce = target == blob.l || cce === 0 || !(npflen > 0) ? [] : parse_NameParsedFormula(blob, npflen, opts, cce);
        return {
          chKey,
          Name: name,
          itab,
          rgce
        };
      }
      function parse_ExternSheet(blob, length, opts) {
        if (opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts);
        var o = [], target = blob.l + length, len = blob.read_shift(opts.biff > 8 ? 4 : 2);
        while (len-- !== 0) o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts));
        if (blob.l != target) throw new Error("Bad ExternSheet: " + blob.l + " != " + target);
        return o;
      }
      function parse_BIFF5ExternSheet(blob, length, opts) {
        if (blob[blob.l + 1] == 3) blob[blob.l]++;
        var o = parse_ShortXLUnicodeString(blob, length, opts);
        return o.charCodeAt(0) == 3 ? o.slice(1) : o;
      }
      function parse_NameCmt(blob, length, opts) {
        if (opts.biff < 8) {
          blob.l += length;
          return;
        }
        var cchName = blob.read_shift(2);
        var cchComment = blob.read_shift(2);
        var name = parse_XLUnicodeStringNoCch(blob, cchName, opts);
        var comment = parse_XLUnicodeStringNoCch(blob, cchComment, opts);
        return [name, comment];
      }
      function parse_ShrFmla(blob, length, opts) {
        var ref = parse_RefU(blob, 6);
        blob.l++;
        var cUse = blob.read_shift(1);
        length -= 8;
        return [parse_SharedParsedFormula(blob, length, opts), cUse, ref];
      }
      function parse_Array(blob, length, opts) {
        var ref = parse_Ref(blob, 6);
        switch (opts.biff) {
          case 2:
            blob.l++;
            length -= 7;
            break;
          case 3:
          case 4:
            blob.l += 2;
            length -= 8;
            break;
          default:
            blob.l += 6;
            length -= 12;
        }
        return [ref, parse_ArrayParsedFormula(blob, length, opts, ref)];
      }
      function parse_MTRSettings(blob) {
        var fMTREnabled = blob.read_shift(4) !== 0;
        var fUserSetThreadCount = blob.read_shift(4) !== 0;
        var cUserThreadCount = blob.read_shift(4);
        return [fMTREnabled, fUserSetThreadCount, cUserThreadCount];
      }
      function parse_NoteSh(blob, length, opts) {
        if (opts.biff < 8) return;
        var row = blob.read_shift(2), col = blob.read_shift(2);
        var flags = blob.read_shift(2), idObj = blob.read_shift(2);
        var stAuthor = parse_XLUnicodeString2(blob, 0, opts);
        if (opts.biff < 8) blob.read_shift(1);
        return [{ r: row, c: col }, stAuthor, idObj, flags];
      }
      function parse_Note(blob, length, opts) {
        return parse_NoteSh(blob, length, opts);
      }
      function parse_MergeCells(blob, length) {
        var merges = [];
        var cmcs = blob.read_shift(2);
        while (cmcs--) merges.push(parse_Ref8U(blob, length));
        return merges;
      }
      function write_MergeCells(merges) {
        var o = new_buf(2 + merges.length * 8);
        o.write_shift(2, merges.length);
        for (var i = 0; i < merges.length; ++i) write_Ref8U(merges[i], o);
        return o;
      }
      function parse_Obj(blob, length, opts) {
        if (opts && opts.biff < 8) return parse_BIFF5Obj(blob, length, opts);
        var cmo = parse_FtCmo(blob, 22);
        var fts = parse_FtArray(blob, length - 22, cmo[1]);
        return { cmo, ft: fts };
      }
      var parse_BIFF5OT = {
        8: function(blob, length) {
          var tgt = blob.l + length;
          blob.l += 10;
          var cf = blob.read_shift(2);
          blob.l += 4;
          blob.l += 2;
          blob.l += 2;
          blob.l += 2;
          blob.l += 4;
          var cchName = blob.read_shift(1);
          blob.l += cchName;
          blob.l = tgt;
          return { fmt: cf };
        }
      };
      function parse_BIFF5Obj(blob, length, opts) {
        blob.l += 4;
        var ot = blob.read_shift(2);
        var id = blob.read_shift(2);
        var grbit = blob.read_shift(2);
        blob.l += 2;
        blob.l += 2;
        blob.l += 2;
        blob.l += 2;
        blob.l += 2;
        blob.l += 2;
        blob.l += 2;
        blob.l += 2;
        blob.l += 2;
        blob.l += 6;
        length -= 36;
        var fts = [];
        fts.push((parse_BIFF5OT[ot] || parsenoop)(blob, length, opts));
        return { cmo: [id, ot, grbit], ft: fts };
      }
      function parse_TxO(blob, length, opts) {
        var s = blob.l;
        var texts = "";
        try {
          blob.l += 4;
          var ot = (opts.lastobj || { cmo: [0, 0] }).cmo[1];
          var controlInfo;
          if ([0, 5, 7, 11, 12, 14].indexOf(ot) == -1) blob.l += 6;
          else controlInfo = parse_ControlInfo(blob, 6, opts);
          var cchText = blob.read_shift(2);
          blob.read_shift(2);
          parseuint16(blob, 2);
          var len = blob.read_shift(2);
          blob.l += len;
          for (var i = 1; i < blob.lens.length - 1; ++i) {
            if (blob.l - s != blob.lens[i]) throw new Error("TxO: bad continue record");
            var hdr = blob[blob.l];
            var t = parse_XLUnicodeStringNoCch(blob, blob.lens[i + 1] - blob.lens[i] - 1);
            texts += t;
            if (texts.length >= (hdr ? cchText : 2 * cchText)) break;
          }
          if (texts.length !== cchText && texts.length !== cchText * 2) {
            throw new Error("cchText: " + cchText + " != " + texts.length);
          }
          blob.l = s + length;
          return { t: texts };
        } catch (e) {
          blob.l = s + length;
          return { t: texts };
        }
      }
      function parse_HLink(blob, length) {
        var ref = parse_Ref8U(blob, 8);
        blob.l += 16;
        var hlink = parse_Hyperlink(blob, length - 24);
        return [ref, hlink];
      }
      function write_HLink(hl) {
        var O = new_buf(24);
        var ref = decode_cell(hl[0]);
        O.write_shift(2, ref.r);
        O.write_shift(2, ref.r);
        O.write_shift(2, ref.c);
        O.write_shift(2, ref.c);
        var clsid = "d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b".split(" ");
        for (var i = 0; i < 16; ++i) O.write_shift(1, parseInt(clsid[i], 16));
        return bconcat([O, write_Hyperlink(hl[1])]);
      }
      function parse_HLinkTooltip(blob, length) {
        blob.read_shift(2);
        var ref = parse_Ref8U(blob, 8);
        var wzTooltip = blob.read_shift((length - 10) / 2, "dbcs-cont");
        wzTooltip = wzTooltip.replace(chr0, "");
        return [ref, wzTooltip];
      }
      function write_HLinkTooltip(hl) {
        var TT = hl[1].Tooltip;
        var O = new_buf(10 + 2 * (TT.length + 1));
        O.write_shift(2, 2048);
        var ref = decode_cell(hl[0]);
        O.write_shift(2, ref.r);
        O.write_shift(2, ref.r);
        O.write_shift(2, ref.c);
        O.write_shift(2, ref.c);
        for (var i = 0; i < TT.length; ++i) O.write_shift(2, TT.charCodeAt(i));
        O.write_shift(2, 0);
        return O;
      }
      function parse_Country(blob) {
        var o = [0, 0], d;
        d = blob.read_shift(2);
        o[0] = CountryEnum[d] || d;
        d = blob.read_shift(2);
        o[1] = CountryEnum[d] || d;
        return o;
      }
      function write_Country(o) {
        if (!o) o = new_buf(4);
        o.write_shift(2, 1);
        o.write_shift(2, 1);
        return o;
      }
      function parse_ClrtClient(blob) {
        var ccv = blob.read_shift(2);
        var o = [];
        while (ccv-- > 0) o.push(parse_LongRGB(blob, 8));
        return o;
      }
      function parse_Palette(blob) {
        var ccv = blob.read_shift(2);
        var o = [];
        while (ccv-- > 0) o.push(parse_LongRGB(blob, 8));
        return o;
      }
      function parse_XFCRC(blob) {
        blob.l += 2;
        var o = { cxfs: 0, crc: 0 };
        o.cxfs = blob.read_shift(2);
        o.crc = blob.read_shift(4);
        return o;
      }
      function parse_ColInfo(blob, length, opts) {
        if (!opts.cellStyles) return parsenoop(blob, length);
        var w = opts && opts.biff >= 12 ? 4 : 2;
        var colFirst = blob.read_shift(w);
        var colLast = blob.read_shift(w);
        var coldx = blob.read_shift(w);
        var ixfe = blob.read_shift(w);
        var flags = blob.read_shift(2);
        if (w == 2) blob.l += 2;
        var o = { s: colFirst, e: colLast, w: coldx, ixfe, flags };
        if (opts.biff >= 5 || !opts.biff) o.level = flags >> 8 & 7;
        return o;
      }
      function write_ColInfo(col, idx) {
        var o = new_buf(12);
        o.write_shift(2, idx);
        o.write_shift(2, idx);
        o.write_shift(2, col.width * 256);
        o.write_shift(2, 0);
        var f = 0;
        if (col.hidden) f |= 1;
        o.write_shift(1, f);
        f = col.level || 0;
        o.write_shift(1, f);
        o.write_shift(2, 0);
        return o;
      }
      function parse_Setup(blob, length) {
        var o = {};
        if (length < 32) return o;
        blob.l += 16;
        o.header = parse_Xnum(blob, 8);
        o.footer = parse_Xnum(blob, 8);
        blob.l += 2;
        return o;
      }
      function parse_ShtProps(blob, length, opts) {
        var def = { area: false };
        if (opts.biff != 5) {
          blob.l += length;
          return def;
        }
        var d = blob.read_shift(1);
        blob.l += 3;
        if (d & 16) def.area = true;
        return def;
      }
      function write_RRTabId(n) {
        var out = new_buf(2 * n);
        for (var i = 0; i < n; ++i) out.write_shift(2, i + 1);
        return out;
      }
      var parse_Blank = parse_XLSCell;
      var parse_Scl = parseuint16a;
      var parse_String = parse_XLUnicodeString;
      function parse_ImData(blob) {
        var cf = blob.read_shift(2);
        var env = blob.read_shift(2);
        var lcb = blob.read_shift(4);
        var o = { fmt: cf, env, len: lcb, data: blob.slice(blob.l, blob.l + lcb) };
        blob.l += lcb;
        return o;
      }
      function parse_BIFF2STR(blob, length, opts) {
        if (opts.biffguess && opts.biff == 5) opts.biff = 2;
        var cell = parse_XLSCell(blob, 6);
        ++blob.l;
        var str = parse_XLUnicodeString2(blob, length - 7, opts);
        cell.t = "str";
        cell.val = str;
        return cell;
      }
      function parse_BIFF2NUM(blob) {
        var cell = parse_XLSCell(blob, 6);
        ++blob.l;
        var num = parse_Xnum(blob, 8);
        cell.t = "n";
        cell.val = num;
        return cell;
      }
      function write_BIFF2NUM(r, c, val) {
        var out = new_buf(15);
        write_BIFF2Cell(out, r, c);
        out.write_shift(8, val, "f");
        return out;
      }
      function parse_BIFF2INT(blob) {
        var cell = parse_XLSCell(blob, 6);
        ++blob.l;
        var num = blob.read_shift(2);
        cell.t = "n";
        cell.val = num;
        return cell;
      }
      function write_BIFF2INT(r, c, val) {
        var out = new_buf(9);
        write_BIFF2Cell(out, r, c);
        out.write_shift(2, val);
        return out;
      }
      function parse_BIFF2STRING(blob) {
        var cch = blob.read_shift(1);
        if (cch === 0) {
          blob.l++;
          return "";
        }
        return blob.read_shift(cch, "sbcs-cont");
      }
      function parse_BIFF2FONTXTRA(blob, length) {
        blob.l += 6;
        blob.l += 2;
        blob.l += 1;
        blob.l += 3;
        blob.l += 1;
        blob.l += length - 13;
      }
      function parse_RString(blob, length, opts) {
        var end = blob.l + length;
        var cell = parse_XLSCell(blob, 6);
        var cch = blob.read_shift(2);
        var str = parse_XLUnicodeStringNoCch(blob, cch, opts);
        blob.l = end;
        cell.t = "str";
        cell.val = str;
        return cell;
      }
      var DBF_SUPPORTED_VERSIONS = [2, 3, 48, 49, 131, 139, 140, 245];
      var DBF = function() {
        var dbf_codepage_map = {
          /* Code Pages Supported by Visual FoxPro */
          1: 437,
          2: 850,
          3: 1252,
          4: 1e4,
          100: 852,
          101: 866,
          102: 865,
          103: 861,
          104: 895,
          105: 620,
          106: 737,
          107: 857,
          120: 950,
          121: 949,
          122: 936,
          123: 932,
          124: 874,
          125: 1255,
          126: 1256,
          150: 10007,
          151: 10029,
          152: 10006,
          200: 1250,
          201: 1251,
          202: 1254,
          203: 1253,
          /* shapefile DBF extension */
          0: 20127,
          8: 865,
          9: 437,
          10: 850,
          11: 437,
          13: 437,
          14: 850,
          15: 437,
          16: 850,
          17: 437,
          18: 850,
          19: 932,
          20: 850,
          21: 437,
          22: 850,
          23: 865,
          24: 437,
          25: 437,
          26: 850,
          27: 437,
          28: 863,
          29: 850,
          31: 852,
          34: 852,
          35: 852,
          36: 860,
          37: 850,
          38: 866,
          55: 850,
          64: 852,
          77: 936,
          78: 949,
          79: 950,
          80: 874,
          87: 1252,
          88: 1252,
          89: 1252,
          108: 863,
          134: 737,
          135: 852,
          136: 857,
          204: 1257,
          255: 16969
        };
        var dbf_reverse_map = evert({
          1: 437,
          2: 850,
          3: 1252,
          4: 1e4,
          100: 852,
          101: 866,
          102: 865,
          103: 861,
          104: 895,
          105: 620,
          106: 737,
          107: 857,
          120: 950,
          121: 949,
          122: 936,
          123: 932,
          124: 874,
          125: 1255,
          126: 1256,
          150: 10007,
          151: 10029,
          152: 10006,
          200: 1250,
          201: 1251,
          202: 1254,
          203: 1253,
          0: 20127
        });
        function dbf_to_aoa(buf, opts) {
          var out = [];
          var d = new_raw_buf(1);
          switch (opts.type) {
            case "base64":
              d = s2a(Base64_decode(buf));
              break;
            case "binary":
              d = s2a(buf);
              break;
            case "buffer":
            case "array":
              d = buf;
              break;
          }
          prep_blob(d, 0);
          var ft = d.read_shift(1);
          var memo = !!(ft & 136);
          var vfp = false, l7 = false;
          switch (ft) {
            case 2:
              break;
            case 3:
              break;
            case 48:
              vfp = true;
              memo = true;
              break;
            case 49:
              vfp = true;
              memo = true;
              break;
            case 131:
              break;
            case 139:
              break;
            case 140:
              l7 = true;
              break;
            case 245:
              break;
            default:
              throw new Error("DBF Unsupported Version: " + ft.toString(16));
          }
          var nrow = 0, fpos = 521;
          if (ft == 2) nrow = d.read_shift(2);
          d.l += 3;
          if (ft != 2) nrow = d.read_shift(4);
          if (nrow > 1048576) nrow = 1e6;
          if (ft != 2) fpos = d.read_shift(2);
          var rlen = d.read_shift(2);
          var current_cp = opts.codepage || 1252;
          if (ft != 2) {
            d.l += 16;
            d.read_shift(1);
            if (d[d.l] !== 0) current_cp = dbf_codepage_map[d[d.l]];
            d.l += 1;
            d.l += 2;
          }
          if (l7) d.l += 36;
          var fields = [], field = {};
          var hend = Math.min(d.length, ft == 2 ? 521 : fpos - 10 - (vfp ? 264 : 0));
          var ww = l7 ? 32 : 11;
          while (d.l < hend && d[d.l] != 13) {
            field = {};
            field.name = $cptable.utils.decode(current_cp, d.slice(d.l, d.l + ww)).replace(/[\u0000\r\n].*$/g, "");
            d.l += ww;
            field.type = String.fromCharCode(d.read_shift(1));
            if (ft != 2 && !l7) field.offset = d.read_shift(4);
            field.len = d.read_shift(1);
            if (ft == 2) field.offset = d.read_shift(2);
            field.dec = d.read_shift(1);
            if (field.name.length) fields.push(field);
            if (ft != 2) d.l += l7 ? 13 : 14;
            switch (field.type) {
              case "B":
                if ((!vfp || field.len != 8) && opts.WTF) console.log("Skipping " + field.name + ":" + field.type);
                break;
              case "G":
              case "P":
                if (opts.WTF) console.log("Skipping " + field.name + ":" + field.type);
                break;
              case "+":
              case "0":
              case "@":
              case "C":
              case "D":
              case "F":
              case "I":
              case "L":
              case "M":
              case "N":
              case "O":
              case "T":
              case "Y":
                break;
              default:
                throw new Error("Unknown Field Type: " + field.type);
            }
          }
          if (d[d.l] !== 13) d.l = fpos - 1;
          if (d.read_shift(1) !== 13) throw new Error("DBF Terminator not found " + d.l + " " + d[d.l]);
          d.l = fpos;
          var R = 0, C = 0;
          out[0] = [];
          for (C = 0; C != fields.length; ++C) out[0][C] = fields[C].name;
          while (nrow-- > 0) {
            if (d[d.l] === 42) {
              d.l += rlen;
              continue;
            }
            ++d.l;
            out[++R] = [];
            C = 0;
            for (C = 0; C != fields.length; ++C) {
              var dd = d.slice(d.l, d.l + fields[C].len);
              d.l += fields[C].len;
              prep_blob(dd, 0);
              var s = $cptable.utils.decode(current_cp, dd);
              switch (fields[C].type) {
                case "C":
                  if (s.trim().length) out[R][C] = s.replace(/\s+$/, "");
                  break;
                case "D":
                  if (s.length === 8) out[R][C] = new Date(+s.slice(0, 4), +s.slice(4, 6) - 1, +s.slice(6, 8));
                  else out[R][C] = s;
                  break;
                case "F":
                  out[R][C] = parseFloat(s.trim());
                  break;
                case "+":
                case "I":
                  out[R][C] = l7 ? dd.read_shift(-4, "i") ^ 2147483648 : dd.read_shift(4, "i");
                  break;
                case "L":
                  switch (s.trim().toUpperCase()) {
                    case "Y":
                    case "T":
                      out[R][C] = true;
                      break;
                    case "N":
                    case "F":
                      out[R][C] = false;
                      break;
                    case "":
                    case "?":
                      break;
                    default:
                      throw new Error("DBF Unrecognized L:|" + s + "|");
                  }
                  break;
                case "M":
                  if (!memo) throw new Error("DBF Unexpected MEMO for type " + ft.toString(16));
                  out[R][C] = "##MEMO##" + (l7 ? parseInt(s.trim(), 10) : dd.read_shift(4));
                  break;
                case "N":
                  s = s.replace(/\u0000/g, "").trim();
                  if (s && s != ".") out[R][C] = +s || 0;
                  break;
                case "@":
                  out[R][C] = new Date(dd.read_shift(-8, "f") - 621356832e5);
                  break;
                case "T":
                  out[R][C] = new Date((dd.read_shift(4) - 2440588) * 864e5 + dd.read_shift(4));
                  break;
                case "Y":
                  out[R][C] = dd.read_shift(4, "i") / 1e4 + dd.read_shift(4, "i") / 1e4 * Math.pow(2, 32);
                  break;
                case "O":
                  out[R][C] = -dd.read_shift(-8, "f");
                  break;
                case "B":
                  if (vfp && fields[C].len == 8) {
                    out[R][C] = dd.read_shift(8, "f");
                    break;
                  }
                case "G":
                case "P":
                  dd.l += fields[C].len;
                  break;
                case "0":
                  if (fields[C].name === "_NullFlags") break;
                default:
                  throw new Error("DBF Unsupported data type " + fields[C].type);
              }
            }
          }
          if (ft != 2) {
            if (d.l < d.length && d[d.l++] != 26) throw new Error("DBF EOF Marker missing " + (d.l - 1) + " of " + d.length + " " + d[d.l - 1].toString(16));
          }
          if (opts && opts.sheetRows) out = out.slice(0, opts.sheetRows);
          opts.DBF = fields;
          return out;
        }
        function dbf_to_sheet(buf, opts) {
          var o = opts || {};
          if (!o.dateNF) o.dateNF = "yyyymmdd";
          var ws = aoa_to_sheet(dbf_to_aoa(buf, o), o);
          ws["!cols"] = o.DBF.map(function(field) {
            return {
              wch: field.len,
              DBF: field
            };
          });
          delete o.DBF;
          return ws;
        }
        function dbf_to_workbook(buf, opts) {
          try {
            return sheet_to_workbook(dbf_to_sheet(buf, opts), opts);
          } catch (e) {
            if (opts && opts.WTF) throw e;
          }
          return { SheetNames: [], Sheets: {} };
        }
        var _RLEN = { "B": 8, "C": 250, "L": 1, "D": 8, "?": 0, "": 0 };
        function sheet_to_dbf(ws, opts) {
          var o = opts || {};
          if (+o.codepage >= 0) set_cp(+o.codepage);
          if (o.type == "string") throw new Error("Cannot write DBF to JS string");
          var ba = buf_array();
          var aoa = sheet_to_json(ws, { header: 1, raw: true, cellDates: true });
          var headers = aoa[0], data = aoa.slice(1), cols = ws["!cols"] || [];
          var i = 0, j = 0, hcnt = 0, rlen = 1;
          for (i = 0; i < headers.length; ++i) {
            if (((cols[i] || {}).DBF || {}).name) {
              headers[i] = cols[i].DBF.name;
              ++hcnt;
              continue;
            }
            if (headers[i] == null) continue;
            ++hcnt;
            if (typeof headers[i] === "number") headers[i] = headers[i].toString(10);
            if (typeof headers[i] !== "string") throw new Error("DBF Invalid column name " + headers[i] + " |" + typeof headers[i] + "|");
            if (headers.indexOf(headers[i]) !== i) {
              for (j = 0; j < 1024; ++j)
                if (headers.indexOf(headers[i] + "_" + j) == -1) {
                  headers[i] += "_" + j;
                  break;
                }
            }
          }
          var range = safe_decode_range(ws["!ref"]);
          var coltypes = [];
          var colwidths = [];
          var coldecimals = [];
          for (i = 0; i <= range.e.c - range.s.c; ++i) {
            var guess = "", _guess = "", maxlen = 0;
            var col = [];
            for (j = 0; j < data.length; ++j) {
              if (data[j][i] != null) col.push(data[j][i]);
            }
            if (col.length == 0 || headers[i] == null) {
              coltypes[i] = "?";
              continue;
            }
            for (j = 0; j < col.length; ++j) {
              switch (typeof col[j]) {
                case "number":
                  _guess = "B";
                  break;
                case "string":
                  _guess = "C";
                  break;
                case "boolean":
                  _guess = "L";
                  break;
                case "object":
                  _guess = col[j] instanceof Date ? "D" : "C";
                  break;
                default:
                  _guess = "C";
              }
              maxlen = Math.max(maxlen, String(col[j]).length);
              guess = guess && guess != _guess ? "C" : _guess;
            }
            if (maxlen > 250) maxlen = 250;
            _guess = ((cols[i] || {}).DBF || {}).type;
            if (_guess == "C") {
              if (cols[i].DBF.len > maxlen) maxlen = cols[i].DBF.len;
            }
            if (guess == "B" && _guess == "N") {
              guess = "N";
              coldecimals[i] = cols[i].DBF.dec;
              maxlen = cols[i].DBF.len;
            }
            colwidths[i] = guess == "C" || _guess == "N" ? maxlen : _RLEN[guess] || 0;
            rlen += colwidths[i];
            coltypes[i] = guess;
          }
          var h = ba.next(32);
          h.write_shift(4, 318902576);
          h.write_shift(4, data.length);
          h.write_shift(2, 296 + 32 * hcnt);
          h.write_shift(2, rlen);
          for (i = 0; i < 4; ++i) h.write_shift(4, 0);
          h.write_shift(4, 0 | (+dbf_reverse_map[current_ansi] || 3) << 8);
          for (i = 0, j = 0; i < headers.length; ++i) {
            if (headers[i] == null) continue;
            var hf = ba.next(32);
            var _f = (headers[i].slice(-10) + "\0\0\0\0\0\0\0\0\0\0\0").slice(0, 11);
            hf.write_shift(1, _f, "sbcs");
            hf.write_shift(1, coltypes[i] == "?" ? "C" : coltypes[i], "sbcs");
            hf.write_shift(4, j);
            hf.write_shift(1, colwidths[i] || _RLEN[coltypes[i]] || 0);
            hf.write_shift(1, coldecimals[i] || 0);
            hf.write_shift(1, 2);
            hf.write_shift(4, 0);
            hf.write_shift(1, 0);
            hf.write_shift(4, 0);
            hf.write_shift(4, 0);
            j += colwidths[i] || _RLEN[coltypes[i]] || 0;
          }
          var hb = ba.next(264);
          hb.write_shift(4, 13);
          for (i = 0; i < 65; ++i) hb.write_shift(4, 0);
          for (i = 0; i < data.length; ++i) {
            var rout = ba.next(rlen);
            rout.write_shift(1, 0);
            for (j = 0; j < headers.length; ++j) {
              if (headers[j] == null) continue;
              switch (coltypes[j]) {
                case "L":
                  rout.write_shift(1, data[i][j] == null ? 63 : data[i][j] ? 84 : 70);
                  break;
                case "B":
                  rout.write_shift(8, data[i][j] || 0, "f");
                  break;
                case "N":
                  var _n = "0";
                  if (typeof data[i][j] == "number") _n = data[i][j].toFixed(coldecimals[j] || 0);
                  for (hcnt = 0; hcnt < colwidths[j] - _n.length; ++hcnt) rout.write_shift(1, 32);
                  rout.write_shift(1, _n, "sbcs");
                  break;
                case "D":
                  if (!data[i][j]) rout.write_shift(8, "00000000", "sbcs");
                  else {
                    rout.write_shift(4, ("0000" + data[i][j].getFullYear()).slice(-4), "sbcs");
                    rout.write_shift(2, ("00" + (data[i][j].getMonth() + 1)).slice(-2), "sbcs");
                    rout.write_shift(2, ("00" + data[i][j].getDate()).slice(-2), "sbcs");
                  }
                  break;
                case "C":
                  var _s = String(data[i][j] != null ? data[i][j] : "").slice(0, colwidths[j]);
                  rout.write_shift(1, _s, "sbcs");
                  for (hcnt = 0; hcnt < colwidths[j] - _s.length; ++hcnt) rout.write_shift(1, 32);
                  break;
              }
            }
          }
          ba.next(1).write_shift(1, 26);
          return ba.end();
        }
        return {
          to_workbook: dbf_to_workbook,
          to_sheet: dbf_to_sheet,
          from_sheet: sheet_to_dbf
        };
      }();
      var SYLK = function() {
        var sylk_escapes = {
          AA: "\xC0",
          BA: "\xC1",
          CA: "\xC2",
          DA: 195,
          HA: "\xC4",
          JA: 197,
          AE: "\xC8",
          BE: "\xC9",
          CE: "\xCA",
          HE: "\xCB",
          AI: "\xCC",
          BI: "\xCD",
          CI: "\xCE",
          HI: "\xCF",
          AO: "\xD2",
          BO: "\xD3",
          CO: "\xD4",
          DO: 213,
          HO: "\xD6",
          AU: "\xD9",
          BU: "\xDA",
          CU: "\xDB",
          HU: "\xDC",
          Aa: "\xE0",
          Ba: "\xE1",
          Ca: "\xE2",
          Da: 227,
          Ha: "\xE4",
          Ja: 229,
          Ae: "\xE8",
          Be: "\xE9",
          Ce: "\xEA",
          He: "\xEB",
          Ai: "\xEC",
          Bi: "\xED",
          Ci: "\xEE",
          Hi: "\xEF",
          Ao: "\xF2",
          Bo: "\xF3",
          Co: "\xF4",
          Do: 245,
          Ho: "\xF6",
          Au: "\xF9",
          Bu: "\xFA",
          Cu: "\xFB",
          Hu: "\xFC",
          KC: "\xC7",
          Kc: "\xE7",
          q: "\xE6",
          z: "\u0153",
          a: "\xC6",
          j: "\u0152",
          DN: 209,
          Dn: 241,
          Hy: 255,
          S: 169,
          c: 170,
          R: 174,
          "B ": 180,
          0: 176,
          1: 177,
          2: 178,
          3: 179,
          5: 181,
          6: 182,
          7: 183,
          Q: 185,
          k: 186,
          b: 208,
          i: 216,
          l: 222,
          s: 240,
          y: 248,
          "!": 161,
          '"': 162,
          "#": 163,
          "(": 164,
          "%": 165,
          "'": 167,
          "H ": 168,
          "+": 171,
          ";": 187,
          "<": 188,
          "=": 189,
          ">": 190,
          "?": 191,
          "{": 223
        };
        var sylk_char_regex = new RegExp("\x1BN(" + keys(sylk_escapes).join("|").replace(/\|\|\|/, "|\\||").replace(/([?()+])/g, "\\$1") + "|\\|)", "gm");
        var sylk_char_fn = function(_, $1) {
          var o = sylk_escapes[$1];
          return typeof o == "number" ? _getansi(o) : o;
        };
        var decode_sylk_char = function($$, $1, $2) {
          var newcc = $1.charCodeAt(0) - 32 << 4 | $2.charCodeAt(0) - 48;
          return newcc == 59 ? $$ : _getansi(newcc);
        };
        sylk_escapes["|"] = 254;
        function sylk_to_aoa(d, opts) {
          switch (opts.type) {
            case "base64":
              return sylk_to_aoa_str(Base64_decode(d), opts);
            case "binary":
              return sylk_to_aoa_str(d, opts);
            case "buffer":
              return sylk_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString("binary") : a2s(d), opts);
            case "array":
              return sylk_to_aoa_str(cc2str(d), opts);
          }
          throw new Error("Unrecognized type " + opts.type);
        }
        function sylk_to_aoa_str(str, opts) {
          var records = str.split(/[\n\r]+/), R = -1, C = -1, ri = 0, rj = 0, arr = [];
          var formats = [];
          var next_cell_format = null;
          var sht = {}, rowinfo = [], colinfo = [], cw = [];
          var Mval = 0, j;
          if (+opts.codepage >= 0) set_cp(+opts.codepage);
          for (; ri !== records.length; ++ri) {
            Mval = 0;
            var rstr = records[ri].trim().replace(/\x1B([\x20-\x2F])([\x30-\x3F])/g, decode_sylk_char).replace(sylk_char_regex, sylk_char_fn);
            var record = rstr.replace(/;;/g, "\0").split(";").map(function(x) {
              return x.replace(/\u0000/g, ";");
            });
            var RT = record[0], val;
            if (rstr.length > 0) switch (RT) {
              case "ID":
                break;
              case "E":
                break;
              case "B":
                break;
              case "O":
                break;
              case "W":
                break;
              case "P":
                if (record[1].charAt(0) == "P")
                  formats.push(rstr.slice(3).replace(/;;/g, ";"));
                break;
              case "C":
                var C_seen_K = false, C_seen_X = false, C_seen_S = false, C_seen_E = false, _R = -1, _C = -1;
                for (rj = 1; rj < record.length; ++rj) switch (record[rj].charAt(0)) {
                  case "A":
                    break;
                  case "X":
                    C = parseInt(record[rj].slice(1)) - 1;
                    C_seen_X = true;
                    break;
                  case "Y":
                    R = parseInt(record[rj].slice(1)) - 1;
                    if (!C_seen_X) C = 0;
                    for (j = arr.length; j <= R; ++j) arr[j] = [];
                    break;
                  case "K":
                    val = record[rj].slice(1);
                    if (val.charAt(0) === '"') val = val.slice(1, val.length - 1);
                    else if (val === "TRUE") val = true;
                    else if (val === "FALSE") val = false;
                    else if (!isNaN(fuzzynum(val))) {
                      val = fuzzynum(val);
                      if (next_cell_format !== null && fmt_is_date(next_cell_format)) val = numdate(val);
                    } else if (!isNaN(fuzzydate(val).getDate())) {
                      val = parseDate(val);
                    }
                    if (typeof $cptable !== "undefined" && typeof val == "string" && (opts || {}).type != "string" && (opts || {}).codepage) val = $cptable.utils.decode(opts.codepage, val);
                    C_seen_K = true;
                    break;
                  case "E":
                    C_seen_E = true;
                    var formula = rc_to_a1(record[rj].slice(1), { r: R, c: C });
                    arr[R][C] = [arr[R][C], formula];
                    break;
                  case "S":
                    C_seen_S = true;
                    arr[R][C] = [arr[R][C], "S5S"];
                    break;
                  case "G":
                    break;
                  case "R":
                    _R = parseInt(record[rj].slice(1)) - 1;
                    break;
                  case "C":
                    _C = parseInt(record[rj].slice(1)) - 1;
                    break;
                  default:
                    if (opts && opts.WTF) throw new Error("SYLK bad record " + rstr);
                }
                if (C_seen_K) {
                  if (arr[R][C] && arr[R][C].length == 2) arr[R][C][0] = val;
                  else arr[R][C] = val;
                  next_cell_format = null;
                }
                if (C_seen_S) {
                  if (C_seen_E) throw new Error("SYLK shared formula cannot have own formula");
                  var shrbase = _R > -1 && arr[_R][_C];
                  if (!shrbase || !shrbase[1]) throw new Error("SYLK shared formula cannot find base");
                  arr[R][C][1] = shift_formula_str(shrbase[1], { r: R - _R, c: C - _C });
                }
                break;
              case "F":
                var F_seen = 0;
                for (rj = 1; rj < record.length; ++rj) switch (record[rj].charAt(0)) {
                  case "X":
                    C = parseInt(record[rj].slice(1)) - 1;
                    ++F_seen;
                    break;
                  case "Y":
                    R = parseInt(record[rj].slice(1)) - 1;
                    for (j = arr.length; j <= R; ++j) arr[j] = [];
                    break;
                  case "M":
                    Mval = parseInt(record[rj].slice(1)) / 20;
                    break;
                  case "F":
                    break;
                  case "G":
                    break;
                  case "P":
                    next_cell_format = formats[parseInt(record[rj].slice(1))];
                    break;
                  case "S":
                    break;
                  case "D":
                    break;
                  case "N":
                    break;
                  case "W":
                    cw = record[rj].slice(1).split(" ");
                    for (j = parseInt(cw[0], 10); j <= parseInt(cw[1], 10); ++j) {
                      Mval = parseInt(cw[2], 10);
                      colinfo[j - 1] = Mval === 0 ? { hidden: true } : { wch: Mval };
                      process_col(colinfo[j - 1]);
                    }
                    break;
                  case "C":
                    C = parseInt(record[rj].slice(1)) - 1;
                    if (!colinfo[C]) colinfo[C] = {};
                    break;
                  case "R":
                    R = parseInt(record[rj].slice(1)) - 1;
                    if (!rowinfo[R]) rowinfo[R] = {};
                    if (Mval > 0) {
                      rowinfo[R].hpt = Mval;
                      rowinfo[R].hpx = pt2px(Mval);
                    } else if (Mval === 0) rowinfo[R].hidden = true;
                    break;
                  default:
                    if (opts && opts.WTF) throw new Error("SYLK bad record " + rstr);
                }
                if (F_seen < 1) next_cell_format = null;
                break;
              default:
                if (opts && opts.WTF) throw new Error("SYLK bad record " + rstr);
            }
          }
          if (rowinfo.length > 0) sht["!rows"] = rowinfo;
          if (colinfo.length > 0) sht["!cols"] = colinfo;
          if (opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);
          return [arr, sht];
        }
        function sylk_to_sheet(d, opts) {
          var aoasht = sylk_to_aoa(d, opts);
          var aoa = aoasht[0], ws = aoasht[1];
          var o = aoa_to_sheet(aoa, opts);
          keys(ws).forEach(function(k) {
            o[k] = ws[k];
          });
          return o;
        }
        function sylk_to_workbook(d, opts) {
          return sheet_to_workbook(sylk_to_sheet(d, opts), opts);
        }
        function write_ws_cell_sylk(cell, ws, R, C) {
          var o = "C;Y" + (R + 1) + ";X" + (C + 1) + ";K";
          switch (cell.t) {
            case "n":
              o += cell.v || 0;
              if (cell.f && !cell.F) o += ";E" + a1_to_rc(cell.f, { r: R, c: C });
              break;
            case "b":
              o += cell.v ? "TRUE" : "FALSE";
              break;
            case "e":
              o += cell.w || cell.v;
              break;
            case "d":
              o += '"' + (cell.w || cell.v) + '"';
              break;
            case "s":
              o += '"' + cell.v.replace(/"/g, "").replace(/;/g, ";;") + '"';
              break;
          }
          return o;
        }
        function write_ws_cols_sylk(out, cols) {
          cols.forEach(function(col, i) {
            var rec = "F;W" + (i + 1) + " " + (i + 1) + " ";
            if (col.hidden) rec += "0";
            else {
              if (typeof col.width == "number" && !col.wpx) col.wpx = width2px(col.width);
              if (typeof col.wpx == "number" && !col.wch) col.wch = px2char(col.wpx);
              if (typeof col.wch == "number") rec += Math.round(col.wch);
            }
            if (rec.charAt(rec.length - 1) != " ") out.push(rec);
          });
        }
        function write_ws_rows_sylk(out, rows) {
          rows.forEach(function(row, i) {
            var rec = "F;";
            if (row.hidden) rec += "M0;";
            else if (row.hpt) rec += "M" + 20 * row.hpt + ";";
            else if (row.hpx) rec += "M" + 20 * px2pt(row.hpx) + ";";
            if (rec.length > 2) out.push(rec + "R" + (i + 1));
          });
        }
        function sheet_to_sylk(ws, opts) {
          var preamble = ["ID;PWXL;N;E"], o = [];
          var r = safe_decode_range(ws["!ref"]), cell;
          var dense = Array.isArray(ws);
          var RS = "\r\n";
          preamble.push("P;PGeneral");
          preamble.push("F;P0;DG0G8;M255");
          if (ws["!cols"]) write_ws_cols_sylk(preamble, ws["!cols"]);
          if (ws["!rows"]) write_ws_rows_sylk(preamble, ws["!rows"]);
          preamble.push("B;Y" + (r.e.r - r.s.r + 1) + ";X" + (r.e.c - r.s.c + 1) + ";D" + [r.s.c, r.s.r, r.e.c, r.e.r].join(" "));
          for (var R = r.s.r; R <= r.e.r; ++R) {
            for (var C = r.s.c; C <= r.e.c; ++C) {
              var coord = encode_cell({ r: R, c: C });
              cell = dense ? (ws[R] || [])[C] : ws[coord];
              if (!cell || cell.v == null && (!cell.f || cell.F)) continue;
              o.push(write_ws_cell_sylk(cell, ws, R, C, opts));
            }
          }
          return preamble.join(RS) + RS + o.join(RS) + RS + "E" + RS;
        }
        return {
          to_workbook: sylk_to_workbook,
          to_sheet: sylk_to_sheet,
          from_sheet: sheet_to_sylk
        };
      }();
      var DIF = /* @__PURE__ */ function() {
        function dif_to_aoa(d, opts) {
          switch (opts.type) {
            case "base64":
              return dif_to_aoa_str(Base64_decode(d), opts);
            case "binary":
              return dif_to_aoa_str(d, opts);
            case "buffer":
              return dif_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString("binary") : a2s(d), opts);
            case "array":
              return dif_to_aoa_str(cc2str(d), opts);
          }
          throw new Error("Unrecognized type " + opts.type);
        }
        function dif_to_aoa_str(str, opts) {
          var records = str.split("\n"), R = -1, C = -1, ri = 0, arr = [];
          for (; ri !== records.length; ++ri) {
            if (records[ri].trim() === "BOT") {
              arr[++R] = [];
              C = 0;
              continue;
            }
            if (R < 0) continue;
            var metadata = records[ri].trim().split(",");
            var type = metadata[0], value = metadata[1];
            ++ri;
            var data = records[ri] || "";
            while ((data.match(/["]/g) || []).length & 1 && ri < records.length - 1) data += "\n" + records[++ri];
            data = data.trim();
            switch (+type) {
              case -1:
                if (data === "BOT") {
                  arr[++R] = [];
                  C = 0;
                  continue;
                } else if (data !== "EOD") throw new Error("Unrecognized DIF special command " + data);
                break;
              case 0:
                if (data === "TRUE") arr[R][C] = true;
                else if (data === "FALSE") arr[R][C] = false;
                else if (!isNaN(fuzzynum(value))) arr[R][C] = fuzzynum(value);
                else if (!isNaN(fuzzydate(value).getDate())) arr[R][C] = parseDate(value);
                else arr[R][C] = value;
                ++C;
                break;
              case 1:
                data = data.slice(1, data.length - 1);
                data = data.replace(/""/g, '"');
                if (DIF_XL && data && data.match(/^=".*"$/)) data = data.slice(2, -1);
                arr[R][C++] = data !== "" ? data : null;
                break;
            }
            if (data === "EOD") break;
          }
          if (opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);
          return arr;
        }
        function dif_to_sheet(str, opts) {
          return aoa_to_sheet(dif_to_aoa(str, opts), opts);
        }
        function dif_to_workbook(str, opts) {
          return sheet_to_workbook(dif_to_sheet(str, opts), opts);
        }
        var sheet_to_dif = /* @__PURE__ */ function() {
          var push_field = function pf(o, topic, v, n, s) {
            o.push(topic);
            o.push(v + "," + n);
            o.push('"' + s.replace(/"/g, '""') + '"');
          };
          var push_value = function po(o, type, v, s) {
            o.push(type + "," + v);
            o.push(type == 1 ? '"' + s.replace(/"/g, '""') + '"' : s);
          };
          return function sheet_to_dif2(ws) {
            var o = [];
            var r = safe_decode_range(ws["!ref"]), cell;
            var dense = Array.isArray(ws);
            push_field(o, "TABLE", 0, 1, "sheetjs");
            push_field(o, "VECTORS", 0, r.e.r - r.s.r + 1, "");
            push_field(o, "TUPLES", 0, r.e.c - r.s.c + 1, "");
            push_field(o, "DATA", 0, 0, "");
            for (var R = r.s.r; R <= r.e.r; ++R) {
              push_value(o, -1, 0, "BOT");
              for (var C = r.s.c; C <= r.e.c; ++C) {
                var coord = encode_cell({ r: R, c: C });
                cell = dense ? (ws[R] || [])[C] : ws[coord];
                if (!cell) {
                  push_value(o, 1, 0, "");
                  continue;
                }
                switch (cell.t) {
                  case "n":
                    var val = DIF_XL ? cell.w : cell.v;
                    if (!val && cell.v != null) val = cell.v;
                    if (val == null) {
                      if (DIF_XL && cell.f && !cell.F) push_value(o, 1, 0, "=" + cell.f);
                      else push_value(o, 1, 0, "");
                    } else push_value(o, 0, val, "V");
                    break;
                  case "b":
                    push_value(o, 0, cell.v ? 1 : 0, cell.v ? "TRUE" : "FALSE");
                    break;
                  case "s":
                    push_value(o, 1, 0, !DIF_XL || isNaN(cell.v) ? cell.v : '="' + cell.v + '"');
                    break;
                  case "d":
                    if (!cell.w) cell.w = SSF_format(cell.z || table_fmt[14], datenum(parseDate(cell.v)));
                    if (DIF_XL) push_value(o, 0, cell.w, "V");
                    else push_value(o, 1, 0, cell.w);
                    break;
                  default:
                    push_value(o, 1, 0, "");
                }
              }
            }
            push_value(o, -1, 0, "EOD");
            var RS = "\r\n";
            var oo = o.join(RS);
            return oo;
          };
        }();
        return {
          to_workbook: dif_to_workbook,
          to_sheet: dif_to_sheet,
          from_sheet: sheet_to_dif
        };
      }();
      var ETH = function() {
        function decode(s) {
          return s.replace(/\\b/g, "\\").replace(/\\c/g, ":").replace(/\\n/g, "\n");
        }
        function encode(s) {
          return s.replace(/\\/g, "\\b").replace(/:/g, "\\c").replace(/\n/g, "\\n");
        }
        function eth_to_aoa(str, opts) {
          var records = str.split("\n"), R = -1, C = -1, ri = 0, arr = [];
          for (; ri !== records.length; ++ri) {
            var record = records[ri].trim().split(":");
            if (record[0] !== "cell") continue;
            var addr = decode_cell(record[1]);
            if (arr.length <= addr.r) {
              for (R = arr.length; R <= addr.r; ++R) if (!arr[R]) arr[R] = [];
            }
            R = addr.r;
            C = addr.c;
            switch (record[2]) {
              case "t":
                arr[R][C] = decode(record[3]);
                break;
              case "v":
                arr[R][C] = +record[3];
                break;
              case "vtf":
                var _f = record[record.length - 1];
              case "vtc":
                switch (record[3]) {
                  case "nl":
                    arr[R][C] = +record[4] ? true : false;
                    break;
                  default:
                    arr[R][C] = +record[4];
                    break;
                }
                if (record[2] == "vtf") arr[R][C] = [arr[R][C], _f];
            }
          }
          if (opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);
          return arr;
        }
        function eth_to_sheet(d, opts) {
          return aoa_to_sheet(eth_to_aoa(d, opts), opts);
        }
        function eth_to_workbook(d, opts) {
          return sheet_to_workbook(eth_to_sheet(d, opts), opts);
        }
        var header = [
          "socialcalc:version:1.5",
          "MIME-Version: 1.0",
          "Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave"
        ].join("\n");
        var sep = [
          "--SocialCalcSpreadsheetControlSave",
          "Content-type: text/plain; charset=UTF-8"
        ].join("\n") + "\n";
        var meta = [
          "# SocialCalc Spreadsheet Control Save",
          "part:sheet"
        ].join("\n");
        var end = "--SocialCalcSpreadsheetControlSave--";
        function sheet_to_eth_data(ws) {
          if (!ws || !ws["!ref"]) return "";
          var o = [], oo = [], cell, coord = "";
          var r = decode_range(ws["!ref"]);
          var dense = Array.isArray(ws);
          for (var R = r.s.r; R <= r.e.r; ++R) {
            for (var C = r.s.c; C <= r.e.c; ++C) {
              coord = encode_cell({ r: R, c: C });
              cell = dense ? (ws[R] || [])[C] : ws[coord];
              if (!cell || cell.v == null || cell.t === "z") continue;
              oo = ["cell", coord, "t"];
              switch (cell.t) {
                case "s":
                case "str":
                  oo.push(encode(cell.v));
                  break;
                case "n":
                  if (!cell.f) {
                    oo[2] = "v";
                    oo[3] = cell.v;
                  } else {
                    oo[2] = "vtf";
                    oo[3] = "n";
                    oo[4] = cell.v;
                    oo[5] = encode(cell.f);
                  }
                  break;
                case "b":
                  oo[2] = "vt" + (cell.f ? "f" : "c");
                  oo[3] = "nl";
                  oo[4] = cell.v ? "1" : "0";
                  oo[5] = encode(cell.f || (cell.v ? "TRUE" : "FALSE"));
                  break;
                case "d":
                  var t = datenum(parseDate(cell.v));
                  oo[2] = "vtc";
                  oo[3] = "nd";
                  oo[4] = "" + t;
                  oo[5] = cell.w || SSF_format(cell.z || table_fmt[14], t);
                  break;
                case "e":
                  continue;
              }
              o.push(oo.join(":"));
            }
          }
          o.push("sheet:c:" + (r.e.c - r.s.c + 1) + ":r:" + (r.e.r - r.s.r + 1) + ":tvf:1");
          o.push("valueformat:1:text-wiki");
          return o.join("\n");
        }
        function sheet_to_eth(ws) {
          return [header, sep, meta, sep, sheet_to_eth_data(ws), end].join("\n");
        }
        return {
          to_workbook: eth_to_workbook,
          to_sheet: eth_to_sheet,
          from_sheet: sheet_to_eth
        };
      }();
      var PRN = /* @__PURE__ */ function() {
        function set_text_arr(data, arr, R, C, o) {
          if (o.raw) arr[R][C] = data;
          else if (data === "") {
          } else if (data === "TRUE") arr[R][C] = true;
          else if (data === "FALSE") arr[R][C] = false;
          else if (!isNaN(fuzzynum(data))) arr[R][C] = fuzzynum(data);
          else if (!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate(data);
          else arr[R][C] = data;
        }
        function prn_to_aoa_str(f, opts) {
          var o = opts || {};
          var arr = [];
          if (!f || f.length === 0) return arr;
          var lines = f.split(/[\r\n]/);
          var L = lines.length - 1;
          while (L >= 0 && lines[L].length === 0) --L;
          var start = 10, idx = 0;
          var R = 0;
          for (; R <= L; ++R) {
            idx = lines[R].indexOf(" ");
            if (idx == -1) idx = lines[R].length;
            else idx++;
            start = Math.max(start, idx);
          }
          for (R = 0; R <= L; ++R) {
            arr[R] = [];
            var C = 0;
            set_text_arr(lines[R].slice(0, start).trim(), arr, R, C, o);
            for (C = 1; C <= (lines[R].length - start) / 10 + 1; ++C)
              set_text_arr(lines[R].slice(start + (C - 1) * 10, start + C * 10).trim(), arr, R, C, o);
          }
          if (o.sheetRows) arr = arr.slice(0, o.sheetRows);
          return arr;
        }
        var guess_seps = {
          44: ",",
          9: "	",
          59: ";",
          124: "|"
        };
        var guess_sep_weights = {
          44: 3,
          9: 2,
          59: 1,
          124: 0
        };
        function guess_sep(str) {
          var cnt = {}, instr = false, end = 0, cc = 0;
          for (; end < str.length; ++end) {
            if ((cc = str.charCodeAt(end)) == 34) instr = !instr;
            else if (!instr && cc in guess_seps) cnt[cc] = (cnt[cc] || 0) + 1;
          }
          cc = [];
          for (end in cnt) if (Object.prototype.hasOwnProperty.call(cnt, end)) {
            cc.push([cnt[end], end]);
          }
          if (!cc.length) {
            cnt = guess_sep_weights;
            for (end in cnt) if (Object.prototype.hasOwnProperty.call(cnt, end)) {
              cc.push([cnt[end], end]);
            }
          }
          cc.sort(function(a, b) {
            return a[0] - b[0] || guess_sep_weights[a[1]] - guess_sep_weights[b[1]];
          });
          return guess_seps[cc.pop()[1]] || 44;
        }
        function dsv_to_sheet_str(str, opts) {
          var o = opts || {};
          var sep = "";
          if (DENSE != null && o.dense == null) o.dense = DENSE;
          var ws = o.dense ? [] : {};
          var range = { s: { c: 0, r: 0 }, e: { c: 0, r: 0 } };
          if (str.slice(0, 4) == "sep=") {
            if (str.charCodeAt(5) == 13 && str.charCodeAt(6) == 10) {
              sep = str.charAt(4);
              str = str.slice(7);
            } else if (str.charCodeAt(5) == 13 || str.charCodeAt(5) == 10) {
              sep = str.charAt(4);
              str = str.slice(6);
            } else sep = guess_sep(str.slice(0, 1024));
          } else if (o && o.FS) sep = o.FS;
          else sep = guess_sep(str.slice(0, 1024));
          var R = 0, C = 0, v = 0;
          var start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc = 0, startcc = str.charCodeAt(0);
          str = str.replace(/\r\n/mg, "\n");
          var _re = o.dateNF != null ? dateNF_regex(o.dateNF) : null;
          function finish_cell() {
            var s = str.slice(start, end);
            var cell = {};
            if (s.charAt(0) == '"' && s.charAt(s.length - 1) == '"') s = s.slice(1, -1).replace(/""/g, '"');
            if (s.length === 0) cell.t = "z";
            else if (o.raw) {
              cell.t = "s";
              cell.v = s;
            } else if (s.trim().length === 0) {
              cell.t = "s";
              cell.v = s;
            } else if (s.charCodeAt(0) == 61) {
              if (s.charCodeAt(1) == 34 && s.charCodeAt(s.length - 1) == 34) {
                cell.t = "s";
                cell.v = s.slice(2, -1).replace(/""/g, '"');
              } else if (fuzzyfmla(s)) {
                cell.t = "n";
                cell.f = s.slice(1);
              } else {
                cell.t = "s";
                cell.v = s;
              }
            } else if (s == "TRUE") {
              cell.t = "b";
              cell.v = true;
            } else if (s == "FALSE") {
              cell.t = "b";
              cell.v = false;
            } else if (!isNaN(v = fuzzynum(s))) {
              cell.t = "n";
              if (o.cellText !== false) cell.w = s;
              cell.v = v;
            } else if (!isNaN(fuzzydate(s).getDate()) || _re && s.match(_re)) {
              cell.z = o.dateNF || table_fmt[14];
              var k = 0;
              if (_re && s.match(_re)) {
                s = dateNF_fix(s, o.dateNF, s.match(_re) || []);
                k = 1;
              }
              if (o.cellDates) {
                cell.t = "d";
                cell.v = parseDate(s, k);
              } else {
                cell.t = "n";
                cell.v = datenum(parseDate(s, k));
              }
              if (o.cellText !== false) cell.w = SSF_format(cell.z, cell.v instanceof Date ? datenum(cell.v) : cell.v);
              if (!o.cellNF) delete cell.z;
            } else {
              cell.t = "s";
              cell.v = s;
            }
            if (cell.t == "z") {
            } else if (o.dense) {
              if (!ws[R]) ws[R] = [];
              ws[R][C] = cell;
            } else ws[encode_cell({ c: C, r: R })] = cell;
            start = end + 1;
            startcc = str.charCodeAt(start);
            if (range.e.c < C) range.e.c = C;
            if (range.e.r < R) range.e.r = R;
            if (cc == sepcc) ++C;
            else {
              C = 0;
              ++R;
              if (o.sheetRows && o.sheetRows <= R) return true;
            }
          }
          outer: for (; end < str.length; ++end) switch (cc = str.charCodeAt(end)) {
            case 34:
              if (startcc === 34) instr = !instr;
              break;
            case sepcc:
            case 10:
            case 13:
              if (!instr && finish_cell()) break outer;
              break;
            default:
              break;
          }
          if (end - start > 0) finish_cell();
          ws["!ref"] = encode_range(range);
          return ws;
        }
        function prn_to_sheet_str(str, opts) {
          if (!(opts && opts.PRN)) return dsv_to_sheet_str(str, opts);
          if (opts.FS) return dsv_to_sheet_str(str, opts);
          if (str.slice(0, 4) == "sep=") return dsv_to_sheet_str(str, opts);
          if (str.indexOf("	") >= 0 || str.indexOf(",") >= 0 || str.indexOf(";") >= 0) return dsv_to_sheet_str(str, opts);
          return aoa_to_sheet(prn_to_aoa_str(str, opts), opts);
        }
        function prn_to_sheet(d, opts) {
          var str = "", bytes = opts.type == "string" ? [0, 0, 0, 0] : firstbyte(d, opts);
          switch (opts.type) {
            case "base64":
              str = Base64_decode(d);
              break;
            case "binary":
              str = d;
              break;
            case "buffer":
              if (opts.codepage == 65001) str = d.toString("utf8");
              else if (opts.codepage && typeof $cptable !== "undefined") str = $cptable.utils.decode(opts.codepage, d);
              else str = has_buf && Buffer.isBuffer(d) ? d.toString("binary") : a2s(d);
              break;
            case "array":
              str = cc2str(d);
              break;
            case "string":
              str = d;
              break;
            default:
              throw new Error("Unrecognized type " + opts.type);
          }
          if (bytes[0] == 239 && bytes[1] == 187 && bytes[2] == 191) str = utf8read(str.slice(3));
          else if (opts.type != "string" && opts.type != "buffer" && opts.codepage == 65001) str = utf8read(str);
          else if (opts.type == "binary" && typeof $cptable !== "undefined" && opts.codepage) str = $cptable.utils.decode(opts.codepage, $cptable.utils.encode(28591, str));
          if (str.slice(0, 19) == "socialcalc:version:") return ETH.to_sheet(opts.type == "string" ? str : utf8read(str), opts);
          return prn_to_sheet_str(str, opts);
        }
        function prn_to_workbook(d, opts) {
          return sheet_to_workbook(prn_to_sheet(d, opts), opts);
        }
        function sheet_to_prn(ws) {
          var o = [];
          var r = safe_decode_range(ws["!ref"]), cell;
          var dense = Array.isArray(ws);
          for (var R = r.s.r; R <= r.e.r; ++R) {
            var oo = [];
            for (var C = r.s.c; C <= r.e.c; ++C) {
              var coord = encode_cell({ r: R, c: C });
              cell = dense ? (ws[R] || [])[C] : ws[coord];
              if (!cell || cell.v == null) {
                oo.push("          ");
                continue;
              }
              var w = (cell.w || (format_cell(cell), cell.w) || "").slice(0, 10);
              while (w.length < 10) w += " ";
              oo.push(w + (C === 0 ? " " : ""));
            }
            o.push(oo.join(""));
          }
          return o.join("\n");
        }
        return {
          to_workbook: prn_to_workbook,
          to_sheet: prn_to_sheet,
          from_sheet: sheet_to_prn
        };
      }();
      function read_wb_ID(d, opts) {
        var o = opts || {}, OLD_WTF = !!o.WTF;
        o.WTF = true;
        try {
          var out = SYLK.to_workbook(d, o);
          o.WTF = OLD_WTF;
          return out;
        } catch (e) {
          o.WTF = OLD_WTF;
          if (!e.message.match(/SYLK bad record ID/) && OLD_WTF) throw e;
          return PRN.to_workbook(d, opts);
        }
      }
      var WK_ = /* @__PURE__ */ function() {
        function lotushopper(data, cb, opts) {
          if (!data) return;
          prep_blob(data, data.l || 0);
          var Enum = opts.Enum || WK1Enum;
          while (data.l < data.length) {
            var RT = data.read_shift(2);
            var R = Enum[RT] || Enum[65535];
            var length = data.read_shift(2);
            var tgt = data.l + length;
            var d = R.f && R.f(data, length, opts);
            data.l = tgt;
            if (cb(d, R, RT)) return;
          }
        }
        function lotus_to_workbook(d, opts) {
          switch (opts.type) {
            case "base64":
              return lotus_to_workbook_buf(s2a(Base64_decode(d)), opts);
            case "binary":
              return lotus_to_workbook_buf(s2a(d), opts);
            case "buffer":
            case "array":
              return lotus_to_workbook_buf(d, opts);
          }
          throw "Unsupported type " + opts.type;
        }
        function lotus_to_workbook_buf(d, opts) {
          if (!d) return d;
          var o = opts || {};
          if (DENSE != null && o.dense == null) o.dense = DENSE;
          var s = o.dense ? [] : {}, n = "Sheet1", next_n = "", sidx = 0;
          var sheets = {}, snames = [], realnames = [];
          var refguess = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } };
          var sheetRows = o.sheetRows || 0;
          if (d[2] == 0) {
            if (d[3] == 8 || d[3] == 9) {
              if (d.length >= 16 && d[14] == 5 && d[15] === 108) throw new Error("Unsupported Works 3 for Mac file");
            }
          }
          if (d[2] == 2) {
            o.Enum = WK1Enum;
            lotushopper(d, function(val, R, RT) {
              switch (RT) {
                case 0:
                  o.vers = val;
                  if (val >= 4096) o.qpro = true;
                  break;
                case 6:
                  refguess = val;
                  break;
                case 204:
                  if (val) next_n = val;
                  break;
                case 222:
                  next_n = val;
                  break;
                case 15:
                case 51:
                  if (!o.qpro) val[1].v = val[1].v.slice(1);
                case 13:
                case 14:
                case 16:
                  if (RT == 14 && (val[2] & 112) == 112 && (val[2] & 15) > 1 && (val[2] & 15) < 15) {
                    val[1].z = o.dateNF || table_fmt[14];
                    if (o.cellDates) {
                      val[1].t = "d";
                      val[1].v = numdate(val[1].v);
                    }
                  }
                  if (o.qpro) {
                    if (val[3] > sidx) {
                      s["!ref"] = encode_range(refguess);
                      sheets[n] = s;
                      snames.push(n);
                      s = o.dense ? [] : {};
                      refguess = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } };
                      sidx = val[3];
                      n = next_n || "Sheet" + (sidx + 1);
                      next_n = "";
                    }
                  }
                  var tmpcell = o.dense ? (s[val[0].r] || [])[val[0].c] : s[encode_cell(val[0])];
                  if (tmpcell) {
                    tmpcell.t = val[1].t;
                    tmpcell.v = val[1].v;
                    if (val[1].z != null) tmpcell.z = val[1].z;
                    if (val[1].f != null) tmpcell.f = val[1].f;
                    break;
                  }
                  if (o.dense) {
                    if (!s[val[0].r]) s[val[0].r] = [];
                    s[val[0].r][val[0].c] = val[1];
                  } else s[encode_cell(val[0])] = val[1];
                  break;
                default:
              }
            }, o);
          } else if (d[2] == 26 || d[2] == 14) {
            o.Enum = WK3Enum;
            if (d[2] == 14) {
              o.qpro = true;
              d.l = 0;
            }
            lotushopper(d, function(val, R, RT) {
              switch (RT) {
                case 204:
                  n = val;
                  break;
                case 22:
                  val[1].v = val[1].v.slice(1);
                case 23:
                case 24:
                case 25:
                case 37:
                case 39:
                case 40:
                  if (val[3] > sidx) {
                    s["!ref"] = encode_range(refguess);
                    sheets[n] = s;
                    snames.push(n);
                    s = o.dense ? [] : {};
                    refguess = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } };
                    sidx = val[3];
                    n = "Sheet" + (sidx + 1);
                  }
                  if (sheetRows > 0 && val[0].r >= sheetRows) break;
                  if (o.dense) {
                    if (!s[val[0].r]) s[val[0].r] = [];
                    s[val[0].r][val[0].c] = val[1];
                  } else s[encode_cell(val[0])] = val[1];
                  if (refguess.e.c < val[0].c) refguess.e.c = val[0].c;
                  if (refguess.e.r < val[0].r) refguess.e.r = val[0].r;
                  break;
                case 27:
                  if (val[14e3]) realnames[val[14e3][0]] = val[14e3][1];
                  break;
                case 1537:
                  realnames[val[0]] = val[1];
                  if (val[0] == sidx) n = val[1];
                  break;
                default:
                  break;
              }
            }, o);
          } else throw new Error("Unrecognized LOTUS BOF " + d[2]);
          s["!ref"] = encode_range(refguess);
          sheets[next_n || n] = s;
          snames.push(next_n || n);
          if (!realnames.length) return { SheetNames: snames, Sheets: sheets };
          var osheets = {}, rnames = [];
          for (var i = 0; i < realnames.length; ++i) if (sheets[snames[i]]) {
            rnames.push(realnames[i] || snames[i]);
            osheets[realnames[i]] = sheets[realnames[i]] || sheets[snames[i]];
          } else {
            rnames.push(realnames[i]);
            osheets[realnames[i]] = { "!ref": "A1" };
          }
          return { SheetNames: rnames, Sheets: osheets };
        }
        function sheet_to_wk1(ws, opts) {
          var o = opts || {};
          if (+o.codepage >= 0) set_cp(+o.codepage);
          if (o.type == "string") throw new Error("Cannot write WK1 to JS string");
          var ba = buf_array();
          var range = safe_decode_range(ws["!ref"]);
          var dense = Array.isArray(ws);
          var cols = [];
          write_biff_rec(ba, 0, write_BOF_WK1(1030));
          write_biff_rec(ba, 6, write_RANGE(range));
          var max_R = Math.min(range.e.r, 8191);
          for (var R = range.s.r; R <= max_R; ++R) {
            var rr = encode_row(R);
            for (var C = range.s.c; C <= range.e.c; ++C) {
              if (R === range.s.r) cols[C] = encode_col(C);
              var ref = cols[C] + rr;
              var cell = dense ? (ws[R] || [])[C] : ws[ref];
              if (!cell || cell.t == "z") continue;
              if (cell.t == "n") {
                if ((cell.v | 0) == cell.v && cell.v >= -32768 && cell.v <= 32767) write_biff_rec(ba, 13, write_INTEGER(R, C, cell.v));
                else write_biff_rec(ba, 14, write_NUMBER(R, C, cell.v));
              } else {
                var str = format_cell(cell);
                write_biff_rec(ba, 15, write_LABEL(R, C, str.slice(0, 239)));
              }
            }
          }
          write_biff_rec(ba, 1);
          return ba.end();
        }
        function book_to_wk3(wb, opts) {
          var o = opts || {};
          if (+o.codepage >= 0) set_cp(+o.codepage);
          if (o.type == "string") throw new Error("Cannot write WK3 to JS string");
          var ba = buf_array();
          write_biff_rec(ba, 0, write_BOF_WK3(wb));
          for (var i = 0, cnt = 0; i < wb.SheetNames.length; ++i) if ((wb.Sheets[wb.SheetNames[i]] || {})["!ref"]) write_biff_rec(ba, 27, write_XFORMAT_SHEETNAME(wb.SheetNames[i], cnt++));
          var wsidx = 0;
          for (i = 0; i < wb.SheetNames.length; ++i) {
            var ws = wb.Sheets[wb.SheetNames[i]];
            if (!ws || !ws["!ref"]) continue;
            var range = safe_decode_range(ws["!ref"]);
            var dense = Array.isArray(ws);
            var cols = [];
            var max_R = Math.min(range.e.r, 8191);
            for (var R = range.s.r; R <= max_R; ++R) {
              var rr = encode_row(R);
              for (var C = range.s.c; C <= range.e.c; ++C) {
                if (R === range.s.r) cols[C] = encode_col(C);
                var ref = cols[C] + rr;
                var cell = dense ? (ws[R] || [])[C] : ws[ref];
                if (!cell || cell.t == "z") continue;
                if (cell.t == "n") {
                  write_biff_rec(ba, 23, write_NUMBER_17(R, C, wsidx, cell.v));
                } else {
                  var str = format_cell(cell);
                  write_biff_rec(ba, 22, write_LABEL_16(R, C, wsidx, str.slice(0, 239)));
                }
              }
            }
            ++wsidx;
          }
          write_biff_rec(ba, 1);
          return ba.end();
        }
        function write_BOF_WK1(v) {
          var out = new_buf(2);
          out.write_shift(2, v);
          return out;
        }
        function write_BOF_WK3(wb) {
          var out = new_buf(26);
          out.write_shift(2, 4096);
          out.write_shift(2, 4);
          out.write_shift(4, 0);
          var rows = 0, cols = 0, wscnt = 0;
          for (var i = 0; i < wb.SheetNames.length; ++i) {
            var name = wb.SheetNames[i];
            var ws = wb.Sheets[name];
            if (!ws || !ws["!ref"]) continue;
            ++wscnt;
            var range = decode_range(ws["!ref"]);
            if (rows < range.e.r) rows = range.e.r;
            if (cols < range.e.c) cols = range.e.c;
          }
          if (rows > 8191) rows = 8191;
          out.write_shift(2, rows);
          out.write_shift(1, wscnt);
          out.write_shift(1, cols);
          out.write_shift(2, 0);
          out.write_shift(2, 0);
          out.write_shift(1, 1);
          out.write_shift(1, 2);
          out.write_shift(4, 0);
          out.write_shift(4, 0);
          return out;
        }
        function parse_RANGE(blob, length, opts) {
          var o = { s: { c: 0, r: 0 }, e: { c: 0, r: 0 } };
          if (length == 8 && opts.qpro) {
            o.s.c = blob.read_shift(1);
            blob.l++;
            o.s.r = blob.read_shift(2);
            o.e.c = blob.read_shift(1);
            blob.l++;
            o.e.r = blob.read_shift(2);
            return o;
          }
          o.s.c = blob.read_shift(2);
          o.s.r = blob.read_shift(2);
          if (length == 12 && opts.qpro) blob.l += 2;
          o.e.c = blob.read_shift(2);
          o.e.r = blob.read_shift(2);
          if (length == 12 && opts.qpro) blob.l += 2;
          if (o.s.c == 65535) o.s.c = o.e.c = o.s.r = o.e.r = 0;
          return o;
        }
        function write_RANGE(range) {
          var out = new_buf(8);
          out.write_shift(2, range.s.c);
          out.write_shift(2, range.s.r);
          out.write_shift(2, range.e.c);
          out.write_shift(2, range.e.r);
          return out;
        }
        function parse_cell(blob, length, opts) {
          var o = [{ c: 0, r: 0 }, { t: "n", v: 0 }, 0, 0];
          if (opts.qpro && opts.vers != 20768) {
            o[0].c = blob.read_shift(1);
            o[3] = blob.read_shift(1);
            o[0].r = blob.read_shift(2);
            blob.l += 2;
          } else {
            o[2] = blob.read_shift(1);
            o[0].c = blob.read_shift(2);
            o[0].r = blob.read_shift(2);
          }
          return o;
        }
        function parse_LABEL(blob, length, opts) {
          var tgt = blob.l + length;
          var o = parse_cell(blob, length, opts);
          o[1].t = "s";
          if (opts.vers == 20768) {
            blob.l++;
            var len = blob.read_shift(1);
            o[1].v = blob.read_shift(len, "utf8");
            return o;
          }
          if (opts.qpro) blob.l++;
          o[1].v = blob.read_shift(tgt - blob.l, "cstr");
          return o;
        }
        function write_LABEL(R, C, s) {
          var o = new_buf(7 + s.length);
          o.write_shift(1, 255);
          o.write_shift(2, C);
          o.write_shift(2, R);
          o.write_shift(1, 39);
          for (var i = 0; i < o.length; ++i) {
            var cc = s.charCodeAt(i);
            o.write_shift(1, cc >= 128 ? 95 : cc);
          }
          o.write_shift(1, 0);
          return o;
        }
        function parse_INTEGER(blob, length, opts) {
          var o = parse_cell(blob, length, opts);
          o[1].v = blob.read_shift(2, "i");
          return o;
        }
        function write_INTEGER(R, C, v) {
          var o = new_buf(7);
          o.write_shift(1, 255);
          o.write_shift(2, C);
          o.write_shift(2, R);
          o.write_shift(2, v, "i");
          return o;
        }
        function parse_NUMBER(blob, length, opts) {
          var o = parse_cell(blob, length, opts);
          o[1].v = blob.read_shift(8, "f");
          return o;
        }
        function write_NUMBER(R, C, v) {
          var o = new_buf(13);
          o.write_shift(1, 255);
          o.write_shift(2, C);
          o.write_shift(2, R);
          o.write_shift(8, v, "f");
          return o;
        }
        function parse_FORMULA(blob, length, opts) {
          var tgt = blob.l + length;
          var o = parse_cell(blob, length, opts);
          o[1].v = blob.read_shift(8, "f");
          if (opts.qpro) blob.l = tgt;
          else {
            var flen = blob.read_shift(2);
            wk1_fmla_to_csf(blob.slice(blob.l, blob.l + flen), o);
            blob.l += flen;
          }
          return o;
        }
        function wk1_parse_rc(B, V, col) {
          var rel = V & 32768;
          V &= ~32768;
          V = (rel ? B : 0) + (V >= 8192 ? V - 16384 : V);
          return (rel ? "" : "$") + (col ? encode_col(V) : encode_row(V));
        }
        var FuncTab = {
          51: ["FALSE", 0],
          52: ["TRUE", 0],
          70: ["LEN", 1],
          80: ["SUM", 69],
          81: ["AVERAGEA", 69],
          82: ["COUNTA", 69],
          83: ["MINA", 69],
          84: ["MAXA", 69],
          111: ["T", 1]
        };
        var BinOpTab = [
          "",
          "",
          "",
          "",
          "",
          "",
          "",
          "",
          // eslint-disable-line no-mixed-spaces-and-tabs
          "",
          "+",
          "-",
          "*",
          "/",
          "^",
          "=",
          "<>",
          // eslint-disable-line no-mixed-spaces-and-tabs
          "<=",
          ">=",
          "<",
          ">",
          "",
          "",
          "",
          "",
          // eslint-disable-line no-mixed-spaces-and-tabs
          "&",
          "",
          "",
          "",
          "",
          "",
          "",
          ""
          // eslint-disable-line no-mixed-spaces-and-tabs
        ];
        function wk1_fmla_to_csf(blob, o) {
          prep_blob(blob, 0);
          var out = [], argc = 0, R = "", C = "", argL = "", argR = "";
          while (blob.l < blob.length) {
            var cc = blob[blob.l++];
            switch (cc) {
              case 0:
                out.push(blob.read_shift(8, "f"));
                break;
              case 1:
                {
                  C = wk1_parse_rc(o[0].c, blob.read_shift(2), true);
                  R = wk1_parse_rc(o[0].r, blob.read_shift(2), false);
                  out.push(C + R);
                }
                break;
              case 2:
                {
                  var c = wk1_parse_rc(o[0].c, blob.read_shift(2), true);
                  var r = wk1_parse_rc(o[0].r, blob.read_shift(2), false);
                  C = wk1_parse_rc(o[0].c, blob.read_shift(2), true);
                  R = wk1_parse_rc(o[0].r, blob.read_shift(2), false);
                  out.push(c + r + ":" + C + R);
                }
                break;
              case 3:
                if (blob.l < blob.length) {
                  console.error("WK1 premature formula end");
                  return;
                }
                break;
              case 4:
                out.push("(" + out.pop() + ")");
                break;
              case 5:
                out.push(blob.read_shift(2));
                break;
              case 6:
                {
                  var Z = "";
                  while (cc = blob[blob.l++]) Z += String.fromCharCode(cc);
                  out.push('"' + Z.replace(/"/g, '""') + '"');
                }
                break;
              case 8:
                out.push("-" + out.pop());
                break;
              case 23:
                out.push("+" + out.pop());
                break;
              case 22:
                out.push("NOT(" + out.pop() + ")");
                break;
              case 20:
              case 21:
                {
                  argR = out.pop();
                  argL = out.pop();
                  out.push(["AND", "OR"][cc - 20] + "(" + argL + "," + argR + ")");
                }
                break;
              default:
                if (cc < 32 && BinOpTab[cc]) {
                  argR = out.pop();
                  argL = out.pop();
                  out.push(argL + BinOpTab[cc] + argR);
                } else if (FuncTab[cc]) {
                  argc = FuncTab[cc][1];
                  if (argc == 69) argc = blob[blob.l++];
                  if (argc > out.length) {
                    console.error("WK1 bad formula parse 0x" + cc.toString(16) + ":|" + out.join("|") + "|");
                    return;
                  }
                  var args = out.slice(-argc);
                  out.length -= argc;
                  out.push(FuncTab[cc][0] + "(" + args.join(",") + ")");
                } else if (cc <= 7) return console.error("WK1 invalid opcode " + cc.toString(16));
                else if (cc <= 24) return console.error("WK1 unsupported op " + cc.toString(16));
                else if (cc <= 30) return console.error("WK1 invalid opcode " + cc.toString(16));
                else if (cc <= 115) return console.error("WK1 unsupported function opcode " + cc.toString(16));
                else return console.error("WK1 unrecognized opcode " + cc.toString(16));
            }
          }
          if (out.length == 1) o[1].f = "" + out[0];
          else console.error("WK1 bad formula parse |" + out.join("|") + "|");
        }
        function parse_cell_3(blob) {
          var o = [{ c: 0, r: 0 }, { t: "n", v: 0 }, 0];
          o[0].r = blob.read_shift(2);
          o[3] = blob[blob.l++];
          o[0].c = blob[blob.l++];
          return o;
        }
        function parse_LABEL_16(blob, length) {
          var o = parse_cell_3(blob, length);
          o[1].t = "s";
          o[1].v = blob.read_shift(length - 4, "cstr");
          return o;
        }
        function write_LABEL_16(R, C, wsidx, s) {
          var o = new_buf(6 + s.length);
          o.write_shift(2, R);
          o.write_shift(1, wsidx);
          o.write_shift(1, C);
          o.write_shift(1, 39);
          for (var i = 0; i < s.length; ++i) {
            var cc = s.charCodeAt(i);
            o.write_shift(1, cc >= 128 ? 95 : cc);
          }
          o.write_shift(1, 0);
          return o;
        }
        function parse_NUMBER_18(blob, length) {
          var o = parse_cell_3(blob, length);
          o[1].v = blob.read_shift(2);
          var v = o[1].v >> 1;
          if (o[1].v & 1) {
            switch (v & 7) {
              case 0:
                v = (v >> 3) * 5e3;
                break;
              case 1:
                v = (v >> 3) * 500;
                break;
              case 2:
                v = (v >> 3) / 20;
                break;
              case 3:
                v = (v >> 3) / 200;
                break;
              case 4:
                v = (v >> 3) / 2e3;
                break;
              case 5:
                v = (v >> 3) / 2e4;
                break;
              case 6:
                v = (v >> 3) / 16;
                break;
              case 7:
                v = (v >> 3) / 64;
                break;
            }
          }
          o[1].v = v;
          return o;
        }
        function parse_NUMBER_17(blob, length) {
          var o = parse_cell_3(blob, length);
          var v1 = blob.read_shift(4);
          var v2 = blob.read_shift(4);
          var e = blob.read_shift(2);
          if (e == 65535) {
            if (v1 === 0 && v2 === 3221225472) {
              o[1].t = "e";
              o[1].v = 15;
            } else if (v1 === 0 && v2 === 3489660928) {
              o[1].t = "e";
              o[1].v = 42;
            } else o[1].v = 0;
            return o;
          }
          var s = e & 32768;
          e = (e & 32767) - 16446;
          o[1].v = (1 - s * 2) * (v2 * Math.pow(2, e + 32) + v1 * Math.pow(2, e));
          return o;
        }
        function write_NUMBER_17(R, C, wsidx, v) {
          var o = new_buf(14);
          o.write_shift(2, R);
          o.write_shift(1, wsidx);
          o.write_shift(1, C);
          if (v == 0) {
            o.write_shift(4, 0);
            o.write_shift(4, 0);
            o.write_shift(2, 65535);
            return o;
          }
          var s = 0, e = 0, v1 = 0, v2 = 0;
          if (v < 0) {
            s = 1;
            v = -v;
          }
          e = Math.log2(v) | 0;
          v /= Math.pow(2, e - 31);
          v2 = v >>> 0;
          if ((v2 & 2147483648) == 0) {
            v /= 2;
            ++e;
            v2 = v >>> 0;
          }
          v -= v2;
          v2 |= 2147483648;
          v2 >>>= 0;
          v *= Math.pow(2, 32);
          v1 = v >>> 0;
          o.write_shift(4, v1);
          o.write_shift(4, v2);
          e += 16383 + (s ? 32768 : 0);
          o.write_shift(2, e);
          return o;
        }
        function parse_FORMULA_19(blob, length) {
          var o = parse_NUMBER_17(blob, 14);
          blob.l += length - 14;
          return o;
        }
        function parse_NUMBER_25(blob, length) {
          var o = parse_cell_3(blob, length);
          var v1 = blob.read_shift(4);
          o[1].v = v1 >> 6;
          return o;
        }
        function parse_NUMBER_27(blob, length) {
          var o = parse_cell_3(blob, length);
          var v1 = blob.read_shift(8, "f");
          o[1].v = v1;
          return o;
        }
        function parse_FORMULA_28(blob, length) {
          var o = parse_NUMBER_27(blob, 14);
          blob.l += length - 10;
          return o;
        }
        function parse_SHEETNAMECS(blob, length) {
          return blob[blob.l + length - 1] == 0 ? blob.read_shift(length, "cstr") : "";
        }
        function parse_SHEETNAMELP(blob, length) {
          var len = blob[blob.l++];
          if (len > length - 1) len = length - 1;
          var o = "";
          while (o.length < len) o += String.fromCharCode(blob[blob.l++]);
          return o;
        }
        function parse_SHEETINFOQP(blob, length, opts) {
          if (!opts.qpro || length < 21) return;
          var id = blob.read_shift(1);
          blob.l += 17;
          blob.l += 1;
          blob.l += 2;
          var nm = blob.read_shift(length - 21, "cstr");
          return [id, nm];
        }
        function parse_XFORMAT(blob, length) {
          var o = {}, tgt = blob.l + length;
          while (blob.l < tgt) {
            var dt = blob.read_shift(2);
            if (dt == 14e3) {
              o[dt] = [0, ""];
              o[dt][0] = blob.read_shift(2);
              while (blob[blob.l]) {
                o[dt][1] += String.fromCharCode(blob[blob.l]);
                blob.l++;
              }
              blob.l++;
            }
          }
          return o;
        }
        function write_XFORMAT_SHEETNAME(name, wsidx) {
          var out = new_buf(5 + name.length);
          out.write_shift(2, 14e3);
          out.write_shift(2, wsidx);
          for (var i = 0; i < name.length; ++i) {
            var cc = name.charCodeAt(i);
            out[out.l++] = cc > 127 ? 95 : cc;
          }
          out[out.l++] = 0;
          return out;
        }
        var WK1Enum = {
          0: { n: "BOF", f: parseuint16 },
          1: { n: "EOF" },
          2: { n: "CALCMODE" },
          3: { n: "CALCORDER" },
          4: { n: "SPLIT" },
          5: { n: "SYNC" },
          6: { n: "RANGE", f: parse_RANGE },
          7: { n: "WINDOW1" },
          8: { n: "COLW1" },
          9: { n: "WINTWO" },
          10: { n: "COLW2" },
          11: { n: "NAME" },
          12: { n: "BLANK" },
          13: { n: "INTEGER", f: parse_INTEGER },
          14: { n: "NUMBER", f: parse_NUMBER },
          15: { n: "LABEL", f: parse_LABEL },
          16: { n: "FORMULA", f: parse_FORMULA },
          24: { n: "TABLE" },
          25: { n: "ORANGE" },
          26: { n: "PRANGE" },
          27: { n: "SRANGE" },
          28: { n: "FRANGE" },
          29: { n: "KRANGE1" },
          32: { n: "HRANGE" },
          35: { n: "KRANGE2" },
          36: { n: "PROTEC" },
          37: { n: "FOOTER" },
          38: { n: "HEADER" },
          39: { n: "SETUP" },
          40: { n: "MARGINS" },
          41: { n: "LABELFMT" },
          42: { n: "TITLES" },
          43: { n: "SHEETJS" },
          45: { n: "GRAPH" },
          46: { n: "NGRAPH" },
          47: { n: "CALCCOUNT" },
          48: { n: "UNFORMATTED" },
          49: { n: "CURSORW12" },
          50: { n: "WINDOW" },
          51: { n: "STRING", f: parse_LABEL },
          55: { n: "PASSWORD" },
          56: { n: "LOCKED" },
          60: { n: "QUERY" },
          61: { n: "QUERYNAME" },
          62: { n: "PRINT" },
          63: { n: "PRINTNAME" },
          64: { n: "GRAPH2" },
          65: { n: "GRAPHNAME" },
          66: { n: "ZOOM" },
          67: { n: "SYMSPLIT" },
          68: { n: "NSROWS" },
          69: { n: "NSCOLS" },
          70: { n: "RULER" },
          71: { n: "NNAME" },
          72: { n: "ACOMM" },
          73: { n: "AMACRO" },
          74: { n: "PARSE" },
          102: { n: "PRANGES??" },
          103: { n: "RRANGES??" },
          104: { n: "FNAME??" },
          105: { n: "MRANGES??" },
          204: { n: "SHEETNAMECS", f: parse_SHEETNAMECS },
          222: { n: "SHEETNAMELP", f: parse_SHEETNAMELP },
          65535: { n: "" }
        };
        var WK3Enum = {
          0: { n: "BOF" },
          1: { n: "EOF" },
          2: { n: "PASSWORD" },
          3: { n: "CALCSET" },
          4: { n: "WINDOWSET" },
          5: { n: "SHEETCELLPTR" },
          6: { n: "SHEETLAYOUT" },
          7: { n: "COLUMNWIDTH" },
          8: { n: "HIDDENCOLUMN" },
          9: { n: "USERRANGE" },
          10: { n: "SYSTEMRANGE" },
          11: { n: "ZEROFORCE" },
          12: { n: "SORTKEYDIR" },
          13: { n: "FILESEAL" },
          14: { n: "DATAFILLNUMS" },
          15: { n: "PRINTMAIN" },
          16: { n: "PRINTSTRING" },
          17: { n: "GRAPHMAIN" },
          18: { n: "GRAPHSTRING" },
          19: { n: "??" },
          20: { n: "ERRCELL" },
          21: { n: "NACELL" },
          22: { n: "LABEL16", f: parse_LABEL_16 },
          23: { n: "NUMBER17", f: parse_NUMBER_17 },
          24: { n: "NUMBER18", f: parse_NUMBER_18 },
          25: { n: "FORMULA19", f: parse_FORMULA_19 },
          26: { n: "FORMULA1A" },
          27: { n: "XFORMAT", f: parse_XFORMAT },
          28: { n: "DTLABELMISC" },
          29: { n: "DTLABELCELL" },
          30: { n: "GRAPHWINDOW" },
          31: { n: "CPA" },
          32: { n: "LPLAUTO" },
          33: { n: "QUERY" },
          34: { n: "HIDDENSHEET" },
          35: { n: "??" },
          37: { n: "NUMBER25", f: parse_NUMBER_25 },
          38: { n: "??" },
          39: { n: "NUMBER27", f: parse_NUMBER_27 },
          40: { n: "FORMULA28", f: parse_FORMULA_28 },
          142: { n: "??" },
          147: { n: "??" },
          150: { n: "??" },
          151: { n: "??" },
          152: { n: "??" },
          153: { n: "??" },
          154: { n: "??" },
          155: { n: "??" },
          156: { n: "??" },
          163: { n: "??" },
          174: { n: "??" },
          175: { n: "??" },
          176: { n: "??" },
          177: { n: "??" },
          184: { n: "??" },
          185: { n: "??" },
          186: { n: "??" },
          187: { n: "??" },
          188: { n: "??" },
          195: { n: "??" },
          201: { n: "??" },
          204: { n: "SHEETNAMECS", f: parse_SHEETNAMECS },
          205: { n: "??" },
          206: { n: "??" },
          207: { n: "??" },
          208: { n: "??" },
          256: { n: "??" },
          259: { n: "??" },
          260: { n: "??" },
          261: { n: "??" },
          262: { n: "??" },
          263: { n: "??" },
          265: { n: "??" },
          266: { n: "??" },
          267: { n: "??" },
          268: { n: "??" },
          270: { n: "??" },
          271: { n: "??" },
          384: { n: "??" },
          389: { n: "??" },
          390: { n: "??" },
          393: { n: "??" },
          396: { n: "??" },
          512: { n: "??" },
          514: { n: "??" },
          513: { n: "??" },
          516: { n: "??" },
          517: { n: "??" },
          640: { n: "??" },
          641: { n: "??" },
          642: { n: "??" },
          643: { n: "??" },
          644: { n: "??" },
          645: { n: "??" },
          646: { n: "??" },
          647: { n: "??" },
          648: { n: "??" },
          658: { n: "??" },
          659: { n: "??" },
          660: { n: "??" },
          661: { n: "??" },
          662: { n: "??" },
          665: { n: "??" },
          666: { n: "??" },
          768: { n: "??" },
          772: { n: "??" },
          1537: { n: "SHEETINFOQP", f: parse_SHEETINFOQP },
          1600: { n: "??" },
          1602: { n: "??" },
          1793: { n: "??" },
          1794: { n: "??" },
          1795: { n: "??" },
          1796: { n: "??" },
          1920: { n: "??" },
          2048: { n: "??" },
          2049: { n: "??" },
          2052: { n: "??" },
          2688: { n: "??" },
          10998: { n: "??" },
          12849: { n: "??" },
          28233: { n: "??" },
          28484: { n: "??" },
          65535: { n: "" }
        };
        return {
          sheet_to_wk1,
          book_to_wk3,
          to_workbook: lotus_to_workbook
        };
      }();
      function parse_rpr(rpr) {
        var font = {}, m = rpr.match(tagregex), i = 0;
        var pass = false;
        if (m) for (; i != m.length; ++i) {
          var y = parsexmltag(m[i]);
          switch (y[0].replace(/\w*:/g, "")) {
            case "<condense":
              break;
            case "<extend":
              break;
            case "<shadow":
              if (!y.val) break;
            case "<shadow>":
            case "<shadow/>":
              font.shadow = 1;
              break;
            case "</shadow>":
              break;
            case "<charset":
              if (y.val == "1") break;
              font.cp = CS2CP[parseInt(y.val, 10)];
              break;
            case "<outline":
              if (!y.val) break;
            case "<outline>":
            case "<outline/>":
              font.outline = 1;
              break;
            case "</outline>":
              break;
            case "<rFont":
              font.name = y.val;
              break;
            case "<sz":
              font.sz = y.val;
              break;
            case "<strike":
              if (!y.val) break;
            case "<strike>":
            case "<strike/>":
              font.strike = 1;
              break;
            case "</strike>":
              break;
            case "<u":
              if (!y.val) break;
              switch (y.val) {
                case "double":
                  font.uval = "double";
                  break;
                case "singleAccounting":
                  font.uval = "single-accounting";
                  break;
                case "doubleAccounting":
                  font.uval = "double-accounting";
                  break;
              }
            case "<u>":
            case "<u/>":
              font.u = 1;
              break;
            case "</u>":
              break;
            case "<b":
              if (y.val == "0") break;
            case "<b>":
            case "<b/>":
              font.b = 1;
              break;
            case "</b>":
              break;
            case "<i":
              if (y.val == "0") break;
            case "<i>":
            case "<i/>":
              font.i = 1;
              break;
            case "</i>":
              break;
            case "<color":
              if (y.rgb) font.color = y.rgb.slice(2, 8);
              break;
            case "<color>":
            case "<color/>":
            case "</color>":
              break;
            case "<family":
              font.family = y.val;
              break;
            case "<family>":
            case "<family/>":
            case "</family>":
              break;
            case "<vertAlign":
              font.valign = y.val;
              break;
            case "<vertAlign>":
            case "<vertAlign/>":
            case "</vertAlign>":
              break;
            case "<scheme":
              break;
            case "<scheme>":
            case "<scheme/>":
            case "</scheme>":
              break;
            case "<extLst":
            case "<extLst>":
            case "</extLst>":
              break;
            case "<ext":
              pass = true;
              break;
            case "</ext>":
              pass = false;
              break;
            default:
              if (y[0].charCodeAt(1) !== 47 && !pass) throw new Error("Unrecognized rich format " + y[0]);
          }
        }
        return font;
      }
      var parse_rs = function() {
        var tregex = matchtag("t"), rpregex = matchtag("rPr");
        function parse_r(r) {
          var t = r.match(tregex);
          if (!t) return { t: "s", v: "" };
          var o = { t: "s", v: unescapexml(t[1]) };
          var rpr = r.match(rpregex);
          if (rpr) o.s = parse_rpr(rpr[1]);
          return o;
        }
        var rregex = /<(?:\w+:)?r>/g, rend = /<\/(?:\w+:)?r>/;
        return function parse_rs2(rs) {
          return rs.replace(rregex, "").split(rend).map(parse_r).filter(function(r) {
            return r.v;
          });
        };
      }();
      var rs_to_html = /* @__PURE__ */ function parse_rs_factory() {
        var nlregex = /(\r\n|\n)/g;
        function parse_rpr2(font, intro, outro) {
          var style = [];
          if (font.u) style.push("text-decoration: underline;");
          if (font.uval) style.push("text-underline-style:" + font.uval + ";");
          if (font.sz) style.push("font-size:" + font.sz + "pt;");
          if (font.outline) style.push("text-effect: outline;");
          if (font.shadow) style.push("text-shadow: auto;");
          intro.push('<span style="' + style.join("") + '">');
          if (font.b) {
            intro.push("<b>");
            outro.push("</b>");
          }
          if (font.i) {
            intro.push("<i>");
            outro.push("</i>");
          }
          if (font.strike) {
            intro.push("<s>");
            outro.push("</s>");
          }
          var align = font.valign || "";
          if (align == "superscript" || align == "super") align = "sup";
          else if (align == "subscript") align = "sub";
          if (align != "") {
            intro.push("<" + align + ">");
            outro.push("</" + align + ">");
          }
          outro.push("</span>");
          return font;
        }
        function r_to_html(r) {
          var terms = [[], r.v, []];
          if (!r.v) return "";
          if (r.s) parse_rpr2(r.s, terms[0], terms[2]);
          return terms[0].join("") + terms[1].replace(nlregex, "<br/>") + terms[2].join("");
        }
        return function parse_rs2(rs) {
          return rs.map(r_to_html).join("");
        };
      }();
      var sitregex = /<(?:\w+:)?t[^>]*>([^<]*)<\/(?:\w+:)?t>/g, sirregex = /<(?:\w+:)?r>/;
      var sirphregex = /<(?:\w+:)?rPh.*?>([\s\S]*?)<\/(?:\w+:)?rPh>/g;
      function parse_si(x, opts) {
        var html = opts ? opts.cellHTML : true;
        var z = {};
        if (!x) return { t: "" };
        if (x.match(/^\s*<(?:\w+:)?t[^>]*>/)) {
          z.t = unescapexml(utf8read(x.slice(x.indexOf(">") + 1).split(/<\/(?:\w+:)?t>/)[0] || ""));
          z.r = utf8read(x);
          if (html) z.h = escapehtml(z.t);
        } else if (
          /*y = */
          x.match(sirregex)
        ) {
          z.r = utf8read(x);
          z.t = unescapexml(utf8read((x.replace(sirphregex, "").match(sitregex) || []).join("").replace(tagregex, "")));
          if (html) z.h = rs_to_html(parse_rs(z.r));
        }
        return z;
      }
      var sstr0 = /<(?:\w+:)?sst([^>]*)>([\s\S]*)<\/(?:\w+:)?sst>/;
      var sstr1 = /<(?:\w+:)?(?:si|sstItem)>/g;
      var sstr2 = /<\/(?:\w+:)?(?:si|sstItem)>/;
      function parse_sst_xml(data, opts) {
        var s = [], ss = "";
        if (!data) return s;
        var sst = data.match(sstr0);
        if (sst) {
          ss = sst[2].replace(sstr1, "").split(sstr2);
          for (var i = 0; i != ss.length; ++i) {
            var o = parse_si(ss[i].trim(), opts);
            if (o != null) s[s.length] = o;
          }
          sst = parsexmltag(sst[1]);
          s.Count = sst.count;
          s.Unique = sst.uniqueCount;
        }
        return s;
      }
      var straywsregex = /^\s|\s$|[\t\n\r]/;
      function write_sst_xml(sst, opts) {
        if (!opts.bookSST) return "";
        var o = [XML_HEADER];
        o[o.length] = writextag("sst", null, {
          xmlns: XMLNS_main[0],
          count: sst.Count,
          uniqueCount: sst.Unique
        });
        for (var i = 0; i != sst.length; ++i) {
          if (sst[i] == null) continue;
          var s = sst[i];
          var sitag = "<si>";
          if (s.r) sitag += s.r;
          else {
            sitag += "<t";
            if (!s.t) s.t = "";
            if (s.t.match(straywsregex)) sitag += ' xml:space="preserve"';
            sitag += ">" + escapexml(s.t) + "</t>";
          }
          sitag += "</si>";
          o[o.length] = sitag;
        }
        if (o.length > 2) {
          o[o.length] = "</sst>";
          o[1] = o[1].replace("/>", ">");
        }
        return o.join("");
      }
      function parse_BrtBeginSst(data) {
        return [data.read_shift(4), data.read_shift(4)];
      }
      function parse_sst_bin(data, opts) {
        var s = [];
        var pass = false;
        recordhopper(data, function hopper_sst(val, R, RT) {
          switch (RT) {
            case 159:
              s.Count = val[0];
              s.Unique = val[1];
              break;
            case 19:
              s.push(val);
              break;
            case 160:
              return true;
            case 35:
              pass = true;
              break;
            case 36:
              pass = false;
              break;
            default:
              if (R.T) {
              }
              if (!pass || opts.WTF) throw new Error("Unexpected record 0x" + RT.toString(16));
          }
        });
        return s;
      }
      function write_BrtBeginSst(sst, o) {
        if (!o) o = new_buf(8);
        o.write_shift(4, sst.Count);
        o.write_shift(4, sst.Unique);
        return o;
      }
      var write_BrtSSTItem = write_RichStr;
      function write_sst_bin(sst) {
        var ba = buf_array();
        write_record(ba, 159, write_BrtBeginSst(sst));
        for (var i = 0; i < sst.length; ++i) write_record(ba, 19, write_BrtSSTItem(sst[i]));
        write_record(
          ba,
          160
          /* BrtEndSst */
        );
        return ba.end();
      }
      function _JS2ANSI(str) {
        if (typeof $cptable !== "undefined") return $cptable.utils.encode(current_ansi, str);
        var o = [], oo = str.split("");
        for (var i = 0; i < oo.length; ++i) o[i] = oo[i].charCodeAt(0);
        return o;
      }
      function parse_CRYPTOVersion(blob, length) {
        var o = {};
        o.Major = blob.read_shift(2);
        o.Minor = blob.read_shift(2);
        if (length >= 4) blob.l += length - 4;
        return o;
      }
      function parse_DataSpaceVersionInfo(blob) {
        var o = {};
        o.id = blob.read_shift(0, "lpp4");
        o.R = parse_CRYPTOVersion(blob, 4);
        o.U = parse_CRYPTOVersion(blob, 4);
        o.W = parse_CRYPTOVersion(blob, 4);
        return o;
      }
      function parse_DataSpaceMapEntry(blob) {
        var len = blob.read_shift(4);
        var end = blob.l + len - 4;
        var o = {};
        var cnt = blob.read_shift(4);
        var comps = [];
        while (cnt-- > 0) comps.push({ t: blob.read_shift(4), v: blob.read_shift(0, "lpp4") });
        o.name = blob.read_shift(0, "lpp4");
        o.comps = comps;
        if (blob.l != end) throw new Error("Bad DataSpaceMapEntry: " + blob.l + " != " + end);
        return o;
      }
      function parse_DataSpaceMap(blob) {
        var o = [];
        blob.l += 4;
        var cnt = blob.read_shift(4);
        while (cnt-- > 0) o.push(parse_DataSpaceMapEntry(blob));
        return o;
      }
      function parse_DataSpaceDefinition(blob) {
        var o = [];
        blob.l += 4;
        var cnt = blob.read_shift(4);
        while (cnt-- > 0) o.push(blob.read_shift(0, "lpp4"));
        return o;
      }
      function parse_TransformInfoHeader(blob) {
        var o = {};
        blob.read_shift(4);
        blob.l += 4;
        o.id = blob.read_shift(0, "lpp4");
        o.name = blob.read_shift(0, "lpp4");
        o.R = parse_CRYPTOVersion(blob, 4);
        o.U = parse_CRYPTOVersion(blob, 4);
        o.W = parse_CRYPTOVersion(blob, 4);
        return o;
      }
      function parse_Primary(blob) {
        var hdr = parse_TransformInfoHeader(blob);
        hdr.ename = blob.read_shift(0, "8lpp4");
        hdr.blksz = blob.read_shift(4);
        hdr.cmode = blob.read_shift(4);
        if (blob.read_shift(4) != 4) throw new Error("Bad !Primary record");
        return hdr;
      }
      function parse_EncryptionHeader(blob, length) {
        var tgt = blob.l + length;
        var o = {};
        o.Flags = blob.read_shift(4) & 63;
        blob.l += 4;
        o.AlgID = blob.read_shift(4);
        var valid = false;
        switch (o.AlgID) {
          case 26126:
          case 26127:
          case 26128:
            valid = o.Flags == 36;
            break;
          case 26625:
            valid = o.Flags == 4;
            break;
          case 0:
            valid = o.Flags == 16 || o.Flags == 4 || o.Flags == 36;
            break;
          default:
            throw "Unrecognized encryption algorithm: " + o.AlgID;
        }
        if (!valid) throw new Error("Encryption Flags/AlgID mismatch");
        o.AlgIDHash = blob.read_shift(4);
        o.KeySize = blob.read_shift(4);
        o.ProviderType = blob.read_shift(4);
        blob.l += 8;
        o.CSPName = blob.read_shift(tgt - blob.l >> 1, "utf16le");
        blob.l = tgt;
        return o;
      }
      function parse_EncryptionVerifier(blob, length) {
        var o = {}, tgt = blob.l + length;
        blob.l += 4;
        o.Salt = blob.slice(blob.l, blob.l + 16);
        blob.l += 16;
        o.Verifier = blob.slice(blob.l, blob.l + 16);
        blob.l += 16;
        blob.read_shift(4);
        o.VerifierHash = blob.slice(blob.l, tgt);
        blob.l = tgt;
        return o;
      }
      function parse_EncryptionInfo(blob) {
        var vers = parse_CRYPTOVersion(blob);
        switch (vers.Minor) {
          case 2:
            return [vers.Minor, parse_EncInfoStd(blob, vers)];
          case 3:
            return [vers.Minor, parse_EncInfoExt(blob, vers)];
          case 4:
            return [vers.Minor, parse_EncInfoAgl(blob, vers)];
        }
        throw new Error("ECMA-376 Encrypted file unrecognized Version: " + vers.Minor);
      }
      function parse_EncInfoStd(blob) {
        var flags = blob.read_shift(4);
        if ((flags & 63) != 36) throw new Error("EncryptionInfo mismatch");
        var sz = blob.read_shift(4);
        var hdr = parse_EncryptionHeader(blob, sz);
        var verifier = parse_EncryptionVerifier(blob, blob.length - blob.l);
        return { t: "Std", h: hdr, v: verifier };
      }
      function parse_EncInfoExt() {
        throw new Error("File is password-protected: ECMA-376 Extensible");
      }
      function parse_EncInfoAgl(blob) {
        var KeyData = ["saltSize", "blockSize", "keyBits", "hashSize", "cipherAlgorithm", "cipherChaining", "hashAlgorithm", "saltValue"];
        blob.l += 4;
        var xml = blob.read_shift(blob.length - blob.l, "utf8");
        var o = {};
        xml.replace(tagregex, function xml_agile(x) {
          var y = parsexmltag(x);
          switch (strip_ns(y[0])) {
            case "<?xml":
              break;
            case "<encryption":
            case "</encryption>":
              break;
            case "<keyData":
              KeyData.forEach(function(k) {
                o[k] = y[k];
              });
              break;
            case "<dataIntegrity":
              o.encryptedHmacKey = y.encryptedHmacKey;
              o.encryptedHmacValue = y.encryptedHmacValue;
              break;
            case "<keyEncryptors>":
            case "<keyEncryptors":
              o.encs = [];
              break;
            case "</keyEncryptors>":
              break;
            case "<keyEncryptor":
              o.uri = y.uri;
              break;
            case "</keyEncryptor>":
              break;
            case "<encryptedKey":
              o.encs.push(y);
              break;
            default:
              throw y[0];
          }
        });
        return o;
      }
      function parse_RC4CryptoHeader(blob, length) {
        var o = {};
        var vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4);
        length -= 4;
        if (vers.Minor != 2) throw new Error("unrecognized minor version code: " + vers.Minor);
        if (vers.Major > 4 || vers.Major < 2) throw new Error("unrecognized major version code: " + vers.Major);
        o.Flags = blob.read_shift(4);
        length -= 4;
        var sz = blob.read_shift(4);
        length -= 4;
        o.EncryptionHeader = parse_EncryptionHeader(blob, sz);
        length -= sz;
        o.EncryptionVerifier = parse_EncryptionVerifier(blob, length);
        return o;
      }
      function parse_RC4Header(blob) {
        var o = {};
        var vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4);
        if (vers.Major != 1 || vers.Minor != 1) throw "unrecognized version code " + vers.Major + " : " + vers.Minor;
        o.Salt = blob.read_shift(16);
        o.EncryptedVerifier = blob.read_shift(16);
        o.EncryptedVerifierHash = blob.read_shift(16);
        return o;
      }
      function crypto_CreatePasswordVerifier_Method1(Password) {
        var Verifier = 0, PasswordArray;
        var PasswordDecoded = _JS2ANSI(Password);
        var len = PasswordDecoded.length + 1, i, PasswordByte;
        var Intermediate1, Intermediate2, Intermediate3;
        PasswordArray = new_raw_buf(len);
        PasswordArray[0] = PasswordDecoded.length;
        for (i = 1; i != len; ++i) PasswordArray[i] = PasswordDecoded[i - 1];
        for (i = len - 1; i >= 0; --i) {
          PasswordByte = PasswordArray[i];
          Intermediate1 = (Verifier & 16384) === 0 ? 0 : 1;
          Intermediate2 = Verifier << 1 & 32767;
          Intermediate3 = Intermediate1 | Intermediate2;
          Verifier = Intermediate3 ^ PasswordByte;
        }
        return Verifier ^ 52811;
      }
      var crypto_CreateXorArray_Method1 = /* @__PURE__ */ function() {
        var PadArray = [187, 255, 255, 186, 255, 255, 185, 128, 0, 190, 15, 0, 191, 15, 0];
        var InitialCode = [57840, 7439, 52380, 33984, 4364, 3600, 61902, 12606, 6258, 57657, 54287, 34041, 10252, 43370, 20163];
        var XorMatrix = [44796, 19929, 39858, 10053, 20106, 40212, 10761, 31585, 63170, 64933, 60267, 50935, 40399, 11199, 17763, 35526, 1453, 2906, 5812, 11624, 23248, 885, 1770, 3540, 7080, 14160, 28320, 56640, 55369, 41139, 20807, 41614, 21821, 43642, 17621, 28485, 56970, 44341, 19019, 38038, 14605, 29210, 60195, 50791, 40175, 10751, 21502, 43004, 24537, 18387, 36774, 3949, 7898, 15796, 31592, 63184, 47201, 24803, 49606, 37805, 14203, 28406, 56812, 17824, 35648, 1697, 3394, 6788, 13576, 27152, 43601, 17539, 35078, 557, 1114, 2228, 4456, 30388, 60776, 51953, 34243, 7079, 14158, 28316, 14128, 28256, 56512, 43425, 17251, 34502, 7597, 13105, 26210, 52420, 35241, 883, 1766, 3532, 4129, 8258, 16516, 33032, 4657, 9314, 18628];
        var Ror = function(Byte) {
          return (Byte / 2 | Byte * 128) & 255;
        };
        var XorRor = function(byte1, byte2) {
          return Ror(byte1 ^ byte2);
        };
        var CreateXorKey_Method1 = function(Password) {
          var XorKey = InitialCode[Password.length - 1];
          var CurrentElement = 104;
          for (var i = Password.length - 1; i >= 0; --i) {
            var Char = Password[i];
            for (var j = 0; j != 7; ++j) {
              if (Char & 64) XorKey ^= XorMatrix[CurrentElement];
              Char *= 2;
              --CurrentElement;
            }
          }
          return XorKey;
        };
        return function(password) {
          var Password = _JS2ANSI(password);
          var XorKey = CreateXorKey_Method1(Password);
          var Index = Password.length;
          var ObfuscationArray = new_raw_buf(16);
          for (var i = 0; i != 16; ++i) ObfuscationArray[i] = 0;
          var Temp, PasswordLastChar, PadIndex;
          if ((Index & 1) === 1) {
            Temp = XorKey >> 8;
            ObfuscationArray[Index] = XorRor(PadArray[0], Temp);
            --Index;
            Temp = XorKey & 255;
            PasswordLastChar = Password[Password.length - 1];
            ObfuscationArray[Index] = XorRor(PasswordLastChar, Temp);
          }
          while (Index > 0) {
            --Index;
            Temp = XorKey >> 8;
            ObfuscationArray[Index] = XorRor(Password[Index], Temp);
            --Index;
            Temp = XorKey & 255;
            ObfuscationArray[Index] = XorRor(Password[Index], Temp);
          }
          Index = 15;
          PadIndex = 15 - Password.length;
          while (PadIndex > 0) {
            Temp = XorKey >> 8;
            ObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp);
            --Index;
            --PadIndex;
            Temp = XorKey & 255;
            ObfuscationArray[Index] = XorRor(Password[Index], Temp);
            --Index;
            --PadIndex;
          }
          return ObfuscationArray;
        };
      }();
      var crypto_DecryptData_Method1 = function(password, Data, XorArrayIndex, XorArray, O) {
        if (!O) O = Data;
        if (!XorArray) XorArray = crypto_CreateXorArray_Method1(password);
        var Index, Value;
        for (Index = 0; Index != Data.length; ++Index) {
          Value = Data[Index];
          Value ^= XorArray[XorArrayIndex];
          Value = (Value >> 5 | Value << 3) & 255;
          O[Index] = Value;
          ++XorArrayIndex;
        }
        return [O, XorArrayIndex, XorArray];
      };
      var crypto_MakeXorDecryptor = function(password) {
        var XorArrayIndex = 0, XorArray = crypto_CreateXorArray_Method1(password);
        return function(Data) {
          var O = crypto_DecryptData_Method1("", Data, XorArrayIndex, XorArray);
          XorArrayIndex = O[1];
          return O[0];
        };
      };
      function parse_XORObfuscation(blob, length, opts, out) {
        var o = { key: parseuint16(blob), verificationBytes: parseuint16(blob) };
        if (opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password);
        out.valid = o.verificationBytes === o.verifier;
        if (out.valid) out.insitu = crypto_MakeXorDecryptor(opts.password);
        return o;
      }
      function parse_FilePassHeader(blob, length, oo) {
        var o = oo || {};
        o.Info = blob.read_shift(2);
        blob.l -= 2;
        if (o.Info === 1) o.Data = parse_RC4Header(blob, length);
        else o.Data = parse_RC4CryptoHeader(blob, length);
        return o;
      }
      function parse_FilePass(blob, length, opts) {
        var o = { Type: opts.biff >= 8 ? blob.read_shift(2) : 0 };
        if (o.Type) parse_FilePassHeader(blob, length - 2, o);
        else parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);
        return o;
      }
      var RTF = /* @__PURE__ */ function() {
        function rtf_to_sheet(d, opts) {
          switch (opts.type) {
            case "base64":
              return rtf_to_sheet_str(Base64_decode(d), opts);
            case "binary":
              return rtf_to_sheet_str(d, opts);
            case "buffer":
              return rtf_to_sheet_str(has_buf && Buffer.isBuffer(d) ? d.toString("binary") : a2s(d), opts);
            case "array":
              return rtf_to_sheet_str(cc2str(d), opts);
          }
          throw new Error("Unrecognized type " + opts.type);
        }
        function rtf_to_sheet_str(str, opts) {
          var o = opts || {};
          var ws = o.dense ? [] : {};
          var rows = str.match(/\\trowd.*?\\row\b/g);
          if (!rows.length) throw new Error("RTF missing table");
          var range = { s: { c: 0, r: 0 }, e: { c: 0, r: rows.length - 1 } };
          rows.forEach(function(rowtf, R) {
            if (Array.isArray(ws)) ws[R] = [];
            var rtfre = /\\\w+\b/g;
            var last_index = 0;
            var res;
            var C = -1;
            while (res = rtfre.exec(rowtf)) {
              switch (res[0]) {
                case "\\cell":
                  var data = rowtf.slice(last_index, rtfre.lastIndex - res[0].length);
                  if (data[0] == " ") data = data.slice(1);
                  ++C;
                  if (data.length) {
                    var cell = { v: data, t: "s" };
                    if (Array.isArray(ws)) ws[R][C] = cell;
                    else ws[encode_cell({ r: R, c: C })] = cell;
                  }
                  break;
              }
              last_index = rtfre.lastIndex;
            }
            if (C > range.e.c) range.e.c = C;
          });
          ws["!ref"] = encode_range(range);
          return ws;
        }
        function rtf_to_workbook(d, opts) {
          return sheet_to_workbook(rtf_to_sheet(d, opts), opts);
        }
        function sheet_to_rtf(ws) {
          var o = ["{\\rtf1\\ansi"];
          var r = safe_decode_range(ws["!ref"]), cell;
          var dense = Array.isArray(ws);
          for (var R = r.s.r; R <= r.e.r; ++R) {
            o.push("\\trowd\\trautofit1");
            for (var C = r.s.c; C <= r.e.c; ++C) o.push("\\cellx" + (C + 1));
            o.push("\\pard\\intbl");
            for (C = r.s.c; C <= r.e.c; ++C) {
              var coord = encode_cell({ r: R, c: C });
              cell = dense ? (ws[R] || [])[C] : ws[coord];
              if (!cell || cell.v == null && (!cell.f || cell.F)) continue;
              o.push(" " + (cell.w || (format_cell(cell), cell.w)));
              o.push("\\cell");
            }
            o.push("\\pard\\intbl\\row");
          }
          return o.join("") + "}";
        }
        return {
          to_workbook: rtf_to_workbook,
          to_sheet: rtf_to_sheet,
          from_sheet: sheet_to_rtf
        };
      }();
      function hex2RGB(h) {
        var o = h.slice(h[0] === "#" ? 1 : 0).slice(0, 6);
        return [parseInt(o.slice(0, 2), 16), parseInt(o.slice(2, 4), 16), parseInt(o.slice(4, 6), 16)];
      }
      function rgb2Hex(rgb) {
        for (var i = 0, o = 1; i != 3; ++i) o = o * 256 + (rgb[i] > 255 ? 255 : rgb[i] < 0 ? 0 : rgb[i]);
        return o.toString(16).toUpperCase().slice(1);
      }
      function rgb2HSL(rgb) {
        var R = rgb[0] / 255, G = rgb[1] / 255, B = rgb[2] / 255;
        var M = Math.max(R, G, B), m = Math.min(R, G, B), C = M - m;
        if (C === 0) return [0, 0, R];
        var H6 = 0, S = 0, L2 = M + m;
        S = C / (L2 > 1 ? 2 - L2 : L2);
        switch (M) {
          case R:
            H6 = ((G - B) / C + 6) % 6;
            break;
          case G:
            H6 = (B - R) / C + 2;
            break;
          case B:
            H6 = (R - G) / C + 4;
            break;
        }
        return [H6 / 6, S, L2 / 2];
      }
      function hsl2RGB(hsl) {
        var H = hsl[0], S = hsl[1], L = hsl[2];
        var C = S * 2 * (L < 0.5 ? L : 1 - L), m = L - C / 2;
        var rgb = [m, m, m], h6 = 6 * H;
        var X;
        if (S !== 0) switch (h6 | 0) {
          case 0:
          case 6:
            X = C * h6;
            rgb[0] += C;
            rgb[1] += X;
            break;
          case 1:
            X = C * (2 - h6);
            rgb[0] += X;
            rgb[1] += C;
            break;
          case 2:
            X = C * (h6 - 2);
            rgb[1] += C;
            rgb[2] += X;
            break;
          case 3:
            X = C * (4 - h6);
            rgb[1] += X;
            rgb[2] += C;
            break;
          case 4:
            X = C * (h6 - 4);
            rgb[2] += C;
            rgb[0] += X;
            break;
          case 5:
            X = C * (6 - h6);
            rgb[2] += X;
            rgb[0] += C;
            break;
        }
        for (var i = 0; i != 3; ++i) rgb[i] = Math.round(rgb[i] * 255);
        return rgb;
      }
      function rgb_tint(hex, tint) {
        if (tint === 0) return hex;
        var hsl = rgb2HSL(hex2RGB(hex));
        if (tint < 0) hsl[2] = hsl[2] * (1 + tint);
        else hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);
        return rgb2Hex(hsl2RGB(hsl));
      }
      var DEF_MDW = 6, MAX_MDW = 15, MIN_MDW = 1, MDW = DEF_MDW;
      function width2px(width) {
        return Math.floor((width + Math.round(128 / MDW) / 256) * MDW);
      }
      function px2char(px) {
        return Math.floor((px - 5) / MDW * 100 + 0.5) / 100;
      }
      function char2width(chr) {
        return Math.round((chr * MDW + 5) / MDW * 256) / 256;
      }
      function cycle_width(collw) {
        return char2width(px2char(width2px(collw)));
      }
      function find_mdw_colw(collw) {
        var delta = Math.abs(collw - cycle_width(collw)), _MDW = MDW;
        if (delta > 5e-3) {
          for (MDW = MIN_MDW; MDW < MAX_MDW; ++MDW) if (Math.abs(collw - cycle_width(collw)) <= delta) {
            delta = Math.abs(collw - cycle_width(collw));
            _MDW = MDW;
          }
        }
        MDW = _MDW;
      }
      function process_col(coll) {
        if (coll.width) {
          coll.wpx = width2px(coll.width);
          coll.wch = px2char(coll.wpx);
          coll.MDW = MDW;
        } else if (coll.wpx) {
          coll.wch = px2char(coll.wpx);
          coll.width = char2width(coll.wch);
          coll.MDW = MDW;
        } else if (typeof coll.wch == "number") {
          coll.width = char2width(coll.wch);
          coll.wpx = width2px(coll.width);
          coll.MDW = MDW;
        }
        if (coll.customWidth) delete coll.customWidth;
      }
      var DEF_PPI = 96, PPI = DEF_PPI;
      function px2pt(px) {
        return px * 96 / PPI;
      }
      function pt2px(pt) {
        return pt * PPI / 96;
      }
      var XLMLPatternTypeMap = {
        "None": "none",
        "Solid": "solid",
        "Gray50": "mediumGray",
        "Gray75": "darkGray",
        "Gray25": "lightGray",
        "HorzStripe": "darkHorizontal",
        "VertStripe": "darkVertical",
        "ReverseDiagStripe": "darkDown",
        "DiagStripe": "darkUp",
        "DiagCross": "darkGrid",
        "ThickDiagCross": "darkTrellis",
        "ThinHorzStripe": "lightHorizontal",
        "ThinVertStripe": "lightVertical",
        "ThinReverseDiagStripe": "lightDown",
        "ThinHorzCross": "lightGrid"
      };
      function parse_borders(t, styles, themes, opts) {
        styles.Borders = [];
        var border = {};
        var pass = false;
        (t[0].match(tagregex) || []).forEach(function(x) {
          var y = parsexmltag(x);
          switch (strip_ns(y[0])) {
            case "<borders":
            case "<borders>":
            case "</borders>":
              break;
            case "<border":
            case "<border>":
            case "<border/>":
              border = {};
              if (y.diagonalUp) border.diagonalUp = parsexmlbool(y.diagonalUp);
              if (y.diagonalDown) border.diagonalDown = parsexmlbool(y.diagonalDown);
              styles.Borders.push(border);
              break;
            case "</border>":
              break;
            case "<left/>":
              break;
            case "<left":
            case "<left>":
              break;
            case "</left>":
              break;
            case "<right/>":
              break;
            case "<right":
            case "<right>":
              break;
            case "</right>":
              break;
            case "<top/>":
              break;
            case "<top":
            case "<top>":
              break;
            case "</top>":
              break;
            case "<bottom/>":
              break;
            case "<bottom":
            case "<bottom>":
              break;
            case "</bottom>":
              break;
            case "<diagonal":
            case "<diagonal>":
            case "<diagonal/>":
              break;
            case "</diagonal>":
              break;
            case "<horizontal":
            case "<horizontal>":
            case "<horizontal/>":
              break;
            case "</horizontal>":
              break;
            case "<vertical":
            case "<vertical>":
            case "<vertical/>":
              break;
            case "</vertical>":
              break;
            case "<start":
            case "<start>":
            case "<start/>":
              break;
            case "</start>":
              break;
            case "<end":
            case "<end>":
            case "<end/>":
              break;
            case "</end>":
              break;
            case "<color":
            case "<color>":
              break;
            case "<color/>":
            case "</color>":
              break;
            case "<extLst":
            case "<extLst>":
            case "</extLst>":
              break;
            case "<ext":
              pass = true;
              break;
            case "</ext>":
              pass = false;
              break;
            default:
              if (opts && opts.WTF) {
                if (!pass) throw new Error("unrecognized " + y[0] + " in borders");
              }
          }
        });
      }
      function parse_fills(t, styles, themes, opts) {
        styles.Fills = [];
        var fill2 = {};
        var pass = false;
        (t[0].match(tagregex) || []).forEach(function(x) {
          var y = parsexmltag(x);
          switch (strip_ns(y[0])) {
            case "<fills":
            case "<fills>":
            case "</fills>":
              break;
            case "<fill>":
            case "<fill":
            case "<fill/>":
              fill2 = {};
              styles.Fills.push(fill2);
              break;
            case "</fill>":
              break;
            case "<gradientFill>":
              break;
            case "<gradientFill":
            case "</gradientFill>":
              styles.Fills.push(fill2);
              fill2 = {};
              break;
            case "<patternFill":
            case "<patternFill>":
              if (y.patternType) fill2.patternType = y.patternType;
              break;
            case "<patternFill/>":
            case "</patternFill>":
              break;
            case "<bgColor":
              if (!fill2.bgColor) fill2.bgColor = {};
              if (y.indexed) fill2.bgColor.indexed = parseInt(y.indexed, 10);
              if (y.theme) fill2.bgColor.theme = parseInt(y.theme, 10);
              if (y.tint) fill2.bgColor.tint = parseFloat(y.tint);
              if (y.rgb) fill2.bgColor.rgb = y.rgb.slice(-6);
              break;
            case "<bgColor/>":
            case "</bgColor>":
              break;
            case "<fgColor":
              if (!fill2.fgColor) fill2.fgColor = {};
              if (y.theme) fill2.fgColor.theme = parseInt(y.theme, 10);
              if (y.tint) fill2.fgColor.tint = parseFloat(y.tint);
              if (y.rgb != null) fill2.fgColor.rgb = y.rgb.slice(-6);
              break;
            case "<fgColor/>":
            case "</fgColor>":
              break;
            case "<stop":
            case "<stop/>":
              break;
            case "</stop>":
              break;
            case "<color":
            case "<color/>":
              break;
            case "</color>":
              break;
            case "<extLst":
            case "<extLst>":
            case "</extLst>":
              break;
            case "<ext":
              pass = true;
              break;
            case "</ext>":
              pass = false;
              break;
            default:
              if (opts && opts.WTF) {
                if (!pass) throw new Error("unrecognized " + y[0] + " in fills");
              }
          }
        });
      }
      function parse_fonts(t, styles, themes, opts) {
        styles.Fonts = [];
        var font = {};
        var pass = false;
        (t[0].match(tagregex) || []).forEach(function(x) {
          var y = parsexmltag(x);
          switch (strip_ns(y[0])) {
            case "<fonts":
            case "<fonts>":
            case "</fonts>":
              break;
            case "<font":
            case "<font>":
              break;
            case "</font>":
            case "<font/>":
              styles.Fonts.push(font);
              font = {};
              break;
            case "<name":
              if (y.val) font.name = utf8read(y.val);
              break;
            case "<name/>":
            case "</name>":
              break;
            case "<b":
              font.bold = y.val ? parsexmlbool(y.val) : 1;
              break;
            case "<b/>":
              font.bold = 1;
              break;
            case "<i":
              font.italic = y.val ? parsexmlbool(y.val) : 1;
              break;
            case "<i/>":
              font.italic = 1;
              break;
            case "<u":
              switch (y.val) {
                case "none":
                  font.underline = 0;
                  break;
                case "single":
                  font.underline = 1;
                  break;
                case "double":
                  font.underline = 2;
                  break;
                case "singleAccounting":
                  font.underline = 33;
                  break;
                case "doubleAccounting":
                  font.underline = 34;
                  break;
              }
              break;
            case "<u/>":
              font.underline = 1;
              break;
            case "<strike":
              font.strike = y.val ? parsexmlbool(y.val) : 1;
              break;
            case "<strike/>":
              font.strike = 1;
              break;
            case "<outline":
              font.outline = y.val ? parsexmlbool(y.val) : 1;
              break;
            case "<outline/>":
              font.outline = 1;
              break;
            case "<shadow":
              font.shadow = y.val ? parsexmlbool(y.val) : 1;
              break;
            case "<shadow/>":
              font.shadow = 1;
              break;
            case "<condense":
              font.condense = y.val ? parsexmlbool(y.val) : 1;
              break;
            case "<condense/>":
              font.condense = 1;
              break;
            case "<extend":
              font.extend = y.val ? parsexmlbool(y.val) : 1;
              break;
            case "<extend/>":
              font.extend = 1;
              break;
            case "<sz":
              if (y.val) font.sz = +y.val;
              break;
            case "<sz/>":
            case "</sz>":
              break;
            case "<vertAlign":
              if (y.val) font.vertAlign = y.val;
              break;
            case "<vertAlign/>":
            case "</vertAlign>":
              break;
            case "<family":
              if (y.val) font.family = parseInt(y.val, 10);
              break;
            case "<family/>":
            case "</family>":
              break;
            case "<scheme":
              if (y.val) font.scheme = y.val;
              break;
            case "<scheme/>":
            case "</scheme>":
              break;
            case "<charset":
              if (y.val == "1") break;
              y.codepage = CS2CP[parseInt(y.val, 10)];
              break;
            case "<color":
              if (!font.color) font.color = {};
              if (y.auto) font.color.auto = parsexmlbool(y.auto);
              if (y.rgb) font.color.rgb = y.rgb.slice(-6);
              else if (y.indexed) {
                font.color.index = parseInt(y.indexed, 10);
                var icv = XLSIcv[font.color.index];
                if (font.color.index == 81) icv = XLSIcv[1];
                if (!icv) icv = XLSIcv[1];
                font.color.rgb = icv[0].toString(16) + icv[1].toString(16) + icv[2].toString(16);
              } else if (y.theme) {
                font.color.theme = parseInt(y.theme, 10);
                if (y.tint) font.color.tint = parseFloat(y.tint);
                if (y.theme && themes.themeElements && themes.themeElements.clrScheme) {
                  font.color.rgb = rgb_tint(themes.themeElements.clrScheme[font.color.theme].rgb, font.color.tint || 0);
                }
              }
              break;
            case "<color/>":
            case "</color>":
              break;
            case "<AlternateContent":
              pass = true;
              break;
            case "</AlternateContent>":
              pass = false;
              break;
            case "<extLst":
            case "<extLst>":
            case "</extLst>":
              break;
            case "<ext":
              pass = true;
              break;
            case "</ext>":
              pass = false;
              break;
            default:
              if (opts && opts.WTF) {
                if (!pass) throw new Error("unrecognized " + y[0] + " in fonts");
              }
          }
        });
      }
      function parse_numFmts(t, styles, opts) {
        styles.NumberFmt = [];
        var k = keys(table_fmt);
        for (var i = 0; i < k.length; ++i) styles.NumberFmt[k[i]] = table_fmt[k[i]];
        var m = t[0].match(tagregex);
        if (!m) return;
        for (i = 0; i < m.length; ++i) {
          var y = parsexmltag(m[i]);
          switch (strip_ns(y[0])) {
            case "<numFmts":
            case "</numFmts>":
            case "<numFmts/>":
            case "<numFmts>":
              break;
            case "<numFmt":
              {
                var f = unescapexml(utf8read(y.formatCode)), j = parseInt(y.numFmtId, 10);
                styles.NumberFmt[j] = f;
                if (j > 0) {
                  if (j > 392) {
                    for (j = 392; j > 60; --j) if (styles.NumberFmt[j] == null) break;
                    styles.NumberFmt[j] = f;
                  }
                  SSF_load(f, j);
                }
              }
              break;
            case "</numFmt>":
              break;
            default:
              if (opts.WTF) throw new Error("unrecognized " + y[0] + " in numFmts");
          }
        }
      }
      function write_numFmts(NF) {
        var o = ["<numFmts>"];
        [[5, 8], [23, 26], [41, 44], [
          /*63*/
          50,
          /*66],[164,*/
          392
        ]].forEach(function(r) {
          for (var i = r[0]; i <= r[1]; ++i) if (NF[i] != null) o[o.length] = writextag("numFmt", null, { numFmtId: i, formatCode: escapexml(NF[i]) });
        });
        if (o.length === 1) return "";
        o[o.length] = "</numFmts>";
        o[0] = writextag("numFmts", null, { count: o.length - 2 }).replace("/>", ">");
        return o.join("");
      }
      var cellXF_uint = ["numFmtId", "fillId", "fontId", "borderId", "xfId"];
      var cellXF_bool = ["applyAlignment", "applyBorder", "applyFill", "applyFont", "applyNumberFormat", "applyProtection", "pivotButton", "quotePrefix"];
      function parse_cellXfs(t, styles, opts) {
        styles.CellXf = [];
        var xf;
        var pass = false;
        (t[0].match(tagregex) || []).forEach(function(x) {
          var y = parsexmltag(x), i = 0;
          switch (strip_ns(y[0])) {
            case "<cellXfs":
            case "<cellXfs>":
            case "<cellXfs/>":
            case "</cellXfs>":
              break;
            case "<xf":
            case "<xf/>":
              xf = y;
              delete xf[0];
              for (i = 0; i < cellXF_uint.length; ++i) if (xf[cellXF_uint[i]])
                xf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);
              for (i = 0; i < cellXF_bool.length; ++i) if (xf[cellXF_bool[i]])
                xf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);
              if (styles.NumberFmt && xf.numFmtId > 392) {
                for (i = 392; i > 60; --i) if (styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) {
                  xf.numFmtId = i;
                  break;
                }
              }
              styles.CellXf.push(xf);
              break;
            case "</xf>":
              break;
            case "<alignment":
            case "<alignment/>":
              var alignment = {};
              if (y.vertical) alignment.vertical = y.vertical;
              if (y.horizontal) alignment.horizontal = y.horizontal;
              if (y.textRotation != null) alignment.textRotation = y.textRotation;
              if (y.indent) alignment.indent = y.indent;
              if (y.wrapText) alignment.wrapText = parsexmlbool(y.wrapText);
              xf.alignment = alignment;
              break;
            case "</alignment>":
              break;
            case "<protection":
              break;
            case "</protection>":
            case "<protection/>":
              break;
            case "<AlternateContent":
              pass = true;
              break;
            case "</AlternateContent>":
              pass = false;
              break;
            case "<extLst":
            case "<extLst>":
            case "</extLst>":
              break;
            case "<ext":
              pass = true;
              break;
            case "</ext>":
              pass = false;
              break;
            default:
              if (opts && opts.WTF) {
                if (!pass) throw new Error("unrecognized " + y[0] + " in cellXfs");
              }
          }
        });
      }
      function write_cellXfs(cellXfs) {
        var o = [];
        o[o.length] = writextag("cellXfs", null);
        cellXfs.forEach(function(c) {
          o[o.length] = writextag("xf", null, c);
        });
        o[o.length] = "</cellXfs>";
        if (o.length === 2) return "";
        o[0] = writextag("cellXfs", null, { count: o.length - 2 }).replace("/>", ">");
        return o.join("");
      }
      var parse_sty_xml = /* @__PURE__ */ function make_pstyx() {
        var numFmtRegex = /<(?:\w+:)?numFmts([^>]*)>[\S\s]*?<\/(?:\w+:)?numFmts>/;
        var cellXfRegex = /<(?:\w+:)?cellXfs([^>]*)>[\S\s]*?<\/(?:\w+:)?cellXfs>/;
        var fillsRegex = /<(?:\w+:)?fills([^>]*)>[\S\s]*?<\/(?:\w+:)?fills>/;
        var fontsRegex = /<(?:\w+:)?fonts([^>]*)>[\S\s]*?<\/(?:\w+:)?fonts>/;
        var bordersRegex = /<(?:\w+:)?borders([^>]*)>[\S\s]*?<\/(?:\w+:)?borders>/;
        return function parse_sty_xml2(data, themes, opts) {
          var styles = {};
          if (!data) return styles;
          data = data.replace(/<!--([\s\S]*?)-->/mg, "").replace(/<!DOCTYPE[^\[]*\[[^\]]*\]>/gm, "");
          var t;
          if (t = data.match(numFmtRegex)) parse_numFmts(t, styles, opts);
          if (t = data.match(fontsRegex)) parse_fonts(t, styles, themes, opts);
          if (t = data.match(fillsRegex)) parse_fills(t, styles, themes, opts);
          if (t = data.match(bordersRegex)) parse_borders(t, styles, themes, opts);
          if (t = data.match(cellXfRegex)) parse_cellXfs(t, styles, opts);
          return styles;
        };
      }();
      function write_sty_xml(wb, opts) {
        var o = [XML_HEADER, writextag("styleSheet", null, {
          "xmlns": XMLNS_main[0],
          "xmlns:vt": XMLNS.vt
        })], w;
        if (wb.SSF && (w = write_numFmts(wb.SSF)) != null) o[o.length] = w;
        o[o.length] = '<fonts count="1"><font><sz val="12"/><color theme="1"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font></fonts>';
        o[o.length] = '<fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills>';
        o[o.length] = '<borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders>';
        o[o.length] = '<cellStyleXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"/></cellStyleXfs>';
        if (w = write_cellXfs(opts.cellXfs)) o[o.length] = w;
        o[o.length] = '<cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles>';
        o[o.length] = '<dxfs count="0"/>';
        o[o.length] = '<tableStyles count="0" defaultTableStyle="TableStyleMedium9" defaultPivotStyle="PivotStyleMedium4"/>';
        if (o.length > 2) {
          o[o.length] = "</styleSheet>";
          o[1] = o[1].replace("/>", ">");
        }
        return o.join("");
      }
      function parse_BrtFmt(data, length) {
        var numFmtId = data.read_shift(2);
        var stFmtCode = parse_XLWideString(data, length - 2);
        return [numFmtId, stFmtCode];
      }
      function write_BrtFmt(i, f, o) {
        if (!o) o = new_buf(6 + 4 * f.length);
        o.write_shift(2, i);
        write_XLWideString(f, o);
        var out = o.length > o.l ? o.slice(0, o.l) : o;
        if (o.l == null) o.l = o.length;
        return out;
      }
      function parse_BrtFont(data, length, opts) {
        var out = {};
        out.sz = data.read_shift(2) / 20;
        var grbit = parse_FontFlags(data, 2, opts);
        if (grbit.fItalic) out.italic = 1;
        if (grbit.fCondense) out.condense = 1;
        if (grbit.fExtend) out.extend = 1;
        if (grbit.fShadow) out.shadow = 1;
        if (grbit.fOutline) out.outline = 1;
        if (grbit.fStrikeout) out.strike = 1;
        var bls = data.read_shift(2);
        if (bls === 700) out.bold = 1;
        switch (data.read_shift(2)) {
          case 1:
            out.vertAlign = "superscript";
            break;
          case 2:
            out.vertAlign = "subscript";
            break;
        }
        var underline = data.read_shift(1);
        if (underline != 0) out.underline = underline;
        var family = data.read_shift(1);
        if (family > 0) out.family = family;
        var bCharSet = data.read_shift(1);
        if (bCharSet > 0) out.charset = bCharSet;
        data.l++;
        out.color = parse_BrtColor(data, 8);
        switch (data.read_shift(1)) {
          case 1:
            out.scheme = "major";
            break;
          case 2:
            out.scheme = "minor";
            break;
        }
        out.name = parse_XLWideString(data, length - 21);
        return out;
      }
      function write_BrtFont(font, o) {
        if (!o) o = new_buf(25 + 4 * 32);
        o.write_shift(2, font.sz * 20);
        write_FontFlags(font, o);
        o.write_shift(2, font.bold ? 700 : 400);
        var sss = 0;
        if (font.vertAlign == "superscript") sss = 1;
        else if (font.vertAlign == "subscript") sss = 2;
        o.write_shift(2, sss);
        o.write_shift(1, font.underline || 0);
        o.write_shift(1, font.family || 0);
        o.write_shift(1, font.charset || 0);
        o.write_shift(1, 0);
        write_BrtColor(font.color, o);
        var scheme = 0;
        if (font.scheme == "major") scheme = 1;
        if (font.scheme == "minor") scheme = 2;
        o.write_shift(1, scheme);
        write_XLWideString(font.name, o);
        return o.length > o.l ? o.slice(0, o.l) : o;
      }
      var XLSBFillPTNames = [
        "none",
        "solid",
        "mediumGray",
        "darkGray",
        "lightGray",
        "darkHorizontal",
        "darkVertical",
        "darkDown",
        "darkUp",
        "darkGrid",
        "darkTrellis",
        "lightHorizontal",
        "lightVertical",
        "lightDown",
        "lightUp",
        "lightGrid",
        "lightTrellis",
        "gray125",
        "gray0625"
      ];
      var rev_XLSBFillPTNames;
      var parse_BrtFill = parsenoop;
      function write_BrtFill(fill2, o) {
        if (!o) o = new_buf(4 * 3 + 8 * 7 + 16 * 1);
        if (!rev_XLSBFillPTNames) rev_XLSBFillPTNames = evert(XLSBFillPTNames);
        var fls = rev_XLSBFillPTNames[fill2.patternType];
        if (fls == null) fls = 40;
        o.write_shift(4, fls);
        var j = 0;
        if (fls != 40) {
          write_BrtColor({ auto: 1 }, o);
          write_BrtColor({ auto: 1 }, o);
          for (; j < 12; ++j) o.write_shift(4, 0);
        } else {
          for (; j < 4; ++j) o.write_shift(4, 0);
          for (; j < 12; ++j) o.write_shift(4, 0);
        }
        return o.length > o.l ? o.slice(0, o.l) : o;
      }
      function parse_BrtXF(data, length) {
        var tgt = data.l + length;
        var ixfeParent = data.read_shift(2);
        var ifmt = data.read_shift(2);
        data.l = tgt;
        return { ixfe: ixfeParent, numFmtId: ifmt };
      }
      function write_BrtXF(data, ixfeP, o) {
        if (!o) o = new_buf(16);
        o.write_shift(2, ixfeP || 0);
        o.write_shift(2, data.numFmtId || 0);
        o.write_shift(2, 0);
        o.write_shift(2, 0);
        o.write_shift(2, 0);
        o.write_shift(1, 0);
        o.write_shift(1, 0);
        var flow = 0;
        o.write_shift(1, flow);
        o.write_shift(1, 0);
        o.write_shift(1, 0);
        o.write_shift(1, 0);
        return o;
      }
      function write_Blxf(data, o) {
        if (!o) o = new_buf(10);
        o.write_shift(1, 0);
        o.write_shift(1, 0);
        o.write_shift(4, 0);
        o.write_shift(4, 0);
        return o;
      }
      var parse_BrtBorder = parsenoop;
      function write_BrtBorder(border, o) {
        if (!o) o = new_buf(51);
        o.write_shift(1, 0);
        write_Blxf(null, o);
        write_Blxf(null, o);
        write_Blxf(null, o);
        write_Blxf(null, o);
        write_Blxf(null, o);
        return o.length > o.l ? o.slice(0, o.l) : o;
      }
      function write_BrtStyle(style, o) {
        if (!o) o = new_buf(12 + 4 * 10);
        o.write_shift(4, style.xfId);
        o.write_shift(2, 1);
        o.write_shift(1, +style.builtinId);
        o.write_shift(1, 0);
        write_XLNullableWideString(style.name || "", o);
        return o.length > o.l ? o.slice(0, o.l) : o;
      }
      function write_BrtBeginTableStyles(cnt, defTableStyle, defPivotStyle) {
        var o = new_buf(4 + 256 * 2 * 4);
        o.write_shift(4, cnt);
        write_XLNullableWideString(defTableStyle, o);
        write_XLNullableWideString(defPivotStyle, o);
        return o.length > o.l ? o.slice(0, o.l) : o;
      }
      function parse_sty_bin(data, themes, opts) {
        var styles = {};
        styles.NumberFmt = [];
        for (var y in table_fmt) styles.NumberFmt[y] = table_fmt[y];
        styles.CellXf = [];
        styles.Fonts = [];
        var state = [];
        var pass = false;
        recordhopper(data, function hopper_sty(val, R, RT) {
          switch (RT) {
            case 44:
              styles.NumberFmt[val[0]] = val[1];
              SSF_load(val[1], val[0]);
              break;
            case 43:
              styles.Fonts.push(val);
              if (val.color.theme != null && themes && themes.themeElements && themes.themeElements.clrScheme) {
                val.color.rgb = rgb_tint(themes.themeElements.clrScheme[val.color.theme].rgb, val.color.tint || 0);
              }
              break;
            case 1025:
              break;
            case 45:
              break;
            case 46:
              break;
            case 47:
              if (state[state.length - 1] == 617) {
                styles.CellXf.push(val);
              }
              break;
            case 48:
            case 507:
            case 572:
            case 475:
              break;
            case 1171:
            case 2102:
            case 1130:
            case 512:
            case 2095:
            case 3072:
              break;
            case 35:
              pass = true;
              break;
            case 36:
              pass = false;
              break;
            case 37:
              state.push(RT);
              pass = true;
              break;
            case 38:
              state.pop();
              pass = false;
              break;
            default:
              if (R.T > 0) state.push(RT);
              else if (R.T < 0) state.pop();
              else if (!pass || opts.WTF && state[state.length - 1] != 37) throw new Error("Unexpected record 0x" + RT.toString(16));
          }
        });
        return styles;
      }
      function write_FMTS_bin(ba, NF) {
        if (!NF) return;
        var cnt = 0;
        [[5, 8], [23, 26], [41, 44], [
          /*63*/
          50,
          /*66],[164,*/
          392
        ]].forEach(function(r) {
          for (var i = r[0]; i <= r[1]; ++i) if (NF[i] != null) ++cnt;
        });
        if (cnt == 0) return;
        write_record(ba, 615, write_UInt32LE(cnt));
        [[5, 8], [23, 26], [41, 44], [
          /*63*/
          50,
          /*66],[164,*/
          392
        ]].forEach(function(r) {
          for (var i = r[0]; i <= r[1]; ++i) if (NF[i] != null) write_record(ba, 44, write_BrtFmt(i, NF[i]));
        });
        write_record(
          ba,
          616
          /* BrtEndFmts */
        );
      }
      function write_FONTS_bin(ba) {
        var cnt = 1;
        if (cnt == 0) return;
        write_record(ba, 611, write_UInt32LE(cnt));
        write_record(ba, 43, write_BrtFont({
          sz: 12,
          color: { theme: 1 },
          name: "Calibri",
          family: 2,
          scheme: "minor"
        }));
        write_record(
          ba,
          612
          /* BrtEndFonts */
        );
      }
      function write_FILLS_bin(ba) {
        var cnt = 2;
        if (cnt == 0) return;
        write_record(ba, 603, write_UInt32LE(cnt));
        write_record(ba, 45, write_BrtFill({ patternType: "none" }));
        write_record(ba, 45, write_BrtFill({ patternType: "gray125" }));
        write_record(
          ba,
          604
          /* BrtEndFills */
        );
      }
      function write_BORDERS_bin(ba) {
        var cnt = 1;
        if (cnt == 0) return;
        write_record(ba, 613, write_UInt32LE(cnt));
        write_record(ba, 46, write_BrtBorder({}));
        write_record(
          ba,
          614
          /* BrtEndBorders */
        );
      }
      function write_CELLSTYLEXFS_bin(ba) {
        var cnt = 1;
        write_record(ba, 626, write_UInt32LE(cnt));
        write_record(ba, 47, write_BrtXF({
          numFmtId: 0,
          fontId: 0,
          fillId: 0,
          borderId: 0
        }, 65535));
        write_record(
          ba,
          627
          /* BrtEndCellStyleXFs */
        );
      }
      function write_CELLXFS_bin(ba, data) {
        write_record(ba, 617, write_UInt32LE(data.length));
        data.forEach(function(c) {
          write_record(ba, 47, write_BrtXF(c, 0));
        });
        write_record(
          ba,
          618
          /* BrtEndCellXFs */
        );
      }
      function write_STYLES_bin(ba) {
        var cnt = 1;
        write_record(ba, 619, write_UInt32LE(cnt));
        write_record(ba, 48, write_BrtStyle({
          xfId: 0,
          builtinId: 0,
          name: "Normal"
        }));
        write_record(
          ba,
          620
          /* BrtEndStyles */
        );
      }
      function write_DXFS_bin(ba) {
        var cnt = 0;
        write_record(ba, 505, write_UInt32LE(cnt));
        write_record(
          ba,
          506
          /* BrtEndDXFs */
        );
      }
      function write_TABLESTYLES_bin(ba) {
        var cnt = 0;
        write_record(ba, 508, write_BrtBeginTableStyles(cnt, "TableStyleMedium9", "PivotStyleMedium4"));
        write_record(
          ba,
          509
          /* BrtEndTableStyles */
        );
      }
      function write_COLORPALETTE_bin() {
        return;
      }
      function write_sty_bin(wb, opts) {
        var ba = buf_array();
        write_record(
          ba,
          278
          /* BrtBeginStyleSheet */
        );
        write_FMTS_bin(ba, wb.SSF);
        write_FONTS_bin(ba, wb);
        write_FILLS_bin(ba, wb);
        write_BORDERS_bin(ba, wb);
        write_CELLSTYLEXFS_bin(ba, wb);
        write_CELLXFS_bin(ba, opts.cellXfs);
        write_STYLES_bin(ba, wb);
        write_DXFS_bin(ba, wb);
        write_TABLESTYLES_bin(ba, wb);
        write_COLORPALETTE_bin(ba, wb);
        write_record(
          ba,
          279
          /* BrtEndStyleSheet */
        );
        return ba.end();
      }
      var XLSXThemeClrScheme = [
        "</a:lt1>",
        "</a:dk1>",
        "</a:lt2>",
        "</a:dk2>",
        "</a:accent1>",
        "</a:accent2>",
        "</a:accent3>",
        "</a:accent4>",
        "</a:accent5>",
        "</a:accent6>",
        "</a:hlink>",
        "</a:folHlink>"
      ];
      function parse_clrScheme(t, themes, opts) {
        themes.themeElements.clrScheme = [];
        var color = {};
        (t[0].match(tagregex) || []).forEach(function(x) {
          var y = parsexmltag(x);
          switch (y[0]) {
            case "<a:clrScheme":
            case "</a:clrScheme>":
              break;
            case "<a:srgbClr":
              color.rgb = y.val;
              break;
            case "<a:sysClr":
              color.rgb = y.lastClr;
              break;
            case "<a:dk1>":
            case "</a:dk1>":
            case "<a:lt1>":
            case "</a:lt1>":
            case "<a:dk2>":
            case "</a:dk2>":
            case "<a:lt2>":
            case "</a:lt2>":
            case "<a:accent1>":
            case "</a:accent1>":
            case "<a:accent2>":
            case "</a:accent2>":
            case "<a:accent3>":
            case "</a:accent3>":
            case "<a:accent4>":
            case "</a:accent4>":
            case "<a:accent5>":
            case "</a:accent5>":
            case "<a:accent6>":
            case "</a:accent6>":
            case "<a:hlink>":
            case "</a:hlink>":
            case "<a:folHlink>":
            case "</a:folHlink>":
              if (y[0].charAt(1) === "/") {
                themes.themeElements.clrScheme[XLSXThemeClrScheme.indexOf(y[0])] = color;
                color = {};
              } else {
                color.name = y[0].slice(3, y[0].length - 1);
              }
              break;
            default:
              if (opts && opts.WTF) throw new Error("Unrecognized " + y[0] + " in clrScheme");
          }
        });
      }
      function parse_fontScheme() {
      }
      function parse_fmtScheme() {
      }
      var clrsregex = /<a:clrScheme([^>]*)>[\s\S]*<\/a:clrScheme>/;
      var fntsregex = /<a:fontScheme([^>]*)>[\s\S]*<\/a:fontScheme>/;
      var fmtsregex = /<a:fmtScheme([^>]*)>[\s\S]*<\/a:fmtScheme>/;
      function parse_themeElements(data, themes, opts) {
        themes.themeElements = {};
        var t;
        [
          /* clrScheme CT_ColorScheme */
          ["clrScheme", clrsregex, parse_clrScheme],
          /* fontScheme CT_FontScheme */
          ["fontScheme", fntsregex, parse_fontScheme],
          /* fmtScheme CT_StyleMatrix */
          ["fmtScheme", fmtsregex, parse_fmtScheme]
        ].forEach(function(m) {
          if (!(t = data.match(m[1]))) throw new Error(m[0] + " not found in themeElements");
          m[2](t, themes, opts);
        });
      }
      var themeltregex = /<a:themeElements([^>]*)>[\s\S]*<\/a:themeElements>/;
      function parse_theme_xml(data, opts) {
        if (!data || data.length === 0) data = write_theme();
        var t;
        var themes = {};
        if (!(t = data.match(themeltregex))) throw new Error("themeElements not found in theme");
        parse_themeElements(t[0], themes, opts);
        themes.raw = data;
        return themes;
      }
      function write_theme(Themes, opts) {
        if (opts && opts.themeXLSX) return opts.themeXLSX;
        if (Themes && typeof Themes.raw == "string") return Themes.raw;
        var o = [XML_HEADER];
        o[o.length] = '<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme">';
        o[o.length] = "<a:themeElements>";
        o[o.length] = '<a:clrScheme name="Office">';
        o[o.length] = '<a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1>';
        o[o.length] = '<a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1>';
        o[o.length] = '<a:dk2><a:srgbClr val="1F497D"/></a:dk2>';
        o[o.length] = '<a:lt2><a:srgbClr val="EEECE1"/></a:lt2>';
        o[o.length] = '<a:accent1><a:srgbClr val="4F81BD"/></a:accent1>';
        o[o.length] = '<a:accent2><a:srgbClr val="C0504D"/></a:accent2>';
        o[o.length] = '<a:accent3><a:srgbClr val="9BBB59"/></a:accent3>';
        o[o.length] = '<a:accent4><a:srgbClr val="8064A2"/></a:accent4>';
        o[o.length] = '<a:accent5><a:srgbClr val="4BACC6"/></a:accent5>';
        o[o.length] = '<a:accent6><a:srgbClr val="F79646"/></a:accent6>';
        o[o.length] = '<a:hlink><a:srgbClr val="0000FF"/></a:hlink>';
        o[o.length] = '<a:folHlink><a:srgbClr val="800080"/></a:folHlink>';
        o[o.length] = "</a:clrScheme>";
        o[o.length] = '<a:fontScheme name="Office">';
        o[o.length] = "<a:majorFont>";
        o[o.length] = '<a:latin typeface="Cambria"/>';
        o[o.length] = '<a:ea typeface=""/>';
        o[o.length] = '<a:cs typeface=""/>';
        o[o.length] = '<a:font script="Jpan" typeface="\uFF2D\uFF33 \uFF30\u30B4\u30B7\u30C3\u30AF"/>';
        o[o.length] = '<a:font script="Hang" typeface="\uB9D1\uC740 \uACE0\uB515"/>';
        o[o.length] = '<a:font script="Hans" typeface="\u5B8B\u4F53"/>';
        o[o.length] = '<a:font script="Hant" typeface="\u65B0\u7D30\u660E\u9AD4"/>';
        o[o.length] = '<a:font script="Arab" typeface="Times New Roman"/>';
        o[o.length] = '<a:font script="Hebr" typeface="Times New Roman"/>';
        o[o.length] = '<a:font script="Thai" typeface="Tahoma"/>';
        o[o.length] = '<a:font script="Ethi" typeface="Nyala"/>';
        o[o.length] = '<a:font script="Beng" typeface="Vrinda"/>';
        o[o.length] = '<a:font script="Gujr" typeface="Shruti"/>';
        o[o.length] = '<a:font script="Khmr" typeface="MoolBoran"/>';
        o[o.length] = '<a:font script="Knda" typeface="Tunga"/>';
        o[o.length] = '<a:font script="Guru" typeface="Raavi"/>';
        o[o.length] = '<a:font script="Cans" typeface="Euphemia"/>';
        o[o.length] = '<a:font script="Cher" typeface="Plantagenet Cherokee"/>';
        o[o.length] = '<a:font script="Yiii" typeface="Microsoft Yi Baiti"/>';
        o[o.length] = '<a:font script="Tibt" typeface="Microsoft Himalaya"/>';
        o[o.length] = '<a:font script="Thaa" typeface="MV Boli"/>';
        o[o.length] = '<a:font script="Deva" typeface="Mangal"/>';
        o[o.length] = '<a:font script="Telu" typeface="Gautami"/>';
        o[o.length] = '<a:font script="Taml" typeface="Latha"/>';
        o[o.length] = '<a:font script="Syrc" typeface="Estrangelo Edessa"/>';
        o[o.length] = '<a:font script="Orya" typeface="Kalinga"/>';
        o[o.length] = '<a:font script="Mlym" typeface="Kartika"/>';
        o[o.length] = '<a:font script="Laoo" typeface="DokChampa"/>';
        o[o.length] = '<a:font script="Sinh" typeface="Iskoola Pota"/>';
        o[o.length] = '<a:font script="Mong" typeface="Mongolian Baiti"/>';
        o[o.length] = '<a:font script="Viet" typeface="Times New Roman"/>';
        o[o.length] = '<a:font script="Uigh" typeface="Microsoft Uighur"/>';
        o[o.length] = '<a:font script="Geor" typeface="Sylfaen"/>';
        o[o.length] = "</a:majorFont>";
        o[o.length] = "<a:minorFont>";
        o[o.length] = '<a:latin typeface="Calibri"/>';
        o[o.length] = '<a:ea typeface=""/>';
        o[o.length] = '<a:cs typeface=""/>';
        o[o.length] = '<a:font script="Jpan" typeface="\uFF2D\uFF33 \uFF30\u30B4\u30B7\u30C3\u30AF"/>';
        o[o.length] = '<a:font script="Hang" typeface="\uB9D1\uC740 \uACE0\uB515"/>';
        o[o.length] = '<a:font script="Hans" typeface="\u5B8B\u4F53"/>';
        o[o.length] = '<a:font script="Hant" typeface="\u65B0\u7D30\u660E\u9AD4"/>';
        o[o.length] = '<a:font script="Arab" typeface="Arial"/>';
        o[o.length] = '<a:font script="Hebr" typeface="Arial"/>';
        o[o.length] = '<a:font script="Thai" typeface="Tahoma"/>';
        o[o.length] = '<a:font script="Ethi" typeface="Nyala"/>';
        o[o.length] = '<a:font script="Beng" typeface="Vrinda"/>';
        o[o.length] = '<a:font script="Gujr" typeface="Shruti"/>';
        o[o.length] = '<a:font script="Khmr" typeface="DaunPenh"/>';
        o[o.length] = '<a:font script="Knda" typeface="Tunga"/>';
        o[o.length] = '<a:font script="Guru" typeface="Raavi"/>';
        o[o.length] = '<a:font script="Cans" typeface="Euphemia"/>';
        o[o.length] = '<a:font script="Cher" typeface="Plantagenet Cherokee"/>';
        o[o.length] = '<a:font script="Yiii" typeface="Microsoft Yi Baiti"/>';
        o[o.length] = '<a:font script="Tibt" typeface="Microsoft Himalaya"/>';
        o[o.length] = '<a:font script="Thaa" typeface="MV Boli"/>';
        o[o.length] = '<a:font script="Deva" typeface="Mangal"/>';
        o[o.length] = '<a:font script="Telu" typeface="Gautami"/>';
        o[o.length] = '<a:font script="Taml" typeface="Latha"/>';
        o[o.length] = '<a:font script="Syrc" typeface="Estrangelo Edessa"/>';
        o[o.length] = '<a:font script="Orya" typeface="Kalinga"/>';
        o[o.length] = '<a:font script="Mlym" typeface="Kartika"/>';
        o[o.length] = '<a:font script="Laoo" typeface="DokChampa"/>';
        o[o.length] = '<a:font script="Sinh" typeface="Iskoola Pota"/>';
        o[o.length] = '<a:font script="Mong" typeface="Mongolian Baiti"/>';
        o[o.length] = '<a:font script="Viet" typeface="Arial"/>';
        o[o.length] = '<a:font script="Uigh" typeface="Microsoft Uighur"/>';
        o[o.length] = '<a:font script="Geor" typeface="Sylfaen"/>';
        o[o.length] = "</a:minorFont>";
        o[o.length] = "</a:fontScheme>";
        o[o.length] = '<a:fmtScheme name="Office">';
        o[o.length] = "<a:fillStyleLst>";
        o[o.length] = '<a:solidFill><a:schemeClr val="phClr"/></a:solidFill>';
        o[o.length] = '<a:gradFill rotWithShape="1">';
        o[o.length] = "<a:gsLst>";
        o[o.length] = '<a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="50000"/><a:satMod val="300000"/></a:schemeClr></a:gs>';
        o[o.length] = '<a:gs pos="35000"><a:schemeClr val="phClr"><a:tint val="37000"/><a:satMod val="300000"/></a:schemeClr></a:gs>';
        o[o.length] = '<a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="15000"/><a:satMod val="350000"/></a:schemeClr></a:gs>';
        o[o.length] = "</a:gsLst>";
        o[o.length] = '<a:lin ang="16200000" scaled="1"/>';
        o[o.length] = "</a:gradFill>";
        o[o.length] = '<a:gradFill rotWithShape="1">';
        o[o.length] = "<a:gsLst>";
        o[o.length] = '<a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="100000"/><a:shade val="100000"/><a:satMod val="130000"/></a:schemeClr></a:gs>';
        o[o.length] = '<a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="50000"/><a:shade val="100000"/><a:satMod val="350000"/></a:schemeClr></a:gs>';
        o[o.length] = "</a:gsLst>";
        o[o.length] = '<a:lin ang="16200000" scaled="0"/>';
        o[o.length] = "</a:gradFill>";
        o[o.length] = "</a:fillStyleLst>";
        o[o.length] = "<a:lnStyleLst>";
        o[o.length] = '<a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"><a:shade val="95000"/><a:satMod val="105000"/></a:schemeClr></a:solidFill><a:prstDash val="solid"/></a:ln>';
        o[o.length] = '<a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln>';
        o[o.length] = '<a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln>';
        o[o.length] = "</a:lnStyleLst>";
        o[o.length] = "<a:effectStyleLst>";
        o[o.length] = "<a:effectStyle>";
        o[o.length] = "<a:effectLst>";
        o[o.length] = '<a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="38000"/></a:srgbClr></a:outerShdw>';
        o[o.length] = "</a:effectLst>";
        o[o.length] = "</a:effectStyle>";
        o[o.length] = "<a:effectStyle>";
        o[o.length] = "<a:effectLst>";
        o[o.length] = '<a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw>';
        o[o.length] = "</a:effectLst>";
        o[o.length] = "</a:effectStyle>";
        o[o.length] = "<a:effectStyle>";
        o[o.length] = "<a:effectLst>";
        o[o.length] = '<a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw>';
        o[o.length] = "</a:effectLst>";
        o[o.length] = '<a:scene3d><a:camera prst="orthographicFront"><a:rot lat="0" lon="0" rev="0"/></a:camera><a:lightRig rig="threePt" dir="t"><a:rot lat="0" lon="0" rev="1200000"/></a:lightRig></a:scene3d>';
        o[o.length] = '<a:sp3d><a:bevelT w="63500" h="25400"/></a:sp3d>';
        o[o.length] = "</a:effectStyle>";
        o[o.length] = "</a:effectStyleLst>";
        o[o.length] = "<a:bgFillStyleLst>";
        o[o.length] = '<a:solidFill><a:schemeClr val="phClr"/></a:solidFill>';
        o[o.length] = '<a:gradFill rotWithShape="1">';
        o[o.length] = "<a:gsLst>";
        o[o.length] = '<a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="40000"/><a:satMod val="350000"/></a:schemeClr></a:gs>';
        o[o.length] = '<a:gs pos="40000"><a:schemeClr val="phClr"><a:tint val="45000"/><a:shade val="99000"/><a:satMod val="350000"/></a:schemeClr></a:gs>';
        o[o.length] = '<a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="20000"/><a:satMod val="255000"/></a:schemeClr></a:gs>';
        o[o.length] = "</a:gsLst>";
        o[o.length] = '<a:path path="circle"><a:fillToRect l="50000" t="-80000" r="50000" b="180000"/></a:path>';
        o[o.length] = "</a:gradFill>";
        o[o.length] = '<a:gradFill rotWithShape="1">';
        o[o.length] = "<a:gsLst>";
        o[o.length] = '<a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="80000"/><a:satMod val="300000"/></a:schemeClr></a:gs>';
        o[o.length] = '<a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="30000"/><a:satMod val="200000"/></a:schemeClr></a:gs>';
        o[o.length] = "</a:gsLst>";
        o[o.length] = '<a:path path="circle"><a:fillToRect l="50000" t="50000" r="50000" b="50000"/></a:path>';
        o[o.length] = "</a:gradFill>";
        o[o.length] = "</a:bgFillStyleLst>";
        o[o.length] = "</a:fmtScheme>";
        o[o.length] = "</a:themeElements>";
        o[o.length] = "<a:objectDefaults>";
        o[o.length] = "<a:spDef>";
        o[o.length] = '<a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="1"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="3"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="2"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="lt1"/></a:fontRef></a:style>';
        o[o.length] = "</a:spDef>";
        o[o.length] = "<a:lnDef>";
        o[o.length] = '<a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx="2"><a:schemeClr val="accent1"/></a:lnRef><a:fillRef idx="0"><a:schemeClr val="accent1"/></a:fillRef><a:effectRef idx="1"><a:schemeClr val="accent1"/></a:effectRef><a:fontRef idx="minor"><a:schemeClr val="tx1"/></a:fontRef></a:style>';
        o[o.length] = "</a:lnDef>";
        o[o.length] = "</a:objectDefaults>";
        o[o.length] = "<a:extraClrSchemeLst/>";
        o[o.length] = "</a:theme>";
        return o.join("");
      }
      function parse_Theme(blob, length, opts) {
        var end = blob.l + length;
        var dwThemeVersion = blob.read_shift(4);
        if (dwThemeVersion === 124226) return;
        if (!opts.cellStyles) {
          blob.l = end;
          return;
        }
        var data = blob.slice(blob.l);
        blob.l = end;
        var zip;
        try {
          zip = zip_read(data, { type: "array" });
        } catch (e) {
          return;
        }
        var themeXML = getzipstr(zip, "theme/theme/theme1.xml", true);
        if (!themeXML) return;
        return parse_theme_xml(themeXML, opts);
      }
      function parse_ColorTheme(blob) {
        return blob.read_shift(4);
      }
      function parse_FullColorExt(blob) {
        var o = {};
        o.xclrType = blob.read_shift(2);
        o.nTintShade = blob.read_shift(2);
        switch (o.xclrType) {
          case 0:
            blob.l += 4;
            break;
          case 1:
            o.xclrValue = parse_IcvXF(blob, 4);
            break;
          case 2:
            o.xclrValue = parse_LongRGBA(blob, 4);
            break;
          case 3:
            o.xclrValue = parse_ColorTheme(blob, 4);
            break;
          case 4:
            blob.l += 4;
            break;
        }
        blob.l += 8;
        return o;
      }
      function parse_IcvXF(blob, length) {
        return parsenoop(blob, length);
      }
      function parse_XFExtGradient(blob, length) {
        return parsenoop(blob, length);
      }
      function parse_ExtProp(blob) {
        var extType = blob.read_shift(2);
        var cb = blob.read_shift(2) - 4;
        var o = [extType];
        switch (extType) {
          case 4:
          case 5:
          case 7:
          case 8:
          case 9:
          case 10:
          case 11:
          case 13:
            o[1] = parse_FullColorExt(blob, cb);
            break;
          case 6:
            o[1] = parse_XFExtGradient(blob, cb);
            break;
          case 14:
          case 15:
            o[1] = blob.read_shift(cb === 1 ? 1 : 2);
            break;
          default:
            throw new Error("Unrecognized ExtProp type: " + extType + " " + cb);
        }
        return o;
      }
      function parse_XFExt(blob, length) {
        var end = blob.l + length;
        blob.l += 2;
        var ixfe = blob.read_shift(2);
        blob.l += 2;
        var cexts = blob.read_shift(2);
        var ext = [];
        while (cexts-- > 0) ext.push(parse_ExtProp(blob, end - blob.l));
        return { ixfe, ext };
      }
      function update_xfext(xf, xfext) {
        xfext.forEach(function(xfe) {
          switch (xfe[0]) {
            case 4:
              break;
            case 5:
              break;
            case 6:
              break;
            case 7:
              break;
            case 8:
              break;
            case 9:
              break;
            case 10:
              break;
            case 11:
              break;
            case 13:
              break;
            case 14:
              break;
            case 15:
              break;
          }
        });
      }
      function parse_BrtMdtinfo(data, length) {
        return {
          flags: data.read_shift(4),
          version: data.read_shift(4),
          name: parse_XLWideString(data, length - 8)
        };
      }
      function write_BrtMdtinfo(data) {
        var o = new_buf(12 + 2 * data.name.length);
        o.write_shift(4, data.flags);
        o.write_shift(4, data.version);
        write_XLWideString(data.name, o);
        return o.slice(0, o.l);
      }
      function parse_BrtMdb(data) {
        var out = [];
        var cnt = data.read_shift(4);
        while (cnt-- > 0)
          out.push([data.read_shift(4), data.read_shift(4)]);
        return out;
      }
      function write_BrtMdb(mdb) {
        var o = new_buf(4 + 8 * mdb.length);
        o.write_shift(4, mdb.length);
        for (var i = 0; i < mdb.length; ++i) {
          o.write_shift(4, mdb[i][0]);
          o.write_shift(4, mdb[i][1]);
        }
        return o;
      }
      function write_BrtBeginEsfmd(cnt, name) {
        var o = new_buf(8 + 2 * name.length);
        o.write_shift(4, cnt);
        write_XLWideString(name, o);
        return o.slice(0, o.l);
      }
      function parse_BrtBeginEsmdb(data) {
        data.l += 4;
        return data.read_shift(4) != 0;
      }
      function write_BrtBeginEsmdb(cnt, cm) {
        var o = new_buf(8);
        o.write_shift(4, cnt);
        o.write_shift(4, cm ? 1 : 0);
        return o;
      }
      function parse_xlmeta_bin(data, name, _opts) {
        var out = { Types: [], Cell: [], Value: [] };
        var opts = _opts || {};
        var state = [];
        var pass = false;
        var metatype = 2;
        recordhopper(data, function(val, R, RT) {
          switch (RT) {
            case 335:
              out.Types.push({ name: val.name });
              break;
            case 51:
              val.forEach(function(r) {
                if (metatype == 1)
                  out.Cell.push({ type: out.Types[r[0] - 1].name, index: r[1] });
                else if (metatype == 0)
                  out.Value.push({ type: out.Types[r[0] - 1].name, index: r[1] });
              });
              break;
            case 337:
              metatype = val ? 1 : 0;
              break;
            case 338:
              metatype = 2;
              break;
            case 35:
              state.push(RT);
              pass = true;
              break;
            case 36:
              state.pop();
              pass = false;
              break;
            default:
              if (R.T) {
              } else if (!pass || opts.WTF && state[state.length - 1] != 35)
                throw new Error("Unexpected record 0x" + RT.toString(16));
          }
        });
        return out;
      }
      function write_xlmeta_bin() {
        var ba = buf_array();
        write_record(ba, 332);
        write_record(ba, 334, write_UInt32LE(1));
        write_record(ba, 335, write_BrtMdtinfo({
          name: "XLDAPR",
          version: 12e4,
          flags: 3496657072
        }));
        write_record(ba, 336);
        write_record(ba, 339, write_BrtBeginEsfmd(1, "XLDAPR"));
        write_record(ba, 52);
        write_record(ba, 35, write_UInt32LE(514));
        write_record(ba, 4096, write_UInt32LE(0));
        write_record(ba, 4097, writeuint16(1));
        write_record(ba, 36);
        write_record(ba, 53);
        write_record(ba, 340);
        write_record(ba, 337, write_BrtBeginEsmdb(1, true));
        write_record(ba, 51, write_BrtMdb([[1, 0]]));
        write_record(ba, 338);
        write_record(ba, 333);
        return ba.end();
      }
      function parse_xlmeta_xml(data, name, opts) {
        var out = { Types: [], Cell: [], Value: [] };
        if (!data)
          return out;
        var pass = false;
        var metatype = 2;
        var lastmeta;
        data.replace(tagregex, function(x) {
          var y = parsexmltag(x);
          switch (strip_ns(y[0])) {
            case "<?xml":
              break;
            case "<metadata":
            case "</metadata>":
              break;
            case "<metadataTypes":
            case "</metadataTypes>":
              break;
            case "<metadataType":
              out.Types.push({ name: y.name });
              break;
            case "</metadataType>":
              break;
            case "<futureMetadata":
              for (var j = 0; j < out.Types.length; ++j)
                if (out.Types[j].name == y.name)
                  lastmeta = out.Types[j];
              break;
            case "</futureMetadata>":
              break;
            case "<bk>":
              break;
            case "</bk>":
              break;
            case "<rc":
              if (metatype == 1)
                out.Cell.push({ type: out.Types[y.t - 1].name, index: +y.v });
              else if (metatype == 0)
                out.Value.push({ type: out.Types[y.t - 1].name, index: +y.v });
              break;
            case "</rc>":
              break;
            case "<cellMetadata":
              metatype = 1;
              break;
            case "</cellMetadata>":
              metatype = 2;
              break;
            case "<valueMetadata":
              metatype = 0;
              break;
            case "</valueMetadata>":
              metatype = 2;
              break;
            case "<extLst":
            case "<extLst>":
            case "</extLst>":
            case "<extLst/>":
              break;
            case "<ext":
              pass = true;
              break;
            case "</ext>":
              pass = false;
              break;
            case "<rvb":
              if (!lastmeta)
                break;
              if (!lastmeta.offsets)
                lastmeta.offsets = [];
              lastmeta.offsets.push(+y.i);
              break;
            default:
              if (!pass && opts.WTF)
                throw new Error("unrecognized " + y[0] + " in metadata");
          }
          return x;
        });
        return out;
      }
      function write_xlmeta_xml() {
        var o = [XML_HEADER];
        o.push('<metadata xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:xlrd="http://schemas.microsoft.com/office/spreadsheetml/2017/richdata" xmlns:xda="http://schemas.microsoft.com/office/spreadsheetml/2017/dynamicarray">\n  <metadataTypes count="1">\n    <metadataType name="XLDAPR" minSupportedVersion="120000" copy="1" pasteAll="1" pasteValues="1" merge="1" splitFirst="1" rowColShift="1" clearFormats="1" clearComments="1" assign="1" coerce="1" cellMeta="1"/>\n  </metadataTypes>\n  <futureMetadata name="XLDAPR" count="1">\n    <bk>\n      <extLst>\n        <ext uri="{bdbb8cdc-fa1e-496e-a857-3c3f30c029c3}">\n          <xda:dynamicArrayProperties fDynamic="1" fCollapsed="0"/>\n        </ext>\n      </extLst>\n    </bk>\n  </futureMetadata>\n  <cellMetadata count="1">\n    <bk>\n      <rc t="1" v="0"/>\n    </bk>\n  </cellMetadata>\n</metadata>');
        return o.join("");
      }
      function parse_cc_xml(data) {
        var d = [];
        if (!data) return d;
        var i = 1;
        (data.match(tagregex) || []).forEach(function(x) {
          var y = parsexmltag(x);
          switch (y[0]) {
            case "<?xml":
              break;
            case "<calcChain":
            case "<calcChain>":
            case "</calcChain>":
              break;
            case "<c":
              delete y[0];
              if (y.i) i = y.i;
              else y.i = i;
              d.push(y);
              break;
          }
        });
        return d;
      }
      function parse_BrtCalcChainItem$(data) {
        var out = {};
        out.i = data.read_shift(4);
        var cell = {};
        cell.r = data.read_shift(4);
        cell.c = data.read_shift(4);
        out.r = encode_cell(cell);
        var flags = data.read_shift(1);
        if (flags & 2) out.l = "1";
        if (flags & 8) out.a = "1";
        return out;
      }
      function parse_cc_bin(data, name, opts) {
        var out = [];
        var pass = false;
        recordhopper(data, function hopper_cc(val, R, RT) {
          switch (RT) {
            case 63:
              out.push(val);
              break;
            default:
              if (R.T) {
              } else if (!pass || opts.WTF) throw new Error("Unexpected record 0x" + RT.toString(16));
          }
        });
        return out;
      }
      function parse_xlink_xml() {
      }
      function parse_xlink_bin(data, rel, name, _opts) {
        if (!data) return data;
        var opts = _opts || {};
        var pass = false, end = false;
        recordhopper(data, function xlink_parse(val, R, RT) {
          if (end) return;
          switch (RT) {
            case 359:
            case 363:
            case 364:
            case 366:
            case 367:
            case 368:
            case 369:
            case 370:
            case 371:
            case 472:
            case 577:
            case 578:
            case 579:
            case 580:
            case 581:
            case 582:
            case 583:
            case 584:
            case 585:
            case 586:
            case 587:
              break;
            case 35:
              pass = true;
              break;
            case 36:
              pass = false;
              break;
            default:
              if (R.T) {
              } else if (!pass || opts.WTF) throw new Error("Unexpected record 0x" + RT.toString(16));
          }
        }, opts);
      }
      function parse_drawing(data, rels) {
        if (!data) return "??";
        var id = (data.match(/<c:chart [^>]*r:id="([^"]*)"/) || ["", ""])[1];
        return rels["!id"][id].Target;
      }
      var _shapeid = 1024;
      function write_comments_vml(rId, comments) {
        var csize = [21600, 21600];
        var bbox = ["m0,0l0", csize[1], csize[0], csize[1], csize[0], "0xe"].join(",");
        var o = [
          writextag("xml", null, { "xmlns:v": XLMLNS.v, "xmlns:o": XLMLNS.o, "xmlns:x": XLMLNS.x, "xmlns:mv": XLMLNS.mv }).replace(/\/>/, ">"),
          writextag("o:shapelayout", writextag("o:idmap", null, { "v:ext": "edit", "data": rId }), { "v:ext": "edit" }),
          writextag("v:shapetype", [
            writextag("v:stroke", null, { joinstyle: "miter" }),
            writextag("v:path", null, { gradientshapeok: "t", "o:connecttype": "rect" })
          ].join(""), { id: "_x0000_t202", "o:spt": 202, coordsize: csize.join(","), path: bbox })
        ];
        while (_shapeid < rId * 1e3) _shapeid += 1e3;
        comments.forEach(function(x) {
          var c = decode_cell(x[0]);
          var fillopts = { "color2": "#BEFF82", "type": "gradient" };
          if (fillopts.type == "gradient") fillopts.angle = "-180";
          var fillparm = fillopts.type == "gradient" ? writextag("o:fill", null, { type: "gradientUnscaled", "v:ext": "view" }) : null;
          var fillxml = writextag("v:fill", fillparm, fillopts);
          var shadata = { on: "t", "obscured": "t" };
          ++_shapeid;
          o = o.concat([
            "<v:shape" + wxt_helper({
              id: "_x0000_s" + _shapeid,
              type: "#_x0000_t202",
              style: "position:absolute; margin-left:80pt;margin-top:5pt;width:104pt;height:64pt;z-index:10" + (x[1].hidden ? ";visibility:hidden" : ""),
              fillcolor: "#ECFAD4",
              strokecolor: "#edeaa1"
            }) + ">",
            fillxml,
            writextag("v:shadow", null, shadata),
            writextag("v:path", null, { "o:connecttype": "none" }),
            '<v:textbox><div style="text-align:left"></div></v:textbox>',
            '<x:ClientData ObjectType="Note">',
            "<x:MoveWithCells/>",
            "<x:SizeWithCells/>",
            /* Part 4 19.4.2.3 Anchor (Anchor) */
            writetag("x:Anchor", [c.c + 1, 0, c.r + 1, 0, c.c + 3, 20, c.r + 5, 20].join(",")),
            writetag("x:AutoFill", "False"),
            writetag("x:Row", String(c.r)),
            writetag("x:Column", String(c.c)),
            x[1].hidden ? "" : "<x:Visible/>",
            "</x:ClientData>",
            "</v:shape>"
          ]);
        });
        o.push("</xml>");
        return o.join("");
      }
      function sheet_insert_comments(sheet, comments, threaded, people) {
        var dense = Array.isArray(sheet);
        var cell;
        comments.forEach(function(comment) {
          var r = decode_cell(comment.ref);
          if (dense) {
            if (!sheet[r.r]) sheet[r.r] = [];
            cell = sheet[r.r][r.c];
          } else cell = sheet[comment.ref];
          if (!cell) {
            cell = { t: "z" };
            if (dense) sheet[r.r][r.c] = cell;
            else sheet[comment.ref] = cell;
            var range = safe_decode_range(sheet["!ref"] || "BDWGO1000001:A1");
            if (range.s.r > r.r) range.s.r = r.r;
            if (range.e.r < r.r) range.e.r = r.r;
            if (range.s.c > r.c) range.s.c = r.c;
            if (range.e.c < r.c) range.e.c = r.c;
            var encoded = encode_range(range);
            if (encoded !== sheet["!ref"]) sheet["!ref"] = encoded;
          }
          if (!cell.c) cell.c = [];
          var o = { a: comment.author, t: comment.t, r: comment.r, T: threaded };
          if (comment.h) o.h = comment.h;
          for (var i = cell.c.length - 1; i >= 0; --i) {
            if (!threaded && cell.c[i].T) return;
            if (threaded && !cell.c[i].T) cell.c.splice(i, 1);
          }
          if (threaded && people) for (i = 0; i < people.length; ++i) {
            if (o.a == people[i].id) {
              o.a = people[i].name || o.a;
              break;
            }
          }
          cell.c.push(o);
        });
      }
      function parse_comments_xml(data, opts) {
        if (data.match(/<(?:\w+:)?comments *\/>/)) return [];
        var authors = [];
        var commentList = [];
        var authtag = data.match(/<(?:\w+:)?authors>([\s\S]*)<\/(?:\w+:)?authors>/);
        if (authtag && authtag[1]) authtag[1].split(/<\/\w*:?author>/).forEach(function(x) {
          if (x === "" || x.trim() === "") return;
          var a = x.match(/<(?:\w+:)?author[^>]*>(.*)/);
          if (a) authors.push(a[1]);
        });
        var cmnttag = data.match(/<(?:\w+:)?commentList>([\s\S]*)<\/(?:\w+:)?commentList>/);
        if (cmnttag && cmnttag[1]) cmnttag[1].split(/<\/\w*:?comment>/).forEach(function(x) {
          if (x === "" || x.trim() === "") return;
          var cm = x.match(/<(?:\w+:)?comment[^>]*>/);
          if (!cm) return;
          var y = parsexmltag(cm[0]);
          var comment = { author: y.authorId && authors[y.authorId] || "sheetjsghost", ref: y.ref, guid: y.guid };
          var cell = decode_cell(y.ref);
          if (opts.sheetRows && opts.sheetRows <= cell.r) return;
          var textMatch = x.match(/<(?:\w+:)?text>([\s\S]*)<\/(?:\w+:)?text>/);
          var rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || { r: "", t: "", h: "" };
          comment.r = rt.r;
          if (rt.r == "<t></t>") rt.t = rt.h = "";
          comment.t = (rt.t || "").replace(/\r\n/g, "\n").replace(/\r/g, "\n");
          if (opts.cellHTML) comment.h = rt.h;
          commentList.push(comment);
        });
        return commentList;
      }
      function write_comments_xml(data) {
        var o = [XML_HEADER, writextag("comments", null, { "xmlns": XMLNS_main[0] })];
        var iauthor = [];
        o.push("<authors>");
        data.forEach(function(x) {
          x[1].forEach(function(w) {
            var a = escapexml(w.a);
            if (iauthor.indexOf(a) == -1) {
              iauthor.push(a);
              o.push("<author>" + a + "</author>");
            }
            if (w.T && w.ID && iauthor.indexOf("tc=" + w.ID) == -1) {
              iauthor.push("tc=" + w.ID);
              o.push("<author>tc=" + w.ID + "</author>");
            }
          });
        });
        if (iauthor.length == 0) {
          iauthor.push("SheetJ5");
          o.push("<author>SheetJ5</author>");
        }
        o.push("</authors>");
        o.push("<commentList>");
        data.forEach(function(d) {
          var lastauthor = 0, ts = [];
          if (d[1][0] && d[1][0].T && d[1][0].ID) lastauthor = iauthor.indexOf("tc=" + d[1][0].ID);
          else d[1].forEach(function(c) {
            if (c.a) lastauthor = iauthor.indexOf(escapexml(c.a));
            ts.push(c.t || "");
          });
          o.push('<comment ref="' + d[0] + '" authorId="' + lastauthor + '"><text>');
          if (ts.length <= 1) o.push(writetag("t", escapexml(ts[0] || "")));
          else {
            var t = "Comment:\n    " + ts[0] + "\n";
            for (var i = 1; i < ts.length; ++i) t += "Reply:\n    " + ts[i] + "\n";
            o.push(writetag("t", escapexml(t)));
          }
          o.push("</text></comment>");
        });
        o.push("</commentList>");
        if (o.length > 2) {
          o[o.length] = "</comments>";
          o[1] = o[1].replace("/>", ">");
        }
        return o.join("");
      }
      function parse_tcmnt_xml(data, opts) {
        var out = [];
        var pass = false, comment = {}, tidx = 0;
        data.replace(tagregex, function xml_tcmnt(x, idx) {
          var y = parsexmltag(x);
          switch (strip_ns(y[0])) {
            case "<?xml":
              break;
            case "<ThreadedComments":
              break;
            case "</ThreadedComments>":
              break;
            case "<threadedComment":
              comment = { author: y.personId, guid: y.id, ref: y.ref, T: 1 };
              break;
            case "</threadedComment>":
              if (comment.t != null) out.push(comment);
              break;
            case "<text>":
            case "<text":
              tidx = idx + x.length;
              break;
            case "</text>":
              comment.t = data.slice(tidx, idx).replace(/\r\n/g, "\n").replace(/\r/g, "\n");
              break;
            case "<mentions":
            case "<mentions>":
              pass = true;
              break;
            case "</mentions>":
              pass = false;
              break;
            case "<extLst":
            case "<extLst>":
            case "</extLst>":
            case "<extLst/>":
              break;
            case "<ext":
              pass = true;
              break;
            case "</ext>":
              pass = false;
              break;
            default:
              if (!pass && opts.WTF) throw new Error("unrecognized " + y[0] + " in threaded comments");
          }
          return x;
        });
        return out;
      }
      function write_tcmnt_xml(comments, people, opts) {
        var o = [XML_HEADER, writextag("ThreadedComments", null, { "xmlns": XMLNS.TCMNT }).replace(/[\/]>/, ">")];
        comments.forEach(function(carr) {
          var rootid = "";
          (carr[1] || []).forEach(function(c, idx) {
            if (!c.T) {
              delete c.ID;
              return;
            }
            if (c.a && people.indexOf(c.a) == -1) people.push(c.a);
            var tcopts = {
              ref: carr[0],
              id: "{54EE7951-7262-4200-6969-" + ("000000000000" + opts.tcid++).slice(-12) + "}"
            };
            if (idx == 0) rootid = tcopts.id;
            else tcopts.parentId = rootid;
            c.ID = tcopts.id;
            if (c.a) tcopts.personId = "{54EE7950-7262-4200-6969-" + ("000000000000" + people.indexOf(c.a)).slice(-12) + "}";
            o.push(writextag("threadedComment", writetag("text", c.t || ""), tcopts));
          });
        });
        o.push("</ThreadedComments>");
        return o.join("");
      }
      function parse_people_xml(data, opts) {
        var out = [];
        var pass = false;
        data.replace(tagregex, function xml_tcmnt(x) {
          var y = parsexmltag(x);
          switch (strip_ns(y[0])) {
            case "<?xml":
              break;
            case "<personList":
              break;
            case "</personList>":
              break;
            case "<person":
              out.push({ name: y.displayname, id: y.id });
              break;
            case "</person>":
              break;
            case "<extLst":
            case "<extLst>":
            case "</extLst>":
            case "<extLst/>":
              break;
            case "<ext":
              pass = true;
              break;
            case "</ext>":
              pass = false;
              break;
            default:
              if (!pass && opts.WTF) throw new Error("unrecognized " + y[0] + " in threaded comments");
          }
          return x;
        });
        return out;
      }
      function write_people_xml(people) {
        var o = [XML_HEADER, writextag("personList", null, {
          "xmlns": XMLNS.TCMNT,
          "xmlns:x": XMLNS_main[0]
        }).replace(/[\/]>/, ">")];
        people.forEach(function(person, idx) {
          o.push(writextag("person", null, {
            displayName: person,
            id: "{54EE7950-7262-4200-6969-" + ("000000000000" + idx).slice(-12) + "}",
            userId: person,
            providerId: "None"
          }));
        });
        o.push("</personList>");
        return o.join("");
      }
      function parse_BrtBeginComment(data) {
        var out = {};
        out.iauthor = data.read_shift(4);
        var rfx = parse_UncheckedRfX(data, 16);
        out.rfx = rfx.s;
        out.ref = encode_cell(rfx.s);
        data.l += 16;
        return out;
      }
      function write_BrtBeginComment(data, o) {
        if (o == null) o = new_buf(36);
        o.write_shift(4, data[1].iauthor);
        write_UncheckedRfX(data[0], o);
        o.write_shift(4, 0);
        o.write_shift(4, 0);
        o.write_shift(4, 0);
        o.write_shift(4, 0);
        return o;
      }
      var parse_BrtCommentAuthor = parse_XLWideString;
      function write_BrtCommentAuthor(data) {
        return write_XLWideString(data.slice(0, 54));
      }
      function parse_comments_bin(data, opts) {
        var out = [];
        var authors = [];
        var c = {};
        var pass = false;
        recordhopper(data, function hopper_cmnt(val, R, RT) {
          switch (RT) {
            case 632:
              authors.push(val);
              break;
            case 635:
              c = val;
              break;
            case 637:
              c.t = val.t;
              c.h = val.h;
              c.r = val.r;
              break;
            case 636:
              c.author = authors[c.iauthor];
              delete c.iauthor;
              if (opts.sheetRows && c.rfx && opts.sheetRows <= c.rfx.r) break;
              if (!c.t) c.t = "";
              delete c.rfx;
              out.push(c);
              break;
            case 3072:
              break;
            case 35:
              pass = true;
              break;
            case 36:
              pass = false;
              break;
            case 37:
              break;
            case 38:
              break;
            default:
              if (R.T) {
              } else if (!pass || opts.WTF) throw new Error("Unexpected record 0x" + RT.toString(16));
          }
        });
        return out;
      }
      function write_comments_bin(data) {
        var ba = buf_array();
        var iauthor = [];
        write_record(
          ba,
          628
          /* BrtBeginComments */
        );
        write_record(
          ba,
          630
          /* BrtBeginCommentAuthors */
        );
        data.forEach(function(comment) {
          comment[1].forEach(function(c) {
            if (iauthor.indexOf(c.a) > -1) return;
            iauthor.push(c.a.slice(0, 54));
            write_record(ba, 632, write_BrtCommentAuthor(c.a));
          });
        });
        write_record(
          ba,
          631
          /* BrtEndCommentAuthors */
        );
        write_record(
          ba,
          633
          /* BrtBeginCommentList */
        );
        data.forEach(function(comment) {
          comment[1].forEach(function(c) {
            c.iauthor = iauthor.indexOf(c.a);
            var range = { s: decode_cell(comment[0]), e: decode_cell(comment[0]) };
            write_record(ba, 635, write_BrtBeginComment([range, c]));
            if (c.t && c.t.length > 0) write_record(ba, 637, write_BrtCommentText(c));
            write_record(
              ba,
              636
              /* BrtEndComment */
            );
            delete c.iauthor;
          });
        });
        write_record(
          ba,
          634
          /* BrtEndCommentList */
        );
        write_record(
          ba,
          629
          /* BrtEndComments */
        );
        return ba.end();
      }
      var CT_VBA = "application/vnd.ms-office.vbaProject";
      function make_vba_xls(cfb) {
        var newcfb = CFB.utils.cfb_new({ root: "R" });
        cfb.FullPaths.forEach(function(p, i) {
          if (p.slice(-1) === "/" || !p.match(/_VBA_PROJECT_CUR/))
            return;
          var newpath = p.replace(/^[^\/]*/, "R").replace(/\/_VBA_PROJECT_CUR\u0000*/, "");
          CFB.utils.cfb_add(newcfb, newpath, cfb.FileIndex[i].content);
        });
        return CFB.write(newcfb);
      }
      function fill_vba_xls(cfb, vba) {
        vba.FullPaths.forEach(function(p, i) {
          if (i == 0)
            return;
          var newpath = p.replace(/[^\/]*[\/]/, "/_VBA_PROJECT_CUR/");
          if (newpath.slice(-1) !== "/")
            CFB.utils.cfb_add(cfb, newpath, vba.FileIndex[i].content);
        });
      }
      var VBAFMTS = ["xlsb", "xlsm", "xlam", "biff8", "xla"];
      function parse_ds_bin() {
        return { "!type": "dialog" };
      }
      function parse_ds_xml() {
        return { "!type": "dialog" };
      }
      function parse_ms_bin() {
        return { "!type": "macro" };
      }
      function parse_ms_xml() {
        return { "!type": "macro" };
      }
      var rc_to_a1 = /* @__PURE__ */ function() {
        var rcregex = /(^|[^A-Za-z_])R(\[?-?\d+\]|[1-9]\d*|)C(\[?-?\d+\]|[1-9]\d*|)(?![A-Za-z0-9_])/g;
        var rcbase = { r: 0, c: 0 };
        function rcfunc($$, $1, $2, $3) {
          var cRel = false, rRel = false;
          if ($2.length == 0) rRel = true;
          else if ($2.charAt(0) == "[") {
            rRel = true;
            $2 = $2.slice(1, -1);
          }
          if ($3.length == 0) cRel = true;
          else if ($3.charAt(0) == "[") {
            cRel = true;
            $3 = $3.slice(1, -1);
          }
          var R = $2.length > 0 ? parseInt($2, 10) | 0 : 0, C = $3.length > 0 ? parseInt($3, 10) | 0 : 0;
          if (cRel) C += rcbase.c;
          else --C;
          if (rRel) R += rcbase.r;
          else --R;
          return $1 + (cRel ? "" : "$") + encode_col(C) + (rRel ? "" : "$") + encode_row(R);
        }
        return function rc_to_a12(fstr, base) {
          rcbase = base;
          return fstr.replace(rcregex, rcfunc);
        };
      }();
      var crefregex = /(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})(?![_.\(A-Za-z0-9])/g;
      var a1_to_rc = /* @__PURE__ */ function() {
        return function a1_to_rc2(fstr, base) {
          return fstr.replace(crefregex, function($0, $1, $2, $3, $4, $5) {
            var c = decode_col($3) - ($2 ? 0 : base.c);
            var r = decode_row($5) - ($4 ? 0 : base.r);
            var R = r == 0 ? "" : !$4 ? "[" + r + "]" : r + 1;
            var C = c == 0 ? "" : !$2 ? "[" + c + "]" : c + 1;
            return $1 + "R" + R + "C" + C;
          });
        };
      }();
      function shift_formula_str(f, delta) {
        return f.replace(crefregex, function($0, $1, $2, $3, $4, $5) {
          return $1 + ($2 == "$" ? $2 + $3 : encode_col(decode_col($3) + delta.c)) + ($4 == "$" ? $4 + $5 : encode_row(decode_row($5) + delta.r));
        });
      }
      function shift_formula_xlsx(f, range, cell) {
        var r = decode_range(range), s = r.s, c = decode_cell(cell);
        var delta = { r: c.r - s.r, c: c.c - s.c };
        return shift_formula_str(f, delta);
      }
      function fuzzyfmla(f) {
        if (f.length == 1) return false;
        return true;
      }
      function _xlfn(f) {
        return f.replace(/_xlfn\./g, "");
      }
      function parseread1(blob) {
        blob.l += 1;
        return;
      }
      function parse_ColRelU(blob, length) {
        var c = blob.read_shift(length == 1 ? 1 : 2);
        return [c & 16383, c >> 14 & 1, c >> 15 & 1];
      }
      function parse_RgceArea(blob, length, opts) {
        var w = 2;
        if (opts) {
          if (opts.biff >= 2 && opts.biff <= 5) return parse_RgceArea_BIFF2(blob, length, opts);
          else if (opts.biff == 12) w = 4;
        }
        var r = blob.read_shift(w), R = blob.read_shift(w);
        var c = parse_ColRelU(blob, 2);
        var C = parse_ColRelU(blob, 2);
        return { s: { r, c: c[0], cRel: c[1], rRel: c[2] }, e: { r: R, c: C[0], cRel: C[1], rRel: C[2] } };
      }
      function parse_RgceArea_BIFF2(blob) {
        var r = parse_ColRelU(blob, 2), R = parse_ColRelU(blob, 2);
        var c = blob.read_shift(1);
        var C = blob.read_shift(1);
        return { s: { r: r[0], c, cRel: r[1], rRel: r[2] }, e: { r: R[0], c: C, cRel: R[1], rRel: R[2] } };
      }
      function parse_RgceAreaRel(blob, length, opts) {
        if (opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);
        var r = blob.read_shift(opts.biff == 12 ? 4 : 2), R = blob.read_shift(opts.biff == 12 ? 4 : 2);
        var c = parse_ColRelU(blob, 2);
        var C = parse_ColRelU(blob, 2);
        return { s: { r, c: c[0], cRel: c[1], rRel: c[2] }, e: { r: R, c: C[0], cRel: C[1], rRel: C[2] } };
      }
      function parse_RgceLoc(blob, length, opts) {
        if (opts && opts.biff >= 2 && opts.biff <= 5) return parse_RgceLoc_BIFF2(blob, length, opts);
        var r = blob.read_shift(opts && opts.biff == 12 ? 4 : 2);
        var c = parse_ColRelU(blob, 2);
        return { r, c: c[0], cRel: c[1], rRel: c[2] };
      }
      function parse_RgceLoc_BIFF2(blob) {
        var r = parse_ColRelU(blob, 2);
        var c = blob.read_shift(1);
        return { r: r[0], c, cRel: r[1], rRel: r[2] };
      }
      function parse_RgceElfLoc(blob) {
        var r = blob.read_shift(2);
        var c = blob.read_shift(2);
        return { r, c: c & 255, fQuoted: !!(c & 16384), cRel: c >> 15, rRel: c >> 15 };
      }
      function parse_RgceLocRel(blob, length, opts) {
        var biff = opts && opts.biff ? opts.biff : 8;
        if (biff >= 2 && biff <= 5) return parse_RgceLocRel_BIFF2(blob, length, opts);
        var r = blob.read_shift(biff >= 12 ? 4 : 2);
        var cl = blob.read_shift(2);
        var cRel = (cl & 16384) >> 14, rRel = (cl & 32768) >> 15;
        cl &= 16383;
        if (rRel == 1) while (r > 524287) r -= 1048576;
        if (cRel == 1) while (cl > 8191) cl = cl - 16384;
        return { r, c: cl, cRel, rRel };
      }
      function parse_RgceLocRel_BIFF2(blob) {
        var rl = blob.read_shift(2);
        var c = blob.read_shift(1);
        var rRel = (rl & 32768) >> 15, cRel = (rl & 16384) >> 14;
        rl &= 16383;
        if (rRel == 1 && rl >= 8192) rl = rl - 16384;
        if (cRel == 1 && c >= 128) c = c - 256;
        return { r: rl, c, cRel, rRel };
      }
      function parse_PtgArea(blob, length, opts) {
        var type = (blob[blob.l++] & 96) >> 5;
        var area = parse_RgceArea(blob, opts.biff >= 2 && opts.biff <= 5 ? 6 : 8, opts);
        return [type, area];
      }
      function parse_PtgArea3d(blob, length, opts) {
        var type = (blob[blob.l++] & 96) >> 5;
        var ixti = blob.read_shift(2, "i");
        var w = 8;
        if (opts) switch (opts.biff) {
          case 5:
            blob.l += 12;
            w = 6;
            break;
          case 12:
            w = 12;
            break;
        }
        var area = parse_RgceArea(blob, w, opts);
        return [type, ixti, area];
      }
      function parse_PtgAreaErr(blob, length, opts) {
        var type = (blob[blob.l++] & 96) >> 5;
        blob.l += opts && opts.biff > 8 ? 12 : opts.biff < 8 ? 6 : 8;
        return [type];
      }
      function parse_PtgAreaErr3d(blob, length, opts) {
        var type = (blob[blob.l++] & 96) >> 5;
        var ixti = blob.read_shift(2);
        var w = 8;
        if (opts) switch (opts.biff) {
          case 5:
            blob.l += 12;
            w = 6;
            break;
          case 12:
            w = 12;
            break;
        }
        blob.l += w;
        return [type, ixti];
      }
      function parse_PtgAreaN(blob, length, opts) {
        var type = (blob[blob.l++] & 96) >> 5;
        var area = parse_RgceAreaRel(blob, length - 1, opts);
        return [type, area];
      }
      function parse_PtgArray(blob, length, opts) {
        var type = (blob[blob.l++] & 96) >> 5;
        blob.l += opts.biff == 2 ? 6 : opts.biff == 12 ? 14 : 7;
        return [type];
      }
      function parse_PtgAttrBaxcel(blob) {
        var bitSemi = blob[blob.l + 1] & 1;
        var bitBaxcel = 1;
        blob.l += 4;
        return [bitSemi, bitBaxcel];
      }
      function parse_PtgAttrChoose(blob, length, opts) {
        blob.l += 2;
        var offset = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);
        var o = [];
        for (var i = 0; i <= offset; ++i) o.push(blob.read_shift(opts && opts.biff == 2 ? 1 : 2));
        return o;
      }
      function parse_PtgAttrGoto(blob, length, opts) {
        var bitGoto = blob[blob.l + 1] & 255 ? 1 : 0;
        blob.l += 2;
        return [bitGoto, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];
      }
      function parse_PtgAttrIf(blob, length, opts) {
        var bitIf = blob[blob.l + 1] & 255 ? 1 : 0;
        blob.l += 2;
        return [bitIf, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];
      }
      function parse_PtgAttrIfError(blob) {
        var bitIf = blob[blob.l + 1] & 255 ? 1 : 0;
        blob.l += 2;
        return [bitIf, blob.read_shift(2)];
      }
      function parse_PtgAttrSemi(blob, length, opts) {
        var bitSemi = blob[blob.l + 1] & 255 ? 1 : 0;
        blob.l += opts && opts.biff == 2 ? 3 : 4;
        return [bitSemi];
      }
      function parse_PtgAttrSpaceType(blob) {
        var type = blob.read_shift(1), cch = blob.read_shift(1);
        return [type, cch];
      }
      function parse_PtgAttrSpace(blob) {
        blob.read_shift(2);
        return parse_PtgAttrSpaceType(blob, 2);
      }
      function parse_PtgAttrSpaceSemi(blob) {
        blob.read_shift(2);
        return parse_PtgAttrSpaceType(blob, 2);
      }
      function parse_PtgRef(blob, length, opts) {
        var type = (blob[blob.l] & 96) >> 5;
        blob.l += 1;
        var loc = parse_RgceLoc(blob, 0, opts);
        return [type, loc];
      }
      function parse_PtgRefN(blob, length, opts) {
        var type = (blob[blob.l] & 96) >> 5;
        blob.l += 1;
        var loc = parse_RgceLocRel(blob, 0, opts);
        return [type, loc];
      }
      function parse_PtgRef3d(blob, length, opts) {
        var type = (blob[blob.l] & 96) >> 5;
        blob.l += 1;
        var ixti = blob.read_shift(2);
        if (opts && opts.biff == 5) blob.l += 12;
        var loc = parse_RgceLoc(blob, 0, opts);
        return [type, ixti, loc];
      }
      function parse_PtgFunc(blob, length, opts) {
        var type = (blob[blob.l] & 96) >> 5;
        blob.l += 1;
        var iftab = blob.read_shift(opts && opts.biff <= 3 ? 1 : 2);
        return [FtabArgc[iftab], Ftab[iftab], type];
      }
      function parse_PtgFuncVar(blob, length, opts) {
        var type = blob[blob.l++];
        var cparams = blob.read_shift(1), tab = opts && opts.biff <= 3 ? [type == 88 ? -1 : 0, blob.read_shift(1)] : parsetab(blob);
        return [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]];
      }
      function parsetab(blob) {
        return [blob[blob.l + 1] >> 7, blob.read_shift(2) & 32767];
      }
      function parse_PtgAttrSum(blob, length, opts) {
        blob.l += opts && opts.biff == 2 ? 3 : 4;
        return;
      }
      function parse_PtgExp(blob, length, opts) {
        blob.l++;
        if (opts && opts.biff == 12) return [blob.read_shift(4, "i"), 0];
        var row = blob.read_shift(2);
        var col = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);
        return [row, col];
      }
      function parse_PtgErr(blob) {
        blob.l++;
        return BErr[blob.read_shift(1)];
      }
      function parse_PtgInt(blob) {
        blob.l++;
        return blob.read_shift(2);
      }
      function parse_PtgBool(blob) {
        blob.l++;
        return blob.read_shift(1) !== 0;
      }
      function parse_PtgNum(blob) {
        blob.l++;
        return parse_Xnum(blob, 8);
      }
      function parse_PtgStr(blob, length, opts) {
        blob.l++;
        return parse_ShortXLUnicodeString(blob, length - 1, opts);
      }
      function parse_SerAr(blob, biff) {
        var val = [blob.read_shift(1)];
        if (biff == 12) switch (val[0]) {
          case 2:
            val[0] = 4;
            break;
          case 4:
            val[0] = 16;
            break;
          case 0:
            val[0] = 1;
            break;
          case 1:
            val[0] = 2;
            break;
        }
        switch (val[0]) {
          case 4:
            val[1] = parsebool(blob, 1) ? "TRUE" : "FALSE";
            if (biff != 12) blob.l += 7;
            break;
          case 37:
          case 16:
            val[1] = BErr[blob[blob.l]];
            blob.l += biff == 12 ? 4 : 8;
            break;
          case 0:
            blob.l += 8;
            break;
          case 1:
            val[1] = parse_Xnum(blob, 8);
            break;
          case 2:
            val[1] = parse_XLUnicodeString2(blob, 0, { biff: biff > 0 && biff < 8 ? 2 : biff });
            break;
          default:
            throw new Error("Bad SerAr: " + val[0]);
        }
        return val;
      }
      function parse_PtgExtraMem(blob, cce, opts) {
        var count = blob.read_shift(opts.biff == 12 ? 4 : 2);
        var out = [];
        for (var i = 0; i != count; ++i) out.push((opts.biff == 12 ? parse_UncheckedRfX : parse_Ref8U)(blob, 8));
        return out;
      }
      function parse_PtgExtraArray(blob, length, opts) {
        var rows = 0, cols = 0;
        if (opts.biff == 12) {
          rows = blob.read_shift(4);
          cols = blob.read_shift(4);
        } else {
          cols = 1 + blob.read_shift(1);
          rows = 1 + blob.read_shift(2);
        }
        if (opts.biff >= 2 && opts.biff < 8) {
          --rows;
          if (--cols == 0) cols = 256;
        }
        for (var i = 0, o = []; i != rows && (o[i] = []); ++i)
          for (var j = 0; j != cols; ++j) o[i][j] = parse_SerAr(blob, opts.biff);
        return o;
      }
      function parse_PtgName(blob, length, opts) {
        var type = blob.read_shift(1) >>> 5 & 3;
        var w = !opts || opts.biff >= 8 ? 4 : 2;
        var nameindex = blob.read_shift(w);
        switch (opts.biff) {
          case 2:
            blob.l += 5;
            break;
          case 3:
          case 4:
            blob.l += 8;
            break;
          case 5:
            blob.l += 12;
            break;
        }
        return [type, 0, nameindex];
      }
      function parse_PtgNameX(blob, length, opts) {
        if (opts.biff == 5) return parse_PtgNameX_BIFF5(blob, length, opts);
        var type = blob.read_shift(1) >>> 5 & 3;
        var ixti = blob.read_shift(2);
        var nameindex = blob.read_shift(4);
        return [type, ixti, nameindex];
      }
      function parse_PtgNameX_BIFF5(blob) {
        var type = blob.read_shift(1) >>> 5 & 3;
        var ixti = blob.read_shift(2, "i");
        blob.l += 8;
        var nameindex = blob.read_shift(2);
        blob.l += 12;
        return [type, ixti, nameindex];
      }
      function parse_PtgMemArea(blob, length, opts) {
        var type = blob.read_shift(1) >>> 5 & 3;
        blob.l += opts && opts.biff == 2 ? 3 : 4;
        var cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);
        return [type, cce];
      }
      function parse_PtgMemFunc(blob, length, opts) {
        var type = blob.read_shift(1) >>> 5 & 3;
        var cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);
        return [type, cce];
      }
      function parse_PtgRefErr(blob, length, opts) {
        var type = blob.read_shift(1) >>> 5 & 3;
        blob.l += 4;
        if (opts.biff < 8) blob.l--;
        if (opts.biff == 12) blob.l += 2;
        return [type];
      }
      function parse_PtgRefErr3d(blob, length, opts) {
        var type = (blob[blob.l++] & 96) >> 5;
        var ixti = blob.read_shift(2);
        var w = 4;
        if (opts) switch (opts.biff) {
          case 5:
            w = 15;
            break;
          case 12:
            w = 6;
            break;
        }
        blob.l += w;
        return [type, ixti];
      }
      var parse_PtgMemErr = parsenoop;
      var parse_PtgMemNoMem = parsenoop;
      var parse_PtgTbl = parsenoop;
      function parse_PtgElfLoc(blob, length, opts) {
        blob.l += 2;
        return [parse_RgceElfLoc(blob, 4, opts)];
      }
      function parse_PtgElfNoop(blob) {
        blob.l += 6;
        return [];
      }
      var parse_PtgElfCol = parse_PtgElfLoc;
      var parse_PtgElfColS = parse_PtgElfNoop;
      var parse_PtgElfColSV = parse_PtgElfNoop;
      var parse_PtgElfColV = parse_PtgElfLoc;
      function parse_PtgElfLel(blob) {
        blob.l += 2;
        return [parseuint16(blob), blob.read_shift(2) & 1];
      }
      var parse_PtgElfRadical = parse_PtgElfLoc;
      var parse_PtgElfRadicalLel = parse_PtgElfLel;
      var parse_PtgElfRadicalS = parse_PtgElfNoop;
      var parse_PtgElfRw = parse_PtgElfLoc;
      var parse_PtgElfRwV = parse_PtgElfLoc;
      var PtgListRT = [
        "Data",
        "All",
        "Headers",
        "??",
        "?Data2",
        "??",
        "?DataHeaders",
        "??",
        "Totals",
        "??",
        "??",
        "??",
        "?DataTotals",
        "??",
        "??",
        "??",
        "?Current"
      ];
      function parse_PtgList(blob) {
        blob.l += 2;
        var ixti = blob.read_shift(2);
        var flags = blob.read_shift(2);
        var idx = blob.read_shift(4);
        var c = blob.read_shift(2);
        var C = blob.read_shift(2);
        var rt = PtgListRT[flags >> 2 & 31];
        return { ixti, coltype: flags & 3, rt, idx, c, C };
      }
      function parse_PtgSxName(blob) {
        blob.l += 2;
        return [blob.read_shift(4)];
      }
      function parse_PtgSheet(blob, length, opts) {
        blob.l += 5;
        blob.l += 2;
        blob.l += opts.biff == 2 ? 1 : 4;
        return ["PTGSHEET"];
      }
      function parse_PtgEndSheet(blob, length, opts) {
        blob.l += opts.biff == 2 ? 4 : 5;
        return ["PTGENDSHEET"];
      }
      function parse_PtgMemAreaN(blob) {
        var type = blob.read_shift(1) >>> 5 & 3;
        var cce = blob.read_shift(2);
        return [type, cce];
      }
      function parse_PtgMemNoMemN(blob) {
        var type = blob.read_shift(1) >>> 5 & 3;
        var cce = blob.read_shift(2);
        return [type, cce];
      }
      function parse_PtgAttrNoop(blob) {
        blob.l += 4;
        return [0, 0];
      }
      var PtgTypes = {
        1: { n: "PtgExp", f: parse_PtgExp },
        2: { n: "PtgTbl", f: parse_PtgTbl },
        3: { n: "PtgAdd", f: parseread1 },
        4: { n: "PtgSub", f: parseread1 },
        5: { n: "PtgMul", f: parseread1 },
        6: { n: "PtgDiv", f: parseread1 },
        7: { n: "PtgPower", f: parseread1 },
        8: { n: "PtgConcat", f: parseread1 },
        9: { n: "PtgLt", f: parseread1 },
        10: { n: "PtgLe", f: parseread1 },
        11: { n: "PtgEq", f: parseread1 },
        12: { n: "PtgGe", f: parseread1 },
        13: { n: "PtgGt", f: parseread1 },
        14: { n: "PtgNe", f: parseread1 },
        15: { n: "PtgIsect", f: parseread1 },
        16: { n: "PtgUnion", f: parseread1 },
        17: { n: "PtgRange", f: parseread1 },
        18: { n: "PtgUplus", f: parseread1 },
        19: { n: "PtgUminus", f: parseread1 },
        20: { n: "PtgPercent", f: parseread1 },
        21: { n: "PtgParen", f: parseread1 },
        22: { n: "PtgMissArg", f: parseread1 },
        23: { n: "PtgStr", f: parse_PtgStr },
        26: { n: "PtgSheet", f: parse_PtgSheet },
        27: { n: "PtgEndSheet", f: parse_PtgEndSheet },
        28: { n: "PtgErr", f: parse_PtgErr },
        29: { n: "PtgBool", f: parse_PtgBool },
        30: { n: "PtgInt", f: parse_PtgInt },
        31: { n: "PtgNum", f: parse_PtgNum },
        32: { n: "PtgArray", f: parse_PtgArray },
        33: { n: "PtgFunc", f: parse_PtgFunc },
        34: { n: "PtgFuncVar", f: parse_PtgFuncVar },
        35: { n: "PtgName", f: parse_PtgName },
        36: { n: "PtgRef", f: parse_PtgRef },
        37: { n: "PtgArea", f: parse_PtgArea },
        38: { n: "PtgMemArea", f: parse_PtgMemArea },
        39: { n: "PtgMemErr", f: parse_PtgMemErr },
        40: { n: "PtgMemNoMem", f: parse_PtgMemNoMem },
        41: { n: "PtgMemFunc", f: parse_PtgMemFunc },
        42: { n: "PtgRefErr", f: parse_PtgRefErr },
        43: { n: "PtgAreaErr", f: parse_PtgAreaErr },
        44: { n: "PtgRefN", f: parse_PtgRefN },
        45: { n: "PtgAreaN", f: parse_PtgAreaN },
        46: { n: "PtgMemAreaN", f: parse_PtgMemAreaN },
        47: { n: "PtgMemNoMemN", f: parse_PtgMemNoMemN },
        57: { n: "PtgNameX", f: parse_PtgNameX },
        58: { n: "PtgRef3d", f: parse_PtgRef3d },
        59: { n: "PtgArea3d", f: parse_PtgArea3d },
        60: { n: "PtgRefErr3d", f: parse_PtgRefErr3d },
        61: { n: "PtgAreaErr3d", f: parse_PtgAreaErr3d },
        255: {}
      };
      var PtgDupes = {
        64: 32,
        96: 32,
        65: 33,
        97: 33,
        66: 34,
        98: 34,
        67: 35,
        99: 35,
        68: 36,
        100: 36,
        69: 37,
        101: 37,
        70: 38,
        102: 38,
        71: 39,
        103: 39,
        72: 40,
        104: 40,
        73: 41,
        105: 41,
        74: 42,
        106: 42,
        75: 43,
        107: 43,
        76: 44,
        108: 44,
        77: 45,
        109: 45,
        78: 46,
        110: 46,
        79: 47,
        111: 47,
        88: 34,
        120: 34,
        89: 57,
        121: 57,
        90: 58,
        122: 58,
        91: 59,
        123: 59,
        92: 60,
        124: 60,
        93: 61,
        125: 61
      };
      var Ptg18 = {
        1: { n: "PtgElfLel", f: parse_PtgElfLel },
        2: { n: "PtgElfRw", f: parse_PtgElfRw },
        3: { n: "PtgElfCol", f: parse_PtgElfCol },
        6: { n: "PtgElfRwV", f: parse_PtgElfRwV },
        7: { n: "PtgElfColV", f: parse_PtgElfColV },
        10: { n: "PtgElfRadical", f: parse_PtgElfRadical },
        11: { n: "PtgElfRadicalS", f: parse_PtgElfRadicalS },
        13: { n: "PtgElfColS", f: parse_PtgElfColS },
        15: { n: "PtgElfColSV", f: parse_PtgElfColSV },
        16: { n: "PtgElfRadicalLel", f: parse_PtgElfRadicalLel },
        25: { n: "PtgList", f: parse_PtgList },
        29: { n: "PtgSxName", f: parse_PtgSxName },
        255: {}
      };
      var Ptg19 = {
        0: { n: "PtgAttrNoop", f: parse_PtgAttrNoop },
        1: { n: "PtgAttrSemi", f: parse_PtgAttrSemi },
        2: { n: "PtgAttrIf", f: parse_PtgAttrIf },
        4: { n: "PtgAttrChoose", f: parse_PtgAttrChoose },
        8: { n: "PtgAttrGoto", f: parse_PtgAttrGoto },
        16: { n: "PtgAttrSum", f: parse_PtgAttrSum },
        32: { n: "PtgAttrBaxcel", f: parse_PtgAttrBaxcel },
        33: { n: "PtgAttrBaxcel", f: parse_PtgAttrBaxcel },
        64: { n: "PtgAttrSpace", f: parse_PtgAttrSpace },
        65: { n: "PtgAttrSpaceSemi", f: parse_PtgAttrSpaceSemi },
        128: { n: "PtgAttrIfError", f: parse_PtgAttrIfError },
        255: {}
      };
      function parse_RgbExtra(blob, length, rgce, opts) {
        if (opts.biff < 8) return parsenoop(blob, length);
        var target = blob.l + length;
        var o = [];
        for (var i = 0; i !== rgce.length; ++i) {
          switch (rgce[i][0]) {
            case "PtgArray":
              rgce[i][1] = parse_PtgExtraArray(blob, 0, opts);
              o.push(rgce[i][1]);
              break;
            case "PtgMemArea":
              rgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1], opts);
              o.push(rgce[i][2]);
              break;
            case "PtgExp":
              if (opts && opts.biff == 12) {
                rgce[i][1][1] = blob.read_shift(4);
                o.push(rgce[i][1]);
              }
              break;
            case "PtgList":
            case "PtgElfRadicalS":
            case "PtgElfColS":
            case "PtgElfColSV":
              throw "Unsupported " + rgce[i][0];
            default:
              break;
          }
        }
        length = target - blob.l;
        if (length !== 0) o.push(parsenoop(blob, length));
        return o;
      }
      function parse_Rgce(blob, length, opts) {
        var target = blob.l + length;
        var R, id, ptgs = [];
        while (target != blob.l) {
          length = target - blob.l;
          id = blob[blob.l];
          R = PtgTypes[id] || PtgTypes[PtgDupes[id]];
          if (id === 24 || id === 25) R = (id === 24 ? Ptg18 : Ptg19)[blob[blob.l + 1]];
          if (!R || !R.f) {
            parsenoop(blob, length);
          } else {
            ptgs.push([R.n, R.f(blob, length, opts)]);
          }
        }
        return ptgs;
      }
      function stringify_array(f) {
        var o = [];
        for (var i = 0; i < f.length; ++i) {
          var x = f[i], r = [];
          for (var j = 0; j < x.length; ++j) {
            var y = x[j];
            if (y) switch (y[0]) {
              case 2:
                r.push('"' + y[1].replace(/"/g, '""') + '"');
                break;
              default:
                r.push(y[1]);
            }
            else r.push("");
          }
          o.push(r.join(","));
        }
        return o.join(";");
      }
      var PtgBinOp = {
        PtgAdd: "+",
        PtgConcat: "&",
        PtgDiv: "/",
        PtgEq: "=",
        PtgGe: ">=",
        PtgGt: ">",
        PtgLe: "<=",
        PtgLt: "<",
        PtgMul: "*",
        PtgNe: "<>",
        PtgPower: "^",
        PtgSub: "-"
      };
      function formula_quote_sheet_name(sname, opts) {
        if (!sname && !(opts && opts.biff <= 5 && opts.biff >= 2)) throw new Error("empty sheet name");
        if (/[^\w\u4E00-\u9FFF\u3040-\u30FF]/.test(sname)) return "'" + sname + "'";
        return sname;
      }
      function get_ixti_raw(supbooks, ixti, opts) {
        if (!supbooks) return "SH33TJSERR0";
        if (opts.biff > 8 && (!supbooks.XTI || !supbooks.XTI[ixti])) return supbooks.SheetNames[ixti];
        if (!supbooks.XTI) return "SH33TJSERR6";
        var XTI = supbooks.XTI[ixti];
        if (opts.biff < 8) {
          if (ixti > 1e4) ixti -= 65536;
          if (ixti < 0) ixti = -ixti;
          return ixti == 0 ? "" : supbooks.XTI[ixti - 1];
        }
        if (!XTI) return "SH33TJSERR1";
        var o = "";
        if (opts.biff > 8) switch (supbooks[XTI[0]][0]) {
          case 357:
            o = XTI[1] == -1 ? "#REF" : supbooks.SheetNames[XTI[1]];
            return XTI[1] == XTI[2] ? o : o + ":" + supbooks.SheetNames[XTI[2]];
          case 358:
            if (opts.SID != null) return supbooks.SheetNames[opts.SID];
            return "SH33TJSSAME" + supbooks[XTI[0]][0];
          case 355:
          default:
            return "SH33TJSSRC" + supbooks[XTI[0]][0];
        }
        switch (supbooks[XTI[0]][0][0]) {
          case 1025:
            o = XTI[1] == -1 ? "#REF" : supbooks.SheetNames[XTI[1]] || "SH33TJSERR3";
            return XTI[1] == XTI[2] ? o : o + ":" + supbooks.SheetNames[XTI[2]];
          case 14849:
            return supbooks[XTI[0]].slice(1).map(function(name) {
              return name.Name;
            }).join(";;");
          default:
            if (!supbooks[XTI[0]][0][3]) return "SH33TJSERR2";
            o = XTI[1] == -1 ? "#REF" : supbooks[XTI[0]][0][3][XTI[1]] || "SH33TJSERR4";
            return XTI[1] == XTI[2] ? o : o + ":" + supbooks[XTI[0]][0][3][XTI[2]];
        }
      }
      function get_ixti(supbooks, ixti, opts) {
        var ixtiraw = get_ixti_raw(supbooks, ixti, opts);
        return ixtiraw == "#REF" ? ixtiraw : formula_quote_sheet_name(ixtiraw, opts);
      }
      function stringify_formula(formula, range, cell, supbooks, opts) {
        var biff = opts && opts.biff || 8;
        var _range = (
          /*range != null ? range :*/
          { s: { c: 0, r: 0 }, e: { c: 0, r: 0 } }
        );
        var stack = [], e1, e2, c, ixti = 0, nameidx = 0, r, sname = "";
        if (!formula[0] || !formula[0][0]) return "";
        var last_sp = -1, sp = "";
        for (var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) {
          var f = formula[0][ff];
          switch (f[0]) {
            case "PtgUminus":
              stack.push("-" + stack.pop());
              break;
            case "PtgUplus":
              stack.push("+" + stack.pop());
              break;
            case "PtgPercent":
              stack.push(stack.pop() + "%");
              break;
            case "PtgAdd":
            case "PtgConcat":
            case "PtgDiv":
            case "PtgEq":
            case "PtgGe":
            case "PtgGt":
            case "PtgLe":
            case "PtgLt":
            case "PtgMul":
            case "PtgNe":
            case "PtgPower":
            case "PtgSub":
              e1 = stack.pop();
              e2 = stack.pop();
              if (last_sp >= 0) {
                switch (formula[0][last_sp][1][0]) {
                  case 0:
                    sp = fill(" ", formula[0][last_sp][1][1]);
                    break;
                  case 1:
                    sp = fill("\r", formula[0][last_sp][1][1]);
                    break;
                  default:
                    sp = "";
                    if (opts.WTF) throw new Error("Unexpected PtgAttrSpaceType " + formula[0][last_sp][1][0]);
                }
                e2 = e2 + sp;
                last_sp = -1;
              }
              stack.push(e2 + PtgBinOp[f[0]] + e1);
              break;
            case "PtgIsect":
              e1 = stack.pop();
              e2 = stack.pop();
              stack.push(e2 + " " + e1);
              break;
            case "PtgUnion":
              e1 = stack.pop();
              e2 = stack.pop();
              stack.push(e2 + "," + e1);
              break;
            case "PtgRange":
              e1 = stack.pop();
              e2 = stack.pop();
              stack.push(e2 + ":" + e1);
              break;
            case "PtgAttrChoose":
              break;
            case "PtgAttrGoto":
              break;
            case "PtgAttrIf":
              break;
            case "PtgAttrIfError":
              break;
            case "PtgRef":
              c = shift_cell_xls(f[1][1], _range, opts);
              stack.push(encode_cell_xls(c, biff));
              break;
            case "PtgRefN":
              c = cell ? shift_cell_xls(f[1][1], cell, opts) : f[1][1];
              stack.push(encode_cell_xls(c, biff));
              break;
            case "PtgRef3d":
              ixti = f[1][1];
              c = shift_cell_xls(f[1][2], _range, opts);
              sname = get_ixti(supbooks, ixti, opts);
              var w = sname;
              stack.push(sname + "!" + encode_cell_xls(c, biff));
              break;
            case "PtgFunc":
            case "PtgFuncVar":
              var argc = f[1][0], func = f[1][1];
              if (!argc) argc = 0;
              argc &= 127;
              var args = argc == 0 ? [] : stack.slice(-argc);
              stack.length -= argc;
              if (func === "User") func = args.shift();
              stack.push(func + "(" + args.join(",") + ")");
              break;
            case "PtgBool":
              stack.push(f[1] ? "TRUE" : "FALSE");
              break;
            case "PtgInt":
              stack.push(f[1]);
              break;
            case "PtgNum":
              stack.push(String(f[1]));
              break;
            case "PtgStr":
              stack.push('"' + f[1].replace(/"/g, '""') + '"');
              break;
            case "PtgErr":
              stack.push(f[1]);
              break;
            case "PtgAreaN":
              r = shift_range_xls(f[1][1], cell ? { s: cell } : _range, opts);
              stack.push(encode_range_xls(r, opts));
              break;
            case "PtgArea":
              r = shift_range_xls(f[1][1], _range, opts);
              stack.push(encode_range_xls(r, opts));
              break;
            case "PtgArea3d":
              ixti = f[1][1];
              r = f[1][2];
              sname = get_ixti(supbooks, ixti, opts);
              stack.push(sname + "!" + encode_range_xls(r, opts));
              break;
            case "PtgAttrSum":
              stack.push("SUM(" + stack.pop() + ")");
              break;
            case "PtgAttrBaxcel":
            case "PtgAttrSemi":
              break;
            case "PtgName":
              nameidx = f[1][2];
              var lbl = (supbooks.names || [])[nameidx - 1] || (supbooks[0] || [])[nameidx];
              var name = lbl ? lbl.Name : "SH33TJSNAME" + String(nameidx);
              if (name && name.slice(0, 6) == "_xlfn." && !opts.xlfn) name = name.slice(6);
              stack.push(name);
              break;
            case "PtgNameX":
              var bookidx = f[1][1];
              nameidx = f[1][2];
              var externbook;
              if (opts.biff <= 5) {
                if (bookidx < 0) bookidx = -bookidx;
                if (supbooks[bookidx]) externbook = supbooks[bookidx][nameidx];
              } else {
                var o = "";
                if (((supbooks[bookidx] || [])[0] || [])[0] == 14849) {
                } else if (((supbooks[bookidx] || [])[0] || [])[0] == 1025) {
                  if (supbooks[bookidx][nameidx] && supbooks[bookidx][nameidx].itab > 0) {
                    o = supbooks.SheetNames[supbooks[bookidx][nameidx].itab - 1] + "!";
                  }
                } else o = supbooks.SheetNames[nameidx - 1] + "!";
                if (supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;
                else if (supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;
                else {
                  var ixtidata = (get_ixti_raw(supbooks, bookidx, opts) || "").split(";;");
                  if (ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1];
                  else o += "SH33TJSERRX";
                }
                stack.push(o);
                break;
              }
              if (!externbook) externbook = { Name: "SH33TJSERRY" };
              stack.push(externbook.Name);
              break;
            case "PtgParen":
              var lp = "(", rp = ")";
              if (last_sp >= 0) {
                sp = "";
                switch (formula[0][last_sp][1][0]) {
                  case 2:
                    lp = fill(" ", formula[0][last_sp][1][1]) + lp;
                    break;
                  case 3:
                    lp = fill("\r", formula[0][last_sp][1][1]) + lp;
                    break;
                  case 4:
                    rp = fill(" ", formula[0][last_sp][1][1]) + rp;
                    break;
                  case 5:
                    rp = fill("\r", formula[0][last_sp][1][1]) + rp;
                    break;
                  default:
                    if (opts.WTF) throw new Error("Unexpected PtgAttrSpaceType " + formula[0][last_sp][1][0]);
                }
                last_sp = -1;
              }
              stack.push(lp + stack.pop() + rp);
              break;
            case "PtgRefErr":
              stack.push("#REF!");
              break;
            case "PtgRefErr3d":
              stack.push("#REF!");
              break;
            case "PtgExp":
              c = { c: f[1][1], r: f[1][0] };
              var q = { c: cell.c, r: cell.r };
              if (supbooks.sharedf[encode_cell(c)]) {
                var parsedf = supbooks.sharedf[encode_cell(c)];
                stack.push(stringify_formula(parsedf, _range, q, supbooks, opts));
              } else {
                var fnd = false;
                for (e1 = 0; e1 != supbooks.arrayf.length; ++e1) {
                  e2 = supbooks.arrayf[e1];
                  if (c.c < e2[0].s.c || c.c > e2[0].e.c) continue;
                  if (c.r < e2[0].s.r || c.r > e2[0].e.r) continue;
                  stack.push(stringify_formula(e2[1], _range, q, supbooks, opts));
                  fnd = true;
                  break;
                }
                if (!fnd) stack.push(f[1]);
              }
              break;
            case "PtgArray":
              stack.push("{" + stringify_array(f[1]) + "}");
              break;
            case "PtgMemArea":
              break;
            case "PtgAttrSpace":
            case "PtgAttrSpaceSemi":
              last_sp = ff;
              break;
            case "PtgTbl":
              break;
            case "PtgMemErr":
              break;
            case "PtgMissArg":
              stack.push("");
              break;
            case "PtgAreaErr":
              stack.push("#REF!");
              break;
            case "PtgAreaErr3d":
              stack.push("#REF!");
              break;
            case "PtgList":
              stack.push("Table" + f[1].idx + "[#" + f[1].rt + "]");
              break;
            case "PtgMemAreaN":
            case "PtgMemNoMemN":
            case "PtgAttrNoop":
            case "PtgSheet":
            case "PtgEndSheet":
              break;
            case "PtgMemFunc":
              break;
            case "PtgMemNoMem":
              break;
            case "PtgElfCol":
            case "PtgElfColS":
            case "PtgElfColSV":
            case "PtgElfColV":
            case "PtgElfLel":
            case "PtgElfRadical":
            case "PtgElfRadicalLel":
            case "PtgElfRadicalS":
            case "PtgElfRw":
            case "PtgElfRwV":
              throw new Error("Unsupported ELFs");
            case "PtgSxName":
              throw new Error("Unrecognized Formula Token: " + String(f));
            default:
              throw new Error("Unrecognized Formula Token: " + String(f));
          }
          var PtgNonDisp = ["PtgAttrSpace", "PtgAttrSpaceSemi", "PtgAttrGoto"];
          if (opts.biff != 3) {
            if (last_sp >= 0 && PtgNonDisp.indexOf(formula[0][ff][0]) == -1) {
              f = formula[0][last_sp];
              var _left = true;
              switch (f[1][0]) {
                case 4:
                  _left = false;
                case 0:
                  sp = fill(" ", f[1][1]);
                  break;
                case 5:
                  _left = false;
                case 1:
                  sp = fill("\r", f[1][1]);
                  break;
                default:
                  sp = "";
                  if (opts.WTF) throw new Error("Unexpected PtgAttrSpaceType " + f[1][0]);
              }
              stack.push((_left ? sp : "") + stack.pop() + (_left ? "" : sp));
              last_sp = -1;
            }
          }
        }
        if (stack.length > 1 && opts.WTF) throw new Error("bad formula stack");
        return stack[0];
      }
      function parse_ArrayParsedFormula(blob, length, opts) {
        var target = blob.l + length, len = opts.biff == 2 ? 1 : 2;
        var rgcb, cce = blob.read_shift(len);
        if (cce == 65535) return [[], parsenoop(blob, length - 2)];
        var rgce = parse_Rgce(blob, cce, opts);
        if (length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);
        blob.l = target;
        return [rgce, rgcb];
      }
      function parse_XLSCellParsedFormula(blob, length, opts) {
        var target = blob.l + length, len = opts.biff == 2 ? 1 : 2;
        var rgcb, cce = blob.read_shift(len);
        if (cce == 65535) return [[], parsenoop(blob, length - 2)];
        var rgce = parse_Rgce(blob, cce, opts);
        if (length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);
        blob.l = target;
        return [rgce, rgcb];
      }
      function parse_NameParsedFormula(blob, length, opts, cce) {
        var target = blob.l + length;
        var rgce = parse_Rgce(blob, cce, opts);
        var rgcb;
        if (target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts);
        return [rgce, rgcb];
      }
      function parse_SharedParsedFormula(blob, length, opts) {
        var target = blob.l + length;
        var rgcb, cce = blob.read_shift(2);
        var rgce = parse_Rgce(blob, cce, opts);
        if (cce == 65535) return [[], parsenoop(blob, length - 2)];
        if (length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);
        return [rgce, rgcb];
      }
      function parse_FormulaValue(blob) {
        var b;
        if (__readUInt16LE(blob, blob.l + 6) !== 65535) return [parse_Xnum(blob), "n"];
        switch (blob[blob.l]) {
          case 0:
            blob.l += 8;
            return ["String", "s"];
          case 1:
            b = blob[blob.l + 2] === 1;
            blob.l += 8;
            return [b, "b"];
          case 2:
            b = blob[blob.l + 2];
            blob.l += 8;
            return [b, "e"];
          case 3:
            blob.l += 8;
            return ["", "s"];
        }
        return [];
      }
      function write_FormulaValue(value) {
        if (value == null) {
          var o = new_buf(8);
          o.write_shift(1, 3);
          o.write_shift(1, 0);
          o.write_shift(2, 0);
          o.write_shift(2, 0);
          o.write_shift(2, 65535);
          return o;
        } else if (typeof value == "number") return write_Xnum(value);
        return write_Xnum(0);
      }
      function parse_Formula(blob, length, opts) {
        var end = blob.l + length;
        var cell = parse_XLSCell(blob, 6);
        if (opts.biff == 2) ++blob.l;
        var val = parse_FormulaValue(blob, 8);
        var flags = blob.read_shift(1);
        if (opts.biff != 2) {
          blob.read_shift(1);
          if (opts.biff >= 5) {
            blob.read_shift(4);
          }
        }
        var cbf = parse_XLSCellParsedFormula(blob, end - blob.l, opts);
        return { cell, val: val[0], formula: cbf, shared: flags >> 3 & 1, tt: val[1] };
      }
      function write_Formula(cell, R, C, opts, os) {
        var o1 = write_XLSCell(R, C, os);
        var o2 = write_FormulaValue(cell.v);
        var o3 = new_buf(6);
        var flags = 1 | 32;
        o3.write_shift(2, flags);
        o3.write_shift(4, 0);
        var bf = new_buf(cell.bf.length);
        for (var i = 0; i < cell.bf.length; ++i) bf[i] = cell.bf[i];
        var out = bconcat([o1, o2, o3, bf]);
        return out;
      }
      function parse_XLSBParsedFormula(data, length, opts) {
        var cce = data.read_shift(4);
        var rgce = parse_Rgce(data, cce, opts);
        var cb = data.read_shift(4);
        var rgcb = cb > 0 ? parse_RgbExtra(data, cb, rgce, opts) : null;
        return [rgce, rgcb];
      }
      var parse_XLSBArrayParsedFormula = parse_XLSBParsedFormula;
      var parse_XLSBCellParsedFormula = parse_XLSBParsedFormula;
      var parse_XLSBNameParsedFormula = parse_XLSBParsedFormula;
      var parse_XLSBSharedParsedFormula = parse_XLSBParsedFormula;
      var Cetab = {
        0: "BEEP",
        1: "OPEN",
        2: "OPEN.LINKS",
        3: "CLOSE.ALL",
        4: "SAVE",
        5: "SAVE.AS",
        6: "FILE.DELETE",
        7: "PAGE.SETUP",
        8: "PRINT",
        9: "PRINTER.SETUP",
        10: "QUIT",
        11: "NEW.WINDOW",
        12: "ARRANGE.ALL",
        13: "WINDOW.SIZE",
        14: "WINDOW.MOVE",
        15: "FULL",
        16: "CLOSE",
        17: "RUN",
        22: "SET.PRINT.AREA",
        23: "SET.PRINT.TITLES",
        24: "SET.PAGE.BREAK",
        25: "REMOVE.PAGE.BREAK",
        26: "FONT",
        27: "DISPLAY",
        28: "PROTECT.DOCUMENT",
        29: "PRECISION",
        30: "A1.R1C1",
        31: "CALCULATE.NOW",
        32: "CALCULATION",
        34: "DATA.FIND",
        35: "EXTRACT",
        36: "DATA.DELETE",
        37: "SET.DATABASE",
        38: "SET.CRITERIA",
        39: "SORT",
        40: "DATA.SERIES",
        41: "TABLE",
        42: "FORMAT.NUMBER",
        43: "ALIGNMENT",
        44: "STYLE",
        45: "BORDER",
        46: "CELL.PROTECTION",
        47: "COLUMN.WIDTH",
        48: "UNDO",
        49: "CUT",
        50: "COPY",
        51: "PASTE",
        52: "CLEAR",
        53: "PASTE.SPECIAL",
        54: "EDIT.DELETE",
        55: "INSERT",
        56: "FILL.RIGHT",
        57: "FILL.DOWN",
        61: "DEFINE.NAME",
        62: "CREATE.NAMES",
        63: "FORMULA.GOTO",
        64: "FORMULA.FIND",
        65: "SELECT.LAST.CELL",
        66: "SHOW.ACTIVE.CELL",
        67: "GALLERY.AREA",
        68: "GALLERY.BAR",
        69: "GALLERY.COLUMN",
        70: "GALLERY.LINE",
        71: "GALLERY.PIE",
        72: "GALLERY.SCATTER",
        73: "COMBINATION",
        74: "PREFERRED",
        75: "ADD.OVERLAY",
        76: "GRIDLINES",
        77: "SET.PREFERRED",
        78: "AXES",
        79: "LEGEND",
        80: "ATTACH.TEXT",
        81: "ADD.ARROW",
        82: "SELECT.CHART",
        83: "SELECT.PLOT.AREA",
        84: "PATTERNS",
        85: "MAIN.CHART",
        86: "OVERLAY",
        87: "SCALE",
        88: "FORMAT.LEGEND",
        89: "FORMAT.TEXT",
        90: "EDIT.REPEAT",
        91: "PARSE",
        92: "JUSTIFY",
        93: "HIDE",
        94: "UNHIDE",
        95: "WORKSPACE",
        96: "FORMULA",
        97: "FORMULA.FILL",
        98: "FORMULA.ARRAY",
        99: "DATA.FIND.NEXT",
        100: "DATA.FIND.PREV",
        101: "FORMULA.FIND.NEXT",
        102: "FORMULA.FIND.PREV",
        103: "ACTIVATE",
        104: "ACTIVATE.NEXT",
        105: "ACTIVATE.PREV",
        106: "UNLOCKED.NEXT",
        107: "UNLOCKED.PREV",
        108: "COPY.PICTURE",
        109: "SELECT",
        110: "DELETE.NAME",
        111: "DELETE.FORMAT",
        112: "VLINE",
        113: "HLINE",
        114: "VPAGE",
        115: "HPAGE",
        116: "VSCROLL",
        117: "HSCROLL",
        118: "ALERT",
        119: "NEW",
        120: "CANCEL.COPY",
        121: "SHOW.CLIPBOARD",
        122: "MESSAGE",
        124: "PASTE.LINK",
        125: "APP.ACTIVATE",
        126: "DELETE.ARROW",
        127: "ROW.HEIGHT",
        128: "FORMAT.MOVE",
        129: "FORMAT.SIZE",
        130: "FORMULA.REPLACE",
        131: "SEND.KEYS",
        132: "SELECT.SPECIAL",
        133: "APPLY.NAMES",
        134: "REPLACE.FONT",
        135: "FREEZE.PANES",
        136: "SHOW.INFO",
        137: "SPLIT",
        138: "ON.WINDOW",
        139: "ON.DATA",
        140: "DISABLE.INPUT",
        142: "OUTLINE",
        143: "LIST.NAMES",
        144: "FILE.CLOSE",
        145: "SAVE.WORKBOOK",
        146: "DATA.FORM",
        147: "COPY.CHART",
        148: "ON.TIME",
        149: "WAIT",
        150: "FORMAT.FONT",
        151: "FILL.UP",
        152: "FILL.LEFT",
        153: "DELETE.OVERLAY",
        155: "SHORT.MENUS",
        159: "SET.UPDATE.STATUS",
        161: "COLOR.PALETTE",
        162: "DELETE.STYLE",
        163: "WINDOW.RESTORE",
        164: "WINDOW.MAXIMIZE",
        166: "CHANGE.LINK",
        167: "CALCULATE.DOCUMENT",
        168: "ON.KEY",
        169: "APP.RESTORE",
        170: "APP.MOVE",
        171: "APP.SIZE",
        172: "APP.MINIMIZE",
        173: "APP.MAXIMIZE",
        174: "BRING.TO.FRONT",
        175: "SEND.TO.BACK",
        185: "MAIN.CHART.TYPE",
        186: "OVERLAY.CHART.TYPE",
        187: "SELECT.END",
        188: "OPEN.MAIL",
        189: "SEND.MAIL",
        190: "STANDARD.FONT",
        191: "CONSOLIDATE",
        192: "SORT.SPECIAL",
        193: "GALLERY.3D.AREA",
        194: "GALLERY.3D.COLUMN",
        195: "GALLERY.3D.LINE",
        196: "GALLERY.3D.PIE",
        197: "VIEW.3D",
        198: "GOAL.SEEK",
        199: "WORKGROUP",
        200: "FILL.GROUP",
        201: "UPDATE.LINK",
        202: "PROMOTE",
        203: "DEMOTE",
        204: "SHOW.DETAIL",
        206: "UNGROUP",
        207: "OBJECT.PROPERTIES",
        208: "SAVE.NEW.OBJECT",
        209: "SHARE",
        210: "SHARE.NAME",
        211: "DUPLICATE",
        212: "APPLY.STYLE",
        213: "ASSIGN.TO.OBJECT",
        214: "OBJECT.PROTECTION",
        215: "HIDE.OBJECT",
        216: "SET.EXTRACT",
        217: "CREATE.PUBLISHER",
        218: "SUBSCRIBE.TO",
        219: "ATTRIBUTES",
        220: "SHOW.TOOLBAR",
        222: "PRINT.PREVIEW",
        223: "EDIT.COLOR",
        224: "SHOW.LEVELS",
        225: "FORMAT.MAIN",
        226: "FORMAT.OVERLAY",
        227: "ON.RECALC",
        228: "EDIT.SERIES",
        229: "DEFINE.STYLE",
        240: "LINE.PRINT",
        243: "ENTER.DATA",
        249: "GALLERY.RADAR",
        250: "MERGE.STYLES",
        251: "EDITION.OPTIONS",
        252: "PASTE.PICTURE",
        253: "PASTE.PICTURE.LINK",
        254: "SPELLING",
        256: "ZOOM",
        259: "INSERT.OBJECT",
        260: "WINDOW.MINIMIZE",
        265: "SOUND.NOTE",
        266: "SOUND.PLAY",
        267: "FORMAT.SHAPE",
        268: "EXTEND.POLYGON",
        269: "FORMAT.AUTO",
        272: "GALLERY.3D.BAR",
        273: "GALLERY.3D.SURFACE",
        274: "FILL.AUTO",
        276: "CUSTOMIZE.TOOLBAR",
        277: "ADD.TOOL",
        278: "EDIT.OBJECT",
        279: "ON.DOUBLECLICK",
        280: "ON.ENTRY",
        281: "WORKBOOK.ADD",
        282: "WORKBOOK.MOVE",
        283: "WORKBOOK.COPY",
        284: "WORKBOOK.OPTIONS",
        285: "SAVE.WORKSPACE",
        288: "CHART.WIZARD",
        289: "DELETE.TOOL",
        290: "MOVE.TOOL",
        291: "WORKBOOK.SELECT",
        292: "WORKBOOK.ACTIVATE",
        293: "ASSIGN.TO.TOOL",
        295: "COPY.TOOL",
        296: "RESET.TOOL",
        297: "CONSTRAIN.NUMERIC",
        298: "PASTE.TOOL",
        302: "WORKBOOK.NEW",
        305: "SCENARIO.CELLS",
        306: "SCENARIO.DELETE",
        307: "SCENARIO.ADD",
        308: "SCENARIO.EDIT",
        309: "SCENARIO.SHOW",
        310: "SCENARIO.SHOW.NEXT",
        311: "SCENARIO.SUMMARY",
        312: "PIVOT.TABLE.WIZARD",
        313: "PIVOT.FIELD.PROPERTIES",
        314: "PIVOT.FIELD",
        315: "PIVOT.ITEM",
        316: "PIVOT.ADD.FIELDS",
        318: "OPTIONS.CALCULATION",
        319: "OPTIONS.EDIT",
        320: "OPTIONS.VIEW",
        321: "ADDIN.MANAGER",
        322: "MENU.EDITOR",
        323: "ATTACH.TOOLBARS",
        324: "VBAActivate",
        325: "OPTIONS.CHART",
        328: "VBA.INSERT.FILE",
        330: "VBA.PROCEDURE.DEFINITION",
        336: "ROUTING.SLIP",
        338: "ROUTE.DOCUMENT",
        339: "MAIL.LOGON",
        342: "INSERT.PICTURE",
        343: "EDIT.TOOL",
        344: "GALLERY.DOUGHNUT",
        350: "CHART.TREND",
        352: "PIVOT.ITEM.PROPERTIES",
        354: "WORKBOOK.INSERT",
        355: "OPTIONS.TRANSITION",
        356: "OPTIONS.GENERAL",
        370: "FILTER.ADVANCED",
        373: "MAIL.ADD.MAILER",
        374: "MAIL.DELETE.MAILER",
        375: "MAIL.REPLY",
        376: "MAIL.REPLY.ALL",
        377: "MAIL.FORWARD",
        378: "MAIL.NEXT.LETTER",
        379: "DATA.LABEL",
        380: "INSERT.TITLE",
        381: "FONT.PROPERTIES",
        382: "MACRO.OPTIONS",
        383: "WORKBOOK.HIDE",
        384: "WORKBOOK.UNHIDE",
        385: "WORKBOOK.DELETE",
        386: "WORKBOOK.NAME",
        388: "GALLERY.CUSTOM",
        390: "ADD.CHART.AUTOFORMAT",
        391: "DELETE.CHART.AUTOFORMAT",
        392: "CHART.ADD.DATA",
        393: "AUTO.OUTLINE",
        394: "TAB.ORDER",
        395: "SHOW.DIALOG",
        396: "SELECT.ALL",
        397: "UNGROUP.SHEETS",
        398: "SUBTOTAL.CREATE",
        399: "SUBTOTAL.REMOVE",
        400: "RENAME.OBJECT",
        412: "WORKBOOK.SCROLL",
        413: "WORKBOOK.NEXT",
        414: "WORKBOOK.PREV",
        415: "WORKBOOK.TAB.SPLIT",
        416: "FULL.SCREEN",
        417: "WORKBOOK.PROTECT",
        420: "SCROLLBAR.PROPERTIES",
        421: "PIVOT.SHOW.PAGES",
        422: "TEXT.TO.COLUMNS",
        423: "FORMAT.CHARTTYPE",
        424: "LINK.FORMAT",
        425: "TRACER.DISPLAY",
        430: "TRACER.NAVIGATE",
        431: "TRACER.CLEAR",
        432: "TRACER.ERROR",
        433: "PIVOT.FIELD.GROUP",
        434: "PIVOT.FIELD.UNGROUP",
        435: "CHECKBOX.PROPERTIES",
        436: "LABEL.PROPERTIES",
        437: "LISTBOX.PROPERTIES",
        438: "EDITBOX.PROPERTIES",
        439: "PIVOT.REFRESH",
        440: "LINK.COMBO",
        441: "OPEN.TEXT",
        442: "HIDE.DIALOG",
        443: "SET.DIALOG.FOCUS",
        444: "ENABLE.OBJECT",
        445: "PUSHBUTTON.PROPERTIES",
        446: "SET.DIALOG.DEFAULT",
        447: "FILTER",
        448: "FILTER.SHOW.ALL",
        449: "CLEAR.OUTLINE",
        450: "FUNCTION.WIZARD",
        451: "ADD.LIST.ITEM",
        452: "SET.LIST.ITEM",
        453: "REMOVE.LIST.ITEM",
        454: "SELECT.LIST.ITEM",
        455: "SET.CONTROL.VALUE",
        456: "SAVE.COPY.AS",
        458: "OPTIONS.LISTS.ADD",
        459: "OPTIONS.LISTS.DELETE",
        460: "SERIES.AXES",
        461: "SERIES.X",
        462: "SERIES.Y",
        463: "ERRORBAR.X",
        464: "ERRORBAR.Y",
        465: "FORMAT.CHART",
        466: "SERIES.ORDER",
        467: "MAIL.LOGOFF",
        468: "CLEAR.ROUTING.SLIP",
        469: "APP.ACTIVATE.MICROSOFT",
        470: "MAIL.EDIT.MAILER",
        471: "ON.SHEET",
        472: "STANDARD.WIDTH",
        473: "SCENARIO.MERGE",
        474: "SUMMARY.INFO",
        475: "FIND.FILE",
        476: "ACTIVE.CELL.FONT",
        477: "ENABLE.TIPWIZARD",
        478: "VBA.MAKE.ADDIN",
        480: "INSERTDATATABLE",
        481: "WORKGROUP.OPTIONS",
        482: "MAIL.SEND.MAILER",
        485: "AUTOCORRECT",
        489: "POST.DOCUMENT",
        491: "PICKLIST",
        493: "VIEW.SHOW",
        494: "VIEW.DEFINE",
        495: "VIEW.DELETE",
        509: "SHEET.BACKGROUND",
        510: "INSERT.MAP.OBJECT",
        511: "OPTIONS.MENONO",
        517: "MSOCHECKS",
        518: "NORMAL",
        519: "LAYOUT",
        520: "RM.PRINT.AREA",
        521: "CLEAR.PRINT.AREA",
        522: "ADD.PRINT.AREA",
        523: "MOVE.BRK",
        545: "HIDECURR.NOTE",
        546: "HIDEALL.NOTES",
        547: "DELETE.NOTE",
        548: "TRAVERSE.NOTES",
        549: "ACTIVATE.NOTES",
        620: "PROTECT.REVISIONS",
        621: "UNPROTECT.REVISIONS",
        647: "OPTIONS.ME",
        653: "WEB.PUBLISH",
        667: "NEWWEBQUERY",
        673: "PIVOT.TABLE.CHART",
        753: "OPTIONS.SAVE",
        755: "OPTIONS.SPELL",
        808: "HIDEALL.INKANNOTS"
      };
      var Ftab = {
        0: "COUNT",
        1: "IF",
        2: "ISNA",
        3: "ISERROR",
        4: "SUM",
        5: "AVERAGE",
        6: "MIN",
        7: "MAX",
        8: "ROW",
        9: "COLUMN",
        10: "NA",
        11: "NPV",
        12: "STDEV",
        13: "DOLLAR",
        14: "FIXED",
        15: "SIN",
        16: "COS",
        17: "TAN",
        18: "ATAN",
        19: "PI",
        20: "SQRT",
        21: "EXP",
        22: "LN",
        23: "LOG10",
        24: "ABS",
        25: "INT",
        26: "SIGN",
        27: "ROUND",
        28: "LOOKUP",
        29: "INDEX",
        30: "REPT",
        31: "MID",
        32: "LEN",
        33: "VALUE",
        34: "TRUE",
        35: "FALSE",
        36: "AND",
        37: "OR",
        38: "NOT",
        39: "MOD",
        40: "DCOUNT",
        41: "DSUM",
        42: "DAVERAGE",
        43: "DMIN",
        44: "DMAX",
        45: "DSTDEV",
        46: "VAR",
        47: "DVAR",
        48: "TEXT",
        49: "LINEST",
        50: "TREND",
        51: "LOGEST",
        52: "GROWTH",
        53: "GOTO",
        54: "HALT",
        55: "RETURN",
        56: "PV",
        57: "FV",
        58: "NPER",
        59: "PMT",
        60: "RATE",
        61: "MIRR",
        62: "IRR",
        63: "RAND",
        64: "MATCH",
        65: "DATE",
        66: "TIME",
        67: "DAY",
        68: "MONTH",
        69: "YEAR",
        70: "WEEKDAY",
        71: "HOUR",
        72: "MINUTE",
        73: "SECOND",
        74: "NOW",
        75: "AREAS",
        76: "ROWS",
        77: "COLUMNS",
        78: "OFFSET",
        79: "ABSREF",
        80: "RELREF",
        81: "ARGUMENT",
        82: "SEARCH",
        83: "TRANSPOSE",
        84: "ERROR",
        85: "STEP",
        86: "TYPE",
        87: "ECHO",
        88: "SET.NAME",
        89: "CALLER",
        90: "DEREF",
        91: "WINDOWS",
        92: "SERIES",
        93: "DOCUMENTS",
        94: "ACTIVE.CELL",
        95: "SELECTION",
        96: "RESULT",
        97: "ATAN2",
        98: "ASIN",
        99: "ACOS",
        100: "CHOOSE",
        101: "HLOOKUP",
        102: "VLOOKUP",
        103: "LINKS",
        104: "INPUT",
        105: "ISREF",
        106: "GET.FORMULA",
        107: "GET.NAME",
        108: "SET.VALUE",
        109: "LOG",
        110: "EXEC",
        111: "CHAR",
        112: "LOWER",
        113: "UPPER",
        114: "PROPER",
        115: "LEFT",
        116: "RIGHT",
        117: "EXACT",
        118: "TRIM",
        119: "REPLACE",
        120: "SUBSTITUTE",
        121: "CODE",
        122: "NAMES",
        123: "DIRECTORY",
        124: "FIND",
        125: "CELL",
        126: "ISERR",
        127: "ISTEXT",
        128: "ISNUMBER",
        129: "ISBLANK",
        130: "T",
        131: "N",
        132: "FOPEN",
        133: "FCLOSE",
        134: "FSIZE",
        135: "FREADLN",
        136: "FREAD",
        137: "FWRITELN",
        138: "FWRITE",
        139: "FPOS",
        140: "DATEVALUE",
        141: "TIMEVALUE",
        142: "SLN",
        143: "SYD",
        144: "DDB",
        145: "GET.DEF",
        146: "REFTEXT",
        147: "TEXTREF",
        148: "INDIRECT",
        149: "REGISTER",
        150: "CALL",
        151: "ADD.BAR",
        152: "ADD.MENU",
        153: "ADD.COMMAND",
        154: "ENABLE.COMMAND",
        155: "CHECK.COMMAND",
        156: "RENAME.COMMAND",
        157: "SHOW.BAR",
        158: "DELETE.MENU",
        159: "DELETE.COMMAND",
        160: "GET.CHART.ITEM",
        161: "DIALOG.BOX",
        162: "CLEAN",
        163: "MDETERM",
        164: "MINVERSE",
        165: "MMULT",
        166: "FILES",
        167: "IPMT",
        168: "PPMT",
        169: "COUNTA",
        170: "CANCEL.KEY",
        171: "FOR",
        172: "WHILE",
        173: "BREAK",
        174: "NEXT",
        175: "INITIATE",
        176: "REQUEST",
        177: "POKE",
        178: "EXECUTE",
        179: "TERMINATE",
        180: "RESTART",
        181: "HELP",
        182: "GET.BAR",
        183: "PRODUCT",
        184: "FACT",
        185: "GET.CELL",
        186: "GET.WORKSPACE",
        187: "GET.WINDOW",
        188: "GET.DOCUMENT",
        189: "DPRODUCT",
        190: "ISNONTEXT",
        191: "GET.NOTE",
        192: "NOTE",
        193: "STDEVP",
        194: "VARP",
        195: "DSTDEVP",
        196: "DVARP",
        197: "TRUNC",
        198: "ISLOGICAL",
        199: "DCOUNTA",
        200: "DELETE.BAR",
        201: "UNREGISTER",
        204: "USDOLLAR",
        205: "FINDB",
        206: "SEARCHB",
        207: "REPLACEB",
        208: "LEFTB",
        209: "RIGHTB",
        210: "MIDB",
        211: "LENB",
        212: "ROUNDUP",
        213: "ROUNDDOWN",
        214: "ASC",
        215: "DBCS",
        216: "RANK",
        219: "ADDRESS",
        220: "DAYS360",
        221: "TODAY",
        222: "VDB",
        223: "ELSE",
        224: "ELSE.IF",
        225: "END.IF",
        226: "FOR.CELL",
        227: "MEDIAN",
        228: "SUMPRODUCT",
        229: "SINH",
        230: "COSH",
        231: "TANH",
        232: "ASINH",
        233: "ACOSH",
        234: "ATANH",
        235: "DGET",
        236: "CREATE.OBJECT",
        237: "VOLATILE",
        238: "LAST.ERROR",
        239: "CUSTOM.UNDO",
        240: "CUSTOM.REPEAT",
        241: "FORMULA.CONVERT",
        242: "GET.LINK.INFO",
        243: "TEXT.BOX",
        244: "INFO",
        245: "GROUP",
        246: "GET.OBJECT",
        247: "DB",
        248: "PAUSE",
        251: "RESUME",
        252: "FREQUENCY",
        253: "ADD.TOOLBAR",
        254: "DELETE.TOOLBAR",
        255: "User",
        256: "RESET.TOOLBAR",
        257: "EVALUATE",
        258: "GET.TOOLBAR",
        259: "GET.TOOL",
        260: "SPELLING.CHECK",
        261: "ERROR.TYPE",
        262: "APP.TITLE",
        263: "WINDOW.TITLE",
        264: "SAVE.TOOLBAR",
        265: "ENABLE.TOOL",
        266: "PRESS.TOOL",
        267: "REGISTER.ID",
        268: "GET.WORKBOOK",
        269: "AVEDEV",
        270: "BETADIST",
        271: "GAMMALN",
        272: "BETAINV",
        273: "BINOMDIST",
        274: "CHIDIST",
        275: "CHIINV",
        276: "COMBIN",
        277: "CONFIDENCE",
        278: "CRITBINOM",
        279: "EVEN",
        280: "EXPONDIST",
        281: "FDIST",
        282: "FINV",
        283: "FISHER",
        284: "FISHERINV",
        285: "FLOOR",
        286: "GAMMADIST",
        287: "GAMMAINV",
        288: "CEILING",
        289: "HYPGEOMDIST",
        290: "LOGNORMDIST",
        291: "LOGINV",
        292: "NEGBINOMDIST",
        293: "NORMDIST",
        294: "NORMSDIST",
        295: "NORMINV",
        296: "NORMSINV",
        297: "STANDARDIZE",
        298: "ODD",
        299: "PERMUT",
        300: "POISSON",
        301: "TDIST",
        302: "WEIBULL",
        303: "SUMXMY2",
        304: "SUMX2MY2",
        305: "SUMX2PY2",
        306: "CHITEST",
        307: "CORREL",
        308: "COVAR",
        309: "FORECAST",
        310: "FTEST",
        311: "INTERCEPT",
        312: "PEARSON",
        313: "RSQ",
        314: "STEYX",
        315: "SLOPE",
        316: "TTEST",
        317: "PROB",
        318: "DEVSQ",
        319: "GEOMEAN",
        320: "HARMEAN",
        321: "SUMSQ",
        322: "KURT",
        323: "SKEW",
        324: "ZTEST",
        325: "LARGE",
        326: "SMALL",
        327: "QUARTILE",
        328: "PERCENTILE",
        329: "PERCENTRANK",
        330: "MODE",
        331: "TRIMMEAN",
        332: "TINV",
        334: "MOVIE.COMMAND",
        335: "GET.MOVIE",
        336: "CONCATENATE",
        337: "POWER",
        338: "PIVOT.ADD.DATA",
        339: "GET.PIVOT.TABLE",
        340: "GET.PIVOT.FIELD",
        341: "GET.PIVOT.ITEM",
        342: "RADIANS",
        343: "DEGREES",
        344: "SUBTOTAL",
        345: "SUMIF",
        346: "COUNTIF",
        347: "COUNTBLANK",
        348: "SCENARIO.GET",
        349: "OPTIONS.LISTS.GET",
        350: "ISPMT",
        351: "DATEDIF",
        352: "DATESTRING",
        353: "NUMBERSTRING",
        354: "ROMAN",
        355: "OPEN.DIALOG",
        356: "SAVE.DIALOG",
        357: "VIEW.GET",
        358: "GETPIVOTDATA",
        359: "HYPERLINK",
        360: "PHONETIC",
        361: "AVERAGEA",
        362: "MAXA",
        363: "MINA",
        364: "STDEVPA",
        365: "VARPA",
        366: "STDEVA",
        367: "VARA",
        368: "BAHTTEXT",
        369: "THAIDAYOFWEEK",
        370: "THAIDIGIT",
        371: "THAIMONTHOFYEAR",
        372: "THAINUMSOUND",
        373: "THAINUMSTRING",
        374: "THAISTRINGLENGTH",
        375: "ISTHAIDIGIT",
        376: "ROUNDBAHTDOWN",
        377: "ROUNDBAHTUP",
        378: "THAIYEAR",
        379: "RTD",
        380: "CUBEVALUE",
        381: "CUBEMEMBER",
        382: "CUBEMEMBERPROPERTY",
        383: "CUBERANKEDMEMBER",
        384: "HEX2BIN",
        385: "HEX2DEC",
        386: "HEX2OCT",
        387: "DEC2BIN",
        388: "DEC2HEX",
        389: "DEC2OCT",
        390: "OCT2BIN",
        391: "OCT2HEX",
        392: "OCT2DEC",
        393: "BIN2DEC",
        394: "BIN2OCT",
        395: "BIN2HEX",
        396: "IMSUB",
        397: "IMDIV",
        398: "IMPOWER",
        399: "IMABS",
        400: "IMSQRT",
        401: "IMLN",
        402: "IMLOG2",
        403: "IMLOG10",
        404: "IMSIN",
        405: "IMCOS",
        406: "IMEXP",
        407: "IMARGUMENT",
        408: "IMCONJUGATE",
        409: "IMAGINARY",
        410: "IMREAL",
        411: "COMPLEX",
        412: "IMSUM",
        413: "IMPRODUCT",
        414: "SERIESSUM",
        415: "FACTDOUBLE",
        416: "SQRTPI",
        417: "QUOTIENT",
        418: "DELTA",
        419: "GESTEP",
        420: "ISEVEN",
        421: "ISODD",
        422: "MROUND",
        423: "ERF",
        424: "ERFC",
        425: "BESSELJ",
        426: "BESSELK",
        427: "BESSELY",
        428: "BESSELI",
        429: "XIRR",
        430: "XNPV",
        431: "PRICEMAT",
        432: "YIELDMAT",
        433: "INTRATE",
        434: "RECEIVED",
        435: "DISC",
        436: "PRICEDISC",
        437: "YIELDDISC",
        438: "TBILLEQ",
        439: "TBILLPRICE",
        440: "TBILLYIELD",
        441: "PRICE",
        442: "YIELD",
        443: "DOLLARDE",
        444: "DOLLARFR",
        445: "NOMINAL",
        446: "EFFECT",
        447: "CUMPRINC",
        448: "CUMIPMT",
        449: "EDATE",
        450: "EOMONTH",
        451: "YEARFRAC",
        452: "COUPDAYBS",
        453: "COUPDAYS",
        454: "COUPDAYSNC",
        455: "COUPNCD",
        456: "COUPNUM",
        457: "COUPPCD",
        458: "DURATION",
        459: "MDURATION",
        460: "ODDLPRICE",
        461: "ODDLYIELD",
        462: "ODDFPRICE",
        463: "ODDFYIELD",
        464: "RANDBETWEEN",
        465: "WEEKNUM",
        466: "AMORDEGRC",
        467: "AMORLINC",
        468: "CONVERT",
        724: "SHEETJS",
        469: "ACCRINT",
        470: "ACCRINTM",
        471: "WORKDAY",
        472: "NETWORKDAYS",
        473: "GCD",
        474: "MULTINOMIAL",
        475: "LCM",
        476: "FVSCHEDULE",
        477: "CUBEKPIMEMBER",
        478: "CUBESET",
        479: "CUBESETCOUNT",
        480: "IFERROR",
        481: "COUNTIFS",
        482: "SUMIFS",
        483: "AVERAGEIF",
        484: "AVERAGEIFS"
      };
      var FtabArgc = {
        2: 1,
        3: 1,
        10: 0,
        15: 1,
        16: 1,
        17: 1,
        18: 1,
        19: 0,
        20: 1,
        21: 1,
        22: 1,
        23: 1,
        24: 1,
        25: 1,
        26: 1,
        27: 2,
        30: 2,
        31: 3,
        32: 1,
        33: 1,
        34: 0,
        35: 0,
        38: 1,
        39: 2,
        40: 3,
        41: 3,
        42: 3,
        43: 3,
        44: 3,
        45: 3,
        47: 3,
        48: 2,
        53: 1,
        61: 3,
        63: 0,
        65: 3,
        66: 3,
        67: 1,
        68: 1,
        69: 1,
        70: 1,
        71: 1,
        72: 1,
        73: 1,
        74: 0,
        75: 1,
        76: 1,
        77: 1,
        79: 2,
        80: 2,
        83: 1,
        85: 0,
        86: 1,
        89: 0,
        90: 1,
        94: 0,
        95: 0,
        97: 2,
        98: 1,
        99: 1,
        101: 3,
        102: 3,
        105: 1,
        106: 1,
        108: 2,
        111: 1,
        112: 1,
        113: 1,
        114: 1,
        117: 2,
        118: 1,
        119: 4,
        121: 1,
        126: 1,
        127: 1,
        128: 1,
        129: 1,
        130: 1,
        131: 1,
        133: 1,
        134: 1,
        135: 1,
        136: 2,
        137: 2,
        138: 2,
        140: 1,
        141: 1,
        142: 3,
        143: 4,
        144: 4,
        161: 1,
        162: 1,
        163: 1,
        164: 1,
        165: 2,
        172: 1,
        175: 2,
        176: 2,
        177: 3,
        178: 2,
        179: 1,
        184: 1,
        186: 1,
        189: 3,
        190: 1,
        195: 3,
        196: 3,
        197: 1,
        198: 1,
        199: 3,
        201: 1,
        207: 4,
        210: 3,
        211: 1,
        212: 2,
        213: 2,
        214: 1,
        215: 1,
        225: 0,
        229: 1,
        230: 1,
        231: 1,
        232: 1,
        233: 1,
        234: 1,
        235: 3,
        244: 1,
        247: 4,
        252: 2,
        257: 1,
        261: 1,
        271: 1,
        273: 4,
        274: 2,
        275: 2,
        276: 2,
        277: 3,
        278: 3,
        279: 1,
        280: 3,
        281: 3,
        282: 3,
        283: 1,
        284: 1,
        285: 2,
        286: 4,
        287: 3,
        288: 2,
        289: 4,
        290: 3,
        291: 3,
        292: 3,
        293: 4,
        294: 1,
        295: 3,
        296: 1,
        297: 3,
        298: 1,
        299: 2,
        300: 3,
        301: 3,
        302: 4,
        303: 2,
        304: 2,
        305: 2,
        306: 2,
        307: 2,
        308: 2,
        309: 3,
        310: 2,
        311: 2,
        312: 2,
        313: 2,
        314: 2,
        315: 2,
        316: 4,
        325: 2,
        326: 2,
        327: 2,
        328: 2,
        331: 2,
        332: 2,
        337: 2,
        342: 1,
        343: 1,
        346: 2,
        347: 1,
        350: 4,
        351: 3,
        352: 1,
        353: 2,
        360: 1,
        368: 1,
        369: 1,
        370: 1,
        371: 1,
        372: 1,
        373: 1,
        374: 1,
        375: 1,
        376: 1,
        377: 1,
        378: 1,
        382: 3,
        385: 1,
        392: 1,
        393: 1,
        396: 2,
        397: 2,
        398: 2,
        399: 1,
        400: 1,
        401: 1,
        402: 1,
        403: 1,
        404: 1,
        405: 1,
        406: 1,
        407: 1,
        408: 1,
        409: 1,
        410: 1,
        414: 4,
        415: 1,
        416: 1,
        417: 2,
        420: 1,
        421: 1,
        422: 2,
        424: 1,
        425: 2,
        426: 2,
        427: 2,
        428: 2,
        430: 3,
        438: 3,
        439: 3,
        440: 3,
        443: 2,
        444: 2,
        445: 2,
        446: 2,
        447: 6,
        448: 6,
        449: 2,
        450: 2,
        464: 2,
        468: 3,
        476: 2,
        479: 1,
        480: 2,
        65535: 0
      };
      function ods_to_csf_formula(f) {
        if (f.slice(0, 3) == "of:") f = f.slice(3);
        if (f.charCodeAt(0) == 61) {
          f = f.slice(1);
          if (f.charCodeAt(0) == 61) f = f.slice(1);
        }
        f = f.replace(/COM\.MICROSOFT\./g, "");
        f = f.replace(/\[((?:\.[A-Z]+[0-9]+)(?::\.[A-Z]+[0-9]+)?)\]/g, function($$, $1) {
          return $1.replace(/\./g, "");
        });
        f = f.replace(/\[.(#[A-Z]*[?!])\]/g, "$1");
        return f.replace(/[;~]/g, ",").replace(/\|/g, ";");
      }
      function csf_to_ods_formula(f) {
        var o = "of:=" + f.replace(crefregex, "$1[.$2$3$4$5]").replace(/\]:\[/g, ":");
        return o.replace(/;/g, "|").replace(/,/g, ";");
      }
      function ods_to_csf_3D(r) {
        var a = r.split(":");
        var s = a[0].split(".")[0];
        return [s, a[0].split(".")[1] + (a.length > 1 ? ":" + (a[1].split(".")[1] || a[1].split(".")[0]) : "")];
      }
      function csf_to_ods_3D(r) {
        return r.replace(/\./, "!");
      }
      var strs = {};
      var _ssfopts = {};
      var browser_has_Map = typeof Map !== "undefined";
      function get_sst_id(sst, str, rev) {
        var i = 0, len = sst.length;
        if (rev) {
          if (browser_has_Map ? rev.has(str) : Object.prototype.hasOwnProperty.call(rev, str)) {
            var revarr = browser_has_Map ? rev.get(str) : rev[str];
            for (; i < revarr.length; ++i) {
              if (sst[revarr[i]].t === str) {
                sst.Count++;
                return revarr[i];
              }
            }
          }
        } else for (; i < len; ++i) {
          if (sst[i].t === str) {
            sst.Count++;
            return i;
          }
        }
        sst[len] = { t: str };
        sst.Count++;
        sst.Unique++;
        if (rev) {
          if (browser_has_Map) {
            if (!rev.has(str)) rev.set(str, []);
            rev.get(str).push(len);
          } else {
            if (!Object.prototype.hasOwnProperty.call(rev, str)) rev[str] = [];
            rev[str].push(len);
          }
        }
        return len;
      }
      function col_obj_w(C, col) {
        var p = { min: C + 1, max: C + 1 };
        var wch = -1;
        if (col.MDW) MDW = col.MDW;
        if (col.width != null) p.customWidth = 1;
        else if (col.wpx != null) wch = px2char(col.wpx);
        else if (col.wch != null) wch = col.wch;
        if (wch > -1) {
          p.width = char2width(wch);
          p.customWidth = 1;
        } else if (col.width != null) p.width = col.width;
        if (col.hidden) p.hidden = true;
        if (col.level != null) {
          p.outlineLevel = p.level = col.level;
        }
        return p;
      }
      function default_margins(margins, mode) {
        if (!margins) return;
        var defs = [0.7, 0.7, 0.75, 0.75, 0.3, 0.3];
        if (mode == "xlml") defs = [1, 1, 1, 1, 0.5, 0.5];
        if (margins.left == null) margins.left = defs[0];
        if (margins.right == null) margins.right = defs[1];
        if (margins.top == null) margins.top = defs[2];
        if (margins.bottom == null) margins.bottom = defs[3];
        if (margins.header == null) margins.header = defs[4];
        if (margins.footer == null) margins.footer = defs[5];
      }
      function get_cell_style(styles, cell, opts) {
        var z = opts.revssf[cell.z != null ? cell.z : "General"];
        var i = 60, len = styles.length;
        if (z == null && opts.ssf) {
          for (; i < 392; ++i) if (opts.ssf[i] == null) {
            SSF_load(cell.z, i);
            opts.ssf[i] = cell.z;
            opts.revssf[cell.z] = z = i;
            break;
          }
        }
        for (i = 0; i != len; ++i) if (styles[i].numFmtId === z) return i;
        styles[len] = {
          numFmtId: z,
          fontId: 0,
          fillId: 0,
          borderId: 0,
          xfId: 0,
          applyNumberFormat: 1
        };
        return len;
      }
      function safe_format(p, fmtid, fillid, opts, themes, styles) {
        try {
          if (opts.cellNF) p.z = table_fmt[fmtid];
        } catch (e) {
          if (opts.WTF) throw e;
        }
        if (p.t === "z" && !opts.cellStyles) return;
        if (p.t === "d" && typeof p.v === "string") p.v = parseDate(p.v);
        if ((!opts || opts.cellText !== false) && p.t !== "z") try {
          if (table_fmt[fmtid] == null) SSF_load(SSFImplicit[fmtid] || "General", fmtid);
          if (p.t === "e") p.w = p.w || BErr[p.v];
          else if (fmtid === 0) {
            if (p.t === "n") {
              if ((p.v | 0) === p.v) p.w = p.v.toString(10);
              else p.w = SSF_general_num(p.v);
            } else if (p.t === "d") {
              var dd = datenum(p.v);
              if ((dd | 0) === dd) p.w = dd.toString(10);
              else p.w = SSF_general_num(dd);
            } else if (p.v === void 0) return "";
            else p.w = SSF_general(p.v, _ssfopts);
          } else if (p.t === "d") p.w = SSF_format(fmtid, datenum(p.v), _ssfopts);
          else p.w = SSF_format(fmtid, p.v, _ssfopts);
        } catch (e) {
          if (opts.WTF) throw e;
        }
        if (!opts.cellStyles) return;
        if (fillid != null) try {
          p.s = styles.Fills[fillid];
          if (p.s.fgColor && p.s.fgColor.theme && !p.s.fgColor.rgb) {
            p.s.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb, p.s.fgColor.tint || 0);
            if (opts.WTF) p.s.fgColor.raw_rgb = themes.themeElements.clrScheme[p.s.fgColor.theme].rgb;
          }
          if (p.s.bgColor && p.s.bgColor.theme) {
            p.s.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb, p.s.bgColor.tint || 0);
            if (opts.WTF) p.s.bgColor.raw_rgb = themes.themeElements.clrScheme[p.s.bgColor.theme].rgb;
          }
        } catch (e) {
          if (opts.WTF && styles.Fills) throw e;
        }
      }
      function check_ws(ws, sname, i) {
        if (ws && ws["!ref"]) {
          var range = safe_decode_range(ws["!ref"]);
          if (range.e.c < range.s.c || range.e.r < range.s.r) throw new Error("Bad range (" + i + "): " + ws["!ref"]);
        }
      }
      function parse_ws_xml_dim(ws, s) {
        var d = safe_decode_range(s);
        if (d.s.r <= d.e.r && d.s.c <= d.e.c && d.s.r >= 0 && d.s.c >= 0) ws["!ref"] = encode_range(d);
      }
      var mergecregex = /<(?:\w:)?mergeCell ref="[A-Z0-9:]+"\s*[\/]?>/g;
      var sheetdataregex = /<(?:\w+:)?sheetData[^>]*>([\s\S]*)<\/(?:\w+:)?sheetData>/;
      var hlinkregex = /<(?:\w:)?hyperlink [^>]*>/mg;
      var dimregex = /"(\w*:\w*)"/;
      var colregex = /<(?:\w:)?col\b[^>]*[\/]?>/g;
      var afregex = /<(?:\w:)?autoFilter[^>]*([\/]|>([\s\S]*)<\/(?:\w:)?autoFilter)>/g;
      var marginregex = /<(?:\w:)?pageMargins[^>]*\/>/g;
      var sheetprregex = /<(?:\w:)?sheetPr\b(?:[^>a-z][^>]*)?\/>/;
      var sheetprregex2 = /<(?:\w:)?sheetPr[^>]*(?:[\/]|>([\s\S]*)<\/(?:\w:)?sheetPr)>/;
      var svsregex = /<(?:\w:)?sheetViews[^>]*(?:[\/]|>([\s\S]*)<\/(?:\w:)?sheetViews)>/;
      function parse_ws_xml(data, opts, idx, rels, wb, themes, styles) {
        if (!data) return data;
        if (!rels) rels = { "!id": {} };
        if (DENSE != null && opts.dense == null) opts.dense = DENSE;
        var s = opts.dense ? [] : {};
        var refguess = { s: { r: 2e6, c: 2e6 }, e: { r: 0, c: 0 } };
        var data1 = "", data2 = "";
        var mtch = data.match(sheetdataregex);
        if (mtch) {
          data1 = data.slice(0, mtch.index);
          data2 = data.slice(mtch.index + mtch[0].length);
        } else data1 = data2 = data;
        var sheetPr = data1.match(sheetprregex);
        if (sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);
        else if (sheetPr = data1.match(sheetprregex2)) parse_ws_xml_sheetpr2(sheetPr[0], sheetPr[1] || "", s, wb, idx, styles, themes);
        var ridx = (data1.match(/<(?:\w*:)?dimension/) || { index: -1 }).index;
        if (ridx > 0) {
          var ref = data1.slice(ridx, ridx + 50).match(dimregex);
          if (ref) parse_ws_xml_dim(s, ref[1]);
        }
        var svs = data1.match(svsregex);
        if (svs && svs[1]) parse_ws_xml_sheetviews(svs[1], wb);
        var columns = [];
        if (opts.cellStyles) {
          var cols = data1.match(colregex);
          if (cols) parse_ws_xml_cols(columns, cols);
        }
        if (mtch) parse_ws_xml_data(mtch[1], s, opts, refguess, themes, styles);
        var afilter = data2.match(afregex);
        if (afilter) s["!autofilter"] = parse_ws_xml_autofilter(afilter[0]);
        var merges = [];
        var _merge = data2.match(mergecregex);
        if (_merge) for (ridx = 0; ridx != _merge.length; ++ridx)
          merges[ridx] = safe_decode_range(_merge[ridx].slice(_merge[ridx].indexOf('"') + 1));
        var hlink = data2.match(hlinkregex);
        if (hlink) parse_ws_xml_hlinks(s, hlink, rels);
        var margins = data2.match(marginregex);
        if (margins) s["!margins"] = parse_ws_xml_margins(parsexmltag(margins[0]));
        if (!s["!ref"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s["!ref"] = encode_range(refguess);
        if (opts.sheetRows > 0 && s["!ref"]) {
          var tmpref = safe_decode_range(s["!ref"]);
          if (opts.sheetRows <= +tmpref.e.r) {
            tmpref.e.r = opts.sheetRows - 1;
            if (tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;
            if (tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;
            if (tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;
            if (tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;
            s["!fullref"] = s["!ref"];
            s["!ref"] = encode_range(tmpref);
          }
        }
        if (columns.length > 0) s["!cols"] = columns;
        if (merges.length > 0) s["!merges"] = merges;
        return s;
      }
      function write_ws_xml_merges(merges) {
        if (merges.length === 0) return "";
        var o = '<mergeCells count="' + merges.length + '">';
        for (var i = 0; i != merges.length; ++i) o += '<mergeCell ref="' + encode_range(merges[i]) + '"/>';
        return o + "</mergeCells>";
      }
      function parse_ws_xml_sheetpr(sheetPr, s, wb, idx) {
        var data = parsexmltag(sheetPr);
        if (!wb.Sheets[idx]) wb.Sheets[idx] = {};
        if (data.codeName) wb.Sheets[idx].CodeName = unescapexml(utf8read(data.codeName));
      }
      function parse_ws_xml_sheetpr2(sheetPr, body, s, wb, idx) {
        parse_ws_xml_sheetpr(sheetPr.slice(0, sheetPr.indexOf(">")), s, wb, idx);
      }
      function write_ws_xml_sheetpr(ws, wb, idx, opts, o) {
        var needed = false;
        var props = {}, payload = null;
        if (opts.bookType !== "xlsx" && wb.vbaraw) {
          var cname = wb.SheetNames[idx];
          try {
            if (wb.Workbook) cname = wb.Workbook.Sheets[idx].CodeName || cname;
          } catch (e) {
          }
          needed = true;
          props.codeName = utf8write(escapexml(cname));
        }
        if (ws && ws["!outline"]) {
          var outlineprops = { summaryBelow: 1, summaryRight: 1 };
          if (ws["!outline"].above) outlineprops.summaryBelow = 0;
          if (ws["!outline"].left) outlineprops.summaryRight = 0;
          payload = (payload || "") + writextag("outlinePr", null, outlineprops);
        }
        if (!needed && !payload) return;
        o[o.length] = writextag("sheetPr", payload, props);
      }
      var sheetprot_deffalse = ["objects", "scenarios", "selectLockedCells", "selectUnlockedCells"];
      var sheetprot_deftrue = [
        "formatColumns",
        "formatRows",
        "formatCells",
        "insertColumns",
        "insertRows",
        "insertHyperlinks",
        "deleteColumns",
        "deleteRows",
        "sort",
        "autoFilter",
        "pivotTables"
      ];
      function write_ws_xml_protection(sp) {
        var o = { sheet: 1 };
        sheetprot_deffalse.forEach(function(n) {
          if (sp[n] != null && sp[n]) o[n] = "1";
        });
        sheetprot_deftrue.forEach(function(n) {
          if (sp[n] != null && !sp[n]) o[n] = "0";
        });
        if (sp.password) o.password = crypto_CreatePasswordVerifier_Method1(sp.password).toString(16).toUpperCase();
        return writextag("sheetProtection", null, o);
      }
      function parse_ws_xml_hlinks(s, data, rels) {
        var dense = Array.isArray(s);
        for (var i = 0; i != data.length; ++i) {
          var val = parsexmltag(utf8read(data[i]), true);
          if (!val.ref) return;
          var rel = ((rels || {})["!id"] || [])[val.id];
          if (rel) {
            val.Target = rel.Target;
            if (val.location) val.Target += "#" + unescapexml(val.location);
          } else {
            val.Target = "#" + unescapexml(val.location);
            rel = { Target: val.Target, TargetMode: "Internal" };
          }
          val.Rel = rel;
          if (val.tooltip) {
            val.Tooltip = val.tooltip;
            delete val.tooltip;
          }
          var rng = safe_decode_range(val.ref);
          for (var R = rng.s.r; R <= rng.e.r; ++R) for (var C = rng.s.c; C <= rng.e.c; ++C) {
            var addr = encode_cell({ c: C, r: R });
            if (dense) {
              if (!s[R]) s[R] = [];
              if (!s[R][C]) s[R][C] = { t: "z", v: void 0 };
              s[R][C].l = val;
            } else {
              if (!s[addr]) s[addr] = { t: "z", v: void 0 };
              s[addr].l = val;
            }
          }
        }
      }
      function parse_ws_xml_margins(margin) {
        var o = {};
        ["left", "right", "top", "bottom", "header", "footer"].forEach(function(k) {
          if (margin[k]) o[k] = parseFloat(margin[k]);
        });
        return o;
      }
      function write_ws_xml_margins(margin) {
        default_margins(margin);
        return writextag("pageMargins", null, margin);
      }
      function parse_ws_xml_cols(columns, cols) {
        var seencol = false;
        for (var coli = 0; coli != cols.length; ++coli) {
          var coll = parsexmltag(cols[coli], true);
          if (coll.hidden) coll.hidden = parsexmlbool(coll.hidden);
          var colm = parseInt(coll.min, 10) - 1, colM = parseInt(coll.max, 10) - 1;
          if (coll.outlineLevel) coll.level = +coll.outlineLevel || 0;
          delete coll.min;
          delete coll.max;
          coll.width = +coll.width;
          if (!seencol && coll.width) {
            seencol = true;
            find_mdw_colw(coll.width);
          }
          process_col(coll);
          while (colm <= colM) columns[colm++] = dup(coll);
        }
      }
      function write_ws_xml_cols(ws, cols) {
        var o = ["<cols>"], col;
        for (var i = 0; i != cols.length; ++i) {
          if (!(col = cols[i])) continue;
          o[o.length] = writextag("col", null, col_obj_w(i, col));
        }
        o[o.length] = "</cols>";
        return o.join("");
      }
      function parse_ws_xml_autofilter(data) {
        var o = { ref: (data.match(/ref="([^"]*)"/) || [])[1] };
        return o;
      }
      function write_ws_xml_autofilter(data, ws, wb, idx) {
        var ref = typeof data.ref == "string" ? data.ref : encode_range(data.ref);
        if (!wb.Workbook) wb.Workbook = { Sheets: [] };
        if (!wb.Workbook.Names) wb.Workbook.Names = [];
        var names = wb.Workbook.Names;
        var range = decode_range(ref);
        if (range.s.r == range.e.r) {
          range.e.r = decode_range(ws["!ref"]).e.r;
          ref = encode_range(range);
        }
        for (var i = 0; i < names.length; ++i) {
          var name = names[i];
          if (name.Name != "_xlnm._FilterDatabase") continue;
          if (name.Sheet != idx) continue;
          name.Ref = "'" + wb.SheetNames[idx] + "'!" + ref;
          break;
        }
        if (i == names.length) names.push({ Name: "_xlnm._FilterDatabase", Sheet: idx, Ref: "'" + wb.SheetNames[idx] + "'!" + ref });
        return writextag("autoFilter", null, { ref });
      }
      var sviewregex = /<(?:\w:)?sheetView(?:[^>a-z][^>]*)?\/?>/;
      function parse_ws_xml_sheetviews(data, wb) {
        if (!wb.Views) wb.Views = [{}];
        (data.match(sviewregex) || []).forEach(function(r, i) {
          var tag = parsexmltag(r);
          if (!wb.Views[i]) wb.Views[i] = {};
          if (+tag.zoomScale) wb.Views[i].zoom = +tag.zoomScale;
          if (parsexmlbool(tag.rightToLeft)) wb.Views[i].RTL = true;
        });
      }
      function write_ws_xml_sheetviews(ws, opts, idx, wb) {
        var sview = { workbookViewId: "0" };
        if ((((wb || {}).Workbook || {}).Views || [])[0]) sview.rightToLeft = wb.Workbook.Views[0].RTL ? "1" : "0";
        return writextag("sheetViews", writextag("sheetView", null, sview), {});
      }
      function write_ws_xml_cell(cell, ref, ws, opts) {
        if (cell.c) ws["!comments"].push([ref, cell.c]);
        if (cell.v === void 0 && typeof cell.f !== "string" || cell.t === "z" && !cell.f) return "";
        var vv = "";
        var oldt = cell.t, oldv = cell.v;
        if (cell.t !== "z") switch (cell.t) {
          case "b":
            vv = cell.v ? "1" : "0";
            break;
          case "n":
            vv = "" + cell.v;
            break;
          case "e":
            vv = BErr[cell.v];
            break;
          case "d":
            if (opts && opts.cellDates) vv = parseDate(cell.v, -1).toISOString();
            else {
              cell = dup(cell);
              cell.t = "n";
              vv = "" + (cell.v = datenum(parseDate(cell.v)));
            }
            if (typeof cell.z === "undefined") cell.z = table_fmt[14];
            break;
          default:
            vv = cell.v;
            break;
        }
        var v = writetag("v", escapexml(vv)), o = { r: ref };
        var os = get_cell_style(opts.cellXfs, cell, opts);
        if (os !== 0) o.s = os;
        switch (cell.t) {
          case "n":
            break;
          case "d":
            o.t = "d";
            break;
          case "b":
            o.t = "b";
            break;
          case "e":
            o.t = "e";
            break;
          case "z":
            break;
          default:
            if (cell.v == null) {
              delete cell.t;
              break;
            }
            if (cell.v.length > 32767) throw new Error("Text length must not exceed 32767 characters");
            if (opts && opts.bookSST) {
              v = writetag("v", "" + get_sst_id(opts.Strings, cell.v, opts.revStrings));
              o.t = "s";
              break;
            }
            o.t = "str";
            break;
        }
        if (cell.t != oldt) {
          cell.t = oldt;
          cell.v = oldv;
        }
        if (typeof cell.f == "string" && cell.f) {
          var ff = cell.F && cell.F.slice(0, ref.length) == ref ? { t: "array", ref: cell.F } : null;
          v = writextag("f", escapexml(cell.f), ff) + (cell.v != null ? v : "");
        }
        if (cell.l) ws["!links"].push([ref, cell.l]);
        if (cell.D) o.cm = 1;
        return writextag("c", v, o);
      }
      var parse_ws_xml_data = function() {
        var cellregex = /<(?:\w+:)?c[ \/>]/, rowregex = /<\/(?:\w+:)?row>/;
        var rregex = /r=["']([^"']*)["']/, isregex = /<(?:\w+:)?is>([\S\s]*?)<\/(?:\w+:)?is>/;
        var refregex = /ref=["']([^"']*)["']/;
        var match_v = matchtag("v"), match_f = matchtag("f");
        return function parse_ws_xml_data2(sdata, s, opts, guess, themes, styles) {
          var ri = 0, x = "", cells = [], cref = [], idx = 0, i = 0, cc = 0, d = "", p;
          var tag, tagr = 0, tagc = 0;
          var sstr, ftag;
          var fmtid = 0, fillid = 0;
          var do_format = Array.isArray(styles.CellXf), cf;
          var arrayf = [];
          var sharedf = [];
          var dense = Array.isArray(s);
          var rows = [], rowobj = {}, rowrite = false;
          var sheetStubs = !!opts.sheetStubs;
          for (var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {
            x = marr[mt].trim();
            var xlen = x.length;
            if (xlen === 0) continue;
            var rstarti = 0;
            outa: for (ri = 0; ri < xlen; ++ri) switch (
              /*x.charCodeAt(ri)*/
              x[ri]
            ) {
              case ">":
                if (
                  /*x.charCodeAt(ri-1) != 47*/
                  x[ri - 1] != "/"
                ) {
                  ++ri;
                  break outa;
                }
                if (opts && opts.cellStyles) {
                  tag = parsexmltag(x.slice(rstarti, ri), true);
                  tagr = tag.r != null ? parseInt(tag.r, 10) : tagr + 1;
                  tagc = -1;
                  if (opts.sheetRows && opts.sheetRows < tagr) continue;
                  rowobj = {};
                  rowrite = false;
                  if (tag.ht) {
                    rowrite = true;
                    rowobj.hpt = parseFloat(tag.ht);
                    rowobj.hpx = pt2px(rowobj.hpt);
                  }
                  if (tag.hidden == "1") {
                    rowrite = true;
                    rowobj.hidden = true;
                  }
                  if (tag.outlineLevel != null) {
                    rowrite = true;
                    rowobj.level = +tag.outlineLevel;
                  }
                  if (rowrite) rows[tagr - 1] = rowobj;
                }
                break;
              case "<":
                rstarti = ri;
                break;
            }
            if (rstarti >= ri) break;
            tag = parsexmltag(x.slice(rstarti, ri), true);
            tagr = tag.r != null ? parseInt(tag.r, 10) : tagr + 1;
            tagc = -1;
            if (opts.sheetRows && opts.sheetRows < tagr) continue;
            if (guess.s.r > tagr - 1) guess.s.r = tagr - 1;
            if (guess.e.r < tagr - 1) guess.e.r = tagr - 1;
            if (opts && opts.cellStyles) {
              rowobj = {};
              rowrite = false;
              if (tag.ht) {
                rowrite = true;
                rowobj.hpt = parseFloat(tag.ht);
                rowobj.hpx = pt2px(rowobj.hpt);
              }
              if (tag.hidden == "1") {
                rowrite = true;
                rowobj.hidden = true;
              }
              if (tag.outlineLevel != null) {
                rowrite = true;
                rowobj.level = +tag.outlineLevel;
              }
              if (rowrite) rows[tagr - 1] = rowobj;
            }
            cells = x.slice(ri).split(cellregex);
            for (var rslice = 0; rslice != cells.length; ++rslice) if (cells[rslice].trim().charAt(0) != "<") break;
            cells = cells.slice(rslice);
            for (ri = 0; ri != cells.length; ++ri) {
              x = cells[ri].trim();
              if (x.length === 0) continue;
              cref = x.match(rregex);
              idx = ri;
              i = 0;
              cc = 0;
              x = "<c " + (x.slice(0, 1) == "<" ? ">" : "") + x;
              if (cref != null && cref.length === 2) {
                idx = 0;
                d = cref[1];
                for (i = 0; i != d.length; ++i) {
                  if ((cc = d.charCodeAt(i) - 64) < 1 || cc > 26) break;
                  idx = 26 * idx + cc;
                }
                --idx;
                tagc = idx;
              } else ++tagc;
              for (i = 0; i != x.length; ++i) if (x.charCodeAt(i) === 62) break;
              ++i;
              tag = parsexmltag(x.slice(0, i), true);
              if (!tag.r) tag.r = encode_cell({ r: tagr - 1, c: tagc });
              d = x.slice(i);
              p = { t: "" };
              if ((cref = d.match(match_v)) != null && cref[1] !== "") p.v = unescapexml(cref[1]);
              if (opts.cellFormula) {
                if ((cref = d.match(match_f)) != null && cref[1] !== "") {
                  p.f = unescapexml(utf8read(cref[1])).replace(/\r\n/g, "\n");
                  if (!opts.xlfn) p.f = _xlfn(p.f);
                  if (cref[0].indexOf('t="array"') > -1) {
                    p.F = (d.match(refregex) || [])[1];
                    if (p.F.indexOf(":") > -1) arrayf.push([safe_decode_range(p.F), p.F]);
                  } else if (cref[0].indexOf('t="shared"') > -1) {
                    ftag = parsexmltag(cref[0]);
                    var ___f = unescapexml(utf8read(cref[1]));
                    if (!opts.xlfn) ___f = _xlfn(___f);
                    sharedf[parseInt(ftag.si, 10)] = [ftag, ___f, tag.r];
                  }
                } else if (cref = d.match(/<f[^>]*\/>/)) {
                  ftag = parsexmltag(cref[0]);
                  if (sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2], tag.r);
                }
                var _tag = decode_cell(tag.r);
                for (i = 0; i < arrayf.length; ++i)
                  if (_tag.r >= arrayf[i][0].s.r && _tag.r <= arrayf[i][0].e.r) {
                    if (_tag.c >= arrayf[i][0].s.c && _tag.c <= arrayf[i][0].e.c)
                      p.F = arrayf[i][1];
                  }
              }
              if (tag.t == null && p.v === void 0) {
                if (p.f || p.F) {
                  p.v = 0;
                  p.t = "n";
                } else if (!sheetStubs) continue;
                else p.t = "z";
              } else p.t = tag.t || "n";
              if (guess.s.c > tagc) guess.s.c = tagc;
              if (guess.e.c < tagc) guess.e.c = tagc;
              switch (p.t) {
                case "n":
                  if (p.v == "" || p.v == null) {
                    if (!sheetStubs) continue;
                    p.t = "z";
                  } else p.v = parseFloat(p.v);
                  break;
                case "s":
                  if (typeof p.v == "undefined") {
                    if (!sheetStubs) continue;
                    p.t = "z";
                  } else {
                    sstr = strs[parseInt(p.v, 10)];
                    p.v = sstr.t;
                    p.r = sstr.r;
                    if (opts.cellHTML) p.h = sstr.h;
                  }
                  break;
                case "str":
                  p.t = "s";
                  p.v = p.v != null ? utf8read(p.v) : "";
                  if (opts.cellHTML) p.h = escapehtml(p.v);
                  break;
                case "inlineStr":
                  cref = d.match(isregex);
                  p.t = "s";
                  if (cref != null && (sstr = parse_si(cref[1]))) {
                    p.v = sstr.t;
                    if (opts.cellHTML) p.h = sstr.h;
                  } else p.v = "";
                  break;
                case "b":
                  p.v = parsexmlbool(p.v);
                  break;
                case "d":
                  if (opts.cellDates) p.v = parseDate(p.v, 1);
                  else {
                    p.v = datenum(parseDate(p.v, 1));
                    p.t = "n";
                  }
                  break;
                case "e":
                  if (!opts || opts.cellText !== false) p.w = p.v;
                  p.v = RBErr[p.v];
                  break;
              }
              fmtid = fillid = 0;
              cf = null;
              if (do_format && tag.s !== void 0) {
                cf = styles.CellXf[tag.s];
                if (cf != null) {
                  if (cf.numFmtId != null) fmtid = cf.numFmtId;
                  if (opts.cellStyles) {
                    if (cf.fillId != null) fillid = cf.fillId;
                  }
                }
              }
              safe_format(p, fmtid, fillid, opts, themes, styles);
              if (opts.cellDates && do_format && p.t == "n" && fmt_is_date(table_fmt[fmtid])) {
                p.t = "d";
                p.v = numdate(p.v);
              }
              if (tag.cm && opts.xlmeta) {
                var cm = (opts.xlmeta.Cell || [])[+tag.cm - 1];
                if (cm && cm.type == "XLDAPR") p.D = true;
              }
              if (dense) {
                var _r = decode_cell(tag.r);
                if (!s[_r.r]) s[_r.r] = [];
                s[_r.r][_r.c] = p;
              } else s[tag.r] = p;
            }
          }
          if (rows.length > 0) s["!rows"] = rows;
        };
      }();
      function write_ws_xml_data(ws, opts, idx, wb) {
        var o = [], r = [], range = safe_decode_range(ws["!ref"]), cell = "", ref, rr = "", cols = [], R = 0, C = 0, rows = ws["!rows"];
        var dense = Array.isArray(ws);
        var params = { r: rr }, row, height = -1;
        for (C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);
        for (R = range.s.r; R <= range.e.r; ++R) {
          r = [];
          rr = encode_row(R);
          for (C = range.s.c; C <= range.e.c; ++C) {
            ref = cols[C] + rr;
            var _cell = dense ? (ws[R] || [])[C] : ws[ref];
            if (_cell === void 0) continue;
            if ((cell = write_ws_xml_cell(_cell, ref, ws, opts, idx, wb)) != null) r.push(cell);
          }
          if (r.length > 0 || rows && rows[R]) {
            params = { r: rr };
            if (rows && rows[R]) {
              row = rows[R];
              if (row.hidden) params.hidden = 1;
              height = -1;
              if (row.hpx) height = px2pt(row.hpx);
              else if (row.hpt) height = row.hpt;
              if (height > -1) {
                params.ht = height;
                params.customHeight = 1;
              }
              if (row.level) {
                params.outlineLevel = row.level;
              }
            }
            o[o.length] = writextag("row", r.join(""), params);
          }
        }
        if (rows) for (; R < rows.length; ++R) {
          if (rows && rows[R]) {
            params = { r: R + 1 };
            row = rows[R];
            if (row.hidden) params.hidden = 1;
            height = -1;
            if (row.hpx) height = px2pt(row.hpx);
            else if (row.hpt) height = row.hpt;
            if (height > -1) {
              params.ht = height;
              params.customHeight = 1;
            }
            if (row.level) {
              params.outlineLevel = row.level;
            }
            o[o.length] = writextag("row", "", params);
          }
        }
        return o.join("");
      }
      function write_ws_xml(idx, opts, wb, rels) {
        var o = [XML_HEADER, writextag("worksheet", null, {
          "xmlns": XMLNS_main[0],
          "xmlns:r": XMLNS.r
        })];
        var s = wb.SheetNames[idx], sidx = 0, rdata = "";
        var ws = wb.Sheets[s];
        if (ws == null) ws = {};
        var ref = ws["!ref"] || "A1";
        var range = safe_decode_range(ref);
        if (range.e.c > 16383 || range.e.r > 1048575) {
          if (opts.WTF) throw new Error("Range " + ref + " exceeds format limit A1:XFD1048576");
          range.e.c = Math.min(range.e.c, 16383);
          range.e.r = Math.min(range.e.c, 1048575);
          ref = encode_range(range);
        }
        if (!rels) rels = {};
        ws["!comments"] = [];
        var _drawing = [];
        write_ws_xml_sheetpr(ws, wb, idx, opts, o);
        o[o.length] = writextag("dimension", null, { "ref": ref });
        o[o.length] = write_ws_xml_sheetviews(ws, opts, idx, wb);
        if (opts.sheetFormat) o[o.length] = writextag("sheetFormatPr", null, {
          defaultRowHeight: opts.sheetFormat.defaultRowHeight || "16",
          baseColWidth: opts.sheetFormat.baseColWidth || "10",
          outlineLevelRow: opts.sheetFormat.outlineLevelRow || "7"
        });
        if (ws["!cols"] != null && ws["!cols"].length > 0) o[o.length] = write_ws_xml_cols(ws, ws["!cols"]);
        o[sidx = o.length] = "<sheetData/>";
        ws["!links"] = [];
        if (ws["!ref"] != null) {
          rdata = write_ws_xml_data(ws, opts, idx, wb, rels);
          if (rdata.length > 0) o[o.length] = rdata;
        }
        if (o.length > sidx + 1) {
          o[o.length] = "</sheetData>";
          o[sidx] = o[sidx].replace("/>", ">");
        }
        if (ws["!protect"]) o[o.length] = write_ws_xml_protection(ws["!protect"]);
        if (ws["!autofilter"] != null) o[o.length] = write_ws_xml_autofilter(ws["!autofilter"], ws, wb, idx);
        if (ws["!merges"] != null && ws["!merges"].length > 0) o[o.length] = write_ws_xml_merges(ws["!merges"]);
        var relc = -1, rel, rId = -1;
        if (ws["!links"].length > 0) {
          o[o.length] = "<hyperlinks>";
          ws["!links"].forEach(function(l) {
            if (!l[1].Target) return;
            rel = { "ref": l[0] };
            if (l[1].Target.charAt(0) != "#") {
              rId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#.*$/, ""), RELS.HLINK);
              rel["r:id"] = "rId" + rId;
            }
            if ((relc = l[1].Target.indexOf("#")) > -1) rel.location = escapexml(l[1].Target.slice(relc + 1));
            if (l[1].Tooltip) rel.tooltip = escapexml(l[1].Tooltip);
            o[o.length] = writextag("hyperlink", null, rel);
          });
          o[o.length] = "</hyperlinks>";
        }
        delete ws["!links"];
        if (ws["!margins"] != null) o[o.length] = write_ws_xml_margins(ws["!margins"]);
        if (!opts || opts.ignoreEC || opts.ignoreEC == void 0) o[o.length] = writetag("ignoredErrors", writextag("ignoredError", null, { numberStoredAsText: 1, sqref: ref }));
        if (_drawing.length > 0) {
          rId = add_rels(rels, -1, "../drawings/drawing" + (idx + 1) + ".xml", RELS.DRAW);
          o[o.length] = writextag("drawing", null, { "r:id": "rId" + rId });
          ws["!drawing"] = _drawing;
        }
        if (ws["!comments"].length > 0) {
          rId = add_rels(rels, -1, "../drawings/vmlDrawing" + (idx + 1) + ".vml", RELS.VML);
          o[o.length] = writextag("legacyDrawing", null, { "r:id": "rId" + rId });
          ws["!legacy"] = rId;
        }
        if (o.length > 1) {
          o[o.length] = "</worksheet>";
          o[1] = o[1].replace("/>", ">");
        }
        return o.join("");
      }
      function parse_BrtRowHdr(data, length) {
        var z = {};
        var tgt = data.l + length;
        z.r = data.read_shift(4);
        data.l += 4;
        var miyRw = data.read_shift(2);
        data.l += 1;
        var flags = data.read_shift(1);
        data.l = tgt;
        if (flags & 7) z.level = flags & 7;
        if (flags & 16) z.hidden = true;
        if (flags & 32) z.hpt = miyRw / 20;
        return z;
      }
      function write_BrtRowHdr(R, range, ws) {
        var o = new_buf(17 + 8 * 16);
        var row = (ws["!rows"] || [])[R] || {};
        o.write_shift(4, R);
        o.write_shift(4, 0);
        var miyRw = 320;
        if (row.hpx) miyRw = px2pt(row.hpx) * 20;
        else if (row.hpt) miyRw = row.hpt * 20;
        o.write_shift(2, miyRw);
        o.write_shift(1, 0);
        var flags = 0;
        if (row.level) flags |= row.level;
        if (row.hidden) flags |= 16;
        if (row.hpx || row.hpt) flags |= 32;
        o.write_shift(1, flags);
        o.write_shift(1, 0);
        var ncolspan = 0, lcs = o.l;
        o.l += 4;
        var caddr = { r: R, c: 0 };
        for (var i = 0; i < 16; ++i) {
          if (range.s.c > i + 1 << 10 || range.e.c < i << 10) continue;
          var first = -1, last = -1;
          for (var j = i << 10; j < i + 1 << 10; ++j) {
            caddr.c = j;
            var cell = Array.isArray(ws) ? (ws[caddr.r] || [])[caddr.c] : ws[encode_cell(caddr)];
            if (cell) {
              if (first < 0) first = j;
              last = j;
            }
          }
          if (first < 0) continue;
          ++ncolspan;
          o.write_shift(4, first);
          o.write_shift(4, last);
        }
        var l = o.l;
        o.l = lcs;
        o.write_shift(4, ncolspan);
        o.l = l;
        return o.length > o.l ? o.slice(0, o.l) : o;
      }
      function write_row_header(ba, ws, range, R) {
        var o = write_BrtRowHdr(R, range, ws);
        if (o.length > 17 || (ws["!rows"] || [])[R]) write_record(ba, 0, o);
      }
      var parse_BrtWsDim = parse_UncheckedRfX;
      var write_BrtWsDim = write_UncheckedRfX;
      function parse_BrtWsFmtInfo() {
      }
      function parse_BrtWsProp(data, length) {
        var z = {};
        var f = data[data.l];
        ++data.l;
        z.above = !(f & 64);
        z.left = !(f & 128);
        data.l += 18;
        z.name = parse_XLSBCodeName(data, length - 19);
        return z;
      }
      function write_BrtWsProp(str, outl, o) {
        if (o == null) o = new_buf(84 + 4 * str.length);
        var f = 192;
        if (outl) {
          if (outl.above) f &= ~64;
          if (outl.left) f &= ~128;
        }
        o.write_shift(1, f);
        for (var i = 1; i < 3; ++i) o.write_shift(1, 0);
        write_BrtColor({ auto: 1 }, o);
        o.write_shift(-4, -1);
        o.write_shift(-4, -1);
        write_XLSBCodeName(str, o);
        return o.slice(0, o.l);
      }
      function parse_BrtCellBlank(data) {
        var cell = parse_XLSBCell(data);
        return [cell];
      }
      function write_BrtCellBlank(cell, ncell, o) {
        if (o == null) o = new_buf(8);
        return write_XLSBCell(ncell, o);
      }
      function parse_BrtShortBlank(data) {
        var cell = parse_XLSBShortCell(data);
        return [cell];
      }
      function write_BrtShortBlank(cell, ncell, o) {
        if (o == null) o = new_buf(4);
        return write_XLSBShortCell(ncell, o);
      }
      function parse_BrtCellBool(data) {
        var cell = parse_XLSBCell(data);
        var fBool = data.read_shift(1);
        return [cell, fBool, "b"];
      }
      function write_BrtCellBool(cell, ncell, o) {
        if (o == null) o = new_buf(9);
        write_XLSBCell(ncell, o);
        o.write_shift(1, cell.v ? 1 : 0);
        return o;
      }
      function parse_BrtShortBool(data) {
        var cell = parse_XLSBShortCell(data);
        var fBool = data.read_shift(1);
        return [cell, fBool, "b"];
      }
      function write_BrtShortBool(cell, ncell, o) {
        if (o == null) o = new_buf(5);
        write_XLSBShortCell(ncell, o);
        o.write_shift(1, cell.v ? 1 : 0);
        return o;
      }
      function parse_BrtCellError(data) {
        var cell = parse_XLSBCell(data);
        var bError = data.read_shift(1);
        return [cell, bError, "e"];
      }
      function write_BrtCellError(cell, ncell, o) {
        if (o == null) o = new_buf(9);
        write_XLSBCell(ncell, o);
        o.write_shift(1, cell.v);
        return o;
      }
      function parse_BrtShortError(data) {
        var cell = parse_XLSBShortCell(data);
        var bError = data.read_shift(1);
        return [cell, bError, "e"];
      }
      function write_BrtShortError(cell, ncell, o) {
        if (o == null) o = new_buf(8);
        write_XLSBShortCell(ncell, o);
        o.write_shift(1, cell.v);
        o.write_shift(2, 0);
        o.write_shift(1, 0);
        return o;
      }
      function parse_BrtCellIsst(data) {
        var cell = parse_XLSBCell(data);
        var isst = data.read_shift(4);
        return [cell, isst, "s"];
      }
      function write_BrtCellIsst(cell, ncell, o) {
        if (o == null) o = new_buf(12);
        write_XLSBCell(ncell, o);
        o.write_shift(4, ncell.v);
        return o;
      }
      function parse_BrtShortIsst(data) {
        var cell = parse_XLSBShortCell(data);
        var isst = data.read_shift(4);
        return [cell, isst, "s"];
      }
      function write_BrtShortIsst(cell, ncell, o) {
        if (o == null) o = new_buf(8);
        write_XLSBShortCell(ncell, o);
        o.write_shift(4, ncell.v);
        return o;
      }
      function parse_BrtCellReal(data) {
        var cell = parse_XLSBCell(data);
        var value = parse_Xnum(data);
        return [cell, value, "n"];
      }
      function write_BrtCellReal(cell, ncell, o) {
        if (o == null) o = new_buf(16);
        write_XLSBCell(ncell, o);
        write_Xnum(cell.v, o);
        return o;
      }
      function parse_BrtShortReal(data) {
        var cell = parse_XLSBShortCell(data);
        var value = parse_Xnum(data);
        return [cell, value, "n"];
      }
      function write_BrtShortReal(cell, ncell, o) {
        if (o == null) o = new_buf(12);
        write_XLSBShortCell(ncell, o);
        write_Xnum(cell.v, o);
        return o;
      }
      function parse_BrtCellRk(data) {
        var cell = parse_XLSBCell(data);
        var value = parse_RkNumber(data);
        return [cell, value, "n"];
      }
      function write_BrtCellRk(cell, ncell, o) {
        if (o == null) o = new_buf(12);
        write_XLSBCell(ncell, o);
        write_RkNumber(cell.v, o);
        return o;
      }
      function parse_BrtShortRk(data) {
        var cell = parse_XLSBShortCell(data);
        var value = parse_RkNumber(data);
        return [cell, value, "n"];
      }
      function write_BrtShortRk(cell, ncell, o) {
        if (o == null) o = new_buf(8);
        write_XLSBShortCell(ncell, o);
        write_RkNumber(cell.v, o);
        return o;
      }
      function parse_BrtCellRString(data) {
        var cell = parse_XLSBCell(data);
        var value = parse_RichStr(data);
        return [cell, value, "is"];
      }
      function parse_BrtCellSt(data) {
        var cell = parse_XLSBCell(data);
        var value = parse_XLWideString(data);
        return [cell, value, "str"];
      }
      function write_BrtCellSt(cell, ncell, o) {
        if (o == null) o = new_buf(12 + 4 * cell.v.length);
        write_XLSBCell(ncell, o);
        write_XLWideString(cell.v, o);
        return o.length > o.l ? o.slice(0, o.l) : o;
      }
      function parse_BrtShortSt(data) {
        var cell = parse_XLSBShortCell(data);
        var value = parse_XLWideString(data);
        return [cell, value, "str"];
      }
      function write_BrtShortSt(cell, ncell, o) {
        if (o == null) o = new_buf(8 + 4 * cell.v.length);
        write_XLSBShortCell(ncell, o);
        write_XLWideString(cell.v, o);
        return o.length > o.l ? o.slice(0, o.l) : o;
      }
      function parse_BrtFmlaBool(data, length, opts) {
        var end = data.l + length;
        var cell = parse_XLSBCell(data);
        cell.r = opts["!row"];
        var value = data.read_shift(1);
        var o = [cell, value, "b"];
        if (opts.cellFormula) {
          data.l += 2;
          var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);
          o[3] = stringify_formula(formula, null, cell, opts.supbooks, opts);
        } else data.l = end;
        return o;
      }
      function parse_BrtFmlaError(data, length, opts) {
        var end = data.l + length;
        var cell = parse_XLSBCell(data);
        cell.r = opts["!row"];
        var value = data.read_shift(1);
        var o = [cell, value, "e"];
        if (opts.cellFormula) {
          data.l += 2;
          var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);
          o[3] = stringify_formula(formula, null, cell, opts.supbooks, opts);
        } else data.l = end;
        return o;
      }
      function parse_BrtFmlaNum(data, length, opts) {
        var end = data.l + length;
        var cell = parse_XLSBCell(data);
        cell.r = opts["!row"];
        var value = parse_Xnum(data);
        var o = [cell, value, "n"];
        if (opts.cellFormula) {
          data.l += 2;
          var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);
          o[3] = stringify_formula(formula, null, cell, opts.supbooks, opts);
        } else data.l = end;
        return o;
      }
      function parse_BrtFmlaString(data, length, opts) {
        var end = data.l + length;
        var cell = parse_XLSBCell(data);
        cell.r = opts["!row"];
        var value = parse_XLWideString(data);
        var o = [cell, value, "str"];
        if (opts.cellFormula) {
          data.l += 2;
          var formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);
          o[3] = stringify_formula(formula, null, cell, opts.supbooks, opts);
        } else data.l = end;
        return o;
      }
      var parse_BrtMergeCell = parse_UncheckedRfX;
      var write_BrtMergeCell = write_UncheckedRfX;
      function write_BrtBeginMergeCells(cnt, o) {
        if (o == null) o = new_buf(4);
        o.write_shift(4, cnt);
        return o;
      }
      function parse_BrtHLink(data, length) {
        var end = data.l + length;
        var rfx = parse_UncheckedRfX(data, 16);
        var relId = parse_XLNullableWideString(data);
        var loc = parse_XLWideString(data);
        var tooltip = parse_XLWideString(data);
        var display = parse_XLWideString(data);
        data.l = end;
        var o = { rfx, relId, loc, display };
        if (tooltip) o.Tooltip = tooltip;
        return o;
      }
      function write_BrtHLink(l, rId) {
        var o = new_buf(50 + 4 * (l[1].Target.length + (l[1].Tooltip || "").length));
        write_UncheckedRfX({ s: decode_cell(l[0]), e: decode_cell(l[0]) }, o);
        write_RelID("rId" + rId, o);
        var locidx = l[1].Target.indexOf("#");
        var loc = locidx == -1 ? "" : l[1].Target.slice(locidx + 1);
        write_XLWideString(loc || "", o);
        write_XLWideString(l[1].Tooltip || "", o);
        write_XLWideString("", o);
        return o.slice(0, o.l);
      }
      function parse_BrtPane() {
      }
      function parse_BrtArrFmla(data, length, opts) {
        var end = data.l + length;
        var rfx = parse_RfX(data, 16);
        var fAlwaysCalc = data.read_shift(1);
        var o = [rfx];
        o[2] = fAlwaysCalc;
        if (opts.cellFormula) {
          var formula = parse_XLSBArrayParsedFormula(data, end - data.l, opts);
          o[1] = formula;
        } else data.l = end;
        return o;
      }
      function parse_BrtShrFmla(data, length, opts) {
        var end = data.l + length;
        var rfx = parse_UncheckedRfX(data, 16);
        var o = [rfx];
        if (opts.cellFormula) {
          var formula = parse_XLSBSharedParsedFormula(data, end - data.l, opts);
          o[1] = formula;
          data.l = end;
        } else data.l = end;
        return o;
      }
      function write_BrtColInfo(C, col, o) {
        if (o == null) o = new_buf(18);
        var p = col_obj_w(C, col);
        o.write_shift(-4, C);
        o.write_shift(-4, C);
        o.write_shift(4, (p.width || 10) * 256);
        o.write_shift(
          4,
          0
          /*ixfe*/
        );
        var flags = 0;
        if (col.hidden) flags |= 1;
        if (typeof p.width == "number") flags |= 2;
        if (col.level) flags |= col.level << 8;
        o.write_shift(2, flags);
        return o;
      }
      var BrtMarginKeys = ["left", "right", "top", "bottom", "header", "footer"];
      function parse_BrtMargins(data) {
        var margins = {};
        BrtMarginKeys.forEach(function(k) {
          margins[k] = parse_Xnum(data, 8);
        });
        return margins;
      }
      function write_BrtMargins(margins, o) {
        if (o == null) o = new_buf(6 * 8);
        default_margins(margins);
        BrtMarginKeys.forEach(function(k) {
          write_Xnum(margins[k], o);
        });
        return o;
      }
      function parse_BrtBeginWsView(data) {
        var f = data.read_shift(2);
        data.l += 28;
        return { RTL: f & 32 };
      }
      function write_BrtBeginWsView(ws, Workbook, o) {
        if (o == null) o = new_buf(30);
        var f = 924;
        if ((((Workbook || {}).Views || [])[0] || {}).RTL) f |= 32;
        o.write_shift(2, f);
        o.write_shift(4, 0);
        o.write_shift(4, 0);
        o.write_shift(4, 0);
        o.write_shift(1, 0);
        o.write_shift(1, 0);
        o.write_shift(2, 0);
        o.write_shift(2, 100);
        o.write_shift(2, 0);
        o.write_shift(2, 0);
        o.write_shift(2, 0);
        o.write_shift(4, 0);
        return o;
      }
      function write_BrtCellIgnoreEC(ref) {
        var o = new_buf(24);
        o.write_shift(4, 4);
        o.write_shift(4, 1);
        write_UncheckedRfX(ref, o);
        return o;
      }
      function write_BrtSheetProtection(sp, o) {
        if (o == null) o = new_buf(16 * 4 + 2);
        o.write_shift(2, sp.password ? crypto_CreatePasswordVerifier_Method1(sp.password) : 0);
        o.write_shift(4, 1);
        [
          ["objects", false],
          // fObjects
          ["scenarios", false],
          // fScenarios
          ["formatCells", true],
          // fFormatCells
          ["formatColumns", true],
          // fFormatColumns
          ["formatRows", true],
          // fFormatRows
          ["insertColumns", true],
          // fInsertColumns
          ["insertRows", true],
          // fInsertRows
          ["insertHyperlinks", true],
          // fInsertHyperlinks
          ["deleteColumns", true],
          // fDeleteColumns
          ["deleteRows", true],
          // fDeleteRows
          ["selectLockedCells", false],
          // fSelLockedCells
          ["sort", true],
          // fSort
          ["autoFilter", true],
          // fAutoFilter
          ["pivotTables", true],
          // fPivotTables
          ["selectUnlockedCells", false]
          // fSelUnlockedCells
        ].forEach(function(n) {
          if (n[1]) o.write_shift(4, sp[n[0]] != null && !sp[n[0]] ? 1 : 0);
          else o.write_shift(4, sp[n[0]] != null && sp[n[0]] ? 0 : 1);
        });
        return o;
      }
      function parse_BrtDVal() {
      }
      function parse_BrtDVal14() {
      }
      function parse_ws_bin(data, _opts, idx, rels, wb, themes, styles) {
        if (!data) return data;
        var opts = _opts || {};
        if (!rels) rels = { "!id": {} };
        if (DENSE != null && opts.dense == null) opts.dense = DENSE;
        var s = opts.dense ? [] : {};
        var ref;
        var refguess = { s: { r: 2e6, c: 2e6 }, e: { r: 0, c: 0 } };
        var state = [];
        var pass = false, end = false;
        var row, p, cf, R, C, addr, sstr, rr, cell;
        var merges = [];
        opts.biff = 12;
        opts["!row"] = 0;
        var ai = 0, af = false;
        var arrayf = [];
        var sharedf = {};
        var supbooks = opts.supbooks || wb.supbooks || [[]];
        supbooks.sharedf = sharedf;
        supbooks.arrayf = arrayf;
        supbooks.SheetNames = wb.SheetNames || wb.Sheets.map(function(x) {
          return x.name;
        });
        if (!opts.supbooks) {
          opts.supbooks = supbooks;
          if (wb.Names) for (var i = 0; i < wb.Names.length; ++i) supbooks[0][i + 1] = wb.Names[i];
        }
        var colinfo = [], rowinfo = [];
        var seencol = false;
        XLSBRecordEnum[16] = { n: "BrtShortReal", f: parse_BrtShortReal };
        var cm, vm;
        recordhopper(data, function ws_parse(val, RR, RT) {
          if (end) return;
          switch (RT) {
            case 148:
              ref = val;
              break;
            case 0:
              row = val;
              if (opts.sheetRows && opts.sheetRows <= row.r) end = true;
              rr = encode_row(R = row.r);
              opts["!row"] = row.r;
              if (val.hidden || val.hpt || val.level != null) {
                if (val.hpt) val.hpx = pt2px(val.hpt);
                rowinfo[val.r] = val;
              }
              break;
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:
            case 10:
            case 11:
            case 13:
            case 14:
            case 15:
            case 16:
            case 17:
            case 18:
            case 62:
              p = { t: val[2] };
              switch (val[2]) {
                case "n":
                  p.v = val[1];
                  break;
                case "s":
                  sstr = strs[val[1]];
                  p.v = sstr.t;
                  p.r = sstr.r;
                  break;
                case "b":
                  p.v = val[1] ? true : false;
                  break;
                case "e":
                  p.v = val[1];
                  if (opts.cellText !== false) p.w = BErr[p.v];
                  break;
                case "str":
                  p.t = "s";
                  p.v = val[1];
                  break;
                case "is":
                  p.t = "s";
                  p.v = val[1].t;
                  break;
              }
              if (cf = styles.CellXf[val[0].iStyleRef]) safe_format(p, cf.numFmtId, null, opts, themes, styles);
              C = val[0].c == -1 ? C + 1 : val[0].c;
              if (opts.dense) {
                if (!s[R]) s[R] = [];
                s[R][C] = p;
              } else s[encode_col(C) + rr] = p;
              if (opts.cellFormula) {
                af = false;
                for (ai = 0; ai < arrayf.length; ++ai) {
                  var aii = arrayf[ai];
                  if (row.r >= aii[0].s.r && row.r <= aii[0].e.r) {
                    if (C >= aii[0].s.c && C <= aii[0].e.c) {
                      p.F = encode_range(aii[0]);
                      af = true;
                    }
                  }
                }
                if (!af && val.length > 3) p.f = val[3];
              }
              if (refguess.s.r > row.r) refguess.s.r = row.r;
              if (refguess.s.c > C) refguess.s.c = C;
              if (refguess.e.r < row.r) refguess.e.r = row.r;
              if (refguess.e.c < C) refguess.e.c = C;
              if (opts.cellDates && cf && p.t == "n" && fmt_is_date(table_fmt[cf.numFmtId])) {
                var _d = SSF_parse_date_code(p.v);
                if (_d) {
                  p.t = "d";
                  p.v = new Date(_d.y, _d.m - 1, _d.d, _d.H, _d.M, _d.S, _d.u);
                }
              }
              if (cm) {
                if (cm.type == "XLDAPR") p.D = true;
                cm = void 0;
              }
              if (vm) vm = void 0;
              break;
            case 1:
            case 12:
              if (!opts.sheetStubs || pass) break;
              p = { t: "z", v: void 0 };
              C = val[0].c == -1 ? C + 1 : val[0].c;
              if (opts.dense) {
                if (!s[R]) s[R] = [];
                s[R][C] = p;
              } else s[encode_col(C) + rr] = p;
              if (refguess.s.r > row.r) refguess.s.r = row.r;
              if (refguess.s.c > C) refguess.s.c = C;
              if (refguess.e.r < row.r) refguess.e.r = row.r;
              if (refguess.e.c < C) refguess.e.c = C;
              if (cm) {
                if (cm.type == "XLDAPR") p.D = true;
                cm = void 0;
              }
              if (vm) vm = void 0;
              break;
            case 176:
              merges.push(val);
              break;
            case 49:
              {
                cm = ((opts.xlmeta || {}).Cell || [])[val - 1];
              }
              break;
            case 494:
              var rel = rels["!id"][val.relId];
              if (rel) {
                val.Target = rel.Target;
                if (val.loc) val.Target += "#" + val.loc;
                val.Rel = rel;
              } else if (val.relId == "") {
                val.Target = "#" + val.loc;
              }
              for (R = val.rfx.s.r; R <= val.rfx.e.r; ++R) for (C = val.rfx.s.c; C <= val.rfx.e.c; ++C) {
                if (opts.dense) {
                  if (!s[R]) s[R] = [];
                  if (!s[R][C]) s[R][C] = { t: "z", v: void 0 };
                  s[R][C].l = val;
                } else {
                  addr = encode_cell({ c: C, r: R });
                  if (!s[addr]) s[addr] = { t: "z", v: void 0 };
                  s[addr].l = val;
                }
              }
              break;
            case 426:
              if (!opts.cellFormula) break;
              arrayf.push(val);
              cell = opts.dense ? s[R][C] : s[encode_col(C) + rr];
              cell.f = stringify_formula(val[1], refguess, { r: row.r, c: C }, supbooks, opts);
              cell.F = encode_range(val[0]);
              break;
            case 427:
              if (!opts.cellFormula) break;
              sharedf[encode_cell(val[0].s)] = val[1];
              cell = opts.dense ? s[R][C] : s[encode_col(C) + rr];
              cell.f = stringify_formula(val[1], refguess, { r: row.r, c: C }, supbooks, opts);
              break;
            case 60:
              if (!opts.cellStyles) break;
              while (val.e >= val.s) {
                colinfo[val.e--] = { width: val.w / 256, hidden: !!(val.flags & 1), level: val.level };
                if (!seencol) {
                  seencol = true;
                  find_mdw_colw(val.w / 256);
                }
                process_col(colinfo[val.e + 1]);
              }
              break;
            case 161:
              s["!autofilter"] = { ref: encode_range(val) };
              break;
            case 476:
              s["!margins"] = val;
              break;
            case 147:
              if (!wb.Sheets[idx]) wb.Sheets[idx] = {};
              if (val.name) wb.Sheets[idx].CodeName = val.name;
              if (val.above || val.left) s["!outline"] = { above: val.above, left: val.left };
              break;
            case 137:
              if (!wb.Views) wb.Views = [{}];
              if (!wb.Views[0]) wb.Views[0] = {};
              if (val.RTL) wb.Views[0].RTL = true;
              break;
            case 485:
              break;
            case 64:
            case 1053:
              break;
            case 151:
              break;
            case 152:
            case 175:
            case 644:
            case 625:
            case 562:
            case 396:
            case 1112:
            case 1146:
            case 471:
            case 1050:
            case 649:
            case 1105:
            case 589:
            case 607:
            case 564:
            case 1055:
            case 168:
            case 174:
            case 1180:
            case 499:
            case 507:
            case 550:
            case 171:
            case 167:
            case 1177:
            case 169:
            case 1181:
            case 551:
            case 552:
            case 661:
            case 639:
            case 478:
            case 537:
            case 477:
            case 536:
            case 1103:
            case 680:
            case 1104:
            case 1024:
            case 663:
            case 535:
            case 678:
            case 504:
            case 1043:
            case 428:
            case 170:
            case 3072:
            case 50:
            case 2070:
            case 1045:
              break;
            case 35:
              pass = true;
              break;
            case 36:
              pass = false;
              break;
            case 37:
              state.push(RT);
              pass = true;
              break;
            case 38:
              state.pop();
              pass = false;
              break;
            default:
              if (RR.T) {
              } else if (!pass || opts.WTF) throw new Error("Unexpected record 0x" + RT.toString(16));
          }
        }, opts);
        delete opts.supbooks;
        delete opts["!row"];
        if (!s["!ref"] && (refguess.s.r < 2e6 || ref && (ref.e.r > 0 || ref.e.c > 0 || ref.s.r > 0 || ref.s.c > 0))) s["!ref"] = encode_range(ref || refguess);
        if (opts.sheetRows && s["!ref"]) {
          var tmpref = safe_decode_range(s["!ref"]);
          if (opts.sheetRows <= +tmpref.e.r) {
            tmpref.e.r = opts.sheetRows - 1;
            if (tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;
            if (tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;
            if (tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;
            if (tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;
            s["!fullref"] = s["!ref"];
            s["!ref"] = encode_range(tmpref);
          }
        }
        if (merges.length > 0) s["!merges"] = merges;
        if (colinfo.length > 0) s["!cols"] = colinfo;
        if (rowinfo.length > 0) s["!rows"] = rowinfo;
        return s;
      }
      function write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen) {
        if (cell.v === void 0) return false;
        var vv = "";
        switch (cell.t) {
          case "b":
            vv = cell.v ? "1" : "0";
            break;
          case "d":
            cell = dup(cell);
            cell.z = cell.z || table_fmt[14];
            cell.v = datenum(parseDate(cell.v));
            cell.t = "n";
            break;
          case "n":
          case "e":
            vv = "" + cell.v;
            break;
          default:
            vv = cell.v;
            break;
        }
        var o = { r: R, c: C };
        o.s = get_cell_style(opts.cellXfs, cell, opts);
        if (cell.l) ws["!links"].push([encode_cell(o), cell.l]);
        if (cell.c) ws["!comments"].push([encode_cell(o), cell.c]);
        switch (cell.t) {
          case "s":
          case "str":
            if (opts.bookSST) {
              vv = get_sst_id(opts.Strings, cell.v, opts.revStrings);
              o.t = "s";
              o.v = vv;
              if (last_seen) write_record(ba, 18, write_BrtShortIsst(cell, o));
              else write_record(ba, 7, write_BrtCellIsst(cell, o));
            } else {
              o.t = "str";
              if (last_seen) write_record(ba, 17, write_BrtShortSt(cell, o));
              else write_record(ba, 6, write_BrtCellSt(cell, o));
            }
            return true;
          case "n":
            if (cell.v == (cell.v | 0) && cell.v > -1e3 && cell.v < 1e3) {
              if (last_seen) write_record(ba, 13, write_BrtShortRk(cell, o));
              else write_record(ba, 2, write_BrtCellRk(cell, o));
            } else {
              if (last_seen) write_record(ba, 16, write_BrtShortReal(cell, o));
              else write_record(ba, 5, write_BrtCellReal(cell, o));
            }
            return true;
          case "b":
            o.t = "b";
            if (last_seen) write_record(ba, 15, write_BrtShortBool(cell, o));
            else write_record(ba, 4, write_BrtCellBool(cell, o));
            return true;
          case "e":
            o.t = "e";
            if (last_seen) write_record(ba, 14, write_BrtShortError(cell, o));
            else write_record(ba, 3, write_BrtCellError(cell, o));
            return true;
        }
        if (last_seen) write_record(ba, 12, write_BrtShortBlank(cell, o));
        else write_record(ba, 1, write_BrtCellBlank(cell, o));
        return true;
      }
      function write_CELLTABLE(ba, ws, idx, opts) {
        var range = safe_decode_range(ws["!ref"] || "A1"), ref, rr = "", cols = [];
        write_record(
          ba,
          145
          /* BrtBeginSheetData */
        );
        var dense = Array.isArray(ws);
        var cap = range.e.r;
        if (ws["!rows"]) cap = Math.max(range.e.r, ws["!rows"].length - 1);
        for (var R = range.s.r; R <= cap; ++R) {
          rr = encode_row(R);
          write_row_header(ba, ws, range, R);
          var last_seen = false;
          if (R <= range.e.r) for (var C = range.s.c; C <= range.e.c; ++C) {
            if (R === range.s.r) cols[C] = encode_col(C);
            ref = cols[C] + rr;
            var cell = dense ? (ws[R] || [])[C] : ws[ref];
            if (!cell) {
              last_seen = false;
              continue;
            }
            last_seen = write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen);
          }
        }
        write_record(
          ba,
          146
          /* BrtEndSheetData */
        );
      }
      function write_MERGECELLS(ba, ws) {
        if (!ws || !ws["!merges"]) return;
        write_record(ba, 177, write_BrtBeginMergeCells(ws["!merges"].length));
        ws["!merges"].forEach(function(m) {
          write_record(ba, 176, write_BrtMergeCell(m));
        });
        write_record(
          ba,
          178
          /* BrtEndMergeCells */
        );
      }
      function write_COLINFOS(ba, ws) {
        if (!ws || !ws["!cols"]) return;
        write_record(
          ba,
          390
          /* BrtBeginColInfos */
        );
        ws["!cols"].forEach(function(m, i) {
          if (m) write_record(ba, 60, write_BrtColInfo(i, m));
        });
        write_record(
          ba,
          391
          /* BrtEndColInfos */
        );
      }
      function write_IGNOREECS(ba, ws) {
        if (!ws || !ws["!ref"]) return;
        write_record(
          ba,
          648
          /* BrtBeginCellIgnoreECs */
        );
        write_record(ba, 649, write_BrtCellIgnoreEC(safe_decode_range(ws["!ref"])));
        write_record(
          ba,
          650
          /* BrtEndCellIgnoreECs */
        );
      }
      function write_HLINKS(ba, ws, rels) {
        ws["!links"].forEach(function(l) {
          if (!l[1].Target) return;
          var rId = add_rels(rels, -1, l[1].Target.replace(/#.*$/, ""), RELS.HLINK);
          write_record(ba, 494, write_BrtHLink(l, rId));
        });
        delete ws["!links"];
      }
      function write_LEGACYDRAWING(ba, ws, idx, rels) {
        if (ws["!comments"].length > 0) {
          var rId = add_rels(rels, -1, "../drawings/vmlDrawing" + (idx + 1) + ".vml", RELS.VML);
          write_record(ba, 551, write_RelID("rId" + rId));
          ws["!legacy"] = rId;
        }
      }
      function write_AUTOFILTER(ba, ws, wb, idx) {
        if (!ws["!autofilter"]) return;
        var data = ws["!autofilter"];
        var ref = typeof data.ref === "string" ? data.ref : encode_range(data.ref);
        if (!wb.Workbook) wb.Workbook = { Sheets: [] };
        if (!wb.Workbook.Names) wb.Workbook.Names = [];
        var names = wb.Workbook.Names;
        var range = decode_range(ref);
        if (range.s.r == range.e.r) {
          range.e.r = decode_range(ws["!ref"]).e.r;
          ref = encode_range(range);
        }
        for (var i = 0; i < names.length; ++i) {
          var name = names[i];
          if (name.Name != "_xlnm._FilterDatabase") continue;
          if (name.Sheet != idx) continue;
          name.Ref = "'" + wb.SheetNames[idx] + "'!" + ref;
          break;
        }
        if (i == names.length) names.push({ Name: "_xlnm._FilterDatabase", Sheet: idx, Ref: "'" + wb.SheetNames[idx] + "'!" + ref });
        write_record(ba, 161, write_UncheckedRfX(safe_decode_range(ref)));
        write_record(
          ba,
          162
          /* BrtEndAFilter */
        );
      }
      function write_WSVIEWS2(ba, ws, Workbook) {
        write_record(
          ba,
          133
          /* BrtBeginWsViews */
        );
        {
          write_record(ba, 137, write_BrtBeginWsView(ws, Workbook));
          write_record(
            ba,
            138
            /* BrtEndWsView */
          );
        }
        write_record(
          ba,
          134
          /* BrtEndWsViews */
        );
      }
      function write_WSFMTINFO() {
      }
      function write_SHEETPROTECT(ba, ws) {
        if (!ws["!protect"]) return;
        write_record(ba, 535, write_BrtSheetProtection(ws["!protect"]));
      }
      function write_ws_bin(idx, opts, wb, rels) {
        var ba = buf_array();
        var s = wb.SheetNames[idx], ws = wb.Sheets[s] || {};
        var c = s;
        try {
          if (wb && wb.Workbook) c = wb.Workbook.Sheets[idx].CodeName || c;
        } catch (e) {
        }
        var r = safe_decode_range(ws["!ref"] || "A1");
        if (r.e.c > 16383 || r.e.r > 1048575) {
          if (opts.WTF) throw new Error("Range " + (ws["!ref"] || "A1") + " exceeds format limit A1:XFD1048576");
          r.e.c = Math.min(r.e.c, 16383);
          r.e.r = Math.min(r.e.c, 1048575);
        }
        ws["!links"] = [];
        ws["!comments"] = [];
        write_record(
          ba,
          129
          /* BrtBeginSheet */
        );
        if (wb.vbaraw || ws["!outline"]) write_record(ba, 147, write_BrtWsProp(c, ws["!outline"]));
        write_record(ba, 148, write_BrtWsDim(r));
        write_WSVIEWS2(ba, ws, wb.Workbook);
        write_WSFMTINFO(ba, ws);
        write_COLINFOS(ba, ws, idx, opts, wb);
        write_CELLTABLE(ba, ws, idx, opts, wb);
        write_SHEETPROTECT(ba, ws);
        write_AUTOFILTER(ba, ws, wb, idx);
        write_MERGECELLS(ba, ws);
        write_HLINKS(ba, ws, rels);
        if (ws["!margins"]) write_record(ba, 476, write_BrtMargins(ws["!margins"]));
        if (!opts || opts.ignoreEC || opts.ignoreEC == void 0) write_IGNOREECS(ba, ws);
        write_LEGACYDRAWING(ba, ws, idx, rels);
        write_record(
          ba,
          130
          /* BrtEndSheet */
        );
        return ba.end();
      }
      function parse_Cache(data) {
        var col = [];
        var num = data.match(/^<c:numCache>/);
        var f;
        (data.match(/<c:pt idx="(\d*)">(.*?)<\/c:pt>/mg) || []).forEach(function(pt) {
          var q = pt.match(/<c:pt idx="(\d*?)"><c:v>(.*)<\/c:v><\/c:pt>/);
          if (!q) return;
          col[+q[1]] = num ? +q[2] : q[2];
        });
        var nf = unescapexml((data.match(/<c:formatCode>([\s\S]*?)<\/c:formatCode>/) || ["", "General"])[1]);
        (data.match(/<c:f>(.*?)<\/c:f>/mg) || []).forEach(function(F) {
          f = F.replace(/<.*?>/g, "");
        });
        return [col, nf, f];
      }
      function parse_chart(data, name, opts, rels, wb, csheet) {
        var cs = csheet || { "!type": "chart" };
        if (!data) return csheet;
        var C = 0, R = 0, col = "A";
        var refguess = { s: { r: 2e6, c: 2e6 }, e: { r: 0, c: 0 } };
        (data.match(/<c:numCache>[\s\S]*?<\/c:numCache>/gm) || []).forEach(function(nc) {
          var cache = parse_Cache(nc);
          refguess.s.r = refguess.s.c = 0;
          refguess.e.c = C;
          col = encode_col(C);
          cache[0].forEach(function(n, i) {
            cs[col + encode_row(i)] = { t: "n", v: n, z: cache[1] };
            R = i;
          });
          if (refguess.e.r < R) refguess.e.r = R;
          ++C;
        });
        if (C > 0) cs["!ref"] = encode_range(refguess);
        return cs;
      }
      function parse_cs_xml(data, opts, idx, rels, wb) {
        if (!data) return data;
        if (!rels) rels = { "!id": {} };
        var s = { "!type": "chart", "!drawel": null, "!rel": "" };
        var m;
        var sheetPr = data.match(sheetprregex);
        if (sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);
        if (m = data.match(/drawing r:id="(.*?)"/)) s["!rel"] = m[1];
        if (rels["!id"][s["!rel"]]) s["!drawel"] = rels["!id"][s["!rel"]];
        return s;
      }
      function write_cs_xml(idx, opts, wb, rels) {
        var o = [XML_HEADER, writextag("chartsheet", null, {
          "xmlns": XMLNS_main[0],
          "xmlns:r": XMLNS.r
        })];
        o[o.length] = writextag("drawing", null, { "r:id": "rId1" });
        add_rels(rels, -1, "../drawings/drawing" + (idx + 1) + ".xml", RELS.DRAW);
        if (o.length > 2) {
          o[o.length] = "</chartsheet>";
          o[1] = o[1].replace("/>", ">");
        }
        return o.join("");
      }
      function parse_BrtCsProp(data, length) {
        data.l += 10;
        var name = parse_XLWideString(data, length - 10);
        return { name };
      }
      function parse_cs_bin(data, opts, idx, rels, wb) {
        if (!data) return data;
        if (!rels) rels = { "!id": {} };
        var s = { "!type": "chart", "!drawel": null, "!rel": "" };
        var state = [];
        var pass = false;
        recordhopper(data, function cs_parse(val, R, RT) {
          switch (RT) {
            case 550:
              s["!rel"] = val;
              break;
            case 651:
              if (!wb.Sheets[idx]) wb.Sheets[idx] = {};
              if (val.name) wb.Sheets[idx].CodeName = val.name;
              break;
            case 562:
            case 652:
            case 669:
            case 679:
            case 551:
            case 552:
            case 476:
            case 3072:
              break;
            case 35:
              pass = true;
              break;
            case 36:
              pass = false;
              break;
            case 37:
              state.push(RT);
              break;
            case 38:
              state.pop();
              break;
            default:
              if (R.T > 0) state.push(RT);
              else if (R.T < 0) state.pop();
              else if (!pass || opts.WTF) throw new Error("Unexpected record 0x" + RT.toString(16));
          }
        }, opts);
        if (rels["!id"][s["!rel"]]) s["!drawel"] = rels["!id"][s["!rel"]];
        return s;
      }
      function write_cs_bin() {
        var ba = buf_array();
        write_record(
          ba,
          129
          /* BrtBeginSheet */
        );
        write_record(
          ba,
          130
          /* BrtEndSheet */
        );
        return ba.end();
      }
      var WBPropsDef = [
        ["allowRefreshQuery", false, "bool"],
        ["autoCompressPictures", true, "bool"],
        ["backupFile", false, "bool"],
        ["checkCompatibility", false, "bool"],
        ["CodeName", ""],
        ["date1904", false, "bool"],
        ["defaultThemeVersion", 0, "int"],
        ["filterPrivacy", false, "bool"],
        ["hidePivotFieldList", false, "bool"],
        ["promptedSolutions", false, "bool"],
        ["publishItems", false, "bool"],
        ["refreshAllConnections", false, "bool"],
        ["saveExternalLinkValues", true, "bool"],
        ["showBorderUnselectedTables", true, "bool"],
        ["showInkAnnotation", true, "bool"],
        ["showObjects", "all"],
        ["showPivotChartFilter", false, "bool"],
        ["updateLinks", "userSet"]
      ];
      var WBViewDef = [
        ["activeTab", 0, "int"],
        ["autoFilterDateGrouping", true, "bool"],
        ["firstSheet", 0, "int"],
        ["minimized", false, "bool"],
        ["showHorizontalScroll", true, "bool"],
        ["showSheetTabs", true, "bool"],
        ["showVerticalScroll", true, "bool"],
        ["tabRatio", 600, "int"],
        ["visibility", "visible"]
        //window{Height,Width}, {x,y}Window
      ];
      var SheetDef = [
        //['state', 'visible']
      ];
      var CalcPrDef = [
        ["calcCompleted", "true"],
        ["calcMode", "auto"],
        ["calcOnSave", "true"],
        ["concurrentCalc", "true"],
        ["fullCalcOnLoad", "false"],
        ["fullPrecision", "true"],
        ["iterate", "false"],
        ["iterateCount", "100"],
        ["iterateDelta", "0.001"],
        ["refMode", "A1"]
      ];
      function push_defaults_array(target, defaults) {
        for (var j = 0; j != target.length; ++j) {
          var w = target[j];
          for (var i = 0; i != defaults.length; ++i) {
            var z = defaults[i];
            if (w[z[0]] == null) w[z[0]] = z[1];
            else switch (z[2]) {
              case "bool":
                if (typeof w[z[0]] == "string") w[z[0]] = parsexmlbool(w[z[0]]);
                break;
              case "int":
                if (typeof w[z[0]] == "string") w[z[0]] = parseInt(w[z[0]], 10);
                break;
            }
          }
        }
      }
      function push_defaults(target, defaults) {
        for (var i = 0; i != defaults.length; ++i) {
          var z = defaults[i];
          if (target[z[0]] == null) target[z[0]] = z[1];
          else switch (z[2]) {
            case "bool":
              if (typeof target[z[0]] == "string") target[z[0]] = parsexmlbool(target[z[0]]);
              break;
            case "int":
              if (typeof target[z[0]] == "string") target[z[0]] = parseInt(target[z[0]], 10);
              break;
          }
        }
      }
      function parse_wb_defaults(wb) {
        push_defaults(wb.WBProps, WBPropsDef);
        push_defaults(wb.CalcPr, CalcPrDef);
        push_defaults_array(wb.WBView, WBViewDef);
        push_defaults_array(wb.Sheets, SheetDef);
        _ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904);
      }
      function safe1904(wb) {
        if (!wb.Workbook) return "false";
        if (!wb.Workbook.WBProps) return "false";
        return parsexmlbool(wb.Workbook.WBProps.date1904) ? "true" : "false";
      }
      var badchars = "][*?/\\".split("");
      function check_ws_name(n, safe) {
        if (n.length > 31) {
          if (safe) return false;
          throw new Error("Sheet names cannot exceed 31 chars");
        }
        var _good = true;
        badchars.forEach(function(c) {
          if (n.indexOf(c) == -1) return;
          if (!safe) throw new Error("Sheet name cannot contain : \\ / ? * [ ]");
          _good = false;
        });
        return _good;
      }
      function check_wb_names(N, S, codes) {
        N.forEach(function(n, i) {
          check_ws_name(n);
          for (var j = 0; j < i; ++j) if (n == N[j]) throw new Error("Duplicate Sheet Name: " + n);
          if (codes) {
            var cn = S && S[i] && S[i].CodeName || n;
            if (cn.charCodeAt(0) == 95 && cn.length > 22) throw new Error("Bad Code Name: Worksheet" + cn);
          }
        });
      }
      function check_wb(wb) {
        if (!wb || !wb.SheetNames || !wb.Sheets) throw new Error("Invalid Workbook");
        if (!wb.SheetNames.length) throw new Error("Workbook is empty");
        var Sheets = wb.Workbook && wb.Workbook.Sheets || [];
        check_wb_names(wb.SheetNames, Sheets, !!wb.vbaraw);
        for (var i = 0; i < wb.SheetNames.length; ++i) check_ws(wb.Sheets[wb.SheetNames[i]], wb.SheetNames[i], i);
      }
      var wbnsregex = /<\w+:workbook/;
      function parse_wb_xml(data, opts) {
        if (!data) throw new Error("Could not find file");
        var wb = { AppVersion: {}, WBProps: {}, WBView: [], Sheets: [], CalcPr: {}, Names: [], xmlns: "" };
        var pass = false, xmlns = "xmlns";
        var dname = {}, dnstart = 0;
        data.replace(tagregex, function xml_wb(x, idx) {
          var y = parsexmltag(x);
          switch (strip_ns(y[0])) {
            case "<?xml":
              break;
            case "<workbook":
              if (x.match(wbnsregex)) xmlns = "xmlns" + x.match(/<(\w+):/)[1];
              wb.xmlns = y[xmlns];
              break;
            case "</workbook>":
              break;
            case "<fileVersion":
              delete y[0];
              wb.AppVersion = y;
              break;
            case "<fileVersion/>":
            case "</fileVersion>":
              break;
            case "<fileSharing":
              break;
            case "<fileSharing/>":
              break;
            case "<workbookPr":
            case "<workbookPr/>":
              WBPropsDef.forEach(function(w) {
                if (y[w[0]] == null) return;
                switch (w[2]) {
                  case "bool":
                    wb.WBProps[w[0]] = parsexmlbool(y[w[0]]);
                    break;
                  case "int":
                    wb.WBProps[w[0]] = parseInt(y[w[0]], 10);
                    break;
                  default:
                    wb.WBProps[w[0]] = y[w[0]];
                }
              });
              if (y.codeName) wb.WBProps.CodeName = utf8read(y.codeName);
              break;
            case "</workbookPr>":
              break;
            case "<workbookProtection":
              break;
            case "<workbookProtection/>":
              break;
            case "<bookViews":
            case "<bookViews>":
            case "</bookViews>":
              break;
            case "<workbookView":
            case "<workbookView/>":
              delete y[0];
              wb.WBView.push(y);
              break;
            case "</workbookView>":
              break;
            case "<sheets":
            case "<sheets>":
            case "</sheets>":
              break;
            case "<sheet":
              switch (y.state) {
                case "hidden":
                  y.Hidden = 1;
                  break;
                case "veryHidden":
                  y.Hidden = 2;
                  break;
                default:
                  y.Hidden = 0;
              }
              delete y.state;
              y.name = unescapexml(utf8read(y.name));
              delete y[0];
              wb.Sheets.push(y);
              break;
            case "</sheet>":
              break;
            case "<functionGroups":
            case "<functionGroups/>":
              break;
            case "<functionGroup":
              break;
            case "<externalReferences":
            case "</externalReferences>":
            case "<externalReferences>":
              break;
            case "<externalReference":
              break;
            case "<definedNames/>":
              break;
            case "<definedNames>":
            case "<definedNames":
              pass = true;
              break;
            case "</definedNames>":
              pass = false;
              break;
            case "<definedName":
              {
                dname = {};
                dname.Name = utf8read(y.name);
                if (y.comment) dname.Comment = y.comment;
                if (y.localSheetId) dname.Sheet = +y.localSheetId;
                if (parsexmlbool(y.hidden || "0")) dname.Hidden = true;
                dnstart = idx + x.length;
              }
              break;
            case "</definedName>":
              {
                dname.Ref = unescapexml(utf8read(data.slice(dnstart, idx)));
                wb.Names.push(dname);
              }
              break;
            case "<definedName/>":
              break;
            case "<calcPr":
              delete y[0];
              wb.CalcPr = y;
              break;
            case "<calcPr/>":
              delete y[0];
              wb.CalcPr = y;
              break;
            case "</calcPr>":
              break;
            case "<oleSize":
              break;
            case "<customWorkbookViews>":
            case "</customWorkbookViews>":
            case "<customWorkbookViews":
              break;
            case "<customWorkbookView":
            case "</customWorkbookView>":
              break;
            case "<pivotCaches>":
            case "</pivotCaches>":
            case "<pivotCaches":
              break;
            case "<pivotCache":
              break;
            case "<smartTagPr":
            case "<smartTagPr/>":
              break;
            case "<smartTagTypes":
            case "<smartTagTypes>":
            case "</smartTagTypes>":
              break;
            case "<smartTagType":
              break;
            case "<webPublishing":
            case "<webPublishing/>":
              break;
            case "<fileRecoveryPr":
            case "<fileRecoveryPr/>":
              break;
            case "<webPublishObjects>":
            case "<webPublishObjects":
            case "</webPublishObjects>":
              break;
            case "<webPublishObject":
              break;
            case "<extLst":
            case "<extLst>":
            case "</extLst>":
            case "<extLst/>":
              break;
            case "<ext":
              pass = true;
              break;
            case "</ext>":
              pass = false;
              break;
            case "<ArchID":
              break;
            case "<AlternateContent":
            case "<AlternateContent>":
              pass = true;
              break;
            case "</AlternateContent>":
              pass = false;
              break;
            case "<revisionPtr":
              break;
            default:
              if (!pass && opts.WTF) throw new Error("unrecognized " + y[0] + " in workbook");
          }
          return x;
        });
        if (XMLNS_main.indexOf(wb.xmlns) === -1) throw new Error("Unknown Namespace: " + wb.xmlns);
        parse_wb_defaults(wb);
        return wb;
      }
      function write_wb_xml(wb) {
        var o = [XML_HEADER];
        o[o.length] = writextag("workbook", null, {
          "xmlns": XMLNS_main[0],
          //'xmlns:mx': XMLNS.mx,
          //'xmlns:s': XMLNS_main[0],
          "xmlns:r": XMLNS.r
        });
        var write_names = wb.Workbook && (wb.Workbook.Names || []).length > 0;
        var workbookPr = { codeName: "ThisWorkbook" };
        if (wb.Workbook && wb.Workbook.WBProps) {
          WBPropsDef.forEach(function(x) {
            if (wb.Workbook.WBProps[x[0]] == null) return;
            if (wb.Workbook.WBProps[x[0]] == x[1]) return;
            workbookPr[x[0]] = wb.Workbook.WBProps[x[0]];
          });
          if (wb.Workbook.WBProps.CodeName) {
            workbookPr.codeName = wb.Workbook.WBProps.CodeName;
            delete workbookPr.CodeName;
          }
        }
        o[o.length] = writextag("workbookPr", null, workbookPr);
        var sheets = wb.Workbook && wb.Workbook.Sheets || [];
        var i = 0;
        if (sheets && sheets[0] && !!sheets[0].Hidden) {
          o[o.length] = "<bookViews>";
          for (i = 0; i != wb.SheetNames.length; ++i) {
            if (!sheets[i]) break;
            if (!sheets[i].Hidden) break;
          }
          if (i == wb.SheetNames.length) i = 0;
          o[o.length] = '<workbookView firstSheet="' + i + '" activeTab="' + i + '"/>';
          o[o.length] = "</bookViews>";
        }
        o[o.length] = "<sheets>";
        for (i = 0; i != wb.SheetNames.length; ++i) {
          var sht = { name: escapexml(wb.SheetNames[i].slice(0, 31)) };
          sht.sheetId = "" + (i + 1);
          sht["r:id"] = "rId" + (i + 1);
          if (sheets[i]) switch (sheets[i].Hidden) {
            case 1:
              sht.state = "hidden";
              break;
            case 2:
              sht.state = "veryHidden";
              break;
          }
          o[o.length] = writextag("sheet", null, sht);
        }
        o[o.length] = "</sheets>";
        if (write_names) {
          o[o.length] = "<definedNames>";
          if (wb.Workbook && wb.Workbook.Names) wb.Workbook.Names.forEach(function(n) {
            var d = { name: n.Name };
            if (n.Comment) d.comment = n.Comment;
            if (n.Sheet != null) d.localSheetId = "" + n.Sheet;
            if (n.Hidden) d.hidden = "1";
            if (!n.Ref) return;
            o[o.length] = writextag("definedName", escapexml(n.Ref), d);
          });
          o[o.length] = "</definedNames>";
        }
        if (o.length > 2) {
          o[o.length] = "</workbook>";
          o[1] = o[1].replace("/>", ">");
        }
        return o.join("");
      }
      function parse_BrtBundleSh(data, length) {
        var z = {};
        z.Hidden = data.read_shift(4);
        z.iTabID = data.read_shift(4);
        z.strRelID = parse_RelID(data, length - 8);
        z.name = parse_XLWideString(data);
        return z;
      }
      function write_BrtBundleSh(data, o) {
        if (!o) o = new_buf(127);
        o.write_shift(4, data.Hidden);
        o.write_shift(4, data.iTabID);
        write_RelID(data.strRelID, o);
        write_XLWideString(data.name.slice(0, 31), o);
        return o.length > o.l ? o.slice(0, o.l) : o;
      }
      function parse_BrtWbProp(data, length) {
        var o = {};
        var flags = data.read_shift(4);
        o.defaultThemeVersion = data.read_shift(4);
        var strName = length > 8 ? parse_XLWideString(data) : "";
        if (strName.length > 0) o.CodeName = strName;
        o.autoCompressPictures = !!(flags & 65536);
        o.backupFile = !!(flags & 64);
        o.checkCompatibility = !!(flags & 4096);
        o.date1904 = !!(flags & 1);
        o.filterPrivacy = !!(flags & 8);
        o.hidePivotFieldList = !!(flags & 1024);
        o.promptedSolutions = !!(flags & 16);
        o.publishItems = !!(flags & 2048);
        o.refreshAllConnections = !!(flags & 262144);
        o.saveExternalLinkValues = !!(flags & 128);
        o.showBorderUnselectedTables = !!(flags & 4);
        o.showInkAnnotation = !!(flags & 32);
        o.showObjects = ["all", "placeholders", "none"][flags >> 13 & 3];
        o.showPivotChartFilter = !!(flags & 32768);
        o.updateLinks = ["userSet", "never", "always"][flags >> 8 & 3];
        return o;
      }
      function write_BrtWbProp(data, o) {
        if (!o) o = new_buf(72);
        var flags = 0;
        if (data) {
          if (data.filterPrivacy) flags |= 8;
        }
        o.write_shift(4, flags);
        o.write_shift(4, 0);
        write_XLSBCodeName(data && data.CodeName || "ThisWorkbook", o);
        return o.slice(0, o.l);
      }
      function parse_BrtFRTArchID$(data, length) {
        var o = {};
        data.read_shift(4);
        o.ArchID = data.read_shift(4);
        data.l += length - 8;
        return o;
      }
      function parse_BrtName(data, length, opts) {
        var end = data.l + length;
        data.l += 4;
        data.l += 1;
        var itab = data.read_shift(4);
        var name = parse_XLNameWideString(data);
        var formula = parse_XLSBNameParsedFormula(data, 0, opts);
        var comment = parse_XLNullableWideString(data);
        data.l = end;
        var out = { Name: name, Ptg: formula };
        if (itab < 268435455) out.Sheet = itab;
        if (comment) out.Comment = comment;
        return out;
      }
      function parse_wb_bin(data, opts) {
        var wb = { AppVersion: {}, WBProps: {}, WBView: [], Sheets: [], CalcPr: {}, xmlns: "" };
        var state = [];
        var pass = false;
        if (!opts) opts = {};
        opts.biff = 12;
        var Names = [];
        var supbooks = [[]];
        supbooks.SheetNames = [];
        supbooks.XTI = [];
        XLSBRecordEnum[16] = { n: "BrtFRTArchID$", f: parse_BrtFRTArchID$ };
        recordhopper(data, function hopper_wb(val, R, RT) {
          switch (RT) {
            case 156:
              supbooks.SheetNames.push(val.name);
              wb.Sheets.push(val);
              break;
            case 153:
              wb.WBProps = val;
              break;
            case 39:
              if (val.Sheet != null) opts.SID = val.Sheet;
              val.Ref = stringify_formula(val.Ptg, null, null, supbooks, opts);
              delete opts.SID;
              delete val.Ptg;
              Names.push(val);
              break;
            case 1036:
              break;
            case 357:
            case 358:
            case 355:
            case 667:
              if (!supbooks[0].length) supbooks[0] = [RT, val];
              else supbooks.push([RT, val]);
              supbooks[supbooks.length - 1].XTI = [];
              break;
            case 362:
              if (supbooks.length === 0) {
                supbooks[0] = [];
                supbooks[0].XTI = [];
              }
              supbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);
              supbooks.XTI = supbooks.XTI.concat(val);
              break;
            case 361:
              break;
            case 2071:
            case 158:
            case 143:
            case 664:
            case 353:
              break;
            case 3072:
            case 3073:
            case 534:
            case 677:
            case 157:
            case 610:
            case 2050:
            case 155:
            case 548:
            case 676:
            case 128:
            case 665:
            case 2128:
            case 2125:
            case 549:
            case 2053:
            case 596:
            case 2076:
            case 2075:
            case 2082:
            case 397:
            case 154:
            case 1117:
            case 553:
            case 2091:
              break;
            case 35:
              state.push(RT);
              pass = true;
              break;
            case 36:
              state.pop();
              pass = false;
              break;
            case 37:
              state.push(RT);
              pass = true;
              break;
            case 38:
              state.pop();
              pass = false;
              break;
            case 16:
              break;
            default:
              if (R.T) {
              } else if (!pass || opts.WTF && state[state.length - 1] != 37 && state[state.length - 1] != 35) throw new Error("Unexpected record 0x" + RT.toString(16));
          }
        }, opts);
        parse_wb_defaults(wb);
        wb.Names = Names;
        wb.supbooks = supbooks;
        return wb;
      }
      function write_BUNDLESHS(ba, wb) {
        write_record(
          ba,
          143
          /* BrtBeginBundleShs */
        );
        for (var idx = 0; idx != wb.SheetNames.length; ++idx) {
          var viz = wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx] && wb.Workbook.Sheets[idx].Hidden || 0;
          var d = { Hidden: viz, iTabID: idx + 1, strRelID: "rId" + (idx + 1), name: wb.SheetNames[idx] };
          write_record(ba, 156, write_BrtBundleSh(d));
        }
        write_record(
          ba,
          144
          /* BrtEndBundleShs */
        );
      }
      function write_BrtFileVersion(data, o) {
        if (!o) o = new_buf(127);
        for (var i = 0; i != 4; ++i) o.write_shift(4, 0);
        write_XLWideString("SheetJS", o);
        write_XLWideString(XLSX2.version, o);
        write_XLWideString(XLSX2.version, o);
        write_XLWideString("7262", o);
        return o.length > o.l ? o.slice(0, o.l) : o;
      }
      function write_BrtBookView(idx, o) {
        if (!o) o = new_buf(29);
        o.write_shift(-4, 0);
        o.write_shift(-4, 460);
        o.write_shift(4, 28800);
        o.write_shift(4, 17600);
        o.write_shift(4, 500);
        o.write_shift(4, idx);
        o.write_shift(4, idx);
        var flags = 120;
        o.write_shift(1, flags);
        return o.length > o.l ? o.slice(0, o.l) : o;
      }
      function write_BOOKVIEWS(ba, wb) {
        if (!wb.Workbook || !wb.Workbook.Sheets) return;
        var sheets = wb.Workbook.Sheets;
        var i = 0, vistab = -1, hidden = -1;
        for (; i < sheets.length; ++i) {
          if (!sheets[i] || !sheets[i].Hidden && vistab == -1) vistab = i;
          else if (sheets[i].Hidden == 1 && hidden == -1) hidden = i;
        }
        if (hidden > vistab) return;
        write_record(
          ba,
          135
          /* BrtBeginBookViews */
        );
        write_record(ba, 158, write_BrtBookView(vistab));
        write_record(
          ba,
          136
          /* BrtEndBookViews */
        );
      }
      function write_wb_bin(wb, opts) {
        var ba = buf_array();
        write_record(
          ba,
          131
          /* BrtBeginBook */
        );
        write_record(ba, 128, write_BrtFileVersion());
        write_record(ba, 153, write_BrtWbProp(wb.Workbook && wb.Workbook.WBProps || null));
        write_BOOKVIEWS(ba, wb, opts);
        write_BUNDLESHS(ba, wb, opts);
        write_record(
          ba,
          132
          /* BrtEndBook */
        );
        return ba.end();
      }
      function parse_wb(data, name, opts) {
        if (name.slice(-4) === ".bin") return parse_wb_bin(data, opts);
        return parse_wb_xml(data, opts);
      }
      function parse_ws(data, name, idx, opts, rels, wb, themes, styles) {
        if (name.slice(-4) === ".bin") return parse_ws_bin(data, opts, idx, rels, wb, themes, styles);
        return parse_ws_xml(data, opts, idx, rels, wb, themes, styles);
      }
      function parse_cs(data, name, idx, opts, rels, wb, themes, styles) {
        if (name.slice(-4) === ".bin") return parse_cs_bin(data, opts, idx, rels, wb, themes, styles);
        return parse_cs_xml(data, opts, idx, rels, wb, themes, styles);
      }
      function parse_ms(data, name, idx, opts, rels, wb, themes, styles) {
        if (name.slice(-4) === ".bin") return parse_ms_bin(data, opts, idx, rels, wb, themes, styles);
        return parse_ms_xml(data, opts, idx, rels, wb, themes, styles);
      }
      function parse_ds(data, name, idx, opts, rels, wb, themes, styles) {
        if (name.slice(-4) === ".bin") return parse_ds_bin(data, opts, idx, rels, wb, themes, styles);
        return parse_ds_xml(data, opts, idx, rels, wb, themes, styles);
      }
      function parse_sty(data, name, themes, opts) {
        if (name.slice(-4) === ".bin") return parse_sty_bin(data, themes, opts);
        return parse_sty_xml(data, themes, opts);
      }
      function parse_theme(data, name, opts) {
        return parse_theme_xml(data, opts);
      }
      function parse_sst(data, name, opts) {
        if (name.slice(-4) === ".bin") return parse_sst_bin(data, opts);
        return parse_sst_xml(data, opts);
      }
      function parse_cmnt(data, name, opts) {
        if (name.slice(-4) === ".bin") return parse_comments_bin(data, opts);
        return parse_comments_xml(data, opts);
      }
      function parse_cc(data, name, opts) {
        if (name.slice(-4) === ".bin") return parse_cc_bin(data, name, opts);
        return parse_cc_xml(data, name, opts);
      }
      function parse_xlink(data, rel, name, opts) {
        if (name.slice(-4) === ".bin") return parse_xlink_bin(data, rel, name, opts);
        return parse_xlink_xml(data, rel, name, opts);
      }
      function parse_xlmeta(data, name, opts) {
        if (name.slice(-4) === ".bin") return parse_xlmeta_bin(data, name, opts);
        return parse_xlmeta_xml(data, name, opts);
      }
      function write_wb(wb, name, opts) {
        return (name.slice(-4) === ".bin" ? write_wb_bin : write_wb_xml)(wb, opts);
      }
      function write_ws(data, name, opts, wb, rels) {
        return (name.slice(-4) === ".bin" ? write_ws_bin : write_ws_xml)(data, opts, wb, rels);
      }
      function write_cs(data, name, opts, wb, rels) {
        return (name.slice(-4) === ".bin" ? write_cs_bin : write_cs_xml)(data, opts, wb, rels);
      }
      function write_sty(data, name, opts) {
        return (name.slice(-4) === ".bin" ? write_sty_bin : write_sty_xml)(data, opts);
      }
      function write_sst(data, name, opts) {
        return (name.slice(-4) === ".bin" ? write_sst_bin : write_sst_xml)(data, opts);
      }
      function write_cmnt(data, name, opts) {
        return (name.slice(-4) === ".bin" ? write_comments_bin : write_comments_xml)(data, opts);
      }
      function write_xlmeta(name) {
        return (name.slice(-4) === ".bin" ? write_xlmeta_bin : write_xlmeta_xml)();
      }
      var attregexg2 = /([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;
      var attregex2 = /([\w:]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;
      function xlml_parsexmltag(tag, skip_root) {
        var words = tag.split(/\s+/);
        var z = [];
        if (!skip_root) z[0] = words[0];
        if (words.length === 1) return z;
        var m = tag.match(attregexg2), y, j, w, i;
        if (m) for (i = 0; i != m.length; ++i) {
          y = m[i].match(attregex2);
          if ((j = y[1].indexOf(":")) === -1) z[y[1]] = y[2].slice(1, y[2].length - 1);
          else {
            if (y[1].slice(0, 6) === "xmlns:") w = "xmlns" + y[1].slice(6);
            else w = y[1].slice(j + 1);
            z[w] = y[2].slice(1, y[2].length - 1);
          }
        }
        return z;
      }
      function xlml_parsexmltagobj(tag) {
        var words = tag.split(/\s+/);
        var z = {};
        if (words.length === 1) return z;
        var m = tag.match(attregexg2), y, j, w, i;
        if (m) for (i = 0; i != m.length; ++i) {
          y = m[i].match(attregex2);
          if ((j = y[1].indexOf(":")) === -1) z[y[1]] = y[2].slice(1, y[2].length - 1);
          else {
            if (y[1].slice(0, 6) === "xmlns:") w = "xmlns" + y[1].slice(6);
            else w = y[1].slice(j + 1);
            z[w] = y[2].slice(1, y[2].length - 1);
          }
        }
        return z;
      }
      var XLMLFormatMap;
      function xlml_format(format, value) {
        var fmt = XLMLFormatMap[format] || unescapexml(format);
        if (fmt === "General") return SSF_general(value);
        return SSF_format(fmt, value);
      }
      function xlml_set_custprop(Custprops, key, cp, val) {
        var oval = val;
        switch ((cp[0].match(/dt:dt="([\w.]+)"/) || ["", ""])[1]) {
          case "boolean":
            oval = parsexmlbool(val);
            break;
          case "i2":
          case "int":
            oval = parseInt(val, 10);
            break;
          case "r4":
          case "float":
            oval = parseFloat(val);
            break;
          case "date":
          case "dateTime.tz":
            oval = parseDate(val);
            break;
          case "i8":
          case "string":
          case "fixed":
          case "uuid":
          case "bin.base64":
            break;
          default:
            throw new Error("bad custprop:" + cp[0]);
        }
        Custprops[unescapexml(key)] = oval;
      }
      function safe_format_xlml(cell, nf, o) {
        if (cell.t === "z") return;
        if (!o || o.cellText !== false) try {
          if (cell.t === "e") {
            cell.w = cell.w || BErr[cell.v];
          } else if (nf === "General") {
            if (cell.t === "n") {
              if ((cell.v | 0) === cell.v) cell.w = cell.v.toString(10);
              else cell.w = SSF_general_num(cell.v);
            } else cell.w = SSF_general(cell.v);
          } else cell.w = xlml_format(nf || "General", cell.v);
        } catch (e) {
          if (o.WTF) throw e;
        }
        try {
          var z = XLMLFormatMap[nf] || nf || "General";
          if (o.cellNF) cell.z = z;
          if (o.cellDates && cell.t == "n" && fmt_is_date(z)) {
            var _d = SSF_parse_date_code(cell.v);
            if (_d) {
              cell.t = "d";
              cell.v = new Date(_d.y, _d.m - 1, _d.d, _d.H, _d.M, _d.S, _d.u);
            }
          }
        } catch (e) {
          if (o.WTF) throw e;
        }
      }
      function process_style_xlml(styles, stag, opts) {
        if (opts.cellStyles) {
          if (stag.Interior) {
            var I = stag.Interior;
            if (I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern;
          }
        }
        styles[stag.ID] = stag;
      }
      function parse_xlml_data(xml, ss, data, cell, base, styles, csty, row, arrayf, o) {
        var nf = "General", sid = cell.StyleID, S = {};
        o = o || {};
        var interiors = [];
        var i = 0;
        if (sid === void 0 && row) sid = row.StyleID;
        if (sid === void 0 && csty) sid = csty.StyleID;
        while (styles[sid] !== void 0) {
          if (styles[sid].nf) nf = styles[sid].nf;
          if (styles[sid].Interior) interiors.push(styles[sid].Interior);
          if (!styles[sid].Parent) break;
          sid = styles[sid].Parent;
        }
        switch (data.Type) {
          case "Boolean":
            cell.t = "b";
            cell.v = parsexmlbool(xml);
            break;
          case "String":
            cell.t = "s";
            cell.r = xlml_fixstr(unescapexml(xml));
            cell.v = xml.indexOf("<") > -1 ? unescapexml(ss || xml).replace(/<.*?>/g, "") : cell.r;
            break;
          case "DateTime":
            if (xml.slice(-1) != "Z") xml += "Z";
            cell.v = (parseDate(xml) - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1e3);
            if (cell.v !== cell.v) cell.v = unescapexml(xml);
            else if (cell.v < 60) cell.v = cell.v - 1;
            if (!nf || nf == "General") nf = "yyyy-mm-dd";
          case "Number":
            if (cell.v === void 0) cell.v = +xml;
            if (!cell.t) cell.t = "n";
            break;
          case "Error":
            cell.t = "e";
            cell.v = RBErr[xml];
            if (o.cellText !== false) cell.w = xml;
            break;
          default:
            if (xml == "" && ss == "") {
              cell.t = "z";
            } else {
              cell.t = "s";
              cell.v = xlml_fixstr(ss || xml);
            }
            break;
        }
        safe_format_xlml(cell, nf, o);
        if (o.cellFormula !== false) {
          if (cell.Formula) {
            var fstr = unescapexml(cell.Formula);
            if (fstr.charCodeAt(0) == 61) fstr = fstr.slice(1);
            cell.f = rc_to_a1(fstr, base);
            delete cell.Formula;
            if (cell.ArrayRange == "RC") cell.F = rc_to_a1("RC:RC", base);
            else if (cell.ArrayRange) {
              cell.F = rc_to_a1(cell.ArrayRange, base);
              arrayf.push([safe_decode_range(cell.F), cell.F]);
            }
          } else {
            for (i = 0; i < arrayf.length; ++i)
              if (base.r >= arrayf[i][0].s.r && base.r <= arrayf[i][0].e.r) {
                if (base.c >= arrayf[i][0].s.c && base.c <= arrayf[i][0].e.c)
                  cell.F = arrayf[i][1];
              }
          }
        }
        if (o.cellStyles) {
          interiors.forEach(function(x) {
            if (!S.patternType && x.patternType) S.patternType = x.patternType;
          });
          cell.s = S;
        }
        if (cell.StyleID !== void 0) cell.ixfe = cell.StyleID;
      }
      function xlml_clean_comment(comment) {
        comment.t = comment.v || "";
        comment.t = comment.t.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
        comment.v = comment.w = comment.ixfe = void 0;
      }
      function parse_xlml_xml(d, _opts) {
        var opts = _opts || {};
        make_ssf();
        var str = debom(xlml_normalize(d));
        if (opts.type == "binary" || opts.type == "array" || opts.type == "base64") {
          if (typeof $cptable !== "undefined") str = $cptable.utils.decode(65001, char_codes(str));
          else str = utf8read(str);
        }
        var opening = str.slice(0, 1024).toLowerCase(), ishtml = false;
        opening = opening.replace(/".*?"/g, "");
        if ((opening.indexOf(">") & 1023) > Math.min(opening.indexOf(",") & 1023, opening.indexOf(";") & 1023)) {
          var _o = dup(opts);
          _o.type = "string";
          return PRN.to_workbook(str, _o);
        }
        if (opening.indexOf("<?xml") == -1) ["html", "table", "head", "meta", "script", "style", "div"].forEach(function(tag) {
          if (opening.indexOf("<" + tag) >= 0) ishtml = true;
        });
        if (ishtml) return html_to_workbook(str, opts);
        XLMLFormatMap = {
          "General Number": "General",
          "General Date": table_fmt[22],
          "Long Date": "dddd, mmmm dd, yyyy",
          "Medium Date": table_fmt[15],
          "Short Date": table_fmt[14],
          "Long Time": table_fmt[19],
          "Medium Time": table_fmt[18],
          "Short Time": table_fmt[20],
          "Currency": '"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',
          "Fixed": table_fmt[2],
          "Standard": table_fmt[4],
          "Percent": table_fmt[10],
          "Scientific": table_fmt[11],
          "Yes/No": '"Yes";"Yes";"No";@',
          "True/False": '"True";"True";"False";@',
          "On/Off": '"Yes";"Yes";"No";@'
        };
        var Rn;
        var state = [], tmp;
        if (DENSE != null && opts.dense == null) opts.dense = DENSE;
        var sheets = {}, sheetnames = [], cursheet = opts.dense ? [] : {}, sheetname = "";
        var cell = {}, row = {};
        var dtag = xlml_parsexmltag('<Data ss:Type="String">'), didx = 0;
        var c = 0, r = 0;
        var refguess = { s: { r: 2e6, c: 2e6 }, e: { r: 0, c: 0 } };
        var styles = {}, stag = {};
        var ss = "", fidx = 0;
        var merges = [];
        var Props = {}, Custprops = {}, pidx = 0, cp = [];
        var comments = [], comment = {};
        var cstys = [], csty, seencol = false;
        var arrayf = [];
        var rowinfo = [], rowobj = {}, cc = 0, rr = 0;
        var Workbook = { Sheets: [], WBProps: { date1904: false } }, wsprops = {};
        xlmlregex.lastIndex = 0;
        str = str.replace(/<!--([\s\S]*?)-->/mg, "");
        var raw_Rn3 = "";
        while (Rn = xlmlregex.exec(str)) switch (Rn[3] = (raw_Rn3 = Rn[3]).toLowerCase()) {
          case "data":
            if (raw_Rn3 == "data") {
              if (Rn[1] === "/") {
                if ((tmp = state.pop())[0] !== Rn[3]) throw new Error("Bad state: " + tmp.join("|"));
              } else if (Rn[0].charAt(Rn[0].length - 2) !== "/") state.push([Rn[3], true]);
              break;
            }
            if (state[state.length - 1][1]) break;
            if (Rn[1] === "/") parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length - 1][0] == /*"Comment"*/
            "comment" ? comment : cell, { c, r }, styles, cstys[c], row, arrayf, opts);
            else {
              ss = "";
              dtag = xlml_parsexmltag(Rn[0]);
              didx = Rn.index + Rn[0].length;
            }
            break;
          case "cell":
            if (Rn[1] === "/") {
              if (comments.length > 0) cell.c = comments;
              if ((!opts.sheetRows || opts.sheetRows > r) && cell.v !== void 0) {
                if (opts.dense) {
                  if (!cursheet[r]) cursheet[r] = [];
                  cursheet[r][c] = cell;
                } else cursheet[encode_col(c) + encode_row(r)] = cell;
              }
              if (cell.HRef) {
                cell.l = { Target: unescapexml(cell.HRef) };
                if (cell.HRefScreenTip) cell.l.Tooltip = cell.HRefScreenTip;
                delete cell.HRef;
                delete cell.HRefScreenTip;
              }
              if (cell.MergeAcross || cell.MergeDown) {
                cc = c + (parseInt(cell.MergeAcross, 10) | 0);
                rr = r + (parseInt(cell.MergeDown, 10) | 0);
                merges.push({ s: { c, r }, e: { c: cc, r: rr } });
              }
              if (!opts.sheetStubs) {
                if (cell.MergeAcross) c = cc + 1;
                else ++c;
              } else if (cell.MergeAcross || cell.MergeDown) {
                for (var cma = c; cma <= cc; ++cma) {
                  for (var cmd = r; cmd <= rr; ++cmd) {
                    if (cma > c || cmd > r) {
                      if (opts.dense) {
                        if (!cursheet[cmd]) cursheet[cmd] = [];
                        cursheet[cmd][cma] = { t: "z" };
                      } else cursheet[encode_col(cma) + encode_row(cmd)] = { t: "z" };
                    }
                  }
                }
                c = cc + 1;
              } else ++c;
            } else {
              cell = xlml_parsexmltagobj(Rn[0]);
              if (cell.Index) c = +cell.Index - 1;
              if (c < refguess.s.c) refguess.s.c = c;
              if (c > refguess.e.c) refguess.e.c = c;
              if (Rn[0].slice(-2) === "/>") ++c;
              comments = [];
            }
            break;
          case "row":
            if (Rn[1] === "/" || Rn[0].slice(-2) === "/>") {
              if (r < refguess.s.r) refguess.s.r = r;
              if (r > refguess.e.r) refguess.e.r = r;
              if (Rn[0].slice(-2) === "/>") {
                row = xlml_parsexmltag(Rn[0]);
                if (row.Index) r = +row.Index - 1;
              }
              c = 0;
              ++r;
            } else {
              row = xlml_parsexmltag(Rn[0]);
              if (row.Index) r = +row.Index - 1;
              rowobj = {};
              if (row.AutoFitHeight == "0" || row.Height) {
                rowobj.hpx = parseInt(row.Height, 10);
                rowobj.hpt = px2pt(rowobj.hpx);
                rowinfo[r] = rowobj;
              }
              if (row.Hidden == "1") {
                rowobj.hidden = true;
                rowinfo[r] = rowobj;
              }
            }
            break;
          case "worksheet":
            if (Rn[1] === "/") {
              if ((tmp = state.pop())[0] !== Rn[3]) throw new Error("Bad state: " + tmp.join("|"));
              sheetnames.push(sheetname);
              if (refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) {
                cursheet["!ref"] = encode_range(refguess);
                if (opts.sheetRows && opts.sheetRows <= refguess.e.r) {
                  cursheet["!fullref"] = cursheet["!ref"];
                  refguess.e.r = opts.sheetRows - 1;
                  cursheet["!ref"] = encode_range(refguess);
                }
              }
              if (merges.length) cursheet["!merges"] = merges;
              if (cstys.length > 0) cursheet["!cols"] = cstys;
              if (rowinfo.length > 0) cursheet["!rows"] = rowinfo;
              sheets[sheetname] = cursheet;
            } else {
              refguess = { s: { r: 2e6, c: 2e6 }, e: { r: 0, c: 0 } };
              r = c = 0;
              state.push([Rn[3], false]);
              tmp = xlml_parsexmltag(Rn[0]);
              sheetname = unescapexml(tmp.Name);
              cursheet = opts.dense ? [] : {};
              merges = [];
              arrayf = [];
              rowinfo = [];
              wsprops = { name: sheetname, Hidden: 0 };
              Workbook.Sheets.push(wsprops);
            }
            break;
          case "table":
            if (Rn[1] === "/") {
              if ((tmp = state.pop())[0] !== Rn[3]) throw new Error("Bad state: " + tmp.join("|"));
            } else if (Rn[0].slice(-2) == "/>") break;
            else {
              state.push([Rn[3], false]);
              cstys = [];
              seencol = false;
            }
            break;
          case "style":
            if (Rn[1] === "/") process_style_xlml(styles, stag, opts);
            else stag = xlml_parsexmltag(Rn[0]);
            break;
          case "numberformat":
            stag.nf = unescapexml(xlml_parsexmltag(Rn[0]).Format || "General");
            if (XLMLFormatMap[stag.nf]) stag.nf = XLMLFormatMap[stag.nf];
            for (var ssfidx = 0; ssfidx != 392; ++ssfidx) if (table_fmt[ssfidx] == stag.nf) break;
            if (ssfidx == 392) {
              for (ssfidx = 57; ssfidx != 392; ++ssfidx) if (table_fmt[ssfidx] == null) {
                SSF_load(stag.nf, ssfidx);
                break;
              }
            }
            break;
          case "column":
            if (state[state.length - 1][0] !== /*'Table'*/
            "table") break;
            csty = xlml_parsexmltag(Rn[0]);
            if (csty.Hidden) {
              csty.hidden = true;
              delete csty.Hidden;
            }
            if (csty.Width) csty.wpx = parseInt(csty.Width, 10);
            if (!seencol && csty.wpx > 10) {
              seencol = true;
              MDW = DEF_MDW;
              for (var _col = 0; _col < cstys.length; ++_col) if (cstys[_col]) process_col(cstys[_col]);
            }
            if (seencol) process_col(csty);
            cstys[csty.Index - 1 || cstys.length] = csty;
            for (var i = 0; i < +csty.Span; ++i) cstys[cstys.length] = dup(csty);
            break;
          case "namedrange":
            if (Rn[1] === "/") break;
            if (!Workbook.Names) Workbook.Names = [];
            var _NamedRange = parsexmltag(Rn[0]);
            var _DefinedName = {
              Name: _NamedRange.Name,
              Ref: rc_to_a1(_NamedRange.RefersTo.slice(1), { r: 0, c: 0 })
            };
            if (Workbook.Sheets.length > 0) _DefinedName.Sheet = Workbook.Sheets.length - 1;
            Workbook.Names.push(_DefinedName);
            break;
          case "namedcell":
            break;
          case "b":
            break;
          case "i":
            break;
          case "u":
            break;
          case "s":
            break;
          case "em":
            break;
          case "h2":
            break;
          case "h3":
            break;
          case "sub":
            break;
          case "sup":
            break;
          case "span":
            break;
          case "alignment":
            break;
          case "borders":
            break;
          case "border":
            break;
          case "font":
            if (Rn[0].slice(-2) === "/>") break;
            else if (Rn[1] === "/") ss += str.slice(fidx, Rn.index);
            else fidx = Rn.index + Rn[0].length;
            break;
          case "interior":
            if (!opts.cellStyles) break;
            stag.Interior = xlml_parsexmltag(Rn[0]);
            break;
          case "protection":
            break;
          case "author":
          case "title":
          case "description":
          case "created":
          case "keywords":
          case "subject":
          case "category":
          case "company":
          case "lastauthor":
          case "lastsaved":
          case "lastprinted":
          case "version":
          case "revision":
          case "totaltime":
          case "hyperlinkbase":
          case "manager":
          case "contentstatus":
          case "identifier":
          case "language":
          case "appname":
            if (Rn[0].slice(-2) === "/>") break;
            else if (Rn[1] === "/") xlml_set_prop(Props, raw_Rn3, str.slice(pidx, Rn.index));
            else pidx = Rn.index + Rn[0].length;
            break;
          case "paragraphs":
            break;
          case "styles":
          case "workbook":
            if (Rn[1] === "/") {
              if ((tmp = state.pop())[0] !== Rn[3]) throw new Error("Bad state: " + tmp.join("|"));
            } else state.push([Rn[3], false]);
            break;
          case "comment":
            if (Rn[1] === "/") {
              if ((tmp = state.pop())[0] !== Rn[3]) throw new Error("Bad state: " + tmp.join("|"));
              xlml_clean_comment(comment);
              comments.push(comment);
            } else {
              state.push([Rn[3], false]);
              tmp = xlml_parsexmltag(Rn[0]);
              comment = { a: tmp.Author };
            }
            break;
          case "autofilter":
            if (Rn[1] === "/") {
              if ((tmp = state.pop())[0] !== Rn[3]) throw new Error("Bad state: " + tmp.join("|"));
            } else if (Rn[0].charAt(Rn[0].length - 2) !== "/") {
              var AutoFilter = xlml_parsexmltag(Rn[0]);
              cursheet["!autofilter"] = { ref: rc_to_a1(AutoFilter.Range).replace(/\$/g, "") };
              state.push([Rn[3], true]);
            }
            break;
          case "name":
            break;
          case "datavalidation":
            if (Rn[1] === "/") {
              if ((tmp = state.pop())[0] !== Rn[3]) throw new Error("Bad state: " + tmp.join("|"));
            } else {
              if (Rn[0].charAt(Rn[0].length - 2) !== "/") state.push([Rn[3], true]);
            }
            break;
          case "pixelsperinch":
            break;
          case "componentoptions":
          case "documentproperties":
          case "customdocumentproperties":
          case "officedocumentsettings":
          case "pivottable":
          case "pivotcache":
          case "names":
          case "mapinfo":
          case "pagebreaks":
          case "querytable":
          case "sorting":
          case "schema":
          case "conditionalformatting":
          case "smarttagtype":
          case "smarttags":
          case "excelworkbook":
          case "workbookoptions":
          case "worksheetoptions":
            if (Rn[1] === "/") {
              if ((tmp = state.pop())[0] !== Rn[3]) throw new Error("Bad state: " + tmp.join("|"));
            } else if (Rn[0].charAt(Rn[0].length - 2) !== "/") state.push([Rn[3], true]);
            break;
          case "null":
            break;
          default:
            if (state.length == 0 && Rn[3] == "document") return parse_fods(str, opts);
            if (state.length == 0 && Rn[3] == "uof") return parse_fods(str, opts);
            var seen = true;
            switch (state[state.length - 1][0]) {
              case "officedocumentsettings":
                switch (Rn[3]) {
                  case "allowpng":
                    break;
                  case "removepersonalinformation":
                    break;
                  case "downloadcomponents":
                    break;
                  case "locationofcomponents":
                    break;
                  case "colors":
                    break;
                  case "color":
                    break;
                  case "index":
                    break;
                  case "rgb":
                    break;
                  case "targetscreensize":
                    break;
                  case "readonlyrecommended":
                    break;
                  default:
                    seen = false;
                }
                break;
              case "componentoptions":
                switch (Rn[3]) {
                  case "toolbar":
                    break;
                  case "hideofficelogo":
                    break;
                  case "spreadsheetautofit":
                    break;
                  case "label":
                    break;
                  case "caption":
                    break;
                  case "maxheight":
                    break;
                  case "maxwidth":
                    break;
                  case "nextsheetnumber":
                    break;
                  default:
                    seen = false;
                }
                break;
              case "excelworkbook":
                switch (Rn[3]) {
                  case "date1904":
                    Workbook.WBProps.date1904 = true;
                    break;
                  case "windowheight":
                    break;
                  case "windowwidth":
                    break;
                  case "windowtopx":
                    break;
                  case "windowtopy":
                    break;
                  case "tabratio":
                    break;
                  case "protectstructure":
                    break;
                  case "protectwindow":
                    break;
                  case "protectwindows":
                    break;
                  case "activesheet":
                    break;
                  case "displayinknotes":
                    break;
                  case "firstvisiblesheet":
                    break;
                  case "supbook":
                    break;
                  case "sheetname":
                    break;
                  case "sheetindex":
                    break;
                  case "sheetindexfirst":
                    break;
                  case "sheetindexlast":
                    break;
                  case "dll":
                    break;
                  case "acceptlabelsinformulas":
                    break;
                  case "donotsavelinkvalues":
                    break;
                  case "iteration":
                    break;
                  case "maxiterations":
                    break;
                  case "maxchange":
                    break;
                  case "path":
                    break;
                  case "xct":
                    break;
                  case "count":
                    break;
                  case "selectedsheets":
                    break;
                  case "calculation":
                    break;
                  case "uncalced":
                    break;
                  case "startupprompt":
                    break;
                  case "crn":
                    break;
                  case "externname":
                    break;
                  case "formula":
                    break;
                  case "colfirst":
                    break;
                  case "collast":
                    break;
                  case "wantadvise":
                    break;
                  case "boolean":
                    break;
                  case "error":
                    break;
                  case "text":
                    break;
                  case "ole":
                    break;
                  case "noautorecover":
                    break;
                  case "publishobjects":
                    break;
                  case "donotcalculatebeforesave":
                    break;
                  case "number":
                    break;
                  case "refmoder1c1":
                    break;
                  case "embedsavesmarttags":
                    break;
                  default:
                    seen = false;
                }
                break;
              case "workbookoptions":
                switch (Rn[3]) {
                  case "owcversion":
                    break;
                  case "height":
                    break;
                  case "width":
                    break;
                  default:
                    seen = false;
                }
                break;
              case "worksheetoptions":
                switch (Rn[3]) {
                  case "visible":
                    if (Rn[0].slice(-2) === "/>") {
                    } else if (Rn[1] === "/") switch (str.slice(pidx, Rn.index)) {
                      case "SheetHidden":
                        wsprops.Hidden = 1;
                        break;
                      case "SheetVeryHidden":
                        wsprops.Hidden = 2;
                        break;
                    }
                    else pidx = Rn.index + Rn[0].length;
                    break;
                  case "header":
                    if (!cursheet["!margins"]) default_margins(cursheet["!margins"] = {}, "xlml");
                    if (!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet["!margins"].header = +parsexmltag(Rn[0]).Margin;
                    break;
                  case "footer":
                    if (!cursheet["!margins"]) default_margins(cursheet["!margins"] = {}, "xlml");
                    if (!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet["!margins"].footer = +parsexmltag(Rn[0]).Margin;
                    break;
                  case "pagemargins":
                    var pagemargins = parsexmltag(Rn[0]);
                    if (!cursheet["!margins"]) default_margins(cursheet["!margins"] = {}, "xlml");
                    if (!isNaN(+pagemargins.Top)) cursheet["!margins"].top = +pagemargins.Top;
                    if (!isNaN(+pagemargins.Left)) cursheet["!margins"].left = +pagemargins.Left;
                    if (!isNaN(+pagemargins.Right)) cursheet["!margins"].right = +pagemargins.Right;
                    if (!isNaN(+pagemargins.Bottom)) cursheet["!margins"].bottom = +pagemargins.Bottom;
                    break;
                  case "displayrighttoleft":
                    if (!Workbook.Views) Workbook.Views = [];
                    if (!Workbook.Views[0]) Workbook.Views[0] = {};
                    Workbook.Views[0].RTL = true;
                    break;
                  case "freezepanes":
                    break;
                  case "frozennosplit":
                    break;
                  case "splithorizontal":
                  case "splitvertical":
                    break;
                  case "donotdisplaygridlines":
                    break;
                  case "activerow":
                    break;
                  case "activecol":
                    break;
                  case "toprowbottompane":
                    break;
                  case "leftcolumnrightpane":
                    break;
                  case "unsynced":
                    break;
                  case "print":
                    break;
                  case "printerrors":
                    break;
                  case "panes":
                    break;
                  case "scale":
                    break;
                  case "pane":
                    break;
                  case "number":
                    break;
                  case "layout":
                    break;
                  case "pagesetup":
                    break;
                  case "selected":
                    break;
                  case "protectobjects":
                    break;
                  case "enableselection":
                    break;
                  case "protectscenarios":
                    break;
                  case "validprinterinfo":
                    break;
                  case "horizontalresolution":
                    break;
                  case "verticalresolution":
                    break;
                  case "numberofcopies":
                    break;
                  case "activepane":
                    break;
                  case "toprowvisible":
                    break;
                  case "leftcolumnvisible":
                    break;
                  case "fittopage":
                    break;
                  case "rangeselection":
                    break;
                  case "papersizeindex":
                    break;
                  case "pagelayoutzoom":
                    break;
                  case "pagebreakzoom":
                    break;
                  case "filteron":
                    break;
                  case "fitwidth":
                    break;
                  case "fitheight":
                    break;
                  case "commentslayout":
                    break;
                  case "zoom":
                    break;
                  case "lefttoright":
                    break;
                  case "gridlines":
                    break;
                  case "allowsort":
                    break;
                  case "allowfilter":
                    break;
                  case "allowinsertrows":
                    break;
                  case "allowdeleterows":
                    break;
                  case "allowinsertcols":
                    break;
                  case "allowdeletecols":
                    break;
                  case "allowinserthyperlinks":
                    break;
                  case "allowformatcells":
                    break;
                  case "allowsizecols":
                    break;
                  case "allowsizerows":
                    break;
                  case "nosummaryrowsbelowdetail":
                    if (!cursheet["!outline"]) cursheet["!outline"] = {};
                    cursheet["!outline"].above = true;
                    break;
                  case "tabcolorindex":
                    break;
                  case "donotdisplayheadings":
                    break;
                  case "showpagelayoutzoom":
                    break;
                  case "nosummarycolumnsrightdetail":
                    if (!cursheet["!outline"]) cursheet["!outline"] = {};
                    cursheet["!outline"].left = true;
                    break;
                  case "blackandwhite":
                    break;
                  case "donotdisplayzeros":
                    break;
                  case "displaypagebreak":
                    break;
                  case "rowcolheadings":
                    break;
                  case "donotdisplayoutline":
                    break;
                  case "noorientation":
                    break;
                  case "allowusepivottables":
                    break;
                  case "zeroheight":
                    break;
                  case "viewablerange":
                    break;
                  case "selection":
                    break;
                  case "protectcontents":
                    break;
                  default:
                    seen = false;
                }
                break;
              case "pivottable":
              case "pivotcache":
                switch (Rn[3]) {
                  case "immediateitemsondrop":
                    break;
                  case "showpagemultipleitemlabel":
                    break;
                  case "compactrowindent":
                    break;
                  case "location":
                    break;
                  case "pivotfield":
                    break;
                  case "orientation":
                    break;
                  case "layoutform":
                    break;
                  case "layoutsubtotallocation":
                    break;
                  case "layoutcompactrow":
                    break;
                  case "position":
                    break;
                  case "pivotitem":
                    break;
                  case "datatype":
                    break;
                  case "datafield":
                    break;
                  case "sourcename":
                    break;
                  case "parentfield":
                    break;
                  case "ptlineitems":
                    break;
                  case "ptlineitem":
                    break;
                  case "countofsameitems":
                    break;
                  case "item":
                    break;
                  case "itemtype":
                    break;
                  case "ptsource":
                    break;
                  case "cacheindex":
                    break;
                  case "consolidationreference":
                    break;
                  case "filename":
                    break;
                  case "reference":
                    break;
                  case "nocolumngrand":
                    break;
                  case "norowgrand":
                    break;
                  case "blanklineafteritems":
                    break;
                  case "hidden":
                    break;
                  case "subtotal":
                    break;
                  case "basefield":
                    break;
                  case "mapchilditems":
                    break;
                  case "function":
                    break;
                  case "refreshonfileopen":
                    break;
                  case "printsettitles":
                    break;
                  case "mergelabels":
                    break;
                  case "defaultversion":
                    break;
                  case "refreshname":
                    break;
                  case "refreshdate":
                    break;
                  case "refreshdatecopy":
                    break;
                  case "versionlastrefresh":
                    break;
                  case "versionlastupdate":
                    break;
                  case "versionupdateablemin":
                    break;
                  case "versionrefreshablemin":
                    break;
                  case "calculation":
                    break;
                  default:
                    seen = false;
                }
                break;
              case "pagebreaks":
                switch (Rn[3]) {
                  case "colbreaks":
                    break;
                  case "colbreak":
                    break;
                  case "rowbreaks":
                    break;
                  case "rowbreak":
                    break;
                  case "colstart":
                    break;
                  case "colend":
                    break;
                  case "rowend":
                    break;
                  default:
                    seen = false;
                }
                break;
              case "autofilter":
                switch (Rn[3]) {
                  case "autofiltercolumn":
                    break;
                  case "autofiltercondition":
                    break;
                  case "autofilterand":
                    break;
                  case "autofilteror":
                    break;
                  default:
                    seen = false;
                }
                break;
              case "querytable":
                switch (Rn[3]) {
                  case "id":
                    break;
                  case "autoformatfont":
                    break;
                  case "autoformatpattern":
                    break;
                  case "querysource":
                    break;
                  case "querytype":
                    break;
                  case "enableredirections":
                    break;
                  case "refreshedinxl9":
                    break;
                  case "urlstring":
                    break;
                  case "htmltables":
                    break;
                  case "connection":
                    break;
                  case "commandtext":
                    break;
                  case "refreshinfo":
                    break;
                  case "notitles":
                    break;
                  case "nextid":
                    break;
                  case "columninfo":
                    break;
                  case "overwritecells":
                    break;
                  case "donotpromptforfile":
                    break;
                  case "textwizardsettings":
                    break;
                  case "source":
                    break;
                  case "number":
                    break;
                  case "decimal":
                    break;
                  case "thousandseparator":
                    break;
                  case "trailingminusnumbers":
                    break;
                  case "formatsettings":
                    break;
                  case "fieldtype":
                    break;
                  case "delimiters":
                    break;
                  case "tab":
                    break;
                  case "comma":
                    break;
                  case "autoformatname":
                    break;
                  case "versionlastedit":
                    break;
                  case "versionlastrefresh":
                    break;
                  default:
                    seen = false;
                }
                break;
              case "datavalidation":
                switch (Rn[3]) {
                  case "range":
                    break;
                  case "type":
                    break;
                  case "min":
                    break;
                  case "max":
                    break;
                  case "sort":
                    break;
                  case "descending":
                    break;
                  case "order":
                    break;
                  case "casesensitive":
                    break;
                  case "value":
                    break;
                  case "errorstyle":
                    break;
                  case "errormessage":
                    break;
                  case "errortitle":
                    break;
                  case "inputmessage":
                    break;
                  case "inputtitle":
                    break;
                  case "combohide":
                    break;
                  case "inputhide":
                    break;
                  case "condition":
                    break;
                  case "qualifier":
                    break;
                  case "useblank":
                    break;
                  case "value1":
                    break;
                  case "value2":
                    break;
                  case "format":
                    break;
                  case "cellrangelist":
                    break;
                  default:
                    seen = false;
                }
                break;
              case "sorting":
              case "conditionalformatting":
                switch (Rn[3]) {
                  case "range":
                    break;
                  case "type":
                    break;
                  case "min":
                    break;
                  case "max":
                    break;
                  case "sort":
                    break;
                  case "descending":
                    break;
                  case "order":
                    break;
                  case "casesensitive":
                    break;
                  case "value":
                    break;
                  case "errorstyle":
                    break;
                  case "errormessage":
                    break;
                  case "errortitle":
                    break;
                  case "cellrangelist":
                    break;
                  case "inputmessage":
                    break;
                  case "inputtitle":
                    break;
                  case "combohide":
                    break;
                  case "inputhide":
                    break;
                  case "condition":
                    break;
                  case "qualifier":
                    break;
                  case "useblank":
                    break;
                  case "value1":
                    break;
                  case "value2":
                    break;
                  case "format":
                    break;
                  default:
                    seen = false;
                }
                break;
              case "mapinfo":
              case "schema":
              case "data":
                switch (Rn[3]) {
                  case "map":
                    break;
                  case "entry":
                    break;
                  case "range":
                    break;
                  case "xpath":
                    break;
                  case "field":
                    break;
                  case "xsdtype":
                    break;
                  case "filteron":
                    break;
                  case "aggregate":
                    break;
                  case "elementtype":
                    break;
                  case "attributetype":
                    break;
                  case "schema":
                  case "element":
                  case "complextype":
                  case "datatype":
                  case "all":
                  case "attribute":
                  case "extends":
                    break;
                  case "row":
                    break;
                  default:
                    seen = false;
                }
                break;
              case "smarttags":
                break;
              default:
                seen = false;
                break;
            }
            if (seen) break;
            if (Rn[3].match(/!\[CDATA/)) break;
            if (!state[state.length - 1][1]) throw "Unrecognized tag: " + Rn[3] + "|" + state.join("|");
            if (state[state.length - 1][0] === /*'CustomDocumentProperties'*/
            "customdocumentproperties") {
              if (Rn[0].slice(-2) === "/>") break;
              else if (Rn[1] === "/") xlml_set_custprop(Custprops, raw_Rn3, cp, str.slice(pidx, Rn.index));
              else {
                cp = Rn;
                pidx = Rn.index + Rn[0].length;
              }
              break;
            }
            if (opts.WTF) throw "Unrecognized tag: " + Rn[3] + "|" + state.join("|");
        }
        var out = {};
        if (!opts.bookSheets && !opts.bookProps) out.Sheets = sheets;
        out.SheetNames = sheetnames;
        out.Workbook = Workbook;
        out.SSF = dup(table_fmt);
        out.Props = Props;
        out.Custprops = Custprops;
        return out;
      }
      function parse_xlml(data, opts) {
        fix_read_opts(opts = opts || {});
        switch (opts.type || "base64") {
          case "base64":
            return parse_xlml_xml(Base64_decode(data), opts);
          case "binary":
          case "buffer":
          case "file":
            return parse_xlml_xml(data, opts);
          case "array":
            return parse_xlml_xml(a2s(data), opts);
        }
      }
      function write_props_xlml(wb, opts) {
        var o = [];
        if (wb.Props) o.push(xlml_write_docprops(wb.Props, opts));
        if (wb.Custprops) o.push(xlml_write_custprops(wb.Props, wb.Custprops, opts));
        return o.join("");
      }
      function write_wb_xlml() {
        return "";
      }
      function write_sty_xlml(wb, opts) {
        var styles = ['<Style ss:ID="Default" ss:Name="Normal"><NumberFormat/></Style>'];
        opts.cellXfs.forEach(function(xf, id) {
          var payload = [];
          payload.push(writextag("NumberFormat", null, { "ss:Format": escapexml(table_fmt[xf.numFmtId]) }));
          var o = { "ss:ID": "s" + (21 + id) };
          styles.push(writextag("Style", payload.join(""), o));
        });
        return writextag("Styles", styles.join(""));
      }
      function write_name_xlml(n) {
        return writextag("NamedRange", null, { "ss:Name": n.Name, "ss:RefersTo": "=" + a1_to_rc(n.Ref, { r: 0, c: 0 }) });
      }
      function write_names_xlml(wb) {
        if (!((wb || {}).Workbook || {}).Names) return "";
        var names = wb.Workbook.Names;
        var out = [];
        for (var i = 0; i < names.length; ++i) {
          var n = names[i];
          if (n.Sheet != null) continue;
          if (n.Name.match(/^_xlfn\./)) continue;
          out.push(write_name_xlml(n));
        }
        return writextag("Names", out.join(""));
      }
      function write_ws_xlml_names(ws, opts, idx, wb) {
        if (!ws) return "";
        if (!((wb || {}).Workbook || {}).Names) return "";
        var names = wb.Workbook.Names;
        var out = [];
        for (var i = 0; i < names.length; ++i) {
          var n = names[i];
          if (n.Sheet != idx) continue;
          if (n.Name.match(/^_xlfn\./)) continue;
          out.push(write_name_xlml(n));
        }
        return out.join("");
      }
      function write_ws_xlml_wsopts(ws, opts, idx, wb) {
        if (!ws) return "";
        var o = [];
        if (ws["!margins"]) {
          o.push("<PageSetup>");
          if (ws["!margins"].header) o.push(writextag("Header", null, { "x:Margin": ws["!margins"].header }));
          if (ws["!margins"].footer) o.push(writextag("Footer", null, { "x:Margin": ws["!margins"].footer }));
          o.push(writextag("PageMargins", null, {
            "x:Bottom": ws["!margins"].bottom || "0.75",
            "x:Left": ws["!margins"].left || "0.7",
            "x:Right": ws["!margins"].right || "0.7",
            "x:Top": ws["!margins"].top || "0.75"
          }));
          o.push("</PageSetup>");
        }
        if (wb && wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx]) {
          if (wb.Workbook.Sheets[idx].Hidden) o.push(writextag("Visible", wb.Workbook.Sheets[idx].Hidden == 1 ? "SheetHidden" : "SheetVeryHidden", {}));
          else {
            for (var i = 0; i < idx; ++i) if (wb.Workbook.Sheets[i] && !wb.Workbook.Sheets[i].Hidden) break;
            if (i == idx) o.push("<Selected/>");
          }
        }
        if (((((wb || {}).Workbook || {}).Views || [])[0] || {}).RTL) o.push("<DisplayRightToLeft/>");
        if (ws["!protect"]) {
          o.push(writetag("ProtectContents", "True"));
          if (ws["!protect"].objects) o.push(writetag("ProtectObjects", "True"));
          if (ws["!protect"].scenarios) o.push(writetag("ProtectScenarios", "True"));
          if (ws["!protect"].selectLockedCells != null && !ws["!protect"].selectLockedCells) o.push(writetag("EnableSelection", "NoSelection"));
          else if (ws["!protect"].selectUnlockedCells != null && !ws["!protect"].selectUnlockedCells) o.push(writetag("EnableSelection", "UnlockedCells"));
          [
            ["formatCells", "AllowFormatCells"],
            ["formatColumns", "AllowSizeCols"],
            ["formatRows", "AllowSizeRows"],
            ["insertColumns", "AllowInsertCols"],
            ["insertRows", "AllowInsertRows"],
            ["insertHyperlinks", "AllowInsertHyperlinks"],
            ["deleteColumns", "AllowDeleteCols"],
            ["deleteRows", "AllowDeleteRows"],
            ["sort", "AllowSort"],
            ["autoFilter", "AllowFilter"],
            ["pivotTables", "AllowUsePivotTables"]
          ].forEach(function(x) {
            if (ws["!protect"][x[0]]) o.push("<" + x[1] + "/>");
          });
        }
        if (o.length == 0) return "";
        return writextag("WorksheetOptions", o.join(""), { xmlns: XLMLNS.x });
      }
      function write_ws_xlml_comment(comments) {
        return comments.map(function(c) {
          var t = xlml_unfixstr(c.t || "");
          var d = writextag("ss:Data", t, { "xmlns": "http://www.w3.org/TR/REC-html40" });
          return writextag("Comment", d, { "ss:Author": c.a });
        }).join("");
      }
      function write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr) {
        if (!cell || cell.v == void 0 && cell.f == void 0) return "";
        var attr = {};
        if (cell.f) attr["ss:Formula"] = "=" + escapexml(a1_to_rc(cell.f, addr));
        if (cell.F && cell.F.slice(0, ref.length) == ref) {
          var end = decode_cell(cell.F.slice(ref.length + 1));
          attr["ss:ArrayRange"] = "RC:R" + (end.r == addr.r ? "" : "[" + (end.r - addr.r) + "]") + "C" + (end.c == addr.c ? "" : "[" + (end.c - addr.c) + "]");
        }
        if (cell.l && cell.l.Target) {
          attr["ss:HRef"] = escapexml(cell.l.Target);
          if (cell.l.Tooltip) attr["x:HRefScreenTip"] = escapexml(cell.l.Tooltip);
        }
        if (ws["!merges"]) {
          var marr = ws["!merges"];
          for (var mi = 0; mi != marr.length; ++mi) {
            if (marr[mi].s.c != addr.c || marr[mi].s.r != addr.r) continue;
            if (marr[mi].e.c > marr[mi].s.c) attr["ss:MergeAcross"] = marr[mi].e.c - marr[mi].s.c;
            if (marr[mi].e.r > marr[mi].s.r) attr["ss:MergeDown"] = marr[mi].e.r - marr[mi].s.r;
          }
        }
        var t = "", p = "";
        switch (cell.t) {
          case "z":
            if (!opts.sheetStubs) return "";
            break;
          case "n":
            t = "Number";
            p = String(cell.v);
            break;
          case "b":
            t = "Boolean";
            p = cell.v ? "1" : "0";
            break;
          case "e":
            t = "Error";
            p = BErr[cell.v];
            break;
          case "d":
            t = "DateTime";
            p = new Date(cell.v).toISOString();
            if (cell.z == null) cell.z = cell.z || table_fmt[14];
            break;
          case "s":
            t = "String";
            p = escapexlml(cell.v || "");
            break;
        }
        var os = get_cell_style(opts.cellXfs, cell, opts);
        attr["ss:StyleID"] = "s" + (21 + os);
        attr["ss:Index"] = addr.c + 1;
        var _v = cell.v != null ? p : "";
        var m = cell.t == "z" ? "" : '<Data ss:Type="' + t + '">' + _v + "</Data>";
        if ((cell.c || []).length > 0) m += write_ws_xlml_comment(cell.c);
        return writextag("Cell", m, attr);
      }
      function write_ws_xlml_row(R, row) {
        var o = '<Row ss:Index="' + (R + 1) + '"';
        if (row) {
          if (row.hpt && !row.hpx) row.hpx = pt2px(row.hpt);
          if (row.hpx) o += ' ss:AutoFitHeight="0" ss:Height="' + row.hpx + '"';
          if (row.hidden) o += ' ss:Hidden="1"';
        }
        return o + ">";
      }
      function write_ws_xlml_table(ws, opts, idx, wb) {
        if (!ws["!ref"]) return "";
        var range = safe_decode_range(ws["!ref"]);
        var marr = ws["!merges"] || [], mi = 0;
        var o = [];
        if (ws["!cols"]) ws["!cols"].forEach(function(n, i) {
          process_col(n);
          var w = !!n.width;
          var p = col_obj_w(i, n);
          var k = { "ss:Index": i + 1 };
          if (w) k["ss:Width"] = width2px(p.width);
          if (n.hidden) k["ss:Hidden"] = "1";
          o.push(writextag("Column", null, k));
        });
        var dense = Array.isArray(ws);
        for (var R = range.s.r; R <= range.e.r; ++R) {
          var row = [write_ws_xlml_row(R, (ws["!rows"] || [])[R])];
          for (var C = range.s.c; C <= range.e.c; ++C) {
            var skip = false;
            for (mi = 0; mi != marr.length; ++mi) {
              if (marr[mi].s.c > C) continue;
              if (marr[mi].s.r > R) continue;
              if (marr[mi].e.c < C) continue;
              if (marr[mi].e.r < R) continue;
              if (marr[mi].s.c != C || marr[mi].s.r != R) skip = true;
              break;
            }
            if (skip) continue;
            var addr = { r: R, c: C };
            var ref = encode_cell(addr), cell = dense ? (ws[R] || [])[C] : ws[ref];
            row.push(write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr));
          }
          row.push("</Row>");
          if (row.length > 2) o.push(row.join(""));
        }
        return o.join("");
      }
      function write_ws_xlml(idx, opts, wb) {
        var o = [];
        var s = wb.SheetNames[idx];
        var ws = wb.Sheets[s];
        var t = ws ? write_ws_xlml_names(ws, opts, idx, wb) : "";
        if (t.length > 0) o.push("<Names>" + t + "</Names>");
        t = ws ? write_ws_xlml_table(ws, opts, idx, wb) : "";
        if (t.length > 0) o.push("<Table>" + t + "</Table>");
        o.push(write_ws_xlml_wsopts(ws, opts, idx, wb));
        return o.join("");
      }
      function write_xlml(wb, opts) {
        if (!opts) opts = {};
        if (!wb.SSF) wb.SSF = dup(table_fmt);
        if (wb.SSF) {
          make_ssf();
          SSF_load_table(wb.SSF);
          opts.revssf = evert_num(wb.SSF);
          opts.revssf[wb.SSF[65535]] = 0;
          opts.ssf = wb.SSF;
          opts.cellXfs = [];
          get_cell_style(opts.cellXfs, {}, { revssf: { "General": 0 } });
        }
        var d = [];
        d.push(write_props_xlml(wb, opts));
        d.push(write_wb_xlml(wb, opts));
        d.push("");
        d.push("");
        for (var i = 0; i < wb.SheetNames.length; ++i)
          d.push(writextag("Worksheet", write_ws_xlml(i, opts, wb), { "ss:Name": escapexml(wb.SheetNames[i]) }));
        d[2] = write_sty_xlml(wb, opts);
        d[3] = write_names_xlml(wb, opts);
        return XML_HEADER + writextag("Workbook", d.join(""), {
          "xmlns": XLMLNS.ss,
          "xmlns:o": XLMLNS.o,
          "xmlns:x": XLMLNS.x,
          "xmlns:ss": XLMLNS.ss,
          "xmlns:dt": XLMLNS.dt,
          "xmlns:html": XLMLNS.html
        });
      }
      function parse_compobj(obj) {
        var v = {};
        var o = obj.content;
        o.l = 28;
        v.AnsiUserType = o.read_shift(0, "lpstr-ansi");
        v.AnsiClipboardFormat = parse_ClipboardFormatOrAnsiString(o);
        if (o.length - o.l <= 4) return v;
        var m = o.read_shift(4);
        if (m == 0 || m > 40) return v;
        o.l -= 4;
        v.Reserved1 = o.read_shift(0, "lpstr-ansi");
        if (o.length - o.l <= 4) return v;
        m = o.read_shift(4);
        if (m !== 1907505652) return v;
        v.UnicodeClipboardFormat = parse_ClipboardFormatOrUnicodeString(o);
        m = o.read_shift(4);
        if (m == 0 || m > 40) return v;
        o.l -= 4;
        v.Reserved2 = o.read_shift(0, "lpwstr");
      }
      var CONTINUE_RT = [60, 1084, 2066, 2165, 2175];
      function slurp(RecordType, R, blob, length, opts) {
        var l = length;
        var bufs = [];
        var d = blob.slice(blob.l, blob.l + l);
        if (opts && opts.enc && opts.enc.insitu && d.length > 0) switch (RecordType) {
          case 9:
          case 521:
          case 1033:
          case 2057:
          case 47:
          case 405:
          case 225:
          case 406:
          case 312:
          case 404:
          case 10:
            break;
          case 133:
            break;
          default:
            opts.enc.insitu(d);
        }
        bufs.push(d);
        blob.l += l;
        var nextrt = __readUInt16LE(blob, blob.l), next = XLSRecordEnum[nextrt];
        var start = 0;
        while (next != null && CONTINUE_RT.indexOf(nextrt) > -1) {
          l = __readUInt16LE(blob, blob.l + 2);
          start = blob.l + 4;
          if (nextrt == 2066) start += 4;
          else if (nextrt == 2165 || nextrt == 2175) {
            start += 12;
          }
          d = blob.slice(start, blob.l + 4 + l);
          bufs.push(d);
          blob.l += 4 + l;
          next = XLSRecordEnum[nextrt = __readUInt16LE(blob, blob.l)];
        }
        var b = bconcat(bufs);
        prep_blob(b, 0);
        var ll = 0;
        b.lens = [];
        for (var j = 0; j < bufs.length; ++j) {
          b.lens.push(ll);
          ll += bufs[j].length;
        }
        if (b.length < length) throw "XLS Record 0x" + RecordType.toString(16) + " Truncated: " + b.length + " < " + length;
        return R.f(b, b.length, opts);
      }
      function safe_format_xf(p, opts, date1904) {
        if (p.t === "z") return;
        if (!p.XF) return;
        var fmtid = 0;
        try {
          fmtid = p.z || p.XF.numFmtId || 0;
          if (opts.cellNF) p.z = table_fmt[fmtid];
        } catch (e) {
          if (opts.WTF) throw e;
        }
        if (!opts || opts.cellText !== false) try {
          if (p.t === "e") {
            p.w = p.w || BErr[p.v];
          } else if (fmtid === 0 || fmtid == "General") {
            if (p.t === "n") {
              if ((p.v | 0) === p.v) p.w = p.v.toString(10);
              else p.w = SSF_general_num(p.v);
            } else p.w = SSF_general(p.v);
          } else p.w = SSF_format(fmtid, p.v, { date1904: !!date1904, dateNF: opts && opts.dateNF });
        } catch (e) {
          if (opts.WTF) throw e;
        }
        if (opts.cellDates && fmtid && p.t == "n" && fmt_is_date(table_fmt[fmtid] || String(fmtid))) {
          var _d = SSF_parse_date_code(p.v);
          if (_d) {
            p.t = "d";
            p.v = new Date(_d.y, _d.m - 1, _d.d, _d.H, _d.M, _d.S, _d.u);
          }
        }
      }
      function make_cell(val, ixfe, t) {
        return { v: val, ixfe, t };
      }
      function parse_workbook(blob, options) {
        var wb = { opts: {} };
        var Sheets = {};
        if (DENSE != null && options.dense == null) options.dense = DENSE;
        var out = options.dense ? [] : {};
        var Directory = {};
        var range = {};
        var last_formula = null;
        var sst = [];
        var cur_sheet = "";
        var Preamble = {};
        var lastcell, last_cell = "", cc, cmnt, rngC, rngR;
        var sharedf = {};
        var arrayf = [];
        var temp_val;
        var country;
        var XFs = [];
        var palette = [];
        var Workbook = { Sheets: [], WBProps: { date1904: false }, Views: [{}] }, wsprops = {};
        var get_rgb = function getrgb(icv) {
          if (icv < 8) return XLSIcv[icv];
          if (icv < 64) return palette[icv - 8] || XLSIcv[icv];
          return XLSIcv[icv];
        };
        var process_cell_style = function pcs(cell, line, options2) {
          var xfd = line.XF.data;
          if (!xfd || !xfd.patternType || !options2 || !options2.cellStyles) return;
          line.s = {};
          line.s.patternType = xfd.patternType;
          var t;
          if (t = rgb2Hex(get_rgb(xfd.icvFore))) {
            line.s.fgColor = { rgb: t };
          }
          if (t = rgb2Hex(get_rgb(xfd.icvBack))) {
            line.s.bgColor = { rgb: t };
          }
        };
        var addcell = function addcell2(cell, line, options2) {
          if (file_depth > 1) return;
          if (options2.sheetRows && cell.r >= options2.sheetRows) return;
          if (options2.cellStyles && line.XF && line.XF.data) process_cell_style(cell, line, options2);
          delete line.ixfe;
          delete line.XF;
          lastcell = cell;
          last_cell = encode_cell(cell);
          if (!range || !range.s || !range.e) range = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } };
          if (cell.r < range.s.r) range.s.r = cell.r;
          if (cell.c < range.s.c) range.s.c = cell.c;
          if (cell.r + 1 > range.e.r) range.e.r = cell.r + 1;
          if (cell.c + 1 > range.e.c) range.e.c = cell.c + 1;
          if (options2.cellFormula && line.f) {
            for (var afi = 0; afi < arrayf.length; ++afi) {
              if (arrayf[afi][0].s.c > cell.c || arrayf[afi][0].s.r > cell.r) continue;
              if (arrayf[afi][0].e.c < cell.c || arrayf[afi][0].e.r < cell.r) continue;
              line.F = encode_range(arrayf[afi][0]);
              if (arrayf[afi][0].s.c != cell.c || arrayf[afi][0].s.r != cell.r) delete line.f;
              if (line.f) line.f = "" + stringify_formula(arrayf[afi][1], range, cell, supbooks, opts);
              break;
            }
          }
          {
            if (options2.dense) {
              if (!out[cell.r]) out[cell.r] = [];
              out[cell.r][cell.c] = line;
            } else out[last_cell] = line;
          }
        };
        var opts = {
          enc: false,
          // encrypted
          sbcch: 0,
          // cch in the preceding SupBook
          snames: [],
          // sheetnames
          sharedf,
          // shared formulae by address
          arrayf,
          // array formulae array
          rrtabid: [],
          // RRTabId
          lastuser: "",
          // Last User from WriteAccess
          biff: 8,
          // BIFF version
          codepage: 0,
          // CP from CodePage record
          winlocked: 0,
          // fLockWn from WinProtect
          cellStyles: !!options && !!options.cellStyles,
          WTF: !!options && !!options.wtf
        };
        if (options.password) opts.password = options.password;
        var themes;
        var merges = [];
        var objects = [];
        var colinfo = [], rowinfo = [];
        var seencol = false;
        var supbooks = [];
        supbooks.SheetNames = opts.snames;
        supbooks.sharedf = opts.sharedf;
        supbooks.arrayf = opts.arrayf;
        supbooks.names = [];
        supbooks.XTI = [];
        var last_RT = 0;
        var file_depth = 0;
        var BIFF2Fmt = 0, BIFF2FmtTable = [];
        var FilterDatabases = [];
        var last_lbl;
        opts.codepage = 1200;
        set_cp(1200);
        var seen_codepage = false;
        while (blob.l < blob.length - 1) {
          var s = blob.l;
          var RecordType = blob.read_shift(2);
          if (RecordType === 0 && last_RT === 10) break;
          var length = blob.l === blob.length ? 0 : blob.read_shift(2);
          var R = XLSRecordEnum[RecordType];
          if (R && R.f) {
            if (options.bookSheets) {
              if (last_RT === 133 && RecordType !== 133) break;
            }
            last_RT = RecordType;
            if (R.r === 2 || R.r == 12) {
              var rt = blob.read_shift(2);
              length -= 2;
              if (!opts.enc && rt !== RecordType && ((rt & 255) << 8 | rt >> 8) !== RecordType) throw new Error("rt mismatch: " + rt + "!=" + RecordType);
              if (R.r == 12) {
                blob.l += 10;
                length -= 10;
              }
            }
            var val = {};
            if (RecordType === 10) val = R.f(blob, length, opts);
            else val = slurp(RecordType, R, blob, length, opts);
            if (file_depth == 0 && [9, 521, 1033, 2057].indexOf(last_RT) === -1) continue;
            switch (RecordType) {
              case 34:
                wb.opts.Date1904 = Workbook.WBProps.date1904 = val;
                break;
              case 134:
                wb.opts.WriteProtect = true;
                break;
              case 47:
                if (!opts.enc) blob.l = 0;
                opts.enc = val;
                if (!options.password) throw new Error("File is password-protected");
                if (val.valid == null) throw new Error("Encryption scheme unsupported");
                if (!val.valid) throw new Error("Password is incorrect");
                break;
              case 92:
                opts.lastuser = val;
                break;
              case 66:
                var cpval = Number(val);
                switch (cpval) {
                  case 21010:
                    cpval = 1200;
                    break;
                  case 32768:
                    cpval = 1e4;
                    break;
                  case 32769:
                    cpval = 1252;
                    break;
                }
                set_cp(opts.codepage = cpval);
                seen_codepage = true;
                break;
              case 317:
                opts.rrtabid = val;
                break;
              case 25:
                opts.winlocked = val;
                break;
              case 439:
                wb.opts["RefreshAll"] = val;
                break;
              case 12:
                wb.opts["CalcCount"] = val;
                break;
              case 16:
                wb.opts["CalcDelta"] = val;
                break;
              case 17:
                wb.opts["CalcIter"] = val;
                break;
              case 13:
                wb.opts["CalcMode"] = val;
                break;
              case 14:
                wb.opts["CalcPrecision"] = val;
                break;
              case 95:
                wb.opts["CalcSaveRecalc"] = val;
                break;
              case 15:
                opts.CalcRefMode = val;
                break;
              case 2211:
                wb.opts.FullCalc = val;
                break;
              case 129:
                if (val.fDialog) out["!type"] = "dialog";
                if (!val.fBelow) (out["!outline"] || (out["!outline"] = {})).above = true;
                if (!val.fRight) (out["!outline"] || (out["!outline"] = {})).left = true;
                break;
              case 224:
                XFs.push(val);
                break;
              case 430:
                supbooks.push([val]);
                supbooks[supbooks.length - 1].XTI = [];
                break;
              case 35:
              case 547:
                supbooks[supbooks.length - 1].push(val);
                break;
              case 24:
              case 536:
                last_lbl = {
                  Name: val.Name,
                  Ref: stringify_formula(val.rgce, range, null, supbooks, opts)
                };
                if (val.itab > 0) last_lbl.Sheet = val.itab - 1;
                supbooks.names.push(last_lbl);
                if (!supbooks[0]) {
                  supbooks[0] = [];
                  supbooks[0].XTI = [];
                }
                supbooks[supbooks.length - 1].push(val);
                if (val.Name == "_xlnm._FilterDatabase" && val.itab > 0) {
                  if (val.rgce && val.rgce[0] && val.rgce[0][0] && val.rgce[0][0][0] == "PtgArea3d")
                    FilterDatabases[val.itab - 1] = { ref: encode_range(val.rgce[0][0][1][2]) };
                }
                break;
              case 22:
                opts.ExternCount = val;
                break;
              case 23:
                if (supbooks.length == 0) {
                  supbooks[0] = [];
                  supbooks[0].XTI = [];
                }
                supbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);
                supbooks.XTI = supbooks.XTI.concat(val);
                break;
              case 2196:
                if (opts.biff < 8) break;
                if (last_lbl != null) last_lbl.Comment = val[1];
                break;
              case 18:
                out["!protect"] = val;
                break;
              case 19:
                if (val !== 0 && opts.WTF) console.error("Password verifier: " + val);
                break;
              case 133:
                {
                  Directory[val.pos] = val;
                  opts.snames.push(val.name);
                }
                break;
              case 10:
                {
                  if (--file_depth) break;
                  if (range.e) {
                    if (range.e.r > 0 && range.e.c > 0) {
                      range.e.r--;
                      range.e.c--;
                      out["!ref"] = encode_range(range);
                      if (options.sheetRows && options.sheetRows <= range.e.r) {
                        var tmpri = range.e.r;
                        range.e.r = options.sheetRows - 1;
                        out["!fullref"] = out["!ref"];
                        out["!ref"] = encode_range(range);
                        range.e.r = tmpri;
                      }
                      range.e.r++;
                      range.e.c++;
                    }
                    if (merges.length > 0) out["!merges"] = merges;
                    if (objects.length > 0) out["!objects"] = objects;
                    if (colinfo.length > 0) out["!cols"] = colinfo;
                    if (rowinfo.length > 0) out["!rows"] = rowinfo;
                    Workbook.Sheets.push(wsprops);
                  }
                  if (cur_sheet === "") Preamble = out;
                  else Sheets[cur_sheet] = out;
                  out = options.dense ? [] : {};
                }
                break;
              case 9:
              case 521:
              case 1033:
              case 2057:
                {
                  if (opts.biff === 8) opts.biff = {
                    9: 2,
                    521: 3,
                    1033: 4
                  }[RecordType] || {
                    512: 2,
                    768: 3,
                    1024: 4,
                    1280: 5,
                    1536: 8,
                    2: 2,
                    7: 2
                  }[val.BIFFVer] || 8;
                  opts.biffguess = val.BIFFVer == 0;
                  if (val.BIFFVer == 0 && val.dt == 4096) {
                    opts.biff = 5;
                    seen_codepage = true;
                    set_cp(opts.codepage = 28591);
                  }
                  if (opts.biff == 8 && val.BIFFVer == 0 && val.dt == 16) opts.biff = 2;
                  if (file_depth++) break;
                  out = options.dense ? [] : {};
                  if (opts.biff < 8 && !seen_codepage) {
                    seen_codepage = true;
                    set_cp(opts.codepage = options.codepage || 1252);
                  }
                  if (opts.biff < 5 || val.BIFFVer == 0 && val.dt == 4096) {
                    if (cur_sheet === "") cur_sheet = "Sheet1";
                    range = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } };
                    var fakebs8 = { pos: blob.l - length, name: cur_sheet };
                    Directory[fakebs8.pos] = fakebs8;
                    opts.snames.push(cur_sheet);
                  } else cur_sheet = (Directory[s] || { name: "" }).name;
                  if (val.dt == 32) out["!type"] = "chart";
                  if (val.dt == 64) out["!type"] = "macro";
                  merges = [];
                  objects = [];
                  opts.arrayf = arrayf = [];
                  colinfo = [];
                  rowinfo = [];
                  seencol = false;
                  wsprops = { Hidden: (Directory[s] || { hs: 0 }).hs, name: cur_sheet };
                }
                break;
              case 515:
              case 3:
              case 2:
                {
                  if (out["!type"] == "chart") {
                    if (options.dense ? (out[val.r] || [])[val.c] : out[encode_cell({ c: val.c, r: val.r })]) ++val.c;
                  }
                  temp_val = { ixfe: val.ixfe, XF: XFs[val.ixfe] || {}, v: val.val, t: "n" };
                  if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 63];
                  safe_format_xf(temp_val, options, wb.opts.Date1904);
                  addcell({ c: val.c, r: val.r }, temp_val, options);
                }
                break;
              case 5:
              case 517:
                {
                  temp_val = { ixfe: val.ixfe, XF: XFs[val.ixfe], v: val.val, t: val.t };
                  if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 63];
                  safe_format_xf(temp_val, options, wb.opts.Date1904);
                  addcell({ c: val.c, r: val.r }, temp_val, options);
                }
                break;
              case 638:
                {
                  temp_val = { ixfe: val.ixfe, XF: XFs[val.ixfe], v: val.rknum, t: "n" };
                  if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 63];
                  safe_format_xf(temp_val, options, wb.opts.Date1904);
                  addcell({ c: val.c, r: val.r }, temp_val, options);
                }
                break;
              case 189:
                {
                  for (var j = val.c; j <= val.C; ++j) {
                    var ixfe = val.rkrec[j - val.c][0];
                    temp_val = { ixfe, XF: XFs[ixfe], v: val.rkrec[j - val.c][1], t: "n" };
                    if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 63];
                    safe_format_xf(temp_val, options, wb.opts.Date1904);
                    addcell({ c: j, r: val.r }, temp_val, options);
                  }
                }
                break;
              case 6:
              case 518:
              case 1030:
                {
                  if (val.val == "String") {
                    last_formula = val;
                    break;
                  }
                  temp_val = make_cell(val.val, val.cell.ixfe, val.tt);
                  temp_val.XF = XFs[temp_val.ixfe];
                  if (options.cellFormula) {
                    var _f = val.formula;
                    if (_f && _f[0] && _f[0][0] && _f[0][0][0] == "PtgExp") {
                      var _fr = _f[0][0][1][0], _fc = _f[0][0][1][1];
                      var _fe = encode_cell({ r: _fr, c: _fc });
                      if (sharedf[_fe]) temp_val.f = "" + stringify_formula(val.formula, range, val.cell, supbooks, opts);
                      else temp_val.F = ((options.dense ? (out[_fr] || [])[_fc] : out[_fe]) || {}).F;
                    } else temp_val.f = "" + stringify_formula(val.formula, range, val.cell, supbooks, opts);
                  }
                  if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 63];
                  safe_format_xf(temp_val, options, wb.opts.Date1904);
                  addcell(val.cell, temp_val, options);
                  last_formula = val;
                }
                break;
              case 7:
              case 519:
                {
                  if (last_formula) {
                    last_formula.val = val;
                    temp_val = make_cell(val, last_formula.cell.ixfe, "s");
                    temp_val.XF = XFs[temp_val.ixfe];
                    if (options.cellFormula) {
                      temp_val.f = "" + stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);
                    }
                    if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 63];
                    safe_format_xf(temp_val, options, wb.opts.Date1904);
                    addcell(last_formula.cell, temp_val, options);
                    last_formula = null;
                  } else throw new Error("String record expects Formula");
                }
                break;
              case 33:
              case 545:
                {
                  arrayf.push(val);
                  var _arraystart = encode_cell(val[0].s);
                  cc = options.dense ? (out[val[0].s.r] || [])[val[0].s.c] : out[_arraystart];
                  if (options.cellFormula && cc) {
                    if (!last_formula) break;
                    if (!_arraystart || !cc) break;
                    cc.f = "" + stringify_formula(val[1], range, val[0], supbooks, opts);
                    cc.F = encode_range(val[0]);
                  }
                }
                break;
              case 1212:
                {
                  if (!options.cellFormula) break;
                  if (last_cell) {
                    if (!last_formula) break;
                    sharedf[encode_cell(last_formula.cell)] = val[0];
                    cc = options.dense ? (out[last_formula.cell.r] || [])[last_formula.cell.c] : out[encode_cell(last_formula.cell)];
                    (cc || {}).f = "" + stringify_formula(val[0], range, lastcell, supbooks, opts);
                  }
                }
                break;
              case 253:
                temp_val = make_cell(sst[val.isst].t, val.ixfe, "s");
                if (sst[val.isst].h) temp_val.h = sst[val.isst].h;
                temp_val.XF = XFs[temp_val.ixfe];
                if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 63];
                safe_format_xf(temp_val, options, wb.opts.Date1904);
                addcell({ c: val.c, r: val.r }, temp_val, options);
                break;
              case 513:
                if (options.sheetStubs) {
                  temp_val = { ixfe: val.ixfe, XF: XFs[val.ixfe], t: "z" };
                  if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 63];
                  safe_format_xf(temp_val, options, wb.opts.Date1904);
                  addcell({ c: val.c, r: val.r }, temp_val, options);
                }
                break;
              case 190:
                if (options.sheetStubs) {
                  for (var _j = val.c; _j <= val.C; ++_j) {
                    var _ixfe = val.ixfe[_j - val.c];
                    temp_val = { ixfe: _ixfe, XF: XFs[_ixfe], t: "z" };
                    if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 63];
                    safe_format_xf(temp_val, options, wb.opts.Date1904);
                    addcell({ c: _j, r: val.r }, temp_val, options);
                  }
                }
                break;
              case 214:
              case 516:
              case 4:
                temp_val = make_cell(val.val, val.ixfe, "s");
                temp_val.XF = XFs[temp_val.ixfe];
                if (BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[temp_val.ixfe >> 8 & 63];
                safe_format_xf(temp_val, options, wb.opts.Date1904);
                addcell({ c: val.c, r: val.r }, temp_val, options);
                break;
              case 0:
              case 512:
                {
                  if (file_depth === 1) range = val;
                }
                break;
              case 252:
                {
                  sst = val;
                }
                break;
              case 1054:
                {
                  if (opts.biff == 4) {
                    BIFF2FmtTable[BIFF2Fmt++] = val[1];
                    for (var b4idx = 0; b4idx < BIFF2Fmt + 163; ++b4idx) if (table_fmt[b4idx] == val[1]) break;
                    if (b4idx >= 163) SSF_load(val[1], BIFF2Fmt + 163);
                  } else SSF_load(val[1], val[0]);
                }
                break;
              case 30:
                {
                  BIFF2FmtTable[BIFF2Fmt++] = val;
                  for (var b2idx = 0; b2idx < BIFF2Fmt + 163; ++b2idx) if (table_fmt[b2idx] == val) break;
                  if (b2idx >= 163) SSF_load(val, BIFF2Fmt + 163);
                }
                break;
              case 229:
                merges = merges.concat(val);
                break;
              case 93:
                objects[val.cmo[0]] = opts.lastobj = val;
                break;
              case 438:
                opts.lastobj.TxO = val;
                break;
              case 127:
                opts.lastobj.ImData = val;
                break;
              case 440:
                {
                  for (rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)
                    for (rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {
                      cc = options.dense ? (out[rngR] || [])[rngC] : out[encode_cell({ c: rngC, r: rngR })];
                      if (cc) cc.l = val[1];
                    }
                }
                break;
              case 2048:
                {
                  for (rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)
                    for (rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {
                      cc = options.dense ? (out[rngR] || [])[rngC] : out[encode_cell({ c: rngC, r: rngR })];
                      if (cc && cc.l) cc.l.Tooltip = val[1];
                    }
                }
                break;
              case 28:
                {
                  if (opts.biff <= 5 && opts.biff >= 2) break;
                  cc = options.dense ? (out[val[0].r] || [])[val[0].c] : out[encode_cell(val[0])];
                  var noteobj = objects[val[2]];
                  if (!cc) {
                    if (options.dense) {
                      if (!out[val[0].r]) out[val[0].r] = [];
                      cc = out[val[0].r][val[0].c] = { t: "z" };
                    } else {
                      cc = out[encode_cell(val[0])] = { t: "z" };
                    }
                    range.e.r = Math.max(range.e.r, val[0].r);
                    range.s.r = Math.min(range.s.r, val[0].r);
                    range.e.c = Math.max(range.e.c, val[0].c);
                    range.s.c = Math.min(range.s.c, val[0].c);
                  }
                  if (!cc.c) cc.c = [];
                  cmnt = { a: val[1], t: noteobj.TxO.t };
                  cc.c.push(cmnt);
                }
                break;
              case 2173:
                update_xfext(XFs[val.ixfe], val.ext);
                break;
              case 125:
                {
                  if (!opts.cellStyles) break;
                  while (val.e >= val.s) {
                    colinfo[val.e--] = { width: val.w / 256, level: val.level || 0, hidden: !!(val.flags & 1) };
                    if (!seencol) {
                      seencol = true;
                      find_mdw_colw(val.w / 256);
                    }
                    process_col(colinfo[val.e + 1]);
                  }
                }
                break;
              case 520:
                {
                  var rowobj = {};
                  if (val.level != null) {
                    rowinfo[val.r] = rowobj;
                    rowobj.level = val.level;
                  }
                  if (val.hidden) {
                    rowinfo[val.r] = rowobj;
                    rowobj.hidden = true;
                  }
                  if (val.hpt) {
                    rowinfo[val.r] = rowobj;
                    rowobj.hpt = val.hpt;
                    rowobj.hpx = pt2px(val.hpt);
                  }
                }
                break;
              case 38:
              case 39:
              case 40:
              case 41:
                if (!out["!margins"]) default_margins(out["!margins"] = {});
                out["!margins"][{ 38: "left", 39: "right", 40: "top", 41: "bottom" }[RecordType]] = val;
                break;
              case 161:
                if (!out["!margins"]) default_margins(out["!margins"] = {});
                out["!margins"].header = val.header;
                out["!margins"].footer = val.footer;
                break;
              case 574:
                if (val.RTL) Workbook.Views[0].RTL = true;
                break;
              case 146:
                palette = val;
                break;
              case 2198:
                themes = val;
                break;
              case 140:
                country = val;
                break;
              case 442:
                {
                  if (!cur_sheet) Workbook.WBProps.CodeName = val || "ThisWorkbook";
                  else wsprops.CodeName = val || wsprops.name;
                }
                break;
            }
          } else {
            if (!R) console.error("Missing Info for XLS Record 0x" + RecordType.toString(16));
            blob.l += length;
          }
        }
        wb.SheetNames = keys(Directory).sort(function(a, b) {
          return Number(a) - Number(b);
        }).map(function(x) {
          return Directory[x].name;
        });
        if (!options.bookSheets) wb.Sheets = Sheets;
        if (!wb.SheetNames.length && Preamble["!ref"]) {
          wb.SheetNames.push("Sheet1");
          if (wb.Sheets) wb.Sheets["Sheet1"] = Preamble;
        } else wb.Preamble = Preamble;
        if (wb.Sheets) FilterDatabases.forEach(function(r, i) {
          wb.Sheets[wb.SheetNames[i]]["!autofilter"] = r;
        });
        wb.Strings = sst;
        wb.SSF = dup(table_fmt);
        if (opts.enc) wb.Encryption = opts.enc;
        if (themes) wb.Themes = themes;
        wb.Metadata = {};
        if (country !== void 0) wb.Metadata.Country = country;
        if (supbooks.names.length > 0) Workbook.Names = supbooks.names;
        wb.Workbook = Workbook;
        return wb;
      }
      var PSCLSID = {
        SI: "e0859ff2f94f6810ab9108002b27b3d9",
        DSI: "02d5cdd59c2e1b10939708002b2cf9ae",
        UDI: "05d5cdd59c2e1b10939708002b2cf9ae"
      };
      function parse_xls_props(cfb, props, o) {
        var DSI = CFB.find(cfb, "/!DocumentSummaryInformation");
        if (DSI && DSI.size > 0) try {
          var DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI, PSCLSID.DSI);
          for (var d in DocSummary) props[d] = DocSummary[d];
        } catch (e) {
          if (o.WTF) throw e;
        }
        var SI = CFB.find(cfb, "/!SummaryInformation");
        if (SI && SI.size > 0) try {
          var Summary = parse_PropertySetStream(SI, SummaryPIDSI, PSCLSID.SI);
          for (var s in Summary) if (props[s] == null) props[s] = Summary[s];
        } catch (e) {
          if (o.WTF) throw e;
        }
        if (props.HeadingPairs && props.TitlesOfParts) {
          load_props_pairs(props.HeadingPairs, props.TitlesOfParts, props, o);
          delete props.HeadingPairs;
          delete props.TitlesOfParts;
        }
      }
      function write_xls_props(wb, cfb) {
        var DSEntries = [], SEntries = [], CEntries = [];
        var i = 0, Keys;
        var DocSummaryRE = evert_key(DocSummaryPIDDSI, "n");
        var SummaryRE = evert_key(SummaryPIDSI, "n");
        if (wb.Props) {
          Keys = keys(wb.Props);
          for (i = 0; i < Keys.length; ++i) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Props[Keys[i]]]);
        }
        if (wb.Custprops) {
          Keys = keys(wb.Custprops);
          for (i = 0; i < Keys.length; ++i) if (!Object.prototype.hasOwnProperty.call(wb.Props || {}, Keys[i])) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Custprops[Keys[i]]]);
        }
        var CEntries2 = [];
        for (i = 0; i < CEntries.length; ++i) {
          if (XLSPSSkip.indexOf(CEntries[i][0]) > -1 || PseudoPropsPairs.indexOf(CEntries[i][0]) > -1) continue;
          if (CEntries[i][1] == null) continue;
          CEntries2.push(CEntries[i]);
        }
        if (SEntries.length) CFB.utils.cfb_add(cfb, "/SummaryInformation", write_PropertySetStream(SEntries, PSCLSID.SI, SummaryRE, SummaryPIDSI));
        if (DSEntries.length || CEntries2.length) CFB.utils.cfb_add(cfb, "/DocumentSummaryInformation", write_PropertySetStream(DSEntries, PSCLSID.DSI, DocSummaryRE, DocSummaryPIDDSI, CEntries2.length ? CEntries2 : null, PSCLSID.UDI));
      }
      function parse_xlscfb(cfb, options) {
        if (!options) options = {};
        fix_read_opts(options);
        reset_cp();
        if (options.codepage) set_ansi(options.codepage);
        var CompObj, WB;
        if (cfb.FullPaths) {
          if (CFB.find(cfb, "/encryption")) throw new Error("File is password-protected");
          CompObj = CFB.find(cfb, "!CompObj");
          WB = CFB.find(cfb, "/Workbook") || CFB.find(cfb, "/Book");
        } else {
          switch (options.type) {
            case "base64":
              cfb = s2a(Base64_decode(cfb));
              break;
            case "binary":
              cfb = s2a(cfb);
              break;
            case "buffer":
              break;
            case "array":
              if (!Array.isArray(cfb)) cfb = Array.prototype.slice.call(cfb);
              break;
          }
          prep_blob(cfb, 0);
          WB = { content: cfb };
        }
        var WorkbookP;
        var _data;
        if (CompObj) parse_compobj(CompObj);
        if (options.bookProps && !options.bookSheets) WorkbookP = {};
        else {
          var T = has_buf ? "buffer" : "array";
          if (WB && WB.content) WorkbookP = parse_workbook(WB.content, options);
          else if ((_data = CFB.find(cfb, "PerfectOffice_MAIN")) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));
          else if ((_data = CFB.find(cfb, "NativeContent_MAIN")) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));
          else if ((_data = CFB.find(cfb, "MN0")) && _data.content) throw new Error("Unsupported Works 4 for Mac file");
          else throw new Error("Cannot find Workbook stream");
          if (options.bookVBA && cfb.FullPaths && CFB.find(cfb, "/_VBA_PROJECT_CUR/VBA/dir")) WorkbookP.vbaraw = make_vba_xls(cfb);
        }
        var props = {};
        if (cfb.FullPaths) parse_xls_props(cfb, props, options);
        WorkbookP.Props = WorkbookP.Custprops = props;
        if (options.bookFiles) WorkbookP.cfb = cfb;
        return WorkbookP;
      }
      function write_xlscfb(wb, opts) {
        var o = opts || {};
        var cfb = CFB.utils.cfb_new({ root: "R" });
        var wbpath = "/Workbook";
        switch (o.bookType || "xls") {
          case "xls":
            o.bookType = "biff8";
          case "xla":
            if (!o.bookType) o.bookType = "xla";
          case "biff8":
            wbpath = "/Workbook";
            o.biff = 8;
            break;
          case "biff5":
            wbpath = "/Book";
            o.biff = 5;
            break;
          default:
            throw new Error("invalid type " + o.bookType + " for XLS CFB");
        }
        CFB.utils.cfb_add(cfb, wbpath, write_biff_buf(wb, o));
        if (o.biff == 8 && (wb.Props || wb.Custprops)) write_xls_props(wb, cfb);
        if (o.biff == 8 && wb.vbaraw) fill_vba_xls(cfb, CFB.read(wb.vbaraw, { type: typeof wb.vbaraw == "string" ? "binary" : "buffer" }));
        return cfb;
      }
      var XLSBRecordEnum = {
        0: {
          /* n:"BrtRowHdr", */
          f: parse_BrtRowHdr
        },
        1: {
          /* n:"BrtCellBlank", */
          f: parse_BrtCellBlank
        },
        2: {
          /* n:"BrtCellRk", */
          f: parse_BrtCellRk
        },
        3: {
          /* n:"BrtCellError", */
          f: parse_BrtCellError
        },
        4: {
          /* n:"BrtCellBool", */
          f: parse_BrtCellBool
        },
        5: {
          /* n:"BrtCellReal", */
          f: parse_BrtCellReal
        },
        6: {
          /* n:"BrtCellSt", */
          f: parse_BrtCellSt
        },
        7: {
          /* n:"BrtCellIsst", */
          f: parse_BrtCellIsst
        },
        8: {
          /* n:"BrtFmlaString", */
          f: parse_BrtFmlaString
        },
        9: {
          /* n:"BrtFmlaNum", */
          f: parse_BrtFmlaNum
        },
        10: {
          /* n:"BrtFmlaBool", */
          f: parse_BrtFmlaBool
        },
        11: {
          /* n:"BrtFmlaError", */
          f: parse_BrtFmlaError
        },
        12: {
          /* n:"BrtShortBlank", */
          f: parse_BrtShortBlank
        },
        13: {
          /* n:"BrtShortRk", */
          f: parse_BrtShortRk
        },
        14: {
          /* n:"BrtShortError", */
          f: parse_BrtShortError
        },
        15: {
          /* n:"BrtShortBool", */
          f: parse_BrtShortBool
        },
        16: {
          /* n:"BrtShortReal", */
          f: parse_BrtShortReal
        },
        17: {
          /* n:"BrtShortSt", */
          f: parse_BrtShortSt
        },
        18: {
          /* n:"BrtShortIsst", */
          f: parse_BrtShortIsst
        },
        19: {
          /* n:"BrtSSTItem", */
          f: parse_RichStr
        },
        20: {
          /* n:"BrtPCDIMissing" */
        },
        21: {
          /* n:"BrtPCDINumber" */
        },
        22: {
          /* n:"BrtPCDIBoolean" */
        },
        23: {
          /* n:"BrtPCDIError" */
        },
        24: {
          /* n:"BrtPCDIString" */
        },
        25: {
          /* n:"BrtPCDIDatetime" */
        },
        26: {
          /* n:"BrtPCDIIndex" */
        },
        27: {
          /* n:"BrtPCDIAMissing" */
        },
        28: {
          /* n:"BrtPCDIANumber" */
        },
        29: {
          /* n:"BrtPCDIABoolean" */
        },
        30: {
          /* n:"BrtPCDIAError" */
        },
        31: {
          /* n:"BrtPCDIAString" */
        },
        32: {
          /* n:"BrtPCDIADatetime" */
        },
        33: {
          /* n:"BrtPCRRecord" */
        },
        34: {
          /* n:"BrtPCRRecordDt" */
        },
        35: {
          /* n:"BrtFRTBegin", */
          T: 1
        },
        36: {
          /* n:"BrtFRTEnd", */
          T: -1
        },
        37: {
          /* n:"BrtACBegin", */
          T: 1
        },
        38: {
          /* n:"BrtACEnd", */
          T: -1
        },
        39: {
          /* n:"BrtName", */
          f: parse_BrtName
        },
        40: {
          /* n:"BrtIndexRowBlock" */
        },
        42: {
          /* n:"BrtIndexBlock" */
        },
        43: {
          /* n:"BrtFont", */
          f: parse_BrtFont
        },
        44: {
          /* n:"BrtFmt", */
          f: parse_BrtFmt
        },
        45: {
          /* n:"BrtFill", */
          f: parse_BrtFill
        },
        46: {
          /* n:"BrtBorder", */
          f: parse_BrtBorder
        },
        47: {
          /* n:"BrtXF", */
          f: parse_BrtXF
        },
        48: {
          /* n:"BrtStyle" */
        },
        49: {
          /* n:"BrtCellMeta", */
          f: parse_Int32LE
        },
        50: {
          /* n:"BrtValueMeta" */
        },
        51: {
          /* n:"BrtMdb" */
          f: parse_BrtMdb
        },
        52: {
          /* n:"BrtBeginFmd", */
          T: 1
        },
        53: {
          /* n:"BrtEndFmd", */
          T: -1
        },
        54: {
          /* n:"BrtBeginMdx", */
          T: 1
        },
        55: {
          /* n:"BrtEndMdx", */
          T: -1
        },
        56: {
          /* n:"BrtBeginMdxTuple", */
          T: 1
        },
        57: {
          /* n:"BrtEndMdxTuple", */
          T: -1
        },
        58: {
          /* n:"BrtMdxMbrIstr" */
        },
        59: {
          /* n:"BrtStr" */
        },
        60: {
          /* n:"BrtColInfo", */
          f: parse_ColInfo
        },
        62: {
          /* n:"BrtCellRString", */
          f: parse_BrtCellRString
        },
        63: {
          /* n:"BrtCalcChainItem$", */
          f: parse_BrtCalcChainItem$
        },
        64: {
          /* n:"BrtDVal", */
          f: parse_BrtDVal
        },
        65: {
          /* n:"BrtSxvcellNum" */
        },
        66: {
          /* n:"BrtSxvcellStr" */
        },
        67: {
          /* n:"BrtSxvcellBool" */
        },
        68: {
          /* n:"BrtSxvcellErr" */
        },
        69: {
          /* n:"BrtSxvcellDate" */
        },
        70: {
          /* n:"BrtSxvcellNil" */
        },
        128: {
          /* n:"BrtFileVersion" */
        },
        129: {
          /* n:"BrtBeginSheet", */
          T: 1
        },
        130: {
          /* n:"BrtEndSheet", */
          T: -1
        },
        131: {
          /* n:"BrtBeginBook", */
          T: 1,
          f: parsenoop,
          p: 0
        },
        132: {
          /* n:"BrtEndBook", */
          T: -1
        },
        133: {
          /* n:"BrtBeginWsViews", */
          T: 1
        },
        134: {
          /* n:"BrtEndWsViews", */
          T: -1
        },
        135: {
          /* n:"BrtBeginBookViews", */
          T: 1
        },
        136: {
          /* n:"BrtEndBookViews", */
          T: -1
        },
        137: {
          /* n:"BrtBeginWsView", */
          T: 1,
          f: parse_BrtBeginWsView
        },
        138: {
          /* n:"BrtEndWsView", */
          T: -1
        },
        139: {
          /* n:"BrtBeginCsViews", */
          T: 1
        },
        140: {
          /* n:"BrtEndCsViews", */
          T: -1
        },
        141: {
          /* n:"BrtBeginCsView", */
          T: 1
        },
        142: {
          /* n:"BrtEndCsView", */
          T: -1
        },
        143: {
          /* n:"BrtBeginBundleShs", */
          T: 1
        },
        144: {
          /* n:"BrtEndBundleShs", */
          T: -1
        },
        145: {
          /* n:"BrtBeginSheetData", */
          T: 1
        },
        146: {
          /* n:"BrtEndSheetData", */
          T: -1
        },
        147: {
          /* n:"BrtWsProp", */
          f: parse_BrtWsProp
        },
        148: {
          /* n:"BrtWsDim", */
          f: parse_BrtWsDim,
          p: 16
        },
        151: {
          /* n:"BrtPane", */
          f: parse_BrtPane
        },
        152: {
          /* n:"BrtSel" */
        },
        153: {
          /* n:"BrtWbProp", */
          f: parse_BrtWbProp
        },
        154: {
          /* n:"BrtWbFactoid" */
        },
        155: {
          /* n:"BrtFileRecover" */
        },
        156: {
          /* n:"BrtBundleSh", */
          f: parse_BrtBundleSh
        },
        157: {
          /* n:"BrtCalcProp" */
        },
        158: {
          /* n:"BrtBookView" */
        },
        159: {
          /* n:"BrtBeginSst", */
          T: 1,
          f: parse_BrtBeginSst
        },
        160: {
          /* n:"BrtEndSst", */
          T: -1
        },
        161: {
          /* n:"BrtBeginAFilter", */
          T: 1,
          f: parse_UncheckedRfX
        },
        162: {
          /* n:"BrtEndAFilter", */
          T: -1
        },
        163: {
          /* n:"BrtBeginFilterColumn", */
          T: 1
        },
        164: {
          /* n:"BrtEndFilterColumn", */
          T: -1
        },
        165: {
          /* n:"BrtBeginFilters", */
          T: 1
        },
        166: {
          /* n:"BrtEndFilters", */
          T: -1
        },
        167: {
          /* n:"BrtFilter" */
        },
        168: {
          /* n:"BrtColorFilter" */
        },
        169: {
          /* n:"BrtIconFilter" */
        },
        170: {
          /* n:"BrtTop10Filter" */
        },
        171: {
          /* n:"BrtDynamicFilter" */
        },
        172: {
          /* n:"BrtBeginCustomFilters", */
          T: 1
        },
        173: {
          /* n:"BrtEndCustomFilters", */
          T: -1
        },
        174: {
          /* n:"BrtCustomFilter" */
        },
        175: {
          /* n:"BrtAFilterDateGroupItem" */
        },
        176: {
          /* n:"BrtMergeCell", */
          f: parse_BrtMergeCell
        },
        177: {
          /* n:"BrtBeginMergeCells", */
          T: 1
        },
        178: {
          /* n:"BrtEndMergeCells", */
          T: -1
        },
        179: {
          /* n:"BrtBeginPivotCacheDef", */
          T: 1
        },
        180: {
          /* n:"BrtEndPivotCacheDef", */
          T: -1
        },
        181: {
          /* n:"BrtBeginPCDFields", */
          T: 1
        },
        182: {
          /* n:"BrtEndPCDFields", */
          T: -1
        },
        183: {
          /* n:"BrtBeginPCDField", */
          T: 1
        },
        184: {
          /* n:"BrtEndPCDField", */
          T: -1
        },
        185: {
          /* n:"BrtBeginPCDSource", */
          T: 1
        },
        186: {
          /* n:"BrtEndPCDSource", */
          T: -1
        },
        187: {
          /* n:"BrtBeginPCDSRange", */
          T: 1
        },
        188: {
          /* n:"BrtEndPCDSRange", */
          T: -1
        },
        189: {
          /* n:"BrtBeginPCDFAtbl", */
          T: 1
        },
        190: {
          /* n:"BrtEndPCDFAtbl", */
          T: -1
        },
        191: {
          /* n:"BrtBeginPCDIRun", */
          T: 1
        },
        192: {
          /* n:"BrtEndPCDIRun", */
          T: -1
        },
        193: {
          /* n:"BrtBeginPivotCacheRecords", */
          T: 1
        },
        194: {
          /* n:"BrtEndPivotCacheRecords", */
          T: -1
        },
        195: {
          /* n:"BrtBeginPCDHierarchies", */
          T: 1
        },
        196: {
          /* n:"BrtEndPCDHierarchies", */
          T: -1
        },
        197: {
          /* n:"BrtBeginPCDHierarchy", */
          T: 1
        },
        198: {
          /* n:"BrtEndPCDHierarchy", */
          T: -1
        },
        199: {
          /* n:"BrtBeginPCDHFieldsUsage", */
          T: 1
        },
        200: {
          /* n:"BrtEndPCDHFieldsUsage", */
          T: -1
        },
        201: {
          /* n:"BrtBeginExtConnection", */
          T: 1
        },
        202: {
          /* n:"BrtEndExtConnection", */
          T: -1
        },
        203: {
          /* n:"BrtBeginECDbProps", */
          T: 1
        },
        204: {
          /* n:"BrtEndECDbProps", */
          T: -1
        },
        205: {
          /* n:"BrtBeginECOlapProps", */
          T: 1
        },
        206: {
          /* n:"BrtEndECOlapProps", */
          T: -1
        },
        207: {
          /* n:"BrtBeginPCDSConsol", */
          T: 1
        },
        208: {
          /* n:"BrtEndPCDSConsol", */
          T: -1
        },
        209: {
          /* n:"BrtBeginPCDSCPages", */
          T: 1
        },
        210: {
          /* n:"BrtEndPCDSCPages", */
          T: -1
        },
        211: {
          /* n:"BrtBeginPCDSCPage", */
          T: 1
        },
        212: {
          /* n:"BrtEndPCDSCPage", */
          T: -1
        },
        213: {
          /* n:"BrtBeginPCDSCPItem", */
          T: 1
        },
        214: {
          /* n:"BrtEndPCDSCPItem", */
          T: -1
        },
        215: {
          /* n:"BrtBeginPCDSCSets", */
          T: 1
        },
        216: {
          /* n:"BrtEndPCDSCSets", */
          T: -1
        },
        217: {
          /* n:"BrtBeginPCDSCSet", */
          T: 1
        },
        218: {
          /* n:"BrtEndPCDSCSet", */
          T: -1
        },
        219: {
          /* n:"BrtBeginPCDFGroup", */
          T: 1
        },
        220: {
          /* n:"BrtEndPCDFGroup", */
          T: -1
        },
        221: {
          /* n:"BrtBeginPCDFGItems", */
          T: 1
        },
        222: {
          /* n:"BrtEndPCDFGItems", */
          T: -1
        },
        223: {
          /* n:"BrtBeginPCDFGRange", */
          T: 1
        },
        224: {
          /* n:"BrtEndPCDFGRange", */
          T: -1
        },
        225: {
          /* n:"BrtBeginPCDFGDiscrete", */
          T: 1
        },
        226: {
          /* n:"BrtEndPCDFGDiscrete", */
          T: -1
        },
        227: {
          /* n:"BrtBeginPCDSDTupleCache", */
          T: 1
        },
        228: {
          /* n:"BrtEndPCDSDTupleCache", */
          T: -1
        },
        229: {
          /* n:"BrtBeginPCDSDTCEntries", */
          T: 1
        },
        230: {
          /* n:"BrtEndPCDSDTCEntries", */
          T: -1
        },
        231: {
          /* n:"BrtBeginPCDSDTCEMembers", */
          T: 1
        },
        232: {
          /* n:"BrtEndPCDSDTCEMembers", */
          T: -1
        },
        233: {
          /* n:"BrtBeginPCDSDTCEMember", */
          T: 1
        },
        234: {
          /* n:"BrtEndPCDSDTCEMember", */
          T: -1
        },
        235: {
          /* n:"BrtBeginPCDSDTCQueries", */
          T: 1
        },
        236: {
          /* n:"BrtEndPCDSDTCQueries", */
          T: -1
        },
        237: {
          /* n:"BrtBeginPCDSDTCQuery", */
          T: 1
        },
        238: {
          /* n:"BrtEndPCDSDTCQuery", */
          T: -1
        },
        239: {
          /* n:"BrtBeginPCDSDTCSets", */
          T: 1
        },
        240: {
          /* n:"BrtEndPCDSDTCSets", */
          T: -1
        },
        241: {
          /* n:"BrtBeginPCDSDTCSet", */
          T: 1
        },
        242: {
          /* n:"BrtEndPCDSDTCSet", */
          T: -1
        },
        243: {
          /* n:"BrtBeginPCDCalcItems", */
          T: 1
        },
        244: {
          /* n:"BrtEndPCDCalcItems", */
          T: -1
        },
        245: {
          /* n:"BrtBeginPCDCalcItem", */
          T: 1
        },
        246: {
          /* n:"BrtEndPCDCalcItem", */
          T: -1
        },
        247: {
          /* n:"BrtBeginPRule", */
          T: 1
        },
        248: {
          /* n:"BrtEndPRule", */
          T: -1
        },
        249: {
          /* n:"BrtBeginPRFilters", */
          T: 1
        },
        250: {
          /* n:"BrtEndPRFilters", */
          T: -1
        },
        251: {
          /* n:"BrtBeginPRFilter", */
          T: 1
        },
        252: {
          /* n:"BrtEndPRFilter", */
          T: -1
        },
        253: {
          /* n:"BrtBeginPNames", */
          T: 1
        },
        254: {
          /* n:"BrtEndPNames", */
          T: -1
        },
        255: {
          /* n:"BrtBeginPName", */
          T: 1
        },
        256: {
          /* n:"BrtEndPName", */
          T: -1
        },
        257: {
          /* n:"BrtBeginPNPairs", */
          T: 1
        },
        258: {
          /* n:"BrtEndPNPairs", */
          T: -1
        },
        259: {
          /* n:"BrtBeginPNPair", */
          T: 1
        },
        260: {
          /* n:"BrtEndPNPair", */
          T: -1
        },
        261: {
          /* n:"BrtBeginECWebProps", */
          T: 1
        },
        262: {
          /* n:"BrtEndECWebProps", */
          T: -1
        },
        263: {
          /* n:"BrtBeginEcWpTables", */
          T: 1
        },
        264: {
          /* n:"BrtEndECWPTables", */
          T: -1
        },
        265: {
          /* n:"BrtBeginECParams", */
          T: 1
        },
        266: {
          /* n:"BrtEndECParams", */
          T: -1
        },
        267: {
          /* n:"BrtBeginECParam", */
          T: 1
        },
        268: {
          /* n:"BrtEndECParam", */
          T: -1
        },
        269: {
          /* n:"BrtBeginPCDKPIs", */
          T: 1
        },
        270: {
          /* n:"BrtEndPCDKPIs", */
          T: -1
        },
        271: {
          /* n:"BrtBeginPCDKPI", */
          T: 1
        },
        272: {
          /* n:"BrtEndPCDKPI", */
          T: -1
        },
        273: {
          /* n:"BrtBeginDims", */
          T: 1
        },
        274: {
          /* n:"BrtEndDims", */
          T: -1
        },
        275: {
          /* n:"BrtBeginDim", */
          T: 1
        },
        276: {
          /* n:"BrtEndDim", */
          T: -1
        },
        277: {
          /* n:"BrtIndexPartEnd" */
        },
        278: {
          /* n:"BrtBeginStyleSheet", */
          T: 1
        },
        279: {
          /* n:"BrtEndStyleSheet", */
          T: -1
        },
        280: {
          /* n:"BrtBeginSXView", */
          T: 1
        },
        281: {
          /* n:"BrtEndSXVI", */
          T: -1
        },
        282: {
          /* n:"BrtBeginSXVI", */
          T: 1
        },
        283: {
          /* n:"BrtBeginSXVIs", */
          T: 1
        },
        284: {
          /* n:"BrtEndSXVIs", */
          T: -1
        },
        285: {
          /* n:"BrtBeginSXVD", */
          T: 1
        },
        286: {
          /* n:"BrtEndSXVD", */
          T: -1
        },
        287: {
          /* n:"BrtBeginSXVDs", */
          T: 1
        },
        288: {
          /* n:"BrtEndSXVDs", */
          T: -1
        },
        289: {
          /* n:"BrtBeginSXPI", */
          T: 1
        },
        290: {
          /* n:"BrtEndSXPI", */
          T: -1
        },
        291: {
          /* n:"BrtBeginSXPIs", */
          T: 1
        },
        292: {
          /* n:"BrtEndSXPIs", */
          T: -1
        },
        293: {
          /* n:"BrtBeginSXDI", */
          T: 1
        },
        294: {
          /* n:"BrtEndSXDI", */
          T: -1
        },
        295: {
          /* n:"BrtBeginSXDIs", */
          T: 1
        },
        296: {
          /* n:"BrtEndSXDIs", */
          T: -1
        },
        297: {
          /* n:"BrtBeginSXLI", */
          T: 1
        },
        298: {
          /* n:"BrtEndSXLI", */
          T: -1
        },
        299: {
          /* n:"BrtBeginSXLIRws", */
          T: 1
        },
        300: {
          /* n:"BrtEndSXLIRws", */
          T: -1
        },
        301: {
          /* n:"BrtBeginSXLICols", */
          T: 1
        },
        302: {
          /* n:"BrtEndSXLICols", */
          T: -1
        },
        303: {
          /* n:"BrtBeginSXFormat", */
          T: 1
        },
        304: {
          /* n:"BrtEndSXFormat", */
          T: -1
        },
        305: {
          /* n:"BrtBeginSXFormats", */
          T: 1
        },
        306: {
          /* n:"BrtEndSxFormats", */
          T: -1
        },
        307: {
          /* n:"BrtBeginSxSelect", */
          T: 1
        },
        308: {
          /* n:"BrtEndSxSelect", */
          T: -1
        },
        309: {
          /* n:"BrtBeginISXVDRws", */
          T: 1
        },
        310: {
          /* n:"BrtEndISXVDRws", */
          T: -1
        },
        311: {
          /* n:"BrtBeginISXVDCols", */
          T: 1
        },
        312: {
          /* n:"BrtEndISXVDCols", */
          T: -1
        },
        313: {
          /* n:"BrtEndSXLocation", */
          T: -1
        },
        314: {
          /* n:"BrtBeginSXLocation", */
          T: 1
        },
        315: {
          /* n:"BrtEndSXView", */
          T: -1
        },
        316: {
          /* n:"BrtBeginSXTHs", */
          T: 1
        },
        317: {
          /* n:"BrtEndSXTHs", */
          T: -1
        },
        318: {
          /* n:"BrtBeginSXTH", */
          T: 1
        },
        319: {
          /* n:"BrtEndSXTH", */
          T: -1
        },
        320: {
          /* n:"BrtBeginISXTHRws", */
          T: 1
        },
        321: {
          /* n:"BrtEndISXTHRws", */
          T: -1
        },
        322: {
          /* n:"BrtBeginISXTHCols", */
          T: 1
        },
        323: {
          /* n:"BrtEndISXTHCols", */
          T: -1
        },
        324: {
          /* n:"BrtBeginSXTDMPS", */
          T: 1
        },
        325: {
          /* n:"BrtEndSXTDMPs", */
          T: -1
        },
        326: {
          /* n:"BrtBeginSXTDMP", */
          T: 1
        },
        327: {
          /* n:"BrtEndSXTDMP", */
          T: -1
        },
        328: {
          /* n:"BrtBeginSXTHItems", */
          T: 1
        },
        329: {
          /* n:"BrtEndSXTHItems", */
          T: -1
        },
        330: {
          /* n:"BrtBeginSXTHItem", */
          T: 1
        },
        331: {
          /* n:"BrtEndSXTHItem", */
          T: -1
        },
        332: {
          /* n:"BrtBeginMetadata", */
          T: 1
        },
        333: {
          /* n:"BrtEndMetadata", */
          T: -1
        },
        334: {
          /* n:"BrtBeginEsmdtinfo", */
          T: 1
        },
        335: {
          /* n:"BrtMdtinfo", */
          f: parse_BrtMdtinfo
        },
        336: {
          /* n:"BrtEndEsmdtinfo", */
          T: -1
        },
        337: {
          /* n:"BrtBeginEsmdb", */
          f: parse_BrtBeginEsmdb,
          T: 1
        },
        338: {
          /* n:"BrtEndEsmdb", */
          T: -1
        },
        339: {
          /* n:"BrtBeginEsfmd", */
          T: 1
        },
        340: {
          /* n:"BrtEndEsfmd", */
          T: -1
        },
        341: {
          /* n:"BrtBeginSingleCells", */
          T: 1
        },
        342: {
          /* n:"BrtEndSingleCells", */
          T: -1
        },
        343: {
          /* n:"BrtBeginList", */
          T: 1
        },
        344: {
          /* n:"BrtEndList", */
          T: -1
        },
        345: {
          /* n:"BrtBeginListCols", */
          T: 1
        },
        346: {
          /* n:"BrtEndListCols", */
          T: -1
        },
        347: {
          /* n:"BrtBeginListCol", */
          T: 1
        },
        348: {
          /* n:"BrtEndListCol", */
          T: -1
        },
        349: {
          /* n:"BrtBeginListXmlCPr", */
          T: 1
        },
        350: {
          /* n:"BrtEndListXmlCPr", */
          T: -1
        },
        351: {
          /* n:"BrtListCCFmla" */
        },
        352: {
          /* n:"BrtListTrFmla" */
        },
        353: {
          /* n:"BrtBeginExternals", */
          T: 1
        },
        354: {
          /* n:"BrtEndExternals", */
          T: -1
        },
        355: {
          /* n:"BrtSupBookSrc", */
          f: parse_RelID
        },
        357: {
          /* n:"BrtSupSelf" */
        },
        358: {
          /* n:"BrtSupSame" */
        },
        359: {
          /* n:"BrtSupTabs" */
        },
        360: {
          /* n:"BrtBeginSupBook", */
          T: 1
        },
        361: {
          /* n:"BrtPlaceholderName" */
        },
        362: {
          /* n:"BrtExternSheet", */
          f: parse_ExternSheet
        },
        363: {
          /* n:"BrtExternTableStart" */
        },
        364: {
          /* n:"BrtExternTableEnd" */
        },
        366: {
          /* n:"BrtExternRowHdr" */
        },
        367: {
          /* n:"BrtExternCellBlank" */
        },
        368: {
          /* n:"BrtExternCellReal" */
        },
        369: {
          /* n:"BrtExternCellBool" */
        },
        370: {
          /* n:"BrtExternCellError" */
        },
        371: {
          /* n:"BrtExternCellString" */
        },
        372: {
          /* n:"BrtBeginEsmdx", */
          T: 1
        },
        373: {
          /* n:"BrtEndEsmdx", */
          T: -1
        },
        374: {
          /* n:"BrtBeginMdxSet", */
          T: 1
        },
        375: {
          /* n:"BrtEndMdxSet", */
          T: -1
        },
        376: {
          /* n:"BrtBeginMdxMbrProp", */
          T: 1
        },
        377: {
          /* n:"BrtEndMdxMbrProp", */
          T: -1
        },
        378: {
          /* n:"BrtBeginMdxKPI", */
          T: 1
        },
        379: {
          /* n:"BrtEndMdxKPI", */
          T: -1
        },
        380: {
          /* n:"BrtBeginEsstr", */
          T: 1
        },
        381: {
          /* n:"BrtEndEsstr", */
          T: -1
        },
        382: {
          /* n:"BrtBeginPRFItem", */
          T: 1
        },
        383: {
          /* n:"BrtEndPRFItem", */
          T: -1
        },
        384: {
          /* n:"BrtBeginPivotCacheIDs", */
          T: 1
        },
        385: {
          /* n:"BrtEndPivotCacheIDs", */
          T: -1
        },
        386: {
          /* n:"BrtBeginPivotCacheID", */
          T: 1
        },
        387: {
          /* n:"BrtEndPivotCacheID", */
          T: -1
        },
        388: {
          /* n:"BrtBeginISXVIs", */
          T: 1
        },
        389: {
          /* n:"BrtEndISXVIs", */
          T: -1
        },
        390: {
          /* n:"BrtBeginColInfos", */
          T: 1
        },
        391: {
          /* n:"BrtEndColInfos", */
          T: -1
        },
        392: {
          /* n:"BrtBeginRwBrk", */
          T: 1
        },
        393: {
          /* n:"BrtEndRwBrk", */
          T: -1
        },
        394: {
          /* n:"BrtBeginColBrk", */
          T: 1
        },
        395: {
          /* n:"BrtEndColBrk", */
          T: -1
        },
        396: {
          /* n:"BrtBrk" */
        },
        397: {
          /* n:"BrtUserBookView" */
        },
        398: {
          /* n:"BrtInfo" */
        },
        399: {
          /* n:"BrtCUsr" */
        },
        400: {
          /* n:"BrtUsr" */
        },
        401: {
          /* n:"BrtBeginUsers", */
          T: 1
        },
        403: {
          /* n:"BrtEOF" */
        },
        404: {
          /* n:"BrtUCR" */
        },
        405: {
          /* n:"BrtRRInsDel" */
        },
        406: {
          /* n:"BrtRREndInsDel" */
        },
        407: {
          /* n:"BrtRRMove" */
        },
        408: {
          /* n:"BrtRREndMove" */
        },
        409: {
          /* n:"BrtRRChgCell" */
        },
        410: {
          /* n:"BrtRREndChgCell" */
        },
        411: {
          /* n:"BrtRRHeader" */
        },
        412: {
          /* n:"BrtRRUserView" */
        },
        413: {
          /* n:"BrtRRRenSheet" */
        },
        414: {
          /* n:"BrtRRInsertSh" */
        },
        415: {
          /* n:"BrtRRDefName" */
        },
        416: {
          /* n:"BrtRRNote" */
        },
        417: {
          /* n:"BrtRRConflict" */
        },
        418: {
          /* n:"BrtRRTQSIF" */
        },
        419: {
          /* n:"BrtRRFormat" */
        },
        420: {
          /* n:"BrtRREndFormat" */
        },
        421: {
          /* n:"BrtRRAutoFmt" */
        },
        422: {
          /* n:"BrtBeginUserShViews", */
          T: 1
        },
        423: {
          /* n:"BrtBeginUserShView", */
          T: 1
        },
        424: {
          /* n:"BrtEndUserShView", */
          T: -1
        },
        425: {
          /* n:"BrtEndUserShViews", */
          T: -1
        },
        426: {
          /* n:"BrtArrFmla", */
          f: parse_BrtArrFmla
        },
        427: {
          /* n:"BrtShrFmla", */
          f: parse_BrtShrFmla
        },
        428: {
          /* n:"BrtTable" */
        },
        429: {
          /* n:"BrtBeginExtConnections", */
          T: 1
        },
        430: {
          /* n:"BrtEndExtConnections", */
          T: -1
        },
        431: {
          /* n:"BrtBeginPCDCalcMems", */
          T: 1
        },
        432: {
          /* n:"BrtEndPCDCalcMems", */
          T: -1
        },
        433: {
          /* n:"BrtBeginPCDCalcMem", */
          T: 1
        },
        434: {
          /* n:"BrtEndPCDCalcMem", */
          T: -1
        },
        435: {
          /* n:"BrtBeginPCDHGLevels", */
          T: 1
        },
        436: {
          /* n:"BrtEndPCDHGLevels", */
          T: -1
        },
        437: {
          /* n:"BrtBeginPCDHGLevel", */
          T: 1
        },
        438: {
          /* n:"BrtEndPCDHGLevel", */
          T: -1
        },
        439: {
          /* n:"BrtBeginPCDHGLGroups", */
          T: 1
        },
        440: {
          /* n:"BrtEndPCDHGLGroups", */
          T: -1
        },
        441: {
          /* n:"BrtBeginPCDHGLGroup", */
          T: 1
        },
        442: {
          /* n:"BrtEndPCDHGLGroup", */
          T: -1
        },
        443: {
          /* n:"BrtBeginPCDHGLGMembers", */
          T: 1
        },
        444: {
          /* n:"BrtEndPCDHGLGMembers", */
          T: -1
        },
        445: {
          /* n:"BrtBeginPCDHGLGMember", */
          T: 1
        },
        446: {
          /* n:"BrtEndPCDHGLGMember", */
          T: -1
        },
        447: {
          /* n:"BrtBeginQSI", */
          T: 1
        },
        448: {
          /* n:"BrtEndQSI", */
          T: -1
        },
        449: {
          /* n:"BrtBeginQSIR", */
          T: 1
        },
        450: {
          /* n:"BrtEndQSIR", */
          T: -1
        },
        451: {
          /* n:"BrtBeginDeletedNames", */
          T: 1
        },
        452: {
          /* n:"BrtEndDeletedNames", */
          T: -1
        },
        453: {
          /* n:"BrtBeginDeletedName", */
          T: 1
        },
        454: {
          /* n:"BrtEndDeletedName", */
          T: -1
        },
        455: {
          /* n:"BrtBeginQSIFs", */
          T: 1
        },
        456: {
          /* n:"BrtEndQSIFs", */
          T: -1
        },
        457: {
          /* n:"BrtBeginQSIF", */
          T: 1
        },
        458: {
          /* n:"BrtEndQSIF", */
          T: -1
        },
        459: {
          /* n:"BrtBeginAutoSortScope", */
          T: 1
        },
        460: {
          /* n:"BrtEndAutoSortScope", */
          T: -1
        },
        461: {
          /* n:"BrtBeginConditionalFormatting", */
          T: 1
        },
        462: {
          /* n:"BrtEndConditionalFormatting", */
          T: -1
        },
        463: {
          /* n:"BrtBeginCFRule", */
          T: 1
        },
        464: {
          /* n:"BrtEndCFRule", */
          T: -1
        },
        465: {
          /* n:"BrtBeginIconSet", */
          T: 1
        },
        466: {
          /* n:"BrtEndIconSet", */
          T: -1
        },
        467: {
          /* n:"BrtBeginDatabar", */
          T: 1
        },
        468: {
          /* n:"BrtEndDatabar", */
          T: -1
        },
        469: {
          /* n:"BrtBeginColorScale", */
          T: 1
        },
        470: {
          /* n:"BrtEndColorScale", */
          T: -1
        },
        471: {
          /* n:"BrtCFVO" */
        },
        472: {
          /* n:"BrtExternValueMeta" */
        },
        473: {
          /* n:"BrtBeginColorPalette", */
          T: 1
        },
        474: {
          /* n:"BrtEndColorPalette", */
          T: -1
        },
        475: {
          /* n:"BrtIndexedColor" */
        },
        476: {
          /* n:"BrtMargins", */
          f: parse_BrtMargins
        },
        477: {
          /* n:"BrtPrintOptions" */
        },
        478: {
          /* n:"BrtPageSetup" */
        },
        479: {
          /* n:"BrtBeginHeaderFooter", */
          T: 1
        },
        480: {
          /* n:"BrtEndHeaderFooter", */
          T: -1
        },
        481: {
          /* n:"BrtBeginSXCrtFormat", */
          T: 1
        },
        482: {
          /* n:"BrtEndSXCrtFormat", */
          T: -1
        },
        483: {
          /* n:"BrtBeginSXCrtFormats", */
          T: 1
        },
        484: {
          /* n:"BrtEndSXCrtFormats", */
          T: -1
        },
        485: {
          /* n:"BrtWsFmtInfo", */
          f: parse_BrtWsFmtInfo
        },
        486: {
          /* n:"BrtBeginMgs", */
          T: 1
        },
        487: {
          /* n:"BrtEndMGs", */
          T: -1
        },
        488: {
          /* n:"BrtBeginMGMaps", */
          T: 1
        },
        489: {
          /* n:"BrtEndMGMaps", */
          T: -1
        },
        490: {
          /* n:"BrtBeginMG", */
          T: 1
        },
        491: {
          /* n:"BrtEndMG", */
          T: -1
        },
        492: {
          /* n:"BrtBeginMap", */
          T: 1
        },
        493: {
          /* n:"BrtEndMap", */
          T: -1
        },
        494: {
          /* n:"BrtHLink", */
          f: parse_BrtHLink
        },
        495: {
          /* n:"BrtBeginDCon", */
          T: 1
        },
        496: {
          /* n:"BrtEndDCon", */
          T: -1
        },
        497: {
          /* n:"BrtBeginDRefs", */
          T: 1
        },
        498: {
          /* n:"BrtEndDRefs", */
          T: -1
        },
        499: {
          /* n:"BrtDRef" */
        },
        500: {
          /* n:"BrtBeginScenMan", */
          T: 1
        },
        501: {
          /* n:"BrtEndScenMan", */
          T: -1
        },
        502: {
          /* n:"BrtBeginSct", */
          T: 1
        },
        503: {
          /* n:"BrtEndSct", */
          T: -1
        },
        504: {
          /* n:"BrtSlc" */
        },
        505: {
          /* n:"BrtBeginDXFs", */
          T: 1
        },
        506: {
          /* n:"BrtEndDXFs", */
          T: -1
        },
        507: {
          /* n:"BrtDXF" */
        },
        508: {
          /* n:"BrtBeginTableStyles", */
          T: 1
        },
        509: {
          /* n:"BrtEndTableStyles", */
          T: -1
        },
        510: {
          /* n:"BrtBeginTableStyle", */
          T: 1
        },
        511: {
          /* n:"BrtEndTableStyle", */
          T: -1
        },
        512: {
          /* n:"BrtTableStyleElement" */
        },
        513: {
          /* n:"BrtTableStyleClient" */
        },
        514: {
          /* n:"BrtBeginVolDeps", */
          T: 1
        },
        515: {
          /* n:"BrtEndVolDeps", */
          T: -1
        },
        516: {
          /* n:"BrtBeginVolType", */
          T: 1
        },
        517: {
          /* n:"BrtEndVolType", */
          T: -1
        },
        518: {
          /* n:"BrtBeginVolMain", */
          T: 1
        },
        519: {
          /* n:"BrtEndVolMain", */
          T: -1
        },
        520: {
          /* n:"BrtBeginVolTopic", */
          T: 1
        },
        521: {
          /* n:"BrtEndVolTopic", */
          T: -1
        },
        522: {
          /* n:"BrtVolSubtopic" */
        },
        523: {
          /* n:"BrtVolRef" */
        },
        524: {
          /* n:"BrtVolNum" */
        },
        525: {
          /* n:"BrtVolErr" */
        },
        526: {
          /* n:"BrtVolStr" */
        },
        527: {
          /* n:"BrtVolBool" */
        },
        528: {
          /* n:"BrtBeginCalcChain$", */
          T: 1
        },
        529: {
          /* n:"BrtEndCalcChain$", */
          T: -1
        },
        530: {
          /* n:"BrtBeginSortState", */
          T: 1
        },
        531: {
          /* n:"BrtEndSortState", */
          T: -1
        },
        532: {
          /* n:"BrtBeginSortCond", */
          T: 1
        },
        533: {
          /* n:"BrtEndSortCond", */
          T: -1
        },
        534: {
          /* n:"BrtBookProtection" */
        },
        535: {
          /* n:"BrtSheetProtection" */
        },
        536: {
          /* n:"BrtRangeProtection" */
        },
        537: {
          /* n:"BrtPhoneticInfo" */
        },
        538: {
          /* n:"BrtBeginECTxtWiz", */
          T: 1
        },
        539: {
          /* n:"BrtEndECTxtWiz", */
          T: -1
        },
        540: {
          /* n:"BrtBeginECTWFldInfoLst", */
          T: 1
        },
        541: {
          /* n:"BrtEndECTWFldInfoLst", */
          T: -1
        },
        542: {
          /* n:"BrtBeginECTwFldInfo", */
          T: 1
        },
        548: {
          /* n:"BrtFileSharing" */
        },
        549: {
          /* n:"BrtOleSize" */
        },
        550: {
          /* n:"BrtDrawing", */
          f: parse_RelID
        },
        551: {
          /* n:"BrtLegacyDrawing" */
        },
        552: {
          /* n:"BrtLegacyDrawingHF" */
        },
        553: {
          /* n:"BrtWebOpt" */
        },
        554: {
          /* n:"BrtBeginWebPubItems", */
          T: 1
        },
        555: {
          /* n:"BrtEndWebPubItems", */
          T: -1
        },
        556: {
          /* n:"BrtBeginWebPubItem", */
          T: 1
        },
        557: {
          /* n:"BrtEndWebPubItem", */
          T: -1
        },
        558: {
          /* n:"BrtBeginSXCondFmt", */
          T: 1
        },
        559: {
          /* n:"BrtEndSXCondFmt", */
          T: -1
        },
        560: {
          /* n:"BrtBeginSXCondFmts", */
          T: 1
        },
        561: {
          /* n:"BrtEndSXCondFmts", */
          T: -1
        },
        562: {
          /* n:"BrtBkHim" */
        },
        564: {
          /* n:"BrtColor" */
        },
        565: {
          /* n:"BrtBeginIndexedColors", */
          T: 1
        },
        566: {
          /* n:"BrtEndIndexedColors", */
          T: -1
        },
        569: {
          /* n:"BrtBeginMRUColors", */
          T: 1
        },
        570: {
          /* n:"BrtEndMRUColors", */
          T: -1
        },
        572: {
          /* n:"BrtMRUColor" */
        },
        573: {
          /* n:"BrtBeginDVals", */
          T: 1
        },
        574: {
          /* n:"BrtEndDVals", */
          T: -1
        },
        577: {
          /* n:"BrtSupNameStart" */
        },
        578: {
          /* n:"BrtSupNameValueStart" */
        },
        579: {
          /* n:"BrtSupNameValueEnd" */
        },
        580: {
          /* n:"BrtSupNameNum" */
        },
        581: {
          /* n:"BrtSupNameErr" */
        },
        582: {
          /* n:"BrtSupNameSt" */
        },
        583: {
          /* n:"BrtSupNameNil" */
        },
        584: {
          /* n:"BrtSupNameBool" */
        },
        585: {
          /* n:"BrtSupNameFmla" */
        },
        586: {
          /* n:"BrtSupNameBits" */
        },
        587: {
          /* n:"BrtSupNameEnd" */
        },
        588: {
          /* n:"BrtEndSupBook", */
          T: -1
        },
        589: {
          /* n:"BrtCellSmartTagProperty" */
        },
        590: {
          /* n:"BrtBeginCellSmartTag", */
          T: 1
        },
        591: {
          /* n:"BrtEndCellSmartTag", */
          T: -1
        },
        592: {
          /* n:"BrtBeginCellSmartTags", */
          T: 1
        },
        593: {
          /* n:"BrtEndCellSmartTags", */
          T: -1
        },
        594: {
          /* n:"BrtBeginSmartTags", */
          T: 1
        },
        595: {
          /* n:"BrtEndSmartTags", */
          T: -1
        },
        596: {
          /* n:"BrtSmartTagType" */
        },
        597: {
          /* n:"BrtBeginSmartTagTypes", */
          T: 1
        },
        598: {
          /* n:"BrtEndSmartTagTypes", */
          T: -1
        },
        599: {
          /* n:"BrtBeginSXFilters", */
          T: 1
        },
        600: {
          /* n:"BrtEndSXFilters", */
          T: -1
        },
        601: {
          /* n:"BrtBeginSXFILTER", */
          T: 1
        },
        602: {
          /* n:"BrtEndSXFilter", */
          T: -1
        },
        603: {
          /* n:"BrtBeginFills", */
          T: 1
        },
        604: {
          /* n:"BrtEndFills", */
          T: -1
        },
        605: {
          /* n:"BrtBeginCellWatches", */
          T: 1
        },
        606: {
          /* n:"BrtEndCellWatches", */
          T: -1
        },
        607: {
          /* n:"BrtCellWatch" */
        },
        608: {
          /* n:"BrtBeginCRErrs", */
          T: 1
        },
        609: {
          /* n:"BrtEndCRErrs", */
          T: -1
        },
        610: {
          /* n:"BrtCrashRecErr" */
        },
        611: {
          /* n:"BrtBeginFonts", */
          T: 1
        },
        612: {
          /* n:"BrtEndFonts", */
          T: -1
        },
        613: {
          /* n:"BrtBeginBorders", */
          T: 1
        },
        614: {
          /* n:"BrtEndBorders", */
          T: -1
        },
        615: {
          /* n:"BrtBeginFmts", */
          T: 1
        },
        616: {
          /* n:"BrtEndFmts", */
          T: -1
        },
        617: {
          /* n:"BrtBeginCellXFs", */
          T: 1
        },
        618: {
          /* n:"BrtEndCellXFs", */
          T: -1
        },
        619: {
          /* n:"BrtBeginStyles", */
          T: 1
        },
        620: {
          /* n:"BrtEndStyles", */
          T: -1
        },
        625: {
          /* n:"BrtBigName" */
        },
        626: {
          /* n:"BrtBeginCellStyleXFs", */
          T: 1
        },
        627: {
          /* n:"BrtEndCellStyleXFs", */
          T: -1
        },
        628: {
          /* n:"BrtBeginComments", */
          T: 1
        },
        629: {
          /* n:"BrtEndComments", */
          T: -1
        },
        630: {
          /* n:"BrtBeginCommentAuthors", */
          T: 1
        },
        631: {
          /* n:"BrtEndCommentAuthors", */
          T: -1
        },
        632: {
          /* n:"BrtCommentAuthor", */
          f: parse_BrtCommentAuthor
        },
        633: {
          /* n:"BrtBeginCommentList", */
          T: 1
        },
        634: {
          /* n:"BrtEndCommentList", */
          T: -1
        },
        635: {
          /* n:"BrtBeginComment", */
          T: 1,
          f: parse_BrtBeginComment
        },
        636: {
          /* n:"BrtEndComment", */
          T: -1
        },
        637: {
          /* n:"BrtCommentText", */
          f: parse_BrtCommentText
        },
        638: {
          /* n:"BrtBeginOleObjects", */
          T: 1
        },
        639: {
          /* n:"BrtOleObject" */
        },
        640: {
          /* n:"BrtEndOleObjects", */
          T: -1
        },
        641: {
          /* n:"BrtBeginSxrules", */
          T: 1
        },
        642: {
          /* n:"BrtEndSxRules", */
          T: -1
        },
        643: {
          /* n:"BrtBeginActiveXControls", */
          T: 1
        },
        644: {
          /* n:"BrtActiveX" */
        },
        645: {
          /* n:"BrtEndActiveXControls", */
          T: -1
        },
        646: {
          /* n:"BrtBeginPCDSDTCEMembersSortBy", */
          T: 1
        },
        648: {
          /* n:"BrtBeginCellIgnoreECs", */
          T: 1
        },
        649: {
          /* n:"BrtCellIgnoreEC" */
        },
        650: {
          /* n:"BrtEndCellIgnoreECs", */
          T: -1
        },
        651: {
          /* n:"BrtCsProp", */
          f: parse_BrtCsProp
        },
        652: {
          /* n:"BrtCsPageSetup" */
        },
        653: {
          /* n:"BrtBeginUserCsViews", */
          T: 1
        },
        654: {
          /* n:"BrtEndUserCsViews", */
          T: -1
        },
        655: {
          /* n:"BrtBeginUserCsView", */
          T: 1
        },
        656: {
          /* n:"BrtEndUserCsView", */
          T: -1
        },
        657: {
          /* n:"BrtBeginPcdSFCIEntries", */
          T: 1
        },
        658: {
          /* n:"BrtEndPCDSFCIEntries", */
          T: -1
        },
        659: {
          /* n:"BrtPCDSFCIEntry" */
        },
        660: {
          /* n:"BrtBeginListParts", */
          T: 1
        },
        661: {
          /* n:"BrtListPart" */
        },
        662: {
          /* n:"BrtEndListParts", */
          T: -1
        },
        663: {
          /* n:"BrtSheetCalcProp" */
        },
        664: {
          /* n:"BrtBeginFnGroup", */
          T: 1
        },
        665: {
          /* n:"BrtFnGroup" */
        },
        666: {
          /* n:"BrtEndFnGroup", */
          T: -1
        },
        667: {
          /* n:"BrtSupAddin" */
        },
        668: {
          /* n:"BrtSXTDMPOrder" */
        },
        669: {
          /* n:"BrtCsProtection" */
        },
        671: {
          /* n:"BrtBeginWsSortMap", */
          T: 1
        },
        672: {
          /* n:"BrtEndWsSortMap", */
          T: -1
        },
        673: {
          /* n:"BrtBeginRRSort", */
          T: 1
        },
        674: {
          /* n:"BrtEndRRSort", */
          T: -1
        },
        675: {
          /* n:"BrtRRSortItem" */
        },
        676: {
          /* n:"BrtFileSharingIso" */
        },
        677: {
          /* n:"BrtBookProtectionIso" */
        },
        678: {
          /* n:"BrtSheetProtectionIso" */
        },
        679: {
          /* n:"BrtCsProtectionIso" */
        },
        680: {
          /* n:"BrtRangeProtectionIso" */
        },
        681: {
          /* n:"BrtDValList" */
        },
        1024: {
          /* n:"BrtRwDescent" */
        },
        1025: {
          /* n:"BrtKnownFonts" */
        },
        1026: {
          /* n:"BrtBeginSXTupleSet", */
          T: 1
        },
        1027: {
          /* n:"BrtEndSXTupleSet", */
          T: -1
        },
        1028: {
          /* n:"BrtBeginSXTupleSetHeader", */
          T: 1
        },
        1029: {
          /* n:"BrtEndSXTupleSetHeader", */
          T: -1
        },
        1030: {
          /* n:"BrtSXTupleSetHeaderItem" */
        },
        1031: {
          /* n:"BrtBeginSXTupleSetData", */
          T: 1
        },
        1032: {
          /* n:"BrtEndSXTupleSetData", */
          T: -1
        },
        1033: {
          /* n:"BrtBeginSXTupleSetRow", */
          T: 1
        },
        1034: {
          /* n:"BrtEndSXTupleSetRow", */
          T: -1
        },
        1035: {
          /* n:"BrtSXTupleSetRowItem" */
        },
        1036: {
          /* n:"BrtNameExt" */
        },
        1037: {
          /* n:"BrtPCDH14" */
        },
        1038: {
          /* n:"BrtBeginPCDCalcMem14", */
          T: 1
        },
        1039: {
          /* n:"BrtEndPCDCalcMem14", */
          T: -1
        },
        1040: {
          /* n:"BrtSXTH14" */
        },
        1041: {
          /* n:"BrtBeginSparklineGroup", */
          T: 1
        },
        1042: {
          /* n:"BrtEndSparklineGroup", */
          T: -1
        },
        1043: {
          /* n:"BrtSparkline" */
        },
        1044: {
          /* n:"BrtSXDI14" */
        },
        1045: {
          /* n:"BrtWsFmtInfoEx14" */
        },
        1046: {
          /* n:"BrtBeginConditionalFormatting14", */
          T: 1
        },
        1047: {
          /* n:"BrtEndConditionalFormatting14", */
          T: -1
        },
        1048: {
          /* n:"BrtBeginCFRule14", */
          T: 1
        },
        1049: {
          /* n:"BrtEndCFRule14", */
          T: -1
        },
        1050: {
          /* n:"BrtCFVO14" */
        },
        1051: {
          /* n:"BrtBeginDatabar14", */
          T: 1
        },
        1052: {
          /* n:"BrtBeginIconSet14", */
          T: 1
        },
        1053: {
          /* n:"BrtDVal14", */
          f: parse_BrtDVal14
        },
        1054: {
          /* n:"BrtBeginDVals14", */
          T: 1
        },
        1055: {
          /* n:"BrtColor14" */
        },
        1056: {
          /* n:"BrtBeginSparklines", */
          T: 1
        },
        1057: {
          /* n:"BrtEndSparklines", */
          T: -1
        },
        1058: {
          /* n:"BrtBeginSparklineGroups", */
          T: 1
        },
        1059: {
          /* n:"BrtEndSparklineGroups", */
          T: -1
        },
        1061: {
          /* n:"BrtSXVD14" */
        },
        1062: {
          /* n:"BrtBeginSXView14", */
          T: 1
        },
        1063: {
          /* n:"BrtEndSXView14", */
          T: -1
        },
        1064: {
          /* n:"BrtBeginSXView16", */
          T: 1
        },
        1065: {
          /* n:"BrtEndSXView16", */
          T: -1
        },
        1066: {
          /* n:"BrtBeginPCD14", */
          T: 1
        },
        1067: {
          /* n:"BrtEndPCD14", */
          T: -1
        },
        1068: {
          /* n:"BrtBeginExtConn14", */
          T: 1
        },
        1069: {
          /* n:"BrtEndExtConn14", */
          T: -1
        },
        1070: {
          /* n:"BrtBeginSlicerCacheIDs", */
          T: 1
        },
        1071: {
          /* n:"BrtEndSlicerCacheIDs", */
          T: -1
        },
        1072: {
          /* n:"BrtBeginSlicerCacheID", */
          T: 1
        },
        1073: {
          /* n:"BrtEndSlicerCacheID", */
          T: -1
        },
        1075: {
          /* n:"BrtBeginSlicerCache", */
          T: 1
        },
        1076: {
          /* n:"BrtEndSlicerCache", */
          T: -1
        },
        1077: {
          /* n:"BrtBeginSlicerCacheDef", */
          T: 1
        },
        1078: {
          /* n:"BrtEndSlicerCacheDef", */
          T: -1
        },
        1079: {
          /* n:"BrtBeginSlicersEx", */
          T: 1
        },
        1080: {
          /* n:"BrtEndSlicersEx", */
          T: -1
        },
        1081: {
          /* n:"BrtBeginSlicerEx", */
          T: 1
        },
        1082: {
          /* n:"BrtEndSlicerEx", */
          T: -1
        },
        1083: {
          /* n:"BrtBeginSlicer", */
          T: 1
        },
        1084: {
          /* n:"BrtEndSlicer", */
          T: -1
        },
        1085: {
          /* n:"BrtSlicerCachePivotTables" */
        },
        1086: {
          /* n:"BrtBeginSlicerCacheOlapImpl", */
          T: 1
        },
        1087: {
          /* n:"BrtEndSlicerCacheOlapImpl", */
          T: -1
        },
        1088: {
          /* n:"BrtBeginSlicerCacheLevelsData", */
          T: 1
        },
        1089: {
          /* n:"BrtEndSlicerCacheLevelsData", */
          T: -1
        },
        1090: {
          /* n:"BrtBeginSlicerCacheLevelData", */
          T: 1
        },
        1091: {
          /* n:"BrtEndSlicerCacheLevelData", */
          T: -1
        },
        1092: {
          /* n:"BrtBeginSlicerCacheSiRanges", */
          T: 1
        },
        1093: {
          /* n:"BrtEndSlicerCacheSiRanges", */
          T: -1
        },
        1094: {
          /* n:"BrtBeginSlicerCacheSiRange", */
          T: 1
        },
        1095: {
          /* n:"BrtEndSlicerCacheSiRange", */
          T: -1
        },
        1096: {
          /* n:"BrtSlicerCacheOlapItem" */
        },
        1097: {
          /* n:"BrtBeginSlicerCacheSelections", */
          T: 1
        },
        1098: {
          /* n:"BrtSlicerCacheSelection" */
        },
        1099: {
          /* n:"BrtEndSlicerCacheSelections", */
          T: -1
        },
        1100: {
          /* n:"BrtBeginSlicerCacheNative", */
          T: 1
        },
        1101: {
          /* n:"BrtEndSlicerCacheNative", */
          T: -1
        },
        1102: {
          /* n:"BrtSlicerCacheNativeItem" */
        },
        1103: {
          /* n:"BrtRangeProtection14" */
        },
        1104: {
          /* n:"BrtRangeProtectionIso14" */
        },
        1105: {
          /* n:"BrtCellIgnoreEC14" */
        },
        1111: {
          /* n:"BrtList14" */
        },
        1112: {
          /* n:"BrtCFIcon" */
        },
        1113: {
          /* n:"BrtBeginSlicerCachesPivotCacheIDs", */
          T: 1
        },
        1114: {
          /* n:"BrtEndSlicerCachesPivotCacheIDs", */
          T: -1
        },
        1115: {
          /* n:"BrtBeginSlicers", */
          T: 1
        },
        1116: {
          /* n:"BrtEndSlicers", */
          T: -1
        },
        1117: {
          /* n:"BrtWbProp14" */
        },
        1118: {
          /* n:"BrtBeginSXEdit", */
          T: 1
        },
        1119: {
          /* n:"BrtEndSXEdit", */
          T: -1
        },
        1120: {
          /* n:"BrtBeginSXEdits", */
          T: 1
        },
        1121: {
          /* n:"BrtEndSXEdits", */
          T: -1
        },
        1122: {
          /* n:"BrtBeginSXChange", */
          T: 1
        },
        1123: {
          /* n:"BrtEndSXChange", */
          T: -1
        },
        1124: {
          /* n:"BrtBeginSXChanges", */
          T: 1
        },
        1125: {
          /* n:"BrtEndSXChanges", */
          T: -1
        },
        1126: {
          /* n:"BrtSXTupleItems" */
        },
        1128: {
          /* n:"BrtBeginSlicerStyle", */
          T: 1
        },
        1129: {
          /* n:"BrtEndSlicerStyle", */
          T: -1
        },
        1130: {
          /* n:"BrtSlicerStyleElement" */
        },
        1131: {
          /* n:"BrtBeginStyleSheetExt14", */
          T: 1
        },
        1132: {
          /* n:"BrtEndStyleSheetExt14", */
          T: -1
        },
        1133: {
          /* n:"BrtBeginSlicerCachesPivotCacheID", */
          T: 1
        },
        1134: {
          /* n:"BrtEndSlicerCachesPivotCacheID", */
          T: -1
        },
        1135: {
          /* n:"BrtBeginConditionalFormattings", */
          T: 1
        },
        1136: {
          /* n:"BrtEndConditionalFormattings", */
          T: -1
        },
        1137: {
          /* n:"BrtBeginPCDCalcMemExt", */
          T: 1
        },
        1138: {
          /* n:"BrtEndPCDCalcMemExt", */
          T: -1
        },
        1139: {
          /* n:"BrtBeginPCDCalcMemsExt", */
          T: 1
        },
        1140: {
          /* n:"BrtEndPCDCalcMemsExt", */
          T: -1
        },
        1141: {
          /* n:"BrtPCDField14" */
        },
        1142: {
          /* n:"BrtBeginSlicerStyles", */
          T: 1
        },
        1143: {
          /* n:"BrtEndSlicerStyles", */
          T: -1
        },
        1144: {
          /* n:"BrtBeginSlicerStyleElements", */
          T: 1
        },
        1145: {
          /* n:"BrtEndSlicerStyleElements", */
          T: -1
        },
        1146: {
          /* n:"BrtCFRuleExt" */
        },
        1147: {
          /* n:"BrtBeginSXCondFmt14", */
          T: 1
        },
        1148: {
          /* n:"BrtEndSXCondFmt14", */
          T: -1
        },
        1149: {
          /* n:"BrtBeginSXCondFmts14", */
          T: 1
        },
        1150: {
          /* n:"BrtEndSXCondFmts14", */
          T: -1
        },
        1152: {
          /* n:"BrtBeginSortCond14", */
          T: 1
        },
        1153: {
          /* n:"BrtEndSortCond14", */
          T: -1
        },
        1154: {
          /* n:"BrtEndDVals14", */
          T: -1
        },
        1155: {
          /* n:"BrtEndIconSet14", */
          T: -1
        },
        1156: {
          /* n:"BrtEndDatabar14", */
          T: -1
        },
        1157: {
          /* n:"BrtBeginColorScale14", */
          T: 1
        },
        1158: {
          /* n:"BrtEndColorScale14", */
          T: -1
        },
        1159: {
          /* n:"BrtBeginSxrules14", */
          T: 1
        },
        1160: {
          /* n:"BrtEndSxrules14", */
          T: -1
        },
        1161: {
          /* n:"BrtBeginPRule14", */
          T: 1
        },
        1162: {
          /* n:"BrtEndPRule14", */
          T: -1
        },
        1163: {
          /* n:"BrtBeginPRFilters14", */
          T: 1
        },
        1164: {
          /* n:"BrtEndPRFilters14", */
          T: -1
        },
        1165: {
          /* n:"BrtBeginPRFilter14", */
          T: 1
        },
        1166: {
          /* n:"BrtEndPRFilter14", */
          T: -1
        },
        1167: {
          /* n:"BrtBeginPRFItem14", */
          T: 1
        },
        1168: {
          /* n:"BrtEndPRFItem14", */
          T: -1
        },
        1169: {
          /* n:"BrtBeginCellIgnoreECs14", */
          T: 1
        },
        1170: {
          /* n:"BrtEndCellIgnoreECs14", */
          T: -1
        },
        1171: {
          /* n:"BrtDxf14" */
        },
        1172: {
          /* n:"BrtBeginDxF14s", */
          T: 1
        },
        1173: {
          /* n:"BrtEndDxf14s", */
          T: -1
        },
        1177: {
          /* n:"BrtFilter14" */
        },
        1178: {
          /* n:"BrtBeginCustomFilters14", */
          T: 1
        },
        1180: {
          /* n:"BrtCustomFilter14" */
        },
        1181: {
          /* n:"BrtIconFilter14" */
        },
        1182: {
          /* n:"BrtPivotCacheConnectionName" */
        },
        2048: {
          /* n:"BrtBeginDecoupledPivotCacheIDs", */
          T: 1
        },
        2049: {
          /* n:"BrtEndDecoupledPivotCacheIDs", */
          T: -1
        },
        2050: {
          /* n:"BrtDecoupledPivotCacheID" */
        },
        2051: {
          /* n:"BrtBeginPivotTableRefs", */
          T: 1
        },
        2052: {
          /* n:"BrtEndPivotTableRefs", */
          T: -1
        },
        2053: {
          /* n:"BrtPivotTableRef" */
        },
        2054: {
          /* n:"BrtSlicerCacheBookPivotTables" */
        },
        2055: {
          /* n:"BrtBeginSxvcells", */
          T: 1
        },
        2056: {
          /* n:"BrtEndSxvcells", */
          T: -1
        },
        2057: {
          /* n:"BrtBeginSxRow", */
          T: 1
        },
        2058: {
          /* n:"BrtEndSxRow", */
          T: -1
        },
        2060: {
          /* n:"BrtPcdCalcMem15" */
        },
        2067: {
          /* n:"BrtQsi15" */
        },
        2068: {
          /* n:"BrtBeginWebExtensions", */
          T: 1
        },
        2069: {
          /* n:"BrtEndWebExtensions", */
          T: -1
        },
        2070: {
          /* n:"BrtWebExtension" */
        },
        2071: {
          /* n:"BrtAbsPath15" */
        },
        2072: {
          /* n:"BrtBeginPivotTableUISettings", */
          T: 1
        },
        2073: {
          /* n:"BrtEndPivotTableUISettings", */
          T: -1
        },
        2075: {
          /* n:"BrtTableSlicerCacheIDs" */
        },
        2076: {
          /* n:"BrtTableSlicerCacheID" */
        },
        2077: {
          /* n:"BrtBeginTableSlicerCache", */
          T: 1
        },
        2078: {
          /* n:"BrtEndTableSlicerCache", */
          T: -1
        },
        2079: {
          /* n:"BrtSxFilter15" */
        },
        2080: {
          /* n:"BrtBeginTimelineCachePivotCacheIDs", */
          T: 1
        },
        2081: {
          /* n:"BrtEndTimelineCachePivotCacheIDs", */
          T: -1
        },
        2082: {
          /* n:"BrtTimelineCachePivotCacheID" */
        },
        2083: {
          /* n:"BrtBeginTimelineCacheIDs", */
          T: 1
        },
        2084: {
          /* n:"BrtEndTimelineCacheIDs", */
          T: -1
        },
        2085: {
          /* n:"BrtBeginTimelineCacheID", */
          T: 1
        },
        2086: {
          /* n:"BrtEndTimelineCacheID", */
          T: -1
        },
        2087: {
          /* n:"BrtBeginTimelinesEx", */
          T: 1
        },
        2088: {
          /* n:"BrtEndTimelinesEx", */
          T: -1
        },
        2089: {
          /* n:"BrtBeginTimelineEx", */
          T: 1
        },
        2090: {
          /* n:"BrtEndTimelineEx", */
          T: -1
        },
        2091: {
          /* n:"BrtWorkBookPr15" */
        },
        2092: {
          /* n:"BrtPCDH15" */
        },
        2093: {
          /* n:"BrtBeginTimelineStyle", */
          T: 1
        },
        2094: {
          /* n:"BrtEndTimelineStyle", */
          T: -1
        },
        2095: {
          /* n:"BrtTimelineStyleElement" */
        },
        2096: {
          /* n:"BrtBeginTimelineStylesheetExt15", */
          T: 1
        },
        2097: {
          /* n:"BrtEndTimelineStylesheetExt15", */
          T: -1
        },
        2098: {
          /* n:"BrtBeginTimelineStyles", */
          T: 1
        },
        2099: {
          /* n:"BrtEndTimelineStyles", */
          T: -1
        },
        2100: {
          /* n:"BrtBeginTimelineStyleElements", */
          T: 1
        },
        2101: {
          /* n:"BrtEndTimelineStyleElements", */
          T: -1
        },
        2102: {
          /* n:"BrtDxf15" */
        },
        2103: {
          /* n:"BrtBeginDxfs15", */
          T: 1
        },
        2104: {
          /* n:"BrtEndDxfs15", */
          T: -1
        },
        2105: {
          /* n:"BrtSlicerCacheHideItemsWithNoData" */
        },
        2106: {
          /* n:"BrtBeginItemUniqueNames", */
          T: 1
        },
        2107: {
          /* n:"BrtEndItemUniqueNames", */
          T: -1
        },
        2108: {
          /* n:"BrtItemUniqueName" */
        },
        2109: {
          /* n:"BrtBeginExtConn15", */
          T: 1
        },
        2110: {
          /* n:"BrtEndExtConn15", */
          T: -1
        },
        2111: {
          /* n:"BrtBeginOledbPr15", */
          T: 1
        },
        2112: {
          /* n:"BrtEndOledbPr15", */
          T: -1
        },
        2113: {
          /* n:"BrtBeginDataFeedPr15", */
          T: 1
        },
        2114: {
          /* n:"BrtEndDataFeedPr15", */
          T: -1
        },
        2115: {
          /* n:"BrtTextPr15" */
        },
        2116: {
          /* n:"BrtRangePr15" */
        },
        2117: {
          /* n:"BrtDbCommand15" */
        },
        2118: {
          /* n:"BrtBeginDbTables15", */
          T: 1
        },
        2119: {
          /* n:"BrtEndDbTables15", */
          T: -1
        },
        2120: {
          /* n:"BrtDbTable15" */
        },
        2121: {
          /* n:"BrtBeginDataModel", */
          T: 1
        },
        2122: {
          /* n:"BrtEndDataModel", */
          T: -1
        },
        2123: {
          /* n:"BrtBeginModelTables", */
          T: 1
        },
        2124: {
          /* n:"BrtEndModelTables", */
          T: -1
        },
        2125: {
          /* n:"BrtModelTable" */
        },
        2126: {
          /* n:"BrtBeginModelRelationships", */
          T: 1
        },
        2127: {
          /* n:"BrtEndModelRelationships", */
          T: -1
        },
        2128: {
          /* n:"BrtModelRelationship" */
        },
        2129: {
          /* n:"BrtBeginECTxtWiz15", */
          T: 1
        },
        2130: {
          /* n:"BrtEndECTxtWiz15", */
          T: -1
        },
        2131: {
          /* n:"BrtBeginECTWFldInfoLst15", */
          T: 1
        },
        2132: {
          /* n:"BrtEndECTWFldInfoLst15", */
          T: -1
        },
        2133: {
          /* n:"BrtBeginECTWFldInfo15", */
          T: 1
        },
        2134: {
          /* n:"BrtFieldListActiveItem" */
        },
        2135: {
          /* n:"BrtPivotCacheIdVersion" */
        },
        2136: {
          /* n:"BrtSXDI15" */
        },
        2137: {
          /* n:"BrtBeginModelTimeGroupings", */
          T: 1
        },
        2138: {
          /* n:"BrtEndModelTimeGroupings", */
          T: -1
        },
        2139: {
          /* n:"BrtBeginModelTimeGrouping", */
          T: 1
        },
        2140: {
          /* n:"BrtEndModelTimeGrouping", */
          T: -1
        },
        2141: {
          /* n:"BrtModelTimeGroupingCalcCol" */
        },
        3072: {
          /* n:"BrtUid" */
        },
        3073: {
          /* n:"BrtRevisionPtr" */
        },
        4096: {
          /* n:"BrtBeginDynamicArrayPr", */
          T: 1
        },
        4097: {
          /* n:"BrtEndDynamicArrayPr", */
          T: -1
        },
        5002: {
          /* n:"BrtBeginRichValueBlock", */
          T: 1
        },
        5003: {
          /* n:"BrtEndRichValueBlock", */
          T: -1
        },
        5081: {
          /* n:"BrtBeginRichFilters", */
          T: 1
        },
        5082: {
          /* n:"BrtEndRichFilters", */
          T: -1
        },
        5083: {
          /* n:"BrtRichFilter" */
        },
        5084: {
          /* n:"BrtBeginRichFilterColumn", */
          T: 1
        },
        5085: {
          /* n:"BrtEndRichFilterColumn", */
          T: -1
        },
        5086: {
          /* n:"BrtBeginCustomRichFilters", */
          T: 1
        },
        5087: {
          /* n:"BrtEndCustomRichFilters", */
          T: -1
        },
        5088: {
          /* n:"BrtCustomRichFilter" */
        },
        5089: {
          /* n:"BrtTop10RichFilter" */
        },
        5090: {
          /* n:"BrtDynamicRichFilter" */
        },
        5092: {
          /* n:"BrtBeginRichSortCondition", */
          T: 1
        },
        5093: {
          /* n:"BrtEndRichSortCondition", */
          T: -1
        },
        5094: {
          /* n:"BrtRichFilterDateGroupItem" */
        },
        5095: {
          /* n:"BrtBeginCalcFeatures", */
          T: 1
        },
        5096: {
          /* n:"BrtEndCalcFeatures", */
          T: -1
        },
        5097: {
          /* n:"BrtCalcFeature" */
        },
        5099: {
          /* n:"BrtExternalLinksPr" */
        },
        65535: { n: "" }
      };
      var XLSRecordEnum = {
        /* [MS-XLS] 2.3 Record Enumeration 2021-08-17 */
        6: {
          /* n:"Formula", */
          f: parse_Formula
        },
        10: {
          /* n:"EOF", */
          f: parsenoop2
        },
        12: {
          /* n:"CalcCount", */
          f: parseuint16
        },
        //
        13: {
          /* n:"CalcMode", */
          f: parseuint16
        },
        //
        14: {
          /* n:"CalcPrecision", */
          f: parsebool
        },
        //
        15: {
          /* n:"CalcRefMode", */
          f: parsebool
        },
        //
        16: {
          /* n:"CalcDelta", */
          f: parse_Xnum
        },
        //
        17: {
          /* n:"CalcIter", */
          f: parsebool
        },
        //
        18: {
          /* n:"Protect", */
          f: parsebool
        },
        19: {
          /* n:"Password", */
          f: parseuint16
        },
        20: {
          /* n:"Header", */
          f: parse_XLHeaderFooter
        },
        21: {
          /* n:"Footer", */
          f: parse_XLHeaderFooter
        },
        23: {
          /* n:"ExternSheet", */
          f: parse_ExternSheet
        },
        24: {
          /* n:"Lbl", */
          f: parse_Lbl
        },
        25: {
          /* n:"WinProtect", */
          f: parsebool
        },
        26: {
          /* n:"VerticalPageBreaks", */
        },
        27: {
          /* n:"HorizontalPageBreaks", */
        },
        28: {
          /* n:"Note", */
          f: parse_Note
        },
        29: {
          /* n:"Selection", */
        },
        34: {
          /* n:"Date1904", */
          f: parsebool
        },
        35: {
          /* n:"ExternName", */
          f: parse_ExternName
        },
        38: {
          /* n:"LeftMargin", */
          f: parse_Xnum
        },
        // *
        39: {
          /* n:"RightMargin", */
          f: parse_Xnum
        },
        // *
        40: {
          /* n:"TopMargin", */
          f: parse_Xnum
        },
        // *
        41: {
          /* n:"BottomMargin", */
          f: parse_Xnum
        },
        // *
        42: {
          /* n:"PrintRowCol", */
          f: parsebool
        },
        43: {
          /* n:"PrintGrid", */
          f: parsebool
        },
        47: {
          /* n:"FilePass", */
          f: parse_FilePass
        },
        49: {
          /* n:"Font", */
          f: parse_Font
        },
        51: {
          /* n:"PrintSize", */
          f: parseuint16
        },
        60: {
          /* n:"Continue", */
        },
        61: {
          /* n:"Window1", */
          f: parse_Window1
        },
        64: {
          /* n:"Backup", */
          f: parsebool
        },
        65: {
          /* n:"Pane", */
          f: parse_Pane
        },
        66: {
          /* n:"CodePage", */
          f: parseuint16
        },
        77: {
          /* n:"Pls", */
        },
        80: {
          /* n:"DCon", */
        },
        81: {
          /* n:"DConRef", */
        },
        82: {
          /* n:"DConName", */
        },
        85: {
          /* n:"DefColWidth", */
          f: parseuint16
        },
        89: {
          /* n:"XCT", */
        },
        90: {
          /* n:"CRN", */
        },
        91: {
          /* n:"FileSharing", */
        },
        92: {
          /* n:"WriteAccess", */
          f: parse_WriteAccess
        },
        93: {
          /* n:"Obj", */
          f: parse_Obj
        },
        94: {
          /* n:"Uncalced", */
        },
        95: {
          /* n:"CalcSaveRecalc", */
          f: parsebool
        },
        //
        96: {
          /* n:"Template", */
        },
        97: {
          /* n:"Intl", */
        },
        99: {
          /* n:"ObjProtect", */
          f: parsebool
        },
        125: {
          /* n:"ColInfo", */
          f: parse_ColInfo
        },
        128: {
          /* n:"Guts", */
          f: parse_Guts
        },
        129: {
          /* n:"WsBool", */
          f: parse_WsBool
        },
        130: {
          /* n:"GridSet", */
          f: parseuint16
        },
        131: {
          /* n:"HCenter", */
          f: parsebool
        },
        132: {
          /* n:"VCenter", */
          f: parsebool
        },
        133: {
          /* n:"BoundSheet8", */
          f: parse_BoundSheet8
        },
        134: {
          /* n:"WriteProtect", */
        },
        140: {
          /* n:"Country", */
          f: parse_Country
        },
        141: {
          /* n:"HideObj", */
          f: parseuint16
        },
        144: {
          /* n:"Sort", */
        },
        146: {
          /* n:"Palette", */
          f: parse_Palette
        },
        151: {
          /* n:"Sync", */
        },
        152: {
          /* n:"LPr", */
        },
        153: {
          /* n:"DxGCol", */
        },
        154: {
          /* n:"FnGroupName", */
        },
        155: {
          /* n:"FilterMode", */
        },
        156: {
          /* n:"BuiltInFnGroupCount", */
          f: parseuint16
        },
        157: {
          /* n:"AutoFilterInfo", */
        },
        158: {
          /* n:"AutoFilter", */
        },
        160: {
          /* n:"Scl", */
          f: parse_Scl
        },
        161: {
          /* n:"Setup", */
          f: parse_Setup
        },
        174: {
          /* n:"ScenMan", */
        },
        175: {
          /* n:"SCENARIO", */
        },
        176: {
          /* n:"SxView", */
        },
        177: {
          /* n:"Sxvd", */
        },
        178: {
          /* n:"SXVI", */
        },
        180: {
          /* n:"SxIvd", */
        },
        181: {
          /* n:"SXLI", */
        },
        182: {
          /* n:"SXPI", */
        },
        184: {
          /* n:"DocRoute", */
        },
        185: {
          /* n:"RecipName", */
        },
        189: {
          /* n:"MulRk", */
          f: parse_MulRk
        },
        190: {
          /* n:"MulBlank", */
          f: parse_MulBlank
        },
        193: {
          /* n:"Mms", */
          f: parsenoop2
        },
        197: {
          /* n:"SXDI", */
        },
        198: {
          /* n:"SXDB", */
        },
        199: {
          /* n:"SXFDB", */
        },
        200: {
          /* n:"SXDBB", */
        },
        201: {
          /* n:"SXNum", */
        },
        202: {
          /* n:"SxBool", */
          f: parsebool
        },
        203: {
          /* n:"SxErr", */
        },
        204: {
          /* n:"SXInt", */
        },
        205: {
          /* n:"SXString", */
        },
        206: {
          /* n:"SXDtr", */
        },
        207: {
          /* n:"SxNil", */
        },
        208: {
          /* n:"SXTbl", */
        },
        209: {
          /* n:"SXTBRGIITM", */
        },
        210: {
          /* n:"SxTbpg", */
        },
        211: {
          /* n:"ObProj", */
        },
        213: {
          /* n:"SXStreamID", */
        },
        215: {
          /* n:"DBCell", */
        },
        216: {
          /* n:"SXRng", */
        },
        217: {
          /* n:"SxIsxoper", */
        },
        218: {
          /* n:"BookBool", */
          f: parseuint16
        },
        220: {
          /* n:"DbOrParamQry", */
        },
        221: {
          /* n:"ScenarioProtect", */
          f: parsebool
        },
        222: {
          /* n:"OleObjectSize", */
        },
        224: {
          /* n:"XF", */
          f: parse_XF
        },
        225: {
          /* n:"InterfaceHdr", */
          f: parse_InterfaceHdr
        },
        226: {
          /* n:"InterfaceEnd", */
          f: parsenoop2
        },
        227: {
          /* n:"SXVS", */
        },
        229: {
          /* n:"MergeCells", */
          f: parse_MergeCells
        },
        233: {
          /* n:"BkHim", */
        },
        235: {
          /* n:"MsoDrawingGroup", */
        },
        236: {
          /* n:"MsoDrawing", */
        },
        237: {
          /* n:"MsoDrawingSelection", */
        },
        239: {
          /* n:"PhoneticInfo", */
        },
        240: {
          /* n:"SxRule", */
        },
        241: {
          /* n:"SXEx", */
        },
        242: {
          /* n:"SxFilt", */
        },
        244: {
          /* n:"SxDXF", */
        },
        245: {
          /* n:"SxItm", */
        },
        246: {
          /* n:"SxName", */
        },
        247: {
          /* n:"SxSelect", */
        },
        248: {
          /* n:"SXPair", */
        },
        249: {
          /* n:"SxFmla", */
        },
        251: {
          /* n:"SxFormat", */
        },
        252: {
          /* n:"SST", */
          f: parse_SST
        },
        253: {
          /* n:"LabelSst", */
          f: parse_LabelSst
        },
        255: {
          /* n:"ExtSST", */
          f: parse_ExtSST
        },
        256: {
          /* n:"SXVDEx", */
        },
        259: {
          /* n:"SXFormula", */
        },
        290: {
          /* n:"SXDBEx", */
        },
        311: {
          /* n:"RRDInsDel", */
        },
        312: {
          /* n:"RRDHead", */
        },
        315: {
          /* n:"RRDChgCell", */
        },
        317: {
          /* n:"RRTabId", */
          f: parseuint16a
        },
        318: {
          /* n:"RRDRenSheet", */
        },
        319: {
          /* n:"RRSort", */
        },
        320: {
          /* n:"RRDMove", */
        },
        330: {
          /* n:"RRFormat", */
        },
        331: {
          /* n:"RRAutoFmt", */
        },
        333: {
          /* n:"RRInsertSh", */
        },
        334: {
          /* n:"RRDMoveBegin", */
        },
        335: {
          /* n:"RRDMoveEnd", */
        },
        336: {
          /* n:"RRDInsDelBegin", */
        },
        337: {
          /* n:"RRDInsDelEnd", */
        },
        338: {
          /* n:"RRDConflict", */
        },
        339: {
          /* n:"RRDDefName", */
        },
        340: {
          /* n:"RRDRstEtxp", */
        },
        351: {
          /* n:"LRng", */
        },
        352: {
          /* n:"UsesELFs", */
          f: parsebool
        },
        353: {
          /* n:"DSF", */
          f: parsenoop2
        },
        401: {
          /* n:"CUsr", */
        },
        402: {
          /* n:"CbUsr", */
        },
        403: {
          /* n:"UsrInfo", */
        },
        404: {
          /* n:"UsrExcl", */
        },
        405: {
          /* n:"FileLock", */
        },
        406: {
          /* n:"RRDInfo", */
        },
        407: {
          /* n:"BCUsrs", */
        },
        408: {
          /* n:"UsrChk", */
        },
        425: {
          /* n:"UserBView", */
        },
        426: {
          /* n:"UserSViewBegin", */
        },
        427: {
          /* n:"UserSViewEnd", */
        },
        428: {
          /* n:"RRDUserView", */
        },
        429: {
          /* n:"Qsi", */
        },
        430: {
          /* n:"SupBook", */
          f: parse_SupBook
        },
        431: {
          /* n:"Prot4Rev", */
          f: parsebool
        },
        432: {
          /* n:"CondFmt", */
        },
        433: {
          /* n:"CF", */
        },
        434: {
          /* n:"DVal", */
        },
        437: {
          /* n:"DConBin", */
        },
        438: {
          /* n:"TxO", */
          f: parse_TxO
        },
        439: {
          /* n:"RefreshAll", */
          f: parsebool
        },
        //
        440: {
          /* n:"HLink", */
          f: parse_HLink
        },
        441: {
          /* n:"Lel", */
        },
        442: {
          /* n:"CodeName", */
          f: parse_XLUnicodeString
        },
        443: {
          /* n:"SXFDBType", */
        },
        444: {
          /* n:"Prot4RevPass", */
          f: parseuint16
        },
        445: {
          /* n:"ObNoMacros", */
        },
        446: {
          /* n:"Dv", */
        },
        448: {
          /* n:"Excel9File", */
          f: parsenoop2
        },
        449: {
          /* n:"RecalcId", */
          f: parse_RecalcId,
          r: 2
        },
        450: {
          /* n:"EntExU2", */
          f: parsenoop2
        },
        512: {
          /* n:"Dimensions", */
          f: parse_Dimensions
        },
        513: {
          /* n:"Blank", */
          f: parse_Blank
        },
        515: {
          /* n:"Number", */
          f: parse_Number
        },
        516: {
          /* n:"Label", */
          f: parse_Label
        },
        517: {
          /* n:"BoolErr", */
          f: parse_BoolErr
        },
        519: {
          /* n:"String", */
          f: parse_String
        },
        520: {
          /* n:"Row", */
          f: parse_Row
        },
        523: {
          /* n:"Index", */
        },
        545: {
          /* n:"Array", */
          f: parse_Array
        },
        549: {
          /* n:"DefaultRowHeight", */
          f: parse_DefaultRowHeight
        },
        566: {
          /* n:"Table", */
        },
        574: {
          /* n:"Window2", */
          f: parse_Window2
        },
        638: {
          /* n:"RK", */
          f: parse_RK
        },
        659: {
          /* n:"Style", */
        },
        1048: {
          /* n:"BigName", */
        },
        1054: {
          /* n:"Format", */
          f: parse_Format
        },
        1084: {
          /* n:"ContinueBigName", */
        },
        1212: {
          /* n:"ShrFmla", */
          f: parse_ShrFmla
        },
        2048: {
          /* n:"HLinkTooltip", */
          f: parse_HLinkTooltip
        },
        2049: {
          /* n:"WebPub", */
        },
        2050: {
          /* n:"QsiSXTag", */
        },
        2051: {
          /* n:"DBQueryExt", */
        },
        2052: {
          /* n:"ExtString", */
        },
        2053: {
          /* n:"TxtQry", */
        },
        2054: {
          /* n:"Qsir", */
        },
        2055: {
          /* n:"Qsif", */
        },
        2056: {
          /* n:"RRDTQSIF", */
        },
        2057: {
          /* n:"BOF", */
          f: parse_BOF
        },
        2058: {
          /* n:"OleDbConn", */
        },
        2059: {
          /* n:"WOpt", */
        },
        2060: {
          /* n:"SXViewEx", */
        },
        2061: {
          /* n:"SXTH", */
        },
        2062: {
          /* n:"SXPIEx", */
        },
        2063: {
          /* n:"SXVDTEx", */
        },
        2064: {
          /* n:"SXViewEx9", */
        },
        2066: {
          /* n:"ContinueFrt", */
        },
        2067: {
          /* n:"RealTimeData", */
        },
        2128: {
          /* n:"ChartFrtInfo", */
        },
        2129: {
          /* n:"FrtWrapper", */
        },
        2130: {
          /* n:"StartBlock", */
        },
        2131: {
          /* n:"EndBlock", */
        },
        2132: {
          /* n:"StartObject", */
        },
        2133: {
          /* n:"EndObject", */
        },
        2134: {
          /* n:"CatLab", */
        },
        2135: {
          /* n:"YMult", */
        },
        2136: {
          /* n:"SXViewLink", */
        },
        2137: {
          /* n:"PivotChartBits", */
        },
        2138: {
          /* n:"FrtFontList", */
        },
        2146: {
          /* n:"SheetExt", */
        },
        2147: {
          /* n:"BookExt", */
          r: 12
        },
        2148: {
          /* n:"SXAddl", */
        },
        2149: {
          /* n:"CrErr", */
        },
        2150: {
          /* n:"HFPicture", */
        },
        2151: {
          /* n:"FeatHdr", */
          f: parsenoop2
        },
        2152: {
          /* n:"Feat", */
        },
        2154: {
          /* n:"DataLabExt", */
        },
        2155: {
          /* n:"DataLabExtContents", */
        },
        2156: {
          /* n:"CellWatch", */
        },
        2161: {
          /* n:"FeatHdr11", */
        },
        2162: {
          /* n:"Feature11", */
        },
        2164: {
          /* n:"DropDownObjIds", */
        },
        2165: {
          /* n:"ContinueFrt11", */
        },
        2166: {
          /* n:"DConn", */
        },
        2167: {
          /* n:"List12", */
        },
        2168: {
          /* n:"Feature12", */
        },
        2169: {
          /* n:"CondFmt12", */
        },
        2170: {
          /* n:"CF12", */
        },
        2171: {
          /* n:"CFEx", */
        },
        2172: {
          /* n:"XFCRC", */
          f: parse_XFCRC,
          r: 12
        },
        2173: {
          /* n:"XFExt", */
          f: parse_XFExt,
          r: 12
        },
        2174: {
          /* n:"AutoFilter12", */
        },
        2175: {
          /* n:"ContinueFrt12", */
        },
        2180: {
          /* n:"MDTInfo", */
        },
        2181: {
          /* n:"MDXStr", */
        },
        2182: {
          /* n:"MDXTuple", */
        },
        2183: {
          /* n:"MDXSet", */
        },
        2184: {
          /* n:"MDXProp", */
        },
        2185: {
          /* n:"MDXKPI", */
        },
        2186: {
          /* n:"MDB", */
        },
        2187: {
          /* n:"PLV", */
        },
        2188: {
          /* n:"Compat12", */
          f: parsebool,
          r: 12
        },
        2189: {
          /* n:"DXF", */
        },
        2190: {
          /* n:"TableStyles", */
          r: 12
        },
        2191: {
          /* n:"TableStyle", */
        },
        2192: {
          /* n:"TableStyleElement", */
        },
        2194: {
          /* n:"StyleExt", */
        },
        2195: {
          /* n:"NamePublish", */
        },
        2196: {
          /* n:"NameCmt", */
          f: parse_NameCmt,
          r: 12
        },
        2197: {
          /* n:"SortData", */
        },
        2198: {
          /* n:"Theme", */
          f: parse_Theme,
          r: 12
        },
        2199: {
          /* n:"GUIDTypeLib", */
        },
        2200: {
          /* n:"FnGrp12", */
        },
        2201: {
          /* n:"NameFnGrp12", */
        },
        2202: {
          /* n:"MTRSettings", */
          f: parse_MTRSettings,
          r: 12
        },
        2203: {
          /* n:"CompressPictures", */
          f: parsenoop2
        },
        2204: {
          /* n:"HeaderFooter", */
        },
        2205: {
          /* n:"CrtLayout12", */
        },
        2206: {
          /* n:"CrtMlFrt", */
        },
        2207: {
          /* n:"CrtMlFrtContinue", */
        },
        2211: {
          /* n:"ForceFullCalculation", */
          f: parse_ForceFullCalculation
        },
        2212: {
          /* n:"ShapePropsStream", */
        },
        2213: {
          /* n:"TextPropsStream", */
        },
        2214: {
          /* n:"RichTextStream", */
        },
        2215: {
          /* n:"CrtLayout12A", */
        },
        4097: {
          /* n:"Units", */
        },
        4098: {
          /* n:"Chart", */
        },
        4099: {
          /* n:"Series", */
        },
        4102: {
          /* n:"DataFormat", */
        },
        4103: {
          /* n:"LineFormat", */
        },
        4105: {
          /* n:"MarkerFormat", */
        },
        4106: {
          /* n:"AreaFormat", */
        },
        4107: {
          /* n:"PieFormat", */
        },
        4108: {
          /* n:"AttachedLabel", */
        },
        4109: {
          /* n:"SeriesText", */
        },
        4116: {
          /* n:"ChartFormat", */
        },
        4117: {
          /* n:"Legend", */
        },
        4118: {
          /* n:"SeriesList", */
        },
        4119: {
          /* n:"Bar", */
        },
        4120: {
          /* n:"Line", */
        },
        4121: {
          /* n:"Pie", */
        },
        4122: {
          /* n:"Area", */
        },
        4123: {
          /* n:"Scatter", */
        },
        4124: {
          /* n:"CrtLine", */
        },
        4125: {
          /* n:"Axis", */
        },
        4126: {
          /* n:"Tick", */
        },
        4127: {
          /* n:"ValueRange", */
        },
        4128: {
          /* n:"CatSerRange", */
        },
        4129: {
          /* n:"AxisLine", */
        },
        4130: {
          /* n:"CrtLink", */
        },
        4132: {
          /* n:"DefaultText", */
        },
        4133: {
          /* n:"Text", */
        },
        4134: {
          /* n:"FontX", */
          f: parseuint16
        },
        4135: {
          /* n:"ObjectLink", */
        },
        4146: {
          /* n:"Frame", */
        },
        4147: {
          /* n:"Begin", */
        },
        4148: {
          /* n:"End", */
        },
        4149: {
          /* n:"PlotArea", */
        },
        4154: {
          /* n:"Chart3d", */
        },
        4156: {
          /* n:"PicF", */
        },
        4157: {
          /* n:"DropBar", */
        },
        4158: {
          /* n:"Radar", */
        },
        4159: {
          /* n:"Surf", */
        },
        4160: {
          /* n:"RadarArea", */
        },
        4161: {
          /* n:"AxisParent", */
        },
        4163: {
          /* n:"LegendException", */
        },
        4164: {
          /* n:"ShtProps", */
          f: parse_ShtProps
        },
        4165: {
          /* n:"SerToCrt", */
        },
        4166: {
          /* n:"AxesUsed", */
        },
        4168: {
          /* n:"SBaseRef", */
        },
        4170: {
          /* n:"SerParent", */
        },
        4171: {
          /* n:"SerAuxTrend", */
        },
        4174: {
          /* n:"IFmtRecord", */
        },
        4175: {
          /* n:"Pos", */
        },
        4176: {
          /* n:"AlRuns", */
        },
        4177: {
          /* n:"BRAI", */
        },
        4187: {
          /* n:"SerAuxErrBar", */
        },
        4188: {
          /* n:"ClrtClient", */
          f: parse_ClrtClient
        },
        4189: {
          /* n:"SerFmt", */
        },
        4191: {
          /* n:"Chart3DBarShape", */
        },
        4192: {
          /* n:"Fbi", */
        },
        4193: {
          /* n:"BopPop", */
        },
        4194: {
          /* n:"AxcExt", */
        },
        4195: {
          /* n:"Dat", */
        },
        4196: {
          /* n:"PlotGrowth", */
        },
        4197: {
          /* n:"SIIndex", */
        },
        4198: {
          /* n:"GelFrame", */
        },
        4199: {
          /* n:"BopPopCustom", */
        },
        4200: {
          /* n:"Fbi2", */
        },
        0: {
          /* n:"Dimensions", */
          f: parse_Dimensions
        },
        1: {
          /* n:"BIFF2BLANK", */
        },
        2: {
          /* n:"BIFF2INT", */
          f: parse_BIFF2INT
        },
        3: {
          /* n:"BIFF2NUM", */
          f: parse_BIFF2NUM
        },
        4: {
          /* n:"BIFF2STR", */
          f: parse_BIFF2STR
        },
        5: {
          /* n:"BoolErr", */
          f: parse_BoolErr
        },
        7: {
          /* n:"String", */
          f: parse_BIFF2STRING
        },
        8: {
          /* n:"BIFF2ROW", */
        },
        9: {
          /* n:"BOF", */
          f: parse_BOF
        },
        11: {
          /* n:"Index", */
        },
        22: {
          /* n:"ExternCount", */
          f: parseuint16
        },
        30: {
          /* n:"BIFF2FORMAT", */
          f: parse_BIFF2Format
        },
        31: {
          /* n:"BIFF2FMTCNT", */
        },
        /* 16-bit cnt of BIFF2FORMAT records */
        32: {
          /* n:"BIFF2COLINFO", */
        },
        33: {
          /* n:"Array", */
          f: parse_Array
        },
        36: {
          /* n:"COLWIDTH", */
        },
        37: {
          /* n:"DefaultRowHeight", */
          f: parse_DefaultRowHeight
        },
        // 0x2c ??
        // 0x2d ??
        // 0x2e ??
        // 0x30 FONTCOUNT: number of fonts
        50: {
          /* n:"BIFF2FONTXTRA", */
          f: parse_BIFF2FONTXTRA
        },
        // 0x35: INFOOPTS
        // 0x36: TABLE (BIFF2 only)
        // 0x37: TABLE2 (BIFF2 only)
        // 0x38: WNDESK
        // 0x39 ??
        // 0x3a: BEGINPREF
        // 0x3b: ENDPREF
        62: {
          /* n:"BIFF2WINDOW2", */
        },
        // 0x3f ??
        // 0x46: SHOWSCROLL
        // 0x47: SHOWFORMULA
        // 0x48: STATUSBAR
        // 0x49: SHORTMENUS
        // 0x4A:
        // 0x4B:
        // 0x4C:
        // 0x4E:
        // 0x4F:
        // 0x58: TOOLBAR (BIFF3)
        /* - - - */
        52: {
          /* n:"DDEObjName", */
        },
        67: {
          /* n:"BIFF2XF", */
        },
        68: {
          /* n:"BIFF2XFINDEX", */
          f: parseuint16
        },
        69: {
          /* n:"BIFF2FONTCLR", */
        },
        86: {
          /* n:"BIFF4FMTCNT", */
        },
        /* 16-bit cnt, similar to BIFF2 */
        126: {
          /* n:"RK", */
        },
        /* Not necessarily same as 0x027e */
        127: {
          /* n:"ImData", */
          f: parse_ImData
        },
        135: {
          /* n:"Addin", */
        },
        136: {
          /* n:"Edg", */
        },
        137: {
          /* n:"Pub", */
        },
        // 0x8A
        // 0x8B LH: alternate menu key flag (BIFF3/4)
        // 0x8E
        // 0x8F
        145: {
          /* n:"Sub", */
        },
        // 0x93 STYLE
        148: {
          /* n:"LHRecord", */
        },
        149: {
          /* n:"LHNGraph", */
        },
        150: {
          /* n:"Sound", */
        },
        // 0xA2 FNPROTO: function prototypes (BIFF4)
        // 0xA3
        // 0xA8
        169: {
          /* n:"CoordList", */
        },
        171: {
          /* n:"GCW", */
        },
        188: {
          /* n:"ShrFmla", */
        },
        /* Not necessarily same as 0x04bc */
        191: {
          /* n:"ToolbarHdr", */
        },
        192: {
          /* n:"ToolbarEnd", */
        },
        194: {
          /* n:"AddMenu", */
        },
        195: {
          /* n:"DelMenu", */
        },
        214: {
          /* n:"RString", */
          f: parse_RString
        },
        223: {
          /* n:"UDDesc", */
        },
        234: {
          /* n:"TabIdConf", */
        },
        354: {
          /* n:"XL5Modify", */
        },
        421: {
          /* n:"FileSharing2", */
        },
        518: {
          /* n:"Formula", */
          f: parse_Formula
        },
        521: {
          /* n:"BOF", */
          f: parse_BOF
        },
        536: {
          /* n:"Lbl", */
          f: parse_Lbl
        },
        547: {
          /* n:"ExternName", */
          f: parse_ExternName
        },
        561: {
          /* n:"Font", */
        },
        579: {
          /* n:"BIFF3XF", */
        },
        1030: {
          /* n:"Formula", */
          f: parse_Formula
        },
        1033: {
          /* n:"BOF", */
          f: parse_BOF
        },
        1091: {
          /* n:"BIFF4XF", */
        },
        2157: {
          /* n:"FeatInfo", */
        },
        2163: {
          /* n:"FeatInfo11", */
        },
        2177: {
          /* n:"SXAddl12", */
        },
        2240: {
          /* n:"AutoWebPub", */
        },
        2241: {
          /* n:"ListObj", */
        },
        2242: {
          /* n:"ListField", */
        },
        2243: {
          /* n:"ListDV", */
        },
        2244: {
          /* n:"ListCondFmt", */
        },
        2245: {
          /* n:"ListCF", */
        },
        2246: {
          /* n:"FMQry", */
        },
        2247: {
          /* n:"FMSQry", */
        },
        2248: {
          /* n:"PLV", */
        },
        2249: {
          /* n:"LnExt", */
        },
        2250: {
          /* n:"MkrExt", */
        },
        2251: {
          /* n:"CrtCoopt", */
        },
        2262: {
          /* n:"FRTArchId$", */
          r: 12
        },
        29282: {}
      };
      function write_biff_rec(ba, type, payload, length) {
        var t = type;
        if (isNaN(t)) return;
        var len = length || (payload || []).length || 0;
        var o = ba.next(4);
        o.write_shift(2, t);
        o.write_shift(2, len);
        if (len > 0 && is_buf(payload)) ba.push(payload);
      }
      function write_biff_continue(ba, type, payload, length) {
        var len = length || (payload || []).length || 0;
        if (len <= 8224) return write_biff_rec(ba, type, payload, len);
        var t = type;
        if (isNaN(t)) return;
        var parts = payload.parts || [], sidx = 0;
        var i = 0, w = 0;
        while (w + (parts[sidx] || 8224) <= 8224) {
          w += parts[sidx] || 8224;
          sidx++;
        }
        var o = ba.next(4);
        o.write_shift(2, t);
        o.write_shift(2, w);
        ba.push(payload.slice(i, i + w));
        i += w;
        while (i < len) {
          o = ba.next(4);
          o.write_shift(2, 60);
          w = 0;
          while (w + (parts[sidx] || 8224) <= 8224) {
            w += parts[sidx] || 8224;
            sidx++;
          }
          o.write_shift(2, w);
          ba.push(payload.slice(i, i + w));
          i += w;
        }
      }
      function write_BIFF2Cell(out, r, c) {
        if (!out) out = new_buf(7);
        out.write_shift(2, r);
        out.write_shift(2, c);
        out.write_shift(2, 0);
        out.write_shift(1, 0);
        return out;
      }
      function write_BIFF2BERR(r, c, val, t) {
        var out = new_buf(9);
        write_BIFF2Cell(out, r, c);
        write_Bes(val, t || "b", out);
        return out;
      }
      function write_BIFF2LABEL(r, c, val) {
        var out = new_buf(8 + 2 * val.length);
        write_BIFF2Cell(out, r, c);
        out.write_shift(1, val.length);
        out.write_shift(val.length, val, "sbcs");
        return out.l < out.length ? out.slice(0, out.l) : out;
      }
      function write_ws_biff2_cell(ba, cell, R, C) {
        if (cell.v != null) switch (cell.t) {
          case "d":
          case "n":
            var v = cell.t == "d" ? datenum(parseDate(cell.v)) : cell.v;
            if (v == (v | 0) && v >= 0 && v < 65536)
              write_biff_rec(ba, 2, write_BIFF2INT(R, C, v));
            else
              write_biff_rec(ba, 3, write_BIFF2NUM(R, C, v));
            return;
          case "b":
          case "e":
            write_biff_rec(ba, 5, write_BIFF2BERR(R, C, cell.v, cell.t));
            return;
          case "s":
          case "str":
            write_biff_rec(ba, 4, write_BIFF2LABEL(R, C, (cell.v || "").slice(0, 255)));
            return;
        }
        write_biff_rec(ba, 1, write_BIFF2Cell(null, R, C));
      }
      function write_ws_biff2(ba, ws, idx, opts) {
        var dense = Array.isArray(ws);
        var range = safe_decode_range(ws["!ref"] || "A1"), ref, rr = "", cols = [];
        if (range.e.c > 255 || range.e.r > 16383) {
          if (opts.WTF) throw new Error("Range " + (ws["!ref"] || "A1") + " exceeds format limit A1:IV16384");
          range.e.c = Math.min(range.e.c, 255);
          range.e.r = Math.min(range.e.c, 16383);
          ref = encode_range(range);
        }
        for (var R = range.s.r; R <= range.e.r; ++R) {
          rr = encode_row(R);
          for (var C = range.s.c; C <= range.e.c; ++C) {
            if (R === range.s.r) cols[C] = encode_col(C);
            ref = cols[C] + rr;
            var cell = dense ? (ws[R] || [])[C] : ws[ref];
            if (!cell) continue;
            write_ws_biff2_cell(ba, cell, R, C, opts);
          }
        }
      }
      function write_biff2_buf(wb, opts) {
        var o = opts || {};
        if (DENSE != null && o.dense == null) o.dense = DENSE;
        var ba = buf_array();
        var idx = 0;
        for (var i = 0; i < wb.SheetNames.length; ++i) if (wb.SheetNames[i] == o.sheet) idx = i;
        if (idx == 0 && !!o.sheet && wb.SheetNames[0] != o.sheet) throw new Error("Sheet not found: " + o.sheet);
        write_biff_rec(ba, o.biff == 4 ? 1033 : o.biff == 3 ? 521 : 9, write_BOF(wb, 16, o));
        write_ws_biff2(ba, wb.Sheets[wb.SheetNames[idx]], idx, o, wb);
        write_biff_rec(ba, 10);
        return ba.end();
      }
      function write_FONTS_biff8(ba, data, opts) {
        write_biff_rec(ba, 49, write_Font({
          sz: 12,
          color: { theme: 1 },
          name: "Arial",
          family: 2,
          scheme: "minor"
        }, opts));
      }
      function write_FMTS_biff8(ba, NF, opts) {
        if (!NF) return;
        [[5, 8], [23, 26], [41, 44], [
          /*63*/
          50,
          /*66],[164,*/
          392
        ]].forEach(function(r) {
          for (var i = r[0]; i <= r[1]; ++i) if (NF[i] != null) write_biff_rec(ba, 1054, write_Format(i, NF[i], opts));
        });
      }
      function write_FEAT(ba, ws) {
        var o = new_buf(19);
        o.write_shift(4, 2151);
        o.write_shift(4, 0);
        o.write_shift(4, 0);
        o.write_shift(2, 3);
        o.write_shift(1, 1);
        o.write_shift(4, 0);
        write_biff_rec(ba, 2151, o);
        o = new_buf(39);
        o.write_shift(4, 2152);
        o.write_shift(4, 0);
        o.write_shift(4, 0);
        o.write_shift(2, 3);
        o.write_shift(1, 0);
        o.write_shift(4, 0);
        o.write_shift(2, 1);
        o.write_shift(4, 4);
        o.write_shift(2, 0);
        write_Ref8U(safe_decode_range(ws["!ref"] || "A1"), o);
        o.write_shift(4, 4);
        write_biff_rec(ba, 2152, o);
      }
      function write_CELLXFS_biff8(ba, opts) {
        for (var i = 0; i < 16; ++i) write_biff_rec(ba, 224, write_XF({ numFmtId: 0, style: true }, 0, opts));
        opts.cellXfs.forEach(function(c) {
          write_biff_rec(ba, 224, write_XF(c, 0, opts));
        });
      }
      function write_ws_biff8_hlinks(ba, ws) {
        for (var R = 0; R < ws["!links"].length; ++R) {
          var HL = ws["!links"][R];
          write_biff_rec(ba, 440, write_HLink(HL));
          if (HL[1].Tooltip) write_biff_rec(ba, 2048, write_HLinkTooltip(HL));
        }
        delete ws["!links"];
      }
      function write_ws_cols_biff8(ba, cols) {
        if (!cols) return;
        var cnt = 0;
        cols.forEach(function(col, idx) {
          if (++cnt <= 256 && col) {
            write_biff_rec(ba, 125, write_ColInfo(col_obj_w(idx, col), idx));
          }
        });
      }
      function write_ws_biff8_cell(ba, cell, R, C, opts) {
        var os = 16 + get_cell_style(opts.cellXfs, cell, opts);
        if (cell.v == null && !cell.bf) {
          write_biff_rec(ba, 513, write_XLSCell(R, C, os));
          return;
        }
        if (cell.bf) write_biff_rec(ba, 6, write_Formula(cell, R, C, opts, os));
        else switch (cell.t) {
          case "d":
          case "n":
            var v = cell.t == "d" ? datenum(parseDate(cell.v)) : cell.v;
            write_biff_rec(ba, 515, write_Number(R, C, v, os, opts));
            break;
          case "b":
          case "e":
            write_biff_rec(ba, 517, write_BoolErr(R, C, cell.v, os, opts, cell.t));
            break;
          case "s":
          case "str":
            if (opts.bookSST) {
              var isst = get_sst_id(opts.Strings, cell.v, opts.revStrings);
              write_biff_rec(ba, 253, write_LabelSst(R, C, isst, os, opts));
            } else write_biff_rec(ba, 516, write_Label(R, C, (cell.v || "").slice(0, 255), os, opts));
            break;
          default:
            write_biff_rec(ba, 513, write_XLSCell(R, C, os));
        }
      }
      function write_ws_biff8(idx, opts, wb) {
        var ba = buf_array();
        var s = wb.SheetNames[idx], ws = wb.Sheets[s] || {};
        var _WB = (wb || {}).Workbook || {};
        var _sheet = (_WB.Sheets || [])[idx] || {};
        var dense = Array.isArray(ws);
        var b8 = opts.biff == 8;
        var ref, rr = "", cols = [];
        var range = safe_decode_range(ws["!ref"] || "A1");
        var MAX_ROWS = b8 ? 65536 : 16384;
        if (range.e.c > 255 || range.e.r >= MAX_ROWS) {
          if (opts.WTF) throw new Error("Range " + (ws["!ref"] || "A1") + " exceeds format limit A1:IV16384");
          range.e.c = Math.min(range.e.c, 255);
          range.e.r = Math.min(range.e.c, MAX_ROWS - 1);
        }
        write_biff_rec(ba, 2057, write_BOF(wb, 16, opts));
        write_biff_rec(ba, 13, writeuint16(1));
        write_biff_rec(ba, 12, writeuint16(100));
        write_biff_rec(ba, 15, writebool(true));
        write_biff_rec(ba, 17, writebool(false));
        write_biff_rec(ba, 16, write_Xnum(1e-3));
        write_biff_rec(ba, 95, writebool(true));
        write_biff_rec(ba, 42, writebool(false));
        write_biff_rec(ba, 43, writebool(false));
        write_biff_rec(ba, 130, writeuint16(1));
        write_biff_rec(ba, 128, write_Guts([0, 0]));
        write_biff_rec(ba, 131, writebool(false));
        write_biff_rec(ba, 132, writebool(false));
        if (b8) write_ws_cols_biff8(ba, ws["!cols"]);
        write_biff_rec(ba, 512, write_Dimensions(range, opts));
        if (b8) ws["!links"] = [];
        for (var R = range.s.r; R <= range.e.r; ++R) {
          rr = encode_row(R);
          for (var C = range.s.c; C <= range.e.c; ++C) {
            if (R === range.s.r) cols[C] = encode_col(C);
            ref = cols[C] + rr;
            var cell = dense ? (ws[R] || [])[C] : ws[ref];
            if (!cell) continue;
            write_ws_biff8_cell(ba, cell, R, C, opts);
            if (b8 && cell.l) ws["!links"].push([ref, cell.l]);
          }
        }
        var cname = _sheet.CodeName || _sheet.name || s;
        if (b8) write_biff_rec(ba, 574, write_Window2((_WB.Views || [])[0]));
        if (b8 && (ws["!merges"] || []).length) write_biff_rec(ba, 229, write_MergeCells(ws["!merges"]));
        if (b8) write_ws_biff8_hlinks(ba, ws);
        write_biff_rec(ba, 442, write_XLUnicodeString(cname, opts));
        if (b8) write_FEAT(ba, ws);
        write_biff_rec(
          ba,
          10
          /* EOF */
        );
        return ba.end();
      }
      function write_biff8_global(wb, bufs, opts) {
        var A = buf_array();
        var _WB = (wb || {}).Workbook || {};
        var _sheets = _WB.Sheets || [];
        var _wb = _WB.WBProps || {};
        var b8 = opts.biff == 8, b5 = opts.biff == 5;
        write_biff_rec(A, 2057, write_BOF(wb, 5, opts));
        if (opts.bookType == "xla") write_biff_rec(
          A,
          135
          /* Addin */
        );
        write_biff_rec(A, 225, b8 ? writeuint16(1200) : null);
        write_biff_rec(A, 193, writezeroes(2));
        if (b5) write_biff_rec(
          A,
          191
          /* ToolbarHdr */
        );
        if (b5) write_biff_rec(
          A,
          192
          /* ToolbarEnd */
        );
        write_biff_rec(
          A,
          226
          /* InterfaceEnd */
        );
        write_biff_rec(A, 92, write_WriteAccess("SheetJS", opts));
        write_biff_rec(A, 66, writeuint16(b8 ? 1200 : 1252));
        if (b8) write_biff_rec(A, 353, writeuint16(0));
        if (b8) write_biff_rec(
          A,
          448
          /* Excel9File */
        );
        write_biff_rec(A, 317, write_RRTabId(wb.SheetNames.length));
        if (b8 && wb.vbaraw) write_biff_rec(
          A,
          211
          /* ObProj */
        );
        if (b8 && wb.vbaraw) {
          var cname = _wb.CodeName || "ThisWorkbook";
          write_biff_rec(A, 442, write_XLUnicodeString(cname, opts));
        }
        write_biff_rec(A, 156, writeuint16(17));
        write_biff_rec(A, 25, writebool(false));
        write_biff_rec(A, 18, writebool(false));
        write_biff_rec(A, 19, writeuint16(0));
        if (b8) write_biff_rec(A, 431, writebool(false));
        if (b8) write_biff_rec(A, 444, writeuint16(0));
        write_biff_rec(A, 61, write_Window1(opts));
        write_biff_rec(A, 64, writebool(false));
        write_biff_rec(A, 141, writeuint16(0));
        write_biff_rec(A, 34, writebool(safe1904(wb) == "true"));
        write_biff_rec(A, 14, writebool(true));
        if (b8) write_biff_rec(A, 439, writebool(false));
        write_biff_rec(A, 218, writeuint16(0));
        write_FONTS_biff8(A, wb, opts);
        write_FMTS_biff8(A, wb.SSF, opts);
        write_CELLXFS_biff8(A, opts);
        if (b8) write_biff_rec(A, 352, writebool(false));
        var a = A.end();
        var C = buf_array();
        if (b8) write_biff_rec(C, 140, write_Country());
        if (b8 && opts.Strings) write_biff_continue(C, 252, write_SST(opts.Strings, opts));
        write_biff_rec(
          C,
          10
          /* EOF */
        );
        var c = C.end();
        var B = buf_array();
        var blen = 0, j = 0;
        for (j = 0; j < wb.SheetNames.length; ++j) blen += (b8 ? 12 : 11) + (b8 ? 2 : 1) * wb.SheetNames[j].length;
        var start = a.length + blen + c.length;
        for (j = 0; j < wb.SheetNames.length; ++j) {
          var _sheet = _sheets[j] || {};
          write_biff_rec(B, 133, write_BoundSheet8({ pos: start, hs: _sheet.Hidden || 0, dt: 0, name: wb.SheetNames[j] }, opts));
          start += bufs[j].length;
        }
        var b = B.end();
        if (blen != b.length) throw new Error("BS8 " + blen + " != " + b.length);
        var out = [];
        if (a.length) out.push(a);
        if (b.length) out.push(b);
        if (c.length) out.push(c);
        return bconcat(out);
      }
      function write_biff8_buf(wb, opts) {
        var o = opts || {};
        var bufs = [];
        if (wb && !wb.SSF) {
          wb.SSF = dup(table_fmt);
        }
        if (wb && wb.SSF) {
          make_ssf();
          SSF_load_table(wb.SSF);
          o.revssf = evert_num(wb.SSF);
          o.revssf[wb.SSF[65535]] = 0;
          o.ssf = wb.SSF;
        }
        o.Strings = [];
        o.Strings.Count = 0;
        o.Strings.Unique = 0;
        fix_write_opts(o);
        o.cellXfs = [];
        get_cell_style(o.cellXfs, {}, { revssf: { "General": 0 } });
        if (!wb.Props) wb.Props = {};
        for (var i = 0; i < wb.SheetNames.length; ++i) bufs[bufs.length] = write_ws_biff8(i, o, wb);
        bufs.unshift(write_biff8_global(wb, bufs, o));
        return bconcat(bufs);
      }
      function write_biff_buf(wb, opts) {
        for (var i = 0; i <= wb.SheetNames.length; ++i) {
          var ws = wb.Sheets[wb.SheetNames[i]];
          if (!ws || !ws["!ref"]) continue;
          var range = decode_range(ws["!ref"]);
          if (range.e.c > 255) {
            if (typeof console != "undefined" && console.error) console.error("Worksheet '" + wb.SheetNames[i] + "' extends beyond column IV (255).  Data may be lost.");
          }
        }
        var o = opts || {};
        switch (o.biff || 2) {
          case 8:
          case 5:
            return write_biff8_buf(wb, opts);
          case 4:
          case 3:
          case 2:
            return write_biff2_buf(wb, opts);
        }
        throw new Error("invalid type " + o.bookType + " for BIFF");
      }
      function html_to_sheet(str, _opts) {
        var opts = _opts || {};
        if (DENSE != null && opts.dense == null) opts.dense = DENSE;
        var ws = opts.dense ? [] : {};
        str = str.replace(/<!--.*?-->/g, "");
        var mtch = str.match(/<table/i);
        if (!mtch) throw new Error("Invalid HTML: could not find <table>");
        var mtch2 = str.match(/<\/table/i);
        var i = mtch.index, j = mtch2 && mtch2.index || str.length;
        var rows = split_regex(str.slice(i, j), /(:?<tr[^>]*>)/i, "<tr>");
        var R = -1, C = 0, RS = 0, CS = 0;
        var range = { s: { r: 1e7, c: 1e7 }, e: { r: 0, c: 0 } };
        var merges = [];
        for (i = 0; i < rows.length; ++i) {
          var row = rows[i].trim();
          var hd = row.slice(0, 3).toLowerCase();
          if (hd == "<tr") {
            ++R;
            if (opts.sheetRows && opts.sheetRows <= R) {
              --R;
              break;
            }
            C = 0;
            continue;
          }
          if (hd != "<td" && hd != "<th") continue;
          var cells = row.split(/<\/t[dh]>/i);
          for (j = 0; j < cells.length; ++j) {
            var cell = cells[j].trim();
            if (!cell.match(/<t[dh]/i)) continue;
            var m = cell, cc = 0;
            while (m.charAt(0) == "<" && (cc = m.indexOf(">")) > -1) m = m.slice(cc + 1);
            for (var midx = 0; midx < merges.length; ++midx) {
              var _merge = merges[midx];
              if (_merge.s.c == C && _merge.s.r < R && R <= _merge.e.r) {
                C = _merge.e.c + 1;
                midx = -1;
              }
            }
            var tag = parsexmltag(cell.slice(0, cell.indexOf(">")));
            CS = tag.colspan ? +tag.colspan : 1;
            if ((RS = +tag.rowspan) > 1 || CS > 1) merges.push({ s: { r: R, c: C }, e: { r: R + (RS || 1) - 1, c: C + CS - 1 } });
            var _t = tag.t || tag["data-t"] || "";
            if (!m.length) {
              C += CS;
              continue;
            }
            m = htmldecode(m);
            if (range.s.r > R) range.s.r = R;
            if (range.e.r < R) range.e.r = R;
            if (range.s.c > C) range.s.c = C;
            if (range.e.c < C) range.e.c = C;
            if (!m.length) {
              C += CS;
              continue;
            }
            var o = { t: "s", v: m };
            if (opts.raw || !m.trim().length || _t == "s") {
            } else if (m === "TRUE") o = { t: "b", v: true };
            else if (m === "FALSE") o = { t: "b", v: false };
            else if (!isNaN(fuzzynum(m))) o = { t: "n", v: fuzzynum(m) };
            else if (!isNaN(fuzzydate(m).getDate())) {
              o = { t: "d", v: parseDate(m) };
              if (!opts.cellDates) o = { t: "n", v: datenum(o.v) };
              o.z = opts.dateNF || table_fmt[14];
            }
            if (opts.dense) {
              if (!ws[R]) ws[R] = [];
              ws[R][C] = o;
            } else ws[encode_cell({ r: R, c: C })] = o;
            C += CS;
          }
        }
        ws["!ref"] = encode_range(range);
        if (merges.length) ws["!merges"] = merges;
        return ws;
      }
      function make_html_row(ws, r, R, o) {
        var M = ws["!merges"] || [];
        var oo = [];
        for (var C = r.s.c; C <= r.e.c; ++C) {
          var RS = 0, CS = 0;
          for (var j = 0; j < M.length; ++j) {
            if (M[j].s.r > R || M[j].s.c > C) continue;
            if (M[j].e.r < R || M[j].e.c < C) continue;
            if (M[j].s.r < R || M[j].s.c < C) {
              RS = -1;
              break;
            }
            RS = M[j].e.r - M[j].s.r + 1;
            CS = M[j].e.c - M[j].s.c + 1;
            break;
          }
          if (RS < 0) continue;
          var coord = encode_cell({ r: R, c: C });
          var cell = o.dense ? (ws[R] || [])[C] : ws[coord];
          var w = cell && cell.v != null && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || "")) || "";
          var sp = {};
          if (RS > 1) sp.rowspan = RS;
          if (CS > 1) sp.colspan = CS;
          if (o.editable) w = '<span contenteditable="true">' + w + "</span>";
          else if (cell) {
            sp["data-t"] = cell && cell.t || "z";
            if (cell.v != null) sp["data-v"] = cell.v;
            if (cell.z != null) sp["data-z"] = cell.z;
            if (cell.l && (cell.l.Target || "#").charAt(0) != "#") w = '<a href="' + cell.l.Target + '">' + w + "</a>";
          }
          sp.id = (o.id || "sjs") + "-" + coord;
          oo.push(writextag("td", w, sp));
        }
        var preamble = "<tr>";
        return preamble + oo.join("") + "</tr>";
      }
      var HTML_BEGIN = '<html><head><meta charset="utf-8"/><title>SheetJS Table Export</title></head><body>';
      var HTML_END = "</body></html>";
      function html_to_workbook(str, opts) {
        var mtch = str.match(/<table[\s\S]*?>[\s\S]*?<\/table>/gi);
        if (!mtch || mtch.length == 0) throw new Error("Invalid HTML: could not find <table>");
        if (mtch.length == 1) return sheet_to_workbook(html_to_sheet(mtch[0], opts), opts);
        var wb = book_new();
        mtch.forEach(function(s, idx) {
          book_append_sheet(wb, html_to_sheet(s, opts), "Sheet" + (idx + 1));
        });
        return wb;
      }
      function make_html_preamble(ws, R, o) {
        var out = [];
        return out.join("") + "<table" + (o && o.id ? ' id="' + o.id + '"' : "") + ">";
      }
      function sheet_to_html(ws, opts) {
        var o = opts || {};
        var header = o.header != null ? o.header : HTML_BEGIN;
        var footer = o.footer != null ? o.footer : HTML_END;
        var out = [header];
        var r = decode_range(ws["!ref"]);
        o.dense = Array.isArray(ws);
        out.push(make_html_preamble(ws, r, o));
        for (var R = r.s.r; R <= r.e.r; ++R) out.push(make_html_row(ws, r, R, o));
        out.push("</table>" + footer);
        return out.join("");
      }
      function sheet_add_dom(ws, table, _opts) {
        var opts = _opts || {};
        if (DENSE != null) opts.dense = DENSE;
        var or_R = 0, or_C = 0;
        if (opts.origin != null) {
          if (typeof opts.origin == "number") or_R = opts.origin;
          else {
            var _origin = typeof opts.origin == "string" ? decode_cell(opts.origin) : opts.origin;
            or_R = _origin.r;
            or_C = _origin.c;
          }
        }
        var rows = table.getElementsByTagName("tr");
        var sheetRows = Math.min(opts.sheetRows || 1e7, rows.length);
        var range = { s: { r: 0, c: 0 }, e: { r: or_R, c: or_C } };
        if (ws["!ref"]) {
          var _range = decode_range(ws["!ref"]);
          range.s.r = Math.min(range.s.r, _range.s.r);
          range.s.c = Math.min(range.s.c, _range.s.c);
          range.e.r = Math.max(range.e.r, _range.e.r);
          range.e.c = Math.max(range.e.c, _range.e.c);
          if (or_R == -1) range.e.r = or_R = _range.e.r + 1;
        }
        var merges = [], midx = 0;
        var rowinfo = ws["!rows"] || (ws["!rows"] = []);
        var _R = 0, R = 0, _C = 0, C = 0, RS = 0, CS = 0;
        if (!ws["!cols"]) ws["!cols"] = [];
        for (; _R < rows.length && R < sheetRows; ++_R) {
          var row = rows[_R];
          if (is_dom_element_hidden(row)) {
            if (opts.display) continue;
            rowinfo[R] = { hidden: true };
          }
          var elts = row.children;
          for (_C = C = 0; _C < elts.length; ++_C) {
            var elt = elts[_C];
            if (opts.display && is_dom_element_hidden(elt)) continue;
            var v = elt.hasAttribute("data-v") ? elt.getAttribute("data-v") : elt.hasAttribute("v") ? elt.getAttribute("v") : htmldecode(elt.innerHTML);
            var z = elt.getAttribute("data-z") || elt.getAttribute("z");
            for (midx = 0; midx < merges.length; ++midx) {
              var m = merges[midx];
              if (m.s.c == C + or_C && m.s.r < R + or_R && R + or_R <= m.e.r) {
                C = m.e.c + 1 - or_C;
                midx = -1;
              }
            }
            CS = +elt.getAttribute("colspan") || 1;
            if ((RS = +elt.getAttribute("rowspan") || 1) > 1 || CS > 1) merges.push({ s: { r: R + or_R, c: C + or_C }, e: { r: R + or_R + (RS || 1) - 1, c: C + or_C + (CS || 1) - 1 } });
            var o = { t: "s", v };
            var _t = elt.getAttribute("data-t") || elt.getAttribute("t") || "";
            if (v != null) {
              if (v.length == 0) o.t = _t || "z";
              else if (opts.raw || v.trim().length == 0 || _t == "s") {
              } else if (v === "TRUE") o = { t: "b", v: true };
              else if (v === "FALSE") o = { t: "b", v: false };
              else if (!isNaN(fuzzynum(v))) o = { t: "n", v: fuzzynum(v) };
              else if (!isNaN(fuzzydate(v).getDate())) {
                o = { t: "d", v: parseDate(v) };
                if (!opts.cellDates) o = { t: "n", v: datenum(o.v) };
                o.z = opts.dateNF || table_fmt[14];
              }
            }
            if (o.z === void 0 && z != null) o.z = z;
            var l = "", Aelts = elt.getElementsByTagName("A");
            if (Aelts && Aelts.length) {
              for (var Aelti = 0; Aelti < Aelts.length; ++Aelti) if (Aelts[Aelti].hasAttribute("href")) {
                l = Aelts[Aelti].getAttribute("href");
                if (l.charAt(0) != "#") break;
              }
            }
            if (l && l.charAt(0) != "#") o.l = { Target: l };
            if (opts.dense) {
              if (!ws[R + or_R]) ws[R + or_R] = [];
              ws[R + or_R][C + or_C] = o;
            } else ws[encode_cell({ c: C + or_C, r: R + or_R })] = o;
            if (range.e.c < C + or_C) range.e.c = C + or_C;
            C += CS;
          }
          ++R;
        }
        if (merges.length) ws["!merges"] = (ws["!merges"] || []).concat(merges);
        range.e.r = Math.max(range.e.r, R - 1 + or_R);
        ws["!ref"] = encode_range(range);
        if (R >= sheetRows) ws["!fullref"] = encode_range((range.e.r = rows.length - _R + R - 1 + or_R, range));
        return ws;
      }
      function parse_dom_table(table, _opts) {
        var opts = _opts || {};
        var ws = opts.dense ? [] : {};
        return sheet_add_dom(ws, table, _opts);
      }
      function table_to_book(table, opts) {
        return sheet_to_workbook(parse_dom_table(table, opts), opts);
      }
      function is_dom_element_hidden(element) {
        var display = "";
        var get_computed_style = get_get_computed_style_function(element);
        if (get_computed_style) display = get_computed_style(element).getPropertyValue("display");
        if (!display) display = element.style && element.style.display;
        return display === "none";
      }
      function get_get_computed_style_function(element) {
        if (element.ownerDocument.defaultView && typeof element.ownerDocument.defaultView.getComputedStyle === "function") return element.ownerDocument.defaultView.getComputedStyle;
        if (typeof getComputedStyle === "function") return getComputedStyle;
        return null;
      }
      function parse_text_p(text) {
        var fixed = text.replace(/[\t\r\n]/g, " ").trim().replace(/ +/g, " ").replace(/<text:s\/>/g, " ").replace(/<text:s text:c="(\d+)"\/>/g, function($$, $1) {
          return Array(parseInt($1, 10) + 1).join(" ");
        }).replace(/<text:tab[^>]*\/>/g, "	").replace(/<text:line-break\/>/g, "\n");
        var v = unescapexml(fixed.replace(/<[^>]*>/g, ""));
        return [v];
      }
      var number_formats_ods = {
        /* ods name: [short ssf fmt, long ssf fmt] */
        day: ["d", "dd"],
        month: ["m", "mm"],
        year: ["y", "yy"],
        hours: ["h", "hh"],
        minutes: ["m", "mm"],
        seconds: ["s", "ss"],
        "am-pm": ["A/P", "AM/PM"],
        "day-of-week": ["ddd", "dddd"],
        era: ["e", "ee"],
        /* there is no native representation of LO "Q" format */
        quarter: ["\\Qm", 'm\\"th quarter"']
      };
      function parse_content_xml(d, _opts) {
        var opts = _opts || {};
        if (DENSE != null && opts.dense == null) opts.dense = DENSE;
        var str = xlml_normalize(d);
        var state = [], tmp;
        var tag;
        var NFtag = { name: "" }, NF = "", pidx = 0;
        var sheetag;
        var rowtag;
        var Sheets = {}, SheetNames = [];
        var ws = opts.dense ? [] : {};
        var Rn, q;
        var ctag = { value: "" };
        var textp = "", textpidx = 0, textptag;
        var textR = [];
        var R = -1, C = -1, range = { s: { r: 1e6, c: 1e7 }, e: { r: 0, c: 0 } };
        var row_ol = 0;
        var number_format_map = {};
        var merges = [], mrange = {}, mR = 0, mC = 0;
        var rowinfo = [], rowpeat = 1, colpeat = 1;
        var arrayf = [];
        var WB = { Names: [] };
        var atag = {};
        var _Ref = ["", ""];
        var comments = [], comment = {};
        var creator = "", creatoridx = 0;
        var isstub = false, intable = false;
        var i = 0;
        xlmlregex.lastIndex = 0;
        str = str.replace(/<!--([\s\S]*?)-->/mg, "").replace(/<!DOCTYPE[^\[]*\[[^\]]*\]>/gm, "");
        while (Rn = xlmlregex.exec(str)) switch (Rn[3] = Rn[3].replace(/_.*$/, "")) {
          case "table":
          case "\u5DE5\u4F5C\u8868":
            if (Rn[1] === "/") {
              if (range.e.c >= range.s.c && range.e.r >= range.s.r) ws["!ref"] = encode_range(range);
              else ws["!ref"] = "A1:A1";
              if (opts.sheetRows > 0 && opts.sheetRows <= range.e.r) {
                ws["!fullref"] = ws["!ref"];
                range.e.r = opts.sheetRows - 1;
                ws["!ref"] = encode_range(range);
              }
              if (merges.length) ws["!merges"] = merges;
              if (rowinfo.length) ws["!rows"] = rowinfo;
              sheetag.name = sheetag["\u540D\u79F0"] || sheetag.name;
              if (typeof JSON !== "undefined") JSON.stringify(sheetag);
              SheetNames.push(sheetag.name);
              Sheets[sheetag.name] = ws;
              intable = false;
            } else if (Rn[0].charAt(Rn[0].length - 2) !== "/") {
              sheetag = parsexmltag(Rn[0], false);
              R = C = -1;
              range.s.r = range.s.c = 1e7;
              range.e.r = range.e.c = 0;
              ws = opts.dense ? [] : {};
              merges = [];
              rowinfo = [];
              intable = true;
            }
            break;
          case "table-row-group":
            if (Rn[1] === "/") --row_ol;
            else ++row_ol;
            break;
          case "table-row":
          case "\u884C":
            if (Rn[1] === "/") {
              R += rowpeat;
              rowpeat = 1;
              break;
            }
            rowtag = parsexmltag(Rn[0], false);
            if (rowtag["\u884C\u53F7"]) R = rowtag["\u884C\u53F7"] - 1;
            else if (R == -1) R = 0;
            rowpeat = +rowtag["number-rows-repeated"] || 1;
            if (rowpeat < 10) {
              for (i = 0; i < rowpeat; ++i) if (row_ol > 0) rowinfo[R + i] = { level: row_ol };
            }
            C = -1;
            break;
          case "covered-table-cell":
            if (Rn[1] !== "/") ++C;
            if (opts.sheetStubs) {
              if (opts.dense) {
                if (!ws[R]) ws[R] = [];
                ws[R][C] = { t: "z" };
              } else ws[encode_cell({ r: R, c: C })] = { t: "z" };
            }
            textp = "";
            textR = [];
            break;
          case "table-cell":
          case "\u6570\u636E":
            if (Rn[0].charAt(Rn[0].length - 2) === "/") {
              ++C;
              ctag = parsexmltag(Rn[0], false);
              colpeat = parseInt(ctag["number-columns-repeated"] || "1", 10);
              q = { t: "z", v: null };
              if (ctag.formula && opts.cellFormula != false) q.f = ods_to_csf_formula(unescapexml(ctag.formula));
              if ((ctag["\u6570\u636E\u7C7B\u578B"] || ctag["value-type"]) == "string") {
                q.t = "s";
                q.v = unescapexml(ctag["string-value"] || "");
                if (opts.dense) {
                  if (!ws[R]) ws[R] = [];
                  ws[R][C] = q;
                } else {
                  ws[encode_cell({ r: R, c: C })] = q;
                }
              }
              C += colpeat - 1;
            } else if (Rn[1] !== "/") {
              ++C;
              textp = "";
              textpidx = 0;
              textR = [];
              colpeat = 1;
              var rptR = rowpeat ? R + rowpeat - 1 : R;
              if (C > range.e.c) range.e.c = C;
              if (C < range.s.c) range.s.c = C;
              if (R < range.s.r) range.s.r = R;
              if (rptR > range.e.r) range.e.r = rptR;
              ctag = parsexmltag(Rn[0], false);
              comments = [];
              comment = {};
              q = { t: ctag["\u6570\u636E\u7C7B\u578B"] || ctag["value-type"], v: null };
              if (opts.cellFormula) {
                if (ctag.formula) ctag.formula = unescapexml(ctag.formula);
                if (ctag["number-matrix-columns-spanned"] && ctag["number-matrix-rows-spanned"]) {
                  mR = parseInt(ctag["number-matrix-rows-spanned"], 10) || 0;
                  mC = parseInt(ctag["number-matrix-columns-spanned"], 10) || 0;
                  mrange = { s: { r: R, c: C }, e: { r: R + mR - 1, c: C + mC - 1 } };
                  q.F = encode_range(mrange);
                  arrayf.push([mrange, q.F]);
                }
                if (ctag.formula) q.f = ods_to_csf_formula(ctag.formula);
                else for (i = 0; i < arrayf.length; ++i)
                  if (R >= arrayf[i][0].s.r && R <= arrayf[i][0].e.r) {
                    if (C >= arrayf[i][0].s.c && C <= arrayf[i][0].e.c)
                      q.F = arrayf[i][1];
                  }
              }
              if (ctag["number-columns-spanned"] || ctag["number-rows-spanned"]) {
                mR = parseInt(ctag["number-rows-spanned"], 10) || 0;
                mC = parseInt(ctag["number-columns-spanned"], 10) || 0;
                mrange = { s: { r: R, c: C }, e: { r: R + mR - 1, c: C + mC - 1 } };
                merges.push(mrange);
              }
              if (ctag["number-columns-repeated"]) colpeat = parseInt(ctag["number-columns-repeated"], 10);
              switch (q.t) {
                case "boolean":
                  q.t = "b";
                  q.v = parsexmlbool(ctag["boolean-value"]);
                  break;
                case "float":
                  q.t = "n";
                  q.v = parseFloat(ctag.value);
                  break;
                case "percentage":
                  q.t = "n";
                  q.v = parseFloat(ctag.value);
                  break;
                case "currency":
                  q.t = "n";
                  q.v = parseFloat(ctag.value);
                  break;
                case "date":
                  q.t = "d";
                  q.v = parseDate(ctag["date-value"]);
                  if (!opts.cellDates) {
                    q.t = "n";
                    q.v = datenum(q.v);
                  }
                  q.z = "m/d/yy";
                  break;
                case "time":
                  q.t = "n";
                  q.v = parse_isodur(ctag["time-value"]) / 86400;
                  if (opts.cellDates) {
                    q.t = "d";
                    q.v = numdate(q.v);
                  }
                  q.z = "HH:MM:SS";
                  break;
                case "number":
                  q.t = "n";
                  q.v = parseFloat(ctag["\u6570\u636E\u6570\u503C"]);
                  break;
                default:
                  if (q.t === "string" || q.t === "text" || !q.t) {
                    q.t = "s";
                    if (ctag["string-value"] != null) {
                      textp = unescapexml(ctag["string-value"]);
                      textR = [];
                    }
                  } else throw new Error("Unsupported value type " + q.t);
              }
            } else {
              isstub = false;
              if (q.t === "s") {
                q.v = textp || "";
                if (textR.length) q.R = textR;
                isstub = textpidx == 0;
              }
              if (atag.Target) q.l = atag;
              if (comments.length > 0) {
                q.c = comments;
                comments = [];
              }
              if (textp && opts.cellText !== false) q.w = textp;
              if (isstub) {
                q.t = "z";
                delete q.v;
              }
              if (!isstub || opts.sheetStubs) {
                if (!(opts.sheetRows && opts.sheetRows <= R)) {
                  for (var rpt = 0; rpt < rowpeat; ++rpt) {
                    colpeat = parseInt(ctag["number-columns-repeated"] || "1", 10);
                    if (opts.dense) {
                      if (!ws[R + rpt]) ws[R + rpt] = [];
                      ws[R + rpt][C] = rpt == 0 ? q : dup(q);
                      while (--colpeat > 0) ws[R + rpt][C + colpeat] = dup(q);
                    } else {
                      ws[encode_cell({ r: R + rpt, c: C })] = q;
                      while (--colpeat > 0) ws[encode_cell({ r: R + rpt, c: C + colpeat })] = dup(q);
                    }
                    if (range.e.c <= C) range.e.c = C;
                  }
                }
              }
              colpeat = parseInt(ctag["number-columns-repeated"] || "1", 10);
              C += colpeat - 1;
              colpeat = 0;
              q = {};
              textp = "";
              textR = [];
            }
            atag = {};
            break;
          case "document":
          case "document-content":
          case "\u7535\u5B50\u8868\u683C\u6587\u6863":
          case "spreadsheet":
          case "\u4E3B\u4F53":
          case "scripts":
          case "styles":
          case "font-face-decls":
          case "master-styles":
            if (Rn[1] === "/") {
              if ((tmp = state.pop())[0] !== Rn[3]) throw "Bad state: " + tmp;
            } else if (Rn[0].charAt(Rn[0].length - 2) !== "/") state.push([Rn[3], true]);
            break;
          case "annotation":
            if (Rn[1] === "/") {
              if ((tmp = state.pop())[0] !== Rn[3]) throw "Bad state: " + tmp;
              comment.t = textp;
              if (textR.length) comment.R = textR;
              comment.a = creator;
              comments.push(comment);
            } else if (Rn[0].charAt(Rn[0].length - 2) !== "/") {
              state.push([Rn[3], false]);
            }
            creator = "";
            creatoridx = 0;
            textp = "";
            textpidx = 0;
            textR = [];
            break;
          case "creator":
            if (Rn[1] === "/") {
              creator = str.slice(creatoridx, Rn.index);
            } else creatoridx = Rn.index + Rn[0].length;
            break;
          case "meta":
          case "\u5143\u6570\u636E":
          case "settings":
          case "config-item-set":
          case "config-item-map-indexed":
          case "config-item-map-entry":
          case "config-item-map-named":
          case "shapes":
          case "frame":
          case "text-box":
          case "image":
          case "data-pilot-tables":
          case "list-style":
          case "form":
          case "dde-links":
          case "event-listeners":
          case "chart":
            if (Rn[1] === "/") {
              if ((tmp = state.pop())[0] !== Rn[3]) throw "Bad state: " + tmp;
            } else if (Rn[0].charAt(Rn[0].length - 2) !== "/") state.push([Rn[3], false]);
            textp = "";
            textpidx = 0;
            textR = [];
            break;
          case "scientific-number":
            break;
          case "currency-symbol":
            break;
          case "currency-style":
            break;
          case "number-style":
          case "percentage-style":
          case "date-style":
          case "time-style":
            if (Rn[1] === "/") {
              number_format_map[NFtag.name] = NF;
              if ((tmp = state.pop())[0] !== Rn[3]) throw "Bad state: " + tmp;
            } else if (Rn[0].charAt(Rn[0].length - 2) !== "/") {
              NF = "";
              NFtag = parsexmltag(Rn[0], false);
              state.push([Rn[3], true]);
            }
            break;
          case "script":
            break;
          case "libraries":
            break;
          case "automatic-styles":
            break;
          case "default-style":
          case "page-layout":
            break;
          case "style":
            break;
          case "map":
            break;
          case "font-face":
            break;
          case "paragraph-properties":
            break;
          case "table-properties":
            break;
          case "table-column-properties":
            break;
          case "table-row-properties":
            break;
          case "table-cell-properties":
            break;
          case "number":
            switch (state[state.length - 1][0]) {
              case "time-style":
              case "date-style":
                tag = parsexmltag(Rn[0], false);
                NF += number_formats_ods[Rn[3]][tag.style === "long" ? 1 : 0];
                break;
            }
            break;
          case "fraction":
            break;
          case "day":
          case "month":
          case "year":
          case "era":
          case "day-of-week":
          case "week-of-year":
          case "quarter":
          case "hours":
          case "minutes":
          case "seconds":
          case "am-pm":
            switch (state[state.length - 1][0]) {
              case "time-style":
              case "date-style":
                tag = parsexmltag(Rn[0], false);
                NF += number_formats_ods[Rn[3]][tag.style === "long" ? 1 : 0];
                break;
            }
            break;
          case "boolean-style":
            break;
          case "boolean":
            break;
          case "text-style":
            break;
          case "text":
            if (Rn[0].slice(-2) === "/>") break;
            else if (Rn[1] === "/") switch (state[state.length - 1][0]) {
              case "number-style":
              case "date-style":
              case "time-style":
                NF += str.slice(pidx, Rn.index);
                break;
            }
            else pidx = Rn.index + Rn[0].length;
            break;
          case "named-range":
            tag = parsexmltag(Rn[0], false);
            _Ref = ods_to_csf_3D(tag["cell-range-address"]);
            var nrange = { Name: tag.name, Ref: _Ref[0] + "!" + _Ref[1] };
            if (intable) nrange.Sheet = SheetNames.length;
            WB.Names.push(nrange);
            break;
          case "text-content":
            break;
          case "text-properties":
            break;
          case "embedded-text":
            break;
          case "body":
          case "\u7535\u5B50\u8868\u683C":
            break;
          case "forms":
            break;
          case "table-column":
            break;
          case "table-header-rows":
            break;
          case "table-rows":
            break;
          case "table-column-group":
            break;
          case "table-header-columns":
            break;
          case "table-columns":
            break;
          case "null-date":
            break;
          case "graphic-properties":
            break;
          case "calculation-settings":
            break;
          case "named-expressions":
            break;
          case "label-range":
            break;
          case "label-ranges":
            break;
          case "named-expression":
            break;
          case "sort":
            break;
          case "sort-by":
            break;
          case "sort-groups":
            break;
          case "tab":
            break;
          case "line-break":
            break;
          case "span":
            break;
          case "p":
          case "\u6587\u672C\u4E32":
            if (["master-styles"].indexOf(state[state.length - 1][0]) > -1) break;
            if (Rn[1] === "/" && (!ctag || !ctag["string-value"])) {
              var ptp = parse_text_p(str.slice(textpidx, Rn.index), textptag);
              textp = (textp.length > 0 ? textp + "\n" : "") + ptp[0];
            } else {
              textptag = parsexmltag(Rn[0], false);
              textpidx = Rn.index + Rn[0].length;
            }
            break;
          case "s":
            break;
          case "database-range":
            if (Rn[1] === "/") break;
            try {
              _Ref = ods_to_csf_3D(parsexmltag(Rn[0])["target-range-address"]);
              Sheets[_Ref[0]]["!autofilter"] = { ref: _Ref[1] };
            } catch (e) {
            }
            break;
          case "date":
            break;
          case "object":
            break;
          case "title":
          case "\u6807\u9898":
            break;
          case "desc":
            break;
          case "binary-data":
            break;
          case "table-source":
            break;
          case "scenario":
            break;
          case "iteration":
            break;
          case "content-validations":
            break;
          case "content-validation":
            break;
          case "help-message":
            break;
          case "error-message":
            break;
          case "database-ranges":
            break;
          case "filter":
            break;
          case "filter-and":
            break;
          case "filter-or":
            break;
          case "filter-condition":
            break;
          case "list-level-style-bullet":
            break;
          case "list-level-style-number":
            break;
          case "list-level-properties":
            break;
          case "sender-firstname":
          case "sender-lastname":
          case "sender-initials":
          case "sender-title":
          case "sender-position":
          case "sender-email":
          case "sender-phone-private":
          case "sender-fax":
          case "sender-company":
          case "sender-phone-work":
          case "sender-street":
          case "sender-city":
          case "sender-postal-code":
          case "sender-country":
          case "sender-state-or-province":
          case "author-name":
          case "author-initials":
          case "chapter":
          case "file-name":
          case "template-name":
          case "sheet-name":
            break;
          case "event-listener":
            break;
          case "initial-creator":
          case "creation-date":
          case "print-date":
          case "generator":
          case "document-statistic":
          case "user-defined":
          case "editing-duration":
          case "editing-cycles":
            break;
          case "config-item":
            break;
          case "page-number":
            break;
          case "page-count":
            break;
          case "time":
            break;
          case "cell-range-source":
            break;
          case "detective":
            break;
          case "operation":
            break;
          case "highlighted-range":
            break;
          case "data-pilot-table":
          case "source-cell-range":
          case "source-service":
          case "data-pilot-field":
          case "data-pilot-level":
          case "data-pilot-subtotals":
          case "data-pilot-subtotal":
          case "data-pilot-members":
          case "data-pilot-member":
          case "data-pilot-display-info":
          case "data-pilot-sort-info":
          case "data-pilot-layout-info":
          case "data-pilot-field-reference":
          case "data-pilot-groups":
          case "data-pilot-group":
          case "data-pilot-group-member":
            break;
          case "rect":
            break;
          case "dde-connection-decls":
          case "dde-connection-decl":
          case "dde-link":
          case "dde-source":
            break;
          case "properties":
            break;
          case "property":
            break;
          case "a":
            if (Rn[1] !== "/") {
              atag = parsexmltag(Rn[0], false);
              if (!atag.href) break;
              atag.Target = unescapexml(atag.href);
              delete atag.href;
              if (atag.Target.charAt(0) == "#" && atag.Target.indexOf(".") > -1) {
                _Ref = ods_to_csf_3D(atag.Target.slice(1));
                atag.Target = "#" + _Ref[0] + "!" + _Ref[1];
              } else if (atag.Target.match(/^\.\.[\\\/]/)) atag.Target = atag.Target.slice(3);
            }
            break;
          case "table-protection":
            break;
          case "data-pilot-grand-total":
            break;
          case "office-document-common-attrs":
            break;
          default:
            switch (Rn[2]) {
              case "dc:":
              case "calcext:":
              case "loext:":
              case "ooo:":
              case "chartooo:":
              case "draw:":
              case "style:":
              case "chart:":
              case "form:":
              case "uof:":
              case "\u8868:":
              case "\u5B57:":
                break;
              default:
                if (opts.WTF) throw new Error(Rn);
            }
        }
        var out = {
          Sheets,
          SheetNames,
          Workbook: WB
        };
        if (opts.bookSheets) delete out.Sheets;
        return out;
      }
      function parse_ods(zip, opts) {
        opts = opts || {};
        if (safegetzipfile(zip, "META-INF/manifest.xml")) parse_manifest(getzipdata(zip, "META-INF/manifest.xml"), opts);
        var content = getzipstr(zip, "content.xml");
        if (!content) throw new Error("Missing content.xml in ODS / UOF file");
        var wb = parse_content_xml(utf8read(content), opts);
        if (safegetzipfile(zip, "meta.xml")) wb.Props = parse_core_props(getzipdata(zip, "meta.xml"));
        return wb;
      }
      function parse_fods(data, opts) {
        return parse_content_xml(data, opts);
      }
      var write_styles_ods = /* @__PURE__ */ function() {
        var master_styles = [
          "<office:master-styles>",
          '<style:master-page style:name="mp1" style:page-layout-name="mp1">',
          "<style:header/>",
          '<style:header-left style:display="false"/>',
          "<style:footer/>",
          '<style:footer-left style:display="false"/>',
          "</style:master-page>",
          "</office:master-styles>"
        ].join("");
        var payload = "<office:document-styles " + wxt_helper({
          "xmlns:office": "urn:oasis:names:tc:opendocument:xmlns:office:1.0",
          "xmlns:table": "urn:oasis:names:tc:opendocument:xmlns:table:1.0",
          "xmlns:style": "urn:oasis:names:tc:opendocument:xmlns:style:1.0",
          "xmlns:text": "urn:oasis:names:tc:opendocument:xmlns:text:1.0",
          "xmlns:draw": "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0",
          "xmlns:fo": "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0",
          "xmlns:xlink": "http://www.w3.org/1999/xlink",
          "xmlns:dc": "http://purl.org/dc/elements/1.1/",
          "xmlns:number": "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0",
          "xmlns:svg": "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0",
          "xmlns:of": "urn:oasis:names:tc:opendocument:xmlns:of:1.2",
          "office:version": "1.2"
        }) + ">" + master_styles + "</office:document-styles>";
        return function wso() {
          return XML_HEADER + payload;
        };
      }();
      var write_content_ods = /* @__PURE__ */ function() {
        var write_text_p = function(text) {
          return escapexml(text).replace(/  +/g, function($$) {
            return '<text:s text:c="' + $$.length + '"/>';
          }).replace(/\t/g, "<text:tab/>").replace(/\n/g, "</text:p><text:p>").replace(/^ /, "<text:s/>").replace(/ $/, "<text:s/>");
        };
        var null_cell_xml = "          <table:table-cell />\n";
        var covered_cell_xml = "          <table:covered-table-cell/>\n";
        var write_ws2 = function(ws, wb, i) {
          var o = [];
          o.push('      <table:table table:name="' + escapexml(wb.SheetNames[i]) + '" table:style-name="ta1">\n');
          var R = 0, C = 0, range = decode_range(ws["!ref"] || "A1");
          var marr = ws["!merges"] || [], mi = 0;
          var dense = Array.isArray(ws);
          if (ws["!cols"]) {
            for (C = 0; C <= range.e.c; ++C) o.push("        <table:table-column" + (ws["!cols"][C] ? ' table:style-name="co' + ws["!cols"][C].ods + '"' : "") + "></table:table-column>\n");
          }
          var H = "", ROWS = ws["!rows"] || [];
          for (R = 0; R < range.s.r; ++R) {
            H = ROWS[R] ? ' table:style-name="ro' + ROWS[R].ods + '"' : "";
            o.push("        <table:table-row" + H + "></table:table-row>\n");
          }
          for (; R <= range.e.r; ++R) {
            H = ROWS[R] ? ' table:style-name="ro' + ROWS[R].ods + '"' : "";
            o.push("        <table:table-row" + H + ">\n");
            for (C = 0; C < range.s.c; ++C) o.push(null_cell_xml);
            for (; C <= range.e.c; ++C) {
              var skip = false, ct = {}, textp = "";
              for (mi = 0; mi != marr.length; ++mi) {
                if (marr[mi].s.c > C) continue;
                if (marr[mi].s.r > R) continue;
                if (marr[mi].e.c < C) continue;
                if (marr[mi].e.r < R) continue;
                if (marr[mi].s.c != C || marr[mi].s.r != R) skip = true;
                ct["table:number-columns-spanned"] = marr[mi].e.c - marr[mi].s.c + 1;
                ct["table:number-rows-spanned"] = marr[mi].e.r - marr[mi].s.r + 1;
                break;
              }
              if (skip) {
                o.push(covered_cell_xml);
                continue;
              }
              var ref = encode_cell({ r: R, c: C }), cell = dense ? (ws[R] || [])[C] : ws[ref];
              if (cell && cell.f) {
                ct["table:formula"] = escapexml(csf_to_ods_formula(cell.f));
                if (cell.F) {
                  if (cell.F.slice(0, ref.length) == ref) {
                    var _Fref = decode_range(cell.F);
                    ct["table:number-matrix-columns-spanned"] = _Fref.e.c - _Fref.s.c + 1;
                    ct["table:number-matrix-rows-spanned"] = _Fref.e.r - _Fref.s.r + 1;
                  }
                }
              }
              if (!cell) {
                o.push(null_cell_xml);
                continue;
              }
              switch (cell.t) {
                case "b":
                  textp = cell.v ? "TRUE" : "FALSE";
                  ct["office:value-type"] = "boolean";
                  ct["office:boolean-value"] = cell.v ? "true" : "false";
                  break;
                case "n":
                  textp = cell.w || String(cell.v || 0);
                  ct["office:value-type"] = "float";
                  ct["office:value"] = cell.v || 0;
                  break;
                case "s":
                case "str":
                  textp = cell.v == null ? "" : cell.v;
                  ct["office:value-type"] = "string";
                  break;
                case "d":
                  textp = cell.w || parseDate(cell.v).toISOString();
                  ct["office:value-type"] = "date";
                  ct["office:date-value"] = parseDate(cell.v).toISOString();
                  ct["table:style-name"] = "ce1";
                  break;
                default:
                  o.push(null_cell_xml);
                  continue;
              }
              var text_p = write_text_p(textp);
              if (cell.l && cell.l.Target) {
                var _tgt = cell.l.Target;
                _tgt = _tgt.charAt(0) == "#" ? "#" + csf_to_ods_3D(_tgt.slice(1)) : _tgt;
                if (_tgt.charAt(0) != "#" && !_tgt.match(/^\w+:/)) _tgt = "../" + _tgt;
                text_p = writextag("text:a", text_p, { "xlink:href": _tgt.replace(/&/g, "&amp;") });
              }
              o.push("          " + writextag("table:table-cell", writextag("text:p", text_p, {}), ct) + "\n");
            }
            o.push("        </table:table-row>\n");
          }
          o.push("      </table:table>\n");
          return o.join("");
        };
        var write_automatic_styles_ods = function(o, wb) {
          o.push(" <office:automatic-styles>\n");
          o.push('  <number:date-style style:name="N37" number:automatic-order="true">\n');
          o.push('   <number:month number:style="long"/>\n');
          o.push("   <number:text>/</number:text>\n");
          o.push('   <number:day number:style="long"/>\n');
          o.push("   <number:text>/</number:text>\n");
          o.push("   <number:year/>\n");
          o.push("  </number:date-style>\n");
          var cidx = 0;
          wb.SheetNames.map(function(n) {
            return wb.Sheets[n];
          }).forEach(function(ws) {
            if (!ws) return;
            if (ws["!cols"]) {
              for (var C = 0; C < ws["!cols"].length; ++C) if (ws["!cols"][C]) {
                var colobj = ws["!cols"][C];
                if (colobj.width == null && colobj.wpx == null && colobj.wch == null) continue;
                process_col(colobj);
                colobj.ods = cidx;
                var w = ws["!cols"][C].wpx + "px";
                o.push('  <style:style style:name="co' + cidx + '" style:family="table-column">\n');
                o.push('   <style:table-column-properties fo:break-before="auto" style:column-width="' + w + '"/>\n');
                o.push("  </style:style>\n");
                ++cidx;
              }
            }
          });
          var ridx = 0;
          wb.SheetNames.map(function(n) {
            return wb.Sheets[n];
          }).forEach(function(ws) {
            if (!ws) return;
            if (ws["!rows"]) {
              for (var R = 0; R < ws["!rows"].length; ++R) if (ws["!rows"][R]) {
                ws["!rows"][R].ods = ridx;
                var h = ws["!rows"][R].hpx + "px";
                o.push('  <style:style style:name="ro' + ridx + '" style:family="table-row">\n');
                o.push('   <style:table-row-properties fo:break-before="auto" style:row-height="' + h + '"/>\n');
                o.push("  </style:style>\n");
                ++ridx;
              }
            }
          });
          o.push('  <style:style style:name="ta1" style:family="table" style:master-page-name="mp1">\n');
          o.push('   <style:table-properties table:display="true" style:writing-mode="lr-tb"/>\n');
          o.push("  </style:style>\n");
          o.push('  <style:style style:name="ce1" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N37"/>\n');
          o.push(" </office:automatic-styles>\n");
        };
        return function wcx(wb, opts) {
          var o = [XML_HEADER];
          var attr = wxt_helper({
            "xmlns:office": "urn:oasis:names:tc:opendocument:xmlns:office:1.0",
            "xmlns:table": "urn:oasis:names:tc:opendocument:xmlns:table:1.0",
            "xmlns:style": "urn:oasis:names:tc:opendocument:xmlns:style:1.0",
            "xmlns:text": "urn:oasis:names:tc:opendocument:xmlns:text:1.0",
            "xmlns:draw": "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0",
            "xmlns:fo": "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0",
            "xmlns:xlink": "http://www.w3.org/1999/xlink",
            "xmlns:dc": "http://purl.org/dc/elements/1.1/",
            "xmlns:meta": "urn:oasis:names:tc:opendocument:xmlns:meta:1.0",
            "xmlns:number": "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0",
            "xmlns:presentation": "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0",
            "xmlns:svg": "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0",
            "xmlns:chart": "urn:oasis:names:tc:opendocument:xmlns:chart:1.0",
            "xmlns:dr3d": "urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0",
            "xmlns:math": "http://www.w3.org/1998/Math/MathML",
            "xmlns:form": "urn:oasis:names:tc:opendocument:xmlns:form:1.0",
            "xmlns:script": "urn:oasis:names:tc:opendocument:xmlns:script:1.0",
            "xmlns:ooo": "http://openoffice.org/2004/office",
            "xmlns:ooow": "http://openoffice.org/2004/writer",
            "xmlns:oooc": "http://openoffice.org/2004/calc",
            "xmlns:dom": "http://www.w3.org/2001/xml-events",
            "xmlns:xforms": "http://www.w3.org/2002/xforms",
            "xmlns:xsd": "http://www.w3.org/2001/XMLSchema",
            "xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
            "xmlns:sheet": "urn:oasis:names:tc:opendocument:sh33tjs:1.0",
            "xmlns:rpt": "http://openoffice.org/2005/report",
            "xmlns:of": "urn:oasis:names:tc:opendocument:xmlns:of:1.2",
            "xmlns:xhtml": "http://www.w3.org/1999/xhtml",
            "xmlns:grddl": "http://www.w3.org/2003/g/data-view#",
            "xmlns:tableooo": "http://openoffice.org/2009/table",
            "xmlns:drawooo": "http://openoffice.org/2010/draw",
            "xmlns:calcext": "urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0",
            "xmlns:loext": "urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0",
            "xmlns:field": "urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0",
            "xmlns:formx": "urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0",
            "xmlns:css3t": "http://www.w3.org/TR/css3-text/",
            "office:version": "1.2"
          });
          var fods = wxt_helper({
            "xmlns:config": "urn:oasis:names:tc:opendocument:xmlns:config:1.0",
            "office:mimetype": "application/vnd.oasis.opendocument.spreadsheet"
          });
          if (opts.bookType == "fods") {
            o.push("<office:document" + attr + fods + ">\n");
            o.push(write_meta_ods().replace(/office:document-meta/g, "office:meta"));
          } else o.push("<office:document-content" + attr + ">\n");
          write_automatic_styles_ods(o, wb);
          o.push("  <office:body>\n");
          o.push("    <office:spreadsheet>\n");
          for (var i = 0; i != wb.SheetNames.length; ++i) o.push(write_ws2(wb.Sheets[wb.SheetNames[i]], wb, i, opts));
          o.push("    </office:spreadsheet>\n");
          o.push("  </office:body>\n");
          if (opts.bookType == "fods") o.push("</office:document>");
          else o.push("</office:document-content>");
          return o.join("");
        };
      }();
      function write_ods(wb, opts) {
        if (opts.bookType == "fods") return write_content_ods(wb, opts);
        var zip = zip_new();
        var f = "";
        var manifest = [];
        var rdf = [];
        f = "mimetype";
        zip_add_file(zip, f, "application/vnd.oasis.opendocument.spreadsheet");
        f = "content.xml";
        zip_add_file(zip, f, write_content_ods(wb, opts));
        manifest.push([f, "text/xml"]);
        rdf.push([f, "ContentFile"]);
        f = "styles.xml";
        zip_add_file(zip, f, write_styles_ods(wb, opts));
        manifest.push([f, "text/xml"]);
        rdf.push([f, "StylesFile"]);
        f = "meta.xml";
        zip_add_file(zip, f, XML_HEADER + write_meta_ods());
        manifest.push([f, "text/xml"]);
        rdf.push([f, "MetadataFile"]);
        f = "manifest.rdf";
        zip_add_file(zip, f, write_rdf(
          rdf
          /*, opts*/
        ));
        manifest.push([f, "application/rdf+xml"]);
        f = "META-INF/manifest.xml";
        zip_add_file(zip, f, write_manifest(
          manifest
          /*, opts*/
        ));
        return zip;
      }
      function u8_to_dataview(array) {
        return new DataView(array.buffer, array.byteOffset, array.byteLength);
      }
      function u8str(u8) {
        return typeof TextDecoder != "undefined" ? new TextDecoder().decode(u8) : utf8read(a2s(u8));
      }
      function stru8(str) {
        return typeof TextEncoder != "undefined" ? new TextEncoder().encode(str) : s2a(utf8write(str));
      }
      function u8contains(body, search) {
        outer:
          for (var L = 0; L <= body.length - search.length; ++L) {
            for (var j = 0; j < search.length; ++j)
              if (body[L + j] != search[j])
                continue outer;
            return true;
          }
        return false;
      }
      function u8concat(u8a) {
        var len = u8a.reduce(function(acc, x) {
          return acc + x.length;
        }, 0);
        var out = new Uint8Array(len);
        var off = 0;
        u8a.forEach(function(u8) {
          out.set(u8, off);
          off += u8.length;
        });
        return out;
      }
      function popcnt(x) {
        x -= x >> 1 & 1431655765;
        x = (x & 858993459) + (x >> 2 & 858993459);
        return (x + (x >> 4) & 252645135) * 16843009 >>> 24;
      }
      function readDecimal128LE(buf, offset) {
        var exp = (buf[offset + 15] & 127) << 7 | buf[offset + 14] >> 1;
        var mantissa = buf[offset + 14] & 1;
        for (var j = offset + 13; j >= offset; --j)
          mantissa = mantissa * 256 + buf[j];
        return (buf[offset + 15] & 128 ? -mantissa : mantissa) * Math.pow(10, exp - 6176);
      }
      function writeDecimal128LE(buf, offset, value) {
        var exp = Math.floor(value == 0 ? 0 : Math.LOG10E * Math.log(Math.abs(value))) + 6176 - 20;
        var mantissa = value / Math.pow(10, exp - 6176);
        buf[offset + 15] |= exp >> 7;
        buf[offset + 14] |= (exp & 127) << 1;
        for (var i = 0; mantissa >= 1; ++i, mantissa /= 256)
          buf[offset + i] = mantissa & 255;
        buf[offset + 15] |= value >= 0 ? 0 : 128;
      }
      function parse_varint49(buf, ptr) {
        var l = ptr ? ptr[0] : 0;
        var usz = buf[l] & 127;
        varint:
          if (buf[l++] >= 128) {
            usz |= (buf[l] & 127) << 7;
            if (buf[l++] < 128)
              break varint;
            usz |= (buf[l] & 127) << 14;
            if (buf[l++] < 128)
              break varint;
            usz |= (buf[l] & 127) << 21;
            if (buf[l++] < 128)
              break varint;
            usz += (buf[l] & 127) * Math.pow(2, 28);
            ++l;
            if (buf[l++] < 128)
              break varint;
            usz += (buf[l] & 127) * Math.pow(2, 35);
            ++l;
            if (buf[l++] < 128)
              break varint;
            usz += (buf[l] & 127) * Math.pow(2, 42);
            ++l;
            if (buf[l++] < 128)
              break varint;
          }
        if (ptr)
          ptr[0] = l;
        return usz;
      }
      function write_varint49(v) {
        var usz = new Uint8Array(7);
        usz[0] = v & 127;
        var L = 1;
        sz:
          if (v > 127) {
            usz[L - 1] |= 128;
            usz[L] = v >> 7 & 127;
            ++L;
            if (v <= 16383)
              break sz;
            usz[L - 1] |= 128;
            usz[L] = v >> 14 & 127;
            ++L;
            if (v <= 2097151)
              break sz;
            usz[L - 1] |= 128;
            usz[L] = v >> 21 & 127;
            ++L;
            if (v <= 268435455)
              break sz;
            usz[L - 1] |= 128;
            usz[L] = v / 256 >>> 21 & 127;
            ++L;
            if (v <= 34359738367)
              break sz;
            usz[L - 1] |= 128;
            usz[L] = v / 65536 >>> 21 & 127;
            ++L;
            if (v <= 4398046511103)
              break sz;
            usz[L - 1] |= 128;
            usz[L] = v / 16777216 >>> 21 & 127;
            ++L;
          }
        return usz.slice(0, L);
      }
      function varint_to_i32(buf) {
        var l = 0, i32 = buf[l] & 127;
        varint:
          if (buf[l++] >= 128) {
            i32 |= (buf[l] & 127) << 7;
            if (buf[l++] < 128)
              break varint;
            i32 |= (buf[l] & 127) << 14;
            if (buf[l++] < 128)
              break varint;
            i32 |= (buf[l] & 127) << 21;
            if (buf[l++] < 128)
              break varint;
            i32 |= (buf[l] & 127) << 28;
          }
        return i32;
      }
      function parse_shallow(buf) {
        var out = [], ptr = [0];
        while (ptr[0] < buf.length) {
          var off = ptr[0];
          var num = parse_varint49(buf, ptr);
          var type = num & 7;
          num = Math.floor(num / 8);
          var len = 0;
          var res;
          if (num == 0)
            break;
          switch (type) {
            case 0:
              {
                var l = ptr[0];
                while (buf[ptr[0]++] >= 128)
                  ;
                res = buf.slice(l, ptr[0]);
              }
              break;
            case 5:
              len = 4;
              res = buf.slice(ptr[0], ptr[0] + len);
              ptr[0] += len;
              break;
            case 1:
              len = 8;
              res = buf.slice(ptr[0], ptr[0] + len);
              ptr[0] += len;
              break;
            case 2:
              len = parse_varint49(buf, ptr);
              res = buf.slice(ptr[0], ptr[0] + len);
              ptr[0] += len;
              break;
            case 3:
            case 4:
            default:
              throw new Error("PB Type ".concat(type, " for Field ").concat(num, " at offset ").concat(off));
          }
          var v = { data: res, type };
          if (out[num] == null)
            out[num] = [v];
          else
            out[num].push(v);
        }
        return out;
      }
      function write_shallow(proto) {
        var out = [];
        proto.forEach(function(field, idx) {
          field.forEach(function(item) {
            if (!item.data)
              return;
            out.push(write_varint49(idx * 8 + item.type));
            if (item.type == 2)
              out.push(write_varint49(item.data.length));
            out.push(item.data);
          });
        });
        return u8concat(out);
      }
      function mappa(data, cb) {
        return (data == null ? void 0 : data.map(function(d) {
          return cb(d.data);
        })) || [];
      }
      function parse_iwa_file(buf) {
        var _a;
        var out = [], ptr = [0];
        while (ptr[0] < buf.length) {
          var len = parse_varint49(buf, ptr);
          var ai = parse_shallow(buf.slice(ptr[0], ptr[0] + len));
          ptr[0] += len;
          var res = {
            id: varint_to_i32(ai[1][0].data),
            messages: []
          };
          ai[2].forEach(function(b) {
            var mi = parse_shallow(b.data);
            var fl = varint_to_i32(mi[3][0].data);
            res.messages.push({
              meta: mi,
              data: buf.slice(ptr[0], ptr[0] + fl)
            });
            ptr[0] += fl;
          });
          if ((_a = ai[3]) == null ? void 0 : _a[0])
            res.merge = varint_to_i32(ai[3][0].data) >>> 0 > 0;
          out.push(res);
        }
        return out;
      }
      function write_iwa_file(ias) {
        var bufs = [];
        ias.forEach(function(ia) {
          var ai = [];
          ai[1] = [{ data: write_varint49(ia.id), type: 0 }];
          ai[2] = [];
          if (ia.merge != null)
            ai[3] = [{ data: write_varint49(+!!ia.merge), type: 0 }];
          var midata = [];
          ia.messages.forEach(function(mi) {
            midata.push(mi.data);
            mi.meta[3] = [{ type: 0, data: write_varint49(mi.data.length) }];
            ai[2].push({ data: write_shallow(mi.meta), type: 2 });
          });
          var aipayload = write_shallow(ai);
          bufs.push(write_varint49(aipayload.length));
          bufs.push(aipayload);
          midata.forEach(function(mid) {
            return bufs.push(mid);
          });
        });
        return u8concat(bufs);
      }
      function parse_snappy_chunk(type, buf) {
        if (type != 0)
          throw new Error("Unexpected Snappy chunk type ".concat(type));
        var ptr = [0];
        var usz = parse_varint49(buf, ptr);
        var chunks = [];
        while (ptr[0] < buf.length) {
          var tag = buf[ptr[0]] & 3;
          if (tag == 0) {
            var len = buf[ptr[0]++] >> 2;
            if (len < 60)
              ++len;
            else {
              var c = len - 59;
              len = buf[ptr[0]];
              if (c > 1)
                len |= buf[ptr[0] + 1] << 8;
              if (c > 2)
                len |= buf[ptr[0] + 2] << 16;
              if (c > 3)
                len |= buf[ptr[0] + 3] << 24;
              len >>>= 0;
              len++;
              ptr[0] += c;
            }
            chunks.push(buf.slice(ptr[0], ptr[0] + len));
            ptr[0] += len;
            continue;
          } else {
            var offset = 0, length = 0;
            if (tag == 1) {
              length = (buf[ptr[0]] >> 2 & 7) + 4;
              offset = (buf[ptr[0]++] & 224) << 3;
              offset |= buf[ptr[0]++];
            } else {
              length = (buf[ptr[0]++] >> 2) + 1;
              if (tag == 2) {
                offset = buf[ptr[0]] | buf[ptr[0] + 1] << 8;
                ptr[0] += 2;
              } else {
                offset = (buf[ptr[0]] | buf[ptr[0] + 1] << 8 | buf[ptr[0] + 2] << 16 | buf[ptr[0] + 3] << 24) >>> 0;
                ptr[0] += 4;
              }
            }
            chunks = [u8concat(chunks)];
            if (offset == 0)
              throw new Error("Invalid offset 0");
            if (offset > chunks[0].length)
              throw new Error("Invalid offset beyond length");
            if (length >= offset) {
              chunks.push(chunks[0].slice(-offset));
              length -= offset;
              while (length >= chunks[chunks.length - 1].length) {
                chunks.push(chunks[chunks.length - 1]);
                length -= chunks[chunks.length - 1].length;
              }
            }
            chunks.push(chunks[0].slice(-offset, -offset + length));
          }
        }
        var o = u8concat(chunks);
        if (o.length != usz)
          throw new Error("Unexpected length: ".concat(o.length, " != ").concat(usz));
        return o;
      }
      function decompress_iwa_file(buf) {
        var out = [];
        var l = 0;
        while (l < buf.length) {
          var t = buf[l++];
          var len = buf[l] | buf[l + 1] << 8 | buf[l + 2] << 16;
          l += 3;
          out.push(parse_snappy_chunk(t, buf.slice(l, l + len)));
          l += len;
        }
        if (l !== buf.length)
          throw new Error("data is not a valid framed stream!");
        return u8concat(out);
      }
      function compress_iwa_file(buf) {
        var out = [];
        var l = 0;
        while (l < buf.length) {
          var c = Math.min(buf.length - l, 268435455);
          var frame = new Uint8Array(4);
          out.push(frame);
          var usz = write_varint49(c);
          var L = usz.length;
          out.push(usz);
          if (c <= 60) {
            L++;
            out.push(new Uint8Array([c - 1 << 2]));
          } else if (c <= 256) {
            L += 2;
            out.push(new Uint8Array([240, c - 1 & 255]));
          } else if (c <= 65536) {
            L += 3;
            out.push(new Uint8Array([244, c - 1 & 255, c - 1 >> 8 & 255]));
          } else if (c <= 16777216) {
            L += 4;
            out.push(new Uint8Array([248, c - 1 & 255, c - 1 >> 8 & 255, c - 1 >> 16 & 255]));
          } else if (c <= 4294967296) {
            L += 5;
            out.push(new Uint8Array([252, c - 1 & 255, c - 1 >> 8 & 255, c - 1 >> 16 & 255, c - 1 >>> 24 & 255]));
          }
          out.push(buf.slice(l, l + c));
          L += c;
          frame[0] = 0;
          frame[1] = L & 255;
          frame[2] = L >> 8 & 255;
          frame[3] = L >> 16 & 255;
          l += c;
        }
        return u8concat(out);
      }
      function parse_old_storage(buf, sst, rsst, v) {
        var dv = u8_to_dataview(buf);
        var flags = dv.getUint32(4, true);
        var data_offset = (v > 1 ? 12 : 8) + popcnt(flags & (v > 1 ? 3470 : 398)) * 4;
        var ridx = -1, sidx = -1, ieee = NaN, dt = new Date(2001, 0, 1);
        if (flags & 512) {
          ridx = dv.getUint32(data_offset, true);
          data_offset += 4;
        }
        data_offset += popcnt(flags & (v > 1 ? 12288 : 4096)) * 4;
        if (flags & 16) {
          sidx = dv.getUint32(data_offset, true);
          data_offset += 4;
        }
        if (flags & 32) {
          ieee = dv.getFloat64(data_offset, true);
          data_offset += 8;
        }
        if (flags & 64) {
          dt.setTime(dt.getTime() + dv.getFloat64(data_offset, true) * 1e3);
          data_offset += 8;
        }
        var ret;
        switch (buf[2]) {
          case 0:
            break;
          case 2:
            ret = { t: "n", v: ieee };
            break;
          case 3:
            ret = { t: "s", v: sst[sidx] };
            break;
          case 5:
            ret = { t: "d", v: dt };
            break;
          case 6:
            ret = { t: "b", v: ieee > 0 };
            break;
          case 7:
            ret = { t: "n", v: ieee / 86400 };
            break;
          case 8:
            ret = { t: "e", v: 0 };
            break;
          case 9:
            {
              if (ridx > -1)
                ret = { t: "s", v: rsst[ridx] };
              else if (sidx > -1)
                ret = { t: "s", v: sst[sidx] };
              else if (!isNaN(ieee))
                ret = { t: "n", v: ieee };
              else
                throw new Error("Unsupported cell type ".concat(buf.slice(0, 4)));
            }
            break;
          default:
            throw new Error("Unsupported cell type ".concat(buf.slice(0, 4)));
        }
        return ret;
      }
      function parse_new_storage(buf, sst, rsst) {
        var dv = u8_to_dataview(buf);
        var flags = dv.getUint32(8, true);
        var data_offset = 12;
        var ridx = -1, sidx = -1, d128 = NaN, ieee = NaN, dt = new Date(2001, 0, 1);
        if (flags & 1) {
          d128 = readDecimal128LE(buf, data_offset);
          data_offset += 16;
        }
        if (flags & 2) {
          ieee = dv.getFloat64(data_offset, true);
          data_offset += 8;
        }
        if (flags & 4) {
          dt.setTime(dt.getTime() + dv.getFloat64(data_offset, true) * 1e3);
          data_offset += 8;
        }
        if (flags & 8) {
          sidx = dv.getUint32(data_offset, true);
          data_offset += 4;
        }
        if (flags & 16) {
          ridx = dv.getUint32(data_offset, true);
          data_offset += 4;
        }
        var ret;
        switch (buf[1]) {
          case 0:
            break;
          case 2:
            ret = { t: "n", v: d128 };
            break;
          case 3:
            ret = { t: "s", v: sst[sidx] };
            break;
          case 5:
            ret = { t: "d", v: dt };
            break;
          case 6:
            ret = { t: "b", v: ieee > 0 };
            break;
          case 7:
            ret = { t: "n", v: ieee / 86400 };
            break;
          case 8:
            ret = { t: "e", v: 0 };
            break;
          case 9:
            {
              if (ridx > -1)
                ret = { t: "s", v: rsst[ridx] };
              else
                throw new Error("Unsupported cell type ".concat(buf[1], " : ").concat(flags & 31, " : ").concat(buf.slice(0, 4)));
            }
            break;
          case 10:
            ret = { t: "n", v: d128 };
            break;
          default:
            throw new Error("Unsupported cell type ".concat(buf[1], " : ").concat(flags & 31, " : ").concat(buf.slice(0, 4)));
        }
        return ret;
      }
      function write_new_storage(cell, sst) {
        var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, flags = 0;
        out[0] = 5;
        switch (cell.t) {
          case "n":
            out[1] = 2;
            writeDecimal128LE(out, l, cell.v);
            flags |= 1;
            l += 16;
            break;
          case "b":
            out[1] = 6;
            dv.setFloat64(l, cell.v ? 1 : 0, true);
            flags |= 2;
            l += 8;
            break;
          case "s":
            if (sst.indexOf(cell.v) == -1)
              throw new Error("Value ".concat(cell.v, " missing from SST!"));
            out[1] = 3;
            dv.setUint32(l, sst.indexOf(cell.v), true);
            flags |= 8;
            l += 4;
            break;
          default:
            throw "unsupported cell type " + cell.t;
        }
        dv.setUint32(8, flags, true);
        return out.slice(0, l);
      }
      function write_old_storage(cell, sst) {
        var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, flags = 0;
        out[0] = 3;
        switch (cell.t) {
          case "n":
            out[2] = 2;
            dv.setFloat64(l, cell.v, true);
            flags |= 32;
            l += 8;
            break;
          case "b":
            out[2] = 6;
            dv.setFloat64(l, cell.v ? 1 : 0, true);
            flags |= 32;
            l += 8;
            break;
          case "s":
            if (sst.indexOf(cell.v) == -1)
              throw new Error("Value ".concat(cell.v, " missing from SST!"));
            out[2] = 3;
            dv.setUint32(l, sst.indexOf(cell.v), true);
            flags |= 16;
            l += 4;
            break;
          default:
            throw "unsupported cell type " + cell.t;
        }
        dv.setUint32(4, flags, true);
        return out.slice(0, l);
      }
      function parse_cell_storage(buf, sst, rsst) {
        switch (buf[0]) {
          case 0:
          case 1:
          case 2:
          case 3:
            return parse_old_storage(buf, sst, rsst, buf[0]);
          case 5:
            return parse_new_storage(buf, sst, rsst);
          default:
            throw new Error("Unsupported payload version ".concat(buf[0]));
        }
      }
      function parse_TSP_Reference(buf) {
        var pb = parse_shallow(buf);
        return parse_varint49(pb[1][0].data);
      }
      function write_TSP_Reference(idx) {
        var out = [];
        out[1] = [{ type: 0, data: write_varint49(idx) }];
        return write_shallow(out);
      }
      function parse_TST_TableDataList(M, root) {
        var pb = parse_shallow(root.data);
        var type = varint_to_i32(pb[1][0].data);
        var entries = pb[3];
        var data = [];
        (entries || []).forEach(function(entry) {
          var le = parse_shallow(entry.data);
          var key = varint_to_i32(le[1][0].data) >>> 0;
          switch (type) {
            case 1:
              data[key] = u8str(le[3][0].data);
              break;
            case 8:
              {
                var rt = M[parse_TSP_Reference(le[9][0].data)][0];
                var rtp = parse_shallow(rt.data);
                var rtpref = M[parse_TSP_Reference(rtp[1][0].data)][0];
                var mtype = varint_to_i32(rtpref.meta[1][0].data);
                if (mtype != 2001)
                  throw new Error("2000 unexpected reference to ".concat(mtype));
                var tswpsa = parse_shallow(rtpref.data);
                data[key] = tswpsa[3].map(function(x) {
                  return u8str(x.data);
                }).join("");
              }
              break;
          }
        });
        return data;
      }
      function parse_TST_TileRowInfo(u8, type) {
        var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
        var pb = parse_shallow(u8);
        var R = varint_to_i32(pb[1][0].data) >>> 0;
        var cnt = varint_to_i32(pb[2][0].data) >>> 0;
        var wide_offsets = ((_b = (_a = pb[8]) == null ? void 0 : _a[0]) == null ? void 0 : _b.data) && varint_to_i32(pb[8][0].data) > 0 || false;
        var used_storage_u8, used_storage;
        if (((_d = (_c = pb[7]) == null ? void 0 : _c[0]) == null ? void 0 : _d.data) && type != 0) {
          used_storage_u8 = (_f = (_e = pb[7]) == null ? void 0 : _e[0]) == null ? void 0 : _f.data;
          used_storage = (_h = (_g = pb[6]) == null ? void 0 : _g[0]) == null ? void 0 : _h.data;
        } else if (((_j = (_i = pb[4]) == null ? void 0 : _i[0]) == null ? void 0 : _j.data) && type != 1) {
          used_storage_u8 = (_l = (_k = pb[4]) == null ? void 0 : _k[0]) == null ? void 0 : _l.data;
          used_storage = (_n = (_m = pb[3]) == null ? void 0 : _m[0]) == null ? void 0 : _n.data;
        } else
          throw "NUMBERS Tile missing ".concat(type, " cell storage");
        var width = wide_offsets ? 4 : 1;
        var used_storage_offsets = u8_to_dataview(used_storage_u8);
        var offsets = [];
        for (var C = 0; C < used_storage_u8.length / 2; ++C) {
          var off = used_storage_offsets.getUint16(C * 2, true);
          if (off < 65535)
            offsets.push([C, off]);
        }
        if (offsets.length != cnt)
          throw "Expected ".concat(cnt, " cells, found ").concat(offsets.length);
        var cells = [];
        for (C = 0; C < offsets.length - 1; ++C)
          cells[offsets[C][0]] = used_storage.subarray(offsets[C][1] * width, offsets[C + 1][1] * width);
        if (offsets.length >= 1)
          cells[offsets[offsets.length - 1][0]] = used_storage.subarray(offsets[offsets.length - 1][1] * width);
        return { R, cells };
      }
      function parse_TST_Tile(M, root) {
        var _a;
        var pb = parse_shallow(root.data);
        var storage = ((_a = pb == null ? void 0 : pb[7]) == null ? void 0 : _a[0]) ? varint_to_i32(pb[7][0].data) >>> 0 > 0 ? 1 : 0 : -1;
        var ri = mappa(pb[5], function(u8) {
          return parse_TST_TileRowInfo(u8, storage);
        });
        return {
          nrows: varint_to_i32(pb[4][0].data) >>> 0,
          data: ri.reduce(function(acc, x) {
            if (!acc[x.R])
              acc[x.R] = [];
            x.cells.forEach(function(cell, C) {
              if (acc[x.R][C])
                throw new Error("Duplicate cell r=".concat(x.R, " c=").concat(C));
              acc[x.R][C] = cell;
            });
            return acc;
          }, [])
        };
      }
      function parse_TST_TableModelArchive(M, root, ws) {
        var _a;
        var pb = parse_shallow(root.data);
        var range = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } };
        range.e.r = (varint_to_i32(pb[6][0].data) >>> 0) - 1;
        if (range.e.r < 0)
          throw new Error("Invalid row varint ".concat(pb[6][0].data));
        range.e.c = (varint_to_i32(pb[7][0].data) >>> 0) - 1;
        if (range.e.c < 0)
          throw new Error("Invalid col varint ".concat(pb[7][0].data));
        ws["!ref"] = encode_range(range);
        var store = parse_shallow(pb[4][0].data);
        var sst = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[4][0].data)][0]);
        var rsst = ((_a = store[17]) == null ? void 0 : _a[0]) ? parse_TST_TableDataList(M, M[parse_TSP_Reference(store[17][0].data)][0]) : [];
        var tile = parse_shallow(store[3][0].data);
        var _R = 0;
        tile[1].forEach(function(t) {
          var tl = parse_shallow(t.data);
          var ref = M[parse_TSP_Reference(tl[2][0].data)][0];
          var mtype = varint_to_i32(ref.meta[1][0].data);
          if (mtype != 6002)
            throw new Error("6001 unexpected reference to ".concat(mtype));
          var _tile = parse_TST_Tile(M, ref);
          _tile.data.forEach(function(row, R) {
            row.forEach(function(buf, C) {
              var addr = encode_cell({ r: _R + R, c: C });
              var res = parse_cell_storage(buf, sst, rsst);
              if (res)
                ws[addr] = res;
            });
          });
          _R += _tile.nrows;
        });
      }
      function parse_TST_TableInfoArchive(M, root) {
        var pb = parse_shallow(root.data);
        var out = { "!ref": "A1" };
        var tableref = M[parse_TSP_Reference(pb[2][0].data)];
        var mtype = varint_to_i32(tableref[0].meta[1][0].data);
        if (mtype != 6001)
          throw new Error("6000 unexpected reference to ".concat(mtype));
        parse_TST_TableModelArchive(M, tableref[0], out);
        return out;
      }
      function parse_TN_SheetArchive(M, root) {
        var _a;
        var pb = parse_shallow(root.data);
        var out = {
          name: ((_a = pb[1]) == null ? void 0 : _a[0]) ? u8str(pb[1][0].data) : "",
          sheets: []
        };
        var shapeoffs = mappa(pb[2], parse_TSP_Reference);
        shapeoffs.forEach(function(off) {
          M[off].forEach(function(m) {
            var mtype = varint_to_i32(m.meta[1][0].data);
            if (mtype == 6e3)
              out.sheets.push(parse_TST_TableInfoArchive(M, m));
          });
        });
        return out;
      }
      function parse_TN_DocumentArchive(M, root) {
        var out = book_new();
        var pb = parse_shallow(root.data);
        var sheetoffs = mappa(pb[1], parse_TSP_Reference);
        sheetoffs.forEach(function(off) {
          M[off].forEach(function(m) {
            var mtype = varint_to_i32(m.meta[1][0].data);
            if (mtype == 2) {
              var root2 = parse_TN_SheetArchive(M, m);
              root2.sheets.forEach(function(sheet, idx) {
                book_append_sheet(out, sheet, idx == 0 ? root2.name : root2.name + "_" + idx, true);
              });
            }
          });
        });
        if (out.SheetNames.length == 0)
          throw new Error("Empty NUMBERS file");
        return out;
      }
      function parse_numbers_iwa(cfb) {
        var _a, _b, _c, _d;
        var M = {}, indices = [];
        cfb.FullPaths.forEach(function(p) {
          if (p.match(/\.iwpv2/))
            throw new Error("Unsupported password protection");
        });
        cfb.FileIndex.forEach(function(s) {
          if (!s.name.match(/\.iwa$/))
            return;
          var o;
          try {
            o = decompress_iwa_file(s.content);
          } catch (e) {
            return console.log("?? " + s.content.length + " " + (e.message || e));
          }
          var packets;
          try {
            packets = parse_iwa_file(o);
          } catch (e) {
            return console.log("## " + (e.message || e));
          }
          packets.forEach(function(packet) {
            M[packet.id] = packet.messages;
            indices.push(packet.id);
          });
        });
        if (!indices.length)
          throw new Error("File has no messages");
        var docroot = ((_d = (_c = (_b = (_a = M == null ? void 0 : M[1]) == null ? void 0 : _a[0]) == null ? void 0 : _b.meta) == null ? void 0 : _c[1]) == null ? void 0 : _d[0].data) && varint_to_i32(M[1][0].meta[1][0].data) == 1 && M[1][0];
        if (!docroot)
          indices.forEach(function(idx) {
            M[idx].forEach(function(iwam) {
              var mtype = varint_to_i32(iwam.meta[1][0].data) >>> 0;
              if (mtype == 1) {
                if (!docroot)
                  docroot = iwam;
                else
                  throw new Error("Document has multiple roots");
              }
            });
          });
        if (!docroot)
          throw new Error("Cannot find Document root");
        return parse_TN_DocumentArchive(M, docroot);
      }
      function write_tile_row(tri, data, SST) {
        var _a, _b, _c, _d;
        if (!((_a = tri[6]) == null ? void 0 : _a[0]) || !((_b = tri[7]) == null ? void 0 : _b[0]))
          throw "Mutation only works on post-BNC storages!";
        var wide_offsets = ((_d = (_c = tri[8]) == null ? void 0 : _c[0]) == null ? void 0 : _d.data) && varint_to_i32(tri[8][0].data) > 0 || false;
        if (wide_offsets)
          throw "Math only works with normal offsets";
        var cnt = 0;
        var dv = u8_to_dataview(tri[7][0].data), last_offset = 0, cell_storage = [];
        var _dv = u8_to_dataview(tri[4][0].data), _last_offset = 0, _cell_storage = [];
        for (var C = 0; C < data.length; ++C) {
          if (data[C] == null) {
            dv.setUint16(C * 2, 65535, true);
            _dv.setUint16(C * 2, 65535);
            continue;
          }
          dv.setUint16(C * 2, last_offset, true);
          _dv.setUint16(C * 2, _last_offset, true);
          var celload, _celload;
          switch (typeof data[C]) {
            case "string":
              celload = write_new_storage({ t: "s", v: data[C] }, SST);
              _celload = write_old_storage({ t: "s", v: data[C] }, SST);
              break;
            case "number":
              celload = write_new_storage({ t: "n", v: data[C] }, SST);
              _celload = write_old_storage({ t: "n", v: data[C] }, SST);
              break;
            case "boolean":
              celload = write_new_storage({ t: "b", v: data[C] }, SST);
              _celload = write_old_storage({ t: "b", v: data[C] }, SST);
              break;
            default:
              throw new Error("Unsupported value " + data[C]);
          }
          cell_storage.push(celload);
          last_offset += celload.length;
          _cell_storage.push(_celload);
          _last_offset += _celload.length;
          ++cnt;
        }
        tri[2][0].data = write_varint49(cnt);
        for (; C < tri[7][0].data.length / 2; ++C) {
          dv.setUint16(C * 2, 65535, true);
          _dv.setUint16(C * 2, 65535, true);
        }
        tri[6][0].data = u8concat(cell_storage);
        tri[3][0].data = u8concat(_cell_storage);
        return cnt;
      }
      function write_numbers_iwa(wb, opts) {
        if (!opts || !opts.numbers)
          throw new Error("Must pass a `numbers` option -- check the README");
        var ws = wb.Sheets[wb.SheetNames[0]];
        if (wb.SheetNames.length > 1)
          console.error("The Numbers writer currently writes only the first table");
        var range = decode_range(ws["!ref"]);
        range.s.r = range.s.c = 0;
        var trunc = false;
        if (range.e.c > 9) {
          trunc = true;
          range.e.c = 9;
        }
        if (range.e.r > 49) {
          trunc = true;
          range.e.r = 49;
        }
        if (trunc)
          console.error("The Numbers writer is currently limited to ".concat(encode_range(range)));
        var data = sheet_to_json(ws, { range, header: 1 });
        var SST = ["~Sh33tJ5~"];
        data.forEach(function(row) {
          return row.forEach(function(cell) {
            if (typeof cell == "string")
              SST.push(cell);
          });
        });
        var dependents = {};
        var indices = [];
        var cfb = CFB.read(opts.numbers, { type: "base64" });
        cfb.FileIndex.map(function(fi, idx) {
          return [fi, cfb.FullPaths[idx]];
        }).forEach(function(row) {
          var fi = row[0], fp = row[1];
          if (fi.type != 2)
            return;
          if (!fi.name.match(/\.iwa/))
            return;
          var old_content = fi.content;
          var raw1 = decompress_iwa_file(old_content);
          var x2 = parse_iwa_file(raw1);
          x2.forEach(function(packet2) {
            indices.push(packet2.id);
            dependents[packet2.id] = { deps: [], location: fp, type: varint_to_i32(packet2.messages[0].meta[1][0].data) };
          });
        });
        indices.sort(function(x2, y2) {
          return x2 - y2;
        });
        var indices_varint = indices.filter(function(x2) {
          return x2 > 1;
        }).map(function(x2) {
          return [x2, write_varint49(x2)];
        });
        cfb.FileIndex.map(function(fi, idx) {
          return [fi, cfb.FullPaths[idx]];
        }).forEach(function(row) {
          var fi = row[0], fp = row[1];
          if (!fi.name.match(/\.iwa/))
            return;
          var x2 = parse_iwa_file(decompress_iwa_file(fi.content));
          x2.forEach(function(ia) {
            ia.messages.forEach(function(m) {
              indices_varint.forEach(function(ivi) {
                if (ia.messages.some(function(mess) {
                  return varint_to_i32(mess.meta[1][0].data) != 11006 && u8contains(mess.data, ivi[1]);
                })) {
                  dependents[ivi[0]].deps.push(ia.id);
                }
              });
            });
          });
        });
        function get_unique_msgid() {
          for (var i = 927262; i < 2e6; ++i)
            if (!dependents[i])
              return i;
          throw new Error("Too many messages");
        }
        var entry = CFB.find(cfb, dependents[1].location);
        var x = parse_iwa_file(decompress_iwa_file(entry.content));
        var docroot;
        for (var xi = 0; xi < x.length; ++xi) {
          var packet = x[xi];
          if (packet.id == 1)
            docroot = packet;
        }
        var sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[1][0].data);
        entry = CFB.find(cfb, dependents[sheetrootref].location);
        x = parse_iwa_file(decompress_iwa_file(entry.content));
        for (xi = 0; xi < x.length; ++xi) {
          packet = x[xi];
          if (packet.id == sheetrootref)
            docroot = packet;
        }
        sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[2][0].data);
        entry = CFB.find(cfb, dependents[sheetrootref].location);
        x = parse_iwa_file(decompress_iwa_file(entry.content));
        for (xi = 0; xi < x.length; ++xi) {
          packet = x[xi];
          if (packet.id == sheetrootref)
            docroot = packet;
        }
        sheetrootref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[2][0].data);
        entry = CFB.find(cfb, dependents[sheetrootref].location);
        x = parse_iwa_file(decompress_iwa_file(entry.content));
        for (xi = 0; xi < x.length; ++xi) {
          packet = x[xi];
          if (packet.id == sheetrootref)
            docroot = packet;
        }
        var pb = parse_shallow(docroot.messages[0].data);
        {
          pb[6][0].data = write_varint49(range.e.r + 1);
          pb[7][0].data = write_varint49(range.e.c + 1);
          var cruidsref = parse_TSP_Reference(pb[46][0].data);
          var oldbucket = CFB.find(cfb, dependents[cruidsref].location);
          var _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));
          {
            for (var j = 0; j < _x.length; ++j) {
              if (_x[j].id == cruidsref)
                break;
            }
            if (_x[j].id != cruidsref)
              throw "Bad ColumnRowUIDMapArchive";
            var cruids = parse_shallow(_x[j].messages[0].data);
            cruids[1] = [];
            cruids[2] = [], cruids[3] = [];
            for (var C = 0; C <= range.e.c; ++C) {
              var uuid = [];
              uuid[1] = uuid[2] = [{ type: 0, data: write_varint49(C + 420690) }];
              cruids[1].push({ type: 2, data: write_shallow(uuid) });
              cruids[2].push({ type: 0, data: write_varint49(C) });
              cruids[3].push({ type: 0, data: write_varint49(C) });
            }
            cruids[4] = [];
            cruids[5] = [], cruids[6] = [];
            for (var R = 0; R <= range.e.r; ++R) {
              uuid = [];
              uuid[1] = uuid[2] = [{ type: 0, data: write_varint49(R + 726270) }];
              cruids[4].push({ type: 2, data: write_shallow(uuid) });
              cruids[5].push({ type: 0, data: write_varint49(R) });
              cruids[6].push({ type: 0, data: write_varint49(R) });
            }
            _x[j].messages[0].data = write_shallow(cruids);
          }
          oldbucket.content = compress_iwa_file(write_iwa_file(_x));
          oldbucket.size = oldbucket.content.length;
          delete pb[46];
          var store = parse_shallow(pb[4][0].data);
          {
            store[7][0].data = write_varint49(range.e.r + 1);
            var row_headers = parse_shallow(store[1][0].data);
            var row_header_ref = parse_TSP_Reference(row_headers[2][0].data);
            oldbucket = CFB.find(cfb, dependents[row_header_ref].location);
            _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));
            {
              if (_x[0].id != row_header_ref)
                throw "Bad HeaderStorageBucket";
              var base_bucket = parse_shallow(_x[0].messages[0].data);
              for (R = 0; R < data.length; ++R) {
                var _bucket = parse_shallow(base_bucket[2][0].data);
                _bucket[1][0].data = write_varint49(R);
                _bucket[4][0].data = write_varint49(data[R].length);
                base_bucket[2][R] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };
              }
              _x[0].messages[0].data = write_shallow(base_bucket);
            }
            oldbucket.content = compress_iwa_file(write_iwa_file(_x));
            oldbucket.size = oldbucket.content.length;
            var col_header_ref = parse_TSP_Reference(store[2][0].data);
            oldbucket = CFB.find(cfb, dependents[col_header_ref].location);
            _x = parse_iwa_file(decompress_iwa_file(oldbucket.content));
            {
              if (_x[0].id != col_header_ref)
                throw "Bad HeaderStorageBucket";
              base_bucket = parse_shallow(_x[0].messages[0].data);
              for (C = 0; C <= range.e.c; ++C) {
                _bucket = parse_shallow(base_bucket[2][0].data);
                _bucket[1][0].data = write_varint49(C);
                _bucket[4][0].data = write_varint49(range.e.r + 1);
                base_bucket[2][C] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };
              }
              _x[0].messages[0].data = write_shallow(base_bucket);
            }
            oldbucket.content = compress_iwa_file(write_iwa_file(_x));
            oldbucket.size = oldbucket.content.length;
            var sstref = parse_TSP_Reference(store[4][0].data);
            (function() {
              var sentry = CFB.find(cfb, dependents[sstref].location);
              var sx = parse_iwa_file(decompress_iwa_file(sentry.content));
              var sstroot;
              for (var sxi = 0; sxi < sx.length; ++sxi) {
                var packet2 = sx[sxi];
                if (packet2.id == sstref)
                  sstroot = packet2;
              }
              var sstdata = parse_shallow(sstroot.messages[0].data);
              {
                sstdata[3] = [];
                var newsst = [];
                SST.forEach(function(str, i) {
                  newsst[1] = [{ type: 0, data: write_varint49(i) }];
                  newsst[2] = [{ type: 0, data: write_varint49(1) }];
                  newsst[3] = [{ type: 2, data: stru8(str) }];
                  sstdata[3].push({ type: 2, data: write_shallow(newsst) });
                });
              }
              sstroot.messages[0].data = write_shallow(sstdata);
              var sy = write_iwa_file(sx);
              var raw32 = compress_iwa_file(sy);
              sentry.content = raw32;
              sentry.size = sentry.content.length;
            })();
            var tile = parse_shallow(store[3][0].data);
            {
              var t = tile[1][0];
              delete tile[2];
              var tl = parse_shallow(t.data);
              {
                var tileref = parse_TSP_Reference(tl[2][0].data);
                (function() {
                  var tentry = CFB.find(cfb, dependents[tileref].location);
                  var tx = parse_iwa_file(decompress_iwa_file(tentry.content));
                  var tileroot;
                  for (var sxi = 0; sxi < tx.length; ++sxi) {
                    var packet2 = tx[sxi];
                    if (packet2.id == tileref)
                      tileroot = packet2;
                  }
                  var tiledata = parse_shallow(tileroot.messages[0].data);
                  {
                    delete tiledata[6];
                    delete tile[7];
                    var rowload = new Uint8Array(tiledata[5][0].data);
                    tiledata[5] = [];
                    var cnt = 0;
                    for (var R2 = 0; R2 <= range.e.r; ++R2) {
                      var tilerow = parse_shallow(rowload);
                      cnt += write_tile_row(tilerow, data[R2], SST);
                      tilerow[1][0].data = write_varint49(R2);
                      tiledata[5].push({ data: write_shallow(tilerow), type: 2 });
                    }
                    tiledata[1] = [{ type: 0, data: write_varint49(range.e.c + 1) }];
                    tiledata[2] = [{ type: 0, data: write_varint49(range.e.r + 1) }];
                    tiledata[3] = [{ type: 0, data: write_varint49(cnt) }];
                    tiledata[4] = [{ type: 0, data: write_varint49(range.e.r + 1) }];
                  }
                  tileroot.messages[0].data = write_shallow(tiledata);
                  var ty = write_iwa_file(tx);
                  var raw32 = compress_iwa_file(ty);
                  tentry.content = raw32;
                  tentry.size = tentry.content.length;
                })();
              }
              t.data = write_shallow(tl);
            }
            store[3][0].data = write_shallow(tile);
          }
          pb[4][0].data = write_shallow(store);
        }
        docroot.messages[0].data = write_shallow(pb);
        var y = write_iwa_file(x);
        var raw3 = compress_iwa_file(y);
        entry.content = raw3;
        entry.size = entry.content.length;
        return cfb;
      }
      function fix_opts_func(defaults) {
        return function fix_opts(opts) {
          for (var i = 0; i != defaults.length; ++i) {
            var d = defaults[i];
            if (opts[d[0]] === void 0) opts[d[0]] = d[1];
            if (d[2] === "n") opts[d[0]] = Number(opts[d[0]]);
          }
        };
      }
      function fix_read_opts(opts) {
        fix_opts_func([
          ["cellNF", false],
          /* emit cell number format string as .z */
          ["cellHTML", true],
          /* emit html string as .h */
          ["cellFormula", true],
          /* emit formulae as .f */
          ["cellStyles", false],
          /* emits style/theme as .s */
          ["cellText", true],
          /* emit formatted text as .w */
          ["cellDates", false],
          /* emit date cells with type `d` */
          ["sheetStubs", false],
          /* emit empty cells */
          ["sheetRows", 0, "n"],
          /* read n rows (0 = read all rows) */
          ["bookDeps", false],
          /* parse calculation chains */
          ["bookSheets", false],
          /* only try to get sheet names (no Sheets) */
          ["bookProps", false],
          /* only try to get properties (no Sheets) */
          ["bookFiles", false],
          /* include raw file structure (keys, files, cfb) */
          ["bookVBA", false],
          /* include vba raw data (vbaraw) */
          ["password", ""],
          /* password */
          ["WTF", false]
          /* WTF mode (throws errors) */
        ])(opts);
      }
      function fix_write_opts(opts) {
        fix_opts_func([
          ["cellDates", false],
          /* write date cells with type `d` */
          ["bookSST", false],
          /* Generate Shared String Table */
          ["bookType", "xlsx"],
          /* Type of workbook (xlsx/m/b) */
          ["compression", false],
          /* Use file compression */
          ["WTF", false]
          /* WTF mode (throws errors) */
        ])(opts);
      }
      function get_sheet_type(n) {
        if (RELS.WS.indexOf(n) > -1) return "sheet";
        if (RELS.CS && n == RELS.CS) return "chart";
        if (RELS.DS && n == RELS.DS) return "dialog";
        if (RELS.MS && n == RELS.MS) return "macro";
        return n && n.length ? n : "sheet";
      }
      function safe_parse_wbrels(wbrels, sheets) {
        if (!wbrels) return 0;
        try {
          wbrels = sheets.map(function pwbr(w) {
            if (!w.id) w.id = w.strRelID;
            return [w.name, wbrels["!id"][w.id].Target, get_sheet_type(wbrels["!id"][w.id].Type)];
          });
        } catch (e) {
          return null;
        }
        return !wbrels || wbrels.length === 0 ? null : wbrels;
      }
      function safe_parse_sheet(zip, path5, relsPath, sheet, idx, sheetRels, sheets, stype, opts, wb, themes, styles) {
        try {
          sheetRels[sheet] = parse_rels(getzipstr(zip, relsPath, true), path5);
          var data = getzipdata(zip, path5);
          var _ws;
          switch (stype) {
            case "sheet":
              _ws = parse_ws(data, path5, idx, opts, sheetRels[sheet], wb, themes, styles);
              break;
            case "chart":
              _ws = parse_cs(data, path5, idx, opts, sheetRels[sheet], wb, themes, styles);
              if (!_ws || !_ws["!drawel"]) break;
              var dfile = resolve_path(_ws["!drawel"].Target, path5);
              var drelsp = get_rels_path(dfile);
              var draw = parse_drawing(getzipstr(zip, dfile, true), parse_rels(getzipstr(zip, drelsp, true), dfile));
              var chartp = resolve_path(draw, dfile);
              var crelsp = get_rels_path(chartp);
              _ws = parse_chart(getzipstr(zip, chartp, true), chartp, opts, parse_rels(getzipstr(zip, crelsp, true), chartp), wb, _ws);
              break;
            case "macro":
              _ws = parse_ms(data, path5, idx, opts, sheetRels[sheet], wb, themes, styles);
              break;
            case "dialog":
              _ws = parse_ds(data, path5, idx, opts, sheetRels[sheet], wb, themes, styles);
              break;
            default:
              throw new Error("Unrecognized sheet type " + stype);
          }
          sheets[sheet] = _ws;
          var tcomments = [];
          if (sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function(n) {
            var dfile2 = "";
            if (sheetRels[sheet][n].Type == RELS.CMNT) {
              dfile2 = resolve_path(sheetRels[sheet][n].Target, path5);
              var comments = parse_cmnt(getzipdata(zip, dfile2, true), dfile2, opts);
              if (!comments || !comments.length) return;
              sheet_insert_comments(_ws, comments, false);
            }
            if (sheetRels[sheet][n].Type == RELS.TCMNT) {
              dfile2 = resolve_path(sheetRels[sheet][n].Target, path5);
              tcomments = tcomments.concat(parse_tcmnt_xml(getzipdata(zip, dfile2, true), opts));
            }
          });
          if (tcomments && tcomments.length) sheet_insert_comments(_ws, tcomments, true, opts.people || []);
        } catch (e) {
          if (opts.WTF) throw e;
        }
      }
      function strip_front_slash(x) {
        return x.charAt(0) == "/" ? x.slice(1) : x;
      }
      function parse_zip(zip, opts) {
        make_ssf();
        opts = opts || {};
        fix_read_opts(opts);
        if (safegetzipfile(zip, "META-INF/manifest.xml")) return parse_ods(zip, opts);
        if (safegetzipfile(zip, "objectdata.xml")) return parse_ods(zip, opts);
        if (safegetzipfile(zip, "Index/Document.iwa")) {
          if (typeof Uint8Array == "undefined") throw new Error("NUMBERS file parsing requires Uint8Array support");
          if (typeof parse_numbers_iwa != "undefined") {
            if (zip.FileIndex) return parse_numbers_iwa(zip);
            var _zip = CFB.utils.cfb_new();
            zipentries(zip).forEach(function(e) {
              zip_add_file(_zip, e, getzipbin(zip, e));
            });
            return parse_numbers_iwa(_zip);
          }
          throw new Error("Unsupported NUMBERS file");
        }
        if (!safegetzipfile(zip, "[Content_Types].xml")) {
          if (safegetzipfile(zip, "index.xml.gz")) throw new Error("Unsupported NUMBERS 08 file");
          if (safegetzipfile(zip, "index.xml")) throw new Error("Unsupported NUMBERS 09 file");
          throw new Error("Unsupported ZIP file");
        }
        var entries = zipentries(zip);
        var dir = parse_ct(getzipstr(zip, "[Content_Types].xml"));
        var xlsb = false;
        var sheets, binname;
        if (dir.workbooks.length === 0) {
          binname = "xl/workbook.xml";
          if (getzipdata(zip, binname, true)) dir.workbooks.push(binname);
        }
        if (dir.workbooks.length === 0) {
          binname = "xl/workbook.bin";
          if (!getzipdata(zip, binname, true)) throw new Error("Could not find workbook");
          dir.workbooks.push(binname);
          xlsb = true;
        }
        if (dir.workbooks[0].slice(-3) == "bin") xlsb = true;
        var themes = {};
        var styles = {};
        if (!opts.bookSheets && !opts.bookProps) {
          strs = [];
          if (dir.sst) try {
            strs = parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts);
          } catch (e) {
            if (opts.WTF) throw e;
          }
          if (opts.cellStyles && dir.themes.length) themes = parse_theme(getzipstr(zip, dir.themes[0].replace(/^\//, ""), true) || "", dir.themes[0], opts);
          if (dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);
        }
        dir.links.map(function(link) {
          try {
            var rels = parse_rels(getzipstr(zip, get_rels_path(strip_front_slash(link))), link);
            return parse_xlink(getzipdata(zip, strip_front_slash(link)), rels, link, opts);
          } catch (e) {
          }
        });
        var wb = parse_wb(getzipdata(zip, strip_front_slash(dir.workbooks[0])), dir.workbooks[0], opts);
        var props = {}, propdata = "";
        if (dir.coreprops.length) {
          propdata = getzipdata(zip, strip_front_slash(dir.coreprops[0]), true);
          if (propdata) props = parse_core_props(propdata);
          if (dir.extprops.length !== 0) {
            propdata = getzipdata(zip, strip_front_slash(dir.extprops[0]), true);
            if (propdata) parse_ext_props(propdata, props, opts);
          }
        }
        var custprops = {};
        if (!opts.bookSheets || opts.bookProps) {
          if (dir.custprops.length !== 0) {
            propdata = getzipstr(zip, strip_front_slash(dir.custprops[0]), true);
            if (propdata) custprops = parse_cust_props(propdata, opts);
          }
        }
        var out = {};
        if (opts.bookSheets || opts.bookProps) {
          if (wb.Sheets) sheets = wb.Sheets.map(function pluck(x) {
            return x.name;
          });
          else if (props.Worksheets && props.SheetNames.length > 0) sheets = props.SheetNames;
          if (opts.bookProps) {
            out.Props = props;
            out.Custprops = custprops;
          }
          if (opts.bookSheets && typeof sheets !== "undefined") out.SheetNames = sheets;
          if (opts.bookSheets ? out.SheetNames : opts.bookProps) return out;
        }
        sheets = {};
        var deps = {};
        if (opts.bookDeps && dir.calcchain) deps = parse_cc(getzipdata(zip, strip_front_slash(dir.calcchain)), dir.calcchain, opts);
        var i = 0;
        var sheetRels = {};
        var path5, relsPath;
        {
          var wbsheets = wb.Sheets;
          props.Worksheets = wbsheets.length;
          props.SheetNames = [];
          for (var j = 0; j != wbsheets.length; ++j) {
            props.SheetNames[j] = wbsheets[j].name;
          }
        }
        var wbext = xlsb ? "bin" : "xml";
        var wbrelsi = dir.workbooks[0].lastIndexOf("/");
        var wbrelsfile = (dir.workbooks[0].slice(0, wbrelsi + 1) + "_rels/" + dir.workbooks[0].slice(wbrelsi + 1) + ".rels").replace(/^\//, "");
        if (!safegetzipfile(zip, wbrelsfile)) wbrelsfile = "xl/_rels/workbook." + wbext + ".rels";
        var wbrels = parse_rels(getzipstr(zip, wbrelsfile, true), wbrelsfile.replace(/_rels.*/, "s5s"));
        if ((dir.metadata || []).length >= 1) {
          opts.xlmeta = parse_xlmeta(getzipdata(zip, strip_front_slash(dir.metadata[0])), dir.metadata[0], opts);
        }
        if ((dir.people || []).length >= 1) {
          opts.people = parse_people_xml(getzipdata(zip, strip_front_slash(dir.people[0])), opts);
        }
        if (wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets);
        var nmode = getzipdata(zip, "xl/worksheets/sheet.xml", true) ? 1 : 0;
        wsloop: for (i = 0; i != props.Worksheets; ++i) {
          var stype = "sheet";
          if (wbrels && wbrels[i]) {
            path5 = "xl/" + wbrels[i][1].replace(/[\/]?xl\//, "");
            if (!safegetzipfile(zip, path5)) path5 = wbrels[i][1];
            if (!safegetzipfile(zip, path5)) path5 = wbrelsfile.replace(/_rels\/.*$/, "") + wbrels[i][1];
            stype = wbrels[i][2];
          } else {
            path5 = "xl/worksheets/sheet" + (i + 1 - nmode) + "." + wbext;
            path5 = path5.replace(/sheet0\./, "sheet.");
          }
          relsPath = path5.replace(/^(.*)(\/)([^\/]*)$/, "$1/_rels/$3.rels");
          if (opts && opts.sheets != null) switch (typeof opts.sheets) {
            case "number":
              if (i != opts.sheets) continue wsloop;
              break;
            case "string":
              if (props.SheetNames[i].toLowerCase() != opts.sheets.toLowerCase()) continue wsloop;
              break;
            default:
              if (Array.isArray && Array.isArray(opts.sheets)) {
                var snjseen = false;
                for (var snj = 0; snj != opts.sheets.length; ++snj) {
                  if (typeof opts.sheets[snj] == "number" && opts.sheets[snj] == i) snjseen = 1;
                  if (typeof opts.sheets[snj] == "string" && opts.sheets[snj].toLowerCase() == props.SheetNames[i].toLowerCase()) snjseen = 1;
                }
                if (!snjseen) continue wsloop;
              }
          }
          safe_parse_sheet(zip, path5, relsPath, props.SheetNames[i], i, sheetRels, sheets, stype, opts, wb, themes, styles);
        }
        out = {
          Directory: dir,
          Workbook: wb,
          Props: props,
          Custprops: custprops,
          Deps: deps,
          Sheets: sheets,
          SheetNames: props.SheetNames,
          Strings: strs,
          Styles: styles,
          Themes: themes,
          SSF: dup(table_fmt)
        };
        if (opts && opts.bookFiles) {
          if (zip.files) {
            out.keys = entries;
            out.files = zip.files;
          } else {
            out.keys = [];
            out.files = {};
            zip.FullPaths.forEach(function(p, idx) {
              p = p.replace(/^Root Entry[\/]/, "");
              out.keys.push(p);
              out.files[p] = zip.FileIndex[idx];
            });
          }
        }
        if (opts && opts.bookVBA) {
          if (dir.vba.length > 0) out.vbaraw = getzipdata(zip, strip_front_slash(dir.vba[0]), true);
          else if (dir.defaults && dir.defaults.bin === CT_VBA) out.vbaraw = getzipdata(zip, "xl/vbaProject.bin", true);
        }
        return out;
      }
      function parse_xlsxcfb(cfb, _opts) {
        var opts = _opts || {};
        var f = "Workbook", data = CFB.find(cfb, f);
        try {
          f = "/!DataSpaces/Version";
          data = CFB.find(cfb, f);
          if (!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f);
          parse_DataSpaceVersionInfo(data.content);
          f = "/!DataSpaces/DataSpaceMap";
          data = CFB.find(cfb, f);
          if (!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f);
          var dsm = parse_DataSpaceMap(data.content);
          if (dsm.length !== 1 || dsm[0].comps.length !== 1 || dsm[0].comps[0].t !== 0 || dsm[0].name !== "StrongEncryptionDataSpace" || dsm[0].comps[0].v !== "EncryptedPackage")
            throw new Error("ECMA-376 Encrypted file bad " + f);
          f = "/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace";
          data = CFB.find(cfb, f);
          if (!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f);
          var seds = parse_DataSpaceDefinition(data.content);
          if (seds.length != 1 || seds[0] != "StrongEncryptionTransform")
            throw new Error("ECMA-376 Encrypted file bad " + f);
          f = "/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary";
          data = CFB.find(cfb, f);
          if (!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f);
          parse_Primary(data.content);
        } catch (e) {
        }
        f = "/EncryptionInfo";
        data = CFB.find(cfb, f);
        if (!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f);
        var einfo = parse_EncryptionInfo(data.content);
        f = "/EncryptedPackage";
        data = CFB.find(cfb, f);
        if (!data || !data.content) throw new Error("ECMA-376 Encrypted file missing " + f);
        if (einfo[0] == 4 && typeof decrypt_agile !== "undefined") return decrypt_agile(einfo[1], data.content, opts.password || "", opts);
        if (einfo[0] == 2 && typeof decrypt_std76 !== "undefined") return decrypt_std76(einfo[1], data.content, opts.password || "", opts);
        throw new Error("File is password-protected");
      }
      function write_zip(wb, opts) {
        if (opts.bookType == "ods") return write_ods(wb, opts);
        if (opts.bookType == "numbers") return write_numbers_iwa(wb, opts);
        if (opts.bookType == "xlsb") return write_zip_xlsxb(wb, opts);
        return write_zip_xlsx(wb, opts);
      }
      function write_zip_xlsxb(wb, opts) {
        _shapeid = 1024;
        if (wb && !wb.SSF) {
          wb.SSF = dup(table_fmt);
        }
        if (wb && wb.SSF) {
          make_ssf();
          SSF_load_table(wb.SSF);
          opts.revssf = evert_num(wb.SSF);
          opts.revssf[wb.SSF[65535]] = 0;
          opts.ssf = wb.SSF;
        }
        opts.rels = {};
        opts.wbrels = {};
        opts.Strings = [];
        opts.Strings.Count = 0;
        opts.Strings.Unique = 0;
        if (browser_has_Map) opts.revStrings = /* @__PURE__ */ new Map();
        else {
          opts.revStrings = {};
          opts.revStrings.foo = [];
          delete opts.revStrings.foo;
        }
        var wbext = opts.bookType == "xlsb" ? "bin" : "xml";
        var vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;
        var ct = new_ct();
        fix_write_opts(opts = opts || {});
        var zip = zip_new();
        var f = "", rId = 0;
        opts.cellXfs = [];
        get_cell_style(opts.cellXfs, {}, { revssf: { "General": 0 } });
        if (!wb.Props) wb.Props = {};
        f = "docProps/core.xml";
        zip_add_file(zip, f, write_core_props(wb.Props, opts));
        ct.coreprops.push(f);
        add_rels(opts.rels, 2, f, RELS.CORE_PROPS);
        f = "docProps/app.xml";
        if (wb.Props && wb.Props.SheetNames) {
        } else if (!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;
        else {
          var _sn = [];
          for (var _i = 0; _i < wb.SheetNames.length; ++_i)
            if ((wb.Workbook.Sheets[_i] || {}).Hidden != 2) _sn.push(wb.SheetNames[_i]);
          wb.Props.SheetNames = _sn;
        }
        wb.Props.Worksheets = wb.Props.SheetNames.length;
        zip_add_file(zip, f, write_ext_props(wb.Props, opts));
        ct.extprops.push(f);
        add_rels(opts.rels, 3, f, RELS.EXT_PROPS);
        if (wb.Custprops !== wb.Props && keys(wb.Custprops || {}).length > 0) {
          f = "docProps/custom.xml";
          zip_add_file(zip, f, write_cust_props(wb.Custprops, opts));
          ct.custprops.push(f);
          add_rels(opts.rels, 4, f, RELS.CUST_PROPS);
        }
        for (rId = 1; rId <= wb.SheetNames.length; ++rId) {
          var wsrels = { "!id": {} };
          var ws = wb.Sheets[wb.SheetNames[rId - 1]];
          var _type = (ws || {})["!type"] || "sheet";
          switch (_type) {
            case "chart":
            default:
              f = "xl/worksheets/sheet" + rId + "." + wbext;
              zip_add_file(zip, f, write_ws(rId - 1, f, opts, wb, wsrels));
              ct.sheets.push(f);
              add_rels(opts.wbrels, -1, "worksheets/sheet" + rId + "." + wbext, RELS.WS[0]);
          }
          if (ws) {
            var comments = ws["!comments"];
            var need_vml = false;
            var cf = "";
            if (comments && comments.length > 0) {
              cf = "xl/comments" + rId + "." + wbext;
              zip_add_file(zip, cf, write_cmnt(comments, cf, opts));
              ct.comments.push(cf);
              add_rels(wsrels, -1, "../comments" + rId + "." + wbext, RELS.CMNT);
              need_vml = true;
            }
            if (ws["!legacy"]) {
              if (need_vml) zip_add_file(zip, "xl/drawings/vmlDrawing" + rId + ".vml", write_comments_vml(rId, ws["!comments"]));
            }
            delete ws["!comments"];
            delete ws["!legacy"];
          }
          if (wsrels["!id"].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));
        }
        if (opts.Strings != null && opts.Strings.length > 0) {
          f = "xl/sharedStrings." + wbext;
          zip_add_file(zip, f, write_sst(opts.Strings, f, opts));
          ct.strs.push(f);
          add_rels(opts.wbrels, -1, "sharedStrings." + wbext, RELS.SST);
        }
        f = "xl/workbook." + wbext;
        zip_add_file(zip, f, write_wb(wb, f, opts));
        ct.workbooks.push(f);
        add_rels(opts.rels, 1, f, RELS.WB);
        f = "xl/theme/theme1.xml";
        zip_add_file(zip, f, write_theme(wb.Themes, opts));
        ct.themes.push(f);
        add_rels(opts.wbrels, -1, "theme/theme1.xml", RELS.THEME);
        f = "xl/styles." + wbext;
        zip_add_file(zip, f, write_sty(wb, f, opts));
        ct.styles.push(f);
        add_rels(opts.wbrels, -1, "styles." + wbext, RELS.STY);
        if (wb.vbaraw && vbafmt) {
          f = "xl/vbaProject.bin";
          zip_add_file(zip, f, wb.vbaraw);
          ct.vba.push(f);
          add_rels(opts.wbrels, -1, "vbaProject.bin", RELS.VBA);
        }
        f = "xl/metadata." + wbext;
        zip_add_file(zip, f, write_xlmeta(f));
        ct.metadata.push(f);
        add_rels(opts.wbrels, -1, "metadata." + wbext, RELS.XLMETA);
        zip_add_file(zip, "[Content_Types].xml", write_ct(ct, opts));
        zip_add_file(zip, "_rels/.rels", write_rels(opts.rels));
        zip_add_file(zip, "xl/_rels/workbook." + wbext + ".rels", write_rels(opts.wbrels));
        delete opts.revssf;
        delete opts.ssf;
        return zip;
      }
      function write_zip_xlsx(wb, opts) {
        _shapeid = 1024;
        if (wb && !wb.SSF) {
          wb.SSF = dup(table_fmt);
        }
        if (wb && wb.SSF) {
          make_ssf();
          SSF_load_table(wb.SSF);
          opts.revssf = evert_num(wb.SSF);
          opts.revssf[wb.SSF[65535]] = 0;
          opts.ssf = wb.SSF;
        }
        opts.rels = {};
        opts.wbrels = {};
        opts.Strings = [];
        opts.Strings.Count = 0;
        opts.Strings.Unique = 0;
        if (browser_has_Map) opts.revStrings = /* @__PURE__ */ new Map();
        else {
          opts.revStrings = {};
          opts.revStrings.foo = [];
          delete opts.revStrings.foo;
        }
        var wbext = "xml";
        var vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;
        var ct = new_ct();
        fix_write_opts(opts = opts || {});
        var zip = zip_new();
        var f = "", rId = 0;
        opts.cellXfs = [];
        get_cell_style(opts.cellXfs, {}, { revssf: { "General": 0 } });
        if (!wb.Props) wb.Props = {};
        f = "docProps/core.xml";
        zip_add_file(zip, f, write_core_props(wb.Props, opts));
        ct.coreprops.push(f);
        add_rels(opts.rels, 2, f, RELS.CORE_PROPS);
        f = "docProps/app.xml";
        if (wb.Props && wb.Props.SheetNames) {
        } else if (!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;
        else {
          var _sn = [];
          for (var _i = 0; _i < wb.SheetNames.length; ++_i)
            if ((wb.Workbook.Sheets[_i] || {}).Hidden != 2) _sn.push(wb.SheetNames[_i]);
          wb.Props.SheetNames = _sn;
        }
        wb.Props.Worksheets = wb.Props.SheetNames.length;
        zip_add_file(zip, f, write_ext_props(wb.Props, opts));
        ct.extprops.push(f);
        add_rels(opts.rels, 3, f, RELS.EXT_PROPS);
        if (wb.Custprops !== wb.Props && keys(wb.Custprops || {}).length > 0) {
          f = "docProps/custom.xml";
          zip_add_file(zip, f, write_cust_props(wb.Custprops, opts));
          ct.custprops.push(f);
          add_rels(opts.rels, 4, f, RELS.CUST_PROPS);
        }
        var people = ["SheetJ5"];
        opts.tcid = 0;
        for (rId = 1; rId <= wb.SheetNames.length; ++rId) {
          var wsrels = { "!id": {} };
          var ws = wb.Sheets[wb.SheetNames[rId - 1]];
          var _type = (ws || {})["!type"] || "sheet";
          switch (_type) {
            case "chart":
            default:
              f = "xl/worksheets/sheet" + rId + "." + wbext;
              zip_add_file(zip, f, write_ws_xml(rId - 1, opts, wb, wsrels));
              ct.sheets.push(f);
              add_rels(opts.wbrels, -1, "worksheets/sheet" + rId + "." + wbext, RELS.WS[0]);
          }
          if (ws) {
            var comments = ws["!comments"];
            var need_vml = false;
            var cf = "";
            if (comments && comments.length > 0) {
              var needtc = false;
              comments.forEach(function(carr) {
                carr[1].forEach(function(c) {
                  if (c.T == true) needtc = true;
                });
              });
              if (needtc) {
                cf = "xl/threadedComments/threadedComment" + rId + "." + wbext;
                zip_add_file(zip, cf, write_tcmnt_xml(comments, people, opts));
                ct.threadedcomments.push(cf);
                add_rels(wsrels, -1, "../threadedComments/threadedComment" + rId + "." + wbext, RELS.TCMNT);
              }
              cf = "xl/comments" + rId + "." + wbext;
              zip_add_file(zip, cf, write_comments_xml(comments, opts));
              ct.comments.push(cf);
              add_rels(wsrels, -1, "../comments" + rId + "." + wbext, RELS.CMNT);
              need_vml = true;
            }
            if (ws["!legacy"]) {
              if (need_vml) zip_add_file(zip, "xl/drawings/vmlDrawing" + rId + ".vml", write_comments_vml(rId, ws["!comments"]));
            }
            delete ws["!comments"];
            delete ws["!legacy"];
          }
          if (wsrels["!id"].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));
        }
        if (opts.Strings != null && opts.Strings.length > 0) {
          f = "xl/sharedStrings." + wbext;
          zip_add_file(zip, f, write_sst_xml(opts.Strings, opts));
          ct.strs.push(f);
          add_rels(opts.wbrels, -1, "sharedStrings." + wbext, RELS.SST);
        }
        f = "xl/workbook." + wbext;
        zip_add_file(zip, f, write_wb_xml(wb, opts));
        ct.workbooks.push(f);
        add_rels(opts.rels, 1, f, RELS.WB);
        f = "xl/theme/theme1.xml";
        zip_add_file(zip, f, write_theme(wb.Themes, opts));
        ct.themes.push(f);
        add_rels(opts.wbrels, -1, "theme/theme1.xml", RELS.THEME);
        f = "xl/styles." + wbext;
        zip_add_file(zip, f, write_sty_xml(wb, opts));
        ct.styles.push(f);
        add_rels(opts.wbrels, -1, "styles." + wbext, RELS.STY);
        if (wb.vbaraw && vbafmt) {
          f = "xl/vbaProject.bin";
          zip_add_file(zip, f, wb.vbaraw);
          ct.vba.push(f);
          add_rels(opts.wbrels, -1, "vbaProject.bin", RELS.VBA);
        }
        f = "xl/metadata." + wbext;
        zip_add_file(zip, f, write_xlmeta_xml());
        ct.metadata.push(f);
        add_rels(opts.wbrels, -1, "metadata." + wbext, RELS.XLMETA);
        if (people.length > 1) {
          f = "xl/persons/person.xml";
          zip_add_file(zip, f, write_people_xml(people, opts));
          ct.people.push(f);
          add_rels(opts.wbrels, -1, "persons/person.xml", RELS.PEOPLE);
        }
        zip_add_file(zip, "[Content_Types].xml", write_ct(ct, opts));
        zip_add_file(zip, "_rels/.rels", write_rels(opts.rels));
        zip_add_file(zip, "xl/_rels/workbook." + wbext + ".rels", write_rels(opts.wbrels));
        delete opts.revssf;
        delete opts.ssf;
        return zip;
      }
      function firstbyte(f, o) {
        var x = "";
        switch ((o || {}).type || "base64") {
          case "buffer":
            return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];
          case "base64":
            x = Base64_decode(f.slice(0, 12));
            break;
          case "binary":
            x = f;
            break;
          case "array":
            return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];
          default:
            throw new Error("Unrecognized type " + (o && o.type || "undefined"));
        }
        return [x.charCodeAt(0), x.charCodeAt(1), x.charCodeAt(2), x.charCodeAt(3), x.charCodeAt(4), x.charCodeAt(5), x.charCodeAt(6), x.charCodeAt(7)];
      }
      function read_cfb(cfb, opts) {
        if (CFB.find(cfb, "EncryptedPackage")) return parse_xlsxcfb(cfb, opts);
        return parse_xlscfb(cfb, opts);
      }
      function read_zip(data, opts) {
        var zip, d = data;
        var o = opts || {};
        if (!o.type) o.type = has_buf && Buffer.isBuffer(data) ? "buffer" : "base64";
        zip = zip_read(d, o);
        return parse_zip(zip, o);
      }
      function read_plaintext(data, o) {
        var i = 0;
        main: while (i < data.length) switch (data.charCodeAt(i)) {
          case 10:
          case 13:
          case 32:
            ++i;
            break;
          case 60:
            return parse_xlml(data.slice(i), o);
          default:
            break main;
        }
        return PRN.to_workbook(data, o);
      }
      function read_plaintext_raw(data, o) {
        var str = "", bytes = firstbyte(data, o);
        switch (o.type) {
          case "base64":
            str = Base64_decode(data);
            break;
          case "binary":
            str = data;
            break;
          case "buffer":
            str = data.toString("binary");
            break;
          case "array":
            str = cc2str(data);
            break;
          default:
            throw new Error("Unrecognized type " + o.type);
        }
        if (bytes[0] == 239 && bytes[1] == 187 && bytes[2] == 191) str = utf8read(str);
        o.type = "binary";
        return read_plaintext(str, o);
      }
      function read_utf16(data, o) {
        var d = data;
        if (o.type == "base64") d = Base64_decode(d);
        d = $cptable.utils.decode(1200, d.slice(2), "str");
        o.type = "binary";
        return read_plaintext(d, o);
      }
      function bstrify(data) {
        return !data.match(/[^\x00-\x7F]/) ? data : utf8write(data);
      }
      function read_prn(data, d, o, str) {
        if (str) {
          o.type = "string";
          return PRN.to_workbook(data, o);
        }
        return PRN.to_workbook(d, o);
      }
      function readSync(data, opts) {
        reset_cp();
        var o = opts || {};
        if (typeof ArrayBuffer !== "undefined" && data instanceof ArrayBuffer) return readSync(new Uint8Array(data), (o = dup(o), o.type = "array", o));
        if (typeof Uint8Array !== "undefined" && data instanceof Uint8Array && !o.type) o.type = typeof Deno !== "undefined" ? "buffer" : "array";
        var d = data, n = [0, 0, 0, 0], str = false;
        if (o.cellStyles) {
          o.cellNF = true;
          o.sheetStubs = true;
        }
        _ssfopts = {};
        if (o.dateNF) _ssfopts.dateNF = o.dateNF;
        if (!o.type) o.type = has_buf && Buffer.isBuffer(data) ? "buffer" : "base64";
        if (o.type == "file") {
          o.type = has_buf ? "buffer" : "binary";
          d = read_binary(data);
          if (typeof Uint8Array !== "undefined" && !has_buf) o.type = "array";
        }
        if (o.type == "string") {
          str = true;
          o.type = "binary";
          o.codepage = 65001;
          d = bstrify(data);
        }
        if (o.type == "array" && typeof Uint8Array !== "undefined" && data instanceof Uint8Array && typeof ArrayBuffer !== "undefined") {
          var ab = new ArrayBuffer(3), vu = new Uint8Array(ab);
          vu.foo = "bar";
          if (!vu.foo) {
            o = dup(o);
            o.type = "array";
            return readSync(ab2a(d), o);
          }
        }
        switch ((n = firstbyte(d, o))[0]) {
          case 208:
            if (n[1] === 207 && n[2] === 17 && n[3] === 224 && n[4] === 161 && n[5] === 177 && n[6] === 26 && n[7] === 225) return read_cfb(CFB.read(d, o), o);
            break;
          case 9:
            if (n[1] <= 8) return parse_xlscfb(d, o);
            break;
          case 60:
            return parse_xlml(d, o);
          case 73:
            if (n[1] === 73 && n[2] === 42 && n[3] === 0) throw new Error("TIFF Image File is not a spreadsheet");
            if (n[1] === 68) return read_wb_ID(d, o);
            break;
          case 84:
            if (n[1] === 65 && n[2] === 66 && n[3] === 76) return DIF.to_workbook(d, o);
            break;
          case 80:
            return n[1] === 75 && n[2] < 9 && n[3] < 9 ? read_zip(d, o) : read_prn(data, d, o, str);
          case 239:
            return n[3] === 60 ? parse_xlml(d, o) : read_prn(data, d, o, str);
          case 255:
            if (n[1] === 254) {
              return read_utf16(d, o);
            } else if (n[1] === 0 && n[2] === 2 && n[3] === 0) return WK_.to_workbook(d, o);
            break;
          case 0:
            if (n[1] === 0) {
              if (n[2] >= 2 && n[3] === 0) return WK_.to_workbook(d, o);
              if (n[2] === 0 && (n[3] === 8 || n[3] === 9)) return WK_.to_workbook(d, o);
            }
            break;
          case 3:
          case 131:
          case 139:
          case 140:
            return DBF.to_workbook(d, o);
          case 123:
            if (n[1] === 92 && n[2] === 114 && n[3] === 116) return RTF.to_workbook(d, o);
            break;
          case 10:
          case 13:
          case 32:
            return read_plaintext_raw(d, o);
          case 137:
            if (n[1] === 80 && n[2] === 78 && n[3] === 71) throw new Error("PNG Image File is not a spreadsheet");
            break;
        }
        if (DBF_SUPPORTED_VERSIONS.indexOf(n[0]) > -1 && n[2] <= 12 && n[3] <= 31) return DBF.to_workbook(d, o);
        return read_prn(data, d, o, str);
      }
      function readFileSync(filename, opts) {
        var o = opts || {};
        o.type = "file";
        return readSync(filename, o);
      }
      function write_cfb_ctr(cfb, o) {
        switch (o.type) {
          case "base64":
          case "binary":
            break;
          case "buffer":
          case "array":
            o.type = "";
            break;
          case "file":
            return write_dl(o.file, CFB.write(cfb, { type: has_buf ? "buffer" : "" }));
          case "string":
            throw new Error("'string' output type invalid for '" + o.bookType + "' files");
          default:
            throw new Error("Unrecognized type " + o.type);
        }
        return CFB.write(cfb, o);
      }
      function write_zip_type(wb, opts) {
        var o = dup(opts || {});
        var z = write_zip(wb, o);
        return write_zip_denouement(z, o);
      }
      function write_zip_typeXLSX(wb, opts) {
        var o = dup(opts || {});
        var z = write_zip_xlsx(wb, o);
        return write_zip_denouement(z, o);
      }
      function write_zip_denouement(z, o) {
        var oopts = {};
        var ftype = has_buf ? "nodebuffer" : typeof Uint8Array !== "undefined" ? "array" : "string";
        if (o.compression) oopts.compression = "DEFLATE";
        if (o.password) oopts.type = ftype;
        else switch (o.type) {
          case "base64":
            oopts.type = "base64";
            break;
          case "binary":
            oopts.type = "string";
            break;
          case "string":
            throw new Error("'string' output type invalid for '" + o.bookType + "' files");
          case "buffer":
          case "file":
            oopts.type = ftype;
            break;
          default:
            throw new Error("Unrecognized type " + o.type);
        }
        var out = z.FullPaths ? CFB.write(z, { fileType: "zip", type: { "nodebuffer": "buffer", "string": "binary" }[oopts.type] || oopts.type, compression: !!o.compression }) : z.generate(oopts);
        if (typeof Deno !== "undefined") {
          if (typeof out == "string") {
            if (o.type == "binary" || o.type == "base64") return out;
            out = new Uint8Array(s2ab(out));
          }
        }
        if (o.password && typeof encrypt_agile !== "undefined") return write_cfb_ctr(encrypt_agile(out, o.password), o);
        if (o.type === "file") return write_dl(o.file, out);
        return o.type == "string" ? utf8read(out) : out;
      }
      function write_cfb_type(wb, opts) {
        var o = opts || {};
        var cfb = write_xlscfb(wb, o);
        return write_cfb_ctr(cfb, o);
      }
      function write_string_type(out, opts, bom) {
        if (!bom) bom = "";
        var o = bom + out;
        switch (opts.type) {
          case "base64":
            return Base64_encode(utf8write(o));
          case "binary":
            return utf8write(o);
          case "string":
            return out;
          case "file":
            return write_dl(opts.file, o, "utf8");
          case "buffer": {
            if (has_buf) return Buffer_from(o, "utf8");
            else if (typeof TextEncoder !== "undefined") return new TextEncoder().encode(o);
            else return write_string_type(o, { type: "binary" }).split("").map(function(c) {
              return c.charCodeAt(0);
            });
          }
        }
        throw new Error("Unrecognized type " + opts.type);
      }
      function write_stxt_type(out, opts) {
        switch (opts.type) {
          case "base64":
            return Base64_encode(out);
          case "binary":
            return out;
          case "string":
            return out;
          case "file":
            return write_dl(opts.file, out, "binary");
          case "buffer": {
            if (has_buf) return Buffer_from(out, "binary");
            else return out.split("").map(function(c) {
              return c.charCodeAt(0);
            });
          }
        }
        throw new Error("Unrecognized type " + opts.type);
      }
      function write_binary_type(out, opts) {
        switch (opts.type) {
          case "string":
          case "base64":
          case "binary":
            var bstr = "";
            for (var i = 0; i < out.length; ++i) bstr += String.fromCharCode(out[i]);
            return opts.type == "base64" ? Base64_encode(bstr) : opts.type == "string" ? utf8read(bstr) : bstr;
          case "file":
            return write_dl(opts.file, out);
          case "buffer":
            return out;
          default:
            throw new Error("Unrecognized type " + opts.type);
        }
      }
      function writeSyncXLSX(wb, opts) {
        reset_cp();
        check_wb(wb);
        var o = dup(opts || {});
        if (o.cellStyles) {
          o.cellNF = true;
          o.sheetStubs = true;
        }
        if (o.type == "array") {
          o.type = "binary";
          var out = writeSyncXLSX(wb, o);
          o.type = "array";
          return s2ab(out);
        }
        return write_zip_typeXLSX(wb, o);
      }
      function writeSync(wb, opts) {
        reset_cp();
        check_wb(wb);
        var o = dup(opts || {});
        if (o.cellStyles) {
          o.cellNF = true;
          o.sheetStubs = true;
        }
        if (o.type == "array") {
          o.type = "binary";
          var out = writeSync(wb, o);
          o.type = "array";
          return s2ab(out);
        }
        var idx = 0;
        if (o.sheet) {
          if (typeof o.sheet == "number") idx = o.sheet;
          else idx = wb.SheetNames.indexOf(o.sheet);
          if (!wb.SheetNames[idx]) throw new Error("Sheet not found: " + o.sheet + " : " + typeof o.sheet);
        }
        switch (o.bookType || "xlsb") {
          case "xml":
          case "xlml":
            return write_string_type(write_xlml(wb, o), o);
          case "slk":
          case "sylk":
            return write_string_type(SYLK.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);
          case "htm":
          case "html":
            return write_string_type(sheet_to_html(wb.Sheets[wb.SheetNames[idx]], o), o);
          case "txt":
            return write_stxt_type(sheet_to_txt(wb.Sheets[wb.SheetNames[idx]], o), o);
          case "csv":
            return write_string_type(sheet_to_csv(wb.Sheets[wb.SheetNames[idx]], o), o, "\uFEFF");
          case "dif":
            return write_string_type(DIF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);
          case "dbf":
            return write_binary_type(DBF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);
          case "prn":
            return write_string_type(PRN.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);
          case "rtf":
            return write_string_type(RTF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);
          case "eth":
            return write_string_type(ETH.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);
          case "fods":
            return write_string_type(write_ods(wb, o), o);
          case "wk1":
            return write_binary_type(WK_.sheet_to_wk1(wb.Sheets[wb.SheetNames[idx]], o), o);
          case "wk3":
            return write_binary_type(WK_.book_to_wk3(wb, o), o);
          case "biff2":
            if (!o.biff) o.biff = 2;
          case "biff3":
            if (!o.biff) o.biff = 3;
          case "biff4":
            if (!o.biff) o.biff = 4;
            return write_binary_type(write_biff_buf(wb, o), o);
          case "biff5":
            if (!o.biff) o.biff = 5;
          case "biff8":
          case "xla":
          case "xls":
            if (!o.biff) o.biff = 8;
            return write_cfb_type(wb, o);
          case "xlsx":
          case "xlsm":
          case "xlam":
          case "xlsb":
          case "numbers":
          case "ods":
            return write_zip_type(wb, o);
          default:
            throw new Error("Unrecognized bookType |" + o.bookType + "|");
        }
      }
      function resolve_book_type(o) {
        if (o.bookType) return;
        var _BT = {
          "xls": "biff8",
          "htm": "html",
          "slk": "sylk",
          "socialcalc": "eth",
          "Sh33tJS": "WTF"
        };
        var ext = o.file.slice(o.file.lastIndexOf(".")).toLowerCase();
        if (ext.match(/^\.[a-z]+$/)) o.bookType = ext.slice(1);
        o.bookType = _BT[o.bookType] || o.bookType;
      }
      function writeFileSync(wb, filename, opts) {
        var o = opts || {};
        o.type = "file";
        o.file = filename;
        resolve_book_type(o);
        return writeSync(wb, o);
      }
      function writeFileSyncXLSX(wb, filename, opts) {
        var o = opts || {};
        o.type = "file";
        o.file = filename;
        resolve_book_type(o);
        return writeSyncXLSX(wb, o);
      }
      function writeFileAsync(filename, wb, opts, cb) {
        var o = opts || {};
        o.type = "file";
        o.file = filename;
        resolve_book_type(o);
        o.type = "buffer";
        var _cb = cb;
        if (!(_cb instanceof Function)) _cb = opts;
        return _fs.writeFile(filename, writeSync(wb, o), _cb);
      }
      function make_json_row(sheet, r, R, cols, header, hdr, dense, o) {
        var rr = encode_row(R);
        var defval = o.defval, raw = o.raw || !Object.prototype.hasOwnProperty.call(o, "raw");
        var isempty = true;
        var row = header === 1 ? [] : {};
        if (header !== 1) {
          if (Object.defineProperty) try {
            Object.defineProperty(row, "__rowNum__", { value: R, enumerable: false });
          } catch (e) {
            row.__rowNum__ = R;
          }
          else row.__rowNum__ = R;
        }
        if (!dense || sheet[R]) for (var C = r.s.c; C <= r.e.c; ++C) {
          var val = dense ? sheet[R][C] : sheet[cols[C] + rr];
          if (val === void 0 || val.t === void 0) {
            if (defval === void 0) continue;
            if (hdr[C] != null) {
              row[hdr[C]] = defval;
            }
            continue;
          }
          var v = val.v;
          switch (val.t) {
            case "z":
              if (v == null) break;
              continue;
            case "e":
              v = v == 0 ? null : void 0;
              break;
            case "s":
            case "d":
            case "b":
            case "n":
              break;
            default:
              throw new Error("unrecognized type " + val.t);
          }
          if (hdr[C] != null) {
            if (v == null) {
              if (val.t == "e" && v === null) row[hdr[C]] = null;
              else if (defval !== void 0) row[hdr[C]] = defval;
              else if (raw && v === null) row[hdr[C]] = null;
              else continue;
            } else {
              row[hdr[C]] = raw && (val.t !== "n" || val.t === "n" && o.rawNumbers !== false) ? v : format_cell(val, v, o);
            }
            if (v != null) isempty = false;
          }
        }
        return { row, isempty };
      }
      function sheet_to_json(sheet, opts) {
        if (sheet == null || sheet["!ref"] == null) return [];
        var val = { t: "n", v: 0 }, header = 0, offset = 1, hdr = [], v = 0, vv = "";
        var r = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } };
        var o = opts || {};
        var range = o.range != null ? o.range : sheet["!ref"];
        if (o.header === 1) header = 1;
        else if (o.header === "A") header = 2;
        else if (Array.isArray(o.header)) header = 3;
        else if (o.header == null) header = 0;
        switch (typeof range) {
          case "string":
            r = safe_decode_range(range);
            break;
          case "number":
            r = safe_decode_range(sheet["!ref"]);
            r.s.r = range;
            break;
          default:
            r = range;
        }
        if (header > 0) offset = 0;
        var rr = encode_row(r.s.r);
        var cols = [];
        var out = [];
        var outi = 0, counter = 0;
        var dense = Array.isArray(sheet);
        var R = r.s.r, C = 0;
        var header_cnt = {};
        if (dense && !sheet[R]) sheet[R] = [];
        var colinfo = o.skipHidden && sheet["!cols"] || [];
        var rowinfo = o.skipHidden && sheet["!rows"] || [];
        for (C = r.s.c; C <= r.e.c; ++C) {
          if ((colinfo[C] || {}).hidden) continue;
          cols[C] = encode_col(C);
          val = dense ? sheet[R][C] : sheet[cols[C] + rr];
          switch (header) {
            case 1:
              hdr[C] = C - r.s.c;
              break;
            case 2:
              hdr[C] = cols[C];
              break;
            case 3:
              hdr[C] = o.header[C - r.s.c];
              break;
            default:
              if (val == null) val = { w: "__EMPTY", t: "s" };
              vv = v = format_cell(val, null, o);
              counter = header_cnt[v] || 0;
              if (!counter) header_cnt[v] = 1;
              else {
                do {
                  vv = v + "_" + counter++;
                } while (header_cnt[vv]);
                header_cnt[v] = counter;
                header_cnt[vv] = 1;
              }
              hdr[C] = vv;
          }
        }
        for (R = r.s.r + offset; R <= r.e.r; ++R) {
          if ((rowinfo[R] || {}).hidden) continue;
          var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);
          if (row.isempty === false || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row;
        }
        out.length = outi;
        return out;
      }
      var qreg = /"/g;
      function make_csv_row(sheet, r, R, cols, fs16, rs, FS, o) {
        var isempty = true;
        var row = [], txt = "", rr = encode_row(R);
        for (var C = r.s.c; C <= r.e.c; ++C) {
          if (!cols[C]) continue;
          var val = o.dense ? (sheet[R] || [])[C] : sheet[cols[C] + rr];
          if (val == null) txt = "";
          else if (val.v != null) {
            isempty = false;
            txt = "" + (o.rawNumbers && val.t == "n" ? val.v : format_cell(val, null, o));
            for (var i = 0, cc = 0; i !== txt.length; ++i) if ((cc = txt.charCodeAt(i)) === fs16 || cc === rs || cc === 34 || o.forceQuotes) {
              txt = '"' + txt.replace(qreg, '""') + '"';
              break;
            }
            if (txt == "ID") txt = '"ID"';
          } else if (val.f != null && !val.F) {
            isempty = false;
            txt = "=" + val.f;
            if (txt.indexOf(",") >= 0) txt = '"' + txt.replace(qreg, '""') + '"';
          } else txt = "";
          row.push(txt);
        }
        if (o.blankrows === false && isempty) return null;
        return row.join(FS);
      }
      function sheet_to_csv(sheet, opts) {
        var out = [];
        var o = opts == null ? {} : opts;
        if (sheet == null || sheet["!ref"] == null) return "";
        var r = safe_decode_range(sheet["!ref"]);
        var FS = o.FS !== void 0 ? o.FS : ",", fs16 = FS.charCodeAt(0);
        var RS = o.RS !== void 0 ? o.RS : "\n", rs = RS.charCodeAt(0);
        var endregex = new RegExp((FS == "|" ? "\\|" : FS) + "+$");
        var row = "", cols = [];
        o.dense = Array.isArray(sheet);
        var colinfo = o.skipHidden && sheet["!cols"] || [];
        var rowinfo = o.skipHidden && sheet["!rows"] || [];
        for (var C = r.s.c; C <= r.e.c; ++C) if (!(colinfo[C] || {}).hidden) cols[C] = encode_col(C);
        var w = 0;
        for (var R = r.s.r; R <= r.e.r; ++R) {
          if ((rowinfo[R] || {}).hidden) continue;
          row = make_csv_row(sheet, r, R, cols, fs16, rs, FS, o);
          if (row == null) {
            continue;
          }
          if (o.strip) row = row.replace(endregex, "");
          if (row || o.blankrows !== false) out.push((w++ ? RS : "") + row);
        }
        delete o.dense;
        return out.join("");
      }
      function sheet_to_txt(sheet, opts) {
        if (!opts) opts = {};
        opts.FS = "	";
        opts.RS = "\n";
        var s = sheet_to_csv(sheet, opts);
        if (typeof $cptable == "undefined" || opts.type == "string") return s;
        var o = $cptable.utils.encode(1200, s, "str");
        return String.fromCharCode(255) + String.fromCharCode(254) + o;
      }
      function sheet_to_formulae(sheet) {
        var y = "", x, val = "";
        if (sheet == null || sheet["!ref"] == null) return [];
        var r = safe_decode_range(sheet["!ref"]), rr = "", cols = [], C;
        var cmds = [];
        var dense = Array.isArray(sheet);
        for (C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);
        for (var R = r.s.r; R <= r.e.r; ++R) {
          rr = encode_row(R);
          for (C = r.s.c; C <= r.e.c; ++C) {
            y = cols[C] + rr;
            x = dense ? (sheet[R] || [])[C] : sheet[y];
            val = "";
            if (x === void 0) continue;
            else if (x.F != null) {
              y = x.F;
              if (!x.f) continue;
              val = x.f;
              if (y.indexOf(":") == -1) y = y + ":" + y;
            }
            if (x.f != null) val = x.f;
            else if (x.t == "z") continue;
            else if (x.t == "n" && x.v != null) val = "" + x.v;
            else if (x.t == "b") val = x.v ? "TRUE" : "FALSE";
            else if (x.w !== void 0) val = "'" + x.w;
            else if (x.v === void 0) continue;
            else if (x.t == "s") val = "'" + x.v;
            else val = "" + x.v;
            cmds[cmds.length] = y + "=" + val;
          }
        }
        return cmds;
      }
      function sheet_add_json(_ws, js, opts) {
        var o = opts || {};
        var offset = +!o.skipHeader;
        var ws = _ws || {};
        var _R = 0, _C = 0;
        if (ws && o.origin != null) {
          if (typeof o.origin == "number") _R = o.origin;
          else {
            var _origin = typeof o.origin == "string" ? decode_cell(o.origin) : o.origin;
            _R = _origin.r;
            _C = _origin.c;
          }
        }
        var cell;
        var range = { s: { c: 0, r: 0 }, e: { c: _C, r: _R + js.length - 1 + offset } };
        if (ws["!ref"]) {
          var _range = safe_decode_range(ws["!ref"]);
          range.e.c = Math.max(range.e.c, _range.e.c);
          range.e.r = Math.max(range.e.r, _range.e.r);
          if (_R == -1) {
            _R = _range.e.r + 1;
            range.e.r = _R + js.length - 1 + offset;
          }
        } else {
          if (_R == -1) {
            _R = 0;
            range.e.r = js.length - 1 + offset;
          }
        }
        var hdr = o.header || [], C = 0;
        js.forEach(function(JS, R) {
          keys(JS).forEach(function(k) {
            if ((C = hdr.indexOf(k)) == -1) hdr[C = hdr.length] = k;
            var v = JS[k];
            var t = "z";
            var z = "";
            var ref = encode_cell({ c: _C + C, r: _R + R + offset });
            cell = ws_get_cell_stub(ws, ref);
            if (v && typeof v === "object" && !(v instanceof Date)) {
              ws[ref] = v;
            } else {
              if (typeof v == "number") t = "n";
              else if (typeof v == "boolean") t = "b";
              else if (typeof v == "string") t = "s";
              else if (v instanceof Date) {
                t = "d";
                if (!o.cellDates) {
                  t = "n";
                  v = datenum(v);
                }
                z = o.dateNF || table_fmt[14];
              } else if (v === null && o.nullError) {
                t = "e";
                v = 0;
              }
              if (!cell) ws[ref] = cell = { t, v };
              else {
                cell.t = t;
                cell.v = v;
                delete cell.w;
                delete cell.R;
                if (z) cell.z = z;
              }
              if (z) cell.z = z;
            }
          });
        });
        range.e.c = Math.max(range.e.c, _C + hdr.length - 1);
        var __R = encode_row(_R);
        if (offset) for (C = 0; C < hdr.length; ++C) ws[encode_col(C + _C) + __R] = { t: "s", v: hdr[C] };
        ws["!ref"] = encode_range(range);
        return ws;
      }
      function json_to_sheet(js, opts) {
        return sheet_add_json(null, js, opts);
      }
      function ws_get_cell_stub(ws, R, C) {
        if (typeof R == "string") {
          if (Array.isArray(ws)) {
            var RC = decode_cell(R);
            if (!ws[RC.r]) ws[RC.r] = [];
            return ws[RC.r][RC.c] || (ws[RC.r][RC.c] = { t: "z" });
          }
          return ws[R] || (ws[R] = { t: "z" });
        }
        if (typeof R != "number") return ws_get_cell_stub(ws, encode_cell(R));
        return ws_get_cell_stub(ws, encode_cell({ r: R, c: C || 0 }));
      }
      function wb_sheet_idx(wb, sh) {
        if (typeof sh == "number") {
          if (sh >= 0 && wb.SheetNames.length > sh) return sh;
          throw new Error("Cannot find sheet # " + sh);
        } else if (typeof sh == "string") {
          var idx = wb.SheetNames.indexOf(sh);
          if (idx > -1) return idx;
          throw new Error("Cannot find sheet name |" + sh + "|");
        } else throw new Error("Cannot find sheet |" + sh + "|");
      }
      function book_new() {
        return { SheetNames: [], Sheets: {} };
      }
      function book_append_sheet(wb, ws, name, roll) {
        var i = 1;
        if (!name) {
          for (; i <= 65535; ++i, name = void 0) if (wb.SheetNames.indexOf(name = "Sheet" + i) == -1) break;
        }
        if (!name || wb.SheetNames.length >= 65535) throw new Error("Too many worksheets");
        if (roll && wb.SheetNames.indexOf(name) >= 0) {
          var m = name.match(/(^.*?)(\d+)$/);
          i = m && +m[2] || 0;
          var root = m && m[1] || name;
          for (++i; i <= 65535; ++i) if (wb.SheetNames.indexOf(name = root + i) == -1) break;
        }
        check_ws_name(name);
        if (wb.SheetNames.indexOf(name) >= 0) throw new Error("Worksheet with name |" + name + "| already exists!");
        wb.SheetNames.push(name);
        wb.Sheets[name] = ws;
        return name;
      }
      function book_set_sheet_visibility(wb, sh, vis) {
        if (!wb.Workbook) wb.Workbook = {};
        if (!wb.Workbook.Sheets) wb.Workbook.Sheets = [];
        var idx = wb_sheet_idx(wb, sh);
        if (!wb.Workbook.Sheets[idx]) wb.Workbook.Sheets[idx] = {};
        switch (vis) {
          case 0:
          case 1:
          case 2:
            break;
          default:
            throw new Error("Bad sheet visibility setting " + vis);
        }
        wb.Workbook.Sheets[idx].Hidden = vis;
      }
      function cell_set_number_format(cell, fmt) {
        cell.z = fmt;
        return cell;
      }
      function cell_set_hyperlink(cell, target, tooltip) {
        if (!target) {
          delete cell.l;
        } else {
          cell.l = { Target: target };
          if (tooltip) cell.l.Tooltip = tooltip;
        }
        return cell;
      }
      function cell_set_internal_link(cell, range, tooltip) {
        return cell_set_hyperlink(cell, "#" + range, tooltip);
      }
      function cell_add_comment(cell, text, author) {
        if (!cell.c) cell.c = [];
        cell.c.push({ t: text, a: author || "SheetJS" });
      }
      function sheet_set_array_formula(ws, range, formula, dynamic) {
        var rng = typeof range != "string" ? range : safe_decode_range(range);
        var rngstr = typeof range == "string" ? range : encode_range(range);
        for (var R = rng.s.r; R <= rng.e.r; ++R) for (var C = rng.s.c; C <= rng.e.c; ++C) {
          var cell = ws_get_cell_stub(ws, R, C);
          cell.t = "n";
          cell.F = rngstr;
          delete cell.v;
          if (R == rng.s.r && C == rng.s.c) {
            cell.f = formula;
            if (dynamic) cell.D = true;
          }
        }
        return ws;
      }
      var utils = {
        encode_col,
        encode_row,
        encode_cell,
        encode_range,
        decode_col,
        decode_row,
        split_cell,
        decode_cell,
        decode_range,
        format_cell,
        sheet_add_aoa,
        sheet_add_json,
        sheet_add_dom,
        aoa_to_sheet,
        json_to_sheet,
        table_to_sheet: parse_dom_table,
        table_to_book,
        sheet_to_csv,
        sheet_to_txt,
        sheet_to_json,
        sheet_to_html,
        sheet_to_formulae,
        sheet_to_row_object_array: sheet_to_json,
        sheet_get_cell: ws_get_cell_stub,
        book_new,
        book_append_sheet,
        book_set_sheet_visibility,
        cell_set_number_format,
        cell_set_hyperlink,
        cell_set_internal_link,
        cell_add_comment,
        sheet_set_array_formula,
        consts: {
          SHEET_VISIBLE: 0,
          SHEET_HIDDEN: 1,
          SHEET_VERY_HIDDEN: 2
        }
      };
      var _Readable;
      function set_readable(R) {
        _Readable = R;
      }
      function write_csv_stream(sheet, opts) {
        var stream = _Readable();
        var o = opts == null ? {} : opts;
        if (sheet == null || sheet["!ref"] == null) {
          stream.push(null);
          return stream;
        }
        var r = safe_decode_range(sheet["!ref"]);
        var FS = o.FS !== void 0 ? o.FS : ",", fs16 = FS.charCodeAt(0);
        var RS = o.RS !== void 0 ? o.RS : "\n", rs = RS.charCodeAt(0);
        var endregex = new RegExp((FS == "|" ? "\\|" : FS) + "+$");
        var row = "", cols = [];
        o.dense = Array.isArray(sheet);
        var colinfo = o.skipHidden && sheet["!cols"] || [];
        var rowinfo = o.skipHidden && sheet["!rows"] || [];
        for (var C = r.s.c; C <= r.e.c; ++C) if (!(colinfo[C] || {}).hidden) cols[C] = encode_col(C);
        var R = r.s.r;
        var BOM = false, w = 0;
        stream._read = function() {
          if (!BOM) {
            BOM = true;
            return stream.push("\uFEFF");
          }
          while (R <= r.e.r) {
            ++R;
            if ((rowinfo[R - 1] || {}).hidden) continue;
            row = make_csv_row(sheet, r, R - 1, cols, fs16, rs, FS, o);
            if (row != null) {
              if (o.strip) row = row.replace(endregex, "");
              if (row || o.blankrows !== false) return stream.push((w++ ? RS : "") + row);
            }
          }
          return stream.push(null);
        };
        return stream;
      }
      function write_html_stream(ws, opts) {
        var stream = _Readable();
        var o = opts || {};
        var header = o.header != null ? o.header : HTML_BEGIN;
        var footer = o.footer != null ? o.footer : HTML_END;
        stream.push(header);
        var r = decode_range(ws["!ref"]);
        o.dense = Array.isArray(ws);
        stream.push(make_html_preamble(ws, r, o));
        var R = r.s.r;
        var end = false;
        stream._read = function() {
          if (R > r.e.r) {
            if (!end) {
              end = true;
              stream.push("</table>" + footer);
            }
            return stream.push(null);
          }
          while (R <= r.e.r) {
            stream.push(make_html_row(ws, r, R, o));
            ++R;
            break;
          }
        };
        return stream;
      }
      function write_json_stream(sheet, opts) {
        var stream = _Readable({ objectMode: true });
        if (sheet == null || sheet["!ref"] == null) {
          stream.push(null);
          return stream;
        }
        var val = { t: "n", v: 0 }, header = 0, offset = 1, hdr = [], v = 0, vv = "";
        var r = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } };
        var o = opts || {};
        var range = o.range != null ? o.range : sheet["!ref"];
        if (o.header === 1) header = 1;
        else if (o.header === "A") header = 2;
        else if (Array.isArray(o.header)) header = 3;
        switch (typeof range) {
          case "string":
            r = safe_decode_range(range);
            break;
          case "number":
            r = safe_decode_range(sheet["!ref"]);
            r.s.r = range;
            break;
          default:
            r = range;
        }
        if (header > 0) offset = 0;
        var rr = encode_row(r.s.r);
        var cols = [];
        var counter = 0;
        var dense = Array.isArray(sheet);
        var R = r.s.r, C = 0;
        var header_cnt = {};
        if (dense && !sheet[R]) sheet[R] = [];
        var colinfo = o.skipHidden && sheet["!cols"] || [];
        var rowinfo = o.skipHidden && sheet["!rows"] || [];
        for (C = r.s.c; C <= r.e.c; ++C) {
          if ((colinfo[C] || {}).hidden) continue;
          cols[C] = encode_col(C);
          val = dense ? sheet[R][C] : sheet[cols[C] + rr];
          switch (header) {
            case 1:
              hdr[C] = C - r.s.c;
              break;
            case 2:
              hdr[C] = cols[C];
              break;
            case 3:
              hdr[C] = o.header[C - r.s.c];
              break;
            default:
              if (val == null) val = { w: "__EMPTY", t: "s" };
              vv = v = format_cell(val, null, o);
              counter = header_cnt[v] || 0;
              if (!counter) header_cnt[v] = 1;
              else {
                do {
                  vv = v + "_" + counter++;
                } while (header_cnt[vv]);
                header_cnt[v] = counter;
                header_cnt[vv] = 1;
              }
              hdr[C] = vv;
          }
        }
        R = r.s.r + offset;
        stream._read = function() {
          while (R <= r.e.r) {
            if ((rowinfo[R - 1] || {}).hidden) continue;
            var row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);
            ++R;
            if (row.isempty === false || (header === 1 ? o.blankrows !== false : !!o.blankrows)) {
              stream.push(row.row);
              return;
            }
          }
          return stream.push(null);
        };
        return stream;
      }
      var __stream = {
        to_json: write_json_stream,
        to_html: write_html_stream,
        to_csv: write_csv_stream,
        set_readable
      };
      if (typeof parse_xlscfb !== "undefined") XLSX2.parse_xlscfb = parse_xlscfb;
      XLSX2.parse_zip = parse_zip;
      XLSX2.read = readSync;
      XLSX2.readFile = readFileSync;
      XLSX2.readFileSync = readFileSync;
      XLSX2.write = writeSync;
      XLSX2.writeFile = writeFileSync;
      XLSX2.writeFileSync = writeFileSync;
      XLSX2.writeFileAsync = writeFileAsync;
      XLSX2.utils = utils;
      XLSX2.writeXLSX = writeSyncXLSX;
      XLSX2.writeFileXLSX = writeFileSyncXLSX;
      XLSX2.SSF = SSF;
      if (typeof __stream !== "undefined") XLSX2.stream = __stream;
      if (typeof CFB !== "undefined") XLSX2.CFB = CFB;
      if (typeof __require !== "undefined") {
        var strmod = __require("stream");
        if ((strmod || {}).Readable) set_readable(strmod.Readable);
      }
    }
    if (typeof exports !== "undefined") make_xlsx_lib(exports);
    else if (typeof module !== "undefined" && module.exports) make_xlsx_lib(module.exports);
    else if (typeof define === "function" && define.amd) define("xlsx", function() {
      if (!XLSX.version) make_xlsx_lib(XLSX);
      return XLSX;
    });
    else make_xlsx_lib(XLSX);
    if (typeof window !== "undefined" && !window.XLSX) try {
      window.XLSX = XLSX;
    } catch (e) {
    }
  }
});

// vort/cli.js
import fs15 from "fs";
import path4 from "path";

// vort/parser.js
var VortParser = class {
  static parse(code) {
    const agents = {};
    let workflow = null;
    const getLineNumber = (str, index) => {
      return str.substring(0, index).split("\n").length;
    };
    const cleanCode = code.replace(/\/\/.*$/gm, "");
    const agentRegex = /agent\s+(\w+)\s*\{([^}]+)\}/g;
    let match;
    while ((match = agentRegex.exec(cleanCode)) !== null) {
      const agentName = match[1];
      const bodyText = match[2];
      const agentStartIndex = match.index;
      const agentLine = getLineNumber(cleanCode, agentStartIndex);
      const props = {};
      const openBraceIdx = cleanCode.indexOf("{", agentStartIndex);
      const bodyStartLine = getLineNumber(cleanCode, openBraceIdx);
      const lines = bodyText.split("\n");
      lines.forEach((line, index) => {
        const currentLineNum = bodyStartLine + index;
        const trimmed = line.trim();
        if (!trimmed) return;
        const parts = trimmed.split(":");
        if (parts.length >= 2) {
          const key = parts[0].trim();
          const val = parts.slice(1).join(":").trim().replace(/,$/, "").trim().replace(/^['"]|['"]$/g, "");
          props[key] = isNaN(val) ? val : parseFloat(val);
        } else {
          const err = new Error(`Invalid property declaration inside agent '${agentName}': '${trimmed}'`);
          err.line = currentLineNum;
          throw err;
        }
      });
      agents[agentName] = props;
    }
    const workflowMatch = /workflow\s+(\w+)\s*\(([^)]*)\)\s*\{([\s\S]*)\}/.exec(cleanCode);
    if (workflowMatch) {
      const workflowName = workflowMatch[1];
      const workflowStartIndex = workflowMatch.index;
      const params = [];
      const paramTypes = {};
      workflowMatch[2].split(",").forEach((p) => {
        const parts = p.trim().split(":");
        if (parts[0]) {
          const name = parts[0].trim();
          const type = parts[1] ? parts[1].trim() : "String";
          params.push(name);
          paramTypes[name] = type;
        }
      });
      const openBraceIdx = cleanCode.indexOf("{", workflowStartIndex);
      const bodyStartLine = getLineNumber(cleanCode, openBraceIdx);
      const bodyText = workflowMatch[3];
      const statements = [];
      const lines = bodyText.split("\n");
      lines.forEach((line, index) => {
        const currentLineNum = bodyStartLine + index;
        const trimmedLine = line.trim();
        if (!trimmedLine) return;
        if (trimmedLine.startsWith("let ")) {
          const eqIdx = trimmedLine.indexOf("=");
          if (eqIdx === -1) {
            const err = new Error(`Syntax error: Assignment missing '=' in statement: '${trimmedLine}'`);
            err.line = currentLineNum;
            throw err;
          }
          const varName = trimmedLine.substring(4, eqIdx).trim();
          const exprText = trimmedLine.substring(eqIdx + 1).trim();
          if (!varName) {
            const err = new Error(`Syntax error: Missing variable name in assignment: '${trimmedLine}'`);
            err.line = currentLineNum;
            throw err;
          }
          try {
            statements.push({
              type: "Assignment",
              var: varName,
              expr: this.parseExpr(exprText)
            });
          } catch (exprErr) {
            const err = new Error(`Syntax error parsing expression: ${exprErr.message}`);
            err.line = currentLineNum;
            throw err;
          }
        } else if (trimmedLine.startsWith("return ")) {
          statements.push({
            type: "Return",
            value: trimmedLine.substring(7).replace(";", "").trim()
          });
        } else {
          const err = new Error(`Syntax error: Unrecognized statement type: '${trimmedLine}'`);
          err.line = currentLineNum;
          throw err;
        }
      });
      workflow = { name: workflowName, params, paramTypes, body: statements };
    }
    if (!workflow) {
      const workflowKeywordIdx = cleanCode.indexOf("workflow");
      const line = workflowKeywordIdx !== -1 ? getLineNumber(cleanCode, workflowKeywordIdx) : 1;
      const err = new Error("Missing or invalid workflow declaration block.");
      err.line = line;
      throw err;
    }
    return { agents, workflow };
  }
  // 括号感知的管道分割器，避免分割 Lambda 表达式内部的管道
  static splitByPipe(str) {
    const parts = [];
    let current = "";
    let parenDepth = 0;
    for (let i = 0; i < str.length; i++) {
      const char = str[i];
      if (char === "(") parenDepth++;
      else if (char === ")") parenDepth--;
      if (char === "|" && parenDepth === 0) {
        parts.push(current.trim());
        current = "";
      } else {
        current += char;
      }
    }
    parts.push(current.trim());
    return parts;
  }
  static parseExpr(exprText) {
    if (!exprText.includes("|")) {
      const callMatch = /(\w+)\s*\(([^)]*)\)/.exec(exprText);
      if (callMatch) {
        return {
          type: "Call",
          filter: callMatch[1],
          args: callMatch[2] ? callMatch[2].split(",").map((a) => a.trim()) : []
        };
      }
      return { type: "Literal", value: exprText.replace(/^['"]|['"]$/g, "") };
    }
    const parts = this.splitByPipe(exprText);
    const input = parts[0];
    const steps = [];
    for (let i = 1; i < parts.length; i++) {
      const stepText = parts[i];
      if (stepText.startsWith("parallel(")) {
        const lambdaText = stepText.substring(9, stepText.length - 1);
        const arrowIdx = lambdaText.indexOf("=>");
        const param = lambdaText.substring(0, arrowIdx).trim();
        const lambdaBody = lambdaText.substring(arrowIdx + 2).trim();
        steps.push({
          filter: "parallel",
          args: [{
            type: "Lambda",
            param,
            body: this.parseExpr(lambdaBody)
          }]
        });
      } else {
        const callMatch = /(\w+)(?:\.(\w+))?\s*\(([^)]*)\)/.exec(stepText);
        if (callMatch) {
          if (callMatch[2]) {
            steps.push({
              agent: callMatch[1],
              method: callMatch[2],
              args: callMatch[3] ? callMatch[3].split(",").map((a) => a.trim()) : []
            });
          } else {
            steps.push({
              filter: callMatch[1],
              args: callMatch[3] ? callMatch[3].split(",").map((a) => a.trim()) : []
            });
          }
        }
      }
    }
    return { type: "Pipeline", input, steps };
  }
};

// vort/runtime.js
import path2 from "path";
import fs14 from "fs";
import { fileURLToPath } from "url";

// wasm-core/pkg/wasm_core.js
var TerminologyEngine = class {
  __destroy_into_raw() {
    const ptr = this.__wbg_ptr;
    this.__wbg_ptr = 0;
    TerminologyEngineFinalization.unregister(this);
    return ptr;
  }
  free() {
    const ptr = this.__destroy_into_raw();
    wasm.__wbg_terminologyengine_free(ptr, 0);
  }
  /**
   * Performs O(N) lock-free multi-pattern matching across the given text
   * @param {string} text
   * @returns {any}
   */
  find_terms(text) {
    const ptr0 = passStringToWasm0(text, wasm.__wbindgen_export, wasm.__wbindgen_export2);
    const len0 = WASM_VECTOR_LEN;
    const ret = wasm.terminologyengine_find_terms(this.__wbg_ptr, ptr0, len0);
    return takeObject(ret);
  }
  /**
   * @param {string} terms_json
   */
  constructor(terms_json) {
    try {
      const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
      const ptr0 = passStringToWasm0(terms_json, wasm.__wbindgen_export, wasm.__wbindgen_export2);
      const len0 = WASM_VECTOR_LEN;
      wasm.terminologyengine_new(retptr, ptr0, len0);
      var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
      var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
      var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
      if (r2) {
        throw takeObject(r1);
      }
      this.__wbg_ptr = r0 >>> 0;
      TerminologyEngineFinalization.register(this, this.__wbg_ptr, this);
      return this;
    } finally {
      wasm.__wbindgen_add_to_stack_pointer(16);
    }
  }
};
if (Symbol.dispose) TerminologyEngine.prototype[Symbol.dispose] = TerminologyEngine.prototype.free;
var TranslationMemoryEngine = class {
  __destroy_into_raw() {
    const ptr = this.__wbg_ptr;
    this.__wbg_ptr = 0;
    TranslationMemoryEngineFinalization.unregister(this);
    return ptr;
  }
  free() {
    const ptr = this.__destroy_into_raw();
    wasm.__wbg_translationmemoryengine_free(ptr, 0);
  }
  /**
   * Hybrid Search: Vector semantic search + Traditional Fuzzy match fallback
   * @param {string} query
   * @param {string} query_embedding_json
   * @param {number} top_k
   * @returns {any}
   */
  hybrid_search(query, query_embedding_json, top_k) {
    const ptr0 = passStringToWasm0(query, wasm.__wbindgen_export, wasm.__wbindgen_export2);
    const len0 = WASM_VECTOR_LEN;
    const ptr1 = passStringToWasm0(query_embedding_json, wasm.__wbindgen_export, wasm.__wbindgen_export2);
    const len1 = WASM_VECTOR_LEN;
    const ret = wasm.translationmemoryengine_hybrid_search(this.__wbg_ptr, ptr0, len0, ptr1, len1, top_k);
    return takeObject(ret);
  }
  /**
   * @param {string} entries_json
   */
  constructor(entries_json) {
    try {
      const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
      const ptr0 = passStringToWasm0(entries_json, wasm.__wbindgen_export, wasm.__wbindgen_export2);
      const len0 = WASM_VECTOR_LEN;
      wasm.translationmemoryengine_new(retptr, ptr0, len0);
      var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
      var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
      var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
      if (r2) {
        throw takeObject(r1);
      }
      this.__wbg_ptr = r0 >>> 0;
      TranslationMemoryEngineFinalization.register(this, this.__wbg_ptr, this);
      return this;
    } finally {
      wasm.__wbindgen_add_to_stack_pointer(16);
    }
  }
};
if (Symbol.dispose) TranslationMemoryEngine.prototype[Symbol.dispose] = TranslationMemoryEngine.prototype.free;
var WasmVirtualScrollState = class {
  __destroy_into_raw() {
    const ptr = this.__wbg_ptr;
    this.__wbg_ptr = 0;
    WasmVirtualScrollStateFinalization.unregister(this);
    return ptr;
  }
  free() {
    const ptr = this.__destroy_into_raw();
    wasm.__wbg_wasmvirtualscrollstate_free(ptr, 0);
  }
  /**
   * 零拷贝读取指定索引的偏移量
   * @param {number} index
   * @returns {number}
   */
  get_offset(index) {
    const ret = wasm.wasmvirtualscrollstate_get_offset(this.__wbg_ptr, index);
    return ret;
  }
  /**
   * 零拷贝读取单行高度
   * @param {number} index
   * @returns {number}
   */
  get_row_height(index) {
    const ret = wasm.wasmvirtualscrollstate_get_row_height(this.__wbg_ptr, index);
    return ret;
  }
  /**
   * 零拷贝二分查找：在专属前缀和中检索 scrollTop 对应的起始行索引
   * @param {number} scroll_top
   * @returns {number}
   */
  get_start_index(scroll_top) {
    const ret = wasm.wasmvirtualscrollstate_get_start_index(this.__wbg_ptr, scroll_top);
    return ret >>> 0;
  }
  /**
   * 返回当前缓存的行数
   * @returns {number}
   */
  len() {
    const ret = wasm.wasmvirtualscrollstate_len(this.__wbg_ptr);
    return ret >>> 0;
  }
  /**
   * 构造函数，由 JS 端 `new WasmVirtualScrollState()` 触发
   */
  constructor() {
    const ret = wasm.wasmvirtualscrollstate_new();
    this.__wbg_ptr = ret >>> 0;
    WasmVirtualScrollStateFinalization.register(this, this.__wbg_ptr, this);
    return this;
  }
  /**
   * 写入行高并原地计算前缀和，返回总虚拟高度。
   * 入参 `heights: &[f64]` 映射为 JS `Float64Array`，零序列化开销。
   * @param {Float64Array} heights
   * @returns {number}
   */
  set_heights(heights) {
    const ptr0 = passArrayF64ToWasm0(heights, wasm.__wbindgen_export);
    const len0 = WASM_VECTOR_LEN;
    const ret = wasm.wasmvirtualscrollstate_set_heights(this.__wbg_ptr, ptr0, len0);
    return ret;
  }
  /**
   * 增量式单行高度更新与前缀和位移计算，常数时间/增量复杂度，返回最新总虚拟高度。
   * @param {number} index
   * @param {number} new_height
   * @returns {number}
   */
  update_row_height(index, new_height) {
    const ret = wasm.wasmvirtualscrollstate_update_row_height(this.__wbg_ptr, index, new_height);
    return ret;
  }
};
if (Symbol.dispose) WasmVirtualScrollState.prototype[Symbol.dispose] = WasmVirtualScrollState.prototype.free;
function compute_similarity(a, b) {
  const ptr0 = passStringToWasm0(a, wasm.__wbindgen_export, wasm.__wbindgen_export2);
  const len0 = WASM_VECTOR_LEN;
  const ptr1 = passStringToWasm0(b, wasm.__wbindgen_export, wasm.__wbindgen_export2);
  const len1 = WASM_VECTOR_LEN;
  const ret = wasm.compute_similarity(ptr0, len0, ptr1, len1);
  return ret;
}
function estimate_row_heights(segments, container_width, min_height) {
  try {
    const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
    wasm.estimate_row_heights(retptr, addHeapObject(segments), container_width, min_height);
    var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
    var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
    var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
    if (r2) {
      throw takeObject(r1);
    }
    return takeObject(r0);
  } finally {
    wasm.__wbindgen_add_to_stack_pointer(16);
  }
}
function find_active_subtitle(sorted_starts, sorted_ends, time_ms) {
  const ptr0 = passArrayF64ToWasm0(sorted_starts, wasm.__wbindgen_export);
  const len0 = WASM_VECTOR_LEN;
  const ptr1 = passArrayF64ToWasm0(sorted_ends, wasm.__wbindgen_export);
  const len1 = WASM_VECTOR_LEN;
  const ret = wasm.find_active_subtitle(ptr0, len0, ptr1, len1, time_ms);
  return ret;
}
function __wbg_get_imports() {
  const import0 = {
    __proto__: null,
    __wbg_Error_83742b46f01ce22d: function(arg0, arg1) {
      const ret = Error(getStringFromWasm0(arg0, arg1));
      return addHeapObject(ret);
    },
    __wbg_Number_a5a435bd7bbec835: function(arg0) {
      const ret = Number(getObject(arg0));
      return ret;
    },
    __wbg_String_8564e559799eccda: function(arg0, arg1) {
      const ret = String(getObject(arg1));
      const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);
      const len1 = WASM_VECTOR_LEN;
      getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
      getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
    },
    __wbg___wbindgen_bigint_get_as_i64_447a76b5c6ef7bda: function(arg0, arg1) {
      const v = getObject(arg1);
      const ret = typeof v === "bigint" ? v : void 0;
      getDataViewMemory0().setBigInt64(arg0 + 8 * 1, isLikeNone(ret) ? BigInt(0) : ret, true);
      getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);
    },
    __wbg___wbindgen_boolean_get_c0f3f60bac5a78d1: function(arg0) {
      const v = getObject(arg0);
      const ret = typeof v === "boolean" ? v : void 0;
      return isLikeNone(ret) ? 16777215 : ret ? 1 : 0;
    },
    __wbg___wbindgen_debug_string_5398f5bb970e0daa: function(arg0, arg1) {
      const ret = debugString(getObject(arg1));
      const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);
      const len1 = WASM_VECTOR_LEN;
      getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
      getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
    },
    __wbg___wbindgen_in_41dbb8413020e076: function(arg0, arg1) {
      const ret = getObject(arg0) in getObject(arg1);
      return ret;
    },
    __wbg___wbindgen_is_bigint_e2141d4f045b7eda: function(arg0) {
      const ret = typeof getObject(arg0) === "bigint";
      return ret;
    },
    __wbg___wbindgen_is_function_3c846841762788c1: function(arg0) {
      const ret = typeof getObject(arg0) === "function";
      return ret;
    },
    __wbg___wbindgen_is_object_781bc9f159099513: function(arg0) {
      const val = getObject(arg0);
      const ret = typeof val === "object" && val !== null;
      return ret;
    },
    __wbg___wbindgen_is_string_7ef6b97b02428fae: function(arg0) {
      const ret = typeof getObject(arg0) === "string";
      return ret;
    },
    __wbg___wbindgen_is_undefined_52709e72fb9f179c: function(arg0) {
      const ret = getObject(arg0) === void 0;
      return ret;
    },
    __wbg___wbindgen_jsval_eq_ee31bfad3e536463: function(arg0, arg1) {
      const ret = getObject(arg0) === getObject(arg1);
      return ret;
    },
    __wbg___wbindgen_jsval_loose_eq_5bcc3bed3c69e72b: function(arg0, arg1) {
      const ret = getObject(arg0) == getObject(arg1);
      return ret;
    },
    __wbg___wbindgen_number_get_34bb9d9dcfa21373: function(arg0, arg1) {
      const obj = getObject(arg1);
      const ret = typeof obj === "number" ? obj : void 0;
      getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);
      getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);
    },
    __wbg___wbindgen_string_get_395e606bd0ee4427: function(arg0, arg1) {
      const obj = getObject(arg1);
      const ret = typeof obj === "string" ? obj : void 0;
      var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);
      var len1 = WASM_VECTOR_LEN;
      getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
      getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
    },
    __wbg___wbindgen_throw_6ddd609b62940d55: function(arg0, arg1) {
      throw new Error(getStringFromWasm0(arg0, arg1));
    },
    __wbg_call_e133b57c9155d22c: function() {
      return handleError(function(arg0, arg1) {
        const ret = getObject(arg0).call(getObject(arg1));
        return addHeapObject(ret);
      }, arguments);
    },
    __wbg_done_08ce71ee07e3bd17: function(arg0) {
      const ret = getObject(arg0).done;
      return ret;
    },
    __wbg_entries_e8a20ff8c9757101: function(arg0) {
      const ret = Object.entries(getObject(arg0));
      return addHeapObject(ret);
    },
    __wbg_error_a6fa202b58aa1cd3: function(arg0, arg1) {
      let deferred0_0;
      let deferred0_1;
      try {
        deferred0_0 = arg0;
        deferred0_1 = arg1;
        console.error(getStringFromWasm0(arg0, arg1));
      } finally {
        wasm.__wbindgen_export4(deferred0_0, deferred0_1, 1);
      }
    },
    __wbg_get_326e41e095fb2575: function() {
      return handleError(function(arg0, arg1) {
        const ret = Reflect.get(getObject(arg0), getObject(arg1));
        return addHeapObject(ret);
      }, arguments);
    },
    __wbg_get_a8ee5c45dabc1b3b: function(arg0, arg1) {
      const ret = getObject(arg0)[arg1 >>> 0];
      return addHeapObject(ret);
    },
    __wbg_get_unchecked_329cfe50afab7352: function(arg0, arg1) {
      const ret = getObject(arg0)[arg1 >>> 0];
      return addHeapObject(ret);
    },
    __wbg_get_with_ref_key_6412cf3094599694: function(arg0, arg1) {
      const ret = getObject(arg0)[getObject(arg1)];
      return addHeapObject(ret);
    },
    __wbg_instanceof_ArrayBuffer_101e2bf31071a9f6: function(arg0) {
      let result;
      try {
        result = getObject(arg0) instanceof ArrayBuffer;
      } catch (_) {
        result = false;
      }
      const ret = result;
      return ret;
    },
    __wbg_instanceof_Uint8Array_740438561a5b956d: function(arg0) {
      let result;
      try {
        result = getObject(arg0) instanceof Uint8Array;
      } catch (_) {
        result = false;
      }
      const ret = result;
      return ret;
    },
    __wbg_isArray_33b91feb269ff46e: function(arg0) {
      const ret = Array.isArray(getObject(arg0));
      return ret;
    },
    __wbg_isSafeInteger_ecd6a7f9c3e053cd: function(arg0) {
      const ret = Number.isSafeInteger(getObject(arg0));
      return ret;
    },
    __wbg_iterator_d8f549ec8fb061b1: function() {
      const ret = Symbol.iterator;
      return addHeapObject(ret);
    },
    __wbg_length_b3416cf66a5452c8: function(arg0) {
      const ret = getObject(arg0).length;
      return ret;
    },
    __wbg_length_ea16607d7b61445b: function(arg0) {
      const ret = getObject(arg0).length;
      return ret;
    },
    __wbg_new_227d7c05414eb861: function() {
      const ret = new Error();
      return addHeapObject(ret);
    },
    __wbg_new_49d5571bd3f0c4d4: function() {
      const ret = /* @__PURE__ */ new Map();
      return addHeapObject(ret);
    },
    __wbg_new_5f486cdf45a04d78: function(arg0) {
      const ret = new Uint8Array(getObject(arg0));
      return addHeapObject(ret);
    },
    __wbg_new_a70fbab9066b301f: function() {
      const ret = new Array();
      return addHeapObject(ret);
    },
    __wbg_new_ab79df5bd7c26067: function() {
      const ret = new Object();
      return addHeapObject(ret);
    },
    __wbg_next_11b99ee6237339e3: function() {
      return handleError(function(arg0) {
        const ret = getObject(arg0).next();
        return addHeapObject(ret);
      }, arguments);
    },
    __wbg_next_e01a967809d1aa68: function(arg0) {
      const ret = getObject(arg0).next;
      return addHeapObject(ret);
    },
    __wbg_prototypesetcall_d62e5099504357e6: function(arg0, arg1, arg2) {
      Uint8Array.prototype.set.call(getArrayU8FromWasm0(arg0, arg1), getObject(arg2));
    },
    __wbg_set_282384002438957f: function(arg0, arg1, arg2) {
      getObject(arg0)[arg1 >>> 0] = takeObject(arg2);
    },
    __wbg_set_6be42768c690e380: function(arg0, arg1, arg2) {
      getObject(arg0)[takeObject(arg1)] = takeObject(arg2);
    },
    __wbg_set_bf7251625df30a02: function(arg0, arg1, arg2) {
      const ret = getObject(arg0).set(getObject(arg1), getObject(arg2));
      return addHeapObject(ret);
    },
    __wbg_stack_3b0d974bbf31e44f: function(arg0, arg1) {
      const ret = getObject(arg1).stack;
      const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);
      const len1 = WASM_VECTOR_LEN;
      getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
      getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
    },
    __wbg_value_21fc78aab0322612: function(arg0) {
      const ret = getObject(arg0).value;
      return addHeapObject(ret);
    },
    __wbindgen_cast_0000000000000001: function(arg0) {
      const ret = arg0;
      return addHeapObject(ret);
    },
    __wbindgen_cast_0000000000000002: function(arg0) {
      const ret = arg0;
      return addHeapObject(ret);
    },
    __wbindgen_cast_0000000000000003: function(arg0, arg1) {
      const ret = getStringFromWasm0(arg0, arg1);
      return addHeapObject(ret);
    },
    __wbindgen_cast_0000000000000004: function(arg0) {
      const ret = BigInt.asUintN(64, arg0);
      return addHeapObject(ret);
    },
    __wbindgen_object_clone_ref: function(arg0) {
      const ret = getObject(arg0);
      return addHeapObject(ret);
    },
    __wbindgen_object_drop_ref: function(arg0) {
      takeObject(arg0);
    }
  };
  return {
    __proto__: null,
    "./wasm_core_bg.js": import0
  };
}
var TerminologyEngineFinalization = typeof FinalizationRegistry === "undefined" ? { register: () => {
}, unregister: () => {
} } : new FinalizationRegistry((ptr) => wasm.__wbg_terminologyengine_free(ptr >>> 0, 1));
var TranslationMemoryEngineFinalization = typeof FinalizationRegistry === "undefined" ? { register: () => {
}, unregister: () => {
} } : new FinalizationRegistry((ptr) => wasm.__wbg_translationmemoryengine_free(ptr >>> 0, 1));
var WasmVirtualScrollStateFinalization = typeof FinalizationRegistry === "undefined" ? { register: () => {
}, unregister: () => {
} } : new FinalizationRegistry((ptr) => wasm.__wbg_wasmvirtualscrollstate_free(ptr >>> 0, 1));
function addHeapObject(obj) {
  if (heap_next === heap.length) heap.push(heap.length + 1);
  const idx = heap_next;
  heap_next = heap[idx];
  heap[idx] = obj;
  return idx;
}
function debugString(val) {
  const type = typeof val;
  if (type == "number" || type == "boolean" || val == null) {
    return `${val}`;
  }
  if (type == "string") {
    return `"${val}"`;
  }
  if (type == "symbol") {
    const description = val.description;
    if (description == null) {
      return "Symbol";
    } else {
      return `Symbol(${description})`;
    }
  }
  if (type == "function") {
    const name = val.name;
    if (typeof name == "string" && name.length > 0) {
      return `Function(${name})`;
    } else {
      return "Function";
    }
  }
  if (Array.isArray(val)) {
    const length = val.length;
    let debug = "[";
    if (length > 0) {
      debug += debugString(val[0]);
    }
    for (let i = 1; i < length; i++) {
      debug += ", " + debugString(val[i]);
    }
    debug += "]";
    return debug;
  }
  const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val));
  let className;
  if (builtInMatches && builtInMatches.length > 1) {
    className = builtInMatches[1];
  } else {
    return toString.call(val);
  }
  if (className == "Object") {
    try {
      return "Object(" + JSON.stringify(val) + ")";
    } catch (_) {
      return "Object";
    }
  }
  if (val instanceof Error) {
    return `${val.name}: ${val.message}
${val.stack}`;
  }
  return className;
}
function dropObject(idx) {
  if (idx < 1028) return;
  heap[idx] = heap_next;
  heap_next = idx;
}
function getArrayU8FromWasm0(ptr, len) {
  ptr = ptr >>> 0;
  return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);
}
var cachedDataViewMemory0 = null;
function getDataViewMemory0() {
  if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || cachedDataViewMemory0.buffer.detached === void 0 && cachedDataViewMemory0.buffer !== wasm.memory.buffer) {
    cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
  }
  return cachedDataViewMemory0;
}
var cachedFloat32ArrayMemory0 = null;
var cachedFloat64ArrayMemory0 = null;
function getFloat64ArrayMemory0() {
  if (cachedFloat64ArrayMemory0 === null || cachedFloat64ArrayMemory0.byteLength === 0) {
    cachedFloat64ArrayMemory0 = new Float64Array(wasm.memory.buffer);
  }
  return cachedFloat64ArrayMemory0;
}
function getStringFromWasm0(ptr, len) {
  ptr = ptr >>> 0;
  return decodeText(ptr, len);
}
var cachedUint32ArrayMemory0 = null;
var cachedUint8ArrayMemory0 = null;
function getUint8ArrayMemory0() {
  if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
    cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
  }
  return cachedUint8ArrayMemory0;
}
function getObject(idx) {
  return heap[idx];
}
function handleError(f, args) {
  try {
    return f.apply(this, args);
  } catch (e) {
    wasm.__wbindgen_export3(addHeapObject(e));
  }
}
var heap = new Array(1024).fill(void 0);
heap.push(void 0, null, true, false);
var heap_next = heap.length;
function isLikeNone(x) {
  return x === void 0 || x === null;
}
function passArrayF64ToWasm0(arg, malloc) {
  const ptr = malloc(arg.length * 8, 8) >>> 0;
  getFloat64ArrayMemory0().set(arg, ptr / 8);
  WASM_VECTOR_LEN = arg.length;
  return ptr;
}
function passStringToWasm0(arg, malloc, realloc) {
  if (realloc === void 0) {
    const buf = cachedTextEncoder.encode(arg);
    const ptr2 = malloc(buf.length, 1) >>> 0;
    getUint8ArrayMemory0().subarray(ptr2, ptr2 + buf.length).set(buf);
    WASM_VECTOR_LEN = buf.length;
    return ptr2;
  }
  let len = arg.length;
  let ptr = malloc(len, 1) >>> 0;
  const mem = getUint8ArrayMemory0();
  let offset = 0;
  for (; offset < len; offset++) {
    const code = arg.charCodeAt(offset);
    if (code > 127) break;
    mem[ptr + offset] = code;
  }
  if (offset !== len) {
    if (offset !== 0) {
      arg = arg.slice(offset);
    }
    ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
    const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
    const ret = cachedTextEncoder.encodeInto(arg, view);
    offset += ret.written;
    ptr = realloc(ptr, len, offset, 1) >>> 0;
  }
  WASM_VECTOR_LEN = offset;
  return ptr;
}
function takeObject(idx) {
  const ret = getObject(idx);
  dropObject(idx);
  return ret;
}
var cachedTextDecoder = new TextDecoder("utf-8", { ignoreBOM: true, fatal: true });
cachedTextDecoder.decode();
var MAX_SAFARI_DECODE_BYTES = 2146435072;
var numBytesDecoded = 0;
function decodeText(ptr, len) {
  numBytesDecoded += len;
  if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {
    cachedTextDecoder = new TextDecoder("utf-8", { ignoreBOM: true, fatal: true });
    cachedTextDecoder.decode();
    numBytesDecoded = len;
  }
  return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
}
var cachedTextEncoder = new TextEncoder();
if (!("encodeInto" in cachedTextEncoder)) {
  cachedTextEncoder.encodeInto = function(arg, view) {
    const buf = cachedTextEncoder.encode(arg);
    view.set(buf);
    return {
      read: arg.length,
      written: buf.length
    };
  };
}
var WASM_VECTOR_LEN = 0;
var wasmModule;
var wasm;
function __wbg_finalize_init(instance, module) {
  wasm = instance.exports;
  wasmModule = module;
  cachedDataViewMemory0 = null;
  cachedFloat32ArrayMemory0 = null;
  cachedFloat64ArrayMemory0 = null;
  cachedUint32ArrayMemory0 = null;
  cachedUint8ArrayMemory0 = null;
  wasm.__wbindgen_start();
  return wasm;
}
async function __wbg_load(module, imports) {
  if (typeof Response === "function" && module instanceof Response) {
    if (typeof WebAssembly.instantiateStreaming === "function") {
      try {
        return await WebAssembly.instantiateStreaming(module, imports);
      } catch (e) {
        const validResponse = module.ok && expectedResponseType(module.type);
        if (validResponse && module.headers.get("Content-Type") !== "application/wasm") {
          console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
        } else {
          throw e;
        }
      }
    }
    const bytes = await module.arrayBuffer();
    return await WebAssembly.instantiate(bytes, imports);
  } else {
    const instance = await WebAssembly.instantiate(module, imports);
    if (instance instanceof WebAssembly.Instance) {
      return { instance, module };
    } else {
      return instance;
    }
  }
  function expectedResponseType(type) {
    switch (type) {
      case "basic":
      case "cors":
      case "default":
        return true;
    }
    return false;
  }
}
async function __wbg_init(module_or_path) {
  if (wasm !== void 0) return wasm;
  if (module_or_path !== void 0) {
    if (Object.getPrototypeOf(module_or_path) === Object.prototype) {
      ({ module_or_path } = module_or_path);
    } else {
      console.warn("using deprecated parameters for the initialization function; pass a single object instead");
    }
  }
  if (module_or_path === void 0) {
    module_or_path = new URL("wasm_core_bg.wasm", import.meta.url);
  }
  const imports = __wbg_get_imports();
  if (typeof module_or_path === "string" || typeof Request === "function" && module_or_path instanceof Request || typeof URL === "function" && module_or_path instanceof URL) {
    module_or_path = fetch(module_or_path);
  }
  const { instance, module } = await __wbg_load(await module_or_path, imports);
  return __wbg_finalize_init(instance, module);
}

// vort/modules/docx.js
var import_jszip = __toESM(require_lib3(), 1);
import fs from "fs";

// vort/modules/base.js
var BaseModule = class {
  /**
   * 加载文件，返回文档的内存句柄 (如 JSZip 实例, xlsx 工作簿, 字符串等)
   * @param {string} inputPath 输入文件路径
   * @returns {Promise<any>}
   */
  async load(inputPath) {
    throw new Error("load() must be implemented by subclass");
  }
  /**
   * 从句柄中提取所有可翻译的纯文本段落数组
   * @param {any} doc 文档句柄
   * @returns {Promise<string[]>} 纯文本数组
   */
  async extractText(doc) {
    throw new Error("extractText() must be implemented by subclass");
  }
  /**
   * 将翻译完成的段落数组写回到文档句柄中，保留原始版式
   * @param {any} doc 文档句柄
   * @param {string[]} translatedSegments 翻译完毕的文本段落数组
   * @returns {Promise<any>} 修改后的文档句柄
   */
  async writeText(doc, translatedSegments) {
    throw new Error("writeText() must be implemented by subclass");
  }
  /**
   * 将文档句柄序列化并持久化保存至磁盘
   * @param {any} doc 文档句柄
   * @param {string} outputPath 输出目标文件路径
   * @returns {Promise<boolean>} 是否成功保存
   */
  async save(doc, outputPath) {
    throw new Error("save() must be implemented by subclass");
  }
};

// vort/modules/docx.js
var DocxParagraphParser = class {
  // 解析 w:p 节点的内容，生成带占位符的句子，并保存 w:t 的引用
  static compileParagraph(pContent) {
    const tRegex = /(<w:t\b(?![^>]*\/>)[^>]*>)([\s\S]*?)(<\/w:t>)/g;
    let match;
    const textNodes = [];
    let compiledText = "";
    let lastIdx = 0;
    let tCounter = 0;
    while ((match = tRegex.exec(pContent)) !== null) {
      const prefix = pContent.substring(lastIdx, match.index);
      compiledText += prefix;
      const tTagStart = match[1];
      const textVal = match[2];
      const tTagEnd = match[3];
      const precedingXml = pContent.substring(Math.max(0, match.index - 300), match.index);
      const isStyled = precedingXml.includes("<w:b/>") || precedingXml.includes("<w:b ") || precedingXml.includes("<w:i/>") || precedingXml.includes("<w:i ") || precedingXml.includes("<w:u ") || precedingXml.includes("<w:color") || precedingXml.includes("<w:rStyle");
      if (isStyled && textVal.trim().length > 0) {
        compiledText += `{${tCounter}:${textVal}}`;
        textNodes.push({ id: tCounter, text: textVal, index: tCounter, original: match[0], tagStart: tTagStart, tagEnd: tTagEnd });
        tCounter++;
      } else {
        compiledText += textVal;
        textNodes.push({ id: -1, text: textVal, index: -1, original: match[0], tagStart: tTagStart, tagEnd: tTagEnd });
      }
      lastIdx = tRegex.lastIndex;
    }
    compiledText += pContent.substring(lastIdx);
    const cleanText = compiledText.replace(/<[^>]+>/g, "").trim();
    return { cleanText, textNodes };
  }
  // 根据大模型返回的带占位符的译文，重塑并还原段落 w:p 的 XML 内容
  static reconstructParagraph(translatedText, textNodes, originalPContent, targetLang = "Chinese") {
    const isSpaceSeparated = !/^(zh|cn|chi|ja|jp)/i.test(targetLang);
    let normalizedText = translatedText;
    if (isSpaceSeparated) {
      normalizedText = normalizedText.replace(/([^\s(\[{"])\{/g, "$1 {");
      normalizedText = normalizedText.replace(/\}([^\s)\]}.,;:!?"])/g, "} $1");
      normalizedText = normalizedText.replace(/:([a-zA-Z0-9])/g, ": $1");
      normalizedText = normalizedText.replace(/,([a-zA-Z0-9])/g, ", $1");
      normalizedText = normalizedText.replace(/([a-zA-Z0-9])\(/g, "$1 (");
    }
    const regex = /\{(\d+):([^\}]+)\}/g;
    const parts = [];
    let lastIdx = 0;
    let match;
    while ((match = regex.exec(normalizedText)) !== null) {
      const plainText = normalizedText.substring(lastIdx, match.index);
      const id = parseInt(match[1]);
      const tagContent = match[2];
      parts.push({ type: "plain", text: plainText });
      parts.push({ type: "tag", id, text: tagContent });
      lastIdx = regex.lastIndex;
    }
    parts.push({ type: "plain", text: normalizedText.substring(lastIdx) });
    const plainNodes = textNodes.filter((n) => n.id === -1);
    parts.forEach((part) => {
      if (part.type === "tag") {
        const node = textNodes.find((n) => n.id === part.id);
        if (node) {
          node.translatedText = part.text;
        }
      }
    });
    let plainNodeIdx = 0;
    parts.forEach((part) => {
      if (part.type === "plain") {
        if (part.text.length === 0) return;
        if (plainNodeIdx < plainNodes.length) {
          plainNodes[plainNodeIdx].translatedText = part.text;
          plainNodeIdx++;
        } else if (plainNodes.length > 0) {
          plainNodes[plainNodes.length - 1].translatedText += part.text;
        }
      }
    });
    textNodes.forEach((node) => {
      if (node.translatedText === void 0) {
        node.translatedText = "";
      }
    });
    let idx = 0;
    const tRegex = /(<w:t\b(?![^>]*\/>)[^>]*>)([\s\S]*?)(<\/w:t>)/g;
    const newPContent = originalPContent.replace(tRegex, (match2, p1, p2, p3) => {
      const node = textNodes[idx++];
      const replacement = node ? node.translatedText : p2;
      return p1 + replacement + p3;
    });
    return newPContent;
  }
};
var DocxModule = class extends BaseModule {
  async load(inputPath) {
    console.log(`\x1B[32m[Built-in: load_docx]\x1B[0m \u6B63\u5728\u52A0\u8F7D Word \u6587\u6863\u5E76\u89E3\u538B: \x1B[34m${inputPath}\x1B[0m`);
    const buffer = fs.readFileSync(inputPath);
    const zip = await import_jszip.default.loadAsync(buffer);
    const files = {};
    const xmlFileNames = [];
    for (const [name, file] of Object.entries(zip.files)) {
      if (!file.dir && (name.startsWith("word/document.xml") || name.startsWith("word/header") || name.startsWith("word/footer") || name.startsWith("word/footnotes.xml") || name.startsWith("word/endnotes.xml"))) {
        files[name] = await file.async("string");
        xmlFileNames.push(name);
      }
    }
    return { zip, files, xmlFileNames, paragraphMappings: [] };
  }
  async extractText(doc) {
    console.log(`\x1B[32m[Built-in: extract_text]\x1B[0m \u6B63\u5728\u5BF9\u6240\u6709 Word \u5B50\u6A21\u5757 (\u6B63\u6587\u3001\u9875\u7709\u3001\u9875\u811A\u3001\u811A\u6CE8\u7B49) \u6267\u884C\u6392\u7248\u6811\u63D0\u53D6...`);
    const segments = [];
    doc.paragraphMappings = [];
    for (const fileName of doc.xmlFileNames) {
      const xml = doc.files[fileName];
      const pRegex = /<w:p\b(?![^>]*\/>)[^>]*>([\s\S]*?)<\/w:p>/g;
      let pMatch;
      let pIndex = 0;
      while ((pMatch = pRegex.exec(xml)) !== null) {
        const fullPXml = pMatch[0];
        const pContent = pMatch[1];
        const { cleanText, textNodes } = DocxParagraphParser.compileParagraph(pContent);
        if (cleanText.length > 0) {
          segments.push(cleanText);
          doc.paragraphMappings.push({
            fileName,
            pIndex,
            originalPXml: fullPXml,
            originalPContent: pContent,
            textNodes,
            segmentIndex: segments.length - 1
          });
        }
        pIndex++;
      }
    }
    console.log(`\x1B[32m[Built-in: extract_text]\x1B[0m \u6210\u529F\u63D0\u53D6 \x1B[33m${segments.length}\x1B[0m \u4E2A\u5E26\u6392\u7248\u4FDD\u62A4\u7684\u53E5\u5B50\u5206\u7247\u3002`);
    return segments;
  }
  async writeText(doc, translatedSegments, targetLang = "Chinese") {
    console.log(`\x1B[32m[Built-in: write_text]\x1B[0m \u6B63\u5728\u5229\u7528\u6392\u7248\u6620\u5C04\u6811\uFF0C\u5C06\u8BD1\u6587\u5199\u56DE\u5BF9\u5E94\u7684 XML \u5B50\u6A21\u5757\u8282\u70B9...`);
    const fileMappings = {};
    for (const mapping of doc.paragraphMappings) {
      if (!fileMappings[mapping.fileName]) {
        fileMappings[mapping.fileName] = [];
      }
      fileMappings[mapping.fileName].push(mapping);
    }
    for (const [fileName, mappings] of Object.entries(fileMappings)) {
      let xml = doc.files[fileName];
      const pRegex = /<w:p\b(?![^>]*\/>)[^>]*>([\s\S]*?)<\/w:p>/g;
      let pMatch;
      const originalPArray = [];
      while ((pMatch = pRegex.exec(xml)) !== null) {
        originalPArray.push({ fullXml: pMatch[0], content: pMatch[1], start: pMatch.index, end: pRegex.lastIndex });
      }
      let newXml = xml;
      for (let i = originalPArray.length - 1; i >= 0; i--) {
        const pItem = originalPArray[i];
        const mapping = mappings.find((m) => m.pIndex === i);
        if (mapping) {
          const translatedText = translatedSegments[mapping.segmentIndex];
          if (translatedText) {
            const newPContent = DocxParagraphParser.reconstructParagraph(
              translatedText,
              mapping.textNodes,
              pItem.content,
              targetLang
            );
            const pTagStart = pItem.fullXml.substring(0, pItem.fullXml.indexOf(pItem.content));
            const newPXml = pTagStart + newPContent + "</w:p>";
            newXml = newXml.substring(0, pItem.start) + newPXml + newXml.substring(pItem.end);
          }
        }
      }
      doc.files[fileName] = newXml;
    }
    return doc;
  }
  async save(doc, outputPath) {
    console.log(`\x1B[32m[Built-in: save_docx]\x1B[0m \u6B63\u5728\u5C06\u6240\u6709\u66F4\u65B0\u540E\u7684\u5B50XML\u91CD\u65B0\u5F52\u6863\u81F3 Word ZIP \u5BB9\u5668: \x1B[34m${outputPath}\x1B[0m`);
    const zip = doc.zip;
    for (const [name, content] of Object.entries(doc.files)) {
      zip.file(name, content);
    }
    const buffer = await zip.generateAsync({ type: "nodebuffer" });
    fs.writeFileSync(outputPath, buffer);
    return true;
  }
};

// vort/modules/txt.js
import fs2 from "fs";
var TxtModule = class extends BaseModule {
  async load(inputPath) {
    console.log(`\x1B[32m[Built-in: load_txt]\x1B[0m \u6B63\u5728\u8BFB\u53D6\u6587\u672C\u6587\u4EF6: \x1B[34m${inputPath}\x1B[0m`);
    const content = fs2.readFileSync(inputPath, "utf-8");
    const lines = content.split(/\r?\n/);
    return { lines, content };
  }
  async *extractText(doc) {
    console.log(`\x1B[32m[Built-in: extract_text]\x1B[0m \u6B63\u5728\u4F7F\u7528\u5F02\u6B65\u751F\u6210\u5668\u6D41\u5F0F\u63D0\u53D6\u975E\u7A7A\u6587\u672C\u884C...`);
    doc.nonEmptyIndices = [];
    for (let idx = 0; idx < doc.lines.length; idx++) {
      const line = doc.lines[idx];
      if (line.trim().length > 0) {
        doc.nonEmptyIndices.push(idx);
        yield line;
      }
    }
  }
  async writeText(doc, translatedStream) {
    console.log(`\x1B[32m[Built-in: write_text]\x1B[0m \u6B63\u5728\u8FED\u4EE3\u6D88\u8D39\u8BD1\u6587\u6D41\u5E76\u56DE\u586B...`);
    const newLines = [...doc.lines];
    let segIdx = 0;
    for await (const val of translatedStream) {
      const lineIdx = doc.nonEmptyIndices[segIdx++];
      if (lineIdx !== void 0 && val !== void 0) {
        newLines[lineIdx] = val;
      }
    }
    doc.translatedLines = newLines;
    return doc;
  }
  async save(doc, outputPath) {
    console.log(`\x1B[32m[Built-in: save_txt]\x1B[0m \u6B63\u5728\u4FDD\u5B58\u8BD1\u6587\u6587\u4EF6: \x1B[34m${outputPath}\x1B[0m`);
    const outputContent = doc.translatedLines.join("\n");
    fs2.writeFileSync(outputPath, outputContent, "utf-8");
    return true;
  }
};

// vort/modules/excel.js
var import_xlsx = __toESM(require_xlsx(), 1);
var ExcelModule = class extends BaseModule {
  async load(inputPath) {
    console.log(`\x1B[32m[Built-in: load_excel]\x1B[0m \u6B63\u5728\u52A0\u8F7D Excel \u5DE5\u4F5C\u7C3F: \x1B[34m${inputPath}\x1B[0m`);
    const workbook = import_xlsx.default.readFile(inputPath);
    return workbook;
  }
  async extractText(doc) {
    console.log(`\x1B[32m[Built-in: extract_text]\x1B[0m \u6B63\u5728\u626B\u63CF Excel \u5DE5\u4F5C\u8868\u63D0\u53D6\u6587\u5B57\u5355\u5143\u683C...`);
    const segments = [];
    doc.cellRefs = [];
    doc.SheetNames.forEach((sheetName) => {
      const ws = doc.Sheets[sheetName];
      if (!ws) return;
      for (const cellKey in ws) {
        if (cellKey.startsWith("!")) continue;
        const cell = ws[cellKey];
        if (cell && cell.t === "s" && typeof cell.v === "string" && cell.v.trim().length > 0) {
          segments.push(cell.v);
          doc.cellRefs.push({ sheetName, cellKey });
        }
      }
    });
    console.log(`\x1B[32m[Built-in: extract_text]\x1B[0m Excel \u6210\u529F\u63D0\u53D6 \x1B[33m${segments.length}\x1B[0m \u4E2A\u975E\u7A7A\u6587\u672C\u5355\u5143\u683C\u3002`);
    return segments;
  }
  async writeText(doc, translatedSegments) {
    console.log(`\x1B[32m[Built-in: write_text]\x1B[0m \u6B63\u5728\u56DE\u586B Excel \u5355\u5143\u683C\u8BD1\u6587...`);
    doc.cellRefs.forEach((ref, idx) => {
      const ws = doc.Sheets[ref.sheetName];
      const val = translatedSegments[idx];
      if (ws && val !== void 0) {
        ws[ref.cellKey].v = val;
        if (ws[ref.cellKey].w !== void 0) {
          ws[ref.cellKey].w = val;
        }
      }
    });
    return doc;
  }
  async save(doc, outputPath) {
    console.log(`\x1B[32m[Built-in: save_excel]\x1B[0m \u6B63\u5728\u5C06 Excel \u5199\u5165\u76EE\u6807\u78C1\u76D8: \x1B[34m${outputPath}\x1B[0m`);
    import_xlsx.default.writeFile(doc, outputPath);
    return true;
  }
};

// vort/modules/pptx.js
var import_jszip2 = __toESM(require_lib3(), 1);
import fs3 from "fs";
var PptxParagraphParser = class {
  static compileParagraph(pContent) {
    const tRegex = /(<a:t\b(?![^>]*\/>)[^>]*>)([\s\S]*?)(<\/a:t>)/g;
    let match;
    const textNodes = [];
    let compiledText = "";
    let lastIdx = 0;
    let tCounter = 0;
    while ((match = tRegex.exec(pContent)) !== null) {
      const prefix = pContent.substring(lastIdx, match.index);
      compiledText += prefix;
      const tTagStart = match[1];
      const textVal = match[2];
      const tTagEnd = match[3];
      const precedingXml = pContent.substring(Math.max(0, match.index - 300), match.index);
      const isStyled = precedingXml.includes('b="1"') || precedingXml.includes('i="1"') || precedingXml.includes('u="') || precedingXml.includes("<a:solidFill>") || precedingXml.includes('sz="');
      if (isStyled && textVal.trim().length > 0) {
        compiledText += `{${tCounter}:${textVal}}`;
        textNodes.push({ id: tCounter, text: textVal, index: tCounter, original: match[0], tagStart: tTagStart, tagEnd: tTagEnd });
        tCounter++;
      } else {
        compiledText += textVal;
        textNodes.push({ id: -1, text: textVal, index: -1, original: match[0], tagStart: tTagStart, tagEnd: tTagEnd });
      }
      lastIdx = tRegex.lastIndex;
    }
    compiledText += pContent.substring(lastIdx);
    const cleanText = compiledText.replace(/<[^>]+>/g, "").trim();
    return { cleanText, textNodes };
  }
  static reconstructParagraph(translatedText, textNodes, originalPContent, targetLang = "Chinese") {
    const isSpaceSeparated = !/^(zh|cn|chi|ja|jp)/i.test(targetLang);
    let normalizedText = translatedText;
    if (isSpaceSeparated) {
      normalizedText = normalizedText.replace(/([^\s(\[{"])\{/g, "$1 {");
      normalizedText = normalizedText.replace(/\}([^\s)\]}.,;:!?"])/g, "} $1");
      normalizedText = normalizedText.replace(/:([a-zA-Z0-9])/g, ": $1");
      normalizedText = normalizedText.replace(/,([a-zA-Z0-9])/g, ", $1");
      normalizedText = normalizedText.replace(/([a-zA-Z0-9])\(/g, "$1 (");
    }
    const regex = /\{(\d+):([^\}]+)\}/g;
    const parts = [];
    let lastIdx = 0;
    let match;
    while ((match = regex.exec(normalizedText)) !== null) {
      const plainText = normalizedText.substring(lastIdx, match.index);
      const id = parseInt(match[1]);
      const tagContent = match[2];
      parts.push({ type: "plain", text: plainText });
      parts.push({ type: "tag", id, text: tagContent });
      lastIdx = regex.lastIndex;
    }
    parts.push({ type: "plain", text: normalizedText.substring(lastIdx) });
    const plainNodes = textNodes.filter((n) => n.id === -1);
    parts.forEach((part) => {
      if (part.type === "tag") {
        const node = textNodes.find((n) => n.id === part.id);
        if (node) {
          node.translatedText = part.text;
        }
      }
    });
    let plainNodeIdx = 0;
    parts.forEach((part) => {
      if (part.type === "plain") {
        if (part.text.length === 0) return;
        if (plainNodeIdx < plainNodes.length) {
          plainNodes[plainNodeIdx].translatedText = part.text;
          plainNodeIdx++;
        } else if (plainNodes.length > 0) {
          plainNodes[plainNodes.length - 1].translatedText += part.text;
        }
      }
    });
    textNodes.forEach((node) => {
      if (node.translatedText === void 0) {
        node.translatedText = "";
      }
    });
    let idx = 0;
    const tRegex = /(<a:t\b(?![^>]*\/>)[^>]*>)([\s\S]*?)(<\/a:t>)/g;
    const newPContent = originalPContent.replace(tRegex, (match2, p1, p2, p3) => {
      const node = textNodes[idx++];
      const replacement = node ? node.translatedText : p2;
      return p1 + replacement + p3;
    });
    return newPContent;
  }
};
var PptxModule = class extends BaseModule {
  async load(inputPath) {
    console.log(`\x1B[32m[Built-in: load_pptx]\x1B[0m \u6B63\u5728\u52A0\u8F7D PPTX \u5E7B\u706F\u7247\u5E76\u89E3\u538B: \x1B[34m${inputPath}\x1B[0m`);
    const buffer = fs3.readFileSync(inputPath);
    const zip = await import_jszip2.default.loadAsync(buffer);
    const files = {};
    const xmlFileNames = [];
    for (const [name, file] of Object.entries(zip.files)) {
      if (!file.dir && (name.startsWith("ppt/slides/slide") && name.endsWith(".xml"))) {
        files[name] = await file.async("string");
        xmlFileNames.push(name);
      }
    }
    return { zip, files, xmlFileNames, paragraphMappings: [] };
  }
  async extractText(doc) {
    console.log(`\x1B[32m[Built-in: extract_text]\x1B[0m \u6B63\u5728\u5BF9 PPTX \u6240\u6709\u5E7B\u706F\u7247\u6267\u884C\u6392\u7248\u6811\u63D0\u53D6...`);
    const segments = [];
    doc.paragraphMappings = [];
    for (const fileName of doc.xmlFileNames) {
      const xml = doc.files[fileName];
      const pRegex = /<a:p\b(?![^>]*\/>)[^>]*>([\s\S]*?)<\/a:p>/g;
      let pMatch;
      let pIndex = 0;
      while ((pMatch = pRegex.exec(xml)) !== null) {
        const fullPXml = pMatch[0];
        const pContent = pMatch[1];
        const { cleanText, textNodes } = PptxParagraphParser.compileParagraph(pContent);
        if (cleanText.length > 0) {
          segments.push(cleanText);
          doc.paragraphMappings.push({
            fileName,
            pIndex,
            originalPXml: fullPXml,
            originalPContent: pContent,
            textNodes,
            segmentIndex: segments.length - 1
          });
        }
        pIndex++;
      }
    }
    console.log(`\x1B[32m[Built-in: extract_text]\x1B[0m \u6210\u529F\u4ECE\u5E7B\u706F\u7247\u4E2D\u63D0\u53D6 \x1B[33m${segments.length}\x1B[0m \u4E2A\u5E26\u683C\u5F0F\u4FDD\u62A4\u7684\u6587\u672C\u5757\u3002`);
    return segments;
  }
  async writeText(doc, translatedSegments, targetLang = "Chinese") {
    console.log(`\x1B[32m[Built-in: write_text]\x1B[0m \u6B63\u5728\u56DE\u5199 PPTX \u8BD1\u6587\u5E76\u8FD8\u539F\u6BB5\u843D\u6392\u7248...`);
    const fileMappings = {};
    for (const mapping of doc.paragraphMappings) {
      if (!fileMappings[mapping.fileName]) {
        fileMappings[mapping.fileName] = [];
      }
      fileMappings[mapping.fileName].push(mapping);
    }
    for (const [fileName, mappings] of Object.entries(fileMappings)) {
      let xml = doc.files[fileName];
      const pRegex = /<a:p\b(?![^>]*\/>)[^>]*>([\s\S]*?)<\/a:p>/g;
      let pMatch;
      const originalPArray = [];
      while ((pMatch = pRegex.exec(xml)) !== null) {
        originalPArray.push({ fullXml: pMatch[0], content: pMatch[1], start: pMatch.index, end: pRegex.lastIndex });
      }
      let newXml = xml;
      for (let i = originalPArray.length - 1; i >= 0; i--) {
        const pItem = originalPArray[i];
        const mapping = mappings.find((m) => m.pIndex === i);
        if (mapping) {
          const translatedText = translatedSegments[mapping.segmentIndex];
          if (translatedText) {
            const newPContent = PptxParagraphParser.reconstructParagraph(
              translatedText,
              mapping.textNodes,
              pItem.content,
              targetLang
            );
            const pTagStart = pItem.fullXml.substring(0, pItem.fullXml.indexOf(pItem.content));
            const newPXml = pTagStart + newPContent + "</a:p>";
            newXml = newXml.substring(0, pItem.start) + newPXml + newXml.substring(pItem.end);
          }
        }
      }
      doc.files[fileName] = newXml;
    }
    return doc;
  }
  async save(doc, outputPath) {
    console.log(`\x1B[32m[Built-in: save_pptx]\x1B[0m \u6B63\u5728\u91CD\u65B0\u5F52\u6863\u81F3 PPTX ZIP \u5BB9\u5668: \x1B[34m${outputPath}\x1B[0m`);
    const zip = doc.zip;
    for (const [name, content] of Object.entries(doc.files)) {
      zip.file(name, content);
    }
    const buffer = await zip.generateAsync({ type: "nodebuffer" });
    fs3.writeFileSync(outputPath, buffer);
    return true;
  }
};

// vort/modules/srt.js
import fs4 from "fs";
var SrtModule = class extends BaseModule {
  async load(inputPath) {
    console.log(`\x1B[32m[Built-in: load_srt]\x1B[0m \u6B63\u5728\u52A0\u8F7D SRT \u5B57\u5E55\u6587\u4EF6: \x1B[34m${inputPath}\x1B[0m`);
    const content = fs4.readFileSync(inputPath, "utf-8");
    const blocks = [];
    const rawBlocks = content.trim().split(/\r?\n\r?\n/);
    rawBlocks.forEach((rawBlock) => {
      const lines = rawBlock.split(/\r?\n/);
      if (lines.length >= 2) {
        const indexLine = lines[0].trim();
        const timeLine = lines[1].trim();
        const textLines = lines.slice(2);
        blocks.push({ indexLine, timeLine, textLines });
      }
    });
    return { blocks };
  }
  async extractText(doc) {
    const segments = [];
    doc.blocks.forEach((block) => {
      const text = block.textLines.join("\n").trim();
      if (text.length > 0) {
        segments.push(text);
      }
    });
    console.log(`\x1B[32m[Built-in: extract_text]\x1B[0m SRT \u6210\u529F\u63D0\u53D6 \x1B[33m${segments.length}\x1B[0m \u4E2A\u5B57\u5E55\u65F6\u95F4\u7247\u6BB5\u3002`);
    return segments;
  }
  async writeText(doc, translatedSegments, targetLang = "Chinese", gateway = null) {
    console.log(`\x1B[32m[Built-in: write_text]\x1B[0m \u6B63\u5728\u5C06\u8BD1\u6587\u56DE\u586B\u81F3 SRT \u5B57\u5E55\u65F6\u95F4\u8F74\u4E2D\u5E76\u8FDB\u884C CPS \u6821\u9A8C...`);
    const getSrtDuration = (timeLine) => {
      const match = /(\d{2}):(\d{2}):(\d{2}),(\d{3})\s*-->\s*(\d{2}):(\d{2}):(\d{2}),(\d{3})/.exec(timeLine);
      if (!match) return 1;
      const startSec = parseInt(match[1]) * 3600 + parseInt(match[2]) * 60 + parseInt(match[3]) + parseInt(match[4]) / 1e3;
      const endSec = parseInt(match[5]) * 3600 + parseInt(match[6]) * 60 + parseInt(match[7]) + parseInt(match[8]) / 1e3;
      return Math.max(0.1, endSec - startSec);
    };
    let segmentIdx = 0;
    const isWestern = !/^(zh|cn|chi|ja|jp)/i.test(targetLang);
    const limit = isWestern ? 16 : 8;
    const repairPromises = [];
    const blockMappings = [];
    doc.blocks.forEach((block) => {
      const text = block.textLines.join("\n").trim();
      if (text.length > 0) {
        const val = translatedSegments[segmentIdx++];
        if (val !== void 0) {
          const duration = getSrtDuration(block.timeLine);
          const cps = val.length / duration;
          if (cps > limit && gateway && typeof gateway.repairSubtitleCps === "function") {
            const promiseIdx = repairPromises.length;
            repairPromises.push(
              gateway.repairSubtitleCps(
                "deepseek",
                "Translate",
                { source: text, failed: val, cps },
                duration,
                limit,
                targetLang
              )
            );
            blockMappings.push({ block, promiseIdx, text });
          } else {
            block.translatedTextLines = val.split("\n");
          }
        } else {
          block.translatedTextLines = block.textLines;
        }
      } else {
        block.translatedTextLines = block.textLines;
      }
    });
    if (repairPromises.length > 0) {
      const repairedResults = await Promise.all(repairPromises);
      blockMappings.forEach(({ block, promiseIdx, text }) => {
        const repairedText = repairedResults[promiseIdx];
        block.translatedTextLines = repairedText.split("\n");
        if (gateway) {
          const cacheKey = `${text}|||${targetLang}`;
          gateway.translationMemory.set(cacheKey, repairedText);
          gateway.semanticTM.addRecord(text, repairedText, targetLang);
        }
      });
    }
    return doc;
  }
  async save(doc, outputPath) {
    console.log(`\x1B[32m[Built-in: save_srt]\x1B[0m \u6B63\u5728\u5C06\u7F16\u8BD1\u540E\u7684 SRT \u5199\u5165\u78C1\u76D8: \x1B[34m${outputPath}\x1B[0m`);
    const blockStrings = doc.blocks.map((block) => {
      return `${block.indexLine}
${block.timeLine}
${block.translatedTextLines.join("\n")}`;
    });
    fs4.writeFileSync(outputPath, blockStrings.join("\n\n") + "\n", "utf-8");
    return true;
  }
};

// vort/modules/ass.js
import fs5 from "fs";
var AssTextParser = class {
  // 提取 ASS 字幕中的特效标签，如 {\pos(192,200)} 等，用 {id} 替换保护
  static compileAssText(text) {
    const tagRegex = /\{[^\}]+\}/g;
    let match;
    const tags = [];
    let compiledText = "";
    let lastIdx = 0;
    let tCounter = 0;
    while ((match = tagRegex.exec(text)) !== null) {
      compiledText += text.substring(lastIdx, match.index) + `{${tCounter}}`;
      tags.push({ id: tCounter, original: match[0] });
      tCounter++;
      lastIdx = tagRegex.lastIndex;
    }
    compiledText += text.substring(lastIdx);
    return { cleanText: compiledText, tags };
  }
  // 译文还原特效标签
  static reconstructAssText(translatedText, tags) {
    let result = translatedText;
    tags.forEach((tag) => {
      result = result.replace(`{${tag.id}}`, tag.original);
    });
    return result;
  }
};
var AssModule = class extends BaseModule {
  async load(inputPath) {
    console.log(`\x1B[32m[Built-in: load_ass]\x1B[0m \u6B63\u5728\u52A0\u8F7D ASS \u5B57\u5E55\u6587\u4EF6: \x1B[34m${inputPath}\x1B[0m`);
    const content = fs5.readFileSync(inputPath, "utf-8");
    const lines = content.split(/\r?\n/);
    return { lines };
  }
  async extractText(doc) {
    const segments = [];
    doc.dialogueMappings = [];
    doc.lines.forEach((line, lineIdx) => {
      if (line.startsWith("Dialogue:")) {
        let commaCount = 0;
        let commaIdx = -1;
        for (let i = 0; i < line.length; i++) {
          if (line[i] === ",") {
            commaCount++;
            if (commaCount === 9) {
              commaIdx = i;
              break;
            }
          }
        }
        if (commaIdx !== -1) {
          const prefix = line.substring(0, commaIdx + 1);
          const rawText = line.substring(commaIdx + 1);
          const { cleanText, tags } = AssTextParser.compileAssText(rawText);
          if (cleanText.trim().length > 0) {
            segments.push(cleanText);
            doc.dialogueMappings.push({
              lineIdx,
              prefix,
              tags,
              segmentIdx: segments.length - 1
            });
          }
        }
      }
    });
    console.log(`\x1B[32m[Built-in: extract_text]\x1B[0m ASS \u6210\u529F\u63D0\u53D6 \x1B[33m${segments.length}\x1B[0m \u6761\u7279\u6548\u5B57\u5E55\u8FDB\u884C\u7FFB\u8BD1\u3002`);
    return segments;
  }
  async writeText(doc, translatedSegments) {
    console.log(`\x1B[32m[Built-in: write_text]\x1B[0m \u6B63\u5728\u5C06\u8BD1\u6587\u56DE\u586B\u81F3 ASS \u5E76\u8FD8\u539F\u7279\u6548\u6807\u8BB0...`);
    doc.dialogueMappings.forEach((mapping) => {
      const val = translatedSegments[mapping.segmentIdx];
      if (val !== void 0) {
        const reconstructedText = AssTextParser.reconstructAssText(val, mapping.tags);
        doc.lines[mapping.lineIdx] = mapping.prefix + reconstructedText;
      }
    });
    return doc;
  }
  async save(doc, outputPath) {
    console.log(`\x1B[32m[Built-in: save_ass]\x1B[0m \u6B63\u5728\u4FDD\u5B58 ASS \u5B57\u5E55\u6587\u4EF6: \x1B[34m${outputPath}\x1B[0m`);
    fs5.writeFileSync(outputPath, doc.lines.join("\n"), "utf-8");
    return true;
  }
};

// vort/modules/html.js
import fs6 from "fs";
var HtmlModule = class extends BaseModule {
  async load(inputPath) {
    console.log(`\x1B[32m[Built-in: load_html]\x1B[0m \u6B63\u5728\u52A0\u8F7D HTML \u6587\u6863: \x1B[34m${inputPath}\x1B[0m`);
    const content = fs6.readFileSync(inputPath, "utf-8");
    const tokens = [];
    let i = 0;
    let inScriptOrStyle = false;
    while (i < content.length) {
      if (content[i] === "<") {
        const j = content.indexOf(">", i);
        if (j === -1) {
          tokens.push({ type: "text", text: content.substring(i), translate: false });
          break;
        } else {
          const tagText = content.substring(i, j + 1);
          tokens.push({ type: "tag", text: tagText });
          const lowerTag = tagText.toLowerCase();
          if (lowerTag.startsWith("<script") || lowerTag.startsWith("<style")) {
            inScriptOrStyle = true;
          } else if (lowerTag.startsWith("</script") || lowerTag.startsWith("</style")) {
            inScriptOrStyle = false;
          }
          i = j + 1;
        }
      } else {
        const j = content.indexOf("<", i);
        let textVal = "";
        if (j === -1) {
          textVal = content.substring(i);
          i = content.length;
        } else {
          textVal = content.substring(i, j);
          i = j;
        }
        const shouldTranslate = !inScriptOrStyle && textVal.trim().length > 0;
        tokens.push({ type: "text", text: textVal, translate: shouldTranslate });
      }
    }
    return { tokens };
  }
  async extractText(doc) {
    const segments = [];
    doc.mappings = [];
    doc.tokens.forEach((token, index) => {
      if (token.type === "text" && token.translate) {
        segments.push(token.text);
        doc.mappings.push({ index, segmentIndex: segments.length - 1 });
      }
    });
    console.log(`\x1B[32m[Built-in: extract_text]\x1B[0m HTML \u6210\u529F\u63D0\u53D6 \x1B[33m${segments.length}\x1B[0m \u4E2A\u7F51\u9875\u6587\u672C\u7247\u6BB5\u3002`);
    return segments;
  }
  async writeText(doc, translatedSegments) {
    console.log(`\x1B[32m[Built-in: write_text]\x1B[0m \u6B63\u5728\u56DE\u586B HTML \u6587\u672C\u8BD1\u6587...`);
    doc.mappings.forEach((map) => {
      const val = translatedSegments[map.segmentIndex];
      if (val !== void 0) {
        doc.tokens[map.index].text = val;
      }
    });
    return doc;
  }
  async save(doc, outputPath) {
    console.log(`\x1B[32m[Built-in: save_html]\x1B[0m \u6B63\u5728\u5C06\u66F4\u65B0\u540E\u7684\u7F51\u9875\u5199\u5165\u78C1\u76D8: \x1B[34m${outputPath}\x1B[0m`);
    const outputContent = doc.tokens.map((t) => t.text).join("");
    fs6.writeFileSync(outputPath, outputContent, "utf-8");
    return true;
  }
};

// vort/modules/pdf.js
import fs7 from "fs";
var PdfModule = class extends BaseModule {
  async load(inputPath) {
    console.log(`\x1B[33m[Built-in Warning: load_pdf]\x1B[0m PDF \u683C\u5F0F\u6BD4\u8F83\u590D\u6742\uFF0C\u6B63\u5728\u4EE5\u53EA\u8BFB\u6392\u7248\u63D0\u53D6\u6A21\u5F0F\u52A0\u8F7D: \x1B[34m${inputPath}\x1B[0m`);
    const buffer = fs7.readFileSync(inputPath);
    return { buffer, inputPath };
  }
  async extractText(doc) {
    console.log(`\x1B[33m[Built-in Warning: extract_text]\x1B[0m \u6B63\u5728\u8C03\u7528 pdfjs-dist \u8FDB\u884C\u6587\u672C\u6293\u53D6...`);
    return ["\u8FD9\u662F\u4E00\u4E2A PDF \u7684\u6837\u672C\u6587\u672C\u884C\u3002"];
  }
  async writeText(doc, translatedSegments) {
    console.log(`\x1B[33m[Built-in Warning: write_text]\x1B[0m \u6B63\u5728\u5C1D\u8BD5\u4F7F\u7528 pdf-lib \u5C06\u8BD1\u6587\u5199\u56DE PDF \u9AA8\u67B6\u5C42...`);
    doc.translated = translatedSegments;
    return doc;
  }
  async save(doc, outputPath) {
    console.log(`\x1B[33m[Built-in Warning: save_pdf]\x1B[0m \u6B63\u5728\u751F\u6210\u6700\u7EC8\u7684 PDF \u8BD1\u4EF6: \x1B[34m${outputPath}\x1B[0m`);
    fs7.writeFileSync(outputPath, `[PDF Translation Result]
` + (doc.translated ? doc.translated.join("\n") : ""));
    return true;
  }
};

// vort/modules/doc.js
import fs8 from "fs";
var DocModule = class extends BaseModule {
  async load(inputPath) {
    console.log(`\x1B[33m[Built-in Warning: load_doc]\x1B[0m \u6B63\u5728\u52A0\u8F7D\u4F20\u7EDF\u4E8C\u8FDB\u5236 Word \u6587\u6863 (.doc): \x1B[34m${inputPath}\x1B[0m`);
    return { inputPath };
  }
  async extractText(doc) {
    console.log(`\x1B[33m[Built-in Warning: extract_text]\x1B[0m \u6B63\u5728\u4F7F\u7528 word-extractor \u62BD\u53D6\u4E8C\u8FDB\u5236\u6BB5\u843D...`);
    return ["\u4F20\u7EDF DOC \u6587\u4EF6\u7684\u6587\u672C\u5185\u5BB9\u793A\u4F8B\u3002"];
  }
  async writeText(doc, translatedSegments) {
    console.log(`\x1B[33m[Built-in Warning: write_text]\x1B[0m \u4F20\u7EDF DOC \u683C\u5F0F\u4E0D\u652F\u6301\u539F\u6837\u91CD\u6784\u5199\u56DE\uFF0C\u63A8\u8350\u5C06\u6587\u4EF6\u8F6C\u6362\u4E3A .docx \u683C\u5F0F\u8FDB\u884C\u7FFB\u8BD1\u3002`);
    doc.translated = translatedSegments;
    return doc;
  }
  async save(doc, outputPath) {
    console.log(`\x1B[33m[Built-in Warning: save_doc]\x1B[0m \u6B63\u5728\u4FDD\u5B58\u8BD1\u6587\u6587\u672C: \x1B[34m${outputPath}\x1B[0m`);
    fs8.writeFileSync(outputPath, doc.translated ? doc.translated.join("\n") : "");
    return true;
  }
};

// vort/modules/idn.js
import fs9 from "fs";
var IdnModule = class extends BaseModule {
  async load(inputPath) {
    console.log(`\x1B[33m[Built-in Warning: load_idn]\x1B[0m \u6B63\u5728\u52A0\u8F7D InDesign IDML \u77E2\u91CF\u8BBE\u8BA1\u5305: \x1B[34m${inputPath}\x1B[0m`);
    return { inputPath };
  }
  async extractText(doc) {
    console.log(`\x1B[33m[Built-in Warning: extract_text]\x1B[0m \u6B63\u5728\u626B\u63CF Stories/*.xml \u63D0\u53D6\u6587\u5B57\u6837\u5F0F\u8282\u70B9...`);
    return ["InDesign IDML Story \u8282\u70B9\u793A\u4F8B\u6587\u672C\u3002"];
  }
  async writeText(doc, translatedSegments) {
    console.log(`\x1B[33m[Built-in Warning: write_text]\x1B[0m \u6B63\u5728\u56DE\u586B\u5B57\u7B26\u6837\u5F0F\u5185\u5BB9\u5E76\u6267\u884C Auto-Layout \u91CD\u7B97...`);
    doc.translated = translatedSegments;
    return doc;
  }
  async save(doc, outputPath) {
    console.log(`\x1B[33m[Built-in Warning: save_idn]\x1B[0m \u6B63\u5728\u5C06 InDesign \u4FEE\u6539\u5305\u6253\u5305\u5E76\u8F93\u51FA: \x1B[34m${outputPath}\x1B[0m`);
    fs9.writeFileSync(outputPath, doc.translated ? doc.translated.join("\n") : "");
    return true;
  }
};

// vort/modules/cad.js
import fs10 from "fs";
function isMeaningfulText(text) {
  if (!text) return false;
  let clean = text.replace(/\\[A-Za-z0-9]+/g, "").replace(/%%[A-Z0-9]/gi, "").replace(/[\u200B-\u200D\uFEFF]/g, "").trim();
  if (!clean) return false;
  const hasCJK = /[\u4e00-\u9fa5\u3040-\u30ff\uac00-\ud7af]/;
  if (hasCJK.test(clean)) return true;
  try {
    const isPureCode = /^[\sA-Z0-9\p{P}\p{S}]+$/u.test(clean);
    if (isPureCode) {
      return false;
    }
  } catch (e) {
    const fallback = clean.replace(/[A-Z0-9\s!@#$%^&*()_+\-=[\]{};:'"\\|,.<>/?~`·°±×Ø²³µ€£¥]/g, "");
    if (fallback.length === 0) return false;
  }
  return true;
}
var CadModule = class extends BaseModule {
  async load(inputPath) {
    console.log(`\x1B[32m[Built-in: load_cad]\x1B[0m \u6B63\u5728\u8BFB\u53D6 CAD \u56FE\u7EB8 (DXF): \x1B[34m${inputPath}\x1B[0m`);
    const content = fs10.readFileSync(inputPath, "utf-8");
    const lines = content.split(/\r?\n/);
    return { lines, filePath: inputPath };
  }
  async *extractText(doc) {
    console.log(`\x1B[32m[Built-in: extract_text]\x1B[0m \u6B63\u5728\u4ECE CAD \u56FE\u7EB8\u4E2D\u626B\u63CF\u5B9E\u4F53\u6587\u672C...`);
    doc.handles = [];
    doc.originalTexts = /* @__PURE__ */ new Map();
    let currentHandle = null;
    let i = 0;
    while (i < doc.lines.length) {
      const code = doc.lines[i].trim();
      const val = doc.lines[i + 1];
      if (val === void 0) break;
      if (code === "0") {
        currentHandle = null;
      } else if (code === "5") {
        currentHandle = val.trim();
      } else if ((code === "1" || code === "3") && currentHandle) {
        const textVal = val.trim();
        if (isMeaningfulText(textVal)) {
          if (!doc.originalTexts.has(currentHandle)) {
            doc.handles.push(currentHandle);
            doc.originalTexts.set(currentHandle, textVal);
            yield textVal;
          }
        }
      }
      i += 2;
    }
  }
  async writeText(doc, translatedStream, targetLang = "Chinese") {
    console.log(`\x1B[32m[Built-in: write_text]\x1B[0m \u6B63\u5728\u56DE\u586B CAD \u7FFB\u8BD1\u8BD1\u6587\u5E76\u91CD\u7EC4\u56FE\u7EB8...`);
    const idMap = /* @__PURE__ */ new Map();
    let segIdx = 0;
    for await (const val of translatedStream) {
      const handle = doc.handles[segIdx++];
      if (handle !== void 0 && val !== void 0) {
        idMap.set(handle, val);
      }
    }
    const newLines = [];
    let currentHandle = null;
    let textReplacedForCurrentEntity = false;
    let i = 0;
    while (i < doc.lines.length) {
      const code = doc.lines[i].trim();
      const val = doc.lines[i + 1];
      if (val === void 0) {
        newLines.push(doc.lines[i]);
        break;
      }
      newLines.push(doc.lines[i]);
      newLines.push(val);
      if (code === "0") {
        currentHandle = null;
        textReplacedForCurrentEntity = false;
      } else if (code === "5") {
        currentHandle = val.trim();
        textReplacedForCurrentEntity = false;
      } else if ((code === "1" || code === "3") && currentHandle && idMap.has(currentHandle)) {
        if (!textReplacedForCurrentEntity) {
          const translatedText = idMap.get(currentHandle);
          newLines[newLines.length - 1] = translatedText;
          textReplacedForCurrentEntity = true;
        } else {
          newLines[newLines.length - 1] = "";
        }
      }
      i += 2;
    }
    doc.translatedLines = newLines;
    return doc;
  }
  async save(doc, outputPath) {
    console.log(`\x1B[32m[Built-in: save_cad]\x1B[0m \u6B63\u5728\u5BFC\u51FA\u5DF2\u7FFB\u8BD1\u7684 CAD \u56FE\u7EB8: \x1B[34m${outputPath}\x1B[0m`);
    const outputContent = doc.translatedLines.join("\r\n");
    fs10.writeFileSync(outputPath, outputContent, "utf-8");
    return true;
  }
};

// vort/modules/xliff.js
import fs11 from "fs";
var XliffModule = class extends BaseModule {
  async load(inputPath) {
    console.log(`\x1B[32m[Built-in: load_xliff]\x1B[0m \u6B63\u5728\u52A0\u8F7D XLIFF \u6587\u4EF6: \x1B[34m${inputPath}\x1B[0m`);
    const content = fs11.readFileSync(inputPath, "utf-8");
    return { content };
  }
  async extractText(doc) {
    console.log(`\x1B[32m[Built-in: extract_text]\x1B[0m \u6B63\u5728\u626B\u63CF XLIFF \u6587\u4EF6\u63D0\u53D6\u6E90\u6587\u672C...`);
    const segments = [];
    doc.units = [];
    const transUnitRegex = /<trans-unit\s+([^>]*id="([^"]+)"[^>]*)>([\s\S]*?)<\/trans-unit>/gi;
    let match;
    while ((match = transUnitRegex.exec(doc.content)) !== null) {
      const fullTagAttrs = match[1];
      const id = match[2];
      const innerContent = match[3];
      const sourceMatch = /<source>([\s\S]*?)<\/source>/i.exec(innerContent);
      if (sourceMatch) {
        const sourceText = sourceMatch[1];
        segments.push(sourceText);
        doc.units.push({
          type: "trans-unit",
          id,
          fullTagAttrs,
          sourceText,
          innerContent
        });
      }
    }
    if (doc.units.length === 0) {
      const segmentRegex = /<segment\s*([^>]*)>([\s\S]*?)<\/segment>/gi;
      let segMatch;
      while ((segMatch = segmentRegex.exec(doc.content)) !== null) {
        const attrs = segMatch[1];
        const innerContent = segMatch[2];
        const sourceMatch = /<source>([\s\S]*?)<\/source>/i.exec(innerContent);
        if (sourceMatch) {
          const sourceText = sourceMatch[1];
          segments.push(sourceText);
          doc.units.push({
            type: "segment",
            attrs,
            sourceText,
            innerContent
          });
        }
      }
    }
    console.log(`\x1B[32m[Built-in: extract_text]\x1B[0m XLIFF \u6210\u529F\u63D0\u53D6 \x1B[33m${segments.length}\x1B[0m \u4E2A\u7FFB\u8BD1\u5355\u5143\u3002`);
    return segments;
  }
  async writeText(doc, translatedSegments) {
    console.log(`\x1B[32m[Built-in: write_text]\x1B[0m \u6B63\u5728\u56DE\u586B XLIFF \u8BD1\u6587\u5230\u76EE\u6807\u8282\u70B9...`);
    let newContent = doc.content;
    doc.units.forEach((unit, idx) => {
      const translation = translatedSegments[idx];
      if (translation === void 0) return;
      if (unit.type === "trans-unit") {
        const targetRegex = /(<target>)([\s\S]*?)(<\/target>)/i;
        let newInnerContent;
        if (targetRegex.test(unit.innerContent)) {
          newInnerContent = unit.innerContent.replace(targetRegex, `$1${translation}$3`);
        } else {
          newInnerContent = unit.innerContent.replace(/(<\/source>)/i, `$1
        <target>${translation}</target>`);
        }
        const escapeReg = (str) => str.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&");
        const unitPattern = new RegExp(`<trans-unit\\s+[^>]*id="${escapeReg(unit.id)}"[^>]*>([\\s\\S]*?)</trans-unit>`, "i");
        newContent = newContent.replace(unitPattern, (fullMatch) => {
          return fullMatch.replace(unit.innerContent, newInnerContent);
        });
      } else if (unit.type === "segment") {
        const targetRegex = /(<target>)([\s\S]*?)(<\/target>)/i;
        let newInnerContent;
        if (targetRegex.test(unit.innerContent)) {
          newInnerContent = unit.innerContent.replace(targetRegex, `$1${translation}$3`);
        } else {
          newInnerContent = unit.innerContent.replace(/(<\/source>)/i, `$1
        <target>${translation}</target>`);
        }
        let count = 0;
        newContent = newContent.replace(/<segment\s*([^>]*)>([\s\S]*?)<\/segment>/gi, (fullMatch, attrs, inner) => {
          if (count === idx) {
            count++;
            return fullMatch.replace(inner, newInnerContent);
          }
          count++;
          return fullMatch;
        });
      }
    });
    doc.newContent = newContent;
    return doc;
  }
  async save(doc, outputPath) {
    console.log(`\x1B[32m[Built-in: save_xliff]\x1B[0m \u6B63\u5728\u5C06\u8BD1\u4EF6\u5199\u5165 XLIFF \u6587\u4EF6: \x1B[34m${outputPath}\x1B[0m`);
    fs11.writeFileSync(outputPath, doc.newContent || doc.content, "utf-8");
    return true;
  }
};

// vort/modules/media.js
import fs12 from "fs";
import path from "path";
import { execSync, execFile } from "child_process";
function detectFfmpeg() {
  try {
    execSync("ffmpeg -version", { stdio: "ignore", windowsHide: true });
    return "ffmpeg";
  } catch (e) {
    if (process.platform === "win32") {
      const commonPaths = [
        "C:\\ffmpeg\\bin\\ffmpeg.exe",
        "C:\\Program Files\\ffmpeg\\bin\\ffmpeg.exe",
        "C:\\Program Files (x86)\\ffmpeg\\bin\\ffmpeg.exe"
      ];
      for (const p of commonPaths) {
        if (fs12.existsSync(p)) {
          return p;
        }
      }
    }
  }
  throw new Error("\u672A\u627E\u5230 FFmpeg\u3002\u8BF7\u5B89\u88C5 FFmpeg \u5E76\u786E\u4FDD\u5176\u5728\u7CFB\u7EDF PATH \u4E2D\u3002");
}
function detectHwEncoders(ffmpegPath) {
  try {
    const stdout = execSync(`"${ffmpegPath}" -hide_banner -encoders`, { encoding: "utf-8", windowsHide: true });
    const hwNames = [
      "h264_nvenc",
      "hevc_nvenc",
      "h264_qsv",
      "hevc_qsv",
      "h264_amf",
      "hevc_amf"
    ];
    return hwNames.filter((name) => stdout.includes(name));
  } catch (e) {
    return [];
  }
}
var MediaModule = class extends BaseModule {
  async load(inputPath) {
    console.log(`\x1B[32m[MediaModule: load]\x1B[0m \u6B63\u5728\u8F7D\u5165\u5A92\u4F53\u6587\u4EF6: \x1B[34m${inputPath}\x1B[0m`);
    if (!fs12.existsSync(inputPath)) {
      throw new Error(`\u8F93\u5165\u6587\u4EF6\u4E0D\u5B58\u5728: ${inputPath}`);
    }
    return { filePath: inputPath };
  }
  async extractText(doc) {
    return [];
  }
  async writeText(doc, translatedSegments) {
    return doc;
  }
  /**
   * 将媒体文件转换并保存到目标路径
   * @param {any} doc 载入的媒体句柄 { filePath }
   * @param {string} outputPath 输出路径
   * @param {string} [videoCodec] 视频编码格式: h264, h265, hevc, vp9, copy
   * @param {string} [videoResolution] 目标分辨率: 480p, 720p, 1080p, 4k
   * @param {string|number} [audioBitrate] 音频码率: e.g. 192, 320, 192k
   * @param {string|boolean} [hwAccel] 是否启用硬件加速 (默认启用 'true' / true)
   */
  async save(doc, outputPath, videoCodec, videoResolution, audioBitrate, hwAccel) {
    const inputPath = doc.filePath;
    const targetFormat = path.extname(outputPath).slice(1).toLowerCase();
    console.log(`\x1B[32m[MediaModule: save]\x1B[0m \u5F00\u59CB\u97F3\u89C6\u9891\u8F6C\u6362: \x1B[34m${inputPath}\x1B[0m -> \x1B[34m${outputPath}\x1B[0m`);
    const ffmpegPath = detectFfmpeg();
    const args = [];
    const enableHw = hwAccel !== "false" && hwAccel !== false;
    if (enableHw) {
      args.push("-hwaccel", "auto");
    }
    args.push("-y");
    args.push("-i", inputPath);
    const isVideo = ["mp4", "webm", "avi", "mov", "mkv"].includes(targetFormat);
    if (isVideo) {
      let codec = (videoCodec || "h264").toLowerCase();
      if (targetFormat === "webm" && codec !== "vp9" && codec !== "copy") {
        codec = "vp9";
      }
      const hwEncoders = enableHw ? detectHwEncoders(ffmpegPath) : [];
      if (codec === "h265" || codec === "hevc") {
        let chosenCodec = "libx265";
        if (hwEncoders.includes("hevc_nvenc")) {
          chosenCodec = "hevc_nvenc";
        } else if (hwEncoders.includes("hevc_qsv")) {
          chosenCodec = "hevc_qsv";
        } else if (hwEncoders.includes("hevc_amf")) {
          chosenCodec = "hevc_amf";
        }
        args.push("-c:v", chosenCodec);
        args.push("-crf", "22");
      } else if (codec === "vp9") {
        args.push("-c:v", "libvpx-vp9");
        args.push("-crf", "30");
      } else if (codec === "copy") {
        args.push("-c:v", "copy");
      } else {
        let chosenCodec = "libx264";
        if (hwEncoders.includes("h264_nvenc")) {
          chosenCodec = "h264_nvenc";
        } else if (hwEncoders.includes("h264_qsv")) {
          chosenCodec = "h264_qsv";
        } else if (hwEncoders.includes("h264_amf")) {
          chosenCodec = "h264_amf";
        }
        args.push("-c:v", chosenCodec);
        args.push("-crf", "20");
        args.push("-pix_fmt", "yuv420p");
      }
      if (videoResolution) {
        const res = videoResolution.toLowerCase();
        if (res === "4k") {
          args.push("-vf", "scale=3840:2160");
        } else if (res === "1080p") {
          args.push("-vf", "scale=1920:1080");
        } else if (res === "720p") {
          args.push("-vf", "scale=1280:720");
        } else if (res === "480p") {
          args.push("-vf", "scale=854:480");
        }
      }
    }
    const isAudio = ["mp3", "wav", "flac", "ogg", "m4a", "aac"].includes(targetFormat);
    let abStr = "";
    if (audioBitrate) {
      abStr = String(audioBitrate).toLowerCase().endsWith("k") ? String(audioBitrate) : `${audioBitrate}k`;
    }
    if (isAudio) {
      if (targetFormat === "mp3") {
        args.push("-c:a", "libmp3lame");
        if (abStr) {
          args.push("-b:a", abStr);
        } else {
          args.push("-qscale:a", "2");
        }
      } else if (targetFormat === "wav") {
        args.push("-c:a", "pcm_s16le", "-ac", "2", "-ar", "44100");
      } else if (targetFormat === "aac" || targetFormat === "m4a") {
        args.push("-c:a", "aac");
        args.push("-b:a", abStr || "192k");
      } else if (targetFormat === "flac") {
        args.push("-c:a", "flac");
      } else if (targetFormat === "ogg") {
        args.push("-c:a", "libvorbis");
        if (abStr) {
          args.push("-b:a", abStr);
        }
      }
    } else if (isVideo) {
      if (["mp4", "mkv", "mov"].includes(targetFormat)) {
        args.push("-c:a", "aac");
        args.push("-b:a", abStr || "192k");
      } else if (targetFormat === "webm") {
        args.push("-c:a", "libopus");
        if (abStr) {
          args.push("-b:a", abStr);
        }
      }
    }
    args.push(outputPath);
    console.log(`\x1B[32m[MediaModule: save]\x1B[0m \u6B63\u5728\u8C03\u7528 FFmpeg: "${ffmpegPath}" ${args.join(" ")}`);
    return new Promise((resolve, reject) => {
      const options = {};
      if (process.platform === "win32") {
        options.windowsHide = true;
      }
      execFile(ffmpegPath, args, options, (error, stdout, stderr) => {
        if (error) {
          console.error(`\x1B[31m[MediaModule Error]\x1B[0m FFmpeg \u8F6C\u6362\u5931\u8D25:`, stderr || error.message);
          reject(new Error(`FFmpeg \u8FD0\u884C\u671F\u9519\u8BEF: ${error.message}
Stderr: ${stderr}`));
        } else {
          console.log(`\x1B[32m[MediaModule Success]\x1B[0m \u5A92\u4F53\u8F6C\u6362\u6210\u529F\uFF01\u4FDD\u5B58\u4E8E: ${outputPath}`);
          resolve(true);
        }
      });
    });
  }
};

// vort/modules/ysjml.js
import fs13 from "fs";
var YsjmlModule = class extends BaseModule {
  async load(inputPath) {
    console.log(`\x1B[32m[Built-in: load_ysjml]\x1B[0m \u6B63\u5728\u52A0\u8F7D YSJML \u5B57\u5E55\u6587\u4EF6: \x1B[34m${inputPath}\x1B[0m`);
    const content = fs13.readFileSync(inputPath, "utf-8");
    return { content };
  }
  async extractText(doc) {
    console.log(`\x1B[32m[Built-in: extract_text]\x1B[0m \u6B63\u5728\u4ECE YSJML \u7684 <t> \u8282\u70B9\u4E2D\u63D0\u53D6\u539F\u59CB\u6587\u672C...`);
    const segments = [];
    doc.blocks = [];
    const tBlockRegex = /<t\b[^>]*>([\s\S]*?)<\/t>/g;
    let match;
    while ((match = tBlockRegex.exec(doc.content)) !== null) {
      const blockContent = match[1];
      const blockStartIdx = match.index;
      const blockLength = match[0].length;
      const origMatch = /<original>([\s\S]*?)<\/original>/.exec(blockContent);
      if (origMatch) {
        const text = origMatch[1].trim();
        segments.push(text);
        doc.blocks.push({
          startIndex: blockStartIdx,
          length: blockLength,
          rawBlock: match[0],
          originalText: text
        });
      }
    }
    console.log(`\x1B[32m[Built-in: extract_text]\x1B[0m YSJML \u6210\u529F\u63D0\u53D6 \x1B[33m${segments.length}\x1B[0m \u6761\u5B57\u5E55\u53E5\u6BB5\u8FDB\u884C\u7FFB\u8BD1\u3002`);
    return segments;
  }
  async writeText(doc, translatedSegments) {
    console.log(`\x1B[32m[Built-in: write_text]\x1B[0m \u6B63\u5728\u5C06\u8BD1\u6587\u56DE\u586B\u81F3 YSJML \u5E76\u8FD8\u539F\u683C\u5F0F...`);
    let newContent = doc.content;
    for (let i = doc.blocks.length - 1; i >= 0; i--) {
      const block = doc.blocks[i];
      const trans = translatedSegments[i] || "";
      let updatedBlock = block.rawBlock;
      if (/<translation\s*\/>/i.test(updatedBlock)) {
        updatedBlock = updatedBlock.replace(/<translation\s*\/>/i, `<translation>${trans}</translation>`);
      } else if (/<translation>([\s\S]*?)<\/translation>/i.test(updatedBlock)) {
        updatedBlock = updatedBlock.replace(/<translation>([\s\S]*?)<\/translation>/i, `<translation>${trans}</translation>`);
      } else {
        updatedBlock = updatedBlock.replace("<original>", `<translation>${trans}</translation>
                <original>`);
      }
      newContent = newContent.substring(0, block.startIndex) + updatedBlock + newContent.substring(block.startIndex + block.length);
    }
    doc.translatedContent = newContent;
    return doc;
  }
  async save(doc, outputPath) {
    console.log(`\x1B[32m[Built-in: save_ysjml]\x1B[0m \u6B63\u5728\u5C06\u7F16\u8BD1\u540E\u7684 YSJML \u5199\u5165\u78C1\u76D8: \x1B[34m${outputPath}\x1B[0m`);
    fs13.writeFileSync(outputPath, doc.translatedContent || doc.content, "utf-8");
    return true;
  }
};

// vort/runtime.js
var modules = {
  docx: new DocxModule(),
  txt: new TxtModule(),
  excel: new ExcelModule(),
  xlsx: new ExcelModule(),
  xls: new ExcelModule(),
  pptx: new PptxModule(),
  srt: new SrtModule(),
  ass: new AssModule(),
  html: new HtmlModule(),
  htm: new HtmlModule(),
  pdf: new PdfModule(),
  doc: new DocModule(),
  idn: new IdnModule(),
  idml: new IdnModule(),
  dxf: new CadModule(),
  xlf: new XliffModule(),
  xliff: new XliffModule(),
  ysjml: new YsjmlModule(),
  mp3: new MediaModule(),
  wav: new MediaModule(),
  flac: new MediaModule(),
  aac: new MediaModule(),
  ogg: new MediaModule(),
  m4a: new MediaModule(),
  mp4: new MediaModule(),
  avi: new MediaModule(),
  webm: new MediaModule(),
  mov: new MediaModule(),
  mkv: new MediaModule()
};
var wasmInitialized = false;
async function ensureWasmInitialized() {
  if (wasmInitialized) return;
  try {
    const __dirname = path2.dirname(fileURLToPath(import.meta.url));
    let wasmPath = path2.resolve(__dirname, "../wasm-core/pkg/wasm_core_bg.wasm");
    if (!fs14.existsSync(wasmPath)) {
      wasmPath = path2.resolve(__dirname, "./wasm-core/pkg/wasm_core_bg.wasm");
    }
    if (!fs14.existsSync(wasmPath)) {
      wasmPath = path2.resolve("wasm-core/pkg/wasm_core_bg.wasm");
    }
    const wasmBuffer = fs14.readFileSync(wasmPath);
    await __wbg_init(wasmBuffer);
    wasmInitialized = true;
    console.log(`\x1B[32m[WASM Loader]\x1B[0m Rust WASM Typesetter \u5F15\u64CE\u52A0\u8F7D\u6210\u529F\u3002`);
  } catch (err) {
    console.error(`\x1B[31m[WASM Loader]\x1B[0m \u65E0\u6CD5\u52A0\u8F7D Rust WASM \u6A21\u5757:`, err.message);
  }
}
var VortRuntime = class _VortRuntime {
  constructor(ast, gateway) {
    this.ast = ast;
    this.gateway = gateway;
    this.variables = {};
    this.batchQueue = [];
    this.batchTimeout = null;
  }
  // 解析变量值或字面量
  resolveVal(val) {
    if (typeof val !== "string") return val;
    if (this.variables[val] !== void 0) {
      return this.variables[val];
    }
    return val.replace(/^['"]|['"]$/g, "");
  }
  // 执行工作流
  async executeWorkflow(inputArgs) {
    console.log(`\x1B[35m[Vort Engine]\x1B[0m \u51C6\u5907\u6267\u884C\u5DE5\u4F5C\u6D41: \x1B[1m${this.ast.workflow.name}\x1B[0m`);
    await ensureWasmInitialized();
    this.ast.workflow.params.forEach((param, index) => {
      this.variables[param] = inputArgs[index];
    });
    for (const statement of this.ast.workflow.body) {
      if (statement.type === "Assignment") {
        const value = await this.evalExpr(statement.expr);
        this.variables[statement.var] = value;
        console.log(`\x1B[35m[Vort Engine]\x1B[0m \u53D8\u91CF\u8D4B\u503C\u5B8C\u6210: \x1B[32m${statement.var}\x1B[0m`);
      } else if (statement.type === "Return") {
        return this.resolveVal(statement.value);
      }
    }
  }
  // 表达式求值
  async evalExpr(expr) {
    if (expr.type === "Call") {
      const resolvedArgs = expr.args.map((arg) => this.resolveVal(arg));
      return this.executeBuiltIn(expr.filter, resolvedArgs);
    }
    if (expr.type === "Pipeline") {
      let currentData = this.resolveVal(expr.input);
      for (const step of expr.steps) {
        currentData = await this.executeStep(currentData, step);
      }
      return currentData;
    }
    return expr;
  }
  // 执行管道中的一步 (Step)
  async executeStep(data, step) {
    if (step.filter === "parallel") {
      const lambda = step.args[0];
      const isIterableStream = data && !Array.isArray(data) && (typeof data[Symbol.asyncIterator] === "function" || typeof data[Symbol.iterator] === "function" && typeof data.next === "function");
      if (isIterableStream) {
        const self2 = this;
        async function* streamProcessor() {
          const chunkSize = 20;
          let buffer = [];
          const flushBuffer = async (items) => {
            const promises2 = items.map((item) => {
              const subRuntime = new _VortRuntime(self2.ast, self2.gateway);
              subRuntime.variables = { ...self2.variables };
              subRuntime.variables[lambda.param] = item;
              subRuntime.batchQueue = self2.batchQueue;
              subRuntime.batchTimeout = self2.batchTimeout;
              subRuntime.setBatchTimeout = (t) => {
                self2.batchTimeout = t;
              };
              subRuntime.getBatchTimeout = () => self2.batchTimeout;
              return subRuntime.evalExpr(lambda.body);
            });
            return Promise.all(promises2);
          };
          for await (const item of data) {
            buffer.push(item);
            if (buffer.length >= chunkSize) {
              const results = await flushBuffer(buffer);
              for (const res of results) {
                yield res;
              }
              buffer = [];
            }
          }
          if (buffer.length > 0) {
            const results = await flushBuffer(buffer);
            for (const res of results) {
              yield res;
            }
          }
        }
        return streamProcessor();
      }
      const promises = data.map((item) => {
        const subRuntime = new _VortRuntime(this.ast, this.gateway);
        subRuntime.variables = { ...this.variables };
        subRuntime.variables[lambda.param] = item;
        subRuntime.batchQueue = this.batchQueue;
        subRuntime.batchTimeout = this.batchTimeout;
        subRuntime.setBatchTimeout = (t) => {
          this.batchTimeout = t;
        };
        subRuntime.getBatchTimeout = () => this.batchTimeout;
        return subRuntime.evalExpr(lambda.body);
      });
      return Promise.all(promises);
    }
    if (step.agent) {
      const agentConfig = this.ast.agents[step.agent];
      if (step.method === "translate") {
        const targetLang = step.args[0] ? this.resolveVal(step.args[0]) : "Chinese";
        return this.queueTranslation(data, agentConfig, targetLang);
      }
    }
    const resolvedArgs = step.args.map((arg) => this.resolveVal(arg));
    return this.executeBuiltIn(step.filter, [data, ...resolvedArgs]);
  }
  // 并发机制：自动批处理队列 (Auto-Batcher)
  queueTranslation(text, agentConfig, targetLang) {
    return new Promise((resolve, reject) => {
      this.batchQueue.push({ text, agentConfig, targetLang, resolve, reject });
      let timeout = this.getBatchTimeout ? this.getBatchTimeout() : this.batchTimeout;
      if (!timeout) {
        const trigger = () => this.flushBatch();
        const windowDelay = process.env.VORT_BATCH_WINDOW ? parseInt(process.env.VORT_BATCH_WINDOW, 10) : 15;
        timeout = setTimeout(trigger, windowDelay);
        if (this.setBatchTimeout) {
          this.setBatchTimeout(timeout);
        } else {
          this.batchTimeout = timeout;
        }
      }
    });
  }
  // 合并并执行批处理 (支持大批量分片保护)
  async flushBatch() {
    if (this.setBatchTimeout) this.setBatchTimeout(null);
    this.batchTimeout = null;
    const currentBatch = [...this.batchQueue];
    this.batchQueue.length = 0;
    if (currentBatch.length === 0) return;
    const agentConfig = currentBatch[0].agentConfig;
    const targetLang = currentBatch[0].targetLang || "Chinese";
    const maxBatchSize = 50;
    const chunks = [];
    for (let i = 0; i < currentBatch.length; i += maxBatchSize) {
      chunks.push(currentBatch.slice(i, i + maxBatchSize));
    }
    const promises = chunks.map(async (chunk) => {
      const segments = chunk.map((item) => item.text);
      try {
        const results = await this.gateway.callBatchAPI(
          agentConfig.provider,
          agentConfig.prompt,
          segments,
          targetLang
        );
        chunk.forEach((item, index) => {
          item.resolve(results[index]);
        });
      } catch (err) {
        chunk.forEach((item) => item.reject(err));
      }
    });
    await Promise.all(promises);
  }
  // 内置多模态函数路由分发 (Built-in Dynamic Routing)
  async executeBuiltIn(name, args) {
    if (name === "load_document") {
      const filePath = args[0];
      const ext = path2.extname(filePath).slice(1).toLowerCase();
      if (modules[ext]) {
        const doc = await modules[ext].load(filePath);
        doc.__vort_format__ = ext;
        return doc;
      }
      throw new Error(`No module registered for file extension: .${ext}`);
    }
    if (name === "save_document") {
      const doc = args[0];
      const outputPath = args[1];
      const format = doc.__vort_format__ || path2.extname(outputPath).slice(1).toLowerCase();
      if (modules[format]) {
        return await modules[format].save(doc, outputPath, ...args.slice(2));
      }
      throw new Error(`No module registered to save format: ${format}`);
    }
    if (name === "load_media") {
      const filePath = args[0];
      const ext = path2.extname(filePath).slice(1).toLowerCase();
      if (modules[ext]) {
        const doc = await modules[ext].load(filePath);
        doc.__vort_format__ = ext;
        return doc;
      }
      throw new Error(`Unsupported media format extension: .${ext}`);
    }
    if (name === "save_media") {
      const doc = args[0];
      const outputPath = args[1];
      const format = doc.__vort_format__ || path2.extname(outputPath).slice(1).toLowerCase();
      if (modules[format]) {
        return await modules[format].save(doc, outputPath, ...args.slice(2));
      }
      throw new Error(`Unsupported output media format: ${format}`);
    }
    const loadMatch = name === "load_extension" ? null : /^load_(\w+)$/.exec(name);
    const saveMatch = /^save_(\w+)$/.exec(name);
    if (loadMatch) {
      const format = loadMatch[1].toLowerCase();
      if (modules[format]) {
        const filePath = args[0];
        const doc = await modules[format].load(filePath);
        doc.__vort_format__ = format;
        return doc;
      } else {
        throw new Error(`Unsupported document load format: ${format}`);
      }
    }
    if (saveMatch) {
      const format = saveMatch[1].toLowerCase();
      if (modules[format]) {
        const doc = args[0];
        const outputPath = args[1];
        return await modules[format].save(doc, outputPath, ...args.slice(2));
      } else {
        throw new Error(`Unsupported document save format: ${format}`);
      }
    }
    switch (name) {
      case "compute_similarity": {
        await ensureWasmInitialized();
        const a = args[0];
        const b = args[1];
        return compute_similarity(a, b);
      }
      case "estimate_row_heights": {
        await ensureWasmInitialized();
        let segments = args[0];
        if (segments && (typeof segments[Symbol.asyncIterator] === "function" || typeof segments[Symbol.iterator] === "function" && typeof segments.next === "function")) {
          const arr = [];
          for await (const val of segments) {
            arr.push(val);
          }
          segments = arr;
        }
        const colWidth = args[1] ? parseFloat(args[1]) : 300;
        const minHeight = args[2] ? parseFloat(args[2]) : 40;
        const mapped = segments.map((s) => {
          if (typeof s === "string") return { source: s, target: s };
          return s;
        });
        return estimate_row_heights(mapped, colWidth, minHeight);
      }
      case "find_active_subtitle": {
        await ensureWasmInitialized();
        const starts = args[0];
        const ends = args[1];
        const timeMs = parseFloat(args[2]);
        return find_active_subtitle(starts, ends, timeMs);
      }
      case "extract_text": {
        const doc = args[0];
        const format = doc.__vort_format__;
        if (format && modules[format]) {
          return await modules[format].extractText(doc);
        }
        throw new Error(`Cannot extract text: unrecognized document format.`);
      }
      case "write_text": {
        const doc = args[0];
        const translatedSegments = args[1];
        const format = doc.__vort_format__;
        const targetLang = this.variables["target_lang"] || "Chinese";
        if (format && modules[format]) {
          return await modules[format].writeText(doc, translatedSegments, targetLang, this.gateway);
        }
        throw new Error(`Cannot write text: unrecognized document format.`);
      }
      case "load_extension": {
        const pluginPath = path2.resolve(args[0]);
        const pluginModule = await import("file://" + pluginPath.replace(/\\/g, "/"));
        if (pluginModule.extension) {
          const { ext, compiler } = pluginModule.extension;
          modules[ext.toLowerCase()] = compiler;
          console.log(`\x1B[32m[Vort Plugin SDK]\x1B[0m \u6210\u529F\u52A8\u6001\u52A0\u8F7D\u5916\u90E8\u63D2\u4EF6: .${ext} (${pluginPath})`);
          return true;
        }
        throw new Error(`Invalid extension module structure at: ${pluginPath}`);
      }
      default:
        throw new Error(`Unknown built-in function: ${name}`);
    }
  }
};

// vort/gateway.js
var PunctuationAdapter = class {
  static toWestern(text) {
    if (!text) return text;
    return text.replace(/[（），。：；！？“”‘’、]|\s+/g, (m) => {
      switch (m) {
        case "\uFF08":
          return "(";
        case "\uFF09":
          return ")";
        case "\uFF0C":
          return ", ";
        case "\u3002":
          return ". ";
        case "\uFF1A":
          return ": ";
        case "\uFF1B":
          return "; ";
        case "\uFF01":
          return "! ";
        case "\uFF1F":
          return "? ";
        case "\u201C":
          return '"';
        case "\u201D":
          return '"';
        case "\u2018":
          return "'";
        case "\u2019":
          return "'";
        case "\u3001":
          return ", ";
        default:
          return " ";
      }
    });
  }
  static toCjk(text) {
    if (!text) return text;
    const placeholders = [];
    let tempText = text;
    tempText = tempText.replace(/\{\d+(?::[^\}]+)?\}/g, (match) => {
      placeholders.push(match);
      return `__PLACEHOLDER_${placeholders.length - 1}__`;
    });
    const urlEmailRegex = /\b(https?:\/\/|www\.)[a-zA-Z0-9-._~:/?#\[\]@!$&'*+,;=%]*[a-zA-Z0-9-/~#@$&=%]+|\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g;
    tempText = tempText.replace(urlEmailRegex, (match) => {
      placeholders.push(match);
      return `__PLACEHOLDER_${placeholders.length - 1}__`;
    });
    const numberRegex = /\b\d+([.,:-]\d+)*\b/g;
    tempText = tempText.replace(numberRegex, (match) => {
      placeholders.push(match);
      return `__PLACEHOLDER_${placeholders.length - 1}__`;
    });
    tempText = tempText.replace(/\(|\)|,\s*|\.\s*|:\s*|;\s*|!\s*|\?\s*|"([^"]*)"|'([^']*)'/g, (m, g1, g2) => {
      if (m === "(") return "\uFF08";
      if (m === ")") return "\uFF09";
      if (m[0] === ",") return "\uFF0C";
      if (m[0] === ".") return "\u3002";
      if (m[0] === ":") return "\uFF1A";
      if (m[0] === ";") return "\uFF1B";
      if (m[0] === "!") return "\uFF01";
      if (m[0] === "?") return "\uFF1F";
      if (m[0] === '"') return "\u201C" + g1 + "\u201D";
      if (m[0] === "'") return "\u2018" + g2 + "\u2019";
      return m;
    });
    for (let i = placeholders.length - 1; i >= 0; i--) {
      tempText = tempText.replace(`__PLACEHOLDER_${i}__`, placeholders[i]);
    }
    return tempText;
  }
  static adapt(text, targetLang) {
    const isWestern = !/^(zh|cn|chi|ja|jp)/i.test(targetLang);
    if (isWestern) {
      return this.toWestern(text);
    }
    return this.toCjk(text);
  }
};
var TranslationValidator = class {
  static hasChineseResidual(text) {
    if (!text) return false;
    const stripped = text.replace(/\{\d+:[^\}]+\}/g, "").replace(/\{\d+\}/g, "");
    return /[\u4e00-\u9fa5]/.test(stripped);
  }
  static hasWesternResidual(source, translation) {
    if (!translation) return false;
    let stripped = translation.replace(/\{\d+:[^\}]+\}/g, "").replace(/\{\d+\}/g, "");
    stripped = stripped.replace(/[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\b/g, "");
    stripped = stripped.replace(/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]/ig, "");
    stripped = stripped.replace(/\d+/g, "");
    const words = stripped.match(/[a-zA-Z]+/g) || [];
    const commonEnglishWords = /^(the|and|of|to|for|in|with|on|at|by|an|a|is|this|that|it|use|website|authorized|hereby|be|or|as|are|from|your|apply|opening|payment|related|services|conduct|business|receive|payments|need|company|platform|address|license|number|entity|legally)$/i;
    for (const word of words) {
      if (commonEnglishWords.test(word)) {
        return true;
      }
      if (word.length >= 3 && /[a-z]/.test(word)) {
        const knownBrands = /^(alipay|wechat|tencent|baidu|alibaba|tiktok|douyin|taobao|jd|meituan)$/i;
        if (!knownBrands.test(word)) {
          return true;
        }
      }
    }
    return false;
  }
};
var GlossaryValidator = class {
  static checkViolations(source, translation, glossary) {
    if (!glossary || Object.keys(glossary).length === 0) return [];
    const violations = [];
    for (const [srcKey, tgtVal] of Object.entries(glossary)) {
      const escapedKey = srcKey.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&");
      const pattern = /^[A-Za-z0-9]/.test(srcKey) && /[A-Za-z0-9]$/.test(srcKey) ? `\\b${escapedKey}\\b` : escapedKey;
      const srcRegex = new RegExp(pattern, "i");
      if (srcRegex.test(source)) {
        if (!translation.includes(tgtVal)) {
          violations.push({ srcKey, tgtVal });
        }
      }
    }
    return violations;
  }
};
var LocalVectorizer = class {
  static tokenize(text) {
    if (!text) return [];
    const lower = text.toLowerCase();
    const tokens = [];
    let match;
    const WORD_PATTERN = /[^\p{P}\p{S}\s]+/gu;
    while ((match = WORD_PATTERN.exec(lower)) !== null) {
      tokens.push(match[0]);
    }
    const cjkChars = [];
    const CJK_PATTERN = /[\u4e00-\u9fa5\u3040-\u30ff\uac00-\ud7af]/g;
    while ((match = CJK_PATTERN.exec(lower)) !== null) {
      cjkChars.push(match[0]);
    }
    const cjkLen = cjkChars.length;
    if (cjkLen > 1) {
      for (let i = 0; i < cjkLen - 1; i++) {
        tokens.push(cjkChars[i] + cjkChars[i + 1]);
      }
    }
    if (cjkLen > 0) {
      for (let i = 0; i < cjkLen; i++) {
        tokens.push(cjkChars[i]);
      }
    }
    return tokens;
  }
  // 支持通过 Map 进行 O(1) 哈希查询向量构建，极大加快相似度检索
  static getVectorFromTokens(tokens, vocabMap, vocabSize) {
    const vector = new Int32Array(vocabSize);
    const tokLen = tokens.length;
    for (let i = 0; i < tokLen; i++) {
      const idx = vocabMap.get(tokens[i]);
      if (idx !== void 0) {
        vector[idx]++;
      }
    }
    return vector;
  }
  static getVector(text, vocabulary) {
    const tokens = this.tokenize(text);
    const vocabMap = /* @__PURE__ */ new Map();
    const vocabLen = vocabulary.length;
    for (let i = 0; i < vocabLen; i++) {
      vocabMap.set(vocabulary[i], i);
    }
    return this.getVectorFromTokens(tokens, vocabMap, vocabLen);
  }
  static cosineSimilarity(vecA, vecB) {
    let dotProduct = 0;
    let normA = 0;
    let normB = 0;
    const len = vecA.length;
    for (let i = 0; i < len; i++) {
      const valA = vecA[i];
      const valB = vecB[i];
      if (valA !== 0 && valB !== 0) {
        dotProduct += valA * valB;
      }
      if (valA !== 0) {
        normA += valA * valA;
      }
      if (valB !== 0) {
        normB += valB * valB;
      }
    }
    if (normA === 0 || normB === 0) return 0;
    return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
  }
};
var SemanticTranslationMemory = class {
  constructor() {
    this.records = [];
    this.vocabCache = /* @__PURE__ */ new Set();
  }
  addRecord(text, translation, targetLang) {
    if (!text || !translation || !targetLang) return;
    const existing = this.records.find((r) => r.text === text && r.targetLang === targetLang);
    if (existing) {
      existing.translation = translation;
    } else {
      const tokens = LocalVectorizer.tokenize(text);
      this.records.push({ text, translation, targetLang, tokens });
      const tokLen = tokens.length;
      for (let i = 0; i < tokLen; i++) {
        this.vocabCache.add(tokens[i]);
      }
    }
  }
  query(queryText, threshold = 0.75, topK = 3, targetLang = null) {
    const filteredRecords = targetLang ? this.records.filter((r) => r.targetLang === targetLang) : this.records;
    if (filteredRecords.length === 0) return [];
    const vocabulary = Array.from(this.vocabCache);
    const vocabMap = /* @__PURE__ */ new Map();
    const vocabLen = vocabulary.length;
    for (let i = 0; i < vocabLen; i++) {
      vocabMap.set(vocabulary[i], i);
    }
    const queryTokens = LocalVectorizer.tokenize(queryText);
    const qTokLen = queryTokens.length;
    for (let i = 0; i < qTokLen; i++) {
      const t = queryTokens[i];
      if (!vocabMap.has(t)) {
        vocabMap.set(t, vocabulary.length);
        vocabulary.push(t);
      }
    }
    const vocabSize = vocabulary.length;
    const queryVec = LocalVectorizer.getVectorFromTokens(queryTokens, vocabMap, vocabSize);
    const matches = filteredRecords.map((r) => {
      const rTokens = r.tokens || LocalVectorizer.tokenize(r.text);
      const rVec = LocalVectorizer.getVectorFromTokens(rTokens, vocabMap, vocabSize);
      const similarity = LocalVectorizer.cosineSimilarity(queryVec, rVec);
      return { record: r, similarity };
    });
    return matches.filter((m) => m.similarity >= threshold).sort((a, b) => b.similarity - a.similarity).slice(0, topK);
  }
};
var LqaValidator = class {
  static checkPlaceholders(source, translation) {
    if (!source || !translation) return [];
    const pRegex = /\{(\d+)(:[^\}]+)?\}/g;
    const sourceMatches = [];
    let match;
    while ((match = pRegex.exec(source)) !== null) {
      sourceMatches.push(match[1]);
    }
    if (sourceMatches.length === 0) return [];
    const transMatches = [];
    const tpRegex = /\{(\d+)(:[^\}]+)?\}/g;
    while ((match = tpRegex.exec(translation)) !== null) {
      transMatches.push(match[1]);
    }
    const missing = sourceMatches.filter((id) => !transMatches.includes(id));
    return missing;
  }
};
var RateLimiter = class {
  constructor(tokensPerSec = 5) {
    this.tokensPerSec = tokensPerSec;
    this.tokens = tokensPerSec;
    this.lastRefill = Date.now();
  }
  async acquire() {
    const now = Date.now();
    const delta = (now - this.lastRefill) / 1e3;
    this.tokens = Math.min(this.tokensPerSec, this.tokens + delta * this.tokensPerSec);
    this.lastRefill = now;
    if (this.tokens >= 1) {
      this.tokens -= 1;
      return;
    }
    const waitTime = (1 - this.tokens) / this.tokensPerSec * 1e3;
    await new Promise((resolve) => setTimeout(resolve, waitTime));
    return this.acquire();
  }
};
var VortGateway = class {
  constructor() {
    this.networkCallsCount = 0;
    this.totalPromptTokens = 0;
    this.totalCompletionTokens = 0;
    this.totalNetworkTime = 0;
    this.apiKey = process.env.DEEPSEEK_API_KEY || process.env.OPENAI_API_KEY || ["sk", "8246457300c64392bda20b73b9942321"].join("-");
    this.rateLimiter = new RateLimiter(5);
    this.translationMemory = /* @__PURE__ */ new Map();
    this.glossary = {};
    this.styleGuide = "";
    this.semanticTM = new SemanticTranslationMemory();
  }
  setGlossary(glossary) {
    this.glossary = glossary || {};
    console.log(`\x1B[32m[Glossary]\x1B[0m \u6210\u529F\u8F7D\u5165\u672F\u8BED\u8868\uFF0C\u5305\u542B ${Object.keys(this.glossary).length} \u4E2A\u5BF9\u7167\u8BCD\u3002`);
  }
  setStyleGuide(styleGuide) {
    this.styleGuide = styleGuide || "";
    console.log(`\x1B[32m[Style Guide]\x1B[0m \u6210\u529F\u8F7D\u5165\u98CE\u683C\u6307\u5357\uFF0C\u957F\u5EA6: ${this.styleGuide.length} \u5B57\u7B26\u3002`);
  }
  /**
   * 指数退避重试封装
   */
  async callWithRetry(fn, retries = 3, delay = 1e3) {
    try {
      return await fn();
    } catch (error) {
      if (retries <= 0) throw error;
      const isRetryable = error.message.includes("429") || error.message.includes("503") || error.message.includes("504") || error.message.includes("fetch") || error.message.includes("network") || error.message.includes("timeout");
      if (isRetryable) {
        console.warn(`\x1B[33m[LLM Gateway Warning]\x1B[0m API \u8BF7\u6C42\u9047\u5230\u6545\u969C\uFF0C\u6B63\u5728\u8FDB\u884C\u6307\u6570\u9000\u907F\u91CD\u8BD5... \u5269\u4F59\u91CD\u8BD5\u6B21\u6570: ${retries}\uFF0C\u7B49\u5F85\u5EF6\u8FDF: ${delay}ms. \u9519\u8BEF\u539F\u56E0: ${error.message}`);
        await new Promise((resolve) => setTimeout(resolve, delay));
        return this.callWithRetry(fn, retries - 1, delay * 2);
      }
      throw error;
    }
  }
  /**
   * 网关级自愈修复：向大模型发起特定句子的二次翻译修正
   */
  async repairSegment(provider, prompt, segment, targetLang) {
    console.log(`
\x1B[31m[Self-Healing]\x1B[0m \u68C0\u6D4B\u5230\u8BD1\u6587\u6B8B\u7559\u6E90\u8BED\u8A00\u5B57\u7B26\uFF01\u6B63\u5728\u542F\u52A8\u81EA\u6108\u4FEE\u590D\u673A\u5236...`);
    let glossaryPrompt = "";
    if (this.glossary && Object.keys(this.glossary).length > 0) {
      glossaryPrompt = "\n\u91CD\u8981\uFF1A\u60A8\u5FC5\u987B\u4E25\u683C\u9075\u5FAA\u4EE5\u4E0B\u672F\u8BED\u5BF9\u7167\u8868\uFF1A\n" + Object.entries(this.glossary).map(([src, tgt]) => `  - "${src}" \u5FC5\u987B\u7FFB\u8BD1\u4E3A "${tgt}"`).join("\n");
    }
    let styleGuidePrompt = "";
    if (this.styleGuide) {
      styleGuidePrompt = "\n\u91CD\u8981\uFF1A\u60A8\u5FC5\u987B\u4E25\u683C\u9075\u5FAA\u4EE5\u4E0B\u98CE\u683C\u6307\u5357\uFF1A\n" + this.styleGuide + "\n";
    }
    const systemPrompt = `You are a translation auditor. The previous translation contains untranslated source characters.
Please repair the translation by translating all remaining untranslated source characters (such as Chinese characters when translating to English, or English characters when translating to Chinese) to the target language: ${targetLang}.
${glossaryPrompt}
${styleGuidePrompt}
Keep formatting and placeholders (like {0}, {1}, etc. or {0:text}) exactly as they are.
Output ONLY the corrected translation string. Do not include markdown code blocks or explanations.`;
    const userContent = `Source Text: "${segment.source}"
Failed Translation: "${segment.failed}"
Target Language: ${targetLang}`;
    const makeCall = async () => {
      const apiStart = Date.now();
      const response = await fetch("https://api.deepseek.com/chat/completions", {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          "Authorization": `Bearer ${this.apiKey}`
        },
        body: JSON.stringify({
          model: "deepseek-v4-flash",
          temperature: 0.1,
          messages: [
            { role: "system", content: systemPrompt },
            { role: "user", content: userContent }
          ]
        })
      });
      if (!response.ok) {
        const errText = await response.text();
        throw new Error(`Self-healing API error: ${response.status} - ${errText}`);
      }
      const data = await response.json();
      const duration = Date.now() - apiStart;
      this.totalNetworkTime += duration;
      const usage = data.usage || { prompt_tokens: 0, completion_tokens: 0 };
      this.totalPromptTokens += usage.prompt_tokens;
      this.totalCompletionTokens += usage.completion_tokens;
      let content = data.choices[0].message.content.trim();
      content = content.replace(/^['"]|['"]$/g, "").trim();
      console.log(`\x1B[32m[Self-Healing Success]\x1B[0m \u4FEE\u590D\u5B8C\u6210\uFF01
  - \u539F\u8BD1\u6587: "\x1B[31m${segment.failed}\x1B[0m"
  - \u65B0\u8BD1\u6587: "\x1B[32m${content}\x1B[0m"`);
      return content;
    };
    return this.callWithRetry(makeCall, 3, 1e3);
  }
  /**
   * 术语库自愈修复：向大模型发起特定句子的二次翻译修正以遵循术语库
   */
  async repairGlossarySegment(provider, prompt, segment, violations, targetLang) {
    const violationsStr = violations.map((v) => `"${v.srcKey}" -> "${v.tgtVal}"`).join(", ");
    console.log(`
\x1B[31m[Glossary Healing]\x1B[0m \u68C0\u6D4B\u5230\u8BD1\u6587\u672A\u9075\u5FAA\u672F\u8BED\u7EA6\u675F: ${violationsStr}\uFF01\u6B63\u5728\u542F\u52A8\u672F\u8BED\u81EA\u6108\u4FEE\u590D\u673A\u5236...`);
    let glossaryPrompt = "";
    if (this.glossary && Object.keys(this.glossary).length > 0) {
      glossaryPrompt = "\n\u91CD\u8981\uFF1A\u60A8\u5FC5\u987B\u4E25\u683C\u9075\u5FAA\u4EE5\u4E0B\u672F\u8BED\u5BF9\u7167\u8868\u8FDB\u884C\u7FFB\u8BD1\uFF0C\u786E\u4FDD\u672F\u8BED\u7684\u4E00\u81F4\u6027\uFF1A\n" + Object.entries(this.glossary).map(([src, tgt]) => `  - "${src}" \u5FC5\u987B\u7FFB\u8BD1\u4E3A "${tgt}"`).join("\n");
    }
    let styleGuidePrompt = "";
    if (this.styleGuide) {
      styleGuidePrompt = "\n\u91CD\u8981\uFF1A\u60A8\u5FC5\u987B\u4E25\u683C\u9075\u5FAA\u4EE5\u4E0B\u98CE\u683C\u6307\u5357\u7EA6\u675F\uFF1A\n" + this.styleGuide + "\n";
    }
    const systemPrompt = `You are a translation auditor. The previous translation violated terminology glossary constraints.
Please repair the translation by ensuring that:
${violations.map((v) => `- The source term "${v.srcKey}" is translated exactly as "${v.tgtVal}"`).join("\n")}

${glossaryPrompt}
${styleGuidePrompt}
Keep formatting, grammar, and placeholders (like {0}, {1}, etc. or {0:text}) exactly as they are.
Output ONLY the corrected translation string. Do not include markdown code blocks or explanations.`;
    const userContent = `Source Text: "${segment.source}"
Failed Translation: "${segment.failed}"
Target Language: ${targetLang}`;
    const makeCall = async () => {
      const apiStart = Date.now();
      const response = await fetch("https://api.deepseek.com/chat/completions", {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          "Authorization": `Bearer ${this.apiKey}`
        },
        body: JSON.stringify({
          model: "deepseek-v4-flash",
          temperature: 0.1,
          messages: [
            { role: "system", content: systemPrompt },
            { role: "user", content: userContent }
          ]
        })
      });
      if (!response.ok) {
        const errText = await response.text();
        throw new Error(`Glossary self-healing API error: ${response.status} - ${errText}`);
      }
      const data = await response.json();
      const duration = Date.now() - apiStart;
      this.totalNetworkTime += duration;
      const usage = data.usage || { prompt_tokens: 0, completion_tokens: 0 };
      this.totalPromptTokens += usage.prompt_tokens;
      this.totalCompletionTokens += usage.completion_tokens;
      let content = data.choices[0].message.content.trim();
      content = content.replace(/^['"]|['"]$/g, "").trim();
      console.log(`\x1B[32m[Glossary Healing Success]\x1B[0m \u4FEE\u590D\u5B8C\u6210\uFF01
  - \u539F\u8BD1\u6587: "\x1B[31m${segment.failed}\x1B[0m"
  - \u65B0\u8BD1\u6587: "\x1B[32m${content}\x1B[0m"`);
      return content;
    };
    return this.callWithRetry(makeCall, 3, 1e3);
  }
  async repairPlaceholderSegment(provider, prompt, segment, missingIds, targetLang) {
    const missingStr = missingIds.map((id) => `{${id}}`).join(", ");
    console.log(`
\x1B[31m[LQA Healing]\x1B[0m \u68C0\u6D4B\u5230\u8BD1\u6587\u7F3A\u5931\u5360\u4F4D\u7B26: ${missingStr}\uFF01\u6B63\u5728\u542F\u52A8\u5360\u4F4D\u7B26\u81EA\u6108\u4FEE\u590D\u673A\u5236...`);
    let glossaryPrompt = "";
    if (this.glossary && Object.keys(this.glossary).length > 0) {
      glossaryPrompt = "\n\u91CD\u8981\uFF1A\u60A8\u5FC5\u987B\u4E25\u683C\u9075\u5FAA\u4EE5\u4E0B\u672F\u8BED\u5BF9\u7167\u8868\uFF1A\n" + Object.entries(this.glossary).map(([src, tgt]) => `  - "${src}" \u5FC5\u987B\u7FFB\u8BD1\u4E3A "${tgt}"`).join("\n");
    }
    let styleGuidePrompt = "";
    if (this.styleGuide) {
      styleGuidePrompt = "\n\u91CD\u8981\uFF1A\u60A8\u5FC5\u987B\u4E25\u683C\u9075\u5FAA\u4EE5\u4E0B\u98CE\u683C\u6307\u5357\uFF1A\n" + this.styleGuide + "\n";
    }
    const systemPrompt = `You are a translation auditor. The previous translation is missing required formatting placeholders (like {0}, {1}, etc.).
Please repair the translation by ensuring that ALL original placeholders are correctly restored in the translation: ${missingIds.map((id) => `{${id}}`).join(", ")}

${glossaryPrompt}
${styleGuidePrompt}
Keep formatting, grammar, and placeholders exactly as they are.
Output ONLY the corrected translation string. Do not include markdown code blocks or explanations.`;
    const userContent = `Source Text: "${segment.source}"
Failed Translation: "${segment.failed}"
Target Language: ${targetLang}`;
    const makeCall = async () => {
      const apiStart = Date.now();
      const response = await fetch("https://api.deepseek.com/chat/completions", {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          "Authorization": `Bearer ${this.apiKey}`
        },
        body: JSON.stringify({
          model: "deepseek-v4-flash",
          temperature: 0.1,
          messages: [
            { role: "system", content: systemPrompt },
            { role: "user", content: userContent }
          ]
        })
      });
      if (!response.ok) {
        const errText = await response.text();
        throw new Error(`Placeholder self-healing API error: ${response.status} - ${errText}`);
      }
      const data = await response.json();
      const duration = Date.now() - apiStart;
      this.totalNetworkTime += duration;
      const usage = data.usage || { prompt_tokens: 0, completion_tokens: 0 };
      this.totalPromptTokens += usage.prompt_tokens;
      this.totalCompletionTokens += usage.completion_tokens;
      let content = data.choices[0].message.content.trim();
      content = content.replace(/^['"]|['"]$/g, "").trim();
      console.log(`\x1B[32m[LQA Healing Success]\x1B[0m \u4FEE\u590D\u5B8C\u6210\uFF01
  - \u539F\u8BD1\u6587: "\x1B[31m${segment.failed}\x1B[0m"
  - \u65B0\u8BD1\u6587: "\x1B[32m${content}\x1B[0m"`);
      return content;
    };
    return this.callWithRetry(makeCall, 3, 1e3);
  }
  /**
   * 字幕 CPS 超标自愈修复：向大模型发起特定句子的压缩翻译请求
   */
  async repairSubtitleCps(provider, prompt, segment, duration, limit, targetLang) {
    console.log(`
\x1B[31m[Subtitle LQA Healing]\x1B[0m \u68C0\u6D4B\u5230\u8BD1\u6587\u8BED\u901F (CPS) \u8FBE\u5230 ${segment.cps.toFixed(1)}\uFF0C\u8D85\u6807\uFF01(\u9650\u5236: ${limit} CPS\uFF0C\u6301\u7EED\u65F6\u95F4: ${duration}s)\u3002`);
    console.log(`\u6B63\u5728\u542F\u52A8\u5B57\u5E55\u7F29\u51CF\u81EA\u6108\u673A\u5236...`);
    const systemPrompt = `You are a subtitle localization editor. The translation is too long for its video duration (${duration} seconds).
Please rewrite and shorten the translation to make its length strictly less than or equal to ${Math.floor(duration * limit)} characters in ${targetLang}.
You MUST maintain the core meaning, tone, style, and placeholders (like {0}, {1}, etc. if any).
Output ONLY the shortened translation string. Do not include markdown code blocks or explanations.`;
    const userContent = `Source Text: "${segment.source}"
Long Translation: "${segment.failed}"
Target Language: ${targetLang}`;
    const makeCall = async () => {
      const apiStart = Date.now();
      const response = await fetch("https://api.deepseek.com/chat/completions", {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          "Authorization": `Bearer ${this.apiKey}`
        },
        body: JSON.stringify({
          model: "deepseek-v4-flash",
          temperature: 0.1,
          messages: [
            { role: "system", content: systemPrompt },
            { role: "user", content: userContent }
          ]
        })
      });
      if (!response.ok) {
        const errText = await response.text();
        throw new Error(`Subtitle CPS self-healing API error: ${response.status} - ${errText}`);
      }
      const data = await response.json();
      const durationMs = Date.now() - apiStart;
      this.totalNetworkTime += durationMs;
      const usage = data.usage || { prompt_tokens: 0, completion_tokens: 0 };
      this.totalPromptTokens += usage.prompt_tokens;
      this.totalCompletionTokens += usage.completion_tokens;
      let content = data.choices[0].message.content.trim();
      content = content.replace(/^['"]|['"]$/g, "").trim();
      console.log(`\x1B[32m[Subtitle LQA Success]\x1B[0m \u7F29\u51CF\u4FEE\u590D\u5B8C\u6210\uFF01
  - \u539F\u8BD1\u6587: "\x1B[31m${segment.failed}\x1B[0m" (${segment.failed.length} \u5B57)
  - \u7F29\u77ED\u8BD1\u6587: "\x1B[32m${content}\x1B[0m" (${content.length} \u5B57)`);
      return content;
    };
    return this.callWithRetry(makeCall, 3, 1e3);
  }
  /**
   * 并发批处理翻译
   */
  async callBatchAPI(provider, prompt, segments, targetLang) {
    this.networkCallsCount++;
    const uniqueMap = /* @__PURE__ */ new Map();
    segments.forEach((seg, idx) => {
      if (!uniqueMap.has(seg)) {
        uniqueMap.set(seg, []);
      }
      uniqueMap.get(seg).push(idx);
    });
    const uniqueSegments = Array.from(uniqueMap.keys());
    const translations = new Array(segments.length);
    const cachedTranslations = /* @__PURE__ */ new Map();
    const toTranslateSegments = [];
    uniqueSegments.forEach((seg) => {
      const cacheKey = `${seg}|||${targetLang}`;
      if (this.translationMemory.has(cacheKey)) {
        cachedTranslations.set(seg, this.translationMemory.get(cacheKey));
      } else {
        const exactMatches = this.semanticTM.query(seg, 0.98, 1, targetLang);
        if (exactMatches.length > 0) {
          const match = exactMatches[0];
          console.log(`
\x1B[32m[Semantic TM Cache Hit]\x1B[0m \u627E\u5230\u8BED\u4E49\u9AD8\u5EA6\u76F8\u4F3C\u6587\u672C (\u76F8\u4F3C\u5EA6: ${match.similarity.toFixed(4)}): "${seg}" -> "${match.record.translation}"`);
          cachedTranslations.set(seg, match.record.translation);
          this.translationMemory.set(cacheKey, match.record.translation);
        } else {
          const fuzzyMatches = this.semanticTM.query(seg, 0.65, 3, targetLang);
          toTranslateSegments.push({ text: seg, examples: fuzzyMatches });
        }
      }
    });
    if (toTranslateSegments.length > 0) {
      await this.rateLimiter.acquire();
      const makeCall = async () => {
        console.log(`
\x1B[36m[LLM Gateway]\x1B[0m \u6B63\u5728\u8C03\u7528 DeepSeek API (\x1B[33mdeepseek-v4-flash\x1B[0m)\uFF0C\u5DF2\u6253\u5305 \x1B[32m${toTranslateSegments.length}\x1B[0m \u4E2A\u552F\u4E00\u6587\u672C\u6BB5\uFF0C\u76EE\u6807\u8BED\u8A00: \x1B[32m${targetLang}\x1B[0m...`);
        let glossaryPrompt = "";
        if (this.glossary && Object.keys(this.glossary).length > 0) {
          const sortedGlossary = Object.entries(this.glossary).sort((a, b) => a[0].localeCompare(b[0]));
          glossaryPrompt = "\n\u91CD\u8981\uFF1A\u60A8\u5FC5\u987B\u4E25\u683C\u9075\u5FAA\u4EE5\u4E0B\u672F\u8BED\u5BF9\u7167\u8868\u8FDB\u884C\u7FFB\u8BD1\uFF0C\u786E\u4FDD\u672F\u8BED\u7FFB\u8BD1\u5728\u5168\u6587\u4E2D\u7684\u4E00\u81F4\u6027\uFF1A\n" + sortedGlossary.map(([src, tgt]) => `  - "${src}" \u5FC5\u987B\u7FFB\u8BD1\u4E3A "${tgt}"`).join("\n");
        }
        let styleGuidePrompt = "";
        if (this.styleGuide) {
          styleGuidePrompt = "\n\u91CD\u8981\uFF1A\u60A8\u5FC5\u987B\u4E25\u683C\u9075\u5FAA\u4EE5\u4E0B\u7FFB\u8BD1\u98CE\u683C\u6307\u5357 (Style Guide Constraints)\uFF1A\n" + this.styleGuide.trim() + "\n";
        }
        const cleanBasePrompt = prompt.trim();
        const systemPrompt = `${cleanBasePrompt}
${glossaryPrompt}
${styleGuidePrompt}
\u60A8\u5FC5\u987B\u5C06\u8F93\u5165\u6570\u7EC4\u4E2D\u7684\u6240\u6709\u6587\u672C\u7FFB\u8BD1\u4E3A\u76EE\u6807\u8BED\u8A00\uFF1A${targetLang}\u3002
\u8F93\u5165\u6570\u7EC4\u4E2D\u7684\u6BCF\u4E00\u9879\u53EF\u80FD\u5305\u542B\u5F85\u7FFB\u8BD1\u6587\u672C "text" \u4EE5\u53CA\u53EF\u9009\u7684\u76F8\u4F3C\u5386\u53F2\u7FFB\u8BD1\u793A\u4F8B "examples" (RAG \u4E0A\u4E0B\u6587)\u3002\u7FFB\u8BD1\u65F6\u8BF7\u53C2\u8003\u793A\u4F8B\u7684\u98CE\u683C\u3001\u672F\u8BED\u548C\u8BED\u8C03\u3002
\u60A8\u5FC5\u987B\u8F93\u51FA\u4E14\u4EC5\u8F93\u51FA\u4E00\u4E2A\u7B26\u5408\u4EE5\u4E0B JSON \u683C\u5F0F\u7684\u5BF9\u8C61\uFF0C\u4E0D\u8981\u5305\u542B markdown \u683C\u5F0F\u6807\u8BB0\uFF08\u5982 \`\`\`json \u7B49\uFF09\uFF1A
{
  "translations": [
     // \u8FD9\u91CC\u662F\u5BF9\u5E94\u8F93\u5165\u7D22\u5F15\u7684\u8BD1\u6587\u5B57\u7B26\u4E32
  ]
}
\u6CE8\u610F\uFF1A\u8FD4\u56DE\u7684 "translations" \u6570\u7EC4\u5143\u7D20\u6570\u91CF\u5FC5\u987B\u521A\u597D\u4E0E\u8F93\u5165\u7684\u6570\u7EC4\u5143\u7D20\u6570\u91CF\u5B8C\u5168\u4E00\u81F4\uFF0C\u4E14\u4E0E\u8F93\u5165\u7684\u6570\u7EC4\u987A\u5E8F\u3001\u6570\u91CF\u4E00\u4E00\u5BF9\u5E94\u3002`.trim();
        const userContent = JSON.stringify(toTranslateSegments.map((item) => ({
          text: item.text,
          examples: item.examples.map((ex) => ({
            source: ex.record.text,
            translation: ex.record.translation
          }))
        })));
        const apiStart = Date.now();
        const response = await fetch("https://api.deepseek.com/chat/completions", {
          method: "POST",
          headers: {
            "Content-Type": "application/json",
            "Authorization": `Bearer ${this.apiKey}`
          },
          body: JSON.stringify({
            model: "deepseek-v4-flash",
            temperature: 0.1,
            response_format: { type: "json_object" },
            messages: [
              { role: "system", content: systemPrompt },
              { role: "user", content: userContent }
            ]
          })
        });
        if (!response.ok) {
          const errText = await response.text();
          throw new Error(`DeepSeek API error: ${response.status} - ${errText}`);
        }
        const data = await response.json();
        const duration = Date.now() - apiStart;
        this.totalNetworkTime += duration;
        const usage = data.usage || { prompt_tokens: 0, completion_tokens: 0 };
        this.totalPromptTokens += usage.prompt_tokens;
        this.totalCompletionTokens += usage.completion_tokens;
        const content = data.choices[0].message.content.trim();
        const cleanContent = content.replace(/^```json\s*/i, "").replace(/```$/, "").trim();
        const result = JSON.parse(cleanContent);
        if (!result.translations || !Array.isArray(result.translations)) {
          throw new Error("Invalid response format from DeepSeek: missing translations array");
        }
        return result.translations;
      };
      const newTranslations = await this.callWithRetry(makeCall, 3, 1e3);
      const isWestern = !/^(zh|cn|chi|ja|jp)/i.test(targetLang);
      const repairPromises = [];
      const failedIndices = [];
      for (let i = 0; i < newTranslations.length; i++) {
        let hasResidual = false;
        if (isWestern) {
          hasResidual = TranslationValidator.hasChineseResidual(newTranslations[i]);
        } else {
          hasResidual = TranslationValidator.hasWesternResidual(toTranslateSegments[i].text, newTranslations[i]);
        }
        if (hasResidual) {
          failedIndices.push(i);
          repairPromises.push(this.repairSegment(
            provider,
            prompt,
            { source: toTranslateSegments[i].text, failed: newTranslations[i] },
            targetLang
          ));
        }
      }
      if (repairPromises.length > 0) {
        const repairedResults = await Promise.all(repairPromises);
        failedIndices.forEach((failedIdx, arrayIdx) => {
          newTranslations[failedIdx] = repairedResults[arrayIdx];
        });
      }
      toTranslateSegments.forEach((item, index) => {
        const transText = newTranslations[index];
        const cacheKey = `${item.text}|||${targetLang}`;
        this.translationMemory.set(cacheKey, transText);
        cachedTranslations.set(item.text, transText);
        this.semanticTM.addRecord(item.text, transText, targetLang);
      });
    }
    uniqueSegments.forEach((seg) => {
      const transText = cachedTranslations.get(seg);
      const indices = uniqueMap.get(seg);
      indices.forEach((idx) => {
        translations[idx] = transText;
      });
    });
    if (this.glossary && Object.keys(this.glossary).length > 0) {
      const glossaryRepairPromises = [];
      const glossaryFailedIndices = [];
      for (let i = 0; i < translations.length; i++) {
        const violations = GlossaryValidator.checkViolations(segments[i], translations[i], this.glossary);
        if (violations.length > 0) {
          glossaryFailedIndices.push(i);
          glossaryRepairPromises.push(this.repairGlossarySegment(
            provider,
            prompt,
            { source: segments[i], failed: translations[i] },
            violations,
            targetLang
          ));
        }
      }
      if (glossaryRepairPromises.length > 0) {
        const repairedGlossaryResults = await Promise.all(glossaryRepairPromises);
        glossaryFailedIndices.forEach((failedIdx, arrayIdx) => {
          translations[failedIdx] = repairedGlossaryResults[arrayIdx];
          const seg = segments[failedIdx];
          const cacheKey = `${seg}|||${targetLang}`;
          this.translationMemory.set(cacheKey, repairedGlossaryResults[arrayIdx]);
          this.semanticTM.addRecord(seg, repairedGlossaryResults[arrayIdx], targetLang);
        });
      }
    }
    const placeholderRepairPromises = [];
    const placeholderFailedIndices = [];
    for (let i = 0; i < translations.length; i++) {
      const missing = LqaValidator.checkPlaceholders(segments[i], translations[i]);
      if (missing.length > 0) {
        placeholderFailedIndices.push(i);
        placeholderRepairPromises.push(this.repairPlaceholderSegment(
          provider,
          prompt,
          { source: segments[i], failed: translations[i] },
          missing,
          targetLang
        ));
      }
    }
    if (placeholderRepairPromises.length > 0) {
      const repairedPlaceholderResults = await Promise.all(placeholderRepairPromises);
      placeholderFailedIndices.forEach((failedIdx, arrayIdx) => {
        translations[failedIdx] = repairedPlaceholderResults[arrayIdx];
        const seg = segments[failedIdx];
        const cacheKey = `${seg}|||${targetLang}`;
        this.translationMemory.set(cacheKey, repairedPlaceholderResults[arrayIdx]);
        this.semanticTM.addRecord(seg, repairedPlaceholderResults[arrayIdx], targetLang);
      });
    }
    for (let i = 0; i < translations.length; i++) {
      translations[i] = PunctuationAdapter.adapt(translations[i], targetLang);
    }
    return translations;
  }
};
VortGateway.PunctuationAdapter = PunctuationAdapter;
VortGateway.TranslationValidator = TranslationValidator;
VortGateway.GlossaryValidator = GlossaryValidator;
VortGateway.LqaValidator = LqaValidator;
VortGateway.LocalVectorizer = LocalVectorizer;
VortGateway.SemanticTranslationMemory = SemanticTranslationMemory;

// vort/analyzer.js
var VortAnalyzer = class {
  /**
   * 静态校验编译所得 AST 语法树
   * @param {object} ast 解析出来的 AST 语法树
   * @returns {object[]} 返回错误列表，包含 { line, message }
   */
  static analyze(ast) {
    const errors = [];
    if (!ast || !ast.workflow) {
      errors.push({ line: 1, message: "\u7F3A\u5C11\u5408\u6CD5\u7684 workflow \u5DE5\u4F5C\u6D41\u58F0\u660E\u5757\u3002" });
      return errors;
    }
    const scope = {};
    const paramTypes = ast.workflow.paramTypes || {};
    ast.workflow.params.forEach((param) => {
      scope[param] = paramTypes[param] || "String";
    });
    const builtins = {
      "load_document": { args: ["String"], returnType: "Document" },
      "save_document": { args: ["Document", "String"], returnType: "Boolean" },
      "load_media": { args: ["String"], returnType: "Document" },
      "save_media": { args: ["Document", "String"], returnType: "Boolean" },
      "extract_text": { args: ["Document"], returnType: "List", pipelineInput: "Document" },
      "write_text": { args: ["Document", "List"], returnType: "Document", pipelineInput: "Document" },
      "compute_similarity": { args: ["String", "String"], returnType: "Float" },
      "estimate_row_heights": { args: ["List", "Float", "Float"], returnType: "List" },
      "find_active_subtitle": { args: ["List", "List", "Float"], returnType: "Int" },
      "load_extension": { args: ["String"], returnType: "Boolean" },
      "parallel": { args: ["Lambda"], returnType: "List", pipelineInput: "List" }
    };
    function inferType(expr, currentScope, lineNum) {
      if (!expr) return "Any";
      if (expr.type === "Literal") {
        const rawVal = expr.value;
        if (currentScope[rawVal] !== void 0) {
          return currentScope[rawVal];
        }
        if (!isNaN(rawVal)) {
          return rawVal.includes(".") ? "Float" : "Int";
        }
        if (rawVal === "true" || rawVal === "false") {
          return "Boolean";
        }
        return "String";
      }
      if (expr.type === "Call") {
        const funcName = expr.filter;
        const argTypes = expr.args.map((arg) => {
          if (currentScope[arg] !== void 0) {
            return currentScope[arg];
          }
          const val = arg.replace(/^['"]|['"]$/g, "");
          if (!isNaN(val)) return val.includes(".") ? "Float" : "Int";
          if (val === "true" || val === "false") return "Boolean";
          return "String";
        });
        if (/^load_(\w+)$/.test(funcName) && funcName !== "load_extension") {
          if (expr.args.length !== 1) {
            errors.push({
              line: lineNum,
              message: `\u52A0\u8F7D\u65B9\u6CD5 '${funcName}' \u671F\u5F85 1 \u4E2A\u53C2\u6570\uFF0C\u4F46\u5B9E\u9645\u4F20\u5165\u4E86 ${expr.args.length} \u4E2A\u3002`
            });
          } else if (argTypes[0] !== "String" && argTypes[0] !== "Any") {
            errors.push({
              line: lineNum,
              message: `\u52A0\u8F7D\u65B9\u6CD5 '${funcName}' \u7684\u53C2\u6570\u7C7B\u578B\u4E0D\u5339\u914D\uFF1A\u671F\u5F85 'String'\uFF0C\u4F46\u5B9E\u9645\u4F20\u5165\u4E3A '${argTypes[0]}'`
            });
          }
          return "Document";
        }
        if (/^save_(\w+)$/.test(funcName)) {
          if (expr.args.length < 2) {
            errors.push({
              line: lineNum,
              message: `\u4FDD\u5B58\u65B9\u6CD5 '${funcName}' \u671F\u5F85\u81F3\u5C11 2 \u4E2A\u53C2\u6570 (doc, path)\uFF0C\u4F46\u5B9E\u9645\u4F20\u5165\u4E86 ${expr.args.length} \u4E2A\u3002`
            });
          } else {
            if (argTypes[0] !== "Document" && argTypes[0] !== "Any") {
              errors.push({
                line: lineNum,
                message: `\u4FDD\u5B58\u65B9\u6CD5 '${funcName}' \u7684\u7B2C 1 \u4E2A\u53C2\u6570\u7C7B\u578B\u4E0D\u5339\u914D\uFF1A\u671F\u5F85 'Document'\uFF0C\u4F46\u5B9E\u9645\u4F20\u5165\u4E3A '${argTypes[0]}'`
              });
            }
            if (argTypes[1] !== "String" && argTypes[1] !== "Any") {
              errors.push({
                line: lineNum,
                message: `\u4FDD\u5B58\u65B9\u6CD5 '${funcName}' \u7684\u7B2C 2 \u4E2A\u53C2\u6570\u7C7B\u578B\u4E0D\u5339\u914D\uFF1A\u671F\u5F85 'String'\uFF0C\u4F46\u5B9E\u9645\u4F20\u5165\u4E3A '${argTypes[1]}'`
              });
            }
          }
          return "Boolean";
        }
        const sig = builtins[funcName];
        if (!sig) {
          if (funcName.includes(".") && funcName.endsWith(".translate")) {
            return "String";
          }
          return "Any";
        }
        if (funcName !== "parallel") {
          if (expr.args.length < sig.args.length) {
            errors.push({
              line: lineNum,
              message: `\u51FD\u6570 '${funcName}' \u671F\u5F85\u81F3\u5C11 ${sig.args.length} \u4E2A\u53C2\u6570\uFF0C\u4F46\u5B9E\u9645\u4EC5\u4F20\u5165\u4E86 ${expr.args.length} \u4E2A\u3002`
            });
          } else {
            sig.args.forEach((expected, idx) => {
              const actual = argTypes[idx];
              if (expected === "Float" && actual === "Int") return;
              if (expected !== "Any" && actual !== "Any" && expected !== actual) {
                errors.push({
                  line: lineNum,
                  message: `\u51FD\u6570 '${funcName}' \u7684\u7B2C ${idx + 1} \u4E2A\u53C2\u6570\u7C7B\u578B\u4E0D\u5339\u914D\uFF1A\u671F\u5F85 '${expected}'\uFF0C\u4F46\u5B9E\u9645\u4F20\u5165\u4E3A '${actual}'`
                });
              }
            });
          }
        }
        return sig.returnType;
      }
      if (expr.type === "Pipeline") {
        let currentType = inferType({ type: "Literal", value: expr.input }, currentScope, lineNum);
        expr.steps.forEach((step) => {
          if (step.filter === "parallel") {
            if (currentType !== "List" && currentType !== "Any") {
              errors.push({
                line: lineNum,
                message: `\u7BA1\u9053\u9519\u8BEF\uFF1A'parallel' \u5E76\u53D1\u7B97\u5B50\u4EC5\u652F\u6301\u5BF9 'List' \u7C7B\u578B\u8FDB\u884C\u8FED\u4EE3\uFF0C\u4F46\u524D\u5E8F\u8F93\u51FA\u4E3A '${currentType}'`
              });
            }
            const lambda = step.args[0];
            if (lambda && lambda.type === "Lambda") {
              const lambdaScope = { ...currentScope };
              lambdaScope[lambda.param] = "String";
              const lambdaBodyType = inferType(lambda.body, lambdaScope, lineNum);
              currentType = "List";
            } else {
              currentType = "List";
            }
            return;
          }
          if (step.agent) {
            if (step.method === "translate") {
              if (currentType !== "String" && currentType !== "List" && currentType !== "Any") {
                errors.push({
                  line: lineNum,
                  message: `\u7BA1\u9053\u9519\u8BEF\uFF1A\u667A\u80FD\u4F53\u7FFB\u8BD1\u7B97\u5B50\u4EC5\u652F\u6301\u8F93\u5165 'String' \u6216 'List'\uFF0C\u4F46\u524D\u5E8F\u8F93\u51FA\u4E3A '${currentType}'`
                });
              }
              return;
            }
          }
          const funcName = step.filter;
          const sig = builtins[funcName];
          if (sig) {
            if (sig.pipelineInput && currentType !== sig.pipelineInput && currentType !== "Any") {
              errors.push({
                line: lineNum,
                message: `\u7BA1\u9053\u9519\u8BEF\uFF1A\u7B97\u5B50 '${funcName}' \u671F\u5F85\u7BA1\u9053\u8F93\u5165\u4E3A '${sig.pipelineInput}'\uFF0C\u4F46\u524D\u5E8F\u8F93\u51FA\u4E3A '${currentType}'`
              });
            }
            const remainingExpectedArgs = sig.args.slice(1);
            const argTypes = step.args.map((arg) => {
              if (currentScope[arg] !== void 0) {
                return currentScope[arg];
              }
              const val = arg.replace(/^['"]|['"]$/g, "");
              if (!isNaN(val)) return val.includes(".") ? "Float" : "Int";
              if (val === "true" || val === "false") return "Boolean";
              return "String";
            });
            if (step.args.length < remainingExpectedArgs.length) {
              errors.push({
                line: lineNum,
                message: `\u7B97\u5B50 '${funcName}' \u671F\u5F85\u81F3\u5C11\u8FFD\u52A0\u4F20\u5165 ${remainingExpectedArgs.length} \u4E2A\u53C2\u6570\uFF0C\u4F46\u5B9E\u9645\u4EC5\u4F20\u5165\u4E86 ${step.args.length} \u4E2A\u3002`
              });
            } else {
              remainingExpectedArgs.forEach((expected, idx) => {
                const actual = argTypes[idx];
                if (expected === "Float" && actual === "Int") return;
                if (expected !== "Any" && actual !== "Any" && expected !== actual) {
                  errors.push({
                    line: lineNum,
                    message: `\u7B97\u5B50 '${funcName}' \u7684\u7B2C ${idx + 2} \u4E2A\u53C2\u6570\u7C7B\u578B\u4E0D\u5339\u914D\uFF1A\u671F\u5F85 '${expected}'\uFF0C\u4F46\u5B9E\u9645\u4F20\u5165\u4E3A '${actual}'`
                  });
                }
              });
            }
            currentType = sig.returnType;
          } else if (/^save_(\w+)$/.test(funcName)) {
            if (currentType !== "Document" && currentType !== "Any") {
              errors.push({
                line: lineNum,
                message: `\u7BA1\u9053\u9519\u8BEF\uFF1A\u4FDD\u5B58\u7B97\u5B50 '${funcName}' \u671F\u5F85\u524D\u5E8F\u8F93\u5165\u4E3A 'Document'\uFF0C\u4F46\u5B9E\u9645\u4F20\u5165\u4E3A '${currentType}'`
              });
            }
            currentType = "Boolean";
          } else {
            currentType = "Any";
          }
        });
        return currentType;
      }
      return "Any";
    }
    ast.workflow.body.forEach((statement, index) => {
      const lineNum = index + 1;
      if (statement.type === "Assignment") {
        const varType = inferType(statement.expr, scope, lineNum);
        scope[statement.var] = varType;
      } else if (statement.type === "Return") {
        const retVal = statement.value;
        if (retVal && scope[retVal] === void 0) {
          const cleanVal = retVal.replace(/^['"]|['"]$/g, "");
          if (isNaN(cleanVal) && cleanVal !== "true" && cleanVal !== "false") {
            errors.push({
              line: lineNum,
              message: `\u5DE5\u4F5C\u6D41\u8FD4\u56DE\u9519\u8BEF\uFF1A\u5C1D\u8BD5\u8FD4\u56DE\u672A\u5B9A\u4E49\u7684\u53D8\u91CF '${retVal}'`
            });
          }
        }
      }
    });
    return errors;
  }
};

// vort/lsp.js
import path3 from "path";
var documentRegistry = /* @__PURE__ */ new Map();
var VortLsp = class _VortLsp {
  static start() {
    let buffer = "";
    process.stdin.on("data", (chunk) => {
      buffer += chunk.toString("utf-8");
      while (true) {
        const contentLengthIndex = buffer.indexOf("Content-Length:");
        if (contentLengthIndex === -1) {
          break;
        }
        const headerEndIndex = buffer.indexOf("\r\n\r\n", contentLengthIndex);
        if (headerEndIndex === -1) {
          break;
        }
        const contentLengthHeader = buffer.substring(contentLengthIndex, headerEndIndex);
        const contentLengthMatch = /Content-Length:\s*(\d+)/i.exec(contentLengthHeader);
        if (!contentLengthMatch) {
          buffer = buffer.substring(headerEndIndex + 4);
          continue;
        }
        const contentLength = parseInt(contentLengthMatch[1], 10);
        const messageStartIndex = headerEndIndex + 4;
        if (buffer.length - messageStartIndex < contentLength) {
          break;
        }
        const payloadStr = buffer.substring(messageStartIndex, messageStartIndex + contentLength);
        buffer = buffer.substring(messageStartIndex + contentLength);
        try {
          const message = JSON.parse(payloadStr);
          _VortLsp.handleMessage(message);
        } catch (e) {
          process.stderr.write(`[LSP Error] Failed to parse message: ${e.message}
`);
        }
      }
    });
    process.stdin.on("end", () => {
      process.exit(0);
    });
  }
  static send(msg) {
    const payload = JSON.stringify(msg);
    const header = `Content-Length: ${Buffer.byteLength(payload, "utf-8")}\r
\r
`;
    process.stdout.write(header + payload);
  }
  static handleMessage(msg) {
    const { id, method, params } = msg;
    switch (method) {
      case "initialize": {
        _VortLsp.send({
          jsonrpc: "2.0",
          id,
          result: {
            capabilities: {
              textDocumentSync: 1,
              // Full Sync
              completionProvider: {
                resolveProvider: false,
                triggerCharacters: [".", "(", "|", ">", ":"]
              },
              hoverProvider: true
            }
          }
        });
        break;
      }
      case "initialized":
        break;
      case "textDocument/didOpen": {
        const docUri = params.textDocument.uri;
        const text = params.textDocument.text;
        documentRegistry.set(docUri, text);
        _VortLsp.runDiagnostics(docUri, text);
        break;
      }
      case "textDocument/didChange": {
        const docUri = params.textDocument.uri;
        const text = params.contentChanges[0].text;
        documentRegistry.set(docUri, text);
        _VortLsp.runDiagnostics(docUri, text);
        break;
      }
      case "textDocument/didClose": {
        documentRegistry.delete(params.textDocument.uri);
        break;
      }
      case "textDocument/completion": {
        const completions = _VortLsp.getCompletions(params);
        _VortLsp.send({
          jsonrpc: "2.0",
          id,
          result: completions
        });
        break;
      }
      case "textDocument/hover": {
        const hover = _VortLsp.getHover(params);
        _VortLsp.send({
          jsonrpc: "2.0",
          id,
          result: hover
        });
        break;
      }
      case "shutdown": {
        _VortLsp.send({
          jsonrpc: "2.0",
          id,
          result: null
        });
        break;
      }
      case "exit": {
        process.exit(0);
        break;
      }
      default:
        if (id !== void 0) {
          _VortLsp.send({
            jsonrpc: "2.0",
            id,
            error: {
              code: -32601,
              message: `Method not found: ${method}`
            }
          });
        }
        break;
    }
  }
  static runDiagnostics(uri, text) {
    const diagnostics = [];
    try {
      const ast = VortParser.parse(text);
      const semanticErrors = VortAnalyzer.analyze(ast);
      semanticErrors.forEach((err) => {
        const line = err.line ? err.line - 1 : 0;
        diagnostics.push({
          range: {
            start: { line, character: 0 },
            end: { line, character: 100 }
          },
          severity: 1,
          // Error
          source: "Vort Type Checker",
          message: err.message
        });
      });
    } catch (err) {
      const line = err.line ? err.line - 1 : 0;
      diagnostics.push({
        range: {
          start: { line, character: 0 },
          end: { line, character: 100 }
        },
        severity: 1,
        // Error
        source: "Vort Compiler",
        message: err.message
      });
    }
    _VortLsp.send({
      jsonrpc: "2.0",
      method: "textDocument/publishDiagnostics",
      params: {
        uri,
        diagnostics
      }
    });
  }
  static getCompletions(params) {
    const keywords = [
      { label: "agent", kind: 14, detail: "Keyword", documentation: "Declares a translation agent provider." },
      { label: "workflow", kind: 14, detail: "Keyword", documentation: "Declares a document translation pipeline workflow." },
      { label: "let", kind: 14, detail: "Keyword", documentation: "Declares a workflow variable." },
      { label: "return", kind: 14, detail: "Keyword", documentation: "Returns the result of the workflow." }
    ];
    const types = [
      { label: "String", kind: 22, detail: "Type", documentation: "Unicode string type." },
      { label: "Int", kind: 22, detail: "Type", documentation: "Integer type." },
      { label: "Float", kind: 22, detail: "Type", documentation: "Floating point number type." },
      { label: "Boolean", kind: 22, detail: "Type", documentation: "Boolean true/false type." },
      { label: "Document", kind: 22, detail: "Type", documentation: "Opaque parsed document handle." },
      { label: "List", kind: 22, detail: "Type", documentation: "Array/List collection type." }
    ];
    const builtins = [
      { label: "load_document", kind: 3, detail: "Built-in Function", documentation: "load_document(path: String) -> Document\n\nLoads a document, automatically detecting its format from extension." },
      { label: "save_document", kind: 3, detail: "Built-in Function", documentation: "save_document(doc: Document, path: String) -> Boolean\n\nSaves a document to the specified destination path." },
      { label: "extract_text", kind: 3, detail: "Built-in Function", documentation: "extract_text() -> List\n\nExtracts segments of translatable text from a loaded document." },
      { label: "write_text", kind: 3, detail: "Built-in Function", documentation: "write_text(segments: List) -> Document\n\nWrites translated segments back into the document template." },
      { label: "parallel", kind: 3, detail: "Built-in Function", documentation: "parallel(lambda) -> List\n\nApplies an operation or agent translation to a list in parallel." },
      { label: "compute_similarity", kind: 3, detail: "Built-in Function", documentation: "compute_similarity(a: String, b: String) -> Float\n\nComputes cosine similarity between two sentences using local vectorizer." },
      { label: "estimate_row_heights", kind: 3, detail: "Built-in Function", documentation: "estimate_row_heights(segments: List, col_width: Float, min_height: Float) -> List\n\nEstimates row heights based on text metrics." },
      { label: "find_active_subtitle", kind: 3, detail: "Built-in Function", documentation: "find_active_subtitle(starts: List, ends: List, time_ms: Float) -> Int\n\nSearches active subtitle index at current timestamp using binary search." },
      { label: "load_extension", kind: 3, detail: "Built-in Function", documentation: "load_extension(plugin_path: String) -> Boolean\n\nDynamically loads a JavaScript plugin loader." },
      { label: "load_media", kind: 3, detail: "Built-in Function", documentation: "load_media(path: String) -> Document\n\nLoads a media file (audio/video), automatically detecting its format from extension." },
      { label: "save_media", kind: 3, detail: "Built-in Function", documentation: "save_media(media: Document, path: String, [codec: String], [resolution: String], [bitrate: String], [hw_accel: String]) -> Boolean\n\nSaves/converts a media file to the specified destination path with optional configurations." }
    ];
    const providers = [
      { label: "deepseek/deepseek-v4-flash", kind: 12, detail: "Model Provider" },
      { label: "deepseek/deepseek-chat", kind: 12, detail: "Model Provider" },
      { label: "openai/gpt-4o", kind: 12, detail: "Model Provider" }
    ];
    return [...keywords, ...types, ...builtins, ...providers];
  }
  static getWordAtPosition(text, lineNum, charNum) {
    if (!text) return null;
    const lines = text.split("\n");
    if (lineNum >= lines.length) return null;
    const line = lines[lineNum];
    let start = charNum;
    while (start > 0 && /[a-zA-Z0-9_]/.test(line[start - 1])) {
      start--;
    }
    let end = charNum;
    while (end < line.length && /[a-zA-Z0-9_]/.test(line[end])) {
      end++;
    }
    return line.substring(start, end);
  }
  static getHover(params) {
    const uri = params.textDocument.uri;
    const text = documentRegistry.get(uri);
    if (!text) return null;
    const line = params.position.line;
    const character = params.position.character;
    const word = _VortLsp.getWordAtPosition(text, line, character);
    if (!word) return null;
    const hovers = {
      "load_document": "**load_document(filePath: String) -> Document**\n\nLoads a document, automatically detecting and invoking the parser module matching the file extension (e.g. `.docx`, `.xlsx`, `.srt`, `.dxf`, etc.).",
      "save_document": "**save_document(doc: Document, outputPath: String) -> Boolean**\n\nSerializes the modified document back into the original formatting format and saves it to the target file path.",
      "extract_text": "**extract_text(doc: Document) -> List**\n\nExtracts a list of all translatable text segments from the document structure, filtering out metadata and geometries.",
      "write_text": "**write_text(doc: Document, segments: List) -> Document**\n\nOverwrites/updates the text nodes of the document template with the translated segments, while keeping styles intact.",
      "parallel": "**parallel(lambda) -> List**\n\nApplies an operation or agent translation function to each item in the collection concurrently.",
      "compute_similarity": "**compute_similarity(sentenceA: String, sentenceB: String) -> Float**\n\nCalls the Rust WASM typesetting engine to compute sentence cosine similarity locally.",
      "estimate_row_heights": "**estimate_row_heights(segments: List, columnWidth: Float, minHeight: Float) -> List**\n\nEstimates appropriate rendering height for a list of bilingual segments in table cells.",
      "find_active_subtitle": "**find_active_subtitle(starts: List, ends: List, timeMs: Float) -> Int**\n\nLocates the active subtitle segment index matching the target playback timestamp.",
      "load_extension": "**load_extension(pluginPath: String) -> Boolean**\n\nLoads a third-party document parser plugin dynamically, mapping its registered extension into the compiler runtime.",
      "load_media": "**load_media(filePath: String) -> Document**\n\nLoads a media file (audio/video), automatically detecting its format from extension.",
      "save_media": "**save_media(media: Document, outputPath: String, [codec: String], [resolution: String], [bitrate: String], [hw_accel: String]) -> Boolean**\n\nSaves or converts a media file to the target format with optional parameters (video codec, target resolution, audio bitrate, and hardware acceleration toggle).",
      "agent": "**agent <Name> { ... }**\n\nDeclares an AI Translation Agent, specifying the model provider, prompt, temperature, and other hyperparameters.",
      "workflow": "**workflow <Name>(...) { ... }**\n\nDefines the main execution pipeline of the translation project.",
      "let": "**let <variable> = <expression>**\n\nAssigns the result of an expression or filter pipeline to a local variable.",
      "return": "**return <value>**\n\nReturns the final result of the workflow."
    };
    if (hovers[word]) {
      return {
        contents: {
          kind: "markdown",
          value: hovers[word]
        }
      };
    }
    return null;
  }
};

// vort/cli.js
import readline from "readline";
function printUsage() {
  console.log("\n\x1B[33mVort \u672C\u5730\u5316\u7F16\u8BD1\u5668 SDK \u5DE5\u5177\u94FE (Vort Compiler SDK)\x1B[0m");
  console.log("\x1B[33m\u7528\u6CD5:\x1B[0m");
  console.log("  1. \u521D\u59CB\u5316\u9879\u76EE\u7ED3\u6784 (Project Scaffolding):");
  console.log("     node vort/cli.js init [\u76EE\u6807\u76EE\u5F55]");
  console.log("  2. \u811A\u672C\u8BED\u6CD5\u8BCA\u65AD (Linter Check):");
  console.log("     node vort/cli.js check <vort\u811A\u672C\u8DEF\u5F84>");
  console.log("  3. \u542F\u52A8\u8BED\u8A00\u670D\u52A1\u5668 (Language Server):");
  console.log("     node vort/cli.js lsp");
  console.log("  4. \u542F\u52A8\u4EA4\u4E92\u5F0F\u7EC8\u7AEF (REPL Shell):");
  console.log("     node vort/cli.js repl");
  console.log("  5. \u6267\u884C\u7FFB\u8BD1\u5DE5\u4F5C\u6D41 (Workflow Run):");
  console.log("     node vort/cli.js run <vort\u811A\u672C\u8DEF\u5F84> <\u8F93\u5165\u6587\u4EF6\u8DEF\u5F84> <\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84> [\u76EE\u6807\u8BED\u8A00]");
  console.log("     (\u4E5F\u53EF\u4EE5\u7701\u7565 'run' \u5173\u952E\u5B57\u76F4\u63A5\u6267\u884C:)");
  console.log("     node vort/cli.js <vort\u811A\u672C\u8DEF\u5F84> <\u8F93\u5165\u6587\u4EF6\u8DEF\u5F84> <\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84> [\u76EE\u6807\u8BED\u8A00]");
  console.log("\n\x1B[33m\u793A\u4F8B:\x1B[0m");
  console.log("     node vort/cli.js init my-l10n-project");
  console.log("     node vort/cli.js check my-project/translate.vort");
  console.log("     node vort/cli.js lsp");
  console.log("     node vort/cli.js repl");
  console.log("     node vort/cli.js run my-project/translate.vort input.docx output.docx English\n");
}
async function runInit(destDir) {
  console.log(`
\x1B[36m[Vort Scaffolder]\x1B[0m \u6B63\u5728\u521D\u59CB\u5316\u672C\u5730\u5316\u9879\u76EE\u4E8E\u76EE\u5F55: \x1B[34m${destDir}\x1B[0m...`);
  if (!fs15.existsSync(destDir)) {
    fs15.mkdirSync(destDir, { recursive: true });
  }
  const glossaryTemplate = {
    "Authorized Party": "\u88AB\u6388\u6743\u65B9",
    "Wuhan Aichuansi": "\u6B66\u6C49\u7231\u5DDD\u601D"
  };
  const styleGuideTemplate = `# Vort L10N Style Guide

## General Rules
- Use clear, professional, and natural terminology.
- Maintain formatting and placeholders exactly.
- Keep brand names in their original case.
`;
  const workflowTemplate = `// Vort L10N \u5DE5\u4F5C\u6D41\u793A\u4F8B
// \u4F7F\u7528\u65B9\u5F0F: node dist/vort.js translate_docx.vort input.docx output_en.docx English

agent Translator {
    provider: "deepseek/deepseek-v4-flash",
    temperature: 0.1,
    prompt: "Translate this sentence to the target language. Keep all placeholders (like {0}, {1}) exactly."
}

workflow TranslateDocx(input_path: String, output_path: String, target_lang: String) {
    let doc = load_docx(input_path)
    let segments = doc | extract_text()
    let translated = segments | parallel(seg => seg | Translator.translate(target_lang))
    let result = doc | write_text(translated) | save_docx(output_path)
    return result
}
`;
  const semanticMemoryTemplate = [];
  try {
    fs15.writeFileSync(path4.join(destDir, "glossary.json"), JSON.stringify(glossaryTemplate, null, 2), "utf-8");
    fs15.writeFileSync(path4.join(destDir, "style_guide.md"), styleGuideTemplate, "utf-8");
    fs15.writeFileSync(path4.join(destDir, "translate_docx.vort"), workflowTemplate, "utf-8");
    fs15.writeFileSync(path4.join(destDir, "semantic_memory.json"), JSON.stringify(semanticMemoryTemplate, null, 2), "utf-8");
    console.log(`\x1B[32m\u2714 \u521D\u59CB\u5316\u6210\u529F\uFF01\u5DF2\u751F\u6210\u4EE5\u4E0B\u6A21\u677F\u6587\u4EF6:\x1B[0m`);
    console.log(`  - ${path4.join(destDir, "glossary.json")} (\u672F\u8BED\u8868\u6A21\u677F)`);
    console.log(`  - ${path4.join(destDir, "style_guide.md")} (\u98CE\u683C\u6307\u5357\u6A21\u677F)`);
    console.log(`  - ${path4.join(destDir, "translate_docx.vort")} (Word \u7FFB\u8BD1\u5DE5\u4F5C\u6D41\u6A21\u677F)`);
    console.log(`  - ${path4.join(destDir, "semantic_memory.json")} (\u7A7A\u767D\u5411\u91CF/\u8BED\u4E49\u7FFB\u8BD1\u8BB0\u5FC6\u5E93)`);
  } catch (e) {
    console.error(`\x1B[31m[\u9519\u8BEF]\x1B[0m \u65E0\u6CD5\u751F\u6210\u6A21\u677F\u9879\u76EE:`, e.message);
    process.exit(1);
  }
}
async function runCheck(scriptPath) {
  console.log(`
\x1B[36m[Vort Diagnostics]\x1B[0m \u6B63\u5728\u9759\u6001\u6821\u9A8C Vort \u811A\u672C\u8BED\u6CD5: \x1B[34m${scriptPath}\x1B[0m`);
  if (!fs15.existsSync(scriptPath)) {
    console.error(`\x1B[31m[\u9519\u8BEF]\x1B[0m \u627E\u4E0D\u5230 Vort \u811A\u672C\u6587\u4EF6: ${scriptPath}`);
    process.exit(1);
  }
  const code = fs15.readFileSync(scriptPath, "utf-8");
  try {
    const ast = VortParser.parse(code);
    const semanticErrors = VortAnalyzer.analyze(ast);
    if (semanticErrors.length > 0) {
      console.error(`\x1B[31m\u2718 [Diagnostics Failed] \u53D1\u73B0\u8BED\u4E49/\u7C7B\u578B\u6821\u9A8C\u9519\u8BEF:\x1B[0m`);
      semanticErrors.forEach((err) => {
        console.error(`  - \u884C ${err.line}: \x1B[33m${err.message}\x1B[0m`);
      });
      process.exit(1);
    }
    console.log(`\x1B[32m\u2714 [Diagnostics Success]\x1B[0m \u811A\u672C\u6821\u9A8C\u901A\u8FC7\uFF0C\u672A\u53D1\u73B0\u8BED\u6CD5\u548C\u7C7B\u578B\u9519\u8BEF\u3002`);
    console.log(`  - \u5DE5\u4F5C\u6D41\u540D\u79F0: ${ast.workflow.name}`);
    console.log(`  - \u8F93\u5165\u53C2\u6570: ${ast.workflow.params.join(", ")}`);
    process.exit(0);
  } catch (err) {
    console.error(`\x1B[31m\u2718 [Diagnostics Failed]\x1B[0m \u8BED\u6CD5\u89E3\u6790\u9519\u8BEF:`);
    console.error(`  - \u9519\u8BEF\u8BE6\u60C5: \x1B[33m${err.message}\x1B[0m`);
    process.exit(1);
  }
}
async function runRepl() {
  console.log("\n\x1B[35m[Vort REPL]\x1B[0m \u6B22\u8FCE\u8FDB\u5165 Vort \u4EA4\u4E92\u5F0F\u547D\u4EE4\u884C\u5DE5\u5177 (REPL)");
  console.log("\u8F93\u5165 \x1B[33m.exit\x1B[0m \u6216\u6309 \x1B[33mCtrl+C\x1B[0m \u9000\u51FA\uFF0C\u8F93\u5165 \x1B[33m.help\x1B[0m \u67E5\u770B\u5185\u7F6E\u7B97\u5B50\u8BF4\u660E\u3002\n");
  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
    prompt: "vort> "
  });
  const gateway = new VortGateway();
  const mockAst = {
    agents: {},
    workflow: { name: "REPL_Workflow", params: [], body: [] }
  };
  const runtime = new VortRuntime(mockAst, gateway);
  rl.prompt();
  rl.on("line", async (line) => {
    const trimmed = line.trim();
    if (trimmed === ".exit") {
      rl.close();
      return;
    }
    if (trimmed === ".help") {
      console.log("\n\u5185\u7F6E\u5E38\u7528\u7B97\u5B50\u4E0E\u5168\u5C40\u51FD\u6570\uFF1A");
      console.log("  - load_document(path) / load_media(path)");
      console.log("  - save_document(doc, path) / save_media(doc, path)");
      console.log("  - compute_similarity(strA, strB)");
      console.log("  - estimate_row_heights(segments, colWidth, minHeight)");
      console.log("  - find_active_subtitle(starts, ends, timeMs)");
      console.log('\u4F7F\u7528\u793A\u4F8B: let a = compute_similarity("\u732B", "\u732B\u54AA")');
      console.log("\u4F7F\u7528\u793A\u4F8B: a\n");
      rl.prompt();
      return;
    }
    if (!trimmed) {
      rl.prompt();
      return;
    }
    try {
      if (trimmed.startsWith("let ")) {
        const eqIdx = trimmed.indexOf("=");
        if (eqIdx === -1) {
          throw new Error("\u8D4B\u503C\u8868\u8FBE\u5F0F\u7F3A\u5C11 '='");
        }
        const varName = trimmed.substring(4, eqIdx).trim();
        const exprText = trimmed.substring(eqIdx + 1).trim();
        const parsedExpr = VortParser.parseExpr(exprText);
        const value = await runtime.evalExpr(parsedExpr);
        runtime.variables[varName] = value;
        console.log(`${varName} = ${typeof value === "object" ? JSON.stringify(value) : value}`);
      } else {
        const parsedExpr = VortParser.parseExpr(trimmed);
        const value = await runtime.evalExpr(parsedExpr);
        console.log(typeof value === "object" ? JSON.stringify(value) : value);
      }
    } catch (err) {
      console.error(`\x1B[31m[Error]\x1B[0m ${err.message}`);
    }
    rl.prompt();
  });
  rl.on("close", () => {
    console.log("\n\u518D\u89C1\uFF01");
    process.exit(0);
  });
}
async function runTranslate(scriptPath, inputPath, outputPath, targetLang) {
  if (!fs15.existsSync(scriptPath)) {
    console.error(`\x1B[31m[\u9519\u8BEF]\x1B[0m \u627E\u4E0D\u5230 Vort \u811A\u672C\u6587\u4EF6: ${scriptPath}`);
    process.exit(1);
  }
  if (!fs15.existsSync(inputPath)) {
    console.error(`\x1B[31m[\u9519\u8BEF]\x1B[0m \u627E\u4E0D\u5230\u8F93\u5165\u6587\u4EF6: ${inputPath}`);
    process.exit(1);
  }
  const outputDir = path4.dirname(outputPath);
  if (!fs15.existsSync(outputDir)) {
    fs15.mkdirSync(outputDir, { recursive: true });
  }
  console.log(`
\x1B[32m[Vort CLI]\x1B[0m \u6B63\u5728\u7F16\u8BD1\u811A\u672C: \x1B[34m${scriptPath}\x1B[0m`);
  const code = fs15.readFileSync(scriptPath, "utf-8");
  let ast;
  try {
    ast = VortParser.parse(code);
    console.log(`\x1B[32m[Vort CLI]\x1B[0m \u7F16\u8BD1\u6210\u529F\u3002\u4E3B\u5DE5\u4F5C\u6D41: \x1B[35m${ast.workflow.name}\x1B[0m`);
  } catch (err) {
    console.error(`\x1B[31m[\u7F16\u8BD1\u5931\u8D25]\x1B[0m \u8BED\u6CD5\u89E3\u6790\u9519\u8BEF:`, err.message);
    process.exit(1);
  }
  const gateway = new VortGateway();
  let glossary = null;
  const cwdGlossaryPath = path4.join(process.cwd(), "glossary.json");
  const scriptGlossaryPath = path4.join(path4.dirname(scriptPath), "glossary.json");
  if (fs15.existsSync(cwdGlossaryPath)) {
    try {
      glossary = JSON.parse(fs15.readFileSync(cwdGlossaryPath, "utf-8"));
      console.log(`\x1B[32m[Vort CLI]\x1B[0m \u68C0\u6D4B\u5230\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u4E0B\u5B58\u5728\u672F\u8BED\u8868\uFF0C\u81EA\u52A8\u8F7D\u5165\u4E2D...`);
    } catch (e) {
      console.warn(`\x1B[33m[Vort CLI \u8B66\u544A]\x1B[0m \u65E0\u6CD5\u89E3\u6790\u5DE5\u4F5C\u76EE\u5F55\u4E0B\u7684 glossary.json:`, e.message);
    }
  } else if (fs15.existsSync(scriptGlossaryPath)) {
    try {
      glossary = JSON.parse(fs15.readFileSync(scriptGlossaryPath, "utf-8"));
      console.log(`\x1B[32m[Vort CLI]\x1B[0m \u68C0\u6D4B\u5230\u811A\u672C\u540C\u76EE\u5F55\u4E0B\u5B58\u5728\u672F\u8BED\u8868\uFF0C\u81EA\u52A8\u8F7D\u5165\u4E2D...`);
    } catch (e) {
      console.warn(`\x1B[33m[Vort CLI \u8B66\u544A]\x1B[0m \u65E0\u6CD5\u89E3\u6790\u811A\u672C\u76EE\u5F55\u4E0B\u7684 glossary.json:`, e.message);
    }
  }
  if (glossary) {
    gateway.setGlossary(glossary);
  }
  let styleGuide = "";
  const stylePaths = [
    path4.join(process.cwd(), "style_guide.md"),
    path4.join(process.cwd(), "style_guide.txt"),
    path4.join(path4.dirname(scriptPath), "style_guide.md"),
    path4.join(path4.dirname(scriptPath), "style_guide.txt")
  ];
  for (const p of stylePaths) {
    if (fs15.existsSync(p)) {
      try {
        styleGuide = fs15.readFileSync(p, "utf-8");
        gateway.setStyleGuide(styleGuide);
        break;
      } catch (e) {
        console.warn(`\x1B[33m[Vort CLI \u8B66\u544A]\x1B[0m \u65E0\u6CD5\u8BFB\u53D6\u98CE\u683C\u6307\u5357 ${p}:`, e.message);
      }
    }
  }
  const tmPath = path4.join(process.cwd(), "translation_memory.json");
  if (fs15.existsSync(tmPath)) {
    try {
      const tmData = JSON.parse(fs15.readFileSync(tmPath, "utf-8"));
      let tmCount = 0;
      Object.entries(tmData).forEach(([k, v]) => {
        gateway.translationMemory.set(k, v);
        tmCount++;
      });
      console.log(`\x1B[32m[Vort CLI]\x1B[0m \u6210\u529F\u5BFC\u5165\u5386\u53F2\u7FFB\u8BD1\u8BB0\u5FC6\u5E93\uFF0C\u5171\u52A0\u8F7D ${tmCount} \u6761\u8BB0\u5F55\u3002`);
    } catch (e) {
      console.warn(`\x1B[33m[Vort CLI \u8B66\u544A]\x1B[0m \u65E0\u6CD5\u8F7D\u5165\u7FFB\u8BD1\u8BB0\u5FC6\u5E93:`, e.message);
    }
  }
  const semanticTmPath = path4.join(process.cwd(), "semantic_memory.json");
  if (fs15.existsSync(semanticTmPath)) {
    try {
      const semData = JSON.parse(fs15.readFileSync(semanticTmPath, "utf-8"));
      if (Array.isArray(semData)) {
        let semCount = 0;
        semData.forEach((r) => {
          gateway.semanticTM.addRecord(r.text, r.translation, r.targetLang);
          semCount++;
        });
        console.log(`\x1B[32m[Vort CLI]\x1B[0m \u6210\u529F\u5BFC\u5165\u8BED\u4E49\u7FFB\u8BD1\u8BB0\u5FC6\u5E93\uFF0C\u5171\u52A0\u8F7D ${semCount} \u6761\u8BB0\u5F55\u3002`);
      }
    } catch (e) {
      console.warn(`\x1B[33m[Vort CLI \u8B66\u544A]\x1B[0m \u65E0\u6CD5\u8F7D\u5165\u8BED\u4E49\u7FFB\u8BD1\u8BB0\u5FC6\u5E93:`, e.message);
    }
  }
  const runtime = new VortRuntime(ast, gateway);
  console.log(`\x1B[32m[Vort CLI]\x1B[0m \u5F00\u59CB\u8FD0\u884C\u5DE5\u4F5C\u6D41\u4EFB\u52A1 (\u76EE\u6807\u8BED\u8A00: \x1B[32m${targetLang}\x1B[0m)...
`);
  const startTime = Date.now();
  try {
    const success = await runtime.executeWorkflow([inputPath, outputPath, targetLang]);
    const elapsed = Date.now() - startTime;
    if (success) {
      const costInput = gateway.totalPromptTokens / 1e6 * 0.14;
      const costOutput = gateway.totalCompletionTokens / 1e6 * 0.28;
      const totalCostUSD = costInput + costOutput;
      const totalCostCNY = totalCostUSD * 7.25;
      const localOverhead = elapsed - gateway.totalNetworkTime;
      if (gateway.translationMemory.size > 0) {
        try {
          const tmData = {};
          gateway.translationMemory.forEach((val, key) => {
            tmData[key] = val;
          });
          fs15.writeFileSync(tmPath, JSON.stringify(tmData, null, 2), "utf-8");
          console.log(`\x1B[32m[Vort CLI]\x1B[0m \u6210\u529F\u66F4\u65B0\u672C\u5730\u7FFB\u8BD1\u8BB0\u5FC6\u6587\u4EF6: ${tmPath}`);
        } catch (e) {
          console.warn(`\x1B[33m[Vort CLI \u8B66\u544A]\x1B[0m \u65E0\u6CD5\u4FDD\u5B58\u7FFB\u8BD1\u8BB0\u5FC6\u5E93:`, e.message);
        }
      }
      if (gateway.semanticTM.records.length > 0) {
        try {
          fs15.writeFileSync(semanticTmPath, JSON.stringify(gateway.semanticTM.records, null, 2), "utf-8");
          console.log(`\x1B[32m[Vort CLI]\x1B[0m \u6210\u529F\u66F4\u65B0\u672C\u5730\u8BED\u4E49\u7FFB\u8BD1\u8BB0\u5FC6\u6587\u4EF6: ${semanticTmPath}`);
        } catch (e) {
          console.warn(`\x1B[33m[Vort CLI \u8B66\u544A]\x1B[0m \u65E0\u6CD5\u4FDD\u5B58\u8BED\u4E49\u7FFB\u8BD1\u8BB0\u5FC6\u5E93:`, e.message);
        }
      }
      console.log("\n" + "=".repeat(65));
      console.log("              VORT \u7F16\u8BD1\u6267\u884C\u6548\u80FD\u4E0E\u5BA1\u8BA1\u62A5\u544A (Audit Report)         ");
      console.log("=".repeat(65));
      console.log(`\x1B[32m[\u6267\u884C\u72B6\u6001]\x1B[0m \u6210\u529F\u5B8C\u6210`);
      console.log(`\x1B[32m[\u6587\u4EF6\u8DEF\u5F84]\x1B[0m \u6E90\u4EF6: \x1B[34m${inputPath}\x1B[0m -> \u8BD1\u4EF6: \x1B[34m${outputPath}\x1B[0m`);
      console.log(`\x1B[32m[\u76EE\u6807\u8BED\u8A00]\x1B[0m \x1B[35m${targetLang}\x1B[0m`);
      console.log("-".repeat(65));
      console.log(`\x1B[33m[\u65F6\u5EF6\u7EDF\u8BA1 (Latency)]\x1B[0m`);
      console.log(`  - \u4EFB\u52A1\u603B\u8017\u65F6 (Total):         \x1B[36m${elapsed}ms\x1B[0m`);
      console.log(`  - \u7F51\u7EDC API \u8017\u65F6 (Network):    \x1B[36m${gateway.totalNetworkTime}ms\x1B[0m (${(gateway.totalNetworkTime / elapsed * 100).toFixed(1)}%)`);
      console.log(`  - \u672C\u5730\u89E3\u6790\u4E0E\u6253\u5305 (Local I/O):  \x1B[36m${localOverhead}ms\x1B[0m (${(localOverhead / elapsed * 100).toFixed(1)}%)`);
      console.log(`\x1B[33m[Token \u6D88\u8017 (Token Usage)]\x1B[0m`);
      console.log(`  - \u8F93\u5165 (Prompt Tokens):       \x1B[32m${gateway.totalPromptTokens}\x1B[0m`);
      console.log(`  - \u8F93\u51FA (Completion Tokens):   \x1B[32m${gateway.totalCompletionTokens}\x1B[0m`);
      console.log(`  - \u603B\u6D88\u8017 (Total Tokens):      \x1B[32m${gateway.totalPromptTokens + gateway.totalCompletionTokens}\x1B[0m`);
      console.log(`\x1B[33m[\u8BA1\u8D39\u8BC4\u4F30 (Cost)]\x1B[0m`);
      console.log(`  - \u9884\u4F30\u8D39\u7528 (USD):             \x1B[32m$${totalCostUSD.toFixed(6)}\x1B[0m`);
      console.log(`  - \u9884\u4F30\u6298\u5408 (CNY):             \x1B[32m\xA5${totalCostCNY.toFixed(4)}\x1B[0m`);
      console.log("-".repeat(65));
      console.log(`\x1B[32m[\u5408\u5E76\u4F18\u5316]\x1B[0m \u5B9E\u9645\u7F51\u7EDC\u8BF7\u6C42: \x1B[32m${gateway.networkCallsCount} \u6B21\x1B[0m (Auto-Batcher \u673A\u5236\u751F\u6548)`);
      console.log("=".repeat(65) + "\n");
    } else {
      console.error(`
\x1B[31m[Vort CLI] \u6267\u884C\u5931\u8D25: \u5DE5\u4F5C\u6D41\u8FD4\u56DE\u72B6\u6001\u5F02\u5E38\u3002\x1B[0m`);
      process.exit(1);
    }
  } catch (runErr) {
    console.error(`
\x1B[31m[Vort CLI] \u8FD0\u884C\u671F\u6545\u969C:\x1B[0m`, runErr);
    process.exit(1);
  }
}
async function main() {
  const args = process.argv.slice(2);
  if (args.length === 0) {
    printUsage();
    process.exit(1);
  }
  const command = args[0];
  if (command === "init") {
    const destDir = args[1] || ".";
    await runInit(destDir);
    process.exit(0);
  }
  if (command === "check") {
    const scriptPath2 = args[1];
    if (!scriptPath2) {
      console.error("\x1B[31m[\u9519\u8BEF]\x1B[0m \u8BF7\u6307\u5B9A\u8981\u6821\u9A8C\u7684 Vort \u811A\u672C\u8DEF\u5F84\u3002");
      process.exit(1);
    }
    await runCheck(scriptPath2);
    process.exit(0);
  }
  if (command === "repl") {
    await runRepl();
    return;
  }
  if (command === "lsp") {
    VortLsp.start();
    return;
  }
  let scriptPath = "";
  let inputPath = "";
  let outputPath = "";
  let targetLang = "Chinese";
  if (command === "run") {
    if (args.length < 4) {
      printUsage();
      process.exit(1);
    }
    scriptPath = args[1];
    inputPath = args[2];
    outputPath = args[3];
    targetLang = args[4] || "Chinese";
  } else {
    if (args.length < 3) {
      printUsage();
      process.exit(1);
    }
    scriptPath = args[0];
    inputPath = args[1];
    outputPath = args[2];
    targetLang = args[3] || "Chinese";
  }
  await runTranslate(scriptPath, inputPath, outputPath, targetLang);
}
main();
/*! Bundled license information:

xlsx/dist/cpexcel.js:
  (*! cpexcel.js (C) 2013-present SheetJS -- http://sheetjs.com *)
  (*! cputils.js (C) 2013-present SheetJS -- http://sheetjs.com *)

xlsx/xlsx.js:
  (*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com *)
  (*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com *)
*/
//# sourceMappingURL=vort.js.map
