From b4696ce5989a79065f6ef30dd32cff7e59044852 Mon Sep 17 00:00:00 2001
From: James Long <longster@gmail.com>
Date: Sat, 28 May 2022 23:08:55 -0400
Subject: [PATCH] New API bundle

---
 packages/api/app/bundle.api.js     | 47917 +++++++++++++--------------
 packages/api/app/bundle.api.js.map |     2 +-
 2 files changed, 22366 insertions(+), 25553 deletions(-)

diff --git a/packages/api/app/bundle.api.js b/packages/api/app/bundle.api.js
index 0bd2fe481..c77f4610f 100644
--- a/packages/api/app/bundle.api.js
+++ b/packages/api/app/bundle.api.js
@@ -100,2297 +100,1967 @@ module.exports =
 /************************************************************************/
 /******/ ({
 
-/***/ "./node_modules/@jlongster/mixpanel/lib/groups.js":
-/*!********************************************************!*\
-  !*** ./node_modules/@jlongster/mixpanel/lib/groups.js ***!
-  \********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+/***/ "./node_modules/@rschedule/core/es2015/generators.js":
+/*!***********************************************************!*\
+  !*** ./node_modules/@rschedule/core/es2015/generators.js ***!
+  \***********************************************************/
+/*! exports provided: AddOperator, Calendar, Collection, CollectionIterator, Dates, IntersectionOperator, MergeDurationOperator, MergeDurationOperatorError, OccurrenceGenerator, OccurrenceIterator, Operator, Rule, RuleBase, Schedule, ScheduleBase, SplitDurationOperator, SplitDurationOperatorError, SubtractOperator, UniqueOperator, add, intersection, mergeDuration, splitDuration, subtract, unique */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
-/**
- * Group profile methods. Learn more: https://help.mixpanel.com/hc/en-us/articles/360025333632
- */
-const _require = __webpack_require__(/*! ./profile_helpers */ "./node_modules/@jlongster/mixpanel/lib/profile_helpers.js"),
-      ProfileHelpers = _require.ProfileHelpers;
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AddOperator", function() { return AddOperator; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Calendar", function() { return Calendar; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Collection", function() { return Collection; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CollectionIterator", function() { return CollectionIterator; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Dates", function() { return Dates; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "IntersectionOperator", function() { return IntersectionOperator; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MergeDurationOperator", function() { return MergeDurationOperator; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MergeDurationOperatorError", function() { return MergeDurationOperatorError; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OccurrenceGenerator", function() { return OccurrenceGenerator; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OccurrenceIterator", function() { return OccurrenceIterator; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Operator", function() { return Operator; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Rule", function() { return Rule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RuleBase", function() { return RuleBase; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Schedule", function() { return Schedule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ScheduleBase", function() { return ScheduleBase; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SplitDurationOperator", function() { return SplitDurationOperator; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SplitDurationOperatorError", function() { return SplitDurationOperatorError; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SubtractOperator", function() { return SubtractOperator; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UniqueOperator", function() { return UniqueOperator; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "add", function() { return add; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "intersection", function() { return intersection; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeDuration", function() { return mergeDuration; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "splitDuration", function() { return splitDuration; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subtract", function() { return subtract; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unique", function() { return unique; });
+/* harmony import */ var _rschedule_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @rschedule/core */ "./node_modules/@rschedule/core/es2015/main.js");
 
-class MixpanelGroups extends ProfileHelpers() {
-  constructor(mp_instance) {
-    super();
-    this.mixpanel = mp_instance;
-    this.endpoint = '/groups';
+
+class OccurrenceGenerator {
+  constructor(args = {}) {
+    this.timezone = args.timezone !== undefined ? args.timezone : null;
+    this.maxDuration = args.maxDuration || 0;
   }
-  /** groups.set_once(group_key, group_id, prop, to, modifiers, callback)
-      ---
-      The same as groups.set, but adds a property value to a group only if it has not been set before.
-  */
+  /** Returns the first occurrence or, if there are no occurrences, null. */
 
 
-  set_once(group_key, group_id, prop, to, modifiers, callback) {
-    const identifiers = {
-      $group_key: group_key,
-      $group_id: group_id
-    };
+  get firstDate() {
+    if (this._firstDate !== undefined) return this._firstDate;
 
-    this._set(prop, to, modifiers, callback, {
-      identifiers,
-      set_once: true
-    });
+    const start = this._run().next().value;
+
+    this._firstDate = start ? this.dateAdapter.fromDateTime(start) : null;
+    return this._firstDate;
   }
-  /**
-      groups.set(group_key, group_id, prop, to, modifiers, callback)
-      ---
-      set properties on a group profile
-       usage:
-           mixpanel.groups.set('company', 'Acme Inc.', '$name', 'Acme Inc.');
-           mixpanel.groups.set('company', 'Acme Inc.', {
-              'Industry': 'widgets',
-              '$name': 'Acme Inc.',
-          });
-  */
+  /** If generator is infinite, returns `null`. Otherwise returns the end date */
 
 
-  set(group_key, group_id, prop, to, modifiers, callback) {
-    const identifiers = {
-      $group_key: group_key,
-      $group_id: group_id
-    };
+  get lastDate() {
+    if (this._lastDate !== undefined) return this._lastDate;
 
-    this._set(prop, to, modifiers, callback, {
-      identifiers
-    });
+    if (this.isInfinite) {
+      this._lastDate = null;
+      return null;
+    }
+
+    const end = this._run({
+      reverse: true
+    }).next().value;
+
+    this._lastDate = end ? this.dateAdapter.fromDateTime(end) : null;
+    return this._lastDate;
   }
-  /**
-   groups.delete_group(group_key, group_id, modifiers, callback)
-      ---
-      delete a group profile permanently
-       usage:
-       mixpanel.groups.delete_group('company', 'Acme Inc.');
-      */
-
-
-  delete_group(group_key, group_id, modifiers, callback) {
-    const identifiers = {
-      $group_key: group_key,
-      $group_id: group_id
-    };
 
-    this._delete_profile({
-      identifiers,
-      modifiers,
-      callback
-    });
+  pipe(...operators) {
+    return operators.reduce((prev, curr) => curr({
+      base: prev,
+      timezone: this.timezone
+    }), this);
   }
   /**
-   groups.remove(group_key, group_id, data, modifiers, callback)
-      ---
-      remove a value from a list-valued group profile property.
-       usage:
-       mixpanel.groups.remove('company', 'Acme Inc.', {'products': 'anvil'});
-       mixpanel.groups.remove('company', 'Acme Inc.', {
-          'products': 'anvil',
-          'customer segments': 'coyotes'
-      });
-      */
-
+     * Processes the object's rules/dates and returns an iterable for the occurrences.
+     *
+     * Options object:
+     * - `start` the date to begin iteration on
+     * - `end` the date to end iteration on
+     * - `take` the max number of dates to take before ending iteration
+     * - `reverse` whether to iterate in reverse or not
+     *
+     * Examples:
+     *
+     * ```
+     * const iterator = schedule.occurrences({ start: new Date(), take: 5 });
+     
+     * for (const date of iterator) {
+     *   // do stuff
+     * }
+  
+     * iterator.toArray() // returns Date array
+     * iterator.next().value // returns next Date
+     * ```
+     *
+     */
 
-  remove(group_key, group_id, data, modifiers, callback) {
-    const identifiers = {
-      $group_key: group_key,
-      $group_id: group_id
-    };
 
-    this._remove({
-      identifiers,
-      data,
-      modifiers,
-      callback
-    });
+  occurrences(args = {}) {
+    return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));
   }
   /**
-   groups.union(group_key, group_id, data, modifiers, callback)
-      ---
-      merge value(s) into a list-valued group profile property.
-       usage:
-       mixpanel.groups.union('company', 'Acme Inc.', {'products': 'anvil'});
-       mixpanel.groups.union('company', 'Acme Inc.', {'products': ['anvil'], 'customer segments': ['coyotes']});
-      */
-
-
-  union(group_key, group_id, data, modifiers, callback) {
-    const identifiers = {
-      $group_key: group_key,
-      $group_id: group_id
-    };
+   * Iterates over the object's occurrences and bundles them into collections
+   * with a specified granularity (default is `"YEARLY"`). Make sure to
+   * read about each option & combination of options below.
+   *
+   * Options object:
+   *   - start?: DateAdapter
+   *   - end?: DateAdapter
+   *   - take?: number
+   *   - reverse?: NOT SUPPORTED
+   *   - granularity?: CollectionsGranularity
+   *   - weekStart?: DateAdapter.Weekday
+   *   - skipEmptyPeriods?: boolean
+   *
+   * Returned `Collection` object:
+   *
+   *   - `dates` property containing an array of DateAdapter objects.
+   *   - `granularity` property containing the granularity.
+   *     - `CollectionsGranularity` === `RuleOptions.Frequency`.
+   *     - default is `"YEARLY"`
+   *   - `periodStart` property containing a DateAdapter equal to the period's
+   *     start time.
+   *   - `periodEnd` property containing a DateAdapter equal to the period's
+   *     end time.
+   *
+   * #### Details:
+   *
+   * `collections()` always returns full periods. This means that the `start` argument is
+   * transformed to be the start of whatever period the `start` argument is in, and the
+   * `end` argument is transformed to be the end of whatever period the `end` argument is
+   * in.
+   *
+   * - Example: with granularity `"YEARLY"`, the `start` argument will be transformed to be the
+   *   start of the year passed in the `start` argument, and the `end` argument will be transformed
+   *   to be the end of the year passed in the `end` argument.
+   *
+   * By default, the `periodStart` value of `Collection` objects produced by this method increments linearly.
+   * This means the returned `Collection#dates` property may have length 0. This can be changed by
+   * passing the `skipEmptyPeriods: true` option, in which case the `periodStart` from one collection to the
+   * next can "jump".
+   *
+   * - Example 1: if your object's first occurrence is 2019/2/1 (February 1st) and you call
+   *   `collection({skipEmptyPeriods: true, granularity: 'DAILY', start: new Date(2019,0,1)})`
+   *   (so starting on January 1st), the first Collection produced will have a `periodStart` in February.
+   *
+   * - Example 2: if your object's first occurrence is 2019/2/1 (February 1st) and you call
+   *   `collection({granularity: 'DAILY', start: new Date(2019,0,1)})`
+   *   (so starting on January 1st), the first collection produced will have a `Collection#periodStart`
+   *   of January 1st and have `Collection#dates === []`. Similarly, the next 30 collections produced
+   *   (Jan 2nd - 31st) will all contain an empty array for the `dates` property. Then the February 1st
+   *   `Collection` will contain dates.
+   *
+   * When giving a `take` argument to `collections()`, you are specifying
+   * the number of `Collection` objects to return (rather than occurrences).
+   *
+   * When choosing a granularity of `"WEEKLY"`, the `weekStart` option is required.
+   *
+   * When choosing a granularity of `"MONTHLY"`:
+   *
+   * - If the `weekStart` option *is not* present, will generate collections with
+   *   the `periodStart` and `periodEnd` at the beginning and end of each month.
+   *
+   * - If the `weekStart` option *is* present, will generate collections with the
+   *   `periodStart` equal to the start of the first week of the month, and the
+   *   `periodEnd` equal to the end of the last week of the month. This behavior could be
+   *   desired when rendering opportunities in a calendar view, where the calendar renders
+   *   full weeks (which may result in the calendar displaying dates in the
+   *   previous or next months).
+   *
+   */
 
-    this._union({
-      identifiers,
-      data,
-      modifiers,
-      callback
-    });
-  }
-  /**
-   groups.unset(group_key, group_id, prop, modifiers, callback)
-      ---
-      delete a property on a group profile
-       usage:
-       mixpanel.groups.unset('company', 'Acme Inc.', 'products');
-       mixpanel.groups.unset('company', 'Acme Inc.', ['products', 'customer segments']);
-      */
-
-
-  unset(group_key, group_id, prop, modifiers, callback) {
-    const identifiers = {
-      $group_key: group_key,
-      $group_id: group_id
-    };
 
-    this._unset({
-      identifiers,
-      prop,
-      modifiers,
-      callback
-    });
+  collections(args = {}) {
+    return new CollectionIterator(this, this.normalizeCollectionsArgs(args));
   }
+  /**
+   * Returns true if an occurrence starts on or between the provided start/end
+   * datetimes. If the `excludeEnds` option is provided, then occurrences
+   * equal to the start/end times are ignored.
+   *
+   * If the occurrence generator has a duration, and `excludeEnds !== true`,
+   * and a `maxDuration` argument is supplied (either in the constructor or
+   * here), then any occurrence that's time overlaps with the start/end times
+   * return true.
+   */
 
-}
-
-exports.MixpanelGroups = MixpanelGroups;
-
-/***/ }),
-
-/***/ "./node_modules/@jlongster/mixpanel/lib/mixpanel-node.js":
-/*!***************************************************************!*\
-  !*** ./node_modules/@jlongster/mixpanel/lib/mixpanel-node.js ***!
-  \***************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
-
-function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
-
-function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
-
-function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
-
-function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
-
-function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
-
-function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
-
-function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
-
-function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
 
-/*
-    Heavily inspired by the original js library copyright Mixpanel, Inc.
-    (http://mixpanel.com/)
+  occursBetween(startInput, endInput, options = {}) {
+    const start = this.normalizeDateInput(startInput);
+    const end = this.normalizeDateInput(endInput);
 
-    Copyright (c) 2012 Carl Sverre
+    if (this.hasDuration && !options.excludeEnds) {
+      const maxDuration = this.getMaxDuration('occursBetween', options);
 
-    Released under the MIT license.
-*/
-const _require = __webpack_require__(/*! ./utils */ "./node_modules/@jlongster/mixpanel/lib/utils.js"),
-      async_all = _require.async_all,
-      ensure_timestamp = _require.ensure_timestamp;
+      const iterator = this._run({
+        start: start.subtract(maxDuration, 'millisecond'),
+        end,
+        reverse: true
+      });
 
-const _require2 = __webpack_require__(/*! ./groups */ "./node_modules/@jlongster/mixpanel/lib/groups.js"),
-      MixpanelGroups = _require2.MixpanelGroups;
+      for (const day of iterator) {
+        if (day.end.isBefore(start)) continue;
+        return true;
+      }
 
-const _require3 = __webpack_require__(/*! ./people */ "./node_modules/@jlongster/mixpanel/lib/people.js"),
-      MixpanelPeople = _require3.MixpanelPeople;
+      return false;
+    }
 
-const DEFAULT_CONFIG = {
-  test: false,
-  debug: false,
-  verbose: false,
-  host: 'api.mixpanel.com',
-  protocol: 'https',
-  path: ''
-};
+    for (const day of this._run({
+      start,
+      end
+    })) {
+      if (options.excludeEnds) {
+        if (day.isEqual(start)) {
+          continue;
+        }
 
-function base64(str) {
-  return typeof btoa !== 'undefined' ? btoa(str) : Buffer.from(str).toString('base64');
-}
+        if (day.isEqual(end)) {
+          break;
+        }
+      }
 
-var create_client = function (token, config) {
-  if (!token) {
-    throw new Error("The Mixpanel Client needs a Mixpanel token: `init(token)`");
-  } // mixpanel constants
+      return true;
+    }
 
+    return false;
+  }
 
-  const MAX_BATCH_SIZE = 50;
-  const TRACK_AGE_LIMIT = 60 * 60 * 24 * 5;
-  const metrics = {
-    token,
-    config: _objectSpread({}, DEFAULT_CONFIG)
-  };
-  /**
-   * sends an async GET or POST request to mixpanel
-   * for batch processes data must be send in the body of a POST
-   * @param {object} options
-   * @param {string} options.endpoint
-   * @param {object} options.data         the data to send in the request
-   * @param {string} [options.method]     e.g. `get` or `post`, defaults to `get`
-   * @param {function} callback           called on request completion or error
-   */
+  occursOn(rawArgs) {
+    const args = this.normalizeOccursOnArgs(rawArgs);
 
-  metrics.send_request = function (options, callback) {
-    callback = callback || function () {};
+    if (args.weekday) {
+      if (this.isInfinite && !args.before) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ArgumentError"]('When calling `occursOn()` with a `weekday` argument ' + 'and an occurrence object that has infinite occurrences, ' + 'you must include a `before` argument as well.');
+      }
 
-    let content = base64(JSON.stringify(options.data));
-    const endpoint = options.endpoint;
-    const method = (options.method || 'GET').toUpperCase();
-    let query_params = {
-      'ip': 0,
-      'verbose': metrics.config.verbose ? 1 : 0
-    };
-    const key = metrics.config.key;
-    const secret = metrics.config.secret;
-    let request_options = {
-      headers: {}
-    };
-    let request;
-    let request_base = `${metrics.config.protocol}://${metrics.config.host}`;
+      const start = args.after && (args.excludeEnds ? args.after.add(1, 'day') : args.after);
+      const end = args.before && (args.excludeEnds ? args.before.subtract(1, 'day') : args.before);
 
-    if (metrics.config.port) {
-      request_base += `:${metrics.config.port}`;
-    }
+      const iterator = this._run({
+        start,
+        end
+      });
 
-    if (method === 'POST') {
-      content = 'data=' + content;
-      request_options.headers['Content-Type'] = 'application/x-www-form-urlencoded';
-      request_options.headers['Content-Length'] = content.length;
-    } else if (method === 'GET') {
-      query_params.data = content;
-    } // add auth params
+      let date = iterator.next().value;
+      if (!date) return false;
 
+      while (date) {
+        if (date.get('weekday') === args.weekday) {
+          return true;
+        }
 
-    if (secret) {
-      if (metrics.config.protocol !== 'https') {
-        throw new Error("Must use HTTPS if authenticating with API Secret");
+        date = iterator.next({
+          skipToDate: date.add(Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["getDifferenceBetweenWeekdays"])(date.get('weekday'), args.weekday), 'day').granularity('day')
+        }).value;
       }
 
-      const encoded = base64(secret + ':');
-      request_options.headers['Authorization'] = 'Basic ' + encoded;
-    } else if (key) {
-      query_params.api_key = key;
-    } else if (endpoint === '/import') {
-      throw new Error("The Mixpanel Client needs a Mixpanel API Secret when importing old events: `init(token, { secret: ... })`");
+      return false;
     }
 
-    if (metrics.config.test) {
-      query_params.test = 1;
+    if (!args.date) {
+      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ArgumentError"](`"occursOn()" must be called with either a "date" or "weekday" argument`);
     }
 
-    request_options.path = metrics.config.path + endpoint + "?" + new URLSearchParams(query_params).toString();
-    fetch(request_base + request_options.path, {
-      method,
-      headers: request_options.headers,
-      body: method !== 'GET' ? content : null
-    }).then(res => {
-      return res.text();
-    }).then(text => {
-      var e;
+    if (this.hasDuration) {
+      const maxDuration = this.getMaxDuration('occursOn', args);
 
-      if (metrics.config.verbose) {
-        try {
-          var result = JSON.parse(text);
+      const iterator = this._run({
+        start: args.date.subtract(maxDuration, 'millisecond'),
+        end: args.date
+      });
 
-          if (result.status != 1) {
-            e = new Error("Mixpanel Server Error: " + result.error);
-          }
-        } catch (ex) {
-          e = new Error("Could not parse response from Mixpanel");
-        }
-      } else {
-        e = text !== '1' ? new Error("Mixpanel Server Error: " + text) : undefined;
+      for (const date of iterator) {
+        if (date.end.isBefore(args.date)) continue;
+        if (date.isAfter(args.date)) return false;
+        return true;
       }
 
-      callback(e);
-    }).catch(e => {
-      console.log('error', e);
+      return false;
+    }
 
-      if (metrics.config.debug) {
-        console.log("Got Error: " + e.message);
-      }
+    for (const day of this._run({
+      start: args.date,
+      end: args.date
+    })) {
+      return !!day;
+    }
 
-      callback(e);
-    });
-  };
+    return false;
+  }
   /**
-   * Send an event to Mixpanel, using the specified endpoint (e.g., track/import)
-   * @param {string} endpoint - API endpoint name
-   * @param {string} event - event name
-   * @param {object} properties - event properties
-   * @param {Function} [callback] - callback for request completion/error
+   * Returns true if an occurrence starts after the provided datetime.
+   * If the `excludeStart` option is provided, then occurrences
+   * equal to the provided datetime are ignored.
+   *
+   * If the occurrence generator has a duration, and `excludeStart !== true`,
+   * and a `maxDuration` argument is supplied (either in the constructor or
+   * here), then any occurrence that's end time is after/equal to the provided
+   * datetime return true.
    */
 
 
-  metrics.send_event_request = function (endpoint, event, properties, callback) {
-    properties.token = metrics.token;
-    properties.mp_lib = "node";
-    var data = {
-      event: event,
-      properties: properties
-    };
+  occursAfter(date, options = {}) {
+    const adapter = this.normalizeDateInput(date);
 
-    if (metrics.config.debug) {
-      console.log("Sending the following event to Mixpanel:\n", data);
-    }
+    if (this.hasDuration && !options.excludeStart) {
+      const maxDuration = this.getMaxDuration('occursAfter', options);
 
-    metrics.send_request({
-      method: "GET",
-      endpoint: endpoint,
-      data: data
-    }, callback);
-  };
-  /**
-   * breaks array into equal-sized chunks, with the last chunk being the remainder
-   * @param {Array} arr
-   * @param {number} size
-   * @returns {Array}
-   */
+      const iterator = this._run({
+        start: adapter.subtract(maxDuration, 'millisecond')
+      });
 
+      for (const date of iterator) {
+        if (date.end.isBefore(adapter)) continue;
+        return true;
+      }
 
-  var chunk = function (arr, size) {
-    var chunks = [],
-        i = 0,
-        total = arr.length;
+      return false;
+    }
+
+    for (const day of this._run({
+      start: adapter
+    })) {
+      if (options.excludeStart && day.isEqual(adapter)) {
+        continue;
+      }
 
-    while (i < total) {
-      chunks.push(arr.slice(i, i += size));
+      return true;
     }
 
-    return chunks;
-  };
+    return false;
+  }
   /**
-   * sends events in batches
-   * @param {object}   options
-   * @param {[{}]}     options.event_list                 array of event objects
-   * @param {string}   options.endpoint                   e.g. `/track` or `/import`
-   * @param {number}   [options.max_concurrent_requests]  limits concurrent async requests over the network
-   * @param {number}   [options.max_batch_size]           limits number of events sent to mixpanel per request
-   * @param {Function} [callback]                         callback receives array of errors if any
+   * Returns true if an occurrence starts before the provided datetime.
+   * If the `excludeStart` option is provided, then occurrences
+   * equal to the provided datetime are ignored.
    *
+   * If the occurrence generator has a duration, and `excludeStart` is
+   * also provided, then this will only return true if an occurrence
+   * both starts and ends before the provided datetime.
    */
 
 
-  var send_batch_requests = function (options, callback) {
-    var event_list = options.event_list,
-        endpoint = options.endpoint,
-        max_batch_size = options.max_batch_size ? Math.min(MAX_BATCH_SIZE, options.max_batch_size) : MAX_BATCH_SIZE,
-        // to maintain original intention of max_batch_size; if max_batch_size is greater than 50, we assume the user is trying to set max_concurrent_requests
-    max_concurrent_requests = options.max_concurrent_requests || options.max_batch_size > MAX_BATCH_SIZE && Math.ceil(options.max_batch_size / MAX_BATCH_SIZE),
-        event_batches = chunk(event_list, max_batch_size),
-        request_batches = max_concurrent_requests ? chunk(event_batches, max_concurrent_requests) : [event_batches],
-        total_event_batches = event_batches.length,
-        total_request_batches = request_batches.length;
-    /**
-     * sends a batch of events to mixpanel through http api
-     * @param {Array} batch
-     * @param {Function} cb
-     */
-
-    function send_event_batch(batch, cb) {
-      if (batch.length > 0) {
-        batch = batch.map(function (event) {
-          var properties = event.properties;
+  occursBefore(date, options = {}) {
+    const adapter = this.normalizeDateInput(date);
 
-          if (endpoint === '/import' || event.properties.time) {
-            // usually there will be a time property, but not required for `/track` endpoint
-            event.properties.time = ensure_timestamp(event.properties.time);
-          }
+    if (this.hasDuration && options.excludeStart) {
+      for (const day of this._run({
+        end: adapter,
+        reverse: true
+      })) {
+        if (day.end.isAfterOrEqual(adapter)) continue;
+        return true;
+      }
 
-          event.properties.token = event.properties.token || metrics.token;
-          return event;
-        }); // must be a POST
+      return false;
+    }
 
-        metrics.send_request({
-          method: "POST",
-          endpoint: endpoint,
-          data: batch
-        }, cb);
+    for (const day of this._run({
+      end: adapter,
+      reverse: true
+    })) {
+      if (options.excludeStart && day.isEqual(adapter)) {
+        continue;
       }
+
+      return true;
     }
-    /**
-     * Asynchronously sends batches of requests
-     * @param {number} index
-     */
 
+    return false;
+  }
 
-    function send_next_request_batch(index) {
-      var request_batch = request_batches[index],
-          cb = function (errors, results) {
-        index += 1;
+  get dateAdapter() {
+    return _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapterBase"].adapter;
+  }
 
-        if (index === total_request_batches) {
-          callback && callback(errors, results);
-        } else {
-          send_next_request_batch(index);
-        }
-      };
+  normalizeOccurrencesArgs(rawArgs) {
+    return Object.assign(Object.assign({}, rawArgs), {
+      start: this.normalizeDateInput(rawArgs.start),
+      end: this.normalizeDateInput(rawArgs.end)
+    });
+  }
 
-      async_all(request_batch, send_event_batch, cb);
-    } // init recursive function
+  normalizeCollectionsArgs(rawArgs) {
+    if (rawArgs.reverse !== undefined) {
+      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ArgumentError"]('`collections()` does not support the `reverse` option at this time.');
+    }
 
+    return Object.assign(Object.assign({}, rawArgs), {
+      start: this.normalizeDateInput(rawArgs.start),
+      end: this.normalizeDateInput(rawArgs.end)
+    });
+  }
 
-    send_next_request_batch(0);
+  normalizeOccursOnArgs(rawArgs = {}) {
+    return Object.assign(Object.assign({}, rawArgs), {
+      date: this.normalizeDateInput(rawArgs.date),
+      after: this.normalizeDateInput(rawArgs.after),
+      before: this.normalizeDateInput(rawArgs.before),
+      excludeDates: rawArgs.excludeDates && rawArgs.excludeDates.map(date => this.normalizeDateInput(date))
+    });
+  }
 
-    if (metrics.config.debug) {
-      console.log("Sending " + event_list.length + " events to Mixpanel in " + total_event_batches + " batches of events and " + total_request_batches + " batches of requests");
-    }
-  };
-  /**
-       track(event, properties, callback)
-       ---
-       this function sends an event to mixpanel.
-        event:string                    the event name
-       properties:object               additional event properties to send
-       callback:function(err:Error)    callback is called when the request is
-                                       finished or an error occurs
-   */
+  normalizeRunArgs(args) {
+    return Object.assign(Object.assign({}, args), {
+      start: this.normalizeDateInput(args.start),
+      end: this.normalizeDateInput(args.end)
+    });
+  }
 
+  normalizeDateInput(date) {
+    return date ? Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateInputToDateTime"])(date, this.timezone) : undefined;
+  }
 
-  metrics.track = function (event, properties, callback) {
-    if (!properties || typeof properties === "function") {
-      callback = properties;
-      properties = {};
-    } // time is optional for `track` but must be less than 5 days old if set
+  normalizeDateInputToAdapter(date) {
+    if (!date) return;
+    return Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateInputToDateAdapter"])(date);
+  }
 
+  normalizeRunOutput(date) {
+    return Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["normalizeDateTimeTimezone"])(date, this.timezone);
+  }
 
-    if (properties.time) {
-      properties.time = ensure_timestamp(properties.time);
+  getMaxDuration(method, options) {
+    const maxDuration = options.maxDuration || this.maxDuration;
 
-      if (properties.time < Date.now() / 1000 - TRACK_AGE_LIMIT) {
-        throw new Error("`track` not allowed for event more than 5 days old; use `mixpanel.import()`");
-      }
+    if (!Number.isInteger(maxDuration)) {
+      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ArgumentError"](`When an occurrence generator ` + `has a duration, a 'maxDuration' argument must be supplied ` + `to ${method}().`);
     }
 
-    metrics.send_event_request("/track", event, properties, callback);
-  };
-  /**
-   * send a batch of events to mixpanel `track` endpoint: this should only be used if events are less than 5 days old
-   * @param {Array}    event_list                         array of event objects to track
-   * @param {object}   [options]
-   * @param {number}   [options.max_concurrent_requests]  number of concurrent http requests that can be made to mixpanel
-   * @param {number}   [options.max_batch_size]           number of events that can be sent to mixpanel per request
-   * @param {Function} [callback]                         callback receives array of errors if any
-   */
-
+    return maxDuration;
+  }
 
-  metrics.track_batch = function (event_list, options, callback) {
-    options = options || {};
+}
 
-    if (typeof options === 'function') {
-      callback = options;
-      options = {};
-    }
+class OccurrenceIterator {
+  constructor(iterable, args) {
+    this.iterable = iterable;
+    this.args = args; // Need to assert the return type of these methods to prevent typescript from
+    // incorrectly reducing them to `DateAdapterBase & { generators: G }`.
 
-    var batch_options = {
-      event_list: event_list,
-      endpoint: "/track",
-      max_concurrent_requests: options.max_concurrent_requests,
-      max_batch_size: options.max_batch_size
-    };
-    send_batch_requests(batch_options, callback);
-  };
-  /**
-      import(event, time, properties, callback)
-      ---
-      This function sends an event to mixpanel using the import
-      endpoint.  The time argument should be either a Date or Number,
-      and should signify the time the event occurred.
-       It is highly recommended that you specify the distinct_id
-      property for each event you import, otherwise the events will be
-      tied to the IP address of the sending machine.
-       For more information look at:
-      https://mixpanel.com/docs/api-documentation/importing-events-older-than-31-days
-       event:string                    the event name
-      time:date|number                the time of the event
-      properties:object               additional event properties to send
-      callback:function(err:Error)    callback is called when the request is
-                                      finished or an error occurs
-  */
-
-
-  metrics.import = function (event, time, properties, callback) {
-    if (!properties || typeof properties === "function") {
-      callback = properties;
-      properties = {};
-    }
-
-    properties.time = ensure_timestamp(time);
-    metrics.send_event_request("/import", event, properties, callback);
-  };
-  /**
-      import_batch(event_list, options, callback)
-      ---
-      This function sends a list of events to mixpanel using the import
-      endpoint. The format of the event array should be:
-       [
-          {
-              "event": "event name",
-              "properties": {
-                  "time": new Date(), // Number or Date; required for each event
-                  "key": "val",
-                  ...
-              }
-          },
-          {
-              "event": "event name",
-              "properties": {
-                  "time": new Date()  // Number or Date; required for each event
-              }
-          },
-          ...
-      ]
-       See import() for further information about the import endpoint.
-       Options:
-          max_batch_size: the maximum number of events to be transmitted over
-                          the network simultaneously. useful for capping bandwidth
-                          usage.
-          max_concurrent_requests: the maximum number of concurrent http requests that
-                          can be made to mixpanel; also useful for capping bandwidth.
-       N.B.: the Mixpanel API only accepts 50 events per request, so regardless
-      of max_batch_size, larger lists of events will be chunked further into
-      groups of 50.
-       event_list:array                    list of event names and properties
-      options:object                      optional batch configuration
-      callback:function(error_list:array) callback is called when the request is
-                                          finished or an error occurs
-  */
-
-
-  metrics.import_batch = function (event_list, options, callback) {
-    var batch_options;
-
-    if (typeof options === "function" || !options) {
-      callback = options;
-      options = {};
-    }
-
-    batch_options = {
-      event_list: event_list,
-      endpoint: "/import",
-      max_concurrent_requests: options.max_concurrent_requests,
-      max_batch_size: options.max_batch_size
-    };
-    send_batch_requests(batch_options, callback);
-  };
-  /**
-      alias(distinct_id, alias)
-      ---
-      This function creates an alias for distinct_id
-       For more information look at:
-      https://mixpanel.com/docs/integration-libraries/using-mixpanel-alias
-       distinct_id:string              the current identifier
-      alias:string                    the future alias
-  */
-
-
-  metrics.alias = function (distinct_id, alias, callback) {
-    var properties = {
-      distinct_id: distinct_id,
-      alias: alias
-    };
-    metrics.track('$create_alias', properties, callback);
-  };
+    this[Symbol.iterator] = () => this.occurrenceIterator();
 
-  metrics.identify = function (identified_id, anon_id, callback) {
-    var properties = {
-      distinct_id: identified_id,
-      $identified_id: identified_id,
-      $anon_id: anon_id
-    };
-    metrics.track('$identify', properties, callback);
-  };
+    this.iterator = iterable._run(args);
+    this.isInfinite = iterable.isInfinite;
+  }
 
-  metrics.groups = new MixpanelGroups(metrics);
-  metrics.people = new MixpanelPeople(metrics);
-  /**
-      set_config(config)
-      ---
-      Modifies the mixpanel config
-       config:object       an object with properties to override in the
-                          mixpanel client config
-  */
+  next(args) {
+    return this.occurrenceIterator(args).next();
+  }
 
-  metrics.set_config = function (config) {
-    Object.assign(metrics.config, config);
+  toArray() {
+    if (this.args.end || this.args.take || !this.isInfinite) {
+      return Array.from(this.occurrenceIterator());
+    }
 
-    if (config.host) {
-      // Split host into host and port
-      const _config$host$split = config.host.split(':'),
-            _config$host$split2 = _slicedToArray(_config$host$split, 2),
-            host = _config$host$split2[0],
-            port = _config$host$split2[1];
+    throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InfiniteLoopError"]('OccurrenceIterator#toArray() can only be called if the iterator ' + 'is not infinite, or you provide and `end` argument, or you provide ' + 'a `take` argument.');
+  }
 
-      metrics.config.host = host;
+  *occurrenceIterator(rawArgs) {
+    let args = this.normalizeRunArgs(rawArgs);
+    let date = this.iterator.next(args).value;
 
-      if (port) {
-        metrics.config.port = Number(port);
-      }
+    while (date) {
+      const yieldArgs = yield this.normalizeDateOutput(date);
+      args = this.normalizeRunArgs(yieldArgs);
+      date = this.iterator.next(args).value;
     }
-  };
 
-  if (config) {
-    metrics.set_config(config);
+    return undefined;
   }
 
-  return metrics;
-}; // module exporting
+  normalizeRunArgs(args) {
+    return {
+      skipToDate: this.normalizeDateInput(args && args.skipToDate)
+    };
+  }
 
+  normalizeDateInput(date) {
+    return date ? Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateInputToDateTime"])(date, this.iterable.timezone) : undefined;
+  }
 
-module.exports = {
-  Client: function (token) {
-    console.warn("The function `Client(token)` is deprecated.  It is now called `init(token)`.");
-    return create_client(token);
-  },
-  init: create_client
-};
+  normalizeDateOutput(date) {
+    if (!date) return;
+    return date ? _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapterBase"].adapter.fromDateTime(date) : undefined;
+  }
 
-/***/ }),
+}
 
-/***/ "./node_modules/@jlongster/mixpanel/lib/people.js":
-/*!********************************************************!*\
-  !*** ./node_modules/@jlongster/mixpanel/lib/people.js ***!
-  \********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
-
-function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+class Collection {
+  constructor(dates = [], granularity, periodStart, periodEnd) {
+    this.dates = dates;
+    this.granularity = granularity;
+    this.periodStart = periodStart;
+    this.periodEnd = periodEnd;
+  }
 
-function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+}
 
-function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
+class CollectionIterator {
+  constructor(iterable, args) {
+    this.iterable = iterable;
+    this.args = args;
+    this.granularity = 'year';
 
-function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+    this[Symbol.iterator] = () => this.iterator;
 
-function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+    if (args.granularity) {
+      this.granularity = args.granularity;
 
-const _require = __webpack_require__(/*! ./profile_helpers */ "./node_modules/@jlongster/mixpanel/lib/profile_helpers.js"),
-      merge_modifiers = _require.merge_modifiers,
-      ProfileHelpers = _require.ProfileHelpers;
+      if (this.granularity === 'week' && !args.weekStart) {
+        throw new Error('"week" granularity requires `weekStart` arg');
+      }
+    }
 
-class MixpanelPeople extends ProfileHelpers() {
-  constructor(mp_instance) {
-    super();
-    this.mixpanel = mp_instance;
-    this.endpoint = '/engage';
-  }
-  /** people.set_once(distinct_id, prop, to, modifiers, callback)
-      ---
-      The same as people.set but in the words of mixpanel:
-      mixpanel.people.set_once
-       " This method allows you to set a user attribute, only if
-          it is not currently set. It can be called multiple times
-          safely, so is perfect for storing things like the first date
-          you saw a user, or the referrer that brought them to your
-          website for the first time. "
-   */
+    if (args.weekStart) {
+      this.weekStart = args.weekStart;
+    }
 
+    if (args.reverse) {
+      throw new Error('`OccurrenceGenerator#collections()` does not support iterating in reverse. ' + 'Though `OccurrenceGenerator#occurrences()` does support iterating in reverse.');
+    } // Set the end arg, if present, to the end of the period.
 
-  set_once(distinct_id, prop, to, modifiers, callback) {
-    const identifiers = {
-      $distinct_id: distinct_id
-    };
 
-    this._set(prop, to, modifiers, callback, {
-      identifiers,
-      set_once: true
+    this.args = Object.assign(Object.assign({}, args), {
+      start: args.start || iterable._run().next().value,
+      end: args.end && this.getPeriod(args.end).end
     });
+    this.startDate = this.args.start && this.normalizeDateOutput(this.getPeriod(this.args.start).start) || null;
+    this.iterator = this.collectionIterator();
   }
-  /**
-      people.set(distinct_id, prop, to, modifiers, callback)
-      ---
-      set properties on an user record in engage
-       usage:
-           mixpanel.people.set('bob', 'gender', 'm');
-           mixpanel.people.set('joe', {
-              'company': 'acme',
-              'plan': 'premium'
-          });
-  */
-
 
-  set(distinct_id, prop, to, modifiers, callback) {
-    const identifiers = {
-      $distinct_id: distinct_id
-    };
-
-    this._set(prop, to, modifiers, callback, {
-      identifiers
-    });
+  next() {
+    return this.iterator.next();
   }
   /**
-      people.increment(distinct_id, prop, by, modifiers, callback)
-      ---
-      increment/decrement properties on an user record in engage
-       usage:
-           mixpanel.people.increment('bob', 'page_views', 1);
-           // or, for convenience, if you're just incrementing a counter by 1, you can
-          // simply do
-          mixpanel.people.increment('bob', 'page_views');
-           // to decrement a counter, pass a negative number
-          mixpanel.people.increment('bob', 'credits_left', -1);
-           // like mixpanel.people.set(), you can increment multiple properties at once:
-          mixpanel.people.increment('bob', {
-              counter1: 1,
-              counter2: 3,
-              counter3: -2
-          });
-  */
-
-
-  increment(distinct_id, prop, by, modifiers, callback) {
-    // TODO extract to ProfileHelpers
-    var $add = {};
-
-    if (typeof prop === 'object') {
-      if (typeof by === 'object') {
-        callback = modifiers;
-        modifiers = by;
-      } else {
-        callback = by;
-      }
+   * While `next()` and `[Symbol.iterator]` both share state,
+   * `toArray()` does not share state and always returns the whole
+   * collections array.
+   */
 
-      for (const _ref of Object.entries(prop)) {
-        var _ref2 = _slicedToArray(_ref, 2);
 
-        const key = _ref2[0];
-        const val = _ref2[1];
+  toArray() {
+    if (this.args.end || this.args.take || !this.iterable.isInfinite) {
+      const collections = [];
 
-        if (isNaN(parseFloat(val))) {
-          if (this.mixpanel.config.debug) {
-            console.error("Invalid increment value passed to mixpanel.people.increment - must be a number");
-            console.error("Passed " + key + ":" + val);
-          }
-        } else {
-          $add[key] = val;
-        }
+      for (const collection of this.collectionIterator()) {
+        collections.push(collection);
       }
 
-      ;
-    } else {
-      if (typeof by === 'number' || !by) {
-        by = by || 1;
-        $add[prop] = by;
-
-        if (typeof modifiers === 'function') {
-          callback = modifiers;
-        }
-      } else if (typeof by === 'function') {
-        callback = by;
-        $add[prop] = 1;
-      } else {
-        callback = modifiers;
-        modifiers = typeof by === 'object' ? by : {};
-        $add[prop] = 1;
-      }
+      return collections;
     }
 
-    var data = {
-      '$add': $add,
-      '$token': this.mixpanel.token,
-      '$distinct_id': distinct_id
-    };
-    data = merge_modifiers(data, modifiers);
-
-    if (this.mixpanel.config.debug) {
-      console.log("Sending the following data to Mixpanel (Engage):");
-      console.log(data);
-    }
+    throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InfiniteLoopError"]('CollectionIterator#toArray() can only be called if the iterator ' + 'is not infinite, or you provide and `end` argument, or you provide ' + 'a `take` argument.');
+  }
 
-    this.mixpanel.send_request({
-      method: "GET",
-      endpoint: "/engage",
-      data: data
-    }, callback);
+  normalizeDateOutput(date) {
+    if (!date) return;
+    return _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapterBase"].adapter.fromDateTime(date);
   }
-  /**
-      people.append(distinct_id, prop, value, modifiers, callback)
-      ---
-      Append a value to a list-valued people analytics property.
-       usage:
-           // append a value to a list, creating it if needed
-          mixpanel.people.append('bob', 'pages_visited', 'homepage');
-           // like mixpanel.people.set(), you can append multiple properties at once:
-          mixpanel.people.append('bob', {
-              list1: 'bob',
-              list2: 123
-          });
-  */
 
+  *collectionIterator() {
+    if (!this.startDate) return;
+    let iterator = this.occurrenceIterator();
+    let date = iterator.next().value;
+    if (!date) return; // `period` === `periodStart` unless the granularity
+    // is `MONTHLY` and a `weekStart` param was provided. In this case,
+    // period holds a date === the first of the current month while
+    // periodStart holds a date === the beginning of the first week of the month
+    // (which might be in the the previous month). Read the
+    // `OccurrenceGenerator#collections()` description for more info.
 
-  append(distinct_id, prop, value, modifiers, callback) {
-    // TODO extract to ProfileHelpers
-    var $append = {};
+    let period = this.getPeriod(this.args.start);
+    let dates = [];
+    let index = 0;
 
-    if (typeof prop === 'object') {
-      if (typeof value === 'object') {
-        callback = modifiers;
-        modifiers = value;
-      } else {
-        callback = value;
+    while (date && (this.args.take === undefined || this.args.take > index)) {
+      while (date && date.isBeforeOrEqual(period.end)) {
+        dates.push(date);
+        date = iterator.next().value;
       }
 
-      Object.keys(prop).forEach(function (key) {
-        $append[key] = prop[key];
-      });
-    } else {
-      $append[prop] = value;
+      yield new Collection(dates.map(date => this.normalizeDateOutput(date)), this.granularity, this.normalizeDateOutput(period.start), this.normalizeDateOutput(period.end));
+      if (!date) return;
+      dates = [];
+      period = !this.args.skipEmptyPeriods ? this.getPeriod(this.incrementPeriod(period.period)) : this.getPeriod(date); // With these args, periods may overlap and the same date may show up
+      // in two periods. Because of this, we need to reset the iterator
+      // (otherwise it won't return a date it has already returned).
 
-      if (typeof modifiers === 'function') {
-        callback = modifiers;
+      if (this.granularity === 'month' && this.weekStart) {
+        iterator = this.iterable._run({
+          start: period.start,
+          end: this.args.end
+        });
+        date = iterator.next().value;
       }
-    }
-
-    var data = {
-      '$append': $append,
-      '$token': this.mixpanel.token,
-      '$distinct_id': distinct_id
-    };
-    data = merge_modifiers(data, modifiers);
 
-    if (this.mixpanel.config.debug) {
-      console.log("Sending the following data to Mixpanel (Engage):");
-      console.log(data);
+      index++;
     }
-
-    this.mixpanel.send_request({
-      method: "GET",
-      endpoint: "/engage",
-      data: data
-    }, callback);
   }
-  /**
-      people.track_charge(distinct_id, amount, properties, modifiers, callback)
-      ---
-      Record that you have charged the current user a certain
-      amount of money.
-       usage:
-           // charge a user $29.99
-          mixpanel.people.track_charge('bob', 29.99);
-           // charge a user $19 on the 1st of february
-          mixpanel.people.track_charge('bob', 19, { '$time': new Date('feb 1 2012') });
-  */
-
-
-  track_charge(distinct_id, amount, properties, modifiers, callback) {
-    if (typeof properties === 'function' || !properties) {
-      callback = properties || function () {};
-
-      properties = {};
-    } else {
-      if (typeof modifiers === 'function' || !modifiers) {
-        callback = modifiers || function () {};
-
-        if (properties.$ignore_time || properties.hasOwnProperty("$ip")) {
-          modifiers = {};
-          Object.keys(properties).forEach(function (key) {
-            modifiers[key] = properties[key];
-            delete properties[key];
-          });
-        }
-      }
-    }
-
-    if (typeof amount !== 'number') {
-      amount = parseFloat(amount);
-
-      if (isNaN(amount)) {
-        console.error("Invalid value passed to mixpanel.people.track_charge - must be a number");
-        return;
-      }
-    }
-
-    properties.$amount = amount;
 
-    if (properties.hasOwnProperty('$time')) {
-      var time = properties.$time;
+  getPeriod(date) {
+    let start;
+    let end;
+    let period;
 
-      if (Object.prototype.toString.call(time) === '[object Date]') {
-        properties.$time = time.toISOString();
-      }
+    if (this.granularity === 'month' && this.weekStart) {
+      start = date.granularity('month').granularity('week', {
+        weekStart: this.weekStart
+      });
+      end = date.endGranularity('month').endGranularity('week', {
+        weekStart: this.weekStart
+      });
+      period = date.granularity('month');
+    } else {
+      start = date.granularity(this.granularity, {
+        weekStart: this.weekStart
+      });
+      end = date.endGranularity(this.granularity, {
+        weekStart: this.weekStart
+      });
+      period = start;
     }
 
-    var data = {
-      '$append': {
-        '$transactions': properties
-      },
-      '$token': this.mixpanel.token,
-      '$distinct_id': distinct_id
+    return {
+      start,
+      end,
+      period
     };
-    data = merge_modifiers(data, modifiers);
-
-    if (this.mixpanel.config.debug) {
-      console.log("Sending the following data to Mixpanel (Engage):");
-      console.log(data);
-    }
-
-    this.mixpanel.send_request({
-      method: "GET",
-      endpoint: "/engage",
-      data: data
-    }, callback);
   }
-  /**
-      people.clear_charges(distinct_id, modifiers, callback)
-      ---
-      Clear all the current user's transactions.
-       usage:
-           mixpanel.people.clear_charges('bob');
-  */
-
-
-  clear_charges(distinct_id, modifiers, callback) {
-    var data = {
-      '$set': {
-        '$transactions': []
-      },
-      '$token': this.mixpanel.token,
-      '$distinct_id': distinct_id
-    };
-
-    if (typeof modifiers === 'function') {
-      callback = modifiers;
-    }
 
-    data = merge_modifiers(data, modifiers);
-
-    if (this.mixpanel.config.debug) {
-      console.log("Clearing this user's charges:", distinct_id);
-    }
-
-    this.mixpanel.send_request({
-      method: "GET",
-      endpoint: "/engage",
-      data: data
-    }, callback);
+  incrementPeriod(date) {
+    return date.add(1, this.granularity);
   }
-  /**
-      people.delete_user(distinct_id, modifiers, callback)
-      ---
-      delete an user record in engage
-       usage:
-           mixpanel.people.delete_user('bob');
-  */
 
+  occurrenceIterator() {
+    let start = this.args.start || this.iterable._run().next().value;
 
-  delete_user(distinct_id, modifiers, callback) {
-    const identifiers = {
-      $distinct_id: distinct_id
-    };
-
-    this._delete_profile({
-      identifiers,
-      modifiers,
-      callback
+    if (!start) return this.iterable._run(this.args);
+    start = this.getPeriod(start).start;
+    return this.iterable._run({
+      start,
+      end: this.args.end
     });
   }
-  /**
-      people.remove(distinct_id, data, modifiers, callback)
-      ---
-      remove a value from a list-valued user profile property.
-       usage:
-           mixpanel.people.remove('bob', {'browsers': 'firefox'});
-           mixpanel.people.remove('bob', {'browsers': 'chrome', 'os': 'linux'});
-  */
-
-
-  remove(distinct_id, data, modifiers, callback) {
-    const identifiers = {
-      '$distinct_id': distinct_id
-    };
 
-    this._remove({
-      identifiers,
-      data,
-      modifiers,
-      callback
-    });
+}
+
+class Operator extends OccurrenceGenerator {
+  constructor(streams, config) {
+    super(config);
+    this.streams = streams;
+    this.config = config;
+    this.timezone = config.timezone;
+    this.streams = streams.map(stream => stream instanceof Operator ? stream : stream.set('timezone', this.timezone));
+    this.isInfinite = this.calculateIsInfinite();
+    this.hasDuration = this.calculateHasDuration();
   }
-  /**
-      people.union(distinct_id, data, modifiers, callback)
-      ---
-      merge value(s) into a list-valued people analytics property.
-       usage:
-           mixpanel.people.union('bob', {'browsers': 'firefox'});
-           mixpanel.people.union('bob', {'browsers': ['chrome'], os: ['linux']});
-  */
-
-
-  union(distinct_id, data, modifiers, callback) {
-    const identifiers = {
-      $distinct_id: distinct_id
-    };
 
-    this._union({
-      identifiers,
-      data,
-      modifiers,
-      callback
-    });
+  normalizeDateInput(date) {
+    if (!date) return;
+    return Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateInputToDateTime"])(date, this.timezone);
   }
-  /**
-      people.unset(distinct_id, prop, modifiers, callback)
-      ---
-      delete a property on an user record in engage
-       usage:
-           mixpanel.people.unset('bob', 'page_views');
-           mixpanel.people.unset('bob', ['page_views', 'last_login']);
-  */
-
-
-  unset(distinct_id, prop, modifiers, callback) {
-    const identifiers = {
-      $distinct_id: distinct_id
-    };
 
-    this._unset({
-      identifiers,
-      prop,
-      modifiers,
-      callback
-    });
+  normalizeRunOutput(date) {
+    return Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["normalizeDateTimeTimezone"])(date, this.timezone);
   }
 
 }
+/**
+ * Simple class that lets us access the `value`, `runArgs`, and `done`
+ * status of an OccurrenceGenerator iterator
+ */
 
-;
-exports.MixpanelPeople = MixpanelPeople;
-
-/***/ }),
-
-/***/ "./node_modules/@jlongster/mixpanel/lib/profile_helpers.js":
-/*!*****************************************************************!*\
-  !*** ./node_modules/@jlongster/mixpanel/lib/profile_helpers.js ***!
-  \*****************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
-
-function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
-
-function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
-
-function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
-
-function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
 
-function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+class IterableWrapper {
+  constructor(generator, runArgs) {
+    this.runArgs = runArgs;
+    this.stream = generator._run(this.runArgs);
+    this.next();
+  }
 
-function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
+  next(args) {
+    const _this$stream$next = this.stream.next(args),
+          done = _this$stream$next.done,
+          value = _this$stream$next.value;
 
-function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
+    this.done = typeof done === 'boolean' ? done : true;
+    this.value = value;
+    return {
+      done,
+      value
+    };
+  }
 
-function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+}
 
-/**
- * Mixin with profile-related helpers (for people and groups)
- */
-const _require = __webpack_require__(/*! ./utils */ "./node_modules/@jlongster/mixpanel/lib/utils.js"),
-      ensure_timestamp = _require.ensure_timestamp;
+function processYieldArgs(streams, options = {}, yieldArgs = {}) {
+  if (!yieldArgs.skipToDate || streams.length === 0) return; // check for invalid `skipToDate` option
 
-function merge_modifiers(data, modifiers) {
-  if (modifiers) {
-    if (modifiers.$ignore_alias) {
-      data.$ignore_alias = modifiers.$ignore_alias;
-    }
+  if (options.reverse ? streams.every(s => s.value.isBeforeOrEqual(yieldArgs.skipToDate)) : streams.every(s => s.value.isAfterOrEqual(yieldArgs.skipToDate))) {
+    throw new Error('A provided `skipToDate` option must be greater than the last yielded date ' + '(or smaller, in the case of reverse iteration)');
+  }
 
-    if (modifiers.$ignore_time) {
-      data.$ignore_time = modifiers.$ignore_time;
-    }
+  for (const stream of streams) {
+    if (stream.done) continue; // no point in calling `next()`
 
-    if (modifiers.hasOwnProperty("$ip")) {
-      data.$ip = modifiers.$ip;
+    if (options.reverse ? stream.value.isBeforeOrEqual(yieldArgs.skipToDate) : stream.value.isAfterOrEqual(yieldArgs.skipToDate)) {
+      // This can happen there are two streams and one stream starts after the other finishes.
+      // Or, when iterating in reverse, when one stream ends before the other starts.
+      // In this case we don't want to call `next()` because it will throw an error.
+      // In both of these cases, calling `next()` won't do anything anyway.
+      continue;
     }
 
-    if (modifiers.hasOwnProperty("$time")) {
-      data.$time = ensure_timestamp(modifiers.$time);
-    }
+    stream.next(yieldArgs);
   }
-
-  return data;
 }
+/** sorts ascending with completed iterables at the end */
 
-;
-exports.merge_modifiers = merge_modifiers;
 
-exports.ProfileHelpers = (Base = Object) => class extends Base {
-  get token() {
-    return this.mixpanel.token;
-  }
+function streamsComparer(a, b) {
+  if (a.done && b.done) return 0;
+  if (a.done) return 1;
+  if (b.done) return -1;
+  if (a.value.isAfter(b.value)) return 1;
+  return -1;
+}
+/** sorts descending with completed iterables at the start */
 
-  get config() {
-    return this.mixpanel.config;
-  }
 
-  _set(prop, to, modifiers, callback, {
-    identifiers,
-    set_once = false
-  }) {
-    let $set = {};
+function streamsReverseComparer(a, b) {
+  if (a.done && b.done) return 0;
+  if (a.done) return -1;
+  if (b.done) return 1;
+  if (a.value.isAfter(b.value)) return -1;
+  return 1;
+}
 
-    if (typeof prop === 'object') {
-      if (typeof to === 'object') {
-        callback = modifiers;
-        modifiers = to;
-      } else {
-        callback = to;
-      }
+function selectNextIterable(streams, options = {}, yieldArgs = {}) {
+  processYieldArgs(streams, options, yieldArgs);
+  return streams.sort(options.reverse ? streamsReverseComparer : streamsComparer).filter(s => !s.done).shift();
+}
 
-      $set = prop;
-    } else {
-      $set[prop] = to;
+function selectLastIterable(streams, options = {}, yieldArgs = {}) {
+  processYieldArgs(streams, options, yieldArgs);
+  return streams.sort(options.reverse ? streamsReverseComparer : streamsComparer).filter(s => !s.done).pop();
+}
+/**
+ * An operator function which accepts a spread of occurrence generators
+ * and adds their occurrences to the output.
+ *
+ * @param streams a spread of occurrence generators
+ */
 
-      if (typeof modifiers === 'function' || !modifiers) {
-        callback = modifiers;
-      }
-    }
 
-    let data = _objectSpread({
-      '$token': this.token
-    }, identifiers);
+function add(...streams) {
+  return options => new AddOperator(streams, options);
+}
 
-    const set_key = set_once ? "$set_once" : "$set";
-    data[set_key] = $set;
+class AddOperator extends Operator {
+  set(_, value) {
+    return new AddOperator(this.streams.map(stream => stream.set('timezone', value)), Object.assign(Object.assign({}, this.config), {
+      base: this.config.base && this.config.base.set('timezone', value),
+      timezone: value
+    }));
+  }
 
-    if ('ip' in $set) {
-      data.$ip = $set.ip;
-      delete $set.ip;
-    }
+  *_run(args = {}) {
+    const wrappedStreams = this.streams.map(input => new IterableWrapper(input, args));
 
-    if ($set.$ignore_time) {
-      data.$ignore_time = $set.$ignore_time;
-      delete $set.$ignore_time;
+    if (this.config.base) {
+      wrappedStreams.push(new IterableWrapper(this.config.base, args));
     }
 
-    data = merge_modifiers(data, modifiers);
+    if (wrappedStreams.length === 0) return;
+    let stream = selectNextIterable(wrappedStreams, args);
 
-    if (this.config.debug) {
-      console.log(`Sending the following data to Mixpanel (${this.endpoint}):`);
-      console.log(data);
-    }
+    while (stream && !stream.done) {
+      // yield the current stream's value
+      const yieldArgs = yield this.normalizeRunOutput(stream.value);
 
-    this.mixpanel.send_request({
-      method: "GET",
-      endpoint: this.endpoint,
-      data
-    }, callback);
-  }
+      if (!(yieldArgs && yieldArgs.skipToDate)) {
+        // iterate the current stream
+        stream.next();
+      } // select the next stream
 
-  _delete_profile({
-    identifiers,
-    modifiers,
-    callback
-  }) {
-    let data = _objectSpread({
-      '$delete': '',
-      '$token': this.token
-    }, identifiers);
 
-    if (typeof modifiers === 'function') {
-      callback = modifiers;
+      stream = selectNextIterable(wrappedStreams, args, yieldArgs);
     }
+  }
 
-    data = merge_modifiers(data, modifiers);
-
-    if (this.config.debug) {
-      console.log(`Deleting profile ${JSON.stringify(identifiers)}`);
-    }
+  calculateIsInfinite() {
+    return this.config.base && this.config.base.isInfinite || this.streams.some(stream => stream.isInfinite);
+  }
 
-    this.mixpanel.send_request({
-      method: "GET",
-      endpoint: this.endpoint,
-      data
-    }, callback);
+  calculateHasDuration() {
+    const streamsDuration = this.streams.every(stream => stream.hasDuration);
+    if (!this.config.base) return streamsDuration;
+    return this.config.base.hasDuration && streamsDuration;
   }
 
-  _remove({
-    identifiers,
-    data,
-    modifiers,
-    callback
-  }) {
-    let $remove = {};
+}
 
-    if (typeof data !== 'object' || Array.isArray(data)) {
-      if (this.config.debug) {
-        console.error("Invalid value passed to #remove - data must be an object with scalar values");
-      }
+class Calendar extends OccurrenceGenerator {
+  /**
+   *
+   * Create a new Calendar object with the specified options.
+   *
+   * ### Options
+   *
+   * - **timezone**: The timezone that yielded occurrences should be *displayed* in.
+   *   Note, this one affects the *displayed* timezone of yielded occurrences.
+   *   For rules, occurrences are first found using the unmodified rule
+   *   config (including whatever timezone the `start` datetime is defined
+   *   in), and then converted to the timezone specified here before being
+   *   yielded. By default, the timezone is *local* time (`null`). So if you don't
+   *   want your rules to be displayed in local time, you must supply a
+   *   timezone argument.
+   * - **data**: arbitrary data you can associate with this Calendar. This
+   *   is the only mutable property of `Calendar` objects.
+   * - **maxDuration**: currently unused.
+   * - **schedules**: either an occurrence generator, or an array of occurrence generators, which should
+   *   be used to build up this Calendar's occurrences. The Calendar will display the union of occurrences
+   *   its schedules produce.
+   *
+   */
+  constructor(args = {}) {
+    super(args);
+    this.schedules = [];
+    this.data = args.data;
 
-      return;
+    if (args.schedules) {
+      this.schedules = Array.isArray(args.schedules) ? args.schedules : [args.schedules];
+      this.schedules = this.schedules.map(schedule => schedule.set('timezone', this.timezone));
     }
 
-    for (const _ref of Object.entries(data)) {
-      var _ref2 = _slicedToArray(_ref, 2);
+    this.isInfinite = this.schedules.some(schedule => schedule.isInfinite);
+    this.hasDuration = this.schedules.every(schedule => schedule.hasDuration);
+  }
 
-      const key = _ref2[0];
-      const val = _ref2[1];
+  occurrences(args = {}) {
+    return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));
+  }
 
-      if (typeof val === 'string' || typeof val === 'number') {
-        $remove[key] = val;
-      } else {
-        if (this.config.debug) {
-          console.error("Invalid argument passed to #remove - values must be scalar");
-          console.error("Passed " + key + ':', val);
-        }
+  collections(args = {}) {
+    return new CollectionIterator(this, this.normalizeCollectionsArgs(args));
+  }
 
-        return;
-      }
+  set(prop, value, options) {
+    if (prop === 'timezone') {
+      return new Calendar({
+        schedules: this.schedules.map(schedule => schedule.set(prop, value, options)),
+        data: this.data,
+        timezone: value,
+        maxDuration: this.maxDuration
+      });
+    } else if (prop === 'schedules') {
+      return new Calendar({
+        schedules: Array.isArray(value) ? value : [value],
+        data: this.data,
+        timezone: this.timezone,
+        maxDuration: this.maxDuration
+      });
     }
 
-    if (Object.keys($remove).length === 0) {
-      return;
-    }
+    throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ArgumentError"]('Unknown value for `prop`: ' + `"${prop}"`);
+  }
 
-    data = _objectSpread({
-      '$remove': $remove,
-      '$token': this.token
-    }, identifiers);
+  *_run(args = {}) {
+    if (this.schedules.length === 0) return;
+    const count = args.take;
+    delete args.take;
+    let iterator;
 
-    if (typeof modifiers === 'function') {
-      callback = modifiers;
+    if (this.schedules.length === 1) {
+      iterator = this.schedules[0]._run(args);
+    } else {
+      iterator = new AddOperator(this.schedules, {
+        timezone: this.timezone
+      })._run(args);
     }
 
-    data = merge_modifiers(data, modifiers);
+    let date = iterator.next().value;
+    let index = 0;
 
-    if (this.config.debug) {
-      console.log(`Sending the following data to Mixpanel (${this.endpoint}):`);
-      console.log(data);
+    while (date && (count === undefined || count > index)) {
+      date = date.add(this, 'generator');
+      const yieldArgs = yield this.normalizeRunOutput(date);
+      date = iterator.next(yieldArgs).value;
+      index++;
     }
 
-    this.mixpanel.send_request({
-      method: "GET",
-      endpoint: this.endpoint,
-      data
-    }, callback);
+    return undefined;
   }
 
-  _union({
-    identifiers,
-    data,
-    modifiers,
-    callback
-  }) {
-    let $union = {};
-
-    if (typeof data !== 'object' || Array.isArray(data)) {
-      if (this.config.debug) {
-        console.error("Invalid value passed to #union - data must be an object with scalar or array values");
-      }
-
-      return;
-    }
-
-    for (const _ref3 of Object.entries(data)) {
-      var _ref4 = _slicedToArray(_ref3, 2);
+}
 
-      const key = _ref4[0];
-      const val = _ref4[1];
+class Dates extends OccurrenceGenerator {
+  constructor(args = {}) {
+    super(args);
+    this.adapters = [];
+    this.isInfinite = false;
+    this.maxDuration = 0;
+    this.datetimes = [];
+    this.data = args.data;
 
-      if (Array.isArray(val)) {
-        var merge_values = val.filter(function (v) {
-          return typeof v === 'string' || typeof v === 'number';
-        });
+    if (args.dates) {
+      this.adapters = args.dates.map(date => {
+        let adapter = this.normalizeDateInputToAdapter(date);
 
-        if (merge_values.length > 0) {
-          $union[key] = merge_values;
-        }
-      } else if (typeof val === 'string' || typeof val === 'number') {
-        $union[key] = [val];
-      } else {
-        if (this.config.debug) {
-          console.error("Invalid argument passed to #union - values must be a scalar value or array");
-          console.error("Passed " + key + ':', val);
+        if (args.duration && !adapter.duration) {
+          adapter = adapter.set('duration', args.duration);
         }
-      }
-    }
 
-    if (Object.keys($union).length === 0) {
-      return;
+        return adapter.set('timezone', this.timezone);
+      });
+      this.datetimes = this.adapters.map(adapter => adapter.toDateTime());
     }
 
-    data = _objectSpread({
-      '$union': $union,
-      '$token': this.token
-    }, identifiers);
+    this.hasDuration = this.datetimes.every(date => !!date.duration);
 
-    if (typeof modifiers === 'function') {
-      callback = modifiers;
+    if (this.hasDuration) {
+      this.maxDuration = this.adapters.reduce((prev, curr) => curr.duration > prev ? curr.duration : prev, 0);
     }
+  }
 
-    data = merge_modifiers(data, modifiers);
+  get length() {
+    return this.adapters.length;
+  }
+  /** Returns the first occurrence or, if there are no occurrences, null. */
 
-    if (this.config.debug) {
-      console.log(`Sending the following data to Mixpanel (${this.endpoint}):`);
-      console.log(data);
-    }
 
-    this.mixpanel.send_request({
-      method: "GET",
-      endpoint: this.endpoint,
-      data
-    }, callback);
+  get firstDate() {
+    return this.adapters[0] || null;
   }
+  /** Returns the last occurrence or, if there are no occurrences, null. */
 
-  _unset({
-    identifiers,
-    prop,
-    modifiers,
-    callback
-  }) {
-    let $unset = [];
 
-    if (Array.isArray(prop)) {
-      $unset = prop;
-    } else if (typeof prop === 'string') {
-      $unset = [prop];
-    } else {
-      if (this.config.debug) {
-        console.error("Invalid argument passed to #unset - must be a string or array");
-        console.error("Passed: " + prop);
-      }
+  get lastDate() {
+    return this.adapters[this.length - 1] || null;
+  }
 
-      return;
-    }
+  occurrences(args = {}) {
+    return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));
+  }
 
-    let data = _objectSpread({
-      '$unset': $unset,
-      '$token': this.token
-    }, identifiers);
+  collections(args = {}) {
+    return new CollectionIterator(this, this.normalizeCollectionsArgs(args));
+  }
 
-    if (typeof modifiers === 'function') {
-      callback = modifiers;
-    }
+  add(value) {
+    return new Dates({
+      dates: [...this.adapters, value],
+      timezone: this.timezone,
+      data: this.data
+    });
+  }
 
-    data = merge_modifiers(data, modifiers);
+  remove(value) {
+    const dates = this.adapters.slice();
+    const input = this.normalizeDateInputToAdapter(value);
+    const index = dates.findIndex(date => date.valueOf() === input.valueOf());
 
-    if (this.config.debug) {
-      console.log(`Sending the following data to Mixpanel (${this.endpoint}):`);
-      console.log(data);
+    if (index >= 0) {
+      dates.splice(index, 1);
     }
 
-    this.mixpanel.send_request({
-      method: "GET",
-      endpoint: this.endpoint,
-      data
-    }, callback);
-  }
-
-};
-
-/***/ }),
+    return new Dates({
+      dates,
+      timezone: this.timezone,
+      data: this.data
+    });
+  }
 
-/***/ "./node_modules/@jlongster/mixpanel/lib/utils.js":
-/*!*******************************************************!*\
-  !*** ./node_modules/@jlongster/mixpanel/lib/utils.js ***!
-  \*******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+  set(prop, value, options = {}) {
+    let timezone = this.timezone;
+    let dates = this.adapters.slice();
 
-/**
- * helper to wait for all callbacks to complete; similar to `Promise.all`
- * exposed to metrics object for unit tests
- * @param {Array} requests
- * @param {Function} handler
- * @param {Function} callback
- */
-exports.async_all = function (requests, handler, callback) {
-  var total = requests.length,
-      errors = null,
-      results = [],
-      done = function (err, result) {
-    if (err) {
-      // errors are `null` unless there is an error, which allows for promisification
-      errors = errors || [];
-      errors.push(err);
+    if (prop === 'timezone') {
+      if (value === this.timezone) return this;else if (options.keepLocalTime) {
+        dates = this.adapters.map(adapter => {
+          const json = adapter.toJSON();
+          json.timezone = value;
+          return this.dateAdapter.fromJSON(json);
+        });
+      }
+      timezone = value;
+    } else if (prop === 'dates') {
+      dates = value;
+    } else if (prop === 'duration') {
+      dates = dates.map(date => date.set('duration', value || 0));
+    } else {
+      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ArgumentError"](`Unexpected prop argument "${prop}". Accepted values are "timezone" or "dates"`);
     }
 
-    results.push(result);
+    return new Dates({
+      dates,
+      data: this.data,
+      timezone
+    });
+  }
+
+  filter(fn) {
+    return new Dates({
+      dates: this.adapters.filter(fn),
+      data: this.data,
+      timezone: this.timezone
+    });
+  }
+
+  *_run(args = {}) {
+    let dates = this.datetimes.sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateTimeSortComparer"]);
 
-    if (--total === 0) {
-      callback(errors, results);
+    if (args.start) {
+      dates = dates.filter(date => date.isAfterOrEqual(args.start));
     }
-  };
 
-  if (total === 0) {
-    callback(errors, results);
-  } else {
-    for (var i = 0, l = requests.length; i < l; i++) {
-      handler(requests[i], done);
+    if (args.end) {
+      dates = dates.filter(date => date.isBeforeOrEqual(args.end));
     }
-  }
-};
-/**
- * Validate type of time property, and convert to Unix timestamp if necessary
- * @param {Date|number} time - value to check
- * @returns {number} Unix timestamp
- */
 
+    if (args.reverse) {
+      dates = dates.slice().reverse();
+    }
 
-exports.ensure_timestamp = function (time) {
-  if (!(time instanceof Date || typeof time === "number")) {
-    throw new Error("`time` property must be a Date or Unix timestamp and is only required for `import` endpoint");
-  }
+    if (args.take) {
+      dates = dates.slice(0, args.take);
+    }
 
-  return time instanceof Date ? Math.floor(time.getTime() / 1000) : time;
-};
+    const dateCache = dates.slice();
+    let date = dateCache.shift();
+    let yieldArgs;
 
-/***/ }),
+    while (date) {
+      if (yieldArgs && yieldArgs.skipToDate && (args.reverse ? yieldArgs.skipToDate.isBefore(date) : yieldArgs.skipToDate.isAfter(date))) {
+        date = dateCache.shift();
+        continue;
+      }
 
-/***/ "./node_modules/@rschedule/core/es2015/generators.js":
-/*!***********************************************************!*\
-  !*** ./node_modules/@rschedule/core/es2015/generators.js ***!
-  \***********************************************************/
-/*! exports provided: AddOperator, Calendar, Collection, CollectionIterator, Dates, IntersectionOperator, MergeDurationOperator, MergeDurationOperatorError, OccurrenceGenerator, OccurrenceIterator, Operator, Rule, RuleBase, Schedule, ScheduleBase, SplitDurationOperator, SplitDurationOperatorError, SubtractOperator, UniqueOperator, add, intersection, mergeDuration, splitDuration, subtract, unique */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+      date = date.add(this, 'generator');
+      yieldArgs = yield this.normalizeRunOutput(date); // Here, we are matching the behavior of the RecurrenceRulesIterator
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AddOperator", function() { return AddOperator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Calendar", function() { return Calendar; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Collection", function() { return Collection; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CollectionIterator", function() { return CollectionIterator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Dates", function() { return Dates; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "IntersectionOperator", function() { return IntersectionOperator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MergeDurationOperator", function() { return MergeDurationOperator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MergeDurationOperatorError", function() { return MergeDurationOperatorError; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OccurrenceGenerator", function() { return OccurrenceGenerator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OccurrenceIterator", function() { return OccurrenceIterator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Operator", function() { return Operator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Rule", function() { return Rule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RuleBase", function() { return RuleBase; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Schedule", function() { return Schedule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ScheduleBase", function() { return ScheduleBase; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SplitDurationOperator", function() { return SplitDurationOperator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SplitDurationOperatorError", function() { return SplitDurationOperatorError; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SubtractOperator", function() { return SubtractOperator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UniqueOperator", function() { return UniqueOperator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "add", function() { return add; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "intersection", function() { return intersection; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeDuration", function() { return mergeDuration; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "splitDuration", function() { return splitDuration; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subtract", function() { return subtract; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unique", function() { return unique; });
-/* harmony import */ var _rschedule_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @rschedule/core */ "./node_modules/@rschedule/core/es2015/main.js");
+      if (yieldArgs && yieldArgs.skipToDate && (args.reverse ? yieldArgs.skipToDate.isAfterOrEqual(date) : yieldArgs.skipToDate.isBeforeOrEqual(date))) {
+        throw new Error('A provided `skipToDate` option must be greater than the last yielded date ' + '(or smaller, in the case of reverse iteration)');
+      }
 
+      date = dateCache.shift();
+    }
 
-class OccurrenceGenerator {
-  constructor(args = {}) {
-    this.timezone = args.timezone !== undefined ? args.timezone : null;
-    this.maxDuration = args.maxDuration || 0;
+    return undefined;
   }
-  /** Returns the first occurrence or, if there are no occurrences, null. */
 
+}
 
-  get firstDate() {
-    if (this._firstDate !== undefined) return this._firstDate;
+class InvalidDateAdapterError extends Error {}
 
-    const start = this._run().next().value;
+let dateAdapterConfig;
 
-    this._firstDate = start ? this.dateAdapter.fromDateTime(start) : null;
-    return this._firstDate;
+class DateAdapterBase {
+  constructor(_date, options) {
+    this.duration = options && options.duration || 0;
+    this.generators = options && options.generators && options.generators.slice() || [];
+
+    if (!Number.isInteger(this.duration) || this.duration < 0) {
+      throw new InvalidDateAdapterError('duration must be a non-negative integer');
+    }
   }
-  /** If generator is infinite, returns `null`. Otherwise returns the end date */
 
+  static set adapter(value) {
+    if (dateAdapterConfig) {
+      throw new Error(`"${dateAdapterConfig.name}" has already been configured.`);
+    }
 
-  get lastDate() {
-    if (this._lastDate !== undefined) return this._lastDate;
+    dateAdapterConfig = value;
+  }
 
-    if (this.isInfinite) {
-      this._lastDate = null;
-      return null;
+  static get adapter() {
+    if (!dateAdapterConfig) {
+      throw new Error('No date adapter has been configured. See rSchedule docs.');
     }
 
-    const end = this._run({
-      reverse: true
-    }).next().value;
+    return dateAdapterConfig;
+  }
 
-    this._lastDate = end ? this.dateAdapter.fromDateTime(end) : null;
-    return this._lastDate;
+  static isDate(_object) {
+    throw unimplementedError('isDate()');
   }
 
-  pipe(...operators) {
-    return operators.reduce((prev, curr) => curr({
-      base: prev,
-      timezone: this.timezone
-    }), this);
+  static fromDate(_date, _options) {
+    throw unimplementedError('fromDate()');
   }
-  /**
-     * Processes the object's rules/dates and returns an iterable for the occurrences.
-     *
-     * Options object:
-     * - `start` the date to begin iteration on
-     * - `end` the date to end iteration on
-     * - `take` the max number of dates to take before ending iteration
-     * - `reverse` whether to iterate in reverse or not
-     *
-     * Examples:
-     *
-     * ```
-     * const iterator = schedule.occurrences({ start: new Date(), take: 5 });
-     
-     * for (const date of iterator) {
-     *   // do stuff
-     * }
-  
-     * iterator.toArray() // returns Date array
-     * iterator.next().value // returns next Date
-     * ```
-     *
-     */
 
+  static fromJSON(_json) {
+    throw unimplementedError('fromJSON()');
+  }
 
-  occurrences(args = {}) {
-    return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));
+  static fromDateTime(_datetime) {
+    throw unimplementedError('fromDateTime()');
   }
   /**
-   * Iterates over the object's occurrences and bundles them into collections
-   * with a specified granularity (default is `"YEARLY"`). Make sure to
-   * read about each option & combination of options below.
-   *
-   * Options object:
-   *   - start?: DateAdapter
-   *   - end?: DateAdapter
-   *   - take?: number
-   *   - reverse?: NOT SUPPORTED
-   *   - granularity?: CollectionsGranularity
-   *   - weekStart?: DateAdapter.Weekday
-   *   - skipEmptyPeriods?: boolean
-   *
-   * Returned `Collection` object:
-   *
-   *   - `dates` property containing an array of DateAdapter objects.
-   *   - `granularity` property containing the granularity.
-   *     - `CollectionsGranularity` === `RuleOptions.Frequency`.
-   *     - default is `"YEARLY"`
-   *   - `periodStart` property containing a DateAdapter equal to the period's
-   *     start time.
-   *   - `periodEnd` property containing a DateAdapter equal to the period's
-   *     end time.
-   *
-   * #### Details:
-   *
-   * `collections()` always returns full periods. This means that the `start` argument is
-   * transformed to be the start of whatever period the `start` argument is in, and the
-   * `end` argument is transformed to be the end of whatever period the `end` argument is
-   * in.
-   *
-   * - Example: with granularity `"YEARLY"`, the `start` argument will be transformed to be the
-   *   start of the year passed in the `start` argument, and the `end` argument will be transformed
-   *   to be the end of the year passed in the `end` argument.
-   *
-   * By default, the `periodStart` value of `Collection` objects produced by this method increments linearly.
-   * This means the returned `Collection#dates` property may have length 0. This can be changed by
-   * passing the `skipEmptyPeriods: true` option, in which case the `periodStart` from one collection to the
-   * next can "jump".
-   *
-   * - Example 1: if your object's first occurrence is 2019/2/1 (February 1st) and you call
-   *   `collection({skipEmptyPeriods: true, granularity: 'DAILY', start: new Date(2019,0,1)})`
-   *   (so starting on January 1st), the first Collection produced will have a `periodStart` in February.
-   *
-   * - Example 2: if your object's first occurrence is 2019/2/1 (February 1st) and you call
-   *   `collection({granularity: 'DAILY', start: new Date(2019,0,1)})`
-   *   (so starting on January 1st), the first collection produced will have a `Collection#periodStart`
-   *   of January 1st and have `Collection#dates === []`. Similarly, the next 30 collections produced
-   *   (Jan 2nd - 31st) will all contain an empty array for the `dates` property. Then the February 1st
-   *   `Collection` will contain dates.
-   *
-   * When giving a `take` argument to `collections()`, you are specifying
-   * the number of `Collection` objects to return (rather than occurrences).
-   *
-   * When choosing a granularity of `"WEEKLY"`, the `weekStart` option is required.
-   *
-   * When choosing a granularity of `"MONTHLY"`:
-   *
-   * - If the `weekStart` option *is not* present, will generate collections with
-   *   the `periodStart` and `periodEnd` at the beginning and end of each month.
-   *
-   * - If the `weekStart` option *is* present, will generate collections with the
-   *   `periodStart` equal to the start of the first week of the month, and the
-   *   `periodEnd` equal to the end of the last week of the month. This behavior could be
-   *   desired when rendering opportunities in a calendar view, where the calendar renders
-   *   full weeks (which may result in the calendar displaying dates in the
-   *   previous or next months).
+   * Returns a string in simplified extended ISO format (ISO 8601).
    *
+   * _Note: this method is intended for testing and its
+   * implementation isn't particularly performant._
    */
 
 
-  collections(args = {}) {
-    return new CollectionIterator(this, this.normalizeCollectionsArgs(args));
+  toISOString() {
+    return this.set('timezone', 'UTC').toDateTime().toISOString();
   }
-  /**
-   * Returns true if an occurrence starts on or between the provided start/end
-   * datetimes. If the `excludeEnds` option is provided, then occurrences
-   * equal to the start/end times are ignored.
-   *
-   * If the occurrence generator has a duration, and `excludeEnds !== true`,
-   * and a `maxDuration` argument is supplied (either in the constructor or
-   * here), then any occurrence that's time overlaps with the start/end times
-   * return true.
-   */
 
+  toDateTime() {
+    const date = DateTime.fromJSON(Object.assign(Object.assign({}, this.toJSON()), {
+      generators: this.generators
+    }));
+    return date;
+  }
 
-  occursBetween(startInput, endInput, options = {}) {
-    const start = this.normalizeDateInput(startInput);
-    const end = this.normalizeDateInput(endInput);
+}
 
-    if (this.hasDuration && !options.excludeEnds) {
-      const maxDuration = this.getMaxDuration('occursBetween', options);
+DateAdapterBase.hasTimezoneSupport = false;
 
-      const iterator = this._run({
-        start: start.subtract(maxDuration, 'millisecond'),
-        end,
-        reverse: true
-      });
+function unimplementedError(name) {
+  return new Error(`You must implement the "${name}" method for this DateAdapter class`);
+}
 
-      for (const day of iterator) {
-        if (day.end.isBefore(start)) continue;
-        return true;
-      }
+var DateAdapter;
 
-      return false;
-    }
+(function (DateAdapter) {
+  DateAdapter.WEEKDAYS = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];
+  DateAdapter.MILLISECONDS_IN_SECOND = 1000;
+  DateAdapter.MILLISECONDS_IN_MINUTE = DateAdapter.MILLISECONDS_IN_SECOND * 60;
+  DateAdapter.MILLISECONDS_IN_HOUR = DateAdapter.MILLISECONDS_IN_MINUTE * 60;
+  DateAdapter.MILLISECONDS_IN_DAY = DateAdapter.MILLISECONDS_IN_HOUR * 24;
+  DateAdapter.MILLISECONDS_IN_WEEK = DateAdapter.MILLISECONDS_IN_DAY * 7;
+})(DateAdapter || (DateAdapter = {}));
 
-    for (const day of this._run({
-      start,
-      end
-    })) {
-      if (options.excludeEnds) {
-        if (day.isEqual(start)) {
-          continue;
-        }
+class InvalidDateTimeError extends Error {}
 
-        if (day.isEqual(end)) {
-          break;
-        }
-      }
+class DateTime {
+  constructor(date, timezone, duration, generators) {
+    this.date = new Date(date);
+    this.timezone = timezone || null;
+    this.duration = duration || 0;
+    this.generators = generators && generators.slice() || [];
 
-      return true;
+    if (!Number.isInteger(this.duration) || this.duration < 0) {
+      throw new InvalidDateTimeError('duration must be a non-negative integer');
     }
 
-    return false;
-  }
-
-  occursOn(rawArgs) {
-    const args = this.normalizeOccursOnArgs(rawArgs);
+    this.assertIsValid();
+  } // /**
+  //  * Similar to `Array.isArray()`, `isInstance()` provides a surefire method
+  //  * of determining if an object is a `DateTime` by checking against the
+  //  * global symbol registry.
+  //  */
+  // static isInstance(object: any): object is DateTime {
+  //   return !!(object && object[DATETIME_ID]);
+  // }
 
-    if (args.weekday) {
-      if (this.isInfinite && !args.before) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ArgumentError"]('When calling `occursOn()` with a `weekday` argument ' + 'and an occurrence object that has infinite occurrences, ' + 'you must include a `before` argument as well.');
-      }
 
-      const start = args.after && (args.excludeEnds ? args.after.add(1, 'day') : args.after);
-      const end = args.before && (args.excludeEnds ? args.before.subtract(1, 'day') : args.before);
+  static fromJSON(json) {
+    const date = new Date(Date.UTC(json.year, json.month - 1, json.day, json.hour, json.minute, json.second, json.millisecond));
+    return new DateTime(date, json.timezone, json.duration, json.generators);
+  }
 
-      const iterator = this._run({
-        start,
-        end
-      });
+  static fromDateAdapter(adapter) {
+    return DateTime.fromJSON(Object.assign(Object.assign({}, adapter.toJSON()), {
+      generators: adapter.generators
+    }));
+  }
+  /**
+   * Returns `undefined` if `duration` is `0`. Else returns
+   * the `end` date.
+   */
 
-      let date = iterator.next().value;
-      if (!date) return false;
 
-      while (date) {
-        if (date.get('weekday') === args.weekday) {
-          return true;
-        }
+  get end() {
+    if (!this.duration) return;
+    if (this._end) return this._end;
+    this._end = this.add(this.duration, 'millisecond');
+    return this._end;
+  } // While we constrain the argument to be another DateAdapter in typescript
+  // we handle the case of someone passing in another type of object in javascript
 
-        date = iterator.next({
-          skipToDate: date.add(Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["getDifferenceBetweenWeekdays"])(date.get('weekday'), args.weekday), 'day').granularity('day')
-        }).value;
-      }
 
+  isEqual(object) {
+    if (!object) {
       return false;
     }
 
-    if (!args.date) {
-      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ArgumentError"](`"occursOn()" must be called with either a "date" or "weekday" argument`);
-    }
+    assertSameTimeZone(this, object);
+    return this.valueOf() === object.valueOf();
+  }
 
-    if (this.hasDuration) {
-      const maxDuration = this.getMaxDuration('occursOn', args);
+  isBefore(object) {
+    assertSameTimeZone(this, object);
+    return this.valueOf() < object.valueOf();
+  }
 
-      const iterator = this._run({
-        start: args.date.subtract(maxDuration, 'millisecond'),
-        end: args.date
-      });
+  isBeforeOrEqual(object) {
+    assertSameTimeZone(this, object);
+    return this.valueOf() <= object.valueOf();
+  }
 
-      for (const date of iterator) {
-        if (date.end.isBefore(args.date)) continue;
-        if (date.isAfter(args.date)) return false;
-        return true;
-      }
+  isAfter(object) {
+    assertSameTimeZone(this, object);
+    return this.valueOf() > object.valueOf();
+  }
 
-      return false;
-    }
+  isAfterOrEqual(object) {
+    assertSameTimeZone(this, object);
+    return this.valueOf() >= object.valueOf();
+  }
 
-    for (const day of this._run({
-      start: args.date,
-      end: args.date
-    })) {
-      return !!day;
+  isOccurring(object) {
+    if (!this.duration) {
+      throw new Error('DateTime#isOccurring() is only applicable to DateTimes with durations');
     }
 
-    return false;
+    assertSameTimeZone(this, object);
+    return object.isAfterOrEqual(this) && object.isBeforeOrEqual(this.add(this.duration, 'millisecond'));
   }
-  /**
-   * Returns true if an occurrence starts after the provided datetime.
-   * If the `excludeStart` option is provided, then occurrences
-   * equal to the provided datetime are ignored.
-   *
-   * If the occurrence generator has a duration, and `excludeStart !== true`,
-   * and a `maxDuration` argument is supplied (either in the constructor or
-   * here), then any occurrence that's end time is after/equal to the provided
-   * datetime return true.
-   */
 
+  add(amount, unit) {
+    switch (unit) {
+      case 'generator':
+        {
+          const generators = this.generators.slice();
+          generators.unshift(amount);
+          return new DateTime(this.date, this.timezone, this.duration, generators);
+        }
 
-  occursAfter(date, options = {}) {
-    const adapter = this.normalizeDateInput(date);
+      case 'year':
+        return this.forkDateTime(addUTCYears(this.date, amount));
 
-    if (this.hasDuration && !options.excludeStart) {
-      const maxDuration = this.getMaxDuration('occursAfter', options);
+      case 'month':
+        return this.forkDateTime(addUTCMonths(this.date, amount));
 
-      const iterator = this._run({
-        start: adapter.subtract(maxDuration, 'millisecond')
-      });
+      case 'week':
+        return this.forkDateTime(addUTCWeeks(this.date, amount));
 
-      for (const date of iterator) {
-        if (date.end.isBefore(adapter)) continue;
-        return true;
-      }
+      case 'day':
+        return this.forkDateTime(addUTCDays(this.date, amount));
 
-      return false;
-    }
+      case 'hour':
+        return this.forkDateTime(addUTCHours(this.date, amount));
 
-    for (const day of this._run({
-      start: adapter
-    })) {
-      if (options.excludeStart && day.isEqual(adapter)) {
-        continue;
-      }
+      case 'minute':
+        return this.forkDateTime(addUTCMinutes(this.date, amount));
 
-      return true;
-    }
+      case 'second':
+        return this.forkDateTime(addUTCSeconds(this.date, amount));
 
-    return false;
-  }
-  /**
-   * Returns true if an occurrence starts before the provided datetime.
-   * If the `excludeStart` option is provided, then occurrences
-   * equal to the provided datetime are ignored.
-   *
-   * If the occurrence generator has a duration, and `excludeStart` is
-   * also provided, then this will only return true if an occurrence
-   * both starts and ends before the provided datetime.
-   */
+      case 'millisecond':
+        return this.forkDateTime(addUTCMilliseconds(this.date, amount));
 
+      default:
+        throw new Error('Invalid unit provided to `DateTime#add`');
+    }
+  }
 
-  occursBefore(date, options = {}) {
-    const adapter = this.normalizeDateInput(date);
+  subtract(amount, unit) {
+    switch (unit) {
+      case 'year':
+        return this.forkDateTime(subUTCYears(this.date, amount));
 
-    if (this.hasDuration && options.excludeStart) {
-      for (const day of this._run({
-        end: adapter,
-        reverse: true
-      })) {
-        if (day.end.isAfterOrEqual(adapter)) continue;
-        return true;
-      }
+      case 'month':
+        return this.forkDateTime(subUTCMonths(this.date, amount));
 
-      return false;
-    }
+      case 'week':
+        return this.forkDateTime(subUTCWeeks(this.date, amount));
 
-    for (const day of this._run({
-      end: adapter,
-      reverse: true
-    })) {
-      if (options.excludeStart && day.isEqual(adapter)) {
-        continue;
-      }
+      case 'day':
+        return this.forkDateTime(subUTCDays(this.date, amount));
 
-      return true;
-    }
+      case 'hour':
+        return this.forkDateTime(subUTCHours(this.date, amount));
 
-    return false;
-  }
+      case 'minute':
+        return this.forkDateTime(subUTCMinutes(this.date, amount));
 
-  get dateAdapter() {
-    return _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapterBase"].adapter;
-  }
+      case 'second':
+        return this.forkDateTime(subUTCSeconds(this.date, amount));
 
-  normalizeOccurrencesArgs(rawArgs) {
-    return Object.assign(Object.assign({}, rawArgs), {
-      start: this.normalizeDateInput(rawArgs.start),
-      end: this.normalizeDateInput(rawArgs.end)
-    });
-  }
+      case 'millisecond':
+        return this.forkDateTime(subUTCMilliseconds(this.date, amount));
 
-  normalizeCollectionsArgs(rawArgs) {
-    if (rawArgs.reverse !== undefined) {
-      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ArgumentError"]('`collections()` does not support the `reverse` option at this time.');
+      default:
+        throw new Error('Invalid unit provided to `DateTime#subtract`');
     }
-
-    return Object.assign(Object.assign({}, rawArgs), {
-      start: this.normalizeDateInput(rawArgs.start),
-      end: this.normalizeDateInput(rawArgs.end)
-    });
   }
 
-  normalizeOccursOnArgs(rawArgs = {}) {
-    return Object.assign(Object.assign({}, rawArgs), {
-      date: this.normalizeDateInput(rawArgs.date),
-      after: this.normalizeDateInput(rawArgs.after),
-      before: this.normalizeDateInput(rawArgs.before),
-      excludeDates: rawArgs.excludeDates && rawArgs.excludeDates.map(date => this.normalizeDateInput(date))
-    });
-  }
+  get(unit) {
+    switch (unit) {
+      case 'year':
+        return this.date.getUTCFullYear();
 
-  normalizeRunArgs(args) {
-    return Object.assign(Object.assign({}, args), {
-      start: this.normalizeDateInput(args.start),
-      end: this.normalizeDateInput(args.end)
-    });
-  }
+      case 'month':
+        return this.date.getUTCMonth() + 1;
 
-  normalizeDateInput(date) {
-    return date ? Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateInputToDateTime"])(date, this.timezone) : undefined;
-  }
+      case 'yearday':
+        return getUTCYearDay(this.date);
 
-  normalizeDateInputToAdapter(date) {
-    if (!date) return;
-    return Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateInputToDateAdapter"])(date);
-  }
+      case 'weekday':
+        return DateAdapter.WEEKDAYS[this.date.getUTCDay()];
 
-  normalizeRunOutput(date) {
-    return Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["normalizeDateTimeTimezone"])(date, this.timezone);
+      case 'day':
+        return this.date.getUTCDate();
+
+      case 'hour':
+        return this.date.getUTCHours();
+
+      case 'minute':
+        return this.date.getUTCMinutes();
+
+      case 'second':
+        return this.date.getUTCSeconds();
+
+      case 'millisecond':
+        return this.date.getUTCMilliseconds();
+
+      default:
+        throw new Error('Invalid unit provided to `DateTime#set`');
+    }
   }
 
-  getMaxDuration(method, options) {
-    const maxDuration = options.maxDuration || this.maxDuration;
+  set(unit, value) {
+    if (unit === 'duration') {
+      return new DateTime(this.date, this.timezone, value, this.generators);
+    }
 
-    if (!Number.isInteger(maxDuration)) {
-      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ArgumentError"](`When an occurrence generator ` + `has a duration, a 'maxDuration' argument must be supplied ` + `to ${method}().`);
+    if (unit === 'generators') {
+      return new DateTime(this.date, this.timezone, this.duration, value);
     }
 
-    return maxDuration;
-  }
+    let date = new Date(this.date);
 
-}
+    switch (unit) {
+      case 'year':
+        date.setUTCFullYear(value);
+        break;
 
-class OccurrenceIterator {
-  constructor(iterable, args) {
-    this.iterable = iterable;
-    this.args = args; // Need to assert the return type of these methods to prevent typescript from
-    // incorrectly reducing them to `DateAdapterBase & { generators: G }`.
+      case 'month':
+        {
+          // If the current day of the month
+          // is greater than days in the month we are moving to, we need to also
+          // set the day to the end of that month.
+          const length = monthLength(value, date.getUTCFullYear());
+          const day = date.getUTCDate();
 
-    this[Symbol.iterator] = () => this.occurrenceIterator();
+          if (day > length) {
+            date.setUTCDate(1);
+            date.setUTCMonth(value);
+            date = subUTCDays(date, 1);
+          } else {
+            date.setUTCMonth(value - 1);
+          }
 
-    this.iterator = iterable._run(args);
-    this.isInfinite = iterable.isInfinite;
-  }
+          break;
+        }
 
-  next(args) {
-    return this.occurrenceIterator(args).next();
-  }
+      case 'day':
+        date.setUTCDate(value);
+        break;
 
-  toArray() {
-    if (this.args.end || this.args.take || !this.isInfinite) {
-      return Array.from(this.occurrenceIterator());
-    }
+      case 'hour':
+        date.setUTCHours(value);
+        break;
 
-    throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InfiniteLoopError"]('OccurrenceIterator#toArray() can only be called if the iterator ' + 'is not infinite, or you provide and `end` argument, or you provide ' + 'a `take` argument.');
-  }
+      case 'minute':
+        date.setUTCMinutes(value);
+        break;
 
-  *occurrenceIterator(rawArgs) {
-    let args = this.normalizeRunArgs(rawArgs);
-    let date = this.iterator.next(args).value;
+      case 'second':
+        date.setUTCSeconds(value);
+        break;
 
-    while (date) {
-      const yieldArgs = yield this.normalizeDateOutput(date);
-      args = this.normalizeRunArgs(yieldArgs);
-      date = this.iterator.next(args).value;
+      case 'millisecond':
+        date.setUTCMilliseconds(value);
+        break;
+
+      default:
+        throw new Error('Invalid unit provided to `DateTime#set`');
     }
 
-    return undefined;
+    return this.forkDateTime(date);
   }
 
-  normalizeRunArgs(args) {
-    return {
-      skipToDate: this.normalizeDateInput(args && args.skipToDate)
-    };
-  }
+  granularity(granularity, opt = {}) {
+    let date = this.forkDateTime(this.date);
 
-  normalizeDateInput(date) {
-    return date ? Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateInputToDateTime"])(date, this.iterable.timezone) : undefined;
-  }
+    switch (granularity) {
+      case 'year':
+        date = date.set('month', 1);
 
-  normalizeDateOutput(date) {
-    if (!date) return;
-    return date ? _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapterBase"].adapter.fromDateTime(date) : undefined;
-  }
+      case 'month':
+        date = date.set('day', 1);
+        break;
 
-}
+      case 'week':
+        date = setDateToStartOfWeek(date, opt.weekStart);
+    }
 
-class Collection {
-  constructor(dates = [], granularity, periodStart, periodEnd) {
-    this.dates = dates;
-    this.granularity = granularity;
-    this.periodStart = periodStart;
-    this.periodEnd = periodEnd;
-  }
+    switch (granularity) {
+      case 'year':
+      case 'month':
+      case 'week':
+      case 'day':
+        date = date.set('hour', 0);
 
-}
+      case 'hour':
+        date = date.set('minute', 0);
 
-class CollectionIterator {
-  constructor(iterable, args) {
-    this.iterable = iterable;
-    this.args = args;
-    this.granularity = 'year';
+      case 'minute':
+        date = date.set('second', 0);
 
-    this[Symbol.iterator] = () => this.iterator;
+      case 'second':
+        date = date.set('millisecond', 0);
 
-    if (args.granularity) {
-      this.granularity = args.granularity;
+      case 'millisecond':
+        return date;
 
-      if (this.granularity === 'week' && !args.weekStart) {
-        throw new Error('"week" granularity requires `weekStart` arg');
-      }
+      default:
+        throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);
     }
+  }
 
-    if (args.weekStart) {
-      this.weekStart = args.weekStart;
-    }
+  endGranularity(granularity, opt = {}) {
+    let date = this.forkDateTime(this.date);
 
-    if (args.reverse) {
-      throw new Error('`OccurrenceGenerator#collections()` does not support iterating in reverse. ' + 'Though `OccurrenceGenerator#occurrences()` does support iterating in reverse.');
-    } // Set the end arg, if present, to the end of the period.
+    switch (granularity) {
+      case 'year':
+        date = date.set('month', 12);
 
+      case 'month':
+        date = date.set('day', monthLength(date.get('month'), date.get('year')));
+        break;
 
-    this.args = Object.assign(Object.assign({}, args), {
-      start: args.start || iterable._run().next().value,
-      end: args.end && this.getPeriod(args.end).end
-    });
-    this.startDate = this.args.start && this.normalizeDateOutput(this.getPeriod(this.args.start).start) || null;
-    this.iterator = this.collectionIterator();
-  }
+      case 'week':
+        date = setDateToEndOfWeek(date, opt.weekStart);
+    }
 
-  next() {
-    return this.iterator.next();
-  }
-  /**
-   * While `next()` and `[Symbol.iterator]` both share state,
-   * `toArray()` does not share state and always returns the whole
-   * collections array.
-   */
+    switch (granularity) {
+      case 'year':
+      case 'month':
+      case 'week':
+      case 'day':
+        date = date.set('hour', 23);
+
+      case 'hour':
+        date = date.set('minute', 59);
 
+      case 'minute':
+        date = date.set('second', 59);
 
-  toArray() {
-    if (this.args.end || this.args.take || !this.iterable.isInfinite) {
-      const collections = [];
+      case 'second':
+        date = date.set('millisecond', 999);
 
-      for (const collection of this.collectionIterator()) {
-        collections.push(collection);
-      }
+      case 'millisecond':
+        return date;
 
-      return collections;
+      default:
+        throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);
     }
-
-    throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InfiniteLoopError"]('CollectionIterator#toArray() can only be called if the iterator ' + 'is not infinite, or you provide and `end` argument, or you provide ' + 'a `take` argument.');
   }
 
-  normalizeDateOutput(date) {
-    if (!date) return;
-    return _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapterBase"].adapter.fromDateTime(date);
+  toISOString() {
+    return this.date.toISOString();
   }
 
-  *collectionIterator() {
-    if (!this.startDate) return;
-    let iterator = this.occurrenceIterator();
-    let date = iterator.next().value;
-    if (!date) return; // `period` === `periodStart` unless the granularity
-    // is `MONTHLY` and a `weekStart` param was provided. In this case,
-    // period holds a date === the first of the current month while
-    // periodStart holds a date === the beginning of the first week of the month
-    // (which might be in the the previous month). Read the
-    // `OccurrenceGenerator#collections()` description for more info.
-
-    let period = this.getPeriod(this.args.start);
-    let dates = [];
-    let index = 0;
-
-    while (date && (this.args.take === undefined || this.args.take > index)) {
-      while (date && date.isBeforeOrEqual(period.end)) {
-        dates.push(date);
-        date = iterator.next().value;
-      }
-
-      yield new Collection(dates.map(date => this.normalizeDateOutput(date)), this.granularity, this.normalizeDateOutput(period.start), this.normalizeDateOutput(period.end));
-      if (!date) return;
-      dates = [];
-      period = !this.args.skipEmptyPeriods ? this.getPeriod(this.incrementPeriod(period.period)) : this.getPeriod(date); // With these args, periods may overlap and the same date may show up
-      // in two periods. Because of this, we need to reset the iterator
-      // (otherwise it won't return a date it has already returned).
+  toDateTime() {
+    return this;
+  }
 
-      if (this.granularity === 'month' && this.weekStart) {
-        iterator = this.iterable._run({
-          start: period.start,
-          end: this.args.end
-        });
-        date = iterator.next().value;
-      }
+  toJSON() {
+    const json = {
+      timezone: this.timezone,
+      year: this.get('year'),
+      month: this.get('month'),
+      day: this.get('day'),
+      hour: this.get('hour'),
+      minute: this.get('minute'),
+      second: this.get('second'),
+      millisecond: this.get('millisecond')
+    };
 
-      index++;
+    if (this.duration) {
+      json.duration = this.duration;
     }
+
+    return json;
   }
 
-  getPeriod(date) {
-    let start;
-    let end;
-    let period;
+  valueOf() {
+    return this.date.valueOf();
+  }
 
-    if (this.granularity === 'month' && this.weekStart) {
-      start = date.granularity('month').granularity('week', {
-        weekStart: this.weekStart
-      });
-      end = date.endGranularity('month').endGranularity('week', {
-        weekStart: this.weekStart
-      });
-      period = date.granularity('month');
-    } else {
-      start = date.granularity(this.granularity, {
-        weekStart: this.weekStart
-      });
-      end = date.endGranularity(this.granularity, {
-        weekStart: this.weekStart
-      });
-      period = start;
+  assertIsValid() {
+    if (isNaN(this.valueOf())) {
+      throw new InvalidDateTimeError('DateTime has invalid date.');
     }
 
-    return {
-      start,
-      end,
-      period
-    };
+    return true;
   }
 
-  incrementPeriod(date) {
-    return date.add(1, this.granularity);
+  forkDateTime(date) {
+    return new DateTime(date, this.timezone, this.duration, this.generators);
   }
 
-  occurrenceIterator() {
-    let start = this.args.start || this.iterable._run().next().value;
+}
 
-    if (!start) return this.iterable._run(this.args);
-    start = this.getPeriod(start).start;
-    return this.iterable._run({
-      start,
-      end: this.args.end
-    });
+function assertSameTimeZone(x, y) {
+  if (x.timezone !== y.timezone) {
+    throw new InvalidDateTimeError('Attempted to compare a datetime to another date in a different timezone: ' + JSON.stringify(x) + ' and ' + JSON.stringify(y));
   }
 
+  return true;
 }
 
-class Operator extends OccurrenceGenerator {
-  constructor(streams, config) {
-    super(config);
-    this.streams = streams;
-    this.config = config;
-    this.timezone = config.timezone;
-    this.streams = streams.map(stream => stream instanceof Operator ? stream : stream.set('timezone', this.timezone));
-    this.isInfinite = this.calculateIsInfinite();
-    this.hasDuration = this.calculateHasDuration();
-  }
+function setDateToStartOfWeek(date, wkst) {
+  const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));
+  return date.subtract(index, 'day');
+}
 
-  normalizeDateInput(date) {
-    if (!date) return;
-    return Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateInputToDateTime"])(date, this.timezone);
+function setDateToEndOfWeek(date, wkst) {
+  const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));
+  return date.add(6 - index, 'day');
+}
+
+function orderedWeekdays(wkst = 'SU') {
+  const wkdays = DateAdapter.WEEKDAYS.slice();
+  let index = wkdays.indexOf(wkst);
+
+  while (index !== 0) {
+    shiftArray(wkdays);
+    index--;
   }
 
-  normalizeRunOutput(date) {
-    return Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["normalizeDateTimeTimezone"])(date, this.timezone);
+  return wkdays;
+}
+
+function shiftArray(array, from = 'first') {
+  if (array.length === 0) {
+    return array;
+  } else if (from === 'first') {
+    array.push(array.shift());
+  } else {
+    array.unshift(array.pop());
   }
 
+  return array;
 }
 /**
- * Simple class that lets us access the `value`, `runArgs`, and `done`
- * status of an OccurrenceGenerator iterator
+ * Returns the days in the given month.
+ *
+ * @param month base-1
+ * @param year
  */
 
 
-class IterableWrapper {
-  constructor(generator, runArgs) {
-    this.runArgs = runArgs;
-    this.stream = generator._run(this.runArgs);
-    this.next();
-  }
+function monthLength(month, year) {
+  const block = {
+    1: 31,
+    2: getDaysInFebruary(year),
+    3: 31,
+    4: 30,
+    5: 31,
+    6: 30,
+    7: 31,
+    8: 31,
+    9: 30,
+    10: 31,
+    11: 30,
+    12: 31
+  };
+  return block[month];
+}
 
-  next(args) {
-    const _this$stream$next = this.stream.next(args),
-          done = _this$stream$next.done,
-          value = _this$stream$next.value;
+function getDaysInFebruary(year) {
+  return isLeapYear(year) ? 29 : 28;
+} // taken from date-fn
 
-    this.done = typeof done === 'boolean' ? done : true;
-    this.value = value;
-    return {
-      done,
-      value
-    };
-  }
 
+function isLeapYear(year) {
+  return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;
 }
 
-function processYieldArgs(streams, options = {}, yieldArgs = {}) {
-  if (!yieldArgs.skipToDate || streams.length === 0) return; // check for invalid `skipToDate` option
+function getUTCYearDay(now) {
+  const start = new Date(Date.UTC(now.getUTCFullYear(), 0, 1));
+  const diff = now.valueOf() - start.valueOf();
+  return 1 + Math.floor(diff / DateAdapter.MILLISECONDS_IN_DAY);
+}
+/**
+ * These functions are basically lifted from `date-fns`, but changed
+ * to use the UTC date methods, which `date-fns` doesn't support.
+ */
 
-  if (options.reverse ? streams.every(s => s.value.isBeforeOrEqual(yieldArgs.skipToDate)) : streams.every(s => s.value.isAfterOrEqual(yieldArgs.skipToDate))) {
-    throw new Error('A provided `skipToDate` option must be greater than the last yielded date ' + '(or smaller, in the case of reverse iteration)');
+
+function toInteger(input) {
+  if (input === null || input === true || input === false) {
+    return NaN;
   }
 
-  for (const stream of streams) {
-    if (stream.done) continue; // no point in calling `next()`
+  const int = Number(input);
 
-    if (options.reverse ? stream.value.isBeforeOrEqual(yieldArgs.skipToDate) : stream.value.isAfterOrEqual(yieldArgs.skipToDate)) {
-      // This can happen there are two streams and one stream starts after the other finishes.
-      // Or, when iterating in reverse, when one stream ends before the other starts.
-      // In this case we don't want to call `next()` because it will throw an error.
-      // In both of these cases, calling `next()` won't do anything anyway.
-      continue;
-    }
+  if (isNaN(int)) {
+    return int;
+  }
 
-    stream.next(yieldArgs);
+  return int < 0 ? Math.ceil(int) : Math.floor(int);
+}
+
+function addMilliseconds(dirtyDate, dirtyAmount) {
+  if (arguments.length < 2) {
+    throw new TypeError('2 arguments required, but only ' + arguments.length + ' present');
   }
+
+  const timestamp = dirtyDate.valueOf();
+  const amount = toInteger(dirtyAmount);
+  return new Date(timestamp + amount);
+}
+
+function addUTCYears(date, input) {
+  const amount = toInteger(input);
+  return addUTCMonths(date, amount * 12);
 }
-/** sorts ascending with completed iterables at the end */
 
+function addUTCMonths(date, input) {
+  const amount = toInteger(input);
+  date = new Date(date);
+  const desiredMonth = date.getUTCMonth() + amount;
+  const dateWithDesiredMonth = new Date(0);
+  dateWithDesiredMonth.setUTCFullYear(date.getUTCFullYear(), desiredMonth, 1);
+  dateWithDesiredMonth.setUTCHours(0, 0, 0, 0);
+  const daysInMonth = monthLength(dateWithDesiredMonth.getUTCMonth() + 1, dateWithDesiredMonth.getUTCFullYear()); // Set the last day of the new month
+  // if the original date was the last day of the longer month
 
-function streamsComparer(a, b) {
-  if (a.done && b.done) return 0;
-  if (a.done) return 1;
-  if (b.done) return -1;
-  if (a.value.isAfter(b.value)) return 1;
-  return -1;
+  date.setUTCMonth(desiredMonth, Math.min(daysInMonth, date.getUTCDate()));
+  return date;
 }
-/** sorts descending with completed iterables at the start */
 
+function addUTCWeeks(date, input) {
+  const amount = toInteger(input);
+  const days = amount * 7;
+  return addUTCDays(date, days);
+}
 
-function streamsReverseComparer(a, b) {
-  if (a.done && b.done) return 0;
-  if (a.done) return -1;
-  if (b.done) return 1;
-  if (a.value.isAfter(b.value)) return -1;
-  return 1;
+function addUTCDays(date, input) {
+  // by adding milliseconds rather than days, we supress the native Date object's automatic
+  // daylight savings time conversions which we don't want in UTC mode
+  return addUTCMilliseconds(date, toInteger(input) * DateAdapter.MILLISECONDS_IN_DAY);
 }
 
-function selectNextIterable(streams, options = {}, yieldArgs = {}) {
-  processYieldArgs(streams, options, yieldArgs);
-  return streams.sort(options.reverse ? streamsReverseComparer : streamsComparer).filter(s => !s.done).shift();
+function addUTCHours(date, input) {
+  const amount = toInteger(input);
+  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_HOUR);
 }
 
-function selectLastIterable(streams, options = {}, yieldArgs = {}) {
-  processYieldArgs(streams, options, yieldArgs);
-  return streams.sort(options.reverse ? streamsReverseComparer : streamsComparer).filter(s => !s.done).pop();
+function addUTCMinutes(date, input) {
+  const amount = toInteger(input);
+  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_MINUTE);
 }
-/**
- * An operator function which accepts a spread of occurrence generators
- * and adds their occurrences to the output.
- *
- * @param streams a spread of occurrence generators
- */
 
+function addUTCSeconds(date, input) {
+  const amount = toInteger(input);
+  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_SECOND);
+}
 
-function add(...streams) {
-  return options => new AddOperator(streams, options);
+function addUTCMilliseconds(date, input) {
+  const amount = toInteger(input);
+  const timestamp = date.getTime();
+  return new Date(timestamp + amount);
 }
 
-class AddOperator extends Operator {
-  set(_, value) {
-    return new AddOperator(this.streams.map(stream => stream.set('timezone', value)), Object.assign(Object.assign({}, this.config), {
-      base: this.config.base && this.config.base.set('timezone', value),
-      timezone: value
-    }));
-  }
+function subUTCYears(date, amount) {
+  return addUTCYears(date, -amount);
+}
 
-  *_run(args = {}) {
-    const wrappedStreams = this.streams.map(input => new IterableWrapper(input, args));
+function subUTCMonths(date, amount) {
+  return addUTCMonths(date, -amount);
+}
 
-    if (this.config.base) {
-      wrappedStreams.push(new IterableWrapper(this.config.base, args));
-    }
+function subUTCWeeks(date, amount) {
+  return addUTCWeeks(date, -amount);
+}
 
-    if (wrappedStreams.length === 0) return;
-    let stream = selectNextIterable(wrappedStreams, args);
+function subUTCDays(date, amount) {
+  return addUTCDays(date, -amount);
+}
 
-    while (stream && !stream.done) {
-      // yield the current stream's value
-      const yieldArgs = yield this.normalizeRunOutput(stream.value);
+function subUTCHours(date, amount) {
+  return addUTCHours(date, -amount);
+}
 
-      if (!(yieldArgs && yieldArgs.skipToDate)) {
-        // iterate the current stream
-        stream.next();
-      } // select the next stream
+function subUTCMinutes(date, amount) {
+  return addUTCMinutes(date, -amount);
+}
 
+function subUTCSeconds(date, amount) {
+  return addUTCSeconds(date, -amount);
+}
 
-      stream = selectNextIterable(wrappedStreams, args, yieldArgs);
-    }
+function subUTCMilliseconds(date, amount) {
+  return addUTCMilliseconds(date, -amount);
+} // export function normalizeDateInput<T extends DateAdapter>(
+//   dateAdapter: DateAdapterConstructor<T>,
+//   input: DateInput<T>,
+//   timezone: string | null,
+// ): DateTime {
+//   if (input instanceof DateTime) {
+//     if (input.timezone !== timezone) {
+//       return dateAdapter
+//         .fromDateTime(input)
+//         .set('timezone', timezone)
+//         .toDateTime();
+//     }
+//     return input;
+//   }
+//   return input instanceof DateAdapter
+//     ? input.set('timezone', timezone).toDateTime()
+//     : new dateAdapter(input).toDateTime();
+// }
+
+
+function normalizeDateTimeTimezone(date, timezone) {
+  if (date.timezone !== timezone) {
+    return DateAdapterBase.adapter.fromDateTime(date).set('timezone', timezone).toDateTime();
   }
 
-  calculateIsInfinite() {
-    return this.config.base && this.config.base.isInfinite || this.streams.some(stream => stream.isInfinite);
+  return date;
+}
+
+class RuleBase extends OccurrenceGenerator {
+  constructor(recurrenceRules, config, options = {}) {
+    super(options);
+    this.recurrenceRules = recurrenceRules;
+    this.options = Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["cloneRuleOptions"])(config);
+    this.normOptions = Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["normalizeRuleOptions"])(this.recurrenceRules, this.options);
+    this.timezone = options.timezone !== undefined ? options.timezone : this.normOptions.start.timezone;
+    this.data = options.data;
+    this.hasDuration = !!config.duration;
+    if (this.hasDuration) this.duration = config.duration;
+    this.isInfinite = this.normOptions.end === undefined && this.normOptions.count === undefined;
   }
 
-  calculateHasDuration() {
-    const streamsDuration = this.streams.every(stream => stream.hasDuration);
-    if (!this.config.base) return streamsDuration;
-    return this.config.base.hasDuration && streamsDuration;
+  occurrences(args = {}) {
+    return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));
+  }
+
+  collections(args = {}) {
+    return new CollectionIterator(this, this.normalizeCollectionsArgs(args));
+  }
+
+  *_run(rawArgs = {}) {
+    const args = this.normalizeRunArgs(rawArgs);
+    const iterator = new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RecurrenceRulesIterator"](Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["recurrenceRulesReducer"])(this.recurrenceRules), this.normOptions, args);
+    let date = iterator.next().value;
+    let index = 0;
+
+    while (date && (args.take === undefined || index < args.take)) {
+      index++;
+      date = date.add(this, 'generator');
+      const yieldArgs = yield this.normalizeRunOutput(date);
+
+      if (yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate) {
+        // The RecurrenceRuleIterator might have a different timezone from the rule.
+        // Because of this, the yieldArgs will not properly be normalized by the
+        // OccurrenceIterator, so we need to do it here
+        date = iterator.next(Object.assign(Object.assign({}, yieldArgs), {
+          skipToDate: normalizeDateTimeTimezone(yieldArgs.skipToDate, iterator.start.timezone)
+        })).value;
+      } else {
+        // theoretically, the yieldArgs are undefined here
+        // maybe in the future there will be other yieldArg options though
+        date = iterator.next(yieldArgs).value;
+      }
+    }
+
+    return undefined;
   }
 
 }
 
-class Calendar extends OccurrenceGenerator {
+class Rule extends RuleBase {
   /**
-   *
-   * Create a new Calendar object with the specified options.
+   * Create a new Rule object with the specified rule config and options.
    *
    * ### Options
    *
-   * - **timezone**: The timezone that yielded occurrences should be *displayed* in.
-   *   Note, this one affects the *displayed* timezone of yielded occurrences.
-   *   For rules, occurrences are first found using the unmodified rule
-   *   config (including whatever timezone the `start` datetime is defined
-   *   in), and then converted to the timezone specified here before being
-   *   yielded. By default, the timezone is *local* time (`null`). So if you don't
-   *   want your rules to be displayed in local time, you must supply a
-   *   timezone argument.
-   * - **data**: arbitrary data you can associate with this Calendar. This
-   *   is the only mutable property of `Calendar` objects.
-   * - **maxDuration**: currently unused.
-   * - **schedules**: either an occurrence generator, or an array of occurrence generators, which should
-   *   be used to build up this Calendar's occurrences. The Calendar will display the union of occurrences
-   *   its schedules produce.
+   * - **timezone**: the timezone that yielded occurrences should be in. Note,
+   *   this does not change the rule config. Occurrences are first found using
+   *   the unmodified rule config, and then converted to the timezone specified
+   *   here before being yielded.
+   * - **data**: arbitrary data you can associate with this rule. This
+   *   is the only mutable property of `Rule` objects.
+   *
+   * ### Rule Config
+   *
+   * - #### frequency
+   *
+   *   The frequency rule part identifies the type of recurrence rule. Valid values
+   *   include `"SECONDLY"`, `"MINUTELY"`, `"HOURLY"`, `"DAILY"`, `"WEEKLY"`,
+   *   `"MONTHLY"`, or `"YEARLY"`.
+   *
+   * - #### start
+   *
+   *   The start of the rule (not necessarily the first occurrence).
+   *   Either a `DateAdapter` instance, date object, or `DateTime` object.
+   *   The type of date object depends on the `DateAdapter` class used for this
+   *   `Rule`.
+   *
+   * - #### end?
+   *
+   *   The end of the rule (not necessarily the last occurrence).
+   *   Either a `DateAdapter` instance, date object, or `DateTime` object.
+   *   The type of date object depends on the `DateAdapter` class used for this
+   *   `Rule`.
+   *
+   * - #### duration?
+   *
+   *   A length of time expressed in milliseconds.
+   *
+   * - #### interval?
+   *
+   *   The interval rule part contains a positive integer representing at
+   *   which intervals the recurrence rule repeats. The default value is
+   *   `1`, meaning every second for a SECONDLY rule, every minute for a
+   *   MINUTELY rule, every hour for an HOURLY rule, every day for a
+   *   DAILY rule, every week for a WEEKLY rule, every month for a
+   *   MONTHLY rule, and every year for a YEARLY rule. For example,
+   *   within a DAILY rule, a value of `8` means every eight days.
+   *
+   * - #### count?
+   *
+   *   The count rule part defines the number of occurrences at which to
+   *   range-bound the recurrence. `count` and `end` are both two different
+   *   ways of specifying how a recurrence completes.
+   *
+   * - #### weekStart?
+   *
+   *   The weekStart rule part specifies the day on which the workweek starts.
+   *   Valid values are `"MO"`, `"TU"`, `"WE"`, `"TH"`, `"FR"`, `"SA"`, and `"SU"`.
+   *   This is significant when a WEEKLY rule has an interval greater than 1,
+   *   and a `byDayOfWeek` rule part is specified. The
+   *   default value is `"MO"`.
+   *
+   * - #### bySecondOfMinute?
+   *
+   *   The bySecondOfMinute rule part expects an array of seconds
+   *   within a minute. Valid values are 0 to 60.
+   *
+   * - #### byMinuteOfHour?
+   *
+   *   The byMinuteOfHour rule part expects an array of minutes within an hour.
+   *   Valid values are 0 to 59.
+   *
+   * - #### byHourOfDay?
+   *
+   *   The byHourOfDay rule part expects an array of hours of the day.
+   *   Valid values are 0 to 23.
+   *
+   * - #### byDayOfWeek?
+   *
+   *   *note: the byDayOfWeek rule part is kinda complex. Blame the ICAL spec.*
+   *
+   *   The byDayOfWeek rule part expects an array. Each array entry can
+   *   be a day of the week (`"SU"`, `"MO"` , `"TU"`, `"WE"`, `"TH"`,
+   *   `"FR"`, `"SA"`). If the rule's `frequency` is either MONTHLY or YEARLY,
+   *   Any entry can also be a tuple where the first value of the tuple is a
+   *   day of the week and the second value is an positive/negative integer
+   *   (e.g. `["SU", 1]`). In this case, the number indicates the nth occurrence of
+   *   the specified day within the MONTHLY or YEARLY rule.
+   *
+   *   The behavior of byDayOfWeek changes depending on the `frequency`
+   *   of the rule.
+   *
+   *   Within a MONTHLY rule, `["MO", 1]` represents the first Monday
+   *   within the month, whereas `["MO", -1]` represents the last Monday
+   *   of the month.
+   *
+   *   Within a YEARLY rule, the numeric value in a byDayOfWeek tuple entry
+   *   corresponds to an offset within the month when the byMonthOfYear rule part is
+   *   present, and corresponds to an offset within the year otherwise.
+   *
+   *   Regardless of rule `frequency`, if a byDayOfWeek entry is a string
+   *   (rather than a tuple), it means "all of these days" within the specified
+   *   frequency (e.g. within a MONTHLY rule, `"MO"` represents all Mondays within
+   *   the month).
+   *
+   * - #### byDayOfMonth?
+   *
+   *   The byDayOfMonth rule part expects an array of days
+   *   of the month. Valid values are 1 to 31 or -31 to -1.
+   *
+   *   For example, -10 represents the tenth to the last day of the month.
+   *   The byDayOfMonth rule part *must not* be specified when the rule's
+   *   `frequency` is set to WEEKLY.
+   *
+   * - #### byMonthOfYear?
+   *
+   *   The byMonthOfYear rule part expects an array of months
+   *   of the year. Valid values are 1 to 12.
    *
    */
-  constructor(args = {}) {
-    super(args);
-    this.schedules = [];
-    this.data = args.data;
+  constructor(config, options = {}) {
+    super(Rule.recurrenceRules, config, options);
+  }
 
-    if (args.schedules) {
-      this.schedules = Array.isArray(args.schedules) ? args.schedules : [args.schedules];
-      this.schedules = this.schedules.map(schedule => schedule.set('timezone', this.timezone));
+  set(prop, value, tzoptions = {}) {
+    let options = Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["cloneRuleOptions"])(this.options);
+    let timezone = this.timezone;
+
+    if (prop === 'timezone') {
+      if (value === this.timezone && !tzoptions.keepLocalTime) return this;else if (tzoptions.keepLocalTime) {
+        const json = this.normalizeDateInput(options.start).toJSON();
+        json.timezone = value;
+        const adapter = this.dateAdapter.fromJSON(json); // prettier-ignore
+
+        options.start = options.start instanceof this.dateAdapter ? adapter : options.start instanceof _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateTime"] ? adapter.toDateTime() : adapter.date;
+      }
+      timezone = value;
+    } else if (prop === 'options') {
+      options = value;
+    } else {
+      options[prop] = value;
     }
 
-    this.isInfinite = this.schedules.some(schedule => schedule.isInfinite);
-    this.hasDuration = this.schedules.every(schedule => schedule.hasDuration);
+    return new Rule(options, {
+      data: this.data,
+      maxDuration: this.maxDuration,
+      timezone
+    });
+  }
+
+}
+
+Rule.recurrenceRules = [];
+
+class ScheduleBase extends OccurrenceGenerator {
+  /**
+   * Create a new Schedule object with the specified options.
+   *
+   * The order of precidence for rrules, rdates, exrules, and exdates is:
+   *
+   * 1. rrules are included
+   * 2. exrules are excluded
+   * 3. rdates are included
+   * 4. exdates are excluded
+   *
+   */
+  constructor(options) {
+    super(options);
+    this.data = options.data;
   }
 
   occurrences(args = {}) {
@@ -2401,39 +2071,11 @@ class Calendar extends OccurrenceGenerator {
     return new CollectionIterator(this, this.normalizeCollectionsArgs(args));
   }
 
-  set(prop, value, options) {
-    if (prop === 'timezone') {
-      return new Calendar({
-        schedules: this.schedules.map(schedule => schedule.set(prop, value, options)),
-        data: this.data,
-        timezone: value,
-        maxDuration: this.maxDuration
-      });
-    } else if (prop === 'schedules') {
-      return new Calendar({
-        schedules: Array.isArray(value) ? value : [value],
-        data: this.data,
-        timezone: this.timezone,
-        maxDuration: this.maxDuration
-      });
-    }
-
-    throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ArgumentError"]('Unknown value for `prop`: ' + `"${prop}"`);
-  }
-
   *_run(args = {}) {
-    if (this.schedules.length === 0) return;
     const count = args.take;
     delete args.take;
-    let iterator;
 
-    if (this.schedules.length === 1) {
-      iterator = this.schedules[0]._run(args);
-    } else {
-      iterator = new AddOperator(this.schedules, {
-        timezone: this.timezone
-      })._run(args);
-    }
+    const iterator = this.occurrenceStream._run(args);
 
     let date = iterator.next().value;
     let index = 0;
@@ -2449,6295 +2091,6067 @@ class Calendar extends OccurrenceGenerator {
   }
 
 }
+/**
+ * An operator function which accepts a spread of occurrence generators
+ * and removes their occurrences from the output.
+ *
+ * @param streams a spread of occurrence generators
+ */
 
-class Dates extends OccurrenceGenerator {
-  constructor(args = {}) {
-    super(args);
-    this.adapters = [];
-    this.isInfinite = false;
-    this.maxDuration = 0;
-    this.datetimes = [];
-    this.data = args.data;
 
-    if (args.dates) {
-      this.adapters = args.dates.map(date => {
-        let adapter = this.normalizeDateInputToAdapter(date);
+function subtract(...streams) {
+  return options => new SubtractOperator(streams, options);
+}
 
-        if (args.duration && !adapter.duration) {
-          adapter = adapter.set('duration', args.duration);
-        }
+class SubtractOperator extends Operator {
+  /** Not actually used but necessary for IRunnable interface */
+  set(_, value) {
+    return new SubtractOperator(this.streams.map(stream => stream.set('timezone', value)), Object.assign(Object.assign({}, this.config), {
+      base: this.config.base && this.config.base.set('timezone', value),
+      timezone: value
+    }));
+  }
 
-        return adapter.set('timezone', this.timezone);
-      });
-      this.datetimes = this.adapters.map(adapter => adapter.toDateTime());
-    }
+  *_run(args = {}) {
+    if (!this.config.base) return;
+    const inclusion = new IterableWrapper(this.config.base, args);
+    const exclusion = new IterableWrapper(new AddOperator(this.streams, {
+      timezone: this.config.timezone
+    }), args);
+    cycleStreams(inclusion, exclusion, args);
 
-    this.hasDuration = this.datetimes.every(date => !!date.duration);
+    while (!inclusion.done) {
+      const yieldArgs = yield this.normalizeRunOutput(inclusion.value);
 
-    if (this.hasDuration) {
-      this.maxDuration = this.adapters.reduce((prev, curr) => curr.duration > prev ? curr.duration : prev, 0);
+      if (!(yieldArgs && yieldArgs.skipToDate)) {
+        inclusion.next();
+      }
+
+      cycleStreams(inclusion, exclusion, args, yieldArgs);
     }
   }
 
-  get length() {
-    return this.adapters.length;
+  calculateIsInfinite() {
+    return !!(this.config.base && this.config.base.isInfinite);
   }
-  /** Returns the first occurrence or, if there are no occurrences, null. */
 
-
-  get firstDate() {
-    return this.adapters[0] || null;
+  calculateHasDuration() {
+    return !!(this.config.base && this.config.base.hasDuration);
   }
-  /** Returns the last occurrence or, if there are no occurrences, null. */
 
+}
 
-  get lastDate() {
-    return this.adapters[this.length - 1] || null;
-  }
+function cycleStreams(inclusion, exclusion, options = {}, yieldArgs = {}) {
+  processYieldArgs([inclusion, exclusion], options, yieldArgs);
+  iterateExclusion(inclusion, exclusion, options);
 
-  occurrences(args = {}) {
-    return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));
+  while (!inclusion.done && !exclusion.done && inclusion.value.isEqual(exclusion.value)) {
+    inclusion.next();
+    iterateExclusion(inclusion, exclusion, options);
   }
+}
 
-  collections(args = {}) {
-    return new CollectionIterator(this, this.normalizeCollectionsArgs(args));
+function iterateExclusion(inclusion, exclusion, options = {}) {
+  if (options.reverse) {
+    while (!exclusion.done && !inclusion.done && exclusion.value.isAfter(inclusion.value)) {
+      exclusion.next();
+    }
+
+    return;
   }
 
-  add(value) {
-    return new Dates({
-      dates: [...this.adapters, value],
-      timezone: this.timezone,
-      data: this.data
-    });
+  while (!exclusion.done && !inclusion.done && exclusion.value.isBefore(inclusion.value)) {
+    exclusion.next();
   }
+}
+/**
+ * An operator function which deduplicates an occurrence stream. Occurrence
+ * `duration` is currently ignored.
+ */
 
-  remove(value) {
-    const dates = this.adapters.slice();
-    const input = this.normalizeDateInputToAdapter(value);
-    const index = dates.findIndex(date => date.valueOf() === input.valueOf());
 
-    if (index >= 0) {
-      dates.splice(index, 1);
-    }
+function unique() {
+  return options => new UniqueOperator([], options);
+}
 
-    return new Dates({
-      dates,
-      timezone: this.timezone,
-      data: this.data
-    });
+class UniqueOperator extends Operator {
+  /** Not actually used but necessary for IRunnable interface */
+  set(_, value) {
+    return new UniqueOperator([], Object.assign(Object.assign({}, this.config), {
+      base: this.config.base && this.config.base.set('timezone', value),
+      timezone: value
+    }));
   }
 
-  set(prop, value, options = {}) {
-    let timezone = this.timezone;
-    let dates = this.adapters.slice();
+  *_run(args = {}) {
+    if (!this.config.base) return;
+    const stream = new IterableWrapper(this.config.base, args);
 
-    if (prop === 'timezone') {
-      if (value === this.timezone) return this;else if (options.keepLocalTime) {
-        dates = this.adapters.map(adapter => {
-          const json = adapter.toJSON();
-          json.timezone = value;
-          return this.dateAdapter.fromJSON(json);
-        });
+    while (!stream.done) {
+      const yieldArgs = yield this.normalizeRunOutput(stream.value);
+      const lastValue = stream.value; // iterate the current stream
+
+      stream.next(yieldArgs);
+
+      while (!(yieldArgs && yieldArgs.skipToDate) && !stream.done && stream.value.isEqual(lastValue)) {
+        stream.next();
       }
-      timezone = value;
-    } else if (prop === 'dates') {
-      dates = value;
-    } else if (prop === 'duration') {
-      dates = dates.map(date => date.set('duration', value || 0));
-    } else {
-      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ArgumentError"](`Unexpected prop argument "${prop}". Accepted values are "timezone" or "dates"`);
     }
+  }
 
-    return new Dates({
-      dates,
-      data: this.data,
-      timezone
-    });
+  calculateIsInfinite() {
+    return !!(this.config.base && this.config.base.isInfinite);
   }
 
-  filter(fn) {
-    return new Dates({
-      dates: this.adapters.filter(fn),
-      data: this.data,
-      timezone: this.timezone
-    });
+  calculateHasDuration() {
+    return !!(this.config.base && this.config.base.hasDuration);
   }
 
-  *_run(args = {}) {
-    let dates = this.datetimes.sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateTimeSortComparer"]);
+}
 
-    if (args.start) {
-      dates = dates.filter(date => date.isAfterOrEqual(args.start));
-    }
+class Schedule extends ScheduleBase {
+  /**
+   * Create a new Schedule object with the specified options.
+   *
+   * The order of precidence for rrules, rdates, exrules, and exdates is:
+   *
+   * 1. rrules are included
+   * 2. exrules are excluded
+   * 3. rdates are included
+   * 4. exdates are excluded
+   *
+   * ### Options
+   *
+   * - **timezone**: The timezone that yielded occurrences should be *displayed* in.
+   *   Note, this one affects the *displayed* timezone of yielded occurrences.
+   *   For rules, occurrences are first found using the unmodified rule
+   *   config (including whatever timezone the `start` datetime is defined
+   *   in), and then converted to the timezone specified here before being
+   *   yielded. By default, the timezone is *local* time (`null`). So if you don't
+   *   want your rules to be displayed in local time, you must supply a
+   *   timezone argument.
+   * - **data**: arbitrary data you can associate with this Schedule. This
+   *   is the only mutable property of `Schedule` objects.
+   * - **maxDuration**: currently unused.
+   * - **rrules**: rules specifying when occurrences happen. See the "Rule Config"
+   *   section below.
+   * - **rdates**: individual dates that should be _included_ in the schedule.
+   * - **exdates**: individual dates that should be _excluded_ from the schedule.
+   * - **exrules**: rules specifying when occurrences shouldn't happen. See the
+   *   "Rule Config" section below.
+   *
+   * ### Rule Config
+   *
+   * - #### frequency
+   *
+   *   The frequency rule part identifies the type of recurrence rule. Valid values
+   *   include `"SECONDLY"`, `"MINUTELY"`, `"HOURLY"`, `"DAILY"`, `"WEEKLY"`,
+   *   `"MONTHLY"`, or `"YEARLY"`.
+   *
+   * - #### start
+   *
+   *   The start of the rule (not necessarily the first occurrence).
+   *   Either a `DateAdapter` instance, date object, or `DateTime` object.
+   *   The type of date object depends on the `DateAdapter` class used for this
+   *   `Rule`.
+   *
+   * - #### end?
+   *
+   *   The end of the rule (not necessarily the last occurrence).
+   *   Either a `DateAdapter` instance, date object, or `DateTime` object.
+   *   The type of date object depends on the `DateAdapter` class used for this
+   *   `Rule`.
+   *
+   * - #### duration?
+   *
+   *   A length of time expressed in milliseconds.
+   *
+   * - #### interval?
+   *
+   *   The interval rule part contains a positive integer representing at
+   *   which intervals the recurrence rule repeats. The default value is
+   *   `1`, meaning every second for a SECONDLY rule, every minute for a
+   *   MINUTELY rule, every hour for an HOURLY rule, every day for a
+   *   DAILY rule, every week for a WEEKLY rule, every month for a
+   *   MONTHLY rule, and every year for a YEARLY rule. For example,
+   *   within a DAILY rule, a value of `8` means every eight days.
+   *
+   * - #### count?
+   *
+   *   The count rule part defines the number of occurrences at which to
+   *   range-bound the recurrence. `count` and `end` are both two different
+   *   ways of specifying how a recurrence completes.
+   *
+   * - #### weekStart?
+   *
+   *   The weekStart rule part specifies the day on which the workweek starts.
+   *   Valid values are `"MO"`, `"TU"`, `"WE"`, `"TH"`, `"FR"`, `"SA"`, and `"SU"`.
+   *   This is significant when a WEEKLY rule has an interval greater than 1,
+   *   and a `byDayOfWeek` rule part is specified. The
+   *   default value is `"MO"`.
+   *
+   * - #### bySecondOfMinute?
+   *
+   *   The bySecondOfMinute rule part expects an array of seconds
+   *   within a minute. Valid values are 0 to 60.
+   *
+   * - #### byMinuteOfHour?
+   *
+   *   The byMinuteOfHour rule part expects an array of minutes within an hour.
+   *   Valid values are 0 to 59.
+   *
+   * - #### byHourOfDay?
+   *
+   *   The byHourOfDay rule part expects an array of hours of the day.
+   *   Valid values are 0 to 23.
+   *
+   * - #### byDayOfWeek?
+   *
+   *   *note: the byDayOfWeek rule part is kinda complex. Blame the ICAL spec.*
+   *
+   *   The byDayOfWeek rule part expects an array. Each array entry can
+   *   be a day of the week (`"SU"`, `"MO"` , `"TU"`, `"WE"`, `"TH"`,
+   *   `"FR"`, `"SA"`). If the rule's `frequency` is either MONTHLY or YEARLY,
+   *   Any entry can also be a tuple where the first value of the tuple is a
+   *   day of the week and the second value is an positive/negative integer
+   *   (e.g. `["SU", 1]`). In this case, the number indicates the nth occurrence of
+   *   the specified day within the MONTHLY or YEARLY rule.
+   *
+   *   The behavior of byDayOfWeek changes depending on the `frequency`
+   *   of the rule.
+   *
+   *   Within a MONTHLY rule, `["MO", 1]` represents the first Monday
+   *   within the month, whereas `["MO", -1]` represents the last Monday
+   *   of the month.
+   *
+   *   Within a YEARLY rule, the numeric value in a byDayOfWeek tuple entry
+   *   corresponds to an offset within the month when the byMonthOfYear rule part is
+   *   present, and corresponds to an offset within the year otherwise.
+   *
+   *   Regardless of rule `frequency`, if a byDayOfWeek entry is a string
+   *   (rather than a tuple), it means "all of these days" within the specified
+   *   frequency (e.g. within a MONTHLY rule, `"MO"` represents all Mondays within
+   *   the month).
+   *
+   * - #### byDayOfMonth?
+   *
+   *   The byDayOfMonth rule part expects an array of days
+   *   of the month. Valid values are 1 to 31 or -31 to -1.
+   *
+   *   For example, -10 represents the tenth to the last day of the month.
+   *   The byDayOfMonth rule part *must not* be specified when the rule's
+   *   `frequency` is set to WEEKLY.
+   *
+   * - #### byMonthOfYear?
+   *
+   *   The byMonthOfYear rule part expects an array of months
+   *   of the year. Valid values are 1 to 12.
+   *
+   */
+  constructor(options = {}) {
+    super(options);
+    this.rrules = [];
+    this.exrules = [];
 
-    if (args.end) {
-      dates = dates.filter(date => date.isBeforeOrEqual(args.end));
-    }
+    for (const prop of ['rrules', 'exrules']) {
+      const arg = options[prop];
 
-    if (args.reverse) {
-      dates = dates.slice().reverse();
+      if (arg) {
+        this[prop] = arg.map(ruleArgs => {
+          if (ruleArgs instanceof Rule) {
+            return ruleArgs.set('timezone', this.timezone);
+          } else {
+            return new Rule(ruleArgs, {
+              timezone: this.timezone
+            });
+          }
+        });
+      }
     }
 
-    if (args.take) {
-      dates = dates.slice(0, args.take);
+    for (const prop of ['rdates', 'exdates']) {
+      const arg = options[prop];
+
+      if (arg) {
+        this[prop] = arg instanceof Dates ? arg.set('timezone', this.timezone) : new Dates({
+          dates: arg,
+          timezone: this.timezone
+        });
+      } else {
+        this[prop] = new Dates({
+          timezone: this.timezone
+        });
+      }
     }
 
-    const dateCache = dates.slice();
-    let date = dateCache.shift();
-    let yieldArgs;
+    this.hasDuration = this.rrules.every(rule => rule.hasDuration) && this.exrules.every(rule => rule.hasDuration) && this.rdates.hasDuration && this.exdates.hasDuration;
+    this.isInfinite = this.rrules.some(rule => rule.isInfinite);
+    this.occurrenceStream = [add(...this.rrules), subtract(...this.exrules), add(this.rdates), subtract(this.exdates), unique()].reduce((prev, curr) => curr({
+      base: prev,
+      timezone: this.timezone
+    }), undefined);
+  }
 
-    while (date) {
-      if (yieldArgs && yieldArgs.skipToDate && (args.reverse ? yieldArgs.skipToDate.isBefore(date) : yieldArgs.skipToDate.isAfter(date))) {
-        date = dateCache.shift();
-        continue;
-      }
+  add(prop, value) {
+    const rrules = this.rrules.slice();
+    const exrules = this.exrules.slice();
+    let rdates = this.rdates;
+    let exdates = this.exdates;
 
-      date = date.add(this, 'generator');
-      yieldArgs = yield this.normalizeRunOutput(date); // Here, we are matching the behavior of the RecurrenceRulesIterator
+    switch (prop) {
+      case 'rrule':
+        rrules.push(value);
+        break;
 
-      if (yieldArgs && yieldArgs.skipToDate && (args.reverse ? yieldArgs.skipToDate.isAfterOrEqual(date) : yieldArgs.skipToDate.isBeforeOrEqual(date))) {
-        throw new Error('A provided `skipToDate` option must be greater than the last yielded date ' + '(or smaller, in the case of reverse iteration)');
-      }
+      case 'exrule':
+        exrules.push(value);
+        break;
 
-      date = dateCache.shift();
+      case 'rdate':
+        rdates = this.rdates.add(value);
+        break;
+
+      case 'exdate':
+        exdates = this.exdates.add(value);
+        break;
     }
 
-    return undefined;
+    return new Schedule({
+      timezone: this.timezone,
+      data: this.data,
+      rrules,
+      exrules,
+      rdates,
+      exdates
+    });
   }
 
-}
-
-class InvalidDateAdapterError extends Error {}
+  remove(prop, value) {
+    let rrules = this.rrules;
+    let exrules = this.exrules;
+    let rdates = this.rdates;
+    let exdates = this.exdates;
 
-let dateAdapterConfig;
+    switch (prop) {
+      case 'rrule':
+        rrules = rrules.filter(rule => rule !== value);
+        break;
 
-class DateAdapterBase {
-  constructor(_date, options) {
-    this.duration = options && options.duration || 0;
-    this.generators = options && options.generators && options.generators.slice() || [];
+      case 'exrule':
+        exrules = exrules.filter(rule => rule !== value);
+        break;
 
-    if (!Number.isInteger(this.duration) || this.duration < 0) {
-      throw new InvalidDateAdapterError('duration must be a non-negative integer');
-    }
-  }
+      case 'rdate':
+        rdates = this.rdates.remove(value);
+        break;
 
-  static set adapter(value) {
-    if (dateAdapterConfig) {
-      throw new Error(`"${dateAdapterConfig.name}" has already been configured.`);
+      case 'exdate':
+        exdates = this.exdates.remove(value);
+        break;
     }
 
-    dateAdapterConfig = value;
+    return new Schedule({
+      timezone: this.timezone,
+      data: this.data,
+      rrules,
+      exrules,
+      rdates,
+      exdates
+    });
   }
 
-  static get adapter() {
-    if (!dateAdapterConfig) {
-      throw new Error('No date adapter has been configured. See rSchedule docs.');
-    }
+  set(prop, value, options = {}) {
+    let timezone = this.timezone;
+    let rrules = this.rrules;
+    let exrules = this.exrules;
+    let rdates = this.rdates;
+    let exdates = this.exdates;
 
-    return dateAdapterConfig;
-  }
+    switch (prop) {
+      case 'timezone':
+        if (value === this.timezone && !options.keepLocalTime) return this;else if (options.keepLocalTime) {
+          rrules = rrules.map(rule => rule.set('timezone', value, options));
+          exrules = exrules.map(rule => rule.set('timezone', value, options));
+          rdates = rdates.set('timezone', value, options);
+          exdates = exdates.set('timezone', value, options);
+        }
+        timezone = value;
+        break;
 
-  static isDate(_object) {
-    throw unimplementedError('isDate()');
-  }
+      case 'rrules':
+        rrules = value;
+        break;
 
-  static fromDate(_date, _options) {
-    throw unimplementedError('fromDate()');
-  }
+      case 'exrules':
+        exrules = value;
+        break;
 
-  static fromJSON(_json) {
-    throw unimplementedError('fromJSON()');
-  }
+      case 'rdates':
+        rdates = value;
+        break;
 
-  static fromDateTime(_datetime) {
-    throw unimplementedError('fromDateTime()');
-  }
+      case 'exdates':
+        exdates = value;
+        break;
+    }
 
-  toDateTime() {
-    const date = DateTime.fromJSON(Object.assign(Object.assign({}, this.toJSON()), {
-      generators: this.generators
-    }));
-    return date;
+    return new Schedule({
+      timezone,
+      data: this.data,
+      rrules,
+      exrules,
+      rdates,
+      exdates
+    });
   }
 
 }
+/**
+ * An operator function, which takes a spread of occurrence generators and only
+ * returns the dates which intersect every occurrence generator.
+ *
+ * Because it's possible for all the generators to never intersect,
+ * and because the intersection operator can't detect this lack of intersection,
+ * you must call `intersection()` with a `{maxFailedIterations: number}` argument.
+ * For convenience, you can globally set `RScheduleConfig.defaultMaxFailedIterations`.
+ * Without further information, I'd probably set `defaultMaxFailedIterations = 50`.
+ *
+ * The `maxFailedIterations` argument caps the number of iterations the operator will
+ * run through without finding a single valid occurrence. If this number is reached, the operator will
+ * stop iterating (preventing a possible infinite loop).
+ *
+ * - Note: `maxFailedIterations` caps the number of iterations which
+ *   *fail to turn up a single valid occurrence*. Every time a valid occurrence is returned,
+ *   the current iteration count is reset to 0.
+ *
+ */
 
-DateAdapterBase.hasTimezoneSupport = false;
 
-function unimplementedError(name) {
-  return new Error(`You must implement the "${name}" method for this DateAdapter class`);
+function intersection(args) {
+  return options => new IntersectionOperator(args, options);
 }
 
-var DateAdapter;
-
-(function (DateAdapter) {
-  DateAdapter.WEEKDAYS = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];
-  DateAdapter.MILLISECONDS_IN_SECOND = 1000;
-  DateAdapter.MILLISECONDS_IN_MINUTE = DateAdapter.MILLISECONDS_IN_SECOND * 60;
-  DateAdapter.MILLISECONDS_IN_HOUR = DateAdapter.MILLISECONDS_IN_MINUTE * 60;
-  DateAdapter.MILLISECONDS_IN_DAY = DateAdapter.MILLISECONDS_IN_HOUR * 24;
-  DateAdapter.MILLISECONDS_IN_WEEK = DateAdapter.MILLISECONDS_IN_DAY * 7;
-})(DateAdapter || (DateAdapter = {}));
-
-class InvalidDateTimeError extends Error {}
+class IntersectionOperator extends Operator {
+  constructor(args, config) {
+    super(args.streams, config);
 
-class DateTime {
-  constructor(date, timezone, duration, generators) {
-    this.date = new Date(date);
-    this.timezone = timezone || null;
-    this.duration = duration || 0;
-    this.generators = generators && generators.slice() || [];
+    if (this.isInfinite) {
+      this.maxFailedIterations = args.maxFailedIterations || IntersectionOperator.defaultMaxFailedIterations;
 
-    if (!Number.isInteger(this.duration) || this.duration < 0) {
-      throw new InvalidDateTimeError('duration must be a non-negative integer');
+      if (!this.maxFailedIterations) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ArgumentError"]('The IntersectionOperator must be provided ' + 'a `maxFailedIterations` argument when it is built from schedules of infinite length. ' + 'This argument is used to ensure that the IntersectionOperator does not enter ' + 'an infinite loop because the underlying schedules never intersect. ' + 'If the `maxFailedIterations` count is reached it will be assumed that ' + 'all valid occurrences have been found and iteration will end without error.' + 'Without additional information, "50" is probably a good ' + '`maxFailedIterations` value. ' + 'If the schedules are not of infinite length, `maxFailedIterations` is ignored. ' + 'Note also that you can provide a `defaultMaxFailedIterations` number via ' + 'IntersectionOperator.defaultMaxFailedIterations.');
+      }
     }
-
-    this.assertIsValid();
-  } // /**
-  //  * Similar to `Array.isArray()`, `isInstance()` provides a surefire method
-  //  * of determining if an object is a `DateTime` by checking against the
-  //  * global symbol registry.
-  //  */
-  // static isInstance(object: any): object is DateTime {
-  //   return !!(object && object[DATETIME_ID]);
-  // }
-
-
-  static fromJSON(json) {
-    const date = new Date(Date.UTC(json.year, json.month - 1, json.day, json.hour, json.minute, json.second, json.millisecond));
-    return new DateTime(date, json.timezone, json.duration, json.generators);
   }
 
-  static fromDateAdapter(adapter) {
-    return DateTime.fromJSON(Object.assign(Object.assign({}, adapter.toJSON()), {
-      generators: adapter.generators
+  set(_, value) {
+    return new IntersectionOperator({
+      maxFailedIterations: this.maxFailedIterations,
+      streams: this.streams.map(stream => stream.set('timezone', value))
+    }, Object.assign(Object.assign({}, this.config), {
+      base: this.config.base && this.config.base.set('timezone', value),
+      timezone: value
     }));
   }
-  /**
-   * Returns `undefined` if `duration` is `0`. Else returns
-   * the `end` date.
-   */
 
+  *_run(args = {}) {
+    const streams = this.streams.map(stream => new IterableWrapper(stream, args));
 
-  get end() {
-    if (!this.duration) return;
-    if (this._end) return this._end;
-    this._end = this.add(this.duration, 'millisecond');
-    return this._end;
-  } // While we constrain the argument to be another DateAdapter in typescript
-  // we handle the case of someone passing in another type of object in javascript
+    if (this.config.base) {
+      streams.push(new IterableWrapper(this.config.base, args));
+    }
 
+    if (streams.length === 0) return;
+    const hasEndDate = !!(!this.isInfinite || args.reverse || args.end);
 
-  isEqual(object) {
-    if (!object) {
-      return false;
+    if (!cycleStreams$1(streams, undefined, Object.assign(Object.assign({}, args), {
+      hasEndDate,
+      iteration: 0,
+      maxIterations: this.maxFailedIterations
+    }))) {
+      return;
     }
 
-    assertSameTimeZone(this, object);
-    return this.valueOf() === object.valueOf();
-  }
+    let stream = selectNextIterable(streams, args);
 
-  isBefore(object) {
-    assertSameTimeZone(this, object);
-    return this.valueOf() < object.valueOf();
-  }
+    while (stream) {
+      const yieldArgs = yield this.normalizeRunOutput(stream.value);
+      const lastValidDate = stream.value;
 
-  isBeforeOrEqual(object) {
-    assertSameTimeZone(this, object);
-    return this.valueOf() <= object.valueOf();
-  }
+      if (!(yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate)) {
+        // iterate the current stream
+        stream.next();
+      }
 
-  isAfter(object) {
-    assertSameTimeZone(this, object);
-    return this.valueOf() > object.valueOf();
-  }
+      if (!cycleStreams$1(streams, lastValidDate, Object.assign(Object.assign({}, args), {
+        hasEndDate,
+        iteration: 0,
+        maxIterations: this.maxFailedIterations
+      }), yieldArgs)) {
+        return;
+      } // The call to `cycleStreams()`, above, has already called
+      // selectNextIterable with the `yieldArgs`
 
-  isAfterOrEqual(object) {
-    assertSameTimeZone(this, object);
-    return this.valueOf() >= object.valueOf();
-  }
 
-  isOccurring(object) {
-    if (!this.duration) {
-      throw new Error('DateTime#isOccurring() is only applicable to DateTimes with durations');
+      stream = selectNextIterable(streams, args);
     }
-
-    assertSameTimeZone(this, object);
-    return object.isAfterOrEqual(this) && object.isBeforeOrEqual(this.add(this.duration, 'millisecond'));
   }
 
-  add(amount, unit) {
-    switch (unit) {
-      case 'generator':
-        {
-          const generators = this.generators.slice();
-          generators.unshift(amount);
-          return new DateTime(this.date, this.timezone, this.duration, generators);
-        }
-
-      case 'year':
-        return this.forkDateTime(addUTCYears(this.date, amount));
-
-      case 'month':
-        return this.forkDateTime(addUTCMonths(this.date, amount));
+  calculateIsInfinite() {
+    // Note: Array#every() === true when length === 0
+    if (!this.config.base) {
+      if (this.streams.length === 0) return false;
+      return this.streams.every(stream => stream.isInfinite);
+    } else if (this.streams.length === 0) return this.config.base.isInfinite;
 
-      case 'week':
-        return this.forkDateTime(addUTCWeeks(this.date, amount));
+    return this.config.base.isInfinite && this.streams.every(stream => stream.isInfinite);
+  }
 
-      case 'day':
-        return this.forkDateTime(addUTCDays(this.date, amount));
+  calculateHasDuration() {
+    const streamsDuration = this.streams.every(stream => stream.hasDuration);
+    if (!this.config.base) return streamsDuration;
+    return this.config.base.hasDuration && streamsDuration;
+  }
 
-      case 'hour':
-        return this.forkDateTime(addUTCHours(this.date, amount));
+}
 
-      case 'minute':
-        return this.forkDateTime(addUTCMinutes(this.date, amount));
+function cycleStreams$1(streams, lastValidDate, options, yieldArgs) {
+  const next = selectNextIterable(streams, options, yieldArgs);
+  if (!next) return false;
+  if (lastValidDate && next.value.isEqual(lastValidDate)) return true;
+  if (streams.some(stream => stream.done)) return false;
+  if (streams.every(stream => stream.value.isEqual(next.value))) return true;
+  options.iteration++;
 
-      case 'second':
-        return this.forkDateTime(addUTCSeconds(this.date, amount));
+  if (options.maxIterations && !options.hasEndDate && options.iteration > options.maxIterations) {
+    return false;
+  } // Since not all of the streams are equal, we grab the last stream...
 
-      case 'millisecond':
-        return this.forkDateTime(addUTCMilliseconds(this.date, amount));
 
-      default:
-        throw new Error('Invalid unit provided to `DateTime#add`');
-    }
-  }
+  const last = selectLastIterable(streams, options); // ...and skip all the other streams so they are equal or past the last one
 
-  subtract(amount, unit) {
-    switch (unit) {
-      case 'year':
-        return this.forkDateTime(subUTCYears(this.date, amount));
+  streams.forEach(stream => {
+    // Because streams can have multiple, identical dates in a row,
+    // we don't want to `skipToDate` if the provided date is equal to the current date.
+    if (last.value.isEqual(stream.value)) return;
+    stream.next({
+      skipToDate: last.value
+    });
+  }); // then we repeat
 
-      case 'month':
-        return this.forkDateTime(subUTCMonths(this.date, amount));
+  return cycleStreams$1(streams, lastValidDate, options);
+}
 
-      case 'week':
-        return this.forkDateTime(subUTCWeeks(this.date, amount));
+class DurationIterableWrapper extends IterableWrapper {
+  constructor(generator, runArgs) {
+    super(generator, runArgs);
+    this.workingValue = this.value;
+    this.next();
+  }
 
-      case 'day':
-        return this.forkDateTime(subUTCDays(this.date, amount));
+}
 
-      case 'hour':
-        return this.forkDateTime(subUTCHours(this.date, amount));
+class MergeDurationOperatorError extends Error {}
+/**
+ * An operator function which takes an occurrence stream with
+ * `hasDuration === true` and merges occurrences which have overlapping
+ * start and end times.
+ *
+ * Because it's possible for all the occurrences in the stream to have
+ * overlapping start and end times, you must provide a `maxDuration`
+ * argument that represents the maximum possible duration for a single
+ * occurrence. If this duration is exceeded, a `MergeDurationOperatorError`
+ * will be thrown.
+ *
+ * - For your convenience, you can globally set a default
+ *   `MergeDurationOperator#maxDuration` via
+ *   `RScheduleConfig.MergeDurationOperator.defaultMaxDuration`.
+ *
+ * Usage example:
+ *
+ * ```typescript
+ * const MILLISECONDS_IN_HOUR = 1000 * 60 * 60;
+ *
+ * const dates = new Dates({
+ *   dates: [
+ *     new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),
+ *     new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 2 }),
+ *     new StandardDateAdapter(new Date(2010, 10, 11, 14), { duration: MILLISECONDS_IN_HOUR * 2 }),
+ *     new StandardDateAdapter(new Date(2010, 10, 12, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),
+ *   ],
+ *   dateAdpter: StandardDateAdapter,
+ * }).pipe(
+ *   mergeDuration({
+ *     maxDuration: MILLISECONDS_IN_HOUR * 24
+ *   })
+ * )
+ *
+ * dates.occurrences().toArray() === [
+ *   new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),
+ *   new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 3 }),
+ *   new StandardDateAdapter(new Date(2010, 10, 12, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),
+ * ]
+ * ```
+ */
 
-      case 'minute':
-        return this.forkDateTime(subUTCMinutes(this.date, amount));
 
-      case 'second':
-        return this.forkDateTime(subUTCSeconds(this.date, amount));
+function mergeDuration(args) {
+  return options => new MergeDurationOperator(args, options);
+}
 
-      case 'millisecond':
-        return this.forkDateTime(subUTCMilliseconds(this.date, amount));
+class MergeDurationOperator extends Operator {
+  constructor(args, config) {
+    super([], config);
+    this.maxDuration = args.maxDuration;
 
-      default:
-        throw new Error('Invalid unit provided to `DateTime#subtract`');
+    if (config.base && !config.base.hasDuration) {
+      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ArgumentError"]('Base stream provided to MergeDurationOperator does not have an associated duration. ' + 'The MergeDurationOperator can only be used with streams which have a duration. ');
     }
   }
+  /** Not actually used but necessary for IRunnable interface */
 
-  get(unit) {
-    switch (unit) {
-      case 'year':
-        return this.date.getUTCFullYear();
-
-      case 'month':
-        return this.date.getUTCMonth() + 1;
-
-      case 'yearday':
-        return getUTCYearDay(this.date);
 
-      case 'weekday':
-        return DateAdapter.WEEKDAYS[this.date.getUTCDay()];
+  set(_, value) {
+    return new MergeDurationOperator({
+      maxDuration: this.maxDuration
+    }, Object.assign(Object.assign({}, this.config), {
+      base: this.config.base && this.config.base.set('timezone', value),
+      timezone: value
+    }));
+  }
 
-      case 'day':
-        return this.date.getUTCDate();
+  _run(args = {}) {
+    return args.reverse ? this.reverseRun(args) : this.forwardRun(args);
+  }
 
-      case 'hour':
-        return this.date.getUTCHours();
+  calculateIsInfinite() {
+    return !!(this.config.base && this.config.base.isInfinite);
+  }
 
-      case 'minute':
-        return this.date.getUTCMinutes();
+  calculateHasDuration() {
+    return true;
+  }
 
-      case 'second':
-        return this.date.getUTCSeconds();
+  *forwardRun(args = {}) {
+    if (!this.config.base) return; // We want to find occurrences that end after the provided
+    // `start` time even if they begin before the provided `start`
+    // time. Because of this, we must begin iterating `maxDuration`
+    // before the provided start time.
 
-      case 'millisecond':
-        return this.date.getUTCMilliseconds();
+    let checkFromStart = args.start;
 
-      default:
-        throw new Error('Invalid unit provided to `DateTime#set`');
+    if (args.start) {
+      checkFromStart = args.start.subtract(this.maxDuration, 'millisecond');
     }
-  }
 
-  set(unit, value) {
-    if (unit === 'duration') {
-      return new DateTime(this.date, this.timezone, value, this.generators);
-    }
+    let checkFromEnd = args.end;
 
-    if (unit === 'generators') {
-      return new DateTime(this.date, this.timezone, this.duration, value);
+    if (args.end) {
+      checkFromEnd = args.end.add(this.maxDuration, 'millisecond');
     }
 
-    let date = new Date(this.date);
-
-    switch (unit) {
-      case 'year':
-        date.setUTCFullYear(value);
-        break;
-
-      case 'month':
-        {
-          // If the current day of the month
-          // is greater than days in the month we are moving to, we need to also
-          // set the day to the end of that month.
-          const length = monthLength(value, date.getUTCFullYear());
-          const day = date.getUTCDate();
-
-          if (day > length) {
-            date.setUTCDate(1);
-            date.setUTCMonth(value);
-            date = subUTCDays(date, 1);
-          } else {
-            date.setUTCMonth(value - 1);
-          }
+    const stream = new DurationIterableWrapper(this.config.base, Object.assign(Object.assign({}, args), {
+      start: checkFromStart,
+      end: checkFromEnd
+    }));
+    let yieldArgs; // checking `stream.workingValue` because when `stream.done === true`
+    // `stream.workingValue` will not have been yielded yet
 
-          break;
+    while (stream.workingValue) {
+      // TODO(@john.carroll.p): figure out how to handle `DateTime#generators` for merged `DateTimes`
+      while (!stream.done && stream.workingValue.end.isAfterOrEqual(stream.value)) {
+        if (stream.workingValue.duration > this.maxDuration) {
+          throw new MergeDurationOperatorError(`MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` + this.maxDuration);
         }
 
-      case 'day':
-        date.setUTCDate(value);
-        break;
-
-      case 'hour':
-        date.setUTCHours(value);
-        break;
-
-      case 'minute':
-        date.setUTCMinutes(value);
-        break;
+        if (stream.value.end.isAfter(stream.workingValue.end)) {
+          const diff = stream.value.end.valueOf() - stream.workingValue.end.valueOf();
+          stream.workingValue = stream.workingValue.set('duration', stream.workingValue.duration + diff);
+        }
 
-      case 'second':
-        date.setUTCSeconds(value);
-        break;
+        stream.next();
+      } // check to make sure the occurrence we are about to yield ends after the
+      // provided start time.
 
-      case 'millisecond':
-        date.setUTCMilliseconds(value);
-        break;
 
-      default:
-        throw new Error('Invalid unit provided to `DateTime#set`');
-    }
+      if (args.start && stream.workingValue.end.isBefore(args.start)) {
+        stream.workingValue = stream.value;
+        stream.next();
+        continue;
+      } // make sure the occurrence we are about to yield ends after the
+      // provided skipToDate
 
-    return this.forkDateTime(date);
-  }
 
-  granularity(granularity, opt = {}) {
-    let date = this.forkDateTime(this.date);
+      if ((yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate) && stream.workingValue.end.isBefore(yieldArgs.skipToDate)) {
+        stream.workingValue = stream.value;
+        stream.next();
+        continue;
+      } // make sure we are not after the user requested `end` time.
 
-    switch (granularity) {
-      case 'year':
-        date = date.set('month', 1);
 
-      case 'month':
-        date = date.set('day', 1);
+      if (args.end && stream.workingValue && stream.workingValue.isAfter(args.end)) {
         break;
+      }
 
-      case 'week':
-        date = setDateToStartOfWeek(date, opt.weekStart);
-    }
-
-    switch (granularity) {
-      case 'year':
-      case 'month':
-      case 'week':
-      case 'day':
-        date = date.set('hour', 0);
-
-      case 'hour':
-        date = date.set('minute', 0);
-
-      case 'minute':
-        date = date.set('second', 0);
+      if (stream.workingValue.duration > this.maxDuration) {
+        throw new MergeDurationOperatorError(`MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` + this.maxDuration);
+      }
 
-      case 'second':
-        date = date.set('millisecond', 0);
+      yieldArgs = yield this.normalizeRunOutput(stream.workingValue);
 
-      case 'millisecond':
-        return date;
+      if ((yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate) && stream.workingValue.isAfterOrEqual(yieldArgs.skipToDate)) {
+        throw new Error('A provided `skipToDate` option must be greater than the last yielded date ' + '(or smaller, in the case of reverse iteration)');
+      }
 
-      default:
-        throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);
+      stream.workingValue = stream.value;
+      stream.next();
     }
   }
 
-  endGranularity(granularity, opt = {}) {
-    let date = this.forkDateTime(this.date);
-
-    switch (granularity) {
-      case 'year':
-        date = date.set('month', 12);
+  *reverseRun(args = {}) {
+    if (!this.config.base) return; // We want to find occurrences that end after the provided
+    // `start` time even if they begin before the provided `start`
+    // time. Because of this, we must begin iterating `maxDuration`
+    // before the provided start time.
 
-      case 'month':
-        date = date.set('day', monthLength(date.get('month'), date.get('year')));
-        break;
+    let checkFromStart = args.start;
 
-      case 'week':
-        date = setDateToEndOfWeek(date, opt.weekStart);
+    if (args.start) {
+      checkFromStart = args.start.subtract(this.maxDuration, 'millisecond');
     }
 
-    switch (granularity) {
-      case 'year':
-      case 'month':
-      case 'week':
-      case 'day':
-        date = date.set('hour', 23);
-
-      case 'hour':
-        date = date.set('minute', 59);
-
-      case 'minute':
-        date = date.set('second', 59);
+    let checkFromEnd = args.end;
 
-      case 'second':
-        date = date.set('millisecond', 999);
+    if (args.end) {
+      checkFromEnd = args.end.add(this.maxDuration, 'millisecond');
+    }
 
-      case 'millisecond':
-        return date;
+    const stream = new DurationIterableWrapper(this.config.base, Object.assign(Object.assign({}, args), {
+      start: checkFromStart,
+      end: checkFromEnd
+    }));
+    let yieldArgs; // checking `stream.workingValue` because when `stream.done === true`
+    // `stream.workingValue` will not have been yielded yet
 
-      default:
-        throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);
-    }
-  }
+    while (stream.workingValue) {
+      // TODO(@john.carroll.p): figure out how to handle `DateTime#generators` for merged `DateTimes`
+      while (!stream.done && stream.workingValue.isBeforeOrEqual(stream.value.end)) {
+        if (stream.workingValue.duration > this.maxDuration) {
+          throw new MergeDurationOperatorError(`MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` + this.maxDuration);
+        }
 
-  toISOString() {
-    return this.date.toISOString();
-  }
+        if (stream.value.isBefore(stream.workingValue) || stream.value.end.isAfter(stream.workingValue.end)) {
+          if (stream.value.end.isAfter(stream.workingValue.end)) {
+            // `stream.workingValue` is a subset of `stream.value`
+            // so simply replace `stream.workingValue` with `stream.value`
+            stream.workingValue = stream.value;
+          } else {
+            const diff = stream.workingValue.valueOf() - stream.value.valueOf();
+            stream.workingValue = stream.value.set('duration', stream.workingValue.duration + diff);
+          }
+        }
 
-  toDateTime() {
-    return this;
-  }
+        stream.next();
+      } // check to make sure the occurrence we are about to yield starts before the
+      // provided start time.
 
-  toJSON() {
-    const json = {
-      timezone: this.timezone,
-      year: this.get('year'),
-      month: this.get('month'),
-      day: this.get('day'),
-      hour: this.get('hour'),
-      minute: this.get('minute'),
-      second: this.get('second'),
-      millisecond: this.get('millisecond')
-    };
 
-    if (this.duration) {
-      json.duration = this.duration;
-    }
+      if (args.start && stream.workingValue.end.isBefore(args.start)) {
+        break;
+      }
 
-    return json;
-  }
+      if (yieldArgs && yieldArgs.skipToDate && stream.workingValue.end.isBefore(yieldArgs.skipToDate)) {
+        stream.workingValue = stream.value;
+        stream.next();
+        continue;
+      } // make sure we are not after the user requested `end` time.
 
-  valueOf() {
-    return this.date.valueOf();
-  }
 
-  assertIsValid() {
-    if (isNaN(this.valueOf())) {
-      throw new InvalidDateTimeError('DateTime has invalid date.');
-    }
+      if (args.end && stream.workingValue && stream.workingValue.isAfter(args.end)) {
+        stream.workingValue = stream.value;
+        stream.next();
+        continue;
+      }
 
-    return true;
-  }
+      if (stream.workingValue.duration > this.maxDuration) {
+        throw new MergeDurationOperatorError(`MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` + this.maxDuration);
+      }
 
-  forkDateTime(date) {
-    return new DateTime(date, this.timezone, this.duration, this.generators);
-  }
+      yieldArgs = yield this.normalizeRunOutput(stream.workingValue);
 
-}
+      if (yieldArgs && yieldArgs.skipToDate && stream.workingValue.end.isBeforeOrEqual(yieldArgs.skipToDate)) {
+        throw new Error('A provided `skipToDate` option must be greater than the last yielded date ' + '(or smaller, in the case of reverse iteration)');
+      }
 
-function assertSameTimeZone(x, y) {
-  if (x.timezone !== y.timezone) {
-    throw new InvalidDateTimeError('Attempted to compare a datetime to another date in a different timezone: ' + JSON.stringify(x) + ' and ' + JSON.stringify(y));
+      stream.workingValue = stream.value;
+      stream.next();
+    }
   }
 
-  return true;
-}
-
-function setDateToStartOfWeek(date, wkst) {
-  const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));
-  return date.subtract(index, 'day');
 }
 
-function setDateToEndOfWeek(date, wkst) {
-  const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));
-  return date.add(6 - index, 'day');
-}
+class SplitDurationOperatorError extends Error {}
+/**
+ * An operator function which takes an occurrence stream with
+ * `hasDuration === true` and passes occurrences through a splitting
+ * function. One usecase for this operator is to dynamically break up
+ * occurrences with a large duration into several smaller occurrences.
+ *
+ * You must provide a `maxDuration` argument that represents the
+ * maximum possible duration for a single occurrence. If this
+ * duration is exceeded, a `SplitDurationOperatorError` will be
+ * thrown.
+ *
+ * - For your convenience, you can globally set a default
+ *   `SplitDurationOperator#maxDuration` via
+ *   `RScheduleConfig.SplitDurationOperator.defaultMaxDuration`.
+ *
+ * Usage example:
+ *
+ * ```typescript
+ * const MILLISECONDS_IN_HOUR = 1000 * 60 * 60;
+ *
+ * const splitFn = (date: DateTime) => {
+ *   if (date.duration > MILLISECONDS_IN_HOUR) {
+ *     const diff = date.duration! / 2;
+ *
+ *     return [
+ *       date.set('duration', diff),
+ *       date.add(diff, 'millisecond').set('duration', diff),
+ *     ];
+ *   }
+ *
+ *   return [date];
+ * };
+ *
+ * const dates = new Dates({
+ *   dates: [
+ *     new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),
+ *     new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 2 }),
+ *   ],
+ *   dateAdpter: StandardDateAdapter,
+ * }).pipe(
+ *   splitDuration({
+ *     splitFn,
+ *     maxDuration: MILLISECONDS_IN_HOUR * 1
+ *   })
+ * )
+ *
+ * expect(dates.occurrences().toArray()).toEqual([
+ *   new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),
+ *   new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),
+ *   new StandardDateAdapter(new Date(2010, 10, 11, 14), { duration: MILLISECONDS_IN_HOUR * 1 }),
+ * ])
+ * ```
+ */
 
-function orderedWeekdays(wkst = 'SU') {
-  const wkdays = DateAdapter.WEEKDAYS.slice();
-  let index = wkdays.indexOf(wkst);
 
-  while (index !== 0) {
-    shiftArray(wkdays);
-    index--;
+function splitDuration(args) {
+  return options => new SplitDurationOperator(args, options);
+}
+
+class SplitDurationOperator extends Operator {
+  constructor(args, config) {
+    super([], config);
+    this.splitFn = args.splitFn;
+    this.maxDuration = args.maxDuration;
+
+    if (config.base && !config.base.hasDuration) {
+      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ArgumentError"]('Base stream provided to SplitDurationOperator does not have an associated duration. ' + 'The SplitDurationOperator can only be used with streams which have a duration.');
+    }
   }
+  /** Not actually used but necessary for IRunnable interface */
 
-  return wkdays;
-}
 
-function shiftArray(array, from = 'first') {
-  if (array.length === 0) {
-    return array;
-  } else if (from === 'first') {
-    array.push(array.shift());
-  } else {
-    array.unshift(array.pop());
+  set(_, value) {
+    return new SplitDurationOperator({
+      maxDuration: this.maxDuration,
+      splitFn: this.splitFn
+    }, Object.assign(Object.assign({}, this.config), {
+      base: this.config.base && this.config.base.set('timezone', value),
+      timezone: value
+    }));
   }
 
-  return array;
-}
-/**
- * Returns the days in the given month.
- *
- * @param month base-1
- * @param year
- */
+  *_run(args = {}) {
+    if (!this.config.base) return;
+    const reverse = args.reverse || false; // We want to find occurrences that end after the provided
+    // `start` time even if they begin before the provided `start`
+    // time. Because of this, we add `maxDuration` to
+    // the provided start time.
 
+    let checkFromStart = args.start;
 
-function monthLength(month, year) {
-  const block = {
-    1: 31,
-    2: getDaysInFebruary(year),
-    3: 31,
-    4: 30,
-    5: 31,
-    6: 30,
-    7: 31,
-    8: 31,
-    9: 30,
-    10: 31,
-    11: 30,
-    12: 31
-  };
-  return block[month];
-}
+    if (args.start) {
+      checkFromStart = args.start.subtract(this.maxDuration, 'millisecond');
+    } // same goes for `end` time as with `start` time.
 
-function getDaysInFebruary(year) {
-  return isLeapYear(year) ? 29 : 28;
-} // taken from date-fn
 
+    let checkFromEnd = args.end;
 
-function isLeapYear(year) {
-  return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;
-}
+    if (args.end) {
+      checkFromEnd = args.end.add(this.maxDuration, 'millisecond');
+    }
 
-function getUTCYearDay(now) {
-  const start = new Date(Date.UTC(now.getUTCFullYear(), 0, 1));
-  const diff = now.valueOf() - start.valueOf();
-  return 1 + Math.floor(diff / DateAdapter.MILLISECONDS_IN_DAY);
-}
-/**
- * These functions are basically lifted from `date-fns`, but changed
- * to use the UTC date methods, which `date-fns` doesn't support.
- */
+    const stream = new IterableWrapper(this.config.base, Object.assign(Object.assign({}, args), {
+      start: checkFromStart,
+      end: checkFromEnd
+    }));
+    let yieldArgs;
+    const datesBucket = [];
 
+    while (!stream.done || datesBucket[0] && datesBucket[0][0]) {
+      /**
+       * Example:
+       * 10am - 2pm -> 10am - 12pm, 12pm - 2pm
+       * 11am - 3pm -> 11am - 1pm, 1pm - 3pm
+       * 2pm - 4pm -> 2pm - 3pm, 3pm - 4pm
+       */
+      if (!(datesBucket[0] && datesBucket[0][0])) {
+        // we're out of dates
+        datesBucket.push(this.splitDate(stream.value, reverse));
+        stream.next();
+      }
 
-function toInteger(input) {
-  if (input === null || input === true || input === false) {
-    return NaN;
-  }
+      while (!stream.done && (reverse ? datesBucket[0].some(date => date.isBeforeOrEqual(stream.value.end)) : datesBucket[0].some(date => date.isAfterOrEqual(stream.value)))) {
+        datesBucket.push(this.splitDate(stream.value, reverse));
+        stream.next();
+      }
 
-  const int = Number(input);
+      let selectedDate = datesBucket[0] && datesBucket[0][0];
+      let bucketIndex = -1;
+      let selectedBucketIndex = 0;
+      let dateIndex = -1;
+      let selectedDateIndex = 0; // find the next date as well as its location in the datesBucket
 
-  if (isNaN(int)) {
-    return int;
-  }
+      for (const bucket of datesBucket) {
+        bucketIndex++;
+        dateIndex = -1;
 
-  return int < 0 ? Math.ceil(int) : Math.floor(int);
-}
+        for (const date of bucket) {
+          dateIndex++;
+          let dateShouldComeNext;
 
-function addMilliseconds(dirtyDate, dirtyAmount) {
-  if (arguments.length < 2) {
-    throw new TypeError('2 arguments required, but only ' + arguments.length + ' present');
+          if (reverse) {
+            dateShouldComeNext = date.isAfter(selectedDate) || date.isEqual(selectedDate) && date.duration > selectedDate.duration;
+          } else {
+            dateShouldComeNext = date.isBefore(selectedDate) || date.isEqual(selectedDate) && date.duration < selectedDate.duration;
+          }
+
+          if (dateShouldComeNext) {
+            selectedDate = date;
+            selectedBucketIndex = bucketIndex;
+            selectedDateIndex = dateIndex;
+            break;
+          }
+        }
+      }
+
+      datesBucket[selectedBucketIndex].splice(selectedDateIndex, 1);
+
+      if (datesBucket[selectedBucketIndex].length === 0) {
+        datesBucket.splice(selectedBucketIndex, 1);
+      } // If we've been yieldedArgs from the last cycle, check to see
+      // that the selectedDate honors the `skipToDate` requirement
+      // if not, discard this selectedDate
+
+
+      if (yieldArgs && yieldArgs.skipToDate && selectedDate && !datePastEnd(selectedDate, args) && !datePastSkipToDate(selectedDate, yieldArgs.skipToDate, args)) {
+        continue;
+      } // because we subtracted `maxDuration` to the base iterator's start time,
+      // check to make sure the selectedDate we are about to yield should
+      // actually be yielded (it may be before the provided `start` time).
+      // If not, discard the selectedDate.
+
+
+      if (args.start && selectedDate.end.isBefore(args.start)) {
+        if (reverse) break;
+        continue;
+      } // because we added `maxDuration` to the base iterator's end time,
+      // check to make sure the selectedDate we are about to yield should
+      // actually be yielded (it may be after the provided `end` time).
+      // If not, end iteration.
+
+
+      if (args.end && selectedDate.isAfter(args.end)) {
+        if (reverse) continue;
+        break;
+      }
+
+      if (selectedDate.duration > this.maxDuration) {
+        throw new SplitDurationOperatorError(`SplitDurationOperatorError: Occurrence duration exceeded maxDuration of ` + this.maxDuration);
+      }
+
+      yieldArgs = yield this.normalizeRunOutput(selectedDate);
+
+      if (yieldArgs && yieldArgs.skipToDate && (args.reverse ? selectedDate.isBeforeOrEqual(yieldArgs.skipToDate) : selectedDate.isAfterOrEqual(yieldArgs.skipToDate))) {
+        throw new Error('A provided `skipToDate` option must be greater than the last yielded date ' + '(or smaller, in the case of reverse iteration)');
+      }
+    }
   }
 
-  const timestamp = dirtyDate.valueOf();
-  const amount = toInteger(dirtyAmount);
-  return new Date(timestamp + amount);
-}
+  calculateIsInfinite() {
+    return !!(this.config.base && this.config.base.isInfinite);
+  }
 
-function addUTCYears(date, input) {
-  const amount = toInteger(input);
-  return addUTCMonths(date, amount * 12);
-}
+  calculateHasDuration() {
+    return true;
+  }
 
-function addUTCMonths(date, input) {
-  const amount = toInteger(input);
-  date = new Date(date);
-  const desiredMonth = date.getUTCMonth() + amount;
-  const dateWithDesiredMonth = new Date(0);
-  dateWithDesiredMonth.setUTCFullYear(date.getUTCFullYear(), desiredMonth, 1);
-  dateWithDesiredMonth.setUTCHours(0, 0, 0, 0);
-  const daysInMonth = monthLength(dateWithDesiredMonth.getUTCMonth() + 1, dateWithDesiredMonth.getUTCFullYear()); // Set the last day of the new month
-  // if the original date was the last day of the longer month
+  splitDate(date, reverse) {
+    const dates = this.splitFn(date);
+    let valid;
 
-  date.setUTCMonth(desiredMonth, Math.min(daysInMonth, date.getUTCDate()));
-  return date;
-}
+    if (dates.length === 0) {
+      valid = false;
+    } else if (dates.length === 1) {
+      valid = date.duration === dates[0].duration;
+    } else {
+      valid = date.duration === dates.reduce((prev, curr) => prev + curr.duration, 0);
+    }
 
-function addUTCWeeks(date, input) {
-  const amount = toInteger(input);
-  const days = amount * 7;
-  return addUTCDays(date, days);
-}
+    if (!valid) {
+      throw new Error('The provided SplitDurationOperator split function ' + 'must return an array of DateTimes with length > 0 ' + 'where the total duration of the new dates equals the duration of ' + 'the original date.');
+    }
 
-function addUTCDays(date, input) {
-  // by adding milliseconds rather than days, we supress the native Date object's automatic
-  // daylight savings time conversions which we don't want in UTC mode
-  return addUTCMilliseconds(date, toInteger(input) * DateAdapter.MILLISECONDS_IN_DAY);
-}
+    dates.sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateTimeSortComparer"]);
 
-function addUTCHours(date, input) {
-  const amount = toInteger(input);
-  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_HOUR);
-}
+    if (reverse) {
+      dates.reverse();
+    }
 
-function addUTCMinutes(date, input) {
-  const amount = toInteger(input);
-  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_MINUTE);
-}
+    return dates;
+  }
 
-function addUTCSeconds(date, input) {
-  const amount = toInteger(input);
-  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_SECOND);
 }
 
-function addUTCMilliseconds(date, input) {
-  const amount = toInteger(input);
-  const timestamp = date.getTime();
-  return new Date(timestamp + amount);
+function datePastEnd(date, options) {
+  return !!(options.reverse ? options.start && date.isBefore(options.start) : options.end && date.isAfter(options.end));
 }
 
-function subUTCYears(date, amount) {
-  return addUTCYears(date, -amount);
+function datePastSkipToDate(date, skipToDate, options) {
+  return !!(options.reverse ? skipToDate.isAfterOrEqual(date) : skipToDate.isBeforeOrEqual(date));
 }
 
-function subUTCMonths(date, amount) {
-  return addUTCMonths(date, -amount);
-}
 
-function subUTCWeeks(date, amount) {
-  return addUTCWeeks(date, -amount);
-}
 
-function subUTCDays(date, amount) {
-  return addUTCDays(date, -amount);
-}
+/***/ }),
 
-function subUTCHours(date, amount) {
-  return addUTCHours(date, -amount);
-}
+/***/ "./node_modules/@rschedule/core/es2015/main.js":
+/*!*****************************************************!*\
+  !*** ./node_modules/@rschedule/core/es2015/main.js ***!
+  \*****************************************************/
+/*! exports provided: ArgumentError, DateAdapter, DateAdapterBase, DateTime, InfiniteLoopError, InvalidDateAdapterError, InvalidDateTime, InvalidDateTimeError, RecurrenceRuleError, RecurrenceRulesIterator, RuleOptionError, ValidDateTime, cloneJSON, cloneRuleOptions, dateInputToDateAdapter, dateInputToDateTime, dateTimeSortComparer, freqToGranularity, getDaysInYear, getDifferenceBetweenWeekdays, isLeapYear, normalizeDateTimeTimezone, normalizeRuleOptions, numberSortComparer, orderedWeekdays, recurrenceRulesReducer, uniqDateTimes */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
-function subUTCMinutes(date, amount) {
-  return addUTCMinutes(date, -amount);
-}
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ArgumentError", function() { return ArgumentError; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DateAdapter", function() { return DateAdapter; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DateAdapterBase", function() { return DateAdapterBase; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DateTime", function() { return DateTime; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InfiniteLoopError", function() { return InfiniteLoopError; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InvalidDateAdapterError", function() { return InvalidDateAdapterError; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InvalidDateTime", function() { return InvalidDateTime; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InvalidDateTimeError", function() { return InvalidDateTimeError; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RecurrenceRuleError", function() { return RecurrenceRuleError; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RecurrenceRulesIterator", function() { return RecurrenceRulesIterator; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RuleOptionError", function() { return RuleOptionError; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ValidDateTime", function() { return ValidDateTime; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cloneJSON", function() { return cloneJSON; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cloneRuleOptions", function() { return cloneRuleOptions; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dateInputToDateAdapter", function() { return dateInputToDateAdapter; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dateInputToDateTime", function() { return dateInputToDateTime; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dateTimeSortComparer", function() { return dateTimeSortComparer; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "freqToGranularity", function() { return freqToGranularity; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDaysInYear", function() { return getDaysInYear; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDifferenceBetweenWeekdays", function() { return getDifferenceBetweenWeekdays; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isLeapYear", function() { return isLeapYear; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "normalizeDateTimeTimezone", function() { return normalizeDateTimeTimezone; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "normalizeRuleOptions", function() { return normalizeRuleOptions; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "numberSortComparer", function() { return numberSortComparer; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "orderedWeekdays", function() { return orderedWeekdays; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "recurrenceRulesReducer", function() { return recurrenceRulesReducer; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uniqDateTimes", function() { return uniqDateTimes; });
+class InvalidDateAdapterError extends Error {}
 
-function subUTCSeconds(date, amount) {
-  return addUTCSeconds(date, -amount);
-}
+let dateAdapterConfig;
 
-function subUTCMilliseconds(date, amount) {
-  return addUTCMilliseconds(date, -amount);
-} // export function normalizeDateInput<T extends DateAdapter>(
-//   dateAdapter: DateAdapterConstructor<T>,
-//   input: DateInput<T>,
-//   timezone: string | null,
-// ): DateTime {
-//   if (input instanceof DateTime) {
-//     if (input.timezone !== timezone) {
-//       return dateAdapter
-//         .fromDateTime(input)
-//         .set('timezone', timezone)
-//         .toDateTime();
-//     }
-//     return input;
-//   }
-//   return input instanceof DateAdapter
-//     ? input.set('timezone', timezone).toDateTime()
-//     : new dateAdapter(input).toDateTime();
-// }
+class DateAdapterBase {
+  constructor(_date, options) {
+    this.duration = options && options.duration || 0;
+    this.generators = options && options.generators && options.generators.slice() || [];
 
+    if (!Number.isInteger(this.duration) || this.duration < 0) {
+      throw new InvalidDateAdapterError('duration must be a non-negative integer');
+    }
+  }
 
-function normalizeDateTimeTimezone(date, timezone) {
-  if (date.timezone !== timezone) {
-    return DateAdapterBase.adapter.fromDateTime(date).set('timezone', timezone).toDateTime();
+  static set adapter(value) {
+    if (dateAdapterConfig) {
+      throw new Error(`"${dateAdapterConfig.name}" has already been configured.`);
+    }
+
+    dateAdapterConfig = value;
   }
 
-  return date;
-}
+  static get adapter() {
+    if (!dateAdapterConfig) {
+      throw new Error('No date adapter has been configured. See rSchedule docs.');
+    }
 
-class RuleBase extends OccurrenceGenerator {
-  constructor(recurrenceRules, config, options = {}) {
-    super(options);
-    this.recurrenceRules = recurrenceRules;
-    this.options = Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["cloneRuleOptions"])(config);
-    this.normOptions = Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["normalizeRuleOptions"])(this.recurrenceRules, this.options);
-    this.timezone = options.timezone !== undefined ? options.timezone : this.normOptions.start.timezone;
-    this.data = options.data;
-    this.hasDuration = !!config.duration;
-    if (this.hasDuration) this.duration = config.duration;
-    this.isInfinite = this.normOptions.end === undefined && this.normOptions.count === undefined;
+    return dateAdapterConfig;
   }
 
-  occurrences(args = {}) {
-    return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));
+  static isDate(_object) {
+    throw unimplementedError('isDate()');
   }
 
-  collections(args = {}) {
-    return new CollectionIterator(this, this.normalizeCollectionsArgs(args));
+  static fromDate(_date, _options) {
+    throw unimplementedError('fromDate()');
   }
 
-  *_run(rawArgs = {}) {
-    const args = this.normalizeRunArgs(rawArgs);
-    const iterator = new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RecurrenceRulesIterator"](Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["recurrenceRulesReducer"])(this.recurrenceRules), this.normOptions, args);
-    let date = iterator.next().value;
-    let index = 0;
+  static fromJSON(_json) {
+    throw unimplementedError('fromJSON()');
+  }
 
-    while (date && (args.take === undefined || index < args.take)) {
-      index++;
-      date = date.add(this, 'generator');
-      const yieldArgs = yield this.normalizeRunOutput(date);
+  static fromDateTime(_datetime) {
+    throw unimplementedError('fromDateTime()');
+  }
+  /**
+   * Returns a string in simplified extended ISO format (ISO 8601).
+   *
+   * _Note: this method is intended for testing and its
+   * implementation isn't particularly performant._
+   */
 
-      if (yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate) {
-        // The RecurrenceRuleIterator might have a different timezone from the rule.
-        // Because of this, the yieldArgs will not properly be normalized by the
-        // OccurrenceIterator, so we need to do it here
-        date = iterator.next(Object.assign(Object.assign({}, yieldArgs), {
-          skipToDate: normalizeDateTimeTimezone(yieldArgs.skipToDate, iterator.start.timezone)
-        })).value;
-      } else {
-        // theoretically, the yieldArgs are undefined here
-        // maybe in the future there will be other yieldArg options though
-        date = iterator.next(yieldArgs).value;
-      }
-    }
 
-    return undefined;
+  toISOString() {
+    return this.set('timezone', 'UTC').toDateTime().toISOString();
+  }
+
+  toDateTime() {
+    const date = DateTime.fromJSON(Object.assign(Object.assign({}, this.toJSON()), {
+      generators: this.generators
+    }));
+    return date;
   }
 
 }
 
-class Rule extends RuleBase {
-  /**
-   * Create a new Rule object with the specified rule config and options.
-   *
-   * ### Options
-   *
-   * - **timezone**: the timezone that yielded occurrences should be in. Note,
-   *   this does not change the rule config. Occurrences are first found using
-   *   the unmodified rule config, and then converted to the timezone specified
-   *   here before being yielded.
-   * - **data**: arbitrary data you can associate with this rule. This
-   *   is the only mutable property of `Rule` objects.
-   *
-   * ### Rule Config
-   *
-   * - #### frequency
-   *
-   *   The frequency rule part identifies the type of recurrence rule. Valid values
-   *   include `"SECONDLY"`, `"MINUTELY"`, `"HOURLY"`, `"DAILY"`, `"WEEKLY"`,
-   *   `"MONTHLY"`, or `"YEARLY"`.
-   *
-   * - #### start
-   *
-   *   The start of the rule (not necessarily the first occurrence).
-   *   Either a `DateAdapter` instance, date object, or `DateTime` object.
-   *   The type of date object depends on the `DateAdapter` class used for this
-   *   `Rule`.
-   *
-   * - #### end?
-   *
-   *   The end of the rule (not necessarily the last occurrence).
-   *   Either a `DateAdapter` instance, date object, or `DateTime` object.
-   *   The type of date object depends on the `DateAdapter` class used for this
-   *   `Rule`.
-   *
-   * - #### duration?
-   *
-   *   A length of time expressed in milliseconds.
-   *
-   * - #### interval?
-   *
-   *   The interval rule part contains a positive integer representing at
-   *   which intervals the recurrence rule repeats. The default value is
-   *   `1`, meaning every second for a SECONDLY rule, every minute for a
-   *   MINUTELY rule, every hour for an HOURLY rule, every day for a
-   *   DAILY rule, every week for a WEEKLY rule, every month for a
-   *   MONTHLY rule, and every year for a YEARLY rule. For example,
-   *   within a DAILY rule, a value of `8` means every eight days.
-   *
-   * - #### count?
-   *
-   *   The count rule part defines the number of occurrences at which to
-   *   range-bound the recurrence. `count` and `end` are both two different
-   *   ways of specifying how a recurrence completes.
-   *
-   * - #### weekStart?
-   *
-   *   The weekStart rule part specifies the day on which the workweek starts.
-   *   Valid values are `"MO"`, `"TU"`, `"WE"`, `"TH"`, `"FR"`, `"SA"`, and `"SU"`.
-   *   This is significant when a WEEKLY rule has an interval greater than 1,
-   *   and a `byDayOfWeek` rule part is specified. The
-   *   default value is `"MO"`.
-   *
-   * - #### bySecondOfMinute?
-   *
-   *   The bySecondOfMinute rule part expects an array of seconds
-   *   within a minute. Valid values are 0 to 60.
-   *
-   * - #### byMinuteOfHour?
-   *
-   *   The byMinuteOfHour rule part expects an array of minutes within an hour.
-   *   Valid values are 0 to 59.
-   *
-   * - #### byHourOfDay?
-   *
-   *   The byHourOfDay rule part expects an array of hours of the day.
-   *   Valid values are 0 to 23.
-   *
-   * - #### byDayOfWeek?
-   *
-   *   *note: the byDayOfWeek rule part is kinda complex. Blame the ICAL spec.*
-   *
-   *   The byDayOfWeek rule part expects an array. Each array entry can
-   *   be a day of the week (`"SU"`, `"MO"` , `"TU"`, `"WE"`, `"TH"`,
-   *   `"FR"`, `"SA"`). If the rule's `frequency` is either MONTHLY or YEARLY,
-   *   Any entry can also be a tuple where the first value of the tuple is a
-   *   day of the week and the second value is an positive/negative integer
-   *   (e.g. `["SU", 1]`). In this case, the number indicates the nth occurrence of
-   *   the specified day within the MONTHLY or YEARLY rule.
-   *
-   *   The behavior of byDayOfWeek changes depending on the `frequency`
-   *   of the rule.
-   *
-   *   Within a MONTHLY rule, `["MO", 1]` represents the first Monday
-   *   within the month, whereas `["MO", -1]` represents the last Monday
-   *   of the month.
-   *
-   *   Within a YEARLY rule, the numeric value in a byDayOfWeek tuple entry
-   *   corresponds to an offset within the month when the byMonthOfYear rule part is
-   *   present, and corresponds to an offset within the year otherwise.
-   *
-   *   Regardless of rule `frequency`, if a byDayOfWeek entry is a string
-   *   (rather than a tuple), it means "all of these days" within the specified
-   *   frequency (e.g. within a MONTHLY rule, `"MO"` represents all Mondays within
-   *   the month).
-   *
-   * - #### byDayOfMonth?
-   *
-   *   The byDayOfMonth rule part expects an array of days
-   *   of the month. Valid values are 1 to 31 or -31 to -1.
-   *
-   *   For example, -10 represents the tenth to the last day of the month.
-   *   The byDayOfMonth rule part *must not* be specified when the rule's
-   *   `frequency` is set to WEEKLY.
-   *
-   * - #### byMonthOfYear?
-   *
-   *   The byMonthOfYear rule part expects an array of months
-   *   of the year. Valid values are 1 to 12.
-   *
-   */
-  constructor(config, options = {}) {
-    super(Rule.recurrenceRules, config, options);
-  }
+DateAdapterBase.hasTimezoneSupport = false;
 
-  set(prop, value, tzoptions = {}) {
-    let options = Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["cloneRuleOptions"])(this.options);
-    let timezone = this.timezone;
+function unimplementedError(name) {
+  return new Error(`You must implement the "${name}" method for this DateAdapter class`);
+}
 
-    if (prop === 'timezone') {
-      if (value === this.timezone && !tzoptions.keepLocalTime) return this;else if (tzoptions.keepLocalTime) {
-        const json = this.normalizeDateInput(options.start).toJSON();
-        json.timezone = value;
-        const adapter = this.dateAdapter.fromJSON(json); // prettier-ignore
+var DateAdapter;
 
-        options.start = options.start instanceof this.dateAdapter ? adapter : options.start instanceof _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateTime"] ? adapter.toDateTime() : adapter.date;
-      }
-      timezone = value;
-    } else if (prop === 'options') {
-      options = value;
-    } else {
-      options[prop] = value;
+(function (DateAdapter) {
+  DateAdapter.WEEKDAYS = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];
+  DateAdapter.MILLISECONDS_IN_SECOND = 1000;
+  DateAdapter.MILLISECONDS_IN_MINUTE = DateAdapter.MILLISECONDS_IN_SECOND * 60;
+  DateAdapter.MILLISECONDS_IN_HOUR = DateAdapter.MILLISECONDS_IN_MINUTE * 60;
+  DateAdapter.MILLISECONDS_IN_DAY = DateAdapter.MILLISECONDS_IN_HOUR * 24;
+  DateAdapter.MILLISECONDS_IN_WEEK = DateAdapter.MILLISECONDS_IN_DAY * 7;
+})(DateAdapter || (DateAdapter = {}));
+
+class InvalidDateTimeError extends Error {}
+
+class DateTime {
+  constructor(date, timezone, duration, generators) {
+    this.date = new Date(date);
+    this.timezone = timezone || null;
+    this.duration = duration || 0;
+    this.generators = generators && generators.slice() || [];
+
+    if (!Number.isInteger(this.duration) || this.duration < 0) {
+      throw new InvalidDateTimeError('duration must be a non-negative integer');
     }
 
-    return new Rule(options, {
-      data: this.data,
-      maxDuration: this.maxDuration,
-      timezone
-    });
-  }
+    this.assertIsValid();
+  } // /**
+  //  * Similar to `Array.isArray()`, `isInstance()` provides a surefire method
+  //  * of determining if an object is a `DateTime` by checking against the
+  //  * global symbol registry.
+  //  */
+  // static isInstance(object: any): object is DateTime {
+  //   return !!(object && object[DATETIME_ID]);
+  // }
 
-}
 
-Rule.recurrenceRules = [];
+  static fromJSON(json) {
+    const date = new Date(Date.UTC(json.year, json.month - 1, json.day, json.hour, json.minute, json.second, json.millisecond));
+    return new DateTime(date, json.timezone, json.duration, json.generators);
+  }
 
-class ScheduleBase extends OccurrenceGenerator {
+  static fromDateAdapter(adapter) {
+    return DateTime.fromJSON(Object.assign(Object.assign({}, adapter.toJSON()), {
+      generators: adapter.generators
+    }));
+  }
   /**
-   * Create a new Schedule object with the specified options.
-   *
-   * The order of precidence for rrules, rdates, exrules, and exdates is:
-   *
-   * 1. rrules are included
-   * 2. exrules are excluded
-   * 3. rdates are included
-   * 4. exdates are excluded
-   *
+   * Returns `undefined` if `duration` is `0`. Else returns
+   * the `end` date.
    */
-  constructor(options) {
-    super(options);
-    this.data = options.data;
-  }
 
-  occurrences(args = {}) {
-    return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));
+
+  get end() {
+    if (!this.duration) return;
+    if (this._end) return this._end;
+    this._end = this.add(this.duration, 'millisecond');
+    return this._end;
+  } // While we constrain the argument to be another DateAdapter in typescript
+  // we handle the case of someone passing in another type of object in javascript
+
+
+  isEqual(object) {
+    if (!object) {
+      return false;
+    }
+
+    assertSameTimeZone(this, object);
+    return this.valueOf() === object.valueOf();
   }
 
-  collections(args = {}) {
-    return new CollectionIterator(this, this.normalizeCollectionsArgs(args));
+  isBefore(object) {
+    assertSameTimeZone(this, object);
+    return this.valueOf() < object.valueOf();
   }
 
-  *_run(args = {}) {
-    const count = args.take;
-    delete args.take;
+  isBeforeOrEqual(object) {
+    assertSameTimeZone(this, object);
+    return this.valueOf() <= object.valueOf();
+  }
 
-    const iterator = this.occurrenceStream._run(args);
+  isAfter(object) {
+    assertSameTimeZone(this, object);
+    return this.valueOf() > object.valueOf();
+  }
 
-    let date = iterator.next().value;
-    let index = 0;
+  isAfterOrEqual(object) {
+    assertSameTimeZone(this, object);
+    return this.valueOf() >= object.valueOf();
+  }
 
-    while (date && (count === undefined || count > index)) {
-      date = date.add(this, 'generator');
-      const yieldArgs = yield this.normalizeRunOutput(date);
-      date = iterator.next(yieldArgs).value;
-      index++;
+  isOccurring(object) {
+    if (!this.duration) {
+      throw new Error('DateTime#isOccurring() is only applicable to DateTimes with durations');
     }
 
-    return undefined;
+    assertSameTimeZone(this, object);
+    return object.isAfterOrEqual(this) && object.isBeforeOrEqual(this.add(this.duration, 'millisecond'));
   }
 
-}
-/**
- * An operator function which accepts a spread of occurrence generators
- * and removes their occurrences from the output.
- *
- * @param streams a spread of occurrence generators
- */
+  add(amount, unit) {
+    switch (unit) {
+      case 'generator':
+        {
+          const generators = this.generators.slice();
+          generators.unshift(amount);
+          return new DateTime(this.date, this.timezone, this.duration, generators);
+        }
 
+      case 'year':
+        return this.forkDateTime(addUTCYears(this.date, amount));
 
-function subtract(...streams) {
-  return options => new SubtractOperator(streams, options);
-}
+      case 'month':
+        return this.forkDateTime(addUTCMonths(this.date, amount));
 
-class SubtractOperator extends Operator {
-  /** Not actually used but necessary for IRunnable interface */
-  set(_, value) {
-    return new SubtractOperator(this.streams.map(stream => stream.set('timezone', value)), Object.assign(Object.assign({}, this.config), {
-      base: this.config.base && this.config.base.set('timezone', value),
-      timezone: value
-    }));
-  }
+      case 'week':
+        return this.forkDateTime(addUTCWeeks(this.date, amount));
 
-  *_run(args = {}) {
-    if (!this.config.base) return;
-    const inclusion = new IterableWrapper(this.config.base, args);
-    const exclusion = new IterableWrapper(new AddOperator(this.streams, {
-      timezone: this.config.timezone
-    }), args);
-    cycleStreams(inclusion, exclusion, args);
+      case 'day':
+        return this.forkDateTime(addUTCDays(this.date, amount));
 
-    while (!inclusion.done) {
-      const yieldArgs = yield this.normalizeRunOutput(inclusion.value);
+      case 'hour':
+        return this.forkDateTime(addUTCHours(this.date, amount));
 
-      if (!(yieldArgs && yieldArgs.skipToDate)) {
-        inclusion.next();
-      }
+      case 'minute':
+        return this.forkDateTime(addUTCMinutes(this.date, amount));
 
-      cycleStreams(inclusion, exclusion, args, yieldArgs);
+      case 'second':
+        return this.forkDateTime(addUTCSeconds(this.date, amount));
+
+      case 'millisecond':
+        return this.forkDateTime(addUTCMilliseconds(this.date, amount));
+
+      default:
+        throw new Error('Invalid unit provided to `DateTime#add`');
     }
   }
 
-  calculateIsInfinite() {
-    return !!(this.config.base && this.config.base.isInfinite);
-  }
+  subtract(amount, unit) {
+    switch (unit) {
+      case 'year':
+        return this.forkDateTime(subUTCYears(this.date, amount));
 
-  calculateHasDuration() {
-    return !!(this.config.base && this.config.base.hasDuration);
+      case 'month':
+        return this.forkDateTime(subUTCMonths(this.date, amount));
+
+      case 'week':
+        return this.forkDateTime(subUTCWeeks(this.date, amount));
+
+      case 'day':
+        return this.forkDateTime(subUTCDays(this.date, amount));
+
+      case 'hour':
+        return this.forkDateTime(subUTCHours(this.date, amount));
+
+      case 'minute':
+        return this.forkDateTime(subUTCMinutes(this.date, amount));
+
+      case 'second':
+        return this.forkDateTime(subUTCSeconds(this.date, amount));
+
+      case 'millisecond':
+        return this.forkDateTime(subUTCMilliseconds(this.date, amount));
+
+      default:
+        throw new Error('Invalid unit provided to `DateTime#subtract`');
+    }
   }
 
-}
+  get(unit) {
+    switch (unit) {
+      case 'year':
+        return this.date.getUTCFullYear();
 
-function cycleStreams(inclusion, exclusion, options = {}, yieldArgs = {}) {
-  processYieldArgs([inclusion, exclusion], options, yieldArgs);
-  iterateExclusion(inclusion, exclusion, options);
+      case 'month':
+        return this.date.getUTCMonth() + 1;
 
-  while (!inclusion.done && !exclusion.done && inclusion.value.isEqual(exclusion.value)) {
-    inclusion.next();
-    iterateExclusion(inclusion, exclusion, options);
+      case 'yearday':
+        return getUTCYearDay(this.date);
+
+      case 'weekday':
+        return DateAdapter.WEEKDAYS[this.date.getUTCDay()];
+
+      case 'day':
+        return this.date.getUTCDate();
+
+      case 'hour':
+        return this.date.getUTCHours();
+
+      case 'minute':
+        return this.date.getUTCMinutes();
+
+      case 'second':
+        return this.date.getUTCSeconds();
+
+      case 'millisecond':
+        return this.date.getUTCMilliseconds();
+
+      default:
+        throw new Error('Invalid unit provided to `DateTime#set`');
+    }
   }
-}
 
-function iterateExclusion(inclusion, exclusion, options = {}) {
-  if (options.reverse) {
-    while (!exclusion.done && !inclusion.done && exclusion.value.isAfter(inclusion.value)) {
-      exclusion.next();
+  set(unit, value) {
+    if (unit === 'duration') {
+      return new DateTime(this.date, this.timezone, value, this.generators);
     }
 
-    return;
-  }
+    if (unit === 'generators') {
+      return new DateTime(this.date, this.timezone, this.duration, value);
+    }
 
-  while (!exclusion.done && !inclusion.done && exclusion.value.isBefore(inclusion.value)) {
-    exclusion.next();
-  }
-}
-/**
- * An operator function which deduplicates an occurrence stream. Occurrence
- * `duration` is currently ignored.
- */
+    let date = new Date(this.date);
+
+    switch (unit) {
+      case 'year':
+        date.setUTCFullYear(value);
+        break;
 
+      case 'month':
+        {
+          // If the current day of the month
+          // is greater than days in the month we are moving to, we need to also
+          // set the day to the end of that month.
+          const length = monthLength(value, date.getUTCFullYear());
+          const day = date.getUTCDate();
 
-function unique() {
-  return options => new UniqueOperator([], options);
-}
+          if (day > length) {
+            date.setUTCDate(1);
+            date.setUTCMonth(value);
+            date = subUTCDays(date, 1);
+          } else {
+            date.setUTCMonth(value - 1);
+          }
 
-class UniqueOperator extends Operator {
-  /** Not actually used but necessary for IRunnable interface */
-  set(_, value) {
-    return new UniqueOperator([], Object.assign(Object.assign({}, this.config), {
-      base: this.config.base && this.config.base.set('timezone', value),
-      timezone: value
-    }));
-  }
+          break;
+        }
 
-  *_run(args = {}) {
-    if (!this.config.base) return;
-    const stream = new IterableWrapper(this.config.base, args);
+      case 'day':
+        date.setUTCDate(value);
+        break;
 
-    while (!stream.done) {
-      const yieldArgs = yield this.normalizeRunOutput(stream.value);
-      const lastValue = stream.value; // iterate the current stream
+      case 'hour':
+        date.setUTCHours(value);
+        break;
 
-      stream.next(yieldArgs);
+      case 'minute':
+        date.setUTCMinutes(value);
+        break;
 
-      while (!(yieldArgs && yieldArgs.skipToDate) && !stream.done && stream.value.isEqual(lastValue)) {
-        stream.next();
-      }
+      case 'second':
+        date.setUTCSeconds(value);
+        break;
+
+      case 'millisecond':
+        date.setUTCMilliseconds(value);
+        break;
+
+      default:
+        throw new Error('Invalid unit provided to `DateTime#set`');
     }
-  }
 
-  calculateIsInfinite() {
-    return !!(this.config.base && this.config.base.isInfinite);
+    return this.forkDateTime(date);
   }
 
-  calculateHasDuration() {
-    return !!(this.config.base && this.config.base.hasDuration);
+  granularity(granularity, opt = {}) {
+    let date = this.forkDateTime(this.date);
+
+    switch (granularity) {
+      case 'year':
+        date = date.set('month', 1);
+
+      case 'month':
+        date = date.set('day', 1);
+        break;
+
+      case 'week':
+        date = setDateToStartOfWeek(date, opt.weekStart);
+    }
+
+    switch (granularity) {
+      case 'year':
+      case 'month':
+      case 'week':
+      case 'day':
+        date = date.set('hour', 0);
+
+      case 'hour':
+        date = date.set('minute', 0);
+
+      case 'minute':
+        date = date.set('second', 0);
+
+      case 'second':
+        date = date.set('millisecond', 0);
+
+      case 'millisecond':
+        return date;
+
+      default:
+        throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);
+    }
   }
 
-}
+  endGranularity(granularity, opt = {}) {
+    let date = this.forkDateTime(this.date);
 
-class Schedule extends ScheduleBase {
-  /**
-   * Create a new Schedule object with the specified options.
-   *
-   * The order of precidence for rrules, rdates, exrules, and exdates is:
-   *
-   * 1. rrules are included
-   * 2. exrules are excluded
-   * 3. rdates are included
-   * 4. exdates are excluded
-   *
-   * ### Options
-   *
-   * - **timezone**: The timezone that yielded occurrences should be *displayed* in.
-   *   Note, this one affects the *displayed* timezone of yielded occurrences.
-   *   For rules, occurrences are first found using the unmodified rule
-   *   config (including whatever timezone the `start` datetime is defined
-   *   in), and then converted to the timezone specified here before being
-   *   yielded. By default, the timezone is *local* time (`null`). So if you don't
-   *   want your rules to be displayed in local time, you must supply a
-   *   timezone argument.
-   * - **data**: arbitrary data you can associate with this Schedule. This
-   *   is the only mutable property of `Schedule` objects.
-   * - **maxDuration**: currently unused.
-   * - **rrules**: rules specifying when occurrences happen. See the "Rule Config"
-   *   section below.
-   * - **rdates**: individual dates that should be _included_ in the schedule.
-   * - **exdates**: individual dates that should be _excluded_ from the schedule.
-   * - **exrules**: rules specifying when occurrences shouldn't happen. See the
-   *   "Rule Config" section below.
-   *
-   * ### Rule Config
-   *
-   * - #### frequency
-   *
-   *   The frequency rule part identifies the type of recurrence rule. Valid values
-   *   include `"SECONDLY"`, `"MINUTELY"`, `"HOURLY"`, `"DAILY"`, `"WEEKLY"`,
-   *   `"MONTHLY"`, or `"YEARLY"`.
-   *
-   * - #### start
-   *
-   *   The start of the rule (not necessarily the first occurrence).
-   *   Either a `DateAdapter` instance, date object, or `DateTime` object.
-   *   The type of date object depends on the `DateAdapter` class used for this
-   *   `Rule`.
-   *
-   * - #### end?
-   *
-   *   The end of the rule (not necessarily the last occurrence).
-   *   Either a `DateAdapter` instance, date object, or `DateTime` object.
-   *   The type of date object depends on the `DateAdapter` class used for this
-   *   `Rule`.
-   *
-   * - #### duration?
-   *
-   *   A length of time expressed in milliseconds.
-   *
-   * - #### interval?
-   *
-   *   The interval rule part contains a positive integer representing at
-   *   which intervals the recurrence rule repeats. The default value is
-   *   `1`, meaning every second for a SECONDLY rule, every minute for a
-   *   MINUTELY rule, every hour for an HOURLY rule, every day for a
-   *   DAILY rule, every week for a WEEKLY rule, every month for a
-   *   MONTHLY rule, and every year for a YEARLY rule. For example,
-   *   within a DAILY rule, a value of `8` means every eight days.
-   *
-   * - #### count?
-   *
-   *   The count rule part defines the number of occurrences at which to
-   *   range-bound the recurrence. `count` and `end` are both two different
-   *   ways of specifying how a recurrence completes.
-   *
-   * - #### weekStart?
-   *
-   *   The weekStart rule part specifies the day on which the workweek starts.
-   *   Valid values are `"MO"`, `"TU"`, `"WE"`, `"TH"`, `"FR"`, `"SA"`, and `"SU"`.
-   *   This is significant when a WEEKLY rule has an interval greater than 1,
-   *   and a `byDayOfWeek` rule part is specified. The
-   *   default value is `"MO"`.
-   *
-   * - #### bySecondOfMinute?
-   *
-   *   The bySecondOfMinute rule part expects an array of seconds
-   *   within a minute. Valid values are 0 to 60.
-   *
-   * - #### byMinuteOfHour?
-   *
-   *   The byMinuteOfHour rule part expects an array of minutes within an hour.
-   *   Valid values are 0 to 59.
-   *
-   * - #### byHourOfDay?
-   *
-   *   The byHourOfDay rule part expects an array of hours of the day.
-   *   Valid values are 0 to 23.
-   *
-   * - #### byDayOfWeek?
-   *
-   *   *note: the byDayOfWeek rule part is kinda complex. Blame the ICAL spec.*
-   *
-   *   The byDayOfWeek rule part expects an array. Each array entry can
-   *   be a day of the week (`"SU"`, `"MO"` , `"TU"`, `"WE"`, `"TH"`,
-   *   `"FR"`, `"SA"`). If the rule's `frequency` is either MONTHLY or YEARLY,
-   *   Any entry can also be a tuple where the first value of the tuple is a
-   *   day of the week and the second value is an positive/negative integer
-   *   (e.g. `["SU", 1]`). In this case, the number indicates the nth occurrence of
-   *   the specified day within the MONTHLY or YEARLY rule.
-   *
-   *   The behavior of byDayOfWeek changes depending on the `frequency`
-   *   of the rule.
-   *
-   *   Within a MONTHLY rule, `["MO", 1]` represents the first Monday
-   *   within the month, whereas `["MO", -1]` represents the last Monday
-   *   of the month.
-   *
-   *   Within a YEARLY rule, the numeric value in a byDayOfWeek tuple entry
-   *   corresponds to an offset within the month when the byMonthOfYear rule part is
-   *   present, and corresponds to an offset within the year otherwise.
-   *
-   *   Regardless of rule `frequency`, if a byDayOfWeek entry is a string
-   *   (rather than a tuple), it means "all of these days" within the specified
-   *   frequency (e.g. within a MONTHLY rule, `"MO"` represents all Mondays within
-   *   the month).
-   *
-   * - #### byDayOfMonth?
-   *
-   *   The byDayOfMonth rule part expects an array of days
-   *   of the month. Valid values are 1 to 31 or -31 to -1.
-   *
-   *   For example, -10 represents the tenth to the last day of the month.
-   *   The byDayOfMonth rule part *must not* be specified when the rule's
-   *   `frequency` is set to WEEKLY.
-   *
-   * - #### byMonthOfYear?
-   *
-   *   The byMonthOfYear rule part expects an array of months
-   *   of the year. Valid values are 1 to 12.
-   *
-   */
-  constructor(options = {}) {
-    super(options);
-    this.rrules = [];
-    this.exrules = [];
-
-    for (const prop of ['rrules', 'exrules']) {
-      const arg = options[prop];
-
-      if (arg) {
-        this[prop] = arg.map(ruleArgs => {
-          if (ruleArgs instanceof Rule) {
-            return ruleArgs.set('timezone', this.timezone);
-          } else {
-            return new Rule(ruleArgs, {
-              timezone: this.timezone
-            });
-          }
-        });
-      }
-    }
+    switch (granularity) {
+      case 'year':
+        date = date.set('month', 12);
 
-    for (const prop of ['rdates', 'exdates']) {
-      const arg = options[prop];
+      case 'month':
+        date = date.set('day', monthLength(date.get('month'), date.get('year')));
+        break;
 
-      if (arg) {
-        this[prop] = arg instanceof Dates ? arg.set('timezone', this.timezone) : new Dates({
-          dates: arg,
-          timezone: this.timezone
-        });
-      } else {
-        this[prop] = new Dates({
-          timezone: this.timezone
-        });
-      }
+      case 'week':
+        date = setDateToEndOfWeek(date, opt.weekStart);
     }
 
-    this.hasDuration = this.rrules.every(rule => rule.hasDuration) && this.exrules.every(rule => rule.hasDuration) && this.rdates.hasDuration && this.exdates.hasDuration;
-    this.isInfinite = this.rrules.some(rule => rule.isInfinite);
-    this.occurrenceStream = [add(...this.rrules), subtract(...this.exrules), add(this.rdates), subtract(this.exdates), unique()].reduce((prev, curr) => curr({
-      base: prev,
-      timezone: this.timezone
-    }), undefined);
-  }
+    switch (granularity) {
+      case 'year':
+      case 'month':
+      case 'week':
+      case 'day':
+        date = date.set('hour', 23);
 
-  add(prop, value) {
-    const rrules = this.rrules.slice();
-    const exrules = this.exrules.slice();
-    let rdates = this.rdates;
-    let exdates = this.exdates;
+      case 'hour':
+        date = date.set('minute', 59);
 
-    switch (prop) {
-      case 'rrule':
-        rrules.push(value);
-        break;
+      case 'minute':
+        date = date.set('second', 59);
 
-      case 'exrule':
-        exrules.push(value);
-        break;
+      case 'second':
+        date = date.set('millisecond', 999);
 
-      case 'rdate':
-        rdates = this.rdates.add(value);
-        break;
+      case 'millisecond':
+        return date;
 
-      case 'exdate':
-        exdates = this.exdates.add(value);
-        break;
+      default:
+        throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);
     }
-
-    return new Schedule({
-      timezone: this.timezone,
-      data: this.data,
-      rrules,
-      exrules,
-      rdates,
-      exdates
-    });
   }
 
-  remove(prop, value) {
-    let rrules = this.rrules;
-    let exrules = this.exrules;
-    let rdates = this.rdates;
-    let exdates = this.exdates;
-
-    switch (prop) {
-      case 'rrule':
-        rrules = rrules.filter(rule => rule !== value);
-        break;
+  toISOString() {
+    return this.date.toISOString();
+  }
 
-      case 'exrule':
-        exrules = exrules.filter(rule => rule !== value);
-        break;
+  toDateTime() {
+    return this;
+  }
 
-      case 'rdate':
-        rdates = this.rdates.remove(value);
-        break;
+  toJSON() {
+    const json = {
+      timezone: this.timezone,
+      year: this.get('year'),
+      month: this.get('month'),
+      day: this.get('day'),
+      hour: this.get('hour'),
+      minute: this.get('minute'),
+      second: this.get('second'),
+      millisecond: this.get('millisecond')
+    };
 
-      case 'exdate':
-        exdates = this.exdates.remove(value);
-        break;
+    if (this.duration) {
+      json.duration = this.duration;
     }
 
-    return new Schedule({
-      timezone: this.timezone,
-      data: this.data,
-      rrules,
-      exrules,
-      rdates,
-      exdates
-    });
+    return json;
   }
 
-  set(prop, value, options = {}) {
-    let timezone = this.timezone;
-    let rrules = this.rrules;
-    let exrules = this.exrules;
-    let rdates = this.rdates;
-    let exdates = this.exdates;
-
-    switch (prop) {
-      case 'timezone':
-        if (value === this.timezone && !options.keepLocalTime) return this;else if (options.keepLocalTime) {
-          rrules = rrules.map(rule => rule.set('timezone', value, options));
-          exrules = exrules.map(rule => rule.set('timezone', value, options));
-          rdates = rdates.set('timezone', value, options);
-          exdates = exdates.set('timezone', value, options);
-        }
-        timezone = value;
-        break;
-
-      case 'rrules':
-        rrules = value;
-        break;
-
-      case 'exrules':
-        exrules = value;
-        break;
-
-      case 'rdates':
-        rdates = value;
-        break;
+  valueOf() {
+    return this.date.valueOf();
+  }
 
-      case 'exdates':
-        exdates = value;
-        break;
+  assertIsValid() {
+    if (isNaN(this.valueOf())) {
+      throw new InvalidDateTimeError('DateTime has invalid date.');
     }
 
-    return new Schedule({
-      timezone,
-      data: this.data,
-      rrules,
-      exrules,
-      rdates,
-      exdates
-    });
+    return true;
+  }
+
+  forkDateTime(date) {
+    return new DateTime(date, this.timezone, this.duration, this.generators);
   }
 
 }
-/**
- * An operator function, which takes a spread of occurrence generators and only
- * returns the dates which intersect every occurrence generator.
- *
- * Because it's possible for all the generators to never intersect,
- * and because the intersection operator can't detect this lack of intersection,
- * you must call `intersection()` with a `{maxFailedIterations: number}` argument.
- * For convenience, you can globally set `RScheduleConfig.defaultMaxFailedIterations`.
- * Without further information, I'd probably set `defaultMaxFailedIterations = 50`.
- *
- * The `maxFailedIterations` argument caps the number of iterations the operator will
- * run through without finding a single valid occurrence. If this number is reached, the operator will
- * stop iterating (preventing a possible infinite loop).
- *
- * - Note: `maxFailedIterations` caps the number of iterations which
- *   *fail to turn up a single valid occurrence*. Every time a valid occurrence is returned,
- *   the current iteration count is reset to 0.
- *
- */
 
+function assertSameTimeZone(x, y) {
+  if (x.timezone !== y.timezone) {
+    throw new InvalidDateTimeError('Attempted to compare a datetime to another date in a different timezone: ' + JSON.stringify(x) + ' and ' + JSON.stringify(y));
+  }
 
-function intersection(args) {
-  return options => new IntersectionOperator(args, options);
+  return true;
 }
 
-class IntersectionOperator extends Operator {
-  constructor(args, config) {
-    super(args.streams, config);
+function setDateToStartOfWeek(date, wkst) {
+  const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));
+  return date.subtract(index, 'day');
+}
 
-    if (this.isInfinite) {
-      this.maxFailedIterations = args.maxFailedIterations || IntersectionOperator.defaultMaxFailedIterations;
+function setDateToEndOfWeek(date, wkst) {
+  const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));
+  return date.add(6 - index, 'day');
+}
 
-      if (!this.maxFailedIterations) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ArgumentError"]('The IntersectionOperator must be provided ' + 'a `maxFailedIterations` argument when it is built from schedules of infinite length. ' + 'This argument is used to ensure that the IntersectionOperator does not enter ' + 'an infinite loop because the underlying schedules never intersect. ' + 'If the `maxFailedIterations` count is reached it will be assumed that ' + 'all valid occurrences have been found and iteration will end without error.' + 'Without additional information, "50" is probably a good ' + '`maxFailedIterations` value. ' + 'If the schedules are not of infinite length, `maxFailedIterations` is ignored. ' + 'Note also that you can provide a `defaultMaxFailedIterations` number via ' + 'IntersectionOperator.defaultMaxFailedIterations.');
-      }
-    }
-  }
+function dateTimeSortComparer(a, b) {
+  if (a.isAfter(b)) return 1;
+  if (a.isBefore(b)) return -1;
 
-  set(_, value) {
-    return new IntersectionOperator({
-      maxFailedIterations: this.maxFailedIterations,
-      streams: this.streams.map(stream => stream.set('timezone', value))
-    }, Object.assign(Object.assign({}, this.config), {
-      base: this.config.base && this.config.base.set('timezone', value),
-      timezone: value
-    }));
+  if (a.duration && b.duration) {
+    if (a.duration > b.duration) return 1;
+    if (a.duration < b.duration) return -1;
   }
 
-  *_run(args = {}) {
-    const streams = this.streams.map(stream => new IterableWrapper(stream, args));
+  return 0;
+}
 
-    if (this.config.base) {
-      streams.push(new IterableWrapper(this.config.base, args));
-    }
+function uniqDateTimes(dates) {
+  return Array.from(new Map(dates.map(date => [date.toISOString(), date])).values());
+}
 
-    if (streams.length === 0) return;
-    const hasEndDate = !!(!this.isInfinite || args.reverse || args.end);
+function orderedWeekdays(wkst = 'SU') {
+  const wkdays = DateAdapter.WEEKDAYS.slice();
+  let index = wkdays.indexOf(wkst);
 
-    if (!cycleStreams$1(streams, undefined, Object.assign(Object.assign({}, args), {
-      hasEndDate,
-      iteration: 0,
-      maxIterations: this.maxFailedIterations
-    }))) {
-      return;
-    }
+  while (index !== 0) {
+    shiftArray(wkdays);
+    index--;
+  }
 
-    let stream = selectNextIterable(streams, args);
+  return wkdays;
+}
 
-    while (stream) {
-      const yieldArgs = yield this.normalizeRunOutput(stream.value);
-      const lastValidDate = stream.value;
+function shiftArray(array, from = 'first') {
+  if (array.length === 0) {
+    return array;
+  } else if (from === 'first') {
+    array.push(array.shift());
+  } else {
+    array.unshift(array.pop());
+  }
 
-      if (!(yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate)) {
-        // iterate the current stream
-        stream.next();
-      }
+  return array;
+}
 
-      if (!cycleStreams$1(streams, lastValidDate, Object.assign(Object.assign({}, args), {
-        hasEndDate,
-        iteration: 0,
-        maxIterations: this.maxFailedIterations
-      }), yieldArgs)) {
-        return;
-      } // The call to `cycleStreams()`, above, has already called
-      // selectNextIterable with the `yieldArgs`
+function getDifferenceBetweenWeekdays(x, y) {
+  if (x === y) return 0;
+  const result = DateAdapter.WEEKDAYS.indexOf(x) - DateAdapter.WEEKDAYS.indexOf(y);
+  return result > 0 ? 7 - result : Math.abs(result);
+}
+/**
+ * Returns the days in the given month.
+ *
+ * @param month base-1
+ * @param year
+ */
 
 
-      stream = selectNextIterable(streams, args);
-    }
-  }
+function monthLength(month, year) {
+  const block = {
+    1: 31,
+    2: getDaysInFebruary(year),
+    3: 31,
+    4: 30,
+    5: 31,
+    6: 30,
+    7: 31,
+    8: 31,
+    9: 30,
+    10: 31,
+    11: 30,
+    12: 31
+  };
+  return block[month];
+}
 
-  calculateIsInfinite() {
-    // Note: Array#every() === true when length === 0
-    if (!this.config.base) {
-      if (this.streams.length === 0) return false;
-      return this.streams.every(stream => stream.isInfinite);
-    } else if (this.streams.length === 0) return this.config.base.isInfinite;
+function getDaysInFebruary(year) {
+  return isLeapYear(year) ? 29 : 28;
+} // taken from date-fn
 
-    return this.config.base.isInfinite && this.streams.every(stream => stream.isInfinite);
-  }
 
-  calculateHasDuration() {
-    const streamsDuration = this.streams.every(stream => stream.hasDuration);
-    if (!this.config.base) return streamsDuration;
-    return this.config.base.hasDuration && streamsDuration;
-  }
+function isLeapYear(year) {
+  return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;
+}
 
+function getDaysInYear(year) {
+  return isLeapYear(year) ? 366 : 365;
 }
 
-function cycleStreams$1(streams, lastValidDate, options, yieldArgs) {
-  const next = selectNextIterable(streams, options, yieldArgs);
-  if (!next) return false;
-  if (lastValidDate && next.value.isEqual(lastValidDate)) return true;
-  if (streams.some(stream => stream.done)) return false;
-  if (streams.every(stream => stream.value.isEqual(next.value))) return true;
-  options.iteration++;
+function getUTCYearDay(now) {
+  const start = new Date(Date.UTC(now.getUTCFullYear(), 0, 1));
+  const diff = now.valueOf() - start.valueOf();
+  return 1 + Math.floor(diff / DateAdapter.MILLISECONDS_IN_DAY);
+}
+/**
+ * These functions are basically lifted from `date-fns`, but changed
+ * to use the UTC date methods, which `date-fns` doesn't support.
+ */
 
-  if (options.maxIterations && !options.hasEndDate && options.iteration > options.maxIterations) {
-    return false;
-  } // Since not all of the streams are equal, we grab the last stream...
 
+function toInteger(input) {
+  if (input === null || input === true || input === false) {
+    return NaN;
+  }
 
-  const last = selectLastIterable(streams, options); // ...and skip all the other streams so they are equal or past the last one
+  const int = Number(input);
 
-  streams.forEach(stream => {
-    // Because streams can have multiple, identical dates in a row,
-    // we don't want to `skipToDate` if the provided date is equal to the current date.
-    if (last.value.isEqual(stream.value)) return;
-    stream.next({
-      skipToDate: last.value
-    });
-  }); // then we repeat
+  if (isNaN(int)) {
+    return int;
+  }
 
-  return cycleStreams$1(streams, lastValidDate, options);
+  return int < 0 ? Math.ceil(int) : Math.floor(int);
 }
 
-class DurationIterableWrapper extends IterableWrapper {
-  constructor(generator, runArgs) {
-    super(generator, runArgs);
-    this.workingValue = this.value;
-    this.next();
+function addMilliseconds(dirtyDate, dirtyAmount) {
+  if (arguments.length < 2) {
+    throw new TypeError('2 arguments required, but only ' + arguments.length + ' present');
   }
 
+  const timestamp = dirtyDate.valueOf();
+  const amount = toInteger(dirtyAmount);
+  return new Date(timestamp + amount);
 }
 
-class MergeDurationOperatorError extends Error {}
-/**
- * An operator function which takes an occurrence stream with
- * `hasDuration === true` and merges occurrences which have overlapping
- * start and end times.
- *
- * Because it's possible for all the occurrences in the stream to have
- * overlapping start and end times, you must provide a `maxDuration`
- * argument that represents the maximum possible duration for a single
- * occurrence. If this duration is exceeded, a `MergeDurationOperatorError`
- * will be thrown.
- *
- * - For your convenience, you can globally set a default
- *   `MergeDurationOperator#maxDuration` via
- *   `RScheduleConfig.MergeDurationOperator.defaultMaxDuration`.
- *
- * Usage example:
- *
- * ```typescript
- * const MILLISECONDS_IN_HOUR = 1000 * 60 * 60;
- *
- * const dates = new Dates({
- *   dates: [
- *     new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),
- *     new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 2 }),
- *     new StandardDateAdapter(new Date(2010, 10, 11, 14), { duration: MILLISECONDS_IN_HOUR * 2 }),
- *     new StandardDateAdapter(new Date(2010, 10, 12, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),
- *   ],
- *   dateAdpter: StandardDateAdapter,
- * }).pipe(
- *   mergeDuration({
- *     maxDuration: MILLISECONDS_IN_HOUR * 24
- *   })
- * )
- *
- * dates.occurrences().toArray() === [
- *   new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),
- *   new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 3 }),
- *   new StandardDateAdapter(new Date(2010, 10, 12, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),
- * ]
- * ```
- */
+function addUTCYears(date, input) {
+  const amount = toInteger(input);
+  return addUTCMonths(date, amount * 12);
+}
 
+function addUTCMonths(date, input) {
+  const amount = toInteger(input);
+  date = new Date(date);
+  const desiredMonth = date.getUTCMonth() + amount;
+  const dateWithDesiredMonth = new Date(0);
+  dateWithDesiredMonth.setUTCFullYear(date.getUTCFullYear(), desiredMonth, 1);
+  dateWithDesiredMonth.setUTCHours(0, 0, 0, 0);
+  const daysInMonth = monthLength(dateWithDesiredMonth.getUTCMonth() + 1, dateWithDesiredMonth.getUTCFullYear()); // Set the last day of the new month
+  // if the original date was the last day of the longer month
 
-function mergeDuration(args) {
-  return options => new MergeDurationOperator(args, options);
+  date.setUTCMonth(desiredMonth, Math.min(daysInMonth, date.getUTCDate()));
+  return date;
 }
 
-class MergeDurationOperator extends Operator {
-  constructor(args, config) {
-    super([], config);
-    this.maxDuration = args.maxDuration;
+function addUTCWeeks(date, input) {
+  const amount = toInteger(input);
+  const days = amount * 7;
+  return addUTCDays(date, days);
+}
 
-    if (config.base && !config.base.hasDuration) {
-      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ArgumentError"]('Base stream provided to MergeDurationOperator does not have an associated duration. ' + 'The MergeDurationOperator can only be used with streams which have a duration. ');
-    }
-  }
-  /** Not actually used but necessary for IRunnable interface */
+function addUTCDays(date, input) {
+  // by adding milliseconds rather than days, we supress the native Date object's automatic
+  // daylight savings time conversions which we don't want in UTC mode
+  return addUTCMilliseconds(date, toInteger(input) * DateAdapter.MILLISECONDS_IN_DAY);
+}
 
+function addUTCHours(date, input) {
+  const amount = toInteger(input);
+  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_HOUR);
+}
 
-  set(_, value) {
-    return new MergeDurationOperator({
-      maxDuration: this.maxDuration
-    }, Object.assign(Object.assign({}, this.config), {
-      base: this.config.base && this.config.base.set('timezone', value),
-      timezone: value
-    }));
-  }
+function addUTCMinutes(date, input) {
+  const amount = toInteger(input);
+  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_MINUTE);
+}
 
-  _run(args = {}) {
-    return args.reverse ? this.reverseRun(args) : this.forwardRun(args);
-  }
+function addUTCSeconds(date, input) {
+  const amount = toInteger(input);
+  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_SECOND);
+}
 
-  calculateIsInfinite() {
-    return !!(this.config.base && this.config.base.isInfinite);
-  }
+function addUTCMilliseconds(date, input) {
+  const amount = toInteger(input);
+  const timestamp = date.getTime();
+  return new Date(timestamp + amount);
+}
 
-  calculateHasDuration() {
-    return true;
-  }
+function subUTCYears(date, amount) {
+  return addUTCYears(date, -amount);
+}
 
-  *forwardRun(args = {}) {
-    if (!this.config.base) return; // We want to find occurrences that end after the provided
-    // `start` time even if they begin before the provided `start`
-    // time. Because of this, we must begin iterating `maxDuration`
-    // before the provided start time.
+function subUTCMonths(date, amount) {
+  return addUTCMonths(date, -amount);
+}
 
-    let checkFromStart = args.start;
+function subUTCWeeks(date, amount) {
+  return addUTCWeeks(date, -amount);
+}
 
-    if (args.start) {
-      checkFromStart = args.start.subtract(this.maxDuration, 'millisecond');
-    }
+function subUTCDays(date, amount) {
+  return addUTCDays(date, -amount);
+}
 
-    let checkFromEnd = args.end;
+function subUTCHours(date, amount) {
+  return addUTCHours(date, -amount);
+}
 
-    if (args.end) {
-      checkFromEnd = args.end.add(this.maxDuration, 'millisecond');
-    }
+function subUTCMinutes(date, amount) {
+  return addUTCMinutes(date, -amount);
+}
 
-    const stream = new DurationIterableWrapper(this.config.base, Object.assign(Object.assign({}, args), {
-      start: checkFromStart,
-      end: checkFromEnd
-    }));
-    let yieldArgs; // checking `stream.workingValue` because when `stream.done === true`
-    // `stream.workingValue` will not have been yielded yet
+function subUTCSeconds(date, amount) {
+  return addUTCSeconds(date, -amount);
+}
 
-    while (stream.workingValue) {
-      // TODO(@john.carroll.p): figure out how to handle `DateTime#generators` for merged `DateTimes`
-      while (!stream.done && stream.workingValue.end.isAfterOrEqual(stream.value)) {
-        if (stream.workingValue.duration > this.maxDuration) {
-          throw new MergeDurationOperatorError(`MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` + this.maxDuration);
-        }
+function subUTCMilliseconds(date, amount) {
+  return addUTCMilliseconds(date, -amount);
+}
 
-        if (stream.value.end.isAfter(stream.workingValue.end)) {
-          const diff = stream.value.end.valueOf() - stream.workingValue.end.valueOf();
-          stream.workingValue = stream.workingValue.set('duration', stream.workingValue.duration + diff);
-        }
+class ArgumentError extends Error {}
 
-        stream.next();
-      } // check to make sure the occurrence we are about to yield ends after the
-      // provided start time.
+class InfiniteLoopError extends Error {}
 
+function numberSortComparer(a, b) {
+  if (a > b) {
+    return 1;
+  } else if (b > a) {
+    return -1;
+  } else {
+    return 0;
+  }
+}
 
-      if (args.start && stream.workingValue.end.isBefore(args.start)) {
-        stream.workingValue = stream.value;
-        stream.next();
-        continue;
-      } // make sure the occurrence we are about to yield ends after the
-      // provided skipToDate
+function freqToGranularity(freq) {
+  switch (freq) {
+    case 'YEARLY':
+      return 'year';
 
+    case 'MONTHLY':
+      return 'month';
 
-      if ((yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate) && stream.workingValue.end.isBefore(yieldArgs.skipToDate)) {
-        stream.workingValue = stream.value;
-        stream.next();
-        continue;
-      } // make sure we are not after the user requested `end` time.
+    case 'WEEKLY':
+      return 'week';
 
+    case 'DAILY':
+      return 'day';
 
-      if (args.end && stream.workingValue && stream.workingValue.isAfter(args.end)) {
-        break;
-      }
+    case 'HOURLY':
+      return 'hour';
 
-      if (stream.workingValue.duration > this.maxDuration) {
-        throw new MergeDurationOperatorError(`MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` + this.maxDuration);
-      }
+    case 'MINUTELY':
+      return 'minute';
 
-      yieldArgs = yield this.normalizeRunOutput(stream.workingValue);
+    case 'SECONDLY':
+      return 'second';
 
-      if ((yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate) && stream.workingValue.isAfterOrEqual(yieldArgs.skipToDate)) {
-        throw new Error('A provided `skipToDate` option must be greater than the last yielded date ' + '(or smaller, in the case of reverse iteration)');
-      }
+    case 'MILLISECONDLY':
+      return 'millisecond';
 
-      stream.workingValue = stream.value;
-      stream.next();
-    }
+    default:
+      throw new Error('unknown freq passed to freqToGranularity()');
   }
+}
 
-  *reverseRun(args = {}) {
-    if (!this.config.base) return; // We want to find occurrences that end after the provided
-    // `start` time even if they begin before the provided `start`
-    // time. Because of this, we must begin iterating `maxDuration`
-    // before the provided start time.
+function cloneJSON(json) {
+  return JSON.parse(JSON.stringify(json));
+}
 
-    let checkFromStart = args.start;
+function dateInputToDateAdapter(date) {
+  // prettier-ignore
+  return date instanceof DateTime ? DateAdapterBase.adapter.fromDateTime(date) : date instanceof DateAdapterBase ? date : DateAdapterBase.adapter.fromDate(date);
+}
 
-    if (args.start) {
-      checkFromStart = args.start.subtract(this.maxDuration, 'millisecond');
+function dateInputToDateTime(date, timezone) {
+  if (date instanceof DateTime) {
+    if (date.timezone !== timezone) {
+      return DateAdapterBase.adapter.fromDateTime(date).set('timezone', timezone).toDateTime();
     }
 
-    let checkFromEnd = args.end;
-
-    if (args.end) {
-      checkFromEnd = args.end.add(this.maxDuration, 'millisecond');
-    }
+    return date;
+  }
 
-    const stream = new DurationIterableWrapper(this.config.base, Object.assign(Object.assign({}, args), {
-      start: checkFromStart,
-      end: checkFromEnd
-    }));
-    let yieldArgs; // checking `stream.workingValue` because when `stream.done === true`
-    // `stream.workingValue` will not have been yielded yet
+  return date instanceof DateAdapterBase ? date.set('timezone', timezone).toDateTime() : DateAdapterBase.adapter.fromDate(date).set('timezone', timezone).toDateTime();
+} // export function normalizeDateInput<T extends DateAdapter>(
+//   dateAdapter: DateAdapterConstructor<T>,
+//   input: DateInput<T>,
+//   timezone: string | null,
+// ): DateTime {
+//   if (input instanceof DateTime) {
+//     if (input.timezone !== timezone) {
+//       return dateAdapter
+//         .fromDateTime(input)
+//         .set('timezone', timezone)
+//         .toDateTime();
+//     }
+//     return input;
+//   }
+//   return input instanceof DateAdapter
+//     ? input.set('timezone', timezone).toDateTime()
+//     : new dateAdapter(input).toDateTime();
+// }
 
-    while (stream.workingValue) {
-      // TODO(@john.carroll.p): figure out how to handle `DateTime#generators` for merged `DateTimes`
-      while (!stream.done && stream.workingValue.isBeforeOrEqual(stream.value.end)) {
-        if (stream.workingValue.duration > this.maxDuration) {
-          throw new MergeDurationOperatorError(`MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` + this.maxDuration);
-        }
 
-        if (stream.value.isBefore(stream.workingValue) || stream.value.end.isAfter(stream.workingValue.end)) {
-          if (stream.value.end.isAfter(stream.workingValue.end)) {
-            // `stream.workingValue` is a subset of `stream.value`
-            // so simply replace `stream.workingValue` with `stream.value`
-            stream.workingValue = stream.value;
-          } else {
-            const diff = stream.workingValue.valueOf() - stream.value.valueOf();
-            stream.workingValue = stream.value.set('duration', stream.workingValue.duration + diff);
-          }
-        }
+function normalizeDateTimeTimezone(date, timezone) {
+  if (date.timezone !== timezone) {
+    return DateAdapterBase.adapter.fromDateTime(date).set('timezone', timezone).toDateTime();
+  }
 
-        stream.next();
-      } // check to make sure the occurrence we are about to yield starts before the
-      // provided start time.
+  return date;
+}
 
+class RuleOptionError extends Error {}
 
-      if (args.start && stream.workingValue.end.isBefore(args.start)) {
-        break;
-      }
+function normalizeDefaultOptions(options) {
+  let start;
 
-      if (yieldArgs && yieldArgs.skipToDate && stream.workingValue.end.isBefore(yieldArgs.skipToDate)) {
-        stream.workingValue = stream.value;
-        stream.next();
-        continue;
-      } // make sure we are not after the user requested `end` time.
+  if (options.start instanceof DateTime) {
+    start = options.start;
+  } else if (options.start instanceof DateAdapterBase) {
+    start = options.start.toDateTime();
+  } else if (DateAdapterBase.adapter.isDate(options.start)) {
+    start = DateAdapterBase.adapter.fromDate(options.start).toDateTime();
+  } else {
+    throw new RuleOptionError('"start" must be either a `DateAdapter` instance or an instance of the ' + 'date a DateAdapter is wrapping (e.g. `StandardDateAdapter` wraps a `Date`)');
+  }
 
+  let end;
 
-      if (args.end && stream.workingValue && stream.workingValue.isAfter(args.end)) {
-        stream.workingValue = stream.value;
-        stream.next();
-        continue;
-      }
+  if (options.end) {
+    if (options.end instanceof DateTime) {
+      end = options.end;
+    } else if (options.end instanceof DateAdapterBase) {
+      end = options.end.toDateTime();
+    } else if (DateAdapterBase.adapter.isDate(options.end)) {
+      end = DateAdapterBase.adapter.fromDate(options.end).toDateTime();
+    } else {
+      throw new RuleOptionError('"end" must be either be `undefined`, a `DateAdapter` instance, or an instance of the ' + 'date a DateAdapter is wrapping (e.g. `StandardDateAdapter` wraps a `Date`)');
+    }
+  }
 
-      if (stream.workingValue.duration > this.maxDuration) {
-        throw new MergeDurationOperatorError(`MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` + this.maxDuration);
-      }
+  if (options.duration !== undefined) {
+    if (!Number.isInteger(options.duration)) {
+      throw new RuleOptionError('"duration" expects a whole number');
+    }
 
-      yieldArgs = yield this.normalizeRunOutput(stream.workingValue);
+    if (options.duration <= 0) {
+      throw new RuleOptionError('"duration" must be greater than 0');
+    }
+  }
 
-      if (yieldArgs && yieldArgs.skipToDate && stream.workingValue.end.isBeforeOrEqual(yieldArgs.skipToDate)) {
-        throw new Error('A provided `skipToDate` option must be greater than the last yielded date ' + '(or smaller, in the case of reverse iteration)');
-      }
+  if (options.count !== undefined) {
+    if (!Number.isInteger(options.count)) {
+      throw new RuleOptionError('"count" must be a whole number');
+    }
 
-      stream.workingValue = stream.value;
-      stream.next();
+    if (options.count < 0) {
+      throw new RuleOptionError('"count" must be greater than 0');
     }
   }
 
-}
+  if (options.end !== undefined && options.count !== undefined) {
+    throw new RuleOptionError('"end" and "count" cannot both be present');
+  }
 
-class SplitDurationOperatorError extends Error {}
-/**
- * An operator function which takes an occurrence stream with
- * `hasDuration === true` and passes occurrences through a splitting
- * function. One usecase for this operator is to dynamically break up
- * occurrences with a large duration into several smaller occurrences.
- *
- * You must provide a `maxDuration` argument that represents the
- * maximum possible duration for a single occurrence. If this
- * duration is exceeded, a `SplitDurationOperatorError` will be
- * thrown.
- *
- * - For your convenience, you can globally set a default
- *   `SplitDurationOperator#maxDuration` via
- *   `RScheduleConfig.SplitDurationOperator.defaultMaxDuration`.
- *
- * Usage example:
- *
- * ```typescript
- * const MILLISECONDS_IN_HOUR = 1000 * 60 * 60;
- *
- * const splitFn = (date: DateTime) => {
- *   if (date.duration > MILLISECONDS_IN_HOUR) {
- *     const diff = date.duration! / 2;
- *
- *     return [
- *       date.set('duration', diff),
- *       date.add(diff, 'millisecond').set('duration', diff),
- *     ];
- *   }
- *
- *   return [date];
- * };
- *
- * const dates = new Dates({
- *   dates: [
- *     new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),
- *     new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 2 }),
- *   ],
- *   dateAdpter: StandardDateAdapter,
- * }).pipe(
- *   splitDuration({
- *     splitFn,
- *     maxDuration: MILLISECONDS_IN_HOUR * 1
- *   })
- * )
- *
- * expect(dates.occurrences().toArray()).toEqual([
- *   new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),
- *   new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),
- *   new StandardDateAdapter(new Date(2010, 10, 11, 14), { duration: MILLISECONDS_IN_HOUR * 1 }),
- * ])
- * ```
- */
+  return {
+    start,
+    end,
+    count: options.count,
+    duration: options.duration
+  };
+}
 
+function normalizeRuleOptions(recurrenceModules, options) {
+  const normOptions = normalizeDefaultOptions(options);
+  const startOptions = cloneJSON(options);
+  recurrenceModules.forEach(mod => {
+    mod.normalizeOptions(startOptions, normOptions);
+  });
+  Object.keys(normOptions).forEach(key => {
+    if (normOptions[key] === undefined) {
+      delete normOptions[key];
+    }
+  });
+  return normOptions;
+}
 
-function splitDuration(args) {
-  return options => new SplitDurationOperator(args, options);
+function cloneRuleOptions(options) {
+  const obj = cloneJSON(options);
+  obj.start = options.start;
+  if (options.end) obj.end = options.end;
+  return obj;
 }
 
-class SplitDurationOperator extends Operator {
-  constructor(args, config) {
-    super([], config);
-    this.splitFn = args.splitFn;
-    this.maxDuration = args.maxDuration;
+class RecurrenceRuleError extends Error {}
 
-    if (config.base && !config.base.hasDuration) {
-      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ArgumentError"]('Base stream provided to SplitDurationOperator does not have an associated duration. ' + 'The SplitDurationOperator can only be used with streams which have a duration.');
-    }
+class ValidDateTime {
+  constructor(date) {
+    this.date = date;
   }
-  /** Not actually used but necessary for IRunnable interface */
 
+}
 
-  set(_, value) {
-    return new SplitDurationOperator({
-      maxDuration: this.maxDuration,
-      splitFn: this.splitFn
-    }, Object.assign(Object.assign({}, this.config), {
-      base: this.config.base && this.config.base.set('timezone', value),
-      timezone: value
-    }));
+class InvalidDateTime {
+  constructor(date) {
+    this.date = date;
   }
 
-  *_run(args = {}) {
-    if (!this.config.base) return;
-    const reverse = args.reverse || false; // We want to find occurrences that end after the provided
-    // `start` time even if they begin before the provided `start`
-    // time. Because of this, we add `maxDuration` to
-    // the provided start time.
-
-    let checkFromStart = args.start;
-
-    if (args.start) {
-      checkFromStart = args.start.subtract(this.maxDuration, 'millisecond');
-    } // same goes for `end` time as with `start` time.
+}
 
+function recurrenceRulesReducer(rules) {
+  return iterator => rules.reduce((prev, curr) => {
+    const rule = curr.get(iterator);
+    if (rule) prev.push(rule);
+    return prev;
+  }, []);
+}
 
-    let checkFromEnd = args.end;
+class RecurrenceRulesIterator {
+  constructor(recurrenceRules, options, args) {
+    this.options = options;
+    this.args = args;
+    this.rules = [];
+    this.iterator = // prettier-ignore
+    this.options.count === undefined ? this.iterate() : this.args.reverse ? this.iterateWithReverseCount() : this.iterateWithCount();
+    this.options = Object.assign(Object.assign({}, cloneJSON(options)), {
+      start: options.start,
+      end: options.end
+    });
+    this.reverse = this.options.count === undefined && args.reverse || false;
 
-    if (args.end) {
-      checkFromEnd = args.end.add(this.maxDuration, 'millisecond');
-    }
+    const _this$normalizeDateTi = this.normalizeDateTimeArgs(args),
+          start = _this$normalizeDateTi.start,
+          end = _this$normalizeDateTi.end;
 
-    const stream = new IterableWrapper(this.config.base, Object.assign(Object.assign({}, args), {
-      start: checkFromStart,
-      end: checkFromEnd
-    }));
-    let yieldArgs;
-    const datesBucket = [];
+    if (options.count !== undefined) {
+      this.start = options.start;
+    } else if (start && options.start) {
+      this.start = start.isAfterOrEqual(options.start) ? start : options.start;
+    } else {
+      this.start = start || options.start;
+    }
 
-    while (!stream.done || datesBucket[0] && datesBucket[0][0]) {
-      /**
-       * Example:
-       * 10am - 2pm -> 10am - 12pm, 12pm - 2pm
-       * 11am - 3pm -> 11am - 1pm, 1pm - 3pm
-       * 2pm - 4pm -> 2pm - 3pm, 3pm - 4pm
-       */
-      if (!(datesBucket[0] && datesBucket[0][0])) {
-        // we're out of dates
-        datesBucket.push(this.splitDate(stream.value, reverse));
-        stream.next();
-      }
+    if (end && options.end) {
+      this.end = end.isBeforeOrEqual(options.end) ? end : options.end;
+    } else {
+      this.end = end || options.end;
+    }
 
-      while (!stream.done && (reverse ? datesBucket[0].some(date => date.isBeforeOrEqual(stream.value.end)) : datesBucket[0].some(date => date.isAfterOrEqual(stream.value)))) {
-        datesBucket.push(this.splitDate(stream.value, reverse));
-        stream.next();
-      }
+    if (this.args.reverse && !(options.count !== undefined || this.end)) {
+      throw new Error('When iterating in reverse, the rule must have an `end` or `count` ' + 'property or you must provide an `end` argument.');
+    }
 
-      let selectedDate = datesBucket[0] && datesBucket[0][0];
-      let bucketIndex = -1;
-      let selectedBucketIndex = 0;
-      let dateIndex = -1;
-      let selectedDateIndex = 0; // find the next date as well as its location in the datesBucket
+    this.isInfinite = !this.end && this.options.count === undefined;
+    this.hasDuration = !!this.options.duration;
+    this.rules = Array.isArray(recurrenceRules) ? recurrenceRules : recurrenceRules(this);
+  }
 
-      for (const bucket of datesBucket) {
-        bucketIndex++;
-        dateIndex = -1;
+  [Symbol.iterator]() {
+    return this.iterator;
+  }
 
-        for (const date of bucket) {
-          dateIndex++;
-          let dateShouldComeNext;
+  next(args) {
+    return this.iterator.next(args);
+  }
+  /**
+   * In the pipe controller, we have an extra level of indirection with
+   * the `run()` and `iterate()` methods. The `iterate()` method is the
+   * method which actually runs the logic in the pipes. If we didn't
+   * need to account for the `count` property of a rule, we would *only*
+   * need the iterate method... so much simpler. But we do need to account
+   * for rules with a `count` property.
+   *
+   * Rules with a `count` property need to begin iteration at the beginning
+   * because the `count` is always from the rule's start time. So if someone
+   * passes in a new start time as an argument to a rule with `count`, we
+   * need to secretly iterate from the beginning, tracking the number of
+   * iterations, and then only start yielding dates when we reach the section
+   * the user cares about (or, if we hit our `count` quota, cancel iterating).
+   *
+   * Additionally, we need to handle iterating in reverse. In this case, we build
+   * up a cache of dates between the rule's start time and the reverse iteration
+   * start date. Once we hit the reverse iteration start date, we start
+   * yielding dates in the cache, in reverse order.
+   *
+   * In general, I imagine the count number, if used, will be small. But a large
+   * count will definitely have a negative performance affect. I don't think
+   * there's anything to be done about this.
+   */
 
-          if (reverse) {
-            dateShouldComeNext = date.isAfter(selectedDate) || date.isEqual(selectedDate) && date.duration > selectedDate.duration;
-          } else {
-            dateShouldComeNext = date.isBefore(selectedDate) || date.isEqual(selectedDate) && date.duration < selectedDate.duration;
-          }
 
-          if (dateShouldComeNext) {
-            selectedDate = date;
-            selectedBucketIndex = bucketIndex;
-            selectedDateIndex = dateIndex;
-            break;
-          }
-        }
-      }
+  *iterateWithReverseCount() {
+    const dates = Array.from(this.iterateWithCount()).reverse();
+    let yieldArgs;
+    const dateCache = dates.slice();
+    let date = dateCache.shift();
 
-      datesBucket[selectedBucketIndex].splice(selectedDateIndex, 1);
+    while (date) {
+      if (yieldArgs && yieldArgs.skipToDate && date.isAfter(yieldArgs.skipToDate)) {
+        date = dateCache.shift();
+        continue;
+      }
 
-      if (datesBucket[selectedBucketIndex].length === 0) {
-        datesBucket.splice(selectedBucketIndex, 1);
-      } // If we've been yieldedArgs from the last cycle, check to see
-      // that the selectedDate honors the `skipToDate` requirement
-      // if not, discard this selectedDate
+      yieldArgs = yield date;
 
+      if (yieldArgs && yieldArgs.skipToDate && yieldArgs.skipToDate.isAfterOrEqual(date)) {
+        throw new Error('A provided `skipToDate` option must be greater than the last yielded date ' + '(or smaller, in the case of reverse iteration)');
+      }
 
-      if (yieldArgs && yieldArgs.skipToDate && selectedDate && !datePastEnd(selectedDate, args) && !datePastSkipToDate(selectedDate, yieldArgs.skipToDate, args)) {
-        continue;
-      } // because we subtracted `maxDuration` to the base iterator's start time,
-      // check to make sure the selectedDate we are about to yield should
-      // actually be yielded (it may be before the provided `start` time).
-      // If not, discard the selectedDate.
+      date = dateCache.shift();
+    }
 
+    return undefined;
+  }
 
-      if (args.start && selectedDate.end.isBefore(args.start)) {
-        if (reverse) break;
-        continue;
-      } // because we added `maxDuration` to the base iterator's end time,
-      // check to make sure the selectedDate we are about to yield should
-      // actually be yielded (it may be after the provided `end` time).
-      // If not, end iteration.
+  *iterateWithCount() {
+    if (this.options.count === 0) return;
+    const iterable = this.iterate();
+    const start = this.args.start || this.start;
+    let date = iterable.next().value;
+    let index = 1;
+    let yieldArgs;
 
+    while (date && index <= this.options.count) {
+      index++;
 
-      if (args.end && selectedDate.isAfter(args.end)) {
-        if (reverse) continue;
-        break;
+      if (date.isBefore(start)) {
+        date = iterable.next().value;
+        continue;
       }
 
-      if (selectedDate.duration > this.maxDuration) {
-        throw new SplitDurationOperatorError(`SplitDurationOperatorError: Occurrence duration exceeded maxDuration of ` + this.maxDuration);
+      if (yieldArgs && yieldArgs.skipToDate && date.isBefore(yieldArgs.skipToDate)) {
+        date = iterable.next().value;
+        continue;
       }
 
-      yieldArgs = yield this.normalizeRunOutput(selectedDate);
+      yieldArgs = yield date;
 
-      if (yieldArgs && yieldArgs.skipToDate && (args.reverse ? selectedDate.isBeforeOrEqual(yieldArgs.skipToDate) : selectedDate.isAfterOrEqual(yieldArgs.skipToDate))) {
+      if (yieldArgs && yieldArgs.skipToDate && yieldArgs.skipToDate.isBeforeOrEqual(date)) {
         throw new Error('A provided `skipToDate` option must be greater than the last yielded date ' + '(or smaller, in the case of reverse iteration)');
       }
-    }
-  }
 
-  calculateIsInfinite() {
-    return !!(this.config.base && this.config.base.isInfinite);
-  }
+      date = iterable.next().value;
+    }
 
-  calculateHasDuration() {
-    return true;
+    return undefined;
   }
 
-  splitDate(date, reverse) {
-    const dates = this.splitFn(date);
-    let valid;
-
-    if (dates.length === 0) {
-      valid = false;
-    } else if (dates.length === 1) {
-      valid = date.duration === dates[0].duration;
-    } else {
-      valid = date.duration === dates.reduce((prev, curr) => prev + curr.duration, 0);
-    }
+  *iterate() {
+    let startingDate = this.start;
+    if (this.reverse) startingDate = this.end;
+    let date = this.nextDate(startingDate);
 
-    if (!valid) {
-      throw new Error('The provided SplitDurationOperator split function ' + 'must return an array of DateTimes with length > 0 ' + 'where the total duration of the new dates equals the duration of ' + 'the original date.');
-    }
+    while (date) {
+      const args = yield this.normalizeRunOutput(date);
 
-    dates.sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateTimeSortComparer"]);
+      if (args && args.skipToDate) {
+        if (this.reverse ? args.skipToDate.isAfterOrEqual(date) : args.skipToDate.isBeforeOrEqual(date)) {
+          // We cannot consistently skip backwards because after an iterator is "done"
+          // it always returns undefined and you cannot reset it. Theoretically, it would be
+          // fine to skip backwards if the iterator wasn't already "done", but this
+          // would be prone to user error so we simply disallow skipping backwards altogether.
+          throw new Error('A provided `skipToDate` option must be greater than the last yielded date ' + '(or smaller, in the case of reverse iteration)');
+        }
 
-    if (reverse) {
-      dates.reverse();
+        date = this.nextDate(args.skipToDate);
+      } else {
+        date = this.nextDate(this.reverse ? date.subtract(1, 'millisecond') : date.add(1, 'millisecond'));
+      }
     }
 
-    return dates;
+    return undefined;
   }
+  /**
+   * Loops through the recurrence rules until a valid date is found.
+   */
 
-}
-
-function datePastEnd(date, options) {
-  return !!(options.reverse ? options.start && date.isBefore(options.start) : options.end && date.isAfter(options.end));
-}
-
-function datePastSkipToDate(date, skipToDate, options) {
-  return !!(options.reverse ? skipToDate.isAfterOrEqual(date) : skipToDate.isBeforeOrEqual(date));
-}
-
-
-
-/***/ }),
-
-/***/ "./node_modules/@rschedule/core/es2015/main.js":
-/*!*****************************************************!*\
-  !*** ./node_modules/@rschedule/core/es2015/main.js ***!
-  \*****************************************************/
-/*! exports provided: ArgumentError, DateAdapter, DateAdapterBase, DateTime, InfiniteLoopError, InvalidDateAdapterError, InvalidDateTime, InvalidDateTimeError, RecurrenceRuleError, RecurrenceRulesIterator, RuleOptionError, ValidDateTime, cloneJSON, cloneRuleOptions, dateInputToDateAdapter, dateInputToDateTime, dateTimeSortComparer, freqToGranularity, getDaysInYear, getDifferenceBetweenWeekdays, isLeapYear, normalizeDateTimeTimezone, normalizeRuleOptions, numberSortComparer, orderedWeekdays, recurrenceRulesReducer, uniqDateTimes */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ArgumentError", function() { return ArgumentError; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DateAdapter", function() { return DateAdapter; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DateAdapterBase", function() { return DateAdapterBase; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DateTime", function() { return DateTime; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InfiniteLoopError", function() { return InfiniteLoopError; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InvalidDateAdapterError", function() { return InvalidDateAdapterError; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InvalidDateTime", function() { return InvalidDateTime; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InvalidDateTimeError", function() { return InvalidDateTimeError; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RecurrenceRuleError", function() { return RecurrenceRuleError; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RecurrenceRulesIterator", function() { return RecurrenceRulesIterator; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RuleOptionError", function() { return RuleOptionError; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ValidDateTime", function() { return ValidDateTime; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cloneJSON", function() { return cloneJSON; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "cloneRuleOptions", function() { return cloneRuleOptions; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dateInputToDateAdapter", function() { return dateInputToDateAdapter; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dateInputToDateTime", function() { return dateInputToDateTime; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dateTimeSortComparer", function() { return dateTimeSortComparer; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "freqToGranularity", function() { return freqToGranularity; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDaysInYear", function() { return getDaysInYear; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDifferenceBetweenWeekdays", function() { return getDifferenceBetweenWeekdays; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isLeapYear", function() { return isLeapYear; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "normalizeDateTimeTimezone", function() { return normalizeDateTimeTimezone; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "normalizeRuleOptions", function() { return normalizeRuleOptions; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "numberSortComparer", function() { return numberSortComparer; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "orderedWeekdays", function() { return orderedWeekdays; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "recurrenceRulesReducer", function() { return recurrenceRulesReducer; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uniqDateTimes", function() { return uniqDateTimes; });
-class InvalidDateAdapterError extends Error {}
 
-let dateAdapterConfig;
+  nextDate(start) {
+    let result = this.runRules(start.set('generators', []));
+    if (this.isDatePastEnd(result.date)) return null;
+    let index = 0;
 
-class DateAdapterBase {
-  constructor(_date, options) {
-    this.duration = options && options.duration || 0;
-    this.generators = options && options.generators && options.generators.slice() || [];
+    while (result instanceof InvalidDateTime && index < 50) {
+      result = this.runRules(result.date);
+      if (this.isDatePastEnd(result.date)) return null;
+      index++;
+    }
 
-    if (!Number.isInteger(this.duration) || this.duration < 0) {
-      throw new InvalidDateAdapterError('duration must be a non-negative integer');
+    if (result instanceof InvalidDateTime) {
+      throw new RecurrenceRuleError(`Failed to find a matching occurrence in ${index} iterations. ` + `Last iterated date: "${result.date.toISOString()}"`);
     }
-  }
 
-  static set adapter(value) {
-    if (dateAdapterConfig) {
-      throw new Error(`"${dateAdapterConfig.name}" has already been configured.`);
+    if (this.reverse ? start.isBefore(result.date) : start.isAfter(result.date)) {
+      throw new RecurrenceRuleError('An error occurred in a recurrence rule. If this happened using ' + 'the rSchedule provided recurrence rules, you should ' + 'open an issue in the rSchedule repo. The maintainer is going to ' + 'want to know how to recreate the error.');
     }
 
-    dateAdapterConfig = value;
+    return result.date;
   }
+  /**
+   * Performs one run of the recurrence rules and returns the result.
+   * It's a slightly optimized reducer function.
+   */
 
-  static get adapter() {
-    if (!dateAdapterConfig) {
-      throw new Error('No date adapter has been configured. See rSchedule docs.');
-    }
 
-    return dateAdapterConfig;
-  }
+  runRules(start) {
+    let result = new ValidDateTime(start);
 
-  static isDate(_object) {
-    throw unimplementedError('isDate()');
-  }
+    for (const rule of this.rules) {
+      if (result instanceof InvalidDateTime) {
+        return result;
+      }
 
-  static fromDate(_date, _options) {
-    throw unimplementedError('fromDate()');
+      result = rule.run(result.date);
+    }
+
+    return result;
   }
 
-  static fromJSON(_json) {
-    throw unimplementedError('fromJSON()');
+  isDatePastEnd(date) {
+    return this.reverse ? date.isBefore(this.start) : this.end && date.isAfter(this.end);
   }
 
-  static fromDateTime(_datetime) {
-    throw unimplementedError('fromDateTime()');
+  normalizeRunOutput(date) {
+    return this.hasDuration ? date.set('duration', this.options.duration) : date;
   }
 
-  toDateTime() {
-    const date = DateTime.fromJSON(Object.assign(Object.assign({}, this.toJSON()), {
-      generators: this.generators
-    }));
-    return date;
+  normalizeDateTimeArgs(args) {
+    return {
+      start: args.start && normalizeDateTimeTimezone(args.start, this.options.start.timezone),
+      end: args.end && normalizeDateTimeTimezone(args.end, this.options.start.timezone)
+    };
   }
 
 }
 
-DateAdapterBase.hasTimezoneSupport = false;
-
-function unimplementedError(name) {
-  return new Error(`You must implement the "${name}" method for this DateAdapter class`);
-}
 
-var DateAdapter;
 
-(function (DateAdapter) {
-  DateAdapter.WEEKDAYS = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];
-  DateAdapter.MILLISECONDS_IN_SECOND = 1000;
-  DateAdapter.MILLISECONDS_IN_MINUTE = DateAdapter.MILLISECONDS_IN_SECOND * 60;
-  DateAdapter.MILLISECONDS_IN_HOUR = DateAdapter.MILLISECONDS_IN_MINUTE * 60;
-  DateAdapter.MILLISECONDS_IN_DAY = DateAdapter.MILLISECONDS_IN_HOUR * 24;
-  DateAdapter.MILLISECONDS_IN_WEEK = DateAdapter.MILLISECONDS_IN_DAY * 7;
-})(DateAdapter || (DateAdapter = {}));
+/***/ }),
 
-class InvalidDateTimeError extends Error {}
+/***/ "./node_modules/@rschedule/core/es2015/rules.js":
+/*!******************************************************!*\
+  !*** ./node_modules/@rschedule/core/es2015/rules.js ***!
+  \******************************************************/
+/*! exports provided: ByDayOfMonthRule, ByDayOfMonthRuleModule, ByDayOfWeekRule, ByDayOfWeekRuleModule, ByHourOfDayRule, ByHourOfDayRuleModule, ByMillisecondOfSecondRule, ByMillisecondOfSecondRuleModule, ByMinuteOfHourRule, ByMinuteOfHourRuleModule, ByMonthOfYearRule, ByMonthOfYearRuleModule, BySecondOfMinuteRule, BySecondOfMinuteRuleModule, FrequencyRule, FrequencyRuleModule, ICAL_RULES, RevByDayOfMonthRule, RevByDayOfWeekRule, RevByHourOfDayRule, RevByMillisecondOfSecondRule, RevByMinuteOfHourRule, RevByMonthOfYearRule, RevBySecondOfMinuteRule, RevFrequencyRule, getPrevWeekdaysOfMonth, getPrevWeekdaysOfYear */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
-class DateTime {
-  constructor(date, timezone, duration, generators) {
-    this.date = new Date(date);
-    this.timezone = timezone || null;
-    this.duration = duration || 0;
-    this.generators = generators && generators.slice() || [];
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByDayOfMonthRule", function() { return ByDayOfMonthRule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByDayOfMonthRuleModule", function() { return ByDayOfMonthRuleModule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByDayOfWeekRule", function() { return ByDayOfWeekRule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByDayOfWeekRuleModule", function() { return ByDayOfWeekRuleModule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByHourOfDayRule", function() { return ByHourOfDayRule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByHourOfDayRuleModule", function() { return ByHourOfDayRuleModule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByMillisecondOfSecondRule", function() { return ByMillisecondOfSecondRule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByMillisecondOfSecondRuleModule", function() { return ByMillisecondOfSecondRuleModule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByMinuteOfHourRule", function() { return ByMinuteOfHourRule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByMinuteOfHourRuleModule", function() { return ByMinuteOfHourRuleModule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByMonthOfYearRule", function() { return ByMonthOfYearRule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByMonthOfYearRuleModule", function() { return ByMonthOfYearRuleModule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BySecondOfMinuteRule", function() { return BySecondOfMinuteRule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BySecondOfMinuteRuleModule", function() { return BySecondOfMinuteRuleModule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FrequencyRule", function() { return FrequencyRule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FrequencyRuleModule", function() { return FrequencyRuleModule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ICAL_RULES", function() { return ICAL_RULES; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RevByDayOfMonthRule", function() { return RevByDayOfMonthRule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RevByDayOfWeekRule", function() { return RevByDayOfWeekRule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RevByHourOfDayRule", function() { return RevByHourOfDayRule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RevByMillisecondOfSecondRule", function() { return RevByMillisecondOfSecondRule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RevByMinuteOfHourRule", function() { return RevByMinuteOfHourRule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RevByMonthOfYearRule", function() { return RevByMonthOfYearRule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RevBySecondOfMinuteRule", function() { return RevBySecondOfMinuteRule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RevFrequencyRule", function() { return RevFrequencyRule; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPrevWeekdaysOfMonth", function() { return getPrevWeekdaysOfMonth; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPrevWeekdaysOfYear", function() { return getPrevWeekdaysOfYear; });
+/* harmony import */ var _rschedule_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @rschedule/core */ "./node_modules/@rschedule/core/es2015/main.js");
 
-    if (!Number.isInteger(this.duration) || this.duration < 0) {
-      throw new InvalidDateTimeError('duration must be a non-negative integer');
-    }
 
-    this.assertIsValid();
-  } // /**
-  //  * Similar to `Array.isArray()`, `isInstance()` provides a surefire method
-  //  * of determining if an object is a `DateTime` by checking against the
-  //  * global symbol registry.
-  //  */
-  // static isInstance(object: any): object is DateTime {
-  //   return !!(object && object[DATETIME_ID]);
-  // }
+class RecurrenceRule {
+  constructor(processor) {
+    this.processor = processor;
+    this.start = processor.start;
+    this.end = processor.end;
+    this.options = processor.options;
+  }
 
+}
 
-  static fromJSON(json) {
-    const date = new Date(Date.UTC(json.year, json.month - 1, json.day, json.hour, json.minute, json.second, json.millisecond));
-    return new DateTime(date, json.timezone, json.duration, json.generators);
+class FrequencyRule extends RecurrenceRule {
+  constructor(processor, initDate) {
+    super(processor);
+    this.initDate = initDate;
+    this.intervalUnit = Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["freqToGranularity"])(this.options.frequency);
+    this.firstIntervalStartDate = this.normalizedStartDate(this.options.start);
+    this.intervalStartDate = this.firstIntervalStartDate;
+    this.intervalEndDate = this.normalizedEndDate(this.firstIntervalStartDate);
+    this.skipToInterval(this.initDate);
   }
 
-  static fromDateAdapter(adapter) {
-    return DateTime.fromJSON(Object.assign(Object.assign({}, adapter.toJSON()), {
-      generators: adapter.generators
-    }));
+  run(date) {
+    return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ValidDateTime"](date));
   }
-  /**
-   * Returns `undefined` if `duration` is `0`. Else returns
-   * the `end` date.
-   */
-
-
-  get end() {
-    if (!this.duration) return;
-    if (this._end) return this._end;
-    this._end = this.add(this.duration, 'millisecond');
-    return this._end;
-  } // While we constrain the argument to be another DateAdapter in typescript
-  // we handle the case of someone passing in another type of object in javascript
 
+  validateDate(arg) {
+    const date = arg.date;
 
-  isEqual(object) {
-    if (!object) {
-      return false;
+    if (arg instanceof _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ValidDateTime"] && this.dateIsWithinInterval(date)) {
+      return arg;
     }
 
-    assertSameTimeZone(this, object);
-    return this.valueOf() === object.valueOf();
+    this.skipToInterval(date);
+    return new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"]( // if the interval is 1, date will always be within the interval
+    this.dateIsWithinInterval(date) ? date : this.setToCurrentInterval());
   }
 
-  isBefore(object) {
-    assertSameTimeZone(this, object);
-    return this.valueOf() < object.valueOf();
+  setToCurrentInterval() {
+    return this.intervalStartDate;
   }
 
-  isBeforeOrEqual(object) {
-    assertSameTimeZone(this, object);
-    return this.valueOf() <= object.valueOf();
-  }
+  normalizedStartDate(date) {
+    if (this.options.frequency === 'WEEKLY') {
+      return date.granularity('week', {
+        weekStart: this.options.weekStart
+      });
+    }
 
-  isAfter(object) {
-    assertSameTimeZone(this, object);
-    return this.valueOf() > object.valueOf();
+    return date.granularity(this.intervalUnit);
   }
 
-  isAfterOrEqual(object) {
-    assertSameTimeZone(this, object);
-    return this.valueOf() >= object.valueOf();
-  }
+  normalizedEndDate(start) {
+    switch (this.options.frequency) {
+      case 'YEARLY':
+        return start.add(1, 'year');
 
-  isOccurring(object) {
-    if (!this.duration) {
-      throw new Error('DateTime#isOccurring() is only applicable to DateTimes with durations');
-    }
+      case 'MONTHLY':
+        return start.add(1, 'month');
 
-    assertSameTimeZone(this, object);
-    return object.isAfterOrEqual(this) && object.isBeforeOrEqual(this.add(this.duration, 'millisecond'));
-  }
+      case 'WEEKLY':
+        return start.add(1, 'week');
 
-  add(amount, unit) {
-    switch (unit) {
-      case 'generator':
-        {
-          const generators = this.generators.slice();
-          generators.unshift(amount);
-          return new DateTime(this.date, this.timezone, this.duration, generators);
-        }
+      case 'DAILY':
+        return start.add(1, 'day');
 
-      case 'year':
-        return this.forkDateTime(addUTCYears(this.date, amount));
+      case 'HOURLY':
+        return start.add(1, 'hour');
 
-      case 'month':
-        return this.forkDateTime(addUTCMonths(this.date, amount));
+      case 'MINUTELY':
+        return start.add(1, 'minute');
 
-      case 'week':
-        return this.forkDateTime(addUTCWeeks(this.date, amount));
+      case 'SECONDLY':
+        return start.add(1, 'second');
 
-      case 'day':
-        return this.forkDateTime(addUTCDays(this.date, amount));
-
-      case 'hour':
-        return this.forkDateTime(addUTCHours(this.date, amount));
-
-      case 'minute':
-        return this.forkDateTime(addUTCMinutes(this.date, amount));
-
-      case 'second':
-        return this.forkDateTime(addUTCSeconds(this.date, amount));
-
-      case 'millisecond':
-        return this.forkDateTime(addUTCMilliseconds(this.date, amount));
+      case 'MILLISECONDLY':
+        return start.add(1, 'millisecond');
 
       default:
-        throw new Error('Invalid unit provided to `DateTime#add`');
+        throw new Error(`Unknown frequency ${this.options.frequency}`);
     }
   }
 
-  subtract(amount, unit) {
-    switch (unit) {
-      case 'year':
-        return this.forkDateTime(subUTCYears(this.date, amount));
-
-      case 'month':
-        return this.forkDateTime(subUTCMonths(this.date, amount));
-
-      case 'week':
-        return this.forkDateTime(subUTCWeeks(this.date, amount));
-
-      case 'day':
-        return this.forkDateTime(subUTCDays(this.date, amount));
-
-      case 'hour':
-        return this.forkDateTime(subUTCHours(this.date, amount));
-
-      case 'minute':
-        return this.forkDateTime(subUTCMinutes(this.date, amount));
-
-      case 'second':
-        return this.forkDateTime(subUTCSeconds(this.date, amount));
-
-      case 'millisecond':
-        return this.forkDateTime(subUTCMilliseconds(this.date, amount));
-
-      default:
-        throw new Error('Invalid unit provided to `DateTime#subtract`');
-    }
+  skipToInterval(date) {
+    const amount = this.intervalDifference(date);
+    this.intervalStartDate = this.firstIntervalStartDate.add(amount, this.intervalUnit);
+    this.intervalEndDate = this.normalizedEndDate(this.intervalStartDate);
   }
 
-  get(unit) {
-    switch (unit) {
-      case 'year':
-        return this.date.getUTCFullYear();
-
-      case 'month':
-        return this.date.getUTCMonth() + 1;
-
-      case 'yearday':
-        return getUTCYearDay(this.date);
-
-      case 'weekday':
-        return DateAdapter.WEEKDAYS[this.date.getUTCDay()];
-
-      case 'day':
-        return this.date.getUTCDate();
-
-      case 'hour':
-        return this.date.getUTCHours();
-
-      case 'minute':
-        return this.date.getUTCMinutes();
-
-      case 'second':
-        return this.date.getUTCSeconds();
-
-      case 'millisecond':
-        return this.date.getUTCMilliseconds();
+  dateIsWithinInterval(date) {
+    return this.intervalStartDate.isBeforeOrEqual(date) && this.intervalEndDate.isAfter(date);
+  }
 
-      default:
-        throw new Error('Invalid unit provided to `DateTime#set`');
-    }
+  intervalDifference(date) {
+    return intervalDifferenceBetweenDates({
+      first: this.firstIntervalStartDate,
+      second: date,
+      unit: this.intervalUnit,
+      interval: this.options.interval,
+      weekStart: this.options.weekStart,
+      direction: 'after'
+    });
   }
 
-  set(unit, value) {
-    if (unit === 'duration') {
-      return new DateTime(this.date, this.timezone, value, this.generators);
-    }
+}
+/**
+ * Given the frequency (unit) and interval, this function finds
+ * how many jumps forward the first date needs in order to equal
+ * or exceed the second date.
+ *
+ * For example:
+ *
+ * 1. Unit is daily and interval is 1. The second date is 3 days
+ *    after the first. This will return 3.
+ * 2. Unit is yearly and interval is 1. The second date is 3 days
+ *    after the first. This will return 0.
+ * 3. Unit is yearly and interval is 3. The second date is 4 years
+ *    after the first. This will return 6.
+ */
 
-    if (unit === 'generators') {
-      return new DateTime(this.date, this.timezone, this.duration, value);
-    }
 
-    let date = new Date(this.date);
+function intervalDifferenceBetweenDates({
+  first,
+  second,
+  unit,
+  interval,
+  weekStart,
+  direction
+}) {
+  let difference = (() => {
+    let intervalDuration;
+    let months;
 
     switch (unit) {
       case 'year':
-        date.setUTCFullYear(value);
-        break;
+        months = (second.get('year') - first.get('year')) * 12;
+        months = months + second.get('month') - first.get('month');
+        return Math.floor(months / 12);
 
       case 'month':
-        {
-          // If the current day of the month
-          // is greater than days in the month we are moving to, we need to also
-          // set the day to the end of that month.
-          const length = monthLength(value, date.getUTCFullYear());
-          const day = date.getUTCDate();
-
-          if (day > length) {
-            date.setUTCDate(1);
-            date.setUTCMonth(value);
-            date = subUTCDays(date, 1);
-          } else {
-            date.setUTCMonth(value - 1);
-          }
+        months = (second.get('year') - first.get('year')) * 12;
+        months = months + second.get('month') - first.get('month');
+        return months;
 
-          break;
-        }
+      case 'week':
+        first = first.granularity('week', {
+          weekStart
+        });
+        intervalDuration = _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapter"].MILLISECONDS_IN_WEEK;
+        break;
 
       case 'day':
-        date.setUTCDate(value);
+        intervalDuration = _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapter"].MILLISECONDS_IN_DAY;
         break;
 
       case 'hour':
-        date.setUTCHours(value);
+        intervalDuration = _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapter"].MILLISECONDS_IN_HOUR;
         break;
 
       case 'minute':
-        date.setUTCMinutes(value);
+        intervalDuration = _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapter"].MILLISECONDS_IN_MINUTE;
         break;
 
       case 'second':
-        date.setUTCSeconds(value);
+        intervalDuration = _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapter"].MILLISECONDS_IN_SECOND;
         break;
 
       case 'millisecond':
-        date.setUTCMilliseconds(value);
+        intervalDuration = 1;
         break;
 
       default:
-        throw new Error('Invalid unit provided to `DateTime#set`');
-    }
-
-    return this.forkDateTime(date);
-  }
-
-  granularity(granularity, opt = {}) {
-    let date = this.forkDateTime(this.date);
-
-    switch (granularity) {
-      case 'year':
-        date = date.set('month', 1);
-
-      case 'month':
-        date = date.set('day', 1);
-        break;
-
-      case 'week':
-        date = setDateToStartOfWeek(date, opt.weekStart);
+        throw new Error('Unexpected `unit` value');
     }
 
-    switch (granularity) {
-      case 'year':
-      case 'month':
-      case 'week':
-      case 'day':
-        date = date.set('hour', 0);
+    const diff = second.valueOf() - first.valueOf();
+    return Math.floor(diff / intervalDuration);
+  })();
 
-      case 'hour':
-        date = date.set('minute', 0);
+  const fn = direction === 'after' ? Math.ceil : Math.floor;
+  difference = fn(difference / interval) * interval;
+  return difference;
+}
 
-      case 'minute':
-        date = date.set('second', 0);
+class RevFrequencyRule extends FrequencyRule {
+  setToCurrentInterval() {
+    return this.intervalEndDate.subtract(1, 'millisecond');
+  }
 
-      case 'second':
-        date = date.set('millisecond', 0);
+  intervalDifference(date) {
+    return intervalDifferenceBetweenDates({
+      first: this.firstIntervalStartDate,
+      second: date,
+      unit: this.intervalUnit,
+      interval: this.options.interval,
+      weekStart: this.options.weekStart,
+      direction: 'before'
+    });
+  }
 
-      case 'millisecond':
-        return date;
+}
 
-      default:
-        throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);
+const FREQUENCIES = ['MILLISECONDLY', 'SECONDLY', 'MINUTELY', 'HOURLY', 'DAILY', 'WEEKLY', 'MONTHLY', 'YEARLY'];
+const FrequencyRuleModule = {
+  name: 'FrequencyRule',
+  get: processor => {
+    if (processor.options.byMillisecondOfSecond !== undefined || processor.options.frequency !== 'MILLISECONDLY') {
+      return null;
     }
-  }
 
-  endGranularity(granularity, opt = {}) {
-    let date = this.forkDateTime(this.date);
-
-    switch (granularity) {
-      case 'year':
-        date = date.set('month', 12);
+    if (processor.reverse) return new RevFrequencyRule(processor, processor.end);
+    return new FrequencyRule(processor, processor.start);
+  },
+  normalizeOptions: (options, norm) => {
+    if (!FREQUENCIES.includes(options.frequency)) {
+      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"](`"frequency" must be one of ${JSON.stringify(FREQUENCIES)}`);
+    }
 
-      case 'month':
-        date = date.set('day', monthLength(date.get('month'), date.get('year')));
-        break;
+    if (options.interval !== undefined) {
+      if (!Number.isInteger(options.interval)) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"interval" expects a whole number');
+      }
 
-      case 'week':
-        date = setDateToEndOfWeek(date, opt.weekStart);
+      if (options.interval < 1) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"interval" cannot be less than 1');
+      }
     }
 
-    switch (granularity) {
-      case 'year':
-      case 'month':
-      case 'week':
-      case 'day':
-        date = date.set('hour', 23);
+    if (options.weekStart !== undefined) {
+      if (!_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapter"].WEEKDAYS.includes(options.weekStart)) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"](`"weekStart" must be one of ${JSON.stringify(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapter"].WEEKDAYS)}`);
+      }
+    }
 
-      case 'hour':
-        date = date.set('minute', 59);
+    norm.frequency = options.frequency;
+    norm.interval = options.interval || 1;
+    norm.weekStart = options.weekStart || 'MO';
+  },
+  deps: () => [FrequencyRuleModule]
+};
 
-      case 'minute':
-        date = date.set('second', 59);
+function ruleOptionFilled(option) {
+  return Array.isArray(option) && option.length > 0;
+}
 
-      case 'second':
-        date = date.set('millisecond', 999);
+const freqCache = new WeakMap();
 
-      case 'millisecond':
-        return date;
+class RecurrenceRuleBase extends RecurrenceRule {
+  constructor(processor) {
+    super(processor);
 
-      default:
-        throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);
+    if (!freqCache.has(this.processor)) {
+      freqCache.set(this.processor, new FrequencyRule(processor, processor.start));
     }
-  }
 
-  toISOString() {
-    return this.date.toISOString();
+    this.frequency = freqCache.get(this.processor);
   }
 
-  toDateTime() {
-    return this;
+  validateDate(arg) {
+    return this.frequency.validateDate(arg);
   }
 
-  toJSON() {
-    const json = {
-      timezone: this.timezone,
-      year: this.get('year'),
-      month: this.get('month'),
-      day: this.get('day'),
-      hour: this.get('hour'),
-      minute: this.get('minute'),
-      second: this.get('second'),
-      millisecond: this.get('millisecond')
-    };
-
-    if (this.duration) {
-      json.duration = this.duration;
-    }
-
-    return json;
-  }
+}
 
-  valueOf() {
-    return this.date.valueOf();
-  }
+class RevRecurrenceRuleBase extends RecurrenceRule {
+  constructor(processor) {
+    super(processor);
 
-  assertIsValid() {
-    if (isNaN(this.valueOf())) {
-      throw new InvalidDateTimeError('DateTime has invalid date.');
+    if (!freqCache.has(this.processor)) {
+      freqCache.set(this.processor, new RevFrequencyRule(processor, processor.end));
     }
 
-    return true;
-  }
-
-  forkDateTime(date) {
-    return new DateTime(date, this.timezone, this.duration, this.generators);
+    this.frequency = freqCache.get(this.processor);
   }
 
-}
-
-function assertSameTimeZone(x, y) {
-  if (x.timezone !== y.timezone) {
-    throw new InvalidDateTimeError('Attempted to compare a datetime to another date in a different timezone: ' + JSON.stringify(x) + ' and ' + JSON.stringify(y));
+  validateDate(arg) {
+    return this.frequency.validateDate(arg);
   }
 
-  return true;
-}
-
-function setDateToStartOfWeek(date, wkst) {
-  const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));
-  return date.subtract(index, 'day');
 }
+/**
+ * Contains shared logic for ByHourOfDay, ByMinuteOfHour,
+ * BySecondOfMinute, and ByMillisecondOfSecond reverse rule pipes
+ */
 
-function setDateToEndOfWeek(date, wkst) {
-  const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));
-  return date.add(6 - index, 'day');
-}
 
-function dateTimeSortComparer(a, b) {
-  if (a.isAfter(b)) return 1;
-  if (a.isBefore(b)) return -1;
+class RevByTimeOfUnitRule extends RevRecurrenceRuleBase {
+  run(date) {
+    // e.g. const currentTime = date.get('hour');
+    const currentTime = date.get(this.granularity); // e.g. for (const time of this.options.byHourOfDay) {
 
-  if (a.duration && b.duration) {
-    if (a.duration > b.duration) return 1;
-    if (a.duration < b.duration) return -1;
-  }
+    for (const time of this.option) {
+      if (currentTime < time) continue;
 
-  return 0;
-}
+      if (currentTime === time) {
+        return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ValidDateTime"](date));
+      } // e.g. return this.nextValidDate(args, date.endGranularity('day').set('hour', time));
 
-function uniqDateTimes(dates) {
-  return Array.from(new Map(dates.map(date => [date.toISOString(), date])).values());
-}
 
-function orderedWeekdays(wkst = 'SU') {
-  const wkdays = DateAdapter.WEEKDAYS.slice();
-  let index = wkdays.indexOf(wkst);
+      return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](date.endGranularity(this.baseGranularity).set(this.granularity, time)));
+    }
 
-  while (index !== 0) {
-    shiftArray(wkdays);
-    index--;
+    return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](date // e.g. .endGranularity('day')
+    .endGranularity(this.baseGranularity) // e.g. .subtract(1, 'day')
+    .subtract(1, this.baseGranularity) // e.g. .set('hour', this.options.byHourOfDay[0]);
+    .set(this.granularity, this.option[0])));
   }
 
-  return wkdays;
 }
 
-function shiftArray(array, from = 'first') {
-  if (array.length === 0) {
-    return array;
-  } else if (from === 'first') {
-    array.push(array.shift());
-  } else {
-    array.unshift(array.pop());
+class RevByMillisecondOfSecondRule extends RevByTimeOfUnitRule {
+  constructor() {
+    super(...arguments);
+    this.baseGranularity = 'second';
+    this.granularity = 'millisecond';
+    this.option = this.options.byMillisecondOfSecond.slice().reverse();
   }
 
-  return array;
-}
-
-function getDifferenceBetweenWeekdays(x, y) {
-  if (x === y) return 0;
-  const result = DateAdapter.WEEKDAYS.indexOf(x) - DateAdapter.WEEKDAYS.indexOf(y);
-  return result > 0 ? 7 - result : Math.abs(result);
 }
 /**
- * Returns the days in the given month.
- *
- * @param month base-1
- * @param year
+ * Contains shared logic for ByHourOfDay, ByMinuteOfHour,
+ * BySecondOfMinute, and ByMillisecondOfSecond rule pipes
  */
 
 
-function monthLength(month, year) {
-  const block = {
-    1: 31,
-    2: getDaysInFebruary(year),
-    3: 31,
-    4: 30,
-    5: 31,
-    6: 30,
-    7: 31,
-    8: 31,
-    9: 30,
-    10: 31,
-    11: 30,
-    12: 31
-  };
-  return block[month];
-}
+class ByTimeOfUnitRule extends RecurrenceRuleBase {
+  run(date) {
+    // e.g. const currentTime = date.get('hour');
+    const currentTime = date.get(this.granularity); // e.g. for (const time of this.options.byHourOfDay) {
 
-function getDaysInFebruary(year) {
-  return isLeapYear(year) ? 29 : 28;
-} // taken from date-fn
+    for (const time of this.option) {
+      if (currentTime > time) continue;
 
+      if (currentTime === time) {
+        return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ValidDateTime"](date));
+      } // e.g. return this.nextValidDate(args, date.granularity('day').set('hour', time));
 
-function isLeapYear(year) {
-  return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;
-}
 
-function getDaysInYear(year) {
-  return isLeapYear(year) ? 366 : 365;
+      return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](date.granularity(this.baseGranularity).set(this.granularity, time)));
+    }
+
+    return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](date // e.g. .granularity('day')
+    .granularity(this.baseGranularity) // e.g. .add(1, 'day')
+    .add(1, this.baseGranularity) // e.g. .set('hour', this.options.byHourOfDay[0]);
+    .set(this.granularity, this.option[0])));
+  }
+
 }
 
-function getUTCYearDay(now) {
-  const start = new Date(Date.UTC(now.getUTCFullYear(), 0, 1));
-  const diff = now.valueOf() - start.valueOf();
-  return 1 + Math.floor(diff / DateAdapter.MILLISECONDS_IN_DAY);
+class ByMillisecondOfSecondRule extends ByTimeOfUnitRule {
+  constructor() {
+    super(...arguments);
+    this.baseGranularity = 'second';
+    this.granularity = 'millisecond';
+    this.option = this.options.byMillisecondOfSecond;
+  }
+
 }
-/**
- * These functions are basically lifted from `date-fns`, but changed
- * to use the UTC date methods, which `date-fns` doesn't support.
- */
 
+const ByMillisecondOfSecondRuleModule = {
+  name: 'ByMillisecondOfSecond',
+  get: processor => {
+    if (processor.options.byMillisecondOfSecond === undefined) return null;
+    if (processor.reverse) return new RevByMillisecondOfSecondRule(processor);
+    return new ByMillisecondOfSecondRule(processor);
+  },
+  normalizeOptions: (options, norm) => {
+    if (options.byMillisecondOfSecond !== undefined) {
+      if (!ruleOptionFilled(options.byMillisecondOfSecond)) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byMillisecondOfSecond" expects a non-empty array');
+      }
 
-function toInteger(input) {
-  if (input === null || input === true || input === false) {
-    return NaN;
-  }
+      if (options.byMillisecondOfSecond.some(num => num < 0 || num > 999)) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byMillisecondOfSecond" values must be >= 0 && <= 999');
+      }
 
-  const int = Number(input);
+      norm.byMillisecondOfSecond = options.byMillisecondOfSecond;
+      norm.byMillisecondOfSecond.sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["numberSortComparer"]);
+    } else if (options.frequency !== 'MILLISECONDLY') {
+      norm.byMillisecondOfSecond = [norm.start.get('millisecond')];
+    }
+  },
+  deps: () => [FrequencyRuleModule, ByMillisecondOfSecondRuleModule]
+};
 
-  if (isNaN(int)) {
-    return int;
+class RevBySecondOfMinuteRule extends RevByTimeOfUnitRule {
+  constructor() {
+    super(...arguments);
+    this.baseGranularity = 'minute';
+    this.granularity = 'second';
+    this.option = this.options.bySecondOfMinute.slice().reverse();
   }
 
-  return int < 0 ? Math.ceil(int) : Math.floor(int);
 }
 
-function addMilliseconds(dirtyDate, dirtyAmount) {
-  if (arguments.length < 2) {
-    throw new TypeError('2 arguments required, but only ' + arguments.length + ' present');
+class BySecondOfMinuteRule extends ByTimeOfUnitRule {
+  constructor() {
+    super(...arguments);
+    this.baseGranularity = 'minute';
+    this.granularity = 'second';
+    this.option = this.options.bySecondOfMinute;
   }
 
-  const timestamp = dirtyDate.valueOf();
-  const amount = toInteger(dirtyAmount);
-  return new Date(timestamp + amount);
 }
 
-function addUTCYears(date, input) {
-  const amount = toInteger(input);
-  return addUTCMonths(date, amount * 12);
-}
+const BySecondOfMinuteRuleModule = {
+  name: 'BySecondOfMinute',
+  get: processor => {
+    if (processor.options.bySecondOfMinute === undefined) return null;
+    if (processor.reverse) return new RevBySecondOfMinuteRule(processor);
+    return new BySecondOfMinuteRule(processor);
+  },
+  normalizeOptions: (options, norm) => {
+    if (options.bySecondOfMinute !== undefined) {
+      if (!ruleOptionFilled(options.bySecondOfMinute)) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"bySecondOfMinute" expects a non-empty array');
+      }
 
-function addUTCMonths(date, input) {
-  const amount = toInteger(input);
-  date = new Date(date);
-  const desiredMonth = date.getUTCMonth() + amount;
-  const dateWithDesiredMonth = new Date(0);
-  dateWithDesiredMonth.setUTCFullYear(date.getUTCFullYear(), desiredMonth, 1);
-  dateWithDesiredMonth.setUTCHours(0, 0, 0, 0);
-  const daysInMonth = monthLength(dateWithDesiredMonth.getUTCMonth() + 1, dateWithDesiredMonth.getUTCFullYear()); // Set the last day of the new month
-  // if the original date was the last day of the longer month
+      if (options.bySecondOfMinute.some(num => num < 0 || num > 60)) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"bySecondOfMinute" values must be >= 0 && <= 60');
+      }
 
-  date.setUTCMonth(desiredMonth, Math.min(daysInMonth, date.getUTCDate()));
-  return date;
-}
+      norm.bySecondOfMinute = options.bySecondOfMinute;
+      norm.bySecondOfMinute.sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["numberSortComparer"]);
+    } else if (!['SECONDLY', 'MILLISECONDLY'].includes(options.frequency)) {
+      norm.bySecondOfMinute = [norm.start.get('second')];
+    }
+  },
+  deps: () => [FrequencyRuleModule, BySecondOfMinuteRuleModule, ByMillisecondOfSecondRuleModule]
+};
 
-function addUTCWeeks(date, input) {
-  const amount = toInteger(input);
-  const days = amount * 7;
-  return addUTCDays(date, days);
-}
+class RevByMinuteOfHourRule extends RevByTimeOfUnitRule {
+  constructor() {
+    super(...arguments);
+    this.baseGranularity = 'hour';
+    this.granularity = 'minute';
+    this.option = this.options.byMinuteOfHour.slice().reverse();
+  }
 
-function addUTCDays(date, input) {
-  // by adding milliseconds rather than days, we supress the native Date object's automatic
-  // daylight savings time conversions which we don't want in UTC mode
-  return addUTCMilliseconds(date, toInteger(input) * DateAdapter.MILLISECONDS_IN_DAY);
 }
 
-function addUTCHours(date, input) {
-  const amount = toInteger(input);
-  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_HOUR);
-}
+class ByMinuteOfHourRule extends ByTimeOfUnitRule {
+  constructor() {
+    super(...arguments);
+    this.baseGranularity = 'hour';
+    this.granularity = 'minute';
+    this.option = this.options.byMinuteOfHour;
+  }
 
-function addUTCMinutes(date, input) {
-  const amount = toInteger(input);
-  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_MINUTE);
 }
 
-function addUTCSeconds(date, input) {
-  const amount = toInteger(input);
-  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_SECOND);
-}
+const ByMinuteOfHourRuleModule = {
+  name: 'ByMinuteOfHour',
+  get: processor => {
+    if (processor.options.byMinuteOfHour === undefined) return null;
+    if (processor.reverse) return new RevByMinuteOfHourRule(processor);
+    return new ByMinuteOfHourRule(processor);
+  },
+  normalizeOptions: (options, norm) => {
+    if (options.byMinuteOfHour !== undefined) {
+      if (!ruleOptionFilled(options.byMinuteOfHour)) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byMinuteOfHour" expects a non-empty array');
+      }
 
-function addUTCMilliseconds(date, input) {
-  const amount = toInteger(input);
-  const timestamp = date.getTime();
-  return new Date(timestamp + amount);
-}
+      if (options.byMinuteOfHour.some(num => num < 0 || num > 59)) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byMinuteOfHour" values must be >= 0 && <= 59');
+      }
 
-function subUTCYears(date, amount) {
-  return addUTCYears(date, -amount);
-}
+      norm.byMinuteOfHour = options.byMinuteOfHour;
+      norm.byMinuteOfHour.sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["numberSortComparer"]);
+    } else if (!['MINUTELY', 'SECONDLY', 'MILLISECONDLY'].includes(options.frequency)) {
+      norm.byMinuteOfHour = [norm.start.get('minute')];
+    }
+  },
+  deps: () => [FrequencyRuleModule, ByMinuteOfHourRuleModule, BySecondOfMinuteRuleModule, ByMillisecondOfSecondRuleModule]
+};
 
-function subUTCMonths(date, amount) {
-  return addUTCMonths(date, -amount);
-}
+class RevByHourOfDayRule extends RevByTimeOfUnitRule {
+  constructor() {
+    super(...arguments);
+    this.baseGranularity = 'day';
+    this.granularity = 'hour';
+    this.option = this.options.byHourOfDay.slice().reverse();
+  }
 
-function subUTCWeeks(date, amount) {
-  return addUTCWeeks(date, -amount);
 }
 
-function subUTCDays(date, amount) {
-  return addUTCDays(date, -amount);
-}
+class ByHourOfDayRule extends ByTimeOfUnitRule {
+  constructor() {
+    super(...arguments);
+    this.baseGranularity = 'day';
+    this.granularity = 'hour';
+    this.option = this.options.byHourOfDay;
+  }
 
-function subUTCHours(date, amount) {
-  return addUTCHours(date, -amount);
 }
 
-function subUTCMinutes(date, amount) {
-  return addUTCMinutes(date, -amount);
-}
+const ByHourOfDayRuleModule = {
+  name: 'ByHourOfDay',
+  get: processor => {
+    if (processor.options.byHourOfDay === undefined) return null;
+    if (processor.reverse) return new RevByHourOfDayRule(processor);
+    return new ByHourOfDayRule(processor);
+  },
+  normalizeOptions: (options, norm) => {
+    if (options.byHourOfDay !== undefined) {
+      if (!ruleOptionFilled(options.byHourOfDay)) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byHourOfDay" expects a non-empty array');
+      }
 
-function subUTCSeconds(date, amount) {
-  return addUTCSeconds(date, -amount);
-}
+      if (options.byHourOfDay.some(num => num < 0 || num > 23)) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byHourOfDay" values must be >= 0 && <= 23');
+      }
 
-function subUTCMilliseconds(date, amount) {
-  return addUTCMilliseconds(date, -amount);
-}
+      norm.byHourOfDay = options.byHourOfDay;
+      norm.byHourOfDay.sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["numberSortComparer"]);
+    } else if (['YEARLY', 'MONTHLY', 'WEEKLY', 'DAILY'].includes(options.frequency)) {
+      norm.byHourOfDay = [norm.start.get('hour')];
+    }
+  },
+  deps: () => [FrequencyRuleModule, ByHourOfDayRuleModule, ByMinuteOfHourRuleModule, BySecondOfMinuteRuleModule, ByMillisecondOfSecondRuleModule]
+};
 
-class ArgumentError extends Error {}
+function getNextWeekday(date, weekday) {
+  return date.add(Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["getDifferenceBetweenWeekdays"])(date.get('weekday'), weekday), 'day');
+}
 
-class InfiniteLoopError extends Error {}
+function getNthWeekdayOfMonth(date, weekday, nth) {
+  let base = date.set('day', 1);
 
-function numberSortComparer(a, b) {
-  if (a > b) {
-    return 1;
-  } else if (b > a) {
-    return -1;
-  } else {
-    return 0;
+  if (nth < 0) {
+    base = base.add(1, 'month');
   }
-}
 
-function freqToGranularity(freq) {
-  switch (freq) {
-    case 'YEARLY':
-      return 'year';
+  base = getNextWeekday(base, weekday); // when nth is negative, adding it will act as subtraction
 
-    case 'MONTHLY':
-      return 'month';
+  return nth < 0 ? base.add(nth, 'week') : base.add(nth - 1, 'week');
+}
 
-    case 'WEEKLY':
-      return 'week';
+class ByDayOfMonthRule extends RecurrenceRuleBase {
+  run(date) {
+    const normalizedByDayOfMonth = normalizeByDayOfMonth(date, this.options.byDayOfMonth, this.options.byDayOfWeek);
+    const currentDay = date.get('day');
 
-    case 'DAILY':
-      return 'day';
+    for (const day of normalizedByDayOfMonth) {
+      if (currentDay > day) continue;
 
-    case 'HOURLY':
-      return 'hour';
+      if (currentDay === day) {
+        return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ValidDateTime"](date));
+      }
 
-    case 'MINUTELY':
-      return 'minute';
+      return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](date.granularity('month').set('day', day)));
+    }
 
-    case 'SECONDLY':
-      return 'second';
+    let next;
+    let nextMonth = date;
+    let index = 0;
 
-    case 'MILLISECONDLY':
-      return 'millisecond';
+    while (!next && index < 30) {
+      nextMonth = nextMonth.granularity('month').add(1, 'month');
+      next = normalizeByDayOfMonth(nextMonth, this.options.byDayOfMonth, this.options.byDayOfWeek)[0];
+      index++;
+    }
 
-    default:
-      throw new Error('unknown freq passed to freqToGranularity()');
-  }
-}
+    if (index >= 13) {
+      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RecurrenceRuleError"]('byDayOfMonth Infinite while loop');
+    }
 
-function cloneJSON(json) {
-  return JSON.parse(JSON.stringify(json));
-}
+    return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](nextMonth.set('day', next)));
+  }
 
-function dateInputToDateAdapter(date) {
-  // prettier-ignore
-  return date instanceof DateTime ? DateAdapterBase.adapter.fromDateTime(date) : date instanceof DateAdapterBase ? date : DateAdapterBase.adapter.fromDate(date);
 }
+/**
+ * Does a few things:
+ *
+ * 1. filters out byDayOfMonth entries which are not applicable
+ *    to current month
+ * 2. negative entries to positive ones
+ * 3. if a byDayOfWeek option is given, removes days which are
+ *    not on the correct day of the week
+ */
 
-function dateInputToDateTime(date, timezone) {
-  if (date instanceof DateTime) {
-    if (date.timezone !== timezone) {
-      return DateAdapterBase.adapter.fromDateTime(date).set('timezone', timezone).toDateTime();
-    }
 
-    return date;
-  }
+function normalizeByDayOfMonth(date, byDayOfMonth, byDayOfWeek) {
+  const lengthOfMonth = date.endGranularity('month').get('day');
+  let normalizedByDayOfMonth = byDayOfMonth.filter(day => lengthOfMonth >= Math.abs(day)).map(day => day > 0 ? day : lengthOfMonth + day + 1);
 
-  return date instanceof DateAdapterBase ? date.set('timezone', timezone).toDateTime() : DateAdapterBase.adapter.fromDate(date).set('timezone', timezone).toDateTime();
-} // export function normalizeDateInput<T extends DateAdapter>(
-//   dateAdapter: DateAdapterConstructor<T>,
-//   input: DateInput<T>,
-//   timezone: string | null,
-// ): DateTime {
-//   if (input instanceof DateTime) {
-//     if (input.timezone !== timezone) {
-//       return dateAdapter
-//         .fromDateTime(input)
-//         .set('timezone', timezone)
-//         .toDateTime();
-//     }
-//     return input;
-//   }
-//   return input instanceof DateAdapter
-//     ? input.set('timezone', timezone).toDateTime()
-//     : new dateAdapter(input).toDateTime();
-// }
+  if (byDayOfWeek) {
+    const base = date.granularity('month');
+    const filteredByDayOfMonth = [];
+    byDayOfWeek.forEach(entry => {
+      if (typeof entry === 'string') {
+        filteredByDayOfMonth.push(...normalizedByDayOfMonth.filter(day => base.set('day', day).get('weekday') === entry));
+        return;
+      }
 
+      const nthWeekdayOfMonth = getNthWeekdayOfMonth(date, ...entry).get('day');
 
-function normalizeDateTimeTimezone(date, timezone) {
-  if (date.timezone !== timezone) {
-    return DateAdapterBase.adapter.fromDateTime(date).set('timezone', timezone).toDateTime();
+      if (normalizedByDayOfMonth.includes(nthWeekdayOfMonth)) {
+        filteredByDayOfMonth.push(nthWeekdayOfMonth);
+      }
+    });
+    normalizedByDayOfMonth = Array.from(new Set(filteredByDayOfMonth));
   }
 
-  return date;
+  return normalizedByDayOfMonth.sort((a, b) => {
+    if (a > b) return 1;
+    if (a < b) return -1;else return 0;
+  });
 }
 
-class RuleOptionError extends Error {}
-
-function normalizeDefaultOptions(options) {
-  let start;
-
-  if (options.start instanceof DateTime) {
-    start = options.start;
-  } else if (options.start instanceof DateAdapterBase) {
-    start = options.start.toDateTime();
-  } else if (DateAdapterBase.adapter.isDate(options.start)) {
-    start = DateAdapterBase.adapter.fromDate(options.start).toDateTime();
-  } else {
-    throw new RuleOptionError('"start" must be either a `DateAdapter` instance or an instance of the ' + 'date a DateAdapter is wrapping (e.g. `StandardDateAdapter` wraps a `Date`)');
-  }
+class RevByDayOfMonthRule extends RevRecurrenceRuleBase {
+  run(date) {
+    const normalizedByDayOfMonth = normalizeByDayOfMonth(date, this.options.byDayOfMonth, this.options.byDayOfWeek).reverse();
+    const currentDay = date.get('day');
 
-  let end;
+    for (const day of normalizedByDayOfMonth) {
+      if (currentDay < day) continue;
 
-  if (options.end) {
-    if (options.end instanceof DateTime) {
-      end = options.end;
-    } else if (options.end instanceof DateAdapterBase) {
-      end = options.end.toDateTime();
-    } else if (DateAdapterBase.adapter.isDate(options.end)) {
-      end = DateAdapterBase.adapter.fromDate(options.end).toDateTime();
-    } else {
-      throw new RuleOptionError('"end" must be either be `undefined`, a `DateAdapter` instance, or an instance of the ' + 'date a DateAdapter is wrapping (e.g. `StandardDateAdapter` wraps a `Date`)');
-    }
-  }
+      if (currentDay === day) {
+        return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ValidDateTime"](date));
+      }
 
-  if (options.duration !== undefined) {
-    if (!Number.isInteger(options.duration)) {
-      throw new RuleOptionError('"duration" expects a whole number');
+      return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](date.endGranularity('month').set('day', day)));
     }
 
-    if (options.duration <= 0) {
-      throw new RuleOptionError('"duration" must be greater than 0');
-    }
-  }
+    let next;
+    let nextMonth = date;
+    let index = 0;
 
-  if (options.count !== undefined) {
-    if (!Number.isInteger(options.count)) {
-      throw new RuleOptionError('"count" must be a whole number');
+    while (!next && index < 30) {
+      nextMonth = nextMonth.endGranularity('month').subtract(1, 'month');
+      next = normalizeByDayOfMonth(nextMonth, this.options.byDayOfMonth, this.options.byDayOfWeek).pop();
+      index++;
     }
 
-    if (options.count < 0) {
-      throw new RuleOptionError('"count" must be greater than 0');
+    if (index >= 13) {
+      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RecurrenceRuleError"]('byDayOfMonth Infinite while loop');
     }
-  }
 
-  if (options.end !== undefined && options.count !== undefined) {
-    throw new RuleOptionError('"end" and "count" cannot both be present');
+    return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](nextMonth.set('day', next)));
   }
 
-  return {
-    start,
-    end,
-    count: options.count,
-    duration: options.duration
-  };
 }
 
-function normalizeRuleOptions(recurrenceModules, options) {
-  const normOptions = normalizeDefaultOptions(options);
-  const startOptions = cloneJSON(options);
-  recurrenceModules.forEach(mod => {
-    mod.normalizeOptions(startOptions, normOptions);
-  });
-  Object.keys(normOptions).forEach(key => {
-    if (normOptions[key] === undefined) {
-      delete normOptions[key];
-    }
-  });
-  return normOptions;
-}
+const ByDayOfMonthRuleModule = {
+  name: 'ByDayOfMonth',
+  get: processor => {
+    if (processor.options.byDayOfMonth === undefined) return null;
+    if (processor.reverse) return new RevByDayOfMonthRule(processor);
+    return new ByDayOfMonthRule(processor);
+  },
+  normalizeOptions: (options, norm) => {
+    if (options.byDayOfMonth !== undefined) {
+      if (options.frequency === 'WEEKLY') {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('when "frequency" is "WEEKLY", "byDayOfMonth" cannot be present');
+      }
 
-function cloneRuleOptions(options) {
-  const obj = cloneJSON(options);
-  obj.start = options.start;
-  if (options.end) obj.end = options.end;
-  return obj;
-}
+      if (!ruleOptionFilled(options.byDayOfMonth)) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byDayOfMonth" expects a non-empty array');
+      }
 
-class RecurrenceRuleError extends Error {}
+      if (options.byDayOfMonth.some(num => num === 0 || num < -31 || num > 31)) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byDayOfMonth" values must be `num !== 0 && num <= 31 && num >= -31`');
+      }
 
-class ValidDateTime {
-  constructor(date) {
-    this.date = date;
-  }
+      norm.byDayOfMonth = options.byDayOfMonth.slice();
+    } else if (!(ruleOptionFilled(options.byDayOfWeek) || ruleOptionFilled(options.byDayOfYear)) && ['YEARLY', 'MONTHLY'].includes(options.frequency)) {
+      norm.byDayOfMonth = [norm.start.get('day')];
+    }
+  },
+  deps: () => [FrequencyRuleModule, ByDayOfMonthRuleModule, ByHourOfDayRuleModule, ByMinuteOfHourRuleModule, BySecondOfMinuteRuleModule, ByMillisecondOfSecondRuleModule]
+};
 
-}
+function getNthWeekdayOfYear(date, weekday, nth) {
+  let base = date.set('month', 1).set('day', 1);
 
-class InvalidDateTime {
-  constructor(date) {
-    this.date = date;
+  if (nth < 0) {
+    base = base.add(1, 'year');
   }
 
+  base = getNextWeekday(base, weekday); // when nth is negative, adding it will act as subtraction
+
+  return nth < 0 ? base.add(nth, 'week') : base.add(nth - 1, 'week');
 }
 
-function recurrenceRulesReducer(rules) {
-  return iterator => rules.reduce((prev, curr) => {
-    const rule = curr.get(iterator);
-    if (rule) prev.push(rule);
-    return prev;
-  }, []);
+function getPreviousWeekday(date, weekday) {
+  const diff = Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["getDifferenceBetweenWeekdays"])(date.get('weekday'), weekday);
+  return date.subtract(diff === 0 ? 0 : 7 - diff, 'day');
 }
 
-class RecurrenceRulesIterator {
-  constructor(recurrenceRules, options, args) {
-    this.options = options;
-    this.args = args;
-    this.rules = [];
-    this.iterator = // prettier-ignore
-    this.options.count === undefined ? this.iterate() : this.args.reverse ? this.iterateWithReverseCount() : this.iterateWithCount();
-    this.options = Object.assign(Object.assign({}, cloneJSON(options)), {
-      start: options.start,
-      end: options.end
-    });
-    this.reverse = this.options.count === undefined && args.reverse || false;
+class RevByDayOfWeekRule extends RevRecurrenceRuleBase {
+  run(date) {
+    if (this.options.frequency === 'YEARLY') {
+      return this.options.byMonthOfYear === undefined ? this.expandYearly(date) : this.expandMonthly(date);
+    } else if (this.options.frequency === 'MONTHLY') {
+      return this.expandMonthly(date);
+    }
 
-    const _this$normalizeDateTi = this.normalizeDateTimeArgs(args),
-          start = _this$normalizeDateTi.start,
-          end = _this$normalizeDateTi.end;
+    return this.expand(date);
+  }
 
-    if (options.count !== undefined) {
-      this.start = options.start;
-    } else if (start && options.start) {
-      this.start = start.isAfterOrEqual(options.start) ? start : options.start;
-    } else {
-      this.start = start || options.start;
-    }
+  expandYearly(date) {
+    let next = getPrevWeekdaysOfYear(date, this.options.byDayOfWeek)[0];
+    let index = 0;
+    let base = date; // If we can't find a valid date this year,
+    // search the previous year. Only search the past 28 years.
+    // (the calendar repeats on a 28 year cycle, according
+    // to the internet).
 
-    if (end && options.end) {
-      this.end = end.isBeforeOrEqual(options.end) ? end : options.end;
-    } else {
-      this.end = end || options.end;
+    while (!next && index < 28) {
+      index++;
+      base = base.granularity('year').subtract(1, 'millisecond');
+      next = getPrevWeekdaysOfYear(base, this.options.byDayOfWeek)[0];
     }
 
-    if (this.args.reverse && !(options.count !== undefined || this.end)) {
-      throw new Error('When iterating in reverse, the rule must have an `end` or `count` ' + 'property or you must provide an `end` argument.');
+    if (!next) {
+      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RecurrenceRuleError"]('The byDayOfWeek rule appears to contain an impossible combination');
     }
 
-    this.isInfinite = !this.end && this.options.count === undefined;
-    this.hasDuration = !!this.options.duration;
-    this.rules = Array.isArray(recurrenceRules) ? recurrenceRules : recurrenceRules(this);
+    return this.result(date, next);
   }
 
-  [Symbol.iterator]() {
-    return this.iterator;
-  }
+  expandMonthly(date) {
+    let next = getPrevWeekdaysOfMonth(date, this.options.byDayOfWeek)[0];
+    let index = 0;
+    let base = date; // TODO: performance improvment
+    // If, in the first year, a match isn't found, we should be able to
+    // jumpt to the previous leap year and check that. Or, if already on
+    // a leap year, we can just error immediately.
+    // If we can't find a valid date this month,
+    // search the previous month. Only search the past 4 years
+    // (to account for leap year).
 
-  next(args) {
-    return this.iterator.next(args);
-  }
-  /**
-   * In the pipe controller, we have an extra level of indirection with
-   * the `run()` and `iterate()` methods. The `iterate()` method is the
-   * method which actually runs the logic in the pipes. If we didn't
-   * need to account for the `count` property of a rule, we would *only*
-   * need the iterate method... so much simpler. But we do need to account
-   * for rules with a `count` property.
-   *
-   * Rules with a `count` property need to begin iteration at the beginning
-   * because the `count` is always from the rule's start time. So if someone
-   * passes in a new start time as an argument to a rule with `count`, we
-   * need to secretly iterate from the beginning, tracking the number of
-   * iterations, and then only start yielding dates when we reach the section
-   * the user cares about (or, if we hit our `count` quota, cancel iterating).
-   *
-   * Additionally, we need to handle iterating in reverse. In this case, we build
-   * up a cache of dates between the rule's start time and the reverse iteration
-   * start date. Once we hit the reverse iteration start date, we start
-   * yielding dates in the cache, in reverse order.
-   *
-   * In general, I imagine the count number, if used, will be small. But a large
-   * count will definitely have a negative performance affect. I don't think
-   * there's anything to be done about this.
-   */
-
-
-  *iterateWithReverseCount() {
-    const dates = Array.from(this.iterateWithCount()).reverse();
-    let yieldArgs;
-    const dateCache = dates.slice();
-    let date = dateCache.shift();
+    while (!next && index < 50) {
+      index++;
+      base = base.granularity('month').subtract(1, 'millisecond');
+      next = getPrevWeekdaysOfMonth(base, this.options.byDayOfWeek)[0];
+    }
 
-    while (date) {
-      if (yieldArgs && yieldArgs.skipToDate && date.isAfter(yieldArgs.skipToDate)) {
-        date = dateCache.shift();
-        continue;
-      }
+    if (!next) {
+      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RecurrenceRuleError"]('The byDayOfWeek rule appears to contain an impossible combination');
+    }
 
-      yieldArgs = yield date;
+    return this.result(date, next);
+  }
 
-      if (yieldArgs && yieldArgs.skipToDate && yieldArgs.skipToDate.isAfterOrEqual(date)) {
-        throw new Error('A provided `skipToDate` option must be greater than the last yielded date ' + '(or smaller, in the case of reverse iteration)');
-      }
+  expand(date) {
+    const next = this.options.byDayOfWeek.map(weekday => getPreviousWeekday(date, weekday)).sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateTimeSortComparer"]).pop();
+    return this.result(date, next);
+  }
 
-      date = dateCache.shift();
+  result(date, next) {
+    if (next.isEqual(date)) {
+      return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ValidDateTime"](date));
     }
 
-    return undefined;
+    return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](next.endGranularity('day')));
   }
 
-  *iterateWithCount() {
-    if (this.options.count === 0) return;
-    const iterable = this.iterate();
-    const start = this.args.start || this.start;
-    let date = iterable.next().value;
-    let index = 1;
-    let yieldArgs;
-
-    while (date && index <= this.options.count) {
-      index++;
+}
+/** For each byDayOfWeek entry, find the previous DateTime */
 
-      if (date.isBefore(start)) {
-        date = iterable.next().value;
-        continue;
-      }
 
-      if (yieldArgs && yieldArgs.skipToDate && date.isBefore(yieldArgs.skipToDate)) {
-        date = iterable.next().value;
-        continue;
-      }
+function getPrevWeekdaysOfYear(date, byDayOfWeek) {
+  const normalizedNthWeekdaysOfYear = byDayOfWeek.filter(entry => Array.isArray(entry)).map(entry => getNthWeekdayOfYear(date, ...entry));
+  const normalizedNextWeekdays = byDayOfWeek.filter(entry => typeof entry === 'string').map(weekday => getPreviousWeekday(date, weekday)).filter(entry => entry.get('year') === date.get('year'));
+  return Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["uniqDateTimes"])([...normalizedNthWeekdaysOfYear, ...normalizedNextWeekdays]).filter(entry => entry.isBeforeOrEqual(date)).sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateTimeSortComparer"]).reverse();
+}
+/** For each byDayOfWeek entry, find the previous DateTime */
 
-      yieldArgs = yield date;
 
-      if (yieldArgs && yieldArgs.skipToDate && yieldArgs.skipToDate.isBeforeOrEqual(date)) {
-        throw new Error('A provided `skipToDate` option must be greater than the last yielded date ' + '(or smaller, in the case of reverse iteration)');
-      }
+function getPrevWeekdaysOfMonth(date, byDayOfWeek) {
+  const normalizedNthWeekdaysOfMonth = byDayOfWeek.filter(entry => Array.isArray(entry)).map(entry => getNthWeekdayOfMonth(date, ...entry));
+  const normalizedNextWeekdays = byDayOfWeek.filter(entry => typeof entry === 'string').map(weekday => getPreviousWeekday(date, weekday)).filter(entry => entry.get('year') === date.get('year') && entry.get('month') === date.get('month'));
+  return Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["uniqDateTimes"])([...normalizedNthWeekdaysOfMonth, ...normalizedNextWeekdays]).filter(entry => entry.isBeforeOrEqual(date)).sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateTimeSortComparer"]).reverse();
+}
 
-      date = iterable.next().value;
+class ByDayOfWeekRule extends RecurrenceRuleBase {
+  run(date) {
+    if (this.options.frequency === 'YEARLY') {
+      return this.options.byMonthOfYear === undefined ? this.expandYearly(date) : this.expandMonthly(date);
+    } else if (this.options.frequency === 'MONTHLY') {
+      return this.expandMonthly(date);
     }
 
-    return undefined;
+    return this.expand(date);
   }
 
-  *iterate() {
-    let startingDate = this.start;
-    if (this.reverse) startingDate = this.end;
-    let date = this.nextDate(startingDate);
-
-    while (date) {
-      const args = yield this.normalizeRunOutput(date);
+  expandYearly(date) {
+    let next = getNextWeekdaysOfYear(date, this.options.byDayOfWeek)[0];
+    let index = 0;
+    let base = date; // If we can't find a valid date this year,
+    // search next year. Only search the next 28 years.
+    // (the calendar repeats on a 28 year cycle, according
+    // to the internet).
 
-      if (args && args.skipToDate) {
-        if (this.reverse ? args.skipToDate.isAfterOrEqual(date) : args.skipToDate.isBeforeOrEqual(date)) {
-          // We cannot consistently skip backwards because after an iterator is "done"
-          // it always returns undefined and you cannot reset it. Theoretically, it would be
-          // fine to skip backwards if the iterator wasn't already "done", but this
-          // would be prone to user error so we simply disallow skipping backwards altogether.
-          throw new Error('A provided `skipToDate` option must be greater than the last yielded date ' + '(or smaller, in the case of reverse iteration)');
-        }
+    while (!next && index < 28) {
+      index++;
+      base = base.granularity('year').add(1, 'year');
+      next = getNextWeekdaysOfYear(base, this.options.byDayOfWeek)[0];
+    }
 
-        date = this.nextDate(args.skipToDate);
-      } else {
-        date = this.nextDate(this.reverse ? date.subtract(1, 'millisecond') : date.add(1, 'millisecond'));
-      }
+    if (!next) {
+      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RecurrenceRuleError"]('The byDayOfWeek rule appears to contain an impossible combination');
     }
 
-    return undefined;
+    return this.result(date, next);
   }
-  /**
-   * Loops through the recurrence rules until a valid date is found.
-   */
 
-
-  nextDate(start) {
-    let result = this.runRules(start.set('generators', []));
-    if (this.isDatePastEnd(result.date)) return null;
+  expandMonthly(date) {
+    let next = getNextWeekdaysOfMonth(date, this.options.byDayOfWeek)[0];
     let index = 0;
+    let base = date; // TODO: performance improvment
+    // If, in the first year, a match isn't found, we should be able to
+    // jumpt to the next leap year and check that. Or, if already on
+    // a leap year, we can just error immediately.
+    // If we can't find a valid date this month,
+    // search the next month. Only search the next 4 years
+    // (to account for leap year).
 
-    while (result instanceof InvalidDateTime && index < 50) {
-      result = this.runRules(result.date);
-      if (this.isDatePastEnd(result.date)) return null;
+    while (!next && index < 50) {
       index++;
+      base = base.granularity('month').add(1, 'month');
+      next = getNextWeekdaysOfMonth(base, this.options.byDayOfWeek)[0];
     }
 
-    if (result instanceof InvalidDateTime) {
-      throw new RecurrenceRuleError(`Failed to find a matching occurrence in ${index} iterations. ` + `Last iterated date: "${result.date.toISOString()}"`);
-    }
-
-    if (this.reverse ? start.isBefore(result.date) : start.isAfter(result.date)) {
-      throw new RecurrenceRuleError('An error occurred in a recurrence rule. If this happened using ' + 'the rSchedule provided recurrence rules, you should ' + 'open an issue in the rSchedule repo. The maintainer is going to ' + 'want to know how to recreate the error.');
+    if (!next) {
+      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RecurrenceRuleError"]('The byDayOfWeek rule appears to contain an impossible combination');
     }
 
-    return result.date;
+    return this.result(date, next);
   }
-  /**
-   * Performs one run of the recurrence rules and returns the result.
-   * It's a slightly optimized reducer function.
-   */
-
 
-  runRules(start) {
-    let result = new ValidDateTime(start);
-
-    for (const rule of this.rules) {
-      if (result instanceof InvalidDateTime) {
-        return result;
-      }
+  expand(date) {
+    const next = this.options.byDayOfWeek.map(weekday => getNextWeekday(date, weekday)).sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateTimeSortComparer"])[0];
+    return this.result(date, next);
+  }
 
-      result = rule.run(result.date);
+  result(date, next) {
+    if (next.isEqual(date)) {
+      return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ValidDateTime"](date));
     }
 
-    return result;
-  }
-
-  isDatePastEnd(date) {
-    return this.reverse ? date.isBefore(this.start) : this.end && date.isAfter(this.end);
+    return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](next.granularity('day')));
   }
 
-  normalizeRunOutput(date) {
-    return this.hasDuration ? date.set('duration', this.options.duration) : date;
-  }
+}
+/** For each byDayOfWeek entry, find the next DateTime */
 
-  normalizeDateTimeArgs(args) {
-    return {
-      start: args.start && normalizeDateTimeTimezone(args.start, this.options.start.timezone),
-      end: args.end && normalizeDateTimeTimezone(args.end, this.options.start.timezone)
-    };
-  }
 
+function getNextWeekdaysOfYear(date, byDayOfWeek) {
+  const normalizedNthWeekdaysOfYear = byDayOfWeek.filter(entry => Array.isArray(entry)).map(entry => getNthWeekdayOfYear(date, ...entry));
+  const normalizedNextWeekdays = byDayOfWeek.filter(entry => typeof entry === 'string').map(weekday => getNextWeekday(date, weekday)).filter(entry => entry.get('year') === date.get('year'));
+  return Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["uniqDateTimes"])([...normalizedNthWeekdaysOfYear, ...normalizedNextWeekdays]).filter(entry => entry.isAfterOrEqual(date)).sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateTimeSortComparer"]);
 }
+/** For each byDayOfWeek entry, find the next DateTime */
 
 
+function getNextWeekdaysOfMonth(date, byDayOfWeek) {
+  const normalizedNthWeekdaysOfMonth = byDayOfWeek.filter(entry => Array.isArray(entry)).map(entry => getNthWeekdayOfMonth(date, ...entry));
+  const normalizedNextWeekdays = byDayOfWeek.filter(entry => typeof entry === 'string').map(weekday => getNextWeekday(date, weekday)).filter(entry => entry.get('year') === date.get('year') && entry.get('month') === date.get('month'));
+  return Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["uniqDateTimes"])([...normalizedNthWeekdaysOfMonth, ...normalizedNextWeekdays]).filter(entry => entry.isAfterOrEqual(date)).sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateTimeSortComparer"]);
+}
 
-/***/ }),
+const ByDayOfWeekRuleModule = {
+  name: 'ByDayOfWeek',
+  get: processor => {
+    if (processor.options.byDayOfWeek === undefined) return null;
+    if (processor.reverse) return new RevByDayOfWeekRule(processor);
+    return new ByDayOfWeekRule(processor);
+  },
+  normalizeOptions: (options, norm) => {
+    if (options.byDayOfWeek !== undefined) {
+      if (!ruleOptionFilled(options.byDayOfWeek)) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byDayOfWeek" expects a non-empty array');
+      }
 
-/***/ "./node_modules/@rschedule/core/es2015/rules.js":
-/*!******************************************************!*\
-  !*** ./node_modules/@rschedule/core/es2015/rules.js ***!
-  \******************************************************/
-/*! exports provided: ByDayOfMonthRule, ByDayOfMonthRuleModule, ByDayOfWeekRule, ByDayOfWeekRuleModule, ByHourOfDayRule, ByHourOfDayRuleModule, ByMillisecondOfSecondRule, ByMillisecondOfSecondRuleModule, ByMinuteOfHourRule, ByMinuteOfHourRuleModule, ByMonthOfYearRule, ByMonthOfYearRuleModule, BySecondOfMinuteRule, BySecondOfMinuteRuleModule, FrequencyRule, FrequencyRuleModule, ICAL_RULES, RevByDayOfMonthRule, RevByDayOfWeekRule, RevByHourOfDayRule, RevByMillisecondOfSecondRule, RevByMinuteOfHourRule, RevByMonthOfYearRule, RevBySecondOfMinuteRule, RevFrequencyRule, getPrevWeekdaysOfMonth, getPrevWeekdaysOfYear */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+      const invalidWeeday = options.byDayOfWeek.find(day => Array.isArray(day) ? !_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapter"].WEEKDAYS.includes(day[0]) : !_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapter"].WEEKDAYS.includes(day));
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByDayOfMonthRule", function() { return ByDayOfMonthRule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByDayOfMonthRuleModule", function() { return ByDayOfMonthRuleModule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByDayOfWeekRule", function() { return ByDayOfWeekRule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByDayOfWeekRuleModule", function() { return ByDayOfWeekRuleModule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByHourOfDayRule", function() { return ByHourOfDayRule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByHourOfDayRuleModule", function() { return ByHourOfDayRuleModule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByMillisecondOfSecondRule", function() { return ByMillisecondOfSecondRule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByMillisecondOfSecondRuleModule", function() { return ByMillisecondOfSecondRuleModule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByMinuteOfHourRule", function() { return ByMinuteOfHourRule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByMinuteOfHourRuleModule", function() { return ByMinuteOfHourRuleModule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByMonthOfYearRule", function() { return ByMonthOfYearRule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByMonthOfYearRuleModule", function() { return ByMonthOfYearRuleModule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BySecondOfMinuteRule", function() { return BySecondOfMinuteRule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BySecondOfMinuteRuleModule", function() { return BySecondOfMinuteRuleModule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FrequencyRule", function() { return FrequencyRule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FrequencyRuleModule", function() { return FrequencyRuleModule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ICAL_RULES", function() { return ICAL_RULES; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RevByDayOfMonthRule", function() { return RevByDayOfMonthRule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RevByDayOfWeekRule", function() { return RevByDayOfWeekRule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RevByHourOfDayRule", function() { return RevByHourOfDayRule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RevByMillisecondOfSecondRule", function() { return RevByMillisecondOfSecondRule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RevByMinuteOfHourRule", function() { return RevByMinuteOfHourRule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RevByMonthOfYearRule", function() { return RevByMonthOfYearRule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RevBySecondOfMinuteRule", function() { return RevBySecondOfMinuteRule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RevFrequencyRule", function() { return RevFrequencyRule; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPrevWeekdaysOfMonth", function() { return getPrevWeekdaysOfMonth; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPrevWeekdaysOfYear", function() { return getPrevWeekdaysOfYear; });
-/* harmony import */ var _rschedule_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @rschedule/core */ "./node_modules/@rschedule/core/es2015/main.js");
+      if (invalidWeeday) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"](`"byDayOfWeek" expects weedays in the form ` + `${JSON.stringify(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapter"].WEEKDAYS)} but "${invalidWeeday}" was provided`);
+      }
 
+      if (!['YEARLY', 'MONTHLY'].includes(options.frequency) && options.byDayOfWeek.some(weekday => Array.isArray(weekday))) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byDayOfWeek" can only include a numeric value (i.e. `[string, number]`) when the "frequency" is ' + 'either "MONTHLY" or "YEARLY"');
+      }
 
-class RecurrenceRule {
-  constructor(processor) {
-    this.processor = processor;
-    this.start = processor.start;
-    this.end = processor.end;
-    this.options = processor.options;
-  }
+      if (options.frequency === 'MONTHLY' && options.byDayOfWeek.some(weekday => Array.isArray(weekday) && (weekday[1] < -31 || weekday[1] === 0 || weekday[1] > 31))) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('when "frequency" is "MONTHLY", each "byDayOfWeek" can optionally only' + ' have a numeric value >= -31 and <= 31 and !== 0');
+      }
 
-}
+      if (options.frequency === 'YEARLY' && options.byDayOfWeek.some(weekday => Array.isArray(weekday) && (weekday[1] < -366 || weekday[1] === 0 || weekday[1] > 366))) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('when "frequency" is "YEARLY", each "byDayOfWeek" can optionally only' + ' have a numeric value >= -366 and <= 366 and !== 0');
+      }
 
-class FrequencyRule extends RecurrenceRule {
-  constructor(processor, initDate) {
-    super(processor);
-    this.initDate = initDate;
-    this.intervalUnit = Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["freqToGranularity"])(this.options.frequency);
-    this.firstIntervalStartDate = this.normalizedStartDate(this.options.start);
-    this.intervalStartDate = this.firstIntervalStartDate;
-    this.intervalEndDate = this.normalizedEndDate(this.firstIntervalStartDate);
-    this.skipToInterval(this.initDate);
-  }
+      norm.byDayOfWeek = options.byDayOfWeek;
+    } else if (!ruleOptionFilled(options.byDayOfMonth) && options.frequency === 'WEEKLY') {
+      norm.byDayOfWeek = [norm.start.get('weekday')];
+    }
+  },
+  deps: () => [FrequencyRuleModule, ByDayOfWeekRuleModule, ByHourOfDayRuleModule, ByMinuteOfHourRuleModule, BySecondOfMinuteRuleModule, ByMillisecondOfSecondRuleModule]
+};
 
-  run(date) {
-    return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ValidDateTime"](date));
+class RevByMonthOfYearRule extends RevRecurrenceRuleBase {
+  constructor() {
+    super(...arguments);
+    this.option = this.processor.options.byMonthOfYear.slice().reverse();
   }
 
-  validateDate(arg) {
-    const date = arg.date;
-
-    if (arg instanceof _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ValidDateTime"] && this.dateIsWithinInterval(date)) {
-      return arg;
-    }
+  run(date) {
+    const currentMonth = date.get('month');
 
-    this.skipToInterval(date);
-    return new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"]( // if the interval is 1, date will always be within the interval
-    this.dateIsWithinInterval(date) ? date : this.setToCurrentInterval());
-  }
+    for (const month of this.option) {
+      if (currentMonth < month) continue;
 
-  setToCurrentInterval() {
-    return this.intervalStartDate;
-  }
+      if (currentMonth === month) {
+        return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ValidDateTime"](date));
+      }
 
-  normalizedStartDate(date) {
-    if (this.options.frequency === 'WEEKLY') {
-      return date.granularity('week', {
-        weekStart: this.options.weekStart
-      });
+      return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](date.endGranularity('year').set('month', month)));
     }
 
-    return date.granularity(this.intervalUnit);
+    return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](date.endGranularity('year').subtract(1, 'year').set('month', this.option[0])));
   }
 
-  normalizedEndDate(start) {
-    switch (this.options.frequency) {
-      case 'YEARLY':
-        return start.add(1, 'year');
-
-      case 'MONTHLY':
-        return start.add(1, 'month');
-
-      case 'WEEKLY':
-        return start.add(1, 'week');
-
-      case 'DAILY':
-        return start.add(1, 'day');
-
-      case 'HOURLY':
-        return start.add(1, 'hour');
+}
 
-      case 'MINUTELY':
-        return start.add(1, 'minute');
+class ByMonthOfYearRule extends RecurrenceRuleBase {
+  run(date) {
+    const currentMonth = date.get('month');
 
-      case 'SECONDLY':
-        return start.add(1, 'second');
+    for (const month of this.options.byMonthOfYear) {
+      if (currentMonth > month) continue;
 
-      case 'MILLISECONDLY':
-        return start.add(1, 'millisecond');
+      if (currentMonth === month) {
+        return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ValidDateTime"](date));
+      }
 
-      default:
-        throw new Error(`Unknown frequency ${this.options.frequency}`);
+      return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](date.granularity('year').set('month', month)));
     }
-  }
-
-  skipToInterval(date) {
-    const amount = this.intervalDifference(date);
-    this.intervalStartDate = this.firstIntervalStartDate.add(amount, this.intervalUnit);
-    this.intervalEndDate = this.normalizedEndDate(this.intervalStartDate);
-  }
 
-  dateIsWithinInterval(date) {
-    return this.intervalStartDate.isBeforeOrEqual(date) && this.intervalEndDate.isAfter(date);
-  }
-
-  intervalDifference(date) {
-    return intervalDifferenceBetweenDates({
-      first: this.firstIntervalStartDate,
-      second: date,
-      unit: this.intervalUnit,
-      interval: this.options.interval,
-      weekStart: this.options.weekStart,
-      direction: 'after'
-    });
+    return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](date.granularity('year').add(1, 'year').set('month', this.options.byMonthOfYear[0])));
   }
 
 }
-/**
- * Given the frequency (unit) and interval, this function finds
- * how many jumps forward the first date needs in order to equal
- * or exceed the second date.
- *
- * For example:
- *
- * 1. Unit is daily and interval is 1. The second date is 3 days
- *    after the first. This will return 3.
- * 2. Unit is yearly and interval is 1. The second date is 3 days
- *    after the first. This will return 0.
- * 3. Unit is yearly and interval is 3. The second date is 4 years
- *    after the first. This will return 6.
- */
 
+const ByMonthOfYearRuleModule = {
+  name: 'ByMonthOfYear',
+  get: processor => {
+    if (processor.options.byMonthOfYear === undefined) return null;
 
-function intervalDifferenceBetweenDates({
-  first,
-  second,
-  unit,
-  interval,
-  weekStart,
-  direction
-}) {
-  let difference = (() => {
-    let intervalDuration;
-    let months;
+    if (processor.reverse) {
+      return new RevByMonthOfYearRule(processor);
+    }
 
-    switch (unit) {
-      case 'year':
-        months = (second.get('year') - first.get('year')) * 12;
-        months = months + second.get('month') - first.get('month');
-        return Math.floor(months / 12);
+    return new ByMonthOfYearRule(processor);
+  },
+  normalizeOptions: (options, norm) => {
+    if (options.byMonthOfYear !== undefined) {
+      if (!ruleOptionFilled(options.byMonthOfYear)) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byMonthOfYear" expects a non-empty array');
+      }
 
-      case 'month':
-        months = (second.get('year') - first.get('year')) * 12;
-        months = months + second.get('month') - first.get('month');
-        return months;
+      if (options.byMonthOfYear.some(num => num < 1 || num > 12)) {
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byMonthOfYear" values must be `num >= 1 && num >= 12`');
+      }
 
-      case 'week':
-        first = first.granularity('week', {
-          weekStart
-        });
-        intervalDuration = _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapter"].MILLISECONDS_IN_WEEK;
-        break;
+      norm.byMonthOfYear = options.byMonthOfYear.slice();
+      norm.byMonthOfYear.sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["numberSortComparer"]);
+    } else if (!(ruleOptionFilled(options.byDayOfMonth) || ruleOptionFilled(options.byDayOfWeek) || ruleOptionFilled(options.byDayOfYear)) && options.frequency === 'YEARLY') {
+      norm.byMonthOfYear = [norm.start.get('month')];
+    }
+  },
+  deps: () => [FrequencyRuleModule, ByMonthOfYearRuleModule, ByDayOfMonthRuleModule, ByHourOfDayRuleModule, ByMinuteOfHourRuleModule, BySecondOfMinuteRuleModule, ByMillisecondOfSecondRuleModule]
+};
+const ICAL_RULES = [FrequencyRuleModule, ByMonthOfYearRuleModule, ByDayOfMonthRuleModule, ByDayOfWeekRuleModule, ByHourOfDayRuleModule, ByMinuteOfHourRuleModule, BySecondOfMinuteRuleModule, ByMillisecondOfSecondRuleModule];
 
-      case 'day':
-        intervalDuration = _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapter"].MILLISECONDS_IN_DAY;
-        break;
 
-      case 'hour':
-        intervalDuration = _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapter"].MILLISECONDS_IN_HOUR;
-        break;
+/***/ }),
 
-      case 'minute':
-        intervalDuration = _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapter"].MILLISECONDS_IN_MINUTE;
-        break;
+/***/ "./node_modules/@rschedule/json-tools/es2015/Schedule.js":
+/*!***************************************************************!*\
+  !*** ./node_modules/@rschedule/json-tools/es2015/Schedule.js ***!
+  \***************************************************************/
+/*! no exports provided */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
-      case 'second':
-        intervalDuration = _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapter"].MILLISECONDS_IN_SECOND;
-        break;
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @rschedule/core/generators */ "./node_modules/@rschedule/core/es2015/generators.js");
+/* harmony import */ var _rschedule_json_tools__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @rschedule/json-tools */ "./node_modules/@rschedule/json-tools/es2015/main.js");
+/* harmony import */ var _rschedule_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @rschedule/core */ "./node_modules/@rschedule/core/es2015/main.js");
 
-      case 'millisecond':
-        intervalDuration = 1;
-        break;
 
-      default:
-        throw new Error('Unexpected `unit` value');
-    }
 
-    const diff = second.valueOf() - first.valueOf();
-    return Math.floor(diff / intervalDuration);
-  })();
 
-  const fn = direction === 'after' ? Math.ceil : Math.floor;
-  difference = fn(difference / interval) * interval;
-  return difference;
-}
+_rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Dates"].prototype.toJSON = function serialize(opts = {}) {
+  const json = {
+    type: 'Dates',
+    dates: this.adapters.map(adapter => adapter.toJSON())
+  };
+  if (!opts.nested) json.timezone = this.timezone;
+  Object(_rschedule_json_tools__WEBPACK_IMPORTED_MODULE_1__["serializeDataToJSON"])(this, json, opts);
+  return json;
+};
 
-class RevFrequencyRule extends FrequencyRule {
-  setToCurrentInterval() {
-    return this.intervalEndDate.subtract(1, 'millisecond');
+_rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Dates"].fromJSON = function parse(json, options = {}) {
+  if (json.type !== 'Dates') {
+    throw new _rschedule_json_tools__WEBPACK_IMPORTED_MODULE_1__["ParseJSONError"]('Invalid Dates JSON');
   }
 
-  intervalDifference(date) {
-    return intervalDifferenceBetweenDates({
-      first: this.firstIntervalStartDate,
-      second: date,
-      unit: this.intervalUnit,
-      interval: this.options.interval,
-      weekStart: this.options.weekStart,
-      direction: 'before'
-    });
-  }
-
-}
-
-const FREQUENCIES = ['MILLISECONDLY', 'SECONDLY', 'MINUTELY', 'HOURLY', 'DAILY', 'WEEKLY', 'MONTHLY', 'YEARLY'];
-const FrequencyRuleModule = {
-  name: 'FrequencyRule',
-  get: processor => {
-    if (processor.options.byMillisecondOfSecond !== undefined || processor.options.frequency !== 'MILLISECONDLY') {
-      return null;
-    }
+  return new _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Dates"]({
+    dates: json.dates.map(date => _rschedule_core__WEBPACK_IMPORTED_MODULE_2__["DateAdapterBase"].adapter.fromJSON(date)),
+    data: typeof options.data === 'function' ? options.data(json) : json.data,
+    timezone: options.timezone || json.timezone
+  });
+};
 
-    if (processor.reverse) return new RevFrequencyRule(processor, processor.end);
-    return new FrequencyRule(processor, processor.start);
-  },
-  normalizeOptions: (options, norm) => {
-    if (!FREQUENCIES.includes(options.frequency)) {
-      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"](`"frequency" must be one of ${JSON.stringify(FREQUENCIES)}`);
-    }
+Object(_rschedule_json_tools__WEBPACK_IMPORTED_MODULE_1__["registerJSONSerializerFn"])('Dates', _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Dates"].fromJSON);
 
-    if (options.interval !== undefined) {
-      if (!Number.isInteger(options.interval)) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"interval" expects a whole number');
-      }
+_rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Rule"].prototype.toJSON = function serialize(opts = {}) {
+  const json = {
+    type: 'Rule',
+    config: Object.assign(Object.assign({}, Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_2__["cloneJSON"])(this.options)), {
+      start: this.normalizeDateInput(this.options.start).toJSON()
+    })
+  };
 
-      if (options.interval < 1) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"interval" cannot be less than 1');
-      }
-    }
+  if (this.options.end) {
+    json.config.end = this.normalizeDateInput(this.options.end).toJSON();
+  }
 
-    if (options.weekStart !== undefined) {
-      if (!_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapter"].WEEKDAYS.includes(options.weekStart)) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"](`"weekStart" must be one of ${JSON.stringify(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapter"].WEEKDAYS)}`);
-      }
-    }
+  if (!opts.nested) json.timezone = this.timezone;
+  Object(_rschedule_json_tools__WEBPACK_IMPORTED_MODULE_1__["serializeDataToJSON"])(this, json, opts);
+  return json;
+};
 
-    norm.frequency = options.frequency;
-    norm.interval = options.interval || 1;
-    norm.weekStart = options.weekStart || 'MO';
-  },
-  deps: () => [FrequencyRuleModule]
+_rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Rule"].fromJSON = function fromJSON(json, options = {}) {
+  const config = Object.assign(Object.assign({}, json.config), {
+    start: _rschedule_core__WEBPACK_IMPORTED_MODULE_2__["DateAdapterBase"].adapter.fromJSON(json.config.start),
+    end: json.config.end && _rschedule_core__WEBPACK_IMPORTED_MODULE_2__["DateAdapterBase"].adapter.fromJSON(json.config.end)
+  });
+  return new _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Rule"](config, {
+    data: typeof options.data === 'function' ? options.data(json) : json.data,
+    timezone: options.timezone || json.timezone
+  });
 };
 
-function ruleOptionFilled(option) {
-  return Array.isArray(option) && option.length > 0;
-}
+Object(_rschedule_json_tools__WEBPACK_IMPORTED_MODULE_1__["registerJSONSerializerFn"])('Rule', _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Rule"].fromJSON);
 
-const freqCache = new WeakMap();
+_rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Schedule"].prototype.toJSON = function serialize(opts = {}) {
+  const json = {
+    type: 'Schedule',
+    rrules: this.rrules.map(rule => rule.toJSON(Object.assign(Object.assign({}, opts), {
+      nested: true
+    }))),
+    exrules: this.exrules.map(rule => rule.toJSON(Object.assign(Object.assign({}, opts), {
+      nested: true
+    }))),
+    rdates: this.rdates.toJSON(Object.assign(Object.assign({}, opts), {
+      nested: true
+    })),
+    exdates: this.exdates.toJSON(Object.assign(Object.assign({}, opts), {
+      nested: true
+    }))
+  };
+  if (!opts.nested) json.timezone = this.timezone;
+  Object(_rschedule_json_tools__WEBPACK_IMPORTED_MODULE_1__["serializeDataToJSON"])(this, json, opts);
+  return json;
+};
 
-class RecurrenceRuleBase extends RecurrenceRule {
-  constructor(processor) {
-    super(processor);
+_rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Schedule"].fromJSON = function parse(json, options = {}) {
+  if (json.type !== 'Schedule') {
+    throw new _rschedule_json_tools__WEBPACK_IMPORTED_MODULE_1__["ParseJSONError"]('Invalid Schedule JSON');
+  }
 
-    if (!freqCache.has(this.processor)) {
-      freqCache.set(this.processor, new FrequencyRule(processor, processor.start));
-    }
+  return new _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Schedule"]({
+    rrules: json.rrules.map(rule => _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Rule"].fromJSON(rule, Object.assign({
+      timezone: json.timezone
+    }, options))),
+    exrules: json.exrules.map(rule => _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Rule"].fromJSON(rule, Object.assign({
+      timezone: json.timezone
+    }, options))),
+    rdates: _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Dates"].fromJSON(json.rdates, Object.assign({
+      timezone: json.timezone
+    }, options)),
+    exdates: _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Dates"].fromJSON(json.exdates, Object.assign({
+      timezone: json.timezone
+    }, options)),
+    data: typeof options.data === 'function' ? options.data(json) : json.data,
+    timezone: options.timezone || json.timezone
+  });
+};
 
-    this.frequency = freqCache.get(this.processor);
-  }
+Object(_rschedule_json_tools__WEBPACK_IMPORTED_MODULE_1__["registerJSONSerializerFn"])('Schedule', _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Schedule"].fromJSON);
 
-  validateDate(arg) {
-    return this.frequency.validateDate(arg);
-  }
+/***/ }),
 
-}
+/***/ "./node_modules/@rschedule/json-tools/es2015/main.js":
+/*!***********************************************************!*\
+  !*** ./node_modules/@rschedule/json-tools/es2015/main.js ***!
+  \***********************************************************/
+/*! exports provided: ParseJSONError, SerializeJSONError, registerJSONSerializerFn, serializeDataToJSON */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
-class RevRecurrenceRuleBase extends RecurrenceRule {
-  constructor(processor) {
-    super(processor);
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ParseJSONError", function() { return ParseJSONError; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SerializeJSONError", function() { return SerializeJSONError; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerJSONSerializerFn", function() { return registerJSONSerializerFn; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "serializeDataToJSON", function() { return serializeDataToJSON; });
+/* harmony import */ var _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @rschedule/core/generators */ "./node_modules/@rschedule/core/es2015/generators.js");
 
-    if (!freqCache.has(this.processor)) {
-      freqCache.set(this.processor, new RevFrequencyRule(processor, processor.end));
-    }
 
-    this.frequency = freqCache.get(this.processor);
-  }
+class ParseJSONError extends Error {}
 
-  validateDate(arg) {
-    return this.frequency.validateDate(arg);
-  }
+class SerializeJSONError extends Error {}
 
-}
-/**
- * Contains shared logic for ByHourOfDay, ByMinuteOfHour,
- * BySecondOfMinute, and ByMillisecondOfSecond reverse rule pipes
- */
+_rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["OccurrenceGenerator"].JSON_FN_MAP = new Map();
 
+_rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["OccurrenceGenerator"].prototype.toJSON = function serialize(opts) {
+  throw new SerializeJSONError(`To support smaller bundles, ${this.constructor.name}#toJSON() ` + `must be manually added. See "@rschedule/json-tools" in the rSchedule docs.`);
+};
 
-class RevByTimeOfUnitRule extends RevRecurrenceRuleBase {
-  run(date) {
-    // e.g. const currentTime = date.get('hour');
-    const currentTime = date.get(this.granularity); // e.g. for (const time of this.options.byHourOfDay) {
+_rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["OccurrenceGenerator"].fromJSON = function parse(json, options) {
+  if (typeof json !== 'object' || json === null) {
+    throw new ParseJSONError(`Invalid json "${json}"`);
+  }
 
-    for (const time of this.option) {
-      if (currentTime < time) continue;
+  const fn = _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["OccurrenceGenerator"].JSON_FN_MAP.get(json.type);
 
-      if (currentTime === time) {
-        return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ValidDateTime"](date));
-      } // e.g. return this.nextValidDate(args, date.endGranularity('day').set('hour', time));
+  if (!fn) {
+    throw new ParseJSONError(`Unknown rSchedule object type "${json.type}". Have you added a json serializer ` + `for "${json.type}"? ` + `See "@rschedule/json-tools" in the rSchedule docs.`);
+  }
 
+  return fn(json, options);
+};
 
-      return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](date.endGranularity(this.baseGranularity).set(this.granularity, time)));
-    }
+function serializeDataToJSON(gen, json, opt) {
+  if (!opt.data) return;
 
-    return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](date // e.g. .endGranularity('day')
-    .endGranularity(this.baseGranularity) // e.g. .subtract(1, 'day')
-    .subtract(1, this.baseGranularity) // e.g. .set('hour', this.options.byHourOfDay[0]);
-    .set(this.granularity, this.option[0])));
+  if (opt.data === true) {
+    json.data = gen.data;
+  } else {
+    json.data = opt.data(gen);
   }
 
+  if (json.data === undefined) delete json.data;
 }
 
-class RevByMillisecondOfSecondRule extends RevByTimeOfUnitRule {
-  constructor() {
-    super(...arguments);
-    this.baseGranularity = 'second';
-    this.granularity = 'millisecond';
-    this.option = this.options.byMillisecondOfSecond.slice().reverse();
-  }
-
+function registerJSONSerializerFn(name, fn) {
+  _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["OccurrenceGenerator"].JSON_FN_MAP.set(name, fn);
 }
-/**
- * Contains shared logic for ByHourOfDay, ByMinuteOfHour,
- * BySecondOfMinute, and ByMillisecondOfSecond rule pipes
- */
 
 
-class ByTimeOfUnitRule extends RecurrenceRuleBase {
-  run(date) {
-    // e.g. const currentTime = date.get('hour');
-    const currentTime = date.get(this.granularity); // e.g. for (const time of this.options.byHourOfDay) {
 
-    for (const time of this.option) {
-      if (currentTime > time) continue;
+/***/ }),
 
-      if (currentTime === time) {
-        return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ValidDateTime"](date));
-      } // e.g. return this.nextValidDate(args, date.granularity('day').set('hour', time));
+/***/ "./node_modules/@rschedule/standard-date-adapter/es2015/main.js":
+/*!**********************************************************************!*\
+  !*** ./node_modules/@rschedule/standard-date-adapter/es2015/main.js ***!
+  \**********************************************************************/
+/*! exports provided: StandardDateAdapter */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StandardDateAdapter", function() { return StandardDateAdapter; });
+/* harmony import */ var _rschedule_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @rschedule/core */ "./node_modules/@rschedule/core/es2015/main.js");
 
 
-      return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](date.granularity(this.baseGranularity).set(this.granularity, time)));
+class StandardDateAdapter extends _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapterBase"] {
+  constructor(date, options = {}) {
+    super(undefined, options);
+
+    if (!['UTC', null, undefined].includes(options.timezone)) {
+      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateAdapterError"](`StandardDateAdapter only supports "UTC" and ` + `local time zones but "${options.timezone}" was provided.`);
     }
 
-    return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](date // e.g. .granularity('day')
-    .granularity(this.baseGranularity) // e.g. .add(1, 'day')
-    .add(1, this.baseGranularity) // e.g. .set('hour', this.options.byHourOfDay[0]);
-    .set(this.granularity, this.option[0])));
+    this._date = new Date(date);
+    this.timezone = options.timezone !== undefined ? options.timezone : null;
+    this.assertIsValid();
   }
 
-}
+  static isDate(object) {
+    return Object.prototype.toString.call(object) === '[object Date]';
+  }
 
-class ByMillisecondOfSecondRule extends ByTimeOfUnitRule {
-  constructor() {
-    super(...arguments);
-    this.baseGranularity = 'second';
-    this.granularity = 'millisecond';
-    this.option = this.options.byMillisecondOfSecond;
+  static fromDate(date, options) {
+    return new StandardDateAdapter(date, options);
   }
 
-}
+  static fromJSON(json) {
+    const args = [json.year, json.month - 1, json.day, json.hour, json.minute, json.second, json.millisecond];
 
-const ByMillisecondOfSecondRuleModule = {
-  name: 'ByMillisecondOfSecond',
-  get: processor => {
-    if (processor.options.byMillisecondOfSecond === undefined) return null;
-    if (processor.reverse) return new RevByMillisecondOfSecondRule(processor);
-    return new ByMillisecondOfSecondRule(processor);
-  },
-  normalizeOptions: (options, norm) => {
-    if (options.byMillisecondOfSecond !== undefined) {
-      if (!ruleOptionFilled(options.byMillisecondOfSecond)) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byMillisecondOfSecond" expects a non-empty array');
-      }
+    switch (json.timezone) {
+      case 'UTC':
+        {
+          return new StandardDateAdapter(new Date(Date.UTC(...args)), {
+            timezone: 'UTC',
+            duration: json.duration
+          });
+        }
 
-      if (options.byMillisecondOfSecond.some(num => num < 0 || num > 999)) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byMillisecondOfSecond" values must be >= 0 && <= 999');
-      }
+      case null:
+        {
+          return new StandardDateAdapter(new Date(...args), {
+            timezone: null,
+            duration: json.duration
+          });
+        }
 
-      norm.byMillisecondOfSecond = options.byMillisecondOfSecond;
-      norm.byMillisecondOfSecond.sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["numberSortComparer"]);
-    } else if (options.frequency !== 'MILLISECONDLY') {
-      norm.byMillisecondOfSecond = [norm.start.get('millisecond')];
+      default:
+        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateAdapterError"]('The `StandardDateAdapter` only supports datetimes in ' + `UTC or LOCAL (null) time. You provided a JSON object ` + `with timezone "${json.timezone}".`);
     }
-  },
-  deps: () => [FrequencyRuleModule, ByMillisecondOfSecondRuleModule]
-};
-
-class RevBySecondOfMinuteRule extends RevByTimeOfUnitRule {
-  constructor() {
-    super(...arguments);
-    this.baseGranularity = 'minute';
-    this.granularity = 'second';
-    this.option = this.options.bySecondOfMinute.slice().reverse();
   }
 
-}
+  static fromDateTime(datetime) {
+    const date = StandardDateAdapter.fromJSON(datetime.toJSON());
+    date.generators.push(...datetime.generators);
+    return date;
+  }
 
-class BySecondOfMinuteRule extends ByTimeOfUnitRule {
-  constructor() {
-    super(...arguments);
-    this.baseGranularity = 'minute';
-    this.granularity = 'second';
-    this.option = this.options.bySecondOfMinute;
+  get date() {
+    return new Date(this._date);
   }
 
-}
+  get end() {
+    if (!this.duration) return;
+    if (this._end) return this._end;
+    this._end = StandardDateAdapter.fromDateTime(this.toDateTime().add(this.duration, 'millisecond')).date;
+    return this._end;
+  }
 
-const BySecondOfMinuteRuleModule = {
-  name: 'BySecondOfMinute',
-  get: processor => {
-    if (processor.options.bySecondOfMinute === undefined) return null;
-    if (processor.reverse) return new RevBySecondOfMinuteRule(processor);
-    return new BySecondOfMinuteRule(processor);
-  },
-  normalizeOptions: (options, norm) => {
-    if (options.bySecondOfMinute !== undefined) {
-      if (!ruleOptionFilled(options.bySecondOfMinute)) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"bySecondOfMinute" expects a non-empty array');
+  set(prop, value) {
+    if (prop === 'timezone') {
+      if (this.timezone === value) return this;else {
+        return new StandardDateAdapter(this._date, {
+          timezone: value,
+          duration: this.duration,
+          generators: this.generators
+        });
       }
-
-      if (options.bySecondOfMinute.some(num => num < 0 || num > 60)) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"bySecondOfMinute" values must be >= 0 && <= 60');
+    } else if (prop === 'duration') {
+      if (this.duration === value) return this;else {
+        return new StandardDateAdapter(this._date, {
+          timezone: this.timezone,
+          duration: value,
+          generators: this.generators
+        });
       }
-
-      norm.bySecondOfMinute = options.bySecondOfMinute;
-      norm.bySecondOfMinute.sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["numberSortComparer"]);
-    } else if (!['SECONDLY', 'MILLISECONDLY'].includes(options.frequency)) {
-      norm.bySecondOfMinute = [norm.start.get('second')];
     }
-  },
-  deps: () => [FrequencyRuleModule, BySecondOfMinuteRuleModule, ByMillisecondOfSecondRuleModule]
-};
 
-class RevByMinuteOfHourRule extends RevByTimeOfUnitRule {
-  constructor() {
-    super(...arguments);
-    this.baseGranularity = 'hour';
-    this.granularity = 'minute';
-    this.option = this.options.byMinuteOfHour.slice().reverse();
+    throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ArgumentError"](`Unknown prop "${prop}" for StandardDateAdapter#set()`);
   }
 
-}
-
-class ByMinuteOfHourRule extends ByTimeOfUnitRule {
-  constructor() {
-    super(...arguments);
-    this.baseGranularity = 'hour';
-    this.granularity = 'minute';
-    this.option = this.options.byMinuteOfHour;
+  valueOf() {
+    return this._date.valueOf();
   }
 
-}
-
-const ByMinuteOfHourRuleModule = {
-  name: 'ByMinuteOfHour',
-  get: processor => {
-    if (processor.options.byMinuteOfHour === undefined) return null;
-    if (processor.reverse) return new RevByMinuteOfHourRule(processor);
-    return new ByMinuteOfHourRule(processor);
-  },
-  normalizeOptions: (options, norm) => {
-    if (options.byMinuteOfHour !== undefined) {
-      if (!ruleOptionFilled(options.byMinuteOfHour)) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byMinuteOfHour" expects a non-empty array');
-      }
+  toJSON() {
+    let json;
 
-      if (options.byMinuteOfHour.some(num => num < 0 || num > 59)) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byMinuteOfHour" values must be >= 0 && <= 59');
-      }
+    if (this.timezone === 'UTC') {
+      json = {
+        timezone: this.timezone,
+        year: this._date.getUTCFullYear(),
+        month: this._date.getUTCMonth() + 1,
+        day: this._date.getUTCDate(),
+        hour: this._date.getUTCHours(),
+        minute: this._date.getUTCMinutes(),
+        second: this._date.getUTCSeconds(),
+        millisecond: this._date.getUTCMilliseconds()
+      };
+    } else {
+      json = {
+        timezone: this.timezone,
+        year: this._date.getFullYear(),
+        month: this._date.getMonth() + 1,
+        day: this._date.getDate(),
+        hour: this._date.getHours(),
+        minute: this._date.getMinutes(),
+        second: this._date.getSeconds(),
+        millisecond: this._date.getMilliseconds()
+      };
+    }
 
-      norm.byMinuteOfHour = options.byMinuteOfHour;
-      norm.byMinuteOfHour.sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["numberSortComparer"]);
-    } else if (!['MINUTELY', 'SECONDLY', 'MILLISECONDLY'].includes(options.frequency)) {
-      norm.byMinuteOfHour = [norm.start.get('minute')];
+    if (this.duration) {
+      json.duration = this.duration;
     }
-  },
-  deps: () => [FrequencyRuleModule, ByMinuteOfHourRuleModule, BySecondOfMinuteRuleModule, ByMillisecondOfSecondRuleModule]
-};
 
-class RevByHourOfDayRule extends RevByTimeOfUnitRule {
-  constructor() {
-    super(...arguments);
-    this.baseGranularity = 'day';
-    this.granularity = 'hour';
-    this.option = this.options.byHourOfDay.slice().reverse();
+    return json;
   }
 
-}
+  assertIsValid() {
+    if (!StandardDateAdapter.isDate(this._date) || isNaN(this._date.valueOf())) {
+      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateAdapterError"]('StandardDateAdapter has invalid date.');
+    } else if (![null, 'UTC'].includes(this.timezone)) {
+      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateAdapterError"]('StandardDateAdapter only supports local (null) and UTC timezones but ' + `"${this.timezone}" was specified.`);
+    } else if (this.duration && this.duration <= 0) {
+      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateAdapterError"]('If provided, duration must be greater than 0.');
+    }
 
-class ByHourOfDayRule extends ByTimeOfUnitRule {
-  constructor() {
-    super(...arguments);
-    this.baseGranularity = 'day';
-    this.granularity = 'hour';
-    this.option = this.options.byHourOfDay;
+    return true;
   }
 
 }
 
-const ByHourOfDayRuleModule = {
-  name: 'ByHourOfDay',
-  get: processor => {
-    if (processor.options.byHourOfDay === undefined) return null;
-    if (processor.reverse) return new RevByHourOfDayRule(processor);
-    return new ByHourOfDayRule(processor);
-  },
-  normalizeOptions: (options, norm) => {
-    if (options.byHourOfDay !== undefined) {
-      if (!ruleOptionFilled(options.byHourOfDay)) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byHourOfDay" expects a non-empty array');
-      }
+StandardDateAdapter.hasTimezoneSupport = false;
 
-      if (options.byHourOfDay.some(num => num < 0 || num > 23)) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byHourOfDay" values must be >= 0 && <= 23');
-      }
 
-      norm.byHourOfDay = options.byHourOfDay;
-      norm.byHourOfDay.sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["numberSortComparer"]);
-    } else if (['YEARLY', 'MONTHLY', 'WEEKLY', 'DAILY'].includes(options.frequency)) {
-      norm.byHourOfDay = [norm.start.get('hour')];
-    }
-  },
-  deps: () => [FrequencyRuleModule, ByHourOfDayRuleModule, ByMinuteOfHourRuleModule, BySecondOfMinuteRuleModule, ByMillisecondOfSecondRuleModule]
-};
+/***/ }),
 
-function getNextWeekday(date, weekday) {
-  return date.add(Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["getDifferenceBetweenWeekdays"])(date.get('weekday'), weekday), 'day');
-}
+/***/ "./node_modules/@rschedule/standard-date-adapter/es2015/setup.js":
+/*!***********************************************************************!*\
+  !*** ./node_modules/@rschedule/standard-date-adapter/es2015/setup.js ***!
+  \***********************************************************************/
+/*! no exports provided */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
-function getNthWeekdayOfMonth(date, weekday, nth) {
-  let base = date.set('day', 1);
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _rschedule_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @rschedule/core */ "./node_modules/@rschedule/core/es2015/main.js");
+/* harmony import */ var _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @rschedule/core/generators */ "./node_modules/@rschedule/core/es2015/generators.js");
+/* harmony import */ var _rschedule_core_rules_ICAL_RULES__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @rschedule/core/rules/ICAL_RULES */ "./node_modules/@rschedule/core/es2015/rules.js");
+/* harmony import */ var _rschedule_standard_date_adapter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @rschedule/standard-date-adapter */ "./node_modules/@rschedule/standard-date-adapter/es2015/main.js");
 
-  if (nth < 0) {
-    base = base.add(1, 'month');
-  }
 
-  base = getNextWeekday(base, weekday); // when nth is negative, adding it will act as subtraction
 
-  return nth < 0 ? base.add(nth, 'week') : base.add(nth - 1, 'week');
-}
 
-class ByDayOfMonthRule extends RecurrenceRuleBase {
-  run(date) {
-    const normalizedByDayOfMonth = normalizeByDayOfMonth(date, this.options.byDayOfMonth, this.options.byDayOfWeek);
-    const currentDay = date.get('day');
+_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapterBase"].adapter = _rschedule_standard_date_adapter__WEBPACK_IMPORTED_MODULE_3__["StandardDateAdapter"];
+_rschedule_core_generators__WEBPACK_IMPORTED_MODULE_1__["Rule"].recurrenceRules = _rschedule_core_rules_ICAL_RULES__WEBPACK_IMPORTED_MODULE_2__["ICAL_RULES"];
 
-    for (const day of normalizedByDayOfMonth) {
-      if (currentDay > day) continue;
-
-      if (currentDay === day) {
-        return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ValidDateTime"](date));
-      }
-
-      return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](date.granularity('month').set('day', day)));
-    }
-
-    let next;
-    let nextMonth = date;
-    let index = 0;
-
-    while (!next && index < 30) {
-      nextMonth = nextMonth.granularity('month').add(1, 'month');
-      next = normalizeByDayOfMonth(nextMonth, this.options.byDayOfMonth, this.options.byDayOfWeek)[0];
-      index++;
-    }
-
-    if (index >= 13) {
-      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RecurrenceRuleError"]('byDayOfMonth Infinite while loop');
-    }
+/***/ }),
 
-    return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](nextMonth.set('day', next)));
-  }
+/***/ "./node_modules/accounting/accounting.js":
+/*!***********************************************!*\
+  !*** ./node_modules/accounting/accounting.js ***!
+  \***********************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-}
-/**
- * Does a few things:
+/*!
+ * accounting.js v0.4.2
+ * Copyright 2014 Open Exchange Rates
  *
- * 1. filters out byDayOfMonth entries which are not applicable
- *    to current month
- * 2. negative entries to positive ones
- * 3. if a byDayOfWeek option is given, removes days which are
- *    not on the correct day of the week
+ * Freely distributable under the MIT license.
+ * Portions of accounting.js are inspired or borrowed from underscore.js
+ *
+ * Full details and documentation:
+ * http://openexchangerates.github.io/accounting.js/
  */
+(function (root, undefined) {
+  /* --- Setup --- */
+  // Create the local library object, to be exported or referenced globally later
+  var lib = {}; // Current version
 
+  lib.version = '0.4.2';
+  /* --- Exposed settings --- */
+  // The library's settings configuration object. Contains default parameters for
+  // currency and number formatting
 
-function normalizeByDayOfMonth(date, byDayOfMonth, byDayOfWeek) {
-  const lengthOfMonth = date.endGranularity('month').get('day');
-  let normalizedByDayOfMonth = byDayOfMonth.filter(day => lengthOfMonth >= Math.abs(day)).map(day => day > 0 ? day : lengthOfMonth + day + 1);
+  lib.settings = {
+    currency: {
+      symbol: "$",
+      // default currency symbol is '$'
+      format: "%s%v",
+      // controls output: %s = symbol, %v = value (can be object, see docs)
+      decimal: ".",
+      // decimal point separator
+      thousand: ",",
+      // thousands separator
+      precision: 2,
+      // decimal places
+      grouping: 3 // digit grouping (not implemented yet)
 
-  if (byDayOfWeek) {
-    const base = date.granularity('month');
-    const filteredByDayOfMonth = [];
-    byDayOfWeek.forEach(entry => {
-      if (typeof entry === 'string') {
-        filteredByDayOfMonth.push(...normalizedByDayOfMonth.filter(day => base.set('day', day).get('weekday') === entry));
-        return;
-      }
+    },
+    number: {
+      precision: 0,
+      // default precision on numbers is 0
+      grouping: 3,
+      // digit grouping (not implemented yet)
+      thousand: ",",
+      decimal: "."
+    }
+  };
+  /* --- Internal Helper Methods --- */
+  // Store reference to possibly-available ECMAScript 5 methods for later
 
-      const nthWeekdayOfMonth = getNthWeekdayOfMonth(date, ...entry).get('day');
+  var nativeMap = Array.prototype.map,
+      nativeIsArray = Array.isArray,
+      toString = Object.prototype.toString;
+  /**
+   * Tests whether supplied parameter is a string
+   * from underscore.js
+   */
 
-      if (normalizedByDayOfMonth.includes(nthWeekdayOfMonth)) {
-        filteredByDayOfMonth.push(nthWeekdayOfMonth);
-      }
-    });
-    normalizedByDayOfMonth = Array.from(new Set(filteredByDayOfMonth));
+  function isString(obj) {
+    return !!(obj === '' || obj && obj.charCodeAt && obj.substr);
   }
+  /**
+   * Tests whether supplied parameter is an array
+   * from underscore.js, delegates to ECMA5's native Array.isArray
+   */
 
-  return normalizedByDayOfMonth.sort((a, b) => {
-    if (a > b) return 1;
-    if (a < b) return -1;else return 0;
-  });
-}
-
-class RevByDayOfMonthRule extends RevRecurrenceRuleBase {
-  run(date) {
-    const normalizedByDayOfMonth = normalizeByDayOfMonth(date, this.options.byDayOfMonth, this.options.byDayOfWeek).reverse();
-    const currentDay = date.get('day');
-
-    for (const day of normalizedByDayOfMonth) {
-      if (currentDay < day) continue;
-
-      if (currentDay === day) {
-        return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ValidDateTime"](date));
-      }
-
-      return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](date.endGranularity('month').set('day', day)));
-    }
-
-    let next;
-    let nextMonth = date;
-    let index = 0;
 
-    while (!next && index < 30) {
-      nextMonth = nextMonth.endGranularity('month').subtract(1, 'month');
-      next = normalizeByDayOfMonth(nextMonth, this.options.byDayOfMonth, this.options.byDayOfWeek).pop();
-      index++;
-    }
+  function isArray(obj) {
+    return nativeIsArray ? nativeIsArray(obj) : toString.call(obj) === '[object Array]';
+  }
+  /**
+   * Tests whether supplied parameter is a true object
+   */
 
-    if (index >= 13) {
-      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RecurrenceRuleError"]('byDayOfMonth Infinite while loop');
-    }
 
-    return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](nextMonth.set('day', next)));
+  function isObject(obj) {
+    return obj && toString.call(obj) === '[object Object]';
   }
+  /**
+   * Extends an object with a defaults object, similar to underscore's _.defaults
+   *
+   * Used for abstracting parameter handling from API methods
+   */
 
-}
-
-const ByDayOfMonthRuleModule = {
-  name: 'ByDayOfMonth',
-  get: processor => {
-    if (processor.options.byDayOfMonth === undefined) return null;
-    if (processor.reverse) return new RevByDayOfMonthRule(processor);
-    return new ByDayOfMonthRule(processor);
-  },
-  normalizeOptions: (options, norm) => {
-    if (options.byDayOfMonth !== undefined) {
-      if (options.frequency === 'WEEKLY') {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('when "frequency" is "WEEKLY", "byDayOfMonth" cannot be present');
-      }
 
-      if (!ruleOptionFilled(options.byDayOfMonth)) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byDayOfMonth" expects a non-empty array');
-      }
+  function defaults(object, defs) {
+    var key;
+    object = object || {};
+    defs = defs || {}; // Iterate over object non-prototype properties:
 
-      if (options.byDayOfMonth.some(num => num === 0 || num < -31 || num > 31)) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byDayOfMonth" values must be `num !== 0 && num <= 31 && num >= -31`');
+    for (key in defs) {
+      if (defs.hasOwnProperty(key)) {
+        // Replace values with defaults only if undefined (allow empty/zero values):
+        if (object[key] == null) object[key] = defs[key];
       }
-
-      norm.byDayOfMonth = options.byDayOfMonth.slice();
-    } else if (!(ruleOptionFilled(options.byDayOfWeek) || ruleOptionFilled(options.byDayOfYear)) && ['YEARLY', 'MONTHLY'].includes(options.frequency)) {
-      norm.byDayOfMonth = [norm.start.get('day')];
     }
-  },
-  deps: () => [FrequencyRuleModule, ByDayOfMonthRuleModule, ByHourOfDayRuleModule, ByMinuteOfHourRuleModule, BySecondOfMinuteRuleModule, ByMillisecondOfSecondRuleModule]
-};
-
-function getNthWeekdayOfYear(date, weekday, nth) {
-  let base = date.set('month', 1).set('day', 1);
 
-  if (nth < 0) {
-    base = base.add(1, 'year');
+    return object;
   }
+  /**
+   * Implementation of `Array.map()` for iteration loops
+   *
+   * Returns a new Array as a result of calling `iterator` on each array value.
+   * Defers to native Array.map if available
+   */
 
-  base = getNextWeekday(base, weekday); // when nth is negative, adding it will act as subtraction
 
-  return nth < 0 ? base.add(nth, 'week') : base.add(nth - 1, 'week');
-}
+  function map(obj, iterator, context) {
+    var results = [],
+        i,
+        j;
+    if (!obj) return results; // Use native .map method if it exists:
 
-function getPreviousWeekday(date, weekday) {
-  const diff = Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["getDifferenceBetweenWeekdays"])(date.get('weekday'), weekday);
-  return date.subtract(diff === 0 ? 0 : 7 - diff, 'day');
-}
+    if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context); // Fallback for native .map:
 
-class RevByDayOfWeekRule extends RevRecurrenceRuleBase {
-  run(date) {
-    if (this.options.frequency === 'YEARLY') {
-      return this.options.byMonthOfYear === undefined ? this.expandYearly(date) : this.expandMonthly(date);
-    } else if (this.options.frequency === 'MONTHLY') {
-      return this.expandMonthly(date);
+    for (i = 0, j = obj.length; i < j; i++) {
+      results[i] = iterator.call(context, obj[i], i, obj);
     }
 
-    return this.expand(date);
+    return results;
   }
+  /**
+   * Check and normalise the value of precision (must be positive integer)
+   */
 
-  expandYearly(date) {
-    let next = getPrevWeekdaysOfYear(date, this.options.byDayOfWeek)[0];
-    let index = 0;
-    let base = date; // If we can't find a valid date this year,
-    // search the previous year. Only search the past 28 years.
-    // (the calendar repeats on a 28 year cycle, according
-    // to the internet).
-
-    while (!next && index < 28) {
-      index++;
-      base = base.granularity('year').subtract(1, 'millisecond');
-      next = getPrevWeekdaysOfYear(base, this.options.byDayOfWeek)[0];
-    }
-
-    if (!next) {
-      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RecurrenceRuleError"]('The byDayOfWeek rule appears to contain an impossible combination');
-    }
 
-    return this.result(date, next);
+  function checkPrecision(val, base) {
+    val = Math.round(Math.abs(val));
+    return isNaN(val) ? base : val;
   }
+  /**
+   * Parses a format string or object and returns format obj for use in rendering
+   *
+   * `format` is either a string with the default (positive) format, or object
+   * containing `pos` (required), `neg` and `zero` values (or a function returning
+   * either a string or object)
+   *
+   * Either string or format.pos must contain "%v" (value) to be valid
+   */
 
-  expandMonthly(date) {
-    let next = getPrevWeekdaysOfMonth(date, this.options.byDayOfWeek)[0];
-    let index = 0;
-    let base = date; // TODO: performance improvment
-    // If, in the first year, a match isn't found, we should be able to
-    // jumpt to the previous leap year and check that. Or, if already on
-    // a leap year, we can just error immediately.
-    // If we can't find a valid date this month,
-    // search the previous month. Only search the past 4 years
-    // (to account for leap year).
 
-    while (!next && index < 50) {
-      index++;
-      base = base.granularity('month').subtract(1, 'millisecond');
-      next = getPrevWeekdaysOfMonth(base, this.options.byDayOfWeek)[0];
-    }
+  function checkCurrencyFormat(format) {
+    var defaults = lib.settings.currency.format; // Allow function as format parameter (should return string or object):
 
-    if (!next) {
-      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RecurrenceRuleError"]('The byDayOfWeek rule appears to contain an impossible combination');
-    }
+    if (typeof format === "function") format = format(); // Format can be a string, in which case `value` ("%v") must be present:
 
-    return this.result(date, next);
-  }
+    if (isString(format) && format.match("%v")) {
+      // Create and return positive, negative and zero formats:
+      return {
+        pos: format,
+        neg: format.replace("-", "").replace("%v", "-%v"),
+        zero: format
+      }; // If no format, or object is missing valid positive value, use defaults:
+    } else if (!format || !format.pos || !format.pos.match("%v")) {
+      // If defaults is a string, casts it to an object for faster checking next time:
+      return !isString(defaults) ? defaults : lib.settings.currency.format = {
+        pos: defaults,
+        neg: defaults.replace("%v", "-%v"),
+        zero: defaults
+      };
+    } // Otherwise, assume format was fine:
 
-  expand(date) {
-    const next = this.options.byDayOfWeek.map(weekday => getPreviousWeekday(date, weekday)).sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateTimeSortComparer"]).pop();
-    return this.result(date, next);
+
+    return format;
   }
+  /* --- API Methods --- */
 
-  result(date, next) {
-    if (next.isEqual(date)) {
-      return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ValidDateTime"](date));
-    }
+  /**
+   * Takes a string/array of strings, removes all formatting/cruft and returns the raw float value
+   * Alias: `accounting.parse(string)`
+   *
+   * Decimal must be included in the regular expression to match floats (defaults to
+   * accounting.settings.number.decimal), so if the number uses a non-standard decimal 
+   * separator, provide it as the second argument.
+   *
+   * Also matches bracketed negatives (eg. "$ (1.99)" => -1.99)
+   *
+   * Doesn't throw any errors (`NaN`s become 0) but this may change in future
+   */
 
-    return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](next.endGranularity('day')));
-  }
 
-}
-/** For each byDayOfWeek entry, find the previous DateTime */
+  var unformat = lib.unformat = lib.parse = function (value, decimal) {
+    // Recursively unformat arrays:
+    if (isArray(value)) {
+      return map(value, function (val) {
+        return unformat(val, decimal);
+      });
+    } // Fails silently (need decent errors):
 
 
-function getPrevWeekdaysOfYear(date, byDayOfWeek) {
-  const normalizedNthWeekdaysOfYear = byDayOfWeek.filter(entry => Array.isArray(entry)).map(entry => getNthWeekdayOfYear(date, ...entry));
-  const normalizedNextWeekdays = byDayOfWeek.filter(entry => typeof entry === 'string').map(weekday => getPreviousWeekday(date, weekday)).filter(entry => entry.get('year') === date.get('year'));
-  return Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["uniqDateTimes"])([...normalizedNthWeekdaysOfYear, ...normalizedNextWeekdays]).filter(entry => entry.isBeforeOrEqual(date)).sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateTimeSortComparer"]).reverse();
-}
-/** For each byDayOfWeek entry, find the previous DateTime */
+    value = value || 0; // Return the value as-is if it's already a number:
 
+    if (typeof value === "number") return value; // Default decimal point comes from settings, but could be set to eg. "," in opts:
 
-function getPrevWeekdaysOfMonth(date, byDayOfWeek) {
-  const normalizedNthWeekdaysOfMonth = byDayOfWeek.filter(entry => Array.isArray(entry)).map(entry => getNthWeekdayOfMonth(date, ...entry));
-  const normalizedNextWeekdays = byDayOfWeek.filter(entry => typeof entry === 'string').map(weekday => getPreviousWeekday(date, weekday)).filter(entry => entry.get('year') === date.get('year') && entry.get('month') === date.get('month'));
-  return Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["uniqDateTimes"])([...normalizedNthWeekdaysOfMonth, ...normalizedNextWeekdays]).filter(entry => entry.isBeforeOrEqual(date)).sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateTimeSortComparer"]).reverse();
-}
+    decimal = decimal || lib.settings.number.decimal; // Build regex to strip out everything except digits, decimal point and minus sign:
 
-class ByDayOfWeekRule extends RecurrenceRuleBase {
-  run(date) {
-    if (this.options.frequency === 'YEARLY') {
-      return this.options.byMonthOfYear === undefined ? this.expandYearly(date) : this.expandMonthly(date);
-    } else if (this.options.frequency === 'MONTHLY') {
-      return this.expandMonthly(date);
-    }
+    var regex = new RegExp("[^0-9-" + decimal + "]", ["g"]),
+        unformatted = parseFloat(("" + value).replace(/\((?=\d+)(.*)\)/, "-$1") // replace bracketed values with negatives
+    .replace(regex, '') // strip out any cruft
+    .replace(decimal, '.') // make sure decimal point is standard
+    ); // This will fail silently which may cause trouble, let's wait and see:
 
-    return this.expand(date);
-  }
+    return !isNaN(unformatted) ? unformatted : 0;
+  };
+  /**
+   * Implementation of toFixed() that treats floats more like decimals
+   *
+   * Fixes binary rounding issues (eg. (0.615).toFixed(2) === "0.61") that present
+   * problems for accounting- and finance-related software.
+   */
 
-  expandYearly(date) {
-    let next = getNextWeekdaysOfYear(date, this.options.byDayOfWeek)[0];
-    let index = 0;
-    let base = date; // If we can't find a valid date this year,
-    // search next year. Only search the next 28 years.
-    // (the calendar repeats on a 28 year cycle, according
-    // to the internet).
 
-    while (!next && index < 28) {
-      index++;
-      base = base.granularity('year').add(1, 'year');
-      next = getNextWeekdaysOfYear(base, this.options.byDayOfWeek)[0];
-    }
+  var toFixed = lib.toFixed = function (value, precision) {
+    precision = checkPrecision(precision, lib.settings.number.precision);
+    var exponentialForm = Number(lib.unformat(value) + 'e' + precision);
+    var rounded = Math.round(exponentialForm);
+    var finalResult = Number(rounded + 'e-' + precision).toFixed(precision);
+    return finalResult;
+  };
+  /**
+   * Format a number, with comma-separated thousands and custom precision/decimal places
+   * Alias: `accounting.format()`
+   *
+   * Localise by overriding the precision and thousand / decimal separators
+   * 2nd parameter `precision` can be an object matching `settings.number`
+   */
 
-    if (!next) {
-      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RecurrenceRuleError"]('The byDayOfWeek rule appears to contain an impossible combination');
-    }
 
-    return this.result(date, next);
-  }
+  var formatNumber = lib.formatNumber = lib.format = function (number, precision, thousand, decimal) {
+    // Resursively format arrays:
+    if (isArray(number)) {
+      return map(number, function (val) {
+        return formatNumber(val, precision, thousand, decimal);
+      });
+    } // Clean up number:
 
-  expandMonthly(date) {
-    let next = getNextWeekdaysOfMonth(date, this.options.byDayOfWeek)[0];
-    let index = 0;
-    let base = date; // TODO: performance improvment
-    // If, in the first year, a match isn't found, we should be able to
-    // jumpt to the next leap year and check that. Or, if already on
-    // a leap year, we can just error immediately.
-    // If we can't find a valid date this month,
-    // search the next month. Only search the next 4 years
-    // (to account for leap year).
 
-    while (!next && index < 50) {
-      index++;
-      base = base.granularity('month').add(1, 'month');
-      next = getNextWeekdaysOfMonth(base, this.options.byDayOfWeek)[0];
-    }
+    number = unformat(number); // Build options object from second param (if object) or all params, extending defaults:
 
-    if (!next) {
-      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RecurrenceRuleError"]('The byDayOfWeek rule appears to contain an impossible combination');
-    }
+    var opts = defaults(isObject(precision) ? precision : {
+      precision: precision,
+      thousand: thousand,
+      decimal: decimal
+    }, lib.settings.number),
+        // Clean up precision
+    usePrecision = checkPrecision(opts.precision),
+        // Do some calc:
+    negative = number < 0 ? "-" : "",
+        base = parseInt(toFixed(Math.abs(number || 0), usePrecision), 10) + "",
+        mod = base.length > 3 ? base.length % 3 : 0; // Format the number:
 
-    return this.result(date, next);
-  }
+    return negative + (mod ? base.substr(0, mod) + opts.thousand : "") + base.substr(mod).replace(/(\d{3})(?=\d)/g, "$1" + opts.thousand) + (usePrecision ? opts.decimal + toFixed(Math.abs(number), usePrecision).split('.')[1] : "");
+  };
+  /**
+   * Format a number into currency
+   *
+   * Usage: accounting.formatMoney(number, symbol, precision, thousandsSep, decimalSep, format)
+   * defaults: (0, "$", 2, ",", ".", "%s%v")
+   *
+   * Localise by overriding the symbol, precision, thousand / decimal separators and format
+   * Second param can be an object matching `settings.currency` which is the easiest way.
+   *
+   * To do: tidy up the parameters
+   */
 
-  expand(date) {
-    const next = this.options.byDayOfWeek.map(weekday => getNextWeekday(date, weekday)).sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateTimeSortComparer"])[0];
-    return this.result(date, next);
-  }
 
-  result(date, next) {
-    if (next.isEqual(date)) {
-      return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ValidDateTime"](date));
-    }
+  var formatMoney = lib.formatMoney = function (number, symbol, precision, thousand, decimal, format) {
+    // Resursively format arrays:
+    if (isArray(number)) {
+      return map(number, function (val) {
+        return formatMoney(val, symbol, precision, thousand, decimal, format);
+      });
+    } // Clean up number:
 
-    return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](next.granularity('day')));
-  }
 
-}
-/** For each byDayOfWeek entry, find the next DateTime */
+    number = unformat(number); // Build options object from second param (if object) or all params, extending defaults:
 
+    var opts = defaults(isObject(symbol) ? symbol : {
+      symbol: symbol,
+      precision: precision,
+      thousand: thousand,
+      decimal: decimal,
+      format: format
+    }, lib.settings.currency),
+        // Check format (returns object with pos, neg and zero):
+    formats = checkCurrencyFormat(opts.format),
+        // Choose which format to use for this value:
+    useFormat = number > 0 ? formats.pos : number < 0 ? formats.neg : formats.zero; // Return with currency symbol added:
 
-function getNextWeekdaysOfYear(date, byDayOfWeek) {
-  const normalizedNthWeekdaysOfYear = byDayOfWeek.filter(entry => Array.isArray(entry)).map(entry => getNthWeekdayOfYear(date, ...entry));
-  const normalizedNextWeekdays = byDayOfWeek.filter(entry => typeof entry === 'string').map(weekday => getNextWeekday(date, weekday)).filter(entry => entry.get('year') === date.get('year'));
-  return Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["uniqDateTimes"])([...normalizedNthWeekdaysOfYear, ...normalizedNextWeekdays]).filter(entry => entry.isAfterOrEqual(date)).sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateTimeSortComparer"]);
-}
-/** For each byDayOfWeek entry, find the next DateTime */
+    return useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(number), checkPrecision(opts.precision), opts.thousand, opts.decimal));
+  };
+  /**
+   * Format a list of numbers into an accounting column, padding with whitespace
+   * to line up currency symbols, thousand separators and decimals places
+   *
+   * List should be an array of numbers
+   * Second parameter can be an object containing keys that match the params
+   *
+   * Returns array of accouting-formatted number strings of same length
+   *
+   * NB: `white-space:pre` CSS rule is required on the list container to prevent
+   * browsers from collapsing the whitespace in the output strings.
+   */
 
 
-function getNextWeekdaysOfMonth(date, byDayOfWeek) {
-  const normalizedNthWeekdaysOfMonth = byDayOfWeek.filter(entry => Array.isArray(entry)).map(entry => getNthWeekdayOfMonth(date, ...entry));
-  const normalizedNextWeekdays = byDayOfWeek.filter(entry => typeof entry === 'string').map(weekday => getNextWeekday(date, weekday)).filter(entry => entry.get('year') === date.get('year') && entry.get('month') === date.get('month'));
-  return Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["uniqDateTimes"])([...normalizedNthWeekdaysOfMonth, ...normalizedNextWeekdays]).filter(entry => entry.isAfterOrEqual(date)).sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["dateTimeSortComparer"]);
-}
+  lib.formatColumn = function (list, symbol, precision, thousand, decimal, format) {
+    if (!list || !isArray(list)) return []; // Build options object from second param (if object) or all params, extending defaults:
 
-const ByDayOfWeekRuleModule = {
-  name: 'ByDayOfWeek',
-  get: processor => {
-    if (processor.options.byDayOfWeek === undefined) return null;
-    if (processor.reverse) return new RevByDayOfWeekRule(processor);
-    return new ByDayOfWeekRule(processor);
-  },
-  normalizeOptions: (options, norm) => {
-    if (options.byDayOfWeek !== undefined) {
-      if (!ruleOptionFilled(options.byDayOfWeek)) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byDayOfWeek" expects a non-empty array');
-      }
-
-      const invalidWeeday = options.byDayOfWeek.find(day => Array.isArray(day) ? !_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapter"].WEEKDAYS.includes(day[0]) : !_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapter"].WEEKDAYS.includes(day));
+    var opts = defaults(isObject(symbol) ? symbol : {
+      symbol: symbol,
+      precision: precision,
+      thousand: thousand,
+      decimal: decimal,
+      format: format
+    }, lib.settings.currency),
+        // Check format (returns object with pos, neg and zero), only need pos for now:
+    formats = checkCurrencyFormat(opts.format),
+        // Whether to pad at start of string or after currency symbol:
+    padAfterSymbol = formats.pos.indexOf("%s") < formats.pos.indexOf("%v") ? true : false,
+        // Store value for the length of the longest string in the column:
+    maxLength = 0,
+        // Format the list according to options, store the length of the longest string:
+    formatted = map(list, function (val, i) {
+      if (isArray(val)) {
+        // Recursively format columns if list is a multi-dimensional array:
+        return lib.formatColumn(val, opts);
+      } else {
+        // Clean up the value
+        val = unformat(val); // Choose which format to use for this value (pos, neg or zero):
 
-      if (invalidWeeday) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"](`"byDayOfWeek" expects weedays in the form ` + `${JSON.stringify(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapter"].WEEKDAYS)} but "${invalidWeeday}" was provided`);
+        var useFormat = val > 0 ? formats.pos : val < 0 ? formats.neg : formats.zero,
+            // Format this value, push into formatted list and save the length:
+        fVal = useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(val), checkPrecision(opts.precision), opts.thousand, opts.decimal));
+        if (fVal.length > maxLength) maxLength = fVal.length;
+        return fVal;
       }
+    }); // Pad each number in the list and send back the column of numbers:
 
-      if (!['YEARLY', 'MONTHLY'].includes(options.frequency) && options.byDayOfWeek.some(weekday => Array.isArray(weekday))) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byDayOfWeek" can only include a numeric value (i.e. `[string, number]`) when the "frequency" is ' + 'either "MONTHLY" or "YEARLY"');
+    return map(formatted, function (val, i) {
+      // Only if this is a string (not a nested array, which would have already been padded):
+      if (isString(val) && val.length < maxLength) {
+        // Depending on symbol position, pad after symbol or at index 0:
+        return padAfterSymbol ? val.replace(opts.symbol, opts.symbol + new Array(maxLength - val.length + 1).join(" ")) : new Array(maxLength - val.length + 1).join(" ") + val;
       }
 
-      if (options.frequency === 'MONTHLY' && options.byDayOfWeek.some(weekday => Array.isArray(weekday) && (weekday[1] < -31 || weekday[1] === 0 || weekday[1] > 31))) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('when "frequency" is "MONTHLY", each "byDayOfWeek" can optionally only' + ' have a numeric value >= -31 and <= 31 and !== 0');
-      }
+      return val;
+    });
+  };
+  /* --- Module Definition --- */
+  // Export accounting for CommonJS. If being loaded as an AMD module, define it as such.
+  // Otherwise, just add `accounting` to the global object
 
-      if (options.frequency === 'YEARLY' && options.byDayOfWeek.some(weekday => Array.isArray(weekday) && (weekday[1] < -366 || weekday[1] === 0 || weekday[1] > 366))) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('when "frequency" is "YEARLY", each "byDayOfWeek" can optionally only' + ' have a numeric value >= -366 and <= 366 and !== 0');
-      }
 
-      norm.byDayOfWeek = options.byDayOfWeek;
-    } else if (!ruleOptionFilled(options.byDayOfMonth) && options.frequency === 'WEEKLY') {
-      norm.byDayOfWeek = [norm.start.get('weekday')];
+  if (true) {
+    if ( true && module.exports) {
+      exports = module.exports = lib;
     }
-  },
-  deps: () => [FrequencyRuleModule, ByDayOfWeekRuleModule, ByHourOfDayRuleModule, ByMinuteOfHourRuleModule, BySecondOfMinuteRuleModule, ByMillisecondOfSecondRuleModule]
-};
-
-class RevByMonthOfYearRule extends RevRecurrenceRuleBase {
-  constructor() {
-    super(...arguments);
-    this.option = this.processor.options.byMonthOfYear.slice().reverse();
-  }
-
-  run(date) {
-    const currentMonth = date.get('month');
 
-    for (const month of this.option) {
-      if (currentMonth < month) continue;
+    exports.accounting = lib;
+  } else {} // Root will be `window` in browser or `global` on the server:
 
-      if (currentMonth === month) {
-        return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ValidDateTime"](date));
-      }
+})(this);
 
-      return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](date.endGranularity('year').set('month', month)));
-    }
+/***/ }),
 
-    return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](date.endGranularity('year').subtract(1, 'year').set('month', this.option[0])));
-  }
+/***/ "./node_modules/adm-zip/adm-zip.js":
+/*!*****************************************!*\
+  !*** ./node_modules/adm-zip/adm-zip.js ***!
+  \*****************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-}
+const Utils = __webpack_require__(/*! ./util */ "./node_modules/adm-zip/util/index.js");
 
-class ByMonthOfYearRule extends RecurrenceRuleBase {
-  run(date) {
-    const currentMonth = date.get('month');
+const pth = __webpack_require__(/*! path */ "path");
 
-    for (const month of this.options.byMonthOfYear) {
-      if (currentMonth > month) continue;
+const ZipEntry = __webpack_require__(/*! ./zipEntry */ "./node_modules/adm-zip/zipEntry.js");
 
-      if (currentMonth === month) {
-        return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ValidDateTime"](date));
-      }
+const ZipFile = __webpack_require__(/*! ./zipFile */ "./node_modules/adm-zip/zipFile.js");
 
-      return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](date.granularity('year').set('month', month)));
-    }
+const get_Bool = (val, def) => typeof val === "boolean" ? val : def;
 
-    return this.validateDate(new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateTime"](date.granularity('year').add(1, 'year').set('month', this.options.byMonthOfYear[0])));
-  }
+const get_Str = (val, def) => typeof val === "string" ? val : def;
 
-}
+const defaultOptions = {
+  // option "noSort" : if true it disables files sorting
+  noSort: false,
+  // read entries during load (initial loading may be slower)
+  readEntries: false,
+  // default method is none
+  method: Utils.Constants.NONE,
+  // file system
+  fs: null
+};
 
-const ByMonthOfYearRuleModule = {
-  name: 'ByMonthOfYear',
-  get: processor => {
-    if (processor.options.byMonthOfYear === undefined) return null;
+module.exports = function (
+/**String*/
+input,
+/** object */
+options) {
+  let inBuffer = null; // create object based default options, allowing them to be overwritten
 
-    if (processor.reverse) {
-      return new RevByMonthOfYearRule(processor);
-    }
+  const opts = Object.assign(Object.create(null), defaultOptions); // test input variable
 
-    return new ByMonthOfYearRule(processor);
-  },
-  normalizeOptions: (options, norm) => {
-    if (options.byMonthOfYear !== undefined) {
-      if (!ruleOptionFilled(options.byMonthOfYear)) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byMonthOfYear" expects a non-empty array');
-      }
+  if (input && "object" === typeof input) {
+    // if value is not buffer we accept it to be object with options
+    if (!(input instanceof Uint8Array)) {
+      Object.assign(opts, input);
+      input = opts.input ? opts.input : undefined;
+      if (opts.input) delete opts.input;
+    } // if input is buffer
 
-      if (options.byMonthOfYear.some(num => num < 1 || num > 12)) {
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["RuleOptionError"]('"byMonthOfYear" values must be `num >= 1 && num >= 12`');
-      }
 
-      norm.byMonthOfYear = options.byMonthOfYear.slice();
-      norm.byMonthOfYear.sort(_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["numberSortComparer"]);
-    } else if (!(ruleOptionFilled(options.byDayOfMonth) || ruleOptionFilled(options.byDayOfWeek) || ruleOptionFilled(options.byDayOfYear)) && options.frequency === 'YEARLY') {
-      norm.byMonthOfYear = [norm.start.get('month')];
+    if (Buffer.isBuffer(input)) {
+      inBuffer = input;
+      opts.method = Utils.Constants.BUFFER;
+      input = undefined;
     }
-  },
-  deps: () => [FrequencyRuleModule, ByMonthOfYearRuleModule, ByDayOfMonthRuleModule, ByHourOfDayRuleModule, ByMinuteOfHourRuleModule, BySecondOfMinuteRuleModule, ByMillisecondOfSecondRuleModule]
-};
-const ICAL_RULES = [FrequencyRuleModule, ByMonthOfYearRuleModule, ByDayOfMonthRuleModule, ByDayOfWeekRuleModule, ByHourOfDayRuleModule, ByMinuteOfHourRuleModule, BySecondOfMinuteRuleModule, ByMillisecondOfSecondRuleModule];
-
+  } // assign options
 
-/***/ }),
 
-/***/ "./node_modules/@rschedule/json-tools/es2015/Schedule.js":
-/*!***************************************************************!*\
-  !*** ./node_modules/@rschedule/json-tools/es2015/Schedule.js ***!
-  \***************************************************************/
-/*! no exports provided */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+  Object.assign(opts, options); // instanciate utils filesystem
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @rschedule/core/generators */ "./node_modules/@rschedule/core/es2015/generators.js");
-/* harmony import */ var _rschedule_json_tools__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @rschedule/json-tools */ "./node_modules/@rschedule/json-tools/es2015/main.js");
-/* harmony import */ var _rschedule_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @rschedule/core */ "./node_modules/@rschedule/core/es2015/main.js");
+  const filetools = new Utils(opts); // if input is file name we retrieve its content
 
+  if (input && "string" === typeof input) {
+    // load zip file
+    if (filetools.fs.existsSync(input)) {
+      opts.method = Utils.Constants.FILE;
+      opts.filename = input;
+      inBuffer = filetools.fs.readFileSync(input);
+    } else {
+      throw new Error(Utils.Errors.INVALID_FILENAME);
+    }
+  } // create variable
 
 
+  const _zip = new ZipFile(inBuffer, opts);
 
-_rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Dates"].prototype.toJSON = function serialize(opts = {}) {
-  const json = {
-    type: 'Dates',
-    dates: this.adapters.map(adapter => adapter.toJSON())
-  };
-  if (!opts.nested) json.timezone = this.timezone;
-  Object(_rschedule_json_tools__WEBPACK_IMPORTED_MODULE_1__["serializeDataToJSON"])(this, json, opts);
-  return json;
-};
+  const canonical = Utils.canonical,
+        sanitize = Utils.sanitize;
 
-_rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Dates"].fromJSON = function parse(json, options = {}) {
-  if (json.type !== 'Dates') {
-    throw new _rschedule_json_tools__WEBPACK_IMPORTED_MODULE_1__["ParseJSONError"]('Invalid Dates JSON');
-  }
+  function getEntry(
+  /**Object*/
+  entry) {
+    if (entry && _zip) {
+      var item; // If entry was given as a file name
 
-  return new _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Dates"]({
-    dates: json.dates.map(date => _rschedule_core__WEBPACK_IMPORTED_MODULE_2__["DateAdapterBase"].adapter.fromJSON(date)),
-    data: typeof options.data === 'function' ? options.data(json) : json.data,
-    timezone: options.timezone || json.timezone
-  });
-};
+      if (typeof entry === "string") item = _zip.getEntry(entry); // if entry was given as a ZipEntry object
 
-Object(_rschedule_json_tools__WEBPACK_IMPORTED_MODULE_1__["registerJSONSerializerFn"])('Dates', _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Dates"].fromJSON);
+      if (typeof entry === "object" && typeof entry.entryName !== "undefined" && typeof entry.header !== "undefined") item = _zip.getEntry(entry.entryName);
 
-_rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Rule"].prototype.toJSON = function serialize(opts = {}) {
-  const json = {
-    type: 'Rule',
-    config: Object.assign(Object.assign({}, Object(_rschedule_core__WEBPACK_IMPORTED_MODULE_2__["cloneJSON"])(this.options)), {
-      start: this.normalizeDateInput(this.options.start).toJSON()
-    })
-  };
+      if (item) {
+        return item;
+      }
+    }
 
-  if (this.options.end) {
-    json.config.end = this.normalizeDateInput(this.options.end).toJSON();
+    return null;
   }
 
-  if (!opts.nested) json.timezone = this.timezone;
-  Object(_rschedule_json_tools__WEBPACK_IMPORTED_MODULE_1__["serializeDataToJSON"])(this, json, opts);
-  return json;
-};
-
-_rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Rule"].fromJSON = function fromJSON(json, options = {}) {
-  const config = Object.assign(Object.assign({}, json.config), {
-    start: _rschedule_core__WEBPACK_IMPORTED_MODULE_2__["DateAdapterBase"].adapter.fromJSON(json.config.start),
-    end: json.config.end && _rschedule_core__WEBPACK_IMPORTED_MODULE_2__["DateAdapterBase"].adapter.fromJSON(json.config.end)
-  });
-  return new _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Rule"](config, {
-    data: typeof options.data === 'function' ? options.data(json) : json.data,
-    timezone: options.timezone || json.timezone
-  });
-};
-
-Object(_rschedule_json_tools__WEBPACK_IMPORTED_MODULE_1__["registerJSONSerializerFn"])('Rule', _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Rule"].fromJSON);
-
-_rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Schedule"].prototype.toJSON = function serialize(opts = {}) {
-  const json = {
-    type: 'Schedule',
-    rrules: this.rrules.map(rule => rule.toJSON(Object.assign(Object.assign({}, opts), {
-      nested: true
-    }))),
-    exrules: this.exrules.map(rule => rule.toJSON(Object.assign(Object.assign({}, opts), {
-      nested: true
-    }))),
-    rdates: this.rdates.toJSON(Object.assign(Object.assign({}, opts), {
-      nested: true
-    })),
-    exdates: this.exdates.toJSON(Object.assign(Object.assign({}, opts), {
-      nested: true
-    }))
-  };
-  if (!opts.nested) json.timezone = this.timezone;
-  Object(_rschedule_json_tools__WEBPACK_IMPORTED_MODULE_1__["serializeDataToJSON"])(this, json, opts);
-  return json;
-};
+  function fixPath(zipPath) {
+    const _pth$posix = pth.posix,
+          join = _pth$posix.join,
+          normalize = _pth$posix.normalize,
+          sep = _pth$posix.sep; // convert windows file separators and normalize
 
-_rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Schedule"].fromJSON = function parse(json, options = {}) {
-  if (json.type !== 'Schedule') {
-    throw new _rschedule_json_tools__WEBPACK_IMPORTED_MODULE_1__["ParseJSONError"]('Invalid Schedule JSON');
+    return join(".", normalize(sep + zipPath.split("\\").join(sep) + sep));
   }
 
-  return new _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Schedule"]({
-    rrules: json.rrules.map(rule => _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Rule"].fromJSON(rule, Object.assign({
-      timezone: json.timezone
-    }, options))),
-    exrules: json.exrules.map(rule => _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Rule"].fromJSON(rule, Object.assign({
-      timezone: json.timezone
-    }, options))),
-    rdates: _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Dates"].fromJSON(json.rdates, Object.assign({
-      timezone: json.timezone
-    }, options)),
-    exdates: _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Dates"].fromJSON(json.exdates, Object.assign({
-      timezone: json.timezone
-    }, options)),
-    data: typeof options.data === 'function' ? options.data(json) : json.data,
-    timezone: options.timezone || json.timezone
-  });
-};
+  return {
+    /**
+     * Extracts the given entry from the archive and returns the content as a Buffer object
+     * @param entry ZipEntry object or String with the full path of the entry
+     *
+     * @return Buffer or Null in case of error
+     */
+    readFile: function (
+    /**Object*/
+    entry,
+    /*String, Buffer*/
+    pass) {
+      var item = getEntry(entry);
+      return item && item.getData(pass) || null;
+    },
 
-Object(_rschedule_json_tools__WEBPACK_IMPORTED_MODULE_1__["registerJSONSerializerFn"])('Schedule', _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["Schedule"].fromJSON);
+    /**
+     * Asynchronous readFile
+     * @param entry ZipEntry object or String with the full path of the entry
+     * @param callback
+     *
+     * @return Buffer or Null in case of error
+     */
+    readFileAsync: function (
+    /**Object*/
+    entry,
+    /**Function*/
+    callback) {
+      var item = getEntry(entry);
 
-/***/ }),
+      if (item) {
+        item.getDataAsync(callback);
+      } else {
+        callback(null, "getEntry failed for:" + entry);
+      }
+    },
 
-/***/ "./node_modules/@rschedule/json-tools/es2015/main.js":
-/*!***********************************************************!*\
-  !*** ./node_modules/@rschedule/json-tools/es2015/main.js ***!
-  \***********************************************************/
-/*! exports provided: ParseJSONError, SerializeJSONError, registerJSONSerializerFn, serializeDataToJSON */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+    /**
+     * Extracts the given entry from the archive and returns the content as plain text in the given encoding
+     * @param entry ZipEntry object or String with the full path of the entry
+     * @param encoding Optional. If no encoding is specified utf8 is used
+     *
+     * @return String
+     */
+    readAsText: function (
+    /**Object*/
+    entry,
+    /**String=*/
+    encoding) {
+      var item = getEntry(entry);
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ParseJSONError", function() { return ParseJSONError; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SerializeJSONError", function() { return SerializeJSONError; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerJSONSerializerFn", function() { return registerJSONSerializerFn; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "serializeDataToJSON", function() { return serializeDataToJSON; });
-/* harmony import */ var _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @rschedule/core/generators */ "./node_modules/@rschedule/core/es2015/generators.js");
+      if (item) {
+        var data = item.getData();
 
+        if (data && data.length) {
+          return data.toString(encoding || "utf8");
+        }
+      }
 
-class ParseJSONError extends Error {}
+      return "";
+    },
 
-class SerializeJSONError extends Error {}
+    /**
+     * Asynchronous readAsText
+     * @param entry ZipEntry object or String with the full path of the entry
+     * @param callback
+     * @param encoding Optional. If no encoding is specified utf8 is used
+     *
+     * @return String
+     */
+    readAsTextAsync: function (
+    /**Object*/
+    entry,
+    /**Function*/
+    callback,
+    /**String=*/
+    encoding) {
+      var item = getEntry(entry);
 
-_rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["OccurrenceGenerator"].JSON_FN_MAP = new Map();
+      if (item) {
+        item.getDataAsync(function (data, err) {
+          if (err) {
+            callback(data, err);
+            return;
+          }
 
-_rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["OccurrenceGenerator"].prototype.toJSON = function serialize(opts) {
-  throw new SerializeJSONError(`To support smaller bundles, ${this.constructor.name}#toJSON() ` + `must be manually added. See "@rschedule/json-tools" in the rSchedule docs.`);
-};
+          if (data && data.length) {
+            callback(data.toString(encoding || "utf8"));
+          } else {
+            callback("");
+          }
+        });
+      } else {
+        callback("");
+      }
+    },
 
-_rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["OccurrenceGenerator"].fromJSON = function parse(json, options) {
-  if (typeof json !== 'object' || json === null) {
-    throw new ParseJSONError(`Invalid json "${json}"`);
-  }
+    /**
+     * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory
+     *
+     * @param entry
+     */
+    deleteFile: function (
+    /**Object*/
+    entry) {
+      // @TODO: test deleteFile
+      var item = getEntry(entry);
 
-  const fn = _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["OccurrenceGenerator"].JSON_FN_MAP.get(json.type);
+      if (item) {
+        _zip.deleteEntry(item.entryName);
+      }
+    },
 
-  if (!fn) {
-    throw new ParseJSONError(`Unknown rSchedule object type "${json.type}". Have you added a json serializer ` + `for "${json.type}"? ` + `See "@rschedule/json-tools" in the rSchedule docs.`);
-  }
+    /**
+     * Adds a comment to the zip. The zip must be rewritten after adding the comment.
+     *
+     * @param comment
+     */
+    addZipComment: function (
+    /**String*/
+    comment) {
+      // @TODO: test addZipComment
+      _zip.comment = comment;
+    },
 
-  return fn(json, options);
-};
+    /**
+     * Returns the zip comment
+     *
+     * @return String
+     */
+    getZipComment: function () {
+      return _zip.comment || "";
+    },
 
-function serializeDataToJSON(gen, json, opt) {
-  if (!opt.data) return;
+    /**
+     * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment
+     * The comment cannot exceed 65535 characters in length
+     *
+     * @param entry
+     * @param comment
+     */
+    addZipEntryComment: function (
+    /**Object*/
+    entry,
+    /**String*/
+    comment) {
+      var item = getEntry(entry);
 
-  if (opt.data === true) {
-    json.data = gen.data;
-  } else {
-    json.data = opt.data(gen);
-  }
+      if (item) {
+        item.comment = comment;
+      }
+    },
 
-  if (json.data === undefined) delete json.data;
-}
+    /**
+     * Returns the comment of the specified entry
+     *
+     * @param entry
+     * @return String
+     */
+    getZipEntryComment: function (
+    /**Object*/
+    entry) {
+      var item = getEntry(entry);
 
-function registerJSONSerializerFn(name, fn) {
-  if (_rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["OccurrenceGenerator"].JSON_FN_MAP.has(name)) {
-    throw new Error(`Attempting to set a global json parser function for "${name}" ` + 'but one already exists.');
-  }
+      if (item) {
+        return item.comment || "";
+      }
 
-  _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_0__["OccurrenceGenerator"].JSON_FN_MAP.set(name, fn);
-}
+      return "";
+    },
 
+    /**
+     * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content
+     *
+     * @param entry
+     * @param content
+     */
+    updateFile: function (
+    /**Object*/
+    entry,
+    /**Buffer*/
+    content) {
+      var item = getEntry(entry);
 
+      if (item) {
+        item.setData(content);
+      }
+    },
 
-/***/ }),
+    /**
+     * Adds a file from the disk to the archive
+     *
+     * @param localPath File to add to zip
+     * @param zipPath Optional path inside the zip
+     * @param zipName Optional name for the file
+     */
+    addLocalFile: function (
+    /**String*/
+    localPath,
+    /**String=*/
+    zipPath,
+    /**String=*/
+    zipName,
+    /**String*/
+    comment) {
+      if (filetools.fs.existsSync(localPath)) {
+        // fix ZipPath
+        zipPath = zipPath ? fixPath(zipPath) : ""; // p - local file name
 
-/***/ "./node_modules/@rschedule/standard-date-adapter/es2015/main.js":
-/*!**********************************************************************!*\
-  !*** ./node_modules/@rschedule/standard-date-adapter/es2015/main.js ***!
-  \**********************************************************************/
-/*! exports provided: StandardDateAdapter */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+        var p = localPath.split("\\").join("/").split("/").pop(); // add file name into zippath
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StandardDateAdapter", function() { return StandardDateAdapter; });
-/* harmony import */ var _rschedule_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @rschedule/core */ "./node_modules/@rschedule/core/es2015/main.js");
+        zipPath += zipName ? zipName : p; // read file attributes
 
+        const _attr = filetools.fs.statSync(localPath); // add file into zip file
 
-class StandardDateAdapter extends _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapterBase"] {
-  constructor(date, options = {}) {
-    super(undefined, options);
 
-    if (!['UTC', null, undefined].includes(options.timezone)) {
-      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateAdapterError"](`StandardDateAdapter only supports "UTC" and ` + `local time zones but "${options.timezone}" was provided.`);
-    }
+        this.addFile(zipPath, filetools.fs.readFileSync(localPath), comment, _attr);
+      } else {
+        throw new Error(Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath));
+      }
+    },
 
-    this._date = new Date(date);
-    this.timezone = options.timezone !== undefined ? options.timezone : null;
-    this.assertIsValid();
-  }
+    /**
+     * Adds a local directory and all its nested files and directories to the archive
+     *
+     * @param localPath
+     * @param zipPath optional path inside zip
+     * @param filter optional RegExp or Function if files match will
+     *               be included.
+     */
+    addLocalFolder: function (
+    /**String*/
+    localPath,
+    /**String=*/
+    zipPath,
+    /**=RegExp|Function*/
+    filter) {
+      // Prepare filter
+      if (filter instanceof RegExp) {
+        // if filter is RegExp wrap it
+        filter = function (rx) {
+          return function (filename) {
+            return rx.test(filename);
+          };
+        }(filter);
+      } else if ("function" !== typeof filter) {
+        // if filter is not function we will replace it
+        filter = function () {
+          return true;
+        };
+      } // fix ZipPath
 
-  static isDate(object) {
-    return Object.prototype.toString.call(object) === '[object Date]';
-  }
 
-  static fromDate(date, options) {
-    return new StandardDateAdapter(date, options);
-  }
+      zipPath = zipPath ? fixPath(zipPath) : ""; // normalize the path first
 
-  static fromJSON(json) {
-    const args = [json.year, json.month - 1, json.day, json.hour, json.minute, json.second, json.millisecond];
+      localPath = pth.normalize(localPath);
 
-    switch (json.timezone) {
-      case 'UTC':
-        {
-          return new StandardDateAdapter(new Date(Date.UTC(...args)), {
-            timezone: 'UTC',
-            duration: json.duration
-          });
-        }
+      if (filetools.fs.existsSync(localPath)) {
+        const items = filetools.findFiles(localPath);
+        const self = this;
 
-      case null:
-        {
-          return new StandardDateAdapter(new Date(...args), {
-            timezone: null,
-            duration: json.duration
+        if (items.length) {
+          items.forEach(function (filepath) {
+            var p = pth.relative(localPath, filepath).split("\\").join("/"); //windows fix
+
+            if (filter(p)) {
+              var stats = filetools.fs.statSync(filepath);
+
+              if (stats.isFile()) {
+                self.addFile(zipPath + p, filetools.fs.readFileSync(filepath), "", stats);
+              } else {
+                self.addFile(zipPath + p + "/", Buffer.alloc(0), "", stats);
+              }
+            }
           });
         }
+      } else {
+        throw new Error(Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath));
+      }
+    },
 
-      default:
-        throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateAdapterError"]('The `StandardDateAdapter` only supports datetimes in ' + `UTC or LOCAL (null) time. You provided a JSON object ` + `with timezone "${json.timezone}".`);
-    }
-  }
+    /**
+     * Asynchronous addLocalFile
+     * @param localPath
+     * @param callback
+     * @param zipPath optional path inside zip
+     * @param filter optional RegExp or Function if files match will
+     *               be included.
+     */
+    addLocalFolderAsync: function (
+    /*String*/
+    localPath,
+    /*Function*/
+    callback,
+    /*String*/
+    zipPath,
+    /*RegExp|Function*/
+    filter) {
+      if (filter instanceof RegExp) {
+        filter = function (rx) {
+          return function (filename) {
+            return rx.test(filename);
+          };
+        }(filter);
+      } else if ("function" !== typeof filter) {
+        filter = function () {
+          return true;
+        };
+      } // fix ZipPath
 
-  static fromDateTime(datetime) {
-    const date = StandardDateAdapter.fromJSON(datetime.toJSON());
-    date.generators.push(...datetime.generators);
-    return date;
-  }
 
-  get date() {
-    return new Date(this._date);
-  }
+      zipPath = zipPath ? fixPath(zipPath) : ""; // normalize the path first
 
-  get end() {
-    if (!this.duration) return;
-    if (this._end) return this._end;
-    this._end = StandardDateAdapter.fromDateTime(this.toDateTime().add(this.duration, 'millisecond')).date;
-    return this._end;
-  }
+      localPath = pth.normalize(localPath);
+      var self = this;
+      filetools.fs.open(localPath, "r", function (err) {
+        if (err && err.code === "ENOENT") {
+          callback(undefined, Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath));
+        } else if (err) {
+          callback(undefined, err);
+        } else {
+          var items = filetools.findFiles(localPath);
+          var i = -1;
 
-  set(prop, value) {
-    if (prop === 'timezone') {
-      if (this.timezone === value) return this;else {
-        return new StandardDateAdapter(this._date, {
-          timezone: value,
-          duration: this.duration,
-          generators: this.generators
-        });
-      }
-    } else if (prop === 'duration') {
-      if (this.duration === value) return this;else {
-        return new StandardDateAdapter(this._date, {
-          timezone: this.timezone,
-          duration: value,
-          generators: this.generators
-        });
-      }
-    }
+          var next = function () {
+            i += 1;
 
-    throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["ArgumentError"](`Unknown prop "${prop}" for StandardDateAdapter#set()`);
-  }
+            if (i < items.length) {
+              var filepath = items[i];
+              var p = pth.relative(localPath, filepath).split("\\").join("/"); //windows fix
 
-  valueOf() {
-    return this._date.valueOf();
-  }
+              p = p.normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[^\x20-\x7E]/g, ""); // accent fix
 
-  toISOString() {
-    return this._date.toISOString();
-  }
+              if (filter(p)) {
+                filetools.fs.stat(filepath, function (er0, stats) {
+                  if (er0) callback(undefined, er0);
 
-  toJSON() {
-    let json;
+                  if (stats.isFile()) {
+                    filetools.fs.readFile(filepath, function (er1, data) {
+                      if (er1) {
+                        callback(undefined, er1);
+                      } else {
+                        self.addFile(zipPath + p, data, "", stats);
+                        next();
+                      }
+                    });
+                  } else {
+                    self.addFile(zipPath + p + "/", Buffer.alloc(0), "", stats);
+                    next();
+                  }
+                });
+              } else {
+                next();
+              }
+            } else {
+              callback(true, undefined);
+            }
+          };
 
-    if (this.timezone === 'UTC') {
-      json = {
-        timezone: this.timezone,
-        year: this._date.getUTCFullYear(),
-        month: this._date.getUTCMonth() + 1,
-        day: this._date.getUTCDate(),
-        hour: this._date.getUTCHours(),
-        minute: this._date.getUTCMinutes(),
-        second: this._date.getUTCSeconds(),
-        millisecond: this._date.getUTCMilliseconds()
-      };
-    } else {
-      json = {
-        timezone: this.timezone,
-        year: this._date.getFullYear(),
-        month: this._date.getMonth() + 1,
-        day: this._date.getDate(),
-        hour: this._date.getHours(),
-        minute: this._date.getMinutes(),
-        second: this._date.getSeconds(),
-        millisecond: this._date.getMilliseconds()
-      };
-    }
+          next();
+        }
+      });
+    },
 
-    if (this.duration) {
-      json.duration = this.duration;
-    }
+    /**
+     *
+     * @param {string} localPath - path where files will be extracted
+     * @param {object} props - optional properties
+     * @param {string} props.zipPath - optional path inside zip
+     * @param {regexp, function} props.filter - RegExp or Function if files match will be included.
+     */
+    addLocalFolderPromise: function (
+    /*String*/
+    localPath,
+    /* object */
+    props) {
+      return new Promise((resolve, reject) => {
+        const _Object$assign = Object.assign({}, props),
+              filter = _Object$assign.filter,
+              zipPath = _Object$assign.zipPath;
 
-    return json;
-  }
+        this.addLocalFolderAsync(localPath, (done, err) => {
+          if (err) reject(err);
+          if (done) resolve(this);
+        }, zipPath, filter);
+      });
+    },
 
-  assertIsValid() {
-    if (!StandardDateAdapter.isDate(this._date) || isNaN(this._date.valueOf())) {
-      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateAdapterError"]('StandardDateAdapter has invalid date.');
-    } else if (![null, 'UTC'].includes(this.timezone)) {
-      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateAdapterError"]('StandardDateAdapter only supports local (null) and UTC timezones but ' + `"${this.timezone}" was specified.`);
-    } else if (this.duration && this.duration <= 0) {
-      throw new _rschedule_core__WEBPACK_IMPORTED_MODULE_0__["InvalidDateAdapterError"]('If provided, duration must be greater than 0.');
-    }
+    /**
+     * Allows you to create a entry (file or directory) in the zip file.
+     * If you want to create a directory the entryName must end in / and a null buffer should be provided.
+     * Comment and attributes are optional
+     *
+     * @param {string} entryName
+     * @param {Buffer | string} content - file content as buffer or utf8 coded string
+     * @param {string} comment - file comment
+     * @param {number | object} attr - number as unix file permissions, object as filesystem Stats object
+     */
+    addFile: function (
+    /**String*/
+    entryName,
+    /**Buffer*/
+    content,
+    /**String*/
+    comment,
+    /**Number*/
+    attr) {
+      let entry = getEntry(entryName);
+      const update = entry != null; // prepare new entry
 
-    return true;
-  }
+      if (!update) {
+        entry = new ZipEntry();
+        entry.entryName = entryName;
+      }
 
-}
+      entry.comment = comment || "";
+      const isStat = "object" === typeof attr && attr instanceof filetools.fs.Stats; // last modification time from file stats
 
-StandardDateAdapter.hasTimezoneSupport = false;
+      if (isStat) {
+        entry.header.time = attr.mtime;
+      } // Set file attribute
 
 
-/***/ }),
+      var fileattr = entry.isDirectory ? 0x10 : 0; // (MS-DOS directory flag)
+      // extended attributes field for Unix
 
-/***/ "./node_modules/@rschedule/standard-date-adapter/es2015/setup.js":
-/*!***********************************************************************!*\
-  !*** ./node_modules/@rschedule/standard-date-adapter/es2015/setup.js ***!
-  \***********************************************************************/
-/*! no exports provided */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+      if (!Utils.isWin) {
+        // set file type either S_IFDIR / S_IFREG
+        let unix = entry.isDirectory ? 0x4000 : 0x8000;
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var _rschedule_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @rschedule/core */ "./node_modules/@rschedule/core/es2015/main.js");
-/* harmony import */ var _rschedule_core_generators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @rschedule/core/generators */ "./node_modules/@rschedule/core/es2015/generators.js");
-/* harmony import */ var _rschedule_core_rules_ICAL_RULES__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @rschedule/core/rules/ICAL_RULES */ "./node_modules/@rschedule/core/es2015/rules.js");
-/* harmony import */ var _rschedule_standard_date_adapter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @rschedule/standard-date-adapter */ "./node_modules/@rschedule/standard-date-adapter/es2015/main.js");
+        if (isStat) {
+          // File attributes from file stats
+          unix |= 0xfff & attr.mode;
+        } else if ("number" === typeof attr) {
+          // attr from given attr values
+          unix |= 0xfff & attr;
+        } else {
+          // Default values:
+          unix |= entry.isDirectory ? 0o755 : 0o644; // permissions (drwxr-xr-x) or (-r-wr--r--)
+        }
 
+        fileattr = (fileattr | unix << 16) >>> 0; // add attributes
+      }
 
+      entry.attr = fileattr;
+      entry.setData(content);
+      if (!update) _zip.setEntry(entry);
+    },
 
+    /**
+     * Returns an array of ZipEntry objects representing the files and folders inside the archive
+     *
+     * @return Array
+     */
+    getEntries: function () {
+      return _zip ? _zip.entries : [];
+    },
 
-_rschedule_core__WEBPACK_IMPORTED_MODULE_0__["DateAdapterBase"].adapter = _rschedule_standard_date_adapter__WEBPACK_IMPORTED_MODULE_3__["StandardDateAdapter"];
-_rschedule_core_generators__WEBPACK_IMPORTED_MODULE_1__["Rule"].recurrenceRules = _rschedule_core_rules_ICAL_RULES__WEBPACK_IMPORTED_MODULE_2__["ICAL_RULES"];
+    /**
+     * Returns a ZipEntry object representing the file or folder specified by ``name``.
+     *
+     * @param name
+     * @return ZipEntry
+     */
+    getEntry: function (
+    /**String*/
+    name) {
+      return getEntry(name);
+    },
+    getEntryCount: function () {
+      return _zip.getEntryCount();
+    },
+    forEach: function (callback) {
+      return _zip.forEach(callback);
+    },
 
-/***/ }),
+    /**
+     * Extracts the given entry to the given targetPath
+     * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted
+     *
+     * @param entry ZipEntry object or String with the full path of the entry
+     * @param targetPath Target folder where to write the file
+     * @param maintainEntryPath If maintainEntryPath is true and the entry is inside a folder, the entry folder
+     *                          will be created in targetPath as well. Default is TRUE
+     * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
+     *                  Default is FALSE
+     * @param keepOriginalPermission The file will be set as the permission from the entry if this is true.
+     *                  Default is FALSE
+     * @param outFileName String If set will override the filename of the extracted file (Only works if the entry is a file)
+     *
+     * @return Boolean
+     */
+    extractEntryTo: function (
+    /**Object*/
+    entry,
+    /**String*/
+    targetPath,
+    /**Boolean*/
+    maintainEntryPath,
+    /**Boolean*/
+    overwrite,
+    /**Boolean*/
+    keepOriginalPermission,
+    /**String**/
+    outFileName) {
+      overwrite = get_Bool(overwrite, false);
+      keepOriginalPermission = get_Bool(keepOriginalPermission, false);
+      maintainEntryPath = get_Bool(maintainEntryPath, true);
+      outFileName = get_Str(outFileName, get_Str(keepOriginalPermission, undefined));
+      var item = getEntry(entry);
 
-/***/ "./node_modules/accounting/accounting.js":
-/*!***********************************************!*\
-  !*** ./node_modules/accounting/accounting.js ***!
-  \***********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+      if (!item) {
+        throw new Error(Utils.Errors.NO_ENTRY);
+      }
 
-/*!
- * accounting.js v0.4.2
- * Copyright 2014 Open Exchange Rates
- *
- * Freely distributable under the MIT license.
- * Portions of accounting.js are inspired or borrowed from underscore.js
- *
- * Full details and documentation:
- * http://openexchangerates.github.io/accounting.js/
- */
-(function (root, undefined) {
-  /* --- Setup --- */
-  // Create the local library object, to be exported or referenced globally later
-  var lib = {}; // Current version
+      var entryName = canonical(item.entryName);
+      var target = sanitize(targetPath, outFileName && !item.isDirectory ? outFileName : maintainEntryPath ? entryName : pth.basename(entryName));
 
-  lib.version = '0.4.2';
-  /* --- Exposed settings --- */
-  // The library's settings configuration object. Contains default parameters for
-  // currency and number formatting
+      if (item.isDirectory) {
+        var children = _zip.getEntryChildren(item);
 
-  lib.settings = {
-    currency: {
-      symbol: "$",
-      // default currency symbol is '$'
-      format: "%s%v",
-      // controls output: %s = symbol, %v = value (can be object, see docs)
-      decimal: ".",
-      // decimal point separator
-      thousand: ",",
-      // thousands separator
-      precision: 2,
-      // decimal places
-      grouping: 3 // digit grouping (not implemented yet)
+        children.forEach(function (child) {
+          if (child.isDirectory) return;
+          var content = child.getData();
 
-    },
-    number: {
-      precision: 0,
-      // default precision on numbers is 0
-      grouping: 3,
-      // digit grouping (not implemented yet)
-      thousand: ",",
-      decimal: "."
-    }
-  };
-  /* --- Internal Helper Methods --- */
-  // Store reference to possibly-available ECMAScript 5 methods for later
+          if (!content) {
+            throw new Error(Utils.Errors.CANT_EXTRACT_FILE);
+          }
 
-  var nativeMap = Array.prototype.map,
-      nativeIsArray = Array.isArray,
-      toString = Object.prototype.toString;
-  /**
-   * Tests whether supplied parameter is a string
-   * from underscore.js
-   */
+          var name = canonical(child.entryName);
+          var childName = sanitize(targetPath, maintainEntryPath ? name : pth.basename(name)); // The reverse operation for attr depend on method addFile()
 
-  function isString(obj) {
-    return !!(obj === '' || obj && obj.charCodeAt && obj.substr);
-  }
-  /**
-   * Tests whether supplied parameter is an array
-   * from underscore.js, delegates to ECMA5's native Array.isArray
-   */
+          const fileAttr = keepOriginalPermission ? child.header.fileAttr : undefined;
+          filetools.writeFileTo(childName, content, overwrite, fileAttr);
+        });
+        return true;
+      }
 
+      var content = item.getData();
+      if (!content) throw new Error(Utils.Errors.CANT_EXTRACT_FILE);
 
-  function isArray(obj) {
-    return nativeIsArray ? nativeIsArray(obj) : toString.call(obj) === '[object Array]';
-  }
-  /**
-   * Tests whether supplied parameter is a true object
-   */
-
-
-  function isObject(obj) {
-    return obj && toString.call(obj) === '[object Object]';
-  }
-  /**
-   * Extends an object with a defaults object, similar to underscore's _.defaults
-   *
-   * Used for abstracting parameter handling from API methods
-   */
+      if (filetools.fs.existsSync(target) && !overwrite) {
+        throw new Error(Utils.Errors.CANT_OVERRIDE);
+      } // The reverse operation for attr depend on method addFile()
 
 
-  function defaults(object, defs) {
-    var key;
-    object = object || {};
-    defs = defs || {}; // Iterate over object non-prototype properties:
+      const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;
+      filetools.writeFileTo(target, content, overwrite, fileAttr);
+      return true;
+    },
 
-    for (key in defs) {
-      if (defs.hasOwnProperty(key)) {
-        // Replace values with defaults only if undefined (allow empty/zero values):
-        if (object[key] == null) object[key] = defs[key];
+    /**
+     * Test the archive
+     *
+     */
+    test: function (pass) {
+      if (!_zip) {
+        return false;
       }
-    }
 
-    return object;
-  }
-  /**
-   * Implementation of `Array.map()` for iteration loops
-   *
-   * Returns a new Array as a result of calling `iterator` on each array value.
-   * Defers to native Array.map if available
-   */
+      for (var entry in _zip.entries) {
+        try {
+          if (entry.isDirectory) {
+            continue;
+          }
 
+          var content = _zip.entries[entry].getData(pass);
 
-  function map(obj, iterator, context) {
-    var results = [],
-        i,
-        j;
-    if (!obj) return results; // Use native .map method if it exists:
+          if (!content) {
+            return false;
+          }
+        } catch (err) {
+          return false;
+        }
+      }
 
-    if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context); // Fallback for native .map:
+      return true;
+    },
 
-    for (i = 0, j = obj.length; i < j; i++) {
-      results[i] = iterator.call(context, obj[i], i, obj);
-    }
+    /**
+     * Extracts the entire archive to the given location
+     *
+     * @param targetPath Target location
+     * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
+     *                  Default is FALSE
+     * @param keepOriginalPermission The file will be set as the permission from the entry if this is true.
+     *                  Default is FALSE
+     */
+    extractAllTo: function (
+    /**String*/
+    targetPath,
+    /**Boolean*/
+    overwrite,
+    /**Boolean*/
+    keepOriginalPermission,
+    /*String, Buffer*/
+    pass) {
+      overwrite = get_Bool(overwrite, false);
+      pass = get_Str(keepOriginalPermission, pass);
+      keepOriginalPermission = get_Bool(keepOriginalPermission, false);
 
-    return results;
-  }
-  /**
-   * Check and normalise the value of precision (must be positive integer)
-   */
+      if (!_zip) {
+        throw new Error(Utils.Errors.NO_ZIP);
+      }
 
+      _zip.entries.forEach(function (entry) {
+        var entryName = sanitize(targetPath, canonical(entry.entryName.toString()));
 
-  function checkPrecision(val, base) {
-    val = Math.round(Math.abs(val));
-    return isNaN(val) ? base : val;
-  }
-  /**
-   * Parses a format string or object and returns format obj for use in rendering
-   *
-   * `format` is either a string with the default (positive) format, or object
-   * containing `pos` (required), `neg` and `zero` values (or a function returning
-   * either a string or object)
-   *
-   * Either string or format.pos must contain "%v" (value) to be valid
-   */
+        if (entry.isDirectory) {
+          filetools.makeDir(entryName);
+          return;
+        }
 
+        var content = entry.getData(pass);
 
-  function checkCurrencyFormat(format) {
-    var defaults = lib.settings.currency.format; // Allow function as format parameter (should return string or object):
+        if (!content) {
+          throw new Error(Utils.Errors.CANT_EXTRACT_FILE);
+        } // The reverse operation for attr depend on method addFile()
 
-    if (typeof format === "function") format = format(); // Format can be a string, in which case `value` ("%v") must be present:
 
-    if (isString(format) && format.match("%v")) {
-      // Create and return positive, negative and zero formats:
-      return {
-        pos: format,
-        neg: format.replace("-", "").replace("%v", "-%v"),
-        zero: format
-      }; // If no format, or object is missing valid positive value, use defaults:
-    } else if (!format || !format.pos || !format.pos.match("%v")) {
-      // If defaults is a string, casts it to an object for faster checking next time:
-      return !isString(defaults) ? defaults : lib.settings.currency.format = {
-        pos: defaults,
-        neg: defaults.replace("%v", "-%v"),
-        zero: defaults
-      };
-    } // Otherwise, assume format was fine:
+        const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;
+        filetools.writeFileTo(entryName, content, overwrite, fileAttr);
 
+        try {
+          filetools.fs.utimesSync(entryName, entry.header.time, entry.header.time);
+        } catch (err) {
+          throw new Error(Utils.Errors.CANT_EXTRACT_FILE);
+        }
+      });
+    },
 
-    return format;
-  }
-  /* --- API Methods --- */
+    /**
+     * Asynchronous extractAllTo
+     *
+     * @param targetPath Target location
+     * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
+     *                  Default is FALSE
+     * @param keepOriginalPermission The file will be set as the permission from the entry if this is true.
+     *                  Default is FALSE
+     * @param callback The callback will be executed when all entries are extracted successfully or any error is thrown.
+     */
+    extractAllToAsync: function (
+    /**String*/
+    targetPath,
+    /**Boolean*/
+    overwrite,
+    /**Boolean*/
+    keepOriginalPermission,
+    /**Function*/
+    callback) {
+      if (!callback) {
+        callback = function () {};
+      }
 
-  /**
-   * Takes a string/array of strings, removes all formatting/cruft and returns the raw float value
-   * Alias: `accounting.parse(string)`
-   *
-   * Decimal must be included in the regular expression to match floats (defaults to
-   * accounting.settings.number.decimal), so if the number uses a non-standard decimal 
-   * separator, provide it as the second argument.
-   *
-   * Also matches bracketed negatives (eg. "$ (1.99)" => -1.99)
-   *
-   * Doesn't throw any errors (`NaN`s become 0) but this may change in future
-   */
+      overwrite = get_Bool(overwrite, false);
+      if (typeof keepOriginalPermission === "function" && !callback) callback = keepOriginalPermission;
+      keepOriginalPermission = get_Bool(keepOriginalPermission, false);
 
+      if (!_zip) {
+        callback(new Error(Utils.Errors.NO_ZIP));
+        return;
+      }
 
-  var unformat = lib.unformat = lib.parse = function (value, decimal) {
-    // Recursively unformat arrays:
-    if (isArray(value)) {
-      return map(value, function (val) {
-        return unformat(val, decimal);
-      });
-    } // Fails silently (need decent errors):
+      targetPath = pth.resolve(targetPath); // convert entryName to
 
+      const getPath = entry => sanitize(targetPath, pth.normalize(canonical(entry.entryName.toString())));
 
-    value = value || 0; // Return the value as-is if it's already a number:
+      const getError = (msg, file) => new Error(msg + ': "' + file + '"'); // separate directories from files
 
-    if (typeof value === "number") return value; // Default decimal point comes from settings, but could be set to eg. "," in opts:
 
-    decimal = decimal || lib.settings.number.decimal; // Build regex to strip out everything except digits, decimal point and minus sign:
+      const dirEntries = [];
+      const fileEntries = new Set();
 
-    var regex = new RegExp("[^0-9-" + decimal + "]", ["g"]),
-        unformatted = parseFloat(("" + value).replace(/\((?=\d+)(.*)\)/, "-$1") // replace bracketed values with negatives
-    .replace(regex, '') // strip out any cruft
-    .replace(decimal, '.') // make sure decimal point is standard
-    ); // This will fail silently which may cause trouble, let's wait and see:
+      _zip.entries.forEach(e => {
+        if (e.isDirectory) {
+          dirEntries.push(e);
+        } else {
+          fileEntries.add(e);
+        }
+      }); // Create directory entries first synchronously
+      // this prevents race condition and assures folders are there before writing files
 
-    return !isNaN(unformatted) ? unformatted : 0;
-  };
-  /**
-   * Implementation of toFixed() that treats floats more like decimals
-   *
-   * Fixes binary rounding issues (eg. (0.615).toFixed(2) === "0.61") that present
-   * problems for accounting- and finance-related software.
-   */
 
+      for (const entry of dirEntries) {
+        const dirPath = getPath(entry); // The reverse operation for attr depend on method addFile()
 
-  var toFixed = lib.toFixed = function (value, precision) {
-    precision = checkPrecision(precision, lib.settings.number.precision);
-    var exponentialForm = Number(lib.unformat(value) + 'e' + precision);
-    var rounded = Math.round(exponentialForm);
-    var finalResult = Number(rounded + 'e-' + precision).toFixed(precision);
-    return finalResult;
-  };
-  /**
-   * Format a number, with comma-separated thousands and custom precision/decimal places
-   * Alias: `accounting.format()`
-   *
-   * Localise by overriding the precision and thousand / decimal separators
-   * 2nd parameter `precision` can be an object matching `settings.number`
-   */
+        const dirAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;
 
+        try {
+          filetools.makeDir(dirPath);
+          if (dirAttr) filetools.fs.chmodSync(dirPath, dirAttr); // in unix timestamp will change if files are later added to folder, but still
 
-  var formatNumber = lib.formatNumber = lib.format = function (number, precision, thousand, decimal) {
-    // Resursively format arrays:
-    if (isArray(number)) {
-      return map(number, function (val) {
-        return formatNumber(val, precision, thousand, decimal);
-      });
-    } // Clean up number:
+          filetools.fs.utimesSync(dirPath, entry.header.time, entry.header.time);
+        } catch (er) {
+          callback(getError("Unable to create folder", dirPath));
+        }
+      } // callback wrapper, for some house keeping
 
 
-    number = unformat(number); // Build options object from second param (if object) or all params, extending defaults:
+      const done = () => {
+        if (fileEntries.size === 0) {
+          callback();
+        }
+      }; // Extract file entries asynchronously
 
-    var opts = defaults(isObject(precision) ? precision : {
-      precision: precision,
-      thousand: thousand,
-      decimal: decimal
-    }, lib.settings.number),
-        // Clean up precision
-    usePrecision = checkPrecision(opts.precision),
-        // Do some calc:
-    negative = number < 0 ? "-" : "",
-        base = parseInt(toFixed(Math.abs(number || 0), usePrecision), 10) + "",
-        mod = base.length > 3 ? base.length % 3 : 0; // Format the number:
 
-    return negative + (mod ? base.substr(0, mod) + opts.thousand : "") + base.substr(mod).replace(/(\d{3})(?=\d)/g, "$1" + opts.thousand) + (usePrecision ? opts.decimal + toFixed(Math.abs(number), usePrecision).split('.')[1] : "");
-  };
-  /**
-   * Format a number into currency
-   *
-   * Usage: accounting.formatMoney(number, symbol, precision, thousandsSep, decimalSep, format)
-   * defaults: (0, "$", 2, ",", ".", "%s%v")
-   *
-   * Localise by overriding the symbol, precision, thousand / decimal separators and format
-   * Second param can be an object matching `settings.currency` which is the easiest way.
-   *
-   * To do: tidy up the parameters
-   */
+      for (const entry of fileEntries.values()) {
+        const entryName = pth.normalize(canonical(entry.entryName.toString()));
+        const filePath = sanitize(targetPath, entryName);
+        entry.getDataAsync(function (content, err_1) {
+          if (err_1) {
+            callback(new Error(err_1));
+            return;
+          }
 
+          if (!content) {
+            callback(new Error(Utils.Errors.CANT_EXTRACT_FILE));
+          } else {
+            // The reverse operation for attr depend on method addFile()
+            const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;
+            filetools.writeFileToAsync(filePath, content, overwrite, fileAttr, function (succ) {
+              if (!succ) {
+                callback(getError("Unable to write file", filePath));
+                return;
+              }
 
-  var formatMoney = lib.formatMoney = function (number, symbol, precision, thousand, decimal, format) {
-    // Resursively format arrays:
-    if (isArray(number)) {
-      return map(number, function (val) {
-        return formatMoney(val, symbol, precision, thousand, decimal, format);
-      });
-    } // Clean up number:
+              filetools.fs.utimes(filePath, entry.header.time, entry.header.time, function (err_2) {
+                if (err_2) {
+                  callback(getError("Unable to set times", filePath));
+                  return;
+                }
 
+                fileEntries.delete(entry); // call the callback if it was last entry
 
-    number = unformat(number); // Build options object from second param (if object) or all params, extending defaults:
+                done();
+              });
+            });
+          }
+        });
+      } // call the callback if fileEntries was empty
 
-    var opts = defaults(isObject(symbol) ? symbol : {
-      symbol: symbol,
-      precision: precision,
-      thousand: thousand,
-      decimal: decimal,
-      format: format
-    }, lib.settings.currency),
-        // Check format (returns object with pos, neg and zero):
-    formats = checkCurrencyFormat(opts.format),
-        // Choose which format to use for this value:
-    useFormat = number > 0 ? formats.pos : number < 0 ? formats.neg : formats.zero; // Return with currency symbol added:
 
-    return useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(number), checkPrecision(opts.precision), opts.thousand, opts.decimal));
-  };
-  /**
-   * Format a list of numbers into an accounting column, padding with whitespace
-   * to line up currency symbols, thousand separators and decimals places
-   *
-   * List should be an array of numbers
-   * Second parameter can be an object containing keys that match the params
-   *
-   * Returns array of accouting-formatted number strings of same length
-   *
-   * NB: `white-space:pre` CSS rule is required on the list container to prevent
-   * browsers from collapsing the whitespace in the output strings.
-   */
+      done();
+    },
 
+    /**
+     * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip
+     *
+     * @param targetFileName
+     * @param callback
+     */
+    writeZip: function (
+    /**String*/
+    targetFileName,
+    /**Function*/
+    callback) {
+      if (arguments.length === 1) {
+        if (typeof targetFileName === "function") {
+          callback = targetFileName;
+          targetFileName = "";
+        }
+      }
 
-  lib.formatColumn = function (list, symbol, precision, thousand, decimal, format) {
-    if (!list || !isArray(list)) return []; // Build options object from second param (if object) or all params, extending defaults:
+      if (!targetFileName && opts.filename) {
+        targetFileName = opts.filename;
+      }
 
-    var opts = defaults(isObject(symbol) ? symbol : {
-      symbol: symbol,
-      precision: precision,
-      thousand: thousand,
-      decimal: decimal,
-      format: format
-    }, lib.settings.currency),
-        // Check format (returns object with pos, neg and zero), only need pos for now:
-    formats = checkCurrencyFormat(opts.format),
-        // Whether to pad at start of string or after currency symbol:
-    padAfterSymbol = formats.pos.indexOf("%s") < formats.pos.indexOf("%v") ? true : false,
-        // Store value for the length of the longest string in the column:
-    maxLength = 0,
-        // Format the list according to options, store the length of the longest string:
-    formatted = map(list, function (val, i) {
-      if (isArray(val)) {
-        // Recursively format columns if list is a multi-dimensional array:
-        return lib.formatColumn(val, opts);
-      } else {
-        // Clean up the value
-        val = unformat(val); // Choose which format to use for this value (pos, neg or zero):
+      if (!targetFileName) return;
 
-        var useFormat = val > 0 ? formats.pos : val < 0 ? formats.neg : formats.zero,
-            // Format this value, push into formatted list and save the length:
-        fVal = useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(val), checkPrecision(opts.precision), opts.thousand, opts.decimal));
-        if (fVal.length > maxLength) maxLength = fVal.length;
-        return fVal;
-      }
-    }); // Pad each number in the list and send back the column of numbers:
+      var zipData = _zip.compressToBuffer();
 
-    return map(formatted, function (val, i) {
-      // Only if this is a string (not a nested array, which would have already been padded):
-      if (isString(val) && val.length < maxLength) {
-        // Depending on symbol position, pad after symbol or at index 0:
-        return padAfterSymbol ? val.replace(opts.symbol, opts.symbol + new Array(maxLength - val.length + 1).join(" ")) : new Array(maxLength - val.length + 1).join(" ") + val;
+      if (zipData) {
+        var ok = filetools.writeFileTo(targetFileName, zipData, true);
+        if (typeof callback === "function") callback(!ok ? new Error("failed") : null, "");
       }
+    },
+    writeZipPromise: function (
+    /**String*/
+    targetFileName,
+    /* object */
+    props) {
+      const _Object$assign2 = Object.assign({
+        overwrite: true
+      }, props),
+            overwrite = _Object$assign2.overwrite,
+            perm = _Object$assign2.perm;
 
-      return val;
-    });
-  };
-  /* --- Module Definition --- */
-  // Export accounting for CommonJS. If being loaded as an AMD module, define it as such.
-  // Otherwise, just add `accounting` to the global object
+      return new Promise((resolve, reject) => {
+        // find file name
+        if (!targetFileName && opts.filename) targetFileName = opts.filename;
+        if (!targetFileName) reject("ADM-ZIP: ZIP File Name Missing");
+        this.toBufferPromise().then(zipData => {
+          const ret = done => done ? resolve(done) : reject("ADM-ZIP: Wasn't able to write zip file");
+
+          filetools.writeFileToAsync(targetFileName, zipData, overwrite, perm, ret);
+        }, reject);
+      });
+    },
+    toBufferPromise: function () {
+      return new Promise((resolve, reject) => {
+        _zip.toAsyncBuffer(resolve, reject);
+      });
+    },
 
+    /**
+     * Returns the content of the entire zip file as a Buffer object
+     *
+     * @return Buffer
+     */
+    toBuffer: function (
+    /**Function=*/
+    onSuccess,
+    /**Function=*/
+    onFail,
+    /**Function=*/
+    onItemStart,
+    /**Function=*/
+    onItemEnd) {
+      this.valueOf = 2;
 
-  if (true) {
-    if ( true && module.exports) {
-      exports = module.exports = lib;
-    }
+      if (typeof onSuccess === "function") {
+        _zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd);
 
-    exports.accounting = lib;
-  } else {} // Root will be `window` in browser or `global` on the server:
+        return null;
+      }
 
-})(this);
+      return _zip.compressToBuffer();
+    }
+  };
+};
 
 /***/ }),
 
-/***/ "./node_modules/adm-zip/adm-zip.js":
-/*!*****************************************!*\
-  !*** ./node_modules/adm-zip/adm-zip.js ***!
-  \*****************************************/
+/***/ "./node_modules/adm-zip/headers/entryHeader.js":
+/*!*****************************************************!*\
+  !*** ./node_modules/adm-zip/headers/entryHeader.js ***!
+  \*****************************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-const Utils = __webpack_require__(/*! ./util */ "./node_modules/adm-zip/util/index.js");
-
-const pth = __webpack_require__(/*! path */ "path");
-
-const ZipEntry = __webpack_require__(/*! ./zipEntry */ "./node_modules/adm-zip/zipEntry.js");
-
-const ZipFile = __webpack_require__(/*! ./zipFile */ "./node_modules/adm-zip/zipFile.js");
-
-const get_Bool = (val, def) => typeof val === "boolean" ? val : def;
-
-const get_Str = (val, def) => typeof val === "string" ? val : def;
+var Utils = __webpack_require__(/*! ../util */ "./node_modules/adm-zip/util/index.js"),
+    Constants = Utils.Constants;
+/* The central directory file header */
 
-const defaultOptions = {
-  // option "noSort" : if true it disables files sorting
-  noSort: false,
-  // read entries during load (initial loading may be slower)
-  readEntries: false,
-  // default method is none
-  method: Utils.Constants.NONE,
-  // file system
-  fs: null
-};
 
-module.exports = function (
-/**String*/
-input,
-/** object */
-options) {
-  let inBuffer = null; // create object based default options, allowing them to be overwritten
+module.exports = function () {
+  var _verMade = 20,
+      // v2.0
+  _version = 10,
+      // v1.0
+  _flags = 0,
+      _method = 0,
+      _time = 0,
+      _crc = 0,
+      _compressedSize = 0,
+      _size = 0,
+      _fnameLen = 0,
+      _extraLen = 0,
+      _comLen = 0,
+      _diskStart = 0,
+      _inattr = 0,
+      _attr = 0,
+      _offset = 0;
+  _verMade |= Utils.isWin ? 0x0a00 : 0x0300; // Set EFS flag since filename and comment fields are all by default encoded using UTF-8.
+  // Without it file names may be corrupted for other apps when file names use unicode chars
 
-  const opts = Object.assign(Object.create(null), defaultOptions); // test input variable
+  _flags |= Constants.FLG_EFS;
+  var _dataHeader = {};
 
-  if (input && "object" === typeof input) {
-    // if value is not buffer we accept it to be object with options
-    if (!(input instanceof Uint8Array)) {
-      Object.assign(opts, input);
-      input = opts.input ? opts.input : undefined;
-      if (opts.input) delete opts.input;
-    } // if input is buffer
+  function setTime(val) {
+    val = new Date(val);
+    _time = (val.getFullYear() - 1980 & 0x7f) << 25 | // b09-16 years from 1980
+    val.getMonth() + 1 << 21 | // b05-08 month
+    val.getDate() << 16 | // b00-04 hour
+    // 2 bytes time
+    val.getHours() << 11 | // b11-15 hour
+    val.getMinutes() << 5 | // b05-10 minute
+    val.getSeconds() >> 1; // b00-04 seconds divided by 2
+  }
 
+  setTime(+new Date());
+  return {
+    get made() {
+      return _verMade;
+    },
 
-    if (Buffer.isBuffer(input)) {
-      inBuffer = input;
-      opts.method = Utils.Constants.BUFFER;
-      input = undefined;
-    }
-  } // assign options
+    set made(val) {
+      _verMade = val;
+    },
 
+    get version() {
+      return _version;
+    },
 
-  Object.assign(opts, options); // instanciate utils filesystem
+    set version(val) {
+      _version = val;
+    },
 
-  const filetools = new Utils(opts); // if input is file name we retrieve its content
+    get flags() {
+      return _flags;
+    },
 
-  if (input && "string" === typeof input) {
-    // load zip file
-    if (filetools.fs.existsSync(input)) {
-      opts.method = Utils.Constants.FILE;
-      opts.filename = input;
-      inBuffer = filetools.fs.readFileSync(input);
-    } else {
-      throw new Error(Utils.Errors.INVALID_FILENAME);
-    }
-  } // create variable
+    set flags(val) {
+      _flags = val;
+    },
 
+    get method() {
+      return _method;
+    },
 
-  const _zip = new ZipFile(inBuffer, opts);
+    set method(val) {
+      switch (val) {
+        case Constants.STORED:
+          this.version = 10;
 
-  const canonical = Utils.canonical,
-        sanitize = Utils.sanitize;
+        case Constants.DEFLATED:
+        default:
+          this.version = 20;
+      }
 
-  function getEntry(
-  /**Object*/
-  entry) {
-    if (entry && _zip) {
-      var item; // If entry was given as a file name
+      _method = val;
+    },
 
-      if (typeof entry === "string") item = _zip.getEntry(entry); // if entry was given as a ZipEntry object
+    get time() {
+      return new Date((_time >> 25 & 0x7f) + 1980, (_time >> 21 & 0x0f) - 1, _time >> 16 & 0x1f, _time >> 11 & 0x1f, _time >> 5 & 0x3f, (_time & 0x1f) << 1);
+    },
 
-      if (typeof entry === "object" && typeof entry.entryName !== "undefined" && typeof entry.header !== "undefined") item = _zip.getEntry(entry.entryName);
+    set time(val) {
+      setTime(val);
+    },
 
-      if (item) {
-        return item;
-      }
-    }
+    get crc() {
+      return _crc;
+    },
 
-    return null;
-  }
+    set crc(val) {
+      _crc = Math.max(0, val) >>> 0;
+    },
 
-  function fixPath(zipPath) {
-    const _pth$posix = pth.posix,
-          join = _pth$posix.join,
-          normalize = _pth$posix.normalize,
-          sep = _pth$posix.sep; // convert windows file separators and normalize
+    get compressedSize() {
+      return _compressedSize;
+    },
 
-    return join(".", normalize(sep + zipPath.split("\\").join(sep) + sep));
-  }
+    set compressedSize(val) {
+      _compressedSize = Math.max(0, val) >>> 0;
+    },
 
-  return {
-    /**
-     * Extracts the given entry from the archive and returns the content as a Buffer object
-     * @param entry ZipEntry object or String with the full path of the entry
-     *
-     * @return Buffer or Null in case of error
-     */
-    readFile: function (
-    /**Object*/
-    entry,
-    /*String, Buffer*/
-    pass) {
-      var item = getEntry(entry);
-      return item && item.getData(pass) || null;
+    get size() {
+      return _size;
     },
 
-    /**
-     * Asynchronous readFile
-     * @param entry ZipEntry object or String with the full path of the entry
-     * @param callback
-     *
-     * @return Buffer or Null in case of error
-     */
-    readFileAsync: function (
-    /**Object*/
-    entry,
-    /**Function*/
-    callback) {
-      var item = getEntry(entry);
+    set size(val) {
+      _size = Math.max(0, val) >>> 0;
+    },
 
-      if (item) {
-        item.getDataAsync(callback);
-      } else {
-        callback(null, "getEntry failed for:" + entry);
-      }
+    get fileNameLength() {
+      return _fnameLen;
     },
 
-    /**
-     * Extracts the given entry from the archive and returns the content as plain text in the given encoding
-     * @param entry ZipEntry object or String with the full path of the entry
-     * @param encoding Optional. If no encoding is specified utf8 is used
-     *
-     * @return String
-     */
-    readAsText: function (
-    /**Object*/
-    entry,
-    /**String=*/
-    encoding) {
-      var item = getEntry(entry);
+    set fileNameLength(val) {
+      _fnameLen = val;
+    },
 
-      if (item) {
-        var data = item.getData();
+    get extraLength() {
+      return _extraLen;
+    },
 
-        if (data && data.length) {
-          return data.toString(encoding || "utf8");
-        }
-      }
+    set extraLength(val) {
+      _extraLen = val;
+    },
 
-      return "";
+    get commentLength() {
+      return _comLen;
     },
 
-    /**
-     * Asynchronous readAsText
-     * @param entry ZipEntry object or String with the full path of the entry
-     * @param callback
-     * @param encoding Optional. If no encoding is specified utf8 is used
-     *
-     * @return String
-     */
-    readAsTextAsync: function (
-    /**Object*/
-    entry,
-    /**Function*/
-    callback,
-    /**String=*/
-    encoding) {
-      var item = getEntry(entry);
+    set commentLength(val) {
+      _comLen = val;
+    },
 
-      if (item) {
-        item.getDataAsync(function (data, err) {
-          if (err) {
-            callback(data, err);
-            return;
-          }
+    get diskNumStart() {
+      return _diskStart;
+    },
 
-          if (data && data.length) {
-            callback(data.toString(encoding || "utf8"));
-          } else {
-            callback("");
-          }
-        });
-      } else {
-        callback("");
-      }
+    set diskNumStart(val) {
+      _diskStart = Math.max(0, val) >>> 0;
     },
 
-    /**
-     * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory
-     *
-     * @param entry
-     */
-    deleteFile: function (
-    /**Object*/
-    entry) {
-      // @TODO: test deleteFile
-      var item = getEntry(entry);
+    get inAttr() {
+      return _inattr;
+    },
 
-      if (item) {
-        _zip.deleteEntry(item.entryName);
-      }
+    set inAttr(val) {
+      _inattr = Math.max(0, val) >>> 0;
     },
 
-    /**
-     * Adds a comment to the zip. The zip must be rewritten after adding the comment.
-     *
-     * @param comment
-     */
-    addZipComment: function (
-    /**String*/
-    comment) {
-      // @TODO: test addZipComment
-      _zip.comment = comment;
+    get attr() {
+      return _attr;
     },
 
-    /**
-     * Returns the zip comment
-     *
-     * @return String
-     */
-    getZipComment: function () {
-      return _zip.comment || "";
+    set attr(val) {
+      _attr = Math.max(0, val) >>> 0;
     },
 
-    /**
-     * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment
-     * The comment cannot exceed 65535 characters in length
-     *
-     * @param entry
-     * @param comment
-     */
-    addZipEntryComment: function (
-    /**Object*/
-    entry,
-    /**String*/
-    comment) {
-      var item = getEntry(entry);
+    // get Unix file permissions
+    get fileAttr() {
+      return _attr ? (_attr >>> 0 | 0) >> 16 & 0xfff : 0;
+    },
 
-      if (item) {
-        item.comment = comment;
-      }
+    get offset() {
+      return _offset;
     },
 
-    /**
-     * Returns the comment of the specified entry
-     *
-     * @param entry
-     * @return String
-     */
-    getZipEntryComment: function (
-    /**Object*/
-    entry) {
-      var item = getEntry(entry);
+    set offset(val) {
+      _offset = Math.max(0, val) >>> 0;
+    },
 
-      if (item) {
-        return item.comment || "";
-      }
+    get encripted() {
+      return (_flags & 1) === 1;
+    },
 
-      return "";
+    get entryHeaderSize() {
+      return Constants.CENHDR + _fnameLen + _extraLen + _comLen;
     },
 
-    /**
-     * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content
-     *
-     * @param entry
-     * @param content
-     */
-    updateFile: function (
-    /**Object*/
-    entry,
-    /**Buffer*/
-    content) {
-      var item = getEntry(entry);
+    get realDataOffset() {
+      return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen;
+    },
 
-      if (item) {
-        item.setData(content);
+    get dataHeader() {
+      return _dataHeader;
+    },
+
+    loadDataHeaderFromBinary: function (
+    /*Buffer*/
+    input) {
+      var data = input.slice(_offset, _offset + Constants.LOCHDR); // 30 bytes and should start with "PK\003\004"
+
+      if (data.readUInt32LE(0) !== Constants.LOCSIG) {
+        throw new Error(Utils.Errors.INVALID_LOC);
       }
+
+      _dataHeader = {
+        // version needed to extract
+        version: data.readUInt16LE(Constants.LOCVER),
+        // general purpose bit flag
+        flags: data.readUInt16LE(Constants.LOCFLG),
+        // compression method
+        method: data.readUInt16LE(Constants.LOCHOW),
+        // modification time (2 bytes time, 2 bytes date)
+        time: data.readUInt32LE(Constants.LOCTIM),
+        // uncompressed file crc-32 value
+        crc: data.readUInt32LE(Constants.LOCCRC),
+        // compressed size
+        compressedSize: data.readUInt32LE(Constants.LOCSIZ),
+        // uncompressed size
+        size: data.readUInt32LE(Constants.LOCLEN),
+        // filename length
+        fnameLen: data.readUInt16LE(Constants.LOCNAM),
+        // extra field length
+        extraLen: data.readUInt16LE(Constants.LOCEXT)
+      };
     },
+    loadFromBinary: function (
+    /*Buffer*/
+    data) {
+      // data should be 46 bytes and start with "PK 01 02"
+      if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) {
+        throw new Error(Utils.Errors.INVALID_CEN);
+      } // version made by
 
-    /**
-     * Adds a file from the disk to the archive
-     *
-     * @param localPath File to add to zip
-     * @param zipPath Optional path inside the zip
-     * @param zipName Optional name for the file
-     */
-    addLocalFile: function (
-    /**String*/
-    localPath,
-    /**String=*/
-    zipPath,
-    /**String=*/
-    zipName,
-    /**String*/
-    comment) {
-      if (filetools.fs.existsSync(localPath)) {
-        // fix ZipPath
-        zipPath = zipPath ? fixPath(zipPath) : ""; // p - local file name
 
-        var p = localPath.split("\\").join("/").split("/").pop(); // add file name into zippath
+      _verMade = data.readUInt16LE(Constants.CENVEM); // version needed to extract
 
-        zipPath += zipName ? zipName : p; // read file attributes
+      _version = data.readUInt16LE(Constants.CENVER); // encrypt, decrypt flags
 
-        const _attr = filetools.fs.statSync(localPath); // add file into zip file
+      _flags = data.readUInt16LE(Constants.CENFLG); // compression method
 
+      _method = data.readUInt16LE(Constants.CENHOW); // modification time (2 bytes time, 2 bytes date)
 
-        this.addFile(zipPath, filetools.fs.readFileSync(localPath), comment, _attr);
-      } else {
-        throw new Error(Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath));
-      }
-    },
+      _time = data.readUInt32LE(Constants.CENTIM); // uncompressed file crc-32 value
 
-    /**
-     * Adds a local directory and all its nested files and directories to the archive
-     *
-     * @param localPath
-     * @param zipPath optional path inside zip
-     * @param filter optional RegExp or Function if files match will
-     *               be included.
-     */
-    addLocalFolder: function (
-    /**String*/
-    localPath,
-    /**String=*/
-    zipPath,
-    /**=RegExp|Function*/
-    filter) {
-      // Prepare filter
-      if (filter instanceof RegExp) {
-        // if filter is RegExp wrap it
-        filter = function (rx) {
-          return function (filename) {
-            return rx.test(filename);
-          };
-        }(filter);
-      } else if ("function" !== typeof filter) {
-        // if filter is not function we will replace it
-        filter = function () {
-          return true;
-        };
-      } // fix ZipPath
+      _crc = data.readUInt32LE(Constants.CENCRC); // compressed size
 
+      _compressedSize = data.readUInt32LE(Constants.CENSIZ); // uncompressed size
 
-      zipPath = zipPath ? fixPath(zipPath) : ""; // normalize the path first
+      _size = data.readUInt32LE(Constants.CENLEN); // filename length
 
-      localPath = pth.normalize(localPath);
+      _fnameLen = data.readUInt16LE(Constants.CENNAM); // extra field length
 
-      if (filetools.fs.existsSync(localPath)) {
-        const items = filetools.findFiles(localPath);
-        const self = this;
+      _extraLen = data.readUInt16LE(Constants.CENEXT); // file comment length
 
-        if (items.length) {
-          items.forEach(function (filepath) {
-            var p = pth.relative(localPath, filepath).split("\\").join("/"); //windows fix
+      _comLen = data.readUInt16LE(Constants.CENCOM); // volume number start
 
-            if (filter(p)) {
-              var stats = filetools.fs.statSync(filepath);
+      _diskStart = data.readUInt16LE(Constants.CENDSK); // internal file attributes
 
-              if (stats.isFile()) {
-                self.addFile(zipPath + p, filetools.fs.readFileSync(filepath), "", stats);
-              } else {
-                self.addFile(zipPath + p + "/", Buffer.alloc(0), "", stats);
-              }
-            }
-          });
-        }
-      } else {
-        throw new Error(Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath));
-      }
-    },
+      _inattr = data.readUInt16LE(Constants.CENATT); // external file attributes
 
-    /**
-     * Asynchronous addLocalFile
-     * @param localPath
-     * @param callback
-     * @param zipPath optional path inside zip
-     * @param filter optional RegExp or Function if files match will
-     *               be included.
-     */
-    addLocalFolderAsync: function (
-    /*String*/
-    localPath,
-    /*Function*/
-    callback,
-    /*String*/
-    zipPath,
-    /*RegExp|Function*/
-    filter) {
-      if (filter instanceof RegExp) {
-        filter = function (rx) {
-          return function (filename) {
-            return rx.test(filename);
-          };
-        }(filter);
-      } else if ("function" !== typeof filter) {
-        filter = function () {
-          return true;
-        };
-      } // fix ZipPath
+      _attr = data.readUInt32LE(Constants.CENATX); // LOC header offset
 
+      _offset = data.readUInt32LE(Constants.CENOFF);
+    },
+    dataHeaderToBinary: function () {
+      // LOC header size (30 bytes)
+      var data = Buffer.alloc(Constants.LOCHDR); // "PK\003\004"
 
-      zipPath = zipPath ? fixPath(zipPath) : ""; // normalize the path first
+      data.writeUInt32LE(Constants.LOCSIG, 0); // version needed to extract
 
-      localPath = pth.normalize(localPath);
-      var self = this;
-      filetools.fs.open(localPath, "r", function (err) {
-        if (err && err.code === "ENOENT") {
-          callback(undefined, Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath));
-        } else if (err) {
-          callback(undefined, err);
-        } else {
-          var items = filetools.findFiles(localPath);
-          var i = -1;
+      data.writeUInt16LE(_version, Constants.LOCVER); // general purpose bit flag
 
-          var next = function () {
-            i += 1;
+      data.writeUInt16LE(_flags, Constants.LOCFLG); // compression method
 
-            if (i < items.length) {
-              var filepath = items[i];
-              var p = pth.relative(localPath, filepath).split("\\").join("/"); //windows fix
+      data.writeUInt16LE(_method, Constants.LOCHOW); // modification time (2 bytes time, 2 bytes date)
 
-              p = p.normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/[^\x20-\x7E]/g, ""); // accent fix
+      data.writeUInt32LE(_time, Constants.LOCTIM); // uncompressed file crc-32 value
 
-              if (filter(p)) {
-                filetools.fs.stat(filepath, function (er0, stats) {
-                  if (er0) callback(undefined, er0);
+      data.writeUInt32LE(_crc, Constants.LOCCRC); // compressed size
 
-                  if (stats.isFile()) {
-                    filetools.fs.readFile(filepath, function (er1, data) {
-                      if (er1) {
-                        callback(undefined, er1);
-                      } else {
-                        self.addFile(zipPath + p, data, "", stats);
-                        next();
-                      }
-                    });
-                  } else {
-                    self.addFile(zipPath + p + "/", Buffer.alloc(0), "", stats);
-                    next();
-                  }
-                });
-              } else {
-                next();
-              }
-            } else {
-              callback(true, undefined);
-            }
-          };
+      data.writeUInt32LE(_compressedSize, Constants.LOCSIZ); // uncompressed size
 
-          next();
-        }
-      });
-    },
+      data.writeUInt32LE(_size, Constants.LOCLEN); // filename length
 
-    /**
-     *
-     * @param {string} localPath - path where files will be extracted
-     * @param {object} props - optional properties
-     * @param {string} props.zipPath - optional path inside zip
-     * @param {regexp, function} props.filter - RegExp or Function if files match will be included.
-     */
-    addLocalFolderPromise: function (
-    /*String*/
-    localPath,
-    /* object */
-    props) {
-      return new Promise((resolve, reject) => {
-        const _Object$assign = Object.assign({}, props),
-              filter = _Object$assign.filter,
-              zipPath = _Object$assign.zipPath;
+      data.writeUInt16LE(_fnameLen, Constants.LOCNAM); // extra field length
 
-        this.addLocalFolderAsync(localPath, (done, err) => {
-          if (err) reject(err);
-          if (done) resolve(this);
-        }, zipPath, filter);
-      });
+      data.writeUInt16LE(_extraLen, Constants.LOCEXT);
+      return data;
     },
+    entryHeaderToBinary: function () {
+      // CEN header size (46 bytes)
+      var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen); // "PK\001\002"
 
-    /**
-     * Allows you to create a entry (file or directory) in the zip file.
-     * If you want to create a directory the entryName must end in / and a null buffer should be provided.
-     * Comment and attributes are optional
-     *
-     * @param {string} entryName
-     * @param {Buffer | string} content - file content as buffer or utf8 coded string
-     * @param {string} comment - file comment
-     * @param {number | object} attr - number as unix file permissions, object as filesystem Stats object
-     */
-    addFile: function (
-    /**String*/
-    entryName,
-    /**Buffer*/
-    content,
-    /**String*/
-    comment,
-    /**Number*/
-    attr) {
-      let entry = getEntry(entryName);
-      const update = entry != null; // prepare new entry
-
-      if (!update) {
-        entry = new ZipEntry();
-        entry.entryName = entryName;
-      }
-
-      entry.comment = comment || "";
-      const isStat = "object" === typeof attr && attr instanceof filetools.fs.Stats; // last modification time from file stats
+      data.writeUInt32LE(Constants.CENSIG, 0); // version made by
 
-      if (isStat) {
-        entry.header.time = attr.mtime;
-      } // Set file attribute
+      data.writeUInt16LE(_verMade, Constants.CENVEM); // version needed to extract
 
+      data.writeUInt16LE(_version, Constants.CENVER); // encrypt, decrypt flags
 
-      var fileattr = entry.isDirectory ? 0x10 : 0; // (MS-DOS directory flag)
-      // extended attributes field for Unix
+      data.writeUInt16LE(_flags, Constants.CENFLG); // compression method
 
-      if (!Utils.isWin) {
-        // set file type either S_IFDIR / S_IFREG
-        let unix = entry.isDirectory ? 0x4000 : 0x8000;
+      data.writeUInt16LE(_method, Constants.CENHOW); // modification time (2 bytes time, 2 bytes date)
 
-        if (isStat) {
-          // File attributes from file stats
-          unix |= 0xfff & attr.mode;
-        } else if ("number" === typeof attr) {
-          // attr from given attr values
-          unix |= 0xfff & attr;
-        } else {
-          // Default values:
-          unix |= entry.isDirectory ? 0o755 : 0o644; // permissions (drwxr-xr-x) or (-r-wr--r--)
-        }
+      data.writeUInt32LE(_time, Constants.CENTIM); // uncompressed file crc-32 value
 
-        fileattr = (fileattr | unix << 16) >>> 0; // add attributes
-      }
+      data.writeUInt32LE(_crc, Constants.CENCRC); // compressed size
 
-      entry.attr = fileattr;
-      entry.setData(content);
-      if (!update) _zip.setEntry(entry);
-    },
+      data.writeUInt32LE(_compressedSize, Constants.CENSIZ); // uncompressed size
 
-    /**
-     * Returns an array of ZipEntry objects representing the files and folders inside the archive
-     *
-     * @return Array
-     */
-    getEntries: function () {
-      return _zip ? _zip.entries : [];
-    },
+      data.writeUInt32LE(_size, Constants.CENLEN); // filename length
 
-    /**
-     * Returns a ZipEntry object representing the file or folder specified by ``name``.
-     *
-     * @param name
-     * @return ZipEntry
-     */
-    getEntry: function (
-    /**String*/
-    name) {
-      return getEntry(name);
-    },
-    getEntryCount: function () {
-      return _zip.getEntryCount();
-    },
-    forEach: function (callback) {
-      return _zip.forEach(callback);
-    },
+      data.writeUInt16LE(_fnameLen, Constants.CENNAM); // extra field length
 
-    /**
-     * Extracts the given entry to the given targetPath
-     * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted
-     *
-     * @param entry ZipEntry object or String with the full path of the entry
-     * @param targetPath Target folder where to write the file
-     * @param maintainEntryPath If maintainEntryPath is true and the entry is inside a folder, the entry folder
-     *                          will be created in targetPath as well. Default is TRUE
-     * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
-     *                  Default is FALSE
-     * @param keepOriginalPermission The file will be set as the permission from the entry if this is true.
-     *                  Default is FALSE
-     * @param outFileName String If set will override the filename of the extracted file (Only works if the entry is a file)
-     *
-     * @return Boolean
-     */
-    extractEntryTo: function (
-    /**Object*/
-    entry,
-    /**String*/
-    targetPath,
-    /**Boolean*/
-    maintainEntryPath,
-    /**Boolean*/
-    overwrite,
-    /**Boolean*/
-    keepOriginalPermission,
-    /**String**/
-    outFileName) {
-      overwrite = get_Bool(overwrite, false);
-      keepOriginalPermission = get_Bool(keepOriginalPermission, false);
-      maintainEntryPath = get_Bool(maintainEntryPath, true);
-      outFileName = get_Str(outFileName, get_Str(keepOriginalPermission, undefined));
-      var item = getEntry(entry);
+      data.writeUInt16LE(_extraLen, Constants.CENEXT); // file comment length
 
-      if (!item) {
-        throw new Error(Utils.Errors.NO_ENTRY);
-      }
+      data.writeUInt16LE(_comLen, Constants.CENCOM); // volume number start
 
-      var entryName = canonical(item.entryName);
-      var target = sanitize(targetPath, outFileName && !item.isDirectory ? outFileName : maintainEntryPath ? entryName : pth.basename(entryName));
+      data.writeUInt16LE(_diskStart, Constants.CENDSK); // internal file attributes
 
-      if (item.isDirectory) {
-        var children = _zip.getEntryChildren(item);
+      data.writeUInt16LE(_inattr, Constants.CENATT); // external file attributes
 
-        children.forEach(function (child) {
-          if (child.isDirectory) return;
-          var content = child.getData();
+      data.writeUInt32LE(_attr, Constants.CENATX); // LOC header offset
 
-          if (!content) {
-            throw new Error(Utils.Errors.CANT_EXTRACT_FILE);
-          }
+      data.writeUInt32LE(_offset, Constants.CENOFF); // fill all with
 
-          var name = canonical(child.entryName);
-          var childName = sanitize(targetPath, maintainEntryPath ? name : pth.basename(name)); // The reverse operation for attr depend on method addFile()
+      data.fill(0x00, Constants.CENHDR);
+      return data;
+    },
+    toJSON: function () {
+      const bytes = function (nr) {
+        return nr + " bytes";
+      };
 
-          const fileAttr = keepOriginalPermission ? child.header.fileAttr : undefined;
-          filetools.writeFileTo(childName, content, overwrite, fileAttr);
-        });
-        return true;
-      }
+      return {
+        made: _verMade,
+        version: _version,
+        flags: _flags,
+        method: Utils.methodToString(_method),
+        time: this.time,
+        crc: "0x" + _crc.toString(16).toUpperCase(),
+        compressedSize: bytes(_compressedSize),
+        size: bytes(_size),
+        fileNameLength: bytes(_fnameLen),
+        extraLength: bytes(_extraLen),
+        commentLength: bytes(_comLen),
+        diskNumStart: _diskStart,
+        inAttr: _inattr,
+        attr: _attr,
+        offset: _offset,
+        entryHeaderSize: bytes(Constants.CENHDR + _fnameLen + _extraLen + _comLen)
+      };
+    },
+    toString: function () {
+      return JSON.stringify(this.toJSON(), null, "\t");
+    }
+  };
+};
 
-      var content = item.getData();
-      if (!content) throw new Error(Utils.Errors.CANT_EXTRACT_FILE);
+/***/ }),
 
-      if (filetools.fs.existsSync(target) && !overwrite) {
-        throw new Error(Utils.Errors.CANT_OVERRIDE);
-      } // The reverse operation for attr depend on method addFile()
+/***/ "./node_modules/adm-zip/headers/index.js":
+/*!***********************************************!*\
+  !*** ./node_modules/adm-zip/headers/index.js ***!
+  \***********************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
+exports.EntryHeader = __webpack_require__(/*! ./entryHeader */ "./node_modules/adm-zip/headers/entryHeader.js");
+exports.MainHeader = __webpack_require__(/*! ./mainHeader */ "./node_modules/adm-zip/headers/mainHeader.js");
 
-      const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;
-      filetools.writeFileTo(target, content, overwrite, fileAttr);
-      return true;
-    },
+/***/ }),
 
-    /**
-     * Test the archive
-     *
-     */
-    test: function (pass) {
-      if (!_zip) {
-        return false;
-      }
+/***/ "./node_modules/adm-zip/headers/mainHeader.js":
+/*!****************************************************!*\
+  !*** ./node_modules/adm-zip/headers/mainHeader.js ***!
+  \****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-      for (var entry in _zip.entries) {
-        try {
-          if (entry.isDirectory) {
-            continue;
-          }
+var Utils = __webpack_require__(/*! ../util */ "./node_modules/adm-zip/util/index.js"),
+    Constants = Utils.Constants;
+/* The entries in the end of central directory */
 
-          var content = _zip.entries[entry].getData(pass);
 
-          if (!content) {
-            return false;
-          }
-        } catch (err) {
-          return false;
-        }
-      }
+module.exports = function () {
+  var _volumeEntries = 0,
+      _totalEntries = 0,
+      _size = 0,
+      _offset = 0,
+      _commentLength = 0;
+  return {
+    get diskEntries() {
+      return _volumeEntries;
+    },
 
-      return true;
+    set diskEntries(
+    /*Number*/
+    val) {
+      _volumeEntries = _totalEntries = val;
     },
 
-    /**
-     * Extracts the entire archive to the given location
-     *
-     * @param targetPath Target location
-     * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
-     *                  Default is FALSE
-     * @param keepOriginalPermission The file will be set as the permission from the entry if this is true.
-     *                  Default is FALSE
-     */
-    extractAllTo: function (
-    /**String*/
-    targetPath,
-    /**Boolean*/
-    overwrite,
-    /**Boolean*/
-    keepOriginalPermission,
-    /*String, Buffer*/
-    pass) {
-      overwrite = get_Bool(overwrite, false);
-      pass = get_Str(keepOriginalPermission, pass);
-      keepOriginalPermission = get_Bool(keepOriginalPermission, false);
+    get totalEntries() {
+      return _totalEntries;
+    },
 
-      if (!_zip) {
-        throw new Error(Utils.Errors.NO_ZIP);
-      }
+    set totalEntries(
+    /*Number*/
+    val) {
+      _totalEntries = _volumeEntries = val;
+    },
 
-      _zip.entries.forEach(function (entry) {
-        var entryName = sanitize(targetPath, canonical(entry.entryName.toString()));
+    get size() {
+      return _size;
+    },
 
-        if (entry.isDirectory) {
-          filetools.makeDir(entryName);
-          return;
-        }
+    set size(
+    /*Number*/
+    val) {
+      _size = val;
+    },
 
-        var content = entry.getData(pass);
+    get offset() {
+      return _offset;
+    },
 
-        if (!content) {
-          throw new Error(Utils.Errors.CANT_EXTRACT_FILE);
-        } // The reverse operation for attr depend on method addFile()
+    set offset(
+    /*Number*/
+    val) {
+      _offset = val;
+    },
 
+    get commentLength() {
+      return _commentLength;
+    },
 
-        const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;
-        filetools.writeFileTo(entryName, content, overwrite, fileAttr);
+    set commentLength(
+    /*Number*/
+    val) {
+      _commentLength = val;
+    },
 
-        try {
-          filetools.fs.utimesSync(entryName, entry.header.time, entry.header.time);
-        } catch (err) {
-          throw new Error(Utils.Errors.CANT_EXTRACT_FILE);
-        }
-      });
+    get mainHeaderSize() {
+      return Constants.ENDHDR + _commentLength;
     },
 
-    /**
-     * Asynchronous extractAllTo
-     *
-     * @param targetPath Target location
-     * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
-     *                  Default is FALSE
-     * @param keepOriginalPermission The file will be set as the permission from the entry if this is true.
-     *                  Default is FALSE
-     * @param callback The callback will be executed when all entries are extracted successfully or any error is thrown.
-     */
-    extractAllToAsync: function (
-    /**String*/
-    targetPath,
-    /**Boolean*/
-    overwrite,
-    /**Boolean*/
-    keepOriginalPermission,
-    /**Function*/
-    callback) {
-      if (!callback) {
-        callback = function () {};
+    loadFromBinary: function (
+    /*Buffer*/
+    data) {
+      // data should be 22 bytes and start with "PK 05 06"
+      // or be 56+ bytes and start with "PK 06 06" for Zip64
+      if ((data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG) && (data.length < Constants.ZIP64HDR || data.readUInt32LE(0) !== Constants.ZIP64SIG)) {
+        throw new Error(Utils.Errors.INVALID_END);
       }
 
-      overwrite = get_Bool(overwrite, false);
-      if (typeof keepOriginalPermission === "function" && !callback) callback = keepOriginalPermission;
-      keepOriginalPermission = get_Bool(keepOriginalPermission, false);
+      if (data.readUInt32LE(0) === Constants.ENDSIG) {
+        // number of entries on this volume
+        _volumeEntries = data.readUInt16LE(Constants.ENDSUB); // total number of entries
 
-      if (!_zip) {
-        callback(new Error(Utils.Errors.NO_ZIP));
-        return;
-      }
+        _totalEntries = data.readUInt16LE(Constants.ENDTOT); // central directory size in bytes
 
-      targetPath = pth.resolve(targetPath); // convert entryName to
+        _size = data.readUInt32LE(Constants.ENDSIZ); // offset of first CEN header
 
-      const getPath = entry => sanitize(targetPath, pth.normalize(canonical(entry.entryName.toString())));
+        _offset = data.readUInt32LE(Constants.ENDOFF); // zip file comment length
 
-      const getError = (msg, file) => new Error(msg + ': "' + file + '"'); // separate directories from files
+        _commentLength = data.readUInt16LE(Constants.ENDCOM);
+      } else {
+        // number of entries on this volume
+        _volumeEntries = Utils.readBigUInt64LE(data, Constants.ZIP64SUB); // total number of entries
 
+        _totalEntries = Utils.readBigUInt64LE(data, Constants.ZIP64TOT); // central directory size in bytes
 
-      const dirEntries = [];
-      const fileEntries = new Set();
+        _size = Utils.readBigUInt64LE(data, Constants.ZIP64SIZ); // offset of first CEN header
 
-      _zip.entries.forEach(e => {
-        if (e.isDirectory) {
-          dirEntries.push(e);
-        } else {
-          fileEntries.add(e);
-        }
-      }); // Create directory entries first synchronously
-      // this prevents race condition and assures folders are there before writing files
+        _offset = Utils.readBigUInt64LE(data, Constants.ZIP64OFF);
+        _commentLength = 0;
+      }
+    },
+    toBinary: function () {
+      var b = Buffer.alloc(Constants.ENDHDR + _commentLength); // "PK 05 06" signature
 
+      b.writeUInt32LE(Constants.ENDSIG, 0);
+      b.writeUInt32LE(0, 4); // number of entries on this volume
 
-      for (const entry of dirEntries) {
-        const dirPath = getPath(entry); // The reverse operation for attr depend on method addFile()
+      b.writeUInt16LE(_volumeEntries, Constants.ENDSUB); // total number of entries
 
-        const dirAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;
+      b.writeUInt16LE(_totalEntries, Constants.ENDTOT); // central directory size in bytes
 
-        try {
-          filetools.makeDir(dirPath);
-          if (dirAttr) filetools.fs.chmodSync(dirPath, dirAttr); // in unix timestamp will change if files are later added to folder, but still
+      b.writeUInt32LE(_size, Constants.ENDSIZ); // offset of first CEN header
 
-          filetools.fs.utimesSync(dirPath, entry.header.time, entry.header.time);
-        } catch (er) {
-          callback(getError("Unable to create folder", dirPath));
-        }
-      } // callback wrapper, for some house keeping
+      b.writeUInt32LE(_offset, Constants.ENDOFF); // zip file comment length
 
+      b.writeUInt16LE(_commentLength, Constants.ENDCOM); // fill comment memory with spaces so no garbage is left there
 
-      const done = () => {
-        if (fileEntries.size === 0) {
-          callback();
-        }
-      }; // Extract file entries asynchronously
+      b.fill(" ", Constants.ENDHDR);
+      return b;
+    },
+    toJSON: function () {
+      // creates 0x0000 style output
+      const offset = function (nr, len) {
+        let offs = nr.toString(16).toUpperCase();
 
+        while (offs.length < len) offs = "0" + offs;
 
-      for (const entry of fileEntries.values()) {
-        const entryName = pth.normalize(canonical(entry.entryName.toString()));
-        const filePath = sanitize(targetPath, entryName);
-        entry.getDataAsync(function (content, err_1) {
-          if (err_1) {
-            callback(new Error(err_1));
-            return;
-          }
+        return "0x" + offs;
+      };
 
-          if (!content) {
-            callback(new Error(Utils.Errors.CANT_EXTRACT_FILE));
-          } else {
-            // The reverse operation for attr depend on method addFile()
-            const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;
-            filetools.writeFileToAsync(filePath, content, overwrite, fileAttr, function (succ) {
-              if (!succ) {
-                callback(getError("Unable to write file", filePath));
-                return;
-              }
-
-              filetools.fs.utimes(filePath, entry.header.time, entry.header.time, function (err_2) {
-                if (err_2) {
-                  callback(getError("Unable to set times", filePath));
-                  return;
-                }
+      return {
+        diskEntries: _volumeEntries,
+        totalEntries: _totalEntries,
+        size: _size + " bytes",
+        offset: offset(_offset, 4),
+        commentLength: _commentLength
+      };
+    },
+    toString: function () {
+      return JSON.stringify(this.toJSON(), null, "\t");
+    }
+  };
+};
 
-                fileEntries.delete(entry); // call the callback if it was last entry
+/***/ }),
 
-                done();
-              });
-            });
-          }
-        });
-      } // call the callback if fileEntries was empty
+/***/ "./node_modules/adm-zip/methods/deflater.js":
+/*!**************************************************!*\
+  !*** ./node_modules/adm-zip/methods/deflater.js ***!
+  \**************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
+module.exports = function (
+/*Buffer*/
+inbuf) {
+  var zlib = __webpack_require__(/*! zlib */ "zlib");
 
-      done();
+  var opts = {
+    chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024
+  };
+  return {
+    deflate: function () {
+      return zlib.deflateRawSync(inbuf, opts);
     },
-
-    /**
-     * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip
-     *
-     * @param targetFileName
-     * @param callback
-     */
-    writeZip: function (
-    /**String*/
-    targetFileName,
-    /**Function*/
+    deflateAsync: function (
+    /*Function*/
     callback) {
-      if (arguments.length === 1) {
-        if (typeof targetFileName === "function") {
-          callback = targetFileName;
-          targetFileName = "";
+      var tmp = zlib.createDeflateRaw(opts),
+          parts = [],
+          total = 0;
+      tmp.on("data", function (data) {
+        parts.push(data);
+        total += data.length;
+      });
+      tmp.on("end", function () {
+        var buf = Buffer.alloc(total),
+            written = 0;
+        buf.fill(0);
+
+        for (var i = 0; i < parts.length; i++) {
+          var part = parts[i];
+          part.copy(buf, written);
+          written += part.length;
         }
-      }
 
-      if (!targetFileName && opts.filename) {
-        targetFileName = opts.filename;
-      }
+        callback && callback(buf);
+      });
+      tmp.end(inbuf);
+    }
+  };
+};
 
-      if (!targetFileName) return;
+/***/ }),
 
-      var zipData = _zip.compressToBuffer();
+/***/ "./node_modules/adm-zip/methods/index.js":
+/*!***********************************************!*\
+  !*** ./node_modules/adm-zip/methods/index.js ***!
+  \***********************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-      if (zipData) {
-        var ok = filetools.writeFileTo(targetFileName, zipData, true);
-        if (typeof callback === "function") callback(!ok ? new Error("failed") : null, "");
-      }
-    },
-    writeZipPromise: function (
-    /**String*/
-    targetFileName,
-    /* object */
-    props) {
-      const _Object$assign2 = Object.assign({
-        overwrite: true
-      }, props),
-            overwrite = _Object$assign2.overwrite,
-            perm = _Object$assign2.perm;
+exports.Deflater = __webpack_require__(/*! ./deflater */ "./node_modules/adm-zip/methods/deflater.js");
+exports.Inflater = __webpack_require__(/*! ./inflater */ "./node_modules/adm-zip/methods/inflater.js");
+exports.ZipCrypto = __webpack_require__(/*! ./zipcrypto */ "./node_modules/adm-zip/methods/zipcrypto.js");
 
-      return new Promise((resolve, reject) => {
-        // find file name
-        if (!targetFileName && opts.filename) targetFileName = opts.filename;
-        if (!targetFileName) reject("ADM-ZIP: ZIP File Name Missing");
-        this.toBufferPromise().then(zipData => {
-          const ret = done => done ? resolve(done) : reject("ADM-ZIP: Wasn't able to write zip file");
+/***/ }),
 
-          filetools.writeFileToAsync(targetFileName, zipData, overwrite, perm, ret);
-        }, reject);
-      });
-    },
-    toBufferPromise: function () {
-      return new Promise((resolve, reject) => {
-        _zip.toAsyncBuffer(resolve, reject);
-      });
-    },
+/***/ "./node_modules/adm-zip/methods/inflater.js":
+/*!**************************************************!*\
+  !*** ./node_modules/adm-zip/methods/inflater.js ***!
+  \**************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-    /**
-     * Returns the content of the entire zip file as a Buffer object
-     *
-     * @return Buffer
-     */
-    toBuffer: function (
-    /**Function=*/
-    onSuccess,
-    /**Function=*/
-    onFail,
-    /**Function=*/
-    onItemStart,
-    /**Function=*/
-    onItemEnd) {
-      this.valueOf = 2;
+module.exports = function (
+/*Buffer*/
+inbuf) {
+  var zlib = __webpack_require__(/*! zlib */ "zlib");
 
-      if (typeof onSuccess === "function") {
-        _zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd);
+  return {
+    inflate: function () {
+      return zlib.inflateRawSync(inbuf);
+    },
+    inflateAsync: function (
+    /*Function*/
+    callback) {
+      var tmp = zlib.createInflateRaw(),
+          parts = [],
+          total = 0;
+      tmp.on("data", function (data) {
+        parts.push(data);
+        total += data.length;
+      });
+      tmp.on("end", function () {
+        var buf = Buffer.alloc(total),
+            written = 0;
+        buf.fill(0);
 
-        return null;
-      }
+        for (var i = 0; i < parts.length; i++) {
+          var part = parts[i];
+          part.copy(buf, written);
+          written += part.length;
+        }
 
-      return _zip.compressToBuffer();
+        callback && callback(buf);
+      });
+      tmp.end(inbuf);
     }
   };
 };
 
 /***/ }),
 
-/***/ "./node_modules/adm-zip/headers/entryHeader.js":
-/*!*****************************************************!*\
-  !*** ./node_modules/adm-zip/headers/entryHeader.js ***!
-  \*****************************************************/
+/***/ "./node_modules/adm-zip/methods/zipcrypto.js":
+/*!***************************************************!*\
+  !*** ./node_modules/adm-zip/methods/zipcrypto.js ***!
+  \***************************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-var Utils = __webpack_require__(/*! ../util */ "./node_modules/adm-zip/util/index.js"),
-    Constants = Utils.Constants;
-/* The central directory file header */
+"use strict";
+ // node crypt, we use it for generate salt
+// eslint-disable-next-line node/no-unsupported-features/node-builtins
 
+const _require = __webpack_require__(/*! crypto */ "crypto"),
+      randomFillSync = _require.randomFillSync; // generate CRC32 lookup table
 
-module.exports = function () {
-  var _verMade = 20,
-      // v2.0
-  _version = 10,
-      // v1.0
-  _flags = 0,
-      _method = 0,
-      _time = 0,
-      _crc = 0,
-      _compressedSize = 0,
-      _size = 0,
-      _fnameLen = 0,
-      _extraLen = 0,
-      _comLen = 0,
-      _diskStart = 0,
-      _inattr = 0,
-      _attr = 0,
-      _offset = 0;
-  _verMade |= Utils.isWin ? 0x0a00 : 0x0300; // Set EFS flag since filename and comment fields are all by default encoded using UTF-8.
-  // Without it file names may be corrupted for other apps when file names use unicode chars
 
-  _flags |= Constants.FLG_EFS;
-  var _dataHeader = {};
+const crctable = new Uint32Array(256).map((t, crc) => {
+  for (let j = 0; j < 8; j++) {
+    if (0 !== (crc & 1)) {
+      crc = crc >>> 1 ^ 0xedb88320;
+    } else {
+      crc >>>= 1;
+    }
+  }
 
-  function setTime(val) {
-    val = new Date(val);
-    _time = (val.getFullYear() - 1980 & 0x7f) << 25 | // b09-16 years from 1980
-    val.getMonth() + 1 << 21 | // b05-08 month
-    val.getDate() << 16 | // b00-04 hour
-    // 2 bytes time
-    val.getHours() << 11 | // b11-15 hour
-    val.getMinutes() << 5 | // b05-10 minute
-    val.getSeconds() >> 1; // b00-04 seconds divided by 2
+  return crc >>> 0;
+}); // C-style uInt32 Multiply (discards higher bits, when JS multiply discards lower bits)
+
+const uMul = (a, b) => Math.imul(a, b) >>> 0; // crc32 byte single update (actually same function is part of utils.crc32 function :) )
+
+
+const crc32update = (pCrc32, bval) => {
+  return crctable[(pCrc32 ^ bval) & 0xff] ^ pCrc32 >>> 8;
+}; // function for generating salt for encrytion header
+
+
+const genSalt = () => {
+  if ("function" === typeof randomFillSync) {
+    return randomFillSync(Buffer.alloc(12));
+  } else {
+    // fallback if function is not defined
+    return genSalt.node();
   }
+}; // salt generation with node random function (mainly as fallback)
 
-  setTime(+new Date());
-  return {
-    get made() {
-      return _verMade;
-    },
 
-    set made(val) {
-      _verMade = val;
-    },
+genSalt.node = () => {
+  const salt = Buffer.alloc(12);
+  const len = salt.length;
 
-    get version() {
-      return _version;
-    },
+  for (let i = 0; i < len; i++) salt[i] = Math.random() * 256 & 0xff;
 
-    set version(val) {
-      _version = val;
-    },
+  return salt;
+}; // general config
 
-    get flags() {
-      return _flags;
-    },
 
-    set flags(val) {
-      _flags = val;
-    },
+const config = {
+  genSalt
+}; // Class Initkeys handles same basic ops with keys
 
-    get method() {
-      return _method;
-    },
+function Initkeys(pw) {
+  const pass = Buffer.isBuffer(pw) ? pw : Buffer.from(pw);
+  this.keys = new Uint32Array([0x12345678, 0x23456789, 0x34567890]);
 
-    set method(val) {
-      switch (val) {
-        case Constants.STORED:
-          this.version = 10;
+  for (let i = 0; i < pass.length; i++) {
+    this.updateKeys(pass[i]);
+  }
+}
 
-        case Constants.DEFLATED:
-        default:
-          this.version = 20;
-      }
+Initkeys.prototype.updateKeys = function (byteValue) {
+  const keys = this.keys;
+  keys[0] = crc32update(keys[0], byteValue);
+  keys[1] += keys[0] & 0xff;
+  keys[1] = uMul(keys[1], 134775813) + 1;
+  keys[2] = crc32update(keys[2], keys[1] >>> 24);
+  return byteValue;
+};
 
-      _method = val;
-    },
+Initkeys.prototype.next = function () {
+  const k = (this.keys[2] | 2) >>> 0; // key
 
-    get time() {
-      return new Date((_time >> 25 & 0x7f) + 1980, (_time >> 21 & 0x0f) - 1, _time >> 16 & 0x1f, _time >> 11 & 0x1f, _time >> 5 & 0x3f, (_time & 0x1f) << 1);
-    },
+  return uMul(k, k ^ 1) >> 8 & 0xff; // decode
+};
 
-    set time(val) {
-      setTime(val);
-    },
+function make_decrypter(
+/*Buffer*/
+pwd) {
+  // 1. Stage initialize key
+  const keys = new Initkeys(pwd); // return decrypter function
 
-    get crc() {
-      return _crc;
-    },
+  return function (
+  /*Buffer*/
+  data) {
+    // result - we create new Buffer for results
+    const result = Buffer.alloc(data.length);
+    let pos = 0; // process input data
 
-    set crc(val) {
-      _crc = Math.max(0, val) >>> 0;
-    },
+    for (let c of data) {
+      //c ^= keys.next();
+      //result[pos++] = c; // decode & Save Value
+      result[pos++] = keys.updateKeys(c ^ keys.next()); // update keys with decoded byte
+    }
 
-    get compressedSize() {
-      return _compressedSize;
-    },
+    return result;
+  };
+}
 
-    set compressedSize(val) {
-      _compressedSize = Math.max(0, val) >>> 0;
-    },
+function make_encrypter(
+/*Buffer*/
+pwd) {
+  // 1. Stage initialize key
+  const keys = new Initkeys(pwd); // return encrypting function, result and pos is here so we dont have to merge buffers later
 
-    get size() {
-      return _size;
-    },
+  return function (
+  /*Buffer*/
+  data,
+  /*Buffer*/
+  result,
+  /* Number */
+  pos = 0) {
+    // result - we create new Buffer for results
+    if (!result) result = Buffer.alloc(data.length); // process input data
 
-    set size(val) {
-      _size = Math.max(0, val) >>> 0;
-    },
+    for (let c of data) {
+      const k = keys.next(); // save key byte
 
-    get fileNameLength() {
-      return _fnameLen;
-    },
+      result[pos++] = c ^ k; // save val
 
-    set fileNameLength(val) {
-      _fnameLen = val;
-    },
+      keys.updateKeys(c); // update keys with decoded byte
+    }
 
-    get extraLength() {
-      return _extraLen;
-    },
+    return result;
+  };
+}
 
-    set extraLength(val) {
-      _extraLen = val;
-    },
+function decrypt(
+/*Buffer*/
+data,
+/*Object*/
+header,
+/*String, Buffer*/
+pwd) {
+  if (!data || !Buffer.isBuffer(data) || data.length < 12) {
+    return Buffer.alloc(0);
+  } // 1. We Initialize and generate decrypting function
 
-    get commentLength() {
-      return _comLen;
-    },
 
-    set commentLength(val) {
-      _comLen = val;
-    },
+  const decrypter = make_decrypter(pwd); // 2. decrypt salt what is always 12 bytes and is a part of file content
 
-    get diskNumStart() {
-      return _diskStart;
-    },
+  const salt = decrypter(data.slice(0, 12)); // 3. does password meet expectations
 
-    set diskNumStart(val) {
-      _diskStart = Math.max(0, val) >>> 0;
-    },
+  if (salt[11] !== header.crc >>> 24) {
+    throw "ADM-ZIP: Wrong Password";
+  } // 4. decode content
 
-    get inAttr() {
-      return _inattr;
-    },
 
-    set inAttr(val) {
-      _inattr = Math.max(0, val) >>> 0;
-    },
+  return decrypter(data.slice(12));
+} // lets add way to populate salt, NOT RECOMMENDED for production but maybe useful for testing general functionality
 
-    get attr() {
-      return _attr;
-    },
 
-    set attr(val) {
-      _attr = Math.max(0, val) >>> 0;
-    },
+function _salter(data) {
+  if (Buffer.isBuffer(data) && data.length >= 12) {
+    // be aware - currently salting buffer data is modified
+    config.genSalt = function () {
+      return data.slice(0, 12);
+    };
+  } else if (data === "node") {
+    // test salt generation with node random function
+    config.genSalt = genSalt.node;
+  } else {
+    // if value is not acceptable config gets reset.
+    config.genSalt = genSalt;
+  }
+}
 
-    // get Unix file permissions
-    get fileAttr() {
-      return _attr ? (_attr >>> 0 | 0) >> 16 & 0xfff : 0;
-    },
+function encrypt(
+/*Buffer*/
+data,
+/*Object*/
+header,
+/*String, Buffer*/
+pwd,
+/*Boolean*/
+oldlike = false) {
+  // 1. test data if data is not Buffer we make buffer from it
+  if (data == null) data = Buffer.alloc(0); // if data is not buffer be make buffer from it
 
-    get offset() {
-      return _offset;
-    },
+  if (!Buffer.isBuffer(data)) data = Buffer.from(data.toString()); // 2. We Initialize and generate encrypting function
 
-    set offset(val) {
-      _offset = Math.max(0, val) >>> 0;
-    },
+  const encrypter = make_encrypter(pwd); // 3. generate salt (12-bytes of random data)
 
-    get encripted() {
-      return (_flags & 1) === 1;
-    },
+  const salt = config.genSalt();
+  salt[11] = header.crc >>> 24 & 0xff; // old implementations (before PKZip 2.04g) used two byte check
 
-    get entryHeaderSize() {
-      return Constants.CENHDR + _fnameLen + _extraLen + _comLen;
-    },
+  if (oldlike) salt[10] = header.crc >>> 16 & 0xff; // 4. create output
 
-    get realDataOffset() {
-      return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen;
-    },
+  const result = Buffer.alloc(data.length + 12);
+  encrypter(salt, result); // finally encode content
 
-    get dataHeader() {
-      return _dataHeader;
-    },
+  return encrypter(data, result, 12);
+}
 
-    loadDataHeaderFromBinary: function (
-    /*Buffer*/
-    input) {
-      var data = input.slice(_offset, _offset + Constants.LOCHDR); // 30 bytes and should start with "PK\003\004"
+module.exports = {
+  decrypt,
+  encrypt,
+  _salter
+};
 
-      if (data.readUInt32LE(0) !== Constants.LOCSIG) {
-        throw new Error(Utils.Errors.INVALID_LOC);
-      }
+/***/ }),
 
-      _dataHeader = {
-        // version needed to extract
-        version: data.readUInt16LE(Constants.LOCVER),
-        // general purpose bit flag
-        flags: data.readUInt16LE(Constants.LOCFLG),
-        // compression method
-        method: data.readUInt16LE(Constants.LOCHOW),
-        // modification time (2 bytes time, 2 bytes date)
-        time: data.readUInt32LE(Constants.LOCTIM),
-        // uncompressed file crc-32 value
-        crc: data.readUInt32LE(Constants.LOCCRC),
-        // compressed size
-        compressedSize: data.readUInt32LE(Constants.LOCSIZ),
-        // uncompressed size
-        size: data.readUInt32LE(Constants.LOCLEN),
-        // filename length
-        fnameLen: data.readUInt16LE(Constants.LOCNAM),
-        // extra field length
-        extraLen: data.readUInt16LE(Constants.LOCEXT)
-      };
-    },
-    loadFromBinary: function (
-    /*Buffer*/
-    data) {
-      // data should be 46 bytes and start with "PK 01 02"
-      if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) {
-        throw new Error(Utils.Errors.INVALID_CEN);
-      } // version made by
+/***/ "./node_modules/adm-zip/util/constants.js":
+/*!************************************************!*\
+  !*** ./node_modules/adm-zip/util/constants.js ***!
+  \************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
 
+module.exports = {
+  /* The local file header */
+  LOCHDR: 30,
+  // LOC header size
+  LOCSIG: 0x04034b50,
+  // "PK\003\004"
+  LOCVER: 4,
+  // version needed to extract
+  LOCFLG: 6,
+  // general purpose bit flag
+  LOCHOW: 8,
+  // compression method
+  LOCTIM: 10,
+  // modification time (2 bytes time, 2 bytes date)
+  LOCCRC: 14,
+  // uncompressed file crc-32 value
+  LOCSIZ: 18,
+  // compressed size
+  LOCLEN: 22,
+  // uncompressed size
+  LOCNAM: 26,
+  // filename length
+  LOCEXT: 28,
+  // extra field length
 
-      _verMade = data.readUInt16LE(Constants.CENVEM); // version needed to extract
+  /* The Data descriptor */
+  EXTSIG: 0x08074b50,
+  // "PK\007\008"
+  EXTHDR: 16,
+  // EXT header size
+  EXTCRC: 4,
+  // uncompressed file crc-32 value
+  EXTSIZ: 8,
+  // compressed size
+  EXTLEN: 12,
+  // uncompressed size
 
-      _version = data.readUInt16LE(Constants.CENVER); // encrypt, decrypt flags
+  /* The central directory file header */
+  CENHDR: 46,
+  // CEN header size
+  CENSIG: 0x02014b50,
+  // "PK\001\002"
+  CENVEM: 4,
+  // version made by
+  CENVER: 6,
+  // version needed to extract
+  CENFLG: 8,
+  // encrypt, decrypt flags
+  CENHOW: 10,
+  // compression method
+  CENTIM: 12,
+  // modification time (2 bytes time, 2 bytes date)
+  CENCRC: 16,
+  // uncompressed file crc-32 value
+  CENSIZ: 20,
+  // compressed size
+  CENLEN: 24,
+  // uncompressed size
+  CENNAM: 28,
+  // filename length
+  CENEXT: 30,
+  // extra field length
+  CENCOM: 32,
+  // file comment length
+  CENDSK: 34,
+  // volume number start
+  CENATT: 36,
+  // internal file attributes
+  CENATX: 38,
+  // external file attributes (host system dependent)
+  CENOFF: 42,
+  // LOC header offset
 
-      _flags = data.readUInt16LE(Constants.CENFLG); // compression method
+  /* The entries in the end of central directory */
+  ENDHDR: 22,
+  // END header size
+  ENDSIG: 0x06054b50,
+  // "PK\005\006"
+  ENDSUB: 8,
+  // number of entries on this disk
+  ENDTOT: 10,
+  // total number of entries
+  ENDSIZ: 12,
+  // central directory size in bytes
+  ENDOFF: 16,
+  // offset of first CEN header
+  ENDCOM: 20,
+  // zip file comment length
+  END64HDR: 20,
+  // zip64 END header size
+  END64SIG: 0x07064b50,
+  // zip64 Locator signature, "PK\006\007"
+  END64START: 4,
+  // number of the disk with the start of the zip64
+  END64OFF: 8,
+  // relative offset of the zip64 end of central directory
+  END64NUMDISKS: 16,
+  // total number of disks
+  ZIP64SIG: 0x06064b50,
+  // zip64 signature, "PK\006\006"
+  ZIP64HDR: 56,
+  // zip64 record minimum size
+  ZIP64LEAD: 12,
+  // leading bytes at the start of the record, not counted by the value stored in ZIP64SIZE
+  ZIP64SIZE: 4,
+  // zip64 size of the central directory record
+  ZIP64VEM: 12,
+  // zip64 version made by
+  ZIP64VER: 14,
+  // zip64 version needed to extract
+  ZIP64DSK: 16,
+  // zip64 number of this disk
+  ZIP64DSKDIR: 20,
+  // number of the disk with the start of the record directory
+  ZIP64SUB: 24,
+  // number of entries on this disk
+  ZIP64TOT: 32,
+  // total number of entries
+  ZIP64SIZB: 40,
+  // zip64 central directory size in bytes
+  ZIP64OFF: 48,
+  // offset of start of central directory with respect to the starting disk number
+  ZIP64EXTRA: 56,
+  // extensible data sector
 
-      _method = data.readUInt16LE(Constants.CENHOW); // modification time (2 bytes time, 2 bytes date)
+  /* Compression methods */
+  STORED: 0,
+  // no compression
+  SHRUNK: 1,
+  // shrunk
+  REDUCED1: 2,
+  // reduced with compression factor 1
+  REDUCED2: 3,
+  // reduced with compression factor 2
+  REDUCED3: 4,
+  // reduced with compression factor 3
+  REDUCED4: 5,
+  // reduced with compression factor 4
+  IMPLODED: 6,
+  // imploded
+  // 7 reserved for Tokenizing compression algorithm
+  DEFLATED: 8,
+  // deflated
+  ENHANCED_DEFLATED: 9,
+  // enhanced deflated
+  PKWARE: 10,
+  // PKWare DCL imploded
+  // 11 reserved by PKWARE
+  BZIP2: 12,
+  //  compressed using BZIP2
+  // 13 reserved by PKWARE
+  LZMA: 14,
+  // LZMA
+  // 15-17 reserved by PKWARE
+  IBM_TERSE: 18,
+  // compressed using IBM TERSE
+  IBM_LZ77: 19,
+  // IBM LZ77 z
+  AES_ENCRYPT: 99,
+  // WinZIP AES encryption method
 
-      _time = data.readUInt32LE(Constants.CENTIM); // uncompressed file crc-32 value
+  /* General purpose bit flag */
+  // values can obtained with expression 2**bitnr
+  FLG_ENC: 1,
+  // Bit 0: encrypted file
+  FLG_COMP1: 2,
+  // Bit 1, compression option
+  FLG_COMP2: 4,
+  // Bit 2, compression option
+  FLG_DESC: 8,
+  // Bit 3, data descriptor
+  FLG_ENH: 16,
+  // Bit 4, enhanced deflating
+  FLG_PATCH: 32,
+  // Bit 5, indicates that the file is compressed patched data.
+  FLG_STR: 64,
+  // Bit 6, strong encryption (patented)
+  // Bits 7-10: Currently unused.
+  FLG_EFS: 2048,
+  // Bit 11: Language encoding flag (EFS)
+  // Bit 12: Reserved by PKWARE for enhanced compression.
+  // Bit 13: encrypted the Central Directory (patented).
+  // Bits 14-15: Reserved by PKWARE.
+  FLG_MSK: 4096,
+  // mask header values
 
-      _crc = data.readUInt32LE(Constants.CENCRC); // compressed size
+  /* Load type */
+  FILE: 2,
+  BUFFER: 1,
+  NONE: 0,
 
-      _compressedSize = data.readUInt32LE(Constants.CENSIZ); // uncompressed size
+  /* 4.5 Extensible data fields */
+  EF_ID: 0,
+  EF_SIZE: 2,
 
-      _size = data.readUInt32LE(Constants.CENLEN); // filename length
+  /* Header IDs */
+  ID_ZIP64: 0x0001,
+  ID_AVINFO: 0x0007,
+  ID_PFS: 0x0008,
+  ID_OS2: 0x0009,
+  ID_NTFS: 0x000a,
+  ID_OPENVMS: 0x000c,
+  ID_UNIX: 0x000d,
+  ID_FORK: 0x000e,
+  ID_PATCH: 0x000f,
+  ID_X509_PKCS7: 0x0014,
+  ID_X509_CERTID_F: 0x0015,
+  ID_X509_CERTID_C: 0x0016,
+  ID_STRONGENC: 0x0017,
+  ID_RECORD_MGT: 0x0018,
+  ID_X509_PKCS7_RL: 0x0019,
+  ID_IBM1: 0x0065,
+  ID_IBM2: 0x0066,
+  ID_POSZIP: 0x4690,
+  EF_ZIP64_OR_32: 0xffffffff,
+  EF_ZIP64_OR_16: 0xffff,
+  EF_ZIP64_SUNCOMP: 0,
+  EF_ZIP64_SCOMP: 8,
+  EF_ZIP64_RHO: 16,
+  EF_ZIP64_DSN: 24
+};
 
-      _fnameLen = data.readUInt16LE(Constants.CENNAM); // extra field length
+/***/ }),
 
-      _extraLen = data.readUInt16LE(Constants.CENEXT); // file comment length
+/***/ "./node_modules/adm-zip/util/errors.js":
+/*!*********************************************!*\
+  !*** ./node_modules/adm-zip/util/errors.js ***!
+  \*********************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
 
-      _comLen = data.readUInt16LE(Constants.CENCOM); // volume number start
+module.exports = {
+  /* Header error messages */
+  INVALID_LOC: "Invalid LOC header (bad signature)",
+  INVALID_CEN: "Invalid CEN header (bad signature)",
+  INVALID_END: "Invalid END header (bad signature)",
 
-      _diskStart = data.readUInt16LE(Constants.CENDSK); // internal file attributes
+  /* ZipEntry error messages*/
+  NO_DATA: "Nothing to decompress",
+  BAD_CRC: "CRC32 checksum failed",
+  FILE_IN_THE_WAY: "There is a file in the way: %s",
+  UNKNOWN_METHOD: "Invalid/unsupported compression method",
 
-      _inattr = data.readUInt16LE(Constants.CENATT); // external file attributes
+  /* Inflater error messages */
+  AVAIL_DATA: "inflate::Available inflate data did not terminate",
+  INVALID_DISTANCE: "inflate::Invalid literal/length or distance code in fixed or dynamic block",
+  TO_MANY_CODES: "inflate::Dynamic block code description: too many length or distance codes",
+  INVALID_REPEAT_LEN: "inflate::Dynamic block code description: repeat more than specified lengths",
+  INVALID_REPEAT_FIRST: "inflate::Dynamic block code description: repeat lengths with no first length",
+  INCOMPLETE_CODES: "inflate::Dynamic block code description: code lengths codes incomplete",
+  INVALID_DYN_DISTANCE: "inflate::Dynamic block code description: invalid distance code lengths",
+  INVALID_CODES_LEN: "inflate::Dynamic block code description: invalid literal/length code lengths",
+  INVALID_STORE_BLOCK: "inflate::Stored block length did not match one's complement",
+  INVALID_BLOCK_TYPE: "inflate::Invalid block type (type == 3)",
 
-      _attr = data.readUInt32LE(Constants.CENATX); // LOC header offset
+  /* ADM-ZIP error messages */
+  CANT_EXTRACT_FILE: "Could not extract the file",
+  CANT_OVERRIDE: "Target file already exists",
+  NO_ZIP: "No zip file was loaded",
+  NO_ENTRY: "Entry doesn't exist",
+  DIRECTORY_CONTENT_ERROR: "A directory cannot have content",
+  FILE_NOT_FOUND: "File not found: %s",
+  NOT_IMPLEMENTED: "Not implemented",
+  INVALID_FILENAME: "Invalid filename",
+  INVALID_FORMAT: "Invalid or unsupported zip format. No END header found"
+};
 
-      _offset = data.readUInt32LE(Constants.CENOFF);
-    },
-    dataHeaderToBinary: function () {
-      // LOC header size (30 bytes)
-      var data = Buffer.alloc(Constants.LOCHDR); // "PK\003\004"
+/***/ }),
 
-      data.writeUInt32LE(Constants.LOCSIG, 0); // version needed to extract
+/***/ "./node_modules/adm-zip/util/fattr.js":
+/*!********************************************!*\
+  !*** ./node_modules/adm-zip/util/fattr.js ***!
+  \********************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-      data.writeUInt16LE(_version, Constants.LOCVER); // general purpose bit flag
+const fs = __webpack_require__(/*! ./fileSystem */ "./node_modules/adm-zip/util/fileSystem.js").require();
 
-      data.writeUInt16LE(_flags, Constants.LOCFLG); // compression method
+const pth = __webpack_require__(/*! path */ "path");
 
-      data.writeUInt16LE(_method, Constants.LOCHOW); // modification time (2 bytes time, 2 bytes date)
+fs.existsSync = fs.existsSync || pth.existsSync;
 
-      data.writeUInt32LE(_time, Constants.LOCTIM); // uncompressed file crc-32 value
+module.exports = function (
+/*String*/
+path) {
+  var _path = path || "",
+      _obj = newAttr(),
+      _stat = null;
 
-      data.writeUInt32LE(_crc, Constants.LOCCRC); // compressed size
+  function newAttr() {
+    return {
+      directory: false,
+      readonly: false,
+      hidden: false,
+      executable: false,
+      mtime: 0,
+      atime: 0
+    };
+  }
 
-      data.writeUInt32LE(_compressedSize, Constants.LOCSIZ); // uncompressed size
+  if (_path && fs.existsSync(_path)) {
+    _stat = fs.statSync(_path);
+    _obj.directory = _stat.isDirectory();
+    _obj.mtime = _stat.mtime;
+    _obj.atime = _stat.atime;
+    _obj.executable = (0o111 & _stat.mode) !== 0; // file is executable who ever har right not just owner
 
-      data.writeUInt32LE(_size, Constants.LOCLEN); // filename length
+    _obj.readonly = (0o200 & _stat.mode) === 0; // readonly if owner has no write right
 
-      data.writeUInt16LE(_fnameLen, Constants.LOCNAM); // extra field length
+    _obj.hidden = pth.basename(_path)[0] === ".";
+  } else {
+    console.warn("Invalid path: " + _path);
+  }
 
-      data.writeUInt16LE(_extraLen, Constants.LOCEXT);
-      return data;
+  return {
+    get directory() {
+      return _obj.directory;
     },
-    entryHeaderToBinary: function () {
-      // CEN header size (46 bytes)
-      var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen); // "PK\001\002"
-
-      data.writeUInt32LE(Constants.CENSIG, 0); // version made by
-
-      data.writeUInt16LE(_verMade, Constants.CENVEM); // version needed to extract
-
-      data.writeUInt16LE(_version, Constants.CENVER); // encrypt, decrypt flags
-
-      data.writeUInt16LE(_flags, Constants.CENFLG); // compression method
-
-      data.writeUInt16LE(_method, Constants.CENHOW); // modification time (2 bytes time, 2 bytes date)
-
-      data.writeUInt32LE(_time, Constants.CENTIM); // uncompressed file crc-32 value
 
-      data.writeUInt32LE(_crc, Constants.CENCRC); // compressed size
-
-      data.writeUInt32LE(_compressedSize, Constants.CENSIZ); // uncompressed size
-
-      data.writeUInt32LE(_size, Constants.CENLEN); // filename length
-
-      data.writeUInt16LE(_fnameLen, Constants.CENNAM); // extra field length
-
-      data.writeUInt16LE(_extraLen, Constants.CENEXT); // file comment length
-
-      data.writeUInt16LE(_comLen, Constants.CENCOM); // volume number start
-
-      data.writeUInt16LE(_diskStart, Constants.CENDSK); // internal file attributes
+    get readOnly() {
+      return _obj.readonly;
+    },
 
-      data.writeUInt16LE(_inattr, Constants.CENATT); // external file attributes
+    get hidden() {
+      return _obj.hidden;
+    },
 
-      data.writeUInt32LE(_attr, Constants.CENATX); // LOC header offset
+    get mtime() {
+      return _obj.mtime;
+    },
 
-      data.writeUInt32LE(_offset, Constants.CENOFF); // fill all with
+    get atime() {
+      return _obj.atime;
+    },
 
-      data.fill(0x00, Constants.CENHDR);
-      return data;
+    get executable() {
+      return _obj.executable;
     },
-    toJSON: function () {
-      const bytes = function (nr) {
-        return nr + " bytes";
-      };
 
+    decodeAttributes: function () {},
+    encodeAttributes: function () {},
+    toJSON: function () {
       return {
-        made: _verMade,
-        version: _version,
-        flags: _flags,
-        method: Utils.methodToString(_method),
-        time: this.time,
-        crc: "0x" + _crc.toString(16).toUpperCase(),
-        compressedSize: bytes(_compressedSize),
-        size: bytes(_size),
-        fileNameLength: bytes(_fnameLen),
-        extraLength: bytes(_extraLen),
-        commentLength: bytes(_comLen),
-        diskNumStart: _diskStart,
-        inAttr: _inattr,
-        attr: _attr,
-        offset: _offset,
-        entryHeaderSize: bytes(Constants.CENHDR + _fnameLen + _extraLen + _comLen)
+        path: _path,
+        isDirectory: _obj.directory,
+        isReadOnly: _obj.readonly,
+        isHidden: _obj.hidden,
+        isExecutable: _obj.executable,
+        mTime: _obj.mtime,
+        aTime: _obj.atime
       };
     },
     toString: function () {
@@ -8748,3684 +8162,3584 @@ module.exports = function () {
 
 /***/ }),
 
-/***/ "./node_modules/adm-zip/headers/index.js":
-/*!***********************************************!*\
-  !*** ./node_modules/adm-zip/headers/index.js ***!
-  \***********************************************/
+/***/ "./node_modules/adm-zip/util/fileSystem.js":
+/*!*************************************************!*\
+  !*** ./node_modules/adm-zip/util/fileSystem.js ***!
+  \*************************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-exports.EntryHeader = __webpack_require__(/*! ./entryHeader */ "./node_modules/adm-zip/headers/entryHeader.js");
-exports.MainHeader = __webpack_require__(/*! ./mainHeader */ "./node_modules/adm-zip/headers/mainHeader.js");
+exports.require = function () {
+  if (typeof process === "object" && process.versions && process.versions["electron"]) {
+    try {
+      const originalFs = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module 'original-fs'"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
+
+      if (Object.keys(originalFs).length > 0) {
+        return originalFs;
+      }
+    } catch (e) {}
+  }
+
+  return __webpack_require__(/*! fs */ "fs");
+};
 
 /***/ }),
 
-/***/ "./node_modules/adm-zip/headers/mainHeader.js":
-/*!****************************************************!*\
-  !*** ./node_modules/adm-zip/headers/mainHeader.js ***!
-  \****************************************************/
+/***/ "./node_modules/adm-zip/util/index.js":
+/*!********************************************!*\
+  !*** ./node_modules/adm-zip/util/index.js ***!
+  \********************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-var Utils = __webpack_require__(/*! ../util */ "./node_modules/adm-zip/util/index.js"),
-    Constants = Utils.Constants;
-/* The entries in the end of central directory */
+module.exports = __webpack_require__(/*! ./utils */ "./node_modules/adm-zip/util/utils.js");
+module.exports.Constants = __webpack_require__(/*! ./constants */ "./node_modules/adm-zip/util/constants.js");
+module.exports.Errors = __webpack_require__(/*! ./errors */ "./node_modules/adm-zip/util/errors.js");
+module.exports.FileAttr = __webpack_require__(/*! ./fattr */ "./node_modules/adm-zip/util/fattr.js");
 
+/***/ }),
 
-module.exports = function () {
-  var _volumeEntries = 0,
-      _totalEntries = 0,
-      _size = 0,
-      _offset = 0,
-      _commentLength = 0;
-  return {
-    get diskEntries() {
-      return _volumeEntries;
-    },
+/***/ "./node_modules/adm-zip/util/utils.js":
+/*!********************************************!*\
+  !*** ./node_modules/adm-zip/util/utils.js ***!
+  \********************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-    set diskEntries(
-    /*Number*/
-    val) {
-      _volumeEntries = _totalEntries = val;
-    },
+const fsystem = __webpack_require__(/*! ./fileSystem */ "./node_modules/adm-zip/util/fileSystem.js").require();
 
-    get totalEntries() {
-      return _totalEntries;
-    },
+const pth = __webpack_require__(/*! path */ "path");
 
-    set totalEntries(
-    /*Number*/
-    val) {
-      _totalEntries = _volumeEntries = val;
-    },
+const Constants = __webpack_require__(/*! ./constants */ "./node_modules/adm-zip/util/constants.js");
 
-    get size() {
-      return _size;
-    },
+const isWin = typeof process === "object" && "win32" === process.platform;
 
-    set size(
-    /*Number*/
-    val) {
-      _size = val;
-    },
+const is_Obj = obj => obj && typeof obj === "object"; // generate CRC32 lookup table
 
-    get offset() {
-      return _offset;
-    },
-
-    set offset(
-    /*Number*/
-    val) {
-      _offset = val;
-    },
-
-    get commentLength() {
-      return _commentLength;
-    },
-
-    set commentLength(
-    /*Number*/
-    val) {
-      _commentLength = val;
-    },
-
-    get mainHeaderSize() {
-      return Constants.ENDHDR + _commentLength;
-    },
-
-    loadFromBinary: function (
-    /*Buffer*/
-    data) {
-      // data should be 22 bytes and start with "PK 05 06"
-      // or be 56+ bytes and start with "PK 06 06" for Zip64
-      if ((data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG) && (data.length < Constants.ZIP64HDR || data.readUInt32LE(0) !== Constants.ZIP64SIG)) {
-        throw new Error(Utils.Errors.INVALID_END);
-      }
 
-      if (data.readUInt32LE(0) === Constants.ENDSIG) {
-        // number of entries on this volume
-        _volumeEntries = data.readUInt16LE(Constants.ENDSUB); // total number of entries
+const crcTable = new Uint32Array(256).map((t, c) => {
+  for (let k = 0; k < 8; k++) {
+    if ((c & 1) !== 0) {
+      c = 0xedb88320 ^ c >>> 1;
+    } else {
+      c >>>= 1;
+    }
+  }
 
-        _totalEntries = data.readUInt16LE(Constants.ENDTOT); // central directory size in bytes
+  return c >>> 0;
+}); // UTILS functions
 
-        _size = data.readUInt32LE(Constants.ENDSIZ); // offset of first CEN header
+function Utils(opts) {
+  this.sep = pth.sep;
+  this.fs = fsystem;
 
-        _offset = data.readUInt32LE(Constants.ENDOFF); // zip file comment length
+  if (is_Obj(opts)) {
+    // custom filesystem
+    if (is_Obj(opts.fs) && typeof opts.fs.statSync === "function") {
+      this.fs = opts.fs;
+    }
+  }
+}
 
-        _commentLength = data.readUInt16LE(Constants.ENDCOM);
-      } else {
-        // number of entries on this volume
-        _volumeEntries = Utils.readBigUInt64LE(data, Constants.ZIP64SUB); // total number of entries
+module.exports = Utils; // INSTANCED functions
 
-        _totalEntries = Utils.readBigUInt64LE(data, Constants.ZIP64TOT); // central directory size in bytes
+Utils.prototype.makeDir = function (
+/*String*/
+folder) {
+  const self = this; // Sync - make directories tree
 
-        _size = Utils.readBigUInt64LE(data, Constants.ZIP64SIZ); // offset of first CEN header
+  function mkdirSync(
+  /*String*/
+  fpath) {
+    let resolvedPath = fpath.split(self.sep)[0];
+    fpath.split(self.sep).forEach(function (name) {
+      if (!name || name.substr(-1, 1) === ":") return;
+      resolvedPath += self.sep + name;
+      var stat;
 
-        _offset = Utils.readBigUInt64LE(data, Constants.ZIP64OFF);
-        _commentLength = 0;
+      try {
+        stat = self.fs.statSync(resolvedPath);
+      } catch (e) {
+        self.fs.mkdirSync(resolvedPath);
       }
-    },
-    toBinary: function () {
-      var b = Buffer.alloc(Constants.ENDHDR + _commentLength); // "PK 05 06" signature
 
-      b.writeUInt32LE(Constants.ENDSIG, 0);
-      b.writeUInt32LE(0, 4); // number of entries on this volume
+      if (stat && stat.isFile()) throw Errors.FILE_IN_THE_WAY.replace("%s", resolvedPath);
+    });
+  }
 
-      b.writeUInt16LE(_volumeEntries, Constants.ENDSUB); // total number of entries
+  mkdirSync(folder);
+};
 
-      b.writeUInt16LE(_totalEntries, Constants.ENDTOT); // central directory size in bytes
+Utils.prototype.writeFileTo = function (
+/*String*/
+path,
+/*Buffer*/
+content,
+/*Boolean*/
+overwrite,
+/*Number*/
+attr) {
+  const self = this;
 
-      b.writeUInt32LE(_size, Constants.ENDSIZ); // offset of first CEN header
+  if (self.fs.existsSync(path)) {
+    if (!overwrite) return false; // cannot overwrite
 
-      b.writeUInt32LE(_offset, Constants.ENDOFF); // zip file comment length
+    var stat = self.fs.statSync(path);
 
-      b.writeUInt16LE(_commentLength, Constants.ENDCOM); // fill comment memory with spaces so no garbage is left there
+    if (stat.isDirectory()) {
+      return false;
+    }
+  }
 
-      b.fill(" ", Constants.ENDHDR);
-      return b;
-    },
-    toJSON: function () {
-      // creates 0x0000 style output
-      const offset = function (nr, len) {
-        let offs = nr.toString(16).toUpperCase();
+  var folder = pth.dirname(path);
 
-        while (offs.length < len) offs = "0" + offs;
+  if (!self.fs.existsSync(folder)) {
+    self.makeDir(folder);
+  }
 
-        return "0x" + offs;
-      };
+  var fd;
 
-      return {
-        diskEntries: _volumeEntries,
-        totalEntries: _totalEntries,
-        size: _size + " bytes",
-        offset: offset(_offset, 4),
-        commentLength: _commentLength
-      };
-    },
-    toString: function () {
-      return JSON.stringify(this.toJSON(), null, "\t");
-    }
-  };
-};
+  try {
+    fd = self.fs.openSync(path, "w", 438); // 0666
+  } catch (e) {
+    self.fs.chmodSync(path, 438);
+    fd = self.fs.openSync(path, "w", 438);
+  }
 
-/***/ }),
+  if (fd) {
+    try {
+      self.fs.writeSync(fd, content, 0, content.length, 0);
+    } finally {
+      self.fs.closeSync(fd);
+    }
+  }
 
-/***/ "./node_modules/adm-zip/methods/deflater.js":
-/*!**************************************************!*\
-  !*** ./node_modules/adm-zip/methods/deflater.js ***!
-  \**************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+  self.fs.chmodSync(path, attr || 438);
+  return true;
+};
 
-module.exports = function (
+Utils.prototype.writeFileToAsync = function (
+/*String*/
+path,
 /*Buffer*/
-inbuf) {
-  var zlib = __webpack_require__(/*! zlib */ "zlib");
-
-  var opts = {
-    chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024
-  };
-  return {
-    deflate: function () {
-      return zlib.deflateRawSync(inbuf, opts);
-    },
-    deflateAsync: function (
-    /*Function*/
-    callback) {
-      var tmp = zlib.createDeflateRaw(opts),
-          parts = [],
-          total = 0;
-      tmp.on("data", function (data) {
-        parts.push(data);
-        total += data.length;
-      });
-      tmp.on("end", function () {
-        var buf = Buffer.alloc(total),
-            written = 0;
-        buf.fill(0);
+content,
+/*Boolean*/
+overwrite,
+/*Number*/
+attr,
+/*Function*/
+callback) {
+  if (typeof attr === "function") {
+    callback = attr;
+    attr = undefined;
+  }
 
-        for (var i = 0; i < parts.length; i++) {
-          var part = parts[i];
-          part.copy(buf, written);
-          written += part.length;
-        }
+  const self = this;
+  self.fs.exists(path, function (exist) {
+    if (exist && !overwrite) return callback(false);
+    self.fs.stat(path, function (err, stat) {
+      if (exist && stat.isDirectory()) {
+        return callback(false);
+      }
 
-        callback && callback(buf);
+      var folder = pth.dirname(path);
+      self.fs.exists(folder, function (exists) {
+        if (!exists) self.makeDir(folder);
+        self.fs.open(path, "w", 438, function (err, fd) {
+          if (err) {
+            self.fs.chmod(path, 438, function () {
+              self.fs.open(path, "w", 438, function (err, fd) {
+                self.fs.write(fd, content, 0, content.length, 0, function () {
+                  self.fs.close(fd, function () {
+                    self.fs.chmod(path, attr || 438, function () {
+                      callback(true);
+                    });
+                  });
+                });
+              });
+            });
+          } else if (fd) {
+            self.fs.write(fd, content, 0, content.length, 0, function () {
+              self.fs.close(fd, function () {
+                self.fs.chmod(path, attr || 438, function () {
+                  callback(true);
+                });
+              });
+            });
+          } else {
+            self.fs.chmod(path, attr || 438, function () {
+              callback(true);
+            });
+          }
+        });
       });
-      tmp.end(inbuf);
-    }
-  };
+    });
+  });
 };
 
-/***/ }),
+Utils.prototype.findFiles = function (
+/*String*/
+path) {
+  const self = this;
 
-/***/ "./node_modules/adm-zip/methods/index.js":
-/*!***********************************************!*\
-  !*** ./node_modules/adm-zip/methods/index.js ***!
-  \***********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+  function findSync(
+  /*String*/
+  dir,
+  /*RegExp*/
+  pattern,
+  /*Boolean*/
+  recursive) {
+    if (typeof pattern === "boolean") {
+      recursive = pattern;
+      pattern = undefined;
+    }
 
-exports.Deflater = __webpack_require__(/*! ./deflater */ "./node_modules/adm-zip/methods/deflater.js");
-exports.Inflater = __webpack_require__(/*! ./inflater */ "./node_modules/adm-zip/methods/inflater.js");
-exports.ZipCrypto = __webpack_require__(/*! ./zipcrypto */ "./node_modules/adm-zip/methods/zipcrypto.js");
+    let files = [];
+    self.fs.readdirSync(dir).forEach(function (file) {
+      var path = pth.join(dir, file);
+      if (self.fs.statSync(path).isDirectory() && recursive) files = files.concat(findSync(path, pattern, recursive));
 
-/***/ }),
+      if (!pattern || pattern.test(path)) {
+        files.push(pth.normalize(path) + (self.fs.statSync(path).isDirectory() ? self.sep : ""));
+      }
+    });
+    return files;
+  }
 
-/***/ "./node_modules/adm-zip/methods/inflater.js":
-/*!**************************************************!*\
-  !*** ./node_modules/adm-zip/methods/inflater.js ***!
-  \**************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+  return findSync(path, undefined, true);
+};
 
-module.exports = function (
-/*Buffer*/
-inbuf) {
-  var zlib = __webpack_require__(/*! zlib */ "zlib");
+Utils.prototype.getAttributes = function () {};
 
-  return {
-    inflate: function () {
-      return zlib.inflateRawSync(inbuf);
-    },
-    inflateAsync: function (
-    /*Function*/
-    callback) {
-      var tmp = zlib.createInflateRaw(),
-          parts = [],
-          total = 0;
-      tmp.on("data", function (data) {
-        parts.push(data);
-        total += data.length;
-      });
-      tmp.on("end", function () {
-        var buf = Buffer.alloc(total),
-            written = 0;
-        buf.fill(0);
+Utils.prototype.setAttributes = function () {}; // STATIC functions
+// crc32 single update (it is part of crc32)
 
-        for (var i = 0; i < parts.length; i++) {
-          var part = parts[i];
-          part.copy(buf, written);
-          written += part.length;
-        }
 
-        callback && callback(buf);
-      });
-      tmp.end(inbuf);
-    }
-  };
+Utils.crc32update = function (crc, byte) {
+  return crcTable[(crc ^ byte) & 0xff] ^ crc >>> 8;
 };
 
-/***/ }),
-
-/***/ "./node_modules/adm-zip/methods/zipcrypto.js":
-/*!***************************************************!*\
-  !*** ./node_modules/adm-zip/methods/zipcrypto.js ***!
-  \***************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+Utils.crc32 = function (buf) {
+  if (typeof buf === "string") {
+    buf = Buffer.from(buf, "utf8");
+  } // Generate crcTable
 
-"use strict";
- // node crypt, we use it for generate salt
-// eslint-disable-next-line node/no-unsupported-features/node-builtins
 
-const _require = __webpack_require__(/*! crypto */ "crypto"),
-      randomFillSync = _require.randomFillSync; // generate CRC32 lookup table
+  if (!crcTable.length) genCRCTable();
+  let len = buf.length;
+  let crc = ~0;
 
+  for (let off = 0; off < len;) crc = Utils.crc32update(crc, buf[off++]); // xor and cast as uint32 number
 
-const crctable = new Uint32Array(256).map((t, crc) => {
-  for (let j = 0; j < 8; j++) {
-    if (0 !== (crc & 1)) {
-      crc = crc >>> 1 ^ 0xedb88320;
-    } else {
-      crc >>>= 1;
-    }
-  }
 
-  return crc >>> 0;
-}); // C-style uInt32 Multiply (discards higher bits, when JS multiply discards lower bits)
+  return ~crc >>> 0;
+};
 
-const uMul = (a, b) => Math.imul(a, b) >>> 0; // crc32 byte single update (actually same function is part of utils.crc32 function :) )
+Utils.methodToString = function (
+/*Number*/
+method) {
+  switch (method) {
+    case Constants.STORED:
+      return "STORED (" + method + ")";
 
+    case Constants.DEFLATED:
+      return "DEFLATED (" + method + ")";
 
-const crc32update = (pCrc32, bval) => {
-  return crctable[(pCrc32 ^ bval) & 0xff] ^ pCrc32 >>> 8;
-}; // function for generating salt for encrytion header
+    default:
+      return "UNSUPPORTED (" + method + ")";
+  }
+}; // removes ".." style path elements
 
 
-const genSalt = () => {
-  if ("function" === typeof randomFillSync) {
-    return randomFillSync(Buffer.alloc(12));
-  } else {
-    // fallback if function is not defined
-    return genSalt.node();
-  }
-}; // salt generation with node random function (mainly as fallback)
+Utils.canonical = function (
+/*string*/
+path) {
+  if (!path) return ""; // trick normalize think path is absolute
 
+  var safeSuffix = pth.posix.normalize("/" + path.split("\\").join("/"));
+  return pth.join(".", safeSuffix);
+}; // make abolute paths taking prefix as root folder
 
-genSalt.node = () => {
-  const salt = Buffer.alloc(12);
-  const len = salt.length;
 
-  for (let i = 0; i < len; i++) salt[i] = Math.random() * 256 & 0xff;
+Utils.sanitize = function (
+/*string*/
+prefix,
+/*string*/
+name) {
+  prefix = pth.resolve(pth.normalize(prefix));
+  var parts = name.split("/");
 
-  return salt;
-}; // general config
+  for (var i = 0, l = parts.length; i < l; i++) {
+    var path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep)));
 
+    if (path.indexOf(prefix) === 0) {
+      return path;
+    }
+  }
 
-const config = {
-  genSalt
-}; // Class Initkeys handles same basic ops with keys
+  return pth.normalize(pth.join(prefix, pth.basename(name)));
+}; // converts buffer, Uint8Array, string types to buffer
 
-function Initkeys(pw) {
-  const pass = Buffer.isBuffer(pw) ? pw : Buffer.from(pw);
-  this.keys = new Uint32Array([0x12345678, 0x23456789, 0x34567890]);
 
-  for (let i = 0; i < pass.length; i++) {
-    this.updateKeys(pass[i]);
+Utils.toBuffer = function toBuffer(
+/*buffer, Uint8Array, string*/
+input) {
+  if (Buffer.isBuffer(input)) {
+    return input;
+  } else if (input instanceof Uint8Array) {
+    return Buffer.from(input);
+  } else {
+    // expect string all other values are invalid and return empty buffer
+    return typeof input === "string" ? Buffer.from(input, "utf8") : Buffer.alloc(0);
   }
-}
+};
 
-Initkeys.prototype.updateKeys = function (byteValue) {
-  const keys = this.keys;
-  keys[0] = crc32update(keys[0], byteValue);
-  keys[1] += keys[0] & 0xff;
-  keys[1] = uMul(keys[1], 134775813) + 1;
-  keys[2] = crc32update(keys[2], keys[1] >>> 24);
-  return byteValue;
+Utils.readBigUInt64LE = function (
+/*Buffer*/
+buffer,
+/*int*/
+index) {
+  var slice = Buffer.from(buffer.slice(index, index + 8));
+  slice.swap64();
+  return parseInt(`0x${slice.toString("hex")}`);
 };
 
-Initkeys.prototype.next = function () {
-  const k = (this.keys[2] | 2) >>> 0; // key
+Utils.isWin = isWin; // Do we have windows system
 
-  return uMul(k, k ^ 1) >> 8 & 0xff; // decode
-};
+Utils.crcTable = crcTable;
 
-function make_decrypter(
-/*Buffer*/
-pwd) {
-  // 1. Stage initialize key
-  const keys = new Initkeys(pwd); // return decrypter function
+/***/ }),
 
-  return function (
-  /*Buffer*/
-  data) {
-    // result - we create new Buffer for results
-    const result = Buffer.alloc(data.length);
-    let pos = 0; // process input data
+/***/ "./node_modules/adm-zip/zipEntry.js":
+/*!******************************************!*\
+  !*** ./node_modules/adm-zip/zipEntry.js ***!
+  \******************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-    for (let c of data) {
-      //c ^= keys.next();
-      //result[pos++] = c; // decode & Save Value
-      result[pos++] = keys.updateKeys(c ^ keys.next()); // update keys with decoded byte
+var Utils = __webpack_require__(/*! ./util */ "./node_modules/adm-zip/util/index.js"),
+    Headers = __webpack_require__(/*! ./headers */ "./node_modules/adm-zip/headers/index.js"),
+    Constants = Utils.Constants,
+    Methods = __webpack_require__(/*! ./methods */ "./node_modules/adm-zip/methods/index.js");
+
+module.exports = function (
+/*Buffer*/
+input) {
+  var _entryHeader = new Headers.EntryHeader(),
+      _entryName = Buffer.alloc(0),
+      _comment = Buffer.alloc(0),
+      _isDirectory = false,
+      uncompressedData = null,
+      _extra = Buffer.alloc(0);
+
+  function getCompressedDataFromZip() {
+    if (!input || !Buffer.isBuffer(input)) {
+      return Buffer.alloc(0);
     }
 
-    return result;
-  };
-}
+    _entryHeader.loadDataHeaderFromBinary(input);
 
-function make_encrypter(
-/*Buffer*/
-pwd) {
-  // 1. Stage initialize key
-  const keys = new Initkeys(pwd); // return encrypting function, result and pos is here so we dont have to merge buffers later
+    return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize);
+  }
 
-  return function (
-  /*Buffer*/
-  data,
-  /*Buffer*/
-  result,
-  /* Number */
-  pos = 0) {
-    // result - we create new Buffer for results
-    if (!result) result = Buffer.alloc(data.length); // process input data
-
-    for (let c of data) {
-      const k = keys.next(); // save key byte
+  function crc32OK(data) {
+    // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written
+    if ((_entryHeader.flags & 0x8) !== 0x8) {
+      if (Utils.crc32(data) !== _entryHeader.dataHeader.crc) {
+        return false;
+      }
+    } else {// @TODO: load and check data descriptor header
+      // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure
+      // (optionally preceded by a 4-byte signature) immediately after the compressed data:
+    }
 
-      result[pos++] = c ^ k; // save val
+    return true;
+  }
 
-      keys.updateKeys(c); // update keys with decoded byte
+  function decompress(
+  /*Boolean*/
+  async,
+  /*Function*/
+  callback,
+  /*String, Buffer*/
+  pass) {
+    if (typeof callback === "undefined" && typeof async === "string") {
+      pass = async;
+      async = void 0;
     }
 
-    return result;
-  };
-}
-
-function decrypt(
-/*Buffer*/
-data,
-/*Object*/
-header,
-/*String, Buffer*/
-pwd) {
-  if (!data || !Buffer.isBuffer(data) || data.length < 12) {
-    return Buffer.alloc(0);
-  } // 1. We Initialize and generate decrypting function
+    if (_isDirectory) {
+      if (async && callback) {
+        callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error.
+      }
 
+      return Buffer.alloc(0);
+    }
 
-  const decrypter = make_decrypter(pwd); // 2. decrypt salt what is always 12 bytes and is a part of file content
+    var compressedData = getCompressedDataFromZip();
 
-  const salt = decrypter(data.slice(0, 12)); // 3. does password meet expectations
+    if (compressedData.length === 0) {
+      // File is empty, nothing to decompress.
+      if (async && callback) callback(compressedData);
+      return compressedData;
+    }
 
-  if (salt[11] !== header.crc >>> 24) {
-    throw "ADM-ZIP: Wrong Password";
-  } // 4. decode content
+    if (_entryHeader.encripted) {
+      if ("string" !== typeof pass && !Buffer.isBuffer(pass)) {
+        throw new Error("ADM-ZIP: Incompatible password parameter");
+      }
 
+      compressedData = Methods.ZipCrypto.decrypt(compressedData, _entryHeader, pass);
+    }
 
-  return decrypter(data.slice(12));
-} // lets add way to populate salt, NOT RECOMMENDED for production but maybe useful for testing general functionality
+    var data = Buffer.alloc(_entryHeader.size);
 
+    switch (_entryHeader.method) {
+      case Utils.Constants.STORED:
+        compressedData.copy(data);
 
-function _salter(data) {
-  if (Buffer.isBuffer(data) && data.length >= 12) {
-    // be aware - currently salting buffer data is modified
-    config.genSalt = function () {
-      return data.slice(0, 12);
-    };
-  } else if (data === "node") {
-    // test salt generation with node random function
-    config.genSalt = genSalt.node;
-  } else {
-    // if value is not acceptable config gets reset.
-    config.genSalt = genSalt;
-  }
-}
+        if (!crc32OK(data)) {
+          if (async && callback) callback(data, Utils.Errors.BAD_CRC); //si added error
 
-function encrypt(
-/*Buffer*/
-data,
-/*Object*/
-header,
-/*String, Buffer*/
-pwd,
-/*Boolean*/
-oldlike = false) {
-  // 1. test data if data is not Buffer we make buffer from it
-  if (data == null) data = Buffer.alloc(0); // if data is not buffer be make buffer from it
+          throw new Error(Utils.Errors.BAD_CRC);
+        } else {
+          //si added otherwise did not seem to return data.
+          if (async && callback) callback(data);
+          return data;
+        }
 
-  if (!Buffer.isBuffer(data)) data = Buffer.from(data.toString()); // 2. We Initialize and generate encrypting function
+      case Utils.Constants.DEFLATED:
+        var inflater = new Methods.Inflater(compressedData);
 
-  const encrypter = make_encrypter(pwd); // 3. generate salt (12-bytes of random data)
+        if (!async) {
+          const result = inflater.inflate(data);
+          result.copy(data, 0);
 
-  const salt = config.genSalt();
-  salt[11] = header.crc >>> 24 & 0xff; // old implementations (before PKZip 2.04g) used two byte check
+          if (!crc32OK(data)) {
+            throw new Error(Utils.Errors.BAD_CRC + " " + _entryName.toString());
+          }
 
-  if (oldlike) salt[10] = header.crc >>> 16 & 0xff; // 4. create output
+          return data;
+        } else {
+          inflater.inflateAsync(function (result) {
+            result.copy(result, 0);
 
-  const result = Buffer.alloc(data.length + 12);
-  encrypter(salt, result); // finally encode content
+            if (callback) {
+              if (!crc32OK(result)) {
+                callback(result, Utils.Errors.BAD_CRC); //si added error
+              } else {
+                callback(result);
+              }
+            }
+          });
+        }
 
-  return encrypter(data, result, 12);
-}
+        break;
 
-module.exports = {
-  decrypt,
-  encrypt,
-  _salter
-};
+      default:
+        if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD);
+        throw new Error(Utils.Errors.UNKNOWN_METHOD);
+    }
+  }
 
-/***/ }),
+  function compress(
+  /*Boolean*/
+  async,
+  /*Function*/
+  callback) {
+    if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {
+      // no data set or the data wasn't changed to require recompression
+      if (async && callback) callback(getCompressedDataFromZip());
+      return getCompressedDataFromZip();
+    }
 
-/***/ "./node_modules/adm-zip/util/constants.js":
-/*!************************************************!*\
-  !*** ./node_modules/adm-zip/util/constants.js ***!
-  \************************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+    if (uncompressedData.length && !_isDirectory) {
+      var compressedData; // Local file header
 
-module.exports = {
-  /* The local file header */
-  LOCHDR: 30,
-  // LOC header size
-  LOCSIG: 0x04034b50,
-  // "PK\003\004"
-  LOCVER: 4,
-  // version needed to extract
-  LOCFLG: 6,
-  // general purpose bit flag
-  LOCHOW: 8,
-  // compression method
-  LOCTIM: 10,
-  // modification time (2 bytes time, 2 bytes date)
-  LOCCRC: 14,
-  // uncompressed file crc-32 value
-  LOCSIZ: 18,
-  // compressed size
-  LOCLEN: 22,
-  // uncompressed size
-  LOCNAM: 26,
-  // filename length
-  LOCEXT: 28,
-  // extra field length
+      switch (_entryHeader.method) {
+        case Utils.Constants.STORED:
+          _entryHeader.compressedSize = _entryHeader.size;
+          compressedData = Buffer.alloc(uncompressedData.length);
+          uncompressedData.copy(compressedData);
+          if (async && callback) callback(compressedData);
+          return compressedData;
 
-  /* The Data descriptor */
-  EXTSIG: 0x08074b50,
-  // "PK\007\008"
-  EXTHDR: 16,
-  // EXT header size
-  EXTCRC: 4,
-  // uncompressed file crc-32 value
-  EXTSIZ: 8,
-  // compressed size
-  EXTLEN: 12,
-  // uncompressed size
+        default:
+        case Utils.Constants.DEFLATED:
+          var deflater = new Methods.Deflater(uncompressedData);
 
-  /* The central directory file header */
-  CENHDR: 46,
-  // CEN header size
-  CENSIG: 0x02014b50,
-  // "PK\001\002"
-  CENVEM: 4,
-  // version made by
-  CENVER: 6,
-  // version needed to extract
-  CENFLG: 8,
-  // encrypt, decrypt flags
-  CENHOW: 10,
-  // compression method
-  CENTIM: 12,
-  // modification time (2 bytes time, 2 bytes date)
-  CENCRC: 16,
-  // uncompressed file crc-32 value
-  CENSIZ: 20,
-  // compressed size
-  CENLEN: 24,
-  // uncompressed size
-  CENNAM: 28,
-  // filename length
-  CENEXT: 30,
-  // extra field length
-  CENCOM: 32,
-  // file comment length
-  CENDSK: 34,
-  // volume number start
-  CENATT: 36,
-  // internal file attributes
-  CENATX: 38,
-  // external file attributes (host system dependent)
-  CENOFF: 42,
-  // LOC header offset
+          if (!async) {
+            var deflated = deflater.deflate();
+            _entryHeader.compressedSize = deflated.length;
+            return deflated;
+          } else {
+            deflater.deflateAsync(function (data) {
+              compressedData = Buffer.alloc(data.length);
+              _entryHeader.compressedSize = data.length;
+              data.copy(compressedData);
+              callback && callback(compressedData);
+            });
+          }
 
-  /* The entries in the end of central directory */
-  ENDHDR: 22,
-  // END header size
-  ENDSIG: 0x06054b50,
-  // "PK\005\006"
-  ENDSUB: 8,
-  // number of entries on this disk
-  ENDTOT: 10,
-  // total number of entries
-  ENDSIZ: 12,
-  // central directory size in bytes
-  ENDOFF: 16,
-  // offset of first CEN header
-  ENDCOM: 20,
-  // zip file comment length
-  END64HDR: 20,
-  // zip64 END header size
-  END64SIG: 0x07064b50,
-  // zip64 Locator signature, "PK\006\007"
-  END64START: 4,
-  // number of the disk with the start of the zip64
-  END64OFF: 8,
-  // relative offset of the zip64 end of central directory
-  END64NUMDISKS: 16,
-  // total number of disks
-  ZIP64SIG: 0x06064b50,
-  // zip64 signature, "PK\006\006"
-  ZIP64HDR: 56,
-  // zip64 record minimum size
-  ZIP64LEAD: 12,
-  // leading bytes at the start of the record, not counted by the value stored in ZIP64SIZE
-  ZIP64SIZE: 4,
-  // zip64 size of the central directory record
-  ZIP64VEM: 12,
-  // zip64 version made by
-  ZIP64VER: 14,
-  // zip64 version needed to extract
-  ZIP64DSK: 16,
-  // zip64 number of this disk
-  ZIP64DSKDIR: 20,
-  // number of the disk with the start of the record directory
-  ZIP64SUB: 24,
-  // number of entries on this disk
-  ZIP64TOT: 32,
-  // total number of entries
-  ZIP64SIZB: 40,
-  // zip64 central directory size in bytes
-  ZIP64OFF: 48,
-  // offset of start of central directory with respect to the starting disk number
-  ZIP64EXTRA: 56,
-  // extensible data sector
+          deflater = null;
+          break;
+      }
+    } else if (async && callback) {
+      callback(Buffer.alloc(0));
+    } else {
+      return Buffer.alloc(0);
+    }
+  }
 
-  /* Compression methods */
-  STORED: 0,
-  // no compression
-  SHRUNK: 1,
-  // shrunk
-  REDUCED1: 2,
-  // reduced with compression factor 1
-  REDUCED2: 3,
-  // reduced with compression factor 2
-  REDUCED3: 4,
-  // reduced with compression factor 3
-  REDUCED4: 5,
-  // reduced with compression factor 4
-  IMPLODED: 6,
-  // imploded
-  // 7 reserved for Tokenizing compression algorithm
-  DEFLATED: 8,
-  // deflated
-  ENHANCED_DEFLATED: 9,
-  // enhanced deflated
-  PKWARE: 10,
-  // PKWare DCL imploded
-  // 11 reserved by PKWARE
-  BZIP2: 12,
-  //  compressed using BZIP2
-  // 13 reserved by PKWARE
-  LZMA: 14,
-  // LZMA
-  // 15-17 reserved by PKWARE
-  IBM_TERSE: 18,
-  // compressed using IBM TERSE
-  IBM_LZ77: 19,
-  // IBM LZ77 z
-  AES_ENCRYPT: 99,
-  // WinZIP AES encryption method
+  function readUInt64LE(buffer, offset) {
+    return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset);
+  }
 
-  /* General purpose bit flag */
-  // values can obtained with expression 2**bitnr
-  FLG_ENC: 1,
-  // Bit 0: encrypted file
-  FLG_COMP1: 2,
-  // Bit 1, compression option
-  FLG_COMP2: 4,
-  // Bit 2, compression option
-  FLG_DESC: 8,
-  // Bit 3, data descriptor
-  FLG_ENH: 16,
-  // Bit 4, enhanced deflating
-  FLG_PATCH: 32,
-  // Bit 5, indicates that the file is compressed patched data.
-  FLG_STR: 64,
-  // Bit 6, strong encryption (patented)
-  // Bits 7-10: Currently unused.
-  FLG_EFS: 2048,
-  // Bit 11: Language encoding flag (EFS)
-  // Bit 12: Reserved by PKWARE for enhanced compression.
-  // Bit 13: encrypted the Central Directory (patented).
-  // Bits 14-15: Reserved by PKWARE.
-  FLG_MSK: 4096,
-  // mask header values
+  function parseExtra(data) {
+    var offset = 0;
+    var signature, size, part;
 
-  /* Load type */
-  FILE: 2,
-  BUFFER: 1,
-  NONE: 0,
+    while (offset < data.length) {
+      signature = data.readUInt16LE(offset);
+      offset += 2;
+      size = data.readUInt16LE(offset);
+      offset += 2;
+      part = data.slice(offset, offset + size);
+      offset += size;
 
-  /* 4.5 Extensible data fields */
-  EF_ID: 0,
-  EF_SIZE: 2,
+      if (Constants.ID_ZIP64 === signature) {
+        parseZip64ExtendedInformation(part);
+      }
+    }
+  } //Override header field values with values from the ZIP64 extra field
 
-  /* Header IDs */
-  ID_ZIP64: 0x0001,
-  ID_AVINFO: 0x0007,
-  ID_PFS: 0x0008,
-  ID_OS2: 0x0009,
-  ID_NTFS: 0x000a,
-  ID_OPENVMS: 0x000c,
-  ID_UNIX: 0x000d,
-  ID_FORK: 0x000e,
-  ID_PATCH: 0x000f,
-  ID_X509_PKCS7: 0x0014,
-  ID_X509_CERTID_F: 0x0015,
-  ID_X509_CERTID_C: 0x0016,
-  ID_STRONGENC: 0x0017,
-  ID_RECORD_MGT: 0x0018,
-  ID_X509_PKCS7_RL: 0x0019,
-  ID_IBM1: 0x0065,
-  ID_IBM2: 0x0066,
-  ID_POSZIP: 0x4690,
-  EF_ZIP64_OR_32: 0xffffffff,
-  EF_ZIP64_OR_16: 0xffff,
-  EF_ZIP64_SUNCOMP: 0,
-  EF_ZIP64_SCOMP: 8,
-  EF_ZIP64_RHO: 16,
-  EF_ZIP64_DSN: 24
-};
 
-/***/ }),
+  function parseZip64ExtendedInformation(data) {
+    var size, compressedSize, offset, diskNumStart;
 
-/***/ "./node_modules/adm-zip/util/errors.js":
-/*!*********************************************!*\
-  !*** ./node_modules/adm-zip/util/errors.js ***!
-  \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+    if (data.length >= Constants.EF_ZIP64_SCOMP) {
+      size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);
 
-module.exports = {
-  /* Header error messages */
-  INVALID_LOC: "Invalid LOC header (bad signature)",
-  INVALID_CEN: "Invalid CEN header (bad signature)",
-  INVALID_END: "Invalid END header (bad signature)",
+      if (_entryHeader.size === Constants.EF_ZIP64_OR_32) {
+        _entryHeader.size = size;
+      }
+    }
 
-  /* ZipEntry error messages*/
-  NO_DATA: "Nothing to decompress",
-  BAD_CRC: "CRC32 checksum failed",
-  FILE_IN_THE_WAY: "There is a file in the way: %s",
-  UNKNOWN_METHOD: "Invalid/unsupported compression method",
+    if (data.length >= Constants.EF_ZIP64_RHO) {
+      compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);
 
-  /* Inflater error messages */
-  AVAIL_DATA: "inflate::Available inflate data did not terminate",
-  INVALID_DISTANCE: "inflate::Invalid literal/length or distance code in fixed or dynamic block",
-  TO_MANY_CODES: "inflate::Dynamic block code description: too many length or distance codes",
-  INVALID_REPEAT_LEN: "inflate::Dynamic block code description: repeat more than specified lengths",
-  INVALID_REPEAT_FIRST: "inflate::Dynamic block code description: repeat lengths with no first length",
-  INCOMPLETE_CODES: "inflate::Dynamic block code description: code lengths codes incomplete",
-  INVALID_DYN_DISTANCE: "inflate::Dynamic block code description: invalid distance code lengths",
-  INVALID_CODES_LEN: "inflate::Dynamic block code description: invalid literal/length code lengths",
-  INVALID_STORE_BLOCK: "inflate::Stored block length did not match one's complement",
-  INVALID_BLOCK_TYPE: "inflate::Invalid block type (type == 3)",
+      if (_entryHeader.compressedSize === Constants.EF_ZIP64_OR_32) {
+        _entryHeader.compressedSize = compressedSize;
+      }
+    }
 
-  /* ADM-ZIP error messages */
-  CANT_EXTRACT_FILE: "Could not extract the file",
-  CANT_OVERRIDE: "Target file already exists",
-  NO_ZIP: "No zip file was loaded",
-  NO_ENTRY: "Entry doesn't exist",
-  DIRECTORY_CONTENT_ERROR: "A directory cannot have content",
-  FILE_NOT_FOUND: "File not found: %s",
-  NOT_IMPLEMENTED: "Not implemented",
-  INVALID_FILENAME: "Invalid filename",
-  INVALID_FORMAT: "Invalid or unsupported zip format. No END header found"
-};
+    if (data.length >= Constants.EF_ZIP64_DSN) {
+      offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);
 
-/***/ }),
+      if (_entryHeader.offset === Constants.EF_ZIP64_OR_32) {
+        _entryHeader.offset = offset;
+      }
+    }
 
-/***/ "./node_modules/adm-zip/util/fattr.js":
-/*!********************************************!*\
-  !*** ./node_modules/adm-zip/util/fattr.js ***!
-  \********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+    if (data.length >= Constants.EF_ZIP64_DSN + 4) {
+      diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);
 
-const fs = __webpack_require__(/*! ./fileSystem */ "./node_modules/adm-zip/util/fileSystem.js").require();
+      if (_entryHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {
+        _entryHeader.diskNumStart = diskNumStart;
+      }
+    }
+  }
 
-const pth = __webpack_require__(/*! path */ "path");
+  return {
+    get entryName() {
+      return _entryName.toString();
+    },
 
-fs.existsSync = fs.existsSync || pth.existsSync;
+    get rawEntryName() {
+      return _entryName;
+    },
 
-module.exports = function (
-/*String*/
-path) {
-  var _path = path || "",
-      _obj = newAttr(),
-      _stat = null;
+    set entryName(val) {
+      _entryName = Utils.toBuffer(val);
+      var lastChar = _entryName[_entryName.length - 1];
+      _isDirectory = lastChar === 47 || lastChar === 92;
+      _entryHeader.fileNameLength = _entryName.length;
+    },
 
-  function newAttr() {
-    return {
-      directory: false,
-      readonly: false,
-      hidden: false,
-      executable: false,
-      mtime: 0,
-      atime: 0
-    };
-  }
+    get extra() {
+      return _extra;
+    },
 
-  if (_path && fs.existsSync(_path)) {
-    _stat = fs.statSync(_path);
-    _obj.directory = _stat.isDirectory();
-    _obj.mtime = _stat.mtime;
-    _obj.atime = _stat.atime;
-    _obj.executable = (0o111 & _stat.mode) !== 0; // file is executable who ever har right not just owner
+    set extra(val) {
+      _extra = val;
+      _entryHeader.extraLength = val.length;
+      parseExtra(val);
+    },
 
-    _obj.readonly = (0o200 & _stat.mode) === 0; // readonly if owner has no write right
+    get comment() {
+      return _comment.toString();
+    },
 
-    _obj.hidden = pth.basename(_path)[0] === ".";
-  } else {
-    console.warn("Invalid path: " + _path);
-  }
+    set comment(val) {
+      _comment = Utils.toBuffer(val);
+      _entryHeader.commentLength = _comment.length;
+    },
 
-  return {
-    get directory() {
-      return _obj.directory;
+    get name() {
+      var n = _entryName.toString();
+
+      return _isDirectory ? n.substr(n.length - 1).split("/").pop() : n.split("/").pop();
     },
 
-    get readOnly() {
-      return _obj.readonly;
+    get isDirectory() {
+      return _isDirectory;
     },
 
-    get hidden() {
-      return _obj.hidden;
+    getCompressedData: function () {
+      return compress(false, null);
+    },
+    getCompressedDataAsync: function (
+    /*Function*/
+    callback) {
+      compress(true, callback);
     },
+    setData: function (value) {
+      uncompressedData = Utils.toBuffer(value);
 
-    get mtime() {
-      return _obj.mtime;
+      if (!_isDirectory && uncompressedData.length) {
+        _entryHeader.size = uncompressedData.length;
+        _entryHeader.method = Utils.Constants.DEFLATED;
+        _entryHeader.crc = Utils.crc32(value);
+        _entryHeader.changed = true;
+      } else {
+        // folders and blank files should be stored
+        _entryHeader.method = Utils.Constants.STORED;
+      }
+    },
+    getData: function (pass) {
+      if (_entryHeader.changed) {
+        return uncompressedData;
+      } else {
+        return decompress(false, null, pass);
+      }
+    },
+    getDataAsync: function (
+    /*Function*/
+    callback, pass) {
+      if (_entryHeader.changed) {
+        callback(uncompressedData);
+      } else {
+        decompress(true, callback, pass);
+      }
     },
 
-    get atime() {
-      return _obj.atime;
+    set attr(attr) {
+      _entryHeader.attr = attr;
     },
 
-    get executable() {
-      return _obj.executable;
+    get attr() {
+      return _entryHeader.attr;
     },
 
-    decodeAttributes: function () {},
-    encodeAttributes: function () {},
-    toJSON: function () {
-      return {
-        path: _path,
-        isDirectory: _obj.directory,
-        isReadOnly: _obj.readonly,
-        isHidden: _obj.hidden,
-        isExecutable: _obj.executable,
-        mTime: _obj.mtime,
-        aTime: _obj.atime
-      };
+    set header(
+    /*Buffer*/
+    data) {
+      _entryHeader.loadFromBinary(data);
     },
-    toString: function () {
-      return JSON.stringify(this.toJSON(), null, "\t");
-    }
-  };
-};
 
-/***/ }),
+    get header() {
+      return _entryHeader;
+    },
 
-/***/ "./node_modules/adm-zip/util/fileSystem.js":
-/*!*************************************************!*\
-  !*** ./node_modules/adm-zip/util/fileSystem.js ***!
-  \*************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+    packHeader: function () {
+      // 1. create header (buffer)
+      var header = _entryHeader.entryHeaderToBinary();
 
-exports.require = function () {
-  if (typeof process === "object" && process.versions && process.versions["electron"]) {
-    try {
-      const originalFs = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module 'original-fs'"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
+      var addpos = Utils.Constants.CENHDR; // 2. add file name
 
-      if (Object.keys(originalFs).length > 0) {
-        return originalFs;
-      }
-    } catch (e) {}
-  }
+      _entryName.copy(header, addpos);
 
-  return __webpack_require__(/*! fs */ "fs");
-};
+      addpos += _entryName.length; // 3. add extra data
 
-/***/ }),
+      if (_entryHeader.extraLength) {
+        _extra.copy(header, addpos);
 
-/***/ "./node_modules/adm-zip/util/index.js":
-/*!********************************************!*\
-  !*** ./node_modules/adm-zip/util/index.js ***!
-  \********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+        addpos += _entryHeader.extraLength;
+      } // 4. add file comment
 
-module.exports = __webpack_require__(/*! ./utils */ "./node_modules/adm-zip/util/utils.js");
-module.exports.Constants = __webpack_require__(/*! ./constants */ "./node_modules/adm-zip/util/constants.js");
-module.exports.Errors = __webpack_require__(/*! ./errors */ "./node_modules/adm-zip/util/errors.js");
-module.exports.FileAttr = __webpack_require__(/*! ./fattr */ "./node_modules/adm-zip/util/fattr.js");
+
+      if (_entryHeader.commentLength) {
+        _comment.copy(header, addpos);
+      }
+
+      return header;
+    },
+    toJSON: function () {
+      const bytes = function (nr) {
+        return "<" + (nr && nr.length + " bytes buffer" || "null") + ">";
+      };
+
+      return {
+        entryName: this.entryName,
+        name: this.name,
+        comment: this.comment,
+        isDirectory: this.isDirectory,
+        header: _entryHeader.toJSON(),
+        compressedData: bytes(input),
+        data: bytes(uncompressedData)
+      };
+    },
+    toString: function () {
+      return JSON.stringify(this.toJSON(), null, "\t");
+    }
+  };
+};
 
 /***/ }),
 
-/***/ "./node_modules/adm-zip/util/utils.js":
-/*!********************************************!*\
-  !*** ./node_modules/adm-zip/util/utils.js ***!
-  \********************************************/
+/***/ "./node_modules/adm-zip/zipFile.js":
+/*!*****************************************!*\
+  !*** ./node_modules/adm-zip/zipFile.js ***!
+  \*****************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-const fsystem = __webpack_require__(/*! ./fileSystem */ "./node_modules/adm-zip/util/fileSystem.js").require();
+const ZipEntry = __webpack_require__(/*! ./zipEntry */ "./node_modules/adm-zip/zipEntry.js");
 
-const pth = __webpack_require__(/*! path */ "path");
+const Headers = __webpack_require__(/*! ./headers */ "./node_modules/adm-zip/headers/index.js");
 
-const Constants = __webpack_require__(/*! ./constants */ "./node_modules/adm-zip/util/constants.js");
+const Utils = __webpack_require__(/*! ./util */ "./node_modules/adm-zip/util/index.js");
 
-const isWin = typeof process === "object" && "win32" === process.platform;
+module.exports = function (
+/*Buffer|null*/
+inBuffer,
+/** object */
+options) {
+  var entryList = [],
+      entryTable = {},
+      _comment = Buffer.alloc(0),
+      mainHeader = new Headers.MainHeader(),
+      loadedEntries = false; // assign options
 
-const is_Obj = obj => obj && typeof obj === "object"; // generate CRC32 lookup table
 
+  const opts = Object.assign(Object.create(null), options);
+  const noSort = opts.noSort;
 
-const crcTable = new Uint32Array(256).map((t, c) => {
-  for (let k = 0; k < 8; k++) {
-    if ((c & 1) !== 0) {
-      c = 0xedb88320 ^ c >>> 1;
-    } else {
-      c >>>= 1;
-    }
+  if (inBuffer) {
+    // is a memory buffer
+    readMainHeader(opts.readEntries);
+  } else {
+    // none. is a new file
+    loadedEntries = true;
   }
 
-  return c >>> 0;
-}); // UTILS functions
+  function iterateEntries(callback) {
+    const totalEntries = mainHeader.diskEntries; // total number of entries
 
-function Utils(opts) {
-  this.sep = pth.sep;
-  this.fs = fsystem;
+    let index = mainHeader.offset; // offset of first CEN header
 
-  if (is_Obj(opts)) {
-    // custom filesystem
-    if (is_Obj(opts.fs) && typeof opts.fs.statSync === "function") {
-      this.fs = opts.fs;
+    for (let i = 0; i < totalEntries; i++) {
+      let tmp = index;
+      const entry = new ZipEntry(inBuffer);
+      entry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR);
+      entry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength);
+      index += entry.header.entryHeaderSize;
+      callback(entry);
     }
   }
-}
 
-module.exports = Utils; // INSTANCED functions
+  function readEntries() {
+    loadedEntries = true;
+    entryTable = {};
+    entryList = new Array(mainHeader.diskEntries); // total number of entries
 
-Utils.prototype.makeDir = function (
-/*String*/
-folder) {
-  const self = this; // Sync - make directories tree
+    var index = mainHeader.offset; // offset of first CEN header
 
-  function mkdirSync(
-  /*String*/
-  fpath) {
-    let resolvedPath = fpath.split(self.sep)[0];
-    fpath.split(self.sep).forEach(function (name) {
-      if (!name || name.substr(-1, 1) === ":") return;
-      resolvedPath += self.sep + name;
-      var stat;
+    for (var i = 0; i < entryList.length; i++) {
+      var tmp = index,
+          entry = new ZipEntry(inBuffer);
+      entry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR);
+      entry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength);
 
-      try {
-        stat = self.fs.statSync(resolvedPath);
-      } catch (e) {
-        self.fs.mkdirSync(resolvedPath);
+      if (entry.header.extraLength) {
+        entry.extra = inBuffer.slice(tmp, tmp += entry.header.extraLength);
       }
 
-      if (stat && stat.isFile()) throw Errors.FILE_IN_THE_WAY.replace("%s", resolvedPath);
-    });
+      if (entry.header.commentLength) entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength);
+      index += entry.header.entryHeaderSize;
+      entryList[i] = entry;
+      entryTable[entry.entryName] = entry;
+    }
   }
 
-  mkdirSync(folder);
-};
+  function readMainHeader(
+  /*Boolean*/
+  readNow) {
+    var i = inBuffer.length - Utils.Constants.ENDHDR,
+        // END header size
+    max = Math.max(0, i - 0xffff),
+        // 0xFFFF is the max zip file comment length
+    n = max,
+        endStart = inBuffer.length,
+        endOffset = -1,
+        // Start offset of the END header
+    commentEnd = 0;
 
-Utils.prototype.writeFileTo = function (
-/*String*/
-path,
-/*Buffer*/
-content,
-/*Boolean*/
-overwrite,
-/*Number*/
-attr) {
-  const self = this;
+    for (i; i >= n; i--) {
+      if (inBuffer[i] !== 0x50) continue; // quick check that the byte is 'P'
 
-  if (self.fs.existsSync(path)) {
-    if (!overwrite) return false; // cannot overwrite
+      if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) {
+        // "PK\005\006"
+        endOffset = i;
+        commentEnd = i;
+        endStart = i + Utils.Constants.ENDHDR; // We already found a regular signature, let's look just a bit further to check if there's any zip64 signature
 
-    var stat = self.fs.statSync(path);
+        n = i - Utils.Constants.END64HDR;
+        continue;
+      }
 
-    if (stat.isDirectory()) {
-      return false;
-    }
-  }
+      if (inBuffer.readUInt32LE(i) === Utils.Constants.END64SIG) {
+        // Found a zip64 signature, let's continue reading the whole zip64 record
+        n = max;
+        continue;
+      }
 
-  var folder = pth.dirname(path);
+      if (inBuffer.readUInt32LE(i) === Utils.Constants.ZIP64SIG) {
+        // Found the zip64 record, let's determine it's size
+        endOffset = i;
+        endStart = i + Utils.readBigUInt64LE(inBuffer, i + Utils.Constants.ZIP64SIZE) + Utils.Constants.ZIP64LEAD;
+        break;
+      }
+    }
 
-  if (!self.fs.existsSync(folder)) {
-    self.makeDir(folder);
-  }
+    if (!~endOffset) throw new Error(Utils.Errors.INVALID_FORMAT);
+    mainHeader.loadFromBinary(inBuffer.slice(endOffset, endStart));
 
-  var fd;
+    if (mainHeader.commentLength) {
+      _comment = inBuffer.slice(commentEnd + Utils.Constants.ENDHDR);
+    }
 
-  try {
-    fd = self.fs.openSync(path, "w", 438); // 0666
-  } catch (e) {
-    self.fs.chmodSync(path, 438);
-    fd = self.fs.openSync(path, "w", 438);
+    if (readNow) readEntries();
   }
 
-  if (fd) {
-    try {
-      self.fs.writeSync(fd, content, 0, content.length, 0);
-    } finally {
-      self.fs.closeSync(fd);
+  function sortEntries() {
+    if (entryList.length > 1 && !noSort) {
+      entryList.sort((a, b) => a.entryName.toLowerCase().localeCompare(b.entryName.toLowerCase()));
     }
   }
 
-  self.fs.chmodSync(path, attr || 438);
-  return true;
-};
-
-Utils.prototype.writeFileToAsync = function (
-/*String*/
-path,
-/*Buffer*/
-content,
-/*Boolean*/
-overwrite,
-/*Number*/
-attr,
-/*Function*/
-callback) {
-  if (typeof attr === "function") {
-    callback = attr;
-    attr = undefined;
-  }
-
-  const self = this;
-  self.fs.exists(path, function (exist) {
-    if (exist && !overwrite) return callback(false);
-    self.fs.stat(path, function (err, stat) {
-      if (exist && stat.isDirectory()) {
-        return callback(false);
+  return {
+    /**
+     * Returns an array of ZipEntry objects existent in the current opened archive
+     * @return Array
+     */
+    get entries() {
+      if (!loadedEntries) {
+        readEntries();
       }
 
-      var folder = pth.dirname(path);
-      self.fs.exists(folder, function (exists) {
-        if (!exists) self.makeDir(folder);
-        self.fs.open(path, "w", 438, function (err, fd) {
-          if (err) {
-            self.fs.chmod(path, 438, function () {
-              self.fs.open(path, "w", 438, function (err, fd) {
-                self.fs.write(fd, content, 0, content.length, 0, function () {
-                  self.fs.close(fd, function () {
-                    self.fs.chmod(path, attr || 438, function () {
-                      callback(true);
-                    });
-                  });
-                });
-              });
-            });
-          } else if (fd) {
-            self.fs.write(fd, content, 0, content.length, 0, function () {
-              self.fs.close(fd, function () {
-                self.fs.chmod(path, attr || 438, function () {
-                  callback(true);
-                });
-              });
-            });
-          } else {
-            self.fs.chmod(path, attr || 438, function () {
-              callback(true);
-            });
-          }
-        });
-      });
-    });
-  });
-};
-
-Utils.prototype.findFiles = function (
-/*String*/
-path) {
-  const self = this;
+      return entryList;
+    },
 
-  function findSync(
-  /*String*/
-  dir,
-  /*RegExp*/
-  pattern,
-  /*Boolean*/
-  recursive) {
-    if (typeof pattern === "boolean") {
-      recursive = pattern;
-      pattern = undefined;
-    }
+    /**
+     * Archive comment
+     * @return {String}
+     */
+    get comment() {
+      return _comment.toString();
+    },
 
-    let files = [];
-    self.fs.readdirSync(dir).forEach(function (file) {
-      var path = pth.join(dir, file);
-      if (self.fs.statSync(path).isDirectory() && recursive) files = files.concat(findSync(path, pattern, recursive));
+    set comment(val) {
+      _comment = Utils.toBuffer(val);
+      mainHeader.commentLength = _comment.length;
+    },
 
-      if (!pattern || pattern.test(path)) {
-        files.push(pth.normalize(path) + (self.fs.statSync(path).isDirectory() ? self.sep : ""));
+    getEntryCount: function () {
+      if (!loadedEntries) {
+        return mainHeader.diskEntries;
       }
-    });
-    return files;
-  }
 
-  return findSync(path, undefined, true);
-};
+      return entryList.length;
+    },
+    forEach: function (callback) {
+      if (!loadedEntries) {
+        iterateEntries(callback);
+        return;
+      }
 
-Utils.prototype.getAttributes = function () {};
+      entryList.forEach(callback);
+    },
 
-Utils.prototype.setAttributes = function () {}; // STATIC functions
-// crc32 single update (it is part of crc32)
+    /**
+     * Returns a reference to the entry with the given name or null if entry is inexistent
+     *
+     * @param entryName
+     * @return ZipEntry
+     */
+    getEntry: function (
+    /*String*/
+    entryName) {
+      if (!loadedEntries) {
+        readEntries();
+      }
 
+      return entryTable[entryName] || null;
+    },
 
-Utils.crc32update = function (crc, byte) {
-  return crcTable[(crc ^ byte) & 0xff] ^ crc >>> 8;
-};
+    /**
+     * Adds the given entry to the entry list
+     *
+     * @param entry
+     */
+    setEntry: function (
+    /*ZipEntry*/
+    entry) {
+      if (!loadedEntries) {
+        readEntries();
+      }
 
-Utils.crc32 = function (buf) {
-  if (typeof buf === "string") {
-    buf = Buffer.from(buf, "utf8");
-  } // Generate crcTable
+      entryList.push(entry);
+      entryTable[entry.entryName] = entry;
+      mainHeader.totalEntries = entryList.length;
+    },
 
+    /**
+     * Removes the entry with the given name from the entry list.
+     *
+     * If the entry is a directory, then all nested files and directories will be removed
+     * @param entryName
+     */
+    deleteEntry: function (
+    /*String*/
+    entryName) {
+      if (!loadedEntries) {
+        readEntries();
+      }
 
-  if (!crcTable.length) genCRCTable();
-  let len = buf.length;
-  let crc = ~0;
+      var entry = entryTable[entryName];
 
-  for (let off = 0; off < len;) crc = Utils.crc32update(crc, buf[off++]); // xor and cast as uint32 number
+      if (entry && entry.isDirectory) {
+        var _self = this;
 
+        this.getEntryChildren(entry).forEach(function (child) {
+          if (child.entryName !== entryName) {
+            _self.deleteEntry(child.entryName);
+          }
+        });
+      }
 
-  return ~crc >>> 0;
-};
+      entryList.splice(entryList.indexOf(entry), 1);
+      delete entryTable[entryName];
+      mainHeader.totalEntries = entryList.length;
+    },
 
-Utils.methodToString = function (
-/*Number*/
-method) {
-  switch (method) {
-    case Constants.STORED:
-      return "STORED (" + method + ")";
+    /**
+     *  Iterates and returns all nested files and directories of the given entry
+     *
+     * @param entry
+     * @return Array
+     */
+    getEntryChildren: function (
+    /*ZipEntry*/
+    entry) {
+      if (!loadedEntries) {
+        readEntries();
+      }
 
-    case Constants.DEFLATED:
-      return "DEFLATED (" + method + ")";
+      if (entry && entry.isDirectory) {
+        const list = [];
+        const name = entry.entryName;
+        const len = name.length;
+        entryList.forEach(function (zipEntry) {
+          if (zipEntry.entryName.substr(0, len) === name) {
+            list.push(zipEntry);
+          }
+        });
+        return list;
+      }
 
-    default:
-      return "UNSUPPORTED (" + method + ")";
-  }
-}; // removes ".." style path elements
+      return [];
+    },
 
+    /**
+     * Returns the zip file
+     *
+     * @return Buffer
+     */
+    compressToBuffer: function () {
+      if (!loadedEntries) {
+        readEntries();
+      }
 
-Utils.canonical = function (
-/*string*/
-path) {
-  if (!path) return ""; // trick normalize think path is absolute
+      sortEntries();
+      const dataBlock = [];
+      const entryHeaders = [];
+      let totalSize = 0;
+      let dindex = 0;
+      mainHeader.size = 0;
+      mainHeader.offset = 0;
 
-  var safeSuffix = pth.posix.normalize("/" + path.split("\\").join("/"));
-  return pth.join(".", safeSuffix);
-}; // make abolute paths taking prefix as root folder
+      for (const entry of entryList) {
+        // compress data and set local and entry header accordingly. Reason why is called first
+        const compressedData = entry.getCompressedData(); // 1. construct data header
 
+        entry.header.offset = dindex;
+        const dataHeader = entry.header.dataHeaderToBinary();
+        const entryNameLen = entry.rawEntryName.length; // 1.2. postheader - data after data header
 
-Utils.sanitize = function (
-/*string*/
-prefix,
-/*string*/
-name) {
-  prefix = pth.resolve(pth.normalize(prefix));
-  var parts = name.split("/");
+        const postHeader = Buffer.alloc(entryNameLen + entry.extra.length);
+        entry.rawEntryName.copy(postHeader, 0);
+        postHeader.copy(entry.extra, entryNameLen); // 2. offsets
 
-  for (var i = 0, l = parts.length; i < l; i++) {
-    var path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep)));
+        const dataLength = dataHeader.length + postHeader.length + compressedData.length;
+        dindex += dataLength; // 3. store values in sequence
 
-    if (path.indexOf(prefix) === 0) {
-      return path;
-    }
-  }
+        dataBlock.push(dataHeader);
+        dataBlock.push(postHeader);
+        dataBlock.push(compressedData); // 4. construct entry header
 
-  return pth.normalize(pth.join(prefix, pth.basename(name)));
-}; // converts buffer, Uint8Array, string types to buffer
+        const entryHeader = entry.packHeader();
+        entryHeaders.push(entryHeader); // 5. update main header
 
+        mainHeader.size += entryHeader.length;
+        totalSize += dataLength + entryHeader.length;
+      }
 
-Utils.toBuffer = function toBuffer(
-/*buffer, Uint8Array, string*/
-input) {
-  if (Buffer.isBuffer(input)) {
-    return input;
-  } else if (input instanceof Uint8Array) {
-    return Buffer.from(input);
-  } else {
-    // expect string all other values are invalid and return empty buffer
-    return typeof input === "string" ? Buffer.from(input, "utf8") : Buffer.alloc(0);
-  }
-};
+      totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length
+      // point to end of data and beginning of central directory first record
 
-Utils.readBigUInt64LE = function (
-/*Buffer*/
-buffer,
-/*int*/
-index) {
-  var slice = Buffer.from(buffer.slice(index, index + 8));
-  slice.swap64();
-  return parseInt(`0x${slice.toString("hex")}`);
-};
+      mainHeader.offset = dindex;
+      dindex = 0;
+      const outBuffer = Buffer.alloc(totalSize); // write data blocks
 
-Utils.isWin = isWin; // Do we have windows system
+      for (const content of dataBlock) {
+        content.copy(outBuffer, dindex);
+        dindex += content.length;
+      } // write central directory entries
 
-Utils.crcTable = crcTable;
 
-/***/ }),
+      for (const content of entryHeaders) {
+        content.copy(outBuffer, dindex);
+        dindex += content.length;
+      } // write main header
 
-/***/ "./node_modules/adm-zip/zipEntry.js":
-/*!******************************************!*\
-  !*** ./node_modules/adm-zip/zipEntry.js ***!
-  \******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
 
-var Utils = __webpack_require__(/*! ./util */ "./node_modules/adm-zip/util/index.js"),
-    Headers = __webpack_require__(/*! ./headers */ "./node_modules/adm-zip/headers/index.js"),
-    Constants = Utils.Constants,
-    Methods = __webpack_require__(/*! ./methods */ "./node_modules/adm-zip/methods/index.js");
+      const mh = mainHeader.toBinary();
 
-module.exports = function (
-/*Buffer*/
-input) {
-  var _entryHeader = new Headers.EntryHeader(),
-      _entryName = Buffer.alloc(0),
-      _comment = Buffer.alloc(0),
-      _isDirectory = false,
-      uncompressedData = null,
-      _extra = Buffer.alloc(0);
+      if (_comment) {
+        _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment
 
-  function getCompressedDataFromZip() {
-    if (!input || !Buffer.isBuffer(input)) {
-      return Buffer.alloc(0);
-    }
+      }
 
-    _entryHeader.loadDataHeaderFromBinary(input);
+      mh.copy(outBuffer, dindex);
+      return outBuffer;
+    },
+    toAsyncBuffer: function (
+    /*Function*/
+    onSuccess,
+    /*Function*/
+    onFail,
+    /*Function*/
+    onItemStart,
+    /*Function*/
+    onItemEnd) {
+      try {
+        if (!loadedEntries) {
+          readEntries();
+        }
 
-    return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize);
-  }
+        sortEntries();
+        const dataBlock = [];
+        const entryHeaders = [];
+        let totalSize = 0;
+        let dindex = 0;
+        mainHeader.size = 0;
+        mainHeader.offset = 0;
 
-  function crc32OK(data) {
-    // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written
-    if ((_entryHeader.flags & 0x8) !== 0x8) {
-      if (Utils.crc32(data) !== _entryHeader.dataHeader.crc) {
-        return false;
-      }
-    } else {// @TODO: load and check data descriptor header
-      // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure
-      // (optionally preceded by a 4-byte signature) immediately after the compressed data:
-    }
+        const compress2Buffer = function (entryLists) {
+          if (entryLists.length) {
+            const entry = entryLists.pop();
+            const name = entry.entryName + entry.extra.toString();
+            if (onItemStart) onItemStart(name);
+            entry.getCompressedDataAsync(function (compressedData) {
+              if (onItemEnd) onItemEnd(name);
+              entry.header.offset = dindex; // data header
 
-    return true;
-  }
+              const dataHeader = entry.header.dataHeaderToBinary();
+              const postHeader = Buffer.alloc(name.length, name);
+              const dataLength = dataHeader.length + postHeader.length + compressedData.length;
+              dindex += dataLength;
+              dataBlock.push(dataHeader);
+              dataBlock.push(postHeader);
+              dataBlock.push(compressedData);
+              const entryHeader = entry.packHeader();
+              entryHeaders.push(entryHeader);
+              mainHeader.size += entryHeader.length;
+              totalSize += dataLength + entryHeader.length;
+              compress2Buffer(entryLists);
+            });
+          } else {
+            totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length
+            // point to end of data and beginning of central directory first record
 
-  function decompress(
-  /*Boolean*/
-  async,
-  /*Function*/
-  callback,
-  /*String, Buffer*/
-  pass) {
-    if (typeof callback === "undefined" && typeof async === "string") {
-      pass = async;
-      async = void 0;
-    }
+            mainHeader.offset = dindex;
+            dindex = 0;
+            const outBuffer = Buffer.alloc(totalSize);
+            dataBlock.forEach(function (content) {
+              content.copy(outBuffer, dindex); // write data blocks
 
-    if (_isDirectory) {
-      if (async && callback) {
-        callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error.
-      }
+              dindex += content.length;
+            });
+            entryHeaders.forEach(function (content) {
+              content.copy(outBuffer, dindex); // write central directory entries
 
-      return Buffer.alloc(0);
-    }
+              dindex += content.length;
+            });
+            const mh = mainHeader.toBinary();
 
-    var compressedData = getCompressedDataFromZip();
+            if (_comment) {
+              _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment
 
-    if (compressedData.length === 0) {
-      // File is empty, nothing to decompress.
-      if (async && callback) callback(compressedData);
-      return compressedData;
-    }
+            }
 
-    if (_entryHeader.encripted) {
-      if ("string" !== typeof pass && !Buffer.isBuffer(pass)) {
-        throw new Error("ADM-ZIP: Incompatible password parameter");
-      }
+            mh.copy(outBuffer, dindex); // write main header
 
-      compressedData = Methods.ZipCrypto.decrypt(compressedData, _entryHeader, pass);
+            onSuccess(outBuffer);
+          }
+        };
+
+        compress2Buffer(entryList);
+      } catch (e) {
+        onFail(e);
+      }
     }
+  };
+};
 
-    var data = Buffer.alloc(_entryHeader.size);
+/***/ }),
 
-    switch (_entryHeader.method) {
-      case Utils.Constants.STORED:
-        compressedData.copy(data);
+/***/ "./node_modules/available-typed-arrays/index.js":
+/*!******************************************************!*\
+  !*** ./node_modules/available-typed-arrays/index.js ***!
+  \******************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-        if (!crc32OK(data)) {
-          if (async && callback) callback(data, Utils.Errors.BAD_CRC); //si added error
+"use strict";
 
-          throw new Error(Utils.Errors.BAD_CRC);
-        } else {
-          //si added otherwise did not seem to return data.
-          if (async && callback) callback(data);
-          return data;
-        }
 
-      case Utils.Constants.DEFLATED:
-        var inflater = new Methods.Inflater(compressedData);
+var possibleNames = ['BigInt64Array', 'BigUint64Array', 'Float32Array', 'Float64Array', 'Int16Array', 'Int32Array', 'Int8Array', 'Uint16Array', 'Uint32Array', 'Uint8Array', 'Uint8ClampedArray'];
+var g = typeof globalThis === 'undefined' ? global : globalThis;
 
-        if (!async) {
-          const result = inflater.inflate(data);
-          result.copy(data, 0);
+module.exports = function availableTypedArrays() {
+  var out = [];
 
-          if (!crc32OK(data)) {
-            throw new Error(Utils.Errors.BAD_CRC + " " + _entryName.toString());
-          }
+  for (var i = 0; i < possibleNames.length; i++) {
+    if (typeof g[possibleNames[i]] === 'function') {
+      out[out.length] = possibleNames[i];
+    }
+  }
 
-          return data;
-        } else {
-          inflater.inflateAsync(function (result) {
-            result.copy(result, 0);
+  return out;
+};
 
-            if (callback) {
-              if (!crc32OK(result)) {
-                callback(result, Utils.Errors.BAD_CRC); //si added error
-              } else {
-                callback(result);
-              }
-            }
-          });
-        }
+/***/ }),
 
-        break;
+/***/ "./node_modules/call-bind/callBound.js":
+/*!*********************************************!*\
+  !*** ./node_modules/call-bind/callBound.js ***!
+  \*********************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-      default:
-        if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD);
-        throw new Error(Utils.Errors.UNKNOWN_METHOD);
-    }
-  }
+"use strict";
 
-  function compress(
-  /*Boolean*/
-  async,
-  /*Function*/
-  callback) {
-    if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {
-      // no data set or the data wasn't changed to require recompression
-      if (async && callback) callback(getCompressedDataFromZip());
-      return getCompressedDataFromZip();
-    }
 
-    if (uncompressedData.length && !_isDirectory) {
-      var compressedData; // Local file header
+var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
 
-      switch (_entryHeader.method) {
-        case Utils.Constants.STORED:
-          _entryHeader.compressedSize = _entryHeader.size;
-          compressedData = Buffer.alloc(uncompressedData.length);
-          uncompressedData.copy(compressedData);
-          if (async && callback) callback(compressedData);
-          return compressedData;
+var callBind = __webpack_require__(/*! ./ */ "./node_modules/call-bind/index.js");
 
-        default:
-        case Utils.Constants.DEFLATED:
-          var deflater = new Methods.Deflater(uncompressedData);
+var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));
 
-          if (!async) {
-            var deflated = deflater.deflate();
-            _entryHeader.compressedSize = deflated.length;
-            return deflated;
-          } else {
-            deflater.deflateAsync(function (data) {
-              compressedData = Buffer.alloc(data.length);
-              _entryHeader.compressedSize = data.length;
-              data.copy(compressedData);
-              callback && callback(compressedData);
-            });
-          }
+module.exports = function callBoundIntrinsic(name, allowMissing) {
+  var intrinsic = GetIntrinsic(name, !!allowMissing);
 
-          deflater = null;
-          break;
-      }
-    } else if (async && callback) {
-      callback(Buffer.alloc(0));
-    } else {
-      return Buffer.alloc(0);
-    }
+  if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {
+    return callBind(intrinsic);
   }
 
-  function readUInt64LE(buffer, offset) {
-    return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset);
-  }
+  return intrinsic;
+};
 
-  function parseExtra(data) {
-    var offset = 0;
-    var signature, size, part;
+/***/ }),
 
-    while (offset < data.length) {
-      signature = data.readUInt16LE(offset);
-      offset += 2;
-      size = data.readUInt16LE(offset);
-      offset += 2;
-      part = data.slice(offset, offset + size);
-      offset += size;
+/***/ "./node_modules/call-bind/index.js":
+/*!*****************************************!*\
+  !*** ./node_modules/call-bind/index.js ***!
+  \*****************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-      if (Constants.ID_ZIP64 === signature) {
-        parseZip64ExtendedInformation(part);
-      }
-    }
-  } //Override header field values with values from the ZIP64 extra field
+"use strict";
 
 
-  function parseZip64ExtendedInformation(data) {
-    var size, compressedSize, offset, diskNumStart;
+var bind = __webpack_require__(/*! function-bind */ "./node_modules/function-bind/index.js");
 
-    if (data.length >= Constants.EF_ZIP64_SCOMP) {
-      size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);
+var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
 
-      if (_entryHeader.size === Constants.EF_ZIP64_OR_32) {
-        _entryHeader.size = size;
-      }
-    }
+var $apply = GetIntrinsic('%Function.prototype.apply%');
+var $call = GetIntrinsic('%Function.prototype.call%');
+var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);
+var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);
+var $defineProperty = GetIntrinsic('%Object.defineProperty%', true);
+var $max = GetIntrinsic('%Math.max%');
 
-    if (data.length >= Constants.EF_ZIP64_RHO) {
-      compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);
+if ($defineProperty) {
+  try {
+    $defineProperty({}, 'a', {
+      value: 1
+    });
+  } catch (e) {
+    // IE 8 has a broken defineProperty
+    $defineProperty = null;
+  }
+}
 
-      if (_entryHeader.compressedSize === Constants.EF_ZIP64_OR_32) {
-        _entryHeader.compressedSize = compressedSize;
-      }
-    }
+module.exports = function callBind(originalFunction) {
+  var func = $reflectApply(bind, $call, arguments);
 
-    if (data.length >= Constants.EF_ZIP64_DSN) {
-      offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);
+  if ($gOPD && $defineProperty) {
+    var desc = $gOPD(func, 'length');
 
-      if (_entryHeader.offset === Constants.EF_ZIP64_OR_32) {
-        _entryHeader.offset = offset;
-      }
+    if (desc.configurable) {
+      // original length, plus the receiver, minus any additional arguments (after the receiver)
+      $defineProperty(func, 'length', {
+        value: 1 + $max(0, originalFunction.length - (arguments.length - 1))
+      });
     }
+  }
 
-    if (data.length >= Constants.EF_ZIP64_DSN + 4) {
-      diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);
+  return func;
+};
 
-      if (_entryHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {
-        _entryHeader.diskNumStart = diskNumStart;
-      }
-    }
-  }
+var applyBind = function applyBind() {
+  return $reflectApply(bind, $apply, arguments);
+};
 
-  return {
-    get entryName() {
-      return _entryName.toString();
-    },
+if ($defineProperty) {
+  $defineProperty(module.exports, 'apply', {
+    value: applyBind
+  });
+} else {
+  module.exports.apply = applyBind;
+}
 
-    get rawEntryName() {
-      return _entryName;
-    },
+/***/ }),
 
-    set entryName(val) {
-      _entryName = Utils.toBuffer(val);
-      var lastChar = _entryName[_entryName.length - 1];
-      _isDirectory = lastChar === 47 || lastChar === 92;
-      _entryHeader.fileNameLength = _entryName.length;
-    },
+/***/ "./node_modules/charenc/charenc.js":
+/*!*****************************************!*\
+  !*** ./node_modules/charenc/charenc.js ***!
+  \*****************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
 
-    get extra() {
-      return _extra;
+var charenc = {
+  // UTF-8 encoding
+  utf8: {
+    // Convert a string to a byte array
+    stringToBytes: function (str) {
+      return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));
     },
+    // Convert a byte array to a string
+    bytesToString: function (bytes) {
+      return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));
+    }
+  },
+  // Binary encoding
+  bin: {
+    // Convert a string to a byte array
+    stringToBytes: function (str) {
+      for (var bytes = [], i = 0; i < str.length; i++) bytes.push(str.charCodeAt(i) & 0xFF);
 
-    set extra(val) {
-      _extra = val;
-      _entryHeader.extraLength = val.length;
-      parseExtra(val);
+      return bytes;
     },
+    // Convert a byte array to a string
+    bytesToString: function (bytes) {
+      for (var str = [], i = 0; i < bytes.length; i++) str.push(String.fromCharCode(bytes[i]));
 
-    get comment() {
-      return _comment.toString();
-    },
+      return str.join('');
+    }
+  }
+};
+module.exports = charenc;
 
-    set comment(val) {
-      _comment = Utils.toBuffer(val);
-      _entryHeader.commentLength = _comment.length;
-    },
+/***/ }),
 
-    get name() {
-      var n = _entryName.toString();
+/***/ "./node_modules/crypt/crypt.js":
+/*!*************************************!*\
+  !*** ./node_modules/crypt/crypt.js ***!
+  \*************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
 
-      return _isDirectory ? n.substr(n.length - 1).split("/").pop() : n.split("/").pop();
+(function () {
+  var base64map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
+      crypt = {
+    // Bit-wise rotation left
+    rotl: function (n, b) {
+      return n << b | n >>> 32 - b;
     },
-
-    get isDirectory() {
-      return _isDirectory;
+    // Bit-wise rotation right
+    rotr: function (n, b) {
+      return n << 32 - b | n >>> b;
     },
+    // Swap big-endian to little-endian and vice versa
+    endian: function (n) {
+      // If number given, swap endian
+      if (n.constructor == Number) {
+        return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;
+      } // Else, assume array and swap all items
 
-    getCompressedData: function () {
-      return compress(false, null);
-    },
-    getCompressedDataAsync: function (
-    /*Function*/
-    callback) {
-      compress(true, callback);
-    },
-    setData: function (value) {
-      uncompressedData = Utils.toBuffer(value);
 
-      if (!_isDirectory && uncompressedData.length) {
-        _entryHeader.size = uncompressedData.length;
-        _entryHeader.method = Utils.Constants.DEFLATED;
-        _entryHeader.crc = Utils.crc32(value);
-        _entryHeader.changed = true;
-      } else {
-        // folders and blank files should be stored
-        _entryHeader.method = Utils.Constants.STORED;
-      }
-    },
-    getData: function (pass) {
-      if (_entryHeader.changed) {
-        return uncompressedData;
-      } else {
-        return decompress(false, null, pass);
-      }
-    },
-    getDataAsync: function (
-    /*Function*/
-    callback, pass) {
-      if (_entryHeader.changed) {
-        callback(uncompressedData);
-      } else {
-        decompress(true, callback, pass);
-      }
-    },
+      for (var i = 0; i < n.length; i++) n[i] = crypt.endian(n[i]);
 
-    set attr(attr) {
-      _entryHeader.attr = attr;
+      return n;
     },
+    // Generate an array of any length of random bytes
+    randomBytes: function (n) {
+      for (var bytes = []; n > 0; n--) bytes.push(Math.floor(Math.random() * 256));
 
-    get attr() {
-      return _entryHeader.attr;
+      return bytes;
     },
+    // Convert a byte array to big-endian 32-bit words
+    bytesToWords: function (bytes) {
+      for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8) words[b >>> 5] |= bytes[i] << 24 - b % 32;
 
-    set header(
-    /*Buffer*/
-    data) {
-      _entryHeader.loadFromBinary(data);
+      return words;
     },
+    // Convert big-endian 32-bit words to a byte array
+    wordsToBytes: function (words) {
+      for (var bytes = [], b = 0; b < words.length * 32; b += 8) bytes.push(words[b >>> 5] >>> 24 - b % 32 & 0xFF);
 
-    get header() {
-      return _entryHeader;
+      return bytes;
     },
+    // Convert a byte array to a hex string
+    bytesToHex: function (bytes) {
+      for (var hex = [], i = 0; i < bytes.length; i++) {
+        hex.push((bytes[i] >>> 4).toString(16));
+        hex.push((bytes[i] & 0xF).toString(16));
+      }
 
-    packHeader: function () {
-      // 1. create header (buffer)
-      var header = _entryHeader.entryHeaderToBinary();
-
-      var addpos = Utils.Constants.CENHDR; // 2. add file name
-
-      _entryName.copy(header, addpos);
-
-      addpos += _entryName.length; // 3. add extra data
-
-      if (_entryHeader.extraLength) {
-        _extra.copy(header, addpos);
-
-        addpos += _entryHeader.extraLength;
-      } // 4. add file comment
+      return hex.join('');
+    },
+    // Convert a hex string to a byte array
+    hexToBytes: function (hex) {
+      for (var bytes = [], c = 0; c < hex.length; c += 2) bytes.push(parseInt(hex.substr(c, 2), 16));
 
+      return bytes;
+    },
+    // Convert a byte array to a base-64 string
+    bytesToBase64: function (bytes) {
+      for (var base64 = [], i = 0; i < bytes.length; i += 3) {
+        var triplet = bytes[i] << 16 | bytes[i + 1] << 8 | bytes[i + 2];
 
-      if (_entryHeader.commentLength) {
-        _comment.copy(header, addpos);
+        for (var j = 0; j < 4; j++) if (i * 8 + j * 6 <= bytes.length * 8) base64.push(base64map.charAt(triplet >>> 6 * (3 - j) & 0x3F));else base64.push('=');
       }
 
-      return header;
+      return base64.join('');
     },
-    toJSON: function () {
-      const bytes = function (nr) {
-        return "<" + (nr && nr.length + " bytes buffer" || "null") + ">";
-      };
+    // Convert a base-64 string to a byte array
+    base64ToBytes: function (base64) {
+      // Remove non-base-64 characters
+      base64 = base64.replace(/[^A-Z0-9+\/]/ig, '');
 
-      return {
-        entryName: this.entryName,
-        name: this.name,
-        comment: this.comment,
-        isDirectory: this.isDirectory,
-        header: _entryHeader.toJSON(),
-        compressedData: bytes(input),
-        data: bytes(uncompressedData)
-      };
-    },
-    toString: function () {
-      return JSON.stringify(this.toJSON(), null, "\t");
+      for (var bytes = [], i = 0, imod4 = 0; i < base64.length; imod4 = ++i % 4) {
+        if (imod4 == 0) continue;
+        bytes.push((base64map.indexOf(base64.charAt(i - 1)) & Math.pow(2, -2 * imod4 + 8) - 1) << imod4 * 2 | base64map.indexOf(base64.charAt(i)) >>> 6 - imod4 * 2);
+      }
+
+      return bytes;
     }
   };
-};
+  module.exports = crypt;
+})();
 
 /***/ }),
 
-/***/ "./node_modules/adm-zip/zipFile.js":
-/*!*****************************************!*\
-  !*** ./node_modules/adm-zip/zipFile.js ***!
-  \*****************************************/
+/***/ "./node_modules/csv-parse/lib/ResizeableBuffer.js":
+/*!********************************************************!*\
+  !*** ./node_modules/csv-parse/lib/ResizeableBuffer.js ***!
+  \********************************************************/
 /*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+/***/ (function(module, exports) {
 
-const ZipEntry = __webpack_require__(/*! ./zipEntry */ "./node_modules/adm-zip/zipEntry.js");
+class ResizeableBuffer {
+  constructor(size = 100) {
+    this.size = size;
+    this.length = 0;
+    this.buf = Buffer.alloc(size);
+  }
 
-const Headers = __webpack_require__(/*! ./headers */ "./node_modules/adm-zip/headers/index.js");
+  prepend(val) {
+    if (Buffer.isBuffer(val)) {
+      const length = this.length + val.length;
 
-const Utils = __webpack_require__(/*! ./util */ "./node_modules/adm-zip/util/index.js");
+      if (length >= this.size) {
+        this.resize();
 
-module.exports = function (
-/*Buffer|null*/
-inBuffer,
-/** object */
-options) {
-  var entryList = [],
-      entryTable = {},
-      _comment = Buffer.alloc(0),
-      mainHeader = new Headers.MainHeader(),
-      loadedEntries = false; // assign options
+        if (length >= this.size) {
+          throw Error('INVALID_BUFFER_STATE');
+        }
+      }
 
+      const buf = this.buf;
+      this.buf = Buffer.alloc(this.size);
+      val.copy(this.buf, 0);
+      buf.copy(this.buf, val.length);
+      this.length += val.length;
+    } else {
+      const length = this.length++;
 
-  const opts = Object.assign(Object.create(null), options);
-  const noSort = opts.noSort;
+      if (length === this.size) {
+        this.resize();
+      }
 
-  if (inBuffer) {
-    // is a memory buffer
-    readMainHeader(opts.readEntries);
-  } else {
-    // none. is a new file
-    loadedEntries = true;
+      const buf = this.clone();
+      this.buf[0] = val;
+      buf.copy(this.buf, 1, 0, length);
+    }
   }
 
-  function iterateEntries(callback) {
-    const totalEntries = mainHeader.diskEntries; // total number of entries
-
-    let index = mainHeader.offset; // offset of first CEN header
+  append(val) {
+    const length = this.length++;
 
-    for (let i = 0; i < totalEntries; i++) {
-      let tmp = index;
-      const entry = new ZipEntry(inBuffer);
-      entry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR);
-      entry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength);
-      index += entry.header.entryHeaderSize;
-      callback(entry);
+    if (length === this.size) {
+      this.resize();
     }
+
+    this.buf[length] = val;
   }
 
-  function readEntries() {
-    loadedEntries = true;
-    entryTable = {};
-    entryList = new Array(mainHeader.diskEntries); // total number of entries
+  clone() {
+    return Buffer.from(this.buf.slice(0, this.length));
+  }
 
-    var index = mainHeader.offset; // offset of first CEN header
+  resize() {
+    const length = this.length;
+    this.size = this.size * 2;
+    const buf = Buffer.alloc(this.size);
+    this.buf.copy(buf, 0, 0, length);
+    this.buf = buf;
+  }
 
-    for (var i = 0; i < entryList.length; i++) {
-      var tmp = index,
-          entry = new ZipEntry(inBuffer);
-      entry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR);
-      entry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength);
+  toString(encoding) {
+    if (encoding) {
+      return this.buf.slice(0, this.length).toString(encoding);
+    } else {
+      return Uint8Array.prototype.slice.call(this.buf.slice(0, this.length));
+    }
+  }
 
-      if (entry.header.extraLength) {
-        entry.extra = inBuffer.slice(tmp, tmp += entry.header.extraLength);
-      }
+  toJSON() {
+    return this.toString('utf8');
+  }
 
-      if (entry.header.commentLength) entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength);
-      index += entry.header.entryHeaderSize;
-      entryList[i] = entry;
-      entryTable[entry.entryName] = entry;
-    }
+  reset() {
+    this.length = 0;
   }
 
-  function readMainHeader(
-  /*Boolean*/
-  readNow) {
-    var i = inBuffer.length - Utils.Constants.ENDHDR,
-        // END header size
-    max = Math.max(0, i - 0xffff),
-        // 0xFFFF is the max zip file comment length
-    n = max,
-        endStart = inBuffer.length,
-        endOffset = -1,
-        // Start offset of the END header
-    commentEnd = 0;
+}
 
-    for (i; i >= n; i--) {
-      if (inBuffer[i] !== 0x50) continue; // quick check that the byte is 'P'
+module.exports = ResizeableBuffer;
 
-      if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) {
-        // "PK\005\006"
-        endOffset = i;
-        commentEnd = i;
-        endStart = i + Utils.Constants.ENDHDR; // We already found a regular signature, let's look just a bit further to check if there's any zip64 signature
+/***/ }),
 
-        n = i - Utils.Constants.END64HDR;
-        continue;
-      }
+/***/ "./node_modules/csv-parse/lib/index.js":
+/*!*********************************************!*\
+  !*** ./node_modules/csv-parse/lib/index.js ***!
+  \*********************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-      if (inBuffer.readUInt32LE(i) === Utils.Constants.END64SIG) {
-        // Found a zip64 signature, let's continue reading the whole zip64 record
-        n = max;
-        continue;
-      }
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
 
-      if (inBuffer.readUInt32LE(i) === Utils.Constants.ZIP64SIG) {
-        // Found the zip64 record, let's determine it's size
-        endOffset = i;
-        endStart = i + Utils.readBigUInt64LE(inBuffer, i + Utils.Constants.ZIP64SIZE) + Utils.Constants.ZIP64LEAD;
-        break;
-      }
-    }
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
 
-    if (!~endOffset) throw new Error(Utils.Errors.INVALID_FORMAT);
-    mainHeader.loadFromBinary(inBuffer.slice(endOffset, endStart));
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
 
-    if (mainHeader.commentLength) {
-      _comment = inBuffer.slice(commentEnd + Utils.Constants.ENDHDR);
-    }
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
 
-    if (readNow) readEntries();
-  }
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
 
-  function sortEntries() {
-    if (entryList.length > 1 && !noSort) {
-      entryList.sort((a, b) => a.entryName.toLowerCase().localeCompare(b.entryName.toLowerCase()));
-    }
-  }
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
 
-  return {
-    /**
-     * Returns an array of ZipEntry objects existent in the current opened archive
-     * @return Array
-     */
-    get entries() {
-      if (!loadedEntries) {
-        readEntries();
-      }
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
 
-      return entryList;
-    },
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
 
-    /**
-     * Archive comment
-     * @return {String}
-     */
-    get comment() {
-      return _comment.toString();
-    },
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
 
-    set comment(val) {
-      _comment = Utils.toBuffer(val);
-      mainHeader.commentLength = _comment.length;
-    },
+/*
+CSV Parse
 
-    getEntryCount: function () {
-      if (!loadedEntries) {
-        return mainHeader.diskEntries;
-      }
+Please look at the [project documentation](https://csv.js.org/parse/) for
+additional information.
+*/
+const _require = __webpack_require__(/*! stream */ "stream"),
+      Transform = _require.Transform;
 
-      return entryList.length;
-    },
-    forEach: function (callback) {
-      if (!loadedEntries) {
-        iterateEntries(callback);
-        return;
-      }
+const ResizeableBuffer = __webpack_require__(/*! ./ResizeableBuffer */ "./node_modules/csv-parse/lib/ResizeableBuffer.js"); // white space characters
+// https://en.wikipedia.org/wiki/Whitespace_character
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Character_Classes#Types
+// \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff
 
-      entryList.forEach(callback);
-    },
 
-    /**
-     * Returns a reference to the entry with the given name or null if entry is inexistent
-     *
-     * @param entryName
-     * @return ZipEntry
-     */
-    getEntry: function (
-    /*String*/
-    entryName) {
-      if (!loadedEntries) {
-        readEntries();
-      }
+const tab = 9;
+const nl = 10; // \n, 0x0A in hexadecimal, 10 in decimal
 
-      return entryTable[entryName] || null;
-    },
+const np = 12;
+const cr = 13; // \r, 0x0D in hexadécimal, 13 in decimal
 
-    /**
-     * Adds the given entry to the entry list
-     *
-     * @param entry
-     */
-    setEntry: function (
-    /*ZipEntry*/
-    entry) {
-      if (!loadedEntries) {
-        readEntries();
-      }
+const space = 32;
+const boms = {
+  // Note, the following are equals:
+  // Buffer.from("\ufeff")
+  // Buffer.from([239, 187, 191])
+  // Buffer.from('EFBBBF', 'hex')
+  'utf8': Buffer.from([239, 187, 191]),
+  // Note, the following are equals:
+  // Buffer.from "\ufeff", 'utf16le
+  // Buffer.from([255, 254])
+  'utf16le': Buffer.from([255, 254])
+};
 
-      entryList.push(entry);
-      entryTable[entry.entryName] = entry;
-      mainHeader.totalEntries = entryList.length;
-    },
+class Parser extends Transform {
+  constructor(opts = {}) {
+    super(_objectSpread(_objectSpread(_objectSpread({}, {
+      readableObjectMode: true
+    }), opts), {}, {
+      encoding: null
+    }));
+    this.__originalOptions = opts;
 
-    /**
-     * Removes the entry with the given name from the entry list.
-     *
-     * If the entry is a directory, then all nested files and directories will be removed
-     * @param entryName
-     */
-    deleteEntry: function (
-    /*String*/
-    entryName) {
-      if (!loadedEntries) {
-        readEntries();
-      }
+    this.__normalizeOptions(opts);
+  }
 
-      var entry = entryTable[entryName];
+  __normalizeOptions(opts) {
+    const options = {}; // Merge with user options
 
-      if (entry && entry.isDirectory) {
-        var _self = this;
+    for (let opt in opts) {
+      options[underscore(opt)] = opts[opt];
+    } // Normalize option `encoding`
+    // Note: defined first because other options depends on it
+    // to convert chars/strings into buffers.
 
-        this.getEntryChildren(entry).forEach(function (child) {
-          if (child.entryName !== entryName) {
-            _self.deleteEntry(child.entryName);
-          }
-        });
-      }
 
-      entryList.splice(entryList.indexOf(entry), 1);
-      delete entryTable[entryName];
-      mainHeader.totalEntries = entryList.length;
-    },
+    if (options.encoding === undefined || options.encoding === true) {
+      options.encoding = 'utf8';
+    } else if (options.encoding === null || options.encoding === false) {
+      options.encoding = null;
+    } else if (typeof options.encoding !== 'string' && options.encoding !== null) {
+      throw new CsvError('CSV_INVALID_OPTION_ENCODING', ['Invalid option encoding:', 'encoding must be a string or null to return a buffer,', `got ${JSON.stringify(options.encoding)}`], options);
+    } // Normalize option `bom`
 
-    /**
-     *  Iterates and returns all nested files and directories of the given entry
-     *
-     * @param entry
-     * @return Array
-     */
-    getEntryChildren: function (
-    /*ZipEntry*/
-    entry) {
-      if (!loadedEntries) {
-        readEntries();
-      }
 
-      if (entry && entry.isDirectory) {
-        const list = [];
-        const name = entry.entryName;
-        const len = name.length;
-        entryList.forEach(function (zipEntry) {
-          if (zipEntry.entryName.substr(0, len) === name) {
-            list.push(zipEntry);
-          }
-        });
-        return list;
-      }
+    if (options.bom === undefined || options.bom === null || options.bom === false) {
+      options.bom = false;
+    } else if (options.bom !== true) {
+      throw new CsvError('CSV_INVALID_OPTION_BOM', ['Invalid option bom:', 'bom must be true,', `got ${JSON.stringify(options.bom)}`], options);
+    } // Normalize option `cast`
 
-      return [];
-    },
 
-    /**
-     * Returns the zip file
-     *
-     * @return Buffer
-     */
-    compressToBuffer: function () {
-      if (!loadedEntries) {
-        readEntries();
-      }
+    let fnCastField = null;
 
-      sortEntries();
-      const dataBlock = [];
-      const entryHeaders = [];
-      let totalSize = 0;
-      let dindex = 0;
-      mainHeader.size = 0;
-      mainHeader.offset = 0;
+    if (options.cast === undefined || options.cast === null || options.cast === false || options.cast === '') {
+      options.cast = undefined;
+    } else if (typeof options.cast === 'function') {
+      fnCastField = options.cast;
+      options.cast = true;
+    } else if (options.cast !== true) {
+      throw new CsvError('CSV_INVALID_OPTION_CAST', ['Invalid option cast:', 'cast must be true or a function,', `got ${JSON.stringify(options.cast)}`], options);
+    } // Normalize option `cast_date`
 
-      for (const entry of entryList) {
-        // compress data and set local and entry header accordingly. Reason why is called first
-        const compressedData = entry.getCompressedData(); // 1. construct data header
 
-        entry.header.offset = dindex;
-        const dataHeader = entry.header.dataHeaderToBinary();
-        const entryNameLen = entry.rawEntryName.length; // 1.2. postheader - data after data header
+    if (options.cast_date === undefined || options.cast_date === null || options.cast_date === false || options.cast_date === '') {
+      options.cast_date = false;
+    } else if (options.cast_date === true) {
+      options.cast_date = function (value) {
+        const date = Date.parse(value);
+        return !isNaN(date) ? new Date(date) : value;
+      };
+    } else {
+      throw new CsvError('CSV_INVALID_OPTION_CAST_DATE', ['Invalid option cast_date:', 'cast_date must be true or a function,', `got ${JSON.stringify(options.cast_date)}`], options);
+    } // Normalize option `columns`
 
-        const postHeader = Buffer.alloc(entryNameLen + entry.extra.length);
-        entry.rawEntryName.copy(postHeader, 0);
-        postHeader.copy(entry.extra, entryNameLen); // 2. offsets
 
-        const dataLength = dataHeader.length + postHeader.length + compressedData.length;
-        dindex += dataLength; // 3. store values in sequence
+    let fnFirstLineToHeaders = null;
 
-        dataBlock.push(dataHeader);
-        dataBlock.push(postHeader);
-        dataBlock.push(compressedData); // 4. construct entry header
+    if (options.columns === true) {
+      // Fields in the first line are converted as-is to columns
+      fnFirstLineToHeaders = undefined;
+    } else if (typeof options.columns === 'function') {
+      fnFirstLineToHeaders = options.columns;
+      options.columns = true;
+    } else if (Array.isArray(options.columns)) {
+      options.columns = normalizeColumnsArray(options.columns);
+    } else if (options.columns === undefined || options.columns === null || options.columns === false) {
+      options.columns = false;
+    } else {
+      throw new CsvError('CSV_INVALID_OPTION_COLUMNS', ['Invalid option columns:', 'expect an array, a function or true,', `got ${JSON.stringify(options.columns)}`], options);
+    } // Normalize option `columns_duplicates_to_array`
 
-        const entryHeader = entry.packHeader();
-        entryHeaders.push(entryHeader); // 5. update main header
 
-        mainHeader.size += entryHeader.length;
-        totalSize += dataLength + entryHeader.length;
-      }
+    if (options.columns_duplicates_to_array === undefined || options.columns_duplicates_to_array === null || options.columns_duplicates_to_array === false) {
+      options.columns_duplicates_to_array = false;
+    } else if (options.columns_duplicates_to_array !== true) {
+      throw new CsvError('CSV_INVALID_OPTION_COLUMNS_DUPLICATES_TO_ARRAY', ['Invalid option columns_duplicates_to_array:', 'expect an boolean,', `got ${JSON.stringify(options.columns_duplicates_to_array)}`], options);
+    } else if (options.columns === false) {
+      throw new CsvError('CSV_INVALID_OPTION_COLUMNS_DUPLICATES_TO_ARRAY', ['Invalid option columns_duplicates_to_array:', 'the `columns` mode must be activated.'], options);
+    } // Normalize option `comment`
 
-      totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length
-      // point to end of data and beginning of central directory first record
 
-      mainHeader.offset = dindex;
-      dindex = 0;
-      const outBuffer = Buffer.alloc(totalSize); // write data blocks
+    if (options.comment === undefined || options.comment === null || options.comment === false || options.comment === '') {
+      options.comment = null;
+    } else {
+      if (typeof options.comment === 'string') {
+        options.comment = Buffer.from(options.comment, options.encoding);
+      }
 
-      for (const content of dataBlock) {
-        content.copy(outBuffer, dindex);
-        dindex += content.length;
-      } // write central directory entries
+      if (!Buffer.isBuffer(options.comment)) {
+        throw new CsvError('CSV_INVALID_OPTION_COMMENT', ['Invalid option comment:', 'comment must be a buffer or a string,', `got ${JSON.stringify(options.comment)}`], options);
+      }
+    } // Normalize option `delimiter`
 
 
-      for (const content of entryHeaders) {
-        content.copy(outBuffer, dindex);
-        dindex += content.length;
-      } // write main header
+    const delimiter_json = JSON.stringify(options.delimiter);
+    if (!Array.isArray(options.delimiter)) options.delimiter = [options.delimiter];
 
+    if (options.delimiter.length === 0) {
+      throw new CsvError('CSV_INVALID_OPTION_DELIMITER', ['Invalid option delimiter:', 'delimiter must be a non empty string or buffer or array of string|buffer,', `got ${delimiter_json}`], options);
+    }
 
-      const mh = mainHeader.toBinary();
+    options.delimiter = options.delimiter.map(function (delimiter) {
+      if (delimiter === undefined || delimiter === null || delimiter === false) {
+        return Buffer.from(',', options.encoding);
+      }
 
-      if (_comment) {
-        _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment
+      if (typeof delimiter === 'string') {
+        delimiter = Buffer.from(delimiter, options.encoding);
+      }
 
+      if (!Buffer.isBuffer(delimiter) || delimiter.length === 0) {
+        throw new CsvError('CSV_INVALID_OPTION_DELIMITER', ['Invalid option delimiter:', 'delimiter must be a non empty string or buffer or array of string|buffer,', `got ${delimiter_json}`], options);
       }
 
-      mh.copy(outBuffer, dindex);
-      return outBuffer;
-    },
-    toAsyncBuffer: function (
-    /*Function*/
-    onSuccess,
-    /*Function*/
-    onFail,
-    /*Function*/
-    onItemStart,
-    /*Function*/
-    onItemEnd) {
-      try {
-        if (!loadedEntries) {
-          readEntries();
-        }
+      return delimiter;
+    }); // Normalize option `escape`
 
-        sortEntries();
-        const dataBlock = [];
-        const entryHeaders = [];
-        let totalSize = 0;
-        let dindex = 0;
-        mainHeader.size = 0;
-        mainHeader.offset = 0;
+    if (options.escape === undefined || options.escape === true) {
+      options.escape = Buffer.from('"', options.encoding);
+    } else if (typeof options.escape === 'string') {
+      options.escape = Buffer.from(options.escape, options.encoding);
+    } else if (options.escape === null || options.escape === false) {
+      options.escape = null;
+    }
 
-        const compress2Buffer = function (entryLists) {
-          if (entryLists.length) {
-            const entry = entryLists.pop();
-            const name = entry.entryName + entry.extra.toString();
-            if (onItemStart) onItemStart(name);
-            entry.getCompressedDataAsync(function (compressedData) {
-              if (onItemEnd) onItemEnd(name);
-              entry.header.offset = dindex; // data header
+    if (options.escape !== null) {
+      if (!Buffer.isBuffer(options.escape)) {
+        throw new Error(`Invalid Option: escape must be a buffer, a string or a boolean, got ${JSON.stringify(options.escape)}`);
+      }
+    } // Normalize option `from`
 
-              const dataHeader = entry.header.dataHeaderToBinary();
-              const postHeader = Buffer.alloc(name.length, name);
-              const dataLength = dataHeader.length + postHeader.length + compressedData.length;
-              dindex += dataLength;
-              dataBlock.push(dataHeader);
-              dataBlock.push(postHeader);
-              dataBlock.push(compressedData);
-              const entryHeader = entry.packHeader();
-              entryHeaders.push(entryHeader);
-              mainHeader.size += entryHeader.length;
-              totalSize += dataLength + entryHeader.length;
-              compress2Buffer(entryLists);
-            });
-          } else {
-            totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length
-            // point to end of data and beginning of central directory first record
 
-            mainHeader.offset = dindex;
-            dindex = 0;
-            const outBuffer = Buffer.alloc(totalSize);
-            dataBlock.forEach(function (content) {
-              content.copy(outBuffer, dindex); // write data blocks
+    if (options.from === undefined || options.from === null) {
+      options.from = 1;
+    } else {
+      if (typeof options.from === 'string' && /\d+/.test(options.from)) {
+        options.from = parseInt(options.from);
+      }
 
-              dindex += content.length;
-            });
-            entryHeaders.forEach(function (content) {
-              content.copy(outBuffer, dindex); // write central directory entries
+      if (Number.isInteger(options.from)) {
+        if (options.from < 0) {
+          throw new Error(`Invalid Option: from must be a positive integer, got ${JSON.stringify(opts.from)}`);
+        }
+      } else {
+        throw new Error(`Invalid Option: from must be an integer, got ${JSON.stringify(options.from)}`);
+      }
+    } // Normalize option `from_line`
 
-              dindex += content.length;
-            });
-            const mh = mainHeader.toBinary();
 
-            if (_comment) {
-              _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment
+    if (options.from_line === undefined || options.from_line === null) {
+      options.from_line = 1;
+    } else {
+      if (typeof options.from_line === 'string' && /\d+/.test(options.from_line)) {
+        options.from_line = parseInt(options.from_line);
+      }
 
-            }
+      if (Number.isInteger(options.from_line)) {
+        if (options.from_line <= 0) {
+          throw new Error(`Invalid Option: from_line must be a positive integer greater than 0, got ${JSON.stringify(opts.from_line)}`);
+        }
+      } else {
+        throw new Error(`Invalid Option: from_line must be an integer, got ${JSON.stringify(opts.from_line)}`);
+      }
+    } // Normalize options `ignore_last_delimiters`
 
-            mh.copy(outBuffer, dindex); // write main header
 
-            onSuccess(outBuffer);
-          }
-        };
+    if (options.ignore_last_delimiters === undefined || options.ignore_last_delimiters === null) {
+      options.ignore_last_delimiters = false;
+    } else if (typeof options.ignore_last_delimiters === 'number') {
+      options.ignore_last_delimiters = Math.floor(options.ignore_last_delimiters);
 
-        compress2Buffer(entryList);
-      } catch (e) {
-        onFail(e);
+      if (options.ignore_last_delimiters === 0) {
+        options.ignore_last_delimiters = false;
       }
+    } else if (typeof options.ignore_last_delimiters !== 'boolean') {
+      throw new CsvError('CSV_INVALID_OPTION_IGNORE_LAST_DELIMITERS', ['Invalid option `ignore_last_delimiters`:', 'the value must be a boolean value or an integer,', `got ${JSON.stringify(options.ignore_last_delimiters)}`], options);
     }
-  };
-};
-
-/***/ }),
-
-/***/ "./node_modules/array.prototype.filter/implementation.js":
-/*!***************************************************************!*\
-  !*** ./node_modules/array.prototype.filter/implementation.js ***!
-  \***************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
 
-"use strict";
+    if (options.ignore_last_delimiters === true && options.columns === false) {
+      throw new CsvError('CSV_IGNORE_LAST_DELIMITERS_REQUIRES_COLUMNS', ['The option `ignore_last_delimiters`', 'requires the activation of the `columns` option'], options);
+    } // Normalize option `info`
 
 
-var ArraySpeciesCreate = __webpack_require__(/*! es-abstract/2020/ArraySpeciesCreate */ "./node_modules/es-abstract/2020/ArraySpeciesCreate.js");
+    if (options.info === undefined || options.info === null || options.info === false) {
+      options.info = false;
+    } else if (options.info !== true) {
+      throw new Error(`Invalid Option: info must be true, got ${JSON.stringify(options.info)}`);
+    } // Normalize option `max_record_size`
 
-var Call = __webpack_require__(/*! es-abstract/2020/Call */ "./node_modules/es-abstract/2020/Call.js");
 
-var CreateDataPropertyOrThrow = __webpack_require__(/*! es-abstract/2020/CreateDataPropertyOrThrow */ "./node_modules/es-abstract/2020/CreateDataPropertyOrThrow.js");
+    if (options.max_record_size === undefined || options.max_record_size === null || options.max_record_size === false) {
+      options.max_record_size = 0;
+    } else if (Number.isInteger(options.max_record_size) && options.max_record_size >= 0) {// Great, nothing to do
+    } else if (typeof options.max_record_size === 'string' && /\d+/.test(options.max_record_size)) {
+      options.max_record_size = parseInt(options.max_record_size);
+    } else {
+      throw new Error(`Invalid Option: max_record_size must be a positive integer, got ${JSON.stringify(options.max_record_size)}`);
+    } // Normalize option `objname`
 
-var Get = __webpack_require__(/*! es-abstract/2020/Get */ "./node_modules/es-abstract/2020/Get.js");
 
-var HasProperty = __webpack_require__(/*! es-abstract/2020/HasProperty */ "./node_modules/es-abstract/2020/HasProperty.js");
+    if (options.objname === undefined || options.objname === null || options.objname === false) {
+      options.objname = undefined;
+    } else if (Buffer.isBuffer(options.objname)) {
+      if (options.objname.length === 0) {
+        throw new Error(`Invalid Option: objname must be a non empty buffer`);
+      }
 
-var IsCallable = __webpack_require__(/*! es-abstract/2020/IsCallable */ "./node_modules/es-abstract/2020/IsCallable.js");
+      if (options.encoding === null) {// Don't call `toString`, leave objname as a buffer
+      } else {
+        options.objname = options.objname.toString(options.encoding);
+      }
+    } else if (typeof options.objname === 'string') {
+      if (options.objname.length === 0) {
+        throw new Error(`Invalid Option: objname must be a non empty string`);
+      } // Great, nothing to do
 
-var LengthOfArrayLike = __webpack_require__(/*! es-abstract/2020/LengthOfArrayLike */ "./node_modules/es-abstract/2020/LengthOfArrayLike.js");
+    } else {
+      throw new Error(`Invalid Option: objname must be a string or a buffer, got ${options.objname}`);
+    } // Normalize option `on_record`
 
-var ToBoolean = __webpack_require__(/*! es-abstract/2020/ToBoolean */ "./node_modules/es-abstract/2020/ToBoolean.js");
 
-var ToObject = __webpack_require__(/*! es-abstract/2020/ToObject */ "./node_modules/es-abstract/2020/ToObject.js");
+    if (options.on_record === undefined || options.on_record === null) {
+      options.on_record = undefined;
+    } else if (typeof options.on_record !== 'function') {
+      throw new CsvError('CSV_INVALID_OPTION_ON_RECORD', ['Invalid option `on_record`:', 'expect a function,', `got ${JSON.stringify(options.on_record)}`], options);
+    } // Normalize option `quote`
 
-var ToString = __webpack_require__(/*! es-abstract/2020/ToString */ "./node_modules/es-abstract/2020/ToString.js");
 
-var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
+    if (options.quote === null || options.quote === false || options.quote === '') {
+      options.quote = null;
+    } else {
+      if (options.quote === undefined || options.quote === true) {
+        options.quote = Buffer.from('"', options.encoding);
+      } else if (typeof options.quote === 'string') {
+        options.quote = Buffer.from(options.quote, options.encoding);
+      }
 
-var isString = __webpack_require__(/*! is-string */ "./node_modules/is-string/index.js"); // Check failure of by-index access of string characters (IE < 9) and failure of `0 in boxedString` (Rhino)
+      if (!Buffer.isBuffer(options.quote)) {
+        throw new Error(`Invalid Option: quote must be a buffer or a string, got ${JSON.stringify(options.quote)}`);
+      }
+    } // Normalize option `raw`
 
 
-var boxedString = Object('a');
-var splitString = boxedString[0] !== 'a' || !(0 in boxedString);
-var strSplit = callBound('String.prototype.split');
+    if (options.raw === undefined || options.raw === null || options.raw === false) {
+      options.raw = false;
+    } else if (options.raw !== true) {
+      throw new Error(`Invalid Option: raw must be true, got ${JSON.stringify(options.raw)}`);
+    } // Normalize option `record_delimiter`
 
-module.exports = function filter(callbackfn) {
-  var O = ToObject(this);
-  var self = splitString && isString(O) ? strSplit(O, '') : O;
-  var len = LengthOfArrayLike(self); // If no callback function or if callback is not a callable function
 
-  if (!IsCallable(callbackfn)) {
-    throw new TypeError('Array.prototype.filter callback must be a function');
-  }
+    if (!options.record_delimiter) {
+      options.record_delimiter = [];
+    } else if (!Array.isArray(options.record_delimiter)) {
+      options.record_delimiter = [options.record_delimiter];
+    }
 
-  var thisArg;
+    options.record_delimiter = options.record_delimiter.map(function (rd) {
+      if (typeof rd === 'string') {
+        rd = Buffer.from(rd, options.encoding);
+      }
 
-  if (arguments.length > 1) {
-    thisArg = arguments[1];
-  }
+      return rd;
+    }); // Normalize option `relax`
 
-  var A = ArraySpeciesCreate(O, 0);
-  var k = 0;
-  var to = 0;
+    if (typeof options.relax === 'boolean') {// Great, nothing to do
+    } else if (options.relax === undefined || options.relax === null) {
+      options.relax = false;
+    } else {
+      throw new Error(`Invalid Option: relax must be a boolean, got ${JSON.stringify(options.relax)}`);
+    } // Normalize option `relax_column_count`
 
-  while (k < len) {
-    var Pk = ToString(k);
-    var kPresent = HasProperty(O, Pk);
 
-    if (kPresent) {
-      var kValue = Get(O, Pk);
-      var selected = ToBoolean(Call(callbackfn, thisArg, [kValue, k, O]));
+    if (typeof options.relax_column_count === 'boolean') {// Great, nothing to do
+    } else if (options.relax_column_count === undefined || options.relax_column_count === null) {
+      options.relax_column_count = false;
+    } else {
+      throw new Error(`Invalid Option: relax_column_count must be a boolean, got ${JSON.stringify(options.relax_column_count)}`);
+    }
 
-      if (selected) {
-        CreateDataPropertyOrThrow(A, ToString(to), kValue);
-        to += 1;
-      }
+    if (typeof options.relax_column_count_less === 'boolean') {// Great, nothing to do
+    } else if (options.relax_column_count_less === undefined || options.relax_column_count_less === null) {
+      options.relax_column_count_less = false;
+    } else {
+      throw new Error(`Invalid Option: relax_column_count_less must be a boolean, got ${JSON.stringify(options.relax_column_count_less)}`);
     }
 
-    k += 1;
-  }
+    if (typeof options.relax_column_count_more === 'boolean') {// Great, nothing to do
+    } else if (options.relax_column_count_more === undefined || options.relax_column_count_more === null) {
+      options.relax_column_count_more = false;
+    } else {
+      throw new Error(`Invalid Option: relax_column_count_more must be a boolean, got ${JSON.stringify(options.relax_column_count_more)}`);
+    } // Normalize option `skip_empty_lines`
 
-  return A;
-};
 
-/***/ }),
+    if (typeof options.skip_empty_lines === 'boolean') {// Great, nothing to do
+    } else if (options.skip_empty_lines === undefined || options.skip_empty_lines === null) {
+      options.skip_empty_lines = false;
+    } else {
+      throw new Error(`Invalid Option: skip_empty_lines must be a boolean, got ${JSON.stringify(options.skip_empty_lines)}`);
+    } // Normalize option `skip_lines_with_empty_values`
 
-/***/ "./node_modules/array.prototype.filter/index.js":
-/*!******************************************************!*\
-  !*** ./node_modules/array.prototype.filter/index.js ***!
-  \******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
 
-"use strict";
+    if (typeof options.skip_lines_with_empty_values === 'boolean') {// Great, nothing to do
+    } else if (options.skip_lines_with_empty_values === undefined || options.skip_lines_with_empty_values === null) {
+      options.skip_lines_with_empty_values = false;
+    } else {
+      throw new Error(`Invalid Option: skip_lines_with_empty_values must be a boolean, got ${JSON.stringify(options.skip_lines_with_empty_values)}`);
+    } // Normalize option `skip_lines_with_error`
 
 
-var define = __webpack_require__(/*! define-properties */ "./node_modules/define-properties/index.js");
+    if (typeof options.skip_lines_with_error === 'boolean') {// Great, nothing to do
+    } else if (options.skip_lines_with_error === undefined || options.skip_lines_with_error === null) {
+      options.skip_lines_with_error = false;
+    } else {
+      throw new Error(`Invalid Option: skip_lines_with_error must be a boolean, got ${JSON.stringify(options.skip_lines_with_error)}`);
+    } // Normalize option `rtrim`
 
-var RequireObjectCoercible = __webpack_require__(/*! es-abstract/2020/RequireObjectCoercible */ "./node_modules/es-abstract/2020/RequireObjectCoercible.js");
 
-var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
+    if (options.rtrim === undefined || options.rtrim === null || options.rtrim === false) {
+      options.rtrim = false;
+    } else if (options.rtrim !== true) {
+      throw new Error(`Invalid Option: rtrim must be a boolean, got ${JSON.stringify(options.rtrim)}`);
+    } // Normalize option `ltrim`
 
-var implementation = __webpack_require__(/*! ./implementation */ "./node_modules/array.prototype.filter/implementation.js");
 
-var getPolyfill = __webpack_require__(/*! ./polyfill */ "./node_modules/array.prototype.filter/polyfill.js");
+    if (options.ltrim === undefined || options.ltrim === null || options.ltrim === false) {
+      options.ltrim = false;
+    } else if (options.ltrim !== true) {
+      throw new Error(`Invalid Option: ltrim must be a boolean, got ${JSON.stringify(options.ltrim)}`);
+    } // Normalize option `trim`
 
-var polyfill = getPolyfill();
 
-var shim = __webpack_require__(/*! ./shim */ "./node_modules/array.prototype.filter/shim.js");
+    if (options.trim === undefined || options.trim === null || options.trim === false) {
+      options.trim = false;
+    } else if (options.trim !== true) {
+      throw new Error(`Invalid Option: trim must be a boolean, got ${JSON.stringify(options.trim)}`);
+    } // Normalize options `trim`, `ltrim` and `rtrim`
 
-var $slice = callBound('Array.prototype.slice'); // eslint-disable-next-line no-unused-vars
 
-var bound = function filter(array, callbackfn) {
-  RequireObjectCoercible(array);
-  return polyfill.apply(array, $slice(arguments, 1));
-};
+    if (options.trim === true && opts.ltrim !== false) {
+      options.ltrim = true;
+    } else if (options.ltrim !== true) {
+      options.ltrim = false;
+    }
 
-define(bound, {
-  getPolyfill: getPolyfill,
-  implementation: implementation,
-  shim: shim
-});
-module.exports = bound;
+    if (options.trim === true && opts.rtrim !== false) {
+      options.rtrim = true;
+    } else if (options.rtrim !== true) {
+      options.rtrim = false;
+    } // Normalize option `to`
 
-/***/ }),
 
-/***/ "./node_modules/array.prototype.filter/polyfill.js":
-/*!*********************************************************!*\
-  !*** ./node_modules/array.prototype.filter/polyfill.js ***!
-  \*********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+    if (options.to === undefined || options.to === null) {
+      options.to = -1;
+    } else {
+      if (typeof options.to === 'string' && /\d+/.test(options.to)) {
+        options.to = parseInt(options.to);
+      }
 
-"use strict";
+      if (Number.isInteger(options.to)) {
+        if (options.to <= 0) {
+          throw new Error(`Invalid Option: to must be a positive integer greater than 0, got ${JSON.stringify(opts.to)}`);
+        }
+      } else {
+        throw new Error(`Invalid Option: to must be an integer, got ${JSON.stringify(opts.to)}`);
+      }
+    } // Normalize option `to_line`
 
 
-var arrayMethodBoxesProperly = __webpack_require__(/*! es-array-method-boxes-properly */ "./node_modules/es-array-method-boxes-properly/index.js");
+    if (options.to_line === undefined || options.to_line === null) {
+      options.to_line = -1;
+    } else {
+      if (typeof options.to_line === 'string' && /\d+/.test(options.to_line)) {
+        options.to_line = parseInt(options.to_line);
+      }
 
-var implementation = __webpack_require__(/*! ./implementation */ "./node_modules/array.prototype.filter/implementation.js");
+      if (Number.isInteger(options.to_line)) {
+        if (options.to_line <= 0) {
+          throw new Error(`Invalid Option: to_line must be a positive integer greater than 0, got ${JSON.stringify(opts.to_line)}`);
+        }
+      } else {
+        throw new Error(`Invalid Option: to_line must be an integer, got ${JSON.stringify(opts.to_line)}`);
+      }
+    }
 
-module.exports = function getPolyfill() {
-  var method = Array.prototype.filter;
-  return arrayMethodBoxesProperly(method) ? method : implementation;
-};
+    this.info = {
+      bytes: 0,
+      comment_lines: 0,
+      empty_lines: 0,
+      invalid_field_length: 0,
+      lines: 1,
+      records: 0
+    };
+    this.options = options;
+    this.state = {
+      bomSkipped: false,
+      bufBytesStart: 0,
+      castField: fnCastField,
+      commenting: false,
+      // Current error encountered by a record
+      error: undefined,
+      enabled: options.from_line === 1,
+      escaping: false,
+      // escapeIsQuote: options.escape === options.quote,
+      escapeIsQuote: Buffer.isBuffer(options.escape) && Buffer.isBuffer(options.quote) && Buffer.compare(options.escape, options.quote) === 0,
+      // columns can be `false`, `true`, `Array`
+      expectedRecordLength: Array.isArray(options.columns) ? options.columns.length : undefined,
+      field: new ResizeableBuffer(20),
+      firstLineToHeaders: fnFirstLineToHeaders,
+      needMoreDataSize: Math.max( // Skip if the remaining buffer smaller than comment
+      options.comment !== null ? options.comment.length : 0, // Skip if the remaining buffer can be delimiter
+      ...options.delimiter.map(delimiter => delimiter.length), // Skip if the remaining buffer can be escape sequence
+      options.quote !== null ? options.quote.length : 0),
+      previousBuf: undefined,
+      quoting: false,
+      stop: false,
+      rawBuffer: new ResizeableBuffer(100),
+      record: [],
+      recordHasError: false,
+      record_length: 0,
+      recordDelimiterMaxLength: options.record_delimiter.length === 0 ? 2 : Math.max(...options.record_delimiter.map(v => v.length)),
+      trimChars: [Buffer.from(' ', options.encoding)[0], Buffer.from('\t', options.encoding)[0]],
+      wasQuoting: false,
+      wasRowDelimiter: false
+    };
+  } // Implementation of `Transform._transform`
 
-/***/ }),
 
-/***/ "./node_modules/array.prototype.filter/shim.js":
-/*!*****************************************************!*\
-  !*** ./node_modules/array.prototype.filter/shim.js ***!
-  \*****************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+  _transform(buf, encoding, callback) {
+    if (this.state.stop === true) {
+      return;
+    }
 
-"use strict";
+    const err = this.__parse(buf, false);
 
+    if (err !== undefined) {
+      this.state.stop = true;
+    }
 
-var define = __webpack_require__(/*! define-properties */ "./node_modules/define-properties/index.js");
+    callback(err);
+  } // Implementation of `Transform._flush`
 
-var getPolyfill = __webpack_require__(/*! ./polyfill */ "./node_modules/array.prototype.filter/polyfill.js");
 
-module.exports = function shimArrayPrototypeMap() {
-  var polyfill = getPolyfill();
-  define(Array.prototype, {
-    filter: polyfill
-  }, {
-    filter: function () {
-      return Array.prototype.filter !== polyfill;
+  _flush(callback) {
+    if (this.state.stop === true) {
+      return;
     }
-  });
-  return polyfill;
-};
 
-/***/ }),
-
-/***/ "./node_modules/available-typed-arrays/index.js":
-/*!******************************************************!*\
-  !*** ./node_modules/available-typed-arrays/index.js ***!
-  \******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+    const err = this.__parse(undefined, true);
 
-"use strict";
+    callback(err);
+  } // Central parser implementation
 
 
-var filter = __webpack_require__(/*! array.prototype.filter */ "./node_modules/array.prototype.filter/index.js");
+  __parse(nextBuf, end) {
+    const _this$options = this.options,
+          bom = _this$options.bom,
+          comment = _this$options.comment,
+          escape = _this$options.escape,
+          from_line = _this$options.from_line,
+          ltrim = _this$options.ltrim,
+          max_record_size = _this$options.max_record_size,
+          quote = _this$options.quote,
+          raw = _this$options.raw,
+          relax = _this$options.relax,
+          rtrim = _this$options.rtrim,
+          skip_empty_lines = _this$options.skip_empty_lines,
+          to = _this$options.to,
+          to_line = _this$options.to_line;
+    let record_delimiter = this.options.record_delimiter;
+    const _this$state = this.state,
+          bomSkipped = _this$state.bomSkipped,
+          previousBuf = _this$state.previousBuf,
+          rawBuffer = _this$state.rawBuffer,
+          escapeIsQuote = _this$state.escapeIsQuote;
+    let buf;
 
-module.exports = function availableTypedArrays() {
-  return filter(['BigInt64Array', 'BigUint64Array', 'Float32Array', 'Float64Array', 'Int16Array', 'Int32Array', 'Int8Array', 'Uint16Array', 'Uint32Array', 'Uint8Array', 'Uint8ClampedArray'], function (typedArray) {
-    return typeof global[typedArray] === 'function';
-  });
-};
+    if (previousBuf === undefined) {
+      if (nextBuf === undefined) {
+        // Handle empty string
+        this.push(null);
+        return;
+      } else {
+        buf = nextBuf;
+      }
+    } else if (previousBuf !== undefined && nextBuf === undefined) {
+      buf = previousBuf;
+    } else {
+      buf = Buffer.concat([previousBuf, nextBuf]);
+    } // Handle UTF BOM
 
-/***/ }),
 
-/***/ "./node_modules/call-bind/callBound.js":
-/*!*********************************************!*\
-  !*** ./node_modules/call-bind/callBound.js ***!
-  \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+    if (bomSkipped === false) {
+      if (bom === false) {
+        this.state.bomSkipped = true;
+      } else if (buf.length < 3) {
+        // No enough data
+        if (end === false) {
+          // Wait for more data
+          this.state.previousBuf = buf;
+          return;
+        }
+      } else {
+        for (let encoding in boms) {
+          if (boms[encoding].compare(buf, 0, boms[encoding].length) === 0) {
+            // Skip BOM
+            let bomLength = boms[encoding].length;
+            this.state.bufBytesStart += bomLength;
+            buf = buf.slice(bomLength); // Renormalize original options with the new encoding
+
+            this.__normalizeOptions(_objectSpread(_objectSpread({}, this.__originalOptions), {}, {
+              encoding: encoding
+            }));
 
-"use strict";
+            break;
+          }
+        }
 
+        this.state.bomSkipped = true;
+      }
+    }
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+    const bufLen = buf.length;
+    let pos;
 
-var callBind = __webpack_require__(/*! ./ */ "./node_modules/call-bind/index.js");
+    for (pos = 0; pos < bufLen; pos++) {
+      // Ensure we get enough space to look ahead
+      // There should be a way to move this out of the loop
+      if (this.__needMoreData(pos, bufLen, end)) {
+        break;
+      }
 
-var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));
+      if (this.state.wasRowDelimiter === true) {
+        this.info.lines++;
+        this.state.wasRowDelimiter = false;
+      }
 
-module.exports = function callBoundIntrinsic(name, allowMissing) {
-  var intrinsic = GetIntrinsic(name, !!allowMissing);
+      if (to_line !== -1 && this.info.lines > to_line) {
+        this.state.stop = true;
+        this.push(null);
+        return;
+      } // Auto discovery of record_delimiter, unix, mac and windows supported
 
-  if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {
-    return callBind(intrinsic);
-  }
 
-  return intrinsic;
-};
+      if (this.state.quoting === false && record_delimiter.length === 0) {
+        const record_delimiterCount = this.__autoDiscoverRecordDelimiter(buf, pos);
 
-/***/ }),
+        if (record_delimiterCount) {
+          record_delimiter = this.options.record_delimiter;
+        }
+      }
 
-/***/ "./node_modules/call-bind/index.js":
-/*!*****************************************!*\
-  !*** ./node_modules/call-bind/index.js ***!
-  \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+      const chr = buf[pos];
 
-"use strict";
+      if (raw === true) {
+        rawBuffer.append(chr);
+      }
 
+      if ((chr === cr || chr === nl) && this.state.wasRowDelimiter === false) {
+        this.state.wasRowDelimiter = true;
+      } // Previous char was a valid escape char
+      // treat the current char as a regular char
 
-var bind = __webpack_require__(/*! function-bind */ "./node_modules/function-bind/index.js");
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+      if (this.state.escaping === true) {
+        this.state.escaping = false;
+      } else {
+        // Escape is only active inside quoted fields
+        // We are quoting, the char is an escape chr and there is a chr to escape
+        // if(escape !== null && this.state.quoting === true && chr === escape && pos + 1 < bufLen){
+        if (escape !== null && this.state.quoting === true && this.__isEscape(buf, pos, chr) && pos + escape.length < bufLen) {
+          if (escapeIsQuote) {
+            if (this.__isQuote(buf, pos + escape.length)) {
+              this.state.escaping = true;
+              pos += escape.length - 1;
+              continue;
+            }
+          } else {
+            this.state.escaping = true;
+            pos += escape.length - 1;
+            continue;
+          }
+        } // Not currently escaping and chr is a quote
+        // TODO: need to compare bytes instead of single char
 
-var $apply = GetIntrinsic('%Function.prototype.apply%');
-var $call = GetIntrinsic('%Function.prototype.call%');
-var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);
-var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);
-var $defineProperty = GetIntrinsic('%Object.defineProperty%', true);
-var $max = GetIntrinsic('%Math.max%');
 
-if ($defineProperty) {
-  try {
-    $defineProperty({}, 'a', {
-      value: 1
-    });
-  } catch (e) {
-    // IE 8 has a broken defineProperty
-    $defineProperty = null;
-  }
-}
+        if (this.state.commenting === false && this.__isQuote(buf, pos)) {
+          if (this.state.quoting === true) {
+            const nextChr = buf[pos + quote.length];
 
-module.exports = function callBind(originalFunction) {
-  var func = $reflectApply(bind, $call, arguments);
+            const isNextChrTrimable = rtrim && this.__isCharTrimable(nextChr);
 
-  if ($gOPD && $defineProperty) {
-    var desc = $gOPD(func, 'length');
+            const isNextChrComment = comment !== null && this.__compareBytes(comment, buf, pos + quote.length, nextChr);
 
-    if (desc.configurable) {
-      // original length, plus the receiver, minus any additional arguments (after the receiver)
-      $defineProperty(func, 'length', {
-        value: 1 + $max(0, originalFunction.length - (arguments.length - 1))
-      });
-    }
-  }
+            const isNextChrDelimiter = this.__isDelimiter(buf, pos + quote.length, nextChr);
 
-  return func;
-};
+            const isNextChrRecordDelimiter = record_delimiter.length === 0 ? this.__autoDiscoverRecordDelimiter(buf, pos + quote.length) : this.__isRecordDelimiter(nextChr, buf, pos + quote.length); // Escape a quote
+            // Treat next char as a regular character
 
-var applyBind = function applyBind() {
-  return $reflectApply(bind, $apply, arguments);
-};
+            if (escape !== null && this.__isEscape(buf, pos, chr) && this.__isQuote(buf, pos + escape.length)) {
+              pos += escape.length - 1;
+            } else if (!nextChr || isNextChrDelimiter || isNextChrRecordDelimiter || isNextChrComment || isNextChrTrimable) {
+              this.state.quoting = false;
+              this.state.wasQuoting = true;
+              pos += quote.length - 1;
+              continue;
+            } else if (relax === false) {
+              const err = this.__error(new CsvError('CSV_INVALID_CLOSING_QUOTE', ['Invalid Closing Quote:', `got "${String.fromCharCode(nextChr)}"`, `at line ${this.info.lines}`, 'instead of delimiter, record delimiter, trimable character', '(if activated) or comment'], this.options, this.__infoField()));
 
-if ($defineProperty) {
-  $defineProperty(module.exports, 'apply', {
-    value: applyBind
-  });
-} else {
-  module.exports.apply = applyBind;
-}
+              if (err !== undefined) return err;
+            } else {
+              this.state.quoting = false;
+              this.state.wasQuoting = true;
+              this.state.field.prepend(quote);
+              pos += quote.length - 1;
+            }
+          } else {
+            if (this.state.field.length !== 0) {
+              // In relax mode, treat opening quote preceded by chrs as regular
+              if (relax === false) {
+                const err = this.__error(new CsvError('INVALID_OPENING_QUOTE', ['Invalid Opening Quote:', `a quote is found inside a field at line ${this.info.lines}`], this.options, this.__infoField(), {
+                  field: this.state.field
+                }));
 
-/***/ }),
+                if (err !== undefined) return err;
+              }
+            } else {
+              this.state.quoting = true;
+              pos += quote.length - 1;
+              continue;
+            }
+          }
+        }
 
-/***/ "./node_modules/charenc/charenc.js":
-/*!*****************************************!*\
-  !*** ./node_modules/charenc/charenc.js ***!
-  \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+        if (this.state.quoting === false) {
+          let recordDelimiterLength = this.__isRecordDelimiter(chr, buf, pos);
 
-var charenc = {
-  // UTF-8 encoding
-  utf8: {
-    // Convert a string to a byte array
-    stringToBytes: function (str) {
-      return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));
-    },
-    // Convert a byte array to a string
-    bytesToString: function (bytes) {
-      return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));
-    }
-  },
-  // Binary encoding
-  bin: {
-    // Convert a string to a byte array
-    stringToBytes: function (str) {
-      for (var bytes = [], i = 0; i < str.length; i++) bytes.push(str.charCodeAt(i) & 0xFF);
+          if (recordDelimiterLength !== 0) {
+            // Do not emit comments which take a full line
+            const skipCommentLine = this.state.commenting && this.state.wasQuoting === false && this.state.record.length === 0 && this.state.field.length === 0;
 
-      return bytes;
-    },
-    // Convert a byte array to a string
-    bytesToString: function (bytes) {
-      for (var str = [], i = 0; i < bytes.length; i++) str.push(String.fromCharCode(bytes[i]));
+            if (skipCommentLine) {
+              this.info.comment_lines++; // Skip full comment line
+            } else {
+              // Activate records emition if above from_line
+              if (this.state.enabled === false && this.info.lines + (this.state.wasRowDelimiter === true ? 1 : 0) >= from_line) {
+                this.state.enabled = true;
 
-      return str.join('');
-    }
-  }
-};
-module.exports = charenc;
+                this.__resetField();
 
-/***/ }),
+                this.__resetRecord();
 
-/***/ "./node_modules/crypt/crypt.js":
-/*!*************************************!*\
-  !*** ./node_modules/crypt/crypt.js ***!
-  \*************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+                pos += recordDelimiterLength - 1;
+                continue;
+              } // Skip if line is empty and skip_empty_lines activated
 
-(function () {
-  var base64map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
-      crypt = {
-    // Bit-wise rotation left
-    rotl: function (n, b) {
-      return n << b | n >>> 32 - b;
-    },
-    // Bit-wise rotation right
-    rotr: function (n, b) {
-      return n << 32 - b | n >>> b;
-    },
-    // Swap big-endian to little-endian and vice versa
-    endian: function (n) {
-      // If number given, swap endian
-      if (n.constructor == Number) {
-        return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;
-      } // Else, assume array and swap all items
 
+              if (skip_empty_lines === true && this.state.wasQuoting === false && this.state.record.length === 0 && this.state.field.length === 0) {
+                this.info.empty_lines++;
+                pos += recordDelimiterLength - 1;
+                continue;
+              }
 
-      for (var i = 0; i < n.length; i++) n[i] = crypt.endian(n[i]);
+              this.info.bytes = this.state.bufBytesStart + pos;
 
-      return n;
-    },
-    // Generate an array of any length of random bytes
-    randomBytes: function (n) {
-      for (var bytes = []; n > 0; n--) bytes.push(Math.floor(Math.random() * 256));
+              const errField = this.__onField();
 
-      return bytes;
-    },
-    // Convert a byte array to big-endian 32-bit words
-    bytesToWords: function (bytes) {
-      for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8) words[b >>> 5] |= bytes[i] << 24 - b % 32;
+              if (errField !== undefined) return errField;
+              this.info.bytes = this.state.bufBytesStart + pos + recordDelimiterLength;
 
-      return words;
-    },
-    // Convert big-endian 32-bit words to a byte array
-    wordsToBytes: function (words) {
-      for (var bytes = [], b = 0; b < words.length * 32; b += 8) bytes.push(words[b >>> 5] >>> 24 - b % 32 & 0xFF);
+              const errRecord = this.__onRecord();
 
-      return bytes;
-    },
-    // Convert a byte array to a hex string
-    bytesToHex: function (bytes) {
-      for (var hex = [], i = 0; i < bytes.length; i++) {
-        hex.push((bytes[i] >>> 4).toString(16));
-        hex.push((bytes[i] & 0xF).toString(16));
-      }
+              if (errRecord !== undefined) return errRecord;
 
-      return hex.join('');
-    },
-    // Convert a hex string to a byte array
-    hexToBytes: function (hex) {
-      for (var bytes = [], c = 0; c < hex.length; c += 2) bytes.push(parseInt(hex.substr(c, 2), 16));
+              if (to !== -1 && this.info.records >= to) {
+                this.state.stop = true;
+                this.push(null);
+                return;
+              }
+            }
 
-      return bytes;
-    },
-    // Convert a byte array to a base-64 string
-    bytesToBase64: function (bytes) {
-      for (var base64 = [], i = 0; i < bytes.length; i += 3) {
-        var triplet = bytes[i] << 16 | bytes[i + 1] << 8 | bytes[i + 2];
+            this.state.commenting = false;
+            pos += recordDelimiterLength - 1;
+            continue;
+          }
 
-        for (var j = 0; j < 4; j++) if (i * 8 + j * 6 <= bytes.length * 8) base64.push(base64map.charAt(triplet >>> 6 * (3 - j) & 0x3F));else base64.push('=');
-      }
+          if (this.state.commenting) {
+            continue;
+          }
 
-      return base64.join('');
-    },
-    // Convert a base-64 string to a byte array
-    base64ToBytes: function (base64) {
-      // Remove non-base-64 characters
-      base64 = base64.replace(/[^A-Z0-9+\/]/ig, '');
+          const commentCount = comment === null ? 0 : this.__compareBytes(comment, buf, pos, chr);
 
-      for (var bytes = [], i = 0, imod4 = 0; i < base64.length; imod4 = ++i % 4) {
-        if (imod4 == 0) continue;
-        bytes.push((base64map.indexOf(base64.charAt(i - 1)) & Math.pow(2, -2 * imod4 + 8) - 1) << imod4 * 2 | base64map.indexOf(base64.charAt(i)) >>> 6 - imod4 * 2);
-      }
+          if (commentCount !== 0) {
+            this.state.commenting = true;
+            continue;
+          }
 
-      return bytes;
-    }
-  };
-  module.exports = crypt;
-})();
+          let delimiterLength = this.__isDelimiter(buf, pos, chr);
 
-/***/ }),
+          if (delimiterLength !== 0) {
+            this.info.bytes = this.state.bufBytesStart + pos;
 
-/***/ "./node_modules/csv-parse/lib/ResizeableBuffer.js":
-/*!********************************************************!*\
-  !*** ./node_modules/csv-parse/lib/ResizeableBuffer.js ***!
-  \********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+            const errField = this.__onField();
 
-class ResizeableBuffer {
-  constructor(size = 100) {
-    this.size = size;
-    this.length = 0;
-    this.buf = Buffer.alloc(size);
-  }
+            if (errField !== undefined) return errField;
+            pos += delimiterLength - 1;
+            continue;
+          }
+        }
+      }
 
-  prepend(val) {
-    const length = this.length++;
+      if (this.state.commenting === false) {
+        if (max_record_size !== 0 && this.state.record_length + this.state.field.length > max_record_size) {
+          const err = this.__error(new CsvError('CSV_MAX_RECORD_SIZE', ['Max Record Size:', 'record exceed the maximum number of tolerated bytes', `of ${max_record_size}`, `at line ${this.info.lines}`], this.options, this.__infoField()));
 
-    if (length === this.size) {
-      this.resize();
-    }
+          if (err !== undefined) return err;
+        }
+      }
 
-    const buf = this.clone();
-    this.buf[0] = val;
-    buf.copy(this.buf, 1, 0, length);
-  }
+      const lappend = ltrim === false || this.state.quoting === true || this.state.field.length !== 0 || !this.__isCharTrimable(chr); // rtrim in non quoting is handle in __onField
 
-  append(val) {
-    const length = this.length++;
+      const rappend = rtrim === false || this.state.wasQuoting === false;
 
-    if (length === this.size) {
-      this.resize();
+      if (lappend === true && rappend === true) {
+        this.state.field.append(chr);
+      } else if (rtrim === true && !this.__isCharTrimable(chr)) {
+        const err = this.__error(new CsvError('CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTE', ['Invalid Closing Quote:', 'found non trimable byte after quote', `at line ${this.info.lines}`], this.options, this.__infoField()));
+
+        if (err !== undefined) return err;
+      }
     }
 
-    this.buf[length] = val;
-  }
+    if (end === true) {
+      // Ensure we are not ending in a quoting state
+      if (this.state.quoting === true) {
+        const err = this.__error(new CsvError('CSV_QUOTE_NOT_CLOSED', ['Quote Not Closed:', `the parsing is finished with an opening quote at line ${this.info.lines}`], this.options, this.__infoField()));
 
-  clone() {
-    return Buffer.from(this.buf.slice(0, this.length));
-  }
+        if (err !== undefined) return err;
+      } else {
+        // Skip last line if it has no characters
+        if (this.state.wasQuoting === true || this.state.record.length !== 0 || this.state.field.length !== 0) {
+          this.info.bytes = this.state.bufBytesStart + pos;
 
-  resize() {
-    const length = this.length;
-    this.size = this.size * 2;
-    const buf = Buffer.alloc(this.size);
-    this.buf.copy(buf, 0, 0, length);
-    this.buf = buf;
-  }
+          const errField = this.__onField();
 
-  toString() {
-    return this.buf.slice(0, this.length).toString();
-  }
+          if (errField !== undefined) return errField;
 
-  toJSON() {
-    return this.toString();
-  }
+          const errRecord = this.__onRecord();
 
-  reset() {
-    this.length = 0;
-  }
+          if (errRecord !== undefined) return errRecord;
+        } else if (this.state.wasRowDelimiter === true) {
+          this.info.empty_lines++;
+        } else if (this.state.commenting === true) {
+          this.info.comment_lines++;
+        }
+      }
+    } else {
+      this.state.bufBytesStart += pos;
+      this.state.previousBuf = buf.slice(pos);
+    }
 
-}
+    if (this.state.wasRowDelimiter === true) {
+      this.info.lines++;
+      this.state.wasRowDelimiter = false;
+    }
+  }
 
-module.exports = ResizeableBuffer;
+  __onRecord() {
+    const _this$options2 = this.options,
+          columns = _this$options2.columns,
+          columns_duplicates_to_array = _this$options2.columns_duplicates_to_array,
+          encoding = _this$options2.encoding,
+          info = _this$options2.info,
+          from = _this$options2.from,
+          relax_column_count = _this$options2.relax_column_count,
+          relax_column_count_less = _this$options2.relax_column_count_less,
+          relax_column_count_more = _this$options2.relax_column_count_more,
+          raw = _this$options2.raw,
+          skip_lines_with_empty_values = _this$options2.skip_lines_with_empty_values;
+    const _this$state2 = this.state,
+          enabled = _this$state2.enabled,
+          record = _this$state2.record;
 
-/***/ }),
+    if (enabled === false) {
+      return this.__resetRecord();
+    } // Convert the first line into column names
 
-/***/ "./node_modules/csv-parse/lib/index.js":
-/*!*********************************************!*\
-  !*** ./node_modules/csv-parse/lib/index.js ***!
-  \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
 
-function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+    const recordLength = record.length;
 
-function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+    if (columns === true) {
+      if (skip_lines_with_empty_values === true && isRecordEmpty(record)) {
+        this.__resetRecord();
 
-function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+        return;
+      }
 
-function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
+      return this.__firstLineToColumns(record);
+    }
 
-function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+    if (columns === false && this.info.records === 0) {
+      this.state.expectedRecordLength = recordLength;
+    }
 
-function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+    if (recordLength !== this.state.expectedRecordLength) {
+      const err = columns === false ? // Todo: rename CSV_INCONSISTENT_RECORD_LENGTH to
+      // CSV_RECORD_INCONSISTENT_FIELDS_LENGTH
+      new CsvError('CSV_INCONSISTENT_RECORD_LENGTH', ['Invalid Record Length:', `expect ${this.state.expectedRecordLength},`, `got ${recordLength} on line ${this.info.lines}`], this.options, this.__infoField(), {
+        record: record
+      }) : // Todo: rename CSV_RECORD_DONT_MATCH_COLUMNS_LENGTH to
+      // CSV_RECORD_INCONSISTENT_COLUMNS
+      new CsvError('CSV_RECORD_DONT_MATCH_COLUMNS_LENGTH', ['Invalid Record Length:', `columns length is ${columns.length},`, // rename columns
+      `got ${recordLength} on line ${this.info.lines}`], this.options, this.__infoField(), {
+        record: record
+      });
 
-function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
+      if (relax_column_count === true || relax_column_count_less === true && recordLength < this.state.expectedRecordLength || relax_column_count_more === true && recordLength > this.state.expectedRecordLength) {
+        this.info.invalid_field_length++;
+        this.state.error = err; // Error is undefined with skip_lines_with_error
+      } else {
+        const finalErr = this.__error(err);
 
-function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
+        if (finalErr) return finalErr;
+      }
+    }
 
-function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+    if (skip_lines_with_empty_values === true && isRecordEmpty(record)) {
+      this.__resetRecord();
 
-/*
-CSV Parse
+      return;
+    }
 
-Please look at the [project documentation](https://csv.js.org/parse/) for
-additional information.
-*/
-const _require = __webpack_require__(/*! stream */ "stream"),
-      Transform = _require.Transform;
+    if (this.state.recordHasError === true) {
+      this.__resetRecord();
 
-const ResizeableBuffer = __webpack_require__(/*! ./ResizeableBuffer */ "./node_modules/csv-parse/lib/ResizeableBuffer.js");
+      this.state.recordHasError = false;
+      return;
+    }
 
-const tab = 9;
-const nl = 10;
-const np = 12;
-const cr = 13;
-const space = 32;
-const bom_utf8 = Buffer.from([239, 187, 191]);
+    this.info.records++;
 
-class Parser extends Transform {
-  constructor(opts = {}) {
-    super(_objectSpread(_objectSpread({}, {
-      readableObjectMode: true
-    }), opts));
-    const options = {}; // Merge with user options
+    if (from === 1 || this.info.records >= from) {
+      // With columns, records are object
+      if (columns !== false) {
+        const obj = {}; // Transform record array to an object
 
-    for (let opt in opts) {
-      options[underscore(opt)] = opts[opt];
-    } // Normalize option `bom`
+        for (let i = 0, l = record.length; i < l; i++) {
+          if (columns[i] === undefined || columns[i].disabled) continue; // Turn duplicate columns into an array
 
+          if (columns_duplicates_to_array === true && obj[columns[i].name] !== undefined) {
+            if (Array.isArray(obj[columns[i].name])) {
+              obj[columns[i].name] = obj[columns[i].name].concat(record[i]);
+            } else {
+              obj[columns[i].name] = [obj[columns[i].name], record[i]];
+            }
+          } else {
+            obj[columns[i].name] = record[i];
+          }
+        }
 
-    if (options.bom === undefined || options.bom === null || options.bom === false) {
-      options.bom = false;
-    } else if (options.bom !== true) {
-      throw new CsvError('CSV_INVALID_OPTION_BOM', ['Invalid option bom:', 'bom must be true,', `got ${JSON.stringify(options.bom)}`]);
-    } // Normalize option `cast`
+        const objname = this.options.objname; // Without objname (default)
 
+        if (objname === undefined) {
+          if (raw === true || info === true) {
+            const err = this.__push(Object.assign({
+              record: obj
+            }, raw === true ? {
+              raw: this.state.rawBuffer.toString(encoding)
+            } : {}, info === true ? {
+              info: this.__infoRecord()
+            } : {}));
 
-    let fnCastField = null;
+            if (err) {
+              return err;
+            }
+          } else {
+            const err = this.__push(obj);
 
-    if (options.cast === undefined || options.cast === null || options.cast === false || options.cast === '') {
-      options.cast = undefined;
-    } else if (typeof options.cast === 'function') {
-      fnCastField = options.cast;
-      options.cast = true;
-    } else if (options.cast !== true) {
-      throw new CsvError('CSV_INVALID_OPTION_CAST', ['Invalid option cast:', 'cast must be true or a function,', `got ${JSON.stringify(options.cast)}`]);
-    } // Normalize option `cast_date`
+            if (err) {
+              return err;
+            }
+          } // With objname (default)
 
+        } else {
+          if (raw === true || info === true) {
+            const err = this.__push(Object.assign({
+              record: [obj[objname], obj]
+            }, raw === true ? {
+              raw: this.state.rawBuffer.toString(encoding)
+            } : {}, info === true ? {
+              info: this.__infoRecord()
+            } : {}));
 
-    if (options.cast_date === undefined || options.cast_date === null || options.cast_date === false || options.cast_date === '') {
-      options.cast_date = false;
-    } else if (options.cast_date === true) {
-      options.cast_date = function (value) {
-        const date = Date.parse(value);
-        return !isNaN(date) ? new Date(date) : value;
-      };
-    } else if (typeof options.cast_date !== 'function') {
-      throw new CsvError('CSV_INVALID_OPTION_CAST_DATE', ['Invalid option cast_date:', 'cast_date must be true or a function,', `got ${JSON.stringify(options.cast_date)}`]);
-    } // Normalize option `columns`
+            if (err) {
+              return err;
+            }
+          } else {
+            const err = this.__push([obj[objname], obj]);
 
+            if (err) {
+              return err;
+            }
+          }
+        } // Without columns, records are array
 
-    let fnFirstLineToHeaders = null;
+      } else {
+        if (raw === true || info === true) {
+          const err = this.__push(Object.assign({
+            record: record
+          }, raw === true ? {
+            raw: this.state.rawBuffer.toString(encoding)
+          } : {}, info === true ? {
+            info: this.__infoRecord()
+          } : {}));
 
-    if (options.columns === true) {
-      // Fields in the first line are converted as-is to columns
-      fnFirstLineToHeaders = undefined;
-    } else if (typeof options.columns === 'function') {
-      fnFirstLineToHeaders = options.columns;
-      options.columns = true;
-    } else if (Array.isArray(options.columns)) {
-      options.columns = normalizeColumnsArray(options.columns);
-    } else if (options.columns === undefined || options.columns === null || options.columns === false) {
-      options.columns = false;
-    } else {
-      throw new CsvError('CSV_INVALID_OPTION_COLUMNS', ['Invalid option columns:', 'expect an object, a function or true,', `got ${JSON.stringify(options.columns)}`]);
-    } // Normalize option `columns_duplicates_to_array`
+          if (err) {
+            return err;
+          }
+        } else {
+          const err = this.__push(record);
 
+          if (err) {
+            return err;
+          }
+        }
+      }
+    }
 
-    if (options.columns_duplicates_to_array === undefined || options.columns_duplicates_to_array === null || options.columns_duplicates_to_array === false) {
-      options.columns_duplicates_to_array = false;
-    } else if (options.columns_duplicates_to_array !== true) {
-      throw new CsvError('CSV_INVALID_OPTION_COLUMNS_DUPLICATES_TO_ARRAY', ['Invalid option columns_duplicates_to_array:', 'expect an boolean,', `got ${JSON.stringify(options.columns_duplicates_to_array)}`]);
-    } // Normalize option `comment`
+    this.__resetRecord();
+  }
 
+  __firstLineToColumns(record) {
+    const firstLineToHeaders = this.state.firstLineToHeaders;
 
-    if (options.comment === undefined || options.comment === null || options.comment === false || options.comment === '') {
-      options.comment = null;
-    } else {
-      if (typeof options.comment === 'string') {
-        options.comment = Buffer.from(options.comment);
-      }
+    try {
+      const headers = firstLineToHeaders === undefined ? record : firstLineToHeaders.call(null, record);
 
-      if (!Buffer.isBuffer(options.comment)) {
-        throw new CsvError('CSV_INVALID_OPTION_COMMENT', ['Invalid option comment:', 'comment must be a buffer or a string,', `got ${JSON.stringify(options.comment)}`]);
+      if (!Array.isArray(headers)) {
+        return this.__error(new CsvError('CSV_INVALID_COLUMN_MAPPING', ['Invalid Column Mapping:', 'expect an array from column function,', `got ${JSON.stringify(headers)}`], this.options, this.__infoField(), {
+          headers: headers
+        }));
       }
-    } // Normalize option `delimiter`
 
+      const normalizedHeaders = normalizeColumnsArray(headers);
+      this.state.expectedRecordLength = normalizedHeaders.length;
+      this.options.columns = normalizedHeaders;
 
-    const delimiter_json = JSON.stringify(options.delimiter);
-    if (!Array.isArray(options.delimiter)) options.delimiter = [options.delimiter];
+      this.__resetRecord();
 
-    if (options.delimiter.length === 0) {
-      throw new CsvError('CSV_INVALID_OPTION_DELIMITER', ['Invalid option delimiter:', 'delimiter must be a non empty string or buffer or array of string|buffer,', `got ${delimiter_json}`]);
+      return;
+    } catch (err) {
+      return err;
     }
+  }
 
-    options.delimiter = options.delimiter.map(function (delimiter) {
-      if (delimiter === undefined || delimiter === null || delimiter === false) {
-        return Buffer.from(',');
-      }
-
-      if (typeof delimiter === 'string') {
-        delimiter = Buffer.from(delimiter);
-      }
+  __resetRecord() {
+    if (this.options.raw === true) {
+      this.state.rawBuffer.reset();
+    }
 
-      if (!Buffer.isBuffer(delimiter) || delimiter.length === 0) {
-        throw new CsvError('CSV_INVALID_OPTION_DELIMITER', ['Invalid option delimiter:', 'delimiter must be a non empty string or buffer or array of string|buffer,', `got ${delimiter_json}`]);
-      }
+    this.state.error = undefined;
+    this.state.record = [];
+    this.state.record_length = 0;
+  }
 
-      return delimiter;
-    }); // Normalize option `escape`
+  __onField() {
+    const _this$options3 = this.options,
+          cast = _this$options3.cast,
+          encoding = _this$options3.encoding,
+          rtrim = _this$options3.rtrim,
+          max_record_size = _this$options3.max_record_size;
+    const _this$state3 = this.state,
+          enabled = _this$state3.enabled,
+          wasQuoting = _this$state3.wasQuoting; // Short circuit for the from_line options
 
-    if (options.escape === undefined || options.escape === null) {
-      options.escape = Buffer.from('"');
-    } else if (typeof options.escape === 'string') {
-      options.escape = Buffer.from(options.escape);
+    if (enabled === false) {
+      return this.__resetField();
     }
 
-    if (!Buffer.isBuffer(options.escape)) {
-      throw new Error(`Invalid Option: escape must be a buffer or a string, got ${JSON.stringify(options.escape)}`);
-    } else if (options.escape.length !== 1) {
-      throw new Error(`Invalid Option Length: escape must be one character, got ${options.escape.length}`);
-    } else {
-      options.escape = options.escape[0];
-    } // Normalize option `from`
-
-
-    if (options.from === undefined || options.from === null) {
-      options.from = 1;
-    } else {
-      if (typeof options.from === 'string' && /\d+/.test(options.from)) {
-        options.from = parseInt(options.from);
-      }
+    let field = this.state.field.toString(encoding);
 
-      if (Number.isInteger(options.from)) {
-        if (options.from < 0) {
-          throw new Error(`Invalid Option: from must be a positive integer, got ${JSON.stringify(opts.from)}`);
-        }
-      } else {
-        throw new Error(`Invalid Option: from must be an integer, got ${JSON.stringify(options.from)}`);
-      }
-    } // Normalize option `from_line`
+    if (rtrim === true && wasQuoting === false) {
+      field = field.trimRight();
+    }
 
+    if (cast === true) {
+      const _this$__cast = this.__cast(field),
+            _this$__cast2 = _slicedToArray(_this$__cast, 2),
+            err = _this$__cast2[0],
+            f = _this$__cast2[1];
 
-    if (options.from_line === undefined || options.from_line === null) {
-      options.from_line = 1;
-    } else {
-      if (typeof options.from_line === 'string' && /\d+/.test(options.from_line)) {
-        options.from_line = parseInt(options.from_line);
-      }
+      if (err !== undefined) return err;
+      field = f;
+    }
 
-      if (Number.isInteger(options.from_line)) {
-        if (options.from_line <= 0) {
-          throw new Error(`Invalid Option: from_line must be a positive integer greater than 0, got ${JSON.stringify(opts.from_line)}`);
-        }
-      } else {
-        throw new Error(`Invalid Option: from_line must be an integer, got ${JSON.stringify(opts.from_line)}`);
-      }
-    } // Normalize option `info`
+    this.state.record.push(field); // Increment record length if record size must not exceed a limit
 
+    if (max_record_size !== 0 && typeof field === 'string') {
+      this.state.record_length += field.length;
+    }
 
-    if (options.info === undefined || options.info === null || options.info === false) {
-      options.info = false;
-    } else if (options.info !== true) {
-      throw new Error(`Invalid Option: info must be true, got ${JSON.stringify(options.info)}`);
-    } // Normalize option `max_record_size`
+    this.__resetField();
+  }
 
+  __resetField() {
+    this.state.field.reset();
+    this.state.wasQuoting = false;
+  }
 
-    if (options.max_record_size === undefined || options.max_record_size === null || options.max_record_size === false) {
-      options.max_record_size = 0;
-    } else if (Number.isInteger(options.max_record_size) && options.max_record_size >= 0) {// Great, nothing to do
-    } else if (typeof options.max_record_size === 'string' && /\d+/.test(options.max_record_size)) {
-      options.max_record_size = parseInt(options.max_record_size);
-    } else {
-      throw new Error(`Invalid Option: max_record_size must be a positive integer, got ${JSON.stringify(options.max_record_size)}`);
-    } // Normalize option `objname`
+  __push(record) {
+    const on_record = this.options.on_record;
 
+    if (on_record !== undefined) {
+      const info = this.__infoRecord();
 
-    if (options.objname === undefined || options.objname === null || options.objname === false) {
-      options.objname = undefined;
-    } else if (Buffer.isBuffer(options.objname)) {
-      if (options.objname.length === 0) {
-        throw new Error(`Invalid Option: objname must be a non empty buffer`);
+      try {
+        record = on_record.call(null, record, info);
+      } catch (err) {
+        return err;
       }
 
-      options.objname = options.objname.toString();
-    } else if (typeof options.objname === 'string') {
-      if (options.objname.length === 0) {
-        throw new Error(`Invalid Option: objname must be a non empty string`);
-      } // Great, nothing to do
+      if (record === undefined || record === null) {
+        return;
+      }
+    }
 
-    } else {
-      throw new Error(`Invalid Option: objname must be a string or a buffer, got ${options.objname}`);
-    } // Normalize option `on_record`
+    this.push(record);
+  } // Return a tuple with the error and the casted value
 
 
-    if (options.on_record === undefined || options.on_record === null) {
-      options.on_record = undefined;
-    } else if (typeof options.on_record !== 'function') {
-      throw new CsvError('CSV_INVALID_OPTION_ON_RECORD', ['Invalid option `on_record`:', 'expect a function,', `got ${JSON.stringify(options.on_record)}`]);
-    } // Normalize option `quote`
+  __cast(field) {
+    const _this$options4 = this.options,
+          columns = _this$options4.columns,
+          relax_column_count = _this$options4.relax_column_count;
+    const isColumns = Array.isArray(columns); // Dont loose time calling cast
+    // because the final record is an object
+    // and this field can't be associated to a key present in columns
 
+    if (isColumns === true && relax_column_count && this.options.columns.length <= this.state.record.length) {
+      return [undefined, undefined];
+    }
 
-    if (options.quote === null || options.quote === false || options.quote === '') {
-      options.quote = null;
-    } else {
-      if (options.quote === undefined || options.quote === true) {
-        options.quote = Buffer.from('"');
-      } else if (typeof options.quote === 'string') {
-        options.quote = Buffer.from(options.quote);
-      }
+    if (this.state.castField !== null) {
+      try {
+        const info = this.__infoField();
 
-      if (!Buffer.isBuffer(options.quote)) {
-        throw new Error(`Invalid Option: quote must be a buffer or a string, got ${JSON.stringify(options.quote)}`);
-      } else if (options.quote.length !== 1) {
-        throw new Error(`Invalid Option Length: quote must be one character, got ${options.quote.length}`);
-      } else {
-        options.quote = options.quote[0];
+        return [undefined, this.state.castField.call(null, field, info)];
+      } catch (err) {
+        return [err];
       }
-    } // Normalize option `raw`
+    }
 
+    if (this.__isFloat(field)) {
+      return [undefined, parseFloat(field)];
+    } else if (this.options.cast_date !== false) {
+      const info = this.__infoField();
 
-    if (options.raw === undefined || options.raw === null || options.raw === false) {
-      options.raw = false;
-    } else if (options.raw !== true) {
-      throw new Error(`Invalid Option: raw must be true, got ${JSON.stringify(options.raw)}`);
-    } // Normalize option `record_delimiter`
+      return [undefined, this.options.cast_date.call(null, field, info)];
+    }
 
+    return [undefined, field];
+  } // Helper to test if a character is a space or a line delimiter
 
-    if (!options.record_delimiter) {
-      options.record_delimiter = [];
-    } else if (!Array.isArray(options.record_delimiter)) {
-      options.record_delimiter = [options.record_delimiter];
-    }
 
-    options.record_delimiter = options.record_delimiter.map(function (rd) {
-      if (typeof rd === 'string') {
-        rd = Buffer.from(rd);
-      }
+  __isCharTrimable(chr) {
+    return chr === space || chr === tab || chr === cr || chr === nl || chr === np;
+  } // Keep it in case we implement the `cast_int` option
+  // __isInt(value){
+  //   // return Number.isInteger(parseInt(value))
+  //   // return !isNaN( parseInt( obj ) );
+  //   return /^(\-|\+)?[1-9][0-9]*$/.test(value)
+  // }
 
-      return rd;
-    }); // Normalize option `relax`
 
-    if (typeof options.relax === 'boolean') {// Great, nothing to do
-    } else if (options.relax === undefined || options.relax === null) {
-      options.relax = false;
-    } else {
-      throw new Error(`Invalid Option: relax must be a boolean, got ${JSON.stringify(options.relax)}`);
-    } // Normalize option `relax_column_count`
+  __isFloat(value) {
+    return value - parseFloat(value) + 1 >= 0; // Borrowed from jquery
+  }
 
+  __compareBytes(sourceBuf, targetBuf, targetPos, firstByte) {
+    if (sourceBuf[0] !== firstByte) return 0;
+    const sourceLength = sourceBuf.length;
 
-    if (typeof options.relax_column_count === 'boolean') {// Great, nothing to do
-    } else if (options.relax_column_count === undefined || options.relax_column_count === null) {
-      options.relax_column_count = false;
-    } else {
-      throw new Error(`Invalid Option: relax_column_count must be a boolean, got ${JSON.stringify(options.relax_column_count)}`);
+    for (let i = 1; i < sourceLength; i++) {
+      if (sourceBuf[i] !== targetBuf[targetPos + i]) return 0;
     }
 
-    if (typeof options.relax_column_count_less === 'boolean') {// Great, nothing to do
-    } else if (options.relax_column_count_less === undefined || options.relax_column_count_less === null) {
-      options.relax_column_count_less = false;
-    } else {
-      throw new Error(`Invalid Option: relax_column_count_less must be a boolean, got ${JSON.stringify(options.relax_column_count_less)}`);
-    }
+    return sourceLength;
+  }
 
-    if (typeof options.relax_column_count_more === 'boolean') {// Great, nothing to do
-    } else if (options.relax_column_count_more === undefined || options.relax_column_count_more === null) {
-      options.relax_column_count_more = false;
-    } else {
-      throw new Error(`Invalid Option: relax_column_count_more must be a boolean, got ${JSON.stringify(options.relax_column_count_more)}`);
-    } // Normalize option `skip_empty_lines`
+  __needMoreData(i, bufLen, end) {
+    if (end) return false;
+    const quote = this.options.quote;
+    const _this$state4 = this.state,
+          quoting = _this$state4.quoting,
+          needMoreDataSize = _this$state4.needMoreDataSize,
+          recordDelimiterMaxLength = _this$state4.recordDelimiterMaxLength;
+    const numOfCharLeft = bufLen - i - 1;
+    const requiredLength = Math.max(needMoreDataSize, // Skip if the remaining buffer smaller than record delimiter
+    recordDelimiterMaxLength, // Skip if the remaining buffer can be record delimiter following the closing quote
+    // 1 is for quote.length
+    quoting ? quote.length + recordDelimiterMaxLength : 0);
+    return numOfCharLeft < requiredLength;
+  }
 
+  __isDelimiter(buf, pos, chr) {
+    const _this$options5 = this.options,
+          delimiter = _this$options5.delimiter,
+          ignore_last_delimiters = _this$options5.ignore_last_delimiters;
 
-    if (typeof options.skip_empty_lines === 'boolean') {// Great, nothing to do
-    } else if (options.skip_empty_lines === undefined || options.skip_empty_lines === null) {
-      options.skip_empty_lines = false;
-    } else {
-      throw new Error(`Invalid Option: skip_empty_lines must be a boolean, got ${JSON.stringify(options.skip_empty_lines)}`);
-    } // Normalize option `skip_lines_with_empty_values`
+    if (ignore_last_delimiters === true && this.state.record.length === this.options.columns.length - 1) {
+      return 0;
+    } else if (ignore_last_delimiters !== false && typeof ignore_last_delimiters === 'number' && this.state.record.length === ignore_last_delimiters - 1) {
+      return 0;
+    }
 
+    loop1: for (let i = 0; i < delimiter.length; i++) {
+      const del = delimiter[i];
 
-    if (typeof options.skip_lines_with_empty_values === 'boolean') {// Great, nothing to do
-    } else if (options.skip_lines_with_empty_values === undefined || options.skip_lines_with_empty_values === null) {
-      options.skip_lines_with_empty_values = false;
-    } else {
-      throw new Error(`Invalid Option: skip_lines_with_empty_values must be a boolean, got ${JSON.stringify(options.skip_lines_with_empty_values)}`);
-    } // Normalize option `skip_lines_with_error`
+      if (del[0] === chr) {
+        for (let j = 1; j < del.length; j++) {
+          if (del[j] !== buf[pos + j]) continue loop1;
+        }
 
+        return del.length;
+      }
+    }
 
-    if (typeof options.skip_lines_with_error === 'boolean') {// Great, nothing to do
-    } else if (options.skip_lines_with_error === undefined || options.skip_lines_with_error === null) {
-      options.skip_lines_with_error = false;
-    } else {
-      throw new Error(`Invalid Option: skip_lines_with_error must be a boolean, got ${JSON.stringify(options.skip_lines_with_error)}`);
-    } // Normalize option `rtrim`
+    return 0;
+  }
 
+  __isRecordDelimiter(chr, buf, pos) {
+    const record_delimiter = this.options.record_delimiter;
+    const recordDelimiterLength = record_delimiter.length;
 
-    if (options.rtrim === undefined || options.rtrim === null || options.rtrim === false) {
-      options.rtrim = false;
-    } else if (options.rtrim !== true) {
-      throw new Error(`Invalid Option: rtrim must be a boolean, got ${JSON.stringify(options.rtrim)}`);
-    } // Normalize option `ltrim`
+    loop1: for (let i = 0; i < recordDelimiterLength; i++) {
+      const rd = record_delimiter[i];
+      const rdLength = rd.length;
 
+      if (rd[0] !== chr) {
+        continue;
+      }
 
-    if (options.ltrim === undefined || options.ltrim === null || options.ltrim === false) {
-      options.ltrim = false;
-    } else if (options.ltrim !== true) {
-      throw new Error(`Invalid Option: ltrim must be a boolean, got ${JSON.stringify(options.ltrim)}`);
-    } // Normalize option `trim`
+      for (let j = 1; j < rdLength; j++) {
+        if (rd[j] !== buf[pos + j]) {
+          continue loop1;
+        }
+      }
 
+      return rd.length;
+    }
 
-    if (options.trim === undefined || options.trim === null || options.trim === false) {
-      options.trim = false;
-    } else if (options.trim !== true) {
-      throw new Error(`Invalid Option: trim must be a boolean, got ${JSON.stringify(options.trim)}`);
-    } // Normalize options `trim`, `ltrim` and `rtrim`
+    return 0;
+  }
 
+  __isEscape(buf, pos, chr) {
+    const escape = this.options.escape;
+    if (escape === null) return false;
+    const l = escape.length;
 
-    if (options.trim === true && opts.ltrim !== false) {
-      options.ltrim = true;
-    } else if (options.ltrim !== true) {
-      options.ltrim = false;
-    }
+    if (escape[0] === chr) {
+      for (let i = 0; i < l; i++) {
+        if (escape[i] !== buf[pos + i]) {
+          return false;
+        }
+      }
 
-    if (options.trim === true && opts.rtrim !== false) {
-      options.rtrim = true;
-    } else if (options.rtrim !== true) {
-      options.rtrim = false;
-    } // Normalize option `to`
+      return true;
+    }
 
+    return false;
+  }
 
-    if (options.to === undefined || options.to === null) {
-      options.to = -1;
-    } else {
-      if (typeof options.to === 'string' && /\d+/.test(options.to)) {
-        options.to = parseInt(options.to);
-      }
+  __isQuote(buf, pos) {
+    const quote = this.options.quote;
+    if (quote === null) return false;
+    const l = quote.length;
 
-      if (Number.isInteger(options.to)) {
-        if (options.to <= 0) {
-          throw new Error(`Invalid Option: to must be a positive integer greater than 0, got ${JSON.stringify(opts.to)}`);
-        }
-      } else {
-        throw new Error(`Invalid Option: to must be an integer, got ${JSON.stringify(opts.to)}`);
+    for (let i = 0; i < l; i++) {
+      if (quote[i] !== buf[pos + i]) {
+        return false;
       }
-    } // Normalize option `to_line`
+    }
 
+    return true;
+  }
 
-    if (options.to_line === undefined || options.to_line === null) {
-      options.to_line = -1;
-    } else {
-      if (typeof options.to_line === 'string' && /\d+/.test(options.to_line)) {
-        options.to_line = parseInt(options.to_line);
-      }
+  __autoDiscoverRecordDelimiter(buf, pos) {
+    const encoding = this.options.encoding;
+    const chr = buf[pos];
 
-      if (Number.isInteger(options.to_line)) {
-        if (options.to_line <= 0) {
-          throw new Error(`Invalid Option: to_line must be a positive integer greater than 0, got ${JSON.stringify(opts.to_line)}`);
-        }
+    if (chr === cr) {
+      if (buf[pos + 1] === nl) {
+        this.options.record_delimiter.push(Buffer.from('\r\n', encoding));
+        this.state.recordDelimiterMaxLength = 2;
+        return 2;
       } else {
-        throw new Error(`Invalid Option: to_line must be an integer, got ${JSON.stringify(opts.to_line)}`);
+        this.options.record_delimiter.push(Buffer.from('\r', encoding));
+        this.state.recordDelimiterMaxLength = 1;
+        return 1;
       }
+    } else if (chr === nl) {
+      this.options.record_delimiter.push(Buffer.from('\n', encoding));
+      this.state.recordDelimiterMaxLength = 1;
+      return 1;
     }
 
-    this.info = {
-      comment_lines: 0,
-      empty_lines: 0,
-      invalid_field_length: 0,
-      lines: 1,
-      records: 0
-    };
-    this.options = options;
-    this.state = {
-      bomSkipped: false,
-      castField: fnCastField,
-      commenting: false,
-      enabled: options.from_line === 1,
-      escaping: false,
-      escapeIsQuote: options.escape === options.quote,
-      expectedRecordLength: options.columns === null ? 0 : options.columns.length,
-      field: new ResizeableBuffer(20),
-      firstLineToHeaders: fnFirstLineToHeaders,
-      info: Object.assign({}, this.info),
-      previousBuf: undefined,
-      quoting: false,
-      stop: false,
-      rawBuffer: new ResizeableBuffer(100),
-      record: [],
-      recordHasError: false,
-      record_length: 0,
-      recordDelimiterMaxLength: options.record_delimiter.length === 0 ? 2 : Math.max(...options.record_delimiter.map(v => v.length)),
-      trimChars: [Buffer.from(' ')[0], Buffer.from('\t')[0]],
-      wasQuoting: false,
-      wasRowDelimiter: false
-    };
-  } // Implementation of `Transform._transform`
+    return 0;
+  }
 
+  __error(msg) {
+    const skip_lines_with_error = this.options.skip_lines_with_error;
+    const err = typeof msg === 'string' ? new Error(msg) : msg;
 
-  _transform(buf, encoding, callback) {
-    if (this.state.stop === true) {
-      return;
+    if (skip_lines_with_error) {
+      this.state.recordHasError = true;
+      this.emit('skip', err);
+      return undefined;
+    } else {
+      return err;
     }
+  }
 
-    const err = this.__parse(buf, false);
+  __infoDataSet() {
+    return _objectSpread(_objectSpread({}, this.info), {}, {
+      columns: this.options.columns
+    });
+  }
 
-    if (err !== undefined) {
-      this.state.stop = true;
-    }
+  __infoRecord() {
+    const columns = this.options.columns;
+    return _objectSpread(_objectSpread({}, this.__infoDataSet()), {}, {
+      error: this.state.error,
+      header: columns === true,
+      index: this.state.record.length
+    });
+  }
 
-    callback(err);
-  } // Implementation of `Transform._flush`
+  __infoField() {
+    const columns = this.options.columns;
+    const isColumns = Array.isArray(columns);
+    return _objectSpread(_objectSpread({}, this.__infoRecord()), {}, {
+      column: isColumns === true ? columns.length > this.state.record.length ? columns[this.state.record.length].name : null : this.state.record.length,
+      quoting: this.state.wasQuoting
+    });
+  }
+
+}
 
+const parse = function () {
+  let data, options, callback;
 
-  _flush(callback) {
-    if (this.state.stop === true) {
-      return;
+  for (let i in arguments) {
+    const argument = arguments[i];
+    const type = typeof argument;
+
+    if (data === undefined && (typeof argument === 'string' || Buffer.isBuffer(argument))) {
+      data = argument;
+    } else if (options === undefined && isObject(argument)) {
+      options = argument;
+    } else if (callback === undefined && type === 'function') {
+      callback = argument;
+    } else {
+      throw new CsvError('CSV_INVALID_ARGUMENT', ['Invalid argument:', `got ${JSON.stringify(argument)} at index ${i}`], options || {});
     }
+  }
 
-    const err = this.__parse(undefined, true);
+  const parser = new Parser(options);
 
-    callback(err);
-  } // Central parser implementation
+  if (callback) {
+    const records = options === undefined || options.objname === undefined ? [] : {};
+    parser.on('readable', function () {
+      let record;
 
+      while ((record = this.read()) !== null) {
+        if (options === undefined || options.objname === undefined) {
+          records.push(record);
+        } else {
+          records[record[0]] = record[1];
+        }
+      }
+    });
+    parser.on('error', function (err) {
+      callback(err, undefined, parser.__infoDataSet());
+    });
+    parser.on('end', function () {
+      callback(undefined, records, parser.__infoDataSet());
+    });
+  }
 
-  __parse(nextBuf, end) {
-    const _this$options = this.options,
-          bom = _this$options.bom,
-          comment = _this$options.comment,
-          escape = _this$options.escape,
-          from_line = _this$options.from_line,
-          info = _this$options.info,
-          ltrim = _this$options.ltrim,
-          max_record_size = _this$options.max_record_size,
-          quote = _this$options.quote,
-          raw = _this$options.raw,
-          relax = _this$options.relax,
-          rtrim = _this$options.rtrim,
-          skip_empty_lines = _this$options.skip_empty_lines,
-          to = _this$options.to,
-          to_line = _this$options.to_line;
-    let record_delimiter = this.options.record_delimiter;
-    const _this$state = this.state,
-          bomSkipped = _this$state.bomSkipped,
-          previousBuf = _this$state.previousBuf,
-          rawBuffer = _this$state.rawBuffer,
-          escapeIsQuote = _this$state.escapeIsQuote;
-    let buf;
-
-    if (previousBuf === undefined) {
-      if (nextBuf === undefined) {
-        // Handle empty string
-        this.push(null);
-        return;
-      } else {
-        buf = nextBuf;
-      }
-    } else if (previousBuf !== undefined && nextBuf === undefined) {
-      buf = previousBuf;
+  if (data !== undefined) {
+    // Give a chance for events to be registered later
+    if (typeof setImmediate === 'function') {
+      setImmediate(function () {
+        parser.write(data);
+        parser.end();
+      });
     } else {
-      buf = Buffer.concat([previousBuf, nextBuf]);
-    } // Handle UTF BOM
-
+      parser.write(data);
+      parser.end();
+    }
+  }
 
-    if (bomSkipped === false) {
-      if (bom === false) {
-        this.state.bomSkipped = true;
-      } else if (buf.length < 3) {
-        // No enough data
-        if (end === false) {
-          // Wait for more data
-          this.state.previousBuf = buf;
-          return;
-        } // skip BOM detect because data length < 3
+  return parser;
+};
 
-      } else {
-        if (bom_utf8.compare(buf, 0, 3) === 0) {
-          // Skip BOM
-          buf = buf.slice(3);
-        }
+class CsvError extends Error {
+  constructor(code, message, options, ...contexts) {
+    if (Array.isArray(message)) message = message.join(' ');
+    super(message);
 
-        this.state.bomSkipped = true;
-      }
+    if (Error.captureStackTrace !== undefined) {
+      Error.captureStackTrace(this, CsvError);
     }
 
-    const bufLen = buf.length;
-    let pos;
+    this.code = code;
 
-    for (pos = 0; pos < bufLen; pos++) {
-      // Ensure we get enough space to look ahead
-      // There should be a way to move this out of the loop
-      if (this.__needMoreData(pos, bufLen, end)) {
-        break;
+    for (const context of contexts) {
+      for (const key in context) {
+        const value = context[key];
+        this[key] = Buffer.isBuffer(value) ? value.toString(options.encoding) : value == null ? value : JSON.parse(JSON.stringify(value));
       }
+    }
+  }
 
-      if (this.state.wasRowDelimiter === true) {
-        this.info.lines++;
-
-        if (info === true && this.state.record.length === 0 && this.state.field.length === 0 && this.state.wasQuoting === false) {
-          this.state.info = Object.assign({}, this.info);
-        }
+}
 
-        this.state.wasRowDelimiter = false;
-      }
+parse.Parser = Parser;
+parse.CsvError = CsvError;
+module.exports = parse;
 
-      if (to_line !== -1 && this.info.lines > to_line) {
-        this.state.stop = true;
-        this.push(null);
-        return;
-      } // Auto discovery of record_delimiter, unix, mac and windows supported
+const underscore = function (str) {
+  return str.replace(/([A-Z])/g, function (_, match) {
+    return '_' + match.toLowerCase();
+  });
+};
 
+const isObject = function (obj) {
+  return typeof obj === 'object' && obj !== null && !Array.isArray(obj);
+};
 
-      if (this.state.quoting === false && record_delimiter.length === 0) {
-        const record_delimiterCount = this.__autoDiscoverRowDelimiter(buf, pos);
+const isRecordEmpty = function (record) {
+  return record.every(field => field == null || field.toString && field.toString().trim() === '');
+};
 
-        if (record_delimiterCount) {
-          record_delimiter = this.options.record_delimiter;
-        }
-      }
+const normalizeColumnsArray = function (columns) {
+  const normalizedColumns = [];
 
-      const chr = buf[pos];
+  for (let i = 0, l = columns.length; i < l; i++) {
+    const column = columns[i];
 
-      if (raw === true) {
-        rawBuffer.append(chr);
+    if (column === undefined || column === null || column === false) {
+      normalizedColumns[i] = {
+        disabled: true
+      };
+    } else if (typeof column === 'string') {
+      normalizedColumns[i] = {
+        name: column
+      };
+    } else if (isObject(column)) {
+      if (typeof column.name !== 'string') {
+        throw new CsvError('CSV_OPTION_COLUMNS_MISSING_NAME', ['Option columns missing name:', `property "name" is required at position ${i}`, 'when column is an object literal']);
       }
 
-      if ((chr === cr || chr === nl) && this.state.wasRowDelimiter === false) {
-        this.state.wasRowDelimiter = true;
-      } // Previous char was a valid escape char
-      // treat the current char as a regular char
+      normalizedColumns[i] = column;
+    } else {
+      throw new CsvError('CSV_INVALID_COLUMN_DEFINITION', ['Invalid column definition:', 'expect a string or a literal object,', `got ${JSON.stringify(column)} at position ${i}`]);
+    }
+  }
 
+  return normalizedColumns;
+};
 
-      if (this.state.escaping === true) {
-        this.state.escaping = false;
-      } else {
-        // Escape is only active inside quoted fields
-        // We are quoting, the char is an escape chr and there is a chr to escape
-        if (this.state.quoting === true && chr === escape && pos + 1 < bufLen) {
-          if (escapeIsQuote) {
-            if (buf[pos + 1] === quote) {
-              this.state.escaping = true;
-              continue;
-            }
-          } else {
-            this.state.escaping = true;
-            continue;
-          }
-        } // Not currently escaping and chr is a quote
-        // TODO: need to compare bytes instead of single char
+/***/ }),
 
+/***/ "./node_modules/csv-parse/lib/sync.js":
+/*!********************************************!*\
+  !*** ./node_modules/csv-parse/lib/sync.js ***!
+  \********************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-        if (this.state.commenting === false && chr === quote) {
-          if (this.state.quoting === true) {
-            const nextChr = buf[pos + 1];
+const parse = __webpack_require__(/*! . */ "./node_modules/csv-parse/lib/index.js");
 
-            const isNextChrTrimable = rtrim && this.__isCharTrimable(nextChr); // const isNextChrComment = nextChr === comment
+module.exports = function (data, options = {}) {
+  if (typeof data === 'string') {
+    data = Buffer.from(data);
+  }
 
+  const records = options && options.objname ? {} : [];
+  const parser = new parse.Parser(options);
 
-            const isNextChrComment = comment !== null && this.__compareBytes(comment, buf, pos + 1, nextChr);
+  parser.push = function (record) {
+    if (record === null) {
+      return;
+    }
 
-            const isNextChrDelimiter = this.__isDelimiter(nextChr, buf, pos + 1);
+    if (options.objname === undefined) records.push(record);else {
+      records[record[0]] = record[1];
+    }
+  };
 
-            const isNextChrRowDelimiter = record_delimiter.length === 0 ? this.__autoDiscoverRowDelimiter(buf, pos + 1) : this.__isRecordDelimiter(nextChr, buf, pos + 1); // Escape a quote
-            // Treat next char as a regular character
-            // TODO: need to compare bytes instead of single char
+  const err1 = parser.__parse(data, false);
 
-            if (chr === escape && nextChr === quote) {
-              pos++;
-            } else if (!nextChr || isNextChrDelimiter || isNextChrRowDelimiter || isNextChrComment || isNextChrTrimable) {
-              this.state.quoting = false;
-              this.state.wasQuoting = true;
-              continue;
-            } else if (relax === false) {
-              const err = this.__error(new CsvError('CSV_INVALID_CLOSING_QUOTE', ['Invalid Closing Quote:', `got "${String.fromCharCode(nextChr)}"`, `at line ${this.info.lines}`, 'instead of delimiter, row delimiter, trimable character', '(if activated) or comment'], this.__context()));
+  if (err1 !== undefined) throw err1;
 
-              if (err !== undefined) return err;
-            } else {
-              this.state.quoting = false;
-              this.state.wasQuoting = true; // continue
+  const err2 = parser.__parse(undefined, true);
 
-              this.state.field.prepend(quote);
-            }
-          } else {
-            if (this.state.field.length !== 0) {
-              // In relax mode, treat opening quote preceded by chrs as regular
-              if (relax === false) {
-                const err = this.__error(new CsvError('INVALID_OPENING_QUOTE', ['Invalid Opening Quote:', `a quote is found inside a field at line ${this.info.lines}`], this.__context(), {
-                  field: this.state.field
-                }));
+  if (err2 !== undefined) throw err2;
+  return records;
+};
 
-                if (err !== undefined) return err;
-              }
-            } else {
-              this.state.quoting = true;
-              continue;
-            }
-          }
-        }
+/***/ }),
 
-        if (this.state.quoting === false) {
-          let recordDelimiterLength = this.__isRecordDelimiter(chr, buf, pos);
+/***/ "./node_modules/csv-stringify/lib/index.js":
+/*!*************************************************!*\
+  !*** ./node_modules/csv-stringify/lib/index.js ***!
+  \*************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-          if (recordDelimiterLength !== 0) {
-            // Do not emit comments which take a full line
-            const skipCommentLine = this.state.commenting && this.state.wasQuoting === false && this.state.record.length === 0 && this.state.field.length === 0;
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
 
-            if (skipCommentLine) {
-              this.info.comment_lines++; // Skip full comment line
-            } else {
-              // Skip if line is empty and skip_empty_lines activated
-              if (skip_empty_lines === true && this.state.wasQuoting === false && this.state.record.length === 0 && this.state.field.length === 0) {
-                this.info.empty_lines++;
-                pos += recordDelimiterLength - 1;
-                continue;
-              } // Activate records emition if above from_line
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
 
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
 
-              if (this.state.enabled === false && this.info.lines + (this.state.wasRowDelimiter === true ? 1 : 0) >= from_line) {
-                this.state.enabled = true;
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
 
-                this.__resetField();
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
 
-                this.__resetRow();
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
 
-                pos += recordDelimiterLength - 1;
-                continue;
-              } else {
-                const errField = this.__onField();
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
 
-                if (errField !== undefined) return errField;
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
 
-                const errRecord = this.__onRow();
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
 
-                if (errRecord !== undefined) return errRecord;
-              }
+/*
+CSV Stringify
 
-              if (to !== -1 && this.info.records >= to) {
-                this.state.stop = true;
-                this.push(null);
-                return;
-              }
-            }
+Please look at the [project documentation](https://csv.js.org/stringify/) for
+additional information.
+*/
+const _require = __webpack_require__(/*! stream */ "stream"),
+      Transform = _require.Transform;
 
-            this.state.commenting = false;
-            pos += recordDelimiterLength - 1;
-            continue;
-          }
+const bom_utf8 = Buffer.from([239, 187, 191]);
 
-          if (this.state.commenting) {
-            continue;
-          }
+class Stringifier extends Transform {
+  constructor(opts = {}) {
+    super(_objectSpread(_objectSpread({}, {
+      writableObjectMode: true
+    }), opts));
+    const options = {};
+    let err; // Merge with user options
 
-          const commentCount = comment === null ? 0 : this.__compareBytes(comment, buf, pos, chr);
+    for (let opt in opts) {
+      options[underscore(opt)] = opts[opt];
+    }
 
-          if (commentCount !== 0) {
-            this.state.commenting = true;
-            continue;
-          }
+    if (err = this.normalize(options)) throw err;
 
-          let delimiterLength = this.__isDelimiter(chr, buf, pos);
+    switch (options.record_delimiter) {
+      case 'auto':
+        options.record_delimiter = null;
+        break;
 
-          if (delimiterLength !== 0) {
-            const errField = this.__onField();
+      case 'unix':
+        options.record_delimiter = "\n";
+        break;
 
-            if (errField !== undefined) return errField;
-            pos += delimiterLength - 1;
-            continue;
-          }
-        }
-      }
+      case 'mac':
+        options.record_delimiter = "\r";
+        break;
 
-      if (this.state.commenting === false) {
-        if (max_record_size !== 0 && this.state.record_length + this.state.field.length > max_record_size) {
-          const err = this.__error(new CsvError('CSV_MAX_RECORD_SIZE', ['Max Record Size:', 'record exceed the maximum number of tolerated bytes', `of ${max_record_size}`, `at line ${this.info.lines}`], this.__context()));
+      case 'windows':
+        options.record_delimiter = "\r\n";
+        break;
 
-          if (err !== undefined) return err;
-        }
-      }
+      case 'ascii':
+        options.record_delimiter = "\u001e";
+        break;
 
-      const lappend = ltrim === false || this.state.quoting === true || this.state.field.length !== 0 || !this.__isCharTrimable(chr); // rtrim in non quoting is handle in __onField
+      case 'unicode':
+        options.record_delimiter = "\u2028";
+        break;
+    } // Expose options
 
-      const rappend = rtrim === false || this.state.wasQuoting === false;
 
-      if (lappend === true && rappend === true) {
-        this.state.field.append(chr);
-      } else if (rtrim === true && !this.__isCharTrimable(chr)) {
-        const err = this.__error(new CsvError('CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTE', ['Invalid Closing Quote:', 'found non trimable byte after quote', `at line ${this.info.lines}`], this.__context()));
+    this.options = options; // Internal state
 
-        if (err !== undefined) return err;
-      }
-    }
+    this.state = {
+      stop: false
+    }; // Information
 
-    if (end === true) {
-      // Ensure we are not ending in a quoting state
-      if (this.state.quoting === true) {
-        const err = this.__error(new CsvError('CSV_QUOTE_NOT_CLOSED', ['Quote Not Closed:', `the parsing is finished with an opening quote at line ${this.info.lines}`], this.__context()));
+    this.info = {
+      records: 0
+    };
+  }
 
-        if (err !== undefined) return err;
-      } else {
-        // Skip last line if it has no characters
-        if (this.state.wasQuoting === true || this.state.record.length !== 0 || this.state.field.length !== 0) {
-          const errField = this.__onField();
+  normalize(options) {
+    // Normalize option `bom`
+    if (options.bom === undefined || options.bom === null || options.bom === false) {
+      options.bom = false;
+    } else if (options.bom !== true) {
+      return new CsvError('CSV_OPTION_BOOLEAN_INVALID_TYPE', ['option `bom` is optional and must be a boolean value,', `got ${JSON.stringify(options.bom)}`]);
+    } // Normalize option `delimiter`
 
-          if (errField !== undefined) return errField;
 
-          const errRecord = this.__onRow();
+    if (options.delimiter === undefined || options.delimiter === null) {
+      options.delimiter = ',';
+    } else if (Buffer.isBuffer(options.delimiter)) {
+      options.delimiter = options.delimiter.toString();
+    } else if (typeof options.delimiter !== 'string') {
+      return new CsvError('CSV_OPTION_DELIMITER_INVALID_TYPE', ['option `delimiter` must be a buffer or a string,', `got ${JSON.stringify(options.delimiter)}`]);
+    } // Normalize option `quote`
 
-          if (errRecord !== undefined) return errRecord;
-        } else if (this.state.wasRowDelimiter === true) {
-          this.info.empty_lines++;
-        } else if (this.state.commenting === true) {
-          this.info.comment_lines++;
-        }
-      }
-    } else {
-      this.state.previousBuf = buf.slice(pos);
-    }
 
-    if (this.state.wasRowDelimiter === true) {
-      this.info.lines++;
-      this.state.wasRowDelimiter = false;
-    }
-  } // Helper to test if a character is a space or a line delimiter
+    if (options.quote === undefined || options.quote === null) {
+      options.quote = '"';
+    } else if (options.quote === true) {
+      options.quote = '"';
+    } else if (options.quote === false) {
+      options.quote = '';
+    } else if (Buffer.isBuffer(options.quote)) {
+      options.quote = options.quote.toString();
+    } else if (typeof options.quote !== 'string') {
+      return new CsvError('CSV_OPTION_QUOTE_INVALID_TYPE', ['option `quote` must be a boolean, a buffer or a string,', `got ${JSON.stringify(options.quote)}`]);
+    } // Normalize option `quoted`
 
 
-  __isCharTrimable(chr) {
-    return chr === space || chr === tab || chr === cr || chr === nl || chr === np;
-  }
+    if (options.quoted === undefined || options.quoted === null) {
+      options.quoted = false;
+    } else {// todo
+    } // Normalize option `quoted_empty`
 
-  __onRow() {
-    const _this$options2 = this.options,
-          columns = _this$options2.columns,
-          columns_duplicates_to_array = _this$options2.columns_duplicates_to_array,
-          info = _this$options2.info,
-          from = _this$options2.from,
-          relax_column_count = _this$options2.relax_column_count,
-          relax_column_count_less = _this$options2.relax_column_count_less,
-          relax_column_count_more = _this$options2.relax_column_count_more,
-          raw = _this$options2.raw,
-          skip_lines_with_empty_values = _this$options2.skip_lines_with_empty_values;
-    const _this$state2 = this.state,
-          enabled = _this$state2.enabled,
-          record = _this$state2.record;
 
-    if (enabled === false) {
-      return this.__resetRow();
-    } // Convert the first line into column names
+    if (options.quoted_empty === undefined || options.quoted_empty === null) {
+      options.quoted_empty = undefined;
+    } else {// todo
+    } // Normalize option `quoted_match`
 
 
-    const recordLength = record.length;
+    if (options.quoted_match === undefined || options.quoted_match === null || options.quoted_match === false) {
+      options.quoted_match = null;
+    } else if (!Array.isArray(options.quoted_match)) {
+      options.quoted_match = [options.quoted_match];
+    }
 
-    if (columns === true) {
-      if (isRecordEmpty(record)) {
-        this.__resetRow();
+    if (options.quoted_match) {
+      for (let quoted_match of options.quoted_match) {
+        const isString = typeof quoted_match === 'string';
+        const isRegExp = quoted_match instanceof RegExp;
 
-        return;
+        if (!isString && !isRegExp) {
+          return Error(`Invalid Option: quoted_match must be a string or a regex, got ${JSON.stringify(quoted_match)}`);
+        }
       }
+    } // Normalize option `quoted_string`
 
-      return this.__firstLineToColumns(record);
-    }
-
-    if (columns === false && this.info.records === 0) {
-      this.state.expectedRecordLength = recordLength;
-    }
 
-    if (recordLength !== this.state.expectedRecordLength) {
-      if (relax_column_count === true || relax_column_count_less === true && recordLength < this.state.expectedRecordLength || relax_column_count_more === true && recordLength > this.state.expectedRecordLength) {
-        this.info.invalid_field_length++;
-      } else {
-        if (columns === false) {
-          const err = this.__error(new CsvError('CSV_INCONSISTENT_RECORD_LENGTH', ['Invalid Record Length:', `expect ${this.state.expectedRecordLength},`, `got ${recordLength} on line ${this.info.lines}`], this.__context(), {
-            record: record
-          }));
+    if (options.quoted_string === undefined || options.quoted_string === null) {
+      options.quoted_string = false;
+    } else {// todo
+    } // Normalize option `eof`
 
-          if (err !== undefined) return err;
-        } else {
-          const err = this.__error( // CSV_INVALID_RECORD_LENGTH_DONT_MATCH_COLUMNS
-          new CsvError('CSV_RECORD_DONT_MATCH_COLUMNS_LENGTH', ['Invalid Record Length:', `columns length is ${columns.length},`, // rename columns
-          `got ${recordLength} on line ${this.info.lines}`], this.__context(), {
-            record: record
-          }));
 
-          if (err !== undefined) return err;
-        }
-      }
-    }
+    if (options.eof === undefined || options.eof === null) {
+      options.eof = true;
+    } else {// todo
+    } // Normalize option `escape`
 
-    if (skip_lines_with_empty_values === true) {
-      if (isRecordEmpty(record)) {
-        this.__resetRow();
 
-        return;
-      }
+    if (options.escape === undefined || options.escape === null) {
+      options.escape = '"';
+    } else if (Buffer.isBuffer(options.escape)) {
+      options.escape = options.escape.toString();
+    } else if (typeof options.escape !== 'string') {
+      return Error(`Invalid Option: escape must be a buffer or a string, got ${JSON.stringify(options.escape)}`);
     }
 
-    if (this.state.recordHasError === true) {
-      this.__resetRow();
+    if (options.escape.length > 1) {
+      return Error(`Invalid Option: escape must be one character, got ${options.escape.length} characters`);
+    } // Normalize option `header`
 
-      this.state.recordHasError = false;
-      return;
-    }
 
-    this.info.records++;
+    if (options.header === undefined || options.header === null) {
+      options.header = false;
+    } else {// todo
+    } // Normalize option `columns`
 
-    if (from === 1 || this.info.records >= from) {
-      if (columns !== false) {
-        const obj = {}; // Transform record array to an object
 
-        for (let i = 0, l = record.length; i < l; i++) {
-          if (columns[i] === undefined || columns[i].disabled) continue; // obj[columns[i].name] = record[i]
-          // Turn duplicate columns into an array
+    options.columns = this.normalize_columns(options.columns); // Normalize option `quoted`
 
-          if (columns_duplicates_to_array === true && obj[columns[i].name]) {
-            if (Array.isArray(obj[columns[i].name])) {
-              obj[columns[i].name] = obj[columns[i].name].concat(record[i]);
-            } else {
-              obj[columns[i].name] = [obj[columns[i].name], record[i]];
-            }
-          } else {
-            obj[columns[i].name] = record[i];
-          }
-        }
+    if (options.quoted === undefined || options.quoted === null) {
+      options.quoted = false;
+    } else {// todo
+    } // Normalize option `cast`
 
-        const objname = this.options.objname;
 
-        if (objname === undefined) {
-          if (raw === true || info === true) {
-            const err = this.__push(Object.assign({
-              record: obj
-            }, raw === true ? {
-              raw: this.state.rawBuffer.toString()
-            } : {}, info === true ? {
-              info: this.state.info
-            } : {}));
+    if (options.cast === undefined || options.cast === null) {
+      options.cast = {};
+    } else {// todo
+    } // Normalize option cast.bigint
 
-            if (err) {
-              return err;
-            }
-          } else {
-            const err = this.__push(obj);
 
-            if (err) {
-              return err;
-            }
-          }
-        } else {
-          if (raw === true || info === true) {
-            const err = this.__push(Object.assign({
-              record: [obj[objname], obj]
-            }, raw === true ? {
-              raw: this.state.rawBuffer.toString()
-            } : {}, info === true ? {
-              info: this.state.info
-            } : {}));
+    if (options.cast.bigint === undefined || options.cast.bigint === null) {
+      // Cast boolean to string by default
+      options.cast.bigint = value => '' + value;
+    } // Normalize option cast.boolean
 
-            if (err) {
-              return err;
-            }
-          } else {
-            const err = this.__push([obj[objname], obj]);
 
-            if (err) {
-              return err;
-            }
-          }
-        }
-      } else {
-        if (raw === true || info === true) {
-          const err = this.__push(Object.assign({
-            record: record
-          }, raw === true ? {
-            raw: this.state.rawBuffer.toString()
-          } : {}, info === true ? {
-            info: this.state.info
-          } : {}));
+    if (options.cast.boolean === undefined || options.cast.boolean === null) {
+      // Cast boolean to string by default
+      options.cast.boolean = value => value ? '1' : '';
+    } // Normalize option cast.date
 
-          if (err) {
-            return err;
-          }
-        } else {
-          const err = this.__push(record);
 
-          if (err) {
-            return err;
-          }
-        }
-      }
-    }
+    if (options.cast.date === undefined || options.cast.date === null) {
+      // Cast date to timestamp string by default
+      options.cast.date = value => '' + value.getTime();
+    } // Normalize option cast.number
 
-    this.__resetRow();
-  }
 
-  __firstLineToColumns(record) {
-    const firstLineToHeaders = this.state.firstLineToHeaders;
+    if (options.cast.number === undefined || options.cast.number === null) {
+      // Cast number to string using native casting by default
+      options.cast.number = value => '' + value;
+    } // Normalize option cast.object
 
-    try {
-      const headers = firstLineToHeaders === undefined ? record : firstLineToHeaders.call(null, record);
 
-      if (!Array.isArray(headers)) {
-        return this.__error(new CsvError('CSV_INVALID_COLUMN_MAPPING', ['Invalid Column Mapping:', 'expect an array from column function,', `got ${JSON.stringify(headers)}`], this.__context(), {
-          headers: headers
-        }));
-      }
+    if (options.cast.object === undefined || options.cast.object === null) {
+      // Stringify object as JSON by default
+      options.cast.object = value => JSON.stringify(value);
+    } // Normalize option cast.string
 
-      const normalizedHeaders = normalizeColumnsArray(headers);
-      this.state.expectedRecordLength = normalizedHeaders.length;
-      this.options.columns = normalizedHeaders;
 
-      this.__resetRow();
+    if (options.cast.string === undefined || options.cast.string === null) {
+      // Leave string untouched
+      options.cast.string = function (value) {
+        return value;
+      };
+    } // Normalize option `record_delimiter`
 
-      return;
-    } catch (err) {
-      return err;
-    }
-  }
 
-  __resetRow() {
-    if (this.options.raw === true) {
-      this.state.rawBuffer.reset();
+    if (options.record_delimiter === undefined || options.record_delimiter === null) {
+      options.record_delimiter = '\n';
+    } else if (Buffer.isBuffer(options.record_delimiter)) {
+      options.record_delimiter = options.record_delimiter.toString();
+    } else if (typeof options.record_delimiter !== 'string') {
+      return Error(`Invalid Option: record_delimiter must be a buffer or a string, got ${JSON.stringify(options.record_delimiter)}`);
     }
-
-    this.state.record = [];
-    this.state.record_length = 0;
   }
 
-  __onField() {
-    const _this$options3 = this.options,
-          cast = _this$options3.cast,
-          rtrim = _this$options3.rtrim,
-          max_record_size = _this$options3.max_record_size;
-    const _this$state3 = this.state,
-          enabled = _this$state3.enabled,
-          wasQuoting = _this$state3.wasQuoting; // Short circuit for the from_line options
-
-    if (enabled === false) {
-      /* this.options.columns !== true && */
-      return this.__resetField();
-    }
+  _transform(chunk, encoding, callback) {
+    if (this.state.stop === true) {
+      return;
+    } // Chunk validation
 
-    let field = this.state.field.toString();
 
-    if (rtrim === true && wasQuoting === false) {
-      field = field.trimRight();
-    }
+    if (!Array.isArray(chunk) && typeof chunk !== 'object') {
+      this.state.stop = true;
+      return callback(Error(`Invalid Record: expect an array or an object, got ${JSON.stringify(chunk)}`));
+    } // Detect columns from the first record
 
-    if (cast === true) {
-      const _this$__cast = this.__cast(field),
-            _this$__cast2 = _slicedToArray(_this$__cast, 2),
-            err = _this$__cast2[0],
-            f = _this$__cast2[1];
 
-      if (err !== undefined) return err;
-      field = f;
-    }
+    if (this.info.records === 0) {
+      if (Array.isArray(chunk)) {
+        if (this.options.header === true && !this.options.columns) {
+          this.state.stop = true;
+          return callback(Error('Undiscoverable Columns: header option requires column option or object records'));
+        }
+      } else if (this.options.columns === undefined || this.options.columns === null) {
+        this.options.columns = this.normalize_columns(Object.keys(chunk));
+      }
+    } // Emit the header
 
-    this.state.record.push(field); // Increment record length if record size must not exceed a limit
 
-    if (max_record_size !== 0 && typeof field === 'string') {
-      this.state.record_length += field.length;
-    }
+    if (this.info.records === 0) {
+      this.bom();
+      this.headers();
+    } // Emit and stringify the record if an object or an array
 
-    this.__resetField();
-  }
 
-  __resetField() {
-    this.state.field.reset();
-    this.state.wasQuoting = false;
-  }
+    try {
+      this.emit('record', chunk, this.info.records);
+    } catch (err) {
+      this.state.stop = true;
+      return this.emit('error', err);
+    } // Convert the record into a string
 
-  __push(record) {
-    const on_record = this.options.on_record;
 
-    if (on_record !== undefined) {
-      const context = this.__context();
+    let chunk_string;
 
-      try {
-        record = on_record.call(null, record, context);
-      } catch (err) {
-        return err;
+    if (this.options.eof) {
+      chunk_string = this.stringify(chunk);
+
+      if (chunk_string === undefined) {
+        return;
+      } else {
+        chunk_string = chunk_string + this.options.record_delimiter;
       }
+    } else {
+      chunk_string = this.stringify(chunk);
 
-      if (record === undefined || record === null) {
+      if (chunk_string === undefined) {
         return;
+      } else {
+        if (this.options.header || this.info.records) {
+          chunk_string = this.options.record_delimiter + chunk_string;
+        }
       }
-    }
+    } // Emit the csv
 
-    this.push(record);
-  } // Return a tuple with the error and the casted value
 
+    this.info.records++;
+    this.push(chunk_string);
+    callback();
+  }
 
-  __cast(field) {
-    const _this$options4 = this.options,
-          columns = _this$options4.columns,
-          relax_column_count = _this$options4.relax_column_count;
-    const isColumns = Array.isArray(columns); // Dont loose time calling cast
-    // because the final record is an object
-    // and this field can't be associated to a key present in columns
+  _flush(callback) {
+    if (this.info.records === 0) {
+      this.bom();
+      this.headers();
+    }
 
-    if (isColumns === true && relax_column_count && this.options.columns.length <= this.state.record.length) {
-      return [undefined, undefined];
+    callback();
+  }
+
+  stringify(chunk, chunkIsHeader = false) {
+    if (typeof chunk !== 'object') {
+      return chunk;
     }
 
-    const context = this.__context();
+    const _this$options = this.options,
+          columns = _this$options.columns,
+          header = _this$options.header;
+    const record = []; // Record is an array
 
-    if (this.state.castField !== null) {
-      try {
-        return [undefined, this.state.castField.call(null, field, context)];
-      } catch (err) {
-        return [err];
+    if (Array.isArray(chunk)) {
+      // We are getting an array but the user has specified output columns. In
+      // this case, we respect the columns indexes
+      if (columns) {
+        chunk.splice(columns.length);
+      } // Cast record elements
+
+
+      for (let i = 0; i < chunk.length; i++) {
+        const field = chunk[i];
+
+        const _this$__cast = this.__cast(field, {
+          index: i,
+          column: i,
+          records: this.info.records,
+          header: chunkIsHeader
+        }),
+              _this$__cast2 = _slicedToArray(_this$__cast, 2),
+              err = _this$__cast2[0],
+              value = _this$__cast2[1];
+
+        if (err) {
+          this.emit('error', err);
+          return;
+        }
+
+        record[i] = [value, field];
+      } // Record is a literal object
+
+    } else {
+      if (columns) {
+        for (let i = 0; i < columns.length; i++) {
+          const field = get(chunk, columns[i].key);
+
+          const _this$__cast3 = this.__cast(field, {
+            index: i,
+            column: columns[i].key,
+            records: this.info.records,
+            header: chunkIsHeader
+          }),
+                _this$__cast4 = _slicedToArray(_this$__cast3, 2),
+                err = _this$__cast4[0],
+                value = _this$__cast4[1];
+
+          if (err) {
+            this.emit('error', err);
+            return;
+          }
+
+          record[i] = [value, field];
+        }
+      } else {
+        for (let column of chunk) {
+          const field = chunk[column];
+
+          const _this$__cast5 = this.__cast(field, {
+            index: i,
+            column: columns[i].key,
+            records: this.info.records,
+            header: chunkIsHeader
+          }),
+                _this$__cast6 = _slicedToArray(_this$__cast5, 2),
+                err = _this$__cast6[0],
+                value = _this$__cast6[1];
+
+          if (err) {
+            this.emit('error', err);
+            return;
+          }
+
+          record.push([value, field]);
+        }
       }
     }
 
-    if (this.__isFloat(field)) {
-      return [undefined, parseFloat(field)];
-    } else if (this.options.cast_date !== false) {
-      return [undefined, this.options.cast_date.call(null, field, context)];
-    }
+    let csvrecord = '';
 
-    return [undefined, field];
-  } // Keep it in case we implement the `cast_int` option
-  // __isInt(value){
-  //   // return Number.isInteger(parseInt(value))
-  //   // return !isNaN( parseInt( obj ) );
-  //   return /^(\-|\+)?[1-9][0-9]*$/.test(value)
-  // }
+    for (let i = 0; i < record.length; i++) {
+      let options, err;
 
+      let _record$i = _slicedToArray(record[i], 2),
+          value = _record$i[0],
+          field = _record$i[1];
 
-  __isFloat(value) {
-    return value - parseFloat(value) + 1 >= 0; // Borrowed from jquery
-  }
+      if (typeof value === "string") {
+        options = this.options;
+      } else if (isObject(value)) {
+        // let { value, ...options } = value
+        options = value;
+        value = options.value;
+        delete options.value;
 
-  __compareBytes(sourceBuf, targetBuf, pos, firtByte) {
-    if (sourceBuf[0] !== firtByte) return 0;
-    const sourceLength = sourceBuf.length;
+        if (typeof value !== "string" && value !== undefined && value !== null) {
+          this.emit("error", Error(`Invalid Casting Value: returned value must return a string, null or undefined, got ${JSON.stringify(value)}`));
+          return;
+        }
 
-    for (let i = 1; i < sourceLength; i++) {
-      if (sourceBuf[i] !== targetBuf[pos + i]) return 0;
-    }
+        options = _objectSpread(_objectSpread({}, this.options), options);
 
-    return sourceLength;
-  }
+        if (err = this.normalize(options)) {
+          this.emit("error", err);
+          return;
+        }
+      } else if (value === undefined || value === null) {
+        options = this.options;
+      } else {
+        this.emit("error", Error(`Invalid Casting Value: returned value must return a string, an object, null or undefined, got ${JSON.stringify(value)}`));
+        return;
+      }
 
-  __needMoreData(i, bufLen, end) {
-    if (end) {
-      return false;
-    }
+      const _options = options,
+            delimiter = _options.delimiter,
+            escape = _options.escape,
+            quote = _options.quote,
+            quoted = _options.quoted,
+            quoted_empty = _options.quoted_empty,
+            quoted_string = _options.quoted_string,
+            quoted_match = _options.quoted_match,
+            record_delimiter = _options.record_delimiter;
 
-    const _this$options5 = this.options,
-          comment = _this$options5.comment,
-          delimiter = _this$options5.delimiter;
-    const _this$state4 = this.state,
-          quoting = _this$state4.quoting,
-          recordDelimiterMaxLength = _this$state4.recordDelimiterMaxLength;
-    const numOfCharLeft = bufLen - i - 1;
-    const requiredLength = Math.max( // Skip if the remaining buffer smaller than comment
-    comment ? comment.length : 0, // Skip if the remaining buffer smaller than row delimiter
-    recordDelimiterMaxLength, // Skip if the remaining buffer can be row delimiter following the closing quote
-    // 1 is for quote.length
-    quoting ? 1 + recordDelimiterMaxLength : 0, // Skip if the remaining buffer can be delimiter
-    delimiter.length, // Skip if the remaining buffer can be escape sequence
-    // 1 is for escape.length
-    1);
-    return numOfCharLeft < requiredLength;
-  }
+      if (value) {
+        if (typeof value !== 'string') {
+          this.emit("error", Error(`Formatter must return a string, null or undefined, got ${JSON.stringify(value)}`));
+          return null;
+        }
 
-  __isDelimiter(chr, buf, pos) {
-    const delimiter = this.options.delimiter;
+        const containsdelimiter = delimiter.length && value.indexOf(delimiter) >= 0;
+        const containsQuote = quote !== '' && value.indexOf(quote) >= 0;
+        const containsEscape = value.indexOf(escape) >= 0 && escape !== quote;
+        const containsRecordDelimiter = value.indexOf(record_delimiter) >= 0;
+        const quotedString = quoted_string && typeof field === 'string';
+        let quotedMatch = quoted_match && quoted_match.filter(quoted_match => {
+          if (typeof quoted_match === 'string') {
+            return value.indexOf(quoted_match) !== -1;
+          } else {
+            return quoted_match.test(value);
+          }
+        });
+        quotedMatch = quotedMatch && quotedMatch.length > 0;
+        const shouldQuote = containsQuote === true || containsdelimiter || containsRecordDelimiter || quoted || quotedString || quotedMatch;
 
-    loop1: for (let i = 0; i < delimiter.length; i++) {
-      const del = delimiter[i];
+        if (shouldQuote === true && containsEscape === true) {
+          const regexp = escape === '\\' ? new RegExp(escape + escape, 'g') : new RegExp(escape, 'g');
+          value = value.replace(regexp, escape + escape);
+        }
 
-      if (del[0] === chr) {
-        for (let j = 1; j < del.length; j++) {
-          if (del[j] !== buf[pos + j]) continue loop1;
+        if (containsQuote === true) {
+          const regexp = new RegExp(quote, 'g');
+          value = value.replace(regexp, escape + quote);
         }
 
-        return del.length;
+        if (shouldQuote === true) {
+          value = quote + value + quote;
+        }
+
+        csvrecord += value;
+      } else if (quoted_empty === true || field === '' && quoted_string === true && quoted_empty !== false) {
+        csvrecord += quote + quote;
+      }
+
+      if (i !== record.length - 1) {
+        csvrecord += delimiter;
       }
     }
 
-    return 0;
+    return csvrecord;
   }
 
-  __isRecordDelimiter(chr, buf, pos) {
-    const record_delimiter = this.options.record_delimiter;
-    const recordDelimiterLength = record_delimiter.length;
+  bom() {
+    if (this.options.bom !== true) {
+      return;
+    }
 
-    loop1: for (let i = 0; i < recordDelimiterLength; i++) {
-      const rd = record_delimiter[i];
-      const rdLength = rd.length;
+    this.push(bom_utf8);
+  }
 
-      if (rd[0] !== chr) {
-        continue;
-      }
+  headers() {
+    if (this.options.header === false) {
+      return;
+    }
 
-      for (let j = 1; j < rdLength; j++) {
-        if (rd[j] !== buf[pos + j]) {
-          continue loop1;
-        }
-      }
+    if (this.options.columns === undefined) {
+      return;
+    }
 
-      return rd.length;
+    let headers = this.options.columns.map(column => column.header);
+
+    if (this.options.eof) {
+      headers = this.stringify(headers, true) + this.options.record_delimiter;
+    } else {
+      headers = this.stringify(headers);
     }
 
-    return 0;
+    this.push(headers);
   }
 
-  __autoDiscoverRowDelimiter(buf, pos) {
-    const chr = buf[pos];
+  __cast(value, context) {
+    const type = typeof value;
 
-    if (chr === cr) {
-      if (buf[pos + 1] === nl) {
-        this.options.record_delimiter.push(Buffer.from('\r\n'));
-        this.state.recordDelimiterMaxLength = 2;
-        return 2;
+    try {
+      if (type === 'string') {
+        // Fine for 99% of the cases
+        return [undefined, this.options.cast.string(value, context)];
+      } else if (type === 'bigint') {
+        return [undefined, this.options.cast.bigint(value, context)];
+      } else if (type === 'number') {
+        return [undefined, this.options.cast.number(value, context)];
+      } else if (type === 'boolean') {
+        return [undefined, this.options.cast.boolean(value, context)];
+      } else if (value instanceof Date) {
+        return [undefined, this.options.cast.date(value, context)];
+      } else if (type === 'object' && value !== null) {
+        return [undefined, this.options.cast.object(value, context)];
       } else {
-        this.options.record_delimiter.push(Buffer.from('\r'));
-        this.state.recordDelimiterMaxLength = 1;
-        return 1;
+        return [undefined, value, value];
       }
-    } else if (chr === nl) {
-      this.options.record_delimiter.push(Buffer.from('\n'));
-      this.state.recordDelimiterMaxLength = 1;
-      return 1;
+    } catch (err) {
+      return [err];
     }
-
-    return 0;
   }
 
-  __error(msg) {
-    const skip_lines_with_error = this.options.skip_lines_with_error;
-    const err = typeof msg === 'string' ? new Error(msg) : msg;
-
-    if (skip_lines_with_error) {
-      this.state.recordHasError = true;
-      this.emit('skip', err);
+  normalize_columns(columns) {
+    if (columns === undefined || columns === null) {
       return undefined;
+    }
+
+    if (typeof columns !== 'object') {
+      throw Error('Invalid option "columns": expect an array or an object');
+    }
+
+    if (!Array.isArray(columns)) {
+      const newcolumns = [];
+
+      for (let k in columns) {
+        newcolumns.push({
+          key: k,
+          header: columns[k]
+        });
+      }
+
+      columns = newcolumns;
     } else {
-      return err;
+      const newcolumns = [];
+
+      for (let column of columns) {
+        if (typeof column === 'string') {
+          newcolumns.push({
+            key: column,
+            header: column
+          });
+        } else if (typeof column === 'object' && column !== undefined && !Array.isArray(column)) {
+          if (!column.key) {
+            throw Error('Invalid column definition: property "key" is required');
+          }
+
+          if (column.header === undefined) {
+            column.header = column.key;
+          }
+
+          newcolumns.push(column);
+        } else {
+          throw Error('Invalid column definition: expect a string or an object');
+        }
+      }
+
+      columns = newcolumns;
     }
-  }
 
-  __context() {
-    const columns = this.options.columns;
-    const isColumns = Array.isArray(columns);
-    return {
-      column: isColumns === true ? columns.length > this.state.record.length ? columns[this.state.record.length].name : null : this.state.record.length,
-      empty_lines: this.info.empty_lines,
-      header: columns === true,
-      index: this.state.record.length,
-      invalid_field_length: this.info.invalid_field_length,
-      quoting: this.state.wasQuoting,
-      lines: this.info.lines,
-      records: this.info.records
-    };
+    return columns;
   }
 
 }
 
-const parse = function () {
+const stringify = function () {
   let data, options, callback;
 
   for (let i in arguments) {
     const argument = arguments[i];
     const type = typeof argument;
 
-    if (data === undefined && (typeof argument === 'string' || Buffer.isBuffer(argument))) {
+    if (data === undefined && Array.isArray(argument)) {
       data = argument;
     } else if (options === undefined && isObject(argument)) {
       options = argument;
@@ -12436,26 +11750,22 @@ const parse = function () {
     }
   }
 
-  const parser = new Parser(options);
+  const stringifier = new Stringifier(options);
 
   if (callback) {
-    const records = options === undefined || options.objname === undefined ? [] : {};
-    parser.on('readable', function () {
-      let record;
+    const chunks = [];
+    stringifier.on('readable', function () {
+      let chunk;
 
-      while ((record = this.read()) !== null) {
-        if (options === undefined || options.objname === undefined) {
-          records.push(record);
-        } else {
-          records[record[0]] = record[1];
-        }
+      while ((chunk = this.read()) !== null) {
+        chunks.push(chunk);
       }
     });
-    parser.on('error', function (err) {
-      callback(err, undefined, parser.info);
+    stringifier.on('error', function (err) {
+      callback(err);
     });
-    parser.on('end', function () {
-      callback(undefined, records, parser.info);
+    stringifier.on('end', function () {
+      callback(undefined, chunks.join(''));
     });
   }
 
@@ -12463,16 +11773,22 @@ const parse = function () {
     // Give a chance for events to be registered later
     if (typeof setImmediate === 'function') {
       setImmediate(function () {
-        parser.write(data);
-        parser.end();
+        for (let record of data) {
+          stringifier.write(record);
+        }
+
+        stringifier.end();
       });
     } else {
-      parser.write(data);
-      parser.end();
+      for (let record of data) {
+        stringifier.write(record);
+      }
+
+      stringifier.end();
     }
   }
 
-  return parser;
+  return stringifier;
 };
 
 class CsvError extends Error {
@@ -12496,994 +11812,172 @@ class CsvError extends Error {
 
 }
 
-parse.Parser = Parser;
-parse.CsvError = CsvError;
-module.exports = parse;
-
-const underscore = function (str) {
-  return str.replace(/([A-Z])/g, function (_, match) {
-    return '_' + match.toLowerCase();
-  });
-};
+stringify.Stringifier = Stringifier;
+stringify.CsvError = CsvError;
+module.exports = stringify;
 
 const isObject = function (obj) {
   return typeof obj === 'object' && obj !== null && !Array.isArray(obj);
 };
 
-const isRecordEmpty = function (record) {
-  return record.every(field => field == null || field.toString && field.toString().trim() === '');
+const underscore = function (str) {
+  return str.replace(/([A-Z])/g, function (_, match) {
+    return '_' + match.toLowerCase();
+  });
+}; // Lodash implementation of `get`
+
+
+const charCodeOfDot = '.'.charCodeAt(0);
+const reEscapeChar = /\\(\\)?/g;
+const rePropName = RegExp( // Match anything that isn't a dot or bracket.
+'[^.[\\]]+' + '|' + // Or match property names within brackets.
+'\\[(?:' + // Match a non-string expression.
+'([^"\'][^[]*)' + '|' + // Or match strings (supports escaping characters).
+'(["\'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2' + ')\\]' + '|' + // Or match "" as the space between consecutive dots or empty brackets.
+'(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))', 'g');
+const reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/;
+const reIsPlainProp = /^\w*$/;
+
+const getTag = function (value) {
+  if (!value) value === undefined ? '[object Undefined]' : '[object Null]';
+  return Object.prototype.toString.call(value);
 };
 
-const normalizeColumnsArray = function (columns) {
-  const normalizedColumns = [];
-
-  for (let i = 0, l = columns.length; i < l; i++) {
-    const column = columns[i];
+const isKey = function (value, object) {
+  if (Array.isArray(value)) {
+    return false;
+  }
 
-    if (column === undefined || column === null || column === false) {
-      normalizedColumns[i] = {
-        disabled: true
-      };
-    } else if (typeof column === 'string') {
-      normalizedColumns[i] = {
-        name: column
-      };
-    } else if (isObject(column)) {
-      if (typeof column.name !== 'string') {
-        throw new CsvError('CSV_OPTION_COLUMNS_MISSING_NAME', ['Option columns missing name:', `property "name" is required at position ${i}`, 'when column is an object literal']);
-      }
+  const type = typeof value;
 
-      normalizedColumns[i] = column;
-    } else {
-      throw new CsvError('CSV_INVALID_COLUMN_DEFINITION', ['Invalid column definition:', 'expect a string or a literal object,', `got ${JSON.stringify(column)} at position ${i}`]);
-    }
+  if (type === 'number' || type === 'symbol' || type === 'boolean' || !value || isSymbol(value)) {
+    return true;
   }
 
-  return normalizedColumns;
+  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);
 };
 
-/***/ }),
-
-/***/ "./node_modules/csv-parse/lib/sync.js":
-/*!********************************************!*\
-  !*** ./node_modules/csv-parse/lib/sync.js ***!
-  \********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+const isSymbol = function (value) {
+  const type = typeof value;
+  return type === 'symbol' || type === 'object' && value && getTag(value) === '[object Symbol]';
+};
 
-const parse = __webpack_require__(/*! . */ "./node_modules/csv-parse/lib/index.js");
+const stringToPath = function (string) {
+  const result = [];
 
-module.exports = function (data, options = {}) {
-  if (typeof data === 'string') {
-    data = Buffer.from(data);
+  if (string.charCodeAt(0) === charCodeOfDot) {
+    result.push('');
   }
 
-  const records = options && options.objname ? {} : [];
-  const parser = new parse.Parser(options);
+  string.replace(rePropName, function (match, expression, quote, subString) {
+    let key = match;
 
-  parser.push = function (record) {
-    if (record === null) {
-      return;
+    if (quote) {
+      key = subString.replace(reEscapeChar, '$1');
+    } else if (expression) {
+      key = expression.trim();
     }
 
-    if (options.objname === undefined) records.push(record);else {
-      records[record[0]] = record[1];
-    }
-  };
+    result.push(key);
+  });
+  return result;
+};
 
-  const err1 = parser.__parse(data, false);
+const castPath = function (value, object) {
+  if (Array.isArray(value)) {
+    return value;
+  } else {
+    return isKey(value, object) ? [value] : stringToPath(value);
+  }
+};
 
-  if (err1 !== undefined) throw err1;
+const toKey = function (value) {
+  if (typeof value === 'string' || isSymbol(value)) return value;
+  const result = `${value}`;
+  return result == '0' && 1 / value == -INFINITY ? '-0' : result;
+};
 
-  const err2 = parser.__parse(undefined, true);
+const get = function (object, path) {
+  path = castPath(path, object);
+  let index = 0;
+  const length = path.length;
 
-  if (err2 !== undefined) throw err2;
-  return records;
+  while (object != null && index < length) {
+    object = object[toKey(path[index++])];
+  }
+
+  return index && index === length ? object : undefined;
 };
 
 /***/ }),
 
-/***/ "./node_modules/csv-stringify/lib/index.js":
-/*!*************************************************!*\
-  !*** ./node_modules/csv-stringify/lib/index.js ***!
-  \*************************************************/
+/***/ "./node_modules/csv-stringify/lib/sync.js":
+/*!************************************************!*\
+  !*** ./node_modules/csv-stringify/lib/sync.js ***!
+  \************************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-const _excluded = ["value"];
+const stringify = __webpack_require__(/*! . */ "./node_modules/csv-stringify/lib/index.js");
 
-function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
-
-function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
-
-function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
-
-function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
-
-function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
-
-function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
-
-function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
-
-function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
-
-function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
-
-function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
-
-function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
-
-// Generated by CoffeeScript 2.4.1
-// # CSV Stringifier
-// Please look at the [project documentation](https://csv.js.org/stringify/) for additional
-// information.
-var Stringifier, castPath, charCodeOfDot, get, getTag, isKey, isObject, isSymbol, reEscapeChar, reIsDeepProp, reIsPlainProp, rePropName, stream, stringToPath, toKey, underscore, util;
-stream = __webpack_require__(/*! stream */ "stream");
-util = __webpack_require__(/*! util */ "util"); // ## Usage
-// This module export a function as its main entry point and return a transform
-// stream.
-// Refers to the [official prject documentation](http://csv.js.org/stringify/)
-// on how to call this function.
-
-module.exports = function () {
-  var callback, chunks, data, options, stringifier;
-
-  if (arguments.length === 3) {
-    data = arguments[0];
-    options = arguments[1];
-    callback = arguments[2];
-  } else if (arguments.length === 2) {
-    if (Array.isArray(arguments[0])) {
-      data = arguments[0];
-    } else {
-      options = arguments[0];
-    }
+const _require = __webpack_require__(/*! string_decoder */ "string_decoder"),
+      StringDecoder = _require.StringDecoder;
 
-    if (typeof arguments[1] === 'function') {
-      callback = arguments[1];
-    } else {
-      options = arguments[1];
-    }
-  } else if (arguments.length === 1) {
-    if (typeof arguments[0] === 'function') {
-      callback = arguments[0];
-    } else if (Array.isArray(arguments[0])) {
-      data = arguments[0];
-    } else {
-      options = arguments[0];
-    }
-  }
+module.exports = function (records, options = {}) {
+  const data = [];
 
-  if (options == null) {
-    options = {};
+  if (Buffer.isBuffer(records)) {
+    const decoder = new StringDecoder();
+    records = decoder.write(records);
   }
 
-  stringifier = new Stringifier(options);
-
-  if (data) {
-    process.nextTick(function () {
-      var d, j, len;
-
-      for (j = 0, len = data.length; j < len; j++) {
-        d = data[j];
-        stringifier.write(d);
-      }
-
-      return stringifier.end();
-    });
+  function onData(record) {
+    if (record) {
+      data.push(record.toString());
+    }
   }
 
-  if (callback) {
-    chunks = [];
-    stringifier.on('readable', function () {
-      var chunk, results;
-      results = [];
-
-      while (chunk = stringifier.read()) {
-        results.push(chunks.push(chunk));
-      }
+  let stringifier = new stringify.Stringifier(options);
+  stringifier.on('data', onData);
 
-      return results;
-    });
-    stringifier.on('error', function (err) {
-      return callback(err);
-    });
-    stringifier.on('end', function () {
-      return callback(null, chunks.join(''));
-    });
+  for (let record of records) {
+    stringifier.write(record);
   }
 
-  return stringifier;
-}; // You can also use *util.promisify* native function (Node.js 8+) in order to wrap callbacks into promises for more convenient use when source is a readable stream and you are OK with storing entire result set in memory:
-// ```
-// const { promisify } = require('util');
-// const csv = require('csv');
-// const stringifyAsync = promisify(csv.stringify);
-// //returns promise
-// function generateCsv(sourceData) {
-//     return stringifyAsync(sourceData);
-// }
-// ```
-// ## `Stringifier([options])`
-// Options are documented [here](http://csv.adaltas.com/stringify/).
-
-
-Stringifier = class Stringifier extends stream.Transform {
-  constructor(opts = {}) {
-    var base, base1, base2, base3, base4, isRegExp, isString, j, k, len, options, quoted_match, ref, v;
-    super(_objectSpread(_objectSpread({}, {
-      writableObjectMode: true
-    }), opts));
-    options = {};
+  stringifier.end();
+  stringifier.off('data', onData);
+  return data.join('');
+};
 
-    for (k in opts) {
-      v = opts[k]; // Immutable options and camelcase conversion
+/***/ }),
 
-      options[underscore(k)] = v;
-    } // Normalize option `delimiter`
+/***/ "./node_modules/currency-formatter/currencies.json":
+/*!*********************************************************!*\
+  !*** ./node_modules/currency-formatter/currencies.json ***!
+  \*********************************************************/
+/*! exports provided: AED, AFN, ALL, AMD, ANG, AOA, ARS, AUD, AWG, AZN, BAM, BBD, BDT, BGN, BHD, BIF, BMD, BND, BOB, BRL, BSD, BTC, BTN, BWP, BYR, BZD, CAD, CDF, CHF, CLP, CNY, COP, CRC, CUC, CUP, CVE, CZK, DJF, DKK, DOP, DZD, EGP, ERN, ETB, EUR, FJD, FKP, GBP, GEL, GHS, GIP, GMD, GNF, GTQ, GYD, HKD, HNL, HRK, HTG, HUF, IDR, ILS, INR, IQD, IRR, ISK, JMD, JOD, JPY, KES, KGS, KHR, KMF, KPW, KRW, KWD, KYD, KZT, LAK, LBP, LKR, LRD, LSL, LYD, MAD, MDL, MGA, MKD, MMK, MNT, MOP, MRO, MTL, MUR, MVR, MWK, MXN, MYR, MZN, NAD, NGN, NIO, NOK, NPR, NZD, OMR, PAB, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RUB, RWF, SAR, SBD, SCR, SDD, SDG, SEK, SGD, SHP, SLL, SOS, SRD, STD, SVC, SYP, SZL, THB, TJS, TMT, TND, TOP, TRY, TTD, TVD, TWD, TZS, UAH, UGX, USD, UYU, UZS, VEB, VEF, VND, VUV, WST, XAF, XCD, XBT, XOF, XPF, YER, ZAR, ZMW, WON, default */
+/***/ (function(module) {
 
+module.exports = JSON.parse("{\"AED\":{\"code\":\"AED\",\"symbol\":\"د.إ.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"AFN\":{\"code\":\"AFN\",\"symbol\":\"؋\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"ALL\":{\"code\":\"ALL\",\"symbol\":\"Lek\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"AMD\":{\"code\":\"AMD\",\"symbol\":\"֏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"ANG\":{\"code\":\"ANG\",\"symbol\":\"ƒ\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"AOA\":{\"code\":\"AOA\",\"symbol\":\"Kz\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"ARS\":{\"code\":\"ARS\",\"symbol\":\"$\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"AUD\":{\"code\":\"AUD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"AWG\":{\"code\":\"AWG\",\"symbol\":\"ƒ\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"AZN\":{\"code\":\"AZN\",\"symbol\":\"₼\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"BAM\":{\"code\":\"BAM\",\"symbol\":\"КМ\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"BBD\":{\"code\":\"BBD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"BDT\":{\"code\":\"BDT\",\"symbol\":\"৳\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":0},\"BGN\":{\"code\":\"BGN\",\"symbol\":\"лв.\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"BHD\":{\"code\":\"BHD\",\"symbol\":\"د.ب.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":3},\"BIF\":{\"code\":\"BIF\",\"symbol\":\"FBu\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"BMD\":{\"code\":\"BMD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"BND\":{\"code\":\"BND\",\"symbol\":\"$\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"BOB\":{\"code\":\"BOB\",\"symbol\":\"Bs\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"BRL\":{\"code\":\"BRL\",\"symbol\":\"R$\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"BSD\":{\"code\":\"BSD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"BTC\":{\"code\":\"BTC\",\"symbol\":\"Ƀ\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":8},\"BTN\":{\"code\":\"BTN\",\"symbol\":\"Nu.\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":1},\"BWP\":{\"code\":\"BWP\",\"symbol\":\"P\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"BYR\":{\"code\":\"BYR\",\"symbol\":\"р.\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"BZD\":{\"code\":\"BZD\",\"symbol\":\"BZ$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"CAD\":{\"code\":\"CAD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"CDF\":{\"code\":\"CDF\",\"symbol\":\"FC\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"CHF\":{\"code\":\"CHF\",\"symbol\":\"CHF\",\"thousandsSeparator\":\"'\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"CLP\":{\"code\":\"CLP\",\"symbol\":\"$\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"CNY\":{\"code\":\"CNY\",\"symbol\":\"¥\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"COP\":{\"code\":\"COP\",\"symbol\":\"$\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"CRC\":{\"code\":\"CRC\",\"symbol\":\"₡\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"CUC\":{\"code\":\"CUC\",\"symbol\":\"CUC\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"CUP\":{\"code\":\"CUP\",\"symbol\":\"$MN\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"CVE\":{\"code\":\"CVE\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"CZK\":{\"code\":\"CZK\",\"symbol\":\"Kč\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"DJF\":{\"code\":\"DJF\",\"symbol\":\"Fdj\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"DKK\":{\"code\":\"DKK\",\"symbol\":\"kr.\",\"thousandsSeparator\":\"\",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"DOP\":{\"code\":\"DOP\",\"symbol\":\"RD$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"DZD\":{\"code\":\"DZD\",\"symbol\":\"د.ج.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"EGP\":{\"code\":\"EGP\",\"symbol\":\"ج.م.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"ERN\":{\"code\":\"ERN\",\"symbol\":\"Nfk\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"ETB\":{\"code\":\"ETB\",\"symbol\":\"ETB\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"EUR\":{\"code\":\"EUR\",\"symbol\":\"€\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"FJD\":{\"code\":\"FJD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"FKP\":{\"code\":\"FKP\",\"symbol\":\"£\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"GBP\":{\"code\":\"GBP\",\"symbol\":\"£\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"GEL\":{\"code\":\"GEL\",\"symbol\":\"Lari\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"GHS\":{\"code\":\"GHS\",\"symbol\":\"₵\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"GIP\":{\"code\":\"GIP\",\"symbol\":\"£\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"GMD\":{\"code\":\"GMD\",\"symbol\":\"D\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"GNF\":{\"code\":\"GNF\",\"symbol\":\"FG\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"GTQ\":{\"code\":\"GTQ\",\"symbol\":\"Q\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"GYD\":{\"code\":\"GYD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"HKD\":{\"code\":\"HKD\",\"symbol\":\"HK$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"HNL\":{\"code\":\"HNL\",\"symbol\":\"L.\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"HRK\":{\"code\":\"HRK\",\"symbol\":\"kn\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"HTG\":{\"code\":\"HTG\",\"symbol\":\"G\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"HUF\":{\"code\":\"HUF\",\"symbol\":\"Ft\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"IDR\":{\"code\":\"IDR\",\"symbol\":\"Rp\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"ILS\":{\"code\":\"ILS\",\"symbol\":\"₪\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"INR\":{\"code\":\"INR\",\"symbol\":\"₹\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"IQD\":{\"code\":\"IQD\",\"symbol\":\"د.ع.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"IRR\":{\"code\":\"IRR\",\"symbol\":\"﷼\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\"/\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"ISK\":{\"code\":\"ISK\",\"symbol\":\"kr.\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":0},\"JMD\":{\"code\":\"JMD\",\"symbol\":\"J$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"JOD\":{\"code\":\"JOD\",\"symbol\":\"د.ا.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":3},\"JPY\":{\"code\":\"JPY\",\"symbol\":\"¥\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"KES\":{\"code\":\"KES\",\"symbol\":\"KSh\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"KGS\":{\"code\":\"KGS\",\"symbol\":\"сом\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\"-\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"KHR\":{\"code\":\"KHR\",\"symbol\":\"៛\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"KMF\":{\"code\":\"KMF\",\"symbol\":\"CF\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"KPW\":{\"code\":\"KPW\",\"symbol\":\"₩\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"KRW\":{\"code\":\"KRW\",\"symbol\":\"₩\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"KWD\":{\"code\":\"KWD\",\"symbol\":\"د.ك.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":3},\"KYD\":{\"code\":\"KYD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"KZT\":{\"code\":\"KZT\",\"symbol\":\"₸\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\"-\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"LAK\":{\"code\":\"LAK\",\"symbol\":\"₭\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"LBP\":{\"code\":\"LBP\",\"symbol\":\"ل.ل.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"LKR\":{\"code\":\"LKR\",\"symbol\":\"₨\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":0},\"LRD\":{\"code\":\"LRD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"LSL\":{\"code\":\"LSL\",\"symbol\":\"M\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"LYD\":{\"code\":\"LYD\",\"symbol\":\"د.ل.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":3},\"MAD\":{\"code\":\"MAD\",\"symbol\":\"د.م.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"MDL\":{\"code\":\"MDL\",\"symbol\":\"lei\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"MGA\":{\"code\":\"MGA\",\"symbol\":\"Ar\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"MKD\":{\"code\":\"MKD\",\"symbol\":\"ден.\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"MMK\":{\"code\":\"MMK\",\"symbol\":\"K\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"MNT\":{\"code\":\"MNT\",\"symbol\":\"₮\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"MOP\":{\"code\":\"MOP\",\"symbol\":\"MOP$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"MRO\":{\"code\":\"MRO\",\"symbol\":\"UM\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"MTL\":{\"code\":\"MTL\",\"symbol\":\"₤\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"MUR\":{\"code\":\"MUR\",\"symbol\":\"₨\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"MVR\":{\"code\":\"MVR\",\"symbol\":\"MVR\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":1},\"MWK\":{\"code\":\"MWK\",\"symbol\":\"MK\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"MXN\":{\"code\":\"MXN\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"MYR\":{\"code\":\"MYR\",\"symbol\":\"RM\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"MZN\":{\"code\":\"MZN\",\"symbol\":\"MT\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"NAD\":{\"code\":\"NAD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"NGN\":{\"code\":\"NGN\",\"symbol\":\"₦\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"NIO\":{\"code\":\"NIO\",\"symbol\":\"C$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"NOK\":{\"code\":\"NOK\",\"symbol\":\"kr\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"NPR\":{\"code\":\"NPR\",\"symbol\":\"₨\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"NZD\":{\"code\":\"NZD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"OMR\":{\"code\":\"OMR\",\"symbol\":\"﷼\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":3},\"PAB\":{\"code\":\"PAB\",\"symbol\":\"B/.\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"PEN\":{\"code\":\"PEN\",\"symbol\":\"S/.\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"PGK\":{\"code\":\"PGK\",\"symbol\":\"K\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"PHP\":{\"code\":\"PHP\",\"symbol\":\"₱\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"PKR\":{\"code\":\"PKR\",\"symbol\":\"₨\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"PLN\":{\"code\":\"PLN\",\"symbol\":\"zł\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"PYG\":{\"code\":\"PYG\",\"symbol\":\"₲\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"QAR\":{\"code\":\"QAR\",\"symbol\":\"﷼\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"RON\":{\"code\":\"RON\",\"symbol\":\"lei\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"RSD\":{\"code\":\"RSD\",\"symbol\":\"Дин.\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"RUB\":{\"code\":\"RUB\",\"symbol\":\"₽\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"RWF\":{\"code\":\"RWF\",\"symbol\":\"RWF\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"SAR\":{\"code\":\"SAR\",\"symbol\":\"﷼\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"SBD\":{\"code\":\"SBD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"SCR\":{\"code\":\"SCR\",\"symbol\":\"₨\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"SDD\":{\"code\":\"SDD\",\"symbol\":\"LSd\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"SDG\":{\"code\":\"SDG\",\"symbol\":\"£‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"SEK\":{\"code\":\"SEK\",\"symbol\":\"kr\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"SGD\":{\"code\":\"SGD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"SHP\":{\"code\":\"SHP\",\"symbol\":\"£\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"SLL\":{\"code\":\"SLL\",\"symbol\":\"Le\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"SOS\":{\"code\":\"SOS\",\"symbol\":\"S\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"SRD\":{\"code\":\"SRD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"STD\":{\"code\":\"STD\",\"symbol\":\"Db\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"SVC\":{\"code\":\"SVC\",\"symbol\":\"₡\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"SYP\":{\"code\":\"SYP\",\"symbol\":\"£\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"SZL\":{\"code\":\"SZL\",\"symbol\":\"E\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"THB\":{\"code\":\"THB\",\"symbol\":\"฿\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"TJS\":{\"code\":\"TJS\",\"symbol\":\"TJS\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\";\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"TMT\":{\"code\":\"TMT\",\"symbol\":\"m\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"TND\":{\"code\":\"TND\",\"symbol\":\"د.ت.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":3},\"TOP\":{\"code\":\"TOP\",\"symbol\":\"T$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"TRY\":{\"code\":\"TRY\",\"symbol\":\"₺\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"TTD\":{\"code\":\"TTD\",\"symbol\":\"TT$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"TVD\":{\"code\":\"TVD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"TWD\":{\"code\":\"TWD\",\"symbol\":\"NT$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"TZS\":{\"code\":\"TZS\",\"symbol\":\"TSh\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"UAH\":{\"code\":\"UAH\",\"symbol\":\"₴\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"UGX\":{\"code\":\"UGX\",\"symbol\":\"USh\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"USD\":{\"code\":\"USD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"UYU\":{\"code\":\"UYU\",\"symbol\":\"$U\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"UZS\":{\"code\":\"UZS\",\"symbol\":\"сўм\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"VEB\":{\"code\":\"VEB\",\"symbol\":\"Bs.\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"VEF\":{\"code\":\"VEF\",\"symbol\":\"Bs. F.\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"VND\":{\"code\":\"VND\",\"symbol\":\"₫\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":0},\"VUV\":{\"code\":\"VUV\",\"symbol\":\"VT\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"WST\":{\"code\":\"WST\",\"symbol\":\"WS$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"XAF\":{\"code\":\"XAF\",\"symbol\":\"F\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"XCD\":{\"code\":\"XCD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"XBT\":{\"code\":\"XBT\",\"symbol\":\"Ƀ\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"XOF\":{\"code\":\"XOF\",\"symbol\":\"F\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"XPF\":{\"code\":\"XPF\",\"symbol\":\"F\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"YER\":{\"code\":\"YER\",\"symbol\":\"﷼\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"ZAR\":{\"code\":\"ZAR\",\"symbol\":\"R\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"ZMW\":{\"code\":\"ZMW\",\"symbol\":\"ZK\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"WON\":{\"code\":\"WON\",\"symbol\":\"₩\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2}}");
 
-    if (options.delimiter === null || options.delimiter === void 0) {
-      options.delimiter = ',';
-    } else {
-      if (Buffer.isBuffer(options.delimiter)) {
-        options.delimiter = options.delimiter.toString();
-      } else if (typeof options.delimiter !== 'string') {
-        throw new Error(`Invalid Option: delimiter must be a buffer or a string, got ${JSON.stringify(options.delimiter)}`);
-      }
-    } // Normalize option `quote`
+/***/ }),
 
+/***/ "./node_modules/currency-formatter/index.js":
+/*!**************************************************!*\
+  !*** ./node_modules/currency-formatter/index.js ***!
+  \**************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-    if (options.quote === null || options.quote === void 0) {
-      options.quote = '"';
-    } else {
-      if (options.quote === true) {
-        options.quote = '"';
-      } else if (options.quote === false) {
-        options.quote = '';
-      } else if (Buffer.isBuffer(options.quote)) {
-        options.quote = options.quote.toString();
-      } else if (typeof options.quote !== 'string') {
-        throw new Error(`Invalid Option: quote must be a boolean, a buffer or a string, got ${JSON.stringify(options.quote)}`);
-      }
-    } // Normalize option `quoted`
+var accounting = __webpack_require__(/*! accounting */ "./node_modules/accounting/accounting.js");
 
+var assign = __webpack_require__(/*! object-assign */ "./node_modules/object-assign/index.js");
 
-    if (options.quoted == null) {
-      options.quoted = false;
-    }
+var localeCurrency = __webpack_require__(/*! locale-currency */ "./node_modules/locale-currency/index.js");
 
-    if (options.quoted_empty == null) {
-      options.quoted_empty = void 0;
-    }
+var currencies = __webpack_require__(/*! ./currencies.json */ "./node_modules/currency-formatter/currencies.json");
 
-    if (options.quoted_string == null) {
-      options.quoted_string = false;
-    }
-
-    if (options.eof == null) {
-      options.eof = true;
-    } // Normalize option `escape`
-
-
-    if (options.escape === null || options.escape === void 0) {
-      options.escape = '"';
-    } else {
-      if (Buffer.isBuffer(options.escape)) {
-        options.escape = options.escape.toString();
-      }
-
-      if (typeof options.escape !== 'string') {
-        throw new Error(`Invalid Option: escape must be a buffer or a string, got ${JSON.stringify(options.escape)}`);
-      } else if (options.escape.length > 1) {
-        throw new Error(`Invalid Option: escape must be one character, got ${options.escape.length} characters`);
-      }
-    }
-
-    if (options.header == null) {
-      options.header = false;
-    } // Normalize the columns option
-
-
-    options.columns = this.normalize_columns(options.columns);
-
-    if (options.cast == null) {
-      options.cast = {};
-    } // Normalize option `quoted_match`
-
-
-    if (options.quoted_match === void 0 || options.quoted_match === null || options.quoted_match === false) {
-      options.quoted_match = null;
-    } else if (!Array.isArray(options.quoted_match)) {
-      options.quoted_match = [options.quoted_match];
-    }
-
-    if (options.quoted_match) {
-      ref = options.quoted_match;
-
-      for (j = 0, len = ref.length; j < len; j++) {
-        quoted_match = ref[j];
-        isString = typeof quoted_match === 'string';
-        isRegExp = quoted_match instanceof RegExp;
-
-        if (!isString && !isRegExp) {
-          throw new Error(`Invalid Option: quoted_match must be a string or a regex, got ${JSON.stringify(quoted_match)}`);
-        }
-      }
-    }
-
-    if (options.cast.bool) {
-      // Backward compatibility
-      options.cast.boolean = options.cast.bool;
-    } // Custom cast
-
-
-    if ((base = options.cast).boolean == null) {
-      base.boolean = function (value) {
-        // Cast boolean to string by default
-        if (value) {
-          return '1';
-        } else {
-          return '';
-        }
-      };
-    }
-
-    if ((base1 = options.cast).date == null) {
-      base1.date = function (value) {
-        // Cast date to timestamp string by default
-        return '' + value.getTime();
-      };
-    }
-
-    if ((base2 = options.cast).number == null) {
-      base2.number = function (value) {
-        // Cast number to string using native casting by default
-        return '' + value;
-      };
-    }
-
-    if ((base3 = options.cast).object == null) {
-      base3.object = function (value) {
-        // Stringify object as JSON by default
-        return JSON.stringify(value);
-      };
-    }
-
-    if ((base4 = options.cast).string == null) {
-      base4.string = function (value) {
-        return value;
-      };
-    } // Normalize option `record_delimiter`
-
-
-    if (options.record_delimiter === void 0 || options.record_delimiter === null) {
-      if (options.record_delimiter == null) {
-        options.record_delimiter = '\n';
-      }
-    } else {
-      if (Buffer.isBuffer(options.record_delimiter)) {
-        options.record_delimiter = options.record_delimiter.toString();
-      } else if (typeof options.record_delimiter !== 'string') {
-        throw new Error(`Invalid Option: record_delimiter must be a buffer or a string, got ${JSON.stringify(options.record_delimiter)}`);
-      }
-
-      switch (options.record_delimiter) {
-        case 'auto':
-          options.record_delimiter = null;
-          break;
-
-        case 'unix':
-          options.record_delimiter = "\n";
-          break;
-
-        case 'mac':
-          options.record_delimiter = "\r";
-          break;
-
-        case 'windows':
-          options.record_delimiter = "\r\n";
-          break;
-
-        case 'ascii':
-          options.record_delimiter = "\u001e";
-          break;
-
-        case 'unicode':
-          options.record_delimiter = "\u2028";
-      }
-    } // Expose options
-
-
-    this.options = options; // Internal state
-
-    this.state = {
-      stop: false
-    }; // Information
-
-    this.info = {
-      records: 0
-    };
-    this;
-  } // ## `Stringifier.prototype._transform(chunk, encoding, callback)`
-  // Implementation of the [transform._transform function](https://nodejs.org/api/stream.html#stream_transform_transform_chunk_encoding_callback).
-
-
-  _transform(chunk, encoding, callback) {
-    var base, e;
-
-    if (this.state.stop === true) {
-      return;
-    } // Chunk validation
-
-
-    if (!(Array.isArray(chunk) || typeof chunk === 'object')) {
-      this.state.stop = true;
-      return callback(Error(`Invalid Record: expect an array or an object, got ${JSON.stringify(chunk)}`));
-    } // Detect columns from the first record
-
-
-    if (this.info.records === 0) {
-      if (Array.isArray(chunk)) {
-        if (this.options.header === true && !this.options.columns) {
-          this.state.stop = true;
-          return callback(Error('Undiscoverable Columns: header option requires column option or object records'));
-        }
-      } else {
-        if ((base = this.options).columns == null) {
-          base.columns = this.normalize_columns(Object.keys(chunk));
-        }
-      }
-    }
-
-    if (this.info.records === 0) {
-      // Emit the header
-      this.headers();
-    }
-
-    try {
-      // Emit and stringify the record if an object or an array
-      this.emit('record', chunk, this.info.records);
-    } catch (error) {
-      e = error;
-      this.state.stop = true;
-      return this.emit('error', e);
-    } // Convert the record into a string
-
-
-    if (this.options.eof) {
-      chunk = this.stringify(chunk);
-
-      if (chunk == null) {
-        return;
-      }
-
-      chunk = chunk + this.options.record_delimiter;
-    } else {
-      chunk = this.stringify(chunk);
-
-      if (chunk == null) {
-        return;
-      }
-
-      if (this.options.header || this.info.records) {
-        chunk = this.options.record_delimiter + chunk;
-      }
-    } // Emit the csv
-
-
-    this.info.records++;
-    this.push(chunk);
-    return callback();
-  } // ## `Stringifier.prototype._flush(callback)`
-  // Implementation of the [transform._flush function](https://nodejs.org/api/stream.html#stream_transform_flush_callback).
-
-
-  _flush(callback) {
-    if (this.info.records === 0) {
-      this.headers();
-    }
-
-    return callback();
-  } // ## `Stringifier.prototype.stringify(line)`
-  // Convert a line to a string. Line may be an object, an array or a string.
-
-
-  stringify(chunk, chunkIsHeader = false) {
-    var column, columns, containsEscape, containsQuote, containsRowDelimiter, containsdelimiter, csvrecord, delimiter, err, escape, field, header, i, j, l, len, m, options, quote, quoted, quotedMatch, quotedString, quoted_empty, quoted_match, quoted_string, record, record_delimiter, ref, ref1, regexp, shouldQuote, value;
-
-    if (typeof chunk !== 'object') {
-      return chunk;
-    }
-
-    var _this$options = this.options;
-    columns = _this$options.columns;
-    header = _this$options.header;
-    record = []; // Record is an array
-
-    if (Array.isArray(chunk)) {
-      if (columns) {
-        // We are getting an array but the user has specified output columns. In
-        // this case, we respect the columns indexes
-        chunk.splice(columns.length);
-      } // Cast record elements
-
-
-      for (i = j = 0, len = chunk.length; j < len; i = ++j) {
-        field = chunk[i];
-
-        var _this$__cast = this.__cast(field, {
-          index: i,
-          column: i,
-          records: this.info.records,
-          header: chunkIsHeader
-        });
-
-        var _this$__cast2 = _slicedToArray(_this$__cast, 2);
-
-        err = _this$__cast2[0];
-        value = _this$__cast2[1];
-
-        if (err) {
-          this.emit('error', err);
-          return;
-        }
-
-        record[i] = [value, field];
-      }
-    } else {
-      // Record is a literal object
-      if (columns) {
-        for (i = l = 0, ref = columns.length; 0 <= ref ? l < ref : l > ref; i = 0 <= ref ? ++l : --l) {
-          field = get(chunk, columns[i].key);
-
-          var _this$__cast3 = this.__cast(field, {
-            index: i,
-            column: columns[i].key,
-            records: this.info.records,
-            header: chunkIsHeader
-          });
-
-          var _this$__cast4 = _slicedToArray(_this$__cast3, 2);
-
-          err = _this$__cast4[0];
-          value = _this$__cast4[1];
-
-          if (err) {
-            this.emit('error', err);
-            return;
-          }
-
-          record[i] = [value, field];
-        }
-      } else {
-        for (column in chunk) {
-          field = chunk[column];
-
-          var _this$__cast5 = this.__cast(field, {
-            index: i,
-            column: columns[i].key,
-            records: this.info.records,
-            header: chunkIsHeader
-          });
-
-          var _this$__cast6 = _slicedToArray(_this$__cast5, 2);
-
-          err = _this$__cast6[0];
-          value = _this$__cast6[1];
-
-          if (err) {
-            this.emit('error', err);
-            return;
-          }
-
-          record.push([value, field]);
-        }
-      }
-    }
-
-    csvrecord = '';
-
-    for (i = m = 0, ref1 = record.length; 0 <= ref1 ? m < ref1 : m > ref1; i = 0 <= ref1 ? ++m : --m) {
-      var _record$i = _slicedToArray(record[i], 2);
-
-      value = _record$i[0];
-      field = _record$i[1];
-
-      if (typeof value === 'string') {
-        options = this.options;
-      } else if (isObject(value)) {
-        var _value = value;
-        value = _value.value;
-        options = _objectWithoutProperties(_value, _excluded);
-
-        if (!(typeof value === 'string' || value === void 0 || value === null)) {
-          this.emit('error', Error(`Invalid Casting Value: returned value must return a string, null or undefined, got ${JSON.stringify(value)}`));
-          return;
-        }
-
-        options = _objectSpread(_objectSpread({}, this.options), options);
-      } else if (value === void 0 || value === null) {
-        options = this.options;
-      } else {
-        this.emit('error', Error(`Invalid Casting Value: returned value must return a string, an object, null or undefined, got ${JSON.stringify(value)}`));
-        return;
-      }
-
-      var _options = options;
-      delimiter = _options.delimiter;
-      escape = _options.escape;
-      quote = _options.quote;
-      quoted = _options.quoted;
-      quoted_empty = _options.quoted_empty;
-      quoted_string = _options.quoted_string;
-      quoted_match = _options.quoted_match;
-      record_delimiter = _options.record_delimiter;
-
-      if (value) {
-        if (typeof value !== 'string') {
-          this.emit('error', Error(`Formatter must return a string, null or undefined, got ${JSON.stringify(value)}`));
-          return null;
-        }
-
-        containsdelimiter = delimiter.length && value.indexOf(delimiter) >= 0;
-        containsQuote = quote !== '' && value.indexOf(quote) >= 0;
-        containsEscape = value.indexOf(escape) >= 0 && escape !== quote;
-        containsRowDelimiter = value.indexOf(record_delimiter) >= 0;
-        quotedString = quoted_string && typeof field === 'string';
-        quotedMatch = quoted_match && typeof field === 'string' && quoted_match.filter(function (quoted_match) {
-          if (typeof quoted_match === 'string') {
-            return value.indexOf(quoted_match) !== -1;
-          } else {
-            return quoted_match.test(value);
-          }
-        });
-        quotedMatch = quotedMatch && quotedMatch.length > 0;
-        shouldQuote = containsQuote === true || containsdelimiter || containsRowDelimiter || quoted || quotedString || quotedMatch;
-
-        if (shouldQuote === true && containsEscape === true) {
-          regexp = escape === '\\' ? new RegExp(escape + escape, 'g') : new RegExp(escape, 'g');
-          value = value.replace(regexp, escape + escape);
-        }
-
-        if (containsQuote === true) {
-          regexp = new RegExp(quote, 'g');
-          value = value.replace(regexp, escape + quote);
-        }
-
-        if (shouldQuote === true) {
-          value = quote + value + quote;
-        }
-
-        csvrecord += value;
-      } else if (quoted_empty === true || quoted_empty == null && field === '' && quoted_string !== false) {
-        csvrecord += quote + quote;
-      }
-
-      if (i !== record.length - 1) {
-        csvrecord += delimiter;
-      }
-    }
-
-    return csvrecord;
-  } // ## `Stringifier.prototype.headers`
-  // Print the header line if the option "header" is "true".
-
-
-  headers() {
-    var headers;
-
-    if (!this.options.header) {
-      return;
-    }
-
-    if (!this.options.columns) {
-      return;
-    }
-
-    headers = this.options.columns.map(function (column) {
-      return column.header;
-    });
-
-    if (this.options.eof) {
-      headers = this.stringify(headers, true) + this.options.record_delimiter;
-    } else {
-      headers = this.stringify(headers);
-    }
-
-    return this.push(headers);
-  }
-
-  __cast(value, context) {
-    var err, type;
-    type = typeof value;
-
-    try {
-      if (type === 'string') {
-        // Fine for 99% of the cases
-        return [void 0, this.options.cast.string(value, context)];
-      } else if (type === 'number') {
-        return [void 0, this.options.cast.number(value, context)];
-      } else if (type === 'boolean') {
-        return [void 0, this.options.cast.boolean(value, context)];
-      } else if (value instanceof Date) {
-        return [void 0, this.options.cast.date(value, context)];
-      } else if (type === 'object' && value !== null) {
-        return [void 0, this.options.cast.object(value, context)];
-      } else {
-        return [void 0, value, value];
-      }
-    } catch (error) {
-      err = error;
-      return [err];
-    }
-  } // ## `Stringifier.prototype.normalize_columns`
-
-
-  normalize_columns(columns) {
-    var column, k, v;
-
-    if (columns == null) {
-      return null;
-    }
-
-    if (columns != null) {
-      if (typeof columns !== 'object') {
-        throw Error('Invalid option "columns": expect an array or an object');
-      }
-
-      if (!Array.isArray(columns)) {
-        columns = function () {
-          var results;
-          results = [];
-
-          for (k in columns) {
-            v = columns[k];
-            results.push({
-              key: k,
-              header: v
-            });
-          }
-
-          return results;
-        }();
-      } else {
-        columns = function () {
-          var j, len, results;
-          results = [];
-
-          for (j = 0, len = columns.length; j < len; j++) {
-            column = columns[j];
-
-            if (typeof column === 'string') {
-              results.push({
-                key: column,
-                header: column
-              });
-            } else if (typeof column === 'object' && column != null && !Array.isArray(column)) {
-              if (!column.key) {
-                throw Error('Invalid column definition: property "key" is required');
-              }
-
-              if (column.header == null) {
-                column.header = column.key;
-              }
-
-              results.push(column);
-            } else {
-              throw Error('Invalid column definition: expect a string or an object');
-            }
-          }
-
-          return results;
-        }();
-      }
-    }
-
-    return columns;
-  }
-
-};
-module.exports.Stringifier = Stringifier;
-
-isObject = function (obj) {
-  return typeof obj === 'object' && obj !== null && !Array.isArray(obj);
-};
-
-underscore = function (str) {
-  return str.replace(/([A-Z])/g, function (_, match, index) {
-    return '_' + match.toLowerCase();
-  });
-}; // ## Lodash implementation of `get`
-
-
-charCodeOfDot = '.'.charCodeAt(0);
-reEscapeChar = /\\(\\)?/g; // Match anything that isn't a dot or bracket.
-// Or match property names within brackets.
-// Match a non-string expression.
-// Or match strings (supports escaping characters).
-// Or match "" as the space between consecutive dots or empty brackets.
-
-rePropName = RegExp('[^.[\\]]+' + '|' + '\\[(?:' + '([^"\'][^[]*)' + '|' + '(["\'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2' + ')\\]' + '|' + '(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))', 'g');
-reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/;
-reIsPlainProp = /^\w*$/;
-
-getTag = function (value) {
-  if (value != null) {
-    if (value === void 0) {
-      '[object Undefined]';
-    } else {
-      '[object Null]';
-    }
-  }
-
-  return Object.prototype.toString.call(value);
-};
-
-isKey = function (value, object) {
-  var type;
-
-  if (Array.isArray(value)) {
-    return false;
-  }
-
-  type = typeof value;
-
-  if (type === 'number' || type === 'symbol' || type === 'boolean' || value == null || isSymbol(value)) {
-    return true;
-  }
-
-  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);
-};
-
-isSymbol = function (value) {
-  var type;
-  type = typeof value;
-  return type === 'symbol' || type === 'object' && value != null && getTag(value) === '[object Symbol]';
-};
-
-stringToPath = function (string) {
-  var result;
-  result = [];
-
-  if (string.charCodeAt(0) === charCodeOfDot) {
-    result.push('');
-  }
-
-  string.replace(rePropName, function (match, expression, quote, subString) {
-    var key;
-    key = match;
-
-    if (quote) {
-      key = subString.replace(reEscapeChar, '$1');
-    } else if (expression) {
-      key = expression.trim();
-    }
-
-    return result.push(key);
-  });
-  return result;
-};
-
-castPath = function (value, object) {
-  if (Array.isArray(value)) {
-    return value;
-  } else {
-    if (isKey(value, object)) {
-      return [value];
-    } else {
-      return stringToPath(value);
-    }
-  }
-};
-
-toKey = function (value) {
-  var ref, result;
-
-  if (typeof value === 'string' || isSymbol(value)) {
-    return value;
-  }
-
-  result = `${value}`;
-  return (ref = result === '0' && 1 / value === -INFINITY) != null ? ref : {
-    '-0': result
-  };
-};
-
-get = function (object, path) {
-  var index, length;
-  path = Array.isArray(path) ? path : castPath(path, object);
-  index = 0;
-  length = path.length;
-
-  while (object != null && index < length) {
-    object = object[toKey(path[index++])];
-  }
-
-  if (index && index === length) {
-    return object;
-  } else {
-    return void 0;
-  }
-};
-
-/***/ }),
-
-/***/ "./node_modules/csv-stringify/lib/sync.js":
-/*!************************************************!*\
-  !*** ./node_modules/csv-stringify/lib/sync.js ***!
-  \************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-// Generated by CoffeeScript 2.4.1
-// # CSV Stringify Sync
-// Provides a synchronous alternative to the CSV stringifier.
-// ## Usage
-// `const csv = stringify(records, [options]`
-var StringDecoder, stringify;
-
-var _require = __webpack_require__(/*! string_decoder */ "string_decoder");
-
-StringDecoder = _require.StringDecoder;
-stringify = __webpack_require__(/*! ./index */ "./node_modules/csv-stringify/lib/index.js");
-
-module.exports = function (records, options = {}) {
-  var data, decoder, i, len, record, stringifier;
-  data = [];
-
-  if (records instanceof Buffer) {
-    decoder = new StringDecoder();
-    records = decoder.write(records);
-  }
-
-  stringifier = new stringify.Stringifier(options);
-
-  stringifier.push = function (record) {
-    if (record) {
-      return data.push(record.toString());
-    }
-  };
-
-  for (i = 0, len = records.length; i < len; i++) {
-    record = records[i];
-    stringifier.write(record);
-  }
-
-  stringifier.end();
-  return data.join('');
-};
-
-/***/ }),
-
-/***/ "./node_modules/currency-formatter/currencies.json":
-/*!*********************************************************!*\
-  !*** ./node_modules/currency-formatter/currencies.json ***!
-  \*********************************************************/
-/*! exports provided: AED, AFN, ALL, AMD, ANG, AOA, ARS, AUD, AWG, AZN, BAM, BBD, BDT, BGN, BHD, BIF, BMD, BND, BOB, BRL, BSD, BTC, BTN, BWP, BYR, BZD, CAD, CDF, CHF, CLP, CNY, COP, CRC, CUC, CUP, CVE, CZK, DJF, DKK, DOP, DZD, EGP, ERN, ETB, EUR, FJD, FKP, GBP, GEL, GHS, GIP, GMD, GNF, GTQ, GYD, HKD, HNL, HRK, HTG, HUF, IDR, ILS, INR, IQD, IRR, ISK, JMD, JOD, JPY, KES, KGS, KHR, KMF, KPW, KRW, KWD, KYD, KZT, LAK, LBP, LKR, LRD, LSL, LYD, MAD, MDL, MGA, MKD, MMK, MNT, MOP, MRO, MTL, MUR, MVR, MWK, MXN, MYR, MZN, NAD, NGN, NIO, NOK, NPR, NZD, OMR, PAB, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RUB, RWF, SAR, SBD, SCR, SDD, SDG, SEK, SGD, SHP, SLL, SOS, SRD, STD, SVC, SYP, SZL, THB, TJS, TMT, TND, TOP, TRY, TTD, TVD, TWD, TZS, UAH, UGX, USD, UYU, UZS, VEB, VEF, VND, VUV, WST, XAF, XCD, XBT, XOF, XPF, YER, ZAR, ZMW, WON, default */
-/***/ (function(module) {
-
-module.exports = JSON.parse("{\"AED\":{\"code\":\"AED\",\"symbol\":\"د.إ.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"AFN\":{\"code\":\"AFN\",\"symbol\":\"؋\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"ALL\":{\"code\":\"ALL\",\"symbol\":\"Lek\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"AMD\":{\"code\":\"AMD\",\"symbol\":\"֏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"ANG\":{\"code\":\"ANG\",\"symbol\":\"ƒ\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"AOA\":{\"code\":\"AOA\",\"symbol\":\"Kz\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"ARS\":{\"code\":\"ARS\",\"symbol\":\"$\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"AUD\":{\"code\":\"AUD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"AWG\":{\"code\":\"AWG\",\"symbol\":\"ƒ\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"AZN\":{\"code\":\"AZN\",\"symbol\":\"₼\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"BAM\":{\"code\":\"BAM\",\"symbol\":\"КМ\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"BBD\":{\"code\":\"BBD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"BDT\":{\"code\":\"BDT\",\"symbol\":\"৳\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":0},\"BGN\":{\"code\":\"BGN\",\"symbol\":\"лв.\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"BHD\":{\"code\":\"BHD\",\"symbol\":\"د.ب.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":3},\"BIF\":{\"code\":\"BIF\",\"symbol\":\"FBu\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"BMD\":{\"code\":\"BMD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"BND\":{\"code\":\"BND\",\"symbol\":\"$\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"BOB\":{\"code\":\"BOB\",\"symbol\":\"Bs\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"BRL\":{\"code\":\"BRL\",\"symbol\":\"R$\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"BSD\":{\"code\":\"BSD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"BTC\":{\"code\":\"BTC\",\"symbol\":\"Ƀ\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":8},\"BTN\":{\"code\":\"BTN\",\"symbol\":\"Nu.\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":1},\"BWP\":{\"code\":\"BWP\",\"symbol\":\"P\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"BYR\":{\"code\":\"BYR\",\"symbol\":\"р.\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"BZD\":{\"code\":\"BZD\",\"symbol\":\"BZ$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"CAD\":{\"code\":\"CAD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"CDF\":{\"code\":\"CDF\",\"symbol\":\"FC\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"CHF\":{\"code\":\"CHF\",\"symbol\":\"CHF\",\"thousandsSeparator\":\"'\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"CLP\":{\"code\":\"CLP\",\"symbol\":\"$\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"CNY\":{\"code\":\"CNY\",\"symbol\":\"¥\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"COP\":{\"code\":\"COP\",\"symbol\":\"$\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"CRC\":{\"code\":\"CRC\",\"symbol\":\"₡\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"CUC\":{\"code\":\"CUC\",\"symbol\":\"CUC\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"CUP\":{\"code\":\"CUP\",\"symbol\":\"$MN\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"CVE\":{\"code\":\"CVE\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"CZK\":{\"code\":\"CZK\",\"symbol\":\"Kč\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"DJF\":{\"code\":\"DJF\",\"symbol\":\"Fdj\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"DKK\":{\"code\":\"DKK\",\"symbol\":\"kr.\",\"thousandsSeparator\":\"\",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"DOP\":{\"code\":\"DOP\",\"symbol\":\"RD$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"DZD\":{\"code\":\"DZD\",\"symbol\":\"د.ج.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"EGP\":{\"code\":\"EGP\",\"symbol\":\"ج.م.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"ERN\":{\"code\":\"ERN\",\"symbol\":\"Nfk\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"ETB\":{\"code\":\"ETB\",\"symbol\":\"ETB\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"EUR\":{\"code\":\"EUR\",\"symbol\":\"€\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"FJD\":{\"code\":\"FJD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"FKP\":{\"code\":\"FKP\",\"symbol\":\"£\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"GBP\":{\"code\":\"GBP\",\"symbol\":\"£\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"GEL\":{\"code\":\"GEL\",\"symbol\":\"Lari\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"GHS\":{\"code\":\"GHS\",\"symbol\":\"₵\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"GIP\":{\"code\":\"GIP\",\"symbol\":\"£\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"GMD\":{\"code\":\"GMD\",\"symbol\":\"D\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"GNF\":{\"code\":\"GNF\",\"symbol\":\"FG\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"GTQ\":{\"code\":\"GTQ\",\"symbol\":\"Q\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"GYD\":{\"code\":\"GYD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"HKD\":{\"code\":\"HKD\",\"symbol\":\"HK$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"HNL\":{\"code\":\"HNL\",\"symbol\":\"L.\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"HRK\":{\"code\":\"HRK\",\"symbol\":\"kn\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"HTG\":{\"code\":\"HTG\",\"symbol\":\"G\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"HUF\":{\"code\":\"HUF\",\"symbol\":\"Ft\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"IDR\":{\"code\":\"IDR\",\"symbol\":\"Rp\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"ILS\":{\"code\":\"ILS\",\"symbol\":\"₪\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"INR\":{\"code\":\"INR\",\"symbol\":\"₹\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"IQD\":{\"code\":\"IQD\",\"symbol\":\"د.ع.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"IRR\":{\"code\":\"IRR\",\"symbol\":\"﷼\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\"/\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"ISK\":{\"code\":\"ISK\",\"symbol\":\"kr.\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":0},\"JMD\":{\"code\":\"JMD\",\"symbol\":\"J$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"JOD\":{\"code\":\"JOD\",\"symbol\":\"د.ا.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":3},\"JPY\":{\"code\":\"JPY\",\"symbol\":\"¥\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"KES\":{\"code\":\"KES\",\"symbol\":\"KSh\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"KGS\":{\"code\":\"KGS\",\"symbol\":\"сом\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\"-\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"KHR\":{\"code\":\"KHR\",\"symbol\":\"៛\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"KMF\":{\"code\":\"KMF\",\"symbol\":\"CF\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"KPW\":{\"code\":\"KPW\",\"symbol\":\"₩\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"KRW\":{\"code\":\"KRW\",\"symbol\":\"₩\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"KWD\":{\"code\":\"KWD\",\"symbol\":\"د.ك.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":3},\"KYD\":{\"code\":\"KYD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"KZT\":{\"code\":\"KZT\",\"symbol\":\"₸\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\"-\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"LAK\":{\"code\":\"LAK\",\"symbol\":\"₭\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"LBP\":{\"code\":\"LBP\",\"symbol\":\"ل.ل.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"LKR\":{\"code\":\"LKR\",\"symbol\":\"₨\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":0},\"LRD\":{\"code\":\"LRD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"LSL\":{\"code\":\"LSL\",\"symbol\":\"M\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"LYD\":{\"code\":\"LYD\",\"symbol\":\"د.ل.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":3},\"MAD\":{\"code\":\"MAD\",\"symbol\":\"د.م.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"MDL\":{\"code\":\"MDL\",\"symbol\":\"lei\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"MGA\":{\"code\":\"MGA\",\"symbol\":\"Ar\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"MKD\":{\"code\":\"MKD\",\"symbol\":\"ден.\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"MMK\":{\"code\":\"MMK\",\"symbol\":\"K\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"MNT\":{\"code\":\"MNT\",\"symbol\":\"₮\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"MOP\":{\"code\":\"MOP\",\"symbol\":\"MOP$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"MRO\":{\"code\":\"MRO\",\"symbol\":\"UM\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"MTL\":{\"code\":\"MTL\",\"symbol\":\"₤\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"MUR\":{\"code\":\"MUR\",\"symbol\":\"₨\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"MVR\":{\"code\":\"MVR\",\"symbol\":\"MVR\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":1},\"MWK\":{\"code\":\"MWK\",\"symbol\":\"MK\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"MXN\":{\"code\":\"MXN\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"MYR\":{\"code\":\"MYR\",\"symbol\":\"RM\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"MZN\":{\"code\":\"MZN\",\"symbol\":\"MT\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"NAD\":{\"code\":\"NAD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"NGN\":{\"code\":\"NGN\",\"symbol\":\"₦\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"NIO\":{\"code\":\"NIO\",\"symbol\":\"C$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"NOK\":{\"code\":\"NOK\",\"symbol\":\"kr\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"NPR\":{\"code\":\"NPR\",\"symbol\":\"₨\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"NZD\":{\"code\":\"NZD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"OMR\":{\"code\":\"OMR\",\"symbol\":\"﷼\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":3},\"PAB\":{\"code\":\"PAB\",\"symbol\":\"B/.\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"PEN\":{\"code\":\"PEN\",\"symbol\":\"S/.\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"PGK\":{\"code\":\"PGK\",\"symbol\":\"K\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"PHP\":{\"code\":\"PHP\",\"symbol\":\"₱\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"PKR\":{\"code\":\"PKR\",\"symbol\":\"₨\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"PLN\":{\"code\":\"PLN\",\"symbol\":\"zł\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"PYG\":{\"code\":\"PYG\",\"symbol\":\"₲\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"QAR\":{\"code\":\"QAR\",\"symbol\":\"﷼\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"RON\":{\"code\":\"RON\",\"symbol\":\"lei\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"RSD\":{\"code\":\"RSD\",\"symbol\":\"Дин.\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"RUB\":{\"code\":\"RUB\",\"symbol\":\"₽\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"RWF\":{\"code\":\"RWF\",\"symbol\":\"RWF\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"SAR\":{\"code\":\"SAR\",\"symbol\":\"﷼\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"SBD\":{\"code\":\"SBD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"SCR\":{\"code\":\"SCR\",\"symbol\":\"₨\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"SDD\":{\"code\":\"SDD\",\"symbol\":\"LSd\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"SDG\":{\"code\":\"SDG\",\"symbol\":\"£‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"SEK\":{\"code\":\"SEK\",\"symbol\":\"kr\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"SGD\":{\"code\":\"SGD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"SHP\":{\"code\":\"SHP\",\"symbol\":\"£\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"SLL\":{\"code\":\"SLL\",\"symbol\":\"Le\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"SOS\":{\"code\":\"SOS\",\"symbol\":\"S\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"SRD\":{\"code\":\"SRD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"STD\":{\"code\":\"STD\",\"symbol\":\"Db\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"SVC\":{\"code\":\"SVC\",\"symbol\":\"₡\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"SYP\":{\"code\":\"SYP\",\"symbol\":\"£\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"SZL\":{\"code\":\"SZL\",\"symbol\":\"E\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"THB\":{\"code\":\"THB\",\"symbol\":\"฿\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"TJS\":{\"code\":\"TJS\",\"symbol\":\"TJS\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\";\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"TMT\":{\"code\":\"TMT\",\"symbol\":\"m\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"TND\":{\"code\":\"TND\",\"symbol\":\"د.ت.‏\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":3},\"TOP\":{\"code\":\"TOP\",\"symbol\":\"T$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"TRY\":{\"code\":\"TRY\",\"symbol\":\"₺\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"TTD\":{\"code\":\"TTD\",\"symbol\":\"TT$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"TVD\":{\"code\":\"TVD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"TWD\":{\"code\":\"TWD\",\"symbol\":\"NT$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"TZS\":{\"code\":\"TZS\",\"symbol\":\"TSh\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"UAH\":{\"code\":\"UAH\",\"symbol\":\"₴\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"UGX\":{\"code\":\"UGX\",\"symbol\":\"USh\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"USD\":{\"code\":\"USD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"UYU\":{\"code\":\"UYU\",\"symbol\":\"$U\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"UZS\":{\"code\":\"UZS\",\"symbol\":\"сўм\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"VEB\":{\"code\":\"VEB\",\"symbol\":\"Bs.\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"VEF\":{\"code\":\"VEF\",\"symbol\":\"Bs. F.\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"VND\":{\"code\":\"VND\",\"symbol\":\"₫\",\"thousandsSeparator\":\".\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":0},\"VUV\":{\"code\":\"VUV\",\"symbol\":\"VT\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":0},\"WST\":{\"code\":\"WST\",\"symbol\":\"WS$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"XAF\":{\"code\":\"XAF\",\"symbol\":\"F\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"XCD\":{\"code\":\"XCD\",\"symbol\":\"$\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"XBT\":{\"code\":\"XBT\",\"symbol\":\"Ƀ\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"XOF\":{\"code\":\"XOF\",\"symbol\":\"F\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"XPF\":{\"code\":\"XPF\",\"symbol\":\"F\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":false,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"YER\":{\"code\":\"YER\",\"symbol\":\"﷼\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":true,\"decimalDigits\":2},\"ZAR\":{\"code\":\"ZAR\",\"symbol\":\"R\",\"thousandsSeparator\":\" \",\"decimalSeparator\":\",\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"ZMW\":{\"code\":\"ZMW\",\"symbol\":\"ZK\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2},\"WON\":{\"code\":\"WON\",\"symbol\":\"₩\",\"thousandsSeparator\":\",\",\"decimalSeparator\":\".\",\"symbolOnLeft\":true,\"spaceBetweenAmountAndSymbol\":false,\"decimalDigits\":2}}");
-
-/***/ }),
-
-/***/ "./node_modules/currency-formatter/index.js":
-/*!**************************************************!*\
-  !*** ./node_modules/currency-formatter/index.js ***!
-  \**************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var accounting = __webpack_require__(/*! accounting */ "./node_modules/accounting/accounting.js");
-
-var assign = __webpack_require__(/*! object-assign */ "./node_modules/object-assign/index.js");
-
-var localeCurrency = __webpack_require__(/*! locale-currency */ "./node_modules/locale-currency/index.js");
-
-var currencies = __webpack_require__(/*! ./currencies.json */ "./node_modules/currency-formatter/currencies.json");
-
-var localeFormats = __webpack_require__(/*! ./localeFormats.json */ "./node_modules/currency-formatter/localeFormats.json");
+var localeFormats = __webpack_require__(/*! ./localeFormats.json */ "./node_modules/currency-formatter/localeFormats.json");
 
 var defaultCurrency = {
   symbol: '',
@@ -28972,10 +27466,10 @@ module.exports = defineProperties;
 
 /***/ }),
 
-/***/ "./node_modules/es-abstract/2020/ArraySpeciesCreate.js":
-/*!*************************************************************!*\
-  !*** ./node_modules/es-abstract/2020/ArraySpeciesCreate.js ***!
-  \*************************************************************/
+/***/ "./node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js":
+/*!**********************************************************************!*\
+  !*** ./node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js ***!
+  \**********************************************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
@@ -28984,11337 +27478,11942 @@ module.exports = defineProperties;
 
 var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
 
-var $Array = GetIntrinsic('%Array%');
-var $species = GetIntrinsic('%Symbol.species%', true);
-var $TypeError = GetIntrinsic('%TypeError%');
-
-var Get = __webpack_require__(/*! ./Get */ "./node_modules/es-abstract/2020/Get.js");
-
-var IsArray = __webpack_require__(/*! ./IsArray */ "./node_modules/es-abstract/2020/IsArray.js");
-
-var IsConstructor = __webpack_require__(/*! ./IsConstructor */ "./node_modules/es-abstract/2020/IsConstructor.js");
-
-var IsInteger = __webpack_require__(/*! ./IsInteger */ "./node_modules/es-abstract/2020/IsInteger.js");
-
-var Type = __webpack_require__(/*! ./Type */ "./node_modules/es-abstract/2020/Type.js"); // https://ecma-international.org/ecma-262/6.0/#sec-arrayspeciescreate
-
-
-module.exports = function ArraySpeciesCreate(originalArray, length) {
-  if (!IsInteger(length) || length < 0) {
-    throw new $TypeError('Assertion failed: length must be an integer >= 0');
-  }
-
-  var len = length === 0 ? 0 : length;
-  var C;
-  var isArray = IsArray(originalArray);
-
-  if (isArray) {
-    C = Get(originalArray, 'constructor'); // TODO: figure out how to make a cross-realm normal Array, a same-realm Array
-    // if (IsConstructor(C)) {
-    // 	if C is another realm's Array, C = undefined
-    // 	Object.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ?
-    // }
-
-    if ($species && Type(C) === 'Object') {
-      C = Get(C, $species);
-
-      if (C === null) {
-        C = void 0;
-      }
-    }
-  }
-
-  if (typeof C === 'undefined') {
-    return $Array(len);
-  }
+var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);
 
-  if (!IsConstructor(C)) {
-    throw new $TypeError('C must be a constructor');
+if ($gOPD) {
+  try {
+    $gOPD([], 'length');
+  } catch (e) {
+    // IE 8 has a broken gOPD
+    $gOPD = null;
   }
+}
 
-  return new C(len); // Construct(C, len);
-};
+module.exports = $gOPD;
 
 /***/ }),
 
-/***/ "./node_modules/es-abstract/2020/Call.js":
+/***/ "./node_modules/es-get-iterator/index.js":
 /*!***********************************************!*\
-  !*** ./node_modules/es-abstract/2020/Call.js ***!
+  !*** ./node_modules/es-get-iterator/index.js ***!
   \***********************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
 
+/* eslint global-require: 0 */
+// the code is structured this way so that bundlers can
+// alias out `has-symbols` to `() => true` or `() => false` if your target
+// environments' Symbol capabilities are known, and then use
+// dead code elimination on the rest of this module.
+//
+// Similarly, `isarray` can be aliased to `Array.isArray` if
+// available in all target environments.
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
-
-var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
-
-var $TypeError = GetIntrinsic('%TypeError%');
-
-var IsArray = __webpack_require__(/*! ./IsArray */ "./node_modules/es-abstract/2020/IsArray.js");
-
-var $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%'); // https://ecma-international.org/ecma-262/6.0/#sec-call
+var isArguments = __webpack_require__(/*! is-arguments */ "./node_modules/is-arguments/index.js");
 
-module.exports = function Call(F, V) {
-  var argumentsList = arguments.length > 2 ? arguments[2] : [];
+if (__webpack_require__(/*! has-symbols */ "./node_modules/has-symbols/index.js")() || __webpack_require__(/*! has-symbols/shams */ "./node_modules/has-symbols/shams.js")()) {
+  var $iterator = Symbol.iterator; // Symbol is available natively or shammed
+  // natively:
+  //  - Chrome >= 38
+  //  - Edge 12-14?, Edge >= 15 for sure
+  //  - FF >= 36
+  //  - Safari >= 9
+  //  - node >= 0.12
 
-  if (!IsArray(argumentsList)) {
-    throw new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');
-  }
+  module.exports = function getIterator(iterable) {
+    // alternatively, `iterable[$iterator]?.()`
+    if (iterable != null && typeof iterable[$iterator] !== 'undefined') {
+      return iterable[$iterator]();
+    }
 
-  return $apply(F, V, argumentsList);
-};
+    if (isArguments(iterable)) {
+      // arguments objects lack Symbol.iterator
+      // - node 0.12
+      return Array.prototype[$iterator].call(iterable);
+    }
+  };
+} else {
+  // Symbol is not available, native or shammed
+  var isArray = __webpack_require__(/*! isarray */ "./node_modules/es-get-iterator/node_modules/isarray/index.js");
 
-/***/ }),
+  var isString = __webpack_require__(/*! is-string */ "./node_modules/is-string/index.js");
 
-/***/ "./node_modules/es-abstract/2020/CreateDataProperty.js":
-/*!*************************************************************!*\
-  !*** ./node_modules/es-abstract/2020/CreateDataProperty.js ***!
-  \*************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+  var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
 
-"use strict";
+  var $Map = GetIntrinsic('%Map%', true);
+  var $Set = GetIntrinsic('%Set%', true);
 
+  var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+  var $arrayPush = callBound('Array.prototype.push');
+  var $charCodeAt = callBound('String.prototype.charCodeAt');
+  var $stringSlice = callBound('String.prototype.slice');
 
-var $TypeError = GetIntrinsic('%TypeError%');
+  var advanceStringIndex = function advanceStringIndex(S, index) {
+    var length = S.length;
 
-var DefineOwnProperty = __webpack_require__(/*! ../helpers/DefineOwnProperty */ "./node_modules/es-abstract/helpers/DefineOwnProperty.js");
+    if (index + 1 >= length) {
+      return index + 1;
+    }
 
-var FromPropertyDescriptor = __webpack_require__(/*! ./FromPropertyDescriptor */ "./node_modules/es-abstract/2020/FromPropertyDescriptor.js");
+    var first = $charCodeAt(S, index);
 
-var OrdinaryGetOwnProperty = __webpack_require__(/*! ./OrdinaryGetOwnProperty */ "./node_modules/es-abstract/2020/OrdinaryGetOwnProperty.js");
+    if (first < 0xD800 || first > 0xDBFF) {
+      return index + 1;
+    }
 
-var IsDataDescriptor = __webpack_require__(/*! ./IsDataDescriptor */ "./node_modules/es-abstract/2020/IsDataDescriptor.js");
+    var second = $charCodeAt(S, index + 1);
 
-var IsExtensible = __webpack_require__(/*! ./IsExtensible */ "./node_modules/es-abstract/2020/IsExtensible.js");
+    if (second < 0xDC00 || second > 0xDFFF) {
+      return index + 1;
+    }
 
-var IsPropertyKey = __webpack_require__(/*! ./IsPropertyKey */ "./node_modules/es-abstract/2020/IsPropertyKey.js");
+    return index + 2;
+  };
 
-var SameValue = __webpack_require__(/*! ./SameValue */ "./node_modules/es-abstract/2020/SameValue.js");
+  var getArrayIterator = function getArrayIterator(arraylike) {
+    var i = 0;
+    return {
+      next: function next() {
+        var done = i >= arraylike.length;
+        var value;
 
-var Type = __webpack_require__(/*! ./Type */ "./node_modules/es-abstract/2020/Type.js"); // https://ecma-international.org/ecma-262/6.0/#sec-createdataproperty
+        if (!done) {
+          value = arraylike[i];
+          i += 1;
+        }
 
+        return {
+          done: done,
+          value: value
+        };
+      }
+    };
+  };
 
-module.exports = function CreateDataProperty(O, P, V) {
-  if (Type(O) !== 'Object') {
-    throw new $TypeError('Assertion failed: Type(O) is not Object');
-  }
+  var getNonCollectionIterator = function getNonCollectionIterator(iterable, noPrimordialCollections) {
+    if (isArray(iterable) || isArguments(iterable)) {
+      return getArrayIterator(iterable);
+    }
 
-  if (!IsPropertyKey(P)) {
-    throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
-  }
+    if (isString(iterable)) {
+      var i = 0;
+      return {
+        next: function next() {
+          var nextIndex = advanceStringIndex(iterable, i);
+          var value = $stringSlice(iterable, i, nextIndex);
+          i = nextIndex;
+          return {
+            done: nextIndex > iterable.length,
+            value: value
+          };
+        }
+      };
+    } // es6-shim and es-shims' es-map use a string "_es6-shim iterator_" property on different iterables, such as MapIterator.
 
-  var oldDesc = OrdinaryGetOwnProperty(O, P);
-  var extensible = !oldDesc || IsExtensible(O);
-  var immutable = oldDesc && (!oldDesc['[[Writable]]'] || !oldDesc['[[Configurable]]']);
 
-  if (immutable || !extensible) {
-    return false;
-  }
+    if (noPrimordialCollections && typeof iterable['_es6-shim iterator_'] !== 'undefined') {
+      return iterable['_es6-shim iterator_']();
+    }
+  };
 
-  return DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, {
-    '[[Configurable]]': true,
-    '[[Enumerable]]': true,
-    '[[Value]]': V,
-    '[[Writable]]': true
-  });
-};
+  if (!$Map && !$Set) {
+    // the only language iterables are Array, String, arguments
+    // - Safari <= 6.0
+    // - Chrome < 38
+    // - node < 0.12
+    // - FF < 13
+    // - IE < 11
+    // - Edge < 11
+    module.exports = function getIterator(iterable) {
+      if (iterable != null) {
+        return getNonCollectionIterator(iterable, true);
+      }
+    };
+  } else {
+    // either Map or Set are available, but Symbol is not
+    // - es6-shim on an ES5 browser
+    // - Safari 6.2 (maybe 6.1?)
+    // - FF v[13, 36)
+    // - IE 11
+    // - Edge 11
+    // - Safari v[6, 9)
+    var isMap = __webpack_require__(/*! is-map */ "./node_modules/is-map/index.js");
 
-/***/ }),
+    var isSet = __webpack_require__(/*! is-set */ "./node_modules/is-set/index.js"); // Firefox >= 27, IE 11, Safari 6.2 - 9, Edge 11, es6-shim in older envs, all have forEach
 
-/***/ "./node_modules/es-abstract/2020/CreateDataPropertyOrThrow.js":
-/*!********************************************************************!*\
-  !*** ./node_modules/es-abstract/2020/CreateDataPropertyOrThrow.js ***!
-  \********************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
 
-"use strict";
+    var $mapForEach = callBound('Map.prototype.forEach', true);
+    var $setForEach = callBound('Set.prototype.forEach', true);
 
+    if (typeof process === 'undefined' || !process.versions || !process.versions.node) {
+      // "if is not node"
+      // Firefox 17 - 26 has `.iterator()`, whose iterator `.next()` either
+      // returns a value, or throws a StopIteration object. These browsers
+      // do not have any other mechanism for iteration.
+      var $mapIterator = callBound('Map.prototype.iterator', true);
+      var $setIterator = callBound('Set.prototype.iterator', true);
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+      var getStopIterationIterator = function (iterator) {
+        var done = false;
+        return {
+          next: function next() {
+            try {
+              return {
+                done: done,
+                value: done ? undefined : iterator.next()
+              };
+            } catch (e) {
+              done = true;
+              return {
+                done: true,
+                value: undefined
+              };
+            }
+          }
+        };
+      };
+    } // Firefox 27-35, and some older es6-shim versions, use a string "@@iterator" property
+    // this returns a proper iterator object, so we should use it instead of forEach.
+    // newer es6-shim versions use a string "_es6-shim iterator_" property.
 
-var $TypeError = GetIntrinsic('%TypeError%');
 
-var CreateDataProperty = __webpack_require__(/*! ./CreateDataProperty */ "./node_modules/es-abstract/2020/CreateDataProperty.js");
+    var $mapAtAtIterator = callBound('Map.prototype.@@iterator', true) || callBound('Map.prototype._es6-shim iterator_', true);
+    var $setAtAtIterator = callBound('Set.prototype.@@iterator', true) || callBound('Set.prototype._es6-shim iterator_', true);
 
-var IsPropertyKey = __webpack_require__(/*! ./IsPropertyKey */ "./node_modules/es-abstract/2020/IsPropertyKey.js");
+    var getCollectionIterator = function getCollectionIterator(iterable) {
+      if (isMap(iterable)) {
+        if ($mapIterator) {
+          return getStopIterationIterator($mapIterator(iterable));
+        }
 
-var Type = __webpack_require__(/*! ./Type */ "./node_modules/es-abstract/2020/Type.js"); // // https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow
+        if ($mapAtAtIterator) {
+          return $mapAtAtIterator(iterable);
+        }
 
+        if ($mapForEach) {
+          var entries = [];
+          $mapForEach(iterable, function (v, k) {
+            $arrayPush(entries, [k, v]);
+          });
+          return getArrayIterator(entries);
+        }
+      }
 
-module.exports = function CreateDataPropertyOrThrow(O, P, V) {
-  if (Type(O) !== 'Object') {
-    throw new $TypeError('Assertion failed: Type(O) is not Object');
-  }
+      if (isSet(iterable)) {
+        if ($setIterator) {
+          return getStopIterationIterator($setIterator(iterable));
+        }
 
-  if (!IsPropertyKey(P)) {
-    throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
-  }
+        if ($setAtAtIterator) {
+          return $setAtAtIterator(iterable);
+        }
 
-  var success = CreateDataProperty(O, P, V);
+        if ($setForEach) {
+          var values = [];
+          $setForEach(iterable, function (v) {
+            $arrayPush(values, v);
+          });
+          return getArrayIterator(values);
+        }
+      }
+    };
 
-  if (!success) {
-    throw new $TypeError('unable to create data property');
+    module.exports = function getIterator(iterable) {
+      return getCollectionIterator(iterable) || getNonCollectionIterator(iterable);
+    };
   }
-
-  return success;
-};
+}
 
 /***/ }),
 
-/***/ "./node_modules/es-abstract/2020/DefinePropertyOrThrow.js":
-/*!****************************************************************!*\
-  !*** ./node_modules/es-abstract/2020/DefinePropertyOrThrow.js ***!
-  \****************************************************************/
+/***/ "./node_modules/es-get-iterator/node_modules/isarray/index.js":
+/*!********************************************************************!*\
+  !*** ./node_modules/es-get-iterator/node_modules/isarray/index.js ***!
+  \********************************************************************/
 /*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
-
-var $TypeError = GetIntrinsic('%TypeError%');
-
-var isPropertyDescriptor = __webpack_require__(/*! ../helpers/isPropertyDescriptor */ "./node_modules/es-abstract/helpers/isPropertyDescriptor.js");
-
-var DefineOwnProperty = __webpack_require__(/*! ../helpers/DefineOwnProperty */ "./node_modules/es-abstract/helpers/DefineOwnProperty.js");
-
-var FromPropertyDescriptor = __webpack_require__(/*! ./FromPropertyDescriptor */ "./node_modules/es-abstract/2020/FromPropertyDescriptor.js");
-
-var IsAccessorDescriptor = __webpack_require__(/*! ./IsAccessorDescriptor */ "./node_modules/es-abstract/2020/IsAccessorDescriptor.js");
-
-var IsDataDescriptor = __webpack_require__(/*! ./IsDataDescriptor */ "./node_modules/es-abstract/2020/IsDataDescriptor.js");
-
-var IsPropertyKey = __webpack_require__(/*! ./IsPropertyKey */ "./node_modules/es-abstract/2020/IsPropertyKey.js");
-
-var SameValue = __webpack_require__(/*! ./SameValue */ "./node_modules/es-abstract/2020/SameValue.js");
-
-var ToPropertyDescriptor = __webpack_require__(/*! ./ToPropertyDescriptor */ "./node_modules/es-abstract/2020/ToPropertyDescriptor.js");
-
-var Type = __webpack_require__(/*! ./Type */ "./node_modules/es-abstract/2020/Type.js"); // https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow
-
-
-module.exports = function DefinePropertyOrThrow(O, P, desc) {
-  if (Type(O) !== 'Object') {
-    throw new $TypeError('Assertion failed: Type(O) is not Object');
-  }
-
-  if (!IsPropertyKey(P)) {
-    throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true');
-  }
-
-  var Desc = isPropertyDescriptor({
-    Type: Type,
-    IsDataDescriptor: IsDataDescriptor,
-    IsAccessorDescriptor: IsAccessorDescriptor
-  }, desc) ? desc : ToPropertyDescriptor(desc);
+/***/ (function(module, exports) {
 
-  if (!isPropertyDescriptor({
-    Type: Type,
-    IsDataDescriptor: IsDataDescriptor,
-    IsAccessorDescriptor: IsAccessorDescriptor
-  }, Desc)) {
-    throw new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');
-  }
+var toString = {}.toString;
 
-  return DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, Desc);
+module.exports = Array.isArray || function (arr) {
+  return toString.call(arr) == '[object Array]';
 };
 
 /***/ }),
 
-/***/ "./node_modules/es-abstract/2020/FromPropertyDescriptor.js":
-/*!*****************************************************************!*\
-  !*** ./node_modules/es-abstract/2020/FromPropertyDescriptor.js ***!
-  \*****************************************************************/
+/***/ "./node_modules/foreach/index.js":
+/*!***************************************!*\
+  !*** ./node_modules/foreach/index.js ***!
+  \***************************************/
 /*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var assertRecord = __webpack_require__(/*! ../helpers/assertRecord */ "./node_modules/es-abstract/helpers/assertRecord.js");
-
-var Type = __webpack_require__(/*! ./Type */ "./node_modules/es-abstract/2020/Type.js"); // https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor
-
-
-module.exports = function FromPropertyDescriptor(Desc) {
-  if (typeof Desc === 'undefined') {
-    return Desc;
-  }
-
-  assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
-  var obj = {};
-
-  if ('[[Value]]' in Desc) {
-    obj.value = Desc['[[Value]]'];
-  }
-
-  if ('[[Writable]]' in Desc) {
-    obj.writable = Desc['[[Writable]]'];
-  }
+/***/ (function(module, exports) {
 
-  if ('[[Get]]' in Desc) {
-    obj.get = Desc['[[Get]]'];
-  }
+var hasOwn = Object.prototype.hasOwnProperty;
+var toString = Object.prototype.toString;
 
-  if ('[[Set]]' in Desc) {
-    obj.set = Desc['[[Set]]'];
+module.exports = function forEach(obj, fn, ctx) {
+  if (toString.call(fn) !== '[object Function]') {
+    throw new TypeError('iterator must be a function');
   }
 
-  if ('[[Enumerable]]' in Desc) {
-    obj.enumerable = Desc['[[Enumerable]]'];
-  }
+  var l = obj.length;
 
-  if ('[[Configurable]]' in Desc) {
-    obj.configurable = Desc['[[Configurable]]'];
+  if (l === +l) {
+    for (var i = 0; i < l; i++) {
+      fn.call(ctx, obj[i], i, obj);
+    }
+  } else {
+    for (var k in obj) {
+      if (hasOwn.call(obj, k)) {
+        fn.call(ctx, obj[k], k, obj);
+      }
+    }
   }
-
-  return obj;
-};
-
-/***/ }),
-
-/***/ "./node_modules/es-abstract/2020/Get.js":
-/*!**********************************************!*\
-  !*** ./node_modules/es-abstract/2020/Get.js ***!
-  \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
-
-var $TypeError = GetIntrinsic('%TypeError%');
-
-var inspect = __webpack_require__(/*! object-inspect */ "./node_modules/object-inspect/index.js");
-
-var IsPropertyKey = __webpack_require__(/*! ./IsPropertyKey */ "./node_modules/es-abstract/2020/IsPropertyKey.js");
-
-var Type = __webpack_require__(/*! ./Type */ "./node_modules/es-abstract/2020/Type.js");
-/**
- * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p
- * 1. Assert: Type(O) is Object.
- * 2. Assert: IsPropertyKey(P) is true.
- * 3. Return O.[[Get]](P, O).
- */
-
-
-module.exports = function Get(O, P) {
-  // 7.3.1.1
-  if (Type(O) !== 'Object') {
-    throw new $TypeError('Assertion failed: Type(O) is not Object');
-  } // 7.3.1.2
-
-
-  if (!IsPropertyKey(P)) {
-    throw new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));
-  } // 7.3.1.3
-
-
-  return O[P];
 };
 
 /***/ }),
 
-/***/ "./node_modules/es-abstract/2020/HasProperty.js":
+/***/ "./node_modules/function-bind/implementation.js":
 /*!******************************************************!*\
-  !*** ./node_modules/es-abstract/2020/HasProperty.js ***!
+  !*** ./node_modules/function-bind/implementation.js ***!
   \******************************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
 
+/* eslint no-invalid-this: 1 */
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
-
-var $TypeError = GetIntrinsic('%TypeError%');
-
-var IsPropertyKey = __webpack_require__(/*! ./IsPropertyKey */ "./node_modules/es-abstract/2020/IsPropertyKey.js");
-
-var Type = __webpack_require__(/*! ./Type */ "./node_modules/es-abstract/2020/Type.js"); // https://ecma-international.org/ecma-262/6.0/#sec-hasproperty
-
+var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
+var slice = Array.prototype.slice;
+var toStr = Object.prototype.toString;
+var funcType = '[object Function]';
 
-module.exports = function HasProperty(O, P) {
-  if (Type(O) !== 'Object') {
-    throw new $TypeError('Assertion failed: `O` must be an Object');
-  }
+module.exports = function bind(that) {
+  var target = this;
 
-  if (!IsPropertyKey(P)) {
-    throw new $TypeError('Assertion failed: `P` must be a Property Key');
+  if (typeof target !== 'function' || toStr.call(target) !== funcType) {
+    throw new TypeError(ERROR_MESSAGE + target);
   }
 
-  return P in O;
-};
-
-/***/ }),
-
-/***/ "./node_modules/es-abstract/2020/IsAccessorDescriptor.js":
-/*!***************************************************************!*\
-  !*** ./node_modules/es-abstract/2020/IsAccessorDescriptor.js ***!
-  \***************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
+  var args = slice.call(arguments, 1);
+  var bound;
 
-var has = __webpack_require__(/*! has */ "./node_modules/has/src/index.js");
+  var binder = function () {
+    if (this instanceof bound) {
+      var result = target.apply(this, args.concat(slice.call(arguments)));
 
-var assertRecord = __webpack_require__(/*! ../helpers/assertRecord */ "./node_modules/es-abstract/helpers/assertRecord.js");
+      if (Object(result) === result) {
+        return result;
+      }
 
-var Type = __webpack_require__(/*! ./Type */ "./node_modules/es-abstract/2020/Type.js"); // https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor
+      return this;
+    } else {
+      return target.apply(that, args.concat(slice.call(arguments)));
+    }
+  };
 
+  var boundLength = Math.max(0, target.length - args.length);
+  var boundArgs = [];
 
-module.exports = function IsAccessorDescriptor(Desc) {
-  if (typeof Desc === 'undefined') {
-    return false;
+  for (var i = 0; i < boundLength; i++) {
+    boundArgs.push('$' + i);
   }
 
-  assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
+  bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);
+
+  if (target.prototype) {
+    var Empty = function Empty() {};
 
-  if (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {
-    return false;
+    Empty.prototype = target.prototype;
+    bound.prototype = new Empty();
+    Empty.prototype = null;
   }
 
-  return true;
+  return bound;
 };
 
 /***/ }),
 
-/***/ "./node_modules/es-abstract/2020/IsArray.js":
-/*!**************************************************!*\
-  !*** ./node_modules/es-abstract/2020/IsArray.js ***!
-  \**************************************************/
+/***/ "./node_modules/function-bind/index.js":
+/*!*********************************************!*\
+  !*** ./node_modules/function-bind/index.js ***!
+  \*********************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
 
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
-
-var $Array = GetIntrinsic('%Array%'); // eslint-disable-next-line global-require
-
-var toStr = !$Array.isArray && __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js")('Object.prototype.toString'); // https://ecma-international.org/ecma-262/6.0/#sec-isarray
-
+var implementation = __webpack_require__(/*! ./implementation */ "./node_modules/function-bind/implementation.js");
 
-module.exports = $Array.isArray || function IsArray(argument) {
-  return toStr(argument) === '[object Array]';
-};
+module.exports = Function.prototype.bind || implementation;
 
 /***/ }),
 
-/***/ "./node_modules/es-abstract/2020/IsCallable.js":
-/*!*****************************************************!*\
-  !*** ./node_modules/es-abstract/2020/IsCallable.js ***!
-  \*****************************************************/
+/***/ "./node_modules/get-intrinsic/index.js":
+/*!*********************************************!*\
+  !*** ./node_modules/get-intrinsic/index.js ***!
+  \*********************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
- // http://262.ecma-international.org/5.1/#sec-9.11
 
-module.exports = __webpack_require__(/*! is-callable */ "./node_modules/is-callable/index.js");
-
-/***/ }),
-
-/***/ "./node_modules/es-abstract/2020/IsConstructor.js":
-/*!********************************************************!*\
-  !*** ./node_modules/es-abstract/2020/IsConstructor.js ***!
-  \********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
 
-"use strict";
+var undefined;
+var $SyntaxError = SyntaxError;
+var $Function = Function;
+var $TypeError = TypeError; // eslint-disable-next-line consistent-return
 
+var getEvalledConstructor = function (expressionSyntax) {
+  try {
+    return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')();
+  } catch (e) {}
+};
 
-var GetIntrinsic = __webpack_require__(/*! ../GetIntrinsic.js */ "./node_modules/es-abstract/GetIntrinsic.js");
+var $gOPD = Object.getOwnPropertyDescriptor;
 
-var $construct = GetIntrinsic('%Reflect.construct%', true);
+if ($gOPD) {
+  try {
+    $gOPD({}, '');
+  } catch (e) {
+    $gOPD = null; // this is IE 8, which has a broken gOPD
+  }
+}
 
-var DefinePropertyOrThrow = __webpack_require__(/*! ./DefinePropertyOrThrow */ "./node_modules/es-abstract/2020/DefinePropertyOrThrow.js");
+var throwTypeError = function () {
+  throw new $TypeError();
+};
 
-try {
-  DefinePropertyOrThrow({}, '', {
-    '[[Get]]': function () {}
-  });
-} catch (e) {
-  // Accessor properties aren't supported
-  DefinePropertyOrThrow = null;
-} // https://ecma-international.org/ecma-262/6.0/#sec-isconstructor
-
-
-if (DefinePropertyOrThrow && $construct) {
-  var isConstructorMarker = {};
-  var badArrayLike = {};
-  DefinePropertyOrThrow(badArrayLike, 'length', {
-    '[[Get]]': function () {
-      throw isConstructorMarker;
-    },
-    '[[Enumerable]]': true
-  });
+var ThrowTypeError = $gOPD ? function () {
+  try {
+    // eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties
+    arguments.callee; // IE 8 does not throw here
 
-  module.exports = function IsConstructor(argument) {
+    return throwTypeError;
+  } catch (calleeThrows) {
     try {
-      // `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:
-      $construct(argument, badArrayLike);
-    } catch (err) {
-      return err === isConstructorMarker;
+      // IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')
+      return $gOPD(arguments, 'callee').get;
+    } catch (gOPDthrows) {
+      return throwTypeError;
     }
-  };
-} else {
-  module.exports = function IsConstructor(argument) {
-    // unfortunately there's no way to truly check this without try/catch `new argument` in old environments
-    return typeof argument === 'function' && !!argument.prototype;
-  };
-}
-
-/***/ }),
-
-/***/ "./node_modules/es-abstract/2020/IsDataDescriptor.js":
-/*!***********************************************************!*\
-  !*** ./node_modules/es-abstract/2020/IsDataDescriptor.js ***!
-  \***********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var has = __webpack_require__(/*! has */ "./node_modules/has/src/index.js");
-
-var assertRecord = __webpack_require__(/*! ../helpers/assertRecord */ "./node_modules/es-abstract/helpers/assertRecord.js");
-
-var Type = __webpack_require__(/*! ./Type */ "./node_modules/es-abstract/2020/Type.js"); // https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor
-
-
-module.exports = function IsDataDescriptor(Desc) {
-  if (typeof Desc === 'undefined') {
-    return false;
   }
+}() : throwTypeError;
 
-  assertRecord(Type, 'Property Descriptor', 'Desc', Desc);
-
-  if (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {
-    return false;
-  }
+var hasSymbols = __webpack_require__(/*! has-symbols */ "./node_modules/has-symbols/index.js")();
 
-  return true;
-};
+var getProto = Object.getPrototypeOf || function (x) {
+  return x.__proto__;
+}; // eslint-disable-line no-proto
 
-/***/ }),
 
-/***/ "./node_modules/es-abstract/2020/IsExtensible.js":
-/*!*******************************************************!*\
-  !*** ./node_modules/es-abstract/2020/IsExtensible.js ***!
-  \*******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
+var needsEval = {};
+var TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);
+var INTRINSICS = {
+  '%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,
+  '%Array%': Array,
+  '%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,
+  '%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,
+  '%AsyncFromSyncIteratorPrototype%': undefined,
+  '%AsyncFunction%': needsEval,
+  '%AsyncGenerator%': needsEval,
+  '%AsyncGeneratorFunction%': needsEval,
+  '%AsyncIteratorPrototype%': needsEval,
+  '%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,
+  '%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,
+  '%Boolean%': Boolean,
+  '%DataView%': typeof DataView === 'undefined' ? undefined : DataView,
+  '%Date%': Date,
+  '%decodeURI%': decodeURI,
+  '%decodeURIComponent%': decodeURIComponent,
+  '%encodeURI%': encodeURI,
+  '%encodeURIComponent%': encodeURIComponent,
+  '%Error%': Error,
+  '%eval%': eval,
+  // eslint-disable-line no-eval
+  '%EvalError%': EvalError,
+  '%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,
+  '%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,
+  '%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,
+  '%Function%': $Function,
+  '%GeneratorFunction%': needsEval,
+  '%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,
+  '%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,
+  '%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,
+  '%isFinite%': isFinite,
+  '%isNaN%': isNaN,
+  '%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,
+  '%JSON%': typeof JSON === 'object' ? JSON : undefined,
+  '%Map%': typeof Map === 'undefined' ? undefined : Map,
+  '%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),
+  '%Math%': Math,
+  '%Number%': Number,
+  '%Object%': Object,
+  '%parseFloat%': parseFloat,
+  '%parseInt%': parseInt,
+  '%Promise%': typeof Promise === 'undefined' ? undefined : Promise,
+  '%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,
+  '%RangeError%': RangeError,
+  '%ReferenceError%': ReferenceError,
+  '%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,
+  '%RegExp%': RegExp,
+  '%Set%': typeof Set === 'undefined' ? undefined : Set,
+  '%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),
+  '%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,
+  '%String%': String,
+  '%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,
+  '%Symbol%': hasSymbols ? Symbol : undefined,
+  '%SyntaxError%': $SyntaxError,
+  '%ThrowTypeError%': ThrowTypeError,
+  '%TypedArray%': TypedArray,
+  '%TypeError%': $TypeError,
+  '%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,
+  '%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,
+  '%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,
+  '%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,
+  '%URIError%': URIError,
+  '%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,
+  '%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,
+  '%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet
+};
 
+var doEval = function doEval(name) {
+  var value;
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+  if (name === '%AsyncFunction%') {
+    value = getEvalledConstructor('async function () {}');
+  } else if (name === '%GeneratorFunction%') {
+    value = getEvalledConstructor('function* () {}');
+  } else if (name === '%AsyncGeneratorFunction%') {
+    value = getEvalledConstructor('async function* () {}');
+  } else if (name === '%AsyncGenerator%') {
+    var fn = doEval('%AsyncGeneratorFunction%');
 
-var $Object = GetIntrinsic('%Object%');
+    if (fn) {
+      value = fn.prototype;
+    }
+  } else if (name === '%AsyncIteratorPrototype%') {
+    var gen = doEval('%AsyncGenerator%');
 
-var isPrimitive = __webpack_require__(/*! ../helpers/isPrimitive */ "./node_modules/es-abstract/helpers/isPrimitive.js");
+    if (gen) {
+      value = getProto(gen.prototype);
+    }
+  }
 
-var $preventExtensions = $Object.preventExtensions;
-var $isExtensible = $Object.isExtensible; // https://ecma-international.org/ecma-262/6.0/#sec-isextensible-o
+  INTRINSICS[name] = value;
+  return value;
+};
 
-module.exports = $preventExtensions ? function IsExtensible(obj) {
-  return !isPrimitive(obj) && $isExtensible(obj);
-} : function IsExtensible(obj) {
-  return !isPrimitive(obj);
+var LEGACY_ALIASES = {
+  '%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],
+  '%ArrayPrototype%': ['Array', 'prototype'],
+  '%ArrayProto_entries%': ['Array', 'prototype', 'entries'],
+  '%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],
+  '%ArrayProto_keys%': ['Array', 'prototype', 'keys'],
+  '%ArrayProto_values%': ['Array', 'prototype', 'values'],
+  '%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],
+  '%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],
+  '%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],
+  '%BooleanPrototype%': ['Boolean', 'prototype'],
+  '%DataViewPrototype%': ['DataView', 'prototype'],
+  '%DatePrototype%': ['Date', 'prototype'],
+  '%ErrorPrototype%': ['Error', 'prototype'],
+  '%EvalErrorPrototype%': ['EvalError', 'prototype'],
+  '%Float32ArrayPrototype%': ['Float32Array', 'prototype'],
+  '%Float64ArrayPrototype%': ['Float64Array', 'prototype'],
+  '%FunctionPrototype%': ['Function', 'prototype'],
+  '%Generator%': ['GeneratorFunction', 'prototype'],
+  '%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],
+  '%Int8ArrayPrototype%': ['Int8Array', 'prototype'],
+  '%Int16ArrayPrototype%': ['Int16Array', 'prototype'],
+  '%Int32ArrayPrototype%': ['Int32Array', 'prototype'],
+  '%JSONParse%': ['JSON', 'parse'],
+  '%JSONStringify%': ['JSON', 'stringify'],
+  '%MapPrototype%': ['Map', 'prototype'],
+  '%NumberPrototype%': ['Number', 'prototype'],
+  '%ObjectPrototype%': ['Object', 'prototype'],
+  '%ObjProto_toString%': ['Object', 'prototype', 'toString'],
+  '%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],
+  '%PromisePrototype%': ['Promise', 'prototype'],
+  '%PromiseProto_then%': ['Promise', 'prototype', 'then'],
+  '%Promise_all%': ['Promise', 'all'],
+  '%Promise_reject%': ['Promise', 'reject'],
+  '%Promise_resolve%': ['Promise', 'resolve'],
+  '%RangeErrorPrototype%': ['RangeError', 'prototype'],
+  '%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],
+  '%RegExpPrototype%': ['RegExp', 'prototype'],
+  '%SetPrototype%': ['Set', 'prototype'],
+  '%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],
+  '%StringPrototype%': ['String', 'prototype'],
+  '%SymbolPrototype%': ['Symbol', 'prototype'],
+  '%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],
+  '%TypedArrayPrototype%': ['TypedArray', 'prototype'],
+  '%TypeErrorPrototype%': ['TypeError', 'prototype'],
+  '%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],
+  '%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],
+  '%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],
+  '%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],
+  '%URIErrorPrototype%': ['URIError', 'prototype'],
+  '%WeakMapPrototype%': ['WeakMap', 'prototype'],
+  '%WeakSetPrototype%': ['WeakSet', 'prototype']
 };
 
-/***/ }),
+var bind = __webpack_require__(/*! function-bind */ "./node_modules/function-bind/index.js");
 
-/***/ "./node_modules/es-abstract/2020/IsInteger.js":
-/*!****************************************************!*\
-  !*** ./node_modules/es-abstract/2020/IsInteger.js ***!
-  \****************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+var hasOwn = __webpack_require__(/*! has */ "./node_modules/has/src/index.js");
 
-"use strict";
+var $concat = bind.call(Function.call, Array.prototype.concat);
+var $spliceApply = bind.call(Function.apply, Array.prototype.splice);
+var $replace = bind.call(Function.call, String.prototype.replace);
+var $strSlice = bind.call(Function.call, String.prototype.slice);
+/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */
 
+var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
+var reEscapeChar = /\\(\\)?/g;
+/** Used to match backslashes in property paths. */
 
-var abs = __webpack_require__(/*! ./abs */ "./node_modules/es-abstract/2020/abs.js");
+var stringToPath = function stringToPath(string) {
+  var first = $strSlice(string, 0, 1);
+  var last = $strSlice(string, -1);
 
-var floor = __webpack_require__(/*! ./floor */ "./node_modules/es-abstract/2020/floor.js");
+  if (first === '%' && last !== '%') {
+    throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`');
+  } else if (last === '%' && first !== '%') {
+    throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`');
+  }
 
-var $isNaN = __webpack_require__(/*! ../helpers/isNaN */ "./node_modules/es-abstract/helpers/isNaN.js");
+  var result = [];
+  $replace(string, rePropName, function (match, number, quote, subString) {
+    result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;
+  });
+  return result;
+};
+/* end adaptation */
 
-var $isFinite = __webpack_require__(/*! ../helpers/isFinite */ "./node_modules/es-abstract/helpers/isFinite.js"); // https://ecma-international.org/ecma-262/6.0/#sec-isinteger
 
+var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {
+  var intrinsicName = name;
+  var alias;
 
-module.exports = function IsInteger(argument) {
-  if (typeof argument !== 'number' || $isNaN(argument) || !$isFinite(argument)) {
-    return false;
+  if (hasOwn(LEGACY_ALIASES, intrinsicName)) {
+    alias = LEGACY_ALIASES[intrinsicName];
+    intrinsicName = '%' + alias[0] + '%';
   }
 
-  var absValue = abs(argument);
-  return floor(absValue) === absValue;
-};
+  if (hasOwn(INTRINSICS, intrinsicName)) {
+    var value = INTRINSICS[intrinsicName];
 
-/***/ }),
+    if (value === needsEval) {
+      value = doEval(intrinsicName);
+    }
 
-/***/ "./node_modules/es-abstract/2020/IsPropertyKey.js":
-/*!********************************************************!*\
-  !*** ./node_modules/es-abstract/2020/IsPropertyKey.js ***!
-  \********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+    if (typeof value === 'undefined' && !allowMissing) {
+      throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');
+    }
 
-"use strict";
- // https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey
+    return {
+      alias: alias,
+      name: intrinsicName,
+      value: value
+    };
+  }
 
-module.exports = function IsPropertyKey(argument) {
-  return typeof argument === 'string' || typeof argument === 'symbol';
+  throw new $SyntaxError('intrinsic ' + name + ' does not exist!');
 };
 
-/***/ }),
+module.exports = function GetIntrinsic(name, allowMissing) {
+  if (typeof name !== 'string' || name.length === 0) {
+    throw new $TypeError('intrinsic name must be a non-empty string');
+  }
 
-/***/ "./node_modules/es-abstract/2020/IsRegExp.js":
-/*!***************************************************!*\
-  !*** ./node_modules/es-abstract/2020/IsRegExp.js ***!
-  \***************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+  if (arguments.length > 1 && typeof allowMissing !== 'boolean') {
+    throw new $TypeError('"allowMissing" argument must be a boolean');
+  }
 
-"use strict";
+  var parts = stringToPath(name);
+  var intrinsicBaseName = parts.length > 0 ? parts[0] : '';
+  var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);
+  var intrinsicRealName = intrinsic.name;
+  var value = intrinsic.value;
+  var skipFurtherCaching = false;
+  var alias = intrinsic.alias;
 
+  if (alias) {
+    intrinsicBaseName = alias[0];
+    $spliceApply(parts, $concat([0, 1], alias));
+  }
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+  for (var i = 1, isOwn = true; i < parts.length; i += 1) {
+    var part = parts[i];
+    var first = $strSlice(part, 0, 1);
+    var last = $strSlice(part, -1);
 
-var $match = GetIntrinsic('%Symbol.match%', true);
+    if ((first === '"' || first === "'" || first === '`' || last === '"' || last === "'" || last === '`') && first !== last) {
+      throw new $SyntaxError('property names with quotes must have matching quotes');
+    }
 
-var hasRegExpMatcher = __webpack_require__(/*! is-regex */ "./node_modules/is-regex/index.js");
+    if (part === 'constructor' || !isOwn) {
+      skipFurtherCaching = true;
+    }
 
-var ToBoolean = __webpack_require__(/*! ./ToBoolean */ "./node_modules/es-abstract/2020/ToBoolean.js"); // https://ecma-international.org/ecma-262/6.0/#sec-isregexp
+    intrinsicBaseName += '.' + part;
+    intrinsicRealName = '%' + intrinsicBaseName + '%';
 
+    if (hasOwn(INTRINSICS, intrinsicRealName)) {
+      value = INTRINSICS[intrinsicRealName];
+    } else if (value != null) {
+      if (!(part in value)) {
+        if (!allowMissing) {
+          throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');
+        }
 
-module.exports = function IsRegExp(argument) {
-  if (!argument || typeof argument !== 'object') {
-    return false;
-  }
+        return void undefined;
+      }
 
-  if ($match) {
-    var isRegExp = argument[$match];
+      if ($gOPD && i + 1 >= parts.length) {
+        var desc = $gOPD(value, part);
+        isOwn = !!desc; // By convention, when a data property is converted to an accessor
+        // property to emulate a data property that does not suffer from
+        // the override mistake, that accessor's getter is marked with
+        // an `originalValue` property. Here, when we detect this, we
+        // uphold the illusion by pretending to see that original data
+        // property, i.e., returning the value rather than the getter
+        // itself.
+
+        if (isOwn && 'get' in desc && !('originalValue' in desc.get)) {
+          value = desc.get;
+        } else {
+          value = value[part];
+        }
+      } else {
+        isOwn = hasOwn(value, part);
+        value = value[part];
+      }
 
-    if (typeof isRegExp !== 'undefined') {
-      return ToBoolean(isRegExp);
+      if (isOwn && !skipFurtherCaching) {
+        INTRINSICS[intrinsicRealName] = value;
+      }
     }
   }
 
-  return hasRegExpMatcher(argument);
+  return value;
 };
 
 /***/ }),
 
-/***/ "./node_modules/es-abstract/2020/LengthOfArrayLike.js":
-/*!************************************************************!*\
-  !*** ./node_modules/es-abstract/2020/LengthOfArrayLike.js ***!
-  \************************************************************/
+/***/ "./node_modules/google-protobuf/google-protobuf.js":
+/*!*********************************************************!*\
+  !*** ./node_modules/google-protobuf/google-protobuf.js ***!
+  \*********************************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-"use strict";
-
-
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
-
-var $TypeError = GetIntrinsic('%TypeError%');
-
-var Get = __webpack_require__(/*! ./Get */ "./node_modules/es-abstract/2020/Get.js");
+var $jscomp = $jscomp || {};
+$jscomp.scope = {};
 
-var ToLength = __webpack_require__(/*! ./ToLength */ "./node_modules/es-abstract/2020/ToLength.js");
+$jscomp.findInternal = function (a, b, c) {
+  a instanceof String && (a = String(a));
 
-var Type = __webpack_require__(/*! ./Type */ "./node_modules/es-abstract/2020/Type.js"); // https://262.ecma-international.org/11.0/#sec-lengthofarraylike
+  for (var d = a.length, e = 0; e < d; e++) {
+    var f = a[e];
+    if (b.call(c, f, e, a)) return {
+      i: e,
+      v: f
+    };
+  }
 
+  return {
+    i: -1,
+    v: void 0
+  };
+};
 
-module.exports = function LengthOfArrayLike(obj) {
-  if (Type(obj) !== 'Object') {
-    throw new $TypeError('Assertion failed: `obj` must be an Object');
-  }
+$jscomp.ASSUME_ES5 = !1;
+$jscomp.ASSUME_NO_NATIVE_MAP = !1;
+$jscomp.ASSUME_NO_NATIVE_SET = !1;
+$jscomp.SIMPLE_FROUND_POLYFILL = !1;
+$jscomp.defineProperty = $jscomp.ASSUME_ES5 || "function" == typeof Object.defineProperties ? Object.defineProperty : function (a, b, c) {
+  a != Array.prototype && a != Object.prototype && (a[b] = c.value);
+};
 
-  return ToLength(Get(obj, 'length'));
-}; // TODO: use this all over
+$jscomp.getGlobal = function (a) {
+  return "undefined" != typeof window && window === a ? a : "undefined" != typeof global && null != global ? global : a;
+};
 
-/***/ }),
+$jscomp.global = $jscomp.getGlobal(this);
 
-/***/ "./node_modules/es-abstract/2020/OrdinaryGetOwnProperty.js":
-/*!*****************************************************************!*\
-  !*** ./node_modules/es-abstract/2020/OrdinaryGetOwnProperty.js ***!
-  \*****************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+$jscomp.polyfill = function (a, b, c, d) {
+  if (b) {
+    c = $jscomp.global;
+    a = a.split(".");
 
-"use strict";
+    for (d = 0; d < a.length - 1; d++) {
+      var e = a[d];
+      e in c || (c[e] = {});
+      c = c[e];
+    }
 
+    a = a[a.length - 1];
+    d = c[a];
+    b = b(d);
+    b != d && null != b && $jscomp.defineProperty(c, a, {
+      configurable: !0,
+      writable: !0,
+      value: b
+    });
+  }
+};
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+$jscomp.polyfill("Array.prototype.findIndex", function (a) {
+  return a ? a : function (a, c) {
+    return $jscomp.findInternal(this, a, c).i;
+  };
+}, "es6", "es3");
 
-var $gOPD = __webpack_require__(/*! ../helpers/getOwnPropertyDescriptor */ "./node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js");
+$jscomp.checkStringArgs = function (a, b, c) {
+  if (null == a) throw new TypeError("The 'this' value for String.prototype." + c + " must not be null or undefined");
+  if (b instanceof RegExp) throw new TypeError("First argument to String.prototype." + c + " must not be a regular expression");
+  return a + "";
+};
 
-var $TypeError = GetIntrinsic('%TypeError%');
+$jscomp.polyfill("String.prototype.endsWith", function (a) {
+  return a ? a : function (a, c) {
+    var b = $jscomp.checkStringArgs(this, a, "endsWith");
+    a += "";
+    void 0 === c && (c = b.length);
+    c = Math.max(0, Math.min(c | 0, b.length));
 
-var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
+    for (var e = a.length; 0 < e && 0 < c;) if (b[--c] != a[--e]) return !1;
 
-var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+    return 0 >= e;
+  };
+}, "es6", "es3");
+$jscomp.polyfill("Array.prototype.find", function (a) {
+  return a ? a : function (a, c) {
+    return $jscomp.findInternal(this, a, c).v;
+  };
+}, "es6", "es3");
+$jscomp.polyfill("String.prototype.startsWith", function (a) {
+  return a ? a : function (a, c) {
+    var b = $jscomp.checkStringArgs(this, a, "startsWith");
+    a += "";
+    var e = b.length,
+        f = a.length;
+    c = Math.max(0, Math.min(c | 0, b.length));
 
-var has = __webpack_require__(/*! has */ "./node_modules/has/src/index.js");
+    for (var g = 0; g < f && c < e;) if (b[c++] != a[g++]) return !1;
 
-var IsArray = __webpack_require__(/*! ./IsArray */ "./node_modules/es-abstract/2020/IsArray.js");
+    return g >= f;
+  };
+}, "es6", "es3");
+$jscomp.polyfill("String.prototype.repeat", function (a) {
+  return a ? a : function (a) {
+    var b = $jscomp.checkStringArgs(this, null, "repeat");
+    if (0 > a || 1342177279 < a) throw new RangeError("Invalid count value");
+    a |= 0;
 
-var IsPropertyKey = __webpack_require__(/*! ./IsPropertyKey */ "./node_modules/es-abstract/2020/IsPropertyKey.js");
+    for (var d = ""; a;) if (a & 1 && (d += b), a >>>= 1) b += b;
 
-var IsRegExp = __webpack_require__(/*! ./IsRegExp */ "./node_modules/es-abstract/2020/IsRegExp.js");
+    return d;
+  };
+}, "es6", "es3");
+var COMPILED = !0,
+    goog = goog || {};
+goog.global = this || self;
 
-var ToPropertyDescriptor = __webpack_require__(/*! ./ToPropertyDescriptor */ "./node_modules/es-abstract/2020/ToPropertyDescriptor.js");
+goog.isDef = function (a) {
+  return void 0 !== a;
+};
 
-var Type = __webpack_require__(/*! ./Type */ "./node_modules/es-abstract/2020/Type.js"); // https://ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty
+goog.isString = function (a) {
+  return "string" == typeof a;
+};
 
+goog.isBoolean = function (a) {
+  return "boolean" == typeof a;
+};
 
-module.exports = function OrdinaryGetOwnProperty(O, P) {
-  if (Type(O) !== 'Object') {
-    throw new $TypeError('Assertion failed: O must be an Object');
-  }
+goog.isNumber = function (a) {
+  return "number" == typeof a;
+};
 
-  if (!IsPropertyKey(P)) {
-    throw new $TypeError('Assertion failed: P must be a Property Key');
-  }
+goog.exportPath_ = function (a, b, c) {
+  a = a.split(".");
+  c = c || goog.global;
+  a[0] in c || "undefined" == typeof c.execScript || c.execScript("var " + a[0]);
 
-  if (!has(O, P)) {
-    return void 0;
-  }
+  for (var d; a.length && (d = a.shift());) !a.length && goog.isDef(b) ? c[d] = b : c = c[d] && c[d] !== Object.prototype[d] ? c[d] : c[d] = {};
+};
 
-  if (!$gOPD) {
-    // ES3 / IE 8 fallback
-    var arrayLength = IsArray(O) && P === 'length';
-    var regexLastIndex = IsRegExp(O) && P === 'lastIndex';
-    return {
-      '[[Configurable]]': !(arrayLength || regexLastIndex),
-      '[[Enumerable]]': $isEnumerable(O, P),
-      '[[Value]]': O[P],
-      '[[Writable]]': true
-    };
+goog.define = function (a, b) {
+  if (!COMPILED) {
+    var c = goog.global.CLOSURE_UNCOMPILED_DEFINES,
+        d = goog.global.CLOSURE_DEFINES;
+    c && void 0 === c.nodeType && Object.prototype.hasOwnProperty.call(c, a) ? b = c[a] : d && void 0 === d.nodeType && Object.prototype.hasOwnProperty.call(d, a) && (b = d[a]);
   }
 
-  return ToPropertyDescriptor($gOPD(O, P));
+  return b;
 };
 
-/***/ }),
+goog.FEATURESET_YEAR = 2012;
+goog.DEBUG = !0;
+goog.LOCALE = "en";
+goog.TRUSTED_SITE = !0;
+goog.STRICT_MODE_COMPATIBLE = !1;
+goog.DISALLOW_TEST_ONLY_CODE = COMPILED && !goog.DEBUG;
+goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING = !1;
 
-/***/ "./node_modules/es-abstract/2020/RequireObjectCoercible.js":
-/*!*****************************************************************!*\
-  !*** ./node_modules/es-abstract/2020/RequireObjectCoercible.js ***!
-  \*****************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+goog.provide = function (a) {
+  if (goog.isInModuleLoader_()) throw Error("goog.provide cannot be used within a module.");
+  if (!COMPILED && goog.isProvided_(a)) throw Error('Namespace "' + a + '" already declared.');
+  goog.constructNamespace_(a);
+};
 
-"use strict";
+goog.constructNamespace_ = function (a, b) {
+  if (!COMPILED) {
+    delete goog.implicitNamespaces_[a];
 
+    for (var c = a; (c = c.substring(0, c.lastIndexOf("."))) && !goog.getObjectByName(c);) goog.implicitNamespaces_[c] = !0;
+  }
 
-module.exports = __webpack_require__(/*! ../5/CheckObjectCoercible */ "./node_modules/es-abstract/5/CheckObjectCoercible.js");
+  goog.exportPath_(a, b);
+};
 
-/***/ }),
+goog.getScriptNonce = function (a) {
+  if (a && a != goog.global) return goog.getScriptNonce_(a.document);
+  null === goog.cspNonce_ && (goog.cspNonce_ = goog.getScriptNonce_(goog.global.document));
+  return goog.cspNonce_;
+};
 
-/***/ "./node_modules/es-abstract/2020/SameValue.js":
-/*!****************************************************!*\
-  !*** ./node_modules/es-abstract/2020/SameValue.js ***!
-  \****************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+goog.NONCE_PATTERN_ = /^[\w+/_-]+[=]{0,2}$/;
+goog.cspNonce_ = null;
 
-"use strict";
+goog.getScriptNonce_ = function (a) {
+  return (a = a.querySelector && a.querySelector("script[nonce]")) && (a = a.nonce || a.getAttribute("nonce")) && goog.NONCE_PATTERN_.test(a) ? a : "";
+};
 
+goog.VALID_MODULE_RE_ = /^[a-zA-Z_$][a-zA-Z0-9._$]*$/;
 
-var $isNaN = __webpack_require__(/*! ../helpers/isNaN */ "./node_modules/es-abstract/helpers/isNaN.js"); // http://262.ecma-international.org/5.1/#sec-9.12
+goog.module = function (a) {
+  if (!goog.isString(a) || !a || -1 == a.search(goog.VALID_MODULE_RE_)) throw Error("Invalid module identifier");
+  if (!goog.isInGoogModuleLoader_()) throw Error("Module " + a + " has been loaded incorrectly. Note, modules cannot be loaded as normal scripts. They require some kind of pre-processing step. You're likely trying to load a module via a script tag or as a part of a concatenated bundle without rewriting the module. For more info see: https://github.com/google/closure-library/wiki/goog.module:-an-ES6-module-like-alternative-to-goog.provide.");
+  if (goog.moduleLoaderState_.moduleName) throw Error("goog.module may only be called once per module.");
+  goog.moduleLoaderState_.moduleName = a;
 
+  if (!COMPILED) {
+    if (goog.isProvided_(a)) throw Error('Namespace "' + a + '" already declared.');
+    delete goog.implicitNamespaces_[a];
+  }
+};
 
-module.exports = function SameValue(x, y) {
-  if (x === y) {
-    // 0 === -0, but they are not identical.
-    if (x === 0) {
-      return 1 / x === 1 / y;
-    }
+goog.module.get = function (a) {
+  return goog.module.getInternal_(a);
+};
 
-    return true;
+goog.module.getInternal_ = function (a) {
+  if (!COMPILED) {
+    if (a in goog.loadedModules_) return goog.loadedModules_[a].exports;
+    if (!goog.implicitNamespaces_[a]) return a = goog.getObjectByName(a), null != a ? a : null;
   }
 
-  return $isNaN(x) && $isNaN(y);
+  return null;
 };
 
-/***/ }),
-
-/***/ "./node_modules/es-abstract/2020/ToBoolean.js":
-/*!****************************************************!*\
-  !*** ./node_modules/es-abstract/2020/ToBoolean.js ***!
-  \****************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+goog.ModuleType = {
+  ES6: "es6",
+  GOOG: "goog"
+};
+goog.moduleLoaderState_ = null;
 
-"use strict";
- // http://262.ecma-international.org/5.1/#sec-9.2
+goog.isInModuleLoader_ = function () {
+  return goog.isInGoogModuleLoader_() || goog.isInEs6ModuleLoader_();
+};
 
-module.exports = function ToBoolean(value) {
-  return !!value;
+goog.isInGoogModuleLoader_ = function () {
+  return !!goog.moduleLoaderState_ && goog.moduleLoaderState_.type == goog.ModuleType.GOOG;
 };
 
-/***/ }),
+goog.isInEs6ModuleLoader_ = function () {
+  if (goog.moduleLoaderState_ && goog.moduleLoaderState_.type == goog.ModuleType.ES6) return !0;
+  var a = goog.global.$jscomp;
+  return a ? "function" != typeof a.getCurrentModulePath ? !1 : !!a.getCurrentModulePath() : !1;
+};
 
-/***/ "./node_modules/es-abstract/2020/ToInteger.js":
-/*!****************************************************!*\
-  !*** ./node_modules/es-abstract/2020/ToInteger.js ***!
-  \****************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var ES5ToInteger = __webpack_require__(/*! ../5/ToInteger */ "./node_modules/es-abstract/5/ToInteger.js");
-
-var ToNumber = __webpack_require__(/*! ./ToNumber */ "./node_modules/es-abstract/2020/ToNumber.js"); // https://262.ecma-international.org/11.0/#sec-tointeger
-
-
-module.exports = function ToInteger(value) {
-  var number = ToNumber(value);
-
-  if (number !== 0) {
-    number = ES5ToInteger(number);
-  }
-
-  return number === 0 ? 0 : number;
+goog.module.declareLegacyNamespace = function () {
+  if (!COMPILED && !goog.isInGoogModuleLoader_()) throw Error("goog.module.declareLegacyNamespace must be called from within a goog.module");
+  if (!COMPILED && !goog.moduleLoaderState_.moduleName) throw Error("goog.module must be called prior to goog.module.declareLegacyNamespace.");
+  goog.moduleLoaderState_.declareLegacyNamespace = !0;
 };
 
-/***/ }),
-
-/***/ "./node_modules/es-abstract/2020/ToLength.js":
-/*!***************************************************!*\
-  !*** ./node_modules/es-abstract/2020/ToLength.js ***!
-  \***************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var MAX_SAFE_INTEGER = __webpack_require__(/*! ../helpers/maxSafeInteger */ "./node_modules/es-abstract/helpers/maxSafeInteger.js");
-
-var ToInteger = __webpack_require__(/*! ./ToInteger */ "./node_modules/es-abstract/2020/ToInteger.js");
-
-module.exports = function ToLength(argument) {
-  var len = ToInteger(argument);
-
-  if (len <= 0) {
-    return 0;
-  } // includes converting -0 to +0
-
-
-  if (len > MAX_SAFE_INTEGER) {
-    return MAX_SAFE_INTEGER;
+goog.declareModuleId = function (a) {
+  if (!COMPILED) {
+    if (!goog.isInEs6ModuleLoader_()) throw Error("goog.declareModuleId may only be called from within an ES6 module");
+    if (goog.moduleLoaderState_ && goog.moduleLoaderState_.moduleName) throw Error("goog.declareModuleId may only be called once per module.");
+    if (a in goog.loadedModules_) throw Error('Module with namespace "' + a + '" already exists.');
   }
 
-  return len;
+  if (goog.moduleLoaderState_) goog.moduleLoaderState_.moduleName = a;else {
+    var b = goog.global.$jscomp;
+    if (!b || "function" != typeof b.getCurrentModulePath) throw Error('Module with namespace "' + a + '" has been loaded incorrectly.');
+    b = b.require(b.getCurrentModulePath());
+    goog.loadedModules_[a] = {
+      exports: b,
+      type: goog.ModuleType.ES6,
+      moduleId: a
+    };
+  }
 };
 
-/***/ }),
-
-/***/ "./node_modules/es-abstract/2020/ToNumber.js":
-/*!***************************************************!*\
-  !*** ./node_modules/es-abstract/2020/ToNumber.js ***!
-  \***************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+goog.setTestOnly = function (a) {
+  if (goog.DISALLOW_TEST_ONLY_CODE) throw a = a || "", Error("Importing test-only code into non-debug environment" + (a ? ": " + a : "."));
+};
 
-var $TypeError = GetIntrinsic('%TypeError%');
-var $Number = GetIntrinsic('%Number%');
-var $RegExp = GetIntrinsic('%RegExp%');
-var $parseInteger = GetIntrinsic('%parseInt%');
+goog.forwardDeclare = function (a) {};
 
-var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
+COMPILED || (goog.isProvided_ = function (a) {
+  return a in goog.loadedModules_ || !goog.implicitNamespaces_[a] && goog.isDefAndNotNull(goog.getObjectByName(a));
+}, goog.implicitNamespaces_ = {
+  "goog.module": !0
+});
 
-var regexTester = __webpack_require__(/*! ../helpers/regexTester */ "./node_modules/es-abstract/helpers/regexTester.js");
+goog.getObjectByName = function (a, b) {
+  a = a.split(".");
+  b = b || goog.global;
 
-var isPrimitive = __webpack_require__(/*! ../helpers/isPrimitive */ "./node_modules/es-abstract/helpers/isPrimitive.js");
+  for (var c = 0; c < a.length; c++) if (b = b[a[c]], !goog.isDefAndNotNull(b)) return null;
 
-var $strSlice = callBound('String.prototype.slice');
-var isBinary = regexTester(/^0b[01]+$/i);
-var isOctal = regexTester(/^0o[0-7]+$/i);
-var isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);
-var nonWS = ['\u0085', '\u200b', '\ufffe'].join('');
-var nonWSregex = new $RegExp('[' + nonWS + ']', 'g');
-var hasNonWS = regexTester(nonWSregex); // whitespace from: https://es5.github.io/#x15.5.4.20
-// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324
+  return b;
+};
 
-var ws = ['\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003', '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028', '\u2029\uFEFF'].join('');
-var trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');
-var $replace = callBound('String.prototype.replace');
+goog.globalize = function (a, b) {
+  b = b || goog.global;
 
-var $trim = function (value) {
-  return $replace(value, trimRegex, '');
+  for (var c in a) b[c] = a[c];
 };
 
-var ToPrimitive = __webpack_require__(/*! ./ToPrimitive */ "./node_modules/es-abstract/2020/ToPrimitive.js"); // https://ecma-international.org/ecma-262/6.0/#sec-tonumber
+goog.addDependency = function (a, b, c, d) {
+  !COMPILED && goog.DEPENDENCIES_ENABLED && goog.debugLoader_.addDependency(a, b, c, d);
+};
 
+goog.ENABLE_DEBUG_LOADER = !0;
 
-module.exports = function ToNumber(argument) {
-  var value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);
+goog.logToConsole_ = function (a) {
+  goog.global.console && goog.global.console.error(a);
+};
 
-  if (typeof value === 'symbol') {
-    throw new $TypeError('Cannot convert a Symbol value to a number');
-  }
+goog.require = function (a) {
+  if (!COMPILED) {
+    goog.ENABLE_DEBUG_LOADER && goog.debugLoader_.requested(a);
 
-  if (typeof value === 'string') {
-    if (isBinary(value)) {
-      return ToNumber($parseInteger($strSlice(value, 2), 2));
-    } else if (isOctal(value)) {
-      return ToNumber($parseInteger($strSlice(value, 2), 8));
-    } else if (hasNonWS(value) || isInvalidHexLiteral(value)) {
-      return NaN;
-    } else {
-      var trimmed = $trim(value);
+    if (goog.isProvided_(a)) {
+      if (goog.isInModuleLoader_()) return goog.module.getInternal_(a);
+    } else if (goog.ENABLE_DEBUG_LOADER) {
+      var b = goog.moduleLoaderState_;
+      goog.moduleLoaderState_ = null;
 
-      if (trimmed !== value) {
-        return ToNumber(trimmed);
+      try {
+        goog.debugLoader_.load_(a);
+      } finally {
+        goog.moduleLoaderState_ = b;
       }
     }
+
+    return null;
   }
+};
 
-  return $Number(value);
+goog.requireType = function (a) {
+  return {};
 };
 
-/***/ }),
+goog.basePath = "";
 
-/***/ "./node_modules/es-abstract/2020/ToObject.js":
-/*!***************************************************!*\
-  !*** ./node_modules/es-abstract/2020/ToObject.js ***!
-  \***************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+goog.nullFunction = function () {};
 
-"use strict";
+goog.abstractMethod = function () {
+  throw Error("unimplemented abstract method");
+};
 
+goog.addSingletonGetter = function (a) {
+  a.instance_ = void 0;
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+  a.getInstance = function () {
+    if (a.instance_) return a.instance_;
+    goog.DEBUG && (goog.instantiatedSingletons_[goog.instantiatedSingletons_.length] = a);
+    return a.instance_ = new a();
+  };
+};
 
-var $Object = GetIntrinsic('%Object%');
+goog.instantiatedSingletons_ = [];
+goog.LOAD_MODULE_USING_EVAL = !0;
+goog.SEAL_MODULE_EXPORTS = goog.DEBUG;
+goog.loadedModules_ = {};
+goog.DEPENDENCIES_ENABLED = !COMPILED && goog.ENABLE_DEBUG_LOADER;
+goog.TRANSPILE = "detect";
+goog.ASSUME_ES_MODULES_TRANSPILED = !1;
+goog.TRANSPILE_TO_LANGUAGE = "";
+goog.TRANSPILER = "transpile.js";
+goog.hasBadLetScoping = null;
 
-var RequireObjectCoercible = __webpack_require__(/*! ./RequireObjectCoercible */ "./node_modules/es-abstract/2020/RequireObjectCoercible.js"); // https://ecma-international.org/ecma-262/6.0/#sec-toobject
+goog.useSafari10Workaround = function () {
+  if (null == goog.hasBadLetScoping) {
+    try {
+      var a = !eval('"use strict";let x = 1; function f() { return typeof x; };f() == "number";');
+    } catch (b) {
+      a = !1;
+    }
 
+    goog.hasBadLetScoping = a;
+  }
 
-module.exports = function ToObject(value) {
-  RequireObjectCoercible(value);
-  return $Object(value);
+  return goog.hasBadLetScoping;
 };
 
-/***/ }),
-
-/***/ "./node_modules/es-abstract/2020/ToPrimitive.js":
-/*!******************************************************!*\
-  !*** ./node_modules/es-abstract/2020/ToPrimitive.js ***!
-  \******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+goog.workaroundSafari10EvalBug = function (a) {
+  return "(function(){" + a + "\n;})();\n";
+};
 
-"use strict";
+goog.loadModule = function (a) {
+  var b = goog.moduleLoaderState_;
 
+  try {
+    goog.moduleLoaderState_ = {
+      moduleName: "",
+      declareLegacyNamespace: !1,
+      type: goog.ModuleType.GOOG
+    };
+    if (goog.isFunction(a)) var c = a.call(void 0, {});else if (goog.isString(a)) goog.useSafari10Workaround() && (a = goog.workaroundSafari10EvalBug(a)), c = goog.loadModuleFromSource_.call(void 0, a);else throw Error("Invalid module definition");
+    var d = goog.moduleLoaderState_.moduleName;
+    if (goog.isString(d) && d) goog.moduleLoaderState_.declareLegacyNamespace ? goog.constructNamespace_(d, c) : goog.SEAL_MODULE_EXPORTS && Object.seal && "object" == typeof c && null != c && Object.seal(c), goog.loadedModules_[d] = {
+      exports: c,
+      type: goog.ModuleType.GOOG,
+      moduleId: goog.moduleLoaderState_.moduleName
+    };else throw Error('Invalid module name "' + d + '"');
+  } finally {
+    goog.moduleLoaderState_ = b;
+  }
+};
 
-var toPrimitive = __webpack_require__(/*! es-to-primitive/es2015 */ "./node_modules/es-to-primitive/es2015.js"); // https://ecma-international.org/ecma-262/6.0/#sec-toprimitive
+goog.loadModuleFromSource_ = function (a) {
+  eval(a);
+  return {};
+};
 
+goog.normalizePath_ = function (a) {
+  a = a.split("/");
 
-module.exports = function ToPrimitive(input) {
-  if (arguments.length > 1) {
-    return toPrimitive(input, arguments[1]);
-  }
+  for (var b = 0; b < a.length;) "." == a[b] ? a.splice(b, 1) : b && ".." == a[b] && a[b - 1] && ".." != a[b - 1] ? a.splice(--b, 2) : b++;
 
-  return toPrimitive(input);
+  return a.join("/");
 };
 
-/***/ }),
-
-/***/ "./node_modules/es-abstract/2020/ToPropertyDescriptor.js":
-/*!***************************************************************!*\
-  !*** ./node_modules/es-abstract/2020/ToPropertyDescriptor.js ***!
-  \***************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+goog.loadFileSync_ = function (a) {
+  if (goog.global.CLOSURE_LOAD_FILE_SYNC) return goog.global.CLOSURE_LOAD_FILE_SYNC(a);
 
-"use strict";
+  try {
+    var b = new goog.global.XMLHttpRequest();
+    b.open("get", a, !1);
+    b.send();
+    return 0 == b.status || 200 == b.status ? b.responseText : null;
+  } catch (c) {
+    return null;
+  }
+};
 
+goog.transpile_ = function (a, b, c) {
+  var d = goog.global.$jscomp;
+  d || (goog.global.$jscomp = d = {});
+  var e = d.transpile;
 
-var has = __webpack_require__(/*! has */ "./node_modules/has/src/index.js");
+  if (!e) {
+    var f = goog.basePath + goog.TRANSPILER,
+        g = goog.loadFileSync_(f);
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+    if (g) {
+      (function () {
+        (0, eval)(g + "\n//# sourceURL=" + f);
+      }).call(goog.global);
+      if (goog.global.$gwtExport && goog.global.$gwtExport.$jscomp && !goog.global.$gwtExport.$jscomp.transpile) throw Error('The transpiler did not properly export the "transpile" method. $gwtExport: ' + JSON.stringify(goog.global.$gwtExport));
+      goog.global.$jscomp.transpile = goog.global.$gwtExport.$jscomp.transpile;
+      d = goog.global.$jscomp;
+      e = d.transpile;
+    }
+  }
 
-var $TypeError = GetIntrinsic('%TypeError%');
+  e || (e = d.transpile = function (a, b) {
+    goog.logToConsole_(b + " requires transpilation but no transpiler was found.");
+    return a;
+  });
+  return e(a, b, c);
+};
 
-var Type = __webpack_require__(/*! ./Type */ "./node_modules/es-abstract/2020/Type.js");
+goog.typeOf = function (a) {
+  var b = typeof a;
+  if ("object" == b) {
+    if (a) {
+      if (a instanceof Array) return "array";
+      if (a instanceof Object) return b;
+      var c = Object.prototype.toString.call(a);
+      if ("[object Window]" == c) return "object";
+      if ("[object Array]" == c || "number" == typeof a.length && "undefined" != typeof a.splice && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("splice")) return "array";
+      if ("[object Function]" == c || "undefined" != typeof a.call && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("call")) return "function";
+    } else return "null";
+  } else if ("function" == b && "undefined" == typeof a.call) return "object";
+  return b;
+};
 
-var ToBoolean = __webpack_require__(/*! ./ToBoolean */ "./node_modules/es-abstract/2020/ToBoolean.js");
+goog.isNull = function (a) {
+  return null === a;
+};
 
-var IsCallable = __webpack_require__(/*! ./IsCallable */ "./node_modules/es-abstract/2020/IsCallable.js"); // https://262.ecma-international.org/5.1/#sec-8.10.5
+goog.isDefAndNotNull = function (a) {
+  return null != a;
+};
 
+goog.isArray = function (a) {
+  return "array" == goog.typeOf(a);
+};
 
-module.exports = function ToPropertyDescriptor(Obj) {
-  if (Type(Obj) !== 'Object') {
-    throw new $TypeError('ToPropertyDescriptor requires an object');
-  }
+goog.isArrayLike = function (a) {
+  var b = goog.typeOf(a);
+  return "array" == b || "object" == b && "number" == typeof a.length;
+};
 
-  var desc = {};
+goog.isDateLike = function (a) {
+  return goog.isObject(a) && "function" == typeof a.getFullYear;
+};
 
-  if (has(Obj, 'enumerable')) {
-    desc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);
-  }
+goog.isFunction = function (a) {
+  return "function" == goog.typeOf(a);
+};
 
-  if (has(Obj, 'configurable')) {
-    desc['[[Configurable]]'] = ToBoolean(Obj.configurable);
-  }
+goog.isObject = function (a) {
+  var b = typeof a;
+  return "object" == b && null != a || "function" == b;
+};
 
-  if (has(Obj, 'value')) {
-    desc['[[Value]]'] = Obj.value;
-  }
+goog.getUid = function (a) {
+  return a[goog.UID_PROPERTY_] || (a[goog.UID_PROPERTY_] = ++goog.uidCounter_);
+};
 
-  if (has(Obj, 'writable')) {
-    desc['[[Writable]]'] = ToBoolean(Obj.writable);
-  }
+goog.hasUid = function (a) {
+  return !!a[goog.UID_PROPERTY_];
+};
 
-  if (has(Obj, 'get')) {
-    var getter = Obj.get;
+goog.removeUid = function (a) {
+  null !== a && "removeAttribute" in a && a.removeAttribute(goog.UID_PROPERTY_);
 
-    if (typeof getter !== 'undefined' && !IsCallable(getter)) {
-      throw new $TypeError('getter must be a function');
-    }
+  try {
+    delete a[goog.UID_PROPERTY_];
+  } catch (b) {}
+};
 
-    desc['[[Get]]'] = getter;
-  }
+goog.UID_PROPERTY_ = "closure_uid_" + (1E9 * Math.random() >>> 0);
+goog.uidCounter_ = 0;
+goog.getHashCode = goog.getUid;
+goog.removeHashCode = goog.removeUid;
 
-  if (has(Obj, 'set')) {
-    var setter = Obj.set;
+goog.cloneObject = function (a) {
+  var b = goog.typeOf(a);
 
-    if (typeof setter !== 'undefined' && !IsCallable(setter)) {
-      throw new $TypeError('setter must be a function');
-    }
+  if ("object" == b || "array" == b) {
+    if ("function" === typeof a.clone) return a.clone();
+    b = "array" == b ? [] : {};
 
-    desc['[[Set]]'] = setter;
-  }
+    for (var c in a) b[c] = goog.cloneObject(a[c]);
 
-  if ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {
-    throw new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');
+    return b;
   }
 
-  return desc;
+  return a;
 };
 
-/***/ }),
-
-/***/ "./node_modules/es-abstract/2020/ToString.js":
-/*!***************************************************!*\
-  !*** ./node_modules/es-abstract/2020/ToString.js ***!
-  \***************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+goog.bindNative_ = function (a, b, c) {
+  return a.call.apply(a.bind, arguments);
+};
 
-var $String = GetIntrinsic('%String%');
-var $TypeError = GetIntrinsic('%TypeError%'); // https://ecma-international.org/ecma-262/6.0/#sec-tostring
+goog.bindJs_ = function (a, b, c) {
+  if (!a) throw Error();
 
-module.exports = function ToString(argument) {
-  if (typeof argument === 'symbol') {
-    throw new $TypeError('Cannot convert a Symbol value to a string');
+  if (2 < arguments.length) {
+    var d = Array.prototype.slice.call(arguments, 2);
+    return function () {
+      var c = Array.prototype.slice.call(arguments);
+      Array.prototype.unshift.apply(c, d);
+      return a.apply(b, c);
+    };
   }
 
-  return $String(argument);
+  return function () {
+    return a.apply(b, arguments);
+  };
 };
 
-/***/ }),
-
-/***/ "./node_modules/es-abstract/2020/Type.js":
-/*!***********************************************!*\
-  !*** ./node_modules/es-abstract/2020/Type.js ***!
-  \***********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+goog.bind = function (a, b, c) {
+  Function.prototype.bind && -1 != Function.prototype.bind.toString().indexOf("native code") ? goog.bind = goog.bindNative_ : goog.bind = goog.bindJs_;
+  return goog.bind.apply(null, arguments);
+};
 
-"use strict";
+goog.partial = function (a, b) {
+  var c = Array.prototype.slice.call(arguments, 1);
+  return function () {
+    var b = c.slice();
+    b.push.apply(b, arguments);
+    return a.apply(this, b);
+  };
+};
 
+goog.mixin = function (a, b) {
+  for (var c in b) a[c] = b[c];
+};
 
-var ES5Type = __webpack_require__(/*! ../5/Type */ "./node_modules/es-abstract/5/Type.js"); // https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values
+goog.now = goog.TRUSTED_SITE && Date.now || function () {
+  return +new Date();
+};
 
+goog.globalEval = function (a) {
+  if (goog.global.execScript) goog.global.execScript(a, "JavaScript");else if (goog.global.eval) {
+    if (null == goog.evalWorksForGlobals_) {
+      try {
+        goog.global.eval("var _evalTest_ = 1;");
+      } catch (d) {}
 
-module.exports = function Type(x) {
-  if (typeof x === 'symbol') {
-    return 'Symbol';
-  }
+      if ("undefined" != typeof goog.global._evalTest_) {
+        try {
+          delete goog.global._evalTest_;
+        } catch (d) {}
 
-  if (typeof x === 'bigint') {
-    return 'BigInt';
-  }
+        goog.evalWorksForGlobals_ = !0;
+      } else goog.evalWorksForGlobals_ = !1;
+    }
 
-  return ES5Type(x);
+    if (goog.evalWorksForGlobals_) goog.global.eval(a);else {
+      var b = goog.global.document,
+          c = b.createElement("SCRIPT");
+      c.type = "text/javascript";
+      c.defer = !1;
+      c.appendChild(b.createTextNode(a));
+      b.head.appendChild(c);
+      b.head.removeChild(c);
+    }
+  } else throw Error("goog.globalEval not available");
 };
 
-/***/ }),
+goog.evalWorksForGlobals_ = null;
 
-/***/ "./node_modules/es-abstract/2020/abs.js":
-/*!**********************************************!*\
-  !*** ./node_modules/es-abstract/2020/abs.js ***!
-  \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+goog.getCssName = function (a, b) {
+  if ("." == String(a).charAt(0)) throw Error('className passed in goog.getCssName must not start with ".". You passed: ' + a);
 
-"use strict";
+  var c = function (a) {
+    return goog.cssNameMapping_[a] || a;
+  },
+      d = function (a) {
+    a = a.split("-");
 
+    for (var b = [], d = 0; d < a.length; d++) b.push(c(a[d]));
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+    return b.join("-");
+  };
 
-var $abs = GetIntrinsic('%Math.abs%'); // http://262.ecma-international.org/5.1/#sec-5.2
+  d = goog.cssNameMapping_ ? "BY_WHOLE" == goog.cssNameMappingStyle_ ? c : d : function (a) {
+    return a;
+  };
+  a = b ? a + "-" + d(b) : d(a);
+  return goog.global.CLOSURE_CSS_NAME_MAP_FN ? goog.global.CLOSURE_CSS_NAME_MAP_FN(a) : a;
+};
 
-module.exports = function abs(x) {
-  return $abs(x);
+goog.setCssNameMapping = function (a, b) {
+  goog.cssNameMapping_ = a;
+  goog.cssNameMappingStyle_ = b;
 };
 
-/***/ }),
+!COMPILED && goog.global.CLOSURE_CSS_NAME_MAPPING && (goog.cssNameMapping_ = goog.global.CLOSURE_CSS_NAME_MAPPING);
 
-/***/ "./node_modules/es-abstract/2020/floor.js":
-/*!************************************************!*\
-  !*** ./node_modules/es-abstract/2020/floor.js ***!
-  \************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+goog.getMsg = function (a, b, c) {
+  c && c.html && (a = a.replace(/</g, "&lt;"));
+  b && (a = a.replace(/\{\$([^}]+)}/g, function (a, c) {
+    return null != b && c in b ? b[c] : a;
+  }));
+  return a;
+};
 
-"use strict";
- // var modulo = require('./modulo');
+goog.getMsgWithFallback = function (a, b) {
+  return a;
+};
 
-var $floor = Math.floor; // http://262.ecma-international.org/5.1/#sec-5.2
+goog.exportSymbol = function (a, b, c) {
+  goog.exportPath_(a, b, c);
+};
 
-module.exports = function floor(x) {
-  // return x - modulo(x, 1);
-  return $floor(x);
+goog.exportProperty = function (a, b, c) {
+  a[b] = c;
 };
 
-/***/ }),
+goog.inherits = function (a, b) {
+  function c() {}
 
-/***/ "./node_modules/es-abstract/5/CheckObjectCoercible.js":
-/*!************************************************************!*\
-  !*** ./node_modules/es-abstract/5/CheckObjectCoercible.js ***!
-  \************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+  c.prototype = b.prototype;
+  a.superClass_ = b.prototype;
+  a.prototype = new c();
+  a.prototype.constructor = a;
 
-"use strict";
+  a.base = function (a, c, f) {
+    for (var d = Array(arguments.length - 2), e = 2; e < arguments.length; e++) d[e - 2] = arguments[e];
 
+    return b.prototype[c].apply(a, d);
+  };
+};
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+goog.base = function (a, b, c) {
+  var d = arguments.callee.caller;
+  if (goog.STRICT_MODE_COMPATIBLE || goog.DEBUG && !d) throw Error("arguments.caller not defined.  goog.base() cannot be used with strict mode code. See http://www.ecma-international.org/ecma-262/5.1/#sec-C");
 
-var $TypeError = GetIntrinsic('%TypeError%'); // http://262.ecma-international.org/5.1/#sec-9.10
+  if ("undefined" !== typeof d.superClass_) {
+    for (var e = Array(arguments.length - 1), f = 1; f < arguments.length; f++) e[f - 1] = arguments[f];
 
-module.exports = function CheckObjectCoercible(value, optMessage) {
-  if (value == null) {
-    throw new $TypeError(optMessage || 'Cannot call method on ' + value);
+    return d.superClass_.constructor.apply(a, e);
   }
 
-  return value;
-};
+  if ("string" != typeof b && "symbol" != typeof b) throw Error("method names provided to goog.base must be a string or a symbol");
+  e = Array(arguments.length - 2);
 
-/***/ }),
+  for (f = 2; f < arguments.length; f++) e[f - 2] = arguments[f];
 
-/***/ "./node_modules/es-abstract/5/ToInteger.js":
-/*!*************************************************!*\
-  !*** ./node_modules/es-abstract/5/ToInteger.js ***!
-  \*************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+  f = !1;
 
-"use strict";
+  for (var g = a.constructor.prototype; g; g = Object.getPrototypeOf(g)) if (g[b] === d) f = !0;else if (f) return g[b].apply(a, e);
 
+  if (a[b] === d) return a.constructor.prototype[b].apply(a, e);
+  throw Error("goog.base called from a method of one name to a method of a different name");
+};
 
-var abs = __webpack_require__(/*! ./abs */ "./node_modules/es-abstract/5/abs.js");
+goog.scope = function (a) {
+  if (goog.isInModuleLoader_()) throw Error("goog.scope is not supported within a module.");
+  a.call(goog.global);
+};
 
-var floor = __webpack_require__(/*! ./floor */ "./node_modules/es-abstract/5/floor.js");
+COMPILED || (goog.global.COMPILED = COMPILED);
 
-var ToNumber = __webpack_require__(/*! ./ToNumber */ "./node_modules/es-abstract/5/ToNumber.js");
+goog.defineClass = function (a, b) {
+  var c = b.constructor,
+      d = b.statics;
+  c && c != Object.prototype.constructor || (c = function () {
+    throw Error("cannot instantiate an interface (no constructor defined).");
+  });
+  c = goog.defineClass.createSealingConstructor_(c, a);
+  a && goog.inherits(c, a);
+  delete b.constructor;
+  delete b.statics;
+  goog.defineClass.applyProperties_(c.prototype, b);
+  null != d && (d instanceof Function ? d(c) : goog.defineClass.applyProperties_(c, d));
+  return c;
+};
 
-var $isNaN = __webpack_require__(/*! ../helpers/isNaN */ "./node_modules/es-abstract/helpers/isNaN.js");
+goog.defineClass.SEAL_CLASS_INSTANCES = goog.DEBUG;
 
-var $isFinite = __webpack_require__(/*! ../helpers/isFinite */ "./node_modules/es-abstract/helpers/isFinite.js");
+goog.defineClass.createSealingConstructor_ = function (a, b) {
+  if (!goog.defineClass.SEAL_CLASS_INSTANCES) return a;
 
-var $sign = __webpack_require__(/*! ../helpers/sign */ "./node_modules/es-abstract/helpers/sign.js"); // http://262.ecma-international.org/5.1/#sec-9.4
+  var c = !goog.defineClass.isUnsealable_(b),
+      d = function () {
+    var b = a.apply(this, arguments) || this;
+    b[goog.UID_PROPERTY_] = b[goog.UID_PROPERTY_];
+    this.constructor === d && c && Object.seal instanceof Function && Object.seal(b);
+    return b;
+  };
 
+  return d;
+};
 
-module.exports = function ToInteger(value) {
-  var number = ToNumber(value);
+goog.defineClass.isUnsealable_ = function (a) {
+  return a && a.prototype && a.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_];
+};
 
-  if ($isNaN(number)) {
-    return 0;
-  }
+goog.defineClass.OBJECT_PROTOTYPE_FIELDS_ = "constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");
 
-  if (number === 0 || !$isFinite(number)) {
-    return number;
-  }
+goog.defineClass.applyProperties_ = function (a, b) {
+  for (var c in b) Object.prototype.hasOwnProperty.call(b, c) && (a[c] = b[c]);
 
-  return $sign(number) * floor(abs(number));
+  for (var d = 0; d < goog.defineClass.OBJECT_PROTOTYPE_FIELDS_.length; d++) c = goog.defineClass.OBJECT_PROTOTYPE_FIELDS_[d], Object.prototype.hasOwnProperty.call(b, c) && (a[c] = b[c]);
 };
 
-/***/ }),
+goog.tagUnsealableClass = function (a) {
+  !COMPILED && goog.defineClass.SEAL_CLASS_INSTANCES && (a.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_] = !0);
+};
 
-/***/ "./node_modules/es-abstract/5/ToNumber.js":
-/*!************************************************!*\
-  !*** ./node_modules/es-abstract/5/ToNumber.js ***!
-  \************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var ToPrimitive = __webpack_require__(/*! ./ToPrimitive */ "./node_modules/es-abstract/5/ToPrimitive.js"); // http://262.ecma-international.org/5.1/#sec-9.3
+goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_ = "goog_defineClass_legacy_unsealable";
+!COMPILED && goog.DEPENDENCIES_ENABLED && (goog.inHtmlDocument_ = function () {
+  var a = goog.global.document;
+  return null != a && "write" in a;
+}, goog.isDocumentLoading_ = function () {
+  var a = goog.global.document;
+  return a.attachEvent ? "complete" != a.readyState : "loading" == a.readyState;
+}, goog.findBasePath_ = function () {
+  if (goog.isDef(goog.global.CLOSURE_BASE_PATH) && goog.isString(goog.global.CLOSURE_BASE_PATH)) goog.basePath = goog.global.CLOSURE_BASE_PATH;else if (goog.inHtmlDocument_()) {
+    var a = goog.global.document,
+        b = a.currentScript;
+    a = b ? [b] : a.getElementsByTagName("SCRIPT");
 
+    for (b = a.length - 1; 0 <= b; --b) {
+      var c = a[b].src,
+          d = c.lastIndexOf("?");
+      d = -1 == d ? c.length : d;
 
-module.exports = function ToNumber(value) {
-  var prim = ToPrimitive(value, Number);
+      if ("base.js" == c.substr(d - 7, 7)) {
+        goog.basePath = c.substr(0, d - 7);
+        break;
+      }
+    }
+  }
+}, goog.findBasePath_(), goog.Transpiler = function () {
+  this.requiresTranspilation_ = null;
+  this.transpilationTarget_ = goog.TRANSPILE_TO_LANGUAGE;
+}, goog.Transpiler.prototype.createRequiresTranspilation_ = function () {
+  function a(a, b) {
+    e ? d[a] = !0 : b() ? (c = a, d[a] = !1) : e = d[a] = !0;
+  }
 
-  if (typeof prim !== 'string') {
-    return +prim; // eslint-disable-line no-implicit-coercion
-  } // eslint-disable-next-line no-control-regex
+  function b(a) {
+    try {
+      return !!eval(a);
+    } catch (h) {
+      return !1;
+    }
+  }
 
+  var c = "es3",
+      d = {
+    es3: !1
+  },
+      e = !1,
+      f = goog.global.navigator && goog.global.navigator.userAgent ? goog.global.navigator.userAgent : "";
+  a("es5", function () {
+    return b("[1,].length==1");
+  });
+  a("es6", function () {
+    return f.match(/Edge\/(\d+)(\.\d)*/i) ? !1 : b('(()=>{"use strict";class X{constructor(){if(new.target!=String)throw 1;this.x=42}}let q=Reflect.construct(X,[],String);if(q.x!=42||!(q instanceof String))throw 1;for(const a of[2,3]){if(a==2)continue;function f(z={a}){let a=0;return z.a}{function f(){return 0;}}return f()==3}})()');
+  });
+  a("es7", function () {
+    return b("2 ** 2 == 4");
+  });
+  a("es8", function () {
+    return b("async () => 1, true");
+  });
+  a("es9", function () {
+    return b("({...rest} = {}), true");
+  });
+  a("es_next", function () {
+    return !1;
+  });
+  return {
+    target: c,
+    map: d
+  };
+}, goog.Transpiler.prototype.needsTranspile = function (a, b) {
+  if ("always" == goog.TRANSPILE) return !0;
+  if ("never" == goog.TRANSPILE) return !1;
 
-  var trimmed = prim.replace(/^[ \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u0085]+|[ \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u0085]+$/g, '');
+  if (!this.requiresTranspilation_) {
+    var c = this.createRequiresTranspilation_();
+    this.requiresTranspilation_ = c.map;
+    this.transpilationTarget_ = this.transpilationTarget_ || c.target;
+  }
 
-  if (/^0[ob]|^[+-]0x/.test(trimmed)) {
-    return NaN;
+  if (a in this.requiresTranspilation_) return this.requiresTranspilation_[a] ? !0 : !goog.inHtmlDocument_() || "es6" != b || "noModule" in goog.global.document.createElement("script") ? !1 : !0;
+  throw Error("Unknown language mode: " + a);
+}, goog.Transpiler.prototype.transpile = function (a, b) {
+  return goog.transpile_(a, b, this.transpilationTarget_);
+}, goog.transpiler_ = new goog.Transpiler(), goog.protectScriptTag_ = function (a) {
+  return a.replace(/<\/(SCRIPT)/ig, "\\x3c/$1");
+}, goog.DebugLoader_ = function () {
+  this.dependencies_ = {};
+  this.idToPath_ = {};
+  this.written_ = {};
+  this.loadingDeps_ = [];
+  this.depsToLoad_ = [];
+  this.paused_ = !1;
+  this.factory_ = new goog.DependencyFactory(goog.transpiler_);
+  this.deferredCallbacks_ = {};
+  this.deferredQueue_ = [];
+}, goog.DebugLoader_.prototype.bootstrap = function (a, b) {
+  function c() {
+    d && (goog.global.setTimeout(d, 0), d = null);
   }
 
-  return +trimmed; // eslint-disable-line no-implicit-coercion
-};
+  var d = b;
 
-/***/ }),
+  if (a.length) {
+    b = [];
 
-/***/ "./node_modules/es-abstract/5/ToPrimitive.js":
-/*!***************************************************!*\
-  !*** ./node_modules/es-abstract/5/ToPrimitive.js ***!
-  \***************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+    for (var e = 0; e < a.length; e++) {
+      var f = this.getPathFromDeps_(a[e]);
+      if (!f) throw Error("Unregonized namespace: " + a[e]);
+      b.push(this.dependencies_[f]);
+    }
 
-"use strict";
- // http://262.ecma-international.org/5.1/#sec-9.1
+    f = goog.require;
+    var g = 0;
 
-module.exports = __webpack_require__(/*! es-to-primitive/es5 */ "./node_modules/es-to-primitive/es5.js");
+    for (e = 0; e < a.length; e++) f(a[e]), b[e].onLoad(function () {
+      ++g == a.length && c();
+    });
+  } else c();
+}, goog.DebugLoader_.prototype.loadClosureDeps = function () {
+  this.depsToLoad_.push(this.factory_.createDependency(goog.normalizePath_(goog.basePath + "deps.js"), "deps.js", [], [], {}, !1));
+  this.loadDeps_();
+}, goog.DebugLoader_.prototype.requested = function (a, b) {
+  (a = this.getPathFromDeps_(a)) && (b || this.areDepsLoaded_(this.dependencies_[a].requires)) && (b = this.deferredCallbacks_[a]) && (delete this.deferredCallbacks_[a], b());
+}, goog.DebugLoader_.prototype.setDependencyFactory = function (a) {
+  this.factory_ = a;
+}, goog.DebugLoader_.prototype.load_ = function (a) {
+  if (this.getPathFromDeps_(a)) {
+    var b = this,
+        c = [],
+        d = function (a) {
+      var e = b.getPathFromDeps_(a);
+      if (!e) throw Error("Bad dependency path or symbol: " + a);
 
-/***/ }),
+      if (!b.written_[e]) {
+        b.written_[e] = !0;
+        a = b.dependencies_[e];
 
-/***/ "./node_modules/es-abstract/5/Type.js":
-/*!********************************************!*\
-  !*** ./node_modules/es-abstract/5/Type.js ***!
-  \********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+        for (e = 0; e < a.requires.length; e++) goog.isProvided_(a.requires[e]) || d(a.requires[e]);
 
-"use strict";
- // https://262.ecma-international.org/5.1/#sec-8
+        c.push(a);
+      }
+    };
 
-module.exports = function Type(x) {
-  if (x === null) {
-    return 'Null';
-  }
+    d(a);
+    a = !!this.depsToLoad_.length;
+    this.depsToLoad_ = this.depsToLoad_.concat(c);
+    this.paused_ || a || this.loadDeps_();
+  } else throw a = "goog.require could not find: " + a, goog.logToConsole_(a), Error(a);
+}, goog.DebugLoader_.prototype.loadDeps_ = function () {
+  for (var a = this, b = this.paused_; this.depsToLoad_.length && !b;) (function () {
+    var c = !1,
+        d = a.depsToLoad_.shift(),
+        e = !1;
+    a.loading_(d);
+    var f = {
+      pause: function () {
+        if (c) throw Error("Cannot call pause after the call to load.");
+        b = !0;
+      },
+      resume: function () {
+        c ? a.resume_() : b = !1;
+      },
+      loaded: function () {
+        if (e) throw Error("Double call to loaded.");
+        e = !0;
+        a.loaded_(d);
+      },
+      pending: function () {
+        for (var b = [], c = 0; c < a.loadingDeps_.length; c++) b.push(a.loadingDeps_[c]);
 
-  if (typeof x === 'undefined') {
-    return 'Undefined';
-  }
+        return b;
+      },
+      setModuleState: function (a) {
+        goog.moduleLoaderState_ = {
+          type: a,
+          moduleName: "",
+          declareLegacyNamespace: !1
+        };
+      },
+      registerEs6ModuleExports: function (a, b, c) {
+        c && (goog.loadedModules_[c] = {
+          exports: b,
+          type: goog.ModuleType.ES6,
+          moduleId: c || ""
+        });
+      },
+      registerGoogModuleExports: function (a, b) {
+        goog.loadedModules_[a] = {
+          exports: b,
+          type: goog.ModuleType.GOOG,
+          moduleId: a
+        };
+      },
+      clearModuleState: function () {
+        goog.moduleLoaderState_ = null;
+      },
+      defer: function (b) {
+        if (c) throw Error("Cannot register with defer after the call to load.");
+        a.defer_(d, b);
+      },
+      areDepsLoaded: function () {
+        return a.areDepsLoaded_(d.requires);
+      }
+    };
 
-  if (typeof x === 'function' || typeof x === 'object') {
-    return 'Object';
-  }
+    try {
+      d.load(f);
+    } finally {
+      c = !0;
+    }
+  })();
 
-  if (typeof x === 'number') {
-    return 'Number';
+  b && this.pause_();
+}, goog.DebugLoader_.prototype.pause_ = function () {
+  this.paused_ = !0;
+}, goog.DebugLoader_.prototype.resume_ = function () {
+  this.paused_ && (this.paused_ = !1, this.loadDeps_());
+}, goog.DebugLoader_.prototype.loading_ = function (a) {
+  this.loadingDeps_.push(a);
+}, goog.DebugLoader_.prototype.loaded_ = function (a) {
+  for (var b = 0; b < this.loadingDeps_.length; b++) if (this.loadingDeps_[b] == a) {
+    this.loadingDeps_.splice(b, 1);
+    break;
   }
 
-  if (typeof x === 'boolean') {
-    return 'Boolean';
+  for (b = 0; b < this.deferredQueue_.length; b++) if (this.deferredQueue_[b] == a.path) {
+    this.deferredQueue_.splice(b, 1);
+    break;
   }
 
-  if (typeof x === 'string') {
-    return 'String';
+  if (this.loadingDeps_.length == this.deferredQueue_.length && !this.depsToLoad_.length) for (; this.deferredQueue_.length;) this.requested(this.deferredQueue_.shift(), !0);
+  a.loaded();
+}, goog.DebugLoader_.prototype.areDepsLoaded_ = function (a) {
+  for (var b = 0; b < a.length; b++) {
+    var c = this.getPathFromDeps_(a[b]);
+    if (!c || !(c in this.deferredCallbacks_ || goog.isProvided_(a[b]))) return !1;
   }
-};
 
-/***/ }),
+  return !0;
+}, goog.DebugLoader_.prototype.getPathFromDeps_ = function (a) {
+  return a in this.idToPath_ ? this.idToPath_[a] : a in this.dependencies_ ? a : null;
+}, goog.DebugLoader_.prototype.defer_ = function (a, b) {
+  this.deferredCallbacks_[a.path] = b;
+  this.deferredQueue_.push(a.path);
+}, goog.LoadController = function () {}, goog.LoadController.prototype.pause = function () {}, goog.LoadController.prototype.resume = function () {}, goog.LoadController.prototype.loaded = function () {}, goog.LoadController.prototype.pending = function () {}, goog.LoadController.prototype.registerEs6ModuleExports = function (a, b, c) {}, goog.LoadController.prototype.setModuleState = function (a) {}, goog.LoadController.prototype.clearModuleState = function () {}, goog.LoadController.prototype.defer = function (a) {}, goog.LoadController.prototype.areDepsLoaded = function () {}, goog.Dependency = function (a, b, c, d, e) {
+  this.path = a;
+  this.relativePath = b;
+  this.provides = c;
+  this.requires = d;
+  this.loadFlags = e;
+  this.loaded_ = !1;
+  this.loadCallbacks_ = [];
+}, goog.Dependency.prototype.getPathName = function () {
+  var a = this.path,
+      b = a.indexOf("://");
+  0 <= b && (a = a.substring(b + 3), b = a.indexOf("/"), 0 <= b && (a = a.substring(b + 1)));
+  return a;
+}, goog.Dependency.prototype.onLoad = function (a) {
+  this.loaded_ ? a() : this.loadCallbacks_.push(a);
+}, goog.Dependency.prototype.loaded = function () {
+  this.loaded_ = !0;
+  var a = this.loadCallbacks_;
+  this.loadCallbacks_ = [];
 
-/***/ "./node_modules/es-abstract/5/abs.js":
-/*!*******************************************!*\
-  !*** ./node_modules/es-abstract/5/abs.js ***!
-  \*******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+  for (var b = 0; b < a.length; b++) a[b]();
+}, goog.Dependency.defer_ = !1, goog.Dependency.callbackMap_ = {}, goog.Dependency.registerCallback_ = function (a) {
+  var b = Math.random().toString(32);
+  goog.Dependency.callbackMap_[b] = a;
+  return b;
+}, goog.Dependency.unregisterCallback_ = function (a) {
+  delete goog.Dependency.callbackMap_[a];
+}, goog.Dependency.callback_ = function (a, b) {
+  if (a in goog.Dependency.callbackMap_) {
+    for (var c = goog.Dependency.callbackMap_[a], d = [], e = 1; e < arguments.length; e++) d.push(arguments[e]);
 
-"use strict";
+    c.apply(void 0, d);
+  } else throw Error("Callback key " + a + " does not exist (was base.js loaded more than once?).");
+}, goog.Dependency.prototype.load = function (a) {
+  if (goog.global.CLOSURE_IMPORT_SCRIPT) goog.global.CLOSURE_IMPORT_SCRIPT(this.path) ? a.loaded() : a.pause();else if (goog.inHtmlDocument_()) {
+    var b = goog.global.document;
 
+    if ("complete" == b.readyState && !goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING) {
+      if (/\bdeps.js$/.test(this.path)) {
+        a.loaded();
+        return;
+      }
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+      throw Error('Cannot write "' + this.path + '" after document load');
+    }
 
-var $abs = GetIntrinsic('%Math.abs%'); // http://262.ecma-international.org/5.1/#sec-5.2
+    if (!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING && goog.isDocumentLoading_()) {
+      var c = goog.Dependency.registerCallback_(function (b) {
+        goog.DebugLoader_.IS_OLD_IE_ && "complete" != b.readyState || (goog.Dependency.unregisterCallback_(c), a.loaded());
+      }),
+          d = !goog.DebugLoader_.IS_OLD_IE_ && goog.getScriptNonce() ? ' nonce="' + goog.getScriptNonce() + '"' : "";
+      d = '<script src="' + this.path + '" ' + (goog.DebugLoader_.IS_OLD_IE_ ? "onreadystatechange" : "onload") + "=\"goog.Dependency.callback_('" + c + '\', this)" type="text/javascript" ' + (goog.Dependency.defer_ ? "defer" : "") + d + ">\x3c/script>";
+      b.write(goog.TRUSTED_TYPES_POLICY_ ? goog.TRUSTED_TYPES_POLICY_.createHTML(d) : d);
+    } else {
+      var e = b.createElement("script");
+      e.defer = goog.Dependency.defer_;
+      e.async = !1;
+      e.type = "text/javascript";
+      (d = goog.getScriptNonce()) && e.setAttribute("nonce", d);
+      goog.DebugLoader_.IS_OLD_IE_ ? (a.pause(), e.onreadystatechange = function () {
+        if ("loaded" == e.readyState || "complete" == e.readyState) a.loaded(), a.resume();
+      }) : e.onload = function () {
+        e.onload = null;
+        a.loaded();
+      };
+      e.src = goog.TRUSTED_TYPES_POLICY_ ? goog.TRUSTED_TYPES_POLICY_.createScriptURL(this.path) : this.path;
+      b.head.appendChild(e);
+    }
+  } else goog.logToConsole_("Cannot use default debug loader outside of HTML documents."), "deps.js" == this.relativePath ? (goog.logToConsole_("Consider setting CLOSURE_IMPORT_SCRIPT before loading base.js, or setting CLOSURE_NO_DEPS to true."), a.loaded()) : a.pause();
+}, goog.Es6ModuleDependency = function (a, b, c, d, e) {
+  goog.Dependency.call(this, a, b, c, d, e);
+}, goog.inherits(goog.Es6ModuleDependency, goog.Dependency), goog.Es6ModuleDependency.prototype.load = function (a) {
+  function b(a, b) {
+    a = b ? '<script type="module" crossorigin>' + b + "\x3c/script>" : '<script type="module" crossorigin src="' + a + '">\x3c/script>';
+    d.write(goog.TRUSTED_TYPES_POLICY_ ? goog.TRUSTED_TYPES_POLICY_.createHTML(a) : a);
+  }
 
-module.exports = function abs(x) {
-  return $abs(x);
-};
+  function c(a, b) {
+    var c = d.createElement("script");
+    c.defer = !0;
+    c.async = !1;
+    c.type = "module";
+    c.setAttribute("crossorigin", !0);
+    var e = goog.getScriptNonce();
+    e && c.setAttribute("nonce", e);
+    b ? c.textContent = goog.TRUSTED_TYPES_POLICY_ ? goog.TRUSTED_TYPES_POLICY_.createScript(b) : b : c.src = goog.TRUSTED_TYPES_POLICY_ ? goog.TRUSTED_TYPES_POLICY_.createScriptURL(a) : a;
+    d.head.appendChild(c);
+  }
 
-/***/ }),
+  if (goog.global.CLOSURE_IMPORT_SCRIPT) goog.global.CLOSURE_IMPORT_SCRIPT(this.path) ? a.loaded() : a.pause();else if (goog.inHtmlDocument_()) {
+    var d = goog.global.document,
+        e = this;
 
-/***/ "./node_modules/es-abstract/5/floor.js":
-/*!*********************************************!*\
-  !*** ./node_modules/es-abstract/5/floor.js ***!
-  \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+    if (goog.isDocumentLoading_()) {
+      var f = b;
+      goog.Dependency.defer_ = !0;
+    } else f = c;
 
-"use strict";
- // var modulo = require('./modulo');
+    var g = goog.Dependency.registerCallback_(function () {
+      goog.Dependency.unregisterCallback_(g);
+      a.setModuleState(goog.ModuleType.ES6);
+    });
+    f(void 0, 'goog.Dependency.callback_("' + g + '")');
+    f(this.path, void 0);
+    var h = goog.Dependency.registerCallback_(function (b) {
+      goog.Dependency.unregisterCallback_(h);
+      a.registerEs6ModuleExports(e.path, b, goog.moduleLoaderState_.moduleName);
+    });
+    f(void 0, 'import * as m from "' + this.path + '"; goog.Dependency.callback_("' + h + '", m)');
+    var k = goog.Dependency.registerCallback_(function () {
+      goog.Dependency.unregisterCallback_(k);
+      a.clearModuleState();
+      a.loaded();
+    });
+    f(void 0, 'goog.Dependency.callback_("' + k + '")');
+  } else goog.logToConsole_("Cannot use default debug loader outside of HTML documents."), a.pause();
+}, goog.TransformedDependency = function (a, b, c, d, e) {
+  goog.Dependency.call(this, a, b, c, d, e);
+  this.contents_ = null;
+  this.lazyFetch_ = !goog.inHtmlDocument_() || !("noModule" in goog.global.document.createElement("script"));
+}, goog.inherits(goog.TransformedDependency, goog.Dependency), goog.TransformedDependency.prototype.load = function (a) {
+  function b() {
+    e.contents_ = goog.loadFileSync_(e.path);
+    e.contents_ && (e.contents_ = e.transform(e.contents_), e.contents_ && (e.contents_ += "\n//# sourceURL=" + e.path));
+  }
 
-var $floor = Math.floor; // http://262.ecma-international.org/5.1/#sec-5.2
+  function c() {
+    e.lazyFetch_ && b();
 
-module.exports = function floor(x) {
-  // return x - modulo(x, 1);
-  return $floor(x);
-};
+    if (e.contents_) {
+      f && a.setModuleState(goog.ModuleType.ES6);
 
-/***/ }),
+      try {
+        var c = e.contents_;
+        e.contents_ = null;
+        goog.globalEval(c);
+        if (f) var d = goog.moduleLoaderState_.moduleName;
+      } finally {
+        f && a.clearModuleState();
+      }
 
-/***/ "./node_modules/es-abstract/GetIntrinsic.js":
-/*!**************************************************!*\
-  !*** ./node_modules/es-abstract/GetIntrinsic.js ***!
-  \**************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+      f && goog.global.$jscomp.require.ensure([e.getPathName()], function () {
+        a.registerEs6ModuleExports(e.path, goog.global.$jscomp.require(e.getPathName()), d);
+      });
+      a.loaded();
+    }
+  }
 
-"use strict";
- // TODO: remove, semver-major
+  function d() {
+    var a = goog.global.document,
+        b = goog.Dependency.registerCallback_(function () {
+      goog.Dependency.unregisterCallback_(b);
+      c();
+    }),
+        d = '<script type="text/javascript">' + goog.protectScriptTag_('goog.Dependency.callback_("' + b + '");') + "\x3c/script>";
+    a.write(goog.TRUSTED_TYPES_POLICY_ ? goog.TRUSTED_TYPES_POLICY_.createHTML(d) : d);
+  }
 
-module.exports = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+  var e = this;
+  if (goog.global.CLOSURE_IMPORT_SCRIPT) b(), this.contents_ && goog.global.CLOSURE_IMPORT_SCRIPT("", this.contents_) ? (this.contents_ = null, a.loaded()) : a.pause();else {
+    var f = this.loadFlags.module == goog.ModuleType.ES6;
+    this.lazyFetch_ || b();
+    var g = 1 < a.pending().length,
+        h = g && goog.DebugLoader_.IS_OLD_IE_;
+    g = goog.Dependency.defer_ && (g || goog.isDocumentLoading_());
+    if (h || g) a.defer(function () {
+      c();
+    });else {
+      var k = goog.global.document;
+      h = goog.inHtmlDocument_() && "ActiveXObject" in goog.global;
 
-/***/ }),
+      if (f && goog.inHtmlDocument_() && goog.isDocumentLoading_() && !h) {
+        goog.Dependency.defer_ = !0;
+        a.pause();
+        var l = k.onreadystatechange;
 
-/***/ "./node_modules/es-abstract/helpers/DefineOwnProperty.js":
-/*!***************************************************************!*\
-  !*** ./node_modules/es-abstract/helpers/DefineOwnProperty.js ***!
-  \***************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+        k.onreadystatechange = function () {
+          "interactive" == k.readyState && (k.onreadystatechange = l, c(), a.resume());
+          goog.isFunction(l) && l.apply(void 0, arguments);
+        };
+      } else !goog.DebugLoader_.IS_OLD_IE_ && goog.inHtmlDocument_() && goog.isDocumentLoading_() ? d() : c();
+    }
+  }
+}, goog.TransformedDependency.prototype.transform = function (a) {}, goog.TranspiledDependency = function (a, b, c, d, e, f) {
+  goog.TransformedDependency.call(this, a, b, c, d, e);
+  this.transpiler = f;
+}, goog.inherits(goog.TranspiledDependency, goog.TransformedDependency), goog.TranspiledDependency.prototype.transform = function (a) {
+  return this.transpiler.transpile(a, this.getPathName());
+}, goog.PreTranspiledEs6ModuleDependency = function (a, b, c, d, e) {
+  goog.TransformedDependency.call(this, a, b, c, d, e);
+}, goog.inherits(goog.PreTranspiledEs6ModuleDependency, goog.TransformedDependency), goog.PreTranspiledEs6ModuleDependency.prototype.transform = function (a) {
+  return a;
+}, goog.GoogModuleDependency = function (a, b, c, d, e, f, g) {
+  goog.TransformedDependency.call(this, a, b, c, d, e);
+  this.needsTranspile_ = f;
+  this.transpiler_ = g;
+}, goog.inherits(goog.GoogModuleDependency, goog.TransformedDependency), goog.GoogModuleDependency.prototype.transform = function (a) {
+  this.needsTranspile_ && (a = this.transpiler_.transpile(a, this.getPathName()));
+  return goog.LOAD_MODULE_USING_EVAL && goog.isDef(goog.global.JSON) ? "goog.loadModule(" + goog.global.JSON.stringify(a + "\n//# sourceURL=" + this.path + "\n") + ");" : 'goog.loadModule(function(exports) {"use strict";' + a + "\n;return exports});\n//# sourceURL=" + this.path + "\n";
+}, goog.DebugLoader_.IS_OLD_IE_ = !(goog.global.atob || !goog.global.document || !goog.global.document.all), goog.DebugLoader_.prototype.addDependency = function (a, b, c, d) {
+  b = b || [];
+  a = a.replace(/\\/g, "/");
+  var e = goog.normalizePath_(goog.basePath + a);
+  d && "boolean" !== typeof d || (d = d ? {
+    module: goog.ModuleType.GOOG
+  } : {});
+  c = this.factory_.createDependency(e, a, b, c, d, goog.transpiler_.needsTranspile(d.lang || "es3", d.module));
+  this.dependencies_[e] = c;
 
-"use strict";
+  for (c = 0; c < b.length; c++) this.idToPath_[b[c]] = e;
 
+  this.idToPath_[a] = e;
+}, goog.DependencyFactory = function (a) {
+  this.transpiler = a;
+}, goog.DependencyFactory.prototype.createDependency = function (a, b, c, d, e, f) {
+  return e.module == goog.ModuleType.GOOG ? new goog.GoogModuleDependency(a, b, c, d, e, f, this.transpiler) : f ? new goog.TranspiledDependency(a, b, c, d, e, this.transpiler) : e.module == goog.ModuleType.ES6 ? "never" == goog.TRANSPILE && goog.ASSUME_ES_MODULES_TRANSPILED ? new goog.PreTranspiledEs6ModuleDependency(a, b, c, d, e) : new goog.Es6ModuleDependency(a, b, c, d, e) : new goog.Dependency(a, b, c, d, e);
+}, goog.debugLoader_ = new goog.DebugLoader_(), goog.loadClosureDeps = function () {
+  goog.debugLoader_.loadClosureDeps();
+}, goog.setDependencyFactory = function (a) {
+  goog.debugLoader_.setDependencyFactory(a);
+}, goog.global.CLOSURE_NO_DEPS || goog.debugLoader_.loadClosureDeps(), goog.bootstrap = function (a, b) {
+  goog.debugLoader_.bootstrap(a, b);
+});
+goog.TRUSTED_TYPES_POLICY_NAME = "";
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+goog.identity_ = function (a) {
+  return a;
+};
 
-var $defineProperty = GetIntrinsic('%Object.defineProperty%', true);
+goog.createTrustedTypesPolicy = function (a) {
+  var b = null;
+  if ("undefined" === typeof TrustedTypes || !TrustedTypes.createPolicy) return b;
 
-if ($defineProperty) {
   try {
-    $defineProperty({}, 'a', {
-      value: 1
+    b = TrustedTypes.createPolicy(a, {
+      createHTML: goog.identity_,
+      createScript: goog.identity_,
+      createScriptURL: goog.identity_,
+      createURL: goog.identity_
     });
-  } catch (e) {
-    // IE 8 has a broken defineProperty
-    $defineProperty = null;
+  } catch (c) {
+    goog.logToConsole_(c.message);
   }
-}
 
-var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
+  return b;
+};
 
-var $isEnumerable = callBound('Object.prototype.propertyIsEnumerable'); // eslint-disable-next-line max-params
+goog.TRUSTED_TYPES_POLICY_ = goog.TRUSTED_TYPES_POLICY_NAME ? goog.createTrustedTypesPolicy(goog.TRUSTED_TYPES_POLICY_NAME + "#base") : null;
+goog.object = {};
 
-module.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {
-  if (!$defineProperty) {
-    if (!IsDataDescriptor(desc)) {
-      // ES3 does not support getters/setters
-      return false;
-    }
+goog.object.is = function (a, b) {
+  return a === b ? 0 !== a || 1 / a === 1 / b : a !== a && b !== b;
+};
 
-    if (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {
-      return false;
-    } // fallback for ES3
+goog.object.forEach = function (a, b, c) {
+  for (var d in a) b.call(c, a[d], d, a);
+};
 
+goog.object.filter = function (a, b, c) {
+  var d = {},
+      e;
 
-    if (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {
-      // a non-enumerable existing property
-      return false;
-    } // property does not exist at all, or exists but is enumerable
+  for (e in a) b.call(c, a[e], e, a) && (d[e] = a[e]);
 
+  return d;
+};
 
-    var V = desc['[[Value]]']; // eslint-disable-next-line no-param-reassign
+goog.object.map = function (a, b, c) {
+  var d = {},
+      e;
 
-    O[P] = V; // will use [[Define]]
+  for (e in a) d[e] = b.call(c, a[e], e, a);
 
-    return SameValue(O[P], V);
-  }
+  return d;
+};
 
-  $defineProperty(O, P, FromPropertyDescriptor(desc));
-  return true;
+goog.object.some = function (a, b, c) {
+  for (var d in a) if (b.call(c, a[d], d, a)) return !0;
+
+  return !1;
 };
 
-/***/ }),
+goog.object.every = function (a, b, c) {
+  for (var d in a) if (!b.call(c, a[d], d, a)) return !1;
 
-/***/ "./node_modules/es-abstract/helpers/assertRecord.js":
-/*!**********************************************************!*\
-  !*** ./node_modules/es-abstract/helpers/assertRecord.js ***!
-  \**********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+  return !0;
+};
 
-"use strict";
+goog.object.getCount = function (a) {
+  var b = 0,
+      c;
 
+  for (c in a) b++;
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+  return b;
+};
 
-var $TypeError = GetIntrinsic('%TypeError%');
-var $SyntaxError = GetIntrinsic('%SyntaxError%');
+goog.object.getAnyKey = function (a) {
+  for (var b in a) return b;
+};
 
-var has = __webpack_require__(/*! has */ "./node_modules/has/src/index.js");
+goog.object.getAnyValue = function (a) {
+  for (var b in a) return a[b];
+};
 
-var predicates = {
-  // https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type
-  'Property Descriptor': function isPropertyDescriptor(Type, Desc) {
-    if (Type(Desc) !== 'Object') {
-      return false;
-    }
+goog.object.contains = function (a, b) {
+  return goog.object.containsValue(a, b);
+};
 
-    var allowed = {
-      '[[Configurable]]': true,
-      '[[Enumerable]]': true,
-      '[[Get]]': true,
-      '[[Set]]': true,
-      '[[Value]]': true,
-      '[[Writable]]': true
-    };
+goog.object.getValues = function (a) {
+  var b = [],
+      c = 0,
+      d;
 
-    for (var key in Desc) {
-      // eslint-disable-line
-      if (has(Desc, key) && !allowed[key]) {
-        return false;
-      }
-    }
+  for (d in a) b[c++] = a[d];
 
-    var isData = has(Desc, '[[Value]]');
-    var IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');
+  return b;
+};
 
-    if (isData && IsAccessor) {
-      throw new $TypeError('Property Descriptors may not be both accessor and data descriptors');
-    }
+goog.object.getKeys = function (a) {
+  var b = [],
+      c = 0,
+      d;
 
-    return true;
-  }
+  for (d in a) b[c++] = d;
+
+  return b;
 };
 
-module.exports = function assertRecord(Type, recordType, argumentName, value) {
-  var predicate = predicates[recordType];
+goog.object.getValueByKeys = function (a, b) {
+  var c = goog.isArrayLike(b),
+      d = c ? b : arguments;
 
-  if (typeof predicate !== 'function') {
-    throw new $SyntaxError('unknown record type: ' + recordType);
+  for (c = c ? 0 : 1; c < d.length; c++) {
+    if (null == a) return;
+    a = a[d[c]];
   }
 
-  if (!predicate(Type, value)) {
-    throw new $TypeError(argumentName + ' must be a ' + recordType);
-  }
+  return a;
 };
 
-/***/ }),
+goog.object.containsKey = function (a, b) {
+  return null !== a && b in a;
+};
 
-/***/ "./node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js":
-/*!**********************************************************************!*\
-  !*** ./node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js ***!
-  \**********************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+goog.object.containsValue = function (a, b) {
+  for (var c in a) if (a[c] == b) return !0;
 
-"use strict";
+  return !1;
+};
 
+goog.object.findKey = function (a, b, c) {
+  for (var d in a) if (b.call(c, a[d], d, a)) return d;
+};
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+goog.object.findValue = function (a, b, c) {
+  return (b = goog.object.findKey(a, b, c)) && a[b];
+};
 
-var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%');
+goog.object.isEmpty = function (a) {
+  for (var b in a) return !1;
 
-if ($gOPD) {
-  try {
-    $gOPD([], 'length');
-  } catch (e) {
-    // IE 8 has a broken gOPD
-    $gOPD = null;
-  }
-}
+  return !0;
+};
 
-module.exports = $gOPD;
+goog.object.clear = function (a) {
+  for (var b in a) delete a[b];
+};
 
-/***/ }),
+goog.object.remove = function (a, b) {
+  var c;
+  (c = b in a) && delete a[b];
+  return c;
+};
 
-/***/ "./node_modules/es-abstract/helpers/isFinite.js":
-/*!******************************************************!*\
-  !*** ./node_modules/es-abstract/helpers/isFinite.js ***!
-  \******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+goog.object.add = function (a, b, c) {
+  if (null !== a && b in a) throw Error('The object already contains the key "' + b + '"');
+  goog.object.set(a, b, c);
+};
 
-"use strict";
+goog.object.get = function (a, b, c) {
+  return null !== a && b in a ? a[b] : c;
+};
 
+goog.object.set = function (a, b, c) {
+  a[b] = c;
+};
 
-var $isNaN = Number.isNaN || function (a) {
-  return a !== a;
+goog.object.setIfUndefined = function (a, b, c) {
+  return b in a ? a[b] : a[b] = c;
 };
 
-module.exports = Number.isFinite || function (x) {
-  return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity;
+goog.object.setWithReturnValueIfNotSet = function (a, b, c) {
+  if (b in a) return a[b];
+  c = c();
+  return a[b] = c;
 };
 
-/***/ }),
+goog.object.equals = function (a, b) {
+  for (var c in a) if (!(c in b) || a[c] !== b[c]) return !1;
 
-/***/ "./node_modules/es-abstract/helpers/isNaN.js":
-/*!***************************************************!*\
-  !*** ./node_modules/es-abstract/helpers/isNaN.js ***!
-  \***************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+  for (var d in b) if (!(d in a)) return !1;
 
-"use strict";
+  return !0;
+};
+
+goog.object.clone = function (a) {
+  var b = {},
+      c;
 
+  for (c in a) b[c] = a[c];
 
-module.exports = Number.isNaN || function isNaN(a) {
-  return a !== a;
+  return b;
 };
 
-/***/ }),
+goog.object.unsafeClone = function (a) {
+  var b = goog.typeOf(a);
 
-/***/ "./node_modules/es-abstract/helpers/isPrimitive.js":
-/*!*********************************************************!*\
-  !*** ./node_modules/es-abstract/helpers/isPrimitive.js ***!
-  \*********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+  if ("object" == b || "array" == b) {
+    if (goog.isFunction(a.clone)) return a.clone();
+    b = "array" == b ? [] : {};
 
-"use strict";
+    for (var c in a) b[c] = goog.object.unsafeClone(a[c]);
 
+    return b;
+  }
 
-module.exports = function isPrimitive(value) {
-  return value === null || typeof value !== 'function' && typeof value !== 'object';
+  return a;
 };
 
-/***/ }),
-
-/***/ "./node_modules/es-abstract/helpers/isPropertyDescriptor.js":
-/*!******************************************************************!*\
-  !*** ./node_modules/es-abstract/helpers/isPropertyDescriptor.js ***!
-  \******************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+goog.object.transpose = function (a) {
+  var b = {},
+      c;
 
-"use strict";
+  for (c in a) b[a[c]] = c;
 
+  return b;
+};
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+goog.object.PROTOTYPE_FIELDS_ = "constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");
 
-var has = __webpack_require__(/*! has */ "./node_modules/has/src/index.js");
+goog.object.extend = function (a, b) {
+  for (var c, d, e = 1; e < arguments.length; e++) {
+    d = arguments[e];
 
-var $TypeError = GetIntrinsic('%TypeError%');
+    for (c in d) a[c] = d[c];
 
-module.exports = function IsPropertyDescriptor(ES, Desc) {
-  if (ES.Type(Desc) !== 'Object') {
-    return false;
+    for (var f = 0; f < goog.object.PROTOTYPE_FIELDS_.length; f++) c = goog.object.PROTOTYPE_FIELDS_[f], Object.prototype.hasOwnProperty.call(d, c) && (a[c] = d[c]);
   }
+};
 
-  var allowed = {
-    '[[Configurable]]': true,
-    '[[Enumerable]]': true,
-    '[[Get]]': true,
-    '[[Set]]': true,
-    '[[Value]]': true,
-    '[[Writable]]': true
-  };
-
-  for (var key in Desc) {
-    // eslint-disable-line no-restricted-syntax
-    if (has(Desc, key) && !allowed[key]) {
-      return false;
-    }
-  }
+goog.object.create = function (a) {
+  var b = arguments.length;
+  if (1 == b && goog.isArray(arguments[0])) return goog.object.create.apply(null, arguments[0]);
+  if (b % 2) throw Error("Uneven number of arguments");
 
-  if (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {
-    throw new $TypeError('Property Descriptors may not be both accessor and data descriptors');
-  }
+  for (var c = {}, d = 0; d < b; d += 2) c[arguments[d]] = arguments[d + 1];
 
-  return true;
+  return c;
 };
 
-/***/ }),
-
-/***/ "./node_modules/es-abstract/helpers/maxSafeInteger.js":
-/*!************************************************************!*\
-  !*** ./node_modules/es-abstract/helpers/maxSafeInteger.js ***!
-  \************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+goog.object.createSet = function (a) {
+  var b = arguments.length;
+  if (1 == b && goog.isArray(arguments[0])) return goog.object.createSet.apply(null, arguments[0]);
 
-"use strict";
+  for (var c = {}, d = 0; d < b; d++) c[arguments[d]] = !0;
 
+  return c;
+};
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+goog.object.createImmutableView = function (a) {
+  var b = a;
+  Object.isFrozen && !Object.isFrozen(a) && (b = Object.create(a), Object.freeze(b));
+  return b;
+};
 
-var $Math = GetIntrinsic('%Math%');
-var $Number = GetIntrinsic('%Number%');
-module.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;
+goog.object.isImmutableView = function (a) {
+  return !!Object.isFrozen && Object.isFrozen(a);
+};
 
-/***/ }),
+goog.object.getAllPropertyNames = function (a, b, c) {
+  if (!a) return [];
+  if (!Object.getOwnPropertyNames || !Object.getPrototypeOf) return goog.object.getKeys(a);
 
-/***/ "./node_modules/es-abstract/helpers/regexTester.js":
-/*!*********************************************************!*\
-  !*** ./node_modules/es-abstract/helpers/regexTester.js ***!
-  \*********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+  for (var d = {}; a && (a !== Object.prototype || b) && (a !== Function.prototype || c);) {
+    for (var e = Object.getOwnPropertyNames(a), f = 0; f < e.length; f++) d[e[f]] = !0;
 
-"use strict";
+    a = Object.getPrototypeOf(a);
+  }
 
+  return goog.object.getKeys(d);
+};
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+goog.object.getSuperClass = function (a) {
+  return (a = Object.getPrototypeOf(a.prototype)) && a.constructor;
+};
 
-var $test = GetIntrinsic('RegExp.prototype.test');
+goog.debug = {};
 
-var callBind = __webpack_require__(/*! call-bind */ "./node_modules/call-bind/index.js");
+goog.debug.Error = function (a) {
+  if (Error.captureStackTrace) Error.captureStackTrace(this, goog.debug.Error);else {
+    var b = Error().stack;
+    b && (this.stack = b);
+  }
+  a && (this.message = String(a));
+  this.reportErrorToServer = !0;
+};
 
-module.exports = function regexTester(regex) {
-  return callBind($test, regex);
+goog.inherits(goog.debug.Error, Error);
+goog.debug.Error.prototype.name = "CustomError";
+goog.dom = {};
+goog.dom.NodeType = {
+  ELEMENT: 1,
+  ATTRIBUTE: 2,
+  TEXT: 3,
+  CDATA_SECTION: 4,
+  ENTITY_REFERENCE: 5,
+  ENTITY: 6,
+  PROCESSING_INSTRUCTION: 7,
+  COMMENT: 8,
+  DOCUMENT: 9,
+  DOCUMENT_TYPE: 10,
+  DOCUMENT_FRAGMENT: 11,
+  NOTATION: 12
 };
+goog.asserts = {};
+goog.asserts.ENABLE_ASSERTS = goog.DEBUG;
 
-/***/ }),
+goog.asserts.AssertionError = function (a, b) {
+  goog.debug.Error.call(this, goog.asserts.subs_(a, b));
+  this.messagePattern = a;
+};
 
-/***/ "./node_modules/es-abstract/helpers/sign.js":
-/*!**************************************************!*\
-  !*** ./node_modules/es-abstract/helpers/sign.js ***!
-  \**************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+goog.inherits(goog.asserts.AssertionError, goog.debug.Error);
+goog.asserts.AssertionError.prototype.name = "AssertionError";
 
-"use strict";
+goog.asserts.DEFAULT_ERROR_HANDLER = function (a) {
+  throw a;
+};
 
+goog.asserts.errorHandler_ = goog.asserts.DEFAULT_ERROR_HANDLER;
 
-module.exports = function sign(number) {
-  return number >= 0 ? 1 : -1;
-};
+goog.asserts.subs_ = function (a, b) {
+  a = a.split("%s");
 
-/***/ }),
+  for (var c = "", d = a.length - 1, e = 0; e < d; e++) c += a[e] + (e < b.length ? b[e] : "%s");
 
-/***/ "./node_modules/es-array-method-boxes-properly/index.js":
-/*!**************************************************************!*\
-  !*** ./node_modules/es-array-method-boxes-properly/index.js ***!
-  \**************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+  return c + a[d];
+};
 
-module.exports = function properlyBoxed(method) {
-  // Check node 0.6.21 bug where third parameter is not boxed
-  var properlyBoxesNonStrict = true;
-  var properlyBoxesStrict = true;
-  var threwException = false;
+goog.asserts.doAssertFailure_ = function (a, b, c, d) {
+  var e = "Assertion failed";
 
-  if (typeof method === 'function') {
-    try {
-      // eslint-disable-next-line max-params
-      method.call('f', function (_, __, O) {
-        if (typeof O !== 'object') {
-          properlyBoxesNonStrict = false;
-        }
-      });
-      method.call([null], function () {
-        'use strict';
+  if (c) {
+    e += ": " + c;
+    var f = d;
+  } else a && (e += ": " + a, f = b);
 
-        properlyBoxesStrict = typeof this === 'string'; // eslint-disable-line no-invalid-this
-      }, 'x');
-    } catch (e) {
-      threwException = true;
-    }
+  a = new goog.asserts.AssertionError("" + e, f || []);
+  goog.asserts.errorHandler_(a);
+};
 
-    return !threwException && properlyBoxesNonStrict && properlyBoxesStrict;
-  }
+goog.asserts.setErrorHandler = function (a) {
+  goog.asserts.ENABLE_ASSERTS && (goog.asserts.errorHandler_ = a);
+};
 
-  return false;
+goog.asserts.assert = function (a, b, c) {
+  goog.asserts.ENABLE_ASSERTS && !a && goog.asserts.doAssertFailure_("", null, b, Array.prototype.slice.call(arguments, 2));
+  return a;
 };
 
-/***/ }),
+goog.asserts.assertExists = function (a, b, c) {
+  goog.asserts.ENABLE_ASSERTS && null == a && goog.asserts.doAssertFailure_("Expected to exist: %s.", [a], b, Array.prototype.slice.call(arguments, 2));
+  return a;
+};
 
-/***/ "./node_modules/es-get-iterator/index.js":
-/*!***********************************************!*\
-  !*** ./node_modules/es-get-iterator/index.js ***!
-  \***********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+goog.asserts.fail = function (a, b) {
+  goog.asserts.ENABLE_ASSERTS && goog.asserts.errorHandler_(new goog.asserts.AssertionError("Failure" + (a ? ": " + a : ""), Array.prototype.slice.call(arguments, 1)));
+};
 
-"use strict";
+goog.asserts.assertNumber = function (a, b, c) {
+  goog.asserts.ENABLE_ASSERTS && !goog.isNumber(a) && goog.asserts.doAssertFailure_("Expected number but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
+  return a;
+};
 
-/* eslint global-require: 0 */
-// the code is structured this way so that bundlers can
-// alias out `has-symbols` to `() => true` or `() => false` if your target
-// environments' Symbol capabilities are known, and then use
-// dead code elimination on the rest of this module.
-//
-// Similarly, `isarray` can be aliased to `Array.isArray` if
-// available in all target environments.
+goog.asserts.assertString = function (a, b, c) {
+  goog.asserts.ENABLE_ASSERTS && !goog.isString(a) && goog.asserts.doAssertFailure_("Expected string but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
+  return a;
+};
 
-var isArguments = __webpack_require__(/*! is-arguments */ "./node_modules/is-arguments/index.js");
+goog.asserts.assertFunction = function (a, b, c) {
+  goog.asserts.ENABLE_ASSERTS && !goog.isFunction(a) && goog.asserts.doAssertFailure_("Expected function but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
+  return a;
+};
 
-if (__webpack_require__(/*! has-symbols */ "./node_modules/has-symbols/index.js")() || __webpack_require__(/*! has-symbols/shams */ "./node_modules/has-symbols/shams.js")()) {
-  var $iterator = Symbol.iterator; // Symbol is available natively or shammed
-  // natively:
-  //  - Chrome >= 38
-  //  - Edge 12-14?, Edge >= 15 for sure
-  //  - FF >= 36
-  //  - Safari >= 9
-  //  - node >= 0.12
+goog.asserts.assertObject = function (a, b, c) {
+  goog.asserts.ENABLE_ASSERTS && !goog.isObject(a) && goog.asserts.doAssertFailure_("Expected object but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
+  return a;
+};
 
-  module.exports = function getIterator(iterable) {
-    // alternatively, `iterable[$iterator]?.()`
-    if (iterable != null && typeof iterable[$iterator] !== 'undefined') {
-      return iterable[$iterator]();
-    }
+goog.asserts.assertArray = function (a, b, c) {
+  goog.asserts.ENABLE_ASSERTS && !goog.isArray(a) && goog.asserts.doAssertFailure_("Expected array but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
+  return a;
+};
 
-    if (isArguments(iterable)) {
-      // arguments objects lack Symbol.iterator
-      // - node 0.12
-      return Array.prototype[$iterator].call(iterable);
-    }
-  };
-} else {
-  // Symbol is not available, native or shammed
-  var isArray = __webpack_require__(/*! isarray */ "./node_modules/es-get-iterator/node_modules/isarray/index.js");
+goog.asserts.assertBoolean = function (a, b, c) {
+  goog.asserts.ENABLE_ASSERTS && !goog.isBoolean(a) && goog.asserts.doAssertFailure_("Expected boolean but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
+  return a;
+};
 
-  var isString = __webpack_require__(/*! is-string */ "./node_modules/is-string/index.js");
+goog.asserts.assertElement = function (a, b, c) {
+  !goog.asserts.ENABLE_ASSERTS || goog.isObject(a) && a.nodeType == goog.dom.NodeType.ELEMENT || goog.asserts.doAssertFailure_("Expected Element but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
+  return a;
+};
 
-  var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+goog.asserts.assertInstanceof = function (a, b, c, d) {
+  !goog.asserts.ENABLE_ASSERTS || a instanceof b || goog.asserts.doAssertFailure_("Expected instanceof %s but got %s.", [goog.asserts.getType_(b), goog.asserts.getType_(a)], c, Array.prototype.slice.call(arguments, 3));
+  return a;
+};
 
-  var $Map = GetIntrinsic('%Map%', true);
-  var $Set = GetIntrinsic('%Set%', true);
+goog.asserts.assertFinite = function (a, b, c) {
+  !goog.asserts.ENABLE_ASSERTS || "number" == typeof a && isFinite(a) || goog.asserts.doAssertFailure_("Expected %s to be a finite number but it is not.", [a], b, Array.prototype.slice.call(arguments, 2));
+  return a;
+};
 
-  var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
+goog.asserts.assertObjectPrototypeIsIntact = function () {
+  for (var a in Object.prototype) goog.asserts.fail(a + " should not be enumerable in Object.prototype.");
+};
 
-  var $arrayPush = callBound('Array.prototype.push');
-  var $charCodeAt = callBound('String.prototype.charCodeAt');
-  var $stringSlice = callBound('String.prototype.slice');
+goog.asserts.getType_ = function (a) {
+  return a instanceof Function ? a.displayName || a.name || "unknown type name" : a instanceof Object ? a.constructor.displayName || a.constructor.name || Object.prototype.toString.call(a) : null === a ? "null" : typeof a;
+};
 
-  var advanceStringIndex = function advanceStringIndex(S, index) {
-    var length = S.length;
+var jspb = {
+  BinaryConstants: {},
+  ConstBinaryMessage: function () {},
+  BinaryMessage: function () {}
+};
+jspb.BinaryConstants.FieldType = {
+  INVALID: -1,
+  DOUBLE: 1,
+  FLOAT: 2,
+  INT64: 3,
+  UINT64: 4,
+  INT32: 5,
+  FIXED64: 6,
+  FIXED32: 7,
+  BOOL: 8,
+  STRING: 9,
+  GROUP: 10,
+  MESSAGE: 11,
+  BYTES: 12,
+  UINT32: 13,
+  ENUM: 14,
+  SFIXED32: 15,
+  SFIXED64: 16,
+  SINT32: 17,
+  SINT64: 18,
+  FHASH64: 30,
+  VHASH64: 31
+};
+jspb.BinaryConstants.WireType = {
+  INVALID: -1,
+  VARINT: 0,
+  FIXED64: 1,
+  DELIMITED: 2,
+  START_GROUP: 3,
+  END_GROUP: 4,
+  FIXED32: 5
+};
 
-    if (index + 1 >= length) {
-      return index + 1;
-    }
+jspb.BinaryConstants.FieldTypeToWireType = function (a) {
+  var b = jspb.BinaryConstants.FieldType,
+      c = jspb.BinaryConstants.WireType;
 
-    var first = $charCodeAt(S, index);
+  switch (a) {
+    case b.INT32:
+    case b.INT64:
+    case b.UINT32:
+    case b.UINT64:
+    case b.SINT32:
+    case b.SINT64:
+    case b.BOOL:
+    case b.ENUM:
+    case b.VHASH64:
+      return c.VARINT;
 
-    if (first < 0xD800 || first > 0xDBFF) {
-      return index + 1;
-    }
+    case b.DOUBLE:
+    case b.FIXED64:
+    case b.SFIXED64:
+    case b.FHASH64:
+      return c.FIXED64;
 
-    var second = $charCodeAt(S, index + 1);
+    case b.STRING:
+    case b.MESSAGE:
+    case b.BYTES:
+      return c.DELIMITED;
 
-    if (second < 0xDC00 || second > 0xDFFF) {
-      return index + 1;
-    }
+    case b.FLOAT:
+    case b.FIXED32:
+    case b.SFIXED32:
+      return c.FIXED32;
 
-    return index + 2;
-  };
+    default:
+      return c.INVALID;
+  }
+};
 
-  var getArrayIterator = function getArrayIterator(arraylike) {
-    var i = 0;
-    return {
-      next: function next() {
-        var done = i >= arraylike.length;
-        var value;
-
-        if (!done) {
-          value = arraylike[i];
-          i += 1;
-        }
-
-        return {
-          done: done,
-          value: value
-        };
-      }
-    };
-  };
+jspb.BinaryConstants.INVALID_FIELD_NUMBER = -1;
+jspb.BinaryConstants.FLOAT32_EPS = 1.401298464324817E-45;
+jspb.BinaryConstants.FLOAT32_MIN = 1.1754943508222875E-38;
+jspb.BinaryConstants.FLOAT32_MAX = 3.4028234663852886E38;
+jspb.BinaryConstants.FLOAT64_EPS = 4.9E-324;
+jspb.BinaryConstants.FLOAT64_MIN = 2.2250738585072014E-308;
+jspb.BinaryConstants.FLOAT64_MAX = 1.7976931348623157E308;
+jspb.BinaryConstants.TWO_TO_20 = 1048576;
+jspb.BinaryConstants.TWO_TO_23 = 8388608;
+jspb.BinaryConstants.TWO_TO_31 = 2147483648;
+jspb.BinaryConstants.TWO_TO_32 = 4294967296;
+jspb.BinaryConstants.TWO_TO_52 = 4503599627370496;
+jspb.BinaryConstants.TWO_TO_63 = 0x7fffffffffffffff;
+jspb.BinaryConstants.TWO_TO_64 = 1.8446744073709552E19;
+jspb.BinaryConstants.ZERO_HASH = "\x00\x00\x00\x00\x00\x00\x00\x00";
+goog.array = {};
+goog.NATIVE_ARRAY_PROTOTYPES = goog.TRUSTED_SITE;
+goog.array.ASSUME_NATIVE_FUNCTIONS = 2012 < goog.FEATURESET_YEAR;
 
-  var getNonCollectionIterator = function getNonCollectionIterator(iterable, noPrimordialCollections) {
-    if (isArray(iterable) || isArguments(iterable)) {
-      return getArrayIterator(iterable);
-    }
+goog.array.peek = function (a) {
+  return a[a.length - 1];
+};
 
-    if (isString(iterable)) {
-      var i = 0;
-      return {
-        next: function next() {
-          var nextIndex = advanceStringIndex(iterable, i);
-          var value = $stringSlice(iterable, i, nextIndex);
-          i = nextIndex;
-          return {
-            done: nextIndex > iterable.length,
-            value: value
-          };
-        }
-      };
-    } // es6-shim and es-shims' es-map use a string "_es6-shim iterator_" property on different iterables, such as MapIterator.
+goog.array.last = goog.array.peek;
+goog.array.indexOf = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.indexOf) ? function (a, b, c) {
+  goog.asserts.assert(null != a.length);
+  return Array.prototype.indexOf.call(a, b, c);
+} : function (a, b, c) {
+  c = null == c ? 0 : 0 > c ? Math.max(0, a.length + c) : c;
+  if (goog.isString(a)) return goog.isString(b) && 1 == b.length ? a.indexOf(b, c) : -1;
 
+  for (; c < a.length; c++) if (c in a && a[c] === b) return c;
 
-    if (noPrimordialCollections && typeof iterable['_es6-shim iterator_'] !== 'undefined') {
-      return iterable['_es6-shim iterator_']();
-    }
-  };
+  return -1;
+};
+goog.array.lastIndexOf = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.lastIndexOf) ? function (a, b, c) {
+  goog.asserts.assert(null != a.length);
+  return Array.prototype.lastIndexOf.call(a, b, null == c ? a.length - 1 : c);
+} : function (a, b, c) {
+  c = null == c ? a.length - 1 : c;
+  0 > c && (c = Math.max(0, a.length + c));
+  if (goog.isString(a)) return goog.isString(b) && 1 == b.length ? a.lastIndexOf(b, c) : -1;
 
-  if (!$Map && !$Set) {
-    // the only language iterables are Array, String, arguments
-    // - Safari <= 6.0
-    // - Chrome < 38
-    // - node < 0.12
-    // - FF < 13
-    // - IE < 11
-    // - Edge < 11
-    module.exports = function getIterator(iterable) {
-      if (iterable != null) {
-        return getNonCollectionIterator(iterable, true);
-      }
-    };
-  } else {
-    // either Map or Set are available, but Symbol is not
-    // - es6-shim on an ES5 browser
-    // - Safari 6.2 (maybe 6.1?)
-    // - FF v[13, 36)
-    // - IE 11
-    // - Edge 11
-    // - Safari v[6, 9)
-    var isMap = __webpack_require__(/*! is-map */ "./node_modules/is-map/index.js");
+  for (; 0 <= c; c--) if (c in a && a[c] === b) return c;
 
-    var isSet = __webpack_require__(/*! is-set */ "./node_modules/is-set/index.js"); // Firefox >= 27, IE 11, Safari 6.2 - 9, Edge 11, es6-shim in older envs, all have forEach
+  return -1;
+};
+goog.array.forEach = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.forEach) ? function (a, b, c) {
+  goog.asserts.assert(null != a.length);
+  Array.prototype.forEach.call(a, b, c);
+} : function (a, b, c) {
+  for (var d = a.length, e = goog.isString(a) ? a.split("") : a, f = 0; f < d; f++) f in e && b.call(c, e[f], f, a);
+};
 
+goog.array.forEachRight = function (a, b, c) {
+  var d = a.length,
+      e = goog.isString(a) ? a.split("") : a;
 
-    var $mapForEach = callBound('Map.prototype.forEach', true);
-    var $setForEach = callBound('Set.prototype.forEach', true);
+  for (--d; 0 <= d; --d) d in e && b.call(c, e[d], d, a);
+};
 
-    if (typeof process === 'undefined' || !process.versions || !process.versions.node) {
-      // "if is not node"
-      // Firefox 17 - 26 has `.iterator()`, whose iterator `.next()` either
-      // returns a value, or throws a StopIteration object. These browsers
-      // do not have any other mechanism for iteration.
-      var $mapIterator = callBound('Map.prototype.iterator', true);
-      var $setIterator = callBound('Set.prototype.iterator', true);
+goog.array.filter = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.filter) ? function (a, b, c) {
+  goog.asserts.assert(null != a.length);
+  return Array.prototype.filter.call(a, b, c);
+} : function (a, b, c) {
+  for (var d = a.length, e = [], f = 0, g = goog.isString(a) ? a.split("") : a, h = 0; h < d; h++) if (h in g) {
+    var k = g[h];
+    b.call(c, k, h, a) && (e[f++] = k);
+  }
 
-      var getStopIterationIterator = function (iterator) {
-        var done = false;
-        return {
-          next: function next() {
-            try {
-              return {
-                done: done,
-                value: done ? undefined : iterator.next()
-              };
-            } catch (e) {
-              done = true;
-              return {
-                done: true,
-                value: undefined
-              };
-            }
-          }
-        };
-      };
-    } // Firefox 27-35, and some older es6-shim versions, use a string "@@iterator" property
-    // this returns a proper iterator object, so we should use it instead of forEach.
-    // newer es6-shim versions use a string "_es6-shim iterator_" property.
+  return e;
+};
+goog.array.map = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.map) ? function (a, b, c) {
+  goog.asserts.assert(null != a.length);
+  return Array.prototype.map.call(a, b, c);
+} : function (a, b, c) {
+  for (var d = a.length, e = Array(d), f = goog.isString(a) ? a.split("") : a, g = 0; g < d; g++) g in f && (e[g] = b.call(c, f[g], g, a));
 
+  return e;
+};
+goog.array.reduce = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.reduce) ? function (a, b, c, d) {
+  goog.asserts.assert(null != a.length);
+  d && (b = goog.bind(b, d));
+  return Array.prototype.reduce.call(a, b, c);
+} : function (a, b, c, d) {
+  var e = c;
+  goog.array.forEach(a, function (c, g) {
+    e = b.call(d, e, c, g, a);
+  });
+  return e;
+};
+goog.array.reduceRight = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.reduceRight) ? function (a, b, c, d) {
+  goog.asserts.assert(null != a.length);
+  goog.asserts.assert(null != b);
+  d && (b = goog.bind(b, d));
+  return Array.prototype.reduceRight.call(a, b, c);
+} : function (a, b, c, d) {
+  var e = c;
+  goog.array.forEachRight(a, function (c, g) {
+    e = b.call(d, e, c, g, a);
+  });
+  return e;
+};
+goog.array.some = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.some) ? function (a, b, c) {
+  goog.asserts.assert(null != a.length);
+  return Array.prototype.some.call(a, b, c);
+} : function (a, b, c) {
+  for (var d = a.length, e = goog.isString(a) ? a.split("") : a, f = 0; f < d; f++) if (f in e && b.call(c, e[f], f, a)) return !0;
 
-    var $mapAtAtIterator = callBound('Map.prototype.@@iterator', true) || callBound('Map.prototype._es6-shim iterator_', true);
-    var $setAtAtIterator = callBound('Set.prototype.@@iterator', true) || callBound('Set.prototype._es6-shim iterator_', true);
+  return !1;
+};
+goog.array.every = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.every) ? function (a, b, c) {
+  goog.asserts.assert(null != a.length);
+  return Array.prototype.every.call(a, b, c);
+} : function (a, b, c) {
+  for (var d = a.length, e = goog.isString(a) ? a.split("") : a, f = 0; f < d; f++) if (f in e && !b.call(c, e[f], f, a)) return !1;
 
-    var getCollectionIterator = function getCollectionIterator(iterable) {
-      if (isMap(iterable)) {
-        if ($mapIterator) {
-          return getStopIterationIterator($mapIterator(iterable));
-        }
+  return !0;
+};
 
-        if ($mapAtAtIterator) {
-          return $mapAtAtIterator(iterable);
-        }
+goog.array.count = function (a, b, c) {
+  var d = 0;
+  goog.array.forEach(a, function (a, f, g) {
+    b.call(c, a, f, g) && ++d;
+  }, c);
+  return d;
+};
 
-        if ($mapForEach) {
-          var entries = [];
-          $mapForEach(iterable, function (v, k) {
-            $arrayPush(entries, [k, v]);
-          });
-          return getArrayIterator(entries);
-        }
-      }
+goog.array.find = function (a, b, c) {
+  b = goog.array.findIndex(a, b, c);
+  return 0 > b ? null : goog.isString(a) ? a.charAt(b) : a[b];
+};
 
-      if (isSet(iterable)) {
-        if ($setIterator) {
-          return getStopIterationIterator($setIterator(iterable));
-        }
+goog.array.findIndex = function (a, b, c) {
+  for (var d = a.length, e = goog.isString(a) ? a.split("") : a, f = 0; f < d; f++) if (f in e && b.call(c, e[f], f, a)) return f;
 
-        if ($setAtAtIterator) {
-          return $setAtAtIterator(iterable);
-        }
+  return -1;
+};
 
-        if ($setForEach) {
-          var values = [];
-          $setForEach(iterable, function (v) {
-            $arrayPush(values, v);
-          });
-          return getArrayIterator(values);
-        }
-      }
-    };
+goog.array.findRight = function (a, b, c) {
+  b = goog.array.findIndexRight(a, b, c);
+  return 0 > b ? null : goog.isString(a) ? a.charAt(b) : a[b];
+};
 
-    module.exports = function getIterator(iterable) {
-      return getCollectionIterator(iterable) || getNonCollectionIterator(iterable);
-    };
-  }
-}
+goog.array.findIndexRight = function (a, b, c) {
+  var d = a.length,
+      e = goog.isString(a) ? a.split("") : a;
 
-/***/ }),
+  for (--d; 0 <= d; d--) if (d in e && b.call(c, e[d], d, a)) return d;
 
-/***/ "./node_modules/es-get-iterator/node_modules/isarray/index.js":
-/*!********************************************************************!*\
-  !*** ./node_modules/es-get-iterator/node_modules/isarray/index.js ***!
-  \********************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+  return -1;
+};
 
-var toString = {}.toString;
+goog.array.contains = function (a, b) {
+  return 0 <= goog.array.indexOf(a, b);
+};
 
-module.exports = Array.isArray || function (arr) {
-  return toString.call(arr) == '[object Array]';
+goog.array.isEmpty = function (a) {
+  return 0 == a.length;
 };
 
-/***/ }),
+goog.array.clear = function (a) {
+  if (!goog.isArray(a)) for (var b = a.length - 1; 0 <= b; b--) delete a[b];
+  a.length = 0;
+};
 
-/***/ "./node_modules/es-to-primitive/es2015.js":
-/*!************************************************!*\
-  !*** ./node_modules/es-to-primitive/es2015.js ***!
-  \************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+goog.array.insert = function (a, b) {
+  goog.array.contains(a, b) || a.push(b);
+};
 
-"use strict";
+goog.array.insertAt = function (a, b, c) {
+  goog.array.splice(a, c, 0, b);
+};
 
+goog.array.insertArrayAt = function (a, b, c) {
+  goog.partial(goog.array.splice, a, c, 0).apply(null, b);
+};
 
-var hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';
+goog.array.insertBefore = function (a, b, c) {
+  var d;
+  2 == arguments.length || 0 > (d = goog.array.indexOf(a, c)) ? a.push(b) : goog.array.insertAt(a, b, d);
+};
 
-var isPrimitive = __webpack_require__(/*! ./helpers/isPrimitive */ "./node_modules/es-to-primitive/helpers/isPrimitive.js");
+goog.array.remove = function (a, b) {
+  b = goog.array.indexOf(a, b);
+  var c;
+  (c = 0 <= b) && goog.array.removeAt(a, b);
+  return c;
+};
 
-var isCallable = __webpack_require__(/*! is-callable */ "./node_modules/is-callable/index.js");
+goog.array.removeLast = function (a, b) {
+  b = goog.array.lastIndexOf(a, b);
+  return 0 <= b ? (goog.array.removeAt(a, b), !0) : !1;
+};
 
-var isDate = __webpack_require__(/*! is-date-object */ "./node_modules/is-date-object/index.js");
+goog.array.removeAt = function (a, b) {
+  goog.asserts.assert(null != a.length);
+  return 1 == Array.prototype.splice.call(a, b, 1).length;
+};
 
-var isSymbol = __webpack_require__(/*! is-symbol */ "./node_modules/is-symbol/index.js");
+goog.array.removeIf = function (a, b, c) {
+  b = goog.array.findIndex(a, b, c);
+  return 0 <= b ? (goog.array.removeAt(a, b), !0) : !1;
+};
 
-var ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {
-  if (typeof O === 'undefined' || O === null) {
-    throw new TypeError('Cannot call method on ' + O);
-  }
+goog.array.removeAllIf = function (a, b, c) {
+  var d = 0;
+  goog.array.forEachRight(a, function (e, f) {
+    b.call(c, e, f, a) && goog.array.removeAt(a, f) && d++;
+  });
+  return d;
+};
 
-  if (typeof hint !== 'string' || hint !== 'number' && hint !== 'string') {
-    throw new TypeError('hint must be "string" or "number"');
-  }
+goog.array.concat = function (a) {
+  return Array.prototype.concat.apply([], arguments);
+};
 
-  var methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
-  var method, result, i;
+goog.array.join = function (a) {
+  return Array.prototype.concat.apply([], arguments);
+};
 
-  for (i = 0; i < methodNames.length; ++i) {
-    method = O[methodNames[i]];
+goog.array.toArray = function (a) {
+  var b = a.length;
 
-    if (isCallable(method)) {
-      result = method.call(O);
+  if (0 < b) {
+    for (var c = Array(b), d = 0; d < b; d++) c[d] = a[d];
 
-      if (isPrimitive(result)) {
-        return result;
-      }
-    }
+    return c;
   }
 
-  throw new TypeError('No default value');
+  return [];
 };
 
-var GetMethod = function GetMethod(O, P) {
-  var func = O[P];
+goog.array.clone = goog.array.toArray;
 
-  if (func !== null && typeof func !== 'undefined') {
-    if (!isCallable(func)) {
-      throw new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');
-    }
+goog.array.extend = function (a, b) {
+  for (var c = 1; c < arguments.length; c++) {
+    var d = arguments[c];
 
-    return func;
-  }
+    if (goog.isArrayLike(d)) {
+      var e = a.length || 0,
+          f = d.length || 0;
+      a.length = e + f;
 
-  return void 0;
-}; // http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive
+      for (var g = 0; g < f; g++) a[e + g] = d[g];
+    } else a.push(d);
+  }
+};
 
+goog.array.splice = function (a, b, c, d) {
+  goog.asserts.assert(null != a.length);
+  return Array.prototype.splice.apply(a, goog.array.slice(arguments, 1));
+};
 
-module.exports = function ToPrimitive(input) {
-  if (isPrimitive(input)) {
-    return input;
-  }
+goog.array.slice = function (a, b, c) {
+  goog.asserts.assert(null != a.length);
+  return 2 >= arguments.length ? Array.prototype.slice.call(a, b) : Array.prototype.slice.call(a, b, c);
+};
 
-  var hint = 'default';
+goog.array.removeDuplicates = function (a, b, c) {
+  b = b || a;
 
-  if (arguments.length > 1) {
-    if (arguments[1] === String) {
-      hint = 'string';
-    } else if (arguments[1] === Number) {
-      hint = 'number';
-    }
-  }
+  var d = function (a) {
+    return goog.isObject(a) ? "o" + goog.getUid(a) : (typeof a).charAt(0) + a;
+  };
 
-  var exoticToPrim;
+  c = c || d;
+  d = {};
 
-  if (hasSymbols) {
-    if (Symbol.toPrimitive) {
-      exoticToPrim = GetMethod(input, Symbol.toPrimitive);
-    } else if (isSymbol(input)) {
-      exoticToPrim = Symbol.prototype.valueOf;
-    }
+  for (var e = 0, f = 0; f < a.length;) {
+    var g = a[f++],
+        h = c(g);
+    Object.prototype.hasOwnProperty.call(d, h) || (d[h] = !0, b[e++] = g);
   }
 
-  if (typeof exoticToPrim !== 'undefined') {
-    var result = exoticToPrim.call(input, hint);
+  b.length = e;
+};
 
-    if (isPrimitive(result)) {
-      return result;
-    }
+goog.array.binarySearch = function (a, b, c) {
+  return goog.array.binarySearch_(a, c || goog.array.defaultCompare, !1, b);
+};
 
-    throw new TypeError('unable to convert exotic object to primitive');
-  }
+goog.array.binarySelect = function (a, b, c) {
+  return goog.array.binarySearch_(a, b, !0, void 0, c);
+};
 
-  if (hint === 'default' && (isDate(input) || isSymbol(input))) {
-    hint = 'string';
+goog.array.binarySearch_ = function (a, b, c, d, e) {
+  for (var f = 0, g = a.length, h; f < g;) {
+    var k = f + g >> 1;
+    var l = c ? b.call(e, a[k], k, a) : b(d, a[k]);
+    0 < l ? f = k + 1 : (g = k, h = !l);
   }
 
-  return ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);
+  return h ? f : ~f;
 };
 
-/***/ }),
-
-/***/ "./node_modules/es-to-primitive/es5.js":
-/*!*********************************************!*\
-  !*** ./node_modules/es-to-primitive/es5.js ***!
-  \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+goog.array.sort = function (a, b) {
+  a.sort(b || goog.array.defaultCompare);
+};
 
-"use strict";
+goog.array.stableSort = function (a, b) {
+  for (var c = Array(a.length), d = 0; d < a.length; d++) c[d] = {
+    index: d,
+    value: a[d]
+  };
 
+  var e = b || goog.array.defaultCompare;
+  goog.array.sort(c, function (a, b) {
+    return e(a.value, b.value) || a.index - b.index;
+  });
 
-var toStr = Object.prototype.toString;
+  for (d = 0; d < a.length; d++) a[d] = c[d].value;
+};
 
-var isPrimitive = __webpack_require__(/*! ./helpers/isPrimitive */ "./node_modules/es-to-primitive/helpers/isPrimitive.js");
+goog.array.sortByKey = function (a, b, c) {
+  var d = c || goog.array.defaultCompare;
+  goog.array.sort(a, function (a, c) {
+    return d(b(a), b(c));
+  });
+};
 
-var isCallable = __webpack_require__(/*! is-callable */ "./node_modules/is-callable/index.js"); // http://ecma-international.org/ecma-262/5.1/#sec-8.12.8
+goog.array.sortObjectsByKey = function (a, b, c) {
+  goog.array.sortByKey(a, function (a) {
+    return a[b];
+  }, c);
+};
 
+goog.array.isSorted = function (a, b, c) {
+  b = b || goog.array.defaultCompare;
 
-var ES5internalSlots = {
-  '[[DefaultValue]]': function (O) {
-    var actualHint;
+  for (var d = 1; d < a.length; d++) {
+    var e = b(a[d - 1], a[d]);
+    if (0 < e || 0 == e && c) return !1;
+  }
 
-    if (arguments.length > 1) {
-      actualHint = arguments[1];
-    } else {
-      actualHint = toStr.call(O) === '[object Date]' ? String : Number;
-    }
+  return !0;
+};
 
-    if (actualHint === String || actualHint === Number) {
-      var methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];
-      var value, i;
+goog.array.equals = function (a, b, c) {
+  if (!goog.isArrayLike(a) || !goog.isArrayLike(b) || a.length != b.length) return !1;
+  var d = a.length;
+  c = c || goog.array.defaultCompareEquality;
 
-      for (i = 0; i < methods.length; ++i) {
-        if (isCallable(O[methods[i]])) {
-          value = O[methods[i]]();
+  for (var e = 0; e < d; e++) if (!c(a[e], b[e])) return !1;
 
-          if (isPrimitive(value)) {
-            return value;
-          }
-        }
-      }
+  return !0;
+};
 
-      throw new TypeError('No default value');
-    }
+goog.array.compare3 = function (a, b, c) {
+  c = c || goog.array.defaultCompare;
 
-    throw new TypeError('invalid [[DefaultValue]] hint supplied');
+  for (var d = Math.min(a.length, b.length), e = 0; e < d; e++) {
+    var f = c(a[e], b[e]);
+    if (0 != f) return f;
   }
-}; // http://ecma-international.org/ecma-262/5.1/#sec-9.1
 
-module.exports = function ToPrimitive(input) {
-  if (isPrimitive(input)) {
-    return input;
-  }
+  return goog.array.defaultCompare(a.length, b.length);
+};
 
-  if (arguments.length > 1) {
-    return ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);
-  }
+goog.array.defaultCompare = function (a, b) {
+  return a > b ? 1 : a < b ? -1 : 0;
+};
 
-  return ES5internalSlots['[[DefaultValue]]'](input);
+goog.array.inverseDefaultCompare = function (a, b) {
+  return -goog.array.defaultCompare(a, b);
 };
 
-/***/ }),
+goog.array.defaultCompareEquality = function (a, b) {
+  return a === b;
+};
 
-/***/ "./node_modules/es-to-primitive/helpers/isPrimitive.js":
-/*!*************************************************************!*\
-  !*** ./node_modules/es-to-primitive/helpers/isPrimitive.js ***!
-  \*************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+goog.array.binaryInsert = function (a, b, c) {
+  c = goog.array.binarySearch(a, b, c);
+  return 0 > c ? (goog.array.insertAt(a, b, -(c + 1)), !0) : !1;
+};
 
-"use strict";
+goog.array.binaryRemove = function (a, b, c) {
+  b = goog.array.binarySearch(a, b, c);
+  return 0 <= b ? goog.array.removeAt(a, b) : !1;
+};
 
+goog.array.bucket = function (a, b, c) {
+  for (var d = {}, e = 0; e < a.length; e++) {
+    var f = a[e],
+        g = b.call(c, f, e, a);
+    goog.isDef(g) && (d[g] || (d[g] = [])).push(f);
+  }
 
-module.exports = function isPrimitive(value) {
-  return value === null || typeof value !== 'function' && typeof value !== 'object';
+  return d;
 };
 
-/***/ }),
-
-/***/ "./node_modules/foreach/index.js":
-/*!***************************************!*\
-  !*** ./node_modules/foreach/index.js ***!
-  \***************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+goog.array.toObject = function (a, b, c) {
+  var d = {};
+  goog.array.forEach(a, function (e, f) {
+    d[b.call(c, e, f, a)] = e;
+  });
+  return d;
+};
 
-var hasOwn = Object.prototype.hasOwnProperty;
-var toString = Object.prototype.toString;
+goog.array.range = function (a, b, c) {
+  var d = [],
+      e = 0,
+      f = a;
+  c = c || 1;
+  void 0 !== b && (e = a, f = b);
+  if (0 > c * (f - e)) return [];
+  if (0 < c) for (a = e; a < f; a += c) d.push(a);else for (a = e; a > f; a += c) d.push(a);
+  return d;
+};
 
-module.exports = function forEach(obj, fn, ctx) {
-  if (toString.call(fn) !== '[object Function]') {
-    throw new TypeError('iterator must be a function');
-  }
+goog.array.repeat = function (a, b) {
+  for (var c = [], d = 0; d < b; d++) c[d] = a;
 
-  var l = obj.length;
+  return c;
+};
 
-  if (l === +l) {
-    for (var i = 0; i < l; i++) {
-      fn.call(ctx, obj[i], i, obj);
-    }
-  } else {
-    for (var k in obj) {
-      if (hasOwn.call(obj, k)) {
-        fn.call(ctx, obj[k], k, obj);
-      }
-    }
+goog.array.flatten = function (a) {
+  for (var b = [], c = 0; c < arguments.length; c++) {
+    var d = arguments[c];
+    if (goog.isArray(d)) for (var e = 0; e < d.length; e += 8192) {
+      var f = goog.array.slice(d, e, e + 8192);
+      f = goog.array.flatten.apply(null, f);
+
+      for (var g = 0; g < f.length; g++) b.push(f[g]);
+    } else b.push(d);
   }
-};
 
-/***/ }),
+  return b;
+};
 
-/***/ "./node_modules/function-bind/implementation.js":
-/*!******************************************************!*\
-  !*** ./node_modules/function-bind/implementation.js ***!
-  \******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+goog.array.rotate = function (a, b) {
+  goog.asserts.assert(null != a.length);
+  a.length && (b %= a.length, 0 < b ? Array.prototype.unshift.apply(a, a.splice(-b, b)) : 0 > b && Array.prototype.push.apply(a, a.splice(0, -b)));
+  return a;
+};
 
-"use strict";
+goog.array.moveItem = function (a, b, c) {
+  goog.asserts.assert(0 <= b && b < a.length);
+  goog.asserts.assert(0 <= c && c < a.length);
+  b = Array.prototype.splice.call(a, b, 1);
+  Array.prototype.splice.call(a, c, 0, b[0]);
+};
 
-/* eslint no-invalid-this: 1 */
+goog.array.zip = function (a) {
+  if (!arguments.length) return [];
 
-var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
-var slice = Array.prototype.slice;
-var toStr = Object.prototype.toString;
-var funcType = '[object Function]';
+  for (var b = [], c = arguments[0].length, d = 1; d < arguments.length; d++) arguments[d].length < c && (c = arguments[d].length);
 
-module.exports = function bind(that) {
-  var target = this;
+  for (d = 0; d < c; d++) {
+    for (var e = [], f = 0; f < arguments.length; f++) e.push(arguments[f][d]);
 
-  if (typeof target !== 'function' || toStr.call(target) !== funcType) {
-    throw new TypeError(ERROR_MESSAGE + target);
+    b.push(e);
   }
 
-  var args = slice.call(arguments, 1);
-  var bound;
+  return b;
+};
 
-  var binder = function () {
-    if (this instanceof bound) {
-      var result = target.apply(this, args.concat(slice.call(arguments)));
+goog.array.shuffle = function (a, b) {
+  b = b || Math.random;
 
-      if (Object(result) === result) {
-        return result;
-      }
+  for (var c = a.length - 1; 0 < c; c--) {
+    var d = Math.floor(b() * (c + 1)),
+        e = a[c];
+    a[c] = a[d];
+    a[d] = e;
+  }
+};
 
-      return this;
-    } else {
-      return target.apply(that, args.concat(slice.call(arguments)));
-    }
-  };
+goog.array.copyByIndex = function (a, b) {
+  var c = [];
+  goog.array.forEach(b, function (b) {
+    c.push(a[b]);
+  });
+  return c;
+};
 
-  var boundLength = Math.max(0, target.length - args.length);
-  var boundArgs = [];
+goog.array.concatMap = function (a, b, c) {
+  return goog.array.concat.apply([], goog.array.map(a, b, c));
+};
 
-  for (var i = 0; i < boundLength; i++) {
-    boundArgs.push('$' + i);
+goog.crypt = {};
+
+goog.crypt.stringToByteArray = function (a) {
+  for (var b = [], c = 0, d = 0; d < a.length; d++) {
+    var e = a.charCodeAt(d);
+    255 < e && (b[c++] = e & 255, e >>= 8);
+    b[c++] = e;
   }
 
-  bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);
+  return b;
+};
 
-  if (target.prototype) {
-    var Empty = function Empty() {};
+goog.crypt.byteArrayToString = function (a) {
+  if (8192 >= a.length) return String.fromCharCode.apply(null, a);
 
-    Empty.prototype = target.prototype;
-    bound.prototype = new Empty();
-    Empty.prototype = null;
+  for (var b = "", c = 0; c < a.length; c += 8192) {
+    var d = goog.array.slice(a, c, c + 8192);
+    b += String.fromCharCode.apply(null, d);
   }
 
-  return bound;
+  return b;
 };
 
-/***/ }),
-
-/***/ "./node_modules/function-bind/index.js":
-/*!*********************************************!*\
-  !*** ./node_modules/function-bind/index.js ***!
-  \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+goog.crypt.byteArrayToHex = function (a, b) {
+  return goog.array.map(a, function (a) {
+    a = a.toString(16);
+    return 1 < a.length ? a : "0" + a;
+  }).join(b || "");
+};
 
-"use strict";
+goog.crypt.hexToByteArray = function (a) {
+  goog.asserts.assert(0 == a.length % 2, "Key string length must be multiple of 2");
 
+  for (var b = [], c = 0; c < a.length; c += 2) b.push(parseInt(a.substring(c, c + 2), 16));
 
-var implementation = __webpack_require__(/*! ./implementation */ "./node_modules/function-bind/implementation.js");
+  return b;
+};
 
-module.exports = Function.prototype.bind || implementation;
+goog.crypt.stringToUtf8ByteArray = function (a) {
+  for (var b = [], c = 0, d = 0; d < a.length; d++) {
+    var e = a.charCodeAt(d);
+    128 > e ? b[c++] = e : (2048 > e ? b[c++] = e >> 6 | 192 : (55296 == (e & 64512) && d + 1 < a.length && 56320 == (a.charCodeAt(d + 1) & 64512) ? (e = 65536 + ((e & 1023) << 10) + (a.charCodeAt(++d) & 1023), b[c++] = e >> 18 | 240, b[c++] = e >> 12 & 63 | 128) : b[c++] = e >> 12 | 224, b[c++] = e >> 6 & 63 | 128), b[c++] = e & 63 | 128);
+  }
 
-/***/ }),
+  return b;
+};
 
-/***/ "./node_modules/get-intrinsic/index.js":
-/*!*********************************************!*\
-  !*** ./node_modules/get-intrinsic/index.js ***!
-  \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+goog.crypt.utf8ByteArrayToString = function (a) {
+  for (var b = [], c = 0, d = 0; c < a.length;) {
+    var e = a[c++];
+    if (128 > e) b[d++] = String.fromCharCode(e);else if (191 < e && 224 > e) {
+      var f = a[c++];
+      b[d++] = String.fromCharCode((e & 31) << 6 | f & 63);
+    } else if (239 < e && 365 > e) {
+      f = a[c++];
+      var g = a[c++],
+          h = a[c++];
+      e = ((e & 7) << 18 | (f & 63) << 12 | (g & 63) << 6 | h & 63) - 65536;
+      b[d++] = String.fromCharCode(55296 + (e >> 10));
+      b[d++] = String.fromCharCode(56320 + (e & 1023));
+    } else f = a[c++], g = a[c++], b[d++] = String.fromCharCode((e & 15) << 12 | (f & 63) << 6 | g & 63);
+  }
 
-"use strict";
+  return b.join("");
+};
 
+goog.crypt.xorByteArray = function (a, b) {
+  goog.asserts.assert(a.length == b.length, "XOR array lengths must match");
 
-var undefined;
-var $SyntaxError = SyntaxError;
-var $Function = Function;
-var $TypeError = TypeError; // eslint-disable-next-line consistent-return
+  for (var c = [], d = 0; d < a.length; d++) c.push(a[d] ^ b[d]);
 
-var getEvalledConstructor = function (expressionSyntax) {
-  try {
-    return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')();
-  } catch (e) {}
+  return c;
 };
 
-var $gOPD = Object.getOwnPropertyDescriptor;
+goog.dom.asserts = {};
 
-if ($gOPD) {
-  try {
-    $gOPD({}, '');
-  } catch (e) {
-    $gOPD = null; // this is IE 8, which has a broken gOPD
+goog.dom.asserts.assertIsLocation = function (a) {
+  if (goog.asserts.ENABLE_ASSERTS) {
+    var b = goog.dom.asserts.getWindow_(a);
+    b && (!a || !(a instanceof b.Location) && a instanceof b.Element) && goog.asserts.fail("Argument is not a Location (or a non-Element mock); got: %s", goog.dom.asserts.debugStringForType_(a));
   }
-}
 
-var throwTypeError = function () {
-  throw new $TypeError();
+  return a;
 };
 
-var ThrowTypeError = $gOPD ? function () {
-  try {
-    // eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties
-    arguments.callee; // IE 8 does not throw here
-
-    return throwTypeError;
-  } catch (calleeThrows) {
-    try {
-      // IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')
-      return $gOPD(arguments, 'callee').get;
-    } catch (gOPDthrows) {
-      return throwTypeError;
-    }
+goog.dom.asserts.assertIsElementType_ = function (a, b) {
+  if (goog.asserts.ENABLE_ASSERTS) {
+    var c = goog.dom.asserts.getWindow_(a);
+    c && "undefined" != typeof c[b] && (a && (a instanceof c[b] || !(a instanceof c.Location || a instanceof c.Element)) || goog.asserts.fail("Argument is not a %s (or a non-Element, non-Location mock); got: %s", b, goog.dom.asserts.debugStringForType_(a)));
   }
-}() : throwTypeError;
 
-var hasSymbols = __webpack_require__(/*! has-symbols */ "./node_modules/has-symbols/index.js")();
+  return a;
+};
 
-var getProto = Object.getPrototypeOf || function (x) {
-  return x.__proto__;
-}; // eslint-disable-line no-proto
+goog.dom.asserts.assertIsHTMLAnchorElement = function (a) {
+  return goog.dom.asserts.assertIsElementType_(a, "HTMLAnchorElement");
+};
 
+goog.dom.asserts.assertIsHTMLButtonElement = function (a) {
+  return goog.dom.asserts.assertIsElementType_(a, "HTMLButtonElement");
+};
 
-var needsEval = {};
-var TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);
-var INTRINSICS = {
-  '%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,
-  '%Array%': Array,
-  '%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,
-  '%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,
-  '%AsyncFromSyncIteratorPrototype%': undefined,
-  '%AsyncFunction%': needsEval,
-  '%AsyncGenerator%': needsEval,
-  '%AsyncGeneratorFunction%': needsEval,
-  '%AsyncIteratorPrototype%': needsEval,
-  '%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,
-  '%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,
-  '%Boolean%': Boolean,
-  '%DataView%': typeof DataView === 'undefined' ? undefined : DataView,
-  '%Date%': Date,
-  '%decodeURI%': decodeURI,
-  '%decodeURIComponent%': decodeURIComponent,
-  '%encodeURI%': encodeURI,
-  '%encodeURIComponent%': encodeURIComponent,
-  '%Error%': Error,
-  '%eval%': eval,
-  // eslint-disable-line no-eval
-  '%EvalError%': EvalError,
-  '%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,
-  '%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,
-  '%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,
-  '%Function%': $Function,
-  '%GeneratorFunction%': needsEval,
-  '%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,
-  '%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,
-  '%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,
-  '%isFinite%': isFinite,
-  '%isNaN%': isNaN,
-  '%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,
-  '%JSON%': typeof JSON === 'object' ? JSON : undefined,
-  '%Map%': typeof Map === 'undefined' ? undefined : Map,
-  '%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),
-  '%Math%': Math,
-  '%Number%': Number,
-  '%Object%': Object,
-  '%parseFloat%': parseFloat,
-  '%parseInt%': parseInt,
-  '%Promise%': typeof Promise === 'undefined' ? undefined : Promise,
-  '%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,
-  '%RangeError%': RangeError,
-  '%ReferenceError%': ReferenceError,
-  '%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,
-  '%RegExp%': RegExp,
-  '%Set%': typeof Set === 'undefined' ? undefined : Set,
-  '%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),
-  '%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,
-  '%String%': String,
-  '%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,
-  '%Symbol%': hasSymbols ? Symbol : undefined,
-  '%SyntaxError%': $SyntaxError,
-  '%ThrowTypeError%': ThrowTypeError,
-  '%TypedArray%': TypedArray,
-  '%TypeError%': $TypeError,
-  '%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,
-  '%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,
-  '%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,
-  '%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,
-  '%URIError%': URIError,
-  '%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,
-  '%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,
-  '%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet
+goog.dom.asserts.assertIsHTMLLinkElement = function (a) {
+  return goog.dom.asserts.assertIsElementType_(a, "HTMLLinkElement");
 };
 
-var doEval = function doEval(name) {
-  var value;
+goog.dom.asserts.assertIsHTMLImageElement = function (a) {
+  return goog.dom.asserts.assertIsElementType_(a, "HTMLImageElement");
+};
 
-  if (name === '%AsyncFunction%') {
-    value = getEvalledConstructor('async function () {}');
-  } else if (name === '%GeneratorFunction%') {
-    value = getEvalledConstructor('function* () {}');
-  } else if (name === '%AsyncGeneratorFunction%') {
-    value = getEvalledConstructor('async function* () {}');
-  } else if (name === '%AsyncGenerator%') {
-    var fn = doEval('%AsyncGeneratorFunction%');
+goog.dom.asserts.assertIsHTMLAudioElement = function (a) {
+  return goog.dom.asserts.assertIsElementType_(a, "HTMLAudioElement");
+};
 
-    if (fn) {
-      value = fn.prototype;
-    }
-  } else if (name === '%AsyncIteratorPrototype%') {
-    var gen = doEval('%AsyncGenerator%');
+goog.dom.asserts.assertIsHTMLVideoElement = function (a) {
+  return goog.dom.asserts.assertIsElementType_(a, "HTMLVideoElement");
+};
 
-    if (gen) {
-      value = getProto(gen.prototype);
-    }
-  }
+goog.dom.asserts.assertIsHTMLInputElement = function (a) {
+  return goog.dom.asserts.assertIsElementType_(a, "HTMLInputElement");
+};
 
-  INTRINSICS[name] = value;
-  return value;
+goog.dom.asserts.assertIsHTMLTextAreaElement = function (a) {
+  return goog.dom.asserts.assertIsElementType_(a, "HTMLTextAreaElement");
 };
 
-var LEGACY_ALIASES = {
-  '%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],
-  '%ArrayPrototype%': ['Array', 'prototype'],
-  '%ArrayProto_entries%': ['Array', 'prototype', 'entries'],
-  '%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],
-  '%ArrayProto_keys%': ['Array', 'prototype', 'keys'],
-  '%ArrayProto_values%': ['Array', 'prototype', 'values'],
-  '%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],
-  '%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],
-  '%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],
-  '%BooleanPrototype%': ['Boolean', 'prototype'],
-  '%DataViewPrototype%': ['DataView', 'prototype'],
-  '%DatePrototype%': ['Date', 'prototype'],
-  '%ErrorPrototype%': ['Error', 'prototype'],
-  '%EvalErrorPrototype%': ['EvalError', 'prototype'],
-  '%Float32ArrayPrototype%': ['Float32Array', 'prototype'],
-  '%Float64ArrayPrototype%': ['Float64Array', 'prototype'],
-  '%FunctionPrototype%': ['Function', 'prototype'],
-  '%Generator%': ['GeneratorFunction', 'prototype'],
-  '%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],
-  '%Int8ArrayPrototype%': ['Int8Array', 'prototype'],
-  '%Int16ArrayPrototype%': ['Int16Array', 'prototype'],
-  '%Int32ArrayPrototype%': ['Int32Array', 'prototype'],
-  '%JSONParse%': ['JSON', 'parse'],
-  '%JSONStringify%': ['JSON', 'stringify'],
-  '%MapPrototype%': ['Map', 'prototype'],
-  '%NumberPrototype%': ['Number', 'prototype'],
-  '%ObjectPrototype%': ['Object', 'prototype'],
-  '%ObjProto_toString%': ['Object', 'prototype', 'toString'],
-  '%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],
-  '%PromisePrototype%': ['Promise', 'prototype'],
-  '%PromiseProto_then%': ['Promise', 'prototype', 'then'],
-  '%Promise_all%': ['Promise', 'all'],
-  '%Promise_reject%': ['Promise', 'reject'],
-  '%Promise_resolve%': ['Promise', 'resolve'],
-  '%RangeErrorPrototype%': ['RangeError', 'prototype'],
-  '%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],
-  '%RegExpPrototype%': ['RegExp', 'prototype'],
-  '%SetPrototype%': ['Set', 'prototype'],
-  '%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],
-  '%StringPrototype%': ['String', 'prototype'],
-  '%SymbolPrototype%': ['Symbol', 'prototype'],
-  '%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],
-  '%TypedArrayPrototype%': ['TypedArray', 'prototype'],
-  '%TypeErrorPrototype%': ['TypeError', 'prototype'],
-  '%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],
-  '%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],
-  '%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],
-  '%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],
-  '%URIErrorPrototype%': ['URIError', 'prototype'],
-  '%WeakMapPrototype%': ['WeakMap', 'prototype'],
-  '%WeakSetPrototype%': ['WeakSet', 'prototype']
+goog.dom.asserts.assertIsHTMLCanvasElement = function (a) {
+  return goog.dom.asserts.assertIsElementType_(a, "HTMLCanvasElement");
 };
 
-var bind = __webpack_require__(/*! function-bind */ "./node_modules/function-bind/index.js");
+goog.dom.asserts.assertIsHTMLEmbedElement = function (a) {
+  return goog.dom.asserts.assertIsElementType_(a, "HTMLEmbedElement");
+};
 
-var hasOwn = __webpack_require__(/*! has */ "./node_modules/has/src/index.js");
+goog.dom.asserts.assertIsHTMLFormElement = function (a) {
+  return goog.dom.asserts.assertIsElementType_(a, "HTMLFormElement");
+};
 
-var $concat = bind.call(Function.call, Array.prototype.concat);
-var $spliceApply = bind.call(Function.apply, Array.prototype.splice);
-var $replace = bind.call(Function.call, String.prototype.replace);
-var $strSlice = bind.call(Function.call, String.prototype.slice);
-/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */
+goog.dom.asserts.assertIsHTMLFrameElement = function (a) {
+  return goog.dom.asserts.assertIsElementType_(a, "HTMLFrameElement");
+};
 
-var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
-var reEscapeChar = /\\(\\)?/g;
-/** Used to match backslashes in property paths. */
+goog.dom.asserts.assertIsHTMLIFrameElement = function (a) {
+  return goog.dom.asserts.assertIsElementType_(a, "HTMLIFrameElement");
+};
 
-var stringToPath = function stringToPath(string) {
-  var first = $strSlice(string, 0, 1);
-  var last = $strSlice(string, -1);
+goog.dom.asserts.assertIsHTMLObjectElement = function (a) {
+  return goog.dom.asserts.assertIsElementType_(a, "HTMLObjectElement");
+};
 
-  if (first === '%' && last !== '%') {
-    throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`');
-  } else if (last === '%' && first !== '%') {
-    throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`');
-  }
+goog.dom.asserts.assertIsHTMLScriptElement = function (a) {
+  return goog.dom.asserts.assertIsElementType_(a, "HTMLScriptElement");
+};
 
-  var result = [];
-  $replace(string, rePropName, function (match, number, quote, subString) {
-    result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;
-  });
-  return result;
+goog.dom.asserts.debugStringForType_ = function (a) {
+  if (goog.isObject(a)) try {
+    return a.constructor.displayName || a.constructor.name || Object.prototype.toString.call(a);
+  } catch (b) {
+    return "<object could not be stringified>";
+  } else return void 0 === a ? "undefined" : null === a ? "null" : typeof a;
 };
-/* end adaptation */
 
+goog.dom.asserts.getWindow_ = function (a) {
+  try {
+    var b = a && a.ownerDocument,
+        c = b && (b.defaultView || b.parentWindow);
+    c = c || goog.global;
+    if (c.Element && c.Location) return c;
+  } catch (d) {}
 
-var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {
-  var intrinsicName = name;
-  var alias;
+  return null;
+};
 
-  if (hasOwn(LEGACY_ALIASES, intrinsicName)) {
-    alias = LEGACY_ALIASES[intrinsicName];
-    intrinsicName = '%' + alias[0] + '%';
-  }
+goog.functions = {};
 
-  if (hasOwn(INTRINSICS, intrinsicName)) {
-    var value = INTRINSICS[intrinsicName];
+goog.functions.constant = function (a) {
+  return function () {
+    return a;
+  };
+};
 
-    if (value === needsEval) {
-      value = doEval(intrinsicName);
-    }
+goog.functions.FALSE = function () {
+  return !1;
+};
 
-    if (typeof value === 'undefined' && !allowMissing) {
-      throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');
-    }
+goog.functions.TRUE = function () {
+  return !0;
+};
 
-    return {
-      alias: alias,
-      name: intrinsicName,
-      value: value
-    };
-  }
+goog.functions.NULL = function () {
+  return null;
+};
 
-  throw new $SyntaxError('intrinsic ' + name + ' does not exist!');
+goog.functions.identity = function (a, b) {
+  return a;
 };
 
-module.exports = function GetIntrinsic(name, allowMissing) {
-  if (typeof name !== 'string' || name.length === 0) {
-    throw new $TypeError('intrinsic name must be a non-empty string');
-  }
+goog.functions.error = function (a) {
+  return function () {
+    throw Error(a);
+  };
+};
 
-  if (arguments.length > 1 && typeof allowMissing !== 'boolean') {
-    throw new $TypeError('"allowMissing" argument must be a boolean');
-  }
-
-  var parts = stringToPath(name);
-  var intrinsicBaseName = parts.length > 0 ? parts[0] : '';
-  var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);
-  var intrinsicRealName = intrinsic.name;
-  var value = intrinsic.value;
-  var skipFurtherCaching = false;
-  var alias = intrinsic.alias;
-
-  if (alias) {
-    intrinsicBaseName = alias[0];
-    $spliceApply(parts, $concat([0, 1], alias));
-  }
-
-  for (var i = 1, isOwn = true; i < parts.length; i += 1) {
-    var part = parts[i];
-    var first = $strSlice(part, 0, 1);
-    var last = $strSlice(part, -1);
-
-    if ((first === '"' || first === "'" || first === '`' || last === '"' || last === "'" || last === '`') && first !== last) {
-      throw new $SyntaxError('property names with quotes must have matching quotes');
-    }
+goog.functions.fail = function (a) {
+  return function () {
+    throw a;
+  };
+};
 
-    if (part === 'constructor' || !isOwn) {
-      skipFurtherCaching = true;
-    }
+goog.functions.lock = function (a, b) {
+  b = b || 0;
+  return function () {
+    return a.apply(this, Array.prototype.slice.call(arguments, 0, b));
+  };
+};
 
-    intrinsicBaseName += '.' + part;
-    intrinsicRealName = '%' + intrinsicBaseName + '%';
+goog.functions.nth = function (a) {
+  return function () {
+    return arguments[a];
+  };
+};
 
-    if (hasOwn(INTRINSICS, intrinsicRealName)) {
-      value = INTRINSICS[intrinsicRealName];
-    } else if (value != null) {
-      if (!(part in value)) {
-        if (!allowMissing) {
-          throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');
-        }
+goog.functions.partialRight = function (a, b) {
+  var c = Array.prototype.slice.call(arguments, 1);
+  return function () {
+    var b = Array.prototype.slice.call(arguments);
+    b.push.apply(b, c);
+    return a.apply(this, b);
+  };
+};
 
-        return void undefined;
-      }
+goog.functions.withReturnValue = function (a, b) {
+  return goog.functions.sequence(a, goog.functions.constant(b));
+};
 
-      if ($gOPD && i + 1 >= parts.length) {
-        var desc = $gOPD(value, part);
-        isOwn = !!desc; // By convention, when a data property is converted to an accessor
-        // property to emulate a data property that does not suffer from
-        // the override mistake, that accessor's getter is marked with
-        // an `originalValue` property. Here, when we detect this, we
-        // uphold the illusion by pretending to see that original data
-        // property, i.e., returning the value rather than the getter
-        // itself.
+goog.functions.equalTo = function (a, b) {
+  return function (c) {
+    return b ? a == c : a === c;
+  };
+};
 
-        if (isOwn && 'get' in desc && !('originalValue' in desc.get)) {
-          value = desc.get;
-        } else {
-          value = value[part];
-        }
-      } else {
-        isOwn = hasOwn(value, part);
-        value = value[part];
-      }
+goog.functions.compose = function (a, b) {
+  var c = arguments,
+      d = c.length;
+  return function () {
+    var a;
+    d && (a = c[d - 1].apply(this, arguments));
 
-      if (isOwn && !skipFurtherCaching) {
-        INTRINSICS[intrinsicRealName] = value;
-      }
-    }
-  }
+    for (var b = d - 2; 0 <= b; b--) a = c[b].call(this, a);
 
-  return value;
+    return a;
+  };
 };
 
-/***/ }),
+goog.functions.sequence = function (a) {
+  var b = arguments,
+      c = b.length;
+  return function () {
+    for (var a, e = 0; e < c; e++) a = b[e].apply(this, arguments);
 
-/***/ "./node_modules/google-protobuf/google-protobuf.js":
-/*!*********************************************************!*\
-  !*** ./node_modules/google-protobuf/google-protobuf.js ***!
-  \*********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+    return a;
+  };
+};
 
-var $jscomp = $jscomp || {};
-$jscomp.scope = {};
+goog.functions.and = function (a) {
+  var b = arguments,
+      c = b.length;
+  return function () {
+    for (var a = 0; a < c; a++) if (!b[a].apply(this, arguments)) return !1;
 
-$jscomp.findInternal = function (a, b, c) {
-  a instanceof String && (a = String(a));
+    return !0;
+  };
+};
 
-  for (var d = a.length, e = 0; e < d; e++) {
-    var f = a[e];
-    if (b.call(c, f, e, a)) return {
-      i: e,
-      v: f
-    };
-  }
+goog.functions.or = function (a) {
+  var b = arguments,
+      c = b.length;
+  return function () {
+    for (var a = 0; a < c; a++) if (b[a].apply(this, arguments)) return !0;
 
-  return {
-    i: -1,
-    v: void 0
+    return !1;
   };
 };
 
-$jscomp.ASSUME_ES5 = !1;
-$jscomp.ASSUME_NO_NATIVE_MAP = !1;
-$jscomp.ASSUME_NO_NATIVE_SET = !1;
-$jscomp.SIMPLE_FROUND_POLYFILL = !1;
-$jscomp.defineProperty = $jscomp.ASSUME_ES5 || "function" == typeof Object.defineProperties ? Object.defineProperty : function (a, b, c) {
-  a != Array.prototype && a != Object.prototype && (a[b] = c.value);
+goog.functions.not = function (a) {
+  return function () {
+    return !a.apply(this, arguments);
+  };
 };
 
-$jscomp.getGlobal = function (a) {
-  return "undefined" != typeof window && window === a ? a : "undefined" != typeof global && null != global ? global : a;
+goog.functions.create = function (a, b) {
+  var c = function () {};
+
+  c.prototype = a.prototype;
+  c = new c();
+  a.apply(c, Array.prototype.slice.call(arguments, 1));
+  return c;
 };
 
-$jscomp.global = $jscomp.getGlobal(this);
+goog.functions.CACHE_RETURN_VALUE = !0;
 
-$jscomp.polyfill = function (a, b, c, d) {
-  if (b) {
-    c = $jscomp.global;
-    a = a.split(".");
+goog.functions.cacheReturnValue = function (a) {
+  var b = !1,
+      c;
+  return function () {
+    if (!goog.functions.CACHE_RETURN_VALUE) return a();
+    b || (c = a(), b = !0);
+    return c;
+  };
+};
 
-    for (d = 0; d < a.length - 1; d++) {
-      var e = a[d];
-      e in c || (c[e] = {});
-      c = c[e];
+goog.functions.once = function (a) {
+  var b = a;
+  return function () {
+    if (b) {
+      var a = b;
+      b = null;
+      a();
     }
-
-    a = a[a.length - 1];
-    d = c[a];
-    b = b(d);
-    b != d && null != b && $jscomp.defineProperty(c, a, {
-      configurable: !0,
-      writable: !0,
-      value: b
-    });
-  }
+  };
 };
 
-$jscomp.polyfill("Array.prototype.findIndex", function (a) {
-  return a ? a : function (a, c) {
-    return $jscomp.findInternal(this, a, c).i;
+goog.functions.debounce = function (a, b, c) {
+  var d = 0;
+  return function (e) {
+    goog.global.clearTimeout(d);
+    var f = arguments;
+    d = goog.global.setTimeout(function () {
+      a.apply(c, f);
+    }, b);
   };
-}, "es6", "es3");
-
-$jscomp.checkStringArgs = function (a, b, c) {
-  if (null == a) throw new TypeError("The 'this' value for String.prototype." + c + " must not be null or undefined");
-  if (b instanceof RegExp) throw new TypeError("First argument to String.prototype." + c + " must not be a regular expression");
-  return a + "";
 };
 
-$jscomp.polyfill("String.prototype.endsWith", function (a) {
-  return a ? a : function (a, c) {
-    var b = $jscomp.checkStringArgs(this, a, "endsWith");
-    a += "";
-    void 0 === c && (c = b.length);
-    c = Math.max(0, Math.min(c | 0, b.length));
-
-    for (var e = a.length; 0 < e && 0 < c;) if (b[--c] != a[--e]) return !1;
-
-    return 0 >= e;
-  };
-}, "es6", "es3");
-$jscomp.polyfill("Array.prototype.find", function (a) {
-  return a ? a : function (a, c) {
-    return $jscomp.findInternal(this, a, c).v;
+goog.functions.throttle = function (a, b, c) {
+  var d = 0,
+      e = !1,
+      f = [],
+      g = function () {
+    d = 0;
+    e && (e = !1, h());
+  },
+      h = function () {
+    d = goog.global.setTimeout(g, b);
+    a.apply(c, f);
   };
-}, "es6", "es3");
-$jscomp.polyfill("String.prototype.startsWith", function (a) {
-  return a ? a : function (a, c) {
-    var b = $jscomp.checkStringArgs(this, a, "startsWith");
-    a += "";
-    var e = b.length,
-        f = a.length;
-    c = Math.max(0, Math.min(c | 0, b.length));
-
-    for (var g = 0; g < f && c < e;) if (b[c++] != a[g++]) return !1;
 
-    return g >= f;
+  return function (a) {
+    f = arguments;
+    d ? e = !0 : h();
   };
-}, "es6", "es3");
-$jscomp.polyfill("String.prototype.repeat", function (a) {
-  return a ? a : function (a) {
-    var b = $jscomp.checkStringArgs(this, null, "repeat");
-    if (0 > a || 1342177279 < a) throw new RangeError("Invalid count value");
-    a |= 0;
-
-    for (var d = ""; a;) if (a & 1 && (d += b), a >>>= 1) b += b;
+};
 
-    return d;
+goog.functions.rateLimit = function (a, b, c) {
+  var d = 0,
+      e = function () {
+    d = 0;
   };
-}, "es6", "es3");
-var COMPILED = !0,
-    goog = goog || {};
-goog.global = this || self;
 
-goog.isDef = function (a) {
-  return void 0 !== a;
+  return function (f) {
+    d || (d = goog.global.setTimeout(e, b), a.apply(c, arguments));
+  };
 };
 
-goog.isString = function (a) {
-  return "string" == typeof a;
-};
+goog.dom.HtmlElement = function () {};
 
-goog.isBoolean = function (a) {
-  return "boolean" == typeof a;
+goog.dom.TagName = function (a) {
+  this.tagName_ = a;
 };
 
-goog.isNumber = function (a) {
-  return "number" == typeof a;
+goog.dom.TagName.prototype.toString = function () {
+  return this.tagName_;
 };
 
-goog.exportPath_ = function (a, b, c) {
-  a = a.split(".");
-  c = c || goog.global;
-  a[0] in c || "undefined" == typeof c.execScript || c.execScript("var " + a[0]);
+goog.dom.TagName.A = new goog.dom.TagName("A");
+goog.dom.TagName.ABBR = new goog.dom.TagName("ABBR");
+goog.dom.TagName.ACRONYM = new goog.dom.TagName("ACRONYM");
+goog.dom.TagName.ADDRESS = new goog.dom.TagName("ADDRESS");
+goog.dom.TagName.APPLET = new goog.dom.TagName("APPLET");
+goog.dom.TagName.AREA = new goog.dom.TagName("AREA");
+goog.dom.TagName.ARTICLE = new goog.dom.TagName("ARTICLE");
+goog.dom.TagName.ASIDE = new goog.dom.TagName("ASIDE");
+goog.dom.TagName.AUDIO = new goog.dom.TagName("AUDIO");
+goog.dom.TagName.B = new goog.dom.TagName("B");
+goog.dom.TagName.BASE = new goog.dom.TagName("BASE");
+goog.dom.TagName.BASEFONT = new goog.dom.TagName("BASEFONT");
+goog.dom.TagName.BDI = new goog.dom.TagName("BDI");
+goog.dom.TagName.BDO = new goog.dom.TagName("BDO");
+goog.dom.TagName.BIG = new goog.dom.TagName("BIG");
+goog.dom.TagName.BLOCKQUOTE = new goog.dom.TagName("BLOCKQUOTE");
+goog.dom.TagName.BODY = new goog.dom.TagName("BODY");
+goog.dom.TagName.BR = new goog.dom.TagName("BR");
+goog.dom.TagName.BUTTON = new goog.dom.TagName("BUTTON");
+goog.dom.TagName.CANVAS = new goog.dom.TagName("CANVAS");
+goog.dom.TagName.CAPTION = new goog.dom.TagName("CAPTION");
+goog.dom.TagName.CENTER = new goog.dom.TagName("CENTER");
+goog.dom.TagName.CITE = new goog.dom.TagName("CITE");
+goog.dom.TagName.CODE = new goog.dom.TagName("CODE");
+goog.dom.TagName.COL = new goog.dom.TagName("COL");
+goog.dom.TagName.COLGROUP = new goog.dom.TagName("COLGROUP");
+goog.dom.TagName.COMMAND = new goog.dom.TagName("COMMAND");
+goog.dom.TagName.DATA = new goog.dom.TagName("DATA");
+goog.dom.TagName.DATALIST = new goog.dom.TagName("DATALIST");
+goog.dom.TagName.DD = new goog.dom.TagName("DD");
+goog.dom.TagName.DEL = new goog.dom.TagName("DEL");
+goog.dom.TagName.DETAILS = new goog.dom.TagName("DETAILS");
+goog.dom.TagName.DFN = new goog.dom.TagName("DFN");
+goog.dom.TagName.DIALOG = new goog.dom.TagName("DIALOG");
+goog.dom.TagName.DIR = new goog.dom.TagName("DIR");
+goog.dom.TagName.DIV = new goog.dom.TagName("DIV");
+goog.dom.TagName.DL = new goog.dom.TagName("DL");
+goog.dom.TagName.DT = new goog.dom.TagName("DT");
+goog.dom.TagName.EM = new goog.dom.TagName("EM");
+goog.dom.TagName.EMBED = new goog.dom.TagName("EMBED");
+goog.dom.TagName.FIELDSET = new goog.dom.TagName("FIELDSET");
+goog.dom.TagName.FIGCAPTION = new goog.dom.TagName("FIGCAPTION");
+goog.dom.TagName.FIGURE = new goog.dom.TagName("FIGURE");
+goog.dom.TagName.FONT = new goog.dom.TagName("FONT");
+goog.dom.TagName.FOOTER = new goog.dom.TagName("FOOTER");
+goog.dom.TagName.FORM = new goog.dom.TagName("FORM");
+goog.dom.TagName.FRAME = new goog.dom.TagName("FRAME");
+goog.dom.TagName.FRAMESET = new goog.dom.TagName("FRAMESET");
+goog.dom.TagName.H1 = new goog.dom.TagName("H1");
+goog.dom.TagName.H2 = new goog.dom.TagName("H2");
+goog.dom.TagName.H3 = new goog.dom.TagName("H3");
+goog.dom.TagName.H4 = new goog.dom.TagName("H4");
+goog.dom.TagName.H5 = new goog.dom.TagName("H5");
+goog.dom.TagName.H6 = new goog.dom.TagName("H6");
+goog.dom.TagName.HEAD = new goog.dom.TagName("HEAD");
+goog.dom.TagName.HEADER = new goog.dom.TagName("HEADER");
+goog.dom.TagName.HGROUP = new goog.dom.TagName("HGROUP");
+goog.dom.TagName.HR = new goog.dom.TagName("HR");
+goog.dom.TagName.HTML = new goog.dom.TagName("HTML");
+goog.dom.TagName.I = new goog.dom.TagName("I");
+goog.dom.TagName.IFRAME = new goog.dom.TagName("IFRAME");
+goog.dom.TagName.IMG = new goog.dom.TagName("IMG");
+goog.dom.TagName.INPUT = new goog.dom.TagName("INPUT");
+goog.dom.TagName.INS = new goog.dom.TagName("INS");
+goog.dom.TagName.ISINDEX = new goog.dom.TagName("ISINDEX");
+goog.dom.TagName.KBD = new goog.dom.TagName("KBD");
+goog.dom.TagName.KEYGEN = new goog.dom.TagName("KEYGEN");
+goog.dom.TagName.LABEL = new goog.dom.TagName("LABEL");
+goog.dom.TagName.LEGEND = new goog.dom.TagName("LEGEND");
+goog.dom.TagName.LI = new goog.dom.TagName("LI");
+goog.dom.TagName.LINK = new goog.dom.TagName("LINK");
+goog.dom.TagName.MAIN = new goog.dom.TagName("MAIN");
+goog.dom.TagName.MAP = new goog.dom.TagName("MAP");
+goog.dom.TagName.MARK = new goog.dom.TagName("MARK");
+goog.dom.TagName.MATH = new goog.dom.TagName("MATH");
+goog.dom.TagName.MENU = new goog.dom.TagName("MENU");
+goog.dom.TagName.MENUITEM = new goog.dom.TagName("MENUITEM");
+goog.dom.TagName.META = new goog.dom.TagName("META");
+goog.dom.TagName.METER = new goog.dom.TagName("METER");
+goog.dom.TagName.NAV = new goog.dom.TagName("NAV");
+goog.dom.TagName.NOFRAMES = new goog.dom.TagName("NOFRAMES");
+goog.dom.TagName.NOSCRIPT = new goog.dom.TagName("NOSCRIPT");
+goog.dom.TagName.OBJECT = new goog.dom.TagName("OBJECT");
+goog.dom.TagName.OL = new goog.dom.TagName("OL");
+goog.dom.TagName.OPTGROUP = new goog.dom.TagName("OPTGROUP");
+goog.dom.TagName.OPTION = new goog.dom.TagName("OPTION");
+goog.dom.TagName.OUTPUT = new goog.dom.TagName("OUTPUT");
+goog.dom.TagName.P = new goog.dom.TagName("P");
+goog.dom.TagName.PARAM = new goog.dom.TagName("PARAM");
+goog.dom.TagName.PICTURE = new goog.dom.TagName("PICTURE");
+goog.dom.TagName.PRE = new goog.dom.TagName("PRE");
+goog.dom.TagName.PROGRESS = new goog.dom.TagName("PROGRESS");
+goog.dom.TagName.Q = new goog.dom.TagName("Q");
+goog.dom.TagName.RP = new goog.dom.TagName("RP");
+goog.dom.TagName.RT = new goog.dom.TagName("RT");
+goog.dom.TagName.RTC = new goog.dom.TagName("RTC");
+goog.dom.TagName.RUBY = new goog.dom.TagName("RUBY");
+goog.dom.TagName.S = new goog.dom.TagName("S");
+goog.dom.TagName.SAMP = new goog.dom.TagName("SAMP");
+goog.dom.TagName.SCRIPT = new goog.dom.TagName("SCRIPT");
+goog.dom.TagName.SECTION = new goog.dom.TagName("SECTION");
+goog.dom.TagName.SELECT = new goog.dom.TagName("SELECT");
+goog.dom.TagName.SMALL = new goog.dom.TagName("SMALL");
+goog.dom.TagName.SOURCE = new goog.dom.TagName("SOURCE");
+goog.dom.TagName.SPAN = new goog.dom.TagName("SPAN");
+goog.dom.TagName.STRIKE = new goog.dom.TagName("STRIKE");
+goog.dom.TagName.STRONG = new goog.dom.TagName("STRONG");
+goog.dom.TagName.STYLE = new goog.dom.TagName("STYLE");
+goog.dom.TagName.SUB = new goog.dom.TagName("SUB");
+goog.dom.TagName.SUMMARY = new goog.dom.TagName("SUMMARY");
+goog.dom.TagName.SUP = new goog.dom.TagName("SUP");
+goog.dom.TagName.SVG = new goog.dom.TagName("SVG");
+goog.dom.TagName.TABLE = new goog.dom.TagName("TABLE");
+goog.dom.TagName.TBODY = new goog.dom.TagName("TBODY");
+goog.dom.TagName.TD = new goog.dom.TagName("TD");
+goog.dom.TagName.TEMPLATE = new goog.dom.TagName("TEMPLATE");
+goog.dom.TagName.TEXTAREA = new goog.dom.TagName("TEXTAREA");
+goog.dom.TagName.TFOOT = new goog.dom.TagName("TFOOT");
+goog.dom.TagName.TH = new goog.dom.TagName("TH");
+goog.dom.TagName.THEAD = new goog.dom.TagName("THEAD");
+goog.dom.TagName.TIME = new goog.dom.TagName("TIME");
+goog.dom.TagName.TITLE = new goog.dom.TagName("TITLE");
+goog.dom.TagName.TR = new goog.dom.TagName("TR");
+goog.dom.TagName.TRACK = new goog.dom.TagName("TRACK");
+goog.dom.TagName.TT = new goog.dom.TagName("TT");
+goog.dom.TagName.U = new goog.dom.TagName("U");
+goog.dom.TagName.UL = new goog.dom.TagName("UL");
+goog.dom.TagName.VAR = new goog.dom.TagName("VAR");
+goog.dom.TagName.VIDEO = new goog.dom.TagName("VIDEO");
+goog.dom.TagName.WBR = new goog.dom.TagName("WBR");
+goog.dom.tags = {};
+goog.dom.tags.VOID_TAGS_ = {
+  area: !0,
+  base: !0,
+  br: !0,
+  col: !0,
+  command: !0,
+  embed: !0,
+  hr: !0,
+  img: !0,
+  input: !0,
+  keygen: !0,
+  link: !0,
+  meta: !0,
+  param: !0,
+  source: !0,
+  track: !0,
+  wbr: !0
+};
 
-  for (var d; a.length && (d = a.shift());) !a.length && goog.isDef(b) ? c[d] = b : c = c[d] && c[d] !== Object.prototype[d] ? c[d] : c[d] = {};
+goog.dom.tags.isVoidTag = function (a) {
+  return !0 === goog.dom.tags.VOID_TAGS_[a];
 };
 
-goog.define = function (a, b) {
-  if (!COMPILED) {
-    var c = goog.global.CLOSURE_UNCOMPILED_DEFINES,
-        d = goog.global.CLOSURE_DEFINES;
-    c && void 0 === c.nodeType && Object.prototype.hasOwnProperty.call(c, a) ? b = c[a] : d && void 0 === d.nodeType && Object.prototype.hasOwnProperty.call(d, a) && (b = d[a]);
-  }
+goog.html = {};
+goog.html.trustedtypes = {};
+goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY = goog.TRUSTED_TYPES_POLICY_NAME ? goog.createTrustedTypesPolicy(goog.TRUSTED_TYPES_POLICY_NAME + "#html") : null;
+goog.string = {};
 
-  return b;
+goog.string.TypedString = function () {};
+
+goog.string.Const = function (a, b) {
+  this.stringConstValueWithSecurityContract__googStringSecurityPrivate_ = a === goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_ && b || "";
+  this.STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_ = goog.string.Const.TYPE_MARKER_;
 };
 
-goog.FEATURESET_YEAR = 2012;
-goog.DEBUG = !0;
-goog.LOCALE = "en";
-goog.TRUSTED_SITE = !0;
-goog.STRICT_MODE_COMPATIBLE = !1;
-goog.DISALLOW_TEST_ONLY_CODE = COMPILED && !goog.DEBUG;
-goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING = !1;
+goog.string.Const.prototype.implementsGoogStringTypedString = !0;
 
-goog.provide = function (a) {
-  if (goog.isInModuleLoader_()) throw Error("goog.provide cannot be used within a module.");
-  if (!COMPILED && goog.isProvided_(a)) throw Error('Namespace "' + a + '" already declared.');
-  goog.constructNamespace_(a);
+goog.string.Const.prototype.getTypedStringValue = function () {
+  return this.stringConstValueWithSecurityContract__googStringSecurityPrivate_;
 };
 
-goog.constructNamespace_ = function (a, b) {
-  if (!COMPILED) {
-    delete goog.implicitNamespaces_[a];
-
-    for (var c = a; (c = c.substring(0, c.lastIndexOf("."))) && !goog.getObjectByName(c);) goog.implicitNamespaces_[c] = !0;
-  }
+goog.string.Const.prototype.toString = function () {
+  return "Const{" + this.stringConstValueWithSecurityContract__googStringSecurityPrivate_ + "}";
+};
 
-  goog.exportPath_(a, b);
+goog.string.Const.unwrap = function (a) {
+  if (a instanceof goog.string.Const && a.constructor === goog.string.Const && a.STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_ === goog.string.Const.TYPE_MARKER_) return a.stringConstValueWithSecurityContract__googStringSecurityPrivate_;
+  goog.asserts.fail("expected object of type Const, got '" + a + "'");
+  return "type_error:Const";
 };
 
-goog.getScriptNonce = function (a) {
-  if (a && a != goog.global) return goog.getScriptNonce_(a.document);
-  null === goog.cspNonce_ && (goog.cspNonce_ = goog.getScriptNonce_(goog.global.document));
-  return goog.cspNonce_;
+goog.string.Const.from = function (a) {
+  return new goog.string.Const(goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_, a);
 };
 
-goog.NONCE_PATTERN_ = /^[\w+/_-]+[=]{0,2}$/;
-goog.cspNonce_ = null;
+goog.string.Const.TYPE_MARKER_ = {};
+goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_ = {};
+goog.string.Const.EMPTY = goog.string.Const.from("");
 
-goog.getScriptNonce_ = function (a) {
-  return (a = a.querySelector && a.querySelector("script[nonce]")) && (a = a.nonce || a.getAttribute("nonce")) && goog.NONCE_PATTERN_.test(a) ? a : "";
+goog.html.SafeScript = function () {
+  this.privateDoNotAccessOrElseSafeScriptWrappedValue_ = "";
+  this.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;
 };
 
-goog.VALID_MODULE_RE_ = /^[a-zA-Z_$][a-zA-Z0-9._$]*$/;
-
-goog.module = function (a) {
-  if (!goog.isString(a) || !a || -1 == a.search(goog.VALID_MODULE_RE_)) throw Error("Invalid module identifier");
-  if (!goog.isInGoogModuleLoader_()) throw Error("Module " + a + " has been loaded incorrectly. Note, modules cannot be loaded as normal scripts. They require some kind of pre-processing step. You're likely trying to load a module via a script tag or as a part of a concatenated bundle without rewriting the module. For more info see: https://github.com/google/closure-library/wiki/goog.module:-an-ES6-module-like-alternative-to-goog.provide.");
-  if (goog.moduleLoaderState_.moduleName) throw Error("goog.module may only be called once per module.");
-  goog.moduleLoaderState_.moduleName = a;
+goog.html.SafeScript.prototype.implementsGoogStringTypedString = !0;
+goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = {};
 
-  if (!COMPILED) {
-    if (goog.isProvided_(a)) throw Error('Namespace "' + a + '" already declared.');
-    delete goog.implicitNamespaces_[a];
-  }
+goog.html.SafeScript.fromConstant = function (a) {
+  a = goog.string.Const.unwrap(a);
+  return 0 === a.length ? goog.html.SafeScript.EMPTY : goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(a);
 };
 
-goog.module.get = function (a) {
-  return goog.module.getInternal_(a);
+goog.html.SafeScript.fromConstantAndArgs = function (a, b) {
+  for (var c = [], d = 1; d < arguments.length; d++) c.push(goog.html.SafeScript.stringify_(arguments[d]));
+
+  return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse("(" + goog.string.Const.unwrap(a) + ")(" + c.join(", ") + ");");
 };
 
-goog.module.getInternal_ = function (a) {
-  if (!COMPILED) {
-    if (a in goog.loadedModules_) return goog.loadedModules_[a].exports;
-    if (!goog.implicitNamespaces_[a]) return a = goog.getObjectByName(a), null != a ? a : null;
-  }
+goog.html.SafeScript.fromJson = function (a) {
+  return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(goog.html.SafeScript.stringify_(a));
+};
 
-  return null;
+goog.html.SafeScript.prototype.getTypedStringValue = function () {
+  return this.privateDoNotAccessOrElseSafeScriptWrappedValue_.toString();
 };
 
-goog.ModuleType = {
-  ES6: "es6",
-  GOOG: "goog"
+goog.DEBUG && (goog.html.SafeScript.prototype.toString = function () {
+  return "SafeScript{" + this.privateDoNotAccessOrElseSafeScriptWrappedValue_ + "}";
+});
+
+goog.html.SafeScript.unwrap = function (a) {
+  return goog.html.SafeScript.unwrapTrustedScript(a).toString();
 };
-goog.moduleLoaderState_ = null;
 
-goog.isInModuleLoader_ = function () {
-  return goog.isInGoogModuleLoader_() || goog.isInEs6ModuleLoader_();
+goog.html.SafeScript.unwrapTrustedScript = function (a) {
+  if (a instanceof goog.html.SafeScript && a.constructor === goog.html.SafeScript && a.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ === goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) return a.privateDoNotAccessOrElseSafeScriptWrappedValue_;
+  goog.asserts.fail("expected object of type SafeScript, got '" + a + "' of type " + goog.typeOf(a));
+  return "type_error:SafeScript";
 };
 
-goog.isInGoogModuleLoader_ = function () {
-  return !!goog.moduleLoaderState_ && goog.moduleLoaderState_.type == goog.ModuleType.GOOG;
+goog.html.SafeScript.stringify_ = function (a) {
+  return JSON.stringify(a).replace(/</g, "\\x3c");
 };
 
-goog.isInEs6ModuleLoader_ = function () {
-  if (goog.moduleLoaderState_ && goog.moduleLoaderState_.type == goog.ModuleType.ES6) return !0;
-  var a = goog.global.$jscomp;
-  return a ? "function" != typeof a.getCurrentModulePath ? !1 : !!a.getCurrentModulePath() : !1;
+goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse = function (a) {
+  return new goog.html.SafeScript().initSecurityPrivateDoNotAccessOrElse_(a);
 };
 
-goog.module.declareLegacyNamespace = function () {
-  if (!COMPILED && !goog.isInGoogModuleLoader_()) throw Error("goog.module.declareLegacyNamespace must be called from within a goog.module");
-  if (!COMPILED && !goog.moduleLoaderState_.moduleName) throw Error("goog.module must be called prior to goog.module.declareLegacyNamespace.");
-  goog.moduleLoaderState_.declareLegacyNamespace = !0;
+goog.html.SafeScript.prototype.initSecurityPrivateDoNotAccessOrElse_ = function (a) {
+  this.privateDoNotAccessOrElseSafeScriptWrappedValue_ = goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY ? goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createScript(a) : a;
+  return this;
 };
 
-goog.declareModuleId = function (a) {
-  if (!COMPILED) {
-    if (!goog.isInEs6ModuleLoader_()) throw Error("goog.declareModuleId may only be called from within an ES6 module");
-    if (goog.moduleLoaderState_ && goog.moduleLoaderState_.moduleName) throw Error("goog.declareModuleId may only be called once per module.");
-    if (a in goog.loadedModules_) throw Error('Module with namespace "' + a + '" already exists.');
-  }
+goog.html.SafeScript.EMPTY = goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse("");
+goog.fs = {};
+goog.fs.url = {};
 
-  if (goog.moduleLoaderState_) goog.moduleLoaderState_.moduleName = a;else {
-    var b = goog.global.$jscomp;
-    if (!b || "function" != typeof b.getCurrentModulePath) throw Error('Module with namespace "' + a + '" has been loaded incorrectly.');
-    b = b.require(b.getCurrentModulePath());
-    goog.loadedModules_[a] = {
-      exports: b,
-      type: goog.ModuleType.ES6,
-      moduleId: a
-    };
-  }
+goog.fs.url.createObjectUrl = function (a) {
+  return goog.fs.url.getUrlObject_().createObjectURL(a);
 };
 
-goog.setTestOnly = function (a) {
-  if (goog.DISALLOW_TEST_ONLY_CODE) throw a = a || "", Error("Importing test-only code into non-debug environment" + (a ? ": " + a : "."));
+goog.fs.url.revokeObjectUrl = function (a) {
+  goog.fs.url.getUrlObject_().revokeObjectURL(a);
 };
 
-goog.forwardDeclare = function (a) {};
+goog.fs.url.getUrlObject_ = function () {
+  var a = goog.fs.url.findUrlObject_();
+  if (null != a) return a;
+  throw Error("This browser doesn't seem to support blob URLs");
+};
 
-COMPILED || (goog.isProvided_ = function (a) {
-  return a in goog.loadedModules_ || !goog.implicitNamespaces_[a] && goog.isDefAndNotNull(goog.getObjectByName(a));
-}, goog.implicitNamespaces_ = {
-  "goog.module": !0
-});
+goog.fs.url.findUrlObject_ = function () {
+  return goog.isDef(goog.global.URL) && goog.isDef(goog.global.URL.createObjectURL) ? goog.global.URL : goog.isDef(goog.global.webkitURL) && goog.isDef(goog.global.webkitURL.createObjectURL) ? goog.global.webkitURL : goog.isDef(goog.global.createObjectURL) ? goog.global : null;
+};
 
-goog.getObjectByName = function (a, b) {
-  a = a.split(".");
-  b = b || goog.global;
+goog.fs.url.browserSupportsObjectUrls = function () {
+  return null != goog.fs.url.findUrlObject_();
+};
 
-  for (var c = 0; c < a.length; c++) if (b = b[a[c]], !goog.isDefAndNotNull(b)) return null;
+goog.i18n = {};
+goog.i18n.bidi = {};
+goog.i18n.bidi.FORCE_RTL = !1;
+goog.i18n.bidi.IS_RTL = goog.i18n.bidi.FORCE_RTL || ("ar" == goog.LOCALE.substring(0, 2).toLowerCase() || "fa" == goog.LOCALE.substring(0, 2).toLowerCase() || "he" == goog.LOCALE.substring(0, 2).toLowerCase() || "iw" == goog.LOCALE.substring(0, 2).toLowerCase() || "ps" == goog.LOCALE.substring(0, 2).toLowerCase() || "sd" == goog.LOCALE.substring(0, 2).toLowerCase() || "ug" == goog.LOCALE.substring(0, 2).toLowerCase() || "ur" == goog.LOCALE.substring(0, 2).toLowerCase() || "yi" == goog.LOCALE.substring(0, 2).toLowerCase()) && (2 == goog.LOCALE.length || "-" == goog.LOCALE.substring(2, 3) || "_" == goog.LOCALE.substring(2, 3)) || 3 <= goog.LOCALE.length && "ckb" == goog.LOCALE.substring(0, 3).toLowerCase() && (3 == goog.LOCALE.length || "-" == goog.LOCALE.substring(3, 4) || "_" == goog.LOCALE.substring(3, 4)) || 7 <= goog.LOCALE.length && ("-" == goog.LOCALE.substring(2, 3) || "_" == goog.LOCALE.substring(2, 3)) && ("adlm" == goog.LOCALE.substring(3, 7).toLowerCase() || "arab" == goog.LOCALE.substring(3, 7).toLowerCase() || "hebr" == goog.LOCALE.substring(3, 7).toLowerCase() || "nkoo" == goog.LOCALE.substring(3, 7).toLowerCase() || "rohg" == goog.LOCALE.substring(3, 7).toLowerCase() || "thaa" == goog.LOCALE.substring(3, 7).toLowerCase()) || 8 <= goog.LOCALE.length && ("-" == goog.LOCALE.substring(3, 4) || "_" == goog.LOCALE.substring(3, 4)) && ("adlm" == goog.LOCALE.substring(4, 8).toLowerCase() || "arab" == goog.LOCALE.substring(4, 8).toLowerCase() || "hebr" == goog.LOCALE.substring(4, 8).toLowerCase() || "nkoo" == goog.LOCALE.substring(4, 8).toLowerCase() || "rohg" == goog.LOCALE.substring(4, 8).toLowerCase() || "thaa" == goog.LOCALE.substring(4, 8).toLowerCase());
+goog.i18n.bidi.Format = {
+  LRE: "\u202a",
+  RLE: "\u202b",
+  PDF: "\u202c",
+  LRM: "\u200e",
+  RLM: "\u200f"
+};
+goog.i18n.bidi.Dir = {
+  LTR: 1,
+  RTL: -1,
+  NEUTRAL: 0
+};
+goog.i18n.bidi.RIGHT = "right";
+goog.i18n.bidi.LEFT = "left";
+goog.i18n.bidi.I18N_RIGHT = goog.i18n.bidi.IS_RTL ? goog.i18n.bidi.LEFT : goog.i18n.bidi.RIGHT;
+goog.i18n.bidi.I18N_LEFT = goog.i18n.bidi.IS_RTL ? goog.i18n.bidi.RIGHT : goog.i18n.bidi.LEFT;
 
-  return b;
+goog.i18n.bidi.toDir = function (a, b) {
+  return "number" == typeof a ? 0 < a ? goog.i18n.bidi.Dir.LTR : 0 > a ? goog.i18n.bidi.Dir.RTL : b ? null : goog.i18n.bidi.Dir.NEUTRAL : null == a ? null : a ? goog.i18n.bidi.Dir.RTL : goog.i18n.bidi.Dir.LTR;
 };
 
-goog.globalize = function (a, b) {
-  b = b || goog.global;
+goog.i18n.bidi.ltrChars_ = "A-Za-z\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02b8\u0300-\u0590\u0900-\u1fff\u200e\u2c00-\ud801\ud804-\ud839\ud83c-\udbff\uf900-\ufb1c\ufe00-\ufe6f\ufefd-\uffff";
+goog.i18n.bidi.rtlChars_ = "\u0591-\u06ef\u06fa-\u08ff\u200f\ud802-\ud803\ud83a-\ud83b\ufb1d-\ufdff\ufe70-\ufefc";
+goog.i18n.bidi.htmlSkipReg_ = /<[^>]*>|&[^;]+;/g;
 
-  for (var c in a) b[c] = a[c];
+goog.i18n.bidi.stripHtmlIfNeeded_ = function (a, b) {
+  return b ? a.replace(goog.i18n.bidi.htmlSkipReg_, "") : a;
 };
 
-goog.addDependency = function (a, b, c, d) {
-  !COMPILED && goog.DEPENDENCIES_ENABLED && goog.debugLoader_.addDependency(a, b, c, d);
+goog.i18n.bidi.rtlCharReg_ = new RegExp("[" + goog.i18n.bidi.rtlChars_ + "]");
+goog.i18n.bidi.ltrCharReg_ = new RegExp("[" + goog.i18n.bidi.ltrChars_ + "]");
+
+goog.i18n.bidi.hasAnyRtl = function (a, b) {
+  return goog.i18n.bidi.rtlCharReg_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a, b));
 };
 
-goog.ENABLE_DEBUG_LOADER = !0;
+goog.i18n.bidi.hasRtlChar = goog.i18n.bidi.hasAnyRtl;
 
-goog.logToConsole_ = function (a) {
-  goog.global.console && goog.global.console.error(a);
+goog.i18n.bidi.hasAnyLtr = function (a, b) {
+  return goog.i18n.bidi.ltrCharReg_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a, b));
 };
 
-goog.require = function (a) {
-  if (!COMPILED) {
-    goog.ENABLE_DEBUG_LOADER && goog.debugLoader_.requested(a);
+goog.i18n.bidi.ltrRe_ = new RegExp("^[" + goog.i18n.bidi.ltrChars_ + "]");
+goog.i18n.bidi.rtlRe_ = new RegExp("^[" + goog.i18n.bidi.rtlChars_ + "]");
 
-    if (goog.isProvided_(a)) {
-      if (goog.isInModuleLoader_()) return goog.module.getInternal_(a);
-    } else if (goog.ENABLE_DEBUG_LOADER) {
-      var b = goog.moduleLoaderState_;
-      goog.moduleLoaderState_ = null;
+goog.i18n.bidi.isRtlChar = function (a) {
+  return goog.i18n.bidi.rtlRe_.test(a);
+};
 
-      try {
-        goog.debugLoader_.load_(a);
-      } finally {
-        goog.moduleLoaderState_ = b;
-      }
-    }
+goog.i18n.bidi.isLtrChar = function (a) {
+  return goog.i18n.bidi.ltrRe_.test(a);
+};
 
-    return null;
-  }
+goog.i18n.bidi.isNeutralChar = function (a) {
+  return !goog.i18n.bidi.isLtrChar(a) && !goog.i18n.bidi.isRtlChar(a);
 };
 
-goog.requireType = function (a) {
-  return {};
+goog.i18n.bidi.ltrDirCheckRe_ = new RegExp("^[^" + goog.i18n.bidi.rtlChars_ + "]*[" + goog.i18n.bidi.ltrChars_ + "]");
+goog.i18n.bidi.rtlDirCheckRe_ = new RegExp("^[^" + goog.i18n.bidi.ltrChars_ + "]*[" + goog.i18n.bidi.rtlChars_ + "]");
+
+goog.i18n.bidi.startsWithRtl = function (a, b) {
+  return goog.i18n.bidi.rtlDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a, b));
 };
 
-goog.basePath = "";
+goog.i18n.bidi.isRtlText = goog.i18n.bidi.startsWithRtl;
 
-goog.nullFunction = function () {};
+goog.i18n.bidi.startsWithLtr = function (a, b) {
+  return goog.i18n.bidi.ltrDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a, b));
+};
 
-goog.abstractMethod = function () {
-  throw Error("unimplemented abstract method");
+goog.i18n.bidi.isLtrText = goog.i18n.bidi.startsWithLtr;
+goog.i18n.bidi.isRequiredLtrRe_ = /^http:\/\/.*/;
+
+goog.i18n.bidi.isNeutralText = function (a, b) {
+  a = goog.i18n.bidi.stripHtmlIfNeeded_(a, b);
+  return goog.i18n.bidi.isRequiredLtrRe_.test(a) || !goog.i18n.bidi.hasAnyLtr(a) && !goog.i18n.bidi.hasAnyRtl(a);
 };
 
-goog.addSingletonGetter = function (a) {
-  a.instance_ = void 0;
+goog.i18n.bidi.ltrExitDirCheckRe_ = new RegExp("[" + goog.i18n.bidi.ltrChars_ + "][^" + goog.i18n.bidi.rtlChars_ + "]*$");
+goog.i18n.bidi.rtlExitDirCheckRe_ = new RegExp("[" + goog.i18n.bidi.rtlChars_ + "][^" + goog.i18n.bidi.ltrChars_ + "]*$");
 
-  a.getInstance = function () {
-    if (a.instance_) return a.instance_;
-    goog.DEBUG && (goog.instantiatedSingletons_[goog.instantiatedSingletons_.length] = a);
-    return a.instance_ = new a();
-  };
+goog.i18n.bidi.endsWithLtr = function (a, b) {
+  return goog.i18n.bidi.ltrExitDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a, b));
 };
 
-goog.instantiatedSingletons_ = [];
-goog.LOAD_MODULE_USING_EVAL = !0;
-goog.SEAL_MODULE_EXPORTS = goog.DEBUG;
-goog.loadedModules_ = {};
-goog.DEPENDENCIES_ENABLED = !COMPILED && goog.ENABLE_DEBUG_LOADER;
-goog.TRANSPILE = "detect";
-goog.ASSUME_ES_MODULES_TRANSPILED = !1;
-goog.TRANSPILE_TO_LANGUAGE = "";
-goog.TRANSPILER = "transpile.js";
-goog.hasBadLetScoping = null;
+goog.i18n.bidi.isLtrExitText = goog.i18n.bidi.endsWithLtr;
 
-goog.useSafari10Workaround = function () {
-  if (null == goog.hasBadLetScoping) {
-    try {
-      var a = !eval('"use strict";let x = 1; function f() { return typeof x; };f() == "number";');
-    } catch (b) {
-      a = !1;
-    }
+goog.i18n.bidi.endsWithRtl = function (a, b) {
+  return goog.i18n.bidi.rtlExitDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a, b));
+};
 
-    goog.hasBadLetScoping = a;
-  }
+goog.i18n.bidi.isRtlExitText = goog.i18n.bidi.endsWithRtl;
+goog.i18n.bidi.rtlLocalesRe_ = /^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i;
 
-  return goog.hasBadLetScoping;
+goog.i18n.bidi.isRtlLanguage = function (a) {
+  return goog.i18n.bidi.rtlLocalesRe_.test(a);
 };
 
-goog.workaroundSafari10EvalBug = function (a) {
-  return "(function(){" + a + "\n;})();\n";
+goog.i18n.bidi.bracketGuardTextRe_ = /(\(.*?\)+)|(\[.*?\]+)|(\{.*?\}+)|(<.*?>+)/g;
+
+goog.i18n.bidi.guardBracketInText = function (a, b) {
+  b = (void 0 === b ? goog.i18n.bidi.hasAnyRtl(a) : b) ? goog.i18n.bidi.Format.RLM : goog.i18n.bidi.Format.LRM;
+  return a.replace(goog.i18n.bidi.bracketGuardTextRe_, b + "$&" + b);
 };
 
-goog.loadModule = function (a) {
-  var b = goog.moduleLoaderState_;
+goog.i18n.bidi.enforceRtlInHtml = function (a) {
+  return "<" == a.charAt(0) ? a.replace(/<\w+/, "$& dir=rtl") : "\n<span dir=rtl>" + a + "</span>";
+};
 
-  try {
-    goog.moduleLoaderState_ = {
-      moduleName: "",
-      declareLegacyNamespace: !1,
-      type: goog.ModuleType.GOOG
-    };
-    if (goog.isFunction(a)) var c = a.call(void 0, {});else if (goog.isString(a)) goog.useSafari10Workaround() && (a = goog.workaroundSafari10EvalBug(a)), c = goog.loadModuleFromSource_.call(void 0, a);else throw Error("Invalid module definition");
-    var d = goog.moduleLoaderState_.moduleName;
-    if (goog.isString(d) && d) goog.moduleLoaderState_.declareLegacyNamespace ? goog.constructNamespace_(d, c) : goog.SEAL_MODULE_EXPORTS && Object.seal && "object" == typeof c && null != c && Object.seal(c), goog.loadedModules_[d] = {
-      exports: c,
-      type: goog.ModuleType.GOOG,
-      moduleId: goog.moduleLoaderState_.moduleName
-    };else throw Error('Invalid module name "' + d + '"');
-  } finally {
-    goog.moduleLoaderState_ = b;
-  }
+goog.i18n.bidi.enforceRtlInText = function (a) {
+  return goog.i18n.bidi.Format.RLE + a + goog.i18n.bidi.Format.PDF;
 };
 
-goog.loadModuleFromSource_ = function (a) {
-  eval(a);
-  return {};
+goog.i18n.bidi.enforceLtrInHtml = function (a) {
+  return "<" == a.charAt(0) ? a.replace(/<\w+/, "$& dir=ltr") : "\n<span dir=ltr>" + a + "</span>";
 };
 
-goog.normalizePath_ = function (a) {
-  a = a.split("/");
+goog.i18n.bidi.enforceLtrInText = function (a) {
+  return goog.i18n.bidi.Format.LRE + a + goog.i18n.bidi.Format.PDF;
+};
 
-  for (var b = 0; b < a.length;) "." == a[b] ? a.splice(b, 1) : b && ".." == a[b] && a[b - 1] && ".." != a[b - 1] ? a.splice(--b, 2) : b++;
+goog.i18n.bidi.dimensionsRe_ = /:\s*([.\d][.\w]*)\s+([.\d][.\w]*)\s+([.\d][.\w]*)\s+([.\d][.\w]*)/g;
+goog.i18n.bidi.leftRe_ = /left/gi;
+goog.i18n.bidi.rightRe_ = /right/gi;
+goog.i18n.bidi.tempRe_ = /%%%%/g;
 
-  return a.join("/");
+goog.i18n.bidi.mirrorCSS = function (a) {
+  return a.replace(goog.i18n.bidi.dimensionsRe_, ":$1 $4 $3 $2").replace(goog.i18n.bidi.leftRe_, "%%%%").replace(goog.i18n.bidi.rightRe_, goog.i18n.bidi.LEFT).replace(goog.i18n.bidi.tempRe_, goog.i18n.bidi.RIGHT);
 };
 
-goog.loadFileSync_ = function (a) {
-  if (goog.global.CLOSURE_LOAD_FILE_SYNC) return goog.global.CLOSURE_LOAD_FILE_SYNC(a);
+goog.i18n.bidi.doubleQuoteSubstituteRe_ = /([\u0591-\u05f2])"/g;
+goog.i18n.bidi.singleQuoteSubstituteRe_ = /([\u0591-\u05f2])'/g;
 
-  try {
-    var b = new goog.global.XMLHttpRequest();
-    b.open("get", a, !1);
-    b.send();
-    return 0 == b.status || 200 == b.status ? b.responseText : null;
-  } catch (c) {
-    return null;
-  }
+goog.i18n.bidi.normalizeHebrewQuote = function (a) {
+  return a.replace(goog.i18n.bidi.doubleQuoteSubstituteRe_, "$1\u05f4").replace(goog.i18n.bidi.singleQuoteSubstituteRe_, "$1\u05f3");
 };
 
-goog.transpile_ = function (a, b, c) {
-  var d = goog.global.$jscomp;
-  d || (goog.global.$jscomp = d = {});
-  var e = d.transpile;
+goog.i18n.bidi.wordSeparatorRe_ = /\s+/;
+goog.i18n.bidi.hasNumeralsRe_ = /[\d\u06f0-\u06f9]/;
+goog.i18n.bidi.rtlDetectionThreshold_ = .4;
 
-  if (!e) {
-    var f = goog.basePath + goog.TRANSPILER,
-        g = goog.loadFileSync_(f);
+goog.i18n.bidi.estimateDirection = function (a, b) {
+  var c = 0,
+      d = 0,
+      e = !1;
+  a = goog.i18n.bidi.stripHtmlIfNeeded_(a, b).split(goog.i18n.bidi.wordSeparatorRe_);
 
-    if (g) {
-      (function () {
-        (0, eval)(g + "\n//# sourceURL=" + f);
-      }).call(goog.global);
-      if (goog.global.$gwtExport && goog.global.$gwtExport.$jscomp && !goog.global.$gwtExport.$jscomp.transpile) throw Error('The transpiler did not properly export the "transpile" method. $gwtExport: ' + JSON.stringify(goog.global.$gwtExport));
-      goog.global.$jscomp.transpile = goog.global.$gwtExport.$jscomp.transpile;
-      d = goog.global.$jscomp;
-      e = d.transpile;
-    }
+  for (b = 0; b < a.length; b++) {
+    var f = a[b];
+    goog.i18n.bidi.startsWithRtl(f) ? (c++, d++) : goog.i18n.bidi.isRequiredLtrRe_.test(f) ? e = !0 : goog.i18n.bidi.hasAnyLtr(f) ? d++ : goog.i18n.bidi.hasNumeralsRe_.test(f) && (e = !0);
   }
 
-  e || (e = d.transpile = function (a, b) {
-    goog.logToConsole_(b + " requires transpilation but no transpiler was found.");
-    return a;
-  });
-  return e(a, b, c);
+  return 0 == d ? e ? goog.i18n.bidi.Dir.LTR : goog.i18n.bidi.Dir.NEUTRAL : c / d > goog.i18n.bidi.rtlDetectionThreshold_ ? goog.i18n.bidi.Dir.RTL : goog.i18n.bidi.Dir.LTR;
 };
 
-goog.typeOf = function (a) {
-  var b = typeof a;
-  if ("object" == b) {
-    if (a) {
-      if (a instanceof Array) return "array";
-      if (a instanceof Object) return b;
-      var c = Object.prototype.toString.call(a);
-      if ("[object Window]" == c) return "object";
-      if ("[object Array]" == c || "number" == typeof a.length && "undefined" != typeof a.splice && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("splice")) return "array";
-      if ("[object Function]" == c || "undefined" != typeof a.call && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("call")) return "function";
-    } else return "null";
-  } else if ("function" == b && "undefined" == typeof a.call) return "object";
-  return b;
+goog.i18n.bidi.detectRtlDirectionality = function (a, b) {
+  return goog.i18n.bidi.estimateDirection(a, b) == goog.i18n.bidi.Dir.RTL;
 };
 
-goog.isNull = function (a) {
-  return null === a;
+goog.i18n.bidi.setElementDirAndAlign = function (a, b) {
+  a && (b = goog.i18n.bidi.toDir(b)) && (a.style.textAlign = b == goog.i18n.bidi.Dir.RTL ? goog.i18n.bidi.RIGHT : goog.i18n.bidi.LEFT, a.dir = b == goog.i18n.bidi.Dir.RTL ? "rtl" : "ltr");
 };
 
-goog.isDefAndNotNull = function (a) {
-  return null != a;
-};
+goog.i18n.bidi.setElementDirByTextDirectionality = function (a, b) {
+  switch (goog.i18n.bidi.estimateDirection(b)) {
+    case goog.i18n.bidi.Dir.LTR:
+      a.dir = "ltr";
+      break;
 
-goog.isArray = function (a) {
-  return "array" == goog.typeOf(a);
-};
+    case goog.i18n.bidi.Dir.RTL:
+      a.dir = "rtl";
+      break;
 
-goog.isArrayLike = function (a) {
-  var b = goog.typeOf(a);
-  return "array" == b || "object" == b && "number" == typeof a.length;
+    default:
+      a.removeAttribute("dir");
+  }
 };
 
-goog.isDateLike = function (a) {
-  return goog.isObject(a) && "function" == typeof a.getFullYear;
+goog.i18n.bidi.DirectionalString = function () {};
+
+goog.html.TrustedResourceUrl = function () {
+  this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_ = "";
+  this.trustedURL_ = null;
+  this.TRUSTED_RESOURCE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = goog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;
 };
 
-goog.isFunction = function (a) {
-  return "function" == goog.typeOf(a);
+goog.html.TrustedResourceUrl.prototype.implementsGoogStringTypedString = !0;
+
+goog.html.TrustedResourceUrl.prototype.getTypedStringValue = function () {
+  return this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_.toString();
 };
 
-goog.isObject = function (a) {
-  var b = typeof a;
-  return "object" == b && null != a || "function" == b;
+goog.html.TrustedResourceUrl.prototype.implementsGoogI18nBidiDirectionalString = !0;
+
+goog.html.TrustedResourceUrl.prototype.getDirection = function () {
+  return goog.i18n.bidi.Dir.LTR;
 };
 
-goog.getUid = function (a) {
-  return a[goog.UID_PROPERTY_] || (a[goog.UID_PROPERTY_] = ++goog.uidCounter_);
+goog.html.TrustedResourceUrl.prototype.cloneWithParams = function (a, b) {
+  var c = goog.html.TrustedResourceUrl.unwrap(this);
+  c = goog.html.TrustedResourceUrl.URL_PARAM_PARSER_.exec(c);
+  var d = c[3] || "";
+  return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(c[1] + goog.html.TrustedResourceUrl.stringifyParams_("?", c[2] || "", a) + goog.html.TrustedResourceUrl.stringifyParams_("#", d, b));
 };
 
-goog.hasUid = function (a) {
-  return !!a[goog.UID_PROPERTY_];
+goog.DEBUG && (goog.html.TrustedResourceUrl.prototype.toString = function () {
+  return "TrustedResourceUrl{" + this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_ + "}";
+});
+
+goog.html.TrustedResourceUrl.unwrap = function (a) {
+  return goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(a).toString();
 };
 
-goog.removeUid = function (a) {
-  null !== a && "removeAttribute" in a && a.removeAttribute(goog.UID_PROPERTY_);
+goog.html.TrustedResourceUrl.unwrapTrustedScriptURL = function (a) {
+  if (a instanceof goog.html.TrustedResourceUrl && a.constructor === goog.html.TrustedResourceUrl && a.TRUSTED_RESOURCE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ === goog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) return a.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_;
+  goog.asserts.fail("expected object of type TrustedResourceUrl, got '" + a + "' of type " + goog.typeOf(a));
+  return "type_error:TrustedResourceUrl";
+};
 
-  try {
-    delete a[goog.UID_PROPERTY_];
-  } catch (b) {}
+goog.html.TrustedResourceUrl.unwrapTrustedURL = function (a) {
+  return a.trustedURL_ ? a.trustedURL_ : goog.html.TrustedResourceUrl.unwrap(a);
 };
 
-goog.UID_PROPERTY_ = "closure_uid_" + (1E9 * Math.random() >>> 0);
-goog.uidCounter_ = 0;
-goog.getHashCode = goog.getUid;
-goog.removeHashCode = goog.removeUid;
+goog.html.TrustedResourceUrl.format = function (a, b) {
+  var c = goog.string.Const.unwrap(a);
+  if (!goog.html.TrustedResourceUrl.BASE_URL_.test(c)) throw Error("Invalid TrustedResourceUrl format: " + c);
+  a = c.replace(goog.html.TrustedResourceUrl.FORMAT_MARKER_, function (a, e) {
+    if (!Object.prototype.hasOwnProperty.call(b, e)) throw Error('Found marker, "' + e + '", in format string, "' + c + '", but no valid label mapping found in args: ' + JSON.stringify(b));
+    a = b[e];
+    return a instanceof goog.string.Const ? goog.string.Const.unwrap(a) : encodeURIComponent(String(a));
+  });
+  return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(a);
+};
 
-goog.cloneObject = function (a) {
-  var b = goog.typeOf(a);
+goog.html.TrustedResourceUrl.FORMAT_MARKER_ = /%{(\w+)}/g;
+goog.html.TrustedResourceUrl.BASE_URL_ = /^((https:)?\/\/[0-9a-z.:[\]-]+\/|\/[^/\\]|[^:/\\%]+\/|[^:/\\%]*[?#]|about:blank#)/i;
+goog.html.TrustedResourceUrl.URL_PARAM_PARSER_ = /^([^?#]*)(\?[^#]*)?(#[\s\S]*)?/;
 
-  if ("object" == b || "array" == b) {
-    if ("function" === typeof a.clone) return a.clone();
-    b = "array" == b ? [] : {};
+goog.html.TrustedResourceUrl.formatWithParams = function (a, b, c, d) {
+  return goog.html.TrustedResourceUrl.format(a, b).cloneWithParams(c, d);
+};
 
-    for (var c in a) b[c] = goog.cloneObject(a[c]);
+goog.html.TrustedResourceUrl.fromConstant = function (a) {
+  return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(goog.string.Const.unwrap(a));
+};
 
-    return b;
-  }
+goog.html.TrustedResourceUrl.fromConstants = function (a) {
+  for (var b = "", c = 0; c < a.length; c++) b += goog.string.Const.unwrap(a[c]);
 
-  return a;
+  return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(b);
 };
 
-goog.bindNative_ = function (a, b, c) {
-  return a.call.apply(a.bind, arguments);
+goog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = {};
+
+goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse = function (a) {
+  var b = new goog.html.TrustedResourceUrl();
+  b.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_ = goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY ? goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createScriptURL(a) : a;
+  goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY && (b.trustedURL_ = goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createURL(a));
+  return b;
 };
 
-goog.bindJs_ = function (a, b, c) {
-  if (!a) throw Error();
+goog.html.TrustedResourceUrl.stringifyParams_ = function (a, b, c) {
+  if (null == c) return b;
+  if (goog.isString(c)) return c ? a + encodeURIComponent(c) : "";
 
-  if (2 < arguments.length) {
-    var d = Array.prototype.slice.call(arguments, 2);
-    return function () {
-      var c = Array.prototype.slice.call(arguments);
-      Array.prototype.unshift.apply(c, d);
-      return a.apply(b, c);
-    };
+  for (var d in c) {
+    var e = c[d];
+    e = goog.isArray(e) ? e : [e];
+
+    for (var f = 0; f < e.length; f++) {
+      var g = e[f];
+      null != g && (b || (b = a), b += (b.length > a.length ? "&" : "") + encodeURIComponent(d) + "=" + encodeURIComponent(String(g)));
+    }
   }
 
-  return function () {
-    return a.apply(b, arguments);
-  };
+  return b;
 };
 
-goog.bind = function (a, b, c) {
-  Function.prototype.bind && -1 != Function.prototype.bind.toString().indexOf("native code") ? goog.bind = goog.bindNative_ : goog.bind = goog.bindJs_;
-  return goog.bind.apply(null, arguments);
+goog.string.internal = {};
+
+goog.string.internal.startsWith = function (a, b) {
+  return 0 == a.lastIndexOf(b, 0);
 };
 
-goog.partial = function (a, b) {
-  var c = Array.prototype.slice.call(arguments, 1);
-  return function () {
-    var b = c.slice();
-    b.push.apply(b, arguments);
-    return a.apply(this, b);
-  };
+goog.string.internal.endsWith = function (a, b) {
+  var c = a.length - b.length;
+  return 0 <= c && a.indexOf(b, c) == c;
 };
 
-goog.mixin = function (a, b) {
-  for (var c in b) a[c] = b[c];
+goog.string.internal.caseInsensitiveStartsWith = function (a, b) {
+  return 0 == goog.string.internal.caseInsensitiveCompare(b, a.substr(0, b.length));
 };
 
-goog.now = goog.TRUSTED_SITE && Date.now || function () {
-  return +new Date();
+goog.string.internal.caseInsensitiveEndsWith = function (a, b) {
+  return 0 == goog.string.internal.caseInsensitiveCompare(b, a.substr(a.length - b.length, b.length));
 };
 
-goog.globalEval = function (a) {
-  if (goog.global.execScript) goog.global.execScript(a, "JavaScript");else if (goog.global.eval) {
-    if (null == goog.evalWorksForGlobals_) {
-      try {
-        goog.global.eval("var _evalTest_ = 1;");
-      } catch (d) {}
+goog.string.internal.caseInsensitiveEquals = function (a, b) {
+  return a.toLowerCase() == b.toLowerCase();
+};
 
-      if ("undefined" != typeof goog.global._evalTest_) {
-        try {
-          delete goog.global._evalTest_;
-        } catch (d) {}
+goog.string.internal.isEmptyOrWhitespace = function (a) {
+  return /^[\s\xa0]*$/.test(a);
+};
 
-        goog.evalWorksForGlobals_ = !0;
-      } else goog.evalWorksForGlobals_ = !1;
-    }
+goog.string.internal.trim = goog.TRUSTED_SITE && String.prototype.trim ? function (a) {
+  return a.trim();
+} : function (a) {
+  return /^[\s\xa0]*([\s\S]*?)[\s\xa0]*$/.exec(a)[1];
+};
 
-    if (goog.evalWorksForGlobals_) goog.global.eval(a);else {
-      var b = goog.global.document,
-          c = b.createElement("SCRIPT");
-      c.type = "text/javascript";
-      c.defer = !1;
-      c.appendChild(b.createTextNode(a));
-      b.head.appendChild(c);
-      b.head.removeChild(c);
-    }
-  } else throw Error("goog.globalEval not available");
+goog.string.internal.caseInsensitiveCompare = function (a, b) {
+  a = String(a).toLowerCase();
+  b = String(b).toLowerCase();
+  return a < b ? -1 : a == b ? 0 : 1;
 };
 
-goog.evalWorksForGlobals_ = null;
+goog.string.internal.newLineToBr = function (a, b) {
+  return a.replace(/(\r\n|\r|\n)/g, b ? "<br />" : "<br>");
+};
 
-goog.getCssName = function (a, b) {
-  if ("." == String(a).charAt(0)) throw Error('className passed in goog.getCssName must not start with ".". You passed: ' + a);
+goog.string.internal.htmlEscape = function (a, b) {
+  if (b) a = a.replace(goog.string.internal.AMP_RE_, "&amp;").replace(goog.string.internal.LT_RE_, "&lt;").replace(goog.string.internal.GT_RE_, "&gt;").replace(goog.string.internal.QUOT_RE_, "&quot;").replace(goog.string.internal.SINGLE_QUOTE_RE_, "&#39;").replace(goog.string.internal.NULL_RE_, "&#0;");else {
+    if (!goog.string.internal.ALL_RE_.test(a)) return a;
+    -1 != a.indexOf("&") && (a = a.replace(goog.string.internal.AMP_RE_, "&amp;"));
+    -1 != a.indexOf("<") && (a = a.replace(goog.string.internal.LT_RE_, "&lt;"));
+    -1 != a.indexOf(">") && (a = a.replace(goog.string.internal.GT_RE_, "&gt;"));
+    -1 != a.indexOf('"') && (a = a.replace(goog.string.internal.QUOT_RE_, "&quot;"));
+    -1 != a.indexOf("'") && (a = a.replace(goog.string.internal.SINGLE_QUOTE_RE_, "&#39;"));
+    -1 != a.indexOf("\x00") && (a = a.replace(goog.string.internal.NULL_RE_, "&#0;"));
+  }
+  return a;
+};
 
-  var c = function (a) {
-    return goog.cssNameMapping_[a] || a;
-  },
-      d = function (a) {
-    a = a.split("-");
+goog.string.internal.AMP_RE_ = /&/g;
+goog.string.internal.LT_RE_ = /</g;
+goog.string.internal.GT_RE_ = />/g;
+goog.string.internal.QUOT_RE_ = /"/g;
+goog.string.internal.SINGLE_QUOTE_RE_ = /'/g;
+goog.string.internal.NULL_RE_ = /\x00/g;
+goog.string.internal.ALL_RE_ = /[\x00&<>"']/;
 
-    for (var b = [], d = 0; d < a.length; d++) b.push(c(a[d]));
+goog.string.internal.whitespaceEscape = function (a, b) {
+  return goog.string.internal.newLineToBr(a.replace(/  /g, " &#160;"), b);
+};
 
-    return b.join("-");
-  };
+goog.string.internal.contains = function (a, b) {
+  return -1 != a.indexOf(b);
+};
 
-  d = goog.cssNameMapping_ ? "BY_WHOLE" == goog.cssNameMappingStyle_ ? c : d : function (a) {
-    return a;
-  };
-  a = b ? a + "-" + d(b) : d(a);
-  return goog.global.CLOSURE_CSS_NAME_MAP_FN ? goog.global.CLOSURE_CSS_NAME_MAP_FN(a) : a;
+goog.string.internal.caseInsensitiveContains = function (a, b) {
+  return goog.string.internal.contains(a.toLowerCase(), b.toLowerCase());
 };
 
-goog.setCssNameMapping = function (a, b) {
-  goog.cssNameMapping_ = a;
-  goog.cssNameMappingStyle_ = b;
+goog.string.internal.compareVersions = function (a, b) {
+  var c = 0;
+  a = goog.string.internal.trim(String(a)).split(".");
+  b = goog.string.internal.trim(String(b)).split(".");
+
+  for (var d = Math.max(a.length, b.length), e = 0; 0 == c && e < d; e++) {
+    var f = a[e] || "",
+        g = b[e] || "";
+
+    do {
+      f = /(\d*)(\D*)(.*)/.exec(f) || ["", "", "", ""];
+      g = /(\d*)(\D*)(.*)/.exec(g) || ["", "", "", ""];
+      if (0 == f[0].length && 0 == g[0].length) break;
+      c = 0 == f[1].length ? 0 : parseInt(f[1], 10);
+      var h = 0 == g[1].length ? 0 : parseInt(g[1], 10);
+      c = goog.string.internal.compareElements_(c, h) || goog.string.internal.compareElements_(0 == f[2].length, 0 == g[2].length) || goog.string.internal.compareElements_(f[2], g[2]);
+      f = f[3];
+      g = g[3];
+    } while (0 == c);
+  }
+
+  return c;
 };
 
-!COMPILED && goog.global.CLOSURE_CSS_NAME_MAPPING && (goog.cssNameMapping_ = goog.global.CLOSURE_CSS_NAME_MAPPING);
+goog.string.internal.compareElements_ = function (a, b) {
+  return a < b ? -1 : a > b ? 1 : 0;
+};
 
-goog.getMsg = function (a, b, c) {
-  c && c.html && (a = a.replace(/</g, "&lt;"));
-  b && (a = a.replace(/\{\$([^}]+)}/g, function (a, c) {
-    return null != b && c in b ? b[c] : a;
-  }));
-  return a;
+goog.html.SafeUrl = function () {
+  this.privateDoNotAccessOrElseSafeUrlWrappedValue_ = "";
+  this.SAFE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;
 };
 
-goog.getMsgWithFallback = function (a, b) {
-  return a;
+goog.html.SafeUrl.INNOCUOUS_STRING = "about:invalid#zClosurez";
+goog.html.SafeUrl.prototype.implementsGoogStringTypedString = !0;
+
+goog.html.SafeUrl.prototype.getTypedStringValue = function () {
+  return this.privateDoNotAccessOrElseSafeUrlWrappedValue_.toString();
 };
 
-goog.exportSymbol = function (a, b, c) {
-  goog.exportPath_(a, b, c);
+goog.html.SafeUrl.prototype.implementsGoogI18nBidiDirectionalString = !0;
+
+goog.html.SafeUrl.prototype.getDirection = function () {
+  return goog.i18n.bidi.Dir.LTR;
 };
 
-goog.exportProperty = function (a, b, c) {
-  a[b] = c;
+goog.DEBUG && (goog.html.SafeUrl.prototype.toString = function () {
+  return "SafeUrl{" + this.privateDoNotAccessOrElseSafeUrlWrappedValue_ + "}";
+});
+
+goog.html.SafeUrl.unwrap = function (a) {
+  return goog.html.SafeUrl.unwrapTrustedURL(a).toString();
 };
 
-goog.inherits = function (a, b) {
-  function c() {}
+goog.html.SafeUrl.unwrapTrustedURL = function (a) {
+  if (a instanceof goog.html.SafeUrl && a.constructor === goog.html.SafeUrl && a.SAFE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ === goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) return a.privateDoNotAccessOrElseSafeUrlWrappedValue_;
+  goog.asserts.fail("expected object of type SafeUrl, got '" + a + "' of type " + goog.typeOf(a));
+  return "type_error:SafeUrl";
+};
 
-  c.prototype = b.prototype;
-  a.superClass_ = b.prototype;
-  a.prototype = new c();
-  a.prototype.constructor = a;
+goog.html.SafeUrl.fromConstant = function (a) {
+  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(goog.string.Const.unwrap(a));
+};
 
-  a.base = function (a, c, f) {
-    for (var d = Array(arguments.length - 2), e = 2; e < arguments.length; e++) d[e - 2] = arguments[e];
+goog.html.SAFE_MIME_TYPE_PATTERN_ = /^(?:audio\/(?:3gpp2|3gpp|aac|L16|midi|mp3|mp4|mpeg|oga|ogg|opus|x-m4a|x-wav|wav|webm)|image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp|x-icon)|text\/csv|video\/(?:mpeg|mp4|ogg|webm|quicktime))(?:;\w+=(?:\w+|"[\w;=]+"))*$/i;
 
-    return b.prototype[c].apply(a, d);
-  };
+goog.html.SafeUrl.isSafeMimeType = function (a) {
+  return goog.html.SAFE_MIME_TYPE_PATTERN_.test(a);
 };
 
-goog.base = function (a, b, c) {
-  var d = arguments.callee.caller;
-  if (goog.STRICT_MODE_COMPATIBLE || goog.DEBUG && !d) throw Error("arguments.caller not defined.  goog.base() cannot be used with strict mode code. See http://www.ecma-international.org/ecma-262/5.1/#sec-C");
+goog.html.SafeUrl.fromBlob = function (a) {
+  a = goog.html.SAFE_MIME_TYPE_PATTERN_.test(a.type) ? goog.fs.url.createObjectUrl(a) : goog.html.SafeUrl.INNOCUOUS_STRING;
+  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a);
+};
 
-  if ("undefined" !== typeof d.superClass_) {
-    for (var e = Array(arguments.length - 1), f = 1; f < arguments.length; f++) e[f - 1] = arguments[f];
+goog.html.DATA_URL_PATTERN_ = /^data:([^,]*);base64,[a-z0-9+\/]+=*$/i;
 
-    return d.superClass_.constructor.apply(a, e);
-  }
+goog.html.SafeUrl.fromDataUrl = function (a) {
+  a = a.replace(/(%0A|%0D)/g, "");
+  var b = a.match(goog.html.DATA_URL_PATTERN_);
+  b = b && goog.html.SAFE_MIME_TYPE_PATTERN_.test(b[1]);
+  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(b ? a : goog.html.SafeUrl.INNOCUOUS_STRING);
+};
 
-  if ("string" != typeof b && "symbol" != typeof b) throw Error("method names provided to goog.base must be a string or a symbol");
-  e = Array(arguments.length - 2);
+goog.html.SafeUrl.fromTelUrl = function (a) {
+  goog.string.internal.caseInsensitiveStartsWith(a, "tel:") || (a = goog.html.SafeUrl.INNOCUOUS_STRING);
+  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a);
+};
 
-  for (f = 2; f < arguments.length; f++) e[f - 2] = arguments[f];
+goog.html.SIP_URL_PATTERN_ = /^sip[s]?:[+a-z0-9_.!$%&'*\/=^`{|}~-]+@([a-z0-9-]+\.)+[a-z0-9]{2,63}$/i;
 
-  f = !1;
+goog.html.SafeUrl.fromSipUrl = function (a) {
+  goog.html.SIP_URL_PATTERN_.test(decodeURIComponent(a)) || (a = goog.html.SafeUrl.INNOCUOUS_STRING);
+  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a);
+};
 
-  for (var g = a.constructor.prototype; g; g = Object.getPrototypeOf(g)) if (g[b] === d) f = !0;else if (f) return g[b].apply(a, e);
+goog.html.SafeUrl.fromFacebookMessengerUrl = function (a) {
+  goog.string.internal.caseInsensitiveStartsWith(a, "fb-messenger://share") || (a = goog.html.SafeUrl.INNOCUOUS_STRING);
+  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a);
+};
 
-  if (a[b] === d) return a.constructor.prototype[b].apply(a, e);
-  throw Error("goog.base called from a method of one name to a method of a different name");
+goog.html.SafeUrl.fromWhatsAppUrl = function (a) {
+  goog.string.internal.caseInsensitiveStartsWith(a, "whatsapp://send") || (a = goog.html.SafeUrl.INNOCUOUS_STRING);
+  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a);
 };
 
-goog.scope = function (a) {
-  if (goog.isInModuleLoader_()) throw Error("goog.scope is not supported within a module.");
-  a.call(goog.global);
+goog.html.SafeUrl.fromSmsUrl = function (a) {
+  goog.string.internal.caseInsensitiveStartsWith(a, "sms:") && goog.html.SafeUrl.isSmsUrlBodyValid_(a) || (a = goog.html.SafeUrl.INNOCUOUS_STRING);
+  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a);
 };
 
-COMPILED || (goog.global.COMPILED = COMPILED);
+goog.html.SafeUrl.isSmsUrlBodyValid_ = function (a) {
+  var b = a.indexOf("#");
+  0 < b && (a = a.substring(0, b));
+  b = a.match(/[?&]body=/gi);
+  if (!b) return !0;
+  if (1 < b.length) return !1;
+  a = a.match(/[?&]body=([^&]*)/)[1];
+  if (!a) return !0;
 
-goog.defineClass = function (a, b) {
-  var c = b.constructor,
-      d = b.statics;
-  c && c != Object.prototype.constructor || (c = function () {
-    throw Error("cannot instantiate an interface (no constructor defined).");
-  });
-  c = goog.defineClass.createSealingConstructor_(c, a);
-  a && goog.inherits(c, a);
-  delete b.constructor;
-  delete b.statics;
-  goog.defineClass.applyProperties_(c.prototype, b);
-  null != d && (d instanceof Function ? d(c) : goog.defineClass.applyProperties_(c, d));
-  return c;
+  try {
+    decodeURIComponent(a);
+  } catch (c) {
+    return !1;
+  }
+
+  return /^(?:[a-z0-9\-_.~]|%[0-9a-f]{2})+$/i.test(a);
 };
 
-goog.defineClass.SEAL_CLASS_INSTANCES = goog.DEBUG;
+goog.html.SafeUrl.fromSshUrl = function (a) {
+  goog.string.internal.caseInsensitiveStartsWith(a, "ssh://") || (a = goog.html.SafeUrl.INNOCUOUS_STRING);
+  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a);
+};
 
-goog.defineClass.createSealingConstructor_ = function (a, b) {
-  if (!goog.defineClass.SEAL_CLASS_INSTANCES) return a;
+goog.html.SafeUrl.sanitizeChromeExtensionUrl = function (a, b) {
+  return goog.html.SafeUrl.sanitizeExtensionUrl_(/^chrome-extension:\/\/([^\/]+)\//, a, b);
+};
 
-  var c = !goog.defineClass.isUnsealable_(b),
-      d = function () {
-    var b = a.apply(this, arguments) || this;
-    b[goog.UID_PROPERTY_] = b[goog.UID_PROPERTY_];
-    this.constructor === d && c && Object.seal instanceof Function && Object.seal(b);
-    return b;
-  };
+goog.html.SafeUrl.sanitizeFirefoxExtensionUrl = function (a, b) {
+  return goog.html.SafeUrl.sanitizeExtensionUrl_(/^moz-extension:\/\/([^\/]+)\//, a, b);
+};
 
-  return d;
+goog.html.SafeUrl.sanitizeEdgeExtensionUrl = function (a, b) {
+  return goog.html.SafeUrl.sanitizeExtensionUrl_(/^ms-browser-extension:\/\/([^\/]+)\//, a, b);
 };
 
-goog.defineClass.isUnsealable_ = function (a) {
-  return a && a.prototype && a.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_];
+goog.html.SafeUrl.sanitizeExtensionUrl_ = function (a, b, c) {
+  (a = a.exec(b)) ? (a = a[1], -1 == (c instanceof goog.string.Const ? [goog.string.Const.unwrap(c)] : c.map(function (a) {
+    return goog.string.Const.unwrap(a);
+  })).indexOf(a) && (b = goog.html.SafeUrl.INNOCUOUS_STRING)) : b = goog.html.SafeUrl.INNOCUOUS_STRING;
+  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(b);
 };
 
-goog.defineClass.OBJECT_PROTOTYPE_FIELDS_ = "constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");
+goog.html.SafeUrl.fromTrustedResourceUrl = function (a) {
+  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(goog.html.TrustedResourceUrl.unwrap(a));
+};
 
-goog.defineClass.applyProperties_ = function (a, b) {
-  for (var c in b) Object.prototype.hasOwnProperty.call(b, c) && (a[c] = b[c]);
+goog.html.SAFE_URL_PATTERN_ = /^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;
+goog.html.SafeUrl.SAFE_URL_PATTERN = goog.html.SAFE_URL_PATTERN_;
 
-  for (var d = 0; d < goog.defineClass.OBJECT_PROTOTYPE_FIELDS_.length; d++) c = goog.defineClass.OBJECT_PROTOTYPE_FIELDS_[d], Object.prototype.hasOwnProperty.call(b, c) && (a[c] = b[c]);
+goog.html.SafeUrl.sanitize = function (a) {
+  if (a instanceof goog.html.SafeUrl) return a;
+  a = "object" == typeof a && a.implementsGoogStringTypedString ? a.getTypedStringValue() : String(a);
+  goog.html.SAFE_URL_PATTERN_.test(a) || (a = goog.html.SafeUrl.INNOCUOUS_STRING);
+  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a);
 };
 
-goog.tagUnsealableClass = function (a) {
-  !COMPILED && goog.defineClass.SEAL_CLASS_INSTANCES && (a.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_] = !0);
+goog.html.SafeUrl.sanitizeAssertUnchanged = function (a, b) {
+  if (a instanceof goog.html.SafeUrl) return a;
+  a = "object" == typeof a && a.implementsGoogStringTypedString ? a.getTypedStringValue() : String(a);
+  if (b && /^data:/i.test(a) && (b = goog.html.SafeUrl.fromDataUrl(a), b.getTypedStringValue() == a)) return b;
+  goog.asserts.assert(goog.html.SAFE_URL_PATTERN_.test(a), "%s does not match the safe URL pattern", a) || (a = goog.html.SafeUrl.INNOCUOUS_STRING);
+  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a);
 };
 
-goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_ = "goog_defineClass_legacy_unsealable";
-!COMPILED && goog.DEPENDENCIES_ENABLED && (goog.inHtmlDocument_ = function () {
-  var a = goog.global.document;
-  return null != a && "write" in a;
-}, goog.isDocumentLoading_ = function () {
-  var a = goog.global.document;
-  return a.attachEvent ? "complete" != a.readyState : "loading" == a.readyState;
-}, goog.findBasePath_ = function () {
-  if (goog.isDef(goog.global.CLOSURE_BASE_PATH) && goog.isString(goog.global.CLOSURE_BASE_PATH)) goog.basePath = goog.global.CLOSURE_BASE_PATH;else if (goog.inHtmlDocument_()) {
-    var a = goog.global.document,
-        b = a.currentScript;
-    a = b ? [b] : a.getElementsByTagName("SCRIPT");
+goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = {};
 
-    for (b = a.length - 1; 0 <= b; --b) {
-      var c = a[b].src,
-          d = c.lastIndexOf("?");
-      d = -1 == d ? c.length : d;
+goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse = function (a) {
+  var b = new goog.html.SafeUrl();
+  b.privateDoNotAccessOrElseSafeUrlWrappedValue_ = goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY ? goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createURL(a) : a;
+  return b;
+};
 
-      if ("base.js" == c.substr(d - 7, 7)) {
-        goog.basePath = c.substr(0, d - 7);
-        break;
-      }
-    }
-  }
-}, goog.findBasePath_(), goog.Transpiler = function () {
-  this.requiresTranspilation_ = null;
-  this.transpilationTarget_ = goog.TRANSPILE_TO_LANGUAGE;
-}, goog.Transpiler.prototype.createRequiresTranspilation_ = function () {
-  function a(a, b) {
-    e ? d[a] = !0 : b() ? (c = a, d[a] = !1) : e = d[a] = !0;
-  }
+goog.html.SafeUrl.ABOUT_BLANK = goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse("about:blank");
 
-  function b(a) {
-    try {
-      return !!eval(a);
-    } catch (h) {
-      return !1;
-    }
-  }
+goog.html.SafeStyle = function () {
+  this.privateDoNotAccessOrElseSafeStyleWrappedValue_ = "";
+  this.SAFE_STYLE_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;
+};
 
-  var c = "es3",
-      d = {
-    es3: !1
-  },
-      e = !1,
-      f = goog.global.navigator && goog.global.navigator.userAgent ? goog.global.navigator.userAgent : "";
-  a("es5", function () {
-    return b("[1,].length==1");
-  });
-  a("es6", function () {
-    return f.match(/Edge\/(\d+)(\.\d)*/i) ? !1 : b('(()=>{"use strict";class X{constructor(){if(new.target!=String)throw 1;this.x=42}}let q=Reflect.construct(X,[],String);if(q.x!=42||!(q instanceof String))throw 1;for(const a of[2,3]){if(a==2)continue;function f(z={a}){let a=0;return z.a}{function f(){return 0;}}return f()==3}})()');
-  });
-  a("es7", function () {
-    return b("2 ** 2 == 4");
-  });
-  a("es8", function () {
-    return b("async () => 1, true");
-  });
-  a("es9", function () {
-    return b("({...rest} = {}), true");
-  });
-  a("es_next", function () {
-    return !1;
-  });
-  return {
-    target: c,
-    map: d
-  };
-}, goog.Transpiler.prototype.needsTranspile = function (a, b) {
-  if ("always" == goog.TRANSPILE) return !0;
-  if ("never" == goog.TRANSPILE) return !1;
+goog.html.SafeStyle.prototype.implementsGoogStringTypedString = !0;
+goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = {};
 
-  if (!this.requiresTranspilation_) {
-    var c = this.createRequiresTranspilation_();
-    this.requiresTranspilation_ = c.map;
-    this.transpilationTarget_ = this.transpilationTarget_ || c.target;
-  }
+goog.html.SafeStyle.fromConstant = function (a) {
+  a = goog.string.Const.unwrap(a);
+  if (0 === a.length) return goog.html.SafeStyle.EMPTY;
+  goog.asserts.assert(goog.string.internal.endsWith(a, ";"), "Last character of style string is not ';': " + a);
+  goog.asserts.assert(goog.string.internal.contains(a, ":"), "Style string must contain at least one ':', to specify a \"name: value\" pair: " + a);
+  return goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(a);
+};
 
-  if (a in this.requiresTranspilation_) return this.requiresTranspilation_[a] ? !0 : !goog.inHtmlDocument_() || "es6" != b || "noModule" in goog.global.document.createElement("script") ? !1 : !0;
-  throw Error("Unknown language mode: " + a);
-}, goog.Transpiler.prototype.transpile = function (a, b) {
-  return goog.transpile_(a, b, this.transpilationTarget_);
-}, goog.transpiler_ = new goog.Transpiler(), goog.protectScriptTag_ = function (a) {
-  return a.replace(/<\/(SCRIPT)/ig, "\\x3c/$1");
-}, goog.DebugLoader_ = function () {
-  this.dependencies_ = {};
-  this.idToPath_ = {};
-  this.written_ = {};
-  this.loadingDeps_ = [];
-  this.depsToLoad_ = [];
-  this.paused_ = !1;
-  this.factory_ = new goog.DependencyFactory(goog.transpiler_);
-  this.deferredCallbacks_ = {};
-  this.deferredQueue_ = [];
-}, goog.DebugLoader_.prototype.bootstrap = function (a, b) {
-  function c() {
-    d && (goog.global.setTimeout(d, 0), d = null);
-  }
+goog.html.SafeStyle.prototype.getTypedStringValue = function () {
+  return this.privateDoNotAccessOrElseSafeStyleWrappedValue_;
+};
 
-  var d = b;
+goog.DEBUG && (goog.html.SafeStyle.prototype.toString = function () {
+  return "SafeStyle{" + this.privateDoNotAccessOrElseSafeStyleWrappedValue_ + "}";
+});
 
-  if (a.length) {
-    b = [];
+goog.html.SafeStyle.unwrap = function (a) {
+  if (a instanceof goog.html.SafeStyle && a.constructor === goog.html.SafeStyle && a.SAFE_STYLE_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ === goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) return a.privateDoNotAccessOrElseSafeStyleWrappedValue_;
+  goog.asserts.fail("expected object of type SafeStyle, got '" + a + "' of type " + goog.typeOf(a));
+  return "type_error:SafeStyle";
+};
 
-    for (var e = 0; e < a.length; e++) {
-      var f = this.getPathFromDeps_(a[e]);
-      if (!f) throw Error("Unregonized namespace: " + a[e]);
-      b.push(this.dependencies_[f]);
-    }
+goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse = function (a) {
+  return new goog.html.SafeStyle().initSecurityPrivateDoNotAccessOrElse_(a);
+};
 
-    f = goog.require;
-    var g = 0;
+goog.html.SafeStyle.prototype.initSecurityPrivateDoNotAccessOrElse_ = function (a) {
+  this.privateDoNotAccessOrElseSafeStyleWrappedValue_ = a;
+  return this;
+};
 
-    for (e = 0; e < a.length; e++) f(a[e]), b[e].onLoad(function () {
-      ++g == a.length && c();
-    });
-  } else c();
-}, goog.DebugLoader_.prototype.loadClosureDeps = function () {
-  this.depsToLoad_.push(this.factory_.createDependency(goog.normalizePath_(goog.basePath + "deps.js"), "deps.js", [], [], {}, !1));
-  this.loadDeps_();
-}, goog.DebugLoader_.prototype.requested = function (a, b) {
-  (a = this.getPathFromDeps_(a)) && (b || this.areDepsLoaded_(this.dependencies_[a].requires)) && (b = this.deferredCallbacks_[a]) && (delete this.deferredCallbacks_[a], b());
-}, goog.DebugLoader_.prototype.setDependencyFactory = function (a) {
-  this.factory_ = a;
-}, goog.DebugLoader_.prototype.load_ = function (a) {
-  if (this.getPathFromDeps_(a)) {
-    var b = this,
-        c = [],
-        d = function (a) {
-      var e = b.getPathFromDeps_(a);
-      if (!e) throw Error("Bad dependency path or symbol: " + a);
+goog.html.SafeStyle.EMPTY = goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse("");
+goog.html.SafeStyle.INNOCUOUS_STRING = "zClosurez";
 
-      if (!b.written_[e]) {
-        b.written_[e] = !0;
-        a = b.dependencies_[e];
+goog.html.SafeStyle.create = function (a) {
+  var b = "",
+      c;
 
-        for (e = 0; e < a.requires.length; e++) goog.isProvided_(a.requires[e]) || d(a.requires[e]);
+  for (c in a) {
+    if (!/^[-_a-zA-Z0-9]+$/.test(c)) throw Error("Name allows only [-_a-zA-Z0-9], got: " + c);
+    var d = a[c];
+    null != d && (d = goog.isArray(d) ? goog.array.map(d, goog.html.SafeStyle.sanitizePropertyValue_).join(" ") : goog.html.SafeStyle.sanitizePropertyValue_(d), b += c + ":" + d + ";");
+  }
 
-        c.push(a);
-      }
-    };
+  return b ? goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(b) : goog.html.SafeStyle.EMPTY;
+};
 
-    d(a);
-    a = !!this.depsToLoad_.length;
-    this.depsToLoad_ = this.depsToLoad_.concat(c);
-    this.paused_ || a || this.loadDeps_();
-  } else throw a = "goog.require could not find: " + a, goog.logToConsole_(a), Error(a);
-}, goog.DebugLoader_.prototype.loadDeps_ = function () {
-  for (var a = this, b = this.paused_; this.depsToLoad_.length && !b;) (function () {
-    var c = !1,
-        d = a.depsToLoad_.shift(),
-        e = !1;
-    a.loading_(d);
-    var f = {
-      pause: function () {
-        if (c) throw Error("Cannot call pause after the call to load.");
-        b = !0;
-      },
-      resume: function () {
-        c ? a.resume_() : b = !1;
-      },
-      loaded: function () {
-        if (e) throw Error("Double call to loaded.");
-        e = !0;
-        a.loaded_(d);
-      },
-      pending: function () {
-        for (var b = [], c = 0; c < a.loadingDeps_.length; c++) b.push(a.loadingDeps_[c]);
+goog.html.SafeStyle.sanitizePropertyValue_ = function (a) {
+  if (a instanceof goog.html.SafeUrl) return 'url("' + goog.html.SafeUrl.unwrap(a).replace(/</g, "%3c").replace(/[\\"]/g, "\\$&") + '")';
+  a = a instanceof goog.string.Const ? goog.string.Const.unwrap(a) : goog.html.SafeStyle.sanitizePropertyValueString_(String(a));
+  if (/[{;}]/.test(a)) throw new goog.asserts.AssertionError("Value does not allow [{;}], got: %s.", [a]);
+  return a;
+};
 
-        return b;
-      },
-      setModuleState: function (a) {
-        goog.moduleLoaderState_ = {
-          type: a,
-          moduleName: "",
-          declareLegacyNamespace: !1
-        };
-      },
-      registerEs6ModuleExports: function (a, b, c) {
-        c && (goog.loadedModules_[c] = {
-          exports: b,
-          type: goog.ModuleType.ES6,
-          moduleId: c || ""
-        });
-      },
-      registerGoogModuleExports: function (a, b) {
-        goog.loadedModules_[a] = {
-          exports: b,
-          type: goog.ModuleType.GOOG,
-          moduleId: a
-        };
-      },
-      clearModuleState: function () {
-        goog.moduleLoaderState_ = null;
-      },
-      defer: function (b) {
-        if (c) throw Error("Cannot register with defer after the call to load.");
-        a.defer_(d, b);
-      },
-      areDepsLoaded: function () {
-        return a.areDepsLoaded_(d.requires);
-      }
-    };
+goog.html.SafeStyle.sanitizePropertyValueString_ = function (a) {
+  var b = a.replace(goog.html.SafeStyle.FUNCTIONS_RE_, "$1").replace(goog.html.SafeStyle.FUNCTIONS_RE_, "$1").replace(goog.html.SafeStyle.URL_RE_, "url");
 
-    try {
-      d.load(f);
-    } finally {
-      c = !0;
-    }
-  })();
+  if (goog.html.SafeStyle.VALUE_RE_.test(b)) {
+    if (goog.html.SafeStyle.COMMENT_RE_.test(a)) return goog.asserts.fail("String value disallows comments, got: " + a), goog.html.SafeStyle.INNOCUOUS_STRING;
+    if (!goog.html.SafeStyle.hasBalancedQuotes_(a)) return goog.asserts.fail("String value requires balanced quotes, got: " + a), goog.html.SafeStyle.INNOCUOUS_STRING;
+    if (!goog.html.SafeStyle.hasBalancedSquareBrackets_(a)) return goog.asserts.fail("String value requires balanced square brackets and one identifier per pair of brackets, got: " + a), goog.html.SafeStyle.INNOCUOUS_STRING;
+  } else return goog.asserts.fail("String value allows only " + goog.html.SafeStyle.VALUE_ALLOWED_CHARS_ + " and simple functions, got: " + a), goog.html.SafeStyle.INNOCUOUS_STRING;
 
-  b && this.pause_();
-}, goog.DebugLoader_.prototype.pause_ = function () {
-  this.paused_ = !0;
-}, goog.DebugLoader_.prototype.resume_ = function () {
-  this.paused_ && (this.paused_ = !1, this.loadDeps_());
-}, goog.DebugLoader_.prototype.loading_ = function (a) {
-  this.loadingDeps_.push(a);
-}, goog.DebugLoader_.prototype.loaded_ = function (a) {
-  for (var b = 0; b < this.loadingDeps_.length; b++) if (this.loadingDeps_[b] == a) {
-    this.loadingDeps_.splice(b, 1);
-    break;
-  }
+  return goog.html.SafeStyle.sanitizeUrl_(a);
+};
 
-  for (b = 0; b < this.deferredQueue_.length; b++) if (this.deferredQueue_[b] == a.path) {
-    this.deferredQueue_.splice(b, 1);
-    break;
+goog.html.SafeStyle.hasBalancedQuotes_ = function (a) {
+  for (var b = !0, c = !0, d = 0; d < a.length; d++) {
+    var e = a.charAt(d);
+    "'" == e && c ? b = !b : '"' == e && b && (c = !c);
   }
 
-  if (this.loadingDeps_.length == this.deferredQueue_.length && !this.depsToLoad_.length) for (; this.deferredQueue_.length;) this.requested(this.deferredQueue_.shift(), !0);
-  a.loaded();
-}, goog.DebugLoader_.prototype.areDepsLoaded_ = function (a) {
-  for (var b = 0; b < a.length; b++) {
-    var c = this.getPathFromDeps_(a[b]);
-    if (!c || !(c in this.deferredCallbacks_ || goog.isProvided_(a[b]))) return !1;
-  }
+  return b && c;
+};
 
-  return !0;
-}, goog.DebugLoader_.prototype.getPathFromDeps_ = function (a) {
-  return a in this.idToPath_ ? this.idToPath_[a] : a in this.dependencies_ ? a : null;
-}, goog.DebugLoader_.prototype.defer_ = function (a, b) {
-  this.deferredCallbacks_[a.path] = b;
-  this.deferredQueue_.push(a.path);
-}, goog.LoadController = function () {}, goog.LoadController.prototype.pause = function () {}, goog.LoadController.prototype.resume = function () {}, goog.LoadController.prototype.loaded = function () {}, goog.LoadController.prototype.pending = function () {}, goog.LoadController.prototype.registerEs6ModuleExports = function (a, b, c) {}, goog.LoadController.prototype.setModuleState = function (a) {}, goog.LoadController.prototype.clearModuleState = function () {}, goog.LoadController.prototype.defer = function (a) {}, goog.LoadController.prototype.areDepsLoaded = function () {}, goog.Dependency = function (a, b, c, d, e) {
-  this.path = a;
-  this.relativePath = b;
-  this.provides = c;
-  this.requires = d;
-  this.loadFlags = e;
-  this.loaded_ = !1;
-  this.loadCallbacks_ = [];
-}, goog.Dependency.prototype.getPathName = function () {
-  var a = this.path,
-      b = a.indexOf("://");
-  0 <= b && (a = a.substring(b + 3), b = a.indexOf("/"), 0 <= b && (a = a.substring(b + 1)));
-  return a;
-}, goog.Dependency.prototype.onLoad = function (a) {
-  this.loaded_ ? a() : this.loadCallbacks_.push(a);
-}, goog.Dependency.prototype.loaded = function () {
-  this.loaded_ = !0;
-  var a = this.loadCallbacks_;
-  this.loadCallbacks_ = [];
+goog.html.SafeStyle.hasBalancedSquareBrackets_ = function (a) {
+  for (var b = !0, c = /^[-_a-zA-Z0-9]$/, d = 0; d < a.length; d++) {
+    var e = a.charAt(d);
+
+    if ("]" == e) {
+      if (b) return !1;
+      b = !0;
+    } else if ("[" == e) {
+      if (!b) return !1;
+      b = !1;
+    } else if (!b && !c.test(e)) return !1;
+  }
 
-  for (var b = 0; b < a.length; b++) a[b]();
-}, goog.Dependency.defer_ = !1, goog.Dependency.callbackMap_ = {}, goog.Dependency.registerCallback_ = function (a) {
-  var b = Math.random().toString(32);
-  goog.Dependency.callbackMap_[b] = a;
   return b;
-}, goog.Dependency.unregisterCallback_ = function (a) {
-  delete goog.Dependency.callbackMap_[a];
-}, goog.Dependency.callback_ = function (a, b) {
-  if (a in goog.Dependency.callbackMap_) {
-    for (var c = goog.Dependency.callbackMap_[a], d = [], e = 1; e < arguments.length; e++) d.push(arguments[e]);
+};
 
-    c.apply(void 0, d);
-  } else throw Error("Callback key " + a + " does not exist (was base.js loaded more than once?).");
-}, goog.Dependency.prototype.load = function (a) {
-  if (goog.global.CLOSURE_IMPORT_SCRIPT) goog.global.CLOSURE_IMPORT_SCRIPT(this.path) ? a.loaded() : a.pause();else if (goog.inHtmlDocument_()) {
-    var b = goog.global.document;
+goog.html.SafeStyle.VALUE_ALLOWED_CHARS_ = "[-,.\"'%_!# a-zA-Z0-9\\[\\]]";
+goog.html.SafeStyle.VALUE_RE_ = new RegExp("^" + goog.html.SafeStyle.VALUE_ALLOWED_CHARS_ + "+$");
+goog.html.SafeStyle.URL_RE_ = /\b(url\([ \t\n]*)('[ -&(-\[\]-~]*'|"[ !#-\[\]-~]*"|[!#-&*-\[\]-~]*)([ \t\n]*\))/g;
+goog.html.SafeStyle.FUNCTIONS_RE_ = /\b(hsl|hsla|rgb|rgba|matrix|calc|minmax|fit-content|repeat|(rotate|scale|translate)(X|Y|Z|3d)?)\([-+*/0-9a-z.%\[\], ]+\)/g;
+goog.html.SafeStyle.COMMENT_RE_ = /\/\*/;
 
-    if ("complete" == b.readyState && !goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING) {
-      if (/\bdeps.js$/.test(this.path)) {
-        a.loaded();
-        return;
-      }
+goog.html.SafeStyle.sanitizeUrl_ = function (a) {
+  return a.replace(goog.html.SafeStyle.URL_RE_, function (a, c, d, e) {
+    var b = "";
+    d = d.replace(/^(['"])(.*)\1$/, function (a, c, d) {
+      b = c;
+      return d;
+    });
+    a = goog.html.SafeUrl.sanitize(d).getTypedStringValue();
+    return c + b + a + b + e;
+  });
+};
 
-      throw Error('Cannot write "' + this.path + '" after document load');
-    }
+goog.html.SafeStyle.concat = function (a) {
+  var b = "",
+      c = function (a) {
+    goog.isArray(a) ? goog.array.forEach(a, c) : b += goog.html.SafeStyle.unwrap(a);
+  };
 
-    if (!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING && goog.isDocumentLoading_()) {
-      var c = goog.Dependency.registerCallback_(function (b) {
-        goog.DebugLoader_.IS_OLD_IE_ && "complete" != b.readyState || (goog.Dependency.unregisterCallback_(c), a.loaded());
-      }),
-          d = !goog.DebugLoader_.IS_OLD_IE_ && goog.getScriptNonce() ? ' nonce="' + goog.getScriptNonce() + '"' : "";
-      d = '<script src="' + this.path + '" ' + (goog.DebugLoader_.IS_OLD_IE_ ? "onreadystatechange" : "onload") + "=\"goog.Dependency.callback_('" + c + '\', this)" type="text/javascript" ' + (goog.Dependency.defer_ ? "defer" : "") + d + ">\x3c/script>";
-      b.write(goog.TRUSTED_TYPES_POLICY_ ? goog.TRUSTED_TYPES_POLICY_.createHTML(d) : d);
-    } else {
-      var e = b.createElement("script");
-      e.defer = goog.Dependency.defer_;
-      e.async = !1;
-      e.type = "text/javascript";
-      (d = goog.getScriptNonce()) && e.setAttribute("nonce", d);
-      goog.DebugLoader_.IS_OLD_IE_ ? (a.pause(), e.onreadystatechange = function () {
-        if ("loaded" == e.readyState || "complete" == e.readyState) a.loaded(), a.resume();
-      }) : e.onload = function () {
-        e.onload = null;
-        a.loaded();
-      };
-      e.src = goog.TRUSTED_TYPES_POLICY_ ? goog.TRUSTED_TYPES_POLICY_.createScriptURL(this.path) : this.path;
-      b.head.appendChild(e);
-    }
-  } else goog.logToConsole_("Cannot use default debug loader outside of HTML documents."), "deps.js" == this.relativePath ? (goog.logToConsole_("Consider setting CLOSURE_IMPORT_SCRIPT before loading base.js, or setting CLOSURE_NO_DEPS to true."), a.loaded()) : a.pause();
-}, goog.Es6ModuleDependency = function (a, b, c, d, e) {
-  goog.Dependency.call(this, a, b, c, d, e);
-}, goog.inherits(goog.Es6ModuleDependency, goog.Dependency), goog.Es6ModuleDependency.prototype.load = function (a) {
-  function b(a, b) {
-    a = b ? '<script type="module" crossorigin>' + b + "\x3c/script>" : '<script type="module" crossorigin src="' + a + '">\x3c/script>';
-    d.write(goog.TRUSTED_TYPES_POLICY_ ? goog.TRUSTED_TYPES_POLICY_.createHTML(a) : a);
-  }
+  goog.array.forEach(arguments, c);
+  return b ? goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(b) : goog.html.SafeStyle.EMPTY;
+};
 
-  function c(a, b) {
-    var c = d.createElement("script");
-    c.defer = !0;
-    c.async = !1;
-    c.type = "module";
-    c.setAttribute("crossorigin", !0);
-    var e = goog.getScriptNonce();
-    e && c.setAttribute("nonce", e);
-    b ? c.textContent = goog.TRUSTED_TYPES_POLICY_ ? goog.TRUSTED_TYPES_POLICY_.createScript(b) : b : c.src = goog.TRUSTED_TYPES_POLICY_ ? goog.TRUSTED_TYPES_POLICY_.createScriptURL(a) : a;
-    d.head.appendChild(c);
-  }
+goog.html.SafeStyleSheet = function () {
+  this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_ = "";
+  this.SAFE_STYLE_SHEET_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;
+};
 
-  if (goog.global.CLOSURE_IMPORT_SCRIPT) goog.global.CLOSURE_IMPORT_SCRIPT(this.path) ? a.loaded() : a.pause();else if (goog.inHtmlDocument_()) {
-    var d = goog.global.document,
-        e = this;
+goog.html.SafeStyleSheet.prototype.implementsGoogStringTypedString = !0;
+goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = {};
 
-    if (goog.isDocumentLoading_()) {
-      var f = b;
-      goog.Dependency.defer_ = !0;
-    } else f = c;
+goog.html.SafeStyleSheet.createRule = function (a, b) {
+  if (goog.string.internal.contains(a, "<")) throw Error("Selector does not allow '<', got: " + a);
+  var c = a.replace(/('|")((?!\1)[^\r\n\f\\]|\\[\s\S])*\1/g, "");
+  if (!/^[-_a-zA-Z0-9#.:* ,>+~[\]()=^$|]+$/.test(c)) throw Error("Selector allows only [-_a-zA-Z0-9#.:* ,>+~[\\]()=^$|] and strings, got: " + a);
+  if (!goog.html.SafeStyleSheet.hasBalancedBrackets_(c)) throw Error("() and [] in selector must be balanced, got: " + a);
+  b instanceof goog.html.SafeStyle || (b = goog.html.SafeStyle.create(b));
+  a = a + "{" + goog.html.SafeStyle.unwrap(b).replace(/</g, "\\3C ") + "}";
+  return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(a);
+};
 
-    var g = goog.Dependency.registerCallback_(function () {
-      goog.Dependency.unregisterCallback_(g);
-      a.setModuleState(goog.ModuleType.ES6);
-    });
-    f(void 0, 'goog.Dependency.callback_("' + g + '")');
-    f(this.path, void 0);
-    var h = goog.Dependency.registerCallback_(function (b) {
-      goog.Dependency.unregisterCallback_(h);
-      a.registerEs6ModuleExports(e.path, b, goog.moduleLoaderState_.moduleName);
-    });
-    f(void 0, 'import * as m from "' + this.path + '"; goog.Dependency.callback_("' + h + '", m)');
-    var k = goog.Dependency.registerCallback_(function () {
-      goog.Dependency.unregisterCallback_(k);
-      a.clearModuleState();
-      a.loaded();
-    });
-    f(void 0, 'goog.Dependency.callback_("' + k + '")');
-  } else goog.logToConsole_("Cannot use default debug loader outside of HTML documents."), a.pause();
-}, goog.TransformedDependency = function (a, b, c, d, e) {
-  goog.Dependency.call(this, a, b, c, d, e);
-  this.contents_ = null;
-  this.lazyFetch_ = !goog.inHtmlDocument_() || !("noModule" in goog.global.document.createElement("script"));
-}, goog.inherits(goog.TransformedDependency, goog.Dependency), goog.TransformedDependency.prototype.load = function (a) {
-  function b() {
-    e.contents_ = goog.loadFileSync_(e.path);
-    e.contents_ && (e.contents_ = e.transform(e.contents_), e.contents_ && (e.contents_ += "\n//# sourceURL=" + e.path));
+goog.html.SafeStyleSheet.hasBalancedBrackets_ = function (a) {
+  for (var b = {
+    "(": ")",
+    "[": "]"
+  }, c = [], d = 0; d < a.length; d++) {
+    var e = a[d];
+    if (b[e]) c.push(b[e]);else if (goog.object.contains(b, e) && c.pop() != e) return !1;
   }
 
-  function c() {
-    e.lazyFetch_ && b();
+  return 0 == c.length;
+};
 
-    if (e.contents_) {
-      f && a.setModuleState(goog.ModuleType.ES6);
+goog.html.SafeStyleSheet.concat = function (a) {
+  var b = "",
+      c = function (a) {
+    goog.isArray(a) ? goog.array.forEach(a, c) : b += goog.html.SafeStyleSheet.unwrap(a);
+  };
 
-      try {
-        var c = e.contents_;
-        e.contents_ = null;
-        goog.globalEval(c);
-        if (f) var d = goog.moduleLoaderState_.moduleName;
-      } finally {
-        f && a.clearModuleState();
-      }
+  goog.array.forEach(arguments, c);
+  return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(b);
+};
 
-      f && goog.global.$jscomp.require.ensure([e.getPathName()], function () {
-        a.registerEs6ModuleExports(e.path, goog.global.$jscomp.require(e.getPathName()), d);
-      });
-      a.loaded();
-    }
-  }
+goog.html.SafeStyleSheet.fromConstant = function (a) {
+  a = goog.string.Const.unwrap(a);
+  if (0 === a.length) return goog.html.SafeStyleSheet.EMPTY;
+  goog.asserts.assert(!goog.string.internal.contains(a, "<"), "Forbidden '<' character in style sheet string: " + a);
+  return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(a);
+};
 
-  function d() {
-    var a = goog.global.document,
-        b = goog.Dependency.registerCallback_(function () {
-      goog.Dependency.unregisterCallback_(b);
-      c();
-    }),
-        d = '<script type="text/javascript">' + goog.protectScriptTag_('goog.Dependency.callback_("' + b + '");') + "\x3c/script>";
-    a.write(goog.TRUSTED_TYPES_POLICY_ ? goog.TRUSTED_TYPES_POLICY_.createHTML(d) : d);
-  }
+goog.html.SafeStyleSheet.prototype.getTypedStringValue = function () {
+  return this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_;
+};
 
-  var e = this;
-  if (goog.global.CLOSURE_IMPORT_SCRIPT) b(), this.contents_ && goog.global.CLOSURE_IMPORT_SCRIPT("", this.contents_) ? (this.contents_ = null, a.loaded()) : a.pause();else {
-    var f = this.loadFlags.module == goog.ModuleType.ES6;
-    this.lazyFetch_ || b();
-    var g = 1 < a.pending().length,
-        h = g && goog.DebugLoader_.IS_OLD_IE_;
-    g = goog.Dependency.defer_ && (g || goog.isDocumentLoading_());
-    if (h || g) a.defer(function () {
-      c();
-    });else {
-      var k = goog.global.document;
-      h = goog.inHtmlDocument_() && "ActiveXObject" in goog.global;
+goog.DEBUG && (goog.html.SafeStyleSheet.prototype.toString = function () {
+  return "SafeStyleSheet{" + this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_ + "}";
+});
 
-      if (f && goog.inHtmlDocument_() && goog.isDocumentLoading_() && !h) {
-        goog.Dependency.defer_ = !0;
-        a.pause();
-        var l = k.onreadystatechange;
+goog.html.SafeStyleSheet.unwrap = function (a) {
+  if (a instanceof goog.html.SafeStyleSheet && a.constructor === goog.html.SafeStyleSheet && a.SAFE_STYLE_SHEET_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ === goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) return a.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_;
+  goog.asserts.fail("expected object of type SafeStyleSheet, got '" + a + "' of type " + goog.typeOf(a));
+  return "type_error:SafeStyleSheet";
+};
 
-        k.onreadystatechange = function () {
-          "interactive" == k.readyState && (k.onreadystatechange = l, c(), a.resume());
-          goog.isFunction(l) && l.apply(void 0, arguments);
-        };
-      } else !goog.DebugLoader_.IS_OLD_IE_ && goog.inHtmlDocument_() && goog.isDocumentLoading_() ? d() : c();
-    }
-  }
-}, goog.TransformedDependency.prototype.transform = function (a) {}, goog.TranspiledDependency = function (a, b, c, d, e, f) {
-  goog.TransformedDependency.call(this, a, b, c, d, e);
-  this.transpiler = f;
-}, goog.inherits(goog.TranspiledDependency, goog.TransformedDependency), goog.TranspiledDependency.prototype.transform = function (a) {
-  return this.transpiler.transpile(a, this.getPathName());
-}, goog.PreTranspiledEs6ModuleDependency = function (a, b, c, d, e) {
-  goog.TransformedDependency.call(this, a, b, c, d, e);
-}, goog.inherits(goog.PreTranspiledEs6ModuleDependency, goog.TransformedDependency), goog.PreTranspiledEs6ModuleDependency.prototype.transform = function (a) {
-  return a;
-}, goog.GoogModuleDependency = function (a, b, c, d, e, f, g) {
-  goog.TransformedDependency.call(this, a, b, c, d, e);
-  this.needsTranspile_ = f;
-  this.transpiler_ = g;
-}, goog.inherits(goog.GoogModuleDependency, goog.TransformedDependency), goog.GoogModuleDependency.prototype.transform = function (a) {
-  this.needsTranspile_ && (a = this.transpiler_.transpile(a, this.getPathName()));
-  return goog.LOAD_MODULE_USING_EVAL && goog.isDef(goog.global.JSON) ? "goog.loadModule(" + goog.global.JSON.stringify(a + "\n//# sourceURL=" + this.path + "\n") + ");" : 'goog.loadModule(function(exports) {"use strict";' + a + "\n;return exports});\n//# sourceURL=" + this.path + "\n";
-}, goog.DebugLoader_.IS_OLD_IE_ = !(goog.global.atob || !goog.global.document || !goog.global.document.all), goog.DebugLoader_.prototype.addDependency = function (a, b, c, d) {
-  b = b || [];
-  a = a.replace(/\\/g, "/");
-  var e = goog.normalizePath_(goog.basePath + a);
-  d && "boolean" !== typeof d || (d = d ? {
-    module: goog.ModuleType.GOOG
-  } : {});
-  c = this.factory_.createDependency(e, a, b, c, d, goog.transpiler_.needsTranspile(d.lang || "es3", d.module));
-  this.dependencies_[e] = c;
+goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse = function (a) {
+  return new goog.html.SafeStyleSheet().initSecurityPrivateDoNotAccessOrElse_(a);
+};
 
-  for (c = 0; c < b.length; c++) this.idToPath_[b[c]] = e;
+goog.html.SafeStyleSheet.prototype.initSecurityPrivateDoNotAccessOrElse_ = function (a) {
+  this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_ = a;
+  return this;
+};
 
-  this.idToPath_[a] = e;
-}, goog.DependencyFactory = function (a) {
-  this.transpiler = a;
-}, goog.DependencyFactory.prototype.createDependency = function (a, b, c, d, e, f) {
-  return e.module == goog.ModuleType.GOOG ? new goog.GoogModuleDependency(a, b, c, d, e, f, this.transpiler) : f ? new goog.TranspiledDependency(a, b, c, d, e, this.transpiler) : e.module == goog.ModuleType.ES6 ? "never" == goog.TRANSPILE && goog.ASSUME_ES_MODULES_TRANSPILED ? new goog.PreTranspiledEs6ModuleDependency(a, b, c, d, e) : new goog.Es6ModuleDependency(a, b, c, d, e) : new goog.Dependency(a, b, c, d, e);
-}, goog.debugLoader_ = new goog.DebugLoader_(), goog.loadClosureDeps = function () {
-  goog.debugLoader_.loadClosureDeps();
-}, goog.setDependencyFactory = function (a) {
-  goog.debugLoader_.setDependencyFactory(a);
-}, goog.global.CLOSURE_NO_DEPS || goog.debugLoader_.loadClosureDeps(), goog.bootstrap = function (a, b) {
-  goog.debugLoader_.bootstrap(a, b);
-});
-goog.TRUSTED_TYPES_POLICY_NAME = "";
+goog.html.SafeStyleSheet.EMPTY = goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse("");
+goog.labs = {};
+goog.labs.userAgent = {};
+goog.labs.userAgent.util = {};
 
-goog.identity_ = function (a) {
-  return a;
+goog.labs.userAgent.util.getNativeUserAgentString_ = function () {
+  var a = goog.labs.userAgent.util.getNavigator_();
+  return a && (a = a.userAgent) ? a : "";
 };
 
-goog.createTrustedTypesPolicy = function (a) {
-  var b = null;
-  if ("undefined" === typeof TrustedTypes || !TrustedTypes.createPolicy) return b;
+goog.labs.userAgent.util.getNavigator_ = function () {
+  return goog.global.navigator;
+};
 
-  try {
-    b = TrustedTypes.createPolicy(a, {
-      createHTML: goog.identity_,
-      createScript: goog.identity_,
-      createScriptURL: goog.identity_,
-      createURL: goog.identity_
-    });
-  } catch (c) {
-    goog.logToConsole_(c.message);
-  }
+goog.labs.userAgent.util.userAgent_ = goog.labs.userAgent.util.getNativeUserAgentString_();
 
-  return b;
+goog.labs.userAgent.util.setUserAgent = function (a) {
+  goog.labs.userAgent.util.userAgent_ = a || goog.labs.userAgent.util.getNativeUserAgentString_();
 };
 
-goog.TRUSTED_TYPES_POLICY_ = goog.TRUSTED_TYPES_POLICY_NAME ? goog.createTrustedTypesPolicy(goog.TRUSTED_TYPES_POLICY_NAME + "#base") : null;
-var jspb = {
-  BinaryConstants: {},
-  ConstBinaryMessage: function () {},
-  BinaryMessage: function () {}
+goog.labs.userAgent.util.getUserAgent = function () {
+  return goog.labs.userAgent.util.userAgent_;
 };
-jspb.BinaryConstants.FieldType = {
-  INVALID: -1,
-  DOUBLE: 1,
-  FLOAT: 2,
-  INT64: 3,
-  UINT64: 4,
-  INT32: 5,
-  FIXED64: 6,
-  FIXED32: 7,
-  BOOL: 8,
-  STRING: 9,
-  GROUP: 10,
-  MESSAGE: 11,
-  BYTES: 12,
-  UINT32: 13,
-  ENUM: 14,
-  SFIXED32: 15,
-  SFIXED64: 16,
-  SINT32: 17,
-  SINT64: 18,
-  FHASH64: 30,
-  VHASH64: 31
+
+goog.labs.userAgent.util.matchUserAgent = function (a) {
+  var b = goog.labs.userAgent.util.getUserAgent();
+  return goog.string.internal.contains(b, a);
 };
-jspb.BinaryConstants.WireType = {
-  INVALID: -1,
-  VARINT: 0,
-  FIXED64: 1,
-  DELIMITED: 2,
-  START_GROUP: 3,
-  END_GROUP: 4,
-  FIXED32: 5
+
+goog.labs.userAgent.util.matchUserAgentIgnoreCase = function (a) {
+  var b = goog.labs.userAgent.util.getUserAgent();
+  return goog.string.internal.caseInsensitiveContains(b, a);
 };
 
-jspb.BinaryConstants.FieldTypeToWireType = function (a) {
-  var b = jspb.BinaryConstants.FieldType,
-      c = jspb.BinaryConstants.WireType;
+goog.labs.userAgent.util.extractVersionTuples = function (a) {
+  for (var b = /(\w[\w ]+)\/([^\s]+)\s*(?:\((.*?)\))?/g, c = [], d; d = b.exec(a);) c.push([d[1], d[2], d[3] || void 0]);
 
-  switch (a) {
-    case b.INT32:
-    case b.INT64:
-    case b.UINT32:
-    case b.UINT64:
-    case b.SINT32:
-    case b.SINT64:
-    case b.BOOL:
-    case b.ENUM:
-    case b.VHASH64:
-      return c.VARINT;
+  return c;
+};
 
-    case b.DOUBLE:
-    case b.FIXED64:
-    case b.SFIXED64:
-    case b.FHASH64:
-      return c.FIXED64;
+goog.labs.userAgent.browser = {};
 
-    case b.STRING:
-    case b.MESSAGE:
-    case b.BYTES:
-      return c.DELIMITED;
+goog.labs.userAgent.browser.matchOpera_ = function () {
+  return goog.labs.userAgent.util.matchUserAgent("Opera");
+};
 
-    case b.FLOAT:
-    case b.FIXED32:
-    case b.SFIXED32:
-      return c.FIXED32;
+goog.labs.userAgent.browser.matchIE_ = function () {
+  return goog.labs.userAgent.util.matchUserAgent("Trident") || goog.labs.userAgent.util.matchUserAgent("MSIE");
+};
 
-    default:
-      return c.INVALID;
-  }
+goog.labs.userAgent.browser.matchEdgeHtml_ = function () {
+  return goog.labs.userAgent.util.matchUserAgent("Edge");
 };
 
-jspb.BinaryConstants.INVALID_FIELD_NUMBER = -1;
-jspb.BinaryConstants.FLOAT32_EPS = 1.401298464324817E-45;
-jspb.BinaryConstants.FLOAT32_MIN = 1.1754943508222875E-38;
-jspb.BinaryConstants.FLOAT32_MAX = 3.4028234663852886E38;
-jspb.BinaryConstants.FLOAT64_EPS = 4.9E-324;
-jspb.BinaryConstants.FLOAT64_MIN = 2.2250738585072014E-308;
-jspb.BinaryConstants.FLOAT64_MAX = 1.7976931348623157E308;
-jspb.BinaryConstants.TWO_TO_20 = 1048576;
-jspb.BinaryConstants.TWO_TO_23 = 8388608;
-jspb.BinaryConstants.TWO_TO_31 = 2147483648;
-jspb.BinaryConstants.TWO_TO_32 = 4294967296;
-jspb.BinaryConstants.TWO_TO_52 = 4503599627370496;
-jspb.BinaryConstants.TWO_TO_63 = 0x7fffffffffffffff;
-jspb.BinaryConstants.TWO_TO_64 = 1.8446744073709552E19;
-jspb.BinaryConstants.ZERO_HASH = "\x00\x00\x00\x00\x00\x00\x00\x00";
-goog.dom = {};
-goog.dom.NodeType = {
-  ELEMENT: 1,
-  ATTRIBUTE: 2,
-  TEXT: 3,
-  CDATA_SECTION: 4,
-  ENTITY_REFERENCE: 5,
-  ENTITY: 6,
-  PROCESSING_INSTRUCTION: 7,
-  COMMENT: 8,
-  DOCUMENT: 9,
-  DOCUMENT_TYPE: 10,
-  DOCUMENT_FRAGMENT: 11,
-  NOTATION: 12
-};
-goog.debug = {};
-
-goog.debug.Error = function (a) {
-  if (Error.captureStackTrace) Error.captureStackTrace(this, goog.debug.Error);else {
-    var b = Error().stack;
-    b && (this.stack = b);
-  }
-  a && (this.message = String(a));
-  this.reportErrorToServer = !0;
+goog.labs.userAgent.browser.matchEdgeChromium_ = function () {
+  return goog.labs.userAgent.util.matchUserAgent("Edg/");
 };
 
-goog.inherits(goog.debug.Error, Error);
-goog.debug.Error.prototype.name = "CustomError";
-goog.asserts = {};
-goog.asserts.ENABLE_ASSERTS = goog.DEBUG;
-
-goog.asserts.AssertionError = function (a, b) {
-  goog.debug.Error.call(this, goog.asserts.subs_(a, b));
-  this.messagePattern = a;
+goog.labs.userAgent.browser.matchOperaChromium_ = function () {
+  return goog.labs.userAgent.util.matchUserAgent("OPR");
 };
 
-goog.inherits(goog.asserts.AssertionError, goog.debug.Error);
-goog.asserts.AssertionError.prototype.name = "AssertionError";
-
-goog.asserts.DEFAULT_ERROR_HANDLER = function (a) {
-  throw a;
+goog.labs.userAgent.browser.matchFirefox_ = function () {
+  return goog.labs.userAgent.util.matchUserAgent("Firefox") || goog.labs.userAgent.util.matchUserAgent("FxiOS");
 };
 
-goog.asserts.errorHandler_ = goog.asserts.DEFAULT_ERROR_HANDLER;
-
-goog.asserts.subs_ = function (a, b) {
-  a = a.split("%s");
-
-  for (var c = "", d = a.length - 1, e = 0; e < d; e++) c += a[e] + (e < b.length ? b[e] : "%s");
-
-  return c + a[d];
+goog.labs.userAgent.browser.matchSafari_ = function () {
+  return goog.labs.userAgent.util.matchUserAgent("Safari") && !(goog.labs.userAgent.browser.matchChrome_() || goog.labs.userAgent.browser.matchCoast_() || goog.labs.userAgent.browser.matchOpera_() || goog.labs.userAgent.browser.matchEdgeHtml_() || goog.labs.userAgent.browser.matchEdgeChromium_() || goog.labs.userAgent.browser.matchOperaChromium_() || goog.labs.userAgent.browser.matchFirefox_() || goog.labs.userAgent.browser.isSilk() || goog.labs.userAgent.util.matchUserAgent("Android"));
 };
 
-goog.asserts.doAssertFailure_ = function (a, b, c, d) {
-  var e = "Assertion failed";
-
-  if (c) {
-    e += ": " + c;
-    var f = d;
-  } else a && (e += ": " + a, f = b);
-
-  a = new goog.asserts.AssertionError("" + e, f || []);
-  goog.asserts.errorHandler_(a);
+goog.labs.userAgent.browser.matchCoast_ = function () {
+  return goog.labs.userAgent.util.matchUserAgent("Coast");
 };
 
-goog.asserts.setErrorHandler = function (a) {
-  goog.asserts.ENABLE_ASSERTS && (goog.asserts.errorHandler_ = a);
+goog.labs.userAgent.browser.matchIosWebview_ = function () {
+  return (goog.labs.userAgent.util.matchUserAgent("iPad") || goog.labs.userAgent.util.matchUserAgent("iPhone")) && !goog.labs.userAgent.browser.matchSafari_() && !goog.labs.userAgent.browser.matchChrome_() && !goog.labs.userAgent.browser.matchCoast_() && !goog.labs.userAgent.browser.matchFirefox_() && goog.labs.userAgent.util.matchUserAgent("AppleWebKit");
 };
 
-goog.asserts.assert = function (a, b, c) {
-  goog.asserts.ENABLE_ASSERTS && !a && goog.asserts.doAssertFailure_("", null, b, Array.prototype.slice.call(arguments, 2));
-  return a;
+goog.labs.userAgent.browser.matchChrome_ = function () {
+  return (goog.labs.userAgent.util.matchUserAgent("Chrome") || goog.labs.userAgent.util.matchUserAgent("CriOS")) && !goog.labs.userAgent.browser.matchEdgeHtml_();
 };
 
-goog.asserts.assertExists = function (a, b, c) {
-  goog.asserts.ENABLE_ASSERTS && null == a && goog.asserts.doAssertFailure_("Expected to exist: %s.", [a], b, Array.prototype.slice.call(arguments, 2));
-  return a;
+goog.labs.userAgent.browser.matchAndroidBrowser_ = function () {
+  return goog.labs.userAgent.util.matchUserAgent("Android") && !(goog.labs.userAgent.browser.isChrome() || goog.labs.userAgent.browser.isFirefox() || goog.labs.userAgent.browser.isOpera() || goog.labs.userAgent.browser.isSilk());
 };
 
-goog.asserts.fail = function (a, b) {
-  goog.asserts.ENABLE_ASSERTS && goog.asserts.errorHandler_(new goog.asserts.AssertionError("Failure" + (a ? ": " + a : ""), Array.prototype.slice.call(arguments, 1)));
-};
+goog.labs.userAgent.browser.isOpera = goog.labs.userAgent.browser.matchOpera_;
+goog.labs.userAgent.browser.isIE = goog.labs.userAgent.browser.matchIE_;
+goog.labs.userAgent.browser.isEdge = goog.labs.userAgent.browser.matchEdgeHtml_;
+goog.labs.userAgent.browser.isEdgeChromium = goog.labs.userAgent.browser.matchEdgeChromium_;
+goog.labs.userAgent.browser.isOperaChromium = goog.labs.userAgent.browser.matchOperaChromium_;
+goog.labs.userAgent.browser.isFirefox = goog.labs.userAgent.browser.matchFirefox_;
+goog.labs.userAgent.browser.isSafari = goog.labs.userAgent.browser.matchSafari_;
+goog.labs.userAgent.browser.isCoast = goog.labs.userAgent.browser.matchCoast_;
+goog.labs.userAgent.browser.isIosWebview = goog.labs.userAgent.browser.matchIosWebview_;
+goog.labs.userAgent.browser.isChrome = goog.labs.userAgent.browser.matchChrome_;
+goog.labs.userAgent.browser.isAndroidBrowser = goog.labs.userAgent.browser.matchAndroidBrowser_;
 
-goog.asserts.assertNumber = function (a, b, c) {
-  goog.asserts.ENABLE_ASSERTS && !goog.isNumber(a) && goog.asserts.doAssertFailure_("Expected number but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
-  return a;
+goog.labs.userAgent.browser.isSilk = function () {
+  return goog.labs.userAgent.util.matchUserAgent("Silk");
 };
 
-goog.asserts.assertString = function (a, b, c) {
-  goog.asserts.ENABLE_ASSERTS && !goog.isString(a) && goog.asserts.doAssertFailure_("Expected string but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
-  return a;
-};
+goog.labs.userAgent.browser.getVersion = function () {
+  function a(a) {
+    a = goog.array.find(a, d);
+    return c[a] || "";
+  }
 
-goog.asserts.assertFunction = function (a, b, c) {
-  goog.asserts.ENABLE_ASSERTS && !goog.isFunction(a) && goog.asserts.doAssertFailure_("Expected function but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
-  return a;
+  var b = goog.labs.userAgent.util.getUserAgent();
+  if (goog.labs.userAgent.browser.isIE()) return goog.labs.userAgent.browser.getIEVersion_(b);
+  b = goog.labs.userAgent.util.extractVersionTuples(b);
+  var c = {};
+  goog.array.forEach(b, function (a) {
+    c[a[0]] = a[1];
+  });
+  var d = goog.partial(goog.object.containsKey, c);
+  return goog.labs.userAgent.browser.isOpera() ? a(["Version", "Opera"]) : goog.labs.userAgent.browser.isEdge() ? a(["Edge"]) : goog.labs.userAgent.browser.isEdgeChromium() ? a(["Edg"]) : goog.labs.userAgent.browser.isChrome() ? a(["Chrome", "CriOS"]) : (b = b[2]) && b[1] || "";
 };
 
-goog.asserts.assertObject = function (a, b, c) {
-  goog.asserts.ENABLE_ASSERTS && !goog.isObject(a) && goog.asserts.doAssertFailure_("Expected object but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
-  return a;
+goog.labs.userAgent.browser.isVersionOrHigher = function (a) {
+  return 0 <= goog.string.internal.compareVersions(goog.labs.userAgent.browser.getVersion(), a);
 };
 
-goog.asserts.assertArray = function (a, b, c) {
-  goog.asserts.ENABLE_ASSERTS && !goog.isArray(a) && goog.asserts.doAssertFailure_("Expected array but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
-  return a;
-};
+goog.labs.userAgent.browser.getIEVersion_ = function (a) {
+  var b = /rv: *([\d\.]*)/.exec(a);
+  if (b && b[1]) return b[1];
+  b = "";
+  var c = /MSIE +([\d\.]+)/.exec(a);
+  if (c && c[1]) if (a = /Trident\/(\d.\d)/.exec(a), "7.0" == c[1]) {
+    if (a && a[1]) switch (a[1]) {
+      case "4.0":
+        b = "8.0";
+        break;
 
-goog.asserts.assertBoolean = function (a, b, c) {
-  goog.asserts.ENABLE_ASSERTS && !goog.isBoolean(a) && goog.asserts.doAssertFailure_("Expected boolean but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
-  return a;
-};
+      case "5.0":
+        b = "9.0";
+        break;
 
-goog.asserts.assertElement = function (a, b, c) {
-  !goog.asserts.ENABLE_ASSERTS || goog.isObject(a) && a.nodeType == goog.dom.NodeType.ELEMENT || goog.asserts.doAssertFailure_("Expected Element but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
-  return a;
-};
+      case "6.0":
+        b = "10.0";
+        break;
 
-goog.asserts.assertInstanceof = function (a, b, c, d) {
-  !goog.asserts.ENABLE_ASSERTS || a instanceof b || goog.asserts.doAssertFailure_("Expected instanceof %s but got %s.", [goog.asserts.getType_(b), goog.asserts.getType_(a)], c, Array.prototype.slice.call(arguments, 3));
-  return a;
+      case "7.0":
+        b = "11.0";
+    } else b = "7.0";
+  } else b = c[1];
+  return b;
 };
 
-goog.asserts.assertFinite = function (a, b, c) {
-  !goog.asserts.ENABLE_ASSERTS || "number" == typeof a && isFinite(a) || goog.asserts.doAssertFailure_("Expected %s to be a finite number but it is not.", [a], b, Array.prototype.slice.call(arguments, 2));
-  return a;
+goog.html.SafeHtml = function () {
+  this.privateDoNotAccessOrElseSafeHtmlWrappedValue_ = "";
+  this.SAFE_HTML_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;
+  this.dir_ = null;
 };
 
-goog.asserts.assertObjectPrototypeIsIntact = function () {
-  for (var a in Object.prototype) goog.asserts.fail(a + " should not be enumerable in Object.prototype.");
-};
+goog.html.SafeHtml.prototype.implementsGoogI18nBidiDirectionalString = !0;
 
-goog.asserts.getType_ = function (a) {
-  return a instanceof Function ? a.displayName || a.name || "unknown type name" : a instanceof Object ? a.constructor.displayName || a.constructor.name || Object.prototype.toString.call(a) : null === a ? "null" : typeof a;
+goog.html.SafeHtml.prototype.getDirection = function () {
+  return this.dir_;
 };
 
-goog.array = {};
-goog.NATIVE_ARRAY_PROTOTYPES = goog.TRUSTED_SITE;
-goog.array.ASSUME_NATIVE_FUNCTIONS = 2012 < goog.FEATURESET_YEAR;
+goog.html.SafeHtml.prototype.implementsGoogStringTypedString = !0;
 
-goog.array.peek = function (a) {
-  return a[a.length - 1];
+goog.html.SafeHtml.prototype.getTypedStringValue = function () {
+  return this.privateDoNotAccessOrElseSafeHtmlWrappedValue_.toString();
 };
 
-goog.array.last = goog.array.peek;
-goog.array.indexOf = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.indexOf) ? function (a, b, c) {
-  goog.asserts.assert(null != a.length);
-  return Array.prototype.indexOf.call(a, b, c);
-} : function (a, b, c) {
-  c = null == c ? 0 : 0 > c ? Math.max(0, a.length + c) : c;
-  if (goog.isString(a)) return goog.isString(b) && 1 == b.length ? a.indexOf(b, c) : -1;
-
-  for (; c < a.length; c++) if (c in a && a[c] === b) return c;
+goog.DEBUG && (goog.html.SafeHtml.prototype.toString = function () {
+  return "SafeHtml{" + this.privateDoNotAccessOrElseSafeHtmlWrappedValue_ + "}";
+});
 
-  return -1;
+goog.html.SafeHtml.unwrap = function (a) {
+  return goog.html.SafeHtml.unwrapTrustedHTML(a).toString();
 };
-goog.array.lastIndexOf = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.lastIndexOf) ? function (a, b, c) {
-  goog.asserts.assert(null != a.length);
-  return Array.prototype.lastIndexOf.call(a, b, null == c ? a.length - 1 : c);
-} : function (a, b, c) {
-  c = null == c ? a.length - 1 : c;
-  0 > c && (c = Math.max(0, a.length + c));
-  if (goog.isString(a)) return goog.isString(b) && 1 == b.length ? a.lastIndexOf(b, c) : -1;
-
-  for (; 0 <= c; c--) if (c in a && a[c] === b) return c;
 
-  return -1;
-};
-goog.array.forEach = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.forEach) ? function (a, b, c) {
-  goog.asserts.assert(null != a.length);
-  Array.prototype.forEach.call(a, b, c);
-} : function (a, b, c) {
-  for (var d = a.length, e = goog.isString(a) ? a.split("") : a, f = 0; f < d; f++) f in e && b.call(c, e[f], f, a);
+goog.html.SafeHtml.unwrapTrustedHTML = function (a) {
+  if (a instanceof goog.html.SafeHtml && a.constructor === goog.html.SafeHtml && a.SAFE_HTML_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ === goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) return a.privateDoNotAccessOrElseSafeHtmlWrappedValue_;
+  goog.asserts.fail("expected object of type SafeHtml, got '" + a + "' of type " + goog.typeOf(a));
+  return "type_error:SafeHtml";
 };
 
-goog.array.forEachRight = function (a, b, c) {
-  var d = a.length,
-      e = goog.isString(a) ? a.split("") : a;
-
-  for (--d; 0 <= d; --d) d in e && b.call(c, e[d], d, a);
+goog.html.SafeHtml.htmlEscape = function (a) {
+  if (a instanceof goog.html.SafeHtml) return a;
+  var b = "object" == typeof a,
+      c = null;
+  b && a.implementsGoogI18nBidiDirectionalString && (c = a.getDirection());
+  a = b && a.implementsGoogStringTypedString ? a.getTypedStringValue() : String(a);
+  return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.htmlEscape(a), c);
 };
 
-goog.array.filter = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.filter) ? function (a, b, c) {
-  goog.asserts.assert(null != a.length);
-  return Array.prototype.filter.call(a, b, c);
-} : function (a, b, c) {
-  for (var d = a.length, e = [], f = 0, g = goog.isString(a) ? a.split("") : a, h = 0; h < d; h++) if (h in g) {
-    var k = g[h];
-    b.call(c, k, h, a) && (e[f++] = k);
-  }
-
-  return e;
+goog.html.SafeHtml.htmlEscapePreservingNewlines = function (a) {
+  if (a instanceof goog.html.SafeHtml) return a;
+  a = goog.html.SafeHtml.htmlEscape(a);
+  return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.newLineToBr(goog.html.SafeHtml.unwrap(a)), a.getDirection());
 };
-goog.array.map = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.map) ? function (a, b, c) {
-  goog.asserts.assert(null != a.length);
-  return Array.prototype.map.call(a, b, c);
-} : function (a, b, c) {
-  for (var d = a.length, e = Array(d), f = goog.isString(a) ? a.split("") : a, g = 0; g < d; g++) g in f && (e[g] = b.call(c, f[g], g, a));
 
-  return e;
+goog.html.SafeHtml.htmlEscapePreservingNewlinesAndSpaces = function (a) {
+  if (a instanceof goog.html.SafeHtml) return a;
+  a = goog.html.SafeHtml.htmlEscape(a);
+  return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.whitespaceEscape(goog.html.SafeHtml.unwrap(a)), a.getDirection());
 };
-goog.array.reduce = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.reduce) ? function (a, b, c, d) {
-  goog.asserts.assert(null != a.length);
-  d && (b = goog.bind(b, d));
-  return Array.prototype.reduce.call(a, b, c);
-} : function (a, b, c, d) {
-  var e = c;
-  goog.array.forEach(a, function (c, g) {
-    e = b.call(d, e, c, g, a);
-  });
-  return e;
+
+goog.html.SafeHtml.from = goog.html.SafeHtml.htmlEscape;
+goog.html.SafeHtml.VALID_NAMES_IN_TAG_ = /^[a-zA-Z0-9-]+$/;
+goog.html.SafeHtml.URL_ATTRIBUTES_ = {
+  action: !0,
+  cite: !0,
+  data: !0,
+  formaction: !0,
+  href: !0,
+  manifest: !0,
+  poster: !0,
+  src: !0
 };
-goog.array.reduceRight = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.reduceRight) ? function (a, b, c, d) {
-  goog.asserts.assert(null != a.length);
-  goog.asserts.assert(null != b);
-  d && (b = goog.bind(b, d));
-  return Array.prototype.reduceRight.call(a, b, c);
-} : function (a, b, c, d) {
-  var e = c;
-  goog.array.forEachRight(a, function (c, g) {
-    e = b.call(d, e, c, g, a);
-  });
-  return e;
+goog.html.SafeHtml.NOT_ALLOWED_TAG_NAMES_ = {
+  APPLET: !0,
+  BASE: !0,
+  EMBED: !0,
+  IFRAME: !0,
+  LINK: !0,
+  MATH: !0,
+  META: !0,
+  OBJECT: !0,
+  SCRIPT: !0,
+  STYLE: !0,
+  SVG: !0,
+  TEMPLATE: !0
 };
-goog.array.some = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.some) ? function (a, b, c) {
-  goog.asserts.assert(null != a.length);
-  return Array.prototype.some.call(a, b, c);
-} : function (a, b, c) {
-  for (var d = a.length, e = goog.isString(a) ? a.split("") : a, f = 0; f < d; f++) if (f in e && b.call(c, e[f], f, a)) return !0;
 
-  return !1;
+goog.html.SafeHtml.create = function (a, b, c) {
+  goog.html.SafeHtml.verifyTagName(String(a));
+  return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(String(a), b, c);
 };
-goog.array.every = goog.NATIVE_ARRAY_PROTOTYPES && (goog.array.ASSUME_NATIVE_FUNCTIONS || Array.prototype.every) ? function (a, b, c) {
-  goog.asserts.assert(null != a.length);
-  return Array.prototype.every.call(a, b, c);
-} : function (a, b, c) {
-  for (var d = a.length, e = goog.isString(a) ? a.split("") : a, f = 0; f < d; f++) if (f in e && !b.call(c, e[f], f, a)) return !1;
 
-  return !0;
+goog.html.SafeHtml.verifyTagName = function (a) {
+  if (!goog.html.SafeHtml.VALID_NAMES_IN_TAG_.test(a)) throw Error("Invalid tag name <" + a + ">.");
+  if (a.toUpperCase() in goog.html.SafeHtml.NOT_ALLOWED_TAG_NAMES_) throw Error("Tag name <" + a + "> is not allowed for SafeHtml.");
 };
 
-goog.array.count = function (a, b, c) {
-  var d = 0;
-  goog.array.forEach(a, function (a, f, g) {
-    b.call(c, a, f, g) && ++d;
+goog.html.SafeHtml.createIframe = function (a, b, c, d) {
+  a && goog.html.TrustedResourceUrl.unwrap(a);
+  var e = {};
+  e.src = a || null;
+  e.srcdoc = b && goog.html.SafeHtml.unwrap(b);
+  a = goog.html.SafeHtml.combineAttributes(e, {
+    sandbox: ""
   }, c);
-  return d;
+  return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("iframe", a, d);
 };
 
-goog.array.find = function (a, b, c) {
-  b = goog.array.findIndex(a, b, c);
-  return 0 > b ? null : goog.isString(a) ? a.charAt(b) : a[b];
+goog.html.SafeHtml.createSandboxIframe = function (a, b, c, d) {
+  if (!goog.html.SafeHtml.canUseSandboxIframe()) throw Error("The browser does not support sandboxed iframes.");
+  var e = {};
+  e.src = a ? goog.html.SafeUrl.unwrap(goog.html.SafeUrl.sanitize(a)) : null;
+  e.srcdoc = b || null;
+  e.sandbox = "";
+  a = goog.html.SafeHtml.combineAttributes(e, {}, c);
+  return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("iframe", a, d);
 };
 
-goog.array.findIndex = function (a, b, c) {
-  for (var d = a.length, e = goog.isString(a) ? a.split("") : a, f = 0; f < d; f++) if (f in e && b.call(c, e[f], f, a)) return f;
-
-  return -1;
+goog.html.SafeHtml.canUseSandboxIframe = function () {
+  return goog.global.HTMLIFrameElement && "sandbox" in goog.global.HTMLIFrameElement.prototype;
 };
 
-goog.array.findRight = function (a, b, c) {
-  b = goog.array.findIndexRight(a, b, c);
-  return 0 > b ? null : goog.isString(a) ? a.charAt(b) : a[b];
+goog.html.SafeHtml.createScriptSrc = function (a, b) {
+  goog.html.TrustedResourceUrl.unwrap(a);
+  a = goog.html.SafeHtml.combineAttributes({
+    src: a
+  }, {}, b);
+  return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("script", a);
 };
 
-goog.array.findIndexRight = function (a, b, c) {
-  var d = a.length,
-      e = goog.isString(a) ? a.split("") : a;
+goog.html.SafeHtml.createScript = function (a, b) {
+  for (var c in b) {
+    var d = c.toLowerCase();
+    if ("language" == d || "src" == d || "text" == d || "type" == d) throw Error('Cannot set "' + d + '" attribute');
+  }
 
-  for (--d; 0 <= d; d--) if (d in e && b.call(c, e[d], d, a)) return d;
+  c = "";
+  a = goog.array.concat(a);
 
-  return -1;
-};
+  for (d = 0; d < a.length; d++) c += goog.html.SafeScript.unwrap(a[d]);
 
-goog.array.contains = function (a, b) {
-  return 0 <= goog.array.indexOf(a, b);
+  a = goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(c, goog.i18n.bidi.Dir.NEUTRAL);
+  return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("script", b, a);
 };
 
-goog.array.isEmpty = function (a) {
-  return 0 == a.length;
-};
+goog.html.SafeHtml.createStyle = function (a, b) {
+  b = goog.html.SafeHtml.combineAttributes({
+    type: "text/css"
+  }, {}, b);
+  var c = "";
+  a = goog.array.concat(a);
 
-goog.array.clear = function (a) {
-  if (!goog.isArray(a)) for (var b = a.length - 1; 0 <= b; b--) delete a[b];
-  a.length = 0;
-};
+  for (var d = 0; d < a.length; d++) c += goog.html.SafeStyleSheet.unwrap(a[d]);
 
-goog.array.insert = function (a, b) {
-  goog.array.contains(a, b) || a.push(b);
+  a = goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(c, goog.i18n.bidi.Dir.NEUTRAL);
+  return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("style", b, a);
 };
 
-goog.array.insertAt = function (a, b, c) {
-  goog.array.splice(a, c, 0, b);
+goog.html.SafeHtml.createMetaRefresh = function (a, b) {
+  a = goog.html.SafeUrl.unwrap(goog.html.SafeUrl.sanitize(a));
+  (goog.labs.userAgent.browser.isIE() || goog.labs.userAgent.browser.isEdge()) && goog.string.internal.contains(a, ";") && (a = "'" + a.replace(/'/g, "%27") + "'");
+  return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("meta", {
+    "http-equiv": "refresh",
+    content: (b || 0) + "; url=" + a
+  });
 };
 
-goog.array.insertArrayAt = function (a, b, c) {
-  goog.partial(goog.array.splice, a, c, 0).apply(null, b);
+goog.html.SafeHtml.getAttrNameAndValue_ = function (a, b, c) {
+  if (c instanceof goog.string.Const) c = goog.string.Const.unwrap(c);else if ("style" == b.toLowerCase()) c = goog.html.SafeHtml.getStyleValue_(c);else {
+    if (/^on/i.test(b)) throw Error('Attribute "' + b + '" requires goog.string.Const value, "' + c + '" given.');
+    if (b.toLowerCase() in goog.html.SafeHtml.URL_ATTRIBUTES_) if (c instanceof goog.html.TrustedResourceUrl) c = goog.html.TrustedResourceUrl.unwrap(c);else if (c instanceof goog.html.SafeUrl) c = goog.html.SafeUrl.unwrap(c);else if (goog.isString(c)) c = goog.html.SafeUrl.sanitize(c).getTypedStringValue();else throw Error('Attribute "' + b + '" on tag "' + a + '" requires goog.html.SafeUrl, goog.string.Const, or string, value "' + c + '" given.');
+  }
+  c.implementsGoogStringTypedString && (c = c.getTypedStringValue());
+  goog.asserts.assert(goog.isString(c) || goog.isNumber(c), "String or number value expected, got " + typeof c + " with value: " + c);
+  return b + '="' + goog.string.internal.htmlEscape(String(c)) + '"';
 };
 
-goog.array.insertBefore = function (a, b, c) {
-  var d;
-  2 == arguments.length || 0 > (d = goog.array.indexOf(a, c)) ? a.push(b) : goog.array.insertAt(a, b, d);
+goog.html.SafeHtml.getStyleValue_ = function (a) {
+  if (!goog.isObject(a)) throw Error('The "style" attribute requires goog.html.SafeStyle or map of style properties, ' + typeof a + " given: " + a);
+  a instanceof goog.html.SafeStyle || (a = goog.html.SafeStyle.create(a));
+  return goog.html.SafeStyle.unwrap(a);
 };
 
-goog.array.remove = function (a, b) {
-  b = goog.array.indexOf(a, b);
-  var c;
-  (c = 0 <= b) && goog.array.removeAt(a, b);
-  return c;
+goog.html.SafeHtml.createWithDir = function (a, b, c, d) {
+  b = goog.html.SafeHtml.create(b, c, d);
+  b.dir_ = a;
+  return b;
 };
 
-goog.array.removeLast = function (a, b) {
-  b = goog.array.lastIndexOf(a, b);
-  return 0 <= b ? (goog.array.removeAt(a, b), !0) : !1;
-};
+goog.html.SafeHtml.join = function (a, b) {
+  a = goog.html.SafeHtml.htmlEscape(a);
 
-goog.array.removeAt = function (a, b) {
-  goog.asserts.assert(null != a.length);
-  return 1 == Array.prototype.splice.call(a, b, 1).length;
-};
+  var c = a.getDirection(),
+      d = [],
+      e = function (a) {
+    goog.isArray(a) ? goog.array.forEach(a, e) : (a = goog.html.SafeHtml.htmlEscape(a), d.push(goog.html.SafeHtml.unwrap(a)), a = a.getDirection(), c == goog.i18n.bidi.Dir.NEUTRAL ? c = a : a != goog.i18n.bidi.Dir.NEUTRAL && c != a && (c = null));
+  };
 
-goog.array.removeIf = function (a, b, c) {
-  b = goog.array.findIndex(a, b, c);
-  return 0 <= b ? (goog.array.removeAt(a, b), !0) : !1;
+  goog.array.forEach(b, e);
+  return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(d.join(goog.html.SafeHtml.unwrap(a)), c);
 };
 
-goog.array.removeAllIf = function (a, b, c) {
-  var d = 0;
-  goog.array.forEachRight(a, function (e, f) {
-    b.call(c, e, f, a) && goog.array.removeAt(a, f) && d++;
-  });
-  return d;
+goog.html.SafeHtml.concat = function (a) {
+  return goog.html.SafeHtml.join(goog.html.SafeHtml.EMPTY, Array.prototype.slice.call(arguments));
 };
 
-goog.array.concat = function (a) {
-  return Array.prototype.concat.apply([], arguments);
+goog.html.SafeHtml.concatWithDir = function (a, b) {
+  var c = goog.html.SafeHtml.concat(goog.array.slice(arguments, 1));
+  c.dir_ = a;
+  return c;
 };
 
-goog.array.join = function (a) {
-  return Array.prototype.concat.apply([], arguments);
+goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = {};
+
+goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse = function (a, b) {
+  return new goog.html.SafeHtml().initSecurityPrivateDoNotAccessOrElse_(a, b);
 };
 
-goog.array.toArray = function (a) {
-  var b = a.length;
+goog.html.SafeHtml.prototype.initSecurityPrivateDoNotAccessOrElse_ = function (a, b) {
+  this.privateDoNotAccessOrElseSafeHtmlWrappedValue_ = goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY ? goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createHTML(a) : a;
+  this.dir_ = b;
+  return this;
+};
 
-  if (0 < b) {
-    for (var c = Array(b), d = 0; d < b; d++) c[d] = a[d];
+goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse = function (a, b, c) {
+  var d = null;
+  var e = "<" + a + goog.html.SafeHtml.stringifyAttributes(a, b);
+  goog.isDefAndNotNull(c) ? goog.isArray(c) || (c = [c]) : c = [];
+  goog.dom.tags.isVoidTag(a.toLowerCase()) ? (goog.asserts.assert(!c.length, "Void tag <" + a + "> does not allow content."), e += ">") : (d = goog.html.SafeHtml.concat(c), e += ">" + goog.html.SafeHtml.unwrap(d) + "</" + a + ">", d = d.getDirection());
+  (a = b && b.dir) && (d = /^(ltr|rtl|auto)$/i.test(a) ? goog.i18n.bidi.Dir.NEUTRAL : null);
+  return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(e, d);
+};
 
-    return c;
+goog.html.SafeHtml.stringifyAttributes = function (a, b) {
+  var c = "";
+  if (b) for (var d in b) {
+    if (!goog.html.SafeHtml.VALID_NAMES_IN_TAG_.test(d)) throw Error('Invalid attribute name "' + d + '".');
+    var e = b[d];
+    goog.isDefAndNotNull(e) && (c += " " + goog.html.SafeHtml.getAttrNameAndValue_(a, d, e));
   }
-
-  return [];
+  return c;
 };
 
-goog.array.clone = goog.array.toArray;
+goog.html.SafeHtml.combineAttributes = function (a, b, c) {
+  var d = {},
+      e;
 
-goog.array.extend = function (a, b) {
-  for (var c = 1; c < arguments.length; c++) {
-    var d = arguments[c];
+  for (e in a) goog.asserts.assert(e.toLowerCase() == e, "Must be lower case"), d[e] = a[e];
 
-    if (goog.isArrayLike(d)) {
-      var e = a.length || 0,
-          f = d.length || 0;
-      a.length = e + f;
+  for (e in b) goog.asserts.assert(e.toLowerCase() == e, "Must be lower case"), d[e] = b[e];
 
-      for (var g = 0; g < f; g++) a[e + g] = d[g];
-    } else a.push(d);
+  for (e in c) {
+    var f = e.toLowerCase();
+    if (f in a) throw Error('Cannot override "' + f + '" attribute, got "' + e + '" with value "' + c[e] + '"');
+    f in b && delete d[f];
+    d[e] = c[e];
   }
-};
 
-goog.array.splice = function (a, b, c, d) {
-  goog.asserts.assert(null != a.length);
-  return Array.prototype.splice.apply(a, goog.array.slice(arguments, 1));
+  return d;
 };
 
-goog.array.slice = function (a, b, c) {
-  goog.asserts.assert(null != a.length);
-  return 2 >= arguments.length ? Array.prototype.slice.call(a, b) : Array.prototype.slice.call(a, b, c);
-};
-
-goog.array.removeDuplicates = function (a, b, c) {
-  b = b || a;
-
-  var d = function (a) {
-    return goog.isObject(a) ? "o" + goog.getUid(a) : (typeof a).charAt(0) + a;
-  };
-
-  c = c || d;
-  d = {};
-
-  for (var e = 0, f = 0; f < a.length;) {
-    var g = a[f++],
-        h = c(g);
-    Object.prototype.hasOwnProperty.call(d, h) || (d[h] = !0, b[e++] = g);
-  }
+goog.html.SafeHtml.DOCTYPE_HTML = goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse("<!DOCTYPE html>", goog.i18n.bidi.Dir.NEUTRAL);
+goog.html.SafeHtml.EMPTY = goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse("", goog.i18n.bidi.Dir.NEUTRAL);
+goog.html.SafeHtml.BR = goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse("<br>", goog.i18n.bidi.Dir.NEUTRAL);
+goog.html.uncheckedconversions = {};
 
-  b.length = e;
+goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract = function (a, b, c) {
+  goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
+  goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
+  return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(b, c || null);
 };
 
-goog.array.binarySearch = function (a, b, c) {
-  return goog.array.binarySearch_(a, c || goog.array.defaultCompare, !1, b);
+goog.html.uncheckedconversions.safeScriptFromStringKnownToSatisfyTypeContract = function (a, b) {
+  goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
+  goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
+  return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(b);
 };
 
-goog.array.binarySelect = function (a, b, c) {
-  return goog.array.binarySearch_(a, b, !0, void 0, c);
+goog.html.uncheckedconversions.safeStyleFromStringKnownToSatisfyTypeContract = function (a, b) {
+  goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
+  goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
+  return goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(b);
 };
 
-goog.array.binarySearch_ = function (a, b, c, d, e) {
-  for (var f = 0, g = a.length, h; f < g;) {
-    var k = f + g >> 1;
-    var l = c ? b.call(e, a[k], k, a) : b(d, a[k]);
-    0 < l ? f = k + 1 : (g = k, h = !l);
-  }
-
-  return h ? f : ~f;
+goog.html.uncheckedconversions.safeStyleSheetFromStringKnownToSatisfyTypeContract = function (a, b) {
+  goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
+  goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
+  return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(b);
 };
 
-goog.array.sort = function (a, b) {
-  a.sort(b || goog.array.defaultCompare);
+goog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract = function (a, b) {
+  goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
+  goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
+  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(b);
 };
 
-goog.array.stableSort = function (a, b) {
-  for (var c = Array(a.length), d = 0; d < a.length; d++) c[d] = {
-    index: d,
-    value: a[d]
-  };
-
-  var e = b || goog.array.defaultCompare;
-  goog.array.sort(c, function (a, b) {
-    return e(a.value, b.value) || a.index - b.index;
-  });
+goog.html.uncheckedconversions.trustedResourceUrlFromStringKnownToSatisfyTypeContract = function (a, b) {
+  goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
+  goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
+  return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(b);
+};
 
-  for (d = 0; d < a.length; d++) a[d] = c[d].value;
+goog.dom.safe = {};
+goog.dom.safe.InsertAdjacentHtmlPosition = {
+  AFTERBEGIN: "afterbegin",
+  AFTEREND: "afterend",
+  BEFOREBEGIN: "beforebegin",
+  BEFOREEND: "beforeend"
 };
 
-goog.array.sortByKey = function (a, b, c) {
-  var d = c || goog.array.defaultCompare;
-  goog.array.sort(a, function (a, c) {
-    return d(b(a), b(c));
-  });
+goog.dom.safe.insertAdjacentHtml = function (a, b, c) {
+  a.insertAdjacentHTML(b, goog.html.SafeHtml.unwrapTrustedHTML(c));
 };
 
-goog.array.sortObjectsByKey = function (a, b, c) {
-  goog.array.sortByKey(a, function (a) {
-    return a[b];
-  }, c);
+goog.dom.safe.SET_INNER_HTML_DISALLOWED_TAGS_ = {
+  MATH: !0,
+  SCRIPT: !0,
+  STYLE: !0,
+  SVG: !0,
+  TEMPLATE: !0
 };
+goog.dom.safe.isInnerHtmlCleanupRecursive_ = goog.functions.cacheReturnValue(function () {
+  if (goog.DEBUG && "undefined" === typeof document) return !1;
+  var a = document.createElement("div"),
+      b = document.createElement("div");
+  b.appendChild(document.createElement("div"));
+  a.appendChild(b);
+  if (goog.DEBUG && !a.firstChild) return !1;
+  b = a.firstChild.firstChild;
+  a.innerHTML = goog.html.SafeHtml.unwrapTrustedHTML(goog.html.SafeHtml.EMPTY);
+  return !b.parentElement;
+});
 
-goog.array.isSorted = function (a, b, c) {
-  b = b || goog.array.defaultCompare;
+goog.dom.safe.unsafeSetInnerHtmlDoNotUseOrElse = function (a, b) {
+  if (goog.dom.safe.isInnerHtmlCleanupRecursive_()) for (; a.lastChild;) a.removeChild(a.lastChild);
+  a.innerHTML = goog.html.SafeHtml.unwrapTrustedHTML(b);
+};
 
-  for (var d = 1; d < a.length; d++) {
-    var e = b(a[d - 1], a[d]);
-    if (0 < e || 0 == e && c) return !1;
+goog.dom.safe.setInnerHtml = function (a, b) {
+  if (goog.asserts.ENABLE_ASSERTS) {
+    var c = a.tagName.toUpperCase();
+    if (goog.dom.safe.SET_INNER_HTML_DISALLOWED_TAGS_[c]) throw Error("goog.dom.safe.setInnerHtml cannot be used to set content of " + a.tagName + ".");
   }
 
-  return !0;
+  goog.dom.safe.unsafeSetInnerHtmlDoNotUseOrElse(a, b);
 };
 
-goog.array.equals = function (a, b, c) {
-  if (!goog.isArrayLike(a) || !goog.isArrayLike(b) || a.length != b.length) return !1;
-  var d = a.length;
-  c = c || goog.array.defaultCompareEquality;
-
-  for (var e = 0; e < d; e++) if (!c(a[e], b[e])) return !1;
-
-  return !0;
+goog.dom.safe.setOuterHtml = function (a, b) {
+  a.outerHTML = goog.html.SafeHtml.unwrapTrustedHTML(b);
 };
 
-goog.array.compare3 = function (a, b, c) {
-  c = c || goog.array.defaultCompare;
-
-  for (var d = Math.min(a.length, b.length), e = 0; e < d; e++) {
-    var f = c(a[e], b[e]);
-    if (0 != f) return f;
-  }
-
-  return goog.array.defaultCompare(a.length, b.length);
+goog.dom.safe.setFormElementAction = function (a, b) {
+  b = b instanceof goog.html.SafeUrl ? b : goog.html.SafeUrl.sanitizeAssertUnchanged(b);
+  goog.dom.asserts.assertIsHTMLFormElement(a).action = goog.html.SafeUrl.unwrapTrustedURL(b);
 };
 
-goog.array.defaultCompare = function (a, b) {
-  return a > b ? 1 : a < b ? -1 : 0;
+goog.dom.safe.setButtonFormAction = function (a, b) {
+  b = b instanceof goog.html.SafeUrl ? b : goog.html.SafeUrl.sanitizeAssertUnchanged(b);
+  goog.dom.asserts.assertIsHTMLButtonElement(a).formAction = goog.html.SafeUrl.unwrapTrustedURL(b);
 };
 
-goog.array.inverseDefaultCompare = function (a, b) {
-  return -goog.array.defaultCompare(a, b);
+goog.dom.safe.setInputFormAction = function (a, b) {
+  b = b instanceof goog.html.SafeUrl ? b : goog.html.SafeUrl.sanitizeAssertUnchanged(b);
+  goog.dom.asserts.assertIsHTMLInputElement(a).formAction = goog.html.SafeUrl.unwrapTrustedURL(b);
 };
 
-goog.array.defaultCompareEquality = function (a, b) {
-  return a === b;
+goog.dom.safe.setStyle = function (a, b) {
+  a.style.cssText = goog.html.SafeStyle.unwrap(b);
 };
 
-goog.array.binaryInsert = function (a, b, c) {
-  c = goog.array.binarySearch(a, b, c);
-  return 0 > c ? (goog.array.insertAt(a, b, -(c + 1)), !0) : !1;
+goog.dom.safe.documentWrite = function (a, b) {
+  a.write(goog.html.SafeHtml.unwrapTrustedHTML(b));
 };
 
-goog.array.binaryRemove = function (a, b, c) {
-  b = goog.array.binarySearch(a, b, c);
-  return 0 <= b ? goog.array.removeAt(a, b) : !1;
+goog.dom.safe.setAnchorHref = function (a, b) {
+  goog.dom.asserts.assertIsHTMLAnchorElement(a);
+  b = b instanceof goog.html.SafeUrl ? b : goog.html.SafeUrl.sanitizeAssertUnchanged(b);
+  a.href = goog.html.SafeUrl.unwrapTrustedURL(b);
 };
 
-goog.array.bucket = function (a, b, c) {
-  for (var d = {}, e = 0; e < a.length; e++) {
-    var f = a[e],
-        g = b.call(c, f, e, a);
-    goog.isDef(g) && (d[g] || (d[g] = [])).push(f);
-  }
+goog.dom.safe.setImageSrc = function (a, b) {
+  goog.dom.asserts.assertIsHTMLImageElement(a);
 
-  return d;
-};
+  if (!(b instanceof goog.html.SafeUrl)) {
+    var c = /^data:image\//i.test(b);
+    b = goog.html.SafeUrl.sanitizeAssertUnchanged(b, c);
+  }
 
-goog.array.toObject = function (a, b, c) {
-  var d = {};
-  goog.array.forEach(a, function (e, f) {
-    d[b.call(c, e, f, a)] = e;
-  });
-  return d;
+  a.src = goog.html.SafeUrl.unwrapTrustedURL(b);
 };
 
-goog.array.range = function (a, b, c) {
-  var d = [],
-      e = 0,
-      f = a;
-  c = c || 1;
-  void 0 !== b && (e = a, f = b);
-  if (0 > c * (f - e)) return [];
-  if (0 < c) for (a = e; a < f; a += c) d.push(a);else for (a = e; a > f; a += c) d.push(a);
-  return d;
-};
+goog.dom.safe.setAudioSrc = function (a, b) {
+  goog.dom.asserts.assertIsHTMLAudioElement(a);
 
-goog.array.repeat = function (a, b) {
-  for (var c = [], d = 0; d < b; d++) c[d] = a;
+  if (!(b instanceof goog.html.SafeUrl)) {
+    var c = /^data:audio\//i.test(b);
+    b = goog.html.SafeUrl.sanitizeAssertUnchanged(b, c);
+  }
 
-  return c;
+  a.src = goog.html.SafeUrl.unwrapTrustedURL(b);
 };
 
-goog.array.flatten = function (a) {
-  for (var b = [], c = 0; c < arguments.length; c++) {
-    var d = arguments[c];
-    if (goog.isArray(d)) for (var e = 0; e < d.length; e += 8192) {
-      var f = goog.array.slice(d, e, e + 8192);
-      f = goog.array.flatten.apply(null, f);
+goog.dom.safe.setVideoSrc = function (a, b) {
+  goog.dom.asserts.assertIsHTMLVideoElement(a);
 
-      for (var g = 0; g < f.length; g++) b.push(f[g]);
-    } else b.push(d);
+  if (!(b instanceof goog.html.SafeUrl)) {
+    var c = /^data:video\//i.test(b);
+    b = goog.html.SafeUrl.sanitizeAssertUnchanged(b, c);
   }
 
-  return b;
+  a.src = goog.html.SafeUrl.unwrapTrustedURL(b);
 };
 
-goog.array.rotate = function (a, b) {
-  goog.asserts.assert(null != a.length);
-  a.length && (b %= a.length, 0 < b ? Array.prototype.unshift.apply(a, a.splice(-b, b)) : 0 > b && Array.prototype.push.apply(a, a.splice(0, -b)));
-  return a;
+goog.dom.safe.setEmbedSrc = function (a, b) {
+  goog.dom.asserts.assertIsHTMLEmbedElement(a);
+  a.src = goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(b);
 };
 
-goog.array.moveItem = function (a, b, c) {
-  goog.asserts.assert(0 <= b && b < a.length);
-  goog.asserts.assert(0 <= c && c < a.length);
-  b = Array.prototype.splice.call(a, b, 1);
-  Array.prototype.splice.call(a, c, 0, b[0]);
+goog.dom.safe.setFrameSrc = function (a, b) {
+  goog.dom.asserts.assertIsHTMLFrameElement(a);
+  a.src = goog.html.TrustedResourceUrl.unwrapTrustedURL(b);
 };
 
-goog.array.zip = function (a) {
-  if (!arguments.length) return [];
+goog.dom.safe.setIframeSrc = function (a, b) {
+  goog.dom.asserts.assertIsHTMLIFrameElement(a);
+  a.src = goog.html.TrustedResourceUrl.unwrapTrustedURL(b);
+};
 
-  for (var b = [], c = arguments[0].length, d = 1; d < arguments.length; d++) arguments[d].length < c && (c = arguments[d].length);
+goog.dom.safe.setIframeSrcdoc = function (a, b) {
+  goog.dom.asserts.assertIsHTMLIFrameElement(a);
+  a.srcdoc = goog.html.SafeHtml.unwrapTrustedHTML(b);
+};
 
-  for (d = 0; d < c; d++) {
-    for (var e = [], f = 0; f < arguments.length; f++) e.push(arguments[f][d]);
+goog.dom.safe.setLinkHrefAndRel = function (a, b, c) {
+  goog.dom.asserts.assertIsHTMLLinkElement(a);
+  a.rel = c;
+  goog.string.internal.caseInsensitiveContains(c, "stylesheet") ? (goog.asserts.assert(b instanceof goog.html.TrustedResourceUrl, 'URL must be TrustedResourceUrl because "rel" contains "stylesheet"'), a.href = goog.html.TrustedResourceUrl.unwrapTrustedURL(b)) : a.href = b instanceof goog.html.TrustedResourceUrl ? goog.html.TrustedResourceUrl.unwrapTrustedURL(b) : b instanceof goog.html.SafeUrl ? goog.html.SafeUrl.unwrapTrustedURL(b) : goog.html.SafeUrl.unwrapTrustedURL(goog.html.SafeUrl.sanitizeAssertUnchanged(b));
+};
 
-    b.push(e);
-  }
+goog.dom.safe.setObjectData = function (a, b) {
+  goog.dom.asserts.assertIsHTMLObjectElement(a);
+  a.data = goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(b);
+};
 
-  return b;
+goog.dom.safe.setScriptSrc = function (a, b) {
+  goog.dom.asserts.assertIsHTMLScriptElement(a);
+  a.src = goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(b);
+  (b = goog.getScriptNonce()) && a.setAttribute("nonce", b);
 };
 
-goog.array.shuffle = function (a, b) {
-  b = b || Math.random;
+goog.dom.safe.setScriptContent = function (a, b) {
+  goog.dom.asserts.assertIsHTMLScriptElement(a);
+  a.text = goog.html.SafeScript.unwrapTrustedScript(b);
+  (b = goog.getScriptNonce()) && a.setAttribute("nonce", b);
+};
 
-  for (var c = a.length - 1; 0 < c; c--) {
-    var d = Math.floor(b() * (c + 1)),
-        e = a[c];
-    a[c] = a[d];
-    a[d] = e;
-  }
+goog.dom.safe.setLocationHref = function (a, b) {
+  goog.dom.asserts.assertIsLocation(a);
+  b = b instanceof goog.html.SafeUrl ? b : goog.html.SafeUrl.sanitizeAssertUnchanged(b);
+  a.href = goog.html.SafeUrl.unwrapTrustedURL(b);
 };
 
-goog.array.copyByIndex = function (a, b) {
-  var c = [];
-  goog.array.forEach(b, function (b) {
-    c.push(a[b]);
-  });
-  return c;
+goog.dom.safe.assignLocation = function (a, b) {
+  goog.dom.asserts.assertIsLocation(a);
+  b = b instanceof goog.html.SafeUrl ? b : goog.html.SafeUrl.sanitizeAssertUnchanged(b);
+  a.assign(goog.html.SafeUrl.unwrapTrustedURL(b));
 };
 
-goog.array.concatMap = function (a, b, c) {
-  return goog.array.concat.apply([], goog.array.map(a, b, c));
+goog.dom.safe.replaceLocation = function (a, b) {
+  goog.dom.asserts.assertIsLocation(a);
+  b = b instanceof goog.html.SafeUrl ? b : goog.html.SafeUrl.sanitizeAssertUnchanged(b);
+  a.replace(goog.html.SafeUrl.unwrapTrustedURL(b));
 };
 
-goog.crypt = {};
+goog.dom.safe.openInWindow = function (a, b, c, d, e) {
+  a = a instanceof goog.html.SafeUrl ? a : goog.html.SafeUrl.sanitizeAssertUnchanged(a);
+  return (b || goog.global).open(goog.html.SafeUrl.unwrapTrustedURL(a), c ? goog.string.Const.unwrap(c) : "", d, e);
+};
 
-goog.crypt.stringToByteArray = function (a) {
-  for (var b = [], c = 0, d = 0; d < a.length; d++) {
-    var e = a.charCodeAt(d);
-    255 < e && (b[c++] = e & 255, e >>= 8);
-    b[c++] = e;
-  }
+goog.dom.safe.parseFromStringHtml = function (a, b) {
+  return goog.dom.safe.parseFromString(a, b, "text/html");
+};
 
-  return b;
+goog.dom.safe.parseFromString = function (a, b, c) {
+  return a.parseFromString(goog.html.SafeHtml.unwrapTrustedHTML(b), c);
 };
 
-goog.crypt.byteArrayToString = function (a) {
-  if (8192 >= a.length) return String.fromCharCode.apply(null, a);
+goog.dom.safe.createImageFromBlob = function (a) {
+  if (!/^image\/.*/g.test(a.type)) throw Error("goog.dom.safe.createImageFromBlob only accepts MIME type image/.*.");
+  var b = goog.global.URL.createObjectURL(a);
+  a = new goog.global.Image();
 
-  for (var b = "", c = 0; c < a.length; c += 8192) {
-    var d = goog.array.slice(a, c, c + 8192);
-    b += String.fromCharCode.apply(null, d);
-  }
+  a.onload = function () {
+    goog.global.URL.revokeObjectURL(b);
+  };
 
-  return b;
+  goog.dom.safe.setImageSrc(a, goog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract(goog.string.Const.from("Image blob URL."), b));
+  return a;
 };
 
-goog.crypt.byteArrayToHex = function (a, b) {
-  return goog.array.map(a, function (a) {
-    a = a.toString(16);
-    return 1 < a.length ? a : "0" + a;
-  }).join(b || "");
+goog.string.DETECT_DOUBLE_ESCAPING = !1;
+goog.string.FORCE_NON_DOM_HTML_UNESCAPING = !1;
+goog.string.Unicode = {
+  NBSP: "\u00a0"
 };
+goog.string.startsWith = goog.string.internal.startsWith;
+goog.string.endsWith = goog.string.internal.endsWith;
+goog.string.caseInsensitiveStartsWith = goog.string.internal.caseInsensitiveStartsWith;
+goog.string.caseInsensitiveEndsWith = goog.string.internal.caseInsensitiveEndsWith;
+goog.string.caseInsensitiveEquals = goog.string.internal.caseInsensitiveEquals;
 
-goog.crypt.hexToByteArray = function (a) {
-  goog.asserts.assert(0 == a.length % 2, "Key string length must be multiple of 2");
-
-  for (var b = [], c = 0; c < a.length; c += 2) b.push(parseInt(a.substring(c, c + 2), 16));
+goog.string.subs = function (a, b) {
+  for (var c = a.split("%s"), d = "", e = Array.prototype.slice.call(arguments, 1); e.length && 1 < c.length;) d += c.shift() + e.shift();
 
-  return b;
+  return d + c.join("%s");
 };
 
-goog.crypt.stringToUtf8ByteArray = function (a) {
-  for (var b = [], c = 0, d = 0; d < a.length; d++) {
-    var e = a.charCodeAt(d);
-    128 > e ? b[c++] = e : (2048 > e ? b[c++] = e >> 6 | 192 : (55296 == (e & 64512) && d + 1 < a.length && 56320 == (a.charCodeAt(d + 1) & 64512) ? (e = 65536 + ((e & 1023) << 10) + (a.charCodeAt(++d) & 1023), b[c++] = e >> 18 | 240, b[c++] = e >> 12 & 63 | 128) : b[c++] = e >> 12 | 224, b[c++] = e >> 6 & 63 | 128), b[c++] = e & 63 | 128);
-  }
-
-  return b;
+goog.string.collapseWhitespace = function (a) {
+  return a.replace(/[\s\xa0]+/g, " ").replace(/^\s+|\s+$/g, "");
 };
 
-goog.crypt.utf8ByteArrayToString = function (a) {
-  for (var b = [], c = 0, d = 0; c < a.length;) {
-    var e = a[c++];
-    if (128 > e) b[d++] = String.fromCharCode(e);else if (191 < e && 224 > e) {
-      var f = a[c++];
-      b[d++] = String.fromCharCode((e & 31) << 6 | f & 63);
-    } else if (239 < e && 365 > e) {
-      f = a[c++];
-      var g = a[c++],
-          h = a[c++];
-      e = ((e & 7) << 18 | (f & 63) << 12 | (g & 63) << 6 | h & 63) - 65536;
-      b[d++] = String.fromCharCode(55296 + (e >> 10));
-      b[d++] = String.fromCharCode(56320 + (e & 1023));
-    } else f = a[c++], g = a[c++], b[d++] = String.fromCharCode((e & 15) << 12 | (f & 63) << 6 | g & 63);
-  }
+goog.string.isEmptyOrWhitespace = goog.string.internal.isEmptyOrWhitespace;
 
-  return b.join("");
+goog.string.isEmptyString = function (a) {
+  return 0 == a.length;
 };
 
-goog.crypt.xorByteArray = function (a, b) {
-  goog.asserts.assert(a.length == b.length, "XOR array lengths must match");
-
-  for (var c = [], d = 0; d < a.length; d++) c.push(a[d] ^ b[d]);
+goog.string.isEmpty = goog.string.isEmptyOrWhitespace;
 
-  return c;
+goog.string.isEmptyOrWhitespaceSafe = function (a) {
+  return goog.string.isEmptyOrWhitespace(goog.string.makeSafe(a));
 };
 
-goog.string = {};
-goog.string.internal = {};
+goog.string.isEmptySafe = goog.string.isEmptyOrWhitespaceSafe;
 
-goog.string.internal.startsWith = function (a, b) {
-  return 0 == a.lastIndexOf(b, 0);
+goog.string.isBreakingWhitespace = function (a) {
+  return !/[^\t\n\r ]/.test(a);
 };
 
-goog.string.internal.endsWith = function (a, b) {
-  var c = a.length - b.length;
-  return 0 <= c && a.indexOf(b, c) == c;
+goog.string.isAlpha = function (a) {
+  return !/[^a-zA-Z]/.test(a);
 };
 
-goog.string.internal.caseInsensitiveStartsWith = function (a, b) {
-  return 0 == goog.string.internal.caseInsensitiveCompare(b, a.substr(0, b.length));
+goog.string.isNumeric = function (a) {
+  return !/[^0-9]/.test(a);
 };
 
-goog.string.internal.caseInsensitiveEndsWith = function (a, b) {
-  return 0 == goog.string.internal.caseInsensitiveCompare(b, a.substr(a.length - b.length, b.length));
+goog.string.isAlphaNumeric = function (a) {
+  return !/[^a-zA-Z0-9]/.test(a);
 };
 
-goog.string.internal.caseInsensitiveEquals = function (a, b) {
-  return a.toLowerCase() == b.toLowerCase();
+goog.string.isSpace = function (a) {
+  return " " == a;
 };
 
-goog.string.internal.isEmptyOrWhitespace = function (a) {
-  return /^[\s\xa0]*$/.test(a);
+goog.string.isUnicodeChar = function (a) {
+  return 1 == a.length && " " <= a && "~" >= a || "\u0080" <= a && "\ufffd" >= a;
 };
 
-goog.string.internal.trim = goog.TRUSTED_SITE && String.prototype.trim ? function (a) {
-  return a.trim();
-} : function (a) {
-  return /^[\s\xa0]*([\s\S]*?)[\s\xa0]*$/.exec(a)[1];
+goog.string.stripNewlines = function (a) {
+  return a.replace(/(\r\n|\r|\n)+/g, " ");
 };
 
-goog.string.internal.caseInsensitiveCompare = function (a, b) {
-  a = String(a).toLowerCase();
-  b = String(b).toLowerCase();
-  return a < b ? -1 : a == b ? 0 : 1;
+goog.string.canonicalizeNewlines = function (a) {
+  return a.replace(/(\r\n|\r|\n)/g, "\n");
 };
 
-goog.string.internal.newLineToBr = function (a, b) {
-  return a.replace(/(\r\n|\r|\n)/g, b ? "<br />" : "<br>");
+goog.string.normalizeWhitespace = function (a) {
+  return a.replace(/\xa0|\s/g, " ");
 };
 
-goog.string.internal.htmlEscape = function (a, b) {
-  if (b) a = a.replace(goog.string.internal.AMP_RE_, "&amp;").replace(goog.string.internal.LT_RE_, "&lt;").replace(goog.string.internal.GT_RE_, "&gt;").replace(goog.string.internal.QUOT_RE_, "&quot;").replace(goog.string.internal.SINGLE_QUOTE_RE_, "&#39;").replace(goog.string.internal.NULL_RE_, "&#0;");else {
-    if (!goog.string.internal.ALL_RE_.test(a)) return a;
-    -1 != a.indexOf("&") && (a = a.replace(goog.string.internal.AMP_RE_, "&amp;"));
-    -1 != a.indexOf("<") && (a = a.replace(goog.string.internal.LT_RE_, "&lt;"));
-    -1 != a.indexOf(">") && (a = a.replace(goog.string.internal.GT_RE_, "&gt;"));
-    -1 != a.indexOf('"') && (a = a.replace(goog.string.internal.QUOT_RE_, "&quot;"));
-    -1 != a.indexOf("'") && (a = a.replace(goog.string.internal.SINGLE_QUOTE_RE_, "&#39;"));
-    -1 != a.indexOf("\x00") && (a = a.replace(goog.string.internal.NULL_RE_, "&#0;"));
-  }
-  return a;
+goog.string.normalizeSpaces = function (a) {
+  return a.replace(/\xa0|[ \t]+/g, " ");
 };
 
-goog.string.internal.AMP_RE_ = /&/g;
-goog.string.internal.LT_RE_ = /</g;
-goog.string.internal.GT_RE_ = />/g;
-goog.string.internal.QUOT_RE_ = /"/g;
-goog.string.internal.SINGLE_QUOTE_RE_ = /'/g;
-goog.string.internal.NULL_RE_ = /\x00/g;
-goog.string.internal.ALL_RE_ = /[\x00&<>"']/;
-
-goog.string.internal.whitespaceEscape = function (a, b) {
-  return goog.string.internal.newLineToBr(a.replace(/  /g, " &#160;"), b);
+goog.string.collapseBreakingSpaces = function (a) {
+  return a.replace(/[\t\r\n ]+/g, " ").replace(/^[\t\r\n ]+|[\t\r\n ]+$/g, "");
 };
 
-goog.string.internal.contains = function (a, b) {
-  return -1 != a.indexOf(b);
+goog.string.trim = goog.string.internal.trim;
+
+goog.string.trimLeft = function (a) {
+  return a.replace(/^[\s\xa0]+/, "");
 };
 
-goog.string.internal.caseInsensitiveContains = function (a, b) {
-  return goog.string.internal.contains(a.toLowerCase(), b.toLowerCase());
+goog.string.trimRight = function (a) {
+  return a.replace(/[\s\xa0]+$/, "");
 };
 
-goog.string.internal.compareVersions = function (a, b) {
-  var c = 0;
-  a = goog.string.internal.trim(String(a)).split(".");
-  b = goog.string.internal.trim(String(b)).split(".");
+goog.string.caseInsensitiveCompare = goog.string.internal.caseInsensitiveCompare;
 
-  for (var d = Math.max(a.length, b.length), e = 0; 0 == c && e < d; e++) {
-    var f = a[e] || "",
-        g = b[e] || "";
+goog.string.numberAwareCompare_ = function (a, b, c) {
+  if (a == b) return 0;
+  if (!a) return -1;
+  if (!b) return 1;
 
-    do {
-      f = /(\d*)(\D*)(.*)/.exec(f) || ["", "", "", ""];
-      g = /(\d*)(\D*)(.*)/.exec(g) || ["", "", "", ""];
-      if (0 == f[0].length && 0 == g[0].length) break;
-      c = 0 == f[1].length ? 0 : parseInt(f[1], 10);
-      var h = 0 == g[1].length ? 0 : parseInt(g[1], 10);
-      c = goog.string.internal.compareElements_(c, h) || goog.string.internal.compareElements_(0 == f[2].length, 0 == g[2].length) || goog.string.internal.compareElements_(f[2], g[2]);
-      f = f[3];
-      g = g[3];
-    } while (0 == c);
+  for (var d = a.toLowerCase().match(c), e = b.toLowerCase().match(c), f = Math.min(d.length, e.length), g = 0; g < f; g++) {
+    c = d[g];
+    var h = e[g];
+    if (c != h) return a = parseInt(c, 10), !isNaN(a) && (b = parseInt(h, 10), !isNaN(b) && a - b) ? a - b : c < h ? -1 : 1;
   }
 
-  return c;
+  return d.length != e.length ? d.length - e.length : a < b ? -1 : 1;
 };
 
-goog.string.internal.compareElements_ = function (a, b) {
-  return a < b ? -1 : a > b ? 1 : 0;
+goog.string.intAwareCompare = function (a, b) {
+  return goog.string.numberAwareCompare_(a, b, /\d+|\D+/g);
 };
 
-goog.string.TypedString = function () {};
+goog.string.floatAwareCompare = function (a, b) {
+  return goog.string.numberAwareCompare_(a, b, /\d+|\.\d+|\D+/g);
+};
 
-goog.string.Const = function (a, b) {
-  this.stringConstValueWithSecurityContract__googStringSecurityPrivate_ = a === goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_ && b || "";
-  this.STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_ = goog.string.Const.TYPE_MARKER_;
+goog.string.numerateCompare = goog.string.floatAwareCompare;
+
+goog.string.urlEncode = function (a) {
+  return encodeURIComponent(String(a));
 };
 
-goog.string.Const.prototype.implementsGoogStringTypedString = !0;
+goog.string.urlDecode = function (a) {
+  return decodeURIComponent(a.replace(/\+/g, " "));
+};
 
-goog.string.Const.prototype.getTypedStringValue = function () {
-  return this.stringConstValueWithSecurityContract__googStringSecurityPrivate_;
+goog.string.newLineToBr = goog.string.internal.newLineToBr;
+
+goog.string.htmlEscape = function (a, b) {
+  a = goog.string.internal.htmlEscape(a, b);
+  goog.string.DETECT_DOUBLE_ESCAPING && (a = a.replace(goog.string.E_RE_, "&#101;"));
+  return a;
 };
 
-goog.string.Const.prototype.toString = function () {
-  return "Const{" + this.stringConstValueWithSecurityContract__googStringSecurityPrivate_ + "}";
+goog.string.E_RE_ = /e/g;
+
+goog.string.unescapeEntities = function (a) {
+  return goog.string.contains(a, "&") ? !goog.string.FORCE_NON_DOM_HTML_UNESCAPING && "document" in goog.global ? goog.string.unescapeEntitiesUsingDom_(a) : goog.string.unescapePureXmlEntities_(a) : a;
 };
 
-goog.string.Const.unwrap = function (a) {
-  if (a instanceof goog.string.Const && a.constructor === goog.string.Const && a.STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_ === goog.string.Const.TYPE_MARKER_) return a.stringConstValueWithSecurityContract__googStringSecurityPrivate_;
-  goog.asserts.fail("expected object of type Const, got '" + a + "'");
-  return "type_error:Const";
+goog.string.unescapeEntitiesWithDocument = function (a, b) {
+  return goog.string.contains(a, "&") ? goog.string.unescapeEntitiesUsingDom_(a, b) : a;
 };
 
-goog.string.Const.from = function (a) {
-  return new goog.string.Const(goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_, a);
+goog.string.unescapeEntitiesUsingDom_ = function (a, b) {
+  var c = {
+    "&amp;": "&",
+    "&lt;": "<",
+    "&gt;": ">",
+    "&quot;": '"'
+  };
+  var d = b ? b.createElement("div") : goog.global.document.createElement("div");
+  return a.replace(goog.string.HTML_ENTITY_PATTERN_, function (a, b) {
+    var e = c[a];
+    if (e) return e;
+    "#" == b.charAt(0) && (b = Number("0" + b.substr(1)), isNaN(b) || (e = String.fromCharCode(b)));
+    e || (goog.dom.safe.setInnerHtml(d, goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract(goog.string.Const.from("Single HTML entity."), a + " ")), e = d.firstChild.nodeValue.slice(0, -1));
+    return c[a] = e;
+  });
 };
 
-goog.string.Const.TYPE_MARKER_ = {};
-goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_ = {};
-goog.string.Const.EMPTY = goog.string.Const.from("");
-goog.fs = {};
-goog.fs.url = {};
+goog.string.unescapePureXmlEntities_ = function (a) {
+  return a.replace(/&([^;]+);/g, function (a, c) {
+    switch (c) {
+      case "amp":
+        return "&";
 
-goog.fs.url.createObjectUrl = function (a) {
-  return goog.fs.url.getUrlObject_().createObjectURL(a);
-};
+      case "lt":
+        return "<";
 
-goog.fs.url.revokeObjectUrl = function (a) {
-  goog.fs.url.getUrlObject_().revokeObjectURL(a);
+      case "gt":
+        return ">";
+
+      case "quot":
+        return '"';
+
+      default:
+        return "#" != c.charAt(0) || (c = Number("0" + c.substr(1)), isNaN(c)) ? a : String.fromCharCode(c);
+    }
+  });
 };
 
-goog.fs.url.getUrlObject_ = function () {
-  var a = goog.fs.url.findUrlObject_();
-  if (null != a) return a;
-  throw Error("This browser doesn't seem to support blob URLs");
+goog.string.HTML_ENTITY_PATTERN_ = /&([^;\s<&]+);?/g;
+
+goog.string.whitespaceEscape = function (a, b) {
+  return goog.string.newLineToBr(a.replace(/  /g, " &#160;"), b);
 };
 
-goog.fs.url.findUrlObject_ = function () {
-  return goog.isDef(goog.global.URL) && goog.isDef(goog.global.URL.createObjectURL) ? goog.global.URL : goog.isDef(goog.global.webkitURL) && goog.isDef(goog.global.webkitURL.createObjectURL) ? goog.global.webkitURL : goog.isDef(goog.global.createObjectURL) ? goog.global : null;
+goog.string.preserveSpaces = function (a) {
+  return a.replace(/(^|[\n ]) /g, "$1" + goog.string.Unicode.NBSP);
 };
 
-goog.fs.url.browserSupportsObjectUrls = function () {
-  return null != goog.fs.url.findUrlObject_();
+goog.string.stripQuotes = function (a, b) {
+  for (var c = b.length, d = 0; d < c; d++) {
+    var e = 1 == c ? b : b.charAt(d);
+    if (a.charAt(0) == e && a.charAt(a.length - 1) == e) return a.substring(1, a.length - 1);
+  }
+
+  return a;
 };
 
-goog.html = {};
-goog.html.trustedtypes = {};
-goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY = goog.TRUSTED_TYPES_POLICY_NAME ? goog.createTrustedTypesPolicy(goog.TRUSTED_TYPES_POLICY_NAME + "#html") : null;
-goog.i18n = {};
-goog.i18n.bidi = {};
-goog.i18n.bidi.FORCE_RTL = !1;
-goog.i18n.bidi.IS_RTL = goog.i18n.bidi.FORCE_RTL || ("ar" == goog.LOCALE.substring(0, 2).toLowerCase() || "fa" == goog.LOCALE.substring(0, 2).toLowerCase() || "he" == goog.LOCALE.substring(0, 2).toLowerCase() || "iw" == goog.LOCALE.substring(0, 2).toLowerCase() || "ps" == goog.LOCALE.substring(0, 2).toLowerCase() || "sd" == goog.LOCALE.substring(0, 2).toLowerCase() || "ug" == goog.LOCALE.substring(0, 2).toLowerCase() || "ur" == goog.LOCALE.substring(0, 2).toLowerCase() || "yi" == goog.LOCALE.substring(0, 2).toLowerCase()) && (2 == goog.LOCALE.length || "-" == goog.LOCALE.substring(2, 3) || "_" == goog.LOCALE.substring(2, 3)) || 3 <= goog.LOCALE.length && "ckb" == goog.LOCALE.substring(0, 3).toLowerCase() && (3 == goog.LOCALE.length || "-" == goog.LOCALE.substring(3, 4) || "_" == goog.LOCALE.substring(3, 4)) || 7 <= goog.LOCALE.length && ("-" == goog.LOCALE.substring(2, 3) || "_" == goog.LOCALE.substring(2, 3)) && ("adlm" == goog.LOCALE.substring(3, 7).toLowerCase() || "arab" == goog.LOCALE.substring(3, 7).toLowerCase() || "hebr" == goog.LOCALE.substring(3, 7).toLowerCase() || "nkoo" == goog.LOCALE.substring(3, 7).toLowerCase() || "rohg" == goog.LOCALE.substring(3, 7).toLowerCase() || "thaa" == goog.LOCALE.substring(3, 7).toLowerCase()) || 8 <= goog.LOCALE.length && ("-" == goog.LOCALE.substring(3, 4) || "_" == goog.LOCALE.substring(3, 4)) && ("adlm" == goog.LOCALE.substring(4, 8).toLowerCase() || "arab" == goog.LOCALE.substring(4, 8).toLowerCase() || "hebr" == goog.LOCALE.substring(4, 8).toLowerCase() || "nkoo" == goog.LOCALE.substring(4, 8).toLowerCase() || "rohg" == goog.LOCALE.substring(4, 8).toLowerCase() || "thaa" == goog.LOCALE.substring(4, 8).toLowerCase());
-goog.i18n.bidi.Format = {
-  LRE: "\u202a",
-  RLE: "\u202b",
-  PDF: "\u202c",
-  LRM: "\u200e",
-  RLM: "\u200f"
+goog.string.truncate = function (a, b, c) {
+  c && (a = goog.string.unescapeEntities(a));
+  a.length > b && (a = a.substring(0, b - 3) + "...");
+  c && (a = goog.string.htmlEscape(a));
+  return a;
 };
-goog.i18n.bidi.Dir = {
-  LTR: 1,
-  RTL: -1,
-  NEUTRAL: 0
+
+goog.string.truncateMiddle = function (a, b, c, d) {
+  c && (a = goog.string.unescapeEntities(a));
+
+  if (d && a.length > b) {
+    d > b && (d = b);
+    var e = a.length - d;
+    a = a.substring(0, b - d) + "..." + a.substring(e);
+  } else a.length > b && (d = Math.floor(b / 2), e = a.length - d, a = a.substring(0, d + b % 2) + "..." + a.substring(e));
+
+  c && (a = goog.string.htmlEscape(a));
+  return a;
 };
-goog.i18n.bidi.RIGHT = "right";
-goog.i18n.bidi.LEFT = "left";
-goog.i18n.bidi.I18N_RIGHT = goog.i18n.bidi.IS_RTL ? goog.i18n.bidi.LEFT : goog.i18n.bidi.RIGHT;
-goog.i18n.bidi.I18N_LEFT = goog.i18n.bidi.IS_RTL ? goog.i18n.bidi.RIGHT : goog.i18n.bidi.LEFT;
 
-goog.i18n.bidi.toDir = function (a, b) {
-  return "number" == typeof a ? 0 < a ? goog.i18n.bidi.Dir.LTR : 0 > a ? goog.i18n.bidi.Dir.RTL : b ? null : goog.i18n.bidi.Dir.NEUTRAL : null == a ? null : a ? goog.i18n.bidi.Dir.RTL : goog.i18n.bidi.Dir.LTR;
+goog.string.specialEscapeChars_ = {
+  "\x00": "\\0",
+  "\b": "\\b",
+  "\f": "\\f",
+  "\n": "\\n",
+  "\r": "\\r",
+  "\t": "\\t",
+  "\x0B": "\\x0B",
+  '"': '\\"',
+  "\\": "\\\\",
+  "<": "\\u003C"
+};
+goog.string.jsEscapeCache_ = {
+  "'": "\\'"
 };
 
-goog.i18n.bidi.ltrChars_ = "A-Za-z\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02b8\u0300-\u0590\u0900-\u1fff\u200e\u2c00-\ud801\ud804-\ud839\ud83c-\udbff\uf900-\ufb1c\ufe00-\ufe6f\ufefd-\uffff";
-goog.i18n.bidi.rtlChars_ = "\u0591-\u06ef\u06fa-\u08ff\u200f\ud802-\ud803\ud83a-\ud83b\ufb1d-\ufdff\ufe70-\ufefc";
-goog.i18n.bidi.htmlSkipReg_ = /<[^>]*>|&[^;]+;/g;
+goog.string.quote = function (a) {
+  a = String(a);
 
-goog.i18n.bidi.stripHtmlIfNeeded_ = function (a, b) {
-  return b ? a.replace(goog.i18n.bidi.htmlSkipReg_, "") : a;
+  for (var b = ['"'], c = 0; c < a.length; c++) {
+    var d = a.charAt(c),
+        e = d.charCodeAt(0);
+    b[c + 1] = goog.string.specialEscapeChars_[d] || (31 < e && 127 > e ? d : goog.string.escapeChar(d));
+  }
+
+  b.push('"');
+  return b.join("");
 };
 
-goog.i18n.bidi.rtlCharReg_ = new RegExp("[" + goog.i18n.bidi.rtlChars_ + "]");
-goog.i18n.bidi.ltrCharReg_ = new RegExp("[" + goog.i18n.bidi.ltrChars_ + "]");
+goog.string.escapeString = function (a) {
+  for (var b = [], c = 0; c < a.length; c++) b[c] = goog.string.escapeChar(a.charAt(c));
 
-goog.i18n.bidi.hasAnyRtl = function (a, b) {
-  return goog.i18n.bidi.rtlCharReg_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a, b));
+  return b.join("");
 };
 
-goog.i18n.bidi.hasRtlChar = goog.i18n.bidi.hasAnyRtl;
+goog.string.escapeChar = function (a) {
+  if (a in goog.string.jsEscapeCache_) return goog.string.jsEscapeCache_[a];
+  if (a in goog.string.specialEscapeChars_) return goog.string.jsEscapeCache_[a] = goog.string.specialEscapeChars_[a];
+  var b = a.charCodeAt(0);
+  if (31 < b && 127 > b) var c = a;else {
+    if (256 > b) {
+      if (c = "\\x", 16 > b || 256 < b) c += "0";
+    } else c = "\\u", 4096 > b && (c += "0");
 
-goog.i18n.bidi.hasAnyLtr = function (a, b) {
-  return goog.i18n.bidi.ltrCharReg_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a, b));
+    c += b.toString(16).toUpperCase();
+  }
+  return goog.string.jsEscapeCache_[a] = c;
 };
 
-goog.i18n.bidi.ltrRe_ = new RegExp("^[" + goog.i18n.bidi.ltrChars_ + "]");
-goog.i18n.bidi.rtlRe_ = new RegExp("^[" + goog.i18n.bidi.rtlChars_ + "]");
+goog.string.contains = goog.string.internal.contains;
+goog.string.caseInsensitiveContains = goog.string.internal.caseInsensitiveContains;
 
-goog.i18n.bidi.isRtlChar = function (a) {
-  return goog.i18n.bidi.rtlRe_.test(a);
+goog.string.countOf = function (a, b) {
+  return a && b ? a.split(b).length - 1 : 0;
 };
 
-goog.i18n.bidi.isLtrChar = function (a) {
-  return goog.i18n.bidi.ltrRe_.test(a);
+goog.string.removeAt = function (a, b, c) {
+  var d = a;
+  0 <= b && b < a.length && 0 < c && (d = a.substr(0, b) + a.substr(b + c, a.length - b - c));
+  return d;
 };
 
-goog.i18n.bidi.isNeutralChar = function (a) {
-  return !goog.i18n.bidi.isLtrChar(a) && !goog.i18n.bidi.isRtlChar(a);
+goog.string.remove = function (a, b) {
+  return a.replace(b, "");
 };
 
-goog.i18n.bidi.ltrDirCheckRe_ = new RegExp("^[^" + goog.i18n.bidi.rtlChars_ + "]*[" + goog.i18n.bidi.ltrChars_ + "]");
-goog.i18n.bidi.rtlDirCheckRe_ = new RegExp("^[^" + goog.i18n.bidi.ltrChars_ + "]*[" + goog.i18n.bidi.rtlChars_ + "]");
+goog.string.removeAll = function (a, b) {
+  b = new RegExp(goog.string.regExpEscape(b), "g");
+  return a.replace(b, "");
+};
 
-goog.i18n.bidi.startsWithRtl = function (a, b) {
-  return goog.i18n.bidi.rtlDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a, b));
+goog.string.replaceAll = function (a, b, c) {
+  b = new RegExp(goog.string.regExpEscape(b), "g");
+  return a.replace(b, c.replace(/\$/g, "$$$$"));
 };
 
-goog.i18n.bidi.isRtlText = goog.i18n.bidi.startsWithRtl;
+goog.string.regExpEscape = function (a) {
+  return String(a).replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, "\\$1").replace(/\x08/g, "\\x08");
+};
 
-goog.i18n.bidi.startsWithLtr = function (a, b) {
-  return goog.i18n.bidi.ltrDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a, b));
+goog.string.repeat = String.prototype.repeat ? function (a, b) {
+  return a.repeat(b);
+} : function (a, b) {
+  return Array(b + 1).join(a);
 };
 
-goog.i18n.bidi.isLtrText = goog.i18n.bidi.startsWithLtr;
-goog.i18n.bidi.isRequiredLtrRe_ = /^http:\/\/.*/;
+goog.string.padNumber = function (a, b, c) {
+  a = goog.isDef(c) ? a.toFixed(c) : String(a);
+  c = a.indexOf(".");
+  -1 == c && (c = a.length);
+  return goog.string.repeat("0", Math.max(0, b - c)) + a;
+};
 
-goog.i18n.bidi.isNeutralText = function (a, b) {
-  a = goog.i18n.bidi.stripHtmlIfNeeded_(a, b);
-  return goog.i18n.bidi.isRequiredLtrRe_.test(a) || !goog.i18n.bidi.hasAnyLtr(a) && !goog.i18n.bidi.hasAnyRtl(a);
+goog.string.makeSafe = function (a) {
+  return null == a ? "" : String(a);
 };
 
-goog.i18n.bidi.ltrExitDirCheckRe_ = new RegExp("[" + goog.i18n.bidi.ltrChars_ + "][^" + goog.i18n.bidi.rtlChars_ + "]*$");
-goog.i18n.bidi.rtlExitDirCheckRe_ = new RegExp("[" + goog.i18n.bidi.rtlChars_ + "][^" + goog.i18n.bidi.ltrChars_ + "]*$");
+goog.string.buildString = function (a) {
+  return Array.prototype.join.call(arguments, "");
+};
 
-goog.i18n.bidi.endsWithLtr = function (a, b) {
-  return goog.i18n.bidi.ltrExitDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a, b));
+goog.string.getRandomString = function () {
+  return Math.floor(2147483648 * Math.random()).toString(36) + Math.abs(Math.floor(2147483648 * Math.random()) ^ goog.now()).toString(36);
 };
 
-goog.i18n.bidi.isLtrExitText = goog.i18n.bidi.endsWithLtr;
+goog.string.compareVersions = goog.string.internal.compareVersions;
 
-goog.i18n.bidi.endsWithRtl = function (a, b) {
-  return goog.i18n.bidi.rtlExitDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a, b));
+goog.string.hashCode = function (a) {
+  for (var b = 0, c = 0; c < a.length; ++c) b = 31 * b + a.charCodeAt(c) >>> 0;
+
+  return b;
 };
 
-goog.i18n.bidi.isRtlExitText = goog.i18n.bidi.endsWithRtl;
-goog.i18n.bidi.rtlLocalesRe_ = /^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i;
+goog.string.uniqueStringCounter_ = 2147483648 * Math.random() | 0;
 
-goog.i18n.bidi.isRtlLanguage = function (a) {
-  return goog.i18n.bidi.rtlLocalesRe_.test(a);
+goog.string.createUniqueString = function () {
+  return "goog_" + goog.string.uniqueStringCounter_++;
 };
 
-goog.i18n.bidi.bracketGuardTextRe_ = /(\(.*?\)+)|(\[.*?\]+)|(\{.*?\}+)|(<.*?>+)/g;
+goog.string.toNumber = function (a) {
+  var b = Number(a);
+  return 0 == b && goog.string.isEmptyOrWhitespace(a) ? NaN : b;
+};
 
-goog.i18n.bidi.guardBracketInText = function (a, b) {
-  b = (void 0 === b ? goog.i18n.bidi.hasAnyRtl(a) : b) ? goog.i18n.bidi.Format.RLM : goog.i18n.bidi.Format.LRM;
-  return a.replace(goog.i18n.bidi.bracketGuardTextRe_, b + "$&" + b);
+goog.string.isLowerCamelCase = function (a) {
+  return /^[a-z]+([A-Z][a-z]*)*$/.test(a);
 };
 
-goog.i18n.bidi.enforceRtlInHtml = function (a) {
-  return "<" == a.charAt(0) ? a.replace(/<\w+/, "$& dir=rtl") : "\n<span dir=rtl>" + a + "</span>";
+goog.string.isUpperCamelCase = function (a) {
+  return /^([A-Z][a-z]*)+$/.test(a);
 };
 
-goog.i18n.bidi.enforceRtlInText = function (a) {
-  return goog.i18n.bidi.Format.RLE + a + goog.i18n.bidi.Format.PDF;
+goog.string.toCamelCase = function (a) {
+  return String(a).replace(/\-([a-z])/g, function (a, c) {
+    return c.toUpperCase();
+  });
 };
 
-goog.i18n.bidi.enforceLtrInHtml = function (a) {
-  return "<" == a.charAt(0) ? a.replace(/<\w+/, "$& dir=ltr") : "\n<span dir=ltr>" + a + "</span>";
+goog.string.toSelectorCase = function (a) {
+  return String(a).replace(/([A-Z])/g, "-$1").toLowerCase();
 };
 
-goog.i18n.bidi.enforceLtrInText = function (a) {
-  return goog.i18n.bidi.Format.LRE + a + goog.i18n.bidi.Format.PDF;
+goog.string.toTitleCase = function (a, b) {
+  b = goog.isString(b) ? goog.string.regExpEscape(b) : "\\s";
+  return a.replace(new RegExp("(^" + (b ? "|[" + b + "]+" : "") + ")([a-z])", "g"), function (a, b, e) {
+    return b + e.toUpperCase();
+  });
 };
 
-goog.i18n.bidi.dimensionsRe_ = /:\s*([.\d][.\w]*)\s+([.\d][.\w]*)\s+([.\d][.\w]*)\s+([.\d][.\w]*)/g;
-goog.i18n.bidi.leftRe_ = /left/gi;
-goog.i18n.bidi.rightRe_ = /right/gi;
-goog.i18n.bidi.tempRe_ = /%%%%/g;
+goog.string.capitalize = function (a) {
+  return String(a.charAt(0)).toUpperCase() + String(a.substr(1)).toLowerCase();
+};
 
-goog.i18n.bidi.mirrorCSS = function (a) {
-  return a.replace(goog.i18n.bidi.dimensionsRe_, ":$1 $4 $3 $2").replace(goog.i18n.bidi.leftRe_, "%%%%").replace(goog.i18n.bidi.rightRe_, goog.i18n.bidi.LEFT).replace(goog.i18n.bidi.tempRe_, goog.i18n.bidi.RIGHT);
+goog.string.parseInt = function (a) {
+  isFinite(a) && (a = String(a));
+  return goog.isString(a) ? /^\s*-?0x/i.test(a) ? parseInt(a, 16) : parseInt(a, 10) : NaN;
 };
 
-goog.i18n.bidi.doubleQuoteSubstituteRe_ = /([\u0591-\u05f2])"/g;
-goog.i18n.bidi.singleQuoteSubstituteRe_ = /([\u0591-\u05f2])'/g;
+goog.string.splitLimit = function (a, b, c) {
+  a = a.split(b);
 
-goog.i18n.bidi.normalizeHebrewQuote = function (a) {
-  return a.replace(goog.i18n.bidi.doubleQuoteSubstituteRe_, "$1\u05f4").replace(goog.i18n.bidi.singleQuoteSubstituteRe_, "$1\u05f3");
-};
+  for (var d = []; 0 < c && a.length;) d.push(a.shift()), c--;
 
-goog.i18n.bidi.wordSeparatorRe_ = /\s+/;
-goog.i18n.bidi.hasNumeralsRe_ = /[\d\u06f0-\u06f9]/;
-goog.i18n.bidi.rtlDetectionThreshold_ = .4;
+  a.length && d.push(a.join(b));
+  return d;
+};
 
-goog.i18n.bidi.estimateDirection = function (a, b) {
-  var c = 0,
-      d = 0,
-      e = !1;
-  a = goog.i18n.bidi.stripHtmlIfNeeded_(a, b).split(goog.i18n.bidi.wordSeparatorRe_);
+goog.string.lastComponent = function (a, b) {
+  if (b) "string" == typeof b && (b = [b]);else return a;
 
-  for (b = 0; b < a.length; b++) {
-    var f = a[b];
-    goog.i18n.bidi.startsWithRtl(f) ? (c++, d++) : goog.i18n.bidi.isRequiredLtrRe_.test(f) ? e = !0 : goog.i18n.bidi.hasAnyLtr(f) ? d++ : goog.i18n.bidi.hasNumeralsRe_.test(f) && (e = !0);
+  for (var c = -1, d = 0; d < b.length; d++) if ("" != b[d]) {
+    var e = a.lastIndexOf(b[d]);
+    e > c && (c = e);
   }
 
-  return 0 == d ? e ? goog.i18n.bidi.Dir.LTR : goog.i18n.bidi.Dir.NEUTRAL : c / d > goog.i18n.bidi.rtlDetectionThreshold_ ? goog.i18n.bidi.Dir.RTL : goog.i18n.bidi.Dir.LTR;
+  return -1 == c ? a : a.slice(c + 1);
 };
 
-goog.i18n.bidi.detectRtlDirectionality = function (a, b) {
-  return goog.i18n.bidi.estimateDirection(a, b) == goog.i18n.bidi.Dir.RTL;
-};
+goog.string.editDistance = function (a, b) {
+  var c = [],
+      d = [];
+  if (a == b) return 0;
+  if (!a.length || !b.length) return Math.max(a.length, b.length);
 
-goog.i18n.bidi.setElementDirAndAlign = function (a, b) {
-  a && (b = goog.i18n.bidi.toDir(b)) && (a.style.textAlign = b == goog.i18n.bidi.Dir.RTL ? goog.i18n.bidi.RIGHT : goog.i18n.bidi.LEFT, a.dir = b == goog.i18n.bidi.Dir.RTL ? "rtl" : "ltr");
-};
+  for (var e = 0; e < b.length + 1; e++) c[e] = e;
 
-goog.i18n.bidi.setElementDirByTextDirectionality = function (a, b) {
-  switch (goog.i18n.bidi.estimateDirection(b)) {
-    case goog.i18n.bidi.Dir.LTR:
-      a.dir = "ltr";
-      break;
+  for (e = 0; e < a.length; e++) {
+    d[0] = e + 1;
 
-    case goog.i18n.bidi.Dir.RTL:
-      a.dir = "rtl";
-      break;
+    for (var f = 0; f < b.length; f++) d[f + 1] = Math.min(d[f] + 1, c[f + 1] + 1, c[f] + Number(a[e] != b[f]));
 
-    default:
-      a.removeAttribute("dir");
+    for (f = 0; f < c.length; f++) c[f] = d[f];
   }
+
+  return d[b.length];
 };
 
-goog.i18n.bidi.DirectionalString = function () {};
+goog.labs.userAgent.engine = {};
 
-goog.html.TrustedResourceUrl = function () {
-  this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_ = "";
-  this.trustedURL_ = null;
-  this.TRUSTED_RESOURCE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = goog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;
+goog.labs.userAgent.engine.isPresto = function () {
+  return goog.labs.userAgent.util.matchUserAgent("Presto");
 };
 
-goog.html.TrustedResourceUrl.prototype.implementsGoogStringTypedString = !0;
-
-goog.html.TrustedResourceUrl.prototype.getTypedStringValue = function () {
-  return this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_.toString();
+goog.labs.userAgent.engine.isTrident = function () {
+  return goog.labs.userAgent.util.matchUserAgent("Trident") || goog.labs.userAgent.util.matchUserAgent("MSIE");
 };
 
-goog.html.TrustedResourceUrl.prototype.implementsGoogI18nBidiDirectionalString = !0;
+goog.labs.userAgent.engine.isEdge = function () {
+  return goog.labs.userAgent.util.matchUserAgent("Edge");
+};
 
-goog.html.TrustedResourceUrl.prototype.getDirection = function () {
-  return goog.i18n.bidi.Dir.LTR;
+goog.labs.userAgent.engine.isWebKit = function () {
+  return goog.labs.userAgent.util.matchUserAgentIgnoreCase("WebKit") && !goog.labs.userAgent.engine.isEdge();
 };
 
-goog.html.TrustedResourceUrl.prototype.cloneWithParams = function (a, b) {
-  var c = goog.html.TrustedResourceUrl.unwrap(this);
-  c = goog.html.TrustedResourceUrl.URL_PARAM_PARSER_.exec(c);
-  var d = c[3] || "";
-  return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(c[1] + goog.html.TrustedResourceUrl.stringifyParams_("?", c[2] || "", a) + goog.html.TrustedResourceUrl.stringifyParams_("#", d, b));
+goog.labs.userAgent.engine.isGecko = function () {
+  return goog.labs.userAgent.util.matchUserAgent("Gecko") && !goog.labs.userAgent.engine.isWebKit() && !goog.labs.userAgent.engine.isTrident() && !goog.labs.userAgent.engine.isEdge();
 };
 
-goog.DEBUG && (goog.html.TrustedResourceUrl.prototype.toString = function () {
-  return "TrustedResourceUrl{" + this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_ + "}";
-});
+goog.labs.userAgent.engine.getVersion = function () {
+  var a = goog.labs.userAgent.util.getUserAgent();
 
-goog.html.TrustedResourceUrl.unwrap = function (a) {
-  return goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(a).toString();
+  if (a) {
+    a = goog.labs.userAgent.util.extractVersionTuples(a);
+    var b = goog.labs.userAgent.engine.getEngineTuple_(a);
+    if (b) return "Gecko" == b[0] ? goog.labs.userAgent.engine.getVersionForKey_(a, "Firefox") : b[1];
+    a = a[0];
+    var c;
+    if (a && (c = a[2]) && (c = /Trident\/([^\s;]+)/.exec(c))) return c[1];
+  }
+
+  return "";
 };
 
-goog.html.TrustedResourceUrl.unwrapTrustedScriptURL = function (a) {
-  if (a instanceof goog.html.TrustedResourceUrl && a.constructor === goog.html.TrustedResourceUrl && a.TRUSTED_RESOURCE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ === goog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) return a.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_;
-  goog.asserts.fail("expected object of type TrustedResourceUrl, got '" + a + "' of type " + goog.typeOf(a));
-  return "type_error:TrustedResourceUrl";
+goog.labs.userAgent.engine.getEngineTuple_ = function (a) {
+  if (!goog.labs.userAgent.engine.isEdge()) return a[1];
+
+  for (var b = 0; b < a.length; b++) {
+    var c = a[b];
+    if ("Edge" == c[0]) return c;
+  }
 };
 
-goog.html.TrustedResourceUrl.unwrapTrustedURL = function (a) {
-  return a.trustedURL_ ? a.trustedURL_ : goog.html.TrustedResourceUrl.unwrap(a);
+goog.labs.userAgent.engine.isVersionOrHigher = function (a) {
+  return 0 <= goog.string.compareVersions(goog.labs.userAgent.engine.getVersion(), a);
 };
 
-goog.html.TrustedResourceUrl.format = function (a, b) {
-  var c = goog.string.Const.unwrap(a);
-  if (!goog.html.TrustedResourceUrl.BASE_URL_.test(c)) throw Error("Invalid TrustedResourceUrl format: " + c);
-  a = c.replace(goog.html.TrustedResourceUrl.FORMAT_MARKER_, function (a, e) {
-    if (!Object.prototype.hasOwnProperty.call(b, e)) throw Error('Found marker, "' + e + '", in format string, "' + c + '", but no valid label mapping found in args: ' + JSON.stringify(b));
-    a = b[e];
-    return a instanceof goog.string.Const ? goog.string.Const.unwrap(a) : encodeURIComponent(String(a));
-  });
-  return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(a);
+goog.labs.userAgent.engine.getVersionForKey_ = function (a, b) {
+  return (a = goog.array.find(a, function (a) {
+    return b == a[0];
+  })) && a[1] || "";
 };
 
-goog.html.TrustedResourceUrl.FORMAT_MARKER_ = /%{(\w+)}/g;
-goog.html.TrustedResourceUrl.BASE_URL_ = /^((https:)?\/\/[0-9a-z.:[\]-]+\/|\/[^/\\]|[^:/\\%]+\/|[^:/\\%]*[?#]|about:blank#)/i;
-goog.html.TrustedResourceUrl.URL_PARAM_PARSER_ = /^([^?#]*)(\?[^#]*)?(#[\s\S]*)?/;
+goog.labs.userAgent.platform = {};
 
-goog.html.TrustedResourceUrl.formatWithParams = function (a, b, c, d) {
-  return goog.html.TrustedResourceUrl.format(a, b).cloneWithParams(c, d);
+goog.labs.userAgent.platform.isAndroid = function () {
+  return goog.labs.userAgent.util.matchUserAgent("Android");
 };
 
-goog.html.TrustedResourceUrl.fromConstant = function (a) {
-  return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(goog.string.Const.unwrap(a));
+goog.labs.userAgent.platform.isIpod = function () {
+  return goog.labs.userAgent.util.matchUserAgent("iPod");
 };
 
-goog.html.TrustedResourceUrl.fromConstants = function (a) {
-  for (var b = "", c = 0; c < a.length; c++) b += goog.string.Const.unwrap(a[c]);
-
-  return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(b);
+goog.labs.userAgent.platform.isIphone = function () {
+  return goog.labs.userAgent.util.matchUserAgent("iPhone") && !goog.labs.userAgent.util.matchUserAgent("iPod") && !goog.labs.userAgent.util.matchUserAgent("iPad");
 };
 
-goog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = {};
+goog.labs.userAgent.platform.isIpad = function () {
+  return goog.labs.userAgent.util.matchUserAgent("iPad");
+};
 
-goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse = function (a) {
-  var b = new goog.html.TrustedResourceUrl();
-  b.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_ = goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY ? goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createScriptURL(a) : a;
-  goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY && (b.trustedURL_ = goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createURL(a));
-  return b;
+goog.labs.userAgent.platform.isIos = function () {
+  return goog.labs.userAgent.platform.isIphone() || goog.labs.userAgent.platform.isIpad() || goog.labs.userAgent.platform.isIpod();
 };
 
-goog.html.TrustedResourceUrl.stringifyParams_ = function (a, b, c) {
-  if (null == c) return b;
-  if (goog.isString(c)) return c ? a + encodeURIComponent(c) : "";
+goog.labs.userAgent.platform.isMacintosh = function () {
+  return goog.labs.userAgent.util.matchUserAgent("Macintosh");
+};
 
-  for (var d in c) {
-    var e = c[d];
-    e = goog.isArray(e) ? e : [e];
+goog.labs.userAgent.platform.isLinux = function () {
+  return goog.labs.userAgent.util.matchUserAgent("Linux");
+};
 
-    for (var f = 0; f < e.length; f++) {
-      var g = e[f];
-      null != g && (b || (b = a), b += (b.length > a.length ? "&" : "") + encodeURIComponent(d) + "=" + encodeURIComponent(String(g)));
-    }
-  }
+goog.labs.userAgent.platform.isWindows = function () {
+  return goog.labs.userAgent.util.matchUserAgent("Windows");
+};
 
-  return b;
+goog.labs.userAgent.platform.isChromeOS = function () {
+  return goog.labs.userAgent.util.matchUserAgent("CrOS");
 };
 
-goog.html.SafeUrl = function () {
-  this.privateDoNotAccessOrElseSafeUrlWrappedValue_ = "";
-  this.SAFE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;
+goog.labs.userAgent.platform.isChromecast = function () {
+  return goog.labs.userAgent.util.matchUserAgent("CrKey");
 };
 
-goog.html.SafeUrl.INNOCUOUS_STRING = "about:invalid#zClosurez";
-goog.html.SafeUrl.prototype.implementsGoogStringTypedString = !0;
+goog.labs.userAgent.platform.isKaiOS = function () {
+  return goog.labs.userAgent.util.matchUserAgentIgnoreCase("KaiOS");
+};
 
-goog.html.SafeUrl.prototype.getTypedStringValue = function () {
-  return this.privateDoNotAccessOrElseSafeUrlWrappedValue_.toString();
+goog.labs.userAgent.platform.isGo2Phone = function () {
+  return goog.labs.userAgent.util.matchUserAgentIgnoreCase("GAFP");
 };
 
-goog.html.SafeUrl.prototype.implementsGoogI18nBidiDirectionalString = !0;
+goog.labs.userAgent.platform.getVersion = function () {
+  var a = goog.labs.userAgent.util.getUserAgent(),
+      b = "";
+  goog.labs.userAgent.platform.isWindows() ? (b = /Windows (?:NT|Phone) ([0-9.]+)/, b = (a = b.exec(a)) ? a[1] : "0.0") : goog.labs.userAgent.platform.isIos() ? (b = /(?:iPhone|iPod|iPad|CPU)\s+OS\s+(\S+)/, b = (a = b.exec(a)) && a[1].replace(/_/g, ".")) : goog.labs.userAgent.platform.isMacintosh() ? (b = /Mac OS X ([0-9_.]+)/, b = (a = b.exec(a)) ? a[1].replace(/_/g, ".") : "10") : goog.labs.userAgent.platform.isKaiOS() ? (b = /(?:KaiOS)\/(\S+)/i, b = (a = b.exec(a)) && a[1]) : goog.labs.userAgent.platform.isAndroid() ? (b = /Android\s+([^\);]+)(\)|;)/, b = (a = b.exec(a)) && a[1]) : goog.labs.userAgent.platform.isChromeOS() && (b = /(?:CrOS\s+(?:i686|x86_64)\s+([0-9.]+))/, b = (a = b.exec(a)) && a[1]);
+  return b || "";
+};
 
-goog.html.SafeUrl.prototype.getDirection = function () {
-  return goog.i18n.bidi.Dir.LTR;
+goog.labs.userAgent.platform.isVersionOrHigher = function (a) {
+  return 0 <= goog.string.compareVersions(goog.labs.userAgent.platform.getVersion(), a);
 };
 
-goog.DEBUG && (goog.html.SafeUrl.prototype.toString = function () {
-  return "SafeUrl{" + this.privateDoNotAccessOrElseSafeUrlWrappedValue_ + "}";
-});
+goog.reflect = {};
 
-goog.html.SafeUrl.unwrap = function (a) {
-  return goog.html.SafeUrl.unwrapTrustedURL(a).toString();
+goog.reflect.object = function (a, b) {
+  return b;
 };
 
-goog.html.SafeUrl.unwrapTrustedURL = function (a) {
-  if (a instanceof goog.html.SafeUrl && a.constructor === goog.html.SafeUrl && a.SAFE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ === goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) return a.privateDoNotAccessOrElseSafeUrlWrappedValue_;
-  goog.asserts.fail("expected object of type SafeUrl, got '" + a + "' of type " + goog.typeOf(a));
-  return "type_error:SafeUrl";
+goog.reflect.objectProperty = function (a, b) {
+  return a;
 };
 
-goog.html.SafeUrl.fromConstant = function (a) {
-  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(goog.string.Const.unwrap(a));
+goog.reflect.sinkValue = function (a) {
+  goog.reflect.sinkValue[" "](a);
+  return a;
 };
 
-goog.html.SAFE_MIME_TYPE_PATTERN_ = /^(?:audio\/(?:3gpp2|3gpp|aac|L16|midi|mp3|mp4|mpeg|oga|ogg|opus|x-m4a|x-wav|wav|webm)|image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp|x-icon)|text\/csv|video\/(?:mpeg|mp4|ogg|webm|quicktime))(?:;\w+=(?:\w+|"[\w;=]+"))*$/i;
+goog.reflect.sinkValue[" "] = goog.nullFunction;
 
-goog.html.SafeUrl.isSafeMimeType = function (a) {
-  return goog.html.SAFE_MIME_TYPE_PATTERN_.test(a);
+goog.reflect.canAccessProperty = function (a, b) {
+  try {
+    return goog.reflect.sinkValue(a[b]), !0;
+  } catch (c) {}
+
+  return !1;
 };
 
-goog.html.SafeUrl.fromBlob = function (a) {
-  a = goog.html.SAFE_MIME_TYPE_PATTERN_.test(a.type) ? goog.fs.url.createObjectUrl(a) : goog.html.SafeUrl.INNOCUOUS_STRING;
-  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a);
+goog.reflect.cache = function (a, b, c, d) {
+  d = d ? d(b) : b;
+  return Object.prototype.hasOwnProperty.call(a, d) ? a[d] : a[d] = c(b);
 };
 
-goog.html.DATA_URL_PATTERN_ = /^data:([^,]*);base64,[a-z0-9+\/]+=*$/i;
+goog.userAgent = {};
+goog.userAgent.ASSUME_IE = !1;
+goog.userAgent.ASSUME_EDGE = !1;
+goog.userAgent.ASSUME_GECKO = !1;
+goog.userAgent.ASSUME_WEBKIT = !1;
+goog.userAgent.ASSUME_MOBILE_WEBKIT = !1;
+goog.userAgent.ASSUME_OPERA = !1;
+goog.userAgent.ASSUME_ANY_VERSION = !1;
+goog.userAgent.BROWSER_KNOWN_ = goog.userAgent.ASSUME_IE || goog.userAgent.ASSUME_EDGE || goog.userAgent.ASSUME_GECKO || goog.userAgent.ASSUME_MOBILE_WEBKIT || goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_OPERA;
 
-goog.html.SafeUrl.fromDataUrl = function (a) {
-  a = a.replace(/(%0A|%0D)/g, "");
-  var b = a.match(goog.html.DATA_URL_PATTERN_);
-  b = b && goog.html.SAFE_MIME_TYPE_PATTERN_.test(b[1]);
-  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(b ? a : goog.html.SafeUrl.INNOCUOUS_STRING);
+goog.userAgent.getUserAgentString = function () {
+  return goog.labs.userAgent.util.getUserAgent();
 };
 
-goog.html.SafeUrl.fromTelUrl = function (a) {
-  goog.string.internal.caseInsensitiveStartsWith(a, "tel:") || (a = goog.html.SafeUrl.INNOCUOUS_STRING);
-  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a);
+goog.userAgent.getNavigatorTyped = function () {
+  return goog.global.navigator || null;
 };
 
-goog.html.SIP_URL_PATTERN_ = /^sip[s]?:[+a-z0-9_.!$%&'*\/=^`{|}~-]+@([a-z0-9-]+\.)+[a-z0-9]{2,63}$/i;
-
-goog.html.SafeUrl.fromSipUrl = function (a) {
-  goog.html.SIP_URL_PATTERN_.test(decodeURIComponent(a)) || (a = goog.html.SafeUrl.INNOCUOUS_STRING);
-  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a);
+goog.userAgent.getNavigator = function () {
+  return goog.userAgent.getNavigatorTyped();
 };
 
-goog.html.SafeUrl.fromFacebookMessengerUrl = function (a) {
-  goog.string.internal.caseInsensitiveStartsWith(a, "fb-messenger://share") || (a = goog.html.SafeUrl.INNOCUOUS_STRING);
-  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a);
-};
+goog.userAgent.OPERA = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_OPERA : goog.labs.userAgent.browser.isOpera();
+goog.userAgent.IE = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_IE : goog.labs.userAgent.browser.isIE();
+goog.userAgent.EDGE = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_EDGE : goog.labs.userAgent.engine.isEdge();
+goog.userAgent.EDGE_OR_IE = goog.userAgent.EDGE || goog.userAgent.IE;
+goog.userAgent.GECKO = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_GECKO : goog.labs.userAgent.engine.isGecko();
+goog.userAgent.WEBKIT = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_MOBILE_WEBKIT : goog.labs.userAgent.engine.isWebKit();
 
-goog.html.SafeUrl.fromWhatsAppUrl = function (a) {
-  goog.string.internal.caseInsensitiveStartsWith(a, "whatsapp://send") || (a = goog.html.SafeUrl.INNOCUOUS_STRING);
-  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a);
+goog.userAgent.isMobile_ = function () {
+  return goog.userAgent.WEBKIT && goog.labs.userAgent.util.matchUserAgent("Mobile");
 };
 
-goog.html.SafeUrl.fromSmsUrl = function (a) {
-  goog.string.internal.caseInsensitiveStartsWith(a, "sms:") && goog.html.SafeUrl.isSmsUrlBodyValid_(a) || (a = goog.html.SafeUrl.INNOCUOUS_STRING);
-  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a);
-};
+goog.userAgent.MOBILE = goog.userAgent.ASSUME_MOBILE_WEBKIT || goog.userAgent.isMobile_();
+goog.userAgent.SAFARI = goog.userAgent.WEBKIT;
 
-goog.html.SafeUrl.isSmsUrlBodyValid_ = function (a) {
-  var b = a.indexOf("#");
-  0 < b && (a = a.substring(0, b));
-  b = a.match(/[?&]body=/gi);
-  if (!b) return !0;
-  if (1 < b.length) return !1;
-  a = a.match(/[?&]body=([^&]*)/)[1];
-  if (!a) return !0;
+goog.userAgent.determinePlatform_ = function () {
+  var a = goog.userAgent.getNavigatorTyped();
+  return a && a.platform || "";
+};
 
-  try {
-    decodeURIComponent(a);
-  } catch (c) {
-    return !1;
-  }
+goog.userAgent.PLATFORM = goog.userAgent.determinePlatform_();
+goog.userAgent.ASSUME_MAC = !1;
+goog.userAgent.ASSUME_WINDOWS = !1;
+goog.userAgent.ASSUME_LINUX = !1;
+goog.userAgent.ASSUME_X11 = !1;
+goog.userAgent.ASSUME_ANDROID = !1;
+goog.userAgent.ASSUME_IPHONE = !1;
+goog.userAgent.ASSUME_IPAD = !1;
+goog.userAgent.ASSUME_IPOD = !1;
+goog.userAgent.ASSUME_KAIOS = !1;
+goog.userAgent.ASSUME_GO2PHONE = !1;
+goog.userAgent.PLATFORM_KNOWN_ = goog.userAgent.ASSUME_MAC || goog.userAgent.ASSUME_WINDOWS || goog.userAgent.ASSUME_LINUX || goog.userAgent.ASSUME_X11 || goog.userAgent.ASSUME_ANDROID || goog.userAgent.ASSUME_IPHONE || goog.userAgent.ASSUME_IPAD || goog.userAgent.ASSUME_IPOD;
+goog.userAgent.MAC = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_MAC : goog.labs.userAgent.platform.isMacintosh();
+goog.userAgent.WINDOWS = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_WINDOWS : goog.labs.userAgent.platform.isWindows();
 
-  return /^(?:[a-z0-9\-_.~]|%[0-9a-f]{2})+$/i.test(a);
+goog.userAgent.isLegacyLinux_ = function () {
+  return goog.labs.userAgent.platform.isLinux() || goog.labs.userAgent.platform.isChromeOS();
 };
 
-goog.html.SafeUrl.fromSshUrl = function (a) {
-  goog.string.internal.caseInsensitiveStartsWith(a, "ssh://") || (a = goog.html.SafeUrl.INNOCUOUS_STRING);
-  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a);
-};
+goog.userAgent.LINUX = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_LINUX : goog.userAgent.isLegacyLinux_();
 
-goog.html.SafeUrl.sanitizeChromeExtensionUrl = function (a, b) {
-  return goog.html.SafeUrl.sanitizeExtensionUrl_(/^chrome-extension:\/\/([^\/]+)\//, a, b);
+goog.userAgent.isX11_ = function () {
+  var a = goog.userAgent.getNavigatorTyped();
+  return !!a && goog.string.contains(a.appVersion || "", "X11");
 };
 
-goog.html.SafeUrl.sanitizeFirefoxExtensionUrl = function (a, b) {
-  return goog.html.SafeUrl.sanitizeExtensionUrl_(/^moz-extension:\/\/([^\/]+)\//, a, b);
-};
+goog.userAgent.X11 = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_X11 : goog.userAgent.isX11_();
+goog.userAgent.ANDROID = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_ANDROID : goog.labs.userAgent.platform.isAndroid();
+goog.userAgent.IPHONE = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPHONE : goog.labs.userAgent.platform.isIphone();
+goog.userAgent.IPAD = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPAD : goog.labs.userAgent.platform.isIpad();
+goog.userAgent.IPOD = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPOD : goog.labs.userAgent.platform.isIpod();
+goog.userAgent.IOS = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPHONE || goog.userAgent.ASSUME_IPAD || goog.userAgent.ASSUME_IPOD : goog.labs.userAgent.platform.isIos();
+goog.userAgent.KAIOS = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_KAIOS : goog.labs.userAgent.platform.isKaiOS();
+goog.userAgent.GO2PHONE = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_GO2PHONE : goog.labs.userAgent.platform.isGo2Phone();
 
-goog.html.SafeUrl.sanitizeEdgeExtensionUrl = function (a, b) {
-  return goog.html.SafeUrl.sanitizeExtensionUrl_(/^ms-browser-extension:\/\/([^\/]+)\//, a, b);
+goog.userAgent.determineVersion_ = function () {
+  var a = "",
+      b = goog.userAgent.getVersionRegexResult_();
+  b && (a = b ? b[1] : "");
+  return goog.userAgent.IE && (b = goog.userAgent.getDocumentMode_(), null != b && b > parseFloat(a)) ? String(b) : a;
 };
 
-goog.html.SafeUrl.sanitizeExtensionUrl_ = function (a, b, c) {
-  (a = a.exec(b)) ? (a = a[1], -1 == (c instanceof goog.string.Const ? [goog.string.Const.unwrap(c)] : c.map(function (a) {
-    return goog.string.Const.unwrap(a);
-  })).indexOf(a) && (b = goog.html.SafeUrl.INNOCUOUS_STRING)) : b = goog.html.SafeUrl.INNOCUOUS_STRING;
-  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(b);
+goog.userAgent.getVersionRegexResult_ = function () {
+  var a = goog.userAgent.getUserAgentString();
+  if (goog.userAgent.GECKO) return /rv:([^\);]+)(\)|;)/.exec(a);
+  if (goog.userAgent.EDGE) return /Edge\/([\d\.]+)/.exec(a);
+  if (goog.userAgent.IE) return /\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);
+  if (goog.userAgent.WEBKIT) return /WebKit\/(\S+)/.exec(a);
+  if (goog.userAgent.OPERA) return /(?:Version)[ \/]?(\S+)/.exec(a);
 };
 
-goog.html.SafeUrl.fromTrustedResourceUrl = function (a) {
-  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(goog.html.TrustedResourceUrl.unwrap(a));
+goog.userAgent.getDocumentMode_ = function () {
+  var a = goog.global.document;
+  return a ? a.documentMode : void 0;
 };
 
-goog.html.SAFE_URL_PATTERN_ = /^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;
-goog.html.SafeUrl.SAFE_URL_PATTERN = goog.html.SAFE_URL_PATTERN_;
-
-goog.html.SafeUrl.sanitize = function (a) {
-  if (a instanceof goog.html.SafeUrl) return a;
-  a = "object" == typeof a && a.implementsGoogStringTypedString ? a.getTypedStringValue() : String(a);
-  goog.html.SAFE_URL_PATTERN_.test(a) || (a = goog.html.SafeUrl.INNOCUOUS_STRING);
-  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a);
-};
+goog.userAgent.VERSION = goog.userAgent.determineVersion_();
 
-goog.html.SafeUrl.sanitizeAssertUnchanged = function (a, b) {
-  if (a instanceof goog.html.SafeUrl) return a;
-  a = "object" == typeof a && a.implementsGoogStringTypedString ? a.getTypedStringValue() : String(a);
-  if (b && /^data:/i.test(a) && (b = goog.html.SafeUrl.fromDataUrl(a), b.getTypedStringValue() == a)) return b;
-  goog.asserts.assert(goog.html.SAFE_URL_PATTERN_.test(a), "%s does not match the safe URL pattern", a) || (a = goog.html.SafeUrl.INNOCUOUS_STRING);
-  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a);
+goog.userAgent.compare = function (a, b) {
+  return goog.string.compareVersions(a, b);
 };
 
-goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = {};
+goog.userAgent.isVersionOrHigherCache_ = {};
 
-goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse = function (a) {
-  var b = new goog.html.SafeUrl();
-  b.privateDoNotAccessOrElseSafeUrlWrappedValue_ = goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY ? goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createURL(a) : a;
-  return b;
+goog.userAgent.isVersionOrHigher = function (a) {
+  return goog.userAgent.ASSUME_ANY_VERSION || goog.reflect.cache(goog.userAgent.isVersionOrHigherCache_, a, function () {
+    return 0 <= goog.string.compareVersions(goog.userAgent.VERSION, a);
+  });
 };
 
-goog.html.SafeUrl.ABOUT_BLANK = goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse("about:blank");
+goog.userAgent.isVersion = goog.userAgent.isVersionOrHigher;
 
-goog.html.SafeStyle = function () {
-  this.privateDoNotAccessOrElseSafeStyleWrappedValue_ = "";
-  this.SAFE_STYLE_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;
+goog.userAgent.isDocumentModeOrHigher = function (a) {
+  return Number(goog.userAgent.DOCUMENT_MODE) >= a;
 };
 
-goog.html.SafeStyle.prototype.implementsGoogStringTypedString = !0;
-goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = {};
+goog.userAgent.isDocumentMode = goog.userAgent.isDocumentModeOrHigher;
 
-goog.html.SafeStyle.fromConstant = function (a) {
-  a = goog.string.Const.unwrap(a);
-  if (0 === a.length) return goog.html.SafeStyle.EMPTY;
-  goog.asserts.assert(goog.string.internal.endsWith(a, ";"), "Last character of style string is not ';': " + a);
-  goog.asserts.assert(goog.string.internal.contains(a, ":"), "Style string must contain at least one ':', to specify a \"name: value\" pair: " + a);
-  return goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(a);
-};
+goog.userAgent.DOCUMENT_MODE = function () {
+  if (goog.global.document && goog.userAgent.IE) return goog.userAgent.getDocumentMode_();
+}();
 
-goog.html.SafeStyle.prototype.getTypedStringValue = function () {
-  return this.privateDoNotAccessOrElseSafeStyleWrappedValue_;
+goog.userAgent.product = {};
+goog.userAgent.product.ASSUME_FIREFOX = !1;
+goog.userAgent.product.ASSUME_IPHONE = !1;
+goog.userAgent.product.ASSUME_IPAD = !1;
+goog.userAgent.product.ASSUME_ANDROID = !1;
+goog.userAgent.product.ASSUME_CHROME = !1;
+goog.userAgent.product.ASSUME_SAFARI = !1;
+goog.userAgent.product.PRODUCT_KNOWN_ = goog.userAgent.ASSUME_IE || goog.userAgent.ASSUME_EDGE || goog.userAgent.ASSUME_OPERA || goog.userAgent.product.ASSUME_FIREFOX || goog.userAgent.product.ASSUME_IPHONE || goog.userAgent.product.ASSUME_IPAD || goog.userAgent.product.ASSUME_ANDROID || goog.userAgent.product.ASSUME_CHROME || goog.userAgent.product.ASSUME_SAFARI;
+goog.userAgent.product.OPERA = goog.userAgent.OPERA;
+goog.userAgent.product.IE = goog.userAgent.IE;
+goog.userAgent.product.EDGE = goog.userAgent.EDGE;
+goog.userAgent.product.FIREFOX = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_FIREFOX : goog.labs.userAgent.browser.isFirefox();
+
+goog.userAgent.product.isIphoneOrIpod_ = function () {
+  return goog.labs.userAgent.platform.isIphone() || goog.labs.userAgent.platform.isIpod();
 };
 
-goog.DEBUG && (goog.html.SafeStyle.prototype.toString = function () {
-  return "SafeStyle{" + this.privateDoNotAccessOrElseSafeStyleWrappedValue_ + "}";
-});
+goog.userAgent.product.IPHONE = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_IPHONE : goog.userAgent.product.isIphoneOrIpod_();
+goog.userAgent.product.IPAD = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_IPAD : goog.labs.userAgent.platform.isIpad();
+goog.userAgent.product.ANDROID = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_ANDROID : goog.labs.userAgent.browser.isAndroidBrowser();
+goog.userAgent.product.CHROME = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_CHROME : goog.labs.userAgent.browser.isChrome();
 
-goog.html.SafeStyle.unwrap = function (a) {
-  if (a instanceof goog.html.SafeStyle && a.constructor === goog.html.SafeStyle && a.SAFE_STYLE_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ === goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) return a.privateDoNotAccessOrElseSafeStyleWrappedValue_;
-  goog.asserts.fail("expected object of type SafeStyle, got '" + a + "' of type " + goog.typeOf(a));
-  return "type_error:SafeStyle";
+goog.userAgent.product.isSafariDesktop_ = function () {
+  return goog.labs.userAgent.browser.isSafari() && !goog.labs.userAgent.platform.isIos();
 };
 
-goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse = function (a) {
-  return new goog.html.SafeStyle().initSecurityPrivateDoNotAccessOrElse_(a);
+goog.userAgent.product.SAFARI = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_SAFARI : goog.userAgent.product.isSafariDesktop_();
+goog.crypt.base64 = {};
+goog.crypt.base64.DEFAULT_ALPHABET_COMMON_ = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+goog.crypt.base64.ENCODED_VALS = goog.crypt.base64.DEFAULT_ALPHABET_COMMON_ + "+/=";
+goog.crypt.base64.ENCODED_VALS_WEBSAFE = goog.crypt.base64.DEFAULT_ALPHABET_COMMON_ + "-_.";
+goog.crypt.base64.Alphabet = {
+  DEFAULT: 0,
+  NO_PADDING: 1,
+  WEBSAFE: 2,
+  WEBSAFE_DOT_PADDING: 3,
+  WEBSAFE_NO_PADDING: 4
 };
+goog.crypt.base64.paddingChars_ = "=.";
 
-goog.html.SafeStyle.prototype.initSecurityPrivateDoNotAccessOrElse_ = function (a) {
-  this.privateDoNotAccessOrElseSafeStyleWrappedValue_ = a;
-  return this;
+goog.crypt.base64.isPadding_ = function (a) {
+  return goog.string.contains(goog.crypt.base64.paddingChars_, a);
 };
 
-goog.html.SafeStyle.EMPTY = goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse("");
-goog.html.SafeStyle.INNOCUOUS_STRING = "zClosurez";
+goog.crypt.base64.byteToCharMaps_ = {};
+goog.crypt.base64.charToByteMap_ = null;
+goog.crypt.base64.ASSUME_NATIVE_SUPPORT_ = goog.userAgent.GECKO || goog.userAgent.WEBKIT && !goog.userAgent.product.SAFARI || goog.userAgent.OPERA;
+goog.crypt.base64.HAS_NATIVE_ENCODE_ = goog.crypt.base64.ASSUME_NATIVE_SUPPORT_ || "function" == typeof goog.global.btoa;
+goog.crypt.base64.HAS_NATIVE_DECODE_ = goog.crypt.base64.ASSUME_NATIVE_SUPPORT_ || !goog.userAgent.product.SAFARI && !goog.userAgent.IE && "function" == typeof goog.global.atob;
 
-goog.html.SafeStyle.create = function (a) {
-  var b = "",
-      c;
+goog.crypt.base64.encodeByteArray = function (a, b) {
+  goog.asserts.assert(goog.isArrayLike(a), "encodeByteArray takes an array as a parameter");
+  void 0 === b && (b = goog.crypt.base64.Alphabet.DEFAULT);
+  goog.crypt.base64.init_();
+  b = goog.crypt.base64.byteToCharMaps_[b];
 
-  for (c in a) {
-    if (!/^[-_a-zA-Z0-9]+$/.test(c)) throw Error("Name allows only [-_a-zA-Z0-9], got: " + c);
-    var d = a[c];
-    null != d && (d = goog.isArray(d) ? goog.array.map(d, goog.html.SafeStyle.sanitizePropertyValue_).join(" ") : goog.html.SafeStyle.sanitizePropertyValue_(d), b += c + ":" + d + ";");
+  for (var c = [], d = 0; d < a.length; d += 3) {
+    var e = a[d],
+        f = d + 1 < a.length,
+        g = f ? a[d + 1] : 0,
+        h = d + 2 < a.length,
+        k = h ? a[d + 2] : 0,
+        l = e >> 2;
+    e = (e & 3) << 4 | g >> 4;
+    g = (g & 15) << 2 | k >> 6;
+    k &= 63;
+    h || (k = 64, f || (g = 64));
+    c.push(b[l], b[e], b[g] || "", b[k] || "");
   }
 
-  return b ? goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(b) : goog.html.SafeStyle.EMPTY;
+  return c.join("");
 };
 
-goog.html.SafeStyle.sanitizePropertyValue_ = function (a) {
-  if (a instanceof goog.html.SafeUrl) return 'url("' + goog.html.SafeUrl.unwrap(a).replace(/</g, "%3c").replace(/[\\"]/g, "\\$&") + '")';
-  a = a instanceof goog.string.Const ? goog.string.Const.unwrap(a) : goog.html.SafeStyle.sanitizePropertyValueString_(String(a));
-  if (/[{;}]/.test(a)) throw new goog.asserts.AssertionError("Value does not allow [{;}], got: %s.", [a]);
-  return a;
+goog.crypt.base64.encodeString = function (a, b) {
+  return goog.crypt.base64.HAS_NATIVE_ENCODE_ && !b ? goog.global.btoa(a) : goog.crypt.base64.encodeByteArray(goog.crypt.stringToByteArray(a), b);
 };
 
-goog.html.SafeStyle.sanitizePropertyValueString_ = function (a) {
-  var b = a.replace(goog.html.SafeStyle.FUNCTIONS_RE_, "$1").replace(goog.html.SafeStyle.FUNCTIONS_RE_, "$1").replace(goog.html.SafeStyle.URL_RE_, "url");
-
-  if (goog.html.SafeStyle.VALUE_RE_.test(b)) {
-    if (goog.html.SafeStyle.COMMENT_RE_.test(a)) return goog.asserts.fail("String value disallows comments, got: " + a), goog.html.SafeStyle.INNOCUOUS_STRING;
-    if (!goog.html.SafeStyle.hasBalancedQuotes_(a)) return goog.asserts.fail("String value requires balanced quotes, got: " + a), goog.html.SafeStyle.INNOCUOUS_STRING;
-    if (!goog.html.SafeStyle.hasBalancedSquareBrackets_(a)) return goog.asserts.fail("String value requires balanced square brackets and one identifier per pair of brackets, got: " + a), goog.html.SafeStyle.INNOCUOUS_STRING;
-  } else return goog.asserts.fail("String value allows only " + goog.html.SafeStyle.VALUE_ALLOWED_CHARS_ + " and simple functions, got: " + a), goog.html.SafeStyle.INNOCUOUS_STRING;
-
-  return goog.html.SafeStyle.sanitizeUrl_(a);
+goog.crypt.base64.decodeString = function (a, b) {
+  if (goog.crypt.base64.HAS_NATIVE_DECODE_ && !b) return goog.global.atob(a);
+  var c = "";
+  goog.crypt.base64.decodeStringInternal_(a, function (a) {
+    c += String.fromCharCode(a);
+  });
+  return c;
 };
 
-goog.html.SafeStyle.hasBalancedQuotes_ = function (a) {
-  for (var b = !0, c = !0, d = 0; d < a.length; d++) {
-    var e = a.charAt(d);
-    "'" == e && c ? b = !b : '"' == e && b && (c = !c);
-  }
+goog.crypt.base64.decodeStringToByteArray = function (a, b) {
+  var c = [];
+  goog.crypt.base64.decodeStringInternal_(a, function (a) {
+    c.push(a);
+  });
+  return c;
+};
 
-  return b && c;
+goog.crypt.base64.decodeStringToUint8Array = function (a) {
+  goog.asserts.assert(!goog.userAgent.IE || goog.userAgent.isVersionOrHigher("10"), "Browser does not support typed arrays");
+  var b = a.length,
+      c = 3 * b / 4;
+  c % 3 ? c = Math.floor(c) : goog.crypt.base64.isPadding_(a[b - 1]) && (c = goog.crypt.base64.isPadding_(a[b - 2]) ? c - 2 : c - 1);
+  var d = new Uint8Array(c),
+      e = 0;
+  goog.crypt.base64.decodeStringInternal_(a, function (a) {
+    d[e++] = a;
+  });
+  return d.subarray(0, e);
 };
 
-goog.html.SafeStyle.hasBalancedSquareBrackets_ = function (a) {
-  for (var b = !0, c = /^[-_a-zA-Z0-9]$/, d = 0; d < a.length; d++) {
-    var e = a.charAt(d);
+goog.crypt.base64.decodeStringInternal_ = function (a, b) {
+  function c(b) {
+    for (; d < a.length;) {
+      var c = a.charAt(d++),
+          e = goog.crypt.base64.charToByteMap_[c];
+      if (null != e) return e;
+      if (!goog.string.isEmptyOrWhitespace(c)) throw Error("Unknown base64 encoding at char: " + c);
+    }
 
-    if ("]" == e) {
-      if (b) return !1;
-      b = !0;
-    } else if ("[" == e) {
-      if (!b) return !1;
-      b = !1;
-    } else if (!b && !c.test(e)) return !1;
+    return b;
   }
 
-  return b;
-};
-
-goog.html.SafeStyle.VALUE_ALLOWED_CHARS_ = "[-,.\"'%_!# a-zA-Z0-9\\[\\]]";
-goog.html.SafeStyle.VALUE_RE_ = new RegExp("^" + goog.html.SafeStyle.VALUE_ALLOWED_CHARS_ + "+$");
-goog.html.SafeStyle.URL_RE_ = /\b(url\([ \t\n]*)('[ -&(-\[\]-~]*'|"[ !#-\[\]-~]*"|[!#-&*-\[\]-~]*)([ \t\n]*\))/g;
-goog.html.SafeStyle.FUNCTIONS_RE_ = /\b(hsl|hsla|rgb|rgba|matrix|calc|minmax|fit-content|repeat|(rotate|scale|translate)(X|Y|Z|3d)?)\([-+*/0-9a-z.%\[\], ]+\)/g;
-goog.html.SafeStyle.COMMENT_RE_ = /\/\*/;
+  goog.crypt.base64.init_();
 
-goog.html.SafeStyle.sanitizeUrl_ = function (a) {
-  return a.replace(goog.html.SafeStyle.URL_RE_, function (a, c, d, e) {
-    var b = "";
-    d = d.replace(/^(['"])(.*)\1$/, function (a, c, d) {
-      b = c;
-      return d;
-    });
-    a = goog.html.SafeUrl.sanitize(d).getTypedStringValue();
-    return c + b + a + b + e;
-  });
+  for (var d = 0;;) {
+    var e = c(-1),
+        f = c(0),
+        g = c(64),
+        h = c(64);
+    if (64 === h && -1 === e) break;
+    b(e << 2 | f >> 4);
+    64 != g && (b(f << 4 & 240 | g >> 2), 64 != h && b(g << 6 & 192 | h));
+  }
 };
 
-goog.html.SafeStyle.concat = function (a) {
-  var b = "",
-      c = function (a) {
-    goog.isArray(a) ? goog.array.forEach(a, c) : b += goog.html.SafeStyle.unwrap(a);
-  };
+goog.crypt.base64.init_ = function () {
+  if (!goog.crypt.base64.charToByteMap_) {
+    goog.crypt.base64.charToByteMap_ = {};
 
-  goog.array.forEach(arguments, c);
-  return b ? goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(b) : goog.html.SafeStyle.EMPTY;
-};
+    for (var a = goog.crypt.base64.DEFAULT_ALPHABET_COMMON_.split(""), b = ["+/=", "+/", "-_=", "-_.", "-_"], c = 0; 5 > c; c++) {
+      var d = a.concat(b[c].split(""));
+      goog.crypt.base64.byteToCharMaps_[c] = d;
 
-goog.html.SafeScript = function () {
-  this.privateDoNotAccessOrElseSafeScriptWrappedValue_ = "";
-  this.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;
+      for (var e = 0; e < d.length; e++) {
+        var f = d[e],
+            g = goog.crypt.base64.charToByteMap_[f];
+        void 0 === g ? goog.crypt.base64.charToByteMap_[f] = e : goog.asserts.assert(g === e);
+      }
+    }
+  }
 };
 
-goog.html.SafeScript.prototype.implementsGoogStringTypedString = !0;
-goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = {};
+jspb.utils = {};
+jspb.utils.split64Low = 0;
+jspb.utils.split64High = 0;
 
-goog.html.SafeScript.fromConstant = function (a) {
-  a = goog.string.Const.unwrap(a);
-  return 0 === a.length ? goog.html.SafeScript.EMPTY : goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(a);
+jspb.utils.splitUint64 = function (a) {
+  var b = a >>> 0;
+  a = Math.floor((a - b) / jspb.BinaryConstants.TWO_TO_32) >>> 0;
+  jspb.utils.split64Low = b;
+  jspb.utils.split64High = a;
 };
 
-goog.html.SafeScript.fromConstantAndArgs = function (a, b) {
-  for (var c = [], d = 1; d < arguments.length; d++) c.push(goog.html.SafeScript.stringify_(arguments[d]));
-
-  return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse("(" + goog.string.Const.unwrap(a) + ")(" + c.join(", ") + ");");
+jspb.utils.splitInt64 = function (a) {
+  var b = 0 > a;
+  a = Math.abs(a);
+  var c = a >>> 0;
+  a = Math.floor((a - c) / jspb.BinaryConstants.TWO_TO_32);
+  a >>>= 0;
+  b && (a = ~a >>> 0, c = (~c >>> 0) + 1, 4294967295 < c && (c = 0, a++, 4294967295 < a && (a = 0)));
+  jspb.utils.split64Low = c;
+  jspb.utils.split64High = a;
 };
 
-goog.html.SafeScript.fromJson = function (a) {
-  return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(goog.html.SafeScript.stringify_(a));
+jspb.utils.splitZigzag64 = function (a) {
+  var b = 0 > a;
+  a = 2 * Math.abs(a);
+  jspb.utils.splitUint64(a);
+  a = jspb.utils.split64Low;
+  var c = jspb.utils.split64High;
+  b && (0 == a ? 0 == c ? c = a = 4294967295 : (c--, a = 4294967295) : a--);
+  jspb.utils.split64Low = a;
+  jspb.utils.split64High = c;
 };
 
-goog.html.SafeScript.prototype.getTypedStringValue = function () {
-  return this.privateDoNotAccessOrElseSafeScriptWrappedValue_.toString();
+jspb.utils.splitFloat32 = function (a) {
+  var b = 0 > a ? 1 : 0;
+  a = b ? -a : a;
+  if (0 === a) 0 < 1 / a ? (jspb.utils.split64High = 0, jspb.utils.split64Low = 0) : (jspb.utils.split64High = 0, jspb.utils.split64Low = 2147483648);else if (isNaN(a)) jspb.utils.split64High = 0, jspb.utils.split64Low = 2147483647;else if (a > jspb.BinaryConstants.FLOAT32_MAX) jspb.utils.split64High = 0, jspb.utils.split64Low = (b << 31 | 2139095040) >>> 0;else if (a < jspb.BinaryConstants.FLOAT32_MIN) a = Math.round(a / Math.pow(2, -149)), jspb.utils.split64High = 0, jspb.utils.split64Low = (b << 31 | a) >>> 0;else {
+    var c = Math.floor(Math.log(a) / Math.LN2);
+    a *= Math.pow(2, -c);
+    a = Math.round(a * jspb.BinaryConstants.TWO_TO_23);
+    16777216 <= a && ++c;
+    jspb.utils.split64High = 0;
+    jspb.utils.split64Low = (b << 31 | c + 127 << 23 | a & 8388607) >>> 0;
+  }
 };
 
-goog.DEBUG && (goog.html.SafeScript.prototype.toString = function () {
-  return "SafeScript{" + this.privateDoNotAccessOrElseSafeScriptWrappedValue_ + "}";
-});
-
-goog.html.SafeScript.unwrap = function (a) {
-  return goog.html.SafeScript.unwrapTrustedScript(a).toString();
+jspb.utils.splitFloat64 = function (a) {
+  var b = 0 > a ? 1 : 0;
+  a = b ? -a : a;
+  if (0 === a) jspb.utils.split64High = 0 < 1 / a ? 0 : 2147483648, jspb.utils.split64Low = 0;else if (isNaN(a)) jspb.utils.split64High = 2147483647, jspb.utils.split64Low = 4294967295;else if (a > jspb.BinaryConstants.FLOAT64_MAX) jspb.utils.split64High = (b << 31 | 2146435072) >>> 0, jspb.utils.split64Low = 0;else if (a < jspb.BinaryConstants.FLOAT64_MIN) {
+    var c = a / Math.pow(2, -1074);
+    a = c / jspb.BinaryConstants.TWO_TO_32;
+    jspb.utils.split64High = (b << 31 | a) >>> 0;
+    jspb.utils.split64Low = c >>> 0;
+  } else {
+    c = a;
+    var d = 0;
+    if (2 <= c) for (; 2 <= c && 1023 > d;) d++, c /= 2;else for (; 1 > c && -1022 < d;) c *= 2, d--;
+    c = a * Math.pow(2, -d);
+    a = c * jspb.BinaryConstants.TWO_TO_20 & 1048575;
+    c = c * jspb.BinaryConstants.TWO_TO_52 >>> 0;
+    jspb.utils.split64High = (b << 31 | d + 1023 << 20 | a) >>> 0;
+    jspb.utils.split64Low = c;
+  }
 };
 
-goog.html.SafeScript.unwrapTrustedScript = function (a) {
-  if (a instanceof goog.html.SafeScript && a.constructor === goog.html.SafeScript && a.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ === goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) return a.privateDoNotAccessOrElseSafeScriptWrappedValue_;
-  goog.asserts.fail("expected object of type SafeScript, got '" + a + "' of type " + goog.typeOf(a));
-  return "type_error:SafeScript";
+jspb.utils.splitHash64 = function (a) {
+  var b = a.charCodeAt(0),
+      c = a.charCodeAt(1),
+      d = a.charCodeAt(2),
+      e = a.charCodeAt(3),
+      f = a.charCodeAt(4),
+      g = a.charCodeAt(5),
+      h = a.charCodeAt(6);
+  a = a.charCodeAt(7);
+  jspb.utils.split64Low = b + (c << 8) + (d << 16) + (e << 24) >>> 0;
+  jspb.utils.split64High = f + (g << 8) + (h << 16) + (a << 24) >>> 0;
 };
 
-goog.html.SafeScript.stringify_ = function (a) {
-  return JSON.stringify(a).replace(/</g, "\\x3c");
+jspb.utils.joinUint64 = function (a, b) {
+  return b * jspb.BinaryConstants.TWO_TO_32 + (a >>> 0);
 };
 
-goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse = function (a) {
-  return new goog.html.SafeScript().initSecurityPrivateDoNotAccessOrElse_(a);
+jspb.utils.joinInt64 = function (a, b) {
+  var c = b & 2147483648;
+  c && (a = ~a + 1 >>> 0, b = ~b >>> 0, 0 == a && (b = b + 1 >>> 0));
+  a = jspb.utils.joinUint64(a, b);
+  return c ? -a : a;
 };
 
-goog.html.SafeScript.prototype.initSecurityPrivateDoNotAccessOrElse_ = function (a) {
-  this.privateDoNotAccessOrElseSafeScriptWrappedValue_ = goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY ? goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createScript(a) : a;
-  return this;
+jspb.utils.toZigzag64 = function (a, b, c) {
+  var d = b >> 31;
+  return c(a << 1 ^ d, (b << 1 | a >>> 31) ^ d);
 };
 
-goog.html.SafeScript.EMPTY = goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse("");
-goog.object = {};
-
-goog.object.is = function (a, b) {
-  return a === b ? 0 !== a || 1 / a === 1 / b : a !== a && b !== b;
+jspb.utils.joinZigzag64 = function (a, b) {
+  return jspb.utils.fromZigzag64(a, b, jspb.utils.joinInt64);
 };
 
-goog.object.forEach = function (a, b, c) {
-  for (var d in a) b.call(c, a[d], d, a);
+jspb.utils.fromZigzag64 = function (a, b, c) {
+  var d = -(a & 1);
+  return c((a >>> 1 | b << 31) ^ d, b >>> 1 ^ d);
 };
 
-goog.object.filter = function (a, b, c) {
-  var d = {},
-      e;
+jspb.utils.joinFloat32 = function (a, b) {
+  b = 2 * (a >> 31) + 1;
+  var c = a >>> 23 & 255;
+  a &= 8388607;
+  return 255 == c ? a ? NaN : Infinity * b : 0 == c ? b * Math.pow(2, -149) * a : b * Math.pow(2, c - 150) * (a + Math.pow(2, 23));
+};
 
-  for (e in a) b.call(c, a[e], e, a) && (d[e] = a[e]);
+jspb.utils.joinFloat64 = function (a, b) {
+  var c = 2 * (b >> 31) + 1,
+      d = b >>> 20 & 2047;
+  a = jspb.BinaryConstants.TWO_TO_32 * (b & 1048575) + a;
+  return 2047 == d ? a ? NaN : Infinity * c : 0 == d ? c * Math.pow(2, -1074) * a : c * Math.pow(2, d - 1075) * (a + jspb.BinaryConstants.TWO_TO_52);
+};
 
-  return d;
+jspb.utils.joinHash64 = function (a, b) {
+  return String.fromCharCode(a >>> 0 & 255, a >>> 8 & 255, a >>> 16 & 255, a >>> 24 & 255, b >>> 0 & 255, b >>> 8 & 255, b >>> 16 & 255, b >>> 24 & 255);
 };
 
-goog.object.map = function (a, b, c) {
-  var d = {},
-      e;
+jspb.utils.DIGITS = "0123456789abcdef".split("");
+jspb.utils.ZERO_CHAR_CODE_ = 48;
+jspb.utils.A_CHAR_CODE_ = 97;
 
-  for (e in a) d[e] = b.call(c, a[e], e, a);
+jspb.utils.joinUnsignedDecimalString = function (a, b) {
+  function c(a, b) {
+    a = a ? String(a) : "";
+    return b ? "0000000".slice(a.length) + a : a;
+  }
 
-  return d;
+  if (2097151 >= b) return "" + jspb.utils.joinUint64(a, b);
+  var d = (a >>> 24 | b << 8) >>> 0 & 16777215;
+  b = b >> 16 & 65535;
+  a = (a & 16777215) + 6777216 * d + 6710656 * b;
+  d += 8147497 * b;
+  b *= 2;
+  1E7 <= a && (d += Math.floor(a / 1E7), a %= 1E7);
+  1E7 <= d && (b += Math.floor(d / 1E7), d %= 1E7);
+  return c(b, 0) + c(d, b) + c(a, 1);
 };
 
-goog.object.some = function (a, b, c) {
-  for (var d in a) if (b.call(c, a[d], d, a)) return !0;
+jspb.utils.joinSignedDecimalString = function (a, b) {
+  var c = b & 2147483648;
+  c && (a = ~a + 1 >>> 0, b = ~b + (0 == a ? 1 : 0) >>> 0);
+  a = jspb.utils.joinUnsignedDecimalString(a, b);
+  return c ? "-" + a : a;
+};
 
-  return !1;
+jspb.utils.hash64ToDecimalString = function (a, b) {
+  jspb.utils.splitHash64(a);
+  a = jspb.utils.split64Low;
+  var c = jspb.utils.split64High;
+  return b ? jspb.utils.joinSignedDecimalString(a, c) : jspb.utils.joinUnsignedDecimalString(a, c);
 };
 
-goog.object.every = function (a, b, c) {
-  for (var d in a) if (!b.call(c, a[d], d, a)) return !1;
+jspb.utils.hash64ArrayToDecimalStrings = function (a, b) {
+  for (var c = Array(a.length), d = 0; d < a.length; d++) c[d] = jspb.utils.hash64ToDecimalString(a[d], b);
 
-  return !0;
+  return c;
 };
 
-goog.object.getCount = function (a) {
-  var b = 0,
-      c;
+jspb.utils.decimalStringToHash64 = function (a) {
+  function b(a, b) {
+    for (var c = 0; 8 > c && (1 !== a || 0 < b); c++) b = a * e[c] + b, e[c] = b & 255, b >>>= 8;
+  }
 
-  for (c in a) b++;
+  function c() {
+    for (var a = 0; 8 > a; a++) e[a] = ~e[a] & 255;
+  }
 
-  return b;
-};
+  goog.asserts.assert(0 < a.length);
+  var d = !1;
+  "-" === a[0] && (d = !0, a = a.slice(1));
 
-goog.object.getAnyKey = function (a) {
-  for (var b in a) return b;
-};
+  for (var e = [0, 0, 0, 0, 0, 0, 0, 0], f = 0; f < a.length; f++) b(10, a.charCodeAt(f) - jspb.utils.ZERO_CHAR_CODE_);
 
-goog.object.getAnyValue = function (a) {
-  for (var b in a) return a[b];
+  d && (c(), b(1, 1));
+  return goog.crypt.byteArrayToString(e);
 };
 
-goog.object.contains = function (a, b) {
-  return goog.object.containsValue(a, b);
+jspb.utils.splitDecimalString = function (a) {
+  jspb.utils.splitHash64(jspb.utils.decimalStringToHash64(a));
 };
 
-goog.object.getValues = function (a) {
-  var b = [],
-      c = 0,
-      d;
-
-  for (d in a) b[c++] = a[d];
-
-  return b;
+jspb.utils.toHexDigit_ = function (a) {
+  return String.fromCharCode(10 > a ? jspb.utils.ZERO_CHAR_CODE_ + a : jspb.utils.A_CHAR_CODE_ - 10 + a);
 };
 
-goog.object.getKeys = function (a) {
-  var b = [],
-      c = 0,
-      d;
-
-  for (d in a) b[c++] = d;
-
-  return b;
+jspb.utils.fromHexCharCode_ = function (a) {
+  return a >= jspb.utils.A_CHAR_CODE_ ? a - jspb.utils.A_CHAR_CODE_ + 10 : a - jspb.utils.ZERO_CHAR_CODE_;
 };
 
-goog.object.getValueByKeys = function (a, b) {
-  var c = goog.isArrayLike(b),
-      d = c ? b : arguments;
+jspb.utils.hash64ToHexString = function (a) {
+  var b = Array(18);
+  b[0] = "0";
+  b[1] = "x";
 
-  for (c = c ? 0 : 1; c < d.length; c++) {
-    if (null == a) return;
-    a = a[d[c]];
+  for (var c = 0; 8 > c; c++) {
+    var d = a.charCodeAt(7 - c);
+    b[2 * c + 2] = jspb.utils.toHexDigit_(d >> 4);
+    b[2 * c + 3] = jspb.utils.toHexDigit_(d & 15);
   }
 
-  return a;
+  return b.join("");
 };
 
-goog.object.containsKey = function (a, b) {
-  return null !== a && b in a;
-};
+jspb.utils.hexStringToHash64 = function (a) {
+  a = a.toLowerCase();
+  goog.asserts.assert(18 == a.length);
+  goog.asserts.assert("0" == a[0]);
+  goog.asserts.assert("x" == a[1]);
 
-goog.object.containsValue = function (a, b) {
-  for (var c in a) if (a[c] == b) return !0;
+  for (var b = "", c = 0; 8 > c; c++) {
+    var d = jspb.utils.fromHexCharCode_(a.charCodeAt(2 * c + 2)),
+        e = jspb.utils.fromHexCharCode_(a.charCodeAt(2 * c + 3));
+    b = String.fromCharCode(16 * d + e) + b;
+  }
 
-  return !1;
+  return b;
 };
 
-goog.object.findKey = function (a, b, c) {
-  for (var d in a) if (b.call(c, a[d], d, a)) return d;
+jspb.utils.hash64ToNumber = function (a, b) {
+  jspb.utils.splitHash64(a);
+  a = jspb.utils.split64Low;
+  var c = jspb.utils.split64High;
+  return b ? jspb.utils.joinInt64(a, c) : jspb.utils.joinUint64(a, c);
 };
 
-goog.object.findValue = function (a, b, c) {
-  return (b = goog.object.findKey(a, b, c)) && a[b];
+jspb.utils.numberToHash64 = function (a) {
+  jspb.utils.splitInt64(a);
+  return jspb.utils.joinHash64(jspb.utils.split64Low, jspb.utils.split64High);
 };
 
-goog.object.isEmpty = function (a) {
-  for (var b in a) return !1;
+jspb.utils.countVarints = function (a, b, c) {
+  for (var d = 0, e = b; e < c; e++) d += a[e] >> 7;
 
-  return !0;
+  return c - b - d;
 };
 
-goog.object.clear = function (a) {
-  for (var b in a) delete a[b];
-};
+jspb.utils.countVarintFields = function (a, b, c, d) {
+  var e = 0;
+  d = 8 * d + jspb.BinaryConstants.WireType.VARINT;
+  if (128 > d) for (; b < c && a[b++] == d;) for (e++;;) {
+    var f = a[b++];
+    if (0 == (f & 128)) break;
+  } else for (; b < c;) {
+    for (f = d; 128 < f;) {
+      if (a[b] != (f & 127 | 128)) return e;
+      b++;
+      f >>= 7;
+    }
 
-goog.object.remove = function (a, b) {
-  var c;
-  (c = b in a) && delete a[b];
-  return c;
-};
+    if (a[b++] != f) break;
 
-goog.object.add = function (a, b, c) {
-  if (null !== a && b in a) throw Error('The object already contains the key "' + b + '"');
-  goog.object.set(a, b, c);
+    for (e++; f = a[b++], 0 != (f & 128););
+  }
+  return e;
 };
 
-goog.object.get = function (a, b, c) {
-  return null !== a && b in a ? a[b] : c;
-};
+jspb.utils.countFixedFields_ = function (a, b, c, d, e) {
+  var f = 0;
+  if (128 > d) for (; b < c && a[b++] == d;) f++, b += e;else for (; b < c;) {
+    for (var g = d; 128 < g;) {
+      if (a[b++] != (g & 127 | 128)) return f;
+      g >>= 7;
+    }
 
-goog.object.set = function (a, b, c) {
-  a[b] = c;
+    if (a[b++] != g) break;
+    f++;
+    b += e;
+  }
+  return f;
 };
 
-goog.object.setIfUndefined = function (a, b, c) {
-  return b in a ? a[b] : a[b] = c;
+jspb.utils.countFixed32Fields = function (a, b, c, d) {
+  return jspb.utils.countFixedFields_(a, b, c, 8 * d + jspb.BinaryConstants.WireType.FIXED32, 4);
 };
 
-goog.object.setWithReturnValueIfNotSet = function (a, b, c) {
-  if (b in a) return a[b];
-  c = c();
-  return a[b] = c;
+jspb.utils.countFixed64Fields = function (a, b, c, d) {
+  return jspb.utils.countFixedFields_(a, b, c, 8 * d + jspb.BinaryConstants.WireType.FIXED64, 8);
 };
 
-goog.object.equals = function (a, b) {
-  for (var c in a) if (!(c in b) || a[c] !== b[c]) return !1;
+jspb.utils.countDelimitedFields = function (a, b, c, d) {
+  var e = 0;
 
-  for (var d in b) if (!(d in a)) return !1;
+  for (d = 8 * d + jspb.BinaryConstants.WireType.DELIMITED; b < c;) {
+    for (var f = d; 128 < f;) {
+      if (a[b++] != (f & 127 | 128)) return e;
+      f >>= 7;
+    }
 
-  return !0;
-};
+    if (a[b++] != f) break;
+    e++;
 
-goog.object.clone = function (a) {
-  var b = {},
-      c;
+    for (var g = 0, h = 1; f = a[b++], g += (f & 127) * h, h *= 128, 0 != (f & 128););
 
-  for (c in a) b[c] = a[c];
+    b += g;
+  }
 
-  return b;
+  return e;
 };
 
-goog.object.unsafeClone = function (a) {
-  var b = goog.typeOf(a);
-
-  if ("object" == b || "array" == b) {
-    if (goog.isFunction(a.clone)) return a.clone();
-    b = "array" == b ? [] : {};
+jspb.utils.debugBytesToTextFormat = function (a) {
+  var b = '"';
 
-    for (var c in a) b[c] = goog.object.unsafeClone(a[c]);
+  if (a) {
+    a = jspb.utils.byteSourceToUint8Array(a);
 
-    return b;
+    for (var c = 0; c < a.length; c++) b += "\\x", 16 > a[c] && (b += "0"), b += a[c].toString(16);
   }
 
-  return a;
+  return b + '"';
 };
 
-goog.object.transpose = function (a) {
-  var b = {},
-      c;
+jspb.utils.debugScalarToTextFormat = function (a) {
+  return "string" === typeof a ? goog.string.quote(a) : a.toString();
+};
 
-  for (c in a) b[a[c]] = c;
+jspb.utils.stringToByteArray = function (a) {
+  for (var b = new Uint8Array(a.length), c = 0; c < a.length; c++) {
+    var d = a.charCodeAt(c);
+    if (255 < d) throw Error("Conversion error: string contains codepoint outside of byte range");
+    b[c] = d;
+  }
 
   return b;
 };
 
-goog.object.PROTOTYPE_FIELDS_ = "constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");
+jspb.utils.byteSourceToUint8Array = function (a) {
+  if (a.constructor === Uint8Array) return a;
+  if (a.constructor === ArrayBuffer || "undefined" != typeof Buffer && a.constructor === Buffer || a.constructor === Array) return new Uint8Array(a);
+  if (a.constructor === String) return goog.crypt.base64.decodeStringToUint8Array(a);
+  goog.asserts.fail("Type not convertible to Uint8Array.");
+  return new Uint8Array(0);
+};
 
-goog.object.extend = function (a, b) {
-  for (var c, d, e = 1; e < arguments.length; e++) {
-    d = arguments[e];
+jspb.BinaryDecoder = function (a, b, c) {
+  this.bytes_ = null;
+  this.cursor_ = this.end_ = this.start_ = 0;
+  this.error_ = !1;
+  a && this.setBlock(a, b, c);
+};
 
-    for (c in d) a[c] = d[c];
+jspb.BinaryDecoder.instanceCache_ = [];
 
-    for (var f = 0; f < goog.object.PROTOTYPE_FIELDS_.length; f++) c = goog.object.PROTOTYPE_FIELDS_[f], Object.prototype.hasOwnProperty.call(d, c) && (a[c] = d[c]);
+jspb.BinaryDecoder.alloc = function (a, b, c) {
+  if (jspb.BinaryDecoder.instanceCache_.length) {
+    var d = jspb.BinaryDecoder.instanceCache_.pop();
+    a && d.setBlock(a, b, c);
+    return d;
   }
+
+  return new jspb.BinaryDecoder(a, b, c);
 };
 
-goog.object.create = function (a) {
-  var b = arguments.length;
-  if (1 == b && goog.isArray(arguments[0])) return goog.object.create.apply(null, arguments[0]);
-  if (b % 2) throw Error("Uneven number of arguments");
+jspb.BinaryDecoder.prototype.free = function () {
+  this.clear();
+  100 > jspb.BinaryDecoder.instanceCache_.length && jspb.BinaryDecoder.instanceCache_.push(this);
+};
 
-  for (var c = {}, d = 0; d < b; d += 2) c[arguments[d]] = arguments[d + 1];
+jspb.BinaryDecoder.prototype.clone = function () {
+  return jspb.BinaryDecoder.alloc(this.bytes_, this.start_, this.end_ - this.start_);
+};
 
-  return c;
+jspb.BinaryDecoder.prototype.clear = function () {
+  this.bytes_ = null;
+  this.cursor_ = this.end_ = this.start_ = 0;
+  this.error_ = !1;
 };
 
-goog.object.createSet = function (a) {
-  var b = arguments.length;
-  if (1 == b && goog.isArray(arguments[0])) return goog.object.createSet.apply(null, arguments[0]);
+jspb.BinaryDecoder.prototype.getBuffer = function () {
+  return this.bytes_;
+};
 
-  for (var c = {}, d = 0; d < b; d++) c[arguments[d]] = !0;
+jspb.BinaryDecoder.prototype.setBlock = function (a, b, c) {
+  this.bytes_ = jspb.utils.byteSourceToUint8Array(a);
+  this.start_ = void 0 !== b ? b : 0;
+  this.end_ = void 0 !== c ? this.start_ + c : this.bytes_.length;
+  this.cursor_ = this.start_;
+};
 
-  return c;
+jspb.BinaryDecoder.prototype.getEnd = function () {
+  return this.end_;
 };
 
-goog.object.createImmutableView = function (a) {
-  var b = a;
-  Object.isFrozen && !Object.isFrozen(a) && (b = Object.create(a), Object.freeze(b));
-  return b;
+jspb.BinaryDecoder.prototype.setEnd = function (a) {
+  this.end_ = a;
 };
 
-goog.object.isImmutableView = function (a) {
-  return !!Object.isFrozen && Object.isFrozen(a);
+jspb.BinaryDecoder.prototype.reset = function () {
+  this.cursor_ = this.start_;
 };
 
-goog.object.getAllPropertyNames = function (a, b, c) {
-  if (!a) return [];
-  if (!Object.getOwnPropertyNames || !Object.getPrototypeOf) return goog.object.getKeys(a);
+jspb.BinaryDecoder.prototype.getCursor = function () {
+  return this.cursor_;
+};
 
-  for (var d = {}; a && (a !== Object.prototype || b) && (a !== Function.prototype || c);) {
-    for (var e = Object.getOwnPropertyNames(a), f = 0; f < e.length; f++) d[e[f]] = !0;
+jspb.BinaryDecoder.prototype.setCursor = function (a) {
+  this.cursor_ = a;
+};
 
-    a = Object.getPrototypeOf(a);
-  }
+jspb.BinaryDecoder.prototype.advance = function (a) {
+  this.cursor_ += a;
+  goog.asserts.assert(this.cursor_ <= this.end_);
+};
 
-  return goog.object.getKeys(d);
+jspb.BinaryDecoder.prototype.atEnd = function () {
+  return this.cursor_ == this.end_;
 };
 
-goog.object.getSuperClass = function (a) {
-  return (a = Object.getPrototypeOf(a.prototype)) && a.constructor;
+jspb.BinaryDecoder.prototype.pastEnd = function () {
+  return this.cursor_ > this.end_;
 };
 
-goog.html.SafeStyleSheet = function () {
-  this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_ = "";
-  this.SAFE_STYLE_SHEET_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;
+jspb.BinaryDecoder.prototype.getError = function () {
+  return this.error_ || 0 > this.cursor_ || this.cursor_ > this.end_;
 };
 
-goog.html.SafeStyleSheet.prototype.implementsGoogStringTypedString = !0;
-goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = {};
+jspb.BinaryDecoder.prototype.readSplitVarint64 = function (a) {
+  for (var b = 128, c = 0, d = 0, e = 0; 4 > e && 128 <= b; e++) b = this.bytes_[this.cursor_++], c |= (b & 127) << 7 * e;
 
-goog.html.SafeStyleSheet.createRule = function (a, b) {
-  if (goog.string.internal.contains(a, "<")) throw Error("Selector does not allow '<', got: " + a);
-  var c = a.replace(/('|")((?!\1)[^\r\n\f\\]|\\[\s\S])*\1/g, "");
-  if (!/^[-_a-zA-Z0-9#.:* ,>+~[\]()=^$|]+$/.test(c)) throw Error("Selector allows only [-_a-zA-Z0-9#.:* ,>+~[\\]()=^$|] and strings, got: " + a);
-  if (!goog.html.SafeStyleSheet.hasBalancedBrackets_(c)) throw Error("() and [] in selector must be balanced, got: " + a);
-  b instanceof goog.html.SafeStyle || (b = goog.html.SafeStyle.create(b));
-  a = a + "{" + goog.html.SafeStyle.unwrap(b).replace(/</g, "\\3C ") + "}";
-  return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(a);
+  128 <= b && (b = this.bytes_[this.cursor_++], c |= (b & 127) << 28, d |= (b & 127) >> 4);
+  if (128 <= b) for (e = 0; 5 > e && 128 <= b; e++) b = this.bytes_[this.cursor_++], d |= (b & 127) << 7 * e + 3;
+  if (128 > b) return a(c >>> 0, d >>> 0);
+  goog.asserts.fail("Failed to read varint, encoding is invalid.");
+  this.error_ = !0;
 };
 
-goog.html.SafeStyleSheet.hasBalancedBrackets_ = function (a) {
-  for (var b = {
-    "(": ")",
-    "[": "]"
-  }, c = [], d = 0; d < a.length; d++) {
-    var e = a[d];
-    if (b[e]) c.push(b[e]);else if (goog.object.contains(b, e) && c.pop() != e) return !1;
-  }
-
-  return 0 == c.length;
+jspb.BinaryDecoder.prototype.readSplitZigzagVarint64 = function (a) {
+  return this.readSplitVarint64(function (b, c) {
+    return jspb.utils.fromZigzag64(b, c, a);
+  });
 };
 
-goog.html.SafeStyleSheet.concat = function (a) {
-  var b = "",
-      c = function (a) {
-    goog.isArray(a) ? goog.array.forEach(a, c) : b += goog.html.SafeStyleSheet.unwrap(a);
-  };
+jspb.BinaryDecoder.prototype.readSplitFixed64 = function (a) {
+  var b = this.bytes_,
+      c = this.cursor_;
+  this.cursor_ += 8;
 
-  goog.array.forEach(arguments, c);
-  return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(b);
-};
+  for (var d = 0, e = 0, f = c + 7; f >= c; f--) d = d << 8 | b[f], e = e << 8 | b[f + 4];
 
-goog.html.SafeStyleSheet.fromConstant = function (a) {
-  a = goog.string.Const.unwrap(a);
-  if (0 === a.length) return goog.html.SafeStyleSheet.EMPTY;
-  goog.asserts.assert(!goog.string.internal.contains(a, "<"), "Forbidden '<' character in style sheet string: " + a);
-  return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(a);
+  return a(d, e);
 };
 
-goog.html.SafeStyleSheet.prototype.getTypedStringValue = function () {
-  return this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_;
+jspb.BinaryDecoder.prototype.skipVarint = function () {
+  for (; this.bytes_[this.cursor_] & 128;) this.cursor_++;
+
+  this.cursor_++;
 };
 
-goog.DEBUG && (goog.html.SafeStyleSheet.prototype.toString = function () {
-  return "SafeStyleSheet{" + this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_ + "}";
-});
+jspb.BinaryDecoder.prototype.unskipVarint = function (a) {
+  for (; 128 < a;) this.cursor_--, a >>>= 7;
 
-goog.html.SafeStyleSheet.unwrap = function (a) {
-  if (a instanceof goog.html.SafeStyleSheet && a.constructor === goog.html.SafeStyleSheet && a.SAFE_STYLE_SHEET_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ === goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) return a.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_;
-  goog.asserts.fail("expected object of type SafeStyleSheet, got '" + a + "' of type " + goog.typeOf(a));
-  return "type_error:SafeStyleSheet";
+  this.cursor_--;
 };
 
-goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse = function (a) {
-  return new goog.html.SafeStyleSheet().initSecurityPrivateDoNotAccessOrElse_(a);
+jspb.BinaryDecoder.prototype.readUnsignedVarint32 = function () {
+  var a = this.bytes_;
+  var b = a[this.cursor_ + 0];
+  var c = b & 127;
+  if (128 > b) return this.cursor_ += 1, goog.asserts.assert(this.cursor_ <= this.end_), c;
+  b = a[this.cursor_ + 1];
+  c |= (b & 127) << 7;
+  if (128 > b) return this.cursor_ += 2, goog.asserts.assert(this.cursor_ <= this.end_), c;
+  b = a[this.cursor_ + 2];
+  c |= (b & 127) << 14;
+  if (128 > b) return this.cursor_ += 3, goog.asserts.assert(this.cursor_ <= this.end_), c;
+  b = a[this.cursor_ + 3];
+  c |= (b & 127) << 21;
+  if (128 > b) return this.cursor_ += 4, goog.asserts.assert(this.cursor_ <= this.end_), c;
+  b = a[this.cursor_ + 4];
+  c |= (b & 15) << 28;
+  if (128 > b) return this.cursor_ += 5, goog.asserts.assert(this.cursor_ <= this.end_), c >>> 0;
+  this.cursor_ += 5;
+  128 <= a[this.cursor_++] && 128 <= a[this.cursor_++] && 128 <= a[this.cursor_++] && 128 <= a[this.cursor_++] && 128 <= a[this.cursor_++] && goog.asserts.assert(!1);
+  goog.asserts.assert(this.cursor_ <= this.end_);
+  return c;
 };
 
-goog.html.SafeStyleSheet.prototype.initSecurityPrivateDoNotAccessOrElse_ = function (a) {
-  this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_ = a;
-  return this;
-};
+jspb.BinaryDecoder.prototype.readSignedVarint32 = jspb.BinaryDecoder.prototype.readUnsignedVarint32;
 
-goog.html.SafeStyleSheet.EMPTY = goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse("");
-goog.dom.tags = {};
-goog.dom.tags.VOID_TAGS_ = {
-  area: !0,
-  base: !0,
-  br: !0,
-  col: !0,
-  command: !0,
-  embed: !0,
-  hr: !0,
-  img: !0,
-  input: !0,
-  keygen: !0,
-  link: !0,
-  meta: !0,
-  param: !0,
-  source: !0,
-  track: !0,
-  wbr: !0
+jspb.BinaryDecoder.prototype.readUnsignedVarint32String = function () {
+  return this.readUnsignedVarint32().toString();
 };
 
-goog.dom.tags.isVoidTag = function (a) {
-  return !0 === goog.dom.tags.VOID_TAGS_[a];
+jspb.BinaryDecoder.prototype.readSignedVarint32String = function () {
+  return this.readSignedVarint32().toString();
 };
 
-goog.dom.HtmlElement = function () {};
+jspb.BinaryDecoder.prototype.readZigzagVarint32 = function () {
+  var a = this.readUnsignedVarint32();
+  return a >>> 1 ^ -(a & 1);
+};
 
-goog.dom.TagName = function (a) {
-  this.tagName_ = a;
+jspb.BinaryDecoder.prototype.readUnsignedVarint64 = function () {
+  return this.readSplitVarint64(jspb.utils.joinUint64);
 };
 
-goog.dom.TagName.prototype.toString = function () {
-  return this.tagName_;
+jspb.BinaryDecoder.prototype.readUnsignedVarint64String = function () {
+  return this.readSplitVarint64(jspb.utils.joinUnsignedDecimalString);
 };
 
-goog.dom.TagName.A = new goog.dom.TagName("A");
-goog.dom.TagName.ABBR = new goog.dom.TagName("ABBR");
-goog.dom.TagName.ACRONYM = new goog.dom.TagName("ACRONYM");
-goog.dom.TagName.ADDRESS = new goog.dom.TagName("ADDRESS");
-goog.dom.TagName.APPLET = new goog.dom.TagName("APPLET");
-goog.dom.TagName.AREA = new goog.dom.TagName("AREA");
-goog.dom.TagName.ARTICLE = new goog.dom.TagName("ARTICLE");
-goog.dom.TagName.ASIDE = new goog.dom.TagName("ASIDE");
-goog.dom.TagName.AUDIO = new goog.dom.TagName("AUDIO");
-goog.dom.TagName.B = new goog.dom.TagName("B");
-goog.dom.TagName.BASE = new goog.dom.TagName("BASE");
-goog.dom.TagName.BASEFONT = new goog.dom.TagName("BASEFONT");
-goog.dom.TagName.BDI = new goog.dom.TagName("BDI");
-goog.dom.TagName.BDO = new goog.dom.TagName("BDO");
-goog.dom.TagName.BIG = new goog.dom.TagName("BIG");
-goog.dom.TagName.BLOCKQUOTE = new goog.dom.TagName("BLOCKQUOTE");
-goog.dom.TagName.BODY = new goog.dom.TagName("BODY");
-goog.dom.TagName.BR = new goog.dom.TagName("BR");
-goog.dom.TagName.BUTTON = new goog.dom.TagName("BUTTON");
-goog.dom.TagName.CANVAS = new goog.dom.TagName("CANVAS");
-goog.dom.TagName.CAPTION = new goog.dom.TagName("CAPTION");
-goog.dom.TagName.CENTER = new goog.dom.TagName("CENTER");
-goog.dom.TagName.CITE = new goog.dom.TagName("CITE");
-goog.dom.TagName.CODE = new goog.dom.TagName("CODE");
-goog.dom.TagName.COL = new goog.dom.TagName("COL");
-goog.dom.TagName.COLGROUP = new goog.dom.TagName("COLGROUP");
-goog.dom.TagName.COMMAND = new goog.dom.TagName("COMMAND");
-goog.dom.TagName.DATA = new goog.dom.TagName("DATA");
-goog.dom.TagName.DATALIST = new goog.dom.TagName("DATALIST");
-goog.dom.TagName.DD = new goog.dom.TagName("DD");
-goog.dom.TagName.DEL = new goog.dom.TagName("DEL");
-goog.dom.TagName.DETAILS = new goog.dom.TagName("DETAILS");
-goog.dom.TagName.DFN = new goog.dom.TagName("DFN");
-goog.dom.TagName.DIALOG = new goog.dom.TagName("DIALOG");
-goog.dom.TagName.DIR = new goog.dom.TagName("DIR");
-goog.dom.TagName.DIV = new goog.dom.TagName("DIV");
-goog.dom.TagName.DL = new goog.dom.TagName("DL");
-goog.dom.TagName.DT = new goog.dom.TagName("DT");
-goog.dom.TagName.EM = new goog.dom.TagName("EM");
-goog.dom.TagName.EMBED = new goog.dom.TagName("EMBED");
-goog.dom.TagName.FIELDSET = new goog.dom.TagName("FIELDSET");
-goog.dom.TagName.FIGCAPTION = new goog.dom.TagName("FIGCAPTION");
-goog.dom.TagName.FIGURE = new goog.dom.TagName("FIGURE");
-goog.dom.TagName.FONT = new goog.dom.TagName("FONT");
-goog.dom.TagName.FOOTER = new goog.dom.TagName("FOOTER");
-goog.dom.TagName.FORM = new goog.dom.TagName("FORM");
-goog.dom.TagName.FRAME = new goog.dom.TagName("FRAME");
-goog.dom.TagName.FRAMESET = new goog.dom.TagName("FRAMESET");
-goog.dom.TagName.H1 = new goog.dom.TagName("H1");
-goog.dom.TagName.H2 = new goog.dom.TagName("H2");
-goog.dom.TagName.H3 = new goog.dom.TagName("H3");
-goog.dom.TagName.H4 = new goog.dom.TagName("H4");
-goog.dom.TagName.H5 = new goog.dom.TagName("H5");
-goog.dom.TagName.H6 = new goog.dom.TagName("H6");
-goog.dom.TagName.HEAD = new goog.dom.TagName("HEAD");
-goog.dom.TagName.HEADER = new goog.dom.TagName("HEADER");
-goog.dom.TagName.HGROUP = new goog.dom.TagName("HGROUP");
-goog.dom.TagName.HR = new goog.dom.TagName("HR");
-goog.dom.TagName.HTML = new goog.dom.TagName("HTML");
-goog.dom.TagName.I = new goog.dom.TagName("I");
-goog.dom.TagName.IFRAME = new goog.dom.TagName("IFRAME");
-goog.dom.TagName.IMG = new goog.dom.TagName("IMG");
-goog.dom.TagName.INPUT = new goog.dom.TagName("INPUT");
-goog.dom.TagName.INS = new goog.dom.TagName("INS");
-goog.dom.TagName.ISINDEX = new goog.dom.TagName("ISINDEX");
-goog.dom.TagName.KBD = new goog.dom.TagName("KBD");
-goog.dom.TagName.KEYGEN = new goog.dom.TagName("KEYGEN");
-goog.dom.TagName.LABEL = new goog.dom.TagName("LABEL");
-goog.dom.TagName.LEGEND = new goog.dom.TagName("LEGEND");
-goog.dom.TagName.LI = new goog.dom.TagName("LI");
-goog.dom.TagName.LINK = new goog.dom.TagName("LINK");
-goog.dom.TagName.MAIN = new goog.dom.TagName("MAIN");
-goog.dom.TagName.MAP = new goog.dom.TagName("MAP");
-goog.dom.TagName.MARK = new goog.dom.TagName("MARK");
-goog.dom.TagName.MATH = new goog.dom.TagName("MATH");
-goog.dom.TagName.MENU = new goog.dom.TagName("MENU");
-goog.dom.TagName.MENUITEM = new goog.dom.TagName("MENUITEM");
-goog.dom.TagName.META = new goog.dom.TagName("META");
-goog.dom.TagName.METER = new goog.dom.TagName("METER");
-goog.dom.TagName.NAV = new goog.dom.TagName("NAV");
-goog.dom.TagName.NOFRAMES = new goog.dom.TagName("NOFRAMES");
-goog.dom.TagName.NOSCRIPT = new goog.dom.TagName("NOSCRIPT");
-goog.dom.TagName.OBJECT = new goog.dom.TagName("OBJECT");
-goog.dom.TagName.OL = new goog.dom.TagName("OL");
-goog.dom.TagName.OPTGROUP = new goog.dom.TagName("OPTGROUP");
-goog.dom.TagName.OPTION = new goog.dom.TagName("OPTION");
-goog.dom.TagName.OUTPUT = new goog.dom.TagName("OUTPUT");
-goog.dom.TagName.P = new goog.dom.TagName("P");
-goog.dom.TagName.PARAM = new goog.dom.TagName("PARAM");
-goog.dom.TagName.PICTURE = new goog.dom.TagName("PICTURE");
-goog.dom.TagName.PRE = new goog.dom.TagName("PRE");
-goog.dom.TagName.PROGRESS = new goog.dom.TagName("PROGRESS");
-goog.dom.TagName.Q = new goog.dom.TagName("Q");
-goog.dom.TagName.RP = new goog.dom.TagName("RP");
-goog.dom.TagName.RT = new goog.dom.TagName("RT");
-goog.dom.TagName.RTC = new goog.dom.TagName("RTC");
-goog.dom.TagName.RUBY = new goog.dom.TagName("RUBY");
-goog.dom.TagName.S = new goog.dom.TagName("S");
-goog.dom.TagName.SAMP = new goog.dom.TagName("SAMP");
-goog.dom.TagName.SCRIPT = new goog.dom.TagName("SCRIPT");
-goog.dom.TagName.SECTION = new goog.dom.TagName("SECTION");
-goog.dom.TagName.SELECT = new goog.dom.TagName("SELECT");
-goog.dom.TagName.SMALL = new goog.dom.TagName("SMALL");
-goog.dom.TagName.SOURCE = new goog.dom.TagName("SOURCE");
-goog.dom.TagName.SPAN = new goog.dom.TagName("SPAN");
-goog.dom.TagName.STRIKE = new goog.dom.TagName("STRIKE");
-goog.dom.TagName.STRONG = new goog.dom.TagName("STRONG");
-goog.dom.TagName.STYLE = new goog.dom.TagName("STYLE");
-goog.dom.TagName.SUB = new goog.dom.TagName("SUB");
-goog.dom.TagName.SUMMARY = new goog.dom.TagName("SUMMARY");
-goog.dom.TagName.SUP = new goog.dom.TagName("SUP");
-goog.dom.TagName.SVG = new goog.dom.TagName("SVG");
-goog.dom.TagName.TABLE = new goog.dom.TagName("TABLE");
-goog.dom.TagName.TBODY = new goog.dom.TagName("TBODY");
-goog.dom.TagName.TD = new goog.dom.TagName("TD");
-goog.dom.TagName.TEMPLATE = new goog.dom.TagName("TEMPLATE");
-goog.dom.TagName.TEXTAREA = new goog.dom.TagName("TEXTAREA");
-goog.dom.TagName.TFOOT = new goog.dom.TagName("TFOOT");
-goog.dom.TagName.TH = new goog.dom.TagName("TH");
-goog.dom.TagName.THEAD = new goog.dom.TagName("THEAD");
-goog.dom.TagName.TIME = new goog.dom.TagName("TIME");
-goog.dom.TagName.TITLE = new goog.dom.TagName("TITLE");
-goog.dom.TagName.TR = new goog.dom.TagName("TR");
-goog.dom.TagName.TRACK = new goog.dom.TagName("TRACK");
-goog.dom.TagName.TT = new goog.dom.TagName("TT");
-goog.dom.TagName.U = new goog.dom.TagName("U");
-goog.dom.TagName.UL = new goog.dom.TagName("UL");
-goog.dom.TagName.VAR = new goog.dom.TagName("VAR");
-goog.dom.TagName.VIDEO = new goog.dom.TagName("VIDEO");
-goog.dom.TagName.WBR = new goog.dom.TagName("WBR");
-goog.labs = {};
-goog.labs.userAgent = {};
-goog.labs.userAgent.util = {};
-
-goog.labs.userAgent.util.getNativeUserAgentString_ = function () {
-  var a = goog.labs.userAgent.util.getNavigator_();
-  return a && (a = a.userAgent) ? a : "";
+jspb.BinaryDecoder.prototype.readSignedVarint64 = function () {
+  return this.readSplitVarint64(jspb.utils.joinInt64);
 };
 
-goog.labs.userAgent.util.getNavigator_ = function () {
-  return goog.global.navigator;
+jspb.BinaryDecoder.prototype.readSignedVarint64String = function () {
+  return this.readSplitVarint64(jspb.utils.joinSignedDecimalString);
 };
 
-goog.labs.userAgent.util.userAgent_ = goog.labs.userAgent.util.getNativeUserAgentString_();
-
-goog.labs.userAgent.util.setUserAgent = function (a) {
-  goog.labs.userAgent.util.userAgent_ = a || goog.labs.userAgent.util.getNativeUserAgentString_();
+jspb.BinaryDecoder.prototype.readZigzagVarint64 = function () {
+  return this.readSplitVarint64(jspb.utils.joinZigzag64);
 };
 
-goog.labs.userAgent.util.getUserAgent = function () {
-  return goog.labs.userAgent.util.userAgent_;
+jspb.BinaryDecoder.prototype.readZigzagVarintHash64 = function () {
+  return this.readSplitZigzagVarint64(jspb.utils.joinHash64);
 };
 
-goog.labs.userAgent.util.matchUserAgent = function (a) {
-  var b = goog.labs.userAgent.util.getUserAgent();
-  return goog.string.internal.contains(b, a);
+jspb.BinaryDecoder.prototype.readZigzagVarint64String = function () {
+  return this.readSplitZigzagVarint64(jspb.utils.joinSignedDecimalString);
 };
 
-goog.labs.userAgent.util.matchUserAgentIgnoreCase = function (a) {
-  var b = goog.labs.userAgent.util.getUserAgent();
-  return goog.string.internal.caseInsensitiveContains(b, a);
+jspb.BinaryDecoder.prototype.readUint8 = function () {
+  var a = this.bytes_[this.cursor_ + 0];
+  this.cursor_ += 1;
+  goog.asserts.assert(this.cursor_ <= this.end_);
+  return a;
 };
 
-goog.labs.userAgent.util.extractVersionTuples = function (a) {
-  for (var b = /(\w[\w ]+)\/([^\s]+)\s*(?:\((.*?)\))?/g, c = [], d; d = b.exec(a);) c.push([d[1], d[2], d[3] || void 0]);
-
-  return c;
+jspb.BinaryDecoder.prototype.readUint16 = function () {
+  var a = this.bytes_[this.cursor_ + 0],
+      b = this.bytes_[this.cursor_ + 1];
+  this.cursor_ += 2;
+  goog.asserts.assert(this.cursor_ <= this.end_);
+  return a << 0 | b << 8;
 };
 
-goog.labs.userAgent.browser = {};
-
-goog.labs.userAgent.browser.matchOpera_ = function () {
-  return goog.labs.userAgent.util.matchUserAgent("Opera");
+jspb.BinaryDecoder.prototype.readUint32 = function () {
+  var a = this.bytes_[this.cursor_ + 0],
+      b = this.bytes_[this.cursor_ + 1],
+      c = this.bytes_[this.cursor_ + 2],
+      d = this.bytes_[this.cursor_ + 3];
+  this.cursor_ += 4;
+  goog.asserts.assert(this.cursor_ <= this.end_);
+  return (a << 0 | b << 8 | c << 16 | d << 24) >>> 0;
 };
 
-goog.labs.userAgent.browser.matchIE_ = function () {
-  return goog.labs.userAgent.util.matchUserAgent("Trident") || goog.labs.userAgent.util.matchUserAgent("MSIE");
+jspb.BinaryDecoder.prototype.readUint64 = function () {
+  var a = this.readUint32(),
+      b = this.readUint32();
+  return jspb.utils.joinUint64(a, b);
 };
 
-goog.labs.userAgent.browser.matchEdgeHtml_ = function () {
-  return goog.labs.userAgent.util.matchUserAgent("Edge");
+jspb.BinaryDecoder.prototype.readUint64String = function () {
+  var a = this.readUint32(),
+      b = this.readUint32();
+  return jspb.utils.joinUnsignedDecimalString(a, b);
 };
 
-goog.labs.userAgent.browser.matchEdgeChromium_ = function () {
-  return goog.labs.userAgent.util.matchUserAgent("Edg/");
+jspb.BinaryDecoder.prototype.readInt8 = function () {
+  var a = this.bytes_[this.cursor_ + 0];
+  this.cursor_ += 1;
+  goog.asserts.assert(this.cursor_ <= this.end_);
+  return a << 24 >> 24;
 };
 
-goog.labs.userAgent.browser.matchOperaChromium_ = function () {
-  return goog.labs.userAgent.util.matchUserAgent("OPR");
+jspb.BinaryDecoder.prototype.readInt16 = function () {
+  var a = this.bytes_[this.cursor_ + 0],
+      b = this.bytes_[this.cursor_ + 1];
+  this.cursor_ += 2;
+  goog.asserts.assert(this.cursor_ <= this.end_);
+  return (a << 0 | b << 8) << 16 >> 16;
 };
 
-goog.labs.userAgent.browser.matchFirefox_ = function () {
-  return goog.labs.userAgent.util.matchUserAgent("Firefox") || goog.labs.userAgent.util.matchUserAgent("FxiOS");
+jspb.BinaryDecoder.prototype.readInt32 = function () {
+  var a = this.bytes_[this.cursor_ + 0],
+      b = this.bytes_[this.cursor_ + 1],
+      c = this.bytes_[this.cursor_ + 2],
+      d = this.bytes_[this.cursor_ + 3];
+  this.cursor_ += 4;
+  goog.asserts.assert(this.cursor_ <= this.end_);
+  return a << 0 | b << 8 | c << 16 | d << 24;
 };
 
-goog.labs.userAgent.browser.matchSafari_ = function () {
-  return goog.labs.userAgent.util.matchUserAgent("Safari") && !(goog.labs.userAgent.browser.matchChrome_() || goog.labs.userAgent.browser.matchCoast_() || goog.labs.userAgent.browser.matchOpera_() || goog.labs.userAgent.browser.matchEdgeHtml_() || goog.labs.userAgent.browser.matchEdgeChromium_() || goog.labs.userAgent.browser.matchOperaChromium_() || goog.labs.userAgent.browser.matchFirefox_() || goog.labs.userAgent.browser.isSilk() || goog.labs.userAgent.util.matchUserAgent("Android"));
+jspb.BinaryDecoder.prototype.readInt64 = function () {
+  var a = this.readUint32(),
+      b = this.readUint32();
+  return jspb.utils.joinInt64(a, b);
 };
 
-goog.labs.userAgent.browser.matchCoast_ = function () {
-  return goog.labs.userAgent.util.matchUserAgent("Coast");
+jspb.BinaryDecoder.prototype.readInt64String = function () {
+  var a = this.readUint32(),
+      b = this.readUint32();
+  return jspb.utils.joinSignedDecimalString(a, b);
 };
 
-goog.labs.userAgent.browser.matchIosWebview_ = function () {
-  return (goog.labs.userAgent.util.matchUserAgent("iPad") || goog.labs.userAgent.util.matchUserAgent("iPhone")) && !goog.labs.userAgent.browser.matchSafari_() && !goog.labs.userAgent.browser.matchChrome_() && !goog.labs.userAgent.browser.matchCoast_() && !goog.labs.userAgent.browser.matchFirefox_() && goog.labs.userAgent.util.matchUserAgent("AppleWebKit");
+jspb.BinaryDecoder.prototype.readFloat = function () {
+  var a = this.readUint32();
+  return jspb.utils.joinFloat32(a, 0);
 };
 
-goog.labs.userAgent.browser.matchChrome_ = function () {
-  return (goog.labs.userAgent.util.matchUserAgent("Chrome") || goog.labs.userAgent.util.matchUserAgent("CriOS")) && !goog.labs.userAgent.browser.matchEdgeHtml_();
+jspb.BinaryDecoder.prototype.readDouble = function () {
+  var a = this.readUint32(),
+      b = this.readUint32();
+  return jspb.utils.joinFloat64(a, b);
 };
 
-goog.labs.userAgent.browser.matchAndroidBrowser_ = function () {
-  return goog.labs.userAgent.util.matchUserAgent("Android") && !(goog.labs.userAgent.browser.isChrome() || goog.labs.userAgent.browser.isFirefox() || goog.labs.userAgent.browser.isOpera() || goog.labs.userAgent.browser.isSilk());
+jspb.BinaryDecoder.prototype.readBool = function () {
+  return !!this.bytes_[this.cursor_++];
 };
 
-goog.labs.userAgent.browser.isOpera = goog.labs.userAgent.browser.matchOpera_;
-goog.labs.userAgent.browser.isIE = goog.labs.userAgent.browser.matchIE_;
-goog.labs.userAgent.browser.isEdge = goog.labs.userAgent.browser.matchEdgeHtml_;
-goog.labs.userAgent.browser.isEdgeChromium = goog.labs.userAgent.browser.matchEdgeChromium_;
-goog.labs.userAgent.browser.isOperaChromium = goog.labs.userAgent.browser.matchOperaChromium_;
-goog.labs.userAgent.browser.isFirefox = goog.labs.userAgent.browser.matchFirefox_;
-goog.labs.userAgent.browser.isSafari = goog.labs.userAgent.browser.matchSafari_;
-goog.labs.userAgent.browser.isCoast = goog.labs.userAgent.browser.matchCoast_;
-goog.labs.userAgent.browser.isIosWebview = goog.labs.userAgent.browser.matchIosWebview_;
-goog.labs.userAgent.browser.isChrome = goog.labs.userAgent.browser.matchChrome_;
-goog.labs.userAgent.browser.isAndroidBrowser = goog.labs.userAgent.browser.matchAndroidBrowser_;
-
-goog.labs.userAgent.browser.isSilk = function () {
-  return goog.labs.userAgent.util.matchUserAgent("Silk");
+jspb.BinaryDecoder.prototype.readEnum = function () {
+  return this.readSignedVarint32();
 };
 
-goog.labs.userAgent.browser.getVersion = function () {
-  function a(a) {
-    a = goog.array.find(a, d);
-    return c[a] || "";
+jspb.BinaryDecoder.prototype.readString = function (a) {
+  var b = this.bytes_,
+      c = this.cursor_;
+  a = c + a;
+
+  for (var d = [], e = ""; c < a;) {
+    var f = b[c++];
+    if (128 > f) d.push(f);else if (192 > f) continue;else if (224 > f) {
+      var g = b[c++];
+      d.push((f & 31) << 6 | g & 63);
+    } else if (240 > f) {
+      g = b[c++];
+      var h = b[c++];
+      d.push((f & 15) << 12 | (g & 63) << 6 | h & 63);
+    } else if (248 > f) {
+      g = b[c++];
+      h = b[c++];
+      var k = b[c++];
+      f = (f & 7) << 18 | (g & 63) << 12 | (h & 63) << 6 | k & 63;
+      f -= 65536;
+      d.push((f >> 10 & 1023) + 55296, (f & 1023) + 56320);
+    }
+    8192 <= d.length && (e += String.fromCharCode.apply(null, d), d.length = 0);
   }
 
-  var b = goog.labs.userAgent.util.getUserAgent();
-  if (goog.labs.userAgent.browser.isIE()) return goog.labs.userAgent.browser.getIEVersion_(b);
-  b = goog.labs.userAgent.util.extractVersionTuples(b);
-  var c = {};
-  goog.array.forEach(b, function (a) {
-    c[a[0]] = a[1];
-  });
-  var d = goog.partial(goog.object.containsKey, c);
-  return goog.labs.userAgent.browser.isOpera() ? a(["Version", "Opera"]) : goog.labs.userAgent.browser.isEdge() ? a(["Edge"]) : goog.labs.userAgent.browser.isEdgeChromium() ? a(["Edg"]) : goog.labs.userAgent.browser.isChrome() ? a(["Chrome", "CriOS"]) : (b = b[2]) && b[1] || "";
+  e += goog.crypt.byteArrayToString(d);
+  this.cursor_ = c;
+  return e;
 };
 
-goog.labs.userAgent.browser.isVersionOrHigher = function (a) {
-  return 0 <= goog.string.internal.compareVersions(goog.labs.userAgent.browser.getVersion(), a);
+jspb.BinaryDecoder.prototype.readStringWithLength = function () {
+  var a = this.readUnsignedVarint32();
+  return this.readString(a);
 };
 
-goog.labs.userAgent.browser.getIEVersion_ = function (a) {
-  var b = /rv: *([\d\.]*)/.exec(a);
-  if (b && b[1]) return b[1];
-  b = "";
-  var c = /MSIE +([\d\.]+)/.exec(a);
-  if (c && c[1]) if (a = /Trident\/(\d.\d)/.exec(a), "7.0" == c[1]) {
-    if (a && a[1]) switch (a[1]) {
-      case "4.0":
-        b = "8.0";
-        break;
-
-      case "5.0":
-        b = "9.0";
-        break;
-
-      case "6.0":
-        b = "10.0";
-        break;
-
-      case "7.0":
-        b = "11.0";
-    } else b = "7.0";
-  } else b = c[1];
+jspb.BinaryDecoder.prototype.readBytes = function (a) {
+  if (0 > a || this.cursor_ + a > this.bytes_.length) return this.error_ = !0, goog.asserts.fail("Invalid byte length!"), new Uint8Array(0);
+  var b = this.bytes_.subarray(this.cursor_, this.cursor_ + a);
+  this.cursor_ += a;
+  goog.asserts.assert(this.cursor_ <= this.end_);
   return b;
 };
 
-goog.html.SafeHtml = function () {
-  this.privateDoNotAccessOrElseSafeHtmlWrappedValue_ = "";
-  this.SAFE_HTML_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;
-  this.dir_ = null;
+jspb.BinaryDecoder.prototype.readVarintHash64 = function () {
+  return this.readSplitVarint64(jspb.utils.joinHash64);
 };
 
-goog.html.SafeHtml.prototype.implementsGoogI18nBidiDirectionalString = !0;
+jspb.BinaryDecoder.prototype.readFixedHash64 = function () {
+  var a = this.bytes_,
+      b = this.cursor_,
+      c = a[b + 0],
+      d = a[b + 1],
+      e = a[b + 2],
+      f = a[b + 3],
+      g = a[b + 4],
+      h = a[b + 5],
+      k = a[b + 6];
+  a = a[b + 7];
+  this.cursor_ += 8;
+  return String.fromCharCode(c, d, e, f, g, h, k, a);
+};
 
-goog.html.SafeHtml.prototype.getDirection = function () {
-  return this.dir_;
+jspb.BinaryReader = function (a, b, c) {
+  this.decoder_ = jspb.BinaryDecoder.alloc(a, b, c);
+  this.fieldCursor_ = this.decoder_.getCursor();
+  this.nextField_ = jspb.BinaryConstants.INVALID_FIELD_NUMBER;
+  this.nextWireType_ = jspb.BinaryConstants.WireType.INVALID;
+  this.error_ = !1;
+  this.readCallbacks_ = null;
 };
 
-goog.html.SafeHtml.prototype.implementsGoogStringTypedString = !0;
+jspb.BinaryReader.instanceCache_ = [];
 
-goog.html.SafeHtml.prototype.getTypedStringValue = function () {
-  return this.privateDoNotAccessOrElseSafeHtmlWrappedValue_.toString();
+jspb.BinaryReader.alloc = function (a, b, c) {
+  if (jspb.BinaryReader.instanceCache_.length) {
+    var d = jspb.BinaryReader.instanceCache_.pop();
+    a && d.decoder_.setBlock(a, b, c);
+    return d;
+  }
+
+  return new jspb.BinaryReader(a, b, c);
 };
 
-goog.DEBUG && (goog.html.SafeHtml.prototype.toString = function () {
-  return "SafeHtml{" + this.privateDoNotAccessOrElseSafeHtmlWrappedValue_ + "}";
-});
+jspb.BinaryReader.prototype.alloc = jspb.BinaryReader.alloc;
 
-goog.html.SafeHtml.unwrap = function (a) {
-  return goog.html.SafeHtml.unwrapTrustedHTML(a).toString();
+jspb.BinaryReader.prototype.free = function () {
+  this.decoder_.clear();
+  this.nextField_ = jspb.BinaryConstants.INVALID_FIELD_NUMBER;
+  this.nextWireType_ = jspb.BinaryConstants.WireType.INVALID;
+  this.error_ = !1;
+  this.readCallbacks_ = null;
+  100 > jspb.BinaryReader.instanceCache_.length && jspb.BinaryReader.instanceCache_.push(this);
 };
 
-goog.html.SafeHtml.unwrapTrustedHTML = function (a) {
-  if (a instanceof goog.html.SafeHtml && a.constructor === goog.html.SafeHtml && a.SAFE_HTML_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ === goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_) return a.privateDoNotAccessOrElseSafeHtmlWrappedValue_;
-  goog.asserts.fail("expected object of type SafeHtml, got '" + a + "' of type " + goog.typeOf(a));
-  return "type_error:SafeHtml";
+jspb.BinaryReader.prototype.getFieldCursor = function () {
+  return this.fieldCursor_;
 };
 
-goog.html.SafeHtml.htmlEscape = function (a) {
-  if (a instanceof goog.html.SafeHtml) return a;
-  var b = "object" == typeof a,
-      c = null;
-  b && a.implementsGoogI18nBidiDirectionalString && (c = a.getDirection());
-  a = b && a.implementsGoogStringTypedString ? a.getTypedStringValue() : String(a);
-  return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.htmlEscape(a), c);
+jspb.BinaryReader.prototype.getCursor = function () {
+  return this.decoder_.getCursor();
 };
 
-goog.html.SafeHtml.htmlEscapePreservingNewlines = function (a) {
-  if (a instanceof goog.html.SafeHtml) return a;
-  a = goog.html.SafeHtml.htmlEscape(a);
-  return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.newLineToBr(goog.html.SafeHtml.unwrap(a)), a.getDirection());
+jspb.BinaryReader.prototype.getBuffer = function () {
+  return this.decoder_.getBuffer();
 };
 
-goog.html.SafeHtml.htmlEscapePreservingNewlinesAndSpaces = function (a) {
-  if (a instanceof goog.html.SafeHtml) return a;
-  a = goog.html.SafeHtml.htmlEscape(a);
-  return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.whitespaceEscape(goog.html.SafeHtml.unwrap(a)), a.getDirection());
+jspb.BinaryReader.prototype.getFieldNumber = function () {
+  return this.nextField_;
 };
 
-goog.html.SafeHtml.from = goog.html.SafeHtml.htmlEscape;
-goog.html.SafeHtml.VALID_NAMES_IN_TAG_ = /^[a-zA-Z0-9-]+$/;
-goog.html.SafeHtml.URL_ATTRIBUTES_ = {
-  action: !0,
-  cite: !0,
-  data: !0,
-  formaction: !0,
-  href: !0,
-  manifest: !0,
-  poster: !0,
-  src: !0
+jspb.BinaryReader.prototype.getWireType = function () {
+  return this.nextWireType_;
 };
-goog.html.SafeHtml.NOT_ALLOWED_TAG_NAMES_ = {
-  APPLET: !0,
-  BASE: !0,
-  EMBED: !0,
-  IFRAME: !0,
-  LINK: !0,
-  MATH: !0,
-  META: !0,
-  OBJECT: !0,
-  SCRIPT: !0,
-  STYLE: !0,
-  SVG: !0,
-  TEMPLATE: !0
+
+jspb.BinaryReader.prototype.isDelimited = function () {
+  return this.nextWireType_ == jspb.BinaryConstants.WireType.DELIMITED;
 };
 
-goog.html.SafeHtml.create = function (a, b, c) {
-  goog.html.SafeHtml.verifyTagName(String(a));
-  return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(String(a), b, c);
+jspb.BinaryReader.prototype.isEndGroup = function () {
+  return this.nextWireType_ == jspb.BinaryConstants.WireType.END_GROUP;
 };
 
-goog.html.SafeHtml.verifyTagName = function (a) {
-  if (!goog.html.SafeHtml.VALID_NAMES_IN_TAG_.test(a)) throw Error("Invalid tag name <" + a + ">.");
-  if (a.toUpperCase() in goog.html.SafeHtml.NOT_ALLOWED_TAG_NAMES_) throw Error("Tag name <" + a + "> is not allowed for SafeHtml.");
+jspb.BinaryReader.prototype.getError = function () {
+  return this.error_ || this.decoder_.getError();
 };
 
-goog.html.SafeHtml.createIframe = function (a, b, c, d) {
-  a && goog.html.TrustedResourceUrl.unwrap(a);
-  var e = {};
-  e.src = a || null;
-  e.srcdoc = b && goog.html.SafeHtml.unwrap(b);
-  a = goog.html.SafeHtml.combineAttributes(e, {
-    sandbox: ""
-  }, c);
-  return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("iframe", a, d);
+jspb.BinaryReader.prototype.setBlock = function (a, b, c) {
+  this.decoder_.setBlock(a, b, c);
+  this.nextField_ = jspb.BinaryConstants.INVALID_FIELD_NUMBER;
+  this.nextWireType_ = jspb.BinaryConstants.WireType.INVALID;
 };
 
-goog.html.SafeHtml.createSandboxIframe = function (a, b, c, d) {
-  if (!goog.html.SafeHtml.canUseSandboxIframe()) throw Error("The browser does not support sandboxed iframes.");
-  var e = {};
-  e.src = a ? goog.html.SafeUrl.unwrap(goog.html.SafeUrl.sanitize(a)) : null;
-  e.srcdoc = b || null;
-  e.sandbox = "";
-  a = goog.html.SafeHtml.combineAttributes(e, {}, c);
-  return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("iframe", a, d);
+jspb.BinaryReader.prototype.reset = function () {
+  this.decoder_.reset();
+  this.nextField_ = jspb.BinaryConstants.INVALID_FIELD_NUMBER;
+  this.nextWireType_ = jspb.BinaryConstants.WireType.INVALID;
 };
 
-goog.html.SafeHtml.canUseSandboxIframe = function () {
-  return goog.global.HTMLIFrameElement && "sandbox" in goog.global.HTMLIFrameElement.prototype;
+jspb.BinaryReader.prototype.advance = function (a) {
+  this.decoder_.advance(a);
 };
 
-goog.html.SafeHtml.createScriptSrc = function (a, b) {
-  goog.html.TrustedResourceUrl.unwrap(a);
-  a = goog.html.SafeHtml.combineAttributes({
-    src: a
-  }, {}, b);
-  return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("script", a);
+jspb.BinaryReader.prototype.nextField = function () {
+  if (this.decoder_.atEnd()) return !1;
+  if (this.getError()) return goog.asserts.fail("Decoder hit an error"), !1;
+  this.fieldCursor_ = this.decoder_.getCursor();
+  var a = this.decoder_.readUnsignedVarint32(),
+      b = a >>> 3;
+  a &= 7;
+  if (a != jspb.BinaryConstants.WireType.VARINT && a != jspb.BinaryConstants.WireType.FIXED32 && a != jspb.BinaryConstants.WireType.FIXED64 && a != jspb.BinaryConstants.WireType.DELIMITED && a != jspb.BinaryConstants.WireType.START_GROUP && a != jspb.BinaryConstants.WireType.END_GROUP) return goog.asserts.fail("Invalid wire type: %s (at position %s)", a, this.fieldCursor_), this.error_ = !0, !1;
+  this.nextField_ = b;
+  this.nextWireType_ = a;
+  return !0;
 };
 
-goog.html.SafeHtml.createScript = function (a, b) {
-  for (var c in b) {
-    var d = c.toLowerCase();
-    if ("language" == d || "src" == d || "text" == d || "type" == d) throw Error('Cannot set "' + d + '" attribute');
-  }
+jspb.BinaryReader.prototype.unskipHeader = function () {
+  this.decoder_.unskipVarint(this.nextField_ << 3 | this.nextWireType_);
+};
 
-  c = "";
-  a = goog.array.concat(a);
-
-  for (d = 0; d < a.length; d++) c += goog.html.SafeScript.unwrap(a[d]);
-
-  a = goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(c, goog.i18n.bidi.Dir.NEUTRAL);
-  return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("script", b, a);
-};
-
-goog.html.SafeHtml.createStyle = function (a, b) {
-  b = goog.html.SafeHtml.combineAttributes({
-    type: "text/css"
-  }, {}, b);
-  var c = "";
-  a = goog.array.concat(a);
+jspb.BinaryReader.prototype.skipMatchingFields = function () {
+  var a = this.nextField_;
 
-  for (var d = 0; d < a.length; d++) c += goog.html.SafeStyleSheet.unwrap(a[d]);
+  for (this.unskipHeader(); this.nextField() && this.getFieldNumber() == a;) this.skipField();
 
-  a = goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(c, goog.i18n.bidi.Dir.NEUTRAL);
-  return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("style", b, a);
+  this.decoder_.atEnd() || this.unskipHeader();
 };
 
-goog.html.SafeHtml.createMetaRefresh = function (a, b) {
-  a = goog.html.SafeUrl.unwrap(goog.html.SafeUrl.sanitize(a));
-  (goog.labs.userAgent.browser.isIE() || goog.labs.userAgent.browser.isEdge()) && goog.string.internal.contains(a, ";") && (a = "'" + a.replace(/'/g, "%27") + "'");
-  return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse("meta", {
-    "http-equiv": "refresh",
-    content: (b || 0) + "; url=" + a
-  });
+jspb.BinaryReader.prototype.skipVarintField = function () {
+  this.nextWireType_ != jspb.BinaryConstants.WireType.VARINT ? (goog.asserts.fail("Invalid wire type for skipVarintField"), this.skipField()) : this.decoder_.skipVarint();
 };
 
-goog.html.SafeHtml.getAttrNameAndValue_ = function (a, b, c) {
-  if (c instanceof goog.string.Const) c = goog.string.Const.unwrap(c);else if ("style" == b.toLowerCase()) c = goog.html.SafeHtml.getStyleValue_(c);else {
-    if (/^on/i.test(b)) throw Error('Attribute "' + b + '" requires goog.string.Const value, "' + c + '" given.');
-    if (b.toLowerCase() in goog.html.SafeHtml.URL_ATTRIBUTES_) if (c instanceof goog.html.TrustedResourceUrl) c = goog.html.TrustedResourceUrl.unwrap(c);else if (c instanceof goog.html.SafeUrl) c = goog.html.SafeUrl.unwrap(c);else if (goog.isString(c)) c = goog.html.SafeUrl.sanitize(c).getTypedStringValue();else throw Error('Attribute "' + b + '" on tag "' + a + '" requires goog.html.SafeUrl, goog.string.Const, or string, value "' + c + '" given.');
+jspb.BinaryReader.prototype.skipDelimitedField = function () {
+  if (this.nextWireType_ != jspb.BinaryConstants.WireType.DELIMITED) goog.asserts.fail("Invalid wire type for skipDelimitedField"), this.skipField();else {
+    var a = this.decoder_.readUnsignedVarint32();
+    this.decoder_.advance(a);
   }
-  c.implementsGoogStringTypedString && (c = c.getTypedStringValue());
-  goog.asserts.assert(goog.isString(c) || goog.isNumber(c), "String or number value expected, got " + typeof c + " with value: " + c);
-  return b + '="' + goog.string.internal.htmlEscape(String(c)) + '"';
 };
 
-goog.html.SafeHtml.getStyleValue_ = function (a) {
-  if (!goog.isObject(a)) throw Error('The "style" attribute requires goog.html.SafeStyle or map of style properties, ' + typeof a + " given: " + a);
-  a instanceof goog.html.SafeStyle || (a = goog.html.SafeStyle.create(a));
-  return goog.html.SafeStyle.unwrap(a);
+jspb.BinaryReader.prototype.skipFixed32Field = function () {
+  this.nextWireType_ != jspb.BinaryConstants.WireType.FIXED32 ? (goog.asserts.fail("Invalid wire type for skipFixed32Field"), this.skipField()) : this.decoder_.advance(4);
 };
 
-goog.html.SafeHtml.createWithDir = function (a, b, c, d) {
-  b = goog.html.SafeHtml.create(b, c, d);
-  b.dir_ = a;
-  return b;
+jspb.BinaryReader.prototype.skipFixed64Field = function () {
+  this.nextWireType_ != jspb.BinaryConstants.WireType.FIXED64 ? (goog.asserts.fail("Invalid wire type for skipFixed64Field"), this.skipField()) : this.decoder_.advance(8);
 };
 
-goog.html.SafeHtml.join = function (a, b) {
-  a = goog.html.SafeHtml.htmlEscape(a);
+jspb.BinaryReader.prototype.skipGroup = function () {
+  var a = this.nextField_;
 
-  var c = a.getDirection(),
-      d = [],
-      e = function (a) {
-    goog.isArray(a) ? goog.array.forEach(a, e) : (a = goog.html.SafeHtml.htmlEscape(a), d.push(goog.html.SafeHtml.unwrap(a)), a = a.getDirection(), c == goog.i18n.bidi.Dir.NEUTRAL ? c = a : a != goog.i18n.bidi.Dir.NEUTRAL && c != a && (c = null));
-  };
+  do {
+    if (!this.nextField()) {
+      goog.asserts.fail("Unmatched start-group tag: stream EOF");
+      this.error_ = !0;
+      break;
+    }
 
-  goog.array.forEach(b, e);
-  return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(d.join(goog.html.SafeHtml.unwrap(a)), c);
-};
+    if (this.nextWireType_ == jspb.BinaryConstants.WireType.END_GROUP) {
+      this.nextField_ != a && (goog.asserts.fail("Unmatched end-group tag"), this.error_ = !0);
+      break;
+    }
 
-goog.html.SafeHtml.concat = function (a) {
-  return goog.html.SafeHtml.join(goog.html.SafeHtml.EMPTY, Array.prototype.slice.call(arguments));
+    this.skipField();
+  } while (1);
 };
 
-goog.html.SafeHtml.concatWithDir = function (a, b) {
-  var c = goog.html.SafeHtml.concat(goog.array.slice(arguments, 1));
-  c.dir_ = a;
-  return c;
-};
+jspb.BinaryReader.prototype.skipField = function () {
+  switch (this.nextWireType_) {
+    case jspb.BinaryConstants.WireType.VARINT:
+      this.skipVarintField();
+      break;
 
-goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_ = {};
+    case jspb.BinaryConstants.WireType.FIXED64:
+      this.skipFixed64Field();
+      break;
 
-goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse = function (a, b) {
-  return new goog.html.SafeHtml().initSecurityPrivateDoNotAccessOrElse_(a, b);
-};
+    case jspb.BinaryConstants.WireType.DELIMITED:
+      this.skipDelimitedField();
+      break;
 
-goog.html.SafeHtml.prototype.initSecurityPrivateDoNotAccessOrElse_ = function (a, b) {
-  this.privateDoNotAccessOrElseSafeHtmlWrappedValue_ = goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY ? goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createHTML(a) : a;
-  this.dir_ = b;
-  return this;
+    case jspb.BinaryConstants.WireType.FIXED32:
+      this.skipFixed32Field();
+      break;
+
+    case jspb.BinaryConstants.WireType.START_GROUP:
+      this.skipGroup();
+      break;
+
+    default:
+      goog.asserts.fail("Invalid wire encoding for field.");
+  }
 };
 
-goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse = function (a, b, c) {
-  var d = null;
-  var e = "<" + a + goog.html.SafeHtml.stringifyAttributes(a, b);
-  goog.isDefAndNotNull(c) ? goog.isArray(c) || (c = [c]) : c = [];
-  goog.dom.tags.isVoidTag(a.toLowerCase()) ? (goog.asserts.assert(!c.length, "Void tag <" + a + "> does not allow content."), e += ">") : (d = goog.html.SafeHtml.concat(c), e += ">" + goog.html.SafeHtml.unwrap(d) + "</" + a + ">", d = d.getDirection());
-  (a = b && b.dir) && (d = /^(ltr|rtl|auto)$/i.test(a) ? goog.i18n.bidi.Dir.NEUTRAL : null);
-  return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(e, d);
+jspb.BinaryReader.prototype.registerReadCallback = function (a, b) {
+  null === this.readCallbacks_ && (this.readCallbacks_ = {});
+  goog.asserts.assert(!this.readCallbacks_[a]);
+  this.readCallbacks_[a] = b;
 };
 
-goog.html.SafeHtml.stringifyAttributes = function (a, b) {
-  var c = "";
-  if (b) for (var d in b) {
-    if (!goog.html.SafeHtml.VALID_NAMES_IN_TAG_.test(d)) throw Error('Invalid attribute name "' + d + '".');
-    var e = b[d];
-    goog.isDefAndNotNull(e) && (c += " " + goog.html.SafeHtml.getAttrNameAndValue_(a, d, e));
-  }
-  return c;
+jspb.BinaryReader.prototype.runReadCallback = function (a) {
+  goog.asserts.assert(null !== this.readCallbacks_);
+  a = this.readCallbacks_[a];
+  goog.asserts.assert(a);
+  return a(this);
 };
 
-goog.html.SafeHtml.combineAttributes = function (a, b, c) {
-  var d = {},
-      e;
+jspb.BinaryReader.prototype.readAny = function (a) {
+  this.nextWireType_ = jspb.BinaryConstants.FieldTypeToWireType(a);
+  var b = jspb.BinaryConstants.FieldType;
 
-  for (e in a) goog.asserts.assert(e.toLowerCase() == e, "Must be lower case"), d[e] = a[e];
+  switch (a) {
+    case b.DOUBLE:
+      return this.readDouble();
 
-  for (e in b) goog.asserts.assert(e.toLowerCase() == e, "Must be lower case"), d[e] = b[e];
+    case b.FLOAT:
+      return this.readFloat();
 
-  for (e in c) {
-    var f = e.toLowerCase();
-    if (f in a) throw Error('Cannot override "' + f + '" attribute, got "' + e + '" with value "' + c[e] + '"');
-    f in b && delete d[f];
-    d[e] = c[e];
-  }
+    case b.INT64:
+      return this.readInt64();
 
-  return d;
-};
+    case b.UINT64:
+      return this.readUint64();
 
-goog.html.SafeHtml.DOCTYPE_HTML = goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse("<!DOCTYPE html>", goog.i18n.bidi.Dir.NEUTRAL);
-goog.html.SafeHtml.EMPTY = goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse("", goog.i18n.bidi.Dir.NEUTRAL);
-goog.html.SafeHtml.BR = goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse("<br>", goog.i18n.bidi.Dir.NEUTRAL);
-goog.html.uncheckedconversions = {};
+    case b.INT32:
+      return this.readInt32();
 
-goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract = function (a, b, c) {
-  goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
-  goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
-  return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(b, c || null);
-};
+    case b.FIXED64:
+      return this.readFixed64();
 
-goog.html.uncheckedconversions.safeScriptFromStringKnownToSatisfyTypeContract = function (a, b) {
-  goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
-  goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
-  return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(b);
-};
+    case b.FIXED32:
+      return this.readFixed32();
 
-goog.html.uncheckedconversions.safeStyleFromStringKnownToSatisfyTypeContract = function (a, b) {
-  goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
-  goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
-  return goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(b);
-};
+    case b.BOOL:
+      return this.readBool();
 
-goog.html.uncheckedconversions.safeStyleSheetFromStringKnownToSatisfyTypeContract = function (a, b) {
-  goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
-  goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
-  return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(b);
-};
+    case b.STRING:
+      return this.readString();
 
-goog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract = function (a, b) {
-  goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
-  goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
-  return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(b);
-};
+    case b.GROUP:
+      goog.asserts.fail("Group field type not supported in readAny()");
 
-goog.html.uncheckedconversions.trustedResourceUrlFromStringKnownToSatisfyTypeContract = function (a, b) {
-  goog.asserts.assertString(goog.string.Const.unwrap(a), "must provide justification");
-  goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)), "must provide non-empty justification");
-  return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(b);
-};
+    case b.MESSAGE:
+      goog.asserts.fail("Message field type not supported in readAny()");
 
-goog.dom.asserts = {};
+    case b.BYTES:
+      return this.readBytes();
 
-goog.dom.asserts.assertIsLocation = function (a) {
-  if (goog.asserts.ENABLE_ASSERTS) {
-    var b = goog.dom.asserts.getWindow_(a);
-    b && (!a || !(a instanceof b.Location) && a instanceof b.Element) && goog.asserts.fail("Argument is not a Location (or a non-Element mock); got: %s", goog.dom.asserts.debugStringForType_(a));
-  }
+    case b.UINT32:
+      return this.readUint32();
 
-  return a;
-};
+    case b.ENUM:
+      return this.readEnum();
 
-goog.dom.asserts.assertIsElementType_ = function (a, b) {
-  if (goog.asserts.ENABLE_ASSERTS) {
-    var c = goog.dom.asserts.getWindow_(a);
-    c && "undefined" != typeof c[b] && (a && (a instanceof c[b] || !(a instanceof c.Location || a instanceof c.Element)) || goog.asserts.fail("Argument is not a %s (or a non-Element, non-Location mock); got: %s", b, goog.dom.asserts.debugStringForType_(a)));
+    case b.SFIXED32:
+      return this.readSfixed32();
+
+    case b.SFIXED64:
+      return this.readSfixed64();
+
+    case b.SINT32:
+      return this.readSint32();
+
+    case b.SINT64:
+      return this.readSint64();
+
+    case b.FHASH64:
+      return this.readFixedHash64();
+
+    case b.VHASH64:
+      return this.readVarintHash64();
+
+    default:
+      goog.asserts.fail("Invalid field type in readAny()");
   }
 
-  return a;
+  return 0;
 };
 
-goog.dom.asserts.assertIsHTMLAnchorElement = function (a) {
-  return goog.dom.asserts.assertIsElementType_(a, "HTMLAnchorElement");
+jspb.BinaryReader.prototype.readMessage = function (a, b) {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.DELIMITED);
+  var c = this.decoder_.getEnd(),
+      d = this.decoder_.readUnsignedVarint32();
+  d = this.decoder_.getCursor() + d;
+  this.decoder_.setEnd(d);
+  b(a, this);
+  this.decoder_.setCursor(d);
+  this.decoder_.setEnd(c);
 };
 
-goog.dom.asserts.assertIsHTMLButtonElement = function (a) {
-  return goog.dom.asserts.assertIsElementType_(a, "HTMLButtonElement");
+jspb.BinaryReader.prototype.readGroup = function (a, b, c) {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.START_GROUP);
+  goog.asserts.assert(this.nextField_ == a);
+  c(b, this);
+  this.error_ || this.nextWireType_ == jspb.BinaryConstants.WireType.END_GROUP || (goog.asserts.fail("Group submessage did not end with an END_GROUP tag"), this.error_ = !0);
 };
 
-goog.dom.asserts.assertIsHTMLLinkElement = function (a) {
-  return goog.dom.asserts.assertIsElementType_(a, "HTMLLinkElement");
+jspb.BinaryReader.prototype.getFieldDecoder = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.DELIMITED);
+  var a = this.decoder_.readUnsignedVarint32(),
+      b = this.decoder_.getCursor(),
+      c = b + a;
+  a = jspb.BinaryDecoder.alloc(this.decoder_.getBuffer(), b, a);
+  this.decoder_.setCursor(c);
+  return a;
 };
 
-goog.dom.asserts.assertIsHTMLImageElement = function (a) {
-  return goog.dom.asserts.assertIsElementType_(a, "HTMLImageElement");
+jspb.BinaryReader.prototype.readInt32 = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
+  return this.decoder_.readSignedVarint32();
 };
 
-goog.dom.asserts.assertIsHTMLAudioElement = function (a) {
-  return goog.dom.asserts.assertIsElementType_(a, "HTMLAudioElement");
+jspb.BinaryReader.prototype.readInt32String = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
+  return this.decoder_.readSignedVarint32String();
 };
 
-goog.dom.asserts.assertIsHTMLVideoElement = function (a) {
-  return goog.dom.asserts.assertIsElementType_(a, "HTMLVideoElement");
+jspb.BinaryReader.prototype.readInt64 = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
+  return this.decoder_.readSignedVarint64();
 };
 
-goog.dom.asserts.assertIsHTMLInputElement = function (a) {
-  return goog.dom.asserts.assertIsElementType_(a, "HTMLInputElement");
+jspb.BinaryReader.prototype.readInt64String = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
+  return this.decoder_.readSignedVarint64String();
 };
 
-goog.dom.asserts.assertIsHTMLTextAreaElement = function (a) {
-  return goog.dom.asserts.assertIsElementType_(a, "HTMLTextAreaElement");
+jspb.BinaryReader.prototype.readUint32 = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
+  return this.decoder_.readUnsignedVarint32();
 };
 
-goog.dom.asserts.assertIsHTMLCanvasElement = function (a) {
-  return goog.dom.asserts.assertIsElementType_(a, "HTMLCanvasElement");
+jspb.BinaryReader.prototype.readUint32String = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
+  return this.decoder_.readUnsignedVarint32String();
 };
 
-goog.dom.asserts.assertIsHTMLEmbedElement = function (a) {
-  return goog.dom.asserts.assertIsElementType_(a, "HTMLEmbedElement");
+jspb.BinaryReader.prototype.readUint64 = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
+  return this.decoder_.readUnsignedVarint64();
 };
 
-goog.dom.asserts.assertIsHTMLFormElement = function (a) {
-  return goog.dom.asserts.assertIsElementType_(a, "HTMLFormElement");
+jspb.BinaryReader.prototype.readUint64String = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
+  return this.decoder_.readUnsignedVarint64String();
 };
 
-goog.dom.asserts.assertIsHTMLFrameElement = function (a) {
-  return goog.dom.asserts.assertIsElementType_(a, "HTMLFrameElement");
+jspb.BinaryReader.prototype.readSint32 = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
+  return this.decoder_.readZigzagVarint32();
 };
 
-goog.dom.asserts.assertIsHTMLIFrameElement = function (a) {
-  return goog.dom.asserts.assertIsElementType_(a, "HTMLIFrameElement");
+jspb.BinaryReader.prototype.readSint64 = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
+  return this.decoder_.readZigzagVarint64();
 };
 
-goog.dom.asserts.assertIsHTMLObjectElement = function (a) {
-  return goog.dom.asserts.assertIsElementType_(a, "HTMLObjectElement");
+jspb.BinaryReader.prototype.readSint64String = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
+  return this.decoder_.readZigzagVarint64String();
 };
 
-goog.dom.asserts.assertIsHTMLScriptElement = function (a) {
-  return goog.dom.asserts.assertIsElementType_(a, "HTMLScriptElement");
+jspb.BinaryReader.prototype.readFixed32 = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED32);
+  return this.decoder_.readUint32();
 };
 
-goog.dom.asserts.debugStringForType_ = function (a) {
-  if (goog.isObject(a)) try {
-    return a.constructor.displayName || a.constructor.name || Object.prototype.toString.call(a);
-  } catch (b) {
-    return "<object could not be stringified>";
-  } else return void 0 === a ? "undefined" : null === a ? "null" : typeof a;
+jspb.BinaryReader.prototype.readFixed64 = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED64);
+  return this.decoder_.readUint64();
 };
 
-goog.dom.asserts.getWindow_ = function (a) {
-  try {
-    var b = a && a.ownerDocument,
-        c = b && (b.defaultView || b.parentWindow);
-    c = c || goog.global;
-    if (c.Element && c.Location) return c;
-  } catch (d) {}
-
-  return null;
+jspb.BinaryReader.prototype.readFixed64String = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED64);
+  return this.decoder_.readUint64String();
 };
 
-goog.functions = {};
+jspb.BinaryReader.prototype.readSfixed32 = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED32);
+  return this.decoder_.readInt32();
+};
 
-goog.functions.constant = function (a) {
-  return function () {
-    return a;
-  };
+jspb.BinaryReader.prototype.readSfixed32String = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED32);
+  return this.decoder_.readInt32().toString();
 };
 
-goog.functions.FALSE = function () {
-  return !1;
+jspb.BinaryReader.prototype.readSfixed64 = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED64);
+  return this.decoder_.readInt64();
 };
 
-goog.functions.TRUE = function () {
-  return !0;
+jspb.BinaryReader.prototype.readSfixed64String = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED64);
+  return this.decoder_.readInt64String();
 };
 
-goog.functions.NULL = function () {
-  return null;
+jspb.BinaryReader.prototype.readFloat = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED32);
+  return this.decoder_.readFloat();
 };
 
-goog.functions.identity = function (a, b) {
-  return a;
+jspb.BinaryReader.prototype.readDouble = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED64);
+  return this.decoder_.readDouble();
 };
 
-goog.functions.error = function (a) {
-  return function () {
-    throw Error(a);
-  };
+jspb.BinaryReader.prototype.readBool = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
+  return !!this.decoder_.readUnsignedVarint32();
 };
 
-goog.functions.fail = function (a) {
-  return function () {
-    throw a;
-  };
+jspb.BinaryReader.prototype.readEnum = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
+  return this.decoder_.readSignedVarint64();
 };
 
-goog.functions.lock = function (a, b) {
-  b = b || 0;
-  return function () {
-    return a.apply(this, Array.prototype.slice.call(arguments, 0, b));
-  };
+jspb.BinaryReader.prototype.readString = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.DELIMITED);
+  var a = this.decoder_.readUnsignedVarint32();
+  return this.decoder_.readString(a);
 };
 
-goog.functions.nth = function (a) {
-  return function () {
-    return arguments[a];
-  };
+jspb.BinaryReader.prototype.readBytes = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.DELIMITED);
+  var a = this.decoder_.readUnsignedVarint32();
+  return this.decoder_.readBytes(a);
 };
 
-goog.functions.partialRight = function (a, b) {
-  var c = Array.prototype.slice.call(arguments, 1);
-  return function () {
-    var b = Array.prototype.slice.call(arguments);
-    b.push.apply(b, c);
-    return a.apply(this, b);
-  };
+jspb.BinaryReader.prototype.readVarintHash64 = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
+  return this.decoder_.readVarintHash64();
 };
 
-goog.functions.withReturnValue = function (a, b) {
-  return goog.functions.sequence(a, goog.functions.constant(b));
+jspb.BinaryReader.prototype.readSintHash64 = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
+  return this.decoder_.readZigzagVarintHash64();
 };
 
-goog.functions.equalTo = function (a, b) {
-  return function (c) {
-    return b ? a == c : a === c;
-  };
+jspb.BinaryReader.prototype.readSplitVarint64 = function (a) {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
+  return this.decoder_.readSplitVarint64(a);
 };
 
-goog.functions.compose = function (a, b) {
-  var c = arguments,
-      d = c.length;
-  return function () {
-    var a;
-    d && (a = c[d - 1].apply(this, arguments));
+jspb.BinaryReader.prototype.readSplitZigzagVarint64 = function (a) {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
+  return this.decoder_.readSplitVarint64(function (b, c) {
+    return jspb.utils.fromZigzag64(b, c, a);
+  });
+};
 
-    for (var b = d - 2; 0 <= b; b--) a = c[b].call(this, a);
+jspb.BinaryReader.prototype.readFixedHash64 = function () {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED64);
+  return this.decoder_.readFixedHash64();
+};
 
-    return a;
-  };
+jspb.BinaryReader.prototype.readSplitFixed64 = function (a) {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED64);
+  return this.decoder_.readSplitFixed64(a);
 };
 
-goog.functions.sequence = function (a) {
-  var b = arguments,
-      c = b.length;
-  return function () {
-    for (var a, e = 0; e < c; e++) a = b[e].apply(this, arguments);
+jspb.BinaryReader.prototype.readPackedField_ = function (a) {
+  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.DELIMITED);
+  var b = this.decoder_.readUnsignedVarint32();
+  b = this.decoder_.getCursor() + b;
 
-    return a;
-  };
+  for (var c = []; this.decoder_.getCursor() < b;) c.push(a.call(this.decoder_));
+
+  return c;
 };
 
-goog.functions.and = function (a) {
-  var b = arguments,
-      c = b.length;
-  return function () {
-    for (var a = 0; a < c; a++) if (!b[a].apply(this, arguments)) return !1;
+jspb.BinaryReader.prototype.readPackedInt32 = function () {
+  return this.readPackedField_(this.decoder_.readSignedVarint32);
+};
 
-    return !0;
-  };
+jspb.BinaryReader.prototype.readPackedInt32String = function () {
+  return this.readPackedField_(this.decoder_.readSignedVarint32String);
 };
 
-goog.functions.or = function (a) {
-  var b = arguments,
-      c = b.length;
-  return function () {
-    for (var a = 0; a < c; a++) if (b[a].apply(this, arguments)) return !0;
+jspb.BinaryReader.prototype.readPackedInt64 = function () {
+  return this.readPackedField_(this.decoder_.readSignedVarint64);
+};
 
-    return !1;
-  };
+jspb.BinaryReader.prototype.readPackedInt64String = function () {
+  return this.readPackedField_(this.decoder_.readSignedVarint64String);
 };
 
-goog.functions.not = function (a) {
-  return function () {
-    return !a.apply(this, arguments);
-  };
+jspb.BinaryReader.prototype.readPackedUint32 = function () {
+  return this.readPackedField_(this.decoder_.readUnsignedVarint32);
 };
 
-goog.functions.create = function (a, b) {
-  var c = function () {};
-
-  c.prototype = a.prototype;
-  c = new c();
-  a.apply(c, Array.prototype.slice.call(arguments, 1));
-  return c;
+jspb.BinaryReader.prototype.readPackedUint32String = function () {
+  return this.readPackedField_(this.decoder_.readUnsignedVarint32String);
 };
 
-goog.functions.CACHE_RETURN_VALUE = !0;
-
-goog.functions.cacheReturnValue = function (a) {
-  var b = !1,
-      c;
-  return function () {
-    if (!goog.functions.CACHE_RETURN_VALUE) return a();
-    b || (c = a(), b = !0);
-    return c;
-  };
+jspb.BinaryReader.prototype.readPackedUint64 = function () {
+  return this.readPackedField_(this.decoder_.readUnsignedVarint64);
 };
 
-goog.functions.once = function (a) {
-  var b = a;
-  return function () {
-    if (b) {
-      var a = b;
-      b = null;
-      a();
-    }
-  };
+jspb.BinaryReader.prototype.readPackedUint64String = function () {
+  return this.readPackedField_(this.decoder_.readUnsignedVarint64String);
 };
 
-goog.functions.debounce = function (a, b, c) {
-  var d = 0;
-  return function (e) {
-    goog.global.clearTimeout(d);
-    var f = arguments;
-    d = goog.global.setTimeout(function () {
-      a.apply(c, f);
-    }, b);
-  };
+jspb.BinaryReader.prototype.readPackedSint32 = function () {
+  return this.readPackedField_(this.decoder_.readZigzagVarint32);
 };
 
-goog.functions.throttle = function (a, b, c) {
-  var d = 0,
-      e = !1,
-      f = [],
-      g = function () {
-    d = 0;
-    e && (e = !1, h());
-  },
-      h = function () {
-    d = goog.global.setTimeout(g, b);
-    a.apply(c, f);
-  };
+jspb.BinaryReader.prototype.readPackedSint64 = function () {
+  return this.readPackedField_(this.decoder_.readZigzagVarint64);
+};
 
-  return function (a) {
-    f = arguments;
-    d ? e = !0 : h();
-  };
+jspb.BinaryReader.prototype.readPackedSint64String = function () {
+  return this.readPackedField_(this.decoder_.readZigzagVarint64String);
 };
 
-goog.functions.rateLimit = function (a, b, c) {
-  var d = 0,
-      e = function () {
-    d = 0;
-  };
+jspb.BinaryReader.prototype.readPackedFixed32 = function () {
+  return this.readPackedField_(this.decoder_.readUint32);
+};
 
-  return function (f) {
-    d || (d = goog.global.setTimeout(e, b), a.apply(c, arguments));
-  };
+jspb.BinaryReader.prototype.readPackedFixed64 = function () {
+  return this.readPackedField_(this.decoder_.readUint64);
 };
 
-goog.dom.safe = {};
-goog.dom.safe.InsertAdjacentHtmlPosition = {
-  AFTERBEGIN: "afterbegin",
-  AFTEREND: "afterend",
-  BEFOREBEGIN: "beforebegin",
-  BEFOREEND: "beforeend"
+jspb.BinaryReader.prototype.readPackedFixed64String = function () {
+  return this.readPackedField_(this.decoder_.readUint64String);
 };
 
-goog.dom.safe.insertAdjacentHtml = function (a, b, c) {
-  a.insertAdjacentHTML(b, goog.html.SafeHtml.unwrapTrustedHTML(c));
+jspb.BinaryReader.prototype.readPackedSfixed32 = function () {
+  return this.readPackedField_(this.decoder_.readInt32);
 };
 
-goog.dom.safe.SET_INNER_HTML_DISALLOWED_TAGS_ = {
-  MATH: !0,
-  SCRIPT: !0,
-  STYLE: !0,
-  SVG: !0,
-  TEMPLATE: !0
+jspb.BinaryReader.prototype.readPackedSfixed64 = function () {
+  return this.readPackedField_(this.decoder_.readInt64);
 };
-goog.dom.safe.isInnerHtmlCleanupRecursive_ = goog.functions.cacheReturnValue(function () {
-  if (goog.DEBUG && "undefined" === typeof document) return !1;
-  var a = document.createElement("div"),
-      b = document.createElement("div");
-  b.appendChild(document.createElement("div"));
-  a.appendChild(b);
-  if (goog.DEBUG && !a.firstChild) return !1;
-  b = a.firstChild.firstChild;
-  a.innerHTML = goog.html.SafeHtml.unwrapTrustedHTML(goog.html.SafeHtml.EMPTY);
-  return !b.parentElement;
-});
 
-goog.dom.safe.unsafeSetInnerHtmlDoNotUseOrElse = function (a, b) {
-  if (goog.dom.safe.isInnerHtmlCleanupRecursive_()) for (; a.lastChild;) a.removeChild(a.lastChild);
-  a.innerHTML = goog.html.SafeHtml.unwrapTrustedHTML(b);
+jspb.BinaryReader.prototype.readPackedSfixed64String = function () {
+  return this.readPackedField_(this.decoder_.readInt64String);
 };
 
-goog.dom.safe.setInnerHtml = function (a, b) {
-  if (goog.asserts.ENABLE_ASSERTS) {
-    var c = a.tagName.toUpperCase();
-    if (goog.dom.safe.SET_INNER_HTML_DISALLOWED_TAGS_[c]) throw Error("goog.dom.safe.setInnerHtml cannot be used to set content of " + a.tagName + ".");
-  }
+jspb.BinaryReader.prototype.readPackedFloat = function () {
+  return this.readPackedField_(this.decoder_.readFloat);
+};
 
-  goog.dom.safe.unsafeSetInnerHtmlDoNotUseOrElse(a, b);
+jspb.BinaryReader.prototype.readPackedDouble = function () {
+  return this.readPackedField_(this.decoder_.readDouble);
 };
 
-goog.dom.safe.setOuterHtml = function (a, b) {
-  a.outerHTML = goog.html.SafeHtml.unwrapTrustedHTML(b);
+jspb.BinaryReader.prototype.readPackedBool = function () {
+  return this.readPackedField_(this.decoder_.readBool);
 };
 
-goog.dom.safe.setFormElementAction = function (a, b) {
-  b = b instanceof goog.html.SafeUrl ? b : goog.html.SafeUrl.sanitizeAssertUnchanged(b);
-  goog.dom.asserts.assertIsHTMLFormElement(a).action = goog.html.SafeUrl.unwrapTrustedURL(b);
+jspb.BinaryReader.prototype.readPackedEnum = function () {
+  return this.readPackedField_(this.decoder_.readEnum);
 };
 
-goog.dom.safe.setButtonFormAction = function (a, b) {
-  b = b instanceof goog.html.SafeUrl ? b : goog.html.SafeUrl.sanitizeAssertUnchanged(b);
-  goog.dom.asserts.assertIsHTMLButtonElement(a).formAction = goog.html.SafeUrl.unwrapTrustedURL(b);
+jspb.BinaryReader.prototype.readPackedVarintHash64 = function () {
+  return this.readPackedField_(this.decoder_.readVarintHash64);
 };
 
-goog.dom.safe.setInputFormAction = function (a, b) {
-  b = b instanceof goog.html.SafeUrl ? b : goog.html.SafeUrl.sanitizeAssertUnchanged(b);
-  goog.dom.asserts.assertIsHTMLInputElement(a).formAction = goog.html.SafeUrl.unwrapTrustedURL(b);
+jspb.BinaryReader.prototype.readPackedFixedHash64 = function () {
+  return this.readPackedField_(this.decoder_.readFixedHash64);
 };
 
-goog.dom.safe.setStyle = function (a, b) {
-  a.style.cssText = goog.html.SafeStyle.unwrap(b);
+jspb.BinaryEncoder = function () {
+  this.buffer_ = [];
 };
 
-goog.dom.safe.documentWrite = function (a, b) {
-  a.write(goog.html.SafeHtml.unwrapTrustedHTML(b));
+jspb.BinaryEncoder.prototype.length = function () {
+  return this.buffer_.length;
 };
 
-goog.dom.safe.setAnchorHref = function (a, b) {
-  goog.dom.asserts.assertIsHTMLAnchorElement(a);
-  b = b instanceof goog.html.SafeUrl ? b : goog.html.SafeUrl.sanitizeAssertUnchanged(b);
-  a.href = goog.html.SafeUrl.unwrapTrustedURL(b);
+jspb.BinaryEncoder.prototype.end = function () {
+  var a = this.buffer_;
+  this.buffer_ = [];
+  return a;
 };
 
-goog.dom.safe.setImageSrc = function (a, b) {
-  goog.dom.asserts.assertIsHTMLImageElement(a);
+jspb.BinaryEncoder.prototype.writeSplitVarint64 = function (a, b) {
+  goog.asserts.assert(a == Math.floor(a));
+  goog.asserts.assert(b == Math.floor(b));
+  goog.asserts.assert(0 <= a && a < jspb.BinaryConstants.TWO_TO_32);
 
-  if (!(b instanceof goog.html.SafeUrl)) {
-    var c = /^data:image\//i.test(b);
-    b = goog.html.SafeUrl.sanitizeAssertUnchanged(b, c);
-  }
+  for (goog.asserts.assert(0 <= b && b < jspb.BinaryConstants.TWO_TO_32); 0 < b || 127 < a;) this.buffer_.push(a & 127 | 128), a = (a >>> 7 | b << 25) >>> 0, b >>>= 7;
 
-  a.src = goog.html.SafeUrl.unwrapTrustedURL(b);
+  this.buffer_.push(a);
 };
 
-goog.dom.safe.setAudioSrc = function (a, b) {
-  goog.dom.asserts.assertIsHTMLAudioElement(a);
+jspb.BinaryEncoder.prototype.writeSplitFixed64 = function (a, b) {
+  goog.asserts.assert(a == Math.floor(a));
+  goog.asserts.assert(b == Math.floor(b));
+  goog.asserts.assert(0 <= a && a < jspb.BinaryConstants.TWO_TO_32);
+  goog.asserts.assert(0 <= b && b < jspb.BinaryConstants.TWO_TO_32);
+  this.writeUint32(a);
+  this.writeUint32(b);
+};
 
-  if (!(b instanceof goog.html.SafeUrl)) {
-    var c = /^data:audio\//i.test(b);
-    b = goog.html.SafeUrl.sanitizeAssertUnchanged(b, c);
-  }
+jspb.BinaryEncoder.prototype.writeUnsignedVarint32 = function (a) {
+  goog.asserts.assert(a == Math.floor(a));
 
-  a.src = goog.html.SafeUrl.unwrapTrustedURL(b);
+  for (goog.asserts.assert(0 <= a && a < jspb.BinaryConstants.TWO_TO_32); 127 < a;) this.buffer_.push(a & 127 | 128), a >>>= 7;
+
+  this.buffer_.push(a);
 };
 
-goog.dom.safe.setVideoSrc = function (a, b) {
-  goog.dom.asserts.assertIsHTMLVideoElement(a);
+jspb.BinaryEncoder.prototype.writeSignedVarint32 = function (a) {
+  goog.asserts.assert(a == Math.floor(a));
+  goog.asserts.assert(a >= -jspb.BinaryConstants.TWO_TO_31 && a < jspb.BinaryConstants.TWO_TO_31);
+  if (0 <= a) this.writeUnsignedVarint32(a);else {
+    for (var b = 0; 9 > b; b++) this.buffer_.push(a & 127 | 128), a >>= 7;
 
-  if (!(b instanceof goog.html.SafeUrl)) {
-    var c = /^data:video\//i.test(b);
-    b = goog.html.SafeUrl.sanitizeAssertUnchanged(b, c);
+    this.buffer_.push(1);
   }
-
-  a.src = goog.html.SafeUrl.unwrapTrustedURL(b);
 };
 
-goog.dom.safe.setEmbedSrc = function (a, b) {
-  goog.dom.asserts.assertIsHTMLEmbedElement(a);
-  a.src = goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(b);
+jspb.BinaryEncoder.prototype.writeUnsignedVarint64 = function (a) {
+  goog.asserts.assert(a == Math.floor(a));
+  goog.asserts.assert(0 <= a && a < jspb.BinaryConstants.TWO_TO_64);
+  jspb.utils.splitInt64(a);
+  this.writeSplitVarint64(jspb.utils.split64Low, jspb.utils.split64High);
 };
 
-goog.dom.safe.setFrameSrc = function (a, b) {
-  goog.dom.asserts.assertIsHTMLFrameElement(a);
-  a.src = goog.html.TrustedResourceUrl.unwrapTrustedURL(b);
+jspb.BinaryEncoder.prototype.writeSignedVarint64 = function (a) {
+  goog.asserts.assert(a == Math.floor(a));
+  goog.asserts.assert(a >= -jspb.BinaryConstants.TWO_TO_63 && a < jspb.BinaryConstants.TWO_TO_63);
+  jspb.utils.splitInt64(a);
+  this.writeSplitVarint64(jspb.utils.split64Low, jspb.utils.split64High);
 };
 
-goog.dom.safe.setIframeSrc = function (a, b) {
-  goog.dom.asserts.assertIsHTMLIFrameElement(a);
-  a.src = goog.html.TrustedResourceUrl.unwrapTrustedURL(b);
+jspb.BinaryEncoder.prototype.writeZigzagVarint32 = function (a) {
+  goog.asserts.assert(a == Math.floor(a));
+  goog.asserts.assert(a >= -jspb.BinaryConstants.TWO_TO_31 && a < jspb.BinaryConstants.TWO_TO_31);
+  this.writeUnsignedVarint32((a << 1 ^ a >> 31) >>> 0);
 };
 
-goog.dom.safe.setIframeSrcdoc = function (a, b) {
-  goog.dom.asserts.assertIsHTMLIFrameElement(a);
-  a.srcdoc = goog.html.SafeHtml.unwrapTrustedHTML(b);
+jspb.BinaryEncoder.prototype.writeZigzagVarint64 = function (a) {
+  goog.asserts.assert(a == Math.floor(a));
+  goog.asserts.assert(a >= -jspb.BinaryConstants.TWO_TO_63 && a < jspb.BinaryConstants.TWO_TO_63);
+  jspb.utils.splitZigzag64(a);
+  this.writeSplitVarint64(jspb.utils.split64Low, jspb.utils.split64High);
 };
 
-goog.dom.safe.setLinkHrefAndRel = function (a, b, c) {
-  goog.dom.asserts.assertIsHTMLLinkElement(a);
-  a.rel = c;
-  goog.string.internal.caseInsensitiveContains(c, "stylesheet") ? (goog.asserts.assert(b instanceof goog.html.TrustedResourceUrl, 'URL must be TrustedResourceUrl because "rel" contains "stylesheet"'), a.href = goog.html.TrustedResourceUrl.unwrapTrustedURL(b)) : a.href = b instanceof goog.html.TrustedResourceUrl ? goog.html.TrustedResourceUrl.unwrapTrustedURL(b) : b instanceof goog.html.SafeUrl ? goog.html.SafeUrl.unwrapTrustedURL(b) : goog.html.SafeUrl.unwrapTrustedURL(goog.html.SafeUrl.sanitizeAssertUnchanged(b));
+jspb.BinaryEncoder.prototype.writeZigzagVarint64String = function (a) {
+  this.writeZigzagVarintHash64(jspb.utils.decimalStringToHash64(a));
 };
 
-goog.dom.safe.setObjectData = function (a, b) {
-  goog.dom.asserts.assertIsHTMLObjectElement(a);
-  a.data = goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(b);
+jspb.BinaryEncoder.prototype.writeZigzagVarintHash64 = function (a) {
+  var b = this;
+  jspb.utils.splitHash64(a);
+  jspb.utils.toZigzag64(jspb.utils.split64Low, jspb.utils.split64High, function (a, d) {
+    b.writeSplitVarint64(a >>> 0, d >>> 0);
+  });
 };
 
-goog.dom.safe.setScriptSrc = function (a, b) {
-  goog.dom.asserts.assertIsHTMLScriptElement(a);
-  a.src = goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(b);
-  (b = goog.getScriptNonce()) && a.setAttribute("nonce", b);
+jspb.BinaryEncoder.prototype.writeUint8 = function (a) {
+  goog.asserts.assert(a == Math.floor(a));
+  goog.asserts.assert(0 <= a && 256 > a);
+  this.buffer_.push(a >>> 0 & 255);
 };
 
-goog.dom.safe.setScriptContent = function (a, b) {
-  goog.dom.asserts.assertIsHTMLScriptElement(a);
-  a.text = goog.html.SafeScript.unwrapTrustedScript(b);
-  (b = goog.getScriptNonce()) && a.setAttribute("nonce", b);
+jspb.BinaryEncoder.prototype.writeUint16 = function (a) {
+  goog.asserts.assert(a == Math.floor(a));
+  goog.asserts.assert(0 <= a && 65536 > a);
+  this.buffer_.push(a >>> 0 & 255);
+  this.buffer_.push(a >>> 8 & 255);
 };
 
-goog.dom.safe.setLocationHref = function (a, b) {
-  goog.dom.asserts.assertIsLocation(a);
-  b = b instanceof goog.html.SafeUrl ? b : goog.html.SafeUrl.sanitizeAssertUnchanged(b);
-  a.href = goog.html.SafeUrl.unwrapTrustedURL(b);
+jspb.BinaryEncoder.prototype.writeUint32 = function (a) {
+  goog.asserts.assert(a == Math.floor(a));
+  goog.asserts.assert(0 <= a && a < jspb.BinaryConstants.TWO_TO_32);
+  this.buffer_.push(a >>> 0 & 255);
+  this.buffer_.push(a >>> 8 & 255);
+  this.buffer_.push(a >>> 16 & 255);
+  this.buffer_.push(a >>> 24 & 255);
 };
 
-goog.dom.safe.assignLocation = function (a, b) {
-  goog.dom.asserts.assertIsLocation(a);
-  b = b instanceof goog.html.SafeUrl ? b : goog.html.SafeUrl.sanitizeAssertUnchanged(b);
-  a.assign(goog.html.SafeUrl.unwrapTrustedURL(b));
+jspb.BinaryEncoder.prototype.writeUint64 = function (a) {
+  goog.asserts.assert(a == Math.floor(a));
+  goog.asserts.assert(0 <= a && a < jspb.BinaryConstants.TWO_TO_64);
+  jspb.utils.splitUint64(a);
+  this.writeUint32(jspb.utils.split64Low);
+  this.writeUint32(jspb.utils.split64High);
 };
 
-goog.dom.safe.replaceLocation = function (a, b) {
-  goog.dom.asserts.assertIsLocation(a);
-  b = b instanceof goog.html.SafeUrl ? b : goog.html.SafeUrl.sanitizeAssertUnchanged(b);
-  a.replace(goog.html.SafeUrl.unwrapTrustedURL(b));
+jspb.BinaryEncoder.prototype.writeInt8 = function (a) {
+  goog.asserts.assert(a == Math.floor(a));
+  goog.asserts.assert(-128 <= a && 128 > a);
+  this.buffer_.push(a >>> 0 & 255);
 };
 
-goog.dom.safe.openInWindow = function (a, b, c, d, e) {
-  a = a instanceof goog.html.SafeUrl ? a : goog.html.SafeUrl.sanitizeAssertUnchanged(a);
-  return (b || goog.global).open(goog.html.SafeUrl.unwrapTrustedURL(a), c ? goog.string.Const.unwrap(c) : "", d, e);
+jspb.BinaryEncoder.prototype.writeInt16 = function (a) {
+  goog.asserts.assert(a == Math.floor(a));
+  goog.asserts.assert(-32768 <= a && 32768 > a);
+  this.buffer_.push(a >>> 0 & 255);
+  this.buffer_.push(a >>> 8 & 255);
 };
 
-goog.dom.safe.parseFromStringHtml = function (a, b) {
-  return goog.dom.safe.parseFromString(a, b, "text/html");
+jspb.BinaryEncoder.prototype.writeInt32 = function (a) {
+  goog.asserts.assert(a == Math.floor(a));
+  goog.asserts.assert(a >= -jspb.BinaryConstants.TWO_TO_31 && a < jspb.BinaryConstants.TWO_TO_31);
+  this.buffer_.push(a >>> 0 & 255);
+  this.buffer_.push(a >>> 8 & 255);
+  this.buffer_.push(a >>> 16 & 255);
+  this.buffer_.push(a >>> 24 & 255);
 };
 
-goog.dom.safe.parseFromString = function (a, b, c) {
-  return a.parseFromString(goog.html.SafeHtml.unwrapTrustedHTML(b), c);
+jspb.BinaryEncoder.prototype.writeInt64 = function (a) {
+  goog.asserts.assert(a == Math.floor(a));
+  goog.asserts.assert(a >= -jspb.BinaryConstants.TWO_TO_63 && a < jspb.BinaryConstants.TWO_TO_63);
+  jspb.utils.splitInt64(a);
+  this.writeSplitFixed64(jspb.utils.split64Low, jspb.utils.split64High);
 };
 
-goog.dom.safe.createImageFromBlob = function (a) {
-  if (!/^image\/.*/g.test(a.type)) throw Error("goog.dom.safe.createImageFromBlob only accepts MIME type image/.*.");
-  var b = goog.global.URL.createObjectURL(a);
-  a = new goog.global.Image();
-
-  a.onload = function () {
-    goog.global.URL.revokeObjectURL(b);
-  };
+jspb.BinaryEncoder.prototype.writeInt64String = function (a) {
+  goog.asserts.assert(a == Math.floor(a));
+  goog.asserts.assert(+a >= -jspb.BinaryConstants.TWO_TO_63 && +a < jspb.BinaryConstants.TWO_TO_63);
+  jspb.utils.splitHash64(jspb.utils.decimalStringToHash64(a));
+  this.writeSplitFixed64(jspb.utils.split64Low, jspb.utils.split64High);
+};
 
-  goog.dom.safe.setImageSrc(a, goog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract(goog.string.Const.from("Image blob URL."), b));
-  return a;
+jspb.BinaryEncoder.prototype.writeFloat = function (a) {
+  goog.asserts.assert(Infinity === a || -Infinity === a || isNaN(a) || a >= -jspb.BinaryConstants.FLOAT32_MAX && a <= jspb.BinaryConstants.FLOAT32_MAX);
+  jspb.utils.splitFloat32(a);
+  this.writeUint32(jspb.utils.split64Low);
 };
 
-goog.string.DETECT_DOUBLE_ESCAPING = !1;
-goog.string.FORCE_NON_DOM_HTML_UNESCAPING = !1;
-goog.string.Unicode = {
-  NBSP: "\u00a0"
+jspb.BinaryEncoder.prototype.writeDouble = function (a) {
+  goog.asserts.assert(Infinity === a || -Infinity === a || isNaN(a) || a >= -jspb.BinaryConstants.FLOAT64_MAX && a <= jspb.BinaryConstants.FLOAT64_MAX);
+  jspb.utils.splitFloat64(a);
+  this.writeUint32(jspb.utils.split64Low);
+  this.writeUint32(jspb.utils.split64High);
 };
-goog.string.startsWith = goog.string.internal.startsWith;
-goog.string.endsWith = goog.string.internal.endsWith;
-goog.string.caseInsensitiveStartsWith = goog.string.internal.caseInsensitiveStartsWith;
-goog.string.caseInsensitiveEndsWith = goog.string.internal.caseInsensitiveEndsWith;
-goog.string.caseInsensitiveEquals = goog.string.internal.caseInsensitiveEquals;
 
-goog.string.subs = function (a, b) {
-  for (var c = a.split("%s"), d = "", e = Array.prototype.slice.call(arguments, 1); e.length && 1 < c.length;) d += c.shift() + e.shift();
+jspb.BinaryEncoder.prototype.writeBool = function (a) {
+  goog.asserts.assert("boolean" === typeof a || "number" === typeof a);
+  this.buffer_.push(a ? 1 : 0);
+};
 
-  return d + c.join("%s");
+jspb.BinaryEncoder.prototype.writeEnum = function (a) {
+  goog.asserts.assert(a == Math.floor(a));
+  goog.asserts.assert(a >= -jspb.BinaryConstants.TWO_TO_31 && a < jspb.BinaryConstants.TWO_TO_31);
+  this.writeSignedVarint32(a);
 };
 
-goog.string.collapseWhitespace = function (a) {
-  return a.replace(/[\s\xa0]+/g, " ").replace(/^\s+|\s+$/g, "");
+jspb.BinaryEncoder.prototype.writeBytes = function (a) {
+  this.buffer_.push.apply(this.buffer_, a);
 };
 
-goog.string.isEmptyOrWhitespace = goog.string.internal.isEmptyOrWhitespace;
+jspb.BinaryEncoder.prototype.writeVarintHash64 = function (a) {
+  jspb.utils.splitHash64(a);
+  this.writeSplitVarint64(jspb.utils.split64Low, jspb.utils.split64High);
+};
 
-goog.string.isEmptyString = function (a) {
-  return 0 == a.length;
+jspb.BinaryEncoder.prototype.writeFixedHash64 = function (a) {
+  jspb.utils.splitHash64(a);
+  this.writeUint32(jspb.utils.split64Low);
+  this.writeUint32(jspb.utils.split64High);
 };
 
-goog.string.isEmpty = goog.string.isEmptyOrWhitespace;
+jspb.BinaryEncoder.prototype.writeString = function (a) {
+  for (var b = this.buffer_.length, c = 0; c < a.length; c++) {
+    var d = a.charCodeAt(c);
+    if (128 > d) this.buffer_.push(d);else if (2048 > d) this.buffer_.push(d >> 6 | 192), this.buffer_.push(d & 63 | 128);else if (65536 > d) if (55296 <= d && 56319 >= d && c + 1 < a.length) {
+      var e = a.charCodeAt(c + 1);
+      56320 <= e && 57343 >= e && (d = 1024 * (d - 55296) + e - 56320 + 65536, this.buffer_.push(d >> 18 | 240), this.buffer_.push(d >> 12 & 63 | 128), this.buffer_.push(d >> 6 & 63 | 128), this.buffer_.push(d & 63 | 128), c++);
+    } else this.buffer_.push(d >> 12 | 224), this.buffer_.push(d >> 6 & 63 | 128), this.buffer_.push(d & 63 | 128);
+  }
 
-goog.string.isEmptyOrWhitespaceSafe = function (a) {
-  return goog.string.isEmptyOrWhitespace(goog.string.makeSafe(a));
+  return this.buffer_.length - b;
 };
 
-goog.string.isEmptySafe = goog.string.isEmptyOrWhitespaceSafe;
+jspb.arith = {};
 
-goog.string.isBreakingWhitespace = function (a) {
-  return !/[^\t\n\r ]/.test(a);
+jspb.arith.UInt64 = function (a, b) {
+  this.lo = a;
+  this.hi = b;
 };
 
-goog.string.isAlpha = function (a) {
-  return !/[^a-zA-Z]/.test(a);
+jspb.arith.UInt64.prototype.cmp = function (a) {
+  return this.hi < a.hi || this.hi == a.hi && this.lo < a.lo ? -1 : this.hi == a.hi && this.lo == a.lo ? 0 : 1;
 };
 
-goog.string.isNumeric = function (a) {
-  return !/[^0-9]/.test(a);
+jspb.arith.UInt64.prototype.rightShift = function () {
+  return new jspb.arith.UInt64((this.lo >>> 1 | (this.hi & 1) << 31) >>> 0, this.hi >>> 1 >>> 0);
 };
 
-goog.string.isAlphaNumeric = function (a) {
-  return !/[^a-zA-Z0-9]/.test(a);
+jspb.arith.UInt64.prototype.leftShift = function () {
+  return new jspb.arith.UInt64(this.lo << 1 >>> 0, (this.hi << 1 | this.lo >>> 31) >>> 0);
 };
 
-goog.string.isSpace = function (a) {
-  return " " == a;
+jspb.arith.UInt64.prototype.msb = function () {
+  return !!(this.hi & 2147483648);
 };
 
-goog.string.isUnicodeChar = function (a) {
-  return 1 == a.length && " " <= a && "~" >= a || "\u0080" <= a && "\ufffd" >= a;
+jspb.arith.UInt64.prototype.lsb = function () {
+  return !!(this.lo & 1);
 };
 
-goog.string.stripNewlines = function (a) {
-  return a.replace(/(\r\n|\r|\n)+/g, " ");
+jspb.arith.UInt64.prototype.zero = function () {
+  return 0 == this.lo && 0 == this.hi;
 };
 
-goog.string.canonicalizeNewlines = function (a) {
-  return a.replace(/(\r\n|\r|\n)/g, "\n");
+jspb.arith.UInt64.prototype.add = function (a) {
+  return new jspb.arith.UInt64((this.lo + a.lo & 4294967295) >>> 0 >>> 0, ((this.hi + a.hi & 4294967295) >>> 0) + (4294967296 <= this.lo + a.lo ? 1 : 0) >>> 0);
 };
 
-goog.string.normalizeWhitespace = function (a) {
-  return a.replace(/\xa0|\s/g, " ");
+jspb.arith.UInt64.prototype.sub = function (a) {
+  return new jspb.arith.UInt64((this.lo - a.lo & 4294967295) >>> 0 >>> 0, ((this.hi - a.hi & 4294967295) >>> 0) - (0 > this.lo - a.lo ? 1 : 0) >>> 0);
 };
 
-goog.string.normalizeSpaces = function (a) {
-  return a.replace(/\xa0|[ \t]+/g, " ");
+jspb.arith.UInt64.mul32x32 = function (a, b) {
+  var c = a & 65535;
+  a >>>= 16;
+  var d = b & 65535,
+      e = b >>> 16;
+  b = c * d + 65536 * (c * e & 65535) + 65536 * (a * d & 65535);
+
+  for (c = a * e + (c * e >>> 16) + (a * d >>> 16); 4294967296 <= b;) b -= 4294967296, c += 1;
+
+  return new jspb.arith.UInt64(b >>> 0, c >>> 0);
 };
 
-goog.string.collapseBreakingSpaces = function (a) {
-  return a.replace(/[\t\r\n ]+/g, " ").replace(/^[\t\r\n ]+|[\t\r\n ]+$/g, "");
+jspb.arith.UInt64.prototype.mul = function (a) {
+  var b = jspb.arith.UInt64.mul32x32(this.lo, a);
+  a = jspb.arith.UInt64.mul32x32(this.hi, a);
+  a.hi = a.lo;
+  a.lo = 0;
+  return b.add(a);
 };
 
-goog.string.trim = goog.string.internal.trim;
+jspb.arith.UInt64.prototype.div = function (a) {
+  if (0 == a) return [];
+  var b = new jspb.arith.UInt64(0, 0),
+      c = new jspb.arith.UInt64(this.lo, this.hi);
+  a = new jspb.arith.UInt64(a, 0);
 
-goog.string.trimLeft = function (a) {
-  return a.replace(/^[\s\xa0]+/, "");
-};
+  for (var d = new jspb.arith.UInt64(1, 0); !a.msb();) a = a.leftShift(), d = d.leftShift();
 
-goog.string.trimRight = function (a) {
-  return a.replace(/[\s\xa0]+$/, "");
+  for (; !d.zero();) 0 >= a.cmp(c) && (b = b.add(d), c = c.sub(a)), a = a.rightShift(), d = d.rightShift();
+
+  return [b, c];
 };
 
-goog.string.caseInsensitiveCompare = goog.string.internal.caseInsensitiveCompare;
+jspb.arith.UInt64.prototype.toString = function () {
+  for (var a = "", b = this; !b.zero();) {
+    b = b.div(10);
+    var c = b[0];
+    a = b[1].lo + a;
+    b = c;
+  }
 
-goog.string.numberAwareCompare_ = function (a, b, c) {
-  if (a == b) return 0;
-  if (!a) return -1;
-  if (!b) return 1;
+  "" == a && (a = "0");
+  return a;
+};
 
-  for (var d = a.toLowerCase().match(c), e = b.toLowerCase().match(c), f = Math.min(d.length, e.length), g = 0; g < f; g++) {
-    c = d[g];
-    var h = e[g];
-    if (c != h) return a = parseInt(c, 10), !isNaN(a) && (b = parseInt(h, 10), !isNaN(b) && a - b) ? a - b : c < h ? -1 : 1;
+jspb.arith.UInt64.fromString = function (a) {
+  for (var b = new jspb.arith.UInt64(0, 0), c = new jspb.arith.UInt64(0, 0), d = 0; d < a.length; d++) {
+    if ("0" > a[d] || "9" < a[d]) return null;
+    var e = parseInt(a[d], 10);
+    c.lo = e;
+    b = b.mul(10).add(c);
   }
 
-  return d.length != e.length ? d.length - e.length : a < b ? -1 : 1;
+  return b;
 };
 
-goog.string.intAwareCompare = function (a, b) {
-  return goog.string.numberAwareCompare_(a, b, /\d+|\D+/g);
+jspb.arith.UInt64.prototype.clone = function () {
+  return new jspb.arith.UInt64(this.lo, this.hi);
 };
 
-goog.string.floatAwareCompare = function (a, b) {
-  return goog.string.numberAwareCompare_(a, b, /\d+|\.\d+|\D+/g);
+jspb.arith.Int64 = function (a, b) {
+  this.lo = a;
+  this.hi = b;
 };
 
-goog.string.numerateCompare = goog.string.floatAwareCompare;
+jspb.arith.Int64.prototype.add = function (a) {
+  return new jspb.arith.Int64((this.lo + a.lo & 4294967295) >>> 0 >>> 0, ((this.hi + a.hi & 4294967295) >>> 0) + (4294967296 <= this.lo + a.lo ? 1 : 0) >>> 0);
+};
 
-goog.string.urlEncode = function (a) {
-  return encodeURIComponent(String(a));
+jspb.arith.Int64.prototype.sub = function (a) {
+  return new jspb.arith.Int64((this.lo - a.lo & 4294967295) >>> 0 >>> 0, ((this.hi - a.hi & 4294967295) >>> 0) - (0 > this.lo - a.lo ? 1 : 0) >>> 0);
 };
 
-goog.string.urlDecode = function (a) {
-  return decodeURIComponent(a.replace(/\+/g, " "));
+jspb.arith.Int64.prototype.clone = function () {
+  return new jspb.arith.Int64(this.lo, this.hi);
 };
 
-goog.string.newLineToBr = goog.string.internal.newLineToBr;
-
-goog.string.htmlEscape = function (a, b) {
-  a = goog.string.internal.htmlEscape(a, b);
-  goog.string.DETECT_DOUBLE_ESCAPING && (a = a.replace(goog.string.E_RE_, "&#101;"));
-  return a;
+jspb.arith.Int64.prototype.toString = function () {
+  var a = 0 != (this.hi & 2147483648),
+      b = new jspb.arith.UInt64(this.lo, this.hi);
+  a && (b = new jspb.arith.UInt64(0, 0).sub(b));
+  return (a ? "-" : "") + b.toString();
 };
 
-goog.string.E_RE_ = /e/g;
-
-goog.string.unescapeEntities = function (a) {
-  return goog.string.contains(a, "&") ? !goog.string.FORCE_NON_DOM_HTML_UNESCAPING && "document" in goog.global ? goog.string.unescapeEntitiesUsingDom_(a) : goog.string.unescapePureXmlEntities_(a) : a;
+jspb.arith.Int64.fromString = function (a) {
+  var b = 0 < a.length && "-" == a[0];
+  b && (a = a.substring(1));
+  a = jspb.arith.UInt64.fromString(a);
+  if (null === a) return null;
+  b && (a = new jspb.arith.UInt64(0, 0).sub(a));
+  return new jspb.arith.Int64(a.lo, a.hi);
 };
 
-goog.string.unescapeEntitiesWithDocument = function (a, b) {
-  return goog.string.contains(a, "&") ? goog.string.unescapeEntitiesUsingDom_(a, b) : a;
+jspb.BinaryWriter = function () {
+  this.blocks_ = [];
+  this.totalLength_ = 0;
+  this.encoder_ = new jspb.BinaryEncoder();
+  this.bookmarks_ = [];
 };
 
-goog.string.unescapeEntitiesUsingDom_ = function (a, b) {
-  var c = {
-    "&amp;": "&",
-    "&lt;": "<",
-    "&gt;": ">",
-    "&quot;": '"'
-  };
-  var d = b ? b.createElement("div") : goog.global.document.createElement("div");
-  return a.replace(goog.string.HTML_ENTITY_PATTERN_, function (a, b) {
-    var e = c[a];
-    if (e) return e;
-    "#" == b.charAt(0) && (b = Number("0" + b.substr(1)), isNaN(b) || (e = String.fromCharCode(b)));
-    e || (goog.dom.safe.setInnerHtml(d, goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract(goog.string.Const.from("Single HTML entity."), a + " ")), e = d.firstChild.nodeValue.slice(0, -1));
-    return c[a] = e;
-  });
+jspb.BinaryWriter.prototype.appendUint8Array_ = function (a) {
+  var b = this.encoder_.end();
+  this.blocks_.push(b);
+  this.blocks_.push(a);
+  this.totalLength_ += b.length + a.length;
 };
 
-goog.string.unescapePureXmlEntities_ = function (a) {
-  return a.replace(/&([^;]+);/g, function (a, c) {
-    switch (c) {
-      case "amp":
-        return "&";
-
-      case "lt":
-        return "<";
+jspb.BinaryWriter.prototype.beginDelimited_ = function (a) {
+  this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED);
+  a = this.encoder_.end();
+  this.blocks_.push(a);
+  this.totalLength_ += a.length;
+  a.push(this.totalLength_);
+  return a;
+};
 
-      case "gt":
-        return ">";
+jspb.BinaryWriter.prototype.endDelimited_ = function (a) {
+  var b = a.pop();
+  b = this.totalLength_ + this.encoder_.length() - b;
 
-      case "quot":
-        return '"';
+  for (goog.asserts.assert(0 <= b); 127 < b;) a.push(b & 127 | 128), b >>>= 7, this.totalLength_++;
 
-      default:
-        return "#" != c.charAt(0) || (c = Number("0" + c.substr(1)), isNaN(c)) ? a : String.fromCharCode(c);
-    }
-  });
+  a.push(b);
+  this.totalLength_++;
 };
 
-goog.string.HTML_ENTITY_PATTERN_ = /&([^;\s<&]+);?/g;
+jspb.BinaryWriter.prototype.writeSerializedMessage = function (a, b, c) {
+  this.appendUint8Array_(a.subarray(b, c));
+};
 
-goog.string.whitespaceEscape = function (a, b) {
-  return goog.string.newLineToBr(a.replace(/  /g, " &#160;"), b);
+jspb.BinaryWriter.prototype.maybeWriteSerializedMessage = function (a, b, c) {
+  null != a && null != b && null != c && this.writeSerializedMessage(a, b, c);
 };
 
-goog.string.preserveSpaces = function (a) {
-  return a.replace(/(^|[\n ]) /g, "$1" + goog.string.Unicode.NBSP);
+jspb.BinaryWriter.prototype.reset = function () {
+  this.blocks_ = [];
+  this.encoder_.end();
+  this.totalLength_ = 0;
+  this.bookmarks_ = [];
 };
 
-goog.string.stripQuotes = function (a, b) {
-  for (var c = b.length, d = 0; d < c; d++) {
-    var e = 1 == c ? b : b.charAt(d);
-    if (a.charAt(0) == e && a.charAt(a.length - 1) == e) return a.substring(1, a.length - 1);
+jspb.BinaryWriter.prototype.getResultBuffer = function () {
+  goog.asserts.assert(0 == this.bookmarks_.length);
+
+  for (var a = new Uint8Array(this.totalLength_ + this.encoder_.length()), b = this.blocks_, c = b.length, d = 0, e = 0; e < c; e++) {
+    var f = b[e];
+    a.set(f, d);
+    d += f.length;
   }
 
+  b = this.encoder_.end();
+  a.set(b, d);
+  d += b.length;
+  goog.asserts.assert(d == a.length);
+  this.blocks_ = [a];
   return a;
 };
 
-goog.string.truncate = function (a, b, c) {
-  c && (a = goog.string.unescapeEntities(a));
-  a.length > b && (a = a.substring(0, b - 3) + "...");
-  c && (a = goog.string.htmlEscape(a));
-  return a;
+jspb.BinaryWriter.prototype.getResultBase64String = function (a) {
+  return goog.crypt.base64.encodeByteArray(this.getResultBuffer(), a);
 };
 
-goog.string.truncateMiddle = function (a, b, c, d) {
-  c && (a = goog.string.unescapeEntities(a));
-
-  if (d && a.length > b) {
-    d > b && (d = b);
-    var e = a.length - d;
-    a = a.substring(0, b - d) + "..." + a.substring(e);
-  } else a.length > b && (d = Math.floor(b / 2), e = a.length - d, a = a.substring(0, d + b % 2) + "..." + a.substring(e));
-
-  c && (a = goog.string.htmlEscape(a));
-  return a;
+jspb.BinaryWriter.prototype.beginSubMessage = function (a) {
+  this.bookmarks_.push(this.beginDelimited_(a));
 };
 
-goog.string.specialEscapeChars_ = {
-  "\x00": "\\0",
-  "\b": "\\b",
-  "\f": "\\f",
-  "\n": "\\n",
-  "\r": "\\r",
-  "\t": "\\t",
-  "\x0B": "\\x0B",
-  '"': '\\"',
-  "\\": "\\\\",
-  "<": "\\u003C"
+jspb.BinaryWriter.prototype.endSubMessage = function () {
+  goog.asserts.assert(0 <= this.bookmarks_.length);
+  this.endDelimited_(this.bookmarks_.pop());
 };
-goog.string.jsEscapeCache_ = {
-  "'": "\\'"
+
+jspb.BinaryWriter.prototype.writeFieldHeader_ = function (a, b) {
+  goog.asserts.assert(1 <= a && a == Math.floor(a));
+  this.encoder_.writeUnsignedVarint32(8 * a + b);
 };
 
-goog.string.quote = function (a) {
-  a = String(a);
+jspb.BinaryWriter.prototype.writeAny = function (a, b, c) {
+  var d = jspb.BinaryConstants.FieldType;
 
-  for (var b = ['"'], c = 0; c < a.length; c++) {
-    var d = a.charAt(c),
-        e = d.charCodeAt(0);
-    b[c + 1] = goog.string.specialEscapeChars_[d] || (31 < e && 127 > e ? d : goog.string.escapeChar(d));
-  }
+  switch (a) {
+    case d.DOUBLE:
+      this.writeDouble(b, c);
+      break;
 
-  b.push('"');
-  return b.join("");
-};
+    case d.FLOAT:
+      this.writeFloat(b, c);
+      break;
 
-goog.string.escapeString = function (a) {
-  for (var b = [], c = 0; c < a.length; c++) b[c] = goog.string.escapeChar(a.charAt(c));
+    case d.INT64:
+      this.writeInt64(b, c);
+      break;
 
-  return b.join("");
-};
+    case d.UINT64:
+      this.writeUint64(b, c);
+      break;
 
-goog.string.escapeChar = function (a) {
-  if (a in goog.string.jsEscapeCache_) return goog.string.jsEscapeCache_[a];
-  if (a in goog.string.specialEscapeChars_) return goog.string.jsEscapeCache_[a] = goog.string.specialEscapeChars_[a];
-  var b = a.charCodeAt(0);
-  if (31 < b && 127 > b) var c = a;else {
-    if (256 > b) {
-      if (c = "\\x", 16 > b || 256 < b) c += "0";
-    } else c = "\\u", 4096 > b && (c += "0");
+    case d.INT32:
+      this.writeInt32(b, c);
+      break;
 
-    c += b.toString(16).toUpperCase();
+    case d.FIXED64:
+      this.writeFixed64(b, c);
+      break;
+
+    case d.FIXED32:
+      this.writeFixed32(b, c);
+      break;
+
+    case d.BOOL:
+      this.writeBool(b, c);
+      break;
+
+    case d.STRING:
+      this.writeString(b, c);
+      break;
+
+    case d.GROUP:
+      goog.asserts.fail("Group field type not supported in writeAny()");
+      break;
+
+    case d.MESSAGE:
+      goog.asserts.fail("Message field type not supported in writeAny()");
+      break;
+
+    case d.BYTES:
+      this.writeBytes(b, c);
+      break;
+
+    case d.UINT32:
+      this.writeUint32(b, c);
+      break;
+
+    case d.ENUM:
+      this.writeEnum(b, c);
+      break;
+
+    case d.SFIXED32:
+      this.writeSfixed32(b, c);
+      break;
+
+    case d.SFIXED64:
+      this.writeSfixed64(b, c);
+      break;
+
+    case d.SINT32:
+      this.writeSint32(b, c);
+      break;
+
+    case d.SINT64:
+      this.writeSint64(b, c);
+      break;
+
+    case d.FHASH64:
+      this.writeFixedHash64(b, c);
+      break;
+
+    case d.VHASH64:
+      this.writeVarintHash64(b, c);
+      break;
+
+    default:
+      goog.asserts.fail("Invalid field type in writeAny()");
   }
-  return goog.string.jsEscapeCache_[a] = c;
 };
 
-goog.string.contains = goog.string.internal.contains;
-goog.string.caseInsensitiveContains = goog.string.internal.caseInsensitiveContains;
+jspb.BinaryWriter.prototype.writeUnsignedVarint32_ = function (a, b) {
+  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeUnsignedVarint32(b));
+};
 
-goog.string.countOf = function (a, b) {
-  return a && b ? a.split(b).length - 1 : 0;
+jspb.BinaryWriter.prototype.writeSignedVarint32_ = function (a, b) {
+  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeSignedVarint32(b));
 };
 
-goog.string.removeAt = function (a, b, c) {
-  var d = a;
-  0 <= b && b < a.length && 0 < c && (d = a.substr(0, b) + a.substr(b + c, a.length - b - c));
-  return d;
+jspb.BinaryWriter.prototype.writeUnsignedVarint64_ = function (a, b) {
+  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeUnsignedVarint64(b));
 };
 
-goog.string.remove = function (a, b) {
-  return a.replace(b, "");
+jspb.BinaryWriter.prototype.writeSignedVarint64_ = function (a, b) {
+  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeSignedVarint64(b));
 };
 
-goog.string.removeAll = function (a, b) {
-  b = new RegExp(goog.string.regExpEscape(b), "g");
-  return a.replace(b, "");
+jspb.BinaryWriter.prototype.writeZigzagVarint32_ = function (a, b) {
+  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeZigzagVarint32(b));
 };
 
-goog.string.replaceAll = function (a, b, c) {
-  b = new RegExp(goog.string.regExpEscape(b), "g");
-  return a.replace(b, c.replace(/\$/g, "$$$$"));
+jspb.BinaryWriter.prototype.writeZigzagVarint64_ = function (a, b) {
+  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeZigzagVarint64(b));
 };
 
-goog.string.regExpEscape = function (a) {
-  return String(a).replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, "\\$1").replace(/\x08/g, "\\x08");
+jspb.BinaryWriter.prototype.writeZigzagVarint64String_ = function (a, b) {
+  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeZigzagVarint64String(b));
 };
 
-goog.string.repeat = String.prototype.repeat ? function (a, b) {
-  return a.repeat(b);
-} : function (a, b) {
-  return Array(b + 1).join(a);
+jspb.BinaryWriter.prototype.writeZigzagVarintHash64_ = function (a, b) {
+  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeZigzagVarintHash64(b));
 };
 
-goog.string.padNumber = function (a, b, c) {
-  a = goog.isDef(c) ? a.toFixed(c) : String(a);
-  c = a.indexOf(".");
-  -1 == c && (c = a.length);
-  return goog.string.repeat("0", Math.max(0, b - c)) + a;
+jspb.BinaryWriter.prototype.writeInt32 = function (a, b) {
+  null != b && (goog.asserts.assert(b >= -jspb.BinaryConstants.TWO_TO_31 && b < jspb.BinaryConstants.TWO_TO_31), this.writeSignedVarint32_(a, b));
 };
 
-goog.string.makeSafe = function (a) {
-  return null == a ? "" : String(a);
+jspb.BinaryWriter.prototype.writeInt32String = function (a, b) {
+  null != b && (b = parseInt(b, 10), goog.asserts.assert(b >= -jspb.BinaryConstants.TWO_TO_31 && b < jspb.BinaryConstants.TWO_TO_31), this.writeSignedVarint32_(a, b));
 };
 
-goog.string.buildString = function (a) {
-  return Array.prototype.join.call(arguments, "");
+jspb.BinaryWriter.prototype.writeInt64 = function (a, b) {
+  null != b && (goog.asserts.assert(b >= -jspb.BinaryConstants.TWO_TO_63 && b < jspb.BinaryConstants.TWO_TO_63), this.writeSignedVarint64_(a, b));
 };
 
-goog.string.getRandomString = function () {
-  return Math.floor(2147483648 * Math.random()).toString(36) + Math.abs(Math.floor(2147483648 * Math.random()) ^ goog.now()).toString(36);
+jspb.BinaryWriter.prototype.writeInt64String = function (a, b) {
+  null != b && (b = jspb.arith.Int64.fromString(b), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeSplitVarint64(b.lo, b.hi));
 };
 
-goog.string.compareVersions = goog.string.internal.compareVersions;
+jspb.BinaryWriter.prototype.writeUint32 = function (a, b) {
+  null != b && (goog.asserts.assert(0 <= b && b < jspb.BinaryConstants.TWO_TO_32), this.writeUnsignedVarint32_(a, b));
+};
 
-goog.string.hashCode = function (a) {
-  for (var b = 0, c = 0; c < a.length; ++c) b = 31 * b + a.charCodeAt(c) >>> 0;
+jspb.BinaryWriter.prototype.writeUint32String = function (a, b) {
+  null != b && (b = parseInt(b, 10), goog.asserts.assert(0 <= b && b < jspb.BinaryConstants.TWO_TO_32), this.writeUnsignedVarint32_(a, b));
+};
 
-  return b;
+jspb.BinaryWriter.prototype.writeUint64 = function (a, b) {
+  null != b && (goog.asserts.assert(0 <= b && b < jspb.BinaryConstants.TWO_TO_64), this.writeUnsignedVarint64_(a, b));
 };
 
-goog.string.uniqueStringCounter_ = 2147483648 * Math.random() | 0;
+jspb.BinaryWriter.prototype.writeUint64String = function (a, b) {
+  null != b && (b = jspb.arith.UInt64.fromString(b), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeSplitVarint64(b.lo, b.hi));
+};
 
-goog.string.createUniqueString = function () {
-  return "goog_" + goog.string.uniqueStringCounter_++;
+jspb.BinaryWriter.prototype.writeSint32 = function (a, b) {
+  null != b && (goog.asserts.assert(b >= -jspb.BinaryConstants.TWO_TO_31 && b < jspb.BinaryConstants.TWO_TO_31), this.writeZigzagVarint32_(a, b));
 };
 
-goog.string.toNumber = function (a) {
-  var b = Number(a);
-  return 0 == b && goog.string.isEmptyOrWhitespace(a) ? NaN : b;
+jspb.BinaryWriter.prototype.writeSint64 = function (a, b) {
+  null != b && (goog.asserts.assert(b >= -jspb.BinaryConstants.TWO_TO_63 && b < jspb.BinaryConstants.TWO_TO_63), this.writeZigzagVarint64_(a, b));
 };
 
-goog.string.isLowerCamelCase = function (a) {
-  return /^[a-z]+([A-Z][a-z]*)*$/.test(a);
+jspb.BinaryWriter.prototype.writeSintHash64 = function (a, b) {
+  null != b && this.writeZigzagVarintHash64_(a, b);
 };
 
-goog.string.isUpperCamelCase = function (a) {
-  return /^([A-Z][a-z]*)+$/.test(a);
+jspb.BinaryWriter.prototype.writeSint64String = function (a, b) {
+  null != b && this.writeZigzagVarint64String_(a, b);
 };
 
-goog.string.toCamelCase = function (a) {
-  return String(a).replace(/\-([a-z])/g, function (a, c) {
-    return c.toUpperCase();
-  });
+jspb.BinaryWriter.prototype.writeFixed32 = function (a, b) {
+  null != b && (goog.asserts.assert(0 <= b && b < jspb.BinaryConstants.TWO_TO_32), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.FIXED32), this.encoder_.writeUint32(b));
 };
 
-goog.string.toSelectorCase = function (a) {
-  return String(a).replace(/([A-Z])/g, "-$1").toLowerCase();
+jspb.BinaryWriter.prototype.writeFixed64 = function (a, b) {
+  null != b && (goog.asserts.assert(0 <= b && b < jspb.BinaryConstants.TWO_TO_64), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.FIXED64), this.encoder_.writeUint64(b));
 };
 
-goog.string.toTitleCase = function (a, b) {
-  b = goog.isString(b) ? goog.string.regExpEscape(b) : "\\s";
-  return a.replace(new RegExp("(^" + (b ? "|[" + b + "]+" : "") + ")([a-z])", "g"), function (a, b, e) {
-    return b + e.toUpperCase();
-  });
+jspb.BinaryWriter.prototype.writeFixed64String = function (a, b) {
+  null != b && (b = jspb.arith.UInt64.fromString(b), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.FIXED64), this.encoder_.writeSplitFixed64(b.lo, b.hi));
 };
 
-goog.string.capitalize = function (a) {
-  return String(a.charAt(0)).toUpperCase() + String(a.substr(1)).toLowerCase();
+jspb.BinaryWriter.prototype.writeSfixed32 = function (a, b) {
+  null != b && (goog.asserts.assert(b >= -jspb.BinaryConstants.TWO_TO_31 && b < jspb.BinaryConstants.TWO_TO_31), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.FIXED32), this.encoder_.writeInt32(b));
 };
 
-goog.string.parseInt = function (a) {
-  isFinite(a) && (a = String(a));
-  return goog.isString(a) ? /^\s*-?0x/i.test(a) ? parseInt(a, 16) : parseInt(a, 10) : NaN;
+jspb.BinaryWriter.prototype.writeSfixed64 = function (a, b) {
+  null != b && (goog.asserts.assert(b >= -jspb.BinaryConstants.TWO_TO_63 && b < jspb.BinaryConstants.TWO_TO_63), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.FIXED64), this.encoder_.writeInt64(b));
 };
 
-goog.string.splitLimit = function (a, b, c) {
-  a = a.split(b);
+jspb.BinaryWriter.prototype.writeSfixed64String = function (a, b) {
+  null != b && (b = jspb.arith.Int64.fromString(b), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.FIXED64), this.encoder_.writeSplitFixed64(b.lo, b.hi));
+};
 
-  for (var d = []; 0 < c && a.length;) d.push(a.shift()), c--;
+jspb.BinaryWriter.prototype.writeFloat = function (a, b) {
+  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.FIXED32), this.encoder_.writeFloat(b));
+};
 
-  a.length && d.push(a.join(b));
-  return d;
+jspb.BinaryWriter.prototype.writeDouble = function (a, b) {
+  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.FIXED64), this.encoder_.writeDouble(b));
 };
 
-goog.string.lastComponent = function (a, b) {
-  if (b) "string" == typeof b && (b = [b]);else return a;
+jspb.BinaryWriter.prototype.writeBool = function (a, b) {
+  null != b && (goog.asserts.assert("boolean" === typeof b || "number" === typeof b), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeBool(b));
+};
 
-  for (var c = -1, d = 0; d < b.length; d++) if ("" != b[d]) {
-    var e = a.lastIndexOf(b[d]);
-    e > c && (c = e);
-  }
+jspb.BinaryWriter.prototype.writeEnum = function (a, b) {
+  null != b && (goog.asserts.assert(b >= -jspb.BinaryConstants.TWO_TO_31 && b < jspb.BinaryConstants.TWO_TO_31), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeSignedVarint32(b));
+};
 
-  return -1 == c ? a : a.slice(c + 1);
+jspb.BinaryWriter.prototype.writeString = function (a, b) {
+  null != b && (a = this.beginDelimited_(a), this.encoder_.writeString(b), this.endDelimited_(a));
 };
 
-goog.string.editDistance = function (a, b) {
-  var c = [],
-      d = [];
-  if (a == b) return 0;
-  if (!a.length || !b.length) return Math.max(a.length, b.length);
+jspb.BinaryWriter.prototype.writeBytes = function (a, b) {
+  null != b && (b = jspb.utils.byteSourceToUint8Array(b), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(b.length), this.appendUint8Array_(b));
+};
 
-  for (var e = 0; e < b.length + 1; e++) c[e] = e;
+jspb.BinaryWriter.prototype.writeMessage = function (a, b, c) {
+  null != b && (a = this.beginDelimited_(a), c(b, this), this.endDelimited_(a));
+};
 
-  for (e = 0; e < a.length; e++) {
-    d[0] = e + 1;
+jspb.BinaryWriter.prototype.writeMessageSet = function (a, b, c) {
+  null != b && (this.writeFieldHeader_(1, jspb.BinaryConstants.WireType.START_GROUP), this.writeFieldHeader_(2, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeSignedVarint32(a), a = this.beginDelimited_(3), c(b, this), this.endDelimited_(a), this.writeFieldHeader_(1, jspb.BinaryConstants.WireType.END_GROUP));
+};
 
-    for (var f = 0; f < b.length; f++) d[f + 1] = Math.min(d[f] + 1, c[f + 1] + 1, c[f] + Number(a[e] != b[f]));
+jspb.BinaryWriter.prototype.writeGroup = function (a, b, c) {
+  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.START_GROUP), c(b, this), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.END_GROUP));
+};
 
-    for (f = 0; f < c.length; f++) c[f] = d[f];
-  }
+jspb.BinaryWriter.prototype.writeFixedHash64 = function (a, b) {
+  null != b && (goog.asserts.assert(8 == b.length), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.FIXED64), this.encoder_.writeFixedHash64(b));
+};
 
-  return d[b.length];
+jspb.BinaryWriter.prototype.writeVarintHash64 = function (a, b) {
+  null != b && (goog.asserts.assert(8 == b.length), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeVarintHash64(b));
 };
 
-goog.labs.userAgent.platform = {};
+jspb.BinaryWriter.prototype.writeSplitFixed64 = function (a, b, c) {
+  this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.FIXED64);
+  this.encoder_.writeSplitFixed64(b, c);
+};
 
-goog.labs.userAgent.platform.isAndroid = function () {
-  return goog.labs.userAgent.util.matchUserAgent("Android");
+jspb.BinaryWriter.prototype.writeSplitVarint64 = function (a, b, c) {
+  this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT);
+  this.encoder_.writeSplitVarint64(b, c);
 };
 
-goog.labs.userAgent.platform.isIpod = function () {
-  return goog.labs.userAgent.util.matchUserAgent("iPod");
+jspb.BinaryWriter.prototype.writeSplitZigzagVarint64 = function (a, b, c) {
+  this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT);
+  var d = this.encoder_;
+  jspb.utils.toZigzag64(b, c, function (a, b) {
+    d.writeSplitVarint64(a >>> 0, b >>> 0);
+  });
 };
 
-goog.labs.userAgent.platform.isIphone = function () {
-  return goog.labs.userAgent.util.matchUserAgent("iPhone") && !goog.labs.userAgent.util.matchUserAgent("iPod") && !goog.labs.userAgent.util.matchUserAgent("iPad");
+jspb.BinaryWriter.prototype.writeRepeatedInt32 = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeSignedVarint32_(a, b[c]);
 };
 
-goog.labs.userAgent.platform.isIpad = function () {
-  return goog.labs.userAgent.util.matchUserAgent("iPad");
+jspb.BinaryWriter.prototype.writeRepeatedInt32String = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeInt32String(a, b[c]);
 };
 
-goog.labs.userAgent.platform.isIos = function () {
-  return goog.labs.userAgent.platform.isIphone() || goog.labs.userAgent.platform.isIpad() || goog.labs.userAgent.platform.isIpod();
+jspb.BinaryWriter.prototype.writeRepeatedInt64 = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeSignedVarint64_(a, b[c]);
 };
 
-goog.labs.userAgent.platform.isMacintosh = function () {
-  return goog.labs.userAgent.util.matchUserAgent("Macintosh");
+jspb.BinaryWriter.prototype.writeRepeatedSplitFixed64 = function (a, b, c, d) {
+  if (null != b) for (var e = 0; e < b.length; e++) this.writeSplitFixed64(a, c(b[e]), d(b[e]));
 };
 
-goog.labs.userAgent.platform.isLinux = function () {
-  return goog.labs.userAgent.util.matchUserAgent("Linux");
+jspb.BinaryWriter.prototype.writeRepeatedSplitVarint64 = function (a, b, c, d) {
+  if (null != b) for (var e = 0; e < b.length; e++) this.writeSplitVarint64(a, c(b[e]), d(b[e]));
 };
 
-goog.labs.userAgent.platform.isWindows = function () {
-  return goog.labs.userAgent.util.matchUserAgent("Windows");
+jspb.BinaryWriter.prototype.writeRepeatedSplitZigzagVarint64 = function (a, b, c, d) {
+  if (null != b) for (var e = 0; e < b.length; e++) this.writeSplitZigzagVarint64(a, c(b[e]), d(b[e]));
 };
 
-goog.labs.userAgent.platform.isChromeOS = function () {
-  return goog.labs.userAgent.util.matchUserAgent("CrOS");
+jspb.BinaryWriter.prototype.writeRepeatedInt64String = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeInt64String(a, b[c]);
 };
 
-goog.labs.userAgent.platform.isChromecast = function () {
-  return goog.labs.userAgent.util.matchUserAgent("CrKey");
+jspb.BinaryWriter.prototype.writeRepeatedUint32 = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeUnsignedVarint32_(a, b[c]);
 };
 
-goog.labs.userAgent.platform.isKaiOS = function () {
-  return goog.labs.userAgent.util.matchUserAgentIgnoreCase("KaiOS");
+jspb.BinaryWriter.prototype.writeRepeatedUint32String = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeUint32String(a, b[c]);
 };
 
-goog.labs.userAgent.platform.isGo2Phone = function () {
-  return goog.labs.userAgent.util.matchUserAgentIgnoreCase("GAFP");
+jspb.BinaryWriter.prototype.writeRepeatedUint64 = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeUnsignedVarint64_(a, b[c]);
 };
 
-goog.labs.userAgent.platform.getVersion = function () {
-  var a = goog.labs.userAgent.util.getUserAgent(),
-      b = "";
-  goog.labs.userAgent.platform.isWindows() ? (b = /Windows (?:NT|Phone) ([0-9.]+)/, b = (a = b.exec(a)) ? a[1] : "0.0") : goog.labs.userAgent.platform.isIos() ? (b = /(?:iPhone|iPod|iPad|CPU)\s+OS\s+(\S+)/, b = (a = b.exec(a)) && a[1].replace(/_/g, ".")) : goog.labs.userAgent.platform.isMacintosh() ? (b = /Mac OS X ([0-9_.]+)/, b = (a = b.exec(a)) ? a[1].replace(/_/g, ".") : "10") : goog.labs.userAgent.platform.isKaiOS() ? (b = /(?:KaiOS)\/(\S+)/i, b = (a = b.exec(a)) && a[1]) : goog.labs.userAgent.platform.isAndroid() ? (b = /Android\s+([^\);]+)(\)|;)/, b = (a = b.exec(a)) && a[1]) : goog.labs.userAgent.platform.isChromeOS() && (b = /(?:CrOS\s+(?:i686|x86_64)\s+([0-9.]+))/, b = (a = b.exec(a)) && a[1]);
-  return b || "";
+jspb.BinaryWriter.prototype.writeRepeatedUint64String = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeUint64String(a, b[c]);
 };
 
-goog.labs.userAgent.platform.isVersionOrHigher = function (a) {
-  return 0 <= goog.string.compareVersions(goog.labs.userAgent.platform.getVersion(), a);
+jspb.BinaryWriter.prototype.writeRepeatedSint32 = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeZigzagVarint32_(a, b[c]);
 };
 
-goog.reflect = {};
+jspb.BinaryWriter.prototype.writeRepeatedSint64 = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeZigzagVarint64_(a, b[c]);
+};
 
-goog.reflect.object = function (a, b) {
-  return b;
+jspb.BinaryWriter.prototype.writeRepeatedSint64String = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeZigzagVarint64String_(a, b[c]);
 };
 
-goog.reflect.objectProperty = function (a, b) {
-  return a;
+jspb.BinaryWriter.prototype.writeRepeatedSintHash64 = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeZigzagVarintHash64_(a, b[c]);
 };
 
-goog.reflect.sinkValue = function (a) {
-  goog.reflect.sinkValue[" "](a);
-  return a;
+jspb.BinaryWriter.prototype.writeRepeatedFixed32 = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeFixed32(a, b[c]);
 };
 
-goog.reflect.sinkValue[" "] = goog.nullFunction;
+jspb.BinaryWriter.prototype.writeRepeatedFixed64 = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeFixed64(a, b[c]);
+};
 
-goog.reflect.canAccessProperty = function (a, b) {
-  try {
-    return goog.reflect.sinkValue(a[b]), !0;
-  } catch (c) {}
+jspb.BinaryWriter.prototype.writeRepeatedFixed64String = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeFixed64String(a, b[c]);
+};
 
-  return !1;
+jspb.BinaryWriter.prototype.writeRepeatedSfixed32 = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeSfixed32(a, b[c]);
 };
 
-goog.reflect.cache = function (a, b, c, d) {
-  d = d ? d(b) : b;
-  return Object.prototype.hasOwnProperty.call(a, d) ? a[d] : a[d] = c(b);
+jspb.BinaryWriter.prototype.writeRepeatedSfixed64 = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeSfixed64(a, b[c]);
 };
 
-goog.labs.userAgent.engine = {};
+jspb.BinaryWriter.prototype.writeRepeatedSfixed64String = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeSfixed64String(a, b[c]);
+};
 
-goog.labs.userAgent.engine.isPresto = function () {
-  return goog.labs.userAgent.util.matchUserAgent("Presto");
+jspb.BinaryWriter.prototype.writeRepeatedFloat = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeFloat(a, b[c]);
 };
 
-goog.labs.userAgent.engine.isTrident = function () {
-  return goog.labs.userAgent.util.matchUserAgent("Trident") || goog.labs.userAgent.util.matchUserAgent("MSIE");
+jspb.BinaryWriter.prototype.writeRepeatedDouble = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeDouble(a, b[c]);
 };
 
-goog.labs.userAgent.engine.isEdge = function () {
-  return goog.labs.userAgent.util.matchUserAgent("Edge");
+jspb.BinaryWriter.prototype.writeRepeatedBool = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeBool(a, b[c]);
 };
 
-goog.labs.userAgent.engine.isWebKit = function () {
-  return goog.labs.userAgent.util.matchUserAgentIgnoreCase("WebKit") && !goog.labs.userAgent.engine.isEdge();
+jspb.BinaryWriter.prototype.writeRepeatedEnum = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeEnum(a, b[c]);
 };
 
-goog.labs.userAgent.engine.isGecko = function () {
-  return goog.labs.userAgent.util.matchUserAgent("Gecko") && !goog.labs.userAgent.engine.isWebKit() && !goog.labs.userAgent.engine.isTrident() && !goog.labs.userAgent.engine.isEdge();
+jspb.BinaryWriter.prototype.writeRepeatedString = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeString(a, b[c]);
 };
 
-goog.labs.userAgent.engine.getVersion = function () {
-  var a = goog.labs.userAgent.util.getUserAgent();
+jspb.BinaryWriter.prototype.writeRepeatedBytes = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeBytes(a, b[c]);
+};
 
-  if (a) {
-    a = goog.labs.userAgent.util.extractVersionTuples(a);
-    var b = goog.labs.userAgent.engine.getEngineTuple_(a);
-    if (b) return "Gecko" == b[0] ? goog.labs.userAgent.engine.getVersionForKey_(a, "Firefox") : b[1];
-    a = a[0];
-    var c;
-    if (a && (c = a[2]) && (c = /Trident\/([^\s;]+)/.exec(c))) return c[1];
+jspb.BinaryWriter.prototype.writeRepeatedMessage = function (a, b, c) {
+  if (null != b) for (var d = 0; d < b.length; d++) {
+    var e = this.beginDelimited_(a);
+    c(b[d], this);
+    this.endDelimited_(e);
   }
-
-  return "";
 };
 
-goog.labs.userAgent.engine.getEngineTuple_ = function (a) {
-  if (!goog.labs.userAgent.engine.isEdge()) return a[1];
-
-  for (var b = 0; b < a.length; b++) {
-    var c = a[b];
-    if ("Edge" == c[0]) return c;
-  }
+jspb.BinaryWriter.prototype.writeRepeatedGroup = function (a, b, c) {
+  if (null != b) for (var d = 0; d < b.length; d++) this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.START_GROUP), c(b[d], this), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.END_GROUP);
 };
 
-goog.labs.userAgent.engine.isVersionOrHigher = function (a) {
-  return 0 <= goog.string.compareVersions(goog.labs.userAgent.engine.getVersion(), a);
+jspb.BinaryWriter.prototype.writeRepeatedFixedHash64 = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeFixedHash64(a, b[c]);
 };
 
-goog.labs.userAgent.engine.getVersionForKey_ = function (a, b) {
-  return (a = goog.array.find(a, function (a) {
-    return b == a[0];
-  })) && a[1] || "";
+jspb.BinaryWriter.prototype.writeRepeatedVarintHash64 = function (a, b) {
+  if (null != b) for (var c = 0; c < b.length; c++) this.writeVarintHash64(a, b[c]);
 };
 
-goog.userAgent = {};
-goog.userAgent.ASSUME_IE = !1;
-goog.userAgent.ASSUME_EDGE = !1;
-goog.userAgent.ASSUME_GECKO = !1;
-goog.userAgent.ASSUME_WEBKIT = !1;
-goog.userAgent.ASSUME_MOBILE_WEBKIT = !1;
-goog.userAgent.ASSUME_OPERA = !1;
-goog.userAgent.ASSUME_ANY_VERSION = !1;
-goog.userAgent.BROWSER_KNOWN_ = goog.userAgent.ASSUME_IE || goog.userAgent.ASSUME_EDGE || goog.userAgent.ASSUME_GECKO || goog.userAgent.ASSUME_MOBILE_WEBKIT || goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_OPERA;
+jspb.BinaryWriter.prototype.writePackedInt32 = function (a, b) {
+  if (null != b && b.length) {
+    a = this.beginDelimited_(a);
 
-goog.userAgent.getUserAgentString = function () {
-  return goog.labs.userAgent.util.getUserAgent();
-};
+    for (var c = 0; c < b.length; c++) this.encoder_.writeSignedVarint32(b[c]);
 
-goog.userAgent.getNavigatorTyped = function () {
-  return goog.global.navigator || null;
+    this.endDelimited_(a);
+  }
 };
 
-goog.userAgent.getNavigator = function () {
-  return goog.userAgent.getNavigatorTyped();
-};
+jspb.BinaryWriter.prototype.writePackedInt32String = function (a, b) {
+  if (null != b && b.length) {
+    a = this.beginDelimited_(a);
 
-goog.userAgent.OPERA = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_OPERA : goog.labs.userAgent.browser.isOpera();
-goog.userAgent.IE = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_IE : goog.labs.userAgent.browser.isIE();
-goog.userAgent.EDGE = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_EDGE : goog.labs.userAgent.engine.isEdge();
-goog.userAgent.EDGE_OR_IE = goog.userAgent.EDGE || goog.userAgent.IE;
-goog.userAgent.GECKO = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_GECKO : goog.labs.userAgent.engine.isGecko();
-goog.userAgent.WEBKIT = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_MOBILE_WEBKIT : goog.labs.userAgent.engine.isWebKit();
+    for (var c = 0; c < b.length; c++) this.encoder_.writeSignedVarint32(parseInt(b[c], 10));
 
-goog.userAgent.isMobile_ = function () {
-  return goog.userAgent.WEBKIT && goog.labs.userAgent.util.matchUserAgent("Mobile");
+    this.endDelimited_(a);
+  }
 };
 
-goog.userAgent.MOBILE = goog.userAgent.ASSUME_MOBILE_WEBKIT || goog.userAgent.isMobile_();
-goog.userAgent.SAFARI = goog.userAgent.WEBKIT;
-
-goog.userAgent.determinePlatform_ = function () {
-  var a = goog.userAgent.getNavigatorTyped();
-  return a && a.platform || "";
-};
+jspb.BinaryWriter.prototype.writePackedInt64 = function (a, b) {
+  if (null != b && b.length) {
+    a = this.beginDelimited_(a);
 
-goog.userAgent.PLATFORM = goog.userAgent.determinePlatform_();
-goog.userAgent.ASSUME_MAC = !1;
-goog.userAgent.ASSUME_WINDOWS = !1;
-goog.userAgent.ASSUME_LINUX = !1;
-goog.userAgent.ASSUME_X11 = !1;
-goog.userAgent.ASSUME_ANDROID = !1;
-goog.userAgent.ASSUME_IPHONE = !1;
-goog.userAgent.ASSUME_IPAD = !1;
-goog.userAgent.ASSUME_IPOD = !1;
-goog.userAgent.ASSUME_KAIOS = !1;
-goog.userAgent.ASSUME_GO2PHONE = !1;
-goog.userAgent.PLATFORM_KNOWN_ = goog.userAgent.ASSUME_MAC || goog.userAgent.ASSUME_WINDOWS || goog.userAgent.ASSUME_LINUX || goog.userAgent.ASSUME_X11 || goog.userAgent.ASSUME_ANDROID || goog.userAgent.ASSUME_IPHONE || goog.userAgent.ASSUME_IPAD || goog.userAgent.ASSUME_IPOD;
-goog.userAgent.MAC = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_MAC : goog.labs.userAgent.platform.isMacintosh();
-goog.userAgent.WINDOWS = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_WINDOWS : goog.labs.userAgent.platform.isWindows();
+    for (var c = 0; c < b.length; c++) this.encoder_.writeSignedVarint64(b[c]);
 
-goog.userAgent.isLegacyLinux_ = function () {
-  return goog.labs.userAgent.platform.isLinux() || goog.labs.userAgent.platform.isChromeOS();
+    this.endDelimited_(a);
+  }
 };
 
-goog.userAgent.LINUX = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_LINUX : goog.userAgent.isLegacyLinux_();
+jspb.BinaryWriter.prototype.writePackedSplitFixed64 = function (a, b, c, d) {
+  if (null != b) {
+    a = this.beginDelimited_(a);
 
-goog.userAgent.isX11_ = function () {
-  var a = goog.userAgent.getNavigatorTyped();
-  return !!a && goog.string.contains(a.appVersion || "", "X11");
+    for (var e = 0; e < b.length; e++) this.encoder_.writeSplitFixed64(c(b[e]), d(b[e]));
+
+    this.endDelimited_(a);
+  }
 };
 
-goog.userAgent.X11 = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_X11 : goog.userAgent.isX11_();
-goog.userAgent.ANDROID = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_ANDROID : goog.labs.userAgent.platform.isAndroid();
-goog.userAgent.IPHONE = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPHONE : goog.labs.userAgent.platform.isIphone();
-goog.userAgent.IPAD = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPAD : goog.labs.userAgent.platform.isIpad();
-goog.userAgent.IPOD = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPOD : goog.labs.userAgent.platform.isIpod();
-goog.userAgent.IOS = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_IPHONE || goog.userAgent.ASSUME_IPAD || goog.userAgent.ASSUME_IPOD : goog.labs.userAgent.platform.isIos();
-goog.userAgent.KAIOS = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_KAIOS : goog.labs.userAgent.platform.isKaiOS();
-goog.userAgent.GO2PHONE = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_GO2PHONE : goog.labs.userAgent.platform.isGo2Phone();
+jspb.BinaryWriter.prototype.writePackedSplitVarint64 = function (a, b, c, d) {
+  if (null != b) {
+    a = this.beginDelimited_(a);
 
-goog.userAgent.determineVersion_ = function () {
-  var a = "",
-      b = goog.userAgent.getVersionRegexResult_();
-  b && (a = b ? b[1] : "");
-  return goog.userAgent.IE && (b = goog.userAgent.getDocumentMode_(), null != b && b > parseFloat(a)) ? String(b) : a;
-};
+    for (var e = 0; e < b.length; e++) this.encoder_.writeSplitVarint64(c(b[e]), d(b[e]));
 
-goog.userAgent.getVersionRegexResult_ = function () {
-  var a = goog.userAgent.getUserAgentString();
-  if (goog.userAgent.GECKO) return /rv:([^\);]+)(\)|;)/.exec(a);
-  if (goog.userAgent.EDGE) return /Edge\/([\d\.]+)/.exec(a);
-  if (goog.userAgent.IE) return /\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);
-  if (goog.userAgent.WEBKIT) return /WebKit\/(\S+)/.exec(a);
-  if (goog.userAgent.OPERA) return /(?:Version)[ \/]?(\S+)/.exec(a);
+    this.endDelimited_(a);
+  }
 };
 
-goog.userAgent.getDocumentMode_ = function () {
-  var a = goog.global.document;
-  return a ? a.documentMode : void 0;
-};
+jspb.BinaryWriter.prototype.writePackedSplitZigzagVarint64 = function (a, b, c, d) {
+  if (null != b) {
+    a = this.beginDelimited_(a);
 
-goog.userAgent.VERSION = goog.userAgent.determineVersion_();
+    for (var e = this.encoder_, f = 0; f < b.length; f++) jspb.utils.toZigzag64(c(b[f]), d(b[f]), function (a, b) {
+      e.writeSplitVarint64(a >>> 0, b >>> 0);
+    });
 
-goog.userAgent.compare = function (a, b) {
-  return goog.string.compareVersions(a, b);
+    this.endDelimited_(a);
+  }
 };
 
-goog.userAgent.isVersionOrHigherCache_ = {};
-
-goog.userAgent.isVersionOrHigher = function (a) {
-  return goog.userAgent.ASSUME_ANY_VERSION || goog.reflect.cache(goog.userAgent.isVersionOrHigherCache_, a, function () {
-    return 0 <= goog.string.compareVersions(goog.userAgent.VERSION, a);
-  });
-};
+jspb.BinaryWriter.prototype.writePackedInt64String = function (a, b) {
+  if (null != b && b.length) {
+    a = this.beginDelimited_(a);
 
-goog.userAgent.isVersion = goog.userAgent.isVersionOrHigher;
+    for (var c = 0; c < b.length; c++) {
+      var d = jspb.arith.Int64.fromString(b[c]);
+      this.encoder_.writeSplitVarint64(d.lo, d.hi);
+    }
 
-goog.userAgent.isDocumentModeOrHigher = function (a) {
-  return Number(goog.userAgent.DOCUMENT_MODE) >= a;
+    this.endDelimited_(a);
+  }
 };
 
-goog.userAgent.isDocumentMode = goog.userAgent.isDocumentModeOrHigher;
-
-goog.userAgent.DOCUMENT_MODE = function () {
-  if (goog.global.document && goog.userAgent.IE) return goog.userAgent.getDocumentMode_();
-}();
+jspb.BinaryWriter.prototype.writePackedUint32 = function (a, b) {
+  if (null != b && b.length) {
+    a = this.beginDelimited_(a);
 
-goog.userAgent.product = {};
-goog.userAgent.product.ASSUME_FIREFOX = !1;
-goog.userAgent.product.ASSUME_IPHONE = !1;
-goog.userAgent.product.ASSUME_IPAD = !1;
-goog.userAgent.product.ASSUME_ANDROID = !1;
-goog.userAgent.product.ASSUME_CHROME = !1;
-goog.userAgent.product.ASSUME_SAFARI = !1;
-goog.userAgent.product.PRODUCT_KNOWN_ = goog.userAgent.ASSUME_IE || goog.userAgent.ASSUME_EDGE || goog.userAgent.ASSUME_OPERA || goog.userAgent.product.ASSUME_FIREFOX || goog.userAgent.product.ASSUME_IPHONE || goog.userAgent.product.ASSUME_IPAD || goog.userAgent.product.ASSUME_ANDROID || goog.userAgent.product.ASSUME_CHROME || goog.userAgent.product.ASSUME_SAFARI;
-goog.userAgent.product.OPERA = goog.userAgent.OPERA;
-goog.userAgent.product.IE = goog.userAgent.IE;
-goog.userAgent.product.EDGE = goog.userAgent.EDGE;
-goog.userAgent.product.FIREFOX = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_FIREFOX : goog.labs.userAgent.browser.isFirefox();
+    for (var c = 0; c < b.length; c++) this.encoder_.writeUnsignedVarint32(b[c]);
 
-goog.userAgent.product.isIphoneOrIpod_ = function () {
-  return goog.labs.userAgent.platform.isIphone() || goog.labs.userAgent.platform.isIpod();
+    this.endDelimited_(a);
+  }
 };
 
-goog.userAgent.product.IPHONE = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_IPHONE : goog.userAgent.product.isIphoneOrIpod_();
-goog.userAgent.product.IPAD = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_IPAD : goog.labs.userAgent.platform.isIpad();
-goog.userAgent.product.ANDROID = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_ANDROID : goog.labs.userAgent.browser.isAndroidBrowser();
-goog.userAgent.product.CHROME = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_CHROME : goog.labs.userAgent.browser.isChrome();
-
-goog.userAgent.product.isSafariDesktop_ = function () {
-  return goog.labs.userAgent.browser.isSafari() && !goog.labs.userAgent.platform.isIos();
-};
+jspb.BinaryWriter.prototype.writePackedUint32String = function (a, b) {
+  if (null != b && b.length) {
+    a = this.beginDelimited_(a);
 
-goog.userAgent.product.SAFARI = goog.userAgent.product.PRODUCT_KNOWN_ ? goog.userAgent.product.ASSUME_SAFARI : goog.userAgent.product.isSafariDesktop_();
-goog.crypt.base64 = {};
-goog.crypt.base64.DEFAULT_ALPHABET_COMMON_ = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
-goog.crypt.base64.ENCODED_VALS = goog.crypt.base64.DEFAULT_ALPHABET_COMMON_ + "+/=";
-goog.crypt.base64.ENCODED_VALS_WEBSAFE = goog.crypt.base64.DEFAULT_ALPHABET_COMMON_ + "-_.";
-goog.crypt.base64.Alphabet = {
-  DEFAULT: 0,
-  NO_PADDING: 1,
-  WEBSAFE: 2,
-  WEBSAFE_DOT_PADDING: 3,
-  WEBSAFE_NO_PADDING: 4
-};
-goog.crypt.base64.paddingChars_ = "=.";
+    for (var c = 0; c < b.length; c++) this.encoder_.writeUnsignedVarint32(parseInt(b[c], 10));
 
-goog.crypt.base64.isPadding_ = function (a) {
-  return goog.string.contains(goog.crypt.base64.paddingChars_, a);
+    this.endDelimited_(a);
+  }
 };
 
-goog.crypt.base64.byteToCharMaps_ = {};
-goog.crypt.base64.charToByteMap_ = null;
-goog.crypt.base64.ASSUME_NATIVE_SUPPORT_ = goog.userAgent.GECKO || goog.userAgent.WEBKIT && !goog.userAgent.product.SAFARI || goog.userAgent.OPERA;
-goog.crypt.base64.HAS_NATIVE_ENCODE_ = goog.crypt.base64.ASSUME_NATIVE_SUPPORT_ || "function" == typeof goog.global.btoa;
-goog.crypt.base64.HAS_NATIVE_DECODE_ = goog.crypt.base64.ASSUME_NATIVE_SUPPORT_ || !goog.userAgent.product.SAFARI && !goog.userAgent.IE && "function" == typeof goog.global.atob;
+jspb.BinaryWriter.prototype.writePackedUint64 = function (a, b) {
+  if (null != b && b.length) {
+    a = this.beginDelimited_(a);
 
-goog.crypt.base64.encodeByteArray = function (a, b) {
-  goog.asserts.assert(goog.isArrayLike(a), "encodeByteArray takes an array as a parameter");
-  void 0 === b && (b = goog.crypt.base64.Alphabet.DEFAULT);
-  goog.crypt.base64.init_();
-  b = goog.crypt.base64.byteToCharMaps_[b];
+    for (var c = 0; c < b.length; c++) this.encoder_.writeUnsignedVarint64(b[c]);
 
-  for (var c = [], d = 0; d < a.length; d += 3) {
-    var e = a[d],
-        f = d + 1 < a.length,
-        g = f ? a[d + 1] : 0,
-        h = d + 2 < a.length,
-        k = h ? a[d + 2] : 0,
-        l = e >> 2;
-    e = (e & 3) << 4 | g >> 4;
-    g = (g & 15) << 2 | k >> 6;
-    k &= 63;
-    h || (k = 64, f || (g = 64));
-    c.push(b[l], b[e], b[g] || "", b[k] || "");
+    this.endDelimited_(a);
   }
-
-  return c.join("");
 };
 
-goog.crypt.base64.encodeString = function (a, b) {
-  return goog.crypt.base64.HAS_NATIVE_ENCODE_ && !b ? goog.global.btoa(a) : goog.crypt.base64.encodeByteArray(goog.crypt.stringToByteArray(a), b);
-};
+jspb.BinaryWriter.prototype.writePackedUint64String = function (a, b) {
+  if (null != b && b.length) {
+    a = this.beginDelimited_(a);
 
-goog.crypt.base64.decodeString = function (a, b) {
-  if (goog.crypt.base64.HAS_NATIVE_DECODE_ && !b) return goog.global.atob(a);
-  var c = "";
-  goog.crypt.base64.decodeStringInternal_(a, function (a) {
-    c += String.fromCharCode(a);
-  });
-  return c;
-};
+    for (var c = 0; c < b.length; c++) {
+      var d = jspb.arith.UInt64.fromString(b[c]);
+      this.encoder_.writeSplitVarint64(d.lo, d.hi);
+    }
 
-goog.crypt.base64.decodeStringToByteArray = function (a, b) {
-  var c = [];
-  goog.crypt.base64.decodeStringInternal_(a, function (a) {
-    c.push(a);
-  });
-  return c;
+    this.endDelimited_(a);
+  }
 };
 
-goog.crypt.base64.decodeStringToUint8Array = function (a) {
-  goog.asserts.assert(!goog.userAgent.IE || goog.userAgent.isVersionOrHigher("10"), "Browser does not support typed arrays");
-  var b = a.length,
-      c = 3 * b / 4;
-  c % 3 ? c = Math.floor(c) : goog.crypt.base64.isPadding_(a[b - 1]) && (c = goog.crypt.base64.isPadding_(a[b - 2]) ? c - 2 : c - 1);
-  var d = new Uint8Array(c),
-      e = 0;
-  goog.crypt.base64.decodeStringInternal_(a, function (a) {
-    d[e++] = a;
-  });
-  return d.subarray(0, e);
-};
+jspb.BinaryWriter.prototype.writePackedSint32 = function (a, b) {
+  if (null != b && b.length) {
+    a = this.beginDelimited_(a);
 
-goog.crypt.base64.decodeStringInternal_ = function (a, b) {
-  function c(b) {
-    for (; d < a.length;) {
-      var c = a.charAt(d++),
-          e = goog.crypt.base64.charToByteMap_[c];
-      if (null != e) return e;
-      if (!goog.string.isEmptyOrWhitespace(c)) throw Error("Unknown base64 encoding at char: " + c);
-    }
+    for (var c = 0; c < b.length; c++) this.encoder_.writeZigzagVarint32(b[c]);
 
-    return b;
+    this.endDelimited_(a);
   }
+};
 
-  goog.crypt.base64.init_();
+jspb.BinaryWriter.prototype.writePackedSint64 = function (a, b) {
+  if (null != b && b.length) {
+    a = this.beginDelimited_(a);
 
-  for (var d = 0;;) {
-    var e = c(-1),
-        f = c(0),
-        g = c(64),
-        h = c(64);
-    if (64 === h && -1 === e) break;
-    b(e << 2 | f >> 4);
-    64 != g && (b(f << 4 & 240 | g >> 2), 64 != h && b(g << 6 & 192 | h));
+    for (var c = 0; c < b.length; c++) this.encoder_.writeZigzagVarint64(b[c]);
+
+    this.endDelimited_(a);
   }
 };
 
-goog.crypt.base64.init_ = function () {
-  if (!goog.crypt.base64.charToByteMap_) {
-    goog.crypt.base64.charToByteMap_ = {};
+jspb.BinaryWriter.prototype.writePackedSint64String = function (a, b) {
+  if (null != b && b.length) {
+    a = this.beginDelimited_(a);
 
-    for (var a = goog.crypt.base64.DEFAULT_ALPHABET_COMMON_.split(""), b = ["+/=", "+/", "-_=", "-_.", "-_"], c = 0; 5 > c; c++) {
-      var d = a.concat(b[c].split(""));
-      goog.crypt.base64.byteToCharMaps_[c] = d;
+    for (var c = 0; c < b.length; c++) this.encoder_.writeZigzagVarintHash64(jspb.utils.decimalStringToHash64(b[c]));
 
-      for (var e = 0; e < d.length; e++) {
-        var f = d[e],
-            g = goog.crypt.base64.charToByteMap_[f];
-        void 0 === g ? goog.crypt.base64.charToByteMap_[f] = e : goog.asserts.assert(g === e);
-      }
-    }
+    this.endDelimited_(a);
   }
 };
 
-jspb.utils = {};
-jspb.utils.split64Low = 0;
-jspb.utils.split64High = 0;
+jspb.BinaryWriter.prototype.writePackedSintHash64 = function (a, b) {
+  if (null != b && b.length) {
+    a = this.beginDelimited_(a);
 
-jspb.utils.splitUint64 = function (a) {
-  var b = a >>> 0;
-  a = Math.floor((a - b) / jspb.BinaryConstants.TWO_TO_32) >>> 0;
-  jspb.utils.split64Low = b;
-  jspb.utils.split64High = a;
+    for (var c = 0; c < b.length; c++) this.encoder_.writeZigzagVarintHash64(b[c]);
+
+    this.endDelimited_(a);
+  }
 };
 
-jspb.utils.splitInt64 = function (a) {
-  var b = 0 > a;
-  a = Math.abs(a);
-  var c = a >>> 0;
-  a = Math.floor((a - c) / jspb.BinaryConstants.TWO_TO_32);
-  a >>>= 0;
-  b && (a = ~a >>> 0, c = (~c >>> 0) + 1, 4294967295 < c && (c = 0, a++, 4294967295 < a && (a = 0)));
-  jspb.utils.split64Low = c;
-  jspb.utils.split64High = a;
+jspb.BinaryWriter.prototype.writePackedFixed32 = function (a, b) {
+  if (null != b && b.length) for (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(4 * b.length), a = 0; a < b.length; a++) this.encoder_.writeUint32(b[a]);
 };
 
-jspb.utils.splitZigzag64 = function (a) {
-  var b = 0 > a;
-  a = 2 * Math.abs(a);
-  jspb.utils.splitUint64(a);
-  a = jspb.utils.split64Low;
-  var c = jspb.utils.split64High;
-  b && (0 == a ? 0 == c ? c = a = 4294967295 : (c--, a = 4294967295) : a--);
-  jspb.utils.split64Low = a;
-  jspb.utils.split64High = c;
+jspb.BinaryWriter.prototype.writePackedFixed64 = function (a, b) {
+  if (null != b && b.length) for (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(8 * b.length), a = 0; a < b.length; a++) this.encoder_.writeUint64(b[a]);
 };
 
-jspb.utils.splitFloat32 = function (a) {
-  var b = 0 > a ? 1 : 0;
-  a = b ? -a : a;
-  if (0 === a) 0 < 1 / a ? (jspb.utils.split64High = 0, jspb.utils.split64Low = 0) : (jspb.utils.split64High = 0, jspb.utils.split64Low = 2147483648);else if (isNaN(a)) jspb.utils.split64High = 0, jspb.utils.split64Low = 2147483647;else if (a > jspb.BinaryConstants.FLOAT32_MAX) jspb.utils.split64High = 0, jspb.utils.split64Low = (b << 31 | 2139095040) >>> 0;else if (a < jspb.BinaryConstants.FLOAT32_MIN) a = Math.round(a / Math.pow(2, -149)), jspb.utils.split64High = 0, jspb.utils.split64Low = (b << 31 | a) >>> 0;else {
-    var c = Math.floor(Math.log(a) / Math.LN2);
-    a *= Math.pow(2, -c);
-    a = Math.round(a * jspb.BinaryConstants.TWO_TO_23) & 8388607;
-    jspb.utils.split64High = 0;
-    jspb.utils.split64Low = (b << 31 | c + 127 << 23 | a) >>> 0;
+jspb.BinaryWriter.prototype.writePackedFixed64String = function (a, b) {
+  if (null != b && b.length) for (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(8 * b.length), a = 0; a < b.length; a++) {
+    var c = jspb.arith.UInt64.fromString(b[a]);
+    this.encoder_.writeSplitFixed64(c.lo, c.hi);
   }
 };
 
-jspb.utils.splitFloat64 = function (a) {
-  var b = 0 > a ? 1 : 0;
-  a = b ? -a : a;
-  if (0 === a) jspb.utils.split64High = 0 < 1 / a ? 0 : 2147483648, jspb.utils.split64Low = 0;else if (isNaN(a)) jspb.utils.split64High = 2147483647, jspb.utils.split64Low = 4294967295;else if (a > jspb.BinaryConstants.FLOAT64_MAX) jspb.utils.split64High = (b << 31 | 2146435072) >>> 0, jspb.utils.split64Low = 0;else if (a < jspb.BinaryConstants.FLOAT64_MIN) {
-    var c = a / Math.pow(2, -1074);
-    a = c / jspb.BinaryConstants.TWO_TO_32;
-    jspb.utils.split64High = (b << 31 | a) >>> 0;
-    jspb.utils.split64Low = c >>> 0;
-  } else {
-    c = a;
-    var d = 0;
-    if (2 <= c) for (; 2 <= c && 1023 > d;) d++, c /= 2;else for (; 1 > c && -1022 < d;) c *= 2, d--;
-    c = a * Math.pow(2, -d);
-    a = c * jspb.BinaryConstants.TWO_TO_20 & 1048575;
-    c = c * jspb.BinaryConstants.TWO_TO_52 >>> 0;
-    jspb.utils.split64High = (b << 31 | d + 1023 << 20 | a) >>> 0;
-    jspb.utils.split64Low = c;
-  }
+jspb.BinaryWriter.prototype.writePackedSfixed32 = function (a, b) {
+  if (null != b && b.length) for (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(4 * b.length), a = 0; a < b.length; a++) this.encoder_.writeInt32(b[a]);
 };
 
-jspb.utils.splitHash64 = function (a) {
-  var b = a.charCodeAt(0),
-      c = a.charCodeAt(1),
-      d = a.charCodeAt(2),
-      e = a.charCodeAt(3),
-      f = a.charCodeAt(4),
-      g = a.charCodeAt(5),
-      h = a.charCodeAt(6);
-  a = a.charCodeAt(7);
-  jspb.utils.split64Low = b + (c << 8) + (d << 16) + (e << 24) >>> 0;
-  jspb.utils.split64High = f + (g << 8) + (h << 16) + (a << 24) >>> 0;
+jspb.BinaryWriter.prototype.writePackedSfixed64 = function (a, b) {
+  if (null != b && b.length) for (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(8 * b.length), a = 0; a < b.length; a++) this.encoder_.writeInt64(b[a]);
 };
 
-jspb.utils.joinUint64 = function (a, b) {
-  return b * jspb.BinaryConstants.TWO_TO_32 + (a >>> 0);
+jspb.BinaryWriter.prototype.writePackedSfixed64String = function (a, b) {
+  if (null != b && b.length) for (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(8 * b.length), a = 0; a < b.length; a++) this.encoder_.writeInt64String(b[a]);
 };
 
-jspb.utils.joinInt64 = function (a, b) {
-  var c = b & 2147483648;
-  c && (a = ~a + 1 >>> 0, b = ~b >>> 0, 0 == a && (b = b + 1 >>> 0));
-  a = jspb.utils.joinUint64(a, b);
-  return c ? -a : a;
+jspb.BinaryWriter.prototype.writePackedFloat = function (a, b) {
+  if (null != b && b.length) for (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(4 * b.length), a = 0; a < b.length; a++) this.encoder_.writeFloat(b[a]);
 };
 
-jspb.utils.toZigzag64 = function (a, b, c) {
-  var d = b >> 31;
-  return c(a << 1 ^ d, (b << 1 | a >>> 31) ^ d);
+jspb.BinaryWriter.prototype.writePackedDouble = function (a, b) {
+  if (null != b && b.length) for (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(8 * b.length), a = 0; a < b.length; a++) this.encoder_.writeDouble(b[a]);
 };
 
-jspb.utils.joinZigzag64 = function (a, b) {
-  return jspb.utils.fromZigzag64(a, b, jspb.utils.joinInt64);
+jspb.BinaryWriter.prototype.writePackedBool = function (a, b) {
+  if (null != b && b.length) for (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(b.length), a = 0; a < b.length; a++) this.encoder_.writeBool(b[a]);
 };
 
-jspb.utils.fromZigzag64 = function (a, b, c) {
-  var d = -(a & 1);
-  return c((a >>> 1 | b << 31) ^ d, b >>> 1 ^ d);
+jspb.BinaryWriter.prototype.writePackedEnum = function (a, b) {
+  if (null != b && b.length) {
+    a = this.beginDelimited_(a);
+
+    for (var c = 0; c < b.length; c++) this.encoder_.writeEnum(b[c]);
+
+    this.endDelimited_(a);
+  }
 };
 
-jspb.utils.joinFloat32 = function (a, b) {
-  b = 2 * (a >> 31) + 1;
-  var c = a >>> 23 & 255;
-  a &= 8388607;
-  return 255 == c ? a ? NaN : Infinity * b : 0 == c ? b * Math.pow(2, -149) * a : b * Math.pow(2, c - 150) * (a + Math.pow(2, 23));
+jspb.BinaryWriter.prototype.writePackedFixedHash64 = function (a, b) {
+  if (null != b && b.length) for (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(8 * b.length), a = 0; a < b.length; a++) this.encoder_.writeFixedHash64(b[a]);
 };
 
-jspb.utils.joinFloat64 = function (a, b) {
-  var c = 2 * (b >> 31) + 1,
-      d = b >>> 20 & 2047;
-  a = jspb.BinaryConstants.TWO_TO_32 * (b & 1048575) + a;
-  return 2047 == d ? a ? NaN : Infinity * c : 0 == d ? c * Math.pow(2, -1074) * a : c * Math.pow(2, d - 1075) * (a + jspb.BinaryConstants.TWO_TO_52);
-};
+jspb.BinaryWriter.prototype.writePackedVarintHash64 = function (a, b) {
+  if (null != b && b.length) {
+    a = this.beginDelimited_(a);
 
-jspb.utils.joinHash64 = function (a, b) {
-  return String.fromCharCode(a >>> 0 & 255, a >>> 8 & 255, a >>> 16 & 255, a >>> 24 & 255, b >>> 0 & 255, b >>> 8 & 255, b >>> 16 & 255, b >>> 24 & 255);
+    for (var c = 0; c < b.length; c++) this.encoder_.writeVarintHash64(b[c]);
+
+    this.endDelimited_(a);
+  }
 };
 
-jspb.utils.DIGITS = "0123456789abcdef".split("");
-jspb.utils.ZERO_CHAR_CODE_ = 48;
-jspb.utils.A_CHAR_CODE_ = 97;
+jspb.Map = function (a, b) {
+  this.arr_ = a;
+  this.valueCtor_ = b;
+  this.map_ = {};
+  this.arrClean = !0;
+  0 < this.arr_.length && this.loadFromArray_();
+};
 
-jspb.utils.joinUnsignedDecimalString = function (a, b) {
-  function c(a, b) {
-    a = a ? String(a) : "";
-    return b ? "0000000".slice(a.length) + a : a;
+jspb.Map.prototype.loadFromArray_ = function () {
+  for (var a = 0; a < this.arr_.length; a++) {
+    var b = this.arr_[a],
+        c = b[0];
+    this.map_[c.toString()] = new jspb.Map.Entry_(c, b[1]);
   }
 
-  if (2097151 >= b) return "" + (jspb.BinaryConstants.TWO_TO_32 * b + a);
-  var d = (a >>> 24 | b << 8) >>> 0 & 16777215;
-  b = b >> 16 & 65535;
-  a = (a & 16777215) + 6777216 * d + 6710656 * b;
-  d += 8147497 * b;
-  b *= 2;
-  1E7 <= a && (d += Math.floor(a / 1E7), a %= 1E7);
-  1E7 <= d && (b += Math.floor(d / 1E7), d %= 1E7);
-  return c(b, 0) + c(d, b) + c(a, 1);
+  this.arrClean = !0;
 };
 
-jspb.utils.joinSignedDecimalString = function (a, b) {
-  var c = b & 2147483648;
-  c && (a = ~a + 1 >>> 0, b = ~b + (0 == a ? 1 : 0) >>> 0);
-  a = jspb.utils.joinUnsignedDecimalString(a, b);
-  return c ? "-" + a : a;
-};
+jspb.Map.prototype.toArray = function () {
+  if (this.arrClean) {
+    if (this.valueCtor_) {
+      var a = this.map_,
+          b;
 
-jspb.utils.hash64ToDecimalString = function (a, b) {
-  jspb.utils.splitHash64(a);
-  a = jspb.utils.split64Low;
-  var c = jspb.utils.split64High;
-  return b ? jspb.utils.joinSignedDecimalString(a, c) : jspb.utils.joinUnsignedDecimalString(a, c);
-};
+      for (b in a) if (Object.prototype.hasOwnProperty.call(a, b)) {
+        var c = a[b].valueWrapper;
+        c && c.toArray();
+      }
+    }
+  } else {
+    this.arr_.length = 0;
+    a = this.stringKeys_();
+    a.sort();
 
-jspb.utils.hash64ArrayToDecimalStrings = function (a, b) {
-  for (var c = Array(a.length), d = 0; d < a.length; d++) c[d] = jspb.utils.hash64ToDecimalString(a[d], b);
+    for (b = 0; b < a.length; b++) {
+      var d = this.map_[a[b]];
+      (c = d.valueWrapper) && c.toArray();
+      this.arr_.push([d.key, d.value]);
+    }
 
-  return c;
+    this.arrClean = !0;
+  }
+
+  return this.arr_;
 };
 
-jspb.utils.decimalStringToHash64 = function (a) {
-  function b(a, b) {
-    for (var c = 0; 8 > c && (1 !== a || 0 < b); c++) b = a * e[c] + b, e[c] = b & 255, b >>>= 8;
+jspb.Map.prototype.toObject = function (a, b) {
+  for (var c = this.toArray(), d = [], e = 0; e < c.length; e++) {
+    var f = this.map_[c[e][0].toString()];
+    this.wrapEntry_(f);
+    var g = f.valueWrapper;
+    g ? (goog.asserts.assert(b), d.push([f.key, b(a, g)])) : d.push([f.key, f.value]);
   }
 
-  function c() {
-    for (var a = 0; 8 > a; a++) e[a] = ~e[a] & 255;
+  return d;
+};
+
+jspb.Map.fromObject = function (a, b, c) {
+  b = new jspb.Map([], b);
+
+  for (var d = 0; d < a.length; d++) {
+    var e = a[d][0],
+        f = c(a[d][1]);
+    b.set(e, f);
   }
 
-  goog.asserts.assert(0 < a.length);
-  var d = !1;
-  "-" === a[0] && (d = !0, a = a.slice(1));
+  return b;
+};
 
-  for (var e = [0, 0, 0, 0, 0, 0, 0, 0], f = 0; f < a.length; f++) b(10, a.charCodeAt(f) - jspb.utils.ZERO_CHAR_CODE_);
+jspb.Map.ArrayIteratorIterable_ = function (a) {
+  this.idx_ = 0;
+  this.arr_ = a;
+};
 
-  d && (c(), b(1, 1));
-  return goog.crypt.byteArrayToString(e);
+jspb.Map.ArrayIteratorIterable_.prototype.next = function () {
+  return this.idx_ < this.arr_.length ? {
+    done: !1,
+    value: this.arr_[this.idx_++]
+  } : {
+    done: !0,
+    value: void 0
+  };
 };
 
-jspb.utils.splitDecimalString = function (a) {
-  jspb.utils.splitHash64(jspb.utils.decimalStringToHash64(a));
+"undefined" != typeof Symbol && (jspb.Map.ArrayIteratorIterable_.prototype[Symbol.iterator] = function () {
+  return this;
+});
+
+jspb.Map.prototype.getLength = function () {
+  return this.stringKeys_().length;
 };
 
-jspb.utils.toHexDigit_ = function (a) {
-  return String.fromCharCode(10 > a ? jspb.utils.ZERO_CHAR_CODE_ + a : jspb.utils.A_CHAR_CODE_ - 10 + a);
+jspb.Map.prototype.clear = function () {
+  this.map_ = {};
+  this.arrClean = !1;
 };
 
-jspb.utils.fromHexCharCode_ = function (a) {
-  return a >= jspb.utils.A_CHAR_CODE_ ? a - jspb.utils.A_CHAR_CODE_ + 10 : a - jspb.utils.ZERO_CHAR_CODE_;
+jspb.Map.prototype.del = function (a) {
+  a = a.toString();
+  var b = this.map_.hasOwnProperty(a);
+  delete this.map_[a];
+  this.arrClean = !1;
+  return b;
 };
 
-jspb.utils.hash64ToHexString = function (a) {
-  var b = Array(18);
-  b[0] = "0";
-  b[1] = "x";
+jspb.Map.prototype.getEntryList = function () {
+  var a = [],
+      b = this.stringKeys_();
+  b.sort();
 
-  for (var c = 0; 8 > c; c++) {
-    var d = a.charCodeAt(7 - c);
-    b[2 * c + 2] = jspb.utils.toHexDigit_(d >> 4);
-    b[2 * c + 3] = jspb.utils.toHexDigit_(d & 15);
+  for (var c = 0; c < b.length; c++) {
+    var d = this.map_[b[c]];
+    a.push([d.key, d.value]);
   }
 
-  return b.join("");
+  return a;
 };
 
-jspb.utils.hexStringToHash64 = function (a) {
-  a = a.toLowerCase();
-  goog.asserts.assert(18 == a.length);
-  goog.asserts.assert("0" == a[0]);
-  goog.asserts.assert("x" == a[1]);
+jspb.Map.prototype.entries = function () {
+  var a = [],
+      b = this.stringKeys_();
+  b.sort();
 
-  for (var b = "", c = 0; 8 > c; c++) {
-    var d = jspb.utils.fromHexCharCode_(a.charCodeAt(2 * c + 2)),
-        e = jspb.utils.fromHexCharCode_(a.charCodeAt(2 * c + 3));
-    b = String.fromCharCode(16 * d + e) + b;
+  for (var c = 0; c < b.length; c++) {
+    var d = this.map_[b[c]];
+    a.push([d.key, this.wrapEntry_(d)]);
   }
 
-  return b;
-};
-
-jspb.utils.hash64ToNumber = function (a, b) {
-  jspb.utils.splitHash64(a);
-  a = jspb.utils.split64Low;
-  var c = jspb.utils.split64High;
-  return b ? jspb.utils.joinInt64(a, c) : jspb.utils.joinUint64(a, c);
+  return new jspb.Map.ArrayIteratorIterable_(a);
 };
 
-jspb.utils.numberToHash64 = function (a) {
-  jspb.utils.splitInt64(a);
-  return jspb.utils.joinHash64(jspb.utils.split64Low, jspb.utils.split64High);
-};
+jspb.Map.prototype.keys = function () {
+  var a = [],
+      b = this.stringKeys_();
+  b.sort();
 
-jspb.utils.countVarints = function (a, b, c) {
-  for (var d = 0, e = b; e < c; e++) d += a[e] >> 7;
+  for (var c = 0; c < b.length; c++) a.push(this.map_[b[c]].key);
 
-  return c - b - d;
+  return new jspb.Map.ArrayIteratorIterable_(a);
 };
 
-jspb.utils.countVarintFields = function (a, b, c, d) {
-  var e = 0;
-  d = 8 * d + jspb.BinaryConstants.WireType.VARINT;
-  if (128 > d) for (; b < c && a[b++] == d;) for (e++;;) {
-    var f = a[b++];
-    if (0 == (f & 128)) break;
-  } else for (; b < c;) {
-    for (f = d; 128 < f;) {
-      if (a[b] != (f & 127 | 128)) return e;
-      b++;
-      f >>= 7;
-    }
+jspb.Map.prototype.values = function () {
+  var a = [],
+      b = this.stringKeys_();
+  b.sort();
 
-    if (a[b++] != f) break;
+  for (var c = 0; c < b.length; c++) a.push(this.wrapEntry_(this.map_[b[c]]));
 
-    for (e++; f = a[b++], 0 != (f & 128););
-  }
-  return e;
+  return new jspb.Map.ArrayIteratorIterable_(a);
 };
 
-jspb.utils.countFixedFields_ = function (a, b, c, d, e) {
-  var f = 0;
-  if (128 > d) for (; b < c && a[b++] == d;) f++, b += e;else for (; b < c;) {
-    for (var g = d; 128 < g;) {
-      if (a[b++] != (g & 127 | 128)) return f;
-      g >>= 7;
-    }
+jspb.Map.prototype.forEach = function (a, b) {
+  var c = this.stringKeys_();
+  c.sort();
 
-    if (a[b++] != g) break;
-    f++;
-    b += e;
+  for (var d = 0; d < c.length; d++) {
+    var e = this.map_[c[d]];
+    a.call(b, this.wrapEntry_(e), e.key, this);
   }
-  return f;
 };
 
-jspb.utils.countFixed32Fields = function (a, b, c, d) {
-  return jspb.utils.countFixedFields_(a, b, c, 8 * d + jspb.BinaryConstants.WireType.FIXED32, 4);
+jspb.Map.prototype.set = function (a, b) {
+  var c = new jspb.Map.Entry_(a);
+  this.valueCtor_ ? (c.valueWrapper = b, c.value = b.toArray()) : c.value = b;
+  this.map_[a.toString()] = c;
+  this.arrClean = !1;
+  return this;
 };
 
-jspb.utils.countFixed64Fields = function (a, b, c, d) {
-  return jspb.utils.countFixedFields_(a, b, c, 8 * d + jspb.BinaryConstants.WireType.FIXED64, 8);
+jspb.Map.prototype.wrapEntry_ = function (a) {
+  return this.valueCtor_ ? (a.valueWrapper || (a.valueWrapper = new this.valueCtor_(a.value)), a.valueWrapper) : a.value;
 };
 
-jspb.utils.countDelimitedFields = function (a, b, c, d) {
-  var e = 0;
+jspb.Map.prototype.get = function (a) {
+  if (a = this.map_[a.toString()]) return this.wrapEntry_(a);
+};
 
-  for (d = 8 * d + jspb.BinaryConstants.WireType.DELIMITED; b < c;) {
-    for (var f = d; 128 < f;) {
-      if (a[b++] != (f & 127 | 128)) return e;
-      f >>= 7;
-    }
+jspb.Map.prototype.has = function (a) {
+  return a.toString() in this.map_;
+};
 
-    if (a[b++] != f) break;
-    e++;
+jspb.Map.prototype.serializeBinary = function (a, b, c, d, e) {
+  var f = this.stringKeys_();
+  f.sort();
 
-    for (var g = 0, h = 1; f = a[b++], g += (f & 127) * h, h *= 128, 0 != (f & 128););
+  for (var g = 0; g < f.length; g++) {
+    var h = this.map_[f[g]];
+    b.beginSubMessage(a);
+    c.call(b, 1, h.key);
+    this.valueCtor_ ? d.call(b, 2, this.wrapEntry_(h), e) : d.call(b, 2, h.value);
+    b.endSubMessage();
+  }
+};
 
-    b += g;
+jspb.Map.deserializeBinary = function (a, b, c, d, e, f, g) {
+  for (; b.nextField() && !b.isEndGroup();) {
+    var h = b.getFieldNumber();
+    1 == h ? f = c.call(b) : 2 == h && (a.valueCtor_ ? (goog.asserts.assert(e), g || (g = new a.valueCtor_()), d.call(b, g, e)) : g = d.call(b));
   }
 
-  return e;
+  goog.asserts.assert(void 0 != f);
+  goog.asserts.assert(void 0 != g);
+  a.set(f, g);
 };
 
-jspb.utils.debugBytesToTextFormat = function (a) {
-  var b = '"';
-
-  if (a) {
-    a = jspb.utils.byteSourceToUint8Array(a);
+jspb.Map.prototype.stringKeys_ = function () {
+  var a = this.map_,
+      b = [],
+      c;
 
-    for (var c = 0; c < a.length; c++) b += "\\x", 16 > a[c] && (b += "0"), b += a[c].toString(16);
-  }
+  for (c in a) Object.prototype.hasOwnProperty.call(a, c) && b.push(c);
 
-  return b + '"';
+  return b;
 };
 
-jspb.utils.debugScalarToTextFormat = function (a) {
-  return "string" === typeof a ? goog.string.quote(a) : a.toString();
+jspb.Map.Entry_ = function (a, b) {
+  this.key = a;
+  this.value = b;
+  this.valueWrapper = void 0;
 };
 
-jspb.utils.stringToByteArray = function (a) {
-  for (var b = new Uint8Array(a.length), c = 0; c < a.length; c++) {
-    var d = a.charCodeAt(c);
-    if (255 < d) throw Error("Conversion error: string contains codepoint outside of byte range");
-    b[c] = d;
-  }
-
-  return b;
+jspb.ExtensionFieldInfo = function (a, b, c, d, e) {
+  this.fieldIndex = a;
+  this.fieldName = b;
+  this.ctor = c;
+  this.toObjectFn = d;
+  this.isRepeated = e;
 };
 
-jspb.utils.byteSourceToUint8Array = function (a) {
-  if (a.constructor === Uint8Array) return a;
-  if (a.constructor === ArrayBuffer || "undefined" != typeof Buffer && a.constructor === Buffer || a.constructor === Array) return new Uint8Array(a);
-  if (a.constructor === String) return goog.crypt.base64.decodeStringToUint8Array(a);
-  goog.asserts.fail("Type not convertible to Uint8Array.");
-  return new Uint8Array(0);
+jspb.ExtensionFieldBinaryInfo = function (a, b, c, d, e, f) {
+  this.fieldInfo = a;
+  this.binaryReaderFn = b;
+  this.binaryWriterFn = c;
+  this.binaryMessageSerializeFn = d;
+  this.binaryMessageDeserializeFn = e;
+  this.isPacked = f;
 };
 
-jspb.BinaryDecoder = function (a, b, c) {
-  this.bytes_ = null;
-  this.cursor_ = this.end_ = this.start_ = 0;
-  this.error_ = !1;
-  a && this.setBlock(a, b, c);
+jspb.ExtensionFieldInfo.prototype.isMessageType = function () {
+  return !!this.ctor;
 };
 
-jspb.BinaryDecoder.instanceCache_ = [];
+jspb.Message = function () {};
 
-jspb.BinaryDecoder.alloc = function (a, b, c) {
-  if (jspb.BinaryDecoder.instanceCache_.length) {
-    var d = jspb.BinaryDecoder.instanceCache_.pop();
-    a && d.setBlock(a, b, c);
-    return d;
-  }
+jspb.Message.GENERATE_TO_OBJECT = !0;
+jspb.Message.GENERATE_FROM_OBJECT = !goog.DISALLOW_TEST_ONLY_CODE;
+jspb.Message.GENERATE_TO_STRING = !0;
+jspb.Message.ASSUME_LOCAL_ARRAYS = !1;
+jspb.Message.SERIALIZE_EMPTY_TRAILING_FIELDS = !0;
+jspb.Message.SUPPORTS_UINT8ARRAY_ = "function" == typeof Uint8Array;
 
-  return new jspb.BinaryDecoder(a, b, c);
+jspb.Message.prototype.getJsPbMessageId = function () {
+  return this.messageId_;
 };
 
-jspb.BinaryDecoder.prototype.free = function () {
-  this.clear();
-  100 > jspb.BinaryDecoder.instanceCache_.length && jspb.BinaryDecoder.instanceCache_.push(this);
+jspb.Message.getIndex_ = function (a, b) {
+  return b + a.arrayIndexOffset_;
 };
 
-jspb.BinaryDecoder.prototype.clone = function () {
-  return jspb.BinaryDecoder.alloc(this.bytes_, this.start_, this.end_ - this.start_);
-};
+jspb.Message.hiddenES6Property_ = function () {};
 
-jspb.BinaryDecoder.prototype.clear = function () {
-  this.bytes_ = null;
-  this.cursor_ = this.end_ = this.start_ = 0;
-  this.error_ = !1;
+jspb.Message.getFieldNumber_ = function (a, b) {
+  return b - a.arrayIndexOffset_;
 };
 
-jspb.BinaryDecoder.prototype.getBuffer = function () {
-  return this.bytes_;
+jspb.Message.initialize = function (a, b, c, d, e, f) {
+  a.wrappers_ = null;
+  b || (b = c ? [c] : []);
+  a.messageId_ = c ? String(c) : void 0;
+  a.arrayIndexOffset_ = 0 === c ? -1 : 0;
+  a.array = b;
+  jspb.Message.initPivotAndExtensionObject_(a, d);
+  a.convertedPrimitiveFields_ = {};
+  jspb.Message.SERIALIZE_EMPTY_TRAILING_FIELDS || (a.repeatedFields = e);
+  if (e) for (b = 0; b < e.length; b++) c = e[b], c < a.pivot_ ? (c = jspb.Message.getIndex_(a, c), a.array[c] = a.array[c] || jspb.Message.EMPTY_LIST_SENTINEL_) : (jspb.Message.maybeInitEmptyExtensionObject_(a), a.extensionObject_[c] = a.extensionObject_[c] || jspb.Message.EMPTY_LIST_SENTINEL_);
+  if (f && f.length) for (b = 0; b < f.length; b++) jspb.Message.computeOneofCase(a, f[b]);
 };
 
-jspb.BinaryDecoder.prototype.setBlock = function (a, b, c) {
-  this.bytes_ = jspb.utils.byteSourceToUint8Array(a);
-  this.start_ = void 0 !== b ? b : 0;
-  this.end_ = void 0 !== c ? this.start_ + c : this.bytes_.length;
-  this.cursor_ = this.start_;
-};
+jspb.Message.EMPTY_LIST_SENTINEL_ = goog.DEBUG && Object.freeze ? Object.freeze([]) : [];
 
-jspb.BinaryDecoder.prototype.getEnd = function () {
-  return this.end_;
+jspb.Message.isArray_ = function (a) {
+  return jspb.Message.ASSUME_LOCAL_ARRAYS ? a instanceof Array : Array.isArray(a);
 };
 
-jspb.BinaryDecoder.prototype.setEnd = function (a) {
-  this.end_ = a;
+jspb.Message.isExtensionObject_ = function (a) {
+  return null !== a && "object" == typeof a && !jspb.Message.isArray_(a) && !(jspb.Message.SUPPORTS_UINT8ARRAY_ && a instanceof Uint8Array);
 };
 
-jspb.BinaryDecoder.prototype.reset = function () {
-  this.cursor_ = this.start_;
-};
+jspb.Message.initPivotAndExtensionObject_ = function (a, b) {
+  var c = a.array.length,
+      d = -1;
 
-jspb.BinaryDecoder.prototype.getCursor = function () {
-  return this.cursor_;
-};
+  if (c && (d = c - 1, c = a.array[d], jspb.Message.isExtensionObject_(c))) {
+    a.pivot_ = jspb.Message.getFieldNumber_(a, d);
+    a.extensionObject_ = c;
+    return;
+  }
 
-jspb.BinaryDecoder.prototype.setCursor = function (a) {
-  this.cursor_ = a;
+  -1 < b ? (a.pivot_ = Math.max(b, jspb.Message.getFieldNumber_(a, d + 1)), a.extensionObject_ = null) : a.pivot_ = Number.MAX_VALUE;
 };
 
-jspb.BinaryDecoder.prototype.advance = function (a) {
-  this.cursor_ += a;
-  goog.asserts.assert(this.cursor_ <= this.end_);
+jspb.Message.maybeInitEmptyExtensionObject_ = function (a) {
+  var b = jspb.Message.getIndex_(a, a.pivot_);
+  a.array[b] || (a.extensionObject_ = a.array[b] = {});
 };
 
-jspb.BinaryDecoder.prototype.atEnd = function () {
-  return this.cursor_ == this.end_;
-};
+jspb.Message.toObjectList = function (a, b, c) {
+  for (var d = [], e = 0; e < a.length; e++) d[e] = b.call(a[e], c, a[e]);
 
-jspb.BinaryDecoder.prototype.pastEnd = function () {
-  return this.cursor_ > this.end_;
+  return d;
 };
 
-jspb.BinaryDecoder.prototype.getError = function () {
-  return this.error_ || 0 > this.cursor_ || this.cursor_ > this.end_;
-};
+jspb.Message.toObjectExtension = function (a, b, c, d, e) {
+  for (var f in c) {
+    var g = c[f],
+        h = d.call(a, g);
 
-jspb.BinaryDecoder.prototype.readSplitVarint64 = function (a) {
-  for (var b = 128, c = 0, d = 0, e = 0; 4 > e && 128 <= b; e++) b = this.bytes_[this.cursor_++], c |= (b & 127) << 7 * e;
+    if (null != h) {
+      for (var k in g.fieldName) if (g.fieldName.hasOwnProperty(k)) break;
 
-  128 <= b && (b = this.bytes_[this.cursor_++], c |= (b & 127) << 28, d |= (b & 127) >> 4);
-  if (128 <= b) for (e = 0; 5 > e && 128 <= b; e++) b = this.bytes_[this.cursor_++], d |= (b & 127) << 7 * e + 3;
-  if (128 > b) return a(c >>> 0, d >>> 0);
-  goog.asserts.fail("Failed to read varint, encoding is invalid.");
-  this.error_ = !0;
+      b[k] = g.toObjectFn ? g.isRepeated ? jspb.Message.toObjectList(h, g.toObjectFn, e) : g.toObjectFn(e, h) : h;
+    }
+  }
 };
 
-jspb.BinaryDecoder.prototype.readSplitZigzagVarint64 = function (a) {
-  return this.readSplitVarint64(function (b, c) {
-    return jspb.utils.fromZigzag64(b, c, a);
-  });
+jspb.Message.serializeBinaryExtensions = function (a, b, c, d) {
+  for (var e in c) {
+    var f = c[e],
+        g = f.fieldInfo;
+    if (!f.binaryWriterFn) throw Error("Message extension present that was generated without binary serialization support");
+    var h = d.call(a, g);
+    if (null != h) if (g.isMessageType()) {
+      if (f.binaryMessageSerializeFn) f.binaryWriterFn.call(b, g.fieldIndex, h, f.binaryMessageSerializeFn);else throw Error("Message extension present holding submessage without binary support enabled, and message is being serialized to binary format");
+    } else f.binaryWriterFn.call(b, g.fieldIndex, h);
+  }
 };
 
-jspb.BinaryDecoder.prototype.readSplitFixed64 = function (a) {
-  var b = this.bytes_,
-      c = this.cursor_;
-  this.cursor_ += 8;
+jspb.Message.readBinaryExtension = function (a, b, c, d, e) {
+  var f = c[b.getFieldNumber()];
 
-  for (var d = 0, e = 0, f = c + 7; f >= c; f--) d = d << 8 | b[f], e = e << 8 | b[f + 4];
+  if (f) {
+    c = f.fieldInfo;
+    if (!f.binaryReaderFn) throw Error("Deserializing extension whose generated code does not support binary format");
 
-  return a(d, e);
+    if (c.isMessageType()) {
+      var g = new c.ctor();
+      f.binaryReaderFn.call(b, g, f.binaryMessageDeserializeFn);
+    } else g = f.binaryReaderFn.call(b);
+
+    c.isRepeated && !f.isPacked ? (b = d.call(a, c)) ? b.push(g) : e.call(a, c, [g]) : e.call(a, c, g);
+  } else b.skipField();
 };
 
-jspb.BinaryDecoder.prototype.skipVarint = function () {
-  for (; this.bytes_[this.cursor_] & 128;) this.cursor_++;
+jspb.Message.getField = function (a, b) {
+  if (b < a.pivot_) {
+    b = jspb.Message.getIndex_(a, b);
+    var c = a.array[b];
+    return c === jspb.Message.EMPTY_LIST_SENTINEL_ ? a.array[b] = [] : c;
+  }
 
-  this.cursor_++;
+  if (a.extensionObject_) return c = a.extensionObject_[b], c === jspb.Message.EMPTY_LIST_SENTINEL_ ? a.extensionObject_[b] = [] : c;
 };
 
-jspb.BinaryDecoder.prototype.unskipVarint = function (a) {
-  for (; 128 < a;) this.cursor_--, a >>>= 7;
+jspb.Message.getRepeatedField = function (a, b) {
+  return jspb.Message.getField(a, b);
+};
 
-  this.cursor_--;
+jspb.Message.getOptionalFloatingPointField = function (a, b) {
+  a = jspb.Message.getField(a, b);
+  return null == a ? a : +a;
 };
 
-jspb.BinaryDecoder.prototype.readUnsignedVarint32 = function () {
-  var a = this.bytes_;
-  var b = a[this.cursor_ + 0];
-  var c = b & 127;
-  if (128 > b) return this.cursor_ += 1, goog.asserts.assert(this.cursor_ <= this.end_), c;
-  b = a[this.cursor_ + 1];
-  c |= (b & 127) << 7;
-  if (128 > b) return this.cursor_ += 2, goog.asserts.assert(this.cursor_ <= this.end_), c;
-  b = a[this.cursor_ + 2];
-  c |= (b & 127) << 14;
-  if (128 > b) return this.cursor_ += 3, goog.asserts.assert(this.cursor_ <= this.end_), c;
-  b = a[this.cursor_ + 3];
-  c |= (b & 127) << 21;
-  if (128 > b) return this.cursor_ += 4, goog.asserts.assert(this.cursor_ <= this.end_), c;
-  b = a[this.cursor_ + 4];
-  c |= (b & 15) << 28;
-  if (128 > b) return this.cursor_ += 5, goog.asserts.assert(this.cursor_ <= this.end_), c >>> 0;
-  this.cursor_ += 5;
-  128 <= a[this.cursor_++] && 128 <= a[this.cursor_++] && 128 <= a[this.cursor_++] && 128 <= a[this.cursor_++] && 128 <= a[this.cursor_++] && goog.asserts.assert(!1);
-  goog.asserts.assert(this.cursor_ <= this.end_);
-  return c;
+jspb.Message.getBooleanField = function (a, b) {
+  a = jspb.Message.getField(a, b);
+  return null == a ? a : !!a;
 };
 
-jspb.BinaryDecoder.prototype.readSignedVarint32 = jspb.BinaryDecoder.prototype.readUnsignedVarint32;
+jspb.Message.getRepeatedFloatingPointField = function (a, b) {
+  var c = jspb.Message.getRepeatedField(a, b);
+  a.convertedPrimitiveFields_ || (a.convertedPrimitiveFields_ = {});
 
-jspb.BinaryDecoder.prototype.readUnsignedVarint32String = function () {
-  return this.readUnsignedVarint32().toString();
-};
+  if (!a.convertedPrimitiveFields_[b]) {
+    for (var d = 0; d < c.length; d++) c[d] = +c[d];
 
-jspb.BinaryDecoder.prototype.readSignedVarint32String = function () {
-  return this.readSignedVarint32().toString();
-};
+    a.convertedPrimitiveFields_[b] = !0;
+  }
 
-jspb.BinaryDecoder.prototype.readZigzagVarint32 = function () {
-  var a = this.readUnsignedVarint32();
-  return a >>> 1 ^ -(a & 1);
+  return c;
 };
 
-jspb.BinaryDecoder.prototype.readUnsignedVarint64 = function () {
-  return this.readSplitVarint64(jspb.utils.joinUint64);
-};
+jspb.Message.getRepeatedBooleanField = function (a, b) {
+  var c = jspb.Message.getRepeatedField(a, b);
+  a.convertedPrimitiveFields_ || (a.convertedPrimitiveFields_ = {});
 
-jspb.BinaryDecoder.prototype.readUnsignedVarint64String = function () {
-  return this.readSplitVarint64(jspb.utils.joinUnsignedDecimalString);
-};
+  if (!a.convertedPrimitiveFields_[b]) {
+    for (var d = 0; d < c.length; d++) c[d] = !!c[d];
 
-jspb.BinaryDecoder.prototype.readSignedVarint64 = function () {
-  return this.readSplitVarint64(jspb.utils.joinInt64);
-};
+    a.convertedPrimitiveFields_[b] = !0;
+  }
 
-jspb.BinaryDecoder.prototype.readSignedVarint64String = function () {
-  return this.readSplitVarint64(jspb.utils.joinSignedDecimalString);
+  return c;
 };
 
-jspb.BinaryDecoder.prototype.readZigzagVarint64 = function () {
-  return this.readSplitVarint64(jspb.utils.joinZigzag64);
+jspb.Message.bytesAsB64 = function (a) {
+  if (null == a || "string" === typeof a) return a;
+  if (jspb.Message.SUPPORTS_UINT8ARRAY_ && a instanceof Uint8Array) return goog.crypt.base64.encodeByteArray(a);
+  goog.asserts.fail("Cannot coerce to b64 string: " + goog.typeOf(a));
+  return null;
 };
 
-jspb.BinaryDecoder.prototype.readZigzagVarintHash64 = function () {
-  return this.readSplitZigzagVarint64(jspb.utils.joinHash64);
+jspb.Message.bytesAsU8 = function (a) {
+  if (null == a || a instanceof Uint8Array) return a;
+  if ("string" === typeof a) return goog.crypt.base64.decodeStringToUint8Array(a);
+  goog.asserts.fail("Cannot coerce to Uint8Array: " + goog.typeOf(a));
+  return null;
 };
 
-jspb.BinaryDecoder.prototype.readZigzagVarint64String = function () {
-  return this.readSplitZigzagVarint64(jspb.utils.joinSignedDecimalString);
+jspb.Message.bytesListAsB64 = function (a) {
+  jspb.Message.assertConsistentTypes_(a);
+  return a.length && "string" !== typeof a[0] ? goog.array.map(a, jspb.Message.bytesAsB64) : a;
 };
 
-jspb.BinaryDecoder.prototype.readUint8 = function () {
-  var a = this.bytes_[this.cursor_ + 0];
-  this.cursor_ += 1;
-  goog.asserts.assert(this.cursor_ <= this.end_);
-  return a;
+jspb.Message.bytesListAsU8 = function (a) {
+  jspb.Message.assertConsistentTypes_(a);
+  return !a.length || a[0] instanceof Uint8Array ? a : goog.array.map(a, jspb.Message.bytesAsU8);
 };
 
-jspb.BinaryDecoder.prototype.readUint16 = function () {
-  var a = this.bytes_[this.cursor_ + 0],
-      b = this.bytes_[this.cursor_ + 1];
-  this.cursor_ += 2;
-  goog.asserts.assert(this.cursor_ <= this.end_);
-  return a << 0 | b << 8;
+jspb.Message.assertConsistentTypes_ = function (a) {
+  if (goog.DEBUG && a && 1 < a.length) {
+    var b = goog.typeOf(a[0]);
+    goog.array.forEach(a, function (a) {
+      goog.typeOf(a) != b && goog.asserts.fail("Inconsistent type in JSPB repeated field array. Got " + goog.typeOf(a) + " expected " + b);
+    });
+  }
 };
 
-jspb.BinaryDecoder.prototype.readUint32 = function () {
-  var a = this.bytes_[this.cursor_ + 0],
-      b = this.bytes_[this.cursor_ + 1],
-      c = this.bytes_[this.cursor_ + 2],
-      d = this.bytes_[this.cursor_ + 3];
-  this.cursor_ += 4;
-  goog.asserts.assert(this.cursor_ <= this.end_);
-  return (a << 0 | b << 8 | c << 16 | d << 24) >>> 0;
+jspb.Message.getFieldWithDefault = function (a, b, c) {
+  a = jspb.Message.getField(a, b);
+  return null == a ? c : a;
 };
 
-jspb.BinaryDecoder.prototype.readUint64 = function () {
-  var a = this.readUint32(),
-      b = this.readUint32();
-  return jspb.utils.joinUint64(a, b);
+jspb.Message.getBooleanFieldWithDefault = function (a, b, c) {
+  a = jspb.Message.getBooleanField(a, b);
+  return null == a ? c : a;
 };
 
-jspb.BinaryDecoder.prototype.readUint64String = function () {
-  var a = this.readUint32(),
-      b = this.readUint32();
-  return jspb.utils.joinUnsignedDecimalString(a, b);
+jspb.Message.getFloatingPointFieldWithDefault = function (a, b, c) {
+  a = jspb.Message.getOptionalFloatingPointField(a, b);
+  return null == a ? c : a;
 };
 
-jspb.BinaryDecoder.prototype.readInt8 = function () {
-  var a = this.bytes_[this.cursor_ + 0];
-  this.cursor_ += 1;
-  goog.asserts.assert(this.cursor_ <= this.end_);
-  return a << 24 >> 24;
-};
+jspb.Message.getFieldProto3 = jspb.Message.getFieldWithDefault;
 
-jspb.BinaryDecoder.prototype.readInt16 = function () {
-  var a = this.bytes_[this.cursor_ + 0],
-      b = this.bytes_[this.cursor_ + 1];
-  this.cursor_ += 2;
-  goog.asserts.assert(this.cursor_ <= this.end_);
-  return (a << 0 | b << 8) << 16 >> 16;
-};
+jspb.Message.getMapField = function (a, b, c, d) {
+  a.wrappers_ || (a.wrappers_ = {});
+  if (b in a.wrappers_) return a.wrappers_[b];
+  var e = jspb.Message.getField(a, b);
 
-jspb.BinaryDecoder.prototype.readInt32 = function () {
-  var a = this.bytes_[this.cursor_ + 0],
-      b = this.bytes_[this.cursor_ + 1],
-      c = this.bytes_[this.cursor_ + 2],
-      d = this.bytes_[this.cursor_ + 3];
-  this.cursor_ += 4;
-  goog.asserts.assert(this.cursor_ <= this.end_);
-  return a << 0 | b << 8 | c << 16 | d << 24;
-};
+  if (!e) {
+    if (c) return;
+    e = [];
+    jspb.Message.setField(a, b, e);
+  }
 
-jspb.BinaryDecoder.prototype.readInt64 = function () {
-  var a = this.readUint32(),
-      b = this.readUint32();
-  return jspb.utils.joinInt64(a, b);
+  return a.wrappers_[b] = new jspb.Map(e, d);
 };
 
-jspb.BinaryDecoder.prototype.readInt64String = function () {
-  var a = this.readUint32(),
-      b = this.readUint32();
-  return jspb.utils.joinSignedDecimalString(a, b);
+jspb.Message.setField = function (a, b, c) {
+  goog.asserts.assertInstanceof(a, jspb.Message);
+  b < a.pivot_ ? a.array[jspb.Message.getIndex_(a, b)] = c : (jspb.Message.maybeInitEmptyExtensionObject_(a), a.extensionObject_[b] = c);
+  return a;
 };
 
-jspb.BinaryDecoder.prototype.readFloat = function () {
-  var a = this.readUint32();
-  return jspb.utils.joinFloat32(a, 0);
+jspb.Message.setProto3IntField = function (a, b, c) {
+  return jspb.Message.setFieldIgnoringDefault_(a, b, c, 0);
 };
 
-jspb.BinaryDecoder.prototype.readDouble = function () {
-  var a = this.readUint32(),
-      b = this.readUint32();
-  return jspb.utils.joinFloat64(a, b);
+jspb.Message.setProto3FloatField = function (a, b, c) {
+  return jspb.Message.setFieldIgnoringDefault_(a, b, c, 0);
 };
 
-jspb.BinaryDecoder.prototype.readBool = function () {
-  return !!this.bytes_[this.cursor_++];
+jspb.Message.setProto3BooleanField = function (a, b, c) {
+  return jspb.Message.setFieldIgnoringDefault_(a, b, c, !1);
 };
 
-jspb.BinaryDecoder.prototype.readEnum = function () {
-  return this.readSignedVarint32();
+jspb.Message.setProto3StringField = function (a, b, c) {
+  return jspb.Message.setFieldIgnoringDefault_(a, b, c, "");
 };
 
-jspb.BinaryDecoder.prototype.readString = function (a) {
-  var b = this.bytes_,
-      c = this.cursor_;
-  a = c + a;
-
-  for (var d = [], e = ""; c < a;) {
-    var f = b[c++];
-    if (128 > f) d.push(f);else if (192 > f) continue;else if (224 > f) {
-      var g = b[c++];
-      d.push((f & 31) << 6 | g & 63);
-    } else if (240 > f) {
-      g = b[c++];
-      var h = b[c++];
-      d.push((f & 15) << 12 | (g & 63) << 6 | h & 63);
-    } else if (248 > f) {
-      g = b[c++];
-      h = b[c++];
-      var k = b[c++];
-      f = (f & 7) << 18 | (g & 63) << 12 | (h & 63) << 6 | k & 63;
-      f -= 65536;
-      d.push((f >> 10 & 1023) + 55296, (f & 1023) + 56320);
-    }
-    8192 <= d.length && (e += String.fromCharCode.apply(null, d), d.length = 0);
-  }
-
-  e += goog.crypt.byteArrayToString(d);
-  this.cursor_ = c;
-  return e;
+jspb.Message.setProto3BytesField = function (a, b, c) {
+  return jspb.Message.setFieldIgnoringDefault_(a, b, c, "");
 };
 
-jspb.BinaryDecoder.prototype.readStringWithLength = function () {
-  var a = this.readUnsignedVarint32();
-  return this.readString(a);
+jspb.Message.setProto3EnumField = function (a, b, c) {
+  return jspb.Message.setFieldIgnoringDefault_(a, b, c, 0);
 };
 
-jspb.BinaryDecoder.prototype.readBytes = function (a) {
-  if (0 > a || this.cursor_ + a > this.bytes_.length) return this.error_ = !0, goog.asserts.fail("Invalid byte length!"), new Uint8Array(0);
-  var b = this.bytes_.subarray(this.cursor_, this.cursor_ + a);
-  this.cursor_ += a;
-  goog.asserts.assert(this.cursor_ <= this.end_);
-  return b;
+jspb.Message.setProto3StringIntField = function (a, b, c) {
+  return jspb.Message.setFieldIgnoringDefault_(a, b, c, "0");
 };
 
-jspb.BinaryDecoder.prototype.readVarintHash64 = function () {
-  return this.readSplitVarint64(jspb.utils.joinHash64);
+jspb.Message.setFieldIgnoringDefault_ = function (a, b, c, d) {
+  goog.asserts.assertInstanceof(a, jspb.Message);
+  c !== d ? jspb.Message.setField(a, b, c) : b < a.pivot_ ? a.array[jspb.Message.getIndex_(a, b)] = null : (jspb.Message.maybeInitEmptyExtensionObject_(a), delete a.extensionObject_[b]);
+  return a;
 };
 
-jspb.BinaryDecoder.prototype.readFixedHash64 = function () {
-  var a = this.bytes_,
-      b = this.cursor_,
-      c = a[b + 0],
-      d = a[b + 1],
-      e = a[b + 2],
-      f = a[b + 3],
-      g = a[b + 4],
-      h = a[b + 5],
-      k = a[b + 6];
-  a = a[b + 7];
-  this.cursor_ += 8;
-  return String.fromCharCode(c, d, e, f, g, h, k, a);
+jspb.Message.addToRepeatedField = function (a, b, c, d) {
+  goog.asserts.assertInstanceof(a, jspb.Message);
+  b = jspb.Message.getRepeatedField(a, b);
+  void 0 != d ? b.splice(d, 0, c) : b.push(c);
+  return a;
 };
 
-jspb.BinaryReader = function (a, b, c) {
-  this.decoder_ = jspb.BinaryDecoder.alloc(a, b, c);
-  this.fieldCursor_ = this.decoder_.getCursor();
-  this.nextField_ = jspb.BinaryConstants.INVALID_FIELD_NUMBER;
-  this.nextWireType_ = jspb.BinaryConstants.WireType.INVALID;
-  this.error_ = !1;
-  this.readCallbacks_ = null;
+jspb.Message.setOneofField = function (a, b, c, d) {
+  goog.asserts.assertInstanceof(a, jspb.Message);
+  (c = jspb.Message.computeOneofCase(a, c)) && c !== b && void 0 !== d && (a.wrappers_ && c in a.wrappers_ && (a.wrappers_[c] = void 0), jspb.Message.setField(a, c, void 0));
+  return jspb.Message.setField(a, b, d);
 };
 
-jspb.BinaryReader.instanceCache_ = [];
-
-jspb.BinaryReader.alloc = function (a, b, c) {
-  if (jspb.BinaryReader.instanceCache_.length) {
-    var d = jspb.BinaryReader.instanceCache_.pop();
-    a && d.decoder_.setBlock(a, b, c);
-    return d;
+jspb.Message.computeOneofCase = function (a, b) {
+  for (var c, d, e = 0; e < b.length; e++) {
+    var f = b[e],
+        g = jspb.Message.getField(a, f);
+    null != g && (c = f, d = g, jspb.Message.setField(a, f, void 0));
   }
 
-  return new jspb.BinaryReader(a, b, c);
+  return c ? (jspb.Message.setField(a, c, d), c) : 0;
 };
 
-jspb.BinaryReader.prototype.alloc = jspb.BinaryReader.alloc;
+jspb.Message.getWrapperField = function (a, b, c, d) {
+  a.wrappers_ || (a.wrappers_ = {});
 
-jspb.BinaryReader.prototype.free = function () {
-  this.decoder_.clear();
-  this.nextField_ = jspb.BinaryConstants.INVALID_FIELD_NUMBER;
-  this.nextWireType_ = jspb.BinaryConstants.WireType.INVALID;
-  this.error_ = !1;
-  this.readCallbacks_ = null;
-  100 > jspb.BinaryReader.instanceCache_.length && jspb.BinaryReader.instanceCache_.push(this);
-};
+  if (!a.wrappers_[c]) {
+    var e = jspb.Message.getField(a, c);
+    if (d || e) a.wrappers_[c] = new b(e);
+  }
 
-jspb.BinaryReader.prototype.getFieldCursor = function () {
-  return this.fieldCursor_;
+  return a.wrappers_[c];
 };
 
-jspb.BinaryReader.prototype.getCursor = function () {
-  return this.decoder_.getCursor();
+jspb.Message.getRepeatedWrapperField = function (a, b, c) {
+  jspb.Message.wrapRepeatedField_(a, b, c);
+  b = a.wrappers_[c];
+  b == jspb.Message.EMPTY_LIST_SENTINEL_ && (b = a.wrappers_[c] = []);
+  return b;
 };
 
-jspb.BinaryReader.prototype.getBuffer = function () {
-  return this.decoder_.getBuffer();
-};
+jspb.Message.wrapRepeatedField_ = function (a, b, c) {
+  a.wrappers_ || (a.wrappers_ = {});
 
-jspb.BinaryReader.prototype.getFieldNumber = function () {
-  return this.nextField_;
-};
+  if (!a.wrappers_[c]) {
+    for (var d = jspb.Message.getRepeatedField(a, c), e = [], f = 0; f < d.length; f++) e[f] = new b(d[f]);
 
-jspb.BinaryReader.prototype.getWireType = function () {
-  return this.nextWireType_;
+    a.wrappers_[c] = e;
+  }
 };
 
-jspb.BinaryReader.prototype.isEndGroup = function () {
-  return this.nextWireType_ == jspb.BinaryConstants.WireType.END_GROUP;
+jspb.Message.setWrapperField = function (a, b, c) {
+  goog.asserts.assertInstanceof(a, jspb.Message);
+  a.wrappers_ || (a.wrappers_ = {});
+  var d = c ? c.toArray() : c;
+  a.wrappers_[b] = c;
+  return jspb.Message.setField(a, b, d);
 };
 
-jspb.BinaryReader.prototype.getError = function () {
-  return this.error_ || this.decoder_.getError();
+jspb.Message.setOneofWrapperField = function (a, b, c, d) {
+  goog.asserts.assertInstanceof(a, jspb.Message);
+  a.wrappers_ || (a.wrappers_ = {});
+  var e = d ? d.toArray() : d;
+  a.wrappers_[b] = d;
+  return jspb.Message.setOneofField(a, b, c, e);
 };
 
-jspb.BinaryReader.prototype.setBlock = function (a, b, c) {
-  this.decoder_.setBlock(a, b, c);
-  this.nextField_ = jspb.BinaryConstants.INVALID_FIELD_NUMBER;
-  this.nextWireType_ = jspb.BinaryConstants.WireType.INVALID;
+jspb.Message.setRepeatedWrapperField = function (a, b, c) {
+  goog.asserts.assertInstanceof(a, jspb.Message);
+  a.wrappers_ || (a.wrappers_ = {});
+  c = c || [];
+
+  for (var d = [], e = 0; e < c.length; e++) d[e] = c[e].toArray();
+
+  a.wrappers_[b] = c;
+  return jspb.Message.setField(a, b, d);
 };
 
-jspb.BinaryReader.prototype.reset = function () {
-  this.decoder_.reset();
-  this.nextField_ = jspb.BinaryConstants.INVALID_FIELD_NUMBER;
-  this.nextWireType_ = jspb.BinaryConstants.WireType.INVALID;
+jspb.Message.addToRepeatedWrapperField = function (a, b, c, d, e) {
+  jspb.Message.wrapRepeatedField_(a, d, b);
+  var f = a.wrappers_[b];
+  f || (f = a.wrappers_[b] = []);
+  c = c ? c : new d();
+  a = jspb.Message.getRepeatedField(a, b);
+  void 0 != e ? (f.splice(e, 0, c), a.splice(e, 0, c.toArray())) : (f.push(c), a.push(c.toArray()));
+  return c;
 };
 
-jspb.BinaryReader.prototype.advance = function (a) {
-  this.decoder_.advance(a);
+jspb.Message.toMap = function (a, b, c, d) {
+  for (var e = {}, f = 0; f < a.length; f++) e[b.call(a[f])] = c ? c.call(a[f], d, a[f]) : a[f];
+
+  return e;
 };
 
-jspb.BinaryReader.prototype.nextField = function () {
-  if (this.decoder_.atEnd()) return !1;
-  if (this.getError()) return goog.asserts.fail("Decoder hit an error"), !1;
-  this.fieldCursor_ = this.decoder_.getCursor();
-  var a = this.decoder_.readUnsignedVarint32(),
-      b = a >>> 3;
-  a &= 7;
-  if (a != jspb.BinaryConstants.WireType.VARINT && a != jspb.BinaryConstants.WireType.FIXED32 && a != jspb.BinaryConstants.WireType.FIXED64 && a != jspb.BinaryConstants.WireType.DELIMITED && a != jspb.BinaryConstants.WireType.START_GROUP && a != jspb.BinaryConstants.WireType.END_GROUP) return goog.asserts.fail("Invalid wire type: %s (at position %s)", a, this.fieldCursor_), this.error_ = !0, !1;
-  this.nextField_ = b;
-  this.nextWireType_ = a;
-  return !0;
+jspb.Message.prototype.syncMapFields_ = function () {
+  if (this.wrappers_) for (var a in this.wrappers_) {
+    var b = this.wrappers_[a];
+    if (Array.isArray(b)) for (var c = 0; c < b.length; c++) b[c] && b[c].toArray();else b && b.toArray();
+  }
 };
 
-jspb.BinaryReader.prototype.unskipHeader = function () {
-  this.decoder_.unskipVarint(this.nextField_ << 3 | this.nextWireType_);
+jspb.Message.prototype.toArray = function () {
+  this.syncMapFields_();
+  return this.array;
 };
 
-jspb.BinaryReader.prototype.skipMatchingFields = function () {
-  var a = this.nextField_;
+jspb.Message.GENERATE_TO_STRING && (jspb.Message.prototype.toString = function () {
+  this.syncMapFields_();
+  return this.array.toString();
+});
 
-  for (this.unskipHeader(); this.nextField() && this.getFieldNumber() == a;) this.skipField();
+jspb.Message.prototype.getExtension = function (a) {
+  if (this.extensionObject_) {
+    this.wrappers_ || (this.wrappers_ = {});
+    var b = a.fieldIndex;
 
-  this.decoder_.atEnd() || this.unskipHeader();
-};
+    if (a.isRepeated) {
+      if (a.isMessageType()) return this.wrappers_[b] || (this.wrappers_[b] = goog.array.map(this.extensionObject_[b] || [], function (b) {
+        return new a.ctor(b);
+      })), this.wrappers_[b];
+    } else if (a.isMessageType()) return !this.wrappers_[b] && this.extensionObject_[b] && (this.wrappers_[b] = new a.ctor(this.extensionObject_[b])), this.wrappers_[b];
 
-jspb.BinaryReader.prototype.skipVarintField = function () {
-  this.nextWireType_ != jspb.BinaryConstants.WireType.VARINT ? (goog.asserts.fail("Invalid wire type for skipVarintField"), this.skipField()) : this.decoder_.skipVarint();
+    return this.extensionObject_[b];
+  }
 };
 
-jspb.BinaryReader.prototype.skipDelimitedField = function () {
-  if (this.nextWireType_ != jspb.BinaryConstants.WireType.DELIMITED) goog.asserts.fail("Invalid wire type for skipDelimitedField"), this.skipField();else {
-    var a = this.decoder_.readUnsignedVarint32();
-    this.decoder_.advance(a);
-  }
+jspb.Message.prototype.setExtension = function (a, b) {
+  this.wrappers_ || (this.wrappers_ = {});
+  jspb.Message.maybeInitEmptyExtensionObject_(this);
+  var c = a.fieldIndex;
+  a.isRepeated ? (b = b || [], a.isMessageType() ? (this.wrappers_[c] = b, this.extensionObject_[c] = goog.array.map(b, function (a) {
+    return a.toArray();
+  })) : this.extensionObject_[c] = b) : a.isMessageType() ? (this.wrappers_[c] = b, this.extensionObject_[c] = b ? b.toArray() : b) : this.extensionObject_[c] = b;
+  return this;
 };
 
-jspb.BinaryReader.prototype.skipFixed32Field = function () {
-  this.nextWireType_ != jspb.BinaryConstants.WireType.FIXED32 ? (goog.asserts.fail("Invalid wire type for skipFixed32Field"), this.skipField()) : this.decoder_.advance(4);
+jspb.Message.difference = function (a, b) {
+  if (!(a instanceof b.constructor)) throw Error("Messages have different types.");
+  var c = a.toArray();
+  b = b.toArray();
+  var d = [],
+      e = 0,
+      f = c.length > b.length ? c.length : b.length;
+  a.getJsPbMessageId() && (d[0] = a.getJsPbMessageId(), e = 1);
+
+  for (; e < f; e++) jspb.Message.compareFields(c[e], b[e]) || (d[e] = b[e]);
+
+  return new a.constructor(d);
 };
 
-jspb.BinaryReader.prototype.skipFixed64Field = function () {
-  this.nextWireType_ != jspb.BinaryConstants.WireType.FIXED64 ? (goog.asserts.fail("Invalid wire type for skipFixed64Field"), this.skipField()) : this.decoder_.advance(8);
+jspb.Message.equals = function (a, b) {
+  return a == b || !(!a || !b) && a instanceof b.constructor && jspb.Message.compareFields(a.toArray(), b.toArray());
 };
 
-jspb.BinaryReader.prototype.skipGroup = function () {
-  var a = this.nextField_;
+jspb.Message.compareExtensions = function (a, b) {
+  a = a || {};
+  b = b || {};
+  var c = {},
+      d;
 
-  do {
-    if (!this.nextField()) {
-      goog.asserts.fail("Unmatched start-group tag: stream EOF");
-      this.error_ = !0;
-      break;
-    }
+  for (d in a) c[d] = 0;
 
-    if (this.nextWireType_ == jspb.BinaryConstants.WireType.END_GROUP) {
-      this.nextField_ != a && (goog.asserts.fail("Unmatched end-group tag"), this.error_ = !0);
-      break;
-    }
+  for (d in b) c[d] = 0;
 
-    this.skipField();
-  } while (1);
+  for (d in c) if (!jspb.Message.compareFields(a[d], b[d])) return !1;
+
+  return !0;
 };
 
-jspb.BinaryReader.prototype.skipField = function () {
-  switch (this.nextWireType_) {
-    case jspb.BinaryConstants.WireType.VARINT:
-      this.skipVarintField();
-      break;
+jspb.Message.compareFields = function (a, b) {
+  if (a == b) return !0;
+  if (!goog.isObject(a) || !goog.isObject(b)) return "number" === typeof a && isNaN(a) || "number" === typeof b && isNaN(b) ? String(a) == String(b) : !1;
+  if (a.constructor != b.constructor) return !1;
 
-    case jspb.BinaryConstants.WireType.FIXED64:
-      this.skipFixed64Field();
-      break;
+  if (jspb.Message.SUPPORTS_UINT8ARRAY_ && a.constructor === Uint8Array) {
+    if (a.length != b.length) return !1;
 
-    case jspb.BinaryConstants.WireType.DELIMITED:
-      this.skipDelimitedField();
-      break;
+    for (var c = 0; c < a.length; c++) if (a[c] != b[c]) return !1;
 
-    case jspb.BinaryConstants.WireType.FIXED32:
-      this.skipFixed32Field();
-      break;
+    return !0;
+  }
 
-    case jspb.BinaryConstants.WireType.START_GROUP:
-      this.skipGroup();
-      break;
+  if (a.constructor === Array) {
+    var d = void 0,
+        e = void 0,
+        f = Math.max(a.length, b.length);
 
-    default:
-      goog.asserts.fail("Invalid wire encoding for field.");
+    for (c = 0; c < f; c++) {
+      var g = a[c],
+          h = b[c];
+      g && g.constructor == Object && (goog.asserts.assert(void 0 === d), goog.asserts.assert(c === a.length - 1), d = g, g = void 0);
+      h && h.constructor == Object && (goog.asserts.assert(void 0 === e), goog.asserts.assert(c === b.length - 1), e = h, h = void 0);
+      if (!jspb.Message.compareFields(g, h)) return !1;
+    }
+
+    return d || e ? (d = d || {}, e = e || {}, jspb.Message.compareExtensions(d, e)) : !0;
   }
-};
 
-jspb.BinaryReader.prototype.registerReadCallback = function (a, b) {
-  null === this.readCallbacks_ && (this.readCallbacks_ = {});
-  goog.asserts.assert(!this.readCallbacks_[a]);
-  this.readCallbacks_[a] = b;
+  if (a.constructor === Object) return jspb.Message.compareExtensions(a, b);
+  throw Error("Invalid type in JSPB array");
 };
 
-jspb.BinaryReader.prototype.runReadCallback = function (a) {
-  goog.asserts.assert(null !== this.readCallbacks_);
-  a = this.readCallbacks_[a];
-  goog.asserts.assert(a);
-  return a(this);
+jspb.Message.prototype.cloneMessage = function () {
+  return jspb.Message.cloneMessage(this);
 };
 
-jspb.BinaryReader.prototype.readAny = function (a) {
-  this.nextWireType_ = jspb.BinaryConstants.FieldTypeToWireType(a);
-  var b = jspb.BinaryConstants.FieldType;
+jspb.Message.prototype.clone = function () {
+  return jspb.Message.cloneMessage(this);
+};
 
-  switch (a) {
-    case b.DOUBLE:
-      return this.readDouble();
-
-    case b.FLOAT:
-      return this.readFloat();
+jspb.Message.clone = function (a) {
+  return jspb.Message.cloneMessage(a);
+};
 
-    case b.INT64:
-      return this.readInt64();
+jspb.Message.cloneMessage = function (a) {
+  return new a.constructor(jspb.Message.clone_(a.toArray()));
+};
 
-    case b.UINT64:
-      return this.readUint64();
+jspb.Message.copyInto = function (a, b) {
+  goog.asserts.assertInstanceof(a, jspb.Message);
+  goog.asserts.assertInstanceof(b, jspb.Message);
+  goog.asserts.assert(a.constructor == b.constructor, "Copy source and target message should have the same type.");
+  a = jspb.Message.clone(a);
 
-    case b.INT32:
-      return this.readInt32();
+  for (var c = b.toArray(), d = a.toArray(), e = c.length = 0; e < d.length; e++) c[e] = d[e];
 
-    case b.FIXED64:
-      return this.readFixed64();
+  b.wrappers_ = a.wrappers_;
+  b.extensionObject_ = a.extensionObject_;
+};
 
-    case b.FIXED32:
-      return this.readFixed32();
+jspb.Message.clone_ = function (a) {
+  if (Array.isArray(a)) {
+    for (var b = Array(a.length), c = 0; c < a.length; c++) {
+      var d = a[c];
+      null != d && (b[c] = "object" == typeof d ? jspb.Message.clone_(goog.asserts.assert(d)) : d);
+    }
 
-    case b.BOOL:
-      return this.readBool();
+    return b;
+  }
 
-    case b.STRING:
-      return this.readString();
+  if (jspb.Message.SUPPORTS_UINT8ARRAY_ && a instanceof Uint8Array) return new Uint8Array(a);
+  b = {};
 
-    case b.GROUP:
-      goog.asserts.fail("Group field type not supported in readAny()");
+  for (c in a) d = a[c], null != d && (b[c] = "object" == typeof d ? jspb.Message.clone_(goog.asserts.assert(d)) : d);
 
-    case b.MESSAGE:
-      goog.asserts.fail("Message field type not supported in readAny()");
+  return b;
+};
 
-    case b.BYTES:
-      return this.readBytes();
+jspb.Message.registerMessageType = function (a, b) {
+  b.messageId = a;
+};
 
-    case b.UINT32:
-      return this.readUint32();
+jspb.Message.messageSetExtensions = {};
+jspb.Message.messageSetExtensionsBinary = {};
+jspb.Export = {};
+ true && (exports.Map = jspb.Map, exports.Message = jspb.Message, exports.BinaryReader = jspb.BinaryReader, exports.BinaryWriter = jspb.BinaryWriter, exports.ExtensionFieldInfo = jspb.ExtensionFieldInfo, exports.ExtensionFieldBinaryInfo = jspb.ExtensionFieldBinaryInfo, exports.exportSymbol = goog.exportSymbol, exports.inherits = goog.inherits, exports.object = {
+  extend: goog.object.extend
+}, exports.typeOf = goog.typeOf);
 
-    case b.ENUM:
-      return this.readEnum();
+/***/ }),
 
-    case b.SFIXED32:
-      return this.readSfixed32();
+/***/ "./node_modules/has-bigints/index.js":
+/*!*******************************************!*\
+  !*** ./node_modules/has-bigints/index.js ***!
+  \*******************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-    case b.SFIXED64:
-      return this.readSfixed64();
+"use strict";
 
-    case b.SINT32:
-      return this.readSint32();
 
-    case b.SINT64:
-      return this.readSint64();
+var $BigInt = global.BigInt;
 
-    case b.FHASH64:
-      return this.readFixedHash64();
+module.exports = function hasNativeBigInts() {
+  return typeof $BigInt === 'function' && typeof BigInt === 'function' && typeof $BigInt(42) === 'bigint' // eslint-disable-line no-magic-numbers
+  && typeof BigInt(42) === 'bigint'; // eslint-disable-line no-magic-numbers
+};
 
-    case b.VHASH64:
-      return this.readVarintHash64();
+/***/ }),
 
-    default:
-      goog.asserts.fail("Invalid field type in readAny()");
-  }
+/***/ "./node_modules/has-symbols/index.js":
+/*!*******************************************!*\
+  !*** ./node_modules/has-symbols/index.js ***!
+  \*******************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-  return 0;
-};
+"use strict";
 
-jspb.BinaryReader.prototype.readMessage = function (a, b) {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.DELIMITED);
-  var c = this.decoder_.getEnd(),
-      d = this.decoder_.readUnsignedVarint32();
-  d = this.decoder_.getCursor() + d;
-  this.decoder_.setEnd(d);
-  b(a, this);
-  this.decoder_.setCursor(d);
-  this.decoder_.setEnd(c);
-};
 
-jspb.BinaryReader.prototype.readGroup = function (a, b, c) {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.START_GROUP);
-  goog.asserts.assert(this.nextField_ == a);
-  c(b, this);
-  this.error_ || this.nextWireType_ == jspb.BinaryConstants.WireType.END_GROUP || (goog.asserts.fail("Group submessage did not end with an END_GROUP tag"), this.error_ = !0);
-};
+var origSymbol = typeof Symbol !== 'undefined' && Symbol;
 
-jspb.BinaryReader.prototype.getFieldDecoder = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.DELIMITED);
-  var a = this.decoder_.readUnsignedVarint32(),
-      b = this.decoder_.getCursor(),
-      c = b + a;
-  a = jspb.BinaryDecoder.alloc(this.decoder_.getBuffer(), b, a);
-  this.decoder_.setCursor(c);
-  return a;
-};
+var hasSymbolSham = __webpack_require__(/*! ./shams */ "./node_modules/has-symbols/shams.js");
 
-jspb.BinaryReader.prototype.readInt32 = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
-  return this.decoder_.readSignedVarint32();
-};
+module.exports = function hasNativeSymbols() {
+  if (typeof origSymbol !== 'function') {
+    return false;
+  }
 
-jspb.BinaryReader.prototype.readInt32String = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
-  return this.decoder_.readSignedVarint32String();
-};
+  if (typeof Symbol !== 'function') {
+    return false;
+  }
 
-jspb.BinaryReader.prototype.readInt64 = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
-  return this.decoder_.readSignedVarint64();
-};
+  if (typeof origSymbol('foo') !== 'symbol') {
+    return false;
+  }
 
-jspb.BinaryReader.prototype.readInt64String = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
-  return this.decoder_.readSignedVarint64String();
-};
+  if (typeof Symbol('bar') !== 'symbol') {
+    return false;
+  }
 
-jspb.BinaryReader.prototype.readUint32 = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
-  return this.decoder_.readUnsignedVarint32();
+  return hasSymbolSham();
 };
 
-jspb.BinaryReader.prototype.readUint32String = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
-  return this.decoder_.readUnsignedVarint32String();
-};
+/***/ }),
 
-jspb.BinaryReader.prototype.readUint64 = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
-  return this.decoder_.readUnsignedVarint64();
-};
+/***/ "./node_modules/has-symbols/shams.js":
+/*!*******************************************!*\
+  !*** ./node_modules/has-symbols/shams.js ***!
+  \*******************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-jspb.BinaryReader.prototype.readUint64String = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
-  return this.decoder_.readUnsignedVarint64String();
-};
+"use strict";
 
-jspb.BinaryReader.prototype.readSint32 = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
-  return this.decoder_.readZigzagVarint32();
-};
+/* eslint complexity: [2, 18], max-statements: [2, 33] */
 
-jspb.BinaryReader.prototype.readSint64 = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
-  return this.decoder_.readZigzagVarint64();
-};
+module.exports = function hasSymbols() {
+  if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') {
+    return false;
+  }
 
-jspb.BinaryReader.prototype.readSint64String = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
-  return this.decoder_.readZigzagVarint64String();
-};
+  if (typeof Symbol.iterator === 'symbol') {
+    return true;
+  }
 
-jspb.BinaryReader.prototype.readFixed32 = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED32);
-  return this.decoder_.readUint32();
-};
+  var obj = {};
+  var sym = Symbol('test');
+  var symObj = Object(sym);
 
-jspb.BinaryReader.prototype.readFixed64 = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED64);
-  return this.decoder_.readUint64();
-};
+  if (typeof sym === 'string') {
+    return false;
+  }
 
-jspb.BinaryReader.prototype.readFixed64String = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED64);
-  return this.decoder_.readUint64String();
-};
+  if (Object.prototype.toString.call(sym) !== '[object Symbol]') {
+    return false;
+  }
 
-jspb.BinaryReader.prototype.readSfixed32 = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED32);
-  return this.decoder_.readInt32();
-};
+  if (Object.prototype.toString.call(symObj) !== '[object Symbol]') {
+    return false;
+  } // temp disabled per https://github.com/ljharb/object.assign/issues/17
+  // if (sym instanceof Symbol) { return false; }
+  // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4
+  // if (!(symObj instanceof Symbol)) { return false; }
+  // if (typeof Symbol.prototype.toString !== 'function') { return false; }
+  // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }
 
-jspb.BinaryReader.prototype.readSfixed32String = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED32);
-  return this.decoder_.readInt32().toString();
-};
 
-jspb.BinaryReader.prototype.readSfixed64 = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED64);
-  return this.decoder_.readInt64();
-};
+  var symVal = 42;
+  obj[sym] = symVal;
 
-jspb.BinaryReader.prototype.readSfixed64String = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED64);
-  return this.decoder_.readInt64String();
-};
+  for (sym in obj) {
+    return false;
+  } // eslint-disable-line no-restricted-syntax, no-unreachable-loop
 
-jspb.BinaryReader.prototype.readFloat = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED32);
-  return this.decoder_.readFloat();
-};
 
-jspb.BinaryReader.prototype.readDouble = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED64);
-  return this.decoder_.readDouble();
-};
+  if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) {
+    return false;
+  }
 
-jspb.BinaryReader.prototype.readBool = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
-  return !!this.decoder_.readUnsignedVarint32();
-};
+  if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) {
+    return false;
+  }
 
-jspb.BinaryReader.prototype.readEnum = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
-  return this.decoder_.readSignedVarint64();
-};
+  var syms = Object.getOwnPropertySymbols(obj);
 
-jspb.BinaryReader.prototype.readString = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.DELIMITED);
-  var a = this.decoder_.readUnsignedVarint32();
-  return this.decoder_.readString(a);
-};
+  if (syms.length !== 1 || syms[0] !== sym) {
+    return false;
+  }
 
-jspb.BinaryReader.prototype.readBytes = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.DELIMITED);
-  var a = this.decoder_.readUnsignedVarint32();
-  return this.decoder_.readBytes(a);
-};
+  if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) {
+    return false;
+  }
 
-jspb.BinaryReader.prototype.readVarintHash64 = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
-  return this.decoder_.readVarintHash64();
-};
+  if (typeof Object.getOwnPropertyDescriptor === 'function') {
+    var descriptor = Object.getOwnPropertyDescriptor(obj, sym);
 
-jspb.BinaryReader.prototype.readSintHash64 = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
-  return this.decoder_.readZigzagVarintHash64();
-};
+    if (descriptor.value !== symVal || descriptor.enumerable !== true) {
+      return false;
+    }
+  }
 
-jspb.BinaryReader.prototype.readSplitVarint64 = function (a) {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
-  return this.decoder_.readSplitVarint64(a);
+  return true;
 };
 
-jspb.BinaryReader.prototype.readSplitZigzagVarint64 = function (a) {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.VARINT);
-  return this.decoder_.readSplitVarint64(function (b, c) {
-    return jspb.utils.fromZigzag64(b, c, a);
-  });
-};
+/***/ }),
 
-jspb.BinaryReader.prototype.readFixedHash64 = function () {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED64);
-  return this.decoder_.readFixedHash64();
-};
+/***/ "./node_modules/has-tostringtag/shams.js":
+/*!***********************************************!*\
+  !*** ./node_modules/has-tostringtag/shams.js ***!
+  \***********************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-jspb.BinaryReader.prototype.readSplitFixed64 = function (a) {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.FIXED64);
-  return this.decoder_.readSplitFixed64(a);
-};
+"use strict";
 
-jspb.BinaryReader.prototype.readPackedField_ = function (a) {
-  goog.asserts.assert(this.nextWireType_ == jspb.BinaryConstants.WireType.DELIMITED);
-  var b = this.decoder_.readUnsignedVarint32();
-  b = this.decoder_.getCursor() + b;
 
-  for (var c = []; this.decoder_.getCursor() < b;) c.push(a.call(this.decoder_));
+var hasSymbols = __webpack_require__(/*! has-symbols/shams */ "./node_modules/has-symbols/shams.js");
 
-  return c;
+module.exports = function hasToStringTagShams() {
+  return hasSymbols() && !!Symbol.toStringTag;
 };
 
-jspb.BinaryReader.prototype.readPackedInt32 = function () {
-  return this.readPackedField_(this.decoder_.readSignedVarint32);
-};
+/***/ }),
 
-jspb.BinaryReader.prototype.readPackedInt32String = function () {
-  return this.readPackedField_(this.decoder_.readSignedVarint32String);
-};
+/***/ "./node_modules/has/src/index.js":
+/*!***************************************!*\
+  !*** ./node_modules/has/src/index.js ***!
+  \***************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-jspb.BinaryReader.prototype.readPackedInt64 = function () {
-  return this.readPackedField_(this.decoder_.readSignedVarint64);
-};
+"use strict";
 
-jspb.BinaryReader.prototype.readPackedInt64String = function () {
-  return this.readPackedField_(this.decoder_.readSignedVarint64String);
-};
 
-jspb.BinaryReader.prototype.readPackedUint32 = function () {
-  return this.readPackedField_(this.decoder_.readUnsignedVarint32);
-};
+var bind = __webpack_require__(/*! function-bind */ "./node_modules/function-bind/index.js");
 
-jspb.BinaryReader.prototype.readPackedUint32String = function () {
-  return this.readPackedField_(this.decoder_.readUnsignedVarint32String);
-};
+module.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);
 
-jspb.BinaryReader.prototype.readPackedUint64 = function () {
-  return this.readPackedField_(this.decoder_.readUnsignedVarint64);
-};
+/***/ }),
 
-jspb.BinaryReader.prototype.readPackedUint64String = function () {
-  return this.readPackedField_(this.decoder_.readUnsignedVarint64String);
-};
+/***/ "./node_modules/is-arguments/index.js":
+/*!********************************************!*\
+  !*** ./node_modules/is-arguments/index.js ***!
+  \********************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-jspb.BinaryReader.prototype.readPackedSint32 = function () {
-  return this.readPackedField_(this.decoder_.readZigzagVarint32);
-};
+"use strict";
 
-jspb.BinaryReader.prototype.readPackedSint64 = function () {
-  return this.readPackedField_(this.decoder_.readZigzagVarint64);
-};
 
-jspb.BinaryReader.prototype.readPackedSint64String = function () {
-  return this.readPackedField_(this.decoder_.readZigzagVarint64String);
-};
+var hasToStringTag = __webpack_require__(/*! has-tostringtag/shams */ "./node_modules/has-tostringtag/shams.js")();
 
-jspb.BinaryReader.prototype.readPackedFixed32 = function () {
-  return this.readPackedField_(this.decoder_.readUint32);
-};
+var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
 
-jspb.BinaryReader.prototype.readPackedFixed64 = function () {
-  return this.readPackedField_(this.decoder_.readUint64);
-};
+var $toString = callBound('Object.prototype.toString');
 
-jspb.BinaryReader.prototype.readPackedFixed64String = function () {
-  return this.readPackedField_(this.decoder_.readUint64String);
-};
+var isStandardArguments = function isArguments(value) {
+  if (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {
+    return false;
+  }
 
-jspb.BinaryReader.prototype.readPackedSfixed32 = function () {
-  return this.readPackedField_(this.decoder_.readInt32);
+  return $toString(value) === '[object Arguments]';
 };
 
-jspb.BinaryReader.prototype.readPackedSfixed64 = function () {
-  return this.readPackedField_(this.decoder_.readInt64);
-};
+var isLegacyArguments = function isArguments(value) {
+  if (isStandardArguments(value)) {
+    return true;
+  }
 
-jspb.BinaryReader.prototype.readPackedSfixed64String = function () {
-  return this.readPackedField_(this.decoder_.readInt64String);
+  return value !== null && typeof value === 'object' && typeof value.length === 'number' && value.length >= 0 && $toString(value) !== '[object Array]' && $toString(value.callee) === '[object Function]';
 };
 
-jspb.BinaryReader.prototype.readPackedFloat = function () {
-  return this.readPackedField_(this.decoder_.readFloat);
-};
+var supportsStandardArguments = function () {
+  return isStandardArguments(arguments);
+}();
 
-jspb.BinaryReader.prototype.readPackedDouble = function () {
-  return this.readPackedField_(this.decoder_.readDouble);
-};
+isStandardArguments.isLegacyArguments = isLegacyArguments; // for tests
 
-jspb.BinaryReader.prototype.readPackedBool = function () {
-  return this.readPackedField_(this.decoder_.readBool);
-};
+module.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;
 
-jspb.BinaryReader.prototype.readPackedEnum = function () {
-  return this.readPackedField_(this.decoder_.readEnum);
-};
+/***/ }),
 
-jspb.BinaryReader.prototype.readPackedVarintHash64 = function () {
-  return this.readPackedField_(this.decoder_.readVarintHash64);
-};
+/***/ "./node_modules/is-bigint/index.js":
+/*!*****************************************!*\
+  !*** ./node_modules/is-bigint/index.js ***!
+  \*****************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-jspb.BinaryReader.prototype.readPackedFixedHash64 = function () {
-  return this.readPackedField_(this.decoder_.readFixedHash64);
-};
+"use strict";
 
-jspb.Map = function (a, b) {
-  this.arr_ = a;
-  this.valueCtor_ = b;
-  this.map_ = {};
-  this.arrClean = !0;
-  0 < this.arr_.length && this.loadFromArray_();
-};
 
-jspb.Map.prototype.loadFromArray_ = function () {
-  for (var a = 0; a < this.arr_.length; a++) {
-    var b = this.arr_[a],
-        c = b[0];
-    this.map_[c.toString()] = new jspb.Map.Entry_(c, b[1]);
-  }
+var hasBigInts = __webpack_require__(/*! has-bigints */ "./node_modules/has-bigints/index.js")();
 
-  this.arrClean = !0;
-};
+if (hasBigInts) {
+  var bigIntValueOf = BigInt.prototype.valueOf;
 
-jspb.Map.prototype.toArray = function () {
-  if (this.arrClean) {
-    if (this.valueCtor_) {
-      var a = this.map_,
-          b;
+  var tryBigInt = function tryBigIntObject(value) {
+    try {
+      bigIntValueOf.call(value);
+      return true;
+    } catch (e) {}
 
-      for (b in a) if (Object.prototype.hasOwnProperty.call(a, b)) {
-        var c = a[b].valueWrapper;
-        c && c.toArray();
-      }
+    return false;
+  };
+
+  module.exports = function isBigInt(value) {
+    if (value === null || typeof value === 'undefined' || typeof value === 'boolean' || typeof value === 'string' || typeof value === 'number' || typeof value === 'symbol' || typeof value === 'function') {
+      return false;
     }
-  } else {
-    this.arr_.length = 0;
-    a = this.stringKeys_();
-    a.sort();
 
-    for (b = 0; b < a.length; b++) {
-      var d = this.map_[a[b]];
-      (c = d.valueWrapper) && c.toArray();
-      this.arr_.push([d.key, d.value]);
+    if (typeof value === 'bigint') {
+      return true;
     }
 
-    this.arrClean = !0;
-  }
+    return tryBigInt(value);
+  };
+} else {
+  module.exports = function isBigInt(value) {
+    return  false && false;
+  };
+}
 
-  return this.arr_;
-};
+/***/ }),
 
-jspb.Map.prototype.toObject = function (a, b) {
-  for (var c = this.toArray(), d = [], e = 0; e < c.length; e++) {
-    var f = this.map_[c[e][0].toString()];
-    this.wrapEntry_(f);
-    var g = f.valueWrapper;
-    g ? (goog.asserts.assert(b), d.push([f.key, b(a, g)])) : d.push([f.key, f.value]);
-  }
+/***/ "./node_modules/is-boolean-object/index.js":
+/*!*************************************************!*\
+  !*** ./node_modules/is-boolean-object/index.js ***!
+  \*************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-  return d;
-};
+"use strict";
 
-jspb.Map.fromObject = function (a, b, c) {
-  b = new jspb.Map([], b);
 
-  for (var d = 0; d < a.length; d++) {
-    var e = a[d][0],
-        f = c(a[d][1]);
-    b.set(e, f);
-  }
+var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
 
-  return b;
-};
+var $boolToStr = callBound('Boolean.prototype.toString');
+var $toString = callBound('Object.prototype.toString');
 
-jspb.Map.ArrayIteratorIterable_ = function (a) {
-  this.idx_ = 0;
-  this.arr_ = a;
+var tryBooleanObject = function booleanBrandCheck(value) {
+  try {
+    $boolToStr(value);
+    return true;
+  } catch (e) {
+    return false;
+  }
 };
 
-jspb.Map.ArrayIteratorIterable_.prototype.next = function () {
-  return this.idx_ < this.arr_.length ? {
-    done: !1,
-    value: this.arr_[this.idx_++]
-  } : {
-    done: !0,
-    value: void 0
-  };
-};
+var boolClass = '[object Boolean]';
 
-"undefined" != typeof Symbol && (jspb.Map.ArrayIteratorIterable_.prototype[Symbol.iterator] = function () {
-  return this;
-});
+var hasToStringTag = __webpack_require__(/*! has-tostringtag/shams */ "./node_modules/has-tostringtag/shams.js")();
 
-jspb.Map.prototype.getLength = function () {
-  return this.stringKeys_().length;
-};
+module.exports = function isBoolean(value) {
+  if (typeof value === 'boolean') {
+    return true;
+  }
 
-jspb.Map.prototype.clear = function () {
-  this.map_ = {};
-  this.arrClean = !1;
-};
+  if (value === null || typeof value !== 'object') {
+    return false;
+  }
 
-jspb.Map.prototype.del = function (a) {
-  a = a.toString();
-  var b = this.map_.hasOwnProperty(a);
-  delete this.map_[a];
-  this.arrClean = !1;
-  return b;
+  return hasToStringTag && Symbol.toStringTag in value ? tryBooleanObject(value) : $toString(value) === boolClass;
 };
 
-jspb.Map.prototype.getEntryList = function () {
-  var a = [],
-      b = this.stringKeys_();
-  b.sort();
+/***/ }),
 
-  for (var c = 0; c < b.length; c++) {
-    var d = this.map_[b[c]];
-    a.push([d.key, d.value]);
-  }
+/***/ "./node_modules/is-buffer/index.js":
+/*!*****************************************!*\
+  !*** ./node_modules/is-buffer/index.js ***!
+  \*****************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
 
-  return a;
+/*!
+ * Determine if an object is a Buffer
+ *
+ * @author   Feross Aboukhadijeh <https://feross.org>
+ * @license  MIT
+ */
+// The _isBuffer check is for Safari 5-7 support, because it's missing
+// Object.prototype.constructor. Remove this eventually
+module.exports = function (obj) {
+  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer);
 };
 
-jspb.Map.prototype.entries = function () {
-  var a = [],
-      b = this.stringKeys_();
-  b.sort();
+function isBuffer(obj) {
+  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj);
+} // For Node v0.10 support. Remove this eventually.
 
-  for (var c = 0; c < b.length; c++) {
-    var d = this.map_[b[c]];
-    a.push([d.key, this.wrapEntry_(d)]);
-  }
 
-  return new jspb.Map.ArrayIteratorIterable_(a);
-};
+function isSlowBuffer(obj) {
+  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0));
+}
 
-jspb.Map.prototype.keys = function () {
-  var a = [],
-      b = this.stringKeys_();
-  b.sort();
+/***/ }),
 
-  for (var c = 0; c < b.length; c++) a.push(this.map_[b[c]].key);
+/***/ "./node_modules/is-date-object/index.js":
+/*!**********************************************!*\
+  !*** ./node_modules/is-date-object/index.js ***!
+  \**********************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-  return new jspb.Map.ArrayIteratorIterable_(a);
-};
+"use strict";
 
-jspb.Map.prototype.values = function () {
-  var a = [],
-      b = this.stringKeys_();
-  b.sort();
 
-  for (var c = 0; c < b.length; c++) a.push(this.wrapEntry_(this.map_[b[c]]));
+var getDay = Date.prototype.getDay;
 
-  return new jspb.Map.ArrayIteratorIterable_(a);
+var tryDateObject = function tryDateGetDayCall(value) {
+  try {
+    getDay.call(value);
+    return true;
+  } catch (e) {
+    return false;
+  }
 };
 
-jspb.Map.prototype.forEach = function (a, b) {
-  var c = this.stringKeys_();
-  c.sort();
+var toStr = Object.prototype.toString;
+var dateClass = '[object Date]';
 
-  for (var d = 0; d < c.length; d++) {
-    var e = this.map_[c[d]];
-    a.call(b, this.wrapEntry_(e), e.key, this);
+var hasToStringTag = __webpack_require__(/*! has-tostringtag/shams */ "./node_modules/has-tostringtag/shams.js")();
+
+module.exports = function isDateObject(value) {
+  if (typeof value !== 'object' || value === null) {
+    return false;
   }
-};
 
-jspb.Map.prototype.set = function (a, b) {
-  var c = new jspb.Map.Entry_(a);
-  this.valueCtor_ ? (c.valueWrapper = b, c.value = b.toArray()) : c.value = b;
-  this.map_[a.toString()] = c;
-  this.arrClean = !1;
-  return this;
+  return hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;
 };
 
-jspb.Map.prototype.wrapEntry_ = function (a) {
-  return this.valueCtor_ ? (a.valueWrapper || (a.valueWrapper = new this.valueCtor_(a.value)), a.valueWrapper) : a.value;
-};
+/***/ }),
 
-jspb.Map.prototype.get = function (a) {
-  if (a = this.map_[a.toString()]) return this.wrapEntry_(a);
-};
+/***/ "./node_modules/is-map/index.js":
+/*!**************************************!*\
+  !*** ./node_modules/is-map/index.js ***!
+  \**************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-jspb.Map.prototype.has = function (a) {
-  return a.toString() in this.map_;
-};
+"use strict";
 
-jspb.Map.prototype.serializeBinary = function (a, b, c, d, e) {
-  var f = this.stringKeys_();
-  f.sort();
 
-  for (var g = 0; g < f.length; g++) {
-    var h = this.map_[f[g]];
-    b.beginSubMessage(a);
-    c.call(b, 1, h.key);
-    this.valueCtor_ ? d.call(b, 2, this.wrapEntry_(h), e) : d.call(b, 2, h.value);
-    b.endSubMessage();
-  }
-};
+var $Map = typeof Map === 'function' && Map.prototype ? Map : null;
+var $Set = typeof Set === 'function' && Set.prototype ? Set : null;
+var exported;
 
-jspb.Map.deserializeBinary = function (a, b, c, d, e, f, g) {
-  for (; b.nextField() && !b.isEndGroup();) {
-    var h = b.getFieldNumber();
-    1 == h ? f = c.call(b) : 2 == h && (a.valueCtor_ ? (goog.asserts.assert(e), g || (g = new a.valueCtor_()), d.call(b, g, e)) : g = d.call(b));
-  }
+if (!$Map) {
+  // eslint-disable-next-line no-unused-vars
+  exported = function isMap(x) {
+    // `Map` is not present in this environment.
+    return false;
+  };
+}
 
-  goog.asserts.assert(void 0 != f);
-  goog.asserts.assert(void 0 != g);
-  a.set(f, g);
-};
+var $mapHas = $Map ? Map.prototype.has : null;
+var $setHas = $Set ? Set.prototype.has : null;
 
-jspb.Map.prototype.stringKeys_ = function () {
-  var a = this.map_,
-      b = [],
-      c;
+if (!exported && !$mapHas) {
+  // eslint-disable-next-line no-unused-vars
+  exported = function isMap(x) {
+    // `Map` does not have a `has` method
+    return false;
+  };
+}
 
-  for (c in a) Object.prototype.hasOwnProperty.call(a, c) && b.push(c);
+module.exports = exported || function isMap(x) {
+  if (!x || typeof x !== 'object') {
+    return false;
+  }
 
-  return b;
-};
+  try {
+    $mapHas.call(x);
 
-jspb.Map.Entry_ = function (a, b) {
-  this.key = a;
-  this.value = b;
-  this.valueWrapper = void 0;
-};
+    if ($setHas) {
+      try {
+        $setHas.call(x);
+      } catch (e) {
+        return true;
+      }
+    }
 
-jspb.ExtensionFieldInfo = function (a, b, c, d, e) {
-  this.fieldIndex = a;
-  this.fieldName = b;
-  this.ctor = c;
-  this.toObjectFn = d;
-  this.isRepeated = e;
-};
+    return x instanceof $Map; // core-js workaround, pre-v2.5.0
+  } catch (e) {}
 
-jspb.ExtensionFieldBinaryInfo = function (a, b, c, d, e, f) {
-  this.fieldInfo = a;
-  this.binaryReaderFn = b;
-  this.binaryWriterFn = c;
-  this.binaryMessageSerializeFn = d;
-  this.binaryMessageDeserializeFn = e;
-  this.isPacked = f;
+  return false;
 };
 
-jspb.ExtensionFieldInfo.prototype.isMessageType = function () {
-  return !!this.ctor;
-};
+/***/ }),
 
-jspb.Message = function () {};
+/***/ "./node_modules/is-number-object/index.js":
+/*!************************************************!*\
+  !*** ./node_modules/is-number-object/index.js ***!
+  \************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-jspb.Message.GENERATE_TO_OBJECT = !0;
-jspb.Message.GENERATE_FROM_OBJECT = !goog.DISALLOW_TEST_ONLY_CODE;
-jspb.Message.GENERATE_TO_STRING = !0;
-jspb.Message.ASSUME_LOCAL_ARRAYS = !1;
-jspb.Message.SERIALIZE_EMPTY_TRAILING_FIELDS = !0;
-jspb.Message.SUPPORTS_UINT8ARRAY_ = "function" == typeof Uint8Array;
+"use strict";
 
-jspb.Message.prototype.getJsPbMessageId = function () {
-  return this.messageId_;
-};
 
-jspb.Message.getIndex_ = function (a, b) {
-  return b + a.arrayIndexOffset_;
+var numToStr = Number.prototype.toString;
+
+var tryNumberObject = function tryNumberObject(value) {
+  try {
+    numToStr.call(value);
+    return true;
+  } catch (e) {
+    return false;
+  }
 };
 
-jspb.Message.hiddenES6Property_ = function () {};
+var toStr = Object.prototype.toString;
+var numClass = '[object Number]';
 
-jspb.Message.getFieldNumber_ = function (a, b) {
-  return b - a.arrayIndexOffset_;
-};
+var hasToStringTag = __webpack_require__(/*! has-tostringtag/shams */ "./node_modules/has-tostringtag/shams.js")();
 
-jspb.Message.initialize = function (a, b, c, d, e, f) {
-  a.wrappers_ = null;
-  b || (b = c ? [c] : []);
-  a.messageId_ = c ? String(c) : void 0;
-  a.arrayIndexOffset_ = 0 === c ? -1 : 0;
-  a.array = b;
-  jspb.Message.initPivotAndExtensionObject_(a, d);
-  a.convertedPrimitiveFields_ = {};
-  jspb.Message.SERIALIZE_EMPTY_TRAILING_FIELDS || (a.repeatedFields = e);
-  if (e) for (b = 0; b < e.length; b++) c = e[b], c < a.pivot_ ? (c = jspb.Message.getIndex_(a, c), a.array[c] = a.array[c] || jspb.Message.EMPTY_LIST_SENTINEL_) : (jspb.Message.maybeInitEmptyExtensionObject_(a), a.extensionObject_[c] = a.extensionObject_[c] || jspb.Message.EMPTY_LIST_SENTINEL_);
-  if (f && f.length) for (b = 0; b < f.length; b++) jspb.Message.computeOneofCase(a, f[b]);
-};
+module.exports = function isNumberObject(value) {
+  if (typeof value === 'number') {
+    return true;
+  }
 
-jspb.Message.EMPTY_LIST_SENTINEL_ = goog.DEBUG && Object.freeze ? Object.freeze([]) : [];
+  if (typeof value !== 'object') {
+    return false;
+  }
 
-jspb.Message.isArray_ = function (a) {
-  return jspb.Message.ASSUME_LOCAL_ARRAYS ? a instanceof Array : goog.isArray(a);
+  return hasToStringTag ? tryNumberObject(value) : toStr.call(value) === numClass;
 };
 
-jspb.Message.isExtensionObject_ = function (a) {
-  return null !== a && "object" == typeof a && !jspb.Message.isArray_(a) && !(jspb.Message.SUPPORTS_UINT8ARRAY_ && a instanceof Uint8Array);
-};
+/***/ }),
 
-jspb.Message.initPivotAndExtensionObject_ = function (a, b) {
-  var c = a.array.length,
-      d = -1;
+/***/ "./node_modules/is-regex/index.js":
+/*!****************************************!*\
+  !*** ./node_modules/is-regex/index.js ***!
+  \****************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-  if (c && (d = c - 1, c = a.array[d], jspb.Message.isExtensionObject_(c))) {
-    a.pivot_ = jspb.Message.getFieldNumber_(a, d);
-    a.extensionObject_ = c;
-    return;
-  }
+"use strict";
 
-  -1 < b ? (a.pivot_ = Math.max(b, jspb.Message.getFieldNumber_(a, d + 1)), a.extensionObject_ = null) : a.pivot_ = Number.MAX_VALUE;
-};
 
-jspb.Message.maybeInitEmptyExtensionObject_ = function (a) {
-  var b = jspb.Message.getIndex_(a, a.pivot_);
-  a.array[b] || (a.extensionObject_ = a.array[b] = {});
-};
+var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
 
-jspb.Message.toObjectList = function (a, b, c) {
-  for (var d = [], e = 0; e < a.length; e++) d[e] = b.call(a[e], c, a[e]);
+var hasToStringTag = __webpack_require__(/*! has-tostringtag/shams */ "./node_modules/has-tostringtag/shams.js")();
 
-  return d;
-};
+var has;
+var $exec;
+var isRegexMarker;
+var badStringifier;
 
-jspb.Message.toObjectExtension = function (a, b, c, d, e) {
-  for (var f in c) {
-    var g = c[f],
-        h = d.call(a, g);
+if (hasToStringTag) {
+  has = callBound('Object.prototype.hasOwnProperty');
+  $exec = callBound('RegExp.prototype.exec');
+  isRegexMarker = {};
 
-    if (null != h) {
-      for (var k in g.fieldName) if (g.fieldName.hasOwnProperty(k)) break;
+  var throwRegexMarker = function () {
+    throw isRegexMarker;
+  };
 
-      b[k] = g.toObjectFn ? g.isRepeated ? jspb.Message.toObjectList(h, g.toObjectFn, e) : g.toObjectFn(e, h) : h;
-    }
-  }
-};
+  badStringifier = {
+    toString: throwRegexMarker,
+    valueOf: throwRegexMarker
+  };
 
-jspb.Message.serializeBinaryExtensions = function (a, b, c, d) {
-  for (var e in c) {
-    var f = c[e],
-        g = f.fieldInfo;
-    if (!f.binaryWriterFn) throw Error("Message extension present that was generated without binary serialization support");
-    var h = d.call(a, g);
-    if (null != h) if (g.isMessageType()) {
-      if (f.binaryMessageSerializeFn) f.binaryWriterFn.call(b, g.fieldIndex, h, f.binaryMessageSerializeFn);else throw Error("Message extension present holding submessage without binary support enabled, and message is being serialized to binary format");
-    } else f.binaryWriterFn.call(b, g.fieldIndex, h);
+  if (typeof Symbol.toPrimitive === 'symbol') {
+    badStringifier[Symbol.toPrimitive] = throwRegexMarker;
   }
-};
-
-jspb.Message.readBinaryExtension = function (a, b, c, d, e) {
-  var f = c[b.getFieldNumber()];
-
-  if (f) {
-    c = f.fieldInfo;
-    if (!f.binaryReaderFn) throw Error("Deserializing extension whose generated code does not support binary format");
+}
 
-    if (c.isMessageType()) {
-      var g = new c.ctor();
-      f.binaryReaderFn.call(b, g, f.binaryMessageDeserializeFn);
-    } else g = f.binaryReaderFn.call(b);
+var $toString = callBound('Object.prototype.toString');
+var gOPD = Object.getOwnPropertyDescriptor;
+var regexClass = '[object RegExp]';
+module.exports = hasToStringTag // eslint-disable-next-line consistent-return
+? function isRegex(value) {
+  if (!value || typeof value !== 'object') {
+    return false;
+  }
 
-    c.isRepeated && !f.isPacked ? (b = d.call(a, c)) ? b.push(g) : e.call(a, c, [g]) : e.call(a, c, g);
-  } else b.skipField();
-};
+  var descriptor = gOPD(value, 'lastIndex');
+  var hasLastIndexDataProperty = descriptor && has(descriptor, 'value');
 
-jspb.Message.getField = function (a, b) {
-  if (b < a.pivot_) {
-    b = jspb.Message.getIndex_(a, b);
-    var c = a.array[b];
-    return c === jspb.Message.EMPTY_LIST_SENTINEL_ ? a.array[b] = [] : c;
+  if (!hasLastIndexDataProperty) {
+    return false;
   }
 
-  if (a.extensionObject_) return c = a.extensionObject_[b], c === jspb.Message.EMPTY_LIST_SENTINEL_ ? a.extensionObject_[b] = [] : c;
-};
+  try {
+    $exec(value, badStringifier);
+  } catch (e) {
+    return e === isRegexMarker;
+  }
+} : function isRegex(value) {
+  // In older browsers, typeof regex incorrectly returns 'function'
+  if (!value || typeof value !== 'object' && typeof value !== 'function') {
+    return false;
+  }
 
-jspb.Message.getRepeatedField = function (a, b) {
-  return jspb.Message.getField(a, b);
+  return $toString(value) === regexClass;
 };
 
-jspb.Message.getOptionalFloatingPointField = function (a, b) {
-  a = jspb.Message.getField(a, b);
-  return null == a ? a : +a;
-};
+/***/ }),
 
-jspb.Message.getBooleanField = function (a, b) {
-  a = jspb.Message.getField(a, b);
-  return null == a ? a : !!a;
-};
+/***/ "./node_modules/is-set/index.js":
+/*!**************************************!*\
+  !*** ./node_modules/is-set/index.js ***!
+  \**************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-jspb.Message.getRepeatedFloatingPointField = function (a, b) {
-  var c = jspb.Message.getRepeatedField(a, b);
-  a.convertedPrimitiveFields_ || (a.convertedPrimitiveFields_ = {});
+"use strict";
 
-  if (!a.convertedPrimitiveFields_[b]) {
-    for (var d = 0; d < c.length; d++) c[d] = +c[d];
 
-    a.convertedPrimitiveFields_[b] = !0;
-  }
+var $Map = typeof Map === 'function' && Map.prototype ? Map : null;
+var $Set = typeof Set === 'function' && Set.prototype ? Set : null;
+var exported;
 
-  return c;
-};
+if (!$Set) {
+  // eslint-disable-next-line no-unused-vars
+  exported = function isSet(x) {
+    // `Set` is not present in this environment.
+    return false;
+  };
+}
 
-jspb.Message.getRepeatedBooleanField = function (a, b) {
-  var c = jspb.Message.getRepeatedField(a, b);
-  a.convertedPrimitiveFields_ || (a.convertedPrimitiveFields_ = {});
+var $mapHas = $Map ? Map.prototype.has : null;
+var $setHas = $Set ? Set.prototype.has : null;
 
-  if (!a.convertedPrimitiveFields_[b]) {
-    for (var d = 0; d < c.length; d++) c[d] = !!c[d];
+if (!exported && !$setHas) {
+  // eslint-disable-next-line no-unused-vars
+  exported = function isSet(x) {
+    // `Set` does not have a `has` method
+    return false;
+  };
+}
 
-    a.convertedPrimitiveFields_[b] = !0;
+module.exports = exported || function isSet(x) {
+  if (!x || typeof x !== 'object') {
+    return false;
   }
 
-  return c;
-};
+  try {
+    $setHas.call(x);
 
-jspb.Message.bytesAsB64 = function (a) {
-  if (null == a || "string" === typeof a) return a;
-  if (jspb.Message.SUPPORTS_UINT8ARRAY_ && a instanceof Uint8Array) return goog.crypt.base64.encodeByteArray(a);
-  goog.asserts.fail("Cannot coerce to b64 string: " + goog.typeOf(a));
-  return null;
-};
+    if ($mapHas) {
+      try {
+        $mapHas.call(x);
+      } catch (e) {
+        return true;
+      }
+    }
 
-jspb.Message.bytesAsU8 = function (a) {
-  if (null == a || a instanceof Uint8Array) return a;
-  if ("string" === typeof a) return goog.crypt.base64.decodeStringToUint8Array(a);
-  goog.asserts.fail("Cannot coerce to Uint8Array: " + goog.typeOf(a));
-  return null;
-};
+    return x instanceof $Set; // core-js workaround, pre-v2.5.0
+  } catch (e) {}
 
-jspb.Message.bytesListAsB64 = function (a) {
-  jspb.Message.assertConsistentTypes_(a);
-  return a.length && "string" !== typeof a[0] ? goog.array.map(a, jspb.Message.bytesAsB64) : a;
+  return false;
 };
 
-jspb.Message.bytesListAsU8 = function (a) {
-  jspb.Message.assertConsistentTypes_(a);
-  return !a.length || a[0] instanceof Uint8Array ? a : goog.array.map(a, jspb.Message.bytesAsU8);
-};
+/***/ }),
 
-jspb.Message.assertConsistentTypes_ = function (a) {
-  if (goog.DEBUG && a && 1 < a.length) {
-    var b = goog.typeOf(a[0]);
-    goog.array.forEach(a, function (a) {
-      goog.typeOf(a) != b && goog.asserts.fail("Inconsistent type in JSPB repeated field array. Got " + goog.typeOf(a) + " expected " + b);
-    });
-  }
-};
+/***/ "./node_modules/is-string/index.js":
+/*!*****************************************!*\
+  !*** ./node_modules/is-string/index.js ***!
+  \*****************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-jspb.Message.getFieldWithDefault = function (a, b, c) {
-  a = jspb.Message.getField(a, b);
-  return null == a ? c : a;
-};
+"use strict";
 
-jspb.Message.getBooleanFieldWithDefault = function (a, b, c) {
-  a = jspb.Message.getBooleanField(a, b);
-  return null == a ? c : a;
-};
 
-jspb.Message.getFloatingPointFieldWithDefault = function (a, b, c) {
-  a = jspb.Message.getOptionalFloatingPointField(a, b);
-  return null == a ? c : a;
+var strValue = String.prototype.valueOf;
+
+var tryStringObject = function tryStringObject(value) {
+  try {
+    strValue.call(value);
+    return true;
+  } catch (e) {
+    return false;
+  }
 };
 
-jspb.Message.getFieldProto3 = jspb.Message.getFieldWithDefault;
+var toStr = Object.prototype.toString;
+var strClass = '[object String]';
 
-jspb.Message.getMapField = function (a, b, c, d) {
-  a.wrappers_ || (a.wrappers_ = {});
-  if (b in a.wrappers_) return a.wrappers_[b];
-  var e = jspb.Message.getField(a, b);
+var hasToStringTag = __webpack_require__(/*! has-tostringtag/shams */ "./node_modules/has-tostringtag/shams.js")();
 
-  if (!e) {
-    if (c) return;
-    e = [];
-    jspb.Message.setField(a, b, e);
+module.exports = function isString(value) {
+  if (typeof value === 'string') {
+    return true;
   }
 
-  return a.wrappers_[b] = new jspb.Map(e, d);
-};
-
-jspb.Message.setField = function (a, b, c) {
-  goog.asserts.assertInstanceof(a, jspb.Message);
-  b < a.pivot_ ? a.array[jspb.Message.getIndex_(a, b)] = c : (jspb.Message.maybeInitEmptyExtensionObject_(a), a.extensionObject_[b] = c);
-  return a;
-};
+  if (typeof value !== 'object') {
+    return false;
+  }
 
-jspb.Message.setProto3IntField = function (a, b, c) {
-  return jspb.Message.setFieldIgnoringDefault_(a, b, c, 0);
+  return hasToStringTag ? tryStringObject(value) : toStr.call(value) === strClass;
 };
 
-jspb.Message.setProto3FloatField = function (a, b, c) {
-  return jspb.Message.setFieldIgnoringDefault_(a, b, c, 0);
-};
+/***/ }),
 
-jspb.Message.setProto3BooleanField = function (a, b, c) {
-  return jspb.Message.setFieldIgnoringDefault_(a, b, c, !1);
-};
+/***/ "./node_modules/is-symbol/index.js":
+/*!*****************************************!*\
+  !*** ./node_modules/is-symbol/index.js ***!
+  \*****************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-jspb.Message.setProto3StringField = function (a, b, c) {
-  return jspb.Message.setFieldIgnoringDefault_(a, b, c, "");
-};
+"use strict";
 
-jspb.Message.setProto3BytesField = function (a, b, c) {
-  return jspb.Message.setFieldIgnoringDefault_(a, b, c, "");
-};
 
-jspb.Message.setProto3EnumField = function (a, b, c) {
-  return jspb.Message.setFieldIgnoringDefault_(a, b, c, 0);
-};
+var toStr = Object.prototype.toString;
 
-jspb.Message.setProto3StringIntField = function (a, b, c) {
-  return jspb.Message.setFieldIgnoringDefault_(a, b, c, "0");
-};
+var hasSymbols = __webpack_require__(/*! has-symbols */ "./node_modules/has-symbols/index.js")();
 
-jspb.Message.setFieldIgnoringDefault_ = function (a, b, c, d) {
-  goog.asserts.assertInstanceof(a, jspb.Message);
-  c !== d ? jspb.Message.setField(a, b, c) : b < a.pivot_ ? a.array[jspb.Message.getIndex_(a, b)] = null : (jspb.Message.maybeInitEmptyExtensionObject_(a), delete a.extensionObject_[b]);
-  return a;
-};
+if (hasSymbols) {
+  var symToStr = Symbol.prototype.toString;
+  var symStringRegex = /^Symbol\(.*\)$/;
 
-jspb.Message.addToRepeatedField = function (a, b, c, d) {
-  goog.asserts.assertInstanceof(a, jspb.Message);
-  b = jspb.Message.getRepeatedField(a, b);
-  void 0 != d ? b.splice(d, 0, c) : b.push(c);
-  return a;
-};
+  var isSymbolObject = function isRealSymbolObject(value) {
+    if (typeof value.valueOf() !== 'symbol') {
+      return false;
+    }
 
-jspb.Message.setOneofField = function (a, b, c, d) {
-  goog.asserts.assertInstanceof(a, jspb.Message);
-  (c = jspb.Message.computeOneofCase(a, c)) && c !== b && void 0 !== d && (a.wrappers_ && c in a.wrappers_ && (a.wrappers_[c] = void 0), jspb.Message.setField(a, c, void 0));
-  return jspb.Message.setField(a, b, d);
-};
+    return symStringRegex.test(symToStr.call(value));
+  };
 
-jspb.Message.computeOneofCase = function (a, b) {
-  for (var c, d, e = 0; e < b.length; e++) {
-    var f = b[e],
-        g = jspb.Message.getField(a, f);
-    null != g && (c = f, d = g, jspb.Message.setField(a, f, void 0));
-  }
+  module.exports = function isSymbol(value) {
+    if (typeof value === 'symbol') {
+      return true;
+    }
 
-  return c ? (jspb.Message.setField(a, c, d), c) : 0;
-};
+    if (toStr.call(value) !== '[object Symbol]') {
+      return false;
+    }
 
-jspb.Message.getWrapperField = function (a, b, c, d) {
-  a.wrappers_ || (a.wrappers_ = {});
+    try {
+      return isSymbolObject(value);
+    } catch (e) {
+      return false;
+    }
+  };
+} else {
+  module.exports = function isSymbol(value) {
+    // this environment does not support Symbols.
+    return  false && false;
+  };
+}
 
-  if (!a.wrappers_[c]) {
-    var e = jspb.Message.getField(a, c);
-    if (d || e) a.wrappers_[c] = new b(e);
-  }
+/***/ }),
 
-  return a.wrappers_[c];
-};
+/***/ "./node_modules/is-typed-array/index.js":
+/*!**********************************************!*\
+  !*** ./node_modules/is-typed-array/index.js ***!
+  \**********************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-jspb.Message.getRepeatedWrapperField = function (a, b, c) {
-  jspb.Message.wrapRepeatedField_(a, b, c);
-  b = a.wrappers_[c];
-  b == jspb.Message.EMPTY_LIST_SENTINEL_ && (b = a.wrappers_[c] = []);
-  return b;
-};
+"use strict";
 
-jspb.Message.wrapRepeatedField_ = function (a, b, c) {
-  a.wrappers_ || (a.wrappers_ = {});
 
-  if (!a.wrappers_[c]) {
-    for (var d = jspb.Message.getRepeatedField(a, c), e = [], f = 0; f < d.length; f++) e[f] = new b(d[f]);
+var forEach = __webpack_require__(/*! foreach */ "./node_modules/foreach/index.js");
 
-    a.wrappers_[c] = e;
-  }
-};
+var availableTypedArrays = __webpack_require__(/*! available-typed-arrays */ "./node_modules/available-typed-arrays/index.js");
 
-jspb.Message.setWrapperField = function (a, b, c) {
-  goog.asserts.assertInstanceof(a, jspb.Message);
-  a.wrappers_ || (a.wrappers_ = {});
-  var d = c ? c.toArray() : c;
-  a.wrappers_[b] = c;
-  return jspb.Message.setField(a, b, d);
-};
+var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
 
-jspb.Message.setOneofWrapperField = function (a, b, c, d) {
-  goog.asserts.assertInstanceof(a, jspb.Message);
-  a.wrappers_ || (a.wrappers_ = {});
-  var e = d ? d.toArray() : d;
-  a.wrappers_[b] = d;
-  return jspb.Message.setOneofField(a, b, c, e);
-};
+var $toString = callBound('Object.prototype.toString');
 
-jspb.Message.setRepeatedWrapperField = function (a, b, c) {
-  goog.asserts.assertInstanceof(a, jspb.Message);
-  a.wrappers_ || (a.wrappers_ = {});
-  c = c || [];
+var hasToStringTag = __webpack_require__(/*! has-tostringtag/shams */ "./node_modules/has-tostringtag/shams.js")();
 
-  for (var d = [], e = 0; e < c.length; e++) d[e] = c[e].toArray();
+var g = typeof globalThis === 'undefined' ? global : globalThis;
+var typedArrays = availableTypedArrays();
 
-  a.wrappers_[b] = c;
-  return jspb.Message.setField(a, b, d);
-};
+var $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {
+  for (var i = 0; i < array.length; i += 1) {
+    if (array[i] === value) {
+      return i;
+    }
+  }
 
-jspb.Message.addToRepeatedWrapperField = function (a, b, c, d, e) {
-  jspb.Message.wrapRepeatedField_(a, d, b);
-  var f = a.wrappers_[b];
-  f || (f = a.wrappers_[b] = []);
-  c = c ? c : new d();
-  a = jspb.Message.getRepeatedField(a, b);
-  void 0 != e ? (f.splice(e, 0, c), a.splice(e, 0, c.toArray())) : (f.push(c), a.push(c.toArray()));
-  return c;
+  return -1;
 };
 
-jspb.Message.toMap = function (a, b, c, d) {
-  for (var e = {}, f = 0; f < a.length; f++) e[b.call(a[f])] = c ? c.call(a[f], d, a[f]) : a[f];
-
-  return e;
-};
+var $slice = callBound('String.prototype.slice');
+var toStrTags = {};
 
-jspb.Message.prototype.syncMapFields_ = function () {
-  if (this.wrappers_) for (var a in this.wrappers_) {
-    var b = this.wrappers_[a];
-    if (goog.isArray(b)) for (var c = 0; c < b.length; c++) b[c] && b[c].toArray();else b && b.toArray();
-  }
-};
+var gOPD = __webpack_require__(/*! es-abstract/helpers/getOwnPropertyDescriptor */ "./node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js");
 
-jspb.Message.prototype.toArray = function () {
-  this.syncMapFields_();
-  return this.array;
-};
+var getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');
 
-jspb.Message.GENERATE_TO_STRING && (jspb.Message.prototype.toString = function () {
-  this.syncMapFields_();
-  return this.array.toString();
-});
+if (hasToStringTag && gOPD && getPrototypeOf) {
+  forEach(typedArrays, function (typedArray) {
+    var arr = new g[typedArray]();
 
-jspb.Message.prototype.getExtension = function (a) {
-  if (this.extensionObject_) {
-    this.wrappers_ || (this.wrappers_ = {});
-    var b = a.fieldIndex;
+    if (Symbol.toStringTag in arr) {
+      var proto = getPrototypeOf(arr);
+      var descriptor = gOPD(proto, Symbol.toStringTag);
 
-    if (a.isRepeated) {
-      if (a.isMessageType()) return this.wrappers_[b] || (this.wrappers_[b] = goog.array.map(this.extensionObject_[b] || [], function (b) {
-        return new a.ctor(b);
-      })), this.wrappers_[b];
-    } else if (a.isMessageType()) return !this.wrappers_[b] && this.extensionObject_[b] && (this.wrappers_[b] = new a.ctor(this.extensionObject_[b])), this.wrappers_[b];
+      if (!descriptor) {
+        var superProto = getPrototypeOf(proto);
+        descriptor = gOPD(superProto, Symbol.toStringTag);
+      }
 
-    return this.extensionObject_[b];
-  }
-};
+      toStrTags[typedArray] = descriptor.get;
+    }
+  });
+}
 
-jspb.Message.prototype.setExtension = function (a, b) {
-  this.wrappers_ || (this.wrappers_ = {});
-  jspb.Message.maybeInitEmptyExtensionObject_(this);
-  var c = a.fieldIndex;
-  a.isRepeated ? (b = b || [], a.isMessageType() ? (this.wrappers_[c] = b, this.extensionObject_[c] = goog.array.map(b, function (a) {
-    return a.toArray();
-  })) : this.extensionObject_[c] = b) : a.isMessageType() ? (this.wrappers_[c] = b, this.extensionObject_[c] = b ? b.toArray() : b) : this.extensionObject_[c] = b;
-  return this;
+var tryTypedArrays = function tryAllTypedArrays(value) {
+  var anyTrue = false;
+  forEach(toStrTags, function (getter, typedArray) {
+    if (!anyTrue) {
+      try {
+        anyTrue = getter.call(value) === typedArray;
+      } catch (e) {
+        /**/
+      }
+    }
+  });
+  return anyTrue;
 };
 
-jspb.Message.difference = function (a, b) {
-  if (!(a instanceof b.constructor)) throw Error("Messages have different types.");
-  var c = a.toArray();
-  b = b.toArray();
-  var d = [],
-      e = 0,
-      f = c.length > b.length ? c.length : b.length;
-  a.getJsPbMessageId() && (d[0] = a.getJsPbMessageId(), e = 1);
+module.exports = function isTypedArray(value) {
+  if (!value || typeof value !== 'object') {
+    return false;
+  }
 
-  for (; e < f; e++) jspb.Message.compareFields(c[e], b[e]) || (d[e] = b[e]);
+  if (!hasToStringTag || !(Symbol.toStringTag in value)) {
+    var tag = $slice($toString(value), 8, -1);
+    return $indexOf(typedArrays, tag) > -1;
+  }
 
-  return new a.constructor(d);
-};
+  if (!gOPD) {
+    return false;
+  }
 
-jspb.Message.equals = function (a, b) {
-  return a == b || !(!a || !b) && a instanceof b.constructor && jspb.Message.compareFields(a.toArray(), b.toArray());
+  return tryTypedArrays(value);
 };
 
-jspb.Message.compareExtensions = function (a, b) {
-  a = a || {};
-  b = b || {};
-  var c = {},
-      d;
+/***/ }),
 
-  for (d in a) c[d] = 0;
+/***/ "./node_modules/is-weakmap/index.js":
+/*!******************************************!*\
+  !*** ./node_modules/is-weakmap/index.js ***!
+  \******************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-  for (d in b) c[d] = 0;
+"use strict";
 
-  for (d in c) if (!jspb.Message.compareFields(a[d], b[d])) return !1;
 
-  return !0;
-};
+var $WeakMap = typeof WeakMap === 'function' && WeakMap.prototype ? WeakMap : null;
+var $WeakSet = typeof WeakSet === 'function' && WeakSet.prototype ? WeakSet : null;
+var exported;
 
-jspb.Message.compareFields = function (a, b) {
-  if (a == b) return !0;
-  if (!goog.isObject(a) || !goog.isObject(b)) return "number" === typeof a && isNaN(a) || "number" === typeof b && isNaN(b) ? String(a) == String(b) : !1;
-  if (a.constructor != b.constructor) return !1;
+if (!$WeakMap) {
+  // eslint-disable-next-line no-unused-vars
+  exported = function isWeakMap(x) {
+    // `WeakMap` is not present in this environment.
+    return false;
+  };
+}
 
-  if (jspb.Message.SUPPORTS_UINT8ARRAY_ && a.constructor === Uint8Array) {
-    if (a.length != b.length) return !1;
+var $mapHas = $WeakMap ? $WeakMap.prototype.has : null;
+var $setHas = $WeakSet ? $WeakSet.prototype.has : null;
 
-    for (var c = 0; c < a.length; c++) if (a[c] != b[c]) return !1;
+if (!exported && !$mapHas) {
+  // eslint-disable-next-line no-unused-vars
+  exported = function isWeakMap(x) {
+    // `WeakMap` does not have a `has` method
+    return false;
+  };
+}
 
-    return !0;
+module.exports = exported || function isWeakMap(x) {
+  if (!x || typeof x !== 'object') {
+    return false;
   }
 
-  if (a.constructor === Array) {
-    var d = void 0,
-        e = void 0,
-        f = Math.max(a.length, b.length);
+  try {
+    $mapHas.call(x, $mapHas);
 
-    for (c = 0; c < f; c++) {
-      var g = a[c],
-          h = b[c];
-      g && g.constructor == Object && (goog.asserts.assert(void 0 === d), goog.asserts.assert(c === a.length - 1), d = g, g = void 0);
-      h && h.constructor == Object && (goog.asserts.assert(void 0 === e), goog.asserts.assert(c === b.length - 1), e = h, h = void 0);
-      if (!jspb.Message.compareFields(g, h)) return !1;
+    if ($setHas) {
+      try {
+        $setHas.call(x, $setHas);
+      } catch (e) {
+        return true;
+      }
     }
 
-    return d || e ? (d = d || {}, e = e || {}, jspb.Message.compareExtensions(d, e)) : !0;
-  }
+    return x instanceof $WeakMap; // core-js workaround, pre-v3
+  } catch (e) {}
 
-  if (a.constructor === Object) return jspb.Message.compareExtensions(a, b);
-  throw Error("Invalid type in JSPB array");
+  return false;
 };
 
-jspb.Message.prototype.cloneMessage = function () {
-  return jspb.Message.cloneMessage(this);
-};
+/***/ }),
 
-jspb.Message.prototype.clone = function () {
-  return jspb.Message.cloneMessage(this);
-};
+/***/ "./node_modules/is-weakset/index.js":
+/*!******************************************!*\
+  !*** ./node_modules/is-weakset/index.js ***!
+  \******************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-jspb.Message.clone = function (a) {
-  return jspb.Message.cloneMessage(a);
-};
+"use strict";
 
-jspb.Message.cloneMessage = function (a) {
-  return new a.constructor(jspb.Message.clone_(a.toArray()));
-};
 
-jspb.Message.copyInto = function (a, b) {
-  goog.asserts.assertInstanceof(a, jspb.Message);
-  goog.asserts.assertInstanceof(b, jspb.Message);
-  goog.asserts.assert(a.constructor == b.constructor, "Copy source and target message should have the same type.");
-  a = jspb.Message.clone(a);
+var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
 
-  for (var c = b.toArray(), d = a.toArray(), e = c.length = 0; e < d.length; e++) c[e] = d[e];
+var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
 
-  b.wrappers_ = a.wrappers_;
-  b.extensionObject_ = a.extensionObject_;
-};
+var $WeakSet = GetIntrinsic('%WeakSet%', true);
+var $setHas = callBound('WeakSet.prototype.has', true);
 
-jspb.Message.clone_ = function (a) {
-  if (goog.isArray(a)) {
-    for (var b = Array(a.length), c = 0; c < a.length; c++) {
-      var d = a[c];
-      null != d && (b[c] = "object" == typeof d ? jspb.Message.clone_(goog.asserts.assert(d)) : d);
+if ($setHas) {
+  var $mapHas = callBound('WeakMap.prototype.has', true);
+
+  module.exports = function isWeakSet(x) {
+    if (!x || typeof x !== 'object') {
+      return false;
     }
 
-    return b;
-  }
+    try {
+      $setHas(x, $setHas);
 
-  if (jspb.Message.SUPPORTS_UINT8ARRAY_ && a instanceof Uint8Array) return new Uint8Array(a);
-  b = {};
+      if ($mapHas) {
+        try {
+          $mapHas(x, $mapHas);
+        } catch (e) {
+          return true;
+        }
+      }
 
-  for (c in a) d = a[c], null != d && (b[c] = "object" == typeof d ? jspb.Message.clone_(goog.asserts.assert(d)) : d);
+      return x instanceof $WeakSet; // core-js workaround, pre-v3
+    } catch (e) {}
 
-  return b;
-};
+    return false;
+  };
+} else {
+  // eslint-disable-next-line no-unused-vars
+  module.exports = function isWeakSet(x) {
+    // `WeakSet` does not exist, or does not have a `has` method
+    return false;
+  };
+}
 
-jspb.Message.registerMessageType = function (a, b) {
-  b.messageId = a;
-};
+/***/ }),
 
-jspb.Message.messageSetExtensions = {};
-jspb.Message.messageSetExtensionsBinary = {};
-jspb.arith = {};
+/***/ "./node_modules/locale-currency/index.js":
+/*!***********************************************!*\
+  !*** ./node_modules/locale-currency/index.js ***!
+  \***********************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-jspb.arith.UInt64 = function (a, b) {
-  this.lo = a;
-  this.hi = b;
-};
+var map = __webpack_require__(/*! ./map */ "./node_modules/locale-currency/map.js");
 
-jspb.arith.UInt64.prototype.cmp = function (a) {
-  return this.hi < a.hi || this.hi == a.hi && this.lo < a.lo ? -1 : this.hi == a.hi && this.lo == a.lo ? 0 : 1;
-};
+var getCountryCode = function (localeString) {
+  var components = localeString.split("_");
 
-jspb.arith.UInt64.prototype.rightShift = function () {
-  return new jspb.arith.UInt64((this.lo >>> 1 | (this.hi & 1) << 31) >>> 0, this.hi >>> 1 >>> 0);
-};
+  if (components.length == 2) {
+    return components.pop();
+  }
 
-jspb.arith.UInt64.prototype.leftShift = function () {
-  return new jspb.arith.UInt64(this.lo << 1 >>> 0, (this.hi << 1 | this.lo >>> 31) >>> 0);
-};
+  components = localeString.split("-");
 
-jspb.arith.UInt64.prototype.msb = function () {
-  return !!(this.hi & 2147483648);
-};
+  if (components.length == 2) {
+    return components.pop();
+  }
 
-jspb.arith.UInt64.prototype.lsb = function () {
-  return !!(this.lo & 1);
+  return localeString;
 };
 
-jspb.arith.UInt64.prototype.zero = function () {
-  return 0 == this.lo && 0 == this.hi;
-};
+exports.getCurrency = function (locale) {
+  var countryCode = getCountryCode(locale).toUpperCase();
 
-jspb.arith.UInt64.prototype.add = function (a) {
-  return new jspb.arith.UInt64((this.lo + a.lo & 4294967295) >>> 0 >>> 0, ((this.hi + a.hi & 4294967295) >>> 0) + (4294967296 <= this.lo + a.lo ? 1 : 0) >>> 0);
-};
+  if (countryCode in map) {
+    return map[countryCode];
+  }
 
-jspb.arith.UInt64.prototype.sub = function (a) {
-  return new jspb.arith.UInt64((this.lo - a.lo & 4294967295) >>> 0 >>> 0, ((this.hi - a.hi & 4294967295) >>> 0) - (0 > this.lo - a.lo ? 1 : 0) >>> 0);
+  return null;
 };
 
-jspb.arith.UInt64.mul32x32 = function (a, b) {
-  var c = a & 65535;
-  a >>>= 16;
-  var d = b & 65535,
-      e = b >>> 16;
-  b = c * d + 65536 * (c * e & 65535) + 65536 * (a * d & 65535);
+exports.getLocales = function (currencyCode) {
+  currencyCode = currencyCode.toUpperCase();
+  var locales = [];
 
-  for (c = a * e + (c * e >>> 16) + (a * d >>> 16); 4294967296 <= b;) b -= 4294967296, c += 1;
+  for (countryCode in map) {
+    if (map[countryCode] === currencyCode) {
+      locales.push(countryCode);
+    }
+  }
 
-  return new jspb.arith.UInt64(b >>> 0, c >>> 0);
+  return locales;
 };
 
-jspb.arith.UInt64.prototype.mul = function (a) {
-  var b = jspb.arith.UInt64.mul32x32(this.lo, a);
-  a = jspb.arith.UInt64.mul32x32(this.hi, a);
-  a.hi = a.lo;
-  a.lo = 0;
-  return b.add(a);
-};
-
-jspb.arith.UInt64.prototype.div = function (a) {
-  if (0 == a) return [];
-  var b = new jspb.arith.UInt64(0, 0),
-      c = new jspb.arith.UInt64(this.lo, this.hi);
-  a = new jspb.arith.UInt64(a, 0);
-
-  for (var d = new jspb.arith.UInt64(1, 0); !a.msb();) a = a.leftShift(), d = d.leftShift();
+/***/ }),
 
-  for (; !d.zero();) 0 >= a.cmp(c) && (b = b.add(d), c = c.sub(a)), a = a.rightShift(), d = d.rightShift();
+/***/ "./node_modules/locale-currency/map.js":
+/*!*********************************************!*\
+  !*** ./node_modules/locale-currency/map.js ***!
+  \*********************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
 
-  return [b, c];
+// Generated using ShowCurrencies.java
+var map = {
+  AD: 'EUR',
+  AE: 'AED',
+  AF: 'AFN',
+  AG: 'XCD',
+  AI: 'XCD',
+  AL: 'ALL',
+  AM: 'AMD',
+  AN: 'ANG',
+  AO: 'AOA',
+  AR: 'ARS',
+  AS: 'USD',
+  AT: 'EUR',
+  AU: 'AUD',
+  AW: 'AWG',
+  AX: 'EUR',
+  AZ: 'AZN',
+  BA: 'BAM',
+  BB: 'BBD',
+  BD: 'BDT',
+  BE: 'EUR',
+  BF: 'XOF',
+  BG: 'BGN',
+  BH: 'BHD',
+  BI: 'BIF',
+  BJ: 'XOF',
+  BL: 'EUR',
+  BM: 'BMD',
+  BN: 'BND',
+  BO: 'BOB',
+  BQ: 'USD',
+  BR: 'BRL',
+  BS: 'BSD',
+  BT: 'BTN',
+  BV: 'NOK',
+  BW: 'BWP',
+  BY: 'BYR',
+  BZ: 'BZD',
+  CA: 'CAD',
+  CC: 'AUD',
+  CD: 'CDF',
+  CF: 'XAF',
+  CG: 'XAF',
+  CH: 'CHF',
+  CI: 'XOF',
+  CK: 'NZD',
+  CL: 'CLP',
+  CM: 'XAF',
+  CN: 'CNY',
+  CO: 'COP',
+  CR: 'CRC',
+  CU: 'CUP',
+  CV: 'CVE',
+  CW: 'ANG',
+  CX: 'AUD',
+  CY: 'EUR',
+  CZ: 'CZK',
+  DE: 'EUR',
+  DJ: 'DJF',
+  DK: 'DKK',
+  DM: 'XCD',
+  DO: 'DOP',
+  DZ: 'DZD',
+  EC: 'USD',
+  EE: 'EUR',
+  EG: 'EGP',
+  EH: 'MAD',
+  ER: 'ERN',
+  ES: 'EUR',
+  ET: 'ETB',
+  FI: 'EUR',
+  FJ: 'FJD',
+  FK: 'FKP',
+  FM: 'USD',
+  FO: 'DKK',
+  FR: 'EUR',
+  GA: 'XAF',
+  GB: 'GBP',
+  GD: 'XCD',
+  GE: 'GEL',
+  GF: 'EUR',
+  GG: 'GBP',
+  GH: 'GHS',
+  GI: 'GIP',
+  GL: 'DKK',
+  GM: 'GMD',
+  GN: 'GNF',
+  GP: 'EUR',
+  GQ: 'XAF',
+  GR: 'EUR',
+  GS: 'GBP',
+  GT: 'GTQ',
+  GU: 'USD',
+  GW: 'XOF',
+  GY: 'GYD',
+  HK: 'HKD',
+  HM: 'AUD',
+  HN: 'HNL',
+  HR: 'HRK',
+  HT: 'HTG',
+  HU: 'HUF',
+  ID: 'IDR',
+  IE: 'EUR',
+  IL: 'ILS',
+  IM: 'GBP',
+  IN: 'INR',
+  IO: 'USD',
+  IQ: 'IQD',
+  IR: 'IRR',
+  IS: 'ISK',
+  IT: 'EUR',
+  JE: 'GBP',
+  JM: 'JMD',
+  JO: 'JOD',
+  JP: 'JPY',
+  KE: 'KES',
+  KG: 'KGS',
+  KH: 'KHR',
+  KI: 'AUD',
+  KM: 'KMF',
+  KN: 'XCD',
+  KP: 'KPW',
+  KR: 'KRW',
+  KW: 'KWD',
+  KY: 'KYD',
+  KZ: 'KZT',
+  LA: 'LAK',
+  LB: 'LBP',
+  LC: 'XCD',
+  LI: 'CHF',
+  LK: 'LKR',
+  LR: 'LRD',
+  LS: 'LSL',
+  LT: 'LTL',
+  LU: 'EUR',
+  LV: 'LVL',
+  LY: 'LYD',
+  MA: 'MAD',
+  MC: 'EUR',
+  MD: 'MDL',
+  ME: 'EUR',
+  MF: 'EUR',
+  MG: 'MGA',
+  MH: 'USD',
+  MK: 'MKD',
+  ML: 'XOF',
+  MM: 'MMK',
+  MN: 'MNT',
+  MO: 'MOP',
+  MP: 'USD',
+  MQ: 'EUR',
+  MR: 'MRO',
+  MS: 'XCD',
+  MT: 'EUR',
+  MU: 'MUR',
+  MV: 'MVR',
+  MW: 'MWK',
+  MX: 'MXN',
+  MY: 'MYR',
+  MZ: 'MZN',
+  NA: 'NAD',
+  NC: 'XPF',
+  NE: 'XOF',
+  NF: 'AUD',
+  NG: 'NGN',
+  NI: 'NIO',
+  NL: 'EUR',
+  NO: 'NOK',
+  NP: 'NPR',
+  NR: 'AUD',
+  NU: 'NZD',
+  NZ: 'NZD',
+  OM: 'OMR',
+  PA: 'PAB',
+  PE: 'PEN',
+  PF: 'XPF',
+  PG: 'PGK',
+  PH: 'PHP',
+  PK: 'PKR',
+  PL: 'PLN',
+  PM: 'EUR',
+  PN: 'NZD',
+  PR: 'USD',
+  PS: 'ILS',
+  PT: 'EUR',
+  PW: 'USD',
+  PY: 'PYG',
+  QA: 'QAR',
+  RE: 'EUR',
+  RO: 'RON',
+  RS: 'RSD',
+  RU: 'RUB',
+  RW: 'RWF',
+  SA: 'SAR',
+  SB: 'SBD',
+  SC: 'SCR',
+  SD: 'SDG',
+  SE: 'SEK',
+  SG: 'SGD',
+  SH: 'SHP',
+  SI: 'EUR',
+  SJ: 'NOK',
+  SK: 'EUR',
+  SL: 'SLL',
+  SM: 'EUR',
+  SN: 'XOF',
+  SO: 'SOS',
+  SR: 'SRD',
+  ST: 'STD',
+  SV: 'SVC',
+  SX: 'ANG',
+  SY: 'SYP',
+  SZ: 'SZL',
+  TC: 'USD',
+  TD: 'XAF',
+  TF: 'EUR',
+  TG: 'XOF',
+  TH: 'THB',
+  TJ: 'TJS',
+  TK: 'NZD',
+  TL: 'USD',
+  TM: 'TMT',
+  TN: 'TND',
+  TO: 'TOP',
+  TR: 'TRY',
+  TT: 'TTD',
+  TV: 'AUD',
+  TW: 'TWD',
+  TZ: 'TZS',
+  UA: 'UAH',
+  UG: 'UGX',
+  UM: 'USD',
+  US: 'USD',
+  UY: 'UYU',
+  UZ: 'UZS',
+  VA: 'EUR',
+  VC: 'XCD',
+  VE: 'VEF',
+  VG: 'USD',
+  VI: 'USD',
+  VN: 'VND',
+  VU: 'VUV',
+  WF: 'XPF',
+  WS: 'WST',
+  YE: 'YER',
+  YT: 'EUR',
+  ZA: 'ZAR',
+  ZM: 'ZMK',
+  ZW: 'ZWL'
 };
+module.exports = map;
 
-jspb.arith.UInt64.prototype.toString = function () {
-  for (var a = "", b = this; !b.zero();) {
-    b = b.div(10);
-    var c = b[0];
-    a = b[1].lo + a;
-    b = c;
-  }
+/***/ }),
 
-  "" == a && (a = "0");
-  return a;
-};
+/***/ "./node_modules/lru-cache/index.js":
+/*!*****************************************!*\
+  !*** ./node_modules/lru-cache/index.js ***!
+  \*****************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-jspb.arith.UInt64.fromString = function (a) {
-  for (var b = new jspb.arith.UInt64(0, 0), c = new jspb.arith.UInt64(0, 0), d = 0; d < a.length; d++) {
-    if ("0" > a[d] || "9" < a[d]) return null;
-    var e = parseInt(a[d], 10);
-    c.lo = e;
-    b = b.mul(10).add(c);
-  }
+"use strict";
+ // A linked list to keep track of recently-used-ness
 
-  return b;
-};
+const Yallist = __webpack_require__(/*! yallist */ "./node_modules/lru-cache/node_modules/yallist/yallist.js");
 
-jspb.arith.UInt64.prototype.clone = function () {
-  return new jspb.arith.UInt64(this.lo, this.hi);
-};
+const MAX = Symbol('max');
+const LENGTH = Symbol('length');
+const LENGTH_CALCULATOR = Symbol('lengthCalculator');
+const ALLOW_STALE = Symbol('allowStale');
+const MAX_AGE = Symbol('maxAge');
+const DISPOSE = Symbol('dispose');
+const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet');
+const LRU_LIST = Symbol('lruList');
+const CACHE = Symbol('cache');
+const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet');
 
-jspb.arith.Int64 = function (a, b) {
-  this.lo = a;
-  this.hi = b;
-};
+const naiveLength = () => 1; // lruList is a yallist where the head is the youngest
+// item, and the tail is the oldest.  the list contains the Hit
+// objects as the entries.
+// Each Hit object has a reference to its Yallist.Node.  This
+// never changes.
+//
+// cache is a Map (or PseudoMap) that matches the keys to
+// the Yallist.Node object.
 
-jspb.arith.Int64.prototype.add = function (a) {
-  return new jspb.arith.Int64((this.lo + a.lo & 4294967295) >>> 0 >>> 0, ((this.hi + a.hi & 4294967295) >>> 0) + (4294967296 <= this.lo + a.lo ? 1 : 0) >>> 0);
-};
 
-jspb.arith.Int64.prototype.sub = function (a) {
-  return new jspb.arith.Int64((this.lo - a.lo & 4294967295) >>> 0 >>> 0, ((this.hi - a.hi & 4294967295) >>> 0) - (0 > this.lo - a.lo ? 1 : 0) >>> 0);
-};
+class LRUCache {
+  constructor(options) {
+    if (typeof options === 'number') options = {
+      max: options
+    };
+    if (!options) options = {};
+    if (options.max && (typeof options.max !== 'number' || options.max < 0)) throw new TypeError('max must be a non-negative number'); // Kind of weird to have a default max of Infinity, but oh well.
 
-jspb.arith.Int64.prototype.clone = function () {
-  return new jspb.arith.Int64(this.lo, this.hi);
-};
+    const max = this[MAX] = options.max || Infinity;
+    const lc = options.length || naiveLength;
+    this[LENGTH_CALCULATOR] = typeof lc !== 'function' ? naiveLength : lc;
+    this[ALLOW_STALE] = options.stale || false;
+    if (options.maxAge && typeof options.maxAge !== 'number') throw new TypeError('maxAge must be a number');
+    this[MAX_AGE] = options.maxAge || 0;
+    this[DISPOSE] = options.dispose;
+    this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false;
+    this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false;
+    this.reset();
+  } // resize the cache when the max changes.
 
-jspb.arith.Int64.prototype.toString = function () {
-  var a = 0 != (this.hi & 2147483648),
-      b = new jspb.arith.UInt64(this.lo, this.hi);
-  a && (b = new jspb.arith.UInt64(0, 0).sub(b));
-  return (a ? "-" : "") + b.toString();
-};
 
-jspb.arith.Int64.fromString = function (a) {
-  var b = 0 < a.length && "-" == a[0];
-  b && (a = a.substring(1));
-  a = jspb.arith.UInt64.fromString(a);
-  if (null === a) return null;
-  b && (a = new jspb.arith.UInt64(0, 0).sub(a));
-  return new jspb.arith.Int64(a.lo, a.hi);
-};
+  set max(mL) {
+    if (typeof mL !== 'number' || mL < 0) throw new TypeError('max must be a non-negative number');
+    this[MAX] = mL || Infinity;
+    trim(this);
+  }
 
-jspb.BinaryEncoder = function () {
-  this.buffer_ = [];
-};
+  get max() {
+    return this[MAX];
+  }
 
-jspb.BinaryEncoder.prototype.length = function () {
-  return this.buffer_.length;
-};
+  set allowStale(allowStale) {
+    this[ALLOW_STALE] = !!allowStale;
+  }
 
-jspb.BinaryEncoder.prototype.end = function () {
-  var a = this.buffer_;
-  this.buffer_ = [];
-  return a;
-};
+  get allowStale() {
+    return this[ALLOW_STALE];
+  }
 
-jspb.BinaryEncoder.prototype.writeSplitVarint64 = function (a, b) {
-  goog.asserts.assert(a == Math.floor(a));
-  goog.asserts.assert(b == Math.floor(b));
-  goog.asserts.assert(0 <= a && a < jspb.BinaryConstants.TWO_TO_32);
+  set maxAge(mA) {
+    if (typeof mA !== 'number') throw new TypeError('maxAge must be a non-negative number');
+    this[MAX_AGE] = mA;
+    trim(this);
+  }
 
-  for (goog.asserts.assert(0 <= b && b < jspb.BinaryConstants.TWO_TO_32); 0 < b || 127 < a;) this.buffer_.push(a & 127 | 128), a = (a >>> 7 | b << 25) >>> 0, b >>>= 7;
+  get maxAge() {
+    return this[MAX_AGE];
+  } // resize the cache when the lengthCalculator changes.
 
-  this.buffer_.push(a);
-};
 
-jspb.BinaryEncoder.prototype.writeSplitFixed64 = function (a, b) {
-  goog.asserts.assert(a == Math.floor(a));
-  goog.asserts.assert(b == Math.floor(b));
-  goog.asserts.assert(0 <= a && a < jspb.BinaryConstants.TWO_TO_32);
-  goog.asserts.assert(0 <= b && b < jspb.BinaryConstants.TWO_TO_32);
-  this.writeUint32(a);
-  this.writeUint32(b);
-};
+  set lengthCalculator(lC) {
+    if (typeof lC !== 'function') lC = naiveLength;
 
-jspb.BinaryEncoder.prototype.writeUnsignedVarint32 = function (a) {
-  goog.asserts.assert(a == Math.floor(a));
+    if (lC !== this[LENGTH_CALCULATOR]) {
+      this[LENGTH_CALCULATOR] = lC;
+      this[LENGTH] = 0;
+      this[LRU_LIST].forEach(hit => {
+        hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key);
+        this[LENGTH] += hit.length;
+      });
+    }
 
-  for (goog.asserts.assert(0 <= a && a < jspb.BinaryConstants.TWO_TO_32); 127 < a;) this.buffer_.push(a & 127 | 128), a >>>= 7;
+    trim(this);
+  }
 
-  this.buffer_.push(a);
-};
+  get lengthCalculator() {
+    return this[LENGTH_CALCULATOR];
+  }
 
-jspb.BinaryEncoder.prototype.writeSignedVarint32 = function (a) {
-  goog.asserts.assert(a == Math.floor(a));
-  goog.asserts.assert(a >= -jspb.BinaryConstants.TWO_TO_31 && a < jspb.BinaryConstants.TWO_TO_31);
-  if (0 <= a) this.writeUnsignedVarint32(a);else {
-    for (var b = 0; 9 > b; b++) this.buffer_.push(a & 127 | 128), a >>= 7;
+  get length() {
+    return this[LENGTH];
+  }
 
-    this.buffer_.push(1);
+  get itemCount() {
+    return this[LRU_LIST].length;
   }
-};
 
-jspb.BinaryEncoder.prototype.writeUnsignedVarint64 = function (a) {
-  goog.asserts.assert(a == Math.floor(a));
-  goog.asserts.assert(0 <= a && a < jspb.BinaryConstants.TWO_TO_64);
-  jspb.utils.splitInt64(a);
-  this.writeSplitVarint64(jspb.utils.split64Low, jspb.utils.split64High);
-};
+  rforEach(fn, thisp) {
+    thisp = thisp || this;
 
-jspb.BinaryEncoder.prototype.writeSignedVarint64 = function (a) {
-  goog.asserts.assert(a == Math.floor(a));
-  goog.asserts.assert(a >= -jspb.BinaryConstants.TWO_TO_63 && a < jspb.BinaryConstants.TWO_TO_63);
-  jspb.utils.splitInt64(a);
-  this.writeSplitVarint64(jspb.utils.split64Low, jspb.utils.split64High);
-};
+    for (let walker = this[LRU_LIST].tail; walker !== null;) {
+      const prev = walker.prev;
+      forEachStep(this, fn, walker, thisp);
+      walker = prev;
+    }
+  }
 
-jspb.BinaryEncoder.prototype.writeZigzagVarint32 = function (a) {
-  goog.asserts.assert(a == Math.floor(a));
-  goog.asserts.assert(a >= -jspb.BinaryConstants.TWO_TO_31 && a < jspb.BinaryConstants.TWO_TO_31);
-  this.writeUnsignedVarint32((a << 1 ^ a >> 31) >>> 0);
-};
+  forEach(fn, thisp) {
+    thisp = thisp || this;
 
-jspb.BinaryEncoder.prototype.writeZigzagVarint64 = function (a) {
-  goog.asserts.assert(a == Math.floor(a));
-  goog.asserts.assert(a >= -jspb.BinaryConstants.TWO_TO_63 && a < jspb.BinaryConstants.TWO_TO_63);
-  jspb.utils.splitZigzag64(a);
-  this.writeSplitVarint64(jspb.utils.split64Low, jspb.utils.split64High);
-};
+    for (let walker = this[LRU_LIST].head; walker !== null;) {
+      const next = walker.next;
+      forEachStep(this, fn, walker, thisp);
+      walker = next;
+    }
+  }
 
-jspb.BinaryEncoder.prototype.writeZigzagVarint64String = function (a) {
-  this.writeZigzagVarintHash64(jspb.utils.decimalStringToHash64(a));
-};
+  keys() {
+    return this[LRU_LIST].toArray().map(k => k.key);
+  }
 
-jspb.BinaryEncoder.prototype.writeZigzagVarintHash64 = function (a) {
-  var b = this;
-  jspb.utils.splitHash64(a);
-  jspb.utils.toZigzag64(jspb.utils.split64Low, jspb.utils.split64High, function (a, d) {
-    b.writeSplitVarint64(a >>> 0, d >>> 0);
-  });
-};
+  values() {
+    return this[LRU_LIST].toArray().map(k => k.value);
+  }
 
-jspb.BinaryEncoder.prototype.writeUint8 = function (a) {
-  goog.asserts.assert(a == Math.floor(a));
-  goog.asserts.assert(0 <= a && 256 > a);
-  this.buffer_.push(a >>> 0 & 255);
-};
+  reset() {
+    if (this[DISPOSE] && this[LRU_LIST] && this[LRU_LIST].length) {
+      this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value));
+    }
 
-jspb.BinaryEncoder.prototype.writeUint16 = function (a) {
-  goog.asserts.assert(a == Math.floor(a));
-  goog.asserts.assert(0 <= a && 65536 > a);
-  this.buffer_.push(a >>> 0 & 255);
-  this.buffer_.push(a >>> 8 & 255);
-};
+    this[CACHE] = new Map(); // hash of items by key
 
-jspb.BinaryEncoder.prototype.writeUint32 = function (a) {
-  goog.asserts.assert(a == Math.floor(a));
-  goog.asserts.assert(0 <= a && a < jspb.BinaryConstants.TWO_TO_32);
-  this.buffer_.push(a >>> 0 & 255);
-  this.buffer_.push(a >>> 8 & 255);
-  this.buffer_.push(a >>> 16 & 255);
-  this.buffer_.push(a >>> 24 & 255);
-};
-
-jspb.BinaryEncoder.prototype.writeUint64 = function (a) {
-  goog.asserts.assert(a == Math.floor(a));
-  goog.asserts.assert(0 <= a && a < jspb.BinaryConstants.TWO_TO_64);
-  jspb.utils.splitUint64(a);
-  this.writeUint32(jspb.utils.split64Low);
-  this.writeUint32(jspb.utils.split64High);
-};
+    this[LRU_LIST] = new Yallist(); // list of items in order of use recency
 
-jspb.BinaryEncoder.prototype.writeInt8 = function (a) {
-  goog.asserts.assert(a == Math.floor(a));
-  goog.asserts.assert(-128 <= a && 128 > a);
-  this.buffer_.push(a >>> 0 & 255);
-};
+    this[LENGTH] = 0; // length of items in the list
+  }
 
-jspb.BinaryEncoder.prototype.writeInt16 = function (a) {
-  goog.asserts.assert(a == Math.floor(a));
-  goog.asserts.assert(-32768 <= a && 32768 > a);
-  this.buffer_.push(a >>> 0 & 255);
-  this.buffer_.push(a >>> 8 & 255);
-};
+  dump() {
+    return this[LRU_LIST].map(hit => isStale(this, hit) ? false : {
+      k: hit.key,
+      v: hit.value,
+      e: hit.now + (hit.maxAge || 0)
+    }).toArray().filter(h => h);
+  }
 
-jspb.BinaryEncoder.prototype.writeInt32 = function (a) {
-  goog.asserts.assert(a == Math.floor(a));
-  goog.asserts.assert(a >= -jspb.BinaryConstants.TWO_TO_31 && a < jspb.BinaryConstants.TWO_TO_31);
-  this.buffer_.push(a >>> 0 & 255);
-  this.buffer_.push(a >>> 8 & 255);
-  this.buffer_.push(a >>> 16 & 255);
-  this.buffer_.push(a >>> 24 & 255);
-};
+  dumpLru() {
+    return this[LRU_LIST];
+  }
 
-jspb.BinaryEncoder.prototype.writeInt64 = function (a) {
-  goog.asserts.assert(a == Math.floor(a));
-  goog.asserts.assert(a >= -jspb.BinaryConstants.TWO_TO_63 && a < jspb.BinaryConstants.TWO_TO_63);
-  jspb.utils.splitInt64(a);
-  this.writeSplitFixed64(jspb.utils.split64Low, jspb.utils.split64High);
-};
+  set(key, value, maxAge) {
+    maxAge = maxAge || this[MAX_AGE];
+    if (maxAge && typeof maxAge !== 'number') throw new TypeError('maxAge must be a number');
+    const now = maxAge ? Date.now() : 0;
+    const len = this[LENGTH_CALCULATOR](value, key);
 
-jspb.BinaryEncoder.prototype.writeInt64String = function (a) {
-  goog.asserts.assert(a == Math.floor(a));
-  goog.asserts.assert(+a >= -jspb.BinaryConstants.TWO_TO_63 && +a < jspb.BinaryConstants.TWO_TO_63);
-  jspb.utils.splitHash64(jspb.utils.decimalStringToHash64(a));
-  this.writeSplitFixed64(jspb.utils.split64Low, jspb.utils.split64High);
-};
+    if (this[CACHE].has(key)) {
+      if (len > this[MAX]) {
+        del(this, this[CACHE].get(key));
+        return false;
+      }
 
-jspb.BinaryEncoder.prototype.writeFloat = function (a) {
-  goog.asserts.assert(Infinity === a || -Infinity === a || isNaN(a) || a >= -jspb.BinaryConstants.FLOAT32_MAX && a <= jspb.BinaryConstants.FLOAT32_MAX);
-  jspb.utils.splitFloat32(a);
-  this.writeUint32(jspb.utils.split64Low);
-};
+      const node = this[CACHE].get(key);
+      const item = node.value; // dispose of the old one before overwriting
+      // split out into 2 ifs for better coverage tracking
 
-jspb.BinaryEncoder.prototype.writeDouble = function (a) {
-  goog.asserts.assert(Infinity === a || -Infinity === a || isNaN(a) || a >= -jspb.BinaryConstants.FLOAT64_MAX && a <= jspb.BinaryConstants.FLOAT64_MAX);
-  jspb.utils.splitFloat64(a);
-  this.writeUint32(jspb.utils.split64Low);
-  this.writeUint32(jspb.utils.split64High);
-};
+      if (this[DISPOSE]) {
+        if (!this[NO_DISPOSE_ON_SET]) this[DISPOSE](key, item.value);
+      }
 
-jspb.BinaryEncoder.prototype.writeBool = function (a) {
-  goog.asserts.assert("boolean" === typeof a || "number" === typeof a);
-  this.buffer_.push(a ? 1 : 0);
-};
+      item.now = now;
+      item.maxAge = maxAge;
+      item.value = value;
+      this[LENGTH] += len - item.length;
+      item.length = len;
+      this.get(key);
+      trim(this);
+      return true;
+    }
 
-jspb.BinaryEncoder.prototype.writeEnum = function (a) {
-  goog.asserts.assert(a == Math.floor(a));
-  goog.asserts.assert(a >= -jspb.BinaryConstants.TWO_TO_31 && a < jspb.BinaryConstants.TWO_TO_31);
-  this.writeSignedVarint32(a);
-};
+    const hit = new Entry(key, value, len, now, maxAge); // oversized objects fall out of cache automatically.
 
-jspb.BinaryEncoder.prototype.writeBytes = function (a) {
-  this.buffer_.push.apply(this.buffer_, a);
-};
+    if (hit.length > this[MAX]) {
+      if (this[DISPOSE]) this[DISPOSE](key, value);
+      return false;
+    }
 
-jspb.BinaryEncoder.prototype.writeVarintHash64 = function (a) {
-  jspb.utils.splitHash64(a);
-  this.writeSplitVarint64(jspb.utils.split64Low, jspb.utils.split64High);
-};
+    this[LENGTH] += hit.length;
+    this[LRU_LIST].unshift(hit);
+    this[CACHE].set(key, this[LRU_LIST].head);
+    trim(this);
+    return true;
+  }
 
-jspb.BinaryEncoder.prototype.writeFixedHash64 = function (a) {
-  jspb.utils.splitHash64(a);
-  this.writeUint32(jspb.utils.split64Low);
-  this.writeUint32(jspb.utils.split64High);
-};
+  has(key) {
+    if (!this[CACHE].has(key)) return false;
+    const hit = this[CACHE].get(key).value;
+    return !isStale(this, hit);
+  }
 
-jspb.BinaryEncoder.prototype.writeString = function (a) {
-  for (var b = this.buffer_.length, c = 0; c < a.length; c++) {
-    var d = a.charCodeAt(c);
-    if (128 > d) this.buffer_.push(d);else if (2048 > d) this.buffer_.push(d >> 6 | 192), this.buffer_.push(d & 63 | 128);else if (65536 > d) if (55296 <= d && 56319 >= d && c + 1 < a.length) {
-      var e = a.charCodeAt(c + 1);
-      56320 <= e && 57343 >= e && (d = 1024 * (d - 55296) + e - 56320 + 65536, this.buffer_.push(d >> 18 | 240), this.buffer_.push(d >> 12 & 63 | 128), this.buffer_.push(d >> 6 & 63 | 128), this.buffer_.push(d & 63 | 128), c++);
-    } else this.buffer_.push(d >> 12 | 224), this.buffer_.push(d >> 6 & 63 | 128), this.buffer_.push(d & 63 | 128);
+  get(key) {
+    return get(this, key, true);
   }
 
-  return this.buffer_.length - b;
-};
+  peek(key) {
+    return get(this, key, false);
+  }
 
-jspb.BinaryWriter = function () {
-  this.blocks_ = [];
-  this.totalLength_ = 0;
-  this.encoder_ = new jspb.BinaryEncoder();
-  this.bookmarks_ = [];
-};
+  pop() {
+    const node = this[LRU_LIST].tail;
+    if (!node) return null;
+    del(this, node);
+    return node.value;
+  }
 
-jspb.BinaryWriter.prototype.appendUint8Array_ = function (a) {
-  var b = this.encoder_.end();
-  this.blocks_.push(b);
-  this.blocks_.push(a);
-  this.totalLength_ += b.length + a.length;
-};
+  del(key) {
+    del(this, this[CACHE].get(key));
+  }
 
-jspb.BinaryWriter.prototype.beginDelimited_ = function (a) {
-  this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED);
-  a = this.encoder_.end();
-  this.blocks_.push(a);
-  this.totalLength_ += a.length;
-  a.push(this.totalLength_);
-  return a;
-};
+  load(arr) {
+    // reset the cache
+    this.reset();
+    const now = Date.now(); // A previous serialized cache has the most recent items first
 
-jspb.BinaryWriter.prototype.endDelimited_ = function (a) {
-  var b = a.pop();
-  b = this.totalLength_ + this.encoder_.length() - b;
+    for (let l = arr.length - 1; l >= 0; l--) {
+      const hit = arr[l];
+      const expiresAt = hit.e || 0;
+      if (expiresAt === 0) // the item was created without expiration in a non aged cache
+        this.set(hit.k, hit.v);else {
+        const maxAge = expiresAt - now; // dont add already expired items
 
-  for (goog.asserts.assert(0 <= b); 127 < b;) a.push(b & 127 | 128), b >>>= 7, this.totalLength_++;
+        if (maxAge > 0) {
+          this.set(hit.k, hit.v, maxAge);
+        }
+      }
+    }
+  }
 
-  a.push(b);
-  this.totalLength_++;
-};
+  prune() {
+    this[CACHE].forEach((value, key) => get(this, key, false));
+  }
 
-jspb.BinaryWriter.prototype.writeSerializedMessage = function (a, b, c) {
-  this.appendUint8Array_(a.subarray(b, c));
-};
+}
 
-jspb.BinaryWriter.prototype.maybeWriteSerializedMessage = function (a, b, c) {
-  null != a && null != b && null != c && this.writeSerializedMessage(a, b, c);
-};
+const get = (self, key, doUse) => {
+  const node = self[CACHE].get(key);
 
-jspb.BinaryWriter.prototype.reset = function () {
-  this.blocks_ = [];
-  this.encoder_.end();
-  this.totalLength_ = 0;
-  this.bookmarks_ = [];
-};
+  if (node) {
+    const hit = node.value;
 
-jspb.BinaryWriter.prototype.getResultBuffer = function () {
-  goog.asserts.assert(0 == this.bookmarks_.length);
+    if (isStale(self, hit)) {
+      del(self, node);
+      if (!self[ALLOW_STALE]) return undefined;
+    } else {
+      if (doUse) {
+        if (self[UPDATE_AGE_ON_GET]) node.value.now = Date.now();
+        self[LRU_LIST].unshiftNode(node);
+      }
+    }
 
-  for (var a = new Uint8Array(this.totalLength_ + this.encoder_.length()), b = this.blocks_, c = b.length, d = 0, e = 0; e < c; e++) {
-    var f = b[e];
-    a.set(f, d);
-    d += f.length;
+    return hit.value;
   }
-
-  b = this.encoder_.end();
-  a.set(b, d);
-  d += b.length;
-  goog.asserts.assert(d == a.length);
-  this.blocks_ = [a];
-  return a;
 };
 
-jspb.BinaryWriter.prototype.getResultBase64String = function (a) {
-  return goog.crypt.base64.encodeByteArray(this.getResultBuffer(), a);
+const isStale = (self, hit) => {
+  if (!hit || !hit.maxAge && !self[MAX_AGE]) return false;
+  const diff = Date.now() - hit.now;
+  return hit.maxAge ? diff > hit.maxAge : self[MAX_AGE] && diff > self[MAX_AGE];
 };
 
-jspb.BinaryWriter.prototype.beginSubMessage = function (a) {
-  this.bookmarks_.push(this.beginDelimited_(a));
+const trim = self => {
+  if (self[LENGTH] > self[MAX]) {
+    for (let walker = self[LRU_LIST].tail; self[LENGTH] > self[MAX] && walker !== null;) {
+      // We know that we're about to delete this one, and also
+      // what the next least recently used key will be, so just
+      // go ahead and set it now.
+      const prev = walker.prev;
+      del(self, walker);
+      walker = prev;
+    }
+  }
 };
 
-jspb.BinaryWriter.prototype.endSubMessage = function () {
-  goog.asserts.assert(0 <= this.bookmarks_.length);
-  this.endDelimited_(this.bookmarks_.pop());
+const del = (self, node) => {
+  if (node) {
+    const hit = node.value;
+    if (self[DISPOSE]) self[DISPOSE](hit.key, hit.value);
+    self[LENGTH] -= hit.length;
+    self[CACHE].delete(hit.key);
+    self[LRU_LIST].removeNode(node);
+  }
 };
 
-jspb.BinaryWriter.prototype.writeFieldHeader_ = function (a, b) {
-  goog.asserts.assert(1 <= a && a == Math.floor(a));
-  this.encoder_.writeUnsignedVarint32(8 * a + b);
+class Entry {
+  constructor(key, value, length, now, maxAge) {
+    this.key = key;
+    this.value = value;
+    this.length = length;
+    this.now = now;
+    this.maxAge = maxAge || 0;
+  }
+
+}
+
+const forEachStep = (self, fn, node, thisp) => {
+  let hit = node.value;
+
+  if (isStale(self, hit)) {
+    del(self, node);
+    if (!self[ALLOW_STALE]) hit = undefined;
+  }
+
+  if (hit) fn.call(thisp, hit.value, hit.key, self);
 };
 
-jspb.BinaryWriter.prototype.writeAny = function (a, b, c) {
-  var d = jspb.BinaryConstants.FieldType;
+module.exports = LRUCache;
 
-  switch (a) {
-    case d.DOUBLE:
-      this.writeDouble(b, c);
-      break;
+/***/ }),
 
-    case d.FLOAT:
-      this.writeFloat(b, c);
-      break;
+/***/ "./node_modules/lru-cache/node_modules/yallist/iterator.js":
+/*!*****************************************************************!*\
+  !*** ./node_modules/lru-cache/node_modules/yallist/iterator.js ***!
+  \*****************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-    case d.INT64:
-      this.writeInt64(b, c);
-      break;
+"use strict";
 
-    case d.UINT64:
-      this.writeUint64(b, c);
-      break;
 
-    case d.INT32:
-      this.writeInt32(b, c);
-      break;
+module.exports = function (Yallist) {
+  Yallist.prototype[Symbol.iterator] = function* () {
+    for (let walker = this.head; walker; walker = walker.next) {
+      yield walker.value;
+    }
+  };
+};
 
-    case d.FIXED64:
-      this.writeFixed64(b, c);
-      break;
+/***/ }),
 
-    case d.FIXED32:
-      this.writeFixed32(b, c);
-      break;
+/***/ "./node_modules/lru-cache/node_modules/yallist/yallist.js":
+/*!****************************************************************!*\
+  !*** ./node_modules/lru-cache/node_modules/yallist/yallist.js ***!
+  \****************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-    case d.BOOL:
-      this.writeBool(b, c);
-      break;
+"use strict";
 
-    case d.STRING:
-      this.writeString(b, c);
-      break;
 
-    case d.GROUP:
-      goog.asserts.fail("Group field type not supported in writeAny()");
-      break;
+module.exports = Yallist;
+Yallist.Node = Node;
+Yallist.create = Yallist;
 
-    case d.MESSAGE:
-      goog.asserts.fail("Message field type not supported in writeAny()");
-      break;
+function Yallist(list) {
+  var self = this;
 
-    case d.BYTES:
-      this.writeBytes(b, c);
-      break;
+  if (!(self instanceof Yallist)) {
+    self = new Yallist();
+  }
 
-    case d.UINT32:
-      this.writeUint32(b, c);
-      break;
+  self.tail = null;
+  self.head = null;
+  self.length = 0;
 
-    case d.ENUM:
-      this.writeEnum(b, c);
-      break;
+  if (list && typeof list.forEach === 'function') {
+    list.forEach(function (item) {
+      self.push(item);
+    });
+  } else if (arguments.length > 0) {
+    for (var i = 0, l = arguments.length; i < l; i++) {
+      self.push(arguments[i]);
+    }
+  }
 
-    case d.SFIXED32:
-      this.writeSfixed32(b, c);
-      break;
+  return self;
+}
 
-    case d.SFIXED64:
-      this.writeSfixed64(b, c);
-      break;
+Yallist.prototype.removeNode = function (node) {
+  if (node.list !== this) {
+    throw new Error('removing node which does not belong to this list');
+  }
 
-    case d.SINT32:
-      this.writeSint32(b, c);
-      break;
+  var next = node.next;
+  var prev = node.prev;
 
-    case d.SINT64:
-      this.writeSint64(b, c);
-      break;
+  if (next) {
+    next.prev = prev;
+  }
 
-    case d.FHASH64:
-      this.writeFixedHash64(b, c);
-      break;
+  if (prev) {
+    prev.next = next;
+  }
 
-    case d.VHASH64:
-      this.writeVarintHash64(b, c);
-      break;
+  if (node === this.head) {
+    this.head = next;
+  }
 
-    default:
-      goog.asserts.fail("Invalid field type in writeAny()");
+  if (node === this.tail) {
+    this.tail = prev;
   }
-};
 
-jspb.BinaryWriter.prototype.writeUnsignedVarint32_ = function (a, b) {
-  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeUnsignedVarint32(b));
+  node.list.length--;
+  node.next = null;
+  node.prev = null;
+  node.list = null;
+  return next;
 };
 
-jspb.BinaryWriter.prototype.writeSignedVarint32_ = function (a, b) {
-  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeSignedVarint32(b));
-};
+Yallist.prototype.unshiftNode = function (node) {
+  if (node === this.head) {
+    return;
+  }
 
-jspb.BinaryWriter.prototype.writeUnsignedVarint64_ = function (a, b) {
-  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeUnsignedVarint64(b));
-};
+  if (node.list) {
+    node.list.removeNode(node);
+  }
 
-jspb.BinaryWriter.prototype.writeSignedVarint64_ = function (a, b) {
-  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeSignedVarint64(b));
-};
+  var head = this.head;
+  node.list = this;
+  node.next = head;
 
-jspb.BinaryWriter.prototype.writeZigzagVarint32_ = function (a, b) {
-  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeZigzagVarint32(b));
-};
+  if (head) {
+    head.prev = node;
+  }
 
-jspb.BinaryWriter.prototype.writeZigzagVarint64_ = function (a, b) {
-  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeZigzagVarint64(b));
-};
+  this.head = node;
 
-jspb.BinaryWriter.prototype.writeZigzagVarint64String_ = function (a, b) {
-  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeZigzagVarint64String(b));
-};
+  if (!this.tail) {
+    this.tail = node;
+  }
 
-jspb.BinaryWriter.prototype.writeZigzagVarintHash64_ = function (a, b) {
-  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeZigzagVarintHash64(b));
+  this.length++;
 };
 
-jspb.BinaryWriter.prototype.writeInt32 = function (a, b) {
-  null != b && (goog.asserts.assert(b >= -jspb.BinaryConstants.TWO_TO_31 && b < jspb.BinaryConstants.TWO_TO_31), this.writeSignedVarint32_(a, b));
-};
+Yallist.prototype.pushNode = function (node) {
+  if (node === this.tail) {
+    return;
+  }
 
-jspb.BinaryWriter.prototype.writeInt32String = function (a, b) {
-  null != b && (b = parseInt(b, 10), goog.asserts.assert(b >= -jspb.BinaryConstants.TWO_TO_31 && b < jspb.BinaryConstants.TWO_TO_31), this.writeSignedVarint32_(a, b));
-};
+  if (node.list) {
+    node.list.removeNode(node);
+  }
 
-jspb.BinaryWriter.prototype.writeInt64 = function (a, b) {
-  null != b && (goog.asserts.assert(b >= -jspb.BinaryConstants.TWO_TO_63 && b < jspb.BinaryConstants.TWO_TO_63), this.writeSignedVarint64_(a, b));
-};
+  var tail = this.tail;
+  node.list = this;
+  node.prev = tail;
 
-jspb.BinaryWriter.prototype.writeInt64String = function (a, b) {
-  null != b && (b = jspb.arith.Int64.fromString(b), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeSplitVarint64(b.lo, b.hi));
-};
+  if (tail) {
+    tail.next = node;
+  }
 
-jspb.BinaryWriter.prototype.writeUint32 = function (a, b) {
-  null != b && (goog.asserts.assert(0 <= b && b < jspb.BinaryConstants.TWO_TO_32), this.writeUnsignedVarint32_(a, b));
-};
+  this.tail = node;
 
-jspb.BinaryWriter.prototype.writeUint32String = function (a, b) {
-  null != b && (b = parseInt(b, 10), goog.asserts.assert(0 <= b && b < jspb.BinaryConstants.TWO_TO_32), this.writeUnsignedVarint32_(a, b));
-};
+  if (!this.head) {
+    this.head = node;
+  }
 
-jspb.BinaryWriter.prototype.writeUint64 = function (a, b) {
-  null != b && (goog.asserts.assert(0 <= b && b < jspb.BinaryConstants.TWO_TO_64), this.writeUnsignedVarint64_(a, b));
+  this.length++;
 };
 
-jspb.BinaryWriter.prototype.writeUint64String = function (a, b) {
-  null != b && (b = jspb.arith.UInt64.fromString(b), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeSplitVarint64(b.lo, b.hi));
-};
+Yallist.prototype.push = function () {
+  for (var i = 0, l = arguments.length; i < l; i++) {
+    push(this, arguments[i]);
+  }
 
-jspb.BinaryWriter.prototype.writeSint32 = function (a, b) {
-  null != b && (goog.asserts.assert(b >= -jspb.BinaryConstants.TWO_TO_31 && b < jspb.BinaryConstants.TWO_TO_31), this.writeZigzagVarint32_(a, b));
+  return this.length;
 };
 
-jspb.BinaryWriter.prototype.writeSint64 = function (a, b) {
-  null != b && (goog.asserts.assert(b >= -jspb.BinaryConstants.TWO_TO_63 && b < jspb.BinaryConstants.TWO_TO_63), this.writeZigzagVarint64_(a, b));
-};
+Yallist.prototype.unshift = function () {
+  for (var i = 0, l = arguments.length; i < l; i++) {
+    unshift(this, arguments[i]);
+  }
 
-jspb.BinaryWriter.prototype.writeSintHash64 = function (a, b) {
-  null != b && this.writeZigzagVarintHash64_(a, b);
+  return this.length;
 };
 
-jspb.BinaryWriter.prototype.writeSint64String = function (a, b) {
-  null != b && this.writeZigzagVarint64String_(a, b);
-};
+Yallist.prototype.pop = function () {
+  if (!this.tail) {
+    return undefined;
+  }
 
-jspb.BinaryWriter.prototype.writeFixed32 = function (a, b) {
-  null != b && (goog.asserts.assert(0 <= b && b < jspb.BinaryConstants.TWO_TO_32), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.FIXED32), this.encoder_.writeUint32(b));
-};
+  var res = this.tail.value;
+  this.tail = this.tail.prev;
 
-jspb.BinaryWriter.prototype.writeFixed64 = function (a, b) {
-  null != b && (goog.asserts.assert(0 <= b && b < jspb.BinaryConstants.TWO_TO_64), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.FIXED64), this.encoder_.writeUint64(b));
-};
+  if (this.tail) {
+    this.tail.next = null;
+  } else {
+    this.head = null;
+  }
 
-jspb.BinaryWriter.prototype.writeFixed64String = function (a, b) {
-  null != b && (b = jspb.arith.UInt64.fromString(b), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.FIXED64), this.encoder_.writeSplitFixed64(b.lo, b.hi));
+  this.length--;
+  return res;
 };
 
-jspb.BinaryWriter.prototype.writeSfixed32 = function (a, b) {
-  null != b && (goog.asserts.assert(b >= -jspb.BinaryConstants.TWO_TO_31 && b < jspb.BinaryConstants.TWO_TO_31), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.FIXED32), this.encoder_.writeInt32(b));
-};
+Yallist.prototype.shift = function () {
+  if (!this.head) {
+    return undefined;
+  }
 
-jspb.BinaryWriter.prototype.writeSfixed64 = function (a, b) {
-  null != b && (goog.asserts.assert(b >= -jspb.BinaryConstants.TWO_TO_63 && b < jspb.BinaryConstants.TWO_TO_63), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.FIXED64), this.encoder_.writeInt64(b));
-};
+  var res = this.head.value;
+  this.head = this.head.next;
 
-jspb.BinaryWriter.prototype.writeSfixed64String = function (a, b) {
-  null != b && (b = jspb.arith.Int64.fromString(b), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.FIXED64), this.encoder_.writeSplitFixed64(b.lo, b.hi));
-};
+  if (this.head) {
+    this.head.prev = null;
+  } else {
+    this.tail = null;
+  }
 
-jspb.BinaryWriter.prototype.writeFloat = function (a, b) {
-  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.FIXED32), this.encoder_.writeFloat(b));
+  this.length--;
+  return res;
 };
 
-jspb.BinaryWriter.prototype.writeDouble = function (a, b) {
-  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.FIXED64), this.encoder_.writeDouble(b));
-};
+Yallist.prototype.forEach = function (fn, thisp) {
+  thisp = thisp || this;
 
-jspb.BinaryWriter.prototype.writeBool = function (a, b) {
-  null != b && (goog.asserts.assert("boolean" === typeof b || "number" === typeof b), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeBool(b));
+  for (var walker = this.head, i = 0; walker !== null; i++) {
+    fn.call(thisp, walker.value, i, this);
+    walker = walker.next;
+  }
 };
 
-jspb.BinaryWriter.prototype.writeEnum = function (a, b) {
-  null != b && (goog.asserts.assert(b >= -jspb.BinaryConstants.TWO_TO_31 && b < jspb.BinaryConstants.TWO_TO_31), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeSignedVarint32(b));
-};
+Yallist.prototype.forEachReverse = function (fn, thisp) {
+  thisp = thisp || this;
 
-jspb.BinaryWriter.prototype.writeString = function (a, b) {
-  null != b && (a = this.beginDelimited_(a), this.encoder_.writeString(b), this.endDelimited_(a));
+  for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {
+    fn.call(thisp, walker.value, i, this);
+    walker = walker.prev;
+  }
 };
 
-jspb.BinaryWriter.prototype.writeBytes = function (a, b) {
-  null != b && (b = jspb.utils.byteSourceToUint8Array(b), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(b.length), this.appendUint8Array_(b));
-};
+Yallist.prototype.get = function (n) {
+  for (var i = 0, walker = this.head; walker !== null && i < n; i++) {
+    // abort out of the list early if we hit a cycle
+    walker = walker.next;
+  }
 
-jspb.BinaryWriter.prototype.writeMessage = function (a, b, c) {
-  null != b && (a = this.beginDelimited_(a), c(b, this), this.endDelimited_(a));
+  if (i === n && walker !== null) {
+    return walker.value;
+  }
 };
 
-jspb.BinaryWriter.prototype.writeMessageSet = function (a, b, c) {
-  null != b && (this.writeFieldHeader_(1, jspb.BinaryConstants.WireType.START_GROUP), this.writeFieldHeader_(2, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeSignedVarint32(a), a = this.beginDelimited_(3), c(b, this), this.endDelimited_(a), this.writeFieldHeader_(1, jspb.BinaryConstants.WireType.END_GROUP));
-};
+Yallist.prototype.getReverse = function (n) {
+  for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {
+    // abort out of the list early if we hit a cycle
+    walker = walker.prev;
+  }
 
-jspb.BinaryWriter.prototype.writeGroup = function (a, b, c) {
-  null != b && (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.START_GROUP), c(b, this), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.END_GROUP));
+  if (i === n && walker !== null) {
+    return walker.value;
+  }
 };
 
-jspb.BinaryWriter.prototype.writeFixedHash64 = function (a, b) {
-  null != b && (goog.asserts.assert(8 == b.length), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.FIXED64), this.encoder_.writeFixedHash64(b));
-};
+Yallist.prototype.map = function (fn, thisp) {
+  thisp = thisp || this;
+  var res = new Yallist();
 
-jspb.BinaryWriter.prototype.writeVarintHash64 = function (a, b) {
-  null != b && (goog.asserts.assert(8 == b.length), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT), this.encoder_.writeVarintHash64(b));
-};
+  for (var walker = this.head; walker !== null;) {
+    res.push(fn.call(thisp, walker.value, this));
+    walker = walker.next;
+  }
 
-jspb.BinaryWriter.prototype.writeSplitFixed64 = function (a, b, c) {
-  this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.FIXED64);
-  this.encoder_.writeSplitFixed64(b, c);
+  return res;
 };
 
-jspb.BinaryWriter.prototype.writeSplitVarint64 = function (a, b, c) {
-  this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT);
-  this.encoder_.writeSplitVarint64(b, c);
-};
+Yallist.prototype.mapReverse = function (fn, thisp) {
+  thisp = thisp || this;
+  var res = new Yallist();
 
-jspb.BinaryWriter.prototype.writeSplitZigzagVarint64 = function (a, b, c) {
-  this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.VARINT);
-  var d = this.encoder_;
-  jspb.utils.toZigzag64(b, c, function (a, b) {
-    d.writeSplitVarint64(a >>> 0, b >>> 0);
-  });
-};
+  for (var walker = this.tail; walker !== null;) {
+    res.push(fn.call(thisp, walker.value, this));
+    walker = walker.prev;
+  }
 
-jspb.BinaryWriter.prototype.writeRepeatedInt32 = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeSignedVarint32_(a, b[c]);
+  return res;
 };
 
-jspb.BinaryWriter.prototype.writeRepeatedInt32String = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeInt32String(a, b[c]);
-};
+Yallist.prototype.reduce = function (fn, initial) {
+  var acc;
+  var walker = this.head;
 
-jspb.BinaryWriter.prototype.writeRepeatedInt64 = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeSignedVarint64_(a, b[c]);
-};
+  if (arguments.length > 1) {
+    acc = initial;
+  } else if (this.head) {
+    walker = this.head.next;
+    acc = this.head.value;
+  } else {
+    throw new TypeError('Reduce of empty list with no initial value');
+  }
 
-jspb.BinaryWriter.prototype.writeRepeatedSplitFixed64 = function (a, b, c, d) {
-  if (null != b) for (var e = 0; e < b.length; e++) this.writeSplitFixed64(a, c(b[e]), d(b[e]));
-};
+  for (var i = 0; walker !== null; i++) {
+    acc = fn(acc, walker.value, i);
+    walker = walker.next;
+  }
 
-jspb.BinaryWriter.prototype.writeRepeatedSplitVarint64 = function (a, b, c, d) {
-  if (null != b) for (var e = 0; e < b.length; e++) this.writeSplitVarint64(a, c(b[e]), d(b[e]));
+  return acc;
 };
 
-jspb.BinaryWriter.prototype.writeRepeatedSplitZigzagVarint64 = function (a, b, c, d) {
-  if (null != b) for (var e = 0; e < b.length; e++) this.writeSplitZigzagVarint64(a, c(b[e]), d(b[e]));
-};
+Yallist.prototype.reduceReverse = function (fn, initial) {
+  var acc;
+  var walker = this.tail;
 
-jspb.BinaryWriter.prototype.writeRepeatedInt64String = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeInt64String(a, b[c]);
-};
+  if (arguments.length > 1) {
+    acc = initial;
+  } else if (this.tail) {
+    walker = this.tail.prev;
+    acc = this.tail.value;
+  } else {
+    throw new TypeError('Reduce of empty list with no initial value');
+  }
 
-jspb.BinaryWriter.prototype.writeRepeatedUint32 = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeUnsignedVarint32_(a, b[c]);
-};
+  for (var i = this.length - 1; walker !== null; i--) {
+    acc = fn(acc, walker.value, i);
+    walker = walker.prev;
+  }
 
-jspb.BinaryWriter.prototype.writeRepeatedUint32String = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeUint32String(a, b[c]);
+  return acc;
 };
 
-jspb.BinaryWriter.prototype.writeRepeatedUint64 = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeUnsignedVarint64_(a, b[c]);
-};
+Yallist.prototype.toArray = function () {
+  var arr = new Array(this.length);
 
-jspb.BinaryWriter.prototype.writeRepeatedUint64String = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeUint64String(a, b[c]);
-};
+  for (var i = 0, walker = this.head; walker !== null; i++) {
+    arr[i] = walker.value;
+    walker = walker.next;
+  }
 
-jspb.BinaryWriter.prototype.writeRepeatedSint32 = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeZigzagVarint32_(a, b[c]);
+  return arr;
 };
 
-jspb.BinaryWriter.prototype.writeRepeatedSint64 = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeZigzagVarint64_(a, b[c]);
-};
+Yallist.prototype.toArrayReverse = function () {
+  var arr = new Array(this.length);
 
-jspb.BinaryWriter.prototype.writeRepeatedSint64String = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeZigzagVarint64String_(a, b[c]);
-};
+  for (var i = 0, walker = this.tail; walker !== null; i++) {
+    arr[i] = walker.value;
+    walker = walker.prev;
+  }
 
-jspb.BinaryWriter.prototype.writeRepeatedSintHash64 = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeZigzagVarintHash64_(a, b[c]);
+  return arr;
 };
 
-jspb.BinaryWriter.prototype.writeRepeatedFixed32 = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeFixed32(a, b[c]);
-};
+Yallist.prototype.slice = function (from, to) {
+  to = to || this.length;
 
-jspb.BinaryWriter.prototype.writeRepeatedFixed64 = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeFixed64(a, b[c]);
-};
+  if (to < 0) {
+    to += this.length;
+  }
 
-jspb.BinaryWriter.prototype.writeRepeatedFixed64String = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeFixed64String(a, b[c]);
-};
+  from = from || 0;
 
-jspb.BinaryWriter.prototype.writeRepeatedSfixed32 = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeSfixed32(a, b[c]);
-};
+  if (from < 0) {
+    from += this.length;
+  }
 
-jspb.BinaryWriter.prototype.writeRepeatedSfixed64 = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeSfixed64(a, b[c]);
-};
+  var ret = new Yallist();
 
-jspb.BinaryWriter.prototype.writeRepeatedSfixed64String = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeSfixed64String(a, b[c]);
-};
+  if (to < from || to < 0) {
+    return ret;
+  }
 
-jspb.BinaryWriter.prototype.writeRepeatedFloat = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeFloat(a, b[c]);
-};
+  if (from < 0) {
+    from = 0;
+  }
 
-jspb.BinaryWriter.prototype.writeRepeatedDouble = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeDouble(a, b[c]);
-};
+  if (to > this.length) {
+    to = this.length;
+  }
 
-jspb.BinaryWriter.prototype.writeRepeatedBool = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeBool(a, b[c]);
-};
+  for (var i = 0, walker = this.head; walker !== null && i < from; i++) {
+    walker = walker.next;
+  }
 
-jspb.BinaryWriter.prototype.writeRepeatedEnum = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeEnum(a, b[c]);
-};
+  for (; walker !== null && i < to; i++, walker = walker.next) {
+    ret.push(walker.value);
+  }
 
-jspb.BinaryWriter.prototype.writeRepeatedString = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeString(a, b[c]);
+  return ret;
 };
 
-jspb.BinaryWriter.prototype.writeRepeatedBytes = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeBytes(a, b[c]);
-};
+Yallist.prototype.sliceReverse = function (from, to) {
+  to = to || this.length;
 
-jspb.BinaryWriter.prototype.writeRepeatedMessage = function (a, b, c) {
-  if (null != b) for (var d = 0; d < b.length; d++) {
-    var e = this.beginDelimited_(a);
-    c(b[d], this);
-    this.endDelimited_(e);
+  if (to < 0) {
+    to += this.length;
   }
-};
-
-jspb.BinaryWriter.prototype.writeRepeatedGroup = function (a, b, c) {
-  if (null != b) for (var d = 0; d < b.length; d++) this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.START_GROUP), c(b[d], this), this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.END_GROUP);
-};
 
-jspb.BinaryWriter.prototype.writeRepeatedFixedHash64 = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeFixedHash64(a, b[c]);
-};
+  from = from || 0;
 
-jspb.BinaryWriter.prototype.writeRepeatedVarintHash64 = function (a, b) {
-  if (null != b) for (var c = 0; c < b.length; c++) this.writeVarintHash64(a, b[c]);
-};
+  if (from < 0) {
+    from += this.length;
+  }
 
-jspb.BinaryWriter.prototype.writePackedInt32 = function (a, b) {
-  if (null != b && b.length) {
-    a = this.beginDelimited_(a);
+  var ret = new Yallist();
 
-    for (var c = 0; c < b.length; c++) this.encoder_.writeSignedVarint32(b[c]);
+  if (to < from || to < 0) {
+    return ret;
+  }
 
-    this.endDelimited_(a);
+  if (from < 0) {
+    from = 0;
   }
-};
 
-jspb.BinaryWriter.prototype.writePackedInt32String = function (a, b) {
-  if (null != b && b.length) {
-    a = this.beginDelimited_(a);
+  if (to > this.length) {
+    to = this.length;
+  }
 
-    for (var c = 0; c < b.length; c++) this.encoder_.writeSignedVarint32(parseInt(b[c], 10));
+  for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {
+    walker = walker.prev;
+  }
 
-    this.endDelimited_(a);
+  for (; walker !== null && i > from; i--, walker = walker.prev) {
+    ret.push(walker.value);
   }
-};
 
-jspb.BinaryWriter.prototype.writePackedInt64 = function (a, b) {
-  if (null != b && b.length) {
-    a = this.beginDelimited_(a);
+  return ret;
+};
 
-    for (var c = 0; c < b.length; c++) this.encoder_.writeSignedVarint64(b[c]);
+Yallist.prototype.splice = function (start, deleteCount
+/*, ...nodes */
+) {
+  if (start > this.length) {
+    start = this.length - 1;
+  }
 
-    this.endDelimited_(a);
+  if (start < 0) {
+    start = this.length + start;
   }
-};
 
-jspb.BinaryWriter.prototype.writePackedSplitFixed64 = function (a, b, c, d) {
-  if (null != b) {
-    a = this.beginDelimited_(a);
+  for (var i = 0, walker = this.head; walker !== null && i < start; i++) {
+    walker = walker.next;
+  }
 
-    for (var e = 0; e < b.length; e++) this.encoder_.writeSplitFixed64(c(b[e]), d(b[e]));
+  var ret = [];
 
-    this.endDelimited_(a);
+  for (var i = 0; walker && i < deleteCount; i++) {
+    ret.push(walker.value);
+    walker = this.removeNode(walker);
   }
-};
 
-jspb.BinaryWriter.prototype.writePackedSplitVarint64 = function (a, b, c, d) {
-  if (null != b) {
-    a = this.beginDelimited_(a);
+  if (walker === null) {
+    walker = this.tail;
+  }
 
-    for (var e = 0; e < b.length; e++) this.encoder_.writeSplitVarint64(c(b[e]), d(b[e]));
+  if (walker !== this.head && walker !== this.tail) {
+    walker = walker.prev;
+  }
 
-    this.endDelimited_(a);
+  for (var i = 2; i < arguments.length; i++) {
+    walker = insert(this, walker, arguments[i]);
   }
-};
 
-jspb.BinaryWriter.prototype.writePackedSplitZigzagVarint64 = function (a, b, c, d) {
-  if (null != b) {
-    a = this.beginDelimited_(a);
+  return ret;
+};
 
-    for (var e = this.encoder_, f = 0; f < b.length; f++) jspb.utils.toZigzag64(c(b[f]), d(b[f]), function (a, b) {
-      e.writeSplitVarint64(a >>> 0, b >>> 0);
-    });
+Yallist.prototype.reverse = function () {
+  var head = this.head;
+  var tail = this.tail;
 
-    this.endDelimited_(a);
+  for (var walker = head; walker !== null; walker = walker.prev) {
+    var p = walker.prev;
+    walker.prev = walker.next;
+    walker.next = p;
   }
+
+  this.head = tail;
+  this.tail = head;
+  return this;
 };
 
-jspb.BinaryWriter.prototype.writePackedInt64String = function (a, b) {
-  if (null != b && b.length) {
-    a = this.beginDelimited_(a);
+function insert(self, node, value) {
+  var inserted = node === self.head ? new Node(value, null, node, self) : new Node(value, node, node.next, self);
 
-    for (var c = 0; c < b.length; c++) {
-      var d = jspb.arith.Int64.fromString(b[c]);
-      this.encoder_.writeSplitVarint64(d.lo, d.hi);
-    }
+  if (inserted.next === null) {
+    self.tail = inserted;
+  }
 
-    this.endDelimited_(a);
+  if (inserted.prev === null) {
+    self.head = inserted;
   }
-};
 
-jspb.BinaryWriter.prototype.writePackedUint32 = function (a, b) {
-  if (null != b && b.length) {
-    a = this.beginDelimited_(a);
+  self.length++;
+  return inserted;
+}
 
-    for (var c = 0; c < b.length; c++) this.encoder_.writeUnsignedVarint32(b[c]);
+function push(self, item) {
+  self.tail = new Node(item, self.tail, null, self);
 
-    this.endDelimited_(a);
+  if (!self.head) {
+    self.head = self.tail;
   }
-};
 
-jspb.BinaryWriter.prototype.writePackedUint32String = function (a, b) {
-  if (null != b && b.length) {
-    a = this.beginDelimited_(a);
+  self.length++;
+}
 
-    for (var c = 0; c < b.length; c++) this.encoder_.writeUnsignedVarint32(parseInt(b[c], 10));
+function unshift(self, item) {
+  self.head = new Node(item, null, self.head, self);
 
-    this.endDelimited_(a);
+  if (!self.tail) {
+    self.tail = self.head;
   }
-};
-
-jspb.BinaryWriter.prototype.writePackedUint64 = function (a, b) {
-  if (null != b && b.length) {
-    a = this.beginDelimited_(a);
 
-    for (var c = 0; c < b.length; c++) this.encoder_.writeUnsignedVarint64(b[c]);
+  self.length++;
+}
 
-    this.endDelimited_(a);
+function Node(value, prev, next, list) {
+  if (!(this instanceof Node)) {
+    return new Node(value, prev, next, list);
   }
-};
 
-jspb.BinaryWriter.prototype.writePackedUint64String = function (a, b) {
-  if (null != b && b.length) {
-    a = this.beginDelimited_(a);
+  this.list = list;
+  this.value = value;
 
-    for (var c = 0; c < b.length; c++) {
-      var d = jspb.arith.UInt64.fromString(b[c]);
-      this.encoder_.writeSplitVarint64(d.lo, d.hi);
-    }
+  if (prev) {
+    prev.next = this;
+    this.prev = prev;
+  } else {
+    this.prev = null;
+  }
 
-    this.endDelimited_(a);
+  if (next) {
+    next.prev = this;
+    this.next = next;
+  } else {
+    this.next = null;
   }
-};
+}
 
-jspb.BinaryWriter.prototype.writePackedSint32 = function (a, b) {
-  if (null != b && b.length) {
-    a = this.beginDelimited_(a);
+try {
+  // add if support for Symbol.iterator is present
+  __webpack_require__(/*! ./iterator.js */ "./node_modules/lru-cache/node_modules/yallist/iterator.js")(Yallist);
+} catch (er) {}
 
-    for (var c = 0; c < b.length; c++) this.encoder_.writeZigzagVarint32(b[c]);
+/***/ }),
 
-    this.endDelimited_(a);
-  }
-};
+/***/ "./node_modules/md5/md5.js":
+/*!*********************************!*\
+  !*** ./node_modules/md5/md5.js ***!
+  \*********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-jspb.BinaryWriter.prototype.writePackedSint64 = function (a, b) {
-  if (null != b && b.length) {
-    a = this.beginDelimited_(a);
+(function () {
+  var crypt = __webpack_require__(/*! crypt */ "./node_modules/crypt/crypt.js"),
+      utf8 = __webpack_require__(/*! charenc */ "./node_modules/charenc/charenc.js").utf8,
+      isBuffer = __webpack_require__(/*! is-buffer */ "./node_modules/is-buffer/index.js"),
+      bin = __webpack_require__(/*! charenc */ "./node_modules/charenc/charenc.js").bin,
+      // The core
+  md5 = function (message, options) {
+    // Convert to byte array
+    if (message.constructor == String) {
+      if (options && options.encoding === 'binary') message = bin.stringToBytes(message);else message = utf8.stringToBytes(message);
+    } else if (isBuffer(message)) message = Array.prototype.slice.call(message, 0);else if (!Array.isArray(message) && message.constructor !== Uint8Array) message = message.toString(); // else, assume byte array already
 
-    for (var c = 0; c < b.length; c++) this.encoder_.writeZigzagVarint64(b[c]);
+    var m = crypt.bytesToWords(message),
+        l = message.length * 8,
+        a = 1732584193,
+        b = -271733879,
+        c = -1732584194,
+        d = 271733878; // Swap endian
 
-    this.endDelimited_(a);
-  }
-};
+    for (var i = 0; i < m.length; i++) {
+      m[i] = (m[i] << 8 | m[i] >>> 24) & 0x00FF00FF | (m[i] << 24 | m[i] >>> 8) & 0xFF00FF00;
+    } // Padding
 
-jspb.BinaryWriter.prototype.writePackedSint64String = function (a, b) {
-  if (null != b && b.length) {
-    a = this.beginDelimited_(a);
 
-    for (var c = 0; c < b.length; c++) this.encoder_.writeZigzagVarintHash64(jspb.utils.decimalStringToHash64(b[c]));
+    m[l >>> 5] |= 0x80 << l % 32;
+    m[(l + 64 >>> 9 << 4) + 14] = l; // Method shortcuts
 
-    this.endDelimited_(a);
-  }
-};
+    var FF = md5._ff,
+        GG = md5._gg,
+        HH = md5._hh,
+        II = md5._ii;
 
-jspb.BinaryWriter.prototype.writePackedSintHash64 = function (a, b) {
-  if (null != b && b.length) {
-    a = this.beginDelimited_(a);
+    for (var i = 0; i < m.length; i += 16) {
+      var aa = a,
+          bb = b,
+          cc = c,
+          dd = d;
+      a = FF(a, b, c, d, m[i + 0], 7, -680876936);
+      d = FF(d, a, b, c, m[i + 1], 12, -389564586);
+      c = FF(c, d, a, b, m[i + 2], 17, 606105819);
+      b = FF(b, c, d, a, m[i + 3], 22, -1044525330);
+      a = FF(a, b, c, d, m[i + 4], 7, -176418897);
+      d = FF(d, a, b, c, m[i + 5], 12, 1200080426);
+      c = FF(c, d, a, b, m[i + 6], 17, -1473231341);
+      b = FF(b, c, d, a, m[i + 7], 22, -45705983);
+      a = FF(a, b, c, d, m[i + 8], 7, 1770035416);
+      d = FF(d, a, b, c, m[i + 9], 12, -1958414417);
+      c = FF(c, d, a, b, m[i + 10], 17, -42063);
+      b = FF(b, c, d, a, m[i + 11], 22, -1990404162);
+      a = FF(a, b, c, d, m[i + 12], 7, 1804603682);
+      d = FF(d, a, b, c, m[i + 13], 12, -40341101);
+      c = FF(c, d, a, b, m[i + 14], 17, -1502002290);
+      b = FF(b, c, d, a, m[i + 15], 22, 1236535329);
+      a = GG(a, b, c, d, m[i + 1], 5, -165796510);
+      d = GG(d, a, b, c, m[i + 6], 9, -1069501632);
+      c = GG(c, d, a, b, m[i + 11], 14, 643717713);
+      b = GG(b, c, d, a, m[i + 0], 20, -373897302);
+      a = GG(a, b, c, d, m[i + 5], 5, -701558691);
+      d = GG(d, a, b, c, m[i + 10], 9, 38016083);
+      c = GG(c, d, a, b, m[i + 15], 14, -660478335);
+      b = GG(b, c, d, a, m[i + 4], 20, -405537848);
+      a = GG(a, b, c, d, m[i + 9], 5, 568446438);
+      d = GG(d, a, b, c, m[i + 14], 9, -1019803690);
+      c = GG(c, d, a, b, m[i + 3], 14, -187363961);
+      b = GG(b, c, d, a, m[i + 8], 20, 1163531501);
+      a = GG(a, b, c, d, m[i + 13], 5, -1444681467);
+      d = GG(d, a, b, c, m[i + 2], 9, -51403784);
+      c = GG(c, d, a, b, m[i + 7], 14, 1735328473);
+      b = GG(b, c, d, a, m[i + 12], 20, -1926607734);
+      a = HH(a, b, c, d, m[i + 5], 4, -378558);
+      d = HH(d, a, b, c, m[i + 8], 11, -2022574463);
+      c = HH(c, d, a, b, m[i + 11], 16, 1839030562);
+      b = HH(b, c, d, a, m[i + 14], 23, -35309556);
+      a = HH(a, b, c, d, m[i + 1], 4, -1530992060);
+      d = HH(d, a, b, c, m[i + 4], 11, 1272893353);
+      c = HH(c, d, a, b, m[i + 7], 16, -155497632);
+      b = HH(b, c, d, a, m[i + 10], 23, -1094730640);
+      a = HH(a, b, c, d, m[i + 13], 4, 681279174);
+      d = HH(d, a, b, c, m[i + 0], 11, -358537222);
+      c = HH(c, d, a, b, m[i + 3], 16, -722521979);
+      b = HH(b, c, d, a, m[i + 6], 23, 76029189);
+      a = HH(a, b, c, d, m[i + 9], 4, -640364487);
+      d = HH(d, a, b, c, m[i + 12], 11, -421815835);
+      c = HH(c, d, a, b, m[i + 15], 16, 530742520);
+      b = HH(b, c, d, a, m[i + 2], 23, -995338651);
+      a = II(a, b, c, d, m[i + 0], 6, -198630844);
+      d = II(d, a, b, c, m[i + 7], 10, 1126891415);
+      c = II(c, d, a, b, m[i + 14], 15, -1416354905);
+      b = II(b, c, d, a, m[i + 5], 21, -57434055);
+      a = II(a, b, c, d, m[i + 12], 6, 1700485571);
+      d = II(d, a, b, c, m[i + 3], 10, -1894986606);
+      c = II(c, d, a, b, m[i + 10], 15, -1051523);
+      b = II(b, c, d, a, m[i + 1], 21, -2054922799);
+      a = II(a, b, c, d, m[i + 8], 6, 1873313359);
+      d = II(d, a, b, c, m[i + 15], 10, -30611744);
+      c = II(c, d, a, b, m[i + 6], 15, -1560198380);
+      b = II(b, c, d, a, m[i + 13], 21, 1309151649);
+      a = II(a, b, c, d, m[i + 4], 6, -145523070);
+      d = II(d, a, b, c, m[i + 11], 10, -1120210379);
+      c = II(c, d, a, b, m[i + 2], 15, 718787259);
+      b = II(b, c, d, a, m[i + 9], 21, -343485551);
+      a = a + aa >>> 0;
+      b = b + bb >>> 0;
+      c = c + cc >>> 0;
+      d = d + dd >>> 0;
+    }
 
-    for (var c = 0; c < b.length; c++) this.encoder_.writeZigzagVarintHash64(b[c]);
+    return crypt.endian([a, b, c, d]);
+  }; // Auxiliary functions
 
-    this.endDelimited_(a);
-  }
-};
 
-jspb.BinaryWriter.prototype.writePackedFixed32 = function (a, b) {
-  if (null != b && b.length) for (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(4 * b.length), a = 0; a < b.length; a++) this.encoder_.writeUint32(b[a]);
-};
+  md5._ff = function (a, b, c, d, x, s, t) {
+    var n = a + (b & c | ~b & d) + (x >>> 0) + t;
+    return (n << s | n >>> 32 - s) + b;
+  };
 
-jspb.BinaryWriter.prototype.writePackedFixed64 = function (a, b) {
-  if (null != b && b.length) for (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(8 * b.length), a = 0; a < b.length; a++) this.encoder_.writeUint64(b[a]);
-};
+  md5._gg = function (a, b, c, d, x, s, t) {
+    var n = a + (b & d | c & ~d) + (x >>> 0) + t;
+    return (n << s | n >>> 32 - s) + b;
+  };
 
-jspb.BinaryWriter.prototype.writePackedFixed64String = function (a, b) {
-  if (null != b && b.length) for (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(8 * b.length), a = 0; a < b.length; a++) {
-    var c = jspb.arith.UInt64.fromString(b[a]);
-    this.encoder_.writeSplitFixed64(c.lo, c.hi);
-  }
-};
+  md5._hh = function (a, b, c, d, x, s, t) {
+    var n = a + (b ^ c ^ d) + (x >>> 0) + t;
+    return (n << s | n >>> 32 - s) + b;
+  };
 
-jspb.BinaryWriter.prototype.writePackedSfixed32 = function (a, b) {
-  if (null != b && b.length) for (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(4 * b.length), a = 0; a < b.length; a++) this.encoder_.writeInt32(b[a]);
-};
+  md5._ii = function (a, b, c, d, x, s, t) {
+    var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;
+    return (n << s | n >>> 32 - s) + b;
+  }; // Package private blocksize
 
-jspb.BinaryWriter.prototype.writePackedSfixed64 = function (a, b) {
-  if (null != b && b.length) for (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(8 * b.length), a = 0; a < b.length; a++) this.encoder_.writeInt64(b[a]);
-};
 
-jspb.BinaryWriter.prototype.writePackedSfixed64String = function (a, b) {
-  if (null != b && b.length) for (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(8 * b.length), a = 0; a < b.length; a++) this.encoder_.writeInt64String(b[a]);
-};
+  md5._blocksize = 16;
+  md5._digestsize = 16;
 
-jspb.BinaryWriter.prototype.writePackedFloat = function (a, b) {
-  if (null != b && b.length) for (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(4 * b.length), a = 0; a < b.length; a++) this.encoder_.writeFloat(b[a]);
-};
+  module.exports = function (message, options) {
+    if (message === undefined || message === null) throw new Error('Illegal argument ' + message);
+    var digestbytes = crypt.wordsToBytes(md5(message, options));
+    return options && options.asBytes ? digestbytes : options && options.asString ? bin.bytesToString(digestbytes) : crypt.bytesToHex(digestbytes);
+  };
+})();
 
-jspb.BinaryWriter.prototype.writePackedDouble = function (a, b) {
-  if (null != b && b.length) for (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(8 * b.length), a = 0; a < b.length; a++) this.encoder_.writeDouble(b[a]);
-};
+/***/ }),
 
-jspb.BinaryWriter.prototype.writePackedBool = function (a, b) {
-  if (null != b && b.length) for (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(b.length), a = 0; a < b.length; a++) this.encoder_.writeBool(b[a]);
+/***/ "./node_modules/memoize-one/dist/memoize-one.esm.js":
+/*!**********************************************************!*\
+  !*** ./node_modules/memoize-one/dist/memoize-one.esm.js ***!
+  \**********************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+var simpleIsEqual = function simpleIsEqual(a, b) {
+  return a === b;
 };
 
-jspb.BinaryWriter.prototype.writePackedEnum = function (a, b) {
-  if (null != b && b.length) {
-    a = this.beginDelimited_(a);
+function index(resultFn, isEqual) {
+  if (isEqual === void 0) {
+    isEqual = simpleIsEqual;
+  }
 
-    for (var c = 0; c < b.length; c++) this.encoder_.writeEnum(b[c]);
+  var lastThis;
+  var lastArgs = [];
+  var lastResult;
+  var calledOnce = false;
 
-    this.endDelimited_(a);
-  }
-};
+  var isNewArgEqualToLast = function isNewArgEqualToLast(newArg, index) {
+    return isEqual(newArg, lastArgs[index], index);
+  };
 
-jspb.BinaryWriter.prototype.writePackedFixedHash64 = function (a, b) {
-  if (null != b && b.length) for (this.writeFieldHeader_(a, jspb.BinaryConstants.WireType.DELIMITED), this.encoder_.writeUnsignedVarint32(8 * b.length), a = 0; a < b.length; a++) this.encoder_.writeFixedHash64(b[a]);
-};
+  var result = function result() {
+    for (var _len = arguments.length, newArgs = new Array(_len), _key = 0; _key < _len; _key++) {
+      newArgs[_key] = arguments[_key];
+    }
 
-jspb.BinaryWriter.prototype.writePackedVarintHash64 = function (a, b) {
-  if (null != b && b.length) {
-    a = this.beginDelimited_(a);
+    if (calledOnce && lastThis === this && newArgs.length === lastArgs.length && newArgs.every(isNewArgEqualToLast)) {
+      return lastResult;
+    }
 
-    for (var c = 0; c < b.length; c++) this.encoder_.writeVarintHash64(b[c]);
+    lastResult = resultFn.apply(this, newArgs);
+    calledOnce = true;
+    lastThis = this;
+    lastArgs = newArgs;
+    return lastResult;
+  };
 
-    this.endDelimited_(a);
-  }
-};
+  return result;
+}
 
-jspb.Export = {};
-exports.Map = jspb.Map;
-exports.Message = jspb.Message;
-exports.BinaryReader = jspb.BinaryReader;
-exports.BinaryWriter = jspb.BinaryWriter;
-exports.ExtensionFieldInfo = jspb.ExtensionFieldInfo;
-exports.ExtensionFieldBinaryInfo = jspb.ExtensionFieldBinaryInfo;
-exports.exportSymbol = goog.exportSymbol;
-exports.inherits = goog.inherits;
-exports.object = {
-  extend: goog.object.extend
-};
-exports.typeOf = goog.typeOf;
+/* harmony default export */ __webpack_exports__["default"] = (index);
 
 /***/ }),
 
-/***/ "./node_modules/has-symbols/index.js":
-/*!*******************************************!*\
-  !*** ./node_modules/has-symbols/index.js ***!
-  \*******************************************/
+/***/ "./node_modules/murmurhash/murmurhash.js":
+/*!***********************************************!*\
+  !*** ./node_modules/murmurhash/murmurhash.js ***!
+  \***********************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-"use strict";
+(function () {
+  var _global = this;
+  /**
+   * JS Implementation of MurmurHash2
+   *
+   * @author <a href="mailto:gary.court@gmail.com">Gary Court</a>
+   * @see http://github.com/garycourt/murmurhash-js
+   * @author <a href="mailto:aappleby@gmail.com">Austin Appleby</a>
+   * @see http://sites.google.com/site/murmurhash/
+   *
+   * @param {string} str ASCII only
+   * @param {number} seed Positive integer only
+   * @return {number} 32-bit positive integer hash
+   */
 
 
-var origSymbol = typeof Symbol !== 'undefined' && Symbol;
+  function MurmurHashV2(str, seed) {
+    var l = str.length,
+        h = seed ^ l,
+        i = 0,
+        k;
 
-var hasSymbolSham = __webpack_require__(/*! ./shams */ "./node_modules/has-symbols/shams.js");
+    while (l >= 4) {
+      k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;
+      k = (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0x5bd1e995 & 0xffff) << 16);
+      k ^= k >>> 24;
+      k = (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0x5bd1e995 & 0xffff) << 16);
+      h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16) ^ k;
+      l -= 4;
+      ++i;
+    }
 
-module.exports = function hasNativeSymbols() {
-  if (typeof origSymbol !== 'function') {
-    return false;
-  }
+    switch (l) {
+      case 3:
+        h ^= (str.charCodeAt(i + 2) & 0xff) << 16;
 
-  if (typeof Symbol !== 'function') {
-    return false;
-  }
+      case 2:
+        h ^= (str.charCodeAt(i + 1) & 0xff) << 8;
 
-  if (typeof origSymbol('foo') !== 'symbol') {
-    return false;
+      case 1:
+        h ^= str.charCodeAt(i) & 0xff;
+        h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16);
+    }
+
+    h ^= h >>> 13;
+    h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16);
+    h ^= h >>> 15;
+    return h >>> 0;
   }
 
-  if (typeof Symbol('bar') !== 'symbol') {
-    return false;
+  ;
+  /**
+   * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)
+   *
+   * @author <a href="mailto:gary.court@gmail.com">Gary Court</a>
+   * @see http://github.com/garycourt/murmurhash-js
+   * @author <a href="mailto:aappleby@gmail.com">Austin Appleby</a>
+   * @see http://sites.google.com/site/murmurhash/
+   *
+   * @param {string} key ASCII only
+   * @param {number} seed Positive integer only
+   * @return {number} 32-bit positive integer hash
+   */
+
+  function MurmurHashV3(key, seed) {
+    var remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i;
+    remainder = key.length & 3; // key.length % 4
+
+    bytes = key.length - remainder;
+    h1 = seed;
+    c1 = 0xcc9e2d51;
+    c2 = 0x1b873593;
+    i = 0;
+
+    while (i < bytes) {
+      k1 = key.charCodeAt(i) & 0xff | (key.charCodeAt(++i) & 0xff) << 8 | (key.charCodeAt(++i) & 0xff) << 16 | (key.charCodeAt(++i) & 0xff) << 24;
+      ++i;
+      k1 = (k1 & 0xffff) * c1 + (((k1 >>> 16) * c1 & 0xffff) << 16) & 0xffffffff;
+      k1 = k1 << 15 | k1 >>> 17;
+      k1 = (k1 & 0xffff) * c2 + (((k1 >>> 16) * c2 & 0xffff) << 16) & 0xffffffff;
+      h1 ^= k1;
+      h1 = h1 << 13 | h1 >>> 19;
+      h1b = (h1 & 0xffff) * 5 + (((h1 >>> 16) * 5 & 0xffff) << 16) & 0xffffffff;
+      h1 = (h1b & 0xffff) + 0x6b64 + (((h1b >>> 16) + 0xe654 & 0xffff) << 16);
+    }
+
+    k1 = 0;
+
+    switch (remainder) {
+      case 3:
+        k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;
+
+      case 2:
+        k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;
+
+      case 1:
+        k1 ^= key.charCodeAt(i) & 0xff;
+        k1 = (k1 & 0xffff) * c1 + (((k1 >>> 16) * c1 & 0xffff) << 16) & 0xffffffff;
+        k1 = k1 << 15 | k1 >>> 17;
+        k1 = (k1 & 0xffff) * c2 + (((k1 >>> 16) * c2 & 0xffff) << 16) & 0xffffffff;
+        h1 ^= k1;
+    }
+
+    h1 ^= key.length;
+    h1 ^= h1 >>> 16;
+    h1 = (h1 & 0xffff) * 0x85ebca6b + (((h1 >>> 16) * 0x85ebca6b & 0xffff) << 16) & 0xffffffff;
+    h1 ^= h1 >>> 13;
+    h1 = (h1 & 0xffff) * 0xc2b2ae35 + (((h1 >>> 16) * 0xc2b2ae35 & 0xffff) << 16) & 0xffffffff;
+    h1 ^= h1 >>> 16;
+    return h1 >>> 0;
   }
 
-  return hasSymbolSham();
-};
+  var murmur = MurmurHashV3;
+  murmur.v2 = MurmurHashV2;
+  murmur.v3 = MurmurHashV3;
+
+  if (true) {
+    module.exports = murmur;
+  } else { var _previousRoot; }
+})();
 
 /***/ }),
 
-/***/ "./node_modules/has-symbols/shams.js":
-/*!*******************************************!*\
-  !*** ./node_modules/has-symbols/shams.js ***!
-  \*******************************************/
+/***/ "./node_modules/object-assign/index.js":
+/*!*********************************************!*\
+  !*** ./node_modules/object-assign/index.js ***!
+  \*********************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
+/*
+object-assign
+(c) Sindre Sorhus
+@license MIT
+*/
 
-/* eslint complexity: [2, 18], max-statements: [2, 33] */
+/* eslint-disable no-unused-vars */
 
-module.exports = function hasSymbols() {
-  if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') {
-    return false;
-  }
+var getOwnPropertySymbols = Object.getOwnPropertySymbols;
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+var propIsEnumerable = Object.prototype.propertyIsEnumerable;
 
-  if (typeof Symbol.iterator === 'symbol') {
-    return true;
+function toObject(val) {
+  if (val === null || val === undefined) {
+    throw new TypeError('Object.assign cannot be called with null or undefined');
   }
 
-  var obj = {};
-  var sym = Symbol('test');
-  var symObj = Object(sym);
+  return Object(val);
+}
 
-  if (typeof sym === 'string') {
-    return false;
-  }
+function shouldUseNative() {
+  try {
+    if (!Object.assign) {
+      return false;
+    } // Detect buggy property enumeration order in older V8 versions.
+    // https://bugs.chromium.org/p/v8/issues/detail?id=4118
 
-  if (Object.prototype.toString.call(sym) !== '[object Symbol]') {
-    return false;
-  }
 
-  if (Object.prototype.toString.call(symObj) !== '[object Symbol]') {
-    return false;
-  } // temp disabled per https://github.com/ljharb/object.assign/issues/17
-  // if (sym instanceof Symbol) { return false; }
-  // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4
-  // if (!(symObj instanceof Symbol)) { return false; }
-  // if (typeof Symbol.prototype.toString !== 'function') { return false; }
-  // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }
+    var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
 
+    test1[5] = 'de';
 
-  var symVal = 42;
-  obj[sym] = symVal;
+    if (Object.getOwnPropertyNames(test1)[0] === '5') {
+      return false;
+    } // https://bugs.chromium.org/p/v8/issues/detail?id=3056
 
-  for (sym in obj) {
-    return false;
-  } // eslint-disable-line no-restricted-syntax, no-unreachable-loop
 
+    var test2 = {};
 
-  if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) {
-    return false;
-  }
+    for (var i = 0; i < 10; i++) {
+      test2['_' + String.fromCharCode(i)] = i;
+    }
 
-  if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) {
-    return false;
-  }
+    var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
+      return test2[n];
+    });
 
-  var syms = Object.getOwnPropertySymbols(obj);
+    if (order2.join('') !== '0123456789') {
+      return false;
+    } // https://bugs.chromium.org/p/v8/issues/detail?id=3056
 
-  if (syms.length !== 1 || syms[0] !== sym) {
-    return false;
-  }
 
-  if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) {
+    var test3 = {};
+    'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
+      test3[letter] = letter;
+    });
+
+    if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') {
+      return false;
+    }
+
+    return true;
+  } catch (err) {
+    // We don't expect any of the above to throw, but better to be safe.
     return false;
   }
+}
 
-  if (typeof Object.getOwnPropertyDescriptor === 'function') {
-    var descriptor = Object.getOwnPropertyDescriptor(obj, sym);
+module.exports = shouldUseNative() ? Object.assign : function (target, source) {
+  var from;
+  var to = toObject(target);
+  var symbols;
 
-    if (descriptor.value !== symVal || descriptor.enumerable !== true) {
-      return false;
+  for (var s = 1; s < arguments.length; s++) {
+    from = Object(arguments[s]);
+
+    for (var key in from) {
+      if (hasOwnProperty.call(from, key)) {
+        to[key] = from[key];
+      }
+    }
+
+    if (getOwnPropertySymbols) {
+      symbols = getOwnPropertySymbols(from);
+
+      for (var i = 0; i < symbols.length; i++) {
+        if (propIsEnumerable.call(from, symbols[i])) {
+          to[symbols[i]] = from[symbols[i]];
+        }
+      }
     }
   }
 
-  return true;
+  return to;
 };
 
 /***/ }),
 
-/***/ "./node_modules/has/src/index.js":
-/*!***************************************!*\
-  !*** ./node_modules/has/src/index.js ***!
-  \***************************************/
+/***/ "./node_modules/object-inspect/index.js":
+/*!**********************************************!*\
+  !*** ./node_modules/object-inspect/index.js ***!
+  \**********************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-"use strict";
+var hasMap = typeof Map === 'function' && Map.prototype;
+var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;
+var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;
+var mapForEach = hasMap && Map.prototype.forEach;
+var hasSet = typeof Set === 'function' && Set.prototype;
+var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;
+var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;
+var setForEach = hasSet && Set.prototype.forEach;
+var hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;
+var weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;
+var hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;
+var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;
+var hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;
+var weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;
+var booleanValueOf = Boolean.prototype.valueOf;
+var objectToString = Object.prototype.toString;
+var functionToString = Function.prototype.toString;
+var $match = String.prototype.match;
+var $slice = String.prototype.slice;
+var $replace = String.prototype.replace;
+var $toUpperCase = String.prototype.toUpperCase;
+var $toLowerCase = String.prototype.toLowerCase;
+var $test = RegExp.prototype.test;
+var $concat = Array.prototype.concat;
+var $join = Array.prototype.join;
+var $arrSlice = Array.prototype.slice;
+var $floor = Math.floor;
+var bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;
+var gOPS = Object.getOwnPropertySymbols;
+var symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;
+var hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object'; // ie, `has-tostringtag/shams
 
+var toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol') ? Symbol.toStringTag : null;
+var isEnumerable = Object.prototype.propertyIsEnumerable;
+var gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || ([].__proto__ === Array.prototype // eslint-disable-line no-proto
+? function (O) {
+  return O.__proto__; // eslint-disable-line no-proto
+} : null);
 
-var bind = __webpack_require__(/*! function-bind */ "./node_modules/function-bind/index.js");
+function addNumericSeparator(num, str) {
+  if (num === Infinity || num === -Infinity || num !== num || num && num > -1000 && num < 1000 || $test.call(/e/, str)) {
+    return str;
+  }
 
-module.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);
+  var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;
 
-/***/ }),
+  if (typeof num === 'number') {
+    var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)
 
-/***/ "./node_modules/is-arguments/index.js":
-/*!********************************************!*\
-  !*** ./node_modules/is-arguments/index.js ***!
-  \********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+    if (int !== num) {
+      var intStr = String(int);
+      var dec = $slice.call(str, intStr.length + 1);
+      return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');
+    }
+  }
 
-"use strict";
+  return $replace.call(str, sepRegex, '$&_');
+}
 
+var inspectCustom = __webpack_require__(/*! ./util.inspect */ "./node_modules/object-inspect/util.inspect.js").custom;
 
-var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
+var inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;
 
-var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
+module.exports = function inspect_(obj, options, depth, seen) {
+  var opts = options || {};
 
-var $toString = callBound('Object.prototype.toString');
+  if (has(opts, 'quoteStyle') && opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double') {
+    throw new TypeError('option "quoteStyle" must be "single" or "double"');
+  }
 
-var isStandardArguments = function isArguments(value) {
-  if (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {
-    return false;
+  if (has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number' ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity : opts.maxStringLength !== null)) {
+    throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');
   }
 
-  return $toString(value) === '[object Arguments]';
-};
+  var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;
 
-var isLegacyArguments = function isArguments(value) {
-  if (isStandardArguments(value)) {
-    return true;
+  if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {
+    throw new TypeError('option "customInspect", if provided, must be `true`, `false`, or `\'symbol\'`');
   }
 
-  return value !== null && typeof value === 'object' && typeof value.length === 'number' && value.length >= 0 && $toString(value) !== '[object Array]' && $toString(value.callee) === '[object Function]';
-};
-
-var supportsStandardArguments = function () {
-  return isStandardArguments(arguments);
-}();
+  if (has(opts, 'indent') && opts.indent !== null && opts.indent !== '\t' && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)) {
+    throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');
+  }
 
-isStandardArguments.isLegacyArguments = isLegacyArguments; // for tests
+  if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {
+    throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');
+  }
 
-module.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;
+  var numericSeparator = opts.numericSeparator;
 
-/***/ }),
+  if (typeof obj === 'undefined') {
+    return 'undefined';
+  }
 
-/***/ "./node_modules/is-bigint/index.js":
-/*!*****************************************!*\
-  !*** ./node_modules/is-bigint/index.js ***!
-  \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+  if (obj === null) {
+    return 'null';
+  }
 
-"use strict";
+  if (typeof obj === 'boolean') {
+    return obj ? 'true' : 'false';
+  }
 
+  if (typeof obj === 'string') {
+    return inspectString(obj, opts);
+  }
 
-if (typeof BigInt === 'function') {
-  var bigIntValueOf = BigInt.prototype.valueOf;
+  if (typeof obj === 'number') {
+    if (obj === 0) {
+      return Infinity / obj > 0 ? '0' : '-0';
+    }
 
-  var tryBigInt = function tryBigIntObject(value) {
-    try {
-      bigIntValueOf.call(value);
-      return true;
-    } catch (e) {}
+    var str = String(obj);
+    return numericSeparator ? addNumericSeparator(obj, str) : str;
+  }
 
-    return false;
-  };
+  if (typeof obj === 'bigint') {
+    var bigIntStr = String(obj) + 'n';
+    return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;
+  }
 
-  module.exports = function isBigInt(value) {
-    if (value === null || typeof value === 'undefined' || typeof value === 'boolean' || typeof value === 'string' || typeof value === 'number' || typeof value === 'symbol' || typeof value === 'function') {
-      return false;
-    }
+  var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;
 
-    if (typeof value === 'bigint') {
-      return true;
-    }
+  if (typeof depth === 'undefined') {
+    depth = 0;
+  }
 
-    return tryBigInt(value);
-  };
-} else {
-  module.exports = function isBigInt(value) {
-    return  false && false;
-  };
-}
+  if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {
+    return isArray(obj) ? '[Array]' : '[Object]';
+  }
 
-/***/ }),
+  var indent = getIndent(opts, depth);
 
-/***/ "./node_modules/is-boolean-object/index.js":
-/*!*************************************************!*\
-  !*** ./node_modules/is-boolean-object/index.js ***!
-  \*************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+  if (typeof seen === 'undefined') {
+    seen = [];
+  } else if (indexOf(seen, obj) >= 0) {
+    return '[Circular]';
+  }
 
-"use strict";
+  function inspect(value, from, noIndent) {
+    if (from) {
+      seen = $arrSlice.call(seen);
+      seen.push(from);
+    }
 
+    if (noIndent) {
+      var newOpts = {
+        depth: opts.depth
+      };
 
-var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
+      if (has(opts, 'quoteStyle')) {
+        newOpts.quoteStyle = opts.quoteStyle;
+      }
 
-var $boolToStr = callBound('Boolean.prototype.toString');
-var $toString = callBound('Object.prototype.toString');
+      return inspect_(value, newOpts, depth + 1, seen);
+    }
 
-var tryBooleanObject = function booleanBrandCheck(value) {
-  try {
-    $boolToStr(value);
-    return true;
-  } catch (e) {
-    return false;
+    return inspect_(value, opts, depth + 1, seen);
   }
-};
-
-var boolClass = '[object Boolean]';
-var hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag;
 
-module.exports = function isBoolean(value) {
-  if (typeof value === 'boolean') {
-    return true;
+  if (typeof obj === 'function') {
+    var name = nameOf(obj);
+    var keys = arrObjKeys(obj, inspect);
+    return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');
   }
 
-  if (value === null || typeof value !== 'object') {
-    return false;
+  if (isSymbol(obj)) {
+    var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\(.*\))_[^)]*$/, '$1') : symToString.call(obj);
+    return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;
   }
 
-  return hasToStringTag && Symbol.toStringTag in value ? tryBooleanObject(value) : $toString(value) === boolClass;
-};
-
-/***/ }),
-
-/***/ "./node_modules/is-buffer/index.js":
-/*!*****************************************!*\
-  !*** ./node_modules/is-buffer/index.js ***!
-  \*****************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-/*!
- * Determine if an object is a Buffer
- *
- * @author   Feross Aboukhadijeh <https://feross.org>
- * @license  MIT
- */
-// The _isBuffer check is for Safari 5-7 support, because it's missing
-// Object.prototype.constructor. Remove this eventually
-module.exports = function (obj) {
-  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer);
-};
+  if (isElement(obj)) {
+    var s = '<' + $toLowerCase.call(String(obj.nodeName));
+    var attrs = obj.attributes || [];
 
-function isBuffer(obj) {
-  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj);
-} // For Node v0.10 support. Remove this eventually.
+    for (var i = 0; i < attrs.length; i++) {
+      s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);
+    }
 
+    s += '>';
 
-function isSlowBuffer(obj) {
-  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0));
-}
+    if (obj.childNodes && obj.childNodes.length) {
+      s += '...';
+    }
 
-/***/ }),
+    s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>';
+    return s;
+  }
 
-/***/ "./node_modules/is-callable/index.js":
-/*!*******************************************!*\
-  !*** ./node_modules/is-callable/index.js ***!
-  \*******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+  if (isArray(obj)) {
+    if (obj.length === 0) {
+      return '[]';
+    }
 
-"use strict";
+    var xs = arrObjKeys(obj, inspect);
 
+    if (indent && !singleLineValues(xs)) {
+      return '[' + indentedJoin(xs, indent) + ']';
+    }
 
-var fnToStr = Function.prototype.toString;
-var reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;
-var badArrayLike;
-var isCallableMarker;
+    return '[ ' + $join.call(xs, ', ') + ' ]';
+  }
 
-if (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {
-  try {
-    badArrayLike = Object.defineProperty({}, 'length', {
-      get: function () {
-        throw isCallableMarker;
-      }
-    });
-    isCallableMarker = {}; // eslint-disable-next-line no-throw-literal
+  if (isError(obj)) {
+    var parts = arrObjKeys(obj, inspect);
 
-    reflectApply(function () {
-      throw 42;
-    }, null, badArrayLike);
-  } catch (_) {
-    if (_ !== isCallableMarker) {
-      reflectApply = null;
+    if ('cause' in obj && !isEnumerable.call(obj, 'cause')) {
+      return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';
     }
-  }
-} else {
-  reflectApply = null;
-}
 
-var constructorRegex = /^\s*class\b/;
+    if (parts.length === 0) {
+      return '[' + String(obj) + ']';
+    }
 
-var isES6ClassFn = function isES6ClassFunction(value) {
-  try {
-    var fnStr = fnToStr.call(value);
-    return constructorRegex.test(fnStr);
-  } catch (e) {
-    return false; // not a function
+    return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';
   }
-};
 
-var tryFunctionObject = function tryFunctionToStr(value) {
-  try {
-    if (isES6ClassFn(value)) {
-      return false;
+  if (typeof obj === 'object' && customInspect) {
+    if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {
+      return obj[inspectSymbol]();
+    } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {
+      return obj.inspect();
     }
-
-    fnToStr.call(value);
-    return true;
-  } catch (e) {
-    return false;
   }
-};
 
-var toStr = Object.prototype.toString;
-var fnClass = '[object Function]';
-var genClass = '[object GeneratorFunction]';
-var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
-/* globals document: false */
-
-var documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};
-module.exports = reflectApply ? function isCallable(value) {
-  if (value === documentDotAll) {
-    return true;
+  if (isMap(obj)) {
+    var mapParts = [];
+    mapForEach.call(obj, function (value, key) {
+      mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));
+    });
+    return collectionOf('Map', mapSize.call(obj), mapParts, indent);
   }
 
-  if (!value) {
-    return false;
+  if (isSet(obj)) {
+    var setParts = [];
+    setForEach.call(obj, function (value) {
+      setParts.push(inspect(value, obj));
+    });
+    return collectionOf('Set', setSize.call(obj), setParts, indent);
   }
 
-  if (typeof value !== 'function' && typeof value !== 'object') {
-    return false;
+  if (isWeakMap(obj)) {
+    return weakCollectionOf('WeakMap');
   }
 
-  if (typeof value === 'function' && !value.prototype) {
-    return true;
+  if (isWeakSet(obj)) {
+    return weakCollectionOf('WeakSet');
   }
 
-  try {
-    reflectApply(value, null, badArrayLike);
-  } catch (e) {
-    if (e !== isCallableMarker) {
-      return false;
-    }
+  if (isWeakRef(obj)) {
+    return weakCollectionOf('WeakRef');
   }
 
-  return !isES6ClassFn(value);
-} : function isCallable(value) {
-  if (value === documentDotAll) {
-    return true;
+  if (isNumber(obj)) {
+    return markBoxed(inspect(Number(obj)));
   }
 
-  if (!value) {
-    return false;
+  if (isBigInt(obj)) {
+    return markBoxed(inspect(bigIntValueOf.call(obj)));
   }
 
-  if (typeof value !== 'function' && typeof value !== 'object') {
-    return false;
+  if (isBoolean(obj)) {
+    return markBoxed(booleanValueOf.call(obj));
   }
 
-  if (typeof value === 'function' && !value.prototype) {
-    return true;
+  if (isString(obj)) {
+    return markBoxed(inspect(String(obj)));
   }
 
-  if (hasToStringTag) {
-    return tryFunctionObject(value);
-  }
+  if (!isDate(obj) && !isRegExp(obj)) {
+    var ys = arrObjKeys(obj, inspect);
+    var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;
+    var protoTag = obj instanceof Object ? '' : 'null prototype';
+    var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';
+    var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';
+    var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');
 
-  if (isES6ClassFn(value)) {
-    return false;
+    if (ys.length === 0) {
+      return tag + '{}';
+    }
+
+    if (indent) {
+      return tag + '{' + indentedJoin(ys, indent) + '}';
+    }
+
+    return tag + '{ ' + $join.call(ys, ', ') + ' }';
   }
 
-  var strClass = toStr.call(value);
-  return strClass === fnClass || strClass === genClass;
+  return String(obj);
 };
 
-/***/ }),
+function wrapQuotes(s, defaultStyle, opts) {
+  var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '"' : "'";
+  return quoteChar + s + quoteChar;
+}
 
-/***/ "./node_modules/is-date-object/index.js":
-/*!**********************************************!*\
-  !*** ./node_modules/is-date-object/index.js ***!
-  \**********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+function quote(s) {
+  return $replace.call(String(s), /"/g, '&quot;');
+}
 
-"use strict";
+function isArray(obj) {
+  return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj));
+}
+
+function isDate(obj) {
+  return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj));
+}
 
+function isRegExp(obj) {
+  return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj));
+}
 
-var getDay = Date.prototype.getDay;
+function isError(obj) {
+  return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj));
+}
 
-var tryDateObject = function tryDateGetDayCall(value) {
-  try {
-    getDay.call(value);
+function isString(obj) {
+  return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj));
+}
+
+function isNumber(obj) {
+  return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj));
+}
+
+function isBoolean(obj) {
+  return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj));
+} // Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives
+
+
+function isSymbol(obj) {
+  if (hasShammedSymbols) {
+    return obj && typeof obj === 'object' && obj instanceof Symbol;
+  }
+
+  if (typeof obj === 'symbol') {
     return true;
-  } catch (e) {
+  }
+
+  if (!obj || typeof obj !== 'object' || !symToString) {
     return false;
   }
-};
 
-var toStr = Object.prototype.toString;
-var dateClass = '[object Date]';
-var hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag;
+  try {
+    symToString.call(obj);
+    return true;
+  } catch (e) {}
 
-module.exports = function isDateObject(value) {
-  if (typeof value !== 'object' || value === null) {
+  return false;
+}
+
+function isBigInt(obj) {
+  if (!obj || typeof obj !== 'object' || !bigIntValueOf) {
     return false;
   }
 
-  return hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;
+  try {
+    bigIntValueOf.call(obj);
+    return true;
+  } catch (e) {}
+
+  return false;
+}
+
+var hasOwn = Object.prototype.hasOwnProperty || function (key) {
+  return key in this;
 };
 
-/***/ }),
+function has(obj, key) {
+  return hasOwn.call(obj, key);
+}
 
-/***/ "./node_modules/is-map/index.js":
-/*!**************************************!*\
-  !*** ./node_modules/is-map/index.js ***!
-  \**************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+function toStr(obj) {
+  return objectToString.call(obj);
+}
 
-"use strict";
+function nameOf(f) {
+  if (f.name) {
+    return f.name;
+  }
 
+  var m = $match.call(functionToString.call(f), /^function\s*([\w$]+)/);
 
-var $Map = typeof Map === 'function' && Map.prototype ? Map : null;
-var $Set = typeof Set === 'function' && Set.prototype ? Set : null;
-var exported;
+  if (m) {
+    return m[1];
+  }
 
-if (!$Map) {
-  // eslint-disable-next-line no-unused-vars
-  exported = function isMap(x) {
-    // `Map` is not present in this environment.
-    return false;
-  };
+  return null;
 }
 
-var $mapHas = $Map ? Map.prototype.has : null;
-var $setHas = $Set ? Set.prototype.has : null;
+function indexOf(xs, x) {
+  if (xs.indexOf) {
+    return xs.indexOf(x);
+  }
 
-if (!exported && !$mapHas) {
-  // eslint-disable-next-line no-unused-vars
-  exported = function isMap(x) {
-    // `Map` does not have a `has` method
-    return false;
-  };
+  for (var i = 0, l = xs.length; i < l; i++) {
+    if (xs[i] === x) {
+      return i;
+    }
+  }
+
+  return -1;
 }
 
-module.exports = exported || function isMap(x) {
-  if (!x || typeof x !== 'object') {
+function isMap(x) {
+  if (!mapSize || !x || typeof x !== 'object') {
     return false;
   }
 
   try {
-    $mapHas.call(x);
+    mapSize.call(x);
 
-    if ($setHas) {
-      try {
-        $setHas.call(x);
-      } catch (e) {
-        return true;
-      }
+    try {
+      setSize.call(x);
+    } catch (s) {
+      return true;
     }
 
-    return x instanceof $Map; // core-js workaround, pre-v2.5.0
+    return x instanceof Map; // core-js workaround, pre-v2.5.0
   } catch (e) {}
 
   return false;
-};
+}
 
-/***/ }),
+function isWeakMap(x) {
+  if (!weakMapHas || !x || typeof x !== 'object') {
+    return false;
+  }
 
-/***/ "./node_modules/is-number-object/index.js":
-/*!************************************************!*\
-  !*** ./node_modules/is-number-object/index.js ***!
-  \************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+  try {
+    weakMapHas.call(x, weakMapHas);
 
-"use strict";
+    try {
+      weakSetHas.call(x, weakSetHas);
+    } catch (s) {
+      return true;
+    }
 
+    return x instanceof WeakMap; // core-js workaround, pre-v2.5.0
+  } catch (e) {}
 
-var numToStr = Number.prototype.toString;
+  return false;
+}
 
-var tryNumberObject = function tryNumberObject(value) {
-  try {
-    numToStr.call(value);
-    return true;
-  } catch (e) {
+function isWeakRef(x) {
+  if (!weakRefDeref || !x || typeof x !== 'object') {
     return false;
   }
-};
-
-var toStr = Object.prototype.toString;
-var numClass = '[object Number]';
-var hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag;
 
-module.exports = function isNumberObject(value) {
-  if (typeof value === 'number') {
+  try {
+    weakRefDeref.call(x);
     return true;
-  }
+  } catch (e) {}
 
-  if (typeof value !== 'object') {
+  return false;
+}
+
+function isSet(x) {
+  if (!setSize || !x || typeof x !== 'object') {
     return false;
   }
 
-  return hasToStringTag ? tryNumberObject(value) : toStr.call(value) === numClass;
-};
-
-/***/ }),
+  try {
+    setSize.call(x);
 
-/***/ "./node_modules/is-regex/index.js":
-/*!****************************************!*\
-  !*** ./node_modules/is-regex/index.js ***!
-  \****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+    try {
+      mapSize.call(x);
+    } catch (m) {
+      return true;
+    }
 
-"use strict";
+    return x instanceof Set; // core-js workaround, pre-v2.5.0
+  } catch (e) {}
 
+  return false;
+}
 
-var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
+function isWeakSet(x) {
+  if (!weakSetHas || !x || typeof x !== 'object') {
+    return false;
+  }
 
-var hasSymbols = __webpack_require__(/*! has-symbols/shams */ "./node_modules/has-symbols/shams.js")();
+  try {
+    weakSetHas.call(x, weakSetHas);
 
-var hasToStringTag = hasSymbols && !!Symbol.toStringTag;
-var has;
-var $exec;
-var isRegexMarker;
-var badStringifier;
+    try {
+      weakMapHas.call(x, weakMapHas);
+    } catch (s) {
+      return true;
+    }
 
-if (hasToStringTag) {
-  has = callBound('Object.prototype.hasOwnProperty');
-  $exec = callBound('RegExp.prototype.exec');
-  isRegexMarker = {};
+    return x instanceof WeakSet; // core-js workaround, pre-v2.5.0
+  } catch (e) {}
 
-  var throwRegexMarker = function () {
-    throw isRegexMarker;
-  };
+  return false;
+}
 
-  badStringifier = {
-    toString: throwRegexMarker,
-    valueOf: throwRegexMarker
-  };
+function isElement(x) {
+  if (!x || typeof x !== 'object') {
+    return false;
+  }
 
-  if (typeof Symbol.toPrimitive === 'symbol') {
-    badStringifier[Symbol.toPrimitive] = throwRegexMarker;
+  if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {
+    return true;
   }
-}
 
-var $toString = callBound('Object.prototype.toString');
-var gOPD = Object.getOwnPropertyDescriptor;
-var regexClass = '[object RegExp]';
-module.exports = hasToStringTag // eslint-disable-next-line consistent-return
-? function isRegex(value) {
-  if (!value || typeof value !== 'object') {
-    return false;
-  }
+  return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';
+}
 
-  var descriptor = gOPD(value, 'lastIndex');
-  var hasLastIndexDataProperty = descriptor && has(descriptor, 'value');
+function inspectString(str, opts) {
+  if (str.length > opts.maxStringLength) {
+    var remaining = str.length - opts.maxStringLength;
+    var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');
+    return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;
+  } // eslint-disable-next-line no-control-regex
 
-  if (!hasLastIndexDataProperty) {
-    return false;
-  }
 
-  try {
-    $exec(value, badStringifier);
-  } catch (e) {
-    return e === isRegexMarker;
-  }
-} : function isRegex(value) {
-  // In older browsers, typeof regex incorrectly returns 'function'
-  if (!value || typeof value !== 'object' && typeof value !== 'function') {
-    return false;
+  var s = $replace.call($replace.call(str, /(['\\])/g, '\\$1'), /[\x00-\x1f]/g, lowbyte);
+  return wrapQuotes(s, 'single', opts);
+}
+
+function lowbyte(c) {
+  var n = c.charCodeAt(0);
+  var x = {
+    8: 'b',
+    9: 't',
+    10: 'n',
+    12: 'f',
+    13: 'r'
+  }[n];
+
+  if (x) {
+    return '\\' + x;
   }
 
-  return $toString(value) === regexClass;
-};
+  return '\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));
+}
 
-/***/ }),
+function markBoxed(str) {
+  return 'Object(' + str + ')';
+}
 
-/***/ "./node_modules/is-set/index.js":
-/*!**************************************!*\
-  !*** ./node_modules/is-set/index.js ***!
-  \**************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+function weakCollectionOf(type) {
+  return type + ' { ? }';
+}
 
-"use strict";
+function collectionOf(type, size, entries, indent) {
+  var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');
+  return type + ' (' + size + ') {' + joinedEntries + '}';
+}
 
+function singleLineValues(xs) {
+  for (var i = 0; i < xs.length; i++) {
+    if (indexOf(xs[i], '\n') >= 0) {
+      return false;
+    }
+  }
 
-var $Map = typeof Map === 'function' && Map.prototype ? Map : null;
-var $Set = typeof Set === 'function' && Set.prototype ? Set : null;
-var exported;
+  return true;
+}
 
-if (!$Set) {
-  // eslint-disable-next-line no-unused-vars
-  exported = function isSet(x) {
-    // `Set` is not present in this environment.
-    return false;
+function getIndent(opts, depth) {
+  var baseIndent;
+
+  if (opts.indent === '\t') {
+    baseIndent = '\t';
+  } else if (typeof opts.indent === 'number' && opts.indent > 0) {
+    baseIndent = $join.call(Array(opts.indent + 1), ' ');
+  } else {
+    return null;
+  }
+
+  return {
+    base: baseIndent,
+    prev: $join.call(Array(depth + 1), baseIndent)
   };
 }
 
-var $mapHas = $Map ? Map.prototype.has : null;
-var $setHas = $Set ? Set.prototype.has : null;
+function indentedJoin(xs, indent) {
+  if (xs.length === 0) {
+    return '';
+  }
 
-if (!exported && !$setHas) {
-  // eslint-disable-next-line no-unused-vars
-  exported = function isSet(x) {
-    // `Set` does not have a `has` method
-    return false;
-  };
+  var lineJoiner = '\n' + indent.prev + indent.base;
+  return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\n' + indent.prev;
 }
 
-module.exports = exported || function isSet(x) {
-  if (!x || typeof x !== 'object') {
-    return false;
+function arrObjKeys(obj, inspect) {
+  var isArr = isArray(obj);
+  var xs = [];
+
+  if (isArr) {
+    xs.length = obj.length;
+
+    for (var i = 0; i < obj.length; i++) {
+      xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';
+    }
   }
 
-  try {
-    $setHas.call(x);
+  var syms = typeof gOPS === 'function' ? gOPS(obj) : [];
+  var symMap;
 
-    if ($mapHas) {
-      try {
-        $mapHas.call(x);
-      } catch (e) {
-        return true;
+  if (hasShammedSymbols) {
+    symMap = {};
+
+    for (var k = 0; k < syms.length; k++) {
+      symMap['$' + syms[k]] = syms[k];
+    }
+  }
+
+  for (var key in obj) {
+    // eslint-disable-line no-restricted-syntax
+    if (!has(obj, key)) {
+      continue;
+    } // eslint-disable-line no-restricted-syntax, no-continue
+
+
+    if (isArr && String(Number(key)) === key && key < obj.length) {
+      continue;
+    } // eslint-disable-line no-restricted-syntax, no-continue
+
+
+    if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {
+      // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section
+      continue; // eslint-disable-line no-restricted-syntax, no-continue
+    } else if ($test.call(/[^\w$]/, key)) {
+      xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));
+    } else {
+      xs.push(key + ': ' + inspect(obj[key], obj));
+    }
+  }
+
+  if (typeof gOPS === 'function') {
+    for (var j = 0; j < syms.length; j++) {
+      if (isEnumerable.call(obj, syms[j])) {
+        xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));
       }
     }
+  }
 
-    return x instanceof $Set; // core-js workaround, pre-v2.5.0
-  } catch (e) {}
+  return xs;
+}
 
-  return false;
-};
+/***/ }),
+
+/***/ "./node_modules/object-inspect/util.inspect.js":
+/*!*****************************************************!*\
+  !*** ./node_modules/object-inspect/util.inspect.js ***!
+  \*****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+module.exports = __webpack_require__(/*! util */ "util").inspect;
 
 /***/ }),
 
-/***/ "./node_modules/is-string/index.js":
-/*!*****************************************!*\
-  !*** ./node_modules/is-string/index.js ***!
-  \*****************************************/
+/***/ "./node_modules/object-is/implementation.js":
+/*!**************************************************!*\
+  !*** ./node_modules/object-is/implementation.js ***!
+  \**************************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
 
 
-var strValue = String.prototype.valueOf;
-
-var tryStringObject = function tryStringObject(value) {
-  try {
-    strValue.call(value);
-    return true;
-  } catch (e) {
-    return false;
-  }
+var numberIsNaN = function (value) {
+  return value !== value;
 };
 
-var toStr = Object.prototype.toString;
-var strClass = '[object String]';
-var hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag;
+module.exports = function is(a, b) {
+  if (a === 0 && b === 0) {
+    return 1 / a === 1 / b;
+  }
 
-module.exports = function isString(value) {
-  if (typeof value === 'string') {
+  if (a === b) {
     return true;
   }
 
-  if (typeof value !== 'object') {
-    return false;
+  if (numberIsNaN(a) && numberIsNaN(b)) {
+    return true;
   }
 
-  return hasToStringTag ? tryStringObject(value) : toStr.call(value) === strClass;
+  return false;
 };
 
 /***/ }),
 
-/***/ "./node_modules/is-symbol/index.js":
+/***/ "./node_modules/object-is/index.js":
 /*!*****************************************!*\
-  !*** ./node_modules/is-symbol/index.js ***!
+  !*** ./node_modules/object-is/index.js ***!
   \*****************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
@@ -40322,1643 +39421,1121 @@ module.exports = function isString(value) {
 "use strict";
 
 
-var toStr = Object.prototype.toString;
+var define = __webpack_require__(/*! define-properties */ "./node_modules/define-properties/index.js");
 
-var hasSymbols = __webpack_require__(/*! has-symbols */ "./node_modules/has-symbols/index.js")();
+var callBind = __webpack_require__(/*! call-bind */ "./node_modules/call-bind/index.js");
 
-if (hasSymbols) {
-  var symToStr = Symbol.prototype.toString;
-  var symStringRegex = /^Symbol\(.*\)$/;
+var implementation = __webpack_require__(/*! ./implementation */ "./node_modules/object-is/implementation.js");
 
-  var isSymbolObject = function isRealSymbolObject(value) {
-    if (typeof value.valueOf() !== 'symbol') {
-      return false;
-    }
+var getPolyfill = __webpack_require__(/*! ./polyfill */ "./node_modules/object-is/polyfill.js");
 
-    return symStringRegex.test(symToStr.call(value));
-  };
+var shim = __webpack_require__(/*! ./shim */ "./node_modules/object-is/shim.js");
 
-  module.exports = function isSymbol(value) {
-    if (typeof value === 'symbol') {
-      return true;
-    }
+var polyfill = callBind(getPolyfill(), Object);
+define(polyfill, {
+  getPolyfill: getPolyfill,
+  implementation: implementation,
+  shim: shim
+});
+module.exports = polyfill;
 
-    if (toStr.call(value) !== '[object Symbol]') {
-      return false;
-    }
+/***/ }),
 
-    try {
-      return isSymbolObject(value);
-    } catch (e) {
-      return false;
-    }
-  };
-} else {
-  module.exports = function isSymbol(value) {
-    // this environment does not support Symbols.
-    return  false && false;
-  };
-}
+/***/ "./node_modules/object-is/polyfill.js":
+/*!********************************************!*\
+  !*** ./node_modules/object-is/polyfill.js ***!
+  \********************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+
+var implementation = __webpack_require__(/*! ./implementation */ "./node_modules/object-is/implementation.js");
+
+module.exports = function getPolyfill() {
+  return typeof Object.is === 'function' ? Object.is : implementation;
+};
 
 /***/ }),
 
-/***/ "./node_modules/is-typed-array/index.js":
-/*!**********************************************!*\
-  !*** ./node_modules/is-typed-array/index.js ***!
-  \**********************************************/
+/***/ "./node_modules/object-is/shim.js":
+/*!****************************************!*\
+  !*** ./node_modules/object-is/shim.js ***!
+  \****************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
 
 
-var forEach = __webpack_require__(/*! foreach */ "./node_modules/foreach/index.js");
+var getPolyfill = __webpack_require__(/*! ./polyfill */ "./node_modules/object-is/polyfill.js");
 
-var availableTypedArrays = __webpack_require__(/*! available-typed-arrays */ "./node_modules/available-typed-arrays/index.js");
+var define = __webpack_require__(/*! define-properties */ "./node_modules/define-properties/index.js");
 
-var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
+module.exports = function shimObjectIs() {
+  var polyfill = getPolyfill();
+  define(Object, {
+    is: polyfill
+  }, {
+    is: function testObjectIs() {
+      return Object.is !== polyfill;
+    }
+  });
+  return polyfill;
+};
 
-var $toString = callBound('Object.prototype.toString');
+/***/ }),
 
-var hasSymbols = __webpack_require__(/*! has-symbols */ "./node_modules/has-symbols/index.js")();
+/***/ "./node_modules/object-keys/implementation.js":
+/*!****************************************************!*\
+  !*** ./node_modules/object-keys/implementation.js ***!
+  \****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-var hasToStringTag = hasSymbols && typeof Symbol.toStringTag === 'symbol';
-var typedArrays = availableTypedArrays();
+"use strict";
 
-var $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {
-  for (var i = 0; i < array.length; i += 1) {
-    if (array[i] === value) {
-      return i;
-    }
-  }
 
-  return -1;
-};
+var keysShim;
 
-var $slice = callBound('String.prototype.slice');
-var toStrTags = {};
+if (!Object.keys) {
+  // modified from https://github.com/es-shims/es5-shim
+  var has = Object.prototype.hasOwnProperty;
+  var toStr = Object.prototype.toString;
 
-var gOPD = __webpack_require__(/*! es-abstract/helpers/getOwnPropertyDescriptor */ "./node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js");
+  var isArgs = __webpack_require__(/*! ./isArguments */ "./node_modules/object-keys/isArguments.js"); // eslint-disable-line global-require
 
-var getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');
 
-if (hasToStringTag && gOPD && getPrototypeOf) {
-  forEach(typedArrays, function (typedArray) {
-    var arr = new global[typedArray]();
+  var isEnumerable = Object.prototype.propertyIsEnumerable;
+  var hasDontEnumBug = !isEnumerable.call({
+    toString: null
+  }, 'toString');
+  var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');
+  var dontEnums = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor'];
 
-    if (!(Symbol.toStringTag in arr)) {
-      throw new EvalError('this engine has support for Symbol.toStringTag, but ' + typedArray + ' does not have the property! Please report this.');
-    }
+  var equalsConstructorPrototype = function (o) {
+    var ctor = o.constructor;
+    return ctor && ctor.prototype === o;
+  };
 
-    var proto = getPrototypeOf(arr);
-    var descriptor = gOPD(proto, Symbol.toStringTag);
+  var excludedKeys = {
+    $applicationCache: true,
+    $console: true,
+    $external: true,
+    $frame: true,
+    $frameElement: true,
+    $frames: true,
+    $innerHeight: true,
+    $innerWidth: true,
+    $onmozfullscreenchange: true,
+    $onmozfullscreenerror: true,
+    $outerHeight: true,
+    $outerWidth: true,
+    $pageXOffset: true,
+    $pageYOffset: true,
+    $parent: true,
+    $scrollLeft: true,
+    $scrollTop: true,
+    $scrollX: true,
+    $scrollY: true,
+    $self: true,
+    $webkitIndexedDB: true,
+    $webkitStorageInfo: true,
+    $window: true
+  };
 
-    if (!descriptor) {
-      var superProto = getPrototypeOf(proto);
-      descriptor = gOPD(superProto, Symbol.toStringTag);
+  var hasAutomationEqualityBug = function () {
+    /* global window */
+    if (typeof window === 'undefined') {
+      return false;
     }
 
-    toStrTags[typedArray] = descriptor.get;
-  });
-}
-
-var tryTypedArrays = function tryAllTypedArrays(value) {
-  var anyTrue = false;
-  forEach(toStrTags, function (getter, typedArray) {
-    if (!anyTrue) {
+    for (var k in window) {
       try {
-        anyTrue = getter.call(value) === typedArray;
+        if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {
+          try {
+            equalsConstructorPrototype(window[k]);
+          } catch (e) {
+            return true;
+          }
+        }
       } catch (e) {
-        /**/
+        return true;
       }
     }
-  });
-  return anyTrue;
-};
-
-module.exports = function isTypedArray(value) {
-  if (!value || typeof value !== 'object') {
-    return false;
-  }
-
-  if (!hasToStringTag) {
-    var tag = $slice($toString(value), 8, -1);
-    return $indexOf(typedArrays, tag) > -1;
-  }
 
-  if (!gOPD) {
     return false;
-  }
-
-  return tryTypedArrays(value);
-};
-
-/***/ }),
-
-/***/ "./node_modules/is-weakmap/index.js":
-/*!******************************************!*\
-  !*** ./node_modules/is-weakmap/index.js ***!
-  \******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+  }();
 
-"use strict";
+  var equalsConstructorPrototypeIfNotBuggy = function (o) {
+    /* global window */
+    if (typeof window === 'undefined' || !hasAutomationEqualityBug) {
+      return equalsConstructorPrototype(o);
+    }
 
+    try {
+      return equalsConstructorPrototype(o);
+    } catch (e) {
+      return false;
+    }
+  };
 
-var $WeakMap = typeof WeakMap === 'function' && WeakMap.prototype ? WeakMap : null;
-var $WeakSet = typeof WeakSet === 'function' && WeakSet.prototype ? WeakSet : null;
-var exported;
+  keysShim = function keys(object) {
+    var isObject = object !== null && typeof object === 'object';
+    var isFunction = toStr.call(object) === '[object Function]';
+    var isArguments = isArgs(object);
+    var isString = isObject && toStr.call(object) === '[object String]';
+    var theKeys = [];
 
-if (!$WeakMap) {
-  // eslint-disable-next-line no-unused-vars
-  exported = function isWeakMap(x) {
-    // `WeakMap` is not present in this environment.
-    return false;
-  };
-}
+    if (!isObject && !isFunction && !isArguments) {
+      throw new TypeError('Object.keys called on a non-object');
+    }
 
-var $mapHas = $WeakMap ? $WeakMap.prototype.has : null;
-var $setHas = $WeakSet ? $WeakSet.prototype.has : null;
+    var skipProto = hasProtoEnumBug && isFunction;
 
-if (!exported && !$mapHas) {
-  // eslint-disable-next-line no-unused-vars
-  exported = function isWeakMap(x) {
-    // `WeakMap` does not have a `has` method
-    return false;
-  };
-}
+    if (isString && object.length > 0 && !has.call(object, 0)) {
+      for (var i = 0; i < object.length; ++i) {
+        theKeys.push(String(i));
+      }
+    }
 
-module.exports = exported || function isWeakMap(x) {
-  if (!x || typeof x !== 'object') {
-    return false;
-  }
+    if (isArguments && object.length > 0) {
+      for (var j = 0; j < object.length; ++j) {
+        theKeys.push(String(j));
+      }
+    } else {
+      for (var name in object) {
+        if (!(skipProto && name === 'prototype') && has.call(object, name)) {
+          theKeys.push(String(name));
+        }
+      }
+    }
 
-  try {
-    $mapHas.call(x, $mapHas);
+    if (hasDontEnumBug) {
+      var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);
 
-    if ($setHas) {
-      try {
-        $setHas.call(x, $setHas);
-      } catch (e) {
-        return true;
+      for (var k = 0; k < dontEnums.length; ++k) {
+        if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {
+          theKeys.push(dontEnums[k]);
+        }
       }
     }
 
-    return x instanceof $WeakMap; // core-js workaround, pre-v3
-  } catch (e) {}
+    return theKeys;
+  };
+}
 
-  return false;
-};
+module.exports = keysShim;
 
 /***/ }),
 
-/***/ "./node_modules/is-weakset/index.js":
-/*!******************************************!*\
-  !*** ./node_modules/is-weakset/index.js ***!
-  \******************************************/
+/***/ "./node_modules/object-keys/index.js":
+/*!*******************************************!*\
+  !*** ./node_modules/object-keys/index.js ***!
+  \*******************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
 
 
-var $WeakMap = typeof WeakMap === 'function' && WeakMap.prototype ? WeakMap : null;
-var $WeakSet = typeof WeakSet === 'function' && WeakSet.prototype ? WeakSet : null;
-var exported;
+var slice = Array.prototype.slice;
 
-if (!$WeakMap) {
-  // eslint-disable-next-line no-unused-vars
-  exported = function isWeakSet(x) {
-    // `WeakSet` is not present in this environment.
-    return false;
-  };
-}
-
-var $mapHas = $WeakMap ? $WeakMap.prototype.has : null;
-var $setHas = $WeakSet ? $WeakSet.prototype.has : null;
+var isArgs = __webpack_require__(/*! ./isArguments */ "./node_modules/object-keys/isArguments.js");
 
-if (!exported && !$setHas) {
-  // eslint-disable-next-line no-unused-vars
-  module.exports = function isWeakSet(x) {
-    // `WeakSet` does not have a `has` method
-    return false;
-  };
-}
+var origKeys = Object.keys;
+var keysShim = origKeys ? function keys(o) {
+  return origKeys(o);
+} : __webpack_require__(/*! ./implementation */ "./node_modules/object-keys/implementation.js");
+var originalKeys = Object.keys;
 
-module.exports = exported || function isWeakSet(x) {
-  if (!x || typeof x !== 'object') {
-    return false;
-  }
+keysShim.shim = function shimObjectKeys() {
+  if (Object.keys) {
+    var keysWorksWithArguments = function () {
+      // Safari 5.0 bug
+      var args = Object.keys(arguments);
+      return args && args.length === arguments.length;
+    }(1, 2);
 
-  try {
-    $setHas.call(x, $setHas);
+    if (!keysWorksWithArguments) {
+      Object.keys = function keys(object) {
+        // eslint-disable-line func-name-matching
+        if (isArgs(object)) {
+          return originalKeys(slice.call(object));
+        }
 
-    if ($mapHas) {
-      try {
-        $mapHas.call(x, $mapHas);
-      } catch (e) {
-        return true;
-      }
+        return originalKeys(object);
+      };
     }
+  } else {
+    Object.keys = keysShim;
+  }
 
-    return x instanceof $WeakSet; // core-js workaround, pre-v3
-  } catch (e) {}
-
-  return false;
+  return Object.keys || keysShim;
 };
 
+module.exports = keysShim;
+
 /***/ }),
 
-/***/ "./node_modules/locale-currency/index.js":
-/*!***********************************************!*\
-  !*** ./node_modules/locale-currency/index.js ***!
-  \***********************************************/
+/***/ "./node_modules/object-keys/isArguments.js":
+/*!*************************************************!*\
+  !*** ./node_modules/object-keys/isArguments.js ***!
+  \*************************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-var map = __webpack_require__(/*! ./map */ "./node_modules/locale-currency/map.js");
+"use strict";
 
-var getCountryCode = function (localeString) {
-  var components = localeString.split("_");
 
-  if (components.length == 2) {
-    return components.pop();
-  }
+var toStr = Object.prototype.toString;
 
-  components = localeString.split("-");
+module.exports = function isArguments(value) {
+  var str = toStr.call(value);
+  var isArgs = str === '[object Arguments]';
 
-  if (components.length == 2) {
-    return components.pop();
+  if (!isArgs) {
+    isArgs = str !== '[object Array]' && value !== null && typeof value === 'object' && typeof value.length === 'number' && value.length >= 0 && toStr.call(value.callee) === '[object Function]';
   }
 
-  return localeString;
+  return isArgs;
 };
 
-exports.getCurrency = function (locale) {
-  var countryCode = getCountryCode(locale).toUpperCase();
+/***/ }),
 
-  if (countryCode in map) {
-    return map[countryCode];
-  }
+/***/ "./node_modules/object.assign/implementation.js":
+/*!******************************************************!*\
+  !*** ./node_modules/object.assign/implementation.js ***!
+  \******************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-  return null;
+"use strict";
+ // modified from https://github.com/es-shims/es6-shim
+
+var keys = __webpack_require__(/*! object-keys */ "./node_modules/object-keys/index.js");
+
+var canBeObject = function (obj) {
+  return typeof obj !== 'undefined' && obj !== null;
 };
 
-exports.getLocales = function (currencyCode) {
-  currencyCode = currencyCode.toUpperCase();
-  var locales = [];
+var hasSymbols = __webpack_require__(/*! has-symbols/shams */ "./node_modules/has-symbols/shams.js")();
 
-  for (countryCode in map) {
-    if (map[countryCode] === currencyCode) {
-      locales.push(countryCode);
+var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
+
+var toObject = Object;
+var $push = callBound('Array.prototype.push');
+var $propIsEnumerable = callBound('Object.prototype.propertyIsEnumerable');
+var originalGetSymbols = hasSymbols ? Object.getOwnPropertySymbols : null; // eslint-disable-next-line no-unused-vars
+
+module.exports = function assign(target, source1) {
+  if (!canBeObject(target)) {
+    throw new TypeError('target must be an object');
+  }
+
+  var objTarget = toObject(target);
+  var s, source, i, props, syms, value, key;
+
+  for (s = 1; s < arguments.length; ++s) {
+    source = toObject(arguments[s]);
+    props = keys(source);
+    var getSymbols = hasSymbols && (Object.getOwnPropertySymbols || originalGetSymbols);
+
+    if (getSymbols) {
+      syms = getSymbols(source);
+
+      for (i = 0; i < syms.length; ++i) {
+        key = syms[i];
+
+        if ($propIsEnumerable(source, key)) {
+          $push(props, key);
+        }
+      }
+    }
+
+    for (i = 0; i < props.length; ++i) {
+      key = props[i];
+      value = source[key];
+
+      if ($propIsEnumerable(source, key)) {
+        objTarget[key] = value;
+      }
     }
   }
 
-  return locales;
+  return objTarget;
 };
 
 /***/ }),
 
-/***/ "./node_modules/locale-currency/map.js":
+/***/ "./node_modules/object.assign/index.js":
 /*!*********************************************!*\
-  !*** ./node_modules/locale-currency/map.js ***!
+  !*** ./node_modules/object.assign/index.js ***!
   \*********************************************/
 /*! no static exports found */
-/***/ (function(module, exports) {
+/***/ (function(module, exports, __webpack_require__) {
 
-// Generated using ShowCurrencies.java
-var map = {
-  AD: 'EUR',
-  AE: 'AED',
-  AF: 'AFN',
-  AG: 'XCD',
-  AI: 'XCD',
-  AL: 'ALL',
-  AM: 'AMD',
-  AN: 'ANG',
-  AO: 'AOA',
-  AR: 'ARS',
-  AS: 'USD',
-  AT: 'EUR',
-  AU: 'AUD',
-  AW: 'AWG',
-  AX: 'EUR',
-  AZ: 'AZN',
-  BA: 'BAM',
-  BB: 'BBD',
-  BD: 'BDT',
-  BE: 'EUR',
-  BF: 'XOF',
-  BG: 'BGN',
-  BH: 'BHD',
-  BI: 'BIF',
-  BJ: 'XOF',
-  BL: 'EUR',
-  BM: 'BMD',
-  BN: 'BND',
-  BO: 'BOB',
-  BQ: 'USD',
-  BR: 'BRL',
-  BS: 'BSD',
-  BT: 'BTN',
-  BV: 'NOK',
-  BW: 'BWP',
-  BY: 'BYR',
-  BZ: 'BZD',
-  CA: 'CAD',
-  CC: 'AUD',
-  CD: 'CDF',
-  CF: 'XAF',
-  CG: 'XAF',
-  CH: 'CHF',
-  CI: 'XOF',
-  CK: 'NZD',
-  CL: 'CLP',
-  CM: 'XAF',
-  CN: 'CNY',
-  CO: 'COP',
-  CR: 'CRC',
-  CU: 'CUP',
-  CV: 'CVE',
-  CW: 'ANG',
-  CX: 'AUD',
-  CY: 'EUR',
-  CZ: 'CZK',
-  DE: 'EUR',
-  DJ: 'DJF',
-  DK: 'DKK',
-  DM: 'XCD',
-  DO: 'DOP',
-  DZ: 'DZD',
-  EC: 'USD',
-  EE: 'EUR',
-  EG: 'EGP',
-  EH: 'MAD',
-  ER: 'ERN',
-  ES: 'EUR',
-  ET: 'ETB',
-  FI: 'EUR',
-  FJ: 'FJD',
-  FK: 'FKP',
-  FM: 'USD',
-  FO: 'DKK',
-  FR: 'EUR',
-  GA: 'XAF',
-  GB: 'GBP',
-  GD: 'XCD',
-  GE: 'GEL',
-  GF: 'EUR',
-  GG: 'GBP',
-  GH: 'GHS',
-  GI: 'GIP',
-  GL: 'DKK',
-  GM: 'GMD',
-  GN: 'GNF',
-  GP: 'EUR',
-  GQ: 'XAF',
-  GR: 'EUR',
-  GS: 'GBP',
-  GT: 'GTQ',
-  GU: 'USD',
-  GW: 'XOF',
-  GY: 'GYD',
-  HK: 'HKD',
-  HM: 'AUD',
-  HN: 'HNL',
-  HR: 'HRK',
-  HT: 'HTG',
-  HU: 'HUF',
-  ID: 'IDR',
-  IE: 'EUR',
-  IL: 'ILS',
-  IM: 'GBP',
-  IN: 'INR',
-  IO: 'USD',
-  IQ: 'IQD',
-  IR: 'IRR',
-  IS: 'ISK',
-  IT: 'EUR',
-  JE: 'GBP',
-  JM: 'JMD',
-  JO: 'JOD',
-  JP: 'JPY',
-  KE: 'KES',
-  KG: 'KGS',
-  KH: 'KHR',
-  KI: 'AUD',
-  KM: 'KMF',
-  KN: 'XCD',
-  KP: 'KPW',
-  KR: 'KRW',
-  KW: 'KWD',
-  KY: 'KYD',
-  KZ: 'KZT',
-  LA: 'LAK',
-  LB: 'LBP',
-  LC: 'XCD',
-  LI: 'CHF',
-  LK: 'LKR',
-  LR: 'LRD',
-  LS: 'LSL',
-  LT: 'LTL',
-  LU: 'EUR',
-  LV: 'LVL',
-  LY: 'LYD',
-  MA: 'MAD',
-  MC: 'EUR',
-  MD: 'MDL',
-  ME: 'EUR',
-  MF: 'EUR',
-  MG: 'MGA',
-  MH: 'USD',
-  MK: 'MKD',
-  ML: 'XOF',
-  MM: 'MMK',
-  MN: 'MNT',
-  MO: 'MOP',
-  MP: 'USD',
-  MQ: 'EUR',
-  MR: 'MRO',
-  MS: 'XCD',
-  MT: 'EUR',
-  MU: 'MUR',
-  MV: 'MVR',
-  MW: 'MWK',
-  MX: 'MXN',
-  MY: 'MYR',
-  MZ: 'MZN',
-  NA: 'NAD',
-  NC: 'XPF',
-  NE: 'XOF',
-  NF: 'AUD',
-  NG: 'NGN',
-  NI: 'NIO',
-  NL: 'EUR',
-  NO: 'NOK',
-  NP: 'NPR',
-  NR: 'AUD',
-  NU: 'NZD',
-  NZ: 'NZD',
-  OM: 'OMR',
-  PA: 'PAB',
-  PE: 'PEN',
-  PF: 'XPF',
-  PG: 'PGK',
-  PH: 'PHP',
-  PK: 'PKR',
-  PL: 'PLN',
-  PM: 'EUR',
-  PN: 'NZD',
-  PR: 'USD',
-  PS: 'ILS',
-  PT: 'EUR',
-  PW: 'USD',
-  PY: 'PYG',
-  QA: 'QAR',
-  RE: 'EUR',
-  RO: 'RON',
-  RS: 'RSD',
-  RU: 'RUB',
-  RW: 'RWF',
-  SA: 'SAR',
-  SB: 'SBD',
-  SC: 'SCR',
-  SD: 'SDG',
-  SE: 'SEK',
-  SG: 'SGD',
-  SH: 'SHP',
-  SI: 'EUR',
-  SJ: 'NOK',
-  SK: 'EUR',
-  SL: 'SLL',
-  SM: 'EUR',
-  SN: 'XOF',
-  SO: 'SOS',
-  SR: 'SRD',
-  ST: 'STD',
-  SV: 'SVC',
-  SX: 'ANG',
-  SY: 'SYP',
-  SZ: 'SZL',
-  TC: 'USD',
-  TD: 'XAF',
-  TF: 'EUR',
-  TG: 'XOF',
-  TH: 'THB',
-  TJ: 'TJS',
-  TK: 'NZD',
-  TL: 'USD',
-  TM: 'TMT',
-  TN: 'TND',
-  TO: 'TOP',
-  TR: 'TRY',
-  TT: 'TTD',
-  TV: 'AUD',
-  TW: 'TWD',
-  TZ: 'TZS',
-  UA: 'UAH',
-  UG: 'UGX',
-  UM: 'USD',
-  US: 'USD',
-  UY: 'UYU',
-  UZ: 'UZS',
-  VA: 'EUR',
-  VC: 'XCD',
-  VE: 'VEF',
-  VG: 'USD',
-  VI: 'USD',
-  VN: 'VND',
-  VU: 'VUV',
-  WF: 'XPF',
-  WS: 'WST',
-  YE: 'YER',
-  YT: 'EUR',
-  ZA: 'ZAR',
-  ZM: 'ZMK',
-  ZW: 'ZWL'
+"use strict";
+
+
+var defineProperties = __webpack_require__(/*! define-properties */ "./node_modules/define-properties/index.js");
+
+var callBind = __webpack_require__(/*! call-bind */ "./node_modules/call-bind/index.js");
+
+var implementation = __webpack_require__(/*! ./implementation */ "./node_modules/object.assign/implementation.js");
+
+var getPolyfill = __webpack_require__(/*! ./polyfill */ "./node_modules/object.assign/polyfill.js");
+
+var shim = __webpack_require__(/*! ./shim */ "./node_modules/object.assign/shim.js");
+
+var polyfill = callBind.apply(getPolyfill()); // eslint-disable-next-line no-unused-vars
+
+var bound = function assign(target, source1) {
+  return polyfill(Object, arguments);
 };
-module.exports = map;
+
+defineProperties(bound, {
+  getPolyfill: getPolyfill,
+  implementation: implementation,
+  shim: shim
+});
+module.exports = bound;
 
 /***/ }),
 
-/***/ "./node_modules/md5/md5.js":
-/*!*********************************!*\
-  !*** ./node_modules/md5/md5.js ***!
-  \*********************************/
+/***/ "./node_modules/object.assign/polyfill.js":
+/*!************************************************!*\
+  !*** ./node_modules/object.assign/polyfill.js ***!
+  \************************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-(function () {
-  var crypt = __webpack_require__(/*! crypt */ "./node_modules/crypt/crypt.js"),
-      utf8 = __webpack_require__(/*! charenc */ "./node_modules/charenc/charenc.js").utf8,
-      isBuffer = __webpack_require__(/*! is-buffer */ "./node_modules/is-buffer/index.js"),
-      bin = __webpack_require__(/*! charenc */ "./node_modules/charenc/charenc.js").bin,
-      // The core
-  md5 = function (message, options) {
-    // Convert to byte array
-    if (message.constructor == String) {
-      if (options && options.encoding === 'binary') message = bin.stringToBytes(message);else message = utf8.stringToBytes(message);
-    } else if (isBuffer(message)) message = Array.prototype.slice.call(message, 0);else if (!Array.isArray(message) && message.constructor !== Uint8Array) message = message.toString(); // else, assume byte array already
+"use strict";
 
-    var m = crypt.bytesToWords(message),
-        l = message.length * 8,
-        a = 1732584193,
-        b = -271733879,
-        c = -1732584194,
-        d = 271733878; // Swap endian
 
-    for (var i = 0; i < m.length; i++) {
-      m[i] = (m[i] << 8 | m[i] >>> 24) & 0x00FF00FF | (m[i] << 24 | m[i] >>> 8) & 0xFF00FF00;
-    } // Padding
+var implementation = __webpack_require__(/*! ./implementation */ "./node_modules/object.assign/implementation.js");
 
+var lacksProperEnumerationOrder = function () {
+  if (!Object.assign) {
+    return false;
+  }
+  /*
+   * v8, specifically in node 4.x, has a bug with incorrect property enumeration order
+   * note: this does not detect the bug unless there's 20 characters
+   */
 
-    m[l >>> 5] |= 0x80 << l % 32;
-    m[(l + 64 >>> 9 << 4) + 14] = l; // Method shortcuts
 
-    var FF = md5._ff,
-        GG = md5._gg,
-        HH = md5._hh,
-        II = md5._ii;
+  var str = 'abcdefghijklmnopqrst';
+  var letters = str.split('');
+  var map = {};
 
-    for (var i = 0; i < m.length; i += 16) {
-      var aa = a,
-          bb = b,
-          cc = c,
-          dd = d;
-      a = FF(a, b, c, d, m[i + 0], 7, -680876936);
-      d = FF(d, a, b, c, m[i + 1], 12, -389564586);
-      c = FF(c, d, a, b, m[i + 2], 17, 606105819);
-      b = FF(b, c, d, a, m[i + 3], 22, -1044525330);
-      a = FF(a, b, c, d, m[i + 4], 7, -176418897);
-      d = FF(d, a, b, c, m[i + 5], 12, 1200080426);
-      c = FF(c, d, a, b, m[i + 6], 17, -1473231341);
-      b = FF(b, c, d, a, m[i + 7], 22, -45705983);
-      a = FF(a, b, c, d, m[i + 8], 7, 1770035416);
-      d = FF(d, a, b, c, m[i + 9], 12, -1958414417);
-      c = FF(c, d, a, b, m[i + 10], 17, -42063);
-      b = FF(b, c, d, a, m[i + 11], 22, -1990404162);
-      a = FF(a, b, c, d, m[i + 12], 7, 1804603682);
-      d = FF(d, a, b, c, m[i + 13], 12, -40341101);
-      c = FF(c, d, a, b, m[i + 14], 17, -1502002290);
-      b = FF(b, c, d, a, m[i + 15], 22, 1236535329);
-      a = GG(a, b, c, d, m[i + 1], 5, -165796510);
-      d = GG(d, a, b, c, m[i + 6], 9, -1069501632);
-      c = GG(c, d, a, b, m[i + 11], 14, 643717713);
-      b = GG(b, c, d, a, m[i + 0], 20, -373897302);
-      a = GG(a, b, c, d, m[i + 5], 5, -701558691);
-      d = GG(d, a, b, c, m[i + 10], 9, 38016083);
-      c = GG(c, d, a, b, m[i + 15], 14, -660478335);
-      b = GG(b, c, d, a, m[i + 4], 20, -405537848);
-      a = GG(a, b, c, d, m[i + 9], 5, 568446438);
-      d = GG(d, a, b, c, m[i + 14], 9, -1019803690);
-      c = GG(c, d, a, b, m[i + 3], 14, -187363961);
-      b = GG(b, c, d, a, m[i + 8], 20, 1163531501);
-      a = GG(a, b, c, d, m[i + 13], 5, -1444681467);
-      d = GG(d, a, b, c, m[i + 2], 9, -51403784);
-      c = GG(c, d, a, b, m[i + 7], 14, 1735328473);
-      b = GG(b, c, d, a, m[i + 12], 20, -1926607734);
-      a = HH(a, b, c, d, m[i + 5], 4, -378558);
-      d = HH(d, a, b, c, m[i + 8], 11, -2022574463);
-      c = HH(c, d, a, b, m[i + 11], 16, 1839030562);
-      b = HH(b, c, d, a, m[i + 14], 23, -35309556);
-      a = HH(a, b, c, d, m[i + 1], 4, -1530992060);
-      d = HH(d, a, b, c, m[i + 4], 11, 1272893353);
-      c = HH(c, d, a, b, m[i + 7], 16, -155497632);
-      b = HH(b, c, d, a, m[i + 10], 23, -1094730640);
-      a = HH(a, b, c, d, m[i + 13], 4, 681279174);
-      d = HH(d, a, b, c, m[i + 0], 11, -358537222);
-      c = HH(c, d, a, b, m[i + 3], 16, -722521979);
-      b = HH(b, c, d, a, m[i + 6], 23, 76029189);
-      a = HH(a, b, c, d, m[i + 9], 4, -640364487);
-      d = HH(d, a, b, c, m[i + 12], 11, -421815835);
-      c = HH(c, d, a, b, m[i + 15], 16, 530742520);
-      b = HH(b, c, d, a, m[i + 2], 23, -995338651);
-      a = II(a, b, c, d, m[i + 0], 6, -198630844);
-      d = II(d, a, b, c, m[i + 7], 10, 1126891415);
-      c = II(c, d, a, b, m[i + 14], 15, -1416354905);
-      b = II(b, c, d, a, m[i + 5], 21, -57434055);
-      a = II(a, b, c, d, m[i + 12], 6, 1700485571);
-      d = II(d, a, b, c, m[i + 3], 10, -1894986606);
-      c = II(c, d, a, b, m[i + 10], 15, -1051523);
-      b = II(b, c, d, a, m[i + 1], 21, -2054922799);
-      a = II(a, b, c, d, m[i + 8], 6, 1873313359);
-      d = II(d, a, b, c, m[i + 15], 10, -30611744);
-      c = II(c, d, a, b, m[i + 6], 15, -1560198380);
-      b = II(b, c, d, a, m[i + 13], 21, 1309151649);
-      a = II(a, b, c, d, m[i + 4], 6, -145523070);
-      d = II(d, a, b, c, m[i + 11], 10, -1120210379);
-      c = II(c, d, a, b, m[i + 2], 15, 718787259);
-      b = II(b, c, d, a, m[i + 9], 21, -343485551);
-      a = a + aa >>> 0;
-      b = b + bb >>> 0;
-      c = c + cc >>> 0;
-      d = d + dd >>> 0;
-    }
+  for (var i = 0; i < letters.length; ++i) {
+    map[letters[i]] = letters[i];
+  }
 
-    return crypt.endian([a, b, c, d]);
-  }; // Auxiliary functions
+  var obj = Object.assign({}, map);
+  var actual = '';
 
+  for (var k in obj) {
+    actual += k;
+  }
 
-  md5._ff = function (a, b, c, d, x, s, t) {
-    var n = a + (b & c | ~b & d) + (x >>> 0) + t;
-    return (n << s | n >>> 32 - s) + b;
-  };
+  return str !== actual;
+};
 
-  md5._gg = function (a, b, c, d, x, s, t) {
-    var n = a + (b & d | c & ~d) + (x >>> 0) + t;
-    return (n << s | n >>> 32 - s) + b;
-  };
+var assignHasPendingExceptions = function () {
+  if (!Object.assign || !Object.preventExtensions) {
+    return false;
+  }
+  /*
+   * Firefox 37 still has "pending exception" logic in its Object.assign implementation,
+   * which is 72% slower than our shim, and Firefox 40's native implementation.
+   */
 
-  md5._hh = function (a, b, c, d, x, s, t) {
-    var n = a + (b ^ c ^ d) + (x >>> 0) + t;
-    return (n << s | n >>> 32 - s) + b;
-  };
 
-  md5._ii = function (a, b, c, d, x, s, t) {
-    var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;
-    return (n << s | n >>> 32 - s) + b;
-  }; // Package private blocksize
+  var thrower = Object.preventExtensions({
+    1: 2
+  });
 
+  try {
+    Object.assign(thrower, 'xy');
+  } catch (e) {
+    return thrower[1] === 'y';
+  }
 
-  md5._blocksize = 16;
-  md5._digestsize = 16;
+  return false;
+};
 
-  module.exports = function (message, options) {
-    if (message === undefined || message === null) throw new Error('Illegal argument ' + message);
-    var digestbytes = crypt.wordsToBytes(md5(message, options));
-    return options && options.asBytes ? digestbytes : options && options.asString ? bin.bytesToString(digestbytes) : crypt.bytesToHex(digestbytes);
-  };
-})();
+module.exports = function getPolyfill() {
+  if (!Object.assign) {
+    return implementation;
+  }
 
-/***/ }),
+  if (lacksProperEnumerationOrder()) {
+    return implementation;
+  }
 
-/***/ "./node_modules/memoize-one/dist/memoize-one.esm.js":
-/*!**********************************************************!*\
-  !*** ./node_modules/memoize-one/dist/memoize-one.esm.js ***!
-  \**********************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+  if (assignHasPendingExceptions()) {
+    return implementation;
+  }
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-var simpleIsEqual = function simpleIsEqual(a, b) {
-  return a === b;
+  return Object.assign;
 };
 
-function index(resultFn) {
-  var isEqual = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : simpleIsEqual;
-  var lastThis = void 0;
-  var lastArgs = [];
-  var lastResult = void 0;
-  var calledOnce = false;
+/***/ }),
 
-  var isNewArgEqualToLast = function isNewArgEqualToLast(newArg, index) {
-    return isEqual(newArg, lastArgs[index]);
-  };
+/***/ "./node_modules/object.assign/shim.js":
+/*!********************************************!*\
+  !*** ./node_modules/object.assign/shim.js ***!
+  \********************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-  var result = function result() {
-    for (var _len = arguments.length, newArgs = Array(_len), _key = 0; _key < _len; _key++) {
-      newArgs[_key] = arguments[_key];
-    }
+"use strict";
 
-    if (calledOnce && lastThis === this && newArgs.length === lastArgs.length && newArgs.every(isNewArgEqualToLast)) {
-      return lastResult;
-    }
 
-    calledOnce = true;
-    lastThis = this;
-    lastArgs = newArgs;
-    lastResult = resultFn.apply(this, newArgs);
-    return lastResult;
-  };
+var define = __webpack_require__(/*! define-properties */ "./node_modules/define-properties/index.js");
 
-  return result;
-}
+var getPolyfill = __webpack_require__(/*! ./polyfill */ "./node_modules/object.assign/polyfill.js");
 
-/* harmony default export */ __webpack_exports__["default"] = (index);
+module.exports = function shimAssign() {
+  var polyfill = getPolyfill();
+  define(Object, {
+    assign: polyfill
+  }, {
+    assign: function () {
+      return Object.assign !== polyfill;
+    }
+  });
+  return polyfill;
+};
 
 /***/ }),
 
-/***/ "./node_modules/murmurhash/murmurhash.js":
-/*!***********************************************!*\
-  !*** ./node_modules/murmurhash/murmurhash.js ***!
-  \***********************************************/
+/***/ "./node_modules/regexp.prototype.flags/implementation.js":
+/*!***************************************************************!*\
+  !*** ./node_modules/regexp.prototype.flags/implementation.js ***!
+  \***************************************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-(function () {
-  var _global = this;
-  /**
-   * JS Implementation of MurmurHash2
-   *
-   * @author <a href="mailto:gary.court@gmail.com">Gary Court</a>
-   * @see http://github.com/garycourt/murmurhash-js
-   * @author <a href="mailto:aappleby@gmail.com">Austin Appleby</a>
-   * @see http://sites.google.com/site/murmurhash/
-   *
-   * @param {string} str ASCII only
-   * @param {number} seed Positive integer only
-   * @return {number} 32-bit positive integer hash
-   */
-
-
-  function MurmurHashV2(str, seed) {
-    var l = str.length,
-        h = seed ^ l,
-        i = 0,
-        k;
-
-    while (l >= 4) {
-      k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;
-      k = (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0x5bd1e995 & 0xffff) << 16);
-      k ^= k >>> 24;
-      k = (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0x5bd1e995 & 0xffff) << 16);
-      h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16) ^ k;
-      l -= 4;
-      ++i;
-    }
-
-    switch (l) {
-      case 3:
-        h ^= (str.charCodeAt(i + 2) & 0xff) << 16;
+"use strict";
 
-      case 2:
-        h ^= (str.charCodeAt(i + 1) & 0xff) << 8;
 
-      case 1:
-        h ^= str.charCodeAt(i) & 0xff;
-        h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16);
-    }
+var $Object = Object;
+var $TypeError = TypeError;
 
-    h ^= h >>> 13;
-    h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16);
-    h ^= h >>> 15;
-    return h >>> 0;
+module.exports = function flags() {
+  if (this != null && this !== $Object(this)) {
+    throw new $TypeError('RegExp.prototype.flags getter called on non-object');
   }
 
-  ;
-  /**
-   * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)
-   *
-   * @author <a href="mailto:gary.court@gmail.com">Gary Court</a>
-   * @see http://github.com/garycourt/murmurhash-js
-   * @author <a href="mailto:aappleby@gmail.com">Austin Appleby</a>
-   * @see http://sites.google.com/site/murmurhash/
-   *
-   * @param {string} key ASCII only
-   * @param {number} seed Positive integer only
-   * @return {number} 32-bit positive integer hash
-   */
-
-  function MurmurHashV3(key, seed) {
-    var remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i;
-    remainder = key.length & 3; // key.length % 4
-
-    bytes = key.length - remainder;
-    h1 = seed;
-    c1 = 0xcc9e2d51;
-    c2 = 0x1b873593;
-    i = 0;
+  var result = '';
 
-    while (i < bytes) {
-      k1 = key.charCodeAt(i) & 0xff | (key.charCodeAt(++i) & 0xff) << 8 | (key.charCodeAt(++i) & 0xff) << 16 | (key.charCodeAt(++i) & 0xff) << 24;
-      ++i;
-      k1 = (k1 & 0xffff) * c1 + (((k1 >>> 16) * c1 & 0xffff) << 16) & 0xffffffff;
-      k1 = k1 << 15 | k1 >>> 17;
-      k1 = (k1 & 0xffff) * c2 + (((k1 >>> 16) * c2 & 0xffff) << 16) & 0xffffffff;
-      h1 ^= k1;
-      h1 = h1 << 13 | h1 >>> 19;
-      h1b = (h1 & 0xffff) * 5 + (((h1 >>> 16) * 5 & 0xffff) << 16) & 0xffffffff;
-      h1 = (h1b & 0xffff) + 0x6b64 + (((h1b >>> 16) + 0xe654 & 0xffff) << 16);
-    }
+  if (this.hasIndices) {
+    result += 'd';
+  }
 
-    k1 = 0;
+  if (this.global) {
+    result += 'g';
+  }
 
-    switch (remainder) {
-      case 3:
-        k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;
+  if (this.ignoreCase) {
+    result += 'i';
+  }
 
-      case 2:
-        k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;
+  if (this.multiline) {
+    result += 'm';
+  }
 
-      case 1:
-        k1 ^= key.charCodeAt(i) & 0xff;
-        k1 = (k1 & 0xffff) * c1 + (((k1 >>> 16) * c1 & 0xffff) << 16) & 0xffffffff;
-        k1 = k1 << 15 | k1 >>> 17;
-        k1 = (k1 & 0xffff) * c2 + (((k1 >>> 16) * c2 & 0xffff) << 16) & 0xffffffff;
-        h1 ^= k1;
-    }
+  if (this.dotAll) {
+    result += 's';
+  }
 
-    h1 ^= key.length;
-    h1 ^= h1 >>> 16;
-    h1 = (h1 & 0xffff) * 0x85ebca6b + (((h1 >>> 16) * 0x85ebca6b & 0xffff) << 16) & 0xffffffff;
-    h1 ^= h1 >>> 13;
-    h1 = (h1 & 0xffff) * 0xc2b2ae35 + (((h1 >>> 16) * 0xc2b2ae35 & 0xffff) << 16) & 0xffffffff;
-    h1 ^= h1 >>> 16;
-    return h1 >>> 0;
+  if (this.unicode) {
+    result += 'u';
   }
 
-  var murmur = MurmurHashV3;
-  murmur.v2 = MurmurHashV2;
-  murmur.v3 = MurmurHashV3;
+  if (this.sticky) {
+    result += 'y';
+  }
 
-  if (true) {
-    module.exports = murmur;
-  } else { var _previousRoot; }
-})();
+  return result;
+};
 
 /***/ }),
 
-/***/ "./node_modules/object-assign/index.js":
-/*!*********************************************!*\
-  !*** ./node_modules/object-assign/index.js ***!
-  \*********************************************/
+/***/ "./node_modules/regexp.prototype.flags/index.js":
+/*!******************************************************!*\
+  !*** ./node_modules/regexp.prototype.flags/index.js ***!
+  \******************************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-/*
-object-assign
-(c) Sindre Sorhus
-@license MIT
-*/
-
-/* eslint-disable no-unused-vars */
-
-var getOwnPropertySymbols = Object.getOwnPropertySymbols;
-var hasOwnProperty = Object.prototype.hasOwnProperty;
-var propIsEnumerable = Object.prototype.propertyIsEnumerable;
-
-function toObject(val) {
-  if (val === null || val === undefined) {
-    throw new TypeError('Object.assign cannot be called with null or undefined');
-  }
-
-  return Object(val);
-}
-
-function shouldUseNative() {
-  try {
-    if (!Object.assign) {
-      return false;
-    } // Detect buggy property enumeration order in older V8 versions.
-    // https://bugs.chromium.org/p/v8/issues/detail?id=4118
-
 
-    var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
-
-    test1[5] = 'de';
 
-    if (Object.getOwnPropertyNames(test1)[0] === '5') {
-      return false;
-    } // https://bugs.chromium.org/p/v8/issues/detail?id=3056
+var define = __webpack_require__(/*! define-properties */ "./node_modules/define-properties/index.js");
 
+var callBind = __webpack_require__(/*! call-bind */ "./node_modules/call-bind/index.js");
 
-    var test2 = {};
+var implementation = __webpack_require__(/*! ./implementation */ "./node_modules/regexp.prototype.flags/implementation.js");
 
-    for (var i = 0; i < 10; i++) {
-      test2['_' + String.fromCharCode(i)] = i;
-    }
+var getPolyfill = __webpack_require__(/*! ./polyfill */ "./node_modules/regexp.prototype.flags/polyfill.js");
 
-    var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
-      return test2[n];
-    });
+var shim = __webpack_require__(/*! ./shim */ "./node_modules/regexp.prototype.flags/shim.js");
 
-    if (order2.join('') !== '0123456789') {
-      return false;
-    } // https://bugs.chromium.org/p/v8/issues/detail?id=3056
+var flagsBound = callBind(getPolyfill());
+define(flagsBound, {
+  getPolyfill: getPolyfill,
+  implementation: implementation,
+  shim: shim
+});
+module.exports = flagsBound;
 
+/***/ }),
 
-    var test3 = {};
-    'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
-      test3[letter] = letter;
-    });
+/***/ "./node_modules/regexp.prototype.flags/polyfill.js":
+/*!*********************************************************!*\
+  !*** ./node_modules/regexp.prototype.flags/polyfill.js ***!
+  \*********************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-    if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') {
-      return false;
-    }
+"use strict";
 
-    return true;
-  } catch (err) {
-    // We don't expect any of the above to throw, but better to be safe.
-    return false;
-  }
-}
 
-module.exports = shouldUseNative() ? Object.assign : function (target, source) {
-  var from;
-  var to = toObject(target);
-  var symbols;
+var implementation = __webpack_require__(/*! ./implementation */ "./node_modules/regexp.prototype.flags/implementation.js");
 
-  for (var s = 1; s < arguments.length; s++) {
-    from = Object(arguments[s]);
+var supportsDescriptors = __webpack_require__(/*! define-properties */ "./node_modules/define-properties/index.js").supportsDescriptors;
 
-    for (var key in from) {
-      if (hasOwnProperty.call(from, key)) {
-        to[key] = from[key];
-      }
-    }
+var $gOPD = Object.getOwnPropertyDescriptor;
 
-    if (getOwnPropertySymbols) {
-      symbols = getOwnPropertySymbols(from);
+module.exports = function getPolyfill() {
+  if (supportsDescriptors && /a/mig.flags === 'gim') {
+    var descriptor = $gOPD(RegExp.prototype, 'flags');
 
-      for (var i = 0; i < symbols.length; i++) {
-        if (propIsEnumerable.call(from, symbols[i])) {
-          to[symbols[i]] = from[symbols[i]];
-        }
-      }
+    if (descriptor && typeof descriptor.get === 'function' && typeof /a/.dotAll === 'boolean') {
+      return descriptor.get;
     }
   }
 
-  return to;
+  return implementation;
 };
 
 /***/ }),
 
-/***/ "./node_modules/object-inspect/index.js":
-/*!**********************************************!*\
-  !*** ./node_modules/object-inspect/index.js ***!
-  \**********************************************/
+/***/ "./node_modules/regexp.prototype.flags/shim.js":
+/*!*****************************************************!*\
+  !*** ./node_modules/regexp.prototype.flags/shim.js ***!
+  \*****************************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-var hasMap = typeof Map === 'function' && Map.prototype;
-var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;
-var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;
-var mapForEach = hasMap && Map.prototype.forEach;
-var hasSet = typeof Set === 'function' && Set.prototype;
-var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;
-var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;
-var setForEach = hasSet && Set.prototype.forEach;
-var hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;
-var weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;
-var hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;
-var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;
-var hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;
-var weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;
-var booleanValueOf = Boolean.prototype.valueOf;
-var objectToString = Object.prototype.toString;
-var functionToString = Function.prototype.toString;
-var match = String.prototype.match;
-var bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;
-var gOPS = Object.getOwnPropertySymbols;
-var symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;
-var hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';
-var isEnumerable = Object.prototype.propertyIsEnumerable;
-var gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || ([].__proto__ === Array.prototype // eslint-disable-line no-proto
-? function (O) {
-  return O.__proto__; // eslint-disable-line no-proto
-} : null);
-
-var inspectCustom = __webpack_require__(/*! ./util.inspect */ "./node_modules/object-inspect/util.inspect.js").custom;
-
-var inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;
-var toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;
-
-module.exports = function inspect_(obj, options, depth, seen) {
-  var opts = options || {};
-
-  if (has(opts, 'quoteStyle') && opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double') {
-    throw new TypeError('option "quoteStyle" must be "single" or "double"');
-  }
+"use strict";
 
-  if (has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number' ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity : opts.maxStringLength !== null)) {
-    throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');
-  }
 
-  var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;
+var supportsDescriptors = __webpack_require__(/*! define-properties */ "./node_modules/define-properties/index.js").supportsDescriptors;
 
-  if (typeof customInspect !== 'boolean') {
-    throw new TypeError('option "customInspect", if provided, must be `true` or `false`');
-  }
+var getPolyfill = __webpack_require__(/*! ./polyfill */ "./node_modules/regexp.prototype.flags/polyfill.js");
 
-  if (has(opts, 'indent') && opts.indent !== null && opts.indent !== '\t' && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)) {
-    throw new TypeError('options "indent" must be "\\t", an integer > 0, or `null`');
-  }
+var gOPD = Object.getOwnPropertyDescriptor;
+var defineProperty = Object.defineProperty;
+var TypeErr = TypeError;
+var getProto = Object.getPrototypeOf;
+var regex = /a/;
 
-  if (typeof obj === 'undefined') {
-    return 'undefined';
+module.exports = function shimFlags() {
+  if (!supportsDescriptors || !getProto) {
+    throw new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');
   }
 
-  if (obj === null) {
-    return 'null';
-  }
+  var polyfill = getPolyfill();
+  var proto = getProto(regex);
+  var descriptor = gOPD(proto, 'flags');
 
-  if (typeof obj === 'boolean') {
-    return obj ? 'true' : 'false';
+  if (!descriptor || descriptor.get !== polyfill) {
+    defineProperty(proto, 'flags', {
+      configurable: true,
+      enumerable: false,
+      get: polyfill
+    });
   }
 
-  if (typeof obj === 'string') {
-    return inspectString(obj, opts);
-  }
+  return polyfill;
+};
 
-  if (typeof obj === 'number') {
-    if (obj === 0) {
-      return Infinity / obj > 0 ? '0' : '-0';
-    }
+/***/ }),
 
-    return String(obj);
-  }
+/***/ "./node_modules/side-channel/index.js":
+/*!********************************************!*\
+  !*** ./node_modules/side-channel/index.js ***!
+  \********************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-  if (typeof obj === 'bigint') {
-    return String(obj) + 'n';
-  }
+"use strict";
 
-  var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;
 
-  if (typeof depth === 'undefined') {
-    depth = 0;
-  }
+var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
 
-  if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {
-    return isArray(obj) ? '[Array]' : '[Object]';
-  }
+var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
 
-  var indent = getIndent(opts, depth);
+var inspect = __webpack_require__(/*! object-inspect */ "./node_modules/object-inspect/index.js");
 
-  if (typeof seen === 'undefined') {
-    seen = [];
-  } else if (indexOf(seen, obj) >= 0) {
-    return '[Circular]';
-  }
-
-  function inspect(value, from, noIndent) {
-    if (from) {
-      seen = seen.slice();
-      seen.push(from);
-    }
-
-    if (noIndent) {
-      var newOpts = {
-        depth: opts.depth
-      };
+var $TypeError = GetIntrinsic('%TypeError%');
+var $WeakMap = GetIntrinsic('%WeakMap%', true);
+var $Map = GetIntrinsic('%Map%', true);
+var $weakMapGet = callBound('WeakMap.prototype.get', true);
+var $weakMapSet = callBound('WeakMap.prototype.set', true);
+var $weakMapHas = callBound('WeakMap.prototype.has', true);
+var $mapGet = callBound('Map.prototype.get', true);
+var $mapSet = callBound('Map.prototype.set', true);
+var $mapHas = callBound('Map.prototype.has', true);
+/*
+ * This function traverses the list returning the node corresponding to the
+ * given key.
+ *
+ * That node is also moved to the head of the list, so that if it's accessed
+ * again we don't need to traverse the whole list. By doing so, all the recently
+ * used nodes can be accessed relatively quickly.
+ */
 
-      if (has(opts, 'quoteStyle')) {
-        newOpts.quoteStyle = opts.quoteStyle;
-      }
+var listGetNode = function (list, key) {
+  // eslint-disable-line consistent-return
+  for (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {
+    if (curr.key === key) {
+      prev.next = curr.next;
+      curr.next = list.next;
+      list.next = curr; // eslint-disable-line no-param-reassign
 
-      return inspect_(value, newOpts, depth + 1, seen);
+      return curr;
     }
-
-    return inspect_(value, opts, depth + 1, seen);
   }
+};
 
-  if (typeof obj === 'function') {
-    var name = nameOf(obj);
-    var keys = arrObjKeys(obj, inspect);
-    return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');
-  }
+var listGet = function (objects, key) {
+  var node = listGetNode(objects, key);
+  return node && node.value;
+};
 
-  if (isSymbol(obj)) {
-    var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\(.*\))_[^)]*$/, '$1') : symToString.call(obj);
-    return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;
+var listSet = function (objects, key, value) {
+  var node = listGetNode(objects, key);
+
+  if (node) {
+    node.value = value;
+  } else {
+    // Prepend the new node to the beginning of the list
+    objects.next = {
+      // eslint-disable-line no-param-reassign
+      key: key,
+      next: objects.next,
+      value: value
+    };
   }
+};
 
-  if (isElement(obj)) {
-    var s = '<' + String(obj.nodeName).toLowerCase();
-    var attrs = obj.attributes || [];
+var listHas = function (objects, key) {
+  return !!listGetNode(objects, key);
+};
 
-    for (var i = 0; i < attrs.length; i++) {
-      s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);
-    }
+module.exports = function getSideChannel() {
+  var $wm;
+  var $m;
+  var $o;
+  var channel = {
+    assert: function (key) {
+      if (!channel.has(key)) {
+        throw new $TypeError('Side channel does not contain ' + inspect(key));
+      }
+    },
+    get: function (key) {
+      // eslint-disable-line consistent-return
+      if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {
+        if ($wm) {
+          return $weakMapGet($wm, key);
+        }
+      } else if ($Map) {
+        if ($m) {
+          return $mapGet($m, key);
+        }
+      } else {
+        if ($o) {
+          // eslint-disable-line no-lonely-if
+          return listGet($o, key);
+        }
+      }
+    },
+    has: function (key) {
+      if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {
+        if ($wm) {
+          return $weakMapHas($wm, key);
+        }
+      } else if ($Map) {
+        if ($m) {
+          return $mapHas($m, key);
+        }
+      } else {
+        if ($o) {
+          // eslint-disable-line no-lonely-if
+          return listHas($o, key);
+        }
+      }
 
-    s += '>';
+      return false;
+    },
+    set: function (key, value) {
+      if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {
+        if (!$wm) {
+          $wm = new $WeakMap();
+        }
 
-    if (obj.childNodes && obj.childNodes.length) {
-      s += '...';
-    }
+        $weakMapSet($wm, key, value);
+      } else if ($Map) {
+        if (!$m) {
+          $m = new $Map();
+        }
 
-    s += '</' + String(obj.nodeName).toLowerCase() + '>';
-    return s;
-  }
+        $mapSet($m, key, value);
+      } else {
+        if (!$o) {
+          /*
+           * Initialize the linked list as an empty node, so that we don't have
+           * to special-case handling of the first node: we can always refer to
+           * it as (previous node).next, instead of something like (list).head
+           */
+          $o = {
+            key: {},
+            next: null
+          };
+        }
 
-  if (isArray(obj)) {
-    if (obj.length === 0) {
-      return '[]';
+        listSet($o, key, value);
+      }
     }
+  };
+  return channel;
+};
 
-    var xs = arrObjKeys(obj, inspect);
+/***/ }),
 
-    if (indent && !singleLineValues(xs)) {
-      return '[' + indentedJoin(xs, indent) + ']';
-    }
+/***/ "./node_modules/slash/index.js":
+/*!*************************************!*\
+  !*** ./node_modules/slash/index.js ***!
+  \*************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-    return '[ ' + xs.join(', ') + ' ]';
-  }
+"use strict";
 
-  if (isError(obj)) {
-    var parts = arrObjKeys(obj, inspect);
 
-    if (parts.length === 0) {
-      return '[' + String(obj) + ']';
-    }
+module.exports = path => {
+  const isExtendedLengthPath = /^\\\\\?\\/.test(path);
+  const hasNonAscii = /[^\u0000-\u0080]+/.test(path); // eslint-disable-line no-control-regex
 
-    return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';
+  if (isExtendedLengthPath || hasNonAscii) {
+    return path;
   }
 
-  if (typeof obj === 'object' && customInspect) {
-    if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {
-      return obj[inspectSymbol]();
-    } else if (typeof obj.inspect === 'function') {
-      return obj.inspect();
-    }
-  }
+  return path.replace(/\\/g, '/');
+};
 
-  if (isMap(obj)) {
-    var mapParts = [];
-    mapForEach.call(obj, function (value, key) {
-      mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));
-    });
-    return collectionOf('Map', mapSize.call(obj), mapParts, indent);
-  }
+/***/ }),
 
-  if (isSet(obj)) {
-    var setParts = [];
-    setForEach.call(obj, function (value) {
-      setParts.push(inspect(value, obj));
-    });
-    return collectionOf('Set', setSize.call(obj), setParts, indent);
-  }
+/***/ "./node_modules/uuid/index.js":
+/*!************************************!*\
+  !*** ./node_modules/uuid/index.js ***!
+  \************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-  if (isWeakMap(obj)) {
-    return weakCollectionOf('WeakMap');
-  }
+var v1 = __webpack_require__(/*! ./v1 */ "./node_modules/uuid/v1.js");
 
-  if (isWeakSet(obj)) {
-    return weakCollectionOf('WeakSet');
-  }
+var v4 = __webpack_require__(/*! ./v4 */ "./node_modules/uuid/v4.js");
 
-  if (isWeakRef(obj)) {
-    return weakCollectionOf('WeakRef');
-  }
+var uuid = v4;
+uuid.v1 = v1;
+uuid.v4 = v4;
+module.exports = uuid;
 
-  if (isNumber(obj)) {
-    return markBoxed(inspect(Number(obj)));
-  }
+/***/ }),
 
-  if (isBigInt(obj)) {
-    return markBoxed(inspect(bigIntValueOf.call(obj)));
-  }
+/***/ "./node_modules/uuid/lib/bytesToUuid.js":
+/*!**********************************************!*\
+  !*** ./node_modules/uuid/lib/bytesToUuid.js ***!
+  \**********************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
 
-  if (isBoolean(obj)) {
-    return markBoxed(booleanValueOf.call(obj));
-  }
+/**
+ * Convert array of 16 byte values to UUID string format of the form:
+ * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
+ */
+var byteToHex = [];
 
-  if (isString(obj)) {
-    return markBoxed(inspect(String(obj)));
-  }
+for (var i = 0; i < 256; ++i) {
+  byteToHex[i] = (i + 0x100).toString(16).substr(1);
+}
 
-  if (!isDate(obj) && !isRegExp(obj)) {
-    var ys = arrObjKeys(obj, inspect);
-    var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;
-    var protoTag = obj instanceof Object ? '' : 'null prototype';
-    var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';
-    var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';
-    var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');
+function bytesToUuid(buf, offset) {
+  var i = offset || 0;
+  var bth = byteToHex; // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4
 
-    if (ys.length === 0) {
-      return tag + '{}';
-    }
+  return [bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]]].join('');
+}
 
-    if (indent) {
-      return tag + '{' + indentedJoin(ys, indent) + '}';
-    }
+module.exports = bytesToUuid;
 
-    return tag + '{ ' + ys.join(', ') + ' }';
-  }
+/***/ }),
 
-  return String(obj);
-};
+/***/ "./node_modules/uuid/lib/rng.js":
+/*!**************************************!*\
+  !*** ./node_modules/uuid/lib/rng.js ***!
+  \**************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-function wrapQuotes(s, defaultStyle, opts) {
-  var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '"' : "'";
-  return quoteChar + s + quoteChar;
-}
+// Unique ID creation requires a high quality random # generator.  In node.js
+// this is pretty straight-forward - we use the crypto API.
+var crypto = __webpack_require__(/*! crypto */ "crypto");
 
-function quote(s) {
-  return String(s).replace(/"/g, '&quot;');
-}
+module.exports = function nodeRNG() {
+  return crypto.randomBytes(16);
+};
 
-function isArray(obj) {
-  return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj));
-}
+/***/ }),
 
-function isDate(obj) {
-  return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj));
-}
+/***/ "./node_modules/uuid/v1.js":
+/*!*********************************!*\
+  !*** ./node_modules/uuid/v1.js ***!
+  \*********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-function isRegExp(obj) {
-  return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj));
-}
+var rng = __webpack_require__(/*! ./lib/rng */ "./node_modules/uuid/lib/rng.js");
 
-function isError(obj) {
-  return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj));
-}
+var bytesToUuid = __webpack_require__(/*! ./lib/bytesToUuid */ "./node_modules/uuid/lib/bytesToUuid.js"); // **`v1()` - Generate time-based UUID**
+//
+// Inspired by https://github.com/LiosK/UUID.js
+// and http://docs.python.org/library/uuid.html
 
-function isString(obj) {
-  return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj));
-}
 
-function isNumber(obj) {
-  return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj));
-}
+var _nodeId;
 
-function isBoolean(obj) {
-  return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj));
-} // Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives
+var _clockseq; // Previous uuid creation time
 
 
-function isSymbol(obj) {
-  if (hasShammedSymbols) {
-    return obj && typeof obj === 'object' && obj instanceof Symbol;
-  }
+var _lastMSecs = 0;
+var _lastNSecs = 0; // See https://github.com/broofa/node-uuid for API details
 
-  if (typeof obj === 'symbol') {
-    return true;
-  }
+function v1(options, buf, offset) {
+  var i = buf && offset || 0;
+  var b = buf || [];
+  options = options || {};
+  var node = options.node || _nodeId;
+  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not
+  // specified.  We do this lazily to minimize issues related to insufficient
+  // system entropy.  See #189
 
-  if (!obj || typeof obj !== 'object' || !symToString) {
-    return false;
-  }
+  if (node == null || clockseq == null) {
+    var seedBytes = rng();
 
-  try {
-    symToString.call(obj);
-    return true;
-  } catch (e) {}
+    if (node == null) {
+      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
+      node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];
+    }
 
-  return false;
-}
+    if (clockseq == null) {
+      // Per 4.2.2, randomize (14 bit) clockseq
+      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;
+    }
+  } // UUID timestamps are 100 nano-second units since the Gregorian epoch,
+  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so
+  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
+  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
 
-function isBigInt(obj) {
-  if (!obj || typeof obj !== 'object' || !bigIntValueOf) {
-    return false;
-  }
 
-  try {
-    bigIntValueOf.call(obj);
-    return true;
-  } catch (e) {}
+  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); // Per 4.2.1.2, use count of uuid's generated during the current clock
+  // cycle to simulate higher resolution clock
 
-  return false;
-}
+  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)
 
-var hasOwn = Object.prototype.hasOwnProperty || function (key) {
-  return key in this;
-};
+  var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression
 
-function has(obj, key) {
-  return hasOwn.call(obj, key);
-}
+  if (dt < 0 && options.clockseq === undefined) {
+    clockseq = clockseq + 1 & 0x3fff;
+  } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
+  // time interval
 
-function toStr(obj) {
-  return objectToString.call(obj);
-}
 
-function nameOf(f) {
-  if (f.name) {
-    return f.name;
-  }
+  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
+    nsecs = 0;
+  } // Per 4.2.1.2 Throw error if too many uuids are requested
 
-  var m = match.call(functionToString.call(f), /^function\s*([\w$]+)/);
 
-  if (m) {
-    return m[1];
+  if (nsecs >= 10000) {
+    throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec');
   }
 
-  return null;
-}
-
-function indexOf(xs, x) {
-  if (xs.indexOf) {
-    return xs.indexOf(x);
-  }
+  _lastMSecs = msecs;
+  _lastNSecs = nsecs;
+  _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch
 
-  for (var i = 0, l = xs.length; i < l; i++) {
-    if (xs[i] === x) {
-      return i;
-    }
-  }
+  msecs += 12219292800000; // `time_low`
 
-  return -1;
-}
+  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
+  b[i++] = tl >>> 24 & 0xff;
+  b[i++] = tl >>> 16 & 0xff;
+  b[i++] = tl >>> 8 & 0xff;
+  b[i++] = tl & 0xff; // `time_mid`
 
-function isMap(x) {
-  if (!mapSize || !x || typeof x !== 'object') {
-    return false;
-  }
+  var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;
+  b[i++] = tmh >>> 8 & 0xff;
+  b[i++] = tmh & 0xff; // `time_high_and_version`
 
-  try {
-    mapSize.call(x);
+  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
 
-    try {
-      setSize.call(x);
-    } catch (s) {
-      return true;
-    }
+  b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
 
-    return x instanceof Map; // core-js workaround, pre-v2.5.0
-  } catch (e) {}
+  b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`
 
-  return false;
-}
+  b[i++] = clockseq & 0xff; // `node`
 
-function isWeakMap(x) {
-  if (!weakMapHas || !x || typeof x !== 'object') {
-    return false;
+  for (var n = 0; n < 6; ++n) {
+    b[i + n] = node[n];
   }
 
-  try {
-    weakMapHas.call(x, weakMapHas);
+  return buf ? buf : bytesToUuid(b);
+}
 
-    try {
-      weakSetHas.call(x, weakSetHas);
-    } catch (s) {
-      return true;
-    }
+module.exports = v1;
 
-    return x instanceof WeakMap; // core-js workaround, pre-v2.5.0
-  } catch (e) {}
+/***/ }),
 
-  return false;
-}
+/***/ "./node_modules/uuid/v4.js":
+/*!*********************************!*\
+  !*** ./node_modules/uuid/v4.js ***!
+  \*********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-function isWeakRef(x) {
-  if (!weakRefDeref || !x || typeof x !== 'object') {
-    return false;
-  }
+var rng = __webpack_require__(/*! ./lib/rng */ "./node_modules/uuid/lib/rng.js");
 
-  try {
-    weakRefDeref.call(x);
-    return true;
-  } catch (e) {}
+var bytesToUuid = __webpack_require__(/*! ./lib/bytesToUuid */ "./node_modules/uuid/lib/bytesToUuid.js");
 
-  return false;
-}
+function v4(options, buf, offset) {
+  var i = buf && offset || 0;
 
-function isSet(x) {
-  if (!setSize || !x || typeof x !== 'object') {
-    return false;
+  if (typeof options == 'string') {
+    buf = options === 'binary' ? new Array(16) : null;
+    options = null;
   }
 
-  try {
-    setSize.call(x);
+  options = options || {};
+  var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
 
-    try {
-      mapSize.call(x);
-    } catch (m) {
-      return true;
+  rnds[6] = rnds[6] & 0x0f | 0x40;
+  rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
+
+  if (buf) {
+    for (var ii = 0; ii < 16; ++ii) {
+      buf[i + ii] = rnds[ii];
     }
+  }
 
-    return x instanceof Set; // core-js workaround, pre-v2.5.0
-  } catch (e) {}
-
-  return false;
-}
-
-function isWeakSet(x) {
-  if (!weakSetHas || !x || typeof x !== 'object') {
-    return false;
-  }
-
-  try {
-    weakSetHas.call(x, weakSetHas);
-
-    try {
-      weakMapHas.call(x, weakMapHas);
-    } catch (s) {
-      return true;
-    }
-
-    return x instanceof WeakSet; // core-js workaround, pre-v2.5.0
-  } catch (e) {}
-
-  return false;
-}
-
-function isElement(x) {
-  if (!x || typeof x !== 'object') {
-    return false;
-  }
-
-  if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {
-    return true;
-  }
-
-  return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';
-}
-
-function inspectString(str, opts) {
-  if (str.length > opts.maxStringLength) {
-    var remaining = str.length - opts.maxStringLength;
-    var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');
-    return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;
-  } // eslint-disable-next-line no-control-regex
+  return buf || bytesToUuid(rnds);
+}
 
+module.exports = v4;
 
-  var s = str.replace(/(['\\])/g, '\\$1').replace(/[\x00-\x1f]/g, lowbyte);
-  return wrapQuotes(s, 'single', opts);
-}
+/***/ }),
 
-function lowbyte(c) {
-  var n = c.charCodeAt(0);
-  var x = {
-    8: 'b',
-    9: 't',
-    10: 'n',
-    12: 'f',
-    13: 'r'
-  }[n];
+/***/ "./node_modules/which-boxed-primitive/index.js":
+/*!*****************************************************!*\
+  !*** ./node_modules/which-boxed-primitive/index.js ***!
+  \*****************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-  if (x) {
-    return '\\' + x;
-  }
+"use strict";
 
-  return '\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();
-}
 
-function markBoxed(str) {
-  return 'Object(' + str + ')';
-}
+var isString = __webpack_require__(/*! is-string */ "./node_modules/is-string/index.js");
 
-function weakCollectionOf(type) {
-  return type + ' { ? }';
-}
+var isNumber = __webpack_require__(/*! is-number-object */ "./node_modules/is-number-object/index.js");
 
-function collectionOf(type, size, entries, indent) {
-  var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');
-  return type + ' (' + size + ') {' + joinedEntries + '}';
-}
+var isBoolean = __webpack_require__(/*! is-boolean-object */ "./node_modules/is-boolean-object/index.js");
 
-function singleLineValues(xs) {
-  for (var i = 0; i < xs.length; i++) {
-    if (indexOf(xs[i], '\n') >= 0) {
-      return false;
-    }
-  }
+var isSymbol = __webpack_require__(/*! is-symbol */ "./node_modules/is-symbol/index.js");
 
-  return true;
-}
+var isBigInt = __webpack_require__(/*! is-bigint */ "./node_modules/is-bigint/index.js"); // eslint-disable-next-line consistent-return
 
-function getIndent(opts, depth) {
-  var baseIndent;
 
-  if (opts.indent === '\t') {
-    baseIndent = '\t';
-  } else if (typeof opts.indent === 'number' && opts.indent > 0) {
-    baseIndent = Array(opts.indent + 1).join(' ');
-  } else {
+module.exports = function whichBoxedPrimitive(value) {
+  // eslint-disable-next-line eqeqeq
+  if (value == null || typeof value !== 'object' && typeof value !== 'function') {
     return null;
   }
 
-  return {
-    base: baseIndent,
-    prev: Array(depth + 1).join(baseIndent)
-  };
-}
-
-function indentedJoin(xs, indent) {
-  if (xs.length === 0) {
-    return '';
+  if (isString(value)) {
+    return 'String';
   }
 
-  var lineJoiner = '\n' + indent.prev + indent.base;
-  return lineJoiner + xs.join(',' + lineJoiner) + '\n' + indent.prev;
-}
-
-function arrObjKeys(obj, inspect) {
-  var isArr = isArray(obj);
-  var xs = [];
-
-  if (isArr) {
-    xs.length = obj.length;
-
-    for (var i = 0; i < obj.length; i++) {
-      xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';
-    }
+  if (isNumber(value)) {
+    return 'Number';
   }
 
-  var syms = typeof gOPS === 'function' ? gOPS(obj) : [];
-  var symMap;
-
-  if (hasShammedSymbols) {
-    symMap = {};
-
-    for (var k = 0; k < syms.length; k++) {
-      symMap['$' + syms[k]] = syms[k];
-    }
+  if (isBoolean(value)) {
+    return 'Boolean';
   }
 
-  for (var key in obj) {
-    // eslint-disable-line no-restricted-syntax
-    if (!has(obj, key)) {
-      continue;
-    } // eslint-disable-line no-restricted-syntax, no-continue
-
-
-    if (isArr && String(Number(key)) === key && key < obj.length) {
-      continue;
-    } // eslint-disable-line no-restricted-syntax, no-continue
-
-
-    if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {
-      // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section
-      continue; // eslint-disable-line no-restricted-syntax, no-continue
-    } else if (/[^\w$]/.test(key)) {
-      xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));
-    } else {
-      xs.push(key + ': ' + inspect(obj[key], obj));
-    }
+  if (isSymbol(value)) {
+    return 'Symbol';
   }
 
-  if (typeof gOPS === 'function') {
-    for (var j = 0; j < syms.length; j++) {
-      if (isEnumerable.call(obj, syms[j])) {
-        xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));
-      }
-    }
+  if (isBigInt(value)) {
+    return 'BigInt';
   }
-
-  return xs;
-}
+};
 
 /***/ }),
 
-/***/ "./node_modules/object-inspect/util.inspect.js":
-/*!*****************************************************!*\
-  !*** ./node_modules/object-inspect/util.inspect.js ***!
-  \*****************************************************/
+/***/ "./node_modules/which-collection/index.js":
+/*!************************************************!*\
+  !*** ./node_modules/which-collection/index.js ***!
+  \************************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-module.exports = __webpack_require__(/*! util */ "util").inspect;
+"use strict";
 
-/***/ }),
 
-/***/ "./node_modules/object-is/implementation.js":
-/*!**************************************************!*\
-  !*** ./node_modules/object-is/implementation.js ***!
-  \**************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+var isMap = __webpack_require__(/*! is-map */ "./node_modules/is-map/index.js");
 
-"use strict";
+var isSet = __webpack_require__(/*! is-set */ "./node_modules/is-set/index.js");
 
+var isWeakMap = __webpack_require__(/*! is-weakmap */ "./node_modules/is-weakmap/index.js");
 
-var numberIsNaN = function (value) {
-  return value !== value;
-};
+var isWeakSet = __webpack_require__(/*! is-weakset */ "./node_modules/is-weakset/index.js");
 
-module.exports = function is(a, b) {
-  if (a === 0 && b === 0) {
-    return 1 / a === 1 / b;
-  }
+module.exports = function whichCollection(value) {
+  if (value && typeof value === 'object') {
+    if (isMap(value)) {
+      return 'Map';
+    }
 
-  if (a === b) {
-    return true;
-  }
+    if (isSet(value)) {
+      return 'Set';
+    }
 
-  if (numberIsNaN(a) && numberIsNaN(b)) {
-    return true;
+    if (isWeakMap(value)) {
+      return 'WeakMap';
+    }
+
+    if (isWeakSet(value)) {
+      return 'WeakSet';
+    }
   }
 
   return false;
@@ -41966,5948 +40543,4095 @@ module.exports = function is(a, b) {
 
 /***/ }),
 
-/***/ "./node_modules/object-is/index.js":
-/*!*****************************************!*\
-  !*** ./node_modules/object-is/index.js ***!
-  \*****************************************/
+/***/ "./node_modules/which-typed-array/index.js":
+/*!*************************************************!*\
+  !*** ./node_modules/which-typed-array/index.js ***!
+  \*************************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
 
 
-var define = __webpack_require__(/*! define-properties */ "./node_modules/define-properties/index.js");
-
-var callBind = __webpack_require__(/*! call-bind */ "./node_modules/call-bind/index.js");
+var forEach = __webpack_require__(/*! foreach */ "./node_modules/foreach/index.js");
 
-var implementation = __webpack_require__(/*! ./implementation */ "./node_modules/object-is/implementation.js");
+var availableTypedArrays = __webpack_require__(/*! available-typed-arrays */ "./node_modules/available-typed-arrays/index.js");
 
-var getPolyfill = __webpack_require__(/*! ./polyfill */ "./node_modules/object-is/polyfill.js");
+var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
 
-var shim = __webpack_require__(/*! ./shim */ "./node_modules/object-is/shim.js");
+var $toString = callBound('Object.prototype.toString');
 
-var polyfill = callBind(getPolyfill(), Object);
-define(polyfill, {
-  getPolyfill: getPolyfill,
-  implementation: implementation,
-  shim: shim
-});
-module.exports = polyfill;
+var hasToStringTag = __webpack_require__(/*! has-tostringtag/shams */ "./node_modules/has-tostringtag/shams.js")();
 
-/***/ }),
+var g = typeof globalThis === 'undefined' ? global : globalThis;
+var typedArrays = availableTypedArrays();
+var $slice = callBound('String.prototype.slice');
+var toStrTags = {};
 
-/***/ "./node_modules/object-is/polyfill.js":
-/*!********************************************!*\
-  !*** ./node_modules/object-is/polyfill.js ***!
-  \********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+var gOPD = __webpack_require__(/*! es-abstract/helpers/getOwnPropertyDescriptor */ "./node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js");
 
-"use strict";
+var getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');
 
+if (hasToStringTag && gOPD && getPrototypeOf) {
+  forEach(typedArrays, function (typedArray) {
+    if (typeof g[typedArray] === 'function') {
+      var arr = new g[typedArray]();
 
-var implementation = __webpack_require__(/*! ./implementation */ "./node_modules/object-is/implementation.js");
+      if (Symbol.toStringTag in arr) {
+        var proto = getPrototypeOf(arr);
+        var descriptor = gOPD(proto, Symbol.toStringTag);
 
-module.exports = function getPolyfill() {
-  return typeof Object.is === 'function' ? Object.is : implementation;
-};
+        if (!descriptor) {
+          var superProto = getPrototypeOf(proto);
+          descriptor = gOPD(superProto, Symbol.toStringTag);
+        }
 
-/***/ }),
+        toStrTags[typedArray] = descriptor.get;
+      }
+    }
+  });
+}
 
-/***/ "./node_modules/object-is/shim.js":
-/*!****************************************!*\
-  !*** ./node_modules/object-is/shim.js ***!
-  \****************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+var tryTypedArrays = function tryAllTypedArrays(value) {
+  var foundName = false;
+  forEach(toStrTags, function (getter, typedArray) {
+    if (!foundName) {
+      try {
+        var name = getter.call(value);
 
-"use strict";
+        if (name === typedArray) {
+          foundName = name;
+        }
+      } catch (e) {}
+    }
+  });
+  return foundName;
+};
 
+var isTypedArray = __webpack_require__(/*! is-typed-array */ "./node_modules/is-typed-array/index.js");
 
-var getPolyfill = __webpack_require__(/*! ./polyfill */ "./node_modules/object-is/polyfill.js");
+module.exports = function whichTypedArray(value) {
+  if (!isTypedArray(value)) {
+    return false;
+  }
 
-var define = __webpack_require__(/*! define-properties */ "./node_modules/define-properties/index.js");
+  if (!hasToStringTag || !(Symbol.toStringTag in value)) {
+    return $slice($toString(value), 8, -1);
+  }
 
-module.exports = function shimObjectIs() {
-  var polyfill = getPolyfill();
-  define(Object, {
-    is: polyfill
-  }, {
-    is: function testObjectIs() {
-      return Object.is !== polyfill;
-    }
-  });
-  return polyfill;
+  return tryTypedArrays(value);
 };
 
 /***/ }),
 
-/***/ "./node_modules/object-keys/implementation.js":
-/*!****************************************************!*\
-  !*** ./node_modules/object-keys/implementation.js ***!
-  \****************************************************/
+/***/ "./packages/api/app/query.js":
+/*!***********************************!*\
+  !*** ./packages/api/app/query.js ***!
+  \***********************************/
 /*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+/***/ (function(module, exports) {
 
-"use strict";
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
 
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
 
-var keysShim;
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
 
-if (!Object.keys) {
-  // modified from https://github.com/es-shims/es5-shim
-  var has = Object.prototype.hasOwnProperty;
-  var toStr = Object.prototype.toString;
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
 
-  var isArgs = __webpack_require__(/*! ./isArguments */ "./node_modules/object-keys/isArguments.js"); // eslint-disable-line global-require
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
 
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
 
-  var isEnumerable = Object.prototype.propertyIsEnumerable;
-  var hasDontEnumBug = !isEnumerable.call({
-    toString: null
-  }, 'toString');
-  var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');
-  var dontEnums = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor'];
+function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
 
-  var equalsConstructorPrototype = function (o) {
-    var ctor = o.constructor;
-    return ctor && ctor.prototype === o;
-  };
+function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
 
-  var excludedKeys = {
-    $applicationCache: true,
-    $console: true,
-    $external: true,
-    $frame: true,
-    $frameElement: true,
-    $frames: true,
-    $innerHeight: true,
-    $innerWidth: true,
-    $onmozfullscreenchange: true,
-    $onmozfullscreenerror: true,
-    $outerHeight: true,
-    $outerWidth: true,
-    $pageXOffset: true,
-    $pageYOffset: true,
-    $parent: true,
-    $scrollLeft: true,
-    $scrollTop: true,
-    $scrollX: true,
-    $scrollY: true,
-    $self: true,
-    $webkitIndexedDB: true,
-    $webkitStorageInfo: true,
-    $window: true
-  };
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
 
-  var hasAutomationEqualityBug = function () {
-    /* global window */
-    if (typeof window === 'undefined') {
-      return false;
-    }
+class Query {
+  constructor(state) {
+    this.state = _objectSpread({
+      filterExpressions: state.filterExpressions || [],
+      selectExpressions: state.selectExpressions || [],
+      groupExpressions: state.groupExpressions || [],
+      orderExpressions: state.orderExpressions || [],
+      calculation: false,
+      rawMode: false,
+      withDead: false,
+      validateRefs: true,
+      limit: null,
+      offset: null
+    }, state);
+  }
 
-    for (var k in window) {
-      try {
-        if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {
-          try {
-            equalsConstructorPrototype(window[k]);
-          } catch (e) {
-            return true;
-          }
-        }
-      } catch (e) {
-        return true;
-      }
-    }
+  filter(expr) {
+    return new Query(_objectSpread(_objectSpread({}, this.state), {}, {
+      filterExpressions: [...this.state.filterExpressions, expr]
+    }));
+  }
 
-    return false;
-  }();
+  unfilter(exprs) {
+    let exprSet = new Set(exprs);
+    return new Query(_objectSpread(_objectSpread({}, this.state), {}, {
+      filterExpressions: this.state.filterExpressions.filter(expr => !exprSet.has(Object.keys(expr)[0]))
+    }));
+  }
 
-  var equalsConstructorPrototypeIfNotBuggy = function (o) {
-    /* global window */
-    if (typeof window === 'undefined' || !hasAutomationEqualityBug) {
-      return equalsConstructorPrototype(o);
+  select(exprs = []) {
+    if (!Array.isArray(exprs)) {
+      exprs = [exprs];
     }
 
-    try {
-      return equalsConstructorPrototype(o);
-    } catch (e) {
-      return false;
-    }
-  };
+    let query = new Query(_objectSpread(_objectSpread({}, this.state), {}, {
+      selectExpressions: exprs
+    }));
+    query.state.calculation = false;
+    return query;
+  }
 
-  keysShim = function keys(object) {
-    var isObject = object !== null && typeof object === 'object';
-    var isFunction = toStr.call(object) === '[object Function]';
-    var isArguments = isArgs(object);
-    var isString = isObject && toStr.call(object) === '[object String]';
-    var theKeys = [];
+  calculate(expr) {
+    let query = this.select({
+      result: expr
+    });
+    query.state.calculation = true;
+    return query;
+  }
 
-    if (!isObject && !isFunction && !isArguments) {
-      throw new TypeError('Object.keys called on a non-object');
+  groupBy(exprs) {
+    if (!Array.isArray(exprs)) {
+      exprs = [exprs];
     }
 
-    var skipProto = hasProtoEnumBug && isFunction;
+    return new Query(_objectSpread(_objectSpread({}, this.state), {}, {
+      groupExpressions: [...this.state.groupExpressions, ...exprs]
+    }));
+  }
 
-    if (isString && object.length > 0 && !has.call(object, 0)) {
-      for (var i = 0; i < object.length; ++i) {
-        theKeys.push(String(i));
-      }
+  orderBy(exprs) {
+    if (!Array.isArray(exprs)) {
+      exprs = [exprs];
     }
 
-    if (isArguments && object.length > 0) {
-      for (var j = 0; j < object.length; ++j) {
-        theKeys.push(String(j));
-      }
-    } else {
-      for (var name in object) {
-        if (!(skipProto && name === 'prototype') && has.call(object, name)) {
-          theKeys.push(String(name));
-        }
-      }
-    }
+    return new Query(_objectSpread(_objectSpread({}, this.state), {}, {
+      orderExpressions: [...this.state.orderExpressions, ...exprs]
+    }));
+  }
 
-    if (hasDontEnumBug) {
-      var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);
+  limit(num) {
+    return new Query(_objectSpread(_objectSpread({}, this.state), {}, {
+      limit: num
+    }));
+  }
 
-      for (var k = 0; k < dontEnums.length; ++k) {
-        if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {
-          theKeys.push(dontEnums[k]);
-        }
-      }
-    }
+  offset(num) {
+    return new Query(_objectSpread(_objectSpread({}, this.state), {}, {
+      offset: num
+    }));
+  }
 
-    return theKeys;
-  };
-}
+  raw() {
+    return new Query(_objectSpread(_objectSpread({}, this.state), {}, {
+      rawMode: true
+    }));
+  }
 
-module.exports = keysShim;
+  withDead() {
+    return new Query(_objectSpread(_objectSpread({}, this.state), {}, {
+      withDead: true
+    }));
+  }
 
-/***/ }),
+  withoutValidatedRefs() {
+    return new Query(_objectSpread(_objectSpread({}, this.state), {}, {
+      validateRefs: false
+    }));
+  }
 
-/***/ "./node_modules/object-keys/index.js":
-/*!*******************************************!*\
-  !*** ./node_modules/object-keys/index.js ***!
-  \*******************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-"use strict";
-
-
-var slice = Array.prototype.slice;
-
-var isArgs = __webpack_require__(/*! ./isArguments */ "./node_modules/object-keys/isArguments.js");
+  options(opts) {
+    return new Query(_objectSpread(_objectSpread({}, this.state), {}, {
+      tableOptions: opts
+    }));
+  }
 
-var origKeys = Object.keys;
-var keysShim = origKeys ? function keys(o) {
-  return origKeys(o);
-} : __webpack_require__(/*! ./implementation */ "./node_modules/object-keys/implementation.js");
-var originalKeys = Object.keys;
+  serialize() {
+    return this.state;
+  }
 
-keysShim.shim = function shimObjectKeys() {
-  if (Object.keys) {
-    var keysWorksWithArguments = function () {
-      // Safari 5.0 bug
-      var args = Object.keys(arguments);
-      return args && args.length === arguments.length;
-    }(1, 2);
+}
 
-    if (!keysWorksWithArguments) {
-      Object.keys = function keys(object) {
-        // eslint-disable-line func-name-matching
-        if (isArgs(object)) {
-          return originalKeys(slice.call(object));
-        }
+function getPrimaryOrderBy(query, defaultOrderBy) {
+  let orderExprs = query.serialize().orderExpressions;
 
-        return originalKeys(object);
-      };
+  if (orderExprs.length === 0) {
+    if (defaultOrderBy) {
+      return _objectSpread({
+        order: 'asc'
+      }, defaultOrderBy);
     }
-  } else {
-    Object.keys = keysShim;
-  }
 
-  return Object.keys || keysShim;
-};
+    return null;
+  }
 
-module.exports = keysShim;
+  let firstOrder = orderExprs[0];
 
-/***/ }),
+  if (typeof firstOrder === 'string') {
+    return {
+      field: firstOrder,
+      order: 'asc'
+    };
+  } // Handle this form: { field: 'desc' }
 
-/***/ "./node_modules/object-keys/isArguments.js":
-/*!*************************************************!*\
-  !*** ./node_modules/object-keys/isArguments.js ***!
-  \*************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
 
-"use strict";
+  let _Object$keys = Object.keys(firstOrder),
+      _Object$keys2 = _slicedToArray(_Object$keys, 1),
+      field = _Object$keys2[0];
 
+  return {
+    field,
+    order: firstOrder[field]
+  };
+}
 
-var toStr = Object.prototype.toString;
+module.exports = function q(table) {
+  return new Query({
+    table
+  });
+};
 
-module.exports = function isArguments(value) {
-  var str = toStr.call(value);
-  var isArgs = str === '[object Arguments]';
+/***/ }),
 
-  if (!isArgs) {
-    isArgs = str !== '[object Array]' && value !== null && typeof value === 'object' && typeof value.length === 'number' && value.length >= 0 && toStr.call(value.callee) === '[object Function]';
-  }
+/***/ "./packages/api/injected.js":
+/*!**********************************!*\
+  !*** ./packages/api/injected.js ***!
+  \**********************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
 
-  return isArgs;
+// TODO: comment on why it works this way
+let send;
+module.exports = {
+  send
 };
 
 /***/ }),
 
-/***/ "./node_modules/object.assign/implementation.js":
-/*!******************************************************!*\
-  !*** ./node_modules/object.assign/implementation.js ***!
-  \******************************************************/
+/***/ "./packages/api/methods.js":
+/*!*********************************!*\
+  !*** ./packages/api/methods.js ***!
+  \*********************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-"use strict";
- // modified from https://github.com/es-shims/es6-shim
-
-var keys = __webpack_require__(/*! object-keys */ "./node_modules/object-keys/index.js");
-
-var canBeObject = function (obj) {
-  return typeof obj !== 'undefined' && obj !== null;
-};
+const q = __webpack_require__(/*! ./app/query */ "./packages/api/app/query.js");
 
-var hasSymbols = __webpack_require__(/*! has-symbols/shams */ "./node_modules/has-symbols/shams.js")();
+const injected = __webpack_require__(/*! ./injected */ "./packages/api/injected.js");
 
-var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
+function send(name, args) {
+  return injected.send(name, args);
+}
 
-var toObject = Object;
-var $push = callBound('Array.prototype.push');
-var $propIsEnumerable = callBound('Object.prototype.propertyIsEnumerable');
-var originalGetSymbols = hasSymbols ? Object.getOwnPropertySymbols : null; // eslint-disable-next-line no-unused-vars
+async function runImport(name, func) {
+  await send('api/start-import', {
+    budgetName: name
+  });
 
-module.exports = function assign(target, source1) {
-  if (!canBeObject(target)) {
-    throw new TypeError('target must be an object');
+  try {
+    await func();
+  } catch (e) {
+    await send('api/abort-import');
+    throw e;
   }
 
-  var objTarget = toObject(target);
-  var s, source, i, props, syms, value, key;
-
-  for (s = 1; s < arguments.length; ++s) {
-    source = toObject(arguments[s]);
-    props = keys(source);
-    var getSymbols = hasSymbols && (Object.getOwnPropertySymbols || originalGetSymbols);
-
-    if (getSymbols) {
-      syms = getSymbols(source);
-
-      for (i = 0; i < syms.length; ++i) {
-        key = syms[i];
+  await send('api/finish-import');
+}
 
-        if ($propIsEnumerable(source, key)) {
-          $push(props, key);
-        }
-      }
-    }
+async function loadBudget(budgetId) {
+  return send('api/load-budget', {
+    id: budgetId
+  });
+}
 
-    for (i = 0; i < props.length; ++i) {
-      key = props[i];
-      value = source[key];
+async function batchBudgetUpdates(func) {
+  await send('api/batch-budget-start');
 
-      if ($propIsEnumerable(source, key)) {
-        objTarget[key] = value;
-      }
-    }
+  try {
+    await func();
+  } finally {
+    await send('api/batch-budget-end');
   }
+}
 
-  return objTarget;
-};
+function runQuery(query) {
+  return send('api/query', {
+    query: query.serialize()
+  });
+}
 
-/***/ }),
+function getBudgetMonths() {
+  return send('api/budget-months');
+}
 
-/***/ "./node_modules/object.assign/index.js":
-/*!*********************************************!*\
-  !*** ./node_modules/object.assign/index.js ***!
-  \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+function getBudgetMonth(month) {
+  return send('api/budget-month', {
+    month
+  });
+}
 
-"use strict";
+function setBudgetAmount(month, categoryId, value) {
+  return send('api/budget-set-amount', {
+    month,
+    categoryId,
+    amount: value
+  });
+}
 
+function setBudgetCarryover(month, categoryId, flag) {
+  return send('api/budget-set-carryover', {
+    month,
+    categoryId,
+    flag
+  });
+}
 
-var defineProperties = __webpack_require__(/*! define-properties */ "./node_modules/define-properties/index.js");
+function addTransactions(accountId, transactions) {
+  return send('api/transactions-add', {
+    accountId,
+    transactions
+  });
+}
 
-var callBind = __webpack_require__(/*! call-bind */ "./node_modules/call-bind/index.js");
+function importTransactions(accountId, transactions) {
+  return send('api/transactions-import', {
+    accountId,
+    transactions
+  });
+}
 
-var implementation = __webpack_require__(/*! ./implementation */ "./node_modules/object.assign/implementation.js");
+function getTransactions(accountId, startDate, endDate) {
+  return send('api/transactions-get', {
+    accountId,
+    startDate,
+    endDate
+  });
+}
 
-var getPolyfill = __webpack_require__(/*! ./polyfill */ "./node_modules/object.assign/polyfill.js");
+function filterTransactions(accountId, text) {
+  return send('api/transactions-filter', {
+    accountId,
+    text
+  });
+}
 
-var shim = __webpack_require__(/*! ./shim */ "./node_modules/object.assign/shim.js");
+function updateTransaction(id, fields) {
+  return send('api/transaction-update', {
+    id,
+    fields
+  });
+}
 
-var polyfill = callBind.apply(getPolyfill()); // eslint-disable-next-line no-unused-vars
+function deleteTransaction(id) {
+  return send('api/transaction-delete', {
+    id
+  });
+}
 
-var bound = function assign(target, source1) {
-  return polyfill(Object, arguments);
-};
+function getAccounts() {
+  return send('api/accounts-get');
+}
 
-defineProperties(bound, {
-  getPolyfill: getPolyfill,
-  implementation: implementation,
-  shim: shim
-});
-module.exports = bound;
+function createAccount(account, initialBalance) {
+  return send('api/account-create', {
+    account,
+    initialBalance
+  });
+}
 
-/***/ }),
+function updateAccount(id, fields) {
+  return send('api/account-update', {
+    id,
+    fields
+  });
+}
 
-/***/ "./node_modules/object.assign/polyfill.js":
-/*!************************************************!*\
-  !*** ./node_modules/object.assign/polyfill.js ***!
-  \************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+function closeAccount(id, transferAccountId, transferCategoryId) {
+  return send('api/account-close', {
+    id,
+    transferAccountId,
+    transferCategoryId
+  });
+}
 
-"use strict";
+function reopenAccount(id) {
+  return send('api/account-reopen', {
+    id
+  });
+}
 
+function deleteAccount(id) {
+  return send('api/account-delete', {
+    id
+  });
+}
 
-var implementation = __webpack_require__(/*! ./implementation */ "./node_modules/object.assign/implementation.js");
+function getCategoryGroups() {
+  return send('api/categories-get', {
+    grouped: true
+  });
+}
 
-var lacksProperEnumerationOrder = function () {
-  if (!Object.assign) {
-    return false;
-  }
-  /*
-   * v8, specifically in node 4.x, has a bug with incorrect property enumeration order
-   * note: this does not detect the bug unless there's 20 characters
-   */
+function createCategoryGroup(group) {
+  return send('api/category-group-create', {
+    group
+  });
+}
 
+function updateCategoryGroup(id, fields) {
+  return send('api/category-group-update', {
+    id,
+    fields
+  });
+}
 
-  var str = 'abcdefghijklmnopqrst';
-  var letters = str.split('');
-  var map = {};
+function deleteCategoryGroup(id, transferCategoryId) {
+  return send('api/category-group-delete', {
+    id,
+    transferCategoryId
+  });
+}
 
-  for (var i = 0; i < letters.length; ++i) {
-    map[letters[i]] = letters[i];
-  }
+function getCategories() {
+  return send('api/categories-get', {
+    grouped: false
+  });
+}
 
-  var obj = Object.assign({}, map);
-  var actual = '';
+function createCategory(category) {
+  return send('api/category-create', {
+    category
+  });
+}
 
-  for (var k in obj) {
-    actual += k;
-  }
+function updateCategory(id, fields) {
+  return send('api/category-update', {
+    id,
+    fields
+  });
+}
 
-  return str !== actual;
-};
+function deleteCategory(id, transferCategoryId) {
+  return send('api/category-delete', {
+    id,
+    transferCategoryId
+  });
+}
 
-var assignHasPendingExceptions = function () {
-  if (!Object.assign || !Object.preventExtensions) {
-    return false;
-  }
-  /*
-   * Firefox 37 still has "pending exception" logic in its Object.assign implementation,
-   * which is 72% slower than our shim, and Firefox 40's native implementation.
-   */
+function getPayees() {
+  return send('api/payees-get');
+}
 
+function createPayee(payee) {
+  return send('api/payee-create', {
+    payee
+  });
+}
 
-  var thrower = Object.preventExtensions({
-    1: 2
+function updatePayee(id, fields) {
+  return send('api/payee-update', {
+    id,
+    fields
   });
+}
 
-  try {
-    Object.assign(thrower, 'xy');
-  } catch (e) {
-    return thrower[1] === 'y';
-  }
+function deletePayee(id) {
+  return send('api/payee-delete', {
+    id
+  });
+}
 
-  return false;
-};
+function getPayeeRules(payeeId) {
+  return send('api/payee-rules-get', {
+    payeeId
+  });
+}
 
-module.exports = function getPolyfill() {
-  if (!Object.assign) {
-    return implementation;
-  }
+function createPayeeRule(payeeId, rule) {
+  return send('api/payee-rule-create', {
+    payee_id: payeeId,
+    rule
+  });
+}
 
-  if (lacksProperEnumerationOrder()) {
-    return implementation;
-  }
+function updatePayeeRule(id, fields) {
+  return send('api/payee-rule-update', {
+    id,
+    fields
+  });
+}
 
-  if (assignHasPendingExceptions()) {
-    return implementation;
-  }
+function deletePayeeRule(id) {
+  return send('api/payee-rule-delete', {
+    id
+  });
+}
 
-  return Object.assign;
+module.exports = {
+  runImport,
+  runQuery,
+  q,
+  loadBudget,
+  batchBudgetUpdates,
+  getBudgetMonths,
+  getBudgetMonth,
+  setBudgetAmount,
+  setBudgetCarryover,
+  addTransactions,
+  importTransactions,
+  filterTransactions,
+  getTransactions,
+  updateTransaction,
+  deleteTransaction,
+  getAccounts,
+  createAccount,
+  updateAccount,
+  closeAccount,
+  reopenAccount,
+  deleteAccount,
+  getCategories,
+  createCategoryGroup,
+  updateCategoryGroup,
+  deleteCategoryGroup,
+  createCategory,
+  updateCategory,
+  deleteCategory,
+  getPayees,
+  createPayee,
+  updatePayee,
+  deletePayee,
+  getPayeeRules,
+  createPayeeRule,
+  deletePayeeRule,
+  updatePayeeRule
 };
 
 /***/ }),
 
-/***/ "./node_modules/object.assign/shim.js":
-/*!********************************************!*\
-  !*** ./node_modules/object.assign/shim.js ***!
-  \********************************************/
+/***/ "./packages/import-ynab4/importer.js":
+/*!*******************************************!*\
+  !*** ./packages/import-ynab4/importer.js ***!
+  \*******************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-"use strict";
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
 
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
 
-var define = __webpack_require__(/*! define-properties */ "./node_modules/define-properties/index.js");
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
 
-var getPolyfill = __webpack_require__(/*! ./polyfill */ "./node_modules/object.assign/polyfill.js");
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
 
-module.exports = function shimAssign() {
-  var polyfill = getPolyfill();
-  define(Object, {
-    assign: polyfill
-  }, {
-    assign: function () {
-      return Object.assign !== polyfill;
-    }
-  });
-  return polyfill;
-};
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
 
-/***/ }),
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
 
-/***/ "./node_modules/regexp.prototype.flags/implementation.js":
-/*!***************************************************************!*\
-  !*** ./node_modules/regexp.prototype.flags/implementation.js ***!
-  \***************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+const d = __webpack_require__(/*! date-fns */ "./node_modules/date-fns/esm/index.js");
 
-"use strict";
+const normalizePathSep = __webpack_require__(/*! slash */ "./node_modules/slash/index.js");
 
+const uuid = __webpack_require__(/*! uuid */ "./node_modules/uuid/index.js");
 
-var $Object = Object;
-var $TypeError = TypeError;
+const AdmZip = __webpack_require__(/*! adm-zip */ "./node_modules/adm-zip/adm-zip.js");
 
-module.exports = function flags() {
-  if (this != null && this !== $Object(this)) {
-    throw new $TypeError('RegExp.prototype.flags getter called on non-object');
-  }
+const actual = __webpack_require__(/*! @actual-app/api/methods */ "./packages/api/methods.js");
 
-  var result = '';
+const _require = __webpack_require__(/*! @actual-app/api/utils */ "./packages/import-ynab4/node_modules/@actual-app/api/utils.js"),
+      amountToInteger = _require.amountToInteger; // Utils
 
-  if (this.global) {
-    result += 'g';
-  }
 
-  if (this.ignoreCase) {
-    result += 'i';
-  }
+function mapAccountType(type) {
+  switch (type) {
+    case 'Cash':
+    case 'Checking':
+      return 'checking';
 
-  if (this.multiline) {
-    result += 'm';
-  }
+    case 'CreditCard':
+      return 'credit';
 
-  if (this.dotAll) {
-    result += 's';
-  }
+    case 'Savings':
+      return 'savings';
 
-  if (this.unicode) {
-    result += 'u';
-  }
+    case 'InvestmentAccount':
+      return 'investment';
 
-  if (this.sticky) {
-    result += 'y';
+    case 'Mortgage':
+      return 'mortgage';
+
+    default:
+      return 'other';
   }
+}
 
-  return result;
-};
+function sortByKey(arr, key) {
+  return [...arr].sort((item1, item2) => {
+    if (item1[key] < item2[key]) {
+      return -1;
+    } else if (item1[key] > item2[key]) {
+      return 1;
+    }
 
-/***/ }),
+    return 0;
+  });
+}
 
-/***/ "./node_modules/regexp.prototype.flags/index.js":
-/*!******************************************************!*\
-  !*** ./node_modules/regexp.prototype.flags/index.js ***!
-  \******************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+function groupBy(arr, keyName) {
+  return arr.reduce(function (obj, item) {
+    var key = item[keyName];
 
-"use strict";
+    if (!obj.hasOwnProperty(key)) {
+      obj[key] = [];
+    }
 
+    obj[key].push(item);
+    return obj;
+  }, {});
+}
 
-var define = __webpack_require__(/*! define-properties */ "./node_modules/define-properties/index.js");
+function _parse(value) {
+  if (typeof value === 'string') {
+    // We don't want parsing to take local timezone into account,
+    // which parsing a string does. Pass the integers manually to
+    // bypass it.
+    let _value$split = value.split('-'),
+        _value$split2 = _slicedToArray(_value$split, 3),
+        year = _value$split2[0],
+        month = _value$split2[1],
+        day = _value$split2[2];
 
-var callBind = __webpack_require__(/*! call-bind */ "./node_modules/call-bind/index.js");
+    if (day != null) {
+      return new Date(parseInt(year), parseInt(month) - 1, parseInt(day));
+    } else if (month != null) {
+      return new Date(parseInt(year), parseInt(month) - 1, 1);
+    } else {
+      return new Date(parseInt(year), 0, 1);
+    }
+  }
 
-var implementation = __webpack_require__(/*! ./implementation */ "./node_modules/regexp.prototype.flags/implementation.js");
+  return value;
+}
 
-var getPolyfill = __webpack_require__(/*! ./polyfill */ "./node_modules/regexp.prototype.flags/polyfill.js");
+function monthFromDate(date) {
+  return d.format(_parse(date), 'yyyy-MM');
+}
 
-var shim = __webpack_require__(/*! ./shim */ "./node_modules/regexp.prototype.flags/shim.js");
+function getCurrentMonth() {
+  return d.format(new Date(), 'yyyy-MM');
+} // Importer
 
-var flagsBound = callBind(implementation);
-define(flagsBound, {
-  getPolyfill: getPolyfill,
-  implementation: implementation,
-  shim: shim
-});
-module.exports = flagsBound;
 
-/***/ }),
+async function importAccounts(data, entityIdMap) {
+  return Promise.all(data.accounts.map(async account => {
+    if (!account.isTombstone) {
+      const id = await actual.createAccount({
+        type: mapAccountType(account.accountType),
+        name: account.accountName,
+        offbudget: account.onBudget ? false : true,
+        closed: account.hidden ? true : false
+      });
+      entityIdMap.set(account.entityId, id);
+    }
+  }));
+}
 
-/***/ "./node_modules/regexp.prototype.flags/polyfill.js":
-/*!*********************************************************!*\
-  !*** ./node_modules/regexp.prototype.flags/polyfill.js ***!
-  \*********************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+async function importCategories(data, entityIdMap) {
+  const masterCategories = sortByKey(data.masterCategories, 'sortableIndex');
+  await Promise.all(masterCategories.map(async masterCategory => {
+    if (masterCategory.type === 'OUTFLOW' && !masterCategory.isTombstone && masterCategory.subCategories && masterCategory.subCategories.some(cat => !cat.isTombstone) > 0) {
+      const id = await actual.createCategoryGroup({
+        name: masterCategory.name,
+        is_income: false
+      });
+      entityIdMap.set(masterCategory.entityId, id);
 
-"use strict";
+      if (masterCategory.subCategories) {
+        const subCategories = sortByKey(masterCategory.subCategories, 'sortableIndex');
+        subCategories.reverse(); // This can't be done in parallel because sort order depends
+        // on insertion order
+
+        for (let category of subCategories) {
+          if (!category.isTombstone) {
+            const id = await actual.createCategory({
+              name: category.name,
+              group_id: entityIdMap.get(category.masterCategoryId)
+            });
+            entityIdMap.set(category.entityId, id);
+          }
+        }
+      }
+    }
+  }));
+}
 
+async function importPayees(data, entityIdMap) {
+  for (let payee of data.payees) {
+    if (!payee.isTombstone) {
+      let id = await actual.createPayee({
+        name: payee.name,
+        category: entityIdMap.get(payee.autoFillCategoryId) || null,
+        transfer_acct: entityIdMap.get(payee.targetAccountId) || null
+      }); // TODO: import payee rules
 
-var implementation = __webpack_require__(/*! ./implementation */ "./node_modules/regexp.prototype.flags/implementation.js");
+      entityIdMap.set(payee.entityId, id);
+    }
+  }
+}
 
-var supportsDescriptors = __webpack_require__(/*! define-properties */ "./node_modules/define-properties/index.js").supportsDescriptors;
+async function importTransactions(data, entityIdMap) {
+  const categories = await actual.getCategories();
+  const incomeCategoryId = categories.find(cat => cat.name === 'Income').id;
+  const accounts = await actual.getAccounts();
+  const payees = await actual.getPayees();
 
-var $gOPD = Object.getOwnPropertyDescriptor;
-var $TypeError = TypeError;
+  function getCategory(id) {
+    if (id == null || id === 'Category/__Split__') {
+      return null;
+    } else if (id === 'Category/__ImmediateIncome__' || id === 'Category/__DeferredIncome__') {
+      return incomeCategoryId;
+    }
 
-module.exports = function getPolyfill() {
-  if (!supportsDescriptors) {
-    throw new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');
+    return entityIdMap.get(id);
   }
 
-  if (/a/mig.flags === 'gim') {
-    var descriptor = $gOPD(RegExp.prototype, 'flags');
+  function isOffBudget(acctId) {
+    let acct = accounts.find(acct => acct.id === acctId);
 
-    if (descriptor && typeof descriptor.get === 'function' && typeof /a/.dotAll === 'boolean') {
-      return descriptor.get;
+    if (!acct) {
+      throw new Error('Could not find account for transaction when importing');
     }
-  }
 
-  return implementation;
-};
+    return acct.offbudget;
+  } // Go ahead and generate ids for all of the transactions so we can
+  // reliably resolve transfers
 
-/***/ }),
 
-/***/ "./node_modules/regexp.prototype.flags/shim.js":
-/*!*****************************************************!*\
-  !*** ./node_modules/regexp.prototype.flags/shim.js ***!
-  \*****************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+  for (let transaction of data.transactions) {
+    entityIdMap.set(transaction.entityId, uuid.v4());
+  }
 
-"use strict";
+  let sortOrder = 1;
+  let transactionsGrouped = groupBy(data.transactions, 'accountId');
+  await Promise.all(Object.keys(transactionsGrouped).map(async accountId => {
+    let transactions = transactionsGrouped[accountId];
+    let toImport = transactions.map(transaction => {
+      if (transaction.isTombstone) {
+        return;
+      }
 
+      let id = entityIdMap.get(transaction.entityId);
+      let transferId = entityIdMap.get(transaction.transferTransactionId) || null;
+      let payee = null;
 
-var supportsDescriptors = __webpack_require__(/*! define-properties */ "./node_modules/define-properties/index.js").supportsDescriptors;
+      if (transferId) {
+        payee = payees.find(p => p.transfer_acct === entityIdMap.get(transaction.targetAccountId)).id;
+      } else {
+        payee = entityIdMap.get(transaction.payeeId);
+      }
 
-var getPolyfill = __webpack_require__(/*! ./polyfill */ "./node_modules/regexp.prototype.flags/polyfill.js");
+      let newTransaction = {
+        id,
+        amount: amountToInteger(transaction.amount),
+        category: isOffBudget(entityIdMap.get(accountId)) ? null : getCategory(transaction.categoryId),
+        date: transaction.date,
+        notes: transaction.memo || null,
+        payee,
+        transfer_id: transferId
+      };
+      newTransaction.subtransactions = transaction.subTransactions && transaction.subTransactions.map((t, i) => {
+        return {
+          amount: amountToInteger(t.amount),
+          category: getCategory(t.categoryId)
+        };
+      });
+      return newTransaction;
+    }).filter(x => x);
+    await actual.addTransactions(entityIdMap.get(accountId), toImport);
+  }));
+}
 
-var gOPD = Object.getOwnPropertyDescriptor;
-var defineProperty = Object.defineProperty;
-var TypeErr = TypeError;
-var getProto = Object.getPrototypeOf;
-var regex = /a/;
+function fillInBudgets(data, categoryBudgets) {
+  // YNAB only contains entries for categories that have been actually
+  // budgeted. That would be fine except that we need to set the
+  // "carryover" flag on each month when carrying debt across months.
+  // To make sure our system has a chance to set this flag on each
+  // category, make sure a budget exists for every category of every
+  // month.
+  const budgets = [...categoryBudgets];
+  data.masterCategories.forEach(masterCategory => {
+    if (masterCategory.subCategories) {
+      masterCategory.subCategories.forEach(category => {
+        if (!budgets.find(b => b.categoryId === category.entityId)) {
+          budgets.push({
+            budgeted: 0,
+            categoryId: category.entityId
+          });
+        }
+      });
+    }
+  });
+  return budgets;
+}
 
-module.exports = function shimFlags() {
-  if (!supportsDescriptors || !getProto) {
-    throw new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');
-  }
+async function importBudgets(data, entityIdMap) {
+  let budgets = sortByKey(data.monthlyBudgets, 'month');
+  let earliestMonth = monthFromDate(budgets[0].month);
+  let currentMonth = getCurrentMonth();
+  await actual.batchBudgetUpdates(async () => {
+    const carryoverFlags = {};
 
-  var polyfill = getPolyfill();
-  var proto = getProto(regex);
-  var descriptor = gOPD(proto, 'flags');
+    for (let budget of budgets) {
+      let filled = fillInBudgets(data, budget.monthlySubCategoryBudgets.filter(b => !b.isTombstone));
+      await Promise.all(filled.map(async catBudget => {
+        let amount = amountToInteger(catBudget.budgeted);
+        let catId = entityIdMap.get(catBudget.categoryId);
+        let month = monthFromDate(budget.month);
 
-  if (!descriptor || descriptor.get !== polyfill) {
-    defineProperty(proto, 'flags', {
-      configurable: true,
-      enumerable: false,
-      get: polyfill
-    });
-  }
+        if (!catId) {
+          return;
+        }
 
-  return polyfill;
-};
+        await actual.setBudgetAmount(month, catId, amount);
 
-/***/ }),
+        if (catBudget.overspendingHandling === 'AffectsBuffer') {
+          // Turn off the carryover flag so it doesn't propagate
+          // to future months
+          carryoverFlags[catId] = false;
+        } else if (catBudget.overspendingHandling === 'Confined' || carryoverFlags[catId]) {
+          // Overspending has switched to carryover, set the
+          // flag so it propagates to future months
+          carryoverFlags[catId] = true;
+          await actual.setBudgetCarryover(month, catId, true);
+        }
+      }));
+    }
+  });
+}
 
-/***/ "./node_modules/side-channel/index.js":
-/*!********************************************!*\
-  !*** ./node_modules/side-channel/index.js ***!
-  \********************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+function estimateRecentness(str) {
+  // The "recentness" is the total amount of changes that this device
+  // is aware of, which is estimated by summing up all of the version
+  // numbers that its aware of. This works because version numbers are
+  // increasing integers.
+  return str.split(',').reduce((total, version) => {
+    const _version$split = version.split('-'),
+          _version$split2 = _slicedToArray(_version$split, 2),
+          _ = _version$split2[0],
+          number = _version$split2[1];
 
-"use strict";
+    return total + parseInt(number);
+  }, 0);
+}
 
+function findLatestDevice(zipped, entries) {
+  let devices = entries.map(entry => {
+    const contents = zipped.readFile(entry).toString('utf8');
+    let data;
 
-var GetIntrinsic = __webpack_require__(/*! get-intrinsic */ "./node_modules/get-intrinsic/index.js");
+    try {
+      data = JSON.parse(contents);
+    } catch (e) {
+      return null;
+    }
 
-var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
+    if (data.hasFullKnowledge) {
+      return {
+        deviceGUID: data.deviceGUID,
+        shortName: data.shortDeviceId,
+        recentness: estimateRecentness(data.knowledge)
+      };
+    }
 
-var inspect = __webpack_require__(/*! object-inspect */ "./node_modules/object-inspect/index.js");
+    return null;
+  }).filter(x => x);
+  devices = sortByKey(devices, 'recentness');
+  return devices[devices.length - 1].deviceGUID;
+}
 
-var $TypeError = GetIntrinsic('%TypeError%');
-var $WeakMap = GetIntrinsic('%WeakMap%', true);
-var $Map = GetIntrinsic('%Map%', true);
-var $weakMapGet = callBound('WeakMap.prototype.get', true);
-var $weakMapSet = callBound('WeakMap.prototype.set', true);
-var $weakMapHas = callBound('WeakMap.prototype.has', true);
-var $mapGet = callBound('Map.prototype.get', true);
-var $mapSet = callBound('Map.prototype.set', true);
-var $mapHas = callBound('Map.prototype.has', true);
-/*
- * This function traverses the list returning the node corresponding to the
- * given key.
- *
- * That node is also moved to the head of the list, so that if it's accessed
- * again we don't need to traverse the whole list. By doing so, all the recently
- * used nodes can be accessed relatively quickly.
- */
+async function doImport(data) {
+  const entityIdMap = new Map();
+  console.log('Importing Accounts...');
+  await importAccounts(data, entityIdMap);
+  console.log('Importing Categories...');
+  await importCategories(data, entityIdMap);
+  console.log('Importing Payees...');
+  await importPayees(data, entityIdMap);
+  console.log('Importing Transactions...');
+  await importTransactions(data, entityIdMap);
+  console.log('Importing Budgets...');
+  await importBudgets(data, entityIdMap);
+  console.log('Setting up...');
+}
 
-var listGetNode = function (list, key) {
-  // eslint-disable-line consistent-return
-  for (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {
-    if (curr.key === key) {
-      prev.next = curr.next;
-      curr.next = list.next;
-      list.next = curr; // eslint-disable-line no-param-reassign
+function getBudgetName(filepath) {
+  let unixFilepath = normalizePathSep(filepath);
 
-      return curr;
-    }
+  if (!/\.zip/.test(unixFilepath)) {
+    return null;
   }
-};
 
-var listGet = function (objects, key) {
-  var node = listGetNode(objects, key);
-  return node && node.value;
-};
+  unixFilepath = unixFilepath.replace(/\.zip$/, '').replace(/.ynab4$/, ''); // Most budgets are named like "Budget~51938D82.ynab4" but sometimes
+  // they are only "Budget.ynab4". We only want to grab the name
+  // before the ~ if it exists.
 
-var listSet = function (objects, key, value) {
-  var node = listGetNode(objects, key);
+  let m = unixFilepath.match(/([^/~]+)[^/]*$/);
 
-  if (node) {
-    node.value = value;
-  } else {
-    // Prepend the new node to the beginning of the list
-    objects.next = {
-      // eslint-disable-line no-param-reassign
-      key: key,
-      next: objects.next,
-      value: value
-    };
+  if (!m) {
+    return null;
   }
-};
 
-var listHas = function (objects, key) {
-  return !!listGetNode(objects, key);
-};
+  return m[1];
+}
 
-module.exports = function getSideChannel() {
-  var $wm;
-  var $m;
-  var $o;
-  var channel = {
-    assert: function (key) {
-      if (!channel.has(key)) {
-        throw new $TypeError('Side channel does not contain ' + inspect(key));
-      }
-    },
-    get: function (key) {
-      // eslint-disable-line consistent-return
-      if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {
-        if ($wm) {
-          return $weakMapGet($wm, key);
-        }
-      } else if ($Map) {
-        if ($m) {
-          return $mapGet($m, key);
-        }
-      } else {
-        if ($o) {
-          // eslint-disable-line no-lonely-if
-          return listGet($o, key);
-        }
-      }
-    },
-    has: function (key) {
-      if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {
-        if ($wm) {
-          return $weakMapHas($wm, key);
-        }
-      } else if ($Map) {
-        if ($m) {
-          return $mapHas($m, key);
-        }
-      } else {
-        if ($o) {
-          // eslint-disable-line no-lonely-if
-          return listHas($o, key);
-        }
-      }
+function getFile(entries, path) {
+  let files = entries.filter(e => e.entryName === path);
 
-      return false;
-    },
-    set: function (key, value) {
-      if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {
-        if (!$wm) {
-          $wm = new $WeakMap();
-        }
+  if (files.length === 0) {
+    throw new Error('Could not find file: ' + path);
+  }
 
-        $weakMapSet($wm, key, value);
-      } else if ($Map) {
-        if (!$m) {
-          $m = new $Map();
-        }
+  if (files.length >= 2) {
+    throw new Error('File name matches multiple files: ' + path);
+  }
 
-        $mapSet($m, key, value);
-      } else {
-        if (!$o) {
-          /*
-           * Initialize the linked list as an empty node, so that we don't have
-           * to special-case handling of the first node: we can always refer to
-           * it as (previous node).next, instead of something like (list).head
-           */
-          $o = {
-            key: {},
-            next: null
-          };
-        }
-
-        listSet($o, key, value);
-      }
-    }
-  };
-  return channel;
-};
-
-/***/ }),
+  return files[0];
+}
 
-/***/ "./node_modules/slash/index.js":
-/*!*************************************!*\
-  !*** ./node_modules/slash/index.js ***!
-  \*************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+function join(...paths) {
+  return paths.slice(1).reduce((full, path) => {
+    return full + '/' + path.replace(/^\//, '');
+  }, paths[0].replace(/\/$/, ''));
+}
 
-"use strict";
+async function importBuffer(filepath, buffer) {
+  let budgetName = getBudgetName(filepath);
 
+  if (!budgetName) {
+    throw new Error('Not a YNAB4 file: ' + filepath);
+  }
 
-module.exports = path => {
-  const isExtendedLengthPath = /^\\\\\?\\/.test(path);
-  const hasNonAscii = /[^\u0000-\u0080]+/.test(path); // eslint-disable-line no-control-regex
+  let zipped = new AdmZip(buffer);
+  let entries = zipped.getEntries();
+  let root = '';
+  let dirMatch = entries[0].entryName.match(/([^/]*\.ynab4)/);
 
-  if (isExtendedLengthPath || hasNonAscii) {
-    return path;
+  if (dirMatch) {
+    root = dirMatch[1] + '/';
   }
 
-  return path.replace(/\\/g, '/');
-};
+  let metaStr = zipped.readFile(getFile(entries, root + 'Budget.ymeta'));
+  let meta = JSON.parse(metaStr.toString('utf8'));
+  let budgetPath = join(root, meta.relativeDataFolderName);
+  let deviceFiles = entries.filter(e => e.entryName.startsWith(join(budgetPath, 'devices')));
+  let deviceGUID = findLatestDevice(zipped, deviceFiles);
+  const yfullPath = join(budgetPath, deviceGUID, 'Budget.yfull');
+  let contents;
 
-/***/ }),
+  try {
+    contents = zipped.readFile(getFile(entries, yfullPath)).toString('utf8');
+  } catch (e) {
+    console.log(e);
+    throw new Error('Error reading Budget.yfull file');
+  }
 
-/***/ "./node_modules/uuid/index.js":
-/*!************************************!*\
-  !*** ./node_modules/uuid/index.js ***!
-  \************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+  let data;
 
-var v1 = __webpack_require__(/*! ./v1 */ "./node_modules/uuid/v1.js");
+  try {
+    data = JSON.parse(contents);
+  } catch (e) {
+    throw new Error('Error parsing Budget.yull file');
+  }
 
-var v4 = __webpack_require__(/*! ./v4 */ "./node_modules/uuid/v4.js");
+  return actual.runImport(budgetName, () => doImport(data));
+}
 
-var uuid = v4;
-uuid.v1 = v1;
-uuid.v4 = v4;
-module.exports = uuid;
+module.exports = {
+  importBuffer
+};
 
 /***/ }),
 
-/***/ "./node_modules/uuid/lib/bytesToUuid.js":
-/*!**********************************************!*\
-  !*** ./node_modules/uuid/lib/bytesToUuid.js ***!
-  \**********************************************/
+/***/ "./packages/import-ynab4/node_modules/@actual-app/api/utils.js":
+/*!*********************************************************************!*\
+  !*** ./packages/import-ynab4/node_modules/@actual-app/api/utils.js ***!
+  \*********************************************************************/
 /*! no static exports found */
 /***/ (function(module, exports) {
 
-/**
- * Convert array of 16 byte values to UUID string format of the form:
- * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
- */
-var byteToHex = [];
-
-for (var i = 0; i < 256; ++i) {
-  byteToHex[i] = (i + 0x100).toString(16).substr(1);
+function amountToInteger(n) {
+  return Math.round(n * 100) | 0;
 }
 
-function bytesToUuid(buf, offset) {
-  var i = offset || 0;
-  var bth = byteToHex; // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4
-
-  return [bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]]].join('');
+function integerToAmount(n) {
+  return parseFloat((n / 100).toFixed(2));
 }
 
-module.exports = bytesToUuid;
+module.exports = {
+  amountToInteger,
+  integerToAmount
+};
 
 /***/ }),
 
-/***/ "./node_modules/uuid/lib/rng.js":
-/*!**************************************!*\
-  !*** ./node_modules/uuid/lib/rng.js ***!
-  \**************************************/
+/***/ "./packages/import-ynab5/importer.js":
+/*!*******************************************!*\
+  !*** ./packages/import-ynab5/importer.js ***!
+  \*******************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-// Unique ID creation requires a high quality random # generator.  In node.js
-// this is pretty straight-forward - we use the crypto API.
-var crypto = __webpack_require__(/*! crypto */ "crypto");
+const d = __webpack_require__(/*! date-fns */ "./node_modules/date-fns/esm/index.js");
 
-module.exports = function nodeRNG() {
-  return crypto.randomBytes(16);
-};
+const uuid = __webpack_require__(/*! uuid */ "./node_modules/uuid/index.js");
 
-/***/ }),
+const actual = __webpack_require__(/*! @actual-app/api/methods */ "./packages/api/methods.js");
 
-/***/ "./node_modules/uuid/v1.js":
-/*!*********************************!*\
-  !*** ./node_modules/uuid/v1.js ***!
-  \*********************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+const _require = __webpack_require__(/*! @actual-app/api/utils */ "./packages/import-ynab5/node_modules/@actual-app/api/utils.js"),
+      amountToInteger = _require.amountToInteger;
 
-var rng = __webpack_require__(/*! ./lib/rng */ "./node_modules/uuid/lib/rng.js");
+function amountFromYnab(amount) {
+  // ynabs multiplies amount by 1000 and actual by 100
+  // so, this function divides by 10
+  return Math.round(amount / 10);
+}
 
-var bytesToUuid = __webpack_require__(/*! ./lib/bytesToUuid */ "./node_modules/uuid/lib/bytesToUuid.js"); // **`v1()` - Generate time-based UUID**
-//
-// Inspired by https://github.com/LiosK/UUID.js
-// and http://docs.python.org/library/uuid.html
+function monthFromDate(date) {
+  let parts = date.split('-');
+  return parts[0] + '-' + parts[1];
+}
 
+function mapAccountType(type) {
+  switch (type) {
+    case 'cash':
+    case 'checking':
+      return 'checking';
 
-var _nodeId;
+    case 'creditCard':
+    case 'lineOfCredit':
+      return 'credit';
 
-var _clockseq; // Previous uuid creation time
+    case 'savings':
+      return 'savings';
 
+    case 'investmentAccount':
+      return 'investment';
 
-var _lastMSecs = 0;
-var _lastNSecs = 0; // See https://github.com/broofa/node-uuid for API details
+    case 'mortgage':
+      return 'mortgage';
 
-function v1(options, buf, offset) {
-  var i = buf && offset || 0;
-  var b = buf || [];
-  options = options || {};
-  var node = options.node || _nodeId;
-  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not
-  // specified.  We do this lazily to minimize issues related to insufficient
-  // system entropy.  See #189
+    default:
+      return 'other';
+  }
+}
 
-  if (node == null || clockseq == null) {
-    var seedBytes = rng();
+function sortByKey(arr, key) {
+  return [...arr].sort((item1, item2) => {
+    if (item1[key] < item2[key]) {
+      return -1;
+    } else if (item1[key] > item2[key]) {
+      return 1;
+    }
 
-    if (node == null) {
-      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
-      node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];
+    return 0;
+  });
+}
+
+function groupBy(arr, keyName) {
+  return arr.reduce(function (obj, item) {
+    var key = item[keyName];
+
+    if (!obj.hasOwnProperty(key)) {
+      obj[key] = [];
     }
 
-    if (clockseq == null) {
-      // Per 4.2.2, randomize (14 bit) clockseq
-      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;
+    obj[key].push(item);
+    return obj;
+  }, {});
+}
+
+function importAccounts(data, entityIdMap) {
+  return Promise.all(data.accounts.map(async account => {
+    if (!account.deleted) {
+      let id = await actual.createAccount({
+        type: mapAccountType(account.type),
+        name: account.name,
+        offbudget: account.on_budget ? false : true,
+        closed: account.closed
+      });
+      entityIdMap.set(account.id, id);
     }
-  } // UUID timestamps are 100 nano-second units since the Gregorian epoch,
-  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so
-  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
-  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
+  }));
+}
 
+async function importCategories(data, entityIdMap) {
+  // Hidden categories are put in its own group by YNAB,
+  // so it's already handled.
+  const categories = await actual.getCategories();
+  const incomeCatId = categories.find(cat => cat.name === 'Income').id;
+  const ynabIncomeCategories = ['To be Budgeted', 'Inflow: Ready to Assign'];
 
-  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); // Per 4.2.1.2, use count of uuid's generated during the current clock
-  // cycle to simulate higher resolution clock
+  function checkSpecialCat(cat) {
+    if (cat.category_group_id === data.category_groups.find(group => group.name === 'Internal Master Category').id) {
+      if (ynabIncomeCategories.includes(cat.name)) {
+        return 'income';
+      } else {
+        return 'internal';
+      }
+    } else if (cat.category_group_id === data.category_groups.find(group => group.name === 'Credit Card Payments').id) {
+      return 'creditCard';
+    }
+  } // Can't be done in parallel to have
+  // correct sort order.
 
-  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)
 
-  var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression
+  for (let group of data.category_groups) {
+    if (!group.deleted) {
+      // Ignores internal category and credit cards
+      if (group.name !== 'Internal Master Category' && group.name !== 'Credit Card Payments') {
+        var groupId = await actual.createCategoryGroup({
+          name: group.name,
+          is_income: false
+        });
+        entityIdMap.set(group.id, groupId);
+      }
 
-  if (dt < 0 && options.clockseq === undefined) {
-    clockseq = clockseq + 1 & 0x3fff;
-  } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
-  // time interval
+      let cats = data.categories.filter(cat => cat.category_group_id === group.id);
 
+      for (let cat of cats.reverse()) {
+        if (!cat.deleted) {
+          let newCategory = {};
+          newCategory.name = cat.name; // Handles special categories. Starting balance is a payee
+          // in YNAB so it's handled in importTransactions
 
-  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
-    nsecs = 0;
-  } // Per 4.2.1.2 Throw error if too many uuids are requested
+          switch (checkSpecialCat(cat)) {
+            case 'income':
+              {
+                // doesn't create new category, only assigns id
+                let id = incomeCatId;
+                entityIdMap.set(cat.id, id);
+                break;
+              }
 
+            case 'creditCard': // ignores it
 
-  if (nsecs >= 10000) {
-    throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec');
+            case 'internal':
+              // uncategorized is ignored too, handled by actual
+              break;
+
+            default:
+              {
+                newCategory.group_id = groupId;
+                let id = await actual.createCategory(newCategory);
+                entityIdMap.set(cat.id, id);
+                break;
+              }
+          }
+        }
+      }
+    }
   }
+}
 
-  _lastMSecs = msecs;
-  _lastNSecs = nsecs;
-  _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch
+function importPayees(data, entityIdMap) {
+  return Promise.all(data.payees.map(async payee => {
+    if (!payee.deleted) {
+      let id = await actual.createPayee({
+        name: payee.name
+      });
+      entityIdMap.set(payee.id, id);
+    }
+  }));
+}
 
-  msecs += 12219292800000; // `time_low`
+async function importTransactions(data, entityIdMap) {
+  const payees = await actual.getPayees();
+  const categories = await actual.getCategories();
+  const incomeCatId = categories.find(cat => cat.name === 'Income').id;
+  const startingBalanceCatId = categories.find(cat => cat.name === 'Starting Balances').id; //better way to do it?
 
-  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
-  b[i++] = tl >>> 24 & 0xff;
-  b[i++] = tl >>> 16 & 0xff;
-  b[i++] = tl >>> 8 & 0xff;
-  b[i++] = tl & 0xff; // `time_mid`
+  const startingPayeeYNAB = data.payees.find(payee => payee.name === 'Starting Balance').id;
+  let transactionsGrouped = groupBy(data.transactions, 'account_id');
+  let subtransactionsGrouped = groupBy(data.subtransactions, 'transaction_id'); // Go ahead and generate ids for all of the transactions so we can
+  // reliably resolve transfers
 
-  var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;
-  b[i++] = tmh >>> 8 & 0xff;
-  b[i++] = tmh & 0xff; // `time_high_and_version`
+  for (let transaction of data.transactions) {
+    entityIdMap.set(transaction.id, uuid.v4());
+  }
 
-  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
+  await Promise.all(Object.keys(transactionsGrouped).map(async accountId => {
+    let transactions = transactionsGrouped[accountId];
+    let toImport = transactions.map(transaction => {
+      if (transaction.deleted) {
+        return null;
+      } // Handle subtransactions
 
-  b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
 
-  b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`
+      let subtransactions = subtransactionsGrouped[transaction.id];
 
-  b[i++] = clockseq & 0xff; // `node`
+      if (subtransactions) {
+        subtransactions = subtransactions.map(subtrans => {
+          return {
+            amount: amountFromYnab(subtrans.amount),
+            category: entityIdMap.get(subtrans.category_id) || null,
+            notes: subtrans.memo
+          };
+        });
+      } // Add transaction
 
-  for (var n = 0; n < 6; ++n) {
-    b[i + n] = node[n];
-  }
 
-  return buf ? buf : bytesToUuid(b);
-}
+      let newTransaction = {
+        id: entityIdMap.get(transaction.id),
+        account: entityIdMap.get(transaction.account_id),
+        date: transaction.date,
+        amount: amountFromYnab(transaction.amount),
+        category: entityIdMap.get(transaction.category_id) || null,
+        cleared: ['cleared', 'reconciled'].includes(transaction.cleared),
+        notes: transaction.memo || null,
+        imported_id: transaction.import_id || null,
+        transfer_id: entityIdMap.get(transaction.transfer_transaction_id) || null,
+        subtransactions: subtransactions
+      }; // Handle transfer payee
 
-module.exports = v1;
+      if (transaction.transfer_account_id) {
+        newTransaction.payee = payees.find(p => p.transfer_acct === entityIdMap.get(transaction.transfer_account_id)).id;
+      } else {
+        newTransaction.payee = entityIdMap.get(transaction.payee_id);
+      } // Handle starting balances
 
-/***/ }),
 
-/***/ "./node_modules/uuid/v4.js":
-/*!*********************************!*\
-  !*** ./node_modules/uuid/v4.js ***!
-  \*********************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+      if (transaction.payee_id === startingPayeeYNAB && entityIdMap.get(transaction.category_id) === incomeCatId) {
+        newTransaction.category = startingBalanceCatId;
+        newTransaction.payee = null;
+      }
 
-var rng = __webpack_require__(/*! ./lib/rng */ "./node_modules/uuid/lib/rng.js");
+      return newTransaction;
+    }).filter(x => x);
+    await actual.addTransactions(entityIdMap.get(accountId), toImport);
+  }));
+}
 
-var bytesToUuid = __webpack_require__(/*! ./lib/bytesToUuid */ "./node_modules/uuid/lib/bytesToUuid.js");
+async function importBudgets(data, entityIdMap) {
+  // There should be info in the docs to deal with
+  // no credit card category and how YNAB and Actual
+  // handle differently the amount To be Budgeted
+  // i.e. Actual considers the cc debt while YNAB doesn't
+  //
+  // Also, there could be a way to set rollover using
+  // Deferred Income Subcat and Immediate Income Subcat
+  let budgets = sortByKey(data.months, 'month');
+  const internalCatIdYnab = data.category_groups.find(group => group.name === 'Internal Master Category').id;
+  const creditcardCatIdYnab = data.category_groups.find(group => group.name === 'Credit Card Payments').id;
+  await actual.batchBudgetUpdates(async () => {
+    for (let budget of budgets) {
+      let month = monthFromDate(budget.month);
+      await Promise.all(budget.categories.map(async catBudget => {
+        let catId = entityIdMap.get(catBudget.id);
+        let amount = catBudget.budgeted / 10;
 
-function v4(options, buf, offset) {
-  var i = buf && offset || 0;
+        if (!catId || catBudget.category_group_id === internalCatIdYnab || catBudget.category_group_id === creditcardCatIdYnab) {
+          return;
+        }
 
-  if (typeof options == 'string') {
-    buf = options === 'binary' ? new Array(16) : null;
-    options = null;
-  }
+        await actual.setBudgetAmount(month, catId, amount);
+      }));
+    }
+  });
+} // Utils
 
-  options = options || {};
-  var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
 
-  rnds[6] = rnds[6] & 0x0f | 0x40;
-  rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
+async function doImport(data) {
+  const entityIdMap = new Map();
+  console.log('Importing Accounts...');
+  await importAccounts(data, entityIdMap);
+  console.log('Importing Categories...');
+  await importCategories(data, entityIdMap);
+  console.log('Importing Payees...');
+  await importPayees(data, entityIdMap);
+  console.log('Importing Transactions...');
+  await importTransactions(data, entityIdMap);
+  console.log('Importing Budgets...');
+  await importBudgets(data, entityIdMap);
+  console.log('Setting up...');
+}
 
-  if (buf) {
-    for (var ii = 0; ii < 16; ++ii) {
-      buf[i + ii] = rnds[ii];
-    }
+async function importYNAB5(data) {
+  if (data.data) {
+    data = data.data;
   }
 
-  return buf || bytesToUuid(rnds);
+  return actual.runImport(data.budget.name, () => doImport(data.budget));
 }
 
-module.exports = v4;
+module.exports = {
+  importYNAB5
+};
 
 /***/ }),
 
-/***/ "./node_modules/which-boxed-primitive/index.js":
-/*!*****************************************************!*\
-  !*** ./node_modules/which-boxed-primitive/index.js ***!
-  \*****************************************************/
+/***/ "./packages/import-ynab5/node_modules/@actual-app/api/utils.js":
+/*!*********************************************************************!*\
+  !*** ./packages/import-ynab5/node_modules/@actual-app/api/utils.js ***!
+  \*********************************************************************/
 /*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+/***/ (function(module, exports) {
 
-"use strict";
+function amountToInteger(n) {
+  return Math.round(n * 100) | 0;
+}
 
+function integerToAmount(n) {
+  return parseFloat((n / 100).toFixed(2));
+}
 
-var isString = __webpack_require__(/*! is-string */ "./node_modules/is-string/index.js");
+module.exports = {
+  amountToInteger,
+  integerToAmount
+};
 
-var isNumber = __webpack_require__(/*! is-number-object */ "./node_modules/is-number-object/index.js");
+/***/ }),
 
-var isBoolean = __webpack_require__(/*! is-boolean-object */ "./node_modules/is-boolean-object/index.js");
+/***/ "./packages/loot-core/migrations/1632571489012_remove_cache.js":
+/*!*********************************************************************!*\
+  !*** ./packages/loot-core/migrations/1632571489012_remove_cache.js ***!
+  \*********************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
 
-var isSymbol = __webpack_require__(/*! is-symbol */ "./node_modules/is-symbol/index.js");
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return runMigration; });
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
 
-var isBigInt = __webpack_require__(/*! is-bigint */ "./node_modules/is-bigint/index.js"); // eslint-disable-next-line consistent-return
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
 
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
 
-module.exports = function whichBoxedPrimitive(value) {
-  // eslint-disable-next-line eqeqeq
-  if (value == null || typeof value !== 'object' && typeof value !== 'function') {
-    return null;
-  }
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
 
-  if (isString(value)) {
-    return 'String';
-  }
+function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
 
-  if (isNumber(value)) {
-    return 'Number';
-  }
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
 
-  if (isBoolean(value)) {
-    return 'Boolean';
+async function runMigration(db, uuid) {
+  function getValue(node) {
+    return node.expr != null ? node.expr : node.cachedValue;
   }
 
-  if (isSymbol(value)) {
-    return 'Symbol';
-  }
+  db.execQuery(`
+CREATE TABLE zero_budget_months
+  (id TEXT PRIMARY KEY,
+   buffered INTEGER DEFAULT 0); 
 
-  if (isBigInt(value)) {
-    return 'BigInt';
-  }
-};
+CREATE TABLE zero_budgets
+  (id TEXT PRIMARY KEY,
+   month INTEGER,
+   category TEXT,
+   amount INTEGER DEFAULT 0,
+   carryover INTEGER DEFAULT 0);
 
-/***/ }),
+CREATE TABLE reflect_budgets
+  (id TEXT PRIMARY KEY,
+   month INTEGER,
+   category TEXT,
+   amount INTEGER DEFAULT 0,
+   carryover INTEGER DEFAULT 0);
 
-/***/ "./node_modules/which-collection/index.js":
-/*!************************************************!*\
-  !*** ./node_modules/which-collection/index.js ***!
-  \************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+CREATE TABLE notes
+  (id TEXT PRIMARY KEY,
+   note TEXT);
 
-"use strict";
+CREATE TABLE kvcache (key TEXT PRIMARY KEY, value TEXT);
+CREATE TABLE kvcache_key (id INTEGER PRIMARY KEY, key REAL);
+`); // Migrate budget amounts and carryover
 
+  let budget = db.runQuery(`SELECT * FROM spreadsheet_cells WHERE name LIKE 'budget%!budget-%'`, [], true);
+  db.transaction(() => {
+    budget.map(monthBudget => {
+      let match = monthBudget.name.match(/^(budget-report|budget)(\d+)!budget-(.+)$/);
 
-var isMap = __webpack_require__(/*! is-map */ "./node_modules/is-map/index.js");
+      if (match == null) {
+        console.log('Warning: invalid budget month name', monthBudget.name);
+        return;
+      }
 
-var isSet = __webpack_require__(/*! is-set */ "./node_modules/is-set/index.js");
+      let type = match[1];
+      let month = match[2].slice(0, 4) + '-' + match[2].slice(4);
+      let dbmonth = parseInt(match[2]);
+      let cat = match[3];
+      let amount = parseInt(getValue(monthBudget));
 
-var isWeakMap = __webpack_require__(/*! is-weakmap */ "./node_modules/is-weakmap/index.js");
+      if (isNaN(amount)) {
+        amount = 0;
+      }
 
-var isWeakSet = __webpack_require__(/*! is-weakset */ "./node_modules/is-weakset/index.js");
+      let sheetName = monthBudget.name.split('!')[0];
+      let carryover = db.runQuery('SELECT * FROM spreadsheet_cells WHERE name = ?', [`${sheetName}!carryover-${cat}`], true);
+      let table = type === 'budget-report' ? 'reflect_budgets' : 'zero_budgets';
+      db.runQuery(`INSERT INTO ${table} (id, month, category, amount, carryover) VALUES (?, ?, ?, ?, ?)`, [`${month}-${cat}`, dbmonth, cat, amount, carryover.length > 0 && getValue(carryover[0]) === 'true' ? 1 : 0]);
+    });
+  }); // Migrate buffers
 
-module.exports = function whichCollection(value) {
-  if (value && typeof value === 'object') {
-    if (isMap(value)) {
-      return 'Map';
-    }
+  let buffers = db.runQuery(`SELECT * FROM spreadsheet_cells WHERE name LIKE 'budget%!buffered'`, [], true);
+  db.transaction(() => {
+    buffers.map(buffer => {
+      let match = buffer.name.match(/^budget(\d+)!buffered$/);
 
-    if (isSet(value)) {
-      return 'Set';
-    }
+      if (match) {
+        let month = match[1].slice(0, 4) + '-' + match[1].slice(4);
+        let amount = parseInt(getValue(buffer));
 
-    if (isWeakMap(value)) {
-      return 'WeakMap';
-    }
+        if (isNaN(amount)) {
+          amount = 0;
+        }
 
-    if (isWeakSet(value)) {
-      return 'WeakSet';
+        db.runQuery(`INSERT INTO zero_budget_months (id, buffered) VALUES (?, ?)`, [month, amount]);
+      }
+    });
+  }); // Migrate notes
+
+  let notes = db.runQuery(`SELECT * FROM spreadsheet_cells WHERE name LIKE 'notes!%'`, [], true);
+
+  let parseNote = str => {
+    try {
+      let value = JSON.parse(str);
+      return value && value !== '' ? value : null;
+    } catch (e) {
+      return null;
     }
-  }
+  };
 
-  return false;
-};
+  db.transaction(() => {
+    notes.forEach(note => {
+      let parsed = parseNote(getValue(note));
+
+      if (parsed) {
+        let _note$name$split = note.name.split('!'),
+            _note$name$split2 = _slicedToArray(_note$name$split, 2),
+            id = _note$name$split2[1];
+
+        db.runQuery(`INSERT INTO notes (id, note) VALUES (?, ?)`, [id, parsed]);
+      }
+    });
+  });
+  db.execQuery(`
+    DROP TABLE spreadsheet_cells;
+    ANALYZE;
+    VACUUM;
+  `);
+}
 
 /***/ }),
 
-/***/ "./node_modules/which-typed-array/index.js":
-/*!*************************************************!*\
-  !*** ./node_modules/which-typed-array/index.js ***!
-  \*************************************************/
+/***/ "./packages/loot-core/node_modules/adm-zip/adm-zip.js":
+/*!************************************************************!*\
+  !*** ./packages/loot-core/node_modules/adm-zip/adm-zip.js ***!
+  \************************************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-"use strict";
-
-
-var forEach = __webpack_require__(/*! foreach */ "./node_modules/foreach/index.js");
+var Utils = __webpack_require__(/*! ./util */ "./packages/loot-core/node_modules/adm-zip/util/index.js");
 
-var availableTypedArrays = __webpack_require__(/*! available-typed-arrays */ "./node_modules/available-typed-arrays/index.js");
+var fs = Utils.FileSystem.require(),
+    pth = __webpack_require__(/*! path */ "path");
 
-var callBound = __webpack_require__(/*! call-bind/callBound */ "./node_modules/call-bind/callBound.js");
+fs.existsSync = fs.existsSync || pth.existsSync;
 
-var $toString = callBound('Object.prototype.toString');
+var ZipEntry = __webpack_require__(/*! ./zipEntry */ "./packages/loot-core/node_modules/adm-zip/zipEntry.js"),
+    ZipFile = __webpack_require__(/*! ./zipFile */ "./packages/loot-core/node_modules/adm-zip/zipFile.js");
 
-var hasSymbols = __webpack_require__(/*! has-symbols */ "./node_modules/has-symbols/index.js")();
+var isWin = /^win/.test(process.platform);
 
-var hasToStringTag = hasSymbols && typeof Symbol.toStringTag === 'symbol';
-var typedArrays = availableTypedArrays();
-var $slice = callBound('String.prototype.slice');
-var toStrTags = {};
+module.exports = function (
+/*String*/
+input) {
+  var _zip = undefined,
+      _filename = "";
 
-var gOPD = __webpack_require__(/*! es-abstract/helpers/getOwnPropertyDescriptor */ "./node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js");
+  if (input && typeof input === "string") {
+    // load zip file
+    if (fs.existsSync(input)) {
+      _filename = input;
+      _zip = new ZipFile(input, Utils.Constants.FILE);
+    } else {
+      throw Utils.Errors.INVALID_FILENAME;
+    }
+  } else if (input && Buffer.isBuffer(input)) {
+    // load buffer
+    _zip = new ZipFile(input, Utils.Constants.BUFFER);
+  } else {
+    // create new zip file
+    _zip = new ZipFile(null, Utils.Constants.NONE);
+  }
 
-var getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');
+  function sanitize(prefix, name) {
+    prefix = pth.resolve(pth.normalize(prefix));
+    var parts = name.split('/');
 
-if (hasToStringTag && gOPD && getPrototypeOf) {
-  forEach(typedArrays, function (typedArray) {
-    if (typeof global[typedArray] === 'function') {
-      var arr = new global[typedArray]();
+    for (var i = 0, l = parts.length; i < l; i++) {
+      var path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep)));
 
-      if (!(Symbol.toStringTag in arr)) {
-        throw new EvalError('this engine has support for Symbol.toStringTag, but ' + typedArray + ' does not have the property! Please report this.');
+      if (path.indexOf(prefix) === 0) {
+        return path;
       }
+    }
 
-      var proto = getPrototypeOf(arr);
-      var descriptor = gOPD(proto, Symbol.toStringTag);
+    return pth.normalize(pth.join(prefix, pth.basename(name)));
+  }
 
-      if (!descriptor) {
-        var superProto = getPrototypeOf(proto);
-        descriptor = gOPD(superProto, Symbol.toStringTag);
-      }
+  function getEntry(
+  /*Object*/
+  entry) {
+    if (entry && _zip) {
+      var item; // If entry was given as a file name
 
-      toStrTags[typedArray] = descriptor.get;
-    }
-  });
-}
+      if (typeof entry === "string") item = _zip.getEntry(entry); // if entry was given as a ZipEntry object
 
-var tryTypedArrays = function tryAllTypedArrays(value) {
-  var foundName = false;
-  forEach(toStrTags, function (getter, typedArray) {
-    if (!foundName) {
-      try {
-        var name = getter.call(value);
+      if (typeof entry === "object" && typeof entry.entryName !== "undefined" && typeof entry.header !== "undefined") item = _zip.getEntry(entry.entryName);
 
-        if (name === typedArray) {
-          foundName = name;
-        }
-      } catch (e) {}
+      if (item) {
+        return item;
+      }
     }
-  });
-  return foundName;
-};
-
-var isTypedArray = __webpack_require__(/*! is-typed-array */ "./node_modules/is-typed-array/index.js");
 
-module.exports = function whichTypedArray(value) {
-  if (!isTypedArray(value)) {
-    return false;
+    return null;
   }
 
-  if (!hasToStringTag) {
-    return $slice($toString(value), 8, -1);
-  }
+  return {
+    /**
+     * Extracts the given entry from the archive and returns the content as a Buffer object
+     * @param entry ZipEntry object or String with the full path of the entry
+     *
+     * @return Buffer or Null in case of error
+     */
+    readFile: function (
+    /*Object*/
+    entry) {
+      var item = getEntry(entry);
+      return item && item.getData() || null;
+    },
 
-  return tryTypedArrays(value);
-};
+    /**
+     * Asynchronous readFile
+     * @param entry ZipEntry object or String with the full path of the entry
+     * @param callback
+     *
+     * @return Buffer or Null in case of error
+     */
+    readFileAsync: function (
+    /*Object*/
+    entry,
+    /*Function*/
+    callback) {
+      var item = getEntry(entry);
 
-/***/ }),
+      if (item) {
+        item.getDataAsync(callback);
+      } else {
+        callback(null, "getEntry failed for:" + entry);
+      }
+    },
 
-/***/ "./packages/api/injected.js":
-/*!**********************************!*\
-  !*** ./packages/api/injected.js ***!
-  \**********************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+    /**
+     * Extracts the given entry from the archive and returns the content as plain text in the given encoding
+     * @param entry ZipEntry object or String with the full path of the entry
+     * @param encoding Optional. If no encoding is specified utf8 is used
+     *
+     * @return String
+     */
+    readAsText: function (
+    /*Object*/
+    entry,
+    /*String - Optional*/
+    encoding) {
+      var item = getEntry(entry);
 
-// TODO: comment on why it works this way
-let send;
-module.exports = {
-  send
-};
+      if (item) {
+        var data = item.getData();
 
-/***/ }),
+        if (data && data.length) {
+          return data.toString(encoding || "utf8");
+        }
+      }
 
-/***/ "./packages/api/methods.js":
-/*!*********************************!*\
-  !*** ./packages/api/methods.js ***!
-  \*********************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+      return "";
+    },
 
-const q = __webpack_require__(/*! ./query */ "./packages/api/query.js");
+    /**
+     * Asynchronous readAsText
+     * @param entry ZipEntry object or String with the full path of the entry
+     * @param callback
+     * @param encoding Optional. If no encoding is specified utf8 is used
+     *
+     * @return String
+     */
+    readAsTextAsync: function (
+    /*Object*/
+    entry,
+    /*Function*/
+    callback,
+    /*String - Optional*/
+    encoding) {
+      var item = getEntry(entry);
 
-const injected = __webpack_require__(/*! ./injected */ "./packages/api/injected.js");
+      if (item) {
+        item.getDataAsync(function (data, err) {
+          if (err) {
+            callback(data, err);
+            return;
+          }
 
-function send(name, args) {
-  return injected.send(name, args);
-}
+          if (data && data.length) {
+            callback(data.toString(encoding || "utf8"));
+          } else {
+            callback("");
+          }
+        });
+      } else {
+        callback("");
+      }
+    },
 
-async function runImport(name, func) {
-  await send('api/start-import', {
-    budgetName: name
-  });
+    /**
+     * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory
+     *
+     * @param entry
+     */
+    deleteFile: function (
+    /*Object*/
+    entry) {
+      // @TODO: test deleteFile
+      var item = getEntry(entry);
 
-  try {
-    await func();
-  } catch (e) {
-    await send('api/abort-import');
-    throw e;
-  }
+      if (item) {
+        _zip.deleteEntry(item.entryName);
+      }
+    },
 
-  await send('api/finish-import');
-}
+    /**
+     * Adds a comment to the zip. The zip must be rewritten after adding the comment.
+     *
+     * @param comment
+     */
+    addZipComment: function (
+    /*String*/
+    comment) {
+      // @TODO: test addZipComment
+      _zip.comment = comment;
+    },
 
-async function loadBudget(budgetId) {
-  return send('api/load-budget', {
-    id: budgetId
-  });
-}
+    /**
+     * Returns the zip comment
+     *
+     * @return String
+     */
+    getZipComment: function () {
+      return _zip.comment || '';
+    },
 
-async function batchBudgetUpdates(func) {
-  await send('api/batch-budget-start');
+    /**
+     * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment
+     * The comment cannot exceed 65535 characters in length
+     *
+     * @param entry
+     * @param comment
+     */
+    addZipEntryComment: function (
+    /*Object*/
+    entry,
+    /*String*/
+    comment) {
+      var item = getEntry(entry);
 
-  try {
-    await func();
-  } finally {
-    await send('api/batch-budget-end');
-  }
-}
+      if (item) {
+        item.comment = comment;
+      }
+    },
 
-function runQuery(query) {
-  return send('api/query', {
-    query: query.serialize()
-  });
-}
+    /**
+     * Returns the comment of the specified entry
+     *
+     * @param entry
+     * @return String
+     */
+    getZipEntryComment: function (
+    /*Object*/
+    entry) {
+      var item = getEntry(entry);
 
-function getBudgetMonths() {
-  return send('api/budget-months');
-}
+      if (item) {
+        return item.comment || '';
+      }
 
-function getBudgetMonth(month) {
-  return send('api/budget-month', {
-    month
-  });
-}
+      return '';
+    },
 
-function setBudgetAmount(month, categoryId, value) {
-  return send('api/budget-set-amount', {
-    month,
-    categoryId,
-    amount: value
-  });
-}
+    /**
+     * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content
+     *
+     * @param entry
+     * @param content
+     */
+    updateFile: function (
+    /*Object*/
+    entry,
+    /*Buffer*/
+    content) {
+      var item = getEntry(entry);
 
-function setBudgetCarryover(month, categoryId, flag) {
-  return send('api/budget-set-carryover', {
-    month,
-    categoryId,
-    flag
-  });
-}
+      if (item) {
+        item.setData(content);
+      }
+    },
 
-function addTransactions(accountId, transactions) {
-  return send('api/transactions-add', {
-    accountId,
-    transactions
-  });
-}
+    /**
+     * Adds a file from the disk to the archive
+     *
+     * @param localPath File to add to zip
+     * @param zipPath Optional path inside the zip
+     * @param zipName Optional name for the file
+     */
+    addLocalFile: function (
+    /*String*/
+    localPath,
+    /*String*/
+    zipPath,
+    /*String*/
+    zipName) {
+      if (fs.existsSync(localPath)) {
+        if (zipPath) {
+          zipPath = zipPath.split("\\").join("/");
 
-function importTransactions(accountId, transactions) {
-  return send('api/transactions-import', {
-    accountId,
-    transactions
-  });
-}
+          if (zipPath.charAt(zipPath.length - 1) !== "/") {
+            zipPath += "/";
+          }
+        } else {
+          zipPath = "";
+        }
 
-function getTransactions(accountId, startDate, endDate) {
-  return send('api/transactions-get', {
-    accountId,
-    startDate,
-    endDate
-  });
-}
+        var p = localPath.split("\\").join("/").split("/").pop();
 
-function filterTransactions(accountId, text) {
-  return send('api/transactions-filter', {
-    accountId,
-    text
-  });
-}
+        if (zipName) {
+          this.addFile(zipPath + zipName, fs.readFileSync(localPath), "", 0);
+        } else {
+          this.addFile(zipPath + p, fs.readFileSync(localPath), "", 0);
+        }
+      } else {
+        throw Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath);
+      }
+    },
 
-function updateTransaction(id, fields) {
-  return send('api/transaction-update', {
-    id,
-    fields
-  });
-}
+    /**
+     * Adds a local directory and all its nested files and directories to the archive
+     *
+     * @param localPath
+     * @param zipPath optional path inside zip
+     * @param filter optional RegExp or Function if files match will
+     *               be included.
+     */
+    addLocalFolder: function (
+    /*String*/
+    localPath,
+    /*String*/
+    zipPath,
+    /*RegExp|Function*/
+    filter) {
+      if (filter === undefined) {
+        filter = function () {
+          return true;
+        };
+      } else if (filter instanceof RegExp) {
+        filter = function (filter) {
+          return function (filename) {
+            return filter.test(filename);
+          };
+        }(filter);
+      }
 
-function deleteTransaction(id) {
-  return send('api/transaction-delete', {
-    id
-  });
-}
+      if (zipPath) {
+        zipPath = zipPath.split("\\").join("/");
 
-function getAccounts() {
-  return send('api/accounts-get');
-}
+        if (zipPath.charAt(zipPath.length - 1) !== "/") {
+          zipPath += "/";
+        }
+      } else {
+        zipPath = "";
+      } // normalize the path first
 
-function createAccount(account, initialBalance) {
-  return send('api/account-create', {
-    account,
-    initialBalance
-  });
-}
 
-function updateAccount(id, fields) {
-  return send('api/account-update', {
-    id,
-    fields
-  });
-}
+      localPath = pth.normalize(localPath);
+      localPath = localPath.split("\\").join("/"); //windows fix
 
-function closeAccount(id, transferAccountId, transferCategoryId) {
-  return send('api/account-close', {
-    id,
-    transferAccountId,
-    transferCategoryId
-  });
-}
+      if (localPath.charAt(localPath.length - 1) !== "/") localPath += "/";
 
-function reopenAccount(id) {
-  return send('api/account-reopen', {
-    id
-  });
-}
+      if (fs.existsSync(localPath)) {
+        var items = Utils.findFiles(localPath),
+            self = this;
 
-function deleteAccount(id) {
-  return send('api/account-delete', {
-    id
-  });
-}
+        if (items.length) {
+          items.forEach(function (path) {
+            var p = path.split("\\").join("/").replace(new RegExp(localPath.replace(/(\(|\))/g, '\\$1'), 'i'), ""); //windows fix
 
-function getCategoryGroups() {
-  return send('api/categories-get', {
-    grouped: true
-  });
-}
+            if (filter(p)) {
+              if (p.charAt(p.length - 1) !== "/") {
+                self.addFile(zipPath + p, fs.readFileSync(path), "", 0);
+              } else {
+                self.addFile(zipPath + p, Buffer.alloc(0), "", 0);
+              }
+            }
+          });
+        }
+      } else {
+        throw Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath);
+      }
+    },
 
-function createCategoryGroup(group) {
-  return send('api/category-group-create', {
-    group
-  });
-}
+    /**
+     * Allows you to create a entry (file or directory) in the zip file.
+     * If you want to create a directory the entryName must end in / and a null buffer should be provided.
+     * Comment and attributes are optional
+     *
+     * @param entryName
+     * @param content
+     * @param comment
+     * @param attr
+     */
+    addFile: function (
+    /*String*/
+    entryName,
+    /*Buffer*/
+    content,
+    /*String*/
+    comment,
+    /*Number*/
+    attr) {
+      var entry = new ZipEntry();
+      entry.entryName = entryName;
+      entry.comment = comment || "";
 
-function updateCategoryGroup(id, fields) {
-  return send('api/category-group-update', {
-    id,
-    fields
-  });
-}
+      if (!attr) {
+        if (entry.isDirectory) {
+          attr = 0o40755 << 16 | 0x10; // (permissions drwxr-xr-x) + (MS-DOS directory flag)
+        } else {
+          attr = 0o644 << 16; // permissions -r-wr--r--
+        }
+      }
 
-function deleteCategoryGroup(id, transferCategoryId) {
-  return send('api/category-group-delete', {
-    id,
-    transferCategoryId
-  });
-}
+      entry.attr = attr;
+      entry.setData(content);
 
-function getCategories() {
-  return send('api/categories-get', {
-    grouped: false
-  });
-}
+      _zip.setEntry(entry);
+    },
 
-function createCategory(category) {
-  return send('api/category-create', {
-    category
-  });
-}
+    /**
+     * Returns an array of ZipEntry objects representing the files and folders inside the archive
+     *
+     * @return Array
+     */
+    getEntries: function () {
+      if (_zip) {
+        return _zip.entries;
+      } else {
+        return [];
+      }
+    },
 
-function updateCategory(id, fields) {
-  return send('api/category-update', {
-    id,
-    fields
-  });
-}
+    /**
+     * Returns a ZipEntry object representing the file or folder specified by ``name``.
+     *
+     * @param name
+     * @return ZipEntry
+     */
+    getEntry: function (
+    /*String*/
+    name) {
+      return getEntry(name);
+    },
 
-function deleteCategory(id, transferCategoryId) {
-  return send('api/category-delete', {
-    id,
-    transferCategoryId
-  });
-}
+    /**
+     * Extracts the given entry to the given targetPath
+     * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted
+     *
+     * @param entry ZipEntry object or String with the full path of the entry
+     * @param targetPath Target folder where to write the file
+     * @param maintainEntryPath If maintainEntryPath is true and the entry is inside a folder, the entry folder
+     *                          will be created in targetPath as well. Default is TRUE
+     * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
+     *                  Default is FALSE
+     *
+     * @return Boolean
+     */
+    extractEntryTo: function (
+    /*Object*/
+    entry,
+    /*String*/
+    targetPath,
+    /*Boolean*/
+    maintainEntryPath,
+    /*Boolean*/
+    overwrite) {
+      overwrite = overwrite || false;
+      maintainEntryPath = typeof maintainEntryPath === "undefined" ? true : maintainEntryPath;
+      var item = getEntry(entry);
 
-function getPayees() {
-  return send('api/payees-get');
-}
+      if (!item) {
+        throw Utils.Errors.NO_ENTRY;
+      }
 
-function createPayee(payee) {
-  return send('api/payee-create', {
-    payee
-  });
-}
+      var entryName = item.entryName;
+      var target = sanitize(targetPath, maintainEntryPath ? entryName : pth.basename(entryName));
 
-function updatePayee(id, fields) {
-  return send('api/payee-update', {
-    id,
-    fields
-  });
-}
+      if (item.isDirectory) {
+        target = pth.resolve(target, "..");
 
-function deletePayee(id) {
-  return send('api/payee-delete', {
-    id
-  });
-}
+        var children = _zip.getEntryChildren(item);
 
-function getPayeeRules(payeeId) {
-  return send('api/payee-rules-get', {
-    payeeId
-  });
-}
+        children.forEach(function (child) {
+          if (child.isDirectory) return;
+          var content = child.getData();
 
-function createPayeeRule(payeeId, rule) {
-  return send('api/payee-rule-create', {
-    payee_id: payeeId,
-    rule
-  });
-}
+          if (!content) {
+            throw Utils.Errors.CANT_EXTRACT_FILE;
+          }
 
-function updatePayeeRule(id, fields) {
-  return send('api/payee-rule-update', {
-    id,
-    fields
-  });
-}
+          var childName = sanitize(targetPath, maintainEntryPath ? child.entryName : pth.basename(child.entryName));
+          Utils.writeFileTo(childName, content, overwrite);
+        });
+        return true;
+      }
 
-function deletePayeeRule(id) {
-  return send('api/payee-rule-delete', {
-    id
-  });
-}
+      var content = item.getData();
+      if (!content) throw Utils.Errors.CANT_EXTRACT_FILE;
 
-module.exports = {
-  runImport,
-  runQuery,
-  q,
-  loadBudget,
-  batchBudgetUpdates,
-  getBudgetMonths,
-  getBudgetMonth,
-  setBudgetAmount,
-  setBudgetCarryover,
-  addTransactions,
-  importTransactions,
-  filterTransactions,
-  getTransactions,
-  updateTransaction,
-  deleteTransaction,
-  getAccounts,
-  createAccount,
-  updateAccount,
-  closeAccount,
-  reopenAccount,
-  deleteAccount,
-  getCategories,
-  createCategoryGroup,
-  updateCategoryGroup,
-  deleteCategoryGroup,
-  createCategory,
-  updateCategory,
-  deleteCategory,
-  getPayees,
-  createPayee,
-  updatePayee,
-  deletePayee,
-  getPayeeRules,
-  createPayeeRule,
-  deletePayeeRule,
-  updatePayeeRule
-};
+      if (fs.existsSync(target) && !overwrite) {
+        throw Utils.Errors.CANT_OVERRIDE;
+      }
 
-/***/ }),
+      Utils.writeFileTo(target, content, overwrite);
+      return true;
+    },
 
-/***/ "./packages/api/query.js":
-/*!*******************************!*\
-  !*** ./packages/api/query.js ***!
-  \*******************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+    /**
+     * Test the archive
+     *
+     */
+    test: function () {
+      if (!_zip) {
+        return false;
+      }
 
-function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
+      for (var entry in _zip.entries) {
+        try {
+          if (entry.isDirectory) {
+            continue;
+          }
 
-function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
+          var content = _zip.entries[entry].getData();
 
-function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+          if (!content) {
+            return false;
+          }
+        } catch (err) {
+          return false;
+        }
+      }
 
-class Query {
-  constructor(state) {
-    this.state = _objectSpread({
-      filterExpressions: state.filterExpressions || [],
-      selectExpressions: state.selectExpressions || [],
-      groupExpressions: state.groupExpressions || [],
-      orderExpressions: state.orderExpressions || [],
-      calculation: false,
-      rawMode: false,
-      withDead: false,
-      limit: null,
-      offset: null
-    }, state);
-  }
+      return true;
+    },
 
-  filter(expr) {
-    return new Query(_objectSpread(_objectSpread({}, this.state), {}, {
-      filterExpressions: [...this.state.filterExpressions, expr]
-    }));
-  }
+    /**
+     * Extracts the entire archive to the given location
+     *
+     * @param targetPath Target location
+     * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
+     *                  Default is FALSE
+     */
+    extractAllTo: function (
+    /*String*/
+    targetPath,
+    /*Boolean*/
+    overwrite) {
+      overwrite = overwrite || false;
 
-  unfilter(exprs) {
-    let exprSet = new Set(exprs);
-    return new Query(_objectSpread(_objectSpread({}, this.state), {}, {
-      filterExpressions: this.state.filterExpressions.filter(expr => !exprSet.has(Object.keys(expr)[0]))
-    }));
-  }
+      if (!_zip) {
+        throw Utils.Errors.NO_ZIP;
+      }
 
-  select(exprs = []) {
-    if (!Array.isArray(exprs)) {
-      exprs = [exprs];
-    }
+      _zip.entries.forEach(function (entry) {
+        var entryName = sanitize(targetPath, entry.entryName.toString());
 
-    let query = new Query(_objectSpread(_objectSpread({}, this.state), {}, {
-      selectExpressions: exprs
-    }));
-    query.state.calculation = false;
-    return query;
-  }
+        if (entry.isDirectory) {
+          Utils.makeDir(entryName);
+          return;
+        }
 
-  calculate(expr) {
-    let query = this.select({
-      result: expr
-    });
-    query.state.calculation = true;
-    return query;
-  }
+        var content = entry.getData();
 
-  groupBy(exprs) {
-    if (!Array.isArray(exprs)) {
-      exprs = [exprs];
-    }
+        if (!content) {
+          throw Utils.Errors.CANT_EXTRACT_FILE;
+        }
 
-    return new Query(_objectSpread(_objectSpread({}, this.state), {}, {
-      groupExpressions: [...this.state.groupExpressions, ...exprs]
-    }));
-  }
+        Utils.writeFileTo(entryName, content, overwrite);
 
-  orderBy(exprs) {
-    if (!Array.isArray(exprs)) {
-      exprs = [exprs];
-    }
+        try {
+          fs.utimesSync(entryName, entry.header.time, entry.header.time);
+        } catch (err) {
+          throw Utils.Errors.CANT_EXTRACT_FILE;
+        }
+      });
+    },
 
-    return new Query(_objectSpread(_objectSpread({}, this.state), {}, {
-      orderExpressions: [...this.state.orderExpressions, ...exprs]
-    }));
-  }
+    /**
+     * Asynchronous extractAllTo
+     *
+     * @param targetPath Target location
+     * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
+     *                  Default is FALSE
+     * @param callback
+     */
+    extractAllToAsync: function (
+    /*String*/
+    targetPath,
+    /*Boolean*/
+    overwrite,
+    /*Function*/
+    callback) {
+      if (!callback) {
+        callback = function () {};
+      }
 
-  limit(num) {
-    return new Query(_objectSpread(_objectSpread({}, this.state), {}, {
-      limit: num
-    }));
-  }
+      overwrite = overwrite || false;
 
-  offset(num) {
-    return new Query(_objectSpread(_objectSpread({}, this.state), {}, {
-      offset: num
-    }));
-  }
+      if (!_zip) {
+        callback(new Error(Utils.Errors.NO_ZIP));
+        return;
+      }
 
-  raw() {
-    return new Query(_objectSpread(_objectSpread({}, this.state), {}, {
-      rawMode: true
-    }));
-  }
+      var entries = _zip.entries;
+      var i = entries.length;
+      entries.forEach(function (entry) {
+        if (i <= 0) return; // Had an error already
 
-  withDead() {
-    return new Query(_objectSpread(_objectSpread({}, this.state), {}, {
-      withDead: true
-    }));
-  }
+        var entryName = pth.normalize(entry.entryName.toString());
 
-  options(opts) {
-    return new Query(_objectSpread(_objectSpread({}, this.state), {}, {
-      tableOptions: opts
-    }));
-  }
+        if (entry.isDirectory) {
+          Utils.makeDir(sanitize(targetPath, entryName));
+          if (--i === 0) callback(undefined);
+          return;
+        }
 
-  serialize() {
-    return this.state;
-  }
+        entry.getDataAsync(function (content, err) {
+          if (i <= 0) return;
 
-}
+          if (err) {
+            callback(new Error(err));
+            return;
+          }
 
-module.exports = function q(table) {
-  return new Query({
-    table
-  });
-};
+          if (!content) {
+            i = 0;
+            callback(new Error(Utils.Errors.CANT_EXTRACT_FILE));
+            return;
+          }
 
-/***/ }),
+          Utils.writeFileToAsync(sanitize(targetPath, entryName), content, overwrite, function (succ) {
+            try {
+              fs.utimesSync(pth.resolve(targetPath, entryName), entry.header.time, entry.header.time);
+            } catch (err) {
+              callback(new Error('Unable to set utimes'));
+            }
 
-/***/ "./packages/api/utils.js":
-/*!*******************************!*\
-  !*** ./packages/api/utils.js ***!
-  \*******************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+            if (i <= 0) return;
 
-function amountToInteger(n) {
-  return Math.round(n * 100) | 0;
-}
+            if (!succ) {
+              i = 0;
+              callback(new Error('Unable to write'));
+              return;
+            }
 
-function integerToAmount(n) {
-  return parseFloat((n / 100).toFixed(2));
-}
+            if (--i === 0) callback(undefined);
+          });
+        });
+      });
+    },
 
-module.exports = {
-  amountToInteger,
-  integerToAmount
+    /**
+     * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip
+     *
+     * @param targetFileName
+     * @param callback
+     */
+    writeZip: function (
+    /*String*/
+    targetFileName,
+    /*Function*/
+    callback) {
+      if (arguments.length === 1) {
+        if (typeof targetFileName === "function") {
+          callback = targetFileName;
+          targetFileName = "";
+        }
+      }
+
+      if (!targetFileName && _filename) {
+        targetFileName = _filename;
+      }
+
+      if (!targetFileName) return;
+
+      var zipData = _zip.compressToBuffer();
+
+      if (zipData) {
+        var ok = Utils.writeFileTo(targetFileName, zipData, true);
+        if (typeof callback === 'function') callback(!ok ? new Error("failed") : null, "");
+      }
+    },
+
+    /**
+     * Returns the content of the entire zip file as a Buffer object
+     *
+     * @return Buffer
+     */
+    toBuffer: function (
+    /*Function*/
+    onSuccess,
+    /*Function*/
+    onFail,
+    /*Function*/
+    onItemStart,
+    /*Function*/
+    onItemEnd) {
+      this.valueOf = 2;
+
+      if (typeof onSuccess === "function") {
+        _zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd);
+
+        return null;
+      }
+
+      return _zip.compressToBuffer();
+    }
+  };
 };
 
 /***/ }),
 
-/***/ "./packages/import-ynab4/importer.js":
-/*!*******************************************!*\
-  !*** ./packages/import-ynab4/importer.js ***!
-  \*******************************************/
+/***/ "./packages/loot-core/node_modules/adm-zip/headers/entryHeader.js":
+/*!************************************************************************!*\
+  !*** ./packages/loot-core/node_modules/adm-zip/headers/entryHeader.js ***!
+  \************************************************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+var Utils = __webpack_require__(/*! ../util */ "./packages/loot-core/node_modules/adm-zip/util/index.js"),
+    Constants = Utils.Constants;
+/* The central directory file header */
 
-function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
 
-function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+module.exports = function () {
+  var _verMade = 0x0A,
+      _version = 0x0A,
+      _flags = 0,
+      _method = 0,
+      _time = 0,
+      _crc = 0,
+      _compressedSize = 0,
+      _size = 0,
+      _fnameLen = 0,
+      _extraLen = 0,
+      _comLen = 0,
+      _diskStart = 0,
+      _inattr = 0,
+      _attr = 0,
+      _offset = 0;
+  var _dataHeader = {};
 
-function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
+  function setTime(val) {
+    val = new Date(val);
+    _time = (val.getFullYear() - 1980 & 0x7f) << 25 // b09-16 years from 1980
+    | val.getMonth() + 1 << 21 // b05-08 month
+    | val.getDate() << 16 // b00-04 hour
+    // 2 bytes time
+    | val.getHours() << 11 // b11-15 hour
+    | val.getMinutes() << 5 // b05-10 minute
+    | val.getSeconds() >> 1; // b00-04 seconds divided by 2
+  }
 
-function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
+  setTime(+new Date());
+  return {
+    get made() {
+      return _verMade;
+    },
 
-function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
+    set made(val) {
+      _verMade = val;
+    },
 
-const d = __webpack_require__(/*! date-fns */ "./node_modules/date-fns/esm/index.js");
+    get version() {
+      return _version;
+    },
 
-const normalizePathSep = __webpack_require__(/*! slash */ "./node_modules/slash/index.js");
+    set version(val) {
+      _version = val;
+    },
 
-const uuid = __webpack_require__(/*! uuid */ "./node_modules/uuid/index.js");
+    get flags() {
+      return _flags;
+    },
 
-const AdmZip = __webpack_require__(/*! adm-zip */ "./node_modules/adm-zip/adm-zip.js");
+    set flags(val) {
+      _flags = val;
+    },
 
-const actual = __webpack_require__(/*! @actual-app/api/methods */ "./packages/api/methods.js");
+    get method() {
+      return _method;
+    },
 
-const _require = __webpack_require__(/*! @actual-app/api/utils */ "./packages/api/utils.js"),
-      amountToInteger = _require.amountToInteger; // Utils
+    set method(val) {
+      _method = val;
+    },
 
+    get time() {
+      return new Date((_time >> 25 & 0x7f) + 1980, (_time >> 21 & 0x0f) - 1, _time >> 16 & 0x1f, _time >> 11 & 0x1f, _time >> 5 & 0x3f, (_time & 0x1f) << 1);
+    },
 
-function mapAccountType(type) {
-  switch (type) {
-    case 'Cash':
-    case 'Checking':
-      return 'checking';
+    set time(val) {
+      setTime(val);
+    },
 
-    case 'CreditCard':
-      return 'credit';
+    get crc() {
+      return _crc;
+    },
 
-    case 'Savings':
-      return 'savings';
+    set crc(val) {
+      _crc = val;
+    },
 
-    case 'InvestmentAccount':
-      return 'investment';
+    get compressedSize() {
+      return _compressedSize;
+    },
 
-    case 'Mortgage':
-      return 'mortgage';
+    set compressedSize(val) {
+      _compressedSize = val;
+    },
 
-    default:
-      return 'other';
-  }
-}
+    get size() {
+      return _size;
+    },
 
-function sortByKey(arr, key) {
-  return [...arr].sort((item1, item2) => {
-    if (item1[key] < item2[key]) {
-      return -1;
-    } else if (item1[key] > item2[key]) {
-      return 1;
-    }
+    set size(val) {
+      _size = val;
+    },
 
-    return 0;
-  });
-}
+    get fileNameLength() {
+      return _fnameLen;
+    },
 
-function groupBy(arr, keyName) {
-  return arr.reduce(function (obj, item) {
-    var key = item[keyName];
+    set fileNameLength(val) {
+      _fnameLen = val;
+    },
 
-    if (!obj.hasOwnProperty(key)) {
-      obj[key] = [];
-    }
+    get extraLength() {
+      return _extraLen;
+    },
 
-    obj[key].push(item);
-    return obj;
-  }, {});
-}
+    set extraLength(val) {
+      _extraLen = val;
+    },
 
-function _parse(value) {
-  if (typeof value === 'string') {
-    // We don't want parsing to take local timezone into account,
-    // which parsing a string does. Pass the integers manually to
-    // bypass it.
-    let _value$split = value.split('-'),
-        _value$split2 = _slicedToArray(_value$split, 3),
-        year = _value$split2[0],
-        month = _value$split2[1],
-        day = _value$split2[2];
+    get commentLength() {
+      return _comLen;
+    },
 
-    if (day != null) {
-      return new Date(parseInt(year), parseInt(month) - 1, parseInt(day));
-    } else if (month != null) {
-      return new Date(parseInt(year), parseInt(month) - 1, 1);
-    } else {
-      return new Date(parseInt(year), 0, 1);
-    }
-  }
+    set commentLength(val) {
+      _comLen = val;
+    },
 
-  return value;
-}
+    get diskNumStart() {
+      return _diskStart;
+    },
 
-function monthFromDate(date) {
-  return d.format(_parse(date), 'yyyy-MM');
-}
+    set diskNumStart(val) {
+      _diskStart = val;
+    },
 
-function getCurrentMonth() {
-  return d.format(new Date(), 'yyyy-MM');
-} // Importer
+    get inAttr() {
+      return _inattr;
+    },
 
+    set inAttr(val) {
+      _inattr = val;
+    },
 
-async function importAccounts(data, entityIdMap) {
-  return Promise.all(data.accounts.map(async account => {
-    if (!account.isTombstone) {
-      const id = await actual.createAccount({
-        type: mapAccountType(account.accountType),
-        name: account.accountName,
-        offbudget: account.onBudget ? false : true,
-        closed: account.hidden ? true : false
-      });
-      entityIdMap.set(account.entityId, id);
-    }
-  }));
-}
+    get attr() {
+      return _attr;
+    },
 
-async function importCategories(data, entityIdMap) {
-  const masterCategories = sortByKey(data.masterCategories, 'sortableIndex');
-  await Promise.all(masterCategories.map(async masterCategory => {
-    if (masterCategory.type === 'OUTFLOW' && !masterCategory.isTombstone && masterCategory.subCategories && masterCategory.subCategories.some(cat => !cat.isTombstone) > 0) {
-      const id = await actual.createCategoryGroup({
-        name: masterCategory.name,
-        is_income: false
-      });
-      entityIdMap.set(masterCategory.entityId, id);
+    set attr(val) {
+      _attr = val;
+    },
 
-      if (masterCategory.subCategories) {
-        const subCategories = sortByKey(masterCategory.subCategories, 'sortableIndex');
-        subCategories.reverse(); // This can't be done in parallel because sort order depends
-        // on insertion order
+    get offset() {
+      return _offset;
+    },
 
-        for (let category of subCategories) {
-          if (!category.isTombstone) {
-            const id = await actual.createCategory({
-              name: category.name,
-              group_id: entityIdMap.get(category.masterCategoryId)
-            });
-            entityIdMap.set(category.entityId, id);
-          }
-        }
-      }
-    }
-  }));
-}
+    set offset(val) {
+      _offset = val;
+    },
 
-async function importPayees(data, entityIdMap) {
-  for (let payee of data.payees) {
-    if (!payee.isTombstone) {
-      let id = await actual.createPayee({
-        name: payee.name,
-        category: entityIdMap.get(payee.autoFillCategoryId) || null,
-        transfer_acct: entityIdMap.get(payee.targetAccountId) || null
-      }); // TODO: import payee rules
+    get encripted() {
+      return (_flags & 1) === 1;
+    },
 
-      entityIdMap.set(payee.entityId, id);
-    }
-  }
-}
+    get entryHeaderSize() {
+      return Constants.CENHDR + _fnameLen + _extraLen + _comLen;
+    },
 
-async function importTransactions(data, entityIdMap) {
-  const categories = await actual.getCategories();
-  const incomeCategoryId = categories.find(cat => cat.name === 'Income').id;
-  const accounts = await actual.getAccounts();
-  const payees = await actual.getPayees();
+    get realDataOffset() {
+      return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen;
+    },
 
-  function getCategory(id) {
-    if (id == null || id === 'Category/__Split__') {
-      return null;
-    } else if (id === 'Category/__ImmediateIncome__' || id === 'Category/__DeferredIncome__') {
-      return incomeCategoryId;
-    }
+    get dataHeader() {
+      return _dataHeader;
+    },
 
-    return entityIdMap.get(id);
-  }
+    loadDataHeaderFromBinary: function (
+    /*Buffer*/
+    input) {
+      var data = input.slice(_offset, _offset + Constants.LOCHDR); // 30 bytes and should start with "PK\003\004"
 
-  function isOffBudget(acctId) {
-    let acct = accounts.find(acct => acct.id === acctId);
+      if (data.readUInt32LE(0) !== Constants.LOCSIG) {
+        throw Utils.Errors.INVALID_LOC;
+      }
 
-    if (!acct) {
-      throw new Error('Could not find account for transaction when importing');
-    }
+      _dataHeader = {
+        // version needed to extract
+        version: data.readUInt16LE(Constants.LOCVER),
+        // general purpose bit flag
+        flags: data.readUInt16LE(Constants.LOCFLG),
+        // compression method
+        method: data.readUInt16LE(Constants.LOCHOW),
+        // modification time (2 bytes time, 2 bytes date)
+        time: data.readUInt32LE(Constants.LOCTIM),
+        // uncompressed file crc-32 value
+        crc: data.readUInt32LE(Constants.LOCCRC),
+        // compressed size
+        compressedSize: data.readUInt32LE(Constants.LOCSIZ),
+        // uncompressed size
+        size: data.readUInt32LE(Constants.LOCLEN),
+        // filename length
+        fnameLen: data.readUInt16LE(Constants.LOCNAM),
+        // extra field length
+        extraLen: data.readUInt16LE(Constants.LOCEXT)
+      };
+    },
+    loadFromBinary: function (
+    /*Buffer*/
+    data) {
+      // data should be 46 bytes and start with "PK 01 02"
+      if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) {
+        throw Utils.Errors.INVALID_CEN;
+      } // version made by
 
-    return acct.offbudget;
-  } // Go ahead and generate ids for all of the transactions so we can
-  // reliably resolve transfers
 
+      _verMade = data.readUInt16LE(Constants.CENVEM); // version needed to extract
 
-  for (let transaction of data.transactions) {
-    entityIdMap.set(transaction.entityId, uuid.v4());
-  }
+      _version = data.readUInt16LE(Constants.CENVER); // encrypt, decrypt flags
 
-  let sortOrder = 1;
-  let transactionsGrouped = groupBy(data.transactions, 'accountId');
-  await Promise.all(Object.keys(transactionsGrouped).map(async accountId => {
-    let transactions = transactionsGrouped[accountId];
-    let toImport = transactions.map(transaction => {
-      if (transaction.isTombstone) {
-        return;
-      }
+      _flags = data.readUInt16LE(Constants.CENFLG); // compression method
 
-      let id = entityIdMap.get(transaction.entityId);
-      let transferId = entityIdMap.get(transaction.transferTransactionId) || null;
-      let payee = null;
+      _method = data.readUInt16LE(Constants.CENHOW); // modification time (2 bytes time, 2 bytes date)
 
-      if (transferId) {
-        payee = payees.find(p => p.transfer_acct === entityIdMap.get(transaction.targetAccountId)).id;
-      } else {
-        payee = entityIdMap.get(transaction.payeeId);
-      }
+      _time = data.readUInt32LE(Constants.CENTIM); // uncompressed file crc-32 value
 
-      let newTransaction = {
-        id,
-        amount: amountToInteger(transaction.amount),
-        category: isOffBudget(entityIdMap.get(accountId)) ? null : getCategory(transaction.categoryId),
-        date: transaction.date,
-        notes: transaction.memo || null,
-        payee,
-        transfer_id: transferId
-      };
-      newTransaction.subtransactions = transaction.subTransactions && transaction.subTransactions.map((t, i) => {
-        return {
-          amount: amountToInteger(t.amount),
-          category: getCategory(t.categoryId)
-        };
-      });
-      return newTransaction;
-    }).filter(x => x);
-    await actual.addTransactions(entityIdMap.get(accountId), toImport);
-  }));
-}
+      _crc = data.readUInt32LE(Constants.CENCRC); // compressed size
 
-function fillInBudgets(data, categoryBudgets) {
-  // YNAB only contains entries for categories that have been actually
-  // budgeted. That would be fine except that we need to set the
-  // "carryover" flag on each month when carrying debt across months.
-  // To make sure our system has a chance to set this flag on each
-  // category, make sure a budget exists for every category of every
-  // month.
-  const budgets = [...categoryBudgets];
-  data.masterCategories.forEach(masterCategory => {
-    if (masterCategory.subCategories) {
-      masterCategory.subCategories.forEach(category => {
-        if (!budgets.find(b => b.categoryId === category.entityId)) {
-          budgets.push({
-            budgeted: 0,
-            categoryId: category.entityId
-          });
-        }
-      });
-    }
-  });
-  return budgets;
-}
+      _compressedSize = data.readUInt32LE(Constants.CENSIZ); // uncompressed size
 
-async function importBudgets(data, entityIdMap) {
-  let budgets = sortByKey(data.monthlyBudgets, 'month');
-  let earliestMonth = monthFromDate(budgets[0].month);
-  let currentMonth = getCurrentMonth();
-  await actual.batchBudgetUpdates(async () => {
-    const carryoverFlags = {};
+      _size = data.readUInt32LE(Constants.CENLEN); // filename length
 
-    for (let budget of budgets) {
-      let filled = fillInBudgets(data, budget.monthlySubCategoryBudgets.filter(b => !b.isTombstone));
-      await Promise.all(filled.map(async catBudget => {
-        let amount = amountToInteger(catBudget.budgeted);
-        let catId = entityIdMap.get(catBudget.categoryId);
-        let month = monthFromDate(budget.month);
+      _fnameLen = data.readUInt16LE(Constants.CENNAM); // extra field length
 
-        if (!catId) {
-          return;
-        }
+      _extraLen = data.readUInt16LE(Constants.CENEXT); // file comment length
 
-        await actual.setBudgetAmount(month, catId, amount);
+      _comLen = data.readUInt16LE(Constants.CENCOM); // volume number start
 
-        if (catBudget.overspendingHandling === 'AffectsBuffer') {
-          // Turn off the carryover flag so it doesn't propagate
-          // to future months
-          carryoverFlags[catId] = false;
-        } else if (catBudget.overspendingHandling === 'Confined' || carryoverFlags[catId]) {
-          // Overspending has switched to carryover, set the
-          // flag so it propagates to future months
-          carryoverFlags[catId] = true;
-          await actual.setBudgetCarryover(month, catId, true);
-        }
-      }));
-    }
-  });
-}
+      _diskStart = data.readUInt16LE(Constants.CENDSK); // internal file attributes
 
-function estimateRecentness(str) {
-  // The "recentness" is the total amount of changes that this device
-  // is aware of, which is estimated by summing up all of the version
-  // numbers that its aware of. This works because version numbers are
-  // increasing integers.
-  return str.split(',').reduce((total, version) => {
-    const _version$split = version.split('-'),
-          _version$split2 = _slicedToArray(_version$split, 2),
-          _ = _version$split2[0],
-          number = _version$split2[1];
+      _inattr = data.readUInt16LE(Constants.CENATT); // external file attributes
 
-    return total + parseInt(number);
-  }, 0);
-}
+      _attr = data.readUInt32LE(Constants.CENATX); // LOC header offset
 
-function findLatestDevice(zipped, entries) {
-  let devices = entries.map(entry => {
-    const contents = zipped.readFile(entry).toString('utf8');
-    let data;
+      _offset = data.readUInt32LE(Constants.CENOFF);
+    },
+    dataHeaderToBinary: function () {
+      // LOC header size (30 bytes)
+      var data = Buffer.alloc(Constants.LOCHDR); // "PK\003\004"
 
-    try {
-      data = JSON.parse(contents);
-    } catch (e) {
-      return null;
-    }
+      data.writeUInt32LE(Constants.LOCSIG, 0); // version needed to extract
 
-    if (data.hasFullKnowledge) {
-      return {
-        deviceGUID: data.deviceGUID,
-        shortName: data.shortDeviceId,
-        recentness: estimateRecentness(data.knowledge)
-      };
-    }
+      data.writeUInt16LE(_version, Constants.LOCVER); // general purpose bit flag
 
-    return null;
-  }).filter(x => x);
-  devices = sortByKey(devices, 'recentness');
-  return devices[devices.length - 1].deviceGUID;
-}
+      data.writeUInt16LE(_flags, Constants.LOCFLG); // compression method
 
-async function doImport(data) {
-  const entityIdMap = new Map();
-  console.log('Importing Accounts...');
-  await importAccounts(data, entityIdMap);
-  console.log('Importing Categories...');
-  await importCategories(data, entityIdMap);
-  console.log('Importing Payees...');
-  await importPayees(data, entityIdMap);
-  console.log('Importing Transactions...');
-  await importTransactions(data, entityIdMap);
-  console.log('Importing Budgets...');
-  await importBudgets(data, entityIdMap);
-  console.log('Setting up...');
-}
+      data.writeUInt16LE(_method, Constants.LOCHOW); // modification time (2 bytes time, 2 bytes date)
 
-function getBudgetName(filepath) {
-  let unixFilepath = normalizePathSep(filepath);
+      data.writeUInt32LE(_time, Constants.LOCTIM); // uncompressed file crc-32 value
 
-  if (!/\.zip/.test(unixFilepath)) {
-    return null;
-  }
+      data.writeUInt32LE(_crc, Constants.LOCCRC); // compressed size
 
-  unixFilepath = unixFilepath.replace(/\.zip$/, '').replace(/.ynab4$/, ''); // Most budgets are named like "Budget~51938D82.ynab4" but sometimes
-  // they are only "Budget.ynab4". We only want to grab the name
-  // before the ~ if it exists.
+      data.writeUInt32LE(_compressedSize, Constants.LOCSIZ); // uncompressed size
 
-  let m = unixFilepath.match(/([^/~]+)[^/]*$/);
+      data.writeUInt32LE(_size, Constants.LOCLEN); // filename length
 
-  if (!m) {
-    return null;
-  }
+      data.writeUInt16LE(_fnameLen, Constants.LOCNAM); // extra field length
 
-  return m[1];
-}
+      data.writeUInt16LE(_extraLen, Constants.LOCEXT);
+      return data;
+    },
+    entryHeaderToBinary: function () {
+      // CEN header size (46 bytes)
+      var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen); // "PK\001\002"
 
-function getFile(entries, path) {
-  let files = entries.filter(e => e.entryName === path);
+      data.writeUInt32LE(Constants.CENSIG, 0); // version made by
 
-  if (files.length === 0) {
-    throw new Error('Could not find file: ' + path);
-  }
+      data.writeUInt16LE(_verMade, Constants.CENVEM); // version needed to extract
 
-  if (files.length >= 2) {
-    throw new Error('File name matches multiple files: ' + path);
-  }
+      data.writeUInt16LE(_version, Constants.CENVER); // encrypt, decrypt flags
 
-  return files[0];
-}
+      data.writeUInt16LE(_flags, Constants.CENFLG); // compression method
 
-function join(...paths) {
-  return paths.slice(1).reduce((full, path) => {
-    return full + '/' + path.replace(/^\//, '');
-  }, paths[0].replace(/\/$/, ''));
-}
+      data.writeUInt16LE(_method, Constants.CENHOW); // modification time (2 bytes time, 2 bytes date)
 
-async function importBuffer(filepath, buffer) {
-  let budgetName = getBudgetName(filepath);
+      data.writeUInt32LE(_time, Constants.CENTIM); // uncompressed file crc-32 value
 
-  if (!budgetName) {
-    throw new Error('Not a YNAB4 file: ' + filepath);
-  }
+      data.writeUInt32LE(_crc, Constants.CENCRC); // compressed size
 
-  let zipped = new AdmZip(buffer);
-  let entries = zipped.getEntries();
-  let root = '';
-  let dirMatch = entries[0].entryName.match(/([^/]*\.ynab4)/);
+      data.writeUInt32LE(_compressedSize, Constants.CENSIZ); // uncompressed size
 
-  if (dirMatch) {
-    root = dirMatch[1] + '/';
-  }
+      data.writeUInt32LE(_size, Constants.CENLEN); // filename length
 
-  let metaStr = zipped.readFile(getFile(entries, root + 'Budget.ymeta'));
-  let meta = JSON.parse(metaStr.toString('utf8'));
-  let budgetPath = join(root, meta.relativeDataFolderName);
-  let deviceFiles = entries.filter(e => e.entryName.startsWith(join(budgetPath, 'devices')));
-  let deviceGUID = findLatestDevice(zipped, deviceFiles);
-  const yfullPath = join(budgetPath, deviceGUID, 'Budget.yfull');
-  let contents;
+      data.writeUInt16LE(_fnameLen, Constants.CENNAM); // extra field length
 
-  try {
-    contents = zipped.readFile(getFile(entries, yfullPath)).toString('utf8');
-  } catch (e) {
-    console.log(e);
-    throw new Error('Error reading Budget.yfull file');
-  }
+      data.writeUInt16LE(_extraLen, Constants.CENEXT); // file comment length
 
-  let data;
+      data.writeUInt16LE(_comLen, Constants.CENCOM); // volume number start
 
-  try {
-    data = JSON.parse(contents);
-  } catch (e) {
-    throw new Error('Error parsing Budget.yull file');
-  }
+      data.writeUInt16LE(_diskStart, Constants.CENDSK); // internal file attributes
 
-  return actual.runImport(budgetName, () => doImport(data));
-}
+      data.writeUInt16LE(_inattr, Constants.CENATT); // external file attributes
 
-module.exports = {
-  importBuffer
+      data.writeUInt32LE(_attr, Constants.CENATX); // LOC header offset
+
+      data.writeUInt32LE(_offset, Constants.CENOFF); // fill all with
+
+      data.fill(0x00, Constants.CENHDR);
+      return data;
+    },
+    toString: function () {
+      return '{\n' + '\t"made" : ' + _verMade + ",\n" + '\t"version" : ' + _version + ",\n" + '\t"flags" : ' + _flags + ",\n" + '\t"method" : ' + Utils.methodToString(_method) + ",\n" + '\t"time" : ' + this.time + ",\n" + '\t"crc" : 0x' + _crc.toString(16).toUpperCase() + ",\n" + '\t"compressedSize" : ' + _compressedSize + " bytes,\n" + '\t"size" : ' + _size + " bytes,\n" + '\t"fileNameLength" : ' + _fnameLen + ",\n" + '\t"extraLength" : ' + _extraLen + " bytes,\n" + '\t"commentLength" : ' + _comLen + " bytes,\n" + '\t"diskNumStart" : ' + _diskStart + ",\n" + '\t"inAttr" : ' + _inattr + ",\n" + '\t"attr" : ' + _attr + ",\n" + '\t"offset" : ' + _offset + ",\n" + '\t"entryHeaderSize" : ' + (Constants.CENHDR + _fnameLen + _extraLen + _comLen) + " bytes\n" + '}';
+    }
+  };
 };
 
 /***/ }),
 
-/***/ "./packages/import-ynab5/importer.js":
-/*!*******************************************!*\
-  !*** ./packages/import-ynab5/importer.js ***!
-  \*******************************************/
+/***/ "./packages/loot-core/node_modules/adm-zip/headers/index.js":
+/*!******************************************************************!*\
+  !*** ./packages/loot-core/node_modules/adm-zip/headers/index.js ***!
+  \******************************************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-const d = __webpack_require__(/*! date-fns */ "./node_modules/date-fns/esm/index.js");
+exports.EntryHeader = __webpack_require__(/*! ./entryHeader */ "./packages/loot-core/node_modules/adm-zip/headers/entryHeader.js");
+exports.MainHeader = __webpack_require__(/*! ./mainHeader */ "./packages/loot-core/node_modules/adm-zip/headers/mainHeader.js");
 
-const uuid = __webpack_require__(/*! uuid */ "./node_modules/uuid/index.js");
+/***/ }),
 
-const actual = __webpack_require__(/*! @actual-app/api/methods */ "./packages/api/methods.js");
+/***/ "./packages/loot-core/node_modules/adm-zip/headers/mainHeader.js":
+/*!***********************************************************************!*\
+  !*** ./packages/loot-core/node_modules/adm-zip/headers/mainHeader.js ***!
+  \***********************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-const _require = __webpack_require__(/*! @actual-app/api/utils */ "./packages/api/utils.js"),
-      amountToInteger = _require.amountToInteger;
+var Utils = __webpack_require__(/*! ../util */ "./packages/loot-core/node_modules/adm-zip/util/index.js"),
+    Constants = Utils.Constants;
+/* The entries in the end of central directory */
 
-function amountFromYnab(amount) {
-  // ynabs multiplies amount by 1000 and actual by 100
-  // so, this function divides by 10
-  return Math.round(amount / 10);
-}
 
-function monthFromDate(date) {
-  let parts = date.split('-');
-  return parts[0] + '-' + parts[1];
-}
+module.exports = function () {
+  var _volumeEntries = 0,
+      _totalEntries = 0,
+      _size = 0,
+      _offset = 0,
+      _commentLength = 0;
+  return {
+    get diskEntries() {
+      return _volumeEntries;
+    },
 
-function mapAccountType(type) {
-  switch (type) {
-    case 'cash':
-    case 'checking':
-      return 'checking';
+    set diskEntries(
+    /*Number*/
+    val) {
+      _volumeEntries = _totalEntries = val;
+    },
 
-    case 'creditCard':
-    case 'lineOfCredit':
-      return 'credit';
+    get totalEntries() {
+      return _totalEntries;
+    },
 
-    case 'savings':
-      return 'savings';
+    set totalEntries(
+    /*Number*/
+    val) {
+      _totalEntries = _volumeEntries = val;
+    },
 
-    case 'investmentAccount':
-      return 'investment';
+    get size() {
+      return _size;
+    },
 
-    case 'mortgage':
-      return 'mortgage';
+    set size(
+    /*Number*/
+    val) {
+      _size = val;
+    },
 
-    default:
-      return 'other';
-  }
-}
+    get offset() {
+      return _offset;
+    },
 
-function sortByKey(arr, key) {
-  return [...arr].sort((item1, item2) => {
-    if (item1[key] < item2[key]) {
-      return -1;
-    } else if (item1[key] > item2[key]) {
-      return 1;
-    }
+    set offset(
+    /*Number*/
+    val) {
+      _offset = val;
+    },
 
-    return 0;
-  });
-}
+    get commentLength() {
+      return _commentLength;
+    },
 
-function groupBy(arr, keyName) {
-  return arr.reduce(function (obj, item) {
-    var key = item[keyName];
+    set commentLength(
+    /*Number*/
+    val) {
+      _commentLength = val;
+    },
 
-    if (!obj.hasOwnProperty(key)) {
-      obj[key] = [];
-    }
+    get mainHeaderSize() {
+      return Constants.ENDHDR + _commentLength;
+    },
 
-    obj[key].push(item);
-    return obj;
-  }, {});
-}
+    loadFromBinary: function (
+    /*Buffer*/
+    data) {
+      // data should be 22 bytes and start with "PK 05 06"
+      if (data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG) throw Utils.Errors.INVALID_END; // number of entries on this volume
 
-function importAccounts(data, entityIdMap) {
-  return Promise.all(data.accounts.map(async account => {
-    if (!account.deleted) {
-      let id = await actual.createAccount({
-        type: mapAccountType(account.type),
-        name: account.name,
-        offbudget: account.on_budget ? false : true,
-        closed: account.closed
-      });
-      entityIdMap.set(account.id, id);
-    }
-  }));
-}
+      _volumeEntries = data.readUInt16LE(Constants.ENDSUB); // total number of entries
 
-async function importCategories(data, entityIdMap) {
-  // Hidden categories are put in its own group by YNAB,
-  // so it's already handled.
-  const categories = await actual.getCategories();
-  const incomeCatId = categories.find(cat => cat.name === 'Income').id;
-  const ynabIncomeCategories = ['To be Budgeted', 'Inflow: Ready to Assign'];
+      _totalEntries = data.readUInt16LE(Constants.ENDTOT); // central directory size in bytes
 
-  function checkSpecialCat(cat) {
-    if (cat.category_group_id === data.category_groups.find(group => group.name === 'Internal Master Category').id) {
-      if (ynabIncomeCategories.includes(cat.name)) {
-        return 'income';
-      } else {
-        return 'internal';
-      }
-    } else if (cat.category_group_id === data.category_groups.find(group => group.name === 'Credit Card Payments').id) {
-      return 'creditCard';
-    }
-  } // Can't be done in parallel to have
-  // correct sort order.
+      _size = data.readUInt32LE(Constants.ENDSIZ); // offset of first CEN header
 
+      _offset = data.readUInt32LE(Constants.ENDOFF); // zip file comment length
 
-  for (let group of data.category_groups) {
-    if (!group.deleted) {
-      // Ignores internal category and credit cards
-      if (group.name !== 'Internal Master Category' && group.name !== 'Credit Card Payments') {
-        var groupId = await actual.createCategoryGroup({
-          name: group.name,
-          is_income: false
-        });
-        entityIdMap.set(group.id, groupId);
-      }
+      _commentLength = data.readUInt16LE(Constants.ENDCOM);
+    },
+    toBinary: function () {
+      var b = Buffer.alloc(Constants.ENDHDR + _commentLength); // "PK 05 06" signature
 
-      let cats = data.categories.filter(cat => cat.category_group_id === group.id);
+      b.writeUInt32LE(Constants.ENDSIG, 0);
+      b.writeUInt32LE(0, 4); // number of entries on this volume
 
-      for (let cat of cats.reverse()) {
-        if (!cat.deleted) {
-          let newCategory = {};
-          newCategory.name = cat.name; // Handles special categories. Starting balance is a payee
-          // in YNAB so it's handled in importTransactions
+      b.writeUInt16LE(_volumeEntries, Constants.ENDSUB); // total number of entries
 
-          switch (checkSpecialCat(cat)) {
-            case 'income':
-              {
-                // doesn't create new category, only assigns id
-                let id = incomeCatId;
-                entityIdMap.set(cat.id, id);
-                break;
-              }
+      b.writeUInt16LE(_totalEntries, Constants.ENDTOT); // central directory size in bytes
 
-            case 'creditCard': // ignores it
+      b.writeUInt32LE(_size, Constants.ENDSIZ); // offset of first CEN header
 
-            case 'internal':
-              // uncategorized is ignored too, handled by actual
-              break;
+      b.writeUInt32LE(_offset, Constants.ENDOFF); // zip file comment length
 
-            default:
-              {
-                newCategory.group_id = groupId;
-                let id = await actual.createCategory(newCategory);
-                entityIdMap.set(cat.id, id);
-                break;
-              }
-          }
-        }
-      }
-    }
-  }
-}
+      b.writeUInt16LE(_commentLength, Constants.ENDCOM); // fill comment memory with spaces so no garbage is left there
 
-function importPayees(data, entityIdMap) {
-  return Promise.all(data.payees.map(async payee => {
-    if (!payee.deleted) {
-      let id = await actual.createPayee({
-        name: payee.name
-      });
-      entityIdMap.set(payee.id, id);
+      b.fill(" ", Constants.ENDHDR);
+      return b;
+    },
+    toString: function () {
+      return '{\n' + '\t"diskEntries" : ' + _volumeEntries + ",\n" + '\t"totalEntries" : ' + _totalEntries + ",\n" + '\t"size" : ' + _size + " bytes,\n" + '\t"offset" : 0x' + _offset.toString(16).toUpperCase() + ",\n" + '\t"commentLength" : 0x' + _commentLength + "\n" + '}';
     }
-  }));
-}
-
-async function importTransactions(data, entityIdMap) {
-  const payees = await actual.getPayees();
-  const categories = await actual.getCategories();
-  const incomeCatId = categories.find(cat => cat.name === 'Income').id;
-  const startingBalanceCatId = categories.find(cat => cat.name === 'Starting Balances').id; //better way to do it?
+  };
+};
 
-  const startingPayeeYNAB = data.payees.find(payee => payee.name === 'Starting Balance').id;
-  let transactionsGrouped = groupBy(data.transactions, 'account_id');
-  let subtransactionsGrouped = groupBy(data.subtransactions, 'transaction_id'); // Go ahead and generate ids for all of the transactions so we can
-  // reliably resolve transfers
+/***/ }),
 
-  for (let transaction of data.transactions) {
-    entityIdMap.set(transaction.id, uuid.v4());
-  }
+/***/ "./packages/loot-core/node_modules/adm-zip/methods/deflater.js":
+/*!*********************************************************************!*\
+  !*** ./packages/loot-core/node_modules/adm-zip/methods/deflater.js ***!
+  \*********************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-  await Promise.all(Object.keys(transactionsGrouped).map(async accountId => {
-    let transactions = transactionsGrouped[accountId];
-    let toImport = transactions.map(transaction => {
-      if (transaction.deleted) {
-        return null;
-      } // Handle subtransactions
+module.exports = function (
+/*Buffer*/
+inbuf) {
+  var zlib = __webpack_require__(/*! zlib */ "zlib");
 
+  var opts = {
+    chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024
+  };
+  return {
+    deflate: function () {
+      return zlib.deflateRawSync(inbuf, opts);
+    },
+    deflateAsync: function (
+    /*Function*/
+    callback) {
+      var tmp = zlib.createDeflateRaw(opts),
+          parts = [],
+          total = 0;
+      tmp.on('data', function (data) {
+        parts.push(data);
+        total += data.length;
+      });
+      tmp.on('end', function () {
+        var buf = Buffer.alloc(total),
+            written = 0;
+        buf.fill(0);
 
-      let subtransactions = subtransactionsGrouped[transaction.id];
+        for (var i = 0; i < parts.length; i++) {
+          var part = parts[i];
+          part.copy(buf, written);
+          written += part.length;
+        }
 
-      if (subtransactions) {
-        subtransactions = subtransactions.map(subtrans => {
-          return {
-            amount: amountFromYnab(subtrans.amount),
-            category: entityIdMap.get(subtrans.category_id) || null,
-            notes: subtrans.memo
-          };
-        });
-      } // Add transaction
+        callback && callback(buf);
+      });
+      tmp.end(inbuf);
+    }
+  };
+};
 
+/***/ }),
 
-      let newTransaction = {
-        id: entityIdMap.get(transaction.id),
-        account: entityIdMap.get(transaction.account_id),
-        date: transaction.date,
-        amount: amountFromYnab(transaction.amount),
-        category: entityIdMap.get(transaction.category_id) || null,
-        cleared: ['cleared', 'reconciled'].includes(transaction.cleared),
-        notes: transaction.memo || null,
-        imported_id: transaction.import_id || null,
-        transfer_id: entityIdMap.get(transaction.transfer_transaction_id) || null,
-        subtransactions: subtransactions
-      }; // Handle transfer payee
+/***/ "./packages/loot-core/node_modules/adm-zip/methods/index.js":
+/*!******************************************************************!*\
+  !*** ./packages/loot-core/node_modules/adm-zip/methods/index.js ***!
+  \******************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-      if (transaction.transfer_account_id) {
-        newTransaction.payee = payees.find(p => p.transfer_acct === entityIdMap.get(transaction.transfer_account_id)).id;
-      } else {
-        newTransaction.payee = entityIdMap.get(transaction.payee_id);
-      } // Handle starting balances
+exports.Deflater = __webpack_require__(/*! ./deflater */ "./packages/loot-core/node_modules/adm-zip/methods/deflater.js");
+exports.Inflater = __webpack_require__(/*! ./inflater */ "./packages/loot-core/node_modules/adm-zip/methods/inflater.js");
 
+/***/ }),
 
-      if (transaction.payee_id === startingPayeeYNAB && entityIdMap.get(transaction.category_id) === incomeCatId) {
-        newTransaction.category = startingBalanceCatId;
-        newTransaction.payee = null;
-      }
+/***/ "./packages/loot-core/node_modules/adm-zip/methods/inflater.js":
+/*!*********************************************************************!*\
+  !*** ./packages/loot-core/node_modules/adm-zip/methods/inflater.js ***!
+  \*********************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-      return newTransaction;
-    }).filter(x => x);
-    await actual.addTransactions(entityIdMap.get(accountId), toImport);
-  }));
-}
+module.exports = function (
+/*Buffer*/
+inbuf) {
+  var zlib = __webpack_require__(/*! zlib */ "zlib");
 
-async function importBudgets(data, entityIdMap) {
-  // There should be info in the docs to deal with
-  // no credit card category and how YNAB and Actual
-  // handle differently the amount To be Budgeted
-  // i.e. Actual considers the cc debt while YNAB doesn't
-  //
-  // Also, there could be a way to set rollover using
-  // Deferred Income Subcat and Immediate Income Subcat
-  let budgets = sortByKey(data.months, 'month');
-  const internalCatIdYnab = data.category_groups.find(group => group.name === 'Internal Master Category').id;
-  const creditcardCatIdYnab = data.category_groups.find(group => group.name === 'Credit Card Payments').id;
-  await actual.batchBudgetUpdates(async () => {
-    for (let budget of budgets) {
-      let month = monthFromDate(budget.month);
-      await Promise.all(budget.categories.map(async catBudget => {
-        let catId = entityIdMap.get(catBudget.id);
-        let amount = catBudget.budgeted / 10;
+  return {
+    inflate: function () {
+      return zlib.inflateRawSync(inbuf);
+    },
+    inflateAsync: function (
+    /*Function*/
+    callback) {
+      var tmp = zlib.createInflateRaw(),
+          parts = [],
+          total = 0;
+      tmp.on('data', function (data) {
+        parts.push(data);
+        total += data.length;
+      });
+      tmp.on('end', function () {
+        var buf = Buffer.alloc(total),
+            written = 0;
+        buf.fill(0);
 
-        if (!catId || catBudget.category_group_id === internalCatIdYnab || catBudget.category_group_id === creditcardCatIdYnab) {
-          return;
+        for (var i = 0; i < parts.length; i++) {
+          var part = parts[i];
+          part.copy(buf, written);
+          written += part.length;
         }
 
-        await actual.setBudgetAmount(month, catId, amount);
-      }));
+        callback && callback(buf);
+      });
+      tmp.end(inbuf);
     }
-  });
-} // Utils
-
-
-async function doImport(data) {
-  const entityIdMap = new Map();
-  console.log('Importing Accounts...');
-  await importAccounts(data, entityIdMap);
-  console.log('Importing Categories...');
-  await importCategories(data, entityIdMap);
-  console.log('Importing Payees...');
-  await importPayees(data, entityIdMap);
-  console.log('Importing Transactions...');
-  await importTransactions(data, entityIdMap);
-  console.log('Importing Budgets...');
-  await importBudgets(data, entityIdMap);
-  console.log('Setting up...');
-}
-
-async function importYNAB5(data) {
-  if (data.data) {
-    data = data.data;
-  }
-
-  return actual.runImport(data.budget.name, () => doImport(data.budget));
-}
-
-module.exports = {
-  importYNAB5
+  };
 };
 
 /***/ }),
 
-/***/ "./packages/loot-core/migrations/1632571489012_remove_cache.js":
-/*!*********************************************************************!*\
-  !*** ./packages/loot-core/migrations/1632571489012_remove_cache.js ***!
-  \*********************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return runMigration; });
-function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
-
-function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
-
-function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
-
-function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
-
-function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
-
-function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
-
-async function runMigration(db, uuid) {
-  function getValue(node) {
-    return node.expr != null ? node.expr : node.cachedValue;
-  }
-
-  db.execQuery(`
-CREATE TABLE zero_budget_months
-  (id TEXT PRIMARY KEY,
-   buffered INTEGER DEFAULT 0); 
-
-CREATE TABLE zero_budgets
-  (id TEXT PRIMARY KEY,
-   month INTEGER,
-   category TEXT,
-   amount INTEGER DEFAULT 0,
-   carryover INTEGER DEFAULT 0);
-
-CREATE TABLE reflect_budgets
-  (id TEXT PRIMARY KEY,
-   month INTEGER,
-   category TEXT,
-   amount INTEGER DEFAULT 0,
-   carryover INTEGER DEFAULT 0);
-
-CREATE TABLE notes
-  (id TEXT PRIMARY KEY,
-   note TEXT);
+/***/ "./packages/loot-core/node_modules/adm-zip/util/constants.js":
+/*!*******************************************************************!*\
+  !*** ./packages/loot-core/node_modules/adm-zip/util/constants.js ***!
+  \*******************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
 
-CREATE TABLE kvcache (key TEXT PRIMARY KEY, value TEXT);
-CREATE TABLE kvcache_key (id INTEGER PRIMARY KEY, key REAL);
-`); // Migrate budget amounts and carryover
+module.exports = {
+  /* The local file header */
+  LOCHDR: 30,
+  // LOC header size
+  LOCSIG: 0x04034b50,
+  // "PK\003\004"
+  LOCVER: 4,
+  // version needed to extract
+  LOCFLG: 6,
+  // general purpose bit flag
+  LOCHOW: 8,
+  // compression method
+  LOCTIM: 10,
+  // modification time (2 bytes time, 2 bytes date)
+  LOCCRC: 14,
+  // uncompressed file crc-32 value
+  LOCSIZ: 18,
+  // compressed size
+  LOCLEN: 22,
+  // uncompressed size
+  LOCNAM: 26,
+  // filename length
+  LOCEXT: 28,
+  // extra field length
 
-  let budget = db.runQuery(`SELECT * FROM spreadsheet_cells WHERE name LIKE 'budget%!budget-%'`, [], true);
-  db.transaction(() => {
-    budget.map(monthBudget => {
-      let match = monthBudget.name.match(/^(budget-report|budget)(\d+)!budget-(.+)$/);
+  /* The Data descriptor */
+  EXTSIG: 0x08074b50,
+  // "PK\007\008"
+  EXTHDR: 16,
+  // EXT header size
+  EXTCRC: 4,
+  // uncompressed file crc-32 value
+  EXTSIZ: 8,
+  // compressed size
+  EXTLEN: 12,
+  // uncompressed size
 
-      if (match == null) {
-        console.log('Warning: invalid budget month name', monthBudget.name);
-        return;
-      }
+  /* The central directory file header */
+  CENHDR: 46,
+  // CEN header size
+  CENSIG: 0x02014b50,
+  // "PK\001\002"
+  CENVEM: 4,
+  // version made by
+  CENVER: 6,
+  // version needed to extract
+  CENFLG: 8,
+  // encrypt, decrypt flags
+  CENHOW: 10,
+  // compression method
+  CENTIM: 12,
+  // modification time (2 bytes time, 2 bytes date)
+  CENCRC: 16,
+  // uncompressed file crc-32 value
+  CENSIZ: 20,
+  // compressed size
+  CENLEN: 24,
+  // uncompressed size
+  CENNAM: 28,
+  // filename length
+  CENEXT: 30,
+  // extra field length
+  CENCOM: 32,
+  // file comment length
+  CENDSK: 34,
+  // volume number start
+  CENATT: 36,
+  // internal file attributes
+  CENATX: 38,
+  // external file attributes (host system dependent)
+  CENOFF: 42,
+  // LOC header offset
 
-      let type = match[1];
-      let month = match[2].slice(0, 4) + '-' + match[2].slice(4);
-      let dbmonth = parseInt(match[2]);
-      let cat = match[3];
-      let amount = parseInt(getValue(monthBudget));
+  /* The entries in the end of central directory */
+  ENDHDR: 22,
+  // END header size
+  ENDSIG: 0x06054b50,
+  // "PK\005\006"
+  ENDSUB: 8,
+  // number of entries on this disk
+  ENDTOT: 10,
+  // total number of entries
+  ENDSIZ: 12,
+  // central directory size in bytes
+  ENDOFF: 16,
+  // offset of first CEN header
+  ENDCOM: 20,
+  // zip file comment length
 
-      if (isNaN(amount)) {
-        amount = 0;
-      }
+  /* Compression methods */
+  STORED: 0,
+  // no compression
+  SHRUNK: 1,
+  // shrunk
+  REDUCED1: 2,
+  // reduced with compression factor 1
+  REDUCED2: 3,
+  // reduced with compression factor 2
+  REDUCED3: 4,
+  // reduced with compression factor 3
+  REDUCED4: 5,
+  // reduced with compression factor 4
+  IMPLODED: 6,
+  // imploded
+  // 7 reserved
+  DEFLATED: 8,
+  // deflated
+  ENHANCED_DEFLATED: 9,
+  // enhanced deflated
+  PKWARE: 10,
+  // PKWare DCL imploded
+  // 11 reserved
+  BZIP2: 12,
+  //  compressed using BZIP2
+  // 13 reserved
+  LZMA: 14,
+  // LZMA
+  // 15-17 reserved
+  IBM_TERSE: 18,
+  // compressed using IBM TERSE
+  IBM_LZ77: 19,
+  //IBM LZ77 z
 
-      let sheetName = monthBudget.name.split('!')[0];
-      let carryover = db.runQuery('SELECT * FROM spreadsheet_cells WHERE name = ?', [`${sheetName}!carryover-${cat}`], true);
-      let table = type === 'budget-report' ? 'reflect_budgets' : 'zero_budgets';
-      db.runQuery(`INSERT INTO ${table} (id, month, category, amount, carryover) VALUES (?, ?, ?, ?, ?)`, [`${month}-${cat}`, dbmonth, cat, amount, carryover.length > 0 && getValue(carryover[0]) === 'true' ? 1 : 0]);
-    });
-  }); // Migrate buffers
+  /* General purpose bit flag */
+  FLG_ENC: 0,
+  // encripted file
+  FLG_COMP1: 1,
+  // compression option
+  FLG_COMP2: 2,
+  // compression option
+  FLG_DESC: 4,
+  // data descriptor
+  FLG_ENH: 8,
+  // enhanced deflation
+  FLG_STR: 16,
+  // strong encryption
+  FLG_LNG: 1024,
+  // language encoding
+  FLG_MSK: 4096,
+  // mask header values
 
-  let buffers = db.runQuery(`SELECT * FROM spreadsheet_cells WHERE name LIKE 'budget%!buffered'`, [], true);
-  db.transaction(() => {
-    buffers.map(buffer => {
-      let match = buffer.name.match(/^budget(\d+)!buffered$/);
+  /* Load type */
+  FILE: 0,
+  BUFFER: 1,
+  NONE: 2,
 
-      if (match) {
-        let month = match[1].slice(0, 4) + '-' + match[1].slice(4);
-        let amount = parseInt(getValue(buffer));
+  /* 4.5 Extensible data fields */
+  EF_ID: 0,
+  EF_SIZE: 2,
 
-        if (isNaN(amount)) {
-          amount = 0;
-        }
+  /* Header IDs */
+  ID_ZIP64: 0x0001,
+  ID_AVINFO: 0x0007,
+  ID_PFS: 0x0008,
+  ID_OS2: 0x0009,
+  ID_NTFS: 0x000a,
+  ID_OPENVMS: 0x000c,
+  ID_UNIX: 0x000d,
+  ID_FORK: 0x000e,
+  ID_PATCH: 0x000f,
+  ID_X509_PKCS7: 0x0014,
+  ID_X509_CERTID_F: 0x0015,
+  ID_X509_CERTID_C: 0x0016,
+  ID_STRONGENC: 0x0017,
+  ID_RECORD_MGT: 0x0018,
+  ID_X509_PKCS7_RL: 0x0019,
+  ID_IBM1: 0x0065,
+  ID_IBM2: 0x0066,
+  ID_POSZIP: 0x4690,
+  EF_ZIP64_OR_32: 0xffffffff,
+  EF_ZIP64_OR_16: 0xffff,
+  EF_ZIP64_SUNCOMP: 0,
+  EF_ZIP64_SCOMP: 8,
+  EF_ZIP64_RHO: 16,
+  EF_ZIP64_DSN: 24
+};
 
-        db.runQuery(`INSERT INTO zero_budget_months (id, buffered) VALUES (?, ?)`, [month, amount]);
-      }
-    });
-  }); // Migrate notes
+/***/ }),
 
-  let notes = db.runQuery(`SELECT * FROM spreadsheet_cells WHERE name LIKE 'notes!%'`, [], true);
+/***/ "./packages/loot-core/node_modules/adm-zip/util/errors.js":
+/*!****************************************************************!*\
+  !*** ./packages/loot-core/node_modules/adm-zip/util/errors.js ***!
+  \****************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
 
-  let parseNote = str => {
-    try {
-      let value = JSON.parse(str);
-      return value && value !== '' ? value : null;
-    } catch (e) {
-      return null;
-    }
-  };
+module.exports = {
+  /* Header error messages */
+  "INVALID_LOC": "Invalid LOC header (bad signature)",
+  "INVALID_CEN": "Invalid CEN header (bad signature)",
+  "INVALID_END": "Invalid END header (bad signature)",
 
-  db.transaction(() => {
-    notes.forEach(note => {
-      let parsed = parseNote(getValue(note));
+  /* ZipEntry error messages*/
+  "NO_DATA": "Nothing to decompress",
+  "BAD_CRC": "CRC32 checksum failed",
+  "FILE_IN_THE_WAY": "There is a file in the way: %s",
+  "UNKNOWN_METHOD": "Invalid/unsupported compression method",
 
-      if (parsed) {
-        let _note$name$split = note.name.split('!'),
-            _note$name$split2 = _slicedToArray(_note$name$split, 2),
-            id = _note$name$split2[1];
+  /* Inflater error messages */
+  "AVAIL_DATA": "inflate::Available inflate data did not terminate",
+  "INVALID_DISTANCE": "inflate::Invalid literal/length or distance code in fixed or dynamic block",
+  "TO_MANY_CODES": "inflate::Dynamic block code description: too many length or distance codes",
+  "INVALID_REPEAT_LEN": "inflate::Dynamic block code description: repeat more than specified lengths",
+  "INVALID_REPEAT_FIRST": "inflate::Dynamic block code description: repeat lengths with no first length",
+  "INCOMPLETE_CODES": "inflate::Dynamic block code description: code lengths codes incomplete",
+  "INVALID_DYN_DISTANCE": "inflate::Dynamic block code description: invalid distance code lengths",
+  "INVALID_CODES_LEN": "inflate::Dynamic block code description: invalid literal/length code lengths",
+  "INVALID_STORE_BLOCK": "inflate::Stored block length did not match one's complement",
+  "INVALID_BLOCK_TYPE": "inflate::Invalid block type (type == 3)",
 
-        db.runQuery(`INSERT INTO notes (id, note) VALUES (?, ?)`, [id, parsed]);
-      }
-    });
-  });
-  db.execQuery(`
-    DROP TABLE spreadsheet_cells;
-    ANALYZE;
-    VACUUM;
-  `);
-}
+  /* ADM-ZIP error messages */
+  "CANT_EXTRACT_FILE": "Could not extract the file",
+  "CANT_OVERRIDE": "Target file already exists",
+  "NO_ZIP": "No zip file was loaded",
+  "NO_ENTRY": "Entry doesn't exist",
+  "DIRECTORY_CONTENT_ERROR": "A directory cannot have content",
+  "FILE_NOT_FOUND": "File not found: %s",
+  "NOT_IMPLEMENTED": "Not implemented",
+  "INVALID_FILENAME": "Invalid filename",
+  "INVALID_FORMAT": "Invalid or unsupported zip format. No END header found"
+};
 
 /***/ }),
 
-/***/ "./packages/loot-core/node_modules/adm-zip/adm-zip.js":
-/*!************************************************************!*\
-  !*** ./packages/loot-core/node_modules/adm-zip/adm-zip.js ***!
-  \************************************************************/
+/***/ "./packages/loot-core/node_modules/adm-zip/util/fattr.js":
+/*!***************************************************************!*\
+  !*** ./packages/loot-core/node_modules/adm-zip/util/fattr.js ***!
+  \***************************************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-var Utils = __webpack_require__(/*! ./util */ "./packages/loot-core/node_modules/adm-zip/util/index.js");
-
-var fs = Utils.FileSystem.require(),
+var fs = __webpack_require__(/*! ./fileSystem */ "./packages/loot-core/node_modules/adm-zip/util/fileSystem.js").require(),
     pth = __webpack_require__(/*! path */ "path");
 
 fs.existsSync = fs.existsSync || pth.existsSync;
 
-var ZipEntry = __webpack_require__(/*! ./zipEntry */ "./packages/loot-core/node_modules/adm-zip/zipEntry.js"),
-    ZipFile = __webpack_require__(/*! ./zipFile */ "./packages/loot-core/node_modules/adm-zip/zipFile.js");
-
-var isWin = /^win/.test(process.platform);
-
 module.exports = function (
 /*String*/
-input) {
-  var _zip = undefined,
-      _filename = "";
-
-  if (input && typeof input === "string") {
-    // load zip file
-    if (fs.existsSync(input)) {
-      _filename = input;
-      _zip = new ZipFile(input, Utils.Constants.FILE);
-    } else {
-      throw Utils.Errors.INVALID_FILENAME;
-    }
-  } else if (input && Buffer.isBuffer(input)) {
-    // load buffer
-    _zip = new ZipFile(input, Utils.Constants.BUFFER);
-  } else {
-    // create new zip file
-    _zip = new ZipFile(null, Utils.Constants.NONE);
-  }
-
-  function sanitize(prefix, name) {
-    prefix = pth.resolve(pth.normalize(prefix));
-    var parts = name.split('/');
-
-    for (var i = 0, l = parts.length; i < l; i++) {
-      var path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep)));
-
-      if (path.indexOf(prefix) === 0) {
-        return path;
-      }
-    }
-
-    return pth.normalize(pth.join(prefix, pth.basename(name)));
-  }
-
-  function getEntry(
-  /*Object*/
-  entry) {
-    if (entry && _zip) {
-      var item; // If entry was given as a file name
-
-      if (typeof entry === "string") item = _zip.getEntry(entry); // if entry was given as a ZipEntry object
-
-      if (typeof entry === "object" && typeof entry.entryName !== "undefined" && typeof entry.header !== "undefined") item = _zip.getEntry(entry.entryName);
-
-      if (item) {
-        return item;
-      }
-    }
+path) {
+  var _path = path || "",
+      _permissions = 0,
+      _obj = newAttr(),
+      _stat = null;
 
-    return null;
+  function newAttr() {
+    return {
+      directory: false,
+      readonly: false,
+      hidden: false,
+      executable: false,
+      mtime: 0,
+      atime: 0
+    };
   }
 
-  return {
-    /**
-     * Extracts the given entry from the archive and returns the content as a Buffer object
-     * @param entry ZipEntry object or String with the full path of the entry
-     *
-     * @return Buffer or Null in case of error
-     */
-    readFile: function (
-    /*Object*/
-    entry) {
-      var item = getEntry(entry);
-      return item && item.getData() || null;
-    },
-
-    /**
-     * Asynchronous readFile
-     * @param entry ZipEntry object or String with the full path of the entry
-     * @param callback
-     *
-     * @return Buffer or Null in case of error
-     */
-    readFileAsync: function (
-    /*Object*/
-    entry,
-    /*Function*/
-    callback) {
-      var item = getEntry(entry);
-
-      if (item) {
-        item.getDataAsync(callback);
-      } else {
-        callback(null, "getEntry failed for:" + entry);
-      }
-    },
-
-    /**
-     * Extracts the given entry from the archive and returns the content as plain text in the given encoding
-     * @param entry ZipEntry object or String with the full path of the entry
-     * @param encoding Optional. If no encoding is specified utf8 is used
-     *
-     * @return String
-     */
-    readAsText: function (
-    /*Object*/
-    entry,
-    /*String - Optional*/
-    encoding) {
-      var item = getEntry(entry);
-
-      if (item) {
-        var data = item.getData();
-
-        if (data && data.length) {
-          return data.toString(encoding || "utf8");
-        }
-      }
-
-      return "";
-    },
-
-    /**
-     * Asynchronous readAsText
-     * @param entry ZipEntry object or String with the full path of the entry
-     * @param callback
-     * @param encoding Optional. If no encoding is specified utf8 is used
-     *
-     * @return String
-     */
-    readAsTextAsync: function (
-    /*Object*/
-    entry,
-    /*Function*/
-    callback,
-    /*String - Optional*/
-    encoding) {
-      var item = getEntry(entry);
-
-      if (item) {
-        item.getDataAsync(function (data, err) {
-          if (err) {
-            callback(data, err);
-            return;
-          }
-
-          if (data && data.length) {
-            callback(data.toString(encoding || "utf8"));
-          } else {
-            callback("");
-          }
-        });
-      } else {
-        callback("");
-      }
-    },
-
-    /**
-     * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory
-     *
-     * @param entry
-     */
-    deleteFile: function (
-    /*Object*/
-    entry) {
-      // @TODO: test deleteFile
-      var item = getEntry(entry);
-
-      if (item) {
-        _zip.deleteEntry(item.entryName);
-      }
-    },
-
-    /**
-     * Adds a comment to the zip. The zip must be rewritten after adding the comment.
-     *
-     * @param comment
-     */
-    addZipComment: function (
-    /*String*/
-    comment) {
-      // @TODO: test addZipComment
-      _zip.comment = comment;
-    },
-
-    /**
-     * Returns the zip comment
-     *
-     * @return String
-     */
-    getZipComment: function () {
-      return _zip.comment || '';
-    },
-
-    /**
-     * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment
-     * The comment cannot exceed 65535 characters in length
-     *
-     * @param entry
-     * @param comment
-     */
-    addZipEntryComment: function (
-    /*Object*/
-    entry,
-    /*String*/
-    comment) {
-      var item = getEntry(entry);
-
-      if (item) {
-        item.comment = comment;
-      }
-    },
-
-    /**
-     * Returns the comment of the specified entry
-     *
-     * @param entry
-     * @return String
-     */
-    getZipEntryComment: function (
-    /*Object*/
-    entry) {
-      var item = getEntry(entry);
-
-      if (item) {
-        return item.comment || '';
-      }
-
-      return '';
-    },
-
-    /**
-     * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content
-     *
-     * @param entry
-     * @param content
-     */
-    updateFile: function (
-    /*Object*/
-    entry,
-    /*Buffer*/
-    content) {
-      var item = getEntry(entry);
-
-      if (item) {
-        item.setData(content);
-      }
-    },
-
-    /**
-     * Adds a file from the disk to the archive
-     *
-     * @param localPath File to add to zip
-     * @param zipPath Optional path inside the zip
-     * @param zipName Optional name for the file
-     */
-    addLocalFile: function (
-    /*String*/
-    localPath,
-    /*String*/
-    zipPath,
-    /*String*/
-    zipName) {
-      if (fs.existsSync(localPath)) {
-        if (zipPath) {
-          zipPath = zipPath.split("\\").join("/");
-
-          if (zipPath.charAt(zipPath.length - 1) !== "/") {
-            zipPath += "/";
-          }
-        } else {
-          zipPath = "";
-        }
-
-        var p = localPath.split("\\").join("/").split("/").pop();
-
-        if (zipName) {
-          this.addFile(zipPath + zipName, fs.readFileSync(localPath), "", 0);
-        } else {
-          this.addFile(zipPath + p, fs.readFileSync(localPath), "", 0);
-        }
-      } else {
-        throw Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath);
-      }
-    },
-
-    /**
-     * Adds a local directory and all its nested files and directories to the archive
-     *
-     * @param localPath
-     * @param zipPath optional path inside zip
-     * @param filter optional RegExp or Function if files match will
-     *               be included.
-     */
-    addLocalFolder: function (
-    /*String*/
-    localPath,
-    /*String*/
-    zipPath,
-    /*RegExp|Function*/
-    filter) {
-      if (filter === undefined) {
-        filter = function () {
-          return true;
-        };
-      } else if (filter instanceof RegExp) {
-        filter = function (filter) {
-          return function (filename) {
-            return filter.test(filename);
-          };
-        }(filter);
-      }
-
-      if (zipPath) {
-        zipPath = zipPath.split("\\").join("/");
-
-        if (zipPath.charAt(zipPath.length - 1) !== "/") {
-          zipPath += "/";
-        }
-      } else {
-        zipPath = "";
-      } // normalize the path first
-
-
-      localPath = pth.normalize(localPath);
-      localPath = localPath.split("\\").join("/"); //windows fix
-
-      if (localPath.charAt(localPath.length - 1) !== "/") localPath += "/";
-
-      if (fs.existsSync(localPath)) {
-        var items = Utils.findFiles(localPath),
-            self = this;
-
-        if (items.length) {
-          items.forEach(function (path) {
-            var p = path.split("\\").join("/").replace(new RegExp(localPath.replace(/(\(|\))/g, '\\$1'), 'i'), ""); //windows fix
-
-            if (filter(p)) {
-              if (p.charAt(p.length - 1) !== "/") {
-                self.addFile(zipPath + p, fs.readFileSync(path), "", 0);
-              } else {
-                self.addFile(zipPath + p, Buffer.alloc(0), "", 0);
-              }
-            }
-          });
-        }
-      } else {
-        throw Utils.Errors.FILE_NOT_FOUND.replace("%s", localPath);
-      }
-    },
-
-    /**
-     * Allows you to create a entry (file or directory) in the zip file.
-     * If you want to create a directory the entryName must end in / and a null buffer should be provided.
-     * Comment and attributes are optional
-     *
-     * @param entryName
-     * @param content
-     * @param comment
-     * @param attr
-     */
-    addFile: function (
-    /*String*/
-    entryName,
-    /*Buffer*/
-    content,
-    /*String*/
-    comment,
-    /*Number*/
-    attr) {
-      var entry = new ZipEntry();
-      entry.entryName = entryName;
-      entry.comment = comment || "";
-
-      if (!attr) {
-        if (entry.isDirectory) {
-          attr = 0o40755 << 16 | 0x10; // (permissions drwxr-xr-x) + (MS-DOS directory flag)
-        } else {
-          attr = 0o644 << 16; // permissions -r-wr--r--
-        }
-      }
-
-      entry.attr = attr;
-      entry.setData(content);
-
-      _zip.setEntry(entry);
-    },
-
-    /**
-     * Returns an array of ZipEntry objects representing the files and folders inside the archive
-     *
-     * @return Array
-     */
-    getEntries: function () {
-      if (_zip) {
-        return _zip.entries;
-      } else {
-        return [];
-      }
-    },
-
-    /**
-     * Returns a ZipEntry object representing the file or folder specified by ``name``.
-     *
-     * @param name
-     * @return ZipEntry
-     */
-    getEntry: function (
-    /*String*/
-    name) {
-      return getEntry(name);
-    },
-
-    /**
-     * Extracts the given entry to the given targetPath
-     * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted
-     *
-     * @param entry ZipEntry object or String with the full path of the entry
-     * @param targetPath Target folder where to write the file
-     * @param maintainEntryPath If maintainEntryPath is true and the entry is inside a folder, the entry folder
-     *                          will be created in targetPath as well. Default is TRUE
-     * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
-     *                  Default is FALSE
-     *
-     * @return Boolean
-     */
-    extractEntryTo: function (
-    /*Object*/
-    entry,
-    /*String*/
-    targetPath,
-    /*Boolean*/
-    maintainEntryPath,
-    /*Boolean*/
-    overwrite) {
-      overwrite = overwrite || false;
-      maintainEntryPath = typeof maintainEntryPath === "undefined" ? true : maintainEntryPath;
-      var item = getEntry(entry);
-
-      if (!item) {
-        throw Utils.Errors.NO_ENTRY;
-      }
-
-      var entryName = item.entryName;
-      var target = sanitize(targetPath, maintainEntryPath ? entryName : pth.basename(entryName));
-
-      if (item.isDirectory) {
-        target = pth.resolve(target, "..");
-
-        var children = _zip.getEntryChildren(item);
-
-        children.forEach(function (child) {
-          if (child.isDirectory) return;
-          var content = child.getData();
-
-          if (!content) {
-            throw Utils.Errors.CANT_EXTRACT_FILE;
-          }
-
-          var childName = sanitize(targetPath, maintainEntryPath ? child.entryName : pth.basename(child.entryName));
-          Utils.writeFileTo(childName, content, overwrite);
-        });
-        return true;
-      }
-
-      var content = item.getData();
-      if (!content) throw Utils.Errors.CANT_EXTRACT_FILE;
-
-      if (fs.existsSync(target) && !overwrite) {
-        throw Utils.Errors.CANT_OVERRIDE;
-      }
-
-      Utils.writeFileTo(target, content, overwrite);
-      return true;
-    },
-
-    /**
-     * Test the archive
-     *
-     */
-    test: function () {
-      if (!_zip) {
-        return false;
-      }
-
-      for (var entry in _zip.entries) {
-        try {
-          if (entry.isDirectory) {
-            continue;
-          }
-
-          var content = _zip.entries[entry].getData();
-
-          if (!content) {
-            return false;
-          }
-        } catch (err) {
-          return false;
-        }
-      }
-
-      return true;
-    },
-
-    /**
-     * Extracts the entire archive to the given location
-     *
-     * @param targetPath Target location
-     * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
-     *                  Default is FALSE
-     */
-    extractAllTo: function (
-    /*String*/
-    targetPath,
-    /*Boolean*/
-    overwrite) {
-      overwrite = overwrite || false;
-
-      if (!_zip) {
-        throw Utils.Errors.NO_ZIP;
-      }
-
-      _zip.entries.forEach(function (entry) {
-        var entryName = sanitize(targetPath, entry.entryName.toString());
-
-        if (entry.isDirectory) {
-          Utils.makeDir(entryName);
-          return;
-        }
-
-        var content = entry.getData();
-
-        if (!content) {
-          throw Utils.Errors.CANT_EXTRACT_FILE;
-        }
-
-        Utils.writeFileTo(entryName, content, overwrite);
-
-        try {
-          fs.utimesSync(entryName, entry.header.time, entry.header.time);
-        } catch (err) {
-          throw Utils.Errors.CANT_EXTRACT_FILE;
-        }
-      });
-    },
-
-    /**
-     * Asynchronous extractAllTo
-     *
-     * @param targetPath Target location
-     * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.
-     *                  Default is FALSE
-     * @param callback
-     */
-    extractAllToAsync: function (
-    /*String*/
-    targetPath,
-    /*Boolean*/
-    overwrite,
-    /*Function*/
-    callback) {
-      if (!callback) {
-        callback = function () {};
-      }
-
-      overwrite = overwrite || false;
-
-      if (!_zip) {
-        callback(new Error(Utils.Errors.NO_ZIP));
-        return;
-      }
-
-      var entries = _zip.entries;
-      var i = entries.length;
-      entries.forEach(function (entry) {
-        if (i <= 0) return; // Had an error already
-
-        var entryName = pth.normalize(entry.entryName.toString());
-
-        if (entry.isDirectory) {
-          Utils.makeDir(sanitize(targetPath, entryName));
-          if (--i === 0) callback(undefined);
-          return;
-        }
-
-        entry.getDataAsync(function (content, err) {
-          if (i <= 0) return;
-
-          if (err) {
-            callback(new Error(err));
-            return;
-          }
-
-          if (!content) {
-            i = 0;
-            callback(new Error(Utils.Errors.CANT_EXTRACT_FILE));
-            return;
-          }
-
-          Utils.writeFileToAsync(sanitize(targetPath, entryName), content, overwrite, function (succ) {
-            try {
-              fs.utimesSync(pth.resolve(targetPath, entryName), entry.header.time, entry.header.time);
-            } catch (err) {
-              callback(new Error('Unable to set utimes'));
-            }
-
-            if (i <= 0) return;
-
-            if (!succ) {
-              i = 0;
-              callback(new Error('Unable to write'));
-              return;
-            }
-
-            if (--i === 0) callback(undefined);
-          });
-        });
-      });
-    },
-
-    /**
-     * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip
-     *
-     * @param targetFileName
-     * @param callback
-     */
-    writeZip: function (
-    /*String*/
-    targetFileName,
-    /*Function*/
-    callback) {
-      if (arguments.length === 1) {
-        if (typeof targetFileName === "function") {
-          callback = targetFileName;
-          targetFileName = "";
-        }
-      }
-
-      if (!targetFileName && _filename) {
-        targetFileName = _filename;
-      }
-
-      if (!targetFileName) return;
-
-      var zipData = _zip.compressToBuffer();
-
-      if (zipData) {
-        var ok = Utils.writeFileTo(targetFileName, zipData, true);
-        if (typeof callback === 'function') callback(!ok ? new Error("failed") : null, "");
-      }
-    },
-
-    /**
-     * Returns the content of the entire zip file as a Buffer object
-     *
-     * @return Buffer
-     */
-    toBuffer: function (
-    /*Function*/
-    onSuccess,
-    /*Function*/
-    onFail,
-    /*Function*/
-    onItemStart,
-    /*Function*/
-    onItemEnd) {
-      this.valueOf = 2;
-
-      if (typeof onSuccess === "function") {
-        _zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd);
-
-        return null;
-      }
-
-      return _zip.compressToBuffer();
-    }
-  };
-};
-
-/***/ }),
-
-/***/ "./packages/loot-core/node_modules/adm-zip/headers/entryHeader.js":
-/*!************************************************************************!*\
-  !*** ./packages/loot-core/node_modules/adm-zip/headers/entryHeader.js ***!
-  \************************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var Utils = __webpack_require__(/*! ../util */ "./packages/loot-core/node_modules/adm-zip/util/index.js"),
-    Constants = Utils.Constants;
-/* The central directory file header */
-
-
-module.exports = function () {
-  var _verMade = 0x0A,
-      _version = 0x0A,
-      _flags = 0,
-      _method = 0,
-      _time = 0,
-      _crc = 0,
-      _compressedSize = 0,
-      _size = 0,
-      _fnameLen = 0,
-      _extraLen = 0,
-      _comLen = 0,
-      _diskStart = 0,
-      _inattr = 0,
-      _attr = 0,
-      _offset = 0;
-  var _dataHeader = {};
-
-  function setTime(val) {
-    val = new Date(val);
-    _time = (val.getFullYear() - 1980 & 0x7f) << 25 // b09-16 years from 1980
-    | val.getMonth() + 1 << 21 // b05-08 month
-    | val.getDate() << 16 // b00-04 hour
-    // 2 bytes time
-    | val.getHours() << 11 // b11-15 hour
-    | val.getMinutes() << 5 // b05-10 minute
-    | val.getSeconds() >> 1; // b00-04 seconds divided by 2
-  }
-
-  setTime(+new Date());
-  return {
-    get made() {
-      return _verMade;
-    },
-
-    set made(val) {
-      _verMade = val;
-    },
-
-    get version() {
-      return _version;
-    },
-
-    set version(val) {
-      _version = val;
-    },
-
-    get flags() {
-      return _flags;
-    },
-
-    set flags(val) {
-      _flags = val;
-    },
-
-    get method() {
-      return _method;
-    },
-
-    set method(val) {
-      _method = val;
-    },
-
-    get time() {
-      return new Date((_time >> 25 & 0x7f) + 1980, (_time >> 21 & 0x0f) - 1, _time >> 16 & 0x1f, _time >> 11 & 0x1f, _time >> 5 & 0x3f, (_time & 0x1f) << 1);
-    },
-
-    set time(val) {
-      setTime(val);
-    },
-
-    get crc() {
-      return _crc;
-    },
-
-    set crc(val) {
-      _crc = val;
-    },
-
-    get compressedSize() {
-      return _compressedSize;
-    },
-
-    set compressedSize(val) {
-      _compressedSize = val;
-    },
-
-    get size() {
-      return _size;
-    },
-
-    set size(val) {
-      _size = val;
-    },
-
-    get fileNameLength() {
-      return _fnameLen;
-    },
-
-    set fileNameLength(val) {
-      _fnameLen = val;
-    },
-
-    get extraLength() {
-      return _extraLen;
-    },
-
-    set extraLength(val) {
-      _extraLen = val;
-    },
-
-    get commentLength() {
-      return _comLen;
-    },
-
-    set commentLength(val) {
-      _comLen = val;
-    },
-
-    get diskNumStart() {
-      return _diskStart;
-    },
-
-    set diskNumStart(val) {
-      _diskStart = val;
-    },
-
-    get inAttr() {
-      return _inattr;
-    },
-
-    set inAttr(val) {
-      _inattr = val;
-    },
-
-    get attr() {
-      return _attr;
-    },
-
-    set attr(val) {
-      _attr = val;
-    },
-
-    get offset() {
-      return _offset;
-    },
-
-    set offset(val) {
-      _offset = val;
-    },
-
-    get encripted() {
-      return (_flags & 1) === 1;
-    },
-
-    get entryHeaderSize() {
-      return Constants.CENHDR + _fnameLen + _extraLen + _comLen;
-    },
-
-    get realDataOffset() {
-      return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen;
-    },
-
-    get dataHeader() {
-      return _dataHeader;
-    },
-
-    loadDataHeaderFromBinary: function (
-    /*Buffer*/
-    input) {
-      var data = input.slice(_offset, _offset + Constants.LOCHDR); // 30 bytes and should start with "PK\003\004"
-
-      if (data.readUInt32LE(0) !== Constants.LOCSIG) {
-        throw Utils.Errors.INVALID_LOC;
-      }
-
-      _dataHeader = {
-        // version needed to extract
-        version: data.readUInt16LE(Constants.LOCVER),
-        // general purpose bit flag
-        flags: data.readUInt16LE(Constants.LOCFLG),
-        // compression method
-        method: data.readUInt16LE(Constants.LOCHOW),
-        // modification time (2 bytes time, 2 bytes date)
-        time: data.readUInt32LE(Constants.LOCTIM),
-        // uncompressed file crc-32 value
-        crc: data.readUInt32LE(Constants.LOCCRC),
-        // compressed size
-        compressedSize: data.readUInt32LE(Constants.LOCSIZ),
-        // uncompressed size
-        size: data.readUInt32LE(Constants.LOCLEN),
-        // filename length
-        fnameLen: data.readUInt16LE(Constants.LOCNAM),
-        // extra field length
-        extraLen: data.readUInt16LE(Constants.LOCEXT)
-      };
-    },
-    loadFromBinary: function (
-    /*Buffer*/
-    data) {
-      // data should be 46 bytes and start with "PK 01 02"
-      if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) {
-        throw Utils.Errors.INVALID_CEN;
-      } // version made by
-
-
-      _verMade = data.readUInt16LE(Constants.CENVEM); // version needed to extract
-
-      _version = data.readUInt16LE(Constants.CENVER); // encrypt, decrypt flags
-
-      _flags = data.readUInt16LE(Constants.CENFLG); // compression method
-
-      _method = data.readUInt16LE(Constants.CENHOW); // modification time (2 bytes time, 2 bytes date)
-
-      _time = data.readUInt32LE(Constants.CENTIM); // uncompressed file crc-32 value
-
-      _crc = data.readUInt32LE(Constants.CENCRC); // compressed size
-
-      _compressedSize = data.readUInt32LE(Constants.CENSIZ); // uncompressed size
-
-      _size = data.readUInt32LE(Constants.CENLEN); // filename length
-
-      _fnameLen = data.readUInt16LE(Constants.CENNAM); // extra field length
-
-      _extraLen = data.readUInt16LE(Constants.CENEXT); // file comment length
-
-      _comLen = data.readUInt16LE(Constants.CENCOM); // volume number start
-
-      _diskStart = data.readUInt16LE(Constants.CENDSK); // internal file attributes
-
-      _inattr = data.readUInt16LE(Constants.CENATT); // external file attributes
-
-      _attr = data.readUInt32LE(Constants.CENATX); // LOC header offset
-
-      _offset = data.readUInt32LE(Constants.CENOFF);
-    },
-    dataHeaderToBinary: function () {
-      // LOC header size (30 bytes)
-      var data = Buffer.alloc(Constants.LOCHDR); // "PK\003\004"
-
-      data.writeUInt32LE(Constants.LOCSIG, 0); // version needed to extract
-
-      data.writeUInt16LE(_version, Constants.LOCVER); // general purpose bit flag
-
-      data.writeUInt16LE(_flags, Constants.LOCFLG); // compression method
-
-      data.writeUInt16LE(_method, Constants.LOCHOW); // modification time (2 bytes time, 2 bytes date)
-
-      data.writeUInt32LE(_time, Constants.LOCTIM); // uncompressed file crc-32 value
-
-      data.writeUInt32LE(_crc, Constants.LOCCRC); // compressed size
-
-      data.writeUInt32LE(_compressedSize, Constants.LOCSIZ); // uncompressed size
-
-      data.writeUInt32LE(_size, Constants.LOCLEN); // filename length
-
-      data.writeUInt16LE(_fnameLen, Constants.LOCNAM); // extra field length
-
-      data.writeUInt16LE(_extraLen, Constants.LOCEXT);
-      return data;
-    },
-    entryHeaderToBinary: function () {
-      // CEN header size (46 bytes)
-      var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen); // "PK\001\002"
-
-      data.writeUInt32LE(Constants.CENSIG, 0); // version made by
-
-      data.writeUInt16LE(_verMade, Constants.CENVEM); // version needed to extract
-
-      data.writeUInt16LE(_version, Constants.CENVER); // encrypt, decrypt flags
-
-      data.writeUInt16LE(_flags, Constants.CENFLG); // compression method
-
-      data.writeUInt16LE(_method, Constants.CENHOW); // modification time (2 bytes time, 2 bytes date)
-
-      data.writeUInt32LE(_time, Constants.CENTIM); // uncompressed file crc-32 value
-
-      data.writeUInt32LE(_crc, Constants.CENCRC); // compressed size
-
-      data.writeUInt32LE(_compressedSize, Constants.CENSIZ); // uncompressed size
-
-      data.writeUInt32LE(_size, Constants.CENLEN); // filename length
-
-      data.writeUInt16LE(_fnameLen, Constants.CENNAM); // extra field length
-
-      data.writeUInt16LE(_extraLen, Constants.CENEXT); // file comment length
-
-      data.writeUInt16LE(_comLen, Constants.CENCOM); // volume number start
-
-      data.writeUInt16LE(_diskStart, Constants.CENDSK); // internal file attributes
-
-      data.writeUInt16LE(_inattr, Constants.CENATT); // external file attributes
-
-      data.writeUInt32LE(_attr, Constants.CENATX); // LOC header offset
-
-      data.writeUInt32LE(_offset, Constants.CENOFF); // fill all with
-
-      data.fill(0x00, Constants.CENHDR);
-      return data;
-    },
-    toString: function () {
-      return '{\n' + '\t"made" : ' + _verMade + ",\n" + '\t"version" : ' + _version + ",\n" + '\t"flags" : ' + _flags + ",\n" + '\t"method" : ' + Utils.methodToString(_method) + ",\n" + '\t"time" : ' + this.time + ",\n" + '\t"crc" : 0x' + _crc.toString(16).toUpperCase() + ",\n" + '\t"compressedSize" : ' + _compressedSize + " bytes,\n" + '\t"size" : ' + _size + " bytes,\n" + '\t"fileNameLength" : ' + _fnameLen + ",\n" + '\t"extraLength" : ' + _extraLen + " bytes,\n" + '\t"commentLength" : ' + _comLen + " bytes,\n" + '\t"diskNumStart" : ' + _diskStart + ",\n" + '\t"inAttr" : ' + _inattr + ",\n" + '\t"attr" : ' + _attr + ",\n" + '\t"offset" : ' + _offset + ",\n" + '\t"entryHeaderSize" : ' + (Constants.CENHDR + _fnameLen + _extraLen + _comLen) + " bytes\n" + '}';
-    }
-  };
-};
-
-/***/ }),
-
-/***/ "./packages/loot-core/node_modules/adm-zip/headers/index.js":
-/*!******************************************************************!*\
-  !*** ./packages/loot-core/node_modules/adm-zip/headers/index.js ***!
-  \******************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-exports.EntryHeader = __webpack_require__(/*! ./entryHeader */ "./packages/loot-core/node_modules/adm-zip/headers/entryHeader.js");
-exports.MainHeader = __webpack_require__(/*! ./mainHeader */ "./packages/loot-core/node_modules/adm-zip/headers/mainHeader.js");
-
-/***/ }),
-
-/***/ "./packages/loot-core/node_modules/adm-zip/headers/mainHeader.js":
-/*!***********************************************************************!*\
-  !*** ./packages/loot-core/node_modules/adm-zip/headers/mainHeader.js ***!
-  \***********************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var Utils = __webpack_require__(/*! ../util */ "./packages/loot-core/node_modules/adm-zip/util/index.js"),
-    Constants = Utils.Constants;
-/* The entries in the end of central directory */
-
-
-module.exports = function () {
-  var _volumeEntries = 0,
-      _totalEntries = 0,
-      _size = 0,
-      _offset = 0,
-      _commentLength = 0;
-  return {
-    get diskEntries() {
-      return _volumeEntries;
-    },
-
-    set diskEntries(
-    /*Number*/
-    val) {
-      _volumeEntries = _totalEntries = val;
-    },
-
-    get totalEntries() {
-      return _totalEntries;
-    },
-
-    set totalEntries(
-    /*Number*/
-    val) {
-      _totalEntries = _volumeEntries = val;
-    },
-
-    get size() {
-      return _size;
-    },
-
-    set size(
-    /*Number*/
-    val) {
-      _size = val;
-    },
-
-    get offset() {
-      return _offset;
-    },
-
-    set offset(
-    /*Number*/
-    val) {
-      _offset = val;
-    },
-
-    get commentLength() {
-      return _commentLength;
-    },
-
-    set commentLength(
-    /*Number*/
-    val) {
-      _commentLength = val;
-    },
-
-    get mainHeaderSize() {
-      return Constants.ENDHDR + _commentLength;
-    },
-
-    loadFromBinary: function (
-    /*Buffer*/
-    data) {
-      // data should be 22 bytes and start with "PK 05 06"
-      if (data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG) throw Utils.Errors.INVALID_END; // number of entries on this volume
-
-      _volumeEntries = data.readUInt16LE(Constants.ENDSUB); // total number of entries
-
-      _totalEntries = data.readUInt16LE(Constants.ENDTOT); // central directory size in bytes
-
-      _size = data.readUInt32LE(Constants.ENDSIZ); // offset of first CEN header
-
-      _offset = data.readUInt32LE(Constants.ENDOFF); // zip file comment length
-
-      _commentLength = data.readUInt16LE(Constants.ENDCOM);
-    },
-    toBinary: function () {
-      var b = Buffer.alloc(Constants.ENDHDR + _commentLength); // "PK 05 06" signature
-
-      b.writeUInt32LE(Constants.ENDSIG, 0);
-      b.writeUInt32LE(0, 4); // number of entries on this volume
-
-      b.writeUInt16LE(_volumeEntries, Constants.ENDSUB); // total number of entries
-
-      b.writeUInt16LE(_totalEntries, Constants.ENDTOT); // central directory size in bytes
-
-      b.writeUInt32LE(_size, Constants.ENDSIZ); // offset of first CEN header
-
-      b.writeUInt32LE(_offset, Constants.ENDOFF); // zip file comment length
-
-      b.writeUInt16LE(_commentLength, Constants.ENDCOM); // fill comment memory with spaces so no garbage is left there
-
-      b.fill(" ", Constants.ENDHDR);
-      return b;
-    },
-    toString: function () {
-      return '{\n' + '\t"diskEntries" : ' + _volumeEntries + ",\n" + '\t"totalEntries" : ' + _totalEntries + ",\n" + '\t"size" : ' + _size + " bytes,\n" + '\t"offset" : 0x' + _offset.toString(16).toUpperCase() + ",\n" + '\t"commentLength" : 0x' + _commentLength + "\n" + '}';
-    }
-  };
-};
-
-/***/ }),
-
-/***/ "./packages/loot-core/node_modules/adm-zip/methods/deflater.js":
-/*!*********************************************************************!*\
-  !*** ./packages/loot-core/node_modules/adm-zip/methods/deflater.js ***!
-  \*********************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = function (
-/*Buffer*/
-inbuf) {
-  var zlib = __webpack_require__(/*! zlib */ "zlib");
-
-  var opts = {
-    chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024
-  };
-  return {
-    deflate: function () {
-      return zlib.deflateRawSync(inbuf, opts);
-    },
-    deflateAsync: function (
-    /*Function*/
-    callback) {
-      var tmp = zlib.createDeflateRaw(opts),
-          parts = [],
-          total = 0;
-      tmp.on('data', function (data) {
-        parts.push(data);
-        total += data.length;
-      });
-      tmp.on('end', function () {
-        var buf = Buffer.alloc(total),
-            written = 0;
-        buf.fill(0);
-
-        for (var i = 0; i < parts.length; i++) {
-          var part = parts[i];
-          part.copy(buf, written);
-          written += part.length;
-        }
-
-        callback && callback(buf);
-      });
-      tmp.end(inbuf);
-    }
-  };
-};
-
-/***/ }),
-
-/***/ "./packages/loot-core/node_modules/adm-zip/methods/index.js":
-/*!******************************************************************!*\
-  !*** ./packages/loot-core/node_modules/adm-zip/methods/index.js ***!
-  \******************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-exports.Deflater = __webpack_require__(/*! ./deflater */ "./packages/loot-core/node_modules/adm-zip/methods/deflater.js");
-exports.Inflater = __webpack_require__(/*! ./inflater */ "./packages/loot-core/node_modules/adm-zip/methods/inflater.js");
-
-/***/ }),
-
-/***/ "./packages/loot-core/node_modules/adm-zip/methods/inflater.js":
-/*!*********************************************************************!*\
-  !*** ./packages/loot-core/node_modules/adm-zip/methods/inflater.js ***!
-  \*********************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = function (
-/*Buffer*/
-inbuf) {
-  var zlib = __webpack_require__(/*! zlib */ "zlib");
-
-  return {
-    inflate: function () {
-      return zlib.inflateRawSync(inbuf);
-    },
-    inflateAsync: function (
-    /*Function*/
-    callback) {
-      var tmp = zlib.createInflateRaw(),
-          parts = [],
-          total = 0;
-      tmp.on('data', function (data) {
-        parts.push(data);
-        total += data.length;
-      });
-      tmp.on('end', function () {
-        var buf = Buffer.alloc(total),
-            written = 0;
-        buf.fill(0);
-
-        for (var i = 0; i < parts.length; i++) {
-          var part = parts[i];
-          part.copy(buf, written);
-          written += part.length;
-        }
-
-        callback && callback(buf);
-      });
-      tmp.end(inbuf);
-    }
-  };
-};
-
-/***/ }),
-
-/***/ "./packages/loot-core/node_modules/adm-zip/util/constants.js":
-/*!*******************************************************************!*\
-  !*** ./packages/loot-core/node_modules/adm-zip/util/constants.js ***!
-  \*******************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-module.exports = {
-  /* The local file header */
-  LOCHDR: 30,
-  // LOC header size
-  LOCSIG: 0x04034b50,
-  // "PK\003\004"
-  LOCVER: 4,
-  // version needed to extract
-  LOCFLG: 6,
-  // general purpose bit flag
-  LOCHOW: 8,
-  // compression method
-  LOCTIM: 10,
-  // modification time (2 bytes time, 2 bytes date)
-  LOCCRC: 14,
-  // uncompressed file crc-32 value
-  LOCSIZ: 18,
-  // compressed size
-  LOCLEN: 22,
-  // uncompressed size
-  LOCNAM: 26,
-  // filename length
-  LOCEXT: 28,
-  // extra field length
-
-  /* The Data descriptor */
-  EXTSIG: 0x08074b50,
-  // "PK\007\008"
-  EXTHDR: 16,
-  // EXT header size
-  EXTCRC: 4,
-  // uncompressed file crc-32 value
-  EXTSIZ: 8,
-  // compressed size
-  EXTLEN: 12,
-  // uncompressed size
-
-  /* The central directory file header */
-  CENHDR: 46,
-  // CEN header size
-  CENSIG: 0x02014b50,
-  // "PK\001\002"
-  CENVEM: 4,
-  // version made by
-  CENVER: 6,
-  // version needed to extract
-  CENFLG: 8,
-  // encrypt, decrypt flags
-  CENHOW: 10,
-  // compression method
-  CENTIM: 12,
-  // modification time (2 bytes time, 2 bytes date)
-  CENCRC: 16,
-  // uncompressed file crc-32 value
-  CENSIZ: 20,
-  // compressed size
-  CENLEN: 24,
-  // uncompressed size
-  CENNAM: 28,
-  // filename length
-  CENEXT: 30,
-  // extra field length
-  CENCOM: 32,
-  // file comment length
-  CENDSK: 34,
-  // volume number start
-  CENATT: 36,
-  // internal file attributes
-  CENATX: 38,
-  // external file attributes (host system dependent)
-  CENOFF: 42,
-  // LOC header offset
-
-  /* The entries in the end of central directory */
-  ENDHDR: 22,
-  // END header size
-  ENDSIG: 0x06054b50,
-  // "PK\005\006"
-  ENDSUB: 8,
-  // number of entries on this disk
-  ENDTOT: 10,
-  // total number of entries
-  ENDSIZ: 12,
-  // central directory size in bytes
-  ENDOFF: 16,
-  // offset of first CEN header
-  ENDCOM: 20,
-  // zip file comment length
-
-  /* Compression methods */
-  STORED: 0,
-  // no compression
-  SHRUNK: 1,
-  // shrunk
-  REDUCED1: 2,
-  // reduced with compression factor 1
-  REDUCED2: 3,
-  // reduced with compression factor 2
-  REDUCED3: 4,
-  // reduced with compression factor 3
-  REDUCED4: 5,
-  // reduced with compression factor 4
-  IMPLODED: 6,
-  // imploded
-  // 7 reserved
-  DEFLATED: 8,
-  // deflated
-  ENHANCED_DEFLATED: 9,
-  // enhanced deflated
-  PKWARE: 10,
-  // PKWare DCL imploded
-  // 11 reserved
-  BZIP2: 12,
-  //  compressed using BZIP2
-  // 13 reserved
-  LZMA: 14,
-  // LZMA
-  // 15-17 reserved
-  IBM_TERSE: 18,
-  // compressed using IBM TERSE
-  IBM_LZ77: 19,
-  //IBM LZ77 z
-
-  /* General purpose bit flag */
-  FLG_ENC: 0,
-  // encripted file
-  FLG_COMP1: 1,
-  // compression option
-  FLG_COMP2: 2,
-  // compression option
-  FLG_DESC: 4,
-  // data descriptor
-  FLG_ENH: 8,
-  // enhanced deflation
-  FLG_STR: 16,
-  // strong encryption
-  FLG_LNG: 1024,
-  // language encoding
-  FLG_MSK: 4096,
-  // mask header values
-
-  /* Load type */
-  FILE: 0,
-  BUFFER: 1,
-  NONE: 2,
-
-  /* 4.5 Extensible data fields */
-  EF_ID: 0,
-  EF_SIZE: 2,
-
-  /* Header IDs */
-  ID_ZIP64: 0x0001,
-  ID_AVINFO: 0x0007,
-  ID_PFS: 0x0008,
-  ID_OS2: 0x0009,
-  ID_NTFS: 0x000a,
-  ID_OPENVMS: 0x000c,
-  ID_UNIX: 0x000d,
-  ID_FORK: 0x000e,
-  ID_PATCH: 0x000f,
-  ID_X509_PKCS7: 0x0014,
-  ID_X509_CERTID_F: 0x0015,
-  ID_X509_CERTID_C: 0x0016,
-  ID_STRONGENC: 0x0017,
-  ID_RECORD_MGT: 0x0018,
-  ID_X509_PKCS7_RL: 0x0019,
-  ID_IBM1: 0x0065,
-  ID_IBM2: 0x0066,
-  ID_POSZIP: 0x4690,
-  EF_ZIP64_OR_32: 0xffffffff,
-  EF_ZIP64_OR_16: 0xffff,
-  EF_ZIP64_SUNCOMP: 0,
-  EF_ZIP64_SCOMP: 8,
-  EF_ZIP64_RHO: 16,
-  EF_ZIP64_DSN: 24
-};
-
-/***/ }),
-
-/***/ "./packages/loot-core/node_modules/adm-zip/util/errors.js":
-/*!****************************************************************!*\
-  !*** ./packages/loot-core/node_modules/adm-zip/util/errors.js ***!
-  \****************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
-
-module.exports = {
-  /* Header error messages */
-  "INVALID_LOC": "Invalid LOC header (bad signature)",
-  "INVALID_CEN": "Invalid CEN header (bad signature)",
-  "INVALID_END": "Invalid END header (bad signature)",
-
-  /* ZipEntry error messages*/
-  "NO_DATA": "Nothing to decompress",
-  "BAD_CRC": "CRC32 checksum failed",
-  "FILE_IN_THE_WAY": "There is a file in the way: %s",
-  "UNKNOWN_METHOD": "Invalid/unsupported compression method",
-
-  /* Inflater error messages */
-  "AVAIL_DATA": "inflate::Available inflate data did not terminate",
-  "INVALID_DISTANCE": "inflate::Invalid literal/length or distance code in fixed or dynamic block",
-  "TO_MANY_CODES": "inflate::Dynamic block code description: too many length or distance codes",
-  "INVALID_REPEAT_LEN": "inflate::Dynamic block code description: repeat more than specified lengths",
-  "INVALID_REPEAT_FIRST": "inflate::Dynamic block code description: repeat lengths with no first length",
-  "INCOMPLETE_CODES": "inflate::Dynamic block code description: code lengths codes incomplete",
-  "INVALID_DYN_DISTANCE": "inflate::Dynamic block code description: invalid distance code lengths",
-  "INVALID_CODES_LEN": "inflate::Dynamic block code description: invalid literal/length code lengths",
-  "INVALID_STORE_BLOCK": "inflate::Stored block length did not match one's complement",
-  "INVALID_BLOCK_TYPE": "inflate::Invalid block type (type == 3)",
-
-  /* ADM-ZIP error messages */
-  "CANT_EXTRACT_FILE": "Could not extract the file",
-  "CANT_OVERRIDE": "Target file already exists",
-  "NO_ZIP": "No zip file was loaded",
-  "NO_ENTRY": "Entry doesn't exist",
-  "DIRECTORY_CONTENT_ERROR": "A directory cannot have content",
-  "FILE_NOT_FOUND": "File not found: %s",
-  "NOT_IMPLEMENTED": "Not implemented",
-  "INVALID_FILENAME": "Invalid filename",
-  "INVALID_FORMAT": "Invalid or unsupported zip format. No END header found"
-};
-
-/***/ }),
-
-/***/ "./packages/loot-core/node_modules/adm-zip/util/fattr.js":
-/*!***************************************************************!*\
-  !*** ./packages/loot-core/node_modules/adm-zip/util/fattr.js ***!
-  \***************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var fs = __webpack_require__(/*! ./fileSystem */ "./packages/loot-core/node_modules/adm-zip/util/fileSystem.js").require(),
-    pth = __webpack_require__(/*! path */ "path");
-
-fs.existsSync = fs.existsSync || pth.existsSync;
-
-module.exports = function (
-/*String*/
-path) {
-  var _path = path || "",
-      _permissions = 0,
-      _obj = newAttr(),
-      _stat = null;
-
-  function newAttr() {
-    return {
-      directory: false,
-      readonly: false,
-      hidden: false,
-      executable: false,
-      mtime: 0,
-      atime: 0
-    };
-  }
-
-  if (_path && fs.existsSync(_path)) {
-    _stat = fs.statSync(_path);
-    _obj.directory = _stat.isDirectory();
-    _obj.mtime = _stat.mtime;
-    _obj.atime = _stat.atime;
-    _obj.executable = !!(1 & parseInt((_stat.mode & parseInt("777", 8)).toString(8)[0]));
-    _obj.readonly = !!(2 & parseInt((_stat.mode & parseInt("777", 8)).toString(8)[0]));
-    _obj.hidden = pth.basename(_path)[0] === ".";
-  } else {
-    console.warn("Invalid path: " + _path);
-  }
-
-  return {
-    get directory() {
-      return _obj.directory;
-    },
-
-    get readOnly() {
-      return _obj.readonly;
-    },
-
-    get hidden() {
-      return _obj.hidden;
-    },
-
-    get mtime() {
-      return _obj.mtime;
-    },
-
-    get atime() {
-      return _obj.atime;
-    },
-
-    get executable() {
-      return _obj.executable;
-    },
-
-    decodeAttributes: function (val) {},
-    encodeAttributes: function (val) {},
-    toString: function () {
-      return '{\n' + '\t"path" : "' + _path + ",\n" + '\t"isDirectory" : ' + _obj.directory + ",\n" + '\t"isReadOnly" : ' + _obj.readonly + ",\n" + '\t"isHidden" : ' + _obj.hidden + ",\n" + '\t"isExecutable" : ' + _obj.executable + ",\n" + '\t"mTime" : ' + _obj.mtime + "\n" + '\t"aTime" : ' + _obj.atime + "\n" + '}';
-    }
-  };
-};
-
-/***/ }),
-
-/***/ "./packages/loot-core/node_modules/adm-zip/util/fileSystem.js":
-/*!********************************************************************!*\
-  !*** ./packages/loot-core/node_modules/adm-zip/util/fileSystem.js ***!
-  \********************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-exports.require = function () {
-  var fs = __webpack_require__(/*! fs */ "fs");
-
-  if (process.versions['electron']) {
-    try {
-      originalFs = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module 'original-fs'"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
-
-      if (Object.keys(originalFs).length > 0) {
-        fs = originalFs;
-      }
-    } catch (e) {}
-  }
-
-  return fs;
-};
-
-/***/ }),
-
-/***/ "./packages/loot-core/node_modules/adm-zip/util/index.js":
-/*!***************************************************************!*\
-  !*** ./packages/loot-core/node_modules/adm-zip/util/index.js ***!
-  \***************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-module.exports = __webpack_require__(/*! ./utils */ "./packages/loot-core/node_modules/adm-zip/util/utils.js");
-module.exports.FileSystem = __webpack_require__(/*! ./fileSystem */ "./packages/loot-core/node_modules/adm-zip/util/fileSystem.js");
-module.exports.Constants = __webpack_require__(/*! ./constants */ "./packages/loot-core/node_modules/adm-zip/util/constants.js");
-module.exports.Errors = __webpack_require__(/*! ./errors */ "./packages/loot-core/node_modules/adm-zip/util/errors.js");
-module.exports.FileAttr = __webpack_require__(/*! ./fattr */ "./packages/loot-core/node_modules/adm-zip/util/fattr.js");
-
-/***/ }),
-
-/***/ "./packages/loot-core/node_modules/adm-zip/util/utils.js":
-/*!***************************************************************!*\
-  !*** ./packages/loot-core/node_modules/adm-zip/util/utils.js ***!
-  \***************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var fs = __webpack_require__(/*! ./fileSystem */ "./packages/loot-core/node_modules/adm-zip/util/fileSystem.js").require(),
-    pth = __webpack_require__(/*! path */ "path");
-
-fs.existsSync = fs.existsSync || pth.existsSync;
-
-module.exports = function () {
-  var crcTable = [],
-      Constants = __webpack_require__(/*! ./constants */ "./packages/loot-core/node_modules/adm-zip/util/constants.js"),
-      Errors = __webpack_require__(/*! ./errors */ "./packages/loot-core/node_modules/adm-zip/util/errors.js"),
-      PATH_SEPARATOR = pth.sep;
-
-  function mkdirSync(
-  /*String*/
-  path) {
-    var resolvedPath = path.split(PATH_SEPARATOR)[0];
-    path.split(PATH_SEPARATOR).forEach(function (name) {
-      if (!name || name.substr(-1, 1) === ":") return;
-      resolvedPath += PATH_SEPARATOR + name;
-      var stat;
-
-      try {
-        stat = fs.statSync(resolvedPath);
-      } catch (e) {
-        fs.mkdirSync(resolvedPath);
-      }
-
-      if (stat && stat.isFile()) throw Errors.FILE_IN_THE_WAY.replace("%s", resolvedPath);
-    });
-  }
-
-  function findSync(
-  /*String*/
-  dir,
-  /*RegExp*/
-  pattern,
-  /*Boolean*/
-  recoursive) {
-    if (typeof pattern === 'boolean') {
-      recoursive = pattern;
-      pattern = undefined;
-    }
-
-    var files = [];
-    fs.readdirSync(dir).forEach(function (file) {
-      var path = pth.join(dir, file);
-      if (fs.statSync(path).isDirectory() && recoursive) files = files.concat(findSync(path, pattern, recoursive));
-
-      if (!pattern || pattern.test(path)) {
-        files.push(pth.normalize(path) + (fs.statSync(path).isDirectory() ? PATH_SEPARATOR : ""));
-      }
-    });
-    return files;
-  }
-
-  return {
-    makeDir: function (
-    /*String*/
-    path) {
-      mkdirSync(path);
-    },
-    crc32: function (buf) {
-      if (typeof buf === 'string') {
-        buf = Buffer.alloc(buf.length, buf);
-      }
-
-      var b = Buffer.alloc(4);
-
-      if (!crcTable.length) {
-        for (var n = 0; n < 256; n++) {
-          var c = n;
-
-          for (var k = 8; --k >= 0;) //
-          if ((c & 1) !== 0) {
-            c = 0xedb88320 ^ c >>> 1;
-          } else {
-            c = c >>> 1;
-          }
-
-          if (c < 0) {
-            b.writeInt32LE(c, 0);
-            c = b.readUInt32LE(0);
-          }
-
-          crcTable[n] = c;
-        }
-      }
-
-      var crc = 0,
-          off = 0,
-          len = buf.length,
-          c1 = ~crc;
-
-      while (--len >= 0) c1 = crcTable[(c1 ^ buf[off++]) & 0xff] ^ c1 >>> 8;
-
-      crc = ~c1;
-      b.writeInt32LE(crc & 0xffffffff, 0);
-      return b.readUInt32LE(0);
-    },
-    methodToString: function (
-    /*Number*/
-    method) {
-      switch (method) {
-        case Constants.STORED:
-          return 'STORED (' + method + ')';
-
-        case Constants.DEFLATED:
-          return 'DEFLATED (' + method + ')';
-
-        default:
-          return 'UNSUPPORTED (' + method + ')';
-      }
-    },
-    writeFileTo: function (
-    /*String*/
-    path,
-    /*Buffer*/
-    content,
-    /*Boolean*/
-    overwrite,
-    /*Number*/
-    attr) {
-      if (fs.existsSync(path)) {
-        if (!overwrite) return false; // cannot overwrite
-
-        var stat = fs.statSync(path);
-
-        if (stat.isDirectory()) {
-          return false;
-        }
-      }
-
-      var folder = pth.dirname(path);
-
-      if (!fs.existsSync(folder)) {
-        mkdirSync(folder);
-      }
-
-      var fd;
-
-      try {
-        fd = fs.openSync(path, 'w', 438); // 0666
-      } catch (e) {
-        fs.chmodSync(path, 438);
-        fd = fs.openSync(path, 'w', 438);
-      }
-
-      if (fd) {
-        try {
-          fs.writeSync(fd, content, 0, content.length, 0);
-        } catch (e) {
-          throw e;
-        } finally {
-          fs.closeSync(fd);
-        }
-      }
-
-      fs.chmodSync(path, attr || 438);
-      return true;
-    },
-    writeFileToAsync: function (
-    /*String*/
-    path,
-    /*Buffer*/
-    content,
-    /*Boolean*/
-    overwrite,
-    /*Number*/
-    attr,
-    /*Function*/
-    callback) {
-      if (typeof attr === 'function') {
-        callback = attr;
-        attr = undefined;
-      }
-
-      fs.exists(path, function (exists) {
-        if (exists && !overwrite) return callback(false);
-        fs.stat(path, function (err, stat) {
-          if (exists && stat.isDirectory()) {
-            return callback(false);
-          }
-
-          var folder = pth.dirname(path);
-          fs.exists(folder, function (exists) {
-            if (!exists) mkdirSync(folder);
-            fs.open(path, 'w', 438, function (err, fd) {
-              if (err) {
-                fs.chmod(path, 438, function () {
-                  fs.open(path, 'w', 438, function (err, fd) {
-                    fs.write(fd, content, 0, content.length, 0, function () {
-                      fs.close(fd, function () {
-                        fs.chmod(path, attr || 438, function () {
-                          callback(true);
-                        });
-                      });
-                    });
-                  });
-                });
-              } else {
-                if (fd) {
-                  fs.write(fd, content, 0, content.length, 0, function () {
-                    fs.close(fd, function () {
-                      fs.chmod(path, attr || 438, function () {
-                        callback(true);
-                      });
-                    });
-                  });
-                } else {
-                  fs.chmod(path, attr || 438, function () {
-                    callback(true);
-                  });
-                }
-              }
-            });
-          });
-        });
-      });
-    },
-    findFiles: function (
-    /*String*/
-    path) {
-      return findSync(path, true);
-    },
-    getAttributes: function (
-    /*String*/
-    path) {},
-    setAttributes: function (
-    /*String*/
-    path) {},
-    toBuffer: function (input) {
-      if (Buffer.isBuffer(input)) {
-        return input;
-      } else {
-        if (input.length === 0) {
-          return Buffer.alloc(0);
-        }
-
-        return Buffer.from(input, 'utf8');
-      }
-    },
-    Constants: Constants,
-    Errors: Errors
-  };
-}();
-
-/***/ }),
-
-/***/ "./packages/loot-core/node_modules/adm-zip/zipEntry.js":
-/*!*************************************************************!*\
-  !*** ./packages/loot-core/node_modules/adm-zip/zipEntry.js ***!
-  \*************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var Utils = __webpack_require__(/*! ./util */ "./packages/loot-core/node_modules/adm-zip/util/index.js"),
-    Headers = __webpack_require__(/*! ./headers */ "./packages/loot-core/node_modules/adm-zip/headers/index.js"),
-    Constants = Utils.Constants,
-    Methods = __webpack_require__(/*! ./methods */ "./packages/loot-core/node_modules/adm-zip/methods/index.js");
-
-module.exports = function (
-/*Buffer*/
-input) {
-  var _entryHeader = new Headers.EntryHeader(),
-      _entryName = Buffer.alloc(0),
-      _comment = Buffer.alloc(0),
-      _isDirectory = false,
-      uncompressedData = null,
-      _extra = Buffer.alloc(0);
-
-  function getCompressedDataFromZip() {
-    if (!input || !Buffer.isBuffer(input)) {
-      return Buffer.alloc(0);
-    }
-
-    _entryHeader.loadDataHeaderFromBinary(input);
-
-    return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize);
-  }
-
-  function crc32OK(data) {
-    // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written
-    if ((_entryHeader.flags & 0x8) !== 0x8) {
-      if (Utils.crc32(data) !== _entryHeader.dataHeader.crc) {
-        return false;
-      }
-    } else {// @TODO: load and check data descriptor header
-      // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure
-      // (optionally preceded by a 4-byte signature) immediately after the compressed data:
-    }
-
-    return true;
-  }
-
-  function decompress(
-  /*Boolean*/
-  async,
-  /*Function*/
-  callback,
-  /*String*/
-  pass) {
-    if (typeof callback === 'undefined' && typeof async === 'string') {
-      pass = async;
-      async = void 0;
-    }
-
-    if (_isDirectory) {
-      if (async && callback) {
-        callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error.
-      }
-
-      return Buffer.alloc(0);
-    }
-
-    var compressedData = getCompressedDataFromZip();
-
-    if (compressedData.length === 0) {
-      if (async && callback) callback(compressedData, Utils.Errors.NO_DATA); //si added error.
-
-      return compressedData;
-    }
-
-    var data = Buffer.alloc(_entryHeader.size);
-
-    switch (_entryHeader.method) {
-      case Utils.Constants.STORED:
-        compressedData.copy(data);
-
-        if (!crc32OK(data)) {
-          if (async && callback) callback(data, Utils.Errors.BAD_CRC); //si added error
-
-          return Utils.Errors.BAD_CRC;
-        } else {
-          //si added otherwise did not seem to return data.
-          if (async && callback) callback(data);
-          return data;
-        }
-
-      case Utils.Constants.DEFLATED:
-        var inflater = new Methods.Inflater(compressedData);
-
-        if (!async) {
-          var result = inflater.inflate(data);
-          result.copy(data, 0);
-
-          if (!crc32OK(data)) {
-            console.warn(Utils.Errors.BAD_CRC + " " + _entryName.toString());
-          }
-
-          return data;
-        } else {
-          inflater.inflateAsync(function (result) {
-            result.copy(data, 0);
-
-            if (!crc32OK(data)) {
-              if (callback) callback(data, Utils.Errors.BAD_CRC); //si added error
-            } else {
-              //si added otherwise did not seem to return data.
-              if (callback) callback(data);
-            }
-          });
-        }
-
-        break;
-
-      default:
-        if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD);
-        return Utils.Errors.UNKNOWN_METHOD;
-    }
-  }
-
-  function compress(
-  /*Boolean*/
-  async,
-  /*Function*/
-  callback) {
-    if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {
-      // no data set or the data wasn't changed to require recompression
-      if (async && callback) callback(getCompressedDataFromZip());
-      return getCompressedDataFromZip();
-    }
-
-    if (uncompressedData.length && !_isDirectory) {
-      var compressedData; // Local file header
-
-      switch (_entryHeader.method) {
-        case Utils.Constants.STORED:
-          _entryHeader.compressedSize = _entryHeader.size;
-          compressedData = Buffer.alloc(uncompressedData.length);
-          uncompressedData.copy(compressedData);
-          if (async && callback) callback(compressedData);
-          return compressedData;
-
-        default:
-        case Utils.Constants.DEFLATED:
-          var deflater = new Methods.Deflater(uncompressedData);
-
-          if (!async) {
-            var deflated = deflater.deflate();
-            _entryHeader.compressedSize = deflated.length;
-            return deflated;
-          } else {
-            deflater.deflateAsync(function (data) {
-              compressedData = Buffer.alloc(data.length);
-              _entryHeader.compressedSize = data.length;
-              data.copy(compressedData);
-              callback && callback(compressedData);
-            });
-          }
-
-          deflater = null;
-          break;
-      }
-    } else {
-      if (async && callback) {
-        callback(Buffer.alloc(0));
-      } else {
-        return Buffer.alloc(0);
-      }
-    }
-  }
-
-  function readUInt64LE(buffer, offset) {
-    return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset);
-  }
-
-  function parseExtra(data) {
-    var offset = 0;
-    var signature, size, part;
-
-    while (offset < data.length) {
-      signature = data.readUInt16LE(offset);
-      offset += 2;
-      size = data.readUInt16LE(offset);
-      offset += 2;
-      part = data.slice(offset, offset + size);
-      offset += size;
-
-      if (Constants.ID_ZIP64 === signature) {
-        parseZip64ExtendedInformation(part);
-      }
-    }
-  } //Override header field values with values from the ZIP64 extra field
-
-
-  function parseZip64ExtendedInformation(data) {
-    var size, compressedSize, offset, diskNumStart;
-
-    if (data.length >= Constants.EF_ZIP64_SCOMP) {
-      size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);
-
-      if (_entryHeader.size === Constants.EF_ZIP64_OR_32) {
-        _entryHeader.size = size;
-      }
-    }
-
-    if (data.length >= Constants.EF_ZIP64_RHO) {
-      compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);
-
-      if (_entryHeader.compressedSize === Constants.EF_ZIP64_OR_32) {
-        _entryHeader.compressedSize = compressedSize;
-      }
-    }
-
-    if (data.length >= Constants.EF_ZIP64_DSN) {
-      offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);
-
-      if (_entryHeader.offset === Constants.EF_ZIP64_OR_32) {
-        _entryHeader.offset = offset;
-      }
-    }
-
-    if (data.length >= Constants.EF_ZIP64_DSN + 4) {
-      diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);
-
-      if (_entryHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {
-        _entryHeader.diskNumStart = diskNumStart;
-      }
-    }
-  }
-
-  return {
-    get entryName() {
-      return _entryName.toString();
-    },
-
-    get rawEntryName() {
-      return _entryName;
-    },
-
-    set entryName(val) {
-      _entryName = Utils.toBuffer(val);
-      var lastChar = _entryName[_entryName.length - 1];
-      _isDirectory = lastChar === 47 || lastChar === 92;
-      _entryHeader.fileNameLength = _entryName.length;
-    },
-
-    get extra() {
-      return _extra;
-    },
-
-    set extra(val) {
-      _extra = val;
-      _entryHeader.extraLength = val.length;
-      parseExtra(val);
-    },
-
-    get comment() {
-      return _comment.toString();
-    },
-
-    set comment(val) {
-      _comment = Utils.toBuffer(val);
-      _entryHeader.commentLength = _comment.length;
-    },
-
-    get name() {
-      var n = _entryName.toString();
-
-      return _isDirectory ? n.substr(n.length - 1).split("/").pop() : n.split("/").pop();
-    },
-
-    get isDirectory() {
-      return _isDirectory;
-    },
-
-    getCompressedData: function () {
-      return compress(false, null);
-    },
-    getCompressedDataAsync: function (
-    /*Function*/
-    callback) {
-      compress(true, callback);
-    },
-    setData: function (value) {
-      uncompressedData = Utils.toBuffer(value);
-
-      if (!_isDirectory && uncompressedData.length) {
-        _entryHeader.size = uncompressedData.length;
-        _entryHeader.method = Utils.Constants.DEFLATED;
-        _entryHeader.crc = Utils.crc32(value);
-        _entryHeader.changed = true;
-      } else {
-        // folders and blank files should be stored
-        _entryHeader.method = Utils.Constants.STORED;
-      }
-    },
-    getData: function (pass) {
-      if (_entryHeader.changed) {
-        return uncompressedData;
-      } else {
-        return decompress(false, null, pass);
-      }
-    },
-    getDataAsync: function (
-    /*Function*/
-    callback, pass) {
-      if (_entryHeader.changed) {
-        callback(uncompressedData);
-      } else {
-        decompress(true, callback, pass);
-      }
-    },
-
-    set attr(attr) {
-      _entryHeader.attr = attr;
-    },
-
-    get attr() {
-      return _entryHeader.attr;
-    },
-
-    set header(
-    /*Buffer*/
-    data) {
-      _entryHeader.loadFromBinary(data);
-    },
-
-    get header() {
-      return _entryHeader;
-    },
-
-    packHeader: function () {
-      var header = _entryHeader.entryHeaderToBinary(); // add
-
-
-      _entryName.copy(header, Utils.Constants.CENHDR);
-
-      if (_entryHeader.extraLength) {
-        _extra.copy(header, Utils.Constants.CENHDR + _entryName.length);
-      }
-
-      if (_entryHeader.commentLength) {
-        _comment.copy(header, Utils.Constants.CENHDR + _entryName.length + _entryHeader.extraLength, _comment.length);
-      }
-
-      return header;
-    },
-    toString: function () {
-      return '{\n' + '\t"entryName" : "' + _entryName.toString() + "\",\n" + '\t"name" : "' + (_isDirectory ? _entryName.toString().replace(/\/$/, '').split("/").pop() : _entryName.toString().split("/").pop()) + "\",\n" + '\t"comment" : "' + _comment.toString() + "\",\n" + '\t"isDirectory" : ' + _isDirectory + ",\n" + '\t"header" : ' + _entryHeader.toString().replace(/\t/mg, "\t\t").replace(/}/mg, "\t}") + ",\n" + '\t"compressedData" : <' + (input && input.length + " bytes buffer" || "null") + ">\n" + '\t"data" : <' + (uncompressedData && uncompressedData.length + " bytes buffer" || "null") + ">\n" + '}';
-    }
-  };
-};
-
-/***/ }),
-
-/***/ "./packages/loot-core/node_modules/adm-zip/zipFile.js":
-/*!************************************************************!*\
-  !*** ./packages/loot-core/node_modules/adm-zip/zipFile.js ***!
-  \************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-var ZipEntry = __webpack_require__(/*! ./zipEntry */ "./packages/loot-core/node_modules/adm-zip/zipEntry.js"),
-    Headers = __webpack_require__(/*! ./headers */ "./packages/loot-core/node_modules/adm-zip/headers/index.js"),
-    Utils = __webpack_require__(/*! ./util */ "./packages/loot-core/node_modules/adm-zip/util/index.js");
-
-module.exports = function (
-/*String|Buffer*/
-input,
-/*Number*/
-inputType) {
-  var entryList = [],
-      entryTable = {},
-      _comment = Buffer.alloc(0),
-      filename = "",
-      fs = Utils.FileSystem.require(),
-      inBuffer = null,
-      mainHeader = new Headers.MainHeader();
-
-  if (inputType === Utils.Constants.FILE) {
-    // is a filename
-    filename = input;
-    inBuffer = fs.readFileSync(filename);
-    readMainHeader();
-  } else if (inputType === Utils.Constants.BUFFER) {
-    // is a memory buffer
-    inBuffer = input;
-    readMainHeader();
-  } else {// none. is a new file
-  }
-
-  function readEntries() {
-    entryTable = {};
-    entryList = new Array(mainHeader.diskEntries); // total number of entries
-
-    var index = mainHeader.offset; // offset of first CEN header
-
-    for (var i = 0; i < entryList.length; i++) {
-      var tmp = index,
-          entry = new ZipEntry(inBuffer);
-      entry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR);
-      entry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength);
-
-      if (entry.header.extraLength) {
-        entry.extra = inBuffer.slice(tmp, tmp += entry.header.extraLength);
-      }
-
-      if (entry.header.commentLength) entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength);
-      index += entry.header.entryHeaderSize;
-      entryList[i] = entry;
-      entryTable[entry.entryName] = entry;
-    }
-  }
-
-  function readMainHeader() {
-    var i = inBuffer.length - Utils.Constants.ENDHDR,
-        // END header size
-    n = Math.max(0, i - 0xFFFF),
-        // 0xFFFF is the max zip file comment length
-    endOffset = -1; // Start offset of the END header
-
-    for (i; i >= n; i--) {
-      if (inBuffer[i] !== 0x50) continue; // quick check that the byte is 'P'
-
-      if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) {
-        // "PK\005\006"
-        endOffset = i;
-        break;
-      }
-    }
-
-    if (!~endOffset) throw Utils.Errors.INVALID_FORMAT;
-    mainHeader.loadFromBinary(inBuffer.slice(endOffset, endOffset + Utils.Constants.ENDHDR));
-
-    if (mainHeader.commentLength) {
-      _comment = inBuffer.slice(endOffset + Utils.Constants.ENDHDR);
-    }
-
-    readEntries();
-  }
-
-  return {
-    /**
-     * Returns an array of ZipEntry objects existent in the current opened archive
-     * @return Array
-     */
-    get entries() {
-      return entryList;
-    },
-
-    /**
-     * Archive comment
-     * @return {String}
-     */
-    get comment() {
-      return _comment.toString();
-    },
-
-    set comment(val) {
-      mainHeader.commentLength = val.length;
-      _comment = val;
-    },
-
-    /**
-     * Returns a reference to the entry with the given name or null if entry is inexistent
-     *
-     * @param entryName
-     * @return ZipEntry
-     */
-    getEntry: function (
-    /*String*/
-    entryName) {
-      return entryTable[entryName] || null;
-    },
-
-    /**
-     * Adds the given entry to the entry list
-     *
-     * @param entry
-     */
-    setEntry: function (
-    /*ZipEntry*/
-    entry) {
-      entryList.push(entry);
-      entryTable[entry.entryName] = entry;
-      mainHeader.totalEntries = entryList.length;
-    },
-
-    /**
-     * Removes the entry with the given name from the entry list.
-     *
-     * If the entry is a directory, then all nested files and directories will be removed
-     * @param entryName
-     */
-    deleteEntry: function (
-    /*String*/
-    entryName) {
-      var entry = entryTable[entryName];
-
-      if (entry && entry.isDirectory) {
-        var _self = this;
-
-        this.getEntryChildren(entry).forEach(function (child) {
-          if (child.entryName !== entryName) {
-            _self.deleteEntry(child.entryName);
-          }
-        });
-      }
-
-      entryList.splice(entryList.indexOf(entry), 1);
-      delete entryTable[entryName];
-      mainHeader.totalEntries = entryList.length;
-    },
-
-    /**
-     *  Iterates and returns all nested files and directories of the given entry
-     *
-     * @param entry
-     * @return Array
-     */
-    getEntryChildren: function (
-    /*ZipEntry*/
-    entry) {
-      if (entry.isDirectory) {
-        var list = [],
-            name = entry.entryName,
-            len = name.length;
-        entryList.forEach(function (zipEntry) {
-          if (zipEntry.entryName.substr(0, len) === name) {
-            list.push(zipEntry);
-          }
-        });
-        return list;
-      }
-
-      return [];
-    },
-
-    /**
-     * Returns the zip file
-     *
-     * @return Buffer
-     */
-    compressToBuffer: function () {
-      if (entryList.length > 1) {
-        entryList.sort(function (a, b) {
-          var nameA = a.entryName.toLowerCase();
-          var nameB = b.entryName.toLowerCase();
-
-          if (nameA < nameB) {
-            return -1;
-          }
-
-          if (nameA > nameB) {
-            return 1;
-          }
-
-          return 0;
-        });
-      }
-
-      var totalSize = 0,
-          dataBlock = [],
-          entryHeaders = [],
-          dindex = 0;
-      mainHeader.size = 0;
-      mainHeader.offset = 0;
-      entryList.forEach(function (entry) {
-        // compress data and set local and entry header accordingly. Reason why is called first
-        var compressedData = entry.getCompressedData(); // data header
-
-        entry.header.offset = dindex;
-        var dataHeader = entry.header.dataHeaderToBinary();
-        var entryNameLen = entry.rawEntryName.length;
-        var extra = entry.extra.toString();
-        var postHeader = Buffer.alloc(entryNameLen + extra.length);
-        entry.rawEntryName.copy(postHeader, 0);
-        postHeader.fill(extra, entryNameLen);
-        var dataLength = dataHeader.length + postHeader.length + compressedData.length;
-        dindex += dataLength;
-        dataBlock.push(dataHeader);
-        dataBlock.push(postHeader);
-        dataBlock.push(compressedData);
-        var entryHeader = entry.packHeader();
-        entryHeaders.push(entryHeader);
-        mainHeader.size += entryHeader.length;
-        totalSize += dataLength + entryHeader.length;
-      });
-      totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length
-      // point to end of data and beginning of central directory first record
-
-      mainHeader.offset = dindex;
-      dindex = 0;
-      var outBuffer = Buffer.alloc(totalSize);
-      dataBlock.forEach(function (content) {
-        content.copy(outBuffer, dindex); // write data blocks
-
-        dindex += content.length;
-      });
-      entryHeaders.forEach(function (content) {
-        content.copy(outBuffer, dindex); // write central directory entries
-
-        dindex += content.length;
-      });
-      var mh = mainHeader.toBinary();
-
-      if (_comment) {
-        _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment
-
-      }
-
-      mh.copy(outBuffer, dindex); // write main header
-
-      return outBuffer;
-    },
-    toAsyncBuffer: function (
-    /*Function*/
-    onSuccess,
-    /*Function*/
-    onFail,
-    /*Function*/
-    onItemStart,
-    /*Function*/
-    onItemEnd) {
-      if (entryList.length > 1) {
-        entryList.sort(function (a, b) {
-          var nameA = a.entryName.toLowerCase();
-          var nameB = b.entryName.toLowerCase();
-
-          if (nameA > nameB) {
-            return -1;
-          }
-
-          if (nameA < nameB) {
-            return 1;
-          }
-
-          return 0;
-        });
-      }
-
-      var totalSize = 0,
-          dataBlock = [],
-          entryHeaders = [],
-          dindex = 0;
-      mainHeader.size = 0;
-      mainHeader.offset = 0;
-
-      var compress = function (entryList) {
-        var self = arguments.callee;
-
-        if (entryList.length) {
-          var entry = entryList.pop();
-          var name = entry.entryName + entry.extra.toString();
-          if (onItemStart) onItemStart(name);
-          entry.getCompressedDataAsync(function (compressedData) {
-            if (onItemEnd) onItemEnd(name);
-            entry.header.offset = dindex; // data header
-
-            var dataHeader = entry.header.dataHeaderToBinary();
-            var postHeader;
-
-            try {
-              postHeader = Buffer.alloc(name.length, name); // using alloc will work on node  5.x+
-            } catch (e) {
-              postHeader = new Buffer(name); // use deprecated method if alloc fails...
-            }
-
-            var dataLength = dataHeader.length + postHeader.length + compressedData.length;
-            dindex += dataLength;
-            dataBlock.push(dataHeader);
-            dataBlock.push(postHeader);
-            dataBlock.push(compressedData);
-            var entryHeader = entry.packHeader();
-            entryHeaders.push(entryHeader);
-            mainHeader.size += entryHeader.length;
-            totalSize += dataLength + entryHeader.length;
-
-            if (entryList.length) {
-              self(entryList);
-            } else {
-              totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length
-              // point to end of data and beginning of central directory first record
-
-              mainHeader.offset = dindex;
-              dindex = 0;
-              var outBuffer = Buffer.alloc(totalSize);
-              dataBlock.forEach(function (content) {
-                content.copy(outBuffer, dindex); // write data blocks
+  if (_path && fs.existsSync(_path)) {
+    _stat = fs.statSync(_path);
+    _obj.directory = _stat.isDirectory();
+    _obj.mtime = _stat.mtime;
+    _obj.atime = _stat.atime;
+    _obj.executable = !!(1 & parseInt((_stat.mode & parseInt("777", 8)).toString(8)[0]));
+    _obj.readonly = !!(2 & parseInt((_stat.mode & parseInt("777", 8)).toString(8)[0]));
+    _obj.hidden = pth.basename(_path)[0] === ".";
+  } else {
+    console.warn("Invalid path: " + _path);
+  }
 
-                dindex += content.length;
-              });
-              entryHeaders.forEach(function (content) {
-                content.copy(outBuffer, dindex); // write central directory entries
+  return {
+    get directory() {
+      return _obj.directory;
+    },
 
-                dindex += content.length;
-              });
-              var mh = mainHeader.toBinary();
+    get readOnly() {
+      return _obj.readonly;
+    },
 
-              if (_comment) {
-                _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment
+    get hidden() {
+      return _obj.hidden;
+    },
 
-              }
+    get mtime() {
+      return _obj.mtime;
+    },
 
-              mh.copy(outBuffer, dindex); // write main header
+    get atime() {
+      return _obj.atime;
+    },
 
-              onSuccess(outBuffer);
-            }
-          });
-        }
-      };
+    get executable() {
+      return _obj.executable;
+    },
 
-      compress(entryList);
+    decodeAttributes: function (val) {},
+    encodeAttributes: function (val) {},
+    toString: function () {
+      return '{\n' + '\t"path" : "' + _path + ",\n" + '\t"isDirectory" : ' + _obj.directory + ",\n" + '\t"isReadOnly" : ' + _obj.readonly + ",\n" + '\t"isHidden" : ' + _obj.hidden + ",\n" + '\t"isExecutable" : ' + _obj.executable + ",\n" + '\t"mTime" : ' + _obj.mtime + "\n" + '\t"aTime" : ' + _obj.atime + "\n" + '}';
     }
   };
 };
 
 /***/ }),
 
-/***/ "./packages/loot-core/node_modules/lru-cache/index.js":
-/*!************************************************************!*\
-  !*** ./packages/loot-core/node_modules/lru-cache/index.js ***!
-  \************************************************************/
+/***/ "./packages/loot-core/node_modules/adm-zip/util/fileSystem.js":
+/*!********************************************************************!*\
+  !*** ./packages/loot-core/node_modules/adm-zip/util/fileSystem.js ***!
+  \********************************************************************/
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-"use strict";
- // A linked list to keep track of recently-used-ness
-
-const Yallist = __webpack_require__(/*! yallist */ "./packages/loot-core/node_modules/yallist/yallist.js");
-
-const MAX = Symbol('max');
-const LENGTH = Symbol('length');
-const LENGTH_CALCULATOR = Symbol('lengthCalculator');
-const ALLOW_STALE = Symbol('allowStale');
-const MAX_AGE = Symbol('maxAge');
-const DISPOSE = Symbol('dispose');
-const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet');
-const LRU_LIST = Symbol('lruList');
-const CACHE = Symbol('cache');
-const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet');
-
-const naiveLength = () => 1; // lruList is a yallist where the head is the youngest
-// item, and the tail is the oldest.  the list contains the Hit
-// objects as the entries.
-// Each Hit object has a reference to its Yallist.Node.  This
-// never changes.
-//
-// cache is a Map (or PseudoMap) that matches the keys to
-// the Yallist.Node object.
-
-
-class LRUCache {
-  constructor(options) {
-    if (typeof options === 'number') options = {
-      max: options
-    };
-    if (!options) options = {};
-    if (options.max && (typeof options.max !== 'number' || options.max < 0)) throw new TypeError('max must be a non-negative number'); // Kind of weird to have a default max of Infinity, but oh well.
-
-    const max = this[MAX] = options.max || Infinity;
-    const lc = options.length || naiveLength;
-    this[LENGTH_CALCULATOR] = typeof lc !== 'function' ? naiveLength : lc;
-    this[ALLOW_STALE] = options.stale || false;
-    if (options.maxAge && typeof options.maxAge !== 'number') throw new TypeError('maxAge must be a number');
-    this[MAX_AGE] = options.maxAge || 0;
-    this[DISPOSE] = options.dispose;
-    this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false;
-    this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false;
-    this.reset();
-  } // resize the cache when the max changes.
+exports.require = function () {
+  var fs = __webpack_require__(/*! fs */ "fs");
 
+  if (process.versions['electron']) {
+    try {
+      originalFs = __webpack_require__(!(function webpackMissingModule() { var e = new Error("Cannot find module 'original-fs'"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
 
-  set max(mL) {
-    if (typeof mL !== 'number' || mL < 0) throw new TypeError('max must be a non-negative number');
-    this[MAX] = mL || Infinity;
-    trim(this);
+      if (Object.keys(originalFs).length > 0) {
+        fs = originalFs;
+      }
+    } catch (e) {}
   }
 
-  get max() {
-    return this[MAX];
-  }
+  return fs;
+};
 
-  set allowStale(allowStale) {
-    this[ALLOW_STALE] = !!allowStale;
-  }
+/***/ }),
 
-  get allowStale() {
-    return this[ALLOW_STALE];
-  }
+/***/ "./packages/loot-core/node_modules/adm-zip/util/index.js":
+/*!***************************************************************!*\
+  !*** ./packages/loot-core/node_modules/adm-zip/util/index.js ***!
+  \***************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-  set maxAge(mA) {
-    if (typeof mA !== 'number') throw new TypeError('maxAge must be a non-negative number');
-    this[MAX_AGE] = mA;
-    trim(this);
-  }
+module.exports = __webpack_require__(/*! ./utils */ "./packages/loot-core/node_modules/adm-zip/util/utils.js");
+module.exports.FileSystem = __webpack_require__(/*! ./fileSystem */ "./packages/loot-core/node_modules/adm-zip/util/fileSystem.js");
+module.exports.Constants = __webpack_require__(/*! ./constants */ "./packages/loot-core/node_modules/adm-zip/util/constants.js");
+module.exports.Errors = __webpack_require__(/*! ./errors */ "./packages/loot-core/node_modules/adm-zip/util/errors.js");
+module.exports.FileAttr = __webpack_require__(/*! ./fattr */ "./packages/loot-core/node_modules/adm-zip/util/fattr.js");
 
-  get maxAge() {
-    return this[MAX_AGE];
-  } // resize the cache when the lengthCalculator changes.
+/***/ }),
 
+/***/ "./packages/loot-core/node_modules/adm-zip/util/utils.js":
+/*!***************************************************************!*\
+  !*** ./packages/loot-core/node_modules/adm-zip/util/utils.js ***!
+  \***************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-  set lengthCalculator(lC) {
-    if (typeof lC !== 'function') lC = naiveLength;
+var fs = __webpack_require__(/*! ./fileSystem */ "./packages/loot-core/node_modules/adm-zip/util/fileSystem.js").require(),
+    pth = __webpack_require__(/*! path */ "path");
 
-    if (lC !== this[LENGTH_CALCULATOR]) {
-      this[LENGTH_CALCULATOR] = lC;
-      this[LENGTH] = 0;
-      this[LRU_LIST].forEach(hit => {
-        hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key);
-        this[LENGTH] += hit.length;
-      });
-    }
+fs.existsSync = fs.existsSync || pth.existsSync;
 
-    trim(this);
-  }
+module.exports = function () {
+  var crcTable = [],
+      Constants = __webpack_require__(/*! ./constants */ "./packages/loot-core/node_modules/adm-zip/util/constants.js"),
+      Errors = __webpack_require__(/*! ./errors */ "./packages/loot-core/node_modules/adm-zip/util/errors.js"),
+      PATH_SEPARATOR = pth.sep;
 
-  get lengthCalculator() {
-    return this[LENGTH_CALCULATOR];
-  }
+  function mkdirSync(
+  /*String*/
+  path) {
+    var resolvedPath = path.split(PATH_SEPARATOR)[0];
+    path.split(PATH_SEPARATOR).forEach(function (name) {
+      if (!name || name.substr(-1, 1) === ":") return;
+      resolvedPath += PATH_SEPARATOR + name;
+      var stat;
 
-  get length() {
-    return this[LENGTH];
-  }
+      try {
+        stat = fs.statSync(resolvedPath);
+      } catch (e) {
+        fs.mkdirSync(resolvedPath);
+      }
 
-  get itemCount() {
-    return this[LRU_LIST].length;
+      if (stat && stat.isFile()) throw Errors.FILE_IN_THE_WAY.replace("%s", resolvedPath);
+    });
   }
 
-  rforEach(fn, thisp) {
-    thisp = thisp || this;
-
-    for (let walker = this[LRU_LIST].tail; walker !== null;) {
-      const prev = walker.prev;
-      forEachStep(this, fn, walker, thisp);
-      walker = prev;
+  function findSync(
+  /*String*/
+  dir,
+  /*RegExp*/
+  pattern,
+  /*Boolean*/
+  recoursive) {
+    if (typeof pattern === 'boolean') {
+      recoursive = pattern;
+      pattern = undefined;
     }
-  }
 
-  forEach(fn, thisp) {
-    thisp = thisp || this;
+    var files = [];
+    fs.readdirSync(dir).forEach(function (file) {
+      var path = pth.join(dir, file);
+      if (fs.statSync(path).isDirectory() && recoursive) files = files.concat(findSync(path, pattern, recoursive));
 
-    for (let walker = this[LRU_LIST].head; walker !== null;) {
-      const next = walker.next;
-      forEachStep(this, fn, walker, thisp);
-      walker = next;
-    }
+      if (!pattern || pattern.test(path)) {
+        files.push(pth.normalize(path) + (fs.statSync(path).isDirectory() ? PATH_SEPARATOR : ""));
+      }
+    });
+    return files;
   }
 
-  keys() {
-    return this[LRU_LIST].toArray().map(k => k.key);
-  }
+  return {
+    makeDir: function (
+    /*String*/
+    path) {
+      mkdirSync(path);
+    },
+    crc32: function (buf) {
+      if (typeof buf === 'string') {
+        buf = Buffer.alloc(buf.length, buf);
+      }
 
-  values() {
-    return this[LRU_LIST].toArray().map(k => k.value);
-  }
+      var b = Buffer.alloc(4);
 
-  reset() {
-    if (this[DISPOSE] && this[LRU_LIST] && this[LRU_LIST].length) {
-      this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value));
-    }
+      if (!crcTable.length) {
+        for (var n = 0; n < 256; n++) {
+          var c = n;
 
-    this[CACHE] = new Map(); // hash of items by key
+          for (var k = 8; --k >= 0;) //
+          if ((c & 1) !== 0) {
+            c = 0xedb88320 ^ c >>> 1;
+          } else {
+            c = c >>> 1;
+          }
 
-    this[LRU_LIST] = new Yallist(); // list of items in order of use recency
+          if (c < 0) {
+            b.writeInt32LE(c, 0);
+            c = b.readUInt32LE(0);
+          }
 
-    this[LENGTH] = 0; // length of items in the list
-  }
+          crcTable[n] = c;
+        }
+      }
 
-  dump() {
-    return this[LRU_LIST].map(hit => isStale(this, hit) ? false : {
-      k: hit.key,
-      v: hit.value,
-      e: hit.now + (hit.maxAge || 0)
-    }).toArray().filter(h => h);
-  }
+      var crc = 0,
+          off = 0,
+          len = buf.length,
+          c1 = ~crc;
 
-  dumpLru() {
-    return this[LRU_LIST];
-  }
+      while (--len >= 0) c1 = crcTable[(c1 ^ buf[off++]) & 0xff] ^ c1 >>> 8;
 
-  set(key, value, maxAge) {
-    maxAge = maxAge || this[MAX_AGE];
-    if (maxAge && typeof maxAge !== 'number') throw new TypeError('maxAge must be a number');
-    const now = maxAge ? Date.now() : 0;
-    const len = this[LENGTH_CALCULATOR](value, key);
+      crc = ~c1;
+      b.writeInt32LE(crc & 0xffffffff, 0);
+      return b.readUInt32LE(0);
+    },
+    methodToString: function (
+    /*Number*/
+    method) {
+      switch (method) {
+        case Constants.STORED:
+          return 'STORED (' + method + ')';
 
-    if (this[CACHE].has(key)) {
-      if (len > this[MAX]) {
-        del(this, this[CACHE].get(key));
-        return false;
+        case Constants.DEFLATED:
+          return 'DEFLATED (' + method + ')';
+
+        default:
+          return 'UNSUPPORTED (' + method + ')';
       }
+    },
+    writeFileTo: function (
+    /*String*/
+    path,
+    /*Buffer*/
+    content,
+    /*Boolean*/
+    overwrite,
+    /*Number*/
+    attr) {
+      if (fs.existsSync(path)) {
+        if (!overwrite) return false; // cannot overwrite
 
-      const node = this[CACHE].get(key);
-      const item = node.value; // dispose of the old one before overwriting
-      // split out into 2 ifs for better coverage tracking
+        var stat = fs.statSync(path);
 
-      if (this[DISPOSE]) {
-        if (!this[NO_DISPOSE_ON_SET]) this[DISPOSE](key, item.value);
+        if (stat.isDirectory()) {
+          return false;
+        }
       }
 
-      item.now = now;
-      item.maxAge = maxAge;
-      item.value = value;
-      this[LENGTH] += len - item.length;
-      item.length = len;
-      this.get(key);
-      trim(this);
-      return true;
-    }
+      var folder = pth.dirname(path);
 
-    const hit = new Entry(key, value, len, now, maxAge); // oversized objects fall out of cache automatically.
+      if (!fs.existsSync(folder)) {
+        mkdirSync(folder);
+      }
 
-    if (hit.length > this[MAX]) {
-      if (this[DISPOSE]) this[DISPOSE](key, value);
-      return false;
-    }
+      var fd;
 
-    this[LENGTH] += hit.length;
-    this[LRU_LIST].unshift(hit);
-    this[CACHE].set(key, this[LRU_LIST].head);
-    trim(this);
-    return true;
-  }
+      try {
+        fd = fs.openSync(path, 'w', 438); // 0666
+      } catch (e) {
+        fs.chmodSync(path, 438);
+        fd = fs.openSync(path, 'w', 438);
+      }
 
-  has(key) {
-    if (!this[CACHE].has(key)) return false;
-    const hit = this[CACHE].get(key).value;
-    return !isStale(this, hit);
-  }
+      if (fd) {
+        try {
+          fs.writeSync(fd, content, 0, content.length, 0);
+        } catch (e) {
+          throw e;
+        } finally {
+          fs.closeSync(fd);
+        }
+      }
 
-  get(key) {
-    return get(this, key, true);
-  }
+      fs.chmodSync(path, attr || 438);
+      return true;
+    },
+    writeFileToAsync: function (
+    /*String*/
+    path,
+    /*Buffer*/
+    content,
+    /*Boolean*/
+    overwrite,
+    /*Number*/
+    attr,
+    /*Function*/
+    callback) {
+      if (typeof attr === 'function') {
+        callback = attr;
+        attr = undefined;
+      }
 
-  peek(key) {
-    return get(this, key, false);
-  }
+      fs.exists(path, function (exists) {
+        if (exists && !overwrite) return callback(false);
+        fs.stat(path, function (err, stat) {
+          if (exists && stat.isDirectory()) {
+            return callback(false);
+          }
 
-  pop() {
-    const node = this[LRU_LIST].tail;
-    if (!node) return null;
-    del(this, node);
-    return node.value;
-  }
+          var folder = pth.dirname(path);
+          fs.exists(folder, function (exists) {
+            if (!exists) mkdirSync(folder);
+            fs.open(path, 'w', 438, function (err, fd) {
+              if (err) {
+                fs.chmod(path, 438, function () {
+                  fs.open(path, 'w', 438, function (err, fd) {
+                    fs.write(fd, content, 0, content.length, 0, function () {
+                      fs.close(fd, function () {
+                        fs.chmod(path, attr || 438, function () {
+                          callback(true);
+                        });
+                      });
+                    });
+                  });
+                });
+              } else {
+                if (fd) {
+                  fs.write(fd, content, 0, content.length, 0, function () {
+                    fs.close(fd, function () {
+                      fs.chmod(path, attr || 438, function () {
+                        callback(true);
+                      });
+                    });
+                  });
+                } else {
+                  fs.chmod(path, attr || 438, function () {
+                    callback(true);
+                  });
+                }
+              }
+            });
+          });
+        });
+      });
+    },
+    findFiles: function (
+    /*String*/
+    path) {
+      return findSync(path, true);
+    },
+    getAttributes: function (
+    /*String*/
+    path) {},
+    setAttributes: function (
+    /*String*/
+    path) {},
+    toBuffer: function (input) {
+      if (Buffer.isBuffer(input)) {
+        return input;
+      } else {
+        if (input.length === 0) {
+          return Buffer.alloc(0);
+        }
 
-  del(key) {
-    del(this, this[CACHE].get(key));
-  }
+        return Buffer.from(input, 'utf8');
+      }
+    },
+    Constants: Constants,
+    Errors: Errors
+  };
+}();
 
-  load(arr) {
-    // reset the cache
-    this.reset();
-    const now = Date.now(); // A previous serialized cache has the most recent items first
+/***/ }),
 
-    for (let l = arr.length - 1; l >= 0; l--) {
-      const hit = arr[l];
-      const expiresAt = hit.e || 0;
-      if (expiresAt === 0) // the item was created without expiration in a non aged cache
-        this.set(hit.k, hit.v);else {
-        const maxAge = expiresAt - now; // dont add already expired items
+/***/ "./packages/loot-core/node_modules/adm-zip/zipEntry.js":
+/*!*************************************************************!*\
+  !*** ./packages/loot-core/node_modules/adm-zip/zipEntry.js ***!
+  \*************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-        if (maxAge > 0) {
-          this.set(hit.k, hit.v, maxAge);
-        }
-      }
-    }
-  }
+var Utils = __webpack_require__(/*! ./util */ "./packages/loot-core/node_modules/adm-zip/util/index.js"),
+    Headers = __webpack_require__(/*! ./headers */ "./packages/loot-core/node_modules/adm-zip/headers/index.js"),
+    Constants = Utils.Constants,
+    Methods = __webpack_require__(/*! ./methods */ "./packages/loot-core/node_modules/adm-zip/methods/index.js");
 
-  prune() {
-    this[CACHE].forEach((value, key) => get(this, key, false));
-  }
+module.exports = function (
+/*Buffer*/
+input) {
+  var _entryHeader = new Headers.EntryHeader(),
+      _entryName = Buffer.alloc(0),
+      _comment = Buffer.alloc(0),
+      _isDirectory = false,
+      uncompressedData = null,
+      _extra = Buffer.alloc(0);
 
-}
+  function getCompressedDataFromZip() {
+    if (!input || !Buffer.isBuffer(input)) {
+      return Buffer.alloc(0);
+    }
 
-const get = (self, key, doUse) => {
-  const node = self[CACHE].get(key);
+    _entryHeader.loadDataHeaderFromBinary(input);
 
-  if (node) {
-    const hit = node.value;
+    return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize);
+  }
 
-    if (isStale(self, hit)) {
-      del(self, node);
-      if (!self[ALLOW_STALE]) return undefined;
-    } else {
-      if (doUse) {
-        if (self[UPDATE_AGE_ON_GET]) node.value.now = Date.now();
-        self[LRU_LIST].unshiftNode(node);
+  function crc32OK(data) {
+    // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written
+    if ((_entryHeader.flags & 0x8) !== 0x8) {
+      if (Utils.crc32(data) !== _entryHeader.dataHeader.crc) {
+        return false;
       }
+    } else {// @TODO: load and check data descriptor header
+      // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure
+      // (optionally preceded by a 4-byte signature) immediately after the compressed data:
     }
 
-    return hit.value;
+    return true;
   }
-};
-
-const isStale = (self, hit) => {
-  if (!hit || !hit.maxAge && !self[MAX_AGE]) return false;
-  const diff = Date.now() - hit.now;
-  return hit.maxAge ? diff > hit.maxAge : self[MAX_AGE] && diff > self[MAX_AGE];
-};
 
-const trim = self => {
-  if (self[LENGTH] > self[MAX]) {
-    for (let walker = self[LRU_LIST].tail; self[LENGTH] > self[MAX] && walker !== null;) {
-      // We know that we're about to delete this one, and also
-      // what the next least recently used key will be, so just
-      // go ahead and set it now.
-      const prev = walker.prev;
-      del(self, walker);
-      walker = prev;
+  function decompress(
+  /*Boolean*/
+  async,
+  /*Function*/
+  callback,
+  /*String*/
+  pass) {
+    if (typeof callback === 'undefined' && typeof async === 'string') {
+      pass = async;
+      async = void 0;
     }
-  }
-};
-
-const del = (self, node) => {
-  if (node) {
-    const hit = node.value;
-    if (self[DISPOSE]) self[DISPOSE](hit.key, hit.value);
-    self[LENGTH] -= hit.length;
-    self[CACHE].delete(hit.key);
-    self[LRU_LIST].removeNode(node);
-  }
-};
-
-class Entry {
-  constructor(key, value, length, now, maxAge) {
-    this.key = key;
-    this.value = value;
-    this.length = length;
-    this.now = now;
-    this.maxAge = maxAge || 0;
-  }
 
-}
+    if (_isDirectory) {
+      if (async && callback) {
+        callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error.
+      }
 
-const forEachStep = (self, fn, node, thisp) => {
-  let hit = node.value;
+      return Buffer.alloc(0);
+    }
 
-  if (isStale(self, hit)) {
-    del(self, node);
-    if (!self[ALLOW_STALE]) hit = undefined;
-  }
+    var compressedData = getCompressedDataFromZip();
 
-  if (hit) fn.call(thisp, hit.value, hit.key, self);
-};
+    if (compressedData.length === 0) {
+      if (async && callback) callback(compressedData, Utils.Errors.NO_DATA); //si added error.
 
-module.exports = LRUCache;
+      return compressedData;
+    }
 
-/***/ }),
+    var data = Buffer.alloc(_entryHeader.size);
 
-/***/ "./packages/loot-core/node_modules/mitt/dist/mitt.es.js":
-/*!**************************************************************!*\
-  !*** ./packages/loot-core/node_modules/mitt/dist/mitt.es.js ***!
-  \**************************************************************/
-/*! exports provided: default */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+    switch (_entryHeader.method) {
+      case Utils.Constants.STORED:
+        compressedData.copy(data);
 
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony default export */ __webpack_exports__["default"] = (function (n) {
-  return {
-    all: n = n || new Map(),
-    on: function (t, e) {
-      var i = n.get(t);
-      i && i.push(e) || n.set(t, [e]);
-    },
-    off: function (t, e) {
-      var i = n.get(t);
-      i && i.splice(i.indexOf(e) >>> 0, 1);
-    },
-    emit: function (t, e) {
-      (n.get(t) || []).slice().map(function (n) {
-        n(e);
-      }), (n.get("*") || []).slice().map(function (n) {
-        n(t, e);
-      });
-    }
-  };
-});
+        if (!crc32OK(data)) {
+          if (async && callback) callback(data, Utils.Errors.BAD_CRC); //si added error
 
-/***/ }),
+          return Utils.Errors.BAD_CRC;
+        } else {
+          //si added otherwise did not seem to return data.
+          if (async && callback) callback(data);
+          return data;
+        }
 
-/***/ "./packages/loot-core/node_modules/yallist/iterator.js":
-/*!*************************************************************!*\
-  !*** ./packages/loot-core/node_modules/yallist/iterator.js ***!
-  \*************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+      case Utils.Constants.DEFLATED:
+        var inflater = new Methods.Inflater(compressedData);
 
-"use strict";
+        if (!async) {
+          var result = inflater.inflate(data);
+          result.copy(data, 0);
 
+          if (!crc32OK(data)) {
+            console.warn(Utils.Errors.BAD_CRC + " " + _entryName.toString());
+          }
 
-module.exports = function (Yallist) {
-  Yallist.prototype[Symbol.iterator] = function* () {
-    for (let walker = this.head; walker; walker = walker.next) {
-      yield walker.value;
-    }
-  };
-};
+          return data;
+        } else {
+          inflater.inflateAsync(function (result) {
+            result.copy(data, 0);
 
-/***/ }),
+            if (!crc32OK(data)) {
+              if (callback) callback(data, Utils.Errors.BAD_CRC); //si added error
+            } else {
+              //si added otherwise did not seem to return data.
+              if (callback) callback(data);
+            }
+          });
+        }
 
-/***/ "./packages/loot-core/node_modules/yallist/yallist.js":
-/*!************************************************************!*\
-  !*** ./packages/loot-core/node_modules/yallist/yallist.js ***!
-  \************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+        break;
 
-"use strict";
+      default:
+        if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD);
+        return Utils.Errors.UNKNOWN_METHOD;
+    }
+  }
 
+  function compress(
+  /*Boolean*/
+  async,
+  /*Function*/
+  callback) {
+    if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {
+      // no data set or the data wasn't changed to require recompression
+      if (async && callback) callback(getCompressedDataFromZip());
+      return getCompressedDataFromZip();
+    }
 
-module.exports = Yallist;
-Yallist.Node = Node;
-Yallist.create = Yallist;
+    if (uncompressedData.length && !_isDirectory) {
+      var compressedData; // Local file header
 
-function Yallist(list) {
-  var self = this;
+      switch (_entryHeader.method) {
+        case Utils.Constants.STORED:
+          _entryHeader.compressedSize = _entryHeader.size;
+          compressedData = Buffer.alloc(uncompressedData.length);
+          uncompressedData.copy(compressedData);
+          if (async && callback) callback(compressedData);
+          return compressedData;
 
-  if (!(self instanceof Yallist)) {
-    self = new Yallist();
-  }
+        default:
+        case Utils.Constants.DEFLATED:
+          var deflater = new Methods.Deflater(uncompressedData);
 
-  self.tail = null;
-  self.head = null;
-  self.length = 0;
+          if (!async) {
+            var deflated = deflater.deflate();
+            _entryHeader.compressedSize = deflated.length;
+            return deflated;
+          } else {
+            deflater.deflateAsync(function (data) {
+              compressedData = Buffer.alloc(data.length);
+              _entryHeader.compressedSize = data.length;
+              data.copy(compressedData);
+              callback && callback(compressedData);
+            });
+          }
 
-  if (list && typeof list.forEach === 'function') {
-    list.forEach(function (item) {
-      self.push(item);
-    });
-  } else if (arguments.length > 0) {
-    for (var i = 0, l = arguments.length; i < l; i++) {
-      self.push(arguments[i]);
+          deflater = null;
+          break;
+      }
+    } else {
+      if (async && callback) {
+        callback(Buffer.alloc(0));
+      } else {
+        return Buffer.alloc(0);
+      }
     }
   }
 
-  return self;
-}
-
-Yallist.prototype.removeNode = function (node) {
-  if (node.list !== this) {
-    throw new Error('removing node which does not belong to this list');
+  function readUInt64LE(buffer, offset) {
+    return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset);
   }
 
-  var next = node.next;
-  var prev = node.prev;
-
-  if (next) {
-    next.prev = prev;
-  }
+  function parseExtra(data) {
+    var offset = 0;
+    var signature, size, part;
 
-  if (prev) {
-    prev.next = next;
-  }
+    while (offset < data.length) {
+      signature = data.readUInt16LE(offset);
+      offset += 2;
+      size = data.readUInt16LE(offset);
+      offset += 2;
+      part = data.slice(offset, offset + size);
+      offset += size;
 
-  if (node === this.head) {
-    this.head = next;
-  }
+      if (Constants.ID_ZIP64 === signature) {
+        parseZip64ExtendedInformation(part);
+      }
+    }
+  } //Override header field values with values from the ZIP64 extra field
 
-  if (node === this.tail) {
-    this.tail = prev;
-  }
 
-  node.list.length--;
-  node.next = null;
-  node.prev = null;
-  node.list = null;
-};
+  function parseZip64ExtendedInformation(data) {
+    var size, compressedSize, offset, diskNumStart;
 
-Yallist.prototype.unshiftNode = function (node) {
-  if (node === this.head) {
-    return;
-  }
+    if (data.length >= Constants.EF_ZIP64_SCOMP) {
+      size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);
 
-  if (node.list) {
-    node.list.removeNode(node);
-  }
+      if (_entryHeader.size === Constants.EF_ZIP64_OR_32) {
+        _entryHeader.size = size;
+      }
+    }
 
-  var head = this.head;
-  node.list = this;
-  node.next = head;
+    if (data.length >= Constants.EF_ZIP64_RHO) {
+      compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);
 
-  if (head) {
-    head.prev = node;
-  }
+      if (_entryHeader.compressedSize === Constants.EF_ZIP64_OR_32) {
+        _entryHeader.compressedSize = compressedSize;
+      }
+    }
 
-  this.head = node;
+    if (data.length >= Constants.EF_ZIP64_DSN) {
+      offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);
 
-  if (!this.tail) {
-    this.tail = node;
-  }
+      if (_entryHeader.offset === Constants.EF_ZIP64_OR_32) {
+        _entryHeader.offset = offset;
+      }
+    }
 
-  this.length++;
-};
+    if (data.length >= Constants.EF_ZIP64_DSN + 4) {
+      diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);
 
-Yallist.prototype.pushNode = function (node) {
-  if (node === this.tail) {
-    return;
+      if (_entryHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {
+        _entryHeader.diskNumStart = diskNumStart;
+      }
+    }
   }
 
-  if (node.list) {
-    node.list.removeNode(node);
-  }
+  return {
+    get entryName() {
+      return _entryName.toString();
+    },
 
-  var tail = this.tail;
-  node.list = this;
-  node.prev = tail;
+    get rawEntryName() {
+      return _entryName;
+    },
 
-  if (tail) {
-    tail.next = node;
-  }
+    set entryName(val) {
+      _entryName = Utils.toBuffer(val);
+      var lastChar = _entryName[_entryName.length - 1];
+      _isDirectory = lastChar === 47 || lastChar === 92;
+      _entryHeader.fileNameLength = _entryName.length;
+    },
 
-  this.tail = node;
+    get extra() {
+      return _extra;
+    },
 
-  if (!this.head) {
-    this.head = node;
-  }
+    set extra(val) {
+      _extra = val;
+      _entryHeader.extraLength = val.length;
+      parseExtra(val);
+    },
 
-  this.length++;
-};
+    get comment() {
+      return _comment.toString();
+    },
 
-Yallist.prototype.push = function () {
-  for (var i = 0, l = arguments.length; i < l; i++) {
-    push(this, arguments[i]);
-  }
+    set comment(val) {
+      _comment = Utils.toBuffer(val);
+      _entryHeader.commentLength = _comment.length;
+    },
 
-  return this.length;
-};
+    get name() {
+      var n = _entryName.toString();
 
-Yallist.prototype.unshift = function () {
-  for (var i = 0, l = arguments.length; i < l; i++) {
-    unshift(this, arguments[i]);
-  }
+      return _isDirectory ? n.substr(n.length - 1).split("/").pop() : n.split("/").pop();
+    },
 
-  return this.length;
-};
+    get isDirectory() {
+      return _isDirectory;
+    },
 
-Yallist.prototype.pop = function () {
-  if (!this.tail) {
-    return undefined;
-  }
+    getCompressedData: function () {
+      return compress(false, null);
+    },
+    getCompressedDataAsync: function (
+    /*Function*/
+    callback) {
+      compress(true, callback);
+    },
+    setData: function (value) {
+      uncompressedData = Utils.toBuffer(value);
 
-  var res = this.tail.value;
-  this.tail = this.tail.prev;
+      if (!_isDirectory && uncompressedData.length) {
+        _entryHeader.size = uncompressedData.length;
+        _entryHeader.method = Utils.Constants.DEFLATED;
+        _entryHeader.crc = Utils.crc32(value);
+        _entryHeader.changed = true;
+      } else {
+        // folders and blank files should be stored
+        _entryHeader.method = Utils.Constants.STORED;
+      }
+    },
+    getData: function (pass) {
+      if (_entryHeader.changed) {
+        return uncompressedData;
+      } else {
+        return decompress(false, null, pass);
+      }
+    },
+    getDataAsync: function (
+    /*Function*/
+    callback, pass) {
+      if (_entryHeader.changed) {
+        callback(uncompressedData);
+      } else {
+        decompress(true, callback, pass);
+      }
+    },
 
-  if (this.tail) {
-    this.tail.next = null;
-  } else {
-    this.head = null;
-  }
+    set attr(attr) {
+      _entryHeader.attr = attr;
+    },
 
-  this.length--;
-  return res;
-};
+    get attr() {
+      return _entryHeader.attr;
+    },
 
-Yallist.prototype.shift = function () {
-  if (!this.head) {
-    return undefined;
-  }
+    set header(
+    /*Buffer*/
+    data) {
+      _entryHeader.loadFromBinary(data);
+    },
 
-  var res = this.head.value;
-  this.head = this.head.next;
+    get header() {
+      return _entryHeader;
+    },
 
-  if (this.head) {
-    this.head.prev = null;
-  } else {
-    this.tail = null;
-  }
+    packHeader: function () {
+      var header = _entryHeader.entryHeaderToBinary(); // add
 
-  this.length--;
-  return res;
-};
 
-Yallist.prototype.forEach = function (fn, thisp) {
-  thisp = thisp || this;
+      _entryName.copy(header, Utils.Constants.CENHDR);
 
-  for (var walker = this.head, i = 0; walker !== null; i++) {
-    fn.call(thisp, walker.value, i, this);
-    walker = walker.next;
-  }
-};
+      if (_entryHeader.extraLength) {
+        _extra.copy(header, Utils.Constants.CENHDR + _entryName.length);
+      }
 
-Yallist.prototype.forEachReverse = function (fn, thisp) {
-  thisp = thisp || this;
+      if (_entryHeader.commentLength) {
+        _comment.copy(header, Utils.Constants.CENHDR + _entryName.length + _entryHeader.extraLength, _comment.length);
+      }
 
-  for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {
-    fn.call(thisp, walker.value, i, this);
-    walker = walker.prev;
-  }
+      return header;
+    },
+    toString: function () {
+      return '{\n' + '\t"entryName" : "' + _entryName.toString() + "\",\n" + '\t"name" : "' + (_isDirectory ? _entryName.toString().replace(/\/$/, '').split("/").pop() : _entryName.toString().split("/").pop()) + "\",\n" + '\t"comment" : "' + _comment.toString() + "\",\n" + '\t"isDirectory" : ' + _isDirectory + ",\n" + '\t"header" : ' + _entryHeader.toString().replace(/\t/mg, "\t\t").replace(/}/mg, "\t}") + ",\n" + '\t"compressedData" : <' + (input && input.length + " bytes buffer" || "null") + ">\n" + '\t"data" : <' + (uncompressedData && uncompressedData.length + " bytes buffer" || "null") + ">\n" + '}';
+    }
+  };
 };
 
-Yallist.prototype.get = function (n) {
-  for (var i = 0, walker = this.head; walker !== null && i < n; i++) {
-    // abort out of the list early if we hit a cycle
-    walker = walker.next;
-  }
+/***/ }),
+
+/***/ "./packages/loot-core/node_modules/adm-zip/zipFile.js":
+/*!************************************************************!*\
+  !*** ./packages/loot-core/node_modules/adm-zip/zipFile.js ***!
+  \************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
 
-  if (i === n && walker !== null) {
-    return walker.value;
-  }
-};
+var ZipEntry = __webpack_require__(/*! ./zipEntry */ "./packages/loot-core/node_modules/adm-zip/zipEntry.js"),
+    Headers = __webpack_require__(/*! ./headers */ "./packages/loot-core/node_modules/adm-zip/headers/index.js"),
+    Utils = __webpack_require__(/*! ./util */ "./packages/loot-core/node_modules/adm-zip/util/index.js");
 
-Yallist.prototype.getReverse = function (n) {
-  for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {
-    // abort out of the list early if we hit a cycle
-    walker = walker.prev;
-  }
+module.exports = function (
+/*String|Buffer*/
+input,
+/*Number*/
+inputType) {
+  var entryList = [],
+      entryTable = {},
+      _comment = Buffer.alloc(0),
+      filename = "",
+      fs = Utils.FileSystem.require(),
+      inBuffer = null,
+      mainHeader = new Headers.MainHeader();
 
-  if (i === n && walker !== null) {
-    return walker.value;
+  if (inputType === Utils.Constants.FILE) {
+    // is a filename
+    filename = input;
+    inBuffer = fs.readFileSync(filename);
+    readMainHeader();
+  } else if (inputType === Utils.Constants.BUFFER) {
+    // is a memory buffer
+    inBuffer = input;
+    readMainHeader();
+  } else {// none. is a new file
   }
-};
 
-Yallist.prototype.map = function (fn, thisp) {
-  thisp = thisp || this;
-  var res = new Yallist();
+  function readEntries() {
+    entryTable = {};
+    entryList = new Array(mainHeader.diskEntries); // total number of entries
 
-  for (var walker = this.head; walker !== null;) {
-    res.push(fn.call(thisp, walker.value, this));
-    walker = walker.next;
-  }
+    var index = mainHeader.offset; // offset of first CEN header
 
-  return res;
-};
+    for (var i = 0; i < entryList.length; i++) {
+      var tmp = index,
+          entry = new ZipEntry(inBuffer);
+      entry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR);
+      entry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength);
 
-Yallist.prototype.mapReverse = function (fn, thisp) {
-  thisp = thisp || this;
-  var res = new Yallist();
+      if (entry.header.extraLength) {
+        entry.extra = inBuffer.slice(tmp, tmp += entry.header.extraLength);
+      }
 
-  for (var walker = this.tail; walker !== null;) {
-    res.push(fn.call(thisp, walker.value, this));
-    walker = walker.prev;
+      if (entry.header.commentLength) entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength);
+      index += entry.header.entryHeaderSize;
+      entryList[i] = entry;
+      entryTable[entry.entryName] = entry;
+    }
   }
 
-  return res;
-};
-
-Yallist.prototype.reduce = function (fn, initial) {
-  var acc;
-  var walker = this.head;
+  function readMainHeader() {
+    var i = inBuffer.length - Utils.Constants.ENDHDR,
+        // END header size
+    n = Math.max(0, i - 0xFFFF),
+        // 0xFFFF is the max zip file comment length
+    endOffset = -1; // Start offset of the END header
 
-  if (arguments.length > 1) {
-    acc = initial;
-  } else if (this.head) {
-    walker = this.head.next;
-    acc = this.head.value;
-  } else {
-    throw new TypeError('Reduce of empty list with no initial value');
-  }
+    for (i; i >= n; i--) {
+      if (inBuffer[i] !== 0x50) continue; // quick check that the byte is 'P'
 
-  for (var i = 0; walker !== null; i++) {
-    acc = fn(acc, walker.value, i);
-    walker = walker.next;
-  }
+      if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) {
+        // "PK\005\006"
+        endOffset = i;
+        break;
+      }
+    }
 
-  return acc;
-};
+    if (!~endOffset) throw Utils.Errors.INVALID_FORMAT;
+    mainHeader.loadFromBinary(inBuffer.slice(endOffset, endOffset + Utils.Constants.ENDHDR));
 
-Yallist.prototype.reduceReverse = function (fn, initial) {
-  var acc;
-  var walker = this.tail;
+    if (mainHeader.commentLength) {
+      _comment = inBuffer.slice(endOffset + Utils.Constants.ENDHDR);
+    }
 
-  if (arguments.length > 1) {
-    acc = initial;
-  } else if (this.tail) {
-    walker = this.tail.prev;
-    acc = this.tail.value;
-  } else {
-    throw new TypeError('Reduce of empty list with no initial value');
+    readEntries();
   }
 
-  for (var i = this.length - 1; walker !== null; i--) {
-    acc = fn(acc, walker.value, i);
-    walker = walker.prev;
-  }
+  return {
+    /**
+     * Returns an array of ZipEntry objects existent in the current opened archive
+     * @return Array
+     */
+    get entries() {
+      return entryList;
+    },
 
-  return acc;
-};
+    /**
+     * Archive comment
+     * @return {String}
+     */
+    get comment() {
+      return _comment.toString();
+    },
 
-Yallist.prototype.toArray = function () {
-  var arr = new Array(this.length);
+    set comment(val) {
+      mainHeader.commentLength = val.length;
+      _comment = val;
+    },
 
-  for (var i = 0, walker = this.head; walker !== null; i++) {
-    arr[i] = walker.value;
-    walker = walker.next;
-  }
+    /**
+     * Returns a reference to the entry with the given name or null if entry is inexistent
+     *
+     * @param entryName
+     * @return ZipEntry
+     */
+    getEntry: function (
+    /*String*/
+    entryName) {
+      return entryTable[entryName] || null;
+    },
 
-  return arr;
-};
+    /**
+     * Adds the given entry to the entry list
+     *
+     * @param entry
+     */
+    setEntry: function (
+    /*ZipEntry*/
+    entry) {
+      entryList.push(entry);
+      entryTable[entry.entryName] = entry;
+      mainHeader.totalEntries = entryList.length;
+    },
 
-Yallist.prototype.toArrayReverse = function () {
-  var arr = new Array(this.length);
+    /**
+     * Removes the entry with the given name from the entry list.
+     *
+     * If the entry is a directory, then all nested files and directories will be removed
+     * @param entryName
+     */
+    deleteEntry: function (
+    /*String*/
+    entryName) {
+      var entry = entryTable[entryName];
 
-  for (var i = 0, walker = this.tail; walker !== null; i++) {
-    arr[i] = walker.value;
-    walker = walker.prev;
-  }
+      if (entry && entry.isDirectory) {
+        var _self = this;
 
-  return arr;
-};
+        this.getEntryChildren(entry).forEach(function (child) {
+          if (child.entryName !== entryName) {
+            _self.deleteEntry(child.entryName);
+          }
+        });
+      }
 
-Yallist.prototype.slice = function (from, to) {
-  to = to || this.length;
+      entryList.splice(entryList.indexOf(entry), 1);
+      delete entryTable[entryName];
+      mainHeader.totalEntries = entryList.length;
+    },
 
-  if (to < 0) {
-    to += this.length;
-  }
+    /**
+     *  Iterates and returns all nested files and directories of the given entry
+     *
+     * @param entry
+     * @return Array
+     */
+    getEntryChildren: function (
+    /*ZipEntry*/
+    entry) {
+      if (entry.isDirectory) {
+        var list = [],
+            name = entry.entryName,
+            len = name.length;
+        entryList.forEach(function (zipEntry) {
+          if (zipEntry.entryName.substr(0, len) === name) {
+            list.push(zipEntry);
+          }
+        });
+        return list;
+      }
 
-  from = from || 0;
+      return [];
+    },
 
-  if (from < 0) {
-    from += this.length;
-  }
+    /**
+     * Returns the zip file
+     *
+     * @return Buffer
+     */
+    compressToBuffer: function () {
+      if (entryList.length > 1) {
+        entryList.sort(function (a, b) {
+          var nameA = a.entryName.toLowerCase();
+          var nameB = b.entryName.toLowerCase();
 
-  var ret = new Yallist();
+          if (nameA < nameB) {
+            return -1;
+          }
 
-  if (to < from || to < 0) {
-    return ret;
-  }
+          if (nameA > nameB) {
+            return 1;
+          }
 
-  if (from < 0) {
-    from = 0;
-  }
+          return 0;
+        });
+      }
 
-  if (to > this.length) {
-    to = this.length;
-  }
+      var totalSize = 0,
+          dataBlock = [],
+          entryHeaders = [],
+          dindex = 0;
+      mainHeader.size = 0;
+      mainHeader.offset = 0;
+      entryList.forEach(function (entry) {
+        // compress data and set local and entry header accordingly. Reason why is called first
+        var compressedData = entry.getCompressedData(); // data header
 
-  for (var i = 0, walker = this.head; walker !== null && i < from; i++) {
-    walker = walker.next;
-  }
+        entry.header.offset = dindex;
+        var dataHeader = entry.header.dataHeaderToBinary();
+        var entryNameLen = entry.rawEntryName.length;
+        var extra = entry.extra.toString();
+        var postHeader = Buffer.alloc(entryNameLen + extra.length);
+        entry.rawEntryName.copy(postHeader, 0);
+        postHeader.fill(extra, entryNameLen);
+        var dataLength = dataHeader.length + postHeader.length + compressedData.length;
+        dindex += dataLength;
+        dataBlock.push(dataHeader);
+        dataBlock.push(postHeader);
+        dataBlock.push(compressedData);
+        var entryHeader = entry.packHeader();
+        entryHeaders.push(entryHeader);
+        mainHeader.size += entryHeader.length;
+        totalSize += dataLength + entryHeader.length;
+      });
+      totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length
+      // point to end of data and beginning of central directory first record
 
-  for (; walker !== null && i < to; i++, walker = walker.next) {
-    ret.push(walker.value);
-  }
+      mainHeader.offset = dindex;
+      dindex = 0;
+      var outBuffer = Buffer.alloc(totalSize);
+      dataBlock.forEach(function (content) {
+        content.copy(outBuffer, dindex); // write data blocks
 
-  return ret;
-};
+        dindex += content.length;
+      });
+      entryHeaders.forEach(function (content) {
+        content.copy(outBuffer, dindex); // write central directory entries
 
-Yallist.prototype.sliceReverse = function (from, to) {
-  to = to || this.length;
+        dindex += content.length;
+      });
+      var mh = mainHeader.toBinary();
 
-  if (to < 0) {
-    to += this.length;
-  }
+      if (_comment) {
+        _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment
 
-  from = from || 0;
+      }
 
-  if (from < 0) {
-    from += this.length;
-  }
+      mh.copy(outBuffer, dindex); // write main header
 
-  var ret = new Yallist();
+      return outBuffer;
+    },
+    toAsyncBuffer: function (
+    /*Function*/
+    onSuccess,
+    /*Function*/
+    onFail,
+    /*Function*/
+    onItemStart,
+    /*Function*/
+    onItemEnd) {
+      if (entryList.length > 1) {
+        entryList.sort(function (a, b) {
+          var nameA = a.entryName.toLowerCase();
+          var nameB = b.entryName.toLowerCase();
 
-  if (to < from || to < 0) {
-    return ret;
-  }
+          if (nameA > nameB) {
+            return -1;
+          }
 
-  if (from < 0) {
-    from = 0;
-  }
+          if (nameA < nameB) {
+            return 1;
+          }
 
-  if (to > this.length) {
-    to = this.length;
-  }
+          return 0;
+        });
+      }
 
-  for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {
-    walker = walker.prev;
-  }
+      var totalSize = 0,
+          dataBlock = [],
+          entryHeaders = [],
+          dindex = 0;
+      mainHeader.size = 0;
+      mainHeader.offset = 0;
 
-  for (; walker !== null && i > from; i--, walker = walker.prev) {
-    ret.push(walker.value);
-  }
+      var compress = function (entryList) {
+        var self = arguments.callee;
 
-  return ret;
-};
+        if (entryList.length) {
+          var entry = entryList.pop();
+          var name = entry.entryName + entry.extra.toString();
+          if (onItemStart) onItemStart(name);
+          entry.getCompressedDataAsync(function (compressedData) {
+            if (onItemEnd) onItemEnd(name);
+            entry.header.offset = dindex; // data header
 
-Yallist.prototype.reverse = function () {
-  var head = this.head;
-  var tail = this.tail;
+            var dataHeader = entry.header.dataHeaderToBinary();
+            var postHeader;
 
-  for (var walker = head; walker !== null; walker = walker.prev) {
-    var p = walker.prev;
-    walker.prev = walker.next;
-    walker.next = p;
-  }
+            try {
+              postHeader = Buffer.alloc(name.length, name); // using alloc will work on node  5.x+
+            } catch (e) {
+              postHeader = new Buffer(name); // use deprecated method if alloc fails...
+            }
 
-  this.head = tail;
-  this.tail = head;
-  return this;
-};
+            var dataLength = dataHeader.length + postHeader.length + compressedData.length;
+            dindex += dataLength;
+            dataBlock.push(dataHeader);
+            dataBlock.push(postHeader);
+            dataBlock.push(compressedData);
+            var entryHeader = entry.packHeader();
+            entryHeaders.push(entryHeader);
+            mainHeader.size += entryHeader.length;
+            totalSize += dataLength + entryHeader.length;
 
-function push(self, item) {
-  self.tail = new Node(item, self.tail, null, self);
+            if (entryList.length) {
+              self(entryList);
+            } else {
+              totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length
+              // point to end of data and beginning of central directory first record
 
-  if (!self.head) {
-    self.head = self.tail;
-  }
+              mainHeader.offset = dindex;
+              dindex = 0;
+              var outBuffer = Buffer.alloc(totalSize);
+              dataBlock.forEach(function (content) {
+                content.copy(outBuffer, dindex); // write data blocks
 
-  self.length++;
-}
+                dindex += content.length;
+              });
+              entryHeaders.forEach(function (content) {
+                content.copy(outBuffer, dindex); // write central directory entries
 
-function unshift(self, item) {
-  self.head = new Node(item, null, self.head, self);
+                dindex += content.length;
+              });
+              var mh = mainHeader.toBinary();
 
-  if (!self.tail) {
-    self.tail = self.head;
-  }
+              if (_comment) {
+                _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment
 
-  self.length++;
-}
+              }
 
-function Node(value, prev, next, list) {
-  if (!(this instanceof Node)) {
-    return new Node(value, prev, next, list);
-  }
+              mh.copy(outBuffer, dindex); // write main header
 
-  this.list = list;
-  this.value = value;
+              onSuccess(outBuffer);
+            }
+          });
+        }
+      };
 
-  if (prev) {
-    prev.next = this;
-    this.prev = prev;
-  } else {
-    this.prev = null;
-  }
+      compress(entryList);
+    }
+  };
+};
 
-  if (next) {
-    next.prev = this;
-    this.next = next;
-  } else {
-    this.next = null;
-  }
-}
+/***/ }),
 
-try {
-  // add if support for Symbol.iterator is present
-  __webpack_require__(/*! ./iterator.js */ "./packages/loot-core/node_modules/yallist/iterator.js")(Yallist);
-} catch (er) {}
+/***/ "./packages/loot-core/node_modules/mitt/dist/mitt.es.js":
+/*!**************************************************************!*\
+  !*** ./packages/loot-core/node_modules/mitt/dist/mitt.es.js ***!
+  \**************************************************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony default export */ __webpack_exports__["default"] = (function (n) {
+  return {
+    all: n = n || new Map(),
+    on: function (t, e) {
+      var i = n.get(t);
+      i && i.push(e) || n.set(t, [e]);
+    },
+    off: function (t, e) {
+      var i = n.get(t);
+      i && i.splice(i.indexOf(e) >>> 0, 1);
+    },
+    emit: function (t, e) {
+      (n.get(t) || []).slice().map(function (n) {
+        n(e);
+      }), (n.get("*") || []).slice().map(function (n) {
+        n(t, e);
+      });
+    }
+  };
+});
 
 /***/ }),
 
@@ -49300,7 +46024,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony import */ var _platform_server_asyncStorage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../platform/server/asyncStorage */ "./packages/loot-core/src/platform/server/asyncStorage/index.electron.js");
 /* harmony import */ var _platform_server_asyncStorage__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_platform_server_asyncStorage__WEBPACK_IMPORTED_MODULE_0__);
 /* harmony import */ var _db__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../db */ "./packages/loot-core/src/server/db/index.js");
-/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../config */ "./packages/loot-core/src/server/config.js");
+/* harmony import */ var _server_config__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../server-config */ "./packages/loot-core/src/server/server-config.js");
 /* harmony import */ var _sync__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sync */ "./packages/loot-core/src/server/accounts/sync.js");
 /* harmony import */ var _shared_accounts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../shared/accounts */ "./packages/loot-core/src/shared/accounts.js");
 /* harmony import */ var _shared_util__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../shared/util */ "./packages/loot-core/src/shared/util.js");
@@ -49344,7 +46068,7 @@ async function handoffPublicToken(institution, publicToken) {
   let id = uuid.v4Sync(); // Make sure to generate an access token first before inserting it
   // into our local database in case it fails
 
-  await Object(_post__WEBPACK_IMPORTED_MODULE_6__["post"])(Object(_config__WEBPACK_IMPORTED_MODULE_2__["getConfig"])().PLAID_SERVER + '/handoff_public_token', {
+  await Object(_post__WEBPACK_IMPORTED_MODULE_6__["post"])(Object(_server_config__WEBPACK_IMPORTED_MODULE_2__["getServer"])().PLAID_SERVER + '/handoff_public_token', {
     userId,
     key,
     item_id: id,
@@ -50500,7 +47224,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony import */ var _shared_transactions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../shared/transactions */ "./packages/loot-core/src/shared/transactions.js");
 /* harmony import */ var _shared_months__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../shared/months */ "./packages/loot-core/src/shared/months.js");
 /* harmony import */ var _api_models__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../api-models */ "./packages/loot-core/src/server/api-models.js");
-/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../config */ "./packages/loot-core/src/server/config.js");
+/* harmony import */ var _server_config__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../server-config */ "./packages/loot-core/src/server/server-config.js");
 /* harmony import */ var _sync__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../sync */ "./packages/loot-core/src/server/sync/index.js");
 /* harmony import */ var _mutators__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../mutators */ "./packages/loot-core/src/server/mutators.js");
 /* harmony import */ var _payees__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./payees */ "./packages/loot-core/src/server/accounts/payees.js");
@@ -50586,7 +47310,7 @@ async function updateAccountBalance(id, balance) {
 }
 
 async function getAccounts(userId, userKey, id) {
-  let res = await post(Object(_config__WEBPACK_IMPORTED_MODULE_6__["getConfig"])().PLAID_SERVER + '/accounts', {
+  let res = await post(Object(_server_config__WEBPACK_IMPORTED_MODULE_6__["getServer"])().PLAID_SERVER + '/accounts', {
     userId,
     key: userKey,
     item_id: id
@@ -50616,7 +47340,7 @@ async function downloadTransactions(userId, userKey, acctId, bankId, since, coun
 
   while (1) {
     const endDate = _shared_months__WEBPACK_IMPORTED_MODULE_4__["currentDay"]();
-    const res = await post(Object(_config__WEBPACK_IMPORTED_MODULE_6__["getConfig"])().PLAID_SERVER + '/transactions', {
+    const res = await post(Object(_server_config__WEBPACK_IMPORTED_MODULE_6__["getServer"])().PLAID_SERVER + '/transactions', {
       userId: userId,
       key: userKey,
       item_id: '' + bankId,
@@ -56990,7 +53714,7 @@ function unflatten2(arr) {
 /*!********************************************************!*\
   !*** ./packages/loot-core/src/server/cloud-storage.js ***!
   \********************************************************/
-/*! exports provided: checkKey, resetSyncState, exportBuffer, upload, possiblyUpload, removeFile, listRemoteFiles, download */
+/*! exports provided: checkKey, resetSyncState, exportBuffer, importBuffer, upload, possiblyUpload, removeFile, listRemoteFiles, download */
 /***/ (function(module, __webpack_exports__, __webpack_require__) {
 
 "use strict";
@@ -56998,6 +53722,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "checkKey", function() { return checkKey; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetSyncState", function() { return resetSyncState; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "exportBuffer", function() { return exportBuffer; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "importBuffer", function() { return importBuffer; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "upload", function() { return upload; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "possiblyUpload", function() { return possiblyUpload; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeFile", function() { return removeFile; });
@@ -57012,7 +53737,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony import */ var _shared_months__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shared/months */ "./packages/loot-core/src/shared/months.js");
 /* harmony import */ var _platform_server_sqlite__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../platform/server/sqlite */ "./packages/loot-core/src/platform/server/sqlite/index.electron.js");
 /* harmony import */ var _prefs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./prefs */ "./packages/loot-core/src/server/prefs.js");
-/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./config */ "./packages/loot-core/src/server/config.js");
+/* harmony import */ var _server_config__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./server-config */ "./packages/loot-core/src/server/server-config.js");
 /* harmony import */ var _mutators__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./mutators */ "./packages/loot-core/src/server/mutators.js");
 /* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./errors */ "./packages/loot-core/src/server/errors.js");
 /* harmony import */ var _encryption__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./encryption */ "./packages/loot-core/src/server/encryption.js");
@@ -57079,7 +53804,7 @@ async function checkKey() {
   let res;
 
   try {
-    res = await Object(_post__WEBPACK_IMPORTED_MODULE_10__["post"])(Object(_config__WEBPACK_IMPORTED_MODULE_6__["getConfig"])().SYNC_SERVER + '/user-get-key', {
+    res = await Object(_post__WEBPACK_IMPORTED_MODULE_10__["post"])(Object(_server_config__WEBPACK_IMPORTED_MODULE_6__["getServer"])().SYNC_SERVER + '/user-get-key', {
       token: userToken,
       fileId: cloudFileId
     });
@@ -57114,7 +53839,7 @@ async function resetSyncState(newKeyState) {
   }
 
   try {
-    await Object(_post__WEBPACK_IMPORTED_MODULE_10__["post"])(Object(_config__WEBPACK_IMPORTED_MODULE_6__["getConfig"])().SYNC_SERVER + '/reset-user-file', {
+    await Object(_post__WEBPACK_IMPORTED_MODULE_10__["post"])(Object(_server_config__WEBPACK_IMPORTED_MODULE_6__["getServer"])().SYNC_SERVER + '/reset-user-file', {
       token: userToken,
       fileId: cloudFileId
     });
@@ -57136,7 +53861,7 @@ async function resetSyncState(newKeyState) {
 
   if (newKeyState) {
     try {
-      await Object(_post__WEBPACK_IMPORTED_MODULE_10__["post"])(Object(_config__WEBPACK_IMPORTED_MODULE_6__["getConfig"])().SYNC_SERVER + '/user-create-key', {
+      await Object(_post__WEBPACK_IMPORTED_MODULE_10__["post"])(Object(_server_config__WEBPACK_IMPORTED_MODULE_6__["getServer"])().SYNC_SERVER + '/user-create-key', {
         token: userToken,
         fileId: cloudFileId,
         keyId: newKeyState.key.getId(),
@@ -57198,7 +53923,59 @@ async function exportBuffer() {
     zipped.addFile('db.sqlite', dbContent);
     zipped.addFile('metadata.json', metaContent);
   });
-  return zipped.toBuffer();
+  return Buffer.from(zipped.toBuffer());
+}
+async function importBuffer(fileData, buffer) {
+  let zipped = new AdmZip(buffer);
+  let entries = zipped.getEntries();
+  let dbEntry = entries.find(e => e.entryName.includes('db.sqlite'));
+  let metaEntry = entries.find(e => e.entryName.includes('metadata.json'));
+
+  if (!dbEntry || !metaEntry) {
+    throw Object(_errors__WEBPACK_IMPORTED_MODULE_8__["FileDownloadError"])('invalid-zip-file');
+  }
+
+  let dbContent = zipped.readFile(dbEntry);
+  let metaContent = zipped.readFile(metaEntry);
+  let meta;
+
+  try {
+    meta = JSON.parse(metaContent.toString('utf8'));
+  } catch (err) {
+    throw Object(_errors__WEBPACK_IMPORTED_MODULE_8__["FileDownloadError"])('invalid-meta-file');
+  } // Update the metadata. The stored file on the server might be
+  // out-of-date with a few keys
+
+
+  meta = _objectSpread(_objectSpread({}, meta), {}, {
+    cloudFileId: fileData.fileId,
+    groupId: fileData.groupId,
+    lastUploaded: _shared_months__WEBPACK_IMPORTED_MODULE_3__["currentDay"](),
+    encryptKeyId: fileData.encryptMeta ? fileData.encryptMeta.keyId : null
+  });
+  let budgetDir = _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.getBudgetDir(meta.id);
+
+  if (await _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.exists(budgetDir)) {
+    // Don't remove the directory so that backups are retained
+    let dbFile = _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.join(budgetDir, 'db.sqlite');
+    let metaFile = _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.join(budgetDir, 'metadata.json');
+
+    if (await _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.exists(dbFile)) {
+      await _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.removeFile(dbFile);
+    }
+
+    if (await _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.exists(metaFile)) {
+      await _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.removeFile(metaFile);
+    }
+  } else {
+    await _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.mkdir(budgetDir);
+  }
+
+  await _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.writeFile(_platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.join(budgetDir, 'db.sqlite'), dbContent);
+  await _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.writeFile(_platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.join(budgetDir, 'metadata.json'), JSON.stringify(meta));
+  return {
+    id: meta.id
+  };
 }
 async function upload() {
   let userToken = await _platform_server_asyncStorage__WEBPACK_IMPORTED_MODULE_1___default.a.getItem('user-token');
@@ -57252,7 +54029,7 @@ async function upload() {
   let res;
 
   try {
-    res = await fetchJSON(Object(_config__WEBPACK_IMPORTED_MODULE_6__["getConfig"])().SYNC_SERVER + '/upload-user-file', {
+    res = await fetchJSON(Object(_server_config__WEBPACK_IMPORTED_MODULE_6__["getServer"])().SYNC_SERVER + '/upload-user-file', {
       method: 'POST',
       headers: _objectSpread(_objectSpread({
         'Content-Length': uploadContent.length,
@@ -57316,16 +54093,13 @@ async function possiblyUpload() {
   upload().catch(err => {});
 }
 async function removeFile(fileId) {
-  const _await$asyncStorage$m = await _platform_server_asyncStorage__WEBPACK_IMPORTED_MODULE_1___default.a.multiGet(['user-id', 'user-key']),
-        _await$asyncStorage$m2 = _slicedToArray(_await$asyncStorage$m, 2),
+  const _await$asyncStorage$m = await _platform_server_asyncStorage__WEBPACK_IMPORTED_MODULE_1___default.a.multiGet(['user-token']),
+        _await$asyncStorage$m2 = _slicedToArray(_await$asyncStorage$m, 1),
         _await$asyncStorage$m3 = _slicedToArray(_await$asyncStorage$m2[0], 2),
-        userId = _await$asyncStorage$m3[1],
-        _await$asyncStorage$m4 = _slicedToArray(_await$asyncStorage$m2[1], 2),
-        userKey = _await$asyncStorage$m4[1];
+        userToken = _await$asyncStorage$m3[1];
 
-  await Object(_post__WEBPACK_IMPORTED_MODULE_10__["post"])(Object(_config__WEBPACK_IMPORTED_MODULE_6__["getConfig"])().SYNC_SERVER + '/delete-user-file', {
-    userId,
-    key: userKey,
+  await Object(_post__WEBPACK_IMPORTED_MODULE_10__["post"])(Object(_server_config__WEBPACK_IMPORTED_MODULE_6__["getServer"])().SYNC_SERVER + '/delete-user-file', {
+    token: userToken,
     fileId
   });
 }
@@ -57339,7 +54113,7 @@ async function listRemoteFiles() {
   let res;
 
   try {
-    res = await fetchJSON(Object(_config__WEBPACK_IMPORTED_MODULE_6__["getConfig"])().SYNC_SERVER + '/list-user-files', {
+    res = await fetchJSON(Object(_server_config__WEBPACK_IMPORTED_MODULE_6__["getServer"])().SYNC_SERVER + '/list-user-files', {
       headers: {
         'X-ACTUAL-TOKEN': userToken
       }
@@ -57353,7 +54127,6 @@ async function listRemoteFiles() {
     return null;
   }
 
-  console.log(res.data);
   return res.data.map(file => _objectSpread(_objectSpread({}, file), {}, {
     hasKey: _encryption__WEBPACK_IMPORTED_MODULE_9__["default"].hasKey(file.encryptKeyId)
   }));
@@ -57363,7 +54136,7 @@ async function download(fileId, replace) {
   let buffer;
 
   try {
-    buffer = await Object(_platform_server_fetch__WEBPACK_IMPORTED_MODULE_2__["fetch"])(Object(_config__WEBPACK_IMPORTED_MODULE_6__["getConfig"])().SYNC_SERVER + '/download-user-file', {
+    buffer = await Object(_platform_server_fetch__WEBPACK_IMPORTED_MODULE_2__["fetch"])(Object(_server_config__WEBPACK_IMPORTED_MODULE_6__["getServer"])().SYNC_SERVER + '/download-user-file', {
       headers: {
         'X-ACTUAL-TOKEN': userToken,
         'X-ACTUAL-FILE-ID': fileId
@@ -57383,7 +54156,7 @@ async function download(fileId, replace) {
   let res;
 
   try {
-    res = await fetchJSON(Object(_config__WEBPACK_IMPORTED_MODULE_6__["getConfig"])().SYNC_SERVER + '/get-user-file-info', {
+    res = await fetchJSON(Object(_server_config__WEBPACK_IMPORTED_MODULE_6__["getServer"])().SYNC_SERVER + '/get-user-file-info', {
       headers: {
         'X-ACTUAL-TOKEN': userToken,
         'X-ACTUAL-FILE-ID': fileId
@@ -57415,87 +54188,7 @@ async function download(fileId, replace) {
     }
   }
 
-  let zipped = new AdmZip(buffer);
-  let entries = zipped.getEntries();
-  let dbEntry = entries.find(e => e.entryName.includes('db.sqlite'));
-  let metaEntry = entries.find(e => e.entryName.includes('metadata.json'));
-
-  if (!dbEntry || !metaEntry) {
-    throw Object(_errors__WEBPACK_IMPORTED_MODULE_8__["FileDownloadError"])('invalid-zip-file');
-  }
-
-  let dbContent = zipped.readFile(dbEntry);
-  let metaContent = zipped.readFile(metaEntry);
-  let meta;
-
-  try {
-    meta = JSON.parse(metaContent.toString('utf8'));
-  } catch (err) {
-    throw Object(_errors__WEBPACK_IMPORTED_MODULE_8__["FileDownloadError"])('invalid-meta-file');
-  } // Update the metadata. The stored file on the server might be
-  // out-of-date with a few keys
-
-
-  meta = _objectSpread(_objectSpread({}, meta), {}, {
-    cloudFileId: fileData.fileId,
-    groupId: fileData.groupId,
-    lastUploaded: _shared_months__WEBPACK_IMPORTED_MODULE_3__["currentDay"](),
-    encryptKeyId: fileData.encryptMeta ? fileData.encryptMeta.keyId : null
-  });
-  let budgetDir = _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.getBudgetDir(meta.id);
-
-  if (await _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.exists(budgetDir)) {
-    if (replace) {
-      // Don't remove the directory so that backups are retained
-      let dbFile = _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.join(budgetDir, 'db.sqlite');
-      let metaFile = _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.join(budgetDir, 'metadata.json');
-
-      if (await _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.exists(dbFile)) {
-        await _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.removeFile(dbFile);
-      }
-
-      if (await _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.exists(metaFile)) {
-        await _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.removeFile(metaFile);
-      }
-    } else {
-      throw Object(_errors__WEBPACK_IMPORTED_MODULE_8__["FileDownloadError"])('file-exists', {
-        id: meta.id
-      });
-    }
-  } else {
-    await _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.mkdir(budgetDir);
-  }
-
-  await _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.writeFile(_platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.join(budgetDir, 'db.sqlite'), dbContent);
-  await _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.writeFile(_platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.join(budgetDir, 'metadata.json'), JSON.stringify(meta));
-  return {
-    id: meta.id
-  };
-}
-
-/***/ }),
-
-/***/ "./packages/loot-core/src/server/config.js":
-/*!*************************************************!*\
-  !*** ./packages/loot-core/src/server/config.js ***!
-  \*************************************************/
-/*! exports provided: setConfig, getConfig */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setConfig", function() { return setConfig; });
-/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getConfig", function() { return getConfig; });
-let config = {
-  SYNC_SERVER: 'https://sync.actualbudget.com/sync',
-  SIGNUP_SERVER: 'https://sync.actualbudget.com/account',
-  PLAID_SERVER: 'https://sync.actualbudget.com/plaid'
-};
-function setConfig(c) {
-  config = c;
-}
-function getConfig() {
-  return config;
+  return importBuffer(fileData, buffer, replace);
 }
 
 /***/ }),
@@ -57568,7 +54261,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "insertTransaction", function() { return insertTransaction; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateTransaction", function() { return updateTransaction; });
 /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "deleteTransaction", function() { return deleteTransaction; });
-/* harmony import */ var lru_cache__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lru-cache */ "./packages/loot-core/node_modules/lru-cache/index.js");
+/* harmony import */ var lru_cache__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lru-cache */ "./node_modules/lru-cache/index.js");
 /* harmony import */ var lru_cache__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lru_cache__WEBPACK_IMPORTED_MODULE_0__);
 /* harmony import */ var _platform_server_sqlite__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../platform/server/sqlite */ "./packages/loot-core/src/platform/server/sqlite/index.electron.js");
 /* harmony import */ var _platform_server_fs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../platform/server/fs */ "./packages/loot-core/src/platform/server/fs/index.electron.js");
@@ -58741,7 +55434,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony import */ var _accounts_payees__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./accounts/payees */ "./packages/loot-core/src/server/accounts/payees.js");
 /* harmony import */ var _accounts_parse_file__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./accounts/parse-file */ "./packages/loot-core/src/server/accounts/parse-file.js");
 /* harmony import */ var _accounts_export_to_csv__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./accounts/export-to-csv */ "./packages/loot-core/src/server/accounts/export-to-csv.js");
-/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./config */ "./packages/loot-core/src/server/config.js");
+/* harmony import */ var _server_config__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./server-config */ "./packages/loot-core/src/server/server-config.js");
 /* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./api */ "./packages/loot-core/src/server/api.js");
 /* harmony import */ var _actual_app_api_injected__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! @actual-app/api/injected */ "./packages/api/injected.js");
 /* harmony import */ var _actual_app_api_injected__WEBPACK_IMPORTED_MODULE_36___default = /*#__PURE__*/__webpack_require__.n(_actual_app_api_injected__WEBPACK_IMPORTED_MODULE_36__);
@@ -58846,7 +55539,8 @@ const SyncPb = __webpack_require__(/*! ./sync/proto/sync_pb */ "./packages/loot-
 
 let VERSION;
 let DEMO_BUDGET_ID = '_demo-budget';
-let TEST_BUDGET_ID = '_test-budget'; // util
+let TEST_BUDGET_ID = '_test-budget';
+let UNCONFIGURED_SERVER = 'https://not-configured/'; // util
 
 function onSheetChange({
   names
@@ -58860,12 +55554,6 @@ function onSheetChange({
     };
   });
   connection.send('cells-changed', nodes);
-}
-
-function joinURL(base, ...paths) {
-  let url = new URL(base);
-  url.pathname = _platform_server_fs__WEBPACK_IMPORTED_MODULE_5___default.a.join(paths);
-  return url.toString();
 } // handlers
 
 
@@ -59782,7 +56470,7 @@ handlers['poll-web-token'] = async function ({
       return;
     }
 
-    let data = await Object(_post__WEBPACK_IMPORTED_MODULE_40__["post"])(Object(_config__WEBPACK_IMPORTED_MODULE_34__["getConfig"])().PLAID_SERVER + '/get-web-token-contents', {
+    let data = await Object(_post__WEBPACK_IMPORTED_MODULE_40__["post"])(Object(_server_config__WEBPACK_IMPORTED_MODULE_34__["getServer"])().PLAID_SERVER + '/get-web-token-contents', {
       userId,
       key,
       token
@@ -59959,7 +56647,7 @@ handlers['account-unlink'] = Object(_mutators__WEBPACK_IMPORTED_MODULE_26__["mut
         _await$asyncStorage$m16 = _slicedToArray(_await$asyncStorage$m14[1], 2),
         key = _await$asyncStorage$m16[1];
 
-    await Object(_post__WEBPACK_IMPORTED_MODULE_40__["post"])(Object(_config__WEBPACK_IMPORTED_MODULE_34__["getConfig"])().PLAID_SERVER + '/remove-access-token', {
+    await Object(_post__WEBPACK_IMPORTED_MODULE_40__["post"])(Object(_server_config__WEBPACK_IMPORTED_MODULE_34__["getServer"])().PLAID_SERVER + '/remove-access-token', {
       userId,
       key,
       item_id: bankId
@@ -59979,7 +56667,7 @@ handlers['make-plaid-public-token'] = async function ({
       _await$asyncStorage$m20 = _slicedToArray(_await$asyncStorage$m18[1], 2),
       userKey = _await$asyncStorage$m20[1];
 
-  let data = await Object(_post__WEBPACK_IMPORTED_MODULE_40__["post"])(Object(_config__WEBPACK_IMPORTED_MODULE_34__["getConfig"])().PLAID_SERVER + '/make-public-token', {
+  let data = await Object(_post__WEBPACK_IMPORTED_MODULE_40__["post"])(Object(_server_config__WEBPACK_IMPORTED_MODULE_34__["getServer"])().PLAID_SERVER + '/make-public-token', {
     userId: userId,
     key: userKey,
     item_id: '' + bankId
@@ -60066,7 +56754,7 @@ handlers['save-prefs'] = async function (prefsToSet) {
 
   if (prefsToSet.budgetName && cloudFileId) {
     let userToken = await _platform_server_asyncStorage__WEBPACK_IMPORTED_MODULE_2___default.a.getItem('user-token');
-    await Object(_post__WEBPACK_IMPORTED_MODULE_40__["post"])(Object(_config__WEBPACK_IMPORTED_MODULE_34__["getConfig"])().SYNC_SERVER + '/update-user-filename', {
+    await Object(_post__WEBPACK_IMPORTED_MODULE_40__["post"])(Object(_server_config__WEBPACK_IMPORTED_MODULE_34__["getServer"])().SYNC_SERVER + '/update-user-filename', {
       token: userToken,
       fileId: cloudFileId,
       name: prefsToSet.budgetName
@@ -60139,7 +56827,7 @@ handlers['key-test'] = async function ({
   let res;
 
   try {
-    res = await Object(_post__WEBPACK_IMPORTED_MODULE_40__["post"])(Object(_config__WEBPACK_IMPORTED_MODULE_34__["getConfig"])().SYNC_SERVER + '/user-get-key', {
+    res = await Object(_post__WEBPACK_IMPORTED_MODULE_40__["post"])(Object(_server_config__WEBPACK_IMPORTED_MODULE_34__["getServer"])().SYNC_SERVER + '/user-get-key', {
       token: userToken,
       fileId
     });
@@ -60212,6 +56900,69 @@ handlers['has-pitched-subscribe'] = async function () {
   return 'ok';
 };
 
+handlers['subscribe-needs-bootstrap'] = async function ({
+  url
+} = {}) {
+  if (Object(_server_config__WEBPACK_IMPORTED_MODULE_34__["getServer"])(url).BASE_SERVER === UNCONFIGURED_SERVER) {
+    return {
+      bootstrapped: true
+    };
+  }
+
+  let res;
+
+  try {
+    res = await Object(_post__WEBPACK_IMPORTED_MODULE_40__["get"])(Object(_server_config__WEBPACK_IMPORTED_MODULE_34__["getServer"])(url).SIGNUP_SERVER + '/needs-bootstrap');
+  } catch (err) {
+    return {
+      error: 'network-failure'
+    };
+  }
+
+  try {
+    res = JSON.parse(res);
+  } catch (err) {
+    return {
+      error: 'parse-failure'
+    };
+  }
+
+  if (res.status === 'error') {
+    return {
+      error: res.reason
+    };
+  }
+
+  return {
+    bootstrapped: res.data.bootstrapped
+  };
+};
+
+handlers['subscribe-bootstrap'] = async function ({
+  password
+}) {
+  let res;
+
+  try {
+    res = await Object(_post__WEBPACK_IMPORTED_MODULE_40__["post"])(Object(_server_config__WEBPACK_IMPORTED_MODULE_34__["getServer"])().SIGNUP_SERVER + '/bootstrap', {
+      password
+    });
+  } catch (err) {
+    return {
+      error: err.reason || 'network-failure'
+    };
+  }
+
+  if (res.token) {
+    await _platform_server_asyncStorage__WEBPACK_IMPORTED_MODULE_2___default.a.setItem('user-token', res.token);
+    return {};
+  }
+
+  return {
+    error: 'internal'
+  };
+};
+
 handlers['subscribe-set-user'] = async function ({
   token
 }) {
@@ -60219,26 +56970,38 @@ handlers['subscribe-set-user'] = async function ({
 };
 
 handlers['subscribe-get-user'] = async function () {
+  if (Object(_server_config__WEBPACK_IMPORTED_MODULE_34__["getServer"])() && Object(_server_config__WEBPACK_IMPORTED_MODULE_34__["getServer"])().BASE_SERVER === UNCONFIGURED_SERVER) {
+    return {
+      offline: false
+    };
+  }
+
   let userToken = await _platform_server_asyncStorage__WEBPACK_IMPORTED_MODULE_2___default.a.getItem('user-token');
 
   if (userToken) {
     try {
-      let res = await Object(_post__WEBPACK_IMPORTED_MODULE_40__["post"])(Object(_config__WEBPACK_IMPORTED_MODULE_34__["getConfig"])().SIGNUP_SERVER + '/account', {
-        token: userToken
+      let res = await Object(_post__WEBPACK_IMPORTED_MODULE_40__["get"])(Object(_server_config__WEBPACK_IMPORTED_MODULE_34__["getServer"])().SIGNUP_SERVER + '/validate', {
+        headers: {
+          'X-ACTUAL-TOKEN': userToken
+        }
       });
+      res = JSON.parse(res);
+
+      if (res.status === 'error') {
+        if (res.reason === 'unauthorized') {
+          return null;
+        }
+
+        return {
+          offline: true
+        };
+      }
+
       return {
         offline: false
       };
     } catch (e) {
-      // The server responded successfully, but the user isn't found.
-      // Could be a server problem, but most likely in development we
-      // are switching between staging/prod
-      if (e.reason === 'unauthorized') {
-        return null;
-      } // Worse case, return the user id so the frontend knows the user
-      // has been logged in.
-
-
+      console.log(e);
       return {
         offline: true
       };
@@ -60248,10 +57011,30 @@ handlers['subscribe-get-user'] = async function () {
   return null;
 };
 
+handlers['subscribe-change-password'] = async function ({
+  password
+}) {
+  let userToken = await _platform_server_asyncStorage__WEBPACK_IMPORTED_MODULE_2___default.a.getItem('user-token');
+  let res;
+
+  try {
+    res = await Object(_post__WEBPACK_IMPORTED_MODULE_40__["post"])(Object(_server_config__WEBPACK_IMPORTED_MODULE_34__["getServer"])().SIGNUP_SERVER + '/change-password', {
+      token: userToken,
+      password
+    });
+  } catch (err) {
+    return {
+      error: err.reason || 'network-failure'
+    };
+  }
+
+  return {};
+};
+
 handlers['subscribe-sign-in'] = async function ({
   password
 }) {
-  let res = await Object(_post__WEBPACK_IMPORTED_MODULE_40__["post"])(Object(_config__WEBPACK_IMPORTED_MODULE_34__["getConfig"])().SIGNUP_SERVER + '/login', {
+  let res = await Object(_post__WEBPACK_IMPORTED_MODULE_40__["post"])(Object(_server_config__WEBPACK_IMPORTED_MODULE_34__["getServer"])().SIGNUP_SERVER + '/login', {
     password
   });
 
@@ -60271,6 +57054,35 @@ handlers['subscribe-sign-out'] = async function () {
   return 'ok';
 };
 
+handlers['get-server-url'] = async function () {
+  return Object(_server_config__WEBPACK_IMPORTED_MODULE_34__["getServer"])() && Object(_server_config__WEBPACK_IMPORTED_MODULE_34__["getServer"])().BASE_SERVER;
+};
+
+handlers['set-server-url'] = async function ({
+  url
+}) {
+  if (url != null) {
+    // Validate the server is running
+    let _await$runHandler = await Object(_mutators__WEBPACK_IMPORTED_MODULE_26__["runHandler"])(handlers['subscribe-needs-bootstrap'], {
+      url
+    }),
+        error = _await$runHandler.error;
+
+    if (error) {
+      return {
+        error
+      };
+    }
+  } else {
+    // When the server isn't configured, we just use a placeholder
+    url = UNCONFIGURED_SERVER;
+  }
+
+  _platform_server_asyncStorage__WEBPACK_IMPORTED_MODULE_2___default.a.setItem('server-url', url);
+  Object(_server_config__WEBPACK_IMPORTED_MODULE_34__["setServer"])(url);
+  return {};
+};
+
 handlers['sync'] = async function () {
   return Object(_sync__WEBPACK_IMPORTED_MODULE_29__["fullSync"])();
 };
@@ -60633,6 +57445,38 @@ handlers['import-budget'] = async function ({
 
         break;
 
+      case 'actual':
+        // We should pull out import/export into its own app so this
+        // can be abstracted out better. Importing Actual files is a
+        // special case because we can directly write down the files,
+        // but because it doesn't go through the API layer we need to
+        // duplicate some of the workflow
+        await handlers['close-budget']();
+
+        let _await$cloudStorage$i = await _cloud_storage__WEBPACK_IMPORTED_MODULE_37__["importBuffer"]({
+          cloudFileId: null,
+          groupId: null
+        }, buffer),
+            id = _await$cloudStorage$i.id; // We never want to load cached data from imported files, so
+        // delete the cache
+
+
+        let sqliteDb = await _platform_server_sqlite__WEBPACK_IMPORTED_MODULE_6__["openDatabase"](_platform_server_fs__WEBPACK_IMPORTED_MODULE_5___default.a.join(_platform_server_fs__WEBPACK_IMPORTED_MODULE_5___default.a.getBudgetDir(id), 'db.sqlite'));
+        _platform_server_sqlite__WEBPACK_IMPORTED_MODULE_6__["execQuery"](sqliteDb, `
+          DELETE FROM kvcache;
+          DELETE FROM kvcache_key;
+        `);
+        _platform_server_sqlite__WEBPACK_IMPORTED_MODULE_6__["closeDatabase"](sqliteDb); // Load the budget, force everything to be computed, and try
+        // to upload it as a cloud file
+
+        await handlers['load-budget']({
+          id
+        });
+        await handlers['get-budget-bounds']();
+        await _sheet__WEBPACK_IMPORTED_MODULE_10__["waitOnSpreadsheet"]();
+        await _cloud_storage__WEBPACK_IMPORTED_MODULE_37__["upload"]().catch(err => {});
+        break;
+
       default:
     }
   } catch (err) {
@@ -60958,17 +57802,12 @@ async function initApp(version, isDev, socketName) {
     const lastBudget = await _platform_server_asyncStorage__WEBPACK_IMPORTED_MODULE_2___default.a.getItem('lastBudget'); // if (lastBudget) {
     //   loadBudget(lastBudget, VERSION);
     // }
-    // setConfig({
-    //   SYNC_SERVER: 'https://sync-staging.actualbudget.com/sync',
-    //   SIGNUP_SERVER: 'https://sync-staging.actualbudget.com/account',
-    //   PLAID_SERVER: 'https://sync-staging.actualbudget.com/plaid'
-    // });
-
-    Object(_config__WEBPACK_IMPORTED_MODULE_34__["setConfig"])({
-      SYNC_SERVER: 'http://localhost:5006/sync',
-      SIGNUP_SERVER: 'http://localhost:5006/account',
-      PLAID_SERVER: 'http://localhost:5006/plaid'
-    });
+  }
+
+  const url = await _platform_server_asyncStorage__WEBPACK_IMPORTED_MODULE_2___default.a.getItem('server-url');
+
+  if (url) {
+    Object(_server_config__WEBPACK_IMPORTED_MODULE_34__["setServer"])(url);
   }
 
   connection.init(socketName, _main_app__WEBPACK_IMPORTED_MODULE_45__["default"].handlers);
@@ -61018,15 +57857,11 @@ async function init({
   _platform_server_fs__WEBPACK_IMPORTED_MODULE_5___default.a._setDocumentDir(dataDir || process.cwd());
 
   if (serverURL) {
-    Object(_config__WEBPACK_IMPORTED_MODULE_34__["setConfig"])({
-      SYNC_SERVER: joinURL(serverURL, '/sync'),
-      SIGNUP_SERVER: joinURL(serverURL, '/account'),
-      PLAID_SERVER: joinURL(serverURL, '/plaid')
-    });
+    Object(_server_config__WEBPACK_IMPORTED_MODULE_34__["setServer"])(serverURL);
   } else {
     // This turns off all server URLs. In this mode we don't want any
     // access to the server, we are doing things locally
-    Object(_config__WEBPACK_IMPORTED_MODULE_34__["setConfig"])(null);
+    Object(_server_config__WEBPACK_IMPORTED_MODULE_34__["setServer"])(null);
     _main_app__WEBPACK_IMPORTED_MODULE_45__["default"].events.on('load-budget', () => {
       Object(_sync__WEBPACK_IMPORTED_MODULE_29__["setSyncingMode"])('offline');
     });
@@ -61953,8 +58788,8 @@ async function postBinary(url, data, headers) {
   throwIfNot200(res, buffer.toString());
   return buffer;
 }
-function get(url) {
-  return fetch(url).then(res => res.text());
+function get(url, opts) {
+  return fetch(url, opts).then(res => res.text());
 }
 
 /***/ }),
@@ -63020,6 +59855,51 @@ async function findSchedules() {
 
 /***/ }),
 
+/***/ "./packages/loot-core/src/server/server-config.js":
+/*!********************************************************!*\
+  !*** ./packages/loot-core/src/server/server-config.js ***!
+  \********************************************************/
+/*! exports provided: setServer, getServer */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setServer", function() { return setServer; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getServer", function() { return getServer; });
+/* harmony import */ var _platform_server_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../platform/server/fs */ "./packages/loot-core/src/platform/server/fs/index.electron.js");
+/* harmony import */ var _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_platform_server_fs__WEBPACK_IMPORTED_MODULE_0__);
+
+let config = null;
+
+function joinURL(base, ...paths) {
+  let url = new URL(base);
+  url.pathname = _platform_server_fs__WEBPACK_IMPORTED_MODULE_0___default.a.join(...paths);
+  return url.toString();
+}
+
+function setServer(url) {
+  if (url == null) {
+    config = null;
+  } else {
+    config = getServer(url);
+  }
+} // `url` is optional; if not given it will provide the global config
+
+function getServer(url) {
+  if (url) {
+    return {
+      BASE_SERVER: url,
+      SYNC_SERVER: joinURL(url, '/sync'),
+      SIGNUP_SERVER: joinURL(url, '/account'),
+      PLAID_SERVER: joinURL(url, '/plaid')
+    };
+  }
+
+  return config;
+}
+
+/***/ }),
+
 /***/ "./packages/loot-core/src/server/sheet.js":
 /*!************************************************!*\
   !*** ./packages/loot-core/src/server/sheet.js ***!
@@ -64175,7 +61055,7 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony import */ var _timestamp__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../timestamp */ "./packages/loot-core/src/server/timestamp.js");
 /* harmony import */ var _merkle__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../merkle */ "./packages/loot-core/src/server/merkle.js");
 /* harmony import */ var _encoder__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./encoder */ "./packages/loot-core/src/server/sync/encoder.js");
-/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../config */ "./packages/loot-core/src/server/config.js");
+/* harmony import */ var _server_config__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../server-config */ "./packages/loot-core/src/server/server-config.js");
 /* harmony import */ var _repair__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./repair */ "./packages/loot-core/src/server/sync/repair.js");
 /* harmony import */ var _make_test_message__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./make-test-message */ "./packages/loot-core/src/server/sync/make-test-message.js");
 /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "makeTestMessage", function() { return _make_test_message__WEBPACK_IMPORTED_MODULE_19__["default"]; });
@@ -64827,7 +61707,7 @@ async function _fullSync(sinceTimestamp, count, prevDiffTime) {
   // check the worst case here and make multiple requests if it's
   // really large.
 
-  let resBuffer = await Object(_post__WEBPACK_IMPORTED_MODULE_7__["postBinary"])(Object(_config__WEBPACK_IMPORTED_MODULE_17__["getConfig"])().SYNC_SERVER + '/sync', buffer, {
+  let resBuffer = await Object(_post__WEBPACK_IMPORTED_MODULE_7__["postBinary"])(Object(_server_config__WEBPACK_IMPORTED_MODULE_17__["getServer"])().SYNC_SERVER + '/sync', buffer, {
     'X-ACTUAL-TOKEN': userToken
   }); // Abort if the file is either no longer loaded, the group id has
   // changed because of a sync reset
@@ -66989,22 +63869,8 @@ __webpack_require__.r(__webpack_exports__);
 /* harmony import */ var _platform_server_asyncStorage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../platform/server/asyncStorage */ "./packages/loot-core/src/platform/server/asyncStorage/index.electron.js");
 /* harmony import */ var _platform_server_asyncStorage__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_platform_server_asyncStorage__WEBPACK_IMPORTED_MODULE_0__);
 /* harmony import */ var _encryption_internals__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../encryption-internals */ "./packages/loot-core/src/server/encryption-internals.js");
-function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
 
-function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
 
-function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
-
-function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
-
-function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
-
-function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
-
-
-
-
-let Mixpanel = __webpack_require__(/*! @jlongster/mixpanel */ "./node_modules/@jlongster/mixpanel/lib/mixpanel-node.js");
 
 let uuid = __webpack_require__(/*! ../../platform/uuid */ "./packages/loot-core/src/platform/uuid/index.electron.js");
 
@@ -67029,61 +63895,8 @@ function isAnonymous(id) {
   return !id.startsWith('user-');
 }
 
-async function init() {
-  mixpanel = Mixpanel.init('7e6461b8dde1d5dbf04ed1711768257a');
-
-  let _await$asyncStorage$m = await _platform_server_asyncStorage__WEBPACK_IMPORTED_MODULE_0___default.a.multiGet(['distinct-id-v2', 'user-id', 'track-usage']),
-      _await$asyncStorage$m2 = _slicedToArray(_await$asyncStorage$m, 3),
-      _await$asyncStorage$m3 = _slicedToArray(_await$asyncStorage$m2[0], 2),
-      distinctId = _await$asyncStorage$m3[1],
-      _await$asyncStorage$m4 = _slicedToArray(_await$asyncStorage$m2[1], 2),
-      userId = _await$asyncStorage$m4[1],
-      _await$asyncStorage$m5 = _slicedToArray(_await$asyncStorage$m2[2], 2),
-      trackUsage = _await$asyncStorage$m5[1];
-
-  toggle(trackUsage);
-
-  if (distinctId == null) {
-    if (userId) {
-      let hashedId = await hash(userId);
-      currentUniqueId = hashedId;
-      setProfile({
-        $name: hashedId
-      });
-    } else {
-      currentUniqueId = uuid.v4Sync();
-    }
-
-    await _platform_server_asyncStorage__WEBPACK_IMPORTED_MODULE_0___default.a.setItem('distinct-id-v2', currentUniqueId);
-  } else {
-    currentUniqueId = distinctId;
-
-    if (!isAnonymous(distinctId)) {
-      setProfile({
-        $name: distinctId
-      });
-    }
-  }
-}
-async function login(userId) {
-  let hashedId = await hash(userId);
-  await _platform_server_asyncStorage__WEBPACK_IMPORTED_MODULE_0___default.a.setItem('distinct-id-v2', hashedId);
-
-  if (isAnonymous(currentUniqueId)) {
-    mixpanel.identify(hashedId, currentUniqueId);
-    startBuffering(); // So ridiculous. https://help.mixpanel.com/hc/en-us/articles/115004497803-Identity-Management-Best-Practices#serverside-aliasing
-
-    setTimeout(() => {
-      stopBuffering();
-    }, 2000);
-    currentUniqueId = hashedId;
-    setProfile({
-      $name: hashedId
-    });
-  } else {
-    currentUniqueId = hashedId;
-  }
-}
+async function init() {}
+async function login(userId) {}
 let BUFFERING = false;
 let BUFFER = [];
 
diff --git a/packages/api/app/bundle.api.js.map b/packages/api/app/bundle.api.js.map
index f6abc1c1b..33f713ed3 100644
--- a/packages/api/app/bundle.api.js.map
+++ b/packages/api/app/bundle.api.js.map
@@ -1 +1 @@
-{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/@jlongster/mixpanel/lib/groups.js","webpack:///./node_modules/@jlongster/mixpanel/lib/mixpanel-node.js","webpack:///./node_modules/@jlongster/mixpanel/lib/people.js","webpack:///./node_modules/@jlongster/mixpanel/lib/profile_helpers.js","webpack:///./node_modules/@jlongster/mixpanel/lib/utils.js","webpack:///./node_modules/@rschedule/core/es2015/generators.js","webpack:///./node_modules/@rschedule/core/es2015/main.js","webpack:///./node_modules/@rschedule/core/es2015/rules.js","webpack:///./node_modules/@rschedule/json-tools/es2015/Schedule.js","webpack:///./node_modules/@rschedule/json-tools/es2015/main.js","webpack:///./node_modules/@rschedule/standard-date-adapter/es2015/main.js","webpack:///./node_modules/@rschedule/standard-date-adapter/es2015/setup.js","webpack:///./node_modules/accounting/accounting.js","webpack:///./node_modules/adm-zip/adm-zip.js","webpack:///./node_modules/adm-zip/headers/entryHeader.js","webpack:///./node_modules/adm-zip/headers/index.js","webpack:///./node_modules/adm-zip/headers/mainHeader.js","webpack:///./node_modules/adm-zip/methods/deflater.js","webpack:///./node_modules/adm-zip/methods/index.js","webpack:///./node_modules/adm-zip/methods/inflater.js","webpack:///./node_modules/adm-zip/methods/zipcrypto.js","webpack:///./node_modules/adm-zip/util/constants.js","webpack:///./node_modules/adm-zip/util/errors.js","webpack:///./node_modules/adm-zip/util/fattr.js","webpack:///./node_modules/adm-zip/util/fileSystem.js","webpack:///./node_modules/adm-zip/util/index.js","webpack:///./node_modules/adm-zip/util/utils.js","webpack:///./node_modules/adm-zip/zipEntry.js","webpack:///./node_modules/adm-zip/zipFile.js","webpack:///./node_modules/array.prototype.filter/implementation.js","webpack:///./node_modules/array.prototype.filter/index.js","webpack:///./node_modules/array.prototype.filter/polyfill.js","webpack:///./node_modules/array.prototype.filter/shim.js","webpack:///./node_modules/available-typed-arrays/index.js","webpack:///./node_modules/call-bind/callBound.js","webpack:///./node_modules/call-bind/index.js","webpack:///./node_modules/charenc/charenc.js","webpack:///./node_modules/crypt/crypt.js","webpack:///./node_modules/csv-parse/lib/ResizeableBuffer.js","webpack:///./node_modules/csv-parse/lib/index.js","webpack:///./node_modules/csv-parse/lib/sync.js","webpack:///./node_modules/csv-stringify/lib/index.js","webpack:///./node_modules/csv-stringify/lib/sync.js","webpack:///./node_modules/currency-formatter/index.js","webpack:///./node_modules/damerau-levenshtein/index.js","webpack:///./node_modules/date-fns/esm/_lib/addLeadingZeros/index.js","webpack:///./node_modules/date-fns/esm/_lib/assign/index.js","webpack:///./node_modules/date-fns/esm/_lib/cloneObject/index.js","webpack:///./node_modules/date-fns/esm/_lib/format/formatters/index.js","webpack:///./node_modules/date-fns/esm/_lib/format/lightFormatters/index.js","webpack:///./node_modules/date-fns/esm/_lib/format/longFormatters/index.js","webpack:///./node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/protectedTokens/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCDay/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCISODay/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/toInteger/index.js","webpack:///./node_modules/date-fns/esm/addDays/index.js","webpack:///./node_modules/date-fns/esm/addHours/index.js","webpack:///./node_modules/date-fns/esm/addISOWeekYears/index.js","webpack:///./node_modules/date-fns/esm/addMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/addMinutes/index.js","webpack:///./node_modules/date-fns/esm/addMonths/index.js","webpack:///./node_modules/date-fns/esm/addQuarters/index.js","webpack:///./node_modules/date-fns/esm/addSeconds/index.js","webpack:///./node_modules/date-fns/esm/addWeeks/index.js","webpack:///./node_modules/date-fns/esm/addYears/index.js","webpack:///./node_modules/date-fns/esm/areIntervalsOverlapping/index.js","webpack:///./node_modules/date-fns/esm/closestIndexTo/index.js","webpack:///./node_modules/date-fns/esm/closestTo/index.js","webpack:///./node_modules/date-fns/esm/compareAsc/index.js","webpack:///./node_modules/date-fns/esm/compareDesc/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarDays/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarISOWeekYears/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarISOWeeks/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarMonths/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarQuarters/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarWeeks/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarYears/index.js","webpack:///./node_modules/date-fns/esm/differenceInDays/index.js","webpack:///./node_modules/date-fns/esm/differenceInHours/index.js","webpack:///./node_modules/date-fns/esm/differenceInISOWeekYears/index.js","webpack:///./node_modules/date-fns/esm/differenceInMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/differenceInMinutes/index.js","webpack:///./node_modules/date-fns/esm/differenceInMonths/index.js","webpack:///./node_modules/date-fns/esm/differenceInQuarters/index.js","webpack:///./node_modules/date-fns/esm/differenceInSeconds/index.js","webpack:///./node_modules/date-fns/esm/differenceInWeeks/index.js","webpack:///./node_modules/date-fns/esm/differenceInYears/index.js","webpack:///./node_modules/date-fns/esm/eachDayOfInterval/index.js","webpack:///./node_modules/date-fns/esm/eachWeekOfInterval/index.js","webpack:///./node_modules/date-fns/esm/eachWeekendOfInterval/index.js","webpack:///./node_modules/date-fns/esm/eachWeekendOfMonth/index.js","webpack:///./node_modules/date-fns/esm/eachWeekendOfYear/index.js","webpack:///./node_modules/date-fns/esm/endOfDay/index.js","webpack:///./node_modules/date-fns/esm/endOfDecade/index.js","webpack:///./node_modules/date-fns/esm/endOfHour/index.js","webpack:///./node_modules/date-fns/esm/endOfISOWeek/index.js","webpack:///./node_modules/date-fns/esm/endOfISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/endOfMinute/index.js","webpack:///./node_modules/date-fns/esm/endOfMonth/index.js","webpack:///./node_modules/date-fns/esm/endOfQuarter/index.js","webpack:///./node_modules/date-fns/esm/endOfSecond/index.js","webpack:///./node_modules/date-fns/esm/endOfWeek/index.js","webpack:///./node_modules/date-fns/esm/endOfYear/index.js","webpack:///./node_modules/date-fns/esm/format/index.js","webpack:///./node_modules/date-fns/esm/formatDistance/index.js","webpack:///./node_modules/date-fns/esm/formatDistanceStrict/index.js","webpack:///./node_modules/date-fns/esm/formatRelative/index.js","webpack:///./node_modules/date-fns/esm/fromUnixTime/index.js","webpack:///./node_modules/date-fns/esm/getDate/index.js","webpack:///./node_modules/date-fns/esm/getDay/index.js","webpack:///./node_modules/date-fns/esm/getDayOfYear/index.js","webpack:///./node_modules/date-fns/esm/getDaysInMonth/index.js","webpack:///./node_modules/date-fns/esm/getDaysInYear/index.js","webpack:///./node_modules/date-fns/esm/getDecade/index.js","webpack:///./node_modules/date-fns/esm/getHours/index.js","webpack:///./node_modules/date-fns/esm/getISODay/index.js","webpack:///./node_modules/date-fns/esm/getISOWeek/index.js","webpack:///./node_modules/date-fns/esm/getISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/getISOWeeksInYear/index.js","webpack:///./node_modules/date-fns/esm/getMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/getMinutes/index.js","webpack:///./node_modules/date-fns/esm/getMonth/index.js","webpack:///./node_modules/date-fns/esm/getOverlappingDaysInIntervals/index.js","webpack:///./node_modules/date-fns/esm/getQuarter/index.js","webpack:///./node_modules/date-fns/esm/getSeconds/index.js","webpack:///./node_modules/date-fns/esm/getTime/index.js","webpack:///./node_modules/date-fns/esm/getUnixTime/index.js","webpack:///./node_modules/date-fns/esm/getWeek/index.js","webpack:///./node_modules/date-fns/esm/getWeekOfMonth/index.js","webpack:///./node_modules/date-fns/esm/getWeekYear/index.js","webpack:///./node_modules/date-fns/esm/getWeeksInMonth/index.js","webpack:///./node_modules/date-fns/esm/getYear/index.js","webpack:///./node_modules/date-fns/esm/index.js","webpack:///./node_modules/date-fns/esm/isAfter/index.js","webpack:///./node_modules/date-fns/esm/isBefore/index.js","webpack:///./node_modules/date-fns/esm/isDate/index.js","webpack:///./node_modules/date-fns/esm/isEqual/index.js","webpack:///./node_modules/date-fns/esm/isFirstDayOfMonth/index.js","webpack:///./node_modules/date-fns/esm/isFriday/index.js","webpack:///./node_modules/date-fns/esm/isLastDayOfMonth/index.js","webpack:///./node_modules/date-fns/esm/isLeapYear/index.js","webpack:///./node_modules/date-fns/esm/isMonday/index.js","webpack:///./node_modules/date-fns/esm/isSameDay/index.js","webpack:///./node_modules/date-fns/esm/isSameHour/index.js","webpack:///./node_modules/date-fns/esm/isSameISOWeek/index.js","webpack:///./node_modules/date-fns/esm/isSameISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/isSameMinute/index.js","webpack:///./node_modules/date-fns/esm/isSameMonth/index.js","webpack:///./node_modules/date-fns/esm/isSameQuarter/index.js","webpack:///./node_modules/date-fns/esm/isSameSecond/index.js","webpack:///./node_modules/date-fns/esm/isSameWeek/index.js","webpack:///./node_modules/date-fns/esm/isSameYear/index.js","webpack:///./node_modules/date-fns/esm/isSaturday/index.js","webpack:///./node_modules/date-fns/esm/isSunday/index.js","webpack:///./node_modules/date-fns/esm/isThursday/index.js","webpack:///./node_modules/date-fns/esm/isTuesday/index.js","webpack:///./node_modules/date-fns/esm/isValid/index.js","webpack:///./node_modules/date-fns/esm/isWednesday/index.js","webpack:///./node_modules/date-fns/esm/isWeekend/index.js","webpack:///./node_modules/date-fns/esm/isWithinInterval/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfDecade/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfISOWeek/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfMonth/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfQuarter/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfWeek/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfYear/index.js","webpack:///./node_modules/date-fns/esm/lightFormat/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/index.js","webpack:///./node_modules/date-fns/esm/max/index.js","webpack:///./node_modules/date-fns/esm/min/index.js","webpack:///./node_modules/date-fns/esm/parse/_lib/parsers/index.js","webpack:///./node_modules/date-fns/esm/parse/index.js","webpack:///./node_modules/date-fns/esm/parseISO/index.js","webpack:///./node_modules/date-fns/esm/roundToNearestMinutes/index.js","webpack:///./node_modules/date-fns/esm/setDate/index.js","webpack:///./node_modules/date-fns/esm/setDay/index.js","webpack:///./node_modules/date-fns/esm/setDayOfYear/index.js","webpack:///./node_modules/date-fns/esm/setHours/index.js","webpack:///./node_modules/date-fns/esm/setISODay/index.js","webpack:///./node_modules/date-fns/esm/setISOWeek/index.js","webpack:///./node_modules/date-fns/esm/setISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/setMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/setMinutes/index.js","webpack:///./node_modules/date-fns/esm/setMonth/index.js","webpack:///./node_modules/date-fns/esm/setQuarter/index.js","webpack:///./node_modules/date-fns/esm/setSeconds/index.js","webpack:///./node_modules/date-fns/esm/setWeek/index.js","webpack:///./node_modules/date-fns/esm/setWeekYear/index.js","webpack:///./node_modules/date-fns/esm/setYear/index.js","webpack:///./node_modules/date-fns/esm/startOfDay/index.js","webpack:///./node_modules/date-fns/esm/startOfDecade/index.js","webpack:///./node_modules/date-fns/esm/startOfHour/index.js","webpack:///./node_modules/date-fns/esm/startOfISOWeek/index.js","webpack:///./node_modules/date-fns/esm/startOfISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/startOfMinute/index.js","webpack:///./node_modules/date-fns/esm/startOfMonth/index.js","webpack:///./node_modules/date-fns/esm/startOfQuarter/index.js","webpack:///./node_modules/date-fns/esm/startOfSecond/index.js","webpack:///./node_modules/date-fns/esm/startOfWeek/index.js","webpack:///./node_modules/date-fns/esm/startOfWeekYear/index.js","webpack:///./node_modules/date-fns/esm/startOfYear/index.js","webpack:///./node_modules/date-fns/esm/subDays/index.js","webpack:///./node_modules/date-fns/esm/subHours/index.js","webpack:///./node_modules/date-fns/esm/subISOWeekYears/index.js","webpack:///./node_modules/date-fns/esm/subMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/subMinutes/index.js","webpack:///./node_modules/date-fns/esm/subMonths/index.js","webpack:///./node_modules/date-fns/esm/subQuarters/index.js","webpack:///./node_modules/date-fns/esm/subSeconds/index.js","webpack:///./node_modules/date-fns/esm/subWeeks/index.js","webpack:///./node_modules/date-fns/esm/subYears/index.js","webpack:///./node_modules/date-fns/esm/toDate/index.js","webpack:///./node_modules/deep-equal/index.js","webpack:///./node_modules/deep-equal/node_modules/isarray/index.js","webpack:///./node_modules/define-properties/index.js","webpack:///./node_modules/es-abstract/2020/ArraySpeciesCreate.js","webpack:///./node_modules/es-abstract/2020/Call.js","webpack:///./node_modules/es-abstract/2020/CreateDataProperty.js","webpack:///./node_modules/es-abstract/2020/CreateDataPropertyOrThrow.js","webpack:///./node_modules/es-abstract/2020/DefinePropertyOrThrow.js","webpack:///./node_modules/es-abstract/2020/FromPropertyDescriptor.js","webpack:///./node_modules/es-abstract/2020/Get.js","webpack:///./node_modules/es-abstract/2020/HasProperty.js","webpack:///./node_modules/es-abstract/2020/IsAccessorDescriptor.js","webpack:///./node_modules/es-abstract/2020/IsArray.js","webpack:///./node_modules/es-abstract/2020/IsCallable.js","webpack:///./node_modules/es-abstract/2020/IsConstructor.js","webpack:///./node_modules/es-abstract/2020/IsDataDescriptor.js","webpack:///./node_modules/es-abstract/2020/IsExtensible.js","webpack:///./node_modules/es-abstract/2020/IsInteger.js","webpack:///./node_modules/es-abstract/2020/IsPropertyKey.js","webpack:///./node_modules/es-abstract/2020/IsRegExp.js","webpack:///./node_modules/es-abstract/2020/LengthOfArrayLike.js","webpack:///./node_modules/es-abstract/2020/OrdinaryGetOwnProperty.js","webpack:///./node_modules/es-abstract/2020/RequireObjectCoercible.js","webpack:///./node_modules/es-abstract/2020/SameValue.js","webpack:///./node_modules/es-abstract/2020/ToBoolean.js","webpack:///./node_modules/es-abstract/2020/ToInteger.js","webpack:///./node_modules/es-abstract/2020/ToLength.js","webpack:///./node_modules/es-abstract/2020/ToNumber.js","webpack:///./node_modules/es-abstract/2020/ToObject.js","webpack:///./node_modules/es-abstract/2020/ToPrimitive.js","webpack:///./node_modules/es-abstract/2020/ToPropertyDescriptor.js","webpack:///./node_modules/es-abstract/2020/ToString.js","webpack:///./node_modules/es-abstract/2020/Type.js","webpack:///./node_modules/es-abstract/2020/abs.js","webpack:///./node_modules/es-abstract/2020/floor.js","webpack:///./node_modules/es-abstract/5/CheckObjectCoercible.js","webpack:///./node_modules/es-abstract/5/ToInteger.js","webpack:///./node_modules/es-abstract/5/ToNumber.js","webpack:///./node_modules/es-abstract/5/ToPrimitive.js","webpack:///./node_modules/es-abstract/5/Type.js","webpack:///./node_modules/es-abstract/5/abs.js","webpack:///./node_modules/es-abstract/5/floor.js","webpack:///./node_modules/es-abstract/GetIntrinsic.js","webpack:///./node_modules/es-abstract/helpers/DefineOwnProperty.js","webpack:///./node_modules/es-abstract/helpers/assertRecord.js","webpack:///./node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js","webpack:///./node_modules/es-abstract/helpers/isFinite.js","webpack:///./node_modules/es-abstract/helpers/isNaN.js","webpack:///./node_modules/es-abstract/helpers/isPrimitive.js","webpack:///./node_modules/es-abstract/helpers/isPropertyDescriptor.js","webpack:///./node_modules/es-abstract/helpers/maxSafeInteger.js","webpack:///./node_modules/es-abstract/helpers/regexTester.js","webpack:///./node_modules/es-abstract/helpers/sign.js","webpack:///./node_modules/es-array-method-boxes-properly/index.js","webpack:///./node_modules/es-get-iterator/index.js","webpack:///./node_modules/es-get-iterator/node_modules/isarray/index.js","webpack:///./node_modules/es-to-primitive/es2015.js","webpack:///./node_modules/es-to-primitive/es5.js","webpack:///./node_modules/es-to-primitive/helpers/isPrimitive.js","webpack:///./node_modules/foreach/index.js","webpack:///./node_modules/function-bind/implementation.js","webpack:///./node_modules/function-bind/index.js","webpack:///./node_modules/get-intrinsic/index.js","webpack:///./node_modules/google-protobuf/google-protobuf.js","webpack:///./node_modules/has-symbols/index.js","webpack:///./node_modules/has-symbols/shams.js","webpack:///./node_modules/has/src/index.js","webpack:///./node_modules/is-arguments/index.js","webpack:///./node_modules/is-bigint/index.js","webpack:///./node_modules/is-boolean-object/index.js","webpack:///./node_modules/is-buffer/index.js","webpack:///./node_modules/is-callable/index.js","webpack:///./node_modules/is-date-object/index.js","webpack:///./node_modules/is-map/index.js","webpack:///./node_modules/is-number-object/index.js","webpack:///./node_modules/is-regex/index.js","webpack:///./node_modules/is-set/index.js","webpack:///./node_modules/is-string/index.js","webpack:///./node_modules/is-symbol/index.js","webpack:///./node_modules/is-typed-array/index.js","webpack:///./node_modules/is-weakmap/index.js","webpack:///./node_modules/is-weakset/index.js","webpack:///./node_modules/locale-currency/index.js","webpack:///./node_modules/locale-currency/map.js","webpack:///./node_modules/md5/md5.js","webpack:///./node_modules/memoize-one/dist/memoize-one.esm.js","webpack:///./node_modules/murmurhash/murmurhash.js","webpack:///./node_modules/object-assign/index.js","webpack:///./node_modules/object-inspect/index.js","webpack:///./node_modules/object-inspect/util.inspect.js","webpack:///./node_modules/object-is/implementation.js","webpack:///./node_modules/object-is/index.js","webpack:///./node_modules/object-is/polyfill.js","webpack:///./node_modules/object-is/shim.js","webpack:///./node_modules/object-keys/implementation.js","webpack:///./node_modules/object-keys/index.js","webpack:///./node_modules/object-keys/isArguments.js","webpack:///./node_modules/object.assign/implementation.js","webpack:///./node_modules/object.assign/index.js","webpack:///./node_modules/object.assign/polyfill.js","webpack:///./node_modules/object.assign/shim.js","webpack:///./node_modules/regexp.prototype.flags/implementation.js","webpack:///./node_modules/regexp.prototype.flags/index.js","webpack:///./node_modules/regexp.prototype.flags/polyfill.js","webpack:///./node_modules/regexp.prototype.flags/shim.js","webpack:///./node_modules/side-channel/index.js","webpack:///./node_modules/slash/index.js","webpack:///./node_modules/uuid/index.js","webpack:///./node_modules/uuid/lib/bytesToUuid.js","webpack:///./node_modules/uuid/lib/rng.js","webpack:///./node_modules/uuid/v1.js","webpack:///./node_modules/uuid/v4.js","webpack:///./node_modules/which-boxed-primitive/index.js","webpack:///./node_modules/which-collection/index.js","webpack:///./node_modules/which-typed-array/index.js","webpack:///./packages/api/injected.js","webpack:///./packages/api/methods.js","webpack:///./packages/api/query.js","webpack:///./packages/api/utils.js","webpack:///./packages/import-ynab4/importer.js","webpack:///./packages/import-ynab5/importer.js","webpack:///./packages/loot-core/migrations/1632571489012_remove_cache.js","webpack:///./packages/loot-core/node_modules/adm-zip/adm-zip.js","webpack:///./packages/loot-core/node_modules/adm-zip/headers/entryHeader.js","webpack:///./packages/loot-core/node_modules/adm-zip/headers/index.js","webpack:///./packages/loot-core/node_modules/adm-zip/headers/mainHeader.js","webpack:///./packages/loot-core/node_modules/adm-zip/methods/deflater.js","webpack:///./packages/loot-core/node_modules/adm-zip/methods/index.js","webpack:///./packages/loot-core/node_modules/adm-zip/methods/inflater.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/constants.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/errors.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/fattr.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/fileSystem.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/index.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/utils.js","webpack:///./packages/loot-core/node_modules/adm-zip/zipEntry.js","webpack:///./packages/loot-core/node_modules/adm-zip/zipFile.js","webpack:///./packages/loot-core/node_modules/lru-cache/index.js","webpack:///../src/index.ts","webpack:///./packages/loot-core/node_modules/yallist/iterator.js","webpack:///./packages/loot-core/node_modules/yallist/yallist.js","webpack:///./packages/loot-core/src/mocks/budget.js","webpack:///./packages/loot-core/src/platform/exceptions/index.electron.js","webpack:///./packages/loot-core/src/platform/server/asyncStorage/index.electron.js","webpack:///./packages/loot-core/src/platform/server/connection/index.api.js","webpack:///./packages/loot-core/src/platform/server/fetch/index.electron.js","webpack:///./packages/loot-core/src/platform/server/fs/index.electron.js","webpack:///./packages/loot-core/src/platform/server/log/index.api.js","webpack:///./packages/loot-core/src/platform/server/sqlite/index.electron.js","webpack:///./packages/loot-core/src/platform/uuid/index.electron.js","webpack:///./packages/loot-core/src/server/accounts/export-to-csv.js","webpack:///./packages/loot-core/src/server/accounts/link.js","webpack:///./packages/loot-core/src/server/accounts/parse-file.js","webpack:///./packages/loot-core/src/server/accounts/payees.js","webpack:///./packages/loot-core/src/server/accounts/qif2json.js","webpack:///./packages/loot-core/src/server/accounts/rules.js","webpack:///./packages/loot-core/src/server/accounts/sync.js","webpack:///./packages/loot-core/src/server/accounts/title/index.js","webpack:///./packages/loot-core/src/server/accounts/title/lower-case.js","webpack:///./packages/loot-core/src/server/accounts/title/specials.js","webpack:///./packages/loot-core/src/server/accounts/transaction-rules.js","webpack:///./packages/loot-core/src/server/accounts/transactions.js","webpack:///./packages/loot-core/src/server/accounts/transfer.js","webpack:///./packages/loot-core/src/server/api-models.js","webpack:///./packages/loot-core/src/server/api.js","webpack:///./packages/loot-core/src/server/app.js","webpack:///./packages/loot-core/src/server/aql/compiler.js","webpack:///./packages/loot-core/src/server/aql/exec.js","webpack:///./packages/loot-core/src/server/aql/schema-helpers.js","webpack:///./packages/loot-core/src/server/aql/schema/executors.js","webpack:///./packages/loot-core/src/server/aql/schema/index.js","webpack:///./packages/loot-core/src/server/aql/schema/run-query.js","webpack:///./packages/loot-core/src/server/aql/views.js","webpack:///./packages/loot-core/src/server/backups.js","webpack:///./packages/loot-core/src/server/budget/actions.js","webpack:///./packages/loot-core/src/server/budget/app.js","webpack:///./packages/loot-core/src/server/budget/base.js","webpack:///./packages/loot-core/src/server/budget/report.js","webpack:///./packages/loot-core/src/server/budget/rollover.js","webpack:///./packages/loot-core/src/server/budget/util.js","webpack:///./packages/loot-core/src/server/cloud-storage.js","webpack:///./packages/loot-core/src/server/config.js","webpack:///./packages/loot-core/src/server/db/index.js","webpack:///./packages/loot-core/src/server/db/mappings.js","webpack:///./packages/loot-core/src/server/db/sort.js","webpack:///./packages/loot-core/src/server/db/util.js","webpack:///./packages/loot-core/src/server/encryption-internals.js","webpack:///./packages/loot-core/src/server/encryption.js","webpack:///./packages/loot-core/src/server/errors.js","webpack:///./packages/loot-core/src/server/main-app.js","webpack:///./packages/loot-core/src/server/main.js","webpack:///./packages/loot-core/src/server/merkle.js","webpack:///./packages/loot-core/src/server/migrate/migrations.js","webpack:///./packages/loot-core/src/server/models.js","webpack:///./packages/loot-core/src/server/mutators.js","webpack:///./packages/loot-core/src/server/notes/app.js","webpack:///./packages/loot-core/src/server/perf.js","webpack:///./packages/loot-core/src/server/platform.js","webpack:///./packages/loot-core/src/server/polyfills.js","webpack:///./packages/loot-core/src/server/post.js","webpack:///./packages/loot-core/src/server/prefs.js","webpack:///./packages/loot-core/src/server/schedules/app.js","webpack:///./packages/loot-core/src/server/schedules/find-schedules.js","webpack:///./packages/loot-core/src/server/sheet.js","webpack:///./packages/loot-core/src/server/spreadsheet/globals.js","webpack:///./packages/loot-core/src/server/spreadsheet/graph-data-structure.js","webpack:///./packages/loot-core/src/server/spreadsheet/spreadsheet.js","webpack:///./packages/loot-core/src/server/spreadsheet/util.js","webpack:///./packages/loot-core/src/server/sync/encoder.js","webpack:///./packages/loot-core/src/server/sync/index.js","webpack:///./packages/loot-core/src/server/sync/make-test-message.js","webpack:///./packages/loot-core/src/server/sync/migrate.js","webpack:///./packages/loot-core/src/server/sync/proto/sync_pb.js","webpack:///./packages/loot-core/src/server/sync/repair.js","webpack:///./packages/loot-core/src/server/sync/reset.js","webpack:///./packages/loot-core/src/server/timestamp.js","webpack:///./packages/loot-core/src/server/tools/app.js","webpack:///./packages/loot-core/src/server/tracking/events.js","webpack:///./packages/loot-core/src/server/undo.js","webpack:///./packages/loot-core/src/server/update.js","webpack:///./packages/loot-core/src/server/util/budget-name.js","webpack:///./packages/loot-core/src/server/util/rschedule.js","webpack:///./packages/loot-core/src/shared/accounts.js","webpack:///./packages/loot-core/src/shared/async.js","webpack:///./packages/loot-core/src/shared/months.js","webpack:///./packages/loot-core/src/shared/query.js","webpack:///./packages/loot-core/src/shared/rules.js","webpack:///./packages/loot-core/src/shared/schedules.js","webpack:///./packages/loot-core/src/shared/transactions.js","webpack:///./packages/loot-core/src/shared/util.js","webpack:///external \"better-sqlite3\"","webpack:///external \"crypto\"","webpack:///external \"fs\"","webpack:///external \"node-fetch\"","webpack:///external \"node-libofx\"","webpack:///external \"path\"","webpack:///external \"stream\"","webpack:///external \"string_decoder\"","webpack:///external \"util\"","webpack:///external \"zlib\""],"names":["require","ProfileHelpers","MixpanelGroups","constructor","mp_instance","mixpanel","endpoint","set_once","group_key","group_id","prop","to","modifiers","callback","identifiers","$group_key","$group_id","_set","set","delete_group","_delete_profile","remove","data","_remove","union","_union","unset","_unset","exports","async_all","ensure_timestamp","MixpanelPeople","DEFAULT_CONFIG","test","debug","verbose","host","protocol","path","base64","str","btoa","Buffer","from","toString","create_client","token","config","Error","MAX_BATCH_SIZE","TRACK_AGE_LIMIT","metrics","send_request","options","content","JSON","stringify","method","toUpperCase","query_params","key","secret","request_options","headers","request","request_base","port","length","encoded","api_key","URLSearchParams","fetch","body","then","res","text","e","result","parse","status","error","ex","undefined","catch","console","log","message","send_event_request","event","properties","mp_lib","chunk","arr","size","chunks","i","total","push","slice","send_batch_requests","event_list","max_batch_size","Math","min","max_concurrent_requests","ceil","event_batches","request_batches","total_event_batches","total_request_batches","send_event_batch","batch","cb","map","time","send_next_request_batch","index","request_batch","errors","results","track","Date","now","track_batch","batch_options","import","import_batch","alias","distinct_id","identify","identified_id","anon_id","$identified_id","$anon_id","groups","people","set_config","Object","assign","split","Number","module","Client","warn","init","merge_modifiers","$distinct_id","increment","by","$add","entries","val","isNaN","parseFloat","append","value","$append","keys","forEach","track_charge","amount","$ignore_time","hasOwnProperty","$amount","$time","prototype","call","toISOString","clear_charges","delete_user","$ignore_alias","$ip","Base","$set","set_key","ip","$remove","Array","isArray","$union","merge_values","filter","v","$unset","requests","handler","done","err","l","floor","getTime","OccurrenceGenerator","args","timezone","maxDuration","firstDate","_firstDate","start","_run","next","dateAdapter","fromDateTime","lastDate","_lastDate","isInfinite","end","reverse","pipe","operators","reduce","prev","curr","base","occurrences","OccurrenceIterator","normalizeOccurrencesArgs","collections","CollectionIterator","normalizeCollectionsArgs","occursBetween","startInput","endInput","normalizeDateInput","hasDuration","excludeEnds","getMaxDuration","iterator","subtract","day","isBefore","isEqual","occursOn","rawArgs","normalizeOccursOnArgs","weekday","before","ArgumentError","after","add","date","get","skipToDate","getDifferenceBetweenWeekdays","granularity","isAfter","occursAfter","adapter","excludeStart","occursBefore","isAfterOrEqual","DateAdapterBase$1","excludeDates","normalizeRunArgs","dateInputToDateTime","normalizeDateInputToAdapter","dateInputToDateAdapter","normalizeRunOutput","normalizeDateTimeTimezone$1","isInteger","iterable","Symbol","occurrenceIterator","toArray","take","InfiniteLoopError","yieldArgs","normalizeDateOutput","Collection","dates","periodStart","periodEnd","weekStart","getPeriod","startDate","collectionIterator","collection","period","isBeforeOrEqual","skipEmptyPeriods","incrementPeriod","endGranularity","Operator","streams","stream","calculateIsInfinite","calculateHasDuration","IterableWrapper","generator","runArgs","processYieldArgs","every","s","streamsComparer","a","b","streamsReverseComparer","selectNextIterable","sort","shift","selectLastIterable","pop","AddOperator","_","wrappedStreams","input","some","streamsDuration","Calendar","schedules","schedule","count","Dates","adapters","datetimes","duration","toDateTime","findIndex","valueOf","splice","keepLocalTime","json","toJSON","fromJSON","fn","dateTimeSortComparer","dateCache","InvalidDateAdapterError","dateAdapterConfig","DateAdapterBase","_date","generators","name","isDate","_object","unimplementedError","fromDate","_options","_json","_datetime","DateTime","hasTimezoneSupport","DateAdapter","WEEKDAYS","MILLISECONDS_IN_SECOND","MILLISECONDS_IN_MINUTE","MILLISECONDS_IN_HOUR","MILLISECONDS_IN_DAY","MILLISECONDS_IN_WEEK","InvalidDateTimeError","assertIsValid","UTC","year","month","hour","minute","second","millisecond","fromDateAdapter","_end","object","assertSameTimeZone","isOccurring","unit","unshift","forkDateTime","addUTCYears","addUTCMonths","addUTCWeeks","addUTCDays","addUTCHours","addUTCMinutes","addUTCSeconds","addUTCMilliseconds","subUTCYears","subUTCMonths","subUTCWeeks","subUTCDays","subUTCHours","subUTCMinutes","subUTCSeconds","subUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCYearDay","getUTCDay","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","setUTCFullYear","monthLength","setUTCDate","setUTCMonth","setUTCHours","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","opt","setDateToStartOfWeek","setDateToEndOfWeek","x","y","wkst","orderedWeekdays","indexOf","wkdays","shiftArray","array","block","getDaysInFebruary","isLeapYear","diff","toInteger","NaN","int","addMilliseconds","dirtyDate","dirtyAmount","arguments","TypeError","timestamp","desiredMonth","dateWithDesiredMonth","daysInMonth","days","normalizeDateTimeTimezone","RuleBase","recurrenceRules","cloneRuleOptions","normOptions","normalizeRuleOptions","RecurrenceRulesIterator","recurrenceRulesReducer","Rule","tzoptions","DateTime$1","ScheduleBase","occurrenceStream","SubtractOperator","inclusion","exclusion","cycleStreams","iterateExclusion","unique","UniqueOperator","lastValue","Schedule","rrules","exrules","arg","ruleArgs","rule","rdates","exdates","intersection","IntersectionOperator","maxFailedIterations","defaultMaxFailedIterations","hasEndDate","cycleStreams$1","iteration","maxIterations","lastValidDate","last","DurationIterableWrapper","workingValue","MergeDurationOperatorError","mergeDuration","MergeDurationOperator","reverseRun","forwardRun","checkFromStart","checkFromEnd","SplitDurationOperatorError","splitDuration","SplitDurationOperator","splitFn","datesBucket","splitDate","selectedDate","bucketIndex","selectedBucketIndex","dateIndex","selectedDateIndex","bucket","dateShouldComeNext","datePastEnd","datePastSkipToDate","valid","uniqDateTimes","Map","values","abs","getDaysInYear","numberSortComparer","freqToGranularity","freq","cloneJSON","RuleOptionError","normalizeDefaultOptions","recurrenceModules","startOptions","mod","normalizeOptions","obj","RecurrenceRuleError","ValidDateTime","InvalidDateTime","rules","iterate","iterateWithReverseCount","iterateWithCount","normalizeDateTimeArgs","startingDate","nextDate","runRules","isDatePastEnd","run","RecurrenceRule","processor","FrequencyRule","initDate","intervalUnit","frequency","firstIntervalStartDate","normalizedStartDate","intervalStartDate","intervalEndDate","normalizedEndDate","skipToInterval","validateDate","dateIsWithinInterval","setToCurrentInterval","intervalDifference","intervalDifferenceBetweenDates","first","interval","direction","difference","intervalDuration","months","RevFrequencyRule","FREQUENCIES","FrequencyRuleModule","byMillisecondOfSecond","norm","includes","deps","ruleOptionFilled","option","freqCache","WeakMap","RecurrenceRuleBase","has","RevRecurrenceRuleBase","RevByTimeOfUnitRule","currentTime","baseGranularity","RevByMillisecondOfSecondRule","ByTimeOfUnitRule","ByMillisecondOfSecondRule","ByMillisecondOfSecondRuleModule","num","RevBySecondOfMinuteRule","bySecondOfMinute","BySecondOfMinuteRule","BySecondOfMinuteRuleModule","RevByMinuteOfHourRule","byMinuteOfHour","ByMinuteOfHourRule","ByMinuteOfHourRuleModule","RevByHourOfDayRule","byHourOfDay","ByHourOfDayRule","ByHourOfDayRuleModule","getNextWeekday","getNthWeekdayOfMonth","nth","ByDayOfMonthRule","normalizedByDayOfMonth","normalizeByDayOfMonth","byDayOfMonth","byDayOfWeek","currentDay","nextMonth","lengthOfMonth","filteredByDayOfMonth","entry","nthWeekdayOfMonth","Set","RevByDayOfMonthRule","ByDayOfMonthRuleModule","byDayOfYear","getNthWeekdayOfYear","getPreviousWeekday","RevByDayOfWeekRule","byMonthOfYear","expandYearly","expandMonthly","expand","getPrevWeekdaysOfYear","getPrevWeekdaysOfMonth","normalizedNthWeekdaysOfYear","normalizedNextWeekdays","normalizedNthWeekdaysOfMonth","ByDayOfWeekRule","getNextWeekdaysOfYear","getNextWeekdaysOfMonth","ByDayOfWeekRuleModule","invalidWeeday","find","RevByMonthOfYearRule","currentMonth","ByMonthOfYearRule","ByMonthOfYearRuleModule","ICAL_RULES","serialize","opts","type","nested","serializeDataToJSON","ParseJSONError","registerJSONSerializerFn","SerializeJSONError","JSON_FN_MAP","gen","StandardDateAdapter","datetime","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","root","lib","version","settings","currency","symbol","format","decimal","thousand","precision","grouping","number","nativeMap","nativeIsArray","isString","charCodeAt","substr","isObject","defaults","defs","context","j","checkPrecision","round","checkCurrencyFormat","match","pos","neg","replace","zero","unformat","regex","RegExp","unformatted","toFixed","exponentialForm","rounded","finalResult","formatNumber","usePrecision","negative","parseInt","formatMoney","formats","useFormat","formatColumn","list","padAfterSymbol","maxLength","formatted","fVal","join","accounting","Utils","pth","ZipEntry","ZipFile","get_Bool","def","get_Str","defaultOptions","noSort","readEntries","Constants","NONE","fs","inBuffer","create","Uint8Array","isBuffer","BUFFER","filetools","existsSync","FILE","filename","readFileSync","Errors","INVALID_FILENAME","_zip","canonical","sanitize","getEntry","item","entryName","header","fixPath","zipPath","posix","normalize","sep","readFile","pass","getData","readFileAsync","getDataAsync","readAsText","encoding","readAsTextAsync","deleteFile","deleteEntry","addZipComment","comment","getZipComment","addZipEntryComment","getZipEntryComment","updateFile","setData","addLocalFile","localPath","zipName","p","_attr","statSync","addFile","FILE_NOT_FOUND","addLocalFolder","rx","items","findFiles","self","filepath","relative","stats","isFile","alloc","addLocalFolderAsync","open","code","stat","er0","er1","addLocalFolderPromise","props","Promise","resolve","reject","attr","update","isStat","Stats","mtime","fileattr","isDirectory","isWin","unix","mode","setEntry","getEntries","getEntryCount","extractEntryTo","targetPath","maintainEntryPath","overwrite","keepOriginalPermission","outFileName","NO_ENTRY","target","basename","children","getEntryChildren","child","CANT_EXTRACT_FILE","childName","fileAttr","writeFileTo","CANT_OVERRIDE","extractAllTo","NO_ZIP","makeDir","utimesSync","extractAllToAsync","getPath","getError","msg","file","dirEntries","fileEntries","dirPath","dirAttr","chmodSync","er","filePath","err_1","writeFileToAsync","succ","utimes","err_2","delete","writeZip","targetFileName","zipData","compressToBuffer","ok","writeZipPromise","perm","toBufferPromise","ret","toAsyncBuffer","toBuffer","onSuccess","onFail","onItemStart","onItemEnd","_verMade","_version","_flags","_method","_time","_crc","_compressedSize","_size","_fnameLen","_extraLen","_comLen","_diskStart","_inattr","_offset","FLG_EFS","_dataHeader","setTime","made","flags","STORED","DEFLATED","crc","max","compressedSize","fileNameLength","extraLength","commentLength","diskNumStart","inAttr","offset","encripted","entryHeaderSize","CENHDR","realDataOffset","LOCHDR","fnameLen","extraLen","dataHeader","loadDataHeaderFromBinary","readUInt32LE","LOCSIG","INVALID_LOC","readUInt16LE","LOCVER","LOCFLG","LOCHOW","LOCTIM","LOCCRC","LOCSIZ","LOCLEN","LOCNAM","LOCEXT","loadFromBinary","CENSIG","INVALID_CEN","CENVEM","CENVER","CENFLG","CENHOW","CENTIM","CENCRC","CENSIZ","CENLEN","CENNAM","CENEXT","CENCOM","CENDSK","CENATT","CENATX","CENOFF","dataHeaderToBinary","writeUInt32LE","writeUInt16LE","entryHeaderToBinary","fill","bytes","nr","methodToString","EntryHeader","MainHeader","_volumeEntries","_totalEntries","_commentLength","diskEntries","totalEntries","mainHeaderSize","ENDHDR","ENDSIG","ZIP64HDR","ZIP64SIG","INVALID_END","ENDSUB","ENDTOT","ENDSIZ","ENDOFF","ENDCOM","readBigUInt64LE","ZIP64SUB","ZIP64TOT","ZIP64SIZ","ZIP64OFF","toBinary","len","offs","inbuf","zlib","chunkSize","deflate","deflateRawSync","deflateAsync","tmp","createDeflateRaw","parts","on","buf","written","part","copy","Deflater","Inflater","ZipCrypto","inflate","inflateRawSync","inflateAsync","createInflateRaw","randomFillSync","crctable","Uint32Array","t","uMul","imul","crc32update","pCrc32","bval","genSalt","node","salt","random","Initkeys","pw","updateKeys","byteValue","k","make_decrypter","pwd","c","make_encrypter","decrypt","decrypter","_salter","encrypt","oldlike","encrypter","EXTSIG","EXTHDR","EXTCRC","EXTSIZ","EXTLEN","END64HDR","END64SIG","END64START","END64OFF","END64NUMDISKS","ZIP64LEAD","ZIP64SIZE","ZIP64VEM","ZIP64VER","ZIP64DSK","ZIP64DSKDIR","ZIP64SIZB","ZIP64EXTRA","SHRUNK","REDUCED1","REDUCED2","REDUCED3","REDUCED4","IMPLODED","ENHANCED_DEFLATED","PKWARE","BZIP2","LZMA","IBM_TERSE","IBM_LZ77","AES_ENCRYPT","FLG_ENC","FLG_COMP1","FLG_COMP2","FLG_DESC","FLG_ENH","FLG_PATCH","FLG_STR","FLG_MSK","EF_ID","EF_SIZE","ID_ZIP64","ID_AVINFO","ID_PFS","ID_OS2","ID_NTFS","ID_OPENVMS","ID_UNIX","ID_FORK","ID_PATCH","ID_X509_PKCS7","ID_X509_CERTID_F","ID_X509_CERTID_C","ID_STRONGENC","ID_RECORD_MGT","ID_X509_PKCS7_RL","ID_IBM1","ID_IBM2","ID_POSZIP","EF_ZIP64_OR_32","EF_ZIP64_OR_16","EF_ZIP64_SUNCOMP","EF_ZIP64_SCOMP","EF_ZIP64_RHO","EF_ZIP64_DSN","NO_DATA","BAD_CRC","FILE_IN_THE_WAY","UNKNOWN_METHOD","AVAIL_DATA","INVALID_DISTANCE","TO_MANY_CODES","INVALID_REPEAT_LEN","INVALID_REPEAT_FIRST","INCOMPLETE_CODES","INVALID_DYN_DISTANCE","INVALID_CODES_LEN","INVALID_STORE_BLOCK","INVALID_BLOCK_TYPE","DIRECTORY_CONTENT_ERROR","NOT_IMPLEMENTED","INVALID_FORMAT","_path","_obj","newAttr","_stat","directory","readonly","hidden","executable","atime","readOnly","decodeAttributes","encodeAttributes","isReadOnly","isHidden","isExecutable","mTime","aTime","process","versions","originalFs","FileAttr","fsystem","platform","is_Obj","crcTable","folder","mkdirSync","fpath","resolvedPath","dirname","fd","openSync","writeSync","closeSync","exists","exist","chmod","write","close","findSync","dir","pattern","recursive","files","readdirSync","concat","getAttributes","setAttributes","byte","crc32","genCRCTable","off","safeSuffix","prefix","buffer","swap64","Headers","Methods","_entryHeader","_entryName","_comment","_isDirectory","uncompressedData","_extra","getCompressedDataFromZip","crc32OK","decompress","async","compressedData","inflater","compress","deflater","deflated","readUInt64LE","parseExtra","signature","parseZip64ExtendedInformation","rawEntryName","lastChar","extra","n","getCompressedData","getCompressedDataAsync","changed","packHeader","addpos","entryList","entryTable","mainHeader","loadedEntries","readMainHeader","iterateEntries","readNow","endStart","endOffset","commentEnd","sortEntries","toLowerCase","localeCompare","_self","zipEntry","dataBlock","entryHeaders","totalSize","dindex","entryNameLen","postHeader","dataLength","entryHeader","outBuffer","mh","compress2Buffer","entryLists","ArraySpeciesCreate","Call","CreateDataPropertyOrThrow","Get","HasProperty","IsCallable","LengthOfArrayLike","ToBoolean","ToObject","ToString","callBound","boxedString","splitString","strSplit","callbackfn","O","thisArg","A","Pk","kPresent","kValue","selected","define","RequireObjectCoercible","implementation","getPolyfill","polyfill","shim","$slice","bound","apply","arrayMethodBoxesProperly","shimArrayPrototypeMap","availableTypedArrays","typedArray","global","GetIntrinsic","callBind","$indexOf","callBoundIntrinsic","allowMissing","intrinsic","bind","$apply","$call","$reflectApply","$gOPD","$defineProperty","$max","originalFunction","func","desc","configurable","applyBind","charenc","utf8","stringToBytes","bin","unescape","encodeURIComponent","bytesToString","decodeURIComponent","escape","String","fromCharCode","base64map","crypt","rotl","rotr","endian","randomBytes","bytesToWords","words","wordsToBytes","bytesToHex","hex","hexToBytes","bytesToBase64","triplet","charAt","base64ToBytes","imod4","pow","ResizeableBuffer","prepend","resize","clone","reset","Transform","tab","nl","np","cr","space","bom_utf8","Parser","readableObjectMode","underscore","bom","CsvError","fnCastField","cast","cast_date","fnFirstLineToHeaders","columns","normalizeColumnsArray","columns_duplicates_to_array","delimiter_json","delimiter","from_line","info","max_record_size","objname","on_record","quote","raw","record_delimiter","rd","relax","relax_column_count","relax_column_count_less","relax_column_count_more","skip_empty_lines","skip_lines_with_empty_values","skip_lines_with_error","rtrim","ltrim","trim","to_line","comment_lines","empty_lines","invalid_field_length","lines","records","state","bomSkipped","castField","commenting","enabled","escaping","escapeIsQuote","expectedRecordLength","field","firstLineToHeaders","previousBuf","quoting","stop","rawBuffer","record","recordHasError","record_length","recordDelimiterMaxLength","trimChars","wasQuoting","wasRowDelimiter","_transform","__parse","_flush","nextBuf","compare","bufLen","__needMoreData","record_delimiterCount","__autoDiscoverRowDelimiter","chr","nextChr","isNextChrTrimable","__isCharTrimable","isNextChrComment","__compareBytes","isNextChrDelimiter","__isDelimiter","isNextChrRowDelimiter","__isRecordDelimiter","__error","__context","recordDelimiterLength","skipCommentLine","__resetField","__resetRow","errField","__onField","errRecord","__onRow","commentCount","delimiterLength","lappend","rappend","recordLength","isRecordEmpty","__firstLineToColumns","disabled","__push","normalizedHeaders","trimRight","__cast","f","isColumns","__isFloat","sourceBuf","targetBuf","firtByte","sourceLength","numOfCharLeft","requiredLength","loop1","del","rdLength","emit","column","argument","parser","read","setImmediate","contexts","captureStackTrace","normalizedColumns","err1","err2","Stringifier","castPath","charCodeOfDot","getTag","isKey","isSymbol","reEscapeChar","reIsDeepProp","reIsPlainProp","rePropName","stringToPath","toKey","util","stringifier","nextTick","d","base1","base2","base3","base4","isRegExp","quoted_match","ref","writableObjectMode","quoted","quoted_empty","quoted_string","eof","normalize_columns","bool","boolean","string","chunkIsHeader","containsEscape","containsQuote","containsRowDelimiter","containsdelimiter","csvrecord","m","quotedMatch","quotedString","ref1","regexp","shouldQuote","expression","subString","INFINITY","StringDecoder","decoder","localeCurrency","currencies","localeFormats","defaultCurrency","thousandsSeparator","decimalSeparator","symbolOnLeft","spaceBetweenAmountAndSymbol","decimalDigits","defaultLocaleFormat","formatMapping","locale","getCurrency","localeMatch","exec","language","region","localeFormat","findCurrency","isUndefined","currencyCode","__this","that","limit","thisLength","thatLength","matrix","prepare","this_i","that_j","cost","steps","similarity","addLeadingZeros","targetLength","sign","output","dirtyObject","property","cloneObject","dayPeriodEnum","am","pm","midnight","noon","morning","afternoon","evening","night","formatters","G","localize","era","width","signedYear","ordinalNumber","lightFormatters","Y","signedWeekYear","getUTCWeekYear","weekYear","twoDigitYear","R","isoWeekYear","getUTCISOWeekYear","u","Q","quarter","q","M","L","w","week","getUTCWeek","I","isoWeek","getUTCISOWeek","D","dayOfYear","getUTCDayOfYear","E","dayOfWeek","localDayOfWeek","weekStartsOn","isoDayOfWeek","hours","dayPeriodEnumValue","dayPeriod","B","h","H","K","S","numberOfDigits","milliseconds","fractionalSeconds","X","_localize","originalDate","_originalDate","timezoneOffset","getTimezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","formatTimezoneShort","z","T","dirtyDelimiter","absOffset","minutes","dateLongFormatter","formatLong","timeLongFormatter","dateTimeLongFormatter","matchResult","datePattern","timePattern","dateTimeFormat","dateTime","longFormatters","P","getTimezoneOffsetInMilliseconds","baseTimezoneOffset","setSeconds","millisecondsPartOfTimezoneOffset","toDate","startOfYearTimestamp","startOfUTCISOWeek","startOfUTCISOWeekYear","fourthOfJanuaryOfNextYear","startOfNextYear","fourthOfJanuaryOfThisYear","startOfThisYear","startOfUTCWeek","startOfUTCWeekYear","dirtyOptions","localeFirstWeekContainsDate","firstWeekContainsDate","defaultFirstWeekContainsDate","RangeError","firstWeekOfNextYear","firstWeekOfThisYear","protectedTokens","isProtectedToken","throwProtectedError","setUTCDay","dirtyDay","localeWeekStartsOn","defaultWeekStartsOn","remainder","dayIndex","setUTCISODay","setUTCISOWeek","dirtyISOWeek","setUTCWeek","dirtyWeek","fourthOfJanuary","firstWeek","dirtyNumber","addDays","setDate","addHours","addISOWeekYears","setISOWeekYear","getISOWeekYear","addMinutes","addMonths","setFullYear","setHours","getDaysInMonth","setMonth","addQuarters","addSeconds","addWeeks","addYears","areIntervalsOverlapping","dirtyIntervalLeft","dirtyIntervalRight","intervalLeft","intervalRight","leftStartTime","leftEndTime","rightStartTime","rightEndTime","closestIndexTo","dirtyDateToCompare","dirtyDatesArray","dateToCompare","timeToCompare","datesArray","minDistance","currentDate","distance","closestTo","compareAsc","dirtyDateLeft","dirtyDateRight","dateLeft","dateRight","compareDesc","differenceInCalendarDays","startOfDayLeft","startOfDay","startOfDayRight","timestampLeft","timestampRight","differenceInCalendarISOWeekYears","differenceInCalendarISOWeeks","startOfISOWeekLeft","startOfISOWeek","startOfISOWeekRight","differenceInCalendarMonths","yearDiff","monthDiff","differenceInCalendarQuarters","quarterDiff","getQuarter","differenceInCalendarWeeks","startOfWeekLeft","startOfWeek","startOfWeekRight","differenceInCalendarYears","differenceInDays","isLastDayNotFull","differenceInHours","differenceInMilliseconds","differenceInISOWeekYears","subISOWeekYears","isLastISOWeekYearNotFull","differenceInMinutes","differenceInMonths","isLastMonthNotFull","differenceInQuarters","differenceInSeconds","differenceInWeeks","differenceInYears","isLastYearNotFull","eachDayOfInterval","dirtyInterval","endDate","endTime","step","eachWeekOfInterval","startDateWeek","endDateWeek","weeks","currentWeek","eachWeekendOfInterval","dateInterval","weekends","isWeekend","isSunday","eachWeekendOfMonth","startOfMonth","endOfMonth","eachWeekendOfYear","startOfYear","endOfYear","endOfDay","endOfDecade","decade","endOfHour","setMinutes","endOfISOWeek","endOfWeek","endOfISOWeekYear","setMilliseconds","endOfMinute","endOfQuarter","endOfSecond","getDay","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","dirtyFormatStr","formatStr","defaultLocale","isValid","utcDate","subMilliseconds","formatterOptions","substring","firstCharacter","longFormatter","cleanEscapedString","formatter","awareOfUnicodeTokens","MINUTES_IN_DAY","MINUTES_IN_ALMOST_TWO_DAYS","MINUTES_IN_MONTH","MINUTES_IN_TWO_MONTHS","formatDistance","dirtyBaseDate","comparison","localizeOptions","addSuffix","Boolean","seconds","offsetInSeconds","includeSeconds","nearestMonth","monthsSinceStartOfYear","years","MINUTES_IN_YEAR","formatDistanceStrict","roundingMethod","roundingMethodFn","formatRelative","baseDate","utcBaseDate","fromUnixTime","dirtyUnixTime","unixTime","dayOfMonth","getDayOfYear","monthIndex","lastDayOfMonth","getDecade","getISODay","getISOWeek","startOfISOWeekYear","getISOWeeksInYear","thisYear","nextYear","getOverlappingDaysInIntervals","isOverlapping","overlapStartDate","overlapEndDate","differenceInMs","getUnixTime","getWeek","startOfWeekYear","getWeekOfMonth","startWeekDay","currentWeekDay","startWeekDayWithOptions","getWeekYear","getWeeksInMonth","getYear","dirtyLeftDate","dirtyRightDate","isFirstDayOfMonth","isFriday","isLastDayOfMonth","isMonday","isSameDay","dateLeftStartOfDay","dateRightStartOfDay","isSameHour","dateLeftStartOfHour","startOfHour","dateRightStartOfHour","isSameISOWeek","isSameWeek","isSameISOWeekYear","dateLeftStartOfYear","dateRightStartOfYear","isSameMinute","dateLeftStartOfMinute","startOfMinute","dateRightStartOfMinute","isSameMonth","isSameQuarter","dateLeftStartOfQuarter","startOfQuarter","dateRightStartOfQuarter","isSameSecond","dateLeftStartOfSecond","startOfSecond","dateRightStartOfSecond","dateLeftStartOfWeek","dateRightStartOfWeek","isSameYear","isSaturday","isThursday","isTuesday","isWednesday","isWithinInterval","startTime","lastDayOfDecade","lastDayOfISOWeek","lastDayOfWeek","lastDayOfISOWeekYear","lastDayOfQuarter","lastDayOfYear","lightFormat","buildFormatLongFn","defaultWidth","buildLocalizeFn","dirtyIndex","valuesArray","formattingValues","defaultFormattingWidth","argumentCallback","buildMatchFn","dirtyString","matchPattern","matchPatterns","defaultMatchWidth","matchedString","parsePatterns","defaultParseWidth","findKey","valueCallback","rest","predicate","buildMatchPatternFn","parseResult","parsePattern","formatDistanceLocale","lessThanXSeconds","one","other","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","dateFormats","full","long","medium","short","timeFormats","dateTimeFormats","formatRelativeLocale","lastWeek","yesterday","today","tomorrow","nextWeek","eraValues","narrow","abbreviated","wide","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","rem100","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","any","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","numericPatterns","hour23h","hour24h","hour11h","hour12h","singleDigit","twoDigits","threeDigits","fourDigits","anyDigitsSigned","singleDigitSigned","twoDigitsSigned","threeDigitsSigned","fourDigitsSigned","timezonePatterns","basicOptionalMinutes","basic","basicOptionalSeconds","extended","extendedOptionalSeconds","parseNumericPattern","parseTimezonePattern","parseAnyDigitsSigned","parseNDigits","parseNDigitsSigned","dayPeriodEnumToHours","enumValue","normalizeTwoDigitYear","currentYear","isCommonEra","absCurrentYear","rangeEnd","rangeEndCentury","isPreviousCentury","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP_YEAR","isLeapYearIndex","parsers","priority","isTwoDigitYear","validate","normalizedTwoDigitYear","firstWeekOfYear","wholeWeekDays","isPM","timestampIsSet","TIMEZONE_UNIT_PRIORITY","notWhitespaceRegExp","dirtyDateString","dirtyFormatString","dateString","formatString","subFnOptions","setters","dateToSystemTimezone","tokens","uniquePrioritySetters","setter","setterArray","convertedDate","DEFAULT_ADDITIONAL_DIGITS","patterns","dateTimeDelimiter","timeZoneDelimiter","dateRegex","timeRegex","timezoneRegex","parseISO","additionalDigits","dateStrings","splitDateString","parseYearResult","parseYear","parseDate","restDateString","parseTime","parseTimezone","fullTime","fullTimeDate","fullTimeDateNextDay","offsetDiff","timeString","captures","century","isWeekDate","parseDateUnit","validateWeekDate","dayOfISOWeekYear","validateDayOfYearDate","parseTimeUnit","validateTime","timezoneString","validateTimezone","fourthOfJanuaryDay","daysInMonths","_year","_hours","roundToNearestMinutes","nearestTo","roundedMinutes","remainderMinutes","addedMinutes","dirtyDayOfMonth","setDay","setDayOfYear","dirtyDayOfYear","dirtyHours","setISODay","setISOWeek","dirtyISOWeekYear","dirtyMilliseconds","dirtyMinutes","dirtyMonth","setQuarter","dirtyQuarter","oldQuarter","dirtySeconds","setWeek","setWeekYear","dirtyWeekYear","setYear","dirtyYear","startOfDecade","cleanDate","subDays","subHours","subMinutes","subMonths","subQuarters","subSeconds","subWeeks","subYears","argStr","stack","objectKeys","isArguments","is","isRegex","whichBoxedPrimitive","whichCollection","getIterator","getSideChannel","whichTypedArray","$getTime","gPO","getPrototypeOf","$objToString","$Set","$mapHas","$mapGet","$mapSize","$setAdd","$setDelete","$setHas","$setSize","setHasEqualElement","val1","channel","internalDeepEqual","findLooseMatchingPrimitives","prim","mapMightHaveLoosePrim","altValue","curB","looseOpts","strict","setMightHaveLoosePrim","mapHasEqualEntry","key1","item1","key2","actual","expected","actualBoxed","expectedBoxed","hasActual","hasExpected","sentinel","objEquiv","setEquiv","iA","iB","resultA","resultB","mapEquiv","item2","aIsArray","bIsArray","aIsError","bIsError","aIsRegex","bIsRegex","source","aIsDate","bIsDate","aIsBuffer","bIsBuffer","ka","kb","aCollection","bCollection","deepEqual","hasSymbols","toStr","origDefineProperty","defineProperty","isFunction","arePropertyDescriptorsSupported","enumerable","supportsDescriptors","writable","defineProperties","predicates","getOwnPropertySymbols","$Array","$species","$TypeError","IsArray","IsConstructor","IsInteger","Type","originalArray","C","F","V","argumentsList","DefineOwnProperty","FromPropertyDescriptor","OrdinaryGetOwnProperty","IsDataDescriptor","IsExtensible","IsPropertyKey","SameValue","CreateDataProperty","oldDesc","extensible","immutable","success","isPropertyDescriptor","IsAccessorDescriptor","ToPropertyDescriptor","DefinePropertyOrThrow","Desc","assertRecord","inspect","$construct","isConstructorMarker","badArrayLike","$Object","isPrimitive","$preventExtensions","preventExtensions","$isExtensible","isExtensible","$isNaN","$isFinite","absValue","$match","hasRegExpMatcher","IsRegExp","ToLength","$isEnumerable","arrayLength","regexLastIndex","ES5ToInteger","ToNumber","ToInteger","MAX_SAFE_INTEGER","$Number","$RegExp","$parseInteger","regexTester","$strSlice","isBinary","isOctal","isInvalidHexLiteral","nonWS","nonWSregex","hasNonWS","ws","trimRegex","$replace","$trim","ToPrimitive","trimmed","toPrimitive","Obj","getter","$String","ES5Type","$abs","$floor","CheckObjectCoercible","optMessage","$sign","$SyntaxError","allowed","isData","IsAccessor","recordType","argumentName","isFinite","Infinity","IsPropertyDescriptor","ES","$Math","$test","properlyBoxed","properlyBoxesNonStrict","properlyBoxesStrict","threwException","__","$iterator","$Map","$arrayPush","$charCodeAt","$stringSlice","advanceStringIndex","getArrayIterator","arraylike","getNonCollectionIterator","noPrimordialCollections","nextIndex","isMap","isSet","$mapForEach","$setForEach","$mapIterator","$setIterator","getStopIterationIterator","$mapAtAtIterator","$setAtAtIterator","getCollectionIterator","isCallable","ordinaryToPrimitive","OrdinaryToPrimitive","hint","methodNames","GetMethod","exoticToPrim","ES5internalSlots","actualHint","methods","hasOwn","ctx","ERROR_MESSAGE","funcType","binder","boundLength","boundArgs","Function","Empty","SyntaxError","$Function","getEvalledConstructor","expressionSyntax","getOwnPropertyDescriptor","throwTypeError","ThrowTypeError","callee","calleeThrows","gOPDthrows","getProto","__proto__","needsEval","TypedArray","INTRINSICS","AggregateError","ArrayBuffer","Atomics","BigInt","DataView","decodeURI","encodeURI","eval","EvalError","Float32Array","Float64Array","FinalizationRegistry","Int8Array","Int16Array","Int32Array","Proxy","ReferenceError","Reflect","SharedArrayBuffer","Uint8ClampedArray","Uint16Array","URIError","WeakRef","WeakSet","doEval","LEGACY_ALIASES","$concat","$spliceApply","getBaseIntrinsic","intrinsicName","intrinsicBaseName","intrinsicRealName","skipFurtherCaching","isOwn","$jscomp","scope","findInternal","ASSUME_ES5","ASSUME_NO_NATIVE_MAP","ASSUME_NO_NATIVE_SET","SIMPLE_FROUND_POLYFILL","getGlobal","window","checkStringArgs","g","COMPILED","goog","isDef","isBoolean","isNumber","exportPath_","execScript","CLOSURE_UNCOMPILED_DEFINES","CLOSURE_DEFINES","nodeType","FEATURESET_YEAR","DEBUG","LOCALE","TRUSTED_SITE","STRICT_MODE_COMPATIBLE","DISALLOW_TEST_ONLY_CODE","ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING","provide","isInModuleLoader_","isProvided_","constructNamespace_","implicitNamespaces_","lastIndexOf","getObjectByName","getScriptNonce","getScriptNonce_","document","cspNonce_","NONCE_PATTERN_","querySelector","nonce","getAttribute","VALID_MODULE_RE_","search","isInGoogModuleLoader_","moduleLoaderState_","moduleName","getInternal_","loadedModules_","ModuleType","ES6","GOOG","isInEs6ModuleLoader_","getCurrentModulePath","declareLegacyNamespace","declareModuleId","moduleId","setTestOnly","forwardDeclare","isDefAndNotNull","globalize","addDependency","DEPENDENCIES_ENABLED","debugLoader_","ENABLE_DEBUG_LOADER","logToConsole_","requested","load_","requireType","basePath","nullFunction","abstractMethod","addSingletonGetter","instance_","getInstance","instantiatedSingletons_","LOAD_MODULE_USING_EVAL","SEAL_MODULE_EXPORTS","TRANSPILE","ASSUME_ES_MODULES_TRANSPILED","TRANSPILE_TO_LANGUAGE","TRANSPILER","hasBadLetScoping","useSafari10Workaround","workaroundSafari10EvalBug","loadModule","loadModuleFromSource_","seal","normalizePath_","loadFileSync_","CLOSURE_LOAD_FILE_SYNC","XMLHttpRequest","send","responseText","transpile_","transpile","$gwtExport","typeOf","propertyIsEnumerable","isNull","isArrayLike","isDateLike","getUid","UID_PROPERTY_","uidCounter_","hasUid","removeUid","removeAttribute","getHashCode","removeHashCode","bindNative_","bindJs_","partial","mixin","globalEval","evalWorksForGlobals_","_evalTest_","createElement","defer","appendChild","createTextNode","head","removeChild","getCssName","cssNameMapping_","cssNameMappingStyle_","CLOSURE_CSS_NAME_MAP_FN","setCssNameMapping","CLOSURE_CSS_NAME_MAPPING","getMsg","html","getMsgWithFallback","exportSymbol","exportProperty","inherits","superClass_","caller","defineClass","statics","createSealingConstructor_","applyProperties_","SEAL_CLASS_INSTANCES","isUnsealable_","UNSEALABLE_CONSTRUCTOR_PROPERTY_","OBJECT_PROTOTYPE_FIELDS_","tagUnsealableClass","inHtmlDocument_","isDocumentLoading_","attachEvent","readyState","findBasePath_","CLOSURE_BASE_PATH","currentScript","getElementsByTagName","src","Transpiler","requiresTranspilation_","transpilationTarget_","createRequiresTranspilation_","es3","navigator","userAgent","needsTranspile","transpiler_","protectScriptTag_","DebugLoader_","dependencies_","idToPath_","written_","loadingDeps_","depsToLoad_","paused_","factory_","DependencyFactory","deferredCallbacks_","deferredQueue_","bootstrap","setTimeout","getPathFromDeps_","onLoad","loadClosureDeps","createDependency","loadDeps_","areDepsLoaded_","requires","setDependencyFactory","loading_","pause","resume","resume_","loaded","loaded_","pending","setModuleState","registerEs6ModuleExports","registerGoogModuleExports","clearModuleState","defer_","areDepsLoaded","load","pause_","LoadController","Dependency","relativePath","provides","loadFlags","loadCallbacks_","getPathName","callbackMap_","registerCallback_","unregisterCallback_","callback_","CLOSURE_IMPORT_SCRIPT","IS_OLD_IE_","TRUSTED_TYPES_POLICY_","createHTML","setAttribute","onreadystatechange","onload","createScriptURL","Es6ModuleDependency","textContent","createScript","TransformedDependency","contents_","lazyFetch_","transform","ensure","TranspiledDependency","transpiler","PreTranspiledEs6ModuleDependency","GoogModuleDependency","needsTranspile_","atob","all","lang","CLOSURE_NO_DEPS","TRUSTED_TYPES_POLICY_NAME","identity_","createTrustedTypesPolicy","TrustedTypes","createPolicy","createURL","jspb","BinaryConstants","ConstBinaryMessage","BinaryMessage","FieldType","INVALID","DOUBLE","FLOAT","INT64","UINT64","INT32","FIXED64","FIXED32","BOOL","STRING","GROUP","MESSAGE","BYTES","UINT32","ENUM","SFIXED32","SFIXED64","SINT32","SINT64","FHASH64","VHASH64","WireType","VARINT","DELIMITED","START_GROUP","END_GROUP","FieldTypeToWireType","INVALID_FIELD_NUMBER","FLOAT32_EPS","FLOAT32_MIN","FLOAT32_MAX","FLOAT64_EPS","FLOAT64_MIN","FLOAT64_MAX","TWO_TO_20","TWO_TO_23","TWO_TO_31","TWO_TO_32","TWO_TO_52","TWO_TO_63","TWO_TO_64","ZERO_HASH","dom","NodeType","ELEMENT","ATTRIBUTE","TEXT","CDATA_SECTION","ENTITY_REFERENCE","ENTITY","PROCESSING_INSTRUCTION","COMMENT","DOCUMENT","DOCUMENT_TYPE","DOCUMENT_FRAGMENT","NOTATION","reportErrorToServer","asserts","ENABLE_ASSERTS","AssertionError","subs_","messagePattern","DEFAULT_ERROR_HANDLER","errorHandler_","doAssertFailure_","setErrorHandler","assert","assertExists","fail","assertNumber","assertString","assertFunction","assertObject","assertArray","assertBoolean","assertElement","assertInstanceof","getType_","assertFinite","assertObjectPrototypeIsIntact","displayName","NATIVE_ARRAY_PROTOTYPES","ASSUME_NATIVE_FUNCTIONS","peek","forEachRight","reduceRight","findRight","findIndexRight","contains","isEmpty","clear","insert","insertAt","insertArrayAt","insertBefore","removeAt","removeLast","removeIf","removeAllIf","extend","removeDuplicates","binarySearch","binarySearch_","defaultCompare","binarySelect","stableSort","sortByKey","sortObjectsByKey","isSorted","equals","defaultCompareEquality","compare3","inverseDefaultCompare","binaryInsert","binaryRemove","toObject","range","repeat","flatten","rotate","moveItem","zip","shuffle","copyByIndex","concatMap","stringToByteArray","byteArrayToString","byteArrayToHex","hexToByteArray","stringToUtf8ByteArray","utf8ByteArrayToString","xorByteArray","internal","startsWith","endsWith","caseInsensitiveStartsWith","caseInsensitiveCompare","caseInsensitiveEndsWith","caseInsensitiveEquals","isEmptyOrWhitespace","newLineToBr","htmlEscape","AMP_RE_","LT_RE_","GT_RE_","QUOT_RE_","SINGLE_QUOTE_RE_","NULL_RE_","ALL_RE_","whitespaceEscape","caseInsensitiveContains","compareVersions","compareElements_","TypedString","Const","stringConstValueWithSecurityContract__googStringSecurityPrivate_","GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_","STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_","TYPE_MARKER_","implementsGoogStringTypedString","getTypedStringValue","unwrap","EMPTY","url","createObjectUrl","getUrlObject_","createObjectURL","revokeObjectUrl","revokeObjectURL","findUrlObject_","URL","webkitURL","browserSupportsObjectUrls","trustedtypes","PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY","i18n","bidi","FORCE_RTL","IS_RTL","Format","LRE","RLE","PDF","LRM","RLM","Dir","LTR","RTL","NEUTRAL","RIGHT","LEFT","I18N_RIGHT","I18N_LEFT","toDir","ltrChars_","rtlChars_","htmlSkipReg_","stripHtmlIfNeeded_","rtlCharReg_","ltrCharReg_","hasAnyRtl","hasRtlChar","hasAnyLtr","ltrRe_","rtlRe_","isRtlChar","isLtrChar","isNeutralChar","ltrDirCheckRe_","rtlDirCheckRe_","startsWithRtl","isRtlText","startsWithLtr","isLtrText","isRequiredLtrRe_","isNeutralText","ltrExitDirCheckRe_","rtlExitDirCheckRe_","endsWithLtr","isLtrExitText","endsWithRtl","isRtlExitText","rtlLocalesRe_","isRtlLanguage","bracketGuardTextRe_","guardBracketInText","enforceRtlInHtml","enforceRtlInText","enforceLtrInHtml","enforceLtrInText","dimensionsRe_","leftRe_","rightRe_","tempRe_","mirrorCSS","doubleQuoteSubstituteRe_","singleQuoteSubstituteRe_","normalizeHebrewQuote","wordSeparatorRe_","hasNumeralsRe_","rtlDetectionThreshold_","estimateDirection","detectRtlDirectionality","setElementDirAndAlign","style","textAlign","setElementDirByTextDirectionality","DirectionalString","TrustedResourceUrl","privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_","trustedURL_","TRUSTED_RESOURCE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","implementsGoogI18nBidiDirectionalString","getDirection","cloneWithParams","URL_PARAM_PARSER_","createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse","stringifyParams_","unwrapTrustedScriptURL","unwrapTrustedURL","BASE_URL_","FORMAT_MARKER_","formatWithParams","fromConstant","fromConstants","SafeUrl","privateDoNotAccessOrElseSafeUrlWrappedValue_","SAFE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","INNOCUOUS_STRING","createSafeUrlSecurityPrivateDoNotAccessOrElse","SAFE_MIME_TYPE_PATTERN_","isSafeMimeType","fromBlob","DATA_URL_PATTERN_","fromDataUrl","fromTelUrl","SIP_URL_PATTERN_","fromSipUrl","fromFacebookMessengerUrl","fromWhatsAppUrl","fromSmsUrl","isSmsUrlBodyValid_","fromSshUrl","sanitizeChromeExtensionUrl","sanitizeExtensionUrl_","sanitizeFirefoxExtensionUrl","sanitizeEdgeExtensionUrl","fromTrustedResourceUrl","SAFE_URL_PATTERN_","SAFE_URL_PATTERN","sanitizeAssertUnchanged","ABOUT_BLANK","SafeStyle","privateDoNotAccessOrElseSafeStyleWrappedValue_","SAFE_STYLE_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","createSafeStyleSecurityPrivateDoNotAccessOrElse","initSecurityPrivateDoNotAccessOrElse_","sanitizePropertyValue_","sanitizePropertyValueString_","FUNCTIONS_RE_","URL_RE_","VALUE_RE_","COMMENT_RE_","hasBalancedQuotes_","hasBalancedSquareBrackets_","VALUE_ALLOWED_CHARS_","sanitizeUrl_","SafeScript","privateDoNotAccessOrElseSafeScriptWrappedValue_","SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","createSafeScriptSecurityPrivateDoNotAccessOrElse","fromConstantAndArgs","stringify_","fromJson","unwrapTrustedScript","getCount","getAnyKey","getAnyValue","containsValue","getValues","getKeys","getValueByKeys","containsKey","findValue","setIfUndefined","setWithReturnValueIfNotSet","unsafeClone","transpose","PROTOTYPE_FIELDS_","createSet","createImmutableView","isFrozen","freeze","isImmutableView","getAllPropertyNames","getOwnPropertyNames","getSuperClass","SafeStyleSheet","privateDoNotAccessOrElseSafeStyleSheetWrappedValue_","SAFE_STYLE_SHEET_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","createRule","hasBalancedBrackets_","createSafeStyleSheetSecurityPrivateDoNotAccessOrElse","tags","VOID_TAGS_","area","br","col","command","embed","hr","img","keygen","link","meta","param","wbr","isVoidTag","HtmlElement","TagName","tagName_","ABBR","ACRONYM","ADDRESS","APPLET","AREA","ARTICLE","ASIDE","AUDIO","BASE","BASEFONT","BDI","BDO","BIG","BLOCKQUOTE","BODY","BR","BUTTON","CANVAS","CAPTION","CENTER","CITE","CODE","COL","COLGROUP","COMMAND","DATA","DATALIST","DD","DEL","DETAILS","DFN","DIALOG","DIR","DIV","DL","DT","EM","EMBED","FIELDSET","FIGCAPTION","FIGURE","FONT","FOOTER","FORM","FRAME","FRAMESET","H1","H2","H3","H4","H5","H6","HEAD","HEADER","HGROUP","HR","HTML","IFRAME","IMG","INPUT","INS","ISINDEX","KBD","KEYGEN","LABEL","LEGEND","LI","LINK","MAIN","MAP","MARK","MATH","MENU","MENUITEM","META","METER","NAV","NOFRAMES","NOSCRIPT","OBJECT","OL","OPTGROUP","OPTION","OUTPUT","PARAM","PICTURE","PRE","PROGRESS","RP","RT","RTC","RUBY","SAMP","SCRIPT","SECTION","SELECT","SMALL","SOURCE","SPAN","STRIKE","STRONG","STYLE","SUB","SUMMARY","SUP","SVG","TABLE","TBODY","TD","TEMPLATE","TEXTAREA","TFOOT","TH","THEAD","TIME","TITLE","TR","TRACK","TT","U","UL","VAR","VIDEO","WBR","labs","getNativeUserAgentString_","getNavigator_","userAgent_","setUserAgent","getUserAgent","matchUserAgent","matchUserAgentIgnoreCase","extractVersionTuples","browser","matchOpera_","matchIE_","matchEdgeHtml_","matchEdgeChromium_","matchOperaChromium_","matchFirefox_","matchSafari_","matchChrome_","matchCoast_","isSilk","matchIosWebview_","matchAndroidBrowser_","isChrome","isFirefox","isOpera","isIE","isEdge","isEdgeChromium","isOperaChromium","isSafari","isCoast","isIosWebview","isAndroidBrowser","getVersion","getIEVersion_","isVersionOrHigher","SafeHtml","privateDoNotAccessOrElseSafeHtmlWrappedValue_","SAFE_HTML_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","dir_","unwrapTrustedHTML","createSafeHtmlSecurityPrivateDoNotAccessOrElse","htmlEscapePreservingNewlines","htmlEscapePreservingNewlinesAndSpaces","VALID_NAMES_IN_TAG_","URL_ATTRIBUTES_","action","cite","formaction","href","manifest","poster","NOT_ALLOWED_TAG_NAMES_","verifyTagName","createSafeHtmlTagSecurityPrivateDoNotAccessOrElse","createIframe","srcdoc","combineAttributes","sandbox","createSandboxIframe","canUseSandboxIframe","HTMLIFrameElement","createScriptSrc","createStyle","createMetaRefresh","getAttrNameAndValue_","getStyleValue_","createWithDir","concatWithDir","stringifyAttributes","DOCTYPE_HTML","uncheckedconversions","safeHtmlFromStringKnownToSatisfyTypeContract","safeScriptFromStringKnownToSatisfyTypeContract","safeStyleFromStringKnownToSatisfyTypeContract","safeStyleSheetFromStringKnownToSatisfyTypeContract","safeUrlFromStringKnownToSatisfyTypeContract","trustedResourceUrlFromStringKnownToSatisfyTypeContract","assertIsLocation","getWindow_","Location","Element","debugStringForType_","assertIsElementType_","assertIsHTMLAnchorElement","assertIsHTMLButtonElement","assertIsHTMLLinkElement","assertIsHTMLImageElement","assertIsHTMLAudioElement","assertIsHTMLVideoElement","assertIsHTMLInputElement","assertIsHTMLTextAreaElement","assertIsHTMLCanvasElement","assertIsHTMLEmbedElement","assertIsHTMLFormElement","assertIsHTMLFrameElement","assertIsHTMLIFrameElement","assertIsHTMLObjectElement","assertIsHTMLScriptElement","ownerDocument","defaultView","parentWindow","functions","constant","FALSE","TRUE","NULL","identity","lock","partialRight","withReturnValue","sequence","equalTo","compose","and","or","not","CACHE_RETURN_VALUE","cacheReturnValue","once","debounce","clearTimeout","throttle","rateLimit","safe","InsertAdjacentHtmlPosition","AFTERBEGIN","AFTEREND","BEFOREBEGIN","BEFOREEND","insertAdjacentHtml","insertAdjacentHTML","SET_INNER_HTML_DISALLOWED_TAGS_","isInnerHtmlCleanupRecursive_","firstChild","innerHTML","parentElement","unsafeSetInnerHtmlDoNotUseOrElse","lastChild","setInnerHtml","tagName","setOuterHtml","outerHTML","setFormElementAction","setButtonFormAction","formAction","setInputFormAction","setStyle","cssText","documentWrite","setAnchorHref","setImageSrc","setAudioSrc","setVideoSrc","setEmbedSrc","setFrameSrc","setIframeSrc","setIframeSrcdoc","setLinkHrefAndRel","rel","setObjectData","setScriptSrc","setScriptContent","setLocationHref","assignLocation","replaceLocation","openInWindow","parseFromStringHtml","parseFromString","createImageFromBlob","Image","DETECT_DOUBLE_ESCAPING","FORCE_NON_DOM_HTML_UNESCAPING","Unicode","NBSP","subs","collapseWhitespace","isEmptyString","isEmptyOrWhitespaceSafe","makeSafe","isEmptySafe","isBreakingWhitespace","isAlpha","isNumeric","isAlphaNumeric","isSpace","isUnicodeChar","stripNewlines","canonicalizeNewlines","normalizeWhitespace","normalizeSpaces","collapseBreakingSpaces","trimLeft","numberAwareCompare_","intAwareCompare","floatAwareCompare","numerateCompare","urlEncode","urlDecode","E_RE_","unescapeEntities","unescapeEntitiesUsingDom_","unescapePureXmlEntities_","unescapeEntitiesWithDocument","HTML_ENTITY_PATTERN_","nodeValue","preserveSpaces","stripQuotes","truncate","truncateMiddle","specialEscapeChars_","jsEscapeCache_","escapeChar","escapeString","countOf","removeAll","regExpEscape","replaceAll","padNumber","buildString","getRandomString","hashCode","uniqueStringCounter_","createUniqueString","toNumber","isLowerCamelCase","isUpperCamelCase","toCamelCase","toSelectorCase","toTitleCase","capitalize","splitLimit","lastComponent","editDistance","isAndroid","isIpod","isIphone","isIpad","isIos","isMacintosh","isLinux","isWindows","isChromeOS","isChromecast","isKaiOS","isGo2Phone","reflect","objectProperty","sinkValue","canAccessProperty","cache","engine","isPresto","isTrident","isWebKit","isGecko","getEngineTuple_","getVersionForKey_","ASSUME_IE","ASSUME_EDGE","ASSUME_GECKO","ASSUME_WEBKIT","ASSUME_MOBILE_WEBKIT","ASSUME_OPERA","ASSUME_ANY_VERSION","BROWSER_KNOWN_","getUserAgentString","getNavigatorTyped","getNavigator","OPERA","IE","EDGE","EDGE_OR_IE","GECKO","WEBKIT","isMobile_","MOBILE","SAFARI","determinePlatform_","PLATFORM","ASSUME_MAC","ASSUME_WINDOWS","ASSUME_LINUX","ASSUME_X11","ASSUME_ANDROID","ASSUME_IPHONE","ASSUME_IPAD","ASSUME_IPOD","ASSUME_KAIOS","ASSUME_GO2PHONE","PLATFORM_KNOWN_","MAC","WINDOWS","isLegacyLinux_","LINUX","isX11_","appVersion","X11","ANDROID","IPHONE","IPAD","IPOD","IOS","KAIOS","GO2PHONE","determineVersion_","getVersionRegexResult_","getDocumentMode_","documentMode","VERSION","isVersionOrHigherCache_","isVersion","isDocumentModeOrHigher","DOCUMENT_MODE","isDocumentMode","product","ASSUME_FIREFOX","ASSUME_CHROME","ASSUME_SAFARI","PRODUCT_KNOWN_","FIREFOX","isIphoneOrIpod_","CHROME","isSafariDesktop_","DEFAULT_ALPHABET_COMMON_","ENCODED_VALS","ENCODED_VALS_WEBSAFE","Alphabet","DEFAULT","NO_PADDING","WEBSAFE","WEBSAFE_DOT_PADDING","WEBSAFE_NO_PADDING","paddingChars_","isPadding_","byteToCharMaps_","charToByteMap_","ASSUME_NATIVE_SUPPORT_","HAS_NATIVE_ENCODE_","HAS_NATIVE_DECODE_","encodeByteArray","init_","encodeString","decodeString","decodeStringInternal_","decodeStringToByteArray","decodeStringToUint8Array","subarray","utils","split64Low","split64High","splitUint64","splitInt64","splitZigzag64","splitFloat32","LN2","splitFloat64","splitHash64","joinUint64","joinInt64","toZigzag64","joinZigzag64","fromZigzag64","joinFloat32","joinFloat64","joinHash64","DIGITS","ZERO_CHAR_CODE_","A_CHAR_CODE_","joinUnsignedDecimalString","joinSignedDecimalString","hash64ToDecimalString","hash64ArrayToDecimalStrings","decimalStringToHash64","splitDecimalString","toHexDigit_","fromHexCharCode_","hash64ToHexString","hexStringToHash64","hash64ToNumber","numberToHash64","countVarints","countVarintFields","countFixedFields_","countFixed32Fields","countFixed64Fields","countDelimitedFields","debugBytesToTextFormat","byteSourceToUint8Array","debugScalarToTextFormat","BinaryDecoder","bytes_","cursor_","end_","start_","error_","setBlock","instanceCache_","free","getBuffer","getEnd","setEnd","getCursor","setCursor","advance","atEnd","pastEnd","readSplitVarint64","readSplitZigzagVarint64","readSplitFixed64","skipVarint","unskipVarint","readUnsignedVarint32","readSignedVarint32","readUnsignedVarint32String","readSignedVarint32String","readZigzagVarint32","readUnsignedVarint64","readUnsignedVarint64String","readSignedVarint64","readSignedVarint64String","readZigzagVarint64","readZigzagVarintHash64","readZigzagVarint64String","readUint8","readUint16","readUint32","readUint64","readUint64String","readInt8","readInt16","readInt32","readInt64","readInt64String","readFloat","readDouble","readBool","readEnum","readString","readStringWithLength","readBytes","readVarintHash64","readFixedHash64","BinaryReader","decoder_","fieldCursor_","nextField_","nextWireType_","readCallbacks_","getFieldCursor","getFieldNumber","getWireType","isEndGroup","nextField","unskipHeader","skipMatchingFields","skipField","skipVarintField","skipDelimitedField","skipFixed32Field","skipFixed64Field","skipGroup","registerReadCallback","runReadCallback","readAny","readFixed64","readFixed32","readSfixed32","readSfixed64","readSint32","readSint64","readMessage","readGroup","getFieldDecoder","readInt32String","readUint32String","readSint64String","readFixed64String","readSfixed32String","readSfixed64String","readSintHash64","readPackedField_","readPackedInt32","readPackedInt32String","readPackedInt64","readPackedInt64String","readPackedUint32","readPackedUint32String","readPackedUint64","readPackedUint64String","readPackedSint32","readPackedSint64","readPackedSint64String","readPackedFixed32","readPackedFixed64","readPackedFixed64String","readPackedSfixed32","readPackedSfixed64","readPackedSfixed64String","readPackedFloat","readPackedDouble","readPackedBool","readPackedEnum","readPackedVarintHash64","readPackedFixedHash64","arr_","valueCtor_","map_","arrClean","loadFromArray_","Entry_","valueWrapper","stringKeys_","wrapEntry_","fromObject","ArrayIteratorIterable_","idx_","getLength","getEntryList","serializeBinary","beginSubMessage","endSubMessage","deserializeBinary","ExtensionFieldInfo","fieldIndex","fieldName","ctor","toObjectFn","isRepeated","ExtensionFieldBinaryInfo","fieldInfo","binaryReaderFn","binaryWriterFn","binaryMessageSerializeFn","binaryMessageDeserializeFn","isPacked","isMessageType","Message","GENERATE_TO_OBJECT","GENERATE_FROM_OBJECT","GENERATE_TO_STRING","ASSUME_LOCAL_ARRAYS","SERIALIZE_EMPTY_TRAILING_FIELDS","SUPPORTS_UINT8ARRAY_","getJsPbMessageId","messageId_","getIndex_","arrayIndexOffset_","hiddenES6Property_","getFieldNumber_","initialize","wrappers_","initPivotAndExtensionObject_","convertedPrimitiveFields_","repeatedFields","pivot_","EMPTY_LIST_SENTINEL_","maybeInitEmptyExtensionObject_","extensionObject_","computeOneofCase","isArray_","isExtensionObject_","MAX_VALUE","toObjectList","toObjectExtension","serializeBinaryExtensions","readBinaryExtension","getField","getRepeatedField","getOptionalFloatingPointField","getBooleanField","getRepeatedFloatingPointField","getRepeatedBooleanField","bytesAsB64","bytesAsU8","bytesListAsB64","assertConsistentTypes_","bytesListAsU8","getFieldWithDefault","getBooleanFieldWithDefault","getFloatingPointFieldWithDefault","getFieldProto3","getMapField","setField","setProto3IntField","setFieldIgnoringDefault_","setProto3FloatField","setProto3BooleanField","setProto3StringField","setProto3BytesField","setProto3EnumField","setProto3StringIntField","addToRepeatedField","setOneofField","getWrapperField","getRepeatedWrapperField","wrapRepeatedField_","setWrapperField","setOneofWrapperField","setRepeatedWrapperField","addToRepeatedWrapperField","toMap","syncMapFields_","getExtension","setExtension","compareFields","compareExtensions","cloneMessage","clone_","copyInto","registerMessageType","messageId","messageSetExtensions","messageSetExtensionsBinary","arith","UInt64","lo","hi","cmp","rightShift","leftShift","msb","lsb","sub","mul32x32","mul","div","fromString","Int64","BinaryEncoder","buffer_","writeSplitVarint64","writeSplitFixed64","writeUint32","writeUnsignedVarint32","writeSignedVarint32","writeUnsignedVarint64","writeSignedVarint64","writeZigzagVarint32","writeZigzagVarint64","writeZigzagVarint64String","writeZigzagVarintHash64","writeUint8","writeUint16","writeUint64","writeInt8","writeInt16","writeInt32","writeInt64","writeInt64String","writeFloat","writeDouble","writeBool","writeEnum","writeBytes","writeVarintHash64","writeFixedHash64","writeString","BinaryWriter","blocks_","totalLength_","encoder_","bookmarks_","appendUint8Array_","beginDelimited_","writeFieldHeader_","endDelimited_","writeSerializedMessage","maybeWriteSerializedMessage","getResultBuffer","getResultBase64String","writeAny","writeFixed64","writeFixed32","writeSfixed32","writeSfixed64","writeSint32","writeSint64","writeUnsignedVarint32_","writeSignedVarint32_","writeUnsignedVarint64_","writeSignedVarint64_","writeZigzagVarint32_","writeZigzagVarint64_","writeZigzagVarint64String_","writeZigzagVarintHash64_","writeInt32String","writeUint32String","writeUint64String","writeSintHash64","writeSint64String","writeFixed64String","writeSfixed64String","writeMessage","writeMessageSet","writeGroup","writeSplitZigzagVarint64","writeRepeatedInt32","writeRepeatedInt32String","writeRepeatedInt64","writeRepeatedSplitFixed64","writeRepeatedSplitVarint64","writeRepeatedSplitZigzagVarint64","writeRepeatedInt64String","writeRepeatedUint32","writeRepeatedUint32String","writeRepeatedUint64","writeRepeatedUint64String","writeRepeatedSint32","writeRepeatedSint64","writeRepeatedSint64String","writeRepeatedSintHash64","writeRepeatedFixed32","writeRepeatedFixed64","writeRepeatedFixed64String","writeRepeatedSfixed32","writeRepeatedSfixed64","writeRepeatedSfixed64String","writeRepeatedFloat","writeRepeatedDouble","writeRepeatedBool","writeRepeatedEnum","writeRepeatedString","writeRepeatedBytes","writeRepeatedMessage","writeRepeatedGroup","writeRepeatedFixedHash64","writeRepeatedVarintHash64","writePackedInt32","writePackedInt32String","writePackedInt64","writePackedSplitFixed64","writePackedSplitVarint64","writePackedSplitZigzagVarint64","writePackedInt64String","writePackedUint32","writePackedUint32String","writePackedUint64","writePackedUint64String","writePackedSint32","writePackedSint64","writePackedSint64String","writePackedSintHash64","writePackedFixed32","writePackedFixed64","writePackedFixed64String","writePackedSfixed32","writePackedSfixed64","writePackedSfixed64String","writePackedFloat","writePackedDouble","writePackedBool","writePackedEnum","writePackedFixedHash64","writePackedVarintHash64","Export","origSymbol","hasSymbolSham","hasNativeSymbols","sym","symObj","symVal","syms","descriptor","hasToStringTag","toStringTag","$toString","isStandardArguments","isLegacyArguments","supportsStandardArguments","bigIntValueOf","tryBigInt","tryBigIntObject","isBigInt","$boolToStr","tryBooleanObject","booleanBrandCheck","boolClass","isSlowBuffer","_isBuffer","readFloatLE","fnToStr","reflectApply","isCallableMarker","constructorRegex","isES6ClassFn","isES6ClassFunction","fnStr","tryFunctionObject","tryFunctionToStr","fnClass","genClass","documentDotAll","strClass","tryDateObject","tryDateGetDayCall","dateClass","isDateObject","exported","numToStr","tryNumberObject","numClass","isNumberObject","$exec","isRegexMarker","badStringifier","throwRegexMarker","gOPD","regexClass","hasLastIndexDataProperty","strValue","tryStringObject","symToStr","symStringRegex","isSymbolObject","isRealSymbolObject","typedArrays","toStrTags","proto","superProto","tryTypedArrays","tryAllTypedArrays","anyTrue","isTypedArray","tag","$WeakMap","$WeakSet","isWeakMap","isWeakSet","getCountryCode","localeString","components","countryCode","getLocales","locales","AD","AE","AF","AG","AI","AL","AM","AN","AO","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HT","HU","ID","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","ST","SV","SX","SY","SZ","TC","TF","TG","TJ","TK","TL","TM","TN","TO","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","YT","ZA","ZM","ZW","md5","FF","_ff","_gg","HH","_hh","II","_ii","aa","bb","cc","dd","_blocksize","_digestsize","digestbytes","asBytes","asString","simpleIsEqual","resultFn","lastThis","lastArgs","lastResult","calledOnce","isNewArgEqualToLast","newArg","_len","newArgs","_key","_global","MurmurHashV2","seed","MurmurHashV3","h1","h1b","c1","c1b","c2","c2b","k1","murmur","v2","v3","propIsEnumerable","shouldUseNative","test1","test2","order2","test3","letter","symbols","hasMap","mapSizeDescriptor","mapSize","mapForEach","hasSet","setSizeDescriptor","setSize","setForEach","hasWeakMap","weakMapHas","hasWeakSet","weakSetHas","hasWeakRef","weakRefDeref","deref","booleanValueOf","objectToString","functionToString","gOPS","symToString","hasShammedSymbols","isEnumerable","inspectCustom","custom","inspectSymbol","inspect_","depth","seen","quoteStyle","maxStringLength","customInspect","indent","inspectString","maxDepth","getIndent","noIndent","newOpts","nameOf","arrObjKeys","symString","markBoxed","isElement","nodeName","attrs","attributes","wrapQuotes","childNodes","xs","singleLineValues","indentedJoin","isError","mapParts","collectionOf","setParts","weakCollectionOf","isWeakRef","ys","isPlainObject","protoTag","stringTag","constructorTag","defaultStyle","quoteChar","HTMLElement","remaining","trailer","lowbyte","joinedEntries","baseIndent","lineJoiner","isArr","symMap","numberIsNaN","shimObjectIs","testObjectIs","keysShim","isArgs","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","o","excludedKeys","$applicationCache","$console","$external","$frame","$frameElement","$frames","$innerHeight","$innerWidth","$onmozfullscreenchange","$onmozfullscreenerror","$outerHeight","$outerWidth","$pageXOffset","$pageYOffset","$parent","$scrollLeft","$scrollTop","$scrollX","$scrollY","$self","$webkitIndexedDB","$webkitStorageInfo","$window","hasAutomationEqualityBug","equalsConstructorPrototypeIfNotBuggy","theKeys","skipProto","skipConstructor","origKeys","originalKeys","shimObjectKeys","keysWorksWithArguments","canBeObject","$push","$propIsEnumerable","originalGetSymbols","source1","objTarget","getSymbols","lacksProperEnumerationOrder","letters","assignHasPendingExceptions","thrower","shimAssign","ignoreCase","multiline","dotAll","unicode","sticky","flagsBound","TypeErr","shimFlags","$weakMapGet","$weakMapSet","$weakMapHas","$mapSet","listGetNode","listGet","objects","listSet","listHas","$wm","$m","$o","isExtendedLengthPath","hasNonAscii","v1","v4","uuid","byteToHex","bytesToUuid","bth","crypto","nodeRNG","rng","_nodeId","_clockseq","_lastMSecs","_lastNSecs","clockseq","seedBytes","msecs","nsecs","dt","tl","tmh","rnds","ii","foundName","injected","runImport","budgetName","loadBudget","budgetId","id","batchBudgetUpdates","runQuery","query","getBudgetMonths","getBudgetMonth","setBudgetAmount","categoryId","setBudgetCarryover","flag","addTransactions","accountId","transactions","importTransactions","getTransactions","filterTransactions","updateTransaction","fields","deleteTransaction","getAccounts","createAccount","account","initialBalance","updateAccount","closeAccount","transferAccountId","transferCategoryId","reopenAccount","deleteAccount","getCategoryGroups","grouped","createCategoryGroup","group","updateCategoryGroup","deleteCategoryGroup","getCategories","createCategory","category","updateCategory","deleteCategory","getPayees","createPayee","payee","updatePayee","deletePayee","getPayeeRules","payeeId","createPayeeRule","payee_id","updatePayeeRule","deletePayeeRule","Query","filterExpressions","selectExpressions","groupExpressions","orderExpressions","calculation","rawMode","withDead","expr","unfilter","exprs","exprSet","select","calculate","groupBy","orderBy","tableOptions","table","amountToInteger","integerToAmount","normalizePathSep","AdmZip","mapAccountType","keyName","_parse","monthFromDate","getCurrentMonth","importAccounts","entityIdMap","accounts","isTombstone","accountType","accountName","offbudget","onBudget","closed","entityId","importCategories","masterCategories","masterCategory","subCategories","cat","is_income","masterCategoryId","importPayees","payees","autoFillCategoryId","transfer_acct","targetAccountId","categories","incomeCategoryId","getCategory","isOffBudget","acctId","acct","transaction","sortOrder","transactionsGrouped","toImport","transferId","transferTransactionId","newTransaction","notes","memo","transfer_id","subtransactions","subTransactions","fillInBudgets","categoryBudgets","budgets","budgeted","importBudgets","monthlyBudgets","earliestMonth","carryoverFlags","budget","filled","monthlySubCategoryBudgets","catBudget","catId","overspendingHandling","estimateRecentness","findLatestDevice","zipped","devices","contents","hasFullKnowledge","deviceGUID","shortName","shortDeviceId","recentness","knowledge","doImport","getBudgetName","unixFilepath","getFile","paths","importBuffer","dirMatch","metaStr","budgetPath","relativeDataFolderName","deviceFiles","yfullPath","amountFromYnab","deleted","on_budget","incomeCatId","ynabIncomeCategories","checkSpecialCat","category_group_id","category_groups","groupId","cats","newCategory","startingBalanceCatId","startingPayeeYNAB","subtransactionsGrouped","subtrans","category_id","account_id","cleared","imported_id","import_id","transfer_transaction_id","transfer_account_id","internalCatIdYnab","creditcardCatIdYnab","importYNAB5","runMigration","db","getValue","cachedValue","execQuery","monthBudget","dbmonth","sheetName","carryover","buffers","parseNote","note","parsed","FileSystem","_filename","FLG_LNG","_permissions","PATH_SEPARATOR","recoursive","writeInt32LE","inputType","nameA","nameB","Yallist","MAX","LENGTH","LENGTH_CALCULATOR","ALLOW_STALE","MAX_AGE","DISPOSE","NO_DISPOSE_ON_SET","LRU_LIST","CACHE","UPDATE_AGE_ON_GET","naiveLength","LRUCache","lc","stale","maxAge","dispose","noDisposeOnSet","updateAgeOnGet","mL","allowStale","mA","lengthCalculator","lC","hit","itemCount","rforEach","thisp","walker","tail","forEachStep","dump","isStale","dumpLru","Entry","expiresAt","prune","doUse","unshiftNode","removeNode","handlers","evt","Node","pushNode","forEachReverse","getReverse","mapReverse","initial","acc","reduceReverse","toArrayReverse","sliceReverse","pickRandom","integer","findMin","getStartingBalanceCat","extractCommonThings","incomePayee","expensePayees","expenseGroup","incomeGroup","bill","expenseCategories","billCategories","billPayees","fillPrimaryChecking","numTransactions","monthUtils","pick","earliestDate","starting_balance_flag","fillChecking","added","fastMode","fillInvestment","fillSavings","fillMortgage","fillOther","createBudget","primaryAccount","earliestPrimaryDate","setBudget","budgetActions","setBudgetIfSpent","spent","sheet","runMutator","batchMessages","prevSaved","toBudget","available","createTestBudget","setSyncingMode","offBudget","categoryGroups","isIncome","allGroups","runHandler","aqlQuery","$sum","primaryBalance","$gt","lastDeposit","prefs","isCached","captureException","exc","SentryClient","captureBreadcrumb","breadcrumb","addBreadcrumb","lootFs","getStorePath","getDataDir","store","persisted","persist","_saveStore","writeFile","getItem","setItem","removeItem","multiGet","multiSet","keyValues","multiRemove","fetchBinary","fileStream","createWriteStream","documentDir","rootPath","__dirname","__filename","env","ACTUAL_DATA_DIR","_setDocumentDir","getDocumentDir","getBudgetDir","bundledDatabasePath","migrationsPath","demoBudgetPath","listDir","readdir","access","constants","F_OK","mkdir","copyFile","frompath","topath","readStream","createReadStream","writeStream","removeFile","unlink","removeDir","dirpath","rmdir","removeDirRecursively","fullpath","getModifiedTime","Database","verifyParamTypes","sql","params","fetchAll","stmt","changes","insertId","lastInsertRowid","transactionDepth","asyncTransaction","openDatabase","pathOrBuffer","closeDatabase","exportDatabase","v4Sync","exportToCSV","accountNamesById","reduced","categoryNamesById","subCategory","payeeNamesById","transactionsForExport","Account","Payee","Notes","Category","Amount","csvStringify","exportQueryToCSV","Id","ParentId","IsParent","splits","parentsPayees","trans","noParents","handoffPublicToken","institution","publicToken","asyncStorage","userId","institution_id","post","getConfig","PLAID_SERVER","item_id","public_token","bank_id","addAccounts","bankId","accountIds","offbudgetIds","userKey","bankSync","official_name","fromPlaidAccountType","balance_current","balances","current","mask","bank","parseFile","ext","parseQIF","parseCSV","parseOFX","csv2json","qif2json","looselyParseAmount","payee_name","imported_payee","getOFXTransactions","initModule","fi_id","dayFromDate","description","row","getStartingBalancePayee","qif","line","division","address","lArray","subcategory","clearedStatus","sArray","dateFormat","safeNumber","safeParseInt","RuleError","parseRecurDate","recurConfigToRSchedule","RSchedule","parseDateString","dateFns","parseBetweenAmount","between","num1","num2","CONDITION_TYPES","ops","nullable","op","Condition","fieldTypes","typeName","rawValue","unparsedValue","fieldValue","outflow","inflow","extractValue","fieldDate","fullDate","high","low","yearFromDate","threshold","getApproxNumberThreshold","sortNumbers","ACTION_OPS","Action","stage","conditions","actions","evalConditions","condition","execActions","getId","RuleIndexer","getIndex","getIndexForValue","getKey","getIndexes","cond","indexes","getApplicableRules","indexedRules","fastSetMerge","OP_SCORES","oneOf","isapprox","isbetween","gt","gte","lt","lte","computeScore","initialScore","score","_rankRules","scores","r1","r2","score1","score2","id1","id2","rankRules","pre","normal","migrateIds","mappings","ci","ai","iterateIds","counts","ruleiter","vi","levenshtein","BankSyncError","makeSplitTransaction","recalculateSplit","is_parent","idx","makeChildTransaction","sort_order","parent","getAccountBalance","updateAccountBalance","balance","fromPlaid","transaction_id","downloadTransactions","since","allTransactions","accountBalance","pageSize","numDownloaded","start_date","end_date","error_code","error_type","total_transactions","resolvePayee","payeeName","payeesToCreate","newPayee","normalizeTransactions","rawPayeeName","normalized","title","createNewPayees","addsAndUpdates","usedPayeeIds","reconcileTransactions","hasMatched","updated","transactionsStep1","fuzzyDataset","transactionsStep2","transactionsStep3","existing","updates","hasFieldsChanged","finalTransaction","batchUpdateTransactions","runTransfers","newTransactions","syncAccount","latestTransaction","startingTransaction","acctRow","startingDay","currentBalance","previousBalance","oldestDate","initialId","lowerCase","specials","character","convertToRegExp","parseMatch","lead","forced","lower","parsedMatch","fullLower","customSpecials","special","replaceRegExp","conjunctions","articles","prepositions","intended","allRules","unlistenSync","firstcharIndexer","payeeIndexer","resetState","invert","fromEntries","internalFields","schemaConfig","views","publicFields","fromInternalField","toInternalField","ruleModel","requiredFields","toJS","parseArray","fromJS","makeRule","FIELD_TYPES","getMappings","loadRules","addSyncListener","onApplySync","getRules","insertRule","updateRule","deleteRule","oldValues","newValues","newValue","oldRule","tombstone","tables","finalTrans","allChanges","conditionsToAQL","recurDateBounds","filters","$and","$lt","$transform","$eq","$or","$gte","$lte","applyActions","transactionIds","parsedActions","getRulesForPayee","getIsSetterRules","condField","actionField","condValue","actionValue","getOneOfSetterRules","updatePayeeRenameRule","fromNames","renameRule","getProbableCategory","winner","updateCategoryRules","payeeIds","transIds","register","toDateRepr","partitionByField","categoriesToSet","latestTrans","ruleSetters","newRule","migrateOldRules","allPayees","payeesById","rulesByPayeeId","payeeRules","r","payeeRule","catRules","ids","prevMode","connection","idsWithChildren","whereIds","whereIn","rows","getTransactionsByIds","incrFetch","where","learnCategories","detectOrphanPayees","addedIds","updatedIds","deletedIds","oldPayees","descUpdatedIds","allAdded","allUpdated","allDeleted","resultAdded","resultUpdated","transfer","newPayeeIds","allOrphaned","orphanedIds","updatedPayeeIds","getPayee","getTransferredAccount","clearCategory","transferAcct","fromOffBudget","toOffBudget","addTransfer","transferredAccount","fromPayee","parent_id","categoryCleared","removeTransfer","transferTrans","is_child","updateTransfer","onInsert","onDelete","onUpdate","transactionModel","models","toExternal","fromExternal","imported_description","financial_id","transferred_id","accountModel","categoryModel","cat_group","categoryGroupModel","payeeModel","payeeRuleModel","resolveName","IMPORT_MODE","APIError","withMutation","latestTimestamp","getClock","getNumClients","dataset","undoDisabled","validateMonth","validateExpenseCategory","batchPromise","currentId","avoidUpload","markCacheDirty","cloudStorage","getCellValue","incomeAvailable","lastMonthOverspent","forNextMonth","totalBudgeted","fromLastMonth","totalIncome","totalSpent","totalBalance","received","startMonth","ungroupTransactions","serverHandlers","App","services","events","mitt","unlistenServices","service","combine","apps","app","listeners","listener","startServices","stopServices","unlisten","createApp","_uid","resetUid","uid","tableName","CompileError","nativeDateToInt","pad","dateToInt","addTombstone","schema","tableId","whereStr","hasTombstone","popPath","isKeyword","quoteAlias","typed","literal","getFieldDescription","fieldDesc","makePath","initialTable","joinTable","parentParts","parentPath","parentDesc","joinField","resolvePath","fullName","implicitTableName","pathInfo","transformField","implicitTableId","validateRefs","refPath","refPathInfo","noMapping","fieldStr","parseMonth","badDateFormat","inferParam","existingType","paramType","casts","float","castInput","expr2","castedExpr","valArray","types","validateArgLength","saveStack","compileStack","prettyValue","expanded","getCompileError","stackStr","fieldRef","opData","rootMethod","methodArgs","compileLiteral","compileExpr","implicitField","paramName","namedParameters","compileFunction","assertType","acceptedTypes","assertArgLength","argExprs","arg1","order","orders","compileOrderBy","arg2","arg3","conds","compileConditions","compileOp","opExpr","rhs","lhs","left","right","condsObj","compiled","compileAnd","compileOr","compileWhere","compileJoins","tableRef","internalTableFilters","joins","dependencies","expandStar","compileSelect","isAggregate","outputTypes","compileGroupBy","$dir","AGGREGATE_FUNCTIONS","isAggregateFunction","isAggregateQuery","queryState","compileQuery","tableViews","tableFilters","customizeQuery","isJoin","view","dependences","sqlPieces","defaultConstructQuery","generateSQLWithState","generateSQL","applyTypes","convertOutputType","runCompiledQuery","pieces","executors","paramArray","convertInputType","isRequired","required","fromDateRepr","conform","skipNull","tableSchema","convertForInsert","rawObj","default","convertForUpdate","convertFromSelect","toGroup","parents","mapper","childs","execTransactions","splitType","execTransactionsBasic","execTransactionsGrouped","_isUnhappy","isHappyPathQuery","whereDead","allSql","matched","rowSql","finalSql","allRows","pid","_parent_id","_unmatched","next_date","completed","posts_transaction","_payee","_account","_amount","_amountOp","_conditions","_actions","$condition","$nocase","v_payees","v_categories","v_schedules","v_transactions_internal","v_transactions_internal_alive","v_transactions","_runCompiledQuery","schemaExecutors","_runQuery","selectFields","as","needsAs","makeViews","viewStrs","fieldMappings","viewName","publicMaker","overrides","internalMaker","LATEST_BACKUP_FILENAME","serviceInterval","getBackups","budgetDir","backupDir","backups","b1","b2","getLatestBackup","isLatest","getAvailableBackups","latestBackup","backup","updateBackups","byDay","removed","dayBackups","isToday","currentBackups","makeBackup","backupId","backupPath","sqlite","toRemove","loadBackup","stopBackupService","startBackupService","lastSyncedTimestamp","lastUploaded","clearInterval","setInterval","getSheetValue","cell","calcBufferedAmount","buffered","getBudgetTable","budgetType","isReflectBudget","isZeroBudget","dbMonth","getBudgetData","getAllMonths","createdMonths","latest","getBudget","setBuffer","setCarryover","copyPreviousMonth","prevMonth","budgetData","prevBudget","setZero","set3MonthAvg","prevMonth1","prevMonth2","prevMonth3","spent1","spent2","spent3","avg","setAllFuture","holdForNextMonth","bufferedAmount","holdForFutureMonths","resetHold","coverOverspending","toBudgeted","leftover","leftoverFrom","amountCovered","fromBudgeted","transferAvailable","transferCategory","setCategoryCarryover","mutator","undoable","mergeUpdates","merged","getBudgetType","getBudgetRange","prevSheetName","createDynamic","initialValue","rollover","report","sumAmounts","handleAccountChange","oldValue","recompute","handleTransactionChange","changedFields","handleCategoryMappingChange","handleCategoryChange","addDeps","addDependencies","removeDeps","removeDependencies","handleCategoryGroupChange","handleBudgetMonthChange","handleBudgetChange","triggerBudgetChanges","old","getChangedValues","doTransfer","categoryIds","totalValue","transferValue","setMeta","createAllBudgets","earliestTransaction","newMonths","setType","nodes","getNodes","cellName","deleteCell","startCacheBarrier","bounds","endCacheBarrier","createStatic","sumAmount","prevCarryover","prevLeftover","refresh","createSummary","income","getBlankSheet","blankMonth","createBlankCategory","createBlankMonth","prevLeftoverPos","flatten2","unflatten2","amounts","lastOverspent","blankSheet","clearSheet","UPLOAD_FREQUENCY_IN_DAYS","checkHTTPStatus","HTTPError","fetchJSON","checkKey","userToken","cloudFileId","encryptKeyId","SYNC_SERVER","fileId","reason","encryption","hasKey","resetSyncState","newKeyState","IS_BETA","PostError","keyId","keySalt","testContent","exportBuffer","rawDbContent","memDb","dbContent","resetClock","metaContent","upload","FileUploadError","zipContent","uploadContent","uploadMeta","encrypted","isMissingKey","possiblyUpload","listRemoteFiles","download","arrayBuffer","ab","FileDownloadError","fileData","encryptMeta","dbEntry","metaEntry","dbFile","metaFile","SIGNUP_SERVER","setConfig","dbPath","getDatabasePath","setDatabase","reopenDatabase","db_","resetQueryCache","getDatabase","loadClock","clock","deserializeClock","setClock","Timestamp","makeClientId","makeClock","serializeClock","_queryCache","LRU","cached","prepared","firstSync","sendMessages","insertWithUUID","delete_","selectWithSchema","selectFirstWithSchema","insertWithSchema","updateWithSchema","getCategoriesGrouped","insertCategoryGroup","lastGroup","SORT_INCREMENT","moveCategoryGroup","targetId","shoveSortOrders","insertCategory","id_","lastCat","moveCategory","existingTransfers","mapping","insertPayee","deleteTransferPayee","mergePayees","groupById","getOrphanedPayees","getPayeeByName","insertPayeeRule","insertAccount","moveAccount","getTransaction","_addFragmentForAccount","addWhere","showClosed","showOffbudget","fragment","getTransactionsByDate","insertTransaction","allMappings","loadMappings","getMapping","midpoint","below","above","terms","makeQuery","pageCount","fetchedIds","ids2","ENCRYPTION_ALGORITHM","sha256String","createHash","digest","masterKey","masterKeyBuffer","iv","cipher","createCipheriv","final","authTag","getAuthTag","algorithm","decipher","createDecipheriv","setAuthTag","decrypted","createKey","createKeyBuffer","importKey","numBytes","pbkdf2Sync","Key","createFromPassword","password","internals","createFromBase64","loadKey","keyInstance","unloadKey","unloadAllKeys","statusCode","responseBody","SyncError","TransactionError","isCodeError","YNAB4","YNAB5","unresolveName","SyncPb","DEMO_BUDGET_ID","TEST_BUDGET_ID","onSheetChange","names","_getNode","joinURL","pathname","undo","redo","withUndo","term","latestDate","notPaged","groupCategories","payeeCounts","mergeIds","orphaned","validateRule","runValidation","conditionErrors","ruleFieldTypes","actionErrors","someDeletionsFailed","nodeSheet","getNode","createQuery","accts","upgradingId","balance_available","balance_limit","stopPolling","matchedTransactions","updatedAccounts","linkToken","link_token","maxMonths","tracking","trackUsage","autoUpdate","floatingSidebar","seenTutorial","encryptKey","stringToInteger","getDefaultDocumentDir","prefsToSet","resetSync","repairSync","makeTestMessage","seenSubscribe","offline","fullSync","prefsPath","findBudgets","recomputeAll","showUpdate","initialFullSync","currentPrefs","trackSizes","getFileSize","dbSize","cacheSize","testMode","testBudgetId","clearFullSyncTimeout","uniqueFileName","idFromFileName","budgetVersion","updateVersion","logger","setNode","Platform","isWeb","isMobile","__TESTING__","syncMigrations","clearUndo","unseen","installAPI","injectAPI","schedulesApp","budgetApp","notesApp","toolsApp","ACTUAL_DOCUMENT_DIR","setupDocumentsDir","ensureExists","initApp","isDev","socketName","keysStr","lastBudget","$send","$query","$q","$db","$setSyncingMode","ACTUAL_APP_VERSION","dataDir","serverURL","ACTUAL_SERVER_URL","cwd","sendMessage","syncAndReceiveMessages","merkle","SyncProtoBuf","addEventListener","shutdown","trie","keyToTimestamp","fullkey","hash","millis","insertKey","build","timestamps","trie1","trie2","node1","node2","keyset","diffkey","next1","next2","MIGRATIONS_DIR","javascriptMigrations","m1632571489012","withMigrationsDir","oldDir","getMigrationsDir","getMigrationId","getUpMigration","getAppliedMigrations","getMigrationList","migrationsDir","m1","m2","getPending","appliedIds","applyJavaScript","dbInterface","applySql","applyMigration","checkDatabaseValidity","migrate","migration","validateAccountType","categoryGroup","validateType","isParent","isChild","runningMethods","currentContext","mutatingMethods","globalMutationsEnabled","_latestHandlerNames","isMutating","flushRunningMethods","wait","undoTag","promise","enableGlobalMutations","disableGlobalMutations","sequential","initialContext","finally","withMutatorContext","prevContext","getMutatorContext","counters","unrecord","isDesktop","throwIfNot200","contentType","postBinary","loadPrefs","dummyTestPrefs","savePrefs","avoidSync","messages","unloadPrefs","getPrefs","getDefaultPrefs","readPrefs","arr1","arr2","updateConditions","newConditions","scheduleConds","extractScheduleConds","newScheduleConds","replacements","getNextDate","dateCond","getRuleForSchedule","ruleId","fixRuleForSchedule","newId","setNextDate","newNextDate","nd","base_next_date","base_next_date_ts","local_next_date","local_next_date_ts","createSchedule","scheduleId","nextDateRepr","nextDateId","schedule_id","updateSchedule","resetNextDate","oldConditions","stripType","deleteSchedule","skipNextDate","getPossibleTransactions","discoverSchedules","findSchedules","getUpcomingDates","onRuleUpdate","payeeIdx","accountIdx","amountIdx","dateIdx","trackJSONPaths","found","postTransactionForSchedule","getScheduledAmount","advanceSchedulesService","syncSuccess","getHasTransactionsQuery","hasTransData","hasTrans","failedToPost","didPost","getStatus","syncDisabled","subtype","completeEvent","lastScheduleRun","takeDates","getRank","day1","day2","dayDiff","matchSchedules","allOccurs","partialMatchRank","baseOccur","occurs","occur","rank","exactAmount","exact","exactDate","schedulesForPattern","baseStart","numDays","baseConfig","weekly","every2weeks","monthly","monthlyLastDay","s1","s2","monthly1stor3rd","dayValue","monthly2ndor4th","findStartDate","currentConfig","prevConfig","allSchedules","finalized","globalSheet","globalOnChange","globalCacheDb","updateSpreadsheetCache","rawDb","setCacheStatus","mainDb","cacheDb","clean","isCacheDirty","loadSpreadsheet","cacheEnabled","cachePath","Spreadsheet","cachedRows","loadUserBudgets","unloadSpreadsheet","unload","reloadSpreadsheet","startTransaction","budgetMonths","budgetMonth","sheetForMonth","endTransaction","getCell","waitOnSpreadsheet","onFinish","firstValue","Graph","serialized","graph","addNode","adjacent","adjacentIncoming","addEdge","removeEdge","removeIncomingEdges","topologicalSort","generateDOT","getEdges","edges","incomingEdges","incoming","iter","cur","topologicalSortUntil","visited","sorted","sourceNodes","edgeStrings","adj","edge","saveCache","dirtyCells","computeQueue","_meta","hasCell","cells","queueComputation","cellNames","running","runComputations","_dependencies","dep","markCacheSafe","cacheBarrier","pendingChange","getExpr","getCellExpr","getCellValueLoose","bootup","onReady","_markDirty","dynamic","resolved","voidCell","voidValue","newDeps","triggerDatabaseChanges","resolveNamesAsObjects","sheets","resolveNamesAsArrays","coerceBuffer","encode","requestPb","SyncRequest","envelopePb","MessageEnvelope","setTimestamp","messagePb","setDataset","setRow","setColumn","setValue","binaryMsg","EncryptedData","setIv","setAuthtag","setContent","setIsencrypted","addMessages","setGroupid","setFileid","setKeyid","setSince","decode","responsePb","SyncResponse","getMerkle","getMessagesList","getTimestamp","getIsencrypted","binary","getContent","getIv","getAuthtag","getDataset","getRow","getColumn","FULL_SYNC_DELAY","SYNCING_MODE","checkSyncingMode","partIds","serializeValue","deserializeValue","_syncListeners","compareMessages","newMessages","timestampStr","applyMessagesForImport","applyMessages","t1","t2","idsPerTable","fetchData","setIn","oldData","currentMerkle","getIn","setBudgetType","newData","getTablesFromMessages","prevData","receiveMessages","recv","_sendMessages","scheduleFullSync","IS_BATCHING","_BATCHED","batched","getMessagesSince","localMessages","syncTimeout","_fullSync","sinceTimestamp","prevDiffTime","encoder","resBuffer","localTimeChanged","receivedMessages","diffTime","rebuiltMerkle","rebuildMerkleHash","numMessages","clocks","randomString","migrateParentIds","toApply","parentId","_unlisten","listen","globalThis","opt_data","repeatedFields_","opt_includeInstance","includeInstance","getIv_asB64","authtag","getAuthtag_asB64","getData_asB64","$jspbMessageInstance","reader","deserializeBinaryFromReader","writer","serializeBinaryToWriter","getIv_asU8","getAuthtag_asU8","getData_asU8","isencrypted","getContent_asB64","getContent_asU8","messagesList","fileid","groupid","keyid","getFileid","getGroupid","getKeyid","getSince","setMessagesList","opt_value","opt_index","clearMessagesList","setMerkle","rebuilt","keyState","clock_","MutableTimestamp","maxDrift","counter","_state","murmurhash","setMillis","setCounter","phys","lOld","cOld","lNew","cNew","ClockDriftError","OverflowError","lMsg","cMsg","isoString","DuplicateNodeError","blankPayeeRows","parentPayee","clearedRows","deletedRows","numBlankPayees","numCleared","numDeleted","Mixpanel","currentUniqueId","isEnabled","toggle","hashed","isAnonymous","distinctId","hashedId","setProfile","$name","login","startBuffering","stopBuffering","BUFFERING","MESSAGE_HISTORY","CURSOR","HISTORY_SIZE","trimHistory","markers","cutoff","appendMessages","undoListening","marker","applyUndoAction","undoMessage","oldItem","redoResurrections","resurrect","runMigrations","migrations","updateViews","hashKey","currentHash","existingFiles","initialName","newName","prettyAccountType","determineOffBudget","sequenceState","queue","pump","onceFn","IS_TESTING","month1","month2","_range","inclusive","rangeInclusive","_dayRange","dayRange","dayRangeInclusive","getMonthIndex","getYearStart","getYearEnd","nameForMonth","getDateFormatRegex","memoizeOne","getDayMonthFormat","getDayMonthRegex","getMonthYearFormat","getMonthYearRegex","getShortYearFormat","getShortYearRegex","withoutValidatedRefs","getPrimaryOrderBy","defaultOrderBy","orderExprs","firstOrder","TYPE_INFO","amountInflow","amountOutfow","mapField","friendlyOp","deserializeField","getFieldError","unparse","inputKey","unparsed","makeValue","currencyToAmount","makeNumberSuffix","prettyDayName","SU","TU","WE","getRecurringDescription","p1","p2","typeOrder","valOrder","strs","uniqueDays","dayName","abbrevDay","dayNames","SplitTransactionError","makeChild","findParentIndex","getSplit","parentIndex","groupTransaction","ungroupTransaction","applyTransactionDiff","groupedTrans","applyChanges","replaceTransactions","transactionsCopy","newSplit","_deleted","diffItems","newTrans","addSplitTransaction","prevSub","splitTransaction","realizeTempTransactions","currencyFormatter","cleanUUID","mergeObjects","composeCellChanges","flattenArray","arrays","shallowEqual","numKeysA","numKeysB","obj1","obj2","hasChanged","groupBySingle","_groupById","newItems","newGrouped","newItem","debugMemoFailure","prevProps","nextProps","throwError","set1","set2","finalSet","titleFirst","numberFormats","label","numberFormat","setNumberFormat","separator","getNumberFormat","toRelaxedNumber","currencyToInteger","toRelaxedInteger","integerToCurrency","amountToCurrency","amountToPrettyCurrency","semverToNumber"],"mappings":"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,EAAuBf,QAAQ,CAAC7B,KAAT,CAAeJ,QAAtC;AADK,SAA5C,CADK,EAILtC,KAJF;AAKD,OATD,MASO;AACL;AACA;AACAoF,YAAI,GAAGb,QAAQ,CAAC3B,IAAT,CAAckE,SAAd,EAAyB9G,KAAhC;AACD;AACF;;AACD,WAAOzE,SAAP;AACD;;AAhDwC;;AAmD3C,MAAMgW,IAAN,SAAmBP,QAAnB,CAA4B;AAC1B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACExa,aAAW,CAAC4C,MAAD,EAASM,OAAO,GAAG,EAAnB,EAAuB;AAChC,UAAM6X,IAAI,CAACN,eAAX,EAA4B7X,MAA5B,EAAoCM,OAApC;AACD;;AACDnC,KAAG,CAACR,IAAD,EAAOiJ,KAAP,EAAcwR,SAAS,GAAG,EAA1B,EAA8B;AAC/B,QAAI9X,OAAO,GAAGwX,wEAAgB,CAAC,KAAKxX,OAAN,CAA9B;AACA,QAAI4I,QAAQ,GAAG,KAAKA,QAApB;;AACA,QAAIvL,IAAI,KAAK,UAAb,EAAyB;AACvB,UAAIiJ,KAAK,KAAK,KAAKsC,QAAf,IAA2B,CAACkP,SAAS,CAACpH,aAA1C,E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;AACvB,UAAMuE,MAAM,GAAG,IAAIG,eAAJ,CAAoB,KAAK/O,MAAL,CAAYqK,IAAhC,EAAsCpB,IAAtC,CAAf;;AACA,WAAO,CAAC2F,MAAM,CAACjG,IAAf,EAAqB;AACnB,YAAM+E,SAAS,GAAG,MAAM,KAAKT,kBAAL,CAAwB2B,MAAM,CAAChI,KAA/B,CAAxB;AACA,YAAMmS,SAAS,GAAGnK,MAAM,CAAChI,KAAzB,CAFmB,CAGnB;;AACAgI,YAAM,CAACpF,IAAP,CAAYkE,SAAZ;;AACA,aACE,EAAEA,SAAS,IAAIA,SAAS,CAACxB,UAAzB,KACA,CAAC0C,MAAM,CAACjG,IADR,IAEAiG,MAAM,CAAChI,KAAP,CAAa2E,OAAb,CAAqBwN,SAArB,CAHF,EAIE;AACAnK,cAAM,CAACpF,IAAP;AACD;AACF;AACF;;AACDqF,qBAAmB,GAAG;AACpB,WAAO,CAAC,EAAE,KAAK7O,MAAL,CAAYqK,IAAZ,IAAoB,KAAKrK,MAAL,CAAYqK,IAAZ,CAAiBR,UAAvC,CAAR;AACD;;AACDiF,sBAAoB,GAAG;AACrB,WAAO,CAAC,EAAE,KAAK9O,MAAL,CAAYqK,IAAZ,IAAoB,KAAKrK,MAAL,CAAYqK,IAAZ,CAAiBW,WAAvC,CAAR;AACD;;AAjCmC;;AAoCtC,MAAMgO,QAAN,SAAuBV,YAAvB,CAAoC;AAClC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACElb,aAAW,CAACkD,OAAO,GAAG,EAAX,EAAe;AACxB,UAAMA,OAAN;AACA,SAAK2Y,MAAL,GAAc,EAAd;AACA,SAAKC,OAAL,GAAe,EAAf;;AACA,SAAK,MAAMvb,IAAX,IAAmB,CAAC,QAAD,EAAW,SAAX,CAAnB,EAA0C;AACxC,YAAMwb,GAAG,GAAG7Y,OAAO,CAAC3C,IAAD,CAAnB;;AACA,UAAIwb,GAAJ,EAAS;AACP,aAAKxb,IAAL,IAAawb,GAAG,CAACjV,GAAJ,CAAQkV,QAAQ,IAAI;AAC/B,cAAIA,QAAQ,YAAYjB,IAAxB,EAA8B;AAC5B,mBAAOiB,QAAQ,CAACjb,GAAT,CAAa,UAAb,EAAyB,KAAK+K,QAA9B,CAAP;AACD,WAFD,MAEO;AACL,mBAAO,IAAIiP,IAAJ,CAASiB,QAAT,EAAmB;AACxBlQ,sBAAQ,EAAE,KAAKA;AADS,aAAnB,CAAP;AAGD;AACF,SARY,CAAb;AASD;AACF;;AACD,SAAK,MAAMvL,IAAX,IAAmB,CAAC,QAAD,EAAW,SAAX,CAAnB,EAA0C;AACxC,YAAMwb,GAAG,GAAG7Y,OAAO,CAAC3C,IAAD,CAAnB;;AACA,UAAIwb,GAAJ,EAAS;AACP,aAAKxb,IAAL,IACEwb,GAAG,YAAY3I,KAAf,GACI2I,GAAG,CAAChb,GAAJ,CAAQ,UAAR,EAAoB,KAAK+K,QAAzB,CADJ,GAEI,IAAIsH,KAAJ,CAAU;AACR3C,eAAK,EAAEsL,GADC;AAERjQ,kBAAQ,EAAE,KAAKA;AAFP,SAAV,CAHN;AAOD,OARD,MAQO;AACL,aAAKvL,IAAL,IAAa,IAAI6S,KAAJ,CAAU;AACrBtH,kBAAQ,EAAE,KAAKA;AADM,SAAV,CAAb;AAGD;AACF;;AACD,SAAK8B,WAAL,GACE,KAAKiO,MAAL,CAAY9J,KAAZ,CAAkBkK,IAAI,IAAIA,IAAI,CAACrO,WAA/B,KACA,KAAKkO,OAAL,CAAa/J,KAAb,CAAmBkK,IAAI,IAAIA,IAAI,CAACrO,WAAhC,CADA,IAEA,KAAKsO,MAAL,CAAYtO,WAFZ,IAGA,KAAKuO,OAAL,CAAavO,WAJf;AAKA,SAAKnB,UAAL,GAAkB,KAAKoP,MAAL,CAAY/I,IAAZ,CAAiBmJ,IAAI,IAAIA,IAAI,CAACxP,UAA9B,CAAlB;AACA,SAAK0O,gBAAL,GAAwB,CACtBxM,GAAG,CAAC,GAAG,KAAKkN,MAAT,CADmB,EAEtB7N,QAAQ,CAAC,GAAG,KAAK8N,OAAT,CAFc,EAGtBnN,GAAG,CAAC,KAAKuN,MAAN,CAHmB,EAItBlO,QAAQ,CAAC,KAAKmO,OAAN,CAJc,EAKtBV,MAAM,EALgB,EAMtB3O,MANsB,CAMf,CAACC,IAAD,EAAOC,IAAP,KAAgBA,IAAI,CAAC;AAAEC,UAAI,EAAEF,IAAR;AAAcjB,cAAQ,EAAE,KAAKA;AAA7B,KAAD,CANL,EAMgD/G,SANhD,CAAxB;AAOD;;AACD4J,KAAG,CAACpO,IAAD,EAAOiJ,KAAP,EAAc;AACf,UAAMqS,MAAM,GAAG,KAAKA,MAAL,CAAY9V,KAAZ,EAAf;AACA,UAAM+V,OAAO,GAAG,KAAKA,OAAL,CAAa/V,KAAb,EAAhB;AACA,QAAImW,MAAM,GAAG,KAAKA,MAAlB;AACA,QAAIC,OAAO,GAAG,KAAKA,OAAnB;;AACA,YAAQ5b,IAAR;AACE,WAAK,OAAL;AACEsb,cAAM,CAAC/V,IAAP,CAAY0D,KAAZ;AACA;;AACF,WAAK,QAAL;AACEsS,eAAO,CAAChW,IAAR,CAAa0D,KAAb;AACA;;AACF,WAAK,OAAL;AACE0S,cAAM,GAAG,KAAKA,MAAL,CAAYvN,GAAZ,CAAgBnF,KAAhB,CAAT;AACA;;AACF,WAAK,QAAL;AACE2S,eAAO,GAAG,KAAKA,OAAL,CAAaxN,GAAb,CAAiBnF,KAAjB,CAAV;AACA;AAZJ;;AAcA,WAAO,IAAIoS,QAAJ,CAAa;AAClB9P,cAAQ,EAAE,KAAKA,QADG;AAElB3K,UAAI,EAAE,KAAKA,IAFO;AAGlB0a,YAHkB;AAIlBC,aAJkB;AAKlBI,YALkB;AAMlBC;AANkB,KAAb,CAAP;AAQD;;AACDjb,QAAM,CAACX,IAAD,EAAOiJ,KAAP,EAAc;AAClB,QAAIqS,MAAM,GAAG,KAAKA,MAAlB;AACA,QAAIC,OAAO,GAAG,KAAKA,OAAnB;AACA,QAAII,MAAM,GAAG,KAAKA,MAAlB;AACA,QAAIC,OAAO,GAAG,KAAKA,OAAnB;;AACA,YAAQ5b,IAAR;AACE,WAAK,OAAL;AACEsb,cAAM,GAAGA,MAAM,CAAC3Q,MAAP,CAAc+Q,IAAI,IAAIA,IAAI,KAAKzS,KAA/B,CAAT;AACA;;AACF,WAAK,QAAL;AACEsS,eAAO,GAAGA,OAAO,CAAC5Q,MAAR,CAAe+Q,IAAI,IAAIA,IAAI,KAAKzS,KAAhC,CAAV;AACA;;AACF,WAAK,OAAL;AACE0S,cAAM,GAAG,KAAKA,MAAL,CAAYhb,MAAZ,CAAmBsI,KAAnB,CAAT;AACA;;AACF,WAAK,QAAL;AACE2S,eAAO,GAAG,KAAKA,OAAL,CAAajb,MAAb,CAAoBsI,KAApB,CAAV;AACA;AAZJ;;AAcA,WAAO,IAAIoS,QAAJ,CAAa;AAClB9P,cAAQ,EAAE,KAAKA,QADG;AAElB3K,UAAI,EAAE,KAAKA,IAFO;AAGlB0a,YAHkB;AAIlBC,aAJkB;AAKlBI,YALkB;AAMlBC;AANkB,KAAb,CAAP;AAQD;;AACDpb,KAAG,CAACR,IAAD,EAAOiJ,KAAP,EAActG,OAAO,GAAG,EAAxB,EAA4B;AAC7B,QAAI4I,QAAQ,GAAG,KAAKA,QAApB;AACA,QAAI+P,MAAM,GAAG,KAAKA,MAAlB;AACA,QAAIC,OAAO,GAAG,KAAKA,OAAnB;AACA,QAAII,MAAM,GAAG,KAAKA,MAAlB;AACA,QAAIC,OAAO,GAAG,KAAKA,OAAnB;;AACA,YAAQ5b,IAAR;AACE,WAAK,UAAL;AACE,YAAIiJ,KAAK,KAAK,KAAKsC,QAAf,IAA2B,CAAC5I,OAAO,CAAC0Q,aAAxC,EAAuD,OAAO,IAAP,CAAvD,KACK,IAAI1Q,OAAO,CAAC0Q,aAAZ,EAA2B;AAC9BiI,gBAAM,GAAGA,MAAM,CAAC/U,GAAP,CAAWmV,IAAI,IAAIA,IAAI,CAAClb,GAAL,CAAS,UAAT,EAAqByI,KAArB,EAA4BtG,OAA5B,CAAnB,CAAT;AACA4Y,iBAAO,GAAGA,OAAO,CAAChV,GAAR,CAAYmV,IAAI,IAAIA,IAAI,CAAClb,GAAL,CAAS,UAAT,EAAqByI,KAArB,EAA4BtG,OAA5B,CAApB,CAAV;AACAgZ,gBAAM,GAAGA,MAAM,CAACnb,GAAP,CAAW,UAAX,EAAuByI,KAAvB,EAA8BtG,OAA9B,CAAT;AACAiZ,iBAAO,GAAGA,OAAO,CAACpb,GAAR,CAAY,UAAZ,EAAwByI,KAAxB,EAA+BtG,OAA/B,CAAV;AACD;AACD4I,gBAAQ,GAAGtC,KAAX;AACA;;AACF,WAAK,QAAL;AACEqS,cAAM,GAAGrS,KAAT;AACA;;AACF,WAAK,SAAL;AACEsS,eAAO,GAAGtS,KAAV;AACA;;AACF,WAAK,QAAL;AACE0S,cAAM,GAAG1S,KAAT;AACA;;AACF,WAAK,SAAL;AACE2S,eAAO,GAAG3S,KAAV;AACA;AAtBJ;;AAwBA,WAAO,IAAIoS,QAAJ,CAAa;AAClB9P,cADkB;AAElB3K,UAAI,EAAE,KAAKA,IAFO;AAGlB0a,YAHkB;AAIlBC,aAJkB;AAKlBI,YALkB;AAMlBC;AANkB,KAAb,CAAP;AAQD;;AAzRiC;AA4RpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASC,YAAT,CAAsBvQ,IAAtB,EAA4B;AAC1B,SAAO3I,OAAO,IAAI,IAAImZ,oBAAJ,CAAyBxQ,IAAzB,EAA+B3I,OAA/B,CAAlB;AACD;;AACD,MAAMmZ,oBAAN,SAAmC/K,QAAnC,CAA4C;AAC1CtR,aAAW,CAAC6L,IAAD,EAAOjJ,MAAP,EAAe;AACxB,UAAMiJ,IAAI,CAAC0F,OAAX,EAAoB3O,MAApB;;AACA,QAAI,KAAK6J,UAAT,EAAqB;AACnB,WAAK6P,mBAAL,GACEzQ,IAAI,CAACyQ,mBAAL,IAA4BD,oBAAoB,CAACE,0BADnD;;AAEA,UAAI,CAAC,KAAKD,mBAAV,EAA+B;AAC7B,cAAM,IAAI7N,6DAAJ,CACJ,+CACE,uFADF,GAEE,+EAFF,GAGE,qEAHF,GAIE,wEAJF,GAKE,6EALF,GAME,0DANF,GAOE,+BAPF,GAQE,iFARF,GASE,2EATF,GAUE,kDAXE,CAAN;AAaD;AACF;AACF;;AACD1N,KAAG,CAAC4R,CAAD,EAAInJ,KAAJ,EAAW;AACZ,WAAO,IAAI6S,oBAAJ,CACL;AACEC,yBAAmB,EAAE,KAAKA,mBAD5B;AAEE/K,aAAO,EAAE,KAAKA,OAAL,CAAazK,GAAb,CAAiB0K,MAAM,IAAIA,MAAM,CAACzQ,GAAP,CAAW,UAAX,EAAuByI,KAAvB,CAA3B;AAFX,KADK,EAKLlB,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkB,KAAK3F,MAAvB,CAAd,EAA8C;AAC5CqK,UAAI,EAAE,KAAKrK,MAAL,CAAYqK,IAAZ,IAAoB,KAAKrK,MAAL,CAAYqK,IAAZ,CAAiBlM,GAAjB,CAAqB,UAArB,EAAiCyI,KAAjC,CADkB;AAE5CsC,cAAQ,EAAEtC;AAFkC,KAA9C,CALK,CAAP;AAUD;;AACI,GAAJ2C,IAAI,CAACN,IAAI,GAAG,EAAR,EAAY;AACf,UAAM0F,OAAO,GAAG,KAAKA,OAAL,CAAazK,GAAb,CAAiB0K,MAAM,IAAI,IAAIG,eAAJ,CAAoBH,MAApB,EAA4B3F,IAA5B,CAA3B,CAAhB;;AACA,QAAI,KAAKjJ,MAAL,CAAYqK,IAAhB,EAAsB;AACpBsE,aAAO,CAACzL,IAAR,CAAa,IAAI6L,eAAJ,CAAoB,KAAK/O,MAAL,CAAYqK,IAAhC,EAAsCpB,IAAtC,CAAb;AACD;;AACD,QAAI0F,OAAO,CAACvN,MAAR,KAAmB,CAAvB,EAA0B;AAC1B,UAAMwY,UAAU,GAAG,CAAC,EAAE,CAAC,KAAK/P,UAAN,IAAoBZ,IAAI,CAACc,OAAzB,IAAoCd,IAAI,CAACa,GAA3C,CAApB;;AACA,QACE,CAAC+P,cAAc,CACblL,OADa,EAEbxM,SAFa,EAGbuD,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBsD,IAAlB,CAAd,EAAuC;AACrC2Q,gBADqC;AAErCE,eAAS,EAAE,CAF0B;AAGrCC,mBAAa,EAAE,KAAKL;AAHiB,KAAvC,CAHa,CADjB,EAUE;AACA;AACD;;AACD,QAAI9K,MAAM,GAAGa,kBAAkB,CAACd,OAAD,EAAU1F,IAAV,CAA/B;;AACA,WAAO2F,MAAP,EAAe;AACb,YAAMlB,SAAS,GAAG,MAAM,KAAKT,kBAAL,CAAwB2B,MAAM,CAAChI,KAA/B,CAAxB;AACA,YAAMoT,aAAa,GAAGpL,MAAM,CAAChI,KAA7B;;AACA,UAAI,EAAE8G,SAAS,KAAK,IAAd,IAAsBA,SAAS,KAAK,KAAK,CAAzC,GAA6C,KAAK,CAAlD,GAAsDA,SAAS,CAACxB,UAAlE,CAAJ,EAAmF;AACjF;AACA0C,cAAM,CAACpF,IAAP;AACD;;AACD,UACE,CAACqQ,cAAc,CACblL,OADa,EAEbqL,aAFa,EAGbtU,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBsD,IAAlB,CAAd,EAAuC;AACrC2Q,kBADqC;AAErCE,iBAAS,EAAE,CAF0B;AAGrCC,qBAAa,EAAE,KAAKL;AAHiB,OAAvC,CAHa,EAQbhM,SARa,CADjB,EAWE;AACA;AACD,OApBY,CAqBb;AACA;;;AACAkB,YAAM,GAAGa,kBAAkB,CAACd,OAAD,EAAU1F,IAAV,CAA3B;AACD;AACF;;AACD4F,qBAAmB,GAAG;AACpB;AACA,QAAI,CAAC,KAAK7O,MAAL,CAAYqK,IAAjB,EAAuB;AACrB,UAAI,KAAKsE,OAAL,CAAavN,MAAb,KAAwB,CAA5B,EAA+B,OAAO,KAAP;AAC/B,aAAO,KAAKuN,OAAL,CAAaQ,KAAb,CAAmBP,MAAM,IAAIA,MAAM,CAAC/E,UAApC,CAAP;AACD,KAHD,MAGO,IAAI,KAAK8E,OAAL,CAAavN,MAAb,KAAwB,CAA5B,EAA+B,OAAO,KAAKpB,MAAL,CAAYqK,IAAZ,CAAiBR,UAAxB;;AACtC,WAAO,KAAK7J,MAAL,CAAYqK,IAAZ,CAAiBR,UAAjB,IAA+B,KAAK8E,OAAL,CAAaQ,KAAb,CAAmBP,MAAM,IAAIA,MAAM,CAAC/E,UAApC,CAAtC;AACD;;AACDiF,sBAAoB,GAAG;AACrB,UAAMqB,eAAe,GAAG,KAAKxB,OAAL,CAAaQ,KAAb,CAAmBP,MAAM,IAAIA,MAAM,CAAC5D,WAApC,CAAxB;AACA,QAAI,CAAC,KAAKhL,MAAL,CAAYqK,IAAjB,EAAuB,OAAO8F,eAAP;AACvB,WAAO,KAAKnQ,MAAL,CAAYqK,IAAZ,CAAiBW,WAAjB,IAAgCmF,eAAvC;AACD;;AA9FyC;;AAgG5C,SAAS0J,cAAT,CAAwBlL,OAAxB,EAAiCqL,aAAjC,EAAgD1Z,OAAhD,EAAyDoN,SAAzD,EAAoE;AAClE,QAAMlE,IAAI,GAAGiG,kBAAkB,CAACd,OAAD,EAAUrO,OAAV,EAAmBoN,SAAnB,CAA/B;AACA,MAAI,CAAClE,IAAL,EAAW,OAAO,KAAP;AACX,MAAIwQ,aAAa,IAAIxQ,IAAI,CAAC5C,KAAL,CAAW2E,OAAX,CAAmByO,aAAnB,CAArB,EAAwD,OAAO,IAAP;AACxD,MAAIrL,OAAO,CAACuB,IAAR,CAAatB,MAAM,IAAIA,MAAM,CAACjG,IAA9B,CAAJ,EAAyC,OAAO,KAAP;AACzC,MAAIgG,OAAO,CAACQ,KAAR,CAAcP,MAAM,IAAIA,MAAM,CAAChI,KAAP,CAAa2E,OAAb,CAAqB/B,IAAI,CAAC5C,KAA1B,CAAxB,CAAJ,EAA+D,OAAO,IAAP;AAC/DtG,SAAO,CAACwZ,SAAR;;AACA,MAAIxZ,OAAO,CAACyZ,aAAR,IAAyB,CAACzZ,OAAO,CAACsZ,UAAlC,IAAgDtZ,OAAO,CAACwZ,SAAR,GAAoBxZ,OAAO,CAACyZ,aAAhF,EAA+F;AAC7F,WAAO,KAAP;AACD,GATiE,CAUlE;;;AACA,QAAME,IAAI,GAAGrK,kBAAkB,CAACjB,OAAD,EAAUrO,OAAV,CAA/B,CAXkE,CAYlE;;AACAqO,SAAO,CAAC5H,OAAR,CAAgB6H,MAAM,IAAI;AACxB;AACA;AACA,QAAIqL,IAAI,CAACrT,KAAL,CAAW2E,OAAX,CAAmBqD,MAAM,CAAChI,KAA1B,CAAJ,EAAsC;AACtCgI,UAAM,CAACpF,IAAP,CAAY;AAAE0C,gBAAU,EAAE+N,IAAI,CAACrT;AAAnB,KAAZ;AACD,GALD,EAbkE,CAmBlE;;AACA,SAAOiT,cAAc,CAAClL,OAAD,EAAUqL,aAAV,EAAyB1Z,OAAzB,CAArB;AACD;;AAED,MAAM4Z,uBAAN,SAAsCnL,eAAtC,CAAsD;AACpD3R,aAAW,CAAC4R,SAAD,EAAYC,OAAZ,EAAqB;AAC9B,UAAMD,SAAN,EAAiBC,OAAjB;AACA,SAAKkL,YAAL,GAAoB,KAAKvT,KAAzB;AACA,SAAK4C,IAAL;AACD;;AALmD;;AAOtD,MAAM4Q,0BAAN,SAAyCna,KAAzC,CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASoa,aAAT,CAAuBpR,IAAvB,EAA6B;AAC3B,SAAO3I,OAAO,IAAI,IAAIga,qBAAJ,CAA0BrR,IAA1B,EAAgC3I,OAAhC,CAAlB;AACD;;AACD,MAAMga,qBAAN,SAAoC5L,QAApC,CAA6C;AAC3CtR,aAAW,CAAC6L,IAAD,EAAOjJ,MAAP,EAAe;AACxB,UAAM,EAAN,EAAUA,MAAV;AACA,SAAKmJ,WAAL,GAAmBF,IAAI,CAACE,WAAxB;;AACA,QAAInJ,MAAM,CAACqK,IAAP,IAAe,CAACrK,MAAM,CAACqK,IAAP,CAAYW,WAAhC,EAA6C;AAC3C,YAAM,IAAIa,6DAAJ,CACJ,yFACE,iFAFE,CAAN;AAID;AACF;AACD;;;AACA1N,KAAG,CAAC4R,CAAD,EAAInJ,KAAJ,EAAW;AACZ,WAAO,IAAI0T,qBAAJ,CACL;AACEnR,iBAAW,EAAE,KAAKA;AADpB,KADK,EAILzD,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkB,KAAK3F,MAAvB,CAAd,EAA8C;AAC5CqK,UAAI,EAAE,KAAKrK,MAAL,CAAYqK,IAAZ,IAAoB,KAAKrK,MAAL,CAAYqK,IAAZ,CAAiBlM,GAAjB,CAAqB,UAArB,EAAiCyI,KAAjC,CADkB;AAE5CsC,cAAQ,EAAEtC;AAFkC,KAA9C,CAJK,CAAP;AASD;;AACD2C,MAAI,CAACN,IAAI,GAAG,EAAR,EAAY;AACd,WAAOA,IAAI,CAACc,OAAL,GAAe,KAAKwQ,UAAL,CAAgBtR,IAAhB,CAAf,GAAuC,KAAKuR,UAAL,CAAgBvR,IAAhB,CAA9C;AACD;;AACD4F,qBAAmB,GAAG;AACpB,WAAO,CAAC,EAAE,KAAK7O,MAAL,CAAYqK,IAAZ,IAAoB,KAAKrK,MAAL,CAAYqK,IAAZ,CAAiBR,UAAvC,CAAR;AACD;;AACDiF,sBAAoB,GAAG;AACrB,WAAO,IAAP;AACD;;AACU,GAAV0L,UAAU,CAACvR,IAAI,GAAG,EAAR,EAAY;AACrB,QAAI,CAAC,KAAKjJ,MAAL,CAAYqK,IAAjB,EAAuB,OADF,CAErB;AACA;AACA;AACA;;AACA,QAAIoQ,cAAc,GAAGxR,IAAI,CAACK,KAA1B;;AACA,QAAIL,IAAI,CAACK,KAAT,EAAgB;AACdmR,oBAAc,GAAGxR,IAAI,CAACK,KAAL,CAAW8B,QAAX,CAAoB,KAAKjC,WAAzB,EAAsC,aAAtC,CAAjB;AACD;;AACD,QAAIuR,YAAY,GAAGzR,IAAI,CAACa,GAAxB;;AACA,QAAIb,IAAI,CAACa,GAAT,EAAc;AACZ4Q,kBAAY,GAAGzR,IAAI,CAACa,GAAL,CAASiC,GAAT,CAAa,KAAK5C,WAAlB,EAA+B,aAA/B,CAAf;AACD;;AACD,UAAMyF,MAAM,GAAG,IAAIsL,uBAAJ,CACb,KAAKla,MAAL,CAAYqK,IADC,EAEb3E,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBsD,IAAlB,CAAd,EAAuC;AAAEK,WAAK,EAAEmR,cAAT;AAAyB3Q,SAAG,EAAE4Q;AAA9B,KAAvC,CAFa,CAAf;AAIA,QAAIhN,SAAJ,CAlBqB,CAmBrB;AACA;;AACA,WAAOkB,MAAM,CAACuL,YAAd,EAA4B;AAC1B;AACA,aAAO,CAACvL,MAAM,CAACjG,IAAR,IAAgBiG,MAAM,CAACuL,YAAP,CAAoBrQ,GAApB,CAAwB4C,cAAxB,CAAuCkC,MAAM,CAAChI,KAA9C,CAAvB,EAA6E;AAC3E,YAAIgI,MAAM,CAACuL,YAAP,CAAoBxJ,QAApB,GAA+B,KAAKxH,WAAxC,EAAqD;AACnD,gBAAM,IAAIiR,0BAAJ,CACH,0EAAD,GACE,KAAKjR,WAFH,CAAN;AAID;;AACD,YAAIyF,MAAM,CAAChI,KAAP,CAAakD,GAAb,CAAiBuC,OAAjB,CAAyBuC,MAAM,CAACuL,YAAP,CAAoBrQ,GAA7C,CAAJ,EAAuD;AACrD,gBAAM+M,IAAI,GAAGjI,MAAM,CAAChI,KAAP,CAAakD,GAAb,CAAiBgH,OAAjB,KAA6BlC,MAAM,CAACuL,YAAP,CAAoBrQ,GAApB,CAAwBgH,OAAxB,EAA1C;AACAlC,gBAAM,CAACuL,YAAP,GAAsBvL,MAAM,CAACuL,YAAP,CAAoBhc,GAApB,CACpB,UADoB,EAEpByQ,MAAM,CAACuL,YAAP,CAAoBxJ,QAApB,GAA+BkG,IAFX,CAAtB;AAID;;AACDjI,cAAM,CAACpF,IAAP;AACD,OAjByB,CAkB1B;AACA;;;AACA,UAAIP,IAAI,CAACK,KAAL,IAAcsF,MAAM,CAACuL,YAAP,CAAoBrQ,GAApB,CAAwBwB,QAAxB,CAAiCrC,IAAI,CAACK,KAAtC,CAAlB,EAAgE;AAC9DsF,cAAM,CAACuL,YAAP,GAAsBvL,MAAM,CAAChI,KAA7B;AACAgI,cAAM,CAACpF,IAAP;AACA;AACD,OAxByB,CAyB1B;AACA;;;AACA,UACE,CAACkE,SAAS,KAAK,IAAd,IAAsBA,SAAS,KAAK,KAAK,CAAzC,GAA6C,KAAK,CAAlD,GAAsDA,SAAS,CAACxB,UAAjE,KACA0C,MAAM,CAACuL,YAAP,CAAoBrQ,GAApB,CAAwBwB,QAAxB,CAAiCoC,SAAS,CAACxB,UAA3C,CAFF,EAGE;AACA0C,cAAM,CAACuL,YAAP,GAAsBvL,MAAM,CAAChI,KAA7B;AACAgI,cAAM,CAACpF,IAAP;AACA;AACD,OAlCyB,CAmC1B;;;AACA,UAAIP,IAAI,CAACa,GAAL,IAAY8E,MAAM,CAACuL,YAAnB,IAAmCvL,MAAM,CAACuL,YAAP,CAAoB9N,OAApB,CAA4BpD,IAAI,CAACa,GAAjC,CAAvC,EAA8E;AAC5E;AACD;;AACD,UAAI8E,MAAM,CAACuL,YAAP,CAAoBxJ,QAApB,GAA+B,KAAKxH,WAAxC,EAAqD;AACnD,cAAM,IAAIiR,0BAAJ,CACH,0EAAD,GACE,KAAKjR,WAFH,CAAN;AAID;;AACDuE,eAAS,GAAG,MAAM,KAAKT,kBAAL,CAAwB2B,MAAM,CAACuL,YAA/B,CAAlB;;AACA,UACE,CAACzM,SAAS,KAAK,IAAd,IAAsBA,SAAS,KAAK,KAAK,CAAzC,GAA6C,KAAK,CAAlD,GAAsDA,SAAS,CAACxB,UAAjE,KACA0C,MAAM,CAACuL,YAAP,CAAoBzN,cAApB,CAAmCgB,SAAS,CAACxB,UAA7C,CAFF,EAGE;AACA,cAAM,IAAIjM,KAAJ,CACJ,+EACE,gDAFE,CAAN;AAID;;AACD2O,YAAM,CAACuL,YAAP,GAAsBvL,MAAM,CAAChI,KAA7B;AACAgI,YAAM,CAACpF,IAAP;AACD;AACF;;AACU,GAAV+Q,UAAU,CAACtR,IAAI,GAAG,EAAR,EAAY;AACrB,QAAI,CAAC,KAAKjJ,MAAL,CAAYqK,IAAjB,EAAuB,OADF,CAErB;AACA;AACA;AACA;;AACA,QAAIoQ,cAAc,GAAGxR,IAAI,CAACK,KAA1B;;AACA,QAAIL,IAAI,CAACK,KAAT,EAAgB;AACdmR,oBAAc,GAAGxR,IAAI,CAACK,KAAL,CAAW8B,QAAX,CAAoB,KAAKjC,WAAzB,EAAsC,aAAtC,CAAjB;AACD;;AACD,QAAIuR,YAAY,GAAGzR,IAAI,CAACa,GAAxB;;AACA,QAAIb,IAAI,CAACa,GAAT,EAAc;AACZ4Q,kBAAY,GAAGzR,IAAI,CAACa,GAAL,CAASiC,GAAT,CAAa,KAAK5C,WAAlB,EAA+B,aAA/B,CAAf;AACD;;AACD,UAAMyF,MAAM,GAAG,IAAIsL,uBAAJ,CACb,KAAKla,MAAL,CAAYqK,IADC,EAEb3E,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBsD,IAAlB,CAAd,EAAuC;AAAEK,WAAK,EAAEmR,cAAT;AAAyB3Q,SAAG,EAAE4Q;AAA9B,KAAvC,CAFa,CAAf;AAIA,QAAIhN,SAAJ,CAlBqB,CAmBrB;AACA;;AACA,WAAOkB,MAAM,CAACuL,YAAd,EAA4B;AAC1B;AACA,aAAO,CAACvL,MAAM,CAACjG,IAAR,IAAgBiG,MAAM,CAACuL,YAAP,CAAoB7L,eAApB,CAAoCM,MAAM,CAAChI,KAAP,CAAakD,GAAjD,CAAvB,EAA8E;AAC5E,YAAI8E,MAAM,CAACuL,YAAP,CAAoBxJ,QAApB,GAA+B,KAAKxH,WAAxC,EAAqD;AACnD,gBAAM,IAAIiR,0BAAJ,CACH,0EAAD,GACE,KAAKjR,WAFH,CAAN;AAID;;AACD,YACEyF,MAAM,CAAChI,KAAP,CAAa0E,QAAb,CAAsBsD,MAAM,CAACuL,YAA7B,KACAvL,MAAM,CAAChI,KAAP,CAAakD,GAAb,CAAiBuC,OAAjB,CAAyBuC,MAAM,CAACuL,YAAP,CAAoBrQ,GAA7C,CAFF,EAGE;AACA,cAAI8E,MAAM,CAAChI,KAAP,CAAakD,GAAb,CAAiBuC,OAAjB,CAAyBuC,MAAM,CAACuL,YAAP,CAAoBrQ,GAA7C,CAAJ,EAAuD;AACrD;AACA;AACA8E,kBAAM,CAACuL,YAAP,GAAsBvL,MAAM,CAAChI,KAA7B;AACD,WAJD,MAIO;AACL,kBAAMiQ,IAAI,GAAGjI,MAAM,CAACuL,YAAP,CAAoBrJ,OAApB,KAAgClC,MAAM,CAAChI,KAAP,CAAakK,OAAb,EAA7C;AACAlC,kBAAM,CAACuL,YAAP,GAAsBvL,MAAM,CAAChI,KAAP,CAAazI,GAAb,CAAiB,UAAjB,EAA6ByQ,MAAM,CAACuL,YAAP,CAAoBxJ,QAApB,GAA+BkG,IAA5D,CAAtB;AACD;AACF;;AACDjI,cAAM,CAACpF,IAAP;AACD,OAvByB,CAwB1B;AACA;;;AACA,UAAIP,IAAI,CAACK,KAAL,IAAcsF,MAAM,CAACuL,YAAP,CAAoBrQ,GAApB,CAAwBwB,QAAxB,CAAiCrC,IAAI,CAACK,KAAtC,CAAlB,EAAgE;AAC9D;AACD;;AACD,UACEoE,SAAS,IACTA,SAAS,CAACxB,UADV,IAEA0C,MAAM,CAACuL,YAAP,CAAoBrQ,GAApB,CAAwBwB,QAAxB,CAAiCoC,SAAS,CAACxB,UAA3C,CAHF,EAIE;AACA0C,cAAM,CAACuL,YAAP,GAAsBvL,MAAM,CAAChI,KAA7B;AACAgI,cAAM,CAACpF,IAAP;AACA;AACD,OArCyB,CAsC1B;;;AACA,UAAIP,IAAI,CAACa,GAAL,IAAY8E,MAAM,CAACuL,YAAnB,IAAmCvL,MAAM,CAACuL,YAAP,CAAoB9N,OAApB,CAA4BpD,IAAI,CAACa,GAAjC,CAAvC,EAA8E;AAC5E8E,cAAM,CAACuL,YAAP,GAAsBvL,MAAM,CAAChI,KAA7B;AACAgI,cAAM,CAACpF,IAAP;AACA;AACD;;AACD,UAAIoF,MAAM,CAACuL,YAAP,CAAoBxJ,QAApB,GAA+B,KAAKxH,WAAxC,EAAqD;AACnD,cAAM,IAAIiR,0BAAJ,CACH,0EAAD,GACE,KAAKjR,WAFH,CAAN;AAID;;AACDuE,eAAS,GAAG,MAAM,KAAKT,kBAAL,CAAwB2B,MAAM,CAACuL,YAA/B,CAAlB;;AACA,UACEzM,SAAS,IACTA,SAAS,CAACxB,UADV,IAEA0C,MAAM,CAACuL,YAAP,CAAoBrQ,GAApB,CAAwBwE,eAAxB,CAAwCZ,SAAS,CAACxB,UAAlD,CAHF,EAIE;AACA,cAAM,IAAIjM,KAAJ,CACJ,+EACE,gDAFE,CAAN;AAID;;AACD2O,YAAM,CAACuL,YAAP,GAAsBvL,MAAM,CAAChI,KAA7B;AACAgI,YAAM,CAACpF,IAAP;AACD;AACF;;AArM0C;;AAwM7C,MAAMmR,0BAAN,SAAyC1a,KAAzC,CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS2a,aAAT,CAAuB3R,IAAvB,EAA6B;AAC3B,SAAO3I,OAAO,IAAI,IAAIua,qBAAJ,CAA0B5R,IAA1B,EAAgC3I,OAAhC,CAAlB;AACD;;AACD,MAAMua,qBAAN,SAAoCnM,QAApC,CAA6C;AAC3CtR,aAAW,CAAC6L,IAAD,EAAOjJ,MAAP,EAAe;AACxB,UAAM,EAAN,EAAUA,MAAV;AACA,SAAK8a,OAAL,GAAe7R,IAAI,CAAC6R,OAApB;AACA,SAAK3R,WAAL,GAAmBF,IAAI,CAACE,WAAxB;;AACA,QAAInJ,MAAM,CAACqK,IAAP,IAAe,CAACrK,MAAM,CAACqK,IAAP,CAAYW,WAAhC,EAA6C;AAC3C,YAAM,IAAIa,6DAAJ,CACJ,yFACE,gFAFE,CAAN;AAID;AACF;AACD;;;AACA1N,KAAG,CAAC4R,CAAD,EAAInJ,KAAJ,EAAW;AACZ,WAAO,IAAIiU,qBAAJ,CACL;AACE1R,iBAAW,EAAE,KAAKA,WADpB;AAEE2R,aAAO,EAAE,KAAKA;AAFhB,KADK,EAKLpV,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkB,KAAK3F,MAAvB,CAAd,EAA8C;AAC5CqK,UAAI,EAAE,KAAKrK,MAAL,CAAYqK,IAAZ,IAAoB,KAAKrK,MAAL,CAAYqK,IAAZ,CAAiBlM,GAAjB,CAAqB,UAArB,EAAiCyI,KAAjC,CADkB;AAE5CsC,cAAQ,EAAEtC;AAFkC,KAA9C,CALK,CAAP;AAUD;;AACI,GAAJ2C,IAAI,CAACN,IAAI,GAAG,EAAR,EAAY;AACf,QAAI,CAAC,KAAKjJ,MAAL,CAAYqK,IAAjB,EAAuB;AACvB,UAAMN,OAAO,GAAGd,IAAI,CAACc,OAAL,IAAgB,KAAhC,CAFe,CAGf;AACA;AACA;AACA;;AACA,QAAI0Q,cAAc,GAAGxR,IAAI,CAACK,KAA1B;;AACA,QAAIL,IAAI,CAACK,KAAT,EAAgB;AACdmR,oBAAc,GAAGxR,IAAI,CAACK,KAAL,CAAW8B,QAAX,CAAoB,KAAKjC,WAAzB,EAAsC,aAAtC,CAAjB;AACD,KAVc,CAWf;;;AACA,QAAIuR,YAAY,GAAGzR,IAAI,CAACa,GAAxB;;AACA,QAAIb,IAAI,CAACa,GAAT,EAAc;AACZ4Q,kBAAY,GAAGzR,IAAI,CAACa,GAAL,CAASiC,GAAT,CAAa,KAAK5C,WAAlB,EAA+B,aAA/B,CAAf;AACD;;AACD,UAAMyF,MAAM,GAAG,IAAIG,eAAJ,CACb,KAAK/O,MAAL,CAAYqK,IADC,EAEb3E,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBsD,IAAlB,CAAd,EAAuC;AAAEK,WAAK,EAAEmR,cAAT;AAAyB3Q,SAAG,EAAE4Q;AAA9B,KAAvC,CAFa,CAAf;AAIA,QAAIhN,SAAJ;AACA,UAAMqN,WAAW,GAAG,EAApB;;AACA,WAAO,CAACnM,MAAM,CAACjG,IAAR,IAAiBoS,WAAW,CAAC,CAAD,CAAX,IAAkBA,WAAW,CAAC,CAAD,CAAX,CAAe,CAAf,CAA1C,EAA8D;AAC5D;AACN;AACA;AACA;AACA;AACA;AACM,UAAI,EAAEA,WAAW,CAAC,CAAD,CAAX,IAAkBA,WAAW,CAAC,CAAD,CAAX,CAAe,CAAf,CAApB,CAAJ,EAA4C;AAC1C;AACAA,mBAAW,CAAC7X,IAAZ,CAAiB,KAAK8X,SAAL,CAAepM,MAAM,CAAChI,KAAtB,EAA6BmD,OAA7B,CAAjB;AACA6E,cAAM,CAACpF,IAAP;AACD;;AACD,aACE,CAACoF,MAAM,CAACjG,IAAR,KACCoB,OAAO,GACJgR,WAAW,CAAC,CAAD,CAAX,CAAe7K,IAAf,CAAoBlE,IAAI,IAAIA,IAAI,CAACsC,eAAL,CAAqBM,MAAM,CAAChI,KAAP,CAAakD,GAAlC,CAA5B,CADI,GAEJiR,WAAW,CAAC,CAAD,CAAX,CAAe7K,IAAf,CAAoBlE,IAAI,IAAIA,IAAI,CAACU,cAAL,CAAoBkC,MAAM,CAAChI,KAA3B,CAA5B,CAHJ,CADF,EAKE;AACAmU,mBAAW,CAAC7X,IAAZ,CAAiB,KAAK8X,SAAL,CAAepM,MAAM,CAAChI,KAAtB,EAA6BmD,OAA7B,CAAjB;AACA6E,cAAM,CAACpF,IAAP;AACD;;AACD,UAAIyR,YAAY,GAAGF,WAAW,CAAC,CAAD,CAAX,IAAkBA,WAAW,CAAC,CAAD,CAAX,CAAe,CAAf,CAArC;AACA,UAAIG,WAAW,GAAG,CAAC,CAAnB;AACA,UAAIC,mBAAmB,GAAG,CAA1B;AACA,UAAIC,SAAS,GAAG,CAAC,CAAjB;AACA,UAAIC,iBAAiB,GAAG,CAAxB,CAzB4D,CA0B5D;;AACA,WAAK,MAAMC,MAAX,IAAqBP,WAArB,EAAkC;AAChCG,mBAAW;AACXE,iBAAS,GAAG,CAAC,CAAb;;AACA,aAAK,MAAMpP,IAAX,IAAmBsP,MAAnB,EAA2B;AACzBF,mBAAS;AACT,cAAIG,kBAAJ;;AACA,cAAIxR,OAAJ,EAAa;AACXwR,8BAAkB,GAChBvP,IAAI,CAACK,OAAL,CAAa4O,YAAb,KACCjP,IAAI,CAACT,OAAL,CAAa0P,YAAb,KAA8BjP,IAAI,CAAC2E,QAAL,GAAgBsK,YAAY,CAACtK,QAF9D;AAGD,WAJD,MAIO;AACL4K,8BAAkB,GAChBvP,IAAI,CAACV,QAAL,CAAc2P,YAAd,KACCjP,IAAI,CAACT,OAAL,CAAa0P,YAAb,KAA8BjP,IAAI,CAAC2E,QAAL,GAAgBsK,YAAY,CAACtK,QAF9D;AAGD;;AACD,cAAI4K,kBAAJ,EAAwB;AACtBN,wBAAY,GAAGjP,IAAf;AACAmP,+BAAmB,GAAGD,WAAtB;AACAG,6BAAiB,GAAGD,SAApB;AACA;AACD;AACF;AACF;;AACDL,iBAAW,CAACI,mBAAD,CAAX,CAAiCpK,MAAjC,CAAwCsK,iBAAxC,EAA2D,CAA3D;;AACA,UAAIN,WAAW,CAACI,mBAAD,CAAX,CAAiC/Z,MAAjC,KAA4C,CAAhD,EAAmD;AACjD2Z,mBAAW,CAAChK,MAAZ,CAAmBoK,mBAAnB,EAAwC,CAAxC;AACD,OArD2D,CAsD5D;AACA;AACA;;;AACA,UACEzN,SAAS,IACTA,SAAS,CAACxB,UADV,IAEA+O,YAFA,IAGA,CAACO,WAAW,CAACP,YAAD,EAAehS,IAAf,CAHZ,IAIA,CAACwS,kBAAkB,CAACR,YAAD,EAAevN,SAAS,CAACxB,UAAzB,EAAqCjD,IAArC,CALrB,EAME;AACA;AACD,OAjE2D,CAkE5D;AACA;AACA;AACA;;;AACA,UAAIA,IAAI,CAACK,KAAL,IAAc2R,YAAY,CAACnR,GAAb,CAAiBwB,QAAjB,CAA0BrC,IAAI,CAACK,KAA/B,CAAlB,EAAyD;AACvD,YAAIS,OAAJ,EAAa;AACb;AACD,OAzE2D,CA0E5D;AACA;AACA;AACA;;;AACA,UAAId,IAAI,CAACa,GAAL,IAAYmR,YAAY,CAAC5O,OAAb,CAAqBpD,IAAI,CAACa,GAA1B,CAAhB,EAAgD;AAC9C,YAAIC,OAAJ,EAAa;AACb;AACD;;AACD,UAAIkR,YAAY,CAACtK,QAAb,GAAwB,KAAKxH,WAAjC,EAA8C;AAC5C,cAAM,IAAIwR,0BAAJ,CACH,0EAAD,GACE,KAAKxR,WAFH,CAAN;AAID;;AACDuE,eAAS,GAAG,MAAM,KAAKT,kBAAL,CAAwBgO,YAAxB,CAAlB;;AACA,UACEvN,SAAS,IACTA,SAAS,CAACxB,UADV,KAECjD,IAAI,CAACc,OAAL,GACGkR,YAAY,CAAC3M,eAAb,CAA6BZ,SAAS,CAACxB,UAAvC,CADH,GAEG+O,YAAY,CAACvO,cAAb,CAA4BgB,SAAS,CAACxB,UAAtC,CAJJ,CADF,EAME;AACA,cAAM,IAAIjM,KAAJ,CACJ,+EACE,gDAFE,CAAN;AAID;AACF;AACF;;AACD4O,qBAAmB,GAAG;AACpB,WAAO,CAAC,EAAE,KAAK7O,MAAL,CAAYqK,IAAZ,IAAoB,KAAKrK,MAAL,CAAYqK,IAAZ,CAAiBR,UAAvC,CAAR;AACD;;AACDiF,sBAAoB,GAAG;AACrB,WAAO,IAAP;AACD;;AACDkM,WAAS,CAAChP,IAAD,EAAOjC,OAAP,EAAgB;AACvB,UAAM8D,KAAK,GAAG,KAAKiN,OAAL,CAAa9O,IAAb,CAAd;AACA,QAAI0P,KAAJ;;AACA,QAAI7N,KAAK,CAACzM,MAAN,KAAiB,CAArB,EAAwB;AACtBsa,WAAK,GAAG,KAAR;AACD,KAFD,MAEO,IAAI7N,KAAK,CAACzM,MAAN,KAAiB,CAArB,EAAwB;AAC7Bsa,WAAK,GAAG1P,IAAI,CAAC2E,QAAL,KAAkB9C,KAAK,CAAC,CAAD,CAAL,CAAS8C,QAAnC;AACD,KAFM,MAEA;AACL+K,WAAK,GAAG1P,IAAI,CAAC2E,QAAL,KAAkB9C,KAAK,CAAC3D,MAAN,CAAa,CAACC,IAAD,EAAOC,IAAP,KAAgBD,IAAI,GAAGC,IAAI,CAACuG,QAAzC,EAAmD,CAAnD,CAA1B;AACD;;AACD,QAAI,CAAC+K,KAAL,EAAY;AACV,YAAM,IAAIzb,KAAJ,CACJ,uDACE,oDADF,GAEE,mEAFF,GAGE,oBAJE,CAAN;AAMD;;AACD4N,SAAK,CAAC6B,IAAN,CAAW2B,oEAAX;;AACA,QAAItH,OAAJ,EAAa;AACX8D,WAAK,CAAC9D,OAAN;AACD;;AACD,WAAO8D,KAAP;AACD;;AAnL0C;;AAqL7C,SAAS2N,WAAT,CAAqBxP,IAArB,EAA2B1L,OAA3B,EAAoC;AAClC,SAAO,CAAC,EAAEA,OAAO,CAACyJ,OAAR,GACNzJ,OAAO,CAACgJ,KAAR,IAAiB0C,IAAI,CAACV,QAAL,CAAchL,OAAO,CAACgJ,KAAtB,CADX,GAENhJ,OAAO,CAACwJ,GAAR,IAAekC,IAAI,CAACK,OAAL,CAAa/L,OAAO,CAACwJ,GAArB,CAFX,CAAR;AAGD;;AACD,SAAS2R,kBAAT,CAA4BzP,IAA5B,EAAkCE,UAAlC,EAA8C5L,OAA9C,EAAuD;AACrD,SAAO,CAAC,EAAEA,OAAO,CAACyJ,OAAR,GAAkBmC,UAAU,CAACQ,cAAX,CAA0BV,IAA1B,CAAlB,GAAoDE,UAAU,CAACoC,eAAX,CAA2BtC,IAA3B,CAAtD,CAAR;AACD;;;;;;;;;;;;;;AC9pFD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAMuF,uBAAN,SAAsCtR,KAAtC,CAA4C;;AAC5C,IAAIuR,iBAAJ;;AACA,MAAMC,eAAN,CAAsB;AACpBrU,aAAW,CAACsU,KAAD,EAAQpR,OAAR,EAAiB;AAC1B,SAAKqQ,QAAL,GAAiBrQ,OAAO,IAAIA,OAAO,CAACqQ,QAApB,IAAiC,CAAjD;AACA,SAAKgB,UAAL,GAAmBrR,OAAO,IAAIA,OAAO,CAACqR,UAAnB,IAAiCrR,OAAO,CAACqR,UAAR,CAAmBxO,KAAnB,EAAlC,IAAiE,EAAnF;;AACA,QAAI,CAAC0C,MAAM,CAACsH,SAAP,CAAiB,KAAKwD,QAAtB,CAAD,IAAoC,KAAKA,QAAL,GAAgB,CAAxD,EAA2D;AACzD,YAAM,IAAIY,uBAAJ,CAA4B,yCAA5B,CAAN;AACD;AACF;;AACiB,aAAPhF,OAAO,CAAC3F,KAAD,EAAQ;AACxB,QAAI4K,iBAAJ,EAAuB;AACrB,YAAM,IAAIvR,KAAJ,CAAW,IAAGuR,iBAAiB,CAACI,IAAK,gCAArC,CAAN;AACD;;AACDJ,qBAAiB,GAAG5K,KAApB;AACD;;AACiB,aAAP2F,OAAO,GAAG;AACnB,QAAI,CAACiF,iBAAL,EAAwB;AACtB,YAAM,IAAIvR,KAAJ,CAAU,0DAAV,CAAN;AACD;;AACD,WAAOuR,iBAAP;AACD;;AACY,SAANK,MAAM,CAACC,OAAD,EAAU;AACrB,UAAMC,kBAAkB,CAAC,UAAD,CAAxB;AACD;;AACc,SAARC,QAAQ,CAACN,KAAD,EAAQO,QAAR,EAAkB;AAC/B,UAAMF,kBAAkB,CAAC,YAAD,CAAxB;AACD;;AACc,SAARZ,QAAQ,CAACe,KAAD,EAAQ;AACrB,UAAMH,kBAAkB,CAAC,YAAD,CAAxB;AACD;;AACkB,SAAZrI,YAAY,CAACyI,SAAD,EAAY;AAC7B,UAAMJ,kBAAkB,CAAC,gBAAD,CAAxB;AACD;;AACDnB,YAAU,GAAG;AACX,UAAM5E,IAAI,GAAGoG,QAAQ,CAACjB,QAAT,CACXzL,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkB,KAAKuL,MAAL,EAAlB,CAAd,EAAgD;AAAES,gBAAU,EAAE,KAAKA;AAAnB,KAAhD,CADW,CAAb;AAGA,WAAO3F,IAAP;AACD;;AArCmB;;AAuCtByF,eAAe,CAACY,kBAAhB,GAAqC,KAArC;;AACA,SAASN,kBAAT,CAA4BH,IAA5B,EAAkC;AAChC,SAAO,IAAI3R,KAAJ,CAAW,2BAA0B2R,IAAK,qCAA1C,CAAP;AACD;;AACD,IAAIU,WAAJ;;AACA,CAAC,UAASA,WAAT,EAAsB;AACrBA,aAAW,CAACC,QAAZ,GAAuB,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,EAAyB,IAAzB,EAA+B,IAA/B,EAAqC,IAArC,CAAvB;AACAD,aAAW,CAACE,sBAAZ,GAAqC,IAArC;AACAF,aAAW,CAACG,sBAAZ,GAAqCH,WAAW,CAACE,sBAAZ,GAAqC,EAA1E;AACAF,aAAW,CAACI,oBAAZ,GAAmCJ,WAAW,CAACG,sBAAZ,GAAqC,EAAxE;AACAH,aAAW,CAACK,mBAAZ,GAAkCL,WAAW,CAACI,oBAAZ,GAAmC,EAArE;AACAJ,aAAW,CAACM,oBAAZ,GAAmCN,WAAW,CAACK,mBAAZ,GAAkC,CAArE;AACD,CAPD,EAOGL,WAAW,KAAKA,WAAW,GAAG,EAAnB,CAPd;;AAQA,MAAMO,oBAAN,SAAmC5S,KAAnC,CAAyC;;AACzC,MAAMmS,QAAN,CAAe;AACbhV,aAAW,CAAC4O,IAAD,EAAO9C,QAAP,EAAiByH,QAAjB,EAA2BgB,UAA3B,EAAuC;AAChD,SAAK3F,IAAL,GAAY,IAAItH,IAAJ,CAASsH,IAAT,CAAZ;AACA,SAAK9C,QAAL,GAAgBA,QAAQ,IAAI,IAA5B;AACA,SAAKyH,QAAL,GAAgBA,QAAQ,IAAI,CAA5B;AACA,SAAKgB,UAAL,GAAmBA,UAAU,IAAIA,UAAU,CAACxO,KAAX,EAAf,IAAsC,EAAxD;;AACA,QAAI,CAAC0C,MAAM,CAACsH,SAAP,CAAiB,KAAKwD,QAAtB,CAAD,IAAoC,KAAKA,QAAL,GAAgB,CAAxD,EAA2D;AACzD,YAAM,IAAIkC,oBAAJ,CAAyB,yCAAzB,CAAN;AACD;;AACD,SAAKC,aAAL;AACD,GAVY,CAWb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACe,SAAR3B,QAAQ,CAACF,IAAD,EAAO;AACpB,UAAMjF,IAAI,GAAG,IAAItH,IAAJ,CACXA,IAAI,CAACqO,GAAL,CACE9B,IAAI,CAAC+B,IADP,EAEE/B,IAAI,CAACgC,KAAL,GAAa,CAFf,EAGEhC,IAAI,CAAC5F,GAHP,EAIE4F,IAAI,CAACiC,IAJP,EAKEjC,IAAI,CAACkC,MALP,EAMElC,IAAI,CAACmC,MANP,EAOEnC,IAAI,CAACoC,WAPP,CADW,CAAb;AAWA,WAAO,IAAIjB,QAAJ,CAAapG,IAAb,EAAmBiF,IAAI,CAAC/H,QAAxB,EAAkC+H,IAAI,CAACN,QAAvC,EAAiDM,IAAI,CAACU,UAAtD,CAAP;AACD;;AACqB,SAAf2B,eAAe,CAAC/G,OAAD,EAAU;AAC9B,WAAO6F,QAAQ,CAACjB,QAAT,CACLzL,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkB4G,OAAO,CAAC2E,MAAR,EAAlB,CAAd,EAAmD;AAAES,gBAAU,EAAEpF,OAAO,CAACoF;AAAtB,KAAnD,CADK,CAAP;AAGD;AACD;AACF;AACA;AACA;;;AACS,MAAH7H,GAAG,GAAG;AACR,QAAI,CAAC,KAAK6G,QAAV,EAAoB;AACpB,QAAI,KAAK4C,IAAT,EAAe,OAAO,KAAKA,IAAZ;AACf,SAAKA,IAAL,GAAY,KAAKxH,GAAL,CAAS,KAAK4E,QAAd,EAAwB,aAAxB,CAAZ;AACA,WAAO,KAAK4C,IAAZ;AACD,GA/CY,CAgDb;AACA;;;AACAhI,SAAO,CAACiI,MAAD,EAAS;AACd,QAAI,CAACA,MAAL,EAAa;AACX,aAAO,KAAP;AACD;;AACDC,sBAAkB,CAAC,IAAD,EAAOD,MAAP,CAAlB;AACA,WAAO,KAAK1C,OAAL,OAAmB0C,MAAM,CAAC1C,OAAP,EAA1B;AACD;;AACDxF,UAAQ,CAACkI,MAAD,EAAS;AACfC,sBAAkB,CAAC,IAAD,EAAOD,MAAP,CAAlB;AACA,WAAO,KAAK1C,OAAL,KAAiB0C,MAAM,CAAC1C,OAAP,EAAxB;AACD;;AACDxC,iBAAe,CAACkF,MAAD,EAAS;AACtBC,sBAAkB,CAAC,IAAD,EAAOD,MAAP,CAAlB;AACA,WAAO,KAAK1C,OAAL,MAAkB0C,MAAM,CAAC1C,OAAP,EAAzB;AACD;;AACDzE,SAAO,CAACmH,MAAD,EAAS;AACdC,sBAAkB,CAAC,IAAD,EAAOD,MAAP,CAAlB;AACA,WAAO,KAAK1C,OAAL,KAAiB0C,MAAM,CAAC1C,OAAP,EAAxB;AACD;;AACDpE,gBAAc,CAAC8G,MAAD,EAAS;AACrBC,sBAAkB,CAAC,IAAD,EAAOD,MAAP,CAAlB;AACA,WAAO,KAAK1C,OAAL,MAAkB0C,MAAM,CAAC1C,OAAP,EAAzB;AACD;;AACD4C,aAAW,CAACF,MAAD,EAAS;AAClB,QAAI,CAAC,KAAK7C,QAAV,EAAoB;AAClB,YAAM,IAAI1Q,KAAJ,CAAU,uEAAV,CAAN;AACD;;AACDwT,sBAAkB,CAAC,IAAD,EAAOD,MAAP,CAAlB;AACA,WACEA,MAAM,CAAC9G,cAAP,CAAsB,IAAtB,KAA+B8G,MAAM,CAAClF,eAAP,CAAuB,KAAKvC,GAAL,CAAS,KAAK4E,QAAd,EAAwB,aAAxB,CAAvB,CADjC;AAGD;;AACD5E,KAAG,CAAC9E,MAAD,EAAS0M,IAAT,EAAe;AAChB,YAAQA,IAAR;AACE,WAAK,WAAL;AAAkB;AAChB,gBAAMhC,UAAU,GAAG,KAAKA,UAAL,CAAgBxO,KAAhB,EAAnB;AACAwO,oBAAU,CAACiC,OAAX,CAAmB3M,MAAnB;AACA,iBAAO,IAAImL,QAAJ,CAAa,KAAKpG,IAAlB,EAAwB,KAAK9C,QAA7B,EAAuC,KAAKyH,QAA5C,EAAsDgB,UAAtD,CAAP;AACD;;AACD,WAAK,MAAL;AACE,eAAO,KAAKkC,YAAL,CAAkBC,WAAW,CAAC,KAAK9H,IAAN,EAAY/E,MAAZ,CAA7B,CAAP;;AACF,WAAK,OAAL;AACE,eAAO,KAAK4M,YAAL,CAAkBE,YAAY,CAAC,KAAK/H,IAAN,EAAY/E,MAAZ,CAA9B,CAAP;;AACF,WAAK,MAAL;AACE,eAAO,KAAK4M,YAAL,CAAkBG,WAAW,CAAC,KAAKhI,IAAN,EAAY/E,MAAZ,CAA7B,CAAP;;AACF,WAAK,KAAL;AACE,eAAO,KAAK4M,YAAL,CAAkBI,UAAU,CAAC,KAAKjI,IAAN,EAAY/E,MAAZ,CAA5B,CAAP;;AACF,WAAK,MAAL;AACE,eAAO,KAAK4M,YAAL,CAAkBK,WAAW,CAAC,KAAKlI,IAAN,EAAY/E,MAAZ,CAA7B,CAAP;;AACF,WAAK,QAAL;AACE,eAAO,KAAK4M,YAAL,CAAkBM,aAAa,CAAC,KAAKnI,IAAN,EAAY/E,MAAZ,CAA/B,CAAP;;AACF,WAAK,QAAL;AACE,eAAO,KAAK4M,YAAL,CAAkBO,aAAa,CAAC,KAAKpI,IAAN,EAAY/E,MAAZ,CAA/B,CAAP;;AACF,WAAK,aAAL;AACE,eAAO,KAAK4M,YAAL,CAAkBQ,kBAAkB,CAAC,KAAKrI,IAAN,EAAY/E,MAAZ,CAApC,CAAP;;AACF;AACE,cAAM,IAAIhH,KAAJ,CAAU,yCAAV,CAAN;AAvBJ;AAyBD;;AACDmL,UAAQ,CAACnE,MAAD,EAAS0M,IAAT,EAAe;AACrB,YAAQA,IAAR;AACE,WAAK,MAAL;AACE,eAAO,KAAKE,YAAL,CAAkBS,WAAW,CAAC,KAAKtI,IAAN,EAAY/E,MAAZ,CAA7B,CAAP;;AACF,WAAK,OAAL;AACE,eAAO,KAAK4M,YAAL,CAAkBU,YAAY,CAAC,KAAKvI,IAAN,EAAY/E,MAAZ,CAA9B,CAAP;;AACF,WAAK,MAAL;AACE,eAAO,KAAK4M,YAAL,CAAkBW,WAAW,CAAC,KAAKxI,IAAN,EAAY/E,MAAZ,CAA7B,CAAP;;AACF,WAAK,KAAL;AACE,eAAO,KAAK4M,YAAL,CAAkBY,UAAU,CAAC,KAAKzI,IAAN,EAAY/E,MAAZ,CAA5B,CAAP;;AACF,WAAK,MAAL;AACE,eAAO,KAAK4M,YAAL,CAAkBa,WAAW,CAAC,KAAK1I,IAAN,EAAY/E,MAAZ,CAA7B,CAAP;;AACF,WAAK,QAAL;AACE,eAAO,KAAK4M,YAAL,CAAkBc,aAAa,CAAC,KAAK3I,IAAN,EAAY/E,MAAZ,CAA/B,CAAP;;AACF,WAAK,QAAL;AACE,eAAO,KAAK4M,YAAL,CAAkBe,aAAa,CAAC,KAAK5I,IAAN,EAAY/E,MAAZ,CAA/B,CAAP;;AACF,WAAK,aAAL;AACE,eAAO,KAAK4M,YAAL,CAAkBgB,kBAAkB,CAAC,KAAK7I,IAAN,EAAY/E,MAAZ,CAApC,CAAP;;AACF;AACE,cAAM,IAAIhH,KAAJ,CAAU,8CAAV,CAAN;AAlBJ;AAoBD;;AACDgM,KAAG,CAAC0H,IAAD,EAAO;AACR,YAAQA,IAAR;AACE,WAAK,MAAL;AACE,eAAO,KAAK3H,IAAL,CAAU8I,cAAV,EAAP;;AACF,WAAK,OAAL;AACE,eAAO,KAAK9I,IAAL,CAAU+I,WAAV,KAA0B,CAAjC;;AACF,WAAK,SAAL;AACE,eAAOC,aAAa,CAAC,KAAKhJ,IAAN,CAApB;;AACF,WAAK,SAAL;AACE,eAAOsG,WAAW,CAACC,QAAZ,CAAqB,KAAKvG,IAAL,CAAUiJ,SAAV,EAArB,CAAP;;AACF,WAAK,KAAL;AACE,eAAO,KAAKjJ,IAAL,CAAUkJ,UAAV,EAAP;;AACF,WAAK,MAAL;AACE,eAAO,KAAKlJ,IAAL,CAAUmJ,WAAV,EAAP;;AACF,WAAK,QAAL;AACE,eAAO,KAAKnJ,IAAL,CAAUoJ,aAAV,EAAP;;AACF,WAAK,QAAL;AACE,eAAO,KAAKpJ,IAAL,CAAUqJ,aAAV,EAAP;;AACF,WAAK,aAAL;AACE,eAAO,KAAKrJ,IAAL,CAAUsJ,kBAAV,EAAP;;AACF;AACE,cAAM,IAAIrV,KAAJ,CAAU,yCAAV,CAAN;AApBJ;AAsBD;;AACD9B,KAAG,CAACwV,IAAD,EAAO/M,KAAP,EAAc;AACf,QAAI+M,IAAI,KAAK,UAAb,EAAyB;AACvB,aAAO,IAAIvB,QAAJ,CAAa,KAAKpG,IAAlB,EAAwB,KAAK9C,QAA7B,EAAuCtC,KAAvC,EAA8C,KAAK+K,UAAnD,CAAP;AACD;;AACD,QAAIgC,IAAI,KAAK,YAAb,EAA2B;AACzB,aAAO,IAAIvB,QAAJ,CAAa,KAAKpG,IAAlB,EAAwB,KAAK9C,QAA7B,EAAuC,KAAKyH,QAA5C,EAAsD/J,KAAtD,CAAP;AACD;;AACD,QAAIoF,IAAI,GAAG,IAAItH,IAAJ,CAAS,KAAKsH,IAAd,CAAX;;AACA,YAAQ2H,IAAR;AACE,WAAK,MAAL;AACE3H,YAAI,CAACuJ,cAAL,CAAoB3O,KAApB;AACA;;AACF,WAAK,OAAL;AAAc;AACZ;AACA;AACA;AACA,gBAAMxF,MAAM,GAAGoU,WAAW,CAAC5O,KAAD,EAAQoF,IAAI,CAAC8I,cAAL,EAAR,CAA1B;AACA,gBAAMzJ,GAAG,GAAGW,IAAI,CAACkJ,UAAL,EAAZ;;AACA,cAAI7J,GAAG,GAAGjK,MAAV,EAAkB;AAChB4K,gBAAI,CAACyJ,UAAL,CAAgB,CAAhB;AACAzJ,gBAAI,CAAC0J,WAAL,CAAiB9O,KAAjB;AACAoF,gBAAI,GAAGyI,UAAU,CAACzI,IAAD,EAAO,CAAP,CAAjB;AACD,WAJD,MAIO;AACLA,gBAAI,CAAC0J,WAAL,CAAiB9O,KAAK,GAAG,CAAzB;AACD;;AACD;AACD;;AACD,WAAK,KAAL;AACEoF,YAAI,CAACyJ,UAAL,CAAgB7O,KAAhB;AACA;;AACF,WAAK,MAAL;AACEoF,YAAI,CAAC2J,WAAL,CAAiB/O,KAAjB;AACA;;AACF,WAAK,QAAL;AACEoF,YAAI,CAAC4J,aAAL,CAAmBhP,KAAnB;AACA;;AACF,WAAK,QAAL;AACEoF,YAAI,CAAC6J,aAAL,CAAmBjP,KAAnB;AACA;;AACF,WAAK,aAAL;AACEoF,YAAI,CAAC8J,kBAAL,CAAwBlP,KAAxB;AACA;;AACF;AACE,cAAM,IAAI3G,KAAJ,CAAU,yCAAV,CAAN;AAnCJ;;AAqCA,WAAO,KAAK4T,YAAL,CAAkB7H,IAAlB,CAAP;AACD;;AACDI,aAAW,CAACA,WAAD,EAAc2J,GAAG,GAAG,EAApB,EAAwB;AACjC,QAAI/J,IAAI,GAAG,KAAK6H,YAAL,CAAkB,KAAK7H,IAAvB,CAAX;;AACA,YAAQI,WAAR;AACE,WAAK,MAAL;AACEJ,YAAI,GAAGA,IAAI,CAAC7N,GAAL,CAAS,OAAT,EAAkB,CAAlB,CAAP;;AACF,WAAK,OAAL;AACE6N,YAAI,GAAGA,IAAI,CAAC7N,GAAL,CAAS,KAAT,EAAgB,CAAhB,CAAP;AACA;;AACF,WAAK,MAAL;AACE6N,YAAI,GAAGgK,oBAAoB,CAAChK,IAAD,EAAO+J,GAAG,CAAC/H,SAAX,CAA3B;AAPJ;;AASA,YAAQ5B,WAAR;AACE,WAAK,MAAL;AACA,WAAK,OAAL;AACA,WAAK,MAAL;AACA,WAAK,KAAL;AACEJ,YAAI,GAAGA,IAAI,CAAC7N,GAAL,CAAS,MAAT,EAAiB,CAAjB,CAAP;;AACF,WAAK,MAAL;AACE6N,YAAI,GAAGA,IAAI,CAAC7N,GAAL,CAAS,QAAT,EAAmB,CAAnB,CAAP;;AACF,WAAK,QAAL;AACE6N,YAAI,GAAGA,IAAI,CAAC7N,GAAL,CAAS,QAAT,EAAmB,CAAnB,CAAP;;AACF,WAAK,QAAL;AACE6N,YAAI,GAAGA,IAAI,CAAC7N,GAAL,CAAS,aAAT,EAAwB,CAAxB,CAAP;;AACF,WAAK,aAAL;AACE,eAAO6N,IAAP;;AACF;AACE,cAAM,IAAI/L,KAAJ,CAAU,6DAA6DmM,WAAvE,CAAN;AAfJ;AAiBD;;AACDqC,gBAAc,CAACrC,WAAD,EAAc2J,GAAG,GAAG,EAApB,EAAwB;AACpC,QAAI/J,IAAI,GAAG,KAAK6H,YAAL,CAAkB,KAAK7H,IAAvB,CAAX;;AACA,YAAQI,WAAR;AACE,WAAK,MAAL;AACEJ,YAAI,GAAGA,IAAI,CAAC7N,GAAL,CAAS,OAAT,EAAkB,EAAlB,CAAP;;AACF,WAAK,OAAL;AACE6N,YAAI,GAAGA,IAAI,CAAC7N,GAAL,CAAS,KAAT,EAAgBqX,WAAW,CAACxJ,IAAI,CAACC,GAAL,CAAS,OAAT,CAAD,EAAoBD,IAAI,CAACC,GAAL,CAAS,MAAT,CAApB,CAA3B,CAAP;AACA;;AACF,WAAK,MAAL;AACED,YAAI,GAAGiK,kBAAkB,CAACjK,IAAD,EAAO+J,GAAG,CAAC/H,SAAX,CAAzB;AAPJ;;AASA,YAAQ5B,WAAR;AACE,WAAK,MAAL;AACA,WAAK,OAAL;AACA,WAAK,MAAL;AACA,WAAK,KAAL;AACEJ,YAAI,GAAGA,IAAI,CAAC7N,GAAL,CAAS,MAAT,EAAiB,EAAjB,CAAP;;AACF,WAAK,MAAL;AACE6N,YAAI,GAAGA,IAAI,CAAC7N,GAAL,CAAS,QAAT,EAAmB,EAAnB,CAAP;;AACF,WAAK,QAAL;AACE6N,YAAI,GAAGA,IAAI,CAAC7N,GAAL,CAAS,QAAT,EAAmB,EAAnB,CAAP;;AACF,WAAK,QAAL;AACE6N,YAAI,GAAGA,IAAI,CAAC7N,GAAL,CAAS,aAAT,EAAwB,GAAxB,CAAP;;AACF,WAAK,aAAL;AACE,eAAO6N,IAAP;;AACF;AACE,cAAM,IAAI/L,KAAJ,CAAU,6DAA6DmM,WAAvE,CAAN;AAfJ;AAiBD;;AACD5E,aAAW,GAAG;AACZ,WAAO,KAAKwE,IAAL,CAAUxE,WAAV,EAAP;AACD;;AACDoJ,YAAU,GAAG;AACX,WAAO,IAAP;AACD;;AACDM,QAAM,GAAG;AACP,UAAMD,IAAI,GAAG;AACX/H,cAAQ,EAAE,KAAKA,QADJ;AAEX8J,UAAI,EAAE,KAAK/G,GAAL,CAAS,MAAT,CAFK;AAGXgH,WAAK,EAAE,KAAKhH,GAAL,CAAS,OAAT,CAHI;AAIXZ,SAAG,EAAE,KAAKY,GAAL,CAAS,KAAT,CAJM;AAKXiH,UAAI,EAAE,KAAKjH,GAAL,CAAS,MAAT,CALK;AAMXkH,YAAM,EAAE,KAAKlH,GAAL,CAAS,QAAT,CANG;AAOXmH,YAAM,EAAE,KAAKnH,GAAL,CAAS,QAAT,CAPG;AAQXoH,iBAAW,EAAE,KAAKpH,GAAL,CAAS,aAAT;AARF,KAAb;;AAUA,QAAI,KAAK0E,QAAT,EAAmB;AACjBM,UAAI,CAACN,QAAL,GAAgB,KAAKA,QAArB;AACD;;AACD,WAAOM,IAAP;AACD;;AACDH,SAAO,GAAG;AACR,WAAO,KAAK9E,IAAL,CAAU8E,OAAV,EAAP;AACD;;AACDgC,eAAa,GAAG;AACd,QAAIrM,KAAK,CAAC,KAAKqK,OAAL,EAAD,CAAT,EAA2B;AACzB,YAAM,IAAI+B,oBAAJ,CAAyB,4BAAzB,CAAN;AACD;;AACD,WAAO,IAAP;AACD;;AACDgB,cAAY,CAAC7H,IAAD,EAAO;AACjB,WAAO,IAAIoG,QAAJ,CAAapG,IAAb,EAAmB,KAAK9C,QAAxB,EAAkC,KAAKyH,QAAvC,EAAiD,KAAKgB,UAAtD,CAAP;AACD;;AArSY;;AAuSf,SAAS8B,kBAAT,CAA4ByC,CAA5B,EAA+BC,CAA/B,EAAkC;AAChC,MAAID,CAAC,CAAChN,QAAF,KAAeiN,CAAC,CAACjN,QAArB,EAA+B;AAC7B,UAAM,IAAI2J,oBAAJ,CACJ,8EACErS,IAAI,CAACC,SAAL,CAAeyV,CAAf,CADF,GAEE,OAFF,GAGE1V,IAAI,CAACC,SAAL,CAAe0V,CAAf,CAJE,CAAN;AAMD;;AACD,SAAO,IAAP;AACD;;AACD,SAASH,oBAAT,CAA8BhK,IAA9B,EAAoCoK,IAApC,EAA0C;AACxC,QAAM/R,KAAK,GAAGgS,eAAe,CAACD,IAAD,CAAf,CAAsBE,OAAtB,CAA8BtK,IAAI,CAACC,GAAL,CAAS,SAAT,CAA9B,CAAd;AACA,SAAOD,IAAI,CAACZ,QAAL,CAAc/G,KAAd,EAAqB,KAArB,CAAP;AACD;;AACD,SAAS4R,kBAAT,CAA4BjK,IAA5B,EAAkCoK,IAAlC,EAAwC;AACtC,QAAM/R,KAAK,GAAGgS,eAAe,CAACD,IAAD,CAAf,CAAsBE,OAAtB,CAA8BtK,IAAI,CAACC,GAAL,CAAS,SAAT,CAA9B,CAAd;AACA,SAAOD,IAAI,CAACD,GAAL,CAAS,IAAI1H,KAAb,EAAoB,KAApB,CAAP;AACD;;AACD,SAASgN,oBAAT,CAA8B/B,CAA9B,EAAiCC,CAAjC,EAAoC;AAClC,MAAID,CAAC,CAACjD,OAAF,CAAUkD,CAAV,CAAJ,EAAkB,OAAO,CAAP;AAClB,MAAID,CAAC,CAAChE,QAAF,CAAWiE,CAAX,CAAJ,EAAmB,OAAO,CAAC,CAAR;;AACnB,MAAID,CAAC,CAACqB,QAAF,IAAcpB,CAAC,CAACoB,QAApB,EAA8B;AAC5B,QAAIrB,CAAC,CAACqB,QAAF,GAAapB,CAAC,CAACoB,QAAnB,EAA6B,OAAO,CAAP;AAC7B,QAAIrB,CAAC,CAACqB,QAAF,GAAapB,CAAC,CAACoB,QAAnB,EAA6B,OAAO,CAAC,CAAR;AAC9B;;AACD,SAAO,CAAP;AACD;;AACD,SAASgL,aAAT,CAAuB9N,KAAvB,EAA8B;AAC5B,SAAO3F,KAAK,CAACtI,IAAN,CAAW,IAAIgc,GAAJ,CAAQ/N,KAAK,CAAC3J,GAAN,CAAU8H,IAAI,IAAI,CAACA,IAAI,CAACxE,WAAL,EAAD,EAAqBwE,IAArB,CAAlB,CAAR,EAAuD6P,MAAvD,EAAX,CAAP;AACD;;AACD,SAASxF,eAAT,CAAyBD,IAAI,GAAG,IAAhC,EAAsC;AACpC,QAAMG,MAAM,GAAGjE,WAAW,CAACC,QAAZ,CAAqBpP,KAArB,EAAf;AACA,MAAIkB,KAAK,GAAGkS,MAAM,CAACD,OAAP,CAAeF,IAAf,CAAZ;;AACA,SAAO/R,KAAK,KAAK,CAAjB,EAAoB;AAClBmS,cAAU,CAACD,MAAD,CAAV;AACAlS,SAAK;AACN;;AACD,SAAOkS,MAAP;AACD;;AACD,SAASC,UAAT,CAAoBC,KAApB,EAA2B7W,IAAI,GAAG,OAAlC,EAA2C;AACzC,MAAI6W,KAAK,CAACrV,MAAN,KAAiB,CAArB,EAAwB;AACtB,WAAOqV,KAAP;AACD,GAFD,MAEO,IAAI7W,IAAI,KAAK,OAAb,EAAsB;AAC3B6W,SAAK,CAACvT,IAAN,CAAWuT,KAAK,CAAC9G,KAAN,EAAX;AACD,GAFM,MAEA;AACL8G,SAAK,CAAC7C,OAAN,CAAc6C,KAAK,CAAC5G,GAAN,EAAd;AACD;;AACD,SAAO4G,KAAP;AACD;;AACD,SAAStK,4BAAT,CAAsC+J,CAAtC,EAAyCC,CAAzC,EAA4C;AAC1C,MAAID,CAAC,KAAKC,CAAV,EAAa,OAAO,CAAP;AACb,QAAMrU,MAAM,GAAGwQ,WAAW,CAACC,QAAZ,CAAqB+D,OAArB,CAA6BJ,CAA7B,IAAkC5D,WAAW,CAACC,QAAZ,CAAqB+D,OAArB,CAA6BH,CAA7B,CAAjD;AACA,SAAOrU,MAAM,GAAG,CAAT,GAAa,IAAIA,MAAjB,GAA0ByB,IAAI,CAACuY,GAAL,CAASha,MAAT,CAAjC;AACD;AACD;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS0T,WAAT,CAAqBvC,KAArB,EAA4BD,IAA5B,EAAkC;AAChC,QAAM0D,KAAK,GAAG;AACZ,OAAG,EADS;AAEZ,OAAGC,iBAAiB,CAAC3D,IAAD,CAFR;AAGZ,OAAG,EAHS;AAIZ,OAAG,EAJS;AAKZ,OAAG,EALS;AAMZ,OAAG,EANS;AAOZ,OAAG,EAPS;AAQZ,OAAG,EARS;AASZ,OAAG,EATS;AAUZ,QAAI,EAVQ;AAWZ,QAAI,EAXQ;AAYZ,QAAI;AAZQ,GAAd;AAcA,SAAO0D,KAAK,CAACzD,KAAD,CAAZ;AACD;;AACD,SAAS0D,iBAAT,CAA2B3D,IAA3B,EAAiC;AAC/B,SAAO4D,UAAU,CAAC5D,IAAD,CAAV,GAAmB,EAAnB,GAAwB,EAA/B;AACD,C,CACD;;;AACA,SAAS4D,UAAT,CAAoB5D,IAApB,EAA0B;AACxB,SAAOA,IAAI,GAAG,GAAP,KAAe,CAAf,IAAqBA,IAAI,GAAG,CAAP,KAAa,CAAb,IAAkBA,IAAI,GAAG,GAAP,KAAe,CAA7D;AACD;;AACD,SAAS+I,aAAT,CAAuB/I,IAAvB,EAA6B;AAC3B,SAAO4D,UAAU,CAAC5D,IAAD,CAAV,GAAmB,GAAnB,GAAyB,GAAhC;AACD;;AACD,SAASgC,aAAT,CAAuBrQ,GAAvB,EAA4B;AAC1B,QAAM2E,KAAK,GAAG,IAAI5E,IAAJ,CAASA,IAAI,CAACqO,GAAL,CAASpO,GAAG,CAACmQ,cAAJ,EAAT,EAA+B,CAA/B,EAAkC,CAAlC,CAAT,CAAd;AACA,QAAM+B,IAAI,GAAGlS,GAAG,CAACmM,OAAJ,KAAgBxH,KAAK,CAACwH,OAAN,EAA7B;AACA,SAAO,IAAIvN,IAAI,CAACuF,KAAL,CAAW+N,IAAI,GAAGvE,WAAW,CAACK,mBAA9B,CAAX;AACD;AACD;AACA;AACA;AACA;;;AACA,SAASmE,SAAT,CAAmB7G,KAAnB,EAA0B;AACxB,MAAIA,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAK,IAA5B,IAAoCA,KAAK,KAAK,KAAlD,EAAyD;AACvD,WAAO8G,GAAP;AACD;;AACD,QAAMC,GAAG,GAAGnR,MAAM,CAACoK,KAAD,CAAlB;;AACA,MAAIxJ,KAAK,CAACuQ,GAAD,CAAT,EAAgB;AACd,WAAOA,GAAP;AACD;;AACD,SAAOA,GAAG,GAAG,CAAN,GAAUzT,IAAI,CAACG,IAAL,CAAUsT,GAAV,CAAV,GAA2BzT,IAAI,CAACuF,KAAL,CAAWkO,GAAX,CAAlC;AACD;;AACD,SAASC,eAAT,CAAyBC,SAAzB,EAAoCC,WAApC,EAAiD;AAC/C,MAAIC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CAAc,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UAArE,CAAN;AACD;;AACD,QAAMkW,SAAS,GAAGJ,SAAS,CAACpG,OAAV,EAAlB;AACA,QAAM7J,MAAM,GAAG6P,SAAS,CAACK,WAAD,CAAxB;AACA,SAAO,IAAIzS,IAAJ,CAAS4S,SAAS,GAAGrQ,MAArB,CAAP;AACD;;AACD,SAAS6M,WAAT,CAAqB9H,IAArB,EAA2BiE,KAA3B,EAAkC;AAChC,QAAMhJ,MAAM,GAAG6P,SAAS,CAAC7G,KAAD,CAAxB;AACA,SAAO8D,YAAY,CAAC/H,IAAD,EAAO/E,MAAM,GAAG,EAAhB,CAAnB;AACD;;AACD,SAAS8M,YAAT,CAAsB/H,IAAtB,EAA4BiE,KAA5B,EAAmC;AACjC,QAAMhJ,MAAM,GAAG6P,SAAS,CAAC7G,KAAD,CAAxB;AACAjE,MAAI,GAAG,IAAItH,IAAJ,CAASsH,IAAT,CAAP;AACA,QAAMuL,YAAY,GAAGvL,IAAI,CAAC+I,WAAL,KAAqB9N,MAA1C;AACA,QAAMuQ,oBAAoB,GAAG,IAAI9S,IAAJ,CAAS,CAAT,CAA7B;AACA8S,sBAAoB,CAACjC,cAArB,CAAoCvJ,IAAI,CAAC8I,cAAL,EAApC,EAA2DyC,YAA3D,EAAyE,CAAzE;AACAC,sBAAoB,CAAC7B,WAArB,CAAiC,CAAjC,EAAoC,CAApC,EAAuC,CAAvC,EAA0C,CAA1C;AACA,QAAM8B,WAAW,GAAGjC,WAAW,CAC7BgC,oBAAoB,CAACzC,WAArB,KAAqC,CADR,EAE7ByC,oBAAoB,CAAC1C,cAArB,EAF6B,CAA/B,CAPiC,CAWjC;AACA;;AACA9I,MAAI,CAAC0J,WAAL,CAAiB6B,YAAjB,EAA+BhU,IAAI,CAACC,GAAL,CAASiU,WAAT,EAAsBzL,IAAI,CAACkJ,UAAL,EAAtB,CAA/B;AACA,SAAOlJ,IAAP;AACD;;AACD,SAASgI,WAAT,CAAqBhI,IAArB,EAA2BiE,KAA3B,EAAkC;AAChC,QAAMhJ,MAAM,GAAG6P,SAAS,CAAC7G,KAAD,CAAxB;AACA,QAAMyH,IAAI,GAAGzQ,MAAM,GAAG,CAAtB;AACA,SAAOgN,UAAU,CAACjI,IAAD,EAAO0L,IAAP,CAAjB;AACD;;AACD,SAASzD,UAAT,CAAoBjI,IAApB,EAA0BiE,KAA1B,EAAiC;AAC/B;AACA;AACA,SAAOoE,kBAAkB,CAACrI,IAAD,EAAO8K,SAAS,CAAC7G,KAAD,CAAT,GAAmBqC,WAAW,CAACK,mBAAtC,CAAzB;AACD;;AACD,SAASuB,WAAT,CAAqBlI,IAArB,EAA2BiE,KAA3B,EAAkC;AAChC,QAAMhJ,MAAM,GAAG6P,SAAS,CAAC7G,KAAD,CAAxB;AACA,SAAOgH,eAAe,CAACjL,IAAD,EAAO/E,MAAM,GAAGqL,WAAW,CAACI,oBAA5B,CAAtB;AACD;;AACD,SAASyB,aAAT,CAAuBnI,IAAvB,EAA6BiE,KAA7B,EAAoC;AAClC,QAAMhJ,MAAM,GAAG6P,SAAS,CAAC7G,KAAD,CAAxB;AACA,SAAOgH,eAAe,CAACjL,IAAD,EAAO/E,MAAM,GAAGqL,WAAW,CAACG,sBAA5B,CAAtB;AACD;;AACD,SAAS2B,aAAT,CAAuBpI,IAAvB,EAA6BiE,KAA7B,EAAoC;AAClC,QAAMhJ,MAAM,GAAG6P,SAAS,CAAC7G,KAAD,CAAxB;AACA,SAAOgH,eAAe,CAACjL,IAAD,EAAO/E,MAAM,GAAGqL,WAAW,CAACE,sBAA5B,CAAtB;AACD;;AACD,SAAS6B,kBAAT,CAA4BrI,IAA5B,EAAkCiE,KAAlC,EAAyC;AACvC,QAAMhJ,MAAM,GAAG6P,SAAS,CAAC7G,KAAD,CAAxB;AACA,QAAMqH,SAAS,GAAGtL,IAAI,CAACjD,OAAL,EAAlB;AACA,SAAO,IAAIrE,IAAJ,CAAS4S,SAAS,GAAGrQ,MAArB,CAAP;AACD;;AACD,SAASqN,WAAT,CAAqBtI,IAArB,EAA2B/E,MAA3B,EAAmC;AACjC,SAAO6M,WAAW,CAAC9H,IAAD,EAAO,CAAC/E,MAAR,CAAlB;AACD;;AACD,SAASsN,YAAT,CAAsBvI,IAAtB,EAA4B/E,MAA5B,EAAoC;AAClC,SAAO8M,YAAY,CAAC/H,IAAD,EAAO,CAAC/E,MAAR,CAAnB;AACD;;AACD,SAASuN,WAAT,CAAqBxI,IAArB,EAA2B/E,MAA3B,EAAmC;AACjC,SAAO+M,WAAW,CAAChI,IAAD,EAAO,CAAC/E,MAAR,CAAlB;AACD;;AACD,SAASwN,UAAT,CAAoBzI,IAApB,EAA0B/E,MAA1B,EAAkC;AAChC,SAAOgN,UAAU,CAACjI,IAAD,EAAO,CAAC/E,MAAR,CAAjB;AACD;;AACD,SAASyN,WAAT,CAAqB1I,IAArB,EAA2B/E,MAA3B,EAAmC;AACjC,SAAOiN,WAAW,CAAClI,IAAD,EAAO,CAAC/E,MAAR,CAAlB;AACD;;AACD,SAAS0N,aAAT,CAAuB3I,IAAvB,EAA6B/E,MAA7B,EAAqC;AACnC,SAAOkN,aAAa,CAACnI,IAAD,EAAO,CAAC/E,MAAR,CAApB;AACD;;AACD,SAAS2N,aAAT,CAAuB5I,IAAvB,EAA6B/E,MAA7B,EAAqC;AACnC,SAAOmN,aAAa,CAACpI,IAAD,EAAO,CAAC/E,MAAR,CAApB;AACD;;AACD,SAAS4N,kBAAT,CAA4B7I,IAA5B,EAAkC/E,MAAlC,EAA0C;AACxC,SAAOoN,kBAAkB,CAACrI,IAAD,EAAO,CAAC/E,MAAR,CAAzB;AACD;;AAED,MAAM4E,aAAN,SAA4B5L,KAA5B,CAAkC;;AAClC,MAAMwN,iBAAN,SAAgCxN,KAAhC,CAAsC;;AACtC,SAAS+b,kBAAT,CAA4B1M,CAA5B,EAA+BC,CAA/B,EAAkC;AAChC,MAAID,CAAC,GAAGC,CAAR,EAAW;AACT,WAAO,CAAP;AACD,GAFD,MAEO,IAAIA,CAAC,GAAGD,CAAR,EAAW;AAChB,WAAO,CAAC,CAAR;AACD,GAFM,MAEA;AACL,WAAO,CAAP;AACD;AACF;;AACD,SAAS2M,iBAAT,CAA2BC,IAA3B,EAAiC;AAC/B,UAAQA,IAAR;AACE,SAAK,QAAL;AACE,aAAO,MAAP;;AACF,SAAK,SAAL;AACE,aAAO,OAAP;;AACF,SAAK,QAAL;AACE,aAAO,MAAP;;AACF,SAAK,OAAL;AACE,aAAO,KAAP;;AACF,SAAK,QAAL;AACE,aAAO,MAAP;;AACF,SAAK,UAAL;AACE,aAAO,QAAP;;AACF,SAAK,UAAL;AACE,aAAO,QAAP;;AACF,SAAK,eAAL;AACE,aAAO,aAAP;;AACF;AACE,YAAM,IAAIjc,KAAJ,CAAU,4CAAV,CAAN;AAlBJ;AAoBD;;AACD,SAASkc,SAAT,CAAmBlL,IAAnB,EAAyB;AACvB,SAAOzQ,IAAI,CAACuB,KAAL,CAAWvB,IAAI,CAACC,SAAL,CAAewQ,IAAf,CAAX,CAAP;AACD;;AACD,SAASjE,sBAAT,CAAgChB,IAAhC,EAAsC;AACpC;AACA,SAAOA,IAAI,YAAYoG,QAAhB,GAA2BX,eAAe,CAAClF,OAAhB,CAAwB7C,YAAxB,CAAqCsC,IAArC,CAA3B,GACDA,IAAI,YAAYyF,eAAhB,GAAkCzF,IAAlC,GACIyF,eAAe,CAAClF,OAAhB,CAAwByF,QAAxB,CAAiChG,IAAjC,CAFV;AAGD;;AACD,SAASc,mBAAT,CAA6Bd,IAA7B,EAAmC9C,QAAnC,EAA6C;AAC3C,MAAI8C,IAAI,YAAYoG,QAApB,EAA8B;AAC5B,QAAIpG,IAAI,CAAC9C,QAAL,KAAkBA,QAAtB,EAAgC;AAC9B,aAAOuI,eAAe,CAAClF,OAAhB,CACJ7C,YADI,CACSsC,IADT,EAEJ7N,GAFI,CAEA,UAFA,EAEY+K,QAFZ,EAGJ0H,UAHI,EAAP;AAID;;AACD,WAAO5E,IAAP;AACD;;AACD,SAAOA,IAAI,YAAYyF,eAAhB,GACHzF,IAAI,CAAC7N,GAAL,CAAS,UAAT,EAAqB+K,QAArB,EAA+B0H,UAA/B,EADG,GAEHa,eAAe,CAAClF,OAAhB,CACGyF,QADH,CACYhG,IADZ,EAEG7N,GAFH,CAEO,UAFP,EAEmB+K,QAFnB,EAGG0H,UAHH,EAFJ;AAMD,C,CACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS+G,yBAAT,CAAmC3L,IAAnC,EAAyC9C,QAAzC,EAAmD;AACjD,MAAI8C,IAAI,CAAC9C,QAAL,KAAkBA,QAAtB,EAAgC;AAC9B,WAAOuI,eAAe,CAAClF,OAAhB,CACJ7C,YADI,CACSsC,IADT,EAEJ7N,GAFI,CAEA,UAFA,EAEY+K,QAFZ,EAGJ0H,UAHI,EAAP;AAID;;AACD,SAAO5E,IAAP;AACD;;AAED,MAAMoQ,eAAN,SAA8Bnc,KAA9B,CAAoC;;AACpC,SAASoc,uBAAT,CAAiC/b,OAAjC,EAA0C;AACxC,MAAIgJ,KAAJ;;AACA,MAAIhJ,OAAO,CAACgJ,KAAR,YAAyB8I,QAA7B,EAAuC;AACrC9I,SAAK,GAAGhJ,OAAO,CAACgJ,KAAhB;AACD,GAFD,MAEO,IAAIhJ,OAAO,CAACgJ,KAAR,YAAyBmI,eAA7B,EAA8C;AACnDnI,SAAK,GAAGhJ,OAAO,CAACgJ,KAAR,CAAcsH,UAAd,EAAR;AACD,GAFM,MAEA,IAAIa,eAAe,CAAClF,OAAhB,CAAwBsF,MAAxB,CAA+BvR,OAAO,CAACgJ,KAAvC,CAAJ,EAAmD;AACxDA,SAAK,GAAGmI,eAAe,CAAClF,OAAhB,CAAwByF,QAAxB,CAAiC1R,OAAO,CAACgJ,KAAzC,EAAgDsH,UAAhD,EAAR;AACD,GAFM,MAEA;AACL,UAAM,IAAIwL,eAAJ,CACJ,2EACE,4EAFE,CAAN;AAID;;AACD,MAAItS,GAAJ;;AACA,MAAIxJ,OAAO,CAACwJ,GAAZ,EAAiB;AACf,QAAIxJ,OAAO,CAACwJ,GAAR,YAAuBsI,QAA3B,EAAqC;AACnCtI,SAAG,GAAGxJ,OAAO,CAACwJ,GAAd;AACD,KAFD,MAEO,IAAIxJ,OAAO,CAACwJ,GAAR,YAAuB2H,eAA3B,EAA4C;AACjD3H,SAAG,GAAGxJ,OAAO,CAACwJ,GAAR,CAAY8G,UAAZ,EAAN;AACD,KAFM,MAEA,IAAIa,eAAe,CAAClF,OAAhB,CAAwBsF,MAAxB,CAA+BvR,OAAO,CAACwJ,GAAvC,CAAJ,EAAiD;AACtDA,SAAG,GAAG2H,eAAe,CAAClF,OAAhB,CAAwByF,QAAxB,CAAiC1R,OAAO,CAACwJ,GAAzC,EAA8C8G,UAA9C,EAAN;AACD,KAFM,MAEA;AACL,YAAM,IAAIwL,eAAJ,CACJ,0FACE,4EAFE,CAAN;AAID;AACF;;AACD,MAAI9b,OAAO,CAACqQ,QAAR,KAAqBxO,SAAzB,EAAoC;AAClC,QAAI,CAAC0D,MAAM,CAACsH,SAAP,CAAiB7M,OAAO,CAACqQ,QAAzB,CAAL,EAAyC;AACvC,YAAM,IAAIyL,eAAJ,CAAoB,mCAApB,CAAN;AACD;;AACD,QAAI9b,OAAO,CAACqQ,QAAR,IAAoB,CAAxB,EAA2B;AACzB,YAAM,IAAIyL,eAAJ,CAAoB,mCAApB,CAAN;AACD;AACF;;AACD,MAAI9b,OAAO,CAACiQ,KAAR,KAAkBpO,SAAtB,EAAiC;AAC/B,QAAI,CAAC0D,MAAM,CAACsH,SAAP,CAAiB7M,OAAO,CAACiQ,KAAzB,CAAL,EAAsC;AACpC,YAAM,IAAI6L,eAAJ,CAAoB,gCAApB,CAAN;AACD;;AACD,QAAI9b,OAAO,CAACiQ,KAAR,GAAgB,CAApB,EAAuB;AACrB,YAAM,IAAI6L,eAAJ,CAAoB,gCAApB,CAAN;AACD;AACF;;AACD,MAAI9b,OAAO,CAACwJ,GAAR,KAAgB3H,SAAhB,IAA6B7B,OAAO,CAACiQ,KAAR,KAAkBpO,SAAnD,EAA8D;AAC5D,UAAM,IAAIia,eAAJ,CAAoB,0CAApB,CAAN;AACD;;AACD,SAAO;AACL9S,SADK;AAELQ,OAFK;AAGLyG,SAAK,EAAEjQ,OAAO,CAACiQ,KAHV;AAILI,YAAQ,EAAErQ,OAAO,CAACqQ;AAJb,GAAP;AAMD;;AACD,SAASqH,oBAAT,CAA8BsE,iBAA9B,EAAiDhc,OAAjD,EAA0D;AACxD,QAAMyX,WAAW,GAAGsE,uBAAuB,CAAC/b,OAAD,CAA3C;AACA,QAAMic,YAAY,GAAGJ,SAAS,CAAC7b,OAAD,CAA9B;AACAgc,mBAAiB,CAACvV,OAAlB,CAA0ByV,GAAG,IAAI;AAC/BA,OAAG,CAACC,gBAAJ,CAAqBF,YAArB,EAAmCxE,WAAnC;AACD,GAFD;AAGArS,QAAM,CAACoB,IAAP,CAAYiR,WAAZ,EAAyBhR,OAAzB,CAAiClG,GAAG,IAAI;AACtC,QAAIkX,WAAW,CAAClX,GAAD,CAAX,KAAqBsB,SAAzB,EAAoC;AAClC,aAAO4V,WAAW,CAAClX,GAAD,CAAlB;AACD;AACF,GAJD;AAKA,SAAOkX,WAAP;AACD;;AACD,SAASD,gBAAT,CAA0BxX,OAA1B,EAAmC;AACjC,QAAMoc,GAAG,GAAGP,SAAS,CAAC7b,OAAD,CAArB;AACAoc,KAAG,CAACpT,KAAJ,GAAYhJ,OAAO,CAACgJ,KAApB;AACA,MAAIhJ,OAAO,CAACwJ,GAAZ,EAAiB4S,GAAG,CAAC5S,GAAJ,GAAUxJ,OAAO,CAACwJ,GAAlB;AACjB,SAAO4S,GAAP;AACD;;AAED,MAAMC,mBAAN,SAAkC1c,KAAlC,CAAwC;;AACxC,MAAM2c,aAAN,CAAoB;AAClBxf,aAAW,CAAC4O,IAAD,EAAO;AAChB,SAAKA,IAAL,GAAYA,IAAZ;AACD;;AAHiB;;AAKpB,MAAM6Q,eAAN,CAAsB;AACpBzf,aAAW,CAAC4O,IAAD,EAAO;AAChB,SAAKA,IAAL,GAAYA,IAAZ;AACD;;AAHmB;;AAKtB,SAASkM,sBAAT,CAAgC4E,KAAhC,EAAuC;AACrC,SAAO3R,QAAQ,IACb2R,KAAK,CAAC5S,MAAN,CAAa,CAACC,IAAD,EAAOC,IAAP,KAAgB;AAC3B,UAAMiP,IAAI,GAAGjP,IAAI,CAAC6B,GAAL,CAASd,QAAT,CAAb;AACA,QAAIkO,IAAJ,EAAUlP,IAAI,CAACjH,IAAL,CAAUmW,IAAV;AACV,WAAOlP,IAAP;AACD,GAJD,EAIG,EAJH,CADF;AAMD;;AAED,MAAM8N,uBAAN,CAA8B;AAC5B7a,aAAW,CAACya,eAAD,EAAkBvX,OAAlB,EAA2B2I,IAA3B,EAAiC;AAC1C,SAAK3I,OAAL,GAAeA,OAAf;AACA,SAAK2I,IAAL,GAAYA,IAAZ;AACA,SAAK6T,KAAL,GAAa,EAAb;AACA,SAAK3R,QAAL,GACE;AACA,SAAK7K,OAAL,CAAaiQ,KAAb,KAAuBpO,SAAvB,GAAmC,KAAK4a,OAAL,EAAnC,GACM,KAAK9T,IAAL,CAAUc,OAAV,GAAoB,KAAKiT,uBAAL,EAApB,GACI,KAAKC,gBAAL,EAJZ;AAKA,SAAK3c,OAAL,GAAeoF,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBwW,SAAS,CAAC7b,OAAD,CAA3B,CAAd,EAAqD;AAClEgJ,WAAK,EAAEhJ,OAAO,CAACgJ,KADmD;AAElEQ,SAAG,EAAExJ,OAAO,CAACwJ;AAFqD,KAArD,CAAf;AAIA,SAAKC,OAAL,GAAgB,KAAKzJ,OAAL,CAAaiQ,KAAb,KAAuBpO,SAAvB,IAAoC8G,IAAI,CAACc,OAA1C,IAAsD,KAArE;;AACA,kCAAuB,KAAKmT,qBAAL,CAA2BjU,IAA3B,CAAvB;AAAA,UAAQK,KAAR,yBAAQA,KAAR;AAAA,UAAeQ,GAAf,yBAAeA,GAAf;;AACA,QAAIxJ,OAAO,CAACiQ,KAAR,KAAkBpO,SAAtB,EAAiC;AAC/B,WAAKmH,KAAL,GAAahJ,OAAO,CAACgJ,KAArB;AACD,KAFD,MAEO,IAAIA,KAAK,IAAIhJ,OAAO,CAACgJ,KAArB,EAA4B;AACjC,WAAKA,KAAL,GAAaA,KAAK,CAACoD,cAAN,CAAqBpM,OAAO,CAACgJ,KAA7B,IAAsCA,KAAtC,GAA8ChJ,OAAO,CAACgJ,KAAnE;AACD,KAFM,MAEA;AACL,WAAKA,KAAL,GAAaA,KAAK,IAAIhJ,OAAO,CAACgJ,KAA9B;AACD;;AACD,QAAIQ,GAAG,IAAIxJ,OAAO,CAACwJ,GAAnB,EAAwB;AACtB,WAAKA,GAAL,GAAWA,GAAG,CAACwE,eAAJ,CAAoBhO,OAAO,CAACwJ,GAA5B,IAAmCA,GAAnC,GAAyCxJ,OAAO,CAACwJ,GAA5D;AACD,KAFD,MAEO;AACL,WAAKA,GAAL,GAAWA,GAAG,IAAIxJ,OAAO,CAACwJ,GAA1B;AACD;;AACD,QAAI,KAAKb,IAAL,CAAUc,OAAV,IAAqB,EAAEzJ,OAAO,CAACiQ,KAAR,KAAkBpO,SAAlB,IAA+B,KAAK2H,GAAtC,CAAzB,EAAqE;AACnE,YAAM,IAAI7J,KAAJ,CACJ,uEACE,iDAFE,CAAN;AAID;;AACD,SAAK4J,UAAL,GAAkB,CAAC,KAAKC,GAAN,IAAa,KAAKxJ,OAAL,CAAaiQ,KAAb,KAAuBpO,SAAtD;AACA,SAAK6I,WAAL,GAAmB,CAAC,CAAC,KAAK1K,OAAL,CAAaqQ,QAAlC;AACA,SAAKmM,KAAL,GAAa5U,KAAK,CAACC,OAAN,CAAc0P,eAAd,IAAiCA,eAAjC,GAAmDA,eAAe,CAAC,IAAD,CAA/E;AACD;;AACe,GAAfxK,MAAM,CAAClC,QAAQ,IAAI;AAClB,WAAO,KAAKA,QAAZ;AACD;;AACD3B,MAAI,CAACP,IAAD,EAAO;AACT,WAAO,KAAKkC,QAAL,CAAc3B,IAAd,CAAmBP,IAAnB,CAAP;AACD;AACD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAC0B,GAAvB+T,uBAAuB,GAAG;AACzB,UAAMnP,KAAK,GAAG3F,KAAK,CAACtI,IAAN,CAAW,KAAKqd,gBAAL,EAAX,EAAoClT,OAApC,EAAd;AACA,QAAI2D,SAAJ;AACA,UAAM4D,SAAS,GAAGzD,KAAK,CAAC1K,KAAN,EAAlB;AACA,QAAI6I,IAAI,GAAGsF,SAAS,CAAC3B,KAAV,EAAX;;AACA,WAAO3D,IAAP,EAAa;AACX,UAAI0B,SAAS,IAAIA,SAAS,CAACxB,UAAvB,IAAqCF,IAAI,CAACK,OAAL,CAAaqB,SAAS,CAACxB,UAAvB,CAAzC,EAA6E;AAC3EF,YAAI,GAAGsF,SAAS,CAAC3B,KAAV,EAAP;AACA;AACD;;AACDjC,eAAS,GAAG,MAAM1B,IAAlB;;AACA,UAAI0B,SAAS,IAAIA,SAAS,CAACxB,UAAvB,IAAqCwB,SAAS,CAACxB,UAAV,CAAqBQ,cAArB,CAAoCV,IAApC,CAAzC,EAAoF;AAClF,cAAM,IAAI/L,KAAJ,CACJ,+EACE,gDAFE,CAAN;AAID;;AACD+L,UAAI,GAAGsF,SAAS,CAAC3B,KAAV,EAAP;AACD;;AACD,WAAOxN,SAAP;AACD;;AACgB,GAAhB8a,gBAAgB,GAAG;AAClB,QAAI,KAAK3c,OAAL,CAAaiQ,KAAb,KAAuB,CAA3B,EAA8B;AAC9B,UAAMnD,QAAQ,GAAG,KAAK2P,OAAL,EAAjB;AACA,UAAMzT,KAAK,GAAG,KAAKL,IAAL,CAAUK,KAAV,IAAmB,KAAKA,KAAtC;AACA,QAAI0C,IAAI,GAAGoB,QAAQ,CAAC5D,IAAT,GAAgB5C,KAA3B;AACA,QAAIvC,KAAK,GAAG,CAAZ;AACA,QAAIqJ,SAAJ;;AACA,WAAO1B,IAAI,IAAI3H,KAAK,IAAI,KAAK/D,OAAL,CAAaiQ,KAArC,EAA4C;AAC1ClM,WAAK;;AACL,UAAI2H,IAAI,CAACV,QAAL,CAAchC,KAAd,CAAJ,EAA0B;AACxB0C,YAAI,GAAGoB,QAAQ,CAAC5D,IAAT,GAAgB5C,KAAvB;AACA;AACD;;AACD,UAAI8G,SAAS,IAAIA,SAAS,CAACxB,UAAvB,IAAqCF,IAAI,CAACV,QAAL,CAAcoC,SAAS,CAACxB,UAAxB,CAAzC,EAA8E;AAC5EF,YAAI,GAAGoB,QAAQ,CAAC5D,IAAT,GAAgB5C,KAAvB;AACA;AACD;;AACD8G,eAAS,GAAG,MAAM1B,IAAlB;;AACA,UAAI0B,SAAS,IAAIA,SAAS,CAACxB,UAAvB,IAAqCwB,SAAS,CAACxB,UAAV,CAAqBoC,eAArB,CAAqCtC,IAArC,CAAzC,EAAqF;AACnF,cAAM,IAAI/L,KAAJ,CACJ,+EACE,gDAFE,CAAN;AAID;;AACD+L,UAAI,GAAGoB,QAAQ,CAAC5D,IAAT,GAAgB5C,KAAvB;AACD;;AACD,WAAOzE,SAAP;AACD;;AACO,GAAP4a,OAAO,GAAG;AACT,QAAII,YAAY,GAAG,KAAK7T,KAAxB;AACA,QAAI,KAAKS,OAAT,EAAkBoT,YAAY,GAAG,KAAKrT,GAApB;AAClB,QAAIkC,IAAI,GAAG,KAAKoR,QAAL,CAAcD,YAAd,CAAX;;AACA,WAAOnR,IAAP,EAAa;AACX,YAAM/C,IAAI,GAAG,MAAM,KAAKgE,kBAAL,CAAwBjB,IAAxB,CAAnB;;AACA,UAAI/C,IAAI,IAAIA,IAAI,CAACiD,UAAjB,EAA6B;AAC3B,YACE,KAAKnC,OAAL,GACId,IAAI,CAACiD,UAAL,CAAgBQ,cAAhB,CAA+BV,IAA/B,CADJ,GAEI/C,IAAI,CAACiD,UAAL,CAAgBoC,eAAhB,CAAgCtC,IAAhC,CAHN,EAIE;AACA;AACA;AACA;AACA;AACA,gBAAM,IAAI/L,KAAJ,CACJ,+EACE,gDAFE,CAAN;AAID;;AACD+L,YAAI,GAAG,KAAKoR,QAAL,CAAcnU,IAAI,CAACiD,UAAnB,CAAP;AACD,OAhBD,MAgBO;AACLF,YAAI,GAAG,KAAKoR,QAAL,CACL,KAAKrT,OAAL,GAAeiC,IAAI,CAACZ,QAAL,CAAc,CAAd,EAAiB,aAAjB,CAAf,GAAiDY,IAAI,CAACD,GAAL,CAAS,CAAT,EAAY,aAAZ,CAD5C,CAAP;AAGD;AACF;;AACD,WAAO5J,SAAP;AACD;AACD;AACF;AACA;;;AACEib,UAAQ,CAAC9T,KAAD,EAAQ;AACd,QAAIxH,MAAM,GAAG,KAAKub,QAAL,CAAc/T,KAAK,CAACnL,GAAN,CAAU,YAAV,EAAwB,EAAxB,CAAd,CAAb;AACA,QAAI,KAAKmf,aAAL,CAAmBxb,MAAM,CAACkK,IAA1B,CAAJ,EAAqC,OAAO,IAAP;AACrC,QAAI3H,KAAK,GAAG,CAAZ;;AACA,WAAOvC,MAAM,YAAY+a,eAAlB,IAAqCxY,KAAK,GAAG,EAApD,EAAwD;AACtDvC,YAAM,GAAG,KAAKub,QAAL,CAAcvb,MAAM,CAACkK,IAArB,CAAT;AACA,UAAI,KAAKsR,aAAL,CAAmBxb,MAAM,CAACkK,IAA1B,CAAJ,EAAqC,OAAO,IAAP;AACrC3H,WAAK;AACN;;AACD,QAAIvC,MAAM,YAAY+a,eAAtB,EAAuC;AACrC,YAAM,IAAIF,mBAAJ,CACH,2CAA0CtY,KAAM,eAAjD,GACG,wBAAuBvC,MAAM,CAACkK,IAAP,CAAYxE,WAAZ,EAA0B,GAFhD,CAAN;AAID;;AACD,QAAI,KAAKuC,OAAL,GAAeT,KAAK,CAACgC,QAAN,CAAexJ,MAAM,CAACkK,IAAtB,CAAf,GAA6C1C,KAAK,CAAC+C,OAAN,CAAcvK,MAAM,CAACkK,IAArB,CAAjD,EAA6E;AAC3E,YAAM,IAAI2Q,mBAAJ,CACJ,oEACE,sDADF,GAEE,kEAFF,GAGE,yCAJE,CAAN;AAMD;;AACD,WAAO7a,MAAM,CAACkK,IAAd;AACD;AACD;AACF;AACA;AACA;;;AACEqR,UAAQ,CAAC/T,KAAD,EAAQ;AACd,QAAIxH,MAAM,GAAG,IAAI8a,aAAJ,CAAkBtT,KAAlB,CAAb;;AACA,SAAK,MAAM+P,IAAX,IAAmB,KAAKyD,KAAxB,EAA+B;AAC7B,UAAIhb,MAAM,YAAY+a,eAAtB,EAAuC;AACrC,eAAO/a,MAAP;AACD;;AACDA,YAAM,GAAGuX,IAAI,CAACkE,GAAL,CAASzb,MAAM,CAACkK,IAAhB,CAAT;AACD;;AACD,WAAOlK,MAAP;AACD;;AACDwb,eAAa,CAACtR,IAAD,EAAO;AAClB,WAAO,KAAKjC,OAAL,GAAeiC,IAAI,CAACV,QAAL,CAAc,KAAKhC,KAAnB,CAAf,GAA2C,KAAKQ,GAAL,IAAYkC,IAAI,CAACK,OAAL,CAAa,KAAKvC,GAAlB,CAA9D;AACD;;AACDmD,oBAAkB,CAACjB,IAAD,EAAO;AACvB,WAAO,KAAKhB,WAAL,GAAmBgB,IAAI,CAAC7N,GAAL,CAAS,UAAT,EAAqB,KAAKmC,OAAL,CAAaqQ,QAAlC,CAAnB,GAAiE3E,IAAxE;AACD;;AACDkR,uBAAqB,CAACjU,IAAD,EAAO;AAC1B,WAAO;AACLK,WAAK,EAAEL,IAAI,CAACK,KAAL,IAAcqO,yBAAyB,CAAC1O,IAAI,CAACK,KAAN,EAAa,KAAKhJ,OAAL,CAAagJ,KAAb,CAAmBJ,QAAhC,CADzC;AAELY,SAAG,EAAEb,IAAI,CAACa,GAAL,IAAY6N,yBAAyB,CAAC1O,IAAI,CAACa,GAAN,EAAW,KAAKxJ,OAAL,CAAagJ,KAAb,CAAmBJ,QAA9B;AAFrC,KAAP;AAID;;AAxM2B;;;;;;;;;;;;;;AChtB9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAaA,MAAMsU,cAAN,CAAqB;AACnBpgB,aAAW,CAACqgB,SAAD,EAAY;AACrB,SAAKA,SAAL,GAAiBA,SAAjB;AACA,SAAKnU,KAAL,GAAamU,SAAS,CAACnU,KAAvB;AACA,SAAKQ,GAAL,GAAW2T,SAAS,CAAC3T,GAArB;AACA,SAAKxJ,OAAL,GAAemd,SAAS,CAACnd,OAAzB;AACD;;AANkB;;AASrB,MAAMod,aAAN,SAA4BF,cAA5B,CAA2C;AACzCpgB,aAAW,CAACqgB,SAAD,EAAYE,QAAZ,EAAsB;AAC/B,UAAMF,SAAN;AACA,SAAKE,QAAL,GAAgBA,QAAhB;AACA,SAAKC,YAAL,GAAoB3B,yEAAiB,CAAC,KAAK3b,OAAL,CAAaud,SAAd,CAArC;AACA,SAAKC,sBAAL,GAA8B,KAAKC,mBAAL,CAAyB,KAAKzd,OAAL,CAAagJ,KAAtC,CAA9B;AACA,SAAK0U,iBAAL,GAAyB,KAAKF,sBAA9B;AACA,SAAKG,eAAL,GAAuB,KAAKC,iBAAL,CAAuB,KAAKJ,sBAA5B,CAAvB;AACA,SAAKK,cAAL,CAAoB,KAAKR,QAAzB;AACD;;AACDJ,KAAG,CAACvR,IAAD,EAAO;AACR,WAAO,KAAKoS,YAAL,CAAkB,IAAIxB,6DAAJ,CAAkB5Q,IAAlB,CAAlB,CAAP;AACD;;AACDoS,cAAY,CAACjF,GAAD,EAAM;AAChB,UAAQnN,IAAR,GAAiBmN,GAAjB,CAAQnN,IAAR;;AACA,QAAImN,GAAG,YAAYyD,6DAAf,IAAgC,KAAKyB,oBAAL,CAA0BrS,IAA1B,CAApC,EAAqE;AACnE,aAAOmN,GAAP;AACD;;AACD,SAAKgF,cAAL,CAAoBnS,IAApB;AACA,WAAO,IAAI6Q,+DAAJ,EACL;AACA,SAAKwB,oBAAL,CAA0BrS,IAA1B,IAAkCA,IAAlC,GAAyC,KAAKsS,oBAAL,EAFpC,CAAP;AAID;;AACDA,sBAAoB,GAAG;AACrB,WAAO,KAAKN,iBAAZ;AACD;;AACDD,qBAAmB,CAAC/R,IAAD,EAAO;AACxB,QAAI,KAAK1L,OAAL,CAAaud,SAAb,KAA2B,QAA/B,EAAyC;AACvC,aAAO7R,IAAI,CAACI,WAAL,CAAiB,MAAjB,EAAyB;AAAE4B,iBAAS,EAAE,KAAK1N,OAAL,CAAa0N;AAA1B,OAAzB,CAAP;AACD;;AACD,WAAOhC,IAAI,CAACI,WAAL,CAAiB,KAAKwR,YAAtB,CAAP;AACD;;AACDM,mBAAiB,CAAC5U,KAAD,EAAQ;AACvB,YAAQ,KAAKhJ,OAAL,CAAaud,SAArB;AACE,WAAK,QAAL;AACE,eAAOvU,KAAK,CAACyC,GAAN,CAAU,CAAV,EAAa,MAAb,CAAP;;AACF,WAAK,SAAL;AACE,eAAOzC,KAAK,CAACyC,GAAN,CAAU,CAAV,EAAa,OAAb,CAAP;;AACF,WAAK,QAAL;AACE,eAAOzC,KAAK,CAACyC,GAAN,CAAU,CAAV,EAAa,MAAb,CAAP;;AACF,WAAK,OAAL;AACE,eAAOzC,KAAK,CAACyC,GAAN,CAAU,CAAV,EAAa,KAAb,CAAP;;AACF,WAAK,QAAL;AACE,eAAOzC,KAAK,CAACyC,GAAN,CAAU,CAAV,EAAa,MAAb,CAAP;;AACF,WAAK,UAAL;AACE,eAAOzC,KAAK,CAACyC,GAAN,CAAU,CAAV,EAAa,QAAb,CAAP;;AACF,WAAK,UAAL;AACE,eAAOzC,KAAK,CAACyC,GAAN,CAAU,CAAV,EAAa,QAAb,CAAP;;AACF,WAAK,eAAL;AACE,eAAOzC,KAAK,CAACyC,GAAN,CAAU,CAAV,EAAa,aAAb,CAAP;;AACF;AACE,cAAM,IAAI9L,KAAJ,CAAW,qBAAoB,KAAKK,OAAL,CAAaud,SAAU,EAAtD,CAAN;AAlBJ;AAoBD;;AACDM,gBAAc,CAACnS,IAAD,EAAO;AACnB,UAAM/E,MAAM,GAAG,KAAKsX,kBAAL,CAAwBvS,IAAxB,CAAf;AACA,SAAKgS,iBAAL,GAAyB,KAAKF,sBAAL,CAA4B/R,GAA5B,CAAgC9E,MAAhC,EAAwC,KAAK2W,YAA7C,CAAzB;AACA,SAAKK,eAAL,GAAuB,KAAKC,iBAAL,CAAuB,KAAKF,iBAA5B,CAAvB;AACD;;AACDK,sBAAoB,CAACrS,IAAD,EAAO;AACzB,WAAO,KAAKgS,iBAAL,CAAuB1P,eAAvB,CAAuCtC,IAAvC,KAAgD,KAAKiS,eAAL,CAAqB5R,OAArB,CAA6BL,IAA7B,CAAvD;AACD;;AACDuS,oBAAkB,CAACvS,IAAD,EAAO;AACvB,WAAOwS,8BAA8B,CAAC;AACpCC,WAAK,EAAE,KAAKX,sBADwB;AAEpC1K,YAAM,EAAEpH,IAF4B;AAGpC2H,UAAI,EAAE,KAAKiK,YAHyB;AAIpCc,cAAQ,EAAE,KAAKpe,OAAL,CAAaoe,QAJa;AAKpC1Q,eAAS,EAAE,KAAK1N,OAAL,CAAa0N,SALY;AAMpC2Q,eAAS,EAAE;AANyB,KAAD,CAArC;AAQD;;AAxEwC;AA0E3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASH,8BAAT,CAAwC;AAAEC,OAAF;AAASrL,QAAT;AAAiBO,MAAjB;AAAuB+K,UAAvB;AAAiC1Q,WAAjC;AAA4C2Q;AAA5C,CAAxC,EAAiG;AAC/F,MAAIC,UAAU,GAAG,CAAC,MAAM;AACtB,QAAIC,gBAAJ;AACA,QAAIC,MAAJ;;AACA,YAAQnL,IAAR;AACE,WAAK,MAAL;AACEmL,cAAM,GAAG,CAAC1L,MAAM,CAACnH,GAAP,CAAW,MAAX,IAAqBwS,KAAK,CAACxS,GAAN,CAAU,MAAV,CAAtB,IAA2C,EAApD;AACA6S,cAAM,GAAGA,MAAM,GAAG1L,MAAM,CAACnH,GAAP,CAAW,OAAX,CAAT,GAA+BwS,KAAK,CAACxS,GAAN,CAAU,OAAV,CAAxC;AACA,eAAO1I,IAAI,CAACuF,KAAL,CAAWgW,MAAM,GAAG,EAApB,CAAP;;AACF,WAAK,OAAL;AACEA,cAAM,GAAG,CAAC1L,MAAM,CAACnH,GAAP,CAAW,MAAX,IAAqBwS,KAAK,CAACxS,GAAN,CAAU,MAAV,CAAtB,IAA2C,EAApD;AACA6S,cAAM,GAAGA,MAAM,GAAG1L,MAAM,CAACnH,GAAP,CAAW,OAAX,CAAT,GAA+BwS,KAAK,CAACxS,GAAN,CAAU,OAAV,CAAxC;AACA,eAAO6S,MAAP;;AACF,WAAK,MAAL;AACEL,aAAK,GAAGA,KAAK,CAACrS,WAAN,CAAkB,MAAlB,EAA0B;AAAE4B;AAAF,SAA1B,CAAR;AACA6Q,wBAAgB,GAAGvM,2DAAW,CAACM,oBAA/B;AACA;;AACF,WAAK,KAAL;AACEiM,wBAAgB,GAAGvM,2DAAW,CAACK,mBAA/B;AACA;;AACF,WAAK,MAAL;AACEkM,wBAAgB,GAAGvM,2DAAW,CAACI,oBAA/B;AACA;;AACF,WAAK,QAAL;AACEmM,wBAAgB,GAAGvM,2DAAW,CAACG,sBAA/B;AACA;;AACF,WAAK,QAAL;AACEoM,wBAAgB,GAAGvM,2DAAW,CAACE,sBAA/B;AACA;;AACF,WAAK,aAAL;AACEqM,wBAAgB,GAAG,CAAnB;AACA;;AACF;AACE,cAAM,IAAI5e,KAAJ,CAAU,yBAAV,CAAN;AA7BJ;;AA+BA,UAAM4W,IAAI,GAAGzD,MAAM,CAACtC,OAAP,KAAmB2N,KAAK,CAAC3N,OAAN,EAAhC;AACA,WAAOvN,IAAI,CAACuF,KAAL,CAAW+N,IAAI,GAAGgI,gBAAlB,CAAP;AACD,GApCgB,GAAjB;;AAqCA,QAAMzN,EAAE,GAAGuN,SAAS,KAAK,OAAd,GAAwBpb,IAAI,CAACG,IAA7B,GAAoCH,IAAI,CAACuF,KAApD;AACA8V,YAAU,GAAGxN,EAAE,CAACwN,UAAU,GAAGF,QAAd,CAAF,GAA4BA,QAAzC;AACA,SAAOE,UAAP;AACD;;AAED,MAAMG,gBAAN,SAA+BrB,aAA/B,CAA6C;AAC3CY,sBAAoB,GAAG;AACrB,WAAO,KAAKL,eAAL,CAAqB7S,QAArB,CAA8B,CAA9B,EAAiC,aAAjC,CAAP;AACD;;AACDmT,oBAAkB,CAACvS,IAAD,EAAO;AACvB,WAAOwS,8BAA8B,CAAC;AACpCC,WAAK,EAAE,KAAKX,sBADwB;AAEpC1K,YAAM,EAAEpH,IAF4B;AAGpC2H,UAAI,EAAE,KAAKiK,YAHyB;AAIpCc,cAAQ,EAAE,KAAKpe,OAAL,CAAaoe,QAJa;AAKpC1Q,eAAS,EAAE,KAAK1N,OAAL,CAAa0N,SALY;AAMpC2Q,eAAS,EAAE;AANyB,KAAD,CAArC;AAQD;;AAb0C;;AAgB7C,MAAMK,WAAW,GAAG,CAClB,eADkB,EAElB,UAFkB,EAGlB,UAHkB,EAIlB,QAJkB,EAKlB,OALkB,EAMlB,QANkB,EAOlB,SAPkB,EAQlB,QARkB,CAApB;AAUA,MAAMC,mBAAmB,GAAG;AAC1BrN,MAAI,EAAE,eADoB;AAE1B3F,KAAG,EAAEwR,SAAS,IAAI;AAChB,QACEA,SAAS,CAACnd,OAAV,CAAkB4e,qBAAlB,KAA4C/c,SAA5C,IACAsb,SAAS,CAACnd,OAAV,CAAkBud,SAAlB,KAAgC,eAFlC,EAGE;AACA,aAAO,IAAP;AACD;;AACD,QAAIJ,SAAS,CAAC1T,OAAd,EAAuB,OAAO,IAAIgV,gBAAJ,CAAqBtB,SAArB,EAAgCA,SAAS,CAAC3T,GAA1C,CAAP;AACvB,WAAO,IAAI4T,aAAJ,CAAkBD,SAAlB,EAA6BA,SAAS,CAACnU,KAAvC,CAAP;AACD,GAXyB;AAY1BmT,kBAAgB,EAAE,CAACnc,OAAD,EAAU6e,IAAV,KAAmB;AACnC,QAAI,CAACH,WAAW,CAACI,QAAZ,CAAqB9e,OAAO,CAACud,SAA7B,CAAL,EAA8C;AAC5C,YAAM,IAAIzB,+DAAJ,CAAqB,8BAA6B5b,IAAI,CAACC,SAAL,CAAeue,WAAf,CAA4B,EAA9E,CAAN;AACD;;AACD,QAAI1e,OAAO,CAACoe,QAAR,KAAqBvc,SAAzB,EAAoC;AAClC,UAAI,CAAC0D,MAAM,CAACsH,SAAP,CAAiB7M,OAAO,CAACoe,QAAzB,CAAL,EAAyC;AACvC,cAAM,IAAItC,+DAAJ,CAAoB,mCAApB,CAAN;AACD;;AACD,UAAI9b,OAAO,CAACoe,QAAR,GAAmB,CAAvB,EAA0B;AACxB,cAAM,IAAItC,+DAAJ,CAAoB,kCAApB,CAAN;AACD;AACF;;AACD,QAAI9b,OAAO,CAAC0N,SAAR,KAAsB7L,SAA1B,EAAqC;AACnC,UAAI,CAACmQ,2DAAW,CAACC,QAAZ,CAAqB6M,QAArB,CAA8B9e,OAAO,CAAC0N,SAAtC,CAAL,EAAuD;AACrD,cAAM,IAAIoO,+DAAJ,CACH,8BAA6B5b,IAAI,CAACC,SAAL,CAAe6R,2DAAW,CAACC,QAA3B,CAAqC,EAD/D,CAAN;AAGD;AACF;;AACD4M,QAAI,CAACtB,SAAL,GAAiBvd,OAAO,CAACud,SAAzB;AACAsB,QAAI,CAACT,QAAL,GAAgBpe,OAAO,CAACoe,QAAR,IAAoB,CAApC;AACAS,QAAI,CAACnR,SAAL,GAAiB1N,OAAO,CAAC0N,SAAR,IAAqB,IAAtC;AACD,GAlCyB;AAmC1BqR,MAAI,EAAE,MAAM,CAACJ,mBAAD;AAnCc,CAA5B;;AAsCA,SAASK,gBAAT,CAA0BC,MAA1B,EAAkC;AAChC,SAAOrX,KAAK,CAACC,OAAN,CAAcoX,MAAd,KAAyBA,MAAM,CAACne,MAAP,GAAgB,CAAhD;AACD;;AAED,MAAMoe,SAAS,GAAG,IAAIC,OAAJ,EAAlB;;AACA,MAAMC,kBAAN,SAAiClC,cAAjC,CAAgD;AAC9CpgB,aAAW,CAACqgB,SAAD,EAAY;AACrB,UAAMA,SAAN;;AACA,QAAI,CAAC+B,SAAS,CAACG,GAAV,CAAc,KAAKlC,SAAnB,CAAL,EAAoC;AAClC+B,eAAS,CAACrhB,GAAV,CAAc,KAAKsf,SAAnB,EAA8B,IAAIC,aAAJ,CAAkBD,SAAlB,EAA6BA,SAAS,CAACnU,KAAvC,CAA9B;AACD;;AACD,SAAKuU,SAAL,GAAiB2B,SAAS,CAACvT,GAAV,CAAc,KAAKwR,SAAnB,CAAjB;AACD;;AACDW,cAAY,CAACjF,GAAD,EAAM;AAChB,WAAO,KAAK0E,SAAL,CAAeO,YAAf,CAA4BjF,GAA5B,CAAP;AACD;;AAV6C;;AAYhD,MAAMyG,qBAAN,SAAoCpC,cAApC,CAAmD;AACjDpgB,aAAW,CAACqgB,SAAD,EAAY;AACrB,UAAMA,SAAN;;AACA,QAAI,CAAC+B,SAAS,CAACG,GAAV,CAAc,KAAKlC,SAAnB,CAAL,EAAoC;AAClC+B,eAAS,CAACrhB,GAAV,CAAc,KAAKsf,SAAnB,EAA8B,IAAIsB,gBAAJ,CAAqBtB,SAArB,EAAgCA,SAAS,CAAC3T,GAA1C,CAA9B;AACD;;AACD,SAAK+T,SAAL,GAAiB2B,SAAS,CAACvT,GAAV,CAAc,KAAKwR,SAAnB,CAAjB;AACD;;AACDW,cAAY,CAACjF,GAAD,EAAM;AAChB,WAAO,KAAK0E,SAAL,CAAeO,YAAf,CAA4BjF,GAA5B,CAAP;AACD;;AAVgD;AAanD;AACA;AACA;AACA;;;AACA,MAAM0G,mBAAN,SAAkCD,qBAAlC,CAAwD;AACtDrC,KAAG,CAACvR,IAAD,EAAO;AACR;AACA,UAAM8T,WAAW,GAAG9T,IAAI,CAACC,GAAL,CAAS,KAAKG,WAAd,CAApB,CAFQ,CAGR;;AACA,SAAK,MAAMjI,IAAX,IAAmB,KAAKob,MAAxB,EAAgC;AAC9B,UAAIO,WAAW,GAAG3b,IAAlB,EAAwB;;AACxB,UAAI2b,WAAW,KAAK3b,IAApB,EAA0B;AACxB,eAAO,KAAKia,YAAL,CAAkB,IAAIxB,6DAAJ,CAAkB5Q,IAAlB,CAAlB,CAAP;AACD,OAJ6B,CAK9B;;;AACA,aAAO,KAAKoS,YAAL,CACL,IAAIvB,+DAAJ,CAAoB7Q,IAAI,CAACyC,cAAL,CAAoB,KAAKsR,eAAzB,EAA0C5hB,GAA1C,CAA8C,KAAKiO,WAAnD,EAAgEjI,IAAhE,CAApB,CADK,CAAP;AAGD;;AACD,WAAO,KAAKia,YAAL,CACL,IAAIvB,+DAAJ,CACE7Q,IAAI,CACF;AADE,KAEDyC,cAFH,CAEkB,KAAKsR,eAFvB,EAGE;AAHF,KAIG3U,QAJH,CAIY,CAJZ,EAIe,KAAK2U,eAJpB,EAKE;AALF,KAMG5hB,GANH,CAMO,KAAKiO,WANZ,EAMyB,KAAKmT,MAAL,CAAY,CAAZ,CANzB,CADF,CADK,CAAP;AAWD;;AA1BqD;;AA6BxD,MAAMS,4BAAN,SAA2CH,mBAA3C,CAA+D;AAC7DziB,aAAW,GAAG;AACZ,UAAM,GAAGga,SAAT;AACA,SAAK2I,eAAL,GAAuB,QAAvB;AACA,SAAK3T,WAAL,GAAmB,aAAnB;AACA,SAAKmT,MAAL,GAAc,KAAKjf,OAAL,CAAa4e,qBAAb,CAAmC/b,KAAnC,GAA2C4G,OAA3C,EAAd;AACD;;AAN4D;AAS/D;AACA;AACA;AACA;;;AACA,MAAMkW,gBAAN,SAA+BP,kBAA/B,CAAkD;AAChDnC,KAAG,CAACvR,IAAD,EAAO;AACR;AACA,UAAM8T,WAAW,GAAG9T,IAAI,CAACC,GAAL,CAAS,KAAKG,WAAd,CAApB,CAFQ,CAGR;;AACA,SAAK,MAAMjI,IAAX,IAAmB,KAAKob,MAAxB,EAAgC;AAC9B,UAAIO,WAAW,GAAG3b,IAAlB,EAAwB;;AACxB,UAAI2b,WAAW,KAAK3b,IAApB,EAA0B;AACxB,eAAO,KAAKia,YAAL,CAAkB,IAAIxB,6DAAJ,CAAkB5Q,IAAlB,CAAlB,CAAP;AACD,OAJ6B,CAK9B;;;AACA,aAAO,KAAKoS,YAAL,CACL,IAAIvB,+DAAJ,CAAoB7Q,IAAI,CAACI,WAAL,CAAiB,KAAK2T,eAAtB,EAAuC5hB,GAAvC,CAA2C,KAAKiO,WAAhD,EAA6DjI,IAA7D,CAApB,CADK,CAAP;AAGD;;AACD,WAAO,KAAKia,YAAL,CACL,IAAIvB,+DAAJ,CACE7Q,IAAI,CACF;AADE,KAEDI,WAFH,CAEe,KAAK2T,eAFpB,EAGE;AAHF,KAIGhU,GAJH,CAIO,CAJP,EAIU,KAAKgU,eAJf,EAKE;AALF,KAMG5hB,GANH,CAMO,KAAKiO,WANZ,EAMyB,KAAKmT,MAAL,CAAY,CAAZ,CANzB,CADF,CADK,CAAP;AAWD;;AA1B+C;;AA6BlD,MAAMW,yBAAN,SAAwCD,gBAAxC,CAAyD;AACvD7iB,aAAW,GAAG;AACZ,UAAM,GAAGga,SAAT;AACA,SAAK2I,eAAL,GAAuB,QAAvB;AACA,SAAK3T,WAAL,GAAmB,aAAnB;AACA,SAAKmT,MAAL,GAAc,KAAKjf,OAAL,CAAa4e,qBAA3B;AACD;;AANsD;;AASzD,MAAMiB,+BAA+B,GAAG;AACtCvO,MAAI,EAAE,uBADgC;AAEtC3F,KAAG,EAAEwR,SAAS,IAAI;AAChB,QAAIA,SAAS,CAACnd,OAAV,CAAkB4e,qBAAlB,KAA4C/c,SAAhD,EAA2D,OAAO,IAAP;AAC3D,QAAIsb,SAAS,CAAC1T,OAAd,EAAuB,OAAO,IAAIiW,4BAAJ,CAAiCvC,SAAjC,CAAP;AACvB,WAAO,IAAIyC,yBAAJ,CAA8BzC,SAA9B,CAAP;AACD,GANqC;AAOtChB,kBAAgB,EAAE,CAACnc,OAAD,EAAU6e,IAAV,KAAmB;AACnC,QAAI7e,OAAO,CAAC4e,qBAAR,KAAkC/c,SAAtC,EAAiD;AAC/C,UAAI,CAACmd,gBAAgB,CAAChf,OAAO,CAAC4e,qBAAT,CAArB,EAAsD;AACpD,cAAM,IAAI9C,+DAAJ,CAAoB,mDAApB,CAAN;AACD;;AACD,UAAI9b,OAAO,CAAC4e,qBAAR,CAA8BhP,IAA9B,CAAmCkQ,GAAG,IAAIA,GAAG,GAAG,CAAN,IAAWA,GAAG,GAAG,GAA3D,CAAJ,EAAqE;AACnE,cAAM,IAAIhE,+DAAJ,CAAoB,uDAApB,CAAN;AACD;;AACD+C,UAAI,CAACD,qBAAL,GAA6B5e,OAAO,CAAC4e,qBAArC;AACAC,UAAI,CAACD,qBAAL,CAA2BxP,IAA3B,CAAgCsM,kEAAhC;AACD,KATD,MASO,IAAI1b,OAAO,CAACud,SAAR,KAAsB,eAA1B,EAA2C;AAChDsB,UAAI,CAACD,qBAAL,GAA6B,CAACC,IAAI,CAAC7V,KAAL,CAAW2C,GAAX,CAAe,aAAf,CAAD,CAA7B;AACD;AACF,GApBqC;AAqBtCoT,MAAI,EAAE,MAAM,CAACJ,mBAAD,EAAsBkB,+BAAtB;AArB0B,CAAxC;;AAwBA,MAAME,uBAAN,SAAsCR,mBAAtC,CAA0D;AACxDziB,aAAW,GAAG;AACZ,UAAM,GAAGga,SAAT;AACA,SAAK2I,eAAL,GAAuB,QAAvB;AACA,SAAK3T,WAAL,GAAmB,QAAnB;AACA,SAAKmT,MAAL,GAAc,KAAKjf,OAAL,CAAaggB,gBAAb,CAA8Bnd,KAA9B,GAAsC4G,OAAtC,EAAd;AACD;;AANuD;;AAS1D,MAAMwW,oBAAN,SAAmCN,gBAAnC,CAAoD;AAClD7iB,aAAW,GAAG;AACZ,UAAM,GAAGga,SAAT;AACA,SAAK2I,eAAL,GAAuB,QAAvB;AACA,SAAK3T,WAAL,GAAmB,QAAnB;AACA,SAAKmT,MAAL,GAAc,KAAKjf,OAAL,CAAaggB,gBAA3B;AACD;;AANiD;;AASpD,MAAME,0BAA0B,GAAG;AACjC5O,MAAI,EAAE,kBAD2B;AAEjC3F,KAAG,EAAEwR,SAAS,IAAI;AAChB,QAAIA,SAAS,CAACnd,OAAV,CAAkBggB,gBAAlB,KAAuCne,SAA3C,EAAsD,OAAO,IAAP;AACtD,QAAIsb,SAAS,CAAC1T,OAAd,EAAuB,OAAO,IAAIsW,uBAAJ,CAA4B5C,SAA5B,CAAP;AACvB,WAAO,IAAI8C,oBAAJ,CAAyB9C,SAAzB,CAAP;AACD,GANgC;AAOjChB,kBAAgB,EAAE,CAACnc,OAAD,EAAU6e,IAAV,KAAmB;AACnC,QAAI7e,OAAO,CAACggB,gBAAR,KAA6Bne,SAAjC,EAA4C;AAC1C,UAAI,CAACmd,gBAAgB,CAAChf,OAAO,CAACggB,gBAAT,CAArB,EAAiD;AAC/C,cAAM,IAAIlE,+DAAJ,CAAoB,8CAApB,CAAN;AACD;;AACD,UAAI9b,OAAO,CAACggB,gBAAR,CAAyBpQ,IAAzB,CAA8BkQ,GAAG,IAAIA,GAAG,GAAG,CAAN,IAAWA,GAAG,GAAG,EAAtD,CAAJ,EAA+D;AAC7D,cAAM,IAAIhE,+DAAJ,CAAoB,iDAApB,CAAN;AACD;;AACD+C,UAAI,CAACmB,gBAAL,GAAwBhgB,OAAO,CAACggB,gBAAhC;AACAnB,UAAI,CAACmB,gBAAL,CAAsB5Q,IAAtB,CAA2BsM,kEAA3B;AACD,KATD,MASO,IAAI,CAAC,CAAC,UAAD,EAAa,eAAb,EAA8BoD,QAA9B,CAAuC9e,OAAO,CAACud,SAA/C,CAAL,EAAgE;AACrEsB,UAAI,CAACmB,gBAAL,GAAwB,CAACnB,IAAI,CAAC7V,KAAL,CAAW2C,GAAX,CAAe,QAAf,CAAD,CAAxB;AACD;AACF,GApBgC;AAqBjCoT,MAAI,EAAE,MAAM,CAACJ,mBAAD,EAAsBuB,0BAAtB,EAAkDL,+BAAlD;AArBqB,CAAnC;;AAwBA,MAAMM,qBAAN,SAAoCZ,mBAApC,CAAwD;AACtDziB,aAAW,GAAG;AACZ,UAAM,GAAGga,SAAT;AACA,SAAK2I,eAAL,GAAuB,MAAvB;AACA,SAAK3T,WAAL,GAAmB,QAAnB;AACA,SAAKmT,MAAL,GAAc,KAAKjf,OAAL,CAAaogB,cAAb,CAA4Bvd,KAA5B,GAAoC4G,OAApC,EAAd;AACD;;AANqD;;AASxD,MAAM4W,kBAAN,SAAiCV,gBAAjC,CAAkD;AAChD7iB,aAAW,GAAG;AACZ,UAAM,GAAGga,SAAT;AACA,SAAK2I,eAAL,GAAuB,MAAvB;AACA,SAAK3T,WAAL,GAAmB,QAAnB;AACA,SAAKmT,MAAL,GAAc,KAAKjf,OAAL,CAAaogB,cAA3B;AACD;;AAN+C;;AASlD,MAAME,wBAAwB,GAAG;AAC/BhP,MAAI,EAAE,gBADyB;AAE/B3F,KAAG,EAAEwR,SAAS,IAAI;AAChB,QAAIA,SAAS,CAACnd,OAAV,CAAkBogB,cAAlB,KAAqCve,SAAzC,EAAoD,OAAO,IAAP;AACpD,QAAIsb,SAAS,CAAC1T,OAAd,EAAuB,OAAO,IAAI0W,qBAAJ,CAA0BhD,SAA1B,CAAP;AACvB,WAAO,IAAIkD,kBAAJ,CAAuBlD,SAAvB,CAAP;AACD,GAN8B;AAO/BhB,kBAAgB,EAAE,CAACnc,OAAD,EAAU6e,IAAV,KAAmB;AACnC,QAAI7e,OAAO,CAACogB,cAAR,KAA2Bve,SAA/B,EAA0C;AACxC,UAAI,CAACmd,gBAAgB,CAAChf,OAAO,CAACogB,cAAT,CAArB,EAA+C;AAC7C,cAAM,IAAItE,+DAAJ,CAAoB,4CAApB,CAAN;AACD;;AACD,UAAI9b,OAAO,CAACogB,cAAR,CAAuBxQ,IAAvB,CAA4BkQ,GAAG,IAAIA,GAAG,GAAG,CAAN,IAAWA,GAAG,GAAG,EAApD,CAAJ,EAA6D;AAC3D,cAAM,IAAIhE,+DAAJ,CAAoB,+CAApB,CAAN;AACD;;AACD+C,UAAI,CAACuB,cAAL,GAAsBpgB,OAAO,CAACogB,cAA9B;AACAvB,UAAI,CAACuB,cAAL,CAAoBhR,IAApB,CAAyBsM,kEAAzB;AACD,KATD,MASO,IAAI,CAAC,CAAC,UAAD,EAAa,UAAb,EAAyB,eAAzB,EAA0CoD,QAA1C,CAAmD9e,OAAO,CAACud,SAA3D,CAAL,EAA4E;AACjFsB,UAAI,CAACuB,cAAL,GAAsB,CAACvB,IAAI,CAAC7V,KAAL,CAAW2C,GAAX,CAAe,QAAf,CAAD,CAAtB;AACD;AACF,GApB8B;AAqB/BoT,MAAI,EAAE,MAAM,CACVJ,mBADU,EAEV2B,wBAFU,EAGVJ,0BAHU,EAIVL,+BAJU;AArBmB,CAAjC;;AA6BA,MAAMU,kBAAN,SAAiChB,mBAAjC,CAAqD;AACnDziB,aAAW,GAAG;AACZ,UAAM,GAAGga,SAAT;AACA,SAAK2I,eAAL,GAAuB,KAAvB;AACA,SAAK3T,WAAL,GAAmB,MAAnB;AACA,SAAKmT,MAAL,GAAc,KAAKjf,OAAL,CAAawgB,WAAb,CAAyB3d,KAAzB,GAAiC4G,OAAjC,EAAd;AACD;;AANkD;;AASrD,MAAMgX,eAAN,SAA8Bd,gBAA9B,CAA+C;AAC7C7iB,aAAW,GAAG;AACZ,UAAM,GAAGga,SAAT;AACA,SAAK2I,eAAL,GAAuB,KAAvB;AACA,SAAK3T,WAAL,GAAmB,MAAnB;AACA,SAAKmT,MAAL,GAAc,KAAKjf,OAAL,CAAawgB,WAA3B;AACD;;AAN4C;;AAS/C,MAAME,qBAAqB,GAAG;AAC5BpP,MAAI,EAAE,aADsB;AAE5B3F,KAAG,EAAEwR,SAAS,IAAI;AAChB,QAAIA,SAAS,CAACnd,OAAV,CAAkBwgB,WAAlB,KAAkC3e,SAAtC,EAAiD,OAAO,IAAP;AACjD,QAAIsb,SAAS,CAAC1T,OAAd,EAAuB,OAAO,IAAI8W,kBAAJ,CAAuBpD,SAAvB,CAAP;AACvB,WAAO,IAAIsD,eAAJ,CAAoBtD,SAApB,CAAP;AACD,GAN2B;AAO5BhB,kBAAgB,EAAE,CAACnc,OAAD,EAAU6e,IAAV,KAAmB;AACnC,QAAI7e,OAAO,CAACwgB,WAAR,KAAwB3e,SAA5B,EAAuC;AACrC,UAAI,CAACmd,gBAAgB,CAAChf,OAAO,CAACwgB,WAAT,CAArB,EAA4C;AAC1C,cAAM,IAAI1E,+DAAJ,CAAoB,yCAApB,CAAN;AACD;;AACD,UAAI9b,OAAO,CAACwgB,WAAR,CAAoB5Q,IAApB,CAAyBkQ,GAAG,IAAIA,GAAG,GAAG,CAAN,IAAWA,GAAG,GAAG,EAAjD,CAAJ,EAA0D;AACxD,cAAM,IAAIhE,+DAAJ,CAAoB,4CAApB,CAAN;AACD;;AACD+C,UAAI,CAAC2B,WAAL,GAAmBxgB,OAAO,CAACwgB,WAA3B;AACA3B,UAAI,CAAC2B,WAAL,CAAiBpR,IAAjB,CAAsBsM,kEAAtB;AACD,KATD,MASO,IAAI,CAAC,QAAD,EAAW,SAAX,EAAsB,QAAtB,EAAgC,OAAhC,EAAyCoD,QAAzC,CAAkD9e,OAAO,CAACud,SAA1D,CAAJ,EAA0E;AAC/EsB,UAAI,CAAC2B,WAAL,GAAmB,CAAC3B,IAAI,CAAC7V,KAAL,CAAW2C,GAAX,CAAe,MAAf,CAAD,CAAnB;AACD;AACF,GApB2B;AAqB5BoT,MAAI,EAAE,MAAM,CACVJ,mBADU,EAEV+B,qBAFU,EAGVJ,wBAHU,EAIVJ,0BAJU,EAKVL,+BALU;AArBgB,CAA9B;;AA8BA,SAASc,cAAT,CAAwBjV,IAAxB,EAA8BL,OAA9B,EAAuC;AACrC,SAAOK,IAAI,CAACD,GAAL,CAASI,oFAA4B,CAACH,IAAI,CAACC,GAAL,CAAS,SAAT,CAAD,EAAsBN,OAAtB,CAArC,EAAqE,KAArE,CAAP;AACD;;AAED,SAASuV,oBAAT,CAA8BlV,IAA9B,EAAoCL,OAApC,EAA6CwV,GAA7C,EAAkD;AAChD,MAAI9W,IAAI,GAAG2B,IAAI,CAAC7N,GAAL,CAAS,KAAT,EAAgB,CAAhB,CAAX;;AACA,MAAIgjB,GAAG,GAAG,CAAV,EAAa;AACX9W,QAAI,GAAGA,IAAI,CAAC0B,GAAL,CAAS,CAAT,EAAY,OAAZ,CAAP;AACD;;AACD1B,MAAI,GAAG4W,cAAc,CAAC5W,IAAD,EAAOsB,OAAP,CAArB,CALgD,CAMhD;;AACA,SAAOwV,GAAG,GAAG,CAAN,GAAU9W,IAAI,CAAC0B,GAAL,CAASoV,GAAT,EAAc,MAAd,CAAV,GAAkC9W,IAAI,CAAC0B,GAAL,CAASoV,GAAG,GAAG,CAAf,EAAkB,MAAlB,CAAzC;AACD;;AAED,MAAMC,gBAAN,SAA+B1B,kBAA/B,CAAkD;AAChDnC,KAAG,CAACvR,IAAD,EAAO;AACR,UAAMqV,sBAAsB,GAAGC,qBAAqB,CAClDtV,IADkD,EAElD,KAAK1L,OAAL,CAAaihB,YAFqC,EAGlD,KAAKjhB,OAAL,CAAakhB,WAHqC,CAApD;AAKA,UAAMC,UAAU,GAAGzV,IAAI,CAACC,GAAL,CAAS,KAAT,CAAnB;;AACA,SAAK,MAAMZ,GAAX,IAAkBgW,sBAAlB,EAA0C;AACxC,UAAII,UAAU,GAAGpW,GAAjB,EAAsB;;AACtB,UAAIoW,UAAU,KAAKpW,GAAnB,EAAwB;AACtB,eAAO,KAAK+S,YAAL,CAAkB,IAAIxB,6DAAJ,CAAkB5Q,IAAlB,CAAlB,CAAP;AACD;;AACD,aAAO,KAAKoS,YAAL,CAAkB,IAAIvB,+DAAJ,CAAoB7Q,IAAI,CAACI,WAAL,CAAiB,OAAjB,EAA0BjO,GAA1B,CAA8B,KAA9B,EAAqCkN,GAArC,CAApB,CAAlB,CAAP;AACD;;AACD,QAAI7B,IAAJ;AACA,QAAIkY,SAAS,GAAG1V,IAAhB;AACA,QAAI3H,KAAK,GAAG,CAAZ;;AACA,WAAO,CAACmF,IAAD,IAASnF,KAAK,GAAG,EAAxB,EAA4B;AAC1Bqd,eAAS,GAAGA,SAAS,CAACtV,WAAV,CAAsB,OAAtB,EAA+BL,GAA/B,CAAmC,CAAnC,EAAsC,OAAtC,CAAZ;AACAvC,UAAI,GAAG8X,qBAAqB,CAC1BI,SAD0B,EAE1B,KAAKphB,OAAL,CAAaihB,YAFa,EAG1B,KAAKjhB,OAAL,CAAakhB,WAHa,CAArB,CAIL,CAJK,CAAP;AAKAnd,WAAK;AACN;;AACD,QAAIA,KAAK,IAAI,EAAb,EAAiB;AACf,YAAM,IAAIsY,mEAAJ,CAAwB,kCAAxB,CAAN;AACD;;AACD,WAAO,KAAKyB,YAAL,CAAkB,IAAIvB,+DAAJ,CAAoB6E,SAAS,CAACvjB,GAAV,CAAc,KAAd,EAAqBqL,IAArB,CAApB,CAAlB,CAAP;AACD;;AA/B+C;AAiClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAAS8X,qBAAT,CAA+BtV,IAA/B,EAAqCuV,YAArC,EAAmDC,WAAnD,EAAgE;AAC9D,QAAMG,aAAa,GAAG3V,IAAI,CAACyC,cAAL,CAAoB,OAApB,EAA6BxC,GAA7B,CAAiC,KAAjC,CAAtB;AACA,MAAIoV,sBAAsB,GAAGE,YAAY,CACtCjZ,MAD0B,CACnB+C,GAAG,IAAIsW,aAAa,IAAIpe,IAAI,CAACuY,GAAL,CAASzQ,GAAT,CADL,EAE1BnH,GAF0B,CAEtBmH,GAAG,IAAKA,GAAG,GAAG,CAAN,GAAUA,GAAV,GAAgBsW,aAAa,GAAGtW,GAAhB,GAAsB,CAFxB,CAA7B;;AAGA,MAAImW,WAAJ,EAAiB;AACf,UAAMnX,IAAI,GAAG2B,IAAI,CAACI,WAAL,CAAiB,OAAjB,CAAb;AACA,UAAMwV,oBAAoB,GAAG,EAA7B;AACAJ,eAAW,CAACza,OAAZ,CAAoB8a,KAAK,IAAI;AAC3B,UAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;AAC7BD,4BAAoB,CAAC1e,IAArB,CACE,GAAGme,sBAAsB,CAAC/Y,MAAvB,CAA8B+C,GAAG,IAAIhB,IAAI,CAAClM,GAAL,CAAS,KAAT,EAAgBkN,GAAhB,EAAqBY,GAArB,CAAyB,SAAzB,MAAwC4V,KAA7E,CADL;AAGA;AACD;;AACD,YAAMC,iBAAiB,GAAGZ,oBAAoB,CAAClV,IAAD,EAAO,GAAG6V,KAAV,CAApB,CAAqC5V,GAArC,CAAyC,KAAzC,CAA1B;;AACA,UAAIoV,sBAAsB,CAACjC,QAAvB,CAAgC0C,iBAAhC,CAAJ,EAAwD;AACtDF,4BAAoB,CAAC1e,IAArB,CAA0B4e,iBAA1B;AACD;AACF,KAXD;AAYAT,0BAAsB,GAAGnZ,KAAK,CAACtI,IAAN,CAAW,IAAImiB,GAAJ,CAAQH,oBAAR,CAAX,CAAzB;AACD;;AACD,SAAOP,sBAAsB,CAAC3R,IAAvB,CAA4B,CAACJ,CAAD,EAAIC,CAAJ,KAAU;AAC3C,QAAID,CAAC,GAAGC,CAAR,EAAW,OAAO,CAAP;AACX,QAAID,CAAC,GAAGC,CAAR,EAAW,OAAO,CAAC,CAAR,CAAX,KACK,OAAO,CAAP;AACN,GAJM,CAAP;AAKD;;AAED,MAAMyS,mBAAN,SAAkCpC,qBAAlC,CAAwD;AACtDrC,KAAG,CAACvR,IAAD,EAAO;AACR,UAAMqV,sBAAsB,GAAGC,qBAAqB,CAClDtV,IADkD,EAElD,KAAK1L,OAAL,CAAaihB,YAFqC,EAGlD,KAAKjhB,OAAL,CAAakhB,WAHqC,CAArB,CAI7BzX,OAJ6B,EAA/B;AAKA,UAAM0X,UAAU,GAAGzV,IAAI,CAACC,GAAL,CAAS,KAAT,CAAnB;;AACA,SAAK,MAAMZ,GAAX,IAAkBgW,sBAAlB,EAA0C;AACxC,UAAII,UAAU,GAAGpW,GAAjB,EAAsB;;AACtB,UAAIoW,UAAU,KAAKpW,GAAnB,EAAwB;AACtB,eAAO,KAAK+S,YAAL,CAAkB,IAAIxB,6DAAJ,CAAkB5Q,IAAlB,CAAlB,CAAP;AACD;;AACD,aAAO,KAAKoS,YAAL,CAAkB,IAAIvB,+DAAJ,CAAoB7Q,IAAI,CAACyC,cAAL,CAAoB,OAApB,EAA6BtQ,GAA7B,CAAiC,KAAjC,EAAwCkN,GAAxC,CAApB,CAAlB,CAAP;AACD;;AACD,QAAI7B,IAAJ;AACA,QAAIkY,SAAS,GAAG1V,IAAhB;AACA,QAAI3H,KAAK,GAAG,CAAZ;;AACA,WAAO,CAACmF,IAAD,IAASnF,KAAK,GAAG,EAAxB,EAA4B;AAC1Bqd,eAAS,GAAGA,SAAS,CAACjT,cAAV,CAAyB,OAAzB,EAAkCrD,QAAlC,CAA2C,CAA3C,EAA8C,OAA9C,CAAZ;AACA5B,UAAI,GAAG8X,qBAAqB,CAC1BI,SAD0B,EAE1B,KAAKphB,OAAL,CAAaihB,YAFa,EAG1B,KAAKjhB,OAAL,CAAakhB,WAHa,CAArB,CAIL3R,GAJK,EAAP;AAKAxL,WAAK;AACN;;AACD,QAAIA,KAAK,IAAI,EAAb,EAAiB;AACf,YAAM,IAAIsY,mEAAJ,CAAwB,kCAAxB,CAAN;AACD;;AACD,WAAO,KAAKyB,YAAL,CAAkB,IAAIvB,+DAAJ,CAAoB6E,SAAS,CAACvjB,GAAV,CAAc,KAAd,EAAqBqL,IAArB,CAApB,CAAlB,CAAP;AACD;;AA/BqD;;AAkCxD,MAAMyY,sBAAsB,GAAG;AAC7BrQ,MAAI,EAAE,cADuB;AAE7B3F,KAAG,EAAEwR,SAAS,IAAI;AAChB,QAAIA,SAAS,CAACnd,OAAV,CAAkBihB,YAAlB,KAAmCpf,SAAvC,EAAkD,OAAO,IAAP;AAClD,QAAIsb,SAAS,CAAC1T,OAAd,EAAuB,OAAO,IAAIiY,mBAAJ,CAAwBvE,SAAxB,CAAP;AACvB,WAAO,IAAI2D,gBAAJ,CAAqB3D,SAArB,CAAP;AACD,GAN4B;AAO7BhB,kBAAgB,EAAE,CAACnc,OAAD,EAAU6e,IAAV,KAAmB;AACnC,QAAI7e,OAAO,CAACihB,YAAR,KAAyBpf,SAA7B,EAAwC;AACtC,UAAI7B,OAAO,CAACud,SAAR,KAAsB,QAA1B,EAAoC;AAClC,cAAM,IAAIzB,+DAAJ,CAAoB,gEAApB,CAAN;AACD;;AACD,UAAI,CAACkD,gBAAgB,CAAChf,OAAO,CAACihB,YAAT,CAArB,EAA6C;AAC3C,cAAM,IAAInF,+DAAJ,CAAoB,0CAApB,CAAN;AACD;;AACD,UAAI9b,OAAO,CAACihB,YAAR,CAAqBrR,IAArB,CAA0BkQ,GAAG,IAAIA,GAAG,KAAK,CAAR,IAAaA,GAAG,GAAG,CAAC,EAApB,IAA0BA,GAAG,GAAG,EAAjE,CAAJ,EAA0E;AACxE,cAAM,IAAIhE,+DAAJ,CACJ,sEADI,CAAN;AAGD;;AACD+C,UAAI,CAACoC,YAAL,GAAoBjhB,OAAO,CAACihB,YAAR,CAAqBpe,KAArB,EAApB;AACD,KAbD,MAaO,IACL,EAAEmc,gBAAgB,CAAChf,OAAO,CAACkhB,WAAT,CAAhB,IAAyClC,gBAAgB,CAAChf,OAAO,CAAC4hB,WAAT,CAA3D,KACA,CAAC,QAAD,EAAW,SAAX,EAAsB9C,QAAtB,CAA+B9e,OAAO,CAACud,SAAvC,CAFK,EAGL;AACAsB,UAAI,CAACoC,YAAL,GAAoB,CAACpC,IAAI,CAAC7V,KAAL,CAAW2C,GAAX,CAAe,KAAf,CAAD,CAApB;AACD;AACF,GA3B4B;AA4B7BoT,MAAI,EAAE,MAAM,CACVJ,mBADU,EAEVgD,sBAFU,EAGVjB,qBAHU,EAIVJ,wBAJU,EAKVJ,0BALU,EAMVL,+BANU;AA5BiB,CAA/B;;AAsCA,SAASgC,mBAAT,CAA6BnW,IAA7B,EAAmCL,OAAnC,EAA4CwV,GAA5C,EAAiD;AAC/C,MAAI9W,IAAI,GAAG2B,IAAI,CAAC7N,GAAL,CAAS,OAAT,EAAkB,CAAlB,EAAqBA,GAArB,CAAyB,KAAzB,EAAgC,CAAhC,CAAX;;AACA,MAAIgjB,GAAG,GAAG,CAAV,EAAa;AACX9W,QAAI,GAAGA,IAAI,CAAC0B,GAAL,CAAS,CAAT,EAAY,MAAZ,CAAP;AACD;;AACD1B,MAAI,GAAG4W,cAAc,CAAC5W,IAAD,EAAOsB,OAAP,CAArB,CAL+C,CAM/C;;AACA,SAAOwV,GAAG,GAAG,CAAN,GAAU9W,IAAI,CAAC0B,GAAL,CAASoV,GAAT,EAAc,MAAd,CAAV,GAAkC9W,IAAI,CAAC0B,GAAL,CAASoV,GAAG,GAAG,CAAf,EAAkB,MAAlB,CAAzC;AACD;;AAED,SAASiB,kBAAT,CAA4BpW,IAA5B,EAAkCL,OAAlC,EAA2C;AACzC,QAAMkL,IAAI,GAAG1K,oFAA4B,CAACH,IAAI,CAACC,GAAL,CAAS,SAAT,CAAD,EAAsBN,OAAtB,CAAzC;AACA,SAAOK,IAAI,CAACZ,QAAL,CAAcyL,IAAI,KAAK,CAAT,GAAa,CAAb,GAAiB,IAAIA,IAAnC,EAAyC,KAAzC,CAAP;AACD;;AAED,MAAMwL,kBAAN,SAAiCzC,qBAAjC,CAAuD;AACrDrC,KAAG,CAACvR,IAAD,EAAO;AACR,QAAI,KAAK1L,OAAL,CAAaud,SAAb,KAA2B,QAA/B,EAAyC;AACvC,aAAO,KAAKvd,OAAL,CAAagiB,aAAb,KAA+BngB,SAA/B,GACH,KAAKogB,YAAL,CAAkBvW,IAAlB,CADG,GAEH,KAAKwW,aAAL,CAAmBxW,IAAnB,CAFJ;AAGD,KAJD,MAIO,IAAI,KAAK1L,OAAL,CAAaud,SAAb,KAA2B,SAA/B,EAA0C;AAC/C,aAAO,KAAK2E,aAAL,CAAmBxW,IAAnB,CAAP;AACD;;AACD,WAAO,KAAKyW,MAAL,CAAYzW,IAAZ,CAAP;AACD;;AACDuW,cAAY,CAACvW,IAAD,EAAO;AACjB,QAAIxC,IAAI,GAAGkZ,qBAAqB,CAAC1W,IAAD,EAAO,KAAK1L,OAAL,CAAakhB,WAApB,CAArB,CAAsD,CAAtD,CAAX;AACA,QAAInd,KAAK,GAAG,CAAZ;AACA,QAAIgG,IAAI,GAAG2B,IAAX,CAHiB,CAIjB;AACA;AACA;AACA;;AACA,WAAO,CAACxC,IAAD,IAASnF,KAAK,GAAG,EAAxB,EAA4B;AAC1BA,WAAK;AACLgG,UAAI,GAAGA,IAAI,CAAC+B,WAAL,CAAiB,MAAjB,EAAyBhB,QAAzB,CAAkC,CAAlC,EAAqC,aAArC,CAAP;AACA5B,UAAI,GAAGkZ,qBAAqB,CAACrY,IAAD,EAAO,KAAK/J,OAAL,CAAakhB,WAApB,CAArB,CAAsD,CAAtD,CAAP;AACD;;AACD,QAAI,CAAChY,IAAL,EAAW;AACT,YAAM,IAAImT,mEAAJ,CACJ,mEADI,CAAN;AAGD;;AACD,WAAO,KAAK7a,MAAL,CAAYkK,IAAZ,EAAkBxC,IAAlB,CAAP;AACD;;AACDgZ,eAAa,CAACxW,IAAD,EAAO;AAClB,QAAIxC,IAAI,GAAGmZ,sBAAsB,CAAC3W,IAAD,EAAO,KAAK1L,OAAL,CAAakhB,WAApB,CAAtB,CAAuD,CAAvD,CAAX;AACA,QAAInd,KAAK,GAAG,CAAZ;AACA,QAAIgG,IAAI,GAAG2B,IAAX,CAHkB,CAIlB;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,WAAO,CAACxC,IAAD,IAASnF,KAAK,GAAG,EAAxB,EAA4B;AAC1BA,WAAK;AACLgG,UAAI,GAAGA,IAAI,CAAC+B,WAAL,CAAiB,OAAjB,EAA0BhB,QAA1B,CAAmC,CAAnC,EAAsC,aAAtC,CAAP;AACA5B,UAAI,GAAGmZ,sBAAsB,CAACtY,IAAD,EAAO,KAAK/J,OAAL,CAAakhB,WAApB,CAAtB,CAAuD,CAAvD,CAAP;AACD;;AACD,QAAI,CAAChY,IAAL,EAAW;AACT,YAAM,IAAImT,mEAAJ,CACJ,mEADI,CAAN;AAGD;;AACD,WAAO,KAAK7a,MAAL,CAAYkK,IAAZ,EAAkBxC,IAAlB,CAAP;AACD;;AACDiZ,QAAM,CAACzW,IAAD,EAAO;AACX,UAAMxC,IAAI,GAAG,KAAKlJ,OAAL,CAAakhB,WAAb,CACVtd,GADU,CACNyH,OAAO,IAAIyW,kBAAkB,CAACpW,IAAD,EAAOL,OAAP,CADvB,EAEV+D,IAFU,CAEL2B,oEAFK,EAGVxB,GAHU,EAAb;AAIA,WAAO,KAAK/N,MAAL,CAAYkK,IAAZ,EAAkBxC,IAAlB,CAAP;AACD;;AACD1H,QAAM,CAACkK,IAAD,EAAOxC,IAAP,EAAa;AACjB,QAAIA,IAAI,CAAC+B,OAAL,CAAaS,IAAb,CAAJ,EAAwB;AACtB,aAAO,KAAKoS,YAAL,CAAkB,IAAIxB,6DAAJ,CAAkB5Q,IAAlB,CAAlB,CAAP;AACD;;AACD,WAAO,KAAKoS,YAAL,CAAkB,IAAIvB,+DAAJ,CAAoBrT,IAAI,CAACiF,cAAL,CAAoB,KAApB,CAApB,CAAlB,CAAP;AACD;;AAlEoD;AAoEvD;;;AACA,SAASiU,qBAAT,CAA+B1W,IAA/B,EAAqCwV,WAArC,EAAkD;AAChD,QAAMoB,2BAA2B,GAAGpB,WAAW,CAC5ClZ,MADiC,CAC1BuZ,KAAK,IAAI3Z,KAAK,CAACC,OAAN,CAAc0Z,KAAd,CADiB,EAEjC3d,GAFiC,CAE7B2d,KAAK,IAAIM,mBAAmB,CAACnW,IAAD,EAAO,GAAG6V,KAAV,CAFC,CAApC;AAGA,QAAMgB,sBAAsB,GAAGrB,WAAW,CACvClZ,MAD4B,CACrBuZ,KAAK,IAAI,OAAOA,KAAP,KAAiB,QADL,EAE5B3d,GAF4B,CAExByH,OAAO,IAAIyW,kBAAkB,CAACpW,IAAD,EAAOL,OAAP,CAFL,EAG5BrD,MAH4B,CAGrBuZ,KAAK,IAAIA,KAAK,CAAC5V,GAAN,CAAU,MAAV,MAAsBD,IAAI,CAACC,GAAL,CAAS,MAAT,CAHV,CAA/B;AAIA,SAAO0P,qEAAa,CAAC,CAAC,GAAGiH,2BAAJ,EAAiC,GAAGC,sBAApC,CAAD,CAAb,CACJva,MADI,CACGuZ,KAAK,IAAIA,KAAK,CAACvT,eAAN,CAAsBtC,IAAtB,CADZ,EAEJ0D,IAFI,CAEC2B,oEAFD,EAGJtH,OAHI,EAAP;AAID;AACD;;;AACA,SAAS4Y,sBAAT,CAAgC3W,IAAhC,EAAsCwV,WAAtC,EAAmD;AACjD,QAAMsB,4BAA4B,GAAGtB,WAAW,CAC7ClZ,MADkC,CAC3BuZ,KAAK,IAAI3Z,KAAK,CAACC,OAAN,CAAc0Z,KAAd,CADkB,EAElC3d,GAFkC,CAE9B2d,KAAK,IAAIX,oBAAoB,CAAClV,IAAD,EAAO,GAAG6V,KAAV,CAFC,CAArC;AAGA,QAAMgB,sBAAsB,GAAGrB,WAAW,CACvClZ,MAD4B,CACrBuZ,KAAK,IAAI,OAAOA,KAAP,KAAiB,QADL,EAE5B3d,GAF4B,CAExByH,OAAO,IAAIyW,kBAAkB,CAACpW,IAAD,EAAOL,OAAP,CAFL,EAG5BrD,MAH4B,CAI3BuZ,KAAK,IAAIA,KAAK,CAAC5V,GAAN,CAAU,MAAV,MAAsBD,IAAI,CAACC,GAAL,CAAS,MAAT,CAAtB,IAA0C4V,KAAK,CAAC5V,GAAN,CAAU,OAAV,MAAuBD,IAAI,CAACC,GAAL,CAAS,OAAT,CAJ/C,CAA/B;AAMA,SAAO0P,qEAAa,CAAC,CAAC,GAAGmH,4BAAJ,EAAkC,GAAGD,sBAArC,CAAD,CAAb,CACJva,MADI,CACGuZ,KAAK,IAAIA,KAAK,CAACvT,eAAN,CAAsBtC,IAAtB,CADZ,EAEJ0D,IAFI,CAEC2B,oEAFD,EAGJtH,OAHI,EAAP;AAID;;AAED,MAAMgZ,eAAN,SAA8BrD,kBAA9B,CAAiD;AAC/CnC,KAAG,CAACvR,IAAD,EAAO;AACR,QAAI,KAAK1L,OAAL,CAAaud,SAAb,KAA2B,QAA/B,EAAyC;AACvC,aAAO,KAAKvd,OAAL,CAAagiB,aAAb,KAA+BngB,SAA/B,GACH,KAAKogB,YAAL,CAAkBvW,IAAlB,CADG,GAEH,KAAKwW,aAAL,CAAmBxW,IAAnB,CAFJ;AAGD,KAJD,MAIO,IAAI,KAAK1L,OAAL,CAAaud,SAAb,KAA2B,SAA/B,EAA0C;AAC/C,aAAO,KAAK2E,aAAL,CAAmBxW,IAAnB,CAAP;AACD;;AACD,WAAO,KAAKyW,MAAL,CAAYzW,IAAZ,CAAP;AACD;;AACDuW,cAAY,CAACvW,IAAD,EAAO;AACjB,QAAIxC,IAAI,GAAGwZ,qBAAqB,CAAChX,IAAD,EAAO,KAAK1L,OAAL,CAAakhB,WAApB,CAArB,CAAsD,CAAtD,CAAX;AACA,QAAInd,KAAK,GAAG,CAAZ;AACA,QAAIgG,IAAI,GAAG2B,IAAX,CAHiB,CAIjB;AACA;AACA;AACA;;AACA,WAAO,CAACxC,IAAD,IAASnF,KAAK,GAAG,EAAxB,EAA4B;AAC1BA,WAAK;AACLgG,UAAI,GAAGA,IAAI,CAAC+B,WAAL,CAAiB,MAAjB,EAAyBL,GAAzB,CAA6B,CAA7B,EAAgC,MAAhC,CAAP;AACAvC,UAAI,GAAGwZ,qBAAqB,CAAC3Y,IAAD,EAAO,KAAK/J,OAAL,CAAakhB,WAApB,CAArB,CAAsD,CAAtD,CAAP;AACD;;AACD,QAAI,CAAChY,IAAL,EAAW;AACT,YAAM,IAAImT,mEAAJ,CACJ,mEADI,CAAN;AAGD;;AACD,WAAO,KAAK7a,MAAL,CAAYkK,IAAZ,EAAkBxC,IAAlB,CAAP;AACD;;AACDgZ,eAAa,CAACxW,IAAD,EAAO;AAClB,QAAIxC,IAAI,GAAGyZ,sBAAsB,CAACjX,IAAD,EAAO,KAAK1L,OAAL,CAAakhB,WAApB,CAAtB,CAAuD,CAAvD,CAAX;AACA,QAAInd,KAAK,GAAG,CAAZ;AACA,QAAIgG,IAAI,GAAG2B,IAAX,CAHkB,CAIlB;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,WAAO,CAACxC,IAAD,IAASnF,KAAK,GAAG,EAAxB,EAA4B;AAC1BA,WAAK;AACLgG,UAAI,GAAGA,IAAI,CAAC+B,WAAL,CAAiB,OAAjB,EAA0BL,GAA1B,CAA8B,CAA9B,EAAiC,OAAjC,CAAP;AACAvC,UAAI,GAAGyZ,sBAAsB,CAAC5Y,IAAD,EAAO,KAAK/J,OAAL,CAAakhB,WAApB,CAAtB,CAAuD,CAAvD,CAAP;AACD;;AACD,QAAI,CAAChY,IAAL,EAAW;AACT,YAAM,IAAImT,mEAAJ,CACJ,mEADI,CAAN;AAGD;;AACD,WAAO,KAAK7a,MAAL,CAAYkK,IAAZ,EAAkBxC,IAAlB,CAAP;AACD;;AACDiZ,QAAM,CAACzW,IAAD,EAAO;AACX,UAAMxC,IAAI,GAAG,KAAKlJ,OAAL,CAAakhB,WAAb,CACVtd,GADU,CACNyH,OAAO,IAAIsV,cAAc,CAACjV,IAAD,EAAOL,OAAP,CADnB,EAEV+D,IAFU,CAEL2B,oEAFK,EAEiB,CAFjB,CAAb;AAGA,WAAO,KAAKvP,MAAL,CAAYkK,IAAZ,EAAkBxC,IAAlB,CAAP;AACD;;AACD1H,QAAM,CAACkK,IAAD,EAAOxC,IAAP,EAAa;AACjB,QAAIA,IAAI,CAAC+B,OAAL,CAAaS,IAAb,CAAJ,EAAwB;AACtB,aAAO,KAAKoS,YAAL,CAAkB,IAAIxB,6DAAJ,CAAkB5Q,IAAlB,CAAlB,CAAP;AACD;;AACD,WAAO,KAAKoS,YAAL,CAAkB,IAAIvB,+DAAJ,CAAoBrT,IAAI,CAAC4C,WAAL,CAAiB,KAAjB,CAApB,CAAlB,CAAP;AACD;;AAjE8C;AAmEjD;;;AACA,SAAS4W,qBAAT,CAA+BhX,IAA/B,EAAqCwV,WAArC,EAAkD;AAChD,QAAMoB,2BAA2B,GAAGpB,WAAW,CAC5ClZ,MADiC,CAC1BuZ,KAAK,IAAI3Z,KAAK,CAACC,OAAN,CAAc0Z,KAAd,CADiB,EAEjC3d,GAFiC,CAE7B2d,KAAK,IAAIM,mBAAmB,CAACnW,IAAD,EAAO,GAAG6V,KAAV,CAFC,CAApC;AAGA,QAAMgB,sBAAsB,GAAGrB,WAAW,CACvClZ,MAD4B,CACrBuZ,KAAK,IAAI,OAAOA,KAAP,KAAiB,QADL,EAE5B3d,GAF4B,CAExByH,OAAO,IAAIsV,cAAc,CAACjV,IAAD,EAAOL,OAAP,CAFD,EAG5BrD,MAH4B,CAGrBuZ,KAAK,IAAIA,KAAK,CAAC5V,GAAN,CAAU,MAAV,MAAsBD,IAAI,CAACC,GAAL,CAAS,MAAT,CAHV,CAA/B;AAIA,SAAO0P,qEAAa,CAAC,CAAC,GAAGiH,2BAAJ,EAAiC,GAAGC,sBAApC,CAAD,CAAb,CACJva,MADI,CACGuZ,KAAK,IAAIA,KAAK,CAACnV,cAAN,CAAqBV,IAArB,CADZ,EAEJ0D,IAFI,CAEC2B,oEAFD,CAAP;AAGD;AACD;;;AACA,SAAS4R,sBAAT,CAAgCjX,IAAhC,EAAsCwV,WAAtC,EAAmD;AACjD,QAAMsB,4BAA4B,GAAGtB,WAAW,CAC7ClZ,MADkC,CAC3BuZ,KAAK,IAAI3Z,KAAK,CAACC,OAAN,CAAc0Z,KAAd,CADkB,EAElC3d,GAFkC,CAE9B2d,KAAK,IAAIX,oBAAoB,CAAClV,IAAD,EAAO,GAAG6V,KAAV,CAFC,CAArC;AAGA,QAAMgB,sBAAsB,GAAGrB,WAAW,CACvClZ,MAD4B,CACrBuZ,KAAK,IAAI,OAAOA,KAAP,KAAiB,QADL,EAE5B3d,GAF4B,CAExByH,OAAO,IAAIsV,cAAc,CAACjV,IAAD,EAAOL,OAAP,CAFD,EAG5BrD,MAH4B,CAI3BuZ,KAAK,IAAIA,KAAK,CAAC5V,GAAN,CAAU,MAAV,MAAsBD,IAAI,CAACC,GAAL,CAAS,MAAT,CAAtB,IAA0C4V,KAAK,CAAC5V,GAAN,CAAU,OAAV,MAAuBD,IAAI,CAACC,GAAL,CAAS,OAAT,CAJ/C,CAA/B;AAMA,SAAO0P,qEAAa,CAAC,CAAC,GAAGmH,4BAAJ,EAAkC,GAAGD,sBAArC,CAAD,CAAb,CACJva,MADI,CACGuZ,KAAK,IAAIA,KAAK,CAACnV,cAAN,CAAqBV,IAArB,CADZ,EAEJ0D,IAFI,CAEC2B,oEAFD,CAAP;AAGD;;AAED,MAAM6R,qBAAqB,GAAG;AAC5BtR,MAAI,EAAE,aADsB;AAE5B3F,KAAG,EAAEwR,SAAS,IAAI;AAChB,QAAIA,SAAS,CAACnd,OAAV,CAAkBkhB,WAAlB,KAAkCrf,SAAtC,EAAiD,OAAO,IAAP;AACjD,QAAIsb,SAAS,CAAC1T,OAAd,EAAuB,OAAO,IAAIsY,kBAAJ,CAAuB5E,SAAvB,CAAP;AACvB,WAAO,IAAIsF,eAAJ,CAAoBtF,SAApB,CAAP;AACD,GAN2B;AAO5BhB,kBAAgB,EAAE,CAACnc,OAAD,EAAU6e,IAAV,KAAmB;AACnC,QAAI7e,OAAO,CAACkhB,WAAR,KAAwBrf,SAA5B,EAAuC;AACrC,UAAI,CAACmd,gBAAgB,CAAChf,OAAO,CAACkhB,WAAT,CAArB,EAA4C;AAC1C,cAAM,IAAIpF,+DAAJ,CAAoB,yCAApB,CAAN;AACD;;AACD,YAAM+G,aAAa,GAAG7iB,OAAO,CAACkhB,WAAR,CAAoB4B,IAApB,CAAyB/X,GAAG,IAChDnD,KAAK,CAACC,OAAN,CAAckD,GAAd,IACI,CAACiH,2DAAW,CAACC,QAAZ,CAAqB6M,QAArB,CAA8B/T,GAAG,CAAC,CAAD,CAAjC,CADL,GAEI,CAACiH,2DAAW,CAACC,QAAZ,CAAqB6M,QAArB,CAA8B/T,GAA9B,CAHe,CAAtB;;AAKA,UAAI8X,aAAJ,EAAmB;AACjB,cAAM,IAAI/G,+DAAJ,CACH,4CAAD,GACG,GAAE5b,IAAI,CAACC,SAAL,CAAe6R,2DAAW,CAACC,QAA3B,CAAqC,SAAQ4Q,aAAc,gBAF5D,CAAN;AAID;;AACD,UACE,CAAC,CAAC,QAAD,EAAW,SAAX,EAAsB/D,QAAtB,CAA+B9e,OAAO,CAACud,SAAvC,CAAD,IACAvd,OAAO,CAACkhB,WAAR,CAAoBtR,IAApB,CAAyBvE,OAAO,IAAIzD,KAAK,CAACC,OAAN,CAAcwD,OAAd,CAApC,CAFF,EAGE;AACA,cAAM,IAAIyQ,+DAAJ,CACJ,sGACE,8BAFE,CAAN;AAID;;AACD,UACE9b,OAAO,CAACud,SAAR,KAAsB,SAAtB,IACAvd,OAAO,CAACkhB,WAAR,CAAoBtR,IAApB,CACEvE,OAAO,IACLzD,KAAK,CAACC,OAAN,CAAcwD,OAAd,MAA2BA,OAAO,CAAC,CAAD,CAAP,GAAa,CAAC,EAAd,IAAoBA,OAAO,CAAC,CAAD,CAAP,KAAe,CAAnC,IAAwCA,OAAO,CAAC,CAAD,CAAP,GAAa,EAAhF,CAFJ,CAFF,EAME;AACA,cAAM,IAAIyQ,+DAAJ,CACJ,0EACE,kDAFE,CAAN;AAID;;AACD,UACE9b,OAAO,CAACud,SAAR,KAAsB,QAAtB,IACAvd,OAAO,CAACkhB,WAAR,CAAoBtR,IAApB,CACEvE,OAAO,IACLzD,KAAK,CAACC,OAAN,CAAcwD,OAAd,MAA2BA,OAAO,CAAC,CAAD,CAAP,GAAa,CAAC,GAAd,IAAqBA,OAAO,CAAC,CAAD,CAAP,KAAe,CAApC,IAAyCA,OAAO,CAAC,CAAD,CAAP,GAAa,GAAjF,CAFJ,CAFF,EAME;AACA,cAAM,IAAIyQ,+DAAJ,CACJ,yEACE,oDAFE,CAAN;AAID;;AACD+C,UAAI,CAACqC,WAAL,GAAmBlhB,OAAO,CAACkhB,WAA3B;AACD,KAjDD,MAiDO,IAAI,CAAClC,gBAAgB,CAAChf,OAAO,CAACihB,YAAT,CAAjB,IAA2CjhB,OAAO,CAACud,SAAR,KAAsB,QAArE,EAA+E;AACpFsB,UAAI,CAACqC,WAAL,GAAmB,CAACrC,IAAI,CAAC7V,KAAL,CAAW2C,GAAX,CAAe,SAAf,CAAD,CAAnB;AACD;AACF,GA5D2B;AA6D5BoT,MAAI,EAAE,MAAM,CACVJ,mBADU,EAEViE,qBAFU,EAGVlC,qBAHU,EAIVJ,wBAJU,EAKVJ,0BALU,EAMVL,+BANU;AA7DgB,CAA9B;;AAuEA,MAAMkD,oBAAN,SAAmCzD,qBAAnC,CAAyD;AACvDxiB,aAAW,GAAG;AACZ,UAAM,GAAGga,SAAT;AACA,SAAKmI,MAAL,GAAc,KAAK9B,SAAL,CAAend,OAAf,CAAuBgiB,aAAvB,CAAqCnf,KAArC,GAA6C4G,OAA7C,EAAd;AACD;;AACDwT,KAAG,CAACvR,IAAD,EAAO;AACR,UAAMsX,YAAY,GAAGtX,IAAI,CAACC,GAAL,CAAS,OAAT,CAArB;;AACA,SAAK,MAAMgH,KAAX,IAAoB,KAAKsM,MAAzB,EAAiC;AAC/B,UAAI+D,YAAY,GAAGrQ,KAAnB,EAA0B;;AAC1B,UAAIqQ,YAAY,KAAKrQ,KAArB,EAA4B;AAC1B,eAAO,KAAKmL,YAAL,CAAkB,IAAIxB,6DAAJ,CAAkB5Q,IAAlB,CAAlB,CAAP;AACD;;AACD,aAAO,KAAKoS,YAAL,CACL,IAAIvB,+DAAJ,CAAoB7Q,IAAI,CAACyC,cAAL,CAAoB,MAApB,EAA4BtQ,GAA5B,CAAgC,OAAhC,EAAyC8U,KAAzC,CAApB,CADK,CAAP;AAGD;;AACD,WAAO,KAAKmL,YAAL,CACL,IAAIvB,+DAAJ,CACE7Q,IAAI,CACDyC,cADH,CACkB,MADlB,EAEGrD,QAFH,CAEY,CAFZ,EAEe,MAFf,EAGGjN,GAHH,CAGO,OAHP,EAGgB,KAAKohB,MAAL,CAAY,CAAZ,CAHhB,CADF,CADK,CAAP;AAQD;;AAxBsD;;AA2BzD,MAAMgE,iBAAN,SAAgC7D,kBAAhC,CAAmD;AACjDnC,KAAG,CAACvR,IAAD,EAAO;AACR,UAAMsX,YAAY,GAAGtX,IAAI,CAACC,GAAL,CAAS,OAAT,CAArB;;AACA,SAAK,MAAMgH,KAAX,IAAoB,KAAK3S,OAAL,CAAagiB,aAAjC,EAAgD;AAC9C,UAAIgB,YAAY,GAAGrQ,KAAnB,EAA0B;;AAC1B,UAAIqQ,YAAY,KAAKrQ,KAArB,EAA4B;AAC1B,eAAO,KAAKmL,YAAL,CAAkB,IAAIxB,6DAAJ,CAAkB5Q,IAAlB,CAAlB,CAAP;AACD;;AACD,aAAO,KAAKoS,YAAL,CAAkB,IAAIvB,+DAAJ,CAAoB7Q,IAAI,CAACI,WAAL,CAAiB,MAAjB,EAAyBjO,GAAzB,CAA6B,OAA7B,EAAsC8U,KAAtC,CAApB,CAAlB,CAAP;AACD;;AACD,WAAO,KAAKmL,YAAL,CACL,IAAIvB,+DAAJ,CACE7Q,IAAI,CACDI,WADH,CACe,MADf,EAEGL,GAFH,CAEO,CAFP,EAEU,MAFV,EAGG5N,GAHH,CAGO,OAHP,EAGgB,KAAKmC,OAAL,CAAagiB,aAAb,CAA2B,CAA3B,CAHhB,CADF,CADK,CAAP;AAQD;;AAlBgD;;AAqBnD,MAAMkB,uBAAuB,GAAG;AAC9B5R,MAAI,EAAE,eADwB;AAE9B3F,KAAG,EAAEwR,SAAS,IAAI;AAChB,QAAIA,SAAS,CAACnd,OAAV,CAAkBgiB,aAAlB,KAAoCngB,SAAxC,EAAmD,OAAO,IAAP;;AACnD,QAAIsb,SAAS,CAAC1T,OAAd,EAAuB;AACrB,aAAO,IAAIsZ,oBAAJ,CAAyB5F,SAAzB,CAAP;AACD;;AACD,WAAO,IAAI8F,iBAAJ,CAAsB9F,SAAtB,CAAP;AACD,GAR6B;AAS9BhB,kBAAgB,EAAE,CAACnc,OAAD,EAAU6e,IAAV,KAAmB;AACnC,QAAI7e,OAAO,CAACgiB,aAAR,KAA0BngB,SAA9B,EAAyC;AACvC,UAAI,CAACmd,gBAAgB,CAAChf,OAAO,CAACgiB,aAAT,CAArB,EAA8C;AAC5C,cAAM,IAAIlG,+DAAJ,CAAoB,2CAApB,CAAN;AACD;;AACD,UAAI9b,OAAO,CAACgiB,aAAR,CAAsBpS,IAAtB,CAA2BkQ,GAAG,IAAIA,GAAG,GAAG,CAAN,IAAWA,GAAG,GAAG,EAAnD,CAAJ,EAA4D;AAC1D,cAAM,IAAIhE,+DAAJ,CAAoB,wDAApB,CAAN;AACD;;AACD+C,UAAI,CAACmD,aAAL,GAAqBhiB,OAAO,CAACgiB,aAAR,CAAsBnf,KAAtB,EAArB;AACAgc,UAAI,CAACmD,aAAL,CAAmB5S,IAAnB,CAAwBsM,kEAAxB;AACD,KATD,MASO,IACL,EACEsD,gBAAgB,CAAChf,OAAO,CAACihB,YAAT,CAAhB,IACAjC,gBAAgB,CAAChf,OAAO,CAACkhB,WAAT,CADhB,IAEAlC,gBAAgB,CAAChf,OAAO,CAAC4hB,WAAT,CAHlB,KAKA5hB,OAAO,CAACud,SAAR,KAAsB,QANjB,EAOL;AACAsB,UAAI,CAACmD,aAAL,GAAqB,CAACnD,IAAI,CAAC7V,KAAL,CAAW2C,GAAX,CAAe,OAAf,CAAD,CAArB;AACD;AACF,GA7B6B;AA8B9BoT,MAAI,EAAE,MAAM,CACVJ,mBADU,EAEVuE,uBAFU,EAGVvB,sBAHU,EAIVjB,qBAJU,EAKVJ,wBALU,EAMVJ,0BANU,EAOVL,+BAPU;AA9BkB,CAAhC;AAyCA,MAAMsD,UAAU,GAAG,CACjBxE,mBADiB,EAEjBuE,uBAFiB,EAGjBvB,sBAHiB,EAIjBiB,qBAJiB,EAKjBlC,qBALiB,EAMjBJ,wBANiB,EAOjBJ,0BAPiB,EAQjBL,+BARiB,CAAnB;;;;;;;;;;;;;AC3/BA;AAAA;AAAA;AAAA;AAAA;AACA;AAKA;;AAEA3P,gEAAK,CAAClJ,SAAN,CAAgB4J,MAAhB,GAAyB,SAASwS,SAAT,CAAmBC,IAAI,GAAG,EAA1B,EAA8B;AACrD,QAAM1S,IAAI,GAAG;AACX2S,QAAI,EAAE,OADK;AAEX/V,SAAK,EAAE,KAAK4C,QAAL,CAAcvM,GAAd,CAAkBqI,OAAO,IAAIA,OAAO,CAAC2E,MAAR,EAA7B;AAFI,GAAb;AAIA,MAAI,CAACyS,IAAI,CAACE,MAAV,EAAkB5S,IAAI,CAAC/H,QAAL,GAAgB,KAAKA,QAArB;AAClB4a,mFAAmB,CAAC,IAAD,EAAO7S,IAAP,EAAa0S,IAAb,CAAnB;AACA,SAAO1S,IAAP;AACD,CARD;;AASAT,gEAAK,CAACW,QAAN,GAAiB,SAASpP,KAAT,CAAekP,IAAf,EAAqB3Q,OAAO,GAAG,EAA/B,EAAmC;AAClD,MAAI2Q,IAAI,CAAC2S,IAAL,KAAc,OAAlB,EAA2B;AACzB,UAAM,IAAIG,oEAAJ,CAAmB,oBAAnB,CAAN;AACD;;AACD,SAAO,IAAIvT,gEAAJ,CAAU;AACf3C,SAAK,EAAEoD,IAAI,CAACpD,KAAL,CAAW3J,GAAX,CAAe8H,IAAI,IAAIyF,+DAAe,CAAClF,OAAhB,CAAwB4E,QAAxB,CAAiCnF,IAAjC,CAAvB,CADQ;AAEfzN,QAAI,EAAE,OAAO+B,OAAO,CAAC/B,IAAf,KAAwB,UAAxB,GAAqC+B,OAAO,CAAC/B,IAAR,CAAa0S,IAAb,CAArC,GAA0DA,IAAI,CAAC1S,IAFtD;AAGf2K,YAAQ,EAAE5I,OAAO,CAAC4I,QAAR,IAAoB+H,IAAI,CAAC/H;AAHpB,GAAV,CAAP;AAKD,CATD;;AAUA8a,sFAAwB,CAAC,OAAD,EAAUxT,gEAAK,CAACW,QAAhB,CAAxB;;AAEAgH,+DAAI,CAAC7Q,SAAL,CAAe4J,MAAf,GAAwB,SAASwS,SAAT,CAAmBC,IAAI,GAAG,EAA1B,EAA8B;AACpD,QAAM1S,IAAI,GAAG;AACX2S,QAAI,EAAE,MADK;AAEX5jB,UAAM,EAAE0F,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBwW,iEAAS,CAAC,KAAK7b,OAAN,CAA3B,CAAd,EAA0D;AAChEgJ,WAAK,EAAE,KAAKyB,kBAAL,CAAwB,KAAKzK,OAAL,CAAagJ,KAArC,EAA4C4H,MAA5C;AADyD,KAA1D;AAFG,GAAb;;AAMA,MAAI,KAAK5Q,OAAL,CAAawJ,GAAjB,EAAsB;AACpBmH,QAAI,CAACjR,MAAL,CAAY8J,GAAZ,GAAkB,KAAKiB,kBAAL,CAAwB,KAAKzK,OAAL,CAAawJ,GAArC,EAA0CoH,MAA1C,EAAlB;AACD;;AACD,MAAI,CAACyS,IAAI,CAACE,MAAV,EAAkB5S,IAAI,CAAC/H,QAAL,GAAgB,KAAKA,QAArB;AAClB4a,mFAAmB,CAAC,IAAD,EAAO7S,IAAP,EAAa0S,IAAb,CAAnB;AACA,SAAO1S,IAAP;AACD,CAbD;;AAcAkH,+DAAI,CAAChH,QAAL,GAAgB,SAASA,QAAT,CAAkBF,IAAlB,EAAwB3Q,OAAO,GAAG,EAAlC,EAAsC;AACpD,QAAMN,MAAM,GAAG0F,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBsL,IAAI,CAACjR,MAAvB,CAAd,EAA8C;AAC3DsJ,SAAK,EAAEmI,+DAAe,CAAClF,OAAhB,CAAwB4E,QAAxB,CAAiCF,IAAI,CAACjR,MAAL,CAAYsJ,KAA7C,CADoD;AAE3DQ,OAAG,EAAEmH,IAAI,CAACjR,MAAL,CAAY8J,GAAZ,IAAmB2H,+DAAe,CAAClF,OAAhB,CAAwB4E,QAAxB,CAAiCF,IAAI,CAACjR,MAAL,CAAY8J,GAA7C;AAFmC,GAA9C,CAAf;AAIA,SAAO,IAAIqO,+DAAJ,CAASnY,MAAT,EAAiB;AACtBzB,QAAI,EAAE,OAAO+B,OAAO,CAAC/B,IAAf,KAAwB,UAAxB,GAAqC+B,OAAO,CAAC/B,IAAR,CAAa0S,IAAb,CAArC,GAA0DA,IAAI,CAAC1S,IAD/C;AAEtB2K,YAAQ,EAAE5I,OAAO,CAAC4I,QAAR,IAAoB+H,IAAI,CAAC/H;AAFb,GAAjB,CAAP;AAID,CATD;;AAUA8a,sFAAwB,CAAC,MAAD,EAAS7L,+DAAI,CAAChH,QAAd,CAAxB;;AAEA6H,mEAAQ,CAAC1R,SAAT,CAAmB4J,MAAnB,GAA4B,SAASwS,SAAT,CAAmBC,IAAI,GAAG,EAA1B,EAA8B;AACxD,QAAM1S,IAAI,GAAG;AACX2S,QAAI,EAAE,UADK;AAEX3K,UAAM,EAAE,KAAKA,MAAL,CAAY/U,GAAZ,CAAgBmV,IAAI,IAC1BA,IAAI,CAACnI,MAAL,CAAYxL,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBge,IAAlB,CAAd,EAAuC;AAAEE,YAAM,EAAE;AAAV,KAAvC,CAAZ,CADM,CAFG;AAKX3K,WAAO,EAAE,KAAKA,OAAL,CAAahV,GAAb,CAAiBmV,IAAI,IAC5BA,IAAI,CAACnI,MAAL,CAAYxL,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBge,IAAlB,CAAd,EAAuC;AAAEE,YAAM,EAAE;AAAV,KAAvC,CAAZ,CADO,CALE;AAQXvK,UAAM,EAAE,KAAKA,MAAL,CAAYpI,MAAZ,CAAmBxL,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBge,IAAlB,CAAd,EAAuC;AAAEE,YAAM,EAAE;AAAV,KAAvC,CAAnB,CARG;AASXtK,WAAO,EAAE,KAAKA,OAAL,CAAarI,MAAb,CAAoBxL,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBge,IAAlB,CAAd,EAAuC;AAAEE,YAAM,EAAE;AAAV,KAAvC,CAApB;AATE,GAAb;AAWA,MAAI,CAACF,IAAI,CAACE,MAAV,EAAkB5S,IAAI,CAAC/H,QAAL,GAAgB,KAAKA,QAArB;AAClB4a,mFAAmB,CAAC,IAAD,EAAO7S,IAAP,EAAa0S,IAAb,CAAnB;AACA,SAAO1S,IAAP;AACD,CAfD;;AAgBA+H,mEAAQ,CAAC7H,QAAT,GAAoB,SAASpP,KAAT,CAAekP,IAAf,EAAqB3Q,OAAO,GAAG,EAA/B,EAAmC;AACrD,MAAI2Q,IAAI,CAAC2S,IAAL,KAAc,UAAlB,EAA8B;AAC5B,UAAM,IAAIG,oEAAJ,CAAmB,uBAAnB,CAAN;AACD;;AACD,SAAO,IAAI/K,mEAAJ,CAAa;AAClBC,UAAM,EAAEhI,IAAI,CAACgI,MAAL,CAAY/U,GAAZ,CAAgBmV,IAAI,IAC1BlB,+DAAI,CAAChH,QAAL,CAAckI,IAAd,EAAoB3T,MAAM,CAACC,MAAP,CAAc;AAAEuD,cAAQ,EAAE+H,IAAI,CAAC/H;AAAjB,KAAd,EAA2C5I,OAA3C,CAApB,CADM,CADU;AAIlB4Y,WAAO,EAAEjI,IAAI,CAACiI,OAAL,CAAahV,GAAb,CAAiBmV,IAAI,IAC5BlB,+DAAI,CAAChH,QAAL,CAAckI,IAAd,EAAoB3T,MAAM,CAACC,MAAP,CAAc;AAAEuD,cAAQ,EAAE+H,IAAI,CAAC/H;AAAjB,KAAd,EAA2C5I,OAA3C,CAApB,CADO,CAJS;AAOlBgZ,UAAM,EAAE9I,gEAAK,CAACW,QAAN,CAAeF,IAAI,CAACqI,MAApB,EAA4B5T,MAAM,CAACC,MAAP,CAAc;AAAEuD,cAAQ,EAAE+H,IAAI,CAAC/H;AAAjB,KAAd,EAA2C5I,OAA3C,CAA5B,CAPU;AAQlBiZ,WAAO,EAAE/I,gEAAK,CAACW,QAAN,CAAeF,IAAI,CAACsI,OAApB,EAA6B7T,MAAM,CAACC,MAAP,CAAc;AAAEuD,cAAQ,EAAE+H,IAAI,CAAC/H;AAAjB,KAAd,EAA2C5I,OAA3C,CAA7B,CARS;AASlB/B,QAAI,EAAE,OAAO+B,OAAO,CAAC/B,IAAf,KAAwB,UAAxB,GAAqC+B,OAAO,CAAC/B,IAAR,CAAa0S,IAAb,CAArC,GAA0DA,IAAI,CAAC1S,IATnD;AAUlB2K,YAAQ,EAAE5I,OAAO,CAAC4I,QAAR,IAAoB+H,IAAI,CAAC/H;AAVjB,GAAb,CAAP;AAYD,CAhBD;;AAiBA8a,sFAAwB,CAAC,UAAD,EAAahL,mEAAQ,CAAC7H,QAAtB,CAAxB,C;;;;;;;;;;;;ACxFA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA,MAAM4S,cAAN,SAA6B9jB,KAA7B,CAAmC;;AACnC,MAAMgkB,kBAAN,SAAiChkB,KAAjC,CAAuC;;AACvC+I,8EAAmB,CAACkb,WAApB,GAAkC,IAAItI,GAAJ,EAAlC;;AACA5S,8EAAmB,CAAC1B,SAApB,CAA8B4J,MAA9B,GAAuC,SAASwS,SAAT,CAAmBC,IAAnB,EAAyB;AAC9D,QAAM,IAAIM,kBAAJ,CACH,+BAA8B,KAAK7mB,WAAL,CAAiBwU,IAAK,YAArD,GACG,4EAFC,CAAN;AAID,CALD;;AAMA5I,8EAAmB,CAACmI,QAApB,GAA+B,SAASpP,KAAT,CAAekP,IAAf,EAAqB3Q,OAArB,EAA8B;AAC3D,MAAI,OAAO2Q,IAAP,KAAgB,QAAhB,IAA4BA,IAAI,KAAK,IAAzC,EAA+C;AAC7C,UAAM,IAAI8S,cAAJ,CAAoB,iBAAgB9S,IAAK,GAAzC,CAAN;AACD;;AACD,QAAMG,EAAE,GAAGpI,8EAAmB,CAACkb,WAApB,CAAgCjY,GAAhC,CAAoCgF,IAAI,CAAC2S,IAAzC,CAAX;;AACA,MAAI,CAACxS,EAAL,EAAS;AACP,UAAM,IAAI2S,cAAJ,CACH,kCAAiC9S,IAAI,CAAC2S,IAAK,sCAA5C,GACG,QAAO3S,IAAI,CAAC2S,IAAK,KADpB,GAEG,oDAHC,CAAN;AAKD;;AACD,SAAOxS,EAAE,CAACH,IAAD,EAAO3Q,OAAP,CAAT;AACD,CAbD;;AAcA,SAASwjB,mBAAT,CAA6BK,GAA7B,EAAkClT,IAAlC,EAAwC8E,GAAxC,EAA6C;AAC3C,MAAI,CAACA,GAAG,CAACxX,IAAT,EAAe;;AACf,MAAIwX,GAAG,CAACxX,IAAJ,KAAa,IAAjB,EAAuB;AACrB0S,QAAI,CAAC1S,IAAL,GAAY4lB,GAAG,CAAC5lB,IAAhB;AACD,GAFD,MAEO;AACL0S,QAAI,CAAC1S,IAAL,GAAYwX,GAAG,CAACxX,IAAJ,CAAS4lB,GAAT,CAAZ;AACD;;AACD,MAAIlT,IAAI,CAAC1S,IAAL,KAAc4D,SAAlB,EAA6B,OAAO8O,IAAI,CAAC1S,IAAZ;AAC9B;;AACD,SAASylB,wBAAT,CAAkCpS,IAAlC,EAAwCR,EAAxC,EAA4C;AAC1C,MAAIpI,8EAAmB,CAACkb,WAApB,CAAgCvE,GAAhC,CAAoC/N,IAApC,CAAJ,EAA+C;AAC7C,UAAM,IAAI3R,KAAJ,CACH,wDAAuD2R,IAAK,IAA7D,GAAmE,yBAD/D,CAAN;AAGD;;AACD5I,gFAAmB,CAACkb,WAApB,CAAgC/lB,GAAhC,CAAoCyT,IAApC,EAA0CR,EAA1C;AACD;;;;;;;;;;;;;;ACzCD;AAAA;AAAA;AAAA;;AAEA,MAAMgT,mBAAN,SAAkC3S,+DAAlC,CAAkD;AAChDrU,aAAW,CAAC4O,IAAD,EAAO1L,OAAO,GAAG,EAAjB,EAAqB;AAC9B,UAAM6B,SAAN,EAAiB7B,OAAjB;;AACA,QAAI,CAAC,CAAC,KAAD,EAAQ,IAAR,EAAc6B,SAAd,EAAyBid,QAAzB,CAAkC9e,OAAO,CAAC4I,QAA1C,CAAL,EAA0D;AACxD,YAAM,IAAIqI,uEAAJ,CACH,8CAAD,GACG,yBAAwBjR,OAAO,CAAC4I,QAAS,iBAFxC,CAAN;AAID;;AACD,SAAKwI,KAAL,GAAa,IAAIhN,IAAJ,CAASsH,IAAT,CAAb;AACA,SAAK9C,QAAL,GAAgB5I,OAAO,CAAC4I,QAAR,KAAqB/G,SAArB,GAAiC7B,OAAO,CAAC4I,QAAzC,GAAoD,IAApE;AACA,SAAK4J,aAAL;AACD;;AACY,SAANjB,MAAM,CAAC2B,MAAD,EAAS;AACpB,WAAO9N,MAAM,CAAC4B,SAAP,CAAiBzH,QAAjB,CAA0B0H,IAA1B,CAA+BiM,MAA/B,MAA2C,eAAlD;AACD;;AACc,SAARxB,QAAQ,CAAChG,IAAD,EAAO1L,OAAP,EAAgB;AAC7B,WAAO,IAAI8jB,mBAAJ,CAAwBpY,IAAxB,EAA8B1L,OAA9B,CAAP;AACD;;AACc,SAAR6Q,QAAQ,CAACF,IAAD,EAAO;AACpB,UAAMhI,IAAI,GAAG,CACXgI,IAAI,CAAC+B,IADM,EAEX/B,IAAI,CAACgC,KAAL,GAAa,CAFF,EAGXhC,IAAI,CAAC5F,GAHM,EAIX4F,IAAI,CAACiC,IAJM,EAKXjC,IAAI,CAACkC,MALM,EAMXlC,IAAI,CAACmC,MANM,EAOXnC,IAAI,CAACoC,WAPM,CAAb;;AASA,YAAQpC,IAAI,CAAC/H,QAAb;AACE,WAAK,KAAL;AAAY;AACV,iBAAO,IAAIkb,mBAAJ,CAAwB,IAAI1f,IAAJ,CAASA,IAAI,CAACqO,GAAL,CAAS,GAAG9J,IAAZ,CAAT,CAAxB,EAAqD;AAC1DC,oBAAQ,EAAE,KADgD;AAE1DyH,oBAAQ,EAAEM,IAAI,CAACN;AAF2C,WAArD,CAAP;AAID;;AACD,WAAK,IAAL;AAAW;AACT,iBAAO,IAAIyT,mBAAJ,CAAwB,IAAI1f,IAAJ,CAAS,GAAGuE,IAAZ,CAAxB,EAA2C;AAChDC,oBAAQ,EAAE,IADsC;AAEhDyH,oBAAQ,EAAEM,IAAI,CAACN;AAFiC,WAA3C,CAAP;AAID;;AACD;AACE,cAAM,IAAIY,uEAAJ,CACJ,0DACG,uDADH,GAEG,kBAAiBN,IAAI,CAAC/H,QAAS,IAH9B,CAAN;AAdJ;AAoBD;;AACkB,SAAZQ,YAAY,CAAC2a,QAAD,EAAW;AAC5B,UAAMrY,IAAI,GAAGoY,mBAAmB,CAACjT,QAApB,CAA6BkT,QAAQ,CAACnT,MAAT,EAA7B,CAAb;AACAlF,QAAI,CAAC2F,UAAL,CAAgBzO,IAAhB,CAAqB,GAAGmhB,QAAQ,CAAC1S,UAAjC;AACA,WAAO3F,IAAP;AACD;;AACO,MAAJA,IAAI,GAAG;AACT,WAAO,IAAItH,IAAJ,CAAS,KAAKgN,KAAd,CAAP;AACD;;AACM,MAAH5H,GAAG,GAAG;AACR,QAAI,CAAC,KAAK6G,QAAV,EAAoB;AACpB,QAAI,KAAK4C,IAAT,EAAe,OAAO,KAAKA,IAAZ;AACf,SAAKA,IAAL,GAAY6Q,mBAAmB,CAAC1a,YAApB,CACV,KAAKkH,UAAL,GAAkB7E,GAAlB,CAAsB,KAAK4E,QAA3B,EAAqC,aAArC,CADU,EAEV3E,IAFF;AAGA,WAAO,KAAKuH,IAAZ;AACD;;AACDpV,KAAG,CAACR,IAAD,EAAOiJ,KAAP,EAAc;AACf,QAAIjJ,IAAI,KAAK,UAAb,EAAyB;AACvB,UAAI,KAAKuL,QAAL,KAAkBtC,KAAtB,EAA6B,OAAO,IAAP,CAA7B,KACK;AACH,eAAO,IAAIwd,mBAAJ,CAAwB,KAAK1S,KAA7B,EAAoC;AACzCxI,kBAAQ,EAAEtC,KAD+B;AAEzC+J,kBAAQ,EAAE,KAAKA,QAF0B;AAGzCgB,oBAAU,EAAE,KAAKA;AAHwB,SAApC,CAAP;AAKD;AACF,KATD,MASO,IAAIhU,IAAI,KAAK,UAAb,EAAyB;AAC9B,UAAI,KAAKgT,QAAL,KAAkB/J,KAAtB,EAA6B,OAAO,IAAP,CAA7B,KACK;AACH,eAAO,IAAIwd,mBAAJ,CAAwB,KAAK1S,KAA7B,EAAoC;AACzCxI,kBAAQ,EAAE,KAAKA,QAD0B;AAEzCyH,kBAAQ,EAAE/J,KAF+B;AAGzC+K,oBAAU,EAAE,KAAKA;AAHwB,SAApC,CAAP;AAKD;AACF;;AACD,UAAM,IAAI9F,6DAAJ,CAAmB,iBAAgBlO,IAAK,iCAAxC,CAAN;AACD;;AACDmT,SAAO,GAAG;AACR,WAAO,KAAKY,KAAL,CAAWZ,OAAX,EAAP;AACD;;AACDtJ,aAAW,GAAG;AACZ,WAAO,KAAKkK,KAAL,CAAWlK,WAAX,EAAP;AACD;;AACD0J,QAAM,GAAG;AACP,QAAID,IAAJ;;AACA,QAAI,KAAK/H,QAAL,KAAkB,KAAtB,EAA6B;AAC3B+H,UAAI,GAAG;AACL/H,gBAAQ,EAAE,KAAKA,QADV;AAEL8J,YAAI,EAAE,KAAKtB,KAAL,CAAWoD,cAAX,EAFD;AAGL7B,aAAK,EAAE,KAAKvB,KAAL,CAAWqD,WAAX,KAA2B,CAH7B;AAIL1J,WAAG,EAAE,KAAKqG,KAAL,CAAWwD,UAAX,EAJA;AAKLhC,YAAI,EAAE,KAAKxB,KAAL,CAAWyD,WAAX,EALD;AAMLhC,cAAM,EAAE,KAAKzB,KAAL,CAAW0D,aAAX,EANH;AAOLhC,cAAM,EAAE,KAAK1B,KAAL,CAAW2D,aAAX,EAPH;AAQLhC,mBAAW,EAAE,KAAK3B,KAAL,CAAW4D,kBAAX;AARR,OAAP;AAUD,KAXD,MAWO;AACLrE,UAAI,GAAG;AACL/H,gBAAQ,EAAE,KAAKA,QADV;AAEL8J,YAAI,EAAE,KAAKtB,KAAL,CAAW4S,WAAX,EAFD;AAGLrR,aAAK,EAAE,KAAKvB,KAAL,CAAW6S,QAAX,KAAwB,CAH1B;AAILlZ,WAAG,EAAE,KAAKqG,KAAL,CAAW8S,OAAX,EAJA;AAKLtR,YAAI,EAAE,KAAKxB,KAAL,CAAW+S,QAAX,EALD;AAMLtR,cAAM,EAAE,KAAKzB,KAAL,CAAWgT,UAAX,EANH;AAOLtR,cAAM,EAAE,KAAK1B,KAAL,CAAWiT,UAAX,EAPH;AAQLtR,mBAAW,EAAE,KAAK3B,KAAL,CAAWkT,eAAX;AARR,OAAP;AAUD;;AACD,QAAI,KAAKjU,QAAT,EAAmB;AACjBM,UAAI,CAACN,QAAL,GAAgB,KAAKA,QAArB;AACD;;AACD,WAAOM,IAAP;AACD;;AACD6B,eAAa,GAAG;AACd,QAAI,CAACsR,mBAAmB,CAACvS,MAApB,CAA2B,KAAKH,KAAhC,CAAD,IAA2CjL,KAAK,CAAC,KAAKiL,KAAL,CAAWZ,OAAX,EAAD,CAApD,EAA4E;AAC1E,YAAM,IAAIS,uEAAJ,CAA4B,uCAA5B,CAAN;AACD,KAFD,MAEO,IAAI,CAAC,CAAC,IAAD,EAAO,KAAP,EAAc6N,QAAd,CAAuB,KAAKlW,QAA5B,CAAL,EAA4C;AACjD,YAAM,IAAIqI,uEAAJ,CACJ,0EACG,IAAG,KAAKrI,QAAS,kBAFhB,CAAN;AAID,KALM,MAKA,IAAI,KAAKyH,QAAL,IAAiB,KAAKA,QAAL,IAAiB,CAAtC,EAAyC;AAC9C,YAAM,IAAIY,uEAAJ,CAA4B,+CAA5B,CAAN;AACD;;AACD,WAAO,IAAP;AACD;;AAxI+C;;AA0IlD6S,mBAAmB,CAAC/R,kBAApB,GAAyC,KAAzC;;;;;;;;;;;;;AC5IA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEAZ,+DAAe,CAAClF,OAAhB,GAA0B6X,oFAA1B;AACAjM,+DAAI,CAACN,eAAL,GAAuB4L,2EAAvB,C;;;;;;;;;;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEC,WAASoB,IAAT,EAAe1iB,SAAf,EAA0B;AAE1B;AAEA;AACA,MAAI2iB,GAAG,GAAG,EAAV,CAL0B,CAO1B;;AACAA,KAAG,CAACC,OAAJ,GAAc,OAAd;AAGA;AAEA;AACA;;AACAD,KAAG,CAACE,QAAJ,GAAe;AACdC,YAAQ,EAAE;AACTC,YAAM,EAAG,GADA;AACM;AACfC,YAAM,EAAG,MAFA;AAEQ;AACjBC,aAAO,EAAG,GAHD;AAGO;AAChBC,cAAQ,EAAG,GAJF;AAIQ;AACjBC,eAAS,EAAG,CALH;AAKO;AAChBC,cAAQ,EAAG,CANF,CAMK;;AANL,KADI;AASdC,UAAM,EAAE;AACPF,eAAS,EAAG,CADL;AACS;AAChBC,cAAQ,EAAG,CAFJ;AAEQ;AACfF,cAAQ,EAAG,GAHJ;AAIPD,aAAO,EAAG;AAJH;AATM,GAAf;AAkBA;AAEA;;AACA,MAAIK,SAAS,GAAGvd,KAAK,CAACZ,SAAN,CAAgBpD,GAAhC;AAAA,MACCwhB,aAAa,GAAGxd,KAAK,CAACC,OADvB;AAAA,MAECtI,QAAQ,GAAG6F,MAAM,CAAC4B,SAAP,CAAiBzH,QAF7B;AAIA;AACD;AACA;AACA;;AACC,WAAS8lB,QAAT,CAAkBjJ,GAAlB,EAAuB;AACtB,WAAO,CAAC,EAAEA,GAAG,KAAK,EAAR,IAAeA,GAAG,IAAIA,GAAG,CAACkJ,UAAX,IAAyBlJ,GAAG,CAACmJ,MAA9C,CAAR;AACA;AAED;AACD;AACA;AACA;;;AACC,WAAS1d,OAAT,CAAiBuU,GAAjB,EAAsB;AACrB,WAAOgJ,aAAa,GAAGA,aAAa,CAAChJ,GAAD,CAAhB,GAAwB7c,QAAQ,CAAC0H,IAAT,CAAcmV,GAAd,MAAuB,gBAAnE;AACA;AAED;AACD;AACA;;;AACC,WAASoJ,QAAT,CAAkBpJ,GAAlB,EAAuB;AACtB,WAAOA,GAAG,IAAI7c,QAAQ,CAAC0H,IAAT,CAAcmV,GAAd,MAAuB,iBAArC;AACA;AAED;AACD;AACA;AACA;AACA;;;AACC,WAASqJ,QAAT,CAAkBvS,MAAlB,EAA0BwS,IAA1B,EAAgC;AAC/B,QAAInlB,GAAJ;AACA2S,UAAM,GAAGA,MAAM,IAAI,EAAnB;AACAwS,QAAI,GAAGA,IAAI,IAAI,EAAf,CAH+B,CAI/B;;AACA,SAAKnlB,GAAL,IAAYmlB,IAAZ,EAAkB;AACjB,UAAIA,IAAI,CAAC7e,cAAL,CAAoBtG,GAApB,CAAJ,EAA8B;AAC7B;AACA,YAAI2S,MAAM,CAAC3S,GAAD,CAAN,IAAe,IAAnB,EAAyB2S,MAAM,CAAC3S,GAAD,CAAN,GAAcmlB,IAAI,CAACnlB,GAAD,CAAlB;AACzB;AACD;;AACD,WAAO2S,MAAP;AACA;AAED;AACD;AACA;AACA;AACA;AACA;;;AACC,WAAStP,GAAT,CAAawY,GAAb,EAAkBvR,QAAlB,EAA4B8a,OAA5B,EAAqC;AACpC,QAAIzhB,OAAO,GAAG,EAAd;AAAA,QAAkBxB,CAAlB;AAAA,QAAqBkjB,CAArB;AAEA,QAAI,CAACxJ,GAAL,EAAU,OAAOlY,OAAP,CAH0B,CAKpC;;AACA,QAAIihB,SAAS,IAAI/I,GAAG,CAACxY,GAAJ,KAAYuhB,SAA7B,EAAwC,OAAO/I,GAAG,CAACxY,GAAJ,CAAQiH,QAAR,EAAkB8a,OAAlB,CAAP,CANJ,CAQpC;;AACA,SAAKjjB,CAAC,GAAG,CAAJ,EAAOkjB,CAAC,GAAGxJ,GAAG,CAACtb,MAApB,EAA4B4B,CAAC,GAAGkjB,CAAhC,EAAmCljB,CAAC,EAApC,EAAyC;AACxCwB,aAAO,CAACxB,CAAD,CAAP,GAAamI,QAAQ,CAAC5D,IAAT,CAAc0e,OAAd,EAAuBvJ,GAAG,CAAC1Z,CAAD,CAA1B,EAA+BA,CAA/B,EAAkC0Z,GAAlC,CAAb;AACA;;AACD,WAAOlY,OAAP;AACA;AAED;AACD;AACA;;;AACC,WAAS2hB,cAAT,CAAwB3f,GAAxB,EAA6B6D,IAA7B,EAAmC;AAClC7D,OAAG,GAAGjD,IAAI,CAAC6iB,KAAL,CAAW7iB,IAAI,CAACuY,GAAL,CAAStV,GAAT,CAAX,CAAN;AACA,WAAOC,KAAK,CAACD,GAAD,CAAL,GAAY6D,IAAZ,GAAmB7D,GAA1B;AACA;AAGD;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACC,WAAS6f,mBAAT,CAA6BlB,MAA7B,EAAqC;AACpC,QAAIY,QAAQ,GAAGjB,GAAG,CAACE,QAAJ,CAAaC,QAAb,CAAsBE,MAArC,CADoC,CAGpC;;AACA,QAAK,OAAOA,MAAP,KAAkB,UAAvB,EAAoCA,MAAM,GAAGA,MAAM,EAAf,CAJA,CAMpC;;AACA,QAAKQ,QAAQ,CAAER,MAAF,CAAR,IAAsBA,MAAM,CAACmB,KAAP,CAAa,IAAb,CAA3B,EAAgD;AAE/C;AACA,aAAO;AACNC,WAAG,EAAGpB,MADA;AAENqB,WAAG,EAAGrB,MAAM,CAACsB,OAAP,CAAe,GAAf,EAAoB,EAApB,EAAwBA,OAAxB,CAAgC,IAAhC,EAAsC,KAAtC,CAFA;AAGNC,YAAI,EAAGvB;AAHD,OAAP,CAH+C,CAShD;AACC,KAVD,MAUO,IAAK,CAACA,MAAD,IAAW,CAACA,MAAM,CAACoB,GAAnB,IAA0B,CAACpB,MAAM,CAACoB,GAAP,CAAWD,KAAX,CAAiB,IAAjB,CAAhC,EAAyD;AAE/D;AACA,aAAS,CAACX,QAAQ,CAAEI,QAAF,CAAX,GAA4BA,QAA5B,GAAuCjB,GAAG,CAACE,QAAJ,CAAaC,QAAb,CAAsBE,MAAtB,GAA+B;AAC5EoB,WAAG,EAAGR,QADsE;AAE5ES,WAAG,EAAGT,QAAQ,CAACU,OAAT,CAAiB,IAAjB,EAAuB,KAAvB,CAFsE;AAG5EC,YAAI,EAAGX;AAHqE,OAA7E;AAMA,KA1BmC,CA2BpC;;;AACA,WAAOZ,MAAP;AACA;AAGD;;AAEA;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACC,MAAIwB,QAAQ,GAAG7B,GAAG,CAAC6B,QAAJ,GAAe7B,GAAG,CAAC/iB,KAAJ,GAAY,UAAS6E,KAAT,EAAgBwe,OAAhB,EAAyB;AAClE;AACA,QAAIjd,OAAO,CAACvB,KAAD,CAAX,EAAoB;AACnB,aAAO1C,GAAG,CAAC0C,KAAD,EAAQ,UAASJ,GAAT,EAAc;AAC/B,eAAOmgB,QAAQ,CAACngB,GAAD,EAAM4e,OAAN,CAAf;AACA,OAFS,CAAV;AAGA,KANiE,CAQlE;;;AACAxe,SAAK,GAAGA,KAAK,IAAI,CAAjB,CATkE,CAWlE;;AACA,QAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B,OAAOA,KAAP,CAZmC,CAclE;;AACAwe,WAAO,GAAGA,OAAO,IAAIN,GAAG,CAACE,QAAJ,CAAaQ,MAAb,CAAoBJ,OAAzC,CAfkE,CAiBjE;;AACD,QAAIwB,KAAK,GAAG,IAAIC,MAAJ,CAAW,WAAWzB,OAAX,GAAqB,GAAhC,EAAqC,CAAC,GAAD,CAArC,CAAZ;AAAA,QACC0B,WAAW,GAAGpgB,UAAU,CACvB,CAAC,KAAKE,KAAN,EACC6f,OADD,CACS,iBADT,EAC4B,KAD5B,EACmC;AADnC,KAECA,OAFD,CAESG,KAFT,EAEgB,EAFhB,EAE4B;AAF5B,KAGCH,OAHD,CAGSrB,OAHT,EAGkB,GAHlB,CADuB,CAIK;AAJL,KADzB,CAlBkE,CA0BlE;;AACA,WAAO,CAAC3e,KAAK,CAACqgB,WAAD,CAAN,GAAsBA,WAAtB,GAAoC,CAA3C;AACA,GA5BD;AA+BA;AACD;AACA;AACA;AACA;AACA;;;AACC,MAAIC,OAAO,GAAGjC,GAAG,CAACiC,OAAJ,GAAc,UAASngB,KAAT,EAAgB0e,SAAhB,EAA2B;AACtDA,aAAS,GAAGa,cAAc,CAACb,SAAD,EAAYR,GAAG,CAACE,QAAJ,CAAaQ,MAAb,CAAoBF,SAAhC,CAA1B;AAEA,QAAI0B,eAAe,GAAGnhB,MAAM,CAACif,GAAG,CAAC6B,QAAJ,CAAa/f,KAAb,IAAsB,GAAtB,GAA4B0e,SAA7B,CAA5B;AACA,QAAI2B,OAAO,GAAG1jB,IAAI,CAAC6iB,KAAL,CAAWY,eAAX,CAAd;AACA,QAAIE,WAAW,GAAGrhB,MAAM,CAACohB,OAAO,GAAG,IAAV,GAAiB3B,SAAlB,CAAN,CAAmCyB,OAAnC,CAA2CzB,SAA3C,CAAlB;AACA,WAAO4B,WAAP;AACA,GAPD;AAUA;AACD;AACA;AACA;AACA;AACA;AACA;;;AACC,MAAIC,YAAY,GAAGrC,GAAG,CAACqC,YAAJ,GAAmBrC,GAAG,CAACK,MAAJ,GAAa,UAASK,MAAT,EAAiBF,SAAjB,EAA4BD,QAA5B,EAAsCD,OAAtC,EAA+C;AACjG;AACA,QAAIjd,OAAO,CAACqd,MAAD,CAAX,EAAqB;AACpB,aAAOthB,GAAG,CAACshB,MAAD,EAAS,UAAShf,GAAT,EAAc;AAChC,eAAO2gB,YAAY,CAAC3gB,GAAD,EAAM8e,SAAN,EAAiBD,QAAjB,EAA2BD,OAA3B,CAAnB;AACA,OAFS,CAAV;AAGA,KANgG,CAQjG;;;AACAI,UAAM,GAAGmB,QAAQ,CAACnB,MAAD,CAAjB,CATiG,CAWjG;;AACA,QAAI7B,IAAI,GAAGoC,QAAQ,CAChBD,QAAQ,CAACR,SAAD,CAAR,GAAsBA,SAAtB,GAAkC;AAClCA,eAAS,EAAGA,SADsB;AAElCD,cAAQ,EAAGA,QAFuB;AAGlCD,aAAO,EAAGA;AAHwB,KADlB,EAMjBN,GAAG,CAACE,QAAJ,CAAaQ,MANI,CAAnB;AAAA,QASC;AACA4B,gBAAY,GAAGjB,cAAc,CAACxC,IAAI,CAAC2B,SAAN,CAV9B;AAAA,QAYC;AACA+B,YAAQ,GAAG7B,MAAM,GAAG,CAAT,GAAa,GAAb,GAAmB,EAb/B;AAAA,QAcCnb,IAAI,GAAGid,QAAQ,CAACP,OAAO,CAACxjB,IAAI,CAACuY,GAAL,CAAS0J,MAAM,IAAI,CAAnB,CAAD,EAAwB4B,YAAxB,CAAR,EAA+C,EAA/C,CAAR,GAA6D,EAdrE;AAAA,QAeC5K,GAAG,GAAGnS,IAAI,CAACjJ,MAAL,GAAc,CAAd,GAAkBiJ,IAAI,CAACjJ,MAAL,GAAc,CAAhC,GAAoC,CAf3C,CAZiG,CA6BjG;;AACA,WAAOimB,QAAQ,IAAI7K,GAAG,GAAGnS,IAAI,CAACwb,MAAL,CAAY,CAAZ,EAAerJ,GAAf,IAAsBmH,IAAI,CAAC0B,QAA9B,GAAyC,EAAhD,CAAR,GAA8Dhb,IAAI,CAACwb,MAAL,CAAYrJ,GAAZ,EAAiBiK,OAAjB,CAAyB,gBAAzB,EAA2C,OAAO9C,IAAI,CAAC0B,QAAvD,CAA9D,IAAkI+B,YAAY,GAAGzD,IAAI,CAACyB,OAAL,GAAe2B,OAAO,CAACxjB,IAAI,CAACuY,GAAL,CAAS0J,MAAT,CAAD,EAAmB4B,YAAnB,CAAP,CAAwCxhB,KAAxC,CAA8C,GAA9C,EAAmD,CAAnD,CAAlB,GAA0E,EAAxN,CAAP;AACA,GA/BD;AAkCA;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACC,MAAI2hB,WAAW,GAAGzC,GAAG,CAACyC,WAAJ,GAAkB,UAAS/B,MAAT,EAAiBN,MAAjB,EAAyBI,SAAzB,EAAoCD,QAApC,EAA8CD,OAA9C,EAAuDD,MAAvD,EAA+D;AAClG;AACA,QAAIhd,OAAO,CAACqd,MAAD,CAAX,EAAqB;AACpB,aAAOthB,GAAG,CAACshB,MAAD,EAAS,UAAShf,GAAT,EAAa;AAC/B,eAAO+gB,WAAW,CAAC/gB,GAAD,EAAM0e,MAAN,EAAcI,SAAd,EAAyBD,QAAzB,EAAmCD,OAAnC,EAA4CD,MAA5C,CAAlB;AACA,OAFS,CAAV;AAGA,KANiG,CAQlG;;;AACAK,UAAM,GAAGmB,QAAQ,CAACnB,MAAD,CAAjB,CATkG,CAWlG;;AACA,QAAI7B,IAAI,GAAGoC,QAAQ,CAChBD,QAAQ,CAACZ,MAAD,CAAR,GAAmBA,MAAnB,GAA4B;AAC5BA,YAAM,EAAGA,MADmB;AAE5BI,eAAS,EAAGA,SAFgB;AAG5BD,cAAQ,EAAGA,QAHiB;AAI5BD,aAAO,EAAGA,OAJkB;AAK5BD,YAAM,EAAGA;AALmB,KADZ,EAQjBL,GAAG,CAACE,QAAJ,CAAaC,QARI,CAAnB;AAAA,QAWC;AACAuC,WAAO,GAAGnB,mBAAmB,CAAC1C,IAAI,CAACwB,MAAN,CAZ9B;AAAA,QAcC;AACAsC,aAAS,GAAGjC,MAAM,GAAG,CAAT,GAAagC,OAAO,CAACjB,GAArB,GAA2Bf,MAAM,GAAG,CAAT,GAAagC,OAAO,CAAChB,GAArB,GAA2BgB,OAAO,CAACd,IAf3E,CAZkG,CA6BlG;;AACA,WAAOe,SAAS,CAAChB,OAAV,CAAkB,IAAlB,EAAwB9C,IAAI,CAACuB,MAA7B,EAAqCuB,OAArC,CAA6C,IAA7C,EAAmDU,YAAY,CAAC5jB,IAAI,CAACuY,GAAL,CAAS0J,MAAT,CAAD,EAAmBW,cAAc,CAACxC,IAAI,CAAC2B,SAAN,CAAjC,EAAmD3B,IAAI,CAAC0B,QAAxD,EAAkE1B,IAAI,CAACyB,OAAvE,CAA/D,CAAP;AACA,GA/BD;AAkCA;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACCN,KAAG,CAAC4C,YAAJ,GAAmB,UAASC,IAAT,EAAezC,MAAf,EAAuBI,SAAvB,EAAkCD,QAAlC,EAA4CD,OAA5C,EAAqDD,MAArD,EAA6D;AAC/E,QAAI,CAACwC,IAAD,IAAS,CAACxf,OAAO,CAACwf,IAAD,CAArB,EAA6B,OAAO,EAAP,CADkD,CAG/E;;AACA,QAAIhE,IAAI,GAAGoC,QAAQ,CAChBD,QAAQ,CAACZ,MAAD,CAAR,GAAmBA,MAAnB,GAA4B;AAC5BA,YAAM,EAAGA,MADmB;AAE5BI,eAAS,EAAGA,SAFgB;AAG5BD,cAAQ,EAAGA,QAHiB;AAI5BD,aAAO,EAAGA,OAJkB;AAK5BD,YAAM,EAAGA;AALmB,KADZ,EAQjBL,GAAG,CAACE,QAAJ,CAAaC,QARI,CAAnB;AAAA,QAWC;AACAuC,WAAO,GAAGnB,mBAAmB,CAAC1C,IAAI,CAACwB,MAAN,CAZ9B;AAAA,QAcC;AACAyC,kBAAc,GAAGJ,OAAO,CAACjB,GAAR,CAAYjQ,OAAZ,CAAoB,IAApB,IAA4BkR,OAAO,CAACjB,GAAR,CAAYjQ,OAAZ,CAAoB,IAApB,CAA5B,GAAwD,IAAxD,GAA+D,KAfjF;AAAA,QAiBC;AACAuR,aAAS,GAAG,CAlBb;AAAA,QAoBC;AACAC,aAAS,GAAG5jB,GAAG,CAACyjB,IAAD,EAAO,UAASnhB,GAAT,EAAcxD,CAAd,EAAiB;AACtC,UAAImF,OAAO,CAAC3B,GAAD,CAAX,EAAkB;AACjB;AACA,eAAOse,GAAG,CAAC4C,YAAJ,CAAiBlhB,GAAjB,EAAsBmd,IAAtB,CAAP;AACA,OAHD,MAGO;AACN;AACAnd,WAAG,GAAGmgB,QAAQ,CAACngB,GAAD,CAAd,CAFM,CAIN;;AACA,YAAIihB,SAAS,GAAGjhB,GAAG,GAAG,CAAN,GAAUghB,OAAO,CAACjB,GAAlB,GAAwB/f,GAAG,GAAG,CAAN,GAAUghB,OAAO,CAAChB,GAAlB,GAAwBgB,OAAO,CAACd,IAAxE;AAAA,YAEC;AACAqB,YAAI,GAAGN,SAAS,CAAChB,OAAV,CAAkB,IAAlB,EAAwB9C,IAAI,CAACuB,MAA7B,EAAqCuB,OAArC,CAA6C,IAA7C,EAAmDU,YAAY,CAAC5jB,IAAI,CAACuY,GAAL,CAAStV,GAAT,CAAD,EAAgB2f,cAAc,CAACxC,IAAI,CAAC2B,SAAN,CAA9B,EAAgD3B,IAAI,CAAC0B,QAArD,EAA+D1B,IAAI,CAACyB,OAApE,CAA/D,CAHR;AAKA,YAAI2C,IAAI,CAAC3mB,MAAL,GAAcymB,SAAlB,EAA6BA,SAAS,GAAGE,IAAI,CAAC3mB,MAAjB;AAC7B,eAAO2mB,IAAP;AACA;AACD,KAjBc,CArBhB,CAJ+E,CA4C/E;;AACA,WAAO7jB,GAAG,CAAC4jB,SAAD,EAAY,UAASthB,GAAT,EAAcxD,CAAd,EAAiB;AACtC;AACA,UAAI2iB,QAAQ,CAACnf,GAAD,CAAR,IAAiBA,GAAG,CAACpF,MAAJ,GAAaymB,SAAlC,EAA6C;AAC5C;AACA,eAAOD,cAAc,GAAGphB,GAAG,CAACigB,OAAJ,CAAY9C,IAAI,CAACuB,MAAjB,EAAyBvB,IAAI,CAACuB,MAAL,GAAa,IAAIhd,KAAJ,CAAU2f,SAAS,GAAGrhB,GAAG,CAACpF,MAAhB,GAAyB,CAAnC,EAAsC4mB,IAAtC,CAA2C,GAA3C,CAAtC,CAAH,GAA8F,IAAI9f,KAAJ,CAAU2f,SAAS,GAAGrhB,GAAG,CAACpF,MAAhB,GAAyB,CAAnC,EAAsC4mB,IAAtC,CAA2C,GAA3C,CAAD,GAAoDxhB,GAAtK;AACA;;AACD,aAAOA,GAAP;AACA,KAPS,CAAV;AAQA,GArDD;AAwDA;AAEA;AACA;;;AACA,MAAI,IAAJ,EAAoC;AACnC,QAAI,SAAiCV,MAAM,CAACjH,OAA5C,EAAqD;AACpDA,aAAO,GAAGiH,MAAM,CAACjH,OAAP,GAAiBimB,GAA3B;AACA;;AACDjmB,WAAO,CAACopB,UAAR,GAAqBnD,GAArB;AACA,GALD,MAKO,EAzXmB,CAiZ1B;;AACA,CAlZA,EAkZC,IAlZD,CAAD,C;;;;;;;;;;;ACXA,MAAMoD,KAAK,GAAGjrB,mBAAO,CAAC,oDAAD,CAArB;;AACA,MAAMkrB,GAAG,GAAGlrB,mBAAO,CAAC,kBAAD,CAAnB;;AACA,MAAMmrB,QAAQ,GAAGnrB,mBAAO,CAAC,sDAAD,CAAxB;;AACA,MAAMorB,OAAO,GAAGprB,mBAAO,CAAC,oDAAD,CAAvB;;AAEA,MAAMqrB,QAAQ,GAAG,CAAC9hB,GAAD,EAAM+hB,GAAN,KAAe,OAAO/hB,GAAP,KAAe,SAAf,GAA2BA,GAA3B,GAAiC+hB,GAAjE;;AACA,MAAMC,OAAO,GAAG,CAAChiB,GAAD,EAAM+hB,GAAN,KAAe,OAAO/hB,GAAP,KAAe,QAAf,GAA0BA,GAA1B,GAAgC+hB,GAA/D;;AAEA,MAAME,cAAc,GAAG;AACnB;AACAC,QAAM,EAAE,KAFW;AAGnB;AACAC,aAAW,EAAE,KAJM;AAKnB;AACAjoB,QAAM,EAAEwnB,KAAK,CAACU,SAAN,CAAgBC,IANL;AAOnB;AACAC,IAAE,EAAE;AARe,CAAvB;;AAWAhjB,MAAM,CAACjH,OAAP,GAAiB;AAAU;AAAYoR,KAAtB;AAA6B;AAAc3P,OAA3C,EAAoD;AACjE,MAAIyoB,QAAQ,GAAG,IAAf,CADiE,CAGjE;;AACA,QAAMpF,IAAI,GAAGje,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACsjB,MAAP,CAAc,IAAd,CAAd,EAAmCP,cAAnC,CAAb,CAJiE,CAMjE;;AACA,MAAIxY,KAAK,IAAI,aAAa,OAAOA,KAAjC,EAAwC;AACpC;AACA,QAAI,EAAEA,KAAK,YAAYgZ,UAAnB,CAAJ,EAAoC;AAChCvjB,YAAM,CAACC,MAAP,CAAcge,IAAd,EAAoB1T,KAApB;AACAA,WAAK,GAAG0T,IAAI,CAAC1T,KAAL,GAAa0T,IAAI,CAAC1T,KAAlB,GAA0B9N,SAAlC;AACA,UAAIwhB,IAAI,CAAC1T,KAAT,EAAgB,OAAO0T,IAAI,CAAC1T,KAAZ;AACnB,KANmC,CAQpC;;;AACA,QAAItQ,MAAM,CAACupB,QAAP,CAAgBjZ,KAAhB,CAAJ,EAA4B;AACxB8Y,cAAQ,GAAG9Y,KAAX;AACA0T,UAAI,CAACjjB,MAAL,GAAcwnB,KAAK,CAACU,SAAN,CAAgBO,MAA9B;AACAlZ,WAAK,GAAG9N,SAAR;AACH;AACJ,GArBgE,CAuBjE;;;AACAuD,QAAM,CAACC,MAAP,CAAcge,IAAd,EAAoBrjB,OAApB,EAxBiE,CA0BjE;;AACA,QAAM8oB,SAAS,GAAG,IAAIlB,KAAJ,CAAUvE,IAAV,CAAlB,CA3BiE,CA6BjE;;AACA,MAAI1T,KAAK,IAAI,aAAa,OAAOA,KAAjC,EAAwC;AACpC;AACA,QAAImZ,SAAS,CAACN,EAAV,CAAaO,UAAb,CAAwBpZ,KAAxB,CAAJ,EAAoC;AAChC0T,UAAI,CAACjjB,MAAL,GAAcwnB,KAAK,CAACU,SAAN,CAAgBU,IAA9B;AACA3F,UAAI,CAAC4F,QAAL,GAAgBtZ,KAAhB;AACA8Y,cAAQ,GAAGK,SAAS,CAACN,EAAV,CAAaU,YAAb,CAA0BvZ,KAA1B,CAAX;AACH,KAJD,MAIO;AACH,YAAM,IAAIhQ,KAAJ,CAAUioB,KAAK,CAACuB,MAAN,CAAaC,gBAAvB,CAAN;AACH;AACJ,GAvCgE,CAyCjE;;;AACA,QAAMC,IAAI,GAAG,IAAItB,OAAJ,CAAYU,QAAZ,EAAsBpF,IAAtB,CAAb;;AAEA,QAAQiG,SAAR,GAAgC1B,KAAhC,CAAQ0B,SAAR;AAAA,QAAmBC,QAAnB,GAAgC3B,KAAhC,CAAmB2B,QAAnB;;AAEA,WAASC,QAAT;AAAkB;AAAYjI,OAA9B,EAAqC;AACjC,QAAIA,KAAK,IAAI8H,IAAb,EAAmB;AACf,UAAII,IAAJ,CADe,CAEf;;AACA,UAAI,OAAOlI,KAAP,KAAiB,QAArB,EAA+BkI,IAAI,GAAGJ,IAAI,CAACG,QAAL,CAAcjI,KAAd,CAAP,CAHhB,CAIf;;AACA,UAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6B,OAAOA,KAAK,CAACmI,SAAb,KAA2B,WAAxD,IAAuE,OAAOnI,KAAK,CAACoI,MAAb,KAAwB,WAAnG,EAAgHF,IAAI,GAAGJ,IAAI,CAACG,QAAL,CAAcjI,KAAK,CAACmI,SAApB,CAAP;;AAEhH,UAAID,IAAJ,EAAU;AACN,eAAOA,IAAP;AACH;AACJ;;AACD,WAAO,IAAP;AACH;;AAED,WAASG,OAAT,CAAiBC,OAAjB,EAA0B;AACtB,uBAAiChC,GAAG,CAACiC,KAArC;AAAA,UAAQpC,IAAR,cAAQA,IAAR;AAAA,UAAcqC,SAAd,cAAcA,SAAd;AAAA,UAAyBC,GAAzB,cAAyBA,GAAzB,CADsB,CAEtB;;AACA,WAAOtC,IAAI,CAAC,GAAD,EAAMqC,SAAS,CAACC,GAAG,GAAGH,OAAO,CAACvkB,KAAR,CAAc,IAAd,EAAoBoiB,IAApB,CAAyBsC,GAAzB,CAAN,GAAsCA,GAAvC,CAAf,CAAX;AACH;;AAED,SAAO;AACH;AACR;AACA;AACA;AACA;AACA;AACQC,YAAQ,EAAE;AAAU;AAAY1I,SAAtB;AAA6B;AAAmB2I,QAAhD,EAAsD;AAC5D,UAAIT,IAAI,GAAGD,QAAQ,CAACjI,KAAD,CAAnB;AACA,aAAQkI,IAAI,IAAIA,IAAI,CAACU,OAAL,CAAaD,IAAb,CAAT,IAAgC,IAAvC;AACH,KAVE;;AAYH;AACR;AACA;AACA;AACA;AACA;AACA;AACQE,iBAAa,EAAE;AAAU;AAAY7I,SAAtB;AAA6B;AAAc/jB,YAA3C,EAAqD;AAChE,UAAIisB,IAAI,GAAGD,QAAQ,CAACjI,KAAD,CAAnB;;AACA,UAAIkI,IAAJ,EAAU;AACNA,YAAI,CAACY,YAAL,CAAkB7sB,QAAlB;AACH,OAFD,MAEO;AACHA,gBAAQ,CAAC,IAAD,EAAO,yBAAyB+jB,KAAhC,CAAR;AACH;AACJ,KA1BE;;AA4BH;AACR;AACA;AACA;AACA;AACA;AACA;AACQ+I,cAAU,EAAE;AAAU;AAAY/I,SAAtB;AAA6B;AAAagJ,YAA1C,EAAoD;AAC5D,UAAId,IAAI,GAAGD,QAAQ,CAACjI,KAAD,CAAnB;;AACA,UAAIkI,IAAJ,EAAU;AACN,YAAIxrB,IAAI,GAAGwrB,IAAI,CAACU,OAAL,EAAX;;AACA,YAAIlsB,IAAI,IAAIA,IAAI,CAAC6C,MAAjB,EAAyB;AACrB,iBAAO7C,IAAI,CAACsB,QAAL,CAAcgrB,QAAQ,IAAI,MAA1B,CAAP;AACH;AACJ;;AACD,aAAO,EAAP;AACH,KA5CE;;AA8CH;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACQC,mBAAe,EAAE;AAAU;AAAYjJ,SAAtB;AAA6B;AAAc/jB,YAA3C;AAAqD;AAAa+sB,YAAlE,EAA4E;AACzF,UAAId,IAAI,GAAGD,QAAQ,CAACjI,KAAD,CAAnB;;AACA,UAAIkI,IAAJ,EAAU;AACNA,YAAI,CAACY,YAAL,CAAkB,UAAUpsB,IAAV,EAAgBqK,GAAhB,EAAqB;AACnC,cAAIA,GAAJ,EAAS;AACL9K,oBAAQ,CAACS,IAAD,EAAOqK,GAAP,CAAR;AACA;AACH;;AAED,cAAIrK,IAAI,IAAIA,IAAI,CAAC6C,MAAjB,EAAyB;AACrBtD,oBAAQ,CAACS,IAAI,CAACsB,QAAL,CAAcgrB,QAAQ,IAAI,MAA1B,CAAD,CAAR;AACH,WAFD,MAEO;AACH/sB,oBAAQ,CAAC,EAAD,CAAR;AACH;AACJ,SAXD;AAYH,OAbD,MAaO;AACHA,gBAAQ,CAAC,EAAD,CAAR;AACH;AACJ,KAxEE;;AA0EH;AACR;AACA;AACA;AACA;AACQitB,cAAU,EAAE;AAAU;AAAYlJ,SAAtB,EAA6B;AACrC;AACA,UAAIkI,IAAI,GAAGD,QAAQ,CAACjI,KAAD,CAAnB;;AACA,UAAIkI,IAAJ,EAAU;AACNJ,YAAI,CAACqB,WAAL,CAAiBjB,IAAI,CAACC,SAAtB;AACH;AACJ,KArFE;;AAuFH;AACR;AACA;AACA;AACA;AACQiB,iBAAa,EAAE;AAAU;AAAYC,WAAtB,EAA+B;AAC1C;AACAvB,UAAI,CAACuB,OAAL,GAAeA,OAAf;AACH,KA/FE;;AAiGH;AACR;AACA;AACA;AACA;AACQC,iBAAa,EAAE,YAAY;AACvB,aAAOxB,IAAI,CAACuB,OAAL,IAAgB,EAAvB;AACH,KAxGE;;AA0GH;AACR;AACA;AACA;AACA;AACA;AACA;AACQE,sBAAkB,EAAE;AAAU;AAAYvJ,SAAtB;AAA6B;AAAYqJ,WAAzC,EAAkD;AAClE,UAAInB,IAAI,GAAGD,QAAQ,CAACjI,KAAD,CAAnB;;AACA,UAAIkI,IAAJ,EAAU;AACNA,YAAI,CAACmB,OAAL,GAAeA,OAAf;AACH;AACJ,KAtHE;;AAwHH;AACR;AACA;AACA;AACA;AACA;AACQG,sBAAkB,EAAE;AAAU;AAAYxJ,SAAtB,EAA6B;AAC7C,UAAIkI,IAAI,GAAGD,QAAQ,CAACjI,KAAD,CAAnB;;AACA,UAAIkI,IAAJ,EAAU;AACN,eAAOA,IAAI,CAACmB,OAAL,IAAgB,EAAvB;AACH;;AACD,aAAO,EAAP;AACH,KApIE;;AAsIH;AACR;AACA;AACA;AACA;AACA;AACQI,cAAU,EAAE;AAAU;AAAYzJ,SAAtB;AAA6B;AAAYthB,WAAzC,EAAkD;AAC1D,UAAIwpB,IAAI,GAAGD,QAAQ,CAACjI,KAAD,CAAnB;;AACA,UAAIkI,IAAJ,EAAU;AACNA,YAAI,CAACwB,OAAL,CAAahrB,OAAb;AACH;AACJ,KAjJE;;AAmJH;AACR;AACA;AACA;AACA;AACA;AACA;AACQirB,gBAAY,EAAE;AAAU;AAAYC,aAAtB;AAAiC;AAAatB,WAA9C;AAAuD;AAAauB,WAApE;AAA6E;AAAYR,WAAzF,EAAkG;AAC5G,UAAI9B,SAAS,CAACN,EAAV,CAAaO,UAAb,CAAwBoC,SAAxB,CAAJ,EAAwC;AACpC;AACAtB,eAAO,GAAGA,OAAO,GAAGD,OAAO,CAACC,OAAD,CAAV,GAAsB,EAAvC,CAFoC,CAIpC;;AACA,YAAIwB,CAAC,GAAGF,SAAS,CAAC7lB,KAAV,CAAgB,IAAhB,EAAsBoiB,IAAtB,CAA2B,GAA3B,EAAgCpiB,KAAhC,CAAsC,GAAtC,EAA2CiK,GAA3C,EAAR,CALoC,CAOpC;;AACAsa,eAAO,IAAIuB,OAAO,GAAGA,OAAH,GAAaC,CAA/B,CARoC,CAUpC;;AACA,cAAMC,KAAK,GAAGxC,SAAS,CAACN,EAAV,CAAa+C,QAAb,CAAsBJ,SAAtB,CAAd,CAXoC,CAapC;;;AACA,aAAKK,OAAL,CAAa3B,OAAb,EAAsBf,SAAS,CAACN,EAAV,CAAaU,YAAb,CAA0BiC,SAA1B,CAAtB,EAA4DP,OAA5D,EAAqEU,KAArE;AACH,OAfD,MAeO;AACH,cAAM,IAAI3rB,KAAJ,CAAUioB,KAAK,CAACuB,MAAN,CAAasC,cAAb,CAA4BtF,OAA5B,CAAoC,IAApC,EAA0CgF,SAA1C,CAAV,CAAN;AACH;AACJ,KA7KE;;AA+KH;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACQO,kBAAc,EAAE;AAAU;AAAYP,aAAtB;AAAiC;AAAatB,WAA9C;AAAuD;AAAsB7hB,UAA7E,EAAqF;AACjG;AACA,UAAIA,MAAM,YAAYue,MAAtB,EAA8B;AAC1B;AACAve,cAAM,GAAI,UAAU2jB,EAAV,EAAc;AACpB,iBAAO,UAAU1C,QAAV,EAAoB;AACvB,mBAAO0C,EAAE,CAAC/sB,IAAH,CAAQqqB,QAAR,CAAP;AACH,WAFD;AAGH,SAJQ,CAINjhB,MAJM,CAAT;AAKH,OAPD,MAOO,IAAI,eAAe,OAAOA,MAA1B,EAAkC;AACrC;AACAA,cAAM,GAAG,YAAY;AACjB,iBAAO,IAAP;AACH,SAFD;AAGH,OAdgG,CAgBjG;;;AACA6hB,aAAO,GAAGA,OAAO,GAAGD,OAAO,CAACC,OAAD,CAAV,GAAsB,EAAvC,CAjBiG,CAmBjG;;AACAsB,eAAS,GAAGtD,GAAG,CAACkC,SAAJ,CAAcoB,SAAd,CAAZ;;AAEA,UAAIrC,SAAS,CAACN,EAAV,CAAaO,UAAb,CAAwBoC,SAAxB,CAAJ,EAAwC;AACpC,cAAMS,KAAK,GAAG9C,SAAS,CAAC+C,SAAV,CAAoBV,SAApB,CAAd;AACA,cAAMW,IAAI,GAAG,IAAb;;AAEA,YAAIF,KAAK,CAAC9qB,MAAV,EAAkB;AACd8qB,eAAK,CAACnlB,OAAN,CAAc,UAAUslB,QAAV,EAAoB;AAC9B,gBAAIV,CAAC,GAAGxD,GAAG,CAACmE,QAAJ,CAAab,SAAb,EAAwBY,QAAxB,EAAkCzmB,KAAlC,CAAwC,IAAxC,EAA8CoiB,IAA9C,CAAmD,GAAnD,CAAR,CAD8B,CACmC;;AACjE,gBAAI1f,MAAM,CAACqjB,CAAD,CAAV,EAAe;AACX,kBAAIY,KAAK,GAAGnD,SAAS,CAACN,EAAV,CAAa+C,QAAb,CAAsBQ,QAAtB,CAAZ;;AACA,kBAAIE,KAAK,CAACC,MAAN,EAAJ,EAAoB;AAChBJ,oBAAI,CAACN,OAAL,CAAa3B,OAAO,GAAGwB,CAAvB,EAA0BvC,SAAS,CAACN,EAAV,CAAaU,YAAb,CAA0B6C,QAA1B,CAA1B,EAA+D,EAA/D,EAAmEE,KAAnE;AACH,eAFD,MAEO;AACHH,oBAAI,CAACN,OAAL,CAAa3B,OAAO,GAAGwB,CAAV,GAAc,GAA3B,EAAgChsB,MAAM,CAAC8sB,KAAP,CAAa,CAAb,CAAhC,EAAiD,EAAjD,EAAqDF,KAArD;AACH;AACJ;AACJ,WAVD;AAWH;AACJ,OAjBD,MAiBO;AACH,cAAM,IAAItsB,KAAJ,CAAUioB,KAAK,CAACuB,MAAN,CAAasC,cAAb,CAA4BtF,OAA5B,CAAoC,IAApC,EAA0CgF,SAA1C,CAAV,CAAN;AACH;AACJ,KAjOE;;AAmOH;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACQiB,uBAAmB,EAAE;AAAU;AAAWjB,aAArB;AAAgC;AAAa3tB,YAA7C;AAAuD;AAAWqsB,WAAlE;AAA2E;AAAoB7hB,UAA/F,EAAuG;AACxH,UAAIA,MAAM,YAAYue,MAAtB,EAA8B;AAC1Bve,cAAM,GAAI,UAAU2jB,EAAV,EAAc;AACpB,iBAAO,UAAU1C,QAAV,EAAoB;AACvB,mBAAO0C,EAAE,CAAC/sB,IAAH,CAAQqqB,QAAR,CAAP;AACH,WAFD;AAGH,SAJQ,CAINjhB,MAJM,CAAT;AAKH,OAND,MAMO,IAAI,eAAe,OAAOA,MAA1B,EAAkC;AACrCA,cAAM,GAAG,YAAY;AACjB,iBAAO,IAAP;AACH,SAFD;AAGH,OAXuH,CAaxH;;;AACA6hB,aAAO,GAAGA,OAAO,GAAGD,OAAO,CAACC,OAAD,CAAV,GAAsB,EAAvC,CAdwH,CAgBxH;;AACAsB,eAAS,GAAGtD,GAAG,CAACkC,SAAJ,CAAcoB,SAAd,CAAZ;AAEA,UAAIW,IAAI,GAAG,IAAX;AACAhD,eAAS,CAACN,EAAV,CAAa6D,IAAb,CAAkBlB,SAAlB,EAA6B,GAA7B,EAAkC,UAAU7iB,GAAV,EAAe;AAC7C,YAAIA,GAAG,IAAIA,GAAG,CAACgkB,IAAJ,KAAa,QAAxB,EAAkC;AAC9B9uB,kBAAQ,CAACqE,SAAD,EAAY+lB,KAAK,CAACuB,MAAN,CAAasC,cAAb,CAA4BtF,OAA5B,CAAoC,IAApC,EAA0CgF,SAA1C,CAAZ,CAAR;AACH,SAFD,MAEO,IAAI7iB,GAAJ,EAAS;AACZ9K,kBAAQ,CAACqE,SAAD,EAAYyG,GAAZ,CAAR;AACH,SAFM,MAEA;AACH,cAAIsjB,KAAK,GAAG9C,SAAS,CAAC+C,SAAV,CAAoBV,SAApB,CAAZ;AACA,cAAIzoB,CAAC,GAAG,CAAC,CAAT;;AAEA,cAAIwG,IAAI,GAAG,YAAY;AACnBxG,aAAC,IAAI,CAAL;;AACA,gBAAIA,CAAC,GAAGkpB,KAAK,CAAC9qB,MAAd,EAAsB;AAClB,kBAAIirB,QAAQ,GAAGH,KAAK,CAAClpB,CAAD,CAApB;AACA,kBAAI2oB,CAAC,GAAGxD,GAAG,CAACmE,QAAJ,CAAab,SAAb,EAAwBY,QAAxB,EAAkCzmB,KAAlC,CAAwC,IAAxC,EAA8CoiB,IAA9C,CAAmD,GAAnD,CAAR,CAFkB,CAE+C;;AACjE2D,eAAC,GAAGA,CAAC,CACAtB,SADD,CACW,KADX,EAEC5D,OAFD,CAES,kBAFT,EAE6B,EAF7B,EAGCA,OAHD,CAGS,eAHT,EAG0B,EAH1B,CAAJ,CAHkB,CAMiB;;AACnC,kBAAIne,MAAM,CAACqjB,CAAD,CAAV,EAAe;AACXvC,yBAAS,CAACN,EAAV,CAAa+D,IAAb,CAAkBR,QAAlB,EAA4B,UAAUS,GAAV,EAAeP,KAAf,EAAsB;AAC9C,sBAAIO,GAAJ,EAAShvB,QAAQ,CAACqE,SAAD,EAAY2qB,GAAZ,CAAR;;AACT,sBAAIP,KAAK,CAACC,MAAN,EAAJ,EAAoB;AAChBpD,6BAAS,CAACN,EAAV,CAAayB,QAAb,CAAsB8B,QAAtB,EAAgC,UAAUU,GAAV,EAAexuB,IAAf,EAAqB;AACjD,0BAAIwuB,GAAJ,EAAS;AACLjvB,gCAAQ,CAACqE,SAAD,EAAY4qB,GAAZ,CAAR;AACH,uBAFD,MAEO;AACHX,4BAAI,CAACN,OAAL,CAAa3B,OAAO,GAAGwB,CAAvB,EAA0BptB,IAA1B,EAAgC,EAAhC,EAAoCguB,KAApC;AACA/iB,4BAAI;AACP;AACJ,qBAPD;AAQH,mBATD,MASO;AACH4iB,wBAAI,CAACN,OAAL,CAAa3B,OAAO,GAAGwB,CAAV,GAAc,GAA3B,EAAgChsB,MAAM,CAAC8sB,KAAP,CAAa,CAAb,CAAhC,EAAiD,EAAjD,EAAqDF,KAArD;AACA/iB,wBAAI;AACP;AACJ,iBAfD;AAgBH,eAjBD,MAiBO;AACHA,oBAAI;AACP;AACJ,aA3BD,MA2BO;AACH1L,sBAAQ,CAAC,IAAD,EAAOqE,SAAP,CAAR;AACH;AACJ,WAhCD;;AAkCAqH,cAAI;AACP;AACJ,OA7CD;AA8CH,KA7SE;;AA+SH;AACR;AACA;AACA;AACA;AACA;AACA;AACQwjB,yBAAqB,EAAE;AAAU;AAAWvB,aAArB;AAAgC;AAAawB,SAA7C,EAAoD;AACvE,aAAO,IAAIC,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACpC,+BAA4B1nB,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBsnB,KAAlB,CAA5B;AAAA,cAAQ3kB,MAAR,kBAAQA,MAAR;AAAA,cAAgB6hB,OAAhB,kBAAgBA,OAAhB;;AACA,aAAKuC,mBAAL,CACIjB,SADJ,EAEI,CAAC9iB,IAAD,EAAOC,GAAP,KAAe;AACX,cAAIA,GAAJ,EAASwkB,MAAM,CAACxkB,GAAD,CAAN;AACT,cAAID,IAAJ,EAAUwkB,OAAO,CAAC,IAAD,CAAP;AACb,SALL,EAMIhD,OANJ,EAOI7hB,MAPJ;AASH,OAXM,CAAP;AAYH,KAnUE;;AAqUH;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACQwjB,WAAO,EAAE;AAAU;AAAY9B,aAAtB;AAAiC;AAAYzpB,WAA7C;AAAsD;AAAY2qB,WAAlE;AAA2E;AAAYmC,QAAvF,EAA6F;AAClG,UAAIxL,KAAK,GAAGiI,QAAQ,CAACE,SAAD,CAApB;AACA,YAAMsD,MAAM,GAAGzL,KAAK,IAAI,IAAxB,CAFkG,CAIlG;;AACA,UAAI,CAACyL,MAAL,EAAa;AACTzL,aAAK,GAAG,IAAIuG,QAAJ,EAAR;AACAvG,aAAK,CAACmI,SAAN,GAAkBA,SAAlB;AACH;;AACDnI,WAAK,CAACqJ,OAAN,GAAgBA,OAAO,IAAI,EAA3B;AAEA,YAAMqC,MAAM,GAAG,aAAa,OAAOF,IAApB,IAA4BA,IAAI,YAAYjE,SAAS,CAACN,EAAV,CAAa0E,KAAxE,CAXkG,CAalG;;AACA,UAAID,MAAJ,EAAY;AACR1L,aAAK,CAACoI,MAAN,CAAa9lB,IAAb,GAAoBkpB,IAAI,CAACI,KAAzB;AACH,OAhBiG,CAkBlG;;;AACA,UAAIC,QAAQ,GAAG7L,KAAK,CAAC8L,WAAN,GAAoB,IAApB,GAA2B,CAA1C,CAnBkG,CAmBrD;AAE7C;;AACA,UAAI,CAACzF,KAAK,CAAC0F,KAAX,EAAkB;AACd;AACA,YAAIC,IAAI,GAAGhM,KAAK,CAAC8L,WAAN,GAAoB,MAApB,GAA6B,MAAxC;;AAEA,YAAIJ,MAAJ,EAAY;AACR;AACAM,cAAI,IAAI,QAAQR,IAAI,CAACS,IAArB;AACH,SAHD,MAGO,IAAI,aAAa,OAAOT,IAAxB,EAA8B;AACjC;AACAQ,cAAI,IAAI,QAAQR,IAAhB;AACH,SAHM,MAGA;AACH;AACAQ,cAAI,IAAIhM,KAAK,CAAC8L,WAAN,GAAoB,KAApB,GAA4B,KAApC,CAFG,CAEwC;AAC9C;;AAEDD,gBAAQ,GAAG,CAACA,QAAQ,GAAIG,IAAI,IAAI,EAArB,MAA8B,CAAzC,CAfc,CAe8B;AAC/C;;AAEDhM,WAAK,CAACwL,IAAN,GAAaK,QAAb;AAEA7L,WAAK,CAAC0J,OAAN,CAAchrB,OAAd;AACA,UAAI,CAAC+sB,MAAL,EAAa3D,IAAI,CAACoE,QAAL,CAAclM,KAAd;AAChB,KA3XE;;AA6XH;AACR;AACA;AACA;AACA;AACQmM,cAAU,EAAE,YAAY;AACpB,aAAOrE,IAAI,GAAGA,IAAI,CAACpjB,OAAR,GAAkB,EAA7B;AACH,KApYE;;AAsYH;AACR;AACA;AACA;AACA;AACA;AACQujB,YAAQ,EAAE;AAAU;AAAYlY,QAAtB,EAA4B;AAClC,aAAOkY,QAAQ,CAAClY,IAAD,CAAf;AACH,KA9YE;AAgZHqc,iBAAa,EAAE,YAAY;AACvB,aAAOtE,IAAI,CAACsE,aAAL,EAAP;AACH,KAlZE;AAoZHlnB,WAAO,EAAE,UAAUjJ,QAAV,EAAoB;AACzB,aAAO6rB,IAAI,CAAC5iB,OAAL,CAAajJ,QAAb,CAAP;AACH,KAtZE;;AAwZH;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACQowB,kBAAc,EAAE;AACZ;AAAYrM,SADA;AAEZ;AAAYsM,cAFA;AAGZ;AAAaC,qBAHD;AAIZ;AAAaC,aAJD;AAKZ;AAAaC,0BALD;AAMZ;AAAaC,eAND,EAOd;AACEF,eAAS,GAAG/F,QAAQ,CAAC+F,SAAD,EAAY,KAAZ,CAApB;AACAC,4BAAsB,GAAGhG,QAAQ,CAACgG,sBAAD,EAAyB,KAAzB,CAAjC;AACAF,uBAAiB,GAAG9F,QAAQ,CAAC8F,iBAAD,EAAoB,IAApB,CAA5B;AACAG,iBAAW,GAAG/F,OAAO,CAAC+F,WAAD,EAAc/F,OAAO,CAAC8F,sBAAD,EAAyBnsB,SAAzB,CAArB,CAArB;AAEA,UAAI4nB,IAAI,GAAGD,QAAQ,CAACjI,KAAD,CAAnB;;AACA,UAAI,CAACkI,IAAL,EAAW;AACP,cAAM,IAAI9pB,KAAJ,CAAUioB,KAAK,CAACuB,MAAN,CAAa+E,QAAvB,CAAN;AACH;;AAED,UAAIxE,SAAS,GAAGJ,SAAS,CAACG,IAAI,CAACC,SAAN,CAAzB;AAEA,UAAIyE,MAAM,GAAG5E,QAAQ,CAACsE,UAAD,EAAaI,WAAW,IAAI,CAACxE,IAAI,CAAC4D,WAArB,GAAmCY,WAAnC,GAAiDH,iBAAiB,GAAGpE,SAAH,GAAe7B,GAAG,CAACuG,QAAJ,CAAa1E,SAAb,CAA9F,CAArB;;AAEA,UAAID,IAAI,CAAC4D,WAAT,EAAsB;AAClB,YAAIgB,QAAQ,GAAGhF,IAAI,CAACiF,gBAAL,CAAsB7E,IAAtB,CAAf;;AACA4E,gBAAQ,CAAC5nB,OAAT,CAAiB,UAAU8nB,KAAV,EAAiB;AAC9B,cAAIA,KAAK,CAAClB,WAAV,EAAuB;AACvB,cAAIptB,OAAO,GAAGsuB,KAAK,CAACpE,OAAN,EAAd;;AACA,cAAI,CAAClqB,OAAL,EAAc;AACV,kBAAM,IAAIN,KAAJ,CAAUioB,KAAK,CAACuB,MAAN,CAAaqF,iBAAvB,CAAN;AACH;;AACD,cAAIld,IAAI,GAAGgY,SAAS,CAACiF,KAAK,CAAC7E,SAAP,CAApB;AACA,cAAI+E,SAAS,GAAGlF,QAAQ,CAACsE,UAAD,EAAaC,iBAAiB,GAAGxc,IAAH,GAAUuW,GAAG,CAACuG,QAAJ,CAAa9c,IAAb,CAAxC,CAAxB,CAP8B,CAQ9B;;AACA,gBAAMod,QAAQ,GAAGV,sBAAsB,GAAGO,KAAK,CAAC5E,MAAN,CAAa+E,QAAhB,GAA2B7sB,SAAlE;AACAinB,mBAAS,CAAC6F,WAAV,CAAsBF,SAAtB,EAAiCxuB,OAAjC,EAA0C8tB,SAA1C,EAAqDW,QAArD;AACH,SAXD;AAYA,eAAO,IAAP;AACH;;AAED,UAAIzuB,OAAO,GAAGwpB,IAAI,CAACU,OAAL,EAAd;AACA,UAAI,CAAClqB,OAAL,EAAc,MAAM,IAAIN,KAAJ,CAAUioB,KAAK,CAACuB,MAAN,CAAaqF,iBAAvB,CAAN;;AAEd,UAAI1F,SAAS,CAACN,EAAV,CAAaO,UAAb,CAAwBoF,MAAxB,KAAmC,CAACJ,SAAxC,EAAmD;AAC/C,cAAM,IAAIpuB,KAAJ,CAAUioB,KAAK,CAACuB,MAAN,CAAayF,aAAvB,CAAN;AACH,OArCH,CAsCE;;;AACA,YAAMF,QAAQ,GAAGV,sBAAsB,GAAGzM,KAAK,CAACoI,MAAN,CAAa+E,QAAhB,GAA2B7sB,SAAlE;AACAinB,eAAS,CAAC6F,WAAV,CAAsBR,MAAtB,EAA8BluB,OAA9B,EAAuC8tB,SAAvC,EAAkDW,QAAlD;AAEA,aAAO,IAAP;AACH,KA1dE;;AA4dH;AACR;AACA;AACA;AACQ9vB,QAAI,EAAE,UAAUsrB,IAAV,EAAgB;AAClB,UAAI,CAACb,IAAL,EAAW;AACP,eAAO,KAAP;AACH;;AAED,WAAK,IAAI9H,KAAT,IAAkB8H,IAAI,CAACpjB,OAAvB,EAAgC;AAC5B,YAAI;AACA,cAAIsb,KAAK,CAAC8L,WAAV,EAAuB;AACnB;AACH;;AACD,cAAIptB,OAAO,GAAGopB,IAAI,CAACpjB,OAAL,CAAasb,KAAb,EAAoB4I,OAApB,CAA4BD,IAA5B,CAAd;;AACA,cAAI,CAACjqB,OAAL,EAAc;AACV,mBAAO,KAAP;AACH;AACJ,SARD,CAQE,OAAOqI,GAAP,EAAY;AACV,iBAAO,KAAP;AACH;AACJ;;AACD,aAAO,IAAP;AACH,KAnfE;;AAqfH;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACQumB,gBAAY,EAAE;AAAU;AAAYhB,cAAtB;AAAkC;AAAaE,aAA/C;AAA0D;AAAaC,0BAAvE;AAA+F;AAAmB9D,QAAlH,EAAwH;AAClI6D,eAAS,GAAG/F,QAAQ,CAAC+F,SAAD,EAAY,KAAZ,CAApB;AACA7D,UAAI,GAAGhC,OAAO,CAAC8F,sBAAD,EAAyB9D,IAAzB,CAAd;AACA8D,4BAAsB,GAAGhG,QAAQ,CAACgG,sBAAD,EAAyB,KAAzB,CAAjC;;AACA,UAAI,CAAC3E,IAAL,EAAW;AACP,cAAM,IAAI1pB,KAAJ,CAAUioB,KAAK,CAACuB,MAAN,CAAa2F,MAAvB,CAAN;AACH;;AACDzF,UAAI,CAACpjB,OAAL,CAAaQ,OAAb,CAAqB,UAAU8a,KAAV,EAAiB;AAClC,YAAImI,SAAS,GAAGH,QAAQ,CAACsE,UAAD,EAAavE,SAAS,CAAC/H,KAAK,CAACmI,SAAN,CAAgBnqB,QAAhB,EAAD,CAAtB,CAAxB;;AACA,YAAIgiB,KAAK,CAAC8L,WAAV,EAAuB;AACnBvE,mBAAS,CAACiG,OAAV,CAAkBrF,SAAlB;AACA;AACH;;AACD,YAAIzpB,OAAO,GAAGshB,KAAK,CAAC4I,OAAN,CAAcD,IAAd,CAAd;;AACA,YAAI,CAACjqB,OAAL,EAAc;AACV,gBAAM,IAAIN,KAAJ,CAAUioB,KAAK,CAACuB,MAAN,CAAaqF,iBAAvB,CAAN;AACH,SATiC,CAUlC;;;AACA,cAAME,QAAQ,GAAGV,sBAAsB,GAAGzM,KAAK,CAACoI,MAAN,CAAa+E,QAAhB,GAA2B7sB,SAAlE;AACAinB,iBAAS,CAAC6F,WAAV,CAAsBjF,SAAtB,EAAiCzpB,OAAjC,EAA0C8tB,SAA1C,EAAqDW,QAArD;;AACA,YAAI;AACA5F,mBAAS,CAACN,EAAV,CAAawG,UAAb,CAAwBtF,SAAxB,EAAmCnI,KAAK,CAACoI,MAAN,CAAa9lB,IAAhD,EAAsD0d,KAAK,CAACoI,MAAN,CAAa9lB,IAAnE;AACH,SAFD,CAEE,OAAOyE,GAAP,EAAY;AACV,gBAAM,IAAI3I,KAAJ,CAAUioB,KAAK,CAACuB,MAAN,CAAaqF,iBAAvB,CAAN;AACH;AACJ,OAlBD;AAmBH,KAxhBE;;AA0hBH;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACQS,qBAAiB,EAAE;AAAU;AAAYpB,cAAtB;AAAkC;AAAaE,aAA/C;AAA0D;AAAaC,0BAAvE;AAA+F;AAAcxwB,YAA7G,EAAuH;AACtI,UAAI,CAACA,QAAL,EAAe;AACXA,gBAAQ,GAAG,YAAY,CAAE,CAAzB;AACH;;AACDuwB,eAAS,GAAG/F,QAAQ,CAAC+F,SAAD,EAAY,KAAZ,CAApB;AACA,UAAI,OAAOC,sBAAP,KAAkC,UAAlC,IAAgD,CAACxwB,QAArD,EAA+DA,QAAQ,GAAGwwB,sBAAX;AAC/DA,4BAAsB,GAAGhG,QAAQ,CAACgG,sBAAD,EAAyB,KAAzB,CAAjC;;AACA,UAAI,CAAC3E,IAAL,EAAW;AACP7rB,gBAAQ,CAAC,IAAImC,KAAJ,CAAUioB,KAAK,CAACuB,MAAN,CAAa2F,MAAvB,CAAD,CAAR;AACA;AACH;;AAEDjB,gBAAU,GAAGhG,GAAG,CAACgF,OAAJ,CAAYgB,UAAZ,CAAb,CAZsI,CAatI;;AACA,YAAMqB,OAAO,GAAI3N,KAAD,IAAWgI,QAAQ,CAACsE,UAAD,EAAahG,GAAG,CAACkC,SAAJ,CAAcT,SAAS,CAAC/H,KAAK,CAACmI,SAAN,CAAgBnqB,QAAhB,EAAD,CAAvB,CAAb,CAAnC;;AACA,YAAM4vB,QAAQ,GAAG,CAACC,GAAD,EAAMC,IAAN,KAAe,IAAI1vB,KAAJ,CAAUyvB,GAAG,GAAG,KAAN,GAAcC,IAAd,GAAqB,GAA/B,CAAhC,CAfsI,CAiBtI;;;AACA,YAAMC,UAAU,GAAG,EAAnB;AACA,YAAMC,WAAW,GAAG,IAAI9N,GAAJ,EAApB;;AACA4H,UAAI,CAACpjB,OAAL,CAAaQ,OAAb,CAAsBlF,CAAD,IAAO;AACxB,YAAIA,CAAC,CAAC8rB,WAAN,EAAmB;AACfiC,oBAAU,CAAC1sB,IAAX,CAAgBrB,CAAhB;AACH,SAFD,MAEO;AACHguB,qBAAW,CAAC9jB,GAAZ,CAAgBlK,CAAhB;AACH;AACJ,OAND,EApBsI,CA4BtI;AACA;;;AACA,WAAK,MAAMggB,KAAX,IAAoB+N,UAApB,EAAgC;AAC5B,cAAME,OAAO,GAAGN,OAAO,CAAC3N,KAAD,CAAvB,CAD4B,CAE5B;;AACA,cAAMkO,OAAO,GAAGzB,sBAAsB,GAAGzM,KAAK,CAACoI,MAAN,CAAa+E,QAAhB,GAA2B7sB,SAAjE;;AACA,YAAI;AACAinB,mBAAS,CAACiG,OAAV,CAAkBS,OAAlB;AACA,cAAIC,OAAJ,EAAa3G,SAAS,CAACN,EAAV,CAAakH,SAAb,CAAuBF,OAAvB,EAAgCC,OAAhC,EAFb,CAGA;;AACA3G,mBAAS,CAACN,EAAV,CAAawG,UAAb,CAAwBQ,OAAxB,EAAiCjO,KAAK,CAACoI,MAAN,CAAa9lB,IAA9C,EAAoD0d,KAAK,CAACoI,MAAN,CAAa9lB,IAAjE;AACH,SALD,CAKE,OAAO8rB,EAAP,EAAW;AACTnyB,kBAAQ,CAAC2xB,QAAQ,CAAC,yBAAD,EAA4BK,OAA5B,CAAT,CAAR;AACH;AACJ,OA1CqI,CA4CtI;;;AACA,YAAMnnB,IAAI,GAAG,MAAM;AACf,YAAIknB,WAAW,CAAC/sB,IAAZ,KAAqB,CAAzB,EAA4B;AACxBhF,kBAAQ;AACX;AACJ,OAJD,CA7CsI,CAmDtI;;;AACA,WAAK,MAAM+jB,KAAX,IAAoBgO,WAAW,CAAChU,MAAZ,EAApB,EAA0C;AACtC,cAAMmO,SAAS,GAAG7B,GAAG,CAACkC,SAAJ,CAAcT,SAAS,CAAC/H,KAAK,CAACmI,SAAN,CAAgBnqB,QAAhB,EAAD,CAAvB,CAAlB;AACA,cAAMqwB,QAAQ,GAAGrG,QAAQ,CAACsE,UAAD,EAAanE,SAAb,CAAzB;AACAnI,aAAK,CAAC8I,YAAN,CAAmB,UAAUpqB,OAAV,EAAmB4vB,KAAnB,EAA0B;AACzC,cAAIA,KAAJ,EAAW;AACPryB,oBAAQ,CAAC,IAAImC,KAAJ,CAAUkwB,KAAV,CAAD,CAAR;AACA;AACH;;AACD,cAAI,CAAC5vB,OAAL,EAAc;AACVzC,oBAAQ,CAAC,IAAImC,KAAJ,CAAUioB,KAAK,CAACuB,MAAN,CAAaqF,iBAAvB,CAAD,CAAR;AACH,WAFD,MAEO;AACH;AACA,kBAAME,QAAQ,GAAGV,sBAAsB,GAAGzM,KAAK,CAACoI,MAAN,CAAa+E,QAAhB,GAA2B7sB,SAAlE;AACAinB,qBAAS,CAACgH,gBAAV,CAA2BF,QAA3B,EAAqC3vB,OAArC,EAA8C8tB,SAA9C,EAAyDW,QAAzD,EAAmE,UAAUqB,IAAV,EAAgB;AAC/E,kBAAI,CAACA,IAAL,EAAW;AACPvyB,wBAAQ,CAAC2xB,QAAQ,CAAC,sBAAD,EAAyBS,QAAzB,CAAT,CAAR;AACA;AACH;;AACD9G,uBAAS,CAACN,EAAV,CAAawH,MAAb,CAAoBJ,QAApB,EAA8BrO,KAAK,CAACoI,MAAN,CAAa9lB,IAA3C,EAAiD0d,KAAK,CAACoI,MAAN,CAAa9lB,IAA9D,EAAoE,UAAUosB,KAAV,EAAiB;AACjF,oBAAIA,KAAJ,EAAW;AACPzyB,0BAAQ,CAAC2xB,QAAQ,CAAC,qBAAD,EAAwBS,QAAxB,CAAT,CAAR;AACA;AACH;;AACDL,2BAAW,CAACW,MAAZ,CAAmB3O,KAAnB,EALiF,CAMjF;;AACAlZ,oBAAI;AACP,eARD;AASH,aAdD;AAeH;AACJ,SA1BD;AA2BH,OAlFqI,CAmFtI;;;AACAA,UAAI;AACP,KAznBE;;AA2nBH;AACR;AACA;AACA;AACA;AACA;AACQ8nB,YAAQ,EAAE;AAAU;AAAYC,kBAAtB;AAAsC;AAAc5yB,YAApD,EAA8D;AACpE,UAAIsZ,SAAS,CAAChW,MAAV,KAAqB,CAAzB,EAA4B;AACxB,YAAI,OAAOsvB,cAAP,KAA0B,UAA9B,EAA0C;AACtC5yB,kBAAQ,GAAG4yB,cAAX;AACAA,wBAAc,GAAG,EAAjB;AACH;AACJ;;AAED,UAAI,CAACA,cAAD,IAAmB/M,IAAI,CAAC4F,QAA5B,EAAsC;AAClCmH,sBAAc,GAAG/M,IAAI,CAAC4F,QAAtB;AACH;;AACD,UAAI,CAACmH,cAAL,EAAqB;;AAErB,UAAIC,OAAO,GAAGhH,IAAI,CAACiH,gBAAL,EAAd;;AACA,UAAID,OAAJ,EAAa;AACT,YAAIE,EAAE,GAAGzH,SAAS,CAAC6F,WAAV,CAAsByB,cAAtB,EAAsCC,OAAtC,EAA+C,IAA/C,CAAT;AACA,YAAI,OAAO7yB,QAAP,KAAoB,UAAxB,EAAoCA,QAAQ,CAAC,CAAC+yB,EAAD,GAAM,IAAI5wB,KAAJ,CAAU,QAAV,CAAN,GAA4B,IAA7B,EAAmC,EAAnC,CAAR;AACvC;AACJ,KAnpBE;AAqpBH6wB,mBAAe,EAAE;AAAU;AAAYJ,kBAAtB;AAAsC;AAAazD,SAAnD,EAA0D;AACvE,8BAA4BvnB,MAAM,CAACC,MAAP,CAAc;AAAE0oB,iBAAS,EAAE;AAAb,OAAd,EAAmCpB,KAAnC,CAA5B;AAAA,YAAQoB,SAAR,mBAAQA,SAAR;AAAA,YAAmB0C,IAAnB,mBAAmBA,IAAnB;;AAEA,aAAO,IAAI7D,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACpC;AACA,YAAI,CAACsD,cAAD,IAAmB/M,IAAI,CAAC4F,QAA5B,EAAsCmH,cAAc,GAAG/M,IAAI,CAAC4F,QAAtB;AACtC,YAAI,CAACmH,cAAL,EAAqBtD,MAAM,CAAC,gCAAD,CAAN;AAErB,aAAK4D,eAAL,GAAuBtvB,IAAvB,CAA6BivB,OAAD,IAAa;AACrC,gBAAMM,GAAG,GAAItoB,IAAD,IAAWA,IAAI,GAAGwkB,OAAO,CAACxkB,IAAD,CAAV,GAAmBykB,MAAM,CAAC,wCAAD,CAApD;;AACAhE,mBAAS,CAACgH,gBAAV,CAA2BM,cAA3B,EAA2CC,OAA3C,EAAoDtC,SAApD,EAA+D0C,IAA/D,EAAqEE,GAArE;AACH,SAHD,EAGG7D,MAHH;AAIH,OATM,CAAP;AAUH,KAlqBE;AAoqBH4D,mBAAe,EAAE,YAAY;AACzB,aAAO,IAAI9D,OAAJ,CAAY,CAACC,OAAD,EAAUC,MAAV,KAAqB;AACpCzD,YAAI,CAACuH,aAAL,CAAmB/D,OAAnB,EAA4BC,MAA5B;AACH,OAFM,CAAP;AAGH,KAxqBE;;AA0qBH;AACR;AACA;AACA;AACA;AACQ+D,YAAQ,EAAE;AAAU;AAAeC,aAAzB;AAAoC;AAAeC,UAAnD;AAA2D;AAAeC,eAA1E;AAAuF;AAAeC,aAAtG,EAAiH;AACvH,WAAKzgB,OAAL,GAAe,CAAf;;AACA,UAAI,OAAOsgB,SAAP,KAAqB,UAAzB,EAAqC;AACjCzH,YAAI,CAACuH,aAAL,CAAmBE,SAAnB,EAA8BC,MAA9B,EAAsCC,WAAtC,EAAmDC,SAAnD;;AACA,eAAO,IAAP;AACH;;AACD,aAAO5H,IAAI,CAACiH,gBAAL,EAAP;AACH;AAtrBE,GAAP;AAwrBH,CA3vBD,C;;;;;;;;;;;ACnBA,IAAI1I,KAAK,GAAGjrB,mBAAO,CAAC,qDAAD,CAAnB;AAAA,IACI2rB,SAAS,GAAGV,KAAK,CAACU,SADtB;AAGA;;;AACA9iB,MAAM,CAACjH,OAAP,GAAiB,YAAY;AACzB,MAAI2yB,QAAQ,GAAG,EAAf;AAAA,MAAmB;AACfC,UAAQ,GAAG,EADf;AAAA,MACmB;AACfC,QAAM,GAAG,CAFb;AAAA,MAGIC,OAAO,GAAG,CAHd;AAAA,MAIIC,KAAK,GAAG,CAJZ;AAAA,MAKIC,IAAI,GAAG,CALX;AAAA,MAMIC,eAAe,GAAG,CANtB;AAAA,MAOIC,KAAK,GAAG,CAPZ;AAAA,MAQIC,SAAS,GAAG,CARhB;AAAA,MASIC,SAAS,GAAG,CAThB;AAAA,MAUIC,OAAO,GAAG,CAVd;AAAA,MAWIC,UAAU,GAAG,CAXjB;AAAA,MAYIC,OAAO,GAAG,CAZd;AAAA,MAaIxG,KAAK,GAAG,CAbZ;AAAA,MAcIyG,OAAO,GAAG,CAdd;AAgBAb,UAAQ,IAAItJ,KAAK,CAAC0F,KAAN,GAAc,MAAd,GAAuB,MAAnC,CAjByB,CAmBzB;AACA;;AACA8D,QAAM,IAAI9I,SAAS,CAAC0J,OAApB;AAEA,MAAIC,WAAW,GAAG,EAAlB;;AAEA,WAASC,OAAT,CAAiBhsB,GAAjB,EAAsB;AAClBA,OAAG,GAAG,IAAI9B,IAAJ,CAAS8B,GAAT,CAAN;AACAorB,SAAK,GACA,CAAEprB,GAAG,CAAC8d,WAAJ,KAAoB,IAArB,GAA6B,IAA9B,KAAuC,EAAxC,GAA8C;AAC5C9d,OAAG,CAAC+d,QAAJ,KAAiB,CAAlB,IAAwB,EADzB,GAC+B;AAC9B/d,OAAG,CAACge,OAAJ,MAAiB,EAFlB,GAEwB;AACxB;AACChe,OAAG,CAACie,QAAJ,MAAkB,EAJnB,GAIyB;AACxBje,OAAG,CAACke,UAAJ,MAAoB,CALrB,GAK0B;AACzBle,OAAG,CAACme,UAAJ,MAAoB,CAPzB,CAFkB,CASW;AAChC;;AAED6N,SAAO,CAAC,CAAC,IAAI9tB,IAAJ,EAAF,CAAP;AAEA,SAAO;AACH,QAAI+tB,IAAJ,GAAW;AACP,aAAOjB,QAAP;AACH,KAHE;;AAIH,QAAIiB,IAAJ,CAASjsB,GAAT,EAAc;AACVgrB,cAAQ,GAAGhrB,GAAX;AACH,KANE;;AAQH,QAAIue,OAAJ,GAAc;AACV,aAAO0M,QAAP;AACH,KAVE;;AAWH,QAAI1M,OAAJ,CAAYve,GAAZ,EAAiB;AACbirB,cAAQ,GAAGjrB,GAAX;AACH,KAbE;;AAeH,QAAIksB,KAAJ,GAAY;AACR,aAAOhB,MAAP;AACH,KAjBE;;AAkBH,QAAIgB,KAAJ,CAAUlsB,GAAV,EAAe;AACXkrB,YAAM,GAAGlrB,GAAT;AACH,KApBE;;AAsBH,QAAI9F,MAAJ,GAAa;AACT,aAAOixB,OAAP;AACH,KAxBE;;AAyBH,QAAIjxB,MAAJ,CAAW8F,GAAX,EAAgB;AACZ,cAAQA,GAAR;AACI,aAAKoiB,SAAS,CAAC+J,MAAf;AACI,eAAK5N,OAAL,GAAe,EAAf;;AACJ,aAAK6D,SAAS,CAACgK,QAAf;AACA;AACI,eAAK7N,OAAL,GAAe,EAAf;AALR;;AAOA4M,aAAO,GAAGnrB,GAAV;AACH,KAlCE;;AAoCH,QAAIrC,IAAJ,GAAW;AACP,aAAO,IAAIO,IAAJ,CAAS,CAAEktB,KAAK,IAAI,EAAV,GAAgB,IAAjB,IAAyB,IAAlC,EAAwC,CAAEA,KAAK,IAAI,EAAV,GAAgB,IAAjB,IAAyB,CAAjE,EAAqEA,KAAK,IAAI,EAAV,GAAgB,IAApF,EAA2FA,KAAK,IAAI,EAAV,GAAgB,IAA1G,EAAiHA,KAAK,IAAI,CAAV,GAAe,IAA/H,EAAqI,CAACA,KAAK,GAAG,IAAT,KAAkB,CAAvJ,CAAP;AACH,KAtCE;;AAuCH,QAAIztB,IAAJ,CAASqC,GAAT,EAAc;AACVgsB,aAAO,CAAChsB,GAAD,CAAP;AACH,KAzCE;;AA2CH,QAAIqsB,GAAJ,GAAU;AACN,aAAOhB,IAAP;AACH,KA7CE;;AA8CH,QAAIgB,GAAJ,CAAQrsB,GAAR,EAAa;AACTqrB,UAAI,GAAGtuB,IAAI,CAACuvB,GAAL,CAAS,CAAT,EAAYtsB,GAAZ,MAAqB,CAA5B;AACH,KAhDE;;AAkDH,QAAIusB,cAAJ,GAAqB;AACjB,aAAOjB,eAAP;AACH,KApDE;;AAqDH,QAAIiB,cAAJ,CAAmBvsB,GAAnB,EAAwB;AACpBsrB,qBAAe,GAAGvuB,IAAI,CAACuvB,GAAL,CAAS,CAAT,EAAYtsB,GAAZ,MAAqB,CAAvC;AACH,KAvDE;;AAyDH,QAAI1D,IAAJ,GAAW;AACP,aAAOivB,KAAP;AACH,KA3DE;;AA4DH,QAAIjvB,IAAJ,CAAS0D,GAAT,EAAc;AACVurB,WAAK,GAAGxuB,IAAI,CAACuvB,GAAL,CAAS,CAAT,EAAYtsB,GAAZ,MAAqB,CAA7B;AACH,KA9DE;;AAgEH,QAAIwsB,cAAJ,GAAqB;AACjB,aAAOhB,SAAP;AACH,KAlEE;;AAmEH,QAAIgB,cAAJ,CAAmBxsB,GAAnB,EAAwB;AACpBwrB,eAAS,GAAGxrB,GAAZ;AACH,KArEE;;AAuEH,QAAIysB,WAAJ,GAAkB;AACd,aAAOhB,SAAP;AACH,KAzEE;;AA0EH,QAAIgB,WAAJ,CAAgBzsB,GAAhB,EAAqB;AACjByrB,eAAS,GAAGzrB,GAAZ;AACH,KA5EE;;AA8EH,QAAI0sB,aAAJ,GAAoB;AAChB,aAAOhB,OAAP;AACH,KAhFE;;AAiFH,QAAIgB,aAAJ,CAAkB1sB,GAAlB,EAAuB;AACnB0rB,aAAO,GAAG1rB,GAAV;AACH,KAnFE;;AAqFH,QAAI2sB,YAAJ,GAAmB;AACf,aAAOhB,UAAP;AACH,KAvFE;;AAwFH,QAAIgB,YAAJ,CAAiB3sB,GAAjB,EAAsB;AAClB2rB,gBAAU,GAAG5uB,IAAI,CAACuvB,GAAL,CAAS,CAAT,EAAYtsB,GAAZ,MAAqB,CAAlC;AACH,KA1FE;;AA4FH,QAAI4sB,MAAJ,GAAa;AACT,aAAOhB,OAAP;AACH,KA9FE;;AA+FH,QAAIgB,MAAJ,CAAW5sB,GAAX,EAAgB;AACZ4rB,aAAO,GAAG7uB,IAAI,CAACuvB,GAAL,CAAS,CAAT,EAAYtsB,GAAZ,MAAqB,CAA/B;AACH,KAjGE;;AAmGH,QAAI6mB,IAAJ,GAAW;AACP,aAAOzB,KAAP;AACH,KArGE;;AAsGH,QAAIyB,IAAJ,CAAS7mB,GAAT,EAAc;AACVolB,WAAK,GAAGroB,IAAI,CAACuvB,GAAL,CAAS,CAAT,EAAYtsB,GAAZ,MAAqB,CAA7B;AACH,KAxGE;;AA0GH;AACA,QAAIwoB,QAAJ,GAAe;AACX,aAAOpD,KAAK,GAAI,CAAEA,KAAK,KAAK,CAAX,GAAgB,CAAjB,KAAuB,EAAxB,GAA8B,KAAjC,GAAyC,CAArD;AACH,KA7GE;;AA+GH,QAAIyH,MAAJ,GAAa;AACT,aAAOhB,OAAP;AACH,KAjHE;;AAkHH,QAAIgB,MAAJ,CAAW7sB,GAAX,EAAgB;AACZ6rB,aAAO,GAAG9uB,IAAI,CAACuvB,GAAL,CAAS,CAAT,EAAYtsB,GAAZ,MAAqB,CAA/B;AACH,KApHE;;AAsHH,QAAI8sB,SAAJ,GAAgB;AACZ,aAAO,CAAC5B,MAAM,GAAG,CAAV,MAAiB,CAAxB;AACH,KAxHE;;AA0HH,QAAI6B,eAAJ,GAAsB;AAClB,aAAO3K,SAAS,CAAC4K,MAAV,GAAmBxB,SAAnB,GAA+BC,SAA/B,GAA2CC,OAAlD;AACH,KA5HE;;AA8HH,QAAIuB,cAAJ,GAAqB;AACjB,aAAOpB,OAAO,GAAGzJ,SAAS,CAAC8K,MAApB,GAA6BnB,WAAW,CAACoB,QAAzC,GAAoDpB,WAAW,CAACqB,QAAvE;AACH,KAhIE;;AAkIH,QAAIC,UAAJ,GAAiB;AACb,aAAOtB,WAAP;AACH,KApIE;;AAsIHuB,4BAAwB,EAAE;AAAU;AAAW7jB,SAArB,EAA4B;AAClD,UAAI1R,IAAI,GAAG0R,KAAK,CAAC9M,KAAN,CAAYkvB,OAAZ,EAAqBA,OAAO,GAAGzJ,SAAS,CAAC8K,MAAzC,CAAX,CADkD,CAElD;;AACA,UAAIn1B,IAAI,CAACw1B,YAAL,CAAkB,CAAlB,MAAyBnL,SAAS,CAACoL,MAAvC,EAA+C;AAC3C,cAAM,IAAI/zB,KAAJ,CAAUioB,KAAK,CAACuB,MAAN,CAAawK,WAAvB,CAAN;AACH;;AACD1B,iBAAW,GAAG;AACV;AACAxN,eAAO,EAAExmB,IAAI,CAAC21B,YAAL,CAAkBtL,SAAS,CAACuL,MAA5B,CAFC;AAGV;AACAzB,aAAK,EAAEn0B,IAAI,CAAC21B,YAAL,CAAkBtL,SAAS,CAACwL,MAA5B,CAJG;AAKV;AACA1zB,cAAM,EAAEnC,IAAI,CAAC21B,YAAL,CAAkBtL,SAAS,CAACyL,MAA5B,CANE;AAOV;AACAlwB,YAAI,EAAE5F,IAAI,CAACw1B,YAAL,CAAkBnL,SAAS,CAAC0L,MAA5B,CARI;AASV;AACAzB,WAAG,EAAEt0B,IAAI,CAACw1B,YAAL,CAAkBnL,SAAS,CAAC2L,MAA5B,CAVK;AAWV;AACAxB,sBAAc,EAAEx0B,IAAI,CAACw1B,YAAL,CAAkBnL,SAAS,CAAC4L,MAA5B,CAZN;AAaV;AACA1xB,YAAI,EAAEvE,IAAI,CAACw1B,YAAL,CAAkBnL,SAAS,CAAC6L,MAA5B,CAdI;AAeV;AACAd,gBAAQ,EAAEp1B,IAAI,CAAC21B,YAAL,CAAkBtL,SAAS,CAAC8L,MAA5B,CAhBA;AAiBV;AACAd,gBAAQ,EAAEr1B,IAAI,CAAC21B,YAAL,CAAkBtL,SAAS,CAAC+L,MAA5B;AAlBA,OAAd;AAoBH,KAhKE;AAkKHC,kBAAc,EAAE;AAAU;AAAWr2B,QAArB,EAA2B;AACvC;AACA,UAAIA,IAAI,CAAC6C,MAAL,KAAgBwnB,SAAS,CAAC4K,MAA1B,IAAoCj1B,IAAI,CAACw1B,YAAL,CAAkB,CAAlB,MAAyBnL,SAAS,CAACiM,MAA3E,EAAmF;AAC/E,cAAM,IAAI50B,KAAJ,CAAUioB,KAAK,CAACuB,MAAN,CAAaqL,WAAvB,CAAN;AACH,OAJsC,CAKvC;;;AACAtD,cAAQ,GAAGjzB,IAAI,CAAC21B,YAAL,CAAkBtL,SAAS,CAACmM,MAA5B,CAAX,CANuC,CAOvC;;AACAtD,cAAQ,GAAGlzB,IAAI,CAAC21B,YAAL,CAAkBtL,SAAS,CAACoM,MAA5B,CAAX,CARuC,CASvC;;AACAtD,YAAM,GAAGnzB,IAAI,CAAC21B,YAAL,CAAkBtL,SAAS,CAACqM,MAA5B,CAAT,CAVuC,CAWvC;;AACAtD,aAAO,GAAGpzB,IAAI,CAAC21B,YAAL,CAAkBtL,SAAS,CAACsM,MAA5B,CAAV,CAZuC,CAavC;;AACAtD,WAAK,GAAGrzB,IAAI,CAACw1B,YAAL,CAAkBnL,SAAS,CAACuM,MAA5B,CAAR,CAduC,CAevC;;AACAtD,UAAI,GAAGtzB,IAAI,CAACw1B,YAAL,CAAkBnL,SAAS,CAACwM,MAA5B,CAAP,CAhBuC,CAiBvC;;AACAtD,qBAAe,GAAGvzB,IAAI,CAACw1B,YAAL,CAAkBnL,SAAS,CAACyM,MAA5B,CAAlB,CAlBuC,CAmBvC;;AACAtD,WAAK,GAAGxzB,IAAI,CAACw1B,YAAL,CAAkBnL,SAAS,CAAC0M,MAA5B,CAAR,CApBuC,CAqBvC;;AACAtD,eAAS,GAAGzzB,IAAI,CAAC21B,YAAL,CAAkBtL,SAAS,CAAC2M,MAA5B,CAAZ,CAtBuC,CAuBvC;;AACAtD,eAAS,GAAG1zB,IAAI,CAAC21B,YAAL,CAAkBtL,SAAS,CAAC4M,MAA5B,CAAZ,CAxBuC,CAyBvC;;AACAtD,aAAO,GAAG3zB,IAAI,CAAC21B,YAAL,CAAkBtL,SAAS,CAAC6M,MAA5B,CAAV,CA1BuC,CA2BvC;;AACAtD,gBAAU,GAAG5zB,IAAI,CAAC21B,YAAL,CAAkBtL,SAAS,CAAC8M,MAA5B,CAAb,CA5BuC,CA6BvC;;AACAtD,aAAO,GAAG7zB,IAAI,CAAC21B,YAAL,CAAkBtL,SAAS,CAAC+M,MAA5B,CAAV,CA9BuC,CA+BvC;;AACA/J,WAAK,GAAGrtB,IAAI,CAACw1B,YAAL,CAAkBnL,SAAS,CAACgN,MAA5B,CAAR,CAhCuC,CAiCvC;;AACAvD,aAAO,GAAG9zB,IAAI,CAACw1B,YAAL,CAAkBnL,SAAS,CAACiN,MAA5B,CAAV;AACH,KArME;AAuMHC,sBAAkB,EAAE,YAAY;AAC5B;AACA,UAAIv3B,IAAI,GAAGoB,MAAM,CAAC8sB,KAAP,CAAa7D,SAAS,CAAC8K,MAAvB,CAAX,CAF4B,CAG5B;;AACAn1B,UAAI,CAACw3B,aAAL,CAAmBnN,SAAS,CAACoL,MAA7B,EAAqC,CAArC,EAJ4B,CAK5B;;AACAz1B,UAAI,CAACy3B,aAAL,CAAmBvE,QAAnB,EAA6B7I,SAAS,CAACuL,MAAvC,EAN4B,CAO5B;;AACA51B,UAAI,CAACy3B,aAAL,CAAmBtE,MAAnB,EAA2B9I,SAAS,CAACwL,MAArC,EAR4B,CAS5B;;AACA71B,UAAI,CAACy3B,aAAL,CAAmBrE,OAAnB,EAA4B/I,SAAS,CAACyL,MAAtC,EAV4B,CAW5B;;AACA91B,UAAI,CAACw3B,aAAL,CAAmBnE,KAAnB,EAA0BhJ,SAAS,CAAC0L,MAApC,EAZ4B,CAa5B;;AACA/1B,UAAI,CAACw3B,aAAL,CAAmBlE,IAAnB,EAAyBjJ,SAAS,CAAC2L,MAAnC,EAd4B,CAe5B;;AACAh2B,UAAI,CAACw3B,aAAL,CAAmBjE,eAAnB,EAAoClJ,SAAS,CAAC4L,MAA9C,EAhB4B,CAiB5B;;AACAj2B,UAAI,CAACw3B,aAAL,CAAmBhE,KAAnB,EAA0BnJ,SAAS,CAAC6L,MAApC,EAlB4B,CAmB5B;;AACAl2B,UAAI,CAACy3B,aAAL,CAAmBhE,SAAnB,EAA8BpJ,SAAS,CAAC8L,MAAxC,EApB4B,CAqB5B;;AACAn2B,UAAI,CAACy3B,aAAL,CAAmB/D,SAAnB,EAA8BrJ,SAAS,CAAC+L,MAAxC;AACA,aAAOp2B,IAAP;AACH,KA/NE;AAiOH03B,uBAAmB,EAAE,YAAY;AAC7B;AACA,UAAI13B,IAAI,GAAGoB,MAAM,CAAC8sB,KAAP,CAAa7D,SAAS,CAAC4K,MAAV,GAAmBxB,SAAnB,GAA+BC,SAA/B,GAA2CC,OAAxD,CAAX,CAF6B,CAG7B;;AACA3zB,UAAI,CAACw3B,aAAL,CAAmBnN,SAAS,CAACiM,MAA7B,EAAqC,CAArC,EAJ6B,CAK7B;;AACAt2B,UAAI,CAACy3B,aAAL,CAAmBxE,QAAnB,EAA6B5I,SAAS,CAACmM,MAAvC,EAN6B,CAO7B;;AACAx2B,UAAI,CAACy3B,aAAL,CAAmBvE,QAAnB,EAA6B7I,SAAS,CAACoM,MAAvC,EAR6B,CAS7B;;AACAz2B,UAAI,CAACy3B,aAAL,CAAmBtE,MAAnB,EAA2B9I,SAAS,CAACqM,MAArC,EAV6B,CAW7B;;AACA12B,UAAI,CAACy3B,aAAL,CAAmBrE,OAAnB,EAA4B/I,SAAS,CAACsM,MAAtC,EAZ6B,CAa7B;;AACA32B,UAAI,CAACw3B,aAAL,CAAmBnE,KAAnB,EAA0BhJ,SAAS,CAACuM,MAApC,EAd6B,CAe7B;;AACA52B,UAAI,CAACw3B,aAAL,CAAmBlE,IAAnB,EAAyBjJ,SAAS,CAACwM,MAAnC,EAhB6B,CAiB7B;;AACA72B,UAAI,CAACw3B,aAAL,CAAmBjE,eAAnB,EAAoClJ,SAAS,CAACyM,MAA9C,EAlB6B,CAmB7B;;AACA92B,UAAI,CAACw3B,aAAL,CAAmBhE,KAAnB,EAA0BnJ,SAAS,CAAC0M,MAApC,EApB6B,CAqB7B;;AACA/2B,UAAI,CAACy3B,aAAL,CAAmBhE,SAAnB,EAA8BpJ,SAAS,CAAC2M,MAAxC,EAtB6B,CAuB7B;;AACAh3B,UAAI,CAACy3B,aAAL,CAAmB/D,SAAnB,EAA8BrJ,SAAS,CAAC4M,MAAxC,EAxB6B,CAyB7B;;AACAj3B,UAAI,CAACy3B,aAAL,CAAmB9D,OAAnB,EAA4BtJ,SAAS,CAAC6M,MAAtC,EA1B6B,CA2B7B;;AACAl3B,UAAI,CAACy3B,aAAL,CAAmB7D,UAAnB,EAA+BvJ,SAAS,CAAC8M,MAAzC,EA5B6B,CA6B7B;;AACAn3B,UAAI,CAACy3B,aAAL,CAAmB5D,OAAnB,EAA4BxJ,SAAS,CAAC+M,MAAtC,EA9B6B,CA+B7B;;AACAp3B,UAAI,CAACw3B,aAAL,CAAmBnK,KAAnB,EAA0BhD,SAAS,CAACgN,MAApC,EAhC6B,CAiC7B;;AACAr3B,UAAI,CAACw3B,aAAL,CAAmB1D,OAAnB,EAA4BzJ,SAAS,CAACiN,MAAtC,EAlC6B,CAmC7B;;AACAt3B,UAAI,CAAC23B,IAAL,CAAU,IAAV,EAAgBtN,SAAS,CAAC4K,MAA1B;AACA,aAAOj1B,IAAP;AACH,KAvQE;AAyQH2S,UAAM,EAAE,YAAY;AAChB,YAAMilB,KAAK,GAAG,UAAUC,EAAV,EAAc;AACxB,eAAOA,EAAE,GAAG,QAAZ;AACH,OAFD;;AAIA,aAAO;AACH3D,YAAI,EAAEjB,QADH;AAEHzM,eAAO,EAAE0M,QAFN;AAGHiB,aAAK,EAAEhB,MAHJ;AAIHhxB,cAAM,EAAEwnB,KAAK,CAACmO,cAAN,CAAqB1E,OAArB,CAJL;AAKHxtB,YAAI,EAAE,KAAKA,IALR;AAMH0uB,WAAG,EAAE,OAAOhB,IAAI,CAAChyB,QAAL,CAAc,EAAd,EAAkBc,WAAlB,EANT;AAOHoyB,sBAAc,EAAEoD,KAAK,CAACrE,eAAD,CAPlB;AAQHhvB,YAAI,EAAEqzB,KAAK,CAACpE,KAAD,CARR;AASHiB,sBAAc,EAAEmD,KAAK,CAACnE,SAAD,CATlB;AAUHiB,mBAAW,EAAEkD,KAAK,CAAClE,SAAD,CAVf;AAWHiB,qBAAa,EAAEiD,KAAK,CAACjE,OAAD,CAXjB;AAYHiB,oBAAY,EAAEhB,UAZX;AAaHiB,cAAM,EAAEhB,OAbL;AAcH/E,YAAI,EAAEzB,KAdH;AAeHyH,cAAM,EAAEhB,OAfL;AAgBHkB,uBAAe,EAAE4C,KAAK,CAACvN,SAAS,CAAC4K,MAAV,GAAmBxB,SAAnB,GAA+BC,SAA/B,GAA2CC,OAA5C;AAhBnB,OAAP;AAkBH,KAhSE;AAkSHryB,YAAQ,EAAE,YAAY;AAClB,aAAOW,IAAI,CAACC,SAAL,CAAe,KAAKyQ,MAAL,EAAf,EAA8B,IAA9B,EAAoC,IAApC,CAAP;AACH;AApSE,GAAP;AAsSH,CA7UD,C;;;;;;;;;;;ACJArS,OAAO,CAACy3B,WAAR,GAAsBr5B,mBAAO,CAAC,oEAAD,CAA7B;AACA4B,OAAO,CAAC03B,UAAR,GAAqBt5B,mBAAO,CAAC,kEAAD,CAA5B,C;;;;;;;;;;;ACDA,IAAIirB,KAAK,GAAGjrB,mBAAO,CAAC,qDAAD,CAAnB;AAAA,IACI2rB,SAAS,GAAGV,KAAK,CAACU,SADtB;AAGA;;;AACA9iB,MAAM,CAACjH,OAAP,GAAiB,YAAY;AACzB,MAAI23B,cAAc,GAAG,CAArB;AAAA,MACIC,aAAa,GAAG,CADpB;AAAA,MAEI1E,KAAK,GAAG,CAFZ;AAAA,MAGIM,OAAO,GAAG,CAHd;AAAA,MAIIqE,cAAc,GAAG,CAJrB;AAMA,SAAO;AACH,QAAIC,WAAJ,GAAkB;AACd,aAAOH,cAAP;AACH,KAHE;;AAIH,QAAIG,WAAJ;AAAgB;AAAWnwB,OAA3B,EAAgC;AAC5BgwB,oBAAc,GAAGC,aAAa,GAAGjwB,GAAjC;AACH,KANE;;AAQH,QAAIowB,YAAJ,GAAmB;AACf,aAAOH,aAAP;AACH,KAVE;;AAWH,QAAIG,YAAJ;AAAiB;AAAWpwB,OAA5B,EAAiC;AAC7BiwB,mBAAa,GAAGD,cAAc,GAAGhwB,GAAjC;AACH,KAbE;;AAeH,QAAI1D,IAAJ,GAAW;AACP,aAAOivB,KAAP;AACH,KAjBE;;AAkBH,QAAIjvB,IAAJ;AAAS;AAAW0D,OAApB,EAAyB;AACrBurB,WAAK,GAAGvrB,GAAR;AACH,KApBE;;AAsBH,QAAI6sB,MAAJ,GAAa;AACT,aAAOhB,OAAP;AACH,KAxBE;;AAyBH,QAAIgB,MAAJ;AAAW;AAAW7sB,OAAtB,EAA2B;AACvB6rB,aAAO,GAAG7rB,GAAV;AACH,KA3BE;;AA6BH,QAAI0sB,aAAJ,GAAoB;AAChB,aAAOwD,cAAP;AACH,KA/BE;;AAgCH,QAAIxD,aAAJ;AAAkB;AAAW1sB,OAA7B,EAAkC;AAC9BkwB,oBAAc,GAAGlwB,GAAjB;AACH,KAlCE;;AAoCH,QAAIqwB,cAAJ,GAAqB;AACjB,aAAOjO,SAAS,CAACkO,MAAV,GAAmBJ,cAA1B;AACH,KAtCE;;AAwCH9B,kBAAc,EAAE;AAAU;AAAWr2B,QAArB,EAA2B;AACvC;AACA;AACA,UACI,CAACA,IAAI,CAAC6C,MAAL,KAAgBwnB,SAAS,CAACkO,MAA1B,IAAoCv4B,IAAI,CAACw1B,YAAL,CAAkB,CAAlB,MAAyBnL,SAAS,CAACmO,MAAxE,MACCx4B,IAAI,CAAC6C,MAAL,GAAcwnB,SAAS,CAACoO,QAAxB,IAAoCz4B,IAAI,CAACw1B,YAAL,CAAkB,CAAlB,MAAyBnL,SAAS,CAACqO,QADxE,CADJ,EAGE;AACE,cAAM,IAAIh3B,KAAJ,CAAUioB,KAAK,CAACuB,MAAN,CAAayN,WAAvB,CAAN;AACH;;AAED,UAAI34B,IAAI,CAACw1B,YAAL,CAAkB,CAAlB,MAAyBnL,SAAS,CAACmO,MAAvC,EAA+C;AAC3C;AACAP,sBAAc,GAAGj4B,IAAI,CAAC21B,YAAL,CAAkBtL,SAAS,CAACuO,MAA5B,CAAjB,CAF2C,CAG3C;;AACAV,qBAAa,GAAGl4B,IAAI,CAAC21B,YAAL,CAAkBtL,SAAS,CAACwO,MAA5B,CAAhB,CAJ2C,CAK3C;;AACArF,aAAK,GAAGxzB,IAAI,CAACw1B,YAAL,CAAkBnL,SAAS,CAACyO,MAA5B,CAAR,CAN2C,CAO3C;;AACAhF,eAAO,GAAG9zB,IAAI,CAACw1B,YAAL,CAAkBnL,SAAS,CAAC0O,MAA5B,CAAV,CAR2C,CAS3C;;AACAZ,sBAAc,GAAGn4B,IAAI,CAAC21B,YAAL,CAAkBtL,SAAS,CAAC2O,MAA5B,CAAjB;AACH,OAXD,MAWO;AACH;AACAf,sBAAc,GAAGtO,KAAK,CAACsP,eAAN,CAAsBj5B,IAAtB,EAA4BqqB,SAAS,CAAC6O,QAAtC,CAAjB,CAFG,CAGH;;AACAhB,qBAAa,GAAGvO,KAAK,CAACsP,eAAN,CAAsBj5B,IAAtB,EAA4BqqB,SAAS,CAAC8O,QAAtC,CAAhB,CAJG,CAKH;;AACA3F,aAAK,GAAG7J,KAAK,CAACsP,eAAN,CAAsBj5B,IAAtB,EAA4BqqB,SAAS,CAAC+O,QAAtC,CAAR,CANG,CAOH;;AACAtF,eAAO,GAAGnK,KAAK,CAACsP,eAAN,CAAsBj5B,IAAtB,EAA4BqqB,SAAS,CAACgP,QAAtC,CAAV;AAEAlB,sBAAc,GAAG,CAAjB;AACH;AACJ,KAzEE;AA2EHmB,YAAQ,EAAE,YAAY;AAClB,UAAItoB,CAAC,GAAG5P,MAAM,CAAC8sB,KAAP,CAAa7D,SAAS,CAACkO,MAAV,GAAmBJ,cAAhC,CAAR,CADkB,CAElB;;AACAnnB,OAAC,CAACwmB,aAAF,CAAgBnN,SAAS,CAACmO,MAA1B,EAAkC,CAAlC;AACAxnB,OAAC,CAACwmB,aAAF,CAAgB,CAAhB,EAAmB,CAAnB,EAJkB,CAKlB;;AACAxmB,OAAC,CAACymB,aAAF,CAAgBQ,cAAhB,EAAgC5N,SAAS,CAACuO,MAA1C,EANkB,CAOlB;;AACA5nB,OAAC,CAACymB,aAAF,CAAgBS,aAAhB,EAA+B7N,SAAS,CAACwO,MAAzC,EARkB,CASlB;;AACA7nB,OAAC,CAACwmB,aAAF,CAAgBhE,KAAhB,EAAuBnJ,SAAS,CAACyO,MAAjC,EAVkB,CAWlB;;AACA9nB,OAAC,CAACwmB,aAAF,CAAgB1D,OAAhB,EAAyBzJ,SAAS,CAAC0O,MAAnC,EAZkB,CAalB;;AACA/nB,OAAC,CAACymB,aAAF,CAAgBU,cAAhB,EAAgC9N,SAAS,CAAC2O,MAA1C,EAdkB,CAelB;;AACAhoB,OAAC,CAAC2mB,IAAF,CAAO,GAAP,EAAYtN,SAAS,CAACkO,MAAtB;AAEA,aAAOvnB,CAAP;AACH,KA9FE;AAgGH2B,UAAM,EAAE,YAAY;AAChB;AACA,YAAMmiB,MAAM,GAAG,UAAU+C,EAAV,EAAc0B,GAAd,EAAmB;AAC9B,YAAIC,IAAI,GAAG3B,EAAE,CAACv2B,QAAH,CAAY,EAAZ,EAAgBc,WAAhB,EAAX;;AACA,eAAOo3B,IAAI,CAAC32B,MAAL,GAAc02B,GAArB,EAA0BC,IAAI,GAAG,MAAMA,IAAb;;AAC1B,eAAO,OAAOA,IAAd;AACH,OAJD;;AAMA,aAAO;AACHpB,mBAAW,EAAEH,cADV;AAEHI,oBAAY,EAAEH,aAFX;AAGH3zB,YAAI,EAAEivB,KAAK,GAAG,QAHX;AAIHsB,cAAM,EAAEA,MAAM,CAAChB,OAAD,EAAU,CAAV,CAJX;AAKHa,qBAAa,EAAEwD;AALZ,OAAP;AAOH,KA/GE;AAiHH72B,YAAQ,EAAE,YAAY;AAClB,aAAOW,IAAI,CAACC,SAAL,CAAe,KAAKyQ,MAAL,EAAf,EAA8B,IAA9B,EAAoC,IAApC,CAAP;AACH;AAnHE,GAAP;AAqHH,CA5HD,C;;;;;;;;;;;ACJApL,MAAM,CAACjH,OAAP,GAAiB;AAAU;AAAWm5B,KAArB,EAA4B;AACzC,MAAIC,IAAI,GAAGh7B,mBAAO,CAAC,kBAAD,CAAlB;;AAEA,MAAI0mB,IAAI,GAAG;AAAEuU,aAAS,EAAE,CAAC5Q,QAAQ,CAAC0Q,KAAK,CAAC52B,MAAN,GAAe,IAAhB,CAAR,GAAgC,CAAjC,IAAsC;AAAnD,GAAX;AAEA,SAAO;AACH+2B,WAAO,EAAE,YAAY;AACjB,aAAOF,IAAI,CAACG,cAAL,CAAoBJ,KAApB,EAA2BrU,IAA3B,CAAP;AACH,KAHE;AAKH0U,gBAAY,EAAE;AAAU;AAAav6B,YAAvB,EAAiC;AAC3C,UAAIw6B,GAAG,GAAGL,IAAI,CAACM,gBAAL,CAAsB5U,IAAtB,CAAV;AAAA,UACI6U,KAAK,GAAG,EADZ;AAAA,UAEIv1B,KAAK,GAAG,CAFZ;AAGAq1B,SAAG,CAACG,EAAJ,CAAO,MAAP,EAAe,UAAUl6B,IAAV,EAAgB;AAC3Bi6B,aAAK,CAACt1B,IAAN,CAAW3E,IAAX;AACA0E,aAAK,IAAI1E,IAAI,CAAC6C,MAAd;AACH,OAHD;AAIAk3B,SAAG,CAACG,EAAJ,CAAO,KAAP,EAAc,YAAY;AACtB,YAAIC,GAAG,GAAG/4B,MAAM,CAAC8sB,KAAP,CAAaxpB,KAAb,CAAV;AAAA,YACI01B,OAAO,GAAG,CADd;AAEAD,WAAG,CAACxC,IAAJ,CAAS,CAAT;;AACA,aAAK,IAAIlzB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGw1B,KAAK,CAACp3B,MAA1B,EAAkC4B,CAAC,EAAnC,EAAuC;AACnC,cAAI41B,IAAI,GAAGJ,KAAK,CAACx1B,CAAD,CAAhB;AACA41B,cAAI,CAACC,IAAL,CAAUH,GAAV,EAAeC,OAAf;AACAA,iBAAO,IAAIC,IAAI,CAACx3B,MAAhB;AACH;;AACDtD,gBAAQ,IAAIA,QAAQ,CAAC46B,GAAD,CAApB;AACH,OAVD;AAWAJ,SAAG,CAACxuB,GAAJ,CAAQkuB,KAAR;AACH;AAzBE,GAAP;AA2BH,CAhCD,C;;;;;;;;;;;ACAAn5B,OAAO,CAACi6B,QAAR,GAAmB77B,mBAAO,CAAC,8DAAD,CAA1B;AACA4B,OAAO,CAACk6B,QAAR,GAAmB97B,mBAAO,CAAC,8DAAD,CAA1B;AACA4B,OAAO,CAACm6B,SAAR,GAAoB/7B,mBAAO,CAAC,gEAAD,CAA3B,C;;;;;;;;;;;ACFA6I,MAAM,CAACjH,OAAP,GAAiB;AAAU;AAAWm5B,KAArB,EAA4B;AACzC,MAAIC,IAAI,GAAGh7B,mBAAO,CAAC,kBAAD,CAAlB;;AAEA,SAAO;AACHg8B,WAAO,EAAE,YAAY;AACjB,aAAOhB,IAAI,CAACiB,cAAL,CAAoBlB,KAApB,CAAP;AACH,KAHE;AAKHmB,gBAAY,EAAE;AAAU;AAAar7B,YAAvB,EAAiC;AAC3C,UAAIw6B,GAAG,GAAGL,IAAI,CAACmB,gBAAL,EAAV;AAAA,UACIZ,KAAK,GAAG,EADZ;AAAA,UAEIv1B,KAAK,GAAG,CAFZ;AAGAq1B,SAAG,CAACG,EAAJ,CAAO,MAAP,EAAe,UAAUl6B,IAAV,EAAgB;AAC3Bi6B,aAAK,CAACt1B,IAAN,CAAW3E,IAAX;AACA0E,aAAK,IAAI1E,IAAI,CAAC6C,MAAd;AACH,OAHD;AAIAk3B,SAAG,CAACG,EAAJ,CAAO,KAAP,EAAc,YAAY;AACtB,YAAIC,GAAG,GAAG/4B,MAAM,CAAC8sB,KAAP,CAAaxpB,KAAb,CAAV;AAAA,YACI01B,OAAO,GAAG,CADd;AAEAD,WAAG,CAACxC,IAAJ,CAAS,CAAT;;AACA,aAAK,IAAIlzB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGw1B,KAAK,CAACp3B,MAA1B,EAAkC4B,CAAC,EAAnC,EAAuC;AACnC,cAAI41B,IAAI,GAAGJ,KAAK,CAACx1B,CAAD,CAAhB;AACA41B,cAAI,CAACC,IAAL,CAAUH,GAAV,EAAeC,OAAf;AACAA,iBAAO,IAAIC,IAAI,CAACx3B,MAAhB;AACH;;AACDtD,gBAAQ,IAAIA,QAAQ,CAAC46B,GAAD,CAApB;AACH,OAVD;AAWAJ,SAAG,CAACxuB,GAAJ,CAAQkuB,KAAR;AACH;AAzBE,GAAP;AA2BH,CA9BD,C;;;;;;;;;;;;CCEA;AACA;;AACA,iBAA2B/6B,mBAAO,CAAC,sBAAD,CAAlC;AAAA,MAAQo8B,cAAR,YAAQA,cAAR,C,CAEA;;;AACA,MAAMC,QAAQ,GAAG,IAAIC,WAAJ,CAAgB,GAAhB,EAAqBr1B,GAArB,CAAyB,CAACs1B,CAAD,EAAI3G,GAAJ,KAAY;AAClD,OAAK,IAAI3M,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;AACxB,QAAI,OAAO2M,GAAG,GAAG,CAAb,CAAJ,EAAqB;AACjBA,SAAG,GAAIA,GAAG,KAAK,CAAT,GAAc,UAApB;AACH,KAFD,MAEO;AACHA,SAAG,MAAM,CAAT;AACH;AACJ;;AACD,SAAOA,GAAG,KAAK,CAAf;AACH,CATgB,CAAjB,C,CAWA;;AACA,MAAM4G,IAAI,GAAG,CAACnqB,CAAD,EAAIC,CAAJ,KAAUhM,IAAI,CAACm2B,IAAL,CAAUpqB,CAAV,EAAaC,CAAb,MAAoB,CAA3C,C,CAEA;;;AACA,MAAMoqB,WAAW,GAAG,CAACC,MAAD,EAASC,IAAT,KAAkB;AAClC,SAAOP,QAAQ,CAAC,CAACM,MAAM,GAAGC,IAAV,IAAkB,IAAnB,CAAR,GAAoCD,MAAM,KAAK,CAAtD;AACH,CAFD,C,CAIA;;;AACA,MAAME,OAAO,GAAG,MAAM;AAClB,MAAI,eAAe,OAAOT,cAA1B,EAA0C;AACtC,WAAOA,cAAc,CAAC15B,MAAM,CAAC8sB,KAAP,CAAa,EAAb,CAAD,CAArB;AACH,GAFD,MAEO;AACH;AACA,WAAOqN,OAAO,CAACC,IAAR,EAAP;AACH;AACJ,CAPD,C,CASA;;;AACAD,OAAO,CAACC,IAAR,GAAe,MAAM;AACjB,QAAMC,IAAI,GAAGr6B,MAAM,CAAC8sB,KAAP,CAAa,EAAb,CAAb;AACA,QAAMqL,GAAG,GAAGkC,IAAI,CAAC54B,MAAjB;;AACA,OAAK,IAAI4B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG80B,GAApB,EAAyB90B,CAAC,EAA1B,EAA8Bg3B,IAAI,CAACh3B,CAAD,CAAJ,GAAWO,IAAI,CAAC02B,MAAL,KAAgB,GAAjB,GAAwB,IAAlC;;AAC9B,SAAOD,IAAP;AACH,CALD,C,CAOA;;;AACA,MAAMh6B,MAAM,GAAG;AACX85B;AADW,CAAf,C,CAIA;;AACA,SAASI,QAAT,CAAkBC,EAAlB,EAAsB;AAClB,QAAM3P,IAAI,GAAG7qB,MAAM,CAACupB,QAAP,CAAgBiR,EAAhB,IAAsBA,EAAtB,GAA2Bx6B,MAAM,CAACC,IAAP,CAAYu6B,EAAZ,CAAxC;AACA,OAAKrzB,IAAL,GAAY,IAAIyyB,WAAJ,CAAgB,CAAC,UAAD,EAAa,UAAb,EAAyB,UAAzB,CAAhB,CAAZ;;AACA,OAAK,IAAIv2B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwnB,IAAI,CAACppB,MAAzB,EAAiC4B,CAAC,EAAlC,EAAsC;AAClC,SAAKo3B,UAAL,CAAgB5P,IAAI,CAACxnB,CAAD,CAApB;AACH;AACJ;;AAEDk3B,QAAQ,CAAC5yB,SAAT,CAAmB8yB,UAAnB,GAAgC,UAAUC,SAAV,EAAqB;AACjD,QAAMvzB,IAAI,GAAG,KAAKA,IAAlB;AACAA,MAAI,CAAC,CAAD,CAAJ,GAAU6yB,WAAW,CAAC7yB,IAAI,CAAC,CAAD,CAAL,EAAUuzB,SAAV,CAArB;AACAvzB,MAAI,CAAC,CAAD,CAAJ,IAAWA,IAAI,CAAC,CAAD,CAAJ,GAAU,IAArB;AACAA,MAAI,CAAC,CAAD,CAAJ,GAAU2yB,IAAI,CAAC3yB,IAAI,CAAC,CAAD,CAAL,EAAU,SAAV,CAAJ,GAA2B,CAArC;AACAA,MAAI,CAAC,CAAD,CAAJ,GAAU6yB,WAAW,CAAC7yB,IAAI,CAAC,CAAD,CAAL,EAAUA,IAAI,CAAC,CAAD,CAAJ,KAAY,EAAtB,CAArB;AACA,SAAOuzB,SAAP;AACH,CAPD;;AASAH,QAAQ,CAAC5yB,SAAT,CAAmBkC,IAAnB,GAA0B,YAAY;AAClC,QAAM8wB,CAAC,GAAG,CAAC,KAAKxzB,IAAL,CAAU,CAAV,IAAe,CAAhB,MAAuB,CAAjC,CADkC,CACE;;AACpC,SAAQ2yB,IAAI,CAACa,CAAD,EAAIA,CAAC,GAAG,CAAR,CAAJ,IAAkB,CAAnB,GAAwB,IAA/B,CAFkC,CAEG;AACxC,CAHD;;AAKA,SAASC,cAAT;AAAwB;AAAWC,GAAnC,EAAwC;AACpC;AACA,QAAM1zB,IAAI,GAAG,IAAIozB,QAAJ,CAAaM,GAAb,CAAb,CAFoC,CAIpC;;AACA,SAAO;AAAU;AAAWj8B,MAArB,EAA2B;AAC9B;AACA,UAAMuD,MAAM,GAAGnC,MAAM,CAAC8sB,KAAP,CAAaluB,IAAI,CAAC6C,MAAlB,CAAf;AACA,QAAImlB,GAAG,GAAG,CAAV,CAH8B,CAI9B;;AACA,SAAK,IAAIkU,CAAT,IAAcl8B,IAAd,EAAoB;AAChB;AACA;AACAuD,YAAM,CAACykB,GAAG,EAAJ,CAAN,GAAgBzf,IAAI,CAACszB,UAAL,CAAgBK,CAAC,GAAG3zB,IAAI,CAAC0C,IAAL,EAApB,CAAhB,CAHgB,CAGkC;AACrD;;AACD,WAAO1H,MAAP;AACH,GAXD;AAYH;;AAED,SAAS44B,cAAT;AAAwB;AAAWF,GAAnC,EAAwC;AACpC;AACA,QAAM1zB,IAAI,GAAG,IAAIozB,QAAJ,CAAaM,GAAb,CAAb,CAFoC,CAIpC;;AACA,SAAO;AAAU;AAAWj8B,MAArB;AAA2B;AAAWuD,QAAtC;AAA8C;AAAaykB,KAAG,GAAG,CAAjE,EAAoE;AACvE;AACA,QAAI,CAACzkB,MAAL,EAAaA,MAAM,GAAGnC,MAAM,CAAC8sB,KAAP,CAAaluB,IAAI,CAAC6C,MAAlB,CAAT,CAF0D,CAGvE;;AACA,SAAK,IAAIq5B,CAAT,IAAcl8B,IAAd,EAAoB;AAChB,YAAM+7B,CAAC,GAAGxzB,IAAI,CAAC0C,IAAL,EAAV,CADgB,CACO;;AACvB1H,YAAM,CAACykB,GAAG,EAAJ,CAAN,GAAgBkU,CAAC,GAAGH,CAApB,CAFgB,CAEO;;AACvBxzB,UAAI,CAACszB,UAAL,CAAgBK,CAAhB,EAHgB,CAGI;AACvB;;AACD,WAAO34B,MAAP;AACH,GAVD;AAWH;;AAED,SAAS64B,OAAT;AAAiB;AAAWp8B,IAA5B;AAAkC;AAAW0rB,MAA7C;AAAqD;AAAmBuQ,GAAxE,EAA6E;AACzE,MAAI,CAACj8B,IAAD,IAAS,CAACoB,MAAM,CAACupB,QAAP,CAAgB3qB,IAAhB,CAAV,IAAmCA,IAAI,CAAC6C,MAAL,GAAc,EAArD,EAAyD;AACrD,WAAOzB,MAAM,CAAC8sB,KAAP,CAAa,CAAb,CAAP;AACH,GAHwE,CAKzE;;;AACA,QAAMmO,SAAS,GAAGL,cAAc,CAACC,GAAD,CAAhC,CANyE,CAQzE;;AACA,QAAMR,IAAI,GAAGY,SAAS,CAACr8B,IAAI,CAAC4E,KAAL,CAAW,CAAX,EAAc,EAAd,CAAD,CAAtB,CATyE,CAWzE;;AACA,MAAI62B,IAAI,CAAC,EAAD,CAAJ,KAAa/P,MAAM,CAAC4I,GAAP,KAAe,EAAhC,EAAoC;AAChC,UAAM,yBAAN;AACH,GAdwE,CAgBzE;;;AACA,SAAO+H,SAAS,CAACr8B,IAAI,CAAC4E,KAAL,CAAW,EAAX,CAAD,CAAhB;AACH,C,CAED;;;AACA,SAAS03B,OAAT,CAAiBt8B,IAAjB,EAAuB;AACnB,MAAIoB,MAAM,CAACupB,QAAP,CAAgB3qB,IAAhB,KAAyBA,IAAI,CAAC6C,MAAL,IAAe,EAA5C,EAAgD;AAC5C;AACApB,UAAM,CAAC85B,OAAP,GAAiB,YAAY;AACzB,aAAOv7B,IAAI,CAAC4E,KAAL,CAAW,CAAX,EAAc,EAAd,CAAP;AACH,KAFD;AAGH,GALD,MAKO,IAAI5E,IAAI,KAAK,MAAb,EAAqB;AACxB;AACAyB,UAAM,CAAC85B,OAAP,GAAiBA,OAAO,CAACC,IAAzB;AACH,GAHM,MAGA;AACH;AACA/5B,UAAM,CAAC85B,OAAP,GAAiBA,OAAjB;AACH;AACJ;;AAED,SAASgB,OAAT;AAAiB;AAAWv8B,IAA5B;AAAkC;AAAW0rB,MAA7C;AAAqD;AAAmBuQ,GAAxE;AAA6E;AAAYO,OAAO,GAAG,KAAnG,EAA0G;AACtG;AACA,MAAIx8B,IAAI,IAAI,IAAZ,EAAkBA,IAAI,GAAGoB,MAAM,CAAC8sB,KAAP,CAAa,CAAb,CAAP,CAFoF,CAGtG;;AACA,MAAI,CAAC9sB,MAAM,CAACupB,QAAP,CAAgB3qB,IAAhB,CAAL,EAA4BA,IAAI,GAAGoB,MAAM,CAACC,IAAP,CAAYrB,IAAI,CAACsB,QAAL,EAAZ,CAAP,CAJ0E,CAMtG;;AACA,QAAMm7B,SAAS,GAAGN,cAAc,CAACF,GAAD,CAAhC,CAPsG,CAStG;;AACA,QAAMR,IAAI,GAAGh6B,MAAM,CAAC85B,OAAP,EAAb;AACAE,MAAI,CAAC,EAAD,CAAJ,GAAY/P,MAAM,CAAC4I,GAAP,KAAe,EAAhB,GAAsB,IAAjC,CAXsG,CAatG;;AACA,MAAIkI,OAAJ,EAAaf,IAAI,CAAC,EAAD,CAAJ,GAAY/P,MAAM,CAAC4I,GAAP,KAAe,EAAhB,GAAsB,IAAjC,CAdyF,CAgBtG;;AACA,QAAM/wB,MAAM,GAAGnC,MAAM,CAAC8sB,KAAP,CAAaluB,IAAI,CAAC6C,MAAL,GAAc,EAA3B,CAAf;AACA45B,WAAS,CAAChB,IAAD,EAAOl4B,MAAP,CAAT,CAlBsG,CAoBtG;;AACA,SAAOk5B,SAAS,CAACz8B,IAAD,EAAOuD,MAAP,EAAe,EAAf,CAAhB;AACH;;AAEDgE,MAAM,CAACjH,OAAP,GAAiB;AAAE87B,SAAF;AAAWG,SAAX;AAAoBD;AAApB,CAAjB,C;;;;;;;;;;;ACzKA/0B,MAAM,CAACjH,OAAP,GAAiB;AACb;AACA60B,QAAM,EAAa,EAFN;AAEU;AACvBM,QAAM,EAAa,UAHN;AAGkB;AAC/BG,QAAM,EAAa,CAJN;AAIS;AACtBC,QAAM,EAAa,CALN;AAKS;AACtBC,QAAM,EAAa,CANN;AAMS;AACtBC,QAAM,EAAa,EAPN;AAOU;AACvBC,QAAM,EAAa,EARN;AAQU;AACvBC,QAAM,EAAa,EATN;AASU;AACvBC,QAAM,EAAa,EAVN;AAUU;AACvBC,QAAM,EAAa,EAXN;AAWU;AACvBC,QAAM,EAAa,EAZN;AAYU;;AAEvB;AACAsG,QAAM,EAAa,UAfN;AAekB;AAC/BC,QAAM,EAAa,EAhBN;AAgBU;AACvBC,QAAM,EAAa,CAjBN;AAiBS;AACtBC,QAAM,EAAa,CAlBN;AAkBS;AACtBC,QAAM,EAAa,EAnBN;AAmBU;;AAEvB;AACA7H,QAAM,EAAa,EAtBN;AAsBU;AACvBqB,QAAM,EAAa,UAvBN;AAuBkB;AAC/BE,QAAM,EAAa,CAxBN;AAwBS;AACtBC,QAAM,EAAa,CAzBN;AAyBS;AACtBC,QAAM,EAAa,CA1BN;AA0BS;AACtBC,QAAM,EAAa,EA3BN;AA2BU;AACvBC,QAAM,EAAa,EA5BN;AA4BU;AACvBC,QAAM,EAAa,EA7BN;AA6BU;AACvBC,QAAM,EAAa,EA9BN;AA8BU;AACvBC,QAAM,EAAa,EA/BN;AA+BU;AACvBC,QAAM,EAAa,EAhCN;AAgCU;AACvBC,QAAM,EAAa,EAjCN;AAiCU;AACvBC,QAAM,EAAa,EAlCN;AAkCU;AACvBC,QAAM,EAAa,EAnCN;AAmCU;AACvBC,QAAM,EAAa,EApCN;AAoCU;AACvBC,QAAM,EAAa,EArCN;AAqCU;AACvBC,QAAM,EAAa,EAtCN;AAsCU;;AAEvB;AACAiB,QAAM,EAAa,EAzCN;AAyCU;AACvBC,QAAM,EAAa,UA1CN;AA0CkB;AAC/BI,QAAM,EAAa,CA3CN;AA2CS;AACtBC,QAAM,EAAa,EA5CN;AA4CU;AACvBC,QAAM,EAAa,EA7CN;AA6CU;AACvBC,QAAM,EAAa,EA9CN;AA8CU;AACvBC,QAAM,EAAa,EA/CN;AA+CU;AAEvB+D,UAAQ,EAAW,EAjDN;AAiDU;AACvBC,UAAQ,EAAW,UAlDN;AAkDkB;AAC/BC,YAAU,EAAS,CAnDN;AAmDS;AACtBC,UAAQ,EAAW,CApDN;AAoDS;AACtBC,eAAa,EAAM,EArDN;AAqDU;AAEvBzE,UAAQ,EAAW,UAvDN;AAuDkB;AAC/BD,UAAQ,EAAW,EAxDN;AAwDU;AACvB2E,WAAS,EAAU,EAzDN;AAyDU;AACvBC,WAAS,EAAU,CA1DN;AA0DS;AACtBC,UAAQ,EAAW,EA3DN;AA2DU;AACvBC,UAAQ,EAAW,EA5DN;AA4DU;AACvBC,UAAQ,EAAW,EA7DN;AA6DU;AACvBC,aAAW,EAAQ,EA9DN;AA8DU;AACvBvE,UAAQ,EAAW,EA/DN;AA+DU;AACvBC,UAAQ,EAAW,EAhEN;AAgEU;AACvBuE,WAAS,EAAU,EAjEN;AAiEU;AACvBrE,UAAQ,EAAW,EAlEN;AAkEU;AACvBsE,YAAU,EAAS,EAnEN;AAmEU;;AAEvB;AACAvJ,QAAM,EAAa,CAtEN;AAsES;AACtBwJ,QAAM,EAAa,CAvEN;AAuES;AACtBC,UAAQ,EAAW,CAxEN;AAwES;AACtBC,UAAQ,EAAW,CAzEN;AAyES;AACtBC,UAAQ,EAAW,CA1EN;AA0ES;AACtBC,UAAQ,EAAW,CA3EN;AA2ES;AACtBC,UAAQ,EAAW,CA5EN;AA4ES;AACtB;AACA5J,UAAQ,EAAW,CA9EN;AA8ES;AACtB6J,mBAAiB,EAAE,CA/EN;AA+ES;AACtBC,QAAM,EAAa,EAhFN;AAgFS;AACtB;AACAC,OAAK,EAAc,EAlFN;AAkFU;AACvB;AACAC,MAAI,EAAe,EApFN;AAoFU;AACvB;AACAC,WAAS,EAAU,EAtFN;AAsFU;AACvBC,UAAQ,EAAW,EAvFN;AAuFU;AACvBC,aAAW,EAAQ,EAxFN;AAwFU;;AAEvB;AACA;AACAC,SAAO,EAAY,CA5FN;AA4FY;AACzBC,WAAS,EAAU,CA7FN;AA6FY;AACzBC,WAAS,EAAU,CA9FN;AA8FY;AACzBC,UAAQ,EAAW,CA/FN;AA+FY;AACzBC,SAAO,EAAY,EAhGN;AAgGY;AACzBC,WAAS,EAAU,EAjGN;AAiGY;AACzBC,SAAO,EAAY,EAlGN;AAkGY;AACA;AACzBhL,SAAO,EAAY,IApGN;AAoGY;AACA;AACA;AACA;AACzBiL,SAAO,EAAY,IAxGN;AAwGY;;AAEzB;AACAjU,MAAI,EAAe,CA3GN;AA4GbH,QAAM,EAAa,CA5GN;AA6GbN,MAAI,EAAe,CA7GN;;AA+Gb;AACA2U,OAAK,EAAc,CAhHN;AAiHbC,SAAO,EAAY,CAjHN;;AAmHb;AACAC,UAAQ,EAAW,MApHN;AAqHbC,WAAS,EAAU,MArHN;AAsHbC,QAAM,EAAa,MAtHN;AAuHbC,QAAM,EAAa,MAvHN;AAwHbC,SAAO,EAAY,MAxHN;AAyHbC,YAAU,EAAS,MAzHN;AA0HbC,SAAO,EAAY,MA1HN;AA2HbC,SAAO,EAAY,MA3HN;AA4HbC,UAAQ,EAAW,MA5HN;AA6HbC,eAAa,EAAM,MA7HN;AA8HbC,kBAAgB,EAAG,MA9HN;AA+HbC,kBAAgB,EAAG,MA/HN;AAgIbC,cAAY,EAAO,MAhIN;AAiIbC,eAAa,EAAM,MAjIN;AAkIbC,kBAAgB,EAAG,MAlIN;AAmIbC,SAAO,EAAY,MAnIN;AAoIbC,SAAO,EAAY,MApIN;AAqIbC,WAAS,EAAU,MArIN;AAuIbC,gBAAc,EAAK,UAvIN;AAwIbC,gBAAc,EAAK,MAxIN;AAyIbC,kBAAgB,EAAG,CAzIN;AA0IbC,gBAAc,EAAK,CA1IN;AA2IbC,cAAY,EAAO,EA3IN;AA4IbC,cAAY,EAAO;AA5IN,CAAjB,C;;;;;;;;;;;ACAAn5B,MAAM,CAACjH,OAAP,GAAiB;AACb;AACAo1B,aAAW,EAAE,oCAFA;AAGba,aAAW,EAAE,oCAHA;AAIboC,aAAW,EAAE,oCAJA;;AAMb;AACAgI,SAAO,EAAE,uBAPI;AAQbC,SAAO,EAAE,uBARI;AASbC,iBAAe,EAAE,gCATJ;AAUbC,gBAAc,EAAE,wCAVH;;AAYb;AACAC,YAAU,EAAE,mDAbC;AAcbC,kBAAgB,EAAE,4EAdL;AAebC,eAAa,EAAE,4EAfF;AAgBbC,oBAAkB,EAAE,6EAhBP;AAiBbC,sBAAoB,EAAE,8EAjBT;AAkBbC,kBAAgB,EAAE,wEAlBL;AAmBbC,sBAAoB,EAAE,wEAnBT;AAoBbC,mBAAiB,EAAE,8EApBN;AAqBbC,qBAAmB,EAAE,6DArBR;AAsBbC,oBAAkB,EAAE,yCAtBP;;AAwBb;AACAjR,mBAAiB,EAAE,4BAzBN;AA0BbI,eAAa,EAAE,4BA1BF;AA2BbE,QAAM,EAAE,wBA3BK;AA4BbZ,UAAQ,EAAE,qBA5BG;AA6BbwR,yBAAuB,EAAE,iCA7BZ;AA8BbjU,gBAAc,EAAE,oBA9BH;AA+BbkU,iBAAe,EAAE,iBA/BJ;AAgCbvW,kBAAgB,EAAE,kBAhCL;AAiCbwW,gBAAc,EAAE;AAjCH,CAAjB,C;;;;;;;;;;;ACAA,MAAMpX,EAAE,GAAG7rB,mBAAO,CAAC,+DAAD,CAAP,CAAwBA,OAAxB,EAAX;;AACA,MAAMkrB,GAAG,GAAGlrB,mBAAO,CAAC,kBAAD,CAAnB;;AAEA6rB,EAAE,CAACO,UAAH,GAAgBP,EAAE,CAACO,UAAH,IAAiBlB,GAAG,CAACkB,UAArC;;AAEAvjB,MAAM,CAACjH,OAAP,GAAiB;AAAU;AAAWU,IAArB,EAA2B;AACxC,MAAI4gC,KAAK,GAAG5gC,IAAI,IAAI,EAApB;AAAA,MACI6gC,IAAI,GAAGC,OAAO,EADlB;AAAA,MAEIC,KAAK,GAAG,IAFZ;;AAIA,WAASD,OAAT,GAAmB;AACf,WAAO;AACHE,eAAS,EAAE,KADR;AAEHC,cAAQ,EAAE,KAFP;AAGHC,YAAM,EAAE,KAHL;AAIHC,gBAAU,EAAE,KAJT;AAKHjT,WAAK,EAAE,CALJ;AAMHkT,WAAK,EAAE;AANJ,KAAP;AAQH;;AAED,MAAIR,KAAK,IAAIrX,EAAE,CAACO,UAAH,CAAc8W,KAAd,CAAb,EAAmC;AAC/BG,SAAK,GAAGxX,EAAE,CAAC+C,QAAH,CAAYsU,KAAZ,CAAR;AACAC,QAAI,CAACG,SAAL,GAAiBD,KAAK,CAAC3S,WAAN,EAAjB;AACAyS,QAAI,CAAC3S,KAAL,GAAa6S,KAAK,CAAC7S,KAAnB;AACA2S,QAAI,CAACO,KAAL,GAAaL,KAAK,CAACK,KAAnB;AACAP,QAAI,CAACM,UAAL,GAAkB,CAAC,QAAQJ,KAAK,CAACxS,IAAf,MAAyB,CAA3C,CAL+B,CAKe;;AAC9CsS,QAAI,CAACI,QAAL,GAAgB,CAAC,QAAQF,KAAK,CAACxS,IAAf,MAAyB,CAAzC,CAN+B,CAMa;;AAC5CsS,QAAI,CAACK,MAAL,GAActY,GAAG,CAACuG,QAAJ,CAAayR,KAAb,EAAoB,CAApB,MAA2B,GAAzC;AACH,GARD,MAQO;AACH99B,WAAO,CAAC2D,IAAR,CAAa,mBAAmBm6B,KAAhC;AACH;;AAED,SAAO;AACH,QAAII,SAAJ,GAAgB;AACZ,aAAOH,IAAI,CAACG,SAAZ;AACH,KAHE;;AAKH,QAAIK,QAAJ,GAAe;AACX,aAAOR,IAAI,CAACI,QAAZ;AACH,KAPE;;AASH,QAAIC,MAAJ,GAAa;AACT,aAAOL,IAAI,CAACK,MAAZ;AACH,KAXE;;AAaH,QAAIhT,KAAJ,GAAY;AACR,aAAO2S,IAAI,CAAC3S,KAAZ;AACH,KAfE;;AAiBH,QAAIkT,KAAJ,GAAY;AACR,aAAOP,IAAI,CAACO,KAAZ;AACH,KAnBE;;AAqBH,QAAID,UAAJ,GAAiB;AACb,aAAON,IAAI,CAACM,UAAZ;AACH,KAvBE;;AAyBHG,oBAAgB,EAAE,YAAY,CAAE,CAzB7B;AA2BHC,oBAAgB,EAAE,YAAY,CAAE,CA3B7B;AA6BH5vB,UAAM,EAAE,YAAY;AAChB,aAAO;AACH3R,YAAI,EAAE4gC,KADH;AAEHxS,mBAAW,EAAEyS,IAAI,CAACG,SAFf;AAGHQ,kBAAU,EAAEX,IAAI,CAACI,QAHd;AAIHQ,gBAAQ,EAAEZ,IAAI,CAACK,MAJZ;AAKHQ,oBAAY,EAAEb,IAAI,CAACM,UALhB;AAMHQ,aAAK,EAAEd,IAAI,CAAC3S,KANT;AAOH0T,aAAK,EAAEf,IAAI,CAACO;AAPT,OAAP;AASH,KAvCE;AAyCH9gC,YAAQ,EAAE,YAAY;AAClB,aAAOW,IAAI,CAACC,SAAL,CAAe,KAAKyQ,MAAL,EAAf,EAA8B,IAA9B,EAAoC,IAApC,CAAP;AACH;AA3CE,GAAP;AA6CH,CAzED,C;;;;;;;;;;;ACLArS,OAAO,CAAC5B,OAAR,GAAkB,YAAY;AAC1B,MAAI,OAAOmkC,OAAP,KAAmB,QAAnB,IAA+BA,OAAO,CAACC,QAAvC,IAAmDD,OAAO,CAACC,QAAR,CAAiB,UAAjB,CAAvD,EAAqF;AACjF,QAAI;AACA,YAAMC,UAAU,GAAGrkC,mBAAO,CAAC,qIAAD,CAA1B;;AACA,UAAIyI,MAAM,CAACoB,IAAP,CAAYw6B,UAAZ,EAAwBlgC,MAAxB,GAAiC,CAArC,EAAwC;AACpC,eAAOkgC,UAAP;AACH;AACJ,KALD,CAKE,OAAOz/B,CAAP,EAAU,CAAE;AACjB;;AACD,SAAO5E,mBAAO,CAAC,cAAD,CAAd;AACH,CAVD,C;;;;;;;;;;;ACAA6I,MAAM,CAACjH,OAAP,GAAiB5B,mBAAO,CAAC,qDAAD,CAAxB;AACA6I,MAAM,CAACjH,OAAP,CAAe+pB,SAAf,GAA2B3rB,mBAAO,CAAC,6DAAD,CAAlC;AACA6I,MAAM,CAACjH,OAAP,CAAe4qB,MAAf,GAAwBxsB,mBAAO,CAAC,uDAAD,CAA/B;AACA6I,MAAM,CAACjH,OAAP,CAAe0iC,QAAf,GAA0BtkC,mBAAO,CAAC,qDAAD,CAAjC,C;;;;;;;;;;;ACHA,MAAMukC,OAAO,GAAGvkC,mBAAO,CAAC,+DAAD,CAAP,CAAwBA,OAAxB,EAAhB;;AACA,MAAMkrB,GAAG,GAAGlrB,mBAAO,CAAC,kBAAD,CAAnB;;AACA,MAAM2rB,SAAS,GAAG3rB,mBAAO,CAAC,6DAAD,CAAzB;;AACA,MAAM2wB,KAAK,GAAG,OAAOwT,OAAP,KAAmB,QAAnB,IAA+B,YAAYA,OAAO,CAACK,QAAjE;;AAEA,MAAMC,MAAM,GAAIhlB,GAAD,IAASA,GAAG,IAAI,OAAOA,GAAP,KAAe,QAA9C,C,CAEA;;;AACA,MAAMilB,QAAQ,GAAG,IAAIpI,WAAJ,CAAgB,GAAhB,EAAqBr1B,GAArB,CAAyB,CAACs1B,CAAD,EAAIiB,CAAJ,KAAU;AAChD,OAAK,IAAIH,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;AACxB,QAAI,CAACG,CAAC,GAAG,CAAL,MAAY,CAAhB,EAAmB;AACfA,OAAC,GAAG,aAAcA,CAAC,KAAK,CAAxB;AACH,KAFD,MAEO;AACHA,OAAC,MAAM,CAAP;AACH;AACJ;;AACD,SAAOA,CAAC,KAAK,CAAb;AACH,CATgB,CAAjB,C,CAWA;;AAEA,SAASvS,KAAT,CAAevE,IAAf,EAAqB;AACjB,OAAK2G,GAAL,GAAWnC,GAAG,CAACmC,GAAf;AACA,OAAKxB,EAAL,GAAU0Y,OAAV;;AAEA,MAAIE,MAAM,CAAC/d,IAAD,CAAV,EAAkB;AACd;AACA,QAAI+d,MAAM,CAAC/d,IAAI,CAACmF,EAAN,CAAN,IAAmB,OAAOnF,IAAI,CAACmF,EAAL,CAAQ+C,QAAf,KAA4B,UAAnD,EAA+D;AAC3D,WAAK/C,EAAL,GAAUnF,IAAI,CAACmF,EAAf;AACH;AACJ;AACJ;;AAEDhjB,MAAM,CAACjH,OAAP,GAAiBqpB,KAAjB,C,CAEA;;AAEAA,KAAK,CAAC5gB,SAAN,CAAgB+nB,OAAhB,GAA0B;AAAU;AAAWuS,MAArB,EAA6B;AACnD,QAAMxV,IAAI,GAAG,IAAb,CADmD,CAGnD;;AACA,WAASyV,SAAT;AAAmB;AAAWC,OAA9B,EAAqC;AACjC,QAAIC,YAAY,GAAGD,KAAK,CAACl8B,KAAN,CAAYwmB,IAAI,CAAC9B,GAAjB,EAAsB,CAAtB,CAAnB;AACAwX,SAAK,CAACl8B,KAAN,CAAYwmB,IAAI,CAAC9B,GAAjB,EAAsBvjB,OAAtB,CAA8B,UAAU6K,IAAV,EAAgB;AAC1C,UAAI,CAACA,IAAD,IAASA,IAAI,CAACiU,MAAL,CAAY,CAAC,CAAb,EAAgB,CAAhB,MAAuB,GAApC,EAAyC;AACzCkc,kBAAY,IAAI3V,IAAI,CAAC9B,GAAL,GAAW1Y,IAA3B;AACA,UAAIib,IAAJ;;AACA,UAAI;AACAA,YAAI,GAAGT,IAAI,CAACtD,EAAL,CAAQ+C,QAAR,CAAiBkW,YAAjB,CAAP;AACH,OAFD,CAEE,OAAOlgC,CAAP,EAAU;AACRuqB,YAAI,CAACtD,EAAL,CAAQ+Y,SAAR,CAAkBE,YAAlB;AACH;;AACD,UAAIlV,IAAI,IAAIA,IAAI,CAACL,MAAL,EAAZ,EAA2B,MAAM/C,MAAM,CAAC2V,eAAP,CAAuB3Y,OAAvB,CAA+B,IAA/B,EAAqCsb,YAArC,CAAN;AAC9B,KAVD;AAWH;;AAEDF,WAAS,CAACD,MAAD,CAAT;AACH,CApBD;;AAsBA1Z,KAAK,CAAC5gB,SAAN,CAAgB2nB,WAAhB,GAA8B;AAAU;AAAW1vB,IAArB;AAA2B;AAAWgB,OAAtC;AAA+C;AAAY8tB,SAA3D;AAAsE;AAAWhB,IAAjF,EAAuF;AACjH,QAAMjB,IAAI,GAAG,IAAb;;AACA,MAAIA,IAAI,CAACtD,EAAL,CAAQO,UAAR,CAAmB9pB,IAAnB,CAAJ,EAA8B;AAC1B,QAAI,CAAC8uB,SAAL,EAAgB,OAAO,KAAP,CADU,CACI;;AAE9B,QAAIxB,IAAI,GAAGT,IAAI,CAACtD,EAAL,CAAQ+C,QAAR,CAAiBtsB,IAAjB,CAAX;;AACA,QAAIstB,IAAI,CAACc,WAAL,EAAJ,EAAwB;AACpB,aAAO,KAAP;AACH;AACJ;;AACD,MAAIiU,MAAM,GAAGzZ,GAAG,CAAC6Z,OAAJ,CAAYziC,IAAZ,CAAb;;AACA,MAAI,CAAC6sB,IAAI,CAACtD,EAAL,CAAQO,UAAR,CAAmBuY,MAAnB,CAAL,EAAiC;AAC7BxV,QAAI,CAACiD,OAAL,CAAauS,MAAb;AACH;;AAED,MAAIK,EAAJ;;AACA,MAAI;AACAA,MAAE,GAAG7V,IAAI,CAACtD,EAAL,CAAQoZ,QAAR,CAAiB3iC,IAAjB,EAAuB,GAAvB,EAA4B,GAA5B,CAAL,CADA,CACuC;AAC1C,GAFD,CAEE,OAAOsC,CAAP,EAAU;AACRuqB,QAAI,CAACtD,EAAL,CAAQkH,SAAR,CAAkBzwB,IAAlB,EAAwB,GAAxB;AACA0iC,MAAE,GAAG7V,IAAI,CAACtD,EAAL,CAAQoZ,QAAR,CAAiB3iC,IAAjB,EAAuB,GAAvB,EAA4B,GAA5B,CAAL;AACH;;AACD,MAAI0iC,EAAJ,EAAQ;AACJ,QAAI;AACA7V,UAAI,CAACtD,EAAL,CAAQqZ,SAAR,CAAkBF,EAAlB,EAAsB1hC,OAAtB,EAA+B,CAA/B,EAAkCA,OAAO,CAACa,MAA1C,EAAkD,CAAlD;AACH,KAFD,SAEU;AACNgrB,UAAI,CAACtD,EAAL,CAAQsZ,SAAR,CAAkBH,EAAlB;AACH;AACJ;;AACD7V,MAAI,CAACtD,EAAL,CAAQkH,SAAR,CAAkBzwB,IAAlB,EAAwB8tB,IAAI,IAAI,GAAhC;AACA,SAAO,IAAP;AACH,CA/BD;;AAiCAnF,KAAK,CAAC5gB,SAAN,CAAgB8oB,gBAAhB,GAAmC;AAAU;AAAW7wB,IAArB;AAA2B;AAAWgB,OAAtC;AAA+C;AAAY8tB,SAA3D;AAAsE;AAAWhB,IAAjF;AAAuF;AAAavvB,QAApG,EAA8G;AAC7I,MAAI,OAAOuvB,IAAP,KAAgB,UAApB,EAAgC;AAC5BvvB,YAAQ,GAAGuvB,IAAX;AACAA,QAAI,GAAGlrB,SAAP;AACH;;AAED,QAAMiqB,IAAI,GAAG,IAAb;AAEAA,MAAI,CAACtD,EAAL,CAAQuZ,MAAR,CAAe9iC,IAAf,EAAqB,UAAU+iC,KAAV,EAAiB;AAClC,QAAIA,KAAK,IAAI,CAACjU,SAAd,EAAyB,OAAOvwB,QAAQ,CAAC,KAAD,CAAf;AAEzBsuB,QAAI,CAACtD,EAAL,CAAQ+D,IAAR,CAAattB,IAAb,EAAmB,UAAUqJ,GAAV,EAAeikB,IAAf,EAAqB;AACpC,UAAIyV,KAAK,IAAIzV,IAAI,CAACc,WAAL,EAAb,EAAiC;AAC7B,eAAO7vB,QAAQ,CAAC,KAAD,CAAf;AACH;;AAED,UAAI8jC,MAAM,GAAGzZ,GAAG,CAAC6Z,OAAJ,CAAYziC,IAAZ,CAAb;AACA6sB,UAAI,CAACtD,EAAL,CAAQuZ,MAAR,CAAeT,MAAf,EAAuB,UAAUS,MAAV,EAAkB;AACrC,YAAI,CAACA,MAAL,EAAajW,IAAI,CAACiD,OAAL,CAAauS,MAAb;AAEbxV,YAAI,CAACtD,EAAL,CAAQ6D,IAAR,CAAaptB,IAAb,EAAmB,GAAnB,EAAwB,GAAxB,EAA6B,UAAUqJ,GAAV,EAAeq5B,EAAf,EAAmB;AAC5C,cAAIr5B,GAAJ,EAAS;AACLwjB,gBAAI,CAACtD,EAAL,CAAQyZ,KAAR,CAAchjC,IAAd,EAAoB,GAApB,EAAyB,YAAY;AACjC6sB,kBAAI,CAACtD,EAAL,CAAQ6D,IAAR,CAAaptB,IAAb,EAAmB,GAAnB,EAAwB,GAAxB,EAA6B,UAAUqJ,GAAV,EAAeq5B,EAAf,EAAmB;AAC5C7V,oBAAI,CAACtD,EAAL,CAAQ0Z,KAAR,CAAcP,EAAd,EAAkB1hC,OAAlB,EAA2B,CAA3B,EAA8BA,OAAO,CAACa,MAAtC,EAA8C,CAA9C,EAAiD,YAAY;AACzDgrB,sBAAI,CAACtD,EAAL,CAAQ2Z,KAAR,CAAcR,EAAd,EAAkB,YAAY;AAC1B7V,wBAAI,CAACtD,EAAL,CAAQyZ,KAAR,CAAchjC,IAAd,EAAoB8tB,IAAI,IAAI,GAA5B,EAAiC,YAAY;AACzCvvB,8BAAQ,CAAC,IAAD,CAAR;AACH,qBAFD;AAGH,mBAJD;AAKH,iBAND;AAOH,eARD;AASH,aAVD;AAWH,WAZD,MAYO,IAAImkC,EAAJ,EAAQ;AACX7V,gBAAI,CAACtD,EAAL,CAAQ0Z,KAAR,CAAcP,EAAd,EAAkB1hC,OAAlB,EAA2B,CAA3B,EAA8BA,OAAO,CAACa,MAAtC,EAA8C,CAA9C,EAAiD,YAAY;AACzDgrB,kBAAI,CAACtD,EAAL,CAAQ2Z,KAAR,CAAcR,EAAd,EAAkB,YAAY;AAC1B7V,oBAAI,CAACtD,EAAL,CAAQyZ,KAAR,CAAchjC,IAAd,EAAoB8tB,IAAI,IAAI,GAA5B,EAAiC,YAAY;AACzCvvB,0BAAQ,CAAC,IAAD,CAAR;AACH,iBAFD;AAGH,eAJD;AAKH,aAND;AAOH,WARM,MAQA;AACHsuB,gBAAI,CAACtD,EAAL,CAAQyZ,KAAR,CAAchjC,IAAd,EAAoB8tB,IAAI,IAAI,GAA5B,EAAiC,YAAY;AACzCvvB,sBAAQ,CAAC,IAAD,CAAR;AACH,aAFD;AAGH;AACJ,SA1BD;AA2BH,OA9BD;AA+BH,KArCD;AAsCH,GAzCD;AA0CH,CAlDD;;AAoDAoqB,KAAK,CAAC5gB,SAAN,CAAgB6kB,SAAhB,GAA4B;AAAU;AAAW5sB,IAArB,EAA2B;AACnD,QAAM6sB,IAAI,GAAG,IAAb;;AAEA,WAASsW,QAAT;AAAkB;AAAWC,KAA7B;AAAkC;AAAWC,SAA7C;AAAsD;AAAYC,WAAlE,EAA6E;AACzE,QAAI,OAAOD,OAAP,KAAmB,SAAvB,EAAkC;AAC9BC,eAAS,GAAGD,OAAZ;AACAA,aAAO,GAAGzgC,SAAV;AACH;;AACD,QAAI2gC,KAAK,GAAG,EAAZ;AACA1W,QAAI,CAACtD,EAAL,CAAQia,WAAR,CAAoBJ,GAApB,EAAyB57B,OAAzB,CAAiC,UAAU4oB,IAAV,EAAgB;AAC7C,UAAIpwB,IAAI,GAAG4oB,GAAG,CAACH,IAAJ,CAAS2a,GAAT,EAAchT,IAAd,CAAX;AAEA,UAAIvD,IAAI,CAACtD,EAAL,CAAQ+C,QAAR,CAAiBtsB,IAAjB,EAAuBouB,WAAvB,MAAwCkV,SAA5C,EAAuDC,KAAK,GAAGA,KAAK,CAACE,MAAN,CAAaN,QAAQ,CAACnjC,IAAD,EAAOqjC,OAAP,EAAgBC,SAAhB,CAArB,CAAR;;AAEvD,UAAI,CAACD,OAAD,IAAYA,OAAO,CAAC1jC,IAAR,CAAaK,IAAb,CAAhB,EAAoC;AAChCujC,aAAK,CAAC5/B,IAAN,CAAWilB,GAAG,CAACkC,SAAJ,CAAc9qB,IAAd,KAAuB6sB,IAAI,CAACtD,EAAL,CAAQ+C,QAAR,CAAiBtsB,IAAjB,EAAuBouB,WAAvB,KAAuCvB,IAAI,CAAC9B,GAA5C,GAAkD,EAAzE,CAAX;AACH;AACJ,KARD;AASA,WAAOwY,KAAP;AACH;;AAED,SAAOJ,QAAQ,CAACnjC,IAAD,EAAO4C,SAAP,EAAkB,IAAlB,CAAf;AACH,CAtBD;;AAwBA+lB,KAAK,CAAC5gB,SAAN,CAAgB27B,aAAhB,GAAgC,YAAY,CAAE,CAA9C;;AAEA/a,KAAK,CAAC5gB,SAAN,CAAgB47B,aAAhB,GAAgC,YAAY,CAAE,CAA9C,C,CAEA;AAEA;;;AACAhb,KAAK,CAACyR,WAAN,GAAoB,UAAU9G,GAAV,EAAesQ,IAAf,EAAqB;AACrC,SAAOxB,QAAQ,CAAC,CAAC9O,GAAG,GAAGsQ,IAAP,IAAe,IAAhB,CAAR,GAAiCtQ,GAAG,KAAK,CAAhD;AACH,CAFD;;AAIA3K,KAAK,CAACkb,KAAN,GAAc,UAAU1K,GAAV,EAAe;AACzB,MAAI,OAAOA,GAAP,KAAe,QAAnB,EAA6B;AACzBA,OAAG,GAAG/4B,MAAM,CAACC,IAAP,CAAY84B,GAAZ,EAAiB,MAAjB,CAAN;AACH,GAHwB,CAIzB;;;AACA,MAAI,CAACiJ,QAAQ,CAACvgC,MAAd,EAAsBiiC,WAAW;AAEjC,MAAIvL,GAAG,GAAGY,GAAG,CAACt3B,MAAd;AACA,MAAIyxB,GAAG,GAAG,CAAC,CAAX;;AACA,OAAK,IAAIyQ,GAAG,GAAG,CAAf,EAAkBA,GAAG,GAAGxL,GAAxB,GAA+BjF,GAAG,GAAG3K,KAAK,CAACyR,WAAN,CAAkB9G,GAAlB,EAAuB6F,GAAG,CAAC4K,GAAG,EAAJ,CAA1B,CAAN,CATN,CAUzB;;;AACA,SAAO,CAACzQ,GAAD,KAAS,CAAhB;AACH,CAZD;;AAcA3K,KAAK,CAACmO,cAAN,GAAuB;AAAU;AAAW31B,MAArB,EAA6B;AAChD,UAAQA,MAAR;AACI,SAAKkoB,SAAS,CAAC+J,MAAf;AACI,aAAO,aAAajyB,MAAb,GAAsB,GAA7B;;AACJ,SAAKkoB,SAAS,CAACgK,QAAf;AACI,aAAO,eAAelyB,MAAf,GAAwB,GAA/B;;AACJ;AACI,aAAO,kBAAkBA,MAAlB,GAA2B,GAAlC;AANR;AAQH,CATD,C,CAWA;;;AACAwnB,KAAK,CAAC0B,SAAN,GAAkB;AAAU;AAAWrqB,IAArB,EAA2B;AACzC,MAAI,CAACA,IAAL,EAAW,OAAO,EAAP,CAD8B,CAEzC;;AACA,MAAIgkC,UAAU,GAAGpb,GAAG,CAACiC,KAAJ,CAAUC,SAAV,CAAoB,MAAM9qB,IAAI,CAACqG,KAAL,CAAW,IAAX,EAAiBoiB,IAAjB,CAAsB,GAAtB,CAA1B,CAAjB;AACA,SAAOG,GAAG,CAACH,IAAJ,CAAS,GAAT,EAAcub,UAAd,CAAP;AACH,CALD,C,CAOA;;;AACArb,KAAK,CAAC2B,QAAN,GAAiB;AAAU;AAAW2Z,MAArB;AAA6B;AAAW5xB,IAAxC,EAA8C;AAC3D4xB,QAAM,GAAGrb,GAAG,CAACgF,OAAJ,CAAYhF,GAAG,CAACkC,SAAJ,CAAcmZ,MAAd,CAAZ,CAAT;AACA,MAAIhL,KAAK,GAAG5mB,IAAI,CAAChM,KAAL,CAAW,GAAX,CAAZ;;AACA,OAAK,IAAI5C,CAAC,GAAG,CAAR,EAAW6F,CAAC,GAAG2vB,KAAK,CAACp3B,MAA1B,EAAkC4B,CAAC,GAAG6F,CAAtC,EAAyC7F,CAAC,EAA1C,EAA8C;AAC1C,QAAIzD,IAAI,GAAG4oB,GAAG,CAACkC,SAAJ,CAAclC,GAAG,CAACH,IAAJ,CAASwb,MAAT,EAAiBhL,KAAK,CAACr1B,KAAN,CAAYH,CAAZ,EAAe6F,CAAf,EAAkBmf,IAAlB,CAAuBG,GAAG,CAACmC,GAA3B,CAAjB,CAAd,CAAX;;AACA,QAAI/qB,IAAI,CAAC+W,OAAL,CAAaktB,MAAb,MAAyB,CAA7B,EAAgC;AAC5B,aAAOjkC,IAAP;AACH;AACJ;;AACD,SAAO4oB,GAAG,CAACkC,SAAJ,CAAclC,GAAG,CAACH,IAAJ,CAASwb,MAAT,EAAiBrb,GAAG,CAACuG,QAAJ,CAAa9c,IAAb,CAAjB,CAAd,CAAP;AACH,CAVD,C,CAYA;;;AACAsW,KAAK,CAACiJ,QAAN,GAAiB,SAASA,QAAT;AAAkB;AAA+BlhB,KAAjD,EAAwD;AACrE,MAAItQ,MAAM,CAACupB,QAAP,CAAgBjZ,KAAhB,CAAJ,EAA4B;AACxB,WAAOA,KAAP;AACH,GAFD,MAEO,IAAIA,KAAK,YAAYgZ,UAArB,EAAiC;AACpC,WAAOtpB,MAAM,CAACC,IAAP,CAAYqQ,KAAZ,CAAP;AACH,GAFM,MAEA;AACH;AACA,WAAO,OAAOA,KAAP,KAAiB,QAAjB,GAA4BtQ,MAAM,CAACC,IAAP,CAAYqQ,KAAZ,EAAmB,MAAnB,CAA5B,GAAyDtQ,MAAM,CAAC8sB,KAAP,CAAa,CAAb,CAAhE;AACH;AACJ,CATD;;AAWAvE,KAAK,CAACsP,eAAN,GAAwB;AAAU;AAAWiM,MAArB;AAA6B;AAAQp/B,KAArC,EAA4C;AAChE,MAAIlB,KAAK,GAAGxD,MAAM,CAACC,IAAP,CAAY6jC,MAAM,CAACtgC,KAAP,CAAakB,KAAb,EAAoBA,KAAK,GAAG,CAA5B,CAAZ,CAAZ;AACAlB,OAAK,CAACugC,MAAN;AAEA,SAAOpc,QAAQ,CAAE,KAAInkB,KAAK,CAACtD,QAAN,CAAe,KAAf,CAAsB,EAA5B,CAAf;AACH,CALD;;AAOAqoB,KAAK,CAAC0F,KAAN,GAAcA,KAAd,C,CAAqB;;AACrB1F,KAAK,CAACyZ,QAAN,GAAiBA,QAAjB,C;;;;;;;;;;;ACrPA,IAAIzZ,KAAK,GAAGjrB,mBAAO,CAAC,oDAAD,CAAnB;AAAA,IACI0mC,OAAO,GAAG1mC,mBAAO,CAAC,0DAAD,CADrB;AAAA,IAEI2rB,SAAS,GAAGV,KAAK,CAACU,SAFtB;AAAA,IAGIgb,OAAO,GAAG3mC,mBAAO,CAAC,0DAAD,CAHrB;;AAKA6I,MAAM,CAACjH,OAAP,GAAiB;AAAU;AAAWoR,KAArB,EAA4B;AACzC,MAAI4zB,YAAY,GAAG,IAAIF,OAAO,CAACrN,WAAZ,EAAnB;AAAA,MACIwN,UAAU,GAAGnkC,MAAM,CAAC8sB,KAAP,CAAa,CAAb,CADjB;AAAA,MAEIsX,QAAQ,GAAGpkC,MAAM,CAAC8sB,KAAP,CAAa,CAAb,CAFf;AAAA,MAGIuX,YAAY,GAAG,KAHnB;AAAA,MAIIC,gBAAgB,GAAG,IAJvB;AAAA,MAKIC,MAAM,GAAGvkC,MAAM,CAAC8sB,KAAP,CAAa,CAAb,CALb;;AAOA,WAAS0X,wBAAT,GAAoC;AAChC,QAAI,CAACl0B,KAAD,IAAU,CAACtQ,MAAM,CAACupB,QAAP,CAAgBjZ,KAAhB,CAAf,EAAuC;AACnC,aAAOtQ,MAAM,CAAC8sB,KAAP,CAAa,CAAb,CAAP;AACH;;AACDoX,gBAAY,CAAC/P,wBAAb,CAAsC7jB,KAAtC;;AACA,WAAOA,KAAK,CAAC9M,KAAN,CAAY0gC,YAAY,CAACpQ,cAAzB,EAAyCoQ,YAAY,CAACpQ,cAAb,GAA8BoQ,YAAY,CAAC9Q,cAApF,CAAP;AACH;;AAED,WAASqR,OAAT,CAAiB7lC,IAAjB,EAAuB;AACnB;AACA,QAAI,CAACslC,YAAY,CAACnR,KAAb,GAAqB,GAAtB,MAA+B,GAAnC,EAAwC;AACpC,UAAIxK,KAAK,CAACkb,KAAN,CAAY7kC,IAAZ,MAAsBslC,YAAY,CAAChQ,UAAb,CAAwBhB,GAAlD,EAAuD;AACnD,eAAO,KAAP;AACH;AACJ,KAJD,MAIO,CACH;AACA;AACA;AACH;;AACD,WAAO,IAAP;AACH;;AAED,WAASwR,UAAT;AAAoB;AAAYC,OAAhC;AAAuC;AAAaxmC,UAApD;AAA8D;AAAmB0sB,MAAjF,EAAuF;AACnF,QAAI,OAAO1sB,QAAP,KAAoB,WAApB,IAAmC,OAAOwmC,KAAP,KAAiB,QAAxD,EAAkE;AAC9D9Z,UAAI,GAAG8Z,KAAP;AACAA,WAAK,GAAG,KAAK,CAAb;AACH;;AACD,QAAIN,YAAJ,EAAkB;AACd,UAAIM,KAAK,IAAIxmC,QAAb,EAAuB;AACnBA,gBAAQ,CAAC6B,MAAM,CAAC8sB,KAAP,CAAa,CAAb,CAAD,EAAkBvE,KAAK,CAACuB,MAAN,CAAauW,uBAA/B,CAAR,CADmB,CAC8C;AACpE;;AACD,aAAOrgC,MAAM,CAAC8sB,KAAP,CAAa,CAAb,CAAP;AACH;;AAED,QAAI8X,cAAc,GAAGJ,wBAAwB,EAA7C;;AAEA,QAAII,cAAc,CAACnjC,MAAf,KAA0B,CAA9B,EAAiC;AAC7B;AACA,UAAIkjC,KAAK,IAAIxmC,QAAb,EAAuBA,QAAQ,CAACymC,cAAD,CAAR;AACvB,aAAOA,cAAP;AACH;;AAED,QAAIV,YAAY,CAACvQ,SAAjB,EAA4B;AACxB,UAAI,aAAa,OAAO9I,IAApB,IAA4B,CAAC7qB,MAAM,CAACupB,QAAP,CAAgBsB,IAAhB,CAAjC,EAAwD;AACpD,cAAM,IAAIvqB,KAAJ,CAAU,0CAAV,CAAN;AACH;;AACDskC,oBAAc,GAAGX,OAAO,CAAC5K,SAAR,CAAkB2B,OAAlB,CAA0B4J,cAA1B,EAA0CV,YAA1C,EAAwDrZ,IAAxD,CAAjB;AACH;;AAED,QAAIjsB,IAAI,GAAGoB,MAAM,CAAC8sB,KAAP,CAAaoX,YAAY,CAAC/gC,IAA1B,CAAX;;AAEA,YAAQ+gC,YAAY,CAACnjC,MAArB;AACI,WAAKwnB,KAAK,CAACU,SAAN,CAAgB+J,MAArB;AACI4R,sBAAc,CAAC1L,IAAf,CAAoBt6B,IAApB;;AACA,YAAI,CAAC6lC,OAAO,CAAC7lC,IAAD,CAAZ,EAAoB;AAChB,cAAI+lC,KAAK,IAAIxmC,QAAb,EAAuBA,QAAQ,CAACS,IAAD,EAAO2pB,KAAK,CAACuB,MAAN,CAAa0V,OAApB,CAAR,CADP,CAC6C;;AAC7D,gBAAM,IAAIl/B,KAAJ,CAAUioB,KAAK,CAACuB,MAAN,CAAa0V,OAAvB,CAAN;AACH,SAHD,MAGO;AACH;AACA,cAAImF,KAAK,IAAIxmC,QAAb,EAAuBA,QAAQ,CAACS,IAAD,CAAR;AACvB,iBAAOA,IAAP;AACH;;AACL,WAAK2pB,KAAK,CAACU,SAAN,CAAgBgK,QAArB;AACI,YAAI4R,QAAQ,GAAG,IAAIZ,OAAO,CAAC7K,QAAZ,CAAqBwL,cAArB,CAAf;;AACA,YAAI,CAACD,KAAL,EAAY;AACR,gBAAMxiC,MAAM,GAAG0iC,QAAQ,CAACvL,OAAT,CAAiB16B,IAAjB,CAAf;AACAuD,gBAAM,CAAC+2B,IAAP,CAAYt6B,IAAZ,EAAkB,CAAlB;;AACA,cAAI,CAAC6lC,OAAO,CAAC7lC,IAAD,CAAZ,EAAoB;AAChB,kBAAM,IAAI0B,KAAJ,CAAUioB,KAAK,CAACuB,MAAN,CAAa0V,OAAb,GAAuB,GAAvB,GAA6B2E,UAAU,CAACjkC,QAAX,EAAvC,CAAN;AACH;;AACD,iBAAOtB,IAAP;AACH,SAPD,MAOO;AACHimC,kBAAQ,CAACrL,YAAT,CAAsB,UAAUr3B,MAAV,EAAkB;AACpCA,kBAAM,CAAC+2B,IAAP,CAAY/2B,MAAZ,EAAoB,CAApB;;AACA,gBAAIhE,QAAJ,EAAc;AACV,kBAAI,CAACsmC,OAAO,CAACtiC,MAAD,CAAZ,EAAsB;AAClBhE,wBAAQ,CAACgE,MAAD,EAASomB,KAAK,CAACuB,MAAN,CAAa0V,OAAtB,CAAR,CADkB,CACsB;AAC3C,eAFD,MAEO;AACHrhC,wBAAQ,CAACgE,MAAD,CAAR;AACH;AACJ;AACJ,WATD;AAUH;;AACD;;AACJ;AACI,YAAIwiC,KAAK,IAAIxmC,QAAb,EAAuBA,QAAQ,CAAC6B,MAAM,CAAC8sB,KAAP,CAAa,CAAb,CAAD,EAAkBvE,KAAK,CAACuB,MAAN,CAAa4V,cAA/B,CAAR;AACvB,cAAM,IAAIp/B,KAAJ,CAAUioB,KAAK,CAACuB,MAAN,CAAa4V,cAAvB,CAAN;AAnCR;AAqCH;;AAED,WAASoF,QAAT;AAAkB;AAAYH,OAA9B;AAAqC;AAAaxmC,UAAlD,EAA4D;AACxD,QAAI,CAAC,CAACmmC,gBAAD,IAAqB,CAACA,gBAAgB,CAAC7iC,MAAxC,KAAmDzB,MAAM,CAACupB,QAAP,CAAgBjZ,KAAhB,CAAvD,EAA+E;AAC3E;AACA,UAAIq0B,KAAK,IAAIxmC,QAAb,EAAuBA,QAAQ,CAACqmC,wBAAwB,EAAzB,CAAR;AACvB,aAAOA,wBAAwB,EAA/B;AACH;;AAED,QAAIF,gBAAgB,CAAC7iC,MAAjB,IAA2B,CAAC4iC,YAAhC,EAA8C;AAC1C,UAAIO,cAAJ,CAD0C,CAE1C;;AACA,cAAQV,YAAY,CAACnjC,MAArB;AACI,aAAKwnB,KAAK,CAACU,SAAN,CAAgB+J,MAArB;AACIkR,sBAAY,CAAC9Q,cAAb,GAA8B8Q,YAAY,CAAC/gC,IAA3C;AAEAyhC,wBAAc,GAAG5kC,MAAM,CAAC8sB,KAAP,CAAawX,gBAAgB,CAAC7iC,MAA9B,CAAjB;AACA6iC,0BAAgB,CAACpL,IAAjB,CAAsB0L,cAAtB;AAEA,cAAID,KAAK,IAAIxmC,QAAb,EAAuBA,QAAQ,CAACymC,cAAD,CAAR;AACvB,iBAAOA,cAAP;;AACJ;AACA,aAAKrc,KAAK,CAACU,SAAN,CAAgBgK,QAArB;AACI,cAAI8R,QAAQ,GAAG,IAAId,OAAO,CAAC9K,QAAZ,CAAqBmL,gBAArB,CAAf;;AACA,cAAI,CAACK,KAAL,EAAY;AACR,gBAAIK,QAAQ,GAAGD,QAAQ,CAACvM,OAAT,EAAf;AACA0L,wBAAY,CAAC9Q,cAAb,GAA8B4R,QAAQ,CAACvjC,MAAvC;AACA,mBAAOujC,QAAP;AACH,WAJD,MAIO;AACHD,oBAAQ,CAACrM,YAAT,CAAsB,UAAU95B,IAAV,EAAgB;AAClCgmC,4BAAc,GAAG5kC,MAAM,CAAC8sB,KAAP,CAAaluB,IAAI,CAAC6C,MAAlB,CAAjB;AACAyiC,0BAAY,CAAC9Q,cAAb,GAA8Bx0B,IAAI,CAAC6C,MAAnC;AACA7C,kBAAI,CAACs6B,IAAL,CAAU0L,cAAV;AACAzmC,sBAAQ,IAAIA,QAAQ,CAACymC,cAAD,CAApB;AACH,aALD;AAMH;;AACDG,kBAAQ,GAAG,IAAX;AACA;AAzBR;AA2BH,KA9BD,MA8BO,IAAIJ,KAAK,IAAIxmC,QAAb,EAAuB;AAC1BA,cAAQ,CAAC6B,MAAM,CAAC8sB,KAAP,CAAa,CAAb,CAAD,CAAR;AACH,KAFM,MAEA;AACH,aAAO9sB,MAAM,CAAC8sB,KAAP,CAAa,CAAb,CAAP;AACH;AACJ;;AAED,WAASmY,YAAT,CAAsBnB,MAAtB,EAA8BpQ,MAA9B,EAAsC;AAClC,WAAO,CAACoQ,MAAM,CAAC1P,YAAP,CAAoBV,MAAM,GAAG,CAA7B,KAAmC,CAApC,IAAyCoQ,MAAM,CAAC1P,YAAP,CAAoBV,MAApB,CAAhD;AACH;;AAED,WAASwR,UAAT,CAAoBtmC,IAApB,EAA0B;AACtB,QAAI80B,MAAM,GAAG,CAAb;AACA,QAAIyR,SAAJ,EAAehiC,IAAf,EAAqB81B,IAArB;;AACA,WAAOvF,MAAM,GAAG90B,IAAI,CAAC6C,MAArB,EAA6B;AACzB0jC,eAAS,GAAGvmC,IAAI,CAAC21B,YAAL,CAAkBb,MAAlB,CAAZ;AACAA,YAAM,IAAI,CAAV;AACAvwB,UAAI,GAAGvE,IAAI,CAAC21B,YAAL,CAAkBb,MAAlB,CAAP;AACAA,YAAM,IAAI,CAAV;AACAuF,UAAI,GAAGr6B,IAAI,CAAC4E,KAAL,CAAWkwB,MAAX,EAAmBA,MAAM,GAAGvwB,IAA5B,CAAP;AACAuwB,YAAM,IAAIvwB,IAAV;;AACA,UAAI8lB,SAAS,CAAC8U,QAAV,KAAuBoH,SAA3B,EAAsC;AAClCC,qCAA6B,CAACnM,IAAD,CAA7B;AACH;AACJ;AACJ,GAhKwC,CAkKzC;;;AACA,WAASmM,6BAAT,CAAuCxmC,IAAvC,EAA6C;AACzC,QAAIuE,IAAJ,EAAUiwB,cAAV,EAA0BM,MAA1B,EAAkCF,YAAlC;;AAEA,QAAI50B,IAAI,CAAC6C,MAAL,IAAewnB,SAAS,CAACmW,cAA7B,EAA6C;AACzCj8B,UAAI,GAAG8hC,YAAY,CAACrmC,IAAD,EAAOqqB,SAAS,CAACkW,gBAAjB,CAAnB;;AACA,UAAI+E,YAAY,CAAC/gC,IAAb,KAAsB8lB,SAAS,CAACgW,cAApC,EAAoD;AAChDiF,oBAAY,CAAC/gC,IAAb,GAAoBA,IAApB;AACH;AACJ;;AACD,QAAIvE,IAAI,CAAC6C,MAAL,IAAewnB,SAAS,CAACoW,YAA7B,EAA2C;AACvCjM,oBAAc,GAAG6R,YAAY,CAACrmC,IAAD,EAAOqqB,SAAS,CAACmW,cAAjB,CAA7B;;AACA,UAAI8E,YAAY,CAAC9Q,cAAb,KAAgCnK,SAAS,CAACgW,cAA9C,EAA8D;AAC1DiF,oBAAY,CAAC9Q,cAAb,GAA8BA,cAA9B;AACH;AACJ;;AACD,QAAIx0B,IAAI,CAAC6C,MAAL,IAAewnB,SAAS,CAACqW,YAA7B,EAA2C;AACvC5L,YAAM,GAAGuR,YAAY,CAACrmC,IAAD,EAAOqqB,SAAS,CAACoW,YAAjB,CAArB;;AACA,UAAI6E,YAAY,CAACxQ,MAAb,KAAwBzK,SAAS,CAACgW,cAAtC,EAAsD;AAClDiF,oBAAY,CAACxQ,MAAb,GAAsBA,MAAtB;AACH;AACJ;;AACD,QAAI90B,IAAI,CAAC6C,MAAL,IAAewnB,SAAS,CAACqW,YAAV,GAAyB,CAA5C,EAA+C;AAC3C9L,kBAAY,GAAG50B,IAAI,CAACw1B,YAAL,CAAkBnL,SAAS,CAACqW,YAA5B,CAAf;;AACA,UAAI4E,YAAY,CAAC1Q,YAAb,KAA8BvK,SAAS,CAACiW,cAA5C,EAA4D;AACxDgF,oBAAY,CAAC1Q,YAAb,GAA4BA,YAA5B;AACH;AACJ;AACJ;;AAED,SAAO;AACH,QAAInJ,SAAJ,GAAgB;AACZ,aAAO8Z,UAAU,CAACjkC,QAAX,EAAP;AACH,KAHE;;AAIH,QAAImlC,YAAJ,GAAmB;AACf,aAAOlB,UAAP;AACH,KANE;;AAOH,QAAI9Z,SAAJ,CAAcxjB,GAAd,EAAmB;AACfs9B,gBAAU,GAAG5b,KAAK,CAACiJ,QAAN,CAAe3qB,GAAf,CAAb;AACA,UAAIy+B,QAAQ,GAAGnB,UAAU,CAACA,UAAU,CAAC1iC,MAAX,GAAoB,CAArB,CAAzB;AACA4iC,kBAAY,GAAGiB,QAAQ,KAAK,EAAb,IAAmBA,QAAQ,KAAK,EAA/C;AACApB,kBAAY,CAAC7Q,cAAb,GAA8B8Q,UAAU,CAAC1iC,MAAzC;AACH,KAZE;;AAcH,QAAI8jC,KAAJ,GAAY;AACR,aAAOhB,MAAP;AACH,KAhBE;;AAiBH,QAAIgB,KAAJ,CAAU1+B,GAAV,EAAe;AACX09B,YAAM,GAAG19B,GAAT;AACAq9B,kBAAY,CAAC5Q,WAAb,GAA2BzsB,GAAG,CAACpF,MAA/B;AACAyjC,gBAAU,CAACr+B,GAAD,CAAV;AACH,KArBE;;AAuBH,QAAI0kB,OAAJ,GAAc;AACV,aAAO6Y,QAAQ,CAAClkC,QAAT,EAAP;AACH,KAzBE;;AA0BH,QAAIqrB,OAAJ,CAAY1kB,GAAZ,EAAiB;AACbu9B,cAAQ,GAAG7b,KAAK,CAACiJ,QAAN,CAAe3qB,GAAf,CAAX;AACAq9B,kBAAY,CAAC3Q,aAAb,GAA6B6Q,QAAQ,CAAC3iC,MAAtC;AACH,KA7BE;;AA+BH,QAAIwQ,IAAJ,GAAW;AACP,UAAIuzB,CAAC,GAAGrB,UAAU,CAACjkC,QAAX,EAAR;;AACA,aAAOmkC,YAAY,GACbmB,CAAC,CACItf,MADL,CACYsf,CAAC,CAAC/jC,MAAF,GAAW,CADvB,EAEKwE,KAFL,CAEW,GAFX,EAGKiK,GAHL,EADa,GAKbs1B,CAAC,CAACv/B,KAAF,CAAQ,GAAR,EAAaiK,GAAb,EALN;AAMH,KAvCE;;AAwCH,QAAI8d,WAAJ,GAAkB;AACd,aAAOqW,YAAP;AACH,KA1CE;;AA4CHoB,qBAAiB,EAAE,YAAY;AAC3B,aAAOX,QAAQ,CAAC,KAAD,EAAQ,IAAR,CAAf;AACH,KA9CE;AAgDHY,0BAAsB,EAAE;AAAU;AAAavnC,YAAvB,EAAiC;AACrD2mC,cAAQ,CAAC,IAAD,EAAO3mC,QAAP,CAAR;AACH,KAlDE;AAoDHytB,WAAO,EAAE,UAAU3kB,KAAV,EAAiB;AACtBq9B,sBAAgB,GAAG/b,KAAK,CAACiJ,QAAN,CAAevqB,KAAf,CAAnB;;AACA,UAAI,CAACo9B,YAAD,IAAiBC,gBAAgB,CAAC7iC,MAAtC,EAA8C;AAC1CyiC,oBAAY,CAAC/gC,IAAb,GAAoBmhC,gBAAgB,CAAC7iC,MAArC;AACAyiC,oBAAY,CAACnjC,MAAb,GAAsBwnB,KAAK,CAACU,SAAN,CAAgBgK,QAAtC;AACAiR,oBAAY,CAAChR,GAAb,GAAmB3K,KAAK,CAACkb,KAAN,CAAYx8B,KAAZ,CAAnB;AACAi9B,oBAAY,CAACyB,OAAb,GAAuB,IAAvB;AACH,OALD,MAKO;AACH;AACAzB,oBAAY,CAACnjC,MAAb,GAAsBwnB,KAAK,CAACU,SAAN,CAAgB+J,MAAtC;AACH;AACJ,KA/DE;AAiEHlI,WAAO,EAAE,UAAUD,IAAV,EAAgB;AACrB,UAAIqZ,YAAY,CAACyB,OAAjB,EAA0B;AACtB,eAAOrB,gBAAP;AACH,OAFD,MAEO;AACH,eAAOI,UAAU,CAAC,KAAD,EAAQ,IAAR,EAAc7Z,IAAd,CAAjB;AACH;AACJ,KAvEE;AAyEHG,gBAAY,EAAE;AAAU;AAAa7sB,YAAvB,EAAiC0sB,IAAjC,EAAuC;AACjD,UAAIqZ,YAAY,CAACyB,OAAjB,EAA0B;AACtBxnC,gBAAQ,CAACmmC,gBAAD,CAAR;AACH,OAFD,MAEO;AACHI,kBAAU,CAAC,IAAD,EAAOvmC,QAAP,EAAiB0sB,IAAjB,CAAV;AACH;AACJ,KA/EE;;AAiFH,QAAI6C,IAAJ,CAASA,IAAT,EAAe;AACXwW,kBAAY,CAACxW,IAAb,GAAoBA,IAApB;AACH,KAnFE;;AAoFH,QAAIA,IAAJ,GAAW;AACP,aAAOwW,YAAY,CAACxW,IAApB;AACH,KAtFE;;AAwFH,QAAIpD,MAAJ;AAAW;AAAW1rB,QAAtB,EAA4B;AACxBslC,kBAAY,CAACjP,cAAb,CAA4Br2B,IAA5B;AACH,KA1FE;;AA4FH,QAAI0rB,MAAJ,GAAa;AACT,aAAO4Z,YAAP;AACH,KA9FE;;AAgGH0B,cAAU,EAAE,YAAY;AACpB;AACA,UAAItb,MAAM,GAAG4Z,YAAY,CAAC5N,mBAAb,EAAb;;AACA,UAAIuP,MAAM,GAAGtd,KAAK,CAACU,SAAN,CAAgB4K,MAA7B,CAHoB,CAIpB;;AACAsQ,gBAAU,CAACjL,IAAX,CAAgB5O,MAAhB,EAAwBub,MAAxB;;AACAA,YAAM,IAAI1B,UAAU,CAAC1iC,MAArB,CANoB,CAOpB;;AACA,UAAIyiC,YAAY,CAAC5Q,WAAjB,EAA8B;AAC1BiR,cAAM,CAACrL,IAAP,CAAY5O,MAAZ,EAAoBub,MAApB;;AACAA,cAAM,IAAI3B,YAAY,CAAC5Q,WAAvB;AACH,OAXmB,CAYpB;;;AACA,UAAI4Q,YAAY,CAAC3Q,aAAjB,EAAgC;AAC5B6Q,gBAAQ,CAAClL,IAAT,CAAc5O,MAAd,EAAsBub,MAAtB;AACH;;AACD,aAAOvb,MAAP;AACH,KAjHE;AAmHH/Y,UAAM,EAAE,YAAY;AAChB,YAAMilB,KAAK,GAAG,UAAUC,EAAV,EAAc;AACxB,eAAO,OAAQA,EAAE,IAAIA,EAAE,CAACh1B,MAAH,GAAY,eAAnB,IAAuC,MAA9C,IAAwD,GAA/D;AACH,OAFD;;AAIA,aAAO;AACH4oB,iBAAS,EAAE,KAAKA,SADb;AAEHpY,YAAI,EAAE,KAAKA,IAFR;AAGHsZ,eAAO,EAAE,KAAKA,OAHX;AAIHyC,mBAAW,EAAE,KAAKA,WAJf;AAKH1D,cAAM,EAAE4Z,YAAY,CAAC3yB,MAAb,EALL;AAMHqzB,sBAAc,EAAEpO,KAAK,CAAClmB,KAAD,CANlB;AAOH1R,YAAI,EAAE43B,KAAK,CAAC8N,gBAAD;AAPR,OAAP;AASH,KAjIE;AAmIHpkC,YAAQ,EAAE,YAAY;AAClB,aAAOW,IAAI,CAACC,SAAL,CAAe,KAAKyQ,MAAL,EAAf,EAA8B,IAA9B,EAAoC,IAApC,CAAP;AACH;AArIE,GAAP;AAuIH,CAvUD,C;;;;;;;;;;;ACLA,MAAMkX,QAAQ,GAAGnrB,mBAAO,CAAC,sDAAD,CAAxB;;AACA,MAAM0mC,OAAO,GAAG1mC,mBAAO,CAAC,0DAAD,CAAvB;;AACA,MAAMirB,KAAK,GAAGjrB,mBAAO,CAAC,oDAAD,CAArB;;AAEA6I,MAAM,CAACjH,OAAP,GAAiB;AAAU;AAAgBkqB,QAA1B;AAAoC;AAAczoB,OAAlD,EAA2D;AACxE,MAAImlC,SAAS,GAAG,EAAhB;AAAA,MACIC,UAAU,GAAG,EADjB;AAAA,MAEI3B,QAAQ,GAAGpkC,MAAM,CAAC8sB,KAAP,CAAa,CAAb,CAFf;AAAA,MAGIkZ,UAAU,GAAG,IAAIhC,OAAO,CAACpN,UAAZ,EAHjB;AAAA,MAIIqP,aAAa,GAAG,KAJpB,CADwE,CAOxE;;;AACA,QAAMjiB,IAAI,GAAGje,MAAM,CAACC,MAAP,CAAcD,MAAM,CAACsjB,MAAP,CAAc,IAAd,CAAd,EAAmC1oB,OAAnC,CAAb;AAEA,QAAQooB,MAAR,GAAmB/E,IAAnB,CAAQ+E,MAAR;;AAEA,MAAIK,QAAJ,EAAc;AACV;AACA8c,kBAAc,CAACliB,IAAI,CAACgF,WAAN,CAAd;AACH,GAHD,MAGO;AACH;AACAid,iBAAa,GAAG,IAAhB;AACH;;AAED,WAASE,cAAT,CAAwBhoC,QAAxB,EAAkC;AAC9B,UAAM84B,YAAY,GAAG+O,UAAU,CAAChP,WAAhC,CAD8B,CACe;;AAC7C,QAAItyB,KAAK,GAAGshC,UAAU,CAACtS,MAAvB,CAF8B,CAEC;;AAE/B,SAAK,IAAIrwB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4zB,YAApB,EAAkC5zB,CAAC,EAAnC,EAAuC;AACnC,UAAIs1B,GAAG,GAAGj0B,KAAV;AACA,YAAMwd,KAAK,GAAG,IAAIuG,QAAJ,CAAaW,QAAb,CAAd;AAEAlH,WAAK,CAACoI,MAAN,GAAelB,QAAQ,CAAC5lB,KAAT,CAAem1B,GAAf,EAAqBA,GAAG,IAAIpQ,KAAK,CAACU,SAAN,CAAgB4K,MAA5C,CAAf;AACA3R,WAAK,CAACmI,SAAN,GAAkBjB,QAAQ,CAAC5lB,KAAT,CAAem1B,GAAf,EAAqBA,GAAG,IAAIzW,KAAK,CAACoI,MAAN,CAAa+I,cAAzC,CAAlB;AAEA3uB,WAAK,IAAIwd,KAAK,CAACoI,MAAN,CAAasJ,eAAtB;AAEAz1B,cAAQ,CAAC+jB,KAAD,CAAR;AACH;AACJ;;AAED,WAAS8G,WAAT,GAAuB;AACnBid,iBAAa,GAAG,IAAhB;AACAF,cAAU,GAAG,EAAb;AACAD,aAAS,GAAG,IAAIv9B,KAAJ,CAAUy9B,UAAU,CAAChP,WAArB,CAAZ,CAHmB,CAG4B;;AAC/C,QAAItyB,KAAK,GAAGshC,UAAU,CAACtS,MAAvB,CAJmB,CAIY;;AAC/B,SAAK,IAAIrwB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGyiC,SAAS,CAACrkC,MAA9B,EAAsC4B,CAAC,EAAvC,EAA2C;AACvC,UAAIs1B,GAAG,GAAGj0B,KAAV;AAAA,UACIwd,KAAK,GAAG,IAAIuG,QAAJ,CAAaW,QAAb,CADZ;AAEAlH,WAAK,CAACoI,MAAN,GAAelB,QAAQ,CAAC5lB,KAAT,CAAem1B,GAAf,EAAqBA,GAAG,IAAIpQ,KAAK,CAACU,SAAN,CAAgB4K,MAA5C,CAAf;AAEA3R,WAAK,CAACmI,SAAN,GAAkBjB,QAAQ,CAAC5lB,KAAT,CAAem1B,GAAf,EAAqBA,GAAG,IAAIzW,KAAK,CAACoI,MAAN,CAAa+I,cAAzC,CAAlB;;AAEA,UAAInR,KAAK,CAACoI,MAAN,CAAagJ,WAAjB,EAA8B;AAC1BpR,aAAK,CAACqjB,KAAN,GAAcnc,QAAQ,CAAC5lB,KAAT,CAAem1B,GAAf,EAAqBA,GAAG,IAAIzW,KAAK,CAACoI,MAAN,CAAagJ,WAAzC,CAAd;AACH;;AAED,UAAIpR,KAAK,CAACoI,MAAN,CAAaiJ,aAAjB,EAAgCrR,KAAK,CAACqJ,OAAN,GAAgBnC,QAAQ,CAAC5lB,KAAT,CAAem1B,GAAf,EAAoBA,GAAG,GAAGzW,KAAK,CAACoI,MAAN,CAAaiJ,aAAvC,CAAhB;AAEhC7uB,WAAK,IAAIwd,KAAK,CAACoI,MAAN,CAAasJ,eAAtB;AAEAkS,eAAS,CAACziC,CAAD,CAAT,GAAe6e,KAAf;AACA6jB,gBAAU,CAAC7jB,KAAK,CAACmI,SAAP,CAAV,GAA8BnI,KAA9B;AACH;AACJ;;AAED,WAASgkB,cAAT;AAAwB;AAAYE,SAApC,EAA6C;AACzC,QAAI/iC,CAAC,GAAG+lB,QAAQ,CAAC3nB,MAAT,GAAkB8mB,KAAK,CAACU,SAAN,CAAgBkO,MAA1C;AAAA,QAAkD;AAC9ChE,OAAG,GAAGvvB,IAAI,CAACuvB,GAAL,CAAS,CAAT,EAAY9vB,CAAC,GAAG,MAAhB,CADV;AAAA,QACmC;AAC/BmiC,KAAC,GAAGrS,GAFR;AAAA,QAGIkT,QAAQ,GAAGjd,QAAQ,CAAC3nB,MAHxB;AAAA,QAII6kC,SAAS,GAAG,CAAC,CAJjB;AAAA,QAIoB;AAChBC,cAAU,GAAG,CALjB;;AAOA,SAAKljC,CAAL,EAAQA,CAAC,IAAImiC,CAAb,EAAgBniC,CAAC,EAAjB,EAAqB;AACjB,UAAI+lB,QAAQ,CAAC/lB,CAAD,CAAR,KAAgB,IAApB,EAA0B,SADT,CACmB;;AACpC,UAAI+lB,QAAQ,CAACgL,YAAT,CAAsB/wB,CAAtB,MAA6BklB,KAAK,CAACU,SAAN,CAAgBmO,MAAjD,EAAyD;AACrD;AACAkP,iBAAS,GAAGjjC,CAAZ;AACAkjC,kBAAU,GAAGljC,CAAb;AACAgjC,gBAAQ,GAAGhjC,CAAC,GAAGklB,KAAK,CAACU,SAAN,CAAgBkO,MAA/B,CAJqD,CAKrD;;AACAqO,SAAC,GAAGniC,CAAC,GAAGklB,KAAK,CAACU,SAAN,CAAgB0S,QAAxB;AACA;AACH;;AAED,UAAIvS,QAAQ,CAACgL,YAAT,CAAsB/wB,CAAtB,MAA6BklB,KAAK,CAACU,SAAN,CAAgB2S,QAAjD,EAA2D;AACvD;AACA4J,SAAC,GAAGrS,GAAJ;AACA;AACH;;AAED,UAAI/J,QAAQ,CAACgL,YAAT,CAAsB/wB,CAAtB,MAA6BklB,KAAK,CAACU,SAAN,CAAgBqO,QAAjD,EAA2D;AACvD;AACAgP,iBAAS,GAAGjjC,CAAZ;AACAgjC,gBAAQ,GAAGhjC,CAAC,GAAGklB,KAAK,CAACsP,eAAN,CAAsBzO,QAAtB,EAAgC/lB,CAAC,GAAGklB,KAAK,CAACU,SAAN,CAAgBgT,SAApD,CAAJ,GAAqE1T,KAAK,CAACU,SAAN,CAAgB+S,SAAhG;AACA;AACH;AACJ;;AAED,QAAI,CAAC,CAACsK,SAAN,EAAiB,MAAM,IAAIhmC,KAAJ,CAAUioB,KAAK,CAACuB,MAAN,CAAayW,cAAvB,CAAN;AAEjByF,cAAU,CAAC/Q,cAAX,CAA0B7L,QAAQ,CAAC5lB,KAAT,CAAe8iC,SAAf,EAA0BD,QAA1B,CAA1B;;AACA,QAAIL,UAAU,CAACzS,aAAf,EAA8B;AAC1B6Q,cAAQ,GAAGhb,QAAQ,CAAC5lB,KAAT,CAAe+iC,UAAU,GAAGhe,KAAK,CAACU,SAAN,CAAgBkO,MAA5C,CAAX;AACH;;AACD,QAAIiP,OAAJ,EAAapd,WAAW;AAC3B;;AAED,WAASwd,WAAT,GAAuB;AACnB,QAAIV,SAAS,CAACrkC,MAAV,GAAmB,CAAnB,IAAwB,CAACsnB,MAA7B,EAAqC;AACjC+c,eAAS,CAAC/1B,IAAV,CAAe,CAACJ,CAAD,EAAIC,CAAJ,KAAUD,CAAC,CAAC0a,SAAF,CAAYoc,WAAZ,GAA0BC,aAA1B,CAAwC92B,CAAC,CAACya,SAAF,CAAYoc,WAAZ,EAAxC,CAAzB;AACH;AACJ;;AAED,SAAO;AACH;AACR;AACA;AACA;AACQ,QAAI7/B,OAAJ,GAAc;AACV,UAAI,CAACq/B,aAAL,EAAoB;AAChBjd,mBAAW;AACd;;AACD,aAAO8c,SAAP;AACH,KAVE;;AAYH;AACR;AACA;AACA;AACQ,QAAIva,OAAJ,GAAc;AACV,aAAO6Y,QAAQ,CAAClkC,QAAT,EAAP;AACH,KAlBE;;AAmBH,QAAIqrB,OAAJ,CAAY1kB,GAAZ,EAAiB;AACbu9B,cAAQ,GAAG7b,KAAK,CAACiJ,QAAN,CAAe3qB,GAAf,CAAX;AACAm/B,gBAAU,CAACzS,aAAX,GAA2B6Q,QAAQ,CAAC3iC,MAApC;AACH,KAtBE;;AAwBH6sB,iBAAa,EAAE,YAAY;AACvB,UAAI,CAAC2X,aAAL,EAAoB;AAChB,eAAOD,UAAU,CAAChP,WAAlB;AACH;;AAED,aAAO8O,SAAS,CAACrkC,MAAjB;AACH,KA9BE;AAgCH2F,WAAO,EAAE,UAAUjJ,QAAV,EAAoB;AACzB,UAAI,CAAC8nC,aAAL,EAAoB;AAChBE,sBAAc,CAAChoC,QAAD,CAAd;AACA;AACH;;AAED2nC,eAAS,CAAC1+B,OAAV,CAAkBjJ,QAAlB;AACH,KAvCE;;AAyCH;AACR;AACA;AACA;AACA;AACA;AACQgsB,YAAQ,EAAE;AAAU;AAAWE,aAArB,EAAgC;AACtC,UAAI,CAAC4b,aAAL,EAAoB;AAChBjd,mBAAW;AACd;;AACD,aAAO+c,UAAU,CAAC1b,SAAD,CAAV,IAAyB,IAAhC;AACH,KApDE;;AAsDH;AACR;AACA;AACA;AACA;AACQ+D,YAAQ,EAAE;AAAU;AAAalM,SAAvB,EAA8B;AACpC,UAAI,CAAC+jB,aAAL,EAAoB;AAChBjd,mBAAW;AACd;;AACD8c,eAAS,CAACviC,IAAV,CAAe2e,KAAf;AACA6jB,gBAAU,CAAC7jB,KAAK,CAACmI,SAAP,CAAV,GAA8BnI,KAA9B;AACA8jB,gBAAU,CAAC/O,YAAX,GAA0B6O,SAAS,CAACrkC,MAApC;AACH,KAlEE;;AAoEH;AACR;AACA;AACA;AACA;AACA;AACQ4pB,eAAW,EAAE;AAAU;AAAWhB,aAArB,EAAgC;AACzC,UAAI,CAAC4b,aAAL,EAAoB;AAChBjd,mBAAW;AACd;;AACD,UAAI9G,KAAK,GAAG6jB,UAAU,CAAC1b,SAAD,CAAtB;;AACA,UAAInI,KAAK,IAAIA,KAAK,CAAC8L,WAAnB,EAAgC;AAC5B,YAAI2Y,KAAK,GAAG,IAAZ;;AACA,aAAK1X,gBAAL,CAAsB/M,KAAtB,EAA6B9a,OAA7B,CAAqC,UAAU8nB,KAAV,EAAiB;AAClD,cAAIA,KAAK,CAAC7E,SAAN,KAAoBA,SAAxB,EAAmC;AAC/Bsc,iBAAK,CAACtb,WAAN,CAAkB6D,KAAK,CAAC7E,SAAxB;AACH;AACJ,SAJD;AAKH;;AACDyb,eAAS,CAAC10B,MAAV,CAAiB00B,SAAS,CAACnvB,OAAV,CAAkBuL,KAAlB,CAAjB,EAA2C,CAA3C;AACA,aAAO6jB,UAAU,CAAC1b,SAAD,CAAjB;AACA2b,gBAAU,CAAC/O,YAAX,GAA0B6O,SAAS,CAACrkC,MAApC;AACH,KA1FE;;AA4FH;AACR;AACA;AACA;AACA;AACA;AACQwtB,oBAAgB,EAAE;AAAU;AAAa/M,SAAvB,EAA8B;AAC5C,UAAI,CAAC+jB,aAAL,EAAoB;AAChBjd,mBAAW;AACd;;AACD,UAAI9G,KAAK,IAAIA,KAAK,CAAC8L,WAAnB,EAAgC;AAC5B,cAAMhG,IAAI,GAAG,EAAb;AACA,cAAM/V,IAAI,GAAGiQ,KAAK,CAACmI,SAAnB;AACA,cAAM8N,GAAG,GAAGlmB,IAAI,CAACxQ,MAAjB;AAEAqkC,iBAAS,CAAC1+B,OAAV,CAAkB,UAAUw/B,QAAV,EAAoB;AAClC,cAAIA,QAAQ,CAACvc,SAAT,CAAmBnE,MAAnB,CAA0B,CAA1B,EAA6BiS,GAA7B,MAAsClmB,IAA1C,EAAgD;AAC5C+V,gBAAI,CAACzkB,IAAL,CAAUqjC,QAAV;AACH;AACJ,SAJD;AAKA,eAAO5e,IAAP;AACH;;AACD,aAAO,EAAP;AACH,KAnHE;;AAqHH;AACR;AACA;AACA;AACA;AACQiJ,oBAAgB,EAAE,YAAY;AAC1B,UAAI,CAACgV,aAAL,EAAoB;AAChBjd,mBAAW;AACd;;AACDwd,iBAAW;AAEX,YAAMK,SAAS,GAAG,EAAlB;AACA,YAAMC,YAAY,GAAG,EAArB;AACA,UAAIC,SAAS,GAAG,CAAhB;AACA,UAAIC,MAAM,GAAG,CAAb;AAEAhB,gBAAU,CAAC7iC,IAAX,GAAkB,CAAlB;AACA6iC,gBAAU,CAACtS,MAAX,GAAoB,CAApB;;AAEA,WAAK,MAAMxR,KAAX,IAAoB4jB,SAApB,EAA+B;AAC3B;AACA,cAAMlB,cAAc,GAAG1iB,KAAK,CAACujB,iBAAN,EAAvB,CAF2B,CAG3B;;AACAvjB,aAAK,CAACoI,MAAN,CAAaoJ,MAAb,GAAsBsT,MAAtB;AACA,cAAM9S,UAAU,GAAGhS,KAAK,CAACoI,MAAN,CAAa6L,kBAAb,EAAnB;AACA,cAAM8Q,YAAY,GAAG/kB,KAAK,CAACmjB,YAAN,CAAmB5jC,MAAxC,CAN2B,CAO3B;;AACA,cAAMylC,UAAU,GAAGlnC,MAAM,CAAC8sB,KAAP,CAAama,YAAY,GAAG/kB,KAAK,CAACqjB,KAAN,CAAY9jC,MAAxC,CAAnB;AACAygB,aAAK,CAACmjB,YAAN,CAAmBnM,IAAnB,CAAwBgO,UAAxB,EAAoC,CAApC;AACAA,kBAAU,CAAChO,IAAX,CAAgBhX,KAAK,CAACqjB,KAAtB,EAA6B0B,YAA7B,EAV2B,CAY3B;;AACA,cAAME,UAAU,GAAGjT,UAAU,CAACzyB,MAAX,GAAoBylC,UAAU,CAACzlC,MAA/B,GAAwCmjC,cAAc,CAACnjC,MAA1E;AACAulC,cAAM,IAAIG,UAAV,CAd2B,CAgB3B;;AACAN,iBAAS,CAACtjC,IAAV,CAAe2wB,UAAf;AACA2S,iBAAS,CAACtjC,IAAV,CAAe2jC,UAAf;AACAL,iBAAS,CAACtjC,IAAV,CAAeqhC,cAAf,EAnB2B,CAqB3B;;AACA,cAAMwC,WAAW,GAAGllB,KAAK,CAAC0jB,UAAN,EAApB;AACAkB,oBAAY,CAACvjC,IAAb,CAAkB6jC,WAAlB,EAvB2B,CAwB3B;;AACApB,kBAAU,CAAC7iC,IAAX,IAAmBikC,WAAW,CAAC3lC,MAA/B;AACAslC,iBAAS,IAAII,UAAU,GAAGC,WAAW,CAAC3lC,MAAtC;AACH;;AAEDslC,eAAS,IAAIf,UAAU,CAAC9O,cAAxB,CA3C0B,CA2Cc;AACxC;;AACA8O,gBAAU,CAACtS,MAAX,GAAoBsT,MAApB;AAEAA,YAAM,GAAG,CAAT;AACA,YAAMK,SAAS,GAAGrnC,MAAM,CAAC8sB,KAAP,CAAaia,SAAb,CAAlB,CAhD0B,CAiD1B;;AACA,WAAK,MAAMnmC,OAAX,IAAsBimC,SAAtB,EAAiC;AAC7BjmC,eAAO,CAACs4B,IAAR,CAAamO,SAAb,EAAwBL,MAAxB;AACAA,cAAM,IAAIpmC,OAAO,CAACa,MAAlB;AACH,OArDyB,CAuD1B;;;AACA,WAAK,MAAMb,OAAX,IAAsBkmC,YAAtB,EAAoC;AAChClmC,eAAO,CAACs4B,IAAR,CAAamO,SAAb,EAAwBL,MAAxB;AACAA,cAAM,IAAIpmC,OAAO,CAACa,MAAlB;AACH,OA3DyB,CA6D1B;;;AACA,YAAM6lC,EAAE,GAAGtB,UAAU,CAAC9N,QAAX,EAAX;;AACA,UAAIkM,QAAJ,EAAc;AACVA,gBAAQ,CAAClL,IAAT,CAAcoO,EAAd,EAAkB/e,KAAK,CAACU,SAAN,CAAgBkO,MAAlC,EADU,CACiC;;AAC9C;;AACDmQ,QAAE,CAACpO,IAAH,CAAQmO,SAAR,EAAmBL,MAAnB;AAEA,aAAOK,SAAP;AACH,KA/LE;AAiMH9V,iBAAa,EAAE;AAAU;AAAaE,aAAvB;AAAkC;AAAaC,UAA/C;AAAuD;AAAaC,eAApE;AAAiF;AAAaC,aAA9F,EAAyG;AACpH,UAAI;AACA,YAAI,CAACqU,aAAL,EAAoB;AAChBjd,qBAAW;AACd;;AACDwd,mBAAW;AAEX,cAAMK,SAAS,GAAG,EAAlB;AACA,cAAMC,YAAY,GAAG,EAArB;AACA,YAAIC,SAAS,GAAG,CAAhB;AACA,YAAIC,MAAM,GAAG,CAAb;AAEAhB,kBAAU,CAAC7iC,IAAX,GAAkB,CAAlB;AACA6iC,kBAAU,CAACtS,MAAX,GAAoB,CAApB;;AAEA,cAAM6T,eAAe,GAAG,UAAUC,UAAV,EAAsB;AAC1C,cAAIA,UAAU,CAAC/lC,MAAf,EAAuB;AACnB,kBAAMygB,KAAK,GAAGslB,UAAU,CAACt3B,GAAX,EAAd;AACA,kBAAM+B,IAAI,GAAGiQ,KAAK,CAACmI,SAAN,GAAkBnI,KAAK,CAACqjB,KAAN,CAAYrlC,QAAZ,EAA/B;AACA,gBAAIyxB,WAAJ,EAAiBA,WAAW,CAAC1f,IAAD,CAAX;AACjBiQ,iBAAK,CAACwjB,sBAAN,CAA6B,UAAUd,cAAV,EAA0B;AACnD,kBAAIhT,SAAJ,EAAeA,SAAS,CAAC3f,IAAD,CAAT;AAEfiQ,mBAAK,CAACoI,MAAN,CAAaoJ,MAAb,GAAsBsT,MAAtB,CAHmD,CAInD;;AACA,oBAAM9S,UAAU,GAAGhS,KAAK,CAACoI,MAAN,CAAa6L,kBAAb,EAAnB;AACA,oBAAM+Q,UAAU,GAAGlnC,MAAM,CAAC8sB,KAAP,CAAa7a,IAAI,CAACxQ,MAAlB,EAA0BwQ,IAA1B,CAAnB;AACA,oBAAMk1B,UAAU,GAAGjT,UAAU,CAACzyB,MAAX,GAAoBylC,UAAU,CAACzlC,MAA/B,GAAwCmjC,cAAc,CAACnjC,MAA1E;AAEAulC,oBAAM,IAAIG,UAAV;AAEAN,uBAAS,CAACtjC,IAAV,CAAe2wB,UAAf;AACA2S,uBAAS,CAACtjC,IAAV,CAAe2jC,UAAf;AACAL,uBAAS,CAACtjC,IAAV,CAAeqhC,cAAf;AAEA,oBAAMwC,WAAW,GAAGllB,KAAK,CAAC0jB,UAAN,EAApB;AACAkB,0BAAY,CAACvjC,IAAb,CAAkB6jC,WAAlB;AACApB,wBAAU,CAAC7iC,IAAX,IAAmBikC,WAAW,CAAC3lC,MAA/B;AACAslC,uBAAS,IAAII,UAAU,GAAGC,WAAW,CAAC3lC,MAAtC;AAEA8lC,6BAAe,CAACC,UAAD,CAAf;AACH,aArBD;AAsBH,WA1BD,MA0BO;AACHT,qBAAS,IAAIf,UAAU,CAAC9O,cAAxB,CADG,CACqC;AACxC;;AACA8O,sBAAU,CAACtS,MAAX,GAAoBsT,MAApB;AAEAA,kBAAM,GAAG,CAAT;AACA,kBAAMK,SAAS,GAAGrnC,MAAM,CAAC8sB,KAAP,CAAaia,SAAb,CAAlB;AACAF,qBAAS,CAACz/B,OAAV,CAAkB,UAAUxG,OAAV,EAAmB;AACjCA,qBAAO,CAACs4B,IAAR,CAAamO,SAAb,EAAwBL,MAAxB,EADiC,CACA;;AACjCA,oBAAM,IAAIpmC,OAAO,CAACa,MAAlB;AACH,aAHD;AAIAqlC,wBAAY,CAAC1/B,OAAb,CAAqB,UAAUxG,OAAV,EAAmB;AACpCA,qBAAO,CAACs4B,IAAR,CAAamO,SAAb,EAAwBL,MAAxB,EADoC,CACH;;AACjCA,oBAAM,IAAIpmC,OAAO,CAACa,MAAlB;AACH,aAHD;AAKA,kBAAM6lC,EAAE,GAAGtB,UAAU,CAAC9N,QAAX,EAAX;;AACA,gBAAIkM,QAAJ,EAAc;AACVA,sBAAQ,CAAClL,IAAT,CAAcoO,EAAd,EAAkB/e,KAAK,CAACU,SAAN,CAAgBkO,MAAlC,EADU,CACiC;;AAC9C;;AAEDmQ,cAAE,CAACpO,IAAH,CAAQmO,SAAR,EAAmBL,MAAnB,EArBG,CAqByB;;AAE5BvV,qBAAS,CAAC4V,SAAD,CAAT;AACH;AACJ,SApDD;;AAsDAE,uBAAe,CAACzB,SAAD,CAAf;AACH,OArED,CAqEE,OAAO5jC,CAAP,EAAU;AACRwvB,cAAM,CAACxvB,CAAD,CAAN;AACH;AACJ;AA1QE,GAAP;AA4QH,CA3XD,C;;;;;;;;;;;;ACJa;;AAEb,IAAIulC,kBAAkB,GAAGnqC,mBAAO,CAAC,kGAAD,CAAhC;;AACA,IAAIoqC,IAAI,GAAGpqC,mBAAO,CAAC,sEAAD,CAAlB;;AACA,IAAIqqC,yBAAyB,GAAGrqC,mBAAO,CAAC,gHAAD,CAAvC;;AACA,IAAIsqC,GAAG,GAAGtqC,mBAAO,CAAC,oEAAD,CAAjB;;AACA,IAAIuqC,WAAW,GAAGvqC,mBAAO,CAAC,oFAAD,CAAzB;;AACA,IAAIwqC,UAAU,GAAGxqC,mBAAO,CAAC,kFAAD,CAAxB;;AACA,IAAIyqC,iBAAiB,GAAGzqC,mBAAO,CAAC,gGAAD,CAA/B;;AACA,IAAI0qC,SAAS,GAAG1qC,mBAAO,CAAC,gFAAD,CAAvB;;AACA,IAAI2qC,QAAQ,GAAG3qC,mBAAO,CAAC,8EAAD,CAAtB;;AACA,IAAI4qC,QAAQ,GAAG5qC,mBAAO,CAAC,8EAAD,CAAtB;;AACA,IAAI6qC,SAAS,GAAG7qC,mBAAO,CAAC,kEAAD,CAAvB;;AACA,IAAI0oB,QAAQ,GAAG1oB,mBAAO,CAAC,oDAAD,CAAtB,C,CAEA;;;AACA,IAAI8qC,WAAW,GAAGriC,MAAM,CAAC,GAAD,CAAxB;AACA,IAAIsiC,WAAW,GAAGD,WAAW,CAAC,CAAD,CAAX,KAAmB,GAAnB,IAA0B,EAAE,KAAKA,WAAP,CAA5C;AAEA,IAAIE,QAAQ,GAAGH,SAAS,CAAC,wBAAD,CAAxB;;AAEAhiC,MAAM,CAACjH,OAAP,GAAiB,SAASyJ,MAAT,CAAgB4/B,UAAhB,EAA4B;AAC5C,MAAIC,CAAC,GAAGP,QAAQ,CAAC,IAAD,CAAhB;AACA,MAAIxb,IAAI,GAAG4b,WAAW,IAAIriB,QAAQ,CAACwiB,CAAD,CAAvB,GAA6BF,QAAQ,CAACE,CAAD,EAAI,EAAJ,CAArC,GAA+CA,CAA1D;AACA,MAAIrQ,GAAG,GAAG4P,iBAAiB,CAACtb,IAAD,CAA3B,CAH4C,CAK5C;;AACA,MAAI,CAACqb,UAAU,CAACS,UAAD,CAAf,EAA6B;AAC5B,UAAM,IAAI7wB,SAAJ,CAAc,oDAAd,CAAN;AACA;;AAED,MAAI+wB,OAAJ;;AACA,MAAIhxB,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACzBgnC,WAAO,GAAGhxB,SAAS,CAAC,CAAD,CAAnB;AACA;;AAED,MAAIixB,CAAC,GAAGjB,kBAAkB,CAACe,CAAD,EAAI,CAAJ,CAA1B;AACA,MAAI7N,CAAC,GAAG,CAAR;AACA,MAAI18B,EAAE,GAAG,CAAT;;AAEA,SAAO08B,CAAC,GAAGxC,GAAX,EAAgB;AACf,QAAIwQ,EAAE,GAAGT,QAAQ,CAACvN,CAAD,CAAjB;AACA,QAAIiO,QAAQ,GAAGf,WAAW,CAACW,CAAD,EAAIG,EAAJ,CAA1B;;AACA,QAAIC,QAAJ,EAAc;AACb,UAAIC,MAAM,GAAGjB,GAAG,CAACY,CAAD,EAAIG,EAAJ,CAAhB;AACA,UAAIG,QAAQ,GAAGd,SAAS,CAACN,IAAI,CAACa,UAAD,EAAaE,OAAb,EAAsB,CAACI,MAAD,EAASlO,CAAT,EAAY6N,CAAZ,CAAtB,CAAL,CAAxB;;AACA,UAAIM,QAAJ,EAAc;AACbnB,iCAAyB,CAACe,CAAD,EAAIR,QAAQ,CAACjqC,EAAD,CAAZ,EAAkB4qC,MAAlB,CAAzB;AACA5qC,UAAE,IAAI,CAAN;AACA;AACD;;AACD08B,KAAC,IAAI,CAAL;AACA;;AAED,SAAO+N,CAAP;AACA,CAlCD,C;;;;;;;;;;;;ACrBa;;AAEb,IAAIK,MAAM,GAAGzrC,mBAAO,CAAC,oEAAD,CAApB;;AACA,IAAI0rC,sBAAsB,GAAG1rC,mBAAO,CAAC,0GAAD,CAApC;;AACA,IAAI6qC,SAAS,GAAG7qC,mBAAO,CAAC,kEAAD,CAAvB;;AAEA,IAAI2rC,cAAc,GAAG3rC,mBAAO,CAAC,iFAAD,CAA5B;;AACA,IAAI4rC,WAAW,GAAG5rC,mBAAO,CAAC,qEAAD,CAAzB;;AACA,IAAI6rC,QAAQ,GAAGD,WAAW,EAA1B;;AACA,IAAIE,IAAI,GAAG9rC,mBAAO,CAAC,6DAAD,CAAlB;;AAEA,IAAI+rC,MAAM,GAAGlB,SAAS,CAAC,uBAAD,CAAtB,C,CAEA;;AACA,IAAImB,KAAK,GAAG,SAAS3gC,MAAT,CAAgBmO,KAAhB,EAAuByxB,UAAvB,EAAmC;AAC9CS,wBAAsB,CAAClyB,KAAD,CAAtB;AACA,SAAOqyB,QAAQ,CAACI,KAAT,CAAezyB,KAAf,EAAsBuyB,MAAM,CAAC5xB,SAAD,EAAY,CAAZ,CAA5B,CAAP;AACA,CAHD;;AAIAsxB,MAAM,CAACO,KAAD,EAAQ;AACbJ,aAAW,EAAEA,WADA;AAEbD,gBAAc,EAAEA,cAFH;AAGbG,MAAI,EAAEA;AAHO,CAAR,CAAN;AAMAjjC,MAAM,CAACjH,OAAP,GAAiBoqC,KAAjB,C;;;;;;;;;;;;ACxBa;;AAEb,IAAIE,wBAAwB,GAAGlsC,mBAAO,CAAC,8FAAD,CAAtC;;AAEA,IAAI2rC,cAAc,GAAG3rC,mBAAO,CAAC,iFAAD,CAA5B;;AAEA6I,MAAM,CAACjH,OAAP,GAAiB,SAASgqC,WAAT,GAAuB;AACvC,MAAInoC,MAAM,GAAGwH,KAAK,CAACZ,SAAN,CAAgBgB,MAA7B;AACA,SAAO6gC,wBAAwB,CAACzoC,MAAD,CAAxB,GAAmCA,MAAnC,GAA4CkoC,cAAnD;AACA,CAHD,C;;;;;;;;;;;;ACNa;;AAEb,IAAIF,MAAM,GAAGzrC,mBAAO,CAAC,oEAAD,CAApB;;AACA,IAAI4rC,WAAW,GAAG5rC,mBAAO,CAAC,qEAAD,CAAzB;;AAEA6I,MAAM,CAACjH,OAAP,GAAiB,SAASuqC,qBAAT,GAAiC;AACjD,MAAIN,QAAQ,GAAGD,WAAW,EAA1B;AACAH,QAAM,CACLxgC,KAAK,CAACZ,SADD,EAEL;AAAEgB,UAAM,EAAEwgC;AAAV,GAFK,EAGL;AAAExgC,UAAM,EAAE,YAAY;AAAE,aAAOJ,KAAK,CAACZ,SAAN,CAAgBgB,MAAhB,KAA2BwgC,QAAlC;AAA6C;AAArE,GAHK,CAAN;AAKA,SAAOA,QAAP;AACA,CARD,C;;;;;;;;;;;;ACLa;;AAEb,IAAIxgC,MAAM,GAAGrL,mBAAO,CAAC,8EAAD,CAApB;;AAEA6I,MAAM,CAACjH,OAAP,GAAiB,SAASwqC,oBAAT,GAAgC;AAChD,SAAO/gC,MAAM,CAAC,CACb,eADa,EAEb,gBAFa,EAGb,cAHa,EAIb,cAJa,EAKb,YALa,EAMb,YANa,EAOb,WAPa,EAQb,aARa,EASb,aATa,EAUb,YAVa,EAWb,mBAXa,CAAD,EAYV,UAAUghC,UAAV,EAAsB;AACxB,WAAO,OAAOC,MAAM,CAACD,UAAD,CAAb,KAA8B,UAArC;AACA,GAdY,CAAb;AAeA,CAhBD,C;;;;;;;;;;;;ACJa;;AAEb,IAAIE,YAAY,GAAGvsC,mBAAO,CAAC,4DAAD,CAA1B;;AAEA,IAAIwsC,QAAQ,GAAGxsC,mBAAO,CAAC,6CAAD,CAAtB;;AAEA,IAAIysC,QAAQ,GAAGD,QAAQ,CAACD,YAAY,CAAC,0BAAD,CAAb,CAAvB;;AAEA1jC,MAAM,CAACjH,OAAP,GAAiB,SAAS8qC,kBAAT,CAA4B/3B,IAA5B,EAAkCg4B,YAAlC,EAAgD;AAChE,MAAIC,SAAS,GAAGL,YAAY,CAAC53B,IAAD,EAAO,CAAC,CAACg4B,YAAT,CAA5B;;AACA,MAAI,OAAOC,SAAP,KAAqB,UAArB,IAAmCH,QAAQ,CAAC93B,IAAD,EAAO,aAAP,CAAR,GAAgC,CAAC,CAAxE,EAA2E;AAC1E,WAAO63B,QAAQ,CAACI,SAAD,CAAf;AACA;;AACD,SAAOA,SAAP;AACA,CAND,C;;;;;;;;;;;;ACRa;;AAEb,IAAIC,IAAI,GAAG7sC,mBAAO,CAAC,4DAAD,CAAlB;;AACA,IAAIusC,YAAY,GAAGvsC,mBAAO,CAAC,4DAAD,CAA1B;;AAEA,IAAI8sC,MAAM,GAAGP,YAAY,CAAC,4BAAD,CAAzB;AACA,IAAIQ,KAAK,GAAGR,YAAY,CAAC,2BAAD,CAAxB;AACA,IAAIS,aAAa,GAAGT,YAAY,CAAC,iBAAD,EAAoB,IAApB,CAAZ,IAAyCM,IAAI,CAACviC,IAAL,CAAUyiC,KAAV,EAAiBD,MAAjB,CAA7D;AAEA,IAAIG,KAAK,GAAGV,YAAY,CAAC,mCAAD,EAAsC,IAAtC,CAAxB;AACA,IAAIW,eAAe,GAAGX,YAAY,CAAC,yBAAD,EAA4B,IAA5B,CAAlC;AACA,IAAIY,IAAI,GAAGZ,YAAY,CAAC,YAAD,CAAvB;;AAEA,IAAIW,eAAJ,EAAqB;AACpB,MAAI;AACHA,mBAAe,CAAC,EAAD,EAAK,GAAL,EAAU;AAAEvjC,WAAK,EAAE;AAAT,KAAV,CAAf;AACA,GAFD,CAEE,OAAO/E,CAAP,EAAU;AACX;AACAsoC,mBAAe,GAAG,IAAlB;AACA;AACD;;AAEDrkC,MAAM,CAACjH,OAAP,GAAiB,SAAS4qC,QAAT,CAAkBY,gBAAlB,EAAoC;AACpD,MAAIC,IAAI,GAAGL,aAAa,CAACH,IAAD,EAAOE,KAAP,EAAc5yB,SAAd,CAAxB;;AACA,MAAI8yB,KAAK,IAAIC,eAAb,EAA8B;AAC7B,QAAII,IAAI,GAAGL,KAAK,CAACI,IAAD,EAAO,QAAP,CAAhB;;AACA,QAAIC,IAAI,CAACC,YAAT,EAAuB;AACtB;AACAL,qBAAe,CACdG,IADc,EAEd,QAFc,EAGd;AAAE1jC,aAAK,EAAE,IAAIwjC,IAAI,CAAC,CAAD,EAAIC,gBAAgB,CAACjpC,MAAjB,IAA2BgW,SAAS,CAAChW,MAAV,GAAmB,CAA9C,CAAJ;AAAjB,OAHc,CAAf;AAKA;AACD;;AACD,SAAOkpC,IAAP;AACA,CAdD;;AAgBA,IAAIG,SAAS,GAAG,SAASA,SAAT,GAAqB;AACpC,SAAOR,aAAa,CAACH,IAAD,EAAOC,MAAP,EAAe3yB,SAAf,CAApB;AACA,CAFD;;AAIA,IAAI+yB,eAAJ,EAAqB;AACpBA,iBAAe,CAACrkC,MAAM,CAACjH,OAAR,EAAiB,OAAjB,EAA0B;AAAE+H,SAAK,EAAE6jC;AAAT,GAA1B,CAAf;AACA,CAFD,MAEO;AACN3kC,QAAM,CAACjH,OAAP,CAAeqqC,KAAf,GAAuBuB,SAAvB;AACA,C;;;;;;;;;;;AC9CD,IAAIC,OAAO,GAAG;AACZ;AACAC,MAAI,EAAE;AACJ;AACAC,iBAAa,EAAE,UAASnrC,GAAT,EAAc;AAC3B,aAAOirC,OAAO,CAACG,GAAR,CAAYD,aAAZ,CAA0BE,QAAQ,CAACC,kBAAkB,CAACtrC,GAAD,CAAnB,CAAlC,CAAP;AACD,KAJG;AAMJ;AACAurC,iBAAa,EAAE,UAAS7U,KAAT,EAAgB;AAC7B,aAAO8U,kBAAkB,CAACC,MAAM,CAACR,OAAO,CAACG,GAAR,CAAYG,aAAZ,CAA0B7U,KAA1B,CAAD,CAAP,CAAzB;AACD;AATG,GAFM;AAcZ;AACA0U,KAAG,EAAE;AACH;AACAD,iBAAa,EAAE,UAASnrC,GAAT,EAAc;AAC3B,WAAK,IAAI02B,KAAK,GAAG,EAAZ,EAAgBnzB,CAAC,GAAG,CAAzB,EAA4BA,CAAC,GAAGvD,GAAG,CAAC2B,MAApC,EAA4C4B,CAAC,EAA7C,EACEmzB,KAAK,CAACjzB,IAAN,CAAWzD,GAAG,CAACmmB,UAAJ,CAAe5iB,CAAf,IAAoB,IAA/B;;AACF,aAAOmzB,KAAP;AACD,KANE;AAQH;AACA6U,iBAAa,EAAE,UAAS7U,KAAT,EAAgB;AAC7B,WAAK,IAAI12B,GAAG,GAAG,EAAV,EAAcuD,CAAC,GAAG,CAAvB,EAA0BA,CAAC,GAAGmzB,KAAK,CAAC/0B,MAApC,EAA4C4B,CAAC,EAA7C,EACEvD,GAAG,CAACyD,IAAJ,CAASioC,MAAM,CAACC,YAAP,CAAoBjV,KAAK,CAACnzB,CAAD,CAAzB,CAAT;;AACF,aAAOvD,GAAG,CAACuoB,IAAJ,CAAS,EAAT,CAAP;AACD;AAbE;AAfO,CAAd;AAgCAliB,MAAM,CAACjH,OAAP,GAAiB6rC,OAAjB,C;;;;;;;;;;;AChCA,CAAC,YAAW;AACV,MAAIW,SAAS,GACP,kEADN;AAAA,MAGAC,KAAK,GAAG;AACN;AACAC,QAAI,EAAE,UAASpG,CAAT,EAAY51B,CAAZ,EAAe;AACnB,aAAQ41B,CAAC,IAAI51B,CAAN,GAAY41B,CAAC,KAAM,KAAK51B,CAA/B;AACD,KAJK;AAMN;AACAi8B,QAAI,EAAE,UAASrG,CAAT,EAAY51B,CAAZ,EAAe;AACnB,aAAQ41B,CAAC,IAAK,KAAK51B,CAAZ,GAAmB41B,CAAC,KAAK51B,CAAhC;AACD,KATK;AAWN;AACAk8B,UAAM,EAAE,UAAStG,CAAT,EAAY;AAClB;AACA,UAAIA,CAAC,CAAC/nC,WAAF,IAAiByI,MAArB,EAA6B;AAC3B,eAAOylC,KAAK,CAACC,IAAN,CAAWpG,CAAX,EAAc,CAAd,IAAmB,UAAnB,GAAgCmG,KAAK,CAACC,IAAN,CAAWpG,CAAX,EAAc,EAAd,IAAoB,UAA3D;AACD,OAJiB,CAMlB;;;AACA,WAAK,IAAIniC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGmiC,CAAC,CAAC/jC,MAAtB,EAA8B4B,CAAC,EAA/B,EACEmiC,CAAC,CAACniC,CAAD,CAAD,GAAOsoC,KAAK,CAACG,MAAN,CAAatG,CAAC,CAACniC,CAAD,CAAd,CAAP;;AACF,aAAOmiC,CAAP;AACD,KAtBK;AAwBN;AACAuG,eAAW,EAAE,UAASvG,CAAT,EAAY;AACvB,WAAK,IAAIhP,KAAK,GAAG,EAAjB,EAAqBgP,CAAC,GAAG,CAAzB,EAA4BA,CAAC,EAA7B,EACEhP,KAAK,CAACjzB,IAAN,CAAWK,IAAI,CAACuF,KAAL,CAAWvF,IAAI,CAAC02B,MAAL,KAAgB,GAA3B,CAAX;;AACF,aAAO9D,KAAP;AACD,KA7BK;AA+BN;AACAwV,gBAAY,EAAE,UAASxV,KAAT,EAAgB;AAC5B,WAAK,IAAIyV,KAAK,GAAG,EAAZ,EAAgB5oC,CAAC,GAAG,CAApB,EAAuBuM,CAAC,GAAG,CAAhC,EAAmCvM,CAAC,GAAGmzB,KAAK,CAAC/0B,MAA7C,EAAqD4B,CAAC,IAAIuM,CAAC,IAAI,CAA/D,EACEq8B,KAAK,CAACr8B,CAAC,KAAK,CAAP,CAAL,IAAkB4mB,KAAK,CAACnzB,CAAD,CAAL,IAAa,KAAKuM,CAAC,GAAG,EAAxC;;AACF,aAAOq8B,KAAP;AACD,KApCK;AAsCN;AACAC,gBAAY,EAAE,UAASD,KAAT,EAAgB;AAC5B,WAAK,IAAIzV,KAAK,GAAG,EAAZ,EAAgB5mB,CAAC,GAAG,CAAzB,EAA4BA,CAAC,GAAGq8B,KAAK,CAACxqC,MAAN,GAAe,EAA/C,EAAmDmO,CAAC,IAAI,CAAxD,EACE4mB,KAAK,CAACjzB,IAAN,CAAY0oC,KAAK,CAACr8B,CAAC,KAAK,CAAP,CAAL,KAAoB,KAAKA,CAAC,GAAG,EAA9B,GAAqC,IAAhD;;AACF,aAAO4mB,KAAP;AACD,KA3CK;AA6CN;AACA2V,cAAU,EAAE,UAAS3V,KAAT,EAAgB;AAC1B,WAAK,IAAI4V,GAAG,GAAG,EAAV,EAAc/oC,CAAC,GAAG,CAAvB,EAA0BA,CAAC,GAAGmzB,KAAK,CAAC/0B,MAApC,EAA4C4B,CAAC,EAA7C,EAAiD;AAC/C+oC,WAAG,CAAC7oC,IAAJ,CAAS,CAACizB,KAAK,CAACnzB,CAAD,CAAL,KAAa,CAAd,EAAiBnD,QAAjB,CAA0B,EAA1B,CAAT;AACAksC,WAAG,CAAC7oC,IAAJ,CAAS,CAACizB,KAAK,CAACnzB,CAAD,CAAL,GAAW,GAAZ,EAAiBnD,QAAjB,CAA0B,EAA1B,CAAT;AACD;;AACD,aAAOksC,GAAG,CAAC/jB,IAAJ,CAAS,EAAT,CAAP;AACD,KApDK;AAsDN;AACAgkB,cAAU,EAAE,UAASD,GAAT,EAAc;AACxB,WAAK,IAAI5V,KAAK,GAAG,EAAZ,EAAgBsE,CAAC,GAAG,CAAzB,EAA4BA,CAAC,GAAGsR,GAAG,CAAC3qC,MAApC,EAA4Cq5B,CAAC,IAAI,CAAjD,EACEtE,KAAK,CAACjzB,IAAN,CAAWokB,QAAQ,CAACykB,GAAG,CAAClmB,MAAJ,CAAW4U,CAAX,EAAc,CAAd,CAAD,EAAmB,EAAnB,CAAnB;;AACF,aAAOtE,KAAP;AACD,KA3DK;AA6DN;AACA8V,iBAAa,EAAE,UAAS9V,KAAT,EAAgB;AAC7B,WAAK,IAAI32B,MAAM,GAAG,EAAb,EAAiBwD,CAAC,GAAG,CAA1B,EAA6BA,CAAC,GAAGmzB,KAAK,CAAC/0B,MAAvC,EAA+C4B,CAAC,IAAI,CAApD,EAAuD;AACrD,YAAIkpC,OAAO,GAAI/V,KAAK,CAACnzB,CAAD,CAAL,IAAY,EAAb,GAAoBmzB,KAAK,CAACnzB,CAAC,GAAG,CAAL,CAAL,IAAgB,CAApC,GAAyCmzB,KAAK,CAACnzB,CAAC,GAAG,CAAL,CAA5D;;AACA,aAAK,IAAIkjB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EACE,IAAIljB,CAAC,GAAG,CAAJ,GAAQkjB,CAAC,GAAG,CAAZ,IAAiBiQ,KAAK,CAAC/0B,MAAN,GAAe,CAApC,EACE5B,MAAM,CAAC0D,IAAP,CAAYmoC,SAAS,CAACc,MAAV,CAAkBD,OAAO,KAAK,KAAK,IAAIhmB,CAAT,CAAb,GAA4B,IAA7C,CAAZ,EADF,KAGE1mB,MAAM,CAAC0D,IAAP,CAAY,GAAZ;AACL;;AACD,aAAO1D,MAAM,CAACwoB,IAAP,CAAY,EAAZ,CAAP;AACD,KAxEK;AA0EN;AACAokB,iBAAa,EAAE,UAAS5sC,MAAT,EAAiB;AAC9B;AACAA,YAAM,GAAGA,MAAM,CAACinB,OAAP,CAAe,gBAAf,EAAiC,EAAjC,CAAT;;AAEA,WAAK,IAAI0P,KAAK,GAAG,EAAZ,EAAgBnzB,CAAC,GAAG,CAApB,EAAuBqpC,KAAK,GAAG,CAApC,EAAuCrpC,CAAC,GAAGxD,MAAM,CAAC4B,MAAlD,EACIirC,KAAK,GAAG,EAAErpC,CAAF,GAAM,CADlB,EACqB;AACnB,YAAIqpC,KAAK,IAAI,CAAb,EAAgB;AAChBlW,aAAK,CAACjzB,IAAN,CAAY,CAACmoC,SAAS,CAAC/0B,OAAV,CAAkB9W,MAAM,CAAC2sC,MAAP,CAAcnpC,CAAC,GAAG,CAAlB,CAAlB,IACNO,IAAI,CAAC+oC,GAAL,CAAS,CAAT,EAAY,CAAC,CAAD,GAAKD,KAAL,GAAa,CAAzB,IAA8B,CADzB,KACiCA,KAAK,GAAG,CAD1C,GAEJhB,SAAS,CAAC/0B,OAAV,CAAkB9W,MAAM,CAAC2sC,MAAP,CAAcnpC,CAAd,CAAlB,MAAyC,IAAIqpC,KAAK,GAAG,CAF5D;AAGD;;AACD,aAAOlW,KAAP;AACD;AAvFK,GAHR;AA6FArwB,QAAM,CAACjH,OAAP,GAAiBysC,KAAjB;AACD,CA/FD,I;;;;;;;;;;;ACEA,MAAMiB,gBAAN,CAAsB;AACpBnvC,aAAW,CAAC0F,IAAI,GAAC,GAAN,EAAU;AACnB,SAAKA,IAAL,GAAYA,IAAZ;AACA,SAAK1B,MAAL,GAAc,CAAd;AACA,SAAKs3B,GAAL,GAAW/4B,MAAM,CAAC8sB,KAAP,CAAa3pB,IAAb,CAAX;AACD;;AACD0pC,SAAO,CAAChmC,GAAD,EAAK;AACV,UAAMpF,MAAM,GAAG,KAAKA,MAAL,EAAf;;AACA,QAAGA,MAAM,KAAK,KAAK0B,IAAnB,EAAwB;AACtB,WAAK2pC,MAAL;AACD;;AACD,UAAM/T,GAAG,GAAG,KAAKgU,KAAL,EAAZ;AACA,SAAKhU,GAAL,CAAS,CAAT,IAAclyB,GAAd;AACAkyB,OAAG,CAACG,IAAJ,CAAS,KAAKH,GAAd,EAAkB,CAAlB,EAAqB,CAArB,EAAwBt3B,MAAxB;AACD;;AACDuF,QAAM,CAACH,GAAD,EAAK;AACT,UAAMpF,MAAM,GAAG,KAAKA,MAAL,EAAf;;AACA,QAAGA,MAAM,KAAK,KAAK0B,IAAnB,EAAwB;AACtB,WAAK2pC,MAAL;AACD;;AACD,SAAK/T,GAAL,CAASt3B,MAAT,IAAmBoF,GAAnB;AACD;;AACDkmC,OAAK,GAAE;AACL,WAAO/sC,MAAM,CAACC,IAAP,CAAY,KAAK84B,GAAL,CAASv1B,KAAT,CAAe,CAAf,EAAkB,KAAK/B,MAAvB,CAAZ,CAAP;AACD;;AACDqrC,QAAM,GAAE;AACN,UAAMrrC,MAAM,GAAG,KAAKA,MAApB;AACA,SAAK0B,IAAL,GAAY,KAAKA,IAAL,GAAY,CAAxB;AACA,UAAM41B,GAAG,GAAG/4B,MAAM,CAAC8sB,KAAP,CAAa,KAAK3pB,IAAlB,CAAZ;AACA,SAAK41B,GAAL,CAASG,IAAT,CAAcH,GAAd,EAAkB,CAAlB,EAAqB,CAArB,EAAwBt3B,MAAxB;AACA,SAAKs3B,GAAL,GAAWA,GAAX;AACD;;AACD74B,UAAQ,GAAE;AACR,WAAO,KAAK64B,GAAL,CAASv1B,KAAT,CAAe,CAAf,EAAkB,KAAK/B,MAAvB,EAA+BvB,QAA/B,EAAP;AACD;;AACDqR,QAAM,GAAE;AACN,WAAO,KAAKrR,QAAL,EAAP;AACD;;AACD8sC,OAAK,GAAE;AACL,SAAKvrC,MAAL,GAAc,CAAd;AACD;;AAxCmB;;AA2CtB0E,MAAM,CAACjH,OAAP,GAAiB0tC,gBAAjB,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC5CA;AACA;AACA;AACA;AACA;AACA;AAEA,iBAAsBtvC,mBAAO,CAAC,sBAAD,CAA7B;AAAA,MAAQ2vC,SAAR,YAAQA,SAAR;;AACA,MAAML,gBAAgB,GAAGtvC,mBAAO,CAAC,4EAAD,CAAhC;;AAEA,MAAM4vC,GAAG,GAAG,CAAZ;AACA,MAAMC,EAAE,GAAG,EAAX;AACA,MAAMC,EAAE,GAAG,EAAX;AACA,MAAMC,EAAE,GAAG,EAAX;AACA,MAAMC,KAAK,GAAG,EAAd;AACA,MAAMC,QAAQ,GAAGvtC,MAAM,CAACC,IAAP,CAAY,CAAC,GAAD,EAAM,GAAN,EAAW,GAAX,CAAZ,CAAjB;;AAEA,MAAMutC,MAAN,SAAqBP,SAArB,CAA+B;AAC7BxvC,aAAW,CAACumB,IAAI,GAAG,EAAR,EAAW;AACpB,0CAAU;AAACypB,wBAAkB,EAAE;AAArB,KAAV,GAAyCzpB,IAAzC;AACA,UAAMrjB,OAAO,GAAG,EAAhB,CAFoB,CAGpB;;AACA,SAAI,IAAIyV,GAAR,IAAe4N,IAAf,EAAoB;AAClBrjB,aAAO,CAAC+sC,UAAU,CAACt3B,GAAD,CAAX,CAAP,GAA2B4N,IAAI,CAAC5N,GAAD,CAA/B;AACD,KANmB,CAOpB;;;AACA,QAAGzV,OAAO,CAACgtC,GAAR,KAAgBnrC,SAAhB,IAA6B7B,OAAO,CAACgtC,GAAR,KAAgB,IAA7C,IAAqDhtC,OAAO,CAACgtC,GAAR,KAAgB,KAAxE,EAA8E;AAC5EhtC,aAAO,CAACgtC,GAAR,GAAc,KAAd;AACD,KAFD,MAEM,IAAGhtC,OAAO,CAACgtC,GAAR,KAAgB,IAAnB,EAAwB;AAC5B,YAAM,IAAIC,QAAJ,CAAa,wBAAb,EAAuC,CAC3C,qBAD2C,EACpB,mBADoB,EAE1C,OAAM/sC,IAAI,CAACC,SAAL,CAAeH,OAAO,CAACgtC,GAAvB,CAA4B,EAFQ,CAAvC,CAAN;AAID,KAfmB,CAgBpB;;;AACA,QAAIE,WAAW,GAAG,IAAlB;;AACA,QAAGltC,OAAO,CAACmtC,IAAR,KAAiBtrC,SAAjB,IAA8B7B,OAAO,CAACmtC,IAAR,KAAiB,IAA/C,IAAuDntC,OAAO,CAACmtC,IAAR,KAAiB,KAAxE,IAAiFntC,OAAO,CAACmtC,IAAR,KAAiB,EAArG,EAAwG;AACtGntC,aAAO,CAACmtC,IAAR,GAAetrC,SAAf;AACD,KAFD,MAEM,IAAG,OAAO7B,OAAO,CAACmtC,IAAf,KAAwB,UAA3B,EAAsC;AAC1CD,iBAAW,GAAGltC,OAAO,CAACmtC,IAAtB;AACAntC,aAAO,CAACmtC,IAAR,GAAe,IAAf;AACD,KAHK,MAGA,IAAGntC,OAAO,CAACmtC,IAAR,KAAiB,IAApB,EAAyB;AAC7B,YAAM,IAAIF,QAAJ,CAAa,yBAAb,EAAwC,CAC5C,sBAD4C,EACpB,kCADoB,EAE3C,OAAM/sC,IAAI,CAACC,SAAL,CAAeH,OAAO,CAACmtC,IAAvB,CAA6B,EAFQ,CAAxC,CAAN;AAID,KA5BmB,CA6BpB;;;AACA,QAAGntC,OAAO,CAACotC,SAAR,KAAsBvrC,SAAtB,IAAmC7B,OAAO,CAACotC,SAAR,KAAsB,IAAzD,IAAiEptC,OAAO,CAACotC,SAAR,KAAsB,KAAvF,IAAgGptC,OAAO,CAACotC,SAAR,KAAsB,EAAzH,EAA4H;AAC1HptC,aAAO,CAACotC,SAAR,GAAoB,KAApB;AACD,KAFD,MAEM,IAAGptC,OAAO,CAACotC,SAAR,KAAsB,IAAzB,EAA8B;AAClCptC,aAAO,CAACotC,SAAR,GAAoB,UAAS9mC,KAAT,EAAe;AACjC,cAAMoF,IAAI,GAAGtH,IAAI,CAAC3C,KAAL,CAAW6E,KAAX,CAAb;AACA,eAAO,CAACH,KAAK,CAACuF,IAAD,CAAN,GAAe,IAAItH,IAAJ,CAASsH,IAAT,CAAf,GAAgCpF,KAAvC;AACD,OAHD;AAID,KALK,MAKA,IAAG,OAAOtG,OAAO,CAACotC,SAAf,KAA6B,UAAhC,EAA2C;AAC/C,YAAM,IAAIH,QAAJ,CAAa,8BAAb,EAA6C,CACjD,2BADiD,EACpB,uCADoB,EAEhD,OAAM/sC,IAAI,CAACC,SAAL,CAAeH,OAAO,CAACotC,SAAvB,CAAkC,EAFQ,CAA7C,CAAN;AAID,KA1CmB,CA2CpB;;;AACA,QAAIC,oBAAoB,GAAG,IAA3B;;AACA,QAAGrtC,OAAO,CAACstC,OAAR,KAAoB,IAAvB,EAA4B;AAC1B;AACAD,0BAAoB,GAAGxrC,SAAvB;AACD,KAHD,MAGM,IAAG,OAAO7B,OAAO,CAACstC,OAAf,KAA2B,UAA9B,EAAyC;AAC7CD,0BAAoB,GAAGrtC,OAAO,CAACstC,OAA/B;AACAttC,aAAO,CAACstC,OAAR,GAAkB,IAAlB;AACD,KAHK,MAGA,IAAG1lC,KAAK,CAACC,OAAN,CAAc7H,OAAO,CAACstC,OAAtB,CAAH,EAAkC;AACtCttC,aAAO,CAACstC,OAAR,GAAkBC,qBAAqB,CAACvtC,OAAO,CAACstC,OAAT,CAAvC;AACD,KAFK,MAEA,IAAGttC,OAAO,CAACstC,OAAR,KAAoBzrC,SAApB,IAAiC7B,OAAO,CAACstC,OAAR,KAAoB,IAArD,IAA6DttC,OAAO,CAACstC,OAAR,KAAoB,KAApF,EAA0F;AAC9FttC,aAAO,CAACstC,OAAR,GAAkB,KAAlB;AACD,KAFK,MAED;AACH,YAAM,IAAIL,QAAJ,CAAa,4BAAb,EAA2C,CAC/C,yBAD+C,EAE/C,uCAF+C,EAG9C,OAAM/sC,IAAI,CAACC,SAAL,CAAeH,OAAO,CAACstC,OAAvB,CAAgC,EAHQ,CAA3C,CAAN;AAKD,KA7DmB,CA8DpB;;;AACA,QAAGttC,OAAO,CAACwtC,2BAAR,KAAwC3rC,SAAxC,IAAqD7B,OAAO,CAACwtC,2BAAR,KAAwC,IAA7F,IAAqGxtC,OAAO,CAACwtC,2BAAR,KAAwC,KAAhJ,EAAsJ;AACpJxtC,aAAO,CAACwtC,2BAAR,GAAsC,KAAtC;AACD,KAFD,MAEM,IAAGxtC,OAAO,CAACwtC,2BAAR,KAAwC,IAA3C,EAAgD;AACpD,YAAM,IAAIP,QAAJ,CAAa,gDAAb,EAA+D,CACnE,6CADmE,EAEnE,oBAFmE,EAGlE,OAAM/sC,IAAI,CAACC,SAAL,CAAeH,OAAO,CAACwtC,2BAAvB,CAAoD,EAHQ,CAA/D,CAAN;AAKD,KAvEmB,CAwEpB;;;AACA,QAAGxtC,OAAO,CAAC4qB,OAAR,KAAoB/oB,SAApB,IAAiC7B,OAAO,CAAC4qB,OAAR,KAAoB,IAArD,IAA6D5qB,OAAO,CAAC4qB,OAAR,KAAoB,KAAjF,IAA0F5qB,OAAO,CAAC4qB,OAAR,KAAoB,EAAjH,EAAoH;AAClH5qB,aAAO,CAAC4qB,OAAR,GAAkB,IAAlB;AACD,KAFD,MAEK;AACH,UAAG,OAAO5qB,OAAO,CAAC4qB,OAAf,KAA2B,QAA9B,EAAuC;AACrC5qB,eAAO,CAAC4qB,OAAR,GAAkBvrB,MAAM,CAACC,IAAP,CAAYU,OAAO,CAAC4qB,OAApB,CAAlB;AACD;;AACD,UAAG,CAACvrB,MAAM,CAACupB,QAAP,CAAgB5oB,OAAO,CAAC4qB,OAAxB,CAAJ,EAAqC;AACnC,cAAM,IAAIqiB,QAAJ,CAAa,4BAAb,EAA2C,CAC/C,yBAD+C,EAE/C,uCAF+C,EAG9C,OAAM/sC,IAAI,CAACC,SAAL,CAAeH,OAAO,CAAC4qB,OAAvB,CAAgC,EAHQ,CAA3C,CAAN;AAKD;AACF,KAtFmB,CAuFpB;;;AACA,UAAM6iB,cAAc,GAAGvtC,IAAI,CAACC,SAAL,CAAeH,OAAO,CAAC0tC,SAAvB,CAAvB;AACA,QAAG,CAAC9lC,KAAK,CAACC,OAAN,CAAc7H,OAAO,CAAC0tC,SAAtB,CAAJ,EAAsC1tC,OAAO,CAAC0tC,SAAR,GAAoB,CAAC1tC,OAAO,CAAC0tC,SAAT,CAApB;;AACtC,QAAG1tC,OAAO,CAAC0tC,SAAR,CAAkB5sC,MAAlB,KAA6B,CAAhC,EAAkC;AAChC,YAAM,IAAImsC,QAAJ,CAAa,8BAAb,EAA6C,CACjD,2BADiD,EAEjD,2EAFiD,EAGhD,OAAMQ,cAAe,EAH2B,CAA7C,CAAN;AAKD;;AACDztC,WAAO,CAAC0tC,SAAR,GAAoB1tC,OAAO,CAAC0tC,SAAR,CAAkB9pC,GAAlB,CAAsB,UAAS8pC,SAAT,EAAmB;AAC3D,UAAGA,SAAS,KAAK7rC,SAAd,IAA2B6rC,SAAS,KAAK,IAAzC,IAAiDA,SAAS,KAAK,KAAlE,EAAwE;AACtE,eAAOruC,MAAM,CAACC,IAAP,CAAY,GAAZ,CAAP;AACD;;AACD,UAAG,OAAOouC,SAAP,KAAqB,QAAxB,EAAiC;AAC/BA,iBAAS,GAAGruC,MAAM,CAACC,IAAP,CAAYouC,SAAZ,CAAZ;AACD;;AACD,UAAI,CAACruC,MAAM,CAACupB,QAAP,CAAgB8kB,SAAhB,CAAD,IAA+BA,SAAS,CAAC5sC,MAAV,KAAqB,CAAxD,EAA0D;AACxD,cAAM,IAAImsC,QAAJ,CAAa,8BAAb,EAA6C,CACjD,2BADiD,EAEjD,2EAFiD,EAGhD,OAAMQ,cAAe,EAH2B,CAA7C,CAAN;AAKD;;AACD,aAAOC,SAAP;AACD,KAfmB,CAApB,CAjGoB,CAiHpB;;AACA,QAAG1tC,OAAO,CAAC4qC,MAAR,KAAmB/oC,SAAnB,IAAgC7B,OAAO,CAAC4qC,MAAR,KAAmB,IAAtD,EAA2D;AACzD5qC,aAAO,CAAC4qC,MAAR,GAAiBvrC,MAAM,CAACC,IAAP,CAAY,GAAZ,CAAjB;AACD,KAFD,MAEM,IAAG,OAAOU,OAAO,CAAC4qC,MAAf,KAA0B,QAA7B,EAAsC;AAC1C5qC,aAAO,CAAC4qC,MAAR,GAAiBvrC,MAAM,CAACC,IAAP,CAAYU,OAAO,CAAC4qC,MAApB,CAAjB;AACD;;AACD,QAAG,CAACvrC,MAAM,CAACupB,QAAP,CAAgB5oB,OAAO,CAAC4qC,MAAxB,CAAJ,EAAoC;AAClC,YAAM,IAAIjrC,KAAJ,CAAW,4DAA2DO,IAAI,CAACC,SAAL,CAAeH,OAAO,CAAC4qC,MAAvB,CAA+B,EAArG,CAAN;AACD,KAFD,MAEM,IAAG5qC,OAAO,CAAC4qC,MAAR,CAAe9pC,MAAf,KAA0B,CAA7B,EAA+B;AACnC,YAAM,IAAInB,KAAJ,CAAW,4DAA2DK,OAAO,CAAC4qC,MAAR,CAAe9pC,MAAO,EAA5F,CAAN;AACD,KAFK,MAED;AACHd,aAAO,CAAC4qC,MAAR,GAAiB5qC,OAAO,CAAC4qC,MAAR,CAAe,CAAf,CAAjB;AACD,KA7HmB,CA8HpB;;;AACA,QAAG5qC,OAAO,CAACV,IAAR,KAAiBuC,SAAjB,IAA8B7B,OAAO,CAACV,IAAR,KAAiB,IAAlD,EAAuD;AACrDU,aAAO,CAACV,IAAR,GAAe,CAAf;AACD,KAFD,MAEK;AACH,UAAG,OAAOU,OAAO,CAACV,IAAf,KAAwB,QAAxB,IAAoC,MAAMV,IAAN,CAAWoB,OAAO,CAACV,IAAnB,CAAvC,EAAgE;AAC9DU,eAAO,CAACV,IAAR,GAAe0nB,QAAQ,CAAChnB,OAAO,CAACV,IAAT,CAAvB;AACD;;AACD,UAAGiG,MAAM,CAACsH,SAAP,CAAiB7M,OAAO,CAACV,IAAzB,CAAH,EAAkC;AAChC,YAAGU,OAAO,CAACV,IAAR,GAAe,CAAlB,EAAoB;AAClB,gBAAM,IAAIK,KAAJ,CAAW,wDAAuDO,IAAI,CAACC,SAAL,CAAekjB,IAAI,CAAC/jB,IAApB,CAA0B,EAA5F,CAAN;AACD;AACF,OAJD,MAIK;AACH,cAAM,IAAIK,KAAJ,CAAW,gDAA+CO,IAAI,CAACC,SAAL,CAAeH,OAAO,CAACV,IAAvB,CAA6B,EAAvF,CAAN;AACD;AACF,KA5ImB,CA6IpB;;;AACA,QAAGU,OAAO,CAAC2tC,SAAR,KAAsB9rC,SAAtB,IAAmC7B,OAAO,CAAC2tC,SAAR,KAAsB,IAA5D,EAAiE;AAC/D3tC,aAAO,CAAC2tC,SAAR,GAAoB,CAApB;AACD,KAFD,MAEK;AACH,UAAG,OAAO3tC,OAAO,CAAC2tC,SAAf,KAA6B,QAA7B,IAAyC,MAAM/uC,IAAN,CAAWoB,OAAO,CAAC2tC,SAAnB,CAA5C,EAA0E;AACxE3tC,eAAO,CAAC2tC,SAAR,GAAoB3mB,QAAQ,CAAChnB,OAAO,CAAC2tC,SAAT,CAA5B;AACD;;AACD,UAAGpoC,MAAM,CAACsH,SAAP,CAAiB7M,OAAO,CAAC2tC,SAAzB,CAAH,EAAuC;AACrC,YAAG3tC,OAAO,CAAC2tC,SAAR,IAAqB,CAAxB,EAA0B;AACxB,gBAAM,IAAIhuC,KAAJ,CAAW,4EAA2EO,IAAI,CAACC,SAAL,CAAekjB,IAAI,CAACsqB,SAApB,CAA+B,EAArH,CAAN;AACD;AACF,OAJD,MAIK;AACH,cAAM,IAAIhuC,KAAJ,CAAW,qDAAoDO,IAAI,CAACC,SAAL,CAAekjB,IAAI,CAACsqB,SAApB,CAA+B,EAA9F,CAAN;AACD;AACF,KA3JmB,CA4JpB;;;AACA,QAAG3tC,OAAO,CAAC4tC,IAAR,KAAiB/rC,SAAjB,IAA8B7B,OAAO,CAAC4tC,IAAR,KAAiB,IAA/C,IAAuD5tC,OAAO,CAAC4tC,IAAR,KAAiB,KAA3E,EAAiF;AAC/E5tC,aAAO,CAAC4tC,IAAR,GAAe,KAAf;AACD,KAFD,MAEM,IAAG5tC,OAAO,CAAC4tC,IAAR,KAAiB,IAApB,EAAyB;AAC7B,YAAM,IAAIjuC,KAAJ,CAAW,0CAAyCO,IAAI,CAACC,SAAL,CAAeH,OAAO,CAAC4tC,IAAvB,CAA6B,EAAjF,CAAN;AACD,KAjKmB,CAkKpB;;;AACA,QAAG5tC,OAAO,CAAC6tC,eAAR,KAA4BhsC,SAA5B,IAAyC7B,OAAO,CAAC6tC,eAAR,KAA4B,IAArE,IAA6E7tC,OAAO,CAAC6tC,eAAR,KAA4B,KAA5G,EAAkH;AAChH7tC,aAAO,CAAC6tC,eAAR,GAA0B,CAA1B;AACD,KAFD,MAEM,IAAGtoC,MAAM,CAACsH,SAAP,CAAiB7M,OAAO,CAAC6tC,eAAzB,KAA6C7tC,OAAO,CAAC6tC,eAAR,IAA2B,CAA3E,EAA6E,CACjF;AACD,KAFK,MAEA,IAAG,OAAO7tC,OAAO,CAAC6tC,eAAf,KAAmC,QAAnC,IAA+C,MAAMjvC,IAAN,CAAWoB,OAAO,CAAC6tC,eAAnB,CAAlD,EAAsF;AAC1F7tC,aAAO,CAAC6tC,eAAR,GAA0B7mB,QAAQ,CAAChnB,OAAO,CAAC6tC,eAAT,CAAlC;AACD,KAFK,MAED;AACH,YAAM,IAAIluC,KAAJ,CAAW,mEAAkEO,IAAI,CAACC,SAAL,CAAeH,OAAO,CAAC6tC,eAAvB,CAAwC,EAArH,CAAN;AACD,KA3KmB,CA4KpB;;;AACA,QAAG7tC,OAAO,CAAC8tC,OAAR,KAAoBjsC,SAApB,IAAiC7B,OAAO,CAAC8tC,OAAR,KAAoB,IAArD,IAA6D9tC,OAAO,CAAC8tC,OAAR,KAAoB,KAApF,EAA0F;AACxF9tC,aAAO,CAAC8tC,OAAR,GAAkBjsC,SAAlB;AACD,KAFD,MAEM,IAAGxC,MAAM,CAACupB,QAAP,CAAgB5oB,OAAO,CAAC8tC,OAAxB,CAAH,EAAoC;AACxC,UAAG9tC,OAAO,CAAC8tC,OAAR,CAAgBhtC,MAAhB,KAA2B,CAA9B,EAAgC;AAC9B,cAAM,IAAInB,KAAJ,CAAW,oDAAX,CAAN;AACD;;AACDK,aAAO,CAAC8tC,OAAR,GAAkB9tC,OAAO,CAAC8tC,OAAR,CAAgBvuC,QAAhB,EAAlB;AACD,KALK,MAKA,IAAG,OAAOS,OAAO,CAAC8tC,OAAf,KAA2B,QAA9B,EAAuC;AAC3C,UAAG9tC,OAAO,CAAC8tC,OAAR,CAAgBhtC,MAAhB,KAA2B,CAA9B,EAAgC;AAC9B,cAAM,IAAInB,KAAJ,CAAW,oDAAX,CAAN;AACD,OAH0C,CAI3C;;AACD,KALK,MAKD;AACH,YAAM,IAAIA,KAAJ,CAAW,6DAA4DK,OAAO,CAAC8tC,OAAQ,EAAvF,CAAN;AACD,KA3LmB,CA4LpB;;;AACA,QAAG9tC,OAAO,CAAC+tC,SAAR,KAAsBlsC,SAAtB,IAAmC7B,OAAO,CAAC+tC,SAAR,KAAsB,IAA5D,EAAiE;AAC/D/tC,aAAO,CAAC+tC,SAAR,GAAoBlsC,SAApB;AACD,KAFD,MAEM,IAAG,OAAO7B,OAAO,CAAC+tC,SAAf,KAA6B,UAAhC,EAA2C;AAC/C,YAAM,IAAId,QAAJ,CAAa,8BAAb,EAA6C,CACjD,6BADiD,EAEjD,oBAFiD,EAGhD,OAAM/sC,IAAI,CAACC,SAAL,CAAeH,OAAO,CAAC+tC,SAAvB,CAAkC,EAHQ,CAA7C,CAAN;AAKD,KArMmB,CAsMpB;;;AACA,QAAG/tC,OAAO,CAACguC,KAAR,KAAkB,IAAlB,IAA0BhuC,OAAO,CAACguC,KAAR,KAAkB,KAA5C,IAAqDhuC,OAAO,CAACguC,KAAR,KAAkB,EAA1E,EAA6E;AAC3EhuC,aAAO,CAACguC,KAAR,GAAgB,IAAhB;AACD,KAFD,MAEK;AACH,UAAGhuC,OAAO,CAACguC,KAAR,KAAkBnsC,SAAlB,IAA+B7B,OAAO,CAACguC,KAAR,KAAkB,IAApD,EAAyD;AACvDhuC,eAAO,CAACguC,KAAR,GAAgB3uC,MAAM,CAACC,IAAP,CAAY,GAAZ,CAAhB;AACD,OAFD,MAEM,IAAG,OAAOU,OAAO,CAACguC,KAAf,KAAyB,QAA5B,EAAqC;AACzChuC,eAAO,CAACguC,KAAR,GAAgB3uC,MAAM,CAACC,IAAP,CAAYU,OAAO,CAACguC,KAApB,CAAhB;AACD;;AACD,UAAG,CAAC3uC,MAAM,CAACupB,QAAP,CAAgB5oB,OAAO,CAACguC,KAAxB,CAAJ,EAAmC;AACjC,cAAM,IAAIruC,KAAJ,CAAW,2DAA0DO,IAAI,CAACC,SAAL,CAAeH,OAAO,CAACguC,KAAvB,CAA8B,EAAnG,CAAN;AACD,OAFD,MAEM,IAAGhuC,OAAO,CAACguC,KAAR,CAAcltC,MAAd,KAAyB,CAA5B,EAA8B;AAClC,cAAM,IAAInB,KAAJ,CAAW,2DAA0DK,OAAO,CAACguC,KAAR,CAAcltC,MAAO,EAA1F,CAAN;AACD,OAFK,MAED;AACHd,eAAO,CAACguC,KAAR,GAAgBhuC,OAAO,CAACguC,KAAR,CAAc,CAAd,CAAhB;AACD;AACF,KAtNmB,CAuNpB;;;AACA,QAAGhuC,OAAO,CAACiuC,GAAR,KAAgBpsC,SAAhB,IAA6B7B,OAAO,CAACiuC,GAAR,KAAgB,IAA7C,IAAqDjuC,OAAO,CAACiuC,GAAR,KAAgB,KAAxE,EAA8E;AAC5EjuC,aAAO,CAACiuC,GAAR,GAAc,KAAd;AACD,KAFD,MAEM,IAAGjuC,OAAO,CAACiuC,GAAR,KAAgB,IAAnB,EAAwB;AAC5B,YAAM,IAAItuC,KAAJ,CAAW,yCAAwCO,IAAI,CAACC,SAAL,CAAeH,OAAO,CAACiuC,GAAvB,CAA4B,EAA/E,CAAN;AACD,KA5NmB,CA6NpB;;;AACA,QAAG,CAACjuC,OAAO,CAACkuC,gBAAZ,EAA6B;AAC3BluC,aAAO,CAACkuC,gBAAR,GAA2B,EAA3B;AACD,KAFD,MAEM,IAAG,CAACtmC,KAAK,CAACC,OAAN,CAAc7H,OAAO,CAACkuC,gBAAtB,CAAJ,EAA4C;AAChDluC,aAAO,CAACkuC,gBAAR,GAA2B,CAACluC,OAAO,CAACkuC,gBAAT,CAA3B;AACD;;AACDluC,WAAO,CAACkuC,gBAAR,GAA2BluC,OAAO,CAACkuC,gBAAR,CAAyBtqC,GAAzB,CAA8B,UAASuqC,EAAT,EAAY;AACnE,UAAG,OAAOA,EAAP,KAAc,QAAjB,EAA0B;AACxBA,UAAE,GAAG9uC,MAAM,CAACC,IAAP,CAAY6uC,EAAZ,CAAL;AACD;;AACD,aAAOA,EAAP;AACD,KAL0B,CAA3B,CAnOoB,CAyOpB;;AACA,QAAG,OAAOnuC,OAAO,CAACouC,KAAf,KAAyB,SAA5B,EAAsC,CACpC;AACD,KAFD,MAEM,IAAGpuC,OAAO,CAACouC,KAAR,KAAkBvsC,SAAlB,IAA+B7B,OAAO,CAACouC,KAAR,KAAkB,IAApD,EAAyD;AAC7DpuC,aAAO,CAACouC,KAAR,GAAgB,KAAhB;AACD,KAFK,MAED;AACH,YAAM,IAAIzuC,KAAJ,CAAW,gDAA+CO,IAAI,CAACC,SAAL,CAAeH,OAAO,CAACouC,KAAvB,CAA8B,EAAxF,CAAN;AACD,KAhPmB,CAiPpB;;;AACA,QAAG,OAAOpuC,OAAO,CAACquC,kBAAf,KAAsC,SAAzC,EAAmD,CACjD;AACD,KAFD,MAEM,IAAGruC,OAAO,CAACquC,kBAAR,KAA+BxsC,SAA/B,IAA4C7B,OAAO,CAACquC,kBAAR,KAA+B,IAA9E,EAAmF;AACvFruC,aAAO,CAACquC,kBAAR,GAA6B,KAA7B;AACD,KAFK,MAED;AACH,YAAM,IAAI1uC,KAAJ,CAAW,6DAA4DO,IAAI,CAACC,SAAL,CAAeH,OAAO,CAACquC,kBAAvB,CAA2C,EAAlH,CAAN;AACD;;AACD,QAAG,OAAOruC,OAAO,CAACsuC,uBAAf,KAA2C,SAA9C,EAAwD,CACtD;AACD,KAFD,MAEM,IAAGtuC,OAAO,CAACsuC,uBAAR,KAAoCzsC,SAApC,IAAiD7B,OAAO,CAACsuC,uBAAR,KAAoC,IAAxF,EAA6F;AACjGtuC,aAAO,CAACsuC,uBAAR,GAAkC,KAAlC;AACD,KAFK,MAED;AACH,YAAM,IAAI3uC,KAAJ,CAAW,kEAAiEO,IAAI,CAACC,SAAL,CAAeH,OAAO,CAACsuC,uBAAvB,CAAgD,EAA5H,CAAN;AACD;;AACD,QAAG,OAAOtuC,OAAO,CAACuuC,uBAAf,KAA2C,SAA9C,EAAwD,CACtD;AACD,KAFD,MAEM,IAAGvuC,OAAO,CAACuuC,uBAAR,KAAoC1sC,SAApC,IAAiD7B,OAAO,CAACuuC,uBAAR,KAAoC,IAAxF,EAA6F;AACjGvuC,aAAO,CAACuuC,uBAAR,GAAkC,KAAlC;AACD,KAFK,MAED;AACH,YAAM,IAAI5uC,KAAJ,CAAW,kEAAiEO,IAAI,CAACC,SAAL,CAAeH,OAAO,CAACuuC,uBAAvB,CAAgD,EAA5H,CAAN;AACD,KAtQmB,CAuQpB;;;AACA,QAAG,OAAOvuC,OAAO,CAACwuC,gBAAf,KAAoC,SAAvC,EAAiD,CAC/C;AACD,KAFD,MAEM,IAAGxuC,OAAO,CAACwuC,gBAAR,KAA6B3sC,SAA7B,IAA0C7B,OAAO,CAACwuC,gBAAR,KAA6B,IAA1E,EAA+E;AACnFxuC,aAAO,CAACwuC,gBAAR,GAA2B,KAA3B;AACD,KAFK,MAED;AACH,YAAM,IAAI7uC,KAAJ,CAAW,2DAA0DO,IAAI,CAACC,SAAL,CAAeH,OAAO,CAACwuC,gBAAvB,CAAyC,EAA9G,CAAN;AACD,KA9QmB,CA+QpB;;;AACA,QAAG,OAAOxuC,OAAO,CAACyuC,4BAAf,KAAgD,SAAnD,EAA6D,CAC3D;AACD,KAFD,MAEM,IAAGzuC,OAAO,CAACyuC,4BAAR,KAAyC5sC,SAAzC,IAAsD7B,OAAO,CAACyuC,4BAAR,KAAyC,IAAlG,EAAuG;AAC3GzuC,aAAO,CAACyuC,4BAAR,GAAuC,KAAvC;AACD,KAFK,MAED;AACH,YAAM,IAAI9uC,KAAJ,CAAW,uEAAsEO,IAAI,CAACC,SAAL,CAAeH,OAAO,CAACyuC,4BAAvB,CAAqD,EAAtI,CAAN;AACD,KAtRmB,CAuRpB;;;AACA,QAAG,OAAOzuC,OAAO,CAAC0uC,qBAAf,KAAyC,SAA5C,EAAsD,CACpD;AACD,KAFD,MAEM,IAAG1uC,OAAO,CAAC0uC,qBAAR,KAAkC7sC,SAAlC,IAA+C7B,OAAO,CAAC0uC,qBAAR,KAAkC,IAApF,EAAyF;AAC7F1uC,aAAO,CAAC0uC,qBAAR,GAAgC,KAAhC;AACD,KAFK,MAED;AACH,YAAM,IAAI/uC,KAAJ,CAAW,gEAA+DO,IAAI,CAACC,SAAL,CAAeH,OAAO,CAAC0uC,qBAAvB,CAA8C,EAAxH,CAAN;AACD,KA9RmB,CA+RpB;;;AACA,QAAG1uC,OAAO,CAAC2uC,KAAR,KAAkB9sC,SAAlB,IAA+B7B,OAAO,CAAC2uC,KAAR,KAAkB,IAAjD,IAAyD3uC,OAAO,CAAC2uC,KAAR,KAAkB,KAA9E,EAAoF;AAClF3uC,aAAO,CAAC2uC,KAAR,GAAgB,KAAhB;AACD,KAFD,MAEM,IAAG3uC,OAAO,CAAC2uC,KAAR,KAAkB,IAArB,EAA0B;AAC9B,YAAM,IAAIhvC,KAAJ,CAAW,gDAA+CO,IAAI,CAACC,SAAL,CAAeH,OAAO,CAAC2uC,KAAvB,CAA8B,EAAxF,CAAN;AACD,KApSmB,CAqSpB;;;AACA,QAAG3uC,OAAO,CAAC4uC,KAAR,KAAkB/sC,SAAlB,IAA+B7B,OAAO,CAAC4uC,KAAR,KAAkB,IAAjD,IAAyD5uC,OAAO,CAAC4uC,KAAR,KAAkB,KAA9E,EAAoF;AAClF5uC,aAAO,CAAC4uC,KAAR,GAAgB,KAAhB;AACD,KAFD,MAEM,IAAG5uC,OAAO,CAAC4uC,KAAR,KAAkB,IAArB,EAA0B;AAC9B,YAAM,IAAIjvC,KAAJ,CAAW,gDAA+CO,IAAI,CAACC,SAAL,CAAeH,OAAO,CAAC4uC,KAAvB,CAA8B,EAAxF,CAAN;AACD,KA1SmB,CA2SpB;;;AACA,QAAG5uC,OAAO,CAAC6uC,IAAR,KAAiBhtC,SAAjB,IAA8B7B,OAAO,CAAC6uC,IAAR,KAAiB,IAA/C,IAAuD7uC,OAAO,CAAC6uC,IAAR,KAAiB,KAA3E,EAAiF;AAC/E7uC,aAAO,CAAC6uC,IAAR,GAAe,KAAf;AACD,KAFD,MAEM,IAAG7uC,OAAO,CAAC6uC,IAAR,KAAiB,IAApB,EAAyB;AAC7B,YAAM,IAAIlvC,KAAJ,CAAW,+CAA8CO,IAAI,CAACC,SAAL,CAAeH,OAAO,CAAC6uC,IAAvB,CAA6B,EAAtF,CAAN;AACD,KAhTmB,CAiTpB;;;AACA,QAAG7uC,OAAO,CAAC6uC,IAAR,KAAiB,IAAjB,IAAyBxrB,IAAI,CAACurB,KAAL,KAAe,KAA3C,EAAiD;AAC/C5uC,aAAO,CAAC4uC,KAAR,GAAgB,IAAhB;AACD,KAFD,MAEM,IAAG5uC,OAAO,CAAC4uC,KAAR,KAAkB,IAArB,EAA0B;AAC9B5uC,aAAO,CAAC4uC,KAAR,GAAgB,KAAhB;AACD;;AACD,QAAG5uC,OAAO,CAAC6uC,IAAR,KAAiB,IAAjB,IAAyBxrB,IAAI,CAACsrB,KAAL,KAAe,KAA3C,EAAiD;AAC/C3uC,aAAO,CAAC2uC,KAAR,GAAgB,IAAhB;AACD,KAFD,MAEM,IAAG3uC,OAAO,CAAC2uC,KAAR,KAAkB,IAArB,EAA0B;AAC9B3uC,aAAO,CAAC2uC,KAAR,GAAgB,KAAhB;AACD,KA3TmB,CA4TpB;;;AACA,QAAG3uC,OAAO,CAAC1C,EAAR,KAAeuE,SAAf,IAA4B7B,OAAO,CAAC1C,EAAR,KAAe,IAA9C,EAAmD;AACjD0C,aAAO,CAAC1C,EAAR,GAAa,CAAC,CAAd;AACD,KAFD,MAEK;AACH,UAAG,OAAO0C,OAAO,CAAC1C,EAAf,KAAsB,QAAtB,IAAkC,MAAMsB,IAAN,CAAWoB,OAAO,CAAC1C,EAAnB,CAArC,EAA4D;AAC1D0C,eAAO,CAAC1C,EAAR,GAAa0pB,QAAQ,CAAChnB,OAAO,CAAC1C,EAAT,CAArB;AACD;;AACD,UAAGiI,MAAM,CAACsH,SAAP,CAAiB7M,OAAO,CAAC1C,EAAzB,CAAH,EAAgC;AAC9B,YAAG0C,OAAO,CAAC1C,EAAR,IAAc,CAAjB,EAAmB;AACjB,gBAAM,IAAIqC,KAAJ,CAAW,qEAAoEO,IAAI,CAACC,SAAL,CAAekjB,IAAI,CAAC/lB,EAApB,CAAwB,EAAvG,CAAN;AACD;AACF,OAJD,MAIK;AACH,cAAM,IAAIqC,KAAJ,CAAW,8CAA6CO,IAAI,CAACC,SAAL,CAAekjB,IAAI,CAAC/lB,EAApB,CAAwB,EAAhF,CAAN;AACD;AACF,KA1UmB,CA2UpB;;;AACA,QAAG0C,OAAO,CAAC8uC,OAAR,KAAoBjtC,SAApB,IAAiC7B,OAAO,CAAC8uC,OAAR,KAAoB,IAAxD,EAA6D;AAC3D9uC,aAAO,CAAC8uC,OAAR,GAAkB,CAAC,CAAnB;AACD,KAFD,MAEK;AACH,UAAG,OAAO9uC,OAAO,CAAC8uC,OAAf,KAA2B,QAA3B,IAAuC,MAAMlwC,IAAN,CAAWoB,OAAO,CAAC8uC,OAAnB,CAA1C,EAAsE;AACpE9uC,eAAO,CAAC8uC,OAAR,GAAkB9nB,QAAQ,CAAChnB,OAAO,CAAC8uC,OAAT,CAA1B;AACD;;AACD,UAAGvpC,MAAM,CAACsH,SAAP,CAAiB7M,OAAO,CAAC8uC,OAAzB,CAAH,EAAqC;AACnC,YAAG9uC,OAAO,CAAC8uC,OAAR,IAAmB,CAAtB,EAAwB;AACtB,gBAAM,IAAInvC,KAAJ,CAAW,0EAAyEO,IAAI,CAACC,SAAL,CAAekjB,IAAI,CAACyrB,OAApB,CAA6B,EAAjH,CAAN;AACD;AACF,OAJD,MAIK;AACH,cAAM,IAAInvC,KAAJ,CAAW,mDAAkDO,IAAI,CAACC,SAAL,CAAekjB,IAAI,CAACyrB,OAApB,CAA6B,EAA1F,CAAN;AACD;AACF;;AACD,SAAKlB,IAAL,GAAY;AACVmB,mBAAa,EAAE,CADL;AAEVC,iBAAW,EAAE,CAFH;AAGVC,0BAAoB,EAAE,CAHZ;AAIVC,WAAK,EAAE,CAJG;AAKVC,aAAO,EAAE;AALC,KAAZ;AAOA,SAAKnvC,OAAL,GAAeA,OAAf;AACA,SAAKovC,KAAL,GAAa;AACXC,gBAAU,EAAE,KADD;AAEXC,eAAS,EAAEpC,WAFA;AAGXqC,gBAAU,EAAE,KAHD;AAIXC,aAAO,EAAExvC,OAAO,CAAC2tC,SAAR,KAAsB,CAJpB;AAKX8B,cAAQ,EAAE,KALC;AAMXC,mBAAa,EAAE1vC,OAAO,CAAC4qC,MAAR,KAAmB5qC,OAAO,CAACguC,KAN/B;AAOX2B,0BAAoB,EAAE3vC,OAAO,CAACstC,OAAR,KAAoB,IAApB,GAA2B,CAA3B,GAA+BttC,OAAO,CAACstC,OAAR,CAAgBxsC,MAP1D;AAQX8uC,WAAK,EAAE,IAAI3D,gBAAJ,CAAqB,EAArB,CARI;AASX4D,wBAAkB,EAAExC,oBATT;AAUXO,UAAI,EAAExoC,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkB,KAAKuoC,IAAvB,CAVK;AAWXkC,iBAAW,EAAEjuC,SAXF;AAYXkuC,aAAO,EAAE,KAZE;AAaXC,UAAI,EAAE,KAbK;AAcXC,eAAS,EAAE,IAAIhE,gBAAJ,CAAqB,GAArB,CAdA;AAeXiE,YAAM,EAAE,EAfG;AAgBXC,oBAAc,EAAE,KAhBL;AAiBXC,mBAAa,EAAE,CAjBJ;AAkBXC,8BAAwB,EAAErwC,OAAO,CAACkuC,gBAAR,CAAyBptC,MAAzB,KAAoC,CAApC,GAAwC,CAAxC,GAA4CmC,IAAI,CAACuvB,GAAL,CAAS,GAAGxyB,OAAO,CAACkuC,gBAAR,CAAyBtqC,GAAzB,CAA+BqE,CAAD,IAAOA,CAAC,CAACnH,MAAvC,CAAZ,CAlB3D;AAmBXwvC,eAAS,EAAE,CAACjxC,MAAM,CAACC,IAAP,CAAY,GAAZ,EAAiB,CAAjB,CAAD,EAAsBD,MAAM,CAACC,IAAP,CAAY,IAAZ,EAAkB,CAAlB,CAAtB,CAnBA;AAoBXixC,gBAAU,EAAE,KApBD;AAqBXC,qBAAe,EAAE;AArBN,KAAb;AAuBD,GA1X4B,CA2X7B;;;AACAC,YAAU,CAACrY,GAAD,EAAM7N,QAAN,EAAgB/sB,QAAhB,EAAyB;AACjC,QAAG,KAAK4xC,KAAL,CAAWY,IAAX,KAAoB,IAAvB,EAA4B;AAC1B;AACD;;AACD,UAAM1nC,GAAG,GAAG,KAAKooC,OAAL,CAAatY,GAAb,EAAkB,KAAlB,CAAZ;;AACA,QAAG9vB,GAAG,KAAKzG,SAAX,EAAqB;AACnB,WAAKutC,KAAL,CAAWY,IAAX,GAAkB,IAAlB;AACD;;AACDxyC,YAAQ,CAAC8K,GAAD,CAAR;AACD,GArY4B,CAsY7B;;;AACAqoC,QAAM,CAACnzC,QAAD,EAAU;AACd,QAAG,KAAK4xC,KAAL,CAAWY,IAAX,KAAoB,IAAvB,EAA4B;AAC1B;AACD;;AACD,UAAM1nC,GAAG,GAAG,KAAKooC,OAAL,CAAa7uC,SAAb,EAAwB,IAAxB,CAAZ;;AACArE,YAAQ,CAAC8K,GAAD,CAAR;AACD,GA7Y4B,CA8Y7B;;;AACAooC,SAAO,CAACE,OAAD,EAAUpnC,GAAV,EAAc;AACnB,0BAAiI,KAAKxJ,OAAtI;AAAA,UAAOgtC,GAAP,iBAAOA,GAAP;AAAA,UAAYpiB,OAAZ,iBAAYA,OAAZ;AAAA,UAAqBggB,MAArB,iBAAqBA,MAArB;AAAA,UAA6B+C,SAA7B,iBAA6BA,SAA7B;AAAA,UAAwCC,IAAxC,iBAAwCA,IAAxC;AAAA,UAA8CgB,KAA9C,iBAA8CA,KAA9C;AAAA,UAAqDf,eAArD,iBAAqDA,eAArD;AAAA,UAAsEG,KAAtE,iBAAsEA,KAAtE;AAAA,UAA6EC,GAA7E,iBAA6EA,GAA7E;AAAA,UAAkFG,KAAlF,iBAAkFA,KAAlF;AAAA,UAAyFO,KAAzF,iBAAyFA,KAAzF;AAAA,UAAgGH,gBAAhG,iBAAgGA,gBAAhG;AAAA,UAAkHlxC,EAAlH,iBAAkHA,EAAlH;AAAA,UAAsHwxC,OAAtH,iBAAsHA,OAAtH;AACA,QAAKZ,gBAAL,GAAyB,KAAKluC,OAA9B,CAAKkuC,gBAAL;AACA,wBAA4D,KAAKkB,KAAjE;AAAA,UAAOC,UAAP,eAAOA,UAAP;AAAA,UAAmBS,WAAnB,eAAmBA,WAAnB;AAAA,UAAgCG,SAAhC,eAAgCA,SAAhC;AAAA,UAA2CP,aAA3C,eAA2CA,aAA3C;AACA,QAAItX,GAAJ;;AACA,QAAG0X,WAAW,KAAKjuC,SAAnB,EAA6B;AAC3B,UAAG+uC,OAAO,KAAK/uC,SAAf,EAAyB;AACvB;AACA,aAAKe,IAAL,CAAU,IAAV;AACA;AACD,OAJD,MAIK;AACHw1B,WAAG,GAAGwY,OAAN;AACD;AACF,KARD,MAQM,IAAGd,WAAW,KAAKjuC,SAAhB,IAA6B+uC,OAAO,KAAK/uC,SAA5C,EAAsD;AAC1Du2B,SAAG,GAAG0X,WAAN;AACD,KAFK,MAED;AACH1X,SAAG,GAAG/4B,MAAM,CAACqjC,MAAP,CAAc,CAACoN,WAAD,EAAcc,OAAd,CAAd,CAAN;AACD,KAjBkB,CAkBnB;;;AACA,QAAGvB,UAAU,KAAK,KAAlB,EAAwB;AACtB,UAAGrC,GAAG,KAAK,KAAX,EAAiB;AACf,aAAKoC,KAAL,CAAWC,UAAX,GAAwB,IAAxB;AACD,OAFD,MAEM,IAAGjX,GAAG,CAACt3B,MAAJ,GAAa,CAAhB,EAAkB;AACtB;AACA,YAAG0I,GAAG,KAAK,KAAX,EAAiB;AACf;AACA,eAAK4lC,KAAL,CAAWU,WAAX,GAAyB1X,GAAzB;AACA;AACD,SANqB,CAOtB;;AACD,OARK,MAQD;AACH,YAAGwU,QAAQ,CAACiE,OAAT,CAAiBzY,GAAjB,EAAsB,CAAtB,EAAyB,CAAzB,MAAgC,CAAnC,EAAqC;AACnC;AACAA,aAAG,GAAGA,GAAG,CAACv1B,KAAJ,CAAU,CAAV,CAAN;AACD;;AACD,aAAKusC,KAAL,CAAWC,UAAX,GAAwB,IAAxB;AACD;AACF;;AACD,UAAMyB,MAAM,GAAG1Y,GAAG,CAACt3B,MAAnB;AACA,QAAImlB,GAAJ;;AACA,SAAIA,GAAG,GAAG,CAAV,EAAaA,GAAG,GAAG6qB,MAAnB,EAA2B7qB,GAAG,EAA9B,EAAiC;AAC/B;AACA;AACA,UAAG,KAAK8qB,cAAL,CAAoB9qB,GAApB,EAAyB6qB,MAAzB,EAAiCtnC,GAAjC,CAAH,EAAyC;AACvC;AACD;;AACD,UAAG,KAAK4lC,KAAL,CAAWoB,eAAX,KAA+B,IAAlC,EAAuC;AACrC,aAAK5C,IAAL,CAAUsB,KAAV;;AACA,YAAGtB,IAAI,KAAK,IAAT,IAAiB,KAAKwB,KAAL,CAAWc,MAAX,CAAkBpvC,MAAlB,KAA6B,CAA9C,IAAmD,KAAKsuC,KAAL,CAAWQ,KAAX,CAAiB9uC,MAAjB,KAA4B,CAA/E,IAAoF,KAAKsuC,KAAL,CAAWmB,UAAX,KAA0B,KAAjH,EAAuH;AACrH,eAAKnB,KAAL,CAAWxB,IAAX,GAAkBxoC,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkB,KAAKuoC,IAAvB,CAAlB;AACD;;AACD,aAAKwB,KAAL,CAAWoB,eAAX,GAA6B,KAA7B;AACD;;AACD,UAAG1B,OAAO,KAAK,CAAC,CAAb,IAAkB,KAAKlB,IAAL,CAAUsB,KAAV,GAAkBJ,OAAvC,EAA+C;AAC7C,aAAKM,KAAL,CAAWY,IAAX,GAAkB,IAAlB;AACA,aAAKptC,IAAL,CAAU,IAAV;AACA;AACD,OAjB8B,CAkB/B;;;AACA,UAAG,KAAKwsC,KAAL,CAAWW,OAAX,KAAuB,KAAvB,IAAgC7B,gBAAgB,CAACptC,MAAjB,KAA4B,CAA/D,EAAiE;AAC/D,cAAMkwC,qBAAqB,GAAG,KAAKC,0BAAL,CAAgC7Y,GAAhC,EAAqCnS,GAArC,CAA9B;;AACA,YAAG+qB,qBAAH,EAAyB;AACvB9C,0BAAgB,GAAG,KAAKluC,OAAL,CAAakuC,gBAAhC;AACD;AACF;;AACD,YAAMgD,GAAG,GAAG9Y,GAAG,CAACnS,GAAD,CAAf;;AACA,UAAGgoB,GAAG,KAAK,IAAX,EAAgB;AACdgC,iBAAS,CAAC5pC,MAAV,CAAiB6qC,GAAjB;AACD;;AACD,UAAG,CAACA,GAAG,KAAKxE,EAAR,IAAcwE,GAAG,KAAK1E,EAAvB,KAA8B,KAAK4C,KAAL,CAAWoB,eAAX,KAA+B,KAAhE,EAAuE;AACrE,aAAKpB,KAAL,CAAWoB,eAAX,GAA6B,IAA7B;AACD,OA/B8B,CAgC/B;AACA;;;AACA,UAAG,KAAKpB,KAAL,CAAWK,QAAX,KAAwB,IAA3B,EAAgC;AAC9B,aAAKL,KAAL,CAAWK,QAAX,GAAsB,KAAtB;AACD,OAFD,MAEK;AACH;AACA;AACA,YAAG,KAAKL,KAAL,CAAWW,OAAX,KAAuB,IAAvB,IAA+BmB,GAAG,KAAKtG,MAAvC,IAAiD3kB,GAAG,GAAG,CAAN,GAAU6qB,MAA9D,EAAqE;AACnE,cAAGpB,aAAH,EAAiB;AACf,gBAAGtX,GAAG,CAACnS,GAAG,GAAC,CAAL,CAAH,KAAe+nB,KAAlB,EAAwB;AACtB,mBAAKoB,KAAL,CAAWK,QAAX,GAAsB,IAAtB;AACA;AACD;AACF,WALD,MAKK;AACH,iBAAKL,KAAL,CAAWK,QAAX,GAAsB,IAAtB;AACA;AACD;AACF,SAbE,CAcH;AACA;;;AACA,YAAG,KAAKL,KAAL,CAAWG,UAAX,KAA0B,KAA1B,IAAmC2B,GAAG,KAAKlD,KAA9C,EAAoD;AAClD,cAAG,KAAKoB,KAAL,CAAWW,OAAX,KAAuB,IAA1B,EAA+B;AAC7B,kBAAMoB,OAAO,GAAG/Y,GAAG,CAACnS,GAAG,GAAC,CAAL,CAAnB;;AACA,kBAAMmrB,iBAAiB,GAAGzC,KAAK,IAAI,KAAK0C,gBAAL,CAAsBF,OAAtB,CAAnC,CAF6B,CAG7B;;;AACA,kBAAMG,gBAAgB,GAAG1mB,OAAO,KAAK,IAAZ,IAAoB,KAAK2mB,cAAL,CAAoB3mB,OAApB,EAA6BwN,GAA7B,EAAkCnS,GAAG,GAAC,CAAtC,EAAyCkrB,OAAzC,CAA7C;;AACA,kBAAMK,kBAAkB,GAAG,KAAKC,aAAL,CAAmBN,OAAnB,EAA4B/Y,GAA5B,EAAiCnS,GAAG,GAAC,CAArC,CAA3B;;AACA,kBAAMyrB,qBAAqB,GAAGxD,gBAAgB,CAACptC,MAAjB,KAA4B,CAA5B,GAAgC,KAAKmwC,0BAAL,CAAgC7Y,GAAhC,EAAqCnS,GAAG,GAAC,CAAzC,CAAhC,GAA8E,KAAK0rB,mBAAL,CAAyBR,OAAzB,EAAkC/Y,GAAlC,EAAuCnS,GAAG,GAAC,CAA3C,CAA5G,CAN6B,CAO7B;AACA;AACA;;AACA,gBAAGirB,GAAG,KAAKtG,MAAR,IAAkBuG,OAAO,KAAKnD,KAAjC,EAAuC;AACrC/nB,iBAAG;AACJ,aAFD,MAEM,IAAG,CAACkrB,OAAD,IAAYK,kBAAZ,IAAkCE,qBAAlC,IAA2DJ,gBAA3D,IAA+EF,iBAAlF,EAAoG;AACxG,mBAAKhC,KAAL,CAAWW,OAAX,GAAqB,KAArB;AACA,mBAAKX,KAAL,CAAWmB,UAAX,GAAwB,IAAxB;AACA;AACD,aAJK,MAIA,IAAGnC,KAAK,KAAK,KAAb,EAAmB;AACvB,oBAAM9lC,GAAG,GAAG,KAAKspC,OAAL,CACV,IAAI3E,QAAJ,CAAa,2BAAb,EAA0C,CACxC,wBADwC,EAEvC,QAAOpC,MAAM,CAACC,YAAP,CAAoBqG,OAApB,CAA6B,GAFG,EAGvC,WAAU,KAAKvD,IAAL,CAAUsB,KAAM,EAHa,EAIxC,yDAJwC,EAKxC,2BALwC,CAA1C,EAMG,KAAK2C,SAAL,EANH,CADU,CAAZ;;AASA,kBAAGvpC,GAAG,KAAKzG,SAAX,EAAsB,OAAOyG,GAAP;AACvB,aAXK,MAWD;AACH,mBAAK8mC,KAAL,CAAWW,OAAX,GAAqB,KAArB;AACA,mBAAKX,KAAL,CAAWmB,UAAX,GAAwB,IAAxB,CAFG,CAGH;;AACA,mBAAKnB,KAAL,CAAWQ,KAAX,CAAiB1D,OAAjB,CAAyB8B,KAAzB;AACD;AACF,WAjCD,MAiCK;AACH,gBAAG,KAAKoB,KAAL,CAAWQ,KAAX,CAAiB9uC,MAAjB,KAA4B,CAA/B,EAAiC;AAC/B;AACA,kBAAIstC,KAAK,KAAK,KAAd,EAAqB;AACnB,sBAAM9lC,GAAG,GAAG,KAAKspC,OAAL,CACV,IAAI3E,QAAJ,CAAa,uBAAb,EAAsC,CACpC,wBADoC,EAEnC,2CAA0C,KAAKW,IAAL,CAAUsB,KAAM,EAFvB,CAAtC,EAGG,KAAK2C,SAAL,EAHH,EAGqB;AACnBjC,uBAAK,EAAE,KAAKR,KAAL,CAAWQ;AADC,iBAHrB,CADU,CAAZ;;AAQA,oBAAGtnC,GAAG,KAAKzG,SAAX,EAAsB,OAAOyG,GAAP;AACvB;AACF,aAbD,MAaK;AACH,mBAAK8mC,KAAL,CAAWW,OAAX,GAAqB,IAArB;AACA;AACD;AACF;AACF;;AACD,YAAG,KAAKX,KAAL,CAAWW,OAAX,KAAuB,KAA1B,EAAgC;AAC9B,cAAI+B,qBAAqB,GAAG,KAAKH,mBAAL,CAAyBT,GAAzB,EAA8B9Y,GAA9B,EAAmCnS,GAAnC,CAA5B;;AACA,cAAG6rB,qBAAqB,KAAK,CAA7B,EAA+B;AAC7B;AACA,kBAAMC,eAAe,GAAG,KAAK3C,KAAL,CAAWG,UAAX,IAA0B,KAAKH,KAAL,CAAWmB,UAAX,KAA0B,KAA1B,IAAmC,KAAKnB,KAAL,CAAWc,MAAX,CAAkBpvC,MAAlB,KAA6B,CAAhE,IAAqE,KAAKsuC,KAAL,CAAWQ,KAAX,CAAiB9uC,MAAjB,KAA4B,CAAnJ;;AACA,gBAAGixC,eAAH,EAAmB;AACjB,mBAAKnE,IAAL,CAAUmB,aAAV,GADiB,CAEjB;AACD,aAHD,MAGK;AACH;AACA,kBAAGP,gBAAgB,KAAK,IAArB,IAA6B,KAAKY,KAAL,CAAWmB,UAAX,KAA0B,KAAvD,IAAgE,KAAKnB,KAAL,CAAWc,MAAX,CAAkBpvC,MAAlB,KAA6B,CAA7F,IAAkG,KAAKsuC,KAAL,CAAWQ,KAAX,CAAiB9uC,MAAjB,KAA4B,CAAjI,EAAmI;AACjI,qBAAK8sC,IAAL,CAAUoB,WAAV;AACA/oB,mBAAG,IAAI6rB,qBAAqB,GAAG,CAA/B;AACA;AACD,eANE,CAOH;;;AACA,kBAAG,KAAK1C,KAAL,CAAWI,OAAX,KAAuB,KAAvB,IAAgC,KAAK5B,IAAL,CAAUsB,KAAV,IAAmB,KAAKE,KAAL,CAAWoB,eAAX,KAA+B,IAA/B,GAAsC,CAAtC,GAAyC,CAA5D,KAAmE7C,SAAtG,EAAgH;AAC9G,qBAAKyB,KAAL,CAAWI,OAAX,GAAqB,IAArB;;AACA,qBAAKwC,YAAL;;AACA,qBAAKC,UAAL;;AACAhsB,mBAAG,IAAI6rB,qBAAqB,GAAG,CAA/B;AACA;AACD,eAND,MAMK;AACH,sBAAMI,QAAQ,GAAG,KAAKC,SAAL,EAAjB;;AACA,oBAAGD,QAAQ,KAAKrwC,SAAhB,EAA2B,OAAOqwC,QAAP;;AAC3B,sBAAME,SAAS,GAAG,KAAKC,OAAL,EAAlB;;AACA,oBAAGD,SAAS,KAAKvwC,SAAjB,EAA4B,OAAOuwC,SAAP;AAC7B;;AACD,kBAAG90C,EAAE,KAAK,CAAC,CAAR,IAAa,KAAKswC,IAAL,CAAUuB,OAAV,IAAqB7xC,EAArC,EAAwC;AACtC,qBAAK8xC,KAAL,CAAWY,IAAX,GAAkB,IAAlB;AACA,qBAAKptC,IAAL,CAAU,IAAV;AACA;AACD;AACF;;AACD,iBAAKwsC,KAAL,CAAWG,UAAX,GAAwB,KAAxB;AACAtpB,eAAG,IAAI6rB,qBAAqB,GAAG,CAA/B;AACA;AACD;;AACD,cAAG,KAAK1C,KAAL,CAAWG,UAAd,EAAyB;AACvB;AACD;;AACD,gBAAM+C,YAAY,GAAG1nB,OAAO,KAAK,IAAZ,GAAmB,CAAnB,GAAuB,KAAK2mB,cAAL,CAAoB3mB,OAApB,EAA6BwN,GAA7B,EAAkCnS,GAAlC,EAAuCirB,GAAvC,CAA5C;;AACA,cAAGoB,YAAY,KAAK,CAApB,EAAsB;AACpB,iBAAKlD,KAAL,CAAWG,UAAX,GAAwB,IAAxB;AACA;AACD;;AACD,cAAIgD,eAAe,GAAG,KAAKd,aAAL,CAAmBP,GAAnB,EAAwB9Y,GAAxB,EAA6BnS,GAA7B,CAAtB;;AACA,cAAGssB,eAAe,KAAK,CAAvB,EAAyB;AACvB,kBAAML,QAAQ,GAAG,KAAKC,SAAL,EAAjB;;AACA,gBAAGD,QAAQ,KAAKrwC,SAAhB,EAA2B,OAAOqwC,QAAP;AAC3BjsB,eAAG,IAAIssB,eAAe,GAAG,CAAzB;AACA;AACD;AACF;AACF;;AACD,UAAG,KAAKnD,KAAL,CAAWG,UAAX,KAA0B,KAA7B,EAAmC;AACjC,YAAG1B,eAAe,KAAK,CAApB,IAAyB,KAAKuB,KAAL,CAAWgB,aAAX,GAA2B,KAAKhB,KAAL,CAAWQ,KAAX,CAAiB9uC,MAA5C,GAAqD+sC,eAAjF,EAAiG;AAC/F,gBAAMvlC,GAAG,GAAG,KAAKspC,OAAL,CACV,IAAI3E,QAAJ,CAAa,qBAAb,EAAoC,CAClC,kBADkC,EAElC,qDAFkC,EAGjC,MAAKY,eAAgB,EAHY,EAIjC,WAAU,KAAKD,IAAL,CAAUsB,KAAM,EAJO,CAApC,EAKG,KAAK2C,SAAL,EALH,CADU,CAAZ;;AAQA,cAAGvpC,GAAG,KAAKzG,SAAX,EAAsB,OAAOyG,GAAP;AACvB;AACF;;AAED,YAAMkqC,OAAO,GAAG5D,KAAK,KAAK,KAAV,IAAmB,KAAKQ,KAAL,CAAWW,OAAX,KAAuB,IAA1C,IAAkD,KAAKX,KAAL,CAAWQ,KAAX,CAAiB9uC,MAAjB,KAA4B,CAA9E,IAAmF,CAAC,KAAKuwC,gBAAL,CAAsBH,GAAtB,CAApG,CA/K+B,CAgL/B;;AACA,YAAMuB,OAAO,GAAG9D,KAAK,KAAK,KAAV,IAAmB,KAAKS,KAAL,CAAWmB,UAAX,KAA0B,KAA7D;;AACA,UAAIiC,OAAO,KAAK,IAAZ,IAAoBC,OAAO,KAAK,IAApC,EAA0C;AACxC,aAAKrD,KAAL,CAAWQ,KAAX,CAAiBvpC,MAAjB,CAAwB6qC,GAAxB;AACD,OAFD,MAEM,IAAGvC,KAAK,KAAK,IAAV,IAAkB,CAAC,KAAK0C,gBAAL,CAAsBH,GAAtB,CAAtB,EAAiD;AACrD,cAAM5oC,GAAG,GAAG,KAAKspC,OAAL,CACV,IAAI3E,QAAJ,CAAa,2CAAb,EAA0D,CACxD,wBADwD,EAExD,qCAFwD,EAGvD,WAAU,KAAKW,IAAL,CAAUsB,KAAM,EAH6B,CAA1D,EAIG,KAAK2C,SAAL,EAJH,CADU,CAAZ;;AAOA,YAAGvpC,GAAG,KAAKzG,SAAX,EAAsB,OAAOyG,GAAP;AACvB;AACF;;AACD,QAAGkB,GAAG,KAAK,IAAX,EAAgB;AACd;AACA,UAAG,KAAK4lC,KAAL,CAAWW,OAAX,KAAuB,IAA1B,EAA+B;AAC7B,cAAMznC,GAAG,GAAG,KAAKspC,OAAL,CACV,IAAI3E,QAAJ,CAAa,sBAAb,EAAqC,CACnC,mBADmC,EAElC,yDAAwD,KAAKW,IAAL,CAAUsB,KAAM,EAFtC,CAArC,EAGG,KAAK2C,SAAL,EAHH,CADU,CAAZ;;AAMA,YAAGvpC,GAAG,KAAKzG,SAAX,EAAsB,OAAOyG,GAAP;AACvB,OARD,MAQK;AACH;AACA,YAAG,KAAK8mC,KAAL,CAAWmB,UAAX,KAA0B,IAA1B,IAAkC,KAAKnB,KAAL,CAAWc,MAAX,CAAkBpvC,MAAlB,KAA6B,CAA/D,IAAoE,KAAKsuC,KAAL,CAAWQ,KAAX,CAAiB9uC,MAAjB,KAA4B,CAAnG,EAAqG;AACnG,gBAAMoxC,QAAQ,GAAG,KAAKC,SAAL,EAAjB;;AACA,cAAGD,QAAQ,KAAKrwC,SAAhB,EAA2B,OAAOqwC,QAAP;;AAC3B,gBAAME,SAAS,GAAG,KAAKC,OAAL,EAAlB;;AACA,cAAGD,SAAS,KAAKvwC,SAAjB,EAA4B,OAAOuwC,SAAP;AAC7B,SALD,MAKM,IAAG,KAAKhD,KAAL,CAAWoB,eAAX,KAA+B,IAAlC,EAAuC;AAC3C,eAAK5C,IAAL,CAAUoB,WAAV;AACD,SAFK,MAEA,IAAG,KAAKI,KAAL,CAAWG,UAAX,KAA0B,IAA7B,EAAkC;AACtC,eAAK3B,IAAL,CAAUmB,aAAV;AACD;AACF;AACF,KAvBD,MAuBK;AACH,WAAKK,KAAL,CAAWU,WAAX,GAAyB1X,GAAG,CAACv1B,KAAJ,CAAUojB,GAAV,CAAzB;AACD;;AACD,QAAG,KAAKmpB,KAAL,CAAWoB,eAAX,KAA+B,IAAlC,EAAuC;AACrC,WAAK5C,IAAL,CAAUsB,KAAV;AACA,WAAKE,KAAL,CAAWoB,eAAX,GAA6B,KAA7B;AACD;AACF,GAppB4B,CAqpB7B;;;AACAa,kBAAgB,CAACH,GAAD,EAAK;AACnB,WAAOA,GAAG,KAAKvE,KAAR,IAAiBuE,GAAG,KAAK3E,GAAzB,IAAgC2E,GAAG,KAAKxE,EAAxC,IAA8CwE,GAAG,KAAK1E,EAAtD,IAA4D0E,GAAG,KAAKzE,EAA3E;AACD;;AACD4F,SAAO,GAAE;AACP,2BAAoK,KAAKryC,OAAzK;AAAA,UAAOstC,OAAP,kBAAOA,OAAP;AAAA,UAAgBE,2BAAhB,kBAAgBA,2BAAhB;AAAA,UAA6CI,IAA7C,kBAA6CA,IAA7C;AAAA,UAAmDtuC,IAAnD,kBAAmDA,IAAnD;AAAA,UAAyD+uC,kBAAzD,kBAAyDA,kBAAzD;AAAA,UAA6EC,uBAA7E,kBAA6EA,uBAA7E;AAAA,UAAsGC,uBAAtG,kBAAsGA,uBAAtG;AAAA,UAA+HN,GAA/H,kBAA+HA,GAA/H;AAAA,UAAoIQ,4BAApI,kBAAoIA,4BAApI;AACA,yBAA0B,KAAKW,KAA/B;AAAA,UAAOI,OAAP,gBAAOA,OAAP;AAAA,UAAgBU,MAAhB,gBAAgBA,MAAhB;;AACA,QAAGV,OAAO,KAAK,KAAf,EAAqB;AACnB,aAAO,KAAKyC,UAAL,EAAP;AACD,KALM,CAMP;;;AACA,UAAMS,YAAY,GAAGxC,MAAM,CAACpvC,MAA5B;;AACA,QAAGwsC,OAAO,KAAK,IAAf,EAAoB;AAClB,UAAGqF,aAAa,CAACzC,MAAD,CAAhB,EAAyB;AACvB,aAAK+B,UAAL;;AACA;AACD;;AACD,aAAO,KAAKW,oBAAL,CAA0B1C,MAA1B,CAAP;AACD;;AACD,QAAG5C,OAAO,KAAK,KAAZ,IAAqB,KAAKM,IAAL,CAAUuB,OAAV,KAAsB,CAA9C,EAAgD;AAC9C,WAAKC,KAAL,CAAWO,oBAAX,GAAkC+C,YAAlC;AACD;;AACD,QAAGA,YAAY,KAAK,KAAKtD,KAAL,CAAWO,oBAA/B,EAAoD;AAClD,UAAGtB,kBAAkB,KAAK,IAAvB,IACAC,uBAAuB,KAAK,IAA5B,IAAoCoE,YAAY,GAAG,KAAKtD,KAAL,CAAWO,oBAD9D,IAEApB,uBAAuB,KAAK,IAA5B,IAAoCmE,YAAY,GAAG,KAAKtD,KAAL,CAAWO,oBAFjE,EAEwF;AACtF,aAAK/B,IAAL,CAAUqB,oBAAV;AACD,OAJD,MAIK;AACH,YAAG3B,OAAO,KAAK,KAAf,EAAqB;AACnB,gBAAMhlC,GAAG,GAAG,KAAKspC,OAAL,CACV,IAAI3E,QAAJ,CAAa,gCAAb,EAA+C,CAC7C,wBAD6C,EAE5C,UAAS,KAAKmC,KAAL,CAAWO,oBAAqB,GAFG,EAG5C,OAAM+C,YAAa,YAAW,KAAK9E,IAAL,CAAUsB,KAAM,EAHF,CAA/C,EAIG,KAAK2C,SAAL,EAJH,EAIqB;AACnB3B,kBAAM,EAAEA;AADW,WAJrB,CADU,CAAZ;;AASA,cAAG5nC,GAAG,KAAKzG,SAAX,EAAsB,OAAOyG,GAAP;AACvB,SAXD,MAWK;AACH,gBAAMA,GAAG,GAAG,KAAKspC,OAAL,EACV;AACA,cAAI3E,QAAJ,CAAa,sCAAb,EAAqD,CACnD,wBADmD,EAElD,qBAAoBK,OAAO,CAACxsC,MAAO,GAFe,EAEX;AACvC,iBAAM4xC,YAAa,YAAW,KAAK9E,IAAL,CAAUsB,KAAM,EAHI,CAArD,EAIG,KAAK2C,SAAL,EAJH,EAIqB;AACnB3B,kBAAM,EAAEA;AADW,WAJrB,CAFU,CAAZ;;AAUA,cAAG5nC,GAAG,KAAKzG,SAAX,EAAsB,OAAOyG,GAAP;AACvB;AACF;AACF;;AACD,QAAGmmC,4BAA4B,KAAK,IAApC,EAAyC;AACvC,UAAGkE,aAAa,CAACzC,MAAD,CAAhB,EAAyB;AACvB,aAAK+B,UAAL;;AACA;AACD;AACF;;AACD,QAAG,KAAK7C,KAAL,CAAWe,cAAX,KAA8B,IAAjC,EAAsC;AACpC,WAAK8B,UAAL;;AACA,WAAK7C,KAAL,CAAWe,cAAX,GAA4B,KAA5B;AACA;AACD;;AACD,SAAKvC,IAAL,CAAUuB,OAAV;;AACA,QAAG7vC,IAAI,KAAK,CAAT,IAAc,KAAKsuC,IAAL,CAAUuB,OAAV,IAAqB7vC,IAAtC,EAA2C;AACzC,UAAGguC,OAAO,KAAK,KAAf,EAAqB;AACnB,cAAMlxB,GAAG,GAAG,EAAZ,CADmB,CAEnB;;AACA,aAAI,IAAI1Z,CAAC,GAAG,CAAR,EAAW6F,CAAC,GAAG2nC,MAAM,CAACpvC,MAA1B,EAAkC4B,CAAC,GAAG6F,CAAtC,EAAyC7F,CAAC,EAA1C,EAA6C;AAC3C,cAAG4qC,OAAO,CAAC5qC,CAAD,CAAP,KAAeb,SAAf,IAA4ByrC,OAAO,CAAC5qC,CAAD,CAAP,CAAWmwC,QAA1C,EAAoD,SADT,CAE3C;AACA;;AACA,cAAIrF,2BAA2B,KAAK,IAAhC,IAAwCpxB,GAAG,CAACkxB,OAAO,CAAC5qC,CAAD,CAAP,CAAW4O,IAAZ,CAA/C,EAAkE;AAChE,gBAAI1J,KAAK,CAACC,OAAN,CAAcuU,GAAG,CAACkxB,OAAO,CAAC5qC,CAAD,CAAP,CAAW4O,IAAZ,CAAjB,CAAJ,EAAyC;AACvC8K,iBAAG,CAACkxB,OAAO,CAAC5qC,CAAD,CAAP,CAAW4O,IAAZ,CAAH,GAAuB8K,GAAG,CAACkxB,OAAO,CAAC5qC,CAAD,CAAP,CAAW4O,IAAZ,CAAH,CAAqBoxB,MAArB,CAA4BwN,MAAM,CAACxtC,CAAD,CAAlC,CAAvB;AACD,aAFD,MAEO;AACL0Z,iBAAG,CAACkxB,OAAO,CAAC5qC,CAAD,CAAP,CAAW4O,IAAZ,CAAH,GAAuB,CAAC8K,GAAG,CAACkxB,OAAO,CAAC5qC,CAAD,CAAP,CAAW4O,IAAZ,CAAJ,EAAuB4+B,MAAM,CAACxtC,CAAD,CAA7B,CAAvB;AACD;AACF,WAND,MAMO;AACL0Z,eAAG,CAACkxB,OAAO,CAAC5qC,CAAD,CAAP,CAAW4O,IAAZ,CAAH,GAAuB4+B,MAAM,CAACxtC,CAAD,CAA7B;AACD;AACF;;AACD,cAAOorC,OAAP,GAAkB,KAAK9tC,OAAvB,CAAO8tC,OAAP;;AACA,YAAGA,OAAO,KAAKjsC,SAAf,EAAyB;AACvB,cAAGosC,GAAG,KAAK,IAAR,IAAgBL,IAAI,KAAK,IAA5B,EAAiC;AAC/B,kBAAMtlC,GAAG,GAAG,KAAKwqC,MAAL,CAAY1tC,MAAM,CAACC,MAAP,CACtB;AAAC6qC,oBAAM,EAAE9zB;AAAT,aADsB,EAErB6xB,GAAG,KAAK,IAAR,GAAe;AAACA,iBAAG,EAAE,KAAKmB,KAAL,CAAWa,SAAX,CAAqB1wC,QAArB;AAAN,aAAf,GAAuD,EAFlC,EAGrBquC,IAAI,KAAK,IAAT,GAAgB;AAACA,kBAAI,EAAE,KAAKwB,KAAL,CAAWxB;AAAlB,aAAhB,GAAyC,EAHpB,CAAZ,CAAZ;;AAKA,gBAAGtlC,GAAH,EAAO;AACL,qBAAOA,GAAP;AACD;AACF,WATD,MASK;AACH,kBAAMA,GAAG,GAAG,KAAKwqC,MAAL,CAAY12B,GAAZ,CAAZ;;AACA,gBAAG9T,GAAH,EAAO;AACL,qBAAOA,GAAP;AACD;AACF;AACF,SAhBD,MAgBK;AACH,cAAG2lC,GAAG,KAAK,IAAR,IAAgBL,IAAI,KAAK,IAA5B,EAAiC;AAC/B,kBAAMtlC,GAAG,GAAG,KAAKwqC,MAAL,CAAY1tC,MAAM,CAACC,MAAP,CACtB;AAAC6qC,oBAAM,EAAE,CAAC9zB,GAAG,CAAC0xB,OAAD,CAAJ,EAAe1xB,GAAf;AAAT,aADsB,EAEtB6xB,GAAG,KAAK,IAAR,GAAe;AAACA,iBAAG,EAAE,KAAKmB,KAAL,CAAWa,SAAX,CAAqB1wC,QAArB;AAAN,aAAf,GAAuD,EAFjC,EAGtBquC,IAAI,KAAK,IAAT,GAAgB;AAACA,kBAAI,EAAE,KAAKwB,KAAL,CAAWxB;AAAlB,aAAhB,GAAyC,EAHnB,CAAZ,CAAZ;;AAKA,gBAAGtlC,GAAH,EAAO;AACL,qBAAOA,GAAP;AACD;AACF,WATD,MASK;AACH,kBAAMA,GAAG,GAAG,KAAKwqC,MAAL,CAAY,CAAC12B,GAAG,CAAC0xB,OAAD,CAAJ,EAAe1xB,GAAf,CAAZ,CAAZ;;AACA,gBAAG9T,GAAH,EAAO;AACL,qBAAOA,GAAP;AACD;AACF;AACF;AACF,OAnDD,MAmDK;AACH,YAAG2lC,GAAG,KAAK,IAAR,IAAgBL,IAAI,KAAK,IAA5B,EAAiC;AAC/B,gBAAMtlC,GAAG,GAAG,KAAKwqC,MAAL,CAAY1tC,MAAM,CAACC,MAAP,CACtB;AAAC6qC,kBAAM,EAAEA;AAAT,WADsB,EAEtBjC,GAAG,KAAK,IAAR,GAAe;AAACA,eAAG,EAAE,KAAKmB,KAAL,CAAWa,SAAX,CAAqB1wC,QAArB;AAAN,WAAf,GAAuD,EAFjC,EAGtBquC,IAAI,KAAK,IAAT,GAAgB;AAACA,gBAAI,EAAE,KAAKwB,KAAL,CAAWxB;AAAlB,WAAhB,GAAyC,EAHnB,CAAZ,CAAZ;;AAKA,cAAGtlC,GAAH,EAAO;AACL,mBAAOA,GAAP;AACD;AACF,SATD,MASK;AACH,gBAAMA,GAAG,GAAG,KAAKwqC,MAAL,CAAY5C,MAAZ,CAAZ;;AACA,cAAG5nC,GAAH,EAAO;AACL,mBAAOA,GAAP;AACD;AACF;AACF;AACF;;AACD,SAAK2pC,UAAL;AACD;;AACDW,sBAAoB,CAAC1C,MAAD,EAAQ;AAC1B,UAAOL,kBAAP,GAA6B,KAAKT,KAAlC,CAAOS,kBAAP;;AACA,QAAG;AACD,YAAMnvC,OAAO,GAAGmvC,kBAAkB,KAAKhuC,SAAvB,GAAmCquC,MAAnC,GAA4CL,kBAAkB,CAAC5oC,IAAnB,CAAwB,IAAxB,EAA8BipC,MAA9B,CAA5D;;AACA,UAAG,CAACtoC,KAAK,CAACC,OAAN,CAAcnH,OAAd,CAAJ,EAA2B;AACzB,eAAO,KAAKkxC,OAAL,CACL,IAAI3E,QAAJ,CAAa,4BAAb,EAA2C,CACzC,yBADyC,EAEzC,uCAFyC,EAGxC,OAAM/sC,IAAI,CAACC,SAAL,CAAeO,OAAf,CAAwB,EAHU,CAA3C,EAIG,KAAKmxC,SAAL,EAJH,EAIqB;AACnBnxC,iBAAO,EAAEA;AADU,SAJrB,CADK,CAAP;AASD;;AACD,YAAMqyC,iBAAiB,GAAGxF,qBAAqB,CAAC7sC,OAAD,CAA/C;AACA,WAAK0uC,KAAL,CAAWO,oBAAX,GAAkCoD,iBAAiB,CAACjyC,MAApD;AACA,WAAKd,OAAL,CAAastC,OAAb,GAAuByF,iBAAvB;;AACA,WAAKd,UAAL;;AACA;AACD,KAlBD,CAkBC,OAAM3pC,GAAN,EAAU;AACT,aAAOA,GAAP;AACD;AACF;;AACD2pC,YAAU,GAAE;AACV,QAAG,KAAKjyC,OAAL,CAAaiuC,GAAb,KAAqB,IAAxB,EAA6B;AAC3B,WAAKmB,KAAL,CAAWa,SAAX,CAAqB5D,KAArB;AACD;;AACD,SAAK+C,KAAL,CAAWc,MAAX,GAAoB,EAApB;AACA,SAAKd,KAAL,CAAWgB,aAAX,GAA2B,CAA3B;AACD;;AACD+B,WAAS,GAAE;AACT,2BAAuC,KAAKnyC,OAA5C;AAAA,UAAOmtC,IAAP,kBAAOA,IAAP;AAAA,UAAawB,KAAb,kBAAaA,KAAb;AAAA,UAAoBd,eAApB,kBAAoBA,eAApB;AACA,yBAA8B,KAAKuB,KAAnC;AAAA,UAAOI,OAAP,gBAAOA,OAAP;AAAA,UAAgBe,UAAhB,gBAAgBA,UAAhB,CAFS,CAGT;;AACA,QAAGf,OAAO,KAAK,KAAf,EAAqB;AAAE;AACrB,aAAO,KAAKwC,YAAL,EAAP;AACD;;AACD,QAAIpC,KAAK,GAAG,KAAKR,KAAL,CAAWQ,KAAX,CAAiBrwC,QAAjB,EAAZ;;AACA,QAAGovC,KAAK,KAAK,IAAV,IAAkB4B,UAAU,KAAK,KAApC,EAA0C;AACxCX,WAAK,GAAGA,KAAK,CAACoD,SAAN,EAAR;AACD;;AACD,QAAG7F,IAAI,KAAK,IAAZ,EAAiB;AACf,2BAAiB,KAAK8F,MAAL,CAAYrD,KAAZ,CAAjB;AAAA;AAAA,YAAOtnC,GAAP;AAAA,YAAY4qC,CAAZ;;AACA,UAAG5qC,GAAG,KAAKzG,SAAX,EAAsB,OAAOyG,GAAP;AACtBsnC,WAAK,GAAGsD,CAAR;AACD;;AACD,SAAK9D,KAAL,CAAWc,MAAX,CAAkBttC,IAAlB,CAAuBgtC,KAAvB,EAhBS,CAiBT;;AACA,QAAG/B,eAAe,KAAK,CAApB,IAAyB,OAAO+B,KAAP,KAAiB,QAA7C,EAAsD;AACpD,WAAKR,KAAL,CAAWgB,aAAX,IAA4BR,KAAK,CAAC9uC,MAAlC;AACD;;AACD,SAAKkxC,YAAL;AACD;;AACDA,cAAY,GAAE;AACZ,SAAK5C,KAAL,CAAWQ,KAAX,CAAiBvD,KAAjB;AACA,SAAK+C,KAAL,CAAWmB,UAAX,GAAwB,KAAxB;AACD;;AACDuC,QAAM,CAAC5C,MAAD,EAAQ;AACZ,UAAOnC,SAAP,GAAoB,KAAK/tC,OAAzB,CAAO+tC,SAAP;;AACA,QAAGA,SAAS,KAAKlsC,SAAjB,EAA2B;AACzB,YAAM8jB,OAAO,GAAG,KAAKksB,SAAL,EAAhB;;AACA,UAAG;AACD3B,cAAM,GAAGnC,SAAS,CAAC9mC,IAAV,CAAe,IAAf,EAAqBipC,MAArB,EAA6BvqB,OAA7B,CAAT;AACD,OAFD,CAEC,OAAMrd,GAAN,EAAU;AACT,eAAOA,GAAP;AACD;;AACD,UAAG4nC,MAAM,KAAKruC,SAAX,IAAwBquC,MAAM,KAAK,IAAtC,EAA2C;AAAE;AAAQ;AACtD;;AACD,SAAKttC,IAAL,CAAUstC,MAAV;AACD,GAr2B4B,CAs2B7B;;;AACA+C,QAAM,CAACrD,KAAD,EAAO;AACX,2BAAsC,KAAK5vC,OAA3C;AAAA,UAAOstC,OAAP,kBAAOA,OAAP;AAAA,UAAgBe,kBAAhB,kBAAgBA,kBAAhB;AACA,UAAM8E,SAAS,GAAGvrC,KAAK,CAACC,OAAN,CAAcylC,OAAd,CAAlB,CAFW,CAGX;AACA;AACA;;AACA,QAAI6F,SAAS,KAAK,IAAd,IAAsB9E,kBAAtB,IAA4C,KAAKruC,OAAL,CAAastC,OAAb,CAAqBxsC,MAArB,IAA+B,KAAKsuC,KAAL,CAAWc,MAAX,CAAkBpvC,MAAjG,EAAyG;AACvG,aAAO,CAACe,SAAD,EAAYA,SAAZ,CAAP;AACD;;AACD,UAAM8jB,OAAO,GAAG,KAAKksB,SAAL,EAAhB;;AACA,QAAG,KAAKzC,KAAL,CAAWE,SAAX,KAAyB,IAA5B,EAAiC;AAC/B,UAAG;AACD,eAAO,CAACztC,SAAD,EAAY,KAAKutC,KAAL,CAAWE,SAAX,CAAqBroC,IAArB,CAA0B,IAA1B,EAAgC2oC,KAAhC,EAAuCjqB,OAAvC,CAAZ,CAAP;AACD,OAFD,CAEC,OAAMrd,GAAN,EAAU;AACT,eAAO,CAACA,GAAD,CAAP;AACD;AACF;;AACD,QAAG,KAAK8qC,SAAL,CAAexD,KAAf,CAAH,EAAyB;AACvB,aAAO,CAAC/tC,SAAD,EAAYuE,UAAU,CAACwpC,KAAD,CAAtB,CAAP;AACD,KAFD,MAEM,IAAG,KAAK5vC,OAAL,CAAaotC,SAAb,KAA2B,KAA9B,EAAoC;AACxC,aAAO,CAACvrC,SAAD,EAAY,KAAK7B,OAAL,CAAaotC,SAAb,CAAuBnmC,IAAvB,CAA4B,IAA5B,EAAkC2oC,KAAlC,EAAyCjqB,OAAzC,CAAZ,CAAP;AACD;;AACD,WAAO,CAAC9jB,SAAD,EAAY+tC,KAAZ,CAAP;AACD,GA93B4B,CA+3B7B;AACA;AACA;AACA;AACA;AACA;;;AACAwD,WAAS,CAAC9sC,KAAD,EAAO;AACd,WAAQA,KAAK,GAAGF,UAAU,CAAEE,KAAF,CAAlB,GAA8B,CAA/B,IAAqC,CAA5C,CADc,CACgC;AAC/C;;AACDirC,gBAAc,CAAC8B,SAAD,EAAYC,SAAZ,EAAuBrtB,GAAvB,EAA4BstB,QAA5B,EAAqC;AACjD,QAAGF,SAAS,CAAC,CAAD,CAAT,KAAiBE,QAApB,EAA8B,OAAO,CAAP;AAC9B,UAAMC,YAAY,GAAGH,SAAS,CAACvyC,MAA/B;;AACA,SAAI,IAAI4B,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAG8wC,YAAnB,EAAiC9wC,CAAC,EAAlC,EAAqC;AACnC,UAAG2wC,SAAS,CAAC3wC,CAAD,CAAT,KAAiB4wC,SAAS,CAACrtB,GAAG,GAACvjB,CAAL,CAA7B,EAAsC,OAAO,CAAP;AACvC;;AACD,WAAO8wC,YAAP;AACD;;AACDzC,gBAAc,CAACruC,CAAD,EAAIouC,MAAJ,EAAYtnC,GAAZ,EAAgB;AAC5B,QAAGA,GAAH,EAAO;AACL,aAAO,KAAP;AACD;;AACD,2BAA6B,KAAKxJ,OAAlC;AAAA,UAAO4qB,OAAP,kBAAOA,OAAP;AAAA,UAAgB8iB,SAAhB,kBAAgBA,SAAhB;AACA,yBAA4C,KAAK0B,KAAjD;AAAA,UAAOW,OAAP,gBAAOA,OAAP;AAAA,UAAgBM,wBAAhB,gBAAgBA,wBAAhB;AACA,UAAMoD,aAAa,GAAG3C,MAAM,GAAGpuC,CAAT,GAAa,CAAnC;AACA,UAAMgxC,cAAc,GAAGzwC,IAAI,CAACuvB,GAAL,EACrB;AACA5H,WAAO,GAAGA,OAAO,CAAC9pB,MAAX,GAAoB,CAFN,EAGrB;AACAuvC,4BAJqB,EAKrB;AACA;AACAN,WAAO,GAAI,IAAIM,wBAAR,GAAoC,CAPtB,EAQrB;AACA3C,aAAS,CAAC5sC,MATW,EAUrB;AACA;AACA,KAZqB,CAAvB;AAcA,WAAO2yC,aAAa,GAAGC,cAAvB;AACD;;AACDjC,eAAa,CAACP,GAAD,EAAM9Y,GAAN,EAAWnS,GAAX,EAAe;AAC1B,UAAOynB,SAAP,GAAoB,KAAK1tC,OAAzB,CAAO0tC,SAAP;;AACAiG,SAAK,EAAE,KAAI,IAAIjxC,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGgrC,SAAS,CAAC5sC,MAA7B,EAAqC4B,CAAC,EAAtC,EAAyC;AAC9C,YAAMkxC,GAAG,GAAGlG,SAAS,CAAChrC,CAAD,CAArB;;AACA,UAAGkxC,GAAG,CAAC,CAAD,CAAH,KAAW1C,GAAd,EAAkB;AAChB,aAAI,IAAItrB,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGguB,GAAG,CAAC9yC,MAAvB,EAA+B8kB,CAAC,EAAhC,EAAmC;AACjC,cAAGguB,GAAG,CAAChuB,CAAD,CAAH,KAAWwS,GAAG,CAACnS,GAAG,GAACL,CAAL,CAAjB,EAA0B,SAAS+tB,KAAT;AAC3B;;AACD,eAAOC,GAAG,CAAC9yC,MAAX;AACD;AACF;;AACD,WAAO,CAAP;AACD;;AACD6wC,qBAAmB,CAACT,GAAD,EAAM9Y,GAAN,EAAWnS,GAAX,EAAe;AAChC,UAAOioB,gBAAP,GAA2B,KAAKluC,OAAhC,CAAOkuC,gBAAP;AACA,UAAM4D,qBAAqB,GAAG5D,gBAAgB,CAACptC,MAA/C;;AACA6yC,SAAK,EAAE,KAAI,IAAIjxC,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGovC,qBAAnB,EAA0CpvC,CAAC,EAA3C,EAA8C;AACnD,YAAMyrC,EAAE,GAAGD,gBAAgB,CAACxrC,CAAD,CAA3B;AACA,YAAMmxC,QAAQ,GAAG1F,EAAE,CAACrtC,MAApB;;AACA,UAAGqtC,EAAE,CAAC,CAAD,CAAF,KAAU+C,GAAb,EAAiB;AACf;AACD;;AACD,WAAI,IAAItrB,CAAC,GAAG,CAAZ,EAAeA,CAAC,GAAGiuB,QAAnB,EAA6BjuB,CAAC,EAA9B,EAAiC;AAC/B,YAAGuoB,EAAE,CAACvoB,CAAD,CAAF,KAAUwS,GAAG,CAACnS,GAAG,GAACL,CAAL,CAAhB,EAAwB;AACtB,mBAAS+tB,KAAT;AACD;AACF;;AACD,aAAOxF,EAAE,CAACrtC,MAAV;AACD;;AACD,WAAO,CAAP;AACD;;AACDmwC,4BAA0B,CAAC7Y,GAAD,EAAMnS,GAAN,EAAU;AAClC,UAAMirB,GAAG,GAAG9Y,GAAG,CAACnS,GAAD,CAAf;;AACA,QAAGirB,GAAG,KAAKxE,EAAX,EAAc;AACZ,UAAGtU,GAAG,CAACnS,GAAG,GAAC,CAAL,CAAH,KAAeumB,EAAlB,EAAqB;AACnB,aAAKxsC,OAAL,CAAakuC,gBAAb,CAA8BtrC,IAA9B,CAAmCvD,MAAM,CAACC,IAAP,CAAY,MAAZ,CAAnC;AACA,aAAK8vC,KAAL,CAAWiB,wBAAX,GAAsC,CAAtC;AACA,eAAO,CAAP;AACD,OAJD,MAIK;AACH,aAAKrwC,OAAL,CAAakuC,gBAAb,CAA8BtrC,IAA9B,CAAmCvD,MAAM,CAACC,IAAP,CAAY,IAAZ,CAAnC;AACA,aAAK8vC,KAAL,CAAWiB,wBAAX,GAAsC,CAAtC;AACA,eAAO,CAAP;AACD;AACF,KAVD,MAUM,IAAGa,GAAG,KAAK1E,EAAX,EAAc;AAClB,WAAKxsC,OAAL,CAAakuC,gBAAb,CAA8BtrC,IAA9B,CAAmCvD,MAAM,CAACC,IAAP,CAAY,IAAZ,CAAnC;AACA,WAAK8vC,KAAL,CAAWiB,wBAAX,GAAsC,CAAtC;AACA,aAAO,CAAP;AACD;;AACD,WAAO,CAAP;AACD;;AACDuB,SAAO,CAACxiB,GAAD,EAAK;AACV,UAAOsf,qBAAP,GAAgC,KAAK1uC,OAArC,CAAO0uC,qBAAP;AACA,UAAMpmC,GAAG,GAAG,OAAO8mB,GAAP,KAAe,QAAf,GAA0B,IAAIzvB,KAAJ,CAAUyvB,GAAV,CAA1B,GAA2CA,GAAvD;;AACA,QAAGsf,qBAAH,EAAyB;AACvB,WAAKU,KAAL,CAAWe,cAAX,GAA4B,IAA5B;AACA,WAAK2D,IAAL,CAAU,MAAV,EAAkBxrC,GAAlB;AACA,aAAOzG,SAAP;AACD,KAJD,MAIK;AACH,aAAOyG,GAAP;AACD;AACF;;AACDupC,WAAS,GAAE;AACT,UAAOvE,OAAP,GAAkB,KAAKttC,OAAvB,CAAOstC,OAAP;AACA,UAAM6F,SAAS,GAAGvrC,KAAK,CAACC,OAAN,CAAcylC,OAAd,CAAlB;AACA,WAAO;AACLyG,YAAM,EAAEZ,SAAS,KAAK,IAAd,GACJ7F,OAAO,CAACxsC,MAAR,GAAiB,KAAKsuC,KAAL,CAAWc,MAAX,CAAkBpvC,MAAnC,GACAwsC,OAAO,CAAC,KAAK8B,KAAL,CAAWc,MAAX,CAAkBpvC,MAAnB,CAAP,CAAkCwQ,IADlC,GAEA,IAHI,GAKN,KAAK89B,KAAL,CAAWc,MAAX,CAAkBpvC,MANf;AAOLkuC,iBAAW,EAAE,KAAKpB,IAAL,CAAUoB,WAPlB;AAQLrlB,YAAM,EAAE2jB,OAAO,KAAK,IARf;AASLvpC,WAAK,EAAE,KAAKqrC,KAAL,CAAWc,MAAX,CAAkBpvC,MATpB;AAULmuC,0BAAoB,EAAE,KAAKrB,IAAL,CAAUqB,oBAV3B;AAWLc,aAAO,EAAE,KAAKX,KAAL,CAAWmB,UAXf;AAYLrB,WAAK,EAAE,KAAKtB,IAAL,CAAUsB,KAZZ;AAaLC,aAAO,EAAE,KAAKvB,IAAL,CAAUuB;AAbd,KAAP;AAeD;;AAt/B4B;;AAy/B/B,MAAM1tC,KAAK,GAAG,YAAU;AACtB,MAAIxD,IAAJ,EAAU+B,OAAV,EAAmBxC,QAAnB;;AACA,OAAI,IAAIkF,CAAR,IAAaoU,SAAb,EAAuB;AACrB,UAAMk9B,QAAQ,GAAGl9B,SAAS,CAACpU,CAAD,CAA1B;AACA,UAAM4gB,IAAI,GAAG,OAAO0wB,QAApB;;AACA,QAAG/1C,IAAI,KAAK4D,SAAT,KAAuB,OAAOmyC,QAAP,KAAoB,QAApB,IAAgC30C,MAAM,CAACupB,QAAP,CAAgBorB,QAAhB,CAAvD,CAAH,EAAqF;AACnF/1C,UAAI,GAAG+1C,QAAP;AACD,KAFD,MAEM,IAAGh0C,OAAO,KAAK6B,SAAZ,IAAyB2jB,QAAQ,CAACwuB,QAAD,CAApC,EAA+C;AACnDh0C,aAAO,GAAGg0C,QAAV;AACD,KAFK,MAEA,IAAGx2C,QAAQ,KAAKqE,SAAb,IAA0ByhB,IAAI,KAAK,UAAtC,EAAiD;AACrD9lB,cAAQ,GAAGw2C,QAAX;AACD,KAFK,MAED;AACH,YAAM,IAAI/G,QAAJ,CAAa,sBAAb,EAAqC,CACzC,mBADyC,EAExC,OAAM/sC,IAAI,CAACC,SAAL,CAAe6zC,QAAf,CAAyB,aAAYtxC,CAAE,EAFL,CAArC,CAAN;AAID;AACF;;AACD,QAAMuxC,MAAM,GAAG,IAAIpH,MAAJ,CAAW7sC,OAAX,CAAf;;AACA,MAAGxC,QAAH,EAAY;AACV,UAAM2xC,OAAO,GAAGnvC,OAAO,KAAK6B,SAAZ,IAAyB7B,OAAO,CAAC8tC,OAAR,KAAoBjsC,SAA7C,GAAyD,EAAzD,GAA8D,EAA9E;AACAoyC,UAAM,CAAC9b,EAAP,CAAU,UAAV,EAAsB,YAAU;AAC9B,UAAI+X,MAAJ;;AACA,aAAM,CAACA,MAAM,GAAG,KAAKgE,IAAL,EAAV,MAA2B,IAAjC,EAAsC;AACpC,YAAGl0C,OAAO,KAAK6B,SAAZ,IAAyB7B,OAAO,CAAC8tC,OAAR,KAAoBjsC,SAAhD,EAA0D;AACxDstC,iBAAO,CAACvsC,IAAR,CAAastC,MAAb;AACD,SAFD,MAEK;AACHf,iBAAO,CAACe,MAAM,CAAC,CAAD,CAAP,CAAP,GAAqBA,MAAM,CAAC,CAAD,CAA3B;AACD;AACF;AACF,KATD;AAUA+D,UAAM,CAAC9b,EAAP,CAAU,OAAV,EAAmB,UAAS7vB,GAAT,EAAa;AAC9B9K,cAAQ,CAAC8K,GAAD,EAAMzG,SAAN,EAAiBoyC,MAAM,CAACrG,IAAxB,CAAR;AACD,KAFD;AAGAqG,UAAM,CAAC9b,EAAP,CAAU,KAAV,EAAiB,YAAU;AACzB36B,cAAQ,CAACqE,SAAD,EAAYstC,OAAZ,EAAqB8E,MAAM,CAACrG,IAA5B,CAAR;AACD,KAFD;AAGD;;AACD,MAAG3vC,IAAI,KAAK4D,SAAZ,EAAsB;AACpB;AACA,QAAG,OAAOsyC,YAAP,KAAwB,UAA3B,EAAsC;AACpCA,kBAAY,CAAC,YAAU;AACrBF,cAAM,CAAC/R,KAAP,CAAajkC,IAAb;AACAg2C,cAAM,CAACzqC,GAAP;AACD,OAHW,CAAZ;AAID,KALD,MAKK;AACHyqC,YAAM,CAAC/R,KAAP,CAAajkC,IAAb;AACAg2C,YAAM,CAACzqC,GAAP;AACD;AACF;;AACD,SAAOyqC,MAAP;AACD,CAnDD;;AAqDA,MAAMhH,QAAN,SAAuBttC,KAAvB,CAA6B;AAC3B7C,aAAW,CAACwvB,IAAD,EAAOrqB,OAAP,EAAgB,GAAGmyC,QAAnB,EAA6B;AACtC,QAAGxsC,KAAK,CAACC,OAAN,CAAc5F,OAAd,CAAH,EAA2BA,OAAO,GAAGA,OAAO,CAACylB,IAAR,CAAa,GAAb,CAAV;AAC3B,UAAMzlB,OAAN;;AACA,QAAGtC,KAAK,CAAC00C,iBAAN,KAA4BxyC,SAA/B,EAAyC;AACvClC,WAAK,CAAC00C,iBAAN,CAAwB,IAAxB,EAA8BpH,QAA9B;AACD;;AACD,SAAK3gB,IAAL,GAAYA,IAAZ;;AACA,SAAI,MAAM3G,OAAV,IAAqByuB,QAArB,EAA8B;AAC5B,WAAI,MAAM7zC,GAAV,IAAiBolB,OAAjB,EAAyB;AACvB,cAAMrf,KAAK,GAAGqf,OAAO,CAACplB,GAAD,CAArB;AACA,aAAKA,GAAL,IAAYlB,MAAM,CAACupB,QAAP,CAAgBtiB,KAAhB,IAAyBA,KAAK,CAAC/G,QAAN,EAAzB,GAA4C+G,KAAK,IAAI,IAAT,GAAgBA,KAAhB,GAAwBpG,IAAI,CAACuB,KAAL,CAAWvB,IAAI,CAACC,SAAL,CAAemG,KAAf,CAAX,CAAhF;AACD;AACF;AACF;;AAd0B;;AAiB7B7E,KAAK,CAACorC,MAAN,GAAeA,MAAf;AAEAprC,KAAK,CAACwrC,QAAN,GAAiBA,QAAjB;AAEAznC,MAAM,CAACjH,OAAP,GAAiBkD,KAAjB;;AAEA,MAAMsrC,UAAU,GAAG,UAAS5tC,GAAT,EAAa;AAC9B,SAAOA,GAAG,CAACgnB,OAAJ,CAAY,UAAZ,EAAwB,UAAS1W,CAAT,EAAYuW,KAAZ,EAAkB;AAC/C,WAAO,MAAMA,KAAK,CAAC8f,WAAN,EAAb;AACD,GAFM,CAAP;AAGD,CAJD;;AAMA,MAAMtgB,QAAQ,GAAG,UAASpJ,GAAT,EAAa;AAC5B,SAAQ,OAAOA,GAAP,KAAe,QAAf,IAA2BA,GAAG,KAAK,IAAnC,IAA2C,CAACxU,KAAK,CAACC,OAAN,CAAcuU,GAAd,CAApD;AACD,CAFD;;AAIA,MAAMu2B,aAAa,GAAG,UAASzC,MAAT,EAAgB;AACpC,SAAOA,MAAM,CAACrhC,KAAP,CAAe+gC,KAAD,IAAWA,KAAK,IAAI,IAAT,IAAiBA,KAAK,CAACrwC,QAAN,IAAkBqwC,KAAK,CAACrwC,QAAN,GAAiBsvC,IAAjB,OAA4B,EAAxF,CAAP;AACD,CAFD;;AAIA,MAAMtB,qBAAqB,GAAG,UAASD,OAAT,EAAiB;AAC7C,QAAMgH,iBAAiB,GAAG,EAA1B;;AACA,OAAI,IAAI5xC,CAAC,GAAG,CAAR,EAAW6F,CAAC,GAAG+kC,OAAO,CAACxsC,MAA3B,EAAmC4B,CAAC,GAAG6F,CAAvC,EAA0C7F,CAAC,EAA3C,EAA8C;AAC5C,UAAMqxC,MAAM,GAAGzG,OAAO,CAAC5qC,CAAD,CAAtB;;AACA,QAAGqxC,MAAM,KAAKlyC,SAAX,IAAwBkyC,MAAM,KAAK,IAAnC,IAA2CA,MAAM,KAAK,KAAzD,EAA+D;AAC7DO,uBAAiB,CAAC5xC,CAAD,CAAjB,GAAuB;AAAEmwC,gBAAQ,EAAE;AAAZ,OAAvB;AACD,KAFD,MAEM,IAAG,OAAOkB,MAAP,KAAkB,QAArB,EAA8B;AAClCO,uBAAiB,CAAC5xC,CAAD,CAAjB,GAAuB;AAAE4O,YAAI,EAAEyiC;AAAR,OAAvB;AACD,KAFK,MAEA,IAAGvuB,QAAQ,CAACuuB,MAAD,CAAX,EAAoB;AACxB,UAAG,OAAOA,MAAM,CAACziC,IAAd,KAAuB,QAA1B,EAAmC;AACjC,cAAM,IAAI27B,QAAJ,CAAa,iCAAb,EAAgD,CACpD,8BADoD,EAEnD,2CAA0CvqC,CAAE,EAFO,EAGpD,kCAHoD,CAAhD,CAAN;AAKD;;AACD4xC,uBAAiB,CAAC5xC,CAAD,CAAjB,GAAuBqxC,MAAvB;AACD,KATK,MASD;AACH,YAAM,IAAI9G,QAAJ,CAAa,+BAAb,EAA8C,CAClD,4BADkD,EAElD,sCAFkD,EAGjD,OAAM/sC,IAAI,CAACC,SAAL,CAAe4zC,MAAf,CAAuB,gBAAerxC,CAAE,EAHG,CAA9C,CAAN;AAKD;AACF;;AACD,SAAO4xC,iBAAP;AACD,CA1BD,C;;;;;;;;;;;ACpmCA,MAAM7yC,KAAK,GAAG9E,mBAAO,CAAC,gDAAD,CAArB;;AAEA6I,MAAM,CAACjH,OAAP,GAAiB,UAASN,IAAT,EAAe+B,OAAO,GAAC,EAAvB,EAA0B;AACzC,MAAG,OAAO/B,IAAP,KAAgB,QAAnB,EAA4B;AAC1BA,QAAI,GAAGoB,MAAM,CAACC,IAAP,CAAYrB,IAAZ,CAAP;AACD;;AACD,QAAMkxC,OAAO,GAAGnvC,OAAO,IAAIA,OAAO,CAAC8tC,OAAnB,GAA6B,EAA7B,GAAkC,EAAlD;AACA,QAAMmG,MAAM,GAAG,IAAIxyC,KAAK,CAACorC,MAAV,CAAiB7sC,OAAjB,CAAf;;AACAi0C,QAAM,CAACrxC,IAAP,GAAc,UAASstC,MAAT,EAAgB;AAC5B,QAAGA,MAAM,KAAK,IAAd,EAAmB;AACjB;AACD;;AACD,QAAGlwC,OAAO,CAAC8tC,OAAR,KAAoBjsC,SAAvB,EACEstC,OAAO,CAACvsC,IAAR,CAAastC,MAAb,EADF,KAEI;AACFf,aAAO,CAACe,MAAM,CAAC,CAAD,CAAP,CAAP,GAAqBA,MAAM,CAAC,CAAD,CAA3B;AACD;AACF,GATD;;AAUA,QAAMqE,IAAI,GAAGN,MAAM,CAACvD,OAAP,CAAezyC,IAAf,EAAqB,KAArB,CAAb;;AACA,MAAGs2C,IAAI,KAAK1yC,SAAZ,EAAuB,MAAM0yC,IAAN;;AACvB,QAAMC,IAAI,GAAGP,MAAM,CAACvD,OAAP,CAAe7uC,SAAf,EAA0B,IAA1B,CAAb;;AACA,MAAG2yC,IAAI,KAAK3yC,SAAZ,EAAuB,MAAM2yC,IAAN;AACvB,SAAOrF,OAAP;AACD,CArBD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACHA;AACA;AAEA;AACA;AACA,IAAIsF,WAAJ,EAAiBC,QAAjB,EAA2BC,aAA3B,EAA0ChpC,GAA1C,EAA+CipC,MAA/C,EAAuDC,KAAvD,EAA8DrvB,QAA9D,EAAwEsvB,QAAxE,EAAkFC,YAAlF,EAAgGC,YAAhG,EAA8GC,aAA9G,EAA6HC,UAA7H,EAAyI5mC,MAAzI,EAAiJ6mC,YAAjJ,EAA+JC,KAA/J,EAAsKrI,UAAtK,EAAkLsI,IAAlL;AAEA/mC,MAAM,GAAG3R,mBAAO,CAAC,sBAAD,CAAhB;AAEA04C,IAAI,GAAG14C,mBAAO,CAAC,kBAAD,CAAd,C,CAEA;AAEA;AACA;AAEA;AACA;;AACA6I,MAAM,CAACjH,OAAP,GAAiB,YAAW;AAC1B,MAAIf,QAAJ,EAAciF,MAAd,EAAsBxE,IAAtB,EAA4B+B,OAA5B,EAAqCs1C,WAArC;;AACA,MAAIx+B,SAAS,CAAChW,MAAV,KAAqB,CAAzB,EAA4B;AAC1B7C,QAAI,GAAG6Y,SAAS,CAAC,CAAD,CAAhB;AACA9W,WAAO,GAAG8W,SAAS,CAAC,CAAD,CAAnB;AACAtZ,YAAQ,GAAGsZ,SAAS,CAAC,CAAD,CAApB;AACD,GAJD,MAIO,IAAIA,SAAS,CAAChW,MAAV,KAAqB,CAAzB,EAA4B;AACjC,QAAI8G,KAAK,CAACC,OAAN,CAAciP,SAAS,CAAC,CAAD,CAAvB,CAAJ,EAAiC;AAC/B7Y,UAAI,GAAG6Y,SAAS,CAAC,CAAD,CAAhB;AACD,KAFD,MAEO;AACL9W,aAAO,GAAG8W,SAAS,CAAC,CAAD,CAAnB;AACD;;AACD,QAAI,OAAOA,SAAS,CAAC,CAAD,CAAhB,KAAwB,UAA5B,EAAwC;AACtCtZ,cAAQ,GAAGsZ,SAAS,CAAC,CAAD,CAApB;AACD,KAFD,MAEO;AACL9W,aAAO,GAAG8W,SAAS,CAAC,CAAD,CAAnB;AACD;AACF,GAXM,MAWA,IAAIA,SAAS,CAAChW,MAAV,KAAqB,CAAzB,EAA4B;AACjC,QAAI,OAAOgW,SAAS,CAAC,CAAD,CAAhB,KAAwB,UAA5B,EAAwC;AACtCtZ,cAAQ,GAAGsZ,SAAS,CAAC,CAAD,CAApB;AACD,KAFD,MAEO,IAAIlP,KAAK,CAACC,OAAN,CAAciP,SAAS,CAAC,CAAD,CAAvB,CAAJ,EAAiC;AACtC7Y,UAAI,GAAG6Y,SAAS,CAAC,CAAD,CAAhB;AACD,KAFM,MAEA;AACL9W,aAAO,GAAG8W,SAAS,CAAC,CAAD,CAAnB;AACD;AACF;;AACD,MAAI9W,OAAO,IAAI,IAAf,EAAqB;AACnBA,WAAO,GAAG,EAAV;AACD;;AACDs1C,aAAW,GAAG,IAAIb,WAAJ,CAAgBz0C,OAAhB,CAAd;;AACA,MAAI/B,IAAJ,EAAU;AACR6iC,WAAO,CAACyU,QAAR,CAAiB,YAAW;AAC1B,UAAIC,CAAJ,EAAO5vB,CAAP,EAAU4R,GAAV;;AACA,WAAK5R,CAAC,GAAG,CAAJ,EAAO4R,GAAG,GAAGv5B,IAAI,CAAC6C,MAAvB,EAA+B8kB,CAAC,GAAG4R,GAAnC,EAAwC5R,CAAC,EAAzC,EAA6C;AAC3C4vB,SAAC,GAAGv3C,IAAI,CAAC2nB,CAAD,CAAR;AACA0vB,mBAAW,CAACpT,KAAZ,CAAkBsT,CAAlB;AACD;;AACD,aAAOF,WAAW,CAAC9rC,GAAZ,EAAP;AACD,KAPD;AAQD;;AACD,MAAIhM,QAAJ,EAAc;AACZiF,UAAM,GAAG,EAAT;AACA6yC,eAAW,CAACnd,EAAZ,CAAe,UAAf,EAA2B,YAAW;AACpC,UAAI71B,KAAJ,EAAW4B,OAAX;AACAA,aAAO,GAAG,EAAV;;AACA,aAAO5B,KAAK,GAAGgzC,WAAW,CAACpB,IAAZ,EAAf,EAAmC;AACjChwC,eAAO,CAACtB,IAAR,CAAaH,MAAM,CAACG,IAAP,CAAYN,KAAZ,CAAb;AACD;;AACD,aAAO4B,OAAP;AACD,KAPD;AAQAoxC,eAAW,CAACnd,EAAZ,CAAe,OAAf,EAAwB,UAAS7vB,GAAT,EAAc;AACpC,aAAO9K,QAAQ,CAAC8K,GAAD,CAAf;AACD,KAFD;AAGAgtC,eAAW,CAACnd,EAAZ,CAAe,KAAf,EAAsB,YAAW;AAC/B,aAAO36B,QAAQ,CAAC,IAAD,EAAOiF,MAAM,CAACilB,IAAP,CAAY,EAAZ,CAAP,CAAf;AACD,KAFD;AAGD;;AACD,SAAO4tB,WAAP;AACD,CA1DD,C,CA4DA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEA;;;AACAb,WAAW,GAAG,MAAMA,WAAN,SAA0BnmC,MAAM,CAACg+B,SAAjC,CAA2C;AACvDxvC,aAAW,CAACumB,IAAI,GAAG,EAAR,EAAY;AACrB,QAAItZ,IAAJ,EAAU0rC,KAAV,EAAiBC,KAAjB,EAAwBC,KAAxB,EAA+BC,KAA/B,EAAsCC,QAAtC,EAAgDxwB,QAAhD,EAA0DO,CAA1D,EAA6DoU,CAA7D,EAAgExC,GAAhE,EAAqEx3B,OAArE,EAA8E81C,YAA9E,EAA4FC,GAA5F,EAAiG9tC,CAAjG;AACA,0CAAU;AACN+tC,wBAAkB,EAAE;AADd,KAAV,GAEQ3yB,IAFR;AAGArjB,WAAO,GAAG,EAAV;;AACA,SAAKg6B,CAAL,IAAU3W,IAAV,EAAgB;AACdpb,OAAC,GAAGob,IAAI,CAAC2W,CAAD,CAAR,CADc,CAEd;;AACAh6B,aAAO,CAAC+sC,UAAU,CAAC/S,CAAD,CAAX,CAAP,GAAyB/xB,CAAzB;AACD,KAVoB,CAWrB;;;AACA,QAAIjI,OAAO,CAAC0tC,SAAR,KAAsB,IAAtB,IAA8B1tC,OAAO,CAAC0tC,SAAR,KAAsB,KAAK,CAA7D,EAAgE;AAC9D1tC,aAAO,CAAC0tC,SAAR,GAAoB,GAApB;AACD,KAFD,MAEO;AACL,UAAIruC,MAAM,CAACupB,QAAP,CAAgB5oB,OAAO,CAAC0tC,SAAxB,CAAJ,EAAwC;AACtC1tC,eAAO,CAAC0tC,SAAR,GAAoB1tC,OAAO,CAAC0tC,SAAR,CAAkBnuC,QAAlB,EAApB;AACD,OAFD,MAEO,IAAI,OAAOS,OAAO,CAAC0tC,SAAf,KAA6B,QAAjC,EAA2C;AAChD,cAAM,IAAI/tC,KAAJ,CAAW,+DAA8DO,IAAI,CAACC,SAAL,CAAeH,OAAO,CAAC0tC,SAAvB,CAAkC,EAA3G,CAAN;AACD;AACF,KApBoB,CAqBrB;;;AACA,QAAI1tC,OAAO,CAACguC,KAAR,KAAkB,IAAlB,IAA0BhuC,OAAO,CAACguC,KAAR,KAAkB,KAAK,CAArD,EAAwD;AACtDhuC,aAAO,CAACguC,KAAR,GAAgB,GAAhB;AACD,KAFD,MAEO;AACL,UAAIhuC,OAAO,CAACguC,KAAR,KAAkB,IAAtB,EAA4B;AAC1BhuC,eAAO,CAACguC,KAAR,GAAgB,GAAhB;AACD,OAFD,MAEO,IAAIhuC,OAAO,CAACguC,KAAR,KAAkB,KAAtB,EAA6B;AAClChuC,eAAO,CAACguC,KAAR,GAAgB,EAAhB;AACD,OAFM,MAEA,IAAI3uC,MAAM,CAACupB,QAAP,CAAgB5oB,OAAO,CAACguC,KAAxB,CAAJ,EAAoC;AACzChuC,eAAO,CAACguC,KAAR,GAAgBhuC,OAAO,CAACguC,KAAR,CAAczuC,QAAd,EAAhB;AACD,OAFM,MAEA,IAAI,OAAOS,OAAO,CAACguC,KAAf,KAAyB,QAA7B,EAAuC;AAC5C,cAAM,IAAIruC,KAAJ,CAAW,sEAAqEO,IAAI,CAACC,SAAL,CAAeH,OAAO,CAACguC,KAAvB,CAA8B,EAA9G,CAAN;AACD;AACF,KAlCoB,CAmCrB;;;AACA,QAAIhuC,OAAO,CAACi2C,MAAR,IAAkB,IAAtB,EAA4B;AAC1Bj2C,aAAO,CAACi2C,MAAR,GAAiB,KAAjB;AACD;;AACD,QAAIj2C,OAAO,CAACk2C,YAAR,IAAwB,IAA5B,EAAkC;AAChCl2C,aAAO,CAACk2C,YAAR,GAAuB,KAAK,CAA5B;AACD;;AACD,QAAIl2C,OAAO,CAACm2C,aAAR,IAAyB,IAA7B,EAAmC;AACjCn2C,aAAO,CAACm2C,aAAR,GAAwB,KAAxB;AACD;;AACD,QAAIn2C,OAAO,CAACo2C,GAAR,IAAe,IAAnB,EAAyB;AACvBp2C,aAAO,CAACo2C,GAAR,GAAc,IAAd;AACD,KA/CoB,CAgDrB;;;AACA,QAAIp2C,OAAO,CAAC4qC,MAAR,KAAmB,IAAnB,IAA2B5qC,OAAO,CAAC4qC,MAAR,KAAmB,KAAK,CAAvD,EAA0D;AACxD5qC,aAAO,CAAC4qC,MAAR,GAAiB,GAAjB;AACD,KAFD,MAEO;AACL,UAAIvrC,MAAM,CAACupB,QAAP,CAAgB5oB,OAAO,CAAC4qC,MAAxB,CAAJ,EAAqC;AACnC5qC,eAAO,CAAC4qC,MAAR,GAAiB5qC,OAAO,CAAC4qC,MAAR,CAAerrC,QAAf,EAAjB;AACD;;AACD,UAAI,OAAOS,OAAO,CAAC4qC,MAAf,KAA0B,QAA9B,EAAwC;AACtC,cAAM,IAAIjrC,KAAJ,CAAW,4DAA2DO,IAAI,CAACC,SAAL,CAAeH,OAAO,CAAC4qC,MAAvB,CAA+B,EAArG,CAAN;AACD,OAFD,MAEO,IAAI5qC,OAAO,CAAC4qC,MAAR,CAAe9pC,MAAf,GAAwB,CAA5B,EAA+B;AACpC,cAAM,IAAInB,KAAJ,CAAW,qDAAoDK,OAAO,CAAC4qC,MAAR,CAAe9pC,MAAO,aAArF,CAAN;AACD;AACF;;AACD,QAAId,OAAO,CAAC2pB,MAAR,IAAkB,IAAtB,EAA4B;AAC1B3pB,aAAO,CAAC2pB,MAAR,GAAiB,KAAjB;AACD,KA/DoB,CAgErB;;;AACA3pB,WAAO,CAACstC,OAAR,GAAkB,KAAK+I,iBAAL,CAAuBr2C,OAAO,CAACstC,OAA/B,CAAlB;;AACA,QAAIttC,OAAO,CAACmtC,IAAR,IAAgB,IAApB,EAA0B;AACxBntC,aAAO,CAACmtC,IAAR,GAAe,EAAf;AACD,KApEoB,CAqErB;;;AACA,QAAIntC,OAAO,CAAC81C,YAAR,KAAyB,KAAK,CAA9B,IAAmC91C,OAAO,CAAC81C,YAAR,KAAyB,IAA5D,IAAoE91C,OAAO,CAAC81C,YAAR,KAAyB,KAAjG,EAAwG;AACtG91C,aAAO,CAAC81C,YAAR,GAAuB,IAAvB;AACD,KAFD,MAEO,IAAI,CAACluC,KAAK,CAACC,OAAN,CAAc7H,OAAO,CAAC81C,YAAtB,CAAL,EAA0C;AAC/C91C,aAAO,CAAC81C,YAAR,GAAuB,CAAC91C,OAAO,CAAC81C,YAAT,CAAvB;AACD;;AACD,QAAI91C,OAAO,CAAC81C,YAAZ,EAA0B;AACxBC,SAAG,GAAG/1C,OAAO,CAAC81C,YAAd;;AACA,WAAKlwB,CAAC,GAAG,CAAJ,EAAO4R,GAAG,GAAGue,GAAG,CAACj1C,MAAtB,EAA8B8kB,CAAC,GAAG4R,GAAlC,EAAuC5R,CAAC,EAAxC,EAA4C;AAC1CkwB,oBAAY,GAAGC,GAAG,CAACnwB,CAAD,CAAlB;AACAP,gBAAQ,GAAG,OAAOywB,YAAP,KAAwB,QAAnC;AACAD,gBAAQ,GAAGC,YAAY,YAAYvvB,MAAnC;;AACA,YAAI,CAAClB,QAAD,IAAa,CAACwwB,QAAlB,EAA4B;AAC1B,gBAAM,IAAIl2C,KAAJ,CAAW,iEAAgEO,IAAI,CAACC,SAAL,CAAe21C,YAAf,CAA6B,EAAxG,CAAN;AACD;AACF;AACF;;AACD,QAAI91C,OAAO,CAACmtC,IAAR,CAAamJ,IAAjB,EAAuB;AACrB;AACAt2C,aAAO,CAACmtC,IAAR,CAAaoJ,OAAb,GAAuBv2C,OAAO,CAACmtC,IAAR,CAAamJ,IAApC;AACD,KAzFoB,CA0FrB;;;AACA,QAAI,CAACvsC,IAAI,GAAG/J,OAAO,CAACmtC,IAAhB,EAAsBoJ,OAAtB,IAAiC,IAArC,EAA2C;AACzCxsC,UAAI,CAACwsC,OAAL,GAAe,UAASjwC,KAAT,EAAgB;AAC7B;AACA,YAAIA,KAAJ,EAAW;AACT,iBAAO,GAAP;AACD,SAFD,MAEO;AACL,iBAAO,EAAP;AACD;AACF,OAPD;AAQD;;AACD,QAAI,CAACmvC,KAAK,GAAGz1C,OAAO,CAACmtC,IAAjB,EAAuBzhC,IAAvB,IAA+B,IAAnC,EAAyC;AACvC+pC,WAAK,CAAC/pC,IAAN,GAAa,UAASpF,KAAT,EAAgB;AAC3B;AACA,eAAO,KAAKA,KAAK,CAACmC,OAAN,EAAZ;AACD,OAHD;AAID;;AACD,QAAI,CAACitC,KAAK,GAAG11C,OAAO,CAACmtC,IAAjB,EAAuBjoB,MAAvB,IAAiC,IAArC,EAA2C;AACzCwwB,WAAK,CAACxwB,MAAN,GAAe,UAAS5e,KAAT,EAAgB;AAC7B;AACA,eAAO,KAAKA,KAAZ;AACD,OAHD;AAID;;AACD,QAAI,CAACqvC,KAAK,GAAG31C,OAAO,CAACmtC,IAAjB,EAAuBj6B,MAAvB,IAAiC,IAArC,EAA2C;AACzCyiC,WAAK,CAACziC,MAAN,GAAe,UAAS5M,KAAT,EAAgB;AAC7B;AACA,eAAOpG,IAAI,CAACC,SAAL,CAAemG,KAAf,CAAP;AACD,OAHD;AAID;;AACD,QAAI,CAACsvC,KAAK,GAAG51C,OAAO,CAACmtC,IAAjB,EAAuBqJ,MAAvB,IAAiC,IAArC,EAA2C;AACzCZ,WAAK,CAACY,MAAN,GAAe,UAASlwC,KAAT,EAAgB;AAC7B,eAAOA,KAAP;AACD,OAFD;AAGD,KA3HoB,CA4HrB;;;AACA,QAAItG,OAAO,CAACkuC,gBAAR,KAA6B,KAAK,CAAlC,IAAuCluC,OAAO,CAACkuC,gBAAR,KAA6B,IAAxE,EAA8E;AAC5E,UAAIluC,OAAO,CAACkuC,gBAAR,IAA4B,IAAhC,EAAsC;AACpCluC,eAAO,CAACkuC,gBAAR,GAA2B,IAA3B;AACD;AACF,KAJD,MAIO;AACL,UAAI7uC,MAAM,CAACupB,QAAP,CAAgB5oB,OAAO,CAACkuC,gBAAxB,CAAJ,EAA+C;AAC7CluC,eAAO,CAACkuC,gBAAR,GAA2BluC,OAAO,CAACkuC,gBAAR,CAAyB3uC,QAAzB,EAA3B;AACD,OAFD,MAEO,IAAI,OAAOS,OAAO,CAACkuC,gBAAf,KAAoC,QAAxC,EAAkD;AACvD,cAAM,IAAIvuC,KAAJ,CAAW,sEAAqEO,IAAI,CAACC,SAAL,CAAeH,OAAO,CAACkuC,gBAAvB,CAAyC,EAAzH,CAAN;AACD;;AACD,cAAQluC,OAAO,CAACkuC,gBAAhB;AACE,aAAK,MAAL;AACEluC,iBAAO,CAACkuC,gBAAR,GAA2B,IAA3B;AACA;;AACF,aAAK,MAAL;AACEluC,iBAAO,CAACkuC,gBAAR,GAA2B,IAA3B;AACA;;AACF,aAAK,KAAL;AACEluC,iBAAO,CAACkuC,gBAAR,GAA2B,IAA3B;AACA;;AACF,aAAK,SAAL;AACEluC,iBAAO,CAACkuC,gBAAR,GAA2B,MAA3B;AACA;;AACF,aAAK,OAAL;AACEluC,iBAAO,CAACkuC,gBAAR,GAA2B,QAA3B;AACA;;AACF,aAAK,SAAL;AACEluC,iBAAO,CAACkuC,gBAAR,GAA2B,QAA3B;AAjBJ;AAmBD,KA1JoB,CA2JrB;;;AACA,SAAKluC,OAAL,GAAeA,OAAf,CA5JqB,CA6JrB;;AACA,SAAKovC,KAAL,GAAa;AACXY,UAAI,EAAE;AADK,KAAb,CA9JqB,CAiKrB;;AACA,SAAKpC,IAAL,GAAY;AACVuB,aAAO,EAAE;AADC,KAAZ;AAGA;AACD,GAvKsD,CAyKvD;AAEA;;;AACAsB,YAAU,CAACnuC,KAAD,EAAQioB,QAAR,EAAkB/sB,QAAlB,EAA4B;AACpC,QAAIuM,IAAJ,EAAUxI,CAAV;;AACA,QAAI,KAAK6tC,KAAL,CAAWY,IAAX,KAAoB,IAAxB,EAA8B;AAC5B;AACD,KAJmC,CAKpC;;;AACA,QAAI,EAAEpoC,KAAK,CAACC,OAAN,CAAcvF,KAAd,KAAwB,OAAOA,KAAP,KAAiB,QAA3C,CAAJ,EAA0D;AACxD,WAAK8sC,KAAL,CAAWY,IAAX,GAAkB,IAAlB;AACA,aAAOxyC,QAAQ,CAACmC,KAAK,CAAE,qDAAoDO,IAAI,CAACC,SAAL,CAAemC,KAAf,CAAsB,EAA5E,CAAN,CAAf;AACD,KATmC,CAUpC;;;AACA,QAAI,KAAKsrC,IAAL,CAAUuB,OAAV,KAAsB,CAA1B,EAA6B;AAC3B,UAAIvnC,KAAK,CAACC,OAAN,CAAcvF,KAAd,CAAJ,EAA0B;AACxB,YAAI,KAAKtC,OAAL,CAAa2pB,MAAb,KAAwB,IAAxB,IAAgC,CAAC,KAAK3pB,OAAL,CAAastC,OAAlD,EAA2D;AACzD,eAAK8B,KAAL,CAAWY,IAAX,GAAkB,IAAlB;AACA,iBAAOxyC,QAAQ,CAACmC,KAAK,CAAC,gFAAD,CAAN,CAAf;AACD;AACF,OALD,MAKO;AACL,YAAI,CAACoK,IAAI,GAAG,KAAK/J,OAAb,EAAsBstC,OAAtB,IAAiC,IAArC,EAA2C;AACzCvjC,cAAI,CAACujC,OAAL,GAAe,KAAK+I,iBAAL,CAAuBjxC,MAAM,CAACoB,IAAP,CAAYlE,KAAZ,CAAvB,CAAf;AACD;AACF;AACF;;AACD,QAAI,KAAKsrC,IAAL,CAAUuB,OAAV,KAAsB,CAA1B,EAA6B;AAC3B;AACA,WAAKzuC,OAAL;AACD;;AACD,QAAI;AACF;AACA,WAAKozC,IAAL,CAAU,QAAV,EAAoBxxC,KAApB,EAA2B,KAAKsrC,IAAL,CAAUuB,OAArC;AACD,KAHD,CAGE,OAAOxtC,KAAP,EAAc;AACdJ,OAAC,GAAGI,KAAJ;AACA,WAAKytC,KAAL,CAAWY,IAAX,GAAkB,IAAlB;AACA,aAAO,KAAK8D,IAAL,CAAU,OAAV,EAAmBvyC,CAAnB,CAAP;AACD,KAlCmC,CAmCpC;;;AACA,QAAI,KAAKvB,OAAL,CAAao2C,GAAjB,EAAsB;AACpB9zC,WAAK,GAAG,KAAKnC,SAAL,CAAemC,KAAf,CAAR;;AACA,UAAIA,KAAK,IAAI,IAAb,EAAmB;AACjB;AACD;;AACDA,WAAK,GAAGA,KAAK,GAAG,KAAKtC,OAAL,CAAakuC,gBAA7B;AACD,KAND,MAMO;AACL5rC,WAAK,GAAG,KAAKnC,SAAL,CAAemC,KAAf,CAAR;;AACA,UAAIA,KAAK,IAAI,IAAb,EAAmB;AACjB;AACD;;AACD,UAAI,KAAKtC,OAAL,CAAa2pB,MAAb,IAAuB,KAAKikB,IAAL,CAAUuB,OAArC,EAA8C;AAC5C7sC,aAAK,GAAG,KAAKtC,OAAL,CAAakuC,gBAAb,GAAgC5rC,KAAxC;AACD;AACF,KAlDmC,CAmDpC;;;AACA,SAAKsrC,IAAL,CAAUuB,OAAV;AACA,SAAKvsC,IAAL,CAAUN,KAAV;AACA,WAAO9E,QAAQ,EAAf;AACD,GAnOsD,CAqOvD;AAEA;;;AACAmzC,QAAM,CAACnzC,QAAD,EAAW;AACf,QAAI,KAAKowC,IAAL,CAAUuB,OAAV,KAAsB,CAA1B,EAA6B;AAC3B,WAAKzuC,OAAL;AACD;;AACD,WAAOlD,QAAQ,EAAf;AACD,GA7OsD,CA+OvD;AAEA;;;AACA2C,WAAS,CAACmC,KAAD,EAAQm0C,aAAa,GAAG,KAAxB,EAA+B;AACtC,QAAI1C,MAAJ,EAAYzG,OAAZ,EAAqBoJ,cAArB,EAAqCC,aAArC,EAAoDC,oBAApD,EAA0EC,iBAA1E,EAA6FC,SAA7F,EAAwGpJ,SAAxG,EAAmHplC,GAAnH,EAAwHsiC,MAAxH,EAAgIgF,KAAhI,EAAuIjmB,MAAvI,EAA+IjnB,CAA/I,EAAkJkjB,CAAlJ,EAAqJrd,CAArJ,EAAwJivB,GAAxJ,EAA6Juf,CAA7J,EAAgK/2C,OAAhK,EAAyKguC,KAAzK,EAAgLiI,MAAhL,EAAwLe,WAAxL,EAAqMC,YAArM,EAAmNf,YAAnN,EAAiOJ,YAAjO,EAA+OK,aAA/O,EAA8PjG,MAA9P,EAAsQhC,gBAAtQ,EAAwR6H,GAAxR,EAA6RmB,IAA7R,EAAmSC,MAAnS,EAA2SC,WAA3S,EAAwT9wC,KAAxT;;AACA,QAAI,OAAOhE,KAAP,KAAiB,QAArB,EAA+B;AAC7B,aAAOA,KAAP;AACD;;AAJqC,wBAKjB,KAAKtC,OALY;AAKpCstC,WALoC,iBAKpCA,OALoC;AAK3B3jB,UAL2B,iBAK3BA,MAL2B;AAMtCumB,UAAM,GAAG,EAAT,CANsC,CAOtC;;AACA,QAAItoC,KAAK,CAACC,OAAN,CAAcvF,KAAd,CAAJ,EAA0B;AACxB,UAAIgrC,OAAJ,EAAa;AACX;AACA;AACAhrC,aAAK,CAACmO,MAAN,CAAa68B,OAAO,CAACxsC,MAArB;AACD,OALuB,CAM9B;;;AACM,WAAK4B,CAAC,GAAGkjB,CAAC,GAAG,CAAR,EAAW4R,GAAG,GAAGl1B,KAAK,CAACxB,MAA5B,EAAoC8kB,CAAC,GAAG4R,GAAxC,EAA6C90B,CAAC,GAAG,EAAEkjB,CAAnD,EAAsD;AACpDgqB,aAAK,GAAGttC,KAAK,CAACI,CAAD,CAAb;;AADoD,2BAErC,KAAKuwC,MAAL,CAAYrD,KAAZ,EAAmB;AAChC7rC,eAAK,EAAErB,CADyB;AAEhCqxC,gBAAM,EAAErxC,CAFwB;AAGhCysC,iBAAO,EAAE,KAAKvB,IAAL,CAAUuB,OAHa;AAIhCxlB,gBAAM,EAAE8sB;AAJwB,SAAnB,CAFqC;;AAAA;;AAEnDnuC,WAFmD;AAE9ChC,aAF8C;;AAQpD,YAAIgC,GAAJ,EAAS;AACP,eAAKwrC,IAAL,CAAU,OAAV,EAAmBxrC,GAAnB;AACA;AACD;;AACD4nC,cAAM,CAACxtC,CAAD,CAAN,GAAY,CAAC4D,KAAD,EAAQspC,KAAR,CAAZ;AACD;AACF,KArBD,MAqBO;AACL;AACA,UAAItC,OAAJ,EAAa;AACX,aAAK5qC,CAAC,GAAG6F,CAAC,GAAG,CAAR,EAAWwtC,GAAG,GAAGzI,OAAO,CAACxsC,MAA9B,EAAuC,KAAKi1C,GAAL,GAAWxtC,CAAC,GAAGwtC,GAAf,GAAqBxtC,CAAC,GAAGwtC,GAAhE,EAAsErzC,CAAC,GAAG,KAAKqzC,GAAL,GAAW,EAAExtC,CAAb,GAAiB,EAAEA,CAA7F,EAAgG;AAC9FqnC,eAAK,GAAGjkC,GAAG,CAACrJ,KAAD,EAAQgrC,OAAO,CAAC5qC,CAAD,CAAP,CAAWnC,GAAnB,CAAX;;AAD8F,8BAE/E,KAAK0yC,MAAL,CAAYrD,KAAZ,EAAmB;AAChC7rC,iBAAK,EAAErB,CADyB;AAEhCqxC,kBAAM,EAAEzG,OAAO,CAAC5qC,CAAD,CAAP,CAAWnC,GAFa;AAGhC4uC,mBAAO,EAAE,KAAKvB,IAAL,CAAUuB,OAHa;AAIhCxlB,kBAAM,EAAE8sB;AAJwB,WAAnB,CAF+E;;AAAA;;AAE7FnuC,aAF6F;AAExFhC,eAFwF;;AAQ9F,cAAIgC,GAAJ,EAAS;AACP,iBAAKwrC,IAAL,CAAU,OAAV,EAAmBxrC,GAAnB;AACA;AACD;;AACD4nC,gBAAM,CAACxtC,CAAD,CAAN,GAAY,CAAC4D,KAAD,EAAQspC,KAAR,CAAZ;AACD;AACF,OAfD,MAeO;AACL,aAAKmE,MAAL,IAAezxC,KAAf,EAAsB;AACpBstC,eAAK,GAAGttC,KAAK,CAACyxC,MAAD,CAAb;;AADoB,8BAEL,KAAKd,MAAL,CAAYrD,KAAZ,EAAmB;AAChC7rC,iBAAK,EAAErB,CADyB;AAEhCqxC,kBAAM,EAAEzG,OAAO,CAAC5qC,CAAD,CAAP,CAAWnC,GAFa;AAGhC4uC,mBAAO,EAAE,KAAKvB,IAAL,CAAUuB,OAHa;AAIhCxlB,kBAAM,EAAE8sB;AAJwB,WAAnB,CAFK;;AAAA;;AAEnBnuC,aAFmB;AAEdhC,eAFc;;AAQpB,cAAIgC,GAAJ,EAAS;AACP,iBAAKwrC,IAAL,CAAU,OAAV,EAAmBxrC,GAAnB;AACA;AACD;;AACD4nC,gBAAM,CAACttC,IAAP,CAAY,CAAC0D,KAAD,EAAQspC,KAAR,CAAZ;AACD;AACF;AACF;;AACDkH,aAAS,GAAG,EAAZ;;AACA,SAAKp0C,CAAC,GAAGq0C,CAAC,GAAG,CAAR,EAAWG,IAAI,GAAGhH,MAAM,CAACpvC,MAA9B,EAAuC,KAAKo2C,IAAL,GAAYH,CAAC,GAAGG,IAAhB,GAAuBH,CAAC,GAAGG,IAAlE,EAAyEx0C,CAAC,GAAG,KAAKw0C,IAAL,GAAY,EAAEH,CAAd,GAAkB,EAAEA,CAAjG,EAAoG;AAAA,qCACjF7G,MAAM,CAACxtC,CAAD,CAD2E;;AACjG4D,WADiG;AAC1FspC,WAD0F;;AAElG,UAAI,OAAOtpC,KAAP,KAAiB,QAArB,EAA+B;AAC7BtG,eAAO,GAAG,KAAKA,OAAf;AACD,OAFD,MAEO,IAAIwlB,QAAQ,CAAClf,KAAD,CAAZ,EAAqB;AAAA,qBACHA,KADG;AACxBA,aADwB,UACxBA,KADwB;AACdtG,eADc;;AAE1B,YAAI,EAAE,OAAOsG,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,KAAK,KAAK,CAA5C,IAAiDA,KAAK,KAAK,IAA7D,CAAJ,EAAwE;AACtE,eAAKwtC,IAAL,CAAU,OAAV,EAAmBn0C,KAAK,CAAE,sFAAqFO,IAAI,CAACC,SAAL,CAAemG,KAAf,CAAsB,EAA7G,CAAxB;AACA;AACD;;AACDtG,eAAO,mCAAO,KAAKA,OAAZ,GAAwBA,OAAxB,CAAP;AACD,OAPM,MAOA,IAAIsG,KAAK,KAAK,KAAK,CAAf,IAAoBA,KAAK,KAAK,IAAlC,EAAwC;AAC7CtG,eAAO,GAAG,KAAKA,OAAf;AACD,OAFM,MAEA;AACL,aAAK8zC,IAAL,CAAU,OAAV,EAAmBn0C,KAAK,CAAE,iGAAgGO,IAAI,CAACC,SAAL,CAAemG,KAAf,CAAsB,EAAxH,CAAxB;AACA;AACD;;AAhBiG,qBAiBCtG,OAjBD;AAiBhG0tC,eAjBgG,YAiBhGA,SAjBgG;AAiBrF9C,YAjBqF,YAiBrFA,MAjBqF;AAiB7EoD,WAjB6E,YAiB7EA,KAjB6E;AAiBtEiI,YAjBsE,YAiBtEA,MAjBsE;AAiB9DC,kBAjB8D,YAiB9DA,YAjB8D;AAiBhDC,mBAjBgD,YAiBhDA,aAjBgD;AAiBjCL,kBAjBiC,YAiBjCA,YAjBiC;AAiBnB5H,sBAjBmB,YAiBnBA,gBAjBmB;;AAkBlG,UAAI5nC,KAAJ,EAAW;AACT,YAAI,OAAOA,KAAP,KAAiB,QAArB,EAA+B;AAC7B,eAAKwtC,IAAL,CAAU,OAAV,EAAmBn0C,KAAK,CAAE,0DAAyDO,IAAI,CAACC,SAAL,CAAemG,KAAf,CAAsB,EAAjF,CAAxB;AACA,iBAAO,IAAP;AACD;;AACDuwC,yBAAiB,GAAGnJ,SAAS,CAAC5sC,MAAV,IAAoBwF,KAAK,CAAC0P,OAAN,CAAc03B,SAAd,KAA4B,CAApE;AACAiJ,qBAAa,GAAI3I,KAAK,KAAK,EAAX,IAAkB1nC,KAAK,CAAC0P,OAAN,CAAcg4B,KAAd,KAAwB,CAA1D;AACA0I,sBAAc,GAAGpwC,KAAK,CAAC0P,OAAN,CAAc40B,MAAd,KAAyB,CAAzB,IAA+BA,MAAM,KAAKoD,KAA3D;AACA4I,4BAAoB,GAAGtwC,KAAK,CAAC0P,OAAN,CAAck4B,gBAAd,KAAmC,CAA1D;AACA+I,oBAAY,GAAGd,aAAa,IAAI,OAAOvG,KAAP,KAAiB,QAAjD;AACAoH,mBAAW,GAAGlB,YAAY,IAAI,OAAOlG,KAAP,KAAiB,QAAjC,IAA6CkG,YAAY,CAAC9tC,MAAb,CAAoB,UAAS8tC,YAAT,EAAuB;AACpG,cAAI,OAAOA,YAAP,KAAwB,QAA5B,EAAsC;AACpC,mBAAOxvC,KAAK,CAAC0P,OAAN,CAAc8/B,YAAd,MAAgC,CAAC,CAAxC;AACD,WAFD,MAEO;AACL,mBAAOA,YAAY,CAACl3C,IAAb,CAAkB0H,KAAlB,CAAP;AACD;AACF,SAN0D,CAA3D;AAOA0wC,mBAAW,GAAGA,WAAW,IAAIA,WAAW,CAACl2C,MAAZ,GAAqB,CAAlD;AACAs2C,mBAAW,GAAGT,aAAa,KAAK,IAAlB,IAA0BE,iBAA1B,IAA+CD,oBAA/C,IAAuEX,MAAvE,IAAiFgB,YAAjF,IAAiGD,WAA/G;;AACA,YAAII,WAAW,KAAK,IAAhB,IAAwBV,cAAc,KAAK,IAA/C,EAAqD;AACnDS,gBAAM,GAAGvM,MAAM,KAAK,IAAX,GAAkB,IAAIrkB,MAAJ,CAAWqkB,MAAM,GAAGA,MAApB,EAA4B,GAA5B,CAAlB,GAAqD,IAAIrkB,MAAJ,CAAWqkB,MAAX,EAAmB,GAAnB,CAA9D;AACAtkC,eAAK,GAAGA,KAAK,CAAC6f,OAAN,CAAcgxB,MAAd,EAAsBvM,MAAM,GAAGA,MAA/B,CAAR;AACD;;AACD,YAAI+L,aAAa,KAAK,IAAtB,EAA4B;AAC1BQ,gBAAM,GAAG,IAAI5wB,MAAJ,CAAWynB,KAAX,EAAkB,GAAlB,CAAT;AACA1nC,eAAK,GAAGA,KAAK,CAAC6f,OAAN,CAAcgxB,MAAd,EAAsBvM,MAAM,GAAGoD,KAA/B,CAAR;AACD;;AACD,YAAIoJ,WAAW,KAAK,IAApB,EAA0B;AACxB9wC,eAAK,GAAG0nC,KAAK,GAAG1nC,KAAR,GAAgB0nC,KAAxB;AACD;;AACD8I,iBAAS,IAAIxwC,KAAb;AACD,OA/BD,MA+BO,IAAI4vC,YAAY,KAAK,IAAjB,IAA2BA,YAAY,IAAI,IAAjB,IAA0BtG,KAAK,KAAK,EAApC,IAA0CuG,aAAa,KAAK,KAA1F,EAAkG;AACvGW,iBAAS,IAAI9I,KAAK,GAAGA,KAArB;AACD;;AACD,UAAItrC,CAAC,KAAKwtC,MAAM,CAACpvC,MAAP,GAAgB,CAA1B,EAA6B;AAC3Bg2C,iBAAS,IAAIpJ,SAAb;AACD;AACF;;AACD,WAAOoJ,SAAP;AACD,GA3WsD,CA6WvD;AAEA;;;AACAp2C,SAAO,GAAG;AACR,QAAIA,OAAJ;;AACA,QAAI,CAAC,KAAKV,OAAL,CAAa2pB,MAAlB,EAA0B;AACxB;AACD;;AACD,QAAI,CAAC,KAAK3pB,OAAL,CAAastC,OAAlB,EAA2B;AACzB;AACD;;AACD5sC,WAAO,GAAG,KAAKV,OAAL,CAAastC,OAAb,CAAqB1pC,GAArB,CAAyB,UAASmwC,MAAT,EAAiB;AAClD,aAAOA,MAAM,CAACpqB,MAAd;AACD,KAFS,CAAV;;AAGA,QAAI,KAAK3pB,OAAL,CAAao2C,GAAjB,EAAsB;AACpB11C,aAAO,GAAG,KAAKP,SAAL,CAAeO,OAAf,EAAwB,IAAxB,IAAgC,KAAKV,OAAL,CAAakuC,gBAAvD;AACD,KAFD,MAEO;AACLxtC,aAAO,GAAG,KAAKP,SAAL,CAAeO,OAAf,CAAV;AACD;;AACD,WAAO,KAAKkC,IAAL,CAAUlC,OAAV,CAAP;AACD;;AAEDuyC,QAAM,CAAC3sC,KAAD,EAAQqf,OAAR,EAAiB;AACrB,QAAIrd,GAAJ,EAASgb,IAAT;AACAA,QAAI,GAAG,OAAOhd,KAAd;;AACA,QAAI;AACF,UAAIgd,IAAI,KAAK,QAAb,EAAuB;AACrB;AACA,eAAO,CAAC,KAAK,CAAN,EAAS,KAAKtjB,OAAL,CAAamtC,IAAb,CAAkBqJ,MAAlB,CAAyBlwC,KAAzB,EAAgCqf,OAAhC,CAAT,CAAP;AACD,OAHD,MAGO,IAAIrC,IAAI,KAAK,QAAb,EAAuB;AAC5B,eAAO,CAAC,KAAK,CAAN,EAAS,KAAKtjB,OAAL,CAAamtC,IAAb,CAAkBjoB,MAAlB,CAAyB5e,KAAzB,EAAgCqf,OAAhC,CAAT,CAAP;AACD,OAFM,MAEA,IAAIrC,IAAI,KAAK,SAAb,EAAwB;AAC7B,eAAO,CAAC,KAAK,CAAN,EAAS,KAAKtjB,OAAL,CAAamtC,IAAb,CAAkBoJ,OAAlB,CAA0BjwC,KAA1B,EAAiCqf,OAAjC,CAAT,CAAP;AACD,OAFM,MAEA,IAAIrf,KAAK,YAAYlC,IAArB,EAA2B;AAChC,eAAO,CAAC,KAAK,CAAN,EAAS,KAAKpE,OAAL,CAAamtC,IAAb,CAAkBzhC,IAAlB,CAAuBpF,KAAvB,EAA8Bqf,OAA9B,CAAT,CAAP;AACD,OAFM,MAEA,IAAIrC,IAAI,KAAK,QAAT,IAAqBhd,KAAK,KAAK,IAAnC,EAAyC;AAC9C,eAAO,CAAC,KAAK,CAAN,EAAS,KAAKtG,OAAL,CAAamtC,IAAb,CAAkBj6B,MAAlB,CAAyB5M,KAAzB,EAAgCqf,OAAhC,CAAT,CAAP;AACD,OAFM,MAEA;AACL,eAAO,CAAC,KAAK,CAAN,EAASrf,KAAT,EAAgBA,KAAhB,CAAP;AACD;AACF,KAfD,CAeE,OAAO3E,KAAP,EAAc;AACd2G,SAAG,GAAG3G,KAAN;AACA,aAAO,CAAC2G,GAAD,CAAP;AACD;AACF,GAzZsD,CA2ZvD;;;AACA+tC,mBAAiB,CAAC/I,OAAD,EAAU;AACzB,QAAIyG,MAAJ,EAAY/Z,CAAZ,EAAe/xB,CAAf;;AACA,QAAIqlC,OAAO,IAAI,IAAf,EAAqB;AACnB,aAAO,IAAP;AACD;;AACD,QAAIA,OAAO,IAAI,IAAf,EAAqB;AACnB,UAAI,OAAOA,OAAP,KAAmB,QAAvB,EAAiC;AAC/B,cAAM3tC,KAAK,CAAC,wDAAD,CAAX;AACD;;AACD,UAAI,CAACiI,KAAK,CAACC,OAAN,CAAcylC,OAAd,CAAL,EAA6B;AAC3BA,eAAO,GAAI,YAAW;AACpB,cAAIppC,OAAJ;AACAA,iBAAO,GAAG,EAAV;;AACA,eAAK81B,CAAL,IAAUsT,OAAV,EAAmB;AACjBrlC,aAAC,GAAGqlC,OAAO,CAACtT,CAAD,CAAX;AACA91B,mBAAO,CAACtB,IAAR,CAAa;AACXrC,iBAAG,EAAEy5B,CADM;AAEXrQ,oBAAM,EAAE1hB;AAFG,aAAb;AAID;;AACD,iBAAO/D,OAAP;AACD,SAXS,EAAV;AAYD,OAbD,MAaO;AACLopC,eAAO,GAAI,YAAW;AACpB,cAAI1nB,CAAJ,EAAO4R,GAAP,EAAYtzB,OAAZ;AACAA,iBAAO,GAAG,EAAV;;AACA,eAAK0hB,CAAC,GAAG,CAAJ,EAAO4R,GAAG,GAAG8V,OAAO,CAACxsC,MAA1B,EAAkC8kB,CAAC,GAAG4R,GAAtC,EAA2C5R,CAAC,EAA5C,EAAgD;AAC9CmuB,kBAAM,GAAGzG,OAAO,CAAC1nB,CAAD,CAAhB;;AACA,gBAAI,OAAOmuB,MAAP,KAAkB,QAAtB,EAAgC;AAC9B7vC,qBAAO,CAACtB,IAAR,CAAa;AACXrC,mBAAG,EAAEwzC,MADM;AAEXpqB,sBAAM,EAAEoqB;AAFG,eAAb;AAID,aALD,MAKO,IAAI,OAAOA,MAAP,KAAkB,QAAlB,IAA+BA,MAAM,IAAI,IAAzC,IAAkD,CAACnsC,KAAK,CAACC,OAAN,CAAcksC,MAAd,CAAvD,EAA8E;AACnF,kBAAI,CAACA,MAAM,CAACxzC,GAAZ,EAAiB;AACf,sBAAMZ,KAAK,CAAC,uDAAD,CAAX;AACD;;AACD,kBAAIo0C,MAAM,CAACpqB,MAAP,IAAiB,IAArB,EAA2B;AACzBoqB,sBAAM,CAACpqB,MAAP,GAAgBoqB,MAAM,CAACxzC,GAAvB;AACD;;AACD2D,qBAAO,CAACtB,IAAR,CAAamxC,MAAb;AACD,aARM,MAQA;AACL,oBAAMp0C,KAAK,CAAC,yDAAD,CAAX;AACD;AACF;;AACD,iBAAOuE,OAAP;AACD,SAvBS,EAAV;AAwBD;AACF;;AACD,WAAOopC,OAAP;AACD;;AA9csD,CAAzD;AAkdA9nC,MAAM,CAACjH,OAAP,CAAek2C,WAAf,GAA6BA,WAA7B;;AAEAjvB,QAAQ,GAAG,UAASpJ,GAAT,EAAc;AACvB,SAAO,OAAOA,GAAP,KAAe,QAAf,IAA2BA,GAAG,KAAK,IAAnC,IAA2C,CAACxU,KAAK,CAACC,OAAN,CAAcuU,GAAd,CAAnD;AACD,CAFD;;AAIA2wB,UAAU,GAAG,UAAS5tC,GAAT,EAAc;AACzB,SAAOA,GAAG,CAACgnB,OAAJ,CAAY,UAAZ,EAAwB,UAAS1W,CAAT,EAAYuW,KAAZ,EAAmBjiB,KAAnB,EAA0B;AACvD,WAAO,MAAMiiB,KAAK,CAAC8f,WAAN,EAAb;AACD,GAFM,CAAP;AAGD,CAJD,C,CAMA;;;AACA6O,aAAa,GAAG,IAAIrvB,UAAJ,CAAe,CAAf,CAAhB;AAEAyvB,YAAY,GAAG,UAAf,C,CAEA;AACA;AACA;AACA;AACA;;AACAG,UAAU,GAAG3uB,MAAM,CAAC,cAAc,GAAd,GAAoB,QAApB,GAA+B,eAA/B,GAAiD,GAAjD,GAAuD,wCAAvD,GAAkG,MAAlG,GAA2G,GAA3G,GAAiH,oCAAlH,EAAwJ,GAAxJ,CAAnB;AAEAyuB,YAAY,GAAG,kDAAf;AAEAC,aAAa,GAAG,OAAhB;;AAEAL,MAAM,GAAG,UAAStuC,KAAT,EAAgB;AACvB,MAAIA,KAAK,IAAI,IAAb,EAAmB;AACjB,QAAIA,KAAK,KAAK,KAAK,CAAnB,EAAsB;AACpB;AACD,KAFD,MAEO;AACL;AACD;AACF;;AACD,SAAOlB,MAAM,CAAC4B,SAAP,CAAiBzH,QAAjB,CAA0B0H,IAA1B,CAA+BX,KAA/B,CAAP;AACD,CATD;;AAWAuuC,KAAK,GAAG,UAASvuC,KAAT,EAAgB4M,MAAhB,EAAwB;AAC9B,MAAIoQ,IAAJ;;AACA,MAAI1b,KAAK,CAACC,OAAN,CAAcvB,KAAd,CAAJ,EAA0B;AACxB,WAAO,KAAP;AACD;;AACDgd,MAAI,GAAG,OAAOhd,KAAd;;AACA,MAAIgd,IAAI,KAAK,QAAT,IAAqBA,IAAI,KAAK,QAA9B,IAA0CA,IAAI,KAAK,SAAnD,IAAiEhd,KAAK,IAAI,IAA1E,IAAmFwuC,QAAQ,CAACxuC,KAAD,CAA/F,EAAwG;AACtG,WAAO,IAAP;AACD;;AACD,SAAO2uC,aAAa,CAACr2C,IAAd,CAAmB0H,KAAnB,KAA6B,CAAC0uC,YAAY,CAACp2C,IAAb,CAAkB0H,KAAlB,CAA9B,IAA4D4M,MAAM,IAAI,IAAX,IAAoB5M,KAAK,IAAIlB,MAAM,CAAC8N,MAAD,CAArG;AACD,CAVD;;AAYA4hC,QAAQ,GAAG,UAASxuC,KAAT,EAAgB;AACzB,MAAIgd,IAAJ;AACAA,MAAI,GAAG,OAAOhd,KAAd;AACA,SAAOgd,IAAI,KAAK,QAAT,IAAsBA,IAAI,KAAK,QAAT,IAAsBhd,KAAK,IAAI,IAA/B,IAAwCsuC,MAAM,CAACtuC,KAAD,CAAN,KAAkB,iBAAvF;AACD,CAJD;;AAMA6uC,YAAY,GAAG,UAASqB,MAAT,EAAiB;AAC9B,MAAIh1C,MAAJ;AACAA,QAAM,GAAG,EAAT;;AACA,MAAIg1C,MAAM,CAAClxB,UAAP,CAAkB,CAAlB,MAAyBqvB,aAA7B,EAA4C;AAC1CnzC,UAAM,CAACoB,IAAP,CAAY,EAAZ;AACD;;AACD4zC,QAAM,CAACrwB,OAAP,CAAe+uB,UAAf,EAA2B,UAASlvB,KAAT,EAAgBqxB,UAAhB,EAA4BrJ,KAA5B,EAAmCsJ,SAAnC,EAA8C;AACvE,QAAI/2C,GAAJ;AACAA,OAAG,GAAGylB,KAAN;;AACA,QAAIgoB,KAAJ,EAAW;AACTztC,SAAG,GAAG+2C,SAAS,CAACnxB,OAAV,CAAkB4uB,YAAlB,EAAgC,IAAhC,CAAN;AACD,KAFD,MAEO,IAAIsC,UAAJ,EAAgB;AACrB92C,SAAG,GAAG82C,UAAU,CAACxI,IAAX,EAAN;AACD;;AACD,WAAOrtC,MAAM,CAACoB,IAAP,CAAYrC,GAAZ,CAAP;AACD,GATD;AAUA,SAAOiB,MAAP;AACD,CAjBD;;AAmBAkzC,QAAQ,GAAG,UAASpuC,KAAT,EAAgB4M,MAAhB,EAAwB;AACjC,MAAItL,KAAK,CAACC,OAAN,CAAcvB,KAAd,CAAJ,EAA0B;AACxB,WAAOA,KAAP;AACD,GAFD,MAEO;AACL,QAAIuuC,KAAK,CAACvuC,KAAD,EAAQ4M,MAAR,CAAT,EAA0B;AACxB,aAAO,CAAC5M,KAAD,CAAP;AACD,KAFD,MAEO;AACL,aAAO6uC,YAAY,CAAC7uC,KAAD,CAAnB;AACD;AACF;AACF,CAVD;;AAYA8uC,KAAK,GAAG,UAAS9uC,KAAT,EAAgB;AACtB,MAAIyvC,GAAJ,EAASv0C,MAAT;;AACA,MAAI,OAAO8E,KAAP,KAAiB,QAAjB,IAA6BwuC,QAAQ,CAACxuC,KAAD,CAAzC,EAAkD;AAChD,WAAOA,KAAP;AACD;;AACD9E,QAAM,GAAI,GAAE8E,KAAM,EAAlB;AACA,SAAO,CAACyvC,GAAG,GAAGv0C,MAAM,KAAK,GAAX,IAAmB,IAAI8E,KAAL,KAAgB,CAACixC,QAA1C,KAAuD,IAAvD,GAA8DxB,GAA9D,GAAoE;AACzE,UAAMv0C;AADmE,GAA3E;AAGD,CATD;;AAWAmK,GAAG,GAAG,UAASuH,MAAT,EAAiBjU,IAAjB,EAAuB;AAC3B,MAAI8E,KAAJ,EAAWjD,MAAX;AACA7B,MAAI,GAAG2I,KAAK,CAACC,OAAN,CAAc5I,IAAd,IAAsBA,IAAtB,GAA6By1C,QAAQ,CAACz1C,IAAD,EAAOiU,MAAP,CAA5C;AACAnP,OAAK,GAAG,CAAR;AACAjD,QAAM,GAAG7B,IAAI,CAAC6B,MAAd;;AACA,SAAQoS,MAAM,IAAI,IAAX,IAAoBnP,KAAK,GAAGjD,MAAnC,EAA2C;AACzCoS,UAAM,GAAGA,MAAM,CAACkiC,KAAK,CAACn2C,IAAI,CAAC8E,KAAK,EAAN,CAAL,CAAN,CAAf;AACD;;AACD,MAAIA,KAAK,IAAIA,KAAK,KAAKjD,MAAvB,EAA+B;AAC7B,WAAOoS,MAAP;AACD,GAFD,MAEO;AACL,WAAO,KAAK,CAAZ;AACD;AACF,CAbD,C;;;;;;;;;;;ACnpBA;AACA;AAEA;AAEA;AAEA;AACA,IAAIskC,aAAJ,EAAmBr3C,SAAnB;;eAEmBxD,mBAAO,CAAC,sCAAD,C;;AAAxB66C,a,YAAAA,a;AAEFr3C,SAAS,GAAGxD,mBAAO,CAAC,0DAAD,CAAnB;;AAEA6I,MAAM,CAACjH,OAAP,GAAiB,UAAS4wC,OAAT,EAAkBnvC,OAAO,GAAG,EAA5B,EAAgC;AAC/C,MAAI/B,IAAJ,EAAUw5C,OAAV,EAAmB/0C,CAAnB,EAAsB80B,GAAtB,EAA2B0Y,MAA3B,EAAmCoF,WAAnC;AACAr3C,MAAI,GAAG,EAAP;;AACA,MAAIkxC,OAAO,YAAY9vC,MAAvB,EAA+B;AAC7Bo4C,WAAO,GAAG,IAAID,aAAJ,EAAV;AACArI,WAAO,GAAGsI,OAAO,CAACvV,KAAR,CAAciN,OAAd,CAAV;AACD;;AACDmG,aAAW,GAAG,IAAIn1C,SAAS,CAACs0C,WAAd,CAA0Bz0C,OAA1B,CAAd;;AACAs1C,aAAW,CAAC1yC,IAAZ,GAAmB,UAASstC,MAAT,EAAiB;AAClC,QAAIA,MAAJ,EAAY;AACV,aAAOjyC,IAAI,CAAC2E,IAAL,CAAUstC,MAAM,CAAC3wC,QAAP,EAAV,CAAP;AACD;AACF,GAJD;;AAKA,OAAKmD,CAAC,GAAG,CAAJ,EAAO80B,GAAG,GAAG2X,OAAO,CAACruC,MAA1B,EAAkC4B,CAAC,GAAG80B,GAAtC,EAA2C90B,CAAC,EAA5C,EAAgD;AAC9CwtC,UAAM,GAAGf,OAAO,CAACzsC,CAAD,CAAhB;AACA4yC,eAAW,CAACpT,KAAZ,CAAkBgO,MAAlB;AACD;;AACDoF,aAAW,CAAC9rC,GAAZ;AACA,SAAOvL,IAAI,CAACypB,IAAL,CAAU,EAAV,CAAP;AACD,CAnBD,C;;;;;;;;;;;;;;;;;;;;;;ACdA,IAAIC,UAAU,GAAGhrB,mBAAO,CAAC,2DAAD,CAAxB;;AACA,IAAI0I,MAAM,GAAG1I,mBAAO,CAAC,4DAAD,CAApB;;AACA,IAAI+6C,cAAc,GAAG/6C,mBAAO,CAAC,gEAAD,CAA5B;;AACA,IAAIg7C,UAAU,GAAGh7C,mBAAO,CAAC,4EAAD,CAAxB;;AACA,IAAIi7C,aAAa,GAAGj7C,mBAAO,CAAC,kFAAD,CAA3B;;AAEA,IAAIk7C,eAAe,GAAG;AACpBjzB,QAAM,EAAE,EADY;AAEpBkzB,oBAAkB,EAAE,GAFA;AAGpBC,kBAAgB,EAAE,GAHE;AAIpBC,cAAY,EAAE,IAJM;AAKpBC,6BAA2B,EAAE,KALT;AAMpBC,eAAa,EAAE;AANK,CAAtB;AASA,IAAIC,mBAAmB,GAAG,EAA1B;AAEA,IAAIC,aAAa,GAAG,CAClB;AACEJ,cAAY,EAAE,IADhB;AAEEC,6BAA2B,EAAE,KAF/B;AAGEpzB,QAAM,EAAE;AACNoB,OAAG,EAAE,MADC;AAENC,OAAG,EAAE,OAFC;AAGNE,QAAI,EAAE;AAHA;AAHV,CADkB,EAUlB;AACE4xB,cAAY,EAAE,IADhB;AAEEC,6BAA2B,EAAE,IAF/B;AAGEpzB,QAAM,EAAE;AACNoB,OAAG,EAAE,OADC;AAENC,OAAG,EAAE,QAFC;AAGNE,QAAI,EAAE;AAHA;AAHV,CAVkB,EAmBlB;AACE4xB,cAAY,EAAE,KADhB;AAEEC,6BAA2B,EAAE,KAF/B;AAGEpzB,QAAM,EAAE;AACNoB,OAAG,EAAE,MADC;AAENC,OAAG,EAAE,OAFC;AAGNE,QAAI,EAAE;AAHA;AAHV,CAnBkB,EA4BlB;AACE4xB,cAAY,EAAE,KADhB;AAEEC,6BAA2B,EAAE,IAF/B;AAGEpzB,QAAM,EAAE;AACNoB,OAAG,EAAE,OADC;AAENC,OAAG,EAAE,QAFC;AAGNE,QAAI,EAAE;AAHA;AAHV,CA5BkB,CAApB;;AAuCA,SAASvB,MAAT,CAAgBve,KAAhB,EAAuBtG,OAAvB,EAAgC;AAC9B,MAAIssB,IAAI,GAAGtsB,OAAO,CAACssB,IAAR,IAAiBtsB,OAAO,CAACq4C,MAAR,IAAkBX,cAAc,CAACY,WAAf,CAA2Bt4C,OAAO,CAACq4C,MAAnC,CAA9C;AACA,MAAIE,WAAW,GAAG,6BAA6BC,IAA7B,CAAkCx4C,OAAO,CAACq4C,MAA1C,KAAqD,EAAvE;AACA,MAAII,QAAQ,GAAGF,WAAW,CAAC,CAAD,CAA1B;AACA,MAAIG,MAAM,GAAGH,WAAW,CAAC,CAAD,CAAxB;AACA,MAAII,YAAY,GAAGtzC,MAAM,CAAC,EAAD,EAAK8yC,mBAAL,EACCP,aAAa,CAACa,QAAD,CAAb,IAA2B,EAD5B,EAECb,aAAa,CAACa,QAAQ,GAAG,GAAX,GAAiBC,MAAlB,CAAb,IAA0C,EAF3C,CAAzB;AAGA,MAAI/zB,QAAQ,GAAGtf,MAAM,CAAC,EAAD,EAAKwyC,eAAL,EAAsBe,YAAY,CAACtsB,IAAD,CAAlC,EAA0CqsB,YAA1C,CAArB;AAEA,MAAIX,YAAY,GAAGrzB,QAAQ,CAACqzB,YAA5B;AACA,MAAIC,2BAA2B,GAAGtzB,QAAQ,CAACszB,2BAA3C;AAEA,MAAIpzB,MAAM,GAAGuzB,aAAa,CAACpwC,MAAd,CAAqB,UAASkrC,CAAT,EAAY;AAC5C,WAAOA,CAAC,CAAC8E,YAAF,IAAkBA,YAAlB,IAAkC9E,CAAC,CAAC+E,2BAAF,IAAiCA,2BAA1E;AACD,GAFY,EAEV,CAFU,EAEPpzB,MAFN;AAIA,SAAO8C,UAAU,CAACV,WAAX,CAAuB3gB,KAAvB,EAA8B;AACnCse,UAAM,EAAEi0B,WAAW,CAAC74C,OAAO,CAAC4kB,MAAT,CAAX,GACID,QAAQ,CAACC,MADb,GAEI5kB,OAAO,CAAC4kB,MAHe;AAKnCE,WAAO,EAAE+zB,WAAW,CAAC74C,OAAO,CAAC8kB,OAAT,CAAX,GACGH,QAAQ,CAACozB,gBADZ,GAEG/3C,OAAO,CAAC8kB,OAPe;AASnCC,YAAQ,EAAE8zB,WAAW,CAAC74C,OAAO,CAAC+kB,QAAT,CAAX,GACEJ,QAAQ,CAACmzB,kBADX,GAEE93C,OAAO,CAAC+kB,QAXe;AAanCC,aAAS,EAAE,OAAOhlB,OAAO,CAACglB,SAAf,KAA6B,QAA7B,GACChlB,OAAO,CAACglB,SADT,GAECL,QAAQ,CAACuzB,aAfc;AAiBnCrzB,UAAM,EAAE,CAAC,QAAD,EAAW,QAAX,EAAqB7O,OAArB,CAA6B,OAAOhW,OAAO,CAAC6kB,MAA5C,IAAsD,CAAC,CAAvD,GACI7kB,OAAO,CAAC6kB,MADZ,GAEIA;AAnBuB,GAA9B,CAAP;AAqBD;;AAED,SAAS+zB,YAAT,CAAuBE,YAAvB,EAAqC;AACnC,SAAOnB,UAAU,CAACmB,YAAD,CAAjB;AACD;;AAED,SAASD,WAAT,CAAsB3yC,GAAtB,EAA2B;AACzB,SAAO,OAAOA,GAAP,KAAe,WAAtB;AACD;;AAED,SAASmgB,QAAT,CAAkB/f,KAAlB,EAAyBtG,OAAzB,EAAkC;AAChC,MAAIssB,IAAI,GAAGtsB,OAAO,CAACssB,IAAR,IAAiBtsB,OAAO,CAACq4C,MAAR,IAAkBX,cAAc,CAACY,WAAf,CAA2Bt4C,OAAO,CAACq4C,MAAnC,CAA9C;AACA,MAAIM,YAAY,GAAGf,aAAa,CAAC53C,OAAO,CAACq4C,MAAT,CAAb,IAAiCF,mBAApD;AACA,MAAIxzB,QAAQ,GAAGtf,MAAM,CAAC,EAAD,EAAKwyC,eAAL,EAAsBe,YAAY,CAACtsB,IAAD,CAAlC,EAA0CqsB,YAA1C,CAArB;AACA,MAAI7zB,OAAO,GAAG+zB,WAAW,CAAC74C,OAAO,CAAC8kB,OAAT,CAAX,GAA+BH,QAAQ,CAACozB,gBAAxC,GAA2D/3C,OAAO,CAAC8kB,OAAjF;AACA,SAAO6C,UAAU,CAACtB,QAAX,CAAoB/f,KAApB,EAA2Bwe,OAA3B,CAAP;AACD;;AAEDtf,MAAM,CAACjH,OAAP,GAAiB;AACfs5C,iBAAe,EAAEA,eADF;;AAEf,MAAIF,UAAJ,GAAiB;AACf;AACA,WAAOvyC,MAAM,CAACoB,IAAP,CAAYmxC,UAAZ,EAAwB/zC,GAAxB,CAA4B,UAASrD,GAAT,EAAc;AAC/C,aAAOo3C,UAAU,CAACp3C,GAAD,CAAjB;AACD,KAFM,CAAP;AAGD,GAPc;;AAQfq4C,cAAY,EAAEA,YARC;AASf/zB,QAAM,EAAEA,MATO;AAUfwB,UAAQ,EAAEA;AAVK,CAAjB,C;;;;;;;;;;;;;;;;;;;;;;AChHA;AAEA;AAEA7gB,MAAM,CAACjH,OAAP,GAAiB,UAASw6C,MAAT,EAAiBC,IAAjB,EAAuBC,KAAvB,EAA8B;AAE7C,MAAIC,UAAU,GAAGH,MAAM,CAACj4C,MAAxB;AAAA,MACIq4C,UAAU,GAAGH,IAAI,CAACl4C,MADtB;AAAA,MAEIs4C,MAAM,GAAG,EAFb,CAF6C,CAM7C;;AACAH,OAAK,GAAG,CAACA,KAAK,KAAME,UAAU,GAAGD,UAAb,GAA0BC,UAA1B,GAAuCD,UAA7C,CAAN,IAAiE,CAAzE;;AAEA,OAAK,IAAIx2C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGu2C,KAApB,EAA2Bv2C,CAAC,EAA5B,EAAgC;AAC9B02C,UAAM,CAAC12C,CAAD,CAAN,GAAY,CAACA,CAAD,CAAZ;AACA02C,UAAM,CAAC12C,CAAD,CAAN,CAAU5B,MAAV,GAAmBm4C,KAAnB;AACD;;AACD,OAAKv2C,CAAC,GAAG,CAAT,EAAYA,CAAC,GAAGu2C,KAAhB,EAAuBv2C,CAAC,EAAxB,EAA4B;AAC1B02C,UAAM,CAAC,CAAD,CAAN,CAAU12C,CAAV,IAAeA,CAAf;AACD;;AAED,MAAIO,IAAI,CAACuY,GAAL,CAAS09B,UAAU,GAAGC,UAAtB,KAAqCF,KAAK,IAAI,GAA9C,CAAJ,EAAuD;AACrD,WAAOI,OAAO,CAAEJ,KAAK,IAAI,GAAX,CAAd;AACD;;AACD,MAAIC,UAAU,KAAK,CAAnB,EAAqB;AACnB,WAAOG,OAAO,CAAEF,UAAF,CAAd;AACD;;AACD,MAAIA,UAAU,KAAK,CAAnB,EAAqB;AACnB,WAAOE,OAAO,CAAEH,UAAF,CAAd;AACD,GAzB4C,CA2B7C;;;AACA,MAAItzB,CAAJ,EAAO0zB,MAAP,EAAeC,MAAf,EAAuBC,IAAvB,EAA6Bt2C,GAA7B,EAAkCg2B,CAAlC;;AACA,OAAKx2B,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAIw2C,UAAjB,EAA6B,EAAEx2C,CAA/B,EAAkC;AAChC42C,UAAM,GAAGP,MAAM,CAACr2C,CAAC,GAAC,CAAH,CAAf,CADgC,CAGhC;;AACA,SAAKkjB,CAAC,GAAG,CAAT,EAAYA,CAAC,IAAIuzB,UAAjB,EAA6B,EAAEvzB,CAA/B,EAAkC;AAChC;AACA,UAAIljB,CAAC,KAAKkjB,CAAN,IAAWwzB,MAAM,CAAC12C,CAAD,CAAN,CAAUkjB,CAAV,IAAe,CAA9B,EAAiC,OAAOyzB,OAAO,CAAEH,UAAF,CAAd;AAEjCK,YAAM,GAAGP,IAAI,CAACpzB,CAAC,GAAC,CAAH,CAAb;AACA4zB,UAAI,GAAIF,MAAM,KAAKC,MAAZ,GAAsB,CAAtB,GAA0B,CAAjC,CALgC,CAKI;AACpC;;AACAr2C,SAAG,GAAMk2C,MAAM,CAAC12C,CAAC,GAAG,CAAL,CAAN,CAAckjB,CAAd,IAAuB,CAAhC,CAPgC,CAOG;;AACnC,UAAI,CAACsT,CAAC,GAAGkgB,MAAM,CAAC12C,CAAD,CAAN,CAAckjB,CAAC,GAAG,CAAlB,IAAuB,CAA5B,IAAoC1iB,GAAxC,EAA6CA,GAAG,GAAGg2B,CAAN,CARb,CAQwB;;AACxD,UAAI,CAACA,CAAC,GAAGkgB,MAAM,CAAC12C,CAAC,GAAG,CAAL,CAAN,CAAckjB,CAAC,GAAG,CAAlB,IAAuB4zB,IAA5B,IAAoCt2C,GAAxC,EAA6CA,GAAG,GAAGg2B,CAAN,CATb,CASwB;AAExD;;AACAkgB,YAAM,CAAC12C,CAAD,CAAN,CAAUkjB,CAAV,IAAgBljB,CAAC,GAAG,CAAJ,IAASkjB,CAAC,GAAG,CAAb,IAAkB0zB,MAAM,KAAKN,IAAI,CAACpzB,CAAC,GAAC,CAAH,CAAjC,IAA0CmzB,MAAM,CAACr2C,CAAC,GAAC,CAAH,CAAN,KAAgB62C,MAA1D,IAAoE,CAACrgB,CAAC,GAAGkgB,MAAM,CAAC12C,CAAC,GAAC,CAAH,CAAN,CAAYkjB,CAAC,GAAC,CAAd,IAAiB4zB,IAAtB,IAA8Bt2C,GAAnG,GAA0Gg2B,CAA1G,GAA8Gh2B,GAA7H,CAZgC,CAYkG;AACnI;AACF;;AAED,SAAOm2C,OAAO,CAAED,MAAM,CAACF,UAAD,CAAN,CAAmBC,UAAnB,CAAF,CAAd;AAEF;AACA;AACA;;AACE,WAASE,OAAT,CAAiBI,KAAjB,EAAwB;AACtB,QAAI34C,MAAM,GAAGmC,IAAI,CAACuvB,GAAL,CAAS0mB,UAAT,EAAqBC,UAArB,CAAb;AACA,QAAIntB,QAAQ,GAAGlrB,MAAM,KAAK,CAAX,GACX,CADW,GAEV24C,KAAK,GAAG34C,MAFb;AAGA,QAAI44C,UAAU,GAAG,IAAI1tB,QAArB;AACA,WAAO;AACLytB,WAAK,EAAEA,KADF;AAELztB,cAAQ,EAAEA,QAFL;AAGL0tB,gBAAU,EAAEA;AAHP,KAAP;AAKD;AAEF,CAnED,C;;;;;;;;;;;;ACJA;AAAA;AAAe,SAASC,eAAT,CAAyBz0B,MAAzB,EAAiC00B,YAAjC,EAA+C;AAC5D,MAAIC,IAAI,GAAG30B,MAAM,GAAG,CAAT,GAAa,GAAb,GAAmB,EAA9B;AACA,MAAI40B,MAAM,GAAG72C,IAAI,CAACuY,GAAL,CAAS0J,MAAT,EAAiB3lB,QAAjB,EAAb;;AACA,SAAOu6C,MAAM,CAACh5C,MAAP,GAAgB84C,YAAvB,EAAqC;AACnCE,UAAM,GAAG,MAAMA,MAAf;AACD;;AACD,SAAOD,IAAI,GAAGC,MAAd;AACD,C;;;;;;;;;;;;ACPD;AAAA;AAAe,SAASz0C,MAAT,CAAgB8oB,MAAhB,EAAwB4rB,WAAxB,EAAqC;AAClD,MAAI5rB,MAAM,IAAI,IAAd,EAAoB;AAClB,UAAM,IAAIpX,SAAJ,CACJ,+DADI,CAAN;AAGD;;AAEDgjC,aAAW,GAAGA,WAAW,IAAI,EAA7B;;AAEA,OAAK,IAAIC,QAAT,IAAqBD,WAArB,EAAkC;AAChC,QAAIA,WAAW,CAAClzC,cAAZ,CAA2BmzC,QAA3B,CAAJ,EAA0C;AACxC7rB,YAAM,CAAC6rB,QAAD,CAAN,GAAmBD,WAAW,CAACC,QAAD,CAA9B;AACD;AACF;;AAED,SAAO7rB,MAAP;AACD,C;;;;;;;;;;;;AChBD;AAAA;AAAA;AAAA;AAEe,SAAS8rB,WAAT,CAAqBF,WAArB,EAAkC;AAC/C,SAAO10C,gEAAM,CAAC,EAAD,EAAK00C,WAAL,CAAb;AACD,C;;;;;;;;;;;;ACJD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,IAAIG,aAAa,GAAG;AAClBC,IAAE,EAAE,IADc;AAElBC,IAAE,EAAE,IAFc;AAGlBC,UAAQ,EAAE,UAHQ;AAIlBC,MAAI,EAAE,MAJY;AAKlBC,SAAO,EAAE,SALS;AAMlBC,WAAS,EAAE,WANO;AAOlBC,SAAO,EAAE,SAPS;AAQlBC,OAAK,EAAE;AARW,CAApB;AAWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAIC,UAAU,GAAG;AACf;AACAC,GAAC,EAAE,UAASlvC,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC;AACjC,QAAIC,GAAG,GAAGpvC,IAAI,CAAC8I,cAAL,KAAwB,CAAxB,GAA4B,CAA5B,GAAgC,CAA1C;;AACA,YAAQ/U,KAAR;AACE;AACA,WAAK,GAAL;AACA,WAAK,IAAL;AACA,WAAK,KAAL;AACE,eAAOo7C,QAAQ,CAACC,GAAT,CAAaA,GAAb,EAAkB;AAAEC,eAAK,EAAE;AAAT,SAAlB,CAAP;AACF;;AACA,WAAK,OAAL;AACE,eAAOF,QAAQ,CAACC,GAAT,CAAaA,GAAb,EAAkB;AAAEC,eAAK,EAAE;AAAT,SAAlB,CAAP;AACF;;AACA,WAAK,MAAL;AACA;AACE,eAAOF,QAAQ,CAACC,GAAT,CAAaA,GAAb,EAAkB;AAAEC,eAAK,EAAE;AAAT,SAAlB,CAAP;AAZJ;AAcD,GAlBc;AAoBf;AACAllC,GAAC,EAAE,UAASnK,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC;AACjC;AACA,QAAIp7C,KAAK,KAAK,IAAd,EAAoB;AAClB,UAAIu7C,UAAU,GAAGtvC,IAAI,CAAC8I,cAAL,EAAjB,CADkB,CAElB;;AACA,UAAI9B,IAAI,GAAGsoC,UAAU,GAAG,CAAb,GAAiBA,UAAjB,GAA8B,IAAIA,UAA7C;AACA,aAAOH,QAAQ,CAACI,aAAT,CAAuBvoC,IAAvB,EAA6B;AAAEW,YAAI,EAAE;AAAR,OAA7B,CAAP;AACD;;AAED,WAAO6nC,iEAAe,CAACrlC,CAAhB,CAAkBnK,IAAlB,EAAwBjM,KAAxB,CAAP;AACD,GA/Bc;AAiCf;AACA07C,GAAC,EAAE,UAASzvC,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC76C,OAAhC,EAAyC;AAC1C,QAAIo7C,cAAc,GAAGC,4EAAc,CAAC3vC,IAAD,EAAO1L,OAAP,CAAnC,CAD0C,CAE1C;;AACA,QAAIs7C,QAAQ,GAAGF,cAAc,GAAG,CAAjB,GAAqBA,cAArB,GAAsC,IAAIA,cAAzD,CAH0C,CAK1C;;AACA,QAAI37C,KAAK,KAAK,IAAd,EAAoB;AAClB,UAAI87C,YAAY,GAAGD,QAAQ,GAAG,GAA9B;AACA,aAAO3B,yEAAe,CAAC4B,YAAD,EAAe,CAAf,CAAtB;AACD,KATyC,CAW1C;;;AACA,QAAI97C,KAAK,KAAK,IAAd,EAAoB;AAClB,aAAOo7C,QAAQ,CAACI,aAAT,CAAuBK,QAAvB,EAAiC;AAAEjoC,YAAI,EAAE;AAAR,OAAjC,CAAP;AACD,KAdyC,CAgB1C;;;AACA,WAAOsmC,yEAAe,CAAC2B,QAAD,EAAW77C,KAAK,CAACqB,MAAjB,CAAtB;AACD,GApDc;AAsDf;AACA06C,GAAC,EAAE,UAAS9vC,IAAT,EAAejM,KAAf,EAAsB;AACvB,QAAIg8C,WAAW,GAAGC,+EAAiB,CAAChwC,IAAD,CAAnC,CADuB,CAGvB;;AACA,WAAOiuC,yEAAe,CAAC8B,WAAD,EAAch8C,KAAK,CAACqB,MAApB,CAAtB;AACD,GA5Dc;AA8Df;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA66C,GAAC,EAAE,UAASjwC,IAAT,EAAejM,KAAf,EAAsB;AACvB,QAAIiT,IAAI,GAAGhH,IAAI,CAAC8I,cAAL,EAAX;AACA,WAAOmlC,yEAAe,CAACjnC,IAAD,EAAOjT,KAAK,CAACqB,MAAb,CAAtB;AACD,GA1Ec;AA4Ef;AACA86C,GAAC,EAAE,UAASlwC,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC;AACjC,QAAIgB,OAAO,GAAG54C,IAAI,CAACG,IAAL,CAAU,CAACsI,IAAI,CAAC+I,WAAL,KAAqB,CAAtB,IAA2B,CAArC,CAAd;;AACA,YAAQhV,KAAR;AACE;AACA,WAAK,GAAL;AACE,eAAOorC,MAAM,CAACgR,OAAD,CAAb;AACF;;AACA,WAAK,IAAL;AACE,eAAOlC,yEAAe,CAACkC,OAAD,EAAU,CAAV,CAAtB;AACF;;AACA,WAAK,IAAL;AACE,eAAOhB,QAAQ,CAACI,aAAT,CAAuBY,OAAvB,EAAgC;AAAExoC,cAAI,EAAE;AAAR,SAAhC,CAAP;AACF;;AACA,WAAK,KAAL;AACE,eAAOwnC,QAAQ,CAACgB,OAAT,CAAiBA,OAAjB,EAA0B;AAC/Bd,eAAK,EAAE,aADwB;AAE/Bp1B,iBAAO,EAAE;AAFsB,SAA1B,CAAP;AAIF;;AACA,WAAK,OAAL;AACE,eAAOk1B,QAAQ,CAACgB,OAAT,CAAiBA,OAAjB,EAA0B;AAC/Bd,eAAK,EAAE,QADwB;AAE/Bp1B,iBAAO,EAAE;AAFsB,SAA1B,CAAP;AAIF;;AACA,WAAK,MAAL;AACA;AACE,eAAOk1B,QAAQ,CAACgB,OAAT,CAAiBA,OAAjB,EAA0B;AAC/Bd,eAAK,EAAE,MADwB;AAE/Bp1B,iBAAO,EAAE;AAFsB,SAA1B,CAAP;AAzBJ;AA8BD,GA7Gc;AA+Gf;AACAm2B,GAAC,EAAE,UAASpwC,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC;AACjC,QAAIgB,OAAO,GAAG54C,IAAI,CAACG,IAAL,CAAU,CAACsI,IAAI,CAAC+I,WAAL,KAAqB,CAAtB,IAA2B,CAArC,CAAd;;AACA,YAAQhV,KAAR;AACE;AACA,WAAK,GAAL;AACE,eAAOorC,MAAM,CAACgR,OAAD,CAAb;AACF;;AACA,WAAK,IAAL;AACE,eAAOlC,yEAAe,CAACkC,OAAD,EAAU,CAAV,CAAtB;AACF;;AACA,WAAK,IAAL;AACE,eAAOhB,QAAQ,CAACI,aAAT,CAAuBY,OAAvB,EAAgC;AAAExoC,cAAI,EAAE;AAAR,SAAhC,CAAP;AACF;;AACA,WAAK,KAAL;AACE,eAAOwnC,QAAQ,CAACgB,OAAT,CAAiBA,OAAjB,EAA0B;AAC/Bd,eAAK,EAAE,aADwB;AAE/Bp1B,iBAAO,EAAE;AAFsB,SAA1B,CAAP;AAIF;;AACA,WAAK,OAAL;AACE,eAAOk1B,QAAQ,CAACgB,OAAT,CAAiBA,OAAjB,EAA0B;AAC/Bd,eAAK,EAAE,QADwB;AAE/Bp1B,iBAAO,EAAE;AAFsB,SAA1B,CAAP;AAIF;;AACA,WAAK,MAAL;AACA;AACE,eAAOk1B,QAAQ,CAACgB,OAAT,CAAiBA,OAAjB,EAA0B;AAC/Bd,eAAK,EAAE,MADwB;AAE/Bp1B,iBAAO,EAAE;AAFsB,SAA1B,CAAP;AAzBJ;AA8BD,GAhJc;AAkJf;AACAo2B,GAAC,EAAE,UAASrwC,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC;AACjC,QAAIloC,KAAK,GAAGjH,IAAI,CAAC+I,WAAL,EAAZ;;AACA,YAAQhV,KAAR;AACE,WAAK,GAAL;AACA,WAAK,IAAL;AACE,eAAOy7C,iEAAe,CAACa,CAAhB,CAAkBrwC,IAAlB,EAAwBjM,KAAxB,CAAP;AACF;;AACA,WAAK,IAAL;AACE,eAAOo7C,QAAQ,CAACI,aAAT,CAAuBtoC,KAAK,GAAG,CAA/B,EAAkC;AAAEU,cAAI,EAAE;AAAR,SAAlC,CAAP;AACF;;AACA,WAAK,KAAL;AACE,eAAOwnC,QAAQ,CAACloC,KAAT,CAAeA,KAAf,EAAsB;AAC3BooC,eAAK,EAAE,aADoB;AAE3Bp1B,iBAAO,EAAE;AAFkB,SAAtB,CAAP;AAIF;;AACA,WAAK,OAAL;AACE,eAAOk1B,QAAQ,CAACloC,KAAT,CAAeA,KAAf,EAAsB;AAAEooC,eAAK,EAAE,QAAT;AAAmBp1B,iBAAO,EAAE;AAA5B,SAAtB,CAAP;AACF;;AACA,WAAK,MAAL;AACA;AACE,eAAOk1B,QAAQ,CAACloC,KAAT,CAAeA,KAAf,EAAsB;AAAEooC,eAAK,EAAE,MAAT;AAAiBp1B,iBAAO,EAAE;AAA1B,SAAtB,CAAP;AAnBJ;AAqBD,GA1Kc;AA4Kf;AACAq2B,GAAC,EAAE,UAAStwC,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC;AACjC,QAAIloC,KAAK,GAAGjH,IAAI,CAAC+I,WAAL,EAAZ;;AACA,YAAQhV,KAAR;AACE;AACA,WAAK,GAAL;AACE,eAAOorC,MAAM,CAACl4B,KAAK,GAAG,CAAT,CAAb;AACF;;AACA,WAAK,IAAL;AACE,eAAOgnC,yEAAe,CAAChnC,KAAK,GAAG,CAAT,EAAY,CAAZ,CAAtB;AACF;;AACA,WAAK,IAAL;AACE,eAAOkoC,QAAQ,CAACI,aAAT,CAAuBtoC,KAAK,GAAG,CAA/B,EAAkC;AAAEU,cAAI,EAAE;AAAR,SAAlC,CAAP;AACF;;AACA,WAAK,KAAL;AACE,eAAOwnC,QAAQ,CAACloC,KAAT,CAAeA,KAAf,EAAsB;AAC3BooC,eAAK,EAAE,aADoB;AAE3Bp1B,iBAAO,EAAE;AAFkB,SAAtB,CAAP;AAIF;;AACA,WAAK,OAAL;AACE,eAAOk1B,QAAQ,CAACloC,KAAT,CAAeA,KAAf,EAAsB;AAAEooC,eAAK,EAAE,QAAT;AAAmBp1B,iBAAO,EAAE;AAA5B,SAAtB,CAAP;AACF;;AACA,WAAK,MAAL;AACA;AACE,eAAOk1B,QAAQ,CAACloC,KAAT,CAAeA,KAAf,EAAsB;AAAEooC,eAAK,EAAE,MAAT;AAAiBp1B,iBAAO,EAAE;AAA1B,SAAtB,CAAP;AAtBJ;AAwBD,GAvMc;AAyMf;AACAs2B,GAAC,EAAE,UAASvwC,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC76C,OAAhC,EAAyC;AAC1C,QAAIk8C,IAAI,GAAGC,wEAAU,CAACzwC,IAAD,EAAO1L,OAAP,CAArB;;AAEA,QAAIP,KAAK,KAAK,IAAd,EAAoB;AAClB,aAAOo7C,QAAQ,CAACI,aAAT,CAAuBiB,IAAvB,EAA6B;AAAE7oC,YAAI,EAAE;AAAR,OAA7B,CAAP;AACD;;AAED,WAAOsmC,yEAAe,CAACuC,IAAD,EAAOz8C,KAAK,CAACqB,MAAb,CAAtB;AACD,GAlNc;AAoNf;AACAs7C,GAAC,EAAE,UAAS1wC,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC;AACjC,QAAIwB,OAAO,GAAGC,2EAAa,CAAC5wC,IAAD,CAA3B;;AAEA,QAAIjM,KAAK,KAAK,IAAd,EAAoB;AAClB,aAAOo7C,QAAQ,CAACI,aAAT,CAAuBoB,OAAvB,EAAgC;AAAEhpC,YAAI,EAAE;AAAR,OAAhC,CAAP;AACD;;AAED,WAAOsmC,yEAAe,CAAC0C,OAAD,EAAU58C,KAAK,CAACqB,MAAhB,CAAtB;AACD,GA7Nc;AA+Nf;AACA00C,GAAC,EAAE,UAAS9pC,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC;AACjC,QAAIp7C,KAAK,KAAK,IAAd,EAAoB;AAClB,aAAOo7C,QAAQ,CAACI,aAAT,CAAuBvvC,IAAI,CAACkJ,UAAL,EAAvB,EAA0C;AAAEvB,YAAI,EAAE;AAAR,OAA1C,CAAP;AACD;;AAED,WAAO6nC,iEAAe,CAAC1F,CAAhB,CAAkB9pC,IAAlB,EAAwBjM,KAAxB,CAAP;AACD,GAtOc;AAwOf;AACA88C,GAAC,EAAE,UAAS7wC,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC;AACjC,QAAI2B,SAAS,GAAGC,6EAAe,CAAC/wC,IAAD,CAA/B;;AAEA,QAAIjM,KAAK,KAAK,IAAd,EAAoB;AAClB,aAAOo7C,QAAQ,CAACI,aAAT,CAAuBuB,SAAvB,EAAkC;AAAEnpC,YAAI,EAAE;AAAR,OAAlC,CAAP;AACD;;AAED,WAAOsmC,yEAAe,CAAC6C,SAAD,EAAY/8C,KAAK,CAACqB,MAAlB,CAAtB;AACD,GAjPc;AAmPf;AACA47C,GAAC,EAAE,UAAShxC,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC;AACjC,QAAI8B,SAAS,GAAGjxC,IAAI,CAACiJ,SAAL,EAAhB;;AACA,YAAQlV,KAAR;AACE;AACA,WAAK,GAAL;AACA,WAAK,IAAL;AACA,WAAK,KAAL;AACE,eAAOo7C,QAAQ,CAAC9vC,GAAT,CAAa4xC,SAAb,EAAwB;AAC7B5B,eAAK,EAAE,aADsB;AAE7Bp1B,iBAAO,EAAE;AAFoB,SAAxB,CAAP;AAIF;;AACA,WAAK,OAAL;AACE,eAAOk1B,QAAQ,CAAC9vC,GAAT,CAAa4xC,SAAb,EAAwB;AAC7B5B,eAAK,EAAE,QADsB;AAE7Bp1B,iBAAO,EAAE;AAFoB,SAAxB,CAAP;AAIF;;AACA,WAAK,QAAL;AACE,eAAOk1B,QAAQ,CAAC9vC,GAAT,CAAa4xC,SAAb,EAAwB;AAC7B5B,eAAK,EAAE,OADsB;AAE7Bp1B,iBAAO,EAAE;AAFoB,SAAxB,CAAP;AAIF;;AACA,WAAK,MAAL;AACA;AACE,eAAOk1B,QAAQ,CAAC9vC,GAAT,CAAa4xC,SAAb,EAAwB;AAAE5B,eAAK,EAAE,MAAT;AAAiBp1B,iBAAO,EAAE;AAA1B,SAAxB,CAAP;AAxBJ;AA0BD,GAhRc;AAkRf;AACApkB,GAAC,EAAE,UAASmK,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC76C,OAAhC,EAAyC;AAC1C,QAAI28C,SAAS,GAAGjxC,IAAI,CAACiJ,SAAL,EAAhB;AACA,QAAIioC,cAAc,GAAG,CAACD,SAAS,GAAG38C,OAAO,CAAC68C,YAApB,GAAmC,CAApC,IAAyC,CAAzC,IAA8C,CAAnE;;AACA,YAAQp9C,KAAR;AACE;AACA,WAAK,GAAL;AACE,eAAOorC,MAAM,CAAC+R,cAAD,CAAb;AACF;;AACA,WAAK,IAAL;AACE,eAAOjD,yEAAe,CAACiD,cAAD,EAAiB,CAAjB,CAAtB;AACF;;AACA,WAAK,IAAL;AACE,eAAO/B,QAAQ,CAACI,aAAT,CAAuB2B,cAAvB,EAAuC;AAAEvpC,cAAI,EAAE;AAAR,SAAvC,CAAP;;AACF,WAAK,KAAL;AACE,eAAOwnC,QAAQ,CAAC9vC,GAAT,CAAa4xC,SAAb,EAAwB;AAC7B5B,eAAK,EAAE,aADsB;AAE7Bp1B,iBAAO,EAAE;AAFoB,SAAxB,CAAP;AAIF;;AACA,WAAK,OAAL;AACE,eAAOk1B,QAAQ,CAAC9vC,GAAT,CAAa4xC,SAAb,EAAwB;AAC7B5B,eAAK,EAAE,QADsB;AAE7Bp1B,iBAAO,EAAE;AAFoB,SAAxB,CAAP;AAIF;;AACA,WAAK,QAAL;AACE,eAAOk1B,QAAQ,CAAC9vC,GAAT,CAAa4xC,SAAb,EAAwB;AAC7B5B,eAAK,EAAE,OADsB;AAE7Bp1B,iBAAO,EAAE;AAFoB,SAAxB,CAAP;AAIF;;AACA,WAAK,MAAL;AACA;AACE,eAAOk1B,QAAQ,CAAC9vC,GAAT,CAAa4xC,SAAb,EAAwB;AAAE5B,eAAK,EAAE,MAAT;AAAiBp1B,iBAAO,EAAE;AAA1B,SAAxB,CAAP;AA9BJ;AAgCD,GAtTc;AAwTf;AACAwU,GAAC,EAAE,UAASzuB,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC76C,OAAhC,EAAyC;AAC1C,QAAI28C,SAAS,GAAGjxC,IAAI,CAACiJ,SAAL,EAAhB;AACA,QAAIioC,cAAc,GAAG,CAACD,SAAS,GAAG38C,OAAO,CAAC68C,YAApB,GAAmC,CAApC,IAAyC,CAAzC,IAA8C,CAAnE;;AACA,YAAQp9C,KAAR;AACE;AACA,WAAK,GAAL;AACE,eAAOorC,MAAM,CAAC+R,cAAD,CAAb;AACF;;AACA,WAAK,IAAL;AACE,eAAOjD,yEAAe,CAACiD,cAAD,EAAiBn9C,KAAK,CAACqB,MAAvB,CAAtB;AACF;;AACA,WAAK,IAAL;AACE,eAAO+5C,QAAQ,CAACI,aAAT,CAAuB2B,cAAvB,EAAuC;AAAEvpC,cAAI,EAAE;AAAR,SAAvC,CAAP;;AACF,WAAK,KAAL;AACE,eAAOwnC,QAAQ,CAAC9vC,GAAT,CAAa4xC,SAAb,EAAwB;AAC7B5B,eAAK,EAAE,aADsB;AAE7Bp1B,iBAAO,EAAE;AAFoB,SAAxB,CAAP;AAIF;;AACA,WAAK,OAAL;AACE,eAAOk1B,QAAQ,CAAC9vC,GAAT,CAAa4xC,SAAb,EAAwB;AAC7B5B,eAAK,EAAE,QADsB;AAE7Bp1B,iBAAO,EAAE;AAFoB,SAAxB,CAAP;AAIF;;AACA,WAAK,QAAL;AACE,eAAOk1B,QAAQ,CAAC9vC,GAAT,CAAa4xC,SAAb,EAAwB;AAC7B5B,eAAK,EAAE,OADsB;AAE7Bp1B,iBAAO,EAAE;AAFoB,SAAxB,CAAP;AAIF;;AACA,WAAK,MAAL;AACA;AACE,eAAOk1B,QAAQ,CAAC9vC,GAAT,CAAa4xC,SAAb,EAAwB;AAAE5B,eAAK,EAAE,MAAT;AAAiBp1B,iBAAO,EAAE;AAA1B,SAAxB,CAAP;AA9BJ;AAgCD,GA5Vc;AA8Vf;AACAjjB,GAAC,EAAE,UAASgJ,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC;AACjC,QAAI8B,SAAS,GAAGjxC,IAAI,CAACiJ,SAAL,EAAhB;AACA,QAAImoC,YAAY,GAAGH,SAAS,KAAK,CAAd,GAAkB,CAAlB,GAAsBA,SAAzC;;AACA,YAAQl9C,KAAR;AACE;AACA,WAAK,GAAL;AACE,eAAOorC,MAAM,CAACiS,YAAD,CAAb;AACF;;AACA,WAAK,IAAL;AACE,eAAOnD,yEAAe,CAACmD,YAAD,EAAer9C,KAAK,CAACqB,MAArB,CAAtB;AACF;;AACA,WAAK,IAAL;AACE,eAAO+5C,QAAQ,CAACI,aAAT,CAAuB6B,YAAvB,EAAqC;AAAEzpC,cAAI,EAAE;AAAR,SAArC,CAAP;AACF;;AACA,WAAK,KAAL;AACE,eAAOwnC,QAAQ,CAAC9vC,GAAT,CAAa4xC,SAAb,EAAwB;AAC7B5B,eAAK,EAAE,aADsB;AAE7Bp1B,iBAAO,EAAE;AAFoB,SAAxB,CAAP;AAIF;;AACA,WAAK,OAAL;AACE,eAAOk1B,QAAQ,CAAC9vC,GAAT,CAAa4xC,SAAb,EAAwB;AAC7B5B,eAAK,EAAE,QADsB;AAE7Bp1B,iBAAO,EAAE;AAFoB,SAAxB,CAAP;AAIF;;AACA,WAAK,QAAL;AACE,eAAOk1B,QAAQ,CAAC9vC,GAAT,CAAa4xC,SAAb,EAAwB;AAC7B5B,eAAK,EAAE,OADsB;AAE7Bp1B,iBAAO,EAAE;AAFoB,SAAxB,CAAP;AAIF;;AACA,WAAK,MAAL;AACA;AACE,eAAOk1B,QAAQ,CAAC9vC,GAAT,CAAa4xC,SAAb,EAAwB;AAAE5B,eAAK,EAAE,MAAT;AAAiBp1B,iBAAO,EAAE;AAA1B,SAAxB,CAAP;AA/BJ;AAiCD,GAnYc;AAqYf;AACA3W,GAAC,EAAE,UAAStD,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC;AACjC,QAAIkC,KAAK,GAAGrxC,IAAI,CAACmJ,WAAL,EAAZ;AACA,QAAImoC,kBAAkB,GAAGD,KAAK,GAAG,EAAR,IAAc,CAAd,GAAkB,IAAlB,GAAyB,IAAlD;;AAEA,YAAQt9C,KAAR;AACE,WAAK,GAAL;AACA,WAAK,IAAL;AACA,WAAK,KAAL;AACE,eAAOo7C,QAAQ,CAACoC,SAAT,CAAmBD,kBAAnB,EAAuC;AAC5CjC,eAAK,EAAE,aADqC;AAE5Cp1B,iBAAO,EAAE;AAFmC,SAAvC,CAAP;;AAIF,WAAK,OAAL;AACE,eAAOk1B,QAAQ,CAACoC,SAAT,CAAmBD,kBAAnB,EAAuC;AAC5CjC,eAAK,EAAE,QADqC;AAE5Cp1B,iBAAO,EAAE;AAFmC,SAAvC,CAAP;;AAIF,WAAK,MAAL;AACA;AACE,eAAOk1B,QAAQ,CAACoC,SAAT,CAAmBD,kBAAnB,EAAuC;AAC5CjC,eAAK,EAAE,MADqC;AAE5Cp1B,iBAAO,EAAE;AAFmC,SAAvC,CAAP;AAfJ;AAoBD,GA9Zc;AAgaf;AACA1W,GAAC,EAAE,UAASvD,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC;AACjC,QAAIkC,KAAK,GAAGrxC,IAAI,CAACmJ,WAAL,EAAZ;AACA,QAAImoC,kBAAJ;;AACA,QAAID,KAAK,KAAK,EAAd,EAAkB;AAChBC,wBAAkB,GAAG9C,aAAa,CAACI,IAAnC;AACD,KAFD,MAEO,IAAIyC,KAAK,KAAK,CAAd,EAAiB;AACtBC,wBAAkB,GAAG9C,aAAa,CAACG,QAAnC;AACD,KAFM,MAEA;AACL2C,wBAAkB,GAAGD,KAAK,GAAG,EAAR,IAAc,CAAd,GAAkB,IAAlB,GAAyB,IAA9C;AACD;;AAED,YAAQt9C,KAAR;AACE,WAAK,GAAL;AACA,WAAK,IAAL;AACA,WAAK,KAAL;AACE,eAAOo7C,QAAQ,CAACoC,SAAT,CAAmBD,kBAAnB,EAAuC;AAC5CjC,eAAK,EAAE,aADqC;AAE5Cp1B,iBAAO,EAAE;AAFmC,SAAvC,CAAP;;AAIF,WAAK,OAAL;AACE,eAAOk1B,QAAQ,CAACoC,SAAT,CAAmBD,kBAAnB,EAAuC;AAC5CjC,eAAK,EAAE,QADqC;AAE5Cp1B,iBAAO,EAAE;AAFmC,SAAvC,CAAP;;AAIF,WAAK,MAAL;AACA;AACE,eAAOk1B,QAAQ,CAACoC,SAAT,CAAmBD,kBAAnB,EAAuC;AAC5CjC,eAAK,EAAE,MADqC;AAE5Cp1B,iBAAO,EAAE;AAFmC,SAAvC,CAAP;AAfJ;AAoBD,GAhcc;AAkcf;AACAu3B,GAAC,EAAE,UAASxxC,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC;AACjC,QAAIkC,KAAK,GAAGrxC,IAAI,CAACmJ,WAAL,EAAZ;AACA,QAAImoC,kBAAJ;;AACA,QAAID,KAAK,IAAI,EAAb,EAAiB;AACfC,wBAAkB,GAAG9C,aAAa,CAACO,OAAnC;AACD,KAFD,MAEO,IAAIsC,KAAK,IAAI,EAAb,EAAiB;AACtBC,wBAAkB,GAAG9C,aAAa,CAACM,SAAnC;AACD,KAFM,MAEA,IAAIuC,KAAK,IAAI,CAAb,EAAgB;AACrBC,wBAAkB,GAAG9C,aAAa,CAACK,OAAnC;AACD,KAFM,MAEA;AACLyC,wBAAkB,GAAG9C,aAAa,CAACQ,KAAnC;AACD;;AAED,YAAQj7C,KAAR;AACE,WAAK,GAAL;AACA,WAAK,IAAL;AACA,WAAK,KAAL;AACE,eAAOo7C,QAAQ,CAACoC,SAAT,CAAmBD,kBAAnB,EAAuC;AAC5CjC,eAAK,EAAE,aADqC;AAE5Cp1B,iBAAO,EAAE;AAFmC,SAAvC,CAAP;;AAIF,WAAK,OAAL;AACE,eAAOk1B,QAAQ,CAACoC,SAAT,CAAmBD,kBAAnB,EAAuC;AAC5CjC,eAAK,EAAE,QADqC;AAE5Cp1B,iBAAO,EAAE;AAFmC,SAAvC,CAAP;;AAIF,WAAK,MAAL;AACA;AACE,eAAOk1B,QAAQ,CAACoC,SAAT,CAAmBD,kBAAnB,EAAuC;AAC5CjC,eAAK,EAAE,MADqC;AAE5Cp1B,iBAAO,EAAE;AAFmC,SAAvC,CAAP;AAfJ;AAoBD,GApec;AAsef;AACAw3B,GAAC,EAAE,UAASzxC,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC;AACjC,QAAIp7C,KAAK,KAAK,IAAd,EAAoB;AAClB,UAAIs9C,KAAK,GAAGrxC,IAAI,CAACmJ,WAAL,KAAqB,EAAjC;AACA,UAAIkoC,KAAK,KAAK,CAAd,EAAiBA,KAAK,GAAG,EAAR;AACjB,aAAOlC,QAAQ,CAACI,aAAT,CAAuB8B,KAAvB,EAA8B;AAAE1pC,YAAI,EAAE;AAAR,OAA9B,CAAP;AACD;;AAED,WAAO6nC,iEAAe,CAACiC,CAAhB,CAAkBzxC,IAAlB,EAAwBjM,KAAxB,CAAP;AACD,GA/ec;AAiff;AACA29C,GAAC,EAAE,UAAS1xC,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC;AACjC,QAAIp7C,KAAK,KAAK,IAAd,EAAoB;AAClB,aAAOo7C,QAAQ,CAACI,aAAT,CAAuBvvC,IAAI,CAACmJ,WAAL,EAAvB,EAA2C;AAAExB,YAAI,EAAE;AAAR,OAA3C,CAAP;AACD;;AAED,WAAO6nC,iEAAe,CAACkC,CAAhB,CAAkB1xC,IAAlB,EAAwBjM,KAAxB,CAAP;AACD,GAxfc;AA0ff;AACA49C,GAAC,EAAE,UAAS3xC,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC;AACjC,QAAIkC,KAAK,GAAGrxC,IAAI,CAACmJ,WAAL,KAAqB,EAAjC;;AAEA,QAAIpV,KAAK,KAAK,IAAd,EAAoB;AAClB,aAAOo7C,QAAQ,CAACI,aAAT,CAAuB8B,KAAvB,EAA8B;AAAE1pC,YAAI,EAAE;AAAR,OAA9B,CAAP;AACD;;AAED,WAAOsmC,yEAAe,CAACoD,KAAD,EAAQt9C,KAAK,CAACqB,MAAd,CAAtB;AACD,GAngBc;AAqgBf;AACAk5B,GAAC,EAAE,UAAStuB,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC;AACjC,QAAIkC,KAAK,GAAGrxC,IAAI,CAACmJ,WAAL,EAAZ;AACA,QAAIkoC,KAAK,KAAK,CAAd,EAAiBA,KAAK,GAAG,EAAR;;AAEjB,QAAIt9C,KAAK,KAAK,IAAd,EAAoB;AAClB,aAAOo7C,QAAQ,CAACI,aAAT,CAAuB8B,KAAvB,EAA8B;AAAE1pC,YAAI,EAAE;AAAR,OAA9B,CAAP;AACD;;AAED,WAAOsmC,yEAAe,CAACoD,KAAD,EAAQt9C,KAAK,CAACqB,MAAd,CAAtB;AACD,GA/gBc;AAihBf;AACAi2C,GAAC,EAAE,UAASrrC,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC;AACjC,QAAIp7C,KAAK,KAAK,IAAd,EAAoB;AAClB,aAAOo7C,QAAQ,CAACI,aAAT,CAAuBvvC,IAAI,CAACoJ,aAAL,EAAvB,EAA6C;AAAEzB,YAAI,EAAE;AAAR,OAA7C,CAAP;AACD;;AAED,WAAO6nC,iEAAe,CAACnE,CAAhB,CAAkBrrC,IAAlB,EAAwBjM,KAAxB,CAAP;AACD,GAxhBc;AA0hBf;AACAqP,GAAC,EAAE,UAASpD,IAAT,EAAejM,KAAf,EAAsBo7C,QAAtB,EAAgC;AACjC,QAAIp7C,KAAK,KAAK,IAAd,EAAoB;AAClB,aAAOo7C,QAAQ,CAACI,aAAT,CAAuBvvC,IAAI,CAACqJ,aAAL,EAAvB,EAA6C;AAAE1B,YAAI,EAAE;AAAR,OAA7C,CAAP;AACD;;AAED,WAAO6nC,iEAAe,CAACpsC,CAAhB,CAAkBpD,IAAlB,EAAwBjM,KAAxB,CAAP;AACD,GAjiBc;AAmiBf;AACA69C,GAAC,EAAE,UAAS5xC,IAAT,EAAejM,KAAf,EAAsB;AACvB,QAAI89C,cAAc,GAAG99C,KAAK,CAACqB,MAA3B;AACA,QAAI08C,YAAY,GAAG9xC,IAAI,CAACsJ,kBAAL,EAAnB;AACA,QAAIyoC,iBAAiB,GAAGx6C,IAAI,CAACuF,KAAL,CACtBg1C,YAAY,GAAGv6C,IAAI,CAAC+oC,GAAL,CAAS,EAAT,EAAauR,cAAc,GAAG,CAA9B,CADO,CAAxB;AAGA,WAAO5D,yEAAe,CAAC8D,iBAAD,EAAoBF,cAApB,CAAtB;AACD,GA3iBc;AA6iBf;AACAG,GAAC,EAAE,UAAShyC,IAAT,EAAejM,KAAf,EAAsBk+C,SAAtB,EAAiC39C,OAAjC,EAA0C;AAC3C,QAAI49C,YAAY,GAAG59C,OAAO,CAAC69C,aAAR,IAAyBnyC,IAA5C;AACA,QAAIoyC,cAAc,GAAGF,YAAY,CAACG,iBAAb,EAArB;;AAEA,QAAID,cAAc,KAAK,CAAvB,EAA0B;AACxB,aAAO,GAAP;AACD;;AAED,YAAQr+C,KAAR;AACE;AACA,WAAK,GAAL;AACE,eAAOu+C,iCAAiC,CAACF,cAAD,CAAxC;AAEF;AACA;AACA;;AACA,WAAK,MAAL;AACA,WAAK,IAAL;AAAW;AACT,eAAOG,cAAc,CAACH,cAAD,CAArB;AAEF;AACA;AACA;;AACA,WAAK,OAAL;AACA,WAAK,KAAL,CAhBF,CAgBc;;AACZ;AACE,eAAOG,cAAc,CAACH,cAAD,EAAiB,GAAjB,CAArB;AAlBJ;AAoBD,GA1kBc;AA4kBf;AACAloC,GAAC,EAAE,UAASlK,IAAT,EAAejM,KAAf,EAAsBk+C,SAAtB,EAAiC39C,OAAjC,EAA0C;AAC3C,QAAI49C,YAAY,GAAG59C,OAAO,CAAC69C,aAAR,IAAyBnyC,IAA5C;AACA,QAAIoyC,cAAc,GAAGF,YAAY,CAACG,iBAAb,EAArB;;AAEA,YAAQt+C,KAAR;AACE;AACA,WAAK,GAAL;AACE,eAAOu+C,iCAAiC,CAACF,cAAD,CAAxC;AAEF;AACA;AACA;;AACA,WAAK,MAAL;AACA,WAAK,IAAL;AAAW;AACT,eAAOG,cAAc,CAACH,cAAD,CAArB;AAEF;AACA;AACA;;AACA,WAAK,OAAL;AACA,WAAK,KAAL,CAhBF,CAgBc;;AACZ;AACE,eAAOG,cAAc,CAACH,cAAD,EAAiB,GAAjB,CAArB;AAlBJ;AAoBD,GArmBc;AAumBf;AACAjW,GAAC,EAAE,UAASn8B,IAAT,EAAejM,KAAf,EAAsBk+C,SAAtB,EAAiC39C,OAAjC,EAA0C;AAC3C,QAAI49C,YAAY,GAAG59C,OAAO,CAAC69C,aAAR,IAAyBnyC,IAA5C;AACA,QAAIoyC,cAAc,GAAGF,YAAY,CAACG,iBAAb,EAArB;;AAEA,YAAQt+C,KAAR;AACE;AACA,WAAK,GAAL;AACA,WAAK,IAAL;AACA,WAAK,KAAL;AACE,eAAO,QAAQy+C,mBAAmB,CAACJ,cAAD,EAAiB,GAAjB,CAAlC;AACF;;AACA,WAAK,MAAL;AACA;AACE,eAAO,QAAQG,cAAc,CAACH,cAAD,EAAiB,GAAjB,CAA7B;AATJ;AAWD,GAvnBc;AAynBf;AACAK,GAAC,EAAE,UAASzyC,IAAT,EAAejM,KAAf,EAAsBk+C,SAAtB,EAAiC39C,OAAjC,EAA0C;AAC3C,QAAI49C,YAAY,GAAG59C,OAAO,CAAC69C,aAAR,IAAyBnyC,IAA5C;AACA,QAAIoyC,cAAc,GAAGF,YAAY,CAACG,iBAAb,EAArB;;AAEA,YAAQt+C,KAAR;AACE;AACA,WAAK,GAAL;AACA,WAAK,IAAL;AACA,WAAK,KAAL;AACE,eAAO,QAAQy+C,mBAAmB,CAACJ,cAAD,EAAiB,GAAjB,CAAlC;AACF;;AACA,WAAK,MAAL;AACA;AACE,eAAO,QAAQG,cAAc,CAACH,cAAD,EAAiB,GAAjB,CAA7B;AATJ;AAWD,GAzoBc;AA2oBf;AACA5kB,GAAC,EAAE,UAASxtB,IAAT,EAAejM,KAAf,EAAsBk+C,SAAtB,EAAiC39C,OAAjC,EAA0C;AAC3C,QAAI49C,YAAY,GAAG59C,OAAO,CAAC69C,aAAR,IAAyBnyC,IAA5C;AACA,QAAIsL,SAAS,GAAG/T,IAAI,CAACuF,KAAL,CAAWo1C,YAAY,CAACn1C,OAAb,KAAyB,IAApC,CAAhB;AACA,WAAOkxC,yEAAe,CAAC3iC,SAAD,EAAYvX,KAAK,CAACqB,MAAlB,CAAtB;AACD,GAhpBc;AAkpBf;AACAs9C,GAAC,EAAE,UAAS1yC,IAAT,EAAejM,KAAf,EAAsBk+C,SAAtB,EAAiC39C,OAAjC,EAA0C;AAC3C,QAAI49C,YAAY,GAAG59C,OAAO,CAAC69C,aAAR,IAAyBnyC,IAA5C;AACA,QAAIsL,SAAS,GAAG4mC,YAAY,CAACn1C,OAAb,EAAhB;AACA,WAAOkxC,yEAAe,CAAC3iC,SAAD,EAAYvX,KAAK,CAACqB,MAAlB,CAAtB;AACD;AAvpBc,CAAjB;;AA0pBA,SAASo9C,mBAAT,CAA6BnrB,MAA7B,EAAqCsrB,cAArC,EAAqD;AACnD,MAAIxE,IAAI,GAAG9mB,MAAM,GAAG,CAAT,GAAa,GAAb,GAAmB,GAA9B;AACA,MAAIurB,SAAS,GAAGr7C,IAAI,CAACuY,GAAL,CAASuX,MAAT,CAAhB;AACA,MAAIgqB,KAAK,GAAG95C,IAAI,CAACuF,KAAL,CAAW81C,SAAS,GAAG,EAAvB,CAAZ;AACA,MAAIC,OAAO,GAAGD,SAAS,GAAG,EAA1B;;AACA,MAAIC,OAAO,KAAK,CAAhB,EAAmB;AACjB,WAAO1E,IAAI,GAAGhP,MAAM,CAACkS,KAAD,CAApB;AACD;;AACD,MAAIrP,SAAS,GAAG2Q,cAAc,IAAI,EAAlC;AACA,SAAOxE,IAAI,GAAGhP,MAAM,CAACkS,KAAD,CAAb,GAAuBrP,SAAvB,GAAmCiM,yEAAe,CAAC4E,OAAD,EAAU,CAAV,CAAzD;AACD;;AAED,SAASP,iCAAT,CAA2CjrB,MAA3C,EAAmDsrB,cAAnD,EAAmE;AACjE,MAAItrB,MAAM,GAAG,EAAT,KAAgB,CAApB,EAAuB;AACrB,QAAI8mB,IAAI,GAAG9mB,MAAM,GAAG,CAAT,GAAa,GAAb,GAAmB,GAA9B;AACA,WAAO8mB,IAAI,GAAGF,yEAAe,CAAC12C,IAAI,CAACuY,GAAL,CAASuX,MAAT,IAAmB,EAApB,EAAwB,CAAxB,CAA7B;AACD;;AACD,SAAOkrB,cAAc,CAAClrB,MAAD,EAASsrB,cAAT,CAArB;AACD;;AAED,SAASJ,cAAT,CAAwBlrB,MAAxB,EAAgCsrB,cAAhC,EAAgD;AAC9C,MAAI3Q,SAAS,GAAG2Q,cAAc,IAAI,EAAlC;AACA,MAAIxE,IAAI,GAAG9mB,MAAM,GAAG,CAAT,GAAa,GAAb,GAAmB,GAA9B;AACA,MAAIurB,SAAS,GAAGr7C,IAAI,CAACuY,GAAL,CAASuX,MAAT,CAAhB;AACA,MAAIgqB,KAAK,GAAGpD,yEAAe,CAAC12C,IAAI,CAACuF,KAAL,CAAW81C,SAAS,GAAG,EAAvB,CAAD,EAA6B,CAA7B,CAA3B;AACA,MAAIC,OAAO,GAAG5E,yEAAe,CAAC2E,SAAS,GAAG,EAAb,EAAiB,CAAjB,CAA7B;AACA,SAAOzE,IAAI,GAAGkD,KAAP,GAAerP,SAAf,GAA2B6Q,OAAlC;AACD;;AAEc5D,yEAAf,E;;;;;;;;;;;;ACxvBA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAIA,UAAU,GAAG;AACf;AACA9kC,GAAC,EAAE,UAASnK,IAAT,EAAejM,KAAf,EAAsB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,QAAIu7C,UAAU,GAAGtvC,IAAI,CAAC8I,cAAL,EAAjB,CAVuB,CAWvB;;AACA,QAAI9B,IAAI,GAAGsoC,UAAU,GAAG,CAAb,GAAiBA,UAAjB,GAA8B,IAAIA,UAA7C;AACA,WAAOrB,yEAAe,CAACl6C,KAAK,KAAK,IAAV,GAAiBiT,IAAI,GAAG,GAAxB,GAA8BA,IAA/B,EAAqCjT,KAAK,CAACqB,MAA3C,CAAtB;AACD,GAhBc;AAkBf;AACAi7C,GAAC,EAAE,UAASrwC,IAAT,EAAejM,KAAf,EAAsB;AACvB,QAAIkT,KAAK,GAAGjH,IAAI,CAAC+I,WAAL,EAAZ;AACA,WAAOhV,KAAK,KAAK,GAAV,GAAgBorC,MAAM,CAACl4B,KAAK,GAAG,CAAT,CAAtB,GAAoCgnC,yEAAe,CAAChnC,KAAK,GAAG,CAAT,EAAY,CAAZ,CAA1D;AACD,GAtBc;AAwBf;AACA6iC,GAAC,EAAE,UAAS9pC,IAAT,EAAejM,KAAf,EAAsB;AACvB,WAAOk6C,yEAAe,CAACjuC,IAAI,CAACkJ,UAAL,EAAD,EAAoBnV,KAAK,CAACqB,MAA1B,CAAtB;AACD,GA3Bc;AA6Bf;AACAkO,GAAC,EAAE,UAAStD,IAAT,EAAejM,KAAf,EAAsB;AACvB,QAAIu9C,kBAAkB,GAAGtxC,IAAI,CAACmJ,WAAL,KAAqB,EAArB,IAA2B,CAA3B,GAA+B,IAA/B,GAAsC,IAA/D;;AAEA,YAAQpV,KAAR;AACE,WAAK,GAAL;AACA,WAAK,IAAL;AACA,WAAK,KAAL;AACE,eAAOu9C,kBAAkB,CAAC38C,WAAnB,EAAP;;AACF,WAAK,OAAL;AACE,eAAO28C,kBAAkB,CAAC,CAAD,CAAzB;;AACF,WAAK,MAAL;AACA;AACE,eAAOA,kBAAkB,KAAK,IAAvB,GAA8B,MAA9B,GAAuC,MAA9C;AATJ;AAWD,GA5Cc;AA8Cf;AACAG,GAAC,EAAE,UAASzxC,IAAT,EAAejM,KAAf,EAAsB;AACvB,WAAOk6C,yEAAe,CAACjuC,IAAI,CAACmJ,WAAL,KAAqB,EAArB,IAA2B,EAA5B,EAAgCpV,KAAK,CAACqB,MAAtC,CAAtB;AACD,GAjDc;AAmDf;AACAs8C,GAAC,EAAE,UAAS1xC,IAAT,EAAejM,KAAf,EAAsB;AACvB,WAAOk6C,yEAAe,CAACjuC,IAAI,CAACmJ,WAAL,EAAD,EAAqBpV,KAAK,CAACqB,MAA3B,CAAtB;AACD,GAtDc;AAwDf;AACAi2C,GAAC,EAAE,UAASrrC,IAAT,EAAejM,KAAf,EAAsB;AACvB,WAAOk6C,yEAAe,CAACjuC,IAAI,CAACoJ,aAAL,EAAD,EAAuBrV,KAAK,CAACqB,MAA7B,CAAtB;AACD,GA3Dc;AA6Df;AACAgO,GAAC,EAAE,UAASpD,IAAT,EAAejM,KAAf,EAAsB;AACvB,WAAOk6C,yEAAe,CAACjuC,IAAI,CAACqJ,aAAL,EAAD,EAAuBtV,KAAK,CAACqB,MAA7B,CAAtB;AACD;AAhEc,CAAjB;AAmEe65C,yEAAf,E;;;;;;;;;;;;AClHA;AAAA,SAAS6D,iBAAT,CAA2Blc,OAA3B,EAAoCmc,UAApC,EAAgD;AAC9C,UAAQnc,OAAR;AACE,SAAK,GAAL;AACE,aAAOmc,UAAU,CAAC/yC,IAAX,CAAgB;AAAEqvC,aAAK,EAAE;AAAT,OAAhB,CAAP;;AACF,SAAK,IAAL;AACE,aAAO0D,UAAU,CAAC/yC,IAAX,CAAgB;AAAEqvC,aAAK,EAAE;AAAT,OAAhB,CAAP;;AACF,SAAK,KAAL;AACE,aAAO0D,UAAU,CAAC/yC,IAAX,CAAgB;AAAEqvC,aAAK,EAAE;AAAT,OAAhB,CAAP;;AACF,SAAK,MAAL;AACA;AACE,aAAO0D,UAAU,CAAC/yC,IAAX,CAAgB;AAAEqvC,aAAK,EAAE;AAAT,OAAhB,CAAP;AATJ;AAWD;;AAED,SAAS2D,iBAAT,CAA2Bpc,OAA3B,EAAoCmc,UAApC,EAAgD;AAC9C,UAAQnc,OAAR;AACE,SAAK,GAAL;AACE,aAAOmc,UAAU,CAAC56C,IAAX,CAAgB;AAAEk3C,aAAK,EAAE;AAAT,OAAhB,CAAP;;AACF,SAAK,IAAL;AACE,aAAO0D,UAAU,CAAC56C,IAAX,CAAgB;AAAEk3C,aAAK,EAAE;AAAT,OAAhB,CAAP;;AACF,SAAK,KAAL;AACE,aAAO0D,UAAU,CAAC56C,IAAX,CAAgB;AAAEk3C,aAAK,EAAE;AAAT,OAAhB,CAAP;;AACF,SAAK,MAAL;AACA;AACE,aAAO0D,UAAU,CAAC56C,IAAX,CAAgB;AAAEk3C,aAAK,EAAE;AAAT,OAAhB,CAAP;AATJ;AAWD;;AAED,SAAS4D,qBAAT,CAA+Brc,OAA/B,EAAwCmc,UAAxC,EAAoD;AAClD,MAAIG,WAAW,GAAGtc,OAAO,CAACtc,KAAR,CAAc,WAAd,CAAlB;AACA,MAAI64B,WAAW,GAAGD,WAAW,CAAC,CAAD,CAA7B;AACA,MAAIE,WAAW,GAAGF,WAAW,CAAC,CAAD,CAA7B;;AAEA,MAAI,CAACE,WAAL,EAAkB;AAChB,WAAON,iBAAiB,CAAClc,OAAD,EAAUmc,UAAV,CAAxB;AACD;;AAED,MAAIM,cAAJ;;AAEA,UAAQF,WAAR;AACE,SAAK,GAAL;AACEE,oBAAc,GAAGN,UAAU,CAACO,QAAX,CAAoB;AAAEjE,aAAK,EAAE;AAAT,OAApB,CAAjB;AACA;;AACF,SAAK,IAAL;AACEgE,oBAAc,GAAGN,UAAU,CAACO,QAAX,CAAoB;AAAEjE,aAAK,EAAE;AAAT,OAApB,CAAjB;AACA;;AACF,SAAK,KAAL;AACEgE,oBAAc,GAAGN,UAAU,CAACO,QAAX,CAAoB;AAAEjE,aAAK,EAAE;AAAT,OAApB,CAAjB;AACA;;AACF,SAAK,MAAL;AACA;AACEgE,oBAAc,GAAGN,UAAU,CAACO,QAAX,CAAoB;AAAEjE,aAAK,EAAE;AAAT,OAApB,CAAjB;AACA;AAbJ;;AAgBA,SAAOgE,cAAc,CAClB54B,OADI,CACI,UADJ,EACgBq4B,iBAAiB,CAACK,WAAD,EAAcJ,UAAd,CADjC,EAEJt4B,OAFI,CAEI,UAFJ,EAEgBu4B,iBAAiB,CAACI,WAAD,EAAcL,UAAd,CAFjC,CAAP;AAGD;;AAED,IAAIQ,cAAc,GAAG;AACnB5zB,GAAC,EAAEqzB,iBADgB;AAEnBQ,GAAC,EAAEP;AAFgB,CAArB;AAKeM,6EAAf,E;;;;;;;;;;;;ACjEA;AAAA;AAAA,IAAI9sC,sBAAsB,GAAG,KAA7B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASgtC,+BAAT,CAA0CvoC,SAA1C,EAAqD;AAClE,MAAIlL,IAAI,GAAG,IAAItH,IAAJ,CAASwS,SAAS,CAACnO,OAAV,EAAT,CAAX;AACA,MAAI22C,kBAAkB,GAAG1zC,IAAI,CAACqyC,iBAAL,EAAzB;AACAryC,MAAI,CAAC2zC,UAAL,CAAgB,CAAhB,EAAmB,CAAnB;AACA,MAAIC,gCAAgC,GAAG5zC,IAAI,CAACjD,OAAL,KAAiB0J,sBAAxD;AAEA,SAAOitC,kBAAkB,GAAGjtC,sBAArB,GAA8CmtC,gCAArD;AACD,C;;;;;;;;;;;;ACpBD;AAAA;AAAA;AAAA;AAEA,IAAIjtC,mBAAmB,GAAG,QAA1B,C,CAEA;AACA;;AACe,SAASoqC,eAAT,CAAyB7lC,SAAzB,EAAoC;AACjD,MAAIE,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAI4K,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACA,MAAII,SAAS,GAAGtL,IAAI,CAACjD,OAAL,EAAhB;AACAiD,MAAI,CAAC0J,WAAL,CAAiB,CAAjB,EAAoB,CAApB;AACA1J,MAAI,CAAC2J,WAAL,CAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B;AACA,MAAImqC,oBAAoB,GAAG9zC,IAAI,CAACjD,OAAL,EAA3B;AACA,MAAI6V,UAAU,GAAGtH,SAAS,GAAGwoC,oBAA7B;AACA,SAAOv8C,IAAI,CAACuF,KAAL,CAAW8V,UAAU,GAAGjM,mBAAxB,IAA+C,CAAtD;AACD,C;;;;;;;;;;;;ACpBD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA,IAAIC,oBAAoB,GAAG,SAA3B,C,CAEA;AACA;;AACe,SAASgqC,aAAT,CAAuB1lC,SAAvB,EAAkC;AAC/C,MAAIE,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAI4K,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACA,MAAIL,IAAI,GACNkpC,2EAAiB,CAAC/zC,IAAD,CAAjB,CAAwBjD,OAAxB,KAAoCi3C,+EAAqB,CAACh0C,IAAD,CAArB,CAA4BjD,OAA5B,EADtC,CAR+C,CAW/C;AACA;AACA;;AACA,SAAOxF,IAAI,CAAC6iB,KAAL,CAAWvP,IAAI,GAAGjE,oBAAlB,IAA0C,CAAjD;AACD,C;;;;;;;;;;;;ACvBD;AAAA;AAAA;AAAA;AAAA;CAGA;AACA;;AACe,SAASopC,iBAAT,CAA2B9kC,SAA3B,EAAsC;AACnD,MAAIE,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAI4K,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACA,MAAIlE,IAAI,GAAGhH,IAAI,CAAC8I,cAAL,EAAX;AAEA,MAAImrC,yBAAyB,GAAG,IAAIv7C,IAAJ,CAAS,CAAT,CAAhC;AACAu7C,2BAAyB,CAAC1qC,cAA1B,CAAyCvC,IAAI,GAAG,CAAhD,EAAmD,CAAnD,EAAsD,CAAtD;AACAitC,2BAAyB,CAACtqC,WAA1B,CAAsC,CAAtC,EAAyC,CAAzC,EAA4C,CAA5C,EAA+C,CAA/C;AACA,MAAIuqC,eAAe,GAAGH,2EAAiB,CAACE,yBAAD,CAAvC;AAEA,MAAIE,yBAAyB,GAAG,IAAIz7C,IAAJ,CAAS,CAAT,CAAhC;AACAy7C,2BAAyB,CAAC5qC,cAA1B,CAAyCvC,IAAzC,EAA+C,CAA/C,EAAkD,CAAlD;AACAmtC,2BAAyB,CAACxqC,WAA1B,CAAsC,CAAtC,EAAyC,CAAzC,EAA4C,CAA5C,EAA+C,CAA/C;AACA,MAAIyqC,eAAe,GAAGL,2EAAiB,CAACI,yBAAD,CAAvC;;AAEA,MAAIn0C,IAAI,CAACjD,OAAL,MAAkBm3C,eAAe,CAACn3C,OAAhB,EAAtB,EAAiD;AAC/C,WAAOiK,IAAI,GAAG,CAAd;AACD,GAFD,MAEO,IAAIhH,IAAI,CAACjD,OAAL,MAAkBq3C,eAAe,CAACr3C,OAAhB,EAAtB,EAAiD;AACtD,WAAOiK,IAAP;AACD,GAFM,MAEA;AACL,WAAOA,IAAI,GAAG,CAAd;AACD;AACF,C;;;;;;;;;;;;AChCD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA,IAAIJ,oBAAoB,GAAG,SAA3B,C,CAEA;AACA;;AACe,SAAS6pC,UAAT,CAAoBvlC,SAApB,EAA+B5W,OAA/B,EAAwC;AACrD,MAAI8W,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAI4K,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACA,MAAIL,IAAI,GACNwpC,wEAAc,CAACr0C,IAAD,EAAO1L,OAAP,CAAd,CAA8ByI,OAA9B,KACAu3C,4EAAkB,CAACt0C,IAAD,EAAO1L,OAAP,CAAlB,CAAkCyI,OAAlC,EAFF,CARqD,CAYrD;AACA;AACA;;AACA,SAAOxF,IAAI,CAAC6iB,KAAL,CAAWvP,IAAI,GAAGjE,oBAAlB,IAA0C,CAAjD;AACD,C;;;;;;;;;;;;ACxBD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;CAGA;AACA;;AACe,SAAS+oC,cAAT,CAAyBzkC,SAAzB,EAAoCqpC,YAApC,EAAkD;AAC/D,MAAInpC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CAAc,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UAApE,CAAN;AACD;;AAED,MAAI4K,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,EAAYqpC,YAAZ,CAAjB;AACA,MAAIvtC,IAAI,GAAGhH,IAAI,CAAC8I,cAAL,EAAX;AAEA,MAAIxU,OAAO,GAAGigD,YAAY,IAAI,EAA9B;AACA,MAAI5H,MAAM,GAAGr4C,OAAO,CAACq4C,MAArB;AACA,MAAI6H,2BAA2B,GAAG7H,MAAM,IACtCA,MAAM,CAACr4C,OADyB,IAEhCq4C,MAAM,CAACr4C,OAAP,CAAemgD,qBAFjB;AAGA,MAAIC,4BAA4B,GAC9BF,2BAA2B,IAAI,IAA/B,GACI,CADJ,GAEI1pC,mEAAS,CAAC0pC,2BAAD,CAHf;AAIA,MAAIC,qBAAqB,GACvBngD,OAAO,CAACmgD,qBAAR,IAAiC,IAAjC,GACIC,4BADJ,GAEI5pC,mEAAS,CAACxW,OAAO,CAACmgD,qBAAT,CAHf,CAjB+D,CAsB/D;;AACA,MAAI,EAAEA,qBAAqB,IAAI,CAAzB,IAA8BA,qBAAqB,IAAI,CAAzD,CAAJ,EAAiE;AAC/D,UAAM,IAAIE,UAAJ,CAAe,2DAAf,CAAN;AACD;;AAED,MAAIC,mBAAmB,GAAG,IAAIl8C,IAAJ,CAAS,CAAT,CAA1B;AACAk8C,qBAAmB,CAACrrC,cAApB,CAAmCvC,IAAI,GAAG,CAA1C,EAA6C,CAA7C,EAAgDytC,qBAAhD;AACAG,qBAAmB,CAACjrC,WAApB,CAAgC,CAAhC,EAAmC,CAAnC,EAAsC,CAAtC,EAAyC,CAAzC;AACA,MAAIuqC,eAAe,GAAGG,wEAAc,CAACO,mBAAD,EAAsBL,YAAtB,CAApC;AAEA,MAAIM,mBAAmB,GAAG,IAAIn8C,IAAJ,CAAS,CAAT,CAA1B;AACAm8C,qBAAmB,CAACtrC,cAApB,CAAmCvC,IAAnC,EAAyC,CAAzC,EAA4CytC,qBAA5C;AACAI,qBAAmB,CAAClrC,WAApB,CAAgC,CAAhC,EAAmC,CAAnC,EAAsC,CAAtC,EAAyC,CAAzC;AACA,MAAIyqC,eAAe,GAAGC,wEAAc,CAACQ,mBAAD,EAAsBN,YAAtB,CAApC;;AAEA,MAAIv0C,IAAI,CAACjD,OAAL,MAAkBm3C,eAAe,CAACn3C,OAAhB,EAAtB,EAAiD;AAC/C,WAAOiK,IAAI,GAAG,CAAd;AACD,GAFD,MAEO,IAAIhH,IAAI,CAACjD,OAAL,MAAkBq3C,eAAe,CAACr3C,OAAhB,EAAtB,EAAiD;AACtD,WAAOiK,IAAP;AACD,GAFM,MAEA;AACL,WAAOA,IAAI,GAAG,CAAd;AACD;AACF,C;;;;;;;;;;;;AClDD;AAAA;AAAA;AAAA;AAAO,IAAI8tC,eAAe,GAAG,CAAC,GAAD,EAAM,IAAN,EAAY,IAAZ,EAAkB,MAAlB,CAAtB;AAEA,SAASC,gBAAT,CAA0BhhD,KAA1B,EAAiC;AACtC,SAAO+gD,eAAe,CAACxqC,OAAhB,CAAwBvW,KAAxB,MAAmC,CAAC,CAA3C;AACD;AAEM,SAASihD,mBAAT,CAA6BjhD,KAA7B,EAAoC;AACzC,QAAM,IAAI4gD,UAAJ,CACJ,kEACE5gD,KADF,GAEE,oCAHE,CAAN;AAKD,C;;;;;;;;;;;;ACZD;AAAA;AAAA;AAAA;AAAA;CAGA;AACA;;AACe,SAASkhD,SAAT,CAAmB/pC,SAAnB,EAA8BgqC,QAA9B,EAAwCX,YAAxC,EAAsD;AACnE,MAAInpC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAId,OAAO,GAAGigD,YAAY,IAAI,EAA9B;AACA,MAAI5H,MAAM,GAAGr4C,OAAO,CAACq4C,MAArB;AACA,MAAIwI,kBAAkB,GACpBxI,MAAM,IAAIA,MAAM,CAACr4C,OAAjB,IAA4Bq4C,MAAM,CAACr4C,OAAP,CAAe68C,YAD7C;AAEA,MAAIiE,mBAAmB,GACrBD,kBAAkB,IAAI,IAAtB,GAA6B,CAA7B,GAAiCrqC,mEAAS,CAACqqC,kBAAD,CAD5C;AAEA,MAAIhE,YAAY,GACd78C,OAAO,CAAC68C,YAAR,IAAwB,IAAxB,GACIiE,mBADJ,GAEItqC,mEAAS,CAACxW,OAAO,CAAC68C,YAAT,CAHf,CAbmE,CAkBnE;;AACA,MAAI,EAAEA,YAAY,IAAI,CAAhB,IAAqBA,YAAY,IAAI,CAAvC,CAAJ,EAA+C;AAC7C,UAAM,IAAIwD,UAAJ,CAAe,kDAAf,CAAN;AACD;;AAED,MAAI30C,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACA,MAAI7L,GAAG,GAAGyL,mEAAS,CAACoqC,QAAD,CAAnB;AAEA,MAAIz/B,UAAU,GAAGzV,IAAI,CAACiJ,SAAL,EAAjB;AAEA,MAAIosC,SAAS,GAAGh2C,GAAG,GAAG,CAAtB;AACA,MAAIi2C,QAAQ,GAAG,CAACD,SAAS,GAAG,CAAb,IAAkB,CAAjC;AAEA,MAAIxqC,IAAI,GAAG,CAACyqC,QAAQ,GAAGnE,YAAX,GAA0B,CAA1B,GAA8B,CAA/B,IAAoC9xC,GAApC,GAA0CoW,UAArD;AAEAzV,MAAI,CAACyJ,UAAL,CAAgBzJ,IAAI,CAACkJ,UAAL,KAAoB2B,IAApC;AACA,SAAO7K,IAAP;AACD,C;;;;;;;;;;;;ACxCD;AAAA;AAAA;AAAA;AAAA;CAGA;AACA;;AACe,SAASu1C,YAAT,CAAsBrqC,SAAtB,EAAiCgqC,QAAjC,EAA2C;AACxD,MAAI9pC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIiK,GAAG,GAAGyL,mEAAS,CAACoqC,QAAD,CAAnB;;AAEA,MAAI71C,GAAG,GAAG,CAAN,KAAY,CAAhB,EAAmB;AACjBA,OAAG,GAAGA,GAAG,GAAG,CAAZ;AACD;;AAED,MAAI8xC,YAAY,GAAG,CAAnB;AACA,MAAInxC,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACA,MAAIuK,UAAU,GAAGzV,IAAI,CAACiJ,SAAL,EAAjB;AAEA,MAAIosC,SAAS,GAAGh2C,GAAG,GAAG,CAAtB;AACA,MAAIi2C,QAAQ,GAAG,CAACD,SAAS,GAAG,CAAb,IAAkB,CAAjC;AAEA,MAAIxqC,IAAI,GAAG,CAACyqC,QAAQ,GAAGnE,YAAX,GAA0B,CAA1B,GAA8B,CAA/B,IAAoC9xC,GAApC,GAA0CoW,UAArD;AAEAzV,MAAI,CAACyJ,UAAL,CAAgBzJ,IAAI,CAACkJ,UAAL,KAAoB2B,IAApC;AACA,SAAO7K,IAAP;AACD,C;;;;;;;;;;;;AC7BD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;CAGA;AACA;;AACe,SAASw1C,aAAT,CAAuBtqC,SAAvB,EAAkCuqC,YAAlC,EAAgD;AAC7D,MAAIrqC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI4K,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACA,MAAIylC,OAAO,GAAG7lC,mEAAS,CAAC2qC,YAAD,CAAvB;AACA,MAAI5qC,IAAI,GAAG+lC,uEAAa,CAAC5wC,IAAD,CAAb,GAAsB2wC,OAAjC;AACA3wC,MAAI,CAACyJ,UAAL,CAAgBzJ,IAAI,CAACkJ,UAAL,KAAoB2B,IAAI,GAAG,CAA3C;AACA,SAAO7K,IAAP;AACD,C;;;;;;;;;;;;AClBD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;CAGA;AACA;;AACe,SAAS01C,UAAT,CAAoBxqC,SAApB,EAA+ByqC,SAA/B,EAA0CrhD,OAA1C,EAAmD;AAChE,MAAI8W,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI4K,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACA,MAAIslC,IAAI,GAAG1lC,mEAAS,CAAC6qC,SAAD,CAApB;AACA,MAAI9qC,IAAI,GAAG4lC,oEAAU,CAACzwC,IAAD,EAAO1L,OAAP,CAAV,GAA4Bk8C,IAAvC;AACAxwC,MAAI,CAACyJ,UAAL,CAAgBzJ,IAAI,CAACkJ,UAAL,KAAoB2B,IAAI,GAAG,CAA3C;AACA,SAAO7K,IAAP;AACD,C;;;;;;;;;;;;AClBD;AAAA;AAAA;CAEA;AACA;;AACe,SAAS+zC,iBAAT,CAA2B7oC,SAA3B,EAAsC;AACnD,MAAIE,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAI+7C,YAAY,GAAG,CAAnB;AAEA,MAAInxC,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACA,MAAI7L,GAAG,GAAGW,IAAI,CAACiJ,SAAL,EAAV;AACA,MAAI4B,IAAI,GAAG,CAACxL,GAAG,GAAG8xC,YAAN,GAAqB,CAArB,GAAyB,CAA1B,IAA+B9xC,GAA/B,GAAqC8xC,YAAhD;AAEAnxC,MAAI,CAACyJ,UAAL,CAAgBzJ,IAAI,CAACkJ,UAAL,KAAoB2B,IAApC;AACA7K,MAAI,CAAC2J,WAAL,CAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B;AACA,SAAO3J,IAAP;AACD,C;;;;;;;;;;;;ACpBD;AAAA;AAAA;AAAA;AAAA;CAGA;AACA;;AACe,SAASg0C,qBAAT,CAA+B9oC,SAA/B,EAA0C;AACvD,MAAIE,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAI4R,IAAI,GAAGgpC,2EAAiB,CAAC9kC,SAAD,CAA5B;AACA,MAAI0qC,eAAe,GAAG,IAAIl9C,IAAJ,CAAS,CAAT,CAAtB;AACAk9C,iBAAe,CAACrsC,cAAhB,CAA+BvC,IAA/B,EAAqC,CAArC,EAAwC,CAAxC;AACA4uC,iBAAe,CAACjsC,WAAhB,CAA4B,CAA5B,EAA+B,CAA/B,EAAkC,CAAlC,EAAqC,CAArC;AACA,MAAI3J,IAAI,GAAG+zC,2EAAiB,CAAC6B,eAAD,CAA5B;AACA,SAAO51C,IAAP;AACD,C;;;;;;;;;;;;AClBD;AAAA;AAAA;AAAA;AAAA;CAGA;AACA;;AACe,SAASq0C,cAAT,CAAwBnpC,SAAxB,EAAmCqpC,YAAnC,EAAiD;AAC9D,MAAInpC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAId,OAAO,GAAGigD,YAAY,IAAI,EAA9B;AACA,MAAI5H,MAAM,GAAGr4C,OAAO,CAACq4C,MAArB;AACA,MAAIwI,kBAAkB,GACpBxI,MAAM,IAAIA,MAAM,CAACr4C,OAAjB,IAA4Bq4C,MAAM,CAACr4C,OAAP,CAAe68C,YAD7C;AAEA,MAAIiE,mBAAmB,GACrBD,kBAAkB,IAAI,IAAtB,GAA6B,CAA7B,GAAiCrqC,mEAAS,CAACqqC,kBAAD,CAD5C;AAEA,MAAIhE,YAAY,GACd78C,OAAO,CAAC68C,YAAR,IAAwB,IAAxB,GACIiE,mBADJ,GAEItqC,mEAAS,CAACxW,OAAO,CAAC68C,YAAT,CAHf,CAb8D,CAkB9D;;AACA,MAAI,EAAEA,YAAY,IAAI,CAAhB,IAAqBA,YAAY,IAAI,CAAvC,CAAJ,EAA+C;AAC7C,UAAM,IAAIwD,UAAJ,CAAe,kDAAf,CAAN;AACD;;AAED,MAAI30C,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACA,MAAI7L,GAAG,GAAGW,IAAI,CAACiJ,SAAL,EAAV;AACA,MAAI4B,IAAI,GAAG,CAACxL,GAAG,GAAG8xC,YAAN,GAAqB,CAArB,GAAyB,CAA1B,IAA+B9xC,GAA/B,GAAqC8xC,YAAhD;AAEAnxC,MAAI,CAACyJ,UAAL,CAAgBzJ,IAAI,CAACkJ,UAAL,KAAoB2B,IAApC;AACA7K,MAAI,CAAC2J,WAAL,CAAiB,CAAjB,EAAoB,CAApB,EAAuB,CAAvB,EAA0B,CAA1B;AACA,SAAO3J,IAAP;AACD,C;;;;;;;;;;;;ACnCD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;CAGA;AACA;;AACe,SAASs0C,kBAAT,CAA6BppC,SAA7B,EAAwCqpC,YAAxC,EAAsD;AACnE,MAAInpC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CAAc,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UAApE,CAAN;AACD;;AAED,MAAId,OAAO,GAAGigD,YAAY,IAAI,EAA9B;AACA,MAAI5H,MAAM,GAAGr4C,OAAO,CAACq4C,MAArB;AACA,MAAI6H,2BAA2B,GAAG7H,MAAM,IACtCA,MAAM,CAACr4C,OADyB,IAEhCq4C,MAAM,CAACr4C,OAAP,CAAemgD,qBAFjB;AAGA,MAAIC,4BAA4B,GAC9BF,2BAA2B,IAAI,IAA/B,GACI,CADJ,GAEI1pC,mEAAS,CAAC0pC,2BAAD,CAHf;AAIA,MAAIC,qBAAqB,GACvBngD,OAAO,CAACmgD,qBAAR,IAAiC,IAAjC,GACIC,4BADJ,GAEI5pC,mEAAS,CAACxW,OAAO,CAACmgD,qBAAT,CAHf;AAKA,MAAIztC,IAAI,GAAG2oC,wEAAc,CAACzkC,SAAD,EAAYqpC,YAAZ,CAAzB;AACA,MAAIsB,SAAS,GAAG,IAAIn9C,IAAJ,CAAS,CAAT,CAAhB;AACAm9C,WAAS,CAACtsC,cAAV,CAAyBvC,IAAzB,EAA+B,CAA/B,EAAkCytC,qBAAlC;AACAoB,WAAS,CAAClsC,WAAV,CAAsB,CAAtB,EAAyB,CAAzB,EAA4B,CAA5B,EAA+B,CAA/B;AACA,MAAI3J,IAAI,GAAGq0C,wEAAc,CAACwB,SAAD,EAAYtB,YAAZ,CAAzB;AACA,SAAOv0C,IAAP;AACD,C;;;;;;;;;;;;AC/BD;AAAA;AAAe,SAAS8K,SAAT,CAAoBgrC,WAApB,EAAiC;AAC9C,MAAIA,WAAW,KAAK,IAAhB,IAAwBA,WAAW,KAAK,IAAxC,IAAgDA,WAAW,KAAK,KAApE,EAA2E;AACzE,WAAO/qC,GAAP;AACD;;AAED,MAAIyO,MAAM,GAAG3f,MAAM,CAACi8C,WAAD,CAAnB;;AAEA,MAAIr7C,KAAK,CAAC+e,MAAD,CAAT,EAAmB;AACjB,WAAOA,MAAP;AACD;;AAED,SAAOA,MAAM,GAAG,CAAT,GAAajiB,IAAI,CAACG,IAAL,CAAU8hB,MAAV,CAAb,GAAiCjiB,IAAI,CAACuF,KAAL,CAAW0c,MAAX,CAAxC;AACD,C;;;;;;;;;;;;ACZD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASu8B,OAAT,CAAiB7qC,SAAjB,EAA4BC,WAA5B,EAAyC;AACtD,MAAIC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI4K,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACA,MAAIjQ,MAAM,GAAG6P,uEAAS,CAACK,WAAD,CAAtB;AACAnL,MAAI,CAACg2C,OAAL,CAAah2C,IAAI,CAACwY,OAAL,KAAiBvd,MAA9B;AACA,SAAO+E,IAAP;AACD,C;;;;;;;;;;;;ACpCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA,IAAI0G,oBAAoB,GAAG,OAA3B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASuvC,QAAT,CAAkB/qC,SAAlB,EAA6BC,WAA7B,EAA0C;AACvD,MAAIC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI6F,MAAM,GAAG6P,uEAAS,CAACK,WAAD,CAAtB;AACA,SAAOF,yEAAe,CAACC,SAAD,EAAYjQ,MAAM,GAAGyL,oBAArB,CAAtB;AACD,C;;;;;;;;;;;;ACpCD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASwvC,eAAT,CAAyBhrC,SAAzB,EAAoCC,WAApC,EAAiD;AAC9D,MAAIC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI6F,MAAM,GAAG6P,uEAAS,CAACK,WAAD,CAAtB;AACA,SAAOgrC,wEAAc,CAACjrC,SAAD,EAAYkrC,wEAAc,CAAClrC,SAAD,CAAd,GAA4BjQ,MAAxC,CAArB;AACD,C;;;;;;;;;;;;AC1CD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASgQ,eAAT,CAAyBC,SAAzB,EAAoCC,WAApC,EAAiD;AAC9D,MAAIC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIkW,SAAS,GAAGuoC,gEAAM,CAAC3oC,SAAD,CAAN,CAAkBnO,OAAlB,EAAhB;AACA,MAAI9B,MAAM,GAAG6P,uEAAS,CAACK,WAAD,CAAtB;AACA,SAAO,IAAIzS,IAAJ,CAAS4S,SAAS,GAAGrQ,MAArB,CAAP;AACD,C;;;;;;;;;;;;ACnCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA,IAAIwL,sBAAsB,GAAG,KAA7B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS4vC,UAAT,CAAoBnrC,SAApB,EAA+BC,WAA/B,EAA4C;AACzD,MAAIC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI6F,MAAM,GAAG6P,uEAAS,CAACK,WAAD,CAAtB;AACA,SAAOF,yEAAe,CAACC,SAAD,EAAYjQ,MAAM,GAAGwL,sBAArB,CAAtB;AACD,C;;;;;;;;;;;;ACpCD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS6vC,SAAT,CAAmBprC,SAAnB,EAA8BC,WAA9B,EAA2C;AACxD,MAAIC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI4K,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACA,MAAIjQ,MAAM,GAAG6P,uEAAS,CAACK,WAAD,CAAtB;AACA,MAAII,YAAY,GAAGvL,IAAI,CAACuY,QAAL,KAAkBtd,MAArC;AACA,MAAIuQ,oBAAoB,GAAG,IAAI9S,IAAJ,CAAS,CAAT,CAA3B;AACA8S,sBAAoB,CAAC+qC,WAArB,CAAiCv2C,IAAI,CAACsY,WAAL,EAAjC,EAAqD/M,YAArD,EAAmE,CAAnE;AACAC,sBAAoB,CAACgrC,QAArB,CAA8B,CAA9B,EAAiC,CAAjC,EAAoC,CAApC,EAAuC,CAAvC;AACA,MAAI/qC,WAAW,GAAGgrC,wEAAc,CAACjrC,oBAAD,CAAhC,CAbwD,CAcxD;AACA;;AACAxL,MAAI,CAAC02C,QAAL,CAAcnrC,YAAd,EAA4BhU,IAAI,CAACC,GAAL,CAASiU,WAAT,EAAsBzL,IAAI,CAACwY,OAAL,EAAtB,CAA5B;AACA,SAAOxY,IAAP;AACD,C;;;;;;;;;;;;AC5CD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS22C,WAAT,CAAqBzrC,SAArB,EAAgCC,WAAhC,EAA6C;AAC1D,MAAIC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI6F,MAAM,GAAG6P,uEAAS,CAACK,WAAD,CAAtB;AACA,MAAI2H,MAAM,GAAG7X,MAAM,GAAG,CAAtB;AACA,SAAOq7C,mEAAS,CAACprC,SAAD,EAAY4H,MAAZ,CAAhB;AACD,C;;;;;;;;;;;;ACnCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS8jC,UAAT,CAAoB1rC,SAApB,EAA+BC,WAA/B,EAA4C;AACzD,MAAIC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI6F,MAAM,GAAG6P,uEAAS,CAACK,WAAD,CAAtB;AACA,SAAOF,yEAAe,CAACC,SAAD,EAAYjQ,MAAM,GAAG,IAArB,CAAtB;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS47C,QAAT,CAAkB3rC,SAAlB,EAA6BC,WAA7B,EAA0C;AACvD,MAAIC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI6F,MAAM,GAAG6P,uEAAS,CAACK,WAAD,CAAtB;AACA,MAAIO,IAAI,GAAGzQ,MAAM,GAAG,CAApB;AACA,SAAO86C,iEAAO,CAAC7qC,SAAD,EAAYQ,IAAZ,CAAd;AACD,C;;;;;;;;;;;;ACnCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASorC,QAAT,CAAkB5rC,SAAlB,EAA6BC,WAA7B,EAA0C;AACvD,MAAIC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI6F,MAAM,GAAG6P,uEAAS,CAACK,WAAD,CAAtB;AACA,SAAOmrC,mEAAS,CAACprC,SAAD,EAAYjQ,MAAM,GAAG,EAArB,CAAhB;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS87C,uBAAT,CACbC,iBADa,EAEbC,kBAFa,EAGb;AACA,MAAI7rC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI8hD,YAAY,GAAGF,iBAAiB,IAAI,EAAxC;AACA,MAAIG,aAAa,GAAGF,kBAAkB,IAAI,EAA1C;AACA,MAAIG,aAAa,GAAGvD,gEAAM,CAACqD,YAAY,CAAC55C,KAAd,CAAN,CAA2BP,OAA3B,EAApB;AACA,MAAIs6C,WAAW,GAAGxD,gEAAM,CAACqD,YAAY,CAACp5C,GAAd,CAAN,CAAyBf,OAAzB,EAAlB;AACA,MAAIu6C,cAAc,GAAGzD,gEAAM,CAACsD,aAAa,CAAC75C,KAAf,CAAN,CAA4BP,OAA5B,EAArB;AACA,MAAIw6C,YAAY,GAAG1D,gEAAM,CAACsD,aAAa,CAACr5C,GAAf,CAAN,CAA0Bf,OAA1B,EAAnB,CAZA,CAcA;;AACA,MAAI,EAAEq6C,aAAa,IAAIC,WAAjB,IAAgCC,cAAc,IAAIC,YAApD,CAAJ,EAAuE;AACrE,UAAM,IAAI5C,UAAJ,CAAe,kBAAf,CAAN;AACD;;AAED,SAAOyC,aAAa,GAAGG,YAAhB,IAAgCD,cAAc,GAAGD,WAAxD;AACD,C;;;;;;;;;;;;AC1FD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASG,cAAT,CAAwBC,kBAAxB,EAA4CC,eAA5C,EAA6D;AAC1E,MAAItsC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIuiD,aAAa,GAAG9D,gEAAM,CAAC4D,kBAAD,CAA1B;;AAEA,MAAIh9C,KAAK,CAACk9C,aAAD,CAAT,EAA0B;AACxB,WAAO5sC,GAAP;AACD;;AAED,MAAI6sC,aAAa,GAAGD,aAAa,CAAC56C,OAAd,EAApB;AAEA,MAAI86C,UAAJ,CAf0E,CAgB1E;;AACA,MAAIH,eAAe,IAAI,IAAvB,EAA6B;AAC3BG,cAAU,GAAG,EAAb,CAD2B,CAG3B;AACD,GAJD,MAIO,IAAI,OAAOH,eAAe,CAAC38C,OAAvB,KAAmC,UAAvC,EAAmD;AACxD88C,cAAU,GAAGH,eAAb,CADwD,CAGxD;AACD,GAJM,MAIA;AACLG,cAAU,GAAG37C,KAAK,CAACZ,SAAN,CAAgBnE,KAAhB,CAAsBoE,IAAtB,CAA2Bm8C,eAA3B,CAAb;AACD;;AAED,MAAI5hD,MAAJ;AACA,MAAIgiD,WAAJ;AACAD,YAAU,CAAC98C,OAAX,CAAmB,UAASmQ,SAAT,EAAoB7S,KAApB,EAA2B;AAC5C,QAAI0/C,WAAW,GAAGlE,gEAAM,CAAC3oC,SAAD,CAAxB;;AAEA,QAAIzQ,KAAK,CAACs9C,WAAD,CAAT,EAAwB;AACtBjiD,YAAM,GAAGiV,GAAT;AACA+sC,iBAAW,GAAG/sC,GAAd;AACA;AACD;;AAED,QAAIitC,QAAQ,GAAGzgD,IAAI,CAACuY,GAAL,CAAS8nC,aAAa,GAAGG,WAAW,CAACh7C,OAAZ,EAAzB,CAAf;;AACA,QAAIjH,MAAM,IAAI,IAAV,IAAkBkiD,QAAQ,GAAGF,WAAjC,EAA8C;AAC5ChiD,YAAM,GAAGuC,KAAT;AACAy/C,iBAAW,GAAGE,QAAd;AACD;AACF,GAdD;AAgBA,SAAOliD,MAAP;AACD,C;;;;;;;;;;;;ACjFD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASmiD,SAAT,CAAmBR,kBAAnB,EAAuCC,eAAvC,EAAwD;AACrE,MAAItsC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIuiD,aAAa,GAAG9D,gEAAM,CAAC4D,kBAAD,CAA1B;;AAEA,MAAIh9C,KAAK,CAACk9C,aAAD,CAAT,EAA0B;AACxB,WAAO,IAAIj/C,IAAJ,CAASqS,GAAT,CAAP;AACD;;AAED,MAAI6sC,aAAa,GAAGD,aAAa,CAAC56C,OAAd,EAApB;AAEA,MAAI86C,UAAJ,CAfqE,CAgBrE;;AACA,MAAIH,eAAe,IAAI,IAAvB,EAA6B;AAC3BG,cAAU,GAAG,EAAb,CAD2B,CAG3B;AACD,GAJD,MAIO,IAAI,OAAOH,eAAe,CAAC38C,OAAvB,KAAmC,UAAvC,EAAmD;AACxD88C,cAAU,GAAGH,eAAb,CADwD,CAGxD;AACD,GAJM,MAIA;AACLG,cAAU,GAAG37C,KAAK,CAACZ,SAAN,CAAgBnE,KAAhB,CAAsBoE,IAAtB,CAA2Bm8C,eAA3B,CAAb;AACD;;AAED,MAAI5hD,MAAJ;AACA,MAAIgiD,WAAJ;AACAD,YAAU,CAAC98C,OAAX,CAAmB,UAASmQ,SAAT,EAAoB;AACrC,QAAI6sC,WAAW,GAAGlE,gEAAM,CAAC3oC,SAAD,CAAxB;;AAEA,QAAIzQ,KAAK,CAACs9C,WAAD,CAAT,EAAwB;AACtBjiD,YAAM,GAAG,IAAI4C,IAAJ,CAASqS,GAAT,CAAT;AACA+sC,iBAAW,GAAG/sC,GAAd;AACA;AACD;;AAED,QAAIitC,QAAQ,GAAGzgD,IAAI,CAACuY,GAAL,CAAS8nC,aAAa,GAAGG,WAAW,CAACh7C,OAAZ,EAAzB,CAAf;;AACA,QAAIjH,MAAM,IAAI,IAAV,IAAkBkiD,QAAQ,GAAGF,WAAjC,EAA8C;AAC5ChiD,YAAM,GAAGiiD,WAAT;AACAD,iBAAW,GAAGE,QAAd;AACD;AACF,GAdD;AAgBA,SAAOliD,MAAP;AACD,C;;;;;;;;;;;;AC/ED;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASoiD,UAAT,CAAoBC,aAApB,EAAmCC,cAAnC,EAAmD;AAChE,MAAIhtC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIijD,QAAQ,GAAGxE,gEAAM,CAACsE,aAAD,CAArB;AACA,MAAIG,SAAS,GAAGzE,gEAAM,CAACuE,cAAD,CAAtB;AAEA,MAAIvtC,IAAI,GAAGwtC,QAAQ,CAACt7C,OAAT,KAAqBu7C,SAAS,CAACv7C,OAAV,EAAhC;;AAEA,MAAI8N,IAAI,GAAG,CAAX,EAAc;AACZ,WAAO,CAAC,CAAR;AACD,GAFD,MAEO,IAAIA,IAAI,GAAG,CAAX,EAAc;AACnB,WAAO,CAAP,CADmB,CAEnB;AACD,GAHM,MAGA;AACL,WAAOA,IAAP;AACD;AACF,C;;;;;;;;;;;;AC1DD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS0tC,WAAT,CAAqBJ,aAArB,EAAoCC,cAApC,EAAoD;AACjE,MAAIhtC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIijD,QAAQ,GAAGxE,gEAAM,CAACsE,aAAD,CAArB;AACA,MAAIG,SAAS,GAAGzE,gEAAM,CAACuE,cAAD,CAAtB;AAEA,MAAIvtC,IAAI,GAAGwtC,QAAQ,CAACt7C,OAAT,KAAqBu7C,SAAS,CAACv7C,OAAV,EAAhC;;AAEA,MAAI8N,IAAI,GAAG,CAAX,EAAc;AACZ,WAAO,CAAC,CAAR;AACD,GAFD,MAEO,IAAIA,IAAI,GAAG,CAAX,EAAc;AACnB,WAAO,CAAP,CADmB,CAEnB;AACD,GAHM,MAGA;AACL,WAAOA,IAAP;AACD;AACF,C;;;;;;;;;;;;AC1DD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA,IAAIlE,mBAAmB,GAAG,QAA1B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS6xC,wBAAT,CACbL,aADa,EAEbC,cAFa,EAGb;AACA,MAAIhtC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIqjD,cAAc,GAAGC,oEAAU,CAACP,aAAD,CAA/B;AACA,MAAIQ,eAAe,GAAGD,oEAAU,CAACN,cAAD,CAAhC;AAEA,MAAIQ,aAAa,GACfH,cAAc,CAAC17C,OAAf,KAA2B02C,6FAA+B,CAACgF,cAAD,CAD5D;AAEA,MAAII,cAAc,GAChBF,eAAe,CAAC57C,OAAhB,KAA4B02C,6FAA+B,CAACkF,eAAD,CAD7D,CAZA,CAeA;AACA;AACA;;AACA,SAAOphD,IAAI,CAAC6iB,KAAL,CAAW,CAACw+B,aAAa,GAAGC,cAAjB,IAAmClyC,mBAA9C,CAAP;AACD,C;;;;;;;;;;;;AC7DD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASmyC,gCAAT,CACbX,aADa,EAEbC,cAFa,EAGb;AACA,MAAIhtC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,SAAOghD,wEAAc,CAAC+B,aAAD,CAAd,GAAgC/B,wEAAc,CAACgC,cAAD,CAArD;AACD,C;;;;;;;;;;;;AC7CD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA,IAAIxxC,oBAAoB,GAAG,SAA3B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASmyC,4BAAT,CACbZ,aADa,EAEbC,cAFa,EAGb;AACA,MAAIhtC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI4jD,kBAAkB,GAAGC,wEAAc,CAACd,aAAD,CAAvC;AACA,MAAIe,mBAAmB,GAAGD,wEAAc,CAACb,cAAD,CAAxC;AAEA,MAAIQ,aAAa,GACfI,kBAAkB,CAACj8C,OAAnB,KACA02C,6FAA+B,CAACuF,kBAAD,CAFjC;AAGA,MAAIH,cAAc,GAChBK,mBAAmB,CAACn8C,OAApB,KACA02C,6FAA+B,CAACyF,mBAAD,CAFjC,CAbA,CAiBA;AACA;AACA;;AACA,SAAO3hD,IAAI,CAAC6iB,KAAL,CAAW,CAACw+B,aAAa,GAAGC,cAAjB,IAAmCjyC,oBAA9C,CAAP;AACD,C;;;;;;;;;;;;ACxDD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASuyC,0BAAT,CACbhB,aADa,EAEbC,cAFa,EAGb;AACA,MAAIhtC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIijD,QAAQ,GAAGxE,gEAAM,CAACsE,aAAD,CAArB;AACA,MAAIG,SAAS,GAAGzE,gEAAM,CAACuE,cAAD,CAAtB;AAEA,MAAIgB,QAAQ,GAAGf,QAAQ,CAAC//B,WAAT,KAAyBggC,SAAS,CAAChgC,WAAV,EAAxC;AACA,MAAI+gC,SAAS,GAAGhB,QAAQ,CAAC9/B,QAAT,KAAsB+/B,SAAS,CAAC//B,QAAV,EAAtC;AAEA,SAAO6gC,QAAQ,GAAG,EAAX,GAAgBC,SAAvB;AACD,C;;;;;;;;;;;;AC5CD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASC,4BAAT,CACbnB,aADa,EAEbC,cAFa,EAGb;AACA,MAAIhtC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIijD,QAAQ,GAAGxE,gEAAM,CAACsE,aAAD,CAArB;AACA,MAAIG,SAAS,GAAGzE,gEAAM,CAACuE,cAAD,CAAtB;AAEA,MAAIgB,QAAQ,GAAGf,QAAQ,CAAC//B,WAAT,KAAyBggC,SAAS,CAAChgC,WAAV,EAAxC;AACA,MAAIihC,WAAW,GAAGC,oEAAU,CAACnB,QAAD,CAAV,GAAuBmB,oEAAU,CAAClB,SAAD,CAAnD;AAEA,SAAOc,QAAQ,GAAG,CAAX,GAAeG,WAAtB;AACD,C;;;;;;;;;;;;AC7CD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA,IAAI3yC,oBAAoB,GAAG,SAA3B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS6yC,yBAAT,CACbtB,aADa,EAEbC,cAFa,EAGb7D,YAHa,EAIb;AACA,MAAInpC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIskD,eAAe,GAAGC,qEAAW,CAACxB,aAAD,EAAgB5D,YAAhB,CAAjC;AACA,MAAIqF,gBAAgB,GAAGD,qEAAW,CAACvB,cAAD,EAAiB7D,YAAjB,CAAlC;AAEA,MAAIqE,aAAa,GACfc,eAAe,CAAC38C,OAAhB,KAA4B02C,6FAA+B,CAACiG,eAAD,CAD7D;AAEA,MAAIb,cAAc,GAChBe,gBAAgB,CAAC78C,OAAjB,KACA02C,6FAA+B,CAACmG,gBAAD,CAFjC,CAZA,CAgBA;AACA;AACA;;AACA,SAAOriD,IAAI,CAAC6iB,KAAL,CAAW,CAACw+B,aAAa,GAAGC,cAAjB,IAAmCjyC,oBAA9C,CAAP;AACD,C;;;;;;;;;;;;ACpED;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASizC,yBAAT,CACb1B,aADa,EAEbC,cAFa,EAGb;AACA,MAAIhtC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIijD,QAAQ,GAAGxE,gEAAM,CAACsE,aAAD,CAArB;AACA,MAAIG,SAAS,GAAGzE,gEAAM,CAACuE,cAAD,CAAtB;AAEA,SAAOC,QAAQ,CAAC//B,WAAT,KAAyBggC,SAAS,CAAChgC,WAAV,EAAhC;AACD,C;;;;;;;;;;;;ACzCD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASwhC,gBAAT,CAA0B3B,aAA1B,EAAyCC,cAAzC,EAAyD;AACtE,MAAIhtC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIijD,QAAQ,GAAGxE,gEAAM,CAACsE,aAAD,CAArB;AACA,MAAIG,SAAS,GAAGzE,gEAAM,CAACuE,cAAD,CAAtB;AAEA,MAAIjK,IAAI,GAAG+J,oEAAU,CAACG,QAAD,EAAWC,SAAX,CAArB;AACA,MAAI1lC,UAAU,GAAGrb,IAAI,CAACuY,GAAL,CAAS0oC,kFAAwB,CAACH,QAAD,EAAWC,SAAX,CAAjC,CAAjB;AAEAD,UAAQ,CAACrC,OAAT,CAAiBqC,QAAQ,CAAC7/B,OAAT,KAAqB21B,IAAI,GAAGv7B,UAA7C,EAbsE,CAetE;AACA;;AACA,MAAImnC,gBAAgB,GAAG7B,oEAAU,CAACG,QAAD,EAAWC,SAAX,CAAV,KAAoC,CAACnK,IAA5D;AACA,MAAIr4C,MAAM,GAAGq4C,IAAI,IAAIv7B,UAAU,GAAGmnC,gBAAjB,CAAjB,CAlBsE,CAmBtE;;AACA,SAAOjkD,MAAM,KAAK,CAAX,GAAe,CAAf,GAAmBA,MAA1B;AACD,C;;;;;;;;;;;;AC1DD;AAAA;AAAA;AAAA;AAEA,IAAI4Q,oBAAoB,GAAG,OAA3B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASszC,iBAAT,CAA2B7B,aAA3B,EAA0CC,cAA1C,EAA0D;AACvE,MAAIhtC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIyV,IAAI,GACNovC,kFAAwB,CAAC9B,aAAD,EAAgBC,cAAhB,CAAxB,GACA1xC,oBAFF;AAGA,SAAOmE,IAAI,GAAG,CAAP,GAAWtT,IAAI,CAACuF,KAAL,CAAW+N,IAAX,CAAX,GAA8BtT,IAAI,CAACG,IAAL,CAAUmT,IAAV,CAArC;AACD,C;;;;;;;;;;;;ACxCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASqvC,wBAAT,CACb/B,aADa,EAEbC,cAFa,EAGb;AACA,MAAIhtC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIijD,QAAQ,GAAGxE,gEAAM,CAACsE,aAAD,CAArB;AACA,MAAIG,SAAS,GAAGzE,gEAAM,CAACuE,cAAD,CAAtB;AAEA,MAAIjK,IAAI,GAAG+J,oEAAU,CAACG,QAAD,EAAWC,SAAX,CAArB;AACA,MAAI1lC,UAAU,GAAGrb,IAAI,CAACuY,GAAL,CACfgpC,0FAAgC,CAACT,QAAD,EAAWC,SAAX,CADjB,CAAjB;AAGAD,UAAQ,GAAG8B,yEAAe,CAAC9B,QAAD,EAAWlK,IAAI,GAAGv7B,UAAlB,CAA1B,CAdA,CAgBA;AACA;AACA;;AACA,MAAIwnC,wBAAwB,GAAGlC,oEAAU,CAACG,QAAD,EAAWC,SAAX,CAAV,KAAoC,CAACnK,IAApE;AACA,MAAIr4C,MAAM,GAAGq4C,IAAI,IAAIv7B,UAAU,GAAGwnC,wBAAjB,CAAjB,CApBA,CAqBA;;AACA,SAAOtkD,MAAM,KAAK,CAAX,GAAe,CAAf,GAAmBA,MAA1B;AACD,C;;;;;;;;;;;;AC/DD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASmkD,wBAAT,CACb9B,aADa,EAEbC,cAFa,EAGb;AACA,MAAIhtC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIijD,QAAQ,GAAGxE,gEAAM,CAACsE,aAAD,CAArB;AACA,MAAIG,SAAS,GAAGzE,gEAAM,CAACuE,cAAD,CAAtB;AACA,SAAOC,QAAQ,CAACt7C,OAAT,KAAqBu7C,SAAS,CAACv7C,OAAV,EAA5B;AACD,C;;;;;;;;;;;;ACzCD;AAAA;AAAA;AAAA;AAEA,IAAI0J,sBAAsB,GAAG,KAA7B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS4zC,mBAAT,CAA6BlC,aAA7B,EAA4CC,cAA5C,EAA4D;AACzE,MAAIhtC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIyV,IAAI,GACNovC,kFAAwB,CAAC9B,aAAD,EAAgBC,cAAhB,CAAxB,GACA3xC,sBAFF;AAGA,SAAOoE,IAAI,GAAG,CAAP,GAAWtT,IAAI,CAACuF,KAAL,CAAW+N,IAAX,CAAX,GAA8BtT,IAAI,CAACG,IAAL,CAAUmT,IAAV,CAArC;AACD,C;;;;;;;;;;;;ACxCD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASyvC,kBAAT,CAA4BnC,aAA5B,EAA2CC,cAA3C,EAA2D;AACxE,MAAIhtC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIijD,QAAQ,GAAGxE,gEAAM,CAACsE,aAAD,CAArB;AACA,MAAIG,SAAS,GAAGzE,gEAAM,CAACuE,cAAD,CAAtB;AAEA,MAAIjK,IAAI,GAAG+J,oEAAU,CAACG,QAAD,EAAWC,SAAX,CAArB;AACA,MAAI1lC,UAAU,GAAGrb,IAAI,CAACuY,GAAL,CAASqpC,oFAA0B,CAACd,QAAD,EAAWC,SAAX,CAAnC,CAAjB;AACAD,UAAQ,CAAC3B,QAAT,CAAkB2B,QAAQ,CAAC9/B,QAAT,KAAsB41B,IAAI,GAAGv7B,UAA/C,EAZwE,CAcxE;AACA;;AACA,MAAI2nC,kBAAkB,GAAGrC,oEAAU,CAACG,QAAD,EAAWC,SAAX,CAAV,KAAoC,CAACnK,IAA9D;AACA,MAAIr4C,MAAM,GAAGq4C,IAAI,IAAIv7B,UAAU,GAAG2nC,kBAAjB,CAAjB,CAjBwE,CAkBxE;;AACA,SAAOzkD,MAAM,KAAK,CAAX,GAAe,CAAf,GAAmBA,MAA1B;AACD,C;;;;;;;;;;;;AC9CD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS0kD,oBAAT,CAA8BrC,aAA9B,EAA6CC,cAA7C,EAA6D;AAC1E,MAAIhtC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIyV,IAAI,GAAGyvC,4EAAkB,CAACnC,aAAD,EAAgBC,cAAhB,CAAlB,GAAoD,CAA/D;AACA,SAAOvtC,IAAI,GAAG,CAAP,GAAWtT,IAAI,CAACuF,KAAL,CAAW+N,IAAX,CAAX,GAA8BtT,IAAI,CAACG,IAAL,CAAUmT,IAAV,CAArC;AACD,C;;;;;;;;;;;;ACjCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS4vC,mBAAT,CAA6BtC,aAA7B,EAA4CC,cAA5C,EAA4D;AACzE,MAAIhtC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIyV,IAAI,GAAGovC,kFAAwB,CAAC9B,aAAD,EAAgBC,cAAhB,CAAxB,GAA0D,IAArE;AACA,SAAOvtC,IAAI,GAAG,CAAP,GAAWtT,IAAI,CAACuF,KAAL,CAAW+N,IAAX,CAAX,GAA8BtT,IAAI,CAACG,IAAL,CAAUmT,IAAV,CAArC;AACD,C;;;;;;;;;;;;ACrCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS6vC,iBAAT,CAA2BvC,aAA3B,EAA0CC,cAA1C,EAA0D;AACvE,MAAIhtC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIyV,IAAI,GAAGivC,0EAAgB,CAAC3B,aAAD,EAAgBC,cAAhB,CAAhB,GAAkD,CAA7D;AACA,SAAOvtC,IAAI,GAAG,CAAP,GAAWtT,IAAI,CAACuF,KAAL,CAAW+N,IAAX,CAAX,GAA8BtT,IAAI,CAACG,IAAL,CAAUmT,IAAV,CAArC;AACD,C;;;;;;;;;;;;ACjCD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS8vC,iBAAT,CAA2BxC,aAA3B,EAA0CC,cAA1C,EAA0D;AACvE,MAAIhtC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIijD,QAAQ,GAAGxE,gEAAM,CAACsE,aAAD,CAArB;AACA,MAAIG,SAAS,GAAGzE,gEAAM,CAACuE,cAAD,CAAtB;AAEA,MAAIjK,IAAI,GAAG+J,oEAAU,CAACG,QAAD,EAAWC,SAAX,CAArB;AACA,MAAI1lC,UAAU,GAAGrb,IAAI,CAACuY,GAAL,CAAS+pC,mFAAyB,CAACxB,QAAD,EAAWC,SAAX,CAAlC,CAAjB;AACAD,UAAQ,CAAC9B,WAAT,CAAqB8B,QAAQ,CAAC//B,WAAT,KAAyB61B,IAAI,GAAGv7B,UAArD,EAZuE,CAcvE;AACA;;AACA,MAAIgoC,iBAAiB,GAAG1C,oEAAU,CAACG,QAAD,EAAWC,SAAX,CAAV,KAAoC,CAACnK,IAA7D;AACA,MAAIr4C,MAAM,GAAGq4C,IAAI,IAAIv7B,UAAU,GAAGgoC,iBAAjB,CAAjB,CAjBuE,CAkBvE;;AACA,SAAO9kD,MAAM,KAAK,CAAX,GAAe,CAAf,GAAmBA,MAA1B;AACD,C;;;;;;;;;;;;AC9CD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS+kD,iBAAT,CAA2BC,aAA3B,EAA0CxmD,OAA1C,EAAmD;AAChE,MAAI8W,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAIsd,QAAQ,GAAGooC,aAAa,IAAI,EAAhC;AACA,MAAI54C,SAAS,GAAG2xC,gEAAM,CAACnhC,QAAQ,CAACpV,KAAV,CAAtB;AACA,MAAIy9C,OAAO,GAAGlH,gEAAM,CAACnhC,QAAQ,CAAC5U,GAAV,CAApB;AAEA,MAAIk9C,OAAO,GAAGD,OAAO,CAACh+C,OAAR,EAAd,CAXgE,CAahE;;AACA,MAAI,EAAEmF,SAAS,CAACnF,OAAV,MAAuBi+C,OAAzB,CAAJ,EAAuC;AACrC,UAAM,IAAIrG,UAAJ,CAAe,kBAAf,CAAN;AACD;;AAED,MAAI9yC,KAAK,GAAG,EAAZ;AAEA,MAAIk2C,WAAW,GAAG71C,SAAlB;AACA61C,aAAW,CAACvB,QAAZ,CAAqB,CAArB,EAAwB,CAAxB,EAA2B,CAA3B,EAA8B,CAA9B;AAEA,MAAIyE,IAAI,GAAG3mD,OAAO,IAAI,UAAUA,OAArB,GAA+BuF,MAAM,CAACvF,OAAO,CAAC2mD,IAAT,CAArC,GAAsD,CAAjE;AACA,MAAIA,IAAI,GAAG,CAAP,IAAYxgD,KAAK,CAACwgD,IAAD,CAArB,EACE,MAAM,IAAItG,UAAJ,CAAe,gDAAf,CAAN;;AAEF,SAAOoD,WAAW,CAACh7C,OAAZ,MAAyBi+C,OAAhC,EAAyC;AACvCn5C,SAAK,CAAC3K,IAAN,CAAW28C,gEAAM,CAACkE,WAAD,CAAjB;AACAA,eAAW,CAAC/B,OAAZ,CAAoB+B,WAAW,CAACv/B,OAAZ,KAAwByiC,IAA5C;AACAlD,eAAW,CAACvB,QAAZ,CAAqB,CAArB,EAAwB,CAAxB,EAA2B,CAA3B,EAA8B,CAA9B;AACD;;AAED,SAAO30C,KAAP;AACD,C;;;;;;;;;;;;ACjGD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASq5C,kBAAT,CAA4BJ,aAA5B,EAA2CxmD,OAA3C,EAAoD;AACjE,MAAI8W,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAIsd,QAAQ,GAAGooC,aAAa,IAAI,EAAhC;AACA,MAAI54C,SAAS,GAAG2xC,gEAAM,CAACnhC,QAAQ,CAACpV,KAAV,CAAtB;AACA,MAAIy9C,OAAO,GAAGlH,gEAAM,CAACnhC,QAAQ,CAAC5U,GAAV,CAApB;AAEA,MAAIk9C,OAAO,GAAGD,OAAO,CAACh+C,OAAR,EAAd,CAXiE,CAajE;;AACA,MAAI,EAAEmF,SAAS,CAACnF,OAAV,MAAuBi+C,OAAzB,CAAJ,EAAuC;AACrC,UAAM,IAAIrG,UAAJ,CAAe,kBAAf,CAAN;AACD;;AAED,MAAIwG,aAAa,GAAGxB,qEAAW,CAACz3C,SAAD,EAAY5N,OAAZ,CAA/B;AACA,MAAI8mD,WAAW,GAAGzB,qEAAW,CAACoB,OAAD,EAAUzmD,OAAV,CAA7B,CAnBiE,CAqBjE;;AACA6mD,eAAa,CAAC3E,QAAd,CAAuB,EAAvB;AACA4E,aAAW,CAAC5E,QAAZ,CAAqB,EAArB;AAEAwE,SAAO,GAAGI,WAAW,CAACr+C,OAAZ,EAAV;AAEA,MAAIs+C,KAAK,GAAG,EAAZ;AAEA,MAAIC,WAAW,GAAGH,aAAlB;;AAEA,SAAOG,WAAW,CAACv+C,OAAZ,MAAyBi+C,OAAhC,EAAyC;AACvCM,eAAW,CAAC9E,QAAZ,CAAqB,CAArB;AACA6E,SAAK,CAACnkD,IAAN,CAAW28C,gEAAM,CAACyH,WAAD,CAAjB;AACAA,eAAW,GAAGzE,kEAAQ,CAACyE,WAAD,EAAc,CAAd,CAAtB;AACAA,eAAW,CAAC9E,QAAZ,CAAqB,EAArB;AACD;;AAED,SAAO6E,KAAP;AACD,C;;;;;;;;;;;;ACjFD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASE,qBAAT,CAA+B7oC,QAA/B,EAAyC;AACtD,MAAItH,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAIomD,YAAY,GAAGX,2EAAiB,CAACnoC,QAAD,CAApC;AACA,MAAI+oC,QAAQ,GAAG,EAAf;AACA,MAAIpjD,KAAK,GAAG,CAAZ;;AACA,SAAOA,KAAK,KAAKmjD,YAAY,CAACpmD,MAA9B,EAAsC;AACpC,QAAI4K,IAAI,GAAGw7C,YAAY,CAACnjD,KAAD,CAAvB;;AACA,QAAIqjD,mEAAS,CAAC17C,IAAD,CAAb,EAAqB;AACnBy7C,cAAQ,CAACvkD,IAAT,CAAc8I,IAAd;AACA,UAAI27C,kEAAQ,CAAC37C,IAAD,CAAZ,EAAoB3H,KAAK,GAAGA,KAAK,GAAG,CAAhB;AACrB;AACF;;AACD,SAAOojD,QAAP;AACD,C;;;;;;;;;;;;ACjDD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASG,kBAAT,CAA4B1wC,SAA5B,EAAuC;AACpD,MAAIE,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI8M,SAAS,GAAG25C,sEAAY,CAAC3wC,SAAD,CAA5B;AACA,MAAIzQ,KAAK,CAACyH,SAAD,CAAT,EAAsB,MAAM,IAAIyyC,UAAJ,CAAe,4BAAf,CAAN;AAEtB,MAAIoG,OAAO,GAAGe,oEAAU,CAAC5wC,SAAD,CAAxB;AACA,SAAOqwC,+EAAqB,CAAC;AAAEj+C,SAAK,EAAE4E,SAAT;AAAoBpE,OAAG,EAAEi9C;AAAzB,GAAD,CAA5B;AACD,C;;;;;;;;;;;;AC3CD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASgB,iBAAT,CAA2B7wC,SAA3B,EAAsC;AACnD,MAAIE,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI8M,SAAS,GAAG85C,qEAAW,CAAC9wC,SAAD,CAA3B;AACA,MAAIzQ,KAAK,CAACyH,SAAD,CAAT,EAAsB,MAAM,IAAIyyC,UAAJ,CAAe,4BAAf,CAAN;AAEtB,MAAIoG,OAAO,GAAGkB,mEAAS,CAAC/wC,SAAD,CAAvB;AACA,SAAOqwC,+EAAqB,CAAC;AAAEj+C,SAAK,EAAE4E,SAAT;AAAoBpE,OAAG,EAAEi9C;AAAzB,GAAD,CAA5B;AACD,C;;;;;;;;;;;;ACxCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASmB,QAAT,CAAkBhxC,SAAlB,EAA6B;AAC1C,MAAIE,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAI4K,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACAlL,MAAI,CAACw2C,QAAL,CAAc,EAAd,EAAkB,EAAlB,EAAsB,EAAtB,EAA0B,GAA1B;AACA,SAAOx2C,IAAP;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASm8C,WAAT,CAAqBjxC,SAArB,EAAgC;AAC7C,MAAIE,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAI4K,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACA,MAAIlE,IAAI,GAAGhH,IAAI,CAACsY,WAAL,EAAX;AACA,MAAI8jC,MAAM,GAAG,IAAI7kD,IAAI,CAACuF,KAAL,CAAWkK,IAAI,GAAG,EAAlB,IAAwB,EAAzC;AACAhH,MAAI,CAACu2C,WAAL,CAAiB6F,MAAjB,EAAyB,EAAzB,EAA6B,EAA7B;AACAp8C,MAAI,CAACw2C,QAAL,CAAc,EAAd,EAAkB,EAAlB,EAAsB,EAAtB,EAA0B,GAA1B;AACA,SAAOx2C,IAAP;AACD,C;;;;;;;;;;;;ACvCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASq8C,SAAT,CAAmBnxC,SAAnB,EAA8B;AAC3C,MAAIE,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAI4K,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACAlL,MAAI,CAACs8C,UAAL,CAAgB,EAAhB,EAAoB,EAApB,EAAwB,GAAxB;AACA,SAAOt8C,IAAP;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASu8C,YAAT,CAAsBrxC,SAAtB,EAAiC;AAC9C,MAAIE,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,SAAOonD,mEAAS,CAACtxC,SAAD,EAAY;AAAEimC,gBAAY,EAAE;AAAhB,GAAZ,CAAhB;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASsL,gBAAT,CAA0BvxC,SAA1B,EAAqC;AAClD,MAAIE,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAI4R,IAAI,GAAGovC,wEAAc,CAAClrC,SAAD,CAAzB;AACA,MAAI+oC,yBAAyB,GAAG,IAAIv7C,IAAJ,CAAS,CAAT,CAAhC;AACAu7C,2BAAyB,CAACsC,WAA1B,CAAsCvvC,IAAI,GAAG,CAA7C,EAAgD,CAAhD,EAAmD,CAAnD;AACAitC,2BAAyB,CAACuC,QAA1B,CAAmC,CAAnC,EAAsC,CAAtC,EAAyC,CAAzC,EAA4C,CAA5C;AACA,MAAIx2C,IAAI,GAAGi5C,wEAAc,CAAChF,yBAAD,CAAzB;AACAj0C,MAAI,CAAC08C,eAAL,CAAqB18C,IAAI,CAAC4Y,eAAL,KAAyB,CAA9C;AACA,SAAO5Y,IAAP;AACD,C;;;;;;;;;;;;AC/CD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS28C,WAAT,CAAqBzxC,SAArB,EAAgC;AAC7C,MAAIE,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAI4K,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACAlL,MAAI,CAAC2zC,UAAL,CAAgB,EAAhB,EAAoB,GAApB;AACA,SAAO3zC,IAAP;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS87C,UAAT,CAAoB5wC,SAApB,EAA+B;AAC5C,MAAIE,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAI4K,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACA,MAAIjE,KAAK,GAAGjH,IAAI,CAACuY,QAAL,EAAZ;AACAvY,MAAI,CAACu2C,WAAL,CAAiBv2C,IAAI,CAACsY,WAAL,EAAjB,EAAqCrR,KAAK,GAAG,CAA7C,EAAgD,CAAhD;AACAjH,MAAI,CAACw2C,QAAL,CAAc,EAAd,EAAkB,EAAlB,EAAsB,EAAtB,EAA0B,GAA1B;AACA,SAAOx2C,IAAP;AACD,C;;;;;;;;;;;;ACpCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS48C,YAAT,CAAsB1xC,SAAtB,EAAiC;AAC9C,MAAIE,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAI4K,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACA,MAAIoM,YAAY,GAAGtX,IAAI,CAACuY,QAAL,EAAnB;AACA,MAAItR,KAAK,GAAGqQ,YAAY,GAAIA,YAAY,GAAG,CAA/B,GAAoC,CAAhD;AACAtX,MAAI,CAAC02C,QAAL,CAAczvC,KAAd,EAAqB,CAArB;AACAjH,MAAI,CAACw2C,QAAL,CAAc,EAAd,EAAkB,EAAlB,EAAsB,EAAtB,EAA0B,GAA1B;AACA,SAAOx2C,IAAP;AACD,C;;;;;;;;;;;;ACrCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS68C,WAAT,CAAqB3xC,SAArB,EAAgC;AAC7C,MAAIE,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAI4K,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACAlL,MAAI,CAAC08C,eAAL,CAAqB,GAArB;AACA,SAAO18C,IAAP;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASw8C,SAAT,CAAmBtxC,SAAnB,EAA8BqpC,YAA9B,EAA4C;AACzD,MAAInpC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAId,OAAO,GAAGigD,YAAY,IAAI,EAA9B;AAEA,MAAI5H,MAAM,GAAGr4C,OAAO,CAACq4C,MAArB;AACA,MAAIwI,kBAAkB,GACpBxI,MAAM,IAAIA,MAAM,CAACr4C,OAAjB,IAA4Bq4C,MAAM,CAACr4C,OAAP,CAAe68C,YAD7C;AAEA,MAAIiE,mBAAmB,GACrBD,kBAAkB,IAAI,IAAtB,GAA6B,CAA7B,GAAiCrqC,uEAAS,CAACqqC,kBAAD,CAD5C;AAEA,MAAIhE,YAAY,GACd78C,OAAO,CAAC68C,YAAR,IAAwB,IAAxB,GACIiE,mBADJ,GAEItqC,uEAAS,CAACxW,OAAO,CAAC68C,YAAT,CAHf,CAdyD,CAmBzD;;AACA,MAAI,EAAEA,YAAY,IAAI,CAAhB,IAAqBA,YAAY,IAAI,CAAvC,CAAJ,EAA+C;AAC7C,UAAM,IAAIwD,UAAJ,CAAe,kDAAf,CAAN;AACD;;AAED,MAAI30C,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACA,MAAI7L,GAAG,GAAGW,IAAI,CAAC88C,MAAL,EAAV;AACA,MAAIjyC,IAAI,GAAG,CAACxL,GAAG,GAAG8xC,YAAN,GAAqB,CAAC,CAAtB,GAA0B,CAA3B,IAAgC,CAAhC,IAAqC9xC,GAAG,GAAG8xC,YAA3C,CAAX;AAEAnxC,MAAI,CAACg2C,OAAL,CAAah2C,IAAI,CAACwY,OAAL,KAAiB3N,IAA9B;AACA7K,MAAI,CAACw2C,QAAL,CAAc,EAAd,EAAkB,EAAlB,EAAsB,EAAtB,EAA0B,GAA1B;AACA,SAAOx2C,IAAP;AACD,C;;;;;;;;;;;;ACjED;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASi8C,SAAT,CAAmB/wC,SAAnB,EAA8B;AAC3C,MAAIE,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,mCAAmCD,SAAS,CAAChW,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAI4K,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACA,MAAIlE,IAAI,GAAGhH,IAAI,CAACsY,WAAL,EAAX;AACAtY,MAAI,CAACu2C,WAAL,CAAiBvvC,IAAI,GAAG,CAAxB,EAA2B,CAA3B,EAA8B,CAA9B;AACAhH,MAAI,CAACw2C,QAAL,CAAc,EAAd,EAAkB,EAAlB,EAAsB,EAAtB,EAA0B,GAA1B;AACA,SAAOx2C,IAAP;AACD,C;;;;;;;;;;;;ACpCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,IAAI+8C,sBAAsB,GAAG,uDAA7B,C,CAEA;AACA;;AACA,IAAIC,0BAA0B,GAAG,mCAAjC;AAEA,IAAIC,mBAAmB,GAAG,YAA1B;AACA,IAAIC,iBAAiB,GAAG,KAAxB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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C,CAAD,CAA9B;;AACA,QAAIC,cAAc,KAAK,GAAvB,EAA4B;AAC1B,aAAOE,kBAAkB,CAACH,SAAD,CAAzB;AACD;;AAED,QAAII,SAAS,GAAG7O,uEAAU,CAAC0O,cAAD,CAA1B;;AACA,QAAIG,SAAJ,EAAe;AACb,UAAI,CAACxpD,OAAO,CAACypD,oBAAT,IAAiChJ,sFAAgB,CAAC2I,SAAD,CAArD,EAAkE;AAChE1I,iGAAmB,CAAC0I,SAAD,CAAnB;AACD;;AACD,aAAOI,SAAS,CAACP,OAAD,EAAUG,SAAV,EAAqB/Q,MAAM,CAACwC,QAA5B,EAAsCsO,gBAAtC,CAAhB;AACD;;AAED,WAAOC,SAAP;AACD,GAhCU,EAiCV1hC,IAjCU,CAiCL,EAjCK,CAAb;AAmCA,SAAOlmB,MAAP;AACD;;AAED,SAAS+nD,kBAAT,CAA4B55C,KAA5B,EAAmC;AACjC,SAAOA,KAAK,CAACqW,KAAN,CAAY2iC,mBAAZ,EAAiC,CAAjC,EAAoCxiC,OAApC,CAA4CyiC,iBAA5C,EAA+D,GAA/D,CAAP;AACD,C;;;;;;;;;;;;AC3bD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,IAAIc,cAAc,GAAG,IAArB;AACA,IAAIC,0BAA0B,GAAG,IAAjC;AACA,IAAIC,gBAAgB,GAAG,KAAvB;AACA,IAAIC,qBAAqB,GAAG,KAA5B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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O;AACL,QAAIO,sBAAsB,GAAGhsC,MAAM,GAAG,EAAtC;AACA,QAAIisC,KAAK,GAAGxnD,IAAI,CAACuF,KAAL,CAAWgW,MAAM,GAAG,EAApB,CAAZ,CAFK,CAIL;;AACA,QAAIgsC,sBAAsB,GAAG,CAA7B,EAAgC;AAC9B,aAAOnS,MAAM,CAACyR,cAAP,CAAsB,aAAtB,EAAqCW,KAArC,EAA4CR,eAA5C,CAAP,CAD8B,CAG9B;AACD,KAJD,MAIO,IAAIO,sBAAsB,GAAG,CAA7B,EAAgC;AACrC,aAAOnS,MAAM,CAACyR,cAAP,CAAsB,YAAtB,EAAoCW,KAApC,EAA2CR,eAA3C,CAAP,CADqC,CAGrC;AACD,KAJM,MAIA;AACL,aAAO5R,MAAM,CAACyR,cAAP,CAAsB,cAAtB,EAAsCW,KAAK,GAAG,CAA9C,EAAiDR,eAAjD,CAAP;AACD;AACF;AACF,C;;;;;;;;;;;;AC9OD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA,IAAIP,cAAc,GAAG,IAArB;AACA,IAAIE,gBAAgB,GAAG,KAAvB;AACA,IAAIc,eAAe,GAAG,MAAtB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AACA;AACA;AAGA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC3LA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS3G,OAAT,CAAiB6K,SAAjB,EAA4BusC,kBAA5B,EAAgD;AAC7D,MAAIrsC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI4K,IAAI,GAAG6zC,gEAAM,CAAC3oC,SAAD,CAAjB;AACA,MAAIysC,aAAa,GAAG9D,gEAAM,CAAC4D,kBAAD,CAA1B;AACA,SAAOz3C,IAAI,CAACjD,OAAL,KAAiB46C,aAAa,CAAC56C,OAAd,EAAxB;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASuC,QAAT,CAAkB4L,SAAlB,EAA6BusC,kBAA7B,EAAiD;AAC9D,MAAIrsC,SAAS,CAAChW,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAIiW,SAAJ,CACJ,oCAAoCD,SAAS,CAAChW,MAA9C,GAAuD,UADnD,CAAN;AAGD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AIC,iBAAiB,GAAG,KAAxB;AAEA,IAAI4O,mBAAmB,GAAG,IAA1B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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","file":"bundle.api.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded chunks\n \t// \"0\" means \"already loaded\"\n \tvar installedChunks = {\n \t\t\"main\": 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// uncaught error handler for webpack runtime\n \t__webpack_require__.oe = function(err) {\n \t\tprocess.nextTick(function() {\n \t\t\tthrow err; // catch this error by using import().catch()\n \t\t});\n \t};\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./packages/loot-core/src/server/main.js\");\n","/**\n * Group profile methods. Learn more: https://help.mixpanel.com/hc/en-us/articles/360025333632\n */\n\nconst {ProfileHelpers} = require('./profile_helpers');\n\nclass MixpanelGroups extends ProfileHelpers() {\n    constructor(mp_instance) {\n        super();\n        this.mixpanel = mp_instance;\n        this.endpoint = '/groups';\n    }\n\n    /** groups.set_once(group_key, group_id, prop, to, modifiers, callback)\n        ---\n        The same as groups.set, but adds a property value to a group only if it has not been set before.\n    */\n    set_once(group_key, group_id, prop, to, modifiers, callback) {\n        const identifiers = {$group_key: group_key, $group_id: group_id};\n        this._set(prop, to, modifiers, callback, {identifiers, set_once: true});\n    }\n\n    /**\n        groups.set(group_key, group_id, prop, to, modifiers, callback)\n        ---\n        set properties on a group profile\n\n        usage:\n\n            mixpanel.groups.set('company', 'Acme Inc.', '$name', 'Acme Inc.');\n\n            mixpanel.groups.set('company', 'Acme Inc.', {\n                'Industry': 'widgets',\n                '$name': 'Acme Inc.',\n            });\n    */\n    set(group_key, group_id, prop, to, modifiers, callback) {\n        const identifiers = {$group_key: group_key, $group_id: group_id};\n        this._set(prop, to, modifiers, callback, {identifiers});\n    }\n\n    /**\n     groups.delete_group(group_key, group_id, modifiers, callback)\n        ---\n        delete a group profile permanently\n\n        usage:\n\n        mixpanel.groups.delete_group('company', 'Acme Inc.');\n        */\n    delete_group(group_key, group_id, modifiers, callback) {\n        const identifiers = {$group_key: group_key, $group_id: group_id};\n        this._delete_profile({identifiers, modifiers, callback});\n    }\n\n    /**\n     groups.remove(group_key, group_id, data, modifiers, callback)\n        ---\n        remove a value from a list-valued group profile property.\n\n        usage:\n\n        mixpanel.groups.remove('company', 'Acme Inc.', {'products': 'anvil'});\n\n        mixpanel.groups.remove('company', 'Acme Inc.', {\n            'products': 'anvil',\n            'customer segments': 'coyotes'\n        });\n        */\n    remove(group_key, group_id, data, modifiers, callback) {\n        const identifiers = {$group_key: group_key, $group_id: group_id};\n        this._remove({identifiers, data, modifiers, callback});\n    }\n\n    /**\n     groups.union(group_key, group_id, data, modifiers, callback)\n        ---\n        merge value(s) into a list-valued group profile property.\n\n        usage:\n\n        mixpanel.groups.union('company', 'Acme Inc.', {'products': 'anvil'});\n\n        mixpanel.groups.union('company', 'Acme Inc.', {'products': ['anvil'], 'customer segments': ['coyotes']});\n        */\n    union(group_key, group_id, data, modifiers, callback) {\n        const identifiers = {$group_key: group_key, $group_id: group_id};\n        this._union({identifiers, data, modifiers, callback})\n    }\n\n    /**\n     groups.unset(group_key, group_id, prop, modifiers, callback)\n        ---\n        delete a property on a group profile\n\n        usage:\n\n        mixpanel.groups.unset('company', 'Acme Inc.', 'products');\n\n        mixpanel.groups.unset('company', 'Acme Inc.', ['products', 'customer segments']);\n        */\n    unset(group_key, group_id, prop, modifiers, callback) {\n        const identifiers = {$group_key: group_key, $group_id: group_id};\n        this._unset({identifiers, prop, modifiers, callback})\n    }\n}\n\nexports.MixpanelGroups = MixpanelGroups;\n","/*\n    Heavily inspired by the original js library copyright Mixpanel, Inc.\n    (http://mixpanel.com/)\n\n    Copyright (c) 2012 Carl Sverre\n\n    Released under the MIT license.\n*/\n\nconst {async_all, ensure_timestamp} = require('./utils');\nconst {MixpanelGroups} = require('./groups');\nconst {MixpanelPeople} = require('./people');\n\nconst DEFAULT_CONFIG = {\n    test: false,\n    debug: false,\n    verbose: false,\n    host: 'api.mixpanel.com',\n    protocol: 'https',\n    path: '',\n};\n\nfunction base64(str) {\n  return typeof btoa !== 'undefined' ? btoa(str) : Buffer.from(str).toString('base64');\n}\n\nvar create_client = function(token, config) {\n    if (!token) {\n        throw new Error(\"The Mixpanel Client needs a Mixpanel token: `init(token)`\");\n    }\n\n    // mixpanel constants\n    const MAX_BATCH_SIZE = 50;\n    const TRACK_AGE_LIMIT = 60 * 60 * 24 * 5;\n\n    const metrics = {\n        token,\n        config: {...DEFAULT_CONFIG},\n    };\n\n\n    /**\n     * sends an async GET or POST request to mixpanel\n     * for batch processes data must be send in the body of a POST\n     * @param {object} options\n     * @param {string} options.endpoint\n     * @param {object} options.data         the data to send in the request\n     * @param {string} [options.method]     e.g. `get` or `post`, defaults to `get`\n     * @param {function} callback           called on request completion or error\n     */\n    metrics.send_request = function(options, callback) {\n        callback = callback || function() {};\n\n        let content = base64(JSON.stringify(options.data));\n        const endpoint = options.endpoint;\n        const method = (options.method || 'GET').toUpperCase();\n        let query_params = {\n            'ip': 0,\n            'verbose': metrics.config.verbose ? 1 : 0\n        };\n        const key = metrics.config.key;\n        const secret = metrics.config.secret;\n        let request_options = {\n            headers: {},\n        };\n        let request;\n\n        let request_base = `${metrics.config.protocol}://${metrics.config.host}`;\n        if(metrics.config.port) {\n            request_base += `:${metrics.config.port}`;\n        }\n\n        if (method === 'POST') {\n            content = 'data=' + content;\n            request_options.headers['Content-Type'] = 'application/x-www-form-urlencoded';\n            request_options.headers['Content-Length'] = content.length;\n        } else if (method === 'GET') {\n            query_params.data = content;\n        }\n\n\n        // add auth params\n        if (secret) {\n            if (metrics.config.protocol !== 'https') {\n                throw new Error(\"Must use HTTPS if authenticating with API Secret\");\n            }\n            const encoded = base64(secret + ':');\n            request_options.headers['Authorization'] = 'Basic ' + encoded;\n        } else if (key) {\n            query_params.api_key = key;\n        } else if (endpoint === '/import') {\n            throw new Error(\"The Mixpanel Client needs a Mixpanel API Secret when importing old events: `init(token, { secret: ... })`\");\n        }\n\n        if (metrics.config.test) {\n            query_params.test = 1;\n        }\n\n        request_options.path = metrics.config.path + endpoint + \"?\" + (new URLSearchParams(query_params).toString());\n\n        fetch(request_base + request_options.path, {\n            method,\n            headers: request_options.headers,\n            body: method !== 'GET' ? content : null\n        })\n          .then(res => {\n            return res.text();\n          })\n          .then(text => {\n                var e;\n                if (metrics.config.verbose) {\n                    try {\n                        var result = JSON.parse(text);\n                        if(result.status != 1) {\n                            e = new Error(\"Mixpanel Server Error: \" + result.error);\n                        }\n                    }\n                    catch(ex) {\n                        e = new Error(\"Could not parse response from Mixpanel\");\n                    }\n                }\n                else {\n                    e = (text !== '1') ? new Error(\"Mixpanel Server Error: \" + text) : undefined;\n                }\n\n                callback(e);\n          })\n          .catch(e => {\n              console.log('error', e)\n            if (metrics.config.debug) {\n                console.log(\"Got Error: \" + e.message);\n            }\n            callback(e);\n          })\n    };\n\n    /**\n     * Send an event to Mixpanel, using the specified endpoint (e.g., track/import)\n     * @param {string} endpoint - API endpoint name\n     * @param {string} event - event name\n     * @param {object} properties - event properties\n     * @param {Function} [callback] - callback for request completion/error\n     */\n    metrics.send_event_request = function(endpoint, event, properties, callback) {\n        properties.token = metrics.token;\n        properties.mp_lib = \"node\";\n\n        var data = {\n            event: event,\n            properties: properties\n        };\n\n        if (metrics.config.debug) {\n            console.log(\"Sending the following event to Mixpanel:\\n\", data);\n        }\n\n        metrics.send_request({ method: \"GET\", endpoint: endpoint, data: data }, callback);\n    };\n\n    /**\n     * breaks array into equal-sized chunks, with the last chunk being the remainder\n     * @param {Array} arr\n     * @param {number} size\n     * @returns {Array}\n     */\n    var chunk = function(arr, size) {\n        var chunks = [],\n            i = 0,\n            total = arr.length;\n\n        while (i < total) {\n            chunks.push(arr.slice(i, i += size));\n        }\n        return chunks;\n    };\n\n    /**\n     * sends events in batches\n     * @param {object}   options\n     * @param {[{}]}     options.event_list                 array of event objects\n     * @param {string}   options.endpoint                   e.g. `/track` or `/import`\n     * @param {number}   [options.max_concurrent_requests]  limits concurrent async requests over the network\n     * @param {number}   [options.max_batch_size]           limits number of events sent to mixpanel per request\n     * @param {Function} [callback]                         callback receives array of errors if any\n     *\n     */\n    var send_batch_requests = function(options, callback) {\n        var event_list = options.event_list,\n            endpoint = options.endpoint,\n            max_batch_size = options.max_batch_size ? Math.min(MAX_BATCH_SIZE, options.max_batch_size) : MAX_BATCH_SIZE,\n            // to maintain original intention of max_batch_size; if max_batch_size is greater than 50, we assume the user is trying to set max_concurrent_requests\n            max_concurrent_requests = options.max_concurrent_requests || (options.max_batch_size > MAX_BATCH_SIZE && Math.ceil(options.max_batch_size / MAX_BATCH_SIZE)),\n            event_batches = chunk(event_list, max_batch_size),\n            request_batches = max_concurrent_requests ? chunk(event_batches, max_concurrent_requests) : [event_batches],\n            total_event_batches = event_batches.length,\n            total_request_batches = request_batches.length;\n\n        /**\n         * sends a batch of events to mixpanel through http api\n         * @param {Array} batch\n         * @param {Function} cb\n         */\n        function send_event_batch(batch, cb) {\n            if (batch.length > 0) {\n                batch = batch.map(function (event) {\n                    var properties = event.properties;\n\n                    if (endpoint === '/import' || event.properties.time) {\n                        // usually there will be a time property, but not required for `/track` endpoint\n                        event.properties.time = ensure_timestamp(event.properties.time);\n                    }\n                    event.properties.token = event.properties.token || metrics.token;\n                    return event;\n                });\n\n                // must be a POST\n                metrics.send_request({ method: \"POST\", endpoint: endpoint, data: batch }, cb);\n            }\n        }\n\n        /**\n         * Asynchronously sends batches of requests\n         * @param {number} index\n         */\n        function send_next_request_batch(index) {\n            var request_batch = request_batches[index],\n                cb = function (errors, results) {\n                    index += 1;\n                    if (index === total_request_batches) {\n                        callback && callback(errors, results);\n                    } else {\n                        send_next_request_batch(index);\n                    }\n                };\n\n            async_all(request_batch, send_event_batch, cb);\n        }\n\n        // init recursive function\n        send_next_request_batch(0);\n\n        if (metrics.config.debug) {\n            console.log(\n                \"Sending \" + event_list.length + \" events to Mixpanel in \" +\n                total_event_batches + \" batches of events and \" +\n                total_request_batches + \" batches of requests\"\n            );\n        }\n    };\n\n    /**\n         track(event, properties, callback)\n         ---\n         this function sends an event to mixpanel.\n\n         event:string                    the event name\n         properties:object               additional event properties to send\n         callback:function(err:Error)    callback is called when the request is\n                                         finished or an error occurs\n     */\n    metrics.track = function(event, properties, callback) {\n        if (!properties || typeof properties === \"function\") {\n            callback = properties;\n            properties = {};\n        }\n\n        // time is optional for `track` but must be less than 5 days old if set\n        if (properties.time) {\n            properties.time = ensure_timestamp(properties.time);\n            if (properties.time < Date.now() / 1000 - TRACK_AGE_LIMIT) {\n                throw new Error(\"`track` not allowed for event more than 5 days old; use `mixpanel.import()`\");\n            }\n        }\n\n        metrics.send_event_request(\"/track\", event, properties, callback);\n    };\n\n    /**\n     * send a batch of events to mixpanel `track` endpoint: this should only be used if events are less than 5 days old\n     * @param {Array}    event_list                         array of event objects to track\n     * @param {object}   [options]\n     * @param {number}   [options.max_concurrent_requests]  number of concurrent http requests that can be made to mixpanel\n     * @param {number}   [options.max_batch_size]           number of events that can be sent to mixpanel per request\n     * @param {Function} [callback]                         callback receives array of errors if any\n     */\n    metrics.track_batch = function(event_list, options, callback) {\n        options = options || {};\n        if (typeof options === 'function') {\n            callback = options;\n            options = {};\n        }\n        var batch_options = {\n            event_list: event_list,\n            endpoint: \"/track\",\n            max_concurrent_requests: options.max_concurrent_requests,\n            max_batch_size: options.max_batch_size\n        };\n\n        send_batch_requests(batch_options, callback);\n    };\n\n    /**\n        import(event, time, properties, callback)\n        ---\n        This function sends an event to mixpanel using the import\n        endpoint.  The time argument should be either a Date or Number,\n        and should signify the time the event occurred.\n\n        It is highly recommended that you specify the distinct_id\n        property for each event you import, otherwise the events will be\n        tied to the IP address of the sending machine.\n\n        For more information look at:\n        https://mixpanel.com/docs/api-documentation/importing-events-older-than-31-days\n\n        event:string                    the event name\n        time:date|number                the time of the event\n        properties:object               additional event properties to send\n        callback:function(err:Error)    callback is called when the request is\n                                        finished or an error occurs\n    */\n    metrics.import = function(event, time, properties, callback) {\n        if (!properties || typeof properties === \"function\") {\n            callback = properties;\n            properties = {};\n        }\n\n        properties.time = ensure_timestamp(time);\n\n        metrics.send_event_request(\"/import\", event, properties, callback);\n    };\n\n    /**\n        import_batch(event_list, options, callback)\n        ---\n        This function sends a list of events to mixpanel using the import\n        endpoint. The format of the event array should be:\n\n        [\n            {\n                \"event\": \"event name\",\n                \"properties\": {\n                    \"time\": new Date(), // Number or Date; required for each event\n                    \"key\": \"val\",\n                    ...\n                }\n            },\n            {\n                \"event\": \"event name\",\n                \"properties\": {\n                    \"time\": new Date()  // Number or Date; required for each event\n                }\n            },\n            ...\n        ]\n\n        See import() for further information about the import endpoint.\n\n        Options:\n            max_batch_size: the maximum number of events to be transmitted over\n                            the network simultaneously. useful for capping bandwidth\n                            usage.\n            max_concurrent_requests: the maximum number of concurrent http requests that\n                            can be made to mixpanel; also useful for capping bandwidth.\n\n        N.B.: the Mixpanel API only accepts 50 events per request, so regardless\n        of max_batch_size, larger lists of events will be chunked further into\n        groups of 50.\n\n        event_list:array                    list of event names and properties\n        options:object                      optional batch configuration\n        callback:function(error_list:array) callback is called when the request is\n                                            finished or an error occurs\n    */\n    metrics.import_batch = function(event_list, options, callback) {\n        var batch_options;\n\n        if (typeof(options) === \"function\" || !options) {\n            callback = options;\n            options = {};\n        }\n        batch_options = {\n            event_list: event_list,\n            endpoint: \"/import\",\n            max_concurrent_requests: options.max_concurrent_requests,\n            max_batch_size: options.max_batch_size\n        };\n        send_batch_requests(batch_options, callback);\n    };\n\n    /**\n        alias(distinct_id, alias)\n        ---\n        This function creates an alias for distinct_id\n\n        For more information look at:\n        https://mixpanel.com/docs/integration-libraries/using-mixpanel-alias\n\n        distinct_id:string              the current identifier\n        alias:string                    the future alias\n    */\n    metrics.alias = function(distinct_id, alias, callback) {\n        var properties = {\n            distinct_id: distinct_id,\n            alias: alias\n        };\n\n        metrics.track('$create_alias', properties, callback);\n    };\n\n    metrics.identify = function(identified_id, anon_id, callback) {\n        var properties = {\n          distinct_id: identified_id,\n          $identified_id: identified_id,\n          $anon_id: anon_id \n        };\n\n        metrics.track('$identify', properties, callback);\n    };\n\n    metrics.groups = new MixpanelGroups(metrics);\n    metrics.people = new MixpanelPeople(metrics);\n\n    /**\n        set_config(config)\n        ---\n        Modifies the mixpanel config\n\n        config:object       an object with properties to override in the\n                            mixpanel client config\n    */\n    metrics.set_config = function(config) {\n        Object.assign(metrics.config, config);\n        if (config.host) {\n            // Split host into host and port\n            const [host, port] =  config.host.split(':');\n            metrics.config.host = host;\n            if (port) {\n                metrics.config.port = Number(port);\n            }\n        }\n    };\n\n    if (config) {\n        metrics.set_config(config);\n    }\n\n    return metrics;\n};\n\n// module exporting\nmodule.exports = {\n    Client: function(token) {\n        console.warn(\"The function `Client(token)` is deprecated.  It is now called `init(token)`.\");\n        return create_client(token);\n    },\n    init: create_client\n};\n","const {merge_modifiers, ProfileHelpers} = require('./profile_helpers');\n\nclass MixpanelPeople extends ProfileHelpers() {\n    constructor(mp_instance) {\n        super();\n        this.mixpanel = mp_instance;\n        this.endpoint = '/engage';\n    }\n\n    /** people.set_once(distinct_id, prop, to, modifiers, callback)\n        ---\n        The same as people.set but in the words of mixpanel:\n        mixpanel.people.set_once\n\n        \" This method allows you to set a user attribute, only if\n            it is not currently set. It can be called multiple times\n            safely, so is perfect for storing things like the first date\n            you saw a user, or the referrer that brought them to your\n            website for the first time. \"\n\n    */\n    set_once(distinct_id, prop, to, modifiers, callback) {\n        const identifiers = {$distinct_id: distinct_id};\n        this._set(prop, to, modifiers, callback, {identifiers, set_once: true});\n    }\n\n    /**\n        people.set(distinct_id, prop, to, modifiers, callback)\n        ---\n        set properties on an user record in engage\n\n        usage:\n\n            mixpanel.people.set('bob', 'gender', 'm');\n\n            mixpanel.people.set('joe', {\n                'company': 'acme',\n                'plan': 'premium'\n            });\n    */\n    set(distinct_id, prop, to, modifiers, callback) {\n        const identifiers = {$distinct_id: distinct_id};\n        this._set(prop, to, modifiers, callback, {identifiers});\n    }\n\n    /**\n        people.increment(distinct_id, prop, by, modifiers, callback)\n        ---\n        increment/decrement properties on an user record in engage\n\n        usage:\n\n            mixpanel.people.increment('bob', 'page_views', 1);\n\n            // or, for convenience, if you're just incrementing a counter by 1, you can\n            // simply do\n            mixpanel.people.increment('bob', 'page_views');\n\n            // to decrement a counter, pass a negative number\n            mixpanel.people.increment('bob', 'credits_left', -1);\n\n            // like mixpanel.people.set(), you can increment multiple properties at once:\n            mixpanel.people.increment('bob', {\n                counter1: 1,\n                counter2: 3,\n                counter3: -2\n            });\n    */\n    increment(distinct_id, prop, by, modifiers, callback) {\n        // TODO extract to ProfileHelpers\n\n        var $add = {};\n\n        if (typeof(prop) === 'object') {\n            if (typeof(by) === 'object') {\n                callback = modifiers;\n                modifiers = by;\n            } else {\n                callback = by;\n            }\n            for (const [key, val] of Object.entries(prop)) {\n                if (isNaN(parseFloat(val))) {\n                    if (this.mixpanel.config.debug) {\n                        console.error(\"Invalid increment value passed to mixpanel.people.increment - must be a number\");\n                        console.error(\"Passed \" + key + \":\" + val);\n                    }\n                } else {\n                    $add[key] = val;\n                }\n            };\n        } else {\n            if (typeof(by) === 'number' || !by) {\n                by = by || 1;\n                $add[prop] = by;\n                if (typeof(modifiers) === 'function') {\n                    callback = modifiers;\n                }\n            } else if (typeof(by) === 'function') {\n                callback = by;\n                $add[prop] = 1;\n            } else {\n                callback = modifiers;\n                modifiers = (typeof(by) === 'object') ? by : {};\n                $add[prop] = 1;\n            }\n        }\n\n        var data = {\n            '$add': $add,\n            '$token': this.mixpanel.token,\n            '$distinct_id': distinct_id\n        };\n\n        data = merge_modifiers(data, modifiers);\n\n        if (this.mixpanel.config.debug) {\n            console.log(\"Sending the following data to Mixpanel (Engage):\");\n            console.log(data);\n        }\n\n        this.mixpanel.send_request({ method: \"GET\", endpoint: \"/engage\", data: data }, callback);\n    }\n\n    /**\n        people.append(distinct_id, prop, value, modifiers, callback)\n        ---\n        Append a value to a list-valued people analytics property.\n\n        usage:\n\n            // append a value to a list, creating it if needed\n            mixpanel.people.append('bob', 'pages_visited', 'homepage');\n\n            // like mixpanel.people.set(), you can append multiple properties at once:\n            mixpanel.people.append('bob', {\n                list1: 'bob',\n                list2: 123\n            });\n    */\n    append(distinct_id, prop, value, modifiers, callback) {\n        // TODO extract to ProfileHelpers\n\n        var $append = {};\n\n        if (typeof(prop) === 'object') {\n            if (typeof(value) === 'object') {\n                callback = modifiers;\n                modifiers = value;\n            } else {\n                callback = value;\n            }\n            Object.keys(prop).forEach(function(key) {\n                $append[key] = prop[key];\n            });\n        } else {\n            $append[prop] = value;\n            if (typeof(modifiers) === 'function') {\n                callback = modifiers;\n            }\n        }\n\n        var data = {\n            '$append': $append,\n            '$token': this.mixpanel.token,\n            '$distinct_id': distinct_id\n        };\n\n        data = merge_modifiers(data, modifiers);\n\n        if (this.mixpanel.config.debug) {\n            console.log(\"Sending the following data to Mixpanel (Engage):\");\n            console.log(data);\n        }\n\n        this.mixpanel.send_request({ method: \"GET\", endpoint: \"/engage\", data: data }, callback);\n    }\n\n    /**\n        people.track_charge(distinct_id, amount, properties, modifiers, callback)\n        ---\n        Record that you have charged the current user a certain\n        amount of money.\n\n        usage:\n\n            // charge a user $29.99\n            mixpanel.people.track_charge('bob', 29.99);\n\n            // charge a user $19 on the 1st of february\n            mixpanel.people.track_charge('bob', 19, { '$time': new Date('feb 1 2012') });\n    */\n    track_charge(distinct_id, amount, properties, modifiers, callback) {\n        if (typeof(properties) === 'function' || !properties) {\n            callback = properties || function() {};\n            properties = {};\n        } else {\n            if (typeof(modifiers) === 'function' || !modifiers) {\n                callback = modifiers || function() {};\n                if (properties.$ignore_time || properties.hasOwnProperty(\"$ip\")) {\n                    modifiers = {};\n                    Object.keys(properties).forEach(function(key) {\n                        modifiers[key] = properties[key];\n                        delete properties[key];\n                    });\n                }\n            }\n        }\n\n        if (typeof(amount) !== 'number') {\n            amount = parseFloat(amount);\n            if (isNaN(amount)) {\n                console.error(\"Invalid value passed to mixpanel.people.track_charge - must be a number\");\n                return;\n            }\n        }\n\n        properties.$amount = amount;\n\n        if (properties.hasOwnProperty('$time')) {\n            var time = properties.$time;\n            if (Object.prototype.toString.call(time) === '[object Date]') {\n                properties.$time = time.toISOString();\n            }\n        }\n\n        var data = {\n            '$append': { '$transactions': properties },\n            '$token': this.mixpanel.token,\n            '$distinct_id': distinct_id\n        };\n\n        data = merge_modifiers(data, modifiers);\n\n        if (this.mixpanel.config.debug) {\n            console.log(\"Sending the following data to Mixpanel (Engage):\");\n            console.log(data);\n        }\n\n        this.mixpanel.send_request({ method: \"GET\", endpoint: \"/engage\", data: data }, callback);\n    }\n\n    /**\n        people.clear_charges(distinct_id, modifiers, callback)\n        ---\n        Clear all the current user's transactions.\n\n        usage:\n\n            mixpanel.people.clear_charges('bob');\n    */\n    clear_charges(distinct_id, modifiers, callback) {\n        var data = {\n            '$set': { '$transactions': [] },\n            '$token': this.mixpanel.token,\n            '$distinct_id': distinct_id\n        };\n\n        if (typeof(modifiers) === 'function') { callback = modifiers; }\n\n        data = merge_modifiers(data, modifiers);\n\n        if (this.mixpanel.config.debug) {\n            console.log(\"Clearing this user's charges:\", distinct_id);\n        }\n\n        this.mixpanel.send_request({ method: \"GET\", endpoint: \"/engage\", data: data }, callback);\n    }\n\n    /**\n        people.delete_user(distinct_id, modifiers, callback)\n        ---\n        delete an user record in engage\n\n        usage:\n\n            mixpanel.people.delete_user('bob');\n    */\n    delete_user(distinct_id, modifiers, callback) {\n        const identifiers = {$distinct_id: distinct_id};\n        this._delete_profile({identifiers, modifiers, callback});\n    }\n\n    /**\n        people.remove(distinct_id, data, modifiers, callback)\n        ---\n        remove a value from a list-valued user profile property.\n\n        usage:\n\n            mixpanel.people.remove('bob', {'browsers': 'firefox'});\n\n            mixpanel.people.remove('bob', {'browsers': 'chrome', 'os': 'linux'});\n    */\n    remove(distinct_id, data, modifiers, callback) {\n        const identifiers = {'$distinct_id': distinct_id};\n        this._remove({identifiers, data, modifiers, callback})\n    }\n\n    /**\n        people.union(distinct_id, data, modifiers, callback)\n        ---\n        merge value(s) into a list-valued people analytics property.\n\n        usage:\n\n            mixpanel.people.union('bob', {'browsers': 'firefox'});\n\n            mixpanel.people.union('bob', {'browsers': ['chrome'], os: ['linux']});\n    */\n    union(distinct_id, data, modifiers, callback) {\n        const identifiers = {$distinct_id: distinct_id};\n        this._union({identifiers, data, modifiers, callback});\n    }\n\n    /**\n        people.unset(distinct_id, prop, modifiers, callback)\n        ---\n        delete a property on an user record in engage\n\n        usage:\n\n            mixpanel.people.unset('bob', 'page_views');\n\n            mixpanel.people.unset('bob', ['page_views', 'last_login']);\n    */\n    unset(distinct_id, prop, modifiers, callback) {\n        const identifiers = {$distinct_id: distinct_id};\n        this._unset({identifiers, prop, modifiers, callback});\n    }\n};\n\nexports.MixpanelPeople = MixpanelPeople;\n","/**\n * Mixin with profile-related helpers (for people and groups)\n */\n\nconst {ensure_timestamp} = require('./utils');\n\nfunction merge_modifiers(data, modifiers) {\n    if (modifiers) {\n        if (modifiers.$ignore_alias) {\n            data.$ignore_alias = modifiers.$ignore_alias;\n        }\n        if (modifiers.$ignore_time) {\n            data.$ignore_time = modifiers.$ignore_time;\n        }\n        if (modifiers.hasOwnProperty(\"$ip\")) {\n            data.$ip = modifiers.$ip;\n        }\n        if (modifiers.hasOwnProperty(\"$time\")) {\n            data.$time = ensure_timestamp(modifiers.$time);\n        }\n    }\n    return data;\n};\nexports.merge_modifiers = merge_modifiers;\n\nexports.ProfileHelpers = (Base = Object) => class extends Base {\n    get token() {\n        return this.mixpanel.token;\n    }\n\n    get config() {\n        return this.mixpanel.config;\n    }\n\n    _set(prop, to, modifiers, callback, {identifiers, set_once = false}) {\n        let $set = {};\n\n        if (typeof(prop) === 'object') {\n            if (typeof(to) === 'object') {\n                callback = modifiers;\n                modifiers = to;\n            } else {\n                callback = to;\n            }\n            $set = prop;\n        } else {\n            $set[prop] = to;\n            if (typeof(modifiers) === 'function' || !modifiers) {\n                callback = modifiers;\n            }\n        }\n\n        let data = {\n            '$token': this.token,\n            ...identifiers,\n        };\n\n        const set_key = set_once ? \"$set_once\" : \"$set\";\n        data[set_key] = $set;\n\n        if ('ip' in $set) {\n            data.$ip = $set.ip;\n            delete $set.ip;\n        }\n\n        if ($set.$ignore_time) {\n            data.$ignore_time = $set.$ignore_time;\n            delete $set.$ignore_time;\n        }\n\n        data = merge_modifiers(data, modifiers);\n\n        if (this.config.debug) {\n            console.log(`Sending the following data to Mixpanel (${this.endpoint}):`);\n            console.log(data);\n        }\n\n        this.mixpanel.send_request({ method: \"GET\", endpoint: this.endpoint, data }, callback);\n    }\n\n    _delete_profile({identifiers, modifiers, callback}){\n        let data = {\n            '$delete': '',\n            '$token': this.token,\n            ...identifiers,\n        };\n\n        if (typeof(modifiers) === 'function') { callback = modifiers; }\n\n        data = merge_modifiers(data, modifiers);\n\n        if (this.config.debug) {\n            console.log(`Deleting profile ${JSON.stringify(identifiers)}`);\n        }\n\n        this.mixpanel.send_request({ method: \"GET\", endpoint: this.endpoint, data }, callback);\n    }\n\n    _remove({identifiers, data, modifiers, callback}) {\n        let $remove = {};\n\n        if (typeof(data) !== 'object' || Array.isArray(data)) {\n            if (this.config.debug) {\n                console.error(\"Invalid value passed to #remove - data must be an object with scalar values\");\n            }\n            return;\n        }\n\n        for (const [key, val] of Object.entries(data)) {\n            if (typeof(val) === 'string' || typeof(val) === 'number') {\n                $remove[key] = val;\n            } else {\n                if (this.config.debug) {\n                    console.error(\"Invalid argument passed to #remove - values must be scalar\");\n                    console.error(\"Passed \" + key + ':', val);\n                }\n                return;\n            }\n        }\n\n        if (Object.keys($remove).length === 0) {\n            return;\n        }\n\n        data = {\n            '$remove': $remove,\n            '$token': this.token,\n            ...identifiers\n        };\n\n        if (typeof(modifiers) === 'function') {\n            callback = modifiers;\n        }\n\n        data = merge_modifiers(data, modifiers);\n\n        if (this.config.debug) {\n            console.log(`Sending the following data to Mixpanel (${this.endpoint}):`);\n            console.log(data);\n        }\n\n        this.mixpanel.send_request({ method: \"GET\", endpoint: this.endpoint, data }, callback);\n    }\n\n    _union({identifiers, data, modifiers, callback}) {\n        let $union = {};\n\n        if (typeof(data) !== 'object' || Array.isArray(data)) {\n            if (this.config.debug) {\n                console.error(\"Invalid value passed to #union - data must be an object with scalar or array values\");\n            }\n            return;\n        }\n\n        for (const [key, val] of Object.entries(data)) {\n            if (Array.isArray(val)) {\n                var merge_values = val.filter(function(v) {\n                    return typeof(v) === 'string' || typeof(v) === 'number';\n                });\n                if (merge_values.length > 0) {\n                    $union[key] = merge_values;\n                }\n            } else if (typeof(val) === 'string' || typeof(val) === 'number') {\n                $union[key] = [val];\n            } else {\n                if (this.config.debug) {\n                    console.error(\"Invalid argument passed to #union - values must be a scalar value or array\");\n                    console.error(\"Passed \" + key + ':', val);\n                }\n            }\n        }\n\n        if (Object.keys($union).length === 0) {\n            return;\n        }\n\n        data = {\n            '$union': $union,\n            '$token': this.token,\n            ...identifiers,\n        };\n\n        if (typeof(modifiers) === 'function') {\n            callback = modifiers;\n        }\n\n        data = merge_modifiers(data, modifiers);\n\n        if (this.config.debug) {\n            console.log(`Sending the following data to Mixpanel (${this.endpoint}):`);\n            console.log(data);\n        }\n\n        this.mixpanel.send_request({ method: \"GET\", endpoint: this.endpoint, data }, callback);\n    }\n\n    _unset({identifiers, prop, modifiers, callback}){\n        let $unset = [];\n\n        if (Array.isArray(prop)) {\n            $unset = prop;\n        } else if (typeof(prop) === 'string') {\n            $unset = [prop];\n        } else {\n            if (this.config.debug) {\n                console.error(\"Invalid argument passed to #unset - must be a string or array\");\n                console.error(\"Passed: \" + prop);\n            }\n            return;\n        }\n\n        let data = {\n            '$unset': $unset,\n            '$token': this.token,\n            ...identifiers,\n        };\n\n        if (typeof(modifiers) === 'function') {\n            callback = modifiers;\n        }\n\n        data = merge_modifiers(data, modifiers);\n\n        if (this.config.debug) {\n            console.log(`Sending the following data to Mixpanel (${this.endpoint}):`);\n            console.log(data);\n        }\n\n        this.mixpanel.send_request({ method: \"GET\", endpoint: this.endpoint, data }, callback);\n    }\n};\n","/**\n * helper to wait for all callbacks to complete; similar to `Promise.all`\n * exposed to metrics object for unit tests\n * @param {Array} requests\n * @param {Function} handler\n * @param {Function} callback\n */\nexports.async_all = function(requests, handler, callback) {\n    var total = requests.length,\n        errors = null,\n        results = [],\n        done = function (err, result) {\n            if (err) {\n                // errors are `null` unless there is an error, which allows for promisification\n                errors = errors || [];\n                errors.push(err);\n            }\n            results.push(result);\n            if (--total === 0) {\n                callback(errors, results)\n            }\n        };\n\n    if (total === 0) {\n        callback(errors, results);\n    } else {\n        for(var i = 0, l = requests.length; i < l; i++) {\n            handler(requests[i], done);\n        }\n    }\n};\n\n/**\n * Validate type of time property, and convert to Unix timestamp if necessary\n * @param {Date|number} time - value to check\n * @returns {number} Unix timestamp\n */\nexports.ensure_timestamp = function(time) {\n    if (!(time instanceof Date || typeof time === \"number\")) {\n        throw new Error(\"`time` property must be a Date or Unix timestamp and is only required for `import` endpoint\");\n    }\n    return time instanceof Date ? Math.floor(time.getTime() / 1000) : time;\n};\n","import {\n  ArgumentError,\n  getDifferenceBetweenWeekdays,\n  DateAdapterBase as DateAdapterBase$1,\n  dateInputToDateTime,\n  dateInputToDateAdapter,\n  normalizeDateTimeTimezone as normalizeDateTimeTimezone$1,\n  InfiniteLoopError,\n  dateTimeSortComparer,\n  cloneRuleOptions,\n  normalizeRuleOptions,\n  RecurrenceRulesIterator,\n  recurrenceRulesReducer,\n  DateTime as DateTime$1,\n} from '@rschedule/core';\n\nclass OccurrenceGenerator {\n  constructor(args = {}) {\n    this.timezone = args.timezone !== undefined ? args.timezone : null;\n    this.maxDuration = args.maxDuration || 0;\n  }\n  /** Returns the first occurrence or, if there are no occurrences, null. */\n  get firstDate() {\n    if (this._firstDate !== undefined) return this._firstDate;\n    const start = this._run().next().value;\n    this._firstDate = start ? this.dateAdapter.fromDateTime(start) : null;\n    return this._firstDate;\n  }\n  /** If generator is infinite, returns `null`. Otherwise returns the end date */\n  get lastDate() {\n    if (this._lastDate !== undefined) return this._lastDate;\n    if (this.isInfinite) {\n      this._lastDate = null;\n      return null;\n    }\n    const end = this._run({ reverse: true }).next().value;\n    this._lastDate = end ? this.dateAdapter.fromDateTime(end) : null;\n    return this._lastDate;\n  }\n  pipe(...operators) {\n    return operators.reduce((prev, curr) => curr({ base: prev, timezone: this.timezone }), this);\n  }\n  /**\n     * Processes the object's rules/dates and returns an iterable for the occurrences.\n     *\n     * Options object:\n     * - `start` the date to begin iteration on\n     * - `end` the date to end iteration on\n     * - `take` the max number of dates to take before ending iteration\n     * - `reverse` whether to iterate in reverse or not\n     *\n     * Examples:\n     *\n     * ```\n     * const iterator = schedule.occurrences({ start: new Date(), take: 5 });\n     \n     * for (const date of iterator) {\n     *   // do stuff\n     * }\n  \n     * iterator.toArray() // returns Date array\n     * iterator.next().value // returns next Date\n     * ```\n     *\n     */\n  occurrences(args = {}) {\n    return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));\n  }\n  /**\n   * Iterates over the object's occurrences and bundles them into collections\n   * with a specified granularity (default is `\"YEARLY\"`). Make sure to\n   * read about each option & combination of options below.\n   *\n   * Options object:\n   *   - start?: DateAdapter\n   *   - end?: DateAdapter\n   *   - take?: number\n   *   - reverse?: NOT SUPPORTED\n   *   - granularity?: CollectionsGranularity\n   *   - weekStart?: DateAdapter.Weekday\n   *   - skipEmptyPeriods?: boolean\n   *\n   * Returned `Collection` object:\n   *\n   *   - `dates` property containing an array of DateAdapter objects.\n   *   - `granularity` property containing the granularity.\n   *     - `CollectionsGranularity` === `RuleOptions.Frequency`.\n   *     - default is `\"YEARLY\"`\n   *   - `periodStart` property containing a DateAdapter equal to the period's\n   *     start time.\n   *   - `periodEnd` property containing a DateAdapter equal to the period's\n   *     end time.\n   *\n   * #### Details:\n   *\n   * `collections()` always returns full periods. This means that the `start` argument is\n   * transformed to be the start of whatever period the `start` argument is in, and the\n   * `end` argument is transformed to be the end of whatever period the `end` argument is\n   * in.\n   *\n   * - Example: with granularity `\"YEARLY\"`, the `start` argument will be transformed to be the\n   *   start of the year passed in the `start` argument, and the `end` argument will be transformed\n   *   to be the end of the year passed in the `end` argument.\n   *\n   * By default, the `periodStart` value of `Collection` objects produced by this method increments linearly.\n   * This means the returned `Collection#dates` property may have length 0. This can be changed by\n   * passing the `skipEmptyPeriods: true` option, in which case the `periodStart` from one collection to the\n   * next can \"jump\".\n   *\n   * - Example 1: if your object's first occurrence is 2019/2/1 (February 1st) and you call\n   *   `collection({skipEmptyPeriods: true, granularity: 'DAILY', start: new Date(2019,0,1)})`\n   *   (so starting on January 1st), the first Collection produced will have a `periodStart` in February.\n   *\n   * - Example 2: if your object's first occurrence is 2019/2/1 (February 1st) and you call\n   *   `collection({granularity: 'DAILY', start: new Date(2019,0,1)})`\n   *   (so starting on January 1st), the first collection produced will have a `Collection#periodStart`\n   *   of January 1st and have `Collection#dates === []`. Similarly, the next 30 collections produced\n   *   (Jan 2nd - 31st) will all contain an empty array for the `dates` property. Then the February 1st\n   *   `Collection` will contain dates.\n   *\n   * When giving a `take` argument to `collections()`, you are specifying\n   * the number of `Collection` objects to return (rather than occurrences).\n   *\n   * When choosing a granularity of `\"WEEKLY\"`, the `weekStart` option is required.\n   *\n   * When choosing a granularity of `\"MONTHLY\"`:\n   *\n   * - If the `weekStart` option *is not* present, will generate collections with\n   *   the `periodStart` and `periodEnd` at the beginning and end of each month.\n   *\n   * - If the `weekStart` option *is* present, will generate collections with the\n   *   `periodStart` equal to the start of the first week of the month, and the\n   *   `periodEnd` equal to the end of the last week of the month. This behavior could be\n   *   desired when rendering opportunities in a calendar view, where the calendar renders\n   *   full weeks (which may result in the calendar displaying dates in the\n   *   previous or next months).\n   *\n   */\n  collections(args = {}) {\n    return new CollectionIterator(this, this.normalizeCollectionsArgs(args));\n  }\n  /**\n   * Returns true if an occurrence starts on or between the provided start/end\n   * datetimes. If the `excludeEnds` option is provided, then occurrences\n   * equal to the start/end times are ignored.\n   *\n   * If the occurrence generator has a duration, and `excludeEnds !== true`,\n   * and a `maxDuration` argument is supplied (either in the constructor or\n   * here), then any occurrence that's time overlaps with the start/end times\n   * return true.\n   */\n  occursBetween(startInput, endInput, options = {}) {\n    const start = this.normalizeDateInput(startInput);\n    const end = this.normalizeDateInput(endInput);\n    if (this.hasDuration && !options.excludeEnds) {\n      const maxDuration = this.getMaxDuration('occursBetween', options);\n      const iterator = this._run({\n        start: start.subtract(maxDuration, 'millisecond'),\n        end,\n        reverse: true,\n      });\n      for (const day of iterator) {\n        if (day.end.isBefore(start)) continue;\n        return true;\n      }\n      return false;\n    }\n    for (const day of this._run({ start, end })) {\n      if (options.excludeEnds) {\n        if (day.isEqual(start)) {\n          continue;\n        }\n        if (day.isEqual(end)) {\n          break;\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n  occursOn(rawArgs) {\n    const args = this.normalizeOccursOnArgs(rawArgs);\n    if (args.weekday) {\n      if (this.isInfinite && !args.before) {\n        throw new ArgumentError(\n          'When calling `occursOn()` with a `weekday` argument ' +\n            'and an occurrence object that has infinite occurrences, ' +\n            'you must include a `before` argument as well.',\n        );\n      }\n      const start = args.after && (args.excludeEnds ? args.after.add(1, 'day') : args.after);\n      const end = args.before && (args.excludeEnds ? args.before.subtract(1, 'day') : args.before);\n      const iterator = this._run({ start, end });\n      let date = iterator.next().value;\n      if (!date) return false;\n      while (date) {\n        if (date.get('weekday') === args.weekday) {\n          return true;\n        }\n        date = iterator.next({\n          skipToDate: date\n            .add(getDifferenceBetweenWeekdays(date.get('weekday'), args.weekday), 'day')\n            .granularity('day'),\n        }).value;\n      }\n      return false;\n    }\n    if (!args.date) {\n      throw new ArgumentError(\n        `\"occursOn()\" must be called with either a \"date\" or \"weekday\" argument`,\n      );\n    }\n    if (this.hasDuration) {\n      const maxDuration = this.getMaxDuration('occursOn', args);\n      const iterator = this._run({\n        start: args.date.subtract(maxDuration, 'millisecond'),\n        end: args.date,\n      });\n      for (const date of iterator) {\n        if (date.end.isBefore(args.date)) continue;\n        if (date.isAfter(args.date)) return false;\n        return true;\n      }\n      return false;\n    }\n    for (const day of this._run({ start: args.date, end: args.date })) {\n      return !!day;\n    }\n    return false;\n  }\n  /**\n   * Returns true if an occurrence starts after the provided datetime.\n   * If the `excludeStart` option is provided, then occurrences\n   * equal to the provided datetime are ignored.\n   *\n   * If the occurrence generator has a duration, and `excludeStart !== true`,\n   * and a `maxDuration` argument is supplied (either in the constructor or\n   * here), then any occurrence that's end time is after/equal to the provided\n   * datetime return true.\n   */\n  occursAfter(date, options = {}) {\n    const adapter = this.normalizeDateInput(date);\n    if (this.hasDuration && !options.excludeStart) {\n      const maxDuration = this.getMaxDuration('occursAfter', options);\n      const iterator = this._run({\n        start: adapter.subtract(maxDuration, 'millisecond'),\n      });\n      for (const date of iterator) {\n        if (date.end.isBefore(adapter)) continue;\n        return true;\n      }\n      return false;\n    }\n    for (const day of this._run({ start: adapter })) {\n      if (options.excludeStart && day.isEqual(adapter)) {\n        continue;\n      }\n      return true;\n    }\n    return false;\n  }\n  /**\n   * Returns true if an occurrence starts before the provided datetime.\n   * If the `excludeStart` option is provided, then occurrences\n   * equal to the provided datetime are ignored.\n   *\n   * If the occurrence generator has a duration, and `excludeStart` is\n   * also provided, then this will only return true if an occurrence\n   * both starts and ends before the provided datetime.\n   */\n  occursBefore(date, options = {}) {\n    const adapter = this.normalizeDateInput(date);\n    if (this.hasDuration && options.excludeStart) {\n      for (const day of this._run({ end: adapter, reverse: true })) {\n        if (day.end.isAfterOrEqual(adapter)) continue;\n        return true;\n      }\n      return false;\n    }\n    for (const day of this._run({ end: adapter, reverse: true })) {\n      if (options.excludeStart && day.isEqual(adapter)) {\n        continue;\n      }\n      return true;\n    }\n    return false;\n  }\n  get dateAdapter() {\n    return DateAdapterBase$1.adapter;\n  }\n  normalizeOccurrencesArgs(rawArgs) {\n    return Object.assign(Object.assign({}, rawArgs), {\n      start: this.normalizeDateInput(rawArgs.start),\n      end: this.normalizeDateInput(rawArgs.end),\n    });\n  }\n  normalizeCollectionsArgs(rawArgs) {\n    if (rawArgs.reverse !== undefined) {\n      throw new ArgumentError(\n        '`collections()` does not support the `reverse` option at this time.',\n      );\n    }\n    return Object.assign(Object.assign({}, rawArgs), {\n      start: this.normalizeDateInput(rawArgs.start),\n      end: this.normalizeDateInput(rawArgs.end),\n    });\n  }\n  normalizeOccursOnArgs(rawArgs = {}) {\n    return Object.assign(Object.assign({}, rawArgs), {\n      date: this.normalizeDateInput(rawArgs.date),\n      after: this.normalizeDateInput(rawArgs.after),\n      before: this.normalizeDateInput(rawArgs.before),\n      excludeDates:\n        rawArgs.excludeDates && rawArgs.excludeDates.map(date => this.normalizeDateInput(date)),\n    });\n  }\n  normalizeRunArgs(args) {\n    return Object.assign(Object.assign({}, args), {\n      start: this.normalizeDateInput(args.start),\n      end: this.normalizeDateInput(args.end),\n    });\n  }\n  normalizeDateInput(date) {\n    return date ? dateInputToDateTime(date, this.timezone) : undefined;\n  }\n  normalizeDateInputToAdapter(date) {\n    if (!date) return;\n    return dateInputToDateAdapter(date);\n  }\n  normalizeRunOutput(date) {\n    return normalizeDateTimeTimezone$1(date, this.timezone);\n  }\n  getMaxDuration(method, options) {\n    const maxDuration = options.maxDuration || this.maxDuration;\n    if (!Number.isInteger(maxDuration)) {\n      throw new ArgumentError(\n        `When an occurrence generator ` +\n          `has a duration, a 'maxDuration' argument must be supplied ` +\n          `to ${method}().`,\n      );\n    }\n    return maxDuration;\n  }\n}\nclass OccurrenceIterator {\n  constructor(iterable, args) {\n    this.iterable = iterable;\n    this.args = args;\n    // Need to assert the return type of these methods to prevent typescript from\n    // incorrectly reducing them to `DateAdapterBase & { generators: G }`.\n    this[Symbol.iterator] = () => this.occurrenceIterator();\n    this.iterator = iterable._run(args);\n    this.isInfinite = iterable.isInfinite;\n  }\n  next(args) {\n    return this.occurrenceIterator(args).next();\n  }\n  toArray() {\n    if (this.args.end || this.args.take || !this.isInfinite) {\n      return Array.from(this.occurrenceIterator());\n    }\n    throw new InfiniteLoopError(\n      'OccurrenceIterator#toArray() can only be called if the iterator ' +\n        'is not infinite, or you provide and `end` argument, or you provide ' +\n        'a `take` argument.',\n    );\n  }\n  *occurrenceIterator(rawArgs) {\n    let args = this.normalizeRunArgs(rawArgs);\n    let date = this.iterator.next(args).value;\n    while (date) {\n      const yieldArgs = yield this.normalizeDateOutput(date);\n      args = this.normalizeRunArgs(yieldArgs);\n      date = this.iterator.next(args).value;\n    }\n    return undefined;\n  }\n  normalizeRunArgs(args) {\n    return {\n      skipToDate: this.normalizeDateInput(args && args.skipToDate),\n    };\n  }\n  normalizeDateInput(date) {\n    return date ? dateInputToDateTime(date, this.iterable.timezone) : undefined;\n  }\n  normalizeDateOutput(date) {\n    if (!date) return;\n    return date ? DateAdapterBase$1.adapter.fromDateTime(date) : undefined;\n  }\n}\nclass Collection {\n  constructor(dates = [], granularity, periodStart, periodEnd) {\n    this.dates = dates;\n    this.granularity = granularity;\n    this.periodStart = periodStart;\n    this.periodEnd = periodEnd;\n  }\n}\nclass CollectionIterator {\n  constructor(iterable, args) {\n    this.iterable = iterable;\n    this.args = args;\n    this.granularity = 'year';\n    this[Symbol.iterator] = () => this.iterator;\n    if (args.granularity) {\n      this.granularity = args.granularity;\n      if (this.granularity === 'week' && !args.weekStart) {\n        throw new Error('\"week\" granularity requires `weekStart` arg');\n      }\n    }\n    if (args.weekStart) {\n      this.weekStart = args.weekStart;\n    }\n    if (args.reverse) {\n      throw new Error(\n        '`OccurrenceGenerator#collections()` does not support iterating in reverse. ' +\n          'Though `OccurrenceGenerator#occurrences()` does support iterating in reverse.',\n      );\n    }\n    // Set the end arg, if present, to the end of the period.\n    this.args = Object.assign(Object.assign({}, args), {\n      start: args.start || iterable._run().next().value,\n      end: args.end && this.getPeriod(args.end).end,\n    });\n    this.startDate =\n      (this.args.start && this.normalizeDateOutput(this.getPeriod(this.args.start).start)) || null;\n    this.iterator = this.collectionIterator();\n  }\n  next() {\n    return this.iterator.next();\n  }\n  /**\n   * While `next()` and `[Symbol.iterator]` both share state,\n   * `toArray()` does not share state and always returns the whole\n   * collections array.\n   */\n  toArray() {\n    if (this.args.end || this.args.take || !this.iterable.isInfinite) {\n      const collections = [];\n      for (const collection of this.collectionIterator()) {\n        collections.push(collection);\n      }\n      return collections;\n    }\n    throw new InfiniteLoopError(\n      'CollectionIterator#toArray() can only be called if the iterator ' +\n        'is not infinite, or you provide and `end` argument, or you provide ' +\n        'a `take` argument.',\n    );\n  }\n  normalizeDateOutput(date) {\n    if (!date) return;\n    return DateAdapterBase$1.adapter.fromDateTime(date);\n  }\n  *collectionIterator() {\n    if (!this.startDate) return;\n    let iterator = this.occurrenceIterator();\n    let date = iterator.next().value;\n    if (!date) return;\n    // `period` === `periodStart` unless the granularity\n    // is `MONTHLY` and a `weekStart` param was provided. In this case,\n    // period holds a date === the first of the current month while\n    // periodStart holds a date === the beginning of the first week of the month\n    // (which might be in the the previous month). Read the\n    // `OccurrenceGenerator#collections()` description for more info.\n    let period = this.getPeriod(this.args.start);\n    let dates = [];\n    let index = 0;\n    while (date && (this.args.take === undefined || this.args.take > index)) {\n      while (date && date.isBeforeOrEqual(period.end)) {\n        dates.push(date);\n        date = iterator.next().value;\n      }\n      yield new Collection(\n        dates.map(date => this.normalizeDateOutput(date)),\n        this.granularity,\n        this.normalizeDateOutput(period.start),\n        this.normalizeDateOutput(period.end),\n      );\n      if (!date) return;\n      dates = [];\n      period = !this.args.skipEmptyPeriods\n        ? this.getPeriod(this.incrementPeriod(period.period))\n        : this.getPeriod(date);\n      // With these args, periods may overlap and the same date may show up\n      // in two periods. Because of this, we need to reset the iterator\n      // (otherwise it won't return a date it has already returned).\n      if (this.granularity === 'month' && this.weekStart) {\n        iterator = this.iterable._run({\n          start: period.start,\n          end: this.args.end,\n        });\n        date = iterator.next().value;\n      }\n      index++;\n    }\n  }\n  getPeriod(date) {\n    let start;\n    let end;\n    let period;\n    if (this.granularity === 'month' && this.weekStart) {\n      start = date.granularity('month').granularity('week', { weekStart: this.weekStart });\n      end = date.endGranularity('month').endGranularity('week', { weekStart: this.weekStart });\n      period = date.granularity('month');\n    } else {\n      start = date.granularity(this.granularity, { weekStart: this.weekStart });\n      end = date.endGranularity(this.granularity, { weekStart: this.weekStart });\n      period = start;\n    }\n    return { start, end, period };\n  }\n  incrementPeriod(date) {\n    return date.add(1, this.granularity);\n  }\n  occurrenceIterator() {\n    let start = this.args.start || this.iterable._run().next().value;\n    if (!start) return this.iterable._run(this.args);\n    start = this.getPeriod(start).start;\n    return this.iterable._run({\n      start,\n      end: this.args.end,\n    });\n  }\n}\nclass Operator extends OccurrenceGenerator {\n  constructor(streams, config) {\n    super(config);\n    this.streams = streams;\n    this.config = config;\n    this.timezone = config.timezone;\n    this.streams = streams.map(stream =>\n      stream instanceof Operator ? stream : stream.set('timezone', this.timezone),\n    );\n    this.isInfinite = this.calculateIsInfinite();\n    this.hasDuration = this.calculateHasDuration();\n  }\n  normalizeDateInput(date) {\n    if (!date) return;\n    return dateInputToDateTime(date, this.timezone);\n  }\n  normalizeRunOutput(date) {\n    return normalizeDateTimeTimezone$1(date, this.timezone);\n  }\n}\n\n/**\n * Simple class that lets us access the `value`, `runArgs`, and `done`\n * status of an OccurrenceGenerator iterator\n */\nclass IterableWrapper {\n  constructor(generator, runArgs) {\n    this.runArgs = runArgs;\n    this.stream = generator._run(this.runArgs);\n    this.next();\n  }\n  next(args) {\n    const { done, value } = this.stream.next(args);\n    this.done = typeof done === 'boolean' ? done : true;\n    this.value = value;\n    return { done, value };\n  }\n}\nfunction processYieldArgs(streams, options = {}, yieldArgs = {}) {\n  if (!yieldArgs.skipToDate || streams.length === 0) return;\n  // check for invalid `skipToDate` option\n  if (\n    options.reverse\n      ? streams.every(s => s.value.isBeforeOrEqual(yieldArgs.skipToDate))\n      : streams.every(s => s.value.isAfterOrEqual(yieldArgs.skipToDate))\n  ) {\n    throw new Error(\n      'A provided `skipToDate` option must be greater than the last yielded date ' +\n        '(or smaller, in the case of reverse iteration)',\n    );\n  }\n  for (const stream of streams) {\n    if (stream.done) continue; // no point in calling `next()`\n    if (\n      options.reverse\n        ? stream.value.isBeforeOrEqual(yieldArgs.skipToDate)\n        : stream.value.isAfterOrEqual(yieldArgs.skipToDate)\n    ) {\n      // This can happen there are two streams and one stream starts after the other finishes.\n      // Or, when iterating in reverse, when one stream ends before the other starts.\n      // In this case we don't want to call `next()` because it will throw an error.\n      // In both of these cases, calling `next()` won't do anything anyway.\n      continue;\n    }\n    stream.next(yieldArgs);\n  }\n}\n/** sorts ascending with completed iterables at the end */\nfunction streamsComparer(a, b) {\n  if (a.done && b.done) return 0;\n  if (a.done) return 1;\n  if (b.done) return -1;\n  if (a.value.isAfter(b.value)) return 1;\n  return -1;\n}\n/** sorts descending with completed iterables at the start */\nfunction streamsReverseComparer(a, b) {\n  if (a.done && b.done) return 0;\n  if (a.done) return -1;\n  if (b.done) return 1;\n  if (a.value.isAfter(b.value)) return -1;\n  return 1;\n}\nfunction selectNextIterable(streams, options = {}, yieldArgs = {}) {\n  processYieldArgs(streams, options, yieldArgs);\n  return streams\n    .sort(options.reverse ? streamsReverseComparer : streamsComparer)\n    .filter(s => !s.done)\n    .shift();\n}\nfunction selectLastIterable(streams, options = {}, yieldArgs = {}) {\n  processYieldArgs(streams, options, yieldArgs);\n  return streams\n    .sort(options.reverse ? streamsReverseComparer : streamsComparer)\n    .filter(s => !s.done)\n    .pop();\n}\n\n/**\n * An operator function which accepts a spread of occurrence generators\n * and adds their occurrences to the output.\n *\n * @param streams a spread of occurrence generators\n */\nfunction add(...streams) {\n  return options => new AddOperator(streams, options);\n}\nclass AddOperator extends Operator {\n  set(_, value) {\n    return new AddOperator(\n      this.streams.map(stream => stream.set('timezone', value)),\n      Object.assign(Object.assign({}, this.config), {\n        base: this.config.base && this.config.base.set('timezone', value),\n        timezone: value,\n      }),\n    );\n  }\n  *_run(args = {}) {\n    const wrappedStreams = this.streams.map(input => new IterableWrapper(input, args));\n    if (this.config.base) {\n      wrappedStreams.push(new IterableWrapper(this.config.base, args));\n    }\n    if (wrappedStreams.length === 0) return;\n    let stream = selectNextIterable(wrappedStreams, args);\n    while (stream && !stream.done) {\n      // yield the current stream's value\n      const yieldArgs = yield this.normalizeRunOutput(stream.value);\n      if (!(yieldArgs && yieldArgs.skipToDate)) {\n        // iterate the current stream\n        stream.next();\n      }\n      // select the next stream\n      stream = selectNextIterable(wrappedStreams, args, yieldArgs);\n    }\n  }\n  calculateIsInfinite() {\n    return (\n      (this.config.base && this.config.base.isInfinite) ||\n      this.streams.some(stream => stream.isInfinite)\n    );\n  }\n  calculateHasDuration() {\n    const streamsDuration = this.streams.every(stream => stream.hasDuration);\n    if (!this.config.base) return streamsDuration;\n    return this.config.base.hasDuration && streamsDuration;\n  }\n}\n\nclass Calendar extends OccurrenceGenerator {\n  /**\n   *\n   * Create a new Calendar object with the specified options.\n   *\n   * ### Options\n   *\n   * - **timezone**: The timezone that yielded occurrences should be *displayed* in.\n   *   Note, this one affects the *displayed* timezone of yielded occurrences.\n   *   For rules, occurrences are first found using the unmodified rule\n   *   config (including whatever timezone the `start` datetime is defined\n   *   in), and then converted to the timezone specified here before being\n   *   yielded. By default, the timezone is *local* time (`null`). So if you don't\n   *   want your rules to be displayed in local time, you must supply a\n   *   timezone argument.\n   * - **data**: arbitrary data you can associate with this Calendar. This\n   *   is the only mutable property of `Calendar` objects.\n   * - **maxDuration**: currently unused.\n   * - **schedules**: either an occurrence generator, or an array of occurrence generators, which should\n   *   be used to build up this Calendar's occurrences. The Calendar will display the union of occurrences\n   *   its schedules produce.\n   *\n   */\n  constructor(args = {}) {\n    super(args);\n    this.schedules = [];\n    this.data = args.data;\n    if (args.schedules) {\n      this.schedules = Array.isArray(args.schedules) ? args.schedules : [args.schedules];\n      this.schedules = this.schedules.map(schedule => schedule.set('timezone', this.timezone));\n    }\n    this.isInfinite = this.schedules.some(schedule => schedule.isInfinite);\n    this.hasDuration = this.schedules.every(schedule => schedule.hasDuration);\n  }\n  occurrences(args = {}) {\n    return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));\n  }\n  collections(args = {}) {\n    return new CollectionIterator(this, this.normalizeCollectionsArgs(args));\n  }\n  set(prop, value, options) {\n    if (prop === 'timezone') {\n      return new Calendar({\n        schedules: this.schedules.map(schedule => schedule.set(prop, value, options)),\n        data: this.data,\n        timezone: value,\n        maxDuration: this.maxDuration,\n      });\n    } else if (prop === 'schedules') {\n      return new Calendar({\n        schedules: Array.isArray(value) ? value : [value],\n        data: this.data,\n        timezone: this.timezone,\n        maxDuration: this.maxDuration,\n      });\n    }\n    throw new ArgumentError('Unknown value for `prop`: ' + `\"${prop}\"`);\n  }\n  *_run(args = {}) {\n    if (this.schedules.length === 0) return;\n    const count = args.take;\n    delete args.take;\n    let iterator;\n    if (this.schedules.length === 1) {\n      iterator = this.schedules[0]._run(args);\n    } else {\n      iterator = new AddOperator(this.schedules, {\n        timezone: this.timezone,\n      })._run(args);\n    }\n    let date = iterator.next().value;\n    let index = 0;\n    while (date && (count === undefined || count > index)) {\n      date = date.add(this, 'generator');\n      const yieldArgs = yield this.normalizeRunOutput(date);\n      date = iterator.next(yieldArgs).value;\n      index++;\n    }\n    return undefined;\n  }\n}\n\nclass Dates extends OccurrenceGenerator {\n  constructor(args = {}) {\n    super(args);\n    this.adapters = [];\n    this.isInfinite = false;\n    this.maxDuration = 0;\n    this.datetimes = [];\n    this.data = args.data;\n    if (args.dates) {\n      this.adapters = args.dates.map(date => {\n        let adapter = this.normalizeDateInputToAdapter(date);\n        if (args.duration && !adapter.duration) {\n          adapter = adapter.set('duration', args.duration);\n        }\n        return adapter.set('timezone', this.timezone);\n      });\n      this.datetimes = this.adapters.map(adapter => adapter.toDateTime());\n    }\n    this.hasDuration = this.datetimes.every(date => !!date.duration);\n    if (this.hasDuration) {\n      this.maxDuration = this.adapters.reduce(\n        (prev, curr) => (curr.duration > prev ? curr.duration : prev),\n        0,\n      );\n    }\n  }\n  get length() {\n    return this.adapters.length;\n  }\n  /** Returns the first occurrence or, if there are no occurrences, null. */\n  get firstDate() {\n    return this.adapters[0] || null;\n  }\n  /** Returns the last occurrence or, if there are no occurrences, null. */\n  get lastDate() {\n    return this.adapters[this.length - 1] || null;\n  }\n  occurrences(args = {}) {\n    return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));\n  }\n  collections(args = {}) {\n    return new CollectionIterator(this, this.normalizeCollectionsArgs(args));\n  }\n  add(value) {\n    return new Dates({\n      dates: [...this.adapters, value],\n      timezone: this.timezone,\n      data: this.data,\n    });\n  }\n  remove(value) {\n    const dates = this.adapters.slice();\n    const input = this.normalizeDateInputToAdapter(value);\n    const index = dates.findIndex(date => date.valueOf() === input.valueOf());\n    if (index >= 0) {\n      dates.splice(index, 1);\n    }\n    return new Dates({\n      dates,\n      timezone: this.timezone,\n      data: this.data,\n    });\n  }\n  set(prop, value, options = {}) {\n    let timezone = this.timezone;\n    let dates = this.adapters.slice();\n    if (prop === 'timezone') {\n      if (value === this.timezone) return this;\n      else if (options.keepLocalTime) {\n        dates = this.adapters.map(adapter => {\n          const json = adapter.toJSON();\n          json.timezone = value;\n          return this.dateAdapter.fromJSON(json);\n        });\n      }\n      timezone = value;\n    } else if (prop === 'dates') {\n      dates = value;\n    } else if (prop === 'duration') {\n      dates = dates.map(date => date.set('duration', value || 0));\n    } else {\n      throw new ArgumentError(\n        `Unexpected prop argument \"${prop}\". Accepted values are \"timezone\" or \"dates\"`,\n      );\n    }\n    return new Dates({\n      dates,\n      data: this.data,\n      timezone,\n    });\n  }\n  filter(fn) {\n    return new Dates({\n      dates: this.adapters.filter(fn),\n      data: this.data,\n      timezone: this.timezone,\n    });\n  }\n  *_run(args = {}) {\n    let dates = this.datetimes.sort(dateTimeSortComparer);\n    if (args.start) {\n      dates = dates.filter(date => date.isAfterOrEqual(args.start));\n    }\n    if (args.end) {\n      dates = dates.filter(date => date.isBeforeOrEqual(args.end));\n    }\n    if (args.reverse) {\n      dates = dates.slice().reverse();\n    }\n    if (args.take) {\n      dates = dates.slice(0, args.take);\n    }\n    const dateCache = dates.slice();\n    let date = dateCache.shift();\n    let yieldArgs;\n    while (date) {\n      if (\n        yieldArgs &&\n        yieldArgs.skipToDate &&\n        (args.reverse ? yieldArgs.skipToDate.isBefore(date) : yieldArgs.skipToDate.isAfter(date))\n      ) {\n        date = dateCache.shift();\n        continue;\n      }\n      date = date.add(this, 'generator');\n      yieldArgs = yield this.normalizeRunOutput(date);\n      // Here, we are matching the behavior of the RecurrenceRulesIterator\n      if (\n        yieldArgs &&\n        yieldArgs.skipToDate &&\n        (args.reverse\n          ? yieldArgs.skipToDate.isAfterOrEqual(date)\n          : yieldArgs.skipToDate.isBeforeOrEqual(date))\n      ) {\n        throw new Error(\n          'A provided `skipToDate` option must be greater than the last yielded date ' +\n            '(or smaller, in the case of reverse iteration)',\n        );\n      }\n      date = dateCache.shift();\n    }\n    return undefined;\n  }\n}\n\nclass InvalidDateAdapterError extends Error {}\nlet dateAdapterConfig;\nclass DateAdapterBase {\n  constructor(_date, options) {\n    this.duration = (options && options.duration) || 0;\n    this.generators = (options && options.generators && options.generators.slice()) || [];\n    if (!Number.isInteger(this.duration) || this.duration < 0) {\n      throw new InvalidDateAdapterError('duration must be a non-negative integer');\n    }\n  }\n  static set adapter(value) {\n    if (dateAdapterConfig) {\n      throw new Error(`\"${dateAdapterConfig.name}\" has already been configured.`);\n    }\n    dateAdapterConfig = value;\n  }\n  static get adapter() {\n    if (!dateAdapterConfig) {\n      throw new Error('No date adapter has been configured. See rSchedule docs.');\n    }\n    return dateAdapterConfig;\n  }\n  static isDate(_object) {\n    throw unimplementedError('isDate()');\n  }\n  static fromDate(_date, _options) {\n    throw unimplementedError('fromDate()');\n  }\n  static fromJSON(_json) {\n    throw unimplementedError('fromJSON()');\n  }\n  static fromDateTime(_datetime) {\n    throw unimplementedError('fromDateTime()');\n  }\n  toDateTime() {\n    const date = DateTime.fromJSON(\n      Object.assign(Object.assign({}, this.toJSON()), { generators: this.generators }),\n    );\n    return date;\n  }\n}\nDateAdapterBase.hasTimezoneSupport = false;\nfunction unimplementedError(name) {\n  return new Error(`You must implement the \"${name}\" method for this DateAdapter class`);\n}\nvar DateAdapter;\n(function(DateAdapter) {\n  DateAdapter.WEEKDAYS = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\n  DateAdapter.MILLISECONDS_IN_SECOND = 1000;\n  DateAdapter.MILLISECONDS_IN_MINUTE = DateAdapter.MILLISECONDS_IN_SECOND * 60;\n  DateAdapter.MILLISECONDS_IN_HOUR = DateAdapter.MILLISECONDS_IN_MINUTE * 60;\n  DateAdapter.MILLISECONDS_IN_DAY = DateAdapter.MILLISECONDS_IN_HOUR * 24;\n  DateAdapter.MILLISECONDS_IN_WEEK = DateAdapter.MILLISECONDS_IN_DAY * 7;\n})(DateAdapter || (DateAdapter = {}));\nclass InvalidDateTimeError extends Error {}\nclass DateTime {\n  constructor(date, timezone, duration, generators) {\n    this.date = new Date(date);\n    this.timezone = timezone || null;\n    this.duration = duration || 0;\n    this.generators = (generators && generators.slice()) || [];\n    if (!Number.isInteger(this.duration) || this.duration < 0) {\n      throw new InvalidDateTimeError('duration must be a non-negative integer');\n    }\n    this.assertIsValid();\n  }\n  // /**\n  //  * Similar to `Array.isArray()`, `isInstance()` provides a surefire method\n  //  * of determining if an object is a `DateTime` by checking against the\n  //  * global symbol registry.\n  //  */\n  // static isInstance(object: any): object is DateTime {\n  //   return !!(object && object[DATETIME_ID]);\n  // }\n  static fromJSON(json) {\n    const date = new Date(\n      Date.UTC(\n        json.year,\n        json.month - 1,\n        json.day,\n        json.hour,\n        json.minute,\n        json.second,\n        json.millisecond,\n      ),\n    );\n    return new DateTime(date, json.timezone, json.duration, json.generators);\n  }\n  static fromDateAdapter(adapter) {\n    return DateTime.fromJSON(\n      Object.assign(Object.assign({}, adapter.toJSON()), { generators: adapter.generators }),\n    );\n  }\n  /**\n   * Returns `undefined` if `duration` is `0`. Else returns\n   * the `end` date.\n   */\n  get end() {\n    if (!this.duration) return;\n    if (this._end) return this._end;\n    this._end = this.add(this.duration, 'millisecond');\n    return this._end;\n  }\n  // While we constrain the argument to be another DateAdapter in typescript\n  // we handle the case of someone passing in another type of object in javascript\n  isEqual(object) {\n    if (!object) {\n      return false;\n    }\n    assertSameTimeZone(this, object);\n    return this.valueOf() === object.valueOf();\n  }\n  isBefore(object) {\n    assertSameTimeZone(this, object);\n    return this.valueOf() < object.valueOf();\n  }\n  isBeforeOrEqual(object) {\n    assertSameTimeZone(this, object);\n    return this.valueOf() <= object.valueOf();\n  }\n  isAfter(object) {\n    assertSameTimeZone(this, object);\n    return this.valueOf() > object.valueOf();\n  }\n  isAfterOrEqual(object) {\n    assertSameTimeZone(this, object);\n    return this.valueOf() >= object.valueOf();\n  }\n  isOccurring(object) {\n    if (!this.duration) {\n      throw new Error('DateTime#isOccurring() is only applicable to DateTimes with durations');\n    }\n    assertSameTimeZone(this, object);\n    return (\n      object.isAfterOrEqual(this) && object.isBeforeOrEqual(this.add(this.duration, 'millisecond'))\n    );\n  }\n  add(amount, unit) {\n    switch (unit) {\n      case 'generator': {\n        const generators = this.generators.slice();\n        generators.unshift(amount);\n        return new DateTime(this.date, this.timezone, this.duration, generators);\n      }\n      case 'year':\n        return this.forkDateTime(addUTCYears(this.date, amount));\n      case 'month':\n        return this.forkDateTime(addUTCMonths(this.date, amount));\n      case 'week':\n        return this.forkDateTime(addUTCWeeks(this.date, amount));\n      case 'day':\n        return this.forkDateTime(addUTCDays(this.date, amount));\n      case 'hour':\n        return this.forkDateTime(addUTCHours(this.date, amount));\n      case 'minute':\n        return this.forkDateTime(addUTCMinutes(this.date, amount));\n      case 'second':\n        return this.forkDateTime(addUTCSeconds(this.date, amount));\n      case 'millisecond':\n        return this.forkDateTime(addUTCMilliseconds(this.date, amount));\n      default:\n        throw new Error('Invalid unit provided to `DateTime#add`');\n    }\n  }\n  subtract(amount, unit) {\n    switch (unit) {\n      case 'year':\n        return this.forkDateTime(subUTCYears(this.date, amount));\n      case 'month':\n        return this.forkDateTime(subUTCMonths(this.date, amount));\n      case 'week':\n        return this.forkDateTime(subUTCWeeks(this.date, amount));\n      case 'day':\n        return this.forkDateTime(subUTCDays(this.date, amount));\n      case 'hour':\n        return this.forkDateTime(subUTCHours(this.date, amount));\n      case 'minute':\n        return this.forkDateTime(subUTCMinutes(this.date, amount));\n      case 'second':\n        return this.forkDateTime(subUTCSeconds(this.date, amount));\n      case 'millisecond':\n        return this.forkDateTime(subUTCMilliseconds(this.date, amount));\n      default:\n        throw new Error('Invalid unit provided to `DateTime#subtract`');\n    }\n  }\n  get(unit) {\n    switch (unit) {\n      case 'year':\n        return this.date.getUTCFullYear();\n      case 'month':\n        return this.date.getUTCMonth() + 1;\n      case 'yearday':\n        return getUTCYearDay(this.date);\n      case 'weekday':\n        return DateAdapter.WEEKDAYS[this.date.getUTCDay()];\n      case 'day':\n        return this.date.getUTCDate();\n      case 'hour':\n        return this.date.getUTCHours();\n      case 'minute':\n        return this.date.getUTCMinutes();\n      case 'second':\n        return this.date.getUTCSeconds();\n      case 'millisecond':\n        return this.date.getUTCMilliseconds();\n      default:\n        throw new Error('Invalid unit provided to `DateTime#set`');\n    }\n  }\n  set(unit, value) {\n    if (unit === 'duration') {\n      return new DateTime(this.date, this.timezone, value, this.generators);\n    }\n    if (unit === 'generators') {\n      return new DateTime(this.date, this.timezone, this.duration, value);\n    }\n    let date = new Date(this.date);\n    switch (unit) {\n      case 'year':\n        date.setUTCFullYear(value);\n        break;\n      case 'month': {\n        // If the current day of the month\n        // is greater than days in the month we are moving to, we need to also\n        // set the day to the end of that month.\n        const length = monthLength(value, date.getUTCFullYear());\n        const day = date.getUTCDate();\n        if (day > length) {\n          date.setUTCDate(1);\n          date.setUTCMonth(value);\n          date = subUTCDays(date, 1);\n        } else {\n          date.setUTCMonth(value - 1);\n        }\n        break;\n      }\n      case 'day':\n        date.setUTCDate(value);\n        break;\n      case 'hour':\n        date.setUTCHours(value);\n        break;\n      case 'minute':\n        date.setUTCMinutes(value);\n        break;\n      case 'second':\n        date.setUTCSeconds(value);\n        break;\n      case 'millisecond':\n        date.setUTCMilliseconds(value);\n        break;\n      default:\n        throw new Error('Invalid unit provided to `DateTime#set`');\n    }\n    return this.forkDateTime(date);\n  }\n  granularity(granularity, opt = {}) {\n    let date = this.forkDateTime(this.date);\n    switch (granularity) {\n      case 'year':\n        date = date.set('month', 1);\n      case 'month':\n        date = date.set('day', 1);\n        break;\n      case 'week':\n        date = setDateToStartOfWeek(date, opt.weekStart);\n    }\n    switch (granularity) {\n      case 'year':\n      case 'month':\n      case 'week':\n      case 'day':\n        date = date.set('hour', 0);\n      case 'hour':\n        date = date.set('minute', 0);\n      case 'minute':\n        date = date.set('second', 0);\n      case 'second':\n        date = date.set('millisecond', 0);\n      case 'millisecond':\n        return date;\n      default:\n        throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);\n    }\n  }\n  endGranularity(granularity, opt = {}) {\n    let date = this.forkDateTime(this.date);\n    switch (granularity) {\n      case 'year':\n        date = date.set('month', 12);\n      case 'month':\n        date = date.set('day', monthLength(date.get('month'), date.get('year')));\n        break;\n      case 'week':\n        date = setDateToEndOfWeek(date, opt.weekStart);\n    }\n    switch (granularity) {\n      case 'year':\n      case 'month':\n      case 'week':\n      case 'day':\n        date = date.set('hour', 23);\n      case 'hour':\n        date = date.set('minute', 59);\n      case 'minute':\n        date = date.set('second', 59);\n      case 'second':\n        date = date.set('millisecond', 999);\n      case 'millisecond':\n        return date;\n      default:\n        throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);\n    }\n  }\n  toISOString() {\n    return this.date.toISOString();\n  }\n  toDateTime() {\n    return this;\n  }\n  toJSON() {\n    const json = {\n      timezone: this.timezone,\n      year: this.get('year'),\n      month: this.get('month'),\n      day: this.get('day'),\n      hour: this.get('hour'),\n      minute: this.get('minute'),\n      second: this.get('second'),\n      millisecond: this.get('millisecond'),\n    };\n    if (this.duration) {\n      json.duration = this.duration;\n    }\n    return json;\n  }\n  valueOf() {\n    return this.date.valueOf();\n  }\n  assertIsValid() {\n    if (isNaN(this.valueOf())) {\n      throw new InvalidDateTimeError('DateTime has invalid date.');\n    }\n    return true;\n  }\n  forkDateTime(date) {\n    return new DateTime(date, this.timezone, this.duration, this.generators);\n  }\n}\nfunction assertSameTimeZone(x, y) {\n  if (x.timezone !== y.timezone) {\n    throw new InvalidDateTimeError(\n      'Attempted to compare a datetime to another date in a different timezone: ' +\n        JSON.stringify(x) +\n        ' and ' +\n        JSON.stringify(y),\n    );\n  }\n  return true;\n}\nfunction setDateToStartOfWeek(date, wkst) {\n  const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));\n  return date.subtract(index, 'day');\n}\nfunction setDateToEndOfWeek(date, wkst) {\n  const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));\n  return date.add(6 - index, 'day');\n}\nfunction orderedWeekdays(wkst = 'SU') {\n  const wkdays = DateAdapter.WEEKDAYS.slice();\n  let index = wkdays.indexOf(wkst);\n  while (index !== 0) {\n    shiftArray(wkdays);\n    index--;\n  }\n  return wkdays;\n}\nfunction shiftArray(array, from = 'first') {\n  if (array.length === 0) {\n    return array;\n  } else if (from === 'first') {\n    array.push(array.shift());\n  } else {\n    array.unshift(array.pop());\n  }\n  return array;\n}\n/**\n * Returns the days in the given month.\n *\n * @param month base-1\n * @param year\n */\nfunction monthLength(month, year) {\n  const block = {\n    1: 31,\n    2: getDaysInFebruary(year),\n    3: 31,\n    4: 30,\n    5: 31,\n    6: 30,\n    7: 31,\n    8: 31,\n    9: 30,\n    10: 31,\n    11: 30,\n    12: 31,\n  };\n  return block[month];\n}\nfunction getDaysInFebruary(year) {\n  return isLeapYear(year) ? 29 : 28;\n}\n// taken from date-fn\nfunction isLeapYear(year) {\n  return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\nfunction getUTCYearDay(now) {\n  const start = new Date(Date.UTC(now.getUTCFullYear(), 0, 1));\n  const diff = now.valueOf() - start.valueOf();\n  return 1 + Math.floor(diff / DateAdapter.MILLISECONDS_IN_DAY);\n}\n/**\n * These functions are basically lifted from `date-fns`, but changed\n * to use the UTC date methods, which `date-fns` doesn't support.\n */\nfunction toInteger(input) {\n  if (input === null || input === true || input === false) {\n    return NaN;\n  }\n  const int = Number(input);\n  if (isNaN(int)) {\n    return int;\n  }\n  return int < 0 ? Math.ceil(int) : Math.floor(int);\n}\nfunction addMilliseconds(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError('2 arguments required, but only ' + arguments.length + ' present');\n  }\n  const timestamp = dirtyDate.valueOf();\n  const amount = toInteger(dirtyAmount);\n  return new Date(timestamp + amount);\n}\nfunction addUTCYears(date, input) {\n  const amount = toInteger(input);\n  return addUTCMonths(date, amount * 12);\n}\nfunction addUTCMonths(date, input) {\n  const amount = toInteger(input);\n  date = new Date(date);\n  const desiredMonth = date.getUTCMonth() + amount;\n  const dateWithDesiredMonth = new Date(0);\n  dateWithDesiredMonth.setUTCFullYear(date.getUTCFullYear(), desiredMonth, 1);\n  dateWithDesiredMonth.setUTCHours(0, 0, 0, 0);\n  const daysInMonth = monthLength(\n    dateWithDesiredMonth.getUTCMonth() + 1,\n    dateWithDesiredMonth.getUTCFullYear(),\n  );\n  // Set the last day of the new month\n  // if the original date was the last day of the longer month\n  date.setUTCMonth(desiredMonth, Math.min(daysInMonth, date.getUTCDate()));\n  return date;\n}\nfunction addUTCWeeks(date, input) {\n  const amount = toInteger(input);\n  const days = amount * 7;\n  return addUTCDays(date, days);\n}\nfunction addUTCDays(date, input) {\n  // by adding milliseconds rather than days, we supress the native Date object's automatic\n  // daylight savings time conversions which we don't want in UTC mode\n  return addUTCMilliseconds(date, toInteger(input) * DateAdapter.MILLISECONDS_IN_DAY);\n}\nfunction addUTCHours(date, input) {\n  const amount = toInteger(input);\n  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_HOUR);\n}\nfunction addUTCMinutes(date, input) {\n  const amount = toInteger(input);\n  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_MINUTE);\n}\nfunction addUTCSeconds(date, input) {\n  const amount = toInteger(input);\n  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_SECOND);\n}\nfunction addUTCMilliseconds(date, input) {\n  const amount = toInteger(input);\n  const timestamp = date.getTime();\n  return new Date(timestamp + amount);\n}\nfunction subUTCYears(date, amount) {\n  return addUTCYears(date, -amount);\n}\nfunction subUTCMonths(date, amount) {\n  return addUTCMonths(date, -amount);\n}\nfunction subUTCWeeks(date, amount) {\n  return addUTCWeeks(date, -amount);\n}\nfunction subUTCDays(date, amount) {\n  return addUTCDays(date, -amount);\n}\nfunction subUTCHours(date, amount) {\n  return addUTCHours(date, -amount);\n}\nfunction subUTCMinutes(date, amount) {\n  return addUTCMinutes(date, -amount);\n}\nfunction subUTCSeconds(date, amount) {\n  return addUTCSeconds(date, -amount);\n}\nfunction subUTCMilliseconds(date, amount) {\n  return addUTCMilliseconds(date, -amount);\n}\n\n// export function normalizeDateInput<T extends DateAdapter>(\n//   dateAdapter: DateAdapterConstructor<T>,\n//   input: DateInput<T>,\n//   timezone: string | null,\n// ): DateTime {\n//   if (input instanceof DateTime) {\n//     if (input.timezone !== timezone) {\n//       return dateAdapter\n//         .fromDateTime(input)\n//         .set('timezone', timezone)\n//         .toDateTime();\n//     }\n//     return input;\n//   }\n//   return input instanceof DateAdapter\n//     ? input.set('timezone', timezone).toDateTime()\n//     : new dateAdapter(input).toDateTime();\n// }\nfunction normalizeDateTimeTimezone(date, timezone) {\n  if (date.timezone !== timezone) {\n    return DateAdapterBase.adapter\n      .fromDateTime(date)\n      .set('timezone', timezone)\n      .toDateTime();\n  }\n  return date;\n}\n\nclass RuleBase extends OccurrenceGenerator {\n  constructor(recurrenceRules, config, options = {}) {\n    super(options);\n    this.recurrenceRules = recurrenceRules;\n    this.options = cloneRuleOptions(config);\n    this.normOptions = normalizeRuleOptions(this.recurrenceRules, this.options);\n    this.timezone =\n      options.timezone !== undefined ? options.timezone : this.normOptions.start.timezone;\n    this.data = options.data;\n    this.hasDuration = !!config.duration;\n    if (this.hasDuration) this.duration = config.duration;\n    this.isInfinite = this.normOptions.end === undefined && this.normOptions.count === undefined;\n  }\n  occurrences(args = {}) {\n    return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));\n  }\n  collections(args = {}) {\n    return new CollectionIterator(this, this.normalizeCollectionsArgs(args));\n  }\n  *_run(rawArgs = {}) {\n    const args = this.normalizeRunArgs(rawArgs);\n    const iterator = new RecurrenceRulesIterator(\n      recurrenceRulesReducer(this.recurrenceRules),\n      this.normOptions,\n      args,\n    );\n    let date = iterator.next().value;\n    let index = 0;\n    while (date && (args.take === undefined || index < args.take)) {\n      index++;\n      date = date.add(this, 'generator');\n      const yieldArgs = yield this.normalizeRunOutput(date);\n      if (yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate) {\n        // The RecurrenceRuleIterator might have a different timezone from the rule.\n        // Because of this, the yieldArgs will not properly be normalized by the\n        // OccurrenceIterator, so we need to do it here\n        date = iterator.next(\n          Object.assign(Object.assign({}, yieldArgs), {\n            skipToDate: normalizeDateTimeTimezone(yieldArgs.skipToDate, iterator.start.timezone),\n          }),\n        ).value;\n      } else {\n        // theoretically, the yieldArgs are undefined here\n        // maybe in the future there will be other yieldArg options though\n        date = iterator.next(yieldArgs).value;\n      }\n    }\n    return undefined;\n  }\n}\n\nclass Rule extends RuleBase {\n  /**\n   * Create a new Rule object with the specified rule config and options.\n   *\n   * ### Options\n   *\n   * - **timezone**: the timezone that yielded occurrences should be in. Note,\n   *   this does not change the rule config. Occurrences are first found using\n   *   the unmodified rule config, and then converted to the timezone specified\n   *   here before being yielded.\n   * - **data**: arbitrary data you can associate with this rule. This\n   *   is the only mutable property of `Rule` objects.\n   *\n   * ### Rule Config\n   *\n   * - #### frequency\n   *\n   *   The frequency rule part identifies the type of recurrence rule. Valid values\n   *   include `\"SECONDLY\"`, `\"MINUTELY\"`, `\"HOURLY\"`, `\"DAILY\"`, `\"WEEKLY\"`,\n   *   `\"MONTHLY\"`, or `\"YEARLY\"`.\n   *\n   * - #### start\n   *\n   *   The start of the rule (not necessarily the first occurrence).\n   *   Either a `DateAdapter` instance, date object, or `DateTime` object.\n   *   The type of date object depends on the `DateAdapter` class used for this\n   *   `Rule`.\n   *\n   * - #### end?\n   *\n   *   The end of the rule (not necessarily the last occurrence).\n   *   Either a `DateAdapter` instance, date object, or `DateTime` object.\n   *   The type of date object depends on the `DateAdapter` class used for this\n   *   `Rule`.\n   *\n   * - #### duration?\n   *\n   *   A length of time expressed in milliseconds.\n   *\n   * - #### interval?\n   *\n   *   The interval rule part contains a positive integer representing at\n   *   which intervals the recurrence rule repeats. The default value is\n   *   `1`, meaning every second for a SECONDLY rule, every minute for a\n   *   MINUTELY rule, every hour for an HOURLY rule, every day for a\n   *   DAILY rule, every week for a WEEKLY rule, every month for a\n   *   MONTHLY rule, and every year for a YEARLY rule. For example,\n   *   within a DAILY rule, a value of `8` means every eight days.\n   *\n   * - #### count?\n   *\n   *   The count rule part defines the number of occurrences at which to\n   *   range-bound the recurrence. `count` and `end` are both two different\n   *   ways of specifying how a recurrence completes.\n   *\n   * - #### weekStart?\n   *\n   *   The weekStart rule part specifies the day on which the workweek starts.\n   *   Valid values are `\"MO\"`, `\"TU\"`, `\"WE\"`, `\"TH\"`, `\"FR\"`, `\"SA\"`, and `\"SU\"`.\n   *   This is significant when a WEEKLY rule has an interval greater than 1,\n   *   and a `byDayOfWeek` rule part is specified. The\n   *   default value is `\"MO\"`.\n   *\n   * - #### bySecondOfMinute?\n   *\n   *   The bySecondOfMinute rule part expects an array of seconds\n   *   within a minute. Valid values are 0 to 60.\n   *\n   * - #### byMinuteOfHour?\n   *\n   *   The byMinuteOfHour rule part expects an array of minutes within an hour.\n   *   Valid values are 0 to 59.\n   *\n   * - #### byHourOfDay?\n   *\n   *   The byHourOfDay rule part expects an array of hours of the day.\n   *   Valid values are 0 to 23.\n   *\n   * - #### byDayOfWeek?\n   *\n   *   *note: the byDayOfWeek rule part is kinda complex. Blame the ICAL spec.*\n   *\n   *   The byDayOfWeek rule part expects an array. Each array entry can\n   *   be a day of the week (`\"SU\"`, `\"MO\"` , `\"TU\"`, `\"WE\"`, `\"TH\"`,\n   *   `\"FR\"`, `\"SA\"`). If the rule's `frequency` is either MONTHLY or YEARLY,\n   *   Any entry can also be a tuple where the first value of the tuple is a\n   *   day of the week and the second value is an positive/negative integer\n   *   (e.g. `[\"SU\", 1]`). In this case, the number indicates the nth occurrence of\n   *   the specified day within the MONTHLY or YEARLY rule.\n   *\n   *   The behavior of byDayOfWeek changes depending on the `frequency`\n   *   of the rule.\n   *\n   *   Within a MONTHLY rule, `[\"MO\", 1]` represents the first Monday\n   *   within the month, whereas `[\"MO\", -1]` represents the last Monday\n   *   of the month.\n   *\n   *   Within a YEARLY rule, the numeric value in a byDayOfWeek tuple entry\n   *   corresponds to an offset within the month when the byMonthOfYear rule part is\n   *   present, and corresponds to an offset within the year otherwise.\n   *\n   *   Regardless of rule `frequency`, if a byDayOfWeek entry is a string\n   *   (rather than a tuple), it means \"all of these days\" within the specified\n   *   frequency (e.g. within a MONTHLY rule, `\"MO\"` represents all Mondays within\n   *   the month).\n   *\n   * - #### byDayOfMonth?\n   *\n   *   The byDayOfMonth rule part expects an array of days\n   *   of the month. Valid values are 1 to 31 or -31 to -1.\n   *\n   *   For example, -10 represents the tenth to the last day of the month.\n   *   The byDayOfMonth rule part *must not* be specified when the rule's\n   *   `frequency` is set to WEEKLY.\n   *\n   * - #### byMonthOfYear?\n   *\n   *   The byMonthOfYear rule part expects an array of months\n   *   of the year. Valid values are 1 to 12.\n   *\n   */\n  constructor(config, options = {}) {\n    super(Rule.recurrenceRules, config, options);\n  }\n  set(prop, value, tzoptions = {}) {\n    let options = cloneRuleOptions(this.options);\n    let timezone = this.timezone;\n    if (prop === 'timezone') {\n      if (value === this.timezone && !tzoptions.keepLocalTime) return this;\n      else if (tzoptions.keepLocalTime) {\n        const json = this.normalizeDateInput(options.start).toJSON();\n        json.timezone = value;\n        const adapter = this.dateAdapter.fromJSON(json);\n        // prettier-ignore\n        options.start =\n                    options.start instanceof this.dateAdapter ? adapter :\n                        options.start instanceof DateTime$1 ? adapter.toDateTime() :\n                            adapter.date;\n      }\n      timezone = value;\n    } else if (prop === 'options') {\n      options = value;\n    } else {\n      options[prop] = value;\n    }\n    return new Rule(options, {\n      data: this.data,\n      maxDuration: this.maxDuration,\n      timezone,\n    });\n  }\n}\nRule.recurrenceRules = [];\n\nclass ScheduleBase extends OccurrenceGenerator {\n  /**\n   * Create a new Schedule object with the specified options.\n   *\n   * The order of precidence for rrules, rdates, exrules, and exdates is:\n   *\n   * 1. rrules are included\n   * 2. exrules are excluded\n   * 3. rdates are included\n   * 4. exdates are excluded\n   *\n   */\n  constructor(options) {\n    super(options);\n    this.data = options.data;\n  }\n  occurrences(args = {}) {\n    return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));\n  }\n  collections(args = {}) {\n    return new CollectionIterator(this, this.normalizeCollectionsArgs(args));\n  }\n  *_run(args = {}) {\n    const count = args.take;\n    delete args.take;\n    const iterator = this.occurrenceStream._run(args);\n    let date = iterator.next().value;\n    let index = 0;\n    while (date && (count === undefined || count > index)) {\n      date = date.add(this, 'generator');\n      const yieldArgs = yield this.normalizeRunOutput(date);\n      date = iterator.next(yieldArgs).value;\n      index++;\n    }\n    return undefined;\n  }\n}\n\n/**\n * An operator function which accepts a spread of occurrence generators\n * and removes their occurrences from the output.\n *\n * @param streams a spread of occurrence generators\n */\nfunction subtract(...streams) {\n  return options => new SubtractOperator(streams, options);\n}\nclass SubtractOperator extends Operator {\n  /** Not actually used but necessary for IRunnable interface */\n  set(_, value) {\n    return new SubtractOperator(\n      this.streams.map(stream => stream.set('timezone', value)),\n      Object.assign(Object.assign({}, this.config), {\n        base: this.config.base && this.config.base.set('timezone', value),\n        timezone: value,\n      }),\n    );\n  }\n  *_run(args = {}) {\n    if (!this.config.base) return;\n    const inclusion = new IterableWrapper(this.config.base, args);\n    const exclusion = new IterableWrapper(\n      new AddOperator(this.streams, {\n        timezone: this.config.timezone,\n      }),\n      args,\n    );\n    cycleStreams(inclusion, exclusion, args);\n    while (!inclusion.done) {\n      const yieldArgs = yield this.normalizeRunOutput(inclusion.value);\n      if (!(yieldArgs && yieldArgs.skipToDate)) {\n        inclusion.next();\n      }\n      cycleStreams(inclusion, exclusion, args, yieldArgs);\n    }\n  }\n  calculateIsInfinite() {\n    return !!(this.config.base && this.config.base.isInfinite);\n  }\n  calculateHasDuration() {\n    return !!(this.config.base && this.config.base.hasDuration);\n  }\n}\nfunction cycleStreams(inclusion, exclusion, options = {}, yieldArgs = {}) {\n  processYieldArgs([inclusion, exclusion], options, yieldArgs);\n  iterateExclusion(inclusion, exclusion, options);\n  while (!inclusion.done && !exclusion.done && inclusion.value.isEqual(exclusion.value)) {\n    inclusion.next();\n    iterateExclusion(inclusion, exclusion, options);\n  }\n}\nfunction iterateExclusion(inclusion, exclusion, options = {}) {\n  if (options.reverse) {\n    while (!exclusion.done && !inclusion.done && exclusion.value.isAfter(inclusion.value)) {\n      exclusion.next();\n    }\n    return;\n  }\n  while (!exclusion.done && !inclusion.done && exclusion.value.isBefore(inclusion.value)) {\n    exclusion.next();\n  }\n}\n\n/**\n * An operator function which deduplicates an occurrence stream. Occurrence\n * `duration` is currently ignored.\n */\nfunction unique() {\n  return options => new UniqueOperator([], options);\n}\nclass UniqueOperator extends Operator {\n  /** Not actually used but necessary for IRunnable interface */\n  set(_, value) {\n    return new UniqueOperator(\n      [],\n      Object.assign(Object.assign({}, this.config), {\n        base: this.config.base && this.config.base.set('timezone', value),\n        timezone: value,\n      }),\n    );\n  }\n  *_run(args = {}) {\n    if (!this.config.base) return;\n    const stream = new IterableWrapper(this.config.base, args);\n    while (!stream.done) {\n      const yieldArgs = yield this.normalizeRunOutput(stream.value);\n      const lastValue = stream.value;\n      // iterate the current stream\n      stream.next(yieldArgs);\n      while (\n        !(yieldArgs && yieldArgs.skipToDate) &&\n        !stream.done &&\n        stream.value.isEqual(lastValue)\n      ) {\n        stream.next();\n      }\n    }\n  }\n  calculateIsInfinite() {\n    return !!(this.config.base && this.config.base.isInfinite);\n  }\n  calculateHasDuration() {\n    return !!(this.config.base && this.config.base.hasDuration);\n  }\n}\n\nclass Schedule extends ScheduleBase {\n  /**\n   * Create a new Schedule object with the specified options.\n   *\n   * The order of precidence for rrules, rdates, exrules, and exdates is:\n   *\n   * 1. rrules are included\n   * 2. exrules are excluded\n   * 3. rdates are included\n   * 4. exdates are excluded\n   *\n   * ### Options\n   *\n   * - **timezone**: The timezone that yielded occurrences should be *displayed* in.\n   *   Note, this one affects the *displayed* timezone of yielded occurrences.\n   *   For rules, occurrences are first found using the unmodified rule\n   *   config (including whatever timezone the `start` datetime is defined\n   *   in), and then converted to the timezone specified here before being\n   *   yielded. By default, the timezone is *local* time (`null`). So if you don't\n   *   want your rules to be displayed in local time, you must supply a\n   *   timezone argument.\n   * - **data**: arbitrary data you can associate with this Schedule. This\n   *   is the only mutable property of `Schedule` objects.\n   * - **maxDuration**: currently unused.\n   * - **rrules**: rules specifying when occurrences happen. See the \"Rule Config\"\n   *   section below.\n   * - **rdates**: individual dates that should be _included_ in the schedule.\n   * - **exdates**: individual dates that should be _excluded_ from the schedule.\n   * - **exrules**: rules specifying when occurrences shouldn't happen. See the\n   *   \"Rule Config\" section below.\n   *\n   * ### Rule Config\n   *\n   * - #### frequency\n   *\n   *   The frequency rule part identifies the type of recurrence rule. Valid values\n   *   include `\"SECONDLY\"`, `\"MINUTELY\"`, `\"HOURLY\"`, `\"DAILY\"`, `\"WEEKLY\"`,\n   *   `\"MONTHLY\"`, or `\"YEARLY\"`.\n   *\n   * - #### start\n   *\n   *   The start of the rule (not necessarily the first occurrence).\n   *   Either a `DateAdapter` instance, date object, or `DateTime` object.\n   *   The type of date object depends on the `DateAdapter` class used for this\n   *   `Rule`.\n   *\n   * - #### end?\n   *\n   *   The end of the rule (not necessarily the last occurrence).\n   *   Either a `DateAdapter` instance, date object, or `DateTime` object.\n   *   The type of date object depends on the `DateAdapter` class used for this\n   *   `Rule`.\n   *\n   * - #### duration?\n   *\n   *   A length of time expressed in milliseconds.\n   *\n   * - #### interval?\n   *\n   *   The interval rule part contains a positive integer representing at\n   *   which intervals the recurrence rule repeats. The default value is\n   *   `1`, meaning every second for a SECONDLY rule, every minute for a\n   *   MINUTELY rule, every hour for an HOURLY rule, every day for a\n   *   DAILY rule, every week for a WEEKLY rule, every month for a\n   *   MONTHLY rule, and every year for a YEARLY rule. For example,\n   *   within a DAILY rule, a value of `8` means every eight days.\n   *\n   * - #### count?\n   *\n   *   The count rule part defines the number of occurrences at which to\n   *   range-bound the recurrence. `count` and `end` are both two different\n   *   ways of specifying how a recurrence completes.\n   *\n   * - #### weekStart?\n   *\n   *   The weekStart rule part specifies the day on which the workweek starts.\n   *   Valid values are `\"MO\"`, `\"TU\"`, `\"WE\"`, `\"TH\"`, `\"FR\"`, `\"SA\"`, and `\"SU\"`.\n   *   This is significant when a WEEKLY rule has an interval greater than 1,\n   *   and a `byDayOfWeek` rule part is specified. The\n   *   default value is `\"MO\"`.\n   *\n   * - #### bySecondOfMinute?\n   *\n   *   The bySecondOfMinute rule part expects an array of seconds\n   *   within a minute. Valid values are 0 to 60.\n   *\n   * - #### byMinuteOfHour?\n   *\n   *   The byMinuteOfHour rule part expects an array of minutes within an hour.\n   *   Valid values are 0 to 59.\n   *\n   * - #### byHourOfDay?\n   *\n   *   The byHourOfDay rule part expects an array of hours of the day.\n   *   Valid values are 0 to 23.\n   *\n   * - #### byDayOfWeek?\n   *\n   *   *note: the byDayOfWeek rule part is kinda complex. Blame the ICAL spec.*\n   *\n   *   The byDayOfWeek rule part expects an array. Each array entry can\n   *   be a day of the week (`\"SU\"`, `\"MO\"` , `\"TU\"`, `\"WE\"`, `\"TH\"`,\n   *   `\"FR\"`, `\"SA\"`). If the rule's `frequency` is either MONTHLY or YEARLY,\n   *   Any entry can also be a tuple where the first value of the tuple is a\n   *   day of the week and the second value is an positive/negative integer\n   *   (e.g. `[\"SU\", 1]`). In this case, the number indicates the nth occurrence of\n   *   the specified day within the MONTHLY or YEARLY rule.\n   *\n   *   The behavior of byDayOfWeek changes depending on the `frequency`\n   *   of the rule.\n   *\n   *   Within a MONTHLY rule, `[\"MO\", 1]` represents the first Monday\n   *   within the month, whereas `[\"MO\", -1]` represents the last Monday\n   *   of the month.\n   *\n   *   Within a YEARLY rule, the numeric value in a byDayOfWeek tuple entry\n   *   corresponds to an offset within the month when the byMonthOfYear rule part is\n   *   present, and corresponds to an offset within the year otherwise.\n   *\n   *   Regardless of rule `frequency`, if a byDayOfWeek entry is a string\n   *   (rather than a tuple), it means \"all of these days\" within the specified\n   *   frequency (e.g. within a MONTHLY rule, `\"MO\"` represents all Mondays within\n   *   the month).\n   *\n   * - #### byDayOfMonth?\n   *\n   *   The byDayOfMonth rule part expects an array of days\n   *   of the month. Valid values are 1 to 31 or -31 to -1.\n   *\n   *   For example, -10 represents the tenth to the last day of the month.\n   *   The byDayOfMonth rule part *must not* be specified when the rule's\n   *   `frequency` is set to WEEKLY.\n   *\n   * - #### byMonthOfYear?\n   *\n   *   The byMonthOfYear rule part expects an array of months\n   *   of the year. Valid values are 1 to 12.\n   *\n   */\n  constructor(options = {}) {\n    super(options);\n    this.rrules = [];\n    this.exrules = [];\n    for (const prop of ['rrules', 'exrules']) {\n      const arg = options[prop];\n      if (arg) {\n        this[prop] = arg.map(ruleArgs => {\n          if (ruleArgs instanceof Rule) {\n            return ruleArgs.set('timezone', this.timezone);\n          } else {\n            return new Rule(ruleArgs, {\n              timezone: this.timezone,\n            });\n          }\n        });\n      }\n    }\n    for (const prop of ['rdates', 'exdates']) {\n      const arg = options[prop];\n      if (arg) {\n        this[prop] =\n          arg instanceof Dates\n            ? arg.set('timezone', this.timezone)\n            : new Dates({\n                dates: arg,\n                timezone: this.timezone,\n              });\n      } else {\n        this[prop] = new Dates({\n          timezone: this.timezone,\n        });\n      }\n    }\n    this.hasDuration =\n      this.rrules.every(rule => rule.hasDuration) &&\n      this.exrules.every(rule => rule.hasDuration) &&\n      this.rdates.hasDuration &&\n      this.exdates.hasDuration;\n    this.isInfinite = this.rrules.some(rule => rule.isInfinite);\n    this.occurrenceStream = [\n      add(...this.rrules),\n      subtract(...this.exrules),\n      add(this.rdates),\n      subtract(this.exdates),\n      unique(),\n    ].reduce((prev, curr) => curr({ base: prev, timezone: this.timezone }), undefined);\n  }\n  add(prop, value) {\n    const rrules = this.rrules.slice();\n    const exrules = this.exrules.slice();\n    let rdates = this.rdates;\n    let exdates = this.exdates;\n    switch (prop) {\n      case 'rrule':\n        rrules.push(value);\n        break;\n      case 'exrule':\n        exrules.push(value);\n        break;\n      case 'rdate':\n        rdates = this.rdates.add(value);\n        break;\n      case 'exdate':\n        exdates = this.exdates.add(value);\n        break;\n    }\n    return new Schedule({\n      timezone: this.timezone,\n      data: this.data,\n      rrules,\n      exrules,\n      rdates,\n      exdates,\n    });\n  }\n  remove(prop, value) {\n    let rrules = this.rrules;\n    let exrules = this.exrules;\n    let rdates = this.rdates;\n    let exdates = this.exdates;\n    switch (prop) {\n      case 'rrule':\n        rrules = rrules.filter(rule => rule !== value);\n        break;\n      case 'exrule':\n        exrules = exrules.filter(rule => rule !== value);\n        break;\n      case 'rdate':\n        rdates = this.rdates.remove(value);\n        break;\n      case 'exdate':\n        exdates = this.exdates.remove(value);\n        break;\n    }\n    return new Schedule({\n      timezone: this.timezone,\n      data: this.data,\n      rrules,\n      exrules,\n      rdates,\n      exdates,\n    });\n  }\n  set(prop, value, options = {}) {\n    let timezone = this.timezone;\n    let rrules = this.rrules;\n    let exrules = this.exrules;\n    let rdates = this.rdates;\n    let exdates = this.exdates;\n    switch (prop) {\n      case 'timezone':\n        if (value === this.timezone && !options.keepLocalTime) return this;\n        else if (options.keepLocalTime) {\n          rrules = rrules.map(rule => rule.set('timezone', value, options));\n          exrules = exrules.map(rule => rule.set('timezone', value, options));\n          rdates = rdates.set('timezone', value, options);\n          exdates = exdates.set('timezone', value, options);\n        }\n        timezone = value;\n        break;\n      case 'rrules':\n        rrules = value;\n        break;\n      case 'exrules':\n        exrules = value;\n        break;\n      case 'rdates':\n        rdates = value;\n        break;\n      case 'exdates':\n        exdates = value;\n        break;\n    }\n    return new Schedule({\n      timezone,\n      data: this.data,\n      rrules,\n      exrules,\n      rdates,\n      exdates,\n    });\n  }\n}\n\n/**\n * An operator function, which takes a spread of occurrence generators and only\n * returns the dates which intersect every occurrence generator.\n *\n * Because it's possible for all the generators to never intersect,\n * and because the intersection operator can't detect this lack of intersection,\n * you must call `intersection()` with a `{maxFailedIterations: number}` argument.\n * For convenience, you can globally set `RScheduleConfig.defaultMaxFailedIterations`.\n * Without further information, I'd probably set `defaultMaxFailedIterations = 50`.\n *\n * The `maxFailedIterations` argument caps the number of iterations the operator will\n * run through without finding a single valid occurrence. If this number is reached, the operator will\n * stop iterating (preventing a possible infinite loop).\n *\n * - Note: `maxFailedIterations` caps the number of iterations which\n *   *fail to turn up a single valid occurrence*. Every time a valid occurrence is returned,\n *   the current iteration count is reset to 0.\n *\n */\nfunction intersection(args) {\n  return options => new IntersectionOperator(args, options);\n}\nclass IntersectionOperator extends Operator {\n  constructor(args, config) {\n    super(args.streams, config);\n    if (this.isInfinite) {\n      this.maxFailedIterations =\n        args.maxFailedIterations || IntersectionOperator.defaultMaxFailedIterations;\n      if (!this.maxFailedIterations) {\n        throw new ArgumentError(\n          'The IntersectionOperator must be provided ' +\n            'a `maxFailedIterations` argument when it is built from schedules of infinite length. ' +\n            'This argument is used to ensure that the IntersectionOperator does not enter ' +\n            'an infinite loop because the underlying schedules never intersect. ' +\n            'If the `maxFailedIterations` count is reached it will be assumed that ' +\n            'all valid occurrences have been found and iteration will end without error.' +\n            'Without additional information, \"50\" is probably a good ' +\n            '`maxFailedIterations` value. ' +\n            'If the schedules are not of infinite length, `maxFailedIterations` is ignored. ' +\n            'Note also that you can provide a `defaultMaxFailedIterations` number via ' +\n            'IntersectionOperator.defaultMaxFailedIterations.',\n        );\n      }\n    }\n  }\n  set(_, value) {\n    return new IntersectionOperator(\n      {\n        maxFailedIterations: this.maxFailedIterations,\n        streams: this.streams.map(stream => stream.set('timezone', value)),\n      },\n      Object.assign(Object.assign({}, this.config), {\n        base: this.config.base && this.config.base.set('timezone', value),\n        timezone: value,\n      }),\n    );\n  }\n  *_run(args = {}) {\n    const streams = this.streams.map(stream => new IterableWrapper(stream, args));\n    if (this.config.base) {\n      streams.push(new IterableWrapper(this.config.base, args));\n    }\n    if (streams.length === 0) return;\n    const hasEndDate = !!(!this.isInfinite || args.reverse || args.end);\n    if (\n      !cycleStreams$1(\n        streams,\n        undefined,\n        Object.assign(Object.assign({}, args), {\n          hasEndDate,\n          iteration: 0,\n          maxIterations: this.maxFailedIterations,\n        }),\n      )\n    ) {\n      return;\n    }\n    let stream = selectNextIterable(streams, args);\n    while (stream) {\n      const yieldArgs = yield this.normalizeRunOutput(stream.value);\n      const lastValidDate = stream.value;\n      if (!(yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate)) {\n        // iterate the current stream\n        stream.next();\n      }\n      if (\n        !cycleStreams$1(\n          streams,\n          lastValidDate,\n          Object.assign(Object.assign({}, args), {\n            hasEndDate,\n            iteration: 0,\n            maxIterations: this.maxFailedIterations,\n          }),\n          yieldArgs,\n        )\n      ) {\n        return;\n      }\n      // The call to `cycleStreams()`, above, has already called\n      // selectNextIterable with the `yieldArgs`\n      stream = selectNextIterable(streams, args);\n    }\n  }\n  calculateIsInfinite() {\n    // Note: Array#every() === true when length === 0\n    if (!this.config.base) {\n      if (this.streams.length === 0) return false;\n      return this.streams.every(stream => stream.isInfinite);\n    } else if (this.streams.length === 0) return this.config.base.isInfinite;\n    return this.config.base.isInfinite && this.streams.every(stream => stream.isInfinite);\n  }\n  calculateHasDuration() {\n    const streamsDuration = this.streams.every(stream => stream.hasDuration);\n    if (!this.config.base) return streamsDuration;\n    return this.config.base.hasDuration && streamsDuration;\n  }\n}\nfunction cycleStreams$1(streams, lastValidDate, options, yieldArgs) {\n  const next = selectNextIterable(streams, options, yieldArgs);\n  if (!next) return false;\n  if (lastValidDate && next.value.isEqual(lastValidDate)) return true;\n  if (streams.some(stream => stream.done)) return false;\n  if (streams.every(stream => stream.value.isEqual(next.value))) return true;\n  options.iteration++;\n  if (options.maxIterations && !options.hasEndDate && options.iteration > options.maxIterations) {\n    return false;\n  }\n  // Since not all of the streams are equal, we grab the last stream...\n  const last = selectLastIterable(streams, options);\n  // ...and skip all the other streams so they are equal or past the last one\n  streams.forEach(stream => {\n    // Because streams can have multiple, identical dates in a row,\n    // we don't want to `skipToDate` if the provided date is equal to the current date.\n    if (last.value.isEqual(stream.value)) return;\n    stream.next({ skipToDate: last.value });\n  });\n  // then we repeat\n  return cycleStreams$1(streams, lastValidDate, options);\n}\n\nclass DurationIterableWrapper extends IterableWrapper {\n  constructor(generator, runArgs) {\n    super(generator, runArgs);\n    this.workingValue = this.value;\n    this.next();\n  }\n}\nclass MergeDurationOperatorError extends Error {}\n/**\n * An operator function which takes an occurrence stream with\n * `hasDuration === true` and merges occurrences which have overlapping\n * start and end times.\n *\n * Because it's possible for all the occurrences in the stream to have\n * overlapping start and end times, you must provide a `maxDuration`\n * argument that represents the maximum possible duration for a single\n * occurrence. If this duration is exceeded, a `MergeDurationOperatorError`\n * will be thrown.\n *\n * - For your convenience, you can globally set a default\n *   `MergeDurationOperator#maxDuration` via\n *   `RScheduleConfig.MergeDurationOperator.defaultMaxDuration`.\n *\n * Usage example:\n *\n * ```typescript\n * const MILLISECONDS_IN_HOUR = 1000 * 60 * 60;\n *\n * const dates = new Dates({\n *   dates: [\n *     new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n *     new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 2 }),\n *     new StandardDateAdapter(new Date(2010, 10, 11, 14), { duration: MILLISECONDS_IN_HOUR * 2 }),\n *     new StandardDateAdapter(new Date(2010, 10, 12, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n *   ],\n *   dateAdpter: StandardDateAdapter,\n * }).pipe(\n *   mergeDuration({\n *     maxDuration: MILLISECONDS_IN_HOUR * 24\n *   })\n * )\n *\n * dates.occurrences().toArray() === [\n *   new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n *   new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 3 }),\n *   new StandardDateAdapter(new Date(2010, 10, 12, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n * ]\n * ```\n */\nfunction mergeDuration(args) {\n  return options => new MergeDurationOperator(args, options);\n}\nclass MergeDurationOperator extends Operator {\n  constructor(args, config) {\n    super([], config);\n    this.maxDuration = args.maxDuration;\n    if (config.base && !config.base.hasDuration) {\n      throw new ArgumentError(\n        'Base stream provided to MergeDurationOperator does not have an associated duration. ' +\n          'The MergeDurationOperator can only be used with streams which have a duration. ',\n      );\n    }\n  }\n  /** Not actually used but necessary for IRunnable interface */\n  set(_, value) {\n    return new MergeDurationOperator(\n      {\n        maxDuration: this.maxDuration,\n      },\n      Object.assign(Object.assign({}, this.config), {\n        base: this.config.base && this.config.base.set('timezone', value),\n        timezone: value,\n      }),\n    );\n  }\n  _run(args = {}) {\n    return args.reverse ? this.reverseRun(args) : this.forwardRun(args);\n  }\n  calculateIsInfinite() {\n    return !!(this.config.base && this.config.base.isInfinite);\n  }\n  calculateHasDuration() {\n    return true;\n  }\n  *forwardRun(args = {}) {\n    if (!this.config.base) return;\n    // We want to find occurrences that end after the provided\n    // `start` time even if they begin before the provided `start`\n    // time. Because of this, we must begin iterating `maxDuration`\n    // before the provided start time.\n    let checkFromStart = args.start;\n    if (args.start) {\n      checkFromStart = args.start.subtract(this.maxDuration, 'millisecond');\n    }\n    let checkFromEnd = args.end;\n    if (args.end) {\n      checkFromEnd = args.end.add(this.maxDuration, 'millisecond');\n    }\n    const stream = new DurationIterableWrapper(\n      this.config.base,\n      Object.assign(Object.assign({}, args), { start: checkFromStart, end: checkFromEnd }),\n    );\n    let yieldArgs;\n    // checking `stream.workingValue` because when `stream.done === true`\n    // `stream.workingValue` will not have been yielded yet\n    while (stream.workingValue) {\n      // TODO(@john.carroll.p): figure out how to handle `DateTime#generators` for merged `DateTimes`\n      while (!stream.done && stream.workingValue.end.isAfterOrEqual(stream.value)) {\n        if (stream.workingValue.duration > this.maxDuration) {\n          throw new MergeDurationOperatorError(\n            `MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` +\n              this.maxDuration,\n          );\n        }\n        if (stream.value.end.isAfter(stream.workingValue.end)) {\n          const diff = stream.value.end.valueOf() - stream.workingValue.end.valueOf();\n          stream.workingValue = stream.workingValue.set(\n            'duration',\n            stream.workingValue.duration + diff,\n          );\n        }\n        stream.next();\n      }\n      // check to make sure the occurrence we are about to yield ends after the\n      // provided start time.\n      if (args.start && stream.workingValue.end.isBefore(args.start)) {\n        stream.workingValue = stream.value;\n        stream.next();\n        continue;\n      }\n      // make sure the occurrence we are about to yield ends after the\n      // provided skipToDate\n      if (\n        (yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate) &&\n        stream.workingValue.end.isBefore(yieldArgs.skipToDate)\n      ) {\n        stream.workingValue = stream.value;\n        stream.next();\n        continue;\n      }\n      // make sure we are not after the user requested `end` time.\n      if (args.end && stream.workingValue && stream.workingValue.isAfter(args.end)) {\n        break;\n      }\n      if (stream.workingValue.duration > this.maxDuration) {\n        throw new MergeDurationOperatorError(\n          `MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` +\n            this.maxDuration,\n        );\n      }\n      yieldArgs = yield this.normalizeRunOutput(stream.workingValue);\n      if (\n        (yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate) &&\n        stream.workingValue.isAfterOrEqual(yieldArgs.skipToDate)\n      ) {\n        throw new Error(\n          'A provided `skipToDate` option must be greater than the last yielded date ' +\n            '(or smaller, in the case of reverse iteration)',\n        );\n      }\n      stream.workingValue = stream.value;\n      stream.next();\n    }\n  }\n  *reverseRun(args = {}) {\n    if (!this.config.base) return;\n    // We want to find occurrences that end after the provided\n    // `start` time even if they begin before the provided `start`\n    // time. Because of this, we must begin iterating `maxDuration`\n    // before the provided start time.\n    let checkFromStart = args.start;\n    if (args.start) {\n      checkFromStart = args.start.subtract(this.maxDuration, 'millisecond');\n    }\n    let checkFromEnd = args.end;\n    if (args.end) {\n      checkFromEnd = args.end.add(this.maxDuration, 'millisecond');\n    }\n    const stream = new DurationIterableWrapper(\n      this.config.base,\n      Object.assign(Object.assign({}, args), { start: checkFromStart, end: checkFromEnd }),\n    );\n    let yieldArgs;\n    // checking `stream.workingValue` because when `stream.done === true`\n    // `stream.workingValue` will not have been yielded yet\n    while (stream.workingValue) {\n      // TODO(@john.carroll.p): figure out how to handle `DateTime#generators` for merged `DateTimes`\n      while (!stream.done && stream.workingValue.isBeforeOrEqual(stream.value.end)) {\n        if (stream.workingValue.duration > this.maxDuration) {\n          throw new MergeDurationOperatorError(\n            `MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` +\n              this.maxDuration,\n          );\n        }\n        if (\n          stream.value.isBefore(stream.workingValue) ||\n          stream.value.end.isAfter(stream.workingValue.end)\n        ) {\n          if (stream.value.end.isAfter(stream.workingValue.end)) {\n            // `stream.workingValue` is a subset of `stream.value`\n            // so simply replace `stream.workingValue` with `stream.value`\n            stream.workingValue = stream.value;\n          } else {\n            const diff = stream.workingValue.valueOf() - stream.value.valueOf();\n            stream.workingValue = stream.value.set('duration', stream.workingValue.duration + diff);\n          }\n        }\n        stream.next();\n      }\n      // check to make sure the occurrence we are about to yield starts before the\n      // provided start time.\n      if (args.start && stream.workingValue.end.isBefore(args.start)) {\n        break;\n      }\n      if (\n        yieldArgs &&\n        yieldArgs.skipToDate &&\n        stream.workingValue.end.isBefore(yieldArgs.skipToDate)\n      ) {\n        stream.workingValue = stream.value;\n        stream.next();\n        continue;\n      }\n      // make sure we are not after the user requested `end` time.\n      if (args.end && stream.workingValue && stream.workingValue.isAfter(args.end)) {\n        stream.workingValue = stream.value;\n        stream.next();\n        continue;\n      }\n      if (stream.workingValue.duration > this.maxDuration) {\n        throw new MergeDurationOperatorError(\n          `MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` +\n            this.maxDuration,\n        );\n      }\n      yieldArgs = yield this.normalizeRunOutput(stream.workingValue);\n      if (\n        yieldArgs &&\n        yieldArgs.skipToDate &&\n        stream.workingValue.end.isBeforeOrEqual(yieldArgs.skipToDate)\n      ) {\n        throw new Error(\n          'A provided `skipToDate` option must be greater than the last yielded date ' +\n            '(or smaller, in the case of reverse iteration)',\n        );\n      }\n      stream.workingValue = stream.value;\n      stream.next();\n    }\n  }\n}\n\nclass SplitDurationOperatorError extends Error {}\n/**\n * An operator function which takes an occurrence stream with\n * `hasDuration === true` and passes occurrences through a splitting\n * function. One usecase for this operator is to dynamically break up\n * occurrences with a large duration into several smaller occurrences.\n *\n * You must provide a `maxDuration` argument that represents the\n * maximum possible duration for a single occurrence. If this\n * duration is exceeded, a `SplitDurationOperatorError` will be\n * thrown.\n *\n * - For your convenience, you can globally set a default\n *   `SplitDurationOperator#maxDuration` via\n *   `RScheduleConfig.SplitDurationOperator.defaultMaxDuration`.\n *\n * Usage example:\n *\n * ```typescript\n * const MILLISECONDS_IN_HOUR = 1000 * 60 * 60;\n *\n * const splitFn = (date: DateTime) => {\n *   if (date.duration > MILLISECONDS_IN_HOUR) {\n *     const diff = date.duration! / 2;\n *\n *     return [\n *       date.set('duration', diff),\n *       date.add(diff, 'millisecond').set('duration', diff),\n *     ];\n *   }\n *\n *   return [date];\n * };\n *\n * const dates = new Dates({\n *   dates: [\n *     new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n *     new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 2 }),\n *   ],\n *   dateAdpter: StandardDateAdapter,\n * }).pipe(\n *   splitDuration({\n *     splitFn,\n *     maxDuration: MILLISECONDS_IN_HOUR * 1\n *   })\n * )\n *\n * expect(dates.occurrences().toArray()).toEqual([\n *   new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n *   new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n *   new StandardDateAdapter(new Date(2010, 10, 11, 14), { duration: MILLISECONDS_IN_HOUR * 1 }),\n * ])\n * ```\n */\nfunction splitDuration(args) {\n  return options => new SplitDurationOperator(args, options);\n}\nclass SplitDurationOperator extends Operator {\n  constructor(args, config) {\n    super([], config);\n    this.splitFn = args.splitFn;\n    this.maxDuration = args.maxDuration;\n    if (config.base && !config.base.hasDuration) {\n      throw new ArgumentError(\n        'Base stream provided to SplitDurationOperator does not have an associated duration. ' +\n          'The SplitDurationOperator can only be used with streams which have a duration.',\n      );\n    }\n  }\n  /** Not actually used but necessary for IRunnable interface */\n  set(_, value) {\n    return new SplitDurationOperator(\n      {\n        maxDuration: this.maxDuration,\n        splitFn: this.splitFn,\n      },\n      Object.assign(Object.assign({}, this.config), {\n        base: this.config.base && this.config.base.set('timezone', value),\n        timezone: value,\n      }),\n    );\n  }\n  *_run(args = {}) {\n    if (!this.config.base) return;\n    const reverse = args.reverse || false;\n    // We want to find occurrences that end after the provided\n    // `start` time even if they begin before the provided `start`\n    // time. Because of this, we add `maxDuration` to\n    // the provided start time.\n    let checkFromStart = args.start;\n    if (args.start) {\n      checkFromStart = args.start.subtract(this.maxDuration, 'millisecond');\n    }\n    // same goes for `end` time as with `start` time.\n    let checkFromEnd = args.end;\n    if (args.end) {\n      checkFromEnd = args.end.add(this.maxDuration, 'millisecond');\n    }\n    const stream = new IterableWrapper(\n      this.config.base,\n      Object.assign(Object.assign({}, args), { start: checkFromStart, end: checkFromEnd }),\n    );\n    let yieldArgs;\n    const datesBucket = [];\n    while (!stream.done || (datesBucket[0] && datesBucket[0][0])) {\n      /**\n       * Example:\n       * 10am - 2pm -> 10am - 12pm, 12pm - 2pm\n       * 11am - 3pm -> 11am - 1pm, 1pm - 3pm\n       * 2pm - 4pm -> 2pm - 3pm, 3pm - 4pm\n       */\n      if (!(datesBucket[0] && datesBucket[0][0])) {\n        // we're out of dates\n        datesBucket.push(this.splitDate(stream.value, reverse));\n        stream.next();\n      }\n      while (\n        !stream.done &&\n        (reverse\n          ? datesBucket[0].some(date => date.isBeforeOrEqual(stream.value.end))\n          : datesBucket[0].some(date => date.isAfterOrEqual(stream.value)))\n      ) {\n        datesBucket.push(this.splitDate(stream.value, reverse));\n        stream.next();\n      }\n      let selectedDate = datesBucket[0] && datesBucket[0][0];\n      let bucketIndex = -1;\n      let selectedBucketIndex = 0;\n      let dateIndex = -1;\n      let selectedDateIndex = 0;\n      // find the next date as well as its location in the datesBucket\n      for (const bucket of datesBucket) {\n        bucketIndex++;\n        dateIndex = -1;\n        for (const date of bucket) {\n          dateIndex++;\n          let dateShouldComeNext;\n          if (reverse) {\n            dateShouldComeNext =\n              date.isAfter(selectedDate) ||\n              (date.isEqual(selectedDate) && date.duration > selectedDate.duration);\n          } else {\n            dateShouldComeNext =\n              date.isBefore(selectedDate) ||\n              (date.isEqual(selectedDate) && date.duration < selectedDate.duration);\n          }\n          if (dateShouldComeNext) {\n            selectedDate = date;\n            selectedBucketIndex = bucketIndex;\n            selectedDateIndex = dateIndex;\n            break;\n          }\n        }\n      }\n      datesBucket[selectedBucketIndex].splice(selectedDateIndex, 1);\n      if (datesBucket[selectedBucketIndex].length === 0) {\n        datesBucket.splice(selectedBucketIndex, 1);\n      }\n      // If we've been yieldedArgs from the last cycle, check to see\n      // that the selectedDate honors the `skipToDate` requirement\n      // if not, discard this selectedDate\n      if (\n        yieldArgs &&\n        yieldArgs.skipToDate &&\n        selectedDate &&\n        !datePastEnd(selectedDate, args) &&\n        !datePastSkipToDate(selectedDate, yieldArgs.skipToDate, args)\n      ) {\n        continue;\n      }\n      // because we subtracted `maxDuration` to the base iterator's start time,\n      // check to make sure the selectedDate we are about to yield should\n      // actually be yielded (it may be before the provided `start` time).\n      // If not, discard the selectedDate.\n      if (args.start && selectedDate.end.isBefore(args.start)) {\n        if (reverse) break;\n        continue;\n      }\n      // because we added `maxDuration` to the base iterator's end time,\n      // check to make sure the selectedDate we are about to yield should\n      // actually be yielded (it may be after the provided `end` time).\n      // If not, end iteration.\n      if (args.end && selectedDate.isAfter(args.end)) {\n        if (reverse) continue;\n        break;\n      }\n      if (selectedDate.duration > this.maxDuration) {\n        throw new SplitDurationOperatorError(\n          `SplitDurationOperatorError: Occurrence duration exceeded maxDuration of ` +\n            this.maxDuration,\n        );\n      }\n      yieldArgs = yield this.normalizeRunOutput(selectedDate);\n      if (\n        yieldArgs &&\n        yieldArgs.skipToDate &&\n        (args.reverse\n          ? selectedDate.isBeforeOrEqual(yieldArgs.skipToDate)\n          : selectedDate.isAfterOrEqual(yieldArgs.skipToDate))\n      ) {\n        throw new Error(\n          'A provided `skipToDate` option must be greater than the last yielded date ' +\n            '(or smaller, in the case of reverse iteration)',\n        );\n      }\n    }\n  }\n  calculateIsInfinite() {\n    return !!(this.config.base && this.config.base.isInfinite);\n  }\n  calculateHasDuration() {\n    return true;\n  }\n  splitDate(date, reverse) {\n    const dates = this.splitFn(date);\n    let valid;\n    if (dates.length === 0) {\n      valid = false;\n    } else if (dates.length === 1) {\n      valid = date.duration === dates[0].duration;\n    } else {\n      valid = date.duration === dates.reduce((prev, curr) => prev + curr.duration, 0);\n    }\n    if (!valid) {\n      throw new Error(\n        'The provided SplitDurationOperator split function ' +\n          'must return an array of DateTimes with length > 0 ' +\n          'where the total duration of the new dates equals the duration of ' +\n          'the original date.',\n      );\n    }\n    dates.sort(dateTimeSortComparer);\n    if (reverse) {\n      dates.reverse();\n    }\n    return dates;\n  }\n}\nfunction datePastEnd(date, options) {\n  return !!(options.reverse\n    ? options.start && date.isBefore(options.start)\n    : options.end && date.isAfter(options.end));\n}\nfunction datePastSkipToDate(date, skipToDate, options) {\n  return !!(options.reverse ? skipToDate.isAfterOrEqual(date) : skipToDate.isBeforeOrEqual(date));\n}\n\nexport {\n  AddOperator,\n  Calendar,\n  Collection,\n  CollectionIterator,\n  Dates,\n  IntersectionOperator,\n  MergeDurationOperator,\n  MergeDurationOperatorError,\n  OccurrenceGenerator,\n  OccurrenceIterator,\n  Operator,\n  Rule,\n  RuleBase,\n  Schedule,\n  ScheduleBase,\n  SplitDurationOperator,\n  SplitDurationOperatorError,\n  SubtractOperator,\n  UniqueOperator,\n  add,\n  intersection,\n  mergeDuration,\n  splitDuration,\n  subtract,\n  unique,\n};\n","class InvalidDateAdapterError extends Error {}\nlet dateAdapterConfig;\nclass DateAdapterBase {\n  constructor(_date, options) {\n    this.duration = (options && options.duration) || 0;\n    this.generators = (options && options.generators && options.generators.slice()) || [];\n    if (!Number.isInteger(this.duration) || this.duration < 0) {\n      throw new InvalidDateAdapterError('duration must be a non-negative integer');\n    }\n  }\n  static set adapter(value) {\n    if (dateAdapterConfig) {\n      throw new Error(`\"${dateAdapterConfig.name}\" has already been configured.`);\n    }\n    dateAdapterConfig = value;\n  }\n  static get adapter() {\n    if (!dateAdapterConfig) {\n      throw new Error('No date adapter has been configured. See rSchedule docs.');\n    }\n    return dateAdapterConfig;\n  }\n  static isDate(_object) {\n    throw unimplementedError('isDate()');\n  }\n  static fromDate(_date, _options) {\n    throw unimplementedError('fromDate()');\n  }\n  static fromJSON(_json) {\n    throw unimplementedError('fromJSON()');\n  }\n  static fromDateTime(_datetime) {\n    throw unimplementedError('fromDateTime()');\n  }\n  toDateTime() {\n    const date = DateTime.fromJSON(\n      Object.assign(Object.assign({}, this.toJSON()), { generators: this.generators }),\n    );\n    return date;\n  }\n}\nDateAdapterBase.hasTimezoneSupport = false;\nfunction unimplementedError(name) {\n  return new Error(`You must implement the \"${name}\" method for this DateAdapter class`);\n}\nvar DateAdapter;\n(function(DateAdapter) {\n  DateAdapter.WEEKDAYS = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\n  DateAdapter.MILLISECONDS_IN_SECOND = 1000;\n  DateAdapter.MILLISECONDS_IN_MINUTE = DateAdapter.MILLISECONDS_IN_SECOND * 60;\n  DateAdapter.MILLISECONDS_IN_HOUR = DateAdapter.MILLISECONDS_IN_MINUTE * 60;\n  DateAdapter.MILLISECONDS_IN_DAY = DateAdapter.MILLISECONDS_IN_HOUR * 24;\n  DateAdapter.MILLISECONDS_IN_WEEK = DateAdapter.MILLISECONDS_IN_DAY * 7;\n})(DateAdapter || (DateAdapter = {}));\nclass InvalidDateTimeError extends Error {}\nclass DateTime {\n  constructor(date, timezone, duration, generators) {\n    this.date = new Date(date);\n    this.timezone = timezone || null;\n    this.duration = duration || 0;\n    this.generators = (generators && generators.slice()) || [];\n    if (!Number.isInteger(this.duration) || this.duration < 0) {\n      throw new InvalidDateTimeError('duration must be a non-negative integer');\n    }\n    this.assertIsValid();\n  }\n  // /**\n  //  * Similar to `Array.isArray()`, `isInstance()` provides a surefire method\n  //  * of determining if an object is a `DateTime` by checking against the\n  //  * global symbol registry.\n  //  */\n  // static isInstance(object: any): object is DateTime {\n  //   return !!(object && object[DATETIME_ID]);\n  // }\n  static fromJSON(json) {\n    const date = new Date(\n      Date.UTC(\n        json.year,\n        json.month - 1,\n        json.day,\n        json.hour,\n        json.minute,\n        json.second,\n        json.millisecond,\n      ),\n    );\n    return new DateTime(date, json.timezone, json.duration, json.generators);\n  }\n  static fromDateAdapter(adapter) {\n    return DateTime.fromJSON(\n      Object.assign(Object.assign({}, adapter.toJSON()), { generators: adapter.generators }),\n    );\n  }\n  /**\n   * Returns `undefined` if `duration` is `0`. Else returns\n   * the `end` date.\n   */\n  get end() {\n    if (!this.duration) return;\n    if (this._end) return this._end;\n    this._end = this.add(this.duration, 'millisecond');\n    return this._end;\n  }\n  // While we constrain the argument to be another DateAdapter in typescript\n  // we handle the case of someone passing in another type of object in javascript\n  isEqual(object) {\n    if (!object) {\n      return false;\n    }\n    assertSameTimeZone(this, object);\n    return this.valueOf() === object.valueOf();\n  }\n  isBefore(object) {\n    assertSameTimeZone(this, object);\n    return this.valueOf() < object.valueOf();\n  }\n  isBeforeOrEqual(object) {\n    assertSameTimeZone(this, object);\n    return this.valueOf() <= object.valueOf();\n  }\n  isAfter(object) {\n    assertSameTimeZone(this, object);\n    return this.valueOf() > object.valueOf();\n  }\n  isAfterOrEqual(object) {\n    assertSameTimeZone(this, object);\n    return this.valueOf() >= object.valueOf();\n  }\n  isOccurring(object) {\n    if (!this.duration) {\n      throw new Error('DateTime#isOccurring() is only applicable to DateTimes with durations');\n    }\n    assertSameTimeZone(this, object);\n    return (\n      object.isAfterOrEqual(this) && object.isBeforeOrEqual(this.add(this.duration, 'millisecond'))\n    );\n  }\n  add(amount, unit) {\n    switch (unit) {\n      case 'generator': {\n        const generators = this.generators.slice();\n        generators.unshift(amount);\n        return new DateTime(this.date, this.timezone, this.duration, generators);\n      }\n      case 'year':\n        return this.forkDateTime(addUTCYears(this.date, amount));\n      case 'month':\n        return this.forkDateTime(addUTCMonths(this.date, amount));\n      case 'week':\n        return this.forkDateTime(addUTCWeeks(this.date, amount));\n      case 'day':\n        return this.forkDateTime(addUTCDays(this.date, amount));\n      case 'hour':\n        return this.forkDateTime(addUTCHours(this.date, amount));\n      case 'minute':\n        return this.forkDateTime(addUTCMinutes(this.date, amount));\n      case 'second':\n        return this.forkDateTime(addUTCSeconds(this.date, amount));\n      case 'millisecond':\n        return this.forkDateTime(addUTCMilliseconds(this.date, amount));\n      default:\n        throw new Error('Invalid unit provided to `DateTime#add`');\n    }\n  }\n  subtract(amount, unit) {\n    switch (unit) {\n      case 'year':\n        return this.forkDateTime(subUTCYears(this.date, amount));\n      case 'month':\n        return this.forkDateTime(subUTCMonths(this.date, amount));\n      case 'week':\n        return this.forkDateTime(subUTCWeeks(this.date, amount));\n      case 'day':\n        return this.forkDateTime(subUTCDays(this.date, amount));\n      case 'hour':\n        return this.forkDateTime(subUTCHours(this.date, amount));\n      case 'minute':\n        return this.forkDateTime(subUTCMinutes(this.date, amount));\n      case 'second':\n        return this.forkDateTime(subUTCSeconds(this.date, amount));\n      case 'millisecond':\n        return this.forkDateTime(subUTCMilliseconds(this.date, amount));\n      default:\n        throw new Error('Invalid unit provided to `DateTime#subtract`');\n    }\n  }\n  get(unit) {\n    switch (unit) {\n      case 'year':\n        return this.date.getUTCFullYear();\n      case 'month':\n        return this.date.getUTCMonth() + 1;\n      case 'yearday':\n        return getUTCYearDay(this.date);\n      case 'weekday':\n        return DateAdapter.WEEKDAYS[this.date.getUTCDay()];\n      case 'day':\n        return this.date.getUTCDate();\n      case 'hour':\n        return this.date.getUTCHours();\n      case 'minute':\n        return this.date.getUTCMinutes();\n      case 'second':\n        return this.date.getUTCSeconds();\n      case 'millisecond':\n        return this.date.getUTCMilliseconds();\n      default:\n        throw new Error('Invalid unit provided to `DateTime#set`');\n    }\n  }\n  set(unit, value) {\n    if (unit === 'duration') {\n      return new DateTime(this.date, this.timezone, value, this.generators);\n    }\n    if (unit === 'generators') {\n      return new DateTime(this.date, this.timezone, this.duration, value);\n    }\n    let date = new Date(this.date);\n    switch (unit) {\n      case 'year':\n        date.setUTCFullYear(value);\n        break;\n      case 'month': {\n        // If the current day of the month\n        // is greater than days in the month we are moving to, we need to also\n        // set the day to the end of that month.\n        const length = monthLength(value, date.getUTCFullYear());\n        const day = date.getUTCDate();\n        if (day > length) {\n          date.setUTCDate(1);\n          date.setUTCMonth(value);\n          date = subUTCDays(date, 1);\n        } else {\n          date.setUTCMonth(value - 1);\n        }\n        break;\n      }\n      case 'day':\n        date.setUTCDate(value);\n        break;\n      case 'hour':\n        date.setUTCHours(value);\n        break;\n      case 'minute':\n        date.setUTCMinutes(value);\n        break;\n      case 'second':\n        date.setUTCSeconds(value);\n        break;\n      case 'millisecond':\n        date.setUTCMilliseconds(value);\n        break;\n      default:\n        throw new Error('Invalid unit provided to `DateTime#set`');\n    }\n    return this.forkDateTime(date);\n  }\n  granularity(granularity, opt = {}) {\n    let date = this.forkDateTime(this.date);\n    switch (granularity) {\n      case 'year':\n        date = date.set('month', 1);\n      case 'month':\n        date = date.set('day', 1);\n        break;\n      case 'week':\n        date = setDateToStartOfWeek(date, opt.weekStart);\n    }\n    switch (granularity) {\n      case 'year':\n      case 'month':\n      case 'week':\n      case 'day':\n        date = date.set('hour', 0);\n      case 'hour':\n        date = date.set('minute', 0);\n      case 'minute':\n        date = date.set('second', 0);\n      case 'second':\n        date = date.set('millisecond', 0);\n      case 'millisecond':\n        return date;\n      default:\n        throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);\n    }\n  }\n  endGranularity(granularity, opt = {}) {\n    let date = this.forkDateTime(this.date);\n    switch (granularity) {\n      case 'year':\n        date = date.set('month', 12);\n      case 'month':\n        date = date.set('day', monthLength(date.get('month'), date.get('year')));\n        break;\n      case 'week':\n        date = setDateToEndOfWeek(date, opt.weekStart);\n    }\n    switch (granularity) {\n      case 'year':\n      case 'month':\n      case 'week':\n      case 'day':\n        date = date.set('hour', 23);\n      case 'hour':\n        date = date.set('minute', 59);\n      case 'minute':\n        date = date.set('second', 59);\n      case 'second':\n        date = date.set('millisecond', 999);\n      case 'millisecond':\n        return date;\n      default:\n        throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);\n    }\n  }\n  toISOString() {\n    return this.date.toISOString();\n  }\n  toDateTime() {\n    return this;\n  }\n  toJSON() {\n    const json = {\n      timezone: this.timezone,\n      year: this.get('year'),\n      month: this.get('month'),\n      day: this.get('day'),\n      hour: this.get('hour'),\n      minute: this.get('minute'),\n      second: this.get('second'),\n      millisecond: this.get('millisecond'),\n    };\n    if (this.duration) {\n      json.duration = this.duration;\n    }\n    return json;\n  }\n  valueOf() {\n    return this.date.valueOf();\n  }\n  assertIsValid() {\n    if (isNaN(this.valueOf())) {\n      throw new InvalidDateTimeError('DateTime has invalid date.');\n    }\n    return true;\n  }\n  forkDateTime(date) {\n    return new DateTime(date, this.timezone, this.duration, this.generators);\n  }\n}\nfunction assertSameTimeZone(x, y) {\n  if (x.timezone !== y.timezone) {\n    throw new InvalidDateTimeError(\n      'Attempted to compare a datetime to another date in a different timezone: ' +\n        JSON.stringify(x) +\n        ' and ' +\n        JSON.stringify(y),\n    );\n  }\n  return true;\n}\nfunction setDateToStartOfWeek(date, wkst) {\n  const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));\n  return date.subtract(index, 'day');\n}\nfunction setDateToEndOfWeek(date, wkst) {\n  const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));\n  return date.add(6 - index, 'day');\n}\nfunction dateTimeSortComparer(a, b) {\n  if (a.isAfter(b)) return 1;\n  if (a.isBefore(b)) return -1;\n  if (a.duration && b.duration) {\n    if (a.duration > b.duration) return 1;\n    if (a.duration < b.duration) return -1;\n  }\n  return 0;\n}\nfunction uniqDateTimes(dates) {\n  return Array.from(new Map(dates.map(date => [date.toISOString(), date])).values());\n}\nfunction orderedWeekdays(wkst = 'SU') {\n  const wkdays = DateAdapter.WEEKDAYS.slice();\n  let index = wkdays.indexOf(wkst);\n  while (index !== 0) {\n    shiftArray(wkdays);\n    index--;\n  }\n  return wkdays;\n}\nfunction shiftArray(array, from = 'first') {\n  if (array.length === 0) {\n    return array;\n  } else if (from === 'first') {\n    array.push(array.shift());\n  } else {\n    array.unshift(array.pop());\n  }\n  return array;\n}\nfunction getDifferenceBetweenWeekdays(x, y) {\n  if (x === y) return 0;\n  const result = DateAdapter.WEEKDAYS.indexOf(x) - DateAdapter.WEEKDAYS.indexOf(y);\n  return result > 0 ? 7 - result : Math.abs(result);\n}\n/**\n * Returns the days in the given month.\n *\n * @param month base-1\n * @param year\n */\nfunction monthLength(month, year) {\n  const block = {\n    1: 31,\n    2: getDaysInFebruary(year),\n    3: 31,\n    4: 30,\n    5: 31,\n    6: 30,\n    7: 31,\n    8: 31,\n    9: 30,\n    10: 31,\n    11: 30,\n    12: 31,\n  };\n  return block[month];\n}\nfunction getDaysInFebruary(year) {\n  return isLeapYear(year) ? 29 : 28;\n}\n// taken from date-fn\nfunction isLeapYear(year) {\n  return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\nfunction getDaysInYear(year) {\n  return isLeapYear(year) ? 366 : 365;\n}\nfunction getUTCYearDay(now) {\n  const start = new Date(Date.UTC(now.getUTCFullYear(), 0, 1));\n  const diff = now.valueOf() - start.valueOf();\n  return 1 + Math.floor(diff / DateAdapter.MILLISECONDS_IN_DAY);\n}\n/**\n * These functions are basically lifted from `date-fns`, but changed\n * to use the UTC date methods, which `date-fns` doesn't support.\n */\nfunction toInteger(input) {\n  if (input === null || input === true || input === false) {\n    return NaN;\n  }\n  const int = Number(input);\n  if (isNaN(int)) {\n    return int;\n  }\n  return int < 0 ? Math.ceil(int) : Math.floor(int);\n}\nfunction addMilliseconds(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError('2 arguments required, but only ' + arguments.length + ' present');\n  }\n  const timestamp = dirtyDate.valueOf();\n  const amount = toInteger(dirtyAmount);\n  return new Date(timestamp + amount);\n}\nfunction addUTCYears(date, input) {\n  const amount = toInteger(input);\n  return addUTCMonths(date, amount * 12);\n}\nfunction addUTCMonths(date, input) {\n  const amount = toInteger(input);\n  date = new Date(date);\n  const desiredMonth = date.getUTCMonth() + amount;\n  const dateWithDesiredMonth = new Date(0);\n  dateWithDesiredMonth.setUTCFullYear(date.getUTCFullYear(), desiredMonth, 1);\n  dateWithDesiredMonth.setUTCHours(0, 0, 0, 0);\n  const daysInMonth = monthLength(\n    dateWithDesiredMonth.getUTCMonth() + 1,\n    dateWithDesiredMonth.getUTCFullYear(),\n  );\n  // Set the last day of the new month\n  // if the original date was the last day of the longer month\n  date.setUTCMonth(desiredMonth, Math.min(daysInMonth, date.getUTCDate()));\n  return date;\n}\nfunction addUTCWeeks(date, input) {\n  const amount = toInteger(input);\n  const days = amount * 7;\n  return addUTCDays(date, days);\n}\nfunction addUTCDays(date, input) {\n  // by adding milliseconds rather than days, we supress the native Date object's automatic\n  // daylight savings time conversions which we don't want in UTC mode\n  return addUTCMilliseconds(date, toInteger(input) * DateAdapter.MILLISECONDS_IN_DAY);\n}\nfunction addUTCHours(date, input) {\n  const amount = toInteger(input);\n  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_HOUR);\n}\nfunction addUTCMinutes(date, input) {\n  const amount = toInteger(input);\n  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_MINUTE);\n}\nfunction addUTCSeconds(date, input) {\n  const amount = toInteger(input);\n  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_SECOND);\n}\nfunction addUTCMilliseconds(date, input) {\n  const amount = toInteger(input);\n  const timestamp = date.getTime();\n  return new Date(timestamp + amount);\n}\nfunction subUTCYears(date, amount) {\n  return addUTCYears(date, -amount);\n}\nfunction subUTCMonths(date, amount) {\n  return addUTCMonths(date, -amount);\n}\nfunction subUTCWeeks(date, amount) {\n  return addUTCWeeks(date, -amount);\n}\nfunction subUTCDays(date, amount) {\n  return addUTCDays(date, -amount);\n}\nfunction subUTCHours(date, amount) {\n  return addUTCHours(date, -amount);\n}\nfunction subUTCMinutes(date, amount) {\n  return addUTCMinutes(date, -amount);\n}\nfunction subUTCSeconds(date, amount) {\n  return addUTCSeconds(date, -amount);\n}\nfunction subUTCMilliseconds(date, amount) {\n  return addUTCMilliseconds(date, -amount);\n}\n\nclass ArgumentError extends Error {}\nclass InfiniteLoopError extends Error {}\nfunction numberSortComparer(a, b) {\n  if (a > b) {\n    return 1;\n  } else if (b > a) {\n    return -1;\n  } else {\n    return 0;\n  }\n}\nfunction freqToGranularity(freq) {\n  switch (freq) {\n    case 'YEARLY':\n      return 'year';\n    case 'MONTHLY':\n      return 'month';\n    case 'WEEKLY':\n      return 'week';\n    case 'DAILY':\n      return 'day';\n    case 'HOURLY':\n      return 'hour';\n    case 'MINUTELY':\n      return 'minute';\n    case 'SECONDLY':\n      return 'second';\n    case 'MILLISECONDLY':\n      return 'millisecond';\n    default:\n      throw new Error('unknown freq passed to freqToGranularity()');\n  }\n}\nfunction cloneJSON(json) {\n  return JSON.parse(JSON.stringify(json));\n}\nfunction dateInputToDateAdapter(date) {\n  // prettier-ignore\n  return date instanceof DateTime ? DateAdapterBase.adapter.fromDateTime(date) :\n        date instanceof DateAdapterBase ? date :\n            DateAdapterBase.adapter.fromDate(date);\n}\nfunction dateInputToDateTime(date, timezone) {\n  if (date instanceof DateTime) {\n    if (date.timezone !== timezone) {\n      return DateAdapterBase.adapter\n        .fromDateTime(date)\n        .set('timezone', timezone)\n        .toDateTime();\n    }\n    return date;\n  }\n  return date instanceof DateAdapterBase\n    ? date.set('timezone', timezone).toDateTime()\n    : DateAdapterBase.adapter\n        .fromDate(date)\n        .set('timezone', timezone)\n        .toDateTime();\n}\n// export function normalizeDateInput<T extends DateAdapter>(\n//   dateAdapter: DateAdapterConstructor<T>,\n//   input: DateInput<T>,\n//   timezone: string | null,\n// ): DateTime {\n//   if (input instanceof DateTime) {\n//     if (input.timezone !== timezone) {\n//       return dateAdapter\n//         .fromDateTime(input)\n//         .set('timezone', timezone)\n//         .toDateTime();\n//     }\n//     return input;\n//   }\n//   return input instanceof DateAdapter\n//     ? input.set('timezone', timezone).toDateTime()\n//     : new dateAdapter(input).toDateTime();\n// }\nfunction normalizeDateTimeTimezone(date, timezone) {\n  if (date.timezone !== timezone) {\n    return DateAdapterBase.adapter\n      .fromDateTime(date)\n      .set('timezone', timezone)\n      .toDateTime();\n  }\n  return date;\n}\n\nclass RuleOptionError extends Error {}\nfunction normalizeDefaultOptions(options) {\n  let start;\n  if (options.start instanceof DateTime) {\n    start = options.start;\n  } else if (options.start instanceof DateAdapterBase) {\n    start = options.start.toDateTime();\n  } else if (DateAdapterBase.adapter.isDate(options.start)) {\n    start = DateAdapterBase.adapter.fromDate(options.start).toDateTime();\n  } else {\n    throw new RuleOptionError(\n      '\"start\" must be either a `DateAdapter` instance or an instance of the ' +\n        'date a DateAdapter is wrapping (e.g. `StandardDateAdapter` wraps a `Date`)',\n    );\n  }\n  let end;\n  if (options.end) {\n    if (options.end instanceof DateTime) {\n      end = options.end;\n    } else if (options.end instanceof DateAdapterBase) {\n      end = options.end.toDateTime();\n    } else if (DateAdapterBase.adapter.isDate(options.end)) {\n      end = DateAdapterBase.adapter.fromDate(options.end).toDateTime();\n    } else {\n      throw new RuleOptionError(\n        '\"end\" must be either be `undefined`, a `DateAdapter` instance, or an instance of the ' +\n          'date a DateAdapter is wrapping (e.g. `StandardDateAdapter` wraps a `Date`)',\n      );\n    }\n  }\n  if (options.duration !== undefined) {\n    if (!Number.isInteger(options.duration)) {\n      throw new RuleOptionError('\"duration\" expects a whole number');\n    }\n    if (options.duration <= 0) {\n      throw new RuleOptionError('\"duration\" must be greater than 0');\n    }\n  }\n  if (options.count !== undefined) {\n    if (!Number.isInteger(options.count)) {\n      throw new RuleOptionError('\"count\" must be a whole number');\n    }\n    if (options.count < 0) {\n      throw new RuleOptionError('\"count\" must be greater than 0');\n    }\n  }\n  if (options.end !== undefined && options.count !== undefined) {\n    throw new RuleOptionError('\"end\" and \"count\" cannot both be present');\n  }\n  return {\n    start,\n    end,\n    count: options.count,\n    duration: options.duration,\n  };\n}\nfunction normalizeRuleOptions(recurrenceModules, options) {\n  const normOptions = normalizeDefaultOptions(options);\n  const startOptions = cloneJSON(options);\n  recurrenceModules.forEach(mod => {\n    mod.normalizeOptions(startOptions, normOptions);\n  });\n  Object.keys(normOptions).forEach(key => {\n    if (normOptions[key] === undefined) {\n      delete normOptions[key];\n    }\n  });\n  return normOptions;\n}\nfunction cloneRuleOptions(options) {\n  const obj = cloneJSON(options);\n  obj.start = options.start;\n  if (options.end) obj.end = options.end;\n  return obj;\n}\n\nclass RecurrenceRuleError extends Error {}\nclass ValidDateTime {\n  constructor(date) {\n    this.date = date;\n  }\n}\nclass InvalidDateTime {\n  constructor(date) {\n    this.date = date;\n  }\n}\nfunction recurrenceRulesReducer(rules) {\n  return iterator =>\n    rules.reduce((prev, curr) => {\n      const rule = curr.get(iterator);\n      if (rule) prev.push(rule);\n      return prev;\n    }, []);\n}\n\nclass RecurrenceRulesIterator {\n  constructor(recurrenceRules, options, args) {\n    this.options = options;\n    this.args = args;\n    this.rules = [];\n    this.iterator =\n      // prettier-ignore\n      this.options.count === undefined ? this.iterate() :\n            this.args.reverse ? this.iterateWithReverseCount() :\n                this.iterateWithCount();\n    this.options = Object.assign(Object.assign({}, cloneJSON(options)), {\n      start: options.start,\n      end: options.end,\n    });\n    this.reverse = (this.options.count === undefined && args.reverse) || false;\n    const { start, end } = this.normalizeDateTimeArgs(args);\n    if (options.count !== undefined) {\n      this.start = options.start;\n    } else if (start && options.start) {\n      this.start = start.isAfterOrEqual(options.start) ? start : options.start;\n    } else {\n      this.start = start || options.start;\n    }\n    if (end && options.end) {\n      this.end = end.isBeforeOrEqual(options.end) ? end : options.end;\n    } else {\n      this.end = end || options.end;\n    }\n    if (this.args.reverse && !(options.count !== undefined || this.end)) {\n      throw new Error(\n        'When iterating in reverse, the rule must have an `end` or `count` ' +\n          'property or you must provide an `end` argument.',\n      );\n    }\n    this.isInfinite = !this.end && this.options.count === undefined;\n    this.hasDuration = !!this.options.duration;\n    this.rules = Array.isArray(recurrenceRules) ? recurrenceRules : recurrenceRules(this);\n  }\n  [Symbol.iterator]() {\n    return this.iterator;\n  }\n  next(args) {\n    return this.iterator.next(args);\n  }\n  /**\n   * In the pipe controller, we have an extra level of indirection with\n   * the `run()` and `iterate()` methods. The `iterate()` method is the\n   * method which actually runs the logic in the pipes. If we didn't\n   * need to account for the `count` property of a rule, we would *only*\n   * need the iterate method... so much simpler. But we do need to account\n   * for rules with a `count` property.\n   *\n   * Rules with a `count` property need to begin iteration at the beginning\n   * because the `count` is always from the rule's start time. So if someone\n   * passes in a new start time as an argument to a rule with `count`, we\n   * need to secretly iterate from the beginning, tracking the number of\n   * iterations, and then only start yielding dates when we reach the section\n   * the user cares about (or, if we hit our `count` quota, cancel iterating).\n   *\n   * Additionally, we need to handle iterating in reverse. In this case, we build\n   * up a cache of dates between the rule's start time and the reverse iteration\n   * start date. Once we hit the reverse iteration start date, we start\n   * yielding dates in the cache, in reverse order.\n   *\n   * In general, I imagine the count number, if used, will be small. But a large\n   * count will definitely have a negative performance affect. I don't think\n   * there's anything to be done about this.\n   */\n  *iterateWithReverseCount() {\n    const dates = Array.from(this.iterateWithCount()).reverse();\n    let yieldArgs;\n    const dateCache = dates.slice();\n    let date = dateCache.shift();\n    while (date) {\n      if (yieldArgs && yieldArgs.skipToDate && date.isAfter(yieldArgs.skipToDate)) {\n        date = dateCache.shift();\n        continue;\n      }\n      yieldArgs = yield date;\n      if (yieldArgs && yieldArgs.skipToDate && yieldArgs.skipToDate.isAfterOrEqual(date)) {\n        throw new Error(\n          'A provided `skipToDate` option must be greater than the last yielded date ' +\n            '(or smaller, in the case of reverse iteration)',\n        );\n      }\n      date = dateCache.shift();\n    }\n    return undefined;\n  }\n  *iterateWithCount() {\n    if (this.options.count === 0) return;\n    const iterable = this.iterate();\n    const start = this.args.start || this.start;\n    let date = iterable.next().value;\n    let index = 1;\n    let yieldArgs;\n    while (date && index <= this.options.count) {\n      index++;\n      if (date.isBefore(start)) {\n        date = iterable.next().value;\n        continue;\n      }\n      if (yieldArgs && yieldArgs.skipToDate && date.isBefore(yieldArgs.skipToDate)) {\n        date = iterable.next().value;\n        continue;\n      }\n      yieldArgs = yield date;\n      if (yieldArgs && yieldArgs.skipToDate && yieldArgs.skipToDate.isBeforeOrEqual(date)) {\n        throw new Error(\n          'A provided `skipToDate` option must be greater than the last yielded date ' +\n            '(or smaller, in the case of reverse iteration)',\n        );\n      }\n      date = iterable.next().value;\n    }\n    return undefined;\n  }\n  *iterate() {\n    let startingDate = this.start;\n    if (this.reverse) startingDate = this.end;\n    let date = this.nextDate(startingDate);\n    while (date) {\n      const args = yield this.normalizeRunOutput(date);\n      if (args && args.skipToDate) {\n        if (\n          this.reverse\n            ? args.skipToDate.isAfterOrEqual(date)\n            : args.skipToDate.isBeforeOrEqual(date)\n        ) {\n          // We cannot consistently skip backwards because after an iterator is \"done\"\n          // it always returns undefined and you cannot reset it. Theoretically, it would be\n          // fine to skip backwards if the iterator wasn't already \"done\", but this\n          // would be prone to user error so we simply disallow skipping backwards altogether.\n          throw new Error(\n            'A provided `skipToDate` option must be greater than the last yielded date ' +\n              '(or smaller, in the case of reverse iteration)',\n          );\n        }\n        date = this.nextDate(args.skipToDate);\n      } else {\n        date = this.nextDate(\n          this.reverse ? date.subtract(1, 'millisecond') : date.add(1, 'millisecond'),\n        );\n      }\n    }\n    return undefined;\n  }\n  /**\n   * Loops through the recurrence rules until a valid date is found.\n   */\n  nextDate(start) {\n    let result = this.runRules(start.set('generators', []));\n    if (this.isDatePastEnd(result.date)) return null;\n    let index = 0;\n    while (result instanceof InvalidDateTime && index < 50) {\n      result = this.runRules(result.date);\n      if (this.isDatePastEnd(result.date)) return null;\n      index++;\n    }\n    if (result instanceof InvalidDateTime) {\n      throw new RecurrenceRuleError(\n        `Failed to find a matching occurrence in ${index} iterations. ` +\n          `Last iterated date: \"${result.date.toISOString()}\"`,\n      );\n    }\n    if (this.reverse ? start.isBefore(result.date) : start.isAfter(result.date)) {\n      throw new RecurrenceRuleError(\n        'An error occurred in a recurrence rule. If this happened using ' +\n          'the rSchedule provided recurrence rules, you should ' +\n          'open an issue in the rSchedule repo. The maintainer is going to ' +\n          'want to know how to recreate the error.',\n      );\n    }\n    return result.date;\n  }\n  /**\n   * Performs one run of the recurrence rules and returns the result.\n   * It's a slightly optimized reducer function.\n   */\n  runRules(start) {\n    let result = new ValidDateTime(start);\n    for (const rule of this.rules) {\n      if (result instanceof InvalidDateTime) {\n        return result;\n      }\n      result = rule.run(result.date);\n    }\n    return result;\n  }\n  isDatePastEnd(date) {\n    return this.reverse ? date.isBefore(this.start) : this.end && date.isAfter(this.end);\n  }\n  normalizeRunOutput(date) {\n    return this.hasDuration ? date.set('duration', this.options.duration) : date;\n  }\n  normalizeDateTimeArgs(args) {\n    return {\n      start: args.start && normalizeDateTimeTimezone(args.start, this.options.start.timezone),\n      end: args.end && normalizeDateTimeTimezone(args.end, this.options.start.timezone),\n    };\n  }\n}\n\nexport {\n  ArgumentError,\n  DateAdapter,\n  DateAdapterBase,\n  DateTime,\n  InfiniteLoopError,\n  InvalidDateAdapterError,\n  InvalidDateTime,\n  InvalidDateTimeError,\n  RecurrenceRuleError,\n  RecurrenceRulesIterator,\n  RuleOptionError,\n  ValidDateTime,\n  cloneJSON,\n  cloneRuleOptions,\n  dateInputToDateAdapter,\n  dateInputToDateTime,\n  dateTimeSortComparer,\n  freqToGranularity,\n  getDaysInYear,\n  getDifferenceBetweenWeekdays,\n  isLeapYear,\n  normalizeDateTimeTimezone,\n  normalizeRuleOptions,\n  numberSortComparer,\n  orderedWeekdays,\n  recurrenceRulesReducer,\n  uniqDateTimes,\n};\n","import {\n  freqToGranularity,\n  ValidDateTime,\n  InvalidDateTime,\n  DateAdapter,\n  RuleOptionError,\n  numberSortComparer,\n  getDifferenceBetweenWeekdays,\n  RecurrenceRuleError,\n  uniqDateTimes,\n  dateTimeSortComparer,\n} from '@rschedule/core';\n\nclass RecurrenceRule {\n  constructor(processor) {\n    this.processor = processor;\n    this.start = processor.start;\n    this.end = processor.end;\n    this.options = processor.options;\n  }\n}\n\nclass FrequencyRule extends RecurrenceRule {\n  constructor(processor, initDate) {\n    super(processor);\n    this.initDate = initDate;\n    this.intervalUnit = freqToGranularity(this.options.frequency);\n    this.firstIntervalStartDate = this.normalizedStartDate(this.options.start);\n    this.intervalStartDate = this.firstIntervalStartDate;\n    this.intervalEndDate = this.normalizedEndDate(this.firstIntervalStartDate);\n    this.skipToInterval(this.initDate);\n  }\n  run(date) {\n    return this.validateDate(new ValidDateTime(date));\n  }\n  validateDate(arg) {\n    const { date } = arg;\n    if (arg instanceof ValidDateTime && this.dateIsWithinInterval(date)) {\n      return arg;\n    }\n    this.skipToInterval(date);\n    return new InvalidDateTime(\n      // if the interval is 1, date will always be within the interval\n      this.dateIsWithinInterval(date) ? date : this.setToCurrentInterval(),\n    );\n  }\n  setToCurrentInterval() {\n    return this.intervalStartDate;\n  }\n  normalizedStartDate(date) {\n    if (this.options.frequency === 'WEEKLY') {\n      return date.granularity('week', { weekStart: this.options.weekStart });\n    }\n    return date.granularity(this.intervalUnit);\n  }\n  normalizedEndDate(start) {\n    switch (this.options.frequency) {\n      case 'YEARLY':\n        return start.add(1, 'year');\n      case 'MONTHLY':\n        return start.add(1, 'month');\n      case 'WEEKLY':\n        return start.add(1, 'week');\n      case 'DAILY':\n        return start.add(1, 'day');\n      case 'HOURLY':\n        return start.add(1, 'hour');\n      case 'MINUTELY':\n        return start.add(1, 'minute');\n      case 'SECONDLY':\n        return start.add(1, 'second');\n      case 'MILLISECONDLY':\n        return start.add(1, 'millisecond');\n      default:\n        throw new Error(`Unknown frequency ${this.options.frequency}`);\n    }\n  }\n  skipToInterval(date) {\n    const amount = this.intervalDifference(date);\n    this.intervalStartDate = this.firstIntervalStartDate.add(amount, this.intervalUnit);\n    this.intervalEndDate = this.normalizedEndDate(this.intervalStartDate);\n  }\n  dateIsWithinInterval(date) {\n    return this.intervalStartDate.isBeforeOrEqual(date) && this.intervalEndDate.isAfter(date);\n  }\n  intervalDifference(date) {\n    return intervalDifferenceBetweenDates({\n      first: this.firstIntervalStartDate,\n      second: date,\n      unit: this.intervalUnit,\n      interval: this.options.interval,\n      weekStart: this.options.weekStart,\n      direction: 'after',\n    });\n  }\n}\n/**\n * Given the frequency (unit) and interval, this function finds\n * how many jumps forward the first date needs in order to equal\n * or exceed the second date.\n *\n * For example:\n *\n * 1. Unit is daily and interval is 1. The second date is 3 days\n *    after the first. This will return 3.\n * 2. Unit is yearly and interval is 1. The second date is 3 days\n *    after the first. This will return 0.\n * 3. Unit is yearly and interval is 3. The second date is 4 years\n *    after the first. This will return 6.\n */\nfunction intervalDifferenceBetweenDates({ first, second, unit, interval, weekStart, direction }) {\n  let difference = (() => {\n    let intervalDuration;\n    let months;\n    switch (unit) {\n      case 'year':\n        months = (second.get('year') - first.get('year')) * 12;\n        months = months + second.get('month') - first.get('month');\n        return Math.floor(months / 12);\n      case 'month':\n        months = (second.get('year') - first.get('year')) * 12;\n        months = months + second.get('month') - first.get('month');\n        return months;\n      case 'week':\n        first = first.granularity('week', { weekStart });\n        intervalDuration = DateAdapter.MILLISECONDS_IN_WEEK;\n        break;\n      case 'day':\n        intervalDuration = DateAdapter.MILLISECONDS_IN_DAY;\n        break;\n      case 'hour':\n        intervalDuration = DateAdapter.MILLISECONDS_IN_HOUR;\n        break;\n      case 'minute':\n        intervalDuration = DateAdapter.MILLISECONDS_IN_MINUTE;\n        break;\n      case 'second':\n        intervalDuration = DateAdapter.MILLISECONDS_IN_SECOND;\n        break;\n      case 'millisecond':\n        intervalDuration = 1;\n        break;\n      default:\n        throw new Error('Unexpected `unit` value');\n    }\n    const diff = second.valueOf() - first.valueOf();\n    return Math.floor(diff / intervalDuration);\n  })();\n  const fn = direction === 'after' ? Math.ceil : Math.floor;\n  difference = fn(difference / interval) * interval;\n  return difference;\n}\n\nclass RevFrequencyRule extends FrequencyRule {\n  setToCurrentInterval() {\n    return this.intervalEndDate.subtract(1, 'millisecond');\n  }\n  intervalDifference(date) {\n    return intervalDifferenceBetweenDates({\n      first: this.firstIntervalStartDate,\n      second: date,\n      unit: this.intervalUnit,\n      interval: this.options.interval,\n      weekStart: this.options.weekStart,\n      direction: 'before',\n    });\n  }\n}\n\nconst FREQUENCIES = [\n  'MILLISECONDLY',\n  'SECONDLY',\n  'MINUTELY',\n  'HOURLY',\n  'DAILY',\n  'WEEKLY',\n  'MONTHLY',\n  'YEARLY',\n];\nconst FrequencyRuleModule = {\n  name: 'FrequencyRule',\n  get: processor => {\n    if (\n      processor.options.byMillisecondOfSecond !== undefined ||\n      processor.options.frequency !== 'MILLISECONDLY'\n    ) {\n      return null;\n    }\n    if (processor.reverse) return new RevFrequencyRule(processor, processor.end);\n    return new FrequencyRule(processor, processor.start);\n  },\n  normalizeOptions: (options, norm) => {\n    if (!FREQUENCIES.includes(options.frequency)) {\n      throw new RuleOptionError(`\"frequency\" must be one of ${JSON.stringify(FREQUENCIES)}`);\n    }\n    if (options.interval !== undefined) {\n      if (!Number.isInteger(options.interval)) {\n        throw new RuleOptionError('\"interval\" expects a whole number');\n      }\n      if (options.interval < 1) {\n        throw new RuleOptionError('\"interval\" cannot be less than 1');\n      }\n    }\n    if (options.weekStart !== undefined) {\n      if (!DateAdapter.WEEKDAYS.includes(options.weekStart)) {\n        throw new RuleOptionError(\n          `\"weekStart\" must be one of ${JSON.stringify(DateAdapter.WEEKDAYS)}`,\n        );\n      }\n    }\n    norm.frequency = options.frequency;\n    norm.interval = options.interval || 1;\n    norm.weekStart = options.weekStart || 'MO';\n  },\n  deps: () => [FrequencyRuleModule],\n};\n\nfunction ruleOptionFilled(option) {\n  return Array.isArray(option) && option.length > 0;\n}\n\nconst freqCache = new WeakMap();\nclass RecurrenceRuleBase extends RecurrenceRule {\n  constructor(processor) {\n    super(processor);\n    if (!freqCache.has(this.processor)) {\n      freqCache.set(this.processor, new FrequencyRule(processor, processor.start));\n    }\n    this.frequency = freqCache.get(this.processor);\n  }\n  validateDate(arg) {\n    return this.frequency.validateDate(arg);\n  }\n}\nclass RevRecurrenceRuleBase extends RecurrenceRule {\n  constructor(processor) {\n    super(processor);\n    if (!freqCache.has(this.processor)) {\n      freqCache.set(this.processor, new RevFrequencyRule(processor, processor.end));\n    }\n    this.frequency = freqCache.get(this.processor);\n  }\n  validateDate(arg) {\n    return this.frequency.validateDate(arg);\n  }\n}\n\n/**\n * Contains shared logic for ByHourOfDay, ByMinuteOfHour,\n * BySecondOfMinute, and ByMillisecondOfSecond reverse rule pipes\n */\nclass RevByTimeOfUnitRule extends RevRecurrenceRuleBase {\n  run(date) {\n    // e.g. const currentTime = date.get('hour');\n    const currentTime = date.get(this.granularity);\n    // e.g. for (const time of this.options.byHourOfDay) {\n    for (const time of this.option) {\n      if (currentTime < time) continue;\n      if (currentTime === time) {\n        return this.validateDate(new ValidDateTime(date));\n      }\n      // e.g. return this.nextValidDate(args, date.endGranularity('day').set('hour', time));\n      return this.validateDate(\n        new InvalidDateTime(date.endGranularity(this.baseGranularity).set(this.granularity, time)),\n      );\n    }\n    return this.validateDate(\n      new InvalidDateTime(\n        date\n          // e.g. .endGranularity('day')\n          .endGranularity(this.baseGranularity)\n          // e.g. .subtract(1, 'day')\n          .subtract(1, this.baseGranularity)\n          // e.g. .set('hour', this.options.byHourOfDay[0]);\n          .set(this.granularity, this.option[0]),\n      ),\n    );\n  }\n}\n\nclass RevByMillisecondOfSecondRule extends RevByTimeOfUnitRule {\n  constructor() {\n    super(...arguments);\n    this.baseGranularity = 'second';\n    this.granularity = 'millisecond';\n    this.option = this.options.byMillisecondOfSecond.slice().reverse();\n  }\n}\n\n/**\n * Contains shared logic for ByHourOfDay, ByMinuteOfHour,\n * BySecondOfMinute, and ByMillisecondOfSecond rule pipes\n */\nclass ByTimeOfUnitRule extends RecurrenceRuleBase {\n  run(date) {\n    // e.g. const currentTime = date.get('hour');\n    const currentTime = date.get(this.granularity);\n    // e.g. for (const time of this.options.byHourOfDay) {\n    for (const time of this.option) {\n      if (currentTime > time) continue;\n      if (currentTime === time) {\n        return this.validateDate(new ValidDateTime(date));\n      }\n      // e.g. return this.nextValidDate(args, date.granularity('day').set('hour', time));\n      return this.validateDate(\n        new InvalidDateTime(date.granularity(this.baseGranularity).set(this.granularity, time)),\n      );\n    }\n    return this.validateDate(\n      new InvalidDateTime(\n        date\n          // e.g. .granularity('day')\n          .granularity(this.baseGranularity)\n          // e.g. .add(1, 'day')\n          .add(1, this.baseGranularity)\n          // e.g. .set('hour', this.options.byHourOfDay[0]);\n          .set(this.granularity, this.option[0]),\n      ),\n    );\n  }\n}\n\nclass ByMillisecondOfSecondRule extends ByTimeOfUnitRule {\n  constructor() {\n    super(...arguments);\n    this.baseGranularity = 'second';\n    this.granularity = 'millisecond';\n    this.option = this.options.byMillisecondOfSecond;\n  }\n}\n\nconst ByMillisecondOfSecondRuleModule = {\n  name: 'ByMillisecondOfSecond',\n  get: processor => {\n    if (processor.options.byMillisecondOfSecond === undefined) return null;\n    if (processor.reverse) return new RevByMillisecondOfSecondRule(processor);\n    return new ByMillisecondOfSecondRule(processor);\n  },\n  normalizeOptions: (options, norm) => {\n    if (options.byMillisecondOfSecond !== undefined) {\n      if (!ruleOptionFilled(options.byMillisecondOfSecond)) {\n        throw new RuleOptionError('\"byMillisecondOfSecond\" expects a non-empty array');\n      }\n      if (options.byMillisecondOfSecond.some(num => num < 0 || num > 999)) {\n        throw new RuleOptionError('\"byMillisecondOfSecond\" values must be >= 0 && <= 999');\n      }\n      norm.byMillisecondOfSecond = options.byMillisecondOfSecond;\n      norm.byMillisecondOfSecond.sort(numberSortComparer);\n    } else if (options.frequency !== 'MILLISECONDLY') {\n      norm.byMillisecondOfSecond = [norm.start.get('millisecond')];\n    }\n  },\n  deps: () => [FrequencyRuleModule, ByMillisecondOfSecondRuleModule],\n};\n\nclass RevBySecondOfMinuteRule extends RevByTimeOfUnitRule {\n  constructor() {\n    super(...arguments);\n    this.baseGranularity = 'minute';\n    this.granularity = 'second';\n    this.option = this.options.bySecondOfMinute.slice().reverse();\n  }\n}\n\nclass BySecondOfMinuteRule extends ByTimeOfUnitRule {\n  constructor() {\n    super(...arguments);\n    this.baseGranularity = 'minute';\n    this.granularity = 'second';\n    this.option = this.options.bySecondOfMinute;\n  }\n}\n\nconst BySecondOfMinuteRuleModule = {\n  name: 'BySecondOfMinute',\n  get: processor => {\n    if (processor.options.bySecondOfMinute === undefined) return null;\n    if (processor.reverse) return new RevBySecondOfMinuteRule(processor);\n    return new BySecondOfMinuteRule(processor);\n  },\n  normalizeOptions: (options, norm) => {\n    if (options.bySecondOfMinute !== undefined) {\n      if (!ruleOptionFilled(options.bySecondOfMinute)) {\n        throw new RuleOptionError('\"bySecondOfMinute\" expects a non-empty array');\n      }\n      if (options.bySecondOfMinute.some(num => num < 0 || num > 60)) {\n        throw new RuleOptionError('\"bySecondOfMinute\" values must be >= 0 && <= 60');\n      }\n      norm.bySecondOfMinute = options.bySecondOfMinute;\n      norm.bySecondOfMinute.sort(numberSortComparer);\n    } else if (!['SECONDLY', 'MILLISECONDLY'].includes(options.frequency)) {\n      norm.bySecondOfMinute = [norm.start.get('second')];\n    }\n  },\n  deps: () => [FrequencyRuleModule, BySecondOfMinuteRuleModule, ByMillisecondOfSecondRuleModule],\n};\n\nclass RevByMinuteOfHourRule extends RevByTimeOfUnitRule {\n  constructor() {\n    super(...arguments);\n    this.baseGranularity = 'hour';\n    this.granularity = 'minute';\n    this.option = this.options.byMinuteOfHour.slice().reverse();\n  }\n}\n\nclass ByMinuteOfHourRule extends ByTimeOfUnitRule {\n  constructor() {\n    super(...arguments);\n    this.baseGranularity = 'hour';\n    this.granularity = 'minute';\n    this.option = this.options.byMinuteOfHour;\n  }\n}\n\nconst ByMinuteOfHourRuleModule = {\n  name: 'ByMinuteOfHour',\n  get: processor => {\n    if (processor.options.byMinuteOfHour === undefined) return null;\n    if (processor.reverse) return new RevByMinuteOfHourRule(processor);\n    return new ByMinuteOfHourRule(processor);\n  },\n  normalizeOptions: (options, norm) => {\n    if (options.byMinuteOfHour !== undefined) {\n      if (!ruleOptionFilled(options.byMinuteOfHour)) {\n        throw new RuleOptionError('\"byMinuteOfHour\" expects a non-empty array');\n      }\n      if (options.byMinuteOfHour.some(num => num < 0 || num > 59)) {\n        throw new RuleOptionError('\"byMinuteOfHour\" values must be >= 0 && <= 59');\n      }\n      norm.byMinuteOfHour = options.byMinuteOfHour;\n      norm.byMinuteOfHour.sort(numberSortComparer);\n    } else if (!['MINUTELY', 'SECONDLY', 'MILLISECONDLY'].includes(options.frequency)) {\n      norm.byMinuteOfHour = [norm.start.get('minute')];\n    }\n  },\n  deps: () => [\n    FrequencyRuleModule,\n    ByMinuteOfHourRuleModule,\n    BySecondOfMinuteRuleModule,\n    ByMillisecondOfSecondRuleModule,\n  ],\n};\n\nclass RevByHourOfDayRule extends RevByTimeOfUnitRule {\n  constructor() {\n    super(...arguments);\n    this.baseGranularity = 'day';\n    this.granularity = 'hour';\n    this.option = this.options.byHourOfDay.slice().reverse();\n  }\n}\n\nclass ByHourOfDayRule extends ByTimeOfUnitRule {\n  constructor() {\n    super(...arguments);\n    this.baseGranularity = 'day';\n    this.granularity = 'hour';\n    this.option = this.options.byHourOfDay;\n  }\n}\n\nconst ByHourOfDayRuleModule = {\n  name: 'ByHourOfDay',\n  get: processor => {\n    if (processor.options.byHourOfDay === undefined) return null;\n    if (processor.reverse) return new RevByHourOfDayRule(processor);\n    return new ByHourOfDayRule(processor);\n  },\n  normalizeOptions: (options, norm) => {\n    if (options.byHourOfDay !== undefined) {\n      if (!ruleOptionFilled(options.byHourOfDay)) {\n        throw new RuleOptionError('\"byHourOfDay\" expects a non-empty array');\n      }\n      if (options.byHourOfDay.some(num => num < 0 || num > 23)) {\n        throw new RuleOptionError('\"byHourOfDay\" values must be >= 0 && <= 23');\n      }\n      norm.byHourOfDay = options.byHourOfDay;\n      norm.byHourOfDay.sort(numberSortComparer);\n    } else if (['YEARLY', 'MONTHLY', 'WEEKLY', 'DAILY'].includes(options.frequency)) {\n      norm.byHourOfDay = [norm.start.get('hour')];\n    }\n  },\n  deps: () => [\n    FrequencyRuleModule,\n    ByHourOfDayRuleModule,\n    ByMinuteOfHourRuleModule,\n    BySecondOfMinuteRuleModule,\n    ByMillisecondOfSecondRuleModule,\n  ],\n};\n\nfunction getNextWeekday(date, weekday) {\n  return date.add(getDifferenceBetweenWeekdays(date.get('weekday'), weekday), 'day');\n}\n\nfunction getNthWeekdayOfMonth(date, weekday, nth) {\n  let base = date.set('day', 1);\n  if (nth < 0) {\n    base = base.add(1, 'month');\n  }\n  base = getNextWeekday(base, weekday);\n  // when nth is negative, adding it will act as subtraction\n  return nth < 0 ? base.add(nth, 'week') : base.add(nth - 1, 'week');\n}\n\nclass ByDayOfMonthRule extends RecurrenceRuleBase {\n  run(date) {\n    const normalizedByDayOfMonth = normalizeByDayOfMonth(\n      date,\n      this.options.byDayOfMonth,\n      this.options.byDayOfWeek,\n    );\n    const currentDay = date.get('day');\n    for (const day of normalizedByDayOfMonth) {\n      if (currentDay > day) continue;\n      if (currentDay === day) {\n        return this.validateDate(new ValidDateTime(date));\n      }\n      return this.validateDate(new InvalidDateTime(date.granularity('month').set('day', day)));\n    }\n    let next;\n    let nextMonth = date;\n    let index = 0;\n    while (!next && index < 30) {\n      nextMonth = nextMonth.granularity('month').add(1, 'month');\n      next = normalizeByDayOfMonth(\n        nextMonth,\n        this.options.byDayOfMonth,\n        this.options.byDayOfWeek,\n      )[0];\n      index++;\n    }\n    if (index >= 13) {\n      throw new RecurrenceRuleError('byDayOfMonth Infinite while loop');\n    }\n    return this.validateDate(new InvalidDateTime(nextMonth.set('day', next)));\n  }\n}\n/**\n * Does a few things:\n *\n * 1. filters out byDayOfMonth entries which are not applicable\n *    to current month\n * 2. negative entries to positive ones\n * 3. if a byDayOfWeek option is given, removes days which are\n *    not on the correct day of the week\n */\nfunction normalizeByDayOfMonth(date, byDayOfMonth, byDayOfWeek) {\n  const lengthOfMonth = date.endGranularity('month').get('day');\n  let normalizedByDayOfMonth = byDayOfMonth\n    .filter(day => lengthOfMonth >= Math.abs(day))\n    .map(day => (day > 0 ? day : lengthOfMonth + day + 1));\n  if (byDayOfWeek) {\n    const base = date.granularity('month');\n    const filteredByDayOfMonth = [];\n    byDayOfWeek.forEach(entry => {\n      if (typeof entry === 'string') {\n        filteredByDayOfMonth.push(\n          ...normalizedByDayOfMonth.filter(day => base.set('day', day).get('weekday') === entry),\n        );\n        return;\n      }\n      const nthWeekdayOfMonth = getNthWeekdayOfMonth(date, ...entry).get('day');\n      if (normalizedByDayOfMonth.includes(nthWeekdayOfMonth)) {\n        filteredByDayOfMonth.push(nthWeekdayOfMonth);\n      }\n    });\n    normalizedByDayOfMonth = Array.from(new Set(filteredByDayOfMonth));\n  }\n  return normalizedByDayOfMonth.sort((a, b) => {\n    if (a > b) return 1;\n    if (a < b) return -1;\n    else return 0;\n  });\n}\n\nclass RevByDayOfMonthRule extends RevRecurrenceRuleBase {\n  run(date) {\n    const normalizedByDayOfMonth = normalizeByDayOfMonth(\n      date,\n      this.options.byDayOfMonth,\n      this.options.byDayOfWeek,\n    ).reverse();\n    const currentDay = date.get('day');\n    for (const day of normalizedByDayOfMonth) {\n      if (currentDay < day) continue;\n      if (currentDay === day) {\n        return this.validateDate(new ValidDateTime(date));\n      }\n      return this.validateDate(new InvalidDateTime(date.endGranularity('month').set('day', day)));\n    }\n    let next;\n    let nextMonth = date;\n    let index = 0;\n    while (!next && index < 30) {\n      nextMonth = nextMonth.endGranularity('month').subtract(1, 'month');\n      next = normalizeByDayOfMonth(\n        nextMonth,\n        this.options.byDayOfMonth,\n        this.options.byDayOfWeek,\n      ).pop();\n      index++;\n    }\n    if (index >= 13) {\n      throw new RecurrenceRuleError('byDayOfMonth Infinite while loop');\n    }\n    return this.validateDate(new InvalidDateTime(nextMonth.set('day', next)));\n  }\n}\n\nconst ByDayOfMonthRuleModule = {\n  name: 'ByDayOfMonth',\n  get: processor => {\n    if (processor.options.byDayOfMonth === undefined) return null;\n    if (processor.reverse) return new RevByDayOfMonthRule(processor);\n    return new ByDayOfMonthRule(processor);\n  },\n  normalizeOptions: (options, norm) => {\n    if (options.byDayOfMonth !== undefined) {\n      if (options.frequency === 'WEEKLY') {\n        throw new RuleOptionError('when \"frequency\" is \"WEEKLY\", \"byDayOfMonth\" cannot be present');\n      }\n      if (!ruleOptionFilled(options.byDayOfMonth)) {\n        throw new RuleOptionError('\"byDayOfMonth\" expects a non-empty array');\n      }\n      if (options.byDayOfMonth.some(num => num === 0 || num < -31 || num > 31)) {\n        throw new RuleOptionError(\n          '\"byDayOfMonth\" values must be `num !== 0 && num <= 31 && num >= -31`',\n        );\n      }\n      norm.byDayOfMonth = options.byDayOfMonth.slice();\n    } else if (\n      !(ruleOptionFilled(options.byDayOfWeek) || ruleOptionFilled(options.byDayOfYear)) &&\n      ['YEARLY', 'MONTHLY'].includes(options.frequency)\n    ) {\n      norm.byDayOfMonth = [norm.start.get('day')];\n    }\n  },\n  deps: () => [\n    FrequencyRuleModule,\n    ByDayOfMonthRuleModule,\n    ByHourOfDayRuleModule,\n    ByMinuteOfHourRuleModule,\n    BySecondOfMinuteRuleModule,\n    ByMillisecondOfSecondRuleModule,\n  ],\n};\n\nfunction getNthWeekdayOfYear(date, weekday, nth) {\n  let base = date.set('month', 1).set('day', 1);\n  if (nth < 0) {\n    base = base.add(1, 'year');\n  }\n  base = getNextWeekday(base, weekday);\n  // when nth is negative, adding it will act as subtraction\n  return nth < 0 ? base.add(nth, 'week') : base.add(nth - 1, 'week');\n}\n\nfunction getPreviousWeekday(date, weekday) {\n  const diff = getDifferenceBetweenWeekdays(date.get('weekday'), weekday);\n  return date.subtract(diff === 0 ? 0 : 7 - diff, 'day');\n}\n\nclass RevByDayOfWeekRule extends RevRecurrenceRuleBase {\n  run(date) {\n    if (this.options.frequency === 'YEARLY') {\n      return this.options.byMonthOfYear === undefined\n        ? this.expandYearly(date)\n        : this.expandMonthly(date);\n    } else if (this.options.frequency === 'MONTHLY') {\n      return this.expandMonthly(date);\n    }\n    return this.expand(date);\n  }\n  expandYearly(date) {\n    let next = getPrevWeekdaysOfYear(date, this.options.byDayOfWeek)[0];\n    let index = 0;\n    let base = date;\n    // If we can't find a valid date this year,\n    // search the previous year. Only search the past 28 years.\n    // (the calendar repeats on a 28 year cycle, according\n    // to the internet).\n    while (!next && index < 28) {\n      index++;\n      base = base.granularity('year').subtract(1, 'millisecond');\n      next = getPrevWeekdaysOfYear(base, this.options.byDayOfWeek)[0];\n    }\n    if (!next) {\n      throw new RecurrenceRuleError(\n        'The byDayOfWeek rule appears to contain an impossible combination',\n      );\n    }\n    return this.result(date, next);\n  }\n  expandMonthly(date) {\n    let next = getPrevWeekdaysOfMonth(date, this.options.byDayOfWeek)[0];\n    let index = 0;\n    let base = date;\n    // TODO: performance improvment\n    // If, in the first year, a match isn't found, we should be able to\n    // jumpt to the previous leap year and check that. Or, if already on\n    // a leap year, we can just error immediately.\n    // If we can't find a valid date this month,\n    // search the previous month. Only search the past 4 years\n    // (to account for leap year).\n    while (!next && index < 50) {\n      index++;\n      base = base.granularity('month').subtract(1, 'millisecond');\n      next = getPrevWeekdaysOfMonth(base, this.options.byDayOfWeek)[0];\n    }\n    if (!next) {\n      throw new RecurrenceRuleError(\n        'The byDayOfWeek rule appears to contain an impossible combination',\n      );\n    }\n    return this.result(date, next);\n  }\n  expand(date) {\n    const next = this.options.byDayOfWeek\n      .map(weekday => getPreviousWeekday(date, weekday))\n      .sort(dateTimeSortComparer)\n      .pop();\n    return this.result(date, next);\n  }\n  result(date, next) {\n    if (next.isEqual(date)) {\n      return this.validateDate(new ValidDateTime(date));\n    }\n    return this.validateDate(new InvalidDateTime(next.endGranularity('day')));\n  }\n}\n/** For each byDayOfWeek entry, find the previous DateTime */\nfunction getPrevWeekdaysOfYear(date, byDayOfWeek) {\n  const normalizedNthWeekdaysOfYear = byDayOfWeek\n    .filter(entry => Array.isArray(entry))\n    .map(entry => getNthWeekdayOfYear(date, ...entry));\n  const normalizedNextWeekdays = byDayOfWeek\n    .filter(entry => typeof entry === 'string')\n    .map(weekday => getPreviousWeekday(date, weekday))\n    .filter(entry => entry.get('year') === date.get('year'));\n  return uniqDateTimes([...normalizedNthWeekdaysOfYear, ...normalizedNextWeekdays])\n    .filter(entry => entry.isBeforeOrEqual(date))\n    .sort(dateTimeSortComparer)\n    .reverse();\n}\n/** For each byDayOfWeek entry, find the previous DateTime */\nfunction getPrevWeekdaysOfMonth(date, byDayOfWeek) {\n  const normalizedNthWeekdaysOfMonth = byDayOfWeek\n    .filter(entry => Array.isArray(entry))\n    .map(entry => getNthWeekdayOfMonth(date, ...entry));\n  const normalizedNextWeekdays = byDayOfWeek\n    .filter(entry => typeof entry === 'string')\n    .map(weekday => getPreviousWeekday(date, weekday))\n    .filter(\n      entry => entry.get('year') === date.get('year') && entry.get('month') === date.get('month'),\n    );\n  return uniqDateTimes([...normalizedNthWeekdaysOfMonth, ...normalizedNextWeekdays])\n    .filter(entry => entry.isBeforeOrEqual(date))\n    .sort(dateTimeSortComparer)\n    .reverse();\n}\n\nclass ByDayOfWeekRule extends RecurrenceRuleBase {\n  run(date) {\n    if (this.options.frequency === 'YEARLY') {\n      return this.options.byMonthOfYear === undefined\n        ? this.expandYearly(date)\n        : this.expandMonthly(date);\n    } else if (this.options.frequency === 'MONTHLY') {\n      return this.expandMonthly(date);\n    }\n    return this.expand(date);\n  }\n  expandYearly(date) {\n    let next = getNextWeekdaysOfYear(date, this.options.byDayOfWeek)[0];\n    let index = 0;\n    let base = date;\n    // If we can't find a valid date this year,\n    // search next year. Only search the next 28 years.\n    // (the calendar repeats on a 28 year cycle, according\n    // to the internet).\n    while (!next && index < 28) {\n      index++;\n      base = base.granularity('year').add(1, 'year');\n      next = getNextWeekdaysOfYear(base, this.options.byDayOfWeek)[0];\n    }\n    if (!next) {\n      throw new RecurrenceRuleError(\n        'The byDayOfWeek rule appears to contain an impossible combination',\n      );\n    }\n    return this.result(date, next);\n  }\n  expandMonthly(date) {\n    let next = getNextWeekdaysOfMonth(date, this.options.byDayOfWeek)[0];\n    let index = 0;\n    let base = date;\n    // TODO: performance improvment\n    // If, in the first year, a match isn't found, we should be able to\n    // jumpt to the next leap year and check that. Or, if already on\n    // a leap year, we can just error immediately.\n    // If we can't find a valid date this month,\n    // search the next month. Only search the next 4 years\n    // (to account for leap year).\n    while (!next && index < 50) {\n      index++;\n      base = base.granularity('month').add(1, 'month');\n      next = getNextWeekdaysOfMonth(base, this.options.byDayOfWeek)[0];\n    }\n    if (!next) {\n      throw new RecurrenceRuleError(\n        'The byDayOfWeek rule appears to contain an impossible combination',\n      );\n    }\n    return this.result(date, next);\n  }\n  expand(date) {\n    const next = this.options.byDayOfWeek\n      .map(weekday => getNextWeekday(date, weekday))\n      .sort(dateTimeSortComparer)[0];\n    return this.result(date, next);\n  }\n  result(date, next) {\n    if (next.isEqual(date)) {\n      return this.validateDate(new ValidDateTime(date));\n    }\n    return this.validateDate(new InvalidDateTime(next.granularity('day')));\n  }\n}\n/** For each byDayOfWeek entry, find the next DateTime */\nfunction getNextWeekdaysOfYear(date, byDayOfWeek) {\n  const normalizedNthWeekdaysOfYear = byDayOfWeek\n    .filter(entry => Array.isArray(entry))\n    .map(entry => getNthWeekdayOfYear(date, ...entry));\n  const normalizedNextWeekdays = byDayOfWeek\n    .filter(entry => typeof entry === 'string')\n    .map(weekday => getNextWeekday(date, weekday))\n    .filter(entry => entry.get('year') === date.get('year'));\n  return uniqDateTimes([...normalizedNthWeekdaysOfYear, ...normalizedNextWeekdays])\n    .filter(entry => entry.isAfterOrEqual(date))\n    .sort(dateTimeSortComparer);\n}\n/** For each byDayOfWeek entry, find the next DateTime */\nfunction getNextWeekdaysOfMonth(date, byDayOfWeek) {\n  const normalizedNthWeekdaysOfMonth = byDayOfWeek\n    .filter(entry => Array.isArray(entry))\n    .map(entry => getNthWeekdayOfMonth(date, ...entry));\n  const normalizedNextWeekdays = byDayOfWeek\n    .filter(entry => typeof entry === 'string')\n    .map(weekday => getNextWeekday(date, weekday))\n    .filter(\n      entry => entry.get('year') === date.get('year') && entry.get('month') === date.get('month'),\n    );\n  return uniqDateTimes([...normalizedNthWeekdaysOfMonth, ...normalizedNextWeekdays])\n    .filter(entry => entry.isAfterOrEqual(date))\n    .sort(dateTimeSortComparer);\n}\n\nconst ByDayOfWeekRuleModule = {\n  name: 'ByDayOfWeek',\n  get: processor => {\n    if (processor.options.byDayOfWeek === undefined) return null;\n    if (processor.reverse) return new RevByDayOfWeekRule(processor);\n    return new ByDayOfWeekRule(processor);\n  },\n  normalizeOptions: (options, norm) => {\n    if (options.byDayOfWeek !== undefined) {\n      if (!ruleOptionFilled(options.byDayOfWeek)) {\n        throw new RuleOptionError('\"byDayOfWeek\" expects a non-empty array');\n      }\n      const invalidWeeday = options.byDayOfWeek.find(day =>\n        Array.isArray(day)\n          ? !DateAdapter.WEEKDAYS.includes(day[0])\n          : !DateAdapter.WEEKDAYS.includes(day),\n      );\n      if (invalidWeeday) {\n        throw new RuleOptionError(\n          `\"byDayOfWeek\" expects weedays in the form ` +\n            `${JSON.stringify(DateAdapter.WEEKDAYS)} but \"${invalidWeeday}\" was provided`,\n        );\n      }\n      if (\n        !['YEARLY', 'MONTHLY'].includes(options.frequency) &&\n        options.byDayOfWeek.some(weekday => Array.isArray(weekday))\n      ) {\n        throw new RuleOptionError(\n          '\"byDayOfWeek\" can only include a numeric value (i.e. `[string, number]`) when the \"frequency\" is ' +\n            'either \"MONTHLY\" or \"YEARLY\"',\n        );\n      }\n      if (\n        options.frequency === 'MONTHLY' &&\n        options.byDayOfWeek.some(\n          weekday =>\n            Array.isArray(weekday) && (weekday[1] < -31 || weekday[1] === 0 || weekday[1] > 31),\n        )\n      ) {\n        throw new RuleOptionError(\n          'when \"frequency\" is \"MONTHLY\", each \"byDayOfWeek\" can optionally only' +\n            ' have a numeric value >= -31 and <= 31 and !== 0',\n        );\n      }\n      if (\n        options.frequency === 'YEARLY' &&\n        options.byDayOfWeek.some(\n          weekday =>\n            Array.isArray(weekday) && (weekday[1] < -366 || weekday[1] === 0 || weekday[1] > 366),\n        )\n      ) {\n        throw new RuleOptionError(\n          'when \"frequency\" is \"YEARLY\", each \"byDayOfWeek\" can optionally only' +\n            ' have a numeric value >= -366 and <= 366 and !== 0',\n        );\n      }\n      norm.byDayOfWeek = options.byDayOfWeek;\n    } else if (!ruleOptionFilled(options.byDayOfMonth) && options.frequency === 'WEEKLY') {\n      norm.byDayOfWeek = [norm.start.get('weekday')];\n    }\n  },\n  deps: () => [\n    FrequencyRuleModule,\n    ByDayOfWeekRuleModule,\n    ByHourOfDayRuleModule,\n    ByMinuteOfHourRuleModule,\n    BySecondOfMinuteRuleModule,\n    ByMillisecondOfSecondRuleModule,\n  ],\n};\n\nclass RevByMonthOfYearRule extends RevRecurrenceRuleBase {\n  constructor() {\n    super(...arguments);\n    this.option = this.processor.options.byMonthOfYear.slice().reverse();\n  }\n  run(date) {\n    const currentMonth = date.get('month');\n    for (const month of this.option) {\n      if (currentMonth < month) continue;\n      if (currentMonth === month) {\n        return this.validateDate(new ValidDateTime(date));\n      }\n      return this.validateDate(\n        new InvalidDateTime(date.endGranularity('year').set('month', month)),\n      );\n    }\n    return this.validateDate(\n      new InvalidDateTime(\n        date\n          .endGranularity('year')\n          .subtract(1, 'year')\n          .set('month', this.option[0]),\n      ),\n    );\n  }\n}\n\nclass ByMonthOfYearRule extends RecurrenceRuleBase {\n  run(date) {\n    const currentMonth = date.get('month');\n    for (const month of this.options.byMonthOfYear) {\n      if (currentMonth > month) continue;\n      if (currentMonth === month) {\n        return this.validateDate(new ValidDateTime(date));\n      }\n      return this.validateDate(new InvalidDateTime(date.granularity('year').set('month', month)));\n    }\n    return this.validateDate(\n      new InvalidDateTime(\n        date\n          .granularity('year')\n          .add(1, 'year')\n          .set('month', this.options.byMonthOfYear[0]),\n      ),\n    );\n  }\n}\n\nconst ByMonthOfYearRuleModule = {\n  name: 'ByMonthOfYear',\n  get: processor => {\n    if (processor.options.byMonthOfYear === undefined) return null;\n    if (processor.reverse) {\n      return new RevByMonthOfYearRule(processor);\n    }\n    return new ByMonthOfYearRule(processor);\n  },\n  normalizeOptions: (options, norm) => {\n    if (options.byMonthOfYear !== undefined) {\n      if (!ruleOptionFilled(options.byMonthOfYear)) {\n        throw new RuleOptionError('\"byMonthOfYear\" expects a non-empty array');\n      }\n      if (options.byMonthOfYear.some(num => num < 1 || num > 12)) {\n        throw new RuleOptionError('\"byMonthOfYear\" values must be `num >= 1 && num >= 12`');\n      }\n      norm.byMonthOfYear = options.byMonthOfYear.slice();\n      norm.byMonthOfYear.sort(numberSortComparer);\n    } else if (\n      !(\n        ruleOptionFilled(options.byDayOfMonth) ||\n        ruleOptionFilled(options.byDayOfWeek) ||\n        ruleOptionFilled(options.byDayOfYear)\n      ) &&\n      options.frequency === 'YEARLY'\n    ) {\n      norm.byMonthOfYear = [norm.start.get('month')];\n    }\n  },\n  deps: () => [\n    FrequencyRuleModule,\n    ByMonthOfYearRuleModule,\n    ByDayOfMonthRuleModule,\n    ByHourOfDayRuleModule,\n    ByMinuteOfHourRuleModule,\n    BySecondOfMinuteRuleModule,\n    ByMillisecondOfSecondRuleModule,\n  ],\n};\n\nconst ICAL_RULES = [\n  FrequencyRuleModule,\n  ByMonthOfYearRuleModule,\n  ByDayOfMonthRuleModule,\n  ByDayOfWeekRuleModule,\n  ByHourOfDayRuleModule,\n  ByMinuteOfHourRuleModule,\n  BySecondOfMinuteRuleModule,\n  ByMillisecondOfSecondRuleModule,\n];\n\nexport {\n  ByDayOfMonthRule,\n  ByDayOfMonthRuleModule,\n  ByDayOfWeekRule,\n  ByDayOfWeekRuleModule,\n  ByHourOfDayRule,\n  ByHourOfDayRuleModule,\n  ByMillisecondOfSecondRule,\n  ByMillisecondOfSecondRuleModule,\n  ByMinuteOfHourRule,\n  ByMinuteOfHourRuleModule,\n  ByMonthOfYearRule,\n  ByMonthOfYearRuleModule,\n  BySecondOfMinuteRule,\n  BySecondOfMinuteRuleModule,\n  FrequencyRule,\n  FrequencyRuleModule,\n  ICAL_RULES,\n  RevByDayOfMonthRule,\n  RevByDayOfWeekRule,\n  RevByHourOfDayRule,\n  RevByMillisecondOfSecondRule,\n  RevByMinuteOfHourRule,\n  RevByMonthOfYearRule,\n  RevBySecondOfMinuteRule,\n  RevFrequencyRule,\n  getPrevWeekdaysOfMonth,\n  getPrevWeekdaysOfYear,\n};\n","import { Dates, Rule, Schedule } from '@rschedule/core/generators';\nimport {\n  serializeDataToJSON,\n  ParseJSONError,\n  registerJSONSerializerFn,\n} from '@rschedule/json-tools';\nimport { DateAdapterBase, cloneJSON } from '@rschedule/core';\n\nDates.prototype.toJSON = function serialize(opts = {}) {\n  const json = {\n    type: 'Dates',\n    dates: this.adapters.map(adapter => adapter.toJSON()),\n  };\n  if (!opts.nested) json.timezone = this.timezone;\n  serializeDataToJSON(this, json, opts);\n  return json;\n};\nDates.fromJSON = function parse(json, options = {}) {\n  if (json.type !== 'Dates') {\n    throw new ParseJSONError('Invalid Dates JSON');\n  }\n  return new Dates({\n    dates: json.dates.map(date => DateAdapterBase.adapter.fromJSON(date)),\n    data: typeof options.data === 'function' ? options.data(json) : json.data,\n    timezone: options.timezone || json.timezone,\n  });\n};\nregisterJSONSerializerFn('Dates', Dates.fromJSON);\n\nRule.prototype.toJSON = function serialize(opts = {}) {\n  const json = {\n    type: 'Rule',\n    config: Object.assign(Object.assign({}, cloneJSON(this.options)), {\n      start: this.normalizeDateInput(this.options.start).toJSON(),\n    }),\n  };\n  if (this.options.end) {\n    json.config.end = this.normalizeDateInput(this.options.end).toJSON();\n  }\n  if (!opts.nested) json.timezone = this.timezone;\n  serializeDataToJSON(this, json, opts);\n  return json;\n};\nRule.fromJSON = function fromJSON(json, options = {}) {\n  const config = Object.assign(Object.assign({}, json.config), {\n    start: DateAdapterBase.adapter.fromJSON(json.config.start),\n    end: json.config.end && DateAdapterBase.adapter.fromJSON(json.config.end),\n  });\n  return new Rule(config, {\n    data: typeof options.data === 'function' ? options.data(json) : json.data,\n    timezone: options.timezone || json.timezone,\n  });\n};\nregisterJSONSerializerFn('Rule', Rule.fromJSON);\n\nSchedule.prototype.toJSON = function serialize(opts = {}) {\n  const json = {\n    type: 'Schedule',\n    rrules: this.rrules.map(rule =>\n      rule.toJSON(Object.assign(Object.assign({}, opts), { nested: true })),\n    ),\n    exrules: this.exrules.map(rule =>\n      rule.toJSON(Object.assign(Object.assign({}, opts), { nested: true })),\n    ),\n    rdates: this.rdates.toJSON(Object.assign(Object.assign({}, opts), { nested: true })),\n    exdates: this.exdates.toJSON(Object.assign(Object.assign({}, opts), { nested: true })),\n  };\n  if (!opts.nested) json.timezone = this.timezone;\n  serializeDataToJSON(this, json, opts);\n  return json;\n};\nSchedule.fromJSON = function parse(json, options = {}) {\n  if (json.type !== 'Schedule') {\n    throw new ParseJSONError('Invalid Schedule JSON');\n  }\n  return new Schedule({\n    rrules: json.rrules.map(rule =>\n      Rule.fromJSON(rule, Object.assign({ timezone: json.timezone }, options)),\n    ),\n    exrules: json.exrules.map(rule =>\n      Rule.fromJSON(rule, Object.assign({ timezone: json.timezone }, options)),\n    ),\n    rdates: Dates.fromJSON(json.rdates, Object.assign({ timezone: json.timezone }, options)),\n    exdates: Dates.fromJSON(json.exdates, Object.assign({ timezone: json.timezone }, options)),\n    data: typeof options.data === 'function' ? options.data(json) : json.data,\n    timezone: options.timezone || json.timezone,\n  });\n};\nregisterJSONSerializerFn('Schedule', Schedule.fromJSON);\n","import { OccurrenceGenerator } from '@rschedule/core/generators';\n\nclass ParseJSONError extends Error {}\nclass SerializeJSONError extends Error {}\nOccurrenceGenerator.JSON_FN_MAP = new Map();\nOccurrenceGenerator.prototype.toJSON = function serialize(opts) {\n  throw new SerializeJSONError(\n    `To support smaller bundles, ${this.constructor.name}#toJSON() ` +\n      `must be manually added. See \"@rschedule/json-tools\" in the rSchedule docs.`,\n  );\n};\nOccurrenceGenerator.fromJSON = function parse(json, options) {\n  if (typeof json !== 'object' || json === null) {\n    throw new ParseJSONError(`Invalid json \"${json}\"`);\n  }\n  const fn = OccurrenceGenerator.JSON_FN_MAP.get(json.type);\n  if (!fn) {\n    throw new ParseJSONError(\n      `Unknown rSchedule object type \"${json.type}\". Have you added a json serializer ` +\n        `for \"${json.type}\"? ` +\n        `See \"@rschedule/json-tools\" in the rSchedule docs.`,\n    );\n  }\n  return fn(json, options);\n};\nfunction serializeDataToJSON(gen, json, opt) {\n  if (!opt.data) return;\n  if (opt.data === true) {\n    json.data = gen.data;\n  } else {\n    json.data = opt.data(gen);\n  }\n  if (json.data === undefined) delete json.data;\n}\nfunction registerJSONSerializerFn(name, fn) {\n  if (OccurrenceGenerator.JSON_FN_MAP.has(name)) {\n    throw new Error(\n      `Attempting to set a global json parser function for \"${name}\" ` + 'but one already exists.',\n    );\n  }\n  OccurrenceGenerator.JSON_FN_MAP.set(name, fn);\n}\n\nexport { ParseJSONError, SerializeJSONError, registerJSONSerializerFn, serializeDataToJSON };\n","import { DateAdapterBase, InvalidDateAdapterError, ArgumentError } from '@rschedule/core';\n\nclass StandardDateAdapter extends DateAdapterBase {\n  constructor(date, options = {}) {\n    super(undefined, options);\n    if (!['UTC', null, undefined].includes(options.timezone)) {\n      throw new InvalidDateAdapterError(\n        `StandardDateAdapter only supports \"UTC\" and ` +\n          `local time zones but \"${options.timezone}\" was provided.`,\n      );\n    }\n    this._date = new Date(date);\n    this.timezone = options.timezone !== undefined ? options.timezone : null;\n    this.assertIsValid();\n  }\n  static isDate(object) {\n    return Object.prototype.toString.call(object) === '[object Date]';\n  }\n  static fromDate(date, options) {\n    return new StandardDateAdapter(date, options);\n  }\n  static fromJSON(json) {\n    const args = [\n      json.year,\n      json.month - 1,\n      json.day,\n      json.hour,\n      json.minute,\n      json.second,\n      json.millisecond,\n    ];\n    switch (json.timezone) {\n      case 'UTC': {\n        return new StandardDateAdapter(new Date(Date.UTC(...args)), {\n          timezone: 'UTC',\n          duration: json.duration,\n        });\n      }\n      case null: {\n        return new StandardDateAdapter(new Date(...args), {\n          timezone: null,\n          duration: json.duration,\n        });\n      }\n      default:\n        throw new InvalidDateAdapterError(\n          'The `StandardDateAdapter` only supports datetimes in ' +\n            `UTC or LOCAL (null) time. You provided a JSON object ` +\n            `with timezone \"${json.timezone}\".`,\n        );\n    }\n  }\n  static fromDateTime(datetime) {\n    const date = StandardDateAdapter.fromJSON(datetime.toJSON());\n    date.generators.push(...datetime.generators);\n    return date;\n  }\n  get date() {\n    return new Date(this._date);\n  }\n  get end() {\n    if (!this.duration) return;\n    if (this._end) return this._end;\n    this._end = StandardDateAdapter.fromDateTime(\n      this.toDateTime().add(this.duration, 'millisecond'),\n    ).date;\n    return this._end;\n  }\n  set(prop, value) {\n    if (prop === 'timezone') {\n      if (this.timezone === value) return this;\n      else {\n        return new StandardDateAdapter(this._date, {\n          timezone: value,\n          duration: this.duration,\n          generators: this.generators,\n        });\n      }\n    } else if (prop === 'duration') {\n      if (this.duration === value) return this;\n      else {\n        return new StandardDateAdapter(this._date, {\n          timezone: this.timezone,\n          duration: value,\n          generators: this.generators,\n        });\n      }\n    }\n    throw new ArgumentError(`Unknown prop \"${prop}\" for StandardDateAdapter#set()`);\n  }\n  valueOf() {\n    return this._date.valueOf();\n  }\n  toISOString() {\n    return this._date.toISOString();\n  }\n  toJSON() {\n    let json;\n    if (this.timezone === 'UTC') {\n      json = {\n        timezone: this.timezone,\n        year: this._date.getUTCFullYear(),\n        month: this._date.getUTCMonth() + 1,\n        day: this._date.getUTCDate(),\n        hour: this._date.getUTCHours(),\n        minute: this._date.getUTCMinutes(),\n        second: this._date.getUTCSeconds(),\n        millisecond: this._date.getUTCMilliseconds(),\n      };\n    } else {\n      json = {\n        timezone: this.timezone,\n        year: this._date.getFullYear(),\n        month: this._date.getMonth() + 1,\n        day: this._date.getDate(),\n        hour: this._date.getHours(),\n        minute: this._date.getMinutes(),\n        second: this._date.getSeconds(),\n        millisecond: this._date.getMilliseconds(),\n      };\n    }\n    if (this.duration) {\n      json.duration = this.duration;\n    }\n    return json;\n  }\n  assertIsValid() {\n    if (!StandardDateAdapter.isDate(this._date) || isNaN(this._date.valueOf())) {\n      throw new InvalidDateAdapterError('StandardDateAdapter has invalid date.');\n    } else if (![null, 'UTC'].includes(this.timezone)) {\n      throw new InvalidDateAdapterError(\n        'StandardDateAdapter only supports local (null) and UTC timezones but ' +\n          `\"${this.timezone}\" was specified.`,\n      );\n    } else if (this.duration && this.duration <= 0) {\n      throw new InvalidDateAdapterError('If provided, duration must be greater than 0.');\n    }\n    return true;\n  }\n}\nStandardDateAdapter.hasTimezoneSupport = false;\n\nexport { StandardDateAdapter };\n","import { DateAdapterBase } from '@rschedule/core';\nimport { Rule } from '@rschedule/core/generators';\nimport { ICAL_RULES } from '@rschedule/core/rules/ICAL_RULES';\nimport { StandardDateAdapter } from '@rschedule/standard-date-adapter';\n\nDateAdapterBase.adapter = StandardDateAdapter;\nRule.recurrenceRules = ICAL_RULES;\n","/*!\n * accounting.js v0.4.2\n * Copyright 2014 Open Exchange Rates\n *\n * Freely distributable under the MIT license.\n * Portions of accounting.js are inspired or borrowed from underscore.js\n *\n * Full details and documentation:\n * http://openexchangerates.github.io/accounting.js/\n */\n\n(function(root, undefined) {\n\n\t/* --- Setup --- */\n\n\t// Create the local library object, to be exported or referenced globally later\n\tvar lib = {};\n\n\t// Current version\n\tlib.version = '0.4.2';\n\n\n\t/* --- Exposed settings --- */\n\n\t// The library's settings configuration object. Contains default parameters for\n\t// currency and number formatting\n\tlib.settings = {\n\t\tcurrency: {\n\t\t\tsymbol : \"$\",\t\t// default currency symbol is '$'\n\t\t\tformat : \"%s%v\",\t// controls output: %s = symbol, %v = value (can be object, see docs)\n\t\t\tdecimal : \".\",\t\t// decimal point separator\n\t\t\tthousand : \",\",\t\t// thousands separator\n\t\t\tprecision : 2,\t\t// decimal places\n\t\t\tgrouping : 3\t\t// digit grouping (not implemented yet)\n\t\t},\n\t\tnumber: {\n\t\t\tprecision : 0,\t\t// default precision on numbers is 0\n\t\t\tgrouping : 3,\t\t// digit grouping (not implemented yet)\n\t\t\tthousand : \",\",\n\t\t\tdecimal : \".\"\n\t\t}\n\t};\n\n\n\t/* --- Internal Helper Methods --- */\n\n\t// Store reference to possibly-available ECMAScript 5 methods for later\n\tvar nativeMap = Array.prototype.map,\n\t\tnativeIsArray = Array.isArray,\n\t\ttoString = Object.prototype.toString;\n\n\t/**\n\t * Tests whether supplied parameter is a string\n\t * from underscore.js\n\t */\n\tfunction isString(obj) {\n\t\treturn !!(obj === '' || (obj && obj.charCodeAt && obj.substr));\n\t}\n\n\t/**\n\t * Tests whether supplied parameter is an array\n\t * from underscore.js, delegates to ECMA5's native Array.isArray\n\t */\n\tfunction isArray(obj) {\n\t\treturn nativeIsArray ? nativeIsArray(obj) : toString.call(obj) === '[object Array]';\n\t}\n\n\t/**\n\t * Tests whether supplied parameter is a true object\n\t */\n\tfunction isObject(obj) {\n\t\treturn obj && toString.call(obj) === '[object Object]';\n\t}\n\n\t/**\n\t * Extends an object with a defaults object, similar to underscore's _.defaults\n\t *\n\t * Used for abstracting parameter handling from API methods\n\t */\n\tfunction defaults(object, defs) {\n\t\tvar key;\n\t\tobject = object || {};\n\t\tdefs = defs || {};\n\t\t// Iterate over object non-prototype properties:\n\t\tfor (key in defs) {\n\t\t\tif (defs.hasOwnProperty(key)) {\n\t\t\t\t// Replace values with defaults only if undefined (allow empty/zero values):\n\t\t\t\tif (object[key] == null) object[key] = defs[key];\n\t\t\t}\n\t\t}\n\t\treturn object;\n\t}\n\n\t/**\n\t * Implementation of `Array.map()` for iteration loops\n\t *\n\t * Returns a new Array as a result of calling `iterator` on each array value.\n\t * Defers to native Array.map if available\n\t */\n\tfunction map(obj, iterator, context) {\n\t\tvar results = [], i, j;\n\n\t\tif (!obj) return results;\n\n\t\t// Use native .map method if it exists:\n\t\tif (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);\n\n\t\t// Fallback for native .map:\n\t\tfor (i = 0, j = obj.length; i < j; i++ ) {\n\t\t\tresults[i] = iterator.call(context, obj[i], i, obj);\n\t\t}\n\t\treturn results;\n\t}\n\n\t/**\n\t * Check and normalise the value of precision (must be positive integer)\n\t */\n\tfunction checkPrecision(val, base) {\n\t\tval = Math.round(Math.abs(val));\n\t\treturn isNaN(val)? base : val;\n\t}\n\n\n\t/**\n\t * Parses a format string or object and returns format obj for use in rendering\n\t *\n\t * `format` is either a string with the default (positive) format, or object\n\t * containing `pos` (required), `neg` and `zero` values (or a function returning\n\t * either a string or object)\n\t *\n\t * Either string or format.pos must contain \"%v\" (value) to be valid\n\t */\n\tfunction checkCurrencyFormat(format) {\n\t\tvar defaults = lib.settings.currency.format;\n\n\t\t// Allow function as format parameter (should return string or object):\n\t\tif ( typeof format === \"function\" ) format = format();\n\n\t\t// Format can be a string, in which case `value` (\"%v\") must be present:\n\t\tif ( isString( format ) && format.match(\"%v\") ) {\n\n\t\t\t// Create and return positive, negative and zero formats:\n\t\t\treturn {\n\t\t\t\tpos : format,\n\t\t\t\tneg : format.replace(\"-\", \"\").replace(\"%v\", \"-%v\"),\n\t\t\t\tzero : format\n\t\t\t};\n\n\t\t// If no format, or object is missing valid positive value, use defaults:\n\t\t} else if ( !format || !format.pos || !format.pos.match(\"%v\") ) {\n\n\t\t\t// If defaults is a string, casts it to an object for faster checking next time:\n\t\t\treturn ( !isString( defaults ) ) ? defaults : lib.settings.currency.format = {\n\t\t\t\tpos : defaults,\n\t\t\t\tneg : defaults.replace(\"%v\", \"-%v\"),\n\t\t\t\tzero : defaults\n\t\t\t};\n\n\t\t}\n\t\t// Otherwise, assume format was fine:\n\t\treturn format;\n\t}\n\n\n\t/* --- API Methods --- */\n\n\t/**\n\t * Takes a string/array of strings, removes all formatting/cruft and returns the raw float value\n\t * Alias: `accounting.parse(string)`\n\t *\n\t * Decimal must be included in the regular expression to match floats (defaults to\n\t * accounting.settings.number.decimal), so if the number uses a non-standard decimal \n\t * separator, provide it as the second argument.\n\t *\n\t * Also matches bracketed negatives (eg. \"$ (1.99)\" => -1.99)\n\t *\n\t * Doesn't throw any errors (`NaN`s become 0) but this may change in future\n\t */\n\tvar unformat = lib.unformat = lib.parse = function(value, decimal) {\n\t\t// Recursively unformat arrays:\n\t\tif (isArray(value)) {\n\t\t\treturn map(value, function(val) {\n\t\t\t\treturn unformat(val, decimal);\n\t\t\t});\n\t\t}\n\n\t\t// Fails silently (need decent errors):\n\t\tvalue = value || 0;\n\n\t\t// Return the value as-is if it's already a number:\n\t\tif (typeof value === \"number\") return value;\n\n\t\t// Default decimal point comes from settings, but could be set to eg. \",\" in opts:\n\t\tdecimal = decimal || lib.settings.number.decimal;\n\n\t\t // Build regex to strip out everything except digits, decimal point and minus sign:\n\t\tvar regex = new RegExp(\"[^0-9-\" + decimal + \"]\", [\"g\"]),\n\t\t\tunformatted = parseFloat(\n\t\t\t\t(\"\" + value)\n\t\t\t\t.replace(/\\((?=\\d+)(.*)\\)/, \"-$1\") // replace bracketed values with negatives\n\t\t\t\t.replace(regex, '')         // strip out any cruft\n\t\t\t\t.replace(decimal, '.')      // make sure decimal point is standard\n\t\t\t);\n\n\t\t// This will fail silently which may cause trouble, let's wait and see:\n\t\treturn !isNaN(unformatted) ? unformatted : 0;\n\t};\n\n\n\t/**\n\t * Implementation of toFixed() that treats floats more like decimals\n\t *\n\t * Fixes binary rounding issues (eg. (0.615).toFixed(2) === \"0.61\") that present\n\t * problems for accounting- and finance-related software.\n\t */\n\tvar toFixed = lib.toFixed = function(value, precision) {\n\t\tprecision = checkPrecision(precision, lib.settings.number.precision);\n\n\t\tvar exponentialForm = Number(lib.unformat(value) + 'e' + precision);\n\t\tvar rounded = Math.round(exponentialForm);\n\t\tvar finalResult = Number(rounded + 'e-' + precision).toFixed(precision);\n\t\treturn finalResult;\n\t};\n\n\n\t/**\n\t * Format a number, with comma-separated thousands and custom precision/decimal places\n\t * Alias: `accounting.format()`\n\t *\n\t * Localise by overriding the precision and thousand / decimal separators\n\t * 2nd parameter `precision` can be an object matching `settings.number`\n\t */\n\tvar formatNumber = lib.formatNumber = lib.format = function(number, precision, thousand, decimal) {\n\t\t// Resursively format arrays:\n\t\tif (isArray(number)) {\n\t\t\treturn map(number, function(val) {\n\t\t\t\treturn formatNumber(val, precision, thousand, decimal);\n\t\t\t});\n\t\t}\n\n\t\t// Clean up number:\n\t\tnumber = unformat(number);\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(precision) ? precision : {\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal\n\t\t\t\t}),\n\t\t\t\tlib.settings.number\n\t\t\t),\n\n\t\t\t// Clean up precision\n\t\t\tusePrecision = checkPrecision(opts.precision),\n\n\t\t\t// Do some calc:\n\t\t\tnegative = number < 0 ? \"-\" : \"\",\n\t\t\tbase = parseInt(toFixed(Math.abs(number || 0), usePrecision), 10) + \"\",\n\t\t\tmod = base.length > 3 ? base.length % 3 : 0;\n\n\t\t// Format the number:\n\t\treturn negative + (mod ? base.substr(0, mod) + opts.thousand : \"\") + base.substr(mod).replace(/(\\d{3})(?=\\d)/g, \"$1\" + opts.thousand) + (usePrecision ? opts.decimal + toFixed(Math.abs(number), usePrecision).split('.')[1] : \"\");\n\t};\n\n\n\t/**\n\t * Format a number into currency\n\t *\n\t * Usage: accounting.formatMoney(number, symbol, precision, thousandsSep, decimalSep, format)\n\t * defaults: (0, \"$\", 2, \",\", \".\", \"%s%v\")\n\t *\n\t * Localise by overriding the symbol, precision, thousand / decimal separators and format\n\t * Second param can be an object matching `settings.currency` which is the easiest way.\n\t *\n\t * To do: tidy up the parameters\n\t */\n\tvar formatMoney = lib.formatMoney = function(number, symbol, precision, thousand, decimal, format) {\n\t\t// Resursively format arrays:\n\t\tif (isArray(number)) {\n\t\t\treturn map(number, function(val){\n\t\t\t\treturn formatMoney(val, symbol, precision, thousand, decimal, format);\n\t\t\t});\n\t\t}\n\n\t\t// Clean up number:\n\t\tnumber = unformat(number);\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(symbol) ? symbol : {\n\t\t\t\t\tsymbol : symbol,\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal,\n\t\t\t\t\tformat : format\n\t\t\t\t}),\n\t\t\t\tlib.settings.currency\n\t\t\t),\n\n\t\t\t// Check format (returns object with pos, neg and zero):\n\t\t\tformats = checkCurrencyFormat(opts.format),\n\n\t\t\t// Choose which format to use for this value:\n\t\t\tuseFormat = number > 0 ? formats.pos : number < 0 ? formats.neg : formats.zero;\n\n\t\t// Return with currency symbol added:\n\t\treturn useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(number), checkPrecision(opts.precision), opts.thousand, opts.decimal));\n\t};\n\n\n\t/**\n\t * Format a list of numbers into an accounting column, padding with whitespace\n\t * to line up currency symbols, thousand separators and decimals places\n\t *\n\t * List should be an array of numbers\n\t * Second parameter can be an object containing keys that match the params\n\t *\n\t * Returns array of accouting-formatted number strings of same length\n\t *\n\t * NB: `white-space:pre` CSS rule is required on the list container to prevent\n\t * browsers from collapsing the whitespace in the output strings.\n\t */\n\tlib.formatColumn = function(list, symbol, precision, thousand, decimal, format) {\n\t\tif (!list || !isArray(list)) return [];\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(symbol) ? symbol : {\n\t\t\t\t\tsymbol : symbol,\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal,\n\t\t\t\t\tformat : format\n\t\t\t\t}),\n\t\t\t\tlib.settings.currency\n\t\t\t),\n\n\t\t\t// Check format (returns object with pos, neg and zero), only need pos for now:\n\t\t\tformats = checkCurrencyFormat(opts.format),\n\n\t\t\t// Whether to pad at start of string or after currency symbol:\n\t\t\tpadAfterSymbol = formats.pos.indexOf(\"%s\") < formats.pos.indexOf(\"%v\") ? true : false,\n\n\t\t\t// Store value for the length of the longest string in the column:\n\t\t\tmaxLength = 0,\n\n\t\t\t// Format the list according to options, store the length of the longest string:\n\t\t\tformatted = map(list, function(val, i) {\n\t\t\t\tif (isArray(val)) {\n\t\t\t\t\t// Recursively format columns if list is a multi-dimensional array:\n\t\t\t\t\treturn lib.formatColumn(val, opts);\n\t\t\t\t} else {\n\t\t\t\t\t// Clean up the value\n\t\t\t\t\tval = unformat(val);\n\n\t\t\t\t\t// Choose which format to use for this value (pos, neg or zero):\n\t\t\t\t\tvar useFormat = val > 0 ? formats.pos : val < 0 ? formats.neg : formats.zero,\n\n\t\t\t\t\t\t// Format this value, push into formatted list and save the length:\n\t\t\t\t\t\tfVal = useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(val), checkPrecision(opts.precision), opts.thousand, opts.decimal));\n\n\t\t\t\t\tif (fVal.length > maxLength) maxLength = fVal.length;\n\t\t\t\t\treturn fVal;\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Pad each number in the list and send back the column of numbers:\n\t\treturn map(formatted, function(val, i) {\n\t\t\t// Only if this is a string (not a nested array, which would have already been padded):\n\t\t\tif (isString(val) && val.length < maxLength) {\n\t\t\t\t// Depending on symbol position, pad after symbol or at index 0:\n\t\t\t\treturn padAfterSymbol ? val.replace(opts.symbol, opts.symbol+(new Array(maxLength - val.length + 1).join(\" \"))) : (new Array(maxLength - val.length + 1).join(\" \")) + val;\n\t\t\t}\n\t\t\treturn val;\n\t\t});\n\t};\n\n\n\t/* --- Module Definition --- */\n\n\t// Export accounting for CommonJS. If being loaded as an AMD module, define it as such.\n\t// Otherwise, just add `accounting` to the global object\n\tif (typeof exports !== 'undefined') {\n\t\tif (typeof module !== 'undefined' && module.exports) {\n\t\t\texports = module.exports = lib;\n\t\t}\n\t\texports.accounting = lib;\n\t} else if (typeof define === 'function' && define.amd) {\n\t\t// Return the library as an AMD module:\n\t\tdefine([], function() {\n\t\t\treturn lib;\n\t\t});\n\t} else {\n\t\t// Use accounting.noConflict to restore `accounting` back to its original value.\n\t\t// Returns a reference to the library's `accounting` object;\n\t\t// e.g. `var numbers = accounting.noConflict();`\n\t\tlib.noConflict = (function(oldAccounting) {\n\t\t\treturn function() {\n\t\t\t\t// Reset the value of the root's `accounting` variable:\n\t\t\t\troot.accounting = oldAccounting;\n\t\t\t\t// Delete the noConflict method:\n\t\t\t\tlib.noConflict = undefined;\n\t\t\t\t// Return reference to the library to re-assign it:\n\t\t\t\treturn lib;\n\t\t\t};\n\t\t})(root.accounting);\n\n\t\t// Declare `fx` on the root (global/window) object:\n\t\troot['accounting'] = lib;\n\t}\n\n\t// Root will be `window` in browser or `global` on the server:\n}(this));\n","const Utils = require(\"./util\");\nconst pth = require(\"path\");\nconst ZipEntry = require(\"./zipEntry\");\nconst ZipFile = require(\"./zipFile\");\n\nconst get_Bool = (val, def) => (typeof val === \"boolean\" ? val : def);\nconst get_Str = (val, def) => (typeof val === \"string\" ? val : def);\n\nconst defaultOptions = {\n    // option \"noSort\" : if true it disables files sorting\n    noSort: false,\n    // read entries during load (initial loading may be slower)\n    readEntries: false,\n    // default method is none\n    method: Utils.Constants.NONE,\n    // file system\n    fs: null\n};\n\nmodule.exports = function (/**String*/ input, /** object */ options) {\n    let inBuffer = null;\n\n    // create object based default options, allowing them to be overwritten\n    const opts = Object.assign(Object.create(null), defaultOptions);\n\n    // test input variable\n    if (input && \"object\" === typeof input) {\n        // if value is not buffer we accept it to be object with options\n        if (!(input instanceof Uint8Array)) {\n            Object.assign(opts, input);\n            input = opts.input ? opts.input : undefined;\n            if (opts.input) delete opts.input;\n        }\n\n        // if input is buffer\n        if (Buffer.isBuffer(input)) {\n            inBuffer = input;\n            opts.method = Utils.Constants.BUFFER;\n            input = undefined;\n        }\n    }\n\n    // assign options\n    Object.assign(opts, options);\n\n    // instanciate utils filesystem\n    const filetools = new Utils(opts);\n\n    // if input is file name we retrieve its content\n    if (input && \"string\" === typeof input) {\n        // load zip file\n        if (filetools.fs.existsSync(input)) {\n            opts.method = Utils.Constants.FILE;\n            opts.filename = input;\n            inBuffer = filetools.fs.readFileSync(input);\n        } else {\n            throw new Error(Utils.Errors.INVALID_FILENAME);\n        }\n    }\n\n    // create variable\n    const _zip = new ZipFile(inBuffer, opts);\n\n    const { canonical, sanitize } = Utils;\n\n    function getEntry(/**Object*/ entry) {\n        if (entry && _zip) {\n            var item;\n            // If entry was given as a file name\n            if (typeof entry === \"string\") item = _zip.getEntry(entry);\n            // if entry was given as a ZipEntry object\n            if (typeof entry === \"object\" && typeof entry.entryName !== \"undefined\" && typeof entry.header !== \"undefined\") item = _zip.getEntry(entry.entryName);\n\n            if (item) {\n                return item;\n            }\n        }\n        return null;\n    }\n\n    function fixPath(zipPath) {\n        const { join, normalize, sep } = pth.posix;\n        // convert windows file separators and normalize\n        return join(\".\", normalize(sep + zipPath.split(\"\\\\\").join(sep) + sep));\n    }\n\n    return {\n        /**\n         * Extracts the given entry from the archive and returns the content as a Buffer object\n         * @param entry ZipEntry object or String with the full path of the entry\n         *\n         * @return Buffer or Null in case of error\n         */\n        readFile: function (/**Object*/ entry, /*String, Buffer*/ pass) {\n            var item = getEntry(entry);\n            return (item && item.getData(pass)) || null;\n        },\n\n        /**\n         * Asynchronous readFile\n         * @param entry ZipEntry object or String with the full path of the entry\n         * @param callback\n         *\n         * @return Buffer or Null in case of error\n         */\n        readFileAsync: function (/**Object*/ entry, /**Function*/ callback) {\n            var item = getEntry(entry);\n            if (item) {\n                item.getDataAsync(callback);\n            } else {\n                callback(null, \"getEntry failed for:\" + entry);\n            }\n        },\n\n        /**\n         * Extracts the given entry from the archive and returns the content as plain text in the given encoding\n         * @param entry ZipEntry object or String with the full path of the entry\n         * @param encoding Optional. If no encoding is specified utf8 is used\n         *\n         * @return String\n         */\n        readAsText: function (/**Object*/ entry, /**String=*/ encoding) {\n            var item = getEntry(entry);\n            if (item) {\n                var data = item.getData();\n                if (data && data.length) {\n                    return data.toString(encoding || \"utf8\");\n                }\n            }\n            return \"\";\n        },\n\n        /**\n         * Asynchronous readAsText\n         * @param entry ZipEntry object or String with the full path of the entry\n         * @param callback\n         * @param encoding Optional. If no encoding is specified utf8 is used\n         *\n         * @return String\n         */\n        readAsTextAsync: function (/**Object*/ entry, /**Function*/ callback, /**String=*/ encoding) {\n            var item = getEntry(entry);\n            if (item) {\n                item.getDataAsync(function (data, err) {\n                    if (err) {\n                        callback(data, err);\n                        return;\n                    }\n\n                    if (data && data.length) {\n                        callback(data.toString(encoding || \"utf8\"));\n                    } else {\n                        callback(\"\");\n                    }\n                });\n            } else {\n                callback(\"\");\n            }\n        },\n\n        /**\n         * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory\n         *\n         * @param entry\n         */\n        deleteFile: function (/**Object*/ entry) {\n            // @TODO: test deleteFile\n            var item = getEntry(entry);\n            if (item) {\n                _zip.deleteEntry(item.entryName);\n            }\n        },\n\n        /**\n         * Adds a comment to the zip. The zip must be rewritten after adding the comment.\n         *\n         * @param comment\n         */\n        addZipComment: function (/**String*/ comment) {\n            // @TODO: test addZipComment\n            _zip.comment = comment;\n        },\n\n        /**\n         * Returns the zip comment\n         *\n         * @return String\n         */\n        getZipComment: function () {\n            return _zip.comment || \"\";\n        },\n\n        /**\n         * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment\n         * The comment cannot exceed 65535 characters in length\n         *\n         * @param entry\n         * @param comment\n         */\n        addZipEntryComment: function (/**Object*/ entry, /**String*/ comment) {\n            var item = getEntry(entry);\n            if (item) {\n                item.comment = comment;\n            }\n        },\n\n        /**\n         * Returns the comment of the specified entry\n         *\n         * @param entry\n         * @return String\n         */\n        getZipEntryComment: function (/**Object*/ entry) {\n            var item = getEntry(entry);\n            if (item) {\n                return item.comment || \"\";\n            }\n            return \"\";\n        },\n\n        /**\n         * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content\n         *\n         * @param entry\n         * @param content\n         */\n        updateFile: function (/**Object*/ entry, /**Buffer*/ content) {\n            var item = getEntry(entry);\n            if (item) {\n                item.setData(content);\n            }\n        },\n\n        /**\n         * Adds a file from the disk to the archive\n         *\n         * @param localPath File to add to zip\n         * @param zipPath Optional path inside the zip\n         * @param zipName Optional name for the file\n         */\n        addLocalFile: function (/**String*/ localPath, /**String=*/ zipPath, /**String=*/ zipName, /**String*/ comment) {\n            if (filetools.fs.existsSync(localPath)) {\n                // fix ZipPath\n                zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n                // p - local file name\n                var p = localPath.split(\"\\\\\").join(\"/\").split(\"/\").pop();\n\n                // add file name into zippath\n                zipPath += zipName ? zipName : p;\n\n                // read file attributes\n                const _attr = filetools.fs.statSync(localPath);\n\n                // add file into zip file\n                this.addFile(zipPath, filetools.fs.readFileSync(localPath), comment, _attr);\n            } else {\n                throw new Error(Utils.Errors.FILE_NOT_FOUND.replace(\"%s\", localPath));\n            }\n        },\n\n        /**\n         * Adds a local directory and all its nested files and directories to the archive\n         *\n         * @param localPath\n         * @param zipPath optional path inside zip\n         * @param filter optional RegExp or Function if files match will\n         *               be included.\n         */\n        addLocalFolder: function (/**String*/ localPath, /**String=*/ zipPath, /**=RegExp|Function*/ filter) {\n            // Prepare filter\n            if (filter instanceof RegExp) {\n                // if filter is RegExp wrap it\n                filter = (function (rx) {\n                    return function (filename) {\n                        return rx.test(filename);\n                    };\n                })(filter);\n            } else if (\"function\" !== typeof filter) {\n                // if filter is not function we will replace it\n                filter = function () {\n                    return true;\n                };\n            }\n\n            // fix ZipPath\n            zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n            // normalize the path first\n            localPath = pth.normalize(localPath);\n\n            if (filetools.fs.existsSync(localPath)) {\n                const items = filetools.findFiles(localPath);\n                const self = this;\n\n                if (items.length) {\n                    items.forEach(function (filepath) {\n                        var p = pth.relative(localPath, filepath).split(\"\\\\\").join(\"/\"); //windows fix\n                        if (filter(p)) {\n                            var stats = filetools.fs.statSync(filepath);\n                            if (stats.isFile()) {\n                                self.addFile(zipPath + p, filetools.fs.readFileSync(filepath), \"\", stats);\n                            } else {\n                                self.addFile(zipPath + p + \"/\", Buffer.alloc(0), \"\", stats);\n                            }\n                        }\n                    });\n                }\n            } else {\n                throw new Error(Utils.Errors.FILE_NOT_FOUND.replace(\"%s\", localPath));\n            }\n        },\n\n        /**\n         * Asynchronous addLocalFile\n         * @param localPath\n         * @param callback\n         * @param zipPath optional path inside zip\n         * @param filter optional RegExp or Function if files match will\n         *               be included.\n         */\n        addLocalFolderAsync: function (/*String*/ localPath, /*Function*/ callback, /*String*/ zipPath, /*RegExp|Function*/ filter) {\n            if (filter instanceof RegExp) {\n                filter = (function (rx) {\n                    return function (filename) {\n                        return rx.test(filename);\n                    };\n                })(filter);\n            } else if (\"function\" !== typeof filter) {\n                filter = function () {\n                    return true;\n                };\n            }\n\n            // fix ZipPath\n            zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n            // normalize the path first\n            localPath = pth.normalize(localPath);\n\n            var self = this;\n            filetools.fs.open(localPath, \"r\", function (err) {\n                if (err && err.code === \"ENOENT\") {\n                    callback(undefined, Utils.Errors.FILE_NOT_FOUND.replace(\"%s\", localPath));\n                } else if (err) {\n                    callback(undefined, err);\n                } else {\n                    var items = filetools.findFiles(localPath);\n                    var i = -1;\n\n                    var next = function () {\n                        i += 1;\n                        if (i < items.length) {\n                            var filepath = items[i];\n                            var p = pth.relative(localPath, filepath).split(\"\\\\\").join(\"/\"); //windows fix\n                            p = p\n                                .normalize(\"NFD\")\n                                .replace(/[\\u0300-\\u036f]/g, \"\")\n                                .replace(/[^\\x20-\\x7E]/g, \"\"); // accent fix\n                            if (filter(p)) {\n                                filetools.fs.stat(filepath, function (er0, stats) {\n                                    if (er0) callback(undefined, er0);\n                                    if (stats.isFile()) {\n                                        filetools.fs.readFile(filepath, function (er1, data) {\n                                            if (er1) {\n                                                callback(undefined, er1);\n                                            } else {\n                                                self.addFile(zipPath + p, data, \"\", stats);\n                                                next();\n                                            }\n                                        });\n                                    } else {\n                                        self.addFile(zipPath + p + \"/\", Buffer.alloc(0), \"\", stats);\n                                        next();\n                                    }\n                                });\n                            } else {\n                                next();\n                            }\n                        } else {\n                            callback(true, undefined);\n                        }\n                    };\n\n                    next();\n                }\n            });\n        },\n\n        /**\n         *\n         * @param {string} localPath - path where files will be extracted\n         * @param {object} props - optional properties\n         * @param {string} props.zipPath - optional path inside zip\n         * @param {regexp, function} props.filter - RegExp or Function if files match will be included.\n         */\n        addLocalFolderPromise: function (/*String*/ localPath, /* object */ props) {\n            return new Promise((resolve, reject) => {\n                const { filter, zipPath } = Object.assign({}, props);\n                this.addLocalFolderAsync(\n                    localPath,\n                    (done, err) => {\n                        if (err) reject(err);\n                        if (done) resolve(this);\n                    },\n                    zipPath,\n                    filter\n                );\n            });\n        },\n\n        /**\n         * Allows you to create a entry (file or directory) in the zip file.\n         * If you want to create a directory the entryName must end in / and a null buffer should be provided.\n         * Comment and attributes are optional\n         *\n         * @param {string} entryName\n         * @param {Buffer | string} content - file content as buffer or utf8 coded string\n         * @param {string} comment - file comment\n         * @param {number | object} attr - number as unix file permissions, object as filesystem Stats object\n         */\n        addFile: function (/**String*/ entryName, /**Buffer*/ content, /**String*/ comment, /**Number*/ attr) {\n            let entry = getEntry(entryName);\n            const update = entry != null;\n\n            // prepare new entry\n            if (!update) {\n                entry = new ZipEntry();\n                entry.entryName = entryName;\n            }\n            entry.comment = comment || \"\";\n\n            const isStat = \"object\" === typeof attr && attr instanceof filetools.fs.Stats;\n\n            // last modification time from file stats\n            if (isStat) {\n                entry.header.time = attr.mtime;\n            }\n\n            // Set file attribute\n            var fileattr = entry.isDirectory ? 0x10 : 0; // (MS-DOS directory flag)\n\n            // extended attributes field for Unix\n            if (!Utils.isWin) {\n                // set file type either S_IFDIR / S_IFREG\n                let unix = entry.isDirectory ? 0x4000 : 0x8000;\n\n                if (isStat) {\n                    // File attributes from file stats\n                    unix |= 0xfff & attr.mode;\n                } else if (\"number\" === typeof attr) {\n                    // attr from given attr values\n                    unix |= 0xfff & attr;\n                } else {\n                    // Default values:\n                    unix |= entry.isDirectory ? 0o755 : 0o644; // permissions (drwxr-xr-x) or (-r-wr--r--)\n                }\n\n                fileattr = (fileattr | (unix << 16)) >>> 0; // add attributes\n            }\n\n            entry.attr = fileattr;\n\n            entry.setData(content);\n            if (!update) _zip.setEntry(entry);\n        },\n\n        /**\n         * Returns an array of ZipEntry objects representing the files and folders inside the archive\n         *\n         * @return Array\n         */\n        getEntries: function () {\n            return _zip ? _zip.entries : [];\n        },\n\n        /**\n         * Returns a ZipEntry object representing the file or folder specified by ``name``.\n         *\n         * @param name\n         * @return ZipEntry\n         */\n        getEntry: function (/**String*/ name) {\n            return getEntry(name);\n        },\n\n        getEntryCount: function () {\n            return _zip.getEntryCount();\n        },\n\n        forEach: function (callback) {\n            return _zip.forEach(callback);\n        },\n\n        /**\n         * Extracts the given entry to the given targetPath\n         * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted\n         *\n         * @param entry ZipEntry object or String with the full path of the entry\n         * @param targetPath Target folder where to write the file\n         * @param maintainEntryPath If maintainEntryPath is true and the entry is inside a folder, the entry folder\n         *                          will be created in targetPath as well. Default is TRUE\n         * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.\n         *                  Default is FALSE\n         * @param keepOriginalPermission The file will be set as the permission from the entry if this is true.\n         *                  Default is FALSE\n         * @param outFileName String If set will override the filename of the extracted file (Only works if the entry is a file)\n         *\n         * @return Boolean\n         */\n        extractEntryTo: function (\n            /**Object*/ entry,\n            /**String*/ targetPath,\n            /**Boolean*/ maintainEntryPath,\n            /**Boolean*/ overwrite,\n            /**Boolean*/ keepOriginalPermission,\n            /**String**/ outFileName\n        ) {\n            overwrite = get_Bool(overwrite, false);\n            keepOriginalPermission = get_Bool(keepOriginalPermission, false);\n            maintainEntryPath = get_Bool(maintainEntryPath, true);\n            outFileName = get_Str(outFileName, get_Str(keepOriginalPermission, undefined));\n\n            var item = getEntry(entry);\n            if (!item) {\n                throw new Error(Utils.Errors.NO_ENTRY);\n            }\n\n            var entryName = canonical(item.entryName);\n\n            var target = sanitize(targetPath, outFileName && !item.isDirectory ? outFileName : maintainEntryPath ? entryName : pth.basename(entryName));\n\n            if (item.isDirectory) {\n                var children = _zip.getEntryChildren(item);\n                children.forEach(function (child) {\n                    if (child.isDirectory) return;\n                    var content = child.getData();\n                    if (!content) {\n                        throw new Error(Utils.Errors.CANT_EXTRACT_FILE);\n                    }\n                    var name = canonical(child.entryName);\n                    var childName = sanitize(targetPath, maintainEntryPath ? name : pth.basename(name));\n                    // The reverse operation for attr depend on method addFile()\n                    const fileAttr = keepOriginalPermission ? child.header.fileAttr : undefined;\n                    filetools.writeFileTo(childName, content, overwrite, fileAttr);\n                });\n                return true;\n            }\n\n            var content = item.getData();\n            if (!content) throw new Error(Utils.Errors.CANT_EXTRACT_FILE);\n\n            if (filetools.fs.existsSync(target) && !overwrite) {\n                throw new Error(Utils.Errors.CANT_OVERRIDE);\n            }\n            // The reverse operation for attr depend on method addFile()\n            const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n            filetools.writeFileTo(target, content, overwrite, fileAttr);\n\n            return true;\n        },\n\n        /**\n         * Test the archive\n         *\n         */\n        test: function (pass) {\n            if (!_zip) {\n                return false;\n            }\n\n            for (var entry in _zip.entries) {\n                try {\n                    if (entry.isDirectory) {\n                        continue;\n                    }\n                    var content = _zip.entries[entry].getData(pass);\n                    if (!content) {\n                        return false;\n                    }\n                } catch (err) {\n                    return false;\n                }\n            }\n            return true;\n        },\n\n        /**\n         * Extracts the entire archive to the given location\n         *\n         * @param targetPath Target location\n         * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.\n         *                  Default is FALSE\n         * @param keepOriginalPermission The file will be set as the permission from the entry if this is true.\n         *                  Default is FALSE\n         */\n        extractAllTo: function (/**String*/ targetPath, /**Boolean*/ overwrite, /**Boolean*/ keepOriginalPermission, /*String, Buffer*/ pass) {\n            overwrite = get_Bool(overwrite, false);\n            pass = get_Str(keepOriginalPermission, pass);\n            keepOriginalPermission = get_Bool(keepOriginalPermission, false);\n            if (!_zip) {\n                throw new Error(Utils.Errors.NO_ZIP);\n            }\n            _zip.entries.forEach(function (entry) {\n                var entryName = sanitize(targetPath, canonical(entry.entryName.toString()));\n                if (entry.isDirectory) {\n                    filetools.makeDir(entryName);\n                    return;\n                }\n                var content = entry.getData(pass);\n                if (!content) {\n                    throw new Error(Utils.Errors.CANT_EXTRACT_FILE);\n                }\n                // The reverse operation for attr depend on method addFile()\n                const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n                filetools.writeFileTo(entryName, content, overwrite, fileAttr);\n                try {\n                    filetools.fs.utimesSync(entryName, entry.header.time, entry.header.time);\n                } catch (err) {\n                    throw new Error(Utils.Errors.CANT_EXTRACT_FILE);\n                }\n            });\n        },\n\n        /**\n         * Asynchronous extractAllTo\n         *\n         * @param targetPath Target location\n         * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.\n         *                  Default is FALSE\n         * @param keepOriginalPermission The file will be set as the permission from the entry if this is true.\n         *                  Default is FALSE\n         * @param callback The callback will be executed when all entries are extracted successfully or any error is thrown.\n         */\n        extractAllToAsync: function (/**String*/ targetPath, /**Boolean*/ overwrite, /**Boolean*/ keepOriginalPermission, /**Function*/ callback) {\n            if (!callback) {\n                callback = function () {};\n            }\n            overwrite = get_Bool(overwrite, false);\n            if (typeof keepOriginalPermission === \"function\" && !callback) callback = keepOriginalPermission;\n            keepOriginalPermission = get_Bool(keepOriginalPermission, false);\n            if (!_zip) {\n                callback(new Error(Utils.Errors.NO_ZIP));\n                return;\n            }\n\n            targetPath = pth.resolve(targetPath);\n            // convert entryName to\n            const getPath = (entry) => sanitize(targetPath, pth.normalize(canonical(entry.entryName.toString())));\n            const getError = (msg, file) => new Error(msg + ': \"' + file + '\"');\n\n            // separate directories from files\n            const dirEntries = [];\n            const fileEntries = new Set();\n            _zip.entries.forEach((e) => {\n                if (e.isDirectory) {\n                    dirEntries.push(e);\n                } else {\n                    fileEntries.add(e);\n                }\n            });\n\n            // Create directory entries first synchronously\n            // this prevents race condition and assures folders are there before writing files\n            for (const entry of dirEntries) {\n                const dirPath = getPath(entry);\n                // The reverse operation for attr depend on method addFile()\n                const dirAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n                try {\n                    filetools.makeDir(dirPath);\n                    if (dirAttr) filetools.fs.chmodSync(dirPath, dirAttr);\n                    // in unix timestamp will change if files are later added to folder, but still\n                    filetools.fs.utimesSync(dirPath, entry.header.time, entry.header.time);\n                } catch (er) {\n                    callback(getError(\"Unable to create folder\", dirPath));\n                }\n            }\n\n            // callback wrapper, for some house keeping\n            const done = () => {\n                if (fileEntries.size === 0) {\n                    callback();\n                }\n            };\n\n            // Extract file entries asynchronously\n            for (const entry of fileEntries.values()) {\n                const entryName = pth.normalize(canonical(entry.entryName.toString()));\n                const filePath = sanitize(targetPath, entryName);\n                entry.getDataAsync(function (content, err_1) {\n                    if (err_1) {\n                        callback(new Error(err_1));\n                        return;\n                    }\n                    if (!content) {\n                        callback(new Error(Utils.Errors.CANT_EXTRACT_FILE));\n                    } else {\n                        // The reverse operation for attr depend on method addFile()\n                        const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n                        filetools.writeFileToAsync(filePath, content, overwrite, fileAttr, function (succ) {\n                            if (!succ) {\n                                callback(getError(\"Unable to write file\", filePath));\n                                return;\n                            }\n                            filetools.fs.utimes(filePath, entry.header.time, entry.header.time, function (err_2) {\n                                if (err_2) {\n                                    callback(getError(\"Unable to set times\", filePath));\n                                    return;\n                                }\n                                fileEntries.delete(entry);\n                                // call the callback if it was last entry\n                                done();\n                            });\n                        });\n                    }\n                });\n            }\n            // call the callback if fileEntries was empty\n            done();\n        },\n\n        /**\n         * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip\n         *\n         * @param targetFileName\n         * @param callback\n         */\n        writeZip: function (/**String*/ targetFileName, /**Function*/ callback) {\n            if (arguments.length === 1) {\n                if (typeof targetFileName === \"function\") {\n                    callback = targetFileName;\n                    targetFileName = \"\";\n                }\n            }\n\n            if (!targetFileName && opts.filename) {\n                targetFileName = opts.filename;\n            }\n            if (!targetFileName) return;\n\n            var zipData = _zip.compressToBuffer();\n            if (zipData) {\n                var ok = filetools.writeFileTo(targetFileName, zipData, true);\n                if (typeof callback === \"function\") callback(!ok ? new Error(\"failed\") : null, \"\");\n            }\n        },\n\n        writeZipPromise: function (/**String*/ targetFileName, /* object */ props) {\n            const { overwrite, perm } = Object.assign({ overwrite: true }, props);\n\n            return new Promise((resolve, reject) => {\n                // find file name\n                if (!targetFileName && opts.filename) targetFileName = opts.filename;\n                if (!targetFileName) reject(\"ADM-ZIP: ZIP File Name Missing\");\n\n                this.toBufferPromise().then((zipData) => {\n                    const ret = (done) => (done ? resolve(done) : reject(\"ADM-ZIP: Wasn't able to write zip file\"));\n                    filetools.writeFileToAsync(targetFileName, zipData, overwrite, perm, ret);\n                }, reject);\n            });\n        },\n\n        toBufferPromise: function () {\n            return new Promise((resolve, reject) => {\n                _zip.toAsyncBuffer(resolve, reject);\n            });\n        },\n\n        /**\n         * Returns the content of the entire zip file as a Buffer object\n         *\n         * @return Buffer\n         */\n        toBuffer: function (/**Function=*/ onSuccess, /**Function=*/ onFail, /**Function=*/ onItemStart, /**Function=*/ onItemEnd) {\n            this.valueOf = 2;\n            if (typeof onSuccess === \"function\") {\n                _zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd);\n                return null;\n            }\n            return _zip.compressToBuffer();\n        }\n    };\n};\n","var Utils = require(\"../util\"),\n    Constants = Utils.Constants;\n\n/* The central directory file header */\nmodule.exports = function () {\n    var _verMade = 20, // v2.0\n        _version = 10, // v1.0\n        _flags = 0,\n        _method = 0,\n        _time = 0,\n        _crc = 0,\n        _compressedSize = 0,\n        _size = 0,\n        _fnameLen = 0,\n        _extraLen = 0,\n        _comLen = 0,\n        _diskStart = 0,\n        _inattr = 0,\n        _attr = 0,\n        _offset = 0;\n\n    _verMade |= Utils.isWin ? 0x0a00 : 0x0300;\n\n    // Set EFS flag since filename and comment fields are all by default encoded using UTF-8.\n    // Without it file names may be corrupted for other apps when file names use unicode chars\n    _flags |= Constants.FLG_EFS;\n\n    var _dataHeader = {};\n\n    function setTime(val) {\n        val = new Date(val);\n        _time =\n            (((val.getFullYear() - 1980) & 0x7f) << 25) | // b09-16 years from 1980\n            ((val.getMonth() + 1) << 21) | // b05-08 month\n            (val.getDate() << 16) | // b00-04 hour\n            // 2 bytes time\n            (val.getHours() << 11) | // b11-15 hour\n            (val.getMinutes() << 5) | // b05-10 minute\n            (val.getSeconds() >> 1); // b00-04 seconds divided by 2\n    }\n\n    setTime(+new Date());\n\n    return {\n        get made() {\n            return _verMade;\n        },\n        set made(val) {\n            _verMade = val;\n        },\n\n        get version() {\n            return _version;\n        },\n        set version(val) {\n            _version = val;\n        },\n\n        get flags() {\n            return _flags;\n        },\n        set flags(val) {\n            _flags = val;\n        },\n\n        get method() {\n            return _method;\n        },\n        set method(val) {\n            switch (val) {\n                case Constants.STORED:\n                    this.version = 10;\n                case Constants.DEFLATED:\n                default:\n                    this.version = 20;\n            }\n            _method = val;\n        },\n\n        get time() {\n            return new Date(((_time >> 25) & 0x7f) + 1980, ((_time >> 21) & 0x0f) - 1, (_time >> 16) & 0x1f, (_time >> 11) & 0x1f, (_time >> 5) & 0x3f, (_time & 0x1f) << 1);\n        },\n        set time(val) {\n            setTime(val);\n        },\n\n        get crc() {\n            return _crc;\n        },\n        set crc(val) {\n            _crc = Math.max(0, val) >>> 0;\n        },\n\n        get compressedSize() {\n            return _compressedSize;\n        },\n        set compressedSize(val) {\n            _compressedSize = Math.max(0, val) >>> 0;\n        },\n\n        get size() {\n            return _size;\n        },\n        set size(val) {\n            _size = Math.max(0, val) >>> 0;\n        },\n\n        get fileNameLength() {\n            return _fnameLen;\n        },\n        set fileNameLength(val) {\n            _fnameLen = val;\n        },\n\n        get extraLength() {\n            return _extraLen;\n        },\n        set extraLength(val) {\n            _extraLen = val;\n        },\n\n        get commentLength() {\n            return _comLen;\n        },\n        set commentLength(val) {\n            _comLen = val;\n        },\n\n        get diskNumStart() {\n            return _diskStart;\n        },\n        set diskNumStart(val) {\n            _diskStart = Math.max(0, val) >>> 0;\n        },\n\n        get inAttr() {\n            return _inattr;\n        },\n        set inAttr(val) {\n            _inattr = Math.max(0, val) >>> 0;\n        },\n\n        get attr() {\n            return _attr;\n        },\n        set attr(val) {\n            _attr = Math.max(0, val) >>> 0;\n        },\n\n        // get Unix file permissions\n        get fileAttr() {\n            return _attr ? (((_attr >>> 0) | 0) >> 16) & 0xfff : 0;\n        },\n\n        get offset() {\n            return _offset;\n        },\n        set offset(val) {\n            _offset = Math.max(0, val) >>> 0;\n        },\n\n        get encripted() {\n            return (_flags & 1) === 1;\n        },\n\n        get entryHeaderSize() {\n            return Constants.CENHDR + _fnameLen + _extraLen + _comLen;\n        },\n\n        get realDataOffset() {\n            return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen;\n        },\n\n        get dataHeader() {\n            return _dataHeader;\n        },\n\n        loadDataHeaderFromBinary: function (/*Buffer*/ input) {\n            var data = input.slice(_offset, _offset + Constants.LOCHDR);\n            // 30 bytes and should start with \"PK\\003\\004\"\n            if (data.readUInt32LE(0) !== Constants.LOCSIG) {\n                throw new Error(Utils.Errors.INVALID_LOC);\n            }\n            _dataHeader = {\n                // version needed to extract\n                version: data.readUInt16LE(Constants.LOCVER),\n                // general purpose bit flag\n                flags: data.readUInt16LE(Constants.LOCFLG),\n                // compression method\n                method: data.readUInt16LE(Constants.LOCHOW),\n                // modification time (2 bytes time, 2 bytes date)\n                time: data.readUInt32LE(Constants.LOCTIM),\n                // uncompressed file crc-32 value\n                crc: data.readUInt32LE(Constants.LOCCRC),\n                // compressed size\n                compressedSize: data.readUInt32LE(Constants.LOCSIZ),\n                // uncompressed size\n                size: data.readUInt32LE(Constants.LOCLEN),\n                // filename length\n                fnameLen: data.readUInt16LE(Constants.LOCNAM),\n                // extra field length\n                extraLen: data.readUInt16LE(Constants.LOCEXT)\n            };\n        },\n\n        loadFromBinary: function (/*Buffer*/ data) {\n            // data should be 46 bytes and start with \"PK 01 02\"\n            if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) {\n                throw new Error(Utils.Errors.INVALID_CEN);\n            }\n            // version made by\n            _verMade = data.readUInt16LE(Constants.CENVEM);\n            // version needed to extract\n            _version = data.readUInt16LE(Constants.CENVER);\n            // encrypt, decrypt flags\n            _flags = data.readUInt16LE(Constants.CENFLG);\n            // compression method\n            _method = data.readUInt16LE(Constants.CENHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            _time = data.readUInt32LE(Constants.CENTIM);\n            // uncompressed file crc-32 value\n            _crc = data.readUInt32LE(Constants.CENCRC);\n            // compressed size\n            _compressedSize = data.readUInt32LE(Constants.CENSIZ);\n            // uncompressed size\n            _size = data.readUInt32LE(Constants.CENLEN);\n            // filename length\n            _fnameLen = data.readUInt16LE(Constants.CENNAM);\n            // extra field length\n            _extraLen = data.readUInt16LE(Constants.CENEXT);\n            // file comment length\n            _comLen = data.readUInt16LE(Constants.CENCOM);\n            // volume number start\n            _diskStart = data.readUInt16LE(Constants.CENDSK);\n            // internal file attributes\n            _inattr = data.readUInt16LE(Constants.CENATT);\n            // external file attributes\n            _attr = data.readUInt32LE(Constants.CENATX);\n            // LOC header offset\n            _offset = data.readUInt32LE(Constants.CENOFF);\n        },\n\n        dataHeaderToBinary: function () {\n            // LOC header size (30 bytes)\n            var data = Buffer.alloc(Constants.LOCHDR);\n            // \"PK\\003\\004\"\n            data.writeUInt32LE(Constants.LOCSIG, 0);\n            // version needed to extract\n            data.writeUInt16LE(_version, Constants.LOCVER);\n            // general purpose bit flag\n            data.writeUInt16LE(_flags, Constants.LOCFLG);\n            // compression method\n            data.writeUInt16LE(_method, Constants.LOCHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            data.writeUInt32LE(_time, Constants.LOCTIM);\n            // uncompressed file crc-32 value\n            data.writeUInt32LE(_crc, Constants.LOCCRC);\n            // compressed size\n            data.writeUInt32LE(_compressedSize, Constants.LOCSIZ);\n            // uncompressed size\n            data.writeUInt32LE(_size, Constants.LOCLEN);\n            // filename length\n            data.writeUInt16LE(_fnameLen, Constants.LOCNAM);\n            // extra field length\n            data.writeUInt16LE(_extraLen, Constants.LOCEXT);\n            return data;\n        },\n\n        entryHeaderToBinary: function () {\n            // CEN header size (46 bytes)\n            var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen);\n            // \"PK\\001\\002\"\n            data.writeUInt32LE(Constants.CENSIG, 0);\n            // version made by\n            data.writeUInt16LE(_verMade, Constants.CENVEM);\n            // version needed to extract\n            data.writeUInt16LE(_version, Constants.CENVER);\n            // encrypt, decrypt flags\n            data.writeUInt16LE(_flags, Constants.CENFLG);\n            // compression method\n            data.writeUInt16LE(_method, Constants.CENHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            data.writeUInt32LE(_time, Constants.CENTIM);\n            // uncompressed file crc-32 value\n            data.writeUInt32LE(_crc, Constants.CENCRC);\n            // compressed size\n            data.writeUInt32LE(_compressedSize, Constants.CENSIZ);\n            // uncompressed size\n            data.writeUInt32LE(_size, Constants.CENLEN);\n            // filename length\n            data.writeUInt16LE(_fnameLen, Constants.CENNAM);\n            // extra field length\n            data.writeUInt16LE(_extraLen, Constants.CENEXT);\n            // file comment length\n            data.writeUInt16LE(_comLen, Constants.CENCOM);\n            // volume number start\n            data.writeUInt16LE(_diskStart, Constants.CENDSK);\n            // internal file attributes\n            data.writeUInt16LE(_inattr, Constants.CENATT);\n            // external file attributes\n            data.writeUInt32LE(_attr, Constants.CENATX);\n            // LOC header offset\n            data.writeUInt32LE(_offset, Constants.CENOFF);\n            // fill all with\n            data.fill(0x00, Constants.CENHDR);\n            return data;\n        },\n\n        toJSON: function () {\n            const bytes = function (nr) {\n                return nr + \" bytes\";\n            };\n\n            return {\n                made: _verMade,\n                version: _version,\n                flags: _flags,\n                method: Utils.methodToString(_method),\n                time: this.time,\n                crc: \"0x\" + _crc.toString(16).toUpperCase(),\n                compressedSize: bytes(_compressedSize),\n                size: bytes(_size),\n                fileNameLength: bytes(_fnameLen),\n                extraLength: bytes(_extraLen),\n                commentLength: bytes(_comLen),\n                diskNumStart: _diskStart,\n                inAttr: _inattr,\n                attr: _attr,\n                offset: _offset,\n                entryHeaderSize: bytes(Constants.CENHDR + _fnameLen + _extraLen + _comLen)\n            };\n        },\n\n        toString: function () {\n            return JSON.stringify(this.toJSON(), null, \"\\t\");\n        }\n    };\n};\n","exports.EntryHeader = require(\"./entryHeader\");\nexports.MainHeader = require(\"./mainHeader\");\n","var Utils = require(\"../util\"),\n    Constants = Utils.Constants;\n\n/* The entries in the end of central directory */\nmodule.exports = function () {\n    var _volumeEntries = 0,\n        _totalEntries = 0,\n        _size = 0,\n        _offset = 0,\n        _commentLength = 0;\n\n    return {\n        get diskEntries() {\n            return _volumeEntries;\n        },\n        set diskEntries(/*Number*/ val) {\n            _volumeEntries = _totalEntries = val;\n        },\n\n        get totalEntries() {\n            return _totalEntries;\n        },\n        set totalEntries(/*Number*/ val) {\n            _totalEntries = _volumeEntries = val;\n        },\n\n        get size() {\n            return _size;\n        },\n        set size(/*Number*/ val) {\n            _size = val;\n        },\n\n        get offset() {\n            return _offset;\n        },\n        set offset(/*Number*/ val) {\n            _offset = val;\n        },\n\n        get commentLength() {\n            return _commentLength;\n        },\n        set commentLength(/*Number*/ val) {\n            _commentLength = val;\n        },\n\n        get mainHeaderSize() {\n            return Constants.ENDHDR + _commentLength;\n        },\n\n        loadFromBinary: function (/*Buffer*/ data) {\n            // data should be 22 bytes and start with \"PK 05 06\"\n            // or be 56+ bytes and start with \"PK 06 06\" for Zip64\n            if (\n                (data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG) &&\n                (data.length < Constants.ZIP64HDR || data.readUInt32LE(0) !== Constants.ZIP64SIG)\n            ) {\n                throw new Error(Utils.Errors.INVALID_END);\n            }\n\n            if (data.readUInt32LE(0) === Constants.ENDSIG) {\n                // number of entries on this volume\n                _volumeEntries = data.readUInt16LE(Constants.ENDSUB);\n                // total number of entries\n                _totalEntries = data.readUInt16LE(Constants.ENDTOT);\n                // central directory size in bytes\n                _size = data.readUInt32LE(Constants.ENDSIZ);\n                // offset of first CEN header\n                _offset = data.readUInt32LE(Constants.ENDOFF);\n                // zip file comment length\n                _commentLength = data.readUInt16LE(Constants.ENDCOM);\n            } else {\n                // number of entries on this volume\n                _volumeEntries = Utils.readBigUInt64LE(data, Constants.ZIP64SUB);\n                // total number of entries\n                _totalEntries = Utils.readBigUInt64LE(data, Constants.ZIP64TOT);\n                // central directory size in bytes\n                _size = Utils.readBigUInt64LE(data, Constants.ZIP64SIZ);\n                // offset of first CEN header\n                _offset = Utils.readBigUInt64LE(data, Constants.ZIP64OFF);\n\n                _commentLength = 0;\n            }\n        },\n\n        toBinary: function () {\n            var b = Buffer.alloc(Constants.ENDHDR + _commentLength);\n            // \"PK 05 06\" signature\n            b.writeUInt32LE(Constants.ENDSIG, 0);\n            b.writeUInt32LE(0, 4);\n            // number of entries on this volume\n            b.writeUInt16LE(_volumeEntries, Constants.ENDSUB);\n            // total number of entries\n            b.writeUInt16LE(_totalEntries, Constants.ENDTOT);\n            // central directory size in bytes\n            b.writeUInt32LE(_size, Constants.ENDSIZ);\n            // offset of first CEN header\n            b.writeUInt32LE(_offset, Constants.ENDOFF);\n            // zip file comment length\n            b.writeUInt16LE(_commentLength, Constants.ENDCOM);\n            // fill comment memory with spaces so no garbage is left there\n            b.fill(\" \", Constants.ENDHDR);\n\n            return b;\n        },\n\n        toJSON: function () {\n            // creates 0x0000 style output\n            const offset = function (nr, len) {\n                let offs = nr.toString(16).toUpperCase();\n                while (offs.length < len) offs = \"0\" + offs;\n                return \"0x\" + offs;\n            };\n\n            return {\n                diskEntries: _volumeEntries,\n                totalEntries: _totalEntries,\n                size: _size + \" bytes\",\n                offset: offset(_offset, 4),\n                commentLength: _commentLength\n            };\n        },\n\n        toString: function () {\n            return JSON.stringify(this.toJSON(), null, \"\\t\");\n        }\n    };\n};\n","module.exports = function (/*Buffer*/ inbuf) {\n    var zlib = require(\"zlib\");\n\n    var opts = { chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024 };\n\n    return {\n        deflate: function () {\n            return zlib.deflateRawSync(inbuf, opts);\n        },\n\n        deflateAsync: function (/*Function*/ callback) {\n            var tmp = zlib.createDeflateRaw(opts),\n                parts = [],\n                total = 0;\n            tmp.on(\"data\", function (data) {\n                parts.push(data);\n                total += data.length;\n            });\n            tmp.on(\"end\", function () {\n                var buf = Buffer.alloc(total),\n                    written = 0;\n                buf.fill(0);\n                for (var i = 0; i < parts.length; i++) {\n                    var part = parts[i];\n                    part.copy(buf, written);\n                    written += part.length;\n                }\n                callback && callback(buf);\n            });\n            tmp.end(inbuf);\n        }\n    };\n};\n","exports.Deflater = require(\"./deflater\");\nexports.Inflater = require(\"./inflater\");\nexports.ZipCrypto = require(\"./zipcrypto\");\n","module.exports = function (/*Buffer*/ inbuf) {\n    var zlib = require(\"zlib\");\n\n    return {\n        inflate: function () {\n            return zlib.inflateRawSync(inbuf);\n        },\n\n        inflateAsync: function (/*Function*/ callback) {\n            var tmp = zlib.createInflateRaw(),\n                parts = [],\n                total = 0;\n            tmp.on(\"data\", function (data) {\n                parts.push(data);\n                total += data.length;\n            });\n            tmp.on(\"end\", function () {\n                var buf = Buffer.alloc(total),\n                    written = 0;\n                buf.fill(0);\n                for (var i = 0; i < parts.length; i++) {\n                    var part = parts[i];\n                    part.copy(buf, written);\n                    written += part.length;\n                }\n                callback && callback(buf);\n            });\n            tmp.end(inbuf);\n        }\n    };\n};\n","\"use strict\";\n\n// node crypt, we use it for generate salt\n// eslint-disable-next-line node/no-unsupported-features/node-builtins\nconst { randomFillSync } = require(\"crypto\");\n\n// generate CRC32 lookup table\nconst crctable = new Uint32Array(256).map((t, crc) => {\n    for (let j = 0; j < 8; j++) {\n        if (0 !== (crc & 1)) {\n            crc = (crc >>> 1) ^ 0xedb88320;\n        } else {\n            crc >>>= 1;\n        }\n    }\n    return crc >>> 0;\n});\n\n// C-style uInt32 Multiply (discards higher bits, when JS multiply discards lower bits)\nconst uMul = (a, b) => Math.imul(a, b) >>> 0;\n\n// crc32 byte single update (actually same function is part of utils.crc32 function :) )\nconst crc32update = (pCrc32, bval) => {\n    return crctable[(pCrc32 ^ bval) & 0xff] ^ (pCrc32 >>> 8);\n};\n\n// function for generating salt for encrytion header\nconst genSalt = () => {\n    if (\"function\" === typeof randomFillSync) {\n        return randomFillSync(Buffer.alloc(12));\n    } else {\n        // fallback if function is not defined\n        return genSalt.node();\n    }\n};\n\n// salt generation with node random function (mainly as fallback)\ngenSalt.node = () => {\n    const salt = Buffer.alloc(12);\n    const len = salt.length;\n    for (let i = 0; i < len; i++) salt[i] = (Math.random() * 256) & 0xff;\n    return salt;\n};\n\n// general config\nconst config = {\n    genSalt\n};\n\n// Class Initkeys handles same basic ops with keys\nfunction Initkeys(pw) {\n    const pass = Buffer.isBuffer(pw) ? pw : Buffer.from(pw);\n    this.keys = new Uint32Array([0x12345678, 0x23456789, 0x34567890]);\n    for (let i = 0; i < pass.length; i++) {\n        this.updateKeys(pass[i]);\n    }\n}\n\nInitkeys.prototype.updateKeys = function (byteValue) {\n    const keys = this.keys;\n    keys[0] = crc32update(keys[0], byteValue);\n    keys[1] += keys[0] & 0xff;\n    keys[1] = uMul(keys[1], 134775813) + 1;\n    keys[2] = crc32update(keys[2], keys[1] >>> 24);\n    return byteValue;\n};\n\nInitkeys.prototype.next = function () {\n    const k = (this.keys[2] | 2) >>> 0; // key\n    return (uMul(k, k ^ 1) >> 8) & 0xff; // decode\n};\n\nfunction make_decrypter(/*Buffer*/ pwd) {\n    // 1. Stage initialize key\n    const keys = new Initkeys(pwd);\n\n    // return decrypter function\n    return function (/*Buffer*/ data) {\n        // result - we create new Buffer for results\n        const result = Buffer.alloc(data.length);\n        let pos = 0;\n        // process input data\n        for (let c of data) {\n            //c ^= keys.next();\n            //result[pos++] = c; // decode & Save Value\n            result[pos++] = keys.updateKeys(c ^ keys.next()); // update keys with decoded byte\n        }\n        return result;\n    };\n}\n\nfunction make_encrypter(/*Buffer*/ pwd) {\n    // 1. Stage initialize key\n    const keys = new Initkeys(pwd);\n\n    // return encrypting function, result and pos is here so we dont have to merge buffers later\n    return function (/*Buffer*/ data, /*Buffer*/ result, /* Number */ pos = 0) {\n        // result - we create new Buffer for results\n        if (!result) result = Buffer.alloc(data.length);\n        // process input data\n        for (let c of data) {\n            const k = keys.next(); // save key byte\n            result[pos++] = c ^ k; // save val\n            keys.updateKeys(c); // update keys with decoded byte\n        }\n        return result;\n    };\n}\n\nfunction decrypt(/*Buffer*/ data, /*Object*/ header, /*String, Buffer*/ pwd) {\n    if (!data || !Buffer.isBuffer(data) || data.length < 12) {\n        return Buffer.alloc(0);\n    }\n\n    // 1. We Initialize and generate decrypting function\n    const decrypter = make_decrypter(pwd);\n\n    // 2. decrypt salt what is always 12 bytes and is a part of file content\n    const salt = decrypter(data.slice(0, 12));\n\n    // 3. does password meet expectations\n    if (salt[11] !== header.crc >>> 24) {\n        throw \"ADM-ZIP: Wrong Password\";\n    }\n\n    // 4. decode content\n    return decrypter(data.slice(12));\n}\n\n// lets add way to populate salt, NOT RECOMMENDED for production but maybe useful for testing general functionality\nfunction _salter(data) {\n    if (Buffer.isBuffer(data) && data.length >= 12) {\n        // be aware - currently salting buffer data is modified\n        config.genSalt = function () {\n            return data.slice(0, 12);\n        };\n    } else if (data === \"node\") {\n        // test salt generation with node random function\n        config.genSalt = genSalt.node;\n    } else {\n        // if value is not acceptable config gets reset.\n        config.genSalt = genSalt;\n    }\n}\n\nfunction encrypt(/*Buffer*/ data, /*Object*/ header, /*String, Buffer*/ pwd, /*Boolean*/ oldlike = false) {\n    // 1. test data if data is not Buffer we make buffer from it\n    if (data == null) data = Buffer.alloc(0);\n    // if data is not buffer be make buffer from it\n    if (!Buffer.isBuffer(data)) data = Buffer.from(data.toString());\n\n    // 2. We Initialize and generate encrypting function\n    const encrypter = make_encrypter(pwd);\n\n    // 3. generate salt (12-bytes of random data)\n    const salt = config.genSalt();\n    salt[11] = (header.crc >>> 24) & 0xff;\n\n    // old implementations (before PKZip 2.04g) used two byte check\n    if (oldlike) salt[10] = (header.crc >>> 16) & 0xff;\n\n    // 4. create output\n    const result = Buffer.alloc(data.length + 12);\n    encrypter(salt, result);\n\n    // finally encode content\n    return encrypter(data, result, 12);\n}\n\nmodule.exports = { decrypt, encrypt, _salter };\n","module.exports = {\n    /* The local file header */\n    LOCHDR           : 30, // LOC header size\n    LOCSIG           : 0x04034b50, // \"PK\\003\\004\"\n    LOCVER           : 4,\t// version needed to extract\n    LOCFLG           : 6, // general purpose bit flag\n    LOCHOW           : 8, // compression method\n    LOCTIM           : 10, // modification time (2 bytes time, 2 bytes date)\n    LOCCRC           : 14, // uncompressed file crc-32 value\n    LOCSIZ           : 18, // compressed size\n    LOCLEN           : 22, // uncompressed size\n    LOCNAM           : 26, // filename length\n    LOCEXT           : 28, // extra field length\n\n    /* The Data descriptor */\n    EXTSIG           : 0x08074b50, // \"PK\\007\\008\"\n    EXTHDR           : 16, // EXT header size\n    EXTCRC           : 4, // uncompressed file crc-32 value\n    EXTSIZ           : 8, // compressed size\n    EXTLEN           : 12, // uncompressed size\n\n    /* The central directory file header */\n    CENHDR           : 46, // CEN header size\n    CENSIG           : 0x02014b50, // \"PK\\001\\002\"\n    CENVEM           : 4, // version made by\n    CENVER           : 6, // version needed to extract\n    CENFLG           : 8, // encrypt, decrypt flags\n    CENHOW           : 10, // compression method\n    CENTIM           : 12, // modification time (2 bytes time, 2 bytes date)\n    CENCRC           : 16, // uncompressed file crc-32 value\n    CENSIZ           : 20, // compressed size\n    CENLEN           : 24, // uncompressed size\n    CENNAM           : 28, // filename length\n    CENEXT           : 30, // extra field length\n    CENCOM           : 32, // file comment length\n    CENDSK           : 34, // volume number start\n    CENATT           : 36, // internal file attributes\n    CENATX           : 38, // external file attributes (host system dependent)\n    CENOFF           : 42, // LOC header offset\n\n    /* The entries in the end of central directory */\n    ENDHDR           : 22, // END header size\n    ENDSIG           : 0x06054b50, // \"PK\\005\\006\"\n    ENDSUB           : 8, // number of entries on this disk\n    ENDTOT           : 10, // total number of entries\n    ENDSIZ           : 12, // central directory size in bytes\n    ENDOFF           : 16, // offset of first CEN header\n    ENDCOM           : 20, // zip file comment length\n\n    END64HDR         : 20, // zip64 END header size\n    END64SIG         : 0x07064b50, // zip64 Locator signature, \"PK\\006\\007\"\n    END64START       : 4, // number of the disk with the start of the zip64\n    END64OFF         : 8, // relative offset of the zip64 end of central directory\n    END64NUMDISKS    : 16, // total number of disks\n\n    ZIP64SIG         : 0x06064b50, // zip64 signature, \"PK\\006\\006\"\n    ZIP64HDR         : 56, // zip64 record minimum size\n    ZIP64LEAD        : 12, // leading bytes at the start of the record, not counted by the value stored in ZIP64SIZE\n    ZIP64SIZE        : 4, // zip64 size of the central directory record\n    ZIP64VEM         : 12, // zip64 version made by\n    ZIP64VER         : 14, // zip64 version needed to extract\n    ZIP64DSK         : 16, // zip64 number of this disk\n    ZIP64DSKDIR      : 20, // number of the disk with the start of the record directory\n    ZIP64SUB         : 24, // number of entries on this disk\n    ZIP64TOT         : 32, // total number of entries\n    ZIP64SIZB        : 40, // zip64 central directory size in bytes\n    ZIP64OFF         : 48, // offset of start of central directory with respect to the starting disk number\n    ZIP64EXTRA       : 56, // extensible data sector\n\n    /* Compression methods */\n    STORED           : 0, // no compression\n    SHRUNK           : 1, // shrunk\n    REDUCED1         : 2, // reduced with compression factor 1\n    REDUCED2         : 3, // reduced with compression factor 2\n    REDUCED3         : 4, // reduced with compression factor 3\n    REDUCED4         : 5, // reduced with compression factor 4\n    IMPLODED         : 6, // imploded\n    // 7 reserved for Tokenizing compression algorithm\n    DEFLATED         : 8, // deflated\n    ENHANCED_DEFLATED: 9, // enhanced deflated\n    PKWARE           : 10,// PKWare DCL imploded\n    // 11 reserved by PKWARE\n    BZIP2            : 12, //  compressed using BZIP2\n    // 13 reserved by PKWARE\n    LZMA             : 14, // LZMA\n    // 15-17 reserved by PKWARE\n    IBM_TERSE        : 18, // compressed using IBM TERSE\n    IBM_LZ77         : 19, // IBM LZ77 z\n    AES_ENCRYPT      : 99, // WinZIP AES encryption method\n\n    /* General purpose bit flag */\n    // values can obtained with expression 2**bitnr\n    FLG_ENC          : 1,    // Bit 0: encrypted file\n    FLG_COMP1        : 2,    // Bit 1, compression option\n    FLG_COMP2        : 4,    // Bit 2, compression option\n    FLG_DESC         : 8,    // Bit 3, data descriptor\n    FLG_ENH          : 16,   // Bit 4, enhanced deflating\n    FLG_PATCH        : 32,   // Bit 5, indicates that the file is compressed patched data.\n    FLG_STR          : 64,   // Bit 6, strong encryption (patented)\n                             // Bits 7-10: Currently unused.\n    FLG_EFS          : 2048, // Bit 11: Language encoding flag (EFS)\n                             // Bit 12: Reserved by PKWARE for enhanced compression.\n                             // Bit 13: encrypted the Central Directory (patented).\n                             // Bits 14-15: Reserved by PKWARE.\n    FLG_MSK          : 4096, // mask header values\n\n    /* Load type */\n    FILE             : 2,\n    BUFFER           : 1,\n    NONE             : 0,\n\n    /* 4.5 Extensible data fields */\n    EF_ID            : 0,\n    EF_SIZE          : 2,\n\n    /* Header IDs */\n    ID_ZIP64         : 0x0001,\n    ID_AVINFO        : 0x0007,\n    ID_PFS           : 0x0008,\n    ID_OS2           : 0x0009,\n    ID_NTFS          : 0x000a,\n    ID_OPENVMS       : 0x000c,\n    ID_UNIX          : 0x000d,\n    ID_FORK          : 0x000e,\n    ID_PATCH         : 0x000f,\n    ID_X509_PKCS7    : 0x0014,\n    ID_X509_CERTID_F : 0x0015,\n    ID_X509_CERTID_C : 0x0016,\n    ID_STRONGENC     : 0x0017,\n    ID_RECORD_MGT    : 0x0018,\n    ID_X509_PKCS7_RL : 0x0019,\n    ID_IBM1          : 0x0065,\n    ID_IBM2          : 0x0066,\n    ID_POSZIP        : 0x4690,\n\n    EF_ZIP64_OR_32   : 0xffffffff,\n    EF_ZIP64_OR_16   : 0xffff,\n    EF_ZIP64_SUNCOMP : 0,\n    EF_ZIP64_SCOMP   : 8,\n    EF_ZIP64_RHO     : 16,\n    EF_ZIP64_DSN     : 24\n};\n","module.exports = {\n    /* Header error messages */\n    INVALID_LOC: \"Invalid LOC header (bad signature)\",\n    INVALID_CEN: \"Invalid CEN header (bad signature)\",\n    INVALID_END: \"Invalid END header (bad signature)\",\n\n    /* ZipEntry error messages*/\n    NO_DATA: \"Nothing to decompress\",\n    BAD_CRC: \"CRC32 checksum failed\",\n    FILE_IN_THE_WAY: \"There is a file in the way: %s\",\n    UNKNOWN_METHOD: \"Invalid/unsupported compression method\",\n\n    /* Inflater error messages */\n    AVAIL_DATA: \"inflate::Available inflate data did not terminate\",\n    INVALID_DISTANCE: \"inflate::Invalid literal/length or distance code in fixed or dynamic block\",\n    TO_MANY_CODES: \"inflate::Dynamic block code description: too many length or distance codes\",\n    INVALID_REPEAT_LEN: \"inflate::Dynamic block code description: repeat more than specified lengths\",\n    INVALID_REPEAT_FIRST: \"inflate::Dynamic block code description: repeat lengths with no first length\",\n    INCOMPLETE_CODES: \"inflate::Dynamic block code description: code lengths codes incomplete\",\n    INVALID_DYN_DISTANCE: \"inflate::Dynamic block code description: invalid distance code lengths\",\n    INVALID_CODES_LEN: \"inflate::Dynamic block code description: invalid literal/length code lengths\",\n    INVALID_STORE_BLOCK: \"inflate::Stored block length did not match one's complement\",\n    INVALID_BLOCK_TYPE: \"inflate::Invalid block type (type == 3)\",\n\n    /* ADM-ZIP error messages */\n    CANT_EXTRACT_FILE: \"Could not extract the file\",\n    CANT_OVERRIDE: \"Target file already exists\",\n    NO_ZIP: \"No zip file was loaded\",\n    NO_ENTRY: \"Entry doesn't exist\",\n    DIRECTORY_CONTENT_ERROR: \"A directory cannot have content\",\n    FILE_NOT_FOUND: \"File not found: %s\",\n    NOT_IMPLEMENTED: \"Not implemented\",\n    INVALID_FILENAME: \"Invalid filename\",\n    INVALID_FORMAT: \"Invalid or unsupported zip format. No END header found\"\n};\n","const fs = require(\"./fileSystem\").require();\nconst pth = require(\"path\");\n\nfs.existsSync = fs.existsSync || pth.existsSync;\n\nmodule.exports = function (/*String*/ path) {\n    var _path = path || \"\",\n        _obj = newAttr(),\n        _stat = null;\n\n    function newAttr() {\n        return {\n            directory: false,\n            readonly: false,\n            hidden: false,\n            executable: false,\n            mtime: 0,\n            atime: 0\n        };\n    }\n\n    if (_path && fs.existsSync(_path)) {\n        _stat = fs.statSync(_path);\n        _obj.directory = _stat.isDirectory();\n        _obj.mtime = _stat.mtime;\n        _obj.atime = _stat.atime;\n        _obj.executable = (0o111 & _stat.mode) !== 0; // file is executable who ever har right not just owner\n        _obj.readonly = (0o200 & _stat.mode) === 0; // readonly if owner has no write right\n        _obj.hidden = pth.basename(_path)[0] === \".\";\n    } else {\n        console.warn(\"Invalid path: \" + _path);\n    }\n\n    return {\n        get directory() {\n            return _obj.directory;\n        },\n\n        get readOnly() {\n            return _obj.readonly;\n        },\n\n        get hidden() {\n            return _obj.hidden;\n        },\n\n        get mtime() {\n            return _obj.mtime;\n        },\n\n        get atime() {\n            return _obj.atime;\n        },\n\n        get executable() {\n            return _obj.executable;\n        },\n\n        decodeAttributes: function () {},\n\n        encodeAttributes: function () {},\n\n        toJSON: function () {\n            return {\n                path: _path,\n                isDirectory: _obj.directory,\n                isReadOnly: _obj.readonly,\n                isHidden: _obj.hidden,\n                isExecutable: _obj.executable,\n                mTime: _obj.mtime,\n                aTime: _obj.atime\n            };\n        },\n\n        toString: function () {\n            return JSON.stringify(this.toJSON(), null, \"\\t\");\n        }\n    };\n};\n","exports.require = function () {\n    if (typeof process === \"object\" && process.versions && process.versions[\"electron\"]) {\n        try {\n            const originalFs = require(\"original-fs\");\n            if (Object.keys(originalFs).length > 0) {\n                return originalFs;\n            }\n        } catch (e) {}\n    }\n    return require(\"fs\");\n};\n","module.exports = require(\"./utils\");\nmodule.exports.Constants = require(\"./constants\");\nmodule.exports.Errors = require(\"./errors\");\nmodule.exports.FileAttr = require(\"./fattr\");\n","const fsystem = require(\"./fileSystem\").require();\nconst pth = require(\"path\");\nconst Constants = require(\"./constants\");\nconst isWin = typeof process === \"object\" && \"win32\" === process.platform;\n\nconst is_Obj = (obj) => obj && typeof obj === \"object\";\n\n// generate CRC32 lookup table\nconst crcTable = new Uint32Array(256).map((t, c) => {\n    for (let k = 0; k < 8; k++) {\n        if ((c & 1) !== 0) {\n            c = 0xedb88320 ^ (c >>> 1);\n        } else {\n            c >>>= 1;\n        }\n    }\n    return c >>> 0;\n});\n\n// UTILS functions\n\nfunction Utils(opts) {\n    this.sep = pth.sep;\n    this.fs = fsystem;\n\n    if (is_Obj(opts)) {\n        // custom filesystem\n        if (is_Obj(opts.fs) && typeof opts.fs.statSync === \"function\") {\n            this.fs = opts.fs;\n        }\n    }\n}\n\nmodule.exports = Utils;\n\n// INSTANCED functions\n\nUtils.prototype.makeDir = function (/*String*/ folder) {\n    const self = this;\n\n    // Sync - make directories tree\n    function mkdirSync(/*String*/ fpath) {\n        let resolvedPath = fpath.split(self.sep)[0];\n        fpath.split(self.sep).forEach(function (name) {\n            if (!name || name.substr(-1, 1) === \":\") return;\n            resolvedPath += self.sep + name;\n            var stat;\n            try {\n                stat = self.fs.statSync(resolvedPath);\n            } catch (e) {\n                self.fs.mkdirSync(resolvedPath);\n            }\n            if (stat && stat.isFile()) throw Errors.FILE_IN_THE_WAY.replace(\"%s\", resolvedPath);\n        });\n    }\n\n    mkdirSync(folder);\n};\n\nUtils.prototype.writeFileTo = function (/*String*/ path, /*Buffer*/ content, /*Boolean*/ overwrite, /*Number*/ attr) {\n    const self = this;\n    if (self.fs.existsSync(path)) {\n        if (!overwrite) return false; // cannot overwrite\n\n        var stat = self.fs.statSync(path);\n        if (stat.isDirectory()) {\n            return false;\n        }\n    }\n    var folder = pth.dirname(path);\n    if (!self.fs.existsSync(folder)) {\n        self.makeDir(folder);\n    }\n\n    var fd;\n    try {\n        fd = self.fs.openSync(path, \"w\", 438); // 0666\n    } catch (e) {\n        self.fs.chmodSync(path, 438);\n        fd = self.fs.openSync(path, \"w\", 438);\n    }\n    if (fd) {\n        try {\n            self.fs.writeSync(fd, content, 0, content.length, 0);\n        } finally {\n            self.fs.closeSync(fd);\n        }\n    }\n    self.fs.chmodSync(path, attr || 438);\n    return true;\n};\n\nUtils.prototype.writeFileToAsync = function (/*String*/ path, /*Buffer*/ content, /*Boolean*/ overwrite, /*Number*/ attr, /*Function*/ callback) {\n    if (typeof attr === \"function\") {\n        callback = attr;\n        attr = undefined;\n    }\n\n    const self = this;\n\n    self.fs.exists(path, function (exist) {\n        if (exist && !overwrite) return callback(false);\n\n        self.fs.stat(path, function (err, stat) {\n            if (exist && stat.isDirectory()) {\n                return callback(false);\n            }\n\n            var folder = pth.dirname(path);\n            self.fs.exists(folder, function (exists) {\n                if (!exists) self.makeDir(folder);\n\n                self.fs.open(path, \"w\", 438, function (err, fd) {\n                    if (err) {\n                        self.fs.chmod(path, 438, function () {\n                            self.fs.open(path, \"w\", 438, function (err, fd) {\n                                self.fs.write(fd, content, 0, content.length, 0, function () {\n                                    self.fs.close(fd, function () {\n                                        self.fs.chmod(path, attr || 438, function () {\n                                            callback(true);\n                                        });\n                                    });\n                                });\n                            });\n                        });\n                    } else if (fd) {\n                        self.fs.write(fd, content, 0, content.length, 0, function () {\n                            self.fs.close(fd, function () {\n                                self.fs.chmod(path, attr || 438, function () {\n                                    callback(true);\n                                });\n                            });\n                        });\n                    } else {\n                        self.fs.chmod(path, attr || 438, function () {\n                            callback(true);\n                        });\n                    }\n                });\n            });\n        });\n    });\n};\n\nUtils.prototype.findFiles = function (/*String*/ path) {\n    const self = this;\n\n    function findSync(/*String*/ dir, /*RegExp*/ pattern, /*Boolean*/ recursive) {\n        if (typeof pattern === \"boolean\") {\n            recursive = pattern;\n            pattern = undefined;\n        }\n        let files = [];\n        self.fs.readdirSync(dir).forEach(function (file) {\n            var path = pth.join(dir, file);\n\n            if (self.fs.statSync(path).isDirectory() && recursive) files = files.concat(findSync(path, pattern, recursive));\n\n            if (!pattern || pattern.test(path)) {\n                files.push(pth.normalize(path) + (self.fs.statSync(path).isDirectory() ? self.sep : \"\"));\n            }\n        });\n        return files;\n    }\n\n    return findSync(path, undefined, true);\n};\n\nUtils.prototype.getAttributes = function () {};\n\nUtils.prototype.setAttributes = function () {};\n\n// STATIC functions\n\n// crc32 single update (it is part of crc32)\nUtils.crc32update = function (crc, byte) {\n    return crcTable[(crc ^ byte) & 0xff] ^ (crc >>> 8);\n};\n\nUtils.crc32 = function (buf) {\n    if (typeof buf === \"string\") {\n        buf = Buffer.from(buf, \"utf8\");\n    }\n    // Generate crcTable\n    if (!crcTable.length) genCRCTable();\n\n    let len = buf.length;\n    let crc = ~0;\n    for (let off = 0; off < len; ) crc = Utils.crc32update(crc, buf[off++]);\n    // xor and cast as uint32 number\n    return ~crc >>> 0;\n};\n\nUtils.methodToString = function (/*Number*/ method) {\n    switch (method) {\n        case Constants.STORED:\n            return \"STORED (\" + method + \")\";\n        case Constants.DEFLATED:\n            return \"DEFLATED (\" + method + \")\";\n        default:\n            return \"UNSUPPORTED (\" + method + \")\";\n    }\n};\n\n// removes \"..\" style path elements\nUtils.canonical = function (/*string*/ path) {\n    if (!path) return \"\";\n    // trick normalize think path is absolute\n    var safeSuffix = pth.posix.normalize(\"/\" + path.split(\"\\\\\").join(\"/\"));\n    return pth.join(\".\", safeSuffix);\n};\n\n// make abolute paths taking prefix as root folder\nUtils.sanitize = function (/*string*/ prefix, /*string*/ name) {\n    prefix = pth.resolve(pth.normalize(prefix));\n    var parts = name.split(\"/\");\n    for (var i = 0, l = parts.length; i < l; i++) {\n        var path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep)));\n        if (path.indexOf(prefix) === 0) {\n            return path;\n        }\n    }\n    return pth.normalize(pth.join(prefix, pth.basename(name)));\n};\n\n// converts buffer, Uint8Array, string types to buffer\nUtils.toBuffer = function toBuffer(/*buffer, Uint8Array, string*/ input) {\n    if (Buffer.isBuffer(input)) {\n        return input;\n    } else if (input instanceof Uint8Array) {\n        return Buffer.from(input);\n    } else {\n        // expect string all other values are invalid and return empty buffer\n        return typeof input === \"string\" ? Buffer.from(input, \"utf8\") : Buffer.alloc(0);\n    }\n};\n\nUtils.readBigUInt64LE = function (/*Buffer*/ buffer, /*int*/ index) {\n    var slice = Buffer.from(buffer.slice(index, index + 8));\n    slice.swap64();\n\n    return parseInt(`0x${slice.toString(\"hex\")}`);\n};\n\nUtils.isWin = isWin; // Do we have windows system\nUtils.crcTable = crcTable;\n","var Utils = require(\"./util\"),\n    Headers = require(\"./headers\"),\n    Constants = Utils.Constants,\n    Methods = require(\"./methods\");\n\nmodule.exports = function (/*Buffer*/ input) {\n    var _entryHeader = new Headers.EntryHeader(),\n        _entryName = Buffer.alloc(0),\n        _comment = Buffer.alloc(0),\n        _isDirectory = false,\n        uncompressedData = null,\n        _extra = Buffer.alloc(0);\n\n    function getCompressedDataFromZip() {\n        if (!input || !Buffer.isBuffer(input)) {\n            return Buffer.alloc(0);\n        }\n        _entryHeader.loadDataHeaderFromBinary(input);\n        return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize);\n    }\n\n    function crc32OK(data) {\n        // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written\n        if ((_entryHeader.flags & 0x8) !== 0x8) {\n            if (Utils.crc32(data) !== _entryHeader.dataHeader.crc) {\n                return false;\n            }\n        } else {\n            // @TODO: load and check data descriptor header\n            // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure\n            // (optionally preceded by a 4-byte signature) immediately after the compressed data:\n        }\n        return true;\n    }\n\n    function decompress(/*Boolean*/ async, /*Function*/ callback, /*String, Buffer*/ pass) {\n        if (typeof callback === \"undefined\" && typeof async === \"string\") {\n            pass = async;\n            async = void 0;\n        }\n        if (_isDirectory) {\n            if (async && callback) {\n                callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error.\n            }\n            return Buffer.alloc(0);\n        }\n\n        var compressedData = getCompressedDataFromZip();\n\n        if (compressedData.length === 0) {\n            // File is empty, nothing to decompress.\n            if (async && callback) callback(compressedData);\n            return compressedData;\n        }\n\n        if (_entryHeader.encripted) {\n            if (\"string\" !== typeof pass && !Buffer.isBuffer(pass)) {\n                throw new Error(\"ADM-ZIP: Incompatible password parameter\");\n            }\n            compressedData = Methods.ZipCrypto.decrypt(compressedData, _entryHeader, pass);\n        }\n\n        var data = Buffer.alloc(_entryHeader.size);\n\n        switch (_entryHeader.method) {\n            case Utils.Constants.STORED:\n                compressedData.copy(data);\n                if (!crc32OK(data)) {\n                    if (async && callback) callback(data, Utils.Errors.BAD_CRC); //si added error\n                    throw new Error(Utils.Errors.BAD_CRC);\n                } else {\n                    //si added otherwise did not seem to return data.\n                    if (async && callback) callback(data);\n                    return data;\n                }\n            case Utils.Constants.DEFLATED:\n                var inflater = new Methods.Inflater(compressedData);\n                if (!async) {\n                    const result = inflater.inflate(data);\n                    result.copy(data, 0);\n                    if (!crc32OK(data)) {\n                        throw new Error(Utils.Errors.BAD_CRC + \" \" + _entryName.toString());\n                    }\n                    return data;\n                } else {\n                    inflater.inflateAsync(function (result) {\n                        result.copy(result, 0);\n                        if (callback) {\n                            if (!crc32OK(result)) {\n                                callback(result, Utils.Errors.BAD_CRC); //si added error\n                            } else {\n                                callback(result);\n                            }\n                        }\n                    });\n                }\n                break;\n            default:\n                if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD);\n                throw new Error(Utils.Errors.UNKNOWN_METHOD);\n        }\n    }\n\n    function compress(/*Boolean*/ async, /*Function*/ callback) {\n        if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {\n            // no data set or the data wasn't changed to require recompression\n            if (async && callback) callback(getCompressedDataFromZip());\n            return getCompressedDataFromZip();\n        }\n\n        if (uncompressedData.length && !_isDirectory) {\n            var compressedData;\n            // Local file header\n            switch (_entryHeader.method) {\n                case Utils.Constants.STORED:\n                    _entryHeader.compressedSize = _entryHeader.size;\n\n                    compressedData = Buffer.alloc(uncompressedData.length);\n                    uncompressedData.copy(compressedData);\n\n                    if (async && callback) callback(compressedData);\n                    return compressedData;\n                default:\n                case Utils.Constants.DEFLATED:\n                    var deflater = new Methods.Deflater(uncompressedData);\n                    if (!async) {\n                        var deflated = deflater.deflate();\n                        _entryHeader.compressedSize = deflated.length;\n                        return deflated;\n                    } else {\n                        deflater.deflateAsync(function (data) {\n                            compressedData = Buffer.alloc(data.length);\n                            _entryHeader.compressedSize = data.length;\n                            data.copy(compressedData);\n                            callback && callback(compressedData);\n                        });\n                    }\n                    deflater = null;\n                    break;\n            }\n        } else if (async && callback) {\n            callback(Buffer.alloc(0));\n        } else {\n            return Buffer.alloc(0);\n        }\n    }\n\n    function readUInt64LE(buffer, offset) {\n        return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset);\n    }\n\n    function parseExtra(data) {\n        var offset = 0;\n        var signature, size, part;\n        while (offset < data.length) {\n            signature = data.readUInt16LE(offset);\n            offset += 2;\n            size = data.readUInt16LE(offset);\n            offset += 2;\n            part = data.slice(offset, offset + size);\n            offset += size;\n            if (Constants.ID_ZIP64 === signature) {\n                parseZip64ExtendedInformation(part);\n            }\n        }\n    }\n\n    //Override header field values with values from the ZIP64 extra field\n    function parseZip64ExtendedInformation(data) {\n        var size, compressedSize, offset, diskNumStart;\n\n        if (data.length >= Constants.EF_ZIP64_SCOMP) {\n            size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);\n            if (_entryHeader.size === Constants.EF_ZIP64_OR_32) {\n                _entryHeader.size = size;\n            }\n        }\n        if (data.length >= Constants.EF_ZIP64_RHO) {\n            compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);\n            if (_entryHeader.compressedSize === Constants.EF_ZIP64_OR_32) {\n                _entryHeader.compressedSize = compressedSize;\n            }\n        }\n        if (data.length >= Constants.EF_ZIP64_DSN) {\n            offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);\n            if (_entryHeader.offset === Constants.EF_ZIP64_OR_32) {\n                _entryHeader.offset = offset;\n            }\n        }\n        if (data.length >= Constants.EF_ZIP64_DSN + 4) {\n            diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);\n            if (_entryHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {\n                _entryHeader.diskNumStart = diskNumStart;\n            }\n        }\n    }\n\n    return {\n        get entryName() {\n            return _entryName.toString();\n        },\n        get rawEntryName() {\n            return _entryName;\n        },\n        set entryName(val) {\n            _entryName = Utils.toBuffer(val);\n            var lastChar = _entryName[_entryName.length - 1];\n            _isDirectory = lastChar === 47 || lastChar === 92;\n            _entryHeader.fileNameLength = _entryName.length;\n        },\n\n        get extra() {\n            return _extra;\n        },\n        set extra(val) {\n            _extra = val;\n            _entryHeader.extraLength = val.length;\n            parseExtra(val);\n        },\n\n        get comment() {\n            return _comment.toString();\n        },\n        set comment(val) {\n            _comment = Utils.toBuffer(val);\n            _entryHeader.commentLength = _comment.length;\n        },\n\n        get name() {\n            var n = _entryName.toString();\n            return _isDirectory\n                ? n\n                      .substr(n.length - 1)\n                      .split(\"/\")\n                      .pop()\n                : n.split(\"/\").pop();\n        },\n        get isDirectory() {\n            return _isDirectory;\n        },\n\n        getCompressedData: function () {\n            return compress(false, null);\n        },\n\n        getCompressedDataAsync: function (/*Function*/ callback) {\n            compress(true, callback);\n        },\n\n        setData: function (value) {\n            uncompressedData = Utils.toBuffer(value);\n            if (!_isDirectory && uncompressedData.length) {\n                _entryHeader.size = uncompressedData.length;\n                _entryHeader.method = Utils.Constants.DEFLATED;\n                _entryHeader.crc = Utils.crc32(value);\n                _entryHeader.changed = true;\n            } else {\n                // folders and blank files should be stored\n                _entryHeader.method = Utils.Constants.STORED;\n            }\n        },\n\n        getData: function (pass) {\n            if (_entryHeader.changed) {\n                return uncompressedData;\n            } else {\n                return decompress(false, null, pass);\n            }\n        },\n\n        getDataAsync: function (/*Function*/ callback, pass) {\n            if (_entryHeader.changed) {\n                callback(uncompressedData);\n            } else {\n                decompress(true, callback, pass);\n            }\n        },\n\n        set attr(attr) {\n            _entryHeader.attr = attr;\n        },\n        get attr() {\n            return _entryHeader.attr;\n        },\n\n        set header(/*Buffer*/ data) {\n            _entryHeader.loadFromBinary(data);\n        },\n\n        get header() {\n            return _entryHeader;\n        },\n\n        packHeader: function () {\n            // 1. create header (buffer)\n            var header = _entryHeader.entryHeaderToBinary();\n            var addpos = Utils.Constants.CENHDR;\n            // 2. add file name\n            _entryName.copy(header, addpos);\n            addpos += _entryName.length;\n            // 3. add extra data\n            if (_entryHeader.extraLength) {\n                _extra.copy(header, addpos);\n                addpos += _entryHeader.extraLength;\n            }\n            // 4. add file comment\n            if (_entryHeader.commentLength) {\n                _comment.copy(header, addpos);\n            }\n            return header;\n        },\n\n        toJSON: function () {\n            const bytes = function (nr) {\n                return \"<\" + ((nr && nr.length + \" bytes buffer\") || \"null\") + \">\";\n            };\n\n            return {\n                entryName: this.entryName,\n                name: this.name,\n                comment: this.comment,\n                isDirectory: this.isDirectory,\n                header: _entryHeader.toJSON(),\n                compressedData: bytes(input),\n                data: bytes(uncompressedData)\n            };\n        },\n\n        toString: function () {\n            return JSON.stringify(this.toJSON(), null, \"\\t\");\n        }\n    };\n};\n","const ZipEntry = require(\"./zipEntry\");\nconst Headers = require(\"./headers\");\nconst Utils = require(\"./util\");\n\nmodule.exports = function (/*Buffer|null*/ inBuffer, /** object */ options) {\n    var entryList = [],\n        entryTable = {},\n        _comment = Buffer.alloc(0),\n        mainHeader = new Headers.MainHeader(),\n        loadedEntries = false;\n\n    // assign options\n    const opts = Object.assign(Object.create(null), options);\n\n    const { noSort } = opts;\n\n    if (inBuffer) {\n        // is a memory buffer\n        readMainHeader(opts.readEntries);\n    } else {\n        // none. is a new file\n        loadedEntries = true;\n    }\n\n    function iterateEntries(callback) {\n        const totalEntries = mainHeader.diskEntries; // total number of entries\n        let index = mainHeader.offset; // offset of first CEN header\n\n        for (let i = 0; i < totalEntries; i++) {\n            let tmp = index;\n            const entry = new ZipEntry(inBuffer);\n\n            entry.header = inBuffer.slice(tmp, (tmp += Utils.Constants.CENHDR));\n            entry.entryName = inBuffer.slice(tmp, (tmp += entry.header.fileNameLength));\n\n            index += entry.header.entryHeaderSize;\n\n            callback(entry);\n        }\n    }\n\n    function readEntries() {\n        loadedEntries = true;\n        entryTable = {};\n        entryList = new Array(mainHeader.diskEntries); // total number of entries\n        var index = mainHeader.offset; // offset of first CEN header\n        for (var i = 0; i < entryList.length; i++) {\n            var tmp = index,\n                entry = new ZipEntry(inBuffer);\n            entry.header = inBuffer.slice(tmp, (tmp += Utils.Constants.CENHDR));\n\n            entry.entryName = inBuffer.slice(tmp, (tmp += entry.header.fileNameLength));\n\n            if (entry.header.extraLength) {\n                entry.extra = inBuffer.slice(tmp, (tmp += entry.header.extraLength));\n            }\n\n            if (entry.header.commentLength) entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength);\n\n            index += entry.header.entryHeaderSize;\n\n            entryList[i] = entry;\n            entryTable[entry.entryName] = entry;\n        }\n    }\n\n    function readMainHeader(/*Boolean*/ readNow) {\n        var i = inBuffer.length - Utils.Constants.ENDHDR, // END header size\n            max = Math.max(0, i - 0xffff), // 0xFFFF is the max zip file comment length\n            n = max,\n            endStart = inBuffer.length,\n            endOffset = -1, // Start offset of the END header\n            commentEnd = 0;\n\n        for (i; i >= n; i--) {\n            if (inBuffer[i] !== 0x50) continue; // quick check that the byte is 'P'\n            if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) {\n                // \"PK\\005\\006\"\n                endOffset = i;\n                commentEnd = i;\n                endStart = i + Utils.Constants.ENDHDR;\n                // We already found a regular signature, let's look just a bit further to check if there's any zip64 signature\n                n = i - Utils.Constants.END64HDR;\n                continue;\n            }\n\n            if (inBuffer.readUInt32LE(i) === Utils.Constants.END64SIG) {\n                // Found a zip64 signature, let's continue reading the whole zip64 record\n                n = max;\n                continue;\n            }\n\n            if (inBuffer.readUInt32LE(i) === Utils.Constants.ZIP64SIG) {\n                // Found the zip64 record, let's determine it's size\n                endOffset = i;\n                endStart = i + Utils.readBigUInt64LE(inBuffer, i + Utils.Constants.ZIP64SIZE) + Utils.Constants.ZIP64LEAD;\n                break;\n            }\n        }\n\n        if (!~endOffset) throw new Error(Utils.Errors.INVALID_FORMAT);\n\n        mainHeader.loadFromBinary(inBuffer.slice(endOffset, endStart));\n        if (mainHeader.commentLength) {\n            _comment = inBuffer.slice(commentEnd + Utils.Constants.ENDHDR);\n        }\n        if (readNow) readEntries();\n    }\n\n    function sortEntries() {\n        if (entryList.length > 1 && !noSort) {\n            entryList.sort((a, b) => a.entryName.toLowerCase().localeCompare(b.entryName.toLowerCase()));\n        }\n    }\n\n    return {\n        /**\n         * Returns an array of ZipEntry objects existent in the current opened archive\n         * @return Array\n         */\n        get entries() {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            return entryList;\n        },\n\n        /**\n         * Archive comment\n         * @return {String}\n         */\n        get comment() {\n            return _comment.toString();\n        },\n        set comment(val) {\n            _comment = Utils.toBuffer(val);\n            mainHeader.commentLength = _comment.length;\n        },\n\n        getEntryCount: function () {\n            if (!loadedEntries) {\n                return mainHeader.diskEntries;\n            }\n\n            return entryList.length;\n        },\n\n        forEach: function (callback) {\n            if (!loadedEntries) {\n                iterateEntries(callback);\n                return;\n            }\n\n            entryList.forEach(callback);\n        },\n\n        /**\n         * Returns a reference to the entry with the given name or null if entry is inexistent\n         *\n         * @param entryName\n         * @return ZipEntry\n         */\n        getEntry: function (/*String*/ entryName) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            return entryTable[entryName] || null;\n        },\n\n        /**\n         * Adds the given entry to the entry list\n         *\n         * @param entry\n         */\n        setEntry: function (/*ZipEntry*/ entry) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            entryList.push(entry);\n            entryTable[entry.entryName] = entry;\n            mainHeader.totalEntries = entryList.length;\n        },\n\n        /**\n         * Removes the entry with the given name from the entry list.\n         *\n         * If the entry is a directory, then all nested files and directories will be removed\n         * @param entryName\n         */\n        deleteEntry: function (/*String*/ entryName) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            var entry = entryTable[entryName];\n            if (entry && entry.isDirectory) {\n                var _self = this;\n                this.getEntryChildren(entry).forEach(function (child) {\n                    if (child.entryName !== entryName) {\n                        _self.deleteEntry(child.entryName);\n                    }\n                });\n            }\n            entryList.splice(entryList.indexOf(entry), 1);\n            delete entryTable[entryName];\n            mainHeader.totalEntries = entryList.length;\n        },\n\n        /**\n         *  Iterates and returns all nested files and directories of the given entry\n         *\n         * @param entry\n         * @return Array\n         */\n        getEntryChildren: function (/*ZipEntry*/ entry) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            if (entry && entry.isDirectory) {\n                const list = [];\n                const name = entry.entryName;\n                const len = name.length;\n\n                entryList.forEach(function (zipEntry) {\n                    if (zipEntry.entryName.substr(0, len) === name) {\n                        list.push(zipEntry);\n                    }\n                });\n                return list;\n            }\n            return [];\n        },\n\n        /**\n         * Returns the zip file\n         *\n         * @return Buffer\n         */\n        compressToBuffer: function () {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            sortEntries();\n\n            const dataBlock = [];\n            const entryHeaders = [];\n            let totalSize = 0;\n            let dindex = 0;\n\n            mainHeader.size = 0;\n            mainHeader.offset = 0;\n\n            for (const entry of entryList) {\n                // compress data and set local and entry header accordingly. Reason why is called first\n                const compressedData = entry.getCompressedData();\n                // 1. construct data header\n                entry.header.offset = dindex;\n                const dataHeader = entry.header.dataHeaderToBinary();\n                const entryNameLen = entry.rawEntryName.length;\n                // 1.2. postheader - data after data header\n                const postHeader = Buffer.alloc(entryNameLen + entry.extra.length);\n                entry.rawEntryName.copy(postHeader, 0);\n                postHeader.copy(entry.extra, entryNameLen);\n\n                // 2. offsets\n                const dataLength = dataHeader.length + postHeader.length + compressedData.length;\n                dindex += dataLength;\n\n                // 3. store values in sequence\n                dataBlock.push(dataHeader);\n                dataBlock.push(postHeader);\n                dataBlock.push(compressedData);\n\n                // 4. construct entry header\n                const entryHeader = entry.packHeader();\n                entryHeaders.push(entryHeader);\n                // 5. update main header\n                mainHeader.size += entryHeader.length;\n                totalSize += dataLength + entryHeader.length;\n            }\n\n            totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n            // point to end of data and beginning of central directory first record\n            mainHeader.offset = dindex;\n\n            dindex = 0;\n            const outBuffer = Buffer.alloc(totalSize);\n            // write data blocks\n            for (const content of dataBlock) {\n                content.copy(outBuffer, dindex);\n                dindex += content.length;\n            }\n\n            // write central directory entries\n            for (const content of entryHeaders) {\n                content.copy(outBuffer, dindex);\n                dindex += content.length;\n            }\n\n            // write main header\n            const mh = mainHeader.toBinary();\n            if (_comment) {\n                _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment\n            }\n            mh.copy(outBuffer, dindex);\n\n            return outBuffer;\n        },\n\n        toAsyncBuffer: function (/*Function*/ onSuccess, /*Function*/ onFail, /*Function*/ onItemStart, /*Function*/ onItemEnd) {\n            try {\n                if (!loadedEntries) {\n                    readEntries();\n                }\n                sortEntries();\n\n                const dataBlock = [];\n                const entryHeaders = [];\n                let totalSize = 0;\n                let dindex = 0;\n\n                mainHeader.size = 0;\n                mainHeader.offset = 0;\n\n                const compress2Buffer = function (entryLists) {\n                    if (entryLists.length) {\n                        const entry = entryLists.pop();\n                        const name = entry.entryName + entry.extra.toString();\n                        if (onItemStart) onItemStart(name);\n                        entry.getCompressedDataAsync(function (compressedData) {\n                            if (onItemEnd) onItemEnd(name);\n\n                            entry.header.offset = dindex;\n                            // data header\n                            const dataHeader = entry.header.dataHeaderToBinary();\n                            const postHeader = Buffer.alloc(name.length, name);\n                            const dataLength = dataHeader.length + postHeader.length + compressedData.length;\n\n                            dindex += dataLength;\n\n                            dataBlock.push(dataHeader);\n                            dataBlock.push(postHeader);\n                            dataBlock.push(compressedData);\n\n                            const entryHeader = entry.packHeader();\n                            entryHeaders.push(entryHeader);\n                            mainHeader.size += entryHeader.length;\n                            totalSize += dataLength + entryHeader.length;\n\n                            compress2Buffer(entryLists);\n                        });\n                    } else {\n                        totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n                        // point to end of data and beginning of central directory first record\n                        mainHeader.offset = dindex;\n\n                        dindex = 0;\n                        const outBuffer = Buffer.alloc(totalSize);\n                        dataBlock.forEach(function (content) {\n                            content.copy(outBuffer, dindex); // write data blocks\n                            dindex += content.length;\n                        });\n                        entryHeaders.forEach(function (content) {\n                            content.copy(outBuffer, dindex); // write central directory entries\n                            dindex += content.length;\n                        });\n\n                        const mh = mainHeader.toBinary();\n                        if (_comment) {\n                            _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment\n                        }\n\n                        mh.copy(outBuffer, dindex); // write main header\n\n                        onSuccess(outBuffer);\n                    }\n                };\n\n                compress2Buffer(entryList);\n            } catch (e) {\n                onFail(e);\n            }\n        }\n    };\n};\n","'use strict';\n\nvar ArraySpeciesCreate = require('es-abstract/2020/ArraySpeciesCreate');\nvar Call = require('es-abstract/2020/Call');\nvar CreateDataPropertyOrThrow = require('es-abstract/2020/CreateDataPropertyOrThrow');\nvar Get = require('es-abstract/2020/Get');\nvar HasProperty = require('es-abstract/2020/HasProperty');\nvar IsCallable = require('es-abstract/2020/IsCallable');\nvar LengthOfArrayLike = require('es-abstract/2020/LengthOfArrayLike');\nvar ToBoolean = require('es-abstract/2020/ToBoolean');\nvar ToObject = require('es-abstract/2020/ToObject');\nvar ToString = require('es-abstract/2020/ToString');\nvar callBound = require('call-bind/callBound');\nvar isString = require('is-string');\n\n// Check failure of by-index access of string characters (IE < 9) and failure of `0 in boxedString` (Rhino)\nvar boxedString = Object('a');\nvar splitString = boxedString[0] !== 'a' || !(0 in boxedString);\n\nvar strSplit = callBound('String.prototype.split');\n\nmodule.exports = function filter(callbackfn) {\n\tvar O = ToObject(this);\n\tvar self = splitString && isString(O) ? strSplit(O, '') : O;\n\tvar len = LengthOfArrayLike(self);\n\n\t// If no callback function or if callback is not a callable function\n\tif (!IsCallable(callbackfn)) {\n\t\tthrow new TypeError('Array.prototype.filter callback must be a function');\n\t}\n\n\tvar thisArg;\n\tif (arguments.length > 1) {\n\t\tthisArg = arguments[1];\n\t}\n\n\tvar A = ArraySpeciesCreate(O, 0);\n\tvar k = 0;\n\tvar to = 0;\n\n\twhile (k < len) {\n\t\tvar Pk = ToString(k);\n\t\tvar kPresent = HasProperty(O, Pk);\n\t\tif (kPresent) {\n\t\t\tvar kValue = Get(O, Pk);\n\t\t\tvar selected = ToBoolean(Call(callbackfn, thisArg, [kValue, k, O]));\n\t\t\tif (selected) {\n\t\t\t\tCreateDataPropertyOrThrow(A, ToString(to), kValue);\n\t\t\t\tto += 1;\n\t\t\t}\n\t\t}\n\t\tk += 1;\n\t}\n\n\treturn A;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar RequireObjectCoercible = require('es-abstract/2020/RequireObjectCoercible');\nvar callBound = require('call-bind/callBound');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar polyfill = getPolyfill();\nvar shim = require('./shim');\n\nvar $slice = callBound('Array.prototype.slice');\n\n// eslint-disable-next-line no-unused-vars\nvar bound = function filter(array, callbackfn) {\n\tRequireObjectCoercible(array);\n\treturn polyfill.apply(array, $slice(arguments, 1));\n};\ndefine(bound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = bound;\n","'use strict';\n\nvar arrayMethodBoxesProperly = require('es-array-method-boxes-properly');\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\tvar method = Array.prototype.filter;\n\treturn arrayMethodBoxesProperly(method) ? method : implementation;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar getPolyfill = require('./polyfill');\n\nmodule.exports = function shimArrayPrototypeMap() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tArray.prototype,\n\t\t{ filter: polyfill },\n\t\t{ filter: function () { return Array.prototype.filter !== polyfill; } }\n\t);\n\treturn polyfill;\n};\n","'use strict';\n\nvar filter = require('array.prototype.filter');\n\nmodule.exports = function availableTypedArrays() {\n\treturn filter([\n\t\t'BigInt64Array',\n\t\t'BigUint64Array',\n\t\t'Float32Array',\n\t\t'Float64Array',\n\t\t'Int16Array',\n\t\t'Int32Array',\n\t\t'Int8Array',\n\t\t'Uint16Array',\n\t\t'Uint32Array',\n\t\t'Uint8Array',\n\t\t'Uint8ClampedArray'\n\t], function (typedArray) {\n\t\treturn typeof global[typedArray] === 'function';\n\t});\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","var charenc = {\n  // UTF-8 encoding\n  utf8: {\n    // Convert a string to a byte array\n    stringToBytes: function(str) {\n      return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));\n    },\n\n    // Convert a byte array to a string\n    bytesToString: function(bytes) {\n      return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));\n    }\n  },\n\n  // Binary encoding\n  bin: {\n    // Convert a string to a byte array\n    stringToBytes: function(str) {\n      for (var bytes = [], i = 0; i < str.length; i++)\n        bytes.push(str.charCodeAt(i) & 0xFF);\n      return bytes;\n    },\n\n    // Convert a byte array to a string\n    bytesToString: function(bytes) {\n      for (var str = [], i = 0; i < bytes.length; i++)\n        str.push(String.fromCharCode(bytes[i]));\n      return str.join('');\n    }\n  }\n};\n\nmodule.exports = charenc;\n","(function() {\n  var base64map\n      = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n\n  crypt = {\n    // Bit-wise rotation left\n    rotl: function(n, b) {\n      return (n << b) | (n >>> (32 - b));\n    },\n\n    // Bit-wise rotation right\n    rotr: function(n, b) {\n      return (n << (32 - b)) | (n >>> b);\n    },\n\n    // Swap big-endian to little-endian and vice versa\n    endian: function(n) {\n      // If number given, swap endian\n      if (n.constructor == Number) {\n        return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;\n      }\n\n      // Else, assume array and swap all items\n      for (var i = 0; i < n.length; i++)\n        n[i] = crypt.endian(n[i]);\n      return n;\n    },\n\n    // Generate an array of any length of random bytes\n    randomBytes: function(n) {\n      for (var bytes = []; n > 0; n--)\n        bytes.push(Math.floor(Math.random() * 256));\n      return bytes;\n    },\n\n    // Convert a byte array to big-endian 32-bit words\n    bytesToWords: function(bytes) {\n      for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)\n        words[b >>> 5] |= bytes[i] << (24 - b % 32);\n      return words;\n    },\n\n    // Convert big-endian 32-bit words to a byte array\n    wordsToBytes: function(words) {\n      for (var bytes = [], b = 0; b < words.length * 32; b += 8)\n        bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);\n      return bytes;\n    },\n\n    // Convert a byte array to a hex string\n    bytesToHex: function(bytes) {\n      for (var hex = [], i = 0; i < bytes.length; i++) {\n        hex.push((bytes[i] >>> 4).toString(16));\n        hex.push((bytes[i] & 0xF).toString(16));\n      }\n      return hex.join('');\n    },\n\n    // Convert a hex string to a byte array\n    hexToBytes: function(hex) {\n      for (var bytes = [], c = 0; c < hex.length; c += 2)\n        bytes.push(parseInt(hex.substr(c, 2), 16));\n      return bytes;\n    },\n\n    // Convert a byte array to a base-64 string\n    bytesToBase64: function(bytes) {\n      for (var base64 = [], i = 0; i < bytes.length; i += 3) {\n        var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n        for (var j = 0; j < 4; j++)\n          if (i * 8 + j * 6 <= bytes.length * 8)\n            base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F));\n          else\n            base64.push('=');\n      }\n      return base64.join('');\n    },\n\n    // Convert a base-64 string to a byte array\n    base64ToBytes: function(base64) {\n      // Remove non-base-64 characters\n      base64 = base64.replace(/[^A-Z0-9+\\/]/ig, '');\n\n      for (var bytes = [], i = 0, imod4 = 0; i < base64.length;\n          imod4 = ++i % 4) {\n        if (imod4 == 0) continue;\n        bytes.push(((base64map.indexOf(base64.charAt(i - 1))\n            & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2))\n            | (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));\n      }\n      return bytes;\n    }\n  };\n\n  module.exports = crypt;\n})();\n","\n\nclass ResizeableBuffer{\n  constructor(size=100){\n    this.size = size\n    this.length = 0\n    this.buf = Buffer.alloc(size)\n  }\n  prepend(val){\n    const length = this.length++\n    if(length === this.size){\n      this.resize()\n    }\n    const buf = this.clone()\n    this.buf[0] = val\n    buf.copy(this.buf,1, 0, length)\n  }\n  append(val){\n    const length = this.length++\n    if(length === this.size){\n      this.resize()\n    }\n    this.buf[length] = val\n  }\n  clone(){\n    return Buffer.from(this.buf.slice(0, this.length))\n  }\n  resize(){\n    const length = this.length\n    this.size = this.size * 2\n    const buf = Buffer.alloc(this.size)\n    this.buf.copy(buf,0, 0, length)\n    this.buf = buf\n  }\n  toString(){\n    return this.buf.slice(0, this.length).toString()\n  }\n  toJSON(){\n    return this.toString()\n  }\n  reset(){\n    this.length = 0\n  }\n}\n\nmodule.exports = ResizeableBuffer\n","\n/*\nCSV Parse\n\nPlease look at the [project documentation](https://csv.js.org/parse/) for\nadditional information.\n*/\n\nconst { Transform } = require('stream')\nconst ResizeableBuffer = require('./ResizeableBuffer')\n\nconst tab = 9\nconst nl = 10\nconst np = 12\nconst cr = 13\nconst space = 32\nconst bom_utf8 = Buffer.from([239, 187, 191])\n\nclass Parser extends Transform {\n  constructor(opts = {}){\n    super({...{readableObjectMode: true}, ...opts})\n    const options = {}\n    // Merge with user options\n    for(let opt in opts){\n      options[underscore(opt)] = opts[opt]\n    }\n    // Normalize option `bom`\n    if(options.bom === undefined || options.bom === null || options.bom === false){\n      options.bom = false\n    }else if(options.bom !== true){\n      throw new CsvError('CSV_INVALID_OPTION_BOM', [\n        'Invalid option bom:', 'bom must be true,',\n        `got ${JSON.stringify(options.bom)}`\n      ])\n    }\n    // Normalize option `cast`\n    let fnCastField = null\n    if(options.cast === undefined || options.cast === null || options.cast === false || options.cast === ''){\n      options.cast = undefined\n    }else if(typeof options.cast === 'function'){\n      fnCastField = options.cast\n      options.cast = true\n    }else if(options.cast !== true){\n      throw new CsvError('CSV_INVALID_OPTION_CAST', [\n        'Invalid option cast:', 'cast must be true or a function,',\n        `got ${JSON.stringify(options.cast)}`\n      ])\n    }\n    // Normalize option `cast_date`\n    if(options.cast_date === undefined || options.cast_date === null || options.cast_date === false || options.cast_date === ''){\n      options.cast_date = false\n    }else if(options.cast_date === true){\n      options.cast_date = function(value){\n        const date = Date.parse(value)\n        return !isNaN(date) ? new Date(date) : value\n      }\n    }else if(typeof options.cast_date !== 'function'){\n      throw new CsvError('CSV_INVALID_OPTION_CAST_DATE', [\n        'Invalid option cast_date:', 'cast_date must be true or a function,',\n        `got ${JSON.stringify(options.cast_date)}`\n      ])\n    }\n    // Normalize option `columns`\n    let fnFirstLineToHeaders = null\n    if(options.columns === true){\n      // Fields in the first line are converted as-is to columns\n      fnFirstLineToHeaders = undefined\n    }else if(typeof options.columns === 'function'){\n      fnFirstLineToHeaders = options.columns\n      options.columns = true\n    }else if(Array.isArray(options.columns)){\n      options.columns = normalizeColumnsArray(options.columns)\n    }else if(options.columns === undefined || options.columns === null || options.columns === false){\n      options.columns = false\n    }else{\n      throw new CsvError('CSV_INVALID_OPTION_COLUMNS', [\n        'Invalid option columns:',\n        'expect an object, a function or true,',\n        `got ${JSON.stringify(options.columns)}`\n      ])\n    }\n    // Normalize option `columns_duplicates_to_array`\n    if(options.columns_duplicates_to_array === undefined || options.columns_duplicates_to_array === null || options.columns_duplicates_to_array === false){\n      options.columns_duplicates_to_array = false\n    }else if(options.columns_duplicates_to_array !== true){\n      throw new CsvError('CSV_INVALID_OPTION_COLUMNS_DUPLICATES_TO_ARRAY', [\n        'Invalid option columns_duplicates_to_array:',\n        'expect an boolean,',\n        `got ${JSON.stringify(options.columns_duplicates_to_array)}`\n      ])\n    }\n    // Normalize option `comment`\n    if(options.comment === undefined || options.comment === null || options.comment === false || options.comment === ''){\n      options.comment = null\n    }else{\n      if(typeof options.comment === 'string'){\n        options.comment = Buffer.from(options.comment)\n      }\n      if(!Buffer.isBuffer(options.comment)){\n        throw new CsvError('CSV_INVALID_OPTION_COMMENT', [\n          'Invalid option comment:',\n          'comment must be a buffer or a string,',\n          `got ${JSON.stringify(options.comment)}`\n        ])\n      }\n    }\n    // Normalize option `delimiter`\n    const delimiter_json = JSON.stringify(options.delimiter)\n    if(!Array.isArray(options.delimiter)) options.delimiter = [options.delimiter]\n    if(options.delimiter.length === 0){\n      throw new CsvError('CSV_INVALID_OPTION_DELIMITER', [\n        'Invalid option delimiter:',\n        'delimiter must be a non empty string or buffer or array of string|buffer,',\n        `got ${delimiter_json}`\n      ])\n    }\n    options.delimiter = options.delimiter.map(function(delimiter){\n      if(delimiter === undefined || delimiter === null || delimiter === false){\n        return Buffer.from(',')\n      }\n      if(typeof delimiter === 'string'){\n        delimiter = Buffer.from(delimiter)\n      }\n      if( !Buffer.isBuffer(delimiter) || delimiter.length === 0){\n        throw new CsvError('CSV_INVALID_OPTION_DELIMITER', [\n          'Invalid option delimiter:',\n          'delimiter must be a non empty string or buffer or array of string|buffer,',\n          `got ${delimiter_json}`\n        ])\n      }\n      return delimiter\n    })\n    // Normalize option `escape`\n    if(options.escape === undefined || options.escape === null){\n      options.escape = Buffer.from('\"')\n    }else if(typeof options.escape === 'string'){\n      options.escape = Buffer.from(options.escape)\n    }\n    if(!Buffer.isBuffer(options.escape)){\n      throw new Error(`Invalid Option: escape must be a buffer or a string, got ${JSON.stringify(options.escape)}`)\n    }else if(options.escape.length !== 1){\n      throw new Error(`Invalid Option Length: escape must be one character, got ${options.escape.length}`)\n    }else{\n      options.escape = options.escape[0]\n    }\n    // Normalize option `from`\n    if(options.from === undefined || options.from === null){\n      options.from = 1\n    }else{\n      if(typeof options.from === 'string' && /\\d+/.test(options.from)){\n        options.from = parseInt(options.from)\n      }\n      if(Number.isInteger(options.from)){\n        if(options.from < 0){\n          throw new Error(`Invalid Option: from must be a positive integer, got ${JSON.stringify(opts.from)}`)\n        }\n      }else{\n        throw new Error(`Invalid Option: from must be an integer, got ${JSON.stringify(options.from)}`)\n      }\n    }\n    // Normalize option `from_line`\n    if(options.from_line === undefined || options.from_line === null){\n      options.from_line = 1\n    }else{\n      if(typeof options.from_line === 'string' && /\\d+/.test(options.from_line)){\n        options.from_line = parseInt(options.from_line)\n      }\n      if(Number.isInteger(options.from_line)){\n        if(options.from_line <= 0){\n          throw new Error(`Invalid Option: from_line must be a positive integer greater than 0, got ${JSON.stringify(opts.from_line)}`)\n        }\n      }else{\n        throw new Error(`Invalid Option: from_line must be an integer, got ${JSON.stringify(opts.from_line)}`)\n      }\n    }\n    // Normalize option `info`\n    if(options.info === undefined || options.info === null || options.info === false){\n      options.info = false\n    }else if(options.info !== true){\n      throw new Error(`Invalid Option: info must be true, got ${JSON.stringify(options.info)}`)\n    }\n    // Normalize option `max_record_size`\n    if(options.max_record_size === undefined || options.max_record_size === null || options.max_record_size === false){\n      options.max_record_size = 0\n    }else if(Number.isInteger(options.max_record_size) && options.max_record_size >= 0){\n      // Great, nothing to do\n    }else if(typeof options.max_record_size === 'string' && /\\d+/.test(options.max_record_size)){\n      options.max_record_size = parseInt(options.max_record_size)\n    }else{\n      throw new Error(`Invalid Option: max_record_size must be a positive integer, got ${JSON.stringify(options.max_record_size)}`)\n    }\n    // Normalize option `objname`\n    if(options.objname === undefined || options.objname === null || options.objname === false){\n      options.objname = undefined\n    }else if(Buffer.isBuffer(options.objname)){\n      if(options.objname.length === 0){\n        throw new Error(`Invalid Option: objname must be a non empty buffer`)\n      }\n      options.objname = options.objname.toString()\n    }else if(typeof options.objname === 'string'){\n      if(options.objname.length === 0){\n        throw new Error(`Invalid Option: objname must be a non empty string`)\n      }\n      // Great, nothing to do\n    }else{\n      throw new Error(`Invalid Option: objname must be a string or a buffer, got ${options.objname}`)\n    }\n    // Normalize option `on_record`\n    if(options.on_record === undefined || options.on_record === null){\n      options.on_record = undefined\n    }else if(typeof options.on_record !== 'function'){\n      throw new CsvError('CSV_INVALID_OPTION_ON_RECORD', [\n        'Invalid option `on_record`:',\n        'expect a function,',\n        `got ${JSON.stringify(options.on_record)}`\n      ])\n    }\n    // Normalize option `quote`\n    if(options.quote === null || options.quote === false || options.quote === ''){\n      options.quote = null\n    }else{\n      if(options.quote === undefined || options.quote === true){\n        options.quote = Buffer.from('\"')\n      }else if(typeof options.quote === 'string'){\n        options.quote = Buffer.from(options.quote)\n      }\n      if(!Buffer.isBuffer(options.quote)){\n        throw new Error(`Invalid Option: quote must be a buffer or a string, got ${JSON.stringify(options.quote)}`)\n      }else if(options.quote.length !== 1){\n        throw new Error(`Invalid Option Length: quote must be one character, got ${options.quote.length}`)\n      }else{\n        options.quote = options.quote[0]\n      }\n    }\n    // Normalize option `raw`\n    if(options.raw === undefined || options.raw === null || options.raw === false){\n      options.raw = false\n    }else if(options.raw !== true){\n      throw new Error(`Invalid Option: raw must be true, got ${JSON.stringify(options.raw)}`)\n    }\n    // Normalize option `record_delimiter`\n    if(!options.record_delimiter){\n      options.record_delimiter = []\n    }else if(!Array.isArray(options.record_delimiter)){\n      options.record_delimiter = [options.record_delimiter]\n    }\n    options.record_delimiter = options.record_delimiter.map( function(rd){\n      if(typeof rd === 'string'){\n        rd = Buffer.from(rd)\n      }\n      return rd\n    })\n    // Normalize option `relax`\n    if(typeof options.relax === 'boolean'){\n      // Great, nothing to do\n    }else if(options.relax === undefined || options.relax === null){\n      options.relax = false\n    }else{\n      throw new Error(`Invalid Option: relax must be a boolean, got ${JSON.stringify(options.relax)}`)\n    }\n    // Normalize option `relax_column_count`\n    if(typeof options.relax_column_count === 'boolean'){\n      // Great, nothing to do\n    }else if(options.relax_column_count === undefined || options.relax_column_count === null){\n      options.relax_column_count = false\n    }else{\n      throw new Error(`Invalid Option: relax_column_count must be a boolean, got ${JSON.stringify(options.relax_column_count)}`)\n    }\n    if(typeof options.relax_column_count_less === 'boolean'){\n      // Great, nothing to do\n    }else if(options.relax_column_count_less === undefined || options.relax_column_count_less === null){\n      options.relax_column_count_less = false\n    }else{\n      throw new Error(`Invalid Option: relax_column_count_less must be a boolean, got ${JSON.stringify(options.relax_column_count_less)}`)\n    }\n    if(typeof options.relax_column_count_more === 'boolean'){\n      // Great, nothing to do\n    }else if(options.relax_column_count_more === undefined || options.relax_column_count_more === null){\n      options.relax_column_count_more = false\n    }else{\n      throw new Error(`Invalid Option: relax_column_count_more must be a boolean, got ${JSON.stringify(options.relax_column_count_more)}`)\n    }\n    // Normalize option `skip_empty_lines`\n    if(typeof options.skip_empty_lines === 'boolean'){\n      // Great, nothing to do\n    }else if(options.skip_empty_lines === undefined || options.skip_empty_lines === null){\n      options.skip_empty_lines = false\n    }else{\n      throw new Error(`Invalid Option: skip_empty_lines must be a boolean, got ${JSON.stringify(options.skip_empty_lines)}`)\n    }\n    // Normalize option `skip_lines_with_empty_values`\n    if(typeof options.skip_lines_with_empty_values === 'boolean'){\n      // Great, nothing to do\n    }else if(options.skip_lines_with_empty_values === undefined || options.skip_lines_with_empty_values === null){\n      options.skip_lines_with_empty_values = false\n    }else{\n      throw new Error(`Invalid Option: skip_lines_with_empty_values must be a boolean, got ${JSON.stringify(options.skip_lines_with_empty_values)}`)\n    }\n    // Normalize option `skip_lines_with_error`\n    if(typeof options.skip_lines_with_error === 'boolean'){\n      // Great, nothing to do\n    }else if(options.skip_lines_with_error === undefined || options.skip_lines_with_error === null){\n      options.skip_lines_with_error = false\n    }else{\n      throw new Error(`Invalid Option: skip_lines_with_error must be a boolean, got ${JSON.stringify(options.skip_lines_with_error)}`)\n    }\n    // Normalize option `rtrim`\n    if(options.rtrim === undefined || options.rtrim === null || options.rtrim === false){\n      options.rtrim = false\n    }else if(options.rtrim !== true){\n      throw new Error(`Invalid Option: rtrim must be a boolean, got ${JSON.stringify(options.rtrim)}`)\n    }\n    // Normalize option `ltrim`\n    if(options.ltrim === undefined || options.ltrim === null || options.ltrim === false){\n      options.ltrim = false\n    }else if(options.ltrim !== true){\n      throw new Error(`Invalid Option: ltrim must be a boolean, got ${JSON.stringify(options.ltrim)}`)\n    }\n    // Normalize option `trim`\n    if(options.trim === undefined || options.trim === null || options.trim === false){\n      options.trim = false\n    }else if(options.trim !== true){\n      throw new Error(`Invalid Option: trim must be a boolean, got ${JSON.stringify(options.trim)}`)\n    }\n    // Normalize options `trim`, `ltrim` and `rtrim`\n    if(options.trim === true && opts.ltrim !== false){\n      options.ltrim = true\n    }else if(options.ltrim !== true){\n      options.ltrim = false\n    }\n    if(options.trim === true && opts.rtrim !== false){\n      options.rtrim = true\n    }else if(options.rtrim !== true){\n      options.rtrim = false\n    }\n    // Normalize option `to`\n    if(options.to === undefined || options.to === null){\n      options.to = -1\n    }else{\n      if(typeof options.to === 'string' && /\\d+/.test(options.to)){\n        options.to = parseInt(options.to)\n      }\n      if(Number.isInteger(options.to)){\n        if(options.to <= 0){\n          throw new Error(`Invalid Option: to must be a positive integer greater than 0, got ${JSON.stringify(opts.to)}`)\n        }\n      }else{\n        throw new Error(`Invalid Option: to must be an integer, got ${JSON.stringify(opts.to)}`)\n      }\n    }\n    // Normalize option `to_line`\n    if(options.to_line === undefined || options.to_line === null){\n      options.to_line = -1\n    }else{\n      if(typeof options.to_line === 'string' && /\\d+/.test(options.to_line)){\n        options.to_line = parseInt(options.to_line)\n      }\n      if(Number.isInteger(options.to_line)){\n        if(options.to_line <= 0){\n          throw new Error(`Invalid Option: to_line must be a positive integer greater than 0, got ${JSON.stringify(opts.to_line)}`)\n        }\n      }else{\n        throw new Error(`Invalid Option: to_line must be an integer, got ${JSON.stringify(opts.to_line)}`)\n      }\n    }\n    this.info = {\n      comment_lines: 0,\n      empty_lines: 0,\n      invalid_field_length: 0,\n      lines: 1,\n      records: 0\n    }\n    this.options = options\n    this.state = {\n      bomSkipped: false,\n      castField: fnCastField,\n      commenting: false,\n      enabled: options.from_line === 1,\n      escaping: false,\n      escapeIsQuote: options.escape === options.quote,\n      expectedRecordLength: options.columns === null ? 0 : options.columns.length,\n      field: new ResizeableBuffer(20),\n      firstLineToHeaders: fnFirstLineToHeaders,\n      info: Object.assign({}, this.info),\n      previousBuf: undefined,\n      quoting: false,\n      stop: false,\n      rawBuffer: new ResizeableBuffer(100),\n      record: [],\n      recordHasError: false,\n      record_length: 0,\n      recordDelimiterMaxLength: options.record_delimiter.length === 0 ? 2 : Math.max(...options.record_delimiter.map( (v) => v.length)),\n      trimChars: [Buffer.from(' ')[0], Buffer.from('\\t')[0]],\n      wasQuoting: false,\n      wasRowDelimiter: false\n    }\n  }\n  // Implementation of `Transform._transform`\n  _transform(buf, encoding, callback){\n    if(this.state.stop === true){\n      return\n    }\n    const err = this.__parse(buf, false)\n    if(err !== undefined){\n      this.state.stop = true\n    }\n    callback(err)\n  }\n  // Implementation of `Transform._flush`\n  _flush(callback){\n    if(this.state.stop === true){\n      return\n    }\n    const err = this.__parse(undefined, true)\n    callback(err)\n  }\n  // Central parser implementation\n  __parse(nextBuf, end){\n    const {bom, comment, escape, from_line, info, ltrim, max_record_size, quote, raw, relax, rtrim, skip_empty_lines, to, to_line} = this.options\n    let {record_delimiter} = this.options\n    const {bomSkipped, previousBuf, rawBuffer, escapeIsQuote} = this.state\n    let buf\n    if(previousBuf === undefined){\n      if(nextBuf === undefined){\n        // Handle empty string\n        this.push(null)\n        return\n      }else{\n        buf = nextBuf\n      }\n    }else if(previousBuf !== undefined && nextBuf === undefined){\n      buf = previousBuf\n    }else{\n      buf = Buffer.concat([previousBuf, nextBuf])\n    }\n    // Handle UTF BOM\n    if(bomSkipped === false){\n      if(bom === false){\n        this.state.bomSkipped = true\n      }else if(buf.length < 3){\n        // No enough data\n        if(end === false){\n          // Wait for more data\n          this.state.previousBuf = buf\n          return\n        }\n        // skip BOM detect because data length < 3\n      }else{\n        if(bom_utf8.compare(buf, 0, 3) === 0){\n          // Skip BOM\n          buf = buf.slice(3)\n        }\n        this.state.bomSkipped = true\n      }\n    }\n    const bufLen = buf.length\n    let pos\n    for(pos = 0; pos < bufLen; pos++){\n      // Ensure we get enough space to look ahead\n      // There should be a way to move this out of the loop\n      if(this.__needMoreData(pos, bufLen, end)){\n        break\n      }\n      if(this.state.wasRowDelimiter === true){\n        this.info.lines++\n        if(info === true && this.state.record.length === 0 && this.state.field.length === 0 && this.state.wasQuoting === false){\n          this.state.info = Object.assign({}, this.info)\n        }\n        this.state.wasRowDelimiter = false\n      }\n      if(to_line !== -1 && this.info.lines > to_line){\n        this.state.stop = true\n        this.push(null)\n        return\n      }\n      // Auto discovery of record_delimiter, unix, mac and windows supported\n      if(this.state.quoting === false && record_delimiter.length === 0){\n        const record_delimiterCount = this.__autoDiscoverRowDelimiter(buf, pos)\n        if(record_delimiterCount){\n          record_delimiter = this.options.record_delimiter\n        }\n      }\n      const chr = buf[pos]\n      if(raw === true){\n        rawBuffer.append(chr)\n      }\n      if((chr === cr || chr === nl) && this.state.wasRowDelimiter === false ){\n        this.state.wasRowDelimiter = true\n      }\n      // Previous char was a valid escape char\n      // treat the current char as a regular char\n      if(this.state.escaping === true){\n        this.state.escaping = false\n      }else{\n        // Escape is only active inside quoted fields\n        // We are quoting, the char is an escape chr and there is a chr to escape\n        if(this.state.quoting === true && chr === escape && pos + 1 < bufLen){\n          if(escapeIsQuote){\n            if(buf[pos+1] === quote){\n              this.state.escaping = true\n              continue\n            }\n          }else{\n            this.state.escaping = true\n            continue\n          }\n        }\n        // Not currently escaping and chr is a quote\n        // TODO: need to compare bytes instead of single char\n        if(this.state.commenting === false && chr === quote){\n          if(this.state.quoting === true){\n            const nextChr = buf[pos+1]\n            const isNextChrTrimable = rtrim && this.__isCharTrimable(nextChr)\n            // const isNextChrComment = nextChr === comment\n            const isNextChrComment = comment !== null && this.__compareBytes(comment, buf, pos+1, nextChr)\n            const isNextChrDelimiter = this.__isDelimiter(nextChr, buf, pos+1)\n            const isNextChrRowDelimiter = record_delimiter.length === 0 ? this.__autoDiscoverRowDelimiter(buf, pos+1) : this.__isRecordDelimiter(nextChr, buf, pos+1)\n            // Escape a quote\n            // Treat next char as a regular character\n            // TODO: need to compare bytes instead of single char\n            if(chr === escape && nextChr === quote){\n              pos++\n            }else if(!nextChr || isNextChrDelimiter || isNextChrRowDelimiter || isNextChrComment || isNextChrTrimable){\n              this.state.quoting = false\n              this.state.wasQuoting = true\n              continue\n            }else if(relax === false){\n              const err = this.__error(\n                new CsvError('CSV_INVALID_CLOSING_QUOTE', [\n                  'Invalid Closing Quote:',\n                  `got \"${String.fromCharCode(nextChr)}\"`,\n                  `at line ${this.info.lines}`,\n                  'instead of delimiter, row delimiter, trimable character',\n                  '(if activated) or comment',\n                ], this.__context())\n              )\n              if(err !== undefined) return err\n            }else{\n              this.state.quoting = false\n              this.state.wasQuoting = true\n              // continue\n              this.state.field.prepend(quote)\n            }\n          }else{\n            if(this.state.field.length !== 0){\n              // In relax mode, treat opening quote preceded by chrs as regular\n              if( relax === false ){\n                const err = this.__error(\n                  new CsvError('INVALID_OPENING_QUOTE', [\n                    'Invalid Opening Quote:',\n                    `a quote is found inside a field at line ${this.info.lines}`,\n                  ], this.__context(), {\n                    field: this.state.field,\n                  })\n                )\n                if(err !== undefined) return err\n              }\n            }else{\n              this.state.quoting = true\n              continue\n            }\n          }\n        }\n        if(this.state.quoting === false){\n          let recordDelimiterLength = this.__isRecordDelimiter(chr, buf, pos)\n          if(recordDelimiterLength !== 0){\n            // Do not emit comments which take a full line\n            const skipCommentLine = this.state.commenting && (this.state.wasQuoting === false && this.state.record.length === 0 && this.state.field.length === 0)\n            if(skipCommentLine){\n              this.info.comment_lines++\n              // Skip full comment line\n            }else{\n              // Skip if line is empty and skip_empty_lines activated\n              if(skip_empty_lines === true && this.state.wasQuoting === false && this.state.record.length === 0 && this.state.field.length === 0){\n                this.info.empty_lines++\n                pos += recordDelimiterLength - 1\n                continue\n              }\n              // Activate records emition if above from_line\n              if(this.state.enabled === false && this.info.lines + (this.state.wasRowDelimiter === true ? 1: 0 ) >= from_line){\n                this.state.enabled = true\n                this.__resetField()\n                this.__resetRow()\n                pos += recordDelimiterLength - 1\n                continue\n              }else{\n                const errField = this.__onField()\n                if(errField !== undefined) return errField\n                const errRecord = this.__onRow()\n                if(errRecord !== undefined) return errRecord\n              }\n              if(to !== -1 && this.info.records >= to){\n                this.state.stop = true\n                this.push(null)\n                return\n              }\n            }\n            this.state.commenting = false\n            pos += recordDelimiterLength - 1\n            continue\n          }\n          if(this.state.commenting){\n            continue\n          }\n          const commentCount = comment === null ? 0 : this.__compareBytes(comment, buf, pos, chr)\n          if(commentCount !== 0){\n            this.state.commenting = true\n            continue\n          }\n          let delimiterLength = this.__isDelimiter(chr, buf, pos)\n          if(delimiterLength !== 0){\n            const errField = this.__onField()\n            if(errField !== undefined) return errField\n            pos += delimiterLength - 1\n            continue\n          }\n        }\n      }\n      if(this.state.commenting === false){\n        if(max_record_size !== 0 && this.state.record_length + this.state.field.length > max_record_size){\n          const err = this.__error(\n            new CsvError('CSV_MAX_RECORD_SIZE', [\n              'Max Record Size:',\n              'record exceed the maximum number of tolerated bytes',\n              `of ${max_record_size}`,\n              `at line ${this.info.lines}`,\n            ], this.__context())\n          )\n          if(err !== undefined) return err\n        }\n      }\n\n      const lappend = ltrim === false || this.state.quoting === true || this.state.field.length !== 0 || !this.__isCharTrimable(chr)\n      // rtrim in non quoting is handle in __onField\n      const rappend = rtrim === false || this.state.wasQuoting === false\n      if( lappend === true && rappend === true ){\n        this.state.field.append(chr)\n      }else if(rtrim === true && !this.__isCharTrimable(chr)){\n        const err = this.__error(\n          new CsvError('CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTE', [\n            'Invalid Closing Quote:',\n            'found non trimable byte after quote',\n            `at line ${this.info.lines}`,\n          ], this.__context())\n        )\n        if(err !== undefined) return err\n      }\n    }\n    if(end === true){\n      // Ensure we are not ending in a quoting state\n      if(this.state.quoting === true){\n        const err = this.__error(\n          new CsvError('CSV_QUOTE_NOT_CLOSED', [\n            'Quote Not Closed:',\n            `the parsing is finished with an opening quote at line ${this.info.lines}`,\n          ], this.__context())\n        )\n        if(err !== undefined) return err\n      }else{\n        // Skip last line if it has no characters\n        if(this.state.wasQuoting === true || this.state.record.length !== 0 || this.state.field.length !== 0){\n          const errField = this.__onField()\n          if(errField !== undefined) return errField\n          const errRecord = this.__onRow()\n          if(errRecord !== undefined) return errRecord\n        }else if(this.state.wasRowDelimiter === true){\n          this.info.empty_lines++\n        }else if(this.state.commenting === true){\n          this.info.comment_lines++\n        }\n      }\n    }else{\n      this.state.previousBuf = buf.slice(pos)\n    }\n    if(this.state.wasRowDelimiter === true){\n      this.info.lines++\n      this.state.wasRowDelimiter = false\n    }\n  }\n  // Helper to test if a character is a space or a line delimiter\n  __isCharTrimable(chr){\n    return chr === space || chr === tab || chr === cr || chr === nl || chr === np\n  }\n  __onRow(){\n    const {columns, columns_duplicates_to_array, info, from, relax_column_count, relax_column_count_less, relax_column_count_more, raw, skip_lines_with_empty_values} = this.options\n    const {enabled, record} = this.state\n    if(enabled === false){\n      return this.__resetRow()\n    }\n    // Convert the first line into column names\n    const recordLength = record.length\n    if(columns === true){\n      if(isRecordEmpty(record)){\n        this.__resetRow()\n        return\n      }\n      return this.__firstLineToColumns(record)\n    }\n    if(columns === false && this.info.records === 0){\n      this.state.expectedRecordLength = recordLength\n    }\n    if(recordLength !== this.state.expectedRecordLength){\n      if(relax_column_count === true || \n        (relax_column_count_less === true && recordLength < this.state.expectedRecordLength) ||\n        (relax_column_count_more === true && recordLength > this.state.expectedRecordLength) ){\n        this.info.invalid_field_length++\n      }else{\n        if(columns === false){\n          const err = this.__error(\n            new CsvError('CSV_INCONSISTENT_RECORD_LENGTH', [\n              'Invalid Record Length:',\n              `expect ${this.state.expectedRecordLength},`,\n              `got ${recordLength} on line ${this.info.lines}`,\n            ], this.__context(), {\n              record: record,\n            })\n          )\n          if(err !== undefined) return err\n        }else{\n          const err = this.__error(\n            // CSV_INVALID_RECORD_LENGTH_DONT_MATCH_COLUMNS\n            new CsvError('CSV_RECORD_DONT_MATCH_COLUMNS_LENGTH', [\n              'Invalid Record Length:',\n              `columns length is ${columns.length},`, // rename columns\n              `got ${recordLength} on line ${this.info.lines}`,\n            ], this.__context(), {\n              record: record,\n            })\n          )\n          if(err !== undefined) return err\n        }\n      }\n    }\n    if(skip_lines_with_empty_values === true){\n      if(isRecordEmpty(record)){\n        this.__resetRow()\n        return\n      }\n    }\n    if(this.state.recordHasError === true){\n      this.__resetRow()\n      this.state.recordHasError = false\n      return\n    }\n    this.info.records++\n    if(from === 1 || this.info.records >= from){\n      if(columns !== false){\n        const obj = {}\n        // Transform record array to an object\n        for(let i = 0, l = record.length; i < l; i++){\n          if(columns[i] === undefined || columns[i].disabled) continue\n          // obj[columns[i].name] = record[i]\n          // Turn duplicate columns into an array\n          if (columns_duplicates_to_array === true && obj[columns[i].name]) {\n            if (Array.isArray(obj[columns[i].name])) {\n              obj[columns[i].name] = obj[columns[i].name].concat(record[i])\n            } else {\n              obj[columns[i].name] = [obj[columns[i].name], record[i]]\n            }\n          } else {\n            obj[columns[i].name] = record[i]\n          }\n        }\n        const {objname} = this.options\n        if(objname === undefined){\n          if(raw === true || info === true){\n            const err = this.__push(Object.assign(\n              {record: obj},\n              (raw === true ? {raw: this.state.rawBuffer.toString()}: {}),\n              (info === true ? {info: this.state.info}: {})\n            ))\n            if(err){\n              return err\n            }\n          }else{\n            const err = this.__push(obj)\n            if(err){\n              return err\n            }\n          }\n        }else{\n          if(raw === true || info === true){\n            const err = this.__push(Object.assign(\n              {record: [obj[objname], obj]},\n              raw === true ? {raw: this.state.rawBuffer.toString()}: {},\n              info === true ? {info: this.state.info}: {}\n            ))\n            if(err){\n              return err\n            }\n          }else{\n            const err = this.__push([obj[objname], obj])\n            if(err){\n              return err\n            }\n          }\n        }\n      }else{\n        if(raw === true || info === true){\n          const err = this.__push(Object.assign(\n            {record: record},\n            raw === true ? {raw: this.state.rawBuffer.toString()}: {},\n            info === true ? {info: this.state.info}: {}\n          ))\n          if(err){\n            return err\n          }\n        }else{\n          const err = this.__push(record)\n          if(err){\n            return err\n          }\n        }\n      }\n    }\n    this.__resetRow()\n  }\n  __firstLineToColumns(record){\n    const {firstLineToHeaders} = this.state\n    try{\n      const headers = firstLineToHeaders === undefined ? record : firstLineToHeaders.call(null, record)\n      if(!Array.isArray(headers)){\n        return this.__error(\n          new CsvError('CSV_INVALID_COLUMN_MAPPING', [\n            'Invalid Column Mapping:',\n            'expect an array from column function,',\n            `got ${JSON.stringify(headers)}`\n          ], this.__context(), {\n            headers: headers,\n          })\n        )\n      }\n      const normalizedHeaders = normalizeColumnsArray(headers)\n      this.state.expectedRecordLength = normalizedHeaders.length\n      this.options.columns = normalizedHeaders\n      this.__resetRow()\n      return\n    }catch(err){\n      return err\n    }\n  }\n  __resetRow(){\n    if(this.options.raw === true){\n      this.state.rawBuffer.reset()\n    }\n    this.state.record = []\n    this.state.record_length = 0\n  }\n  __onField(){\n    const {cast, rtrim, max_record_size} = this.options\n    const {enabled, wasQuoting} = this.state\n    // Short circuit for the from_line options\n    if(enabled === false){ /* this.options.columns !== true && */\n      return this.__resetField()\n    }\n    let field = this.state.field.toString()\n    if(rtrim === true && wasQuoting === false){\n      field = field.trimRight()\n    }\n    if(cast === true){\n      const [err, f] = this.__cast(field)\n      if(err !== undefined) return err\n      field = f\n    }\n    this.state.record.push(field)\n    // Increment record length if record size must not exceed a limit\n    if(max_record_size !== 0 && typeof field === 'string'){\n      this.state.record_length += field.length\n    }\n    this.__resetField()\n  }\n  __resetField(){\n    this.state.field.reset()\n    this.state.wasQuoting = false\n  }\n  __push(record){\n    const {on_record} = this.options\n    if(on_record !== undefined){\n      const context = this.__context()\n      try{\n        record = on_record.call(null, record, context)\n      }catch(err){\n        return err\n      }\n      if(record === undefined || record === null){ return }\n    }\n    this.push(record)\n  }\n  // Return a tuple with the error and the casted value\n  __cast(field){\n    const {columns, relax_column_count} = this.options\n    const isColumns = Array.isArray(columns)\n    // Dont loose time calling cast\n    // because the final record is an object\n    // and this field can't be associated to a key present in columns\n    if( isColumns === true && relax_column_count && this.options.columns.length <= this.state.record.length ){\n      return [undefined, undefined]\n    }\n    const context = this.__context()\n    if(this.state.castField !== null){\n      try{\n        return [undefined, this.state.castField.call(null, field, context)]\n      }catch(err){\n        return [err]\n      }\n    }\n    if(this.__isFloat(field)){\n      return [undefined, parseFloat(field)]\n    }else if(this.options.cast_date !== false){\n      return [undefined, this.options.cast_date.call(null, field, context)]\n    }\n    return [undefined, field]\n  }\n  // Keep it in case we implement the `cast_int` option\n  // __isInt(value){\n  //   // return Number.isInteger(parseInt(value))\n  //   // return !isNaN( parseInt( obj ) );\n  //   return /^(\\-|\\+)?[1-9][0-9]*$/.test(value)\n  // }\n  __isFloat(value){\n    return (value - parseFloat( value ) + 1) >= 0 // Borrowed from jquery\n  }\n  __compareBytes(sourceBuf, targetBuf, pos, firtByte){\n    if(sourceBuf[0] !== firtByte) return 0\n    const sourceLength = sourceBuf.length\n    for(let i = 1; i < sourceLength; i++){\n      if(sourceBuf[i] !== targetBuf[pos+i]) return 0\n    }\n    return sourceLength\n  }\n  __needMoreData(i, bufLen, end){\n    if(end){\n      return false\n    }\n    const {comment, delimiter} = this.options\n    const {quoting, recordDelimiterMaxLength} = this.state\n    const numOfCharLeft = bufLen - i - 1\n    const requiredLength = Math.max(\n      // Skip if the remaining buffer smaller than comment\n      comment ? comment.length : 0,\n      // Skip if the remaining buffer smaller than row delimiter\n      recordDelimiterMaxLength,\n      // Skip if the remaining buffer can be row delimiter following the closing quote\n      // 1 is for quote.length\n      quoting ? (1 + recordDelimiterMaxLength) : 0,\n      // Skip if the remaining buffer can be delimiter\n      delimiter.length,\n      // Skip if the remaining buffer can be escape sequence\n      // 1 is for escape.length\n      1\n    )\n    return numOfCharLeft < requiredLength\n  }\n  __isDelimiter(chr, buf, pos){\n    const {delimiter} = this.options\n    loop1: for(let i = 0; i < delimiter.length; i++){\n      const del = delimiter[i]\n      if(del[0] === chr){\n        for(let j = 1; j < del.length; j++){\n          if(del[j] !== buf[pos+j]) continue loop1\n        }\n        return del.length\n      }\n    }\n    return 0\n  }\n  __isRecordDelimiter(chr, buf, pos){\n    const {record_delimiter} = this.options\n    const recordDelimiterLength = record_delimiter.length\n    loop1: for(let i = 0; i < recordDelimiterLength; i++){\n      const rd = record_delimiter[i]\n      const rdLength = rd.length\n      if(rd[0] !== chr){\n        continue\n      }\n      for(let j = 1; j < rdLength; j++){\n        if(rd[j] !== buf[pos+j]){\n          continue loop1\n        }\n      }\n      return rd.length\n    }\n    return 0\n  }\n  __autoDiscoverRowDelimiter(buf, pos){\n    const chr = buf[pos]\n    if(chr === cr){\n      if(buf[pos+1] === nl){\n        this.options.record_delimiter.push(Buffer.from('\\r\\n'))\n        this.state.recordDelimiterMaxLength = 2\n        return 2\n      }else{\n        this.options.record_delimiter.push(Buffer.from('\\r'))\n        this.state.recordDelimiterMaxLength = 1\n        return 1\n      }\n    }else if(chr === nl){\n      this.options.record_delimiter.push(Buffer.from('\\n'))\n      this.state.recordDelimiterMaxLength = 1\n      return 1\n    }\n    return 0\n  }\n  __error(msg){\n    const {skip_lines_with_error} = this.options\n    const err = typeof msg === 'string' ? new Error(msg) : msg\n    if(skip_lines_with_error){\n      this.state.recordHasError = true\n      this.emit('skip', err)\n      return undefined\n    }else{\n      return err\n    }\n  }\n  __context(){\n    const {columns} = this.options\n    const isColumns = Array.isArray(columns)\n    return {\n      column: isColumns === true ?\n        ( columns.length > this.state.record.length ?\n          columns[this.state.record.length].name :\n          null\n        ) :\n        this.state.record.length,\n      empty_lines: this.info.empty_lines,\n      header: columns === true,\n      index: this.state.record.length,\n      invalid_field_length: this.info.invalid_field_length,\n      quoting: this.state.wasQuoting,\n      lines: this.info.lines,\n      records: this.info.records\n    }\n  }\n}\n\nconst parse = function(){\n  let data, options, callback\n  for(let i in arguments){\n    const argument = arguments[i]\n    const type = typeof argument\n    if(data === undefined && (typeof argument === 'string' || Buffer.isBuffer(argument))){\n      data = argument\n    }else if(options === undefined && isObject(argument)){\n      options = argument\n    }else if(callback === undefined && type === 'function'){\n      callback = argument\n    }else{\n      throw new CsvError('CSV_INVALID_ARGUMENT', [\n        'Invalid argument:',\n        `got ${JSON.stringify(argument)} at index ${i}`\n      ])\n    }\n  }\n  const parser = new Parser(options)\n  if(callback){\n    const records = options === undefined || options.objname === undefined ? [] : {}\n    parser.on('readable', function(){\n      let record\n      while((record = this.read()) !== null){\n        if(options === undefined || options.objname === undefined){\n          records.push(record)\n        }else{\n          records[record[0]] = record[1]\n        }\n      }\n    })\n    parser.on('error', function(err){\n      callback(err, undefined, parser.info)\n    })\n    parser.on('end', function(){\n      callback(undefined, records, parser.info)\n    })\n  }\n  if(data !== undefined){\n    // Give a chance for events to be registered later\n    if(typeof setImmediate === 'function'){\n      setImmediate(function(){\n        parser.write(data)\n        parser.end()\n      })\n    }else{\n      parser.write(data)\n      parser.end()\n    }\n  }\n  return parser\n}\n\nclass CsvError extends Error {\n  constructor(code, message, ...contexts) {\n    if(Array.isArray(message)) message = message.join(' ')\n    super(message)\n    if(Error.captureStackTrace !== undefined){\n      Error.captureStackTrace(this, CsvError)\n    }\n    this.code = code\n    for(const context of contexts){\n      for(const key in context){\n        const value = context[key]\n        this[key] = Buffer.isBuffer(value) ? value.toString() : value == null ? value : JSON.parse(JSON.stringify(value))\n      }\n    }\n  }\n}\n\nparse.Parser = Parser\n\nparse.CsvError = CsvError\n\nmodule.exports = parse\n\nconst underscore = function(str){\n  return str.replace(/([A-Z])/g, function(_, match){\n    return '_' + match.toLowerCase()\n  })\n}\n\nconst isObject = function(obj){\n  return (typeof obj === 'object' && obj !== null && !Array.isArray(obj))\n}\n\nconst isRecordEmpty = function(record){\n  return record.every( (field) => field == null || field.toString && field.toString().trim() === '' )\n}\n\nconst normalizeColumnsArray = function(columns){\n  const normalizedColumns = [];\n  for(let i = 0, l = columns.length; i < l; i++){\n    const column = columns[i]\n    if(column === undefined || column === null || column === false){\n      normalizedColumns[i] = { disabled: true }\n    }else if(typeof column === 'string'){\n      normalizedColumns[i] = { name: column }\n    }else if(isObject(column)){\n      if(typeof column.name !== 'string'){\n        throw new CsvError('CSV_OPTION_COLUMNS_MISSING_NAME', [\n          'Option columns missing name:',\n          `property \"name\" is required at position ${i}`,\n          'when column is an object literal'\n        ])\n      }\n      normalizedColumns[i] = column\n    }else{\n      throw new CsvError('CSV_INVALID_COLUMN_DEFINITION', [\n        'Invalid column definition:',\n        'expect a string or a literal object,',\n        `got ${JSON.stringify(column)} at position ${i}`\n      ])\n    }\n  }\n  return normalizedColumns;\n}\n","\nconst parse = require('.')\n\nmodule.exports = function(data, options={}){\n  if(typeof data === 'string'){\n    data = Buffer.from(data)\n  }\n  const records = options && options.objname ? {} : []\n  const parser = new parse.Parser(options)\n  parser.push = function(record){\n    if(record === null){\n      return\n    }\n    if(options.objname === undefined)\n      records.push(record)\n    else{\n      records[record[0]] = record[1]\n    }\n  }\n  const err1 = parser.__parse(data, false)\n  if(err1 !== undefined) throw err1\n  const err2 = parser.__parse(undefined, true)\n  if(err2 !== undefined) throw err2\n  return records\n}\n","// Generated by CoffeeScript 2.4.1\n// # CSV Stringifier\n\n// Please look at the [project documentation](https://csv.js.org/stringify/) for additional\n// information.\nvar Stringifier, castPath, charCodeOfDot, get, getTag, isKey, isObject, isSymbol, reEscapeChar, reIsDeepProp, reIsPlainProp, rePropName, stream, stringToPath, toKey, underscore, util;\n\nstream = require('stream');\n\nutil = require('util');\n\n// ## Usage\n\n// This module export a function as its main entry point and return a transform\n// stream.\n\n// Refers to the [official prject documentation](http://csv.js.org/stringify/)\n// on how to call this function.\nmodule.exports = function() {\n  var callback, chunks, data, options, stringifier;\n  if (arguments.length === 3) {\n    data = arguments[0];\n    options = arguments[1];\n    callback = arguments[2];\n  } else if (arguments.length === 2) {\n    if (Array.isArray(arguments[0])) {\n      data = arguments[0];\n    } else {\n      options = arguments[0];\n    }\n    if (typeof arguments[1] === 'function') {\n      callback = arguments[1];\n    } else {\n      options = arguments[1];\n    }\n  } else if (arguments.length === 1) {\n    if (typeof arguments[0] === 'function') {\n      callback = arguments[0];\n    } else if (Array.isArray(arguments[0])) {\n      data = arguments[0];\n    } else {\n      options = arguments[0];\n    }\n  }\n  if (options == null) {\n    options = {};\n  }\n  stringifier = new Stringifier(options);\n  if (data) {\n    process.nextTick(function() {\n      var d, j, len;\n      for (j = 0, len = data.length; j < len; j++) {\n        d = data[j];\n        stringifier.write(d);\n      }\n      return stringifier.end();\n    });\n  }\n  if (callback) {\n    chunks = [];\n    stringifier.on('readable', function() {\n      var chunk, results;\n      results = [];\n      while (chunk = stringifier.read()) {\n        results.push(chunks.push(chunk));\n      }\n      return results;\n    });\n    stringifier.on('error', function(err) {\n      return callback(err);\n    });\n    stringifier.on('end', function() {\n      return callback(null, chunks.join(''));\n    });\n  }\n  return stringifier;\n};\n\n// You can also use *util.promisify* native function (Node.js 8+) in order to wrap callbacks into promises for more convenient use when source is a readable stream and you are OK with storing entire result set in memory:\n\n// ```\n// const { promisify } = require('util');\n// const csv = require('csv');\n// const stringifyAsync = promisify(csv.stringify);\n\n// //returns promise\n// function generateCsv(sourceData) {\n//     return stringifyAsync(sourceData);\n// }\n// ```\n\n// ## `Stringifier([options])`\n\n// Options are documented [here](http://csv.adaltas.com/stringify/).\nStringifier = class Stringifier extends stream.Transform {\n  constructor(opts = {}) {\n    var base, base1, base2, base3, base4, isRegExp, isString, j, k, len, options, quoted_match, ref, v;\n    super({...{\n        writableObjectMode: true\n      }, ...opts});\n    options = {};\n    for (k in opts) {\n      v = opts[k];\n      // Immutable options and camelcase conversion\n      options[underscore(k)] = v;\n    }\n    // Normalize option `delimiter`\n    if (options.delimiter === null || options.delimiter === void 0) {\n      options.delimiter = ',';\n    } else {\n      if (Buffer.isBuffer(options.delimiter)) {\n        options.delimiter = options.delimiter.toString();\n      } else if (typeof options.delimiter !== 'string') {\n        throw new Error(`Invalid Option: delimiter must be a buffer or a string, got ${JSON.stringify(options.delimiter)}`);\n      }\n    }\n    // Normalize option `quote`\n    if (options.quote === null || options.quote === void 0) {\n      options.quote = '\"';\n    } else {\n      if (options.quote === true) {\n        options.quote = '\"';\n      } else if (options.quote === false) {\n        options.quote = '';\n      } else if (Buffer.isBuffer(options.quote)) {\n        options.quote = options.quote.toString();\n      } else if (typeof options.quote !== 'string') {\n        throw new Error(`Invalid Option: quote must be a boolean, a buffer or a string, got ${JSON.stringify(options.quote)}`);\n      }\n    }\n    // Normalize option `quoted`\n    if (options.quoted == null) {\n      options.quoted = false;\n    }\n    if (options.quoted_empty == null) {\n      options.quoted_empty = void 0;\n    }\n    if (options.quoted_string == null) {\n      options.quoted_string = false;\n    }\n    if (options.eof == null) {\n      options.eof = true;\n    }\n    // Normalize option `escape`\n    if (options.escape === null || options.escape === void 0) {\n      options.escape = '\"';\n    } else {\n      if (Buffer.isBuffer(options.escape)) {\n        options.escape = options.escape.toString();\n      }\n      if (typeof options.escape !== 'string') {\n        throw new Error(`Invalid Option: escape must be a buffer or a string, got ${JSON.stringify(options.escape)}`);\n      } else if (options.escape.length > 1) {\n        throw new Error(`Invalid Option: escape must be one character, got ${options.escape.length} characters`);\n      }\n    }\n    if (options.header == null) {\n      options.header = false;\n    }\n    // Normalize the columns option\n    options.columns = this.normalize_columns(options.columns);\n    if (options.cast == null) {\n      options.cast = {};\n    }\n    // Normalize option `quoted_match`\n    if (options.quoted_match === void 0 || options.quoted_match === null || options.quoted_match === false) {\n      options.quoted_match = null;\n    } else if (!Array.isArray(options.quoted_match)) {\n      options.quoted_match = [options.quoted_match];\n    }\n    if (options.quoted_match) {\n      ref = options.quoted_match;\n      for (j = 0, len = ref.length; j < len; j++) {\n        quoted_match = ref[j];\n        isString = typeof quoted_match === 'string';\n        isRegExp = quoted_match instanceof RegExp;\n        if (!isString && !isRegExp) {\n          throw new Error(`Invalid Option: quoted_match must be a string or a regex, got ${JSON.stringify(quoted_match)}`);\n        }\n      }\n    }\n    if (options.cast.bool) {\n      // Backward compatibility\n      options.cast.boolean = options.cast.bool;\n    }\n    // Custom cast\n    if ((base = options.cast).boolean == null) {\n      base.boolean = function(value) {\n        // Cast boolean to string by default\n        if (value) {\n          return '1';\n        } else {\n          return '';\n        }\n      };\n    }\n    if ((base1 = options.cast).date == null) {\n      base1.date = function(value) {\n        // Cast date to timestamp string by default\n        return '' + value.getTime();\n      };\n    }\n    if ((base2 = options.cast).number == null) {\n      base2.number = function(value) {\n        // Cast number to string using native casting by default\n        return '' + value;\n      };\n    }\n    if ((base3 = options.cast).object == null) {\n      base3.object = function(value) {\n        // Stringify object as JSON by default\n        return JSON.stringify(value);\n      };\n    }\n    if ((base4 = options.cast).string == null) {\n      base4.string = function(value) {\n        return value;\n      };\n    }\n    // Normalize option `record_delimiter`\n    if (options.record_delimiter === void 0 || options.record_delimiter === null) {\n      if (options.record_delimiter == null) {\n        options.record_delimiter = '\\n';\n      }\n    } else {\n      if (Buffer.isBuffer(options.record_delimiter)) {\n        options.record_delimiter = options.record_delimiter.toString();\n      } else if (typeof options.record_delimiter !== 'string') {\n        throw new Error(`Invalid Option: record_delimiter must be a buffer or a string, got ${JSON.stringify(options.record_delimiter)}`);\n      }\n      switch (options.record_delimiter) {\n        case 'auto':\n          options.record_delimiter = null;\n          break;\n        case 'unix':\n          options.record_delimiter = \"\\n\";\n          break;\n        case 'mac':\n          options.record_delimiter = \"\\r\";\n          break;\n        case 'windows':\n          options.record_delimiter = \"\\r\\n\";\n          break;\n        case 'ascii':\n          options.record_delimiter = \"\\u001e\";\n          break;\n        case 'unicode':\n          options.record_delimiter = \"\\u2028\";\n      }\n    }\n    // Expose options\n    this.options = options;\n    // Internal state\n    this.state = {\n      stop: false\n    };\n    // Information\n    this.info = {\n      records: 0\n    };\n    this;\n  }\n\n  // ## `Stringifier.prototype._transform(chunk, encoding, callback)`\n\n  // Implementation of the [transform._transform function](https://nodejs.org/api/stream.html#stream_transform_transform_chunk_encoding_callback).\n  _transform(chunk, encoding, callback) {\n    var base, e;\n    if (this.state.stop === true) {\n      return;\n    }\n    // Chunk validation\n    if (!(Array.isArray(chunk) || typeof chunk === 'object')) {\n      this.state.stop = true;\n      return callback(Error(`Invalid Record: expect an array or an object, got ${JSON.stringify(chunk)}`));\n    }\n    // Detect columns from the first record\n    if (this.info.records === 0) {\n      if (Array.isArray(chunk)) {\n        if (this.options.header === true && !this.options.columns) {\n          this.state.stop = true;\n          return callback(Error('Undiscoverable Columns: header option requires column option or object records'));\n        }\n      } else {\n        if ((base = this.options).columns == null) {\n          base.columns = this.normalize_columns(Object.keys(chunk));\n        }\n      }\n    }\n    if (this.info.records === 0) {\n      // Emit the header\n      this.headers();\n    }\n    try {\n      // Emit and stringify the record if an object or an array\n      this.emit('record', chunk, this.info.records);\n    } catch (error) {\n      e = error;\n      this.state.stop = true;\n      return this.emit('error', e);\n    }\n    // Convert the record into a string\n    if (this.options.eof) {\n      chunk = this.stringify(chunk);\n      if (chunk == null) {\n        return;\n      }\n      chunk = chunk + this.options.record_delimiter;\n    } else {\n      chunk = this.stringify(chunk);\n      if (chunk == null) {\n        return;\n      }\n      if (this.options.header || this.info.records) {\n        chunk = this.options.record_delimiter + chunk;\n      }\n    }\n    // Emit the csv\n    this.info.records++;\n    this.push(chunk);\n    return callback();\n  }\n\n  // ## `Stringifier.prototype._flush(callback)`\n\n  // Implementation of the [transform._flush function](https://nodejs.org/api/stream.html#stream_transform_flush_callback).\n  _flush(callback) {\n    if (this.info.records === 0) {\n      this.headers();\n    }\n    return callback();\n  }\n\n  // ## `Stringifier.prototype.stringify(line)`\n\n  // Convert a line to a string. Line may be an object, an array or a string.\n  stringify(chunk, chunkIsHeader = false) {\n    var column, columns, containsEscape, containsQuote, containsRowDelimiter, containsdelimiter, csvrecord, delimiter, err, escape, field, header, i, j, l, len, m, options, quote, quoted, quotedMatch, quotedString, quoted_empty, quoted_match, quoted_string, record, record_delimiter, ref, ref1, regexp, shouldQuote, value;\n    if (typeof chunk !== 'object') {\n      return chunk;\n    }\n    ({columns, header} = this.options);\n    record = [];\n    // Record is an array\n    if (Array.isArray(chunk)) {\n      if (columns) {\n        // We are getting an array but the user has specified output columns. In\n        // this case, we respect the columns indexes\n        chunk.splice(columns.length);\n      }\n// Cast record elements\n      for (i = j = 0, len = chunk.length; j < len; i = ++j) {\n        field = chunk[i];\n        [err, value] = this.__cast(field, {\n          index: i,\n          column: i,\n          records: this.info.records,\n          header: chunkIsHeader\n        });\n        if (err) {\n          this.emit('error', err);\n          return;\n        }\n        record[i] = [value, field];\n      }\n    } else {\n      // Record is a literal object\n      if (columns) {\n        for (i = l = 0, ref = columns.length; (0 <= ref ? l < ref : l > ref); i = 0 <= ref ? ++l : --l) {\n          field = get(chunk, columns[i].key);\n          [err, value] = this.__cast(field, {\n            index: i,\n            column: columns[i].key,\n            records: this.info.records,\n            header: chunkIsHeader\n          });\n          if (err) {\n            this.emit('error', err);\n            return;\n          }\n          record[i] = [value, field];\n        }\n      } else {\n        for (column in chunk) {\n          field = chunk[column];\n          [err, value] = this.__cast(field, {\n            index: i,\n            column: columns[i].key,\n            records: this.info.records,\n            header: chunkIsHeader\n          });\n          if (err) {\n            this.emit('error', err);\n            return;\n          }\n          record.push([value, field]);\n        }\n      }\n    }\n    csvrecord = '';\n    for (i = m = 0, ref1 = record.length; (0 <= ref1 ? m < ref1 : m > ref1); i = 0 <= ref1 ? ++m : --m) {\n      [value, field] = record[i];\n      if (typeof value === 'string') {\n        options = this.options;\n      } else if (isObject(value)) {\n        ({value, ...options} = value);\n        if (!(typeof value === 'string' || value === void 0 || value === null)) {\n          this.emit('error', Error(`Invalid Casting Value: returned value must return a string, null or undefined, got ${JSON.stringify(value)}`));\n          return;\n        }\n        options = {...this.options, ...options};\n      } else if (value === void 0 || value === null) {\n        options = this.options;\n      } else {\n        this.emit('error', Error(`Invalid Casting Value: returned value must return a string, an object, null or undefined, got ${JSON.stringify(value)}`));\n        return;\n      }\n      ({delimiter, escape, quote, quoted, quoted_empty, quoted_string, quoted_match, record_delimiter} = options);\n      if (value) {\n        if (typeof value !== 'string') {\n          this.emit('error', Error(`Formatter must return a string, null or undefined, got ${JSON.stringify(value)}`));\n          return null;\n        }\n        containsdelimiter = delimiter.length && value.indexOf(delimiter) >= 0;\n        containsQuote = (quote !== '') && value.indexOf(quote) >= 0;\n        containsEscape = value.indexOf(escape) >= 0 && (escape !== quote);\n        containsRowDelimiter = value.indexOf(record_delimiter) >= 0;\n        quotedString = quoted_string && typeof field === 'string';\n        quotedMatch = quoted_match && typeof field === 'string' && quoted_match.filter(function(quoted_match) {\n          if (typeof quoted_match === 'string') {\n            return value.indexOf(quoted_match) !== -1;\n          } else {\n            return quoted_match.test(value);\n          }\n        });\n        quotedMatch = quotedMatch && quotedMatch.length > 0;\n        shouldQuote = containsQuote === true || containsdelimiter || containsRowDelimiter || quoted || quotedString || quotedMatch;\n        if (shouldQuote === true && containsEscape === true) {\n          regexp = escape === '\\\\' ? new RegExp(escape + escape, 'g') : new RegExp(escape, 'g');\n          value = value.replace(regexp, escape + escape);\n        }\n        if (containsQuote === true) {\n          regexp = new RegExp(quote, 'g');\n          value = value.replace(regexp, escape + quote);\n        }\n        if (shouldQuote === true) {\n          value = quote + value + quote;\n        }\n        csvrecord += value;\n      } else if (quoted_empty === true || ((quoted_empty == null) && field === '' && quoted_string !== false)) {\n        csvrecord += quote + quote;\n      }\n      if (i !== record.length - 1) {\n        csvrecord += delimiter;\n      }\n    }\n    return csvrecord;\n  }\n\n  // ## `Stringifier.prototype.headers`\n\n  // Print the header line if the option \"header\" is \"true\".\n  headers() {\n    var headers;\n    if (!this.options.header) {\n      return;\n    }\n    if (!this.options.columns) {\n      return;\n    }\n    headers = this.options.columns.map(function(column) {\n      return column.header;\n    });\n    if (this.options.eof) {\n      headers = this.stringify(headers, true) + this.options.record_delimiter;\n    } else {\n      headers = this.stringify(headers);\n    }\n    return this.push(headers);\n  }\n\n  __cast(value, context) {\n    var err, type;\n    type = typeof value;\n    try {\n      if (type === 'string') {\n        // Fine for 99% of the cases\n        return [void 0, this.options.cast.string(value, context)];\n      } else if (type === 'number') {\n        return [void 0, this.options.cast.number(value, context)];\n      } else if (type === 'boolean') {\n        return [void 0, this.options.cast.boolean(value, context)];\n      } else if (value instanceof Date) {\n        return [void 0, this.options.cast.date(value, context)];\n      } else if (type === 'object' && value !== null) {\n        return [void 0, this.options.cast.object(value, context)];\n      } else {\n        return [void 0, value, value];\n      }\n    } catch (error) {\n      err = error;\n      return [err];\n    }\n  }\n\n  // ## `Stringifier.prototype.normalize_columns`\n  normalize_columns(columns) {\n    var column, k, v;\n    if (columns == null) {\n      return null;\n    }\n    if (columns != null) {\n      if (typeof columns !== 'object') {\n        throw Error('Invalid option \"columns\": expect an array or an object');\n      }\n      if (!Array.isArray(columns)) {\n        columns = (function() {\n          var results;\n          results = [];\n          for (k in columns) {\n            v = columns[k];\n            results.push({\n              key: k,\n              header: v\n            });\n          }\n          return results;\n        })();\n      } else {\n        columns = (function() {\n          var j, len, results;\n          results = [];\n          for (j = 0, len = columns.length; j < len; j++) {\n            column = columns[j];\n            if (typeof column === 'string') {\n              results.push({\n                key: column,\n                header: column\n              });\n            } else if (typeof column === 'object' && (column != null) && !Array.isArray(column)) {\n              if (!column.key) {\n                throw Error('Invalid column definition: property \"key\" is required');\n              }\n              if (column.header == null) {\n                column.header = column.key;\n              }\n              results.push(column);\n            } else {\n              throw Error('Invalid column definition: expect a string or an object');\n            }\n          }\n          return results;\n        })();\n      }\n    }\n    return columns;\n  }\n\n};\n\nmodule.exports.Stringifier = Stringifier;\n\nisObject = function(obj) {\n  return typeof obj === 'object' && obj !== null && !Array.isArray(obj);\n};\n\nunderscore = function(str) {\n  return str.replace(/([A-Z])/g, function(_, match, index) {\n    return '_' + match.toLowerCase();\n  });\n};\n\n// ## Lodash implementation of `get`\ncharCodeOfDot = '.'.charCodeAt(0);\n\nreEscapeChar = /\\\\(\\\\)?/g;\n\n// Match anything that isn't a dot or bracket.\n// Or match property names within brackets.\n// Match a non-string expression.\n// Or match strings (supports escaping characters).\n// Or match \"\" as the space between consecutive dots or empty brackets.\nrePropName = RegExp('[^.[\\\\]]+' + '|' + '\\\\[(?:' + '([^\"\\'][^[]*)' + '|' + '([\"\\'])((?:(?!\\\\2)[^\\\\\\\\]|\\\\\\\\.)*?)\\\\2' + ')\\\\]' + '|' + '(?=(?:\\\\.|\\\\[\\\\])(?:\\\\.|\\\\[\\\\]|$))', 'g');\n\nreIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/;\n\nreIsPlainProp = /^\\w*$/;\n\ngetTag = function(value) {\n  if (value != null) {\n    if (value === void 0) {\n      '[object Undefined]';\n    } else {\n      '[object Null]';\n    }\n  }\n  return Object.prototype.toString.call(value);\n};\n\nisKey = function(value, object) {\n  var type;\n  if (Array.isArray(value)) {\n    return false;\n  }\n  type = typeof value;\n  if (type === 'number' || type === 'symbol' || type === 'boolean' || (value == null) || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || ((object != null) && value in Object(object));\n};\n\nisSymbol = function(value) {\n  var type;\n  type = typeof value;\n  return type === 'symbol' || (type === 'object' && (value != null) && getTag(value) === '[object Symbol]');\n};\n\nstringToPath = function(string) {\n  var result;\n  result = [];\n  if (string.charCodeAt(0) === charCodeOfDot) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, expression, quote, subString) {\n    var key;\n    key = match;\n    if (quote) {\n      key = subString.replace(reEscapeChar, '$1');\n    } else if (expression) {\n      key = expression.trim();\n    }\n    return result.push(key);\n  });\n  return result;\n};\n\ncastPath = function(value, object) {\n  if (Array.isArray(value)) {\n    return value;\n  } else {\n    if (isKey(value, object)) {\n      return [value];\n    } else {\n      return stringToPath(value);\n    }\n  }\n};\n\ntoKey = function(value) {\n  var ref, result;\n  if (typeof value === 'string' || isSymbol(value)) {\n    return value;\n  }\n  result = `${value}`;\n  return (ref = result === '0' && (1 / value) === -INFINITY) != null ? ref : {\n    '-0': result\n  };\n};\n\nget = function(object, path) {\n  var index, length;\n  path = Array.isArray(path) ? path : castPath(path, object);\n  index = 0;\n  length = path.length;\n  while ((object != null) && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  if (index && index === length) {\n    return object;\n  } else {\n    return void 0;\n  }\n};\n","// Generated by CoffeeScript 2.4.1\n// # CSV Stringify Sync\n\n// Provides a synchronous alternative to the CSV stringifier.\n\n// ## Usage\n\n// `const csv = stringify(records, [options]`\nvar StringDecoder, stringify;\n\n({StringDecoder} = require('string_decoder'));\n\nstringify = require('./index');\n\nmodule.exports = function(records, options = {}) {\n  var data, decoder, i, len, record, stringifier;\n  data = [];\n  if (records instanceof Buffer) {\n    decoder = new StringDecoder();\n    records = decoder.write(records);\n  }\n  stringifier = new stringify.Stringifier(options);\n  stringifier.push = function(record) {\n    if (record) {\n      return data.push(record.toString());\n    }\n  };\n  for (i = 0, len = records.length; i < len; i++) {\n    record = records[i];\n    stringifier.write(record);\n  }\n  stringifier.end();\n  return data.join('');\n};\n","var accounting = require('accounting')\nvar assign = require('object-assign')\nvar localeCurrency = require('locale-currency')\nvar currencies = require('./currencies.json')\nvar localeFormats = require('./localeFormats.json')\n\nvar defaultCurrency = {\n  symbol: '',\n  thousandsSeparator: ',',\n  decimalSeparator: '.',\n  symbolOnLeft: true,\n  spaceBetweenAmountAndSymbol: false,\n  decimalDigits: 2\n}\n\nvar defaultLocaleFormat = {}\n\nvar formatMapping = [\n  {\n    symbolOnLeft: true,\n    spaceBetweenAmountAndSymbol: false,\n    format: {\n      pos: '%s%v',\n      neg: '-%s%v',\n      zero: '%s%v'\n    }\n  },\n  {\n    symbolOnLeft: true,\n    spaceBetweenAmountAndSymbol: true,\n    format: {\n      pos: '%s %v',\n      neg: '-%s %v',\n      zero: '%s %v'\n    }\n  },\n  {\n    symbolOnLeft: false,\n    spaceBetweenAmountAndSymbol: false,\n    format: {\n      pos: '%v%s',\n      neg: '-%v%s',\n      zero: '%v%s'\n    }\n  },\n  {\n    symbolOnLeft: false,\n    spaceBetweenAmountAndSymbol: true,\n    format: {\n      pos: '%v %s',\n      neg: '-%v %s',\n      zero: '%v %s'\n    }\n  }\n]\n\nfunction format(value, options) {\n  var code = options.code || (options.locale && localeCurrency.getCurrency(options.locale))\n  var localeMatch = /^([a-z]+)([_-]([a-z]+))?$/i.exec(options.locale) || []\n  var language = localeMatch[1]\n  var region = localeMatch[3]\n  var localeFormat = assign({}, defaultLocaleFormat,\n                            localeFormats[language] || {},\n                            localeFormats[language + '-' + region] || {})\n  var currency = assign({}, defaultCurrency, findCurrency(code), localeFormat)\n  \n  var symbolOnLeft = currency.symbolOnLeft\n  var spaceBetweenAmountAndSymbol = currency.spaceBetweenAmountAndSymbol\n\n  var format = formatMapping.filter(function(f) {\n    return f.symbolOnLeft == symbolOnLeft && f.spaceBetweenAmountAndSymbol == spaceBetweenAmountAndSymbol\n  })[0].format\n\n  return accounting.formatMoney(value, {\n    symbol: isUndefined(options.symbol)\n              ? currency.symbol\n              : options.symbol,\n\n    decimal: isUndefined(options.decimal)\n              ? currency.decimalSeparator\n              : options.decimal,\n\n    thousand: isUndefined(options.thousand)\n              ? currency.thousandsSeparator\n              : options.thousand,\n\n    precision: typeof options.precision === 'number'\n              ? options.precision\n              : currency.decimalDigits,\n\n    format: ['string', 'object'].indexOf(typeof options.format) > -1\n              ? options.format\n              : format\n  })\n}\n\nfunction findCurrency (currencyCode) {\n  return currencies[currencyCode]\n}\n\nfunction isUndefined (val) {\n  return typeof val === 'undefined'\n}\n\nfunction unformat(value, options) {\n  var code = options.code || (options.locale && localeCurrency.getCurrency(options.locale))\n  var localeFormat = localeFormats[options.locale] || defaultLocaleFormat\n  var currency = assign({}, defaultCurrency, findCurrency(code), localeFormat)\n  var decimal = isUndefined(options.decimal) ? currency.decimalSeparator : options.decimal\n  return accounting.unformat(value, decimal)\n}\n\nmodule.exports = {\n  defaultCurrency: defaultCurrency,\n  get currencies() {\n    // In favor of backwards compatibility, the currencies map is converted to an array here\n    return Object.keys(currencies).map(function(key) {\n      return currencies[key]\n    })\n  },\n  findCurrency: findCurrency,\n  format: format,\n  unformat: unformat\n}","// TheSpanishInquisition\n\n// Cache the matrix. Note that if you not pass a limit this implementation will use a dynamically calculate one.\n\nmodule.exports = function(__this, that, limit) {\n\n  var thisLength = __this.length,\n      thatLength = that.length,\n      matrix = [];\n\n  // If the limit is not defined it will be calculate from this and that args.\n  limit = (limit || ((thatLength > thisLength ? thatLength : thisLength)))+1;\n\n  for (var i = 0; i < limit; i++) {\n    matrix[i] = [i];\n    matrix[i].length = limit;\n  }\n  for (i = 0; i < limit; i++) {\n    matrix[0][i] = i;\n  }\n\n  if (Math.abs(thisLength - thatLength) > (limit || 100)){\n    return prepare (limit || 100);\n  }\n  if (thisLength === 0){\n    return prepare (thatLength);\n  }\n  if (thatLength === 0){\n    return prepare (thisLength);\n  }\n\n  // Calculate matrix.\n  var j, this_i, that_j, cost, min, t;\n  for (i = 1; i <= thisLength; ++i) {\n    this_i = __this[i-1];\n\n    // Step 4\n    for (j = 1; j <= thatLength; ++j) {\n      // Check the jagged ld total so far\n      if (i === j && matrix[i][j] > 4) return prepare (thisLength);\n\n      that_j = that[j-1];\n      cost = (this_i === that_j) ? 0 : 1; // Step 5\n      // Calculate the minimum (much faster than Math.min(...)).\n      min    = matrix[i - 1][j    ] + 1; // Deletion.\n      if ((t = matrix[i    ][j - 1] + 1   ) < min) min = t;   // Insertion.\n      if ((t = matrix[i - 1][j - 1] + cost) < min) min = t;   // Substitution.\n\n      // Update matrix.\n      matrix[i][j] = (i > 1 && j > 1 && this_i === that[j-2] && __this[i-2] === that_j && (t = matrix[i-2][j-2]+cost) < min) ? t : min; // Transposition.\n    }\n  }\n\n  return prepare (matrix[thisLength][thatLength]);\n\n/**\n *\n */\n  function prepare(steps) {\n    var length = Math.max(thisLength, thatLength)\n    var relative = length === 0\n      ? 0\n      : (steps / length);\n    var similarity = 1 - relative\n    return {\n      steps: steps,\n      relative: relative,\n      similarity: similarity\n    };\n  }\n\n};\n","export default function addLeadingZeros(number, targetLength) {\n  var sign = number < 0 ? '-' : ''\n  var output = Math.abs(number).toString()\n  while (output.length < targetLength) {\n    output = '0' + output\n  }\n  return sign + output\n}\n","export default function assign(target, dirtyObject) {\n  if (target == null) {\n    throw new TypeError(\n      'assign requires that input parameter not be null or undefined'\n    )\n  }\n\n  dirtyObject = dirtyObject || {}\n\n  for (var property in dirtyObject) {\n    if (dirtyObject.hasOwnProperty(property)) {\n      target[property] = dirtyObject[property]\n    }\n  }\n\n  return target\n}\n","import assign from '../assign/index.js'\n\nexport default function cloneObject(dirtyObject) {\n  return assign({}, dirtyObject)\n}\n","import lightFormatters from '../lightFormatters/index.js'\nimport getUTCDayOfYear from '../../../_lib/getUTCDayOfYear/index.js'\nimport getUTCISOWeek from '../../../_lib/getUTCISOWeek/index.js'\nimport getUTCISOWeekYear from '../../../_lib/getUTCISOWeekYear/index.js'\nimport getUTCWeek from '../../../_lib/getUTCWeek/index.js'\nimport getUTCWeekYear from '../../../_lib/getUTCWeekYear/index.js'\nimport addLeadingZeros from '../../addLeadingZeros/index.js'\n\nvar dayPeriodEnum = {\n  am: 'am',\n  pm: 'pm',\n  midnight: 'midnight',\n  noon: 'noon',\n  morning: 'morning',\n  afternoon: 'afternoon',\n  evening: 'evening',\n  night: 'night'\n}\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O  | Timezone (GMT)                 |\n * |  p! | Long localized time            |  P! | Long localized date            |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z  | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nvar formatters = {\n  // Era\n  G: function(date, token, localize) {\n    var era = date.getUTCFullYear() > 0 ? 1 : 0\n    switch (token) {\n      // AD, BC\n      case 'G':\n      case 'GG':\n      case 'GGG':\n        return localize.era(era, { width: 'abbreviated' })\n      // A, B\n      case 'GGGGG':\n        return localize.era(era, { width: 'narrow' })\n      // Anno Domini, Before Christ\n      case 'GGGG':\n      default:\n        return localize.era(era, { width: 'wide' })\n    }\n  },\n\n  // Year\n  y: function(date, token, localize) {\n    // Ordinal number\n    if (token === 'yo') {\n      var signedYear = date.getUTCFullYear()\n      // Returns 1 for 1 BC (which is year 0 in JavaScript)\n      var year = signedYear > 0 ? signedYear : 1 - signedYear\n      return localize.ordinalNumber(year, { unit: 'year' })\n    }\n\n    return lightFormatters.y(date, token)\n  },\n\n  // Local week-numbering year\n  Y: function(date, token, localize, options) {\n    var signedWeekYear = getUTCWeekYear(date, options)\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear\n\n    // Two digit year\n    if (token === 'YY') {\n      var twoDigitYear = weekYear % 100\n      return addLeadingZeros(twoDigitYear, 2)\n    }\n\n    // Ordinal number\n    if (token === 'Yo') {\n      return localize.ordinalNumber(weekYear, { unit: 'year' })\n    }\n\n    // Padding\n    return addLeadingZeros(weekYear, token.length)\n  },\n\n  // ISO week-numbering year\n  R: function(date, token) {\n    var isoWeekYear = getUTCISOWeekYear(date)\n\n    // Padding\n    return addLeadingZeros(isoWeekYear, token.length)\n  },\n\n  // Extended year. This is a single number designating the year of this calendar system.\n  // The main difference between `y` and `u` localizers are B.C. years:\n  // | Year | `y` | `u` |\n  // |------|-----|-----|\n  // | AC 1 |   1 |   1 |\n  // | BC 1 |   1 |   0 |\n  // | BC 2 |   2 |  -1 |\n  // Also `yy` always returns the last two digits of a year,\n  // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n  u: function(date, token) {\n    var year = date.getUTCFullYear()\n    return addLeadingZeros(year, token.length)\n  },\n\n  // Quarter\n  Q: function(date, token, localize) {\n    var quarter = Math.ceil((date.getUTCMonth() + 1) / 3)\n    switch (token) {\n      // 1, 2, 3, 4\n      case 'Q':\n        return String(quarter)\n      // 01, 02, 03, 04\n      case 'QQ':\n        return addLeadingZeros(quarter, 2)\n      // 1st, 2nd, 3rd, 4th\n      case 'Qo':\n        return localize.ordinalNumber(quarter, { unit: 'quarter' })\n      // Q1, Q2, Q3, Q4\n      case 'QQQ':\n        return localize.quarter(quarter, {\n          width: 'abbreviated',\n          context: 'formatting'\n        })\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case 'QQQQQ':\n        return localize.quarter(quarter, {\n          width: 'narrow',\n          context: 'formatting'\n        })\n      // 1st quarter, 2nd quarter, ...\n      case 'QQQQ':\n      default:\n        return localize.quarter(quarter, {\n          width: 'wide',\n          context: 'formatting'\n        })\n    }\n  },\n\n  // Stand-alone quarter\n  q: function(date, token, localize) {\n    var quarter = Math.ceil((date.getUTCMonth() + 1) / 3)\n    switch (token) {\n      // 1, 2, 3, 4\n      case 'q':\n        return String(quarter)\n      // 01, 02, 03, 04\n      case 'qq':\n        return addLeadingZeros(quarter, 2)\n      // 1st, 2nd, 3rd, 4th\n      case 'qo':\n        return localize.ordinalNumber(quarter, { unit: 'quarter' })\n      // Q1, Q2, Q3, Q4\n      case 'qqq':\n        return localize.quarter(quarter, {\n          width: 'abbreviated',\n          context: 'standalone'\n        })\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case 'qqqqq':\n        return localize.quarter(quarter, {\n          width: 'narrow',\n          context: 'standalone'\n        })\n      // 1st quarter, 2nd quarter, ...\n      case 'qqqq':\n      default:\n        return localize.quarter(quarter, {\n          width: 'wide',\n          context: 'standalone'\n        })\n    }\n  },\n\n  // Month\n  M: function(date, token, localize) {\n    var month = date.getUTCMonth()\n    switch (token) {\n      case 'M':\n      case 'MM':\n        return lightFormatters.M(date, token)\n      // 1st, 2nd, ..., 12th\n      case 'Mo':\n        return localize.ordinalNumber(month + 1, { unit: 'month' })\n      // Jan, Feb, ..., Dec\n      case 'MMM':\n        return localize.month(month, {\n          width: 'abbreviated',\n          context: 'formatting'\n        })\n      // J, F, ..., D\n      case 'MMMMM':\n        return localize.month(month, { width: 'narrow', context: 'formatting' })\n      // January, February, ..., December\n      case 'MMMM':\n      default:\n        return localize.month(month, { width: 'wide', context: 'formatting' })\n    }\n  },\n\n  // Stand-alone month\n  L: function(date, token, localize) {\n    var month = date.getUTCMonth()\n    switch (token) {\n      // 1, 2, ..., 12\n      case 'L':\n        return String(month + 1)\n      // 01, 02, ..., 12\n      case 'LL':\n        return addLeadingZeros(month + 1, 2)\n      // 1st, 2nd, ..., 12th\n      case 'Lo':\n        return localize.ordinalNumber(month + 1, { unit: 'month' })\n      // Jan, Feb, ..., Dec\n      case 'LLL':\n        return localize.month(month, {\n          width: 'abbreviated',\n          context: 'standalone'\n        })\n      // J, F, ..., D\n      case 'LLLLL':\n        return localize.month(month, { width: 'narrow', context: 'standalone' })\n      // January, February, ..., December\n      case 'LLLL':\n      default:\n        return localize.month(month, { width: 'wide', context: 'standalone' })\n    }\n  },\n\n  // Local week of year\n  w: function(date, token, localize, options) {\n    var week = getUTCWeek(date, options)\n\n    if (token === 'wo') {\n      return localize.ordinalNumber(week, { unit: 'week' })\n    }\n\n    return addLeadingZeros(week, token.length)\n  },\n\n  // ISO week of year\n  I: function(date, token, localize) {\n    var isoWeek = getUTCISOWeek(date)\n\n    if (token === 'Io') {\n      return localize.ordinalNumber(isoWeek, { unit: 'week' })\n    }\n\n    return addLeadingZeros(isoWeek, token.length)\n  },\n\n  // Day of the month\n  d: function(date, token, localize) {\n    if (token === 'do') {\n      return localize.ordinalNumber(date.getUTCDate(), { unit: 'date' })\n    }\n\n    return lightFormatters.d(date, token)\n  },\n\n  // Day of year\n  D: function(date, token, localize) {\n    var dayOfYear = getUTCDayOfYear(date)\n\n    if (token === 'Do') {\n      return localize.ordinalNumber(dayOfYear, { unit: 'dayOfYear' })\n    }\n\n    return addLeadingZeros(dayOfYear, token.length)\n  },\n\n  // Day of week\n  E: function(date, token, localize) {\n    var dayOfWeek = date.getUTCDay()\n    switch (token) {\n      // Tue\n      case 'E':\n      case 'EE':\n      case 'EEE':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'formatting'\n        })\n      // T\n      case 'EEEEE':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'formatting'\n        })\n      // Tu\n      case 'EEEEEE':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'formatting'\n        })\n      // Tuesday\n      case 'EEEE':\n      default:\n        return localize.day(dayOfWeek, { width: 'wide', context: 'formatting' })\n    }\n  },\n\n  // Local day of week\n  e: function(date, token, localize, options) {\n    var dayOfWeek = date.getUTCDay()\n    var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7\n    switch (token) {\n      // Numerical value (Nth day of week with current locale or weekStartsOn)\n      case 'e':\n        return String(localDayOfWeek)\n      // Padded numerical value\n      case 'ee':\n        return addLeadingZeros(localDayOfWeek, 2)\n      // 1st, 2nd, ..., 7th\n      case 'eo':\n        return localize.ordinalNumber(localDayOfWeek, { unit: 'day' })\n      case 'eee':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'formatting'\n        })\n      // T\n      case 'eeeee':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'formatting'\n        })\n      // Tu\n      case 'eeeeee':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'formatting'\n        })\n      // Tuesday\n      case 'eeee':\n      default:\n        return localize.day(dayOfWeek, { width: 'wide', context: 'formatting' })\n    }\n  },\n\n  // Stand-alone local day of week\n  c: function(date, token, localize, options) {\n    var dayOfWeek = date.getUTCDay()\n    var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7\n    switch (token) {\n      // Numerical value (same as in `e`)\n      case 'c':\n        return String(localDayOfWeek)\n      // Padded numerical value\n      case 'cc':\n        return addLeadingZeros(localDayOfWeek, token.length)\n      // 1st, 2nd, ..., 7th\n      case 'co':\n        return localize.ordinalNumber(localDayOfWeek, { unit: 'day' })\n      case 'ccc':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'standalone'\n        })\n      // T\n      case 'ccccc':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'standalone'\n        })\n      // Tu\n      case 'cccccc':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'standalone'\n        })\n      // Tuesday\n      case 'cccc':\n      default:\n        return localize.day(dayOfWeek, { width: 'wide', context: 'standalone' })\n    }\n  },\n\n  // ISO day of week\n  i: function(date, token, localize) {\n    var dayOfWeek = date.getUTCDay()\n    var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek\n    switch (token) {\n      // 2\n      case 'i':\n        return String(isoDayOfWeek)\n      // 02\n      case 'ii':\n        return addLeadingZeros(isoDayOfWeek, token.length)\n      // 2nd\n      case 'io':\n        return localize.ordinalNumber(isoDayOfWeek, { unit: 'day' })\n      // Tue\n      case 'iii':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'formatting'\n        })\n      // T\n      case 'iiiii':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'formatting'\n        })\n      // Tu\n      case 'iiiiii':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'formatting'\n        })\n      // Tuesday\n      case 'iiii':\n      default:\n        return localize.day(dayOfWeek, { width: 'wide', context: 'formatting' })\n    }\n  },\n\n  // AM or PM\n  a: function(date, token, localize) {\n    var hours = date.getUTCHours()\n    var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am'\n\n    switch (token) {\n      case 'a':\n      case 'aa':\n      case 'aaa':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        })\n      case 'aaaaa':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'narrow',\n          context: 'formatting'\n        })\n      case 'aaaa':\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'wide',\n          context: 'formatting'\n        })\n    }\n  },\n\n  // AM, PM, midnight, noon\n  b: function(date, token, localize) {\n    var hours = date.getUTCHours()\n    var dayPeriodEnumValue\n    if (hours === 12) {\n      dayPeriodEnumValue = dayPeriodEnum.noon\n    } else if (hours === 0) {\n      dayPeriodEnumValue = dayPeriodEnum.midnight\n    } else {\n      dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am'\n    }\n\n    switch (token) {\n      case 'b':\n      case 'bb':\n      case 'bbb':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        })\n      case 'bbbbb':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'narrow',\n          context: 'formatting'\n        })\n      case 'bbbb':\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'wide',\n          context: 'formatting'\n        })\n    }\n  },\n\n  // in the morning, in the afternoon, in the evening, at night\n  B: function(date, token, localize) {\n    var hours = date.getUTCHours()\n    var dayPeriodEnumValue\n    if (hours >= 17) {\n      dayPeriodEnumValue = dayPeriodEnum.evening\n    } else if (hours >= 12) {\n      dayPeriodEnumValue = dayPeriodEnum.afternoon\n    } else if (hours >= 4) {\n      dayPeriodEnumValue = dayPeriodEnum.morning\n    } else {\n      dayPeriodEnumValue = dayPeriodEnum.night\n    }\n\n    switch (token) {\n      case 'B':\n      case 'BB':\n      case 'BBB':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        })\n      case 'BBBBB':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'narrow',\n          context: 'formatting'\n        })\n      case 'BBBB':\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'wide',\n          context: 'formatting'\n        })\n    }\n  },\n\n  // Hour [1-12]\n  h: function(date, token, localize) {\n    if (token === 'ho') {\n      var hours = date.getUTCHours() % 12\n      if (hours === 0) hours = 12\n      return localize.ordinalNumber(hours, { unit: 'hour' })\n    }\n\n    return lightFormatters.h(date, token)\n  },\n\n  // Hour [0-23]\n  H: function(date, token, localize) {\n    if (token === 'Ho') {\n      return localize.ordinalNumber(date.getUTCHours(), { unit: 'hour' })\n    }\n\n    return lightFormatters.H(date, token)\n  },\n\n  // Hour [0-11]\n  K: function(date, token, localize) {\n    var hours = date.getUTCHours() % 12\n\n    if (token === 'Ko') {\n      return localize.ordinalNumber(hours, { unit: 'hour' })\n    }\n\n    return addLeadingZeros(hours, token.length)\n  },\n\n  // Hour [1-24]\n  k: function(date, token, localize) {\n    var hours = date.getUTCHours()\n    if (hours === 0) hours = 24\n\n    if (token === 'ko') {\n      return localize.ordinalNumber(hours, { unit: 'hour' })\n    }\n\n    return addLeadingZeros(hours, token.length)\n  },\n\n  // Minute\n  m: function(date, token, localize) {\n    if (token === 'mo') {\n      return localize.ordinalNumber(date.getUTCMinutes(), { unit: 'minute' })\n    }\n\n    return lightFormatters.m(date, token)\n  },\n\n  // Second\n  s: function(date, token, localize) {\n    if (token === 'so') {\n      return localize.ordinalNumber(date.getUTCSeconds(), { unit: 'second' })\n    }\n\n    return lightFormatters.s(date, token)\n  },\n\n  // Fraction of second\n  S: function(date, token) {\n    var numberOfDigits = token.length\n    var milliseconds = date.getUTCMilliseconds()\n    var fractionalSeconds = Math.floor(\n      milliseconds * Math.pow(10, numberOfDigits - 3)\n    )\n    return addLeadingZeros(fractionalSeconds, numberOfDigits)\n  },\n\n  // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n  X: function(date, token, _localize, options) {\n    var originalDate = options._originalDate || date\n    var timezoneOffset = originalDate.getTimezoneOffset()\n\n    if (timezoneOffset === 0) {\n      return 'Z'\n    }\n\n    switch (token) {\n      // Hours and optional minutes\n      case 'X':\n        return formatTimezoneWithOptionalMinutes(timezoneOffset)\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XX`\n      case 'XXXX':\n      case 'XX': // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset)\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XXX`\n      case 'XXXXX':\n      case 'XXX': // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, ':')\n    }\n  },\n\n  // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n  x: function(date, token, _localize, options) {\n    var originalDate = options._originalDate || date\n    var timezoneOffset = originalDate.getTimezoneOffset()\n\n    switch (token) {\n      // Hours and optional minutes\n      case 'x':\n        return formatTimezoneWithOptionalMinutes(timezoneOffset)\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xx`\n      case 'xxxx':\n      case 'xx': // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset)\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xxx`\n      case 'xxxxx':\n      case 'xxx': // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, ':')\n    }\n  },\n\n  // Timezone (GMT)\n  O: function(date, token, _localize, options) {\n    var originalDate = options._originalDate || date\n    var timezoneOffset = originalDate.getTimezoneOffset()\n\n    switch (token) {\n      // Short\n      case 'O':\n      case 'OO':\n      case 'OOO':\n        return 'GMT' + formatTimezoneShort(timezoneOffset, ':')\n      // Long\n      case 'OOOO':\n      default:\n        return 'GMT' + formatTimezone(timezoneOffset, ':')\n    }\n  },\n\n  // Timezone (specific non-location)\n  z: function(date, token, _localize, options) {\n    var originalDate = options._originalDate || date\n    var timezoneOffset = originalDate.getTimezoneOffset()\n\n    switch (token) {\n      // Short\n      case 'z':\n      case 'zz':\n      case 'zzz':\n        return 'GMT' + formatTimezoneShort(timezoneOffset, ':')\n      // Long\n      case 'zzzz':\n      default:\n        return 'GMT' + formatTimezone(timezoneOffset, ':')\n    }\n  },\n\n  // Seconds timestamp\n  t: function(date, token, _localize, options) {\n    var originalDate = options._originalDate || date\n    var timestamp = Math.floor(originalDate.getTime() / 1000)\n    return addLeadingZeros(timestamp, token.length)\n  },\n\n  // Milliseconds timestamp\n  T: function(date, token, _localize, options) {\n    var originalDate = options._originalDate || date\n    var timestamp = originalDate.getTime()\n    return addLeadingZeros(timestamp, token.length)\n  }\n}\n\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n  var sign = offset > 0 ? '-' : '+'\n  var absOffset = Math.abs(offset)\n  var hours = Math.floor(absOffset / 60)\n  var minutes = absOffset % 60\n  if (minutes === 0) {\n    return sign + String(hours)\n  }\n  var delimiter = dirtyDelimiter || ''\n  return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2)\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {\n  if (offset % 60 === 0) {\n    var sign = offset > 0 ? '-' : '+'\n    return sign + addLeadingZeros(Math.abs(offset) / 60, 2)\n  }\n  return formatTimezone(offset, dirtyDelimiter)\n}\n\nfunction formatTimezone(offset, dirtyDelimiter) {\n  var delimiter = dirtyDelimiter || ''\n  var sign = offset > 0 ? '-' : '+'\n  var absOffset = Math.abs(offset)\n  var hours = addLeadingZeros(Math.floor(absOffset / 60), 2)\n  var minutes = addLeadingZeros(absOffset % 60, 2)\n  return sign + hours + delimiter + minutes\n}\n\nexport default formatters\n","import addLeadingZeros from '../../addLeadingZeros/index.js'\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O  | Timezone (GMT)                 |\n * |  p! | Long localized time            |  P! | Long localized date            |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z  | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nvar formatters = {\n  // Year\n  y: function(date, token) {\n    // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n    // | Year     |     y | yy |   yyy |  yyyy | yyyyy |\n    // |----------|-------|----|-------|-------|-------|\n    // | AD 1     |     1 | 01 |   001 |  0001 | 00001 |\n    // | AD 12    |    12 | 12 |   012 |  0012 | 00012 |\n    // | AD 123   |   123 | 23 |   123 |  0123 | 00123 |\n    // | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |\n    // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n    var signedYear = date.getUTCFullYear()\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    var year = signedYear > 0 ? signedYear : 1 - signedYear\n    return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length)\n  },\n\n  // Month\n  M: function(date, token) {\n    var month = date.getUTCMonth()\n    return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2)\n  },\n\n  // Day of the month\n  d: function(date, token) {\n    return addLeadingZeros(date.getUTCDate(), token.length)\n  },\n\n  // AM or PM\n  a: function(date, token) {\n    var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am'\n\n    switch (token) {\n      case 'a':\n      case 'aa':\n      case 'aaa':\n        return dayPeriodEnumValue.toUpperCase()\n      case 'aaaaa':\n        return dayPeriodEnumValue[0]\n      case 'aaaa':\n      default:\n        return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.'\n    }\n  },\n\n  // Hour [1-12]\n  h: function(date, token) {\n    return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length)\n  },\n\n  // Hour [0-23]\n  H: function(date, token) {\n    return addLeadingZeros(date.getUTCHours(), token.length)\n  },\n\n  // Minute\n  m: function(date, token) {\n    return addLeadingZeros(date.getUTCMinutes(), token.length)\n  },\n\n  // Second\n  s: function(date, token) {\n    return addLeadingZeros(date.getUTCSeconds(), token.length)\n  }\n}\n\nexport default formatters\n","function dateLongFormatter(pattern, formatLong) {\n  switch (pattern) {\n    case 'P':\n      return formatLong.date({ width: 'short' })\n    case 'PP':\n      return formatLong.date({ width: 'medium' })\n    case 'PPP':\n      return formatLong.date({ width: 'long' })\n    case 'PPPP':\n    default:\n      return formatLong.date({ width: 'full' })\n  }\n}\n\nfunction timeLongFormatter(pattern, formatLong) {\n  switch (pattern) {\n    case 'p':\n      return formatLong.time({ width: 'short' })\n    case 'pp':\n      return formatLong.time({ width: 'medium' })\n    case 'ppp':\n      return formatLong.time({ width: 'long' })\n    case 'pppp':\n    default:\n      return formatLong.time({ width: 'full' })\n  }\n}\n\nfunction dateTimeLongFormatter(pattern, formatLong) {\n  var matchResult = pattern.match(/(P+)(p+)?/)\n  var datePattern = matchResult[1]\n  var timePattern = matchResult[2]\n\n  if (!timePattern) {\n    return dateLongFormatter(pattern, formatLong)\n  }\n\n  var dateTimeFormat\n\n  switch (datePattern) {\n    case 'P':\n      dateTimeFormat = formatLong.dateTime({ width: 'short' })\n      break\n    case 'PP':\n      dateTimeFormat = formatLong.dateTime({ width: 'medium' })\n      break\n    case 'PPP':\n      dateTimeFormat = formatLong.dateTime({ width: 'long' })\n      break\n    case 'PPPP':\n    default:\n      dateTimeFormat = formatLong.dateTime({ width: 'full' })\n      break\n  }\n\n  return dateTimeFormat\n    .replace('{{date}}', dateLongFormatter(datePattern, formatLong))\n    .replace('{{time}}', timeLongFormatter(timePattern, formatLong))\n}\n\nvar longFormatters = {\n  p: timeLongFormatter,\n  P: dateTimeLongFormatter\n}\n\nexport default longFormatters\n","var MILLISECONDS_IN_MINUTE = 60000\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport default function getTimezoneOffsetInMilliseconds (dirtyDate) {\n  var date = new Date(dirtyDate.getTime())\n  var baseTimezoneOffset = date.getTimezoneOffset()\n  date.setSeconds(0, 0)\n  var millisecondsPartOfTimezoneOffset = date.getTime() % MILLISECONDS_IN_MINUTE\n\n  return baseTimezoneOffset * MILLISECONDS_IN_MINUTE + millisecondsPartOfTimezoneOffset\n}\n","import toDate from '../../toDate/index.js'\n\nvar MILLISECONDS_IN_DAY = 86400000\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function getUTCDayOfYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var timestamp = date.getTime()\n  date.setUTCMonth(0, 1)\n  date.setUTCHours(0, 0, 0, 0)\n  var startOfYearTimestamp = date.getTime()\n  var difference = timestamp - startOfYearTimestamp\n  return Math.floor(difference / MILLISECONDS_IN_DAY) + 1\n}\n","import toDate from '../../toDate/index.js'\nimport startOfUTCISOWeek from '../startOfUTCISOWeek/index.js'\nimport startOfUTCISOWeekYear from '../startOfUTCISOWeekYear/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function getUTCISOWeek(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var diff =\n    startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime()\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1\n}\n","import toDate from '../../toDate/index.js'\nimport startOfUTCISOWeek from '../startOfUTCISOWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function getUTCISOWeekYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getUTCFullYear()\n\n  var fourthOfJanuaryOfNextYear = new Date(0)\n  fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4)\n  fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0)\n  var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear)\n\n  var fourthOfJanuaryOfThisYear = new Date(0)\n  fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4)\n  fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0)\n  var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear)\n\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year\n  } else {\n    return year - 1\n  }\n}\n","import toDate from '../../toDate/index.js'\nimport startOfUTCWeek from '../startOfUTCWeek/index.js'\nimport startOfUTCWeekYear from '../startOfUTCWeekYear/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function getUTCWeek(dirtyDate, options) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var diff =\n    startOfUTCWeek(date, options).getTime() -\n    startOfUTCWeekYear(date, options).getTime()\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\nimport startOfUTCWeek from '../startOfUTCWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function getUTCWeekYear (dirtyDate, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError('1 argument required, but only ' + arguments.length + ' present')\n  }\n\n  var date = toDate(dirtyDate, dirtyOptions)\n  var year = date.getUTCFullYear()\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeFirstWeekContainsDate = locale &&\n    locale.options &&\n    locale.options.firstWeekContainsDate\n  var defaultFirstWeekContainsDate =\n    localeFirstWeekContainsDate == null\n      ? 1\n      : toInteger(localeFirstWeekContainsDate)\n  var firstWeekContainsDate =\n    options.firstWeekContainsDate == null\n      ? defaultFirstWeekContainsDate\n      : toInteger(options.firstWeekContainsDate)\n\n  // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively')\n  }\n\n  var firstWeekOfNextYear = new Date(0)\n  firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate)\n  firstWeekOfNextYear.setUTCHours(0, 0, 0, 0)\n  var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, dirtyOptions)\n\n  var firstWeekOfThisYear = new Date(0)\n  firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate)\n  firstWeekOfThisYear.setUTCHours(0, 0, 0, 0)\n  var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, dirtyOptions)\n\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year\n  } else {\n    return year - 1\n  }\n}\n","export var protectedTokens = ['D', 'DD', 'YY', 'YYYY']\n\nexport function isProtectedToken(token) {\n  return protectedTokens.indexOf(token) !== -1\n}\n\nexport function throwProtectedError(token) {\n  throw new RangeError(\n    '`options.awareOfUnicodeTokens` must be set to `true` to use `' +\n      token +\n      '` token; see: https://git.io/fxCyr'\n  )\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function setUTCDay(dirtyDate, dirtyDay, dirtyOptions) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeWeekStartsOn =\n    locale && locale.options && locale.options.weekStartsOn\n  var defaultWeekStartsOn =\n    localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n  var weekStartsOn =\n    options.weekStartsOn == null\n      ? defaultWeekStartsOn\n      : toInteger(options.weekStartsOn)\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n  }\n\n  var date = toDate(dirtyDate)\n  var day = toInteger(dirtyDay)\n\n  var currentDay = date.getUTCDay()\n\n  var remainder = day % 7\n  var dayIndex = (remainder + 7) % 7\n\n  var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay\n\n  date.setUTCDate(date.getUTCDate() + diff)\n  return date\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function setUTCISODay(dirtyDate, dirtyDay) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var day = toInteger(dirtyDay)\n\n  if (day % 7 === 0) {\n    day = day - 7\n  }\n\n  var weekStartsOn = 1\n  var date = toDate(dirtyDate)\n  var currentDay = date.getUTCDay()\n\n  var remainder = day % 7\n  var dayIndex = (remainder + 7) % 7\n\n  var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay\n\n  date.setUTCDate(date.getUTCDate() + diff)\n  return date\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\nimport getUTCISOWeek from '../getUTCISOWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var isoWeek = toInteger(dirtyISOWeek)\n  var diff = getUTCISOWeek(date) - isoWeek\n  date.setUTCDate(date.getUTCDate() - diff * 7)\n  return date\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\nimport getUTCWeek from '../getUTCWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function setUTCWeek(dirtyDate, dirtyWeek, options) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var week = toInteger(dirtyWeek)\n  var diff = getUTCWeek(date, options) - week\n  date.setUTCDate(date.getUTCDate() - diff * 7)\n  return date\n}\n","import toDate from '../../toDate/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function startOfUTCISOWeek(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var weekStartsOn = 1\n\n  var date = toDate(dirtyDate)\n  var day = date.getUTCDay()\n  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn\n\n  date.setUTCDate(date.getUTCDate() - diff)\n  date.setUTCHours(0, 0, 0, 0)\n  return date\n}\n","import getUTCISOWeekYear from '../getUTCISOWeekYear/index.js'\nimport startOfUTCISOWeek from '../startOfUTCISOWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function startOfUTCISOWeekYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var year = getUTCISOWeekYear(dirtyDate)\n  var fourthOfJanuary = new Date(0)\n  fourthOfJanuary.setUTCFullYear(year, 0, 4)\n  fourthOfJanuary.setUTCHours(0, 0, 0, 0)\n  var date = startOfUTCISOWeek(fourthOfJanuary)\n  return date\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function startOfUTCWeek(dirtyDate, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeWeekStartsOn =\n    locale && locale.options && locale.options.weekStartsOn\n  var defaultWeekStartsOn =\n    localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n  var weekStartsOn =\n    options.weekStartsOn == null\n      ? defaultWeekStartsOn\n      : toInteger(options.weekStartsOn)\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n  }\n\n  var date = toDate(dirtyDate)\n  var day = date.getUTCDay()\n  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn\n\n  date.setUTCDate(date.getUTCDate() - diff)\n  date.setUTCHours(0, 0, 0, 0)\n  return date\n}\n","import toInteger from '../toInteger/index.js'\nimport getUTCWeekYear from '../getUTCWeekYear/index.js'\nimport startOfUTCWeek from '../startOfUTCWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function startOfUTCWeekYear (dirtyDate, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError('1 argument required, but only ' + arguments.length + ' present')\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeFirstWeekContainsDate = locale &&\n    locale.options &&\n    locale.options.firstWeekContainsDate\n  var defaultFirstWeekContainsDate =\n    localeFirstWeekContainsDate == null\n      ? 1\n      : toInteger(localeFirstWeekContainsDate)\n  var firstWeekContainsDate =\n    options.firstWeekContainsDate == null\n      ? defaultFirstWeekContainsDate\n      : toInteger(options.firstWeekContainsDate)\n\n  var year = getUTCWeekYear(dirtyDate, dirtyOptions)\n  var firstWeek = new Date(0)\n  firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate)\n  firstWeek.setUTCHours(0, 0, 0, 0)\n  var date = startOfUTCWeek(firstWeek, dirtyOptions)\n  return date\n}\n","export default function toInteger (dirtyNumber) {\n  if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n    return NaN\n  }\n\n  var number = Number(dirtyNumber)\n\n  if (isNaN(number)) {\n    return number\n  }\n\n  return number < 0 ? Math.ceil(number) : Math.floor(number)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be added\n * @returns {Date} the new date with the days added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * var result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport default function addDays(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var amount = toInteger(dirtyAmount)\n  date.setDate(date.getDate() + amount)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMilliseconds from '../addMilliseconds/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\n\n/**\n * @name addHours\n * @category Hour Helpers\n * @summary Add the specified number of hours to the given date.\n *\n * @description\n * Add the specified number of hours to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of hours to be added\n * @returns {Date} the new date with the hours added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 2 hours to 10 July 2014 23:00:00:\n * var result = addHours(new Date(2014, 6, 10, 23, 0), 2)\n * //=> Fri Jul 11 2014 01:00:00\n */\nexport default function addHours(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_HOUR)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport getISOWeekYear from '../getISOWeekYear/index.js'\nimport setISOWeekYear from '../setISOWeekYear/index.js'\n\n/**\n * @name addISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Add the specified number of ISO week-numbering years to the given date.\n *\n * @description\n * Add the specified number of ISO week-numbering years to the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `addISOYears` to `addISOWeekYears`.\n *   \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n *   This change makes the name consistent with\n *   locale-dependent week-numbering year helpers, e.g., `addWeekYears`.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of ISO week-numbering years to be added\n * @returns {Date} the new date with the ISO week-numbering years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 ISO week-numbering years to 2 July 2010:\n * var result = addISOWeekYears(new Date(2010, 6, 2), 5)\n * //=> Fri Jun 26 2015 00:00:00\n */\nexport default function addISOWeekYears(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return setISOWeekYear(dirtyDate, getISOWeekYear(dirtyDate) + amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * var result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\nexport default function addMilliseconds(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var timestamp = toDate(dirtyDate).getTime()\n  var amount = toInteger(dirtyAmount)\n  return new Date(timestamp + amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMilliseconds from '../addMilliseconds/index.js'\n\nvar MILLISECONDS_IN_MINUTE = 60000\n\n/**\n * @name addMinutes\n * @category Minute Helpers\n * @summary Add the specified number of minutes to the given date.\n *\n * @description\n * Add the specified number of minutes to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of minutes to be added\n * @returns {Date} the new date with the minutes added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 30 minutes to 10 July 2014 12:00:00:\n * var result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 12:30:00\n */\nexport default function addMinutes(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_MINUTE)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport getDaysInMonth from '../getDaysInMonth/index.js'\n\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be added\n * @returns {Date} the new date with the months added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * var result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n */\nexport default function addMonths(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var amount = toInteger(dirtyAmount)\n  var desiredMonth = date.getMonth() + amount\n  var dateWithDesiredMonth = new Date(0)\n  dateWithDesiredMonth.setFullYear(date.getFullYear(), desiredMonth, 1)\n  dateWithDesiredMonth.setHours(0, 0, 0, 0)\n  var daysInMonth = getDaysInMonth(dateWithDesiredMonth)\n  // Set the last day of the new month\n  // if the original date was the last day of the longer month\n  date.setMonth(desiredMonth, Math.min(daysInMonth, date.getDate()))\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMonths from '../addMonths/index.js'\n\n/**\n * @name addQuarters\n * @category Quarter Helpers\n * @summary Add the specified number of year quarters to the given date.\n *\n * @description\n * Add the specified number of year quarters to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of quarters to be added\n * @returns {Date} the new date with the quarters added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 1 quarter to 1 September 2014:\n * var result = addQuarters(new Date(2014, 8, 1), 1)\n * //=> Mon Dec 01 2014 00:00:00\n */\nexport default function addQuarters(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  var months = amount * 3\n  return addMonths(dirtyDate, months)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMilliseconds from '../addMilliseconds/index.js'\n\n/**\n * @name addSeconds\n * @category Second Helpers\n * @summary Add the specified number of seconds to the given date.\n *\n * @description\n * Add the specified number of seconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of seconds to be added\n * @returns {Date} the new date with the seconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 30 seconds to 10 July 2014 12:45:00:\n * var result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:45:30\n */\nexport default function addSeconds(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addMilliseconds(dirtyDate, amount * 1000)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addDays from '../addDays/index.js'\n\n/**\n * @name addWeeks\n * @category Week Helpers\n * @summary Add the specified number of weeks to the given date.\n *\n * @description\n * Add the specified number of week to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of weeks to be added\n * @returns {Date} the new date with the weeks added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 4 weeks to 1 September 2014:\n * var result = addWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Sep 29 2014 00:00:00\n */\nexport default function addWeeks(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  var days = amount * 7\n  return addDays(dirtyDate, days)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMonths from '../addMonths/index.js'\n\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be added\n * @returns {Date} the new date with the years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * var result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\nexport default function addYears(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addMonths(dirtyDate, amount * 12)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name areIntervalsOverlapping\n * @category Interval Helpers\n * @summary Is the given time interval overlapping with another time interval?\n *\n * @description\n * Is the given time interval overlapping with another time interval?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `areRangesOverlapping` to `areIntervalsOverlapping`.\n *   This change was made to mirror the use of the word \"interval\" in standard ISO 8601:2004 terminology:\n *\n *   ```\n *   2.1.3\n *   time interval\n *   part of the time axis limited by two instants\n *   ```\n *\n *   Also, this function now accepts an object with `start` and `end` properties\n *   instead of two arguments as an interval.\n *   This function now throws `RangeError` if the start of the interval is after its end\n *   or if any date in the interval is `Invalid Date`.\n *\n *   ```javascript\n *   // Before v2.0.0\n *\n *   areRangesOverlapping(\n *     new Date(2014, 0, 10), new Date(2014, 0, 20),\n *     new Date(2014, 0, 17), new Date(2014, 0, 21)\n *   )\n *\n *   // v2.0.0 onward\n *\n *   areIntervalsOverlapping(\n *     { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *     { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }\n *   )\n *   ```\n *\n * @param {Interval} intervalLeft - the first interval to compare. See [Interval]{@link docs/types/Interval}\n * @param {Interval} intervalRight - the second interval to compare. See [Interval]{@link docs/types/Interval}\n * @returns {Boolean} whether the time intervals are overlapping\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For overlapping time intervals:\n * areIntervalsOverlapping(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }\n * )\n * //=> true\n *\n * @example\n * // For non-overlapping time intervals:\n * areIntervalsOverlapping(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 21), end: new Date(2014, 0, 22) }\n * )\n * //=> false\n */\nexport default function areIntervalsOverlapping(\n  dirtyIntervalLeft,\n  dirtyIntervalRight\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var intervalLeft = dirtyIntervalLeft || {}\n  var intervalRight = dirtyIntervalRight || {}\n  var leftStartTime = toDate(intervalLeft.start).getTime()\n  var leftEndTime = toDate(intervalLeft.end).getTime()\n  var rightStartTime = toDate(intervalRight.start).getTime()\n  var rightEndTime = toDate(intervalRight.end).getTime()\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(leftStartTime <= leftEndTime && rightStartTime <= rightEndTime)) {\n    throw new RangeError('Invalid interval')\n  }\n\n  return leftStartTime < rightEndTime && rightStartTime < leftEndTime\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name closestIndexTo\n * @category Common Helpers\n * @summary Return an index of the closest date from the array comparing to the given date.\n *\n * @description\n * Return an index of the closest date from the array comparing to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now, `closestIndexTo` doesn't throw an exception\n *   when the second argument is not an array, and returns Invalid Date instead.\n *\n * @param {Date|Number} dateToCompare - the date to compare with\n * @param {Date[]|Number[]} datesArray - the array to search\n * @returns {Number} an index of the date closest to the given date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Which date is closer to 6 September 2015?\n * var dateToCompare = new Date(2015, 8, 6)\n * var datesArray = [\n *   new Date(2015, 0, 1),\n *   new Date(2016, 0, 1),\n *   new Date(2017, 0, 1)\n * ]\n * var result = closestIndexTo(dateToCompare, datesArray)\n * //=> 1\n */\nexport default function closestIndexTo(dirtyDateToCompare, dirtyDatesArray) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateToCompare = toDate(dirtyDateToCompare)\n\n  if (isNaN(dateToCompare)) {\n    return NaN\n  }\n\n  var timeToCompare = dateToCompare.getTime()\n\n  var datesArray\n  // `dirtyDatesArray` is undefined or null\n  if (dirtyDatesArray == null) {\n    datesArray = []\n\n    // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n  } else if (typeof dirtyDatesArray.forEach === 'function') {\n    datesArray = dirtyDatesArray\n\n    // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array\n  } else {\n    datesArray = Array.prototype.slice.call(dirtyDatesArray)\n  }\n\n  var result\n  var minDistance\n  datesArray.forEach(function(dirtyDate, index) {\n    var currentDate = toDate(dirtyDate)\n\n    if (isNaN(currentDate)) {\n      result = NaN\n      minDistance = NaN\n      return\n    }\n\n    var distance = Math.abs(timeToCompare - currentDate.getTime())\n    if (result == null || distance < minDistance) {\n      result = index\n      minDistance = distance\n    }\n  })\n\n  return result\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name closestTo\n * @category Common Helpers\n * @summary Return a date from the array closest to the given date.\n *\n * @description\n * Return a date from the array closest to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now, `closestTo` doesn't throw an exception\n *   when the second argument is not an array, and returns Invalid Date instead.\n *\n * @param {Date|Number} dateToCompare - the date to compare with\n * @param {Date[]|Number[]} datesArray - the array to search\n * @returns {Date} the date from the array closest to the given date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Which date is closer to 6 September 2015: 1 January 2000 or 1 January 2030?\n * var dateToCompare = new Date(2015, 8, 6)\n * var result = closestTo(dateToCompare, [\n *   new Date(2000, 0, 1),\n *   new Date(2030, 0, 1)\n * ])\n * //=> Tue Jan 01 2030 00:00:00\n */\nexport default function closestTo(dirtyDateToCompare, dirtyDatesArray) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateToCompare = toDate(dirtyDateToCompare)\n\n  if (isNaN(dateToCompare)) {\n    return new Date(NaN)\n  }\n\n  var timeToCompare = dateToCompare.getTime()\n\n  var datesArray\n  // `dirtyDatesArray` is undefined or null\n  if (dirtyDatesArray == null) {\n    datesArray = []\n\n    // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n  } else if (typeof dirtyDatesArray.forEach === 'function') {\n    datesArray = dirtyDatesArray\n\n    // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array\n  } else {\n    datesArray = Array.prototype.slice.call(dirtyDatesArray)\n  }\n\n  var result\n  var minDistance\n  datesArray.forEach(function(dirtyDate) {\n    var currentDate = toDate(dirtyDate)\n\n    if (isNaN(currentDate)) {\n      result = new Date(NaN)\n      minDistance = NaN\n      return\n    }\n\n    var distance = Math.abs(timeToCompare - currentDate.getTime())\n    if (result == null || distance < minDistance) {\n      result = currentDate\n      minDistance = distance\n    }\n  })\n\n  return result\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name compareAsc\n * @category Common Helpers\n * @summary Compare the two dates and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return 1 if the first date is after the second,\n * -1 if the first date is before the second or 0 if dates are equal.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989:\n * var result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> -1\n *\n * @example\n * // Sort the array of dates:\n * var result = [\n *   new Date(1995, 6, 2),\n *   new Date(1987, 1, 11),\n *   new Date(1989, 6, 10)\n * ].sort(compareAsc)\n * //=> [\n * //   Wed Feb 11 1987 00:00:00,\n * //   Mon Jul 10 1989 00:00:00,\n * //   Sun Jul 02 1995 00:00:00\n * // ]\n */\nexport default function compareAsc(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n\n  var diff = dateLeft.getTime() - dateRight.getTime()\n\n  if (diff < 0) {\n    return -1\n  } else if (diff > 0) {\n    return 1\n    // Return 0 if diff is 0; return NaN if diff is NaN\n  } else {\n    return diff\n  }\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name compareDesc\n * @category Common Helpers\n * @summary Compare the two dates reverse chronologically and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return -1 if the first date is after the second,\n * 1 if the first date is before the second or 0 if dates are equal.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989 reverse chronologically:\n * var result = compareDesc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> 1\n *\n * @example\n * // Sort the array of dates in reverse chronological order:\n * var result = [\n *   new Date(1995, 6, 2),\n *   new Date(1987, 1, 11),\n *   new Date(1989, 6, 10)\n * ].sort(compareDesc)\n * //=> [\n * //   Sun Jul 02 1995 00:00:00,\n * //   Mon Jul 10 1989 00:00:00,\n * //   Wed Feb 11 1987 00:00:00\n * // ]\n */\nexport default function compareDesc(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n\n  var diff = dateLeft.getTime() - dateRight.getTime()\n\n  if (diff > 0) {\n    return -1\n  } else if (diff < 0) {\n    return 1\n    // Return 0 if diff is 0; return NaN if diff is NaN\n  } else {\n    return diff\n  }\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport startOfDay from '../startOfDay/index.js'\n\nvar MILLISECONDS_IN_DAY = 86400000\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar days\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * var result = differenceInCalendarDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * var result = differenceInCalendarDays(\n *   new Date(2011, 6, 2, 0, 1),\n *   new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport default function differenceInCalendarDays(\n  dirtyDateLeft,\n  dirtyDateRight\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var startOfDayLeft = startOfDay(dirtyDateLeft)\n  var startOfDayRight = startOfDay(dirtyDateRight)\n\n  var timestampLeft =\n    startOfDayLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfDayLeft)\n  var timestampRight =\n    startOfDayRight.getTime() - getTimezoneOffsetInMilliseconds(startOfDayRight)\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a day is not constant\n  // (e.g. it's different in the day of the daylight saving time clock shift)\n  return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY)\n}\n","import getISOWeekYear from '../getISOWeekYear/index.js'\n\n/**\n * @name differenceInCalendarISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the number of calendar ISO week-numbering years between the given dates.\n *\n * @description\n * Get the number of calendar ISO week-numbering years between the given dates.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `differenceInCalendarISOYears` to `differenceInCalendarISOWeekYears`.\n *   \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n *   This change makes the name consistent with\n *   locale-dependent week-numbering year helpers, e.g., `addWeekYears`.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar ISO week-numbering years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar ISO week-numbering years are 1 January 2010 and 1 January 2012?\n * var result = differenceInCalendarISOWeekYears(\n *   new Date(2012, 0, 1),\n *   new Date(2010, 0, 1)\n * )\n * //=> 2\n */\nexport default function differenceInCalendarISOWeekYears(\n  dirtyDateLeft,\n  dirtyDateRight\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return getISOWeekYear(dirtyDateLeft) - getISOWeekYear(dirtyDateRight)\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @name differenceInCalendarISOWeeks\n * @category ISO Week Helpers\n * @summary Get the number of calendar ISO weeks between the given dates.\n *\n * @description\n * Get the number of calendar ISO weeks between the given dates.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar ISO weeks\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar ISO weeks are between 6 July 2014 and 21 July 2014?\n * var result = differenceInCalendarISOWeeks(\n *   new Date(2014, 6, 21),\n *   new Date(2014, 6, 6)\n * )\n * //=> 3\n */\nexport default function differenceInCalendarISOWeeks(\n  dirtyDateLeft,\n  dirtyDateRight\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var startOfISOWeekLeft = startOfISOWeek(dirtyDateLeft)\n  var startOfISOWeekRight = startOfISOWeek(dirtyDateRight)\n\n  var timestampLeft =\n    startOfISOWeekLeft.getTime() -\n    getTimezoneOffsetInMilliseconds(startOfISOWeekLeft)\n  var timestampRight =\n    startOfISOWeekRight.getTime() -\n    getTimezoneOffsetInMilliseconds(startOfISOWeekRight)\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * var result = differenceInCalendarMonths(\n *   new Date(2014, 8, 1),\n *   new Date(2014, 0, 31)\n * )\n * //=> 8\n */\nexport default function differenceInCalendarMonths(\n  dirtyDateLeft,\n  dirtyDateRight\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n\n  var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear()\n  var monthDiff = dateLeft.getMonth() - dateRight.getMonth()\n\n  return yearDiff * 12 + monthDiff\n}\n","import getQuarter from '../getQuarter/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name differenceInCalendarQuarters\n * @category Quarter Helpers\n * @summary Get the number of calendar quarters between the given dates.\n *\n * @description\n * Get the number of calendar quarters between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar quarters\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar quarters are between 31 December 2013 and 2 July 2014?\n * var result = differenceInCalendarQuarters(\n *   new Date(2014, 6, 2),\n *   new Date(2013, 11, 31)\n * )\n * //=> 3\n */\nexport default function differenceInCalendarQuarters(\n  dirtyDateLeft,\n  dirtyDateRight\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n\n  var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear()\n  var quarterDiff = getQuarter(dateLeft) - getQuarter(dateRight)\n\n  return yearDiff * 4 + quarterDiff\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport startOfWeek from '../startOfWeek/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @name differenceInCalendarWeeks\n * @category Week Helpers\n * @summary Get the number of calendar weeks between the given dates.\n *\n * @description\n * Get the number of calendar weeks between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Number} the number of calendar weeks\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // How many calendar weeks are between 5 July 2014 and 20 July 2014?\n * var result = differenceInCalendarWeeks(\n *   new Date(2014, 6, 20),\n *   new Date(2014, 6, 5)\n * )\n * //=> 3\n *\n * @example\n * // If the week starts on Monday,\n * // how many calendar weeks are between 5 July 2014 and 20 July 2014?\n * var result = differenceInCalendarWeeks(\n *   new Date(2014, 6, 20),\n *   new Date(2014, 6, 5),\n *   { weekStartsOn: 1 }\n * )\n * //=> 2\n */\nexport default function differenceInCalendarWeeks(\n  dirtyDateLeft,\n  dirtyDateRight,\n  dirtyOptions\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var startOfWeekLeft = startOfWeek(dirtyDateLeft, dirtyOptions)\n  var startOfWeekRight = startOfWeek(dirtyDateRight, dirtyOptions)\n\n  var timestampLeft =\n    startOfWeekLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfWeekLeft)\n  var timestampRight =\n    startOfWeekRight.getTime() -\n    getTimezoneOffsetInMilliseconds(startOfWeekRight)\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name differenceInCalendarYears\n * @category Year Helpers\n * @summary Get the number of calendar years between the given dates.\n *\n * @description\n * Get the number of calendar years between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar years are between 31 December 2013 and 11 February 2015?\n * var result = differenceInCalendarYears(\n *   new Date(2015, 1, 11),\n *   new Date(2013, 11, 31)\n * )\n * //=> 2\n */\nexport default function differenceInCalendarYears(\n  dirtyDateLeft,\n  dirtyDateRight\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n\n  return dateLeft.getFullYear() - dateRight.getFullYear()\n}\n","import toDate from '../toDate/index.js'\nimport differenceInCalendarDays from '../differenceInCalendarDays/index.js'\nimport compareAsc from '../compareAsc/index.js'\n\n/**\n * @name differenceInDays\n * @category Day Helpers\n * @summary Get the number of full days between the given dates.\n *\n * @description\n * Get the number of full day periods between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full days\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * var result = differenceInDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 365\n * // How many days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * var result = differenceInDays(\n *   new Date(2011, 6, 2, 0, 1),\n *   new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 0\n */\nexport default function differenceInDays(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n\n  var sign = compareAsc(dateLeft, dateRight)\n  var difference = Math.abs(differenceInCalendarDays(dateLeft, dateRight))\n\n  dateLeft.setDate(dateLeft.getDate() - sign * difference)\n\n  // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full\n  // If so, result must be decreased by 1 in absolute value\n  var isLastDayNotFull = compareAsc(dateLeft, dateRight) === -sign\n  var result = sign * (difference - isLastDayNotFull)\n  // Prevent negative zero\n  return result === 0 ? 0 : result\n}\n","import differenceInMilliseconds from '../differenceInMilliseconds/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\n\n/**\n * @name differenceInHours\n * @category Hour Helpers\n * @summary Get the number of hours between the given dates.\n *\n * @description\n * Get the number of hours between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of hours\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00?\n * var result = differenceInHours(\n *   new Date(2014, 6, 2, 19, 0),\n *   new Date(2014, 6, 2, 6, 50)\n * )\n * //=> 12\n */\nexport default function differenceInHours(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var diff =\n    differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) /\n    MILLISECONDS_IN_HOUR\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n","import toDate from '../toDate/index.js'\nimport differenceInCalendarISOWeekYears from '../differenceInCalendarISOWeekYears/index.js'\nimport compareAsc from '../compareAsc/index.js'\nimport subISOWeekYears from '../subISOWeekYears/index.js'\n\n/**\n * @name differenceInISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the number of full ISO week-numbering years between the given dates.\n *\n * @description\n * Get the number of full ISO week-numbering years between the given dates.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `differenceInISOYears` to `differenceInISOWeekYears`.\n *   \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n *   This change makes the name consistent with\n *   locale-dependent week-numbering year helpers, e.g., `addWeekYears`.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full ISO week-numbering years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full ISO week-numbering years are between 1 January 2010 and 1 January 2012?\n * var result = differenceInISOWeekYears(\n *   new Date(2012, 0, 1),\n *   new Date(2010, 0, 1)\n * )\n * //=> 1\n */\nexport default function differenceInISOWeekYears(\n  dirtyDateLeft,\n  dirtyDateRight\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n\n  var sign = compareAsc(dateLeft, dateRight)\n  var difference = Math.abs(\n    differenceInCalendarISOWeekYears(dateLeft, dateRight)\n  )\n  dateLeft = subISOWeekYears(dateLeft, sign * difference)\n\n  // Math.abs(diff in full ISO years - diff in calendar ISO years) === 1\n  // if last calendar ISO year is not full\n  // If so, result must be decreased by 1 in absolute value\n  var isLastISOWeekYearNotFull = compareAsc(dateLeft, dateRight) === -sign\n  var result = sign * (difference - isLastISOWeekYearNotFull)\n  // Prevent negative zero\n  return result === 0 ? 0 : result\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of milliseconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * var result = differenceInMilliseconds(\n *   new Date(2014, 6, 2, 12, 30, 21, 700),\n *   new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\nexport default function differenceInMilliseconds(\n  dirtyDateLeft,\n  dirtyDateRight\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n  return dateLeft.getTime() - dateRight.getTime()\n}\n","import differenceInMilliseconds from '../differenceInMilliseconds/index.js'\n\nvar MILLISECONDS_IN_MINUTE = 60000\n\n/**\n * @name differenceInMinutes\n * @category Minute Helpers\n * @summary Get the number of minutes between the given dates.\n *\n * @description\n * Get the number of minutes between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of minutes\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?\n * var result = differenceInMinutes(\n *   new Date(2014, 6, 2, 12, 20, 0),\n *   new Date(2014, 6, 2, 12, 7, 59)\n * )\n * //=> 12\n */\nexport default function differenceInMinutes(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var diff =\n    differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) /\n    MILLISECONDS_IN_MINUTE\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n","import toDate from '../toDate/index.js'\nimport differenceInCalendarMonths from '../differenceInCalendarMonths/index.js'\nimport compareAsc from '../compareAsc/index.js'\n\n/**\n * @name differenceInMonths\n * @category Month Helpers\n * @summary Get the number of full months between the given dates.\n *\n * @description\n * Get the number of full months between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full months are between 31 January 2014 and 1 September 2014?\n * var result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))\n * //=> 7\n */\nexport default function differenceInMonths(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n\n  var sign = compareAsc(dateLeft, dateRight)\n  var difference = Math.abs(differenceInCalendarMonths(dateLeft, dateRight))\n  dateLeft.setMonth(dateLeft.getMonth() - sign * difference)\n\n  // Math.abs(diff in full months - diff in calendar months) === 1 if last calendar month is not full\n  // If so, result must be decreased by 1 in absolute value\n  var isLastMonthNotFull = compareAsc(dateLeft, dateRight) === -sign\n  var result = sign * (difference - isLastMonthNotFull)\n  // Prevent negative zero\n  return result === 0 ? 0 : result\n}\n","import differenceInMonths from '../differenceInMonths/index.js'\n\n/**\n * @name differenceInQuarters\n * @category Quarter Helpers\n * @summary Get the number of full quarters between the given dates.\n *\n * @description\n * Get the number of full quarters between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full quarters\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full quarters are between 31 December 2013 and 2 July 2014?\n * var result = differenceInQuarters(new Date(2014, 6, 2), new Date(2013, 11, 31))\n * //=> 2\n */\nexport default function differenceInQuarters(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var diff = differenceInMonths(dirtyDateLeft, dirtyDateRight) / 3\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n","import differenceInMilliseconds from '../differenceInMilliseconds/index.js'\n\n/**\n * @name differenceInSeconds\n * @category Second Helpers\n * @summary Get the number of seconds between the given dates.\n *\n * @description\n * Get the number of seconds between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of seconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many seconds are between\n * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?\n * var result = differenceInSeconds(\n *   new Date(2014, 6, 2, 12, 30, 20, 0),\n *   new Date(2014, 6, 2, 12, 30, 7, 999)\n * )\n * //=> 12\n */\nexport default function differenceInSeconds(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var diff = differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) / 1000\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n","import differenceInDays from '../differenceInDays/index.js'\n\n/**\n * @name differenceInWeeks\n * @category Week Helpers\n * @summary Get the number of full weeks between the given dates.\n *\n * @description\n * Get the number of full weeks between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full weeks\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full weeks are between 5 July 2014 and 20 July 2014?\n * var result = differenceInWeeks(new Date(2014, 6, 20), new Date(2014, 6, 5))\n * //=> 2\n */\nexport default function differenceInWeeks(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var diff = differenceInDays(dirtyDateLeft, dirtyDateRight) / 7\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n","import toDate from '../toDate/index.js'\nimport differenceInCalendarYears from '../differenceInCalendarYears/index.js'\nimport compareAsc from '../compareAsc/index.js'\n\n/**\n * @name differenceInYears\n * @category Year Helpers\n * @summary Get the number of full years between the given dates.\n *\n * @description\n * Get the number of full years between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full years are between 31 December 2013 and 11 February 2015?\n * var result = differenceInYears(new Date(2015, 1, 11), new Date(2013, 11, 31))\n * //=> 1\n */\nexport default function differenceInYears(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n\n  var sign = compareAsc(dateLeft, dateRight)\n  var difference = Math.abs(differenceInCalendarYears(dateLeft, dateRight))\n  dateLeft.setFullYear(dateLeft.getFullYear() - sign * difference)\n\n  // Math.abs(diff in full years - diff in calendar years) === 1 if last calendar year is not full\n  // If so, result must be decreased by 1 in absolute value\n  var isLastYearNotFull = compareAsc(dateLeft, dateRight) === -sign\n  var result = sign * (difference - isLastYearNotFull)\n  // Prevent negative zero\n  return result === 0 ? 0 : result\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name eachDayOfInterval\n * @category Interval Helpers\n * @summary Return the array of dates within the specified time interval.\n *\n * @description\n * Return the array of dates within the specified time interval.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `eachDay` to `eachDayOfInterval`.\n *   This change was made to mirror the use of the word \"interval\" in standard ISO 8601:2004 terminology:\n *\n *   ```\n *   2.1.3\n *   time interval\n *   part of the time axis limited by two instants\n *   ```\n *\n *   Also, this function now accepts an object with `start` and `end` properties\n *   instead of two arguments as an interval.\n *   This function now throws `RangeError` if the start of the interval is after its end\n *   or if any date in the interval is `Invalid Date`.\n *\n *   ```javascript\n *   // Before v2.0.0\n *\n *   eachDay(new Date(2014, 0, 10), new Date(2014, 0, 20))\n *\n *   // v2.0.0 onward\n *\n *   eachDayOfInterval(\n *     { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) }\n *   )\n *   ```\n *\n * @param {Interval} interval - the interval. See [Interval]{@link docs/types/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.\n * @returns {Date[]} the array with starts of days from the day of the interval start to the day of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.step` must be a number greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each day between 6 October 2014 and 10 October 2014:\n * var result = eachDayOfInterval({\n *   start: new Date(2014, 9, 6),\n *   end: new Date(2014, 9, 10)\n * })\n * //=> [\n * //   Mon Oct 06 2014 00:00:00,\n * //   Tue Oct 07 2014 00:00:00,\n * //   Wed Oct 08 2014 00:00:00,\n * //   Thu Oct 09 2014 00:00:00,\n * //   Fri Oct 10 2014 00:00:00\n * // ]\n */\nexport default function eachDayOfInterval(dirtyInterval, options) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var interval = dirtyInterval || {}\n  var startDate = toDate(interval.start)\n  var endDate = toDate(interval.end)\n\n  var endTime = endDate.getTime()\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(startDate.getTime() <= endTime)) {\n    throw new RangeError('Invalid interval')\n  }\n\n  var dates = []\n\n  var currentDate = startDate\n  currentDate.setHours(0, 0, 0, 0)\n\n  var step = options && 'step' in options ? Number(options.step) : 1\n  if (step < 1 || isNaN(step))\n    throw new RangeError('`options.step` must be a number greater than 1')\n\n  while (currentDate.getTime() <= endTime) {\n    dates.push(toDate(currentDate))\n    currentDate.setDate(currentDate.getDate() + step)\n    currentDate.setHours(0, 0, 0, 0)\n  }\n\n  return dates\n}\n","import toDate from '../toDate/index.js'\nimport startOfWeek from '../startOfWeek/index.js'\nimport addWeeks from '../addWeeks/index.js'\n\n/**\n * @name eachWeekOfInterval\n * @category Interval Helpers\n * @summary Return the array of weeks within the specified time interval.\n *\n * @description\n * Return the array of weeks within the specified time interval.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Interval} interval - the interval. See [Interval]{@link docs/types/Interval}\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date[]} the array with starts of weeks from the week of the interval start to the week of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be 0, 1, ..., 6\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each week within interval 6 October 2014 - 23 November 2014:\n * var result = eachWeekOfInterval({\n *   start: new Date(2014, 9, 6),\n *   end: new Date(2014, 10, 23)\n * })\n * //=> [\n * //   Sun Oct 05 2014 00:00:00,\n * //   Sun Oct 12 2014 00:00:00,\n * //   Sun Oct 19 2014 00:00:00,\n * //   Sun Oct 26 2014 00:00:00,\n * //   Sun Nov 02 2014 00:00:00,\n * //   Sun Nov 09 2014 00:00:00,\n * //   Sun Nov 16 2014 00:00:00,\n * //   Sun Nov 23 2014 00:00:00\n * // ]\n */\nexport default function eachWeekOfInterval(dirtyInterval, options) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var interval = dirtyInterval || {}\n  var startDate = toDate(interval.start)\n  var endDate = toDate(interval.end)\n\n  var endTime = endDate.getTime()\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(startDate.getTime() <= endTime)) {\n    throw new RangeError('Invalid interval')\n  }\n\n  var startDateWeek = startOfWeek(startDate, options)\n  var endDateWeek = startOfWeek(endDate, options)\n\n  // Some timezones switch DST at midnight, making start of day unreliable in these timezones, 3pm is a safe bet\n  startDateWeek.setHours(15)\n  endDateWeek.setHours(15)\n\n  endTime = endDateWeek.getTime()\n\n  var weeks = []\n\n  var currentWeek = startDateWeek\n\n  while (currentWeek.getTime() <= endTime) {\n    currentWeek.setHours(0)\n    weeks.push(toDate(currentWeek))\n    currentWeek = addWeeks(currentWeek, 1)\n    currentWeek.setHours(15)\n  }\n\n  return weeks\n}\n","import eachDayOfInterval from '../eachDayOfInterval/index.js'\nimport isSunday from '../isSunday/index.js'\nimport isWeekend from '../isWeekend/index.js'\n\n/**\n * @name eachWeekendOfInterval\n * @category Interval Helpers\n * @summary List all the Saturdays and Sundays in the given date interval.\n *\n * @description\n * Get all the Saturdays and Sundays in the given date interval.\n *\n * @param {Interval} interval - the given interval. See [Interval]{@link docs/types/Interval}\n * @returns {Date[]} an array containing all the Saturdays and Sundays\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Lists all Saturdays and Sundays in the given date interval\n * var result = eachWeekendOfInterval({\n *   start: new Date(2018, 8, 17),\n *   end: new Date(2018, 8, 30)\n * })\n * //=> [\n * //   Sat Sep 22 2018 00:00:00,\n * //   Sun Sep 23 2018 00:00:00,\n * //   Sat Sep 29 2018 00:00:00,\n * //   Sun Sep 30 2018 00:00:00\n * // ]\n */\nexport default function eachWeekendOfInterval(interval) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateInterval = eachDayOfInterval(interval)\n  var weekends = []\n  var index = 0\n  while (index++ < dateInterval.length) {\n    var date = dateInterval[index]\n    if (isWeekend(date)) {\n      weekends.push(date)\n      if (isSunday(date)) index = index + 5\n    }\n  }\n  return weekends\n}\n","import eachWeekendOfInterval from '../eachWeekendOfInterval/index.js'\nimport startOfMonth from '../startOfMonth/index.js'\nimport endOfMonth from '../endOfMonth/index.js'\n\n/**\n * @name eachWeekendOfMonth\n * @category Month Helpers\n * @summary List all the Saturdays and Sundays in the given month.\n *\n * @description\n * Get all the Saturdays and Sundays in the given month.\n *\n * @param {Date|Number} date - the given month\n * @returns {Date[]} an array containing all the Saturdays and Sundays\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The passed date is invalid\n *\n * @example\n * // Lists all Saturdays and Sundays in the given month\n * var result = eachWeekendOfMonth(new Date(2022, 1, 1))\n * //=> [\n * //   Sat Feb 05 2022 00:00:00,\n * //   Sun Feb 06 2022 00:00:00,\n * //   Sat Feb 12 2022 00:00:00,\n * //   Sun Feb 13 2022 00:00:00,\n * //   Sat Feb 19 2022 00:00:00,\n * //   Sun Feb 20 2022 00:00:00,\n * //   Sat Feb 26 2022 00:00:00,\n * //   Sun Feb 27 2022 00:00:00\n * // ]\n */\nexport default function eachWeekendOfMonth(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var startDate = startOfMonth(dirtyDate)\n  if (isNaN(startDate)) throw new RangeError('The passed date is invalid')\n\n  var endDate = endOfMonth(dirtyDate)\n  return eachWeekendOfInterval({ start: startDate, end: endDate })\n}\n","import eachWeekendOfInterval from '../eachWeekendOfInterval/index.js'\nimport startOfYear from '../startOfYear/index.js'\nimport endOfYear from '../endOfYear/index.js'\n\n/**\n * @name eachWeekendOfYear\n * @category Year Helpers\n * @summary List all the Saturdays and Sundays in the year.\n *\n * @description\n * Get all the Saturdays and Sundays in the year.\n *\n * @param {Date|Number} date - the given year\n * @returns {Date[]} an array containing all the Saturdays and Sundays\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The passed date is invalid\n *\n * @example\n * // Lists all Saturdays and Sundays in the year\n * var result = eachWeekendOfYear(new Date(2020, 1, 1))\n * //=> [\n * //   Sat Jan 03 2020 00:00:00,\n * //   Sun Jan 04 2020 00:00:00,\n * //   ...\n * //   Sun Dec 27 2020 00:00:00\n * // ]\n * ]\n */\nexport default function eachWeekendOfYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var startDate = startOfYear(dirtyDate)\n  if (isNaN(startDate)) throw new RangeError('The passed date is invalid')\n\n  var endDate = endOfYear(dirtyDate)\n  return eachWeekendOfInterval({ start: startDate, end: endDate })\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * var result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\nexport default function endOfDay(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  date.setHours(23, 59, 59, 999)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfDecade\n * @category Decade Helpers\n * @summary Return the end of a decade for the given date.\n *\n * @description\n * Return the end of a decade for the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a decade\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // The end of a decade for 12 May 1984 00:00:00:\n * var result = endOfDecade(new Date(1984, 4, 12, 00, 00, 00))\n * //=> Dec 31 1989 23:59:59.999\n */\nexport default function endOfDecade(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n  var decade = 9 + Math.floor(year / 10) * 10\n  date.setFullYear(decade, 11, 31)\n  date.setHours(23, 59, 59, 999)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfHour\n * @category Hour Helpers\n * @summary Return the end of an hour for the given date.\n *\n * @description\n * Return the end of an hour for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an hour\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of an hour for 2 September 2014 11:55:00:\n * var result = endOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:59:59.999\n */\nexport default function endOfHour(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  date.setMinutes(59, 59, 999)\n  return date\n}\n","import endOfWeek from '../endOfWeek/index.js'\n\n/**\n * @name endOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the end of an ISO week for the given date.\n *\n * @description\n * Return the end of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of an ISO week for 2 September 2014 11:55:00:\n * var result = endOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport default function endOfISOWeek(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return endOfWeek(dirtyDate, { weekStartsOn: 1 })\n}\n","import getISOWeekYear from '../getISOWeekYear/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\n\n/**\n * @name endOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the end of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the end of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `endOfISOYear` to `endOfISOWeekYear`.\n *   \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n *   This change makes the name consistent with\n *   locale-dependent week-numbering year helpers, e.g., `addWeekYears`.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of an ISO week-numbering year for 2 July 2005:\n * var result = endOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Sun Jan 01 2006 23:59:59.999\n */\nexport default function endOfISOWeekYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var year = getISOWeekYear(dirtyDate)\n  var fourthOfJanuaryOfNextYear = new Date(0)\n  fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4)\n  fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0)\n  var date = startOfISOWeek(fourthOfJanuaryOfNextYear)\n  date.setMilliseconds(date.getMilliseconds() - 1)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfMinute\n * @category Minute Helpers\n * @summary Return the end of a minute for the given date.\n *\n * @description\n * Return the end of a minute for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a minute\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a minute for 1 December 2014 22:15:45.400:\n * var result = endOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:59.999\n */\nexport default function endOfMinute(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  date.setSeconds(59, 999)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * var result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport default function endOfMonth(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var month = date.getMonth()\n  date.setFullYear(date.getFullYear(), month + 1, 0)\n  date.setHours(23, 59, 59, 999)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfQuarter\n * @category Quarter Helpers\n * @summary Return the end of a year quarter for the given date.\n *\n * @description\n * Return the end of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a quarter for 2 September 2014 11:55:00:\n * var result = endOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport default function endOfQuarter(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var currentMonth = date.getMonth()\n  var month = currentMonth - (currentMonth % 3) + 3\n  date.setMonth(month, 0)\n  date.setHours(23, 59, 59, 999)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfSecond\n * @category Second Helpers\n * @summary Return the end of a second for the given date.\n *\n * @description\n * Return the end of a second for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a second\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a second for 1 December 2014 22:15:45.400:\n * var result = endOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.999\n */\nexport default function endOfSecond(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  date.setMilliseconds(999)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Date} the end of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * var result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * var result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport default function endOfWeek(dirtyDate, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n\n  var locale = options.locale\n  var localeWeekStartsOn =\n    locale && locale.options && locale.options.weekStartsOn\n  var defaultWeekStartsOn =\n    localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n  var weekStartsOn =\n    options.weekStartsOn == null\n      ? defaultWeekStartsOn\n      : toInteger(options.weekStartsOn)\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n  }\n\n  var date = toDate(dirtyDate)\n  var day = date.getDay()\n  var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn)\n\n  date.setDate(date.getDate() + diff)\n  date.setHours(23, 59, 59, 999)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfYear\n * @category Year Helpers\n * @summary Return the end of a year for the given date.\n *\n * @description\n * Return the end of a year for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a year for 2 September 2014 11:55:00:\n * var result = endOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Dec 31 2014 23:59:59.999\n */\nexport default function endOfYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n  date.setFullYear(year + 1, 0, 0)\n  date.setHours(23, 59, 59, 999)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport toDate from '../toDate/index.js'\nimport isValid from '../isValid/index.js'\nimport defaultLocale from '../locale/en-US/index.js'\nimport formatters from '../_lib/format/formatters/index.js'\nimport longFormatters from '../_lib/format/longFormatters/index.js'\nimport subMilliseconds from '../subMilliseconds/index.js'\nimport {\n  isProtectedToken,\n  throwProtectedError\n} from '../_lib/protectedTokens/index.js'\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n//   (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g\n\nvar escapedStringRegExp = /^'(.*?)'?$/\nvar doubleQuoteRegExp = /''/g\n\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit                            | Pattern | Result examples                   | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era                             | G..GGG  | AD, BC                            |       |\n * |                                 | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 | GGGGG   | A, B                              |       |\n * | Calendar year                   | y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | yo      | 44th, 1st, 0th, 17th              | 5,7   |\n * |                                 | yy      | 44, 01, 00, 17                    | 5     |\n * |                                 | yyy     | 044, 001, 1900, 2017              | 5     |\n * |                                 | yyyy    | 0044, 0001, 1900, 2017            | 5     |\n * |                                 | yyyyy   | ...                               | 3,5   |\n * | Local week-numbering year       | Y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | Yo      | 44th, 1st, 1900th, 2017th         | 5,7   |\n * |                                 | YY      | 44, 01, 00, 17                    | 5,8   |\n * |                                 | YYY     | 044, 001, 1900, 2017              | 5     |\n * |                                 | YYYY    | 0044, 0001, 1900, 2017            | 5,8   |\n * |                                 | YYYYY   | ...                               | 3,5   |\n * | ISO week-numbering year         | R       | -43, 0, 1, 1900, 2017             | 5,7   |\n * |                                 | RR      | -43, 00, 01, 1900, 2017           | 5,7   |\n * |                                 | RRR     | -043, 000, 001, 1900, 2017        | 5,7   |\n * |                                 | RRRR    | -0043, 0000, 0001, 1900, 2017     | 5,7   |\n * |                                 | RRRRR   | ...                               | 3,5,7 |\n * | Extended year                   | u       | -43, 0, 1, 1900, 2017             | 5     |\n * |                                 | uu      | -43, 01, 1900, 2017               | 5     |\n * |                                 | uuu     | -043, 001, 1900, 2017             | 5     |\n * |                                 | uuuu    | -0043, 0001, 1900, 2017           | 5     |\n * |                                 | uuuuu   | ...                               | 3,5   |\n * | Quarter (formatting)            | Q       | 1, 2, 3, 4                        |       |\n * |                                 | Qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | QQ      | 01, 02, 03, 04                    |       |\n * |                                 | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | q       | 1, 2, 3, 4                        |       |\n * |                                 | qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | qq      | 01, 02, 03, 04                    |       |\n * |                                 | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | qqqqq   | 1, 2, 3, 4                        | 4     |\n * | Month (formatting)              | M       | 1, 2, ..., 12                     |       |\n * |                                 | Mo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | MM      | 01, 02, ..., 12                   |       |\n * |                                 | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 | MMMM    | January, February, ..., December  | 2     |\n * |                                 | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | L       | 1, 2, ..., 12                     |       |\n * |                                 | Lo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | LL      | 01, 02, ..., 12                   |       |\n * |                                 | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 | LLLL    | January, February, ..., December  | 2     |\n * |                                 | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | w       | 1, 2, ..., 53                     |       |\n * |                                 | wo      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | I       | 1, 2, ..., 53                     | 7     |\n * |                                 | Io      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | II      | 01, 02, ..., 53                   | 7     |\n * | Day of month                    | d       | 1, 2, ..., 31                     |       |\n * |                                 | do      | 1st, 2nd, ..., 31st               | 7     |\n * |                                 | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     | D       | 1, 2, ..., 365, 366               | 8     |\n * |                                 | Do      | 1st, 2nd, ..., 365th, 366th       | 7     |\n * |                                 | DD      | 01, 02, ..., 365, 366             | 8     |\n * |                                 | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 | DDDD    | ...                               | 3     |\n * | Day of week (formatting)        | E..EEE  | Mon, Tue, Wed, ..., Su            |       |\n * |                                 | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 | EEEEEE  | Mo, Tu, We, Th, Fr, Su, Sa        |       |\n * | ISO day of week (formatting)    | i       | 1, 2, 3, ..., 7                   | 7     |\n * |                                 | io      | 1st, 2nd, ..., 7th                | 7     |\n * |                                 | ii      | 01, 02, ..., 07                   | 7     |\n * |                                 | iii     | Mon, Tue, Wed, ..., Su            | 7     |\n * |                                 | iiii    | Monday, Tuesday, ..., Sunday      | 2,7   |\n * |                                 | iiiii   | M, T, W, T, F, S, S               | 7     |\n * |                                 | iiiiii  | Mo, Tu, We, Th, Fr, Su, Sa        | 7     |\n * | Local day of week (formatting)  | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 | eo      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | ee      | 02, 03, ..., 01                   |       |\n * |                                 | eee     | Mon, Tue, Wed, ..., Su            |       |\n * |                                 | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 | eeeeee  | Mo, Tu, We, Th, Fr, Su, Sa        |       |\n * | Local day of week (stand-alone) | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 | co      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | cc      | 02, 03, ..., 01                   |       |\n * |                                 | ccc     | Mon, Tue, Wed, ..., Su            |       |\n * |                                 | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 | cccccc  | Mo, Tu, We, Th, Fr, Su, Sa        |       |\n * | AM, PM                          | a..aaa  | AM, PM                            |       |\n * |                                 | aaaa    | a.m., p.m.                        | 2     |\n * |                                 | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          | b..bbb  | AM, PM, noon, midnight            |       |\n * |                                 | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             | B..BBB  | at night, in the morning, ...     |       |\n * |                                 | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 | ho      | 1st, 2nd, ..., 11th, 12th         | 7     |\n * |                                 | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 | Ho      | 0th, 1st, 2nd, ..., 23rd          | 7     |\n * |                                 | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 | Ko      | 1st, 2nd, ..., 11th, 0th          | 7     |\n * |                                 | KK      | 1, 2, ..., 11, 0                  |       |\n * | Hour [1-24]                     | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 | ko      | 24th, 1st, 2nd, ..., 23rd         | 7     |\n * |                                 | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          | m       | 0, 1, ..., 59                     |       |\n * |                                 | mo      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | mm      | 00, 01, ..., 59                   |       |\n * | Second                          | s       | 0, 1, ..., 59                     |       |\n * |                                 | so      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | ss      | 00, 01, ..., 59                   |       |\n * | Fraction of second              | S       | 0, 1, ..., 9                      |       |\n * |                                 | SS      | 00, 01, ..., 99                   |       |\n * |                                 | SSS     | 000, 0001, ..., 999               |       |\n * |                                 | SSSS    | ...                               | 3     |\n * | Timezone (ISO-8601 w/ Z)        | X       | -08, +0530, Z                     |       |\n * |                                 | XX      | -0800, +0530, Z                   |       |\n * |                                 | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       | x       | -08, +0530, +00                   |       |\n * |                                 | xx      | -0800, +0530, +0000               |       |\n * |                                 | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Timezone (GMT)                  | O...OOO | GMT-8, GMT+5:30, GMT+0            |       |\n * |                                 | OOOO    | GMT-08:00, GMT+05:30, GMT+00:00   | 2     |\n * | Timezone (specific non-locat.)  | z...zzz | GMT-8, GMT+5:30, GMT+0            | 6     |\n * |                                 | zzzz    | GMT-08:00, GMT+05:30, GMT+00:00   | 2,6   |\n * | Seconds timestamp               | t       | 512969520                         | 7     |\n * |                                 | tt      | ...                               | 3,7   |\n * | Milliseconds timestamp          | T       | 512969520900                      | 7     |\n * |                                 | TT      | ...                               | 3,7   |\n * | Long localized date             | P       | 05/29/1453                        | 7     |\n * |                                 | PP      | May 29, 1453                      | 7     |\n * |                                 | PPP     | May 29th, 1453                    | 7     |\n * |                                 | PPPP    | Sunday, May 29th, 1453            | 2,7   |\n * | Long localized time             | p       | 12:00 AM                          | 7     |\n * |                                 | pp      | 12:00:00 AM                       | 7     |\n * |                                 | ppp     | 12:00:00 AM GMT+2                 | 7     |\n * |                                 | pppp    | 12:00:00 AM GMT+02:00             | 2,7   |\n * | Combination of date and time    | Pp      | 05/29/1453, 12:00 AM              | 7     |\n * |                                 | PPpp    | May 29, 1453, 12:00:00 AM         | 7     |\n * |                                 | PPPppp  | May 29th, 1453 at ...             | 7     |\n * |                                 | PPPPpppp| Sunday, May 29th, 1453 at ...     | 2,7   |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n *    the output will be the same as default pattern for this unit, usually\n *    the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n *    are marked with \"2\" in the last column of the table.\n *\n *    `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n *    The output will be padded with zeros to match the length of the pattern.\n *\n *    `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` always returns the last two digits of a year,\n *    while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n *    | Year | `yy` | `uu` |\n *    |------|------|------|\n *    | 1    |   01 |   01 |\n *    | 14   |   14 |   14 |\n *    | 376  |   76 |  376 |\n *    | 1453 |   53 | 1453 |\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n *    and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n *    so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `t`: seconds timestamp\n *    - `T`: milliseconds timestamp\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 8. These tokens are often confused with others. See: https://git.io/fxCyr\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The second argument is now required for the sake of explicitness.\n *\n *   ```javascript\n *   // Before v2.0.0\n *   format(new Date(2016, 0, 1))\n *\n *   // v2.0.0 onward\n *   format(new Date(2016, 0, 1), \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\")\n *   ```\n *\n * - New format string API for `format` function\n *   which is based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table).\n *   See [this post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details.\n *\n * - Characters are now escaped using single quote symbols (`'`) instead of square brackets.\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {Boolean} [options.awareOfUnicodeTokens=false] - if true, allows usage of Unicode tokens causes confusion:\n *   - Some of the day of year tokens (`D`, `DD`) that are confused with the day of month tokens (`d`, `dd`).\n *   - Some of the local week-numbering year tokens (`YY`, `YYYY`) that are confused with the calendar year tokens (`yy`, `yyyy`).\n *   See: https://git.io/fxCyr\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.awareOfUnicodeTokens` must be set to `true` to use `XX` token; see: https://git.io/fxCyr\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * var result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n *   locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * var result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport default function format(dirtyDate, dirtyFormatStr, dirtyOptions) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var formatStr = String(dirtyFormatStr)\n  var options = dirtyOptions || {}\n\n  var locale = options.locale || defaultLocale\n\n  var localeFirstWeekContainsDate =\n    locale.options && locale.options.firstWeekContainsDate\n  var defaultFirstWeekContainsDate =\n    localeFirstWeekContainsDate == null\n      ? 1\n      : toInteger(localeFirstWeekContainsDate)\n  var firstWeekContainsDate =\n    options.firstWeekContainsDate == null\n      ? defaultFirstWeekContainsDate\n      : toInteger(options.firstWeekContainsDate)\n\n  // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError(\n      'firstWeekContainsDate must be between 1 and 7 inclusively'\n    )\n  }\n\n  var localeWeekStartsOn = locale.options && locale.options.weekStartsOn\n  var defaultWeekStartsOn =\n    localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n  var weekStartsOn =\n    options.weekStartsOn == null\n      ? defaultWeekStartsOn\n      : toInteger(options.weekStartsOn)\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n  }\n\n  if (!locale.localize) {\n    throw new RangeError('locale must contain localize property')\n  }\n\n  if (!locale.formatLong) {\n    throw new RangeError('locale must contain formatLong property')\n  }\n\n  var originalDate = toDate(dirtyDate)\n\n  if (!isValid(originalDate)) {\n    throw new RangeError('Invalid time value')\n  }\n\n  // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n  // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n  // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n  var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate)\n  var utcDate = subMilliseconds(originalDate, timezoneOffset)\n\n  var formatterOptions = {\n    firstWeekContainsDate: firstWeekContainsDate,\n    weekStartsOn: weekStartsOn,\n    locale: locale,\n    _originalDate: originalDate\n  }\n\n  var result = formatStr\n    .match(longFormattingTokensRegExp)\n    .map(function(substring) {\n      var firstCharacter = substring[0]\n      if (firstCharacter === 'p' || firstCharacter === 'P') {\n        var longFormatter = longFormatters[firstCharacter]\n        return longFormatter(substring, locale.formatLong, formatterOptions)\n      }\n      return substring\n    })\n    .join('')\n    .match(formattingTokensRegExp)\n    .map(function(substring) {\n      // Replace two single quote characters with one single quote character\n      if (substring === \"''\") {\n        return \"'\"\n      }\n\n      var firstCharacter = substring[0]\n      if (firstCharacter === \"'\") {\n        return cleanEscapedString(substring)\n      }\n\n      var formatter = formatters[firstCharacter]\n      if (formatter) {\n        if (!options.awareOfUnicodeTokens && isProtectedToken(substring)) {\n          throwProtectedError(substring)\n        }\n        return formatter(utcDate, substring, locale.localize, formatterOptions)\n      }\n\n      return substring\n    })\n    .join('')\n\n  return result\n}\n\nfunction cleanEscapedString(input) {\n  return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\")\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport compareAsc from '../compareAsc/index.js'\nimport toDate from '../toDate/index.js'\nimport differenceInSeconds from '../differenceInSeconds/index.js'\nimport differenceInMonths from '../differenceInMonths/index.js'\nimport cloneObject from '../_lib/cloneObject/index.js'\nimport defaultLocale from '../locale/en-US/index.js'\n\nvar MINUTES_IN_DAY = 1440\nvar MINUTES_IN_ALMOST_TWO_DAYS = 2520\nvar MINUTES_IN_MONTH = 43200\nvar MINUTES_IN_TWO_MONTHS = 86400\n\n/**\n * @name formatDistance\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words.\n *\n * | Distance between dates                                            | Result              |\n * |-------------------------------------------------------------------|---------------------|\n * | 0 ... 30 secs                                                     | less than a minute  |\n * | 30 secs ... 1 min 30 secs                                         | 1 minute            |\n * | 1 min 30 secs ... 44 mins 30 secs                                 | [2..44] minutes     |\n * | 44 mins ... 30 secs ... 89 mins 30 secs                           | about 1 hour        |\n * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs                        | about [2..24] hours |\n * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs                 | 1 day               |\n * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs         | [2..30] days        |\n * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month       |\n * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months      |\n * | 59 days 23 hrs 59 mins 30 secs ... 1 yr                           | [2..12] months      |\n * | 1 yr ... 1 yr 3 months                                            | about 1 year        |\n * | 1 yr 3 months ... 1 yr 9 month s                                  | over 1 year         |\n * | 1 yr 9 months ... 2 yrs                                           | almost 2 years      |\n * | N yrs ... N yrs 3 months                                          | about N years       |\n * | N yrs 3 months ... N yrs 9 months                                 | over N years        |\n * | N yrs 9 months ... N+1 yrs                                        | almost N+1 years    |\n *\n * With `options.includeSeconds == true`:\n * | Distance between dates | Result               |\n * |------------------------|----------------------|\n * | 0 secs ... 5 secs      | less than 5 seconds  |\n * | 5 secs ... 10 secs     | less than 10 seconds |\n * | 10 secs ... 20 secs    | less than 20 seconds |\n * | 20 secs ... 40 secs    | half a minute        |\n * | 40 secs ... 60 secs    | less than a minute   |\n * | 60 secs ... 90 secs    | 1 minute             |\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `distanceInWords ` to `formatDistance `\n *   to make its name consistent with `format` and `formatRelative`.\n *\n * - The order of arguments is swapped to make the function\n *   consistent with `differenceIn...` functions.\n *\n *   ```javascript\n *   // Before v2.0.0\n *\n *   distanceInWords(\n *     new Date(1986, 3, 4, 10, 32, 0),\n *     new Date(1986, 3, 4, 11, 32, 0),\n *     { addSuffix: true }\n *   ) //=> 'in about 1 hour'\n *\n *   // v2.0.0 onward\n *\n *   formatDistance(\n *     new Date(1986, 3, 4, 11, 32, 0),\n *     new Date(1986, 3, 4, 10, 32, 0),\n *     { addSuffix: true }\n *   ) //=> 'in about 1 hour'\n *   ```\n *\n * @param {Date|Number} date - the date\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {Boolean} [options.includeSeconds=false] - distances less than a minute are more detailed\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * var result = formatDistance(new Date(2014, 6, 2), new Date(2015, 0, 1))\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00, including seconds?\n * var result = formatDistance(\n *   new Date(2015, 0, 1, 0, 0, 15),\n *   new Date(2015, 0, 1, 0, 0, 0),\n *   { includeSeconds: true }\n * )\n * //=> 'less than 20 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * var result = formatDistance(new Date(2015, 0, 1), new Date(2016, 0, 1), {\n *   addSuffix: true\n * })\n * //=> 'about 1 year ago'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = formatDistance(new Date(2016, 7, 1), new Date(2015, 0, 1), {\n *   locale: eoLocale\n * })\n * //=> 'pli ol 1 jaro'\n */\nexport default function formatDistance(dirtyDate, dirtyBaseDate, dirtyOptions) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale || defaultLocale\n\n  if (!locale.formatDistance) {\n    throw new RangeError('locale must contain formatDistance property')\n  }\n\n  var comparison = compareAsc(dirtyDate, dirtyBaseDate)\n\n  if (isNaN(comparison)) {\n    throw new RangeError('Invalid time value')\n  }\n\n  var localizeOptions = cloneObject(options)\n  localizeOptions.addSuffix = Boolean(options.addSuffix)\n  localizeOptions.comparison = comparison\n\n  var dateLeft\n  var dateRight\n  if (comparison > 0) {\n    dateLeft = toDate(dirtyBaseDate)\n    dateRight = toDate(dirtyDate)\n  } else {\n    dateLeft = toDate(dirtyDate)\n    dateRight = toDate(dirtyBaseDate)\n  }\n\n  var seconds = differenceInSeconds(dateRight, dateLeft)\n  var offsetInSeconds =\n    (getTimezoneOffsetInMilliseconds(dateRight) -\n      getTimezoneOffsetInMilliseconds(dateLeft)) /\n    1000\n  var minutes = Math.round((seconds - offsetInSeconds) / 60)\n  var months\n\n  // 0 up to 2 mins\n  if (minutes < 2) {\n    if (options.includeSeconds) {\n      if (seconds < 5) {\n        return locale.formatDistance('lessThanXSeconds', 5, localizeOptions)\n      } else if (seconds < 10) {\n        return locale.formatDistance('lessThanXSeconds', 10, localizeOptions)\n      } else if (seconds < 20) {\n        return locale.formatDistance('lessThanXSeconds', 20, localizeOptions)\n      } else if (seconds < 40) {\n        return locale.formatDistance('halfAMinute', null, localizeOptions)\n      } else if (seconds < 60) {\n        return locale.formatDistance('lessThanXMinutes', 1, localizeOptions)\n      } else {\n        return locale.formatDistance('xMinutes', 1, localizeOptions)\n      }\n    } else {\n      if (minutes === 0) {\n        return locale.formatDistance('lessThanXMinutes', 1, localizeOptions)\n      } else {\n        return locale.formatDistance('xMinutes', minutes, localizeOptions)\n      }\n    }\n\n    // 2 mins up to 0.75 hrs\n  } else if (minutes < 45) {\n    return locale.formatDistance('xMinutes', minutes, localizeOptions)\n\n    // 0.75 hrs up to 1.5 hrs\n  } else if (minutes < 90) {\n    return locale.formatDistance('aboutXHours', 1, localizeOptions)\n\n    // 1.5 hrs up to 24 hrs\n  } else if (minutes < MINUTES_IN_DAY) {\n    var hours = Math.round(minutes / 60)\n    return locale.formatDistance('aboutXHours', hours, localizeOptions)\n\n    // 1 day up to 1.75 days\n  } else if (minutes < MINUTES_IN_ALMOST_TWO_DAYS) {\n    return locale.formatDistance('xDays', 1, localizeOptions)\n\n    // 1.75 days up to 30 days\n  } else if (minutes < MINUTES_IN_MONTH) {\n    var days = Math.round(minutes / MINUTES_IN_DAY)\n    return locale.formatDistance('xDays', days, localizeOptions)\n\n    // 1 month up to 2 months\n  } else if (minutes < MINUTES_IN_TWO_MONTHS) {\n    months = Math.round(minutes / MINUTES_IN_MONTH)\n    return locale.formatDistance('aboutXMonths', months, localizeOptions)\n  }\n\n  months = differenceInMonths(dateRight, dateLeft)\n\n  // 2 months up to 12 months\n  if (months < 12) {\n    var nearestMonth = Math.round(minutes / MINUTES_IN_MONTH)\n    return locale.formatDistance('xMonths', nearestMonth, localizeOptions)\n\n    // 1 year up to max Date\n  } else {\n    var monthsSinceStartOfYear = months % 12\n    var years = Math.floor(months / 12)\n\n    // N years up to 1 years 3 months\n    if (monthsSinceStartOfYear < 3) {\n      return locale.formatDistance('aboutXYears', years, localizeOptions)\n\n      // N years 3 months up to N years 9 months\n    } else if (monthsSinceStartOfYear < 9) {\n      return locale.formatDistance('overXYears', years, localizeOptions)\n\n      // N years 9 months up to N year 12 months\n    } else {\n      return locale.formatDistance('almostXYears', years + 1, localizeOptions)\n    }\n  }\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport compareAsc from '../compareAsc/index.js'\nimport toDate from '../toDate/index.js'\nimport differenceInSeconds from '../differenceInSeconds/index.js'\nimport cloneObject from '../_lib/cloneObject/index.js'\nimport defaultLocale from '../locale/en-US/index.js'\n\nvar MINUTES_IN_DAY = 1440\nvar MINUTES_IN_MONTH = 43200\nvar MINUTES_IN_YEAR = 525600\n\n/**\n * @name formatDistanceStrict\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words, using strict units.\n * This is like `formatDistance`, but does not use helpers like 'almost', 'over',\n * 'less than' and the like.\n *\n * | Distance between dates | Result              |\n * |------------------------|---------------------|\n * | 0 ... 59 secs          | [0..59] seconds     |\n * | 1 ... 59 mins          | [1..59] minutes     |\n * | 1 ... 23 hrs           | [1..23] hours       |\n * | 1 ... 29 days          | [1..29] days        |\n * | 1 ... 11 months        | [1..11] months      |\n * | 1 ... N years          | [1..N]  years       |\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `distanceInWordsStrict` to `formatDistanceStrict`\n *   to make its name consistent with `format` and `formatRelative`.\n *\n * - The order of arguments is swapped to make the function\n *   consistent with `differenceIn...` functions.\n *\n *   ```javascript\n *   // Before v2.0.0\n *\n *   distanceInWordsStrict(\n *     new Date(2015, 0, 2),\n *     new Date(2014, 6, 2)\n *   ) //=> '6 months'\n *\n *   // v2.0.0 onward\n *\n *   formatDistanceStrict(\n *     new Date(2014, 6, 2),\n *     new Date(2015, 0, 2)\n *   ) //=> '6 months'\n *   ```\n *\n * - `partialMethod` option is renamed to `roundingMethod`.\n *\n *   ```javascript\n *   // Before v2.0.0\n *\n *   distanceInWordsStrict(\n *     new Date(1986, 3, 4, 10, 32, 0),\n *     new Date(1986, 3, 4, 10, 33, 1),\n *     { partialMethod: 'ceil' }\n *   ) //=> '2 minutes'\n *\n *   // v2.0.0 onward\n *\n *   formatDistanceStrict(\n *     new Date(1986, 3, 4, 10, 33, 1),\n *     new Date(1986, 3, 4, 10, 32, 0),\n *     { roundingMethod: 'ceil' }\n *   ) //=> '2 minutes'\n *   ```\n *\n * - If `roundingMethod` is not specified, it now defaults to `round` instead of `floor`.\n *\n * - `unit` option now accepts one of the strings:\n *   'second', 'minute', 'hour', 'day', 'month' or 'year' instead of 's', 'm', 'h', 'd', 'M' or 'Y'\n *\n *   ```javascript\n *   // Before v2.0.0\n *\n *   distanceInWordsStrict(\n *     new Date(1986, 3, 4, 10, 32, 0),\n *     new Date(1986, 3, 4, 10, 33, 1),\n *     { unit: 'm' }\n *   )\n *\n *   // v2.0.0 onward\n *\n *   formatDistanceStrict(\n *     new Date(1986, 3, 4, 10, 33, 1),\n *     new Date(1986, 3, 4, 10, 32, 0),\n *     { unit: 'minute' }\n *   )\n *   ```\n *\n * @param {Date|Number} date - the date\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {'second'|'minute'|'hour'|'day'|'month'|'year'} [options.unit] - if specified, will force a unit\n * @param {'floor'|'ceil'|'round'} [options.roundingMethod='round'] - which way to round partial units\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.roundingMethod` must be 'floor', 'ceil' or 'round'\n * @throws {RangeError} `options.unit` must be 'second', 'minute', 'hour', 'day', 'month' or 'year'\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * var result = formatDistanceStrict(new Date(2014, 6, 2), new Date(2015, 0, 2))\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00?\n * var result = formatDistanceStrict(\n *   new Date(2015, 0, 1, 0, 0, 15),\n *   new Date(2015, 0, 1, 0, 0, 0)\n * )\n * //=> '15 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * var result = formatDistanceStrict(new Date(2015, 0, 1), new Date(2016, 0, 1), {\n *   addSuffix: true\n * })\n * //=> '1 year ago'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, in minutes?\n * var result = formatDistanceStrict(new Date(2016, 0, 1), new Date(2015, 0, 1), {\n *   unit: 'minute'\n * })\n * //=> '525600 minutes'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 28 January 2015, in months, rounded up?\n * var result = formatDistanceStrict(new Date(2015, 0, 28), new Date(2015, 0, 1), {\n *   unit: 'month',\n *   roundingMethod: 'ceil'\n * })\n * //=> '1 month'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = formatDistanceStrict(new Date(2016, 7, 1), new Date(2015, 0, 1), {\n *   locale: eoLocale\n * })\n * //=> '1 jaro'\n */\nexport default function formatDistanceStrict(\n  dirtyDate,\n  dirtyBaseDate,\n  dirtyOptions\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale || defaultLocale\n\n  if (!locale.formatDistance) {\n    throw new RangeError('locale must contain localize.formatDistance property')\n  }\n\n  var comparison = compareAsc(dirtyDate, dirtyBaseDate)\n\n  if (isNaN(comparison)) {\n    throw new RangeError('Invalid time value')\n  }\n\n  var localizeOptions = cloneObject(options)\n  localizeOptions.addSuffix = Boolean(options.addSuffix)\n  localizeOptions.comparison = comparison\n\n  var dateLeft\n  var dateRight\n  if (comparison > 0) {\n    dateLeft = toDate(dirtyBaseDate)\n    dateRight = toDate(dirtyDate)\n  } else {\n    dateLeft = toDate(dirtyDate)\n    dateRight = toDate(dirtyBaseDate)\n  }\n\n  var roundingMethod =\n    options.roundingMethod == null ? 'round' : String(options.roundingMethod)\n  var roundingMethodFn\n\n  if (roundingMethod === 'floor') {\n    roundingMethodFn = Math.floor\n  } else if (roundingMethod === 'ceil') {\n    roundingMethodFn = Math.ceil\n  } else if (roundingMethod === 'round') {\n    roundingMethodFn = Math.round\n  } else {\n    throw new RangeError(\"roundingMethod must be 'floor', 'ceil' or 'round'\")\n  }\n\n  var seconds = differenceInSeconds(dateRight, dateLeft)\n  var offsetInSeconds =\n    (getTimezoneOffsetInMilliseconds(dateRight) -\n      getTimezoneOffsetInMilliseconds(dateLeft)) /\n    1000\n  var minutes = roundingMethodFn((seconds - offsetInSeconds) / 60)\n\n  var unit\n  if (options.unit == null) {\n    if (minutes < 1) {\n      unit = 'second'\n    } else if (minutes < 60) {\n      unit = 'minute'\n    } else if (minutes < MINUTES_IN_DAY) {\n      unit = 'hour'\n    } else if (minutes < MINUTES_IN_MONTH) {\n      unit = 'day'\n    } else if (minutes < MINUTES_IN_YEAR) {\n      unit = 'month'\n    } else {\n      unit = 'year'\n    }\n  } else {\n    unit = String(options.unit)\n  }\n\n  // 0 up to 60 seconds\n  if (unit === 'second') {\n    return locale.formatDistance('xSeconds', seconds, localizeOptions)\n\n    // 1 up to 60 mins\n  } else if (unit === 'minute') {\n    return locale.formatDistance('xMinutes', minutes, localizeOptions)\n\n    // 1 up to 24 hours\n  } else if (unit === 'hour') {\n    var hours = roundingMethodFn(minutes / 60)\n    return locale.formatDistance('xHours', hours, localizeOptions)\n\n    // 1 up to 30 days\n  } else if (unit === 'day') {\n    var days = roundingMethodFn(minutes / MINUTES_IN_DAY)\n    return locale.formatDistance('xDays', days, localizeOptions)\n\n    // 1 up to 12 months\n  } else if (unit === 'month') {\n    var months = roundingMethodFn(minutes / MINUTES_IN_MONTH)\n    return locale.formatDistance('xMonths', months, localizeOptions)\n\n    // 1 year up to max Date\n  } else if (unit === 'year') {\n    var years = roundingMethodFn(minutes / MINUTES_IN_YEAR)\n    return locale.formatDistance('xYears', years, localizeOptions)\n  }\n\n  throw new RangeError(\n    \"unit must be 'second', 'minute', 'hour', 'day', 'month' or 'year'\"\n  )\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport toDate from '../toDate/index.js'\nimport format from '../format/index.js'\nimport differenceInCalendarDays from '../differenceInCalendarDays/index.js'\nimport defaultLocale from '../locale/en-US/index.js'\nimport subMilliseconds from '../subMilliseconds/index.js'\n\n/**\n * @name formatRelative\n * @category Common Helpers\n * @summary Represent the date in words relative to the given base date.\n *\n * @description\n * Represent the date in words relative to the given base date.\n *\n * | Distance to the base date | Result                    |\n * |---------------------------|---------------------------|\n * | Previous 6 days           | last Sunday at 04:30 AM   |\n * | Last day                  | yesterday at 04:30 AM     |\n * | Same day                  | today at 04:30 AM         |\n * | Next day                  | tomorrow at 04:30 AM      |\n * | Next 6 days               | Sunday at 04:30 AM        |\n * | Other                     | 12/31/2017                |\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to format\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the date in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.locale` must contain `formatRelative` property\n */\nexport default function formatRelative(dirtyDate, dirtyBaseDate, dirtyOptions) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var baseDate = toDate(dirtyBaseDate)\n\n  var options = dirtyOptions || {}\n  var locale = options.locale || defaultLocale\n\n  if (!locale.localize) {\n    throw new RangeError('locale must contain localize property')\n  }\n\n  if (!locale.formatLong) {\n    throw new RangeError('locale must contain formatLong property')\n  }\n\n  if (!locale.formatRelative) {\n    throw new RangeError('locale must contain formatRelative property')\n  }\n\n  var diff = differenceInCalendarDays(date, baseDate)\n\n  if (isNaN(diff)) {\n    throw new RangeError('Invalid time value')\n  }\n\n  var token\n  if (diff < -6) {\n    token = 'other'\n  } else if (diff < -1) {\n    token = 'lastWeek'\n  } else if (diff < 0) {\n    token = 'yesterday'\n  } else if (diff < 1) {\n    token = 'today'\n  } else if (diff < 2) {\n    token = 'tomorrow'\n  } else if (diff < 7) {\n    token = 'nextWeek'\n  } else {\n    token = 'other'\n  }\n\n  var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date))\n  var utcBaseDate = subMilliseconds(\n    baseDate,\n    getTimezoneOffsetInMilliseconds(baseDate)\n  )\n  var formatStr = locale.formatRelative(token, utcDate, utcBaseDate, options)\n  return format(date, formatStr, options)\n}\n","import toDate from '../toDate/index.js'\nimport toInteger from '../_lib/toInteger/index.js'\n\n/**\n * @name fromUnixTime\n * @category Timestamp Helpers\n * @summary Create a date from a Unix timestamp.\n *\n * @description\n * Create a date from a Unix timestamp.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Number} unixTime - the given Unix timestamp\n * @returns {Date} the date\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Create the date 29 February 2012 11:45:05:\n * var result = fromUnixTime(1330515905)\n * //=> Wed Feb 29 2012 11:45:05\n */\nexport default function fromUnixTime(dirtyUnixTime) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var unixTime = toInteger(dirtyUnixTime)\n\n  return toDate(unixTime * 1000)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getDate\n * @category Day Helpers\n * @summary Get the day of the month of the given date.\n *\n * @description\n * Get the day of the month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the month is 29 February 2012?\n * var result = getDate(new Date(2012, 1, 29))\n * //=> 29\n */\nexport default function getDate(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var dayOfMonth = date.getDate()\n  return dayOfMonth\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getDay\n * @category Weekday Helpers\n * @summary Get the day of the week of the given date.\n *\n * @description\n * Get the day of the week of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the week is 29 February 2012?\n * var result = getDay(new Date(2012, 1, 29))\n * //=> 3\n */\nexport default function getDay(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var day = date.getDay()\n  return day\n}\n","import toDate from '../toDate/index.js'\nimport startOfYear from '../startOfYear/index.js'\nimport differenceInCalendarDays from '../differenceInCalendarDays/index.js'\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * var result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport default function getDayOfYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var diff = differenceInCalendarDays(date, startOfYear(date))\n  var dayOfYear = diff + 1\n  return dayOfYear\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getDaysInMonth\n * @category Month Helpers\n * @summary Get the number of days in a month of the given date.\n *\n * @description\n * Get the number of days in a month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of days in a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many days are in February 2000?\n * var result = getDaysInMonth(new Date(2000, 1))\n * //=> 29\n */\nexport default function getDaysInMonth(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n  var monthIndex = date.getMonth()\n  var lastDayOfMonth = new Date(0)\n  lastDayOfMonth.setFullYear(year, monthIndex + 1, 0)\n  lastDayOfMonth.setHours(0, 0, 0, 0)\n  return lastDayOfMonth.getDate()\n}\n","import toDate from '../toDate/index.js'\nimport isLeapYear from '../isLeapYear/index.js'\n\n/**\n * @name getDaysInYear\n * @category Year Helpers\n * @summary Get the number of days in a year of the given date.\n *\n * @description\n * Get the number of days in a year of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of days in a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many days are in 2012?\n * var result = getDaysInYear(new Date(2012, 0, 1))\n * //=> 366\n */\nexport default function getDaysInYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n\n  if (isNaN(date)) {\n    return NaN\n  }\n\n  return isLeapYear(date) ? 366 : 365\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getDecade\n * @category Decade Helpers\n * @summary Get the decade of the given date.\n *\n * @description\n * Get the decade of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year of decade\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which decade belongs 27 November 1942?\n * var result = getDecade(new Date(1942, 10, 27))\n * //=> 1940\n */\nexport default function getDecade(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n  var decade = Math.floor(year / 10) * 10\n  return decade\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getHours\n * @category Hour Helpers\n * @summary Get the hours of the given date.\n *\n * @description\n * Get the hours of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the hours of 29 February 2012 11:45:00:\n * var result = getHours(new Date(2012, 1, 29, 11, 45))\n * //=> 11\n */\nexport default function getHours(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var hours = date.getHours()\n  return hours\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getISODay\n * @category Weekday Helpers\n * @summary Get the day of the ISO week of the given date.\n *\n * @description\n * Get the day of the ISO week of the given date,\n * which is 7 for Sunday, 1 for Monday etc.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the ISO week is 26 February 2012?\n * var result = getISODay(new Date(2012, 1, 26))\n * //=> 7\n */\nexport default function getISODay(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var day = date.getDay()\n\n  if (day === 0) {\n    day = 7\n  }\n\n  return day\n}\n","import toDate from '../toDate/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\nimport startOfISOWeekYear from '../startOfISOWeekYear/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * var result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport default function getISOWeek(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var diff = startOfISOWeek(date).getTime() - startOfISOWeekYear(date).getTime()\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1\n}\n","import toDate from '../toDate/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `getISOYear` to `getISOWeekYear`.\n *   \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n *   This change makes the name consistent with\n *   locale-dependent week-numbering year helpers, e.g., `getWeekYear`.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * var result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport default function getISOWeekYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n\n  var fourthOfJanuaryOfNextYear = new Date(0)\n  fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4)\n  fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0)\n  var startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear)\n\n  var fourthOfJanuaryOfThisYear = new Date(0)\n  fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4)\n  fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0)\n  var startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear)\n\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year\n  } else {\n    return year - 1\n  }\n}\n","import startOfISOWeekYear from '../startOfISOWeekYear/index.js'\nimport addWeeks from '../addWeeks/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @name getISOWeeksInYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the number of weeks in an ISO week-numbering year of the given date.\n *\n * @description\n * Get the number of weeks in an ISO week-numbering year of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of ISO weeks in a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many weeks are in ISO week-numbering year 2015?\n * var result = getISOWeeksInYear(new Date(2015, 1, 11))\n * //=> 53\n */\nexport default function getISOWeeksInYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var thisYear = startOfISOWeekYear(dirtyDate)\n  var nextYear = startOfISOWeekYear(addWeeks(thisYear, 60))\n  var diff = nextYear.valueOf() - thisYear.valueOf()\n  // Round the number of weeks to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getMilliseconds\n * @category Millisecond Helpers\n * @summary Get the milliseconds of the given date.\n *\n * @description\n * Get the milliseconds of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the milliseconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the milliseconds of 29 February 2012 11:45:05.123:\n * var result = getMilliseconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 123\n */\nexport default function getMilliseconds(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var milliseconds = date.getMilliseconds()\n  return milliseconds\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getMinutes\n * @category Minute Helpers\n * @summary Get the minutes of the given date.\n *\n * @description\n * Get the minutes of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the minutes\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the minutes of 29 February 2012 11:45:05:\n * var result = getMinutes(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 45\n */\nexport default function getMinutes(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var minutes = date.getMinutes()\n  return minutes\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getMonth\n * @category Month Helpers\n * @summary Get the month of the given date.\n *\n * @description\n * Get the month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which month is 29 February 2012?\n * var result = getMonth(new Date(2012, 1, 29))\n * //=> 1\n */\nexport default function getMonth(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var month = date.getMonth()\n  return month\n}\n","import toDate from '../toDate/index.js'\n\nvar MILLISECONDS_IN_DAY = 24 * 60 * 60 * 1000\n\n/**\n * @name getOverlappingDaysInIntervals\n * @category Interval Helpers\n * @summary Get the number of days that overlap in two time intervals\n *\n * @description\n * Get the number of days that overlap in two time intervals\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `getOverlappingDaysInRanges` to `getOverlappingDaysInIntervals`.\n *   This change was made to mirror the use of the word \"interval\" in standard ISO 8601:2004 terminology:\n *\n *   ```\n *   2.1.3\n *   time interval\n *   part of the time axis limited by two instants\n *   ```\n *\n *   Also, this function now accepts an object with `start` and `end` properties\n *   instead of two arguments as an interval.\n *   This function now throws `RangeError` if the start of the interval is after its end\n *   or if any date in the interval is `Invalid Date`.\n *\n *   ```javascript\n *   // Before v2.0.0\n *\n *   getOverlappingDaysInRanges(\n *     new Date(2014, 0, 10), new Date(2014, 0, 20),\n *     new Date(2014, 0, 17), new Date(2014, 0, 21)\n *   )\n *\n *   // v2.0.0 onward\n *\n *   getOverlappingDaysInIntervals(\n *     { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *     { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }\n *   )\n *   ```\n *\n * @param {Interval} intervalLeft - the first interval to compare. See [Interval]{@link docs/Interval}\n * @param {Interval} intervalRight - the second interval to compare. See [Interval]{@link docs/Interval}\n * @returns {Number} the number of days that overlap in two time intervals\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For overlapping time intervals adds 1 for each started overlapping day:\n * getOverlappingDaysInIntervals(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }\n * )\n * //=> 3\n *\n * @example\n * // For non-overlapping time intervals returns 0:\n * getOverlappingDaysInIntervals(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 21), end: new Date(2014, 0, 22) }\n * )\n * //=> 0\n */\nexport default function getOverlappingDaysInIntervals(\n  dirtyIntervalLeft,\n  dirtyIntervalRight\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var intervalLeft = dirtyIntervalLeft || {}\n  var intervalRight = dirtyIntervalRight || {}\n  var leftStartTime = toDate(intervalLeft.start).getTime()\n  var leftEndTime = toDate(intervalLeft.end).getTime()\n  var rightStartTime = toDate(intervalRight.start).getTime()\n  var rightEndTime = toDate(intervalRight.end).getTime()\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(leftStartTime <= leftEndTime && rightStartTime <= rightEndTime)) {\n    throw new RangeError('Invalid interval')\n  }\n\n  var isOverlapping =\n    leftStartTime < rightEndTime && rightStartTime < leftEndTime\n\n  if (!isOverlapping) {\n    return 0\n  }\n\n  var overlapStartDate =\n    rightStartTime < leftStartTime ? leftStartTime : rightStartTime\n\n  var overlapEndDate = rightEndTime > leftEndTime ? leftEndTime : rightEndTime\n\n  var differenceInMs = overlapEndDate - overlapStartDate\n\n  return Math.ceil(differenceInMs / MILLISECONDS_IN_DAY)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getQuarter\n * @category Quarter Helpers\n * @summary Get the year quarter of the given date.\n *\n * @description\n * Get the year quarter of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which quarter is 2 July 2014?\n * var result = getQuarter(new Date(2014, 6, 2))\n * //=> 3\n */\nexport default function getQuarter(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var quarter = Math.floor(date.getMonth() / 3) + 1\n  return quarter\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getSeconds\n * @category Second Helpers\n * @summary Get the seconds of the given date.\n *\n * @description\n * Get the seconds of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the seconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the seconds of 29 February 2012 11:45:05.123:\n * var result = getSeconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 5\n */\nexport default function getSeconds(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var seconds = date.getSeconds()\n  return seconds\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getTime\n * @category Timestamp Helpers\n * @summary Get the milliseconds timestamp of the given date.\n *\n * @description\n * Get the milliseconds timestamp of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the timestamp\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05.123:\n * var result = getTime(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 1330515905123\n */\nexport default function getTime(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var timestamp = date.getTime()\n  return timestamp\n}\n","import getTime from '../getTime/index.js'\n\n/**\n * @name getUnixTime\n * @category Timestamp Helpers\n * @summary Get the seconds timestamp of the given date.\n *\n * @description\n * Get the seconds timestamp of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the timestamp\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05 CET:\n * var result = getUnixTime(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 1330512305\n */\nexport default function getUnixTime(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return Math.floor(getTime(dirtyDate) / 1000)\n}\n","import toDate from '../toDate/index.js'\nimport startOfWeek from '../startOfWeek/index.js'\nimport startOfWeekYear from '../startOfWeekYear/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Number} the week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * var result = getISOWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * var result = getISOWeek(new Date(2005, 0, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> 53\n */\n\nexport default function getWeek(dirtyDate, options) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var diff =\n    startOfWeek(date, options).getTime() -\n    startOfWeekYear(date, options).getTime()\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport getDate from '../getDate/index.js'\nimport startOfMonth from '../startOfMonth/index.js'\nimport getDay from '../getDay/index.js'\n\n/**\n * @name getWeekOfMonth\n * @category Week Helpers\n * @summary Get the week of the month of the given date.\n *\n * @description\n * Get the week of the month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Number} the week of month\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // Which week of the month is 9 November 2017?\n * var result = getWeekOfMonth(new Date(2017, 10, 9))\n * //=> 2\n */\nexport default function getWeekOfMonth(date, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeWeekStartsOn =\n    locale && locale.options && locale.options.weekStartsOn\n  var defaultWeekStartsOn =\n    localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n  var weekStartsOn =\n    options.weekStartsOn == null\n      ? defaultWeekStartsOn\n      : toInteger(options.weekStartsOn)\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n  }\n\n  var startWeekDay = getDay(startOfMonth(date))\n  var currentWeekDay = getDay(date)\n\n  var startWeekDayWithOptions =\n    startWeekDay < weekStartsOn ? 7 - weekStartsOn : startWeekDay\n  var diff = startWeekDayWithOptions > currentWeekDay ? 7 - weekStartsOn : 0\n\n  return Math.ceil((getDate(date) + diff) / 7)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport startOfWeek from '../startOfWeek/index.js'\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Number} the local week-numbering year\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * var result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * var result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * var result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport default function getWeekYear(dirtyDate, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeFirstWeekContainsDate =\n    locale && locale.options && locale.options.firstWeekContainsDate\n  var defaultFirstWeekContainsDate =\n    localeFirstWeekContainsDate == null\n      ? 1\n      : toInteger(localeFirstWeekContainsDate)\n  var firstWeekContainsDate =\n    options.firstWeekContainsDate == null\n      ? defaultFirstWeekContainsDate\n      : toInteger(options.firstWeekContainsDate)\n\n  // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError(\n      'firstWeekContainsDate must be between 1 and 7 inclusively'\n    )\n  }\n\n  var firstWeekOfNextYear = new Date(0)\n  firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate)\n  firstWeekOfNextYear.setHours(0, 0, 0, 0)\n  var startOfNextYear = startOfWeek(firstWeekOfNextYear, dirtyOptions)\n\n  var firstWeekOfThisYear = new Date(0)\n  firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate)\n  firstWeekOfThisYear.setHours(0, 0, 0, 0)\n  var startOfThisYear = startOfWeek(firstWeekOfThisYear, dirtyOptions)\n\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year\n  } else {\n    return year - 1\n  }\n}\n","import differenceInCalendarWeeks from '../differenceInCalendarWeeks/index.js'\nimport lastDayOfMonth from '../lastDayOfMonth/index.js'\nimport startOfMonth from '../startOfMonth/index.js'\n\n/**\n * @name getWeeksInMonth\n * @category Week Helpers\n * @summary Get the number of calendar weeks a month spans.\n *\n * @description\n * Get the number of calendar weeks the month in the given date spans.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Number} the number of calendar weeks\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // How many calendar weeks does February 2015 span?\n * var result = getWeeksInMonth(new Date(2015, 1, 8))\n * //=> 4\n *\n * @example\n * // If the week starts on Monday,\n * // how many calendar weeks does July 2017 span?\n * var result = getWeeksInMonth(new Date(2017, 6, 5), { weekStartsOn: 1 })\n * //=> 6\n */\nexport default function getWeeksInMonth(date, options) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return (\n    differenceInCalendarWeeks(\n      lastDayOfMonth(date),\n      startOfMonth(date),\n      options\n    ) + 1\n  )\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getYear\n * @category Year Helpers\n * @summary Get the year of the given date.\n *\n * @description\n * Get the year of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which year is 2 July 2014?\n * var result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */\nexport default function getYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n  return year\n}\n","// This file is generated automatically by `scripts/build/indices.js`. Please, don't change it.\n\nexport { default as addDays } from './addDays/index.js'\nexport { default as addHours } from './addHours/index.js'\nexport { default as addISOWeekYears } from './addISOWeekYears/index.js'\nexport { default as addMilliseconds } from './addMilliseconds/index.js'\nexport { default as addMinutes } from './addMinutes/index.js'\nexport { default as addMonths } from './addMonths/index.js'\nexport { default as addQuarters } from './addQuarters/index.js'\nexport { default as addSeconds } from './addSeconds/index.js'\nexport { default as addWeeks } from './addWeeks/index.js'\nexport { default as addYears } from './addYears/index.js'\nexport {\n  default as areIntervalsOverlapping\n} from './areIntervalsOverlapping/index.js'\nexport { default as closestIndexTo } from './closestIndexTo/index.js'\nexport { default as closestTo } from './closestTo/index.js'\nexport { default as compareAsc } from './compareAsc/index.js'\nexport { default as compareDesc } from './compareDesc/index.js'\nexport {\n  default as differenceInCalendarDays\n} from './differenceInCalendarDays/index.js'\nexport {\n  default as differenceInCalendarISOWeekYears\n} from './differenceInCalendarISOWeekYears/index.js'\nexport {\n  default as differenceInCalendarISOWeeks\n} from './differenceInCalendarISOWeeks/index.js'\nexport {\n  default as differenceInCalendarMonths\n} from './differenceInCalendarMonths/index.js'\nexport {\n  default as differenceInCalendarQuarters\n} from './differenceInCalendarQuarters/index.js'\nexport {\n  default as differenceInCalendarWeeks\n} from './differenceInCalendarWeeks/index.js'\nexport {\n  default as differenceInCalendarYears\n} from './differenceInCalendarYears/index.js'\nexport { default as differenceInDays } from './differenceInDays/index.js'\nexport { default as differenceInHours } from './differenceInHours/index.js'\nexport {\n  default as differenceInISOWeekYears\n} from './differenceInISOWeekYears/index.js'\nexport {\n  default as differenceInMilliseconds\n} from './differenceInMilliseconds/index.js'\nexport { default as differenceInMinutes } from './differenceInMinutes/index.js'\nexport { default as differenceInMonths } from './differenceInMonths/index.js'\nexport {\n  default as differenceInQuarters\n} from './differenceInQuarters/index.js'\nexport { default as differenceInSeconds } from './differenceInSeconds/index.js'\nexport { default as differenceInWeeks } from './differenceInWeeks/index.js'\nexport { default as differenceInYears } from './differenceInYears/index.js'\nexport { default as eachDayOfInterval } from './eachDayOfInterval/index.js'\nexport { default as eachWeekOfInterval } from './eachWeekOfInterval/index.js'\nexport {\n  default as eachWeekendOfInterval\n} from './eachWeekendOfInterval/index.js'\nexport { default as eachWeekendOfMonth } from './eachWeekendOfMonth/index.js'\nexport { default as eachWeekendOfYear } from './eachWeekendOfYear/index.js'\nexport { default as endOfDay } from './endOfDay/index.js'\nexport { default as endOfDecade } from './endOfDecade/index.js'\nexport { default as endOfHour } from './endOfHour/index.js'\nexport { default as endOfISOWeek } from './endOfISOWeek/index.js'\nexport { default as endOfISOWeekYear } from './endOfISOWeekYear/index.js'\nexport { default as endOfMinute } from './endOfMinute/index.js'\nexport { default as endOfMonth } from './endOfMonth/index.js'\nexport { default as endOfQuarter } from './endOfQuarter/index.js'\nexport { default as endOfSecond } from './endOfSecond/index.js'\nexport { default as endOfWeek } from './endOfWeek/index.js'\nexport { default as endOfYear } from './endOfYear/index.js'\nexport { default as format } from './format/index.js'\nexport { default as formatDistance } from './formatDistance/index.js'\nexport {\n  default as formatDistanceStrict\n} from './formatDistanceStrict/index.js'\nexport { default as formatRelative } from './formatRelative/index.js'\nexport { default as fromUnixTime } from './fromUnixTime/index.js'\nexport { default as getDate } from './getDate/index.js'\nexport { default as getDay } from './getDay/index.js'\nexport { default as getDayOfYear } from './getDayOfYear/index.js'\nexport { default as getDaysInMonth } from './getDaysInMonth/index.js'\nexport { default as getDaysInYear } from './getDaysInYear/index.js'\nexport { default as getDecade } from './getDecade/index.js'\nexport { default as getHours } from './getHours/index.js'\nexport { default as getISODay } from './getISODay/index.js'\nexport { default as getISOWeek } from './getISOWeek/index.js'\nexport { default as getISOWeekYear } from './getISOWeekYear/index.js'\nexport { default as getISOWeeksInYear } from './getISOWeeksInYear/index.js'\nexport { default as getMilliseconds } from './getMilliseconds/index.js'\nexport { default as getMinutes } from './getMinutes/index.js'\nexport { default as getMonth } from './getMonth/index.js'\nexport {\n  default as getOverlappingDaysInIntervals\n} from './getOverlappingDaysInIntervals/index.js'\nexport { default as getQuarter } from './getQuarter/index.js'\nexport { default as getSeconds } from './getSeconds/index.js'\nexport { default as getTime } from './getTime/index.js'\nexport { default as getUnixTime } from './getUnixTime/index.js'\nexport { default as getWeek } from './getWeek/index.js'\nexport { default as getWeekOfMonth } from './getWeekOfMonth/index.js'\nexport { default as getWeekYear } from './getWeekYear/index.js'\nexport { default as getWeeksInMonth } from './getWeeksInMonth/index.js'\nexport { default as getYear } from './getYear/index.js'\nexport { default as isAfter } from './isAfter/index.js'\nexport { default as isBefore } from './isBefore/index.js'\nexport { default as isDate } from './isDate/index.js'\nexport { default as isEqual } from './isEqual/index.js'\nexport { default as isFirstDayOfMonth } from './isFirstDayOfMonth/index.js'\nexport { default as isFriday } from './isFriday/index.js'\nexport { default as isLastDayOfMonth } from './isLastDayOfMonth/index.js'\nexport { default as isLeapYear } from './isLeapYear/index.js'\nexport { default as isMonday } from './isMonday/index.js'\nexport { default as isSameDay } from './isSameDay/index.js'\nexport { default as isSameHour } from './isSameHour/index.js'\nexport { default as isSameISOWeek } from './isSameISOWeek/index.js'\nexport { default as isSameISOWeekYear } from './isSameISOWeekYear/index.js'\nexport { default as isSameMinute } from './isSameMinute/index.js'\nexport { default as isSameMonth } from './isSameMonth/index.js'\nexport { default as isSameQuarter } from './isSameQuarter/index.js'\nexport { default as isSameSecond } from './isSameSecond/index.js'\nexport { default as isSameWeek } from './isSameWeek/index.js'\nexport { default as isSameYear } from './isSameYear/index.js'\nexport { default as isSaturday } from './isSaturday/index.js'\nexport { default as isSunday } from './isSunday/index.js'\nexport { default as isThursday } from './isThursday/index.js'\nexport { default as isTuesday } from './isTuesday/index.js'\nexport { default as isValid } from './isValid/index.js'\nexport { default as isWednesday } from './isWednesday/index.js'\nexport { default as isWeekend } from './isWeekend/index.js'\nexport { default as isWithinInterval } from './isWithinInterval/index.js'\nexport { default as lastDayOfDecade } from './lastDayOfDecade/index.js'\nexport { default as lastDayOfISOWeek } from './lastDayOfISOWeek/index.js'\nexport {\n  default as lastDayOfISOWeekYear\n} from './lastDayOfISOWeekYear/index.js'\nexport { default as lastDayOfMonth } from './lastDayOfMonth/index.js'\nexport { default as lastDayOfQuarter } from './lastDayOfQuarter/index.js'\nexport { default as lastDayOfWeek } from './lastDayOfWeek/index.js'\nexport { default as lastDayOfYear } from './lastDayOfYear/index.js'\nexport { default as lightFormat } from './lightFormat/index.js'\nexport { default as max } from './max/index.js'\nexport { default as min } from './min/index.js'\nexport { default as parse } from './parse/index.js'\nexport { default as parseISO } from './parseISO/index.js'\nexport {\n  default as roundToNearestMinutes\n} from './roundToNearestMinutes/index.js'\nexport { default as setDate } from './setDate/index.js'\nexport { default as setDay } from './setDay/index.js'\nexport { default as setDayOfYear } from './setDayOfYear/index.js'\nexport { default as setHours } from './setHours/index.js'\nexport { default as setISODay } from './setISODay/index.js'\nexport { default as setISOWeek } from './setISOWeek/index.js'\nexport { default as setISOWeekYear } from './setISOWeekYear/index.js'\nexport { default as setMilliseconds } from './setMilliseconds/index.js'\nexport { default as setMinutes } from './setMinutes/index.js'\nexport { default as setMonth } from './setMonth/index.js'\nexport { default as setQuarter } from './setQuarter/index.js'\nexport { default as setSeconds } from './setSeconds/index.js'\nexport { default as setWeek } from './setWeek/index.js'\nexport { default as setWeekYear } from './setWeekYear/index.js'\nexport { default as setYear } from './setYear/index.js'\nexport { default as startOfDay } from './startOfDay/index.js'\nexport { default as startOfDecade } from './startOfDecade/index.js'\nexport { default as startOfHour } from './startOfHour/index.js'\nexport { default as startOfISOWeek } from './startOfISOWeek/index.js'\nexport { default as startOfISOWeekYear } from './startOfISOWeekYear/index.js'\nexport { default as startOfMinute } from './startOfMinute/index.js'\nexport { default as startOfMonth } from './startOfMonth/index.js'\nexport { default as startOfQuarter } from './startOfQuarter/index.js'\nexport { default as startOfSecond } from './startOfSecond/index.js'\nexport { default as startOfWeek } from './startOfWeek/index.js'\nexport { default as startOfWeekYear } from './startOfWeekYear/index.js'\nexport { default as startOfYear } from './startOfYear/index.js'\nexport { default as subDays } from './subDays/index.js'\nexport { default as subHours } from './subHours/index.js'\nexport { default as subISOWeekYears } from './subISOWeekYears/index.js'\nexport { default as subMilliseconds } from './subMilliseconds/index.js'\nexport { default as subMinutes } from './subMinutes/index.js'\nexport { default as subMonths } from './subMonths/index.js'\nexport { default as subQuarters } from './subQuarters/index.js'\nexport { default as subSeconds } from './subSeconds/index.js'\nexport { default as subWeeks } from './subWeeks/index.js'\nexport { default as subYears } from './subYears/index.js'\nexport { default as toDate } from './toDate/index.js'\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date that should be after the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is after the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * var result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */\nexport default function isAfter(dirtyDate, dirtyDateToCompare) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var dateToCompare = toDate(dirtyDateToCompare)\n  return date.getTime() > dateToCompare.getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * var result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\nexport default function isBefore(dirtyDate, dirtyDateToCompare) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var dateToCompare = toDate(dirtyDateToCompare)\n  return date.getTime() < dateToCompare.getTime()\n}\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {*} value - the value to check\n * @returns {boolean} true if the given value is a date\n * @throws {TypeError} 1 arguments required\n *\n * @example\n * // For a valid date:\n * var result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * var result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * var result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * var result = isDate({})\n * //=> false\n */\nexport default function isDate(value) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return (\n    value instanceof Date ||\n    (typeof value === 'object' &&\n      Object.prototype.toString.call(value) === '[object Date]')\n  )\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isEqual\n * @category Common Helpers\n * @summary Are the given dates equal?\n *\n * @description\n * Are the given dates equal?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Boolean} the dates are equal\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 July 2014 06:30:45.000 and 2 July 2014 06:30:45.500 equal?\n * var result = isEqual(\n *   new Date(2014, 6, 2, 6, 30, 45, 0),\n *   new Date(2014, 6, 2, 6, 30, 45, 500)\n * )\n * //=> false\n */\nexport default function isEqual(dirtyLeftDate, dirtyRightDate) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyLeftDate)\n  var dateRight = toDate(dirtyRightDate)\n  return dateLeft.getTime() === dateRight.getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isFirstDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the first day of a month?\n *\n * @description\n * Is the given date the first day of a month?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is the first day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 1 September 2014 the first day of a month?\n * var result = isFirstDayOfMonth(new Date(2014, 8, 1))\n * //=> true\n */\nexport default function isFirstDayOfMonth(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return toDate(dirtyDate).getDate() === 1\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isFriday\n * @category Weekday Helpers\n * @summary Is the given date Friday?\n *\n * @description\n * Is the given date Friday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Friday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 26 September 2014 Friday?\n * var result = isFriday(new Date(2014, 8, 26))\n * //=> true\n */\nexport default function isFriday(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return toDate(dirtyDate).getDay() === 5\n}\n","import toDate from '../toDate/index.js'\nimport endOfDay from '../endOfDay/index.js'\nimport endOfMonth from '../endOfMonth/index.js'\n\n/**\n * @name isLastDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the last day of a month?\n *\n * @description\n * Is the given date the last day of a month?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 28 February 2014 the last day of a month?\n * var result = isLastDayOfMonth(new Date(2014, 1, 28))\n * //=> true\n */\nexport default function isLastDayOfMonth(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  return endOfDay(date).getTime() === endOfMonth(date).getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isLeapYear\n * @category Year Helpers\n * @summary Is the given date in the leap year?\n *\n * @description\n * Is the given date in the leap year?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in the leap year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 1 September 2012 in the leap year?\n * var result = isLeapYear(new Date(2012, 8, 1))\n * //=> true\n */\nexport default function isLeapYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n  return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isMonday\n * @category Weekday Helpers\n * @summary Is the given date Monday?\n *\n * @description\n * Is the given date Monday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Monday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 22 September 2014 Monday?\n * var result = isMonday(new Date(2014, 8, 22))\n * //=> true\n */\nexport default function isMonday(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return toDate(dirtyDate).getDay() === 1\n}\n","import startOfDay from '../startOfDay/index.js'\n\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day?\n *\n * @description\n * Are the given dates in the same day?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same day\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * var result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n */\nexport default function isSameDay(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeftStartOfDay = startOfDay(dirtyDateLeft)\n  var dateRightStartOfDay = startOfDay(dirtyDateRight)\n\n  return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime()\n}\n","import startOfHour from '../startOfHour/index.js'\n\n/**\n * @name isSameHour\n * @category Hour Helpers\n * @summary Are the given dates in the same hour?\n *\n * @description\n * Are the given dates in the same hour?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same hour\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:00:00 and 4 September 06:30:00 in the same hour?\n * var result = isSameHour(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 6, 30))\n * //=> true\n */\nexport default function isSameHour(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeftStartOfHour = startOfHour(dirtyDateLeft)\n  var dateRightStartOfHour = startOfHour(dirtyDateRight)\n\n  return dateLeftStartOfHour.getTime() === dateRightStartOfHour.getTime()\n}\n","import isSameWeek from '../isSameWeek/index.js'\n\n/**\n * @name isSameISOWeek\n * @category ISO Week Helpers\n * @summary Are the given dates in the same ISO week?\n *\n * @description\n * Are the given dates in the same ISO week?\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same ISO week\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 1 September 2014 and 7 September 2014 in the same ISO week?\n * var result = isSameISOWeek(new Date(2014, 8, 1), new Date(2014, 8, 7))\n * //=> true\n */\nexport default function isSameISOWeek(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return isSameWeek(dirtyDateLeft, dirtyDateRight, { weekStartsOn: 1 })\n}\n","import startOfISOWeekYear from '../startOfISOWeekYear/index.js'\n\n/**\n * @name isSameISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Are the given dates in the same ISO week-numbering year?\n *\n * @description\n * Are the given dates in the same ISO week-numbering year?\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `isSameISOYear` to `isSameISOWeekYear`.\n *   \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n *   This change makes the name consistent with\n *   locale-dependent week-numbering year helpers, e.g., `getWeekYear`.\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same ISO week-numbering year\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 29 December 2003 and 2 January 2005 in the same ISO week-numbering year?\n * var result = isSameISOWeekYear(new Date(2003, 11, 29), new Date(2005, 0, 2))\n * //=> true\n */\nexport default function isSameISOWeekYear(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeftStartOfYear = startOfISOWeekYear(dirtyDateLeft)\n  var dateRightStartOfYear = startOfISOWeekYear(dirtyDateRight)\n\n  return dateLeftStartOfYear.getTime() === dateRightStartOfYear.getTime()\n}\n","import startOfMinute from '../startOfMinute/index.js'\n\n/**\n * @name isSameMinute\n * @category Minute Helpers\n * @summary Are the given dates in the same minute?\n *\n * @description\n * Are the given dates in the same minute?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same minute\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:30:00 and 4 September 2014 06:30:15\n * // in the same minute?\n * var result = isSameMinute(\n *   new Date(2014, 8, 4, 6, 30),\n *   new Date(2014, 8, 4, 6, 30, 15)\n * )\n * //=> true\n */\nexport default function isSameMinute(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeftStartOfMinute = startOfMinute(dirtyDateLeft)\n  var dateRightStartOfMinute = startOfMinute(dirtyDateRight)\n\n  return dateLeftStartOfMinute.getTime() === dateRightStartOfMinute.getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month?\n *\n * @description\n * Are the given dates in the same month?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same month\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * var result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */\nexport default function isSameMonth(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n  return (\n    dateLeft.getFullYear() === dateRight.getFullYear() &&\n    dateLeft.getMonth() === dateRight.getMonth()\n  )\n}\n","import startOfQuarter from '../startOfQuarter/index.js'\n\n/**\n * @name isSameQuarter\n * @category Quarter Helpers\n * @summary Are the given dates in the same year quarter?\n *\n * @description\n * Are the given dates in the same year quarter?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same quarter\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 1 January 2014 and 8 March 2014 in the same quarter?\n * var result = isSameQuarter(new Date(2014, 0, 1), new Date(2014, 2, 8))\n * //=> true\n */\nexport default function isSameQuarter(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeftStartOfQuarter = startOfQuarter(dirtyDateLeft)\n  var dateRightStartOfQuarter = startOfQuarter(dirtyDateRight)\n\n  return dateLeftStartOfQuarter.getTime() === dateRightStartOfQuarter.getTime()\n}\n","import startOfSecond from '../startOfSecond/index.js'\n\n/**\n * @name isSameSecond\n * @category Second Helpers\n * @summary Are the given dates in the same second?\n *\n * @description\n * Are the given dates in the same second?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same second\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:30:15.000 and 4 September 2014 06:30.15.500\n * // in the same second?\n * var result = isSameSecond(\n *   new Date(2014, 8, 4, 6, 30, 15),\n *   new Date(2014, 8, 4, 6, 30, 15, 500)\n * )\n * //=> true\n */\nexport default function isSameSecond(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeftStartOfSecond = startOfSecond(dirtyDateLeft)\n  var dateRightStartOfSecond = startOfSecond(dirtyDateRight)\n\n  return dateLeftStartOfSecond.getTime() === dateRightStartOfSecond.getTime()\n}\n","import startOfWeek from '../startOfWeek/index.js'\n\n/**\n * @name isSameWeek\n * @category Week Helpers\n * @summary Are the given dates in the same week?\n *\n * @description\n * Are the given dates in the same week?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Boolean} the dates are in the same week\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // Are 31 August 2014 and 4 September 2014 in the same week?\n * var result = isSameWeek(new Date(2014, 7, 31), new Date(2014, 8, 4))\n * //=> true\n *\n * @example\n * // If week starts with Monday,\n * // are 31 August 2014 and 4 September 2014 in the same week?\n * var result = isSameWeek(new Date(2014, 7, 31), new Date(2014, 8, 4), {\n *   weekStartsOn: 1\n * })\n * //=> false\n */\nexport default function isSameWeek(\n  dirtyDateLeft,\n  dirtyDateRight,\n  dirtyOptions\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeftStartOfWeek = startOfWeek(dirtyDateLeft, dirtyOptions)\n  var dateRightStartOfWeek = startOfWeek(dirtyDateRight, dirtyOptions)\n\n  return dateLeftStartOfWeek.getTime() === dateRightStartOfWeek.getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isSameYear\n * @category Year Helpers\n * @summary Are the given dates in the same year?\n *\n * @description\n * Are the given dates in the same year?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same year\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same year?\n * var result = isSameYear(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */\nexport default function isSameYear(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n  return dateLeft.getFullYear() === dateRight.getFullYear()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isSaturday\n * @category Weekday Helpers\n * @summary Is the given date Saturday?\n *\n * @description\n * Is the given date Saturday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Saturday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 27 September 2014 Saturday?\n * var result = isSaturday(new Date(2014, 8, 27))\n * //=> true\n */\nexport default function isSaturday(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return toDate(dirtyDate).getDay() === 6\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isSunday\n * @category Weekday Helpers\n * @summary Is the given date Sunday?\n *\n * @description\n * Is the given date Sunday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Sunday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 21 September 2014 Sunday?\n * var result = isSunday(new Date(2014, 8, 21))\n * //=> true\n */\nexport default function isSunday(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return toDate(dirtyDate).getDay() === 0\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isThursday\n * @category Weekday Helpers\n * @summary Is the given date Thursday?\n *\n * @description\n * Is the given date Thursday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Thursday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 25 September 2014 Thursday?\n * var result = isThursday(new Date(2014, 8, 25))\n * //=> true\n */\nexport default function isThursday(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return toDate(dirtyDate).getDay() === 4\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isTuesday\n * @category Weekday Helpers\n * @summary Is the given date Tuesday?\n *\n * @description\n * Is the given date Tuesday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Tuesday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 23 September 2014 Tuesday?\n * var result = isTuesday(new Date(2014, 8, 23))\n * //=> true\n */\nexport default function isTuesday(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return toDate(dirtyDate).getDay() === 2\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now `isValid` doesn't throw an exception\n *   if the first argument is not an instance of Date.\n *   Instead, argument is converted beforehand using `toDate`.\n *\n *   Examples:\n *\n *   | `isValid` argument        | Before v2.0.0 | v2.0.0 onward |\n *   |---------------------------|---------------|---------------|\n *   | `new Date()`              | `true`        | `true`        |\n *   | `new Date('2016-01-01')`  | `true`        | `true`        |\n *   | `new Date('')`            | `false`       | `false`       |\n *   | `new Date(1488370835081)` | `true`        | `true`        |\n *   | `new Date(NaN)`           | `false`       | `false`       |\n *   | `'2016-01-01'`            | `TypeError`   | `true`        |\n *   | `''`                      | `TypeError`   | `false`       |\n *   | `1488370835081`           | `TypeError`   | `true`        |\n *   | `NaN`                     | `TypeError`   | `false`       |\n *\n *   We introduce this change to make *date-fns* consistent with ECMAScript behavior\n *   that try to coerce arguments to the expected type\n *   (which is also the case with other *date-fns* functions).\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * var result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * var result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * var result = isValid(new Date(''))\n * //=> false\n */\nexport default function isValid(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  return !isNaN(date)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isWednesday\n * @category Weekday Helpers\n * @summary Is the given date Wednesday?\n *\n * @description\n * Is the given date Wednesday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Wednesday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 24 September 2014 Wednesday?\n * var result = isWednesday(new Date(2014, 8, 24))\n * //=> true\n */\nexport default function isWednesday(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return toDate(dirtyDate).getDay() === 3\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isWeekend\n * @category Weekday Helpers\n * @summary Does the given date fall on a weekend?\n *\n * @description\n * Does the given date fall on a weekend?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date falls on a weekend\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Does 5 October 2014 fall on a weekend?\n * var result = isWeekend(new Date(2014, 9, 5))\n * //=> true\n */\nexport default function isWeekend(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var day = date.getDay()\n  return day === 0 || day === 6\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isWithinInterval\n * @category Interval Helpers\n * @summary Is the given date within the interval?\n *\n * @description\n * Is the given date within the interval?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `isWithinRange` to `isWithinInterval`.\n *   This change was made to mirror the use of the word \"interval\" in standard ISO 8601:2004 terminology:\n *\n *   ```\n *   2.1.3\n *   time interval\n *   part of the time axis limited by two instants\n *   ```\n *\n *   Also, this function now accepts an object with `start` and `end` properties\n *   instead of two arguments as an interval.\n *   This function now throws `RangeError` if the start of the interval is after its end\n *   or if any date in the interval is `Invalid Date`.\n *\n *   ```javascript\n *   // Before v2.0.0\n *\n *   isWithinRange(\n *     new Date(2014, 0, 3),\n *     new Date(2014, 0, 1), new Date(2014, 0, 7)\n *   )\n *\n *   // v2.0.0 onward\n *\n *   isWithinInterval(\n *     new Date(2014, 0, 3),\n *     { start: new Date(2014, 0, 1), end: new Date(2014, 0, 7) }\n *   )\n *   ```\n *\n * @param {Date|Number} date - the date to check\n * @param {Interval} interval - the interval to check\n * @returns {Boolean} the date is within the interval\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For the date within the interval:\n * isWithinInterval(new Date(2014, 0, 3), {\n *   start: new Date(2014, 0, 1),\n *   end: new Date(2014, 0, 7)\n * })\n * //=> true\n *\n * @example\n * // For the date outside of the interval:\n * isWithinInterval(new Date(2014, 0, 10), {\n *   start: new Date(2014, 0, 1),\n *   end: new Date(2014, 0, 7)\n * })\n * //=> false\n */\nexport default function isWithinInterval(dirtyDate, dirtyInterval) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var interval = dirtyInterval || {}\n  var time = toDate(dirtyDate).getTime()\n  var startTime = toDate(interval.start).getTime()\n  var endTime = toDate(interval.end).getTime()\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(startTime <= endTime)) {\n    throw new RangeError('Invalid interval')\n  }\n\n  return time >= startTime && time <= endTime\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name lastDayOfDecade\n * @category Decade Helpers\n * @summary Return the last day of a decade for the given date.\n *\n * @description\n * Return the last day of a decade for the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of a decade\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of a decade for 21 December 2012 21:12:00:\n * var result = lastDayOfDecade(new Date(2012, 11, 21, 21, 12, 00))\n * //=> Wed Dec 31 2019 00:00:00\n */\nexport default function lastDayOfDecade(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n  var decade = 9 + Math.floor(year / 10) * 10\n  date.setFullYear(decade + 1, 0, 0)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n","import lastDayOfWeek from '../lastDayOfWeek/index.js'\n\n/**\n * @name lastDayOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the last day of an ISO week for the given date.\n *\n * @description\n * Return the last day of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of an ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of an ISO week for 2 September 2014 11:55:00:\n * var result = lastDayOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function lastDayOfISOWeek(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return lastDayOfWeek(dirtyDate, { weekStartsOn: 1 })\n}\n","import getISOWeekYear from '../getISOWeekYear/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\n\n/**\n * @name lastDayOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the last day of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the last day of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `lastDayOfISOYear` to `lastDayOfISOWeekYear`.\n *   \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n *   This change makes the name consistent with\n *   locale-dependent week-numbering year helpers, e.g., `getWeekYear`.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of an ISO week-numbering year for 2 July 2005:\n * var result = lastDayOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Sun Jan 01 2006 00:00:00\n */\nexport default function lastDayOfISOWeekYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var year = getISOWeekYear(dirtyDate)\n  var fourthOfJanuary = new Date(0)\n  fourthOfJanuary.setFullYear(year + 1, 0, 4)\n  fourthOfJanuary.setHours(0, 0, 0, 0)\n  var date = startOfISOWeek(fourthOfJanuary)\n  date.setDate(date.getDate() - 1)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name lastDayOfMonth\n * @category Month Helpers\n * @summary Return the last day of a month for the given date.\n *\n * @description\n * Return the last day of a month for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of a month for 2 September 2014 11:55:00:\n * var result = lastDayOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport default function lastDayOfMonth(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var month = date.getMonth()\n  date.setFullYear(date.getFullYear(), month + 1, 0)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name lastDayOfQuarter\n * @category Quarter Helpers\n * @summary Return the last day of a year quarter for the given date.\n *\n * @description\n * Return the last day of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @returns {Date} the last day of a quarter\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // The last day of a quarter for 2 September 2014 11:55:00:\n * var result = lastDayOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport default function lastDayOfQuarter(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var currentMonth = date.getMonth()\n  var month = currentMonth - (currentMonth % 3) + 3\n  date.setMonth(month, 0)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name lastDayOfWeek\n * @category Week Helpers\n * @summary Return the last day of a week for the given date.\n *\n * @description\n * Return the last day of a week for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Date} the last day of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The last day of a week for 2 September 2014 11:55:00:\n * var result = lastDayOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the last day of the week for 2 September 2014 11:55:00:\n * var result = lastDayOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function lastDayOfWeek(dirtyDate, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeWeekStartsOn =\n    locale && locale.options && locale.options.weekStartsOn\n  var defaultWeekStartsOn =\n    localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n  var weekStartsOn =\n    options.weekStartsOn == null\n      ? defaultWeekStartsOn\n      : toInteger(options.weekStartsOn)\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6')\n  }\n\n  var date = toDate(dirtyDate)\n  var day = date.getDay()\n  var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn)\n\n  date.setHours(0, 0, 0, 0)\n  date.setDate(date.getDate() + diff)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name lastDayOfYear\n * @category Year Helpers\n * @summary Return the last day of a year for the given date.\n *\n * @description\n * Return the last day of a year for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of a year for 2 September 2014 11:55:00:\n * var result = lastDayOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Dec 31 2014 00:00:00\n */\nexport default function lastDayOfYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n  date.setFullYear(year + 1, 0, 0)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n","import toDate from '../toDate/index.js'\nimport formatters from '../_lib/format/lightFormatters/index.js'\nimport getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport isValid from '../isValid/index.js'\nimport subMilliseconds from '../subMilliseconds/index.js'\n\n// This RegExp consists of three parts separated by `|`:\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /(\\w)\\1*|''|'(''|[^'])+('|$)|./g\n\nvar escapedStringRegExp = /^'(.*?)'?$/\nvar doubleQuoteRegExp = /''/g\n\n/**\n * @name lightFormat\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. Unlike `format`,\n * `lightFormat` doesn't use locales and outputs date using the most popular tokens.\n *\n * > ⚠️ Please note that the `lightFormat` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit                            | Pattern | Result examples                   |\n * |---------------------------------|---------|-----------------------------------|\n * | AM, PM                          | a..aaa  | AM, PM                            |\n * |                                 | aaaa    | a.m., p.m.                        |\n * |                                 | aaaaa   | a, p                              |\n * | Calendar year                   | y       | 44, 1, 1900, 2017                 |\n * |                                 | yy      | 44, 01, 00, 17                    |\n * |                                 | yyy     | 044, 001, 000, 017                |\n * |                                 | yyyy    | 0044, 0001, 1900, 2017            |\n * | Month (formatting)              | M       | 1, 2, ..., 12                     |\n * |                                 | MM      | 01, 02, ..., 12                   |\n * | Day of month                    | d       | 1, 2, ..., 31                     |\n * |                                 | dd      | 01, 02, ..., 31                   |\n * | Hour [1-12]                     | h       | 1, 2, ..., 11, 12                 |\n * |                                 | hh      | 01, 02, ..., 11, 12               |\n * | Hour [0-23]                     | H       | 0, 1, 2, ..., 23                  |\n * |                                 | HH      | 00, 01, 02, ..., 23               |\n * | Minute                          | m       | 0, 1, ..., 59                     |\n * |                                 | mm      | 00, 01, ..., 59                   |\n * | Second                          | s       | 0, 1, ..., 59                     |\n * |                                 | ss      | 00, 01, ..., 59                   |\n * | Timezone (ISO-8601 w/ Z)        | X       | -08, +0530, Z                     |\n * |                                 | XX      | -0800, +0530, Z                   |\n * |                                 | XXX     | -08:00, +05:30, Z                 |\n * |                                 | XXXX    | -0800, +0530, Z, +123456          |\n * |                                 | XXXXX   | -08:00, +05:30, Z, +12:34:56      |\n * | Timezone (ISO-8601 w/o Z)       | x       | -08, +0530, +00                   |\n * |                                 | xx      | -0800, +0530, +0000               |\n * |                                 | xxx     | -08:00, +05:30, +00:00            |\n * |                                 | xxxx    | -0800, +0530, +0000, +123456      |\n * |                                 | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * var result = format(new Date(2014, 1, 11), 'yyyy-MM-dd')\n * //=> '1987-02-11'\n */\nexport default function lightFormat(dirtyDate, dirtyFormatStr) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var formatStr = String(dirtyFormatStr)\n\n  var originalDate = toDate(dirtyDate)\n\n  if (!isValid(originalDate)) {\n    throw new RangeError('Invalid time value')\n  }\n\n  // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n  // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n  // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n  var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate)\n  var utcDate = subMilliseconds(originalDate, timezoneOffset)\n\n  var result = formatStr\n    .match(formattingTokensRegExp)\n    .map(function(substring) {\n      // Replace two single quote characters with one single quote character\n      if (substring === \"''\") {\n        return \"'\"\n      }\n\n      var firstCharacter = substring[0]\n      if (firstCharacter === \"'\") {\n        return cleanEscapedString(substring)\n      }\n\n      var formatter = formatters[firstCharacter]\n      if (formatter) {\n        return formatter(utcDate, substring, null, {})\n      }\n\n      return substring\n    })\n    .join('')\n\n  return result\n}\n\nfunction cleanEscapedString(input) {\n  return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\")\n}\n","export default function buildFormatLongFn (args) {\n  return function (dirtyOptions) {\n    var options = dirtyOptions || {}\n    var width = options.width ? String(options.width) : args.defaultWidth\n    var format = args.formats[width] || args.formats[args.defaultWidth]\n    return format\n  }\n}\n","export default function buildLocalizeFn (args) {\n  return function (dirtyIndex, dirtyOptions) {\n    var options = dirtyOptions || {}\n    var width = options.width ? String(options.width) : args.defaultWidth\n    var context = options.context ? String(options.context) : 'standalone'\n\n    var valuesArray\n    if (context === 'formatting' && args.formattingValues) {\n      valuesArray = args.formattingValues[width] || args.formattingValues[args.defaultFormattingWidth]\n    } else {\n      valuesArray = args.values[width] || args.values[args.defaultWidth]\n    }\n    var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex\n    return valuesArray[index]\n  }\n}\n","export default function buildMatchFn (args) {\n  return function (dirtyString, dirtyOptions) {\n    var string = String(dirtyString)\n    var options = dirtyOptions || {}\n    var width = options.width\n\n    var matchPattern = (width && args.matchPatterns[width]) || args.matchPatterns[args.defaultMatchWidth]\n    var matchResult = string.match(matchPattern)\n\n    if (!matchResult) {\n      return null\n    }\n    var matchedString = matchResult[0]\n\n    var parsePatterns = (width && args.parsePatterns[width]) || args.parsePatterns[args.defaultParseWidth]\n\n    var value\n    if (Object.prototype.toString.call(parsePatterns) === '[object Array]') {\n      value = parsePatterns.findIndex(function (pattern) {\n        return pattern.test(string)\n      })\n    } else {\n      value = findKey(parsePatterns, function (pattern) {\n        return pattern.test(string)\n      })\n    }\n\n    value = args.valueCallback ? args.valueCallback(value) : value\n    value = options.valueCallback ? options.valueCallback(value) : value\n\n    return {\n      value: value,\n      rest: string.slice(matchedString.length)\n    }\n  }\n}\n\nfunction findKey (object, predicate) {\n  for (var key in object) {\n    if (object.hasOwnProperty(key) && predicate(object[key])) {\n      return key\n    }\n  }\n}\n","export default function buildMatchPatternFn (args) {\n  return function (dirtyString, dirtyOptions) {\n    var string = String(dirtyString)\n    var options = dirtyOptions || {}\n\n    var matchResult = string.match(args.matchPattern)\n    if (!matchResult) {\n      return null\n    }\n    var matchedString = matchResult[0]\n\n    var parseResult = string.match(args.parsePattern)\n    if (!parseResult) {\n      return null\n    }\n    var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]\n    value = options.valueCallback ? options.valueCallback(value) : value\n\n    return {\n      value: value,\n      rest: string.slice(matchedString.length)\n    }\n  }\n}\n","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'less than a second',\n    other: 'less than {{count}} seconds'\n  },\n\n  xSeconds: {\n    one: '1 second',\n    other: '{{count}} seconds'\n  },\n\n  halfAMinute: 'half a minute',\n\n  lessThanXMinutes: {\n    one: 'less than a minute',\n    other: 'less than {{count}} minutes'\n  },\n\n  xMinutes: {\n    one: '1 minute',\n    other: '{{count}} minutes'\n  },\n\n  aboutXHours: {\n    one: 'about 1 hour',\n    other: 'about {{count}} hours'\n  },\n\n  xHours: {\n    one: '1 hour',\n    other: '{{count}} hours'\n  },\n\n  xDays: {\n    one: '1 day',\n    other: '{{count}} days'\n  },\n\n  aboutXMonths: {\n    one: 'about 1 month',\n    other: 'about {{count}} months'\n  },\n\n  xMonths: {\n    one: '1 month',\n    other: '{{count}} months'\n  },\n\n  aboutXYears: {\n    one: 'about 1 year',\n    other: 'about {{count}} years'\n  },\n\n  xYears: {\n    one: '1 year',\n    other: '{{count}} years'\n  },\n\n  overXYears: {\n    one: 'over 1 year',\n    other: 'over {{count}} years'\n  },\n\n  almostXYears: {\n    one: 'almost 1 year',\n    other: 'almost {{count}} years'\n  }\n}\n\nexport default function formatDistance (token, count, options) {\n  options = options || {}\n\n  var result\n  if (typeof formatDistanceLocale[token] === 'string') {\n    result = formatDistanceLocale[token]\n  } else if (count === 1) {\n    result = formatDistanceLocale[token].one\n  } else {\n    result = formatDistanceLocale[token].other.replace('{{count}}', count)\n  }\n\n  if (options.addSuffix) {\n    if (options.comparison > 0) {\n      return 'in ' + result\n    } else {\n      return result + ' ago'\n    }\n  }\n\n  return result\n}\n","import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index.js'\n\nvar dateFormats = {\n  full: 'EEEE, MMMM do, y',\n  long: 'MMMM do, y',\n  medium: 'MMM d, y',\n  short: 'MM/dd/yyyy'\n}\n\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n}\n\nvar dateTimeFormats = {\n  full: \"{{date}} 'at' {{time}}\",\n  long: \"{{date}} 'at' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n}\n\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n}\n\nexport default formatLong\n","var formatRelativeLocale = {\n  lastWeek: \"'last' eeee 'at' p\",\n  yesterday: \"'yesterday at' p\",\n  today: \"'today at' p\",\n  tomorrow: \"'tomorrow at' p\",\n  nextWeek: \"eeee 'at' p\",\n  other: 'P'\n}\n\nexport default function formatRelative (token, date, baseDate, options) {\n  return formatRelativeLocale[token]\n}\n","import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index.js'\n\nvar eraValues = {\n  narrow: ['B', 'A'],\n  abbreviated: ['BC', 'AD'],\n  wide: ['Before Christ', 'Anno Domini']\n}\n\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n}\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n}\n\nvar dayValues = {\n  narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n  short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n  abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n}\n\nvar dayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mi',\n    noon: 'n',\n    morning: 'morning',\n    afternoon: 'afternoon',\n    evening: 'evening',\n    night: 'night'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'morning',\n    afternoon: 'afternoon',\n    evening: 'evening',\n    night: 'night'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'morning',\n    afternoon: 'afternoon',\n    evening: 'evening',\n    night: 'night'\n  }\n}\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mi',\n    noon: 'n',\n    morning: 'in the morning',\n    afternoon: 'in the afternoon',\n    evening: 'in the evening',\n    night: 'at night'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'in the morning',\n    afternoon: 'in the afternoon',\n    evening: 'in the evening',\n    night: 'at night'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'in the morning',\n    afternoon: 'in the afternoon',\n    evening: 'in the evening',\n    night: 'at night'\n  }\n}\n\nfunction ordinalNumber (dirtyNumber, dirtyOptions) {\n  var number = Number(dirtyNumber)\n\n  // If ordinal numbers depend on context, for example,\n  // if they are different for different grammatical genders,\n  // use `options.unit`:\n  //\n  //   var options = dirtyOptions || {}\n  //   var unit = String(options.unit)\n  //\n  // where `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n  // 'day', 'hour', 'minute', 'second'\n\n  var rem100 = number % 100\n  if (rem100 > 20 || rem100 < 10) {\n    switch (rem100 % 10) {\n      case 1:\n        return number + 'st'\n      case 2:\n        return number + 'nd'\n      case 3:\n        return number + 'rd'\n    }\n  }\n  return number + 'th'\n}\n\nvar localize = {\n  ordinalNumber: ordinalNumber,\n\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function (quarter) {\n      return Number(quarter) - 1\n    }\n  }),\n\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n}\n\nexport default localize\n","import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index.js'\nimport buildMatchFn from '../../../_lib/buildMatchFn/index.js'\n\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i\nvar parseOrdinalNumberPattern = /\\d+/i\n\nvar matchEraPatterns = {\n  narrow: /^(b|a)/i,\n  abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n  wide: /^(before christ|before common era|anno domini|common era)/i\n}\nvar parseEraPatterns = {\n  any: [/^b/i, /^(a|c)/i]\n}\n\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234](th|st|nd|rd)? quarter/i\n}\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n}\n\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n  wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n}\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n}\n\nvar matchDayPatterns = {\n  narrow: /^[smtwf]/i,\n  short: /^(su|mo|tu|we|th|fr|sa)/i,\n  abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n  wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n}\nvar parseDayPatterns = {\n  narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n  any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n}\n\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n  any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n}\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mi/i,\n    noon: /^no/i,\n    morning: /morning/i,\n    afternoon: /afternoon/i,\n    evening: /evening/i,\n    night: /night/i\n  }\n}\n\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function (value) {\n      return parseInt(value, 10)\n    }\n  }),\n\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function (index) {\n      return index + 1\n    }\n  }),\n\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n}\n\nexport default match\n","import formatDistance from './_lib/formatDistance/index.js'\nimport formatLong from './_lib/formatLong/index.js'\nimport formatRelative from './_lib/formatRelative/index.js'\nimport localize from './_lib/localize/index.js'\nimport match from './_lib/match/index.js'\n\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n}\n\nexport default locale\n","import toDate from '../toDate/index.js'\n\n/**\n * @name max\n * @category Common Helpers\n * @summary Return the latest of the given dates.\n *\n * @description\n * Return the latest of the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - `max` function now accepts an array of dates rather than spread arguments.\n *\n *   ```javascript\n *   // Before v2.0.0\n *   var date1 = new Date(1989, 6, 10)\n *   var date2 = new Date(1987, 1, 11)\n *   var maxDate = max(date1, date2)\n *\n *   // v2.0.0 onward:\n *   var dates = [new Date(1989, 6, 10), new Date(1987, 1, 11)]\n *   var maxDate = max(dates)\n *   ```\n *\n * @param {Date[]|Number[]} datesArray - the dates to compare\n * @returns {Date} the latest of the dates\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which of these dates is the latest?\n * var result = max([\n *   new Date(1989, 6, 10),\n *   new Date(1987, 1, 11),\n *   new Date(1995, 6, 2),\n *   new Date(1990, 0, 1)\n * ])\n * //=> Sun Jul 02 1995 00:00:00\n */\nexport default function max(dirtyDatesArray) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var datesArray\n  // `dirtyDatesArray` is undefined or null\n  if (dirtyDatesArray == null) {\n    datesArray = []\n\n    // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n  } else if (typeof dirtyDatesArray.forEach === 'function') {\n    datesArray = dirtyDatesArray\n\n    // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array\n  } else {\n    datesArray = Array.prototype.slice.call(dirtyDatesArray)\n  }\n\n  var result\n  datesArray.forEach(function(dirtyDate) {\n    var currentDate = toDate(dirtyDate)\n\n    if (result === undefined || result < currentDate || isNaN(currentDate)) {\n      result = currentDate\n    }\n  })\n\n  return result\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name min\n * @category Common Helpers\n * @summary Return the earliest of the given dates.\n *\n * @description\n * Return the earliest of the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - `min` function now accepts an array of dates rather than spread arguments.\n *\n *   ```javascript\n *   // Before v2.0.0\n *   var date1 = new Date(1989, 6, 10)\n *   var date2 = new Date(1987, 1, 11)\n *   var minDate = min(date1, date2)\n *\n *   // v2.0.0 onward:\n *   var dates = [new Date(1989, 6, 10), new Date(1987, 1, 11)]\n *   var minDate = min(dates)\n *   ```\n *\n * @param {Date[]|Number[]} datesArray - the dates to compare\n * @returns {Date} the earliest of the dates\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which of these dates is the earliest?\n * var result = min([\n *   new Date(1989, 6, 10),\n *   new Date(1987, 1, 11),\n *   new Date(1995, 6, 2),\n *   new Date(1990, 0, 1)\n * ])\n * //=> Wed Feb 11 1987 00:00:00\n */\nexport default function min(dirtyDatesArray) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var datesArray\n  // `dirtyDatesArray` is undefined or null\n  if (dirtyDatesArray == null) {\n    datesArray = []\n\n    // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n  } else if (typeof dirtyDatesArray.forEach === 'function') {\n    datesArray = dirtyDatesArray\n\n    // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array\n  } else {\n    datesArray = Array.prototype.slice.call(dirtyDatesArray)\n  }\n\n  var result\n  datesArray.forEach(function(dirtyDate) {\n    var currentDate = toDate(dirtyDate)\n\n    if (result === undefined || result > currentDate || isNaN(currentDate)) {\n      result = currentDate\n    }\n  })\n\n  return result\n}\n","import getUTCWeekYear from '../../../_lib/getUTCWeekYear/index.js'\nimport setUTCDay from '../../../_lib/setUTCDay/index.js'\nimport setUTCWeek from '../../../_lib/setUTCWeek/index.js'\nimport startOfUTCWeek from '../../../_lib/startOfUTCWeek/index.js'\nimport setUTCISODay from '../../../_lib/setUTCISODay/index.js'\nimport setUTCISOWeek from '../../../_lib/setUTCISOWeek/index.js'\nimport startOfUTCISOWeek from '../../../_lib/startOfUTCISOWeek/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\nvar MILLISECONDS_IN_MINUTE = 60000\nvar MILLISECONDS_IN_SECOND = 1000\n\nvar numericPatterns = {\n  month: /^(1[0-2]|0?\\d)/, // 0 to 12\n  date: /^(3[0-1]|[0-2]?\\d)/, // 0 to 31\n  dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/, // 0 to 366\n  week: /^(5[0-3]|[0-4]?\\d)/, // 0 to 53\n  hour23h: /^(2[0-3]|[0-1]?\\d)/, // 0 to 23\n  hour24h: /^(2[0-4]|[0-1]?\\d)/, // 0 to 24\n  hour11h: /^(1[0-1]|0?\\d)/, // 0 to 11\n  hour12h: /^(1[0-2]|0?\\d)/, // 0 to 12\n  minute: /^[0-5]?\\d/, // 0 to 59\n  second: /^[0-5]?\\d/, // 0 to 59\n\n  singleDigit: /^\\d/, // 0 to 9\n  twoDigits: /^\\d{1,2}/, // 0 to 99\n  threeDigits: /^\\d{1,3}/, // 0 to 999\n  fourDigits: /^\\d{1,4}/, // 0 to 9999\n\n  anyDigitsSigned: /^-?\\d+/,\n  singleDigitSigned: /^-?\\d/, // 0 to 9, -0 to -9\n  twoDigitsSigned: /^-?\\d{1,2}/, // 0 to 99, -0 to -99\n  threeDigitsSigned: /^-?\\d{1,3}/, // 0 to 999, -0 to -999\n  fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n}\n\nvar timezonePatterns = {\n  basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n  basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n  basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n  extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n  extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n}\n\nfunction parseNumericPattern(pattern, string, valueCallback) {\n  var matchResult = string.match(pattern)\n\n  if (!matchResult) {\n    return null\n  }\n\n  var value = parseInt(matchResult[0], 10)\n\n  return {\n    value: valueCallback ? valueCallback(value) : value,\n    rest: string.slice(matchResult[0].length)\n  }\n}\n\nfunction parseTimezonePattern(pattern, string) {\n  var matchResult = string.match(pattern)\n\n  if (!matchResult) {\n    return null\n  }\n\n  // Input is 'Z'\n  if (matchResult[0] === 'Z') {\n    return {\n      value: 0,\n      rest: string.slice(1)\n    }\n  }\n\n  var sign = matchResult[1] === '+' ? 1 : -1\n  var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0\n  var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0\n  var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0\n\n  return {\n    value:\n      sign *\n      (hours * MILLISECONDS_IN_HOUR +\n        minutes * MILLISECONDS_IN_MINUTE +\n        seconds * MILLISECONDS_IN_SECOND),\n    rest: string.slice(matchResult[0].length)\n  }\n}\n\nfunction parseAnyDigitsSigned(string, valueCallback) {\n  return parseNumericPattern(\n    numericPatterns.anyDigitsSigned,\n    string,\n    valueCallback\n  )\n}\n\nfunction parseNDigits(n, string, valueCallback) {\n  switch (n) {\n    case 1:\n      return parseNumericPattern(\n        numericPatterns.singleDigit,\n        string,\n        valueCallback\n      )\n    case 2:\n      return parseNumericPattern(\n        numericPatterns.twoDigits,\n        string,\n        valueCallback\n      )\n    case 3:\n      return parseNumericPattern(\n        numericPatterns.threeDigits,\n        string,\n        valueCallback\n      )\n    case 4:\n      return parseNumericPattern(\n        numericPatterns.fourDigits,\n        string,\n        valueCallback\n      )\n    default:\n      return parseNumericPattern(\n        new RegExp('^\\\\d{1,' + n + '}'),\n        string,\n        valueCallback\n      )\n  }\n}\n\nfunction parseNDigitsSigned(n, string, valueCallback) {\n  switch (n) {\n    case 1:\n      return parseNumericPattern(\n        numericPatterns.singleDigitSigned,\n        string,\n        valueCallback\n      )\n    case 2:\n      return parseNumericPattern(\n        numericPatterns.twoDigitsSigned,\n        string,\n        valueCallback\n      )\n    case 3:\n      return parseNumericPattern(\n        numericPatterns.threeDigitsSigned,\n        string,\n        valueCallback\n      )\n    case 4:\n      return parseNumericPattern(\n        numericPatterns.fourDigitsSigned,\n        string,\n        valueCallback\n      )\n    default:\n      return parseNumericPattern(\n        new RegExp('^-?\\\\d{1,' + n + '}'),\n        string,\n        valueCallback\n      )\n  }\n}\n\nfunction dayPeriodEnumToHours(enumValue) {\n  switch (enumValue) {\n    case 'morning':\n      return 4\n    case 'evening':\n      return 17\n    case 'pm':\n    case 'noon':\n    case 'afternoon':\n      return 12\n    case 'am':\n    case 'midnight':\n    case 'night':\n    default:\n      return 0\n  }\n}\n\nfunction normalizeTwoDigitYear(twoDigitYear, currentYear) {\n  var isCommonEra = currentYear > 0\n  // Absolute number of the current year:\n  // 1 -> 1 AC\n  // 0 -> 1 BC\n  // -1 -> 2 BC\n  var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear\n\n  var result\n  if (absCurrentYear <= 50) {\n    result = twoDigitYear || 100\n  } else {\n    var rangeEnd = absCurrentYear + 50\n    var rangeEndCentury = Math.floor(rangeEnd / 100) * 100\n    var isPreviousCentury = twoDigitYear >= rangeEnd % 100\n    result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0)\n  }\n\n  return isCommonEra ? result : 1 - result\n}\n\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\n// User for validation\nfunction isLeapYearIndex(year) {\n  return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0)\n}\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O* | Timezone (GMT)                 |\n * |  p  |                                |  P  |                                |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z* | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n */\nvar parsers = {\n  // Era\n  G: {\n    priority: 140,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        // AD, BC\n        case 'G':\n        case 'GG':\n        case 'GGG':\n          return (\n            match.era(string, { width: 'abbreviated' }) ||\n            match.era(string, { width: 'narrow' })\n          )\n        // A, B\n        case 'GGGGG':\n          return match.era(string, { width: 'narrow' })\n        // Anno Domini, Before Christ\n        case 'GGGG':\n        default:\n          return (\n            match.era(string, { width: 'wide' }) ||\n            match.era(string, { width: 'abbreviated' }) ||\n            match.era(string, { width: 'narrow' })\n          )\n      }\n    },\n    set: function(date, flags, value, options) {\n      // Sets year 10 BC if BC, or 10 AC if AC\n      date.setUTCFullYear(value === 1 ? 10 : -9, 0, 1)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Year\n  y: {\n    // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n    // | Year     |     y | yy |   yyy |  yyyy | yyyyy |\n    // |----------|-------|----|-------|-------|-------|\n    // | AD 1     |     1 | 01 |   001 |  0001 | 00001 |\n    // | AD 12    |    12 | 12 |   012 |  0012 | 00012 |\n    // | AD 123   |   123 | 23 |   123 |  0123 | 00123 |\n    // | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |\n    // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n    priority: 130,\n    parse: function(string, token, match, options) {\n      var valueCallback = function(year) {\n        return {\n          year: year,\n          isTwoDigitYear: token === 'yy'\n        }\n      }\n\n      switch (token) {\n        case 'y':\n          return parseNDigits(4, string, valueCallback)\n        case 'yo':\n          return match.ordinalNumber(string, {\n            unit: 'year',\n            valueCallback: valueCallback\n          })\n        default:\n          return parseNDigits(token.length, string, valueCallback)\n      }\n    },\n    validate: function(date, value, options) {\n      return value.isTwoDigitYear || value.year > 0\n    },\n    set: function(date, flags, value, options) {\n      var currentYear = getUTCWeekYear(date, options)\n\n      if (value.isTwoDigitYear) {\n        var normalizedTwoDigitYear = normalizeTwoDigitYear(\n          value.year,\n          currentYear\n        )\n        date.setUTCFullYear(normalizedTwoDigitYear, 0, 1)\n        date.setUTCHours(0, 0, 0, 0)\n        return date\n      }\n\n      var year = currentYear > 0 ? value.year : 1 - value.year\n      date.setUTCFullYear(year, 0, 1)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Local week-numbering year\n  Y: {\n    priority: 130,\n    parse: function(string, token, match, options) {\n      var valueCallback = function(year) {\n        return {\n          year: year,\n          isTwoDigitYear: token === 'YY'\n        }\n      }\n\n      switch (token) {\n        case 'Y':\n          return parseNDigits(4, string, valueCallback)\n        case 'Yo':\n          return match.ordinalNumber(string, {\n            unit: 'year',\n            valueCallback: valueCallback\n          })\n        default:\n          return parseNDigits(token.length, string, valueCallback)\n      }\n    },\n    validate: function(date, value, options) {\n      return value.isTwoDigitYear || value.year > 0\n    },\n    set: function(date, flags, value, options) {\n      var currentYear = date.getUTCFullYear()\n\n      if (value.isTwoDigitYear) {\n        var normalizedTwoDigitYear = normalizeTwoDigitYear(\n          value.year,\n          currentYear\n        )\n        date.setUTCFullYear(\n          normalizedTwoDigitYear,\n          0,\n          options.firstWeekContainsDate\n        )\n        date.setUTCHours(0, 0, 0, 0)\n        return startOfUTCWeek(date, options)\n      }\n\n      var year = currentYear > 0 ? value.year : 1 - value.year\n      date.setUTCFullYear(year, 0, options.firstWeekContainsDate)\n      date.setUTCHours(0, 0, 0, 0)\n      return startOfUTCWeek(date, options)\n    }\n  },\n\n  // ISO week-numbering year\n  R: {\n    priority: 130,\n    parse: function(string, token, match, options) {\n      if (token === 'R') {\n        return parseNDigitsSigned(4, string)\n      }\n\n      return parseNDigitsSigned(token.length, string)\n    },\n    set: function(date, flags, value, options) {\n      var firstWeekOfYear = new Date(0)\n      firstWeekOfYear.setUTCFullYear(value, 0, 4)\n      firstWeekOfYear.setUTCHours(0, 0, 0, 0)\n      return startOfUTCISOWeek(firstWeekOfYear)\n    }\n  },\n\n  // Extended year\n  u: {\n    priority: 130,\n    parse: function(string, token, match, options) {\n      if (token === 'u') {\n        return parseNDigitsSigned(4, string)\n      }\n\n      return parseNDigitsSigned(token.length, string)\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCFullYear(value, 0, 1)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Quarter\n  Q: {\n    priority: 120,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        // 1, 2, 3, 4\n        case 'Q':\n        case 'QQ': // 01, 02, 03, 04\n          return parseNDigits(token.length, string)\n        // 1st, 2nd, 3rd, 4th\n        case 'Qo':\n          return match.ordinalNumber(string, { unit: 'quarter' })\n        // Q1, Q2, Q3, Q4\n        case 'QQQ':\n          return (\n            match.quarter(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.quarter(string, { width: 'narrow', context: 'formatting' })\n          )\n        // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n        case 'QQQQQ':\n          return match.quarter(string, {\n            width: 'narrow',\n            context: 'formatting'\n          })\n        // 1st quarter, 2nd quarter, ...\n        case 'QQQQ':\n        default:\n          return (\n            match.quarter(string, { width: 'wide', context: 'formatting' }) ||\n            match.quarter(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.quarter(string, { width: 'narrow', context: 'formatting' })\n          )\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 1 && value <= 4\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCMonth((value - 1) * 3, 1)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Stand-alone quarter\n  q: {\n    priority: 120,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        // 1, 2, 3, 4\n        case 'q':\n        case 'qq': // 01, 02, 03, 04\n          return parseNDigits(token.length, string)\n        // 1st, 2nd, 3rd, 4th\n        case 'qo':\n          return match.ordinalNumber(string, { unit: 'quarter' })\n        // Q1, Q2, Q3, Q4\n        case 'qqq':\n          return (\n            match.quarter(string, {\n              width: 'abbreviated',\n              context: 'standalone'\n            }) ||\n            match.quarter(string, { width: 'narrow', context: 'standalone' })\n          )\n        // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n        case 'qqqqq':\n          return match.quarter(string, {\n            width: 'narrow',\n            context: 'standalone'\n          })\n        // 1st quarter, 2nd quarter, ...\n        case 'qqqq':\n        default:\n          return (\n            match.quarter(string, { width: 'wide', context: 'standalone' }) ||\n            match.quarter(string, {\n              width: 'abbreviated',\n              context: 'standalone'\n            }) ||\n            match.quarter(string, { width: 'narrow', context: 'standalone' })\n          )\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 1 && value <= 4\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCMonth((value - 1) * 3, 1)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Month\n  M: {\n    priority: 110,\n    parse: function(string, token, match, options) {\n      var valueCallback = function(value) {\n        return value - 1\n      }\n\n      switch (token) {\n        // 1, 2, ..., 12\n        case 'M':\n          return parseNumericPattern(\n            numericPatterns.month,\n            string,\n            valueCallback\n          )\n        // 01, 02, ..., 12\n        case 'MM':\n          return parseNDigits(2, string, valueCallback)\n        // 1st, 2nd, ..., 12th\n        case 'Mo':\n          return match.ordinalNumber(string, {\n            unit: 'month',\n            valueCallback: valueCallback\n          })\n        // Jan, Feb, ..., Dec\n        case 'MMM':\n          return (\n            match.month(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.month(string, { width: 'narrow', context: 'formatting' })\n          )\n        // J, F, ..., D\n        case 'MMMMM':\n          return match.month(string, { width: 'narrow', context: 'formatting' })\n        // January, February, ..., December\n        case 'MMMM':\n        default:\n          return (\n            match.month(string, { width: 'wide', context: 'formatting' }) ||\n            match.month(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.month(string, { width: 'narrow', context: 'formatting' })\n          )\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 0 && value <= 11\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCMonth(value, 1)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Stand-alone month\n  L: {\n    priority: 110,\n    parse: function(string, token, match, options) {\n      var valueCallback = function(value) {\n        return value - 1\n      }\n\n      switch (token) {\n        // 1, 2, ..., 12\n        case 'L':\n          return parseNumericPattern(\n            numericPatterns.month,\n            string,\n            valueCallback\n          )\n        // 01, 02, ..., 12\n        case 'LL':\n          return parseNDigits(2, string, valueCallback)\n        // 1st, 2nd, ..., 12th\n        case 'Lo':\n          return match.ordinalNumber(string, {\n            unit: 'month',\n            valueCallback: valueCallback\n          })\n        // Jan, Feb, ..., Dec\n        case 'LLL':\n          return (\n            match.month(string, {\n              width: 'abbreviated',\n              context: 'standalone'\n            }) ||\n            match.month(string, { width: 'narrow', context: 'standalone' })\n          )\n        // J, F, ..., D\n        case 'LLLLL':\n          return match.month(string, { width: 'narrow', context: 'standalone' })\n        // January, February, ..., December\n        case 'LLLL':\n        default:\n          return (\n            match.month(string, { width: 'wide', context: 'standalone' }) ||\n            match.month(string, {\n              width: 'abbreviated',\n              context: 'standalone'\n            }) ||\n            match.month(string, { width: 'narrow', context: 'standalone' })\n          )\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 0 && value <= 11\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCMonth(value, 1)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Local week of year\n  w: {\n    priority: 100,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'w':\n          return parseNumericPattern(numericPatterns.week, string)\n        case 'wo':\n          return match.ordinalNumber(string, { unit: 'week' })\n        default:\n          return parseNDigits(token.length, string)\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 1 && value <= 53\n    },\n    set: function(date, flags, value, options) {\n      return startOfUTCWeek(setUTCWeek(date, value, options), options)\n    }\n  },\n\n  // ISO week of year\n  I: {\n    priority: 100,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'I':\n          return parseNumericPattern(numericPatterns.week, string)\n        case 'Io':\n          return match.ordinalNumber(string, { unit: 'week' })\n        default:\n          return parseNDigits(token.length, string)\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 1 && value <= 53\n    },\n    set: function(date, flags, value, options) {\n      return startOfUTCISOWeek(setUTCISOWeek(date, value, options), options)\n    }\n  },\n\n  // Day of the month\n  d: {\n    priority: 90,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'd':\n          return parseNumericPattern(numericPatterns.date, string)\n        case 'do':\n          return match.ordinalNumber(string, { unit: 'date' })\n        default:\n          return parseNDigits(token.length, string)\n      }\n    },\n    validate: function(date, value, options) {\n      var year = date.getUTCFullYear()\n      var isLeapYear = isLeapYearIndex(year)\n      var month = date.getUTCMonth()\n      if (isLeapYear) {\n        return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month]\n      } else {\n        return value >= 1 && value <= DAYS_IN_MONTH[month]\n      }\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCDate(value)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Day of year\n  D: {\n    priority: 90,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'D':\n        case 'DD':\n          return parseNumericPattern(numericPatterns.dayOfYear, string)\n        case 'Do':\n          return match.ordinalNumber(string, { unit: 'date' })\n        default:\n          return parseNDigits(token.length, string)\n      }\n    },\n    validate: function(date, value, options) {\n      var year = date.getUTCFullYear()\n      var isLeapYear = isLeapYearIndex(year)\n      if (isLeapYear) {\n        return value >= 1 && value <= 366\n      } else {\n        return value >= 1 && value <= 365\n      }\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCMonth(0, value)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Day of week\n  E: {\n    priority: 90,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        // Tue\n        case 'E':\n        case 'EE':\n        case 'EEE':\n          return (\n            match.day(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.day(string, { width: 'short', context: 'formatting' }) ||\n            match.day(string, { width: 'narrow', context: 'formatting' })\n          )\n        // T\n        case 'EEEEE':\n          return match.day(string, { width: 'narrow', context: 'formatting' })\n        // Tu\n        case 'EEEEEE':\n          return (\n            match.day(string, { width: 'short', context: 'formatting' }) ||\n            match.day(string, { width: 'narrow', context: 'formatting' })\n          )\n        // Tuesday\n        case 'EEEE':\n        default:\n          return (\n            match.day(string, { width: 'wide', context: 'formatting' }) ||\n            match.day(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.day(string, { width: 'short', context: 'formatting' }) ||\n            match.day(string, { width: 'narrow', context: 'formatting' })\n          )\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 0 && value <= 6\n    },\n    set: function(date, flags, value, options) {\n      date = setUTCDay(date, value, options)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Local day of week\n  e: {\n    priority: 90,\n    parse: function(string, token, match, options) {\n      var valueCallback = function(value) {\n        var wholeWeekDays = Math.floor((value - 1) / 7) * 7\n        return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays\n      }\n\n      switch (token) {\n        // 3\n        case 'e':\n        case 'ee': // 03\n          return parseNDigits(token.length, string, valueCallback)\n        // 3rd\n        case 'eo':\n          return match.ordinalNumber(string, {\n            unit: 'day',\n            valueCallback: valueCallback\n          })\n        // Tue\n        case 'eee':\n          return (\n            match.day(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.day(string, { width: 'short', context: 'formatting' }) ||\n            match.day(string, { width: 'narrow', context: 'formatting' })\n          )\n        // T\n        case 'eeeee':\n          return match.day(string, { width: 'narrow', context: 'formatting' })\n        // Tu\n        case 'eeeeee':\n          return (\n            match.day(string, { width: 'short', context: 'formatting' }) ||\n            match.day(string, { width: 'narrow', context: 'formatting' })\n          )\n        // Tuesday\n        case 'eeee':\n        default:\n          return (\n            match.day(string, { width: 'wide', context: 'formatting' }) ||\n            match.day(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.day(string, { width: 'short', context: 'formatting' }) ||\n            match.day(string, { width: 'narrow', context: 'formatting' })\n          )\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 0 && value <= 6\n    },\n    set: function(date, flags, value, options) {\n      date = setUTCDay(date, value, options)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Stand-alone local day of week\n  c: {\n    priority: 90,\n    parse: function(string, token, match, options) {\n      var valueCallback = function(value) {\n        var wholeWeekDays = Math.floor((value - 1) / 7) * 7\n        return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays\n      }\n\n      switch (token) {\n        // 3\n        case 'c':\n        case 'cc': // 03\n          return parseNDigits(token.length, string, valueCallback)\n        // 3rd\n        case 'co':\n          return match.ordinalNumber(string, {\n            unit: 'day',\n            valueCallback: valueCallback\n          })\n        // Tue\n        case 'ccc':\n          return (\n            match.day(string, {\n              width: 'abbreviated',\n              context: 'standalone'\n            }) ||\n            match.day(string, { width: 'short', context: 'standalone' }) ||\n            match.day(string, { width: 'narrow', context: 'standalone' })\n          )\n        // T\n        case 'ccccc':\n          return match.day(string, { width: 'narrow', context: 'standalone' })\n        // Tu\n        case 'cccccc':\n          return (\n            match.day(string, { width: 'short', context: 'standalone' }) ||\n            match.day(string, { width: 'narrow', context: 'standalone' })\n          )\n        // Tuesday\n        case 'cccc':\n        default:\n          return (\n            match.day(string, { width: 'wide', context: 'standalone' }) ||\n            match.day(string, {\n              width: 'abbreviated',\n              context: 'standalone'\n            }) ||\n            match.day(string, { width: 'short', context: 'standalone' }) ||\n            match.day(string, { width: 'narrow', context: 'standalone' })\n          )\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 0 && value <= 6\n    },\n    set: function(date, flags, value, options) {\n      date = setUTCDay(date, value, options)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // ISO day of week\n  i: {\n    priority: 90,\n    parse: function(string, token, match, options) {\n      var valueCallback = function(value) {\n        if (value === 0) {\n          return 7\n        }\n        return value\n      }\n\n      switch (token) {\n        // 2\n        case 'i':\n        case 'ii': // 02\n          return parseNDigits(token.length, string)\n        // 2nd\n        case 'io':\n          return match.ordinalNumber(string, { unit: 'day' })\n        // Tue\n        case 'iii':\n          return (\n            match.day(string, {\n              width: 'abbreviated',\n              context: 'formatting',\n              valueCallback: valueCallback\n            }) ||\n            match.day(string, {\n              width: 'short',\n              context: 'formatting',\n              valueCallback: valueCallback\n            }) ||\n            match.day(string, {\n              width: 'narrow',\n              context: 'formatting',\n              valueCallback: valueCallback\n            })\n          )\n        // T\n        case 'iiiii':\n          return match.day(string, {\n            width: 'narrow',\n            context: 'formatting',\n            valueCallback: valueCallback\n          })\n        // Tu\n        case 'iiiiii':\n          return (\n            match.day(string, {\n              width: 'short',\n              context: 'formatting',\n              valueCallback: valueCallback\n            }) ||\n            match.day(string, {\n              width: 'narrow',\n              context: 'formatting',\n              valueCallback: valueCallback\n            })\n          )\n        // Tuesday\n        case 'iiii':\n        default:\n          return (\n            match.day(string, {\n              width: 'wide',\n              context: 'formatting',\n              valueCallback: valueCallback\n            }) ||\n            match.day(string, {\n              width: 'abbreviated',\n              context: 'formatting',\n              valueCallback: valueCallback\n            }) ||\n            match.day(string, {\n              width: 'short',\n              context: 'formatting',\n              valueCallback: valueCallback\n            }) ||\n            match.day(string, {\n              width: 'narrow',\n              context: 'formatting',\n              valueCallback: valueCallback\n            })\n          )\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 1 && value <= 7\n    },\n    set: function(date, flags, value, options) {\n      date = setUTCISODay(date, value, options)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // AM or PM\n  a: {\n    priority: 80,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'a':\n        case 'aa':\n        case 'aaa':\n          return (\n            match.dayPeriod(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n          )\n        case 'aaaaa':\n          return match.dayPeriod(string, {\n            width: 'narrow',\n            context: 'formatting'\n          })\n        case 'aaaa':\n        default:\n          return (\n            match.dayPeriod(string, { width: 'wide', context: 'formatting' }) ||\n            match.dayPeriod(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n          )\n      }\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0)\n      return date\n    }\n  },\n\n  // AM, PM, midnight\n  b: {\n    priority: 80,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'b':\n        case 'bb':\n        case 'bbb':\n          return (\n            match.dayPeriod(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n          )\n        case 'bbbbb':\n          return match.dayPeriod(string, {\n            width: 'narrow',\n            context: 'formatting'\n          })\n        case 'bbbb':\n        default:\n          return (\n            match.dayPeriod(string, { width: 'wide', context: 'formatting' }) ||\n            match.dayPeriod(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n          )\n      }\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0)\n      return date\n    }\n  },\n\n  // in the morning, in the afternoon, in the evening, at night\n  B: {\n    priority: 80,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'B':\n        case 'BB':\n        case 'BBB':\n          return (\n            match.dayPeriod(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n          )\n        case 'BBBBB':\n          return match.dayPeriod(string, {\n            width: 'narrow',\n            context: 'formatting'\n          })\n        case 'BBBB':\n        default:\n          return (\n            match.dayPeriod(string, { width: 'wide', context: 'formatting' }) ||\n            match.dayPeriod(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n          )\n      }\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0)\n      return date\n    }\n  },\n\n  // Hour [1-12]\n  h: {\n    priority: 70,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'h':\n          return parseNumericPattern(numericPatterns.hour12h, string)\n        case 'ho':\n          return match.ordinalNumber(string, { unit: 'hour' })\n        default:\n          return parseNDigits(token.length, string)\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 1 && value <= 12\n    },\n    set: function(date, flags, value, options) {\n      var isPM = date.getUTCHours() >= 12\n      if (isPM && value < 12) {\n        date.setUTCHours(value + 12, 0, 0, 0)\n      } else if (!isPM && value === 12) {\n        date.setUTCHours(0, 0, 0, 0)\n      } else {\n        date.setUTCHours(value, 0, 0, 0)\n      }\n      return date\n    }\n  },\n\n  // Hour [0-23]\n  H: {\n    priority: 70,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'H':\n          return parseNumericPattern(numericPatterns.hour23h, string)\n        case 'Ho':\n          return match.ordinalNumber(string, { unit: 'hour' })\n        default:\n          return parseNDigits(token.length, string)\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 0 && value <= 23\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCHours(value, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Hour [0-11]\n  K: {\n    priority: 70,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'K':\n          return parseNumericPattern(numericPatterns.hour11h, string)\n        case 'Ko':\n          return match.ordinalNumber(string, { unit: 'hour' })\n        default:\n          return parseNDigits(token.length, string)\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 0 && value <= 11\n    },\n    set: function(date, flags, value, options) {\n      var isPM = date.getUTCHours() >= 12\n      if (isPM && value < 12) {\n        date.setUTCHours(value + 12, 0, 0, 0)\n      } else {\n        date.setUTCHours(value, 0, 0, 0)\n      }\n      return date\n    }\n  },\n\n  // Hour [1-24]\n  k: {\n    priority: 70,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'k':\n          return parseNumericPattern(numericPatterns.hour24h, string)\n        case 'ko':\n          return match.ordinalNumber(string, { unit: 'hour' })\n        default:\n          return parseNDigits(token.length, string)\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 1 && value <= 24\n    },\n    set: function(date, flags, value, options) {\n      var hours = value <= 24 ? value % 24 : value\n      date.setUTCHours(hours, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Minute\n  m: {\n    priority: 60,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'm':\n          return parseNumericPattern(numericPatterns.minute, string)\n        case 'mo':\n          return match.ordinalNumber(string, { unit: 'minute' })\n        default:\n          return parseNDigits(token.length, string)\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 0 && value <= 59\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCMinutes(value, 0, 0)\n      return date\n    }\n  },\n\n  // Second\n  s: {\n    priority: 50,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 's':\n          return parseNumericPattern(numericPatterns.second, string)\n        case 'so':\n          return match.ordinalNumber(string, { unit: 'second' })\n        default:\n          return parseNDigits(token.length, string)\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 0 && value <= 59\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCSeconds(value, 0)\n      return date\n    }\n  },\n\n  // Fraction of second\n  S: {\n    priority: 30,\n    parse: function(string, token, match, options) {\n      var valueCallback = function(value) {\n        return Math.floor(value * Math.pow(10, -token.length + 3))\n      }\n      return parseNDigits(token.length, string, valueCallback)\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCMilliseconds(value)\n      return date\n    }\n  },\n\n  // Timezone (ISO-8601. +00:00 is `'Z'`)\n  X: {\n    priority: 10,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'X':\n          return parseTimezonePattern(\n            timezonePatterns.basicOptionalMinutes,\n            string\n          )\n        case 'XX':\n          return parseTimezonePattern(timezonePatterns.basic, string)\n        case 'XXXX':\n          return parseTimezonePattern(\n            timezonePatterns.basicOptionalSeconds,\n            string\n          )\n        case 'XXXXX':\n          return parseTimezonePattern(\n            timezonePatterns.extendedOptionalSeconds,\n            string\n          )\n        case 'XXX':\n        default:\n          return parseTimezonePattern(timezonePatterns.extended, string)\n      }\n    },\n    set: function(date, flags, value, options) {\n      if (flags.timestampIsSet) {\n        return date\n      }\n      return new Date(date.getTime() - value)\n    }\n  },\n\n  // Timezone (ISO-8601)\n  x: {\n    priority: 10,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'x':\n          return parseTimezonePattern(\n            timezonePatterns.basicOptionalMinutes,\n            string\n          )\n        case 'xx':\n          return parseTimezonePattern(timezonePatterns.basic, string)\n        case 'xxxx':\n          return parseTimezonePattern(\n            timezonePatterns.basicOptionalSeconds,\n            string\n          )\n        case 'xxxxx':\n          return parseTimezonePattern(\n            timezonePatterns.extendedOptionalSeconds,\n            string\n          )\n        case 'xxx':\n        default:\n          return parseTimezonePattern(timezonePatterns.extended, string)\n      }\n    },\n    set: function(date, flags, value, options) {\n      if (flags.timestampIsSet) {\n        return date\n      }\n      return new Date(date.getTime() - value)\n    }\n  },\n\n  // Seconds timestamp\n  t: {\n    priority: 40,\n    parse: function(string, token, match, options) {\n      return parseAnyDigitsSigned(string)\n    },\n    set: function(date, flags, value, options) {\n      return [new Date(value * 1000), { timestampIsSet: true }]\n    }\n  },\n\n  // Milliseconds timestamp\n  T: {\n    priority: 20,\n    parse: function(string, token, match, options) {\n      return parseAnyDigitsSigned(string)\n    },\n    set: function(date, flags, value, options) {\n      return [new Date(value), { timestampIsSet: true }]\n    }\n  }\n}\n\nexport default parsers\n","import toInteger from '../_lib/toInteger/index.js'\nimport assign from '../_lib/assign/index.js'\nimport getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport toDate from '../toDate/index.js'\nimport subMilliseconds from '../subMilliseconds/index.js'\nimport defaultLocale from '../locale/en-US/index.js'\nimport parsers from './_lib/parsers/index.js'\nimport {\n  isProtectedToken,\n  throwProtectedError\n} from '../_lib/protectedTokens/index.js'\n\nvar TIMEZONE_UNIT_PRIORITY = 10\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n//   (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g\n\nvar escapedStringRegExp = /^'(.*?)'?$/\nvar doubleQuoteRegExp = /''/g\n\nvar notWhitespaceRegExp = /\\S/\n\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Accepted format string patterns:\n * | Unit                            |Prior| Pattern | Result examples                   | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era                             | 140 | G..GGG  | AD, BC                            |       |\n * |                                 |     | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 |     | GGGGG   | A, B                              |       |\n * | Calendar year                   | 130 | y       | 44, 1, 1900, 2017, 9999           | 4     |\n * |                                 |     | yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | yy      | 44, 01, 00, 17                    | 4     |\n * |                                 |     | yyy     | 044, 001, 123, 999                | 4     |\n * |                                 |     | yyyy    | 0044, 0001, 1900, 2017            | 4     |\n * |                                 |     | yyyyy   | ...                               | 2,4   |\n * | Local week-numbering year       | 130 | Y       | 44, 1, 1900, 2017, 9000           | 4     |\n * |                                 |     | Yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | YY      | 44, 01, 00, 17                    | 4,6   |\n * |                                 |     | YYY     | 044, 001, 123, 999                | 4     |\n * |                                 |     | YYYY    | 0044, 0001, 1900, 2017            | 4,6   |\n * |                                 |     | YYYYY   | ...                               | 2,4   |\n * | ISO week-numbering year         | 130 | R       | -43, 1, 1900, 2017, 9999, -9999   | 4,5   |\n * |                                 |     | RR      | -43, 01, 00, 17                   | 4,5   |\n * |                                 |     | RRR     | -043, 001, 123, 999, -999         | 4,5   |\n * |                                 |     | RRRR    | -0043, 0001, 2017, 9999, -9999    | 4,5   |\n * |                                 |     | RRRRR   | ...                               | 2,4,5 |\n * | Extended year                   | 130 | u       | -43, 1, 1900, 2017, 9999, -999    | 4     |\n * |                                 |     | uu      | -43, 01, 99, -99                  | 4     |\n * |                                 |     | uuu     | -043, 001, 123, 999, -999         | 4     |\n * |                                 |     | uuuu    | -0043, 0001, 2017, 9999, -9999    | 4     |\n * |                                 |     | uuuuu   | ...                               | 2,4   |\n * | Quarter (formatting)            | 120 | Q       | 1, 2, 3, 4                        |       |\n * |                                 |     | Qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | QQ      | 01, 02, 03, 04                    |       |\n * |                                 |     | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | 120 | q       | 1, 2, 3, 4                        |       |\n * |                                 |     | qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | qq      | 01, 02, 03, 04                    |       |\n * |                                 |     | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | qqqqq   | 1, 2, 3, 4                        | 3     |\n * | Month (formatting)              | 110 | M       | 1, 2, ..., 12                     |       |\n * |                                 |     | Mo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | MM      | 01, 02, ..., 12                   |       |\n * |                                 |     | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | MMMM    | January, February, ..., December  | 2     |\n * |                                 |     | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | 110 | L       | 1, 2, ..., 12                     |       |\n * |                                 |     | Lo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | LL      | 01, 02, ..., 12                   |       |\n * |                                 |     | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | LLLL    | January, February, ..., December  | 2     |\n * |                                 |     | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | 100 | w       | 1, 2, ..., 53                     |       |\n * |                                 |     | wo      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | 100 | I       | 1, 2, ..., 53                     | 5     |\n * |                                 |     | Io      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | II      | 01, 02, ..., 53                   | 5     |\n * | Day of month                    |  90 | d       | 1, 2, ..., 31                     |       |\n * |                                 |     | do      | 1st, 2nd, ..., 31st               | 5     |\n * |                                 |     | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     |  90 | D       | 1, 2, ..., 365, 366               | 6     |\n * |                                 |     | Do      | 1st, 2nd, ..., 365th, 366th       | 5     |\n * |                                 |     | DD      | 01, 02, ..., 365, 366             | 6     |\n * |                                 |     | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 |     | DDDD    | ...                               | 2     |\n * | Day of week (formatting)        |  90 | E..EEE  | Mon, Tue, Wed, ..., Su            |       |\n * |                                 |     | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 |     | EEEEEE  | Mo, Tu, We, Th, Fr, Su, Sa        |       |\n * | ISO day of week (formatting)    |  90 | i       | 1, 2, 3, ..., 7                   | 5     |\n * |                                 |     | io      | 1st, 2nd, ..., 7th                | 5     |\n * |                                 |     | ii      | 01, 02, ..., 07                   | 5     |\n * |                                 |     | iii     | Mon, Tue, Wed, ..., Su            | 5     |\n * |                                 |     | iiii    | Monday, Tuesday, ..., Sunday      | 2,5   |\n * |                                 |     | iiiii   | M, T, W, T, F, S, S               | 5     |\n * |                                 |     | iiiiii  | Mo, Tu, We, Th, Fr, Su, Sa        | 5     |\n * | Local day of week (formatting)  |  90 | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | eo      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | ee      | 02, 03, ..., 01                   |       |\n * |                                 |     | eee     | Mon, Tue, Wed, ..., Su            |       |\n * |                                 |     | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 |     | eeeeee  | Mo, Tu, We, Th, Fr, Su, Sa        |       |\n * | Local day of week (stand-alone) |  90 | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | co      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | cc      | 02, 03, ..., 01                   |       |\n * |                                 |     | ccc     | Mon, Tue, Wed, ..., Su            |       |\n * |                                 |     | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 |     | cccccc  | Mo, Tu, We, Th, Fr, Su, Sa        |       |\n * | AM, PM                          |  80 | a..aaa  | AM, PM                            |       |\n * |                                 |     | aaaa    | a.m., p.m.                        | 2     |\n * |                                 |     | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          |  80 | b..bbb  | AM, PM, noon, midnight            |       |\n * |                                 |     | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 |     | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             |  80 | B..BBB  | at night, in the morning, ...     |       |\n * |                                 |     | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 |     | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     |  70 | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 |     | ho      | 1st, 2nd, ..., 11th, 12th         | 5     |\n * |                                 |     | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     |  70 | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 |     | Ho      | 0th, 1st, 2nd, ..., 23rd          | 5     |\n * |                                 |     | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     |  70 | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 |     | Ko      | 1st, 2nd, ..., 11th, 0th          | 5     |\n * |                                 |     | KK      | 1, 2, ..., 11, 0                  |       |\n * | Hour [1-24]                     |  70 | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 |     | ko      | 24th, 1st, 2nd, ..., 23rd         | 5     |\n * |                                 |     | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          |  60 | m       | 0, 1, ..., 59                     |       |\n * |                                 |     | mo      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | mm      | 00, 01, ..., 59                   |       |\n * | Second                          |  50 | s       | 0, 1, ..., 59                     |       |\n * |                                 |     | so      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | ss      | 00, 01, ..., 59                   |       |\n * | Seconds timestamp               |  40 | t       | 512969520                         |       |\n * |                                 |     | tt      | ...                               | 2     |\n * | Fraction of second              |  30 | S       | 0, 1, ..., 9                      |       |\n * |                                 |     | SS      | 00, 01, ..., 99                   |       |\n * |                                 |     | SSS     | 000, 0001, ..., 999               |       |\n * |                                 |     | SSSS    | ...                               | 2     |\n * | Milliseconds timestamp          |  20 | T       | 512969520900                      |       |\n * |                                 |     | TT      | ...                               | 2     |\n * | Timezone (ISO-8601 w/ Z)        |  10 | X       | -08, +0530, Z                     |       |\n * |                                 |     | XX      | -0800, +0530, Z                   |       |\n * |                                 |     | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 |     | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 |     | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       |  10 | x       | -08, +0530, +00                   |       |\n * |                                 |     | xx      | -0800, +0530, +0000               |       |\n * |                                 |     | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 |     | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 |     | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular.\n *    In `format` function, they will produce different result:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n *    `parse` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table:\n *    - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n *      as wide as the sequence\n *    - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n *      These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` will try to guess the century of two digit year by proximity with `baseDate`:\n *\n *    `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n *    `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n *    while `uu` will just assign the year as is:\n *\n *    `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n *    `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n *    and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `o`: ordinal number modifier\n *\n * 6. These tokens are often confused with others. See: https://git.io/fxCyr\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `baseDate` which works as a context of parsing.\n *\n * `baseDate` must be passed for correct work of the function.\n * If you're not sure which `baseDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `baseDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `baseDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Old `parse` was renamed to `toDate`.\n *   Now `parse` is a new function which parses a string using a provided format.\n *\n *   ```javascript\n *   // Before v2.0.0\n *   parse('2016-01-01')\n *\n *   // v2.0.0 onward\n *   toDate('2016-01-01')\n *   parse('2016-01-01', 'yyyy-MM-dd', new Date())\n *   ```\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} baseDate - defines values missing from the parsed dateString\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @param {Boolean} [options.awareOfUnicodeTokens=false] - if true, allows usage of Unicode tokens causes confusion:\n *   - Some of the day of year tokens (`D`, `DD`) that are confused with the day of month tokens (`d`, `dd`).\n *   - Some of the local week-numbering year tokens (`YY`, `YYYY`) that are confused with the calendar year tokens (`yy`, `yyyy`).\n *   See: https://git.io/fxCyr\n * @returns {Date} the parsed date\n * @throws {TypeError} 3 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.locale` must contain `match` property\n * @throws {RangeError} `options.awareOfUnicodeTokens` must be set to `true` to use `XX` token; see: https://git.io/fxCyr\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n *   locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\nexport default function parse(\n  dirtyDateString,\n  dirtyFormatString,\n  dirtyBaseDate,\n  dirtyOptions\n) {\n  if (arguments.length < 3) {\n    throw new TypeError(\n      '3 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateString = String(dirtyDateString)\n  var formatString = String(dirtyFormatString)\n  var options = dirtyOptions || {}\n\n  var locale = options.locale || defaultLocale\n\n  if (!locale.match) {\n    throw new RangeError('locale must contain match property')\n  }\n\n  var localeFirstWeekContainsDate =\n    locale.options && locale.options.firstWeekContainsDate\n  var defaultFirstWeekContainsDate =\n    localeFirstWeekContainsDate == null\n      ? 1\n      : toInteger(localeFirstWeekContainsDate)\n  var firstWeekContainsDate =\n    options.firstWeekContainsDate == null\n      ? defaultFirstWeekContainsDate\n      : toInteger(options.firstWeekContainsDate)\n\n  // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError(\n      'firstWeekContainsDate must be between 1 and 7 inclusively'\n    )\n  }\n\n  var localeWeekStartsOn = locale.options && locale.options.weekStartsOn\n  var defaultWeekStartsOn =\n    localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n  var weekStartsOn =\n    options.weekStartsOn == null\n      ? defaultWeekStartsOn\n      : toInteger(options.weekStartsOn)\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n  }\n\n  if (formatString === '') {\n    if (dateString === '') {\n      return toDate(dirtyBaseDate)\n    } else {\n      return new Date(NaN)\n    }\n  }\n\n  var subFnOptions = {\n    firstWeekContainsDate: firstWeekContainsDate,\n    weekStartsOn: weekStartsOn,\n    locale: locale\n  }\n\n  // If timezone isn't specified, it will be set to the system timezone\n  var setters = [\n    {\n      priority: TIMEZONE_UNIT_PRIORITY,\n      set: dateToSystemTimezone,\n      index: 0\n    }\n  ]\n\n  var i\n\n  var tokens = formatString.match(formattingTokensRegExp)\n\n  for (i = 0; i < tokens.length; i++) {\n    var token = tokens[i]\n\n    if (!options.awareOfUnicodeTokens && isProtectedToken(token)) {\n      throwProtectedError(token)\n    }\n\n    var firstCharacter = token[0]\n    var parser = parsers[firstCharacter]\n    if (parser) {\n      var parseResult = parser.parse(\n        dateString,\n        token,\n        locale.match,\n        subFnOptions\n      )\n\n      if (!parseResult) {\n        return new Date(NaN)\n      }\n\n      setters.push({\n        priority: parser.priority,\n        set: parser.set,\n        validate: parser.validate,\n        value: parseResult.value,\n        index: setters.length\n      })\n\n      dateString = parseResult.rest\n    } else {\n      // Replace two single quote characters with one single quote character\n      if (token === \"''\") {\n        token = \"'\"\n      } else if (firstCharacter === \"'\") {\n        token = cleanEscapedString(token)\n      }\n\n      // Cut token from string, or, if string doesn't match the token, return Invalid Date\n      if (dateString.indexOf(token) === 0) {\n        dateString = dateString.slice(token.length)\n      } else {\n        return new Date(NaN)\n      }\n    }\n  }\n\n  // Check if the remaining input contains something other than whitespace\n  if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {\n    return new Date(NaN)\n  }\n\n  var uniquePrioritySetters = setters\n    .map(function(setter) {\n      return setter.priority\n    })\n    .sort(function(a, b) {\n      return b - a\n    })\n    .filter(function(priority, index, array) {\n      return array.indexOf(priority) === index\n    })\n    .map(function(priority) {\n      return setters\n        .filter(function(setter) {\n          return setter.priority === priority\n        })\n        .reverse()\n    })\n    .map(function(setterArray) {\n      return setterArray[0]\n    })\n\n  var date = toDate(dirtyBaseDate)\n\n  if (isNaN(date)) {\n    return new Date(NaN)\n  }\n\n  // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n  // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n  // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/37\n  var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date))\n\n  var flags = {}\n  for (i = 0; i < uniquePrioritySetters.length; i++) {\n    var setter = uniquePrioritySetters[i]\n\n    if (\n      setter.validate &&\n      !setter.validate(utcDate, setter.value, subFnOptions)\n    ) {\n      return new Date(NaN)\n    }\n\n    var result = setter.set(utcDate, flags, setter.value, subFnOptions)\n    // Result is tuple (date, flags)\n    if (result[0]) {\n      utcDate = result[0]\n      assign(flags, result[1])\n      // Result is date\n    } else {\n      utcDate = result\n    }\n  }\n\n  return utcDate\n}\n\nfunction dateToSystemTimezone(date, flags) {\n  if (flags.timestampIsSet) {\n    return date\n  }\n\n  var convertedDate = new Date(0)\n  convertedDate.setFullYear(\n    date.getUTCFullYear(),\n    date.getUTCMonth(),\n    date.getUTCDate()\n  )\n  convertedDate.setHours(\n    date.getUTCHours(),\n    date.getUTCMinutes(),\n    date.getUTCSeconds(),\n    date.getUTCMilliseconds()\n  )\n  return convertedDate\n}\n\nfunction cleanEscapedString(input) {\n  return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\")\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\nvar MILLISECONDS_IN_MINUTE = 60000\nvar DEFAULT_ADDITIONAL_DIGITS = 2\n\nvar patterns = {\n  dateTimeDelimiter: /[T ]/,\n  timeZoneDelimiter: /[Z ]/i,\n  timezone: /([Z+-].*)$/\n}\n\nvar dateRegex = /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/\nvar timeRegex = /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/\nvar timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/\n\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The previous `parse` implementation was renamed to `parseISO`.\n *\n *   ```javascript\n *   // Before v2.0.0\n *   parse('2016-01-01')\n *\n *   // v2.0.0 onward\n *   parseISO('2016-01-01')\n *   ```\n *\n * - `parseISO` now validates separate date and time values in ISO-8601 strings\n *   and returns `Invalid Date` if the date is invalid.\n *\n *   ```javascript\n *   parseISO('2018-13-32')\n *   //=> Invalid Date\n *   ```\n *\n * - `parseISO` now doesn't fall back to `new Date` constructor\n *   if it fails to parse a string argument. Instead, it returns `Invalid Date`.\n *\n * @param {String} argument - the value to convert\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * var result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * var result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport default function parseISO(argument, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n\n  var additionalDigits =\n    options.additionalDigits == null\n      ? DEFAULT_ADDITIONAL_DIGITS\n      : toInteger(options.additionalDigits)\n  if (\n    additionalDigits !== 2 &&\n    additionalDigits !== 1 &&\n    additionalDigits !== 0\n  ) {\n    throw new RangeError('additionalDigits must be 0, 1 or 2')\n  }\n\n  if (\n    !(\n      typeof argument === 'string' ||\n      Object.prototype.toString.call(argument) === '[object String]'\n    )\n  ) {\n    return new Date(NaN)\n  }\n\n  var dateStrings = splitDateString(argument)\n  var parseYearResult = parseYear(dateStrings.date, additionalDigits)\n  var date = parseDate(parseYearResult.restDateString, parseYearResult.year)\n\n  if (isNaN(date) || !date) {\n    return new Date(NaN)\n  }\n\n  var timestamp = date.getTime()\n  var time = 0\n  var offset\n\n  if (dateStrings.time) {\n    time = parseTime(dateStrings.time)\n    if (isNaN(time)) {\n      return new Date(NaN)\n    }\n  }\n\n  if (dateStrings.timezone) {\n    offset = parseTimezone(dateStrings.timezone)\n    if (isNaN(offset)) {\n      return new Date(NaN)\n    }\n  } else {\n    var fullTime = timestamp + time\n    var fullTimeDate = new Date(fullTime)\n\n    offset = getTimezoneOffsetInMilliseconds(fullTimeDate)\n\n    // Adjust time when it's coming from DST\n    var fullTimeDateNextDay = new Date(fullTime)\n    fullTimeDateNextDay.setDate(fullTimeDate.getDate() + 1)\n    var offsetDiff =\n      getTimezoneOffsetInMilliseconds(fullTimeDateNextDay) - offset\n    if (offsetDiff > 0) {\n      offset += offsetDiff\n    }\n  }\n\n  return new Date(timestamp + time + offset)\n}\n\nfunction splitDateString(dateString) {\n  var dateStrings = {}\n  var array = dateString.split(patterns.dateTimeDelimiter)\n  var timeString\n\n  if (/:/.test(array[0])) {\n    dateStrings.date = null\n    timeString = array[0]\n  } else {\n    dateStrings.date = array[0]\n    timeString = array[1]\n    if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n      dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0]\n      timeString = dateString.substr(dateStrings.date.length, dateString.length)\n    }\n  }\n\n  if (timeString) {\n    var token = patterns.timezone.exec(timeString)\n    if (token) {\n      dateStrings.time = timeString.replace(token[1], '')\n      dateStrings.timezone = token[1]\n    } else {\n      dateStrings.time = timeString\n    }\n  }\n\n  return dateStrings\n}\n\nfunction parseYear(dateString, additionalDigits) {\n  var regex = new RegExp(\n    '^(?:(\\\\d{4}|[+-]\\\\d{' +\n      (4 + additionalDigits) +\n      '})|(\\\\d{2}|[+-]\\\\d{' +\n      (2 + additionalDigits) +\n      '})$)'\n  )\n\n  var captures = dateString.match(regex)\n  // Invalid ISO-formatted year\n  if (!captures) return { year: null }\n\n  var year = captures[1] && parseInt(captures[1])\n  var century = captures[2] && parseInt(captures[2])\n\n  return {\n    year: century == null ? year : century * 100,\n    restDateString: dateString.slice((captures[1] || captures[2]).length)\n  }\n}\n\nfunction parseDate(dateString, year) {\n  // Invalid ISO-formatted year\n  if (year === null) return null\n\n  var captures = dateString.match(dateRegex)\n  // Invalid ISO-formatted string\n  if (!captures) return null\n\n  var isWeekDate = !!captures[4]\n  var dayOfYear = parseDateUnit(captures[1])\n  var month = parseDateUnit(captures[2]) - 1\n  var day = parseDateUnit(captures[3])\n  var week = parseDateUnit(captures[4]) - 1\n  var dayOfWeek = parseDateUnit(captures[5]) - 1\n\n  if (isWeekDate) {\n    if (!validateWeekDate(year, week, dayOfWeek)) {\n      return new Date(NaN)\n    }\n    return dayOfISOWeekYear(year, week, dayOfWeek)\n  } else {\n    var date = new Date(0)\n    if (\n      !validateDate(year, month, day) ||\n      !validateDayOfYearDate(year, dayOfYear)\n    ) {\n      return new Date(NaN)\n    }\n    date.setUTCFullYear(year, month, Math.max(dayOfYear, day))\n    return date\n  }\n}\n\nfunction parseDateUnit(value) {\n  return value ? parseInt(value) : 1\n}\n\nfunction parseTime(timeString) {\n  var captures = timeString.match(timeRegex)\n  if (!captures) return null // Invalid ISO-formatted time\n\n  var hours = parseTimeUnit(captures[1])\n  var minutes = parseTimeUnit(captures[2])\n  var seconds = parseTimeUnit(captures[3])\n\n  if (!validateTime(hours, minutes, seconds)) {\n    return NaN\n  }\n\n  return (\n    (hours % 24) * MILLISECONDS_IN_HOUR +\n    minutes * MILLISECONDS_IN_MINUTE +\n    seconds * 1000\n  )\n}\n\nfunction parseTimeUnit(value) {\n  return (value && parseFloat(value.replace(',', '.'))) || 0\n}\n\nfunction parseTimezone(timezoneString) {\n  if (timezoneString === 'Z') return 0\n\n  var captures = timezoneString.match(timezoneRegex)\n  if (!captures) return 0\n\n  var sign = captures[1] === '+' ? -1 : 1\n  var hours = parseInt(captures[2])\n  var minutes = (captures[3] && parseInt(captures[3])) || 0\n\n  if (!validateTimezone(hours, minutes)) {\n    return NaN\n  }\n\n  return (\n    sign * (hours * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE)\n  )\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n  var date = new Date(0)\n  date.setUTCFullYear(isoWeekYear, 0, 4)\n  var fourthOfJanuaryDay = date.getUTCDay() || 7\n  var diff = (week || 0) * 7 + (day || 0) + 1 - fourthOfJanuaryDay\n  date.setUTCDate(date.getUTCDate() + diff)\n  return date\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nvar daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\nfunction isLeapYearIndex(year) {\n  return year % 400 === 0 || (year % 4 === 0 && year % 100)\n}\n\nfunction validateDate(year, month, date) {\n  return !(\n    month < 0 ||\n    month > 11 ||\n    date < 1 ||\n    date > (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28))\n  )\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n  return !(dayOfYear < 1 || dayOfYear > (isLeapYearIndex(year) ? 366 : 365))\n}\n\nfunction validateWeekDate(_year, week, day) {\n  return !(week < 0 || week > 52 || day < 0 || day > 6)\n}\n\nfunction validateTime(hours, minutes, seconds) {\n  return !(\n    seconds < 0 ||\n    seconds >= 60 ||\n    minutes < 0 ||\n    minutes >= 60 ||\n    hours < 0 ||\n    hours >= 25\n  )\n}\n\nfunction validateTimezone(_hours, minutes) {\n  return !(minutes < 0 || minutes > 59)\n}\n","import toDate from '../toDate/index.js'\nimport toInteger from '../_lib/toInteger/index.js'\n\n/**\n * @name roundToNearestMinutes\n * @category Minute Helpers\n * @summary Rounds the given date to the nearest minute\n *\n * @description\n * Rounds the given date to the nearest minute\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to round\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.nearestTo=1] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @returns {Date} the new date rounded to the closest minute\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.nearestTo` must be between 1 and 30\n *\n * @example\n * // Round 10 July 2014 12:12:34 to nearest minute:\n * var result = roundToNearestMinutes(new Date(2014, 6, 10, 12, 12, 34))\n * //=> Thu Jul 10 2014 12:13:00\n */\nexport default function roundToNearestMinutes(dirtyDate, options) {\n  if (arguments.length < 1) {\n    throw new TypeError('1 argument required, but only none provided present')\n  }\n\n  var nearestTo =\n    options && 'nearestTo' in options ? toInteger(options.nearestTo) : 1\n\n  if (nearestTo < 1 || nearestTo > 30) {\n    throw new RangeError('`options.nearestTo` must be between 1 and 30')\n  }\n\n  var date = toDate(dirtyDate)\n  var seconds = date.getSeconds() // relevant if nearestTo is 1, which is the default case\n  var minutes = date.getMinutes() + seconds / 60\n  var roundedMinutes = Math.floor(minutes / nearestTo) * nearestTo\n  var remainderMinutes = minutes % nearestTo\n  var addedMinutes = Math.round(remainderMinutes / nearestTo) * nearestTo\n\n  return new Date(\n    date.getFullYear(),\n    date.getMonth(),\n    date.getDate(),\n    date.getHours(),\n    roundedMinutes + addedMinutes\n  )\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setDate\n * @category Day Helpers\n * @summary Set the day of the month to the given date.\n *\n * @description\n * Set the day of the month to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} dayOfMonth - the day of the month of the new date\n * @returns {Date} the new date with the day of the month set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 30th day of the month to 1 September 2014:\n * var result = setDate(new Date(2014, 8, 1), 30)\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport default function setDate(dirtyDate, dirtyDayOfMonth) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var dayOfMonth = toInteger(dirtyDayOfMonth)\n  date.setDate(dayOfMonth)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport addDays from '../addDays/index.js'\n\n/**\n * @name setDay\n * @category Weekday Helpers\n * @summary Set the day of the week to the given date.\n *\n * @description\n * Set the day of the week to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} day - the day of the week of the new date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Date} the new date with the day of the week set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * var result = setDay(new Date(2014, 8, 1), 0)\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If week starts with Monday, set Sunday to 1 September 2014:\n * var result = setDay(new Date(2014, 8, 1), 0, { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function setDay(dirtyDate, dirtyDay, dirtyOptions) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeWeekStartsOn =\n    locale && locale.options && locale.options.weekStartsOn\n  var defaultWeekStartsOn =\n    localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n  var weekStartsOn =\n    options.weekStartsOn == null\n      ? defaultWeekStartsOn\n      : toInteger(options.weekStartsOn)\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n  }\n\n  var date = toDate(dirtyDate, options)\n  var day = toInteger(dirtyDay)\n  var currentDay = date.getDay()\n\n  var remainder = day % 7\n  var dayIndex = (remainder + 7) % 7\n\n  var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay\n  return addDays(date, diff, options)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setDayOfYear\n * @category Day Helpers\n * @summary Set the day of the year to the given date.\n *\n * @description\n * Set the day of the year to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} dayOfYear - the day of the year of the new date\n * @returns {Date} the new date with the day of the year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 2nd day of the year to 2 July 2014:\n * var result = setDayOfYear(new Date(2014, 6, 2), 2)\n * //=> Thu Jan 02 2014 00:00:00\n */\nexport default function setDayOfYear(dirtyDate, dirtyDayOfYear) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var dayOfYear = toInteger(dirtyDayOfYear)\n  date.setMonth(0)\n  date.setDate(dayOfYear)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setHours\n * @category Hour Helpers\n * @summary Set the hours to the given date.\n *\n * @description\n * Set the hours to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} hours - the hours of the new date\n * @returns {Date} the new date with the hours set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 4 hours to 1 September 2014 11:30:00:\n * var result = setHours(new Date(2014, 8, 1, 11, 30), 4)\n * //=> Mon Sep 01 2014 04:30:00\n */\nexport default function setHours(dirtyDate, dirtyHours) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var hours = toInteger(dirtyHours)\n  date.setHours(hours)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport addDays from '../addDays/index.js'\nimport getISODay from '../getISODay/index.js'\n\n/**\n * @name setISODay\n * @category Weekday Helpers\n * @summary Set the day of the ISO week to the given date.\n *\n * @description\n * Set the day of the ISO week to the given date.\n * ISO week starts with Monday.\n * 7 is the index of Sunday, 1 is the index of Monday etc.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} day - the day of the ISO week of the new date\n * @returns {Date} the new date with the day of the ISO week set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * var result = setISODay(new Date(2014, 8, 1), 7)\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function setISODay(dirtyDate, dirtyDay) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var day = toInteger(dirtyDay)\n  var currentDay = getISODay(date)\n  var diff = day - currentDay\n  return addDays(date, diff)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport getISOWeek from '../getISOWeek/index.js'\n\n/**\n * @name setISOWeek\n * @category ISO Week Helpers\n * @summary Set the ISO week to the given date.\n *\n * @description\n * Set the ISO week to the given date, saving the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} isoWeek - the ISO week of the new date\n * @returns {Date} the new date with the ISO week set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 53rd ISO week to 7 August 2004:\n * var result = setISOWeek(new Date(2004, 7, 7), 53)\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport default function setISOWeek(dirtyDate, dirtyISOWeek) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var isoWeek = toInteger(dirtyISOWeek)\n  var diff = getISOWeek(date) - isoWeek\n  date.setDate(date.getDate() - diff * 7)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport startOfISOWeekYear from '../startOfISOWeekYear/index.js'\nimport differenceInCalendarDays from '../differenceInCalendarDays/index.js'\n\n/**\n * @name setISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Set the ISO week-numbering year to the given date.\n *\n * @description\n * Set the ISO week-numbering year to the given date,\n * saving the week number and the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `setISOYear` to `setISOWeekYear`.\n *   \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n *   This change makes the name consistent with\n *   locale-dependent week-numbering year helpers, e.g., `setWeekYear`.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} isoWeekYear - the ISO week-numbering year of the new date\n * @returns {Date} the new date with the ISO week-numbering year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set ISO week-numbering year 2007 to 29 December 2008:\n * var result = setISOWeekYear(new Date(2008, 11, 29), 2007)\n * //=> Mon Jan 01 2007 00:00:00\n */\nexport default function setISOWeekYear(dirtyDate, dirtyISOWeekYear) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var isoWeekYear = toInteger(dirtyISOWeekYear)\n  var diff = differenceInCalendarDays(date, startOfISOWeekYear(date))\n  var fourthOfJanuary = new Date(0)\n  fourthOfJanuary.setFullYear(isoWeekYear, 0, 4)\n  fourthOfJanuary.setHours(0, 0, 0, 0)\n  date = startOfISOWeekYear(fourthOfJanuary)\n  date.setDate(date.getDate() + diff)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setMilliseconds\n * @category Millisecond Helpers\n * @summary Set the milliseconds to the given date.\n *\n * @description\n * Set the milliseconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} milliseconds - the milliseconds of the new date\n * @returns {Date} the new date with the milliseconds set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 300 milliseconds to 1 September 2014 11:30:40.500:\n * var result = setMilliseconds(new Date(2014, 8, 1, 11, 30, 40, 500), 300)\n * //=> Mon Sep 01 2014 11:30:40.300\n */\nexport default function setMilliseconds(dirtyDate, dirtyMilliseconds) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var milliseconds = toInteger(dirtyMilliseconds)\n  date.setMilliseconds(milliseconds)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setMinutes\n * @category Minute Helpers\n * @summary Set the minutes to the given date.\n *\n * @description\n * Set the minutes to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} minutes - the minutes of the new date\n * @returns {Date} the new date with the minutes set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 minutes to 1 September 2014 11:30:40:\n * var result = setMinutes(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:45:40\n */\nexport default function setMinutes(dirtyDate, dirtyMinutes) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var minutes = toInteger(dirtyMinutes)\n  date.setMinutes(minutes)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport getDaysInMonth from '../getDaysInMonth/index.js'\n\n/**\n * @name setMonth\n * @category Month Helpers\n * @summary Set the month to the given date.\n *\n * @description\n * Set the month to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} month - the month of the new date\n * @returns {Date} the new date with the month set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set February to 1 September 2014:\n * var result = setMonth(new Date(2014, 8, 1), 1)\n * //=> Sat Feb 01 2014 00:00:00\n */\nexport default function setMonth(dirtyDate, dirtyMonth) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var month = toInteger(dirtyMonth)\n  var year = date.getFullYear()\n  var day = date.getDate()\n\n  var dateWithDesiredMonth = new Date(0)\n  dateWithDesiredMonth.setFullYear(year, month, 15)\n  dateWithDesiredMonth.setHours(0, 0, 0, 0)\n  var daysInMonth = getDaysInMonth(dateWithDesiredMonth)\n  // Set the last day of the new month\n  // if the original date was the last day of the longer month\n  date.setMonth(month, Math.min(day, daysInMonth))\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport setMonth from '../setMonth/index.js'\n\n/**\n * @name setQuarter\n * @category Quarter Helpers\n * @summary Set the year quarter to the given date.\n *\n * @description\n * Set the year quarter to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} quarter - the quarter of the new date\n * @returns {Date} the new date with the quarter set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 2nd quarter to 2 July 2014:\n * var result = setQuarter(new Date(2014, 6, 2), 2)\n * //=> Wed Apr 02 2014 00:00:00\n */\nexport default function setQuarter(dirtyDate, dirtyQuarter) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var quarter = toInteger(dirtyQuarter)\n  var oldQuarter = Math.floor(date.getMonth() / 3) + 1\n  var diff = quarter - oldQuarter\n  return setMonth(date, date.getMonth() + diff * 3)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setSeconds\n * @category Second Helpers\n * @summary Set the seconds to the given date.\n *\n * @description\n * Set the seconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} seconds - the seconds of the new date\n * @returns {Date} the new date with the seconds set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 seconds to 1 September 2014 11:30:40:\n * var result = setSeconds(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:30:45\n */\nexport default function setSeconds(dirtyDate, dirtySeconds) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var seconds = toInteger(dirtySeconds)\n  date.setSeconds(seconds)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport getWeek from '../getWeek/index.js'\n\n/**\n * @name setWeek\n * @category Week Helpers\n * @summary Set the local week to the given date.\n *\n * @description\n * Set the local week to the given date, saving the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} week - the week of the new date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Date} the new date with the local week set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Set the 1st week to 2 January 2005 with default options:\n * var result = setWeek(new Date(2005, 0, 2), 1)\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // Set the 1st week to 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January:\n * var result = setWeek(new Date(2005, 0, 2), 1, {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Sun Jan 4 2004 00:00:00\n */\nexport default function setWeek(dirtyDate, dirtyWeek, dirtyOptions) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var week = toInteger(dirtyWeek)\n  var diff = getWeek(date, dirtyOptions) - week\n  date.setDate(date.getDate() - diff * 7)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport startOfWeekYear from '../startOfWeekYear/index.js'\nimport differenceInCalendarDays from '../differenceInCalendarDays/index.js'\n\n/**\n * @name setWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Set the local week-numbering year to the given date.\n *\n * @description\n * Set the local week-numbering year to the given date,\n * saving the week number and the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} weekYear - the local week-numbering year of the new date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Date} the new date with the local week-numbering year set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Set the local week-numbering year 2004 to 2 January 2010 with default options:\n * var result = setWeekYear(new Date(2010, 0, 2), 2004)\n * //=> Sat Jan 03 2004 00:00:00\n *\n * @example\n * // Set the local week-numbering year 2004 to 2 January 2010,\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * var result = setWeekYear(new Date(2010, 0, 2), 2004, {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport default function setWeekYear(dirtyDate, dirtyWeekYear, dirtyOptions) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeFirstWeekContainsDate =\n    locale && locale.options && locale.options.firstWeekContainsDate\n  var defaultFirstWeekContainsDate =\n    localeFirstWeekContainsDate == null\n      ? 1\n      : toInteger(localeFirstWeekContainsDate)\n  var firstWeekContainsDate =\n    options.firstWeekContainsDate == null\n      ? defaultFirstWeekContainsDate\n      : toInteger(options.firstWeekContainsDate)\n\n  var date = toDate(dirtyDate)\n  var weekYear = toInteger(dirtyWeekYear)\n  var diff = differenceInCalendarDays(date, startOfWeekYear(date, dirtyOptions))\n  var firstWeek = new Date(0)\n  firstWeek.setFullYear(weekYear, 0, firstWeekContainsDate)\n  firstWeek.setHours(0, 0, 0, 0)\n  date = startOfWeekYear(firstWeek, dirtyOptions)\n  date.setDate(date.getDate() + diff)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setYear\n * @category Year Helpers\n * @summary Set the year to the given date.\n *\n * @description\n * Set the year to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} year - the year of the new date\n * @returns {Date} the new date with the year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set year 2013 to 1 September 2014:\n * var result = setYear(new Date(2014, 8, 1), 2013)\n * //=> Sun Sep 01 2013 00:00:00\n */\nexport default function setYear(dirtyDate, dirtyYear) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = toInteger(dirtyYear)\n\n  // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\n  if (isNaN(date)) {\n    return new Date(NaN)\n  }\n\n  date.setFullYear(year)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * var result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport default function startOfDay(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfDecade\n * @category Decade Helpers\n * @summary Return the start of a decade for the given date.\n *\n * @description\n * Return the start of a decade for the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a decade\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a decade for 21 October 2015 00:00:00:\n * var result = startOfDecade(new Date(2015, 9, 21, 00, 00, 00))\n * //=> Jan 01 2010 00:00:00\n */\nexport default function startOfDecade(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n  var decade = Math.floor(year / 10) * 10\n  date.setFullYear(decade, 0, 1)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfHour\n * @category Hour Helpers\n * @summary Return the start of an hour for the given date.\n *\n * @description\n * Return the start of an hour for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an hour\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an hour for 2 September 2014 11:55:00:\n * var result = startOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:00:00\n */\nexport default function startOfHour(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  date.setMinutes(0, 0, 0)\n  return date\n}\n","import startOfWeek from '../startOfWeek/index.js'\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * var result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfISOWeek(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return startOfWeek(dirtyDate, { weekStartsOn: 1 })\n}\n","import getISOWeekYear from '../getISOWeekYear/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * var result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport default function startOfISOWeekYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var year = getISOWeekYear(dirtyDate)\n  var fourthOfJanuary = new Date(0)\n  fourthOfJanuary.setFullYear(year, 0, 4)\n  fourthOfJanuary.setHours(0, 0, 0, 0)\n  var date = startOfISOWeek(fourthOfJanuary)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfMinute\n * @category Minute Helpers\n * @summary Return the start of a minute for the given date.\n *\n * @description\n * Return the start of a minute for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a minute\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a minute for 1 December 2014 22:15:45.400:\n * var result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:00\n */\nexport default function startOfMinute(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  date.setSeconds(0, 0)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * var result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfMonth(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  date.setDate(1)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfQuarter\n * @category Quarter Helpers\n * @summary Return the start of a year quarter for the given date.\n *\n * @description\n * Return the start of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a quarter for 2 September 2014 11:55:00:\n * var result = startOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Jul 01 2014 00:00:00\n */\nexport default function startOfQuarter(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var currentMonth = date.getMonth()\n  var month = currentMonth - (currentMonth % 3)\n  date.setMonth(month, 1)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfSecond\n * @category Second Helpers\n * @summary Return the start of a second for the given date.\n *\n * @description\n * Return the start of a second for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a second\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a second for 1 December 2014 22:15:45.400:\n * var result = startOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.000\n */\nexport default function startOfSecond(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  date.setMilliseconds(0)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Date} the start of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfWeek(dirtyDate, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeWeekStartsOn =\n    locale && locale.options && locale.options.weekStartsOn\n  var defaultWeekStartsOn =\n    localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n  var weekStartsOn =\n    options.weekStartsOn == null\n      ? defaultWeekStartsOn\n      : toInteger(options.weekStartsOn)\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n  }\n\n  var date = toDate(dirtyDate)\n  var day = date.getDay()\n  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn\n\n  date.setDate(date.getDate() - diff)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport getWeekYear from '../getWeekYear/index.js'\nimport startOfWeek from '../startOfWeek/index.js'\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Date} the start of a week-numbering year\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * var result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * var result = startOfWeekYear(new Date(2005, 6, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport default function startOfWeekYear(dirtyDate, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeFirstWeekContainsDate =\n    locale && locale.options && locale.options.firstWeekContainsDate\n  var defaultFirstWeekContainsDate =\n    localeFirstWeekContainsDate == null\n      ? 1\n      : toInteger(localeFirstWeekContainsDate)\n  var firstWeekContainsDate =\n    options.firstWeekContainsDate == null\n      ? defaultFirstWeekContainsDate\n      : toInteger(options.firstWeekContainsDate)\n\n  var year = getWeekYear(dirtyDate, dirtyOptions)\n  var firstWeek = new Date(0)\n  firstWeek.setFullYear(year, 0, firstWeekContainsDate)\n  firstWeek.setHours(0, 0, 0, 0)\n  var date = startOfWeek(firstWeek, dirtyOptions)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * var result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport default function startOfYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var cleanDate = toDate(dirtyDate)\n  var date = new Date(0)\n  date.setFullYear(cleanDate.getFullYear(), 0, 1)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addDays from '../addDays/index.js'\n\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @description\n * Subtract the specified number of days from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be subtracted\n * @returns {Date} the new date with the days subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * var result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\nexport default function subDays(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addDays(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addHours from '../addHours/index.js'\n\n/**\n * @name subHours\n * @category Hour Helpers\n * @summary Subtract the specified number of hours from the given date.\n *\n * @description\n * Subtract the specified number of hours from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of hours to be subtracted\n * @returns {Date} the new date with the hours subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 2 hours from 11 July 2014 01:00:00:\n * var result = subHours(new Date(2014, 6, 11, 1, 0), 2)\n * //=> Thu Jul 10 2014 23:00:00\n */\nexport default function subHours(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addHours(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addISOWeekYears from '../addISOWeekYears/index.js'\n\n/**\n * @name subISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Subtract the specified number of ISO week-numbering years from the given date.\n *\n * @description\n * Subtract the specified number of ISO week-numbering years from the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `subISOYears` to `subISOWeekYears`.\n *   \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n *   This change makes the name consistent with\n *   locale-dependent week-numbering year helpers, e.g., `setWeekYear`.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of ISO week-numbering years to be subtracted\n * @returns {Date} the new date with the ISO week-numbering years subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 ISO week-numbering years from 1 September 2014:\n * var result = subISOWeekYears(new Date(2014, 8, 1), 5)\n * //=> Mon Aug 31 2009 00:00:00\n */\nexport default function subISOWeekYears(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addISOWeekYears(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMilliseconds from '../addMilliseconds/index.js'\n\n/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * var result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\nexport default function subMilliseconds(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addMilliseconds(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMinutes from '../addMinutes/index.js'\n\n/**\n * @name subMinutes\n * @category Minute Helpers\n * @summary Subtract the specified number of minutes from the given date.\n *\n * @description\n * Subtract the specified number of minutes from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of minutes to be subtracted\n * @returns {Date} the new date with the minutes subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 30 minutes from 10 July 2014 12:00:00:\n * var result = subMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 11:30:00\n */\nexport default function subMinutes(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addMinutes(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMonths from '../addMonths/index.js'\n\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be subtracted\n * @returns {Date} the new date with the months subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * var result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function subMonths(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addMonths(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addQuarters from '../addQuarters/index.js'\n\n/**\n * @name subQuarters\n * @category Quarter Helpers\n * @summary Subtract the specified number of year quarters from the given date.\n *\n * @description\n * Subtract the specified number of year quarters from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of quarters to be subtracted\n * @returns {Date} the new date with the quarters subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 3 quarters from 1 September 2014:\n * var result = subQuarters(new Date(2014, 8, 1), 3)\n * //=> Sun Dec 01 2013 00:00:00\n */\nexport default function subQuarters(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addQuarters(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addSeconds from '../addSeconds/index.js'\n\n/**\n * @name subSeconds\n * @category Second Helpers\n * @summary Subtract the specified number of seconds from the given date.\n *\n * @description\n * Subtract the specified number of seconds from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of seconds to be subtracted\n * @returns {Date} the new date with the seconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 30 seconds from 10 July 2014 12:45:00:\n * var result = subSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:44:30\n */\nexport default function subSeconds(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addSeconds(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addWeeks from '../addWeeks/index.js'\n\n/**\n * @name subWeeks\n * @category Week Helpers\n * @summary Subtract the specified number of weeks from the given date.\n *\n * @description\n * Subtract the specified number of weeks from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of weeks to be subtracted\n * @returns {Date} the new date with the weeks subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 4 weeks from 1 September 2014:\n * var result = subWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Aug 04 2014 00:00:00\n */\nexport default function subWeeks(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addWeeks(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addYears from '../addYears/index.js'\n\n/**\n * @name subYears\n * @category Year Helpers\n * @summary Subtract the specified number of years from the given date.\n *\n * @description\n * Subtract the specified number of years from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be subtracted\n * @returns {Date} the new date with the years subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 years from 1 September 2014:\n * var result = subYears(new Date(2014, 8, 1), 5)\n * //=> Tue Sep 01 2009 00:00:00\n */\nexport default function subYears(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addYears(dirtyDate, -amount)\n}\n","/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * var result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * var result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport default function toDate(argument) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var argStr = Object.prototype.toString.call(argument)\n\n  // Clone the date\n  if (\n    argument instanceof Date ||\n    (typeof argument === 'object' && argStr === '[object Date]')\n  ) {\n    // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n    return new Date(argument.getTime())\n  } else if (typeof argument === 'number' || argStr === '[object Number]') {\n    return new Date(argument)\n  } else {\n    if (\n      (typeof argument === 'string' || argStr === '[object String]') &&\n      typeof console !== 'undefined'\n    ) {\n      console.warn(\n        \"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as arguments. Please use `parseISO` to parse strings. See: https://git.io/fpAk2\"\n      )\n      console.warn(new Error().stack)\n    }\n    return new Date(NaN)\n  }\n}\n","'use strict';\n\nvar objectKeys = require('object-keys');\nvar isArguments = require('is-arguments');\nvar is = require('object-is');\nvar isRegex = require('is-regex');\nvar flags = require('regexp.prototype.flags');\nvar isArray = require('isarray');\nvar isDate = require('is-date-object');\nvar whichBoxedPrimitive = require('which-boxed-primitive');\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bind/callBound');\nvar whichCollection = require('which-collection');\nvar getIterator = require('es-get-iterator');\nvar getSideChannel = require('side-channel');\nvar whichTypedArray = require('which-typed-array');\nvar assign = require('object.assign');\n\nvar $getTime = callBound('Date.prototype.getTime');\nvar gPO = Object.getPrototypeOf;\nvar $objToString = callBound('Object.prototype.toString');\n\nvar $Set = GetIntrinsic('%Set%', true);\nvar $mapHas = callBound('Map.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSize = callBound('Map.prototype.size', true);\nvar $setAdd = callBound('Set.prototype.add', true);\nvar $setDelete = callBound('Set.prototype.delete', true);\nvar $setHas = callBound('Set.prototype.has', true);\nvar $setSize = callBound('Set.prototype.size', true);\n\n// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L401-L414\nfunction setHasEqualElement(set, val1, opts, channel) {\n  var i = getIterator(set);\n  var result;\n  while ((result = i.next()) && !result.done) {\n    if (internalDeepEqual(val1, result.value, opts, channel)) { // eslint-disable-line no-use-before-define\n      // Remove the matching element to make sure we do not check that again.\n      $setDelete(set, result.value);\n      return true;\n    }\n  }\n\n  return false;\n}\n\n// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L416-L439\nfunction findLooseMatchingPrimitives(prim) {\n  if (typeof prim === 'undefined') {\n    return null;\n  }\n  if (typeof prim === 'object') { // Only pass in null as object!\n    return void 0;\n  }\n  if (typeof prim === 'symbol') {\n    return false;\n  }\n  if (typeof prim === 'string' || typeof prim === 'number') {\n    // Loose equal entries exist only if the string is possible to convert to a regular number and not NaN.\n    return +prim === +prim; // eslint-disable-line no-implicit-coercion\n  }\n  return true;\n}\n\n// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L449-L460\nfunction mapMightHaveLoosePrim(a, b, prim, item, opts, channel) {\n  var altValue = findLooseMatchingPrimitives(prim);\n  if (altValue != null) {\n    return altValue;\n  }\n  var curB = $mapGet(b, altValue);\n  var looseOpts = assign({}, opts, { strict: false });\n  if (\n    (typeof curB === 'undefined' && !$mapHas(b, altValue))\n    // eslint-disable-next-line no-use-before-define\n    || !internalDeepEqual(item, curB, looseOpts, channel)\n  ) {\n    return false;\n  }\n  // eslint-disable-next-line no-use-before-define\n  return !$mapHas(a, altValue) && internalDeepEqual(item, curB, looseOpts, channel);\n}\n\n// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L441-L447\nfunction setMightHaveLoosePrim(a, b, prim) {\n  var altValue = findLooseMatchingPrimitives(prim);\n  if (altValue != null) {\n    return altValue;\n  }\n\n  return $setHas(b, altValue) && !$setHas(a, altValue);\n}\n\n// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L518-L533\nfunction mapHasEqualEntry(set, map, key1, item1, opts, channel) {\n  var i = getIterator(set);\n  var result;\n  var key2;\n  while ((result = i.next()) && !result.done) {\n    key2 = result.value;\n    if (\n      // eslint-disable-next-line no-use-before-define\n      internalDeepEqual(key1, key2, opts, channel)\n      // eslint-disable-next-line no-use-before-define\n      && internalDeepEqual(item1, $mapGet(map, key2), opts, channel)\n    ) {\n      $setDelete(set, key2);\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction internalDeepEqual(actual, expected, options, channel) {\n  var opts = options || {};\n\n  // 7.1. All identical values are equivalent, as determined by ===.\n  if (opts.strict ? is(actual, expected) : actual === expected) {\n    return true;\n  }\n\n  var actualBoxed = whichBoxedPrimitive(actual);\n  var expectedBoxed = whichBoxedPrimitive(expected);\n  if (actualBoxed !== expectedBoxed) {\n    return false;\n  }\n\n  // 7.3. Other pairs that do not both pass typeof value == 'object', equivalence is determined by ==.\n  if (!actual || !expected || (typeof actual !== 'object' && typeof expected !== 'object')) {\n    return opts.strict ? is(actual, expected) : actual == expected; // eslint-disable-line eqeqeq\n  }\n\n  /*\n   * 7.4. For all other Object pairs, including Array objects, equivalence is\n   * determined by having the same number of owned properties (as verified\n   * with Object.prototype.hasOwnProperty.call), the same set of keys\n   * (although not necessarily the same order), equivalent values for every\n   * corresponding key, and an identical 'prototype' property. Note: this\n   * accounts for both named and indexed properties on Arrays.\n   */\n  // see https://github.com/nodejs/node/commit/d3aafd02efd3a403d646a3044adcf14e63a88d32 for memos/channel inspiration\n\n  var hasActual = channel.has(actual);\n  var hasExpected = channel.has(expected);\n  var sentinel;\n  if (hasActual && hasExpected) {\n    if (channel.get(actual) === channel.get(expected)) {\n      return true;\n    }\n  } else {\n    sentinel = {};\n  }\n  if (!hasActual) { channel.set(actual, sentinel); }\n  if (!hasExpected) { channel.set(expected, sentinel); }\n\n  // eslint-disable-next-line no-use-before-define\n  return objEquiv(actual, expected, opts, channel);\n}\n\nfunction isBuffer(x) {\n  if (!x || typeof x !== 'object' || typeof x.length !== 'number') {\n    return false;\n  }\n  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n    return false;\n  }\n  if (x.length > 0 && typeof x[0] !== 'number') {\n    return false;\n  }\n\n  return !!(x.constructor && x.constructor.isBuffer && x.constructor.isBuffer(x));\n}\n\nfunction setEquiv(a, b, opts, channel) {\n  if ($setSize(a) !== $setSize(b)) {\n    return false;\n  }\n  var iA = getIterator(a);\n  var iB = getIterator(b);\n  var resultA;\n  var resultB;\n  var set;\n  while ((resultA = iA.next()) && !resultA.done) {\n    if (resultA.value && typeof resultA.value === 'object') {\n      if (!set) { set = new $Set(); }\n      $setAdd(set, resultA.value);\n    } else if (!$setHas(b, resultA.value)) {\n      if (opts.strict) { return false; }\n      if (!setMightHaveLoosePrim(a, b, resultA.value)) {\n        return false;\n      }\n      if (!set) { set = new $Set(); }\n      $setAdd(set, resultA.value);\n    }\n  }\n  if (set) {\n    while ((resultB = iB.next()) && !resultB.done) {\n      // We have to check if a primitive value is already matching and only if it's not, go hunting for it.\n      if (resultB.value && typeof resultB.value === 'object') {\n        if (!setHasEqualElement(set, resultB.value, opts.strict, channel)) {\n          return false;\n        }\n      } else if (\n        !opts.strict\n        && !$setHas(a, resultB.value)\n        && !setHasEqualElement(set, resultB.value, opts.strict, channel)\n      ) {\n        return false;\n      }\n    }\n    return $setSize(set) === 0;\n  }\n  return true;\n}\n\nfunction mapEquiv(a, b, opts, channel) {\n  if ($mapSize(a) !== $mapSize(b)) {\n    return false;\n  }\n  var iA = getIterator(a);\n  var iB = getIterator(b);\n  var resultA;\n  var resultB;\n  var set;\n  var key;\n  var item1;\n  var item2;\n  while ((resultA = iA.next()) && !resultA.done) {\n    key = resultA.value[0];\n    item1 = resultA.value[1];\n    if (key && typeof key === 'object') {\n      if (!set) { set = new $Set(); }\n      $setAdd(set, key);\n    } else {\n      item2 = $mapGet(b, key);\n      if ((typeof item2 === 'undefined' && !$mapHas(b, key)) || !internalDeepEqual(item1, item2, opts, channel)) {\n        if (opts.strict) {\n          return false;\n        }\n        if (!mapMightHaveLoosePrim(a, b, key, item1, opts, channel)) {\n          return false;\n        }\n        if (!set) { set = new $Set(); }\n        $setAdd(set, key);\n      }\n    }\n  }\n\n  if (set) {\n    while ((resultB = iB.next()) && !resultB.done) {\n      key = resultB.value[0];\n      item2 = resultB.value[1];\n      if (key && typeof key === 'object') {\n        if (!mapHasEqualEntry(set, a, key, item2, opts, channel)) {\n          return false;\n        }\n      } else if (\n        !opts.strict\n        && (!a.has(key) || !internalDeepEqual($mapGet(a, key), item2, opts, channel))\n        && !mapHasEqualEntry(set, a, key, item2, assign({}, opts, { strict: false }), channel)\n      ) {\n        return false;\n      }\n    }\n    return $setSize(set) === 0;\n  }\n  return true;\n}\n\nfunction objEquiv(a, b, opts, channel) {\n  /* eslint max-statements: [2, 100], max-lines-per-function: [2, 120], max-depth: [2, 5] */\n  var i, key;\n\n  if (typeof a !== typeof b) { return false; }\n  if (a == null || b == null) { return false; }\n\n  if ($objToString(a) !== $objToString(b)) { return false; }\n\n  if (isArguments(a) !== isArguments(b)) { return false; }\n\n  var aIsArray = isArray(a);\n  var bIsArray = isArray(b);\n  if (aIsArray !== bIsArray) { return false; }\n\n  // TODO: replace when a cross-realm brand check is available\n  var aIsError = a instanceof Error;\n  var bIsError = b instanceof Error;\n  if (aIsError !== bIsError) { return false; }\n  if (aIsError || bIsError) {\n    if (a.name !== b.name || a.message !== b.message) { return false; }\n  }\n\n  var aIsRegex = isRegex(a);\n  var bIsRegex = isRegex(b);\n  if (aIsRegex !== bIsRegex) { return false; }\n  if ((aIsRegex || bIsRegex) && (a.source !== b.source || flags(a) !== flags(b))) {\n    return false;\n  }\n\n  var aIsDate = isDate(a);\n  var bIsDate = isDate(b);\n  if (aIsDate !== bIsDate) { return false; }\n  if (aIsDate || bIsDate) { // && would work too, because both are true or both false here\n    if ($getTime(a) !== $getTime(b)) { return false; }\n  }\n  if (opts.strict && gPO && gPO(a) !== gPO(b)) { return false; }\n\n  if (whichTypedArray(a) !== whichTypedArray(b)) {\n    return false;\n  }\n\n  var aIsBuffer = isBuffer(a);\n  var bIsBuffer = isBuffer(b);\n  if (aIsBuffer !== bIsBuffer) { return false; }\n  if (aIsBuffer || bIsBuffer) { // && would work too, because both are true or both false here\n    if (a.length !== b.length) { return false; }\n    for (i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) { return false; }\n    }\n    return true;\n  }\n\n  if (typeof a !== typeof b) { return false; }\n\n  var ka = objectKeys(a);\n  var kb = objectKeys(b);\n  // having the same number of owned properties (keys incorporates hasOwnProperty)\n  if (ka.length !== kb.length) { return false; }\n\n  // the same set of keys (although not necessarily the same order),\n  ka.sort();\n  kb.sort();\n  // ~~~cheap key test\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i]) { return false; } // eslint-disable-line eqeqeq\n  }\n\n  // equivalent values for every corresponding key, and ~~~possibly expensive deep test\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!internalDeepEqual(a[key], b[key], opts, channel)) { return false; }\n  }\n\n  var aCollection = whichCollection(a);\n  var bCollection = whichCollection(b);\n  if (aCollection !== bCollection) {\n    return false;\n  }\n  if (aCollection === 'Set' || bCollection === 'Set') { // aCollection === bCollection\n    return setEquiv(a, b, opts, channel);\n  }\n  if (aCollection === 'Map') { // aCollection === bCollection\n    return mapEquiv(a, b, opts, channel);\n  }\n\n  return true;\n}\n\nmodule.exports = function deepEqual(a, b, opts) {\n  return internalDeepEqual(a, b, opts, getSideChannel());\n};\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n","'use strict';\n\nvar keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $Array = GetIntrinsic('%Array%');\nvar $species = GetIntrinsic('%Symbol.species%', true);\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Get = require('./Get');\nvar IsArray = require('./IsArray');\nvar IsConstructor = require('./IsConstructor');\nvar IsInteger = require('./IsInteger');\nvar Type = require('./Type');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-arrayspeciescreate\n\nmodule.exports = function ArraySpeciesCreate(originalArray, length) {\n\tif (!IsInteger(length) || length < 0) {\n\t\tthrow new $TypeError('Assertion failed: length must be an integer >= 0');\n\t}\n\tvar len = length === 0 ? 0 : length;\n\tvar C;\n\tvar isArray = IsArray(originalArray);\n\tif (isArray) {\n\t\tC = Get(originalArray, 'constructor');\n\t\t// TODO: figure out how to make a cross-realm normal Array, a same-realm Array\n\t\t// if (IsConstructor(C)) {\n\t\t// \tif C is another realm's Array, C = undefined\n\t\t// \tObject.getPrototypeOf(Object.getPrototypeOf(Object.getPrototypeOf(Array))) === null ?\n\t\t// }\n\t\tif ($species && Type(C) === 'Object') {\n\t\t\tC = Get(C, $species);\n\t\t\tif (C === null) {\n\t\t\t\tC = void 0;\n\t\t\t}\n\t\t}\n\t}\n\tif (typeof C === 'undefined') {\n\t\treturn $Array(len);\n\t}\n\tif (!IsConstructor(C)) {\n\t\tthrow new $TypeError('C must be a constructor');\n\t}\n\treturn new C(len); // Construct(C, len);\n};\n\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bind/callBound');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsArray = require('./IsArray');\n\nvar $apply = GetIntrinsic('%Reflect.apply%', true) || callBound('%Function.prototype.apply%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-call\n\nmodule.exports = function Call(F, V) {\n\tvar argumentsList = arguments.length > 2 ? arguments[2] : [];\n\tif (!IsArray(argumentsList)) {\n\t\tthrow new $TypeError('Assertion failed: optional `argumentsList`, if provided, must be a List');\n\t}\n\treturn $apply(F, V, argumentsList);\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar DefineOwnProperty = require('../helpers/DefineOwnProperty');\n\nvar FromPropertyDescriptor = require('./FromPropertyDescriptor');\nvar OrdinaryGetOwnProperty = require('./OrdinaryGetOwnProperty');\nvar IsDataDescriptor = require('./IsDataDescriptor');\nvar IsExtensible = require('./IsExtensible');\nvar IsPropertyKey = require('./IsPropertyKey');\nvar SameValue = require('./SameValue');\nvar Type = require('./Type');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-createdataproperty\n\nmodule.exports = function CreateDataProperty(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\tvar oldDesc = OrdinaryGetOwnProperty(O, P);\n\tvar extensible = !oldDesc || IsExtensible(O);\n\tvar immutable = oldDesc && (!oldDesc['[[Writable]]'] || !oldDesc['[[Configurable]]']);\n\tif (immutable || !extensible) {\n\t\treturn false;\n\t}\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\t{\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Value]]': V,\n\t\t\t'[[Writable]]': true\n\t\t}\n\t);\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar CreateDataProperty = require('./CreateDataProperty');\nvar IsPropertyKey = require('./IsPropertyKey');\nvar Type = require('./Type');\n\n// // https://ecma-international.org/ecma-262/6.0/#sec-createdatapropertyorthrow\n\nmodule.exports = function CreateDataPropertyOrThrow(O, P, V) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\tvar success = CreateDataProperty(O, P, V);\n\tif (!success) {\n\t\tthrow new $TypeError('unable to create data property');\n\t}\n\treturn success;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar isPropertyDescriptor = require('../helpers/isPropertyDescriptor');\nvar DefineOwnProperty = require('../helpers/DefineOwnProperty');\n\nvar FromPropertyDescriptor = require('./FromPropertyDescriptor');\nvar IsAccessorDescriptor = require('./IsAccessorDescriptor');\nvar IsDataDescriptor = require('./IsDataDescriptor');\nvar IsPropertyKey = require('./IsPropertyKey');\nvar SameValue = require('./SameValue');\nvar ToPropertyDescriptor = require('./ToPropertyDescriptor');\nvar Type = require('./Type');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-definepropertyorthrow\n\nmodule.exports = function DefinePropertyOrThrow(O, P, desc) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true');\n\t}\n\n\tvar Desc = isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, desc) ? desc : ToPropertyDescriptor(desc);\n\tif (!isPropertyDescriptor({\n\t\tType: Type,\n\t\tIsDataDescriptor: IsDataDescriptor,\n\t\tIsAccessorDescriptor: IsAccessorDescriptor\n\t}, Desc)) {\n\t\tthrow new $TypeError('Assertion failed: Desc is not a valid Property Descriptor');\n\t}\n\n\treturn DefineOwnProperty(\n\t\tIsDataDescriptor,\n\t\tSameValue,\n\t\tFromPropertyDescriptor,\n\t\tO,\n\t\tP,\n\t\tDesc\n\t);\n};\n","'use strict';\n\nvar assertRecord = require('../helpers/assertRecord');\n\nvar Type = require('./Type');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-frompropertydescriptor\n\nmodule.exports = function FromPropertyDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn Desc;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tvar obj = {};\n\tif ('[[Value]]' in Desc) {\n\t\tobj.value = Desc['[[Value]]'];\n\t}\n\tif ('[[Writable]]' in Desc) {\n\t\tobj.writable = Desc['[[Writable]]'];\n\t}\n\tif ('[[Get]]' in Desc) {\n\t\tobj.get = Desc['[[Get]]'];\n\t}\n\tif ('[[Set]]' in Desc) {\n\t\tobj.set = Desc['[[Set]]'];\n\t}\n\tif ('[[Enumerable]]' in Desc) {\n\t\tobj.enumerable = Desc['[[Enumerable]]'];\n\t}\n\tif ('[[Configurable]]' in Desc) {\n\t\tobj.configurable = Desc['[[Configurable]]'];\n\t}\n\treturn obj;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar inspect = require('object-inspect');\n\nvar IsPropertyKey = require('./IsPropertyKey');\nvar Type = require('./Type');\n\n/**\n * 7.3.1 Get (O, P) - https://ecma-international.org/ecma-262/6.0/#sec-get-o-p\n * 1. Assert: Type(O) is Object.\n * 2. Assert: IsPropertyKey(P) is true.\n * 3. Return O.[[Get]](P, O).\n */\n\nmodule.exports = function Get(O, P) {\n\t// 7.3.1.1\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: Type(O) is not Object');\n\t}\n\t// 7.3.1.2\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: IsPropertyKey(P) is not true, got ' + inspect(P));\n\t}\n\t// 7.3.1.3\n\treturn O[P];\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar IsPropertyKey = require('./IsPropertyKey');\nvar Type = require('./Type');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-hasproperty\n\nmodule.exports = function HasProperty(O, P) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `O` must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: `P` must be a Property Key');\n\t}\n\treturn P in O;\n};\n","'use strict';\n\nvar has = require('has');\n\nvar assertRecord = require('../helpers/assertRecord');\n\nvar Type = require('./Type');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isaccessordescriptor\n\nmodule.exports = function IsAccessorDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $Array = GetIntrinsic('%Array%');\n\n// eslint-disable-next-line global-require\nvar toStr = !$Array.isArray && require('call-bind/callBound')('Object.prototype.toString');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isarray\n\nmodule.exports = $Array.isArray || function IsArray(argument) {\n\treturn toStr(argument) === '[object Array]';\n};\n","'use strict';\n\n// http://262.ecma-international.org/5.1/#sec-9.11\n\nmodule.exports = require('is-callable');\n","'use strict';\n\nvar GetIntrinsic = require('../GetIntrinsic.js');\n\nvar $construct = GetIntrinsic('%Reflect.construct%', true);\n\nvar DefinePropertyOrThrow = require('./DefinePropertyOrThrow');\ntry {\n\tDefinePropertyOrThrow({}, '', { '[[Get]]': function () {} });\n} catch (e) {\n\t// Accessor properties aren't supported\n\tDefinePropertyOrThrow = null;\n}\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isconstructor\n\nif (DefinePropertyOrThrow && $construct) {\n\tvar isConstructorMarker = {};\n\tvar badArrayLike = {};\n\tDefinePropertyOrThrow(badArrayLike, 'length', {\n\t\t'[[Get]]': function () {\n\t\t\tthrow isConstructorMarker;\n\t\t},\n\t\t'[[Enumerable]]': true\n\t});\n\n\tmodule.exports = function IsConstructor(argument) {\n\t\ttry {\n\t\t\t// `Reflect.construct` invokes `IsConstructor(target)` before `Get(args, 'length')`:\n\t\t\t$construct(argument, badArrayLike);\n\t\t} catch (err) {\n\t\t\treturn err === isConstructorMarker;\n\t\t}\n\t};\n} else {\n\tmodule.exports = function IsConstructor(argument) {\n\t\t// unfortunately there's no way to truly check this without try/catch `new argument` in old environments\n\t\treturn typeof argument === 'function' && !!argument.prototype;\n\t};\n}\n","'use strict';\n\nvar has = require('has');\n\nvar assertRecord = require('../helpers/assertRecord');\n\nvar Type = require('./Type');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isdatadescriptor\n\nmodule.exports = function IsDataDescriptor(Desc) {\n\tif (typeof Desc === 'undefined') {\n\t\treturn false;\n\t}\n\n\tassertRecord(Type, 'Property Descriptor', 'Desc', Desc);\n\n\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar isPrimitive = require('../helpers/isPrimitive');\n\nvar $preventExtensions = $Object.preventExtensions;\nvar $isExtensible = $Object.isExtensible;\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isextensible-o\n\nmodule.exports = $preventExtensions\n\t? function IsExtensible(obj) {\n\t\treturn !isPrimitive(obj) && $isExtensible(obj);\n\t}\n\t: function IsExtensible(obj) {\n\t\treturn !isPrimitive(obj);\n\t};\n","'use strict';\n\nvar abs = require('./abs');\nvar floor = require('./floor');\n\nvar $isNaN = require('../helpers/isNaN');\nvar $isFinite = require('../helpers/isFinite');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isinteger\n\nmodule.exports = function IsInteger(argument) {\n\tif (typeof argument !== 'number' || $isNaN(argument) || !$isFinite(argument)) {\n\t\treturn false;\n\t}\n\tvar absValue = abs(argument);\n\treturn floor(absValue) === absValue;\n};\n","'use strict';\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ispropertykey\n\nmodule.exports = function IsPropertyKey(argument) {\n\treturn typeof argument === 'string' || typeof argument === 'symbol';\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $match = GetIntrinsic('%Symbol.match%', true);\n\nvar hasRegExpMatcher = require('is-regex');\n\nvar ToBoolean = require('./ToBoolean');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-isregexp\n\nmodule.exports = function IsRegExp(argument) {\n\tif (!argument || typeof argument !== 'object') {\n\t\treturn false;\n\t}\n\tif ($match) {\n\t\tvar isRegExp = argument[$match];\n\t\tif (typeof isRegExp !== 'undefined') {\n\t\t\treturn ToBoolean(isRegExp);\n\t\t}\n\t}\n\treturn hasRegExpMatcher(argument);\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Get = require('./Get');\nvar ToLength = require('./ToLength');\nvar Type = require('./Type');\n\n// https://262.ecma-international.org/11.0/#sec-lengthofarraylike\n\nmodule.exports = function LengthOfArrayLike(obj) {\n\tif (Type(obj) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: `obj` must be an Object');\n\t}\n\treturn ToLength(Get(obj, 'length'));\n};\n\n// TODO: use this all over\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = require('../helpers/getOwnPropertyDescriptor');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar callBound = require('call-bind/callBound');\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\nvar has = require('has');\n\nvar IsArray = require('./IsArray');\nvar IsPropertyKey = require('./IsPropertyKey');\nvar IsRegExp = require('./IsRegExp');\nvar ToPropertyDescriptor = require('./ToPropertyDescriptor');\nvar Type = require('./Type');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-ordinarygetownproperty\n\nmodule.exports = function OrdinaryGetOwnProperty(O, P) {\n\tif (Type(O) !== 'Object') {\n\t\tthrow new $TypeError('Assertion failed: O must be an Object');\n\t}\n\tif (!IsPropertyKey(P)) {\n\t\tthrow new $TypeError('Assertion failed: P must be a Property Key');\n\t}\n\tif (!has(O, P)) {\n\t\treturn void 0;\n\t}\n\tif (!$gOPD) {\n\t\t// ES3 / IE 8 fallback\n\t\tvar arrayLength = IsArray(O) && P === 'length';\n\t\tvar regexLastIndex = IsRegExp(O) && P === 'lastIndex';\n\t\treturn {\n\t\t\t'[[Configurable]]': !(arrayLength || regexLastIndex),\n\t\t\t'[[Enumerable]]': $isEnumerable(O, P),\n\t\t\t'[[Value]]': O[P],\n\t\t\t'[[Writable]]': true\n\t\t};\n\t}\n\treturn ToPropertyDescriptor($gOPD(O, P));\n};\n","'use strict';\n\nmodule.exports = require('../5/CheckObjectCoercible');\n","'use strict';\n\nvar $isNaN = require('../helpers/isNaN');\n\n// http://262.ecma-international.org/5.1/#sec-9.12\n\nmodule.exports = function SameValue(x, y) {\n\tif (x === y) { // 0 === -0, but they are not identical.\n\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\treturn true;\n\t}\n\treturn $isNaN(x) && $isNaN(y);\n};\n","'use strict';\n\n// http://262.ecma-international.org/5.1/#sec-9.2\n\nmodule.exports = function ToBoolean(value) { return !!value; };\n","'use strict';\n\nvar ES5ToInteger = require('../5/ToInteger');\n\nvar ToNumber = require('./ToNumber');\n\n// https://262.ecma-international.org/11.0/#sec-tointeger\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif (number !== 0) {\n\t\tnumber = ES5ToInteger(number);\n\t}\n\treturn number === 0 ? 0 : number;\n};\n","'use strict';\n\nvar MAX_SAFE_INTEGER = require('../helpers/maxSafeInteger');\n\nvar ToInteger = require('./ToInteger');\n\nmodule.exports = function ToLength(argument) {\n\tvar len = ToInteger(argument);\n\tif (len <= 0) { return 0; } // includes converting -0 to +0\n\tif (len > MAX_SAFE_INTEGER) { return MAX_SAFE_INTEGER; }\n\treturn len;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $Number = GetIntrinsic('%Number%');\nvar $RegExp = GetIntrinsic('%RegExp%');\nvar $parseInteger = GetIntrinsic('%parseInt%');\n\nvar callBound = require('call-bind/callBound');\nvar regexTester = require('../helpers/regexTester');\nvar isPrimitive = require('../helpers/isPrimitive');\n\nvar $strSlice = callBound('String.prototype.slice');\nvar isBinary = regexTester(/^0b[01]+$/i);\nvar isOctal = regexTester(/^0o[0-7]+$/i);\nvar isInvalidHexLiteral = regexTester(/^[-+]0x[0-9a-f]+$/i);\nvar nonWS = ['\\u0085', '\\u200b', '\\ufffe'].join('');\nvar nonWSregex = new $RegExp('[' + nonWS + ']', 'g');\nvar hasNonWS = regexTester(nonWSregex);\n\n// whitespace from: https://es5.github.io/#x15.5.4.20\n// implementation from https://github.com/es-shims/es5-shim/blob/v3.4.0/es5-shim.js#L1304-L1324\nvar ws = [\n\t'\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003',\n\t'\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028',\n\t'\\u2029\\uFEFF'\n].join('');\nvar trimRegex = new RegExp('(^[' + ws + ']+)|([' + ws + ']+$)', 'g');\nvar $replace = callBound('String.prototype.replace');\nvar $trim = function (value) {\n\treturn $replace(value, trimRegex, '');\n};\n\nvar ToPrimitive = require('./ToPrimitive');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tonumber\n\nmodule.exports = function ToNumber(argument) {\n\tvar value = isPrimitive(argument) ? argument : ToPrimitive(argument, $Number);\n\tif (typeof value === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a number');\n\t}\n\tif (typeof value === 'string') {\n\t\tif (isBinary(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 2));\n\t\t} else if (isOctal(value)) {\n\t\t\treturn ToNumber($parseInteger($strSlice(value, 2), 8));\n\t\t} else if (hasNonWS(value) || isInvalidHexLiteral(value)) {\n\t\t\treturn NaN;\n\t\t} else {\n\t\t\tvar trimmed = $trim(value);\n\t\t\tif (trimmed !== value) {\n\t\t\t\treturn ToNumber(trimmed);\n\t\t\t}\n\t\t}\n\t}\n\treturn $Number(value);\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $Object = GetIntrinsic('%Object%');\n\nvar RequireObjectCoercible = require('./RequireObjectCoercible');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toobject\n\nmodule.exports = function ToObject(value) {\n\tRequireObjectCoercible(value);\n\treturn $Object(value);\n};\n","'use strict';\n\nvar toPrimitive = require('es-to-primitive/es2015');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-toprimitive\n\nmodule.exports = function ToPrimitive(input) {\n\tif (arguments.length > 1) {\n\t\treturn toPrimitive(input, arguments[1]);\n\t}\n\treturn toPrimitive(input);\n};\n","'use strict';\n\nvar has = require('has');\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nvar Type = require('./Type');\nvar ToBoolean = require('./ToBoolean');\nvar IsCallable = require('./IsCallable');\n\n// https://262.ecma-international.org/5.1/#sec-8.10.5\n\nmodule.exports = function ToPropertyDescriptor(Obj) {\n\tif (Type(Obj) !== 'Object') {\n\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t}\n\n\tvar desc = {};\n\tif (has(Obj, 'enumerable')) {\n\t\tdesc['[[Enumerable]]'] = ToBoolean(Obj.enumerable);\n\t}\n\tif (has(Obj, 'configurable')) {\n\t\tdesc['[[Configurable]]'] = ToBoolean(Obj.configurable);\n\t}\n\tif (has(Obj, 'value')) {\n\t\tdesc['[[Value]]'] = Obj.value;\n\t}\n\tif (has(Obj, 'writable')) {\n\t\tdesc['[[Writable]]'] = ToBoolean(Obj.writable);\n\t}\n\tif (has(Obj, 'get')) {\n\t\tvar getter = Obj.get;\n\t\tif (typeof getter !== 'undefined' && !IsCallable(getter)) {\n\t\t\tthrow new $TypeError('getter must be a function');\n\t\t}\n\t\tdesc['[[Get]]'] = getter;\n\t}\n\tif (has(Obj, 'set')) {\n\t\tvar setter = Obj.set;\n\t\tif (typeof setter !== 'undefined' && !IsCallable(setter)) {\n\t\t\tthrow new $TypeError('setter must be a function');\n\t\t}\n\t\tdesc['[[Set]]'] = setter;\n\t}\n\n\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t}\n\treturn desc;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $String = GetIntrinsic('%String%');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// https://ecma-international.org/ecma-262/6.0/#sec-tostring\n\nmodule.exports = function ToString(argument) {\n\tif (typeof argument === 'symbol') {\n\t\tthrow new $TypeError('Cannot convert a Symbol value to a string');\n\t}\n\treturn $String(argument);\n};\n","'use strict';\n\nvar ES5Type = require('../5/Type');\n\n// https://262.ecma-international.org/11.0/#sec-ecmascript-data-types-and-values\n\nmodule.exports = function Type(x) {\n\tif (typeof x === 'symbol') {\n\t\treturn 'Symbol';\n\t}\n\tif (typeof x === 'bigint') {\n\t\treturn 'BigInt';\n\t}\n\treturn ES5Type(x);\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n","'use strict';\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\n\n// http://262.ecma-international.org/5.1/#sec-9.10\n\nmodule.exports = function CheckObjectCoercible(value, optMessage) {\n\tif (value == null) {\n\t\tthrow new $TypeError(optMessage || ('Cannot call method on ' + value));\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar abs = require('./abs');\nvar floor = require('./floor');\nvar ToNumber = require('./ToNumber');\n\nvar $isNaN = require('../helpers/isNaN');\nvar $isFinite = require('../helpers/isFinite');\nvar $sign = require('../helpers/sign');\n\n// http://262.ecma-international.org/5.1/#sec-9.4\n\nmodule.exports = function ToInteger(value) {\n\tvar number = ToNumber(value);\n\tif ($isNaN(number)) { return 0; }\n\tif (number === 0 || !$isFinite(number)) { return number; }\n\treturn $sign(number) * floor(abs(number));\n};\n","'use strict';\n\nvar ToPrimitive = require('./ToPrimitive');\n\n// http://262.ecma-international.org/5.1/#sec-9.3\n\nmodule.exports = function ToNumber(value) {\n\tvar prim = ToPrimitive(value, Number);\n\tif (typeof prim !== 'string') {\n\t\treturn +prim; // eslint-disable-line no-implicit-coercion\n\t}\n\n\t// eslint-disable-next-line no-control-regex\n\tvar trimmed = prim.replace(/^[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+|[ \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u0085]+$/g, '');\n\tif ((/^0[ob]|^[+-]0x/).test(trimmed)) {\n\t\treturn NaN;\n\t}\n\n\treturn +trimmed; // eslint-disable-line no-implicit-coercion\n};\n","'use strict';\n\n// http://262.ecma-international.org/5.1/#sec-9.1\n\nmodule.exports = require('es-to-primitive/es5');\n","'use strict';\n\n// https://262.ecma-international.org/5.1/#sec-8\n\nmodule.exports = function Type(x) {\n\tif (x === null) {\n\t\treturn 'Null';\n\t}\n\tif (typeof x === 'undefined') {\n\t\treturn 'Undefined';\n\t}\n\tif (typeof x === 'function' || typeof x === 'object') {\n\t\treturn 'Object';\n\t}\n\tif (typeof x === 'number') {\n\t\treturn 'Number';\n\t}\n\tif (typeof x === 'boolean') {\n\t\treturn 'Boolean';\n\t}\n\tif (typeof x === 'string') {\n\t\treturn 'String';\n\t}\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $abs = GetIntrinsic('%Math.abs%');\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function abs(x) {\n\treturn $abs(x);\n};\n","'use strict';\n\n// var modulo = require('./modulo');\nvar $floor = Math.floor;\n\n// http://262.ecma-international.org/5.1/#sec-5.2\n\nmodule.exports = function floor(x) {\n\t// return x - modulo(x, 1);\n\treturn $floor(x);\n};\n","'use strict';\n\n// TODO: remove, semver-major\n\nmodule.exports = require('get-intrinsic');\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nvar callBound = require('call-bind/callBound');\n\nvar $isEnumerable = callBound('Object.prototype.propertyIsEnumerable');\n\n// eslint-disable-next-line max-params\nmodule.exports = function DefineOwnProperty(IsDataDescriptor, SameValue, FromPropertyDescriptor, O, P, desc) {\n\tif (!$defineProperty) {\n\t\tif (!IsDataDescriptor(desc)) {\n\t\t\t// ES3 does not support getters/setters\n\t\t\treturn false;\n\t\t}\n\t\tif (!desc['[[Configurable]]'] || !desc['[[Writable]]']) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// fallback for ES3\n\t\tif (P in O && $isEnumerable(O, P) !== !!desc['[[Enumerable]]']) {\n\t\t\t// a non-enumerable existing property\n\t\t\treturn false;\n\t\t}\n\n\t\t// property does not exist at all, or exists but is enumerable\n\t\tvar V = desc['[[Value]]'];\n\t\t// eslint-disable-next-line no-param-reassign\n\t\tO[P] = V; // will use [[Define]]\n\t\treturn SameValue(O[P], V);\n\t}\n\t$defineProperty(O, P, FromPropertyDescriptor(desc));\n\treturn true;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $SyntaxError = GetIntrinsic('%SyntaxError%');\n\nvar has = require('has');\n\nvar predicates = {\n\t// https://262.ecma-international.org/6.0/#sec-property-descriptor-specification-type\n\t'Property Descriptor': function isPropertyDescriptor(Type, Desc) {\n\t\tif (Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t}\n};\n\nmodule.exports = function assertRecord(Type, recordType, argumentName, value) {\n\tvar predicate = predicates[recordType];\n\tif (typeof predicate !== 'function') {\n\t\tthrow new $SyntaxError('unknown record type: ' + recordType);\n\t}\n\tif (!predicate(Type, value)) {\n\t\tthrow new $TypeError(argumentName + ' must be a ' + recordType);\n\t}\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%');\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\nvar $isNaN = Number.isNaN || function (a) { return a !== a; };\n\nmodule.exports = Number.isFinite || function (x) { return typeof x === 'number' && !$isNaN(x) && x !== Infinity && x !== -Infinity; };\n","'use strict';\n\nmodule.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n","'use strict';\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar has = require('has');\nvar $TypeError = GetIntrinsic('%TypeError%');\n\nmodule.exports = function IsPropertyDescriptor(ES, Desc) {\n\tif (ES.Type(Desc) !== 'Object') {\n\t\treturn false;\n\t}\n\tvar allowed = {\n\t\t'[[Configurable]]': true,\n\t\t'[[Enumerable]]': true,\n\t\t'[[Get]]': true,\n\t\t'[[Set]]': true,\n\t\t'[[Value]]': true,\n\t\t'[[Writable]]': true\n\t};\n\n\tfor (var key in Desc) { // eslint-disable-line no-restricted-syntax\n\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tif (ES.IsDataDescriptor(Desc) && ES.IsAccessorDescriptor(Desc)) {\n\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t}\n\treturn true;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $Math = GetIntrinsic('%Math%');\nvar $Number = GetIntrinsic('%Number%');\n\nmodule.exports = $Number.MAX_SAFE_INTEGER || $Math.pow(2, 53) - 1;\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $test = GetIntrinsic('RegExp.prototype.test');\n\nvar callBind = require('call-bind');\n\nmodule.exports = function regexTester(regex) {\n\treturn callBind($test, regex);\n};\n","'use strict';\n\nmodule.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n","module.exports = function properlyBoxed(method) {\n\t// Check node 0.6.21 bug where third parameter is not boxed\n\tvar properlyBoxesNonStrict = true;\n\tvar properlyBoxesStrict = true;\n\tvar threwException = false;\n\tif (typeof method === 'function') {\n\t\ttry {\n\t\t\t// eslint-disable-next-line max-params\n\t\t\tmethod.call('f', function (_, __, O) {\n\t\t\t\tif (typeof O !== 'object') {\n\t\t\t\t\tproperlyBoxesNonStrict = false;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tmethod.call(\n\t\t\t\t[null],\n\t\t\t\tfunction () {\n\t\t\t\t\t'use strict';\n\n\t\t\t\t\tproperlyBoxesStrict = typeof this === 'string'; // eslint-disable-line no-invalid-this\n\t\t\t\t},\n\t\t\t\t'x'\n\t\t\t);\n\t\t} catch (e) {\n\t\t\tthrewException = true;\n\t\t}\n\t\treturn !threwException && properlyBoxesNonStrict && properlyBoxesStrict;\n\t}\n\treturn false;\n};\n","'use strict';\n\n/* eslint global-require: 0 */\n// the code is structured this way so that bundlers can\n// alias out `has-symbols` to `() => true` or `() => false` if your target\n// environments' Symbol capabilities are known, and then use\n// dead code elimination on the rest of this module.\n//\n// Similarly, `isarray` can be aliased to `Array.isArray` if\n// available in all target environments.\n\nvar isArguments = require('is-arguments');\n\nif (require('has-symbols')() || require('has-symbols/shams')()) {\n\tvar $iterator = Symbol.iterator;\n\t// Symbol is available natively or shammed\n\t// natively:\n\t//  - Chrome >= 38\n\t//  - Edge 12-14?, Edge >= 15 for sure\n\t//  - FF >= 36\n\t//  - Safari >= 9\n\t//  - node >= 0.12\n\tmodule.exports = function getIterator(iterable) {\n\t\t// alternatively, `iterable[$iterator]?.()`\n\t\tif (iterable != null && typeof iterable[$iterator] !== 'undefined') {\n\t\t\treturn iterable[$iterator]();\n\t\t}\n\t\tif (isArguments(iterable)) {\n\t\t\t// arguments objects lack Symbol.iterator\n\t\t\t// - node 0.12\n\t\t\treturn Array.prototype[$iterator].call(iterable);\n\t\t}\n\t};\n} else {\n\t// Symbol is not available, native or shammed\n\tvar isArray = require('isarray');\n\tvar isString = require('is-string');\n\tvar GetIntrinsic = require('get-intrinsic');\n\tvar $Map = GetIntrinsic('%Map%', true);\n\tvar $Set = GetIntrinsic('%Set%', true);\n\tvar callBound = require('call-bind/callBound');\n\tvar $arrayPush = callBound('Array.prototype.push');\n\tvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\tvar $stringSlice = callBound('String.prototype.slice');\n\n\tvar advanceStringIndex = function advanceStringIndex(S, index) {\n\t\tvar length = S.length;\n\t\tif ((index + 1) >= length) {\n\t\t\treturn index + 1;\n\t\t}\n\n\t\tvar first = $charCodeAt(S, index);\n\t\tif (first < 0xD800 || first > 0xDBFF) {\n\t\t\treturn index + 1;\n\t\t}\n\n\t\tvar second = $charCodeAt(S, index + 1);\n\t\tif (second < 0xDC00 || second > 0xDFFF) {\n\t\t\treturn index + 1;\n\t\t}\n\n\t\treturn index + 2;\n\t};\n\n\tvar getArrayIterator = function getArrayIterator(arraylike) {\n\t\tvar i = 0;\n\t\treturn {\n\t\t\tnext: function next() {\n\t\t\t\tvar done = i >= arraylike.length;\n\t\t\t\tvar value;\n\t\t\t\tif (!done) {\n\t\t\t\t\tvalue = arraylike[i];\n\t\t\t\t\ti += 1;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tdone: done,\n\t\t\t\t\tvalue: value\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar getNonCollectionIterator = function getNonCollectionIterator(iterable, noPrimordialCollections) {\n\t\tif (isArray(iterable) || isArguments(iterable)) {\n\t\t\treturn getArrayIterator(iterable);\n\t\t}\n\t\tif (isString(iterable)) {\n\t\t\tvar i = 0;\n\t\t\treturn {\n\t\t\t\tnext: function next() {\n\t\t\t\t\tvar nextIndex = advanceStringIndex(iterable, i);\n\t\t\t\t\tvar value = $stringSlice(iterable, i, nextIndex);\n\t\t\t\t\ti = nextIndex;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: nextIndex > iterable.length,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t// es6-shim and es-shims' es-map use a string \"_es6-shim iterator_\" property on different iterables, such as MapIterator.\n\t\tif (noPrimordialCollections && typeof iterable['_es6-shim iterator_'] !== 'undefined') {\n\t\t\treturn iterable['_es6-shim iterator_']();\n\t\t}\n\t};\n\n\tif (!$Map && !$Set) {\n\t\t// the only language iterables are Array, String, arguments\n\t\t// - Safari <= 6.0\n\t\t// - Chrome < 38\n\t\t// - node < 0.12\n\t\t// - FF < 13\n\t\t// - IE < 11\n\t\t// - Edge < 11\n\n\t\tmodule.exports = function getIterator(iterable) {\n\t\t\tif (iterable != null) {\n\t\t\t\treturn getNonCollectionIterator(iterable, true);\n\t\t\t}\n\t\t};\n\t} else {\n\t\t// either Map or Set are available, but Symbol is not\n\t\t// - es6-shim on an ES5 browser\n\t\t// - Safari 6.2 (maybe 6.1?)\n\t\t// - FF v[13, 36)\n\t\t// - IE 11\n\t\t// - Edge 11\n\t\t// - Safari v[6, 9)\n\n\t\tvar isMap = require('is-map');\n\t\tvar isSet = require('is-set');\n\n\t\t// Firefox >= 27, IE 11, Safari 6.2 - 9, Edge 11, es6-shim in older envs, all have forEach\n\t\tvar $mapForEach = callBound('Map.prototype.forEach', true);\n\t\tvar $setForEach = callBound('Set.prototype.forEach', true);\n\t\tif (typeof process === 'undefined' || !process.versions || !process.versions.node) { // \"if is not node\"\n\n\t\t\t// Firefox 17 - 26 has `.iterator()`, whose iterator `.next()` either\n\t\t\t// returns a value, or throws a StopIteration object. These browsers\n\t\t\t// do not have any other mechanism for iteration.\n\t\t\tvar $mapIterator = callBound('Map.prototype.iterator', true);\n\t\t\tvar $setIterator = callBound('Set.prototype.iterator', true);\n\t\t\tvar getStopIterationIterator = function (iterator) {\n\t\t\t\tvar done = false;\n\t\t\t\treturn {\n\t\t\t\t\tnext: function next() {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tdone: done,\n\t\t\t\t\t\t\t\tvalue: done ? undefined : iterator.next()\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tdone = true;\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tdone: true,\n\t\t\t\t\t\t\t\tvalue: undefined\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\t\t}\n\t\t// Firefox 27-35, and some older es6-shim versions, use a string \"@@iterator\" property\n\t\t// this returns a proper iterator object, so we should use it instead of forEach.\n\t\t// newer es6-shim versions use a string \"_es6-shim iterator_\" property.\n\t\tvar $mapAtAtIterator = callBound('Map.prototype.@@iterator', true) || callBound('Map.prototype._es6-shim iterator_', true);\n\t\tvar $setAtAtIterator = callBound('Set.prototype.@@iterator', true) || callBound('Set.prototype._es6-shim iterator_', true);\n\n\t\tvar getCollectionIterator = function getCollectionIterator(iterable) {\n\t\t\tif (isMap(iterable)) {\n\t\t\t\tif ($mapIterator) {\n\t\t\t\t\treturn getStopIterationIterator($mapIterator(iterable));\n\t\t\t\t}\n\t\t\t\tif ($mapAtAtIterator) {\n\t\t\t\t\treturn $mapAtAtIterator(iterable);\n\t\t\t\t}\n\t\t\t\tif ($mapForEach) {\n\t\t\t\t\tvar entries = [];\n\t\t\t\t\t$mapForEach(iterable, function (v, k) {\n\t\t\t\t\t\t$arrayPush(entries, [k, v]);\n\t\t\t\t\t});\n\t\t\t\t\treturn getArrayIterator(entries);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isSet(iterable)) {\n\t\t\t\tif ($setIterator) {\n\t\t\t\t\treturn getStopIterationIterator($setIterator(iterable));\n\t\t\t\t}\n\t\t\t\tif ($setAtAtIterator) {\n\t\t\t\t\treturn $setAtAtIterator(iterable);\n\t\t\t\t}\n\t\t\t\tif ($setForEach) {\n\t\t\t\t\tvar values = [];\n\t\t\t\t\t$setForEach(iterable, function (v) {\n\t\t\t\t\t\t$arrayPush(values, v);\n\t\t\t\t\t});\n\t\t\t\t\treturn getArrayIterator(values);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tmodule.exports = function getIterator(iterable) {\n\t\t\treturn getCollectionIterator(iterable) || getNonCollectionIterator(iterable);\n\t\t};\n\t}\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n","'use strict';\n\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol';\n\nvar isPrimitive = require('./helpers/isPrimitive');\nvar isCallable = require('is-callable');\nvar isDate = require('is-date-object');\nvar isSymbol = require('is-symbol');\n\nvar ordinaryToPrimitive = function OrdinaryToPrimitive(O, hint) {\n\tif (typeof O === 'undefined' || O === null) {\n\t\tthrow new TypeError('Cannot call method on ' + O);\n\t}\n\tif (typeof hint !== 'string' || (hint !== 'number' && hint !== 'string')) {\n\t\tthrow new TypeError('hint must be \"string\" or \"number\"');\n\t}\n\tvar methodNames = hint === 'string' ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\tvar method, result, i;\n\tfor (i = 0; i < methodNames.length; ++i) {\n\t\tmethod = O[methodNames[i]];\n\t\tif (isCallable(method)) {\n\t\t\tresult = method.call(O);\n\t\t\tif (isPrimitive(result)) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\tthrow new TypeError('No default value');\n};\n\nvar GetMethod = function GetMethod(O, P) {\n\tvar func = O[P];\n\tif (func !== null && typeof func !== 'undefined') {\n\t\tif (!isCallable(func)) {\n\t\t\tthrow new TypeError(func + ' returned for property ' + P + ' of object ' + O + ' is not a function');\n\t\t}\n\t\treturn func;\n\t}\n\treturn void 0;\n};\n\n// http://www.ecma-international.org/ecma-262/6.0/#sec-toprimitive\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tvar hint = 'default';\n\tif (arguments.length > 1) {\n\t\tif (arguments[1] === String) {\n\t\t\thint = 'string';\n\t\t} else if (arguments[1] === Number) {\n\t\t\thint = 'number';\n\t\t}\n\t}\n\n\tvar exoticToPrim;\n\tif (hasSymbols) {\n\t\tif (Symbol.toPrimitive) {\n\t\t\texoticToPrim = GetMethod(input, Symbol.toPrimitive);\n\t\t} else if (isSymbol(input)) {\n\t\t\texoticToPrim = Symbol.prototype.valueOf;\n\t\t}\n\t}\n\tif (typeof exoticToPrim !== 'undefined') {\n\t\tvar result = exoticToPrim.call(input, hint);\n\t\tif (isPrimitive(result)) {\n\t\t\treturn result;\n\t\t}\n\t\tthrow new TypeError('unable to convert exotic object to primitive');\n\t}\n\tif (hint === 'default' && (isDate(input) || isSymbol(input))) {\n\t\thint = 'string';\n\t}\n\treturn ordinaryToPrimitive(input, hint === 'default' ? 'number' : hint);\n};\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = require('./helpers/isPrimitive');\n\nvar isCallable = require('is-callable');\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n","'use strict';\n\nmodule.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n","\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toString = Object.prototype.toString;\n\nmodule.exports = function forEach (obj, fn, ctx) {\n    if (toString.call(fn) !== '[object Function]') {\n        throw new TypeError('iterator must be a function');\n    }\n    var l = obj.length;\n    if (l === +l) {\n        for (var i = 0; i < l; i++) {\n            fn.call(ctx, obj[i], i, obj);\n        }\n    } else {\n        for (var k in obj) {\n            if (hasOwn.call(obj, k)) {\n                fn.call(ctx, obj[k], k, obj);\n            }\n        }\n    }\n};\n\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slice.call(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                args.concat(slice.call(arguments))\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        } else {\n            return target.apply(\n                that,\n                args.concat(slice.call(arguments))\n            );\n        }\n    };\n\n    var boundLength = Math.max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs.push('$' + i);\n    }\n\n    bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,b,c){a instanceof String&&(a=String(a));for(var d=a.length,e=0;e<d;e++){var f=a[e];if(b.call(c,f,e,a))return{i:e,v:f}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;\n$jscomp.defineProperty=$jscomp.ASSUME_ES5||\"function\"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};$jscomp.getGlobal=function(a){return\"undefined\"!=typeof window&&window===a?a:\"undefined\"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);\n$jscomp.polyfill=function(a,b,c,d){if(b){c=$jscomp.global;a=a.split(\".\");for(d=0;d<a.length-1;d++){var e=a[d];e in c||(c[e]={});c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})}};$jscomp.polyfill(\"Array.prototype.findIndex\",function(a){return a?a:function(a,c){return $jscomp.findInternal(this,a,c).i}},\"es6\",\"es3\");\n$jscomp.checkStringArgs=function(a,b,c){if(null==a)throw new TypeError(\"The 'this' value for String.prototype.\"+c+\" must not be null or undefined\");if(b instanceof RegExp)throw new TypeError(\"First argument to String.prototype.\"+c+\" must not be a regular expression\");return a+\"\"};\n$jscomp.polyfill(\"String.prototype.endsWith\",function(a){return a?a:function(a,c){var b=$jscomp.checkStringArgs(this,a,\"endsWith\");a+=\"\";void 0===c&&(c=b.length);c=Math.max(0,Math.min(c|0,b.length));for(var e=a.length;0<e&&0<c;)if(b[--c]!=a[--e])return!1;return 0>=e}},\"es6\",\"es3\");$jscomp.polyfill(\"Array.prototype.find\",function(a){return a?a:function(a,c){return $jscomp.findInternal(this,a,c).v}},\"es6\",\"es3\");\n$jscomp.polyfill(\"String.prototype.startsWith\",function(a){return a?a:function(a,c){var b=$jscomp.checkStringArgs(this,a,\"startsWith\");a+=\"\";var e=b.length,f=a.length;c=Math.max(0,Math.min(c|0,b.length));for(var g=0;g<f&&c<e;)if(b[c++]!=a[g++])return!1;return g>=f}},\"es6\",\"es3\");\n$jscomp.polyfill(\"String.prototype.repeat\",function(a){return a?a:function(a){var b=$jscomp.checkStringArgs(this,null,\"repeat\");if(0>a||1342177279<a)throw new RangeError(\"Invalid count value\");a|=0;for(var d=\"\";a;)if(a&1&&(d+=b),a>>>=1)b+=b;return d}},\"es6\",\"es3\");var COMPILED=!0,goog=goog||{};goog.global=this||self;goog.isDef=function(a){return void 0!==a};goog.isString=function(a){return\"string\"==typeof a};goog.isBoolean=function(a){return\"boolean\"==typeof a};\ngoog.isNumber=function(a){return\"number\"==typeof a};goog.exportPath_=function(a,b,c){a=a.split(\".\");c=c||goog.global;a[0]in c||\"undefined\"==typeof c.execScript||c.execScript(\"var \"+a[0]);for(var d;a.length&&(d=a.shift());)!a.length&&goog.isDef(b)?c[d]=b:c=c[d]&&c[d]!==Object.prototype[d]?c[d]:c[d]={}};\ngoog.define=function(a,b){if(!COMPILED){var c=goog.global.CLOSURE_UNCOMPILED_DEFINES,d=goog.global.CLOSURE_DEFINES;c&&void 0===c.nodeType&&Object.prototype.hasOwnProperty.call(c,a)?b=c[a]:d&&void 0===d.nodeType&&Object.prototype.hasOwnProperty.call(d,a)&&(b=d[a])}return b};goog.FEATURESET_YEAR=2012;goog.DEBUG=!0;goog.LOCALE=\"en\";goog.TRUSTED_SITE=!0;goog.STRICT_MODE_COMPATIBLE=!1;goog.DISALLOW_TEST_ONLY_CODE=COMPILED&&!goog.DEBUG;goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING=!1;\ngoog.provide=function(a){if(goog.isInModuleLoader_())throw Error(\"goog.provide cannot be used within a module.\");if(!COMPILED&&goog.isProvided_(a))throw Error('Namespace \"'+a+'\" already declared.');goog.constructNamespace_(a)};goog.constructNamespace_=function(a,b){if(!COMPILED){delete goog.implicitNamespaces_[a];for(var c=a;(c=c.substring(0,c.lastIndexOf(\".\")))&&!goog.getObjectByName(c);)goog.implicitNamespaces_[c]=!0}goog.exportPath_(a,b)};\ngoog.getScriptNonce=function(a){if(a&&a!=goog.global)return goog.getScriptNonce_(a.document);null===goog.cspNonce_&&(goog.cspNonce_=goog.getScriptNonce_(goog.global.document));return goog.cspNonce_};goog.NONCE_PATTERN_=/^[\\w+/_-]+[=]{0,2}$/;goog.cspNonce_=null;goog.getScriptNonce_=function(a){return(a=a.querySelector&&a.querySelector(\"script[nonce]\"))&&(a=a.nonce||a.getAttribute(\"nonce\"))&&goog.NONCE_PATTERN_.test(a)?a:\"\"};goog.VALID_MODULE_RE_=/^[a-zA-Z_$][a-zA-Z0-9._$]*$/;\ngoog.module=function(a){if(!goog.isString(a)||!a||-1==a.search(goog.VALID_MODULE_RE_))throw Error(\"Invalid module identifier\");if(!goog.isInGoogModuleLoader_())throw Error(\"Module \"+a+\" has been loaded incorrectly. Note, modules cannot be loaded as normal scripts. They require some kind of pre-processing step. You're likely trying to load a module via a script tag or as a part of a concatenated bundle without rewriting the module. For more info see: https://github.com/google/closure-library/wiki/goog.module:-an-ES6-module-like-alternative-to-goog.provide.\");\nif(goog.moduleLoaderState_.moduleName)throw Error(\"goog.module may only be called once per module.\");goog.moduleLoaderState_.moduleName=a;if(!COMPILED){if(goog.isProvided_(a))throw Error('Namespace \"'+a+'\" already declared.');delete goog.implicitNamespaces_[a]}};goog.module.get=function(a){return goog.module.getInternal_(a)};\ngoog.module.getInternal_=function(a){if(!COMPILED){if(a in goog.loadedModules_)return goog.loadedModules_[a].exports;if(!goog.implicitNamespaces_[a])return a=goog.getObjectByName(a),null!=a?a:null}return null};goog.ModuleType={ES6:\"es6\",GOOG:\"goog\"};goog.moduleLoaderState_=null;goog.isInModuleLoader_=function(){return goog.isInGoogModuleLoader_()||goog.isInEs6ModuleLoader_()};goog.isInGoogModuleLoader_=function(){return!!goog.moduleLoaderState_&&goog.moduleLoaderState_.type==goog.ModuleType.GOOG};\ngoog.isInEs6ModuleLoader_=function(){if(goog.moduleLoaderState_&&goog.moduleLoaderState_.type==goog.ModuleType.ES6)return!0;var a=goog.global.$jscomp;return a?\"function\"!=typeof a.getCurrentModulePath?!1:!!a.getCurrentModulePath():!1};\ngoog.module.declareLegacyNamespace=function(){if(!COMPILED&&!goog.isInGoogModuleLoader_())throw Error(\"goog.module.declareLegacyNamespace must be called from within a goog.module\");if(!COMPILED&&!goog.moduleLoaderState_.moduleName)throw Error(\"goog.module must be called prior to goog.module.declareLegacyNamespace.\");goog.moduleLoaderState_.declareLegacyNamespace=!0};\ngoog.declareModuleId=function(a){if(!COMPILED){if(!goog.isInEs6ModuleLoader_())throw Error(\"goog.declareModuleId may only be called from within an ES6 module\");if(goog.moduleLoaderState_&&goog.moduleLoaderState_.moduleName)throw Error(\"goog.declareModuleId may only be called once per module.\");if(a in goog.loadedModules_)throw Error('Module with namespace \"'+a+'\" already exists.');}if(goog.moduleLoaderState_)goog.moduleLoaderState_.moduleName=a;else{var b=goog.global.$jscomp;if(!b||\"function\"!=typeof b.getCurrentModulePath)throw Error('Module with namespace \"'+\na+'\" has been loaded incorrectly.');b=b.require(b.getCurrentModulePath());goog.loadedModules_[a]={exports:b,type:goog.ModuleType.ES6,moduleId:a}}};goog.setTestOnly=function(a){if(goog.DISALLOW_TEST_ONLY_CODE)throw a=a||\"\",Error(\"Importing test-only code into non-debug environment\"+(a?\": \"+a:\".\"));};goog.forwardDeclare=function(a){};\nCOMPILED||(goog.isProvided_=function(a){return a in goog.loadedModules_||!goog.implicitNamespaces_[a]&&goog.isDefAndNotNull(goog.getObjectByName(a))},goog.implicitNamespaces_={\"goog.module\":!0});goog.getObjectByName=function(a,b){a=a.split(\".\");b=b||goog.global;for(var c=0;c<a.length;c++)if(b=b[a[c]],!goog.isDefAndNotNull(b))return null;return b};goog.globalize=function(a,b){b=b||goog.global;for(var c in a)b[c]=a[c]};\ngoog.addDependency=function(a,b,c,d){!COMPILED&&goog.DEPENDENCIES_ENABLED&&goog.debugLoader_.addDependency(a,b,c,d)};goog.ENABLE_DEBUG_LOADER=!0;goog.logToConsole_=function(a){goog.global.console&&goog.global.console.error(a)};\ngoog.require=function(a){if(!COMPILED){goog.ENABLE_DEBUG_LOADER&&goog.debugLoader_.requested(a);if(goog.isProvided_(a)){if(goog.isInModuleLoader_())return goog.module.getInternal_(a)}else if(goog.ENABLE_DEBUG_LOADER){var b=goog.moduleLoaderState_;goog.moduleLoaderState_=null;try{goog.debugLoader_.load_(a)}finally{goog.moduleLoaderState_=b}}return null}};goog.requireType=function(a){return{}};goog.basePath=\"\";goog.nullFunction=function(){};\ngoog.abstractMethod=function(){throw Error(\"unimplemented abstract method\");};goog.addSingletonGetter=function(a){a.instance_=void 0;a.getInstance=function(){if(a.instance_)return a.instance_;goog.DEBUG&&(goog.instantiatedSingletons_[goog.instantiatedSingletons_.length]=a);return a.instance_=new a}};goog.instantiatedSingletons_=[];goog.LOAD_MODULE_USING_EVAL=!0;goog.SEAL_MODULE_EXPORTS=goog.DEBUG;goog.loadedModules_={};goog.DEPENDENCIES_ENABLED=!COMPILED&&goog.ENABLE_DEBUG_LOADER;goog.TRANSPILE=\"detect\";\ngoog.ASSUME_ES_MODULES_TRANSPILED=!1;goog.TRANSPILE_TO_LANGUAGE=\"\";goog.TRANSPILER=\"transpile.js\";goog.hasBadLetScoping=null;goog.useSafari10Workaround=function(){if(null==goog.hasBadLetScoping){try{var a=!eval('\"use strict\";let x = 1; function f() { return typeof x; };f() == \"number\";')}catch(b){a=!1}goog.hasBadLetScoping=a}return goog.hasBadLetScoping};goog.workaroundSafari10EvalBug=function(a){return\"(function(){\"+a+\"\\n;})();\\n\"};\ngoog.loadModule=function(a){var b=goog.moduleLoaderState_;try{goog.moduleLoaderState_={moduleName:\"\",declareLegacyNamespace:!1,type:goog.ModuleType.GOOG};if(goog.isFunction(a))var c=a.call(void 0,{});else if(goog.isString(a))goog.useSafari10Workaround()&&(a=goog.workaroundSafari10EvalBug(a)),c=goog.loadModuleFromSource_.call(void 0,a);else throw Error(\"Invalid module definition\");var d=goog.moduleLoaderState_.moduleName;if(goog.isString(d)&&d)goog.moduleLoaderState_.declareLegacyNamespace?goog.constructNamespace_(d,\nc):goog.SEAL_MODULE_EXPORTS&&Object.seal&&\"object\"==typeof c&&null!=c&&Object.seal(c),goog.loadedModules_[d]={exports:c,type:goog.ModuleType.GOOG,moduleId:goog.moduleLoaderState_.moduleName};else throw Error('Invalid module name \"'+d+'\"');}finally{goog.moduleLoaderState_=b}};goog.loadModuleFromSource_=function(a){eval(a);return{}};goog.normalizePath_=function(a){a=a.split(\"/\");for(var b=0;b<a.length;)\".\"==a[b]?a.splice(b,1):b&&\"..\"==a[b]&&a[b-1]&&\"..\"!=a[b-1]?a.splice(--b,2):b++;return a.join(\"/\")};\ngoog.loadFileSync_=function(a){if(goog.global.CLOSURE_LOAD_FILE_SYNC)return goog.global.CLOSURE_LOAD_FILE_SYNC(a);try{var b=new goog.global.XMLHttpRequest;b.open(\"get\",a,!1);b.send();return 0==b.status||200==b.status?b.responseText:null}catch(c){return null}};\ngoog.transpile_=function(a,b,c){var d=goog.global.$jscomp;d||(goog.global.$jscomp=d={});var e=d.transpile;if(!e){var f=goog.basePath+goog.TRANSPILER,g=goog.loadFileSync_(f);if(g){(function(){(0,eval)(g+\"\\n//# sourceURL=\"+f)}).call(goog.global);if(goog.global.$gwtExport&&goog.global.$gwtExport.$jscomp&&!goog.global.$gwtExport.$jscomp.transpile)throw Error('The transpiler did not properly export the \"transpile\" method. $gwtExport: '+JSON.stringify(goog.global.$gwtExport));goog.global.$jscomp.transpile=\ngoog.global.$gwtExport.$jscomp.transpile;d=goog.global.$jscomp;e=d.transpile}}e||(e=d.transpile=function(a,b){goog.logToConsole_(b+\" requires transpilation but no transpiler was found.\");return a});return e(a,b,c)};\ngoog.typeOf=function(a){var b=typeof a;if(\"object\"==b)if(a){if(a instanceof Array)return\"array\";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(\"[object Window]\"==c)return\"object\";if(\"[object Array]\"==c||\"number\"==typeof a.length&&\"undefined\"!=typeof a.splice&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"splice\"))return\"array\";if(\"[object Function]\"==c||\"undefined\"!=typeof a.call&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"call\"))return\"function\"}else return\"null\";\nelse if(\"function\"==b&&\"undefined\"==typeof a.call)return\"object\";return b};goog.isNull=function(a){return null===a};goog.isDefAndNotNull=function(a){return null!=a};goog.isArray=function(a){return\"array\"==goog.typeOf(a)};goog.isArrayLike=function(a){var b=goog.typeOf(a);return\"array\"==b||\"object\"==b&&\"number\"==typeof a.length};goog.isDateLike=function(a){return goog.isObject(a)&&\"function\"==typeof a.getFullYear};goog.isFunction=function(a){return\"function\"==goog.typeOf(a)};\ngoog.isObject=function(a){var b=typeof a;return\"object\"==b&&null!=a||\"function\"==b};goog.getUid=function(a){return a[goog.UID_PROPERTY_]||(a[goog.UID_PROPERTY_]=++goog.uidCounter_)};goog.hasUid=function(a){return!!a[goog.UID_PROPERTY_]};goog.removeUid=function(a){null!==a&&\"removeAttribute\"in a&&a.removeAttribute(goog.UID_PROPERTY_);try{delete a[goog.UID_PROPERTY_]}catch(b){}};goog.UID_PROPERTY_=\"closure_uid_\"+(1E9*Math.random()>>>0);goog.uidCounter_=0;goog.getHashCode=goog.getUid;\ngoog.removeHashCode=goog.removeUid;goog.cloneObject=function(a){var b=goog.typeOf(a);if(\"object\"==b||\"array\"==b){if(\"function\"===typeof a.clone)return a.clone();b=\"array\"==b?[]:{};for(var c in a)b[c]=goog.cloneObject(a[c]);return b}return a};goog.bindNative_=function(a,b,c){return a.call.apply(a.bind,arguments)};\ngoog.bindJs_=function(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}};goog.bind=function(a,b,c){Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf(\"native code\")?goog.bind=goog.bindNative_:goog.bind=goog.bindJs_;return goog.bind.apply(null,arguments)};\ngoog.partial=function(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var b=c.slice();b.push.apply(b,arguments);return a.apply(this,b)}};goog.mixin=function(a,b){for(var c in b)a[c]=b[c]};goog.now=goog.TRUSTED_SITE&&Date.now||function(){return+new Date};\ngoog.globalEval=function(a){if(goog.global.execScript)goog.global.execScript(a,\"JavaScript\");else if(goog.global.eval){if(null==goog.evalWorksForGlobals_){try{goog.global.eval(\"var _evalTest_ = 1;\")}catch(d){}if(\"undefined\"!=typeof goog.global._evalTest_){try{delete goog.global._evalTest_}catch(d){}goog.evalWorksForGlobals_=!0}else goog.evalWorksForGlobals_=!1}if(goog.evalWorksForGlobals_)goog.global.eval(a);else{var b=goog.global.document,c=b.createElement(\"SCRIPT\");c.type=\"text/javascript\";c.defer=\n!1;c.appendChild(b.createTextNode(a));b.head.appendChild(c);b.head.removeChild(c)}}else throw Error(\"goog.globalEval not available\");};goog.evalWorksForGlobals_=null;\ngoog.getCssName=function(a,b){if(\".\"==String(a).charAt(0))throw Error('className passed in goog.getCssName must not start with \".\". You passed: '+a);var c=function(a){return goog.cssNameMapping_[a]||a},d=function(a){a=a.split(\"-\");for(var b=[],d=0;d<a.length;d++)b.push(c(a[d]));return b.join(\"-\")};d=goog.cssNameMapping_?\"BY_WHOLE\"==goog.cssNameMappingStyle_?c:d:function(a){return a};a=b?a+\"-\"+d(b):d(a);return goog.global.CLOSURE_CSS_NAME_MAP_FN?goog.global.CLOSURE_CSS_NAME_MAP_FN(a):a};\ngoog.setCssNameMapping=function(a,b){goog.cssNameMapping_=a;goog.cssNameMappingStyle_=b};!COMPILED&&goog.global.CLOSURE_CSS_NAME_MAPPING&&(goog.cssNameMapping_=goog.global.CLOSURE_CSS_NAME_MAPPING);goog.getMsg=function(a,b,c){c&&c.html&&(a=a.replace(/</g,\"&lt;\"));b&&(a=a.replace(/\\{\\$([^}]+)}/g,function(a,c){return null!=b&&c in b?b[c]:a}));return a};goog.getMsgWithFallback=function(a,b){return a};goog.exportSymbol=function(a,b,c){goog.exportPath_(a,b,c)};\ngoog.exportProperty=function(a,b,c){a[b]=c};goog.inherits=function(a,b){function c(){}c.prototype=b.prototype;a.superClass_=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.base=function(a,c,f){for(var d=Array(arguments.length-2),e=2;e<arguments.length;e++)d[e-2]=arguments[e];return b.prototype[c].apply(a,d)}};\ngoog.base=function(a,b,c){var d=arguments.callee.caller;if(goog.STRICT_MODE_COMPATIBLE||goog.DEBUG&&!d)throw Error(\"arguments.caller not defined.  goog.base() cannot be used with strict mode code. See http://www.ecma-international.org/ecma-262/5.1/#sec-C\");if(\"undefined\"!==typeof d.superClass_){for(var e=Array(arguments.length-1),f=1;f<arguments.length;f++)e[f-1]=arguments[f];return d.superClass_.constructor.apply(a,e)}if(\"string\"!=typeof b&&\"symbol\"!=typeof b)throw Error(\"method names provided to goog.base must be a string or a symbol\");\ne=Array(arguments.length-2);for(f=2;f<arguments.length;f++)e[f-2]=arguments[f];f=!1;for(var g=a.constructor.prototype;g;g=Object.getPrototypeOf(g))if(g[b]===d)f=!0;else if(f)return g[b].apply(a,e);if(a[b]===d)return a.constructor.prototype[b].apply(a,e);throw Error(\"goog.base called from a method of one name to a method of a different name\");};goog.scope=function(a){if(goog.isInModuleLoader_())throw Error(\"goog.scope is not supported within a module.\");a.call(goog.global)};\nCOMPILED||(goog.global.COMPILED=COMPILED);goog.defineClass=function(a,b){var c=b.constructor,d=b.statics;c&&c!=Object.prototype.constructor||(c=function(){throw Error(\"cannot instantiate an interface (no constructor defined).\");});c=goog.defineClass.createSealingConstructor_(c,a);a&&goog.inherits(c,a);delete b.constructor;delete b.statics;goog.defineClass.applyProperties_(c.prototype,b);null!=d&&(d instanceof Function?d(c):goog.defineClass.applyProperties_(c,d));return c};\ngoog.defineClass.SEAL_CLASS_INSTANCES=goog.DEBUG;goog.defineClass.createSealingConstructor_=function(a,b){if(!goog.defineClass.SEAL_CLASS_INSTANCES)return a;var c=!goog.defineClass.isUnsealable_(b),d=function(){var b=a.apply(this,arguments)||this;b[goog.UID_PROPERTY_]=b[goog.UID_PROPERTY_];this.constructor===d&&c&&Object.seal instanceof Function&&Object.seal(b);return b};return d};goog.defineClass.isUnsealable_=function(a){return a&&a.prototype&&a.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_]};\ngoog.defineClass.OBJECT_PROTOTYPE_FIELDS_=\"constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf\".split(\" \");goog.defineClass.applyProperties_=function(a,b){for(var c in b)Object.prototype.hasOwnProperty.call(b,c)&&(a[c]=b[c]);for(var d=0;d<goog.defineClass.OBJECT_PROTOTYPE_FIELDS_.length;d++)c=goog.defineClass.OBJECT_PROTOTYPE_FIELDS_[d],Object.prototype.hasOwnProperty.call(b,c)&&(a[c]=b[c])};\ngoog.tagUnsealableClass=function(a){!COMPILED&&goog.defineClass.SEAL_CLASS_INSTANCES&&(a.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_]=!0)};goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_=\"goog_defineClass_legacy_unsealable\";\n!COMPILED&&goog.DEPENDENCIES_ENABLED&&(goog.inHtmlDocument_=function(){var a=goog.global.document;return null!=a&&\"write\"in a},goog.isDocumentLoading_=function(){var a=goog.global.document;return a.attachEvent?\"complete\"!=a.readyState:\"loading\"==a.readyState},goog.findBasePath_=function(){if(goog.isDef(goog.global.CLOSURE_BASE_PATH)&&goog.isString(goog.global.CLOSURE_BASE_PATH))goog.basePath=goog.global.CLOSURE_BASE_PATH;else if(goog.inHtmlDocument_()){var a=goog.global.document,b=a.currentScript;\na=b?[b]:a.getElementsByTagName(\"SCRIPT\");for(b=a.length-1;0<=b;--b){var c=a[b].src,d=c.lastIndexOf(\"?\");d=-1==d?c.length:d;if(\"base.js\"==c.substr(d-7,7)){goog.basePath=c.substr(0,d-7);break}}}},goog.findBasePath_(),goog.Transpiler=function(){this.requiresTranspilation_=null;this.transpilationTarget_=goog.TRANSPILE_TO_LANGUAGE},goog.Transpiler.prototype.createRequiresTranspilation_=function(){function a(a,b){e?d[a]=!0:b()?(c=a,d[a]=!1):e=d[a]=!0}function b(a){try{return!!eval(a)}catch(h){return!1}}\nvar c=\"es3\",d={es3:!1},e=!1,f=goog.global.navigator&&goog.global.navigator.userAgent?goog.global.navigator.userAgent:\"\";a(\"es5\",function(){return b(\"[1,].length==1\")});a(\"es6\",function(){return f.match(/Edge\\/(\\d+)(\\.\\d)*/i)?!1:b('(()=>{\"use strict\";class X{constructor(){if(new.target!=String)throw 1;this.x=42}}let q=Reflect.construct(X,[],String);if(q.x!=42||!(q instanceof String))throw 1;for(const a of[2,3]){if(a==2)continue;function f(z={a}){let a=0;return z.a}{function f(){return 0;}}return f()==3}})()')});\na(\"es7\",function(){return b(\"2 ** 2 == 4\")});a(\"es8\",function(){return b(\"async () => 1, true\")});a(\"es9\",function(){return b(\"({...rest} = {}), true\")});a(\"es_next\",function(){return!1});return{target:c,map:d}},goog.Transpiler.prototype.needsTranspile=function(a,b){if(\"always\"==goog.TRANSPILE)return!0;if(\"never\"==goog.TRANSPILE)return!1;if(!this.requiresTranspilation_){var c=this.createRequiresTranspilation_();this.requiresTranspilation_=c.map;this.transpilationTarget_=this.transpilationTarget_||\nc.target}if(a in this.requiresTranspilation_)return this.requiresTranspilation_[a]?!0:!goog.inHtmlDocument_()||\"es6\"!=b||\"noModule\"in goog.global.document.createElement(\"script\")?!1:!0;throw Error(\"Unknown language mode: \"+a);},goog.Transpiler.prototype.transpile=function(a,b){return goog.transpile_(a,b,this.transpilationTarget_)},goog.transpiler_=new goog.Transpiler,goog.protectScriptTag_=function(a){return a.replace(/<\\/(SCRIPT)/ig,\"\\\\x3c/$1\")},goog.DebugLoader_=function(){this.dependencies_={};\nthis.idToPath_={};this.written_={};this.loadingDeps_=[];this.depsToLoad_=[];this.paused_=!1;this.factory_=new goog.DependencyFactory(goog.transpiler_);this.deferredCallbacks_={};this.deferredQueue_=[]},goog.DebugLoader_.prototype.bootstrap=function(a,b){function c(){d&&(goog.global.setTimeout(d,0),d=null)}var d=b;if(a.length){b=[];for(var e=0;e<a.length;e++){var f=this.getPathFromDeps_(a[e]);if(!f)throw Error(\"Unregonized namespace: \"+a[e]);b.push(this.dependencies_[f])}f=goog.require;var g=0;for(e=\n0;e<a.length;e++)f(a[e]),b[e].onLoad(function(){++g==a.length&&c()})}else c()},goog.DebugLoader_.prototype.loadClosureDeps=function(){this.depsToLoad_.push(this.factory_.createDependency(goog.normalizePath_(goog.basePath+\"deps.js\"),\"deps.js\",[],[],{},!1));this.loadDeps_()},goog.DebugLoader_.prototype.requested=function(a,b){(a=this.getPathFromDeps_(a))&&(b||this.areDepsLoaded_(this.dependencies_[a].requires))&&(b=this.deferredCallbacks_[a])&&(delete this.deferredCallbacks_[a],b())},goog.DebugLoader_.prototype.setDependencyFactory=\nfunction(a){this.factory_=a},goog.DebugLoader_.prototype.load_=function(a){if(this.getPathFromDeps_(a)){var b=this,c=[],d=function(a){var e=b.getPathFromDeps_(a);if(!e)throw Error(\"Bad dependency path or symbol: \"+a);if(!b.written_[e]){b.written_[e]=!0;a=b.dependencies_[e];for(e=0;e<a.requires.length;e++)goog.isProvided_(a.requires[e])||d(a.requires[e]);c.push(a)}};d(a);a=!!this.depsToLoad_.length;this.depsToLoad_=this.depsToLoad_.concat(c);this.paused_||a||this.loadDeps_()}else throw a=\"goog.require could not find: \"+\na,goog.logToConsole_(a),Error(a);},goog.DebugLoader_.prototype.loadDeps_=function(){for(var a=this,b=this.paused_;this.depsToLoad_.length&&!b;)(function(){var c=!1,d=a.depsToLoad_.shift(),e=!1;a.loading_(d);var f={pause:function(){if(c)throw Error(\"Cannot call pause after the call to load.\");b=!0},resume:function(){c?a.resume_():b=!1},loaded:function(){if(e)throw Error(\"Double call to loaded.\");e=!0;a.loaded_(d)},pending:function(){for(var b=[],c=0;c<a.loadingDeps_.length;c++)b.push(a.loadingDeps_[c]);\nreturn b},setModuleState:function(a){goog.moduleLoaderState_={type:a,moduleName:\"\",declareLegacyNamespace:!1}},registerEs6ModuleExports:function(a,b,c){c&&(goog.loadedModules_[c]={exports:b,type:goog.ModuleType.ES6,moduleId:c||\"\"})},registerGoogModuleExports:function(a,b){goog.loadedModules_[a]={exports:b,type:goog.ModuleType.GOOG,moduleId:a}},clearModuleState:function(){goog.moduleLoaderState_=null},defer:function(b){if(c)throw Error(\"Cannot register with defer after the call to load.\");a.defer_(d,\nb)},areDepsLoaded:function(){return a.areDepsLoaded_(d.requires)}};try{d.load(f)}finally{c=!0}})();b&&this.pause_()},goog.DebugLoader_.prototype.pause_=function(){this.paused_=!0},goog.DebugLoader_.prototype.resume_=function(){this.paused_&&(this.paused_=!1,this.loadDeps_())},goog.DebugLoader_.prototype.loading_=function(a){this.loadingDeps_.push(a)},goog.DebugLoader_.prototype.loaded_=function(a){for(var b=0;b<this.loadingDeps_.length;b++)if(this.loadingDeps_[b]==a){this.loadingDeps_.splice(b,1);\nbreak}for(b=0;b<this.deferredQueue_.length;b++)if(this.deferredQueue_[b]==a.path){this.deferredQueue_.splice(b,1);break}if(this.loadingDeps_.length==this.deferredQueue_.length&&!this.depsToLoad_.length)for(;this.deferredQueue_.length;)this.requested(this.deferredQueue_.shift(),!0);a.loaded()},goog.DebugLoader_.prototype.areDepsLoaded_=function(a){for(var b=0;b<a.length;b++){var c=this.getPathFromDeps_(a[b]);if(!c||!(c in this.deferredCallbacks_||goog.isProvided_(a[b])))return!1}return!0},goog.DebugLoader_.prototype.getPathFromDeps_=\nfunction(a){return a in this.idToPath_?this.idToPath_[a]:a in this.dependencies_?a:null},goog.DebugLoader_.prototype.defer_=function(a,b){this.deferredCallbacks_[a.path]=b;this.deferredQueue_.push(a.path)},goog.LoadController=function(){},goog.LoadController.prototype.pause=function(){},goog.LoadController.prototype.resume=function(){},goog.LoadController.prototype.loaded=function(){},goog.LoadController.prototype.pending=function(){},goog.LoadController.prototype.registerEs6ModuleExports=function(a,\nb,c){},goog.LoadController.prototype.setModuleState=function(a){},goog.LoadController.prototype.clearModuleState=function(){},goog.LoadController.prototype.defer=function(a){},goog.LoadController.prototype.areDepsLoaded=function(){},goog.Dependency=function(a,b,c,d,e){this.path=a;this.relativePath=b;this.provides=c;this.requires=d;this.loadFlags=e;this.loaded_=!1;this.loadCallbacks_=[]},goog.Dependency.prototype.getPathName=function(){var a=this.path,b=a.indexOf(\"://\");0<=b&&(a=a.substring(b+3),b=\na.indexOf(\"/\"),0<=b&&(a=a.substring(b+1)));return a},goog.Dependency.prototype.onLoad=function(a){this.loaded_?a():this.loadCallbacks_.push(a)},goog.Dependency.prototype.loaded=function(){this.loaded_=!0;var a=this.loadCallbacks_;this.loadCallbacks_=[];for(var b=0;b<a.length;b++)a[b]()},goog.Dependency.defer_=!1,goog.Dependency.callbackMap_={},goog.Dependency.registerCallback_=function(a){var b=Math.random().toString(32);goog.Dependency.callbackMap_[b]=a;return b},goog.Dependency.unregisterCallback_=\nfunction(a){delete goog.Dependency.callbackMap_[a]},goog.Dependency.callback_=function(a,b){if(a in goog.Dependency.callbackMap_){for(var c=goog.Dependency.callbackMap_[a],d=[],e=1;e<arguments.length;e++)d.push(arguments[e]);c.apply(void 0,d)}else throw Error(\"Callback key \"+a+\" does not exist (was base.js loaded more than once?).\");},goog.Dependency.prototype.load=function(a){if(goog.global.CLOSURE_IMPORT_SCRIPT)goog.global.CLOSURE_IMPORT_SCRIPT(this.path)?a.loaded():a.pause();else if(goog.inHtmlDocument_()){var b=\ngoog.global.document;if(\"complete\"==b.readyState&&!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING){if(/\\bdeps.js$/.test(this.path)){a.loaded();return}throw Error('Cannot write \"'+this.path+'\" after document load');}if(!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING&&goog.isDocumentLoading_()){var c=goog.Dependency.registerCallback_(function(b){goog.DebugLoader_.IS_OLD_IE_&&\"complete\"!=b.readyState||(goog.Dependency.unregisterCallback_(c),a.loaded())}),d=!goog.DebugLoader_.IS_OLD_IE_&&goog.getScriptNonce()?\n' nonce=\"'+goog.getScriptNonce()+'\"':\"\";d='<script src=\"'+this.path+'\" '+(goog.DebugLoader_.IS_OLD_IE_?\"onreadystatechange\":\"onload\")+\"=\\\"goog.Dependency.callback_('\"+c+'\\', this)\" type=\"text/javascript\" '+(goog.Dependency.defer_?\"defer\":\"\")+d+\">\\x3c/script>\";b.write(goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createHTML(d):d)}else{var e=b.createElement(\"script\");e.defer=goog.Dependency.defer_;e.async=!1;e.type=\"text/javascript\";(d=goog.getScriptNonce())&&e.setAttribute(\"nonce\",d);goog.DebugLoader_.IS_OLD_IE_?\n(a.pause(),e.onreadystatechange=function(){if(\"loaded\"==e.readyState||\"complete\"==e.readyState)a.loaded(),a.resume()}):e.onload=function(){e.onload=null;a.loaded()};e.src=goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createScriptURL(this.path):this.path;b.head.appendChild(e)}}else goog.logToConsole_(\"Cannot use default debug loader outside of HTML documents.\"),\"deps.js\"==this.relativePath?(goog.logToConsole_(\"Consider setting CLOSURE_IMPORT_SCRIPT before loading base.js, or setting CLOSURE_NO_DEPS to true.\"),\na.loaded()):a.pause()},goog.Es6ModuleDependency=function(a,b,c,d,e){goog.Dependency.call(this,a,b,c,d,e)},goog.inherits(goog.Es6ModuleDependency,goog.Dependency),goog.Es6ModuleDependency.prototype.load=function(a){function b(a,b){a=b?'<script type=\"module\" crossorigin>'+b+\"\\x3c/script>\":'<script type=\"module\" crossorigin src=\"'+a+'\">\\x3c/script>';d.write(goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createHTML(a):a)}function c(a,b){var c=d.createElement(\"script\");c.defer=!0;c.async=!1;c.type=\n\"module\";c.setAttribute(\"crossorigin\",!0);var e=goog.getScriptNonce();e&&c.setAttribute(\"nonce\",e);b?c.textContent=goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createScript(b):b:c.src=goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createScriptURL(a):a;d.head.appendChild(c)}if(goog.global.CLOSURE_IMPORT_SCRIPT)goog.global.CLOSURE_IMPORT_SCRIPT(this.path)?a.loaded():a.pause();else if(goog.inHtmlDocument_()){var d=goog.global.document,e=this;if(goog.isDocumentLoading_()){var f=b;goog.Dependency.defer_=\n!0}else f=c;var g=goog.Dependency.registerCallback_(function(){goog.Dependency.unregisterCallback_(g);a.setModuleState(goog.ModuleType.ES6)});f(void 0,'goog.Dependency.callback_(\"'+g+'\")');f(this.path,void 0);var h=goog.Dependency.registerCallback_(function(b){goog.Dependency.unregisterCallback_(h);a.registerEs6ModuleExports(e.path,b,goog.moduleLoaderState_.moduleName)});f(void 0,'import * as m from \"'+this.path+'\"; goog.Dependency.callback_(\"'+h+'\", m)');var k=goog.Dependency.registerCallback_(function(){goog.Dependency.unregisterCallback_(k);\na.clearModuleState();a.loaded()});f(void 0,'goog.Dependency.callback_(\"'+k+'\")')}else goog.logToConsole_(\"Cannot use default debug loader outside of HTML documents.\"),a.pause()},goog.TransformedDependency=function(a,b,c,d,e){goog.Dependency.call(this,a,b,c,d,e);this.contents_=null;this.lazyFetch_=!goog.inHtmlDocument_()||!(\"noModule\"in goog.global.document.createElement(\"script\"))},goog.inherits(goog.TransformedDependency,goog.Dependency),goog.TransformedDependency.prototype.load=function(a){function b(){e.contents_=\ngoog.loadFileSync_(e.path);e.contents_&&(e.contents_=e.transform(e.contents_),e.contents_&&(e.contents_+=\"\\n//# sourceURL=\"+e.path))}function c(){e.lazyFetch_&&b();if(e.contents_){f&&a.setModuleState(goog.ModuleType.ES6);try{var c=e.contents_;e.contents_=null;goog.globalEval(c);if(f)var d=goog.moduleLoaderState_.moduleName}finally{f&&a.clearModuleState()}f&&goog.global.$jscomp.require.ensure([e.getPathName()],function(){a.registerEs6ModuleExports(e.path,goog.global.$jscomp.require(e.getPathName()),\nd)});a.loaded()}}function d(){var a=goog.global.document,b=goog.Dependency.registerCallback_(function(){goog.Dependency.unregisterCallback_(b);c()}),d='<script type=\"text/javascript\">'+goog.protectScriptTag_('goog.Dependency.callback_(\"'+b+'\");')+\"\\x3c/script>\";a.write(goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createHTML(d):d)}var e=this;if(goog.global.CLOSURE_IMPORT_SCRIPT)b(),this.contents_&&goog.global.CLOSURE_IMPORT_SCRIPT(\"\",this.contents_)?(this.contents_=null,a.loaded()):a.pause();\nelse{var f=this.loadFlags.module==goog.ModuleType.ES6;this.lazyFetch_||b();var g=1<a.pending().length,h=g&&goog.DebugLoader_.IS_OLD_IE_;g=goog.Dependency.defer_&&(g||goog.isDocumentLoading_());if(h||g)a.defer(function(){c()});else{var k=goog.global.document;h=goog.inHtmlDocument_()&&\"ActiveXObject\"in goog.global;if(f&&goog.inHtmlDocument_()&&goog.isDocumentLoading_()&&!h){goog.Dependency.defer_=!0;a.pause();var l=k.onreadystatechange;k.onreadystatechange=function(){\"interactive\"==k.readyState&&(k.onreadystatechange=\nl,c(),a.resume());goog.isFunction(l)&&l.apply(void 0,arguments)}}else!goog.DebugLoader_.IS_OLD_IE_&&goog.inHtmlDocument_()&&goog.isDocumentLoading_()?d():c()}}},goog.TransformedDependency.prototype.transform=function(a){},goog.TranspiledDependency=function(a,b,c,d,e,f){goog.TransformedDependency.call(this,a,b,c,d,e);this.transpiler=f},goog.inherits(goog.TranspiledDependency,goog.TransformedDependency),goog.TranspiledDependency.prototype.transform=function(a){return this.transpiler.transpile(a,this.getPathName())},\ngoog.PreTranspiledEs6ModuleDependency=function(a,b,c,d,e){goog.TransformedDependency.call(this,a,b,c,d,e)},goog.inherits(goog.PreTranspiledEs6ModuleDependency,goog.TransformedDependency),goog.PreTranspiledEs6ModuleDependency.prototype.transform=function(a){return a},goog.GoogModuleDependency=function(a,b,c,d,e,f,g){goog.TransformedDependency.call(this,a,b,c,d,e);this.needsTranspile_=f;this.transpiler_=g},goog.inherits(goog.GoogModuleDependency,goog.TransformedDependency),goog.GoogModuleDependency.prototype.transform=\nfunction(a){this.needsTranspile_&&(a=this.transpiler_.transpile(a,this.getPathName()));return goog.LOAD_MODULE_USING_EVAL&&goog.isDef(goog.global.JSON)?\"goog.loadModule(\"+goog.global.JSON.stringify(a+\"\\n//# sourceURL=\"+this.path+\"\\n\")+\");\":'goog.loadModule(function(exports) {\"use strict\";'+a+\"\\n;return exports});\\n//# sourceURL=\"+this.path+\"\\n\"},goog.DebugLoader_.IS_OLD_IE_=!(goog.global.atob||!goog.global.document||!goog.global.document.all),goog.DebugLoader_.prototype.addDependency=function(a,b,\nc,d){b=b||[];a=a.replace(/\\\\/g,\"/\");var e=goog.normalizePath_(goog.basePath+a);d&&\"boolean\"!==typeof d||(d=d?{module:goog.ModuleType.GOOG}:{});c=this.factory_.createDependency(e,a,b,c,d,goog.transpiler_.needsTranspile(d.lang||\"es3\",d.module));this.dependencies_[e]=c;for(c=0;c<b.length;c++)this.idToPath_[b[c]]=e;this.idToPath_[a]=e},goog.DependencyFactory=function(a){this.transpiler=a},goog.DependencyFactory.prototype.createDependency=function(a,b,c,d,e,f){return e.module==goog.ModuleType.GOOG?new goog.GoogModuleDependency(a,\nb,c,d,e,f,this.transpiler):f?new goog.TranspiledDependency(a,b,c,d,e,this.transpiler):e.module==goog.ModuleType.ES6?\"never\"==goog.TRANSPILE&&goog.ASSUME_ES_MODULES_TRANSPILED?new goog.PreTranspiledEs6ModuleDependency(a,b,c,d,e):new goog.Es6ModuleDependency(a,b,c,d,e):new goog.Dependency(a,b,c,d,e)},goog.debugLoader_=new goog.DebugLoader_,goog.loadClosureDeps=function(){goog.debugLoader_.loadClosureDeps()},goog.setDependencyFactory=function(a){goog.debugLoader_.setDependencyFactory(a)},goog.global.CLOSURE_NO_DEPS||\ngoog.debugLoader_.loadClosureDeps(),goog.bootstrap=function(a,b){goog.debugLoader_.bootstrap(a,b)});goog.TRUSTED_TYPES_POLICY_NAME=\"\";goog.identity_=function(a){return a};goog.createTrustedTypesPolicy=function(a){var b=null;if(\"undefined\"===typeof TrustedTypes||!TrustedTypes.createPolicy)return b;try{b=TrustedTypes.createPolicy(a,{createHTML:goog.identity_,createScript:goog.identity_,createScriptURL:goog.identity_,createURL:goog.identity_})}catch(c){goog.logToConsole_(c.message)}return b};\ngoog.TRUSTED_TYPES_POLICY_=goog.TRUSTED_TYPES_POLICY_NAME?goog.createTrustedTypesPolicy(goog.TRUSTED_TYPES_POLICY_NAME+\"#base\"):null;var jspb={BinaryConstants:{},ConstBinaryMessage:function(){},BinaryMessage:function(){}};jspb.BinaryConstants.FieldType={INVALID:-1,DOUBLE:1,FLOAT:2,INT64:3,UINT64:4,INT32:5,FIXED64:6,FIXED32:7,BOOL:8,STRING:9,GROUP:10,MESSAGE:11,BYTES:12,UINT32:13,ENUM:14,SFIXED32:15,SFIXED64:16,SINT32:17,SINT64:18,FHASH64:30,VHASH64:31};jspb.BinaryConstants.WireType={INVALID:-1,VARINT:0,FIXED64:1,DELIMITED:2,START_GROUP:3,END_GROUP:4,FIXED32:5};\njspb.BinaryConstants.FieldTypeToWireType=function(a){var b=jspb.BinaryConstants.FieldType,c=jspb.BinaryConstants.WireType;switch(a){case b.INT32:case b.INT64:case b.UINT32:case b.UINT64:case b.SINT32:case b.SINT64:case b.BOOL:case b.ENUM:case b.VHASH64:return c.VARINT;case b.DOUBLE:case b.FIXED64:case b.SFIXED64:case b.FHASH64:return c.FIXED64;case b.STRING:case b.MESSAGE:case b.BYTES:return c.DELIMITED;case b.FLOAT:case b.FIXED32:case b.SFIXED32:return c.FIXED32;default:return c.INVALID}};\njspb.BinaryConstants.INVALID_FIELD_NUMBER=-1;jspb.BinaryConstants.FLOAT32_EPS=1.401298464324817E-45;jspb.BinaryConstants.FLOAT32_MIN=1.1754943508222875E-38;jspb.BinaryConstants.FLOAT32_MAX=3.4028234663852886E38;jspb.BinaryConstants.FLOAT64_EPS=4.9E-324;jspb.BinaryConstants.FLOAT64_MIN=2.2250738585072014E-308;jspb.BinaryConstants.FLOAT64_MAX=1.7976931348623157E308;jspb.BinaryConstants.TWO_TO_20=1048576;jspb.BinaryConstants.TWO_TO_23=8388608;jspb.BinaryConstants.TWO_TO_31=2147483648;\njspb.BinaryConstants.TWO_TO_32=4294967296;jspb.BinaryConstants.TWO_TO_52=4503599627370496;jspb.BinaryConstants.TWO_TO_63=0x7fffffffffffffff;jspb.BinaryConstants.TWO_TO_64=1.8446744073709552E19;jspb.BinaryConstants.ZERO_HASH=\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";goog.dom={};goog.dom.NodeType={ELEMENT:1,ATTRIBUTE:2,TEXT:3,CDATA_SECTION:4,ENTITY_REFERENCE:5,ENTITY:6,PROCESSING_INSTRUCTION:7,COMMENT:8,DOCUMENT:9,DOCUMENT_TYPE:10,DOCUMENT_FRAGMENT:11,NOTATION:12};goog.debug={};goog.debug.Error=function(a){if(Error.captureStackTrace)Error.captureStackTrace(this,goog.debug.Error);else{var b=Error().stack;b&&(this.stack=b)}a&&(this.message=String(a));this.reportErrorToServer=!0};goog.inherits(goog.debug.Error,Error);goog.debug.Error.prototype.name=\"CustomError\";goog.asserts={};goog.asserts.ENABLE_ASSERTS=goog.DEBUG;goog.asserts.AssertionError=function(a,b){goog.debug.Error.call(this,goog.asserts.subs_(a,b));this.messagePattern=a};goog.inherits(goog.asserts.AssertionError,goog.debug.Error);goog.asserts.AssertionError.prototype.name=\"AssertionError\";goog.asserts.DEFAULT_ERROR_HANDLER=function(a){throw a;};goog.asserts.errorHandler_=goog.asserts.DEFAULT_ERROR_HANDLER;\ngoog.asserts.subs_=function(a,b){a=a.split(\"%s\");for(var c=\"\",d=a.length-1,e=0;e<d;e++)c+=a[e]+(e<b.length?b[e]:\"%s\");return c+a[d]};goog.asserts.doAssertFailure_=function(a,b,c,d){var e=\"Assertion failed\";if(c){e+=\": \"+c;var f=d}else a&&(e+=\": \"+a,f=b);a=new goog.asserts.AssertionError(\"\"+e,f||[]);goog.asserts.errorHandler_(a)};goog.asserts.setErrorHandler=function(a){goog.asserts.ENABLE_ASSERTS&&(goog.asserts.errorHandler_=a)};\ngoog.asserts.assert=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!a&&goog.asserts.doAssertFailure_(\"\",null,b,Array.prototype.slice.call(arguments,2));return a};goog.asserts.assertExists=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&null==a&&goog.asserts.doAssertFailure_(\"Expected to exist: %s.\",[a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.fail=function(a,b){goog.asserts.ENABLE_ASSERTS&&goog.asserts.errorHandler_(new goog.asserts.AssertionError(\"Failure\"+(a?\": \"+a:\"\"),Array.prototype.slice.call(arguments,1)))};goog.asserts.assertNumber=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isNumber(a)&&goog.asserts.doAssertFailure_(\"Expected number but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.assertString=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isString(a)&&goog.asserts.doAssertFailure_(\"Expected string but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};goog.asserts.assertFunction=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isFunction(a)&&goog.asserts.doAssertFailure_(\"Expected function but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.assertObject=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isObject(a)&&goog.asserts.doAssertFailure_(\"Expected object but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};goog.asserts.assertArray=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isArray(a)&&goog.asserts.doAssertFailure_(\"Expected array but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.assertBoolean=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isBoolean(a)&&goog.asserts.doAssertFailure_(\"Expected boolean but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};goog.asserts.assertElement=function(a,b,c){!goog.asserts.ENABLE_ASSERTS||goog.isObject(a)&&a.nodeType==goog.dom.NodeType.ELEMENT||goog.asserts.doAssertFailure_(\"Expected Element but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.assertInstanceof=function(a,b,c,d){!goog.asserts.ENABLE_ASSERTS||a instanceof b||goog.asserts.doAssertFailure_(\"Expected instanceof %s but got %s.\",[goog.asserts.getType_(b),goog.asserts.getType_(a)],c,Array.prototype.slice.call(arguments,3));return a};goog.asserts.assertFinite=function(a,b,c){!goog.asserts.ENABLE_ASSERTS||\"number\"==typeof a&&isFinite(a)||goog.asserts.doAssertFailure_(\"Expected %s to be a finite number but it is not.\",[a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.assertObjectPrototypeIsIntact=function(){for(var a in Object.prototype)goog.asserts.fail(a+\" should not be enumerable in Object.prototype.\")};goog.asserts.getType_=function(a){return a instanceof Function?a.displayName||a.name||\"unknown type name\":a instanceof Object?a.constructor.displayName||a.constructor.name||Object.prototype.toString.call(a):null===a?\"null\":typeof a};goog.array={};goog.NATIVE_ARRAY_PROTOTYPES=goog.TRUSTED_SITE;goog.array.ASSUME_NATIVE_FUNCTIONS=2012<goog.FEATURESET_YEAR;goog.array.peek=function(a){return a[a.length-1]};goog.array.last=goog.array.peek;\ngoog.array.indexOf=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.indexOf)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.indexOf.call(a,b,c)}:function(a,b,c){c=null==c?0:0>c?Math.max(0,a.length+c):c;if(goog.isString(a))return goog.isString(b)&&1==b.length?a.indexOf(b,c):-1;for(;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1};\ngoog.array.lastIndexOf=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.lastIndexOf)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.lastIndexOf.call(a,b,null==c?a.length-1:c)}:function(a,b,c){c=null==c?a.length-1:c;0>c&&(c=Math.max(0,a.length+c));if(goog.isString(a))return goog.isString(b)&&1==b.length?a.lastIndexOf(b,c):-1;for(;0<=c;c--)if(c in a&&a[c]===b)return c;return-1};\ngoog.array.forEach=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.forEach)?function(a,b,c){goog.asserts.assert(null!=a.length);Array.prototype.forEach.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=goog.isString(a)?a.split(\"\"):a,f=0;f<d;f++)f in e&&b.call(c,e[f],f,a)};goog.array.forEachRight=function(a,b,c){var d=a.length,e=goog.isString(a)?a.split(\"\"):a;for(--d;0<=d;--d)d in e&&b.call(c,e[d],d,a)};\ngoog.array.filter=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.filter)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.filter.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=[],f=0,g=goog.isString(a)?a.split(\"\"):a,h=0;h<d;h++)if(h in g){var k=g[h];b.call(c,k,h,a)&&(e[f++]=k)}return e};\ngoog.array.map=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.map)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.map.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=Array(d),f=goog.isString(a)?a.split(\"\"):a,g=0;g<d;g++)g in f&&(e[g]=b.call(c,f[g],g,a));return e};\ngoog.array.reduce=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.reduce)?function(a,b,c,d){goog.asserts.assert(null!=a.length);d&&(b=goog.bind(b,d));return Array.prototype.reduce.call(a,b,c)}:function(a,b,c,d){var e=c;goog.array.forEach(a,function(c,g){e=b.call(d,e,c,g,a)});return e};\ngoog.array.reduceRight=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.reduceRight)?function(a,b,c,d){goog.asserts.assert(null!=a.length);goog.asserts.assert(null!=b);d&&(b=goog.bind(b,d));return Array.prototype.reduceRight.call(a,b,c)}:function(a,b,c,d){var e=c;goog.array.forEachRight(a,function(c,g){e=b.call(d,e,c,g,a)});return e};\ngoog.array.some=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.some)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.some.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=goog.isString(a)?a.split(\"\"):a,f=0;f<d;f++)if(f in e&&b.call(c,e[f],f,a))return!0;return!1};\ngoog.array.every=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.every)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.every.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=goog.isString(a)?a.split(\"\"):a,f=0;f<d;f++)if(f in e&&!b.call(c,e[f],f,a))return!1;return!0};goog.array.count=function(a,b,c){var d=0;goog.array.forEach(a,function(a,f,g){b.call(c,a,f,g)&&++d},c);return d};\ngoog.array.find=function(a,b,c){b=goog.array.findIndex(a,b,c);return 0>b?null:goog.isString(a)?a.charAt(b):a[b]};goog.array.findIndex=function(a,b,c){for(var d=a.length,e=goog.isString(a)?a.split(\"\"):a,f=0;f<d;f++)if(f in e&&b.call(c,e[f],f,a))return f;return-1};goog.array.findRight=function(a,b,c){b=goog.array.findIndexRight(a,b,c);return 0>b?null:goog.isString(a)?a.charAt(b):a[b]};\ngoog.array.findIndexRight=function(a,b,c){var d=a.length,e=goog.isString(a)?a.split(\"\"):a;for(--d;0<=d;d--)if(d in e&&b.call(c,e[d],d,a))return d;return-1};goog.array.contains=function(a,b){return 0<=goog.array.indexOf(a,b)};goog.array.isEmpty=function(a){return 0==a.length};goog.array.clear=function(a){if(!goog.isArray(a))for(var b=a.length-1;0<=b;b--)delete a[b];a.length=0};goog.array.insert=function(a,b){goog.array.contains(a,b)||a.push(b)};\ngoog.array.insertAt=function(a,b,c){goog.array.splice(a,c,0,b)};goog.array.insertArrayAt=function(a,b,c){goog.partial(goog.array.splice,a,c,0).apply(null,b)};goog.array.insertBefore=function(a,b,c){var d;2==arguments.length||0>(d=goog.array.indexOf(a,c))?a.push(b):goog.array.insertAt(a,b,d)};goog.array.remove=function(a,b){b=goog.array.indexOf(a,b);var c;(c=0<=b)&&goog.array.removeAt(a,b);return c};\ngoog.array.removeLast=function(a,b){b=goog.array.lastIndexOf(a,b);return 0<=b?(goog.array.removeAt(a,b),!0):!1};goog.array.removeAt=function(a,b){goog.asserts.assert(null!=a.length);return 1==Array.prototype.splice.call(a,b,1).length};goog.array.removeIf=function(a,b,c){b=goog.array.findIndex(a,b,c);return 0<=b?(goog.array.removeAt(a,b),!0):!1};goog.array.removeAllIf=function(a,b,c){var d=0;goog.array.forEachRight(a,function(e,f){b.call(c,e,f,a)&&goog.array.removeAt(a,f)&&d++});return d};\ngoog.array.concat=function(a){return Array.prototype.concat.apply([],arguments)};goog.array.join=function(a){return Array.prototype.concat.apply([],arguments)};goog.array.toArray=function(a){var b=a.length;if(0<b){for(var c=Array(b),d=0;d<b;d++)c[d]=a[d];return c}return[]};goog.array.clone=goog.array.toArray;goog.array.extend=function(a,b){for(var c=1;c<arguments.length;c++){var d=arguments[c];if(goog.isArrayLike(d)){var e=a.length||0,f=d.length||0;a.length=e+f;for(var g=0;g<f;g++)a[e+g]=d[g]}else a.push(d)}};\ngoog.array.splice=function(a,b,c,d){goog.asserts.assert(null!=a.length);return Array.prototype.splice.apply(a,goog.array.slice(arguments,1))};goog.array.slice=function(a,b,c){goog.asserts.assert(null!=a.length);return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)};\ngoog.array.removeDuplicates=function(a,b,c){b=b||a;var d=function(a){return goog.isObject(a)?\"o\"+goog.getUid(a):(typeof a).charAt(0)+a};c=c||d;d={};for(var e=0,f=0;f<a.length;){var g=a[f++],h=c(g);Object.prototype.hasOwnProperty.call(d,h)||(d[h]=!0,b[e++]=g)}b.length=e};goog.array.binarySearch=function(a,b,c){return goog.array.binarySearch_(a,c||goog.array.defaultCompare,!1,b)};goog.array.binarySelect=function(a,b,c){return goog.array.binarySearch_(a,b,!0,void 0,c)};\ngoog.array.binarySearch_=function(a,b,c,d,e){for(var f=0,g=a.length,h;f<g;){var k=f+g>>1;var l=c?b.call(e,a[k],k,a):b(d,a[k]);0<l?f=k+1:(g=k,h=!l)}return h?f:~f};goog.array.sort=function(a,b){a.sort(b||goog.array.defaultCompare)};goog.array.stableSort=function(a,b){for(var c=Array(a.length),d=0;d<a.length;d++)c[d]={index:d,value:a[d]};var e=b||goog.array.defaultCompare;goog.array.sort(c,function(a,b){return e(a.value,b.value)||a.index-b.index});for(d=0;d<a.length;d++)a[d]=c[d].value};\ngoog.array.sortByKey=function(a,b,c){var d=c||goog.array.defaultCompare;goog.array.sort(a,function(a,c){return d(b(a),b(c))})};goog.array.sortObjectsByKey=function(a,b,c){goog.array.sortByKey(a,function(a){return a[b]},c)};goog.array.isSorted=function(a,b,c){b=b||goog.array.defaultCompare;for(var d=1;d<a.length;d++){var e=b(a[d-1],a[d]);if(0<e||0==e&&c)return!1}return!0};\ngoog.array.equals=function(a,b,c){if(!goog.isArrayLike(a)||!goog.isArrayLike(b)||a.length!=b.length)return!1;var d=a.length;c=c||goog.array.defaultCompareEquality;for(var e=0;e<d;e++)if(!c(a[e],b[e]))return!1;return!0};goog.array.compare3=function(a,b,c){c=c||goog.array.defaultCompare;for(var d=Math.min(a.length,b.length),e=0;e<d;e++){var f=c(a[e],b[e]);if(0!=f)return f}return goog.array.defaultCompare(a.length,b.length)};goog.array.defaultCompare=function(a,b){return a>b?1:a<b?-1:0};\ngoog.array.inverseDefaultCompare=function(a,b){return-goog.array.defaultCompare(a,b)};goog.array.defaultCompareEquality=function(a,b){return a===b};goog.array.binaryInsert=function(a,b,c){c=goog.array.binarySearch(a,b,c);return 0>c?(goog.array.insertAt(a,b,-(c+1)),!0):!1};goog.array.binaryRemove=function(a,b,c){b=goog.array.binarySearch(a,b,c);return 0<=b?goog.array.removeAt(a,b):!1};\ngoog.array.bucket=function(a,b,c){for(var d={},e=0;e<a.length;e++){var f=a[e],g=b.call(c,f,e,a);goog.isDef(g)&&(d[g]||(d[g]=[])).push(f)}return d};goog.array.toObject=function(a,b,c){var d={};goog.array.forEach(a,function(e,f){d[b.call(c,e,f,a)]=e});return d};goog.array.range=function(a,b,c){var d=[],e=0,f=a;c=c||1;void 0!==b&&(e=a,f=b);if(0>c*(f-e))return[];if(0<c)for(a=e;a<f;a+=c)d.push(a);else for(a=e;a>f;a+=c)d.push(a);return d};\ngoog.array.repeat=function(a,b){for(var c=[],d=0;d<b;d++)c[d]=a;return c};goog.array.flatten=function(a){for(var b=[],c=0;c<arguments.length;c++){var d=arguments[c];if(goog.isArray(d))for(var e=0;e<d.length;e+=8192){var f=goog.array.slice(d,e,e+8192);f=goog.array.flatten.apply(null,f);for(var g=0;g<f.length;g++)b.push(f[g])}else b.push(d)}return b};\ngoog.array.rotate=function(a,b){goog.asserts.assert(null!=a.length);a.length&&(b%=a.length,0<b?Array.prototype.unshift.apply(a,a.splice(-b,b)):0>b&&Array.prototype.push.apply(a,a.splice(0,-b)));return a};goog.array.moveItem=function(a,b,c){goog.asserts.assert(0<=b&&b<a.length);goog.asserts.assert(0<=c&&c<a.length);b=Array.prototype.splice.call(a,b,1);Array.prototype.splice.call(a,c,0,b[0])};\ngoog.array.zip=function(a){if(!arguments.length)return[];for(var b=[],c=arguments[0].length,d=1;d<arguments.length;d++)arguments[d].length<c&&(c=arguments[d].length);for(d=0;d<c;d++){for(var e=[],f=0;f<arguments.length;f++)e.push(arguments[f][d]);b.push(e)}return b};goog.array.shuffle=function(a,b){b=b||Math.random;for(var c=a.length-1;0<c;c--){var d=Math.floor(b()*(c+1)),e=a[c];a[c]=a[d];a[d]=e}};goog.array.copyByIndex=function(a,b){var c=[];goog.array.forEach(b,function(b){c.push(a[b])});return c};\ngoog.array.concatMap=function(a,b,c){return goog.array.concat.apply([],goog.array.map(a,b,c))};goog.crypt={};goog.crypt.stringToByteArray=function(a){for(var b=[],c=0,d=0;d<a.length;d++){var e=a.charCodeAt(d);255<e&&(b[c++]=e&255,e>>=8);b[c++]=e}return b};goog.crypt.byteArrayToString=function(a){if(8192>=a.length)return String.fromCharCode.apply(null,a);for(var b=\"\",c=0;c<a.length;c+=8192){var d=goog.array.slice(a,c,c+8192);b+=String.fromCharCode.apply(null,d)}return b};\ngoog.crypt.byteArrayToHex=function(a,b){return goog.array.map(a,function(a){a=a.toString(16);return 1<a.length?a:\"0\"+a}).join(b||\"\")};goog.crypt.hexToByteArray=function(a){goog.asserts.assert(0==a.length%2,\"Key string length must be multiple of 2\");for(var b=[],c=0;c<a.length;c+=2)b.push(parseInt(a.substring(c,c+2),16));return b};\ngoog.crypt.stringToUtf8ByteArray=function(a){for(var b=[],c=0,d=0;d<a.length;d++){var e=a.charCodeAt(d);128>e?b[c++]=e:(2048>e?b[c++]=e>>6|192:(55296==(e&64512)&&d+1<a.length&&56320==(a.charCodeAt(d+1)&64512)?(e=65536+((e&1023)<<10)+(a.charCodeAt(++d)&1023),b[c++]=e>>18|240,b[c++]=e>>12&63|128):b[c++]=e>>12|224,b[c++]=e>>6&63|128),b[c++]=e&63|128)}return b};\ngoog.crypt.utf8ByteArrayToString=function(a){for(var b=[],c=0,d=0;c<a.length;){var e=a[c++];if(128>e)b[d++]=String.fromCharCode(e);else if(191<e&&224>e){var f=a[c++];b[d++]=String.fromCharCode((e&31)<<6|f&63)}else if(239<e&&365>e){f=a[c++];var g=a[c++],h=a[c++];e=((e&7)<<18|(f&63)<<12|(g&63)<<6|h&63)-65536;b[d++]=String.fromCharCode(55296+(e>>10));b[d++]=String.fromCharCode(56320+(e&1023))}else f=a[c++],g=a[c++],b[d++]=String.fromCharCode((e&15)<<12|(f&63)<<6|g&63)}return b.join(\"\")};\ngoog.crypt.xorByteArray=function(a,b){goog.asserts.assert(a.length==b.length,\"XOR array lengths must match\");for(var c=[],d=0;d<a.length;d++)c.push(a[d]^b[d]);return c};goog.string={};goog.string.internal={};goog.string.internal.startsWith=function(a,b){return 0==a.lastIndexOf(b,0)};goog.string.internal.endsWith=function(a,b){var c=a.length-b.length;return 0<=c&&a.indexOf(b,c)==c};goog.string.internal.caseInsensitiveStartsWith=function(a,b){return 0==goog.string.internal.caseInsensitiveCompare(b,a.substr(0,b.length))};goog.string.internal.caseInsensitiveEndsWith=function(a,b){return 0==goog.string.internal.caseInsensitiveCompare(b,a.substr(a.length-b.length,b.length))};\ngoog.string.internal.caseInsensitiveEquals=function(a,b){return a.toLowerCase()==b.toLowerCase()};goog.string.internal.isEmptyOrWhitespace=function(a){return/^[\\s\\xa0]*$/.test(a)};goog.string.internal.trim=goog.TRUSTED_SITE&&String.prototype.trim?function(a){return a.trim()}:function(a){return/^[\\s\\xa0]*([\\s\\S]*?)[\\s\\xa0]*$/.exec(a)[1]};goog.string.internal.caseInsensitiveCompare=function(a,b){a=String(a).toLowerCase();b=String(b).toLowerCase();return a<b?-1:a==b?0:1};\ngoog.string.internal.newLineToBr=function(a,b){return a.replace(/(\\r\\n|\\r|\\n)/g,b?\"<br />\":\"<br>\")};\ngoog.string.internal.htmlEscape=function(a,b){if(b)a=a.replace(goog.string.internal.AMP_RE_,\"&amp;\").replace(goog.string.internal.LT_RE_,\"&lt;\").replace(goog.string.internal.GT_RE_,\"&gt;\").replace(goog.string.internal.QUOT_RE_,\"&quot;\").replace(goog.string.internal.SINGLE_QUOTE_RE_,\"&#39;\").replace(goog.string.internal.NULL_RE_,\"&#0;\");else{if(!goog.string.internal.ALL_RE_.test(a))return a;-1!=a.indexOf(\"&\")&&(a=a.replace(goog.string.internal.AMP_RE_,\"&amp;\"));-1!=a.indexOf(\"<\")&&(a=a.replace(goog.string.internal.LT_RE_,\n\"&lt;\"));-1!=a.indexOf(\">\")&&(a=a.replace(goog.string.internal.GT_RE_,\"&gt;\"));-1!=a.indexOf('\"')&&(a=a.replace(goog.string.internal.QUOT_RE_,\"&quot;\"));-1!=a.indexOf(\"'\")&&(a=a.replace(goog.string.internal.SINGLE_QUOTE_RE_,\"&#39;\"));-1!=a.indexOf(\"\\x00\")&&(a=a.replace(goog.string.internal.NULL_RE_,\"&#0;\"))}return a};goog.string.internal.AMP_RE_=/&/g;goog.string.internal.LT_RE_=/</g;goog.string.internal.GT_RE_=/>/g;goog.string.internal.QUOT_RE_=/\"/g;goog.string.internal.SINGLE_QUOTE_RE_=/'/g;\ngoog.string.internal.NULL_RE_=/\\x00/g;goog.string.internal.ALL_RE_=/[\\x00&<>\"']/;goog.string.internal.whitespaceEscape=function(a,b){return goog.string.internal.newLineToBr(a.replace(/  /g,\" &#160;\"),b)};goog.string.internal.contains=function(a,b){return-1!=a.indexOf(b)};goog.string.internal.caseInsensitiveContains=function(a,b){return goog.string.internal.contains(a.toLowerCase(),b.toLowerCase())};\ngoog.string.internal.compareVersions=function(a,b){var c=0;a=goog.string.internal.trim(String(a)).split(\".\");b=goog.string.internal.trim(String(b)).split(\".\");for(var d=Math.max(a.length,b.length),e=0;0==c&&e<d;e++){var f=a[e]||\"\",g=b[e]||\"\";do{f=/(\\d*)(\\D*)(.*)/.exec(f)||[\"\",\"\",\"\",\"\"];g=/(\\d*)(\\D*)(.*)/.exec(g)||[\"\",\"\",\"\",\"\"];if(0==f[0].length&&0==g[0].length)break;c=0==f[1].length?0:parseInt(f[1],10);var h=0==g[1].length?0:parseInt(g[1],10);c=goog.string.internal.compareElements_(c,h)||goog.string.internal.compareElements_(0==\nf[2].length,0==g[2].length)||goog.string.internal.compareElements_(f[2],g[2]);f=f[3];g=g[3]}while(0==c)}return c};goog.string.internal.compareElements_=function(a,b){return a<b?-1:a>b?1:0};goog.string.TypedString=function(){};goog.string.Const=function(a,b){this.stringConstValueWithSecurityContract__googStringSecurityPrivate_=a===goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_&&b||\"\";this.STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_=goog.string.Const.TYPE_MARKER_};goog.string.Const.prototype.implementsGoogStringTypedString=!0;goog.string.Const.prototype.getTypedStringValue=function(){return this.stringConstValueWithSecurityContract__googStringSecurityPrivate_};\ngoog.string.Const.prototype.toString=function(){return\"Const{\"+this.stringConstValueWithSecurityContract__googStringSecurityPrivate_+\"}\"};goog.string.Const.unwrap=function(a){if(a instanceof goog.string.Const&&a.constructor===goog.string.Const&&a.STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_===goog.string.Const.TYPE_MARKER_)return a.stringConstValueWithSecurityContract__googStringSecurityPrivate_;goog.asserts.fail(\"expected object of type Const, got '\"+a+\"'\");return\"type_error:Const\"};\ngoog.string.Const.from=function(a){return new goog.string.Const(goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_,a)};goog.string.Const.TYPE_MARKER_={};goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_={};goog.string.Const.EMPTY=goog.string.Const.from(\"\");goog.fs={};goog.fs.url={};goog.fs.url.createObjectUrl=function(a){return goog.fs.url.getUrlObject_().createObjectURL(a)};goog.fs.url.revokeObjectUrl=function(a){goog.fs.url.getUrlObject_().revokeObjectURL(a)};goog.fs.url.getUrlObject_=function(){var a=goog.fs.url.findUrlObject_();if(null!=a)return a;throw Error(\"This browser doesn't seem to support blob URLs\");};\ngoog.fs.url.findUrlObject_=function(){return goog.isDef(goog.global.URL)&&goog.isDef(goog.global.URL.createObjectURL)?goog.global.URL:goog.isDef(goog.global.webkitURL)&&goog.isDef(goog.global.webkitURL.createObjectURL)?goog.global.webkitURL:goog.isDef(goog.global.createObjectURL)?goog.global:null};goog.fs.url.browserSupportsObjectUrls=function(){return null!=goog.fs.url.findUrlObject_()};goog.html={};goog.html.trustedtypes={};goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY=goog.TRUSTED_TYPES_POLICY_NAME?goog.createTrustedTypesPolicy(goog.TRUSTED_TYPES_POLICY_NAME+\"#html\"):null;goog.i18n={};goog.i18n.bidi={};goog.i18n.bidi.FORCE_RTL=!1;\ngoog.i18n.bidi.IS_RTL=goog.i18n.bidi.FORCE_RTL||(\"ar\"==goog.LOCALE.substring(0,2).toLowerCase()||\"fa\"==goog.LOCALE.substring(0,2).toLowerCase()||\"he\"==goog.LOCALE.substring(0,2).toLowerCase()||\"iw\"==goog.LOCALE.substring(0,2).toLowerCase()||\"ps\"==goog.LOCALE.substring(0,2).toLowerCase()||\"sd\"==goog.LOCALE.substring(0,2).toLowerCase()||\"ug\"==goog.LOCALE.substring(0,2).toLowerCase()||\"ur\"==goog.LOCALE.substring(0,2).toLowerCase()||\"yi\"==goog.LOCALE.substring(0,2).toLowerCase())&&(2==goog.LOCALE.length||\n\"-\"==goog.LOCALE.substring(2,3)||\"_\"==goog.LOCALE.substring(2,3))||3<=goog.LOCALE.length&&\"ckb\"==goog.LOCALE.substring(0,3).toLowerCase()&&(3==goog.LOCALE.length||\"-\"==goog.LOCALE.substring(3,4)||\"_\"==goog.LOCALE.substring(3,4))||7<=goog.LOCALE.length&&(\"-\"==goog.LOCALE.substring(2,3)||\"_\"==goog.LOCALE.substring(2,3))&&(\"adlm\"==goog.LOCALE.substring(3,7).toLowerCase()||\"arab\"==goog.LOCALE.substring(3,7).toLowerCase()||\"hebr\"==goog.LOCALE.substring(3,7).toLowerCase()||\"nkoo\"==goog.LOCALE.substring(3,\n7).toLowerCase()||\"rohg\"==goog.LOCALE.substring(3,7).toLowerCase()||\"thaa\"==goog.LOCALE.substring(3,7).toLowerCase())||8<=goog.LOCALE.length&&(\"-\"==goog.LOCALE.substring(3,4)||\"_\"==goog.LOCALE.substring(3,4))&&(\"adlm\"==goog.LOCALE.substring(4,8).toLowerCase()||\"arab\"==goog.LOCALE.substring(4,8).toLowerCase()||\"hebr\"==goog.LOCALE.substring(4,8).toLowerCase()||\"nkoo\"==goog.LOCALE.substring(4,8).toLowerCase()||\"rohg\"==goog.LOCALE.substring(4,8).toLowerCase()||\"thaa\"==goog.LOCALE.substring(4,8).toLowerCase());\ngoog.i18n.bidi.Format={LRE:\"\\u202a\",RLE:\"\\u202b\",PDF:\"\\u202c\",LRM:\"\\u200e\",RLM:\"\\u200f\"};goog.i18n.bidi.Dir={LTR:1,RTL:-1,NEUTRAL:0};goog.i18n.bidi.RIGHT=\"right\";goog.i18n.bidi.LEFT=\"left\";goog.i18n.bidi.I18N_RIGHT=goog.i18n.bidi.IS_RTL?goog.i18n.bidi.LEFT:goog.i18n.bidi.RIGHT;goog.i18n.bidi.I18N_LEFT=goog.i18n.bidi.IS_RTL?goog.i18n.bidi.RIGHT:goog.i18n.bidi.LEFT;\ngoog.i18n.bidi.toDir=function(a,b){return\"number\"==typeof a?0<a?goog.i18n.bidi.Dir.LTR:0>a?goog.i18n.bidi.Dir.RTL:b?null:goog.i18n.bidi.Dir.NEUTRAL:null==a?null:a?goog.i18n.bidi.Dir.RTL:goog.i18n.bidi.Dir.LTR};goog.i18n.bidi.ltrChars_=\"A-Za-z\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02b8\\u0300-\\u0590\\u0900-\\u1fff\\u200e\\u2c00-\\ud801\\ud804-\\ud839\\ud83c-\\udbff\\uf900-\\ufb1c\\ufe00-\\ufe6f\\ufefd-\\uffff\";goog.i18n.bidi.rtlChars_=\"\\u0591-\\u06ef\\u06fa-\\u08ff\\u200f\\ud802-\\ud803\\ud83a-\\ud83b\\ufb1d-\\ufdff\\ufe70-\\ufefc\";\ngoog.i18n.bidi.htmlSkipReg_=/<[^>]*>|&[^;]+;/g;goog.i18n.bidi.stripHtmlIfNeeded_=function(a,b){return b?a.replace(goog.i18n.bidi.htmlSkipReg_,\"\"):a};goog.i18n.bidi.rtlCharReg_=new RegExp(\"[\"+goog.i18n.bidi.rtlChars_+\"]\");goog.i18n.bidi.ltrCharReg_=new RegExp(\"[\"+goog.i18n.bidi.ltrChars_+\"]\");goog.i18n.bidi.hasAnyRtl=function(a,b){return goog.i18n.bidi.rtlCharReg_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.hasRtlChar=goog.i18n.bidi.hasAnyRtl;\ngoog.i18n.bidi.hasAnyLtr=function(a,b){return goog.i18n.bidi.ltrCharReg_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.ltrRe_=new RegExp(\"^[\"+goog.i18n.bidi.ltrChars_+\"]\");goog.i18n.bidi.rtlRe_=new RegExp(\"^[\"+goog.i18n.bidi.rtlChars_+\"]\");goog.i18n.bidi.isRtlChar=function(a){return goog.i18n.bidi.rtlRe_.test(a)};goog.i18n.bidi.isLtrChar=function(a){return goog.i18n.bidi.ltrRe_.test(a)};goog.i18n.bidi.isNeutralChar=function(a){return!goog.i18n.bidi.isLtrChar(a)&&!goog.i18n.bidi.isRtlChar(a)};\ngoog.i18n.bidi.ltrDirCheckRe_=new RegExp(\"^[^\"+goog.i18n.bidi.rtlChars_+\"]*[\"+goog.i18n.bidi.ltrChars_+\"]\");goog.i18n.bidi.rtlDirCheckRe_=new RegExp(\"^[^\"+goog.i18n.bidi.ltrChars_+\"]*[\"+goog.i18n.bidi.rtlChars_+\"]\");goog.i18n.bidi.startsWithRtl=function(a,b){return goog.i18n.bidi.rtlDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.isRtlText=goog.i18n.bidi.startsWithRtl;\ngoog.i18n.bidi.startsWithLtr=function(a,b){return goog.i18n.bidi.ltrDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.isLtrText=goog.i18n.bidi.startsWithLtr;goog.i18n.bidi.isRequiredLtrRe_=/^http:\\/\\/.*/;goog.i18n.bidi.isNeutralText=function(a,b){a=goog.i18n.bidi.stripHtmlIfNeeded_(a,b);return goog.i18n.bidi.isRequiredLtrRe_.test(a)||!goog.i18n.bidi.hasAnyLtr(a)&&!goog.i18n.bidi.hasAnyRtl(a)};\ngoog.i18n.bidi.ltrExitDirCheckRe_=new RegExp(\"[\"+goog.i18n.bidi.ltrChars_+\"][^\"+goog.i18n.bidi.rtlChars_+\"]*$\");goog.i18n.bidi.rtlExitDirCheckRe_=new RegExp(\"[\"+goog.i18n.bidi.rtlChars_+\"][^\"+goog.i18n.bidi.ltrChars_+\"]*$\");goog.i18n.bidi.endsWithLtr=function(a,b){return goog.i18n.bidi.ltrExitDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.isLtrExitText=goog.i18n.bidi.endsWithLtr;\ngoog.i18n.bidi.endsWithRtl=function(a,b){return goog.i18n.bidi.rtlExitDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.isRtlExitText=goog.i18n.bidi.endsWithRtl;goog.i18n.bidi.rtlLocalesRe_=/^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i;goog.i18n.bidi.isRtlLanguage=function(a){return goog.i18n.bidi.rtlLocalesRe_.test(a)};goog.i18n.bidi.bracketGuardTextRe_=/(\\(.*?\\)+)|(\\[.*?\\]+)|(\\{.*?\\}+)|(<.*?>+)/g;\ngoog.i18n.bidi.guardBracketInText=function(a,b){b=(void 0===b?goog.i18n.bidi.hasAnyRtl(a):b)?goog.i18n.bidi.Format.RLM:goog.i18n.bidi.Format.LRM;return a.replace(goog.i18n.bidi.bracketGuardTextRe_,b+\"$&\"+b)};goog.i18n.bidi.enforceRtlInHtml=function(a){return\"<\"==a.charAt(0)?a.replace(/<\\w+/,\"$& dir=rtl\"):\"\\n<span dir=rtl>\"+a+\"</span>\"};goog.i18n.bidi.enforceRtlInText=function(a){return goog.i18n.bidi.Format.RLE+a+goog.i18n.bidi.Format.PDF};\ngoog.i18n.bidi.enforceLtrInHtml=function(a){return\"<\"==a.charAt(0)?a.replace(/<\\w+/,\"$& dir=ltr\"):\"\\n<span dir=ltr>\"+a+\"</span>\"};goog.i18n.bidi.enforceLtrInText=function(a){return goog.i18n.bidi.Format.LRE+a+goog.i18n.bidi.Format.PDF};goog.i18n.bidi.dimensionsRe_=/:\\s*([.\\d][.\\w]*)\\s+([.\\d][.\\w]*)\\s+([.\\d][.\\w]*)\\s+([.\\d][.\\w]*)/g;goog.i18n.bidi.leftRe_=/left/gi;goog.i18n.bidi.rightRe_=/right/gi;goog.i18n.bidi.tempRe_=/%%%%/g;\ngoog.i18n.bidi.mirrorCSS=function(a){return a.replace(goog.i18n.bidi.dimensionsRe_,\":$1 $4 $3 $2\").replace(goog.i18n.bidi.leftRe_,\"%%%%\").replace(goog.i18n.bidi.rightRe_,goog.i18n.bidi.LEFT).replace(goog.i18n.bidi.tempRe_,goog.i18n.bidi.RIGHT)};goog.i18n.bidi.doubleQuoteSubstituteRe_=/([\\u0591-\\u05f2])\"/g;goog.i18n.bidi.singleQuoteSubstituteRe_=/([\\u0591-\\u05f2])'/g;\ngoog.i18n.bidi.normalizeHebrewQuote=function(a){return a.replace(goog.i18n.bidi.doubleQuoteSubstituteRe_,\"$1\\u05f4\").replace(goog.i18n.bidi.singleQuoteSubstituteRe_,\"$1\\u05f3\")};goog.i18n.bidi.wordSeparatorRe_=/\\s+/;goog.i18n.bidi.hasNumeralsRe_=/[\\d\\u06f0-\\u06f9]/;goog.i18n.bidi.rtlDetectionThreshold_=.4;\ngoog.i18n.bidi.estimateDirection=function(a,b){var c=0,d=0,e=!1;a=goog.i18n.bidi.stripHtmlIfNeeded_(a,b).split(goog.i18n.bidi.wordSeparatorRe_);for(b=0;b<a.length;b++){var f=a[b];goog.i18n.bidi.startsWithRtl(f)?(c++,d++):goog.i18n.bidi.isRequiredLtrRe_.test(f)?e=!0:goog.i18n.bidi.hasAnyLtr(f)?d++:goog.i18n.bidi.hasNumeralsRe_.test(f)&&(e=!0)}return 0==d?e?goog.i18n.bidi.Dir.LTR:goog.i18n.bidi.Dir.NEUTRAL:c/d>goog.i18n.bidi.rtlDetectionThreshold_?goog.i18n.bidi.Dir.RTL:goog.i18n.bidi.Dir.LTR};\ngoog.i18n.bidi.detectRtlDirectionality=function(a,b){return goog.i18n.bidi.estimateDirection(a,b)==goog.i18n.bidi.Dir.RTL};goog.i18n.bidi.setElementDirAndAlign=function(a,b){a&&(b=goog.i18n.bidi.toDir(b))&&(a.style.textAlign=b==goog.i18n.bidi.Dir.RTL?goog.i18n.bidi.RIGHT:goog.i18n.bidi.LEFT,a.dir=b==goog.i18n.bidi.Dir.RTL?\"rtl\":\"ltr\")};\ngoog.i18n.bidi.setElementDirByTextDirectionality=function(a,b){switch(goog.i18n.bidi.estimateDirection(b)){case goog.i18n.bidi.Dir.LTR:a.dir=\"ltr\";break;case goog.i18n.bidi.Dir.RTL:a.dir=\"rtl\";break;default:a.removeAttribute(\"dir\")}};goog.i18n.bidi.DirectionalString=function(){};goog.html.TrustedResourceUrl=function(){this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_=\"\";this.trustedURL_=null;this.TRUSTED_RESOURCE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_};goog.html.TrustedResourceUrl.prototype.implementsGoogStringTypedString=!0;goog.html.TrustedResourceUrl.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_.toString()};\ngoog.html.TrustedResourceUrl.prototype.implementsGoogI18nBidiDirectionalString=!0;goog.html.TrustedResourceUrl.prototype.getDirection=function(){return goog.i18n.bidi.Dir.LTR};\ngoog.html.TrustedResourceUrl.prototype.cloneWithParams=function(a,b){var c=goog.html.TrustedResourceUrl.unwrap(this);c=goog.html.TrustedResourceUrl.URL_PARAM_PARSER_.exec(c);var d=c[3]||\"\";return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(c[1]+goog.html.TrustedResourceUrl.stringifyParams_(\"?\",c[2]||\"\",a)+goog.html.TrustedResourceUrl.stringifyParams_(\"#\",d,b))};\ngoog.DEBUG&&(goog.html.TrustedResourceUrl.prototype.toString=function(){return\"TrustedResourceUrl{\"+this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_+\"}\"});goog.html.TrustedResourceUrl.unwrap=function(a){return goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(a).toString()};\ngoog.html.TrustedResourceUrl.unwrapTrustedScriptURL=function(a){if(a instanceof goog.html.TrustedResourceUrl&&a.constructor===goog.html.TrustedResourceUrl&&a.TRUSTED_RESOURCE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_)return a.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_;goog.asserts.fail(\"expected object of type TrustedResourceUrl, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:TrustedResourceUrl\"};\ngoog.html.TrustedResourceUrl.unwrapTrustedURL=function(a){return a.trustedURL_?a.trustedURL_:goog.html.TrustedResourceUrl.unwrap(a)};\ngoog.html.TrustedResourceUrl.format=function(a,b){var c=goog.string.Const.unwrap(a);if(!goog.html.TrustedResourceUrl.BASE_URL_.test(c))throw Error(\"Invalid TrustedResourceUrl format: \"+c);a=c.replace(goog.html.TrustedResourceUrl.FORMAT_MARKER_,function(a,e){if(!Object.prototype.hasOwnProperty.call(b,e))throw Error('Found marker, \"'+e+'\", in format string, \"'+c+'\", but no valid label mapping found in args: '+JSON.stringify(b));a=b[e];return a instanceof goog.string.Const?goog.string.Const.unwrap(a):\nencodeURIComponent(String(a))});return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(a)};goog.html.TrustedResourceUrl.FORMAT_MARKER_=/%{(\\w+)}/g;goog.html.TrustedResourceUrl.BASE_URL_=/^((https:)?\\/\\/[0-9a-z.:[\\]-]+\\/|\\/[^/\\\\]|[^:/\\\\%]+\\/|[^:/\\\\%]*[?#]|about:blank#)/i;goog.html.TrustedResourceUrl.URL_PARAM_PARSER_=/^([^?#]*)(\\?[^#]*)?(#[\\s\\S]*)?/;\ngoog.html.TrustedResourceUrl.formatWithParams=function(a,b,c,d){return goog.html.TrustedResourceUrl.format(a,b).cloneWithParams(c,d)};goog.html.TrustedResourceUrl.fromConstant=function(a){return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(goog.string.Const.unwrap(a))};goog.html.TrustedResourceUrl.fromConstants=function(a){for(var b=\"\",c=0;c<a.length;c++)b+=goog.string.Const.unwrap(a[c]);return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={};\ngoog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse=function(a){var b=new goog.html.TrustedResourceUrl;b.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY?goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createScriptURL(a):a;goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY&&(b.trustedURL_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createURL(a));return b};\ngoog.html.TrustedResourceUrl.stringifyParams_=function(a,b,c){if(null==c)return b;if(goog.isString(c))return c?a+encodeURIComponent(c):\"\";for(var d in c){var e=c[d];e=goog.isArray(e)?e:[e];for(var f=0;f<e.length;f++){var g=e[f];null!=g&&(b||(b=a),b+=(b.length>a.length?\"&\":\"\")+encodeURIComponent(d)+\"=\"+encodeURIComponent(String(g)))}}return b};goog.html.SafeUrl=function(){this.privateDoNotAccessOrElseSafeUrlWrappedValue_=\"\";this.SAFE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_};goog.html.SafeUrl.INNOCUOUS_STRING=\"about:invalid#zClosurez\";goog.html.SafeUrl.prototype.implementsGoogStringTypedString=!0;goog.html.SafeUrl.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeUrlWrappedValue_.toString()};\ngoog.html.SafeUrl.prototype.implementsGoogI18nBidiDirectionalString=!0;goog.html.SafeUrl.prototype.getDirection=function(){return goog.i18n.bidi.Dir.LTR};goog.DEBUG&&(goog.html.SafeUrl.prototype.toString=function(){return\"SafeUrl{\"+this.privateDoNotAccessOrElseSafeUrlWrappedValue_+\"}\"});goog.html.SafeUrl.unwrap=function(a){return goog.html.SafeUrl.unwrapTrustedURL(a).toString()};\ngoog.html.SafeUrl.unwrapTrustedURL=function(a){if(a instanceof goog.html.SafeUrl&&a.constructor===goog.html.SafeUrl&&a.SAFE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_)return a.privateDoNotAccessOrElseSafeUrlWrappedValue_;goog.asserts.fail(\"expected object of type SafeUrl, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:SafeUrl\"};goog.html.SafeUrl.fromConstant=function(a){return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(goog.string.Const.unwrap(a))};\ngoog.html.SAFE_MIME_TYPE_PATTERN_=/^(?:audio\\/(?:3gpp2|3gpp|aac|L16|midi|mp3|mp4|mpeg|oga|ogg|opus|x-m4a|x-wav|wav|webm)|image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp|x-icon)|text\\/csv|video\\/(?:mpeg|mp4|ogg|webm|quicktime))(?:;\\w+=(?:\\w+|\"[\\w;=]+\"))*$/i;goog.html.SafeUrl.isSafeMimeType=function(a){return goog.html.SAFE_MIME_TYPE_PATTERN_.test(a)};goog.html.SafeUrl.fromBlob=function(a){a=goog.html.SAFE_MIME_TYPE_PATTERN_.test(a.type)?goog.fs.url.createObjectUrl(a):goog.html.SafeUrl.INNOCUOUS_STRING;return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.DATA_URL_PATTERN_=/^data:([^,]*);base64,[a-z0-9+\\/]+=*$/i;goog.html.SafeUrl.fromDataUrl=function(a){a=a.replace(/(%0A|%0D)/g,\"\");var b=a.match(goog.html.DATA_URL_PATTERN_);b=b&&goog.html.SAFE_MIME_TYPE_PATTERN_.test(b[1]);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(b?a:goog.html.SafeUrl.INNOCUOUS_STRING)};goog.html.SafeUrl.fromTelUrl=function(a){goog.string.internal.caseInsensitiveStartsWith(a,\"tel:\")||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SIP_URL_PATTERN_=/^sip[s]?:[+a-z0-9_.!$%&'*\\/=^`{|}~-]+@([a-z0-9-]+\\.)+[a-z0-9]{2,63}$/i;goog.html.SafeUrl.fromSipUrl=function(a){goog.html.SIP_URL_PATTERN_.test(decodeURIComponent(a))||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};goog.html.SafeUrl.fromFacebookMessengerUrl=function(a){goog.string.internal.caseInsensitiveStartsWith(a,\"fb-messenger://share\")||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeUrl.fromWhatsAppUrl=function(a){goog.string.internal.caseInsensitiveStartsWith(a,\"whatsapp://send\")||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};goog.html.SafeUrl.fromSmsUrl=function(a){goog.string.internal.caseInsensitiveStartsWith(a,\"sms:\")&&goog.html.SafeUrl.isSmsUrlBodyValid_(a)||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeUrl.isSmsUrlBodyValid_=function(a){var b=a.indexOf(\"#\");0<b&&(a=a.substring(0,b));b=a.match(/[?&]body=/gi);if(!b)return!0;if(1<b.length)return!1;a=a.match(/[?&]body=([^&]*)/)[1];if(!a)return!0;try{decodeURIComponent(a)}catch(c){return!1}return/^(?:[a-z0-9\\-_.~]|%[0-9a-f]{2})+$/i.test(a)};goog.html.SafeUrl.fromSshUrl=function(a){goog.string.internal.caseInsensitiveStartsWith(a,\"ssh://\")||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeUrl.sanitizeChromeExtensionUrl=function(a,b){return goog.html.SafeUrl.sanitizeExtensionUrl_(/^chrome-extension:\\/\\/([^\\/]+)\\//,a,b)};goog.html.SafeUrl.sanitizeFirefoxExtensionUrl=function(a,b){return goog.html.SafeUrl.sanitizeExtensionUrl_(/^moz-extension:\\/\\/([^\\/]+)\\//,a,b)};goog.html.SafeUrl.sanitizeEdgeExtensionUrl=function(a,b){return goog.html.SafeUrl.sanitizeExtensionUrl_(/^ms-browser-extension:\\/\\/([^\\/]+)\\//,a,b)};\ngoog.html.SafeUrl.sanitizeExtensionUrl_=function(a,b,c){(a=a.exec(b))?(a=a[1],-1==(c instanceof goog.string.Const?[goog.string.Const.unwrap(c)]:c.map(function(a){return goog.string.Const.unwrap(a)})).indexOf(a)&&(b=goog.html.SafeUrl.INNOCUOUS_STRING)):b=goog.html.SafeUrl.INNOCUOUS_STRING;return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(b)};goog.html.SafeUrl.fromTrustedResourceUrl=function(a){return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(goog.html.TrustedResourceUrl.unwrap(a))};\ngoog.html.SAFE_URL_PATTERN_=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;goog.html.SafeUrl.SAFE_URL_PATTERN=goog.html.SAFE_URL_PATTERN_;goog.html.SafeUrl.sanitize=function(a){if(a instanceof goog.html.SafeUrl)return a;a=\"object\"==typeof a&&a.implementsGoogStringTypedString?a.getTypedStringValue():String(a);goog.html.SAFE_URL_PATTERN_.test(a)||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeUrl.sanitizeAssertUnchanged=function(a,b){if(a instanceof goog.html.SafeUrl)return a;a=\"object\"==typeof a&&a.implementsGoogStringTypedString?a.getTypedStringValue():String(a);if(b&&/^data:/i.test(a)&&(b=goog.html.SafeUrl.fromDataUrl(a),b.getTypedStringValue()==a))return b;goog.asserts.assert(goog.html.SAFE_URL_PATTERN_.test(a),\"%s does not match the safe URL pattern\",a)||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={};goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse=function(a){var b=new goog.html.SafeUrl;b.privateDoNotAccessOrElseSafeUrlWrappedValue_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY?goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createURL(a):a;return b};goog.html.SafeUrl.ABOUT_BLANK=goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(\"about:blank\");goog.html.SafeStyle=function(){this.privateDoNotAccessOrElseSafeStyleWrappedValue_=\"\";this.SAFE_STYLE_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_};goog.html.SafeStyle.prototype.implementsGoogStringTypedString=!0;goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={};\ngoog.html.SafeStyle.fromConstant=function(a){a=goog.string.Const.unwrap(a);if(0===a.length)return goog.html.SafeStyle.EMPTY;goog.asserts.assert(goog.string.internal.endsWith(a,\";\"),\"Last character of style string is not ';': \"+a);goog.asserts.assert(goog.string.internal.contains(a,\":\"),\"Style string must contain at least one ':', to specify a \\\"name: value\\\" pair: \"+a);return goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeStyle.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeStyleWrappedValue_};goog.DEBUG&&(goog.html.SafeStyle.prototype.toString=function(){return\"SafeStyle{\"+this.privateDoNotAccessOrElseSafeStyleWrappedValue_+\"}\"});\ngoog.html.SafeStyle.unwrap=function(a){if(a instanceof goog.html.SafeStyle&&a.constructor===goog.html.SafeStyle&&a.SAFE_STYLE_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_)return a.privateDoNotAccessOrElseSafeStyleWrappedValue_;goog.asserts.fail(\"expected object of type SafeStyle, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:SafeStyle\"};goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse=function(a){return(new goog.html.SafeStyle).initSecurityPrivateDoNotAccessOrElse_(a)};\ngoog.html.SafeStyle.prototype.initSecurityPrivateDoNotAccessOrElse_=function(a){this.privateDoNotAccessOrElseSafeStyleWrappedValue_=a;return this};goog.html.SafeStyle.EMPTY=goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(\"\");goog.html.SafeStyle.INNOCUOUS_STRING=\"zClosurez\";\ngoog.html.SafeStyle.create=function(a){var b=\"\",c;for(c in a){if(!/^[-_a-zA-Z0-9]+$/.test(c))throw Error(\"Name allows only [-_a-zA-Z0-9], got: \"+c);var d=a[c];null!=d&&(d=goog.isArray(d)?goog.array.map(d,goog.html.SafeStyle.sanitizePropertyValue_).join(\" \"):goog.html.SafeStyle.sanitizePropertyValue_(d),b+=c+\":\"+d+\";\")}return b?goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(b):goog.html.SafeStyle.EMPTY};\ngoog.html.SafeStyle.sanitizePropertyValue_=function(a){if(a instanceof goog.html.SafeUrl)return'url(\"'+goog.html.SafeUrl.unwrap(a).replace(/</g,\"%3c\").replace(/[\\\\\"]/g,\"\\\\$&\")+'\")';a=a instanceof goog.string.Const?goog.string.Const.unwrap(a):goog.html.SafeStyle.sanitizePropertyValueString_(String(a));if(/[{;}]/.test(a))throw new goog.asserts.AssertionError(\"Value does not allow [{;}], got: %s.\",[a]);return a};\ngoog.html.SafeStyle.sanitizePropertyValueString_=function(a){var b=a.replace(goog.html.SafeStyle.FUNCTIONS_RE_,\"$1\").replace(goog.html.SafeStyle.FUNCTIONS_RE_,\"$1\").replace(goog.html.SafeStyle.URL_RE_,\"url\");if(goog.html.SafeStyle.VALUE_RE_.test(b)){if(goog.html.SafeStyle.COMMENT_RE_.test(a))return goog.asserts.fail(\"String value disallows comments, got: \"+a),goog.html.SafeStyle.INNOCUOUS_STRING;if(!goog.html.SafeStyle.hasBalancedQuotes_(a))return goog.asserts.fail(\"String value requires balanced quotes, got: \"+\na),goog.html.SafeStyle.INNOCUOUS_STRING;if(!goog.html.SafeStyle.hasBalancedSquareBrackets_(a))return goog.asserts.fail(\"String value requires balanced square brackets and one identifier per pair of brackets, got: \"+a),goog.html.SafeStyle.INNOCUOUS_STRING}else return goog.asserts.fail(\"String value allows only \"+goog.html.SafeStyle.VALUE_ALLOWED_CHARS_+\" and simple functions, got: \"+a),goog.html.SafeStyle.INNOCUOUS_STRING;return goog.html.SafeStyle.sanitizeUrl_(a)};\ngoog.html.SafeStyle.hasBalancedQuotes_=function(a){for(var b=!0,c=!0,d=0;d<a.length;d++){var e=a.charAt(d);\"'\"==e&&c?b=!b:'\"'==e&&b&&(c=!c)}return b&&c};goog.html.SafeStyle.hasBalancedSquareBrackets_=function(a){for(var b=!0,c=/^[-_a-zA-Z0-9]$/,d=0;d<a.length;d++){var e=a.charAt(d);if(\"]\"==e){if(b)return!1;b=!0}else if(\"[\"==e){if(!b)return!1;b=!1}else if(!b&&!c.test(e))return!1}return b};goog.html.SafeStyle.VALUE_ALLOWED_CHARS_=\"[-,.\\\"'%_!# a-zA-Z0-9\\\\[\\\\]]\";\ngoog.html.SafeStyle.VALUE_RE_=new RegExp(\"^\"+goog.html.SafeStyle.VALUE_ALLOWED_CHARS_+\"+$\");goog.html.SafeStyle.URL_RE_=/\\b(url\\([ \\t\\n]*)('[ -&(-\\[\\]-~]*'|\"[ !#-\\[\\]-~]*\"|[!#-&*-\\[\\]-~]*)([ \\t\\n]*\\))/g;goog.html.SafeStyle.FUNCTIONS_RE_=/\\b(hsl|hsla|rgb|rgba|matrix|calc|minmax|fit-content|repeat|(rotate|scale|translate)(X|Y|Z|3d)?)\\([-+*/0-9a-z.%\\[\\], ]+\\)/g;goog.html.SafeStyle.COMMENT_RE_=/\\/\\*/;\ngoog.html.SafeStyle.sanitizeUrl_=function(a){return a.replace(goog.html.SafeStyle.URL_RE_,function(a,c,d,e){var b=\"\";d=d.replace(/^(['\"])(.*)\\1$/,function(a,c,d){b=c;return d});a=goog.html.SafeUrl.sanitize(d).getTypedStringValue();return c+b+a+b+e})};goog.html.SafeStyle.concat=function(a){var b=\"\",c=function(a){goog.isArray(a)?goog.array.forEach(a,c):b+=goog.html.SafeStyle.unwrap(a)};goog.array.forEach(arguments,c);return b?goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(b):goog.html.SafeStyle.EMPTY};goog.html.SafeScript=function(){this.privateDoNotAccessOrElseSafeScriptWrappedValue_=\"\";this.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_};goog.html.SafeScript.prototype.implementsGoogStringTypedString=!0;goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={};goog.html.SafeScript.fromConstant=function(a){a=goog.string.Const.unwrap(a);return 0===a.length?goog.html.SafeScript.EMPTY:goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeScript.fromConstantAndArgs=function(a,b){for(var c=[],d=1;d<arguments.length;d++)c.push(goog.html.SafeScript.stringify_(arguments[d]));return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(\"(\"+goog.string.Const.unwrap(a)+\")(\"+c.join(\", \")+\");\")};goog.html.SafeScript.fromJson=function(a){return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(goog.html.SafeScript.stringify_(a))};goog.html.SafeScript.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeScriptWrappedValue_.toString()};\ngoog.DEBUG&&(goog.html.SafeScript.prototype.toString=function(){return\"SafeScript{\"+this.privateDoNotAccessOrElseSafeScriptWrappedValue_+\"}\"});goog.html.SafeScript.unwrap=function(a){return goog.html.SafeScript.unwrapTrustedScript(a).toString()};\ngoog.html.SafeScript.unwrapTrustedScript=function(a){if(a instanceof goog.html.SafeScript&&a.constructor===goog.html.SafeScript&&a.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_)return a.privateDoNotAccessOrElseSafeScriptWrappedValue_;goog.asserts.fail(\"expected object of type SafeScript, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:SafeScript\"};\ngoog.html.SafeScript.stringify_=function(a){return JSON.stringify(a).replace(/</g,\"\\\\x3c\")};goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse=function(a){return(new goog.html.SafeScript).initSecurityPrivateDoNotAccessOrElse_(a)};\ngoog.html.SafeScript.prototype.initSecurityPrivateDoNotAccessOrElse_=function(a){this.privateDoNotAccessOrElseSafeScriptWrappedValue_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY?goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createScript(a):a;return this};goog.html.SafeScript.EMPTY=goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(\"\");goog.object={};goog.object.is=function(a,b){return a===b?0!==a||1/a===1/b:a!==a&&b!==b};goog.object.forEach=function(a,b,c){for(var d in a)b.call(c,a[d],d,a)};goog.object.filter=function(a,b,c){var d={},e;for(e in a)b.call(c,a[e],e,a)&&(d[e]=a[e]);return d};goog.object.map=function(a,b,c){var d={},e;for(e in a)d[e]=b.call(c,a[e],e,a);return d};goog.object.some=function(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return!0;return!1};\ngoog.object.every=function(a,b,c){for(var d in a)if(!b.call(c,a[d],d,a))return!1;return!0};goog.object.getCount=function(a){var b=0,c;for(c in a)b++;return b};goog.object.getAnyKey=function(a){for(var b in a)return b};goog.object.getAnyValue=function(a){for(var b in a)return a[b]};goog.object.contains=function(a,b){return goog.object.containsValue(a,b)};goog.object.getValues=function(a){var b=[],c=0,d;for(d in a)b[c++]=a[d];return b};\ngoog.object.getKeys=function(a){var b=[],c=0,d;for(d in a)b[c++]=d;return b};goog.object.getValueByKeys=function(a,b){var c=goog.isArrayLike(b),d=c?b:arguments;for(c=c?0:1;c<d.length;c++){if(null==a)return;a=a[d[c]]}return a};goog.object.containsKey=function(a,b){return null!==a&&b in a};goog.object.containsValue=function(a,b){for(var c in a)if(a[c]==b)return!0;return!1};goog.object.findKey=function(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return d};\ngoog.object.findValue=function(a,b,c){return(b=goog.object.findKey(a,b,c))&&a[b]};goog.object.isEmpty=function(a){for(var b in a)return!1;return!0};goog.object.clear=function(a){for(var b in a)delete a[b]};goog.object.remove=function(a,b){var c;(c=b in a)&&delete a[b];return c};goog.object.add=function(a,b,c){if(null!==a&&b in a)throw Error('The object already contains the key \"'+b+'\"');goog.object.set(a,b,c)};goog.object.get=function(a,b,c){return null!==a&&b in a?a[b]:c};\ngoog.object.set=function(a,b,c){a[b]=c};goog.object.setIfUndefined=function(a,b,c){return b in a?a[b]:a[b]=c};goog.object.setWithReturnValueIfNotSet=function(a,b,c){if(b in a)return a[b];c=c();return a[b]=c};goog.object.equals=function(a,b){for(var c in a)if(!(c in b)||a[c]!==b[c])return!1;for(var d in b)if(!(d in a))return!1;return!0};goog.object.clone=function(a){var b={},c;for(c in a)b[c]=a[c];return b};\ngoog.object.unsafeClone=function(a){var b=goog.typeOf(a);if(\"object\"==b||\"array\"==b){if(goog.isFunction(a.clone))return a.clone();b=\"array\"==b?[]:{};for(var c in a)b[c]=goog.object.unsafeClone(a[c]);return b}return a};goog.object.transpose=function(a){var b={},c;for(c in a)b[a[c]]=c;return b};goog.object.PROTOTYPE_FIELDS_=\"constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf\".split(\" \");\ngoog.object.extend=function(a,b){for(var c,d,e=1;e<arguments.length;e++){d=arguments[e];for(c in d)a[c]=d[c];for(var f=0;f<goog.object.PROTOTYPE_FIELDS_.length;f++)c=goog.object.PROTOTYPE_FIELDS_[f],Object.prototype.hasOwnProperty.call(d,c)&&(a[c]=d[c])}};\ngoog.object.create=function(a){var b=arguments.length;if(1==b&&goog.isArray(arguments[0]))return goog.object.create.apply(null,arguments[0]);if(b%2)throw Error(\"Uneven number of arguments\");for(var c={},d=0;d<b;d+=2)c[arguments[d]]=arguments[d+1];return c};goog.object.createSet=function(a){var b=arguments.length;if(1==b&&goog.isArray(arguments[0]))return goog.object.createSet.apply(null,arguments[0]);for(var c={},d=0;d<b;d++)c[arguments[d]]=!0;return c};\ngoog.object.createImmutableView=function(a){var b=a;Object.isFrozen&&!Object.isFrozen(a)&&(b=Object.create(a),Object.freeze(b));return b};goog.object.isImmutableView=function(a){return!!Object.isFrozen&&Object.isFrozen(a)};\ngoog.object.getAllPropertyNames=function(a,b,c){if(!a)return[];if(!Object.getOwnPropertyNames||!Object.getPrototypeOf)return goog.object.getKeys(a);for(var d={};a&&(a!==Object.prototype||b)&&(a!==Function.prototype||c);){for(var e=Object.getOwnPropertyNames(a),f=0;f<e.length;f++)d[e[f]]=!0;a=Object.getPrototypeOf(a)}return goog.object.getKeys(d)};goog.object.getSuperClass=function(a){return(a=Object.getPrototypeOf(a.prototype))&&a.constructor};goog.html.SafeStyleSheet=function(){this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_=\"\";this.SAFE_STYLE_SHEET_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_};goog.html.SafeStyleSheet.prototype.implementsGoogStringTypedString=!0;goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={};\ngoog.html.SafeStyleSheet.createRule=function(a,b){if(goog.string.internal.contains(a,\"<\"))throw Error(\"Selector does not allow '<', got: \"+a);var c=a.replace(/('|\")((?!\\1)[^\\r\\n\\f\\\\]|\\\\[\\s\\S])*\\1/g,\"\");if(!/^[-_a-zA-Z0-9#.:* ,>+~[\\]()=^$|]+$/.test(c))throw Error(\"Selector allows only [-_a-zA-Z0-9#.:* ,>+~[\\\\]()=^$|] and strings, got: \"+a);if(!goog.html.SafeStyleSheet.hasBalancedBrackets_(c))throw Error(\"() and [] in selector must be balanced, got: \"+a);b instanceof goog.html.SafeStyle||(b=goog.html.SafeStyle.create(b));\na=a+\"{\"+goog.html.SafeStyle.unwrap(b).replace(/</g,\"\\\\3C \")+\"}\";return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(a)};goog.html.SafeStyleSheet.hasBalancedBrackets_=function(a){for(var b={\"(\":\")\",\"[\":\"]\"},c=[],d=0;d<a.length;d++){var e=a[d];if(b[e])c.push(b[e]);else if(goog.object.contains(b,e)&&c.pop()!=e)return!1}return 0==c.length};\ngoog.html.SafeStyleSheet.concat=function(a){var b=\"\",c=function(a){goog.isArray(a)?goog.array.forEach(a,c):b+=goog.html.SafeStyleSheet.unwrap(a)};goog.array.forEach(arguments,c);return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.SafeStyleSheet.fromConstant=function(a){a=goog.string.Const.unwrap(a);if(0===a.length)return goog.html.SafeStyleSheet.EMPTY;goog.asserts.assert(!goog.string.internal.contains(a,\"<\"),\"Forbidden '<' character in style sheet string: \"+a);return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(a)};goog.html.SafeStyleSheet.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_};\ngoog.DEBUG&&(goog.html.SafeStyleSheet.prototype.toString=function(){return\"SafeStyleSheet{\"+this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_+\"}\"});\ngoog.html.SafeStyleSheet.unwrap=function(a){if(a instanceof goog.html.SafeStyleSheet&&a.constructor===goog.html.SafeStyleSheet&&a.SAFE_STYLE_SHEET_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_)return a.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_;goog.asserts.fail(\"expected object of type SafeStyleSheet, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:SafeStyleSheet\"};\ngoog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse=function(a){return(new goog.html.SafeStyleSheet).initSecurityPrivateDoNotAccessOrElse_(a)};goog.html.SafeStyleSheet.prototype.initSecurityPrivateDoNotAccessOrElse_=function(a){this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_=a;return this};goog.html.SafeStyleSheet.EMPTY=goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(\"\");goog.dom.tags={};goog.dom.tags.VOID_TAGS_={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0};goog.dom.tags.isVoidTag=function(a){return!0===goog.dom.tags.VOID_TAGS_[a]};goog.dom.HtmlElement=function(){};goog.dom.TagName=function(a){this.tagName_=a};goog.dom.TagName.prototype.toString=function(){return this.tagName_};goog.dom.TagName.A=new goog.dom.TagName(\"A\");goog.dom.TagName.ABBR=new goog.dom.TagName(\"ABBR\");goog.dom.TagName.ACRONYM=new goog.dom.TagName(\"ACRONYM\");goog.dom.TagName.ADDRESS=new goog.dom.TagName(\"ADDRESS\");goog.dom.TagName.APPLET=new goog.dom.TagName(\"APPLET\");goog.dom.TagName.AREA=new goog.dom.TagName(\"AREA\");goog.dom.TagName.ARTICLE=new goog.dom.TagName(\"ARTICLE\");\ngoog.dom.TagName.ASIDE=new goog.dom.TagName(\"ASIDE\");goog.dom.TagName.AUDIO=new goog.dom.TagName(\"AUDIO\");goog.dom.TagName.B=new goog.dom.TagName(\"B\");goog.dom.TagName.BASE=new goog.dom.TagName(\"BASE\");goog.dom.TagName.BASEFONT=new goog.dom.TagName(\"BASEFONT\");goog.dom.TagName.BDI=new goog.dom.TagName(\"BDI\");goog.dom.TagName.BDO=new goog.dom.TagName(\"BDO\");goog.dom.TagName.BIG=new goog.dom.TagName(\"BIG\");goog.dom.TagName.BLOCKQUOTE=new goog.dom.TagName(\"BLOCKQUOTE\");goog.dom.TagName.BODY=new goog.dom.TagName(\"BODY\");\ngoog.dom.TagName.BR=new goog.dom.TagName(\"BR\");goog.dom.TagName.BUTTON=new goog.dom.TagName(\"BUTTON\");goog.dom.TagName.CANVAS=new goog.dom.TagName(\"CANVAS\");goog.dom.TagName.CAPTION=new goog.dom.TagName(\"CAPTION\");goog.dom.TagName.CENTER=new goog.dom.TagName(\"CENTER\");goog.dom.TagName.CITE=new goog.dom.TagName(\"CITE\");goog.dom.TagName.CODE=new goog.dom.TagName(\"CODE\");goog.dom.TagName.COL=new goog.dom.TagName(\"COL\");goog.dom.TagName.COLGROUP=new goog.dom.TagName(\"COLGROUP\");\ngoog.dom.TagName.COMMAND=new goog.dom.TagName(\"COMMAND\");goog.dom.TagName.DATA=new goog.dom.TagName(\"DATA\");goog.dom.TagName.DATALIST=new goog.dom.TagName(\"DATALIST\");goog.dom.TagName.DD=new goog.dom.TagName(\"DD\");goog.dom.TagName.DEL=new goog.dom.TagName(\"DEL\");goog.dom.TagName.DETAILS=new goog.dom.TagName(\"DETAILS\");goog.dom.TagName.DFN=new goog.dom.TagName(\"DFN\");goog.dom.TagName.DIALOG=new goog.dom.TagName(\"DIALOG\");goog.dom.TagName.DIR=new goog.dom.TagName(\"DIR\");goog.dom.TagName.DIV=new goog.dom.TagName(\"DIV\");\ngoog.dom.TagName.DL=new goog.dom.TagName(\"DL\");goog.dom.TagName.DT=new goog.dom.TagName(\"DT\");goog.dom.TagName.EM=new goog.dom.TagName(\"EM\");goog.dom.TagName.EMBED=new goog.dom.TagName(\"EMBED\");goog.dom.TagName.FIELDSET=new goog.dom.TagName(\"FIELDSET\");goog.dom.TagName.FIGCAPTION=new goog.dom.TagName(\"FIGCAPTION\");goog.dom.TagName.FIGURE=new goog.dom.TagName(\"FIGURE\");goog.dom.TagName.FONT=new goog.dom.TagName(\"FONT\");goog.dom.TagName.FOOTER=new goog.dom.TagName(\"FOOTER\");goog.dom.TagName.FORM=new goog.dom.TagName(\"FORM\");\ngoog.dom.TagName.FRAME=new goog.dom.TagName(\"FRAME\");goog.dom.TagName.FRAMESET=new goog.dom.TagName(\"FRAMESET\");goog.dom.TagName.H1=new goog.dom.TagName(\"H1\");goog.dom.TagName.H2=new goog.dom.TagName(\"H2\");goog.dom.TagName.H3=new goog.dom.TagName(\"H3\");goog.dom.TagName.H4=new goog.dom.TagName(\"H4\");goog.dom.TagName.H5=new goog.dom.TagName(\"H5\");goog.dom.TagName.H6=new goog.dom.TagName(\"H6\");goog.dom.TagName.HEAD=new goog.dom.TagName(\"HEAD\");goog.dom.TagName.HEADER=new goog.dom.TagName(\"HEADER\");\ngoog.dom.TagName.HGROUP=new goog.dom.TagName(\"HGROUP\");goog.dom.TagName.HR=new goog.dom.TagName(\"HR\");goog.dom.TagName.HTML=new goog.dom.TagName(\"HTML\");goog.dom.TagName.I=new goog.dom.TagName(\"I\");goog.dom.TagName.IFRAME=new goog.dom.TagName(\"IFRAME\");goog.dom.TagName.IMG=new goog.dom.TagName(\"IMG\");goog.dom.TagName.INPUT=new goog.dom.TagName(\"INPUT\");goog.dom.TagName.INS=new goog.dom.TagName(\"INS\");goog.dom.TagName.ISINDEX=new goog.dom.TagName(\"ISINDEX\");goog.dom.TagName.KBD=new goog.dom.TagName(\"KBD\");\ngoog.dom.TagName.KEYGEN=new goog.dom.TagName(\"KEYGEN\");goog.dom.TagName.LABEL=new goog.dom.TagName(\"LABEL\");goog.dom.TagName.LEGEND=new goog.dom.TagName(\"LEGEND\");goog.dom.TagName.LI=new goog.dom.TagName(\"LI\");goog.dom.TagName.LINK=new goog.dom.TagName(\"LINK\");goog.dom.TagName.MAIN=new goog.dom.TagName(\"MAIN\");goog.dom.TagName.MAP=new goog.dom.TagName(\"MAP\");goog.dom.TagName.MARK=new goog.dom.TagName(\"MARK\");goog.dom.TagName.MATH=new goog.dom.TagName(\"MATH\");goog.dom.TagName.MENU=new goog.dom.TagName(\"MENU\");\ngoog.dom.TagName.MENUITEM=new goog.dom.TagName(\"MENUITEM\");goog.dom.TagName.META=new goog.dom.TagName(\"META\");goog.dom.TagName.METER=new goog.dom.TagName(\"METER\");goog.dom.TagName.NAV=new goog.dom.TagName(\"NAV\");goog.dom.TagName.NOFRAMES=new goog.dom.TagName(\"NOFRAMES\");goog.dom.TagName.NOSCRIPT=new goog.dom.TagName(\"NOSCRIPT\");goog.dom.TagName.OBJECT=new goog.dom.TagName(\"OBJECT\");goog.dom.TagName.OL=new goog.dom.TagName(\"OL\");goog.dom.TagName.OPTGROUP=new goog.dom.TagName(\"OPTGROUP\");\ngoog.dom.TagName.OPTION=new goog.dom.TagName(\"OPTION\");goog.dom.TagName.OUTPUT=new goog.dom.TagName(\"OUTPUT\");goog.dom.TagName.P=new goog.dom.TagName(\"P\");goog.dom.TagName.PARAM=new goog.dom.TagName(\"PARAM\");goog.dom.TagName.PICTURE=new goog.dom.TagName(\"PICTURE\");goog.dom.TagName.PRE=new goog.dom.TagName(\"PRE\");goog.dom.TagName.PROGRESS=new goog.dom.TagName(\"PROGRESS\");goog.dom.TagName.Q=new goog.dom.TagName(\"Q\");goog.dom.TagName.RP=new goog.dom.TagName(\"RP\");goog.dom.TagName.RT=new goog.dom.TagName(\"RT\");\ngoog.dom.TagName.RTC=new goog.dom.TagName(\"RTC\");goog.dom.TagName.RUBY=new goog.dom.TagName(\"RUBY\");goog.dom.TagName.S=new goog.dom.TagName(\"S\");goog.dom.TagName.SAMP=new goog.dom.TagName(\"SAMP\");goog.dom.TagName.SCRIPT=new goog.dom.TagName(\"SCRIPT\");goog.dom.TagName.SECTION=new goog.dom.TagName(\"SECTION\");goog.dom.TagName.SELECT=new goog.dom.TagName(\"SELECT\");goog.dom.TagName.SMALL=new goog.dom.TagName(\"SMALL\");goog.dom.TagName.SOURCE=new goog.dom.TagName(\"SOURCE\");goog.dom.TagName.SPAN=new goog.dom.TagName(\"SPAN\");\ngoog.dom.TagName.STRIKE=new goog.dom.TagName(\"STRIKE\");goog.dom.TagName.STRONG=new goog.dom.TagName(\"STRONG\");goog.dom.TagName.STYLE=new goog.dom.TagName(\"STYLE\");goog.dom.TagName.SUB=new goog.dom.TagName(\"SUB\");goog.dom.TagName.SUMMARY=new goog.dom.TagName(\"SUMMARY\");goog.dom.TagName.SUP=new goog.dom.TagName(\"SUP\");goog.dom.TagName.SVG=new goog.dom.TagName(\"SVG\");goog.dom.TagName.TABLE=new goog.dom.TagName(\"TABLE\");goog.dom.TagName.TBODY=new goog.dom.TagName(\"TBODY\");goog.dom.TagName.TD=new goog.dom.TagName(\"TD\");\ngoog.dom.TagName.TEMPLATE=new goog.dom.TagName(\"TEMPLATE\");goog.dom.TagName.TEXTAREA=new goog.dom.TagName(\"TEXTAREA\");goog.dom.TagName.TFOOT=new goog.dom.TagName(\"TFOOT\");goog.dom.TagName.TH=new goog.dom.TagName(\"TH\");goog.dom.TagName.THEAD=new goog.dom.TagName(\"THEAD\");goog.dom.TagName.TIME=new goog.dom.TagName(\"TIME\");goog.dom.TagName.TITLE=new goog.dom.TagName(\"TITLE\");goog.dom.TagName.TR=new goog.dom.TagName(\"TR\");goog.dom.TagName.TRACK=new goog.dom.TagName(\"TRACK\");goog.dom.TagName.TT=new goog.dom.TagName(\"TT\");\ngoog.dom.TagName.U=new goog.dom.TagName(\"U\");goog.dom.TagName.UL=new goog.dom.TagName(\"UL\");goog.dom.TagName.VAR=new goog.dom.TagName(\"VAR\");goog.dom.TagName.VIDEO=new goog.dom.TagName(\"VIDEO\");goog.dom.TagName.WBR=new goog.dom.TagName(\"WBR\");goog.labs={};goog.labs.userAgent={};goog.labs.userAgent.util={};goog.labs.userAgent.util.getNativeUserAgentString_=function(){var a=goog.labs.userAgent.util.getNavigator_();return a&&(a=a.userAgent)?a:\"\"};goog.labs.userAgent.util.getNavigator_=function(){return goog.global.navigator};goog.labs.userAgent.util.userAgent_=goog.labs.userAgent.util.getNativeUserAgentString_();goog.labs.userAgent.util.setUserAgent=function(a){goog.labs.userAgent.util.userAgent_=a||goog.labs.userAgent.util.getNativeUserAgentString_()};\ngoog.labs.userAgent.util.getUserAgent=function(){return goog.labs.userAgent.util.userAgent_};goog.labs.userAgent.util.matchUserAgent=function(a){var b=goog.labs.userAgent.util.getUserAgent();return goog.string.internal.contains(b,a)};goog.labs.userAgent.util.matchUserAgentIgnoreCase=function(a){var b=goog.labs.userAgent.util.getUserAgent();return goog.string.internal.caseInsensitiveContains(b,a)};\ngoog.labs.userAgent.util.extractVersionTuples=function(a){for(var b=/(\\w[\\w ]+)\\/([^\\s]+)\\s*(?:\\((.*?)\\))?/g,c=[],d;d=b.exec(a);)c.push([d[1],d[2],d[3]||void 0]);return c};goog.labs.userAgent.browser={};goog.labs.userAgent.browser.matchOpera_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Opera\")};goog.labs.userAgent.browser.matchIE_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Trident\")||goog.labs.userAgent.util.matchUserAgent(\"MSIE\")};goog.labs.userAgent.browser.matchEdgeHtml_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Edge\")};goog.labs.userAgent.browser.matchEdgeChromium_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Edg/\")};\ngoog.labs.userAgent.browser.matchOperaChromium_=function(){return goog.labs.userAgent.util.matchUserAgent(\"OPR\")};goog.labs.userAgent.browser.matchFirefox_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Firefox\")||goog.labs.userAgent.util.matchUserAgent(\"FxiOS\")};\ngoog.labs.userAgent.browser.matchSafari_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Safari\")&&!(goog.labs.userAgent.browser.matchChrome_()||goog.labs.userAgent.browser.matchCoast_()||goog.labs.userAgent.browser.matchOpera_()||goog.labs.userAgent.browser.matchEdgeHtml_()||goog.labs.userAgent.browser.matchEdgeChromium_()||goog.labs.userAgent.browser.matchOperaChromium_()||goog.labs.userAgent.browser.matchFirefox_()||goog.labs.userAgent.browser.isSilk()||goog.labs.userAgent.util.matchUserAgent(\"Android\"))};\ngoog.labs.userAgent.browser.matchCoast_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Coast\")};goog.labs.userAgent.browser.matchIosWebview_=function(){return(goog.labs.userAgent.util.matchUserAgent(\"iPad\")||goog.labs.userAgent.util.matchUserAgent(\"iPhone\"))&&!goog.labs.userAgent.browser.matchSafari_()&&!goog.labs.userAgent.browser.matchChrome_()&&!goog.labs.userAgent.browser.matchCoast_()&&!goog.labs.userAgent.browser.matchFirefox_()&&goog.labs.userAgent.util.matchUserAgent(\"AppleWebKit\")};\ngoog.labs.userAgent.browser.matchChrome_=function(){return(goog.labs.userAgent.util.matchUserAgent(\"Chrome\")||goog.labs.userAgent.util.matchUserAgent(\"CriOS\"))&&!goog.labs.userAgent.browser.matchEdgeHtml_()};goog.labs.userAgent.browser.matchAndroidBrowser_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Android\")&&!(goog.labs.userAgent.browser.isChrome()||goog.labs.userAgent.browser.isFirefox()||goog.labs.userAgent.browser.isOpera()||goog.labs.userAgent.browser.isSilk())};\ngoog.labs.userAgent.browser.isOpera=goog.labs.userAgent.browser.matchOpera_;goog.labs.userAgent.browser.isIE=goog.labs.userAgent.browser.matchIE_;goog.labs.userAgent.browser.isEdge=goog.labs.userAgent.browser.matchEdgeHtml_;goog.labs.userAgent.browser.isEdgeChromium=goog.labs.userAgent.browser.matchEdgeChromium_;goog.labs.userAgent.browser.isOperaChromium=goog.labs.userAgent.browser.matchOperaChromium_;goog.labs.userAgent.browser.isFirefox=goog.labs.userAgent.browser.matchFirefox_;\ngoog.labs.userAgent.browser.isSafari=goog.labs.userAgent.browser.matchSafari_;goog.labs.userAgent.browser.isCoast=goog.labs.userAgent.browser.matchCoast_;goog.labs.userAgent.browser.isIosWebview=goog.labs.userAgent.browser.matchIosWebview_;goog.labs.userAgent.browser.isChrome=goog.labs.userAgent.browser.matchChrome_;goog.labs.userAgent.browser.isAndroidBrowser=goog.labs.userAgent.browser.matchAndroidBrowser_;goog.labs.userAgent.browser.isSilk=function(){return goog.labs.userAgent.util.matchUserAgent(\"Silk\")};\ngoog.labs.userAgent.browser.getVersion=function(){function a(a){a=goog.array.find(a,d);return c[a]||\"\"}var b=goog.labs.userAgent.util.getUserAgent();if(goog.labs.userAgent.browser.isIE())return goog.labs.userAgent.browser.getIEVersion_(b);b=goog.labs.userAgent.util.extractVersionTuples(b);var c={};goog.array.forEach(b,function(a){c[a[0]]=a[1]});var d=goog.partial(goog.object.containsKey,c);return goog.labs.userAgent.browser.isOpera()?a([\"Version\",\"Opera\"]):goog.labs.userAgent.browser.isEdge()?a([\"Edge\"]):\ngoog.labs.userAgent.browser.isEdgeChromium()?a([\"Edg\"]):goog.labs.userAgent.browser.isChrome()?a([\"Chrome\",\"CriOS\"]):(b=b[2])&&b[1]||\"\"};goog.labs.userAgent.browser.isVersionOrHigher=function(a){return 0<=goog.string.internal.compareVersions(goog.labs.userAgent.browser.getVersion(),a)};\ngoog.labs.userAgent.browser.getIEVersion_=function(a){var b=/rv: *([\\d\\.]*)/.exec(a);if(b&&b[1])return b[1];b=\"\";var c=/MSIE +([\\d\\.]+)/.exec(a);if(c&&c[1])if(a=/Trident\\/(\\d.\\d)/.exec(a),\"7.0\"==c[1])if(a&&a[1])switch(a[1]){case \"4.0\":b=\"8.0\";break;case \"5.0\":b=\"9.0\";break;case \"6.0\":b=\"10.0\";break;case \"7.0\":b=\"11.0\"}else b=\"7.0\";else b=c[1];return b};goog.html.SafeHtml=function(){this.privateDoNotAccessOrElseSafeHtmlWrappedValue_=\"\";this.SAFE_HTML_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;this.dir_=null};goog.html.SafeHtml.prototype.implementsGoogI18nBidiDirectionalString=!0;goog.html.SafeHtml.prototype.getDirection=function(){return this.dir_};goog.html.SafeHtml.prototype.implementsGoogStringTypedString=!0;goog.html.SafeHtml.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeHtmlWrappedValue_.toString()};\ngoog.DEBUG&&(goog.html.SafeHtml.prototype.toString=function(){return\"SafeHtml{\"+this.privateDoNotAccessOrElseSafeHtmlWrappedValue_+\"}\"});goog.html.SafeHtml.unwrap=function(a){return goog.html.SafeHtml.unwrapTrustedHTML(a).toString()};\ngoog.html.SafeHtml.unwrapTrustedHTML=function(a){if(a instanceof goog.html.SafeHtml&&a.constructor===goog.html.SafeHtml&&a.SAFE_HTML_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_)return a.privateDoNotAccessOrElseSafeHtmlWrappedValue_;goog.asserts.fail(\"expected object of type SafeHtml, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:SafeHtml\"};\ngoog.html.SafeHtml.htmlEscape=function(a){if(a instanceof goog.html.SafeHtml)return a;var b=\"object\"==typeof a,c=null;b&&a.implementsGoogI18nBidiDirectionalString&&(c=a.getDirection());a=b&&a.implementsGoogStringTypedString?a.getTypedStringValue():String(a);return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.htmlEscape(a),c)};\ngoog.html.SafeHtml.htmlEscapePreservingNewlines=function(a){if(a instanceof goog.html.SafeHtml)return a;a=goog.html.SafeHtml.htmlEscape(a);return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.newLineToBr(goog.html.SafeHtml.unwrap(a)),a.getDirection())};\ngoog.html.SafeHtml.htmlEscapePreservingNewlinesAndSpaces=function(a){if(a instanceof goog.html.SafeHtml)return a;a=goog.html.SafeHtml.htmlEscape(a);return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.whitespaceEscape(goog.html.SafeHtml.unwrap(a)),a.getDirection())};goog.html.SafeHtml.from=goog.html.SafeHtml.htmlEscape;goog.html.SafeHtml.VALID_NAMES_IN_TAG_=/^[a-zA-Z0-9-]+$/;\ngoog.html.SafeHtml.URL_ATTRIBUTES_={action:!0,cite:!0,data:!0,formaction:!0,href:!0,manifest:!0,poster:!0,src:!0};goog.html.SafeHtml.NOT_ALLOWED_TAG_NAMES_={APPLET:!0,BASE:!0,EMBED:!0,IFRAME:!0,LINK:!0,MATH:!0,META:!0,OBJECT:!0,SCRIPT:!0,STYLE:!0,SVG:!0,TEMPLATE:!0};goog.html.SafeHtml.create=function(a,b,c){goog.html.SafeHtml.verifyTagName(String(a));return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(String(a),b,c)};\ngoog.html.SafeHtml.verifyTagName=function(a){if(!goog.html.SafeHtml.VALID_NAMES_IN_TAG_.test(a))throw Error(\"Invalid tag name <\"+a+\">.\");if(a.toUpperCase()in goog.html.SafeHtml.NOT_ALLOWED_TAG_NAMES_)throw Error(\"Tag name <\"+a+\"> is not allowed for SafeHtml.\");};\ngoog.html.SafeHtml.createIframe=function(a,b,c,d){a&&goog.html.TrustedResourceUrl.unwrap(a);var e={};e.src=a||null;e.srcdoc=b&&goog.html.SafeHtml.unwrap(b);a=goog.html.SafeHtml.combineAttributes(e,{sandbox:\"\"},c);return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"iframe\",a,d)};\ngoog.html.SafeHtml.createSandboxIframe=function(a,b,c,d){if(!goog.html.SafeHtml.canUseSandboxIframe())throw Error(\"The browser does not support sandboxed iframes.\");var e={};e.src=a?goog.html.SafeUrl.unwrap(goog.html.SafeUrl.sanitize(a)):null;e.srcdoc=b||null;e.sandbox=\"\";a=goog.html.SafeHtml.combineAttributes(e,{},c);return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"iframe\",a,d)};\ngoog.html.SafeHtml.canUseSandboxIframe=function(){return goog.global.HTMLIFrameElement&&\"sandbox\"in goog.global.HTMLIFrameElement.prototype};goog.html.SafeHtml.createScriptSrc=function(a,b){goog.html.TrustedResourceUrl.unwrap(a);a=goog.html.SafeHtml.combineAttributes({src:a},{},b);return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"script\",a)};\ngoog.html.SafeHtml.createScript=function(a,b){for(var c in b){var d=c.toLowerCase();if(\"language\"==d||\"src\"==d||\"text\"==d||\"type\"==d)throw Error('Cannot set \"'+d+'\" attribute');}c=\"\";a=goog.array.concat(a);for(d=0;d<a.length;d++)c+=goog.html.SafeScript.unwrap(a[d]);a=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(c,goog.i18n.bidi.Dir.NEUTRAL);return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"script\",b,a)};\ngoog.html.SafeHtml.createStyle=function(a,b){b=goog.html.SafeHtml.combineAttributes({type:\"text/css\"},{},b);var c=\"\";a=goog.array.concat(a);for(var d=0;d<a.length;d++)c+=goog.html.SafeStyleSheet.unwrap(a[d]);a=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(c,goog.i18n.bidi.Dir.NEUTRAL);return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"style\",b,a)};\ngoog.html.SafeHtml.createMetaRefresh=function(a,b){a=goog.html.SafeUrl.unwrap(goog.html.SafeUrl.sanitize(a));(goog.labs.userAgent.browser.isIE()||goog.labs.userAgent.browser.isEdge())&&goog.string.internal.contains(a,\";\")&&(a=\"'\"+a.replace(/'/g,\"%27\")+\"'\");return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"meta\",{\"http-equiv\":\"refresh\",content:(b||0)+\"; url=\"+a})};\ngoog.html.SafeHtml.getAttrNameAndValue_=function(a,b,c){if(c instanceof goog.string.Const)c=goog.string.Const.unwrap(c);else if(\"style\"==b.toLowerCase())c=goog.html.SafeHtml.getStyleValue_(c);else{if(/^on/i.test(b))throw Error('Attribute \"'+b+'\" requires goog.string.Const value, \"'+c+'\" given.');if(b.toLowerCase()in goog.html.SafeHtml.URL_ATTRIBUTES_)if(c instanceof goog.html.TrustedResourceUrl)c=goog.html.TrustedResourceUrl.unwrap(c);else if(c instanceof goog.html.SafeUrl)c=goog.html.SafeUrl.unwrap(c);\nelse if(goog.isString(c))c=goog.html.SafeUrl.sanitize(c).getTypedStringValue();else throw Error('Attribute \"'+b+'\" on tag \"'+a+'\" requires goog.html.SafeUrl, goog.string.Const, or string, value \"'+c+'\" given.');}c.implementsGoogStringTypedString&&(c=c.getTypedStringValue());goog.asserts.assert(goog.isString(c)||goog.isNumber(c),\"String or number value expected, got \"+typeof c+\" with value: \"+c);return b+'=\"'+goog.string.internal.htmlEscape(String(c))+'\"'};\ngoog.html.SafeHtml.getStyleValue_=function(a){if(!goog.isObject(a))throw Error('The \"style\" attribute requires goog.html.SafeStyle or map of style properties, '+typeof a+\" given: \"+a);a instanceof goog.html.SafeStyle||(a=goog.html.SafeStyle.create(a));return goog.html.SafeStyle.unwrap(a)};goog.html.SafeHtml.createWithDir=function(a,b,c,d){b=goog.html.SafeHtml.create(b,c,d);b.dir_=a;return b};\ngoog.html.SafeHtml.join=function(a,b){a=goog.html.SafeHtml.htmlEscape(a);var c=a.getDirection(),d=[],e=function(a){goog.isArray(a)?goog.array.forEach(a,e):(a=goog.html.SafeHtml.htmlEscape(a),d.push(goog.html.SafeHtml.unwrap(a)),a=a.getDirection(),c==goog.i18n.bidi.Dir.NEUTRAL?c=a:a!=goog.i18n.bidi.Dir.NEUTRAL&&c!=a&&(c=null))};goog.array.forEach(b,e);return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(d.join(goog.html.SafeHtml.unwrap(a)),c)};\ngoog.html.SafeHtml.concat=function(a){return goog.html.SafeHtml.join(goog.html.SafeHtml.EMPTY,Array.prototype.slice.call(arguments))};goog.html.SafeHtml.concatWithDir=function(a,b){var c=goog.html.SafeHtml.concat(goog.array.slice(arguments,1));c.dir_=a;return c};goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={};goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse=function(a,b){return(new goog.html.SafeHtml).initSecurityPrivateDoNotAccessOrElse_(a,b)};\ngoog.html.SafeHtml.prototype.initSecurityPrivateDoNotAccessOrElse_=function(a,b){this.privateDoNotAccessOrElseSafeHtmlWrappedValue_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY?goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createHTML(a):a;this.dir_=b;return this};\ngoog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse=function(a,b,c){var d=null;var e=\"<\"+a+goog.html.SafeHtml.stringifyAttributes(a,b);goog.isDefAndNotNull(c)?goog.isArray(c)||(c=[c]):c=[];goog.dom.tags.isVoidTag(a.toLowerCase())?(goog.asserts.assert(!c.length,\"Void tag <\"+a+\"> does not allow content.\"),e+=\">\"):(d=goog.html.SafeHtml.concat(c),e+=\">\"+goog.html.SafeHtml.unwrap(d)+\"</\"+a+\">\",d=d.getDirection());(a=b&&b.dir)&&(d=/^(ltr|rtl|auto)$/i.test(a)?goog.i18n.bidi.Dir.NEUTRAL:\nnull);return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(e,d)};goog.html.SafeHtml.stringifyAttributes=function(a,b){var c=\"\";if(b)for(var d in b){if(!goog.html.SafeHtml.VALID_NAMES_IN_TAG_.test(d))throw Error('Invalid attribute name \"'+d+'\".');var e=b[d];goog.isDefAndNotNull(e)&&(c+=\" \"+goog.html.SafeHtml.getAttrNameAndValue_(a,d,e))}return c};\ngoog.html.SafeHtml.combineAttributes=function(a,b,c){var d={},e;for(e in a)goog.asserts.assert(e.toLowerCase()==e,\"Must be lower case\"),d[e]=a[e];for(e in b)goog.asserts.assert(e.toLowerCase()==e,\"Must be lower case\"),d[e]=b[e];for(e in c){var f=e.toLowerCase();if(f in a)throw Error('Cannot override \"'+f+'\" attribute, got \"'+e+'\" with value \"'+c[e]+'\"');f in b&&delete d[f];d[e]=c[e]}return d};\ngoog.html.SafeHtml.DOCTYPE_HTML=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(\"<!DOCTYPE html>\",goog.i18n.bidi.Dir.NEUTRAL);goog.html.SafeHtml.EMPTY=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(\"\",goog.i18n.bidi.Dir.NEUTRAL);goog.html.SafeHtml.BR=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(\"<br>\",goog.i18n.bidi.Dir.NEUTRAL);goog.html.uncheckedconversions={};goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract=function(a,b,c){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(b,c||null)};\ngoog.html.uncheckedconversions.safeScriptFromStringKnownToSatisfyTypeContract=function(a,b){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.uncheckedconversions.safeStyleFromStringKnownToSatisfyTypeContract=function(a,b){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.uncheckedconversions.safeStyleSheetFromStringKnownToSatisfyTypeContract=function(a,b){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract=function(a,b){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.uncheckedconversions.trustedResourceUrlFromStringKnownToSatisfyTypeContract=function(a,b){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(b)};goog.dom.asserts={};goog.dom.asserts.assertIsLocation=function(a){if(goog.asserts.ENABLE_ASSERTS){var b=goog.dom.asserts.getWindow_(a);b&&(!a||!(a instanceof b.Location)&&a instanceof b.Element)&&goog.asserts.fail(\"Argument is not a Location (or a non-Element mock); got: %s\",goog.dom.asserts.debugStringForType_(a))}return a};\ngoog.dom.asserts.assertIsElementType_=function(a,b){if(goog.asserts.ENABLE_ASSERTS){var c=goog.dom.asserts.getWindow_(a);c&&\"undefined\"!=typeof c[b]&&(a&&(a instanceof c[b]||!(a instanceof c.Location||a instanceof c.Element))||goog.asserts.fail(\"Argument is not a %s (or a non-Element, non-Location mock); got: %s\",b,goog.dom.asserts.debugStringForType_(a)))}return a};goog.dom.asserts.assertIsHTMLAnchorElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLAnchorElement\")};\ngoog.dom.asserts.assertIsHTMLButtonElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLButtonElement\")};goog.dom.asserts.assertIsHTMLLinkElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLLinkElement\")};goog.dom.asserts.assertIsHTMLImageElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLImageElement\")};goog.dom.asserts.assertIsHTMLAudioElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLAudioElement\")};\ngoog.dom.asserts.assertIsHTMLVideoElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLVideoElement\")};goog.dom.asserts.assertIsHTMLInputElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLInputElement\")};goog.dom.asserts.assertIsHTMLTextAreaElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLTextAreaElement\")};goog.dom.asserts.assertIsHTMLCanvasElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLCanvasElement\")};\ngoog.dom.asserts.assertIsHTMLEmbedElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLEmbedElement\")};goog.dom.asserts.assertIsHTMLFormElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLFormElement\")};goog.dom.asserts.assertIsHTMLFrameElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLFrameElement\")};goog.dom.asserts.assertIsHTMLIFrameElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLIFrameElement\")};\ngoog.dom.asserts.assertIsHTMLObjectElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLObjectElement\")};goog.dom.asserts.assertIsHTMLScriptElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLScriptElement\")};\ngoog.dom.asserts.debugStringForType_=function(a){if(goog.isObject(a))try{return a.constructor.displayName||a.constructor.name||Object.prototype.toString.call(a)}catch(b){return\"<object could not be stringified>\"}else return void 0===a?\"undefined\":null===a?\"null\":typeof a};goog.dom.asserts.getWindow_=function(a){try{var b=a&&a.ownerDocument,c=b&&(b.defaultView||b.parentWindow);c=c||goog.global;if(c.Element&&c.Location)return c}catch(d){}return null};goog.functions={};goog.functions.constant=function(a){return function(){return a}};goog.functions.FALSE=function(){return!1};goog.functions.TRUE=function(){return!0};goog.functions.NULL=function(){return null};goog.functions.identity=function(a,b){return a};goog.functions.error=function(a){return function(){throw Error(a);}};goog.functions.fail=function(a){return function(){throw a;}};\ngoog.functions.lock=function(a,b){b=b||0;return function(){return a.apply(this,Array.prototype.slice.call(arguments,0,b))}};goog.functions.nth=function(a){return function(){return arguments[a]}};goog.functions.partialRight=function(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var b=Array.prototype.slice.call(arguments);b.push.apply(b,c);return a.apply(this,b)}};goog.functions.withReturnValue=function(a,b){return goog.functions.sequence(a,goog.functions.constant(b))};\ngoog.functions.equalTo=function(a,b){return function(c){return b?a==c:a===c}};goog.functions.compose=function(a,b){var c=arguments,d=c.length;return function(){var a;d&&(a=c[d-1].apply(this,arguments));for(var b=d-2;0<=b;b--)a=c[b].call(this,a);return a}};goog.functions.sequence=function(a){var b=arguments,c=b.length;return function(){for(var a,e=0;e<c;e++)a=b[e].apply(this,arguments);return a}};\ngoog.functions.and=function(a){var b=arguments,c=b.length;return function(){for(var a=0;a<c;a++)if(!b[a].apply(this,arguments))return!1;return!0}};goog.functions.or=function(a){var b=arguments,c=b.length;return function(){for(var a=0;a<c;a++)if(b[a].apply(this,arguments))return!0;return!1}};goog.functions.not=function(a){return function(){return!a.apply(this,arguments)}};\ngoog.functions.create=function(a,b){var c=function(){};c.prototype=a.prototype;c=new c;a.apply(c,Array.prototype.slice.call(arguments,1));return c};goog.functions.CACHE_RETURN_VALUE=!0;goog.functions.cacheReturnValue=function(a){var b=!1,c;return function(){if(!goog.functions.CACHE_RETURN_VALUE)return a();b||(c=a(),b=!0);return c}};goog.functions.once=function(a){var b=a;return function(){if(b){var a=b;b=null;a()}}};\ngoog.functions.debounce=function(a,b,c){var d=0;return function(e){goog.global.clearTimeout(d);var f=arguments;d=goog.global.setTimeout(function(){a.apply(c,f)},b)}};goog.functions.throttle=function(a,b,c){var d=0,e=!1,f=[],g=function(){d=0;e&&(e=!1,h())},h=function(){d=goog.global.setTimeout(g,b);a.apply(c,f)};return function(a){f=arguments;d?e=!0:h()}};goog.functions.rateLimit=function(a,b,c){var d=0,e=function(){d=0};return function(f){d||(d=goog.global.setTimeout(e,b),a.apply(c,arguments))}};goog.dom.safe={};goog.dom.safe.InsertAdjacentHtmlPosition={AFTERBEGIN:\"afterbegin\",AFTEREND:\"afterend\",BEFOREBEGIN:\"beforebegin\",BEFOREEND:\"beforeend\"};goog.dom.safe.insertAdjacentHtml=function(a,b,c){a.insertAdjacentHTML(b,goog.html.SafeHtml.unwrapTrustedHTML(c))};goog.dom.safe.SET_INNER_HTML_DISALLOWED_TAGS_={MATH:!0,SCRIPT:!0,STYLE:!0,SVG:!0,TEMPLATE:!0};\ngoog.dom.safe.isInnerHtmlCleanupRecursive_=goog.functions.cacheReturnValue(function(){if(goog.DEBUG&&\"undefined\"===typeof document)return!1;var a=document.createElement(\"div\"),b=document.createElement(\"div\");b.appendChild(document.createElement(\"div\"));a.appendChild(b);if(goog.DEBUG&&!a.firstChild)return!1;b=a.firstChild.firstChild;a.innerHTML=goog.html.SafeHtml.unwrapTrustedHTML(goog.html.SafeHtml.EMPTY);return!b.parentElement});\ngoog.dom.safe.unsafeSetInnerHtmlDoNotUseOrElse=function(a,b){if(goog.dom.safe.isInnerHtmlCleanupRecursive_())for(;a.lastChild;)a.removeChild(a.lastChild);a.innerHTML=goog.html.SafeHtml.unwrapTrustedHTML(b)};\ngoog.dom.safe.setInnerHtml=function(a,b){if(goog.asserts.ENABLE_ASSERTS){var c=a.tagName.toUpperCase();if(goog.dom.safe.SET_INNER_HTML_DISALLOWED_TAGS_[c])throw Error(\"goog.dom.safe.setInnerHtml cannot be used to set content of \"+a.tagName+\".\");}goog.dom.safe.unsafeSetInnerHtmlDoNotUseOrElse(a,b)};goog.dom.safe.setOuterHtml=function(a,b){a.outerHTML=goog.html.SafeHtml.unwrapTrustedHTML(b)};\ngoog.dom.safe.setFormElementAction=function(a,b){b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);goog.dom.asserts.assertIsHTMLFormElement(a).action=goog.html.SafeUrl.unwrapTrustedURL(b)};goog.dom.safe.setButtonFormAction=function(a,b){b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);goog.dom.asserts.assertIsHTMLButtonElement(a).formAction=goog.html.SafeUrl.unwrapTrustedURL(b)};\ngoog.dom.safe.setInputFormAction=function(a,b){b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);goog.dom.asserts.assertIsHTMLInputElement(a).formAction=goog.html.SafeUrl.unwrapTrustedURL(b)};goog.dom.safe.setStyle=function(a,b){a.style.cssText=goog.html.SafeStyle.unwrap(b)};goog.dom.safe.documentWrite=function(a,b){a.write(goog.html.SafeHtml.unwrapTrustedHTML(b))};\ngoog.dom.safe.setAnchorHref=function(a,b){goog.dom.asserts.assertIsHTMLAnchorElement(a);b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);a.href=goog.html.SafeUrl.unwrapTrustedURL(b)};goog.dom.safe.setImageSrc=function(a,b){goog.dom.asserts.assertIsHTMLImageElement(a);if(!(b instanceof goog.html.SafeUrl)){var c=/^data:image\\//i.test(b);b=goog.html.SafeUrl.sanitizeAssertUnchanged(b,c)}a.src=goog.html.SafeUrl.unwrapTrustedURL(b)};\ngoog.dom.safe.setAudioSrc=function(a,b){goog.dom.asserts.assertIsHTMLAudioElement(a);if(!(b instanceof goog.html.SafeUrl)){var c=/^data:audio\\//i.test(b);b=goog.html.SafeUrl.sanitizeAssertUnchanged(b,c)}a.src=goog.html.SafeUrl.unwrapTrustedURL(b)};goog.dom.safe.setVideoSrc=function(a,b){goog.dom.asserts.assertIsHTMLVideoElement(a);if(!(b instanceof goog.html.SafeUrl)){var c=/^data:video\\//i.test(b);b=goog.html.SafeUrl.sanitizeAssertUnchanged(b,c)}a.src=goog.html.SafeUrl.unwrapTrustedURL(b)};\ngoog.dom.safe.setEmbedSrc=function(a,b){goog.dom.asserts.assertIsHTMLEmbedElement(a);a.src=goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(b)};goog.dom.safe.setFrameSrc=function(a,b){goog.dom.asserts.assertIsHTMLFrameElement(a);a.src=goog.html.TrustedResourceUrl.unwrapTrustedURL(b)};goog.dom.safe.setIframeSrc=function(a,b){goog.dom.asserts.assertIsHTMLIFrameElement(a);a.src=goog.html.TrustedResourceUrl.unwrapTrustedURL(b)};\ngoog.dom.safe.setIframeSrcdoc=function(a,b){goog.dom.asserts.assertIsHTMLIFrameElement(a);a.srcdoc=goog.html.SafeHtml.unwrapTrustedHTML(b)};\ngoog.dom.safe.setLinkHrefAndRel=function(a,b,c){goog.dom.asserts.assertIsHTMLLinkElement(a);a.rel=c;goog.string.internal.caseInsensitiveContains(c,\"stylesheet\")?(goog.asserts.assert(b instanceof goog.html.TrustedResourceUrl,'URL must be TrustedResourceUrl because \"rel\" contains \"stylesheet\"'),a.href=goog.html.TrustedResourceUrl.unwrapTrustedURL(b)):a.href=b instanceof goog.html.TrustedResourceUrl?goog.html.TrustedResourceUrl.unwrapTrustedURL(b):b instanceof goog.html.SafeUrl?goog.html.SafeUrl.unwrapTrustedURL(b):\ngoog.html.SafeUrl.unwrapTrustedURL(goog.html.SafeUrl.sanitizeAssertUnchanged(b))};goog.dom.safe.setObjectData=function(a,b){goog.dom.asserts.assertIsHTMLObjectElement(a);a.data=goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(b)};goog.dom.safe.setScriptSrc=function(a,b){goog.dom.asserts.assertIsHTMLScriptElement(a);a.src=goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(b);(b=goog.getScriptNonce())&&a.setAttribute(\"nonce\",b)};\ngoog.dom.safe.setScriptContent=function(a,b){goog.dom.asserts.assertIsHTMLScriptElement(a);a.text=goog.html.SafeScript.unwrapTrustedScript(b);(b=goog.getScriptNonce())&&a.setAttribute(\"nonce\",b)};goog.dom.safe.setLocationHref=function(a,b){goog.dom.asserts.assertIsLocation(a);b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);a.href=goog.html.SafeUrl.unwrapTrustedURL(b)};\ngoog.dom.safe.assignLocation=function(a,b){goog.dom.asserts.assertIsLocation(a);b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);a.assign(goog.html.SafeUrl.unwrapTrustedURL(b))};goog.dom.safe.replaceLocation=function(a,b){goog.dom.asserts.assertIsLocation(a);b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);a.replace(goog.html.SafeUrl.unwrapTrustedURL(b))};\ngoog.dom.safe.openInWindow=function(a,b,c,d,e){a=a instanceof goog.html.SafeUrl?a:goog.html.SafeUrl.sanitizeAssertUnchanged(a);return(b||goog.global).open(goog.html.SafeUrl.unwrapTrustedURL(a),c?goog.string.Const.unwrap(c):\"\",d,e)};goog.dom.safe.parseFromStringHtml=function(a,b){return goog.dom.safe.parseFromString(a,b,\"text/html\")};goog.dom.safe.parseFromString=function(a,b,c){return a.parseFromString(goog.html.SafeHtml.unwrapTrustedHTML(b),c)};\ngoog.dom.safe.createImageFromBlob=function(a){if(!/^image\\/.*/g.test(a.type))throw Error(\"goog.dom.safe.createImageFromBlob only accepts MIME type image/.*.\");var b=goog.global.URL.createObjectURL(a);a=new goog.global.Image;a.onload=function(){goog.global.URL.revokeObjectURL(b)};goog.dom.safe.setImageSrc(a,goog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract(goog.string.Const.from(\"Image blob URL.\"),b));return a};goog.string.DETECT_DOUBLE_ESCAPING=!1;goog.string.FORCE_NON_DOM_HTML_UNESCAPING=!1;goog.string.Unicode={NBSP:\"\\u00a0\"};goog.string.startsWith=goog.string.internal.startsWith;goog.string.endsWith=goog.string.internal.endsWith;goog.string.caseInsensitiveStartsWith=goog.string.internal.caseInsensitiveStartsWith;goog.string.caseInsensitiveEndsWith=goog.string.internal.caseInsensitiveEndsWith;goog.string.caseInsensitiveEquals=goog.string.internal.caseInsensitiveEquals;\ngoog.string.subs=function(a,b){for(var c=a.split(\"%s\"),d=\"\",e=Array.prototype.slice.call(arguments,1);e.length&&1<c.length;)d+=c.shift()+e.shift();return d+c.join(\"%s\")};goog.string.collapseWhitespace=function(a){return a.replace(/[\\s\\xa0]+/g,\" \").replace(/^\\s+|\\s+$/g,\"\")};goog.string.isEmptyOrWhitespace=goog.string.internal.isEmptyOrWhitespace;goog.string.isEmptyString=function(a){return 0==a.length};goog.string.isEmpty=goog.string.isEmptyOrWhitespace;goog.string.isEmptyOrWhitespaceSafe=function(a){return goog.string.isEmptyOrWhitespace(goog.string.makeSafe(a))};\ngoog.string.isEmptySafe=goog.string.isEmptyOrWhitespaceSafe;goog.string.isBreakingWhitespace=function(a){return!/[^\\t\\n\\r ]/.test(a)};goog.string.isAlpha=function(a){return!/[^a-zA-Z]/.test(a)};goog.string.isNumeric=function(a){return!/[^0-9]/.test(a)};goog.string.isAlphaNumeric=function(a){return!/[^a-zA-Z0-9]/.test(a)};goog.string.isSpace=function(a){return\" \"==a};goog.string.isUnicodeChar=function(a){return 1==a.length&&\" \"<=a&&\"~\">=a||\"\\u0080\"<=a&&\"\\ufffd\">=a};\ngoog.string.stripNewlines=function(a){return a.replace(/(\\r\\n|\\r|\\n)+/g,\" \")};goog.string.canonicalizeNewlines=function(a){return a.replace(/(\\r\\n|\\r|\\n)/g,\"\\n\")};goog.string.normalizeWhitespace=function(a){return a.replace(/\\xa0|\\s/g,\" \")};goog.string.normalizeSpaces=function(a){return a.replace(/\\xa0|[ \\t]+/g,\" \")};goog.string.collapseBreakingSpaces=function(a){return a.replace(/[\\t\\r\\n ]+/g,\" \").replace(/^[\\t\\r\\n ]+|[\\t\\r\\n ]+$/g,\"\")};goog.string.trim=goog.string.internal.trim;\ngoog.string.trimLeft=function(a){return a.replace(/^[\\s\\xa0]+/,\"\")};goog.string.trimRight=function(a){return a.replace(/[\\s\\xa0]+$/,\"\")};goog.string.caseInsensitiveCompare=goog.string.internal.caseInsensitiveCompare;\ngoog.string.numberAwareCompare_=function(a,b,c){if(a==b)return 0;if(!a)return-1;if(!b)return 1;for(var d=a.toLowerCase().match(c),e=b.toLowerCase().match(c),f=Math.min(d.length,e.length),g=0;g<f;g++){c=d[g];var h=e[g];if(c!=h)return a=parseInt(c,10),!isNaN(a)&&(b=parseInt(h,10),!isNaN(b)&&a-b)?a-b:c<h?-1:1}return d.length!=e.length?d.length-e.length:a<b?-1:1};goog.string.intAwareCompare=function(a,b){return goog.string.numberAwareCompare_(a,b,/\\d+|\\D+/g)};\ngoog.string.floatAwareCompare=function(a,b){return goog.string.numberAwareCompare_(a,b,/\\d+|\\.\\d+|\\D+/g)};goog.string.numerateCompare=goog.string.floatAwareCompare;goog.string.urlEncode=function(a){return encodeURIComponent(String(a))};goog.string.urlDecode=function(a){return decodeURIComponent(a.replace(/\\+/g,\" \"))};goog.string.newLineToBr=goog.string.internal.newLineToBr;\ngoog.string.htmlEscape=function(a,b){a=goog.string.internal.htmlEscape(a,b);goog.string.DETECT_DOUBLE_ESCAPING&&(a=a.replace(goog.string.E_RE_,\"&#101;\"));return a};goog.string.E_RE_=/e/g;goog.string.unescapeEntities=function(a){return goog.string.contains(a,\"&\")?!goog.string.FORCE_NON_DOM_HTML_UNESCAPING&&\"document\"in goog.global?goog.string.unescapeEntitiesUsingDom_(a):goog.string.unescapePureXmlEntities_(a):a};\ngoog.string.unescapeEntitiesWithDocument=function(a,b){return goog.string.contains(a,\"&\")?goog.string.unescapeEntitiesUsingDom_(a,b):a};\ngoog.string.unescapeEntitiesUsingDom_=function(a,b){var c={\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"'};var d=b?b.createElement(\"div\"):goog.global.document.createElement(\"div\");return a.replace(goog.string.HTML_ENTITY_PATTERN_,function(a,b){var e=c[a];if(e)return e;\"#\"==b.charAt(0)&&(b=Number(\"0\"+b.substr(1)),isNaN(b)||(e=String.fromCharCode(b)));e||(goog.dom.safe.setInnerHtml(d,goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract(goog.string.Const.from(\"Single HTML entity.\"),\na+\" \")),e=d.firstChild.nodeValue.slice(0,-1));return c[a]=e})};goog.string.unescapePureXmlEntities_=function(a){return a.replace(/&([^;]+);/g,function(a,c){switch(c){case \"amp\":return\"&\";case \"lt\":return\"<\";case \"gt\":return\">\";case \"quot\":return'\"';default:return\"#\"!=c.charAt(0)||(c=Number(\"0\"+c.substr(1)),isNaN(c))?a:String.fromCharCode(c)}})};goog.string.HTML_ENTITY_PATTERN_=/&([^;\\s<&]+);?/g;goog.string.whitespaceEscape=function(a,b){return goog.string.newLineToBr(a.replace(/  /g,\" &#160;\"),b)};\ngoog.string.preserveSpaces=function(a){return a.replace(/(^|[\\n ]) /g,\"$1\"+goog.string.Unicode.NBSP)};goog.string.stripQuotes=function(a,b){for(var c=b.length,d=0;d<c;d++){var e=1==c?b:b.charAt(d);if(a.charAt(0)==e&&a.charAt(a.length-1)==e)return a.substring(1,a.length-1)}return a};goog.string.truncate=function(a,b,c){c&&(a=goog.string.unescapeEntities(a));a.length>b&&(a=a.substring(0,b-3)+\"...\");c&&(a=goog.string.htmlEscape(a));return a};\ngoog.string.truncateMiddle=function(a,b,c,d){c&&(a=goog.string.unescapeEntities(a));if(d&&a.length>b){d>b&&(d=b);var e=a.length-d;a=a.substring(0,b-d)+\"...\"+a.substring(e)}else a.length>b&&(d=Math.floor(b/2),e=a.length-d,a=a.substring(0,d+b%2)+\"...\"+a.substring(e));c&&(a=goog.string.htmlEscape(a));return a};goog.string.specialEscapeChars_={\"\\x00\":\"\\\\0\",\"\\b\":\"\\\\b\",\"\\f\":\"\\\\f\",\"\\n\":\"\\\\n\",\"\\r\":\"\\\\r\",\"\\t\":\"\\\\t\",\"\\x0B\":\"\\\\x0B\",'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\",\"<\":\"\\\\u003C\"};goog.string.jsEscapeCache_={\"'\":\"\\\\'\"};\ngoog.string.quote=function(a){a=String(a);for(var b=['\"'],c=0;c<a.length;c++){var d=a.charAt(c),e=d.charCodeAt(0);b[c+1]=goog.string.specialEscapeChars_[d]||(31<e&&127>e?d:goog.string.escapeChar(d))}b.push('\"');return b.join(\"\")};goog.string.escapeString=function(a){for(var b=[],c=0;c<a.length;c++)b[c]=goog.string.escapeChar(a.charAt(c));return b.join(\"\")};\ngoog.string.escapeChar=function(a){if(a in goog.string.jsEscapeCache_)return goog.string.jsEscapeCache_[a];if(a in goog.string.specialEscapeChars_)return goog.string.jsEscapeCache_[a]=goog.string.specialEscapeChars_[a];var b=a.charCodeAt(0);if(31<b&&127>b)var c=a;else{if(256>b){if(c=\"\\\\x\",16>b||256<b)c+=\"0\"}else c=\"\\\\u\",4096>b&&(c+=\"0\");c+=b.toString(16).toUpperCase()}return goog.string.jsEscapeCache_[a]=c};goog.string.contains=goog.string.internal.contains;goog.string.caseInsensitiveContains=goog.string.internal.caseInsensitiveContains;\ngoog.string.countOf=function(a,b){return a&&b?a.split(b).length-1:0};goog.string.removeAt=function(a,b,c){var d=a;0<=b&&b<a.length&&0<c&&(d=a.substr(0,b)+a.substr(b+c,a.length-b-c));return d};goog.string.remove=function(a,b){return a.replace(b,\"\")};goog.string.removeAll=function(a,b){b=new RegExp(goog.string.regExpEscape(b),\"g\");return a.replace(b,\"\")};goog.string.replaceAll=function(a,b,c){b=new RegExp(goog.string.regExpEscape(b),\"g\");return a.replace(b,c.replace(/\\$/g,\"$$$$\"))};\ngoog.string.regExpEscape=function(a){return String(a).replace(/([-()\\[\\]{}+?*.$\\^|,:#<!\\\\])/g,\"\\\\$1\").replace(/\\x08/g,\"\\\\x08\")};goog.string.repeat=String.prototype.repeat?function(a,b){return a.repeat(b)}:function(a,b){return Array(b+1).join(a)};goog.string.padNumber=function(a,b,c){a=goog.isDef(c)?a.toFixed(c):String(a);c=a.indexOf(\".\");-1==c&&(c=a.length);return goog.string.repeat(\"0\",Math.max(0,b-c))+a};goog.string.makeSafe=function(a){return null==a?\"\":String(a)};\ngoog.string.buildString=function(a){return Array.prototype.join.call(arguments,\"\")};goog.string.getRandomString=function(){return Math.floor(2147483648*Math.random()).toString(36)+Math.abs(Math.floor(2147483648*Math.random())^goog.now()).toString(36)};goog.string.compareVersions=goog.string.internal.compareVersions;goog.string.hashCode=function(a){for(var b=0,c=0;c<a.length;++c)b=31*b+a.charCodeAt(c)>>>0;return b};goog.string.uniqueStringCounter_=2147483648*Math.random()|0;\ngoog.string.createUniqueString=function(){return\"goog_\"+goog.string.uniqueStringCounter_++};goog.string.toNumber=function(a){var b=Number(a);return 0==b&&goog.string.isEmptyOrWhitespace(a)?NaN:b};goog.string.isLowerCamelCase=function(a){return/^[a-z]+([A-Z][a-z]*)*$/.test(a)};goog.string.isUpperCamelCase=function(a){return/^([A-Z][a-z]*)+$/.test(a)};goog.string.toCamelCase=function(a){return String(a).replace(/\\-([a-z])/g,function(a,c){return c.toUpperCase()})};\ngoog.string.toSelectorCase=function(a){return String(a).replace(/([A-Z])/g,\"-$1\").toLowerCase()};goog.string.toTitleCase=function(a,b){b=goog.isString(b)?goog.string.regExpEscape(b):\"\\\\s\";return a.replace(new RegExp(\"(^\"+(b?\"|[\"+b+\"]+\":\"\")+\")([a-z])\",\"g\"),function(a,b,e){return b+e.toUpperCase()})};goog.string.capitalize=function(a){return String(a.charAt(0)).toUpperCase()+String(a.substr(1)).toLowerCase()};\ngoog.string.parseInt=function(a){isFinite(a)&&(a=String(a));return goog.isString(a)?/^\\s*-?0x/i.test(a)?parseInt(a,16):parseInt(a,10):NaN};goog.string.splitLimit=function(a,b,c){a=a.split(b);for(var d=[];0<c&&a.length;)d.push(a.shift()),c--;a.length&&d.push(a.join(b));return d};goog.string.lastComponent=function(a,b){if(b)\"string\"==typeof b&&(b=[b]);else return a;for(var c=-1,d=0;d<b.length;d++)if(\"\"!=b[d]){var e=a.lastIndexOf(b[d]);e>c&&(c=e)}return-1==c?a:a.slice(c+1)};\ngoog.string.editDistance=function(a,b){var c=[],d=[];if(a==b)return 0;if(!a.length||!b.length)return Math.max(a.length,b.length);for(var e=0;e<b.length+1;e++)c[e]=e;for(e=0;e<a.length;e++){d[0]=e+1;for(var f=0;f<b.length;f++)d[f+1]=Math.min(d[f]+1,c[f+1]+1,c[f]+Number(a[e]!=b[f]));for(f=0;f<c.length;f++)c[f]=d[f]}return d[b.length]};goog.labs.userAgent.platform={};goog.labs.userAgent.platform.isAndroid=function(){return goog.labs.userAgent.util.matchUserAgent(\"Android\")};goog.labs.userAgent.platform.isIpod=function(){return goog.labs.userAgent.util.matchUserAgent(\"iPod\")};goog.labs.userAgent.platform.isIphone=function(){return goog.labs.userAgent.util.matchUserAgent(\"iPhone\")&&!goog.labs.userAgent.util.matchUserAgent(\"iPod\")&&!goog.labs.userAgent.util.matchUserAgent(\"iPad\")};goog.labs.userAgent.platform.isIpad=function(){return goog.labs.userAgent.util.matchUserAgent(\"iPad\")};\ngoog.labs.userAgent.platform.isIos=function(){return goog.labs.userAgent.platform.isIphone()||goog.labs.userAgent.platform.isIpad()||goog.labs.userAgent.platform.isIpod()};goog.labs.userAgent.platform.isMacintosh=function(){return goog.labs.userAgent.util.matchUserAgent(\"Macintosh\")};goog.labs.userAgent.platform.isLinux=function(){return goog.labs.userAgent.util.matchUserAgent(\"Linux\")};goog.labs.userAgent.platform.isWindows=function(){return goog.labs.userAgent.util.matchUserAgent(\"Windows\")};\ngoog.labs.userAgent.platform.isChromeOS=function(){return goog.labs.userAgent.util.matchUserAgent(\"CrOS\")};goog.labs.userAgent.platform.isChromecast=function(){return goog.labs.userAgent.util.matchUserAgent(\"CrKey\")};goog.labs.userAgent.platform.isKaiOS=function(){return goog.labs.userAgent.util.matchUserAgentIgnoreCase(\"KaiOS\")};goog.labs.userAgent.platform.isGo2Phone=function(){return goog.labs.userAgent.util.matchUserAgentIgnoreCase(\"GAFP\")};\ngoog.labs.userAgent.platform.getVersion=function(){var a=goog.labs.userAgent.util.getUserAgent(),b=\"\";goog.labs.userAgent.platform.isWindows()?(b=/Windows (?:NT|Phone) ([0-9.]+)/,b=(a=b.exec(a))?a[1]:\"0.0\"):goog.labs.userAgent.platform.isIos()?(b=/(?:iPhone|iPod|iPad|CPU)\\s+OS\\s+(\\S+)/,b=(a=b.exec(a))&&a[1].replace(/_/g,\".\")):goog.labs.userAgent.platform.isMacintosh()?(b=/Mac OS X ([0-9_.]+)/,b=(a=b.exec(a))?a[1].replace(/_/g,\".\"):\"10\"):goog.labs.userAgent.platform.isKaiOS()?(b=/(?:KaiOS)\\/(\\S+)/i,\nb=(a=b.exec(a))&&a[1]):goog.labs.userAgent.platform.isAndroid()?(b=/Android\\s+([^\\);]+)(\\)|;)/,b=(a=b.exec(a))&&a[1]):goog.labs.userAgent.platform.isChromeOS()&&(b=/(?:CrOS\\s+(?:i686|x86_64)\\s+([0-9.]+))/,b=(a=b.exec(a))&&a[1]);return b||\"\"};goog.labs.userAgent.platform.isVersionOrHigher=function(a){return 0<=goog.string.compareVersions(goog.labs.userAgent.platform.getVersion(),a)};goog.reflect={};goog.reflect.object=function(a,b){return b};goog.reflect.objectProperty=function(a,b){return a};goog.reflect.sinkValue=function(a){goog.reflect.sinkValue[\" \"](a);return a};goog.reflect.sinkValue[\" \"]=goog.nullFunction;goog.reflect.canAccessProperty=function(a,b){try{return goog.reflect.sinkValue(a[b]),!0}catch(c){}return!1};goog.reflect.cache=function(a,b,c,d){d=d?d(b):b;return Object.prototype.hasOwnProperty.call(a,d)?a[d]:a[d]=c(b)};goog.labs.userAgent.engine={};goog.labs.userAgent.engine.isPresto=function(){return goog.labs.userAgent.util.matchUserAgent(\"Presto\")};goog.labs.userAgent.engine.isTrident=function(){return goog.labs.userAgent.util.matchUserAgent(\"Trident\")||goog.labs.userAgent.util.matchUserAgent(\"MSIE\")};goog.labs.userAgent.engine.isEdge=function(){return goog.labs.userAgent.util.matchUserAgent(\"Edge\")};\ngoog.labs.userAgent.engine.isWebKit=function(){return goog.labs.userAgent.util.matchUserAgentIgnoreCase(\"WebKit\")&&!goog.labs.userAgent.engine.isEdge()};goog.labs.userAgent.engine.isGecko=function(){return goog.labs.userAgent.util.matchUserAgent(\"Gecko\")&&!goog.labs.userAgent.engine.isWebKit()&&!goog.labs.userAgent.engine.isTrident()&&!goog.labs.userAgent.engine.isEdge()};\ngoog.labs.userAgent.engine.getVersion=function(){var a=goog.labs.userAgent.util.getUserAgent();if(a){a=goog.labs.userAgent.util.extractVersionTuples(a);var b=goog.labs.userAgent.engine.getEngineTuple_(a);if(b)return\"Gecko\"==b[0]?goog.labs.userAgent.engine.getVersionForKey_(a,\"Firefox\"):b[1];a=a[0];var c;if(a&&(c=a[2])&&(c=/Trident\\/([^\\s;]+)/.exec(c)))return c[1]}return\"\"};\ngoog.labs.userAgent.engine.getEngineTuple_=function(a){if(!goog.labs.userAgent.engine.isEdge())return a[1];for(var b=0;b<a.length;b++){var c=a[b];if(\"Edge\"==c[0])return c}};goog.labs.userAgent.engine.isVersionOrHigher=function(a){return 0<=goog.string.compareVersions(goog.labs.userAgent.engine.getVersion(),a)};goog.labs.userAgent.engine.getVersionForKey_=function(a,b){return(a=goog.array.find(a,function(a){return b==a[0]}))&&a[1]||\"\"};goog.userAgent={};goog.userAgent.ASSUME_IE=!1;goog.userAgent.ASSUME_EDGE=!1;goog.userAgent.ASSUME_GECKO=!1;goog.userAgent.ASSUME_WEBKIT=!1;goog.userAgent.ASSUME_MOBILE_WEBKIT=!1;goog.userAgent.ASSUME_OPERA=!1;goog.userAgent.ASSUME_ANY_VERSION=!1;goog.userAgent.BROWSER_KNOWN_=goog.userAgent.ASSUME_IE||goog.userAgent.ASSUME_EDGE||goog.userAgent.ASSUME_GECKO||goog.userAgent.ASSUME_MOBILE_WEBKIT||goog.userAgent.ASSUME_WEBKIT||goog.userAgent.ASSUME_OPERA;goog.userAgent.getUserAgentString=function(){return goog.labs.userAgent.util.getUserAgent()};\ngoog.userAgent.getNavigatorTyped=function(){return goog.global.navigator||null};goog.userAgent.getNavigator=function(){return goog.userAgent.getNavigatorTyped()};goog.userAgent.OPERA=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_OPERA:goog.labs.userAgent.browser.isOpera();goog.userAgent.IE=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_IE:goog.labs.userAgent.browser.isIE();goog.userAgent.EDGE=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_EDGE:goog.labs.userAgent.engine.isEdge();\ngoog.userAgent.EDGE_OR_IE=goog.userAgent.EDGE||goog.userAgent.IE;goog.userAgent.GECKO=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_GECKO:goog.labs.userAgent.engine.isGecko();goog.userAgent.WEBKIT=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_WEBKIT||goog.userAgent.ASSUME_MOBILE_WEBKIT:goog.labs.userAgent.engine.isWebKit();goog.userAgent.isMobile_=function(){return goog.userAgent.WEBKIT&&goog.labs.userAgent.util.matchUserAgent(\"Mobile\")};\ngoog.userAgent.MOBILE=goog.userAgent.ASSUME_MOBILE_WEBKIT||goog.userAgent.isMobile_();goog.userAgent.SAFARI=goog.userAgent.WEBKIT;goog.userAgent.determinePlatform_=function(){var a=goog.userAgent.getNavigatorTyped();return a&&a.platform||\"\"};goog.userAgent.PLATFORM=goog.userAgent.determinePlatform_();goog.userAgent.ASSUME_MAC=!1;goog.userAgent.ASSUME_WINDOWS=!1;goog.userAgent.ASSUME_LINUX=!1;goog.userAgent.ASSUME_X11=!1;goog.userAgent.ASSUME_ANDROID=!1;goog.userAgent.ASSUME_IPHONE=!1;\ngoog.userAgent.ASSUME_IPAD=!1;goog.userAgent.ASSUME_IPOD=!1;goog.userAgent.ASSUME_KAIOS=!1;goog.userAgent.ASSUME_GO2PHONE=!1;goog.userAgent.PLATFORM_KNOWN_=goog.userAgent.ASSUME_MAC||goog.userAgent.ASSUME_WINDOWS||goog.userAgent.ASSUME_LINUX||goog.userAgent.ASSUME_X11||goog.userAgent.ASSUME_ANDROID||goog.userAgent.ASSUME_IPHONE||goog.userAgent.ASSUME_IPAD||goog.userAgent.ASSUME_IPOD;goog.userAgent.MAC=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_MAC:goog.labs.userAgent.platform.isMacintosh();\ngoog.userAgent.WINDOWS=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_WINDOWS:goog.labs.userAgent.platform.isWindows();goog.userAgent.isLegacyLinux_=function(){return goog.labs.userAgent.platform.isLinux()||goog.labs.userAgent.platform.isChromeOS()};goog.userAgent.LINUX=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_LINUX:goog.userAgent.isLegacyLinux_();goog.userAgent.isX11_=function(){var a=goog.userAgent.getNavigatorTyped();return!!a&&goog.string.contains(a.appVersion||\"\",\"X11\")};\ngoog.userAgent.X11=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_X11:goog.userAgent.isX11_();goog.userAgent.ANDROID=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_ANDROID:goog.labs.userAgent.platform.isAndroid();goog.userAgent.IPHONE=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPHONE:goog.labs.userAgent.platform.isIphone();goog.userAgent.IPAD=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPAD:goog.labs.userAgent.platform.isIpad();\ngoog.userAgent.IPOD=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPOD:goog.labs.userAgent.platform.isIpod();goog.userAgent.IOS=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPHONE||goog.userAgent.ASSUME_IPAD||goog.userAgent.ASSUME_IPOD:goog.labs.userAgent.platform.isIos();goog.userAgent.KAIOS=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_KAIOS:goog.labs.userAgent.platform.isKaiOS();goog.userAgent.GO2PHONE=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_GO2PHONE:goog.labs.userAgent.platform.isGo2Phone();\ngoog.userAgent.determineVersion_=function(){var a=\"\",b=goog.userAgent.getVersionRegexResult_();b&&(a=b?b[1]:\"\");return goog.userAgent.IE&&(b=goog.userAgent.getDocumentMode_(),null!=b&&b>parseFloat(a))?String(b):a};\ngoog.userAgent.getVersionRegexResult_=function(){var a=goog.userAgent.getUserAgentString();if(goog.userAgent.GECKO)return/rv:([^\\);]+)(\\)|;)/.exec(a);if(goog.userAgent.EDGE)return/Edge\\/([\\d\\.]+)/.exec(a);if(goog.userAgent.IE)return/\\b(?:MSIE|rv)[: ]([^\\);]+)(\\)|;)/.exec(a);if(goog.userAgent.WEBKIT)return/WebKit\\/(\\S+)/.exec(a);if(goog.userAgent.OPERA)return/(?:Version)[ \\/]?(\\S+)/.exec(a)};goog.userAgent.getDocumentMode_=function(){var a=goog.global.document;return a?a.documentMode:void 0};\ngoog.userAgent.VERSION=goog.userAgent.determineVersion_();goog.userAgent.compare=function(a,b){return goog.string.compareVersions(a,b)};goog.userAgent.isVersionOrHigherCache_={};goog.userAgent.isVersionOrHigher=function(a){return goog.userAgent.ASSUME_ANY_VERSION||goog.reflect.cache(goog.userAgent.isVersionOrHigherCache_,a,function(){return 0<=goog.string.compareVersions(goog.userAgent.VERSION,a)})};goog.userAgent.isVersion=goog.userAgent.isVersionOrHigher;\ngoog.userAgent.isDocumentModeOrHigher=function(a){return Number(goog.userAgent.DOCUMENT_MODE)>=a};goog.userAgent.isDocumentMode=goog.userAgent.isDocumentModeOrHigher;goog.userAgent.DOCUMENT_MODE=function(){if(goog.global.document&&goog.userAgent.IE)return goog.userAgent.getDocumentMode_()}();goog.userAgent.product={};goog.userAgent.product.ASSUME_FIREFOX=!1;goog.userAgent.product.ASSUME_IPHONE=!1;goog.userAgent.product.ASSUME_IPAD=!1;goog.userAgent.product.ASSUME_ANDROID=!1;goog.userAgent.product.ASSUME_CHROME=!1;goog.userAgent.product.ASSUME_SAFARI=!1;\ngoog.userAgent.product.PRODUCT_KNOWN_=goog.userAgent.ASSUME_IE||goog.userAgent.ASSUME_EDGE||goog.userAgent.ASSUME_OPERA||goog.userAgent.product.ASSUME_FIREFOX||goog.userAgent.product.ASSUME_IPHONE||goog.userAgent.product.ASSUME_IPAD||goog.userAgent.product.ASSUME_ANDROID||goog.userAgent.product.ASSUME_CHROME||goog.userAgent.product.ASSUME_SAFARI;goog.userAgent.product.OPERA=goog.userAgent.OPERA;goog.userAgent.product.IE=goog.userAgent.IE;goog.userAgent.product.EDGE=goog.userAgent.EDGE;\ngoog.userAgent.product.FIREFOX=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_FIREFOX:goog.labs.userAgent.browser.isFirefox();goog.userAgent.product.isIphoneOrIpod_=function(){return goog.labs.userAgent.platform.isIphone()||goog.labs.userAgent.platform.isIpod()};goog.userAgent.product.IPHONE=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_IPHONE:goog.userAgent.product.isIphoneOrIpod_();\ngoog.userAgent.product.IPAD=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_IPAD:goog.labs.userAgent.platform.isIpad();goog.userAgent.product.ANDROID=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_ANDROID:goog.labs.userAgent.browser.isAndroidBrowser();goog.userAgent.product.CHROME=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_CHROME:goog.labs.userAgent.browser.isChrome();\ngoog.userAgent.product.isSafariDesktop_=function(){return goog.labs.userAgent.browser.isSafari()&&!goog.labs.userAgent.platform.isIos()};goog.userAgent.product.SAFARI=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_SAFARI:goog.userAgent.product.isSafariDesktop_();goog.crypt.base64={};goog.crypt.base64.DEFAULT_ALPHABET_COMMON_=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";goog.crypt.base64.ENCODED_VALS=goog.crypt.base64.DEFAULT_ALPHABET_COMMON_+\"+/=\";goog.crypt.base64.ENCODED_VALS_WEBSAFE=goog.crypt.base64.DEFAULT_ALPHABET_COMMON_+\"-_.\";goog.crypt.base64.Alphabet={DEFAULT:0,NO_PADDING:1,WEBSAFE:2,WEBSAFE_DOT_PADDING:3,WEBSAFE_NO_PADDING:4};goog.crypt.base64.paddingChars_=\"=.\";\ngoog.crypt.base64.isPadding_=function(a){return goog.string.contains(goog.crypt.base64.paddingChars_,a)};goog.crypt.base64.byteToCharMaps_={};goog.crypt.base64.charToByteMap_=null;goog.crypt.base64.ASSUME_NATIVE_SUPPORT_=goog.userAgent.GECKO||goog.userAgent.WEBKIT&&!goog.userAgent.product.SAFARI||goog.userAgent.OPERA;goog.crypt.base64.HAS_NATIVE_ENCODE_=goog.crypt.base64.ASSUME_NATIVE_SUPPORT_||\"function\"==typeof goog.global.btoa;\ngoog.crypt.base64.HAS_NATIVE_DECODE_=goog.crypt.base64.ASSUME_NATIVE_SUPPORT_||!goog.userAgent.product.SAFARI&&!goog.userAgent.IE&&\"function\"==typeof goog.global.atob;\ngoog.crypt.base64.encodeByteArray=function(a,b){goog.asserts.assert(goog.isArrayLike(a),\"encodeByteArray takes an array as a parameter\");void 0===b&&(b=goog.crypt.base64.Alphabet.DEFAULT);goog.crypt.base64.init_();b=goog.crypt.base64.byteToCharMaps_[b];for(var c=[],d=0;d<a.length;d+=3){var e=a[d],f=d+1<a.length,g=f?a[d+1]:0,h=d+2<a.length,k=h?a[d+2]:0,l=e>>2;e=(e&3)<<4|g>>4;g=(g&15)<<2|k>>6;k&=63;h||(k=64,f||(g=64));c.push(b[l],b[e],b[g]||\"\",b[k]||\"\")}return c.join(\"\")};\ngoog.crypt.base64.encodeString=function(a,b){return goog.crypt.base64.HAS_NATIVE_ENCODE_&&!b?goog.global.btoa(a):goog.crypt.base64.encodeByteArray(goog.crypt.stringToByteArray(a),b)};goog.crypt.base64.decodeString=function(a,b){if(goog.crypt.base64.HAS_NATIVE_DECODE_&&!b)return goog.global.atob(a);var c=\"\";goog.crypt.base64.decodeStringInternal_(a,function(a){c+=String.fromCharCode(a)});return c};\ngoog.crypt.base64.decodeStringToByteArray=function(a,b){var c=[];goog.crypt.base64.decodeStringInternal_(a,function(a){c.push(a)});return c};\ngoog.crypt.base64.decodeStringToUint8Array=function(a){goog.asserts.assert(!goog.userAgent.IE||goog.userAgent.isVersionOrHigher(\"10\"),\"Browser does not support typed arrays\");var b=a.length,c=3*b/4;c%3?c=Math.floor(c):goog.crypt.base64.isPadding_(a[b-1])&&(c=goog.crypt.base64.isPadding_(a[b-2])?c-2:c-1);var d=new Uint8Array(c),e=0;goog.crypt.base64.decodeStringInternal_(a,function(a){d[e++]=a});return d.subarray(0,e)};\ngoog.crypt.base64.decodeStringInternal_=function(a,b){function c(b){for(;d<a.length;){var c=a.charAt(d++),e=goog.crypt.base64.charToByteMap_[c];if(null!=e)return e;if(!goog.string.isEmptyOrWhitespace(c))throw Error(\"Unknown base64 encoding at char: \"+c);}return b}goog.crypt.base64.init_();for(var d=0;;){var e=c(-1),f=c(0),g=c(64),h=c(64);if(64===h&&-1===e)break;b(e<<2|f>>4);64!=g&&(b(f<<4&240|g>>2),64!=h&&b(g<<6&192|h))}};\ngoog.crypt.base64.init_=function(){if(!goog.crypt.base64.charToByteMap_){goog.crypt.base64.charToByteMap_={};for(var a=goog.crypt.base64.DEFAULT_ALPHABET_COMMON_.split(\"\"),b=[\"+/=\",\"+/\",\"-_=\",\"-_.\",\"-_\"],c=0;5>c;c++){var d=a.concat(b[c].split(\"\"));goog.crypt.base64.byteToCharMaps_[c]=d;for(var e=0;e<d.length;e++){var f=d[e],g=goog.crypt.base64.charToByteMap_[f];void 0===g?goog.crypt.base64.charToByteMap_[f]=e:goog.asserts.assert(g===e)}}}};jspb.utils={};jspb.utils.split64Low=0;jspb.utils.split64High=0;jspb.utils.splitUint64=function(a){var b=a>>>0;a=Math.floor((a-b)/jspb.BinaryConstants.TWO_TO_32)>>>0;jspb.utils.split64Low=b;jspb.utils.split64High=a};jspb.utils.splitInt64=function(a){var b=0>a;a=Math.abs(a);var c=a>>>0;a=Math.floor((a-c)/jspb.BinaryConstants.TWO_TO_32);a>>>=0;b&&(a=~a>>>0,c=(~c>>>0)+1,4294967295<c&&(c=0,a++,4294967295<a&&(a=0)));jspb.utils.split64Low=c;jspb.utils.split64High=a};\njspb.utils.splitZigzag64=function(a){var b=0>a;a=2*Math.abs(a);jspb.utils.splitUint64(a);a=jspb.utils.split64Low;var c=jspb.utils.split64High;b&&(0==a?0==c?c=a=4294967295:(c--,a=4294967295):a--);jspb.utils.split64Low=a;jspb.utils.split64High=c};\njspb.utils.splitFloat32=function(a){var b=0>a?1:0;a=b?-a:a;if(0===a)0<1/a?(jspb.utils.split64High=0,jspb.utils.split64Low=0):(jspb.utils.split64High=0,jspb.utils.split64Low=2147483648);else if(isNaN(a))jspb.utils.split64High=0,jspb.utils.split64Low=2147483647;else if(a>jspb.BinaryConstants.FLOAT32_MAX)jspb.utils.split64High=0,jspb.utils.split64Low=(b<<31|2139095040)>>>0;else if(a<jspb.BinaryConstants.FLOAT32_MIN)a=Math.round(a/Math.pow(2,-149)),jspb.utils.split64High=0,jspb.utils.split64Low=(b<<31|\na)>>>0;else{var c=Math.floor(Math.log(a)/Math.LN2);a*=Math.pow(2,-c);a=Math.round(a*jspb.BinaryConstants.TWO_TO_23)&8388607;jspb.utils.split64High=0;jspb.utils.split64Low=(b<<31|c+127<<23|a)>>>0}};\njspb.utils.splitFloat64=function(a){var b=0>a?1:0;a=b?-a:a;if(0===a)jspb.utils.split64High=0<1/a?0:2147483648,jspb.utils.split64Low=0;else if(isNaN(a))jspb.utils.split64High=2147483647,jspb.utils.split64Low=4294967295;else if(a>jspb.BinaryConstants.FLOAT64_MAX)jspb.utils.split64High=(b<<31|2146435072)>>>0,jspb.utils.split64Low=0;else if(a<jspb.BinaryConstants.FLOAT64_MIN){var c=a/Math.pow(2,-1074);a=c/jspb.BinaryConstants.TWO_TO_32;jspb.utils.split64High=(b<<31|a)>>>0;jspb.utils.split64Low=c>>>0}else{c=\na;var d=0;if(2<=c)for(;2<=c&&1023>d;)d++,c/=2;else for(;1>c&&-1022<d;)c*=2,d--;c=a*Math.pow(2,-d);a=c*jspb.BinaryConstants.TWO_TO_20&1048575;c=c*jspb.BinaryConstants.TWO_TO_52>>>0;jspb.utils.split64High=(b<<31|d+1023<<20|a)>>>0;jspb.utils.split64Low=c}};\njspb.utils.splitHash64=function(a){var b=a.charCodeAt(0),c=a.charCodeAt(1),d=a.charCodeAt(2),e=a.charCodeAt(3),f=a.charCodeAt(4),g=a.charCodeAt(5),h=a.charCodeAt(6);a=a.charCodeAt(7);jspb.utils.split64Low=b+(c<<8)+(d<<16)+(e<<24)>>>0;jspb.utils.split64High=f+(g<<8)+(h<<16)+(a<<24)>>>0};jspb.utils.joinUint64=function(a,b){return b*jspb.BinaryConstants.TWO_TO_32+(a>>>0)};\njspb.utils.joinInt64=function(a,b){var c=b&2147483648;c&&(a=~a+1>>>0,b=~b>>>0,0==a&&(b=b+1>>>0));a=jspb.utils.joinUint64(a,b);return c?-a:a};jspb.utils.toZigzag64=function(a,b,c){var d=b>>31;return c(a<<1^d,(b<<1|a>>>31)^d)};jspb.utils.joinZigzag64=function(a,b){return jspb.utils.fromZigzag64(a,b,jspb.utils.joinInt64)};jspb.utils.fromZigzag64=function(a,b,c){var d=-(a&1);return c((a>>>1|b<<31)^d,b>>>1^d)};\njspb.utils.joinFloat32=function(a,b){b=2*(a>>31)+1;var c=a>>>23&255;a&=8388607;return 255==c?a?NaN:Infinity*b:0==c?b*Math.pow(2,-149)*a:b*Math.pow(2,c-150)*(a+Math.pow(2,23))};jspb.utils.joinFloat64=function(a,b){var c=2*(b>>31)+1,d=b>>>20&2047;a=jspb.BinaryConstants.TWO_TO_32*(b&1048575)+a;return 2047==d?a?NaN:Infinity*c:0==d?c*Math.pow(2,-1074)*a:c*Math.pow(2,d-1075)*(a+jspb.BinaryConstants.TWO_TO_52)};\njspb.utils.joinHash64=function(a,b){return String.fromCharCode(a>>>0&255,a>>>8&255,a>>>16&255,a>>>24&255,b>>>0&255,b>>>8&255,b>>>16&255,b>>>24&255)};jspb.utils.DIGITS=\"0123456789abcdef\".split(\"\");jspb.utils.ZERO_CHAR_CODE_=48;jspb.utils.A_CHAR_CODE_=97;\njspb.utils.joinUnsignedDecimalString=function(a,b){function c(a,b){a=a?String(a):\"\";return b?\"0000000\".slice(a.length)+a:a}if(2097151>=b)return\"\"+(jspb.BinaryConstants.TWO_TO_32*b+a);var d=(a>>>24|b<<8)>>>0&16777215;b=b>>16&65535;a=(a&16777215)+6777216*d+6710656*b;d+=8147497*b;b*=2;1E7<=a&&(d+=Math.floor(a/1E7),a%=1E7);1E7<=d&&(b+=Math.floor(d/1E7),d%=1E7);return c(b,0)+c(d,b)+c(a,1)};\njspb.utils.joinSignedDecimalString=function(a,b){var c=b&2147483648;c&&(a=~a+1>>>0,b=~b+(0==a?1:0)>>>0);a=jspb.utils.joinUnsignedDecimalString(a,b);return c?\"-\"+a:a};jspb.utils.hash64ToDecimalString=function(a,b){jspb.utils.splitHash64(a);a=jspb.utils.split64Low;var c=jspb.utils.split64High;return b?jspb.utils.joinSignedDecimalString(a,c):jspb.utils.joinUnsignedDecimalString(a,c)};\njspb.utils.hash64ArrayToDecimalStrings=function(a,b){for(var c=Array(a.length),d=0;d<a.length;d++)c[d]=jspb.utils.hash64ToDecimalString(a[d],b);return c};\njspb.utils.decimalStringToHash64=function(a){function b(a,b){for(var c=0;8>c&&(1!==a||0<b);c++)b=a*e[c]+b,e[c]=b&255,b>>>=8}function c(){for(var a=0;8>a;a++)e[a]=~e[a]&255}goog.asserts.assert(0<a.length);var d=!1;\"-\"===a[0]&&(d=!0,a=a.slice(1));for(var e=[0,0,0,0,0,0,0,0],f=0;f<a.length;f++)b(10,a.charCodeAt(f)-jspb.utils.ZERO_CHAR_CODE_);d&&(c(),b(1,1));return goog.crypt.byteArrayToString(e)};jspb.utils.splitDecimalString=function(a){jspb.utils.splitHash64(jspb.utils.decimalStringToHash64(a))};\njspb.utils.toHexDigit_=function(a){return String.fromCharCode(10>a?jspb.utils.ZERO_CHAR_CODE_+a:jspb.utils.A_CHAR_CODE_-10+a)};jspb.utils.fromHexCharCode_=function(a){return a>=jspb.utils.A_CHAR_CODE_?a-jspb.utils.A_CHAR_CODE_+10:a-jspb.utils.ZERO_CHAR_CODE_};jspb.utils.hash64ToHexString=function(a){var b=Array(18);b[0]=\"0\";b[1]=\"x\";for(var c=0;8>c;c++){var d=a.charCodeAt(7-c);b[2*c+2]=jspb.utils.toHexDigit_(d>>4);b[2*c+3]=jspb.utils.toHexDigit_(d&15)}return b.join(\"\")};\njspb.utils.hexStringToHash64=function(a){a=a.toLowerCase();goog.asserts.assert(18==a.length);goog.asserts.assert(\"0\"==a[0]);goog.asserts.assert(\"x\"==a[1]);for(var b=\"\",c=0;8>c;c++){var d=jspb.utils.fromHexCharCode_(a.charCodeAt(2*c+2)),e=jspb.utils.fromHexCharCode_(a.charCodeAt(2*c+3));b=String.fromCharCode(16*d+e)+b}return b};\njspb.utils.hash64ToNumber=function(a,b){jspb.utils.splitHash64(a);a=jspb.utils.split64Low;var c=jspb.utils.split64High;return b?jspb.utils.joinInt64(a,c):jspb.utils.joinUint64(a,c)};jspb.utils.numberToHash64=function(a){jspb.utils.splitInt64(a);return jspb.utils.joinHash64(jspb.utils.split64Low,jspb.utils.split64High)};jspb.utils.countVarints=function(a,b,c){for(var d=0,e=b;e<c;e++)d+=a[e]>>7;return c-b-d};\njspb.utils.countVarintFields=function(a,b,c,d){var e=0;d=8*d+jspb.BinaryConstants.WireType.VARINT;if(128>d)for(;b<c&&a[b++]==d;)for(e++;;){var f=a[b++];if(0==(f&128))break}else for(;b<c;){for(f=d;128<f;){if(a[b]!=(f&127|128))return e;b++;f>>=7}if(a[b++]!=f)break;for(e++;f=a[b++],0!=(f&128););}return e};jspb.utils.countFixedFields_=function(a,b,c,d,e){var f=0;if(128>d)for(;b<c&&a[b++]==d;)f++,b+=e;else for(;b<c;){for(var g=d;128<g;){if(a[b++]!=(g&127|128))return f;g>>=7}if(a[b++]!=g)break;f++;b+=e}return f};\njspb.utils.countFixed32Fields=function(a,b,c,d){return jspb.utils.countFixedFields_(a,b,c,8*d+jspb.BinaryConstants.WireType.FIXED32,4)};jspb.utils.countFixed64Fields=function(a,b,c,d){return jspb.utils.countFixedFields_(a,b,c,8*d+jspb.BinaryConstants.WireType.FIXED64,8)};\njspb.utils.countDelimitedFields=function(a,b,c,d){var e=0;for(d=8*d+jspb.BinaryConstants.WireType.DELIMITED;b<c;){for(var f=d;128<f;){if(a[b++]!=(f&127|128))return e;f>>=7}if(a[b++]!=f)break;e++;for(var g=0,h=1;f=a[b++],g+=(f&127)*h,h*=128,0!=(f&128););b+=g}return e};jspb.utils.debugBytesToTextFormat=function(a){var b='\"';if(a){a=jspb.utils.byteSourceToUint8Array(a);for(var c=0;c<a.length;c++)b+=\"\\\\x\",16>a[c]&&(b+=\"0\"),b+=a[c].toString(16)}return b+'\"'};\njspb.utils.debugScalarToTextFormat=function(a){return\"string\"===typeof a?goog.string.quote(a):a.toString()};jspb.utils.stringToByteArray=function(a){for(var b=new Uint8Array(a.length),c=0;c<a.length;c++){var d=a.charCodeAt(c);if(255<d)throw Error(\"Conversion error: string contains codepoint outside of byte range\");b[c]=d}return b};\njspb.utils.byteSourceToUint8Array=function(a){if(a.constructor===Uint8Array)return a;if(a.constructor===ArrayBuffer||\"undefined\"!=typeof Buffer&&a.constructor===Buffer||a.constructor===Array)return new Uint8Array(a);if(a.constructor===String)return goog.crypt.base64.decodeStringToUint8Array(a);goog.asserts.fail(\"Type not convertible to Uint8Array.\");return new Uint8Array(0)};jspb.BinaryDecoder=function(a,b,c){this.bytes_=null;this.cursor_=this.end_=this.start_=0;this.error_=!1;a&&this.setBlock(a,b,c)};jspb.BinaryDecoder.instanceCache_=[];jspb.BinaryDecoder.alloc=function(a,b,c){if(jspb.BinaryDecoder.instanceCache_.length){var d=jspb.BinaryDecoder.instanceCache_.pop();a&&d.setBlock(a,b,c);return d}return new jspb.BinaryDecoder(a,b,c)};jspb.BinaryDecoder.prototype.free=function(){this.clear();100>jspb.BinaryDecoder.instanceCache_.length&&jspb.BinaryDecoder.instanceCache_.push(this)};\njspb.BinaryDecoder.prototype.clone=function(){return jspb.BinaryDecoder.alloc(this.bytes_,this.start_,this.end_-this.start_)};jspb.BinaryDecoder.prototype.clear=function(){this.bytes_=null;this.cursor_=this.end_=this.start_=0;this.error_=!1};jspb.BinaryDecoder.prototype.getBuffer=function(){return this.bytes_};\njspb.BinaryDecoder.prototype.setBlock=function(a,b,c){this.bytes_=jspb.utils.byteSourceToUint8Array(a);this.start_=void 0!==b?b:0;this.end_=void 0!==c?this.start_+c:this.bytes_.length;this.cursor_=this.start_};jspb.BinaryDecoder.prototype.getEnd=function(){return this.end_};jspb.BinaryDecoder.prototype.setEnd=function(a){this.end_=a};jspb.BinaryDecoder.prototype.reset=function(){this.cursor_=this.start_};jspb.BinaryDecoder.prototype.getCursor=function(){return this.cursor_};\njspb.BinaryDecoder.prototype.setCursor=function(a){this.cursor_=a};jspb.BinaryDecoder.prototype.advance=function(a){this.cursor_+=a;goog.asserts.assert(this.cursor_<=this.end_)};jspb.BinaryDecoder.prototype.atEnd=function(){return this.cursor_==this.end_};jspb.BinaryDecoder.prototype.pastEnd=function(){return this.cursor_>this.end_};jspb.BinaryDecoder.prototype.getError=function(){return this.error_||0>this.cursor_||this.cursor_>this.end_};\njspb.BinaryDecoder.prototype.readSplitVarint64=function(a){for(var b=128,c=0,d=0,e=0;4>e&&128<=b;e++)b=this.bytes_[this.cursor_++],c|=(b&127)<<7*e;128<=b&&(b=this.bytes_[this.cursor_++],c|=(b&127)<<28,d|=(b&127)>>4);if(128<=b)for(e=0;5>e&&128<=b;e++)b=this.bytes_[this.cursor_++],d|=(b&127)<<7*e+3;if(128>b)return a(c>>>0,d>>>0);goog.asserts.fail(\"Failed to read varint, encoding is invalid.\");this.error_=!0};\njspb.BinaryDecoder.prototype.readSplitZigzagVarint64=function(a){return this.readSplitVarint64(function(b,c){return jspb.utils.fromZigzag64(b,c,a)})};jspb.BinaryDecoder.prototype.readSplitFixed64=function(a){var b=this.bytes_,c=this.cursor_;this.cursor_+=8;for(var d=0,e=0,f=c+7;f>=c;f--)d=d<<8|b[f],e=e<<8|b[f+4];return a(d,e)};jspb.BinaryDecoder.prototype.skipVarint=function(){for(;this.bytes_[this.cursor_]&128;)this.cursor_++;this.cursor_++};\njspb.BinaryDecoder.prototype.unskipVarint=function(a){for(;128<a;)this.cursor_--,a>>>=7;this.cursor_--};\njspb.BinaryDecoder.prototype.readUnsignedVarint32=function(){var a=this.bytes_;var b=a[this.cursor_+0];var c=b&127;if(128>b)return this.cursor_+=1,goog.asserts.assert(this.cursor_<=this.end_),c;b=a[this.cursor_+1];c|=(b&127)<<7;if(128>b)return this.cursor_+=2,goog.asserts.assert(this.cursor_<=this.end_),c;b=a[this.cursor_+2];c|=(b&127)<<14;if(128>b)return this.cursor_+=3,goog.asserts.assert(this.cursor_<=this.end_),c;b=a[this.cursor_+3];c|=(b&127)<<21;if(128>b)return this.cursor_+=4,goog.asserts.assert(this.cursor_<=\nthis.end_),c;b=a[this.cursor_+4];c|=(b&15)<<28;if(128>b)return this.cursor_+=5,goog.asserts.assert(this.cursor_<=this.end_),c>>>0;this.cursor_+=5;128<=a[this.cursor_++]&&128<=a[this.cursor_++]&&128<=a[this.cursor_++]&&128<=a[this.cursor_++]&&128<=a[this.cursor_++]&&goog.asserts.assert(!1);goog.asserts.assert(this.cursor_<=this.end_);return c};jspb.BinaryDecoder.prototype.readSignedVarint32=jspb.BinaryDecoder.prototype.readUnsignedVarint32;jspb.BinaryDecoder.prototype.readUnsignedVarint32String=function(){return this.readUnsignedVarint32().toString()};\njspb.BinaryDecoder.prototype.readSignedVarint32String=function(){return this.readSignedVarint32().toString()};jspb.BinaryDecoder.prototype.readZigzagVarint32=function(){var a=this.readUnsignedVarint32();return a>>>1^-(a&1)};jspb.BinaryDecoder.prototype.readUnsignedVarint64=function(){return this.readSplitVarint64(jspb.utils.joinUint64)};jspb.BinaryDecoder.prototype.readUnsignedVarint64String=function(){return this.readSplitVarint64(jspb.utils.joinUnsignedDecimalString)};\njspb.BinaryDecoder.prototype.readSignedVarint64=function(){return this.readSplitVarint64(jspb.utils.joinInt64)};jspb.BinaryDecoder.prototype.readSignedVarint64String=function(){return this.readSplitVarint64(jspb.utils.joinSignedDecimalString)};jspb.BinaryDecoder.prototype.readZigzagVarint64=function(){return this.readSplitVarint64(jspb.utils.joinZigzag64)};jspb.BinaryDecoder.prototype.readZigzagVarintHash64=function(){return this.readSplitZigzagVarint64(jspb.utils.joinHash64)};\njspb.BinaryDecoder.prototype.readZigzagVarint64String=function(){return this.readSplitZigzagVarint64(jspb.utils.joinSignedDecimalString)};jspb.BinaryDecoder.prototype.readUint8=function(){var a=this.bytes_[this.cursor_+0];this.cursor_+=1;goog.asserts.assert(this.cursor_<=this.end_);return a};jspb.BinaryDecoder.prototype.readUint16=function(){var a=this.bytes_[this.cursor_+0],b=this.bytes_[this.cursor_+1];this.cursor_+=2;goog.asserts.assert(this.cursor_<=this.end_);return a<<0|b<<8};\njspb.BinaryDecoder.prototype.readUint32=function(){var a=this.bytes_[this.cursor_+0],b=this.bytes_[this.cursor_+1],c=this.bytes_[this.cursor_+2],d=this.bytes_[this.cursor_+3];this.cursor_+=4;goog.asserts.assert(this.cursor_<=this.end_);return(a<<0|b<<8|c<<16|d<<24)>>>0};jspb.BinaryDecoder.prototype.readUint64=function(){var a=this.readUint32(),b=this.readUint32();return jspb.utils.joinUint64(a,b)};\njspb.BinaryDecoder.prototype.readUint64String=function(){var a=this.readUint32(),b=this.readUint32();return jspb.utils.joinUnsignedDecimalString(a,b)};jspb.BinaryDecoder.prototype.readInt8=function(){var a=this.bytes_[this.cursor_+0];this.cursor_+=1;goog.asserts.assert(this.cursor_<=this.end_);return a<<24>>24};\njspb.BinaryDecoder.prototype.readInt16=function(){var a=this.bytes_[this.cursor_+0],b=this.bytes_[this.cursor_+1];this.cursor_+=2;goog.asserts.assert(this.cursor_<=this.end_);return(a<<0|b<<8)<<16>>16};jspb.BinaryDecoder.prototype.readInt32=function(){var a=this.bytes_[this.cursor_+0],b=this.bytes_[this.cursor_+1],c=this.bytes_[this.cursor_+2],d=this.bytes_[this.cursor_+3];this.cursor_+=4;goog.asserts.assert(this.cursor_<=this.end_);return a<<0|b<<8|c<<16|d<<24};\njspb.BinaryDecoder.prototype.readInt64=function(){var a=this.readUint32(),b=this.readUint32();return jspb.utils.joinInt64(a,b)};jspb.BinaryDecoder.prototype.readInt64String=function(){var a=this.readUint32(),b=this.readUint32();return jspb.utils.joinSignedDecimalString(a,b)};jspb.BinaryDecoder.prototype.readFloat=function(){var a=this.readUint32();return jspb.utils.joinFloat32(a,0)};\njspb.BinaryDecoder.prototype.readDouble=function(){var a=this.readUint32(),b=this.readUint32();return jspb.utils.joinFloat64(a,b)};jspb.BinaryDecoder.prototype.readBool=function(){return!!this.bytes_[this.cursor_++]};jspb.BinaryDecoder.prototype.readEnum=function(){return this.readSignedVarint32()};\njspb.BinaryDecoder.prototype.readString=function(a){var b=this.bytes_,c=this.cursor_;a=c+a;for(var d=[],e=\"\";c<a;){var f=b[c++];if(128>f)d.push(f);else if(192>f)continue;else if(224>f){var g=b[c++];d.push((f&31)<<6|g&63)}else if(240>f){g=b[c++];var h=b[c++];d.push((f&15)<<12|(g&63)<<6|h&63)}else if(248>f){g=b[c++];h=b[c++];var k=b[c++];f=(f&7)<<18|(g&63)<<12|(h&63)<<6|k&63;f-=65536;d.push((f>>10&1023)+55296,(f&1023)+56320)}8192<=d.length&&(e+=String.fromCharCode.apply(null,d),d.length=0)}e+=goog.crypt.byteArrayToString(d);\nthis.cursor_=c;return e};jspb.BinaryDecoder.prototype.readStringWithLength=function(){var a=this.readUnsignedVarint32();return this.readString(a)};jspb.BinaryDecoder.prototype.readBytes=function(a){if(0>a||this.cursor_+a>this.bytes_.length)return this.error_=!0,goog.asserts.fail(\"Invalid byte length!\"),new Uint8Array(0);var b=this.bytes_.subarray(this.cursor_,this.cursor_+a);this.cursor_+=a;goog.asserts.assert(this.cursor_<=this.end_);return b};jspb.BinaryDecoder.prototype.readVarintHash64=function(){return this.readSplitVarint64(jspb.utils.joinHash64)};\njspb.BinaryDecoder.prototype.readFixedHash64=function(){var a=this.bytes_,b=this.cursor_,c=a[b+0],d=a[b+1],e=a[b+2],f=a[b+3],g=a[b+4],h=a[b+5],k=a[b+6];a=a[b+7];this.cursor_+=8;return String.fromCharCode(c,d,e,f,g,h,k,a)};jspb.BinaryReader=function(a,b,c){this.decoder_=jspb.BinaryDecoder.alloc(a,b,c);this.fieldCursor_=this.decoder_.getCursor();this.nextField_=jspb.BinaryConstants.INVALID_FIELD_NUMBER;this.nextWireType_=jspb.BinaryConstants.WireType.INVALID;this.error_=!1;this.readCallbacks_=null};jspb.BinaryReader.instanceCache_=[];\njspb.BinaryReader.alloc=function(a,b,c){if(jspb.BinaryReader.instanceCache_.length){var d=jspb.BinaryReader.instanceCache_.pop();a&&d.decoder_.setBlock(a,b,c);return d}return new jspb.BinaryReader(a,b,c)};jspb.BinaryReader.prototype.alloc=jspb.BinaryReader.alloc;\njspb.BinaryReader.prototype.free=function(){this.decoder_.clear();this.nextField_=jspb.BinaryConstants.INVALID_FIELD_NUMBER;this.nextWireType_=jspb.BinaryConstants.WireType.INVALID;this.error_=!1;this.readCallbacks_=null;100>jspb.BinaryReader.instanceCache_.length&&jspb.BinaryReader.instanceCache_.push(this)};jspb.BinaryReader.prototype.getFieldCursor=function(){return this.fieldCursor_};jspb.BinaryReader.prototype.getCursor=function(){return this.decoder_.getCursor()};\njspb.BinaryReader.prototype.getBuffer=function(){return this.decoder_.getBuffer()};jspb.BinaryReader.prototype.getFieldNumber=function(){return this.nextField_};jspb.BinaryReader.prototype.getWireType=function(){return this.nextWireType_};jspb.BinaryReader.prototype.isEndGroup=function(){return this.nextWireType_==jspb.BinaryConstants.WireType.END_GROUP};jspb.BinaryReader.prototype.getError=function(){return this.error_||this.decoder_.getError()};\njspb.BinaryReader.prototype.setBlock=function(a,b,c){this.decoder_.setBlock(a,b,c);this.nextField_=jspb.BinaryConstants.INVALID_FIELD_NUMBER;this.nextWireType_=jspb.BinaryConstants.WireType.INVALID};jspb.BinaryReader.prototype.reset=function(){this.decoder_.reset();this.nextField_=jspb.BinaryConstants.INVALID_FIELD_NUMBER;this.nextWireType_=jspb.BinaryConstants.WireType.INVALID};jspb.BinaryReader.prototype.advance=function(a){this.decoder_.advance(a)};\njspb.BinaryReader.prototype.nextField=function(){if(this.decoder_.atEnd())return!1;if(this.getError())return goog.asserts.fail(\"Decoder hit an error\"),!1;this.fieldCursor_=this.decoder_.getCursor();var a=this.decoder_.readUnsignedVarint32(),b=a>>>3;a&=7;if(a!=jspb.BinaryConstants.WireType.VARINT&&a!=jspb.BinaryConstants.WireType.FIXED32&&a!=jspb.BinaryConstants.WireType.FIXED64&&a!=jspb.BinaryConstants.WireType.DELIMITED&&a!=jspb.BinaryConstants.WireType.START_GROUP&&a!=jspb.BinaryConstants.WireType.END_GROUP)return goog.asserts.fail(\"Invalid wire type: %s (at position %s)\",\na,this.fieldCursor_),this.error_=!0,!1;this.nextField_=b;this.nextWireType_=a;return!0};jspb.BinaryReader.prototype.unskipHeader=function(){this.decoder_.unskipVarint(this.nextField_<<3|this.nextWireType_)};jspb.BinaryReader.prototype.skipMatchingFields=function(){var a=this.nextField_;for(this.unskipHeader();this.nextField()&&this.getFieldNumber()==a;)this.skipField();this.decoder_.atEnd()||this.unskipHeader()};\njspb.BinaryReader.prototype.skipVarintField=function(){this.nextWireType_!=jspb.BinaryConstants.WireType.VARINT?(goog.asserts.fail(\"Invalid wire type for skipVarintField\"),this.skipField()):this.decoder_.skipVarint()};jspb.BinaryReader.prototype.skipDelimitedField=function(){if(this.nextWireType_!=jspb.BinaryConstants.WireType.DELIMITED)goog.asserts.fail(\"Invalid wire type for skipDelimitedField\"),this.skipField();else{var a=this.decoder_.readUnsignedVarint32();this.decoder_.advance(a)}};\njspb.BinaryReader.prototype.skipFixed32Field=function(){this.nextWireType_!=jspb.BinaryConstants.WireType.FIXED32?(goog.asserts.fail(\"Invalid wire type for skipFixed32Field\"),this.skipField()):this.decoder_.advance(4)};jspb.BinaryReader.prototype.skipFixed64Field=function(){this.nextWireType_!=jspb.BinaryConstants.WireType.FIXED64?(goog.asserts.fail(\"Invalid wire type for skipFixed64Field\"),this.skipField()):this.decoder_.advance(8)};\njspb.BinaryReader.prototype.skipGroup=function(){var a=this.nextField_;do{if(!this.nextField()){goog.asserts.fail(\"Unmatched start-group tag: stream EOF\");this.error_=!0;break}if(this.nextWireType_==jspb.BinaryConstants.WireType.END_GROUP){this.nextField_!=a&&(goog.asserts.fail(\"Unmatched end-group tag\"),this.error_=!0);break}this.skipField()}while(1)};\njspb.BinaryReader.prototype.skipField=function(){switch(this.nextWireType_){case jspb.BinaryConstants.WireType.VARINT:this.skipVarintField();break;case jspb.BinaryConstants.WireType.FIXED64:this.skipFixed64Field();break;case jspb.BinaryConstants.WireType.DELIMITED:this.skipDelimitedField();break;case jspb.BinaryConstants.WireType.FIXED32:this.skipFixed32Field();break;case jspb.BinaryConstants.WireType.START_GROUP:this.skipGroup();break;default:goog.asserts.fail(\"Invalid wire encoding for field.\")}};\njspb.BinaryReader.prototype.registerReadCallback=function(a,b){null===this.readCallbacks_&&(this.readCallbacks_={});goog.asserts.assert(!this.readCallbacks_[a]);this.readCallbacks_[a]=b};jspb.BinaryReader.prototype.runReadCallback=function(a){goog.asserts.assert(null!==this.readCallbacks_);a=this.readCallbacks_[a];goog.asserts.assert(a);return a(this)};\njspb.BinaryReader.prototype.readAny=function(a){this.nextWireType_=jspb.BinaryConstants.FieldTypeToWireType(a);var b=jspb.BinaryConstants.FieldType;switch(a){case b.DOUBLE:return this.readDouble();case b.FLOAT:return this.readFloat();case b.INT64:return this.readInt64();case b.UINT64:return this.readUint64();case b.INT32:return this.readInt32();case b.FIXED64:return this.readFixed64();case b.FIXED32:return this.readFixed32();case b.BOOL:return this.readBool();case b.STRING:return this.readString();\ncase b.GROUP:goog.asserts.fail(\"Group field type not supported in readAny()\");case b.MESSAGE:goog.asserts.fail(\"Message field type not supported in readAny()\");case b.BYTES:return this.readBytes();case b.UINT32:return this.readUint32();case b.ENUM:return this.readEnum();case b.SFIXED32:return this.readSfixed32();case b.SFIXED64:return this.readSfixed64();case b.SINT32:return this.readSint32();case b.SINT64:return this.readSint64();case b.FHASH64:return this.readFixedHash64();case b.VHASH64:return this.readVarintHash64();\ndefault:goog.asserts.fail(\"Invalid field type in readAny()\")}return 0};jspb.BinaryReader.prototype.readMessage=function(a,b){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var c=this.decoder_.getEnd(),d=this.decoder_.readUnsignedVarint32();d=this.decoder_.getCursor()+d;this.decoder_.setEnd(d);b(a,this);this.decoder_.setCursor(d);this.decoder_.setEnd(c)};\njspb.BinaryReader.prototype.readGroup=function(a,b,c){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.START_GROUP);goog.asserts.assert(this.nextField_==a);c(b,this);this.error_||this.nextWireType_==jspb.BinaryConstants.WireType.END_GROUP||(goog.asserts.fail(\"Group submessage did not end with an END_GROUP tag\"),this.error_=!0)};\njspb.BinaryReader.prototype.getFieldDecoder=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var a=this.decoder_.readUnsignedVarint32(),b=this.decoder_.getCursor(),c=b+a;a=jspb.BinaryDecoder.alloc(this.decoder_.getBuffer(),b,a);this.decoder_.setCursor(c);return a};jspb.BinaryReader.prototype.readInt32=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readSignedVarint32()};\njspb.BinaryReader.prototype.readInt32String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readSignedVarint32String()};jspb.BinaryReader.prototype.readInt64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readSignedVarint64()};jspb.BinaryReader.prototype.readInt64String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readSignedVarint64String()};\njspb.BinaryReader.prototype.readUint32=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readUnsignedVarint32()};jspb.BinaryReader.prototype.readUint32String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readUnsignedVarint32String()};jspb.BinaryReader.prototype.readUint64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readUnsignedVarint64()};\njspb.BinaryReader.prototype.readUint64String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readUnsignedVarint64String()};jspb.BinaryReader.prototype.readSint32=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readZigzagVarint32()};jspb.BinaryReader.prototype.readSint64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readZigzagVarint64()};\njspb.BinaryReader.prototype.readSint64String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readZigzagVarint64String()};jspb.BinaryReader.prototype.readFixed32=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED32);return this.decoder_.readUint32()};jspb.BinaryReader.prototype.readFixed64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64);return this.decoder_.readUint64()};\njspb.BinaryReader.prototype.readFixed64String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64);return this.decoder_.readUint64String()};jspb.BinaryReader.prototype.readSfixed32=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED32);return this.decoder_.readInt32()};jspb.BinaryReader.prototype.readSfixed32String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED32);return this.decoder_.readInt32().toString()};\njspb.BinaryReader.prototype.readSfixed64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64);return this.decoder_.readInt64()};jspb.BinaryReader.prototype.readSfixed64String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64);return this.decoder_.readInt64String()};jspb.BinaryReader.prototype.readFloat=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED32);return this.decoder_.readFloat()};\njspb.BinaryReader.prototype.readDouble=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64);return this.decoder_.readDouble()};jspb.BinaryReader.prototype.readBool=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return!!this.decoder_.readUnsignedVarint32()};jspb.BinaryReader.prototype.readEnum=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readSignedVarint64()};\njspb.BinaryReader.prototype.readString=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var a=this.decoder_.readUnsignedVarint32();return this.decoder_.readString(a)};jspb.BinaryReader.prototype.readBytes=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var a=this.decoder_.readUnsignedVarint32();return this.decoder_.readBytes(a)};\njspb.BinaryReader.prototype.readVarintHash64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readVarintHash64()};jspb.BinaryReader.prototype.readSintHash64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readZigzagVarintHash64()};jspb.BinaryReader.prototype.readSplitVarint64=function(a){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readSplitVarint64(a)};\njspb.BinaryReader.prototype.readSplitZigzagVarint64=function(a){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readSplitVarint64(function(b,c){return jspb.utils.fromZigzag64(b,c,a)})};jspb.BinaryReader.prototype.readFixedHash64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64);return this.decoder_.readFixedHash64()};\njspb.BinaryReader.prototype.readSplitFixed64=function(a){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64);return this.decoder_.readSplitFixed64(a)};jspb.BinaryReader.prototype.readPackedField_=function(a){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var b=this.decoder_.readUnsignedVarint32();b=this.decoder_.getCursor()+b;for(var c=[];this.decoder_.getCursor()<b;)c.push(a.call(this.decoder_));return c};\njspb.BinaryReader.prototype.readPackedInt32=function(){return this.readPackedField_(this.decoder_.readSignedVarint32)};jspb.BinaryReader.prototype.readPackedInt32String=function(){return this.readPackedField_(this.decoder_.readSignedVarint32String)};jspb.BinaryReader.prototype.readPackedInt64=function(){return this.readPackedField_(this.decoder_.readSignedVarint64)};jspb.BinaryReader.prototype.readPackedInt64String=function(){return this.readPackedField_(this.decoder_.readSignedVarint64String)};\njspb.BinaryReader.prototype.readPackedUint32=function(){return this.readPackedField_(this.decoder_.readUnsignedVarint32)};jspb.BinaryReader.prototype.readPackedUint32String=function(){return this.readPackedField_(this.decoder_.readUnsignedVarint32String)};jspb.BinaryReader.prototype.readPackedUint64=function(){return this.readPackedField_(this.decoder_.readUnsignedVarint64)};jspb.BinaryReader.prototype.readPackedUint64String=function(){return this.readPackedField_(this.decoder_.readUnsignedVarint64String)};\njspb.BinaryReader.prototype.readPackedSint32=function(){return this.readPackedField_(this.decoder_.readZigzagVarint32)};jspb.BinaryReader.prototype.readPackedSint64=function(){return this.readPackedField_(this.decoder_.readZigzagVarint64)};jspb.BinaryReader.prototype.readPackedSint64String=function(){return this.readPackedField_(this.decoder_.readZigzagVarint64String)};jspb.BinaryReader.prototype.readPackedFixed32=function(){return this.readPackedField_(this.decoder_.readUint32)};\njspb.BinaryReader.prototype.readPackedFixed64=function(){return this.readPackedField_(this.decoder_.readUint64)};jspb.BinaryReader.prototype.readPackedFixed64String=function(){return this.readPackedField_(this.decoder_.readUint64String)};jspb.BinaryReader.prototype.readPackedSfixed32=function(){return this.readPackedField_(this.decoder_.readInt32)};jspb.BinaryReader.prototype.readPackedSfixed64=function(){return this.readPackedField_(this.decoder_.readInt64)};\njspb.BinaryReader.prototype.readPackedSfixed64String=function(){return this.readPackedField_(this.decoder_.readInt64String)};jspb.BinaryReader.prototype.readPackedFloat=function(){return this.readPackedField_(this.decoder_.readFloat)};jspb.BinaryReader.prototype.readPackedDouble=function(){return this.readPackedField_(this.decoder_.readDouble)};jspb.BinaryReader.prototype.readPackedBool=function(){return this.readPackedField_(this.decoder_.readBool)};jspb.BinaryReader.prototype.readPackedEnum=function(){return this.readPackedField_(this.decoder_.readEnum)};\njspb.BinaryReader.prototype.readPackedVarintHash64=function(){return this.readPackedField_(this.decoder_.readVarintHash64)};jspb.BinaryReader.prototype.readPackedFixedHash64=function(){return this.readPackedField_(this.decoder_.readFixedHash64)};jspb.Map=function(a,b){this.arr_=a;this.valueCtor_=b;this.map_={};this.arrClean=!0;0<this.arr_.length&&this.loadFromArray_()};jspb.Map.prototype.loadFromArray_=function(){for(var a=0;a<this.arr_.length;a++){var b=this.arr_[a],c=b[0];this.map_[c.toString()]=new jspb.Map.Entry_(c,b[1])}this.arrClean=!0};\njspb.Map.prototype.toArray=function(){if(this.arrClean){if(this.valueCtor_){var a=this.map_,b;for(b in a)if(Object.prototype.hasOwnProperty.call(a,b)){var c=a[b].valueWrapper;c&&c.toArray()}}}else{this.arr_.length=0;a=this.stringKeys_();a.sort();for(b=0;b<a.length;b++){var d=this.map_[a[b]];(c=d.valueWrapper)&&c.toArray();this.arr_.push([d.key,d.value])}this.arrClean=!0}return this.arr_};\njspb.Map.prototype.toObject=function(a,b){for(var c=this.toArray(),d=[],e=0;e<c.length;e++){var f=this.map_[c[e][0].toString()];this.wrapEntry_(f);var g=f.valueWrapper;g?(goog.asserts.assert(b),d.push([f.key,b(a,g)])):d.push([f.key,f.value])}return d};jspb.Map.fromObject=function(a,b,c){b=new jspb.Map([],b);for(var d=0;d<a.length;d++){var e=a[d][0],f=c(a[d][1]);b.set(e,f)}return b};jspb.Map.ArrayIteratorIterable_=function(a){this.idx_=0;this.arr_=a};\njspb.Map.ArrayIteratorIterable_.prototype.next=function(){return this.idx_<this.arr_.length?{done:!1,value:this.arr_[this.idx_++]}:{done:!0,value:void 0}};\"undefined\"!=typeof Symbol&&(jspb.Map.ArrayIteratorIterable_.prototype[Symbol.iterator]=function(){return this});jspb.Map.prototype.getLength=function(){return this.stringKeys_().length};jspb.Map.prototype.clear=function(){this.map_={};this.arrClean=!1};\njspb.Map.prototype.del=function(a){a=a.toString();var b=this.map_.hasOwnProperty(a);delete this.map_[a];this.arrClean=!1;return b};jspb.Map.prototype.getEntryList=function(){var a=[],b=this.stringKeys_();b.sort();for(var c=0;c<b.length;c++){var d=this.map_[b[c]];a.push([d.key,d.value])}return a};jspb.Map.prototype.entries=function(){var a=[],b=this.stringKeys_();b.sort();for(var c=0;c<b.length;c++){var d=this.map_[b[c]];a.push([d.key,this.wrapEntry_(d)])}return new jspb.Map.ArrayIteratorIterable_(a)};\njspb.Map.prototype.keys=function(){var a=[],b=this.stringKeys_();b.sort();for(var c=0;c<b.length;c++)a.push(this.map_[b[c]].key);return new jspb.Map.ArrayIteratorIterable_(a)};jspb.Map.prototype.values=function(){var a=[],b=this.stringKeys_();b.sort();for(var c=0;c<b.length;c++)a.push(this.wrapEntry_(this.map_[b[c]]));return new jspb.Map.ArrayIteratorIterable_(a)};\njspb.Map.prototype.forEach=function(a,b){var c=this.stringKeys_();c.sort();for(var d=0;d<c.length;d++){var e=this.map_[c[d]];a.call(b,this.wrapEntry_(e),e.key,this)}};jspb.Map.prototype.set=function(a,b){var c=new jspb.Map.Entry_(a);this.valueCtor_?(c.valueWrapper=b,c.value=b.toArray()):c.value=b;this.map_[a.toString()]=c;this.arrClean=!1;return this};jspb.Map.prototype.wrapEntry_=function(a){return this.valueCtor_?(a.valueWrapper||(a.valueWrapper=new this.valueCtor_(a.value)),a.valueWrapper):a.value};\njspb.Map.prototype.get=function(a){if(a=this.map_[a.toString()])return this.wrapEntry_(a)};jspb.Map.prototype.has=function(a){return a.toString()in this.map_};jspb.Map.prototype.serializeBinary=function(a,b,c,d,e){var f=this.stringKeys_();f.sort();for(var g=0;g<f.length;g++){var h=this.map_[f[g]];b.beginSubMessage(a);c.call(b,1,h.key);this.valueCtor_?d.call(b,2,this.wrapEntry_(h),e):d.call(b,2,h.value);b.endSubMessage()}};\njspb.Map.deserializeBinary=function(a,b,c,d,e,f,g){for(;b.nextField()&&!b.isEndGroup();){var h=b.getFieldNumber();1==h?f=c.call(b):2==h&&(a.valueCtor_?(goog.asserts.assert(e),g||(g=new a.valueCtor_),d.call(b,g,e)):g=d.call(b))}goog.asserts.assert(void 0!=f);goog.asserts.assert(void 0!=g);a.set(f,g)};jspb.Map.prototype.stringKeys_=function(){var a=this.map_,b=[],c;for(c in a)Object.prototype.hasOwnProperty.call(a,c)&&b.push(c);return b};\njspb.Map.Entry_=function(a,b){this.key=a;this.value=b;this.valueWrapper=void 0};jspb.ExtensionFieldInfo=function(a,b,c,d,e){this.fieldIndex=a;this.fieldName=b;this.ctor=c;this.toObjectFn=d;this.isRepeated=e};jspb.ExtensionFieldBinaryInfo=function(a,b,c,d,e,f){this.fieldInfo=a;this.binaryReaderFn=b;this.binaryWriterFn=c;this.binaryMessageSerializeFn=d;this.binaryMessageDeserializeFn=e;this.isPacked=f};jspb.ExtensionFieldInfo.prototype.isMessageType=function(){return!!this.ctor};jspb.Message=function(){};jspb.Message.GENERATE_TO_OBJECT=!0;jspb.Message.GENERATE_FROM_OBJECT=!goog.DISALLOW_TEST_ONLY_CODE;\njspb.Message.GENERATE_TO_STRING=!0;jspb.Message.ASSUME_LOCAL_ARRAYS=!1;jspb.Message.SERIALIZE_EMPTY_TRAILING_FIELDS=!0;jspb.Message.SUPPORTS_UINT8ARRAY_=\"function\"==typeof Uint8Array;jspb.Message.prototype.getJsPbMessageId=function(){return this.messageId_};jspb.Message.getIndex_=function(a,b){return b+a.arrayIndexOffset_};jspb.Message.hiddenES6Property_=function(){};jspb.Message.getFieldNumber_=function(a,b){return b-a.arrayIndexOffset_};\njspb.Message.initialize=function(a,b,c,d,e,f){a.wrappers_=null;b||(b=c?[c]:[]);a.messageId_=c?String(c):void 0;a.arrayIndexOffset_=0===c?-1:0;a.array=b;jspb.Message.initPivotAndExtensionObject_(a,d);a.convertedPrimitiveFields_={};jspb.Message.SERIALIZE_EMPTY_TRAILING_FIELDS||(a.repeatedFields=e);if(e)for(b=0;b<e.length;b++)c=e[b],c<a.pivot_?(c=jspb.Message.getIndex_(a,c),a.array[c]=a.array[c]||jspb.Message.EMPTY_LIST_SENTINEL_):(jspb.Message.maybeInitEmptyExtensionObject_(a),a.extensionObject_[c]=\na.extensionObject_[c]||jspb.Message.EMPTY_LIST_SENTINEL_);if(f&&f.length)for(b=0;b<f.length;b++)jspb.Message.computeOneofCase(a,f[b])};jspb.Message.EMPTY_LIST_SENTINEL_=goog.DEBUG&&Object.freeze?Object.freeze([]):[];jspb.Message.isArray_=function(a){return jspb.Message.ASSUME_LOCAL_ARRAYS?a instanceof Array:goog.isArray(a)};jspb.Message.isExtensionObject_=function(a){return null!==a&&\"object\"==typeof a&&!jspb.Message.isArray_(a)&&!(jspb.Message.SUPPORTS_UINT8ARRAY_&&a instanceof Uint8Array)};\njspb.Message.initPivotAndExtensionObject_=function(a,b){var c=a.array.length,d=-1;if(c&&(d=c-1,c=a.array[d],jspb.Message.isExtensionObject_(c))){a.pivot_=jspb.Message.getFieldNumber_(a,d);a.extensionObject_=c;return}-1<b?(a.pivot_=Math.max(b,jspb.Message.getFieldNumber_(a,d+1)),a.extensionObject_=null):a.pivot_=Number.MAX_VALUE};jspb.Message.maybeInitEmptyExtensionObject_=function(a){var b=jspb.Message.getIndex_(a,a.pivot_);a.array[b]||(a.extensionObject_=a.array[b]={})};\njspb.Message.toObjectList=function(a,b,c){for(var d=[],e=0;e<a.length;e++)d[e]=b.call(a[e],c,a[e]);return d};jspb.Message.toObjectExtension=function(a,b,c,d,e){for(var f in c){var g=c[f],h=d.call(a,g);if(null!=h){for(var k in g.fieldName)if(g.fieldName.hasOwnProperty(k))break;b[k]=g.toObjectFn?g.isRepeated?jspb.Message.toObjectList(h,g.toObjectFn,e):g.toObjectFn(e,h):h}}};\njspb.Message.serializeBinaryExtensions=function(a,b,c,d){for(var e in c){var f=c[e],g=f.fieldInfo;if(!f.binaryWriterFn)throw Error(\"Message extension present that was generated without binary serialization support\");var h=d.call(a,g);if(null!=h)if(g.isMessageType())if(f.binaryMessageSerializeFn)f.binaryWriterFn.call(b,g.fieldIndex,h,f.binaryMessageSerializeFn);else throw Error(\"Message extension present holding submessage without binary support enabled, and message is being serialized to binary format\");\nelse f.binaryWriterFn.call(b,g.fieldIndex,h)}};jspb.Message.readBinaryExtension=function(a,b,c,d,e){var f=c[b.getFieldNumber()];if(f){c=f.fieldInfo;if(!f.binaryReaderFn)throw Error(\"Deserializing extension whose generated code does not support binary format\");if(c.isMessageType()){var g=new c.ctor;f.binaryReaderFn.call(b,g,f.binaryMessageDeserializeFn)}else g=f.binaryReaderFn.call(b);c.isRepeated&&!f.isPacked?(b=d.call(a,c))?b.push(g):e.call(a,c,[g]):e.call(a,c,g)}else b.skipField()};\njspb.Message.getField=function(a,b){if(b<a.pivot_){b=jspb.Message.getIndex_(a,b);var c=a.array[b];return c===jspb.Message.EMPTY_LIST_SENTINEL_?a.array[b]=[]:c}if(a.extensionObject_)return c=a.extensionObject_[b],c===jspb.Message.EMPTY_LIST_SENTINEL_?a.extensionObject_[b]=[]:c};jspb.Message.getRepeatedField=function(a,b){return jspb.Message.getField(a,b)};jspb.Message.getOptionalFloatingPointField=function(a,b){a=jspb.Message.getField(a,b);return null==a?a:+a};\njspb.Message.getBooleanField=function(a,b){a=jspb.Message.getField(a,b);return null==a?a:!!a};jspb.Message.getRepeatedFloatingPointField=function(a,b){var c=jspb.Message.getRepeatedField(a,b);a.convertedPrimitiveFields_||(a.convertedPrimitiveFields_={});if(!a.convertedPrimitiveFields_[b]){for(var d=0;d<c.length;d++)c[d]=+c[d];a.convertedPrimitiveFields_[b]=!0}return c};\njspb.Message.getRepeatedBooleanField=function(a,b){var c=jspb.Message.getRepeatedField(a,b);a.convertedPrimitiveFields_||(a.convertedPrimitiveFields_={});if(!a.convertedPrimitiveFields_[b]){for(var d=0;d<c.length;d++)c[d]=!!c[d];a.convertedPrimitiveFields_[b]=!0}return c};\njspb.Message.bytesAsB64=function(a){if(null==a||\"string\"===typeof a)return a;if(jspb.Message.SUPPORTS_UINT8ARRAY_&&a instanceof Uint8Array)return goog.crypt.base64.encodeByteArray(a);goog.asserts.fail(\"Cannot coerce to b64 string: \"+goog.typeOf(a));return null};jspb.Message.bytesAsU8=function(a){if(null==a||a instanceof Uint8Array)return a;if(\"string\"===typeof a)return goog.crypt.base64.decodeStringToUint8Array(a);goog.asserts.fail(\"Cannot coerce to Uint8Array: \"+goog.typeOf(a));return null};\njspb.Message.bytesListAsB64=function(a){jspb.Message.assertConsistentTypes_(a);return a.length&&\"string\"!==typeof a[0]?goog.array.map(a,jspb.Message.bytesAsB64):a};jspb.Message.bytesListAsU8=function(a){jspb.Message.assertConsistentTypes_(a);return!a.length||a[0]instanceof Uint8Array?a:goog.array.map(a,jspb.Message.bytesAsU8)};\njspb.Message.assertConsistentTypes_=function(a){if(goog.DEBUG&&a&&1<a.length){var b=goog.typeOf(a[0]);goog.array.forEach(a,function(a){goog.typeOf(a)!=b&&goog.asserts.fail(\"Inconsistent type in JSPB repeated field array. Got \"+goog.typeOf(a)+\" expected \"+b)})}};jspb.Message.getFieldWithDefault=function(a,b,c){a=jspb.Message.getField(a,b);return null==a?c:a};jspb.Message.getBooleanFieldWithDefault=function(a,b,c){a=jspb.Message.getBooleanField(a,b);return null==a?c:a};\njspb.Message.getFloatingPointFieldWithDefault=function(a,b,c){a=jspb.Message.getOptionalFloatingPointField(a,b);return null==a?c:a};jspb.Message.getFieldProto3=jspb.Message.getFieldWithDefault;jspb.Message.getMapField=function(a,b,c,d){a.wrappers_||(a.wrappers_={});if(b in a.wrappers_)return a.wrappers_[b];var e=jspb.Message.getField(a,b);if(!e){if(c)return;e=[];jspb.Message.setField(a,b,e)}return a.wrappers_[b]=new jspb.Map(e,d)};\njspb.Message.setField=function(a,b,c){goog.asserts.assertInstanceof(a,jspb.Message);b<a.pivot_?a.array[jspb.Message.getIndex_(a,b)]=c:(jspb.Message.maybeInitEmptyExtensionObject_(a),a.extensionObject_[b]=c);return a};jspb.Message.setProto3IntField=function(a,b,c){return jspb.Message.setFieldIgnoringDefault_(a,b,c,0)};jspb.Message.setProto3FloatField=function(a,b,c){return jspb.Message.setFieldIgnoringDefault_(a,b,c,0)};\njspb.Message.setProto3BooleanField=function(a,b,c){return jspb.Message.setFieldIgnoringDefault_(a,b,c,!1)};jspb.Message.setProto3StringField=function(a,b,c){return jspb.Message.setFieldIgnoringDefault_(a,b,c,\"\")};jspb.Message.setProto3BytesField=function(a,b,c){return jspb.Message.setFieldIgnoringDefault_(a,b,c,\"\")};jspb.Message.setProto3EnumField=function(a,b,c){return jspb.Message.setFieldIgnoringDefault_(a,b,c,0)};\njspb.Message.setProto3StringIntField=function(a,b,c){return jspb.Message.setFieldIgnoringDefault_(a,b,c,\"0\")};jspb.Message.setFieldIgnoringDefault_=function(a,b,c,d){goog.asserts.assertInstanceof(a,jspb.Message);c!==d?jspb.Message.setField(a,b,c):b<a.pivot_?a.array[jspb.Message.getIndex_(a,b)]=null:(jspb.Message.maybeInitEmptyExtensionObject_(a),delete a.extensionObject_[b]);return a};\njspb.Message.addToRepeatedField=function(a,b,c,d){goog.asserts.assertInstanceof(a,jspb.Message);b=jspb.Message.getRepeatedField(a,b);void 0!=d?b.splice(d,0,c):b.push(c);return a};jspb.Message.setOneofField=function(a,b,c,d){goog.asserts.assertInstanceof(a,jspb.Message);(c=jspb.Message.computeOneofCase(a,c))&&c!==b&&void 0!==d&&(a.wrappers_&&c in a.wrappers_&&(a.wrappers_[c]=void 0),jspb.Message.setField(a,c,void 0));return jspb.Message.setField(a,b,d)};\njspb.Message.computeOneofCase=function(a,b){for(var c,d,e=0;e<b.length;e++){var f=b[e],g=jspb.Message.getField(a,f);null!=g&&(c=f,d=g,jspb.Message.setField(a,f,void 0))}return c?(jspb.Message.setField(a,c,d),c):0};jspb.Message.getWrapperField=function(a,b,c,d){a.wrappers_||(a.wrappers_={});if(!a.wrappers_[c]){var e=jspb.Message.getField(a,c);if(d||e)a.wrappers_[c]=new b(e)}return a.wrappers_[c]};\njspb.Message.getRepeatedWrapperField=function(a,b,c){jspb.Message.wrapRepeatedField_(a,b,c);b=a.wrappers_[c];b==jspb.Message.EMPTY_LIST_SENTINEL_&&(b=a.wrappers_[c]=[]);return b};jspb.Message.wrapRepeatedField_=function(a,b,c){a.wrappers_||(a.wrappers_={});if(!a.wrappers_[c]){for(var d=jspb.Message.getRepeatedField(a,c),e=[],f=0;f<d.length;f++)e[f]=new b(d[f]);a.wrappers_[c]=e}};\njspb.Message.setWrapperField=function(a,b,c){goog.asserts.assertInstanceof(a,jspb.Message);a.wrappers_||(a.wrappers_={});var d=c?c.toArray():c;a.wrappers_[b]=c;return jspb.Message.setField(a,b,d)};jspb.Message.setOneofWrapperField=function(a,b,c,d){goog.asserts.assertInstanceof(a,jspb.Message);a.wrappers_||(a.wrappers_={});var e=d?d.toArray():d;a.wrappers_[b]=d;return jspb.Message.setOneofField(a,b,c,e)};\njspb.Message.setRepeatedWrapperField=function(a,b,c){goog.asserts.assertInstanceof(a,jspb.Message);a.wrappers_||(a.wrappers_={});c=c||[];for(var d=[],e=0;e<c.length;e++)d[e]=c[e].toArray();a.wrappers_[b]=c;return jspb.Message.setField(a,b,d)};\njspb.Message.addToRepeatedWrapperField=function(a,b,c,d,e){jspb.Message.wrapRepeatedField_(a,d,b);var f=a.wrappers_[b];f||(f=a.wrappers_[b]=[]);c=c?c:new d;a=jspb.Message.getRepeatedField(a,b);void 0!=e?(f.splice(e,0,c),a.splice(e,0,c.toArray())):(f.push(c),a.push(c.toArray()));return c};jspb.Message.toMap=function(a,b,c,d){for(var e={},f=0;f<a.length;f++)e[b.call(a[f])]=c?c.call(a[f],d,a[f]):a[f];return e};\njspb.Message.prototype.syncMapFields_=function(){if(this.wrappers_)for(var a in this.wrappers_){var b=this.wrappers_[a];if(goog.isArray(b))for(var c=0;c<b.length;c++)b[c]&&b[c].toArray();else b&&b.toArray()}};jspb.Message.prototype.toArray=function(){this.syncMapFields_();return this.array};jspb.Message.GENERATE_TO_STRING&&(jspb.Message.prototype.toString=function(){this.syncMapFields_();return this.array.toString()});\njspb.Message.prototype.getExtension=function(a){if(this.extensionObject_){this.wrappers_||(this.wrappers_={});var b=a.fieldIndex;if(a.isRepeated){if(a.isMessageType())return this.wrappers_[b]||(this.wrappers_[b]=goog.array.map(this.extensionObject_[b]||[],function(b){return new a.ctor(b)})),this.wrappers_[b]}else if(a.isMessageType())return!this.wrappers_[b]&&this.extensionObject_[b]&&(this.wrappers_[b]=new a.ctor(this.extensionObject_[b])),this.wrappers_[b];return this.extensionObject_[b]}};\njspb.Message.prototype.setExtension=function(a,b){this.wrappers_||(this.wrappers_={});jspb.Message.maybeInitEmptyExtensionObject_(this);var c=a.fieldIndex;a.isRepeated?(b=b||[],a.isMessageType()?(this.wrappers_[c]=b,this.extensionObject_[c]=goog.array.map(b,function(a){return a.toArray()})):this.extensionObject_[c]=b):a.isMessageType()?(this.wrappers_[c]=b,this.extensionObject_[c]=b?b.toArray():b):this.extensionObject_[c]=b;return this};\njspb.Message.difference=function(a,b){if(!(a instanceof b.constructor))throw Error(\"Messages have different types.\");var c=a.toArray();b=b.toArray();var d=[],e=0,f=c.length>b.length?c.length:b.length;a.getJsPbMessageId()&&(d[0]=a.getJsPbMessageId(),e=1);for(;e<f;e++)jspb.Message.compareFields(c[e],b[e])||(d[e]=b[e]);return new a.constructor(d)};jspb.Message.equals=function(a,b){return a==b||!(!a||!b)&&a instanceof b.constructor&&jspb.Message.compareFields(a.toArray(),b.toArray())};\njspb.Message.compareExtensions=function(a,b){a=a||{};b=b||{};var c={},d;for(d in a)c[d]=0;for(d in b)c[d]=0;for(d in c)if(!jspb.Message.compareFields(a[d],b[d]))return!1;return!0};\njspb.Message.compareFields=function(a,b){if(a==b)return!0;if(!goog.isObject(a)||!goog.isObject(b))return\"number\"===typeof a&&isNaN(a)||\"number\"===typeof b&&isNaN(b)?String(a)==String(b):!1;if(a.constructor!=b.constructor)return!1;if(jspb.Message.SUPPORTS_UINT8ARRAY_&&a.constructor===Uint8Array){if(a.length!=b.length)return!1;for(var c=0;c<a.length;c++)if(a[c]!=b[c])return!1;return!0}if(a.constructor===Array){var d=void 0,e=void 0,f=Math.max(a.length,b.length);for(c=0;c<f;c++){var g=a[c],h=b[c];g&&\ng.constructor==Object&&(goog.asserts.assert(void 0===d),goog.asserts.assert(c===a.length-1),d=g,g=void 0);h&&h.constructor==Object&&(goog.asserts.assert(void 0===e),goog.asserts.assert(c===b.length-1),e=h,h=void 0);if(!jspb.Message.compareFields(g,h))return!1}return d||e?(d=d||{},e=e||{},jspb.Message.compareExtensions(d,e)):!0}if(a.constructor===Object)return jspb.Message.compareExtensions(a,b);throw Error(\"Invalid type in JSPB array\");};jspb.Message.prototype.cloneMessage=function(){return jspb.Message.cloneMessage(this)};\njspb.Message.prototype.clone=function(){return jspb.Message.cloneMessage(this)};jspb.Message.clone=function(a){return jspb.Message.cloneMessage(a)};jspb.Message.cloneMessage=function(a){return new a.constructor(jspb.Message.clone_(a.toArray()))};\njspb.Message.copyInto=function(a,b){goog.asserts.assertInstanceof(a,jspb.Message);goog.asserts.assertInstanceof(b,jspb.Message);goog.asserts.assert(a.constructor==b.constructor,\"Copy source and target message should have the same type.\");a=jspb.Message.clone(a);for(var c=b.toArray(),d=a.toArray(),e=c.length=0;e<d.length;e++)c[e]=d[e];b.wrappers_=a.wrappers_;b.extensionObject_=a.extensionObject_};\njspb.Message.clone_=function(a){if(goog.isArray(a)){for(var b=Array(a.length),c=0;c<a.length;c++){var d=a[c];null!=d&&(b[c]=\"object\"==typeof d?jspb.Message.clone_(goog.asserts.assert(d)):d)}return b}if(jspb.Message.SUPPORTS_UINT8ARRAY_&&a instanceof Uint8Array)return new Uint8Array(a);b={};for(c in a)d=a[c],null!=d&&(b[c]=\"object\"==typeof d?jspb.Message.clone_(goog.asserts.assert(d)):d);return b};jspb.Message.registerMessageType=function(a,b){b.messageId=a};jspb.Message.messageSetExtensions={};\njspb.Message.messageSetExtensionsBinary={};jspb.arith={};jspb.arith.UInt64=function(a,b){this.lo=a;this.hi=b};jspb.arith.UInt64.prototype.cmp=function(a){return this.hi<a.hi||this.hi==a.hi&&this.lo<a.lo?-1:this.hi==a.hi&&this.lo==a.lo?0:1};jspb.arith.UInt64.prototype.rightShift=function(){return new jspb.arith.UInt64((this.lo>>>1|(this.hi&1)<<31)>>>0,this.hi>>>1>>>0)};jspb.arith.UInt64.prototype.leftShift=function(){return new jspb.arith.UInt64(this.lo<<1>>>0,(this.hi<<1|this.lo>>>31)>>>0)};\njspb.arith.UInt64.prototype.msb=function(){return!!(this.hi&2147483648)};jspb.arith.UInt64.prototype.lsb=function(){return!!(this.lo&1)};jspb.arith.UInt64.prototype.zero=function(){return 0==this.lo&&0==this.hi};jspb.arith.UInt64.prototype.add=function(a){return new jspb.arith.UInt64((this.lo+a.lo&4294967295)>>>0>>>0,((this.hi+a.hi&4294967295)>>>0)+(4294967296<=this.lo+a.lo?1:0)>>>0)};\njspb.arith.UInt64.prototype.sub=function(a){return new jspb.arith.UInt64((this.lo-a.lo&4294967295)>>>0>>>0,((this.hi-a.hi&4294967295)>>>0)-(0>this.lo-a.lo?1:0)>>>0)};jspb.arith.UInt64.mul32x32=function(a,b){var c=a&65535;a>>>=16;var d=b&65535,e=b>>>16;b=c*d+65536*(c*e&65535)+65536*(a*d&65535);for(c=a*e+(c*e>>>16)+(a*d>>>16);4294967296<=b;)b-=4294967296,c+=1;return new jspb.arith.UInt64(b>>>0,c>>>0)};\njspb.arith.UInt64.prototype.mul=function(a){var b=jspb.arith.UInt64.mul32x32(this.lo,a);a=jspb.arith.UInt64.mul32x32(this.hi,a);a.hi=a.lo;a.lo=0;return b.add(a)};\njspb.arith.UInt64.prototype.div=function(a){if(0==a)return[];var b=new jspb.arith.UInt64(0,0),c=new jspb.arith.UInt64(this.lo,this.hi);a=new jspb.arith.UInt64(a,0);for(var d=new jspb.arith.UInt64(1,0);!a.msb();)a=a.leftShift(),d=d.leftShift();for(;!d.zero();)0>=a.cmp(c)&&(b=b.add(d),c=c.sub(a)),a=a.rightShift(),d=d.rightShift();return[b,c]};jspb.arith.UInt64.prototype.toString=function(){for(var a=\"\",b=this;!b.zero();){b=b.div(10);var c=b[0];a=b[1].lo+a;b=c}\"\"==a&&(a=\"0\");return a};\njspb.arith.UInt64.fromString=function(a){for(var b=new jspb.arith.UInt64(0,0),c=new jspb.arith.UInt64(0,0),d=0;d<a.length;d++){if(\"0\">a[d]||\"9\"<a[d])return null;var e=parseInt(a[d],10);c.lo=e;b=b.mul(10).add(c)}return b};jspb.arith.UInt64.prototype.clone=function(){return new jspb.arith.UInt64(this.lo,this.hi)};jspb.arith.Int64=function(a,b){this.lo=a;this.hi=b};\njspb.arith.Int64.prototype.add=function(a){return new jspb.arith.Int64((this.lo+a.lo&4294967295)>>>0>>>0,((this.hi+a.hi&4294967295)>>>0)+(4294967296<=this.lo+a.lo?1:0)>>>0)};jspb.arith.Int64.prototype.sub=function(a){return new jspb.arith.Int64((this.lo-a.lo&4294967295)>>>0>>>0,((this.hi-a.hi&4294967295)>>>0)-(0>this.lo-a.lo?1:0)>>>0)};jspb.arith.Int64.prototype.clone=function(){return new jspb.arith.Int64(this.lo,this.hi)};\njspb.arith.Int64.prototype.toString=function(){var a=0!=(this.hi&2147483648),b=new jspb.arith.UInt64(this.lo,this.hi);a&&(b=(new jspb.arith.UInt64(0,0)).sub(b));return(a?\"-\":\"\")+b.toString()};jspb.arith.Int64.fromString=function(a){var b=0<a.length&&\"-\"==a[0];b&&(a=a.substring(1));a=jspb.arith.UInt64.fromString(a);if(null===a)return null;b&&(a=(new jspb.arith.UInt64(0,0)).sub(a));return new jspb.arith.Int64(a.lo,a.hi)};jspb.BinaryEncoder=function(){this.buffer_=[]};jspb.BinaryEncoder.prototype.length=function(){return this.buffer_.length};jspb.BinaryEncoder.prototype.end=function(){var a=this.buffer_;this.buffer_=[];return a};\njspb.BinaryEncoder.prototype.writeSplitVarint64=function(a,b){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(b==Math.floor(b));goog.asserts.assert(0<=a&&a<jspb.BinaryConstants.TWO_TO_32);for(goog.asserts.assert(0<=b&&b<jspb.BinaryConstants.TWO_TO_32);0<b||127<a;)this.buffer_.push(a&127|128),a=(a>>>7|b<<25)>>>0,b>>>=7;this.buffer_.push(a)};\njspb.BinaryEncoder.prototype.writeSplitFixed64=function(a,b){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(b==Math.floor(b));goog.asserts.assert(0<=a&&a<jspb.BinaryConstants.TWO_TO_32);goog.asserts.assert(0<=b&&b<jspb.BinaryConstants.TWO_TO_32);this.writeUint32(a);this.writeUint32(b)};\njspb.BinaryEncoder.prototype.writeUnsignedVarint32=function(a){goog.asserts.assert(a==Math.floor(a));for(goog.asserts.assert(0<=a&&a<jspb.BinaryConstants.TWO_TO_32);127<a;)this.buffer_.push(a&127|128),a>>>=7;this.buffer_.push(a)};\njspb.BinaryEncoder.prototype.writeSignedVarint32=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(a>=-jspb.BinaryConstants.TWO_TO_31&&a<jspb.BinaryConstants.TWO_TO_31);if(0<=a)this.writeUnsignedVarint32(a);else{for(var b=0;9>b;b++)this.buffer_.push(a&127|128),a>>=7;this.buffer_.push(1)}};\njspb.BinaryEncoder.prototype.writeUnsignedVarint64=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(0<=a&&a<jspb.BinaryConstants.TWO_TO_64);jspb.utils.splitInt64(a);this.writeSplitVarint64(jspb.utils.split64Low,jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeSignedVarint64=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(a>=-jspb.BinaryConstants.TWO_TO_63&&a<jspb.BinaryConstants.TWO_TO_63);jspb.utils.splitInt64(a);this.writeSplitVarint64(jspb.utils.split64Low,jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeZigzagVarint32=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(a>=-jspb.BinaryConstants.TWO_TO_31&&a<jspb.BinaryConstants.TWO_TO_31);this.writeUnsignedVarint32((a<<1^a>>31)>>>0)};jspb.BinaryEncoder.prototype.writeZigzagVarint64=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(a>=-jspb.BinaryConstants.TWO_TO_63&&a<jspb.BinaryConstants.TWO_TO_63);jspb.utils.splitZigzag64(a);this.writeSplitVarint64(jspb.utils.split64Low,jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeZigzagVarint64String=function(a){this.writeZigzagVarintHash64(jspb.utils.decimalStringToHash64(a))};jspb.BinaryEncoder.prototype.writeZigzagVarintHash64=function(a){var b=this;jspb.utils.splitHash64(a);jspb.utils.toZigzag64(jspb.utils.split64Low,jspb.utils.split64High,function(a,d){b.writeSplitVarint64(a>>>0,d>>>0)})};\njspb.BinaryEncoder.prototype.writeUint8=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(0<=a&&256>a);this.buffer_.push(a>>>0&255)};jspb.BinaryEncoder.prototype.writeUint16=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(0<=a&&65536>a);this.buffer_.push(a>>>0&255);this.buffer_.push(a>>>8&255)};\njspb.BinaryEncoder.prototype.writeUint32=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(0<=a&&a<jspb.BinaryConstants.TWO_TO_32);this.buffer_.push(a>>>0&255);this.buffer_.push(a>>>8&255);this.buffer_.push(a>>>16&255);this.buffer_.push(a>>>24&255)};jspb.BinaryEncoder.prototype.writeUint64=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(0<=a&&a<jspb.BinaryConstants.TWO_TO_64);jspb.utils.splitUint64(a);this.writeUint32(jspb.utils.split64Low);this.writeUint32(jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeInt8=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(-128<=a&&128>a);this.buffer_.push(a>>>0&255)};jspb.BinaryEncoder.prototype.writeInt16=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(-32768<=a&&32768>a);this.buffer_.push(a>>>0&255);this.buffer_.push(a>>>8&255)};\njspb.BinaryEncoder.prototype.writeInt32=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(a>=-jspb.BinaryConstants.TWO_TO_31&&a<jspb.BinaryConstants.TWO_TO_31);this.buffer_.push(a>>>0&255);this.buffer_.push(a>>>8&255);this.buffer_.push(a>>>16&255);this.buffer_.push(a>>>24&255)};\njspb.BinaryEncoder.prototype.writeInt64=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(a>=-jspb.BinaryConstants.TWO_TO_63&&a<jspb.BinaryConstants.TWO_TO_63);jspb.utils.splitInt64(a);this.writeSplitFixed64(jspb.utils.split64Low,jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeInt64String=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(+a>=-jspb.BinaryConstants.TWO_TO_63&&+a<jspb.BinaryConstants.TWO_TO_63);jspb.utils.splitHash64(jspb.utils.decimalStringToHash64(a));this.writeSplitFixed64(jspb.utils.split64Low,jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeFloat=function(a){goog.asserts.assert(Infinity===a||-Infinity===a||isNaN(a)||a>=-jspb.BinaryConstants.FLOAT32_MAX&&a<=jspb.BinaryConstants.FLOAT32_MAX);jspb.utils.splitFloat32(a);this.writeUint32(jspb.utils.split64Low)};\njspb.BinaryEncoder.prototype.writeDouble=function(a){goog.asserts.assert(Infinity===a||-Infinity===a||isNaN(a)||a>=-jspb.BinaryConstants.FLOAT64_MAX&&a<=jspb.BinaryConstants.FLOAT64_MAX);jspb.utils.splitFloat64(a);this.writeUint32(jspb.utils.split64Low);this.writeUint32(jspb.utils.split64High)};jspb.BinaryEncoder.prototype.writeBool=function(a){goog.asserts.assert(\"boolean\"===typeof a||\"number\"===typeof a);this.buffer_.push(a?1:0)};\njspb.BinaryEncoder.prototype.writeEnum=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(a>=-jspb.BinaryConstants.TWO_TO_31&&a<jspb.BinaryConstants.TWO_TO_31);this.writeSignedVarint32(a)};jspb.BinaryEncoder.prototype.writeBytes=function(a){this.buffer_.push.apply(this.buffer_,a)};jspb.BinaryEncoder.prototype.writeVarintHash64=function(a){jspb.utils.splitHash64(a);this.writeSplitVarint64(jspb.utils.split64Low,jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeFixedHash64=function(a){jspb.utils.splitHash64(a);this.writeUint32(jspb.utils.split64Low);this.writeUint32(jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeString=function(a){for(var b=this.buffer_.length,c=0;c<a.length;c++){var d=a.charCodeAt(c);if(128>d)this.buffer_.push(d);else if(2048>d)this.buffer_.push(d>>6|192),this.buffer_.push(d&63|128);else if(65536>d)if(55296<=d&&56319>=d&&c+1<a.length){var e=a.charCodeAt(c+1);56320<=e&&57343>=e&&(d=1024*(d-55296)+e-56320+65536,this.buffer_.push(d>>18|240),this.buffer_.push(d>>12&63|128),this.buffer_.push(d>>6&63|128),this.buffer_.push(d&63|128),c++)}else this.buffer_.push(d>>\n12|224),this.buffer_.push(d>>6&63|128),this.buffer_.push(d&63|128)}return this.buffer_.length-b};jspb.BinaryWriter=function(){this.blocks_=[];this.totalLength_=0;this.encoder_=new jspb.BinaryEncoder;this.bookmarks_=[]};jspb.BinaryWriter.prototype.appendUint8Array_=function(a){var b=this.encoder_.end();this.blocks_.push(b);this.blocks_.push(a);this.totalLength_+=b.length+a.length};\njspb.BinaryWriter.prototype.beginDelimited_=function(a){this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED);a=this.encoder_.end();this.blocks_.push(a);this.totalLength_+=a.length;a.push(this.totalLength_);return a};jspb.BinaryWriter.prototype.endDelimited_=function(a){var b=a.pop();b=this.totalLength_+this.encoder_.length()-b;for(goog.asserts.assert(0<=b);127<b;)a.push(b&127|128),b>>>=7,this.totalLength_++;a.push(b);this.totalLength_++};\njspb.BinaryWriter.prototype.writeSerializedMessage=function(a,b,c){this.appendUint8Array_(a.subarray(b,c))};jspb.BinaryWriter.prototype.maybeWriteSerializedMessage=function(a,b,c){null!=a&&null!=b&&null!=c&&this.writeSerializedMessage(a,b,c)};jspb.BinaryWriter.prototype.reset=function(){this.blocks_=[];this.encoder_.end();this.totalLength_=0;this.bookmarks_=[]};\njspb.BinaryWriter.prototype.getResultBuffer=function(){goog.asserts.assert(0==this.bookmarks_.length);for(var a=new Uint8Array(this.totalLength_+this.encoder_.length()),b=this.blocks_,c=b.length,d=0,e=0;e<c;e++){var f=b[e];a.set(f,d);d+=f.length}b=this.encoder_.end();a.set(b,d);d+=b.length;goog.asserts.assert(d==a.length);this.blocks_=[a];return a};jspb.BinaryWriter.prototype.getResultBase64String=function(a){return goog.crypt.base64.encodeByteArray(this.getResultBuffer(),a)};\njspb.BinaryWriter.prototype.beginSubMessage=function(a){this.bookmarks_.push(this.beginDelimited_(a))};jspb.BinaryWriter.prototype.endSubMessage=function(){goog.asserts.assert(0<=this.bookmarks_.length);this.endDelimited_(this.bookmarks_.pop())};jspb.BinaryWriter.prototype.writeFieldHeader_=function(a,b){goog.asserts.assert(1<=a&&a==Math.floor(a));this.encoder_.writeUnsignedVarint32(8*a+b)};\njspb.BinaryWriter.prototype.writeAny=function(a,b,c){var d=jspb.BinaryConstants.FieldType;switch(a){case d.DOUBLE:this.writeDouble(b,c);break;case d.FLOAT:this.writeFloat(b,c);break;case d.INT64:this.writeInt64(b,c);break;case d.UINT64:this.writeUint64(b,c);break;case d.INT32:this.writeInt32(b,c);break;case d.FIXED64:this.writeFixed64(b,c);break;case d.FIXED32:this.writeFixed32(b,c);break;case d.BOOL:this.writeBool(b,c);break;case d.STRING:this.writeString(b,c);break;case d.GROUP:goog.asserts.fail(\"Group field type not supported in writeAny()\");\nbreak;case d.MESSAGE:goog.asserts.fail(\"Message field type not supported in writeAny()\");break;case d.BYTES:this.writeBytes(b,c);break;case d.UINT32:this.writeUint32(b,c);break;case d.ENUM:this.writeEnum(b,c);break;case d.SFIXED32:this.writeSfixed32(b,c);break;case d.SFIXED64:this.writeSfixed64(b,c);break;case d.SINT32:this.writeSint32(b,c);break;case d.SINT64:this.writeSint64(b,c);break;case d.FHASH64:this.writeFixedHash64(b,c);break;case d.VHASH64:this.writeVarintHash64(b,c);break;default:goog.asserts.fail(\"Invalid field type in writeAny()\")}};\njspb.BinaryWriter.prototype.writeUnsignedVarint32_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeUnsignedVarint32(b))};jspb.BinaryWriter.prototype.writeSignedVarint32_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSignedVarint32(b))};jspb.BinaryWriter.prototype.writeUnsignedVarint64_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeUnsignedVarint64(b))};\njspb.BinaryWriter.prototype.writeSignedVarint64_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSignedVarint64(b))};jspb.BinaryWriter.prototype.writeZigzagVarint32_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeZigzagVarint32(b))};jspb.BinaryWriter.prototype.writeZigzagVarint64_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeZigzagVarint64(b))};\njspb.BinaryWriter.prototype.writeZigzagVarint64String_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeZigzagVarint64String(b))};jspb.BinaryWriter.prototype.writeZigzagVarintHash64_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeZigzagVarintHash64(b))};\njspb.BinaryWriter.prototype.writeInt32=function(a,b){null!=b&&(goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_31&&b<jspb.BinaryConstants.TWO_TO_31),this.writeSignedVarint32_(a,b))};jspb.BinaryWriter.prototype.writeInt32String=function(a,b){null!=b&&(b=parseInt(b,10),goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_31&&b<jspb.BinaryConstants.TWO_TO_31),this.writeSignedVarint32_(a,b))};\njspb.BinaryWriter.prototype.writeInt64=function(a,b){null!=b&&(goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_63&&b<jspb.BinaryConstants.TWO_TO_63),this.writeSignedVarint64_(a,b))};jspb.BinaryWriter.prototype.writeInt64String=function(a,b){null!=b&&(b=jspb.arith.Int64.fromString(b),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSplitVarint64(b.lo,b.hi))};\njspb.BinaryWriter.prototype.writeUint32=function(a,b){null!=b&&(goog.asserts.assert(0<=b&&b<jspb.BinaryConstants.TWO_TO_32),this.writeUnsignedVarint32_(a,b))};jspb.BinaryWriter.prototype.writeUint32String=function(a,b){null!=b&&(b=parseInt(b,10),goog.asserts.assert(0<=b&&b<jspb.BinaryConstants.TWO_TO_32),this.writeUnsignedVarint32_(a,b))};jspb.BinaryWriter.prototype.writeUint64=function(a,b){null!=b&&(goog.asserts.assert(0<=b&&b<jspb.BinaryConstants.TWO_TO_64),this.writeUnsignedVarint64_(a,b))};\njspb.BinaryWriter.prototype.writeUint64String=function(a,b){null!=b&&(b=jspb.arith.UInt64.fromString(b),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSplitVarint64(b.lo,b.hi))};jspb.BinaryWriter.prototype.writeSint32=function(a,b){null!=b&&(goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_31&&b<jspb.BinaryConstants.TWO_TO_31),this.writeZigzagVarint32_(a,b))};\njspb.BinaryWriter.prototype.writeSint64=function(a,b){null!=b&&(goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_63&&b<jspb.BinaryConstants.TWO_TO_63),this.writeZigzagVarint64_(a,b))};jspb.BinaryWriter.prototype.writeSintHash64=function(a,b){null!=b&&this.writeZigzagVarintHash64_(a,b)};jspb.BinaryWriter.prototype.writeSint64String=function(a,b){null!=b&&this.writeZigzagVarint64String_(a,b)};\njspb.BinaryWriter.prototype.writeFixed32=function(a,b){null!=b&&(goog.asserts.assert(0<=b&&b<jspb.BinaryConstants.TWO_TO_32),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED32),this.encoder_.writeUint32(b))};jspb.BinaryWriter.prototype.writeFixed64=function(a,b){null!=b&&(goog.asserts.assert(0<=b&&b<jspb.BinaryConstants.TWO_TO_64),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeUint64(b))};\njspb.BinaryWriter.prototype.writeFixed64String=function(a,b){null!=b&&(b=jspb.arith.UInt64.fromString(b),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeSplitFixed64(b.lo,b.hi))};jspb.BinaryWriter.prototype.writeSfixed32=function(a,b){null!=b&&(goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_31&&b<jspb.BinaryConstants.TWO_TO_31),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED32),this.encoder_.writeInt32(b))};\njspb.BinaryWriter.prototype.writeSfixed64=function(a,b){null!=b&&(goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_63&&b<jspb.BinaryConstants.TWO_TO_63),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeInt64(b))};jspb.BinaryWriter.prototype.writeSfixed64String=function(a,b){null!=b&&(b=jspb.arith.Int64.fromString(b),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeSplitFixed64(b.lo,b.hi))};\njspb.BinaryWriter.prototype.writeFloat=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED32),this.encoder_.writeFloat(b))};jspb.BinaryWriter.prototype.writeDouble=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeDouble(b))};\njspb.BinaryWriter.prototype.writeBool=function(a,b){null!=b&&(goog.asserts.assert(\"boolean\"===typeof b||\"number\"===typeof b),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeBool(b))};jspb.BinaryWriter.prototype.writeEnum=function(a,b){null!=b&&(goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_31&&b<jspb.BinaryConstants.TWO_TO_31),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSignedVarint32(b))};\njspb.BinaryWriter.prototype.writeString=function(a,b){null!=b&&(a=this.beginDelimited_(a),this.encoder_.writeString(b),this.endDelimited_(a))};jspb.BinaryWriter.prototype.writeBytes=function(a,b){null!=b&&(b=jspb.utils.byteSourceToUint8Array(b),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(b.length),this.appendUint8Array_(b))};jspb.BinaryWriter.prototype.writeMessage=function(a,b,c){null!=b&&(a=this.beginDelimited_(a),c(b,this),this.endDelimited_(a))};\njspb.BinaryWriter.prototype.writeMessageSet=function(a,b,c){null!=b&&(this.writeFieldHeader_(1,jspb.BinaryConstants.WireType.START_GROUP),this.writeFieldHeader_(2,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSignedVarint32(a),a=this.beginDelimited_(3),c(b,this),this.endDelimited_(a),this.writeFieldHeader_(1,jspb.BinaryConstants.WireType.END_GROUP))};\njspb.BinaryWriter.prototype.writeGroup=function(a,b,c){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.START_GROUP),c(b,this),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.END_GROUP))};jspb.BinaryWriter.prototype.writeFixedHash64=function(a,b){null!=b&&(goog.asserts.assert(8==b.length),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeFixedHash64(b))};\njspb.BinaryWriter.prototype.writeVarintHash64=function(a,b){null!=b&&(goog.asserts.assert(8==b.length),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeVarintHash64(b))};jspb.BinaryWriter.prototype.writeSplitFixed64=function(a,b,c){this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED64);this.encoder_.writeSplitFixed64(b,c)};\njspb.BinaryWriter.prototype.writeSplitVarint64=function(a,b,c){this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT);this.encoder_.writeSplitVarint64(b,c)};jspb.BinaryWriter.prototype.writeSplitZigzagVarint64=function(a,b,c){this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT);var d=this.encoder_;jspb.utils.toZigzag64(b,c,function(a,b){d.writeSplitVarint64(a>>>0,b>>>0)})};\njspb.BinaryWriter.prototype.writeRepeatedInt32=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeSignedVarint32_(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedInt32String=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeInt32String(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedInt64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeSignedVarint64_(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedSplitFixed64=function(a,b,c,d){if(null!=b)for(var e=0;e<b.length;e++)this.writeSplitFixed64(a,c(b[e]),d(b[e]))};jspb.BinaryWriter.prototype.writeRepeatedSplitVarint64=function(a,b,c,d){if(null!=b)for(var e=0;e<b.length;e++)this.writeSplitVarint64(a,c(b[e]),d(b[e]))};jspb.BinaryWriter.prototype.writeRepeatedSplitZigzagVarint64=function(a,b,c,d){if(null!=b)for(var e=0;e<b.length;e++)this.writeSplitZigzagVarint64(a,c(b[e]),d(b[e]))};\njspb.BinaryWriter.prototype.writeRepeatedInt64String=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeInt64String(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedUint32=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeUnsignedVarint32_(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedUint32String=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeUint32String(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedUint64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeUnsignedVarint64_(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedUint64String=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeUint64String(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedSint32=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeZigzagVarint32_(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedSint64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeZigzagVarint64_(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedSint64String=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeZigzagVarint64String_(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedSintHash64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeZigzagVarintHash64_(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedFixed32=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeFixed32(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedFixed64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeFixed64(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedFixed64String=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeFixed64String(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedSfixed32=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeSfixed32(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedSfixed64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeSfixed64(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedSfixed64String=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeSfixed64String(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedFloat=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeFloat(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedDouble=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeDouble(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedBool=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeBool(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedEnum=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeEnum(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedString=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeString(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedBytes=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeBytes(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedMessage=function(a,b,c){if(null!=b)for(var d=0;d<b.length;d++){var e=this.beginDelimited_(a);c(b[d],this);this.endDelimited_(e)}};\njspb.BinaryWriter.prototype.writeRepeatedGroup=function(a,b,c){if(null!=b)for(var d=0;d<b.length;d++)this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.START_GROUP),c(b[d],this),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.END_GROUP)};jspb.BinaryWriter.prototype.writeRepeatedFixedHash64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeFixedHash64(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedVarintHash64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeVarintHash64(a,b[c])};jspb.BinaryWriter.prototype.writePackedInt32=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeSignedVarint32(b[c]);this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedInt32String=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeSignedVarint32(parseInt(b[c],10));this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedInt64=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeSignedVarint64(b[c]);this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedSplitFixed64=function(a,b,c,d){if(null!=b){a=this.beginDelimited_(a);for(var e=0;e<b.length;e++)this.encoder_.writeSplitFixed64(c(b[e]),d(b[e]));this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedSplitVarint64=function(a,b,c,d){if(null!=b){a=this.beginDelimited_(a);for(var e=0;e<b.length;e++)this.encoder_.writeSplitVarint64(c(b[e]),d(b[e]));this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedSplitZigzagVarint64=function(a,b,c,d){if(null!=b){a=this.beginDelimited_(a);for(var e=this.encoder_,f=0;f<b.length;f++)jspb.utils.toZigzag64(c(b[f]),d(b[f]),function(a,b){e.writeSplitVarint64(a>>>0,b>>>0)});this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedInt64String=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++){var d=jspb.arith.Int64.fromString(b[c]);this.encoder_.writeSplitVarint64(d.lo,d.hi)}this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedUint32=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeUnsignedVarint32(b[c]);this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedUint32String=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeUnsignedVarint32(parseInt(b[c],10));this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedUint64=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeUnsignedVarint64(b[c]);this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedUint64String=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++){var d=jspb.arith.UInt64.fromString(b[c]);this.encoder_.writeSplitVarint64(d.lo,d.hi)}this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedSint32=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeZigzagVarint32(b[c]);this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedSint64=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeZigzagVarint64(b[c]);this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedSint64String=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeZigzagVarintHash64(jspb.utils.decimalStringToHash64(b[c]));this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedSintHash64=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeZigzagVarintHash64(b[c]);this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedFixed32=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(4*b.length),a=0;a<b.length;a++)this.encoder_.writeUint32(b[a])};jspb.BinaryWriter.prototype.writePackedFixed64=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*b.length),a=0;a<b.length;a++)this.encoder_.writeUint64(b[a])};\njspb.BinaryWriter.prototype.writePackedFixed64String=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*b.length),a=0;a<b.length;a++){var c=jspb.arith.UInt64.fromString(b[a]);this.encoder_.writeSplitFixed64(c.lo,c.hi)}};\njspb.BinaryWriter.prototype.writePackedSfixed32=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(4*b.length),a=0;a<b.length;a++)this.encoder_.writeInt32(b[a])};jspb.BinaryWriter.prototype.writePackedSfixed64=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*b.length),a=0;a<b.length;a++)this.encoder_.writeInt64(b[a])};\njspb.BinaryWriter.prototype.writePackedSfixed64String=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*b.length),a=0;a<b.length;a++)this.encoder_.writeInt64String(b[a])};jspb.BinaryWriter.prototype.writePackedFloat=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(4*b.length),a=0;a<b.length;a++)this.encoder_.writeFloat(b[a])};\njspb.BinaryWriter.prototype.writePackedDouble=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*b.length),a=0;a<b.length;a++)this.encoder_.writeDouble(b[a])};jspb.BinaryWriter.prototype.writePackedBool=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(b.length),a=0;a<b.length;a++)this.encoder_.writeBool(b[a])};\njspb.BinaryWriter.prototype.writePackedEnum=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeEnum(b[c]);this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedFixedHash64=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*b.length),a=0;a<b.length;a++)this.encoder_.writeFixedHash64(b[a])};\njspb.BinaryWriter.prototype.writePackedVarintHash64=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeVarintHash64(b[c]);this.endDelimited_(a)}};jspb.Export={};exports.Map=jspb.Map;exports.Message=jspb.Message;exports.BinaryReader=jspb.BinaryReader;exports.BinaryWriter=jspb.BinaryWriter;exports.ExtensionFieldInfo=jspb.ExtensionFieldInfo;exports.ExtensionFieldBinaryInfo=jspb.ExtensionFieldBinaryInfo;exports.exportSymbol=goog.exportSymbol;exports.inherits=goog.inherits;exports.object={extend:goog.object.extend};exports.typeOf=goog.typeOf;\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n","'use strict';\n\nvar hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nif (typeof BigInt === 'function') {\n\tvar bigIntValueOf = BigInt.prototype.valueOf;\n\tvar tryBigInt = function tryBigIntObject(value) {\n\t\ttry {\n\t\t\tbigIntValueOf.call(value);\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t}\n\t\treturn false;\n\t};\n\n\tmodule.exports = function isBigInt(value) {\n\t\tif (\n\t\t\tvalue === null\n\t\t\t|| typeof value === 'undefined'\n\t\t\t|| typeof value === 'boolean'\n\t\t\t|| typeof value === 'string'\n\t\t\t|| typeof value === 'number'\n\t\t\t|| typeof value === 'symbol'\n\t\t\t|| typeof value === 'function'\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t\tif (typeof value === 'bigint') {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn tryBigInt(value);\n\t};\n} else {\n\tmodule.exports = function isBigInt(value) {\n\t\treturn false && value;\n\t};\n}\n","'use strict';\n\nvar callBound = require('call-bind/callBound');\nvar $boolToStr = callBound('Boolean.prototype.toString');\nvar $toString = callBound('Object.prototype.toString');\n\nvar tryBooleanObject = function booleanBrandCheck(value) {\n\ttry {\n\t\t$boolToStr(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar boolClass = '[object Boolean]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag;\n\nmodule.exports = function isBoolean(value) {\n\tif (typeof value === 'boolean') {\n\t\treturn true;\n\t}\n\tif (value === null || typeof value !== 'object') {\n\t\treturn false;\n\t}\n\treturn hasToStringTag && Symbol.toStringTag in value ? tryBooleanObject(value) : $toString(value) === boolClass;\n};\n","/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n","'use strict';\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\n/* globals document: false */\nvar documentDotAll = typeof document === 'object' && typeof document.all === 'undefined' && document.all !== undefined ? document.all : {};\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (value === documentDotAll) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (typeof value === 'function' && !value.prototype) { return true; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\treturn strClass === fnClass || strClass === genClass;\n\t};\n","'use strict';\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag;\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n","'use strict';\n\nvar $Map = typeof Map === 'function' && Map.prototype ? Map : null;\nvar $Set = typeof Set === 'function' && Set.prototype ? Set : null;\n\nvar exported;\n\nif (!$Map) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isMap(x) {\n\t\t// `Map` is not present in this environment.\n\t\treturn false;\n\t};\n}\n\nvar $mapHas = $Map ? Map.prototype.has : null;\nvar $setHas = $Set ? Set.prototype.has : null;\nif (!exported && !$mapHas) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isMap(x) {\n\t\t// `Map` does not have a `has` method\n\t\treturn false;\n\t};\n}\n\nmodule.exports = exported || function isMap(x) {\n\tif (!x || typeof x !== 'object') {\n\t\treturn false;\n\t}\n\ttry {\n\t\t$mapHas.call(x);\n\t\tif ($setHas) {\n\t\t\ttry {\n\t\t\t\t$setHas.call(x);\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn x instanceof $Map; // core-js workaround, pre-v2.5.0\n\t} catch (e) {}\n\treturn false;\n};\n","'use strict';\n\nvar numToStr = Number.prototype.toString;\nvar tryNumberObject = function tryNumberObject(value) {\n\ttry {\n\t\tnumToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar numClass = '[object Number]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag;\n\nmodule.exports = function isNumberObject(value) {\n\tif (typeof value === 'number') {\n\t\treturn true;\n\t}\n\tif (typeof value !== 'object') {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryNumberObject(value) : toStr.call(value) === numClass;\n};\n","'use strict';\n\nvar callBound = require('call-bind/callBound');\nvar hasSymbols = require('has-symbols/shams')();\nvar hasToStringTag = hasSymbols && !!Symbol.toStringTag;\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n","'use strict';\n\nvar $Map = typeof Map === 'function' && Map.prototype ? Map : null;\nvar $Set = typeof Set === 'function' && Set.prototype ? Set : null;\n\nvar exported;\n\nif (!$Set) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isSet(x) {\n\t\t// `Set` is not present in this environment.\n\t\treturn false;\n\t};\n}\n\nvar $mapHas = $Map ? Map.prototype.has : null;\nvar $setHas = $Set ? Set.prototype.has : null;\nif (!exported && !$setHas) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isSet(x) {\n\t\t// `Set` does not have a `has` method\n\t\treturn false;\n\t};\n}\n\nmodule.exports = exported || function isSet(x) {\n\tif (!x || typeof x !== 'object') {\n\t\treturn false;\n\t}\n\ttry {\n\t\t$setHas.call(x);\n\t\tif ($mapHas) {\n\t\t\ttry {\n\t\t\t\t$mapHas.call(x);\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn x instanceof $Set; // core-js workaround, pre-v2.5.0\n\t} catch (e) {}\n\treturn false;\n};\n","'use strict';\n\nvar strValue = String.prototype.valueOf;\nvar tryStringObject = function tryStringObject(value) {\n\ttry {\n\t\tstrValue.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar strClass = '[object String]';\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag;\n\nmodule.exports = function isString(value) {\n\tif (typeof value === 'string') {\n\t\treturn true;\n\t}\n\tif (typeof value !== 'object') {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryStringObject(value) : toStr.call(value) === strClass;\n};\n","'use strict';\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = require('has-symbols')();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && value;\n\t};\n}\n","'use strict';\n\nvar forEach = require('foreach');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasSymbols = require('has-symbols')();\nvar hasToStringTag = hasSymbols && typeof Symbol.toStringTag === 'symbol';\n\nvar typedArrays = availableTypedArrays();\n\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new global[typedArray]();\n\t\tif (!(Symbol.toStringTag in arr)) {\n\t\t\tthrow new EvalError('this engine has support for Symbol.toStringTag, but ' + typedArray + ' does not have the property! Please report this.');\n\t\t}\n\t\tvar proto = getPrototypeOf(arr);\n\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\tif (!descriptor) {\n\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t}\n\t\ttoStrTags[typedArray] = descriptor.get;\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar anyTrue = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!anyTrue) {\n\t\t\ttry {\n\t\t\t\tanyTrue = getter.call(value) === typedArray;\n\t\t\t} catch (e) { /**/ }\n\t\t}\n\t});\n\treturn anyTrue;\n};\n\nmodule.exports = function isTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag) {\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\treturn $indexOf(typedArrays, tag) > -1;\n\t}\n\tif (!gOPD) { return false; }\n\treturn tryTypedArrays(value);\n};\n","'use strict';\n\nvar $WeakMap = typeof WeakMap === 'function' && WeakMap.prototype ? WeakMap : null;\nvar $WeakSet = typeof WeakSet === 'function' && WeakSet.prototype ? WeakSet : null;\n\nvar exported;\n\nif (!$WeakMap) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isWeakMap(x) {\n\t\t// `WeakMap` is not present in this environment.\n\t\treturn false;\n\t};\n}\n\nvar $mapHas = $WeakMap ? $WeakMap.prototype.has : null;\nvar $setHas = $WeakSet ? $WeakSet.prototype.has : null;\nif (!exported && !$mapHas) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isWeakMap(x) {\n\t\t// `WeakMap` does not have a `has` method\n\t\treturn false;\n\t};\n}\n\nmodule.exports = exported || function isWeakMap(x) {\n\tif (!x || typeof x !== 'object') {\n\t\treturn false;\n\t}\n\ttry {\n\t\t$mapHas.call(x, $mapHas);\n\t\tif ($setHas) {\n\t\t\ttry {\n\t\t\t\t$setHas.call(x, $setHas);\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn x instanceof $WeakMap; // core-js workaround, pre-v3\n\t} catch (e) {}\n\treturn false;\n};\n","'use strict';\n\nvar $WeakMap = typeof WeakMap === 'function' && WeakMap.prototype ? WeakMap : null;\nvar $WeakSet = typeof WeakSet === 'function' && WeakSet.prototype ? WeakSet : null;\n\nvar exported;\n\nif (!$WeakMap) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isWeakSet(x) {\n\t\t// `WeakSet` is not present in this environment.\n\t\treturn false;\n\t};\n}\n\nvar $mapHas = $WeakMap ? $WeakMap.prototype.has : null;\nvar $setHas = $WeakSet ? $WeakSet.prototype.has : null;\nif (!exported && !$setHas) {\n\t// eslint-disable-next-line no-unused-vars\n\tmodule.exports = function isWeakSet(x) {\n\t\t// `WeakSet` does not have a `has` method\n\t\treturn false;\n\t};\n}\n\nmodule.exports = exported || function isWeakSet(x) {\n\tif (!x || typeof x !== 'object') {\n\t\treturn false;\n\t}\n\ttry {\n\t\t$setHas.call(x, $setHas);\n\t\tif ($mapHas) {\n\t\t\ttry {\n\t\t\t\t$mapHas.call(x, $mapHas);\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn x instanceof $WeakSet; // core-js workaround, pre-v3\n\t} catch (e) {}\n\treturn false;\n};\n","var map = require(\"./map\");\n\nvar getCountryCode = function(localeString) {\n    var components = localeString.split(\"_\");\n    if (components.length == 2) {\n        return components.pop();\n    }\n    components = localeString.split(\"-\");\n    if (components.length == 2) {\n        return components.pop();\n    }\n    return localeString;\n}\n\nexports.getCurrency = function(locale) {\n    var countryCode = getCountryCode(locale).toUpperCase();\n    if (countryCode in map) {\n        return map[countryCode];\n    }\n    return null;\n}\n\nexports.getLocales = function(currencyCode) {\n    currencyCode = currencyCode.toUpperCase();\n    var locales = [];\n    for (countryCode in map) {\n        if (map[countryCode] === currencyCode) {\n            locales.push(countryCode);\n        }\n    }\n    return locales;\n}","// Generated using ShowCurrencies.java\nvar map = {\nAD: 'EUR',\nAE: 'AED',\nAF: 'AFN',\nAG: 'XCD',\nAI: 'XCD',\nAL: 'ALL',\nAM: 'AMD',\nAN: 'ANG',\nAO: 'AOA',\nAR: 'ARS',\nAS: 'USD',\nAT: 'EUR',\nAU: 'AUD',\nAW: 'AWG',\nAX: 'EUR',\nAZ: 'AZN',\nBA: 'BAM',\nBB: 'BBD',\nBD: 'BDT',\nBE: 'EUR',\nBF: 'XOF',\nBG: 'BGN',\nBH: 'BHD',\nBI: 'BIF',\nBJ: 'XOF',\nBL: 'EUR',\nBM: 'BMD',\nBN: 'BND',\nBO: 'BOB',\nBQ: 'USD',\nBR: 'BRL',\nBS: 'BSD',\nBT: 'BTN',\nBV: 'NOK',\nBW: 'BWP',\nBY: 'BYR',\nBZ: 'BZD',\nCA: 'CAD',\nCC: 'AUD',\nCD: 'CDF',\nCF: 'XAF',\nCG: 'XAF',\nCH: 'CHF',\nCI: 'XOF',\nCK: 'NZD',\nCL: 'CLP',\nCM: 'XAF',\nCN: 'CNY',\nCO: 'COP',\nCR: 'CRC',\nCU: 'CUP',\nCV: 'CVE',\nCW: 'ANG',\nCX: 'AUD',\nCY: 'EUR',\nCZ: 'CZK',\nDE: 'EUR',\nDJ: 'DJF',\nDK: 'DKK',\nDM: 'XCD',\nDO: 'DOP',\nDZ: 'DZD',\nEC: 'USD',\nEE: 'EUR',\nEG: 'EGP',\nEH: 'MAD',\nER: 'ERN',\nES: 'EUR',\nET: 'ETB',\nFI: 'EUR',\nFJ: 'FJD',\nFK: 'FKP',\nFM: 'USD',\nFO: 'DKK',\nFR: 'EUR',\nGA: 'XAF',\nGB: 'GBP',\nGD: 'XCD',\nGE: 'GEL',\nGF: 'EUR',\nGG: 'GBP',\nGH: 'GHS',\nGI: 'GIP',\nGL: 'DKK',\nGM: 'GMD',\nGN: 'GNF',\nGP: 'EUR',\nGQ: 'XAF',\nGR: 'EUR',\nGS: 'GBP',\nGT: 'GTQ',\nGU: 'USD',\nGW: 'XOF',\nGY: 'GYD',\nHK: 'HKD',\nHM: 'AUD',\nHN: 'HNL',\nHR: 'HRK',\nHT: 'HTG',\nHU: 'HUF',\nID: 'IDR',\nIE: 'EUR',\nIL: 'ILS',\nIM: 'GBP',\nIN: 'INR',\nIO: 'USD',\nIQ: 'IQD',\nIR: 'IRR',\nIS: 'ISK',\nIT: 'EUR',\nJE: 'GBP',\nJM: 'JMD',\nJO: 'JOD',\nJP: 'JPY',\nKE: 'KES',\nKG: 'KGS',\nKH: 'KHR',\nKI: 'AUD',\nKM: 'KMF',\nKN: 'XCD',\nKP: 'KPW',\nKR: 'KRW',\nKW: 'KWD',\nKY: 'KYD',\nKZ: 'KZT',\nLA: 'LAK',\nLB: 'LBP',\nLC: 'XCD',\nLI: 'CHF',\nLK: 'LKR',\nLR: 'LRD',\nLS: 'LSL',\nLT: 'LTL',\nLU: 'EUR',\nLV: 'LVL',\nLY: 'LYD',\nMA: 'MAD',\nMC: 'EUR',\nMD: 'MDL',\nME: 'EUR',\nMF: 'EUR',\nMG: 'MGA',\nMH: 'USD',\nMK: 'MKD',\nML: 'XOF',\nMM: 'MMK',\nMN: 'MNT',\nMO: 'MOP',\nMP: 'USD',\nMQ: 'EUR',\nMR: 'MRO',\nMS: 'XCD',\nMT: 'EUR',\nMU: 'MUR',\nMV: 'MVR',\nMW: 'MWK',\nMX: 'MXN',\nMY: 'MYR',\nMZ: 'MZN',\nNA: 'NAD',\nNC: 'XPF',\nNE: 'XOF',\nNF: 'AUD',\nNG: 'NGN',\nNI: 'NIO',\nNL: 'EUR',\nNO: 'NOK',\nNP: 'NPR',\nNR: 'AUD',\nNU: 'NZD',\nNZ: 'NZD',\nOM: 'OMR',\nPA: 'PAB',\nPE: 'PEN',\nPF: 'XPF',\nPG: 'PGK',\nPH: 'PHP',\nPK: 'PKR',\nPL: 'PLN',\nPM: 'EUR',\nPN: 'NZD',\nPR: 'USD',\nPS: 'ILS',\nPT: 'EUR',\nPW: 'USD',\nPY: 'PYG',\nQA: 'QAR',\nRE: 'EUR',\nRO: 'RON',\nRS: 'RSD',\nRU: 'RUB',\nRW: 'RWF',\nSA: 'SAR',\nSB: 'SBD',\nSC: 'SCR',\nSD: 'SDG',\nSE: 'SEK',\nSG: 'SGD',\nSH: 'SHP',\nSI: 'EUR',\nSJ: 'NOK',\nSK: 'EUR',\nSL: 'SLL',\nSM: 'EUR',\nSN: 'XOF',\nSO: 'SOS',\nSR: 'SRD',\nST: 'STD',\nSV: 'SVC',\nSX: 'ANG',\nSY: 'SYP',\nSZ: 'SZL',\nTC: 'USD',\nTD: 'XAF',\nTF: 'EUR',\nTG: 'XOF',\nTH: 'THB',\nTJ: 'TJS',\nTK: 'NZD',\nTL: 'USD',\nTM: 'TMT',\nTN: 'TND',\nTO: 'TOP',\nTR: 'TRY',\nTT: 'TTD',\nTV: 'AUD',\nTW: 'TWD',\nTZ: 'TZS',\nUA: 'UAH',\nUG: 'UGX',\nUM: 'USD',\nUS: 'USD',\nUY: 'UYU',\nUZ: 'UZS',\nVA: 'EUR',\nVC: 'XCD',\nVE: 'VEF',\nVG: 'USD',\nVI: 'USD',\nVN: 'VND',\nVU: 'VUV',\nWF: 'XPF',\nWS: 'WST',\nYE: 'YER',\nYT: 'EUR',\nZA: 'ZAR',\nZM: 'ZMK',\nZW: 'ZWL'\n};\n\nmodule.exports = map;","(function(){\r\n  var crypt = require('crypt'),\r\n      utf8 = require('charenc').utf8,\r\n      isBuffer = require('is-buffer'),\r\n      bin = require('charenc').bin,\r\n\r\n  // The core\r\n  md5 = function (message, options) {\r\n    // Convert to byte array\r\n    if (message.constructor == String)\r\n      if (options && options.encoding === 'binary')\r\n        message = bin.stringToBytes(message);\r\n      else\r\n        message = utf8.stringToBytes(message);\r\n    else if (isBuffer(message))\r\n      message = Array.prototype.slice.call(message, 0);\r\n    else if (!Array.isArray(message) && message.constructor !== Uint8Array)\r\n      message = message.toString();\r\n    // else, assume byte array already\r\n\r\n    var m = crypt.bytesToWords(message),\r\n        l = message.length * 8,\r\n        a =  1732584193,\r\n        b = -271733879,\r\n        c = -1732584194,\r\n        d =  271733878;\r\n\r\n    // Swap endian\r\n    for (var i = 0; i < m.length; i++) {\r\n      m[i] = ((m[i] <<  8) | (m[i] >>> 24)) & 0x00FF00FF |\r\n             ((m[i] << 24) | (m[i] >>>  8)) & 0xFF00FF00;\r\n    }\r\n\r\n    // Padding\r\n    m[l >>> 5] |= 0x80 << (l % 32);\r\n    m[(((l + 64) >>> 9) << 4) + 14] = l;\r\n\r\n    // Method shortcuts\r\n    var FF = md5._ff,\r\n        GG = md5._gg,\r\n        HH = md5._hh,\r\n        II = md5._ii;\r\n\r\n    for (var i = 0; i < m.length; i += 16) {\r\n\r\n      var aa = a,\r\n          bb = b,\r\n          cc = c,\r\n          dd = d;\r\n\r\n      a = FF(a, b, c, d, m[i+ 0],  7, -680876936);\r\n      d = FF(d, a, b, c, m[i+ 1], 12, -389564586);\r\n      c = FF(c, d, a, b, m[i+ 2], 17,  606105819);\r\n      b = FF(b, c, d, a, m[i+ 3], 22, -1044525330);\r\n      a = FF(a, b, c, d, m[i+ 4],  7, -176418897);\r\n      d = FF(d, a, b, c, m[i+ 5], 12,  1200080426);\r\n      c = FF(c, d, a, b, m[i+ 6], 17, -1473231341);\r\n      b = FF(b, c, d, a, m[i+ 7], 22, -45705983);\r\n      a = FF(a, b, c, d, m[i+ 8],  7,  1770035416);\r\n      d = FF(d, a, b, c, m[i+ 9], 12, -1958414417);\r\n      c = FF(c, d, a, b, m[i+10], 17, -42063);\r\n      b = FF(b, c, d, a, m[i+11], 22, -1990404162);\r\n      a = FF(a, b, c, d, m[i+12],  7,  1804603682);\r\n      d = FF(d, a, b, c, m[i+13], 12, -40341101);\r\n      c = FF(c, d, a, b, m[i+14], 17, -1502002290);\r\n      b = FF(b, c, d, a, m[i+15], 22,  1236535329);\r\n\r\n      a = GG(a, b, c, d, m[i+ 1],  5, -165796510);\r\n      d = GG(d, a, b, c, m[i+ 6],  9, -1069501632);\r\n      c = GG(c, d, a, b, m[i+11], 14,  643717713);\r\n      b = GG(b, c, d, a, m[i+ 0], 20, -373897302);\r\n      a = GG(a, b, c, d, m[i+ 5],  5, -701558691);\r\n      d = GG(d, a, b, c, m[i+10],  9,  38016083);\r\n      c = GG(c, d, a, b, m[i+15], 14, -660478335);\r\n      b = GG(b, c, d, a, m[i+ 4], 20, -405537848);\r\n      a = GG(a, b, c, d, m[i+ 9],  5,  568446438);\r\n      d = GG(d, a, b, c, m[i+14],  9, -1019803690);\r\n      c = GG(c, d, a, b, m[i+ 3], 14, -187363961);\r\n      b = GG(b, c, d, a, m[i+ 8], 20,  1163531501);\r\n      a = GG(a, b, c, d, m[i+13],  5, -1444681467);\r\n      d = GG(d, a, b, c, m[i+ 2],  9, -51403784);\r\n      c = GG(c, d, a, b, m[i+ 7], 14,  1735328473);\r\n      b = GG(b, c, d, a, m[i+12], 20, -1926607734);\r\n\r\n      a = HH(a, b, c, d, m[i+ 5],  4, -378558);\r\n      d = HH(d, a, b, c, m[i+ 8], 11, -2022574463);\r\n      c = HH(c, d, a, b, m[i+11], 16,  1839030562);\r\n      b = HH(b, c, d, a, m[i+14], 23, -35309556);\r\n      a = HH(a, b, c, d, m[i+ 1],  4, -1530992060);\r\n      d = HH(d, a, b, c, m[i+ 4], 11,  1272893353);\r\n      c = HH(c, d, a, b, m[i+ 7], 16, -155497632);\r\n      b = HH(b, c, d, a, m[i+10], 23, -1094730640);\r\n      a = HH(a, b, c, d, m[i+13],  4,  681279174);\r\n      d = HH(d, a, b, c, m[i+ 0], 11, -358537222);\r\n      c = HH(c, d, a, b, m[i+ 3], 16, -722521979);\r\n      b = HH(b, c, d, a, m[i+ 6], 23,  76029189);\r\n      a = HH(a, b, c, d, m[i+ 9],  4, -640364487);\r\n      d = HH(d, a, b, c, m[i+12], 11, -421815835);\r\n      c = HH(c, d, a, b, m[i+15], 16,  530742520);\r\n      b = HH(b, c, d, a, m[i+ 2], 23, -995338651);\r\n\r\n      a = II(a, b, c, d, m[i+ 0],  6, -198630844);\r\n      d = II(d, a, b, c, m[i+ 7], 10,  1126891415);\r\n      c = II(c, d, a, b, m[i+14], 15, -1416354905);\r\n      b = II(b, c, d, a, m[i+ 5], 21, -57434055);\r\n      a = II(a, b, c, d, m[i+12],  6,  1700485571);\r\n      d = II(d, a, b, c, m[i+ 3], 10, -1894986606);\r\n      c = II(c, d, a, b, m[i+10], 15, -1051523);\r\n      b = II(b, c, d, a, m[i+ 1], 21, -2054922799);\r\n      a = II(a, b, c, d, m[i+ 8],  6,  1873313359);\r\n      d = II(d, a, b, c, m[i+15], 10, -30611744);\r\n      c = II(c, d, a, b, m[i+ 6], 15, -1560198380);\r\n      b = II(b, c, d, a, m[i+13], 21,  1309151649);\r\n      a = II(a, b, c, d, m[i+ 4],  6, -145523070);\r\n      d = II(d, a, b, c, m[i+11], 10, -1120210379);\r\n      c = II(c, d, a, b, m[i+ 2], 15,  718787259);\r\n      b = II(b, c, d, a, m[i+ 9], 21, -343485551);\r\n\r\n      a = (a + aa) >>> 0;\r\n      b = (b + bb) >>> 0;\r\n      c = (c + cc) >>> 0;\r\n      d = (d + dd) >>> 0;\r\n    }\r\n\r\n    return crypt.endian([a, b, c, d]);\r\n  };\r\n\r\n  // Auxiliary functions\r\n  md5._ff  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (b & c | ~b & d) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n  md5._gg  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (b & d | c & ~d) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n  md5._hh  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (b ^ c ^ d) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n  md5._ii  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n\r\n  // Package private blocksize\r\n  md5._blocksize = 16;\r\n  md5._digestsize = 16;\r\n\r\n  module.exports = function (message, options) {\r\n    if (message === undefined || message === null)\r\n      throw new Error('Illegal argument ' + message);\r\n\r\n    var digestbytes = crypt.wordsToBytes(md5(message, options));\r\n    return options && options.asBytes ? digestbytes :\r\n        options && options.asString ? bin.bytesToString(digestbytes) :\r\n        crypt.bytesToHex(digestbytes);\r\n  };\r\n\r\n})();\r\n","var simpleIsEqual = function simpleIsEqual(a, b) {\n  return a === b;\n};\n\nfunction index (resultFn) {\n  var isEqual = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : simpleIsEqual;\n\n  var lastThis = void 0;\n  var lastArgs = [];\n  var lastResult = void 0;\n  var calledOnce = false;\n\n  var isNewArgEqualToLast = function isNewArgEqualToLast(newArg, index) {\n    return isEqual(newArg, lastArgs[index]);\n  };\n\n  var result = function result() {\n    for (var _len = arguments.length, newArgs = Array(_len), _key = 0; _key < _len; _key++) {\n      newArgs[_key] = arguments[_key];\n    }\n\n    if (calledOnce && lastThis === this && newArgs.length === lastArgs.length && newArgs.every(isNewArgEqualToLast)) {\n      return lastResult;\n    }\n\n    calledOnce = true;\n    lastThis = this;\n    lastArgs = newArgs;\n    lastResult = resultFn.apply(this, newArgs);\n    return lastResult;\n  };\n\n  return result;\n}\n\nexport default index;\n","(function(){\n  var _global = this;\n\n  /**\n   * JS Implementation of MurmurHash2\n   *\n   * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n   * @see http://github.com/garycourt/murmurhash-js\n   * @author <a href=\"mailto:aappleby@gmail.com\">Austin Appleby</a>\n   * @see http://sites.google.com/site/murmurhash/\n   *\n   * @param {string} str ASCII only\n   * @param {number} seed Positive integer only\n   * @return {number} 32-bit positive integer hash\n   */\n  function MurmurHashV2(str, seed) {\n    var\n      l = str.length,\n      h = seed ^ l,\n      i = 0,\n      k;\n\n    while (l >= 4) {\n      k =\n        ((str.charCodeAt(i) & 0xff)) |\n        ((str.charCodeAt(++i) & 0xff) << 8) |\n        ((str.charCodeAt(++i) & 0xff) << 16) |\n        ((str.charCodeAt(++i) & 0xff) << 24);\n\n      k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n      k ^= k >>> 24;\n      k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n\n    h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)) ^ k;\n\n      l -= 4;\n      ++i;\n    }\n\n    switch (l) {\n    case 3: h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n    case 2: h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n    case 1: h ^= (str.charCodeAt(i) & 0xff);\n            h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n    }\n\n    h ^= h >>> 13;\n    h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n    h ^= h >>> 15;\n\n    return h >>> 0;\n  };\n\n  /**\n   * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)\n   *\n   * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n   * @see http://github.com/garycourt/murmurhash-js\n   * @author <a href=\"mailto:aappleby@gmail.com\">Austin Appleby</a>\n   * @see http://sites.google.com/site/murmurhash/\n   *\n   * @param {string} key ASCII only\n   * @param {number} seed Positive integer only\n   * @return {number} 32-bit positive integer hash\n   */\n  function MurmurHashV3(key, seed) {\n    var remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i;\n\n    remainder = key.length & 3; // key.length % 4\n    bytes = key.length - remainder;\n    h1 = seed;\n    c1 = 0xcc9e2d51;\n    c2 = 0x1b873593;\n    i = 0;\n\n    while (i < bytes) {\n        k1 =\n          ((key.charCodeAt(i) & 0xff)) |\n          ((key.charCodeAt(++i) & 0xff) << 8) |\n          ((key.charCodeAt(++i) & 0xff) << 16) |\n          ((key.charCodeAt(++i) & 0xff) << 24);\n      ++i;\n\n      k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;\n      k1 = (k1 << 15) | (k1 >>> 17);\n      k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;\n\n      h1 ^= k1;\n          h1 = (h1 << 13) | (h1 >>> 19);\n      h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;\n      h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));\n    }\n\n    k1 = 0;\n\n    switch (remainder) {\n      case 3: k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;\n      case 2: k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;\n      case 1: k1 ^= (key.charCodeAt(i) & 0xff);\n\n      k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;\n      k1 = (k1 << 15) | (k1 >>> 17);\n      k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;\n      h1 ^= k1;\n    }\n\n    h1 ^= key.length;\n\n    h1 ^= h1 >>> 16;\n    h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;\n    h1 ^= h1 >>> 13;\n    h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;\n    h1 ^= h1 >>> 16;\n\n    return h1 >>> 0;\n  }\n\n  var murmur = MurmurHashV3;\n  murmur.v2 = MurmurHashV2;\n  murmur.v3 = MurmurHashV3;\n\n  if (typeof(module) != 'undefined') {\n    module.exports = murmur;\n  } else {\n    var _previousRoot = _global.murmur;\n    murmur.noConflict = function() {\n      _global.murmur = _previousRoot;\n      return murmur;\n    }\n    _global.murmur = murmur;\n  }\n}());\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar match = String.prototype.match;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n    [].__proto__ === Array.prototype // eslint-disable-line no-proto\n        ? function (O) {\n            return O.__proto__; // eslint-disable-line no-proto\n        }\n        : null\n);\n\nvar inspectCustom = require('./util.inspect').custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\nvar toStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag !== 'undefined' ? Symbol.toStringTag : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n    var opts = options || {};\n\n    if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n        throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n    }\n    if (\n        has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n            ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n            : opts.maxStringLength !== null\n        )\n    ) {\n        throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n    }\n    var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n    if (typeof customInspect !== 'boolean') {\n        throw new TypeError('option \"customInspect\", if provided, must be `true` or `false`');\n    }\n\n    if (\n        has(opts, 'indent')\n        && opts.indent !== null\n        && opts.indent !== '\\t'\n        && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n    ) {\n        throw new TypeError('options \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n    }\n\n    if (typeof obj === 'undefined') {\n        return 'undefined';\n    }\n    if (obj === null) {\n        return 'null';\n    }\n    if (typeof obj === 'boolean') {\n        return obj ? 'true' : 'false';\n    }\n\n    if (typeof obj === 'string') {\n        return inspectString(obj, opts);\n    }\n    if (typeof obj === 'number') {\n        if (obj === 0) {\n            return Infinity / obj > 0 ? '0' : '-0';\n        }\n        return String(obj);\n    }\n    if (typeof obj === 'bigint') {\n        return String(obj) + 'n';\n    }\n\n    var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n    if (typeof depth === 'undefined') { depth = 0; }\n    if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n        return isArray(obj) ? '[Array]' : '[Object]';\n    }\n\n    var indent = getIndent(opts, depth);\n\n    if (typeof seen === 'undefined') {\n        seen = [];\n    } else if (indexOf(seen, obj) >= 0) {\n        return '[Circular]';\n    }\n\n    function inspect(value, from, noIndent) {\n        if (from) {\n            seen = seen.slice();\n            seen.push(from);\n        }\n        if (noIndent) {\n            var newOpts = {\n                depth: opts.depth\n            };\n            if (has(opts, 'quoteStyle')) {\n                newOpts.quoteStyle = opts.quoteStyle;\n            }\n            return inspect_(value, newOpts, depth + 1, seen);\n        }\n        return inspect_(value, opts, depth + 1, seen);\n    }\n\n    if (typeof obj === 'function') {\n        var name = nameOf(obj);\n        var keys = arrObjKeys(obj, inspect);\n        return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + keys.join(', ') + ' }' : '');\n    }\n    if (isSymbol(obj)) {\n        var symString = hasShammedSymbols ? String(obj).replace(/^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n        return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n    }\n    if (isElement(obj)) {\n        var s = '<' + String(obj.nodeName).toLowerCase();\n        var attrs = obj.attributes || [];\n        for (var i = 0; i < attrs.length; i++) {\n            s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n        }\n        s += '>';\n        if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n        s += '</' + String(obj.nodeName).toLowerCase() + '>';\n        return s;\n    }\n    if (isArray(obj)) {\n        if (obj.length === 0) { return '[]'; }\n        var xs = arrObjKeys(obj, inspect);\n        if (indent && !singleLineValues(xs)) {\n            return '[' + indentedJoin(xs, indent) + ']';\n        }\n        return '[ ' + xs.join(', ') + ' ]';\n    }\n    if (isError(obj)) {\n        var parts = arrObjKeys(obj, inspect);\n        if (parts.length === 0) { return '[' + String(obj) + ']'; }\n        return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';\n    }\n    if (typeof obj === 'object' && customInspect) {\n        if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n            return obj[inspectSymbol]();\n        } else if (typeof obj.inspect === 'function') {\n            return obj.inspect();\n        }\n    }\n    if (isMap(obj)) {\n        var mapParts = [];\n        mapForEach.call(obj, function (value, key) {\n            mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n        });\n        return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n    }\n    if (isSet(obj)) {\n        var setParts = [];\n        setForEach.call(obj, function (value) {\n            setParts.push(inspect(value, obj));\n        });\n        return collectionOf('Set', setSize.call(obj), setParts, indent);\n    }\n    if (isWeakMap(obj)) {\n        return weakCollectionOf('WeakMap');\n    }\n    if (isWeakSet(obj)) {\n        return weakCollectionOf('WeakSet');\n    }\n    if (isWeakRef(obj)) {\n        return weakCollectionOf('WeakRef');\n    }\n    if (isNumber(obj)) {\n        return markBoxed(inspect(Number(obj)));\n    }\n    if (isBigInt(obj)) {\n        return markBoxed(inspect(bigIntValueOf.call(obj)));\n    }\n    if (isBoolean(obj)) {\n        return markBoxed(booleanValueOf.call(obj));\n    }\n    if (isString(obj)) {\n        return markBoxed(inspect(String(obj)));\n    }\n    if (!isDate(obj) && !isRegExp(obj)) {\n        var ys = arrObjKeys(obj, inspect);\n        var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n        var protoTag = obj instanceof Object ? '' : 'null prototype';\n        var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? toStr(obj).slice(8, -1) : protoTag ? 'Object' : '';\n        var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n        var tag = constructorTag + (stringTag || protoTag ? '[' + [].concat(stringTag || [], protoTag || []).join(': ') + '] ' : '');\n        if (ys.length === 0) { return tag + '{}'; }\n        if (indent) {\n            return tag + '{' + indentedJoin(ys, indent) + '}';\n        }\n        return tag + '{ ' + ys.join(', ') + ' }';\n    }\n    return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n    var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n    return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n    return String(s).replace(/\"/g, '&quot;');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n    if (hasShammedSymbols) {\n        return obj && typeof obj === 'object' && obj instanceof Symbol;\n    }\n    if (typeof obj === 'symbol') {\n        return true;\n    }\n    if (!obj || typeof obj !== 'object' || !symToString) {\n        return false;\n    }\n    try {\n        symToString.call(obj);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nfunction isBigInt(obj) {\n    if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n        return false;\n    }\n    try {\n        bigIntValueOf.call(obj);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n    return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n    return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n    if (f.name) { return f.name; }\n    var m = match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n    if (m) { return m[1]; }\n    return null;\n}\n\nfunction indexOf(xs, x) {\n    if (xs.indexOf) { return xs.indexOf(x); }\n    for (var i = 0, l = xs.length; i < l; i++) {\n        if (xs[i] === x) { return i; }\n    }\n    return -1;\n}\n\nfunction isMap(x) {\n    if (!mapSize || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        mapSize.call(x);\n        try {\n            setSize.call(x);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof Map; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakMap(x) {\n    if (!weakMapHas || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakMapHas.call(x, weakMapHas);\n        try {\n            weakSetHas.call(x, weakSetHas);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakRef(x) {\n    if (!weakRefDeref || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakRefDeref.call(x);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nfunction isSet(x) {\n    if (!setSize || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        setSize.call(x);\n        try {\n            mapSize.call(x);\n        } catch (m) {\n            return true;\n        }\n        return x instanceof Set; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakSet(x) {\n    if (!weakSetHas || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakSetHas.call(x, weakSetHas);\n        try {\n            weakMapHas.call(x, weakMapHas);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isElement(x) {\n    if (!x || typeof x !== 'object') { return false; }\n    if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n        return true;\n    }\n    return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n    if (str.length > opts.maxStringLength) {\n        var remaining = str.length - opts.maxStringLength;\n        var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n        return inspectString(str.slice(0, opts.maxStringLength), opts) + trailer;\n    }\n    // eslint-disable-next-line no-control-regex\n    var s = str.replace(/(['\\\\])/g, '\\\\$1').replace(/[\\x00-\\x1f]/g, lowbyte);\n    return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n    var n = c.charCodeAt(0);\n    var x = {\n        8: 'b',\n        9: 't',\n        10: 'n',\n        12: 'f',\n        13: 'r'\n    }[n];\n    if (x) { return '\\\\' + x; }\n    return '\\\\x' + (n < 0x10 ? '0' : '') + n.toString(16).toUpperCase();\n}\n\nfunction markBoxed(str) {\n    return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n    return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n    var joinedEntries = indent ? indentedJoin(entries, indent) : entries.join(', ');\n    return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n    for (var i = 0; i < xs.length; i++) {\n        if (indexOf(xs[i], '\\n') >= 0) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction getIndent(opts, depth) {\n    var baseIndent;\n    if (opts.indent === '\\t') {\n        baseIndent = '\\t';\n    } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n        baseIndent = Array(opts.indent + 1).join(' ');\n    } else {\n        return null;\n    }\n    return {\n        base: baseIndent,\n        prev: Array(depth + 1).join(baseIndent)\n    };\n}\n\nfunction indentedJoin(xs, indent) {\n    if (xs.length === 0) { return ''; }\n    var lineJoiner = '\\n' + indent.prev + indent.base;\n    return lineJoiner + xs.join(',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n    var isArr = isArray(obj);\n    var xs = [];\n    if (isArr) {\n        xs.length = obj.length;\n        for (var i = 0; i < obj.length; i++) {\n            xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n        }\n    }\n    var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n    var symMap;\n    if (hasShammedSymbols) {\n        symMap = {};\n        for (var k = 0; k < syms.length; k++) {\n            symMap['$' + syms[k]] = syms[k];\n        }\n    }\n\n    for (var key in obj) { // eslint-disable-line no-restricted-syntax\n        if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n        if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n        if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n            // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n            continue; // eslint-disable-line no-restricted-syntax, no-continue\n        } else if ((/[^\\w$]/).test(key)) {\n            xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n        } else {\n            xs.push(key + ': ' + inspect(obj[key], obj));\n        }\n    }\n    if (typeof gOPS === 'function') {\n        for (var j = 0; j < syms.length; j++) {\n            if (isEnumerable.call(obj, syms[j])) {\n                xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n            }\n        }\n    }\n    return xs;\n}\n","module.exports = require('util').inspect;\n","'use strict';\n\nvar numberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t}\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (numberIsNaN(a) && numberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Object);\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\treturn typeof Object.is === 'function' ? Object.is : implementation;\n};\n","'use strict';\n\nvar getPolyfill = require('./polyfill');\nvar define = require('define-properties');\n\nmodule.exports = function shimObjectIs() {\n\tvar polyfill = getPolyfill();\n\tdefine(Object, { is: polyfill }, {\n\t\tis: function testObjectIs() {\n\t\t\treturn Object.is !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = require('./isArguments'); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n","'use strict';\n\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","'use strict';\n\n// modified from https://github.com/es-shims/es6-shim\nvar keys = require('object-keys');\nvar canBeObject = function (obj) {\n\treturn typeof obj !== 'undefined' && obj !== null;\n};\nvar hasSymbols = require('has-symbols/shams')();\nvar callBound = require('call-bind/callBound');\nvar toObject = Object;\nvar $push = callBound('Array.prototype.push');\nvar $propIsEnumerable = callBound('Object.prototype.propertyIsEnumerable');\nvar originalGetSymbols = hasSymbols ? Object.getOwnPropertySymbols : null;\n\n// eslint-disable-next-line no-unused-vars\nmodule.exports = function assign(target, source1) {\n\tif (!canBeObject(target)) { throw new TypeError('target must be an object'); }\n\tvar objTarget = toObject(target);\n\tvar s, source, i, props, syms, value, key;\n\tfor (s = 1; s < arguments.length; ++s) {\n\t\tsource = toObject(arguments[s]);\n\t\tprops = keys(source);\n\t\tvar getSymbols = hasSymbols && (Object.getOwnPropertySymbols || originalGetSymbols);\n\t\tif (getSymbols) {\n\t\t\tsyms = getSymbols(source);\n\t\t\tfor (i = 0; i < syms.length; ++i) {\n\t\t\t\tkey = syms[i];\n\t\t\t\tif ($propIsEnumerable(source, key)) {\n\t\t\t\t\t$push(props, key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (i = 0; i < props.length; ++i) {\n\t\t\tkey = props[i];\n\t\t\tvalue = source[key];\n\t\t\tif ($propIsEnumerable(source, key)) {\n\t\t\t\tobjTarget[key] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn objTarget;\n};\n","'use strict';\n\nvar defineProperties = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind.apply(getPolyfill());\n// eslint-disable-next-line no-unused-vars\nvar bound = function assign(target, source1) {\n\treturn polyfill(Object, arguments);\n};\n\ndefineProperties(bound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = bound;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar lacksProperEnumerationOrder = function () {\n\tif (!Object.assign) {\n\t\treturn false;\n\t}\n\t/*\n\t * v8, specifically in node 4.x, has a bug with incorrect property enumeration order\n\t * note: this does not detect the bug unless there's 20 characters\n\t */\n\tvar str = 'abcdefghijklmnopqrst';\n\tvar letters = str.split('');\n\tvar map = {};\n\tfor (var i = 0; i < letters.length; ++i) {\n\t\tmap[letters[i]] = letters[i];\n\t}\n\tvar obj = Object.assign({}, map);\n\tvar actual = '';\n\tfor (var k in obj) {\n\t\tactual += k;\n\t}\n\treturn str !== actual;\n};\n\nvar assignHasPendingExceptions = function () {\n\tif (!Object.assign || !Object.preventExtensions) {\n\t\treturn false;\n\t}\n\t/*\n\t * Firefox 37 still has \"pending exception\" logic in its Object.assign implementation,\n\t * which is 72% slower than our shim, and Firefox 40's native implementation.\n\t */\n\tvar thrower = Object.preventExtensions({ 1: 2 });\n\ttry {\n\t\tObject.assign(thrower, 'xy');\n\t} catch (e) {\n\t\treturn thrower[1] === 'y';\n\t}\n\treturn false;\n};\n\nmodule.exports = function getPolyfill() {\n\tif (!Object.assign) {\n\t\treturn implementation;\n\t}\n\tif (lacksProperEnumerationOrder()) {\n\t\treturn implementation;\n\t}\n\tif (assignHasPendingExceptions()) {\n\t\treturn implementation;\n\t}\n\treturn Object.assign;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar getPolyfill = require('./polyfill');\n\nmodule.exports = function shimAssign() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tObject,\n\t\t{ assign: polyfill },\n\t\t{ assign: function () { return Object.assign !== polyfill; } }\n\t);\n\treturn polyfill;\n};\n","'use strict';\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar flagsBound = callBind(implementation);\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar supportsDescriptors = require('define-properties').supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\nvar $TypeError = TypeError;\n\nmodule.exports = function getPolyfill() {\n\tif (!supportsDescriptors) {\n\t\tthrow new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tif ((/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n","'use strict';\n\nvar supportsDescriptors = require('define-properties').supportsDescriptors;\nvar getPolyfill = require('./polyfill');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bind/callBound');\nvar inspect = require('object-inspect');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n","'use strict';\nmodule.exports = path => {\n\tconst isExtendedLengthPath = /^\\\\\\\\\\?\\\\/.test(path);\n\tconst hasNonAscii = /[^\\u0000-\\u0080]+/.test(path); // eslint-disable-line no-control-regex\n\n\tif (isExtendedLengthPath || hasNonAscii) {\n\t\treturn path;\n\t}\n\n\treturn path.replace(/\\\\/g, '/');\n};\n","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n  byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n  var i = offset || 0;\n  var bth = byteToHex;\n  // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n  return ([bth[buf[i++]], bth[buf[i++]], \n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]]]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","// Unique ID creation requires a high quality random # generator.  In node.js\n// this is pretty straight-forward - we use the crypto API.\n\nvar crypto = require('crypto');\n\nmodule.exports = function nodeRNG() {\n  return crypto.randomBytes(16);\n};\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n  var i = buf && offset || 0;\n  var b = buf || [];\n\n  options = options || {};\n  var node = options.node || _nodeId;\n  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n  // node and clockseq need to be initialized to random values if they're not\n  // specified.  We do this lazily to minimize issues related to insufficient\n  // system entropy.  See #189\n  if (node == null || clockseq == null) {\n    var seedBytes = rng();\n    if (node == null) {\n      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n      node = _nodeId = [\n        seedBytes[0] | 0x01,\n        seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n      ];\n    }\n    if (clockseq == null) {\n      // Per 4.2.2, randomize (14 bit) clockseq\n      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n    }\n  }\n\n  // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n  // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n  // Time since last uuid creation (in msecs)\n  var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n  // Per 4.2.1.2, Bump clockseq on clock regression\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  }\n\n  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  }\n\n  // Per 4.2.1.2 Throw error if too many uuids are requested\n  if (nsecs >= 10000) {\n    throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n  }\n\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq;\n\n  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n  msecs += 12219292800000;\n\n  // `time_low`\n  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n  b[i++] = tl >>> 24 & 0xff;\n  b[i++] = tl >>> 16 & 0xff;\n  b[i++] = tl >>> 8 & 0xff;\n  b[i++] = tl & 0xff;\n\n  // `time_mid`\n  var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff;\n\n  // `time_high_and_version`\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n  b[i++] = tmh >>> 16 & 0xff;\n\n  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n  b[i++] = clockseq >>> 8 | 0x80;\n\n  // `clock_seq_low`\n  b[i++] = clockseq & 0xff;\n\n  // `node`\n  for (var n = 0; n < 6; ++n) {\n    b[i + n] = node[n];\n  }\n\n  return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n  var i = buf && offset || 0;\n\n  if (typeof(options) == 'string') {\n    buf = options === 'binary' ? new Array(16) : null;\n    options = null;\n  }\n  options = options || {};\n\n  var rnds = options.random || (options.rng || rng)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = (rnds[6] & 0x0f) | 0x40;\n  rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    for (var ii = 0; ii < 16; ++ii) {\n      buf[i + ii] = rnds[ii];\n    }\n  }\n\n  return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","'use strict';\n\nvar isString = require('is-string');\nvar isNumber = require('is-number-object');\nvar isBoolean = require('is-boolean-object');\nvar isSymbol = require('is-symbol');\nvar isBigInt = require('is-bigint');\n\n// eslint-disable-next-line consistent-return\nmodule.exports = function whichBoxedPrimitive(value) {\n\t// eslint-disable-next-line eqeqeq\n\tif (value == null || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\treturn null;\n\t}\n\tif (isString(value)) {\n\t\treturn 'String';\n\t}\n\tif (isNumber(value)) {\n\t\treturn 'Number';\n\t}\n\tif (isBoolean(value)) {\n\t\treturn 'Boolean';\n\t}\n\tif (isSymbol(value)) {\n\t\treturn 'Symbol';\n\t}\n\tif (isBigInt(value)) {\n\t\treturn 'BigInt';\n\t}\n};\n","'use strict';\n\nvar isMap = require('is-map');\nvar isSet = require('is-set');\nvar isWeakMap = require('is-weakmap');\nvar isWeakSet = require('is-weakset');\n\nmodule.exports = function whichCollection(value) {\n\tif (value && typeof value === 'object') {\n\t\tif (isMap(value)) {\n\t\t\treturn 'Map';\n\t\t}\n\t\tif (isSet(value)) {\n\t\t\treturn 'Set';\n\t\t}\n\t\tif (isWeakMap(value)) {\n\t\t\treturn 'WeakMap';\n\t\t}\n\t\tif (isWeakSet(value)) {\n\t\t\treturn 'WeakSet';\n\t\t}\n\t}\n\treturn false;\n};\n","'use strict';\n\nvar forEach = require('foreach');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasSymbols = require('has-symbols')();\nvar hasToStringTag = hasSymbols && typeof Symbol.toStringTag === 'symbol';\n\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tif (typeof global[typedArray] === 'function') {\n\t\t\tvar arr = new global[typedArray]();\n\t\t\tif (!(Symbol.toStringTag in arr)) {\n\t\t\t\tthrow new EvalError('this engine has support for Symbol.toStringTag, but ' + typedArray + ' does not have the property! Please report this.');\n\t\t\t}\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar foundName = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!foundName) {\n\t\t\ttry {\n\t\t\t\tvar name = getter.call(value);\n\t\t\t\tif (name === typedArray) {\n\t\t\t\t\tfoundName = name;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t}\n\t});\n\treturn foundName;\n};\n\nvar isTypedArray = require('is-typed-array');\n\nmodule.exports = function whichTypedArray(value) {\n\tif (!isTypedArray(value)) { return false; }\n\tif (!hasToStringTag) { return $slice($toString(value), 8, -1); }\n\treturn tryTypedArrays(value);\n};\n","// TODO: comment on why it works this way\n\nlet send;\n\nmodule.exports = { send };\n","const q = require('./query');\nconst injected = require('./injected');\n\nfunction send(name, args) {\n  return injected.send(name, args);\n}\n\nasync function runImport(name, func) {\n  await send('api/start-import', { budgetName: name });\n  try {\n    await func();\n  } catch (e) {\n    await send('api/abort-import');\n    throw e;\n  }\n  await send('api/finish-import');\n}\n\nasync function loadBudget(budgetId) {\n  return send('api/load-budget', { id: budgetId });\n}\n\nasync function batchBudgetUpdates(func) {\n  await send('api/batch-budget-start');\n  try {\n    await func();\n  } finally {\n    await send('api/batch-budget-end');\n  }\n}\n\nfunction runQuery(query) {\n  return send('api/query', { query: query.serialize() });\n}\n\nfunction getBudgetMonths() {\n  return send('api/budget-months');\n}\n\nfunction getBudgetMonth(month) {\n  return send('api/budget-month', { month });\n}\n\nfunction setBudgetAmount(month, categoryId, value) {\n  return send('api/budget-set-amount', { month, categoryId, amount: value });\n}\n\nfunction setBudgetCarryover(month, categoryId, flag) {\n  return send('api/budget-set-carryover', { month, categoryId, flag });\n}\n\nfunction addTransactions(accountId, transactions) {\n  return send('api/transactions-add', { accountId, transactions });\n}\n\nfunction importTransactions(accountId, transactions) {\n  return send('api/transactions-import', { accountId, transactions });\n}\n\nfunction getTransactions(accountId, startDate, endDate) {\n  return send('api/transactions-get', { accountId, startDate, endDate });\n}\n\nfunction filterTransactions(accountId, text) {\n  return send('api/transactions-filter', { accountId, text });\n}\n\nfunction updateTransaction(id, fields) {\n  return send('api/transaction-update', { id, fields });\n}\n\nfunction deleteTransaction(id) {\n  return send('api/transaction-delete', { id });\n}\n\nfunction getAccounts() {\n  return send('api/accounts-get');\n}\n\nfunction createAccount(account, initialBalance) {\n  return send('api/account-create', { account, initialBalance });\n}\n\nfunction updateAccount(id, fields) {\n  return send('api/account-update', { id, fields });\n}\n\nfunction closeAccount(id, transferAccountId, transferCategoryId) {\n  return send('api/account-close', {\n    id,\n    transferAccountId,\n    transferCategoryId\n  });\n}\n\nfunction reopenAccount(id) {\n  return send('api/account-reopen', { id });\n}\n\nfunction deleteAccount(id) {\n  return send('api/account-delete', { id });\n}\n\nfunction getCategoryGroups() {\n  return send('api/categories-get', { grouped: true });\n}\n\nfunction createCategoryGroup(group) {\n  return send('api/category-group-create', { group });\n}\n\nfunction updateCategoryGroup(id, fields) {\n  return send('api/category-group-update', { id, fields });\n}\n\nfunction deleteCategoryGroup(id, transferCategoryId) {\n  return send('api/category-group-delete', { id, transferCategoryId });\n}\n\nfunction getCategories() {\n  return send('api/categories-get', { grouped: false });\n}\n\nfunction createCategory(category) {\n  return send('api/category-create', { category });\n}\n\nfunction updateCategory(id, fields) {\n  return send('api/category-update', { id, fields });\n}\n\nfunction deleteCategory(id, transferCategoryId) {\n  return send('api/category-delete', { id, transferCategoryId });\n}\n\nfunction getPayees() {\n  return send('api/payees-get');\n}\n\nfunction createPayee(payee) {\n  return send('api/payee-create', { payee });\n}\n\nfunction updatePayee(id, fields) {\n  return send('api/payee-update', { id, fields });\n}\n\nfunction deletePayee(id) {\n  return send('api/payee-delete', { id });\n}\n\nfunction getPayeeRules(payeeId) {\n  return send('api/payee-rules-get', { payeeId });\n}\n\nfunction createPayeeRule(payeeId, rule) {\n  return send('api/payee-rule-create', { payee_id: payeeId, rule });\n}\n\nfunction updatePayeeRule(id, fields) {\n  return send('api/payee-rule-update', { id, fields });\n}\n\nfunction deletePayeeRule(id) {\n  return send('api/payee-rule-delete', { id });\n}\n\nmodule.exports = {\n  runImport,\n\n  runQuery,\n  q,\n\n  loadBudget,\n  batchBudgetUpdates,\n  getBudgetMonths,\n  getBudgetMonth,\n  setBudgetAmount,\n  setBudgetCarryover,\n\n  addTransactions,\n  importTransactions,\n  filterTransactions,\n  getTransactions,\n  updateTransaction,\n  deleteTransaction,\n\n  getAccounts,\n  createAccount,\n  updateAccount,\n  closeAccount,\n  reopenAccount,\n  deleteAccount,\n\n  getCategories,\n  createCategoryGroup,\n  updateCategoryGroup,\n  deleteCategoryGroup,\n  createCategory,\n  updateCategory,\n  deleteCategory,\n\n  getPayees,\n  createPayee,\n  updatePayee,\n  deletePayee,\n  getPayeeRules,\n  createPayeeRule,\n  deletePayeeRule,\n  updatePayeeRule\n};\n","class Query {\n  constructor(state) {\n    this.state = {\n      filterExpressions: state.filterExpressions || [],\n      selectExpressions: state.selectExpressions || [],\n      groupExpressions: state.groupExpressions || [],\n      orderExpressions: state.orderExpressions || [],\n      calculation: false,\n      rawMode: false,\n      withDead: false,\n      limit: null,\n      offset: null,\n      ...state\n    };\n  }\n\n  filter(expr) {\n    return new Query({\n      ...this.state,\n      filterExpressions: [...this.state.filterExpressions, expr]\n    });\n  }\n\n  unfilter(exprs) {\n    let exprSet = new Set(exprs);\n    return new Query({\n      ...this.state,\n      filterExpressions: this.state.filterExpressions.filter(\n        expr => !exprSet.has(Object.keys(expr)[0])\n      )\n    });\n  }\n\n  select(exprs = []) {\n    if (!Array.isArray(exprs)) {\n      exprs = [exprs];\n    }\n\n    let query = new Query({ ...this.state, selectExpressions: exprs });\n    query.state.calculation = false;\n    return query;\n  }\n\n  calculate(expr) {\n    let query = this.select({ result: expr });\n    query.state.calculation = true;\n    return query;\n  }\n\n  groupBy(exprs) {\n    if (!Array.isArray(exprs)) {\n      exprs = [exprs];\n    }\n\n    return new Query({\n      ...this.state,\n      groupExpressions: [...this.state.groupExpressions, ...exprs]\n    });\n  }\n\n  orderBy(exprs) {\n    if (!Array.isArray(exprs)) {\n      exprs = [exprs];\n    }\n\n    return new Query({\n      ...this.state,\n      orderExpressions: [...this.state.orderExpressions, ...exprs]\n    });\n  }\n\n  limit(num) {\n    return new Query({ ...this.state, limit: num });\n  }\n\n  offset(num) {\n    return new Query({ ...this.state, offset: num });\n  }\n\n  raw() {\n    return new Query({ ...this.state, rawMode: true });\n  }\n\n  withDead() {\n    return new Query({ ...this.state, withDead: true });\n  }\n\n  options(opts) {\n    return new Query({ ...this.state, tableOptions: opts });\n  }\n\n  serialize() {\n    return this.state;\n  }\n}\n\nmodule.exports = function q(table) {\n  return new Query({ table });\n}\n","function amountToInteger(n) {\n  return Math.round(n * 100) | 0;\n}\n\nfunction integerToAmount(n) {\n  return parseFloat((n / 100).toFixed(2));\n}\n\nmodule.exports = { amountToInteger, integerToAmount };\n","const d = require('date-fns');\nconst normalizePathSep = require('slash');\nconst uuid = require('uuid');\nconst AdmZip = require('adm-zip');\nconst actual = require('@actual-app/api/methods');\nconst { amountToInteger } = require('@actual-app/api/utils');\n\n// Utils\n\nfunction mapAccountType(type) {\n  switch (type) {\n    case 'Cash':\n    case 'Checking':\n      return 'checking';\n    case 'CreditCard':\n      return 'credit';\n    case 'Savings':\n      return 'savings';\n    case 'InvestmentAccount':\n      return 'investment';\n    case 'Mortgage':\n      return 'mortgage';\n    default:\n      return 'other';\n  }\n}\n\nfunction sortByKey(arr, key) {\n  return [...arr].sort((item1, item2) => {\n    if (item1[key] < item2[key]) {\n      return -1;\n    } else if (item1[key] > item2[key]) {\n      return 1;\n    }\n    return 0;\n  });\n}\n\nfunction groupBy(arr, keyName) {\n  return arr.reduce(function(obj, item) {\n    var key = item[keyName];\n    if (!obj.hasOwnProperty(key)) {\n      obj[key] = [];\n    }\n    obj[key].push(item);\n    return obj;\n  }, {});\n}\n\nfunction _parse(value) {\n  if (typeof value === 'string') {\n    // We don't want parsing to take local timezone into account,\n    // which parsing a string does. Pass the integers manually to\n    // bypass it.\n\n    let [year, month, day] = value.split('-');\n    if (day != null) {\n      return new Date(parseInt(year), parseInt(month) - 1, parseInt(day));\n    } else if (month != null) {\n      return new Date(parseInt(year), parseInt(month) - 1, 1);\n    } else {\n      return new Date(parseInt(year), 0, 1);\n    }\n  }\n  return value;\n}\n\nfunction monthFromDate(date) {\n  return d.format(_parse(date), 'yyyy-MM');\n}\n\nfunction getCurrentMonth() {\n  return d.format(new Date(), 'yyyy-MM');\n}\n\n// Importer\n\nasync function importAccounts(data, entityIdMap) {\n  return Promise.all(\n    data.accounts.map(async account => {\n      if (!account.isTombstone) {\n        const id = await actual.createAccount({\n          type: mapAccountType(account.accountType),\n          name: account.accountName,\n          offbudget: account.onBudget ? false : true,\n          closed: account.hidden ? true : false\n        });\n        entityIdMap.set(account.entityId, id);\n      }\n    })\n  );\n}\n\nasync function importCategories(data, entityIdMap) {\n  const masterCategories = sortByKey(data.masterCategories, 'sortableIndex');\n\n  await Promise.all(\n    masterCategories.map(async masterCategory => {\n      if (\n        masterCategory.type === 'OUTFLOW' &&\n        !masterCategory.isTombstone &&\n        masterCategory.subCategories &&\n        masterCategory.subCategories.some(cat => !cat.isTombstone) > 0\n      ) {\n        const id = await actual.createCategoryGroup({\n          name: masterCategory.name,\n          is_income: false\n        });\n        entityIdMap.set(masterCategory.entityId, id);\n\n        if (masterCategory.subCategories) {\n          const subCategories = sortByKey(\n            masterCategory.subCategories,\n            'sortableIndex'\n          );\n          subCategories.reverse();\n\n          // This can't be done in parallel because sort order depends\n          // on insertion order\n          for (let category of subCategories) {\n            if (!category.isTombstone) {\n              const id = await actual.createCategory({\n                name: category.name,\n                group_id: entityIdMap.get(category.masterCategoryId)\n              });\n              entityIdMap.set(category.entityId, id);\n            }\n          }\n        }\n      }\n    })\n  );\n}\n\nasync function importPayees(data, entityIdMap) {\n  for (let payee of data.payees) {\n    if (!payee.isTombstone) {\n      let id = await actual.createPayee({\n        name: payee.name,\n        category: entityIdMap.get(payee.autoFillCategoryId) || null,\n        transfer_acct: entityIdMap.get(payee.targetAccountId) || null\n      });\n\n      // TODO: import payee rules\n\n      entityIdMap.set(payee.entityId, id);\n    }\n  }\n}\n\nasync function importTransactions(data, entityIdMap) {\n  const categories = await actual.getCategories();\n  const incomeCategoryId = categories.find(cat => cat.name === 'Income').id;\n  const accounts = await actual.getAccounts();\n  const payees = await actual.getPayees();\n\n  function getCategory(id) {\n    if (id == null || id === 'Category/__Split__') {\n      return null;\n    } else if (\n      id === 'Category/__ImmediateIncome__' ||\n      id === 'Category/__DeferredIncome__'\n    ) {\n      return incomeCategoryId;\n    }\n    return entityIdMap.get(id);\n  }\n\n  function isOffBudget(acctId) {\n    let acct = accounts.find(acct => acct.id === acctId);\n    if (!acct) {\n      throw new Error('Could not find account for transaction when importing');\n    }\n    return acct.offbudget;\n  }\n\n  // Go ahead and generate ids for all of the transactions so we can\n  // reliably resolve transfers\n  for (let transaction of data.transactions) {\n    entityIdMap.set(transaction.entityId, uuid.v4());\n  }\n\n  let sortOrder = 1;\n  let transactionsGrouped = groupBy(data.transactions, 'accountId');\n\n  await Promise.all(\n    Object.keys(transactionsGrouped).map(async accountId => {\n      let transactions = transactionsGrouped[accountId];\n\n      let toImport = transactions\n        .map(transaction => {\n          if (transaction.isTombstone) {\n            return;\n          }\n\n          let id = entityIdMap.get(transaction.entityId);\n          let transferId =\n            entityIdMap.get(transaction.transferTransactionId) || null;\n\n          let payee = null;\n          if (transferId) {\n            payee = payees.find(\n              p =>\n                p.transfer_acct === entityIdMap.get(transaction.targetAccountId)\n            ).id;\n          } else {\n            payee = entityIdMap.get(transaction.payeeId);\n          }\n\n          let newTransaction = {\n            id,\n            amount: amountToInteger(transaction.amount),\n            category: isOffBudget(entityIdMap.get(accountId))\n              ? null\n              : getCategory(transaction.categoryId),\n            date: transaction.date,\n            notes: transaction.memo || null,\n            payee,\n            transfer_id: transferId\n          };\n\n          newTransaction.subtransactions =\n            transaction.subTransactions &&\n            transaction.subTransactions.map((t, i) => {\n              return {\n                amount: amountToInteger(t.amount),\n                category: getCategory(t.categoryId)\n              };\n            });\n\n          return newTransaction;\n        })\n        .filter(x => x);\n\n      await actual.addTransactions(entityIdMap.get(accountId), toImport);\n    })\n  );\n}\n\nfunction fillInBudgets(data, categoryBudgets) {\n  // YNAB only contains entries for categories that have been actually\n  // budgeted. That would be fine except that we need to set the\n  // \"carryover\" flag on each month when carrying debt across months.\n  // To make sure our system has a chance to set this flag on each\n  // category, make sure a budget exists for every category of every\n  // month.\n  const budgets = [...categoryBudgets];\n  data.masterCategories.forEach(masterCategory => {\n    if (masterCategory.subCategories) {\n      masterCategory.subCategories.forEach(category => {\n        if (!budgets.find(b => b.categoryId === category.entityId)) {\n          budgets.push({\n            budgeted: 0,\n            categoryId: category.entityId\n          });\n        }\n      });\n    }\n  });\n  return budgets;\n}\n\nasync function importBudgets(data, entityIdMap) {\n  let budgets = sortByKey(data.monthlyBudgets, 'month');\n  let earliestMonth = monthFromDate(budgets[0].month);\n  let currentMonth = getCurrentMonth();\n\n  await actual.batchBudgetUpdates(async () => {\n    const carryoverFlags = {};\n\n    for (let budget of budgets) {\n      let filled = fillInBudgets(\n        data,\n        budget.monthlySubCategoryBudgets.filter(b => !b.isTombstone)\n      );\n\n      await Promise.all(\n        filled.map(async catBudget => {\n          let amount = amountToInteger(catBudget.budgeted);\n          let catId = entityIdMap.get(catBudget.categoryId);\n          let month = monthFromDate(budget.month);\n          if (!catId) {\n            return;\n          }\n\n          await actual.setBudgetAmount(month, catId, amount);\n\n          if (catBudget.overspendingHandling === 'AffectsBuffer') {\n            // Turn off the carryover flag so it doesn't propagate\n            // to future months\n            carryoverFlags[catId] = false;\n          } else if (\n            catBudget.overspendingHandling === 'Confined' ||\n            carryoverFlags[catId]\n          ) {\n            // Overspending has switched to carryover, set the\n            // flag so it propagates to future months\n            carryoverFlags[catId] = true;\n\n            await actual.setBudgetCarryover(month, catId, true);\n          }\n        })\n      );\n    }\n  });\n}\n\nfunction estimateRecentness(str) {\n  // The \"recentness\" is the total amount of changes that this device\n  // is aware of, which is estimated by summing up all of the version\n  // numbers that its aware of. This works because version numbers are\n  // increasing integers.\n  return str.split(',').reduce((total, version) => {\n    const [_, number] = version.split('-');\n    return total + parseInt(number);\n  }, 0);\n}\n\nfunction findLatestDevice(zipped, entries) {\n  let devices = entries\n    .map(entry => {\n      const contents = zipped.readFile(entry).toString('utf8');\n\n      let data;\n      try {\n        data = JSON.parse(contents);\n      } catch (e) {\n        return null;\n      }\n\n      if (data.hasFullKnowledge) {\n        return {\n          deviceGUID: data.deviceGUID,\n          shortName: data.shortDeviceId,\n          recentness: estimateRecentness(data.knowledge)\n        };\n      }\n\n      return null;\n    })\n    .filter(x => x);\n\n  devices = sortByKey(devices, 'recentness');\n  return devices[devices.length - 1].deviceGUID;\n}\n\nasync function doImport(data) {\n  const entityIdMap = new Map();\n\n  console.log('Importing Accounts...');\n  await importAccounts(data, entityIdMap);\n\n  console.log('Importing Categories...');\n  await importCategories(data, entityIdMap);\n\n  console.log('Importing Payees...');\n  await importPayees(data, entityIdMap);\n\n  console.log('Importing Transactions...');\n  await importTransactions(data, entityIdMap);\n\n  console.log('Importing Budgets...');\n  await importBudgets(data, entityIdMap);\n\n  console.log('Setting up...');\n}\n\nfunction getBudgetName(filepath) {\n  let unixFilepath = normalizePathSep(filepath);\n\n  if (!/\\.zip/.test(unixFilepath)) {\n    return null;\n  }\n\n  unixFilepath = unixFilepath.replace(/\\.zip$/, '').replace(/.ynab4$/, '');\n\n  // Most budgets are named like \"Budget~51938D82.ynab4\" but sometimes\n  // they are only \"Budget.ynab4\". We only want to grab the name\n  // before the ~ if it exists.\n  let m = unixFilepath.match(/([^/~]+)[^/]*$/);\n  if (!m) {\n    return null;\n  }\n  return m[1];\n}\n\nfunction getFile(entries, path) {\n  let files = entries.filter(e => e.entryName === path);\n  if (files.length === 0) {\n    throw new Error('Could not find file: ' + path);\n  }\n  if (files.length >= 2) {\n    throw new Error('File name matches multiple files: ' + path);\n  }\n  return files[0];\n}\n\nfunction join(...paths) {\n  return paths.slice(1).reduce((full, path) => {\n    return full + '/' + path.replace(/^\\//, '');\n  }, paths[0].replace(/\\/$/, ''));\n}\n\nasync function importBuffer(filepath, buffer) {\n  let budgetName = getBudgetName(filepath);\n\n  if (!budgetName) {\n    throw new Error('Not a YNAB4 file: ' + filepath);\n  }\n\n  let zipped = new AdmZip(buffer);\n  let entries = zipped.getEntries();\n\n  let root = '';\n  let dirMatch = entries[0].entryName.match(/([^/]*\\.ynab4)/);\n  if (dirMatch) {\n    root = dirMatch[1] + '/';\n  }\n\n  let metaStr = zipped.readFile(getFile(entries, root + 'Budget.ymeta'));\n  let meta = JSON.parse(metaStr.toString('utf8'));\n  let budgetPath = join(root, meta.relativeDataFolderName);\n\n  let deviceFiles = entries.filter(e =>\n    e.entryName.startsWith(join(budgetPath, 'devices'))\n  );\n  let deviceGUID = findLatestDevice(zipped, deviceFiles);\n\n  const yfullPath = join(budgetPath, deviceGUID, 'Budget.yfull');\n  let contents;\n  try {\n    contents = zipped.readFile(getFile(entries, yfullPath)).toString('utf8');\n  } catch (e) {\n    console.log(e);\n    throw new Error('Error reading Budget.yfull file');\n  }\n\n  let data;\n  try {\n    data = JSON.parse(contents);\n  } catch (e) {\n    throw new Error('Error parsing Budget.yull file');\n  }\n\n  return actual.runImport(budgetName, () => doImport(data));\n}\n\nmodule.exports = { importBuffer };\n","const d = require('date-fns');\nconst uuid = require('uuid');\nconst actual = require('@actual-app/api/methods');\nconst { amountToInteger } = require('@actual-app/api/utils');\n\nfunction amountFromYnab(amount) {\n  // ynabs multiplies amount by 1000 and actual by 100\n  // so, this function divides by 10\n  return Math.round(amount / 10);\n}\n\nfunction monthFromDate(date) {\n  let parts = date.split('-');\n  return parts[0] + '-' + parts[1];\n}\n\nfunction mapAccountType(type) {\n  switch (type) {\n    case 'cash':\n    case 'checking':\n      return 'checking';\n    case 'creditCard':\n    case 'lineOfCredit':\n      return 'credit';\n    case 'savings':\n      return 'savings';\n    case 'investmentAccount':\n      return 'investment';\n    case 'mortgage':\n      return 'mortgage';\n    default:\n      return 'other';\n  }\n}\n\nfunction sortByKey(arr, key) {\n  return [...arr].sort((item1, item2) => {\n    if (item1[key] < item2[key]) {\n      return -1;\n    } else if (item1[key] > item2[key]) {\n      return 1;\n    }\n    return 0;\n  });\n}\n\nfunction groupBy(arr, keyName) {\n  return arr.reduce(function(obj, item) {\n    var key = item[keyName];\n    if (!obj.hasOwnProperty(key)) {\n      obj[key] = [];\n    }\n    obj[key].push(item);\n    return obj;\n  }, {});\n}\n\nfunction importAccounts(data, entityIdMap) {\n  return Promise.all(\n    data.accounts.map(async account => {\n      if (!account.deleted) {\n        let id = await actual.createAccount({\n          type: mapAccountType(account.type),\n          name: account.name,\n          offbudget: account.on_budget ? false : true,\n          closed: account.closed\n        });\n        entityIdMap.set(account.id, id);\n      }\n    })\n  );\n}\n\nasync function importCategories(data, entityIdMap) {\n  // Hidden categories are put in its own group by YNAB,\n  // so it's already handled.\n\n  const categories = await actual.getCategories();\n  const incomeCatId = categories.find(cat => cat.name === 'Income').id;\n  const ynabIncomeCategories = ['To be Budgeted', 'Inflow: Ready to Assign'];\n\n  function checkSpecialCat(cat) {\n    if (\n      cat.category_group_id ===\n      data.category_groups.find(\n        group => group.name === 'Internal Master Category'\n      ).id\n    ) {\n      if (ynabIncomeCategories.includes(cat.name)) {\n        return 'income';\n      } else {\n        return 'internal';\n      }\n    } else if (\n      cat.category_group_id ===\n      data.category_groups.find(group => group.name === 'Credit Card Payments')\n        .id\n    ) {\n      return 'creditCard';\n    }\n  }\n  // Can't be done in parallel to have\n  // correct sort order.\n\n  for (let group of data.category_groups) {\n    if (!group.deleted) {\n      // Ignores internal category and credit cards\n      if (\n        group.name !== 'Internal Master Category' &&\n        group.name !== 'Credit Card Payments'\n      ) {\n        var groupId = await actual.createCategoryGroup({\n          name: group.name,\n          is_income: false\n        });\n        entityIdMap.set(group.id, groupId);\n      }\n\n      let cats = data.categories.filter(\n        cat => cat.category_group_id === group.id\n      );\n\n      for (let cat of cats.reverse()) {\n        if (!cat.deleted) {\n          let newCategory = {};\n          newCategory.name = cat.name;\n\n          // Handles special categories. Starting balance is a payee\n          // in YNAB so it's handled in importTransactions\n          switch (checkSpecialCat(cat)) {\n            case 'income': {\n              // doesn't create new category, only assigns id\n              let id = incomeCatId;\n              entityIdMap.set(cat.id, id);\n              break;\n            }\n            case 'creditCard': // ignores it\n            case 'internal': // uncategorized is ignored too, handled by actual\n              break;\n            default: {\n              newCategory.group_id = groupId;\n              let id = await actual.createCategory(newCategory);\n              entityIdMap.set(cat.id, id);\n              break;\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\nfunction importPayees(data, entityIdMap) {\n  return Promise.all(\n    data.payees.map(async payee => {\n      if (!payee.deleted) {\n        let id = await actual.createPayee({\n          name: payee.name\n        });\n        entityIdMap.set(payee.id, id);\n      }\n    })\n  );\n}\n\nasync function importTransactions(data, entityIdMap) {\n  const payees = await actual.getPayees();\n  const categories = await actual.getCategories();\n  const incomeCatId = categories.find(cat => cat.name === 'Income').id;\n  const startingBalanceCatId = categories.find(\n    cat => cat.name === 'Starting Balances'\n  ).id; //better way to do it?\n  const startingPayeeYNAB = data.payees.find(\n    payee => payee.name === 'Starting Balance'\n  ).id;\n\n  let transactionsGrouped = groupBy(data.transactions, 'account_id');\n  let subtransactionsGrouped = groupBy(data.subtransactions, 'transaction_id');\n\n  // Go ahead and generate ids for all of the transactions so we can\n  // reliably resolve transfers\n  for (let transaction of data.transactions) {\n    entityIdMap.set(transaction.id, uuid.v4());\n  }\n\n  await Promise.all(\n    Object.keys(transactionsGrouped).map(async accountId => {\n      let transactions = transactionsGrouped[accountId];\n\n      let toImport = transactions\n        .map(transaction => {\n          if (transaction.deleted) {\n            return null;\n          }\n\n          // Handle subtransactions\n          let subtransactions = subtransactionsGrouped[transaction.id];\n          if (subtransactions) {\n            subtransactions = subtransactions.map(subtrans => {\n              return {\n                amount: amountFromYnab(subtrans.amount),\n                category: entityIdMap.get(subtrans.category_id) || null,\n                notes: subtrans.memo\n              };\n            });\n          }\n\n          // Add transaction\n          let newTransaction = {\n            id: entityIdMap.get(transaction.id),\n            account: entityIdMap.get(transaction.account_id),\n            date: transaction.date,\n            amount: amountFromYnab(transaction.amount),\n            category: entityIdMap.get(transaction.category_id) || null,\n            cleared: ['cleared', 'reconciled'].includes(transaction.cleared),\n            notes: transaction.memo || null,\n            imported_id: transaction.import_id || null,\n            transfer_id:\n              entityIdMap.get(transaction.transfer_transaction_id) || null,\n            subtransactions: subtransactions\n          };\n\n          // Handle transfer payee\n          if (transaction.transfer_account_id) {\n            newTransaction.payee = payees.find(\n              p =>\n                p.transfer_acct ===\n                entityIdMap.get(transaction.transfer_account_id)\n            ).id;\n          } else {\n            newTransaction.payee = entityIdMap.get(transaction.payee_id);\n          }\n\n          // Handle starting balances\n          if (\n            transaction.payee_id === startingPayeeYNAB &&\n            entityIdMap.get(transaction.category_id) === incomeCatId\n          ) {\n            newTransaction.category = startingBalanceCatId;\n            newTransaction.payee = null;\n          }\n          return newTransaction;\n        })\n        .filter(x => x);\n\n      await actual.addTransactions(entityIdMap.get(accountId), toImport);\n    })\n  );\n}\n\nasync function importBudgets(data, entityIdMap) {\n  // There should be info in the docs to deal with\n  // no credit card category and how YNAB and Actual\n  // handle differently the amount To be Budgeted\n  // i.e. Actual considers the cc debt while YNAB doesn't\n  //\n  // Also, there could be a way to set rollover using\n  // Deferred Income Subcat and Immediate Income Subcat\n\n  let budgets = sortByKey(data.months, 'month');\n\n  const internalCatIdYnab = data.category_groups.find(\n    group => group.name === 'Internal Master Category'\n  ).id;\n  const creditcardCatIdYnab = data.category_groups.find(\n    group => group.name === 'Credit Card Payments'\n  ).id;\n\n  await actual.batchBudgetUpdates(async () => {\n    for (let budget of budgets) {\n      let month = monthFromDate(budget.month);\n\n      await Promise.all(\n        budget.categories.map(async catBudget => {\n          let catId = entityIdMap.get(catBudget.id);\n          let amount = catBudget.budgeted / 10;\n\n          if (\n            !catId ||\n            catBudget.category_group_id === internalCatIdYnab ||\n            catBudget.category_group_id === creditcardCatIdYnab\n          ) {\n            return;\n          }\n\n          await actual.setBudgetAmount(month, catId, amount);\n        })\n      );\n    }\n  });\n}\n\n// Utils\n\nasync function doImport(data) {\n  const entityIdMap = new Map();\n\n  console.log('Importing Accounts...');\n  await importAccounts(data, entityIdMap);\n\n  console.log('Importing Categories...');\n  await importCategories(data, entityIdMap);\n\n  console.log('Importing Payees...');\n  await importPayees(data, entityIdMap);\n\n  console.log('Importing Transactions...');\n  await importTransactions(data, entityIdMap);\n\n  console.log('Importing Budgets...');\n  await importBudgets(data, entityIdMap);\n\n  console.log('Setting up...');\n}\n\nasync function importYNAB5(data) {\n  if (data.data) {\n    data = data.data;\n  }\n\n  return actual.runImport(data.budget.name, () => doImport(data.budget));\n}\n\nmodule.exports = { importYNAB5 };\n","export default async function runMigration(db, uuid) {\n  function getValue(node) {\n    return node.expr != null ? node.expr : node.cachedValue;\n  }\n\n  db.execQuery(`\nCREATE TABLE zero_budget_months\n  (id TEXT PRIMARY KEY,\n   buffered INTEGER DEFAULT 0); \n\nCREATE TABLE zero_budgets\n  (id TEXT PRIMARY KEY,\n   month INTEGER,\n   category TEXT,\n   amount INTEGER DEFAULT 0,\n   carryover INTEGER DEFAULT 0);\n\nCREATE TABLE reflect_budgets\n  (id TEXT PRIMARY KEY,\n   month INTEGER,\n   category TEXT,\n   amount INTEGER DEFAULT 0,\n   carryover INTEGER DEFAULT 0);\n\nCREATE TABLE notes\n  (id TEXT PRIMARY KEY,\n   note TEXT);\n\nCREATE TABLE kvcache (key TEXT PRIMARY KEY, value TEXT);\nCREATE TABLE kvcache_key (id INTEGER PRIMARY KEY, key REAL);\n`);\n\n  // Migrate budget amounts and carryover\n  let budget = db.runQuery(\n    `SELECT * FROM spreadsheet_cells WHERE name LIKE 'budget%!budget-%'`,\n    [],\n    true\n  );\n  db.transaction(() => {\n    budget.map(monthBudget => {\n      let match = monthBudget.name.match(\n        /^(budget-report|budget)(\\d+)!budget-(.+)$/\n      );\n      if (match == null) {\n        console.log('Warning: invalid budget month name', monthBudget.name);\n        return;\n      }\n\n      let type = match[1];\n      let month = match[2].slice(0, 4) + '-' + match[2].slice(4);\n      let dbmonth = parseInt(match[2]);\n      let cat = match[3];\n\n      let amount = parseInt(getValue(monthBudget));\n      if (isNaN(amount)) {\n        amount = 0;\n      }\n\n      let sheetName = monthBudget.name.split('!')[0];\n      let carryover = db.runQuery(\n        'SELECT * FROM spreadsheet_cells WHERE name = ?',\n        [`${sheetName}!carryover-${cat}`],\n        true\n      );\n\n      let table = type === 'budget-report' ? 'reflect_budgets' : 'zero_budgets';\n      db.runQuery(\n        `INSERT INTO ${table} (id, month, category, amount, carryover) VALUES (?, ?, ?, ?, ?)`,\n        [\n          `${month}-${cat}`,\n          dbmonth,\n          cat,\n          amount,\n          carryover.length > 0 && getValue(carryover[0]) === 'true' ? 1 : 0\n        ]\n      );\n    });\n  });\n\n  // Migrate buffers\n  let buffers = db.runQuery(\n    `SELECT * FROM spreadsheet_cells WHERE name LIKE 'budget%!buffered'`,\n    [],\n    true\n  );\n  db.transaction(() => {\n    buffers.map(buffer => {\n      let match = buffer.name.match(/^budget(\\d+)!buffered$/);\n      if (match) {\n        let month = match[1].slice(0, 4) + '-' + match[1].slice(4);\n        let amount = parseInt(getValue(buffer));\n        if (isNaN(amount)) {\n          amount = 0;\n        }\n\n        db.runQuery(\n          `INSERT INTO zero_budget_months (id, buffered) VALUES (?, ?)`,\n          [month, amount]\n        );\n      }\n    });\n  });\n\n  // Migrate notes\n  let notes = db.runQuery(\n    `SELECT * FROM spreadsheet_cells WHERE name LIKE 'notes!%'`,\n    [],\n    true\n  );\n\n  let parseNote = str => {\n    try {\n      let value = JSON.parse(str);\n      return value && value !== '' ? value : null;\n    } catch (e) {\n      return null;\n    }\n  };\n\n  db.transaction(() => {\n    notes.forEach(note => {\n      let parsed = parseNote(getValue(note));\n      if (parsed) {\n        let [, id] = note.name.split('!');\n        db.runQuery(`INSERT INTO notes (id, note) VALUES (?, ?)`, [id, parsed]);\n      }\n    });\n  });\n\n  db.execQuery(`\n    DROP TABLE spreadsheet_cells;\n    ANALYZE;\n    VACUUM;\n  `);\n}\n","var Utils = require(\"./util\");\nvar fs = Utils.FileSystem.require(),\n\tpth = require(\"path\");\n\nfs.existsSync = fs.existsSync || pth.existsSync;\n\nvar ZipEntry = require(\"./zipEntry\"),\n\tZipFile = require(\"./zipFile\");\n\nvar isWin = /^win/.test(process.platform);\n\n\nmodule.exports = function (/*String*/input) {\n\tvar _zip = undefined,\n\t\t_filename = \"\";\n\n\tif (input && typeof input === \"string\") { // load zip file\n\t\tif (fs.existsSync(input)) {\n\t\t\t_filename = input;\n\t\t\t_zip = new ZipFile(input, Utils.Constants.FILE);\n\t\t} else {\n\t\t\tthrow Utils.Errors.INVALID_FILENAME;\n\t\t}\n\t} else if (input && Buffer.isBuffer(input)) { // load buffer\n\t\t_zip = new ZipFile(input, Utils.Constants.BUFFER);\n\t} else { // create new zip file\n\t\t_zip = new ZipFile(null, Utils.Constants.NONE);\n\t}\n\n\tfunction sanitize(prefix, name) {\n\t\tprefix = pth.resolve(pth.normalize(prefix));\n\t\tvar parts = name.split('/');\n\t\tfor (var i = 0, l = parts.length; i < l; i++) {\n\t\t\tvar path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep)));\n\t\t\tif (path.indexOf(prefix) === 0) {\n\t\t\t\treturn path;\n\t\t\t}\n\t\t}\n\t\treturn pth.normalize(pth.join(prefix, pth.basename(name)));\n\t}\n\n\tfunction getEntry(/*Object*/entry) {\n\t\tif (entry && _zip) {\n\t\t\tvar item;\n\t\t\t// If entry was given as a file name\n\t\t\tif (typeof entry === \"string\")\n\t\t\t\titem = _zip.getEntry(entry);\n\t\t\t// if entry was given as a ZipEntry object\n\t\t\tif (typeof entry === \"object\" && typeof entry.entryName !== \"undefined\" && typeof entry.header !== \"undefined\")\n\t\t\t\titem = _zip.getEntry(entry.entryName);\n\n\t\t\tif (item) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\treturn {\n\t\t/**\n\t\t * Extracts the given entry from the archive and returns the content as a Buffer object\n\t\t * @param entry ZipEntry object or String with the full path of the entry\n\t\t *\n\t\t * @return Buffer or Null in case of error\n\t\t */\n\t\treadFile: function (/*Object*/entry) {\n\t\t\tvar item = getEntry(entry);\n\t\t\treturn item && item.getData() || null;\n\t\t},\n\n\t\t/**\n\t\t * Asynchronous readFile\n\t\t * @param entry ZipEntry object or String with the full path of the entry\n\t\t * @param callback\n\t\t *\n\t\t * @return Buffer or Null in case of error\n\t\t */\n\t\treadFileAsync: function (/*Object*/entry, /*Function*/callback) {\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (item) {\n\t\t\t\titem.getDataAsync(callback);\n\t\t\t} else {\n\t\t\t\tcallback(null, \"getEntry failed for:\" + entry)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Extracts the given entry from the archive and returns the content as plain text in the given encoding\n\t\t * @param entry ZipEntry object or String with the full path of the entry\n\t\t * @param encoding Optional. If no encoding is specified utf8 is used\n\t\t *\n\t\t * @return String\n\t\t */\n\t\treadAsText: function (/*Object*/entry, /*String - Optional*/encoding) {\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (item) {\n\t\t\t\tvar data = item.getData();\n\t\t\t\tif (data && data.length) {\n\t\t\t\t\treturn data.toString(encoding || \"utf8\");\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn \"\";\n\t\t},\n\n\t\t/**\n\t\t * Asynchronous readAsText\n\t\t * @param entry ZipEntry object or String with the full path of the entry\n\t\t * @param callback\n\t\t * @param encoding Optional. If no encoding is specified utf8 is used\n\t\t *\n\t\t * @return String\n\t\t */\n\t\treadAsTextAsync: function (/*Object*/entry, /*Function*/callback, /*String - Optional*/encoding) {\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (item) {\n\t\t\t\titem.getDataAsync(function (data, err) {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tcallback(data, err);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data && data.length) {\n\t\t\t\t\t\tcallback(data.toString(encoding || \"utf8\"));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcallback(\"\");\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tcallback(\"\");\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory\n\t\t *\n\t\t * @param entry\n\t\t */\n\t\tdeleteFile: function (/*Object*/entry) { // @TODO: test deleteFile\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (item) {\n\t\t\t\t_zip.deleteEntry(item.entryName);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Adds a comment to the zip. The zip must be rewritten after adding the comment.\n\t\t *\n\t\t * @param comment\n\t\t */\n\t\taddZipComment: function (/*String*/comment) { // @TODO: test addZipComment\n\t\t\t_zip.comment = comment;\n\t\t},\n\n\t\t/**\n\t\t * Returns the zip comment\n\t\t *\n\t\t * @return String\n\t\t */\n\t\tgetZipComment: function () {\n\t\t\treturn _zip.comment || '';\n\t\t},\n\n\t\t/**\n\t\t * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment\n\t\t * The comment cannot exceed 65535 characters in length\n\t\t *\n\t\t * @param entry\n\t\t * @param comment\n\t\t */\n\t\taddZipEntryComment: function (/*Object*/entry, /*String*/comment) {\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (item) {\n\t\t\t\titem.comment = comment;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Returns the comment of the specified entry\n\t\t *\n\t\t * @param entry\n\t\t * @return String\n\t\t */\n\t\tgetZipEntryComment: function (/*Object*/entry) {\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (item) {\n\t\t\t\treturn item.comment || '';\n\t\t\t}\n\t\t\treturn ''\n\t\t},\n\n\t\t/**\n\t\t * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content\n\t\t *\n\t\t * @param entry\n\t\t * @param content\n\t\t */\n\t\tupdateFile: function (/*Object*/entry, /*Buffer*/content) {\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (item) {\n\t\t\t\titem.setData(content);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Adds a file from the disk to the archive\n\t\t *\n\t\t * @param localPath File to add to zip\n\t\t * @param zipPath Optional path inside the zip\n\t\t * @param zipName Optional name for the file\n\t\t */\n\t\taddLocalFile: function (/*String*/localPath, /*String*/zipPath, /*String*/zipName) {\n\t\t\tif (fs.existsSync(localPath)) {\n\t\t\t\tif (zipPath) {\n\t\t\t\t\tzipPath = zipPath.split(\"\\\\\").join(\"/\");\n\t\t\t\t\tif (zipPath.charAt(zipPath.length - 1) !== \"/\") {\n\t\t\t\t\t\tzipPath += \"/\";\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tzipPath = \"\";\n\t\t\t\t}\n\t\t\t\tvar p = localPath.split(\"\\\\\").join(\"/\").split(\"/\").pop();\n\n\t\t\t\tif (zipName) {\n\t\t\t\t\tthis.addFile(zipPath + zipName, fs.readFileSync(localPath), \"\", 0)\n\t\t\t\t} else {\n\t\t\t\t\tthis.addFile(zipPath + p, fs.readFileSync(localPath), \"\", 0)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow Utils.Errors.FILE_NOT_FOUND.replace(\"%s\", localPath);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Adds a local directory and all its nested files and directories to the archive\n\t\t *\n\t\t * @param localPath\n\t\t * @param zipPath optional path inside zip\n\t\t * @param filter optional RegExp or Function if files match will\n\t\t *               be included.\n\t\t */\n\t\taddLocalFolder: function (/*String*/localPath, /*String*/zipPath, /*RegExp|Function*/filter) {\n\t\t\tif (filter === undefined) {\n\t\t\t\tfilter = function () {\n\t\t\t\t\treturn true;\n\t\t\t\t};\n\t\t\t} else if (filter instanceof RegExp) {\n\t\t\t\tfilter = function (filter) {\n\t\t\t\t\treturn function (filename) {\n\t\t\t\t\t\treturn filter.test(filename);\n\t\t\t\t\t}\n\t\t\t\t}(filter);\n\t\t\t}\n\n\t\t\tif (zipPath) {\n\t\t\t\tzipPath = zipPath.split(\"\\\\\").join(\"/\");\n\t\t\t\tif (zipPath.charAt(zipPath.length - 1) !== \"/\") {\n\t\t\t\t\tzipPath += \"/\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tzipPath = \"\";\n\t\t\t}\n\t\t\t// normalize the path first\n\t\t\tlocalPath = pth.normalize(localPath);\n\t\t\tlocalPath = localPath.split(\"\\\\\").join(\"/\"); //windows fix\n\t\t\tif (localPath.charAt(localPath.length - 1) !== \"/\")\n\t\t\t\tlocalPath += \"/\";\n\n\t\t\tif (fs.existsSync(localPath)) {\n\n\t\t\t\tvar items = Utils.findFiles(localPath),\n\t\t\t\t\tself = this;\n\n\t\t\t\tif (items.length) {\n\t\t\t\t\titems.forEach(function (path) {\n\t\t\t\t\t\tvar p = path.split(\"\\\\\").join(\"/\").replace(new RegExp(localPath.replace(/(\\(|\\))/g, '\\\\$1'), 'i'), \"\"); //windows fix\n\t\t\t\t\t\tif (filter(p)) {\n\t\t\t\t\t\t\tif (p.charAt(p.length - 1) !== \"/\") {\n\t\t\t\t\t\t\t\tself.addFile(zipPath + p, fs.readFileSync(path), \"\", 0)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tself.addFile(zipPath + p, Buffer.alloc(0), \"\", 0)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow Utils.Errors.FILE_NOT_FOUND.replace(\"%s\", localPath);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Allows you to create a entry (file or directory) in the zip file.\n\t\t * If you want to create a directory the entryName must end in / and a null buffer should be provided.\n\t\t * Comment and attributes are optional\n\t\t *\n\t\t * @param entryName\n\t\t * @param content\n\t\t * @param comment\n\t\t * @param attr\n\t\t */\n\t\taddFile: function (/*String*/entryName, /*Buffer*/content, /*String*/comment, /*Number*/attr) {\n\t\t\tvar entry = new ZipEntry();\n\t\t\tentry.entryName = entryName;\n\t\t\tentry.comment = comment || \"\";\n\n\t\t\tif (!attr) {\n\t\t\t\tif (entry.isDirectory) {\n\t\t\t\t\tattr = (0o40755 << 16) | 0x10; // (permissions drwxr-xr-x) + (MS-DOS directory flag)\n\t\t\t\t} else {\n\t\t\t\t\tattr = 0o644 << 16; // permissions -r-wr--r--\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tentry.attr = attr;\n\n\t\t\tentry.setData(content);\n\t\t\t_zip.setEntry(entry);\n\t\t},\n\n\t\t/**\n\t\t * Returns an array of ZipEntry objects representing the files and folders inside the archive\n\t\t *\n\t\t * @return Array\n\t\t */\n\t\tgetEntries: function () {\n\t\t\tif (_zip) {\n\t\t\t\treturn _zip.entries;\n\t\t\t} else {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Returns a ZipEntry object representing the file or folder specified by ``name``.\n\t\t *\n\t\t * @param name\n\t\t * @return ZipEntry\n\t\t */\n\t\tgetEntry: function (/*String*/name) {\n\t\t\treturn getEntry(name);\n\t\t},\n\n\t\t/**\n\t\t * Extracts the given entry to the given targetPath\n\t\t * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted\n\t\t *\n\t\t * @param entry ZipEntry object or String with the full path of the entry\n\t\t * @param targetPath Target folder where to write the file\n\t\t * @param maintainEntryPath If maintainEntryPath is true and the entry is inside a folder, the entry folder\n\t\t *                          will be created in targetPath as well. Default is TRUE\n\t\t * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.\n\t\t *                  Default is FALSE\n\t\t *\n\t\t * @return Boolean\n\t\t */\n\t\textractEntryTo: function (/*Object*/entry, /*String*/targetPath, /*Boolean*/maintainEntryPath, /*Boolean*/overwrite) {\n\t\t\toverwrite = overwrite || false;\n\t\t\tmaintainEntryPath = typeof maintainEntryPath === \"undefined\" ? true : maintainEntryPath;\n\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (!item) {\n\t\t\t\tthrow Utils.Errors.NO_ENTRY;\n\t\t\t}\n\n\t\t\tvar entryName = item.entryName;\n\n\t\t\tvar target = sanitize(targetPath, maintainEntryPath ? entryName : pth.basename(entryName));\n\n\t\t\tif (item.isDirectory) {\n\t\t\t\ttarget = pth.resolve(target, \"..\");\n\t\t\t\tvar children = _zip.getEntryChildren(item);\n\t\t\t\tchildren.forEach(function (child) {\n\t\t\t\t\tif (child.isDirectory) return;\n\t\t\t\t\tvar content = child.getData();\n\t\t\t\t\tif (!content) {\n\t\t\t\t\t\tthrow Utils.Errors.CANT_EXTRACT_FILE;\n\t\t\t\t\t}\n\t\t\t\t\tvar childName = sanitize(targetPath, maintainEntryPath ? child.entryName : pth.basename(child.entryName));\n\n\t\t\t\t\tUtils.writeFileTo(childName, content, overwrite);\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar content = item.getData();\n\t\t\tif (!content) throw Utils.Errors.CANT_EXTRACT_FILE;\n\n\t\t\tif (fs.existsSync(target) && !overwrite) {\n\t\t\t\tthrow Utils.Errors.CANT_OVERRIDE;\n\t\t\t}\n\t\t\tUtils.writeFileTo(target, content, overwrite);\n\n\t\t\treturn true;\n\t\t},\n\n\t\t/**\n\t\t * Test the archive\n\t\t *\n\t\t */\n\t\ttest: function () {\n\t\t\tif (!_zip) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfor (var entry in _zip.entries) {\n\t\t\t\ttry {\n\t\t\t\t\tif (entry.isDirectory) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tvar content = _zip.entries[entry].getData();\n\t\t\t\t\tif (!content) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch (err) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t/**\n\t\t * Extracts the entire archive to the given location\n\t\t *\n\t\t * @param targetPath Target location\n\t\t * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.\n\t\t *                  Default is FALSE\n\t\t */\n\t\textractAllTo: function (/*String*/targetPath, /*Boolean*/overwrite) {\n\t\t\toverwrite = overwrite || false;\n\t\t\tif (!_zip) {\n\t\t\t\tthrow Utils.Errors.NO_ZIP;\n\t\t\t}\n\t\t\t_zip.entries.forEach(function (entry) {\n\t\t\t\tvar entryName = sanitize(targetPath, entry.entryName.toString());\n\t\t\t\tif (entry.isDirectory) {\n\t\t\t\t\tUtils.makeDir(entryName);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar content = entry.getData();\n\t\t\t\tif (!content) {\n\t\t\t\t\tthrow Utils.Errors.CANT_EXTRACT_FILE;\n\t\t\t\t}\n\t\t\t\tUtils.writeFileTo(entryName, content, overwrite);\n\t\t\t\ttry {\n\t\t\t\t\tfs.utimesSync(entryName, entry.header.time, entry.header.time)\n\t\t\t\t} catch (err) {\n\t\t\t\t\tthrow Utils.Errors.CANT_EXTRACT_FILE;\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Asynchronous extractAllTo\n\t\t *\n\t\t * @param targetPath Target location\n\t\t * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.\n\t\t *                  Default is FALSE\n\t\t * @param callback\n\t\t */\n\t\textractAllToAsync: function (/*String*/targetPath, /*Boolean*/overwrite, /*Function*/callback) {\n\t\t\tif (!callback) {\n\t\t\t\tcallback = function() {}\n\t\t\t}\n\t\t\toverwrite = overwrite || false;\n\t\t\tif (!_zip) {\n\t\t\t\tcallback(new Error(Utils.Errors.NO_ZIP));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar entries = _zip.entries;\n\t\t\tvar i = entries.length;\n\t\t\tentries.forEach(function (entry) {\n\t\t\t\tif (i <= 0) return; // Had an error already\n\n\t\t\t\tvar entryName = pth.normalize(entry.entryName.toString());\n\n\t\t\t\tif (entry.isDirectory) {\n\t\t\t\t\tUtils.makeDir(sanitize(targetPath, entryName));\n\t\t\t\t\tif (--i === 0)\n\t\t\t\t\t\tcallback(undefined);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tentry.getDataAsync(function (content, err) {\n\t\t\t\t\tif (i <= 0) return;\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tcallback(new Error(err));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!content) {\n\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\tcallback(new Error(Utils.Errors.CANT_EXTRACT_FILE));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tUtils.writeFileToAsync(sanitize(targetPath, entryName), content, overwrite, function (succ) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tfs.utimesSync(pth.resolve(targetPath, entryName), entry.header.time, entry.header.time);\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\tcallback(new Error('Unable to set utimes'));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (i <= 0) return;\n\t\t\t\t\t\tif (!succ) {\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\tcallback(new Error('Unable to write'));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (--i === 0)\n\t\t\t\t\t\t\tcallback(undefined);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip\n\t\t *\n\t\t * @param targetFileName\n\t\t * @param callback\n\t\t */\n\t\twriteZip: function (/*String*/targetFileName, /*Function*/callback) {\n\t\t\tif (arguments.length === 1) {\n\t\t\t\tif (typeof targetFileName === \"function\") {\n\t\t\t\t\tcallback = targetFileName;\n\t\t\t\t\ttargetFileName = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!targetFileName && _filename) {\n\t\t\t\ttargetFileName = _filename;\n\t\t\t}\n\t\t\tif (!targetFileName) return;\n\n\t\t\tvar zipData = _zip.compressToBuffer();\n\t\t\tif (zipData) {\n\t\t\t\tvar ok = Utils.writeFileTo(targetFileName, zipData, true);\n\t\t\t\tif (typeof callback === 'function') callback(!ok ? new Error(\"failed\") : null, \"\");\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Returns the content of the entire zip file as a Buffer object\n\t\t *\n\t\t * @return Buffer\n\t\t */\n\t\ttoBuffer: function (/*Function*/onSuccess, /*Function*/onFail, /*Function*/onItemStart, /*Function*/onItemEnd) {\n\t\t\tthis.valueOf = 2;\n\t\t\tif (typeof onSuccess === \"function\") {\n\t\t\t\t_zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn _zip.compressToBuffer()\n\t\t}\n\t}\n};\n","var Utils = require(\"../util\"),\n    Constants = Utils.Constants;\n\n/* The central directory file header */\nmodule.exports = function () {\n    var _verMade = 0x0A,\n        _version = 0x0A,\n        _flags = 0,\n        _method = 0,\n        _time = 0,\n        _crc = 0,\n        _compressedSize = 0,\n        _size = 0,\n        _fnameLen = 0,\n        _extraLen = 0,\n\n        _comLen = 0,\n        _diskStart = 0,\n        _inattr = 0,\n        _attr = 0,\n        _offset = 0;\n\n    var _dataHeader = {};\n\n    function setTime(val) {\n        val = new Date(val);\n        _time = (val.getFullYear() - 1980 & 0x7f) << 25  // b09-16 years from 1980\n            | (val.getMonth() + 1) << 21                 // b05-08 month\n            | val.getDate() << 16                        // b00-04 hour\n\n            // 2 bytes time\n            | val.getHours() << 11    // b11-15 hour\n            | val.getMinutes() << 5   // b05-10 minute\n            | val.getSeconds() >> 1;  // b00-04 seconds divided by 2\n    }\n\n    setTime(+new Date());\n\n    return {\n        get made () { return _verMade; },\n        set made (val) { _verMade = val; },\n\n        get version () { return _version; },\n        set version (val) { _version = val },\n\n        get flags () { return _flags },\n        set flags (val) { _flags = val; },\n\n        get method () { return _method; },\n        set method (val) { _method = val; },\n\n        get time () { return new Date(\n            ((_time >> 25) & 0x7f) + 1980,\n            ((_time >> 21) & 0x0f) - 1,\n            (_time >> 16) & 0x1f,\n            (_time >> 11) & 0x1f,\n            (_time >> 5) & 0x3f,\n            (_time & 0x1f) << 1\n        );\n        },\n        set time (val) {\n            setTime(val);\n        },\n\n        get crc () { return _crc; },\n        set crc (val) { _crc = val; },\n\n        get compressedSize () { return _compressedSize; },\n        set compressedSize (val) { _compressedSize = val; },\n\n        get size () { return _size; },\n        set size (val) { _size = val; },\n\n        get fileNameLength () { return _fnameLen; },\n        set fileNameLength (val) { _fnameLen = val; },\n\n        get extraLength () { return _extraLen },\n        set extraLength (val) { _extraLen = val; },\n\n        get commentLength () { return _comLen },\n        set commentLength (val) { _comLen = val },\n\n        get diskNumStart () { return _diskStart },\n        set diskNumStart (val) { _diskStart = val },\n\n        get inAttr () { return _inattr },\n        set inAttr (val) { _inattr = val },\n\n        get attr () { return _attr },\n        set attr (val) { _attr = val },\n\n        get offset () { return _offset },\n        set offset (val) { _offset = val },\n\n        get encripted () { return (_flags & 1) === 1 },\n\n        get entryHeaderSize () {\n            return Constants.CENHDR + _fnameLen + _extraLen + _comLen;\n        },\n\n        get realDataOffset () {\n            return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen;\n        },\n\n        get dataHeader () {\n            return _dataHeader;\n        },\n\n        loadDataHeaderFromBinary : function(/*Buffer*/input) {\n            var data = input.slice(_offset, _offset + Constants.LOCHDR);\n            // 30 bytes and should start with \"PK\\003\\004\"\n            if (data.readUInt32LE(0) !== Constants.LOCSIG) {\n                throw Utils.Errors.INVALID_LOC;\n            }\n            _dataHeader = {\n                // version needed to extract\n                version : data.readUInt16LE(Constants.LOCVER),\n                // general purpose bit flag\n                flags : data.readUInt16LE(Constants.LOCFLG),\n                // compression method\n                method : data.readUInt16LE(Constants.LOCHOW),\n                // modification time (2 bytes time, 2 bytes date)\n                time : data.readUInt32LE(Constants.LOCTIM),\n                // uncompressed file crc-32 value\n                crc : data.readUInt32LE(Constants.LOCCRC),\n                // compressed size\n                compressedSize : data.readUInt32LE(Constants.LOCSIZ),\n                // uncompressed size\n                size : data.readUInt32LE(Constants.LOCLEN),\n                // filename length\n                fnameLen : data.readUInt16LE(Constants.LOCNAM),\n                // extra field length\n                extraLen : data.readUInt16LE(Constants.LOCEXT)\n            }\n        },\n\n        loadFromBinary : function(/*Buffer*/data) {\n            // data should be 46 bytes and start with \"PK 01 02\"\n            if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) {\n                throw Utils.Errors.INVALID_CEN;\n            }\n            // version made by\n            _verMade = data.readUInt16LE(Constants.CENVEM);\n            // version needed to extract\n            _version = data.readUInt16LE(Constants.CENVER);\n            // encrypt, decrypt flags\n            _flags = data.readUInt16LE(Constants.CENFLG);\n            // compression method\n            _method = data.readUInt16LE(Constants.CENHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            _time = data.readUInt32LE(Constants.CENTIM);\n            // uncompressed file crc-32 value\n            _crc = data.readUInt32LE(Constants.CENCRC);\n            // compressed size\n            _compressedSize = data.readUInt32LE(Constants.CENSIZ);\n            // uncompressed size\n            _size = data.readUInt32LE(Constants.CENLEN);\n            // filename length\n            _fnameLen = data.readUInt16LE(Constants.CENNAM);\n            // extra field length\n            _extraLen = data.readUInt16LE(Constants.CENEXT);\n            // file comment length\n            _comLen = data.readUInt16LE(Constants.CENCOM);\n            // volume number start\n            _diskStart = data.readUInt16LE(Constants.CENDSK);\n            // internal file attributes\n            _inattr = data.readUInt16LE(Constants.CENATT);\n            // external file attributes\n            _attr = data.readUInt32LE(Constants.CENATX);\n            // LOC header offset\n            _offset = data.readUInt32LE(Constants.CENOFF);\n        },\n\n        dataHeaderToBinary : function() {\n            // LOC header size (30 bytes)\n            var data = Buffer.alloc(Constants.LOCHDR);\n            // \"PK\\003\\004\"\n            data.writeUInt32LE(Constants.LOCSIG, 0);\n            // version needed to extract\n            data.writeUInt16LE(_version, Constants.LOCVER);\n            // general purpose bit flag\n            data.writeUInt16LE(_flags, Constants.LOCFLG);\n            // compression method\n            data.writeUInt16LE(_method, Constants.LOCHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            data.writeUInt32LE(_time, Constants.LOCTIM);\n            // uncompressed file crc-32 value\n            data.writeUInt32LE(_crc, Constants.LOCCRC);\n            // compressed size\n            data.writeUInt32LE(_compressedSize, Constants.LOCSIZ);\n            // uncompressed size\n            data.writeUInt32LE(_size, Constants.LOCLEN);\n            // filename length\n            data.writeUInt16LE(_fnameLen, Constants.LOCNAM);\n            // extra field length\n            data.writeUInt16LE(_extraLen, Constants.LOCEXT);\n            return data;\n        },\n\n        entryHeaderToBinary : function() {\n            // CEN header size (46 bytes)\n            var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen);\n            // \"PK\\001\\002\"\n            data.writeUInt32LE(Constants.CENSIG, 0);\n            // version made by\n            data.writeUInt16LE(_verMade, Constants.CENVEM);\n            // version needed to extract\n            data.writeUInt16LE(_version, Constants.CENVER);\n            // encrypt, decrypt flags\n            data.writeUInt16LE(_flags, Constants.CENFLG);\n            // compression method\n            data.writeUInt16LE(_method, Constants.CENHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            data.writeUInt32LE(_time, Constants.CENTIM);\n            // uncompressed file crc-32 value\n            data.writeUInt32LE(_crc, Constants.CENCRC);\n            // compressed size\n            data.writeUInt32LE(_compressedSize, Constants.CENSIZ);\n            // uncompressed size\n            data.writeUInt32LE(_size, Constants.CENLEN);\n            // filename length\n            data.writeUInt16LE(_fnameLen, Constants.CENNAM);\n            // extra field length\n            data.writeUInt16LE(_extraLen, Constants.CENEXT);\n            // file comment length\n            data.writeUInt16LE(_comLen, Constants.CENCOM);\n            // volume number start\n            data.writeUInt16LE(_diskStart, Constants.CENDSK);\n            // internal file attributes\n            data.writeUInt16LE(_inattr, Constants.CENATT);\n            // external file attributes\n            data.writeUInt32LE(_attr, Constants.CENATX);\n            // LOC header offset\n            data.writeUInt32LE(_offset, Constants.CENOFF);\n            // fill all with\n            data.fill(0x00, Constants.CENHDR);\n            return data;\n        },\n\n        toString : function() {\n            return '{\\n' +\n                '\\t\"made\" : ' + _verMade + \",\\n\" +\n                '\\t\"version\" : ' + _version + \",\\n\" +\n                '\\t\"flags\" : ' + _flags + \",\\n\" +\n                '\\t\"method\" : ' + Utils.methodToString(_method) + \",\\n\" +\n                '\\t\"time\" : ' + this.time + \",\\n\" +\n                '\\t\"crc\" : 0x' + _crc.toString(16).toUpperCase() + \",\\n\" +\n                '\\t\"compressedSize\" : ' + _compressedSize + \" bytes,\\n\" +\n                '\\t\"size\" : ' + _size + \" bytes,\\n\" +\n                '\\t\"fileNameLength\" : ' + _fnameLen + \",\\n\" +\n                '\\t\"extraLength\" : ' + _extraLen + \" bytes,\\n\" +\n                '\\t\"commentLength\" : ' + _comLen + \" bytes,\\n\" +\n                '\\t\"diskNumStart\" : ' + _diskStart + \",\\n\" +\n                '\\t\"inAttr\" : ' + _inattr + \",\\n\" +\n                '\\t\"attr\" : ' + _attr + \",\\n\" +\n                '\\t\"offset\" : ' + _offset + \",\\n\" +\n                '\\t\"entryHeaderSize\" : ' + (Constants.CENHDR + _fnameLen + _extraLen + _comLen) + \" bytes\\n\" +\n                '}';\n        }\n    }\n};\n","exports.EntryHeader = require(\"./entryHeader\");\r\nexports.MainHeader = require(\"./mainHeader\");\r\n","var Utils = require(\"../util\"),\n    Constants = Utils.Constants;\n\n/* The entries in the end of central directory */\nmodule.exports = function () {\n    var _volumeEntries = 0,\n        _totalEntries = 0,\n        _size = 0,\n        _offset = 0,\n        _commentLength = 0;\n\n    return {\n        get diskEntries () { return _volumeEntries },\n        set diskEntries (/*Number*/val) { _volumeEntries = _totalEntries = val; },\n\n        get totalEntries () { return _totalEntries },\n        set totalEntries (/*Number*/val) { _totalEntries = _volumeEntries = val; },\n\n        get size () { return _size },\n        set size (/*Number*/val) { _size = val; },\n\n        get offset () { return _offset },\n        set offset (/*Number*/val) { _offset = val; },\n\n        get commentLength () { return _commentLength },\n        set commentLength (/*Number*/val) { _commentLength = val; },\n\n        get mainHeaderSize () {\n            return Constants.ENDHDR + _commentLength;\n        },\n\n        loadFromBinary : function(/*Buffer*/data) {\n            // data should be 22 bytes and start with \"PK 05 06\"\n            if (data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG)\n                throw Utils.Errors.INVALID_END;\n\n            // number of entries on this volume\n            _volumeEntries = data.readUInt16LE(Constants.ENDSUB);\n            // total number of entries\n            _totalEntries = data.readUInt16LE(Constants.ENDTOT);\n            // central directory size in bytes\n            _size = data.readUInt32LE(Constants.ENDSIZ);\n            // offset of first CEN header\n            _offset = data.readUInt32LE(Constants.ENDOFF);\n            // zip file comment length\n            _commentLength = data.readUInt16LE(Constants.ENDCOM);\n        },\n\n        toBinary : function() {\n           var b = Buffer.alloc(Constants.ENDHDR + _commentLength);\n            // \"PK 05 06\" signature\n            b.writeUInt32LE(Constants.ENDSIG, 0);\n            b.writeUInt32LE(0, 4);\n            // number of entries on this volume\n            b.writeUInt16LE(_volumeEntries, Constants.ENDSUB);\n            // total number of entries\n            b.writeUInt16LE(_totalEntries, Constants.ENDTOT);\n            // central directory size in bytes\n            b.writeUInt32LE(_size, Constants.ENDSIZ);\n            // offset of first CEN header\n            b.writeUInt32LE(_offset, Constants.ENDOFF);\n            // zip file comment length\n            b.writeUInt16LE(_commentLength, Constants.ENDCOM);\n            // fill comment memory with spaces so no garbage is left there\n            b.fill(\" \", Constants.ENDHDR);\n\n            return b;\n        },\n\n        toString : function() {\n            return '{\\n' +\n                '\\t\"diskEntries\" : ' + _volumeEntries + \",\\n\" +\n                '\\t\"totalEntries\" : ' + _totalEntries + \",\\n\" +\n                '\\t\"size\" : ' + _size + \" bytes,\\n\" +\n                '\\t\"offset\" : 0x' + _offset.toString(16).toUpperCase() + \",\\n\" +\n                '\\t\"commentLength\" : 0x' + _commentLength + \"\\n\" +\n            '}';\n        }\n    }\n};","module.exports = function (/*Buffer*/inbuf) {\n\n  var zlib = require(\"zlib\");\n  \n  var opts = {chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024};\n  \n  return {\n    deflate: function () {\n      return zlib.deflateRawSync(inbuf, opts);\n    },\n\n    deflateAsync: function (/*Function*/callback) {\n      var tmp = zlib.createDeflateRaw(opts), parts = [], total = 0;\n      tmp.on('data', function (data) {\n        parts.push(data);\n        total += data.length;\n      });\n      tmp.on('end', function () {\n        var buf = Buffer.alloc(total), written = 0;\n        buf.fill(0);\n        for (var i = 0; i < parts.length; i++) {\n          var part = parts[i];\n          part.copy(buf, written);\n          written += part.length;\n        }\n        callback && callback(buf);\n      });\n      tmp.end(inbuf);\n    }\n  }\n};\n","exports.Deflater = require(\"./deflater\");\r\nexports.Inflater = require(\"./inflater\");","module.exports = function (/*Buffer*/inbuf) {\n\n  var zlib = require(\"zlib\");\n\n  return {\n    inflate: function () {\n      return zlib.inflateRawSync(inbuf);\n    },\n\n    inflateAsync: function (/*Function*/callback) {\n      var tmp = zlib.createInflateRaw(), parts = [], total = 0;\n      tmp.on('data', function (data) {\n        parts.push(data);\n        total += data.length;\n      });\n      tmp.on('end', function () {\n        var buf = Buffer.alloc(total), written = 0;\n        buf.fill(0);\n        for (var i = 0; i < parts.length; i++) {\n          var part = parts[i];\n          part.copy(buf, written);\n          written += part.length;\n        }\n        callback && callback(buf);\n      });\n      tmp.end(inbuf);\n    }\n  }\n};\n","module.exports = {\r\n    /* The local file header */\r\n    LOCHDR           : 30, // LOC header size\r\n    LOCSIG           : 0x04034b50, // \"PK\\003\\004\"\r\n    LOCVER           : 4,\t// version needed to extract\r\n    LOCFLG           : 6, // general purpose bit flag\r\n    LOCHOW           : 8, // compression method\r\n    LOCTIM           : 10, // modification time (2 bytes time, 2 bytes date)\r\n    LOCCRC           : 14, // uncompressed file crc-32 value\r\n    LOCSIZ           : 18, // compressed size\r\n    LOCLEN           : 22, // uncompressed size\r\n    LOCNAM           : 26, // filename length\r\n    LOCEXT           : 28, // extra field length\r\n\r\n    /* The Data descriptor */\r\n    EXTSIG           : 0x08074b50, // \"PK\\007\\008\"\r\n    EXTHDR           : 16, // EXT header size\r\n    EXTCRC           : 4, // uncompressed file crc-32 value\r\n    EXTSIZ           : 8, // compressed size\r\n    EXTLEN           : 12, // uncompressed size\r\n\r\n    /* The central directory file header */\r\n    CENHDR           : 46, // CEN header size\r\n    CENSIG           : 0x02014b50, // \"PK\\001\\002\"\r\n    CENVEM           : 4, // version made by\r\n    CENVER           : 6, // version needed to extract\r\n    CENFLG           : 8, // encrypt, decrypt flags\r\n    CENHOW           : 10, // compression method\r\n    CENTIM           : 12, // modification time (2 bytes time, 2 bytes date)\r\n    CENCRC           : 16, // uncompressed file crc-32 value\r\n    CENSIZ           : 20, // compressed size\r\n    CENLEN           : 24, // uncompressed size\r\n    CENNAM           : 28, // filename length\r\n    CENEXT           : 30, // extra field length\r\n    CENCOM           : 32, // file comment length\r\n    CENDSK           : 34, // volume number start\r\n    CENATT           : 36, // internal file attributes\r\n    CENATX           : 38, // external file attributes (host system dependent)\r\n    CENOFF           : 42, // LOC header offset\r\n\r\n    /* The entries in the end of central directory */\r\n    ENDHDR           : 22, // END header size\r\n    ENDSIG           : 0x06054b50, // \"PK\\005\\006\"\r\n    ENDSUB           : 8, // number of entries on this disk\r\n    ENDTOT           : 10, // total number of entries\r\n    ENDSIZ           : 12, // central directory size in bytes\r\n    ENDOFF           : 16, // offset of first CEN header\r\n    ENDCOM           : 20, // zip file comment length\r\n\r\n    /* Compression methods */\r\n    STORED           : 0, // no compression\r\n    SHRUNK           : 1, // shrunk\r\n    REDUCED1         : 2, // reduced with compression factor 1\r\n    REDUCED2         : 3, // reduced with compression factor 2\r\n    REDUCED3         : 4, // reduced with compression factor 3\r\n    REDUCED4         : 5, // reduced with compression factor 4\r\n    IMPLODED         : 6, // imploded\r\n    // 7 reserved\r\n    DEFLATED         : 8, // deflated\r\n    ENHANCED_DEFLATED: 9, // enhanced deflated\r\n    PKWARE           : 10,// PKWare DCL imploded\r\n    // 11 reserved\r\n    BZIP2            : 12, //  compressed using BZIP2\r\n    // 13 reserved\r\n    LZMA             : 14, // LZMA\r\n    // 15-17 reserved\r\n    IBM_TERSE        : 18, // compressed using IBM TERSE\r\n    IBM_LZ77         : 19, //IBM LZ77 z\r\n\r\n    /* General purpose bit flag */\r\n    FLG_ENC          : 0,  // encripted file\r\n    FLG_COMP1        : 1,  // compression option\r\n    FLG_COMP2        : 2,  // compression option\r\n    FLG_DESC         : 4,  // data descriptor\r\n    FLG_ENH          : 8,  // enhanced deflation\r\n    FLG_STR          : 16, // strong encryption\r\n    FLG_LNG          : 1024, // language encoding\r\n    FLG_MSK          : 4096, // mask header values\r\n\r\n    /* Load type */\r\n    FILE             : 0,\r\n    BUFFER           : 1,\r\n    NONE             : 2,\r\n\r\n    /* 4.5 Extensible data fields */\r\n    EF_ID            : 0,\r\n    EF_SIZE          : 2,\r\n\r\n    /* Header IDs */\r\n    ID_ZIP64         : 0x0001,\r\n    ID_AVINFO        : 0x0007,\r\n    ID_PFS           : 0x0008,\r\n    ID_OS2           : 0x0009,\r\n    ID_NTFS          : 0x000a,\r\n    ID_OPENVMS       : 0x000c,\r\n    ID_UNIX          : 0x000d,\r\n    ID_FORK          : 0x000e,\r\n    ID_PATCH         : 0x000f,\r\n    ID_X509_PKCS7    : 0x0014,\r\n    ID_X509_CERTID_F : 0x0015,\r\n    ID_X509_CERTID_C : 0x0016,\r\n    ID_STRONGENC     : 0x0017,\r\n    ID_RECORD_MGT    : 0x0018,\r\n    ID_X509_PKCS7_RL : 0x0019,\r\n    ID_IBM1          : 0x0065,\r\n    ID_IBM2          : 0x0066,\r\n    ID_POSZIP        : 0x4690,\r\n\r\n    EF_ZIP64_OR_32   : 0xffffffff,\r\n    EF_ZIP64_OR_16   : 0xffff,\r\n    EF_ZIP64_SUNCOMP : 0,\r\n    EF_ZIP64_SCOMP   : 8,\r\n    EF_ZIP64_RHO     : 16,\r\n    EF_ZIP64_DSN     : 24\r\n};\r\n","module.exports = {\r\n    /* Header error messages */\r\n    \"INVALID_LOC\" : \"Invalid LOC header (bad signature)\",\r\n    \"INVALID_CEN\" : \"Invalid CEN header (bad signature)\",\r\n    \"INVALID_END\" : \"Invalid END header (bad signature)\",\r\n\r\n    /* ZipEntry error messages*/\r\n    \"NO_DATA\" : \"Nothing to decompress\",\r\n    \"BAD_CRC\" : \"CRC32 checksum failed\",\r\n    \"FILE_IN_THE_WAY\" : \"There is a file in the way: %s\",\r\n    \"UNKNOWN_METHOD\" : \"Invalid/unsupported compression method\",\r\n\r\n    /* Inflater error messages */\r\n    \"AVAIL_DATA\" : \"inflate::Available inflate data did not terminate\",\r\n    \"INVALID_DISTANCE\" : \"inflate::Invalid literal/length or distance code in fixed or dynamic block\",\r\n    \"TO_MANY_CODES\" : \"inflate::Dynamic block code description: too many length or distance codes\",\r\n    \"INVALID_REPEAT_LEN\" : \"inflate::Dynamic block code description: repeat more than specified lengths\",\r\n    \"INVALID_REPEAT_FIRST\" : \"inflate::Dynamic block code description: repeat lengths with no first length\",\r\n    \"INCOMPLETE_CODES\" : \"inflate::Dynamic block code description: code lengths codes incomplete\",\r\n    \"INVALID_DYN_DISTANCE\": \"inflate::Dynamic block code description: invalid distance code lengths\",\r\n    \"INVALID_CODES_LEN\": \"inflate::Dynamic block code description: invalid literal/length code lengths\",\r\n    \"INVALID_STORE_BLOCK\" : \"inflate::Stored block length did not match one's complement\",\r\n    \"INVALID_BLOCK_TYPE\" : \"inflate::Invalid block type (type == 3)\",\r\n\r\n    /* ADM-ZIP error messages */\r\n    \"CANT_EXTRACT_FILE\" : \"Could not extract the file\",\r\n    \"CANT_OVERRIDE\" : \"Target file already exists\",\r\n    \"NO_ZIP\" : \"No zip file was loaded\",\r\n    \"NO_ENTRY\" : \"Entry doesn't exist\",\r\n    \"DIRECTORY_CONTENT_ERROR\" : \"A directory cannot have content\",\r\n    \"FILE_NOT_FOUND\" : \"File not found: %s\",\r\n    \"NOT_IMPLEMENTED\" : \"Not implemented\",\r\n    \"INVALID_FILENAME\" : \"Invalid filename\",\r\n    \"INVALID_FORMAT\" : \"Invalid or unsupported zip format. No END header found\"\r\n};","var fs = require(\"./fileSystem\").require(),\r\n    pth = require(\"path\");\r\n\t\r\nfs.existsSync = fs.existsSync || pth.existsSync;\r\n\r\nmodule.exports = function(/*String*/path) {\r\n\r\n    var _path = path || \"\",\r\n        _permissions = 0,\r\n        _obj = newAttr(),\r\n        _stat = null;\r\n\r\n    function newAttr() {\r\n        return {\r\n            directory : false,\r\n            readonly : false,\r\n            hidden : false,\r\n            executable : false,\r\n            mtime : 0,\r\n            atime : 0\r\n        }\r\n    }\r\n\r\n    if (_path && fs.existsSync(_path)) {\r\n        _stat = fs.statSync(_path);\r\n        _obj.directory = _stat.isDirectory();\r\n        _obj.mtime = _stat.mtime;\r\n        _obj.atime = _stat.atime;\r\n        _obj.executable = !!(1 & parseInt ((_stat.mode & parseInt (\"777\", 8)).toString (8)[0]));\r\n        _obj.readonly = !!(2 & parseInt ((_stat.mode & parseInt (\"777\", 8)).toString (8)[0]));\r\n        _obj.hidden = pth.basename(_path)[0] === \".\";\r\n    } else {\r\n        console.warn(\"Invalid path: \" + _path)\r\n    }\r\n\r\n    return {\r\n\r\n        get directory () {\r\n            return _obj.directory;\r\n        },\r\n\r\n        get readOnly () {\r\n            return _obj.readonly;\r\n        },\r\n\r\n        get hidden () {\r\n            return _obj.hidden;\r\n        },\r\n\r\n        get mtime () {\r\n            return _obj.mtime;\r\n        },\r\n\r\n        get atime () {\r\n           return _obj.atime;\r\n        },\r\n\r\n\r\n        get executable () {\r\n            return _obj.executable;\r\n        },\r\n\r\n        decodeAttributes : function(val) {\r\n\r\n        },\r\n\r\n        encodeAttributes : function (val) {\r\n\r\n        },\r\n\r\n        toString : function() {\r\n           return '{\\n' +\r\n               '\\t\"path\" : \"' + _path + \",\\n\" +\r\n               '\\t\"isDirectory\" : ' + _obj.directory + \",\\n\" +\r\n               '\\t\"isReadOnly\" : ' + _obj.readonly + \",\\n\" +\r\n               '\\t\"isHidden\" : ' + _obj.hidden + \",\\n\" +\r\n               '\\t\"isExecutable\" : ' + _obj.executable + \",\\n\" +\r\n               '\\t\"mTime\" : ' + _obj.mtime + \"\\n\" +\r\n               '\\t\"aTime\" : ' + _obj.atime + \"\\n\" +\r\n           '}';\r\n        }\r\n    }\r\n\r\n};\r\n","exports.require = function() {\n  var fs = require(\"fs\");\n  if (process.versions['electron']) {\n\t  try {\n\t    originalFs = require(\"original-fs\");\n\t    if (Object.keys(originalFs).length > 0) {\n\t      fs = originalFs;\n      }\n\t  } catch (e) {}\n  }\n  return fs\n};\n","module.exports = require(\"./utils\");\r\nmodule.exports.FileSystem = require(\"./fileSystem\");\r\nmodule.exports.Constants = require(\"./constants\");\r\nmodule.exports.Errors = require(\"./errors\");\r\nmodule.exports.FileAttr = require(\"./fattr\");","var fs = require(\"./fileSystem\").require(),\r\n    pth = require('path');\r\n\r\nfs.existsSync = fs.existsSync || pth.existsSync;\r\n\r\nmodule.exports = (function() {\r\n\r\n    var crcTable = [],\r\n        Constants = require('./constants'),\r\n        Errors = require('./errors'),\r\n\r\n        PATH_SEPARATOR = pth.sep;\r\n\r\n\r\n    function mkdirSync(/*String*/path) {\r\n        var resolvedPath = path.split(PATH_SEPARATOR)[0];\r\n        path.split(PATH_SEPARATOR).forEach(function(name) {\r\n            if (!name || name.substr(-1,1) === \":\") return;\r\n            resolvedPath += PATH_SEPARATOR + name;\r\n            var stat;\r\n            try {\r\n                stat = fs.statSync(resolvedPath);\r\n            } catch (e) {\r\n                fs.mkdirSync(resolvedPath);\r\n            }\r\n            if (stat && stat.isFile())\r\n                throw Errors.FILE_IN_THE_WAY.replace(\"%s\", resolvedPath);\r\n        });\r\n    }\r\n\r\n    function findSync(/*String*/dir, /*RegExp*/pattern, /*Boolean*/recoursive) {\r\n        if (typeof pattern === 'boolean') {\r\n            recoursive = pattern;\r\n            pattern = undefined;\r\n        }\r\n        var files = [];\r\n        fs.readdirSync(dir).forEach(function(file) {\r\n            var path = pth.join(dir, file);\r\n\r\n            if (fs.statSync(path).isDirectory() && recoursive)\r\n                files = files.concat(findSync(path, pattern, recoursive));\r\n\r\n            if (!pattern || pattern.test(path)) {\r\n                files.push(pth.normalize(path) + (fs.statSync(path).isDirectory() ? PATH_SEPARATOR : \"\"));\r\n            }\r\n\r\n        });\r\n        return files;\r\n    }\r\n\r\n    return {\r\n        makeDir : function(/*String*/path) {\r\n            mkdirSync(path);\r\n        },\r\n\r\n        crc32 : function(buf) {\r\n            if (typeof buf === 'string') {\r\n                buf = Buffer.alloc(buf.length, buf);\r\n            }\r\n            var b = Buffer.alloc(4);\r\n            if (!crcTable.length) {\r\n                for (var n = 0; n < 256; n++) {\r\n                    var c = n;\r\n                    for (var k = 8; --k >= 0;)  //\r\n                        if ((c & 1) !== 0)  { c = 0xedb88320 ^ (c >>> 1); } else { c = c >>> 1; }\r\n                    if (c < 0) {\r\n                        b.writeInt32LE(c, 0);\r\n                        c = b.readUInt32LE(0);\r\n                    }\r\n                    crcTable[n] = c;\r\n                }\r\n            }\r\n            var crc = 0, off = 0, len = buf.length, c1 = ~crc;\r\n            while(--len >= 0) c1 = crcTable[(c1 ^ buf[off++]) & 0xff] ^ (c1 >>> 8);\r\n            crc = ~c1;\r\n            b.writeInt32LE(crc & 0xffffffff, 0);\r\n            return b.readUInt32LE(0);\r\n        },\r\n\r\n        methodToString : function(/*Number*/method) {\r\n            switch (method) {\r\n                case Constants.STORED:\r\n                    return 'STORED (' + method + ')';\r\n                case Constants.DEFLATED:\r\n                    return 'DEFLATED (' + method + ')';\r\n                default:\r\n                    return 'UNSUPPORTED (' + method + ')';\r\n            }\r\n\r\n        },\r\n\r\n        writeFileTo : function(/*String*/path, /*Buffer*/content, /*Boolean*/overwrite, /*Number*/attr) {\r\n            if (fs.existsSync(path)) {\r\n                if (!overwrite)\r\n                    return false; // cannot overwrite\r\n\r\n                var stat = fs.statSync(path);\r\n                if (stat.isDirectory()) {\r\n                    return false;\r\n                }\r\n            }\r\n            var folder = pth.dirname(path);\r\n            if (!fs.existsSync(folder)) {\r\n                mkdirSync(folder);\r\n            }\r\n\r\n            var fd;\r\n            try {\r\n                fd = fs.openSync(path, 'w', 438); // 0666\r\n            } catch(e) {\r\n                fs.chmodSync(path, 438);\r\n                fd = fs.openSync(path, 'w', 438);\r\n            }\r\n            if (fd) {\r\n                try {\r\n                    fs.writeSync(fd, content, 0, content.length, 0);\r\n                }\r\n                catch (e){\r\n                    throw e;\r\n                }\r\n                finally {\r\n                    fs.closeSync(fd);\r\n                }\r\n            }\r\n            fs.chmodSync(path, attr || 438);\r\n            return true;\r\n        },\r\n\r\n        writeFileToAsync : function(/*String*/path, /*Buffer*/content, /*Boolean*/overwrite, /*Number*/attr, /*Function*/callback) {\r\n            if(typeof attr === 'function') {\r\n                callback = attr;\r\n                attr = undefined;\r\n            }\r\n\r\n            fs.exists(path, function(exists) {\r\n                if(exists && !overwrite)\r\n                    return callback(false);\r\n\r\n                fs.stat(path, function(err, stat) {\r\n                    if(exists &&stat.isDirectory()) {\r\n                        return callback(false);\r\n                    }\r\n\r\n                    var folder = pth.dirname(path);\r\n                    fs.exists(folder, function(exists) {\r\n                        if(!exists)\r\n                            mkdirSync(folder);\r\n\r\n                        fs.open(path, 'w', 438, function(err, fd) {\r\n                            if(err) {\r\n                                fs.chmod(path, 438, function() {\r\n                                    fs.open(path, 'w', 438, function(err, fd) {\r\n                                        fs.write(fd, content, 0, content.length, 0, function() {\r\n                                            fs.close(fd, function() {\r\n                                                fs.chmod(path, attr || 438, function() {\r\n                                                    callback(true);\r\n                                                })\r\n                                            });\r\n                                        });\r\n                                    });\r\n                                })\r\n                            } else {\r\n                                if(fd) {\r\n                                    fs.write(fd, content, 0, content.length, 0, function() {\r\n                                        fs.close(fd, function() {\r\n                                            fs.chmod(path, attr || 438, function() {\r\n                                                callback(true);\r\n                                            })\r\n                                        });\r\n                                    });\r\n                                } else {\r\n                                    fs.chmod(path, attr || 438, function() {\r\n                                        callback(true);\r\n                                    })\r\n                                }\r\n                            }\r\n                        });\r\n                    })\r\n                })\r\n            })\r\n        },\r\n\r\n        findFiles : function(/*String*/path) {\r\n            return findSync(path, true);\r\n        },\r\n\r\n        getAttributes : function(/*String*/path) {\r\n\r\n        },\r\n\r\n        setAttributes : function(/*String*/path) {\r\n\r\n        },\r\n\r\n        toBuffer : function(input) {\r\n            if (Buffer.isBuffer(input)) {\r\n                return input;\r\n            } else {\r\n                if (input.length === 0) {\r\n                    return Buffer.alloc(0)\r\n                }\r\n                return Buffer.from(input, 'utf8');\r\n            }\r\n        },\r\n\r\n        Constants : Constants,\r\n        Errors : Errors\r\n    }\r\n})();\r\n","var Utils = require(\"./util\"),\n    Headers = require(\"./headers\"),\n    Constants = Utils.Constants,\n    Methods = require(\"./methods\");\n\nmodule.exports = function (/*Buffer*/input) {\n\n    var _entryHeader = new Headers.EntryHeader(),\n        _entryName = Buffer.alloc(0),\n        _comment = Buffer.alloc(0),\n        _isDirectory = false,\n        uncompressedData = null,\n        _extra = Buffer.alloc(0);\n\n    function getCompressedDataFromZip() {\n        if (!input || !Buffer.isBuffer(input)) {\n            return Buffer.alloc(0);\n        }\n        _entryHeader.loadDataHeaderFromBinary(input);\n        return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize)\n    }\n\n    function crc32OK(data) {\n        // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written\n        if ((_entryHeader.flags & 0x8) !== 0x8) {\n           if (Utils.crc32(data) !== _entryHeader.dataHeader.crc) {\n               return false;\n           }\n        } else {\n            // @TODO: load and check data descriptor header\n            // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure\n            // (optionally preceded by a 4-byte signature) immediately after the compressed data:\n        }\n        return true;\n    }\n\n    function decompress(/*Boolean*/async, /*Function*/callback, /*String*/pass) {\n        if(typeof callback === 'undefined' && typeof async === 'string') {\n            pass=async;\n            async=void 0;\n        }\n        if (_isDirectory) {\n            if (async && callback) {\n                callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error.\n            }\n            return Buffer.alloc(0);\n        }\n\n        var compressedData = getCompressedDataFromZip();\n       \n        if (compressedData.length === 0) {\n            if (async && callback) callback(compressedData, Utils.Errors.NO_DATA);//si added error.\n            return compressedData;\n        }\n\n        var data = Buffer.alloc(_entryHeader.size);\n\n        switch (_entryHeader.method) {\n            case Utils.Constants.STORED:\n                compressedData.copy(data);\n                if (!crc32OK(data)) {\n                    if (async && callback) callback(data, Utils.Errors.BAD_CRC);//si added error\n                    return Utils.Errors.BAD_CRC;\n                } else {//si added otherwise did not seem to return data.\n                    if (async && callback) callback(data);\n                    return data;\n                }\n            case Utils.Constants.DEFLATED:\n                var inflater = new Methods.Inflater(compressedData);\n                if (!async) {\n                    var result = inflater.inflate(data);\n                    result.copy(data, 0);\n                    if (!crc32OK(data)) {\n                        console.warn(Utils.Errors.BAD_CRC + \" \" + _entryName.toString())\n                    }\n                    return data;\n                } else {\n                    inflater.inflateAsync(function(result) {\n                        result.copy(data, 0);\n                        if (!crc32OK(data)) {\n                            if (callback) callback(data, Utils.Errors.BAD_CRC); //si added error\n                        } else { //si added otherwise did not seem to return data.\n                            if (callback) callback(data);\n                        }\n                    })\n                }\n                break;\n            default:\n                if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD);\n                return Utils.Errors.UNKNOWN_METHOD;\n        }\n    }\n\n    function compress(/*Boolean*/async, /*Function*/callback) {\n        if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {\n            // no data set or the data wasn't changed to require recompression\n            if (async && callback) callback(getCompressedDataFromZip());\n            return getCompressedDataFromZip();\n        }\n\n        if (uncompressedData.length && !_isDirectory) {\n            var compressedData;\n            // Local file header\n            switch (_entryHeader.method) {\n                case Utils.Constants.STORED:\n                    _entryHeader.compressedSize = _entryHeader.size;\n\n                    compressedData = Buffer.alloc(uncompressedData.length);\n                    uncompressedData.copy(compressedData);\n\n                    if (async && callback) callback(compressedData);\n                    return compressedData;\n                default:\n                case Utils.Constants.DEFLATED:\n\n                    var deflater = new Methods.Deflater(uncompressedData);\n                    if (!async) {\n                        var deflated = deflater.deflate();\n                        _entryHeader.compressedSize = deflated.length;\n                        return deflated;\n                    } else {\n                        deflater.deflateAsync(function(data) {\n                            compressedData = Buffer.alloc(data.length);\n                            _entryHeader.compressedSize = data.length;\n                            data.copy(compressedData);\n                            callback && callback(compressedData);\n                        })\n                    }\n                    deflater = null;\n                    break;\n            }\n        } else {\n            if (async && callback) {\n                callback(Buffer.alloc(0));\n            } else {\n                return Buffer.alloc(0);\n            }\n        }\n    }\n\n    function readUInt64LE(buffer, offset) {\n        return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset);\n    }\n\n    function parseExtra(data) {\n        var offset = 0;\n        var signature, size, part;\n        while(offset<data.length) {\n            signature = data.readUInt16LE(offset);\n            offset += 2;\n            size = data.readUInt16LE(offset);\n            offset += 2;\n            part = data.slice(offset, offset+size);\n            offset += size;\n            if(Constants.ID_ZIP64 === signature) {\n                parseZip64ExtendedInformation(part);\n            }\n        }\n    }\n\n    //Override header field values with values from the ZIP64 extra field\n    function parseZip64ExtendedInformation(data) {\n        var size, compressedSize, offset, diskNumStart;\n\n        if(data.length >= Constants.EF_ZIP64_SCOMP) {\n            size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);\n            if(_entryHeader.size === Constants.EF_ZIP64_OR_32) {\n                _entryHeader.size = size;\n            }\n        }\n        if(data.length >= Constants.EF_ZIP64_RHO) {\n            compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);\n            if(_entryHeader.compressedSize === Constants.EF_ZIP64_OR_32) {\n                _entryHeader.compressedSize = compressedSize;\n            }\n        }\n        if(data.length >= Constants.EF_ZIP64_DSN) {\n            offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);\n            if(_entryHeader.offset === Constants.EF_ZIP64_OR_32) {\n                _entryHeader.offset = offset;\n            }\n        }\n        if(data.length >= Constants.EF_ZIP64_DSN+4) {\n            diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);\n            if(_entryHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {\n                _entryHeader.diskNumStart = diskNumStart;\n            }\n        }\n    }\n\n\n    return {\n        get entryName () { return _entryName.toString(); },\n        get rawEntryName() { return _entryName; },\n        set entryName (val) {\n            _entryName = Utils.toBuffer(val);\n            var lastChar = _entryName[_entryName.length - 1];\n            _isDirectory = (lastChar === 47) || (lastChar === 92);\n            _entryHeader.fileNameLength = _entryName.length;\n        },\n\n        get extra () { return _extra; },\n        set extra (val) {\n            _extra = val;\n            _entryHeader.extraLength = val.length;\n            parseExtra(val);\n        },\n\n        get comment () { return _comment.toString(); },\n        set comment (val) {\n            _comment = Utils.toBuffer(val);\n            _entryHeader.commentLength = _comment.length;\n        },\n\n        get name () { var n = _entryName.toString(); return _isDirectory ? n.substr(n.length - 1).split(\"/\").pop() : n.split(\"/\").pop(); },\n        get isDirectory () { return _isDirectory },\n\n        getCompressedData : function() {\n            return compress(false, null)\n        },\n\n        getCompressedDataAsync : function(/*Function*/callback) {\n            compress(true, callback)\n        },\n\n        setData : function(value) {\n            uncompressedData = Utils.toBuffer(value);\n            if (!_isDirectory && uncompressedData.length) {\n                _entryHeader.size = uncompressedData.length;\n                _entryHeader.method = Utils.Constants.DEFLATED;\n                _entryHeader.crc = Utils.crc32(value);\n                _entryHeader.changed = true;\n            } else { // folders and blank files should be stored\n                _entryHeader.method = Utils.Constants.STORED;\n            }\n        },\n\n        getData : function(pass) {\n            if (_entryHeader.changed) {\n\t\t\t\treturn uncompressedData;\n\t\t\t} else {\n\t\t\t\treturn decompress(false, null, pass);\n            }\n        },\n\n        getDataAsync : function(/*Function*/callback, pass) {\n\t\t\tif (_entryHeader.changed) {\n\t\t\t\tcallback(uncompressedData)\n\t\t\t} else {\n\t\t\t\tdecompress(true, callback, pass)\n            }\n        },\n\n        set attr(attr) { _entryHeader.attr = attr; },\n        get attr() { return _entryHeader.attr; },\n\n        set header(/*Buffer*/data) {\n            _entryHeader.loadFromBinary(data);\n        },\n\n        get header() {\n            return _entryHeader;\n        },\n\n        packHeader : function() {\n            var header = _entryHeader.entryHeaderToBinary();\n            // add\n            _entryName.copy(header, Utils.Constants.CENHDR);\n            if (_entryHeader.extraLength) {\n                _extra.copy(header, Utils.Constants.CENHDR + _entryName.length)\n            }\n            if (_entryHeader.commentLength) {\n                _comment.copy(header, Utils.Constants.CENHDR + _entryName.length + _entryHeader.extraLength, _comment.length);\n            }\n            return header;\n        },\n\n        toString : function() {\n            return '{\\n' +\n                '\\t\"entryName\" : \"' + _entryName.toString() + \"\\\",\\n\" +\n                '\\t\"name\" : \"' + (_isDirectory ? _entryName.toString().replace(/\\/$/, '').split(\"/\").pop() : _entryName.toString().split(\"/\").pop()) + \"\\\",\\n\" +\n                '\\t\"comment\" : \"' + _comment.toString() + \"\\\",\\n\" +\n                '\\t\"isDirectory\" : ' + _isDirectory + \",\\n\" +\n                '\\t\"header\" : ' + _entryHeader.toString().replace(/\\t/mg, \"\\t\\t\").replace(/}/mg, \"\\t}\")  + \",\\n\" +\n                '\\t\"compressedData\" : <' + (input && input.length  + \" bytes buffer\" || \"null\") + \">\\n\" +\n                '\\t\"data\" : <' + (uncompressedData && uncompressedData.length  + \" bytes buffer\" || \"null\") + \">\\n\" +\n                '}';\n        }\n    }\n};\n","var ZipEntry = require(\"./zipEntry\"),\n\tHeaders = require(\"./headers\"),\n\tUtils = require(\"./util\");\n\nmodule.exports = function (/*String|Buffer*/input, /*Number*/inputType) {\n\tvar entryList = [],\n\t\tentryTable = {},\n\t\t_comment = Buffer.alloc(0),\n\t\tfilename = \"\",\n\t\tfs = Utils.FileSystem.require(),\n\t\tinBuffer = null,\n\t\tmainHeader = new Headers.MainHeader();\n\n\tif (inputType === Utils.Constants.FILE) {\n\t\t// is a filename\n\t\tfilename = input;\n\t\tinBuffer = fs.readFileSync(filename);\n\t\treadMainHeader();\n\t} else if (inputType === Utils.Constants.BUFFER) {\n\t\t// is a memory buffer\n\t\tinBuffer = input;\n\t\treadMainHeader();\n\t} else {\n\t\t// none. is a new file\n\t}\n\n\tfunction readEntries() {\n\t\tentryTable = {};\n\t\tentryList = new Array(mainHeader.diskEntries);  // total number of entries\n\t\tvar index = mainHeader.offset;  // offset of first CEN header\n\t\tfor (var i = 0; i < entryList.length; i++) {\n\n\t\t\tvar tmp = index,\n\t\t\t\tentry = new ZipEntry(inBuffer);\n\t\t\tentry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR);\n\n\t\t\tentry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength);\n\n\t\t\tif (entry.header.extraLength) {\n\t\t\t\tentry.extra = inBuffer.slice(tmp, tmp += entry.header.extraLength);\n\t\t\t}\n\n\t\t\tif (entry.header.commentLength)\n\t\t\t\tentry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength);\n\n\t\t\tindex += entry.header.entryHeaderSize;\n\n\t\t\tentryList[i] = entry;\n\t\t\tentryTable[entry.entryName] = entry;\n\t\t}\n\t}\n\n\tfunction readMainHeader() {\n\t\tvar i = inBuffer.length - Utils.Constants.ENDHDR, // END header size\n\t\t\tn = Math.max(0, i - 0xFFFF), // 0xFFFF is the max zip file comment length\n\t\t\tendOffset = -1; // Start offset of the END header\n\n\t\tfor (i; i >= n; i--) {\n\t\t\tif (inBuffer[i] !== 0x50) continue; // quick check that the byte is 'P'\n\t\t\tif (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) { // \"PK\\005\\006\"\n\t\t\t\tendOffset = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!~endOffset)\n\t\t\tthrow Utils.Errors.INVALID_FORMAT;\n\n\t\tmainHeader.loadFromBinary(inBuffer.slice(endOffset, endOffset + Utils.Constants.ENDHDR));\n\t\tif (mainHeader.commentLength) {\n\t\t\t_comment = inBuffer.slice(endOffset + Utils.Constants.ENDHDR);\n\t\t}\n\t\treadEntries();\n\t}\n\n\treturn {\n\t\t/**\n\t\t * Returns an array of ZipEntry objects existent in the current opened archive\n\t\t * @return Array\n\t\t */\n\t\tget entries() {\n\t\t\treturn entryList;\n\t\t},\n\n\t\t/**\n\t\t * Archive comment\n\t\t * @return {String}\n\t\t */\n\t\tget comment() {\n\t\t\treturn _comment.toString();\n\t\t},\n\t\tset comment(val) {\n\t\t\tmainHeader.commentLength = val.length;\n\t\t\t_comment = val;\n\t\t},\n\n\t\t/**\n\t\t * Returns a reference to the entry with the given name or null if entry is inexistent\n\t\t *\n\t\t * @param entryName\n\t\t * @return ZipEntry\n\t\t */\n\t\tgetEntry: function (/*String*/entryName) {\n\t\t\treturn entryTable[entryName] || null;\n\t\t},\n\n\t\t/**\n\t\t * Adds the given entry to the entry list\n\t\t *\n\t\t * @param entry\n\t\t */\n\t\tsetEntry: function (/*ZipEntry*/entry) {\n\t\t\tentryList.push(entry);\n\t\t\tentryTable[entry.entryName] = entry;\n\t\t\tmainHeader.totalEntries = entryList.length;\n\t\t},\n\n\t\t/**\n\t\t * Removes the entry with the given name from the entry list.\n\t\t *\n\t\t * If the entry is a directory, then all nested files and directories will be removed\n\t\t * @param entryName\n\t\t */\n\t\tdeleteEntry: function (/*String*/entryName) {\n\t\t\tvar entry = entryTable[entryName];\n\t\t\tif (entry && entry.isDirectory) {\n\t\t\t\tvar _self = this;\n\t\t\t\tthis.getEntryChildren(entry).forEach(function (child) {\n\t\t\t\t\tif (child.entryName !== entryName) {\n\t\t\t\t\t\t_self.deleteEntry(child.entryName)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t\tentryList.splice(entryList.indexOf(entry), 1);\n\t\t\tdelete(entryTable[entryName]);\n\t\t\tmainHeader.totalEntries = entryList.length;\n\t\t},\n\n\t\t/**\n\t\t *  Iterates and returns all nested files and directories of the given entry\n\t\t *\n\t\t * @param entry\n\t\t * @return Array\n\t\t */\n\t\tgetEntryChildren: function (/*ZipEntry*/entry) {\n\t\t\tif (entry.isDirectory) {\n\t\t\t\tvar list = [],\n\t\t\t\t\tname = entry.entryName,\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\tentryList.forEach(function (zipEntry) {\n\t\t\t\t\tif (zipEntry.entryName.substr(0, len) === name) {\n\t\t\t\t\t\tlist.push(zipEntry);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn list;\n\t\t\t}\n\t\t\treturn []\n\t\t},\n\n\t\t/**\n\t\t * Returns the zip file\n\t\t *\n\t\t * @return Buffer\n\t\t */\n\t\tcompressToBuffer: function () {\n\t\t\tif (entryList.length > 1) {\n\t\t\t\tentryList.sort(function (a, b) {\n\t\t\t\t\tvar nameA = a.entryName.toLowerCase();\n\t\t\t\t\tvar nameB = b.entryName.toLowerCase();\n\t\t\t\t\tif (nameA < nameB) {\n\t\t\t\t\t\treturn -1\n\t\t\t\t\t}\n\t\t\t\t\tif (nameA > nameB) {\n\t\t\t\t\t\treturn 1\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar totalSize = 0,\n\t\t\t\tdataBlock = [],\n\t\t\t\tentryHeaders = [],\n\t\t\t\tdindex = 0;\n\n\t\t\tmainHeader.size = 0;\n\t\t\tmainHeader.offset = 0;\n\n\t\t\tentryList.forEach(function (entry) {\n\t\t\t\t// compress data and set local and entry header accordingly. Reason why is called first\n\t\t\t\tvar compressedData = entry.getCompressedData();\n\t\t\t\t// data header\n\t\t\t\tentry.header.offset = dindex;\n\t\t\t\tvar dataHeader = entry.header.dataHeaderToBinary();\n\t\t\t\tvar entryNameLen = entry.rawEntryName.length;\n\t\t\t\tvar extra = entry.extra.toString();\n\t\t\t\tvar postHeader = Buffer.alloc(entryNameLen + extra.length);\n\t\t\t\tentry.rawEntryName.copy(postHeader, 0);\n\t\t\t\tpostHeader.fill(extra, entryNameLen);\n\n\t\t\t\tvar dataLength = dataHeader.length + postHeader.length + compressedData.length;\n\n\t\t\t\tdindex += dataLength;\n\n\t\t\t\tdataBlock.push(dataHeader);\n\t\t\t\tdataBlock.push(postHeader);\n\t\t\t\tdataBlock.push(compressedData);\n\n\t\t\t\tvar entryHeader = entry.packHeader();\n\t\t\t\tentryHeaders.push(entryHeader);\n\t\t\t\tmainHeader.size += entryHeader.length;\n\t\t\t\ttotalSize += (dataLength + entryHeader.length);\n\t\t\t});\n\n\t\t\ttotalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n\t\t\t// point to end of data and beginning of central directory first record\n\t\t\tmainHeader.offset = dindex;\n\n\t\t\tdindex = 0;\n\t\t\tvar outBuffer = Buffer.alloc(totalSize);\n\t\t\tdataBlock.forEach(function (content) {\n\t\t\t\tcontent.copy(outBuffer, dindex); // write data blocks\n\t\t\t\tdindex += content.length;\n\t\t\t});\n\t\t\tentryHeaders.forEach(function (content) {\n\t\t\t\tcontent.copy(outBuffer, dindex); // write central directory entries\n\t\t\t\tdindex += content.length;\n\t\t\t});\n\n\t\t\tvar mh = mainHeader.toBinary();\n\t\t\tif (_comment) {\n\t\t\t\t_comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment\n\t\t\t}\n\n\t\t\tmh.copy(outBuffer, dindex); // write main header\n\n\t\t\treturn outBuffer\n\t\t},\n\n\t\ttoAsyncBuffer: function (/*Function*/onSuccess, /*Function*/onFail, /*Function*/onItemStart, /*Function*/onItemEnd) {\n\t\t\tif (entryList.length > 1) {\n\t\t\t\tentryList.sort(function (a, b) {\n\t\t\t\t\tvar nameA = a.entryName.toLowerCase();\n\t\t\t\t\tvar nameB = b.entryName.toLowerCase();\n\t\t\t\t\tif (nameA > nameB) {\n\t\t\t\t\t\treturn -1\n\t\t\t\t\t}\n\t\t\t\t\tif (nameA < nameB) {\n\t\t\t\t\t\treturn 1\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar totalSize = 0,\n\t\t\t\tdataBlock = [],\n\t\t\t\tentryHeaders = [],\n\t\t\t\tdindex = 0;\n\n\t\t\tmainHeader.size = 0;\n\t\t\tmainHeader.offset = 0;\n\n\t\t\tvar compress = function (entryList) {\n\t\t\t\tvar self = arguments.callee;\n\t\t\t\tif (entryList.length) {\n\t\t\t\t\tvar entry = entryList.pop();\n\t\t\t\t\tvar name = entry.entryName + entry.extra.toString();\n\t\t\t\t\tif (onItemStart) onItemStart(name);\n\t\t\t\t\tentry.getCompressedDataAsync(function (compressedData) {\n\t\t\t\t\t\tif (onItemEnd) onItemEnd(name);\n\n\t\t\t\t\t\tentry.header.offset = dindex;\n\t\t\t\t\t\t// data header\n\t\t\t\t\t\tvar dataHeader = entry.header.dataHeaderToBinary();\n\t\t\t\t\t\tvar postHeader;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpostHeader = Buffer.alloc(name.length, name);  // using alloc will work on node  5.x+\n\t\t\t\t\t\t} catch(e){\n\t\t\t\t\t\t\tpostHeader = new Buffer(name); // use deprecated method if alloc fails...\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar dataLength = dataHeader.length + postHeader.length + compressedData.length;\n\n\t\t\t\t\t\tdindex += dataLength;\n\n\t\t\t\t\t\tdataBlock.push(dataHeader);\n\t\t\t\t\t\tdataBlock.push(postHeader);\n\t\t\t\t\t\tdataBlock.push(compressedData);\n\n\t\t\t\t\t\tvar entryHeader = entry.packHeader();\n\t\t\t\t\t\tentryHeaders.push(entryHeader);\n\t\t\t\t\t\tmainHeader.size += entryHeader.length;\n\t\t\t\t\t\ttotalSize += (dataLength + entryHeader.length);\n\n\t\t\t\t\t\tif (entryList.length) {\n\t\t\t\t\t\t\tself(entryList);\n\t\t\t\t\t\t} else {\n\n\n\t\t\t\t\t\t\ttotalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n\t\t\t\t\t\t\t// point to end of data and beginning of central directory first record\n\t\t\t\t\t\t\tmainHeader.offset = dindex;\n\n\t\t\t\t\t\t\tdindex = 0;\n\t\t\t\t\t\t\tvar outBuffer = Buffer.alloc(totalSize);\n\t\t\t\t\t\t\tdataBlock.forEach(function (content) {\n\t\t\t\t\t\t\t\tcontent.copy(outBuffer, dindex); // write data blocks\n\t\t\t\t\t\t\t\tdindex += content.length;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tentryHeaders.forEach(function (content) {\n\t\t\t\t\t\t\t\tcontent.copy(outBuffer, dindex); // write central directory entries\n\t\t\t\t\t\t\t\tdindex += content.length;\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tvar mh = mainHeader.toBinary();\n\t\t\t\t\t\t\tif (_comment) {\n\t\t\t\t\t\t\t\t_comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tmh.copy(outBuffer, dindex); // write main header\n\n\t\t\t\t\t\t\tonSuccess(outBuffer);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tcompress(entryList);\n\t\t}\n\t}\n};\n","'use strict'\n\n// A linked list to keep track of recently-used-ness\nconst Yallist = require('yallist')\n\nconst MAX = Symbol('max')\nconst LENGTH = Symbol('length')\nconst LENGTH_CALCULATOR = Symbol('lengthCalculator')\nconst ALLOW_STALE = Symbol('allowStale')\nconst MAX_AGE = Symbol('maxAge')\nconst DISPOSE = Symbol('dispose')\nconst NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')\nconst LRU_LIST = Symbol('lruList')\nconst CACHE = Symbol('cache')\nconst UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')\n\nconst naiveLength = () => 1\n\n// lruList is a yallist where the head is the youngest\n// item, and the tail is the oldest.  the list contains the Hit\n// objects as the entries.\n// Each Hit object has a reference to its Yallist.Node.  This\n// never changes.\n//\n// cache is a Map (or PseudoMap) that matches the keys to\n// the Yallist.Node object.\nclass LRUCache {\n  constructor (options) {\n    if (typeof options === 'number')\n      options = { max: options }\n\n    if (!options)\n      options = {}\n\n    if (options.max && (typeof options.max !== 'number' || options.max < 0))\n      throw new TypeError('max must be a non-negative number')\n    // Kind of weird to have a default max of Infinity, but oh well.\n    const max = this[MAX] = options.max || Infinity\n\n    const lc = options.length || naiveLength\n    this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc\n    this[ALLOW_STALE] = options.stale || false\n    if (options.maxAge && typeof options.maxAge !== 'number')\n      throw new TypeError('maxAge must be a number')\n    this[MAX_AGE] = options.maxAge || 0\n    this[DISPOSE] = options.dispose\n    this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false\n    this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false\n    this.reset()\n  }\n\n  // resize the cache when the max changes.\n  set max (mL) {\n    if (typeof mL !== 'number' || mL < 0)\n      throw new TypeError('max must be a non-negative number')\n\n    this[MAX] = mL || Infinity\n    trim(this)\n  }\n  get max () {\n    return this[MAX]\n  }\n\n  set allowStale (allowStale) {\n    this[ALLOW_STALE] = !!allowStale\n  }\n  get allowStale () {\n    return this[ALLOW_STALE]\n  }\n\n  set maxAge (mA) {\n    if (typeof mA !== 'number')\n      throw new TypeError('maxAge must be a non-negative number')\n\n    this[MAX_AGE] = mA\n    trim(this)\n  }\n  get maxAge () {\n    return this[MAX_AGE]\n  }\n\n  // resize the cache when the lengthCalculator changes.\n  set lengthCalculator (lC) {\n    if (typeof lC !== 'function')\n      lC = naiveLength\n\n    if (lC !== this[LENGTH_CALCULATOR]) {\n      this[LENGTH_CALCULATOR] = lC\n      this[LENGTH] = 0\n      this[LRU_LIST].forEach(hit => {\n        hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)\n        this[LENGTH] += hit.length\n      })\n    }\n    trim(this)\n  }\n  get lengthCalculator () { return this[LENGTH_CALCULATOR] }\n\n  get length () { return this[LENGTH] }\n  get itemCount () { return this[LRU_LIST].length }\n\n  rforEach (fn, thisp) {\n    thisp = thisp || this\n    for (let walker = this[LRU_LIST].tail; walker !== null;) {\n      const prev = walker.prev\n      forEachStep(this, fn, walker, thisp)\n      walker = prev\n    }\n  }\n\n  forEach (fn, thisp) {\n    thisp = thisp || this\n    for (let walker = this[LRU_LIST].head; walker !== null;) {\n      const next = walker.next\n      forEachStep(this, fn, walker, thisp)\n      walker = next\n    }\n  }\n\n  keys () {\n    return this[LRU_LIST].toArray().map(k => k.key)\n  }\n\n  values () {\n    return this[LRU_LIST].toArray().map(k => k.value)\n  }\n\n  reset () {\n    if (this[DISPOSE] &&\n        this[LRU_LIST] &&\n        this[LRU_LIST].length) {\n      this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))\n    }\n\n    this[CACHE] = new Map() // hash of items by key\n    this[LRU_LIST] = new Yallist() // list of items in order of use recency\n    this[LENGTH] = 0 // length of items in the list\n  }\n\n  dump () {\n    return this[LRU_LIST].map(hit =>\n      isStale(this, hit) ? false : {\n        k: hit.key,\n        v: hit.value,\n        e: hit.now + (hit.maxAge || 0)\n      }).toArray().filter(h => h)\n  }\n\n  dumpLru () {\n    return this[LRU_LIST]\n  }\n\n  set (key, value, maxAge) {\n    maxAge = maxAge || this[MAX_AGE]\n\n    if (maxAge && typeof maxAge !== 'number')\n      throw new TypeError('maxAge must be a number')\n\n    const now = maxAge ? Date.now() : 0\n    const len = this[LENGTH_CALCULATOR](value, key)\n\n    if (this[CACHE].has(key)) {\n      if (len > this[MAX]) {\n        del(this, this[CACHE].get(key))\n        return false\n      }\n\n      const node = this[CACHE].get(key)\n      const item = node.value\n\n      // dispose of the old one before overwriting\n      // split out into 2 ifs for better coverage tracking\n      if (this[DISPOSE]) {\n        if (!this[NO_DISPOSE_ON_SET])\n          this[DISPOSE](key, item.value)\n      }\n\n      item.now = now\n      item.maxAge = maxAge\n      item.value = value\n      this[LENGTH] += len - item.length\n      item.length = len\n      this.get(key)\n      trim(this)\n      return true\n    }\n\n    const hit = new Entry(key, value, len, now, maxAge)\n\n    // oversized objects fall out of cache automatically.\n    if (hit.length > this[MAX]) {\n      if (this[DISPOSE])\n        this[DISPOSE](key, value)\n\n      return false\n    }\n\n    this[LENGTH] += hit.length\n    this[LRU_LIST].unshift(hit)\n    this[CACHE].set(key, this[LRU_LIST].head)\n    trim(this)\n    return true\n  }\n\n  has (key) {\n    if (!this[CACHE].has(key)) return false\n    const hit = this[CACHE].get(key).value\n    return !isStale(this, hit)\n  }\n\n  get (key) {\n    return get(this, key, true)\n  }\n\n  peek (key) {\n    return get(this, key, false)\n  }\n\n  pop () {\n    const node = this[LRU_LIST].tail\n    if (!node)\n      return null\n\n    del(this, node)\n    return node.value\n  }\n\n  del (key) {\n    del(this, this[CACHE].get(key))\n  }\n\n  load (arr) {\n    // reset the cache\n    this.reset()\n\n    const now = Date.now()\n    // A previous serialized cache has the most recent items first\n    for (let l = arr.length - 1; l >= 0; l--) {\n      const hit = arr[l]\n      const expiresAt = hit.e || 0\n      if (expiresAt === 0)\n        // the item was created without expiration in a non aged cache\n        this.set(hit.k, hit.v)\n      else {\n        const maxAge = expiresAt - now\n        // dont add already expired items\n        if (maxAge > 0) {\n          this.set(hit.k, hit.v, maxAge)\n        }\n      }\n    }\n  }\n\n  prune () {\n    this[CACHE].forEach((value, key) => get(this, key, false))\n  }\n}\n\nconst get = (self, key, doUse) => {\n  const node = self[CACHE].get(key)\n  if (node) {\n    const hit = node.value\n    if (isStale(self, hit)) {\n      del(self, node)\n      if (!self[ALLOW_STALE])\n        return undefined\n    } else {\n      if (doUse) {\n        if (self[UPDATE_AGE_ON_GET])\n          node.value.now = Date.now()\n        self[LRU_LIST].unshiftNode(node)\n      }\n    }\n    return hit.value\n  }\n}\n\nconst isStale = (self, hit) => {\n  if (!hit || (!hit.maxAge && !self[MAX_AGE]))\n    return false\n\n  const diff = Date.now() - hit.now\n  return hit.maxAge ? diff > hit.maxAge\n    : self[MAX_AGE] && (diff > self[MAX_AGE])\n}\n\nconst trim = self => {\n  if (self[LENGTH] > self[MAX]) {\n    for (let walker = self[LRU_LIST].tail;\n      self[LENGTH] > self[MAX] && walker !== null;) {\n      // We know that we're about to delete this one, and also\n      // what the next least recently used key will be, so just\n      // go ahead and set it now.\n      const prev = walker.prev\n      del(self, walker)\n      walker = prev\n    }\n  }\n}\n\nconst del = (self, node) => {\n  if (node) {\n    const hit = node.value\n    if (self[DISPOSE])\n      self[DISPOSE](hit.key, hit.value)\n\n    self[LENGTH] -= hit.length\n    self[CACHE].delete(hit.key)\n    self[LRU_LIST].removeNode(node)\n  }\n}\n\nclass Entry {\n  constructor (key, value, length, now, maxAge) {\n    this.key = key\n    this.value = value\n    this.length = length\n    this.now = now\n    this.maxAge = maxAge || 0\n  }\n}\n\nconst forEachStep = (self, fn, node, thisp) => {\n  let hit = node.value\n  if (isStale(self, hit)) {\n    del(self, node)\n    if (!self[ALLOW_STALE])\n      hit = undefined\n  }\n  if (hit)\n    fn.call(thisp, hit.value, hit.key, self)\n}\n\nmodule.exports = LRUCache\n","export type EventType = string | symbol;\n\n// An event handler can take an optional event argument\n// and should not return a value\nexport type Handler<T = any> = (event?: T) => void;\nexport type WildcardHandler = (type: EventType, event?: any) => void;\n\n// An array of all currently registered event handlers for a type\nexport type EventHandlerList = Array<Handler>;\nexport type WildCardEventHandlerList = Array<WildcardHandler>;\n\n// A map of event types and their corresponding event handlers.\nexport type EventHandlerMap = Map<EventType, EventHandlerList | WildCardEventHandlerList>;\n\nexport interface Emitter {\n\tall: EventHandlerMap;\n\n\ton<T = any>(type: EventType, handler: Handler<T>): void;\n\ton(type: '*', handler: WildcardHandler): void;\n\n\toff<T = any>(type: EventType, handler: Handler<T>): void;\n\toff(type: '*', handler: WildcardHandler): void;\n\n\temit<T = any>(type: EventType, event?: T): void;\n\temit(type: '*', event?: any): void;\n}\n\n/**\n * Mitt: Tiny (~200b) functional event emitter / pubsub.\n * @name mitt\n * @returns {Mitt}\n */\nexport default function mitt(all?: EventHandlerMap): Emitter {\n\tall = all || new Map();\n\n\treturn {\n\n\t\t/**\n\t\t * A Map of event names to registered handler functions.\n\t\t */\n\t\tall,\n\n\t\t/**\n\t\t * Register an event handler for the given type.\n\t\t * @param {string|symbol} type Type of event to listen for, or `\"*\"` for all events\n\t\t * @param {Function} handler Function to call in response to given event\n\t\t * @memberOf mitt\n\t\t */\n\t\ton<T = any>(type: EventType, handler: Handler<T>) {\n\t\t\tconst handlers = all.get(type);\n\t\t\tconst added = handlers && handlers.push(handler);\n\t\t\tif (!added) {\n\t\t\t\tall.set(type, [handler]);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove an event handler for the given type.\n\t\t * @param {string|symbol} type Type of event to unregister `handler` from, or `\"*\"`\n\t\t * @param {Function} handler Handler function to remove\n\t\t * @memberOf mitt\n\t\t */\n\t\toff<T = any>(type: EventType, handler: Handler<T>) {\n\t\t\tconst handlers = all.get(type);\n\t\t\tif (handlers) {\n\t\t\t\thandlers.splice(handlers.indexOf(handler) >>> 0, 1);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Invoke all handlers for the given type.\n\t\t * If present, `\"*\"` handlers are invoked after type-matched handlers.\n\t\t *\n\t\t * Note: Manually firing \"*\" handlers is not supported.\n\t\t *\n\t\t * @param {string|symbol} type The event type to invoke\n\t\t * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler\n\t\t * @memberOf mitt\n\t\t */\n\t\temit<T = any>(type: EventType, evt: T) {\n\t\t\t((all.get(type) || []) as EventHandlerList).slice().map((handler) => { handler(evt); });\n\t\t\t((all.get('*') || []) as WildCardEventHandlerList).slice().map((handler) => { handler(type, evt); });\n\t\t}\n\t};\n}\n","'use strict'\nmodule.exports = function (Yallist) {\n  Yallist.prototype[Symbol.iterator] = function* () {\n    for (let walker = this.head; walker; walker = walker.next) {\n      yield walker.value\n    }\n  }\n}\n","'use strict'\nmodule.exports = Yallist\n\nYallist.Node = Node\nYallist.create = Yallist\n\nfunction Yallist (list) {\n  var self = this\n  if (!(self instanceof Yallist)) {\n    self = new Yallist()\n  }\n\n  self.tail = null\n  self.head = null\n  self.length = 0\n\n  if (list && typeof list.forEach === 'function') {\n    list.forEach(function (item) {\n      self.push(item)\n    })\n  } else if (arguments.length > 0) {\n    for (var i = 0, l = arguments.length; i < l; i++) {\n      self.push(arguments[i])\n    }\n  }\n\n  return self\n}\n\nYallist.prototype.removeNode = function (node) {\n  if (node.list !== this) {\n    throw new Error('removing node which does not belong to this list')\n  }\n\n  var next = node.next\n  var prev = node.prev\n\n  if (next) {\n    next.prev = prev\n  }\n\n  if (prev) {\n    prev.next = next\n  }\n\n  if (node === this.head) {\n    this.head = next\n  }\n  if (node === this.tail) {\n    this.tail = prev\n  }\n\n  node.list.length--\n  node.next = null\n  node.prev = null\n  node.list = null\n}\n\nYallist.prototype.unshiftNode = function (node) {\n  if (node === this.head) {\n    return\n  }\n\n  if (node.list) {\n    node.list.removeNode(node)\n  }\n\n  var head = this.head\n  node.list = this\n  node.next = head\n  if (head) {\n    head.prev = node\n  }\n\n  this.head = node\n  if (!this.tail) {\n    this.tail = node\n  }\n  this.length++\n}\n\nYallist.prototype.pushNode = function (node) {\n  if (node === this.tail) {\n    return\n  }\n\n  if (node.list) {\n    node.list.removeNode(node)\n  }\n\n  var tail = this.tail\n  node.list = this\n  node.prev = tail\n  if (tail) {\n    tail.next = node\n  }\n\n  this.tail = node\n  if (!this.head) {\n    this.head = node\n  }\n  this.length++\n}\n\nYallist.prototype.push = function () {\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    push(this, arguments[i])\n  }\n  return this.length\n}\n\nYallist.prototype.unshift = function () {\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    unshift(this, arguments[i])\n  }\n  return this.length\n}\n\nYallist.prototype.pop = function () {\n  if (!this.tail) {\n    return undefined\n  }\n\n  var res = this.tail.value\n  this.tail = this.tail.prev\n  if (this.tail) {\n    this.tail.next = null\n  } else {\n    this.head = null\n  }\n  this.length--\n  return res\n}\n\nYallist.prototype.shift = function () {\n  if (!this.head) {\n    return undefined\n  }\n\n  var res = this.head.value\n  this.head = this.head.next\n  if (this.head) {\n    this.head.prev = null\n  } else {\n    this.tail = null\n  }\n  this.length--\n  return res\n}\n\nYallist.prototype.forEach = function (fn, thisp) {\n  thisp = thisp || this\n  for (var walker = this.head, i = 0; walker !== null; i++) {\n    fn.call(thisp, walker.value, i, this)\n    walker = walker.next\n  }\n}\n\nYallist.prototype.forEachReverse = function (fn, thisp) {\n  thisp = thisp || this\n  for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n    fn.call(thisp, walker.value, i, this)\n    walker = walker.prev\n  }\n}\n\nYallist.prototype.get = function (n) {\n  for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n    // abort out of the list early if we hit a cycle\n    walker = walker.next\n  }\n  if (i === n && walker !== null) {\n    return walker.value\n  }\n}\n\nYallist.prototype.getReverse = function (n) {\n  for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n    // abort out of the list early if we hit a cycle\n    walker = walker.prev\n  }\n  if (i === n && walker !== null) {\n    return walker.value\n  }\n}\n\nYallist.prototype.map = function (fn, thisp) {\n  thisp = thisp || this\n  var res = new Yallist()\n  for (var walker = this.head; walker !== null;) {\n    res.push(fn.call(thisp, walker.value, this))\n    walker = walker.next\n  }\n  return res\n}\n\nYallist.prototype.mapReverse = function (fn, thisp) {\n  thisp = thisp || this\n  var res = new Yallist()\n  for (var walker = this.tail; walker !== null;) {\n    res.push(fn.call(thisp, walker.value, this))\n    walker = walker.prev\n  }\n  return res\n}\n\nYallist.prototype.reduce = function (fn, initial) {\n  var acc\n  var walker = this.head\n  if (arguments.length > 1) {\n    acc = initial\n  } else if (this.head) {\n    walker = this.head.next\n    acc = this.head.value\n  } else {\n    throw new TypeError('Reduce of empty list with no initial value')\n  }\n\n  for (var i = 0; walker !== null; i++) {\n    acc = fn(acc, walker.value, i)\n    walker = walker.next\n  }\n\n  return acc\n}\n\nYallist.prototype.reduceReverse = function (fn, initial) {\n  var acc\n  var walker = this.tail\n  if (arguments.length > 1) {\n    acc = initial\n  } else if (this.tail) {\n    walker = this.tail.prev\n    acc = this.tail.value\n  } else {\n    throw new TypeError('Reduce of empty list with no initial value')\n  }\n\n  for (var i = this.length - 1; walker !== null; i--) {\n    acc = fn(acc, walker.value, i)\n    walker = walker.prev\n  }\n\n  return acc\n}\n\nYallist.prototype.toArray = function () {\n  var arr = new Array(this.length)\n  for (var i = 0, walker = this.head; walker !== null; i++) {\n    arr[i] = walker.value\n    walker = walker.next\n  }\n  return arr\n}\n\nYallist.prototype.toArrayReverse = function () {\n  var arr = new Array(this.length)\n  for (var i = 0, walker = this.tail; walker !== null; i++) {\n    arr[i] = walker.value\n    walker = walker.prev\n  }\n  return arr\n}\n\nYallist.prototype.slice = function (from, to) {\n  to = to || this.length\n  if (to < 0) {\n    to += this.length\n  }\n  from = from || 0\n  if (from < 0) {\n    from += this.length\n  }\n  var ret = new Yallist()\n  if (to < from || to < 0) {\n    return ret\n  }\n  if (from < 0) {\n    from = 0\n  }\n  if (to > this.length) {\n    to = this.length\n  }\n  for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n    walker = walker.next\n  }\n  for (; walker !== null && i < to; i++, walker = walker.next) {\n    ret.push(walker.value)\n  }\n  return ret\n}\n\nYallist.prototype.sliceReverse = function (from, to) {\n  to = to || this.length\n  if (to < 0) {\n    to += this.length\n  }\n  from = from || 0\n  if (from < 0) {\n    from += this.length\n  }\n  var ret = new Yallist()\n  if (to < from || to < 0) {\n    return ret\n  }\n  if (from < 0) {\n    from = 0\n  }\n  if (to > this.length) {\n    to = this.length\n  }\n  for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n    walker = walker.prev\n  }\n  for (; walker !== null && i > from; i--, walker = walker.prev) {\n    ret.push(walker.value)\n  }\n  return ret\n}\n\nYallist.prototype.reverse = function () {\n  var head = this.head\n  var tail = this.tail\n  for (var walker = head; walker !== null; walker = walker.prev) {\n    var p = walker.prev\n    walker.prev = walker.next\n    walker.next = p\n  }\n  this.head = tail\n  this.tail = head\n  return this\n}\n\nfunction push (self, item) {\n  self.tail = new Node(item, self.tail, null, self)\n  if (!self.head) {\n    self.head = self.tail\n  }\n  self.length++\n}\n\nfunction unshift (self, item) {\n  self.head = new Node(item, null, self.head, self)\n  if (!self.tail) {\n    self.tail = self.head\n  }\n  self.length++\n}\n\nfunction Node (value, prev, next, list) {\n  if (!(this instanceof Node)) {\n    return new Node(value, prev, next, list)\n  }\n\n  this.list = list\n  this.value = value\n\n  if (prev) {\n    prev.next = this\n    this.prev = prev\n  } else {\n    this.prev = null\n  }\n\n  if (next) {\n    next.prev = this\n    this.next = next\n  } else {\n    this.next = null\n  }\n}\n\ntry {\n  // add if support for Symbol.iterator is present\n  require('./iterator.js')(Yallist)\n} catch (er) {}\n","import * as monthUtils from '../shared/months';\nimport * as sheet from '../server/sheet';\nimport * as budget from '../server/budget/base';\nimport * as db from '../server/db';\nimport * as prefs from '../server/prefs';\nimport * as budgetActions from '../server/budget/actions';\nimport { runQuery as aqlQuery } from '../server/aql/schema/run-query';\nimport { batchMessages, setSyncingMode } from '../server/sync';\nimport { runHandler, runMutator } from '../server/mutators';\nimport { addTransactions } from '../server/accounts/sync';\nimport q from '../shared/query';\n\nfunction pickRandom(list) {\n  return list[((Math.random() * list.length) | 0) % list.length];\n}\n\nfunction number(start, end) {\n  return start + (end - start) * Math.random();\n}\n\nfunction integer(start, end) {\n  return number(start, end) | 0;\n}\n\nfunction findMin(items, field) {\n  let item = items[0];\n  for (let i = 0; i < items.length; i++) {\n    if (items[i][field] < item[field]) {\n      item = items[i];\n    }\n  }\n  return item;\n}\n\nfunction getStartingBalanceCat(categories) {\n  return categories.find(c => c.name === 'Starting Balances').id;\n}\n\nfunction extractCommonThings(payees, groups) {\n  let incomePayee = payees.find(p => p.name === 'Deposit');\n  let expensePayees = payees.filter(\n    p => p.name !== 'Deposit' && p.name !== 'Starting Balance'\n  );\n  let expenseGroup = groups.find(g => g.is_income === 0);\n  let incomeGroup = groups.find(g => g.is_income === 1);\n  let categories = expenseGroup.categories.filter(\n    c =>\n      [\n        'Food',\n        'Restaurants',\n        'Entertainment',\n        'Clothing',\n        'General',\n        'Gift',\n        'Medical'\n      ].indexOf(c.name) !== -1\n  );\n\n  return {\n    incomePayee,\n    expensePayees: expensePayees.filter(p => !p.bill),\n    incomeGroup,\n    expenseCategories: categories,\n    billCategories: groups.find(g => g.name === 'Bills').categories,\n    billPayees: expensePayees.filter(p => p.bill)\n  };\n}\n\nasync function fillPrimaryChecking(handlers, account, payees, groups) {\n  let {\n    incomePayee,\n    expensePayees,\n    incomeGroup,\n    expenseCategories,\n    billCategories,\n    billPayees\n  } = extractCommonThings(payees, groups);\n  let numTransactions = integer(100, 200);\n\n  let transactions = [];\n  for (let i = 0; i < numTransactions; i++) {\n    let payee;\n    if (Math.random() < 0.09) {\n      payee = incomePayee;\n    } else {\n      payee = pickRandom(expensePayees);\n    }\n\n    let category;\n    if (payee.name === 'Deposit') {\n      category = incomeGroup.categories.find(c => c.name === 'Income');\n    } else {\n      category = pickRandom(expenseCategories);\n    }\n\n    let amount;\n    if (payee.name === 'Deposit') {\n      amount = integer(50000, 70000);\n    } else {\n      amount = integer(0, Math.random() < 0.05 ? -8000 : -700);\n    }\n\n    let transaction = {\n      amount,\n      payee: payee.id,\n      account: account.id,\n      date: monthUtils.subDays(monthUtils.currentDay(), (i / 3) | 0),\n      category: category.id\n    };\n    transactions.push(transaction);\n\n    if (Math.random() < 0.2) {\n      let a = (transaction.amount / 3) | 0;\n      let pick = () =>\n        payee === incomePayee\n          ? incomeGroup.categories.find(c => c.name === 'Income').id\n          : pickRandom(expenseCategories).id;\n      transaction.subtransactions = [\n        { amount: a, category: pick() },\n        { amount: a, category: pick() },\n        {\n          amount: transaction.amount - a * 2,\n          category: pick()\n        }\n      ];\n    }\n  }\n\n  let earliestMonth = monthUtils.monthFromDate(\n    transactions[transactions.length - 1].date\n  );\n  let months = monthUtils.rangeInclusive(\n    earliestMonth,\n    monthUtils.currentMonth()\n  );\n  let currentDay = monthUtils.currentDay();\n  for (let month of months) {\n    let date = monthUtils.addDays(month, '12');\n    if (monthUtils.isBefore(date, currentDay)) {\n      transactions.push({\n        amount: -10000,\n        payee: billPayees.find(p => p.name.toLowerCase().includes('power')).id,\n        account: account.id,\n        date,\n        category: billCategories.find(c => c.name === 'Power').id\n      });\n    }\n\n    date = monthUtils.addDays(month, '18');\n    if (monthUtils.isBefore(date, currentDay)) {\n      transactions.push({\n        amount: -9000,\n        payee: billPayees.find(p => p.name.toLowerCase().includes('water')).id,\n        account: account.id,\n        date,\n        category: billCategories.find(c => c.name === 'Water').id\n      });\n    }\n\n    date = monthUtils.addDays(month, '2');\n    if (monthUtils.isBefore(date, currentDay)) {\n      transactions.push({\n        amount: -120000,\n        payee: billPayees.find(p => p.name.toLowerCase().includes('housy')).id,\n        account: account.id,\n        date,\n        category: billCategories.find(c => c.name === 'Mortgage').id\n      });\n    }\n\n    date = monthUtils.addDays(month, '20');\n    if (monthUtils.isBefore(date, currentDay)) {\n      transactions.push({\n        amount: -6000,\n        payee: billPayees.find(p => p.name.toLowerCase().includes('internet'))\n          .id,\n        account: account.id,\n        date,\n        category: billCategories.find(c => c.name === 'Internet').id\n      });\n    }\n\n    date = monthUtils.addDays(month, '23');\n    if (monthUtils.isBefore(date, currentDay)) {\n      transactions.push({\n        amount: -7500,\n        payee: billPayees.find(p => p.name.toLowerCase().includes('t-mobile'))\n          .id,\n        account: account.id,\n        date,\n        category: billCategories.find(c => c.name === 'Cell').id\n      });\n    }\n  }\n\n  let earliestDate = null;\n  transactions.forEach(t => {\n    if (earliestDate == null || t.date < earliestDate) {\n      earliestDate = t.date;\n    }\n  });\n\n  transactions.unshift({\n    amount: 100000,\n    payee: payees.find(p => p.name === 'Starting Balance').id,\n    account: account.id,\n    date: earliestDate,\n    category: getStartingBalanceCat(incomeGroup.categories),\n    starting_balance_flag: true\n  });\n\n  return addTransactions(account.id, transactions);\n}\n\nasync function fillChecking(handlers, account, payees, groups) {\n  let {\n    incomePayee,\n    expensePayees,\n    incomeGroup,\n    expenseCategories\n  } = extractCommonThings(payees, groups);\n  let numTransactions = integer(20, 40);\n\n  let transactions = [];\n  for (let i = 0; i < numTransactions; i++) {\n    let payee;\n    if (Math.random() < 0.04) {\n      payee = incomePayee;\n    } else {\n      payee = pickRandom(expensePayees);\n    }\n\n    let category;\n    if (payee.name === 'Deposit') {\n      category = incomeGroup.categories.find(c => c.name === 'Income');\n    } else {\n      category = pickRandom(expenseCategories);\n    }\n\n    let amount =\n      payee.name === 'Deposit' ? integer(50000, 70000) : integer(0, -10000);\n\n    transactions.push({\n      amount,\n      payee: payee.id,\n      account: account.id,\n      date: monthUtils.subDays(monthUtils.currentDay(), (i * 2) | 0),\n      category: category.id\n    });\n  }\n\n  transactions.unshift({\n    amount: integer(90000, 120000),\n    payee: payees.find(p => p.name === 'Starting Balance').id,\n    account: account.id,\n    date: transactions[transactions.length - 1].date,\n    category: getStartingBalanceCat(incomeGroup.categories),\n    starting_balance_flag: true\n  });\n\n  await handlers['transactions-batch-update']({\n    added: transactions,\n    fastMode: true\n  });\n}\n\nasync function fillInvestment(handlers, account, payees, groups) {\n  let {\n    incomePayee,\n    expensePayees,\n    incomeGroup,\n    expenseCategories\n  } = extractCommonThings(payees, groups);\n\n  let numTransactions = integer(10, 30);\n\n  let transactions = [];\n  for (let i = 0; i < numTransactions; i++) {\n    let payee = incomePayee;\n    let category = incomeGroup.categories.find(c => c.name === 'Income');\n\n    let amount = integer(10000, 20000);\n\n    transactions.push({\n      amount,\n      payee: payee.id,\n      account: account.id,\n      date: monthUtils.subDays(monthUtils.currentDay(), integer(10, 360)),\n      category: category.id\n    });\n  }\n\n  transactions.unshift({\n    amount: integer(10000, 20000),\n    payee: payees.find(p => p.name === 'Starting Balance').id,\n    account: account.id,\n    date: findMin(transactions, 'date').date,\n    category: getStartingBalanceCat(incomeGroup.categories),\n    starting_balance_flag: true\n  });\n\n  await handlers['transactions-batch-update']({\n    added: transactions,\n    fastMode: true\n  });\n}\n\nasync function fillSavings(handlers, account, payees, groups) {\n  let {\n    incomePayee,\n    expensePayees,\n    incomeGroup,\n    expenseCategories\n  } = extractCommonThings(payees, groups);\n\n  let numTransactions = integer(15, 40);\n\n  let transactions = [];\n  for (let i = 0; i < numTransactions; i++) {\n    let payee;\n    if (Math.random() < 0.3) {\n      payee = incomePayee;\n    } else {\n      payee = pickRandom(expensePayees);\n    }\n    let category =\n      payee === incomePayee\n        ? incomeGroup.categories.find(c => c.name === 'Income')\n        : pickRandom(expenseCategories);\n    let amount =\n      payee === incomePayee ? integer(10000, 80000) : integer(-10000, -2000);\n\n    transactions.push({\n      amount,\n      payee: payee.id,\n      account: account.id,\n      date: monthUtils.subDays(monthUtils.currentDay(), (i * 5) | 0),\n      category: category.id\n    });\n  }\n\n  transactions.unshift({\n    amount: 30000,\n    payee: payees.find(p => p.name === 'Starting Balance').id,\n    account: account.id,\n    date: transactions[transactions.length - 1].date,\n    category: getStartingBalanceCat(incomeGroup.categories),\n    starting_balance_flag: true\n  });\n\n  await handlers['transactions-batch-update']({\n    added: transactions,\n    fastMode: true\n  });\n}\n\nasync function fillMortgage(handlers, account, payees, groups) {\n  let {\n    incomePayee,\n    expensePayees,\n    incomeGroup,\n    expenseCategories\n  } = extractCommonThings(payees, groups);\n\n  let numTransactions = integer(7, 10);\n  let amount = integer(100000, 200000);\n  let category = incomeGroup.categories.find(c => c.name === 'Income');\n\n  let transactions = [\n    {\n      amount: integer(-3000, -3500) * 100 * 100,\n      payee: payees.find(p => p.name === 'Starting Balance').id,\n      account: account.id,\n      date:\n        monthUtils.subMonths(monthUtils.currentDay(), numTransactions) + '-02',\n      category: getStartingBalanceCat(incomeGroup.categories),\n      starting_balance_flag: true\n    }\n  ];\n  for (let i = 0; i < numTransactions; i++) {\n    let payee = incomePayee;\n\n    transactions.push({\n      amount,\n      payee: payee.id,\n      account: account.id,\n      date: monthUtils.subMonths(monthUtils.currentDay(), i) + '-02',\n      category: category.id,\n      starting_balance_flag: true\n    });\n  }\n\n  await handlers['transactions-batch-update']({\n    added: transactions,\n    fastMode: true\n  });\n}\n\nasync function fillOther(handlers, account, payees, groups) {\n  let {\n    incomePayee,\n    expensePayees,\n    incomeGroup,\n    expenseCategories\n  } = extractCommonThings(payees, groups);\n\n  let numTransactions = integer(3, 6);\n  let category = incomeGroup.categories.find(c => c.name === 'Income');\n\n  let transactions = [\n    {\n      amount: integer(3250, 3700) * 100 * 100,\n      payee: payees.find(p => p.name === 'Starting Balance').id,\n      account: account.id,\n      date:\n        monthUtils.subMonths(monthUtils.currentDay(), numTransactions) + '-02',\n      category: getStartingBalanceCat(incomeGroup.categories),\n      starting_balance_flag: true\n    }\n  ];\n  for (let i = 0; i < numTransactions; i++) {\n    let payee = incomePayee;\n    let amount = integer(4, 9) * 100 * 100;\n\n    transactions.push({\n      amount,\n      payee: payee.id,\n      account: account.id,\n      date: monthUtils.subMonths(monthUtils.currentDay(), i) + '-02',\n      category: category.id\n    });\n  }\n\n  await handlers['transactions-batch-update']({\n    added: transactions,\n    fastMode: true\n  });\n}\n\nasync function createBudget(accounts, payees, groups) {\n  let primaryAccount = accounts.find(a => (a.name = 'Bank of America'));\n  let earliestDate = (await db.first(\n    `SELECT * FROM v_transactions t LEFT JOIN accounts a ON t.account = a.id\n       WHERE a.offbudget = 0 AND t.is_child = 0 ORDER BY date ASC LIMIT 1`\n  )).date;\n  let earliestPrimaryDate = (await db.first(\n    `SELECT * FROM v_transactions t LEFT JOIN accounts a ON t.account = a.id\n       WHERE a.id = ? AND a.offbudget = 0 AND t.is_child = 0 ORDER BY date ASC LIMIT 1`,\n    [primaryAccount.id]\n  )).date;\n\n  let start = monthUtils.monthFromDate(db.fromDateRepr(earliestDate));\n  let end = monthUtils.currentMonth();\n  let months = monthUtils.rangeInclusive(start, end);\n\n  function category(name) {\n    for (let group of groups) {\n      let cat = group.categories.find(c => c.name === name);\n      if (cat) {\n        return cat;\n      }\n    }\n  }\n\n  function setBudget(month, category, amount) {\n    return budgetActions.setBudget({ month, category: category.id, amount });\n  }\n\n  function setBudgetIfSpent(month, cat) {\n    let spent = sheet.getCellValue(\n      monthUtils.sheetForMonth(month),\n      `sum-amount-${cat.id}`\n    );\n\n    if (spent < 0) {\n      setBudget(month, cat, -spent);\n    }\n  }\n\n  await runMutator(() =>\n    batchMessages(async () => {\n      for (let month of months) {\n        if (\n          month >=\n          monthUtils.monthFromDate(db.fromDateRepr(earliestPrimaryDate))\n        ) {\n          setBudget(month, category('Food'), 40000);\n          setBudget(month, category('Restaurants'), 30000);\n          setBudget(month, category('Entertainment'), 10000);\n          setBudget(month, category('Clothing'), 3000);\n          setBudget(month, category('General'), 50000);\n          setBudget(month, category('Gift'), 7500);\n          setBudget(month, category('Medical'), 10000);\n\n          setBudget(month, category('Cell'), 7500);\n          setBudget(month, category('Internet'), 6000);\n          setBudget(month, category('Mortgage'), 120000);\n          setBudget(month, category('Water'), 9000);\n          setBudget(month, category('Power'), 10000);\n        } else {\n          setBudgetIfSpent(month, category('Food'));\n          setBudgetIfSpent(month, category('Restaurants'));\n          setBudgetIfSpent(month, category('Entertainment'));\n          setBudgetIfSpent(month, category('Clothing'));\n          setBudgetIfSpent(month, category('General'));\n          setBudgetIfSpent(month, category('Gift'));\n          setBudgetIfSpent(month, category('Medical'));\n\n          setBudgetIfSpent(month, category('Cell'));\n          setBudgetIfSpent(month, category('Internet'));\n          setBudgetIfSpent(month, category('Mortgage'));\n          setBudgetIfSpent(month, category('Water'));\n          setBudgetIfSpent(month, category('Power'));\n        }\n      }\n    })\n  );\n\n  await sheet.waitOnSpreadsheet();\n\n  await runMutator(() =>\n    batchMessages(async () => {\n      let prevSaved = 0;\n      for (let month of months) {\n        if (\n          month >=\n            monthUtils.monthFromDate(db.fromDateRepr(earliestPrimaryDate)) &&\n          month <= monthUtils.currentMonth()\n        ) {\n          let sheetName = monthUtils.sheetForMonth(month);\n          let toBudget = sheet.getCellValue(sheetName, 'to-budget');\n          let available = toBudget - prevSaved;\n\n          if (available - 403000 > 0) {\n            setBudget(month, category('Savings'), available - 403000);\n            budgetActions.setBuffer(month, 403000);\n\n            prevSaved += available - 403000;\n          } else if (available > 0) {\n            budgetActions.setBuffer(month, available);\n          }\n        }\n      }\n    })\n  );\n\n  await sheet.waitOnSpreadsheet();\n\n  let sheetName = monthUtils.sheetForMonth(monthUtils.currentMonth());\n  let toBudget = sheet.getCellValue(sheetName, 'to-budget');\n  if (toBudget < 0) {\n    await addTransactions(primaryAccount.id, [\n      {\n        amount: -toBudget,\n        category: category('Income').id,\n        date: monthUtils.currentMonth() + '-01'\n      }\n    ]);\n  }\n\n  // let sheetName = monthUtils.sheetForMonth(monthUtils.currentMonth());\n  // let toBudget = sheet.getCellValue(sheetName, 'to-budget');\n  // setBudget(monthUtils.currentMonth(), category('Savings'), toBudget);\n\n  await sheet.waitOnSpreadsheet();\n}\n\nexport async function createTestBudget(handlers) {\n  setSyncingMode('import');\n\n  await db.execQuery('PRAGMA journal_mode = OFF');\n\n  // Clear out the default categories. This is fine to do without\n  // going through the sync system because we are in import mode and\n  // these aren't tracked through messages anyway.\n  await db.runQuery('DELETE FROM categories;');\n  await db.runQuery('DELETE FROM category_groups');\n\n  let accounts = [\n    { name: 'Bank of America', type: 'checking' },\n    { name: 'Ally Savings', type: 'savings' },\n    { name: 'Capital One Checking', type: 'checking' },\n    { name: 'HSBC', type: 'checking' },\n    { name: 'Vanguard 401k', type: 'investment', offBudget: 1 },\n    { name: 'Mortgage', type: 'mortgage', offBudget: 1 },\n    { name: 'House Asset', type: 'other', offBudget: 1 },\n    { name: 'Roth IRA', type: 'investment', offBudget: 1 }\n  ];\n  await runMutator(() =>\n    batchMessages(async () => {\n      for (let account of accounts) {\n        account.id = await handlers['account-create'](account);\n      }\n    })\n  );\n\n  let payees = [\n    { name: 'Starting Balance' },\n    { name: 'Kroger' },\n    { name: 'Publix' },\n    { name: 'Home Depot' },\n    { name: 'Movies' },\n    { name: 'Online store' },\n    { name: 'Deposit' },\n    { name: 'Dominion Power', bill: true },\n    { name: 'Extra Watery', bill: true },\n    { name: 'Housy House', bill: true },\n    { name: 'Fast Internet', bill: true },\n    { name: 'T-mobile', bill: true }\n  ];\n\n  await runMutator(() =>\n    batchMessages(async () => {\n      for (let payee of payees) {\n        payee.id = await handlers['payee-create']({ name: payee.name });\n      }\n    })\n  );\n\n  let categoryGroups = [\n    {\n      name: 'Usual Expenses',\n      categories: [\n        { name: 'Savings' },\n        { name: 'Medical' },\n        { name: 'Gift' },\n        { name: 'General' },\n        { name: 'Clothing' },\n        { name: 'Entertainment' },\n        { name: 'Restaurants' },\n        { name: 'Food' }\n      ]\n    },\n    {\n      name: 'Bills',\n      categories: [\n        { name: 'Power' },\n        { name: 'Water' },\n        { name: 'Mortgage' },\n        { name: 'Internet' },\n        { name: 'Cell' }\n      ]\n    },\n    {\n      name: 'Income',\n      is_income: true,\n      categories: [\n        { name: 'Income', is_income: true },\n        { name: 'Misc', is_income: true },\n        { name: 'Starting Balances', is_income: true }\n      ]\n    }\n  ];\n\n  await runMutator(async () => {\n    for (let group of categoryGroups) {\n      group.id = await handlers['category-group-create']({\n        name: group.name,\n        isIncome: group.is_income ? 1 : 0\n      });\n\n      for (let category of group.categories) {\n        category.id = await handlers['category-create']({\n          ...category,\n          isIncome: category.is_income ? 1 : 0,\n          groupId: group.id\n        });\n      }\n    }\n  });\n\n  let allGroups = (await runHandler(handlers['get-categories'])).grouped;\n\n  setSyncingMode('import');\n\n  await runMutator(() =>\n    batchMessages(async () => {\n      for (let account of accounts) {\n        switch (account.type) {\n          case 'checking':\n            if (account.name === 'Bank of America') {\n              await fillPrimaryChecking(handlers, account, payees, allGroups);\n            } else {\n              await fillChecking(handlers, account, payees, allGroups);\n            }\n            break;\n          case 'investment':\n            await fillInvestment(handlers, account, payees, allGroups);\n            break;\n          case 'savings':\n            await fillSavings(handlers, account, payees, allGroups);\n            break;\n          case 'mortgage':\n            await fillMortgage(handlers, account, payees, allGroups);\n            break;\n          case 'other':\n            if (account.name === 'House Asset') {\n              await fillOther(handlers, account, payees, allGroups);\n            } else {\n              await fillChecking(handlers, account, payees, allGroups);\n            }\n            break;\n          default:\n        }\n      }\n    })\n  );\n\n  setSyncingMode('import');\n\n  // This checks to see if the primary account is in the negative.\n  // This might happen depending on the transactions added, but we\n  // don't want to show that as it'd be weird. We modify the latest\n  // deposit transaction to force it to be positive\n  let primaryAccount = accounts.find(a => (a.name = 'Bank of America'));\n  let { data: primaryBalance } = await aqlQuery(\n    q('transactions')\n      .filter({ account: primaryAccount.id })\n      .calculate({ $sum: '$amount' })\n      .serialize()\n  );\n  if (primaryBalance < 0) {\n    let { data: results } = await aqlQuery(\n      q('transactions')\n        .filter({ account: primaryAccount.id, amount: { $gt: 0 } })\n        .limit(1)\n        .select(['id', 'amount'])\n        .serialize()\n    );\n    let lastDeposit = results[0];\n\n    await runHandler(handlers['transaction-update'], {\n      ...lastDeposit,\n      amount: lastDeposit.amount + -primaryBalance + integer(10000, 20000)\n    });\n  }\n\n  // Bust the cache and reload the spreadsheet\n  setSyncingMode('disabled');\n  await prefs.savePrefs({ isCached: false });\n  await sheet.reloadSpreadsheet(db);\n  await budget.createAllBudgets();\n\n  await sheet.waitOnSpreadsheet();\n\n  // Create a budget\n  await createBudget(accounts, payees, allGroups);\n}\n","export function captureException(exc) {\n  console.log('[Exception]', exc);\n  if (global.SentryClient) {\n    global.SentryClient.captureException(exc);\n  }\n}\n\nexport function captureBreadcrumb(breadcrumb) {\n  if (global.SentryClient) {\n    global.SentryClient.addBreadcrumb(breadcrumb);\n  }\n}\n","const lootFs = require('../fs');\nconst fs = require('fs');\nconst { join } = require('path');\n\nlet getStorePath = () => join(lootFs.getDataDir(), 'global-store.json');\nlet store;\nlet persisted = true;\n\nfunction init({ persist = true } = {}) {\n  if (persist) {\n    try {\n      store = JSON.parse(fs.readFileSync(getStorePath(), 'utf8'));\n    } catch (e) {\n      store = {};\n    }\n  } else {\n    store = {};\n  }\n\n  persisted = persist;\n}\n\nfunction _saveStore() {\n  if (persisted) {\n    return new Promise(function(resolve, reject) {\n      fs.writeFile(getStorePath(), JSON.stringify(store), 'utf8', function(\n        err,\n        _\n      ) {\n        return err ? reject(err) : resolve();\n      });\n    });\n  }\n}\n\nfunction getItem(key) {\n  return new Promise(function(resolve) {\n    return resolve(store[key]);\n  });\n}\n\nfunction setItem(key, value) {\n  store[key] = value;\n  return _saveStore();\n}\n\nfunction removeItem(key) {\n  delete store[key];\n  return _saveStore();\n}\n\nfunction multiGet(keys) {\n  return new Promise(function(resolve) {\n    return resolve(\n      keys.map(function(key) {\n        return [key, store[key]];\n      })\n    );\n  });\n}\n\nfunction multiSet(keyValues) {\n  keyValues.forEach(function([key, value]) {\n    store[key] = value;\n  });\n  return _saveStore();\n}\n\nfunction multiRemove(keys) {\n  keys.forEach(function(key) {\n    delete store[key];\n  });\n  return _saveStore();\n}\n\nmodule.exports = {\n  init,\n  getItem,\n  setItem,\n  removeItem,\n  multiGet,\n  multiSet,\n  multiRemove\n};\n","function init() {}\n\nfunction send(type, args) {\n  // Nothing\n}\n\nmodule.exports = { init, send };\n","let fs = require('fs');\nlet fetch = require('node-fetch');\n\nasync function fetchBinary(url, filepath) {\n  const res = await fetch(url);\n  return new Promise((resolve, reject) => {\n    const fileStream = fs.createWriteStream(filepath);\n    res.body.pipe(fileStream);\n    res.body.on('error', err => {\n      reject(err);\n    });\n    fileStream.on('finish', function() {\n      resolve();\n    });\n  });\n}\n\nmodule.exports = { fetch, fetchBinary };\n","const fs = require('fs');\nconst path = require('path');\n\nlet documentDir;\n\nlet rootPath = path.join(__dirname, '..', '..', '..', '..');\n\nif (__filename.match('bundle')) {\n  // The file name is not our filename and indicates that we're in the\n  // bundled form. Because of this, the root path is different.\n  rootPath = path.join(__dirname, '..');\n}\n\nmodule.exports = {\n  init: () => {\n    // Nothing to do\n  },\n  getDataDir: () => {\n    if (!process.env.ACTUAL_DATA_DIR) {\n      throw new Error('ACTUAL_DATA_DIR env variable is required');\n    }\n    return process.env.ACTUAL_DATA_DIR;\n  },\n  _setDocumentDir: dir => (documentDir = dir),\n  getDocumentDir: () => {\n    if (!documentDir) {\n      throw new Error('Document directory is not set');\n    }\n    return documentDir;\n  },\n  getBudgetDir: id => {\n    if (!id) {\n      throw new Error('getDocumentDir: id is falsy: ' + id);\n    }\n\n    // TODO: This should be better\n    //\n    // A cheesy safe guard. The id is generated from the budget name,\n    // so it provides an entry point for the user to accidentally (or\n    // intentionally) access other parts of the system. Always\n    // restrict it to only access files within the budget directory by\n    // never allowing slashes.\n    if (id.match(/[^A-Za-z0-9\\-_]/)) {\n      throw new Error(\n        `Invalid budget id \"${id}\". Check the id of your budget in the \"Advanced\" section of the settings page.`\n      );\n    }\n\n    return path.join(module.exports.getDocumentDir(), id);\n  },\n  bundledDatabasePath: path.join(rootPath, 'default-db.sqlite'),\n  migrationsPath: path.join(rootPath, 'migrations'),\n  demoBudgetPath: path.join(rootPath, 'demo-budget'),\n  join: path.join,\n  basename: filepath => path.basename(filepath),\n  listDir: filepath =>\n    new Promise((resolve, reject) => {\n      fs.readdir(filepath, (err, files) => {\n        if (err) {\n          reject(err);\n        } else {\n          resolve(files);\n        }\n      });\n    }),\n  exists: filepath =>\n    new Promise(resolve => {\n      fs.access(filepath, fs.constants.F_OK, err => {\n        return resolve(!err);\n      });\n    }),\n  mkdir: filepath =>\n    new Promise((resolve, reject) => {\n      fs.mkdir(filepath, err => {\n        if (err) {\n          reject(err);\n        } else {\n          resolve();\n        }\n      });\n    }),\n  size: filepath =>\n    new Promise((resolve, reject) => {\n      fs.stat(filepath, (err, stats) => {\n        if (err) {\n          reject(err);\n        } else {\n          resolve(stats.size);\n        }\n      });\n    }),\n  copyFile: (frompath, topath) => {\n    return new Promise((resolve, reject) => {\n      const readStream = fs.createReadStream(frompath);\n      const writeStream = fs.createWriteStream(topath);\n\n      readStream.on('error', reject);\n      writeStream.on('error', reject);\n\n      writeStream.on('open', () => readStream.pipe(writeStream));\n      writeStream.once('close', resolve);\n    });\n  },\n  readFile: (filepath, encoding = 'utf8') => {\n    if (encoding === 'binary') {\n      // `binary` is not actually a valid encoding, you pass `null` into node if\n      // you want a buffer\n      encoding = null;\n    }\n    return new Promise((resolve, reject) => {\n      fs.readFile(filepath, encoding, (err, data) => {\n        if (err) {\n          reject(err);\n        } else {\n          resolve(data);\n        }\n      });\n    });\n  },\n  writeFile: (filepath, contents) => {\n    return new Promise(function(resolve, reject) {\n      fs.writeFile(filepath, contents, 'utf8', function(err, _) {\n        return err ? reject(err) : resolve();\n      });\n    });\n  },\n  removeFile: filepath => {\n    return new Promise(function(resolve, reject) {\n      fs.unlink(filepath, err => {\n        return err ? reject(err) : resolve();\n      });\n    });\n  },\n  removeDir: dirpath => {\n    return new Promise(function(resolve, reject) {\n      fs.rmdir(dirpath, err => {\n        return err ? reject(err) : resolve();\n      });\n    });\n  },\n  removeDirRecursively: async dirpath => {\n    const f = module.exports;\n    if (await f.exists(dirpath)) {\n      for (let file of await f.listDir(dirpath)) {\n        const fullpath = f.join(dirpath, file);\n        if (fs.statSync(fullpath).isDirectory()) {\n          await f.removeDirRecursively(fullpath);\n        } else {\n          await f.removeFile(fullpath);\n        }\n      }\n\n      await f.removeDir(dirpath);\n    }\n  },\n  getModifiedTime: filepath => {\n    return new Promise(function(resolve, reject) {\n      fs.stat(filepath, (err, stats) => {\n        if (err) {\n          reject(err);\n        } else {\n          resolve(new Date(stats.mtime));\n        }\n      });\n    });\n  }\n};\n","export default {\n  info: (...args) => {\n    console.log(...args);\n  },\n  warn: (...args) => {\n    console.warn(...args);\n  }\n};\n","const Database = require('better-sqlite3');\n\nfunction verifyParamTypes(sql, arr) {\n  arr.forEach(val => {\n    if (typeof val !== 'string' && typeof val !== 'number' && val !== null) {\n      console.log(sql, arr);\n      throw new Error('Invalid field type ' + val + ' for sql ' + sql);\n    }\n  });\n}\n\nexport async function init() {}\n\nexport function prepare(db, sql) {\n  return db.prepare(sql);\n}\n\nexport function runQuery(db, sql, params = [], fetchAll) {\n  if (params) {\n    verifyParamTypes(sql, params);\n  }\n\n  let stmt;\n  try {\n    stmt = typeof sql === 'string' ? db.prepare(sql) : sql;\n  } catch (e) {\n    console.log('error', sql);\n    throw e;\n  }\n\n  if (fetchAll) {\n    try {\n      let result = stmt.all(...params);\n      return result;\n    } catch (e) {\n      console.log('error', sql);\n      throw e;\n    }\n  } else {\n    try {\n      let info = stmt.run(...params);\n      return { changes: info.changes, insertId: info.lastInsertRowid };\n    } catch (e) {\n      // console.log('error', sql);\n      throw e;\n    }\n  }\n}\n\nexport function execQuery(db, sql) {\n  db.exec(sql);\n}\n\nexport function transaction(db, fn) {\n  db.transaction(fn)();\n}\n\n// **Important**: this is an unsafe function since sqlite executes\n// executes statements sequentially. It would be easy for other code\n// to run statements in between our transaction and get caught up in\n// it. This is rarely used, and only needed for specific cases (like\n// batch importing a bunch of data). Don't use this.\nlet transactionDepth = 0;\nexport async function asyncTransaction(db, fn) {\n  // Support nested transactions by \"coalescing\" them into the parent\n  // one if one is already started\n  if (transactionDepth === 0) {\n    db.exec('BEGIN TRANSACTION');\n  }\n  transactionDepth++;\n\n  try {\n    await fn();\n  } finally {\n    transactionDepth--;\n    // We always commit because rollback is more dangerous - any\n    // queries that ran *in-between* this async function would be\n    // lost. Right now we are only using transactions for speed\n    // purposes unfortunately\n    if (transactionDepth === 0) {\n      db.exec('COMMIT');\n    }\n  }\n}\n\nexport function openDatabase(pathOrBuffer) {\n  return new Database(pathOrBuffer);\n}\n\nexport function closeDatabase(db) {\n  return db.close();\n}\n\nexport function exportDatabase(db) {\n  return db.serialize();\n}\n","const uuid = require('uuid');\n\nmodule.exports = {\n  v4: function() {\n    return Promise.resolve(uuid.v4());\n  },\n\n  v4Sync: function() {\n    return uuid.v4();\n  }\n};\n","import fs from 'fs';\nimport csvStringify from 'csv-stringify/lib/sync';\nimport { runQuery as aqlQuery } from '../aql/schema/run-query';\nimport { integerToAmount } from '../../shared/util';\n\nexport async function exportToCSV(\n  transactions,\n  accounts,\n  categoryGroups,\n  payees\n) {\n  const accountNamesById = accounts.reduce((reduced, { id, name }) => {\n    reduced[id] = name;\n    return reduced;\n  }, {});\n\n  const categoryNamesById = categoryGroups.reduce(\n    (reduced, { name, categories: subCategories }) => {\n      subCategories.forEach(\n        subCategory =>\n          (reduced[subCategory.id] = `${name}: ${subCategory.name}`)\n      );\n      return reduced;\n    },\n    {}\n  );\n\n  const payeeNamesById = payees.reduce((reduced, { id, name }) => {\n    reduced[id] = name;\n    return reduced;\n  }, {});\n\n  const transactionsForExport = transactions.map(\n    ({ account, date, payee, notes, category, amount }) => ({\n      Account: accountNamesById[account],\n      Date: date,\n      Payee: payeeNamesById[payee],\n      Notes: notes,\n      Category: categoryNamesById[category],\n      Amount: amount == null ? 0 : integerToAmount(amount)\n    })\n  );\n\n  return csvStringify(transactionsForExport, { header: true });\n}\n\nexport async function exportQueryToCSV(query) {\n  let { data: transactions } = await aqlQuery(\n    query\n      .select([\n        { Id: 'id' },\n        { Account: 'account.name' },\n        { Date: 'date' },\n        { Payee: 'payee.name' },\n        { ParentId: 'parent_id' },\n        { IsParent: 'is_parent' },\n        { Notes: 'notes' },\n        { Category: 'category.name' },\n        { Amount: 'amount' }\n      ])\n      .options({ splits: 'all' })\n  );\n\n  let parentsPayees = new Map();\n  for (let trans of transactions) {\n    if (trans.IsParent) {\n      parentsPayees.set(trans.Id, trans.Payee);\n    }\n  }\n\n  // filter out any parent transactions\n  let noParents = transactions.filter(t => !t.IsParent);\n\n  // map final properties for export and grab the payee for splits from their parent transaction\n  let transactionsForExport = noParents.map(trans => {\n    return {\n      Account: trans.Account,\n      Date: trans.Date,\n      Payee: trans.ParentId ? parentsPayees.get(trans.ParentId) : trans.Payee,\n      Notes: trans.Notes,\n      Category: trans.Category,\n      Amount: trans.Amount == null ? 0 : integerToAmount(trans.Amount)\n    };\n  });\n\n  return csvStringify(transactionsForExport, { header: true });\n}\n","import asyncStorage from '../../platform/server/asyncStorage';\nimport * as db from '../db';\nimport { getConfig, setConfig } from '../config';\nimport * as bankSync from './sync';\nimport { fromPlaidAccountType } from '../../shared/accounts';\nimport { amountToInteger } from '../../shared/util';\nimport { post } from '../post';\nimport { runMutator } from '../mutators';\nconst uuid = require('../../platform/uuid');\n\nexport async function handoffPublicToken(institution, publicToken) {\n  let [[, userId], [, key]] = await asyncStorage.multiGet([\n    'user-id',\n    'user-key'\n  ]);\n\n  if (institution == null || !institution.institution_id || !institution.name) {\n    throw new Error('Invalid institution object');\n  }\n\n  let id = uuid.v4Sync();\n\n  // Make sure to generate an access token first before inserting it\n  // into our local database in case it fails\n  await post(getConfig().PLAID_SERVER + '/handoff_public_token', {\n    userId,\n    key,\n    item_id: id,\n    public_token: publicToken\n  });\n\n  await runMutator(() =>\n    db.insertWithUUID('banks', {\n      id,\n      bank_id: institution.institution_id,\n      name: institution.name\n    })\n  );\n\n  return id;\n}\n\nexport async function addAccounts(bankId, accountIds, offbudgetIds = []) {\n  let [[, userId], [, userKey]] = await asyncStorage.multiGet([\n    'user-id',\n    'user-key'\n  ]);\n\n  // Get all the available accounts\n  let accounts = await bankSync.getAccounts(userId, userKey, bankId);\n\n  // Only add the selected accounts\n  accounts = accounts.filter(acct => accountIds.includes(acct.account_id));\n\n  return Promise.all(\n    accounts.map(async acct => {\n      let id = await runMutator(async () => {\n        let id = await db.insertAccount({\n          account_id: acct.account_id,\n          name: acct.name,\n          official_name: acct.official_name,\n          type: fromPlaidAccountType(acct.type),\n          balance_current: amountToInteger(acct.balances.current),\n          mask: acct.mask,\n          bank: bankId,\n          offbudget: offbudgetIds.includes(acct.account_id) ? 1 : 0\n        });\n\n        // Create a transfer payee\n        await db.insertPayee({\n          name: '',\n          transfer_acct: id\n        });\n\n        return id;\n      });\n\n      // Do an initial sync\n      await bankSync.syncAccount(userId, userKey, id, acct.account_id, bankId);\n\n      return id;\n    })\n  );\n}\n","import fs from '../../platform/server/fs';\nimport qif2json from './qif2json';\nimport csv2json from 'csv-parse/lib/sync';\nimport { dayFromDate } from '../../shared/months';\nimport { looselyParseAmount } from '../../shared/util';\n\nexport function parseFile(filepath, options) {\n  let errors = [];\n  let m = filepath.match(/\\.[^.]*$/);\n\n  if (m) {\n    let ext = m[0];\n\n    switch (ext.toLowerCase()) {\n      case '.qif':\n        return parseQIF(filepath);\n      case '.csv':\n        return parseCSV(filepath, options);\n      case '.ofx':\n      case '.qfx':\n        return parseOFX(filepath);\n      default:\n    }\n  }\n\n  errors.push({\n    message: 'Invalid file type',\n    internal: ''\n  });\n  return { errors };\n}\n\nasync function parseCSV(filepath, options = {}) {\n  let errors = [];\n  let contents = await fs.readFile(filepath);\n\n  let data;\n  try {\n    data = csv2json(contents, {\n      columns: true,\n      bom: true,\n      delimiter: options.delimiter || ',',\n      quote: '\"',\n      trim: true,\n      relax_column_count: true\n    });\n  } catch (err) {\n    errors.push({\n      message: 'Failed parsing: ' + err.message,\n      internal: err.message\n    });\n    return { errors, transactions: [] };\n  }\n\n  return { errors, transactions: data };\n}\n\nasync function parseQIF(filepath) {\n  let errors = [];\n  let contents = await fs.readFile(filepath);\n\n  let data;\n  try {\n    data = qif2json(contents);\n  } catch (err) {\n    errors.push({\n      message: \"Failed parsing: doesn't look like a valid QIF file.\",\n      internal: err.stack\n    });\n    return { errors, transactions: [] };\n  }\n\n  return {\n    errors,\n    transactions: data.transactions.map(trans => ({\n      amount: trans.amount != null ? looselyParseAmount(trans.amount) : null,\n      date: trans.date,\n      payee_name: trans.payee,\n      imported_payee: trans.payee,\n      notes: trans.memo || null\n    }))\n  };\n}\n\nasync function parseOFX(filepath) {\n  let { getOFXTransactions, initModule } = await import(\n    /* webpackChunkName: 'xfo' */ 'node-libofx'\n  );\n  await initModule();\n\n  let errors = [];\n  let contents = await fs.readFile(filepath);\n\n  let data;\n  try {\n    data = getOFXTransactions(contents);\n  } catch (err) {\n    errors.push({\n      message: 'Failed importing file',\n      internal: err.stack\n    });\n    return { errors };\n  }\n\n  return {\n    errors,\n    transactions: data.map(trans => ({\n      amount: trans.amount,\n      imported_id: trans.fi_id,\n      date: trans.date ? dayFromDate(trans.date * 1000) : null,\n      payee_name: trans.name,\n      imported_payee: trans.name,\n      notes: trans.memo || null\n    }))\n  };\n}\n","import * as db from '../db';\n\nexport async function createPayee(description) {\n  // Check to make sure no payee already exists with exactly the same\n  // name\n  let row = await db.first(\n    `SELECT id FROM payees WHERE LOWER(name) = ? AND tombstone = 0`,\n    [description.toLowerCase()]\n  );\n\n  if (row) {\n    return row.id;\n  } else {\n    return db.insertPayee({ name: description });\n  }\n}\n\nexport async function getStartingBalancePayee() {\n  let category = await db.first(`\n    SELECT * FROM categories\n      WHERE is_income = 1 AND\n      LOWER(name) = 'starting balances' AND\n      tombstone = 0\n  `);\n  if (category === null) {\n    category = await db.first(\n      'SELECT * FROM categories WHERE is_income = 1 AND tombstone = 0'\n    );\n  }\n\n  let id = await createPayee('Starting Balance');\n  return {\n    id,\n    category: category ? category.id : null\n  };\n}\n","export default function parse(qif, options) {\n  var lines = qif.split('\\n'),\n    line = lines.shift(),\n    type = /!Type:([^$]*)$/.exec(line.trim()),\n    data = {},\n    transactions = (data.transactions = []),\n    transaction = {};\n\n  options = options || {};\n\n  if (!type || !type.length) {\n    throw new Error('File does not appear to be a valid qif file: ' + line);\n  }\n  data.type = type[1];\n\n  var division = {};\n\n  while ((line = lines.shift())) {\n    line = line.trim();\n    if (line === '^') {\n      transactions.push(transaction);\n      transaction = {};\n      continue;\n    }\n    switch (line[0]) {\n      case 'D':\n        transaction.date = line.substring(1);\n        break;\n      case 'T':\n        transaction.amount = line.substring(1);\n        break;\n      case 'N':\n        transaction.number = line.substring(1);\n        break;\n      case 'M':\n        transaction.memo = line.substring(1);\n        break;\n      case 'A':\n        transaction.address = (transaction.address || []).concat(\n          line.substring(1)\n        );\n        break;\n      case 'P':\n        transaction.payee = line.substring(1).replace(/&amp;/g, '&');\n        break;\n      case 'L':\n        var lArray = line.substring(1).split(':');\n        transaction.category = lArray[0];\n        if (lArray[1] !== undefined) {\n          transaction.subcategory = lArray[1];\n        }\n        break;\n      case 'C':\n        transaction.clearedStatus = line.substring(1);\n        break;\n      case 'S':\n        var sArray = line.substring(1).split(':');\n        division.category = sArray[0];\n        if (sArray[1] !== undefined) {\n          division.subcategory = sArray[1];\n        }\n        break;\n      case 'E':\n        division.description = line.substring(1);\n        break;\n      case '$':\n        division.amount = parseFloat(line.substring(1));\n        if (!(transaction.division instanceof Array)) {\n          transaction.division = [];\n        }\n        transaction.division.push(division);\n        division = {};\n\n        break;\n\n      default:\n        throw new Error('Unknown Detail Code: ' + line[0]);\n    }\n  }\n\n  if (Object.keys(transaction).length) {\n    transactions.push(transaction);\n  }\n\n  data.dateFormat = options.dateFormat;\n  return data;\n}\n","import { RuleError } from '../errors';\nimport * as dateFns from 'date-fns';\nimport {\n  monthFromDate,\n  yearFromDate,\n  isBefore,\n  isAfter,\n  addDays,\n  subDays,\n  format as formatDate,\n  parseDate\n} from '../../shared/months';\nimport { fastSetMerge } from '../../shared/util';\nimport { sortNumbers, getApproxNumberThreshold } from '../../shared/rules';\nimport { recurConfigToRSchedule } from '../../shared/schedules';\nimport { Schedule as RSchedule } from '../util/rschedule';\n\nfunction safeNumber(n) {\n  return isNaN(n) ? null : n;\n}\n\nfunction safeParseInt(n) {\n  return safeNumber(parseInt(n));\n}\n\nfunction assert(test, type, msg) {\n  if (!test) {\n    throw new RuleError(type, msg);\n  }\n}\n\nexport function parseRecurDate(desc) {\n  try {\n    let rules = recurConfigToRSchedule(desc);\n\n    return {\n      type: 'recur',\n      schedule: new RSchedule({ rrules: rules })\n    };\n  } catch (e) {\n    throw new RuleError('parse-recur-date', e.message);\n  }\n}\n\nexport function parseDateString(str) {\n  if (typeof str !== 'string') {\n    return null;\n  } else if (str.length === 10) {\n    // YYYY-MM-DD\n    if (!dateFns.isValid(dateFns.parseISO(str))) {\n      return null;\n    }\n\n    return { type: 'date', date: str };\n  } else if (str.length === 7) {\n    // YYYY-MM\n    if (!dateFns.isValid(dateFns.parseISO(str + '-01'))) {\n      return null;\n    }\n\n    return { type: 'month', date: str };\n  } else if (str.length === 4) {\n    // YYYY\n    if (!dateFns.isValid(dateFns.parseISO(str + '-01-01'))) {\n      return null;\n    }\n\n    return { type: 'year', date: str };\n  }\n\n  return null;\n}\n\nexport function parseBetweenAmount(between) {\n  let { num1, num2 } = between;\n  if (typeof num1 !== 'number' || typeof num2 !== 'number') {\n    return null;\n  }\n  return { type: 'between', num1, num2 };\n}\n\nlet CONDITION_TYPES = {\n  date: {\n    ops: ['is', 'isapprox', 'gt', 'gte', 'lt', 'lte'],\n    nullable: false,\n    parse(op, value, fieldName) {\n      let parsed =\n        typeof value === 'string'\n          ? parseDateString(value)\n          : value.frequency != null\n          ? parseRecurDate(value)\n          : null;\n      assert(\n        parsed,\n        'date-format',\n        `Invalid date format (field: ${fieldName})`\n      );\n\n      // Approximate only works with exact & recurring dates\n      if (op === 'isapprox') {\n        assert(\n          parsed.type === 'date' || parsed.type === 'recur',\n          'date-format',\n          `Invalid date value for \"isapprox\" (field: ${fieldName})`\n        );\n      }\n      // These only work with exact dates\n      else if (op === 'gt' || op === 'gte' || op === 'lt' || op === 'lte') {\n        assert(\n          parsed.type === 'date',\n          'date-format',\n          `Invalid date value for \"${op}\" (field: ${fieldName})`\n        );\n      }\n\n      return parsed;\n    }\n  },\n  id: {\n    ops: ['is', 'contains', 'oneOf'],\n    nullable: true,\n    parse(op, value, fieldName) {\n      if (op === 'oneOf') {\n        assert(\n          Array.isArray(value),\n          'no-empty-array',\n          `oneOf must have an array value (field: ${fieldName})`\n        );\n        return value;\n      }\n      return value;\n    }\n  },\n  string: {\n    ops: ['is', 'contains', 'oneOf'],\n    nullable: false,\n    parse(op, value, fieldName) {\n      if (op === 'oneOf') {\n        assert(\n          Array.isArray(value),\n          'no-empty-array',\n          `oneOf must have an array value (field: ${fieldName}): ${JSON.stringify(\n            value\n          )}`\n        );\n        return value.filter(Boolean).map(val => val.toLowerCase());\n      }\n\n      if (op === 'contains') {\n        assert(\n          typeof value === 'string' && value.length > 0,\n          'no-empty-string',\n          `contains must have non-empty string (field: ${fieldName})`\n        );\n      }\n\n      return value.toLowerCase();\n    }\n  },\n  number: {\n    ops: ['is', 'isapprox', 'isbetween', 'gt', 'gte', 'lt', 'lte'],\n    nullable: false,\n    parse(op, value, fieldName) {\n      let parsed =\n        typeof value === 'number'\n          ? { type: 'literal', value }\n          : parseBetweenAmount(value);\n\n      assert(\n        parsed != null,\n        'not-number',\n        `Value must be a number or between amount: ${JSON.stringify(\n          value\n        )} (field: ${fieldName})`\n      );\n\n      if (op === 'isbetween') {\n        assert(\n          parsed.type === 'between',\n          'number-format',\n          `Invalid between value for \"${op}\" (field: ${fieldName})`\n        );\n      } else {\n        assert(\n          parsed.type === 'literal',\n          'number-format',\n          `Invalid number value for \"${op}\" (field: ${fieldName})`\n        );\n      }\n\n      return parsed;\n    }\n  },\n  boolean: {\n    ops: ['is'],\n    nullable: false,\n    parse(op, value, fieldName) {\n      assert(\n        typeof value === 'boolean',\n        'not-boolean',\n        `Value must be a boolean: ${value} (field: ${fieldName})`\n      );\n\n      return value;\n    }\n  }\n};\n\nexport class Condition {\n  constructor(op, field, value, options, fieldTypes) {\n    let typeName = fieldTypes.get(field);\n    assert(typeName, 'internal', 'Invalid condition field: ' + field);\n\n    let type = CONDITION_TYPES[typeName];\n\n    // It's important to validate rules because a faulty rule might mess\n    // up the user's transaction (and be very confusing)\n    assert(\n      type,\n      'internal',\n      `Invalid condition type: ${typeName} (field: ${field})`\n    );\n    assert(\n      type.ops.includes(op),\n      'internal',\n      `Invalid condition operator: ${op} (type: ${typeName}, field: ${field})`\n    );\n\n    if (type.nullable !== true) {\n      assert(value != null, 'no-null', `Field cannot be empty: ${field}`);\n    }\n\n    // For strings, an empty string is equal to null\n    if (typeName === 'string' && type.nullable !== true) {\n      assert(value !== '', 'no-null', `Field cannot be empty: ${field}`);\n    }\n\n    this.rawValue = value;\n    this.unparsedValue = value;\n    this.op = op;\n    this.field = field;\n    this.value = type.parse ? type.parse(op, value, field) : value;\n    this.options = options;\n    this.type = typeName;\n  }\n\n  eval(object) {\n    let fieldValue = object[this.field];\n    if (fieldValue === undefined) {\n      return false;\n    }\n\n    if (typeof fieldValue === 'string') {\n      fieldValue = fieldValue.toLowerCase();\n    }\n\n    let type = this.type;\n\n    if (type === 'number' && this.options) {\n      if (this.options.outflow) {\n        if (fieldValue > 0) {\n          return false;\n        }\n\n        fieldValue = -fieldValue;\n      } else if (this.options.inflow) {\n        if (fieldValue < 0) {\n          return false;\n        }\n      }\n    }\n\n    let extractValue = v => (type === 'number' ? v.value : v);\n\n    switch (this.op) {\n      case 'isapprox':\n      case 'is':\n        if (type === 'date') {\n          if (fieldValue == null) {\n            return false;\n          }\n\n          if (this.value.type === 'recur') {\n            let { schedule } = this.value;\n            if (this.op === 'isapprox') {\n              let fieldDate = parseDate(fieldValue);\n              return schedule.occursBetween(\n                dateFns.subDays(fieldDate, 2),\n                dateFns.addDays(fieldDate, 2)\n              );\n            } else {\n              return schedule.occursOn({ date: parseDate(fieldValue) });\n            }\n          } else {\n            let { date } = this.value;\n\n            if (this.op === 'isapprox') {\n              let fullDate = parseDate(date);\n              let high = addDays(fullDate, 2);\n              let low = subDays(fullDate, 2);\n\n              return fieldValue >= low && fieldValue <= high;\n            } else {\n              switch (this.value.type) {\n                case 'date':\n                  return fieldValue === date;\n                case 'month':\n                  return monthFromDate(fieldValue) === date;\n                case 'year':\n                  return yearFromDate(fieldValue) === date;\n                default:\n              }\n            }\n          }\n        } else if (type === 'number') {\n          let number = this.value.value;\n          if (this.op === 'isapprox') {\n            let threshold = getApproxNumberThreshold(number);\n            return (\n              fieldValue >= number - threshold &&\n              fieldValue <= number + threshold\n            );\n          }\n          return fieldValue === number;\n        }\n\n        return fieldValue === this.value;\n      case 'isbetween': {\n        // The parsing logic already checks that the value is of the\n        // right type (only numbers with high and low)\n        let [low, high] = sortNumbers(this.value.num1, this.value.num2);\n        return fieldValue >= low && fieldValue <= high;\n      }\n      case 'contains':\n        if (fieldValue === null) {\n          return false;\n        }\n        return fieldValue.indexOf(this.value) !== -1;\n      case 'oneOf':\n        if (fieldValue === null) {\n          return false;\n        }\n        return this.value.indexOf(fieldValue) !== -1;\n      case 'gt':\n        if (fieldValue === null) {\n          return false;\n        } else if (type === 'date') {\n          return isAfter(fieldValue, this.value.date);\n        }\n\n        return fieldValue > extractValue(this.value);\n      case 'gte':\n        if (fieldValue === null) {\n          return false;\n        } else if (type === 'date') {\n          return (\n            fieldValue === this.value.date ||\n            isAfter(fieldValue, this.value.date)\n          );\n        }\n\n        return fieldValue >= extractValue(this.value);\n      case 'lt':\n        if (fieldValue === null) {\n          return false;\n        } else if (type === 'date') {\n          return isBefore(fieldValue, this.value.date);\n        }\n        return fieldValue < extractValue(this.value);\n      case 'lte':\n        if (fieldValue === null) {\n          return false;\n        } else if (type === 'date') {\n          return (\n            fieldValue === this.value.date ||\n            isBefore(fieldValue, this.value.date)\n          );\n        }\n        return fieldValue <= extractValue(this.value);\n      default:\n    }\n\n    return false;\n  }\n\n  getValue() {\n    return this.value;\n  }\n\n  serialize() {\n    return {\n      op: this.op,\n      field: this.field,\n      value: this.unparsedValue,\n      type: this.type,\n      ...(this.options ? { options: this.options } : null)\n    };\n  }\n}\n\nlet ACTION_OPS = ['set', 'link-schedule'];\n\nexport class Action {\n  constructor(op, field, value, options, fieldTypes) {\n    assert(\n      ACTION_OPS.includes(op),\n      'internal',\n      `Invalid action operation: ${op}`\n    );\n\n    if (op === 'set') {\n      let typeName = fieldTypes.get(field);\n      assert(typeName, 'internal', `Invalid field for action: ${field}`);\n      this.field = field;\n      this.type = typeName;\n    } else if (op === 'link-schedule') {\n      this.field = null;\n      this.type = 'id';\n    }\n\n    this.op = op;\n    this.rawValue = value;\n    this.value = value;\n    this.options = options;\n  }\n\n  exec(object) {\n    switch (this.op) {\n      case 'set':\n        object[this.field] = this.value;\n        break;\n      case 'link-schedule':\n        object.schedule = this.value;\n        break;\n      default:\n    }\n  }\n\n  serialize() {\n    return {\n      op: this.op,\n      field: this.field,\n      value: this.value,\n      type: this.type,\n      ...(this.options ? { options: this.options } : null)\n    };\n  }\n}\n\nexport class Rule {\n  constructor({ id, stage, conditions, actions, fieldTypes }) {\n    this.id = id;\n    this.stage = stage;\n    this.conditions = conditions.map(\n      c => new Condition(c.op, c.field, c.value, c.options, fieldTypes)\n    );\n    this.actions = actions.map(\n      a => new Action(a.op, a.field, a.value, a.options, fieldTypes)\n    );\n  }\n\n  evalConditions(object) {\n    if (this.conditions.length === 0) {\n      return false;\n    }\n\n    return this.conditions.every(condition => {\n      return condition.eval(object);\n    });\n  }\n\n  execActions(object) {\n    let changes = {};\n    this.actions.forEach(action => action.exec(changes));\n    return changes;\n  }\n\n  exec(object) {\n    if (this.evalConditions(object)) {\n      return this.execActions(object);\n    }\n    return null;\n  }\n\n  // Apply is similar to exec but applies the changes for you\n  apply(object) {\n    let changes = this.exec(object);\n    return Object.assign({}, object, changes);\n  }\n\n  getId() {\n    return this.id;\n  }\n\n  serialize() {\n    return {\n      id: this.id,\n      stage: this.stage,\n      conditions: this.conditions.map(c => c.serialize()),\n      actions: this.actions.map(a => a.serialize())\n    };\n  }\n}\n\nexport class RuleIndexer {\n  constructor({ field, method }) {\n    this.field = field;\n    this.method = method;\n    this.rules = new Map();\n  }\n\n  getIndex(key) {\n    if (!this.rules.has(key)) {\n      this.rules.set(key, new Set());\n    }\n    return this.rules.get(key);\n  }\n\n  getIndexForValue(value) {\n    return this.getIndex(this.getKey(value) || '*');\n  }\n\n  getKey(value) {\n    if (typeof value === 'string' && value !== '') {\n      if (this.method === 'firstchar') {\n        return value[0].toLowerCase();\n      }\n      return value.toLowerCase();\n    }\n    return null;\n  }\n\n  getIndexes(rule) {\n    let cond = rule.conditions.find(cond => cond.field === this.field);\n    let indexes = [];\n\n    if (cond && (cond.op === 'oneOf' || cond.op === 'is')) {\n      if (cond.op === 'oneOf') {\n        cond.value.forEach(val => indexes.push(this.getIndexForValue(val)));\n      } else {\n        indexes.push(this.getIndexForValue(cond.value));\n      }\n    } else {\n      indexes.push(this.getIndex('*'));\n    }\n\n    return indexes;\n  }\n\n  index(rule) {\n    let indexes = this.getIndexes(rule);\n    indexes.forEach(index => {\n      index.add(rule);\n    });\n  }\n\n  remove(rule) {\n    let indexes = this.getIndexes(rule);\n    indexes.forEach(index => {\n      index.delete(rule);\n    });\n  }\n\n  getApplicableRules(object) {\n    let indexedRules;\n    if (this.field in object) {\n      let key = this.getKey(object[this.field]);\n      if (key) {\n        indexedRules = this.rules.get(key);\n      }\n    }\n\n    return fastSetMerge(\n      indexedRules || new Set(),\n      this.rules.get('*') || new Set()\n    );\n  }\n}\n\nconst OP_SCORES = {\n  is: 10,\n  oneOf: 9,\n  isapprox: 5,\n  isbetween: 5,\n  gt: 1,\n  gte: 1,\n  lt: 1,\n  lte: 1,\n  contains: 0\n};\n\nfunction computeScore(rule) {\n  let initialScore = rule.conditions.reduce((score, condition) => {\n    if (OP_SCORES[condition.op] == null) {\n      console.log(`Found invalid operation while ranking: ${condition.op}`);\n      return 0;\n    }\n\n    return score + OP_SCORES[condition.op];\n  }, 0);\n\n  if (\n    rule.conditions.every(\n      cond => cond.op === 'is' || cond.op === 'isapprox' || cond.op === 'oneOf'\n    )\n  ) {\n    return initialScore * 2;\n  }\n  return initialScore;\n}\n\nfunction _rankRules(rules) {\n  let scores = new Map();\n  rules.forEach(rule => {\n    scores.set(rule, computeScore(rule));\n  });\n\n  // No matter the order of rules, this must always return exactly the same\n  // order. That's why rules have ids: if two rules have the same score, it\n  // sorts by id\n  return [...rules].sort((r1, r2) => {\n    let score1 = scores.get(r1);\n    let score2 = scores.get(r2);\n    if (score1 < score2) {\n      return -1;\n    } else if (score1 > score2) {\n      return 1;\n    } else {\n      let id1 = r1.getId();\n      let id2 = r2.getId();\n      return id1 < id2 ? -1 : id1 > id2 ? 1 : 0;\n    }\n  });\n}\n\nexport function rankRules(rules) {\n  let pre = [];\n  let normal = [];\n  let post = [];\n\n  for (let rule of rules) {\n    switch (rule.stage) {\n      case 'pre':\n        pre.push(rule);\n        break;\n      case 'post':\n        post.push(rule);\n        break;\n      default:\n        normal.push(rule);\n    }\n  }\n\n  pre = _rankRules(pre);\n  normal = _rankRules(normal);\n  post = _rankRules(post);\n\n  return pre.concat(normal).concat(post);\n}\n\nexport function migrateIds(rule, mappings) {\n  // Go through the in-memory rules and patch up ids that have been\n  // \"migrated\" to other ids. This is a little tricky, but a lot\n  // easier than trying to keep an up-to-date mapping in the db. This\n  // is necessary because ids can be transparently mapped as items are\n  // merged/deleted in the system.\n  //\n  // It's very important here that we look at `rawValue` specifically,\n  // and only apply the patches to the other `value` fields. We always\n  // need to keep the original id around because undo can walk\n  // backwards, and we need to be able to consistently apply a\n  // \"projection\" of these mapped values. For example: if we have ids\n  // [1, 2] and applying mappings transforms it to [2, 2], if `1` gets\n  // mapped to something else there's no way to no to map *only* the\n  // first id back to make [1, 2]. Keeping the original value around\n  // solves this.\n  for (let ci = 0; ci < rule.conditions.length; ci++) {\n    let cond = rule.conditions[ci];\n    if (cond.type === 'id') {\n      switch (cond.op) {\n        case 'is':\n          cond.value = mappings.get(cond.rawValue) || cond.rawValue;\n          cond.unparsedValue = cond.value;\n          break;\n        case 'oneOf':\n          cond.value = cond.rawValue.map(v => mappings.get(v) || v);\n          cond.unparsedValue = [...cond.value];\n          break;\n        default:\n      }\n    }\n  }\n\n  for (let ai = 0; ai < rule.actions.length; ai++) {\n    let action = rule.actions[ai];\n    if (action.type === 'id') {\n      if (action.op === 'set') {\n        action.value = mappings.get(action.rawValue) || action.rawValue;\n      }\n    }\n  }\n}\n\n// This finds all the rules that reference the `id`\nexport function iterateIds(rules, fieldName, func) {\n  let counts = {};\n  let i;\n\n  ruleiter: for (i = 0; i < rules.length; i++) {\n    let rule = rules[i];\n    for (let ci = 0; ci < rule.conditions.length; ci++) {\n      let cond = rule.conditions[ci];\n      if (cond.type === 'id' && cond.field === fieldName) {\n        switch (cond.op) {\n          case 'is':\n            if (func(rule, cond.value)) {\n              continue ruleiter;\n            }\n            break;\n          case 'oneOf':\n            for (let vi = 0; vi < cond.value.length; vi++) {\n              if (func(rule, cond.value[vi])) {\n                continue ruleiter;\n              }\n            }\n            break;\n          default:\n        }\n      }\n    }\n\n    for (let ai = 0; ai < rule.actions.length; ai++) {\n      let action = rule.actions[ai];\n      if (action.type === 'id' && action.field === fieldName) {\n        // Currently `set` is the only op, but if we add more this\n        // will need to be extended\n        if (action.op === 'set') {\n          if (func(rule, action.value)) {\n            break;\n          }\n        }\n      }\n    }\n  }\n}\n","import title from './title';\nimport * as db from '../db';\nimport {\n  mergeObjects,\n  hasFieldsChanged,\n  toRelaxedNumber,\n  amountToInteger,\n  integerToAmount\n} from '../../shared/util';\nimport {\n  makeChild as makeChildTransaction,\n  recalculateSplit\n} from '../../shared/transactions';\nimport * as monthUtils from '../../shared/months';\nimport { transactionModel } from '../api-models';\nimport { getConfig } from '../config';\nimport { batchMessages } from '../sync';\nimport { runMutator } from '../mutators';\nimport { getStartingBalancePayee } from './payees';\nimport * as transfer from './transfer';\nimport { TransactionError } from '../errors';\nimport { runRules } from './transaction-rules';\nimport { batchUpdateTransactions } from './transactions';\n\nconst dateFns = require('date-fns');\nconst { post } = require('../post');\nconst levenshtein = require('damerau-levenshtein');\nconst uuid = require('../../platform/uuid');\n\n// Plaid article about API options:\n// https://support.plaid.com/customer/en/portal/articles/2612155-transactions-returned-per-request\n\nfunction BankSyncError(type, code) {\n  return { type: 'BankSyncError', category: type, code };\n}\n\nfunction makeSplitTransaction(trans, subtransactions) {\n  // We need to calculate the final state of split transactions\n  let { subtransactions: sub, ...parent } = recalculateSplit({\n    ...trans,\n    is_parent: true,\n    subtransactions: subtransactions.map((transaction, idx) =>\n      makeChildTransaction(trans, {\n        ...transaction,\n        sort_order: 0 - idx\n      })\n    )\n  });\n  return [parent, ...sub];\n}\n\nfunction getAccountBalance(account) {\n  // Debt account types need their balance reversed\n  switch (account.type) {\n    case 'credit':\n    case 'loan':\n      return -account.balances.current;\n    default:\n      return account.balances.current;\n  }\n}\n\nasync function updateAccountBalance(id, balance) {\n  await db.runQuery('UPDATE accounts SET balance_current = ? WHERE id = ?', [\n    amountToInteger(balance),\n    id\n  ]);\n}\n\nexport async function getAccounts(userId, userKey, id) {\n  let res = await post(getConfig().PLAID_SERVER + '/accounts', {\n    userId,\n    key: userKey,\n    item_id: id\n  });\n\n  let { accounts } = res;\n\n  accounts.forEach(acct => {\n    acct.balances.current = getAccountBalance(acct);\n  });\n\n  return accounts;\n}\n\nexport function fromPlaid(trans) {\n  return {\n    imported_id: trans.transaction_id,\n    payee_name: trans.name,\n    imported_payee: trans.name,\n    amount: -amountToInteger(trans.amount),\n    date: trans.date\n  };\n}\n\nasync function downloadTransactions(\n  userId,\n  userKey,\n  acctId,\n  bankId,\n  since,\n  count\n) {\n  let allTransactions = [];\n  let accountBalance = null;\n  let pageSize = 100;\n  let offset = 0;\n  let numDownloaded = 0;\n\n  while (1) {\n    const endDate = monthUtils.currentDay();\n\n    const res = await post(getConfig().PLAID_SERVER + '/transactions', {\n      userId: userId,\n      key: userKey,\n      item_id: '' + bankId,\n      account_id: acctId,\n      start_date: since,\n      end_date: endDate,\n      count: pageSize,\n      offset\n    });\n\n    if (res.error_code) {\n      throw BankSyncError(res.error_type, res.error_code);\n    }\n\n    if (res.transactions.length === 0) {\n      break;\n    }\n\n    numDownloaded += res.transactions.length;\n\n    // Remove pending transactions for now - we will handle them in\n    // the future.\n    allTransactions = allTransactions.concat(\n      res.transactions.filter(t => !t.pending)\n    );\n    accountBalance = getAccountBalance(res.accounts[0]);\n\n    if (\n      numDownloaded === res.total_transactions ||\n      (count != null && allTransactions.length >= count)\n    ) {\n      break;\n    }\n\n    offset += pageSize;\n  }\n\n  allTransactions =\n    count != null ? allTransactions.slice(0, count) : allTransactions;\n\n  return {\n    transactions: allTransactions.map(fromPlaid),\n    accountBalance\n  };\n}\n\nasync function resolvePayee(trans, payeeName, payeesToCreate) {\n  if (trans.payee == null && payeeName) {\n    // First check our registry of new payees (to avoid a db access)\n    // then check the db for existing payees\n    let payee = payeesToCreate.get(payeeName.toLowerCase());\n    payee = payee || (await db.getPayeeByName(payeeName));\n\n    if (payee != null) {\n      return payee.id;\n    } else {\n      // Otherwise we're going to create a new one\n      let newPayee = { id: uuid.v4Sync(), name: payeeName };\n      payeesToCreate.set(payeeName.toLowerCase(), newPayee);\n      return newPayee.id;\n    }\n  }\n\n  return trans.payee;\n}\n\nasync function normalizeTransactions(\n  transactions,\n  acctId,\n  { rawPayeeName } = {}\n) {\n  let payeesToCreate = new Map();\n\n  let normalized = [];\n  for (let trans of transactions) {\n    // Validate the date because we do some stuff with it. The db\n    // layer does better validation, but this will give nicer errors\n    if (trans.date == null) {\n      throw new Error('`date` is required when adding a transaction');\n    }\n\n    // Strip off the irregular properties\n    let { payee_name, subtransactions, ...rest } = trans;\n    trans = rest;\n\n    if (payee_name) {\n      let trimmed = payee_name.trim();\n      if (trimmed === '') {\n        payee_name = null;\n      } else {\n        payee_name = rawPayeeName ? trimmed : title(trimmed);\n      }\n    }\n\n    trans.imported_payee = trans.imported_payee || payee_name;\n    if (trans.imported_payee) {\n      trans.imported_payee = trans.imported_payee.trim();\n    }\n\n    // It's important to resolve both the account and payee early so\n    // when rules are run, they have the right data. Resolving payees\n    // also simplifies the payee creation process\n    trans.account = acctId;\n    trans.payee = await resolvePayee(trans, payee_name, payeesToCreate);\n\n    normalized.push({\n      payee_name,\n      subtransactions: subtransactions\n        ? subtransactions.map(t => ({ ...t, account: acctId }))\n        : null,\n      trans\n    });\n  }\n\n  return { normalized, payeesToCreate };\n}\n\nasync function createNewPayees(payeesToCreate, addsAndUpdates) {\n  let usedPayeeIds = new Set(addsAndUpdates.map(t => t.payee));\n\n  await batchMessages(async () => {\n    for (let payee of payeesToCreate.values()) {\n      // Only create the payee if it ended up being used\n      if (usedPayeeIds.has(payee.id)) {\n        await db.insertPayee(payee);\n      }\n    }\n  });\n}\n\nexport async function reconcileTransactions(acctId, transactions) {\n  const hasMatched = new Set();\n  const updated = [];\n  const added = [];\n\n  let { normalized, payeesToCreate } = await normalizeTransactions(\n    transactions,\n    acctId\n  );\n\n  // The first pass runs the rules, and preps data for fuzzy matching\n  let transactionsStep1 = [];\n  for (let { payee_name, trans, subtransactions } of normalized) {\n    // Run the rules\n    trans = runRules(trans);\n\n    let match = null;\n    let fuzzyDataset = null;\n\n    // First, match with an existing transaction's imported_id. This\n    // is the highest fidelity match and should always be attempted\n    // first.\n    if (trans.imported_id) {\n      match = await db.first(\n        'SELECT * FROM v_transactions WHERE imported_id = ? AND account = ?',\n        [trans.imported_id, acctId]\n      );\n\n      // TODO: Pending transactions\n\n      if (match) {\n        hasMatched.add(match.id);\n      }\n    }\n\n    // If it didn't match, query data needed for fuzzy matching\n    if (!match) {\n      // Look 1 day ahead and 4 days back when fuzzy matching. This\n      // needs to select all fields that need to be read from the\n      // matched transaction. See the final pass below for the needed\n      // fields.\n      fuzzyDataset = await db.all(\n        `SELECT id, date, imported_id, payee, category, notes FROM v_transactions\n           WHERE date >= ? AND date <= ? AND amount = ? AND account = ? AND is_child = 0`,\n        [\n          db.toDateRepr(monthUtils.subDays(trans.date, 4)),\n          db.toDateRepr(monthUtils.addDays(trans.date, 1)),\n          trans.amount || 0,\n          acctId\n        ]\n      );\n    }\n\n    transactionsStep1.push({\n      payee_name,\n      trans,\n      subtransactions,\n      match,\n      fuzzyDataset\n    });\n  }\n\n  // Next, do the fuzzy matching. This first pass matches based on the\n  // payee id. We do this in multiple passes so that higher fidelity\n  // matching always happens first, i.e. a transaction should match\n  // match with low fidelity if a later transaction is going to match\n  // the same one with high fidelity.\n  let transactionsStep2 = transactionsStep1.map(data => {\n    if (!data.match && data.fuzzyDataset) {\n      // Try to find one where the payees match.\n      let match = data.fuzzyDataset.find(\n        row => !hasMatched.has(row.id) && data.trans.payee === row.payee\n      );\n\n      if (match) {\n        hasMatched.add(match.id);\n        return { ...data, match };\n      }\n    }\n    return data;\n  });\n\n  // The final fuzzy matching pass. This is the lowest fidelity\n  // matching: it just find the first transaction that hasn't been\n  // matched yet. Remember the the dataset only contains transactions\n  // around the same date with the same amount.\n  let transactionsStep3 = transactionsStep2.map(data => {\n    if (!data.match && data.fuzzyDataset) {\n      let match = data.fuzzyDataset.find(row => !hasMatched.has(row.id));\n      if (match) {\n        hasMatched.add(match.id);\n        return { ...data, match };\n      }\n    }\n    return data;\n  });\n\n  // Finally, generate & commit the changes\n  for (let { payee_name, trans, subtransactions, match } of transactionsStep3) {\n    if (match) {\n      // TODO: change the above sql query to use aql\n      let existing = {\n        ...match,\n        cleared: match.cleared === 1,\n        date: db.fromDateRepr(match.date)\n      };\n\n      // Update the transaction\n      const updates = {\n        date: trans.date,\n        imported_id: trans.imported_id || null,\n        payee: existing.payee || trans.payee || null,\n        category: existing.category || trans.category || null,\n        imported_payee: trans.imported_payee || null,\n        notes: existing.notes || trans.notes || null,\n        cleared: trans.cleared != null ? trans.cleared : true\n      };\n\n      if (hasFieldsChanged(existing, updates, Object.keys(updates))) {\n        updated.push({ id: existing.id, ...updates });\n      }\n    } else {\n      // Insert a new transaction\n      let finalTransaction = {\n        ...trans,\n        id: uuid.v4Sync(),\n        category: trans.category || null,\n        cleared: trans.cleared != null ? trans.cleared : true\n      };\n\n      if (subtransactions && subtransactions.length > 0) {\n        added.push(...makeSplitTransaction(finalTransaction, subtransactions));\n      } else {\n        added.push(finalTransaction);\n      }\n    }\n  }\n\n  await createNewPayees(payeesToCreate, [...added, ...updated]);\n  await batchUpdateTransactions({ added, updated });\n\n  return {\n    added: added.map(trans => trans.id),\n    updated: updated.map(trans => trans.id)\n  };\n}\n\n// This is similar to `reconcileTransactions` except much simpler: it\n// does not try to match any transactions. It just adds them\nexport async function addTransactions(\n  acctId,\n  transactions,\n  { runTransfers = true } = {}\n) {\n  const added = [];\n\n  let { normalized, payeesToCreate } = await normalizeTransactions(\n    transactions,\n    acctId,\n    { rawPayeeName: true }\n  );\n\n  for (let { payee_name, trans, subtransactions } of normalized) {\n    // Run the rules\n    trans = runRules(trans);\n\n    let finalTransaction = {\n      id: uuid.v4Sync(),\n      ...trans,\n      account: acctId,\n      cleared: trans.cleared != null ? trans.cleared : true\n    };\n\n    // Add split transactions if they are given\n    if (subtransactions && subtransactions.length > 0) {\n      added.push(...makeSplitTransaction(finalTransaction, subtransactions));\n    } else {\n      added.push(finalTransaction);\n    }\n  }\n\n  await createNewPayees(payeesToCreate, added);\n\n  let newTransactions;\n  if (runTransfers) {\n    let res = await batchUpdateTransactions({ added });\n    newTransactions = res.added.map(t => t.id);\n  } else {\n    await batchMessages(async () => {\n      newTransactions = await Promise.all(\n        added.map(async trans => db.insertTransaction(trans))\n      );\n    });\n  }\n  return newTransactions;\n}\n\nexport async function syncAccount(userId, userKey, id, acctId, bankId) {\n  // TODO: Handle the case where transactions exist in the future\n  // (that will make start date after end date)\n  const latestTransaction = await db.first(\n    'SELECT * FROM v_transactions WHERE account = ? ORDER BY date DESC LIMIT 1',\n    [id]\n  );\n\n  if (latestTransaction) {\n    const startingTransaction = await db.first(\n      'SELECT date FROM v_transactions WHERE account = ? ORDER BY date ASC LIMIT 1',\n      [id]\n    );\n    const startingDate = db.fromDateRepr(startingTransaction.date);\n    // assert(startingTransaction)\n\n    // Get all transactions since the latest transaction, plus any 5\n    // days before the latest transaction. This gives us a chance to\n    // resolve any transactions that were entered manually.\n    //\n    // TODO: What this really should do is query the last imported_id\n    // and since then\n    let date = monthUtils.subDays(db.fromDateRepr(latestTransaction.date), 31);\n\n    // Never download transactions before the starting date. This was\n    // when the account was added to the system.\n    if (date < startingDate) {\n      date = startingDate;\n    }\n\n    let { transactions, accountBalance } = await downloadTransactions(\n      userId,\n      userKey,\n      acctId,\n      bankId,\n      date\n    );\n    if (transactions.length === 0) {\n      return { added: [], updated: [] };\n    }\n\n    transactions = transactions.map(trans => ({ ...trans, account: id }));\n\n    return runMutator(async () => {\n      const result = await reconcileTransactions(id, transactions);\n      await updateAccountBalance(id, accountBalance);\n      return result;\n    });\n  } else {\n    const acctRow = await db.select('accounts', id);\n\n    // Otherwise, download transaction for the last few days if it's an\n    // on-budget account, or for the past 30 days if off-budget\n    const startingDay = monthUtils.subDays(\n      monthUtils.currentDay(),\n      acctRow.offbudget === 0 ? 1 : 30\n    );\n\n    const { transactions } = await downloadTransactions(\n      userId,\n      userKey,\n      acctId,\n      bankId,\n      dateFns.format(dateFns.parseISO(startingDay), 'yyyy-MM-dd')\n    );\n\n    // We need to add a transaction that represents the starting\n    // balance for everything to balance out. In order to get balance\n    // before the first imported transaction, we need to get the\n    // current balance from the accounts table and subtract all the\n    // imported transactions.\n    let currentBalance = acctRow.balance_current;\n\n    const previousBalance = transactions.reduce((total, trans) => {\n      return total - trans.amount;\n    }, currentBalance);\n\n    const oldestDate =\n      transactions.length > 0\n        ? transactions[transactions.length - 1].date\n        : monthUtils.currentDay();\n\n    let payee = await getStartingBalancePayee();\n\n    return runMutator(async () => {\n      let initialId = await db.insertTransaction({\n        account: id,\n        amount: previousBalance,\n        category: acctRow.offbudget === 0 ? payee.category : null,\n        payee: payee.id,\n        date: oldestDate,\n        cleared: true,\n        starting_balance_flag: true\n      });\n\n      let result = await reconcileTransactions(id, transactions);\n      return {\n        ...result,\n        added: [initialId, ...result.added]\n      };\n    });\n  }\n}\n","// Utilities\nconst lowerCase = require('./lower-case');\nconst specials = require('./specials');\n\nlet character =\n  '[0-9\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376-\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0523\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u064A\\u066E-\\u066F\\u0671-\\u06D3\\u06D5\\u06E5-\\u06E6\\u06EE-\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4-\\u07F5\\u07FA\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0972\\u097B-\\u097F\\u0985-\\u098C\\u098F-\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC-\\u09DD\\u09DF-\\u09E1\\u09F0-\\u09F1\\u0A05-\\u0A0A\\u0A0F-\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32-\\u0A33\\u0A35-\\u0A36\\u0A38-\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2-\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0-\\u0AE1\\u0B05-\\u0B0C\\u0B0F-\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32-\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C-\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99-\\u0B9A\\u0B9C\\u0B9E-\\u0B9F\\u0BA3-\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58-\\u0C59\\u0C60-\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0-\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39\\u0D3D\\u0D60-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32-\\u0E33\\u0E40-\\u0E46\\u0E81-\\u0E82\\u0E84\\u0E87-\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA-\\u0EAB\\u0EAD-\\u0EB0\\u0EB2-\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDD\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8B\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065-\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10D0-\\u10FA\\u10FC\\u1100-\\u1159\\u115F-\\u11A2\\u11A8-\\u11F9\\u1200-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u1676\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19A9\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE-\\u1BAF\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u2094\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2C6F\\u2C71-\\u2C7D\\u2C80-\\u2CE4\\u2D00-\\u2D25\\u2D30-\\u2D65\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31B7\\u31F0-\\u31FF\\u3400\\u4DB5\\u4E00\\u9FC3\\uA000-\\uA48C\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A-\\uA62B\\uA640-\\uA65F\\uA662-\\uA66E\\uA67F-\\uA697\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78C\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA90A-\\uA925\\uA930-\\uA946\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAC00\\uD7A3\\uF900-\\uFA2D\\uFA30-\\uFA6A\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40-\\uFB41\\uFB43-\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]';\nlet regex = new RegExp(\n  `(?:(?:(\\\\s?(?:^|[.\\\\(\\\\)!?;:\"-])\\\\s*)(${character}))|(${character}))(${character}*[’']*${character}*)`,\n  'g'\n);\n\nlet convertToRegExp = specials =>\n  specials.map(s => [new RegExp(`\\\\b${s}\\\\b`, 'gi'), s]);\n\nfunction parseMatch(match) {\n  const firstCharacter = match[0];\n\n  // test first character\n  if (/\\s/.test(firstCharacter)) {\n    // if whitespace - trim and return\n    return match.substr(1);\n  }\n  if (/[()]/.test(firstCharacter)) {\n    // if parens - this shouldn't be replaced\n    return null;\n  }\n\n  return match;\n}\n\nmodule.exports = (str, options = {}) => {\n  str = str\n    .toLowerCase()\n    .replace(regex, (m, lead = '', forced, lower, rest) => {\n      const parsedMatch = parseMatch(m);\n      if (!parsedMatch) {\n        return m;\n      }\n      if (!forced) {\n        const fullLower = lower + rest;\n\n        if (lowerCase.has(fullLower)) {\n          return parsedMatch;\n        }\n      }\n\n      return lead + (lower || forced).toUpperCase() + rest;\n    });\n\n  const customSpecials = options.special || [];\n  const replace = [...specials, ...customSpecials];\n  const replaceRegExp = convertToRegExp(replace);\n\n  replaceRegExp.forEach(([pattern, s]) => {\n    str = str.replace(pattern, s);\n  });\n\n  return str;\n};\n","const conjunctions = [\n  'for',\n  'and',\n  'nor',\n  'but',\n  'or',\n  'yet',\n  'so'\n]\n\nconst articles = [\n  'a',\n  'an',\n  'the'\n]\n\nconst prepositions = [\n  'aboard',\n  'about',\n  'above',\n  'across',\n  'after',\n  'against',\n  'along',\n  'amid',\n  'among',\n  'anti',\n  'around',\n  'as',\n  'at',\n  'before',\n  'behind',\n  'below',\n  'beneath',\n  'beside',\n  'besides',\n  'between',\n  'beyond',\n  'but',\n  'by',\n  'concerning',\n  'considering',\n  'despite',\n  'down',\n  'during',\n  'except',\n  'excepting',\n  'excluding',\n  'following',\n  'for',\n  'from',\n  'in',\n  'inside',\n  'into',\n  'like',\n  'minus',\n  'near',\n  'of',\n  'off',\n  'on',\n  'onto',\n  'opposite',\n  'over',\n  'past',\n  'per',\n  'plus',\n  'regarding',\n  'round',\n  'save',\n  'since',\n  'than',\n  'through',\n  'to',\n  'toward',\n  'towards',\n  'under',\n  'underneath',\n  'unlike',\n  'until',\n  'up',\n  'upon',\n  'versus',\n  'via',\n  'with',\n  'within',\n  'without'\n]\n\nmodule.exports = new Set([\n  ...conjunctions,\n  ...articles,\n  ...prepositions\n])\n","const intended = [\n  'CLI',\n  'API',\n  'HTTP',\n  'HTTPS',\n  'JSX',\n  'DNS',\n  'URL',\n  'CI',\n  'CDN',\n  'GitHub',\n  'CSS',\n  'JS',\n  'JavaScript',\n  'TypeScript',\n  'HTML',\n  'WordPress',\n  'JavaScript',\n  'Next.js',\n  'Node.js'\n];\n\nmodule.exports = intended;\n","import * as db from '../db';\nimport {\n  Condition,\n  Action,\n  Rule,\n  RuleIndexer,\n  rankRules,\n  migrateIds,\n  iterateIds\n} from './rules';\nimport { getMappings } from '../db/mappings';\nimport { addDays, subDays, parseDate, dayFromDate } from '../../shared/months';\nimport { addSyncListener } from '../sync/index';\nimport { RuleError } from '../errors';\nimport {\n  FIELD_TYPES,\n  sortNumbers,\n  getApproxNumberThreshold\n} from '../../shared/rules';\nimport q from '../../shared/query';\nimport { requiredFields, toDateRepr } from '../models';\nimport { currentDay } from '../../shared/months';\nimport { partitionByField, fastSetMerge } from '../../shared/util';\nimport { setSyncingMode, batchMessages } from '../sync';\nimport { schemaConfig } from '../aql/schema';\nconst uuid = require('../../platform/uuid');\n\n// TODO: Detect if it looks like the user is creating a rename rule\n// and prompt to create it in the pre phase instead\n// * We could also make the \"create rule\" button a dropdown that\n//   provides different \"templates\" like \"create renaming rule\"\n\nexport { iterateIds } from './rules';\n\nlet allRules;\nlet unlistenSync;\nlet firstcharIndexer;\nlet payeeIndexer;\n\nexport function resetState() {\n  allRules = new Map();\n  firstcharIndexer = new RuleIndexer({\n    field: 'imported_payee',\n    method: 'firstchar'\n  });\n  payeeIndexer = new RuleIndexer({ field: 'payee' });\n}\n\n// Database functions\n\nfunction invert(obj) {\n  return Object.fromEntries(\n    Object.entries(obj).map(entry => {\n      return [entry[1], entry[0]];\n    })\n  );\n}\n\nlet internalFields = schemaConfig.views.transactions.fields;\nlet publicFields = invert(schemaConfig.views.transactions.fields);\n\nfunction fromInternalField(obj) {\n  return {\n    ...obj,\n    field: publicFields[obj.field] || obj.field\n  };\n}\n\nfunction toInternalField(obj) {\n  return {\n    ...obj,\n    field: internalFields[obj.field] || obj.field\n  };\n}\n\nexport const ruleModel = {\n  validate(rule, { update } = {}) {\n    requiredFields('rules', rule, ['conditions', 'actions'], update);\n\n    if (!update || 'stage' in rule) {\n      if (\n        rule.stage !== 'pre' &&\n        rule.stage !== 'post' &&\n        rule.stage !== null\n      ) {\n        throw new Error('Invalid rule stage: ' + rule.stage);\n      }\n    }\n\n    return rule;\n  },\n\n  toJS(row) {\n    function parseArray(str) {\n      let value;\n      try {\n        value = typeof str === 'string' ? JSON.parse(str) : str;\n      } catch (e) {\n        throw new RuleError('internal', 'Cannot parse rule json');\n      }\n\n      if (!Array.isArray(value)) {\n        throw new RuleError('internal', 'Rule json must be an array');\n      }\n      return value;\n    }\n\n    let rule = { ...row };\n    rule.conditions = rule.conditions\n      ? parseArray(rule.conditions).map(cond => fromInternalField(cond))\n      : [];\n    rule.actions = rule.actions\n      ? parseArray(rule.actions).map(action => fromInternalField(action))\n      : [];\n    return rule;\n  },\n\n  fromJS(rule) {\n    let row = { ...rule };\n    if ('conditions' in row) {\n      let conditions = row.conditions.map(cond => toInternalField(cond));\n      row.conditions = JSON.stringify(conditions);\n    }\n    if ('actions' in row) {\n      let actions = row.actions.map(action => toInternalField(action));\n      row.actions = JSON.stringify(actions);\n    }\n    return row;\n  }\n};\n\nexport function makeRule(data) {\n  let rule;\n  try {\n    rule = new Rule({\n      ...ruleModel.toJS(data),\n      fieldTypes: FIELD_TYPES\n    });\n  } catch (e) {\n    console.warn('Invalid rule', e);\n    if (e instanceof RuleError) {\n      return null;\n    }\n    throw e;\n  }\n\n  // This is needed because we map ids on the fly, and they might\n  // not be persisted into the db. Mappings allow items to\n  // transparently merge with other items\n  migrateIds(rule, getMappings());\n\n  return rule;\n}\n\nexport async function loadRules() {\n  resetState();\n\n  let rules = await db.all(`\n    SELECT * FROM rules\n      WHERE conditions IS NOT NULL AND actions IS NOT NULL AND tombstone = 0\n  `);\n\n  for (let i = 0; i < rules.length; i++) {\n    let desc = rules[i];\n    // These are old stages, can be removed before release\n    if (desc.stage === 'cleanup' || desc.stage === 'modify') {\n      desc.stage = 'pre';\n    }\n\n    let rule = makeRule(desc);\n    if (rule) {\n      allRules.set(rule.id, rule);\n      firstcharIndexer.index(rule);\n      payeeIndexer.index(rule);\n    }\n  }\n\n  if (unlistenSync) {\n    unlistenSync();\n  }\n  unlistenSync = addSyncListener(onApplySync);\n}\n\nexport function getRules() {\n  // This can simply return the in-memory data\n  return [...allRules.values()];\n}\n\nexport async function insertRule(rule) {\n  rule = ruleModel.validate(rule);\n  return db.insertWithUUID('rules', ruleModel.fromJS(rule));\n}\n\nexport async function updateRule(rule) {\n  rule = ruleModel.validate(rule, { update: true });\n  return db.update('rules', ruleModel.fromJS(rule));\n}\n\nexport async function deleteRule(rule) {\n  let schedule = await db.first('SELECT id FROM schedules WHERE rule = ?', [\n    rule.id\n  ]);\n\n  if (schedule) {\n    return false;\n  }\n\n  return db.delete_('rules', rule.id);\n}\n\n// Sync projections\n\nfunction onApplySync(oldValues, newValues) {\n  newValues.forEach((items, table) => {\n    if (table === 'rules') {\n      items.forEach(newValue => {\n        let oldRule = allRules.get(newValue.id);\n\n        if (newValue.tombstone === 1) {\n          // Deleted, need to remove it from in-memory\n          let rule = allRules.get(newValue.id);\n          if (rule) {\n            allRules.delete(rule.getId());\n            firstcharIndexer.remove(rule);\n            payeeIndexer.remove(rule);\n          }\n        } else {\n          // Inserted/updated\n          let rule = makeRule(newValue);\n          if (rule) {\n            if (oldRule) {\n              firstcharIndexer.remove(oldRule);\n              payeeIndexer.remove(oldRule);\n            }\n            allRules.set(newValue.id, rule);\n            firstcharIndexer.index(rule);\n            payeeIndexer.index(rule);\n          }\n        }\n      });\n    }\n  });\n\n  // If any of the mapping tables have changed, we need to refresh the\n  // ids\n  let tables = [...newValues.keys()];\n  if (tables.find(table => table.indexOf('mapping') !== -1)) {\n    getRules().forEach(rule => {\n      migrateIds(rule, getMappings());\n    });\n  }\n}\n\n// Runner\nexport function runRules(trans) {\n  let finalTrans = { ...trans };\n  let allChanges = {};\n\n  let rules = rankRules(\n    fastSetMerge(\n      firstcharIndexer.getApplicableRules(trans),\n      payeeIndexer.getApplicableRules(trans)\n    )\n  );\n\n  for (let i = 0; i < rules.length; i++) {\n    finalTrans = rules[i].apply(finalTrans);\n  }\n\n  return finalTrans;\n}\n\n// This does the inverse: finds all the transactions matching a rule\nexport function conditionsToAQL(conditions, { recurDateBounds = 100 } = {}) {\n  let errors = [];\n\n  conditions = conditions\n    .map(cond => {\n      if (cond instanceof Condition) {\n        return cond;\n      }\n\n      try {\n        return new Condition(\n          cond.op,\n          cond.field,\n          cond.value,\n          cond.options,\n          FIELD_TYPES\n        );\n      } catch (e) {\n        errors.push(e.type || 'internal');\n        console.log('conditionsToAQL: invalid condition: ' + e.message);\n        return null;\n      }\n    })\n    .filter(Boolean);\n\n  // rule -> actualql\n  let filters = conditions.map(cond => {\n    let { type, field, op, value, options } = cond;\n\n    let getValue = value => {\n      if (type === 'number') {\n        return value.value;\n      }\n      return value;\n    };\n\n    let apply = (field, op, value) => {\n      if (type === 'number') {\n        if (options) {\n          if (options.outflow) {\n            return {\n              $and: [\n                { amount: { $lt: 0 } },\n                { [field]: { $transform: '$neg', [op]: value } }\n              ]\n            };\n          } else if (options.inflow) {\n            return {\n              $and: [{ amount: { $gt: 0 } }, { [field]: { [op]: value } }]\n            };\n          }\n        }\n\n        return { amount: { [op]: value } };\n      } else if (type === 'string') {\n        return { [field]: { $transform: '$lower', [op]: value } };\n      } else if (type === 'date') {\n        return { [field]: { [op]: value.date } };\n      }\n      return { [field]: { [op]: value } };\n    };\n\n    switch (op) {\n      case 'isapprox':\n      case 'is':\n        if (type === 'date') {\n          if (value.type === 'recur') {\n            let dates = value.schedule\n              .occurrences({ take: recurDateBounds })\n              .toArray()\n              .map(d => dayFromDate(d.date));\n\n            let compare = d => ({ $eq: d });\n\n            return {\n              $or: dates.map(d => {\n                if (op === 'isapprox') {\n                  return {\n                    $and: [\n                      { date: { $gte: subDays(d, 2) } },\n                      { date: { $lte: addDays(d, 2) } }\n                    ]\n                  };\n                }\n                return { date: d };\n              })\n            };\n          } else {\n            let { date } = value;\n\n            if (op === 'isapprox') {\n              let fullDate = parseDate(value.date);\n              let high = addDays(fullDate, 2);\n              let low = subDays(fullDate, 2);\n\n              return {\n                $and: [{ date: { $gte: low } }, { date: { $lte: high } }]\n              };\n            } else {\n              switch (value.type) {\n                case 'date':\n                  return { date: value.date };\n                case 'month': {\n                  let low = value.date + '-00';\n                  let high = value.date + '-99';\n                  return {\n                    $and: [{ date: { $gte: low } }, { date: { $lte: high } }]\n                  };\n                }\n                case 'year': {\n                  let low = value.date + '-00-00';\n                  let high = value.date + '-99-99';\n                  return {\n                    $and: [{ date: { $gte: low } }, { date: { $lte: high } }]\n                  };\n                }\n                default:\n              }\n            }\n          }\n        } else if (type === 'number') {\n          let number = value.value;\n          if (op === 'isapprox') {\n            let threshold = getApproxNumberThreshold(number);\n\n            return {\n              $and: [\n                apply(field, '$gte', number - threshold),\n                apply(field, '$lte', number + threshold)\n              ]\n            };\n          }\n          return apply(field, '$eq', number);\n        }\n\n        return apply(field, '$eq', value);\n\n      case 'isbetween':\n        // This operator is only applicable to the specific `between`\n        // number type so we don't use `apply`\n        let [low, high] = sortNumbers(value.num1, value.num2);\n        return {\n          [field]: [{ $gte: low }, { $lte: high }]\n        };\n      case 'contains':\n        // Running contains with id will automatically reach into\n        // the `name` of the referenced table and do a string match\n        return apply(\n          type === 'id' ? field + '.name' : field,\n          '$like',\n          '%' + value + '%'\n        );\n      case 'oneOf':\n        let values = value;\n        if (values.length === 0) {\n          // This forces it to match nothing\n          return { id: null };\n        }\n        return { $or: values.map(v => apply(field, '$eq', v)) };\n      case 'gt':\n        return apply(field, '$gt', getValue(value));\n      case 'gte':\n        return apply(field, '$gte', getValue(value));\n      case 'lt':\n        return apply(field, '$lt', getValue(value));\n      case 'lte':\n        return apply(field, '$lte', getValue(value));\n      case 'true':\n        return apply(field, '$eq', true);\n      case 'false':\n        return apply(field, '$eq', false);\n      default:\n        throw new Error('Unhandled operator: ' + op);\n    }\n  });\n\n  return { filters, errors };\n}\n\nexport function applyActions(transactionIds, actions, handlers) {\n  let parsedActions = actions\n    .map(action => {\n      if (action instanceof Action) {\n        return action;\n      }\n\n      try {\n        return new Action(\n          action.op,\n          action.field,\n          action.value,\n          action.options,\n          FIELD_TYPES\n        );\n      } catch (e) {\n        console.log('Action error', e);\n        return null;\n      }\n    })\n    .filter(Boolean);\n\n  if (parsedActions.length !== actions.length) {\n    // An error happened while parsing\n    return null;\n  }\n\n  let updated = transactionIds.map(id => {\n    let update = { id };\n    for (let action of parsedActions) {\n      action.exec(update);\n    }\n    return update;\n  });\n\n  return handlers['transactions-batch-update']({ updated });\n}\n\nexport function getRulesForPayee(payeeId) {\n  let rules = new Set();\n  iterateIds(getRules(), 'payee', (rule, id) => {\n    if (id === payeeId) {\n      rules.add(rule);\n    }\n  });\n\n  return rankRules([...rules]);\n}\n\nfunction* getIsSetterRules(\n  stage,\n  condField,\n  actionField,\n  { condValue, actionValue }\n) {\n  let rules = getRules();\n  for (let i = 0; i < rules.length; i++) {\n    let rule = rules[i];\n\n    if (\n      rule.stage === stage &&\n      rule.actions.length === 1 &&\n      rule.actions[0].op === 'set' &&\n      rule.actions[0].field === actionField &&\n      (actionValue === undefined || rule.actions[0].value === actionValue) &&\n      rule.conditions.length === 1 &&\n      rule.conditions[0].op === 'is' &&\n      rule.conditions[0].field === condField &&\n      (condValue === undefined || rule.conditions[0].value === condValue)\n    ) {\n      yield rule.serialize();\n    }\n  }\n\n  return null;\n}\n\nfunction* getOneOfSetterRules(\n  stage,\n  condField,\n  actionField,\n  { condValue, actionValue }\n) {\n  let rules = getRules();\n  for (let i = 0; i < rules.length; i++) {\n    let rule = rules[i];\n\n    if (\n      rule.stage === stage &&\n      rule.actions.length === 1 &&\n      rule.actions[0].op === 'set' &&\n      rule.actions[0].field === actionField &&\n      (actionValue == null || rule.actions[0].value === actionValue) &&\n      rule.conditions.length === 1 &&\n      rule.conditions[0].op === 'oneOf' &&\n      rule.conditions[0].field === condField &&\n      (condValue == null || rule.conditions[0].value.indexOf(condValue) !== -1)\n    ) {\n      yield rule.serialize();\n    }\n  }\n\n  return null;\n}\n\nexport async function updatePayeeRenameRule(fromNames, to) {\n  let renameRule = getOneOfSetterRules('pre', 'imported_payee', 'payee', {\n    actionValue: to\n  }).next().value;\n\n  // Note that we don't check for existing rules that set this\n  // `imported_payee` to something else. It's important to do\n  // that for categories because categories will be changes frequently\n  // for the same payee, but renames won't be changed much. It's a use\n  // case we could improve in the future, but this is fine for now.\n\n  if (renameRule) {\n    let condition = renameRule.conditions[0];\n    let newValue = [\n      ...fastSetMerge(\n        new Set(condition.value),\n        new Set(fromNames.filter(name => name !== ''))\n      )\n    ];\n    let rule = {\n      ...renameRule,\n      conditions: [{ ...condition, value: newValue }]\n    };\n    await updateRule(rule);\n    return renameRule.id;\n  } else {\n    let rule = new Rule({\n      stage: 'pre',\n      conditions: [{ op: 'oneOf', field: 'imported_payee', value: fromNames }],\n      actions: [{ op: 'set', field: 'payee', value: to }],\n      fieldTypes: FIELD_TYPES\n    });\n    return insertRule(rule.serialize());\n  }\n}\n\nexport function getProbableCategory(transactions) {\n  let scores = new Map();\n\n  transactions.forEach(trans => {\n    if (trans.category) {\n      scores.set(trans.category, (scores.get(trans.category) || 0) + 1);\n    }\n  });\n\n  let winner = transactions.reduce((winner, trans) => {\n    let score = scores.get(trans.category);\n    if (!winner || score > winner.score) {\n      return { score, category: trans.category };\n    }\n    return winner;\n  }, null);\n\n  return winner.score >= 3 ? winner.category : null;\n}\n\nexport async function updateCategoryRules(transactions) {\n  if (transactions.length === 0) {\n    return;\n  }\n\n  let payeeIds = new Set(transactions.map(trans => trans.payee));\n  let transIds = new Set(transactions.map(trans => trans.id));\n\n  // It's going to be quickest to get the oldest date and then query\n  // all transactions since then so we can work in memory\n  let oldestDate = null;\n  for (let i = 0; i < transactions.length; i++) {\n    if (oldestDate === null || transactions[i].date < oldestDate) {\n      oldestDate = transactions[i].date;\n    }\n  }\n\n  // We look 6 months behind to include any other transaction. This\n  // makes it so we, 1. don't have to load in all transactions ever\n  // and 2. \"forget\" really old transactions which might be nice and\n  // 3. don't have to individually run a query for each payee\n  oldestDate = subDays(oldestDate, 180);\n\n  // Also look 180 days in the future to get any future transactions\n  // (this might change when we think about scheduled transactions)\n  let register = await db.all(\n    `SELECT t.* FROM v_transactions t\n     LEFT JOIN accounts a ON a.id = t.account\n     WHERE date >= ? AND date <= ? AND is_parent = 0 AND a.closed = 0`,\n    [toDateRepr(oldestDate), toDateRepr(addDays(currentDay(), 180))]\n  );\n\n  let allTransactions = partitionByField(register, 'payee');\n  let categoriesToSet = new Map();\n\n  for (let payeeId of payeeIds) {\n    // Don't do anything if payee is null\n    if (payeeId) {\n      let latestTrans = (allTransactions.get(payeeId) || []).slice(0, 5);\n\n      // Check if one of the latest transactions was one that was\n      // updated. We only want to update anything if so.\n      if (latestTrans.find(trans => transIds.has(trans.id))) {\n        let category = getProbableCategory(latestTrans);\n        if (category) {\n          categoriesToSet.set(payeeId, category);\n        }\n      }\n    }\n  }\n\n  await batchMessages(async () => {\n    for (let [payeeId, category] of categoriesToSet.entries()) {\n      let ruleSetters = [\n        ...getIsSetterRules(null, 'payee', 'category', {\n          condValue: payeeId\n        })\n      ];\n\n      if (ruleSetters.length > 0) {\n        // If there are existing rules, change all of them to the new\n        // category (if they aren't already using it). We set all of\n        // them because it's possible that multiple rules exist\n        // because 2 clients made them independently. Not really a big\n        // deal, but to make sure our update gets applied set it to\n        // all of them\n        for (let rule of ruleSetters) {\n          let action = rule.actions[0];\n          if (action.value !== category) {\n            await updateRule({\n              ...rule,\n              actions: [{ ...action, value: category }]\n            });\n          }\n        }\n      } else {\n        // No existing rules, so create one\n        let newRule = new Rule({\n          stage: null,\n          conditions: [{ op: 'is', field: 'payee', value: payeeId }],\n          actions: [{ op: 'set', field: 'category', value: category }],\n          fieldTypes: FIELD_TYPES\n        });\n        await insertRule(newRule.serialize());\n      }\n    }\n  });\n}\n\n// This can be removed in the future\nexport async function migrateOldRules() {\n  let allPayees = await db.all(\n    `SELECT p.*, c.id as category FROM payees p\n    LEFT JOIN category_mapping cm ON cm.id = p.category\n    LEFT JOIN categories c ON (c.id = cm.transferId AND c.tombstone = 0)\n    WHERE p.tombstone = 0 AND transfer_acct IS NULL`\n  );\n  let allRules = await db.all(\n    `SELECT pr.*, pm.targetId as payee_id FROM payee_rules pr\n      LEFT JOIN payee_mapping pm ON pm.id = pr.payee_id\n      WHERE pr.tombstone = 0`\n  );\n\n  let payeesById = new Map();\n  for (let i = 0; i < allPayees.length; i++) {\n    payeesById.set(allPayees[i].id, allPayees[i]);\n  }\n\n  let rulesByPayeeId = new Map();\n  for (let i = 0; i < allRules.length; i++) {\n    let item = allRules[i];\n    let rules = rulesByPayeeId.get(item.payee_id) || [];\n    rules.push(item);\n    rulesByPayeeId.set(item.payee_id, rules);\n  }\n\n  let rules = [];\n\n  // Convert payee name rules\n  for (let [payeeId, payeeRules] of rulesByPayeeId.entries()) {\n    let equals = payeeRules.filter(r => {\n      let payee = payeesById.get(r.payee_id);\n\n      return (\n        (r.type === 'equals' || r.type == null) &&\n        (!payee || r.value.toLowerCase() !== payee.name.toLowerCase())\n      );\n    });\n    let contains = payeeRules.filter(r => r.type === 'contains');\n    let actions = [{ op: 'set', field: 'payee', value: payeeId }];\n\n    if (equals.length > 0) {\n      rules.push({\n        stage: null,\n        conditions: [\n          {\n            op: 'oneOf',\n            field: 'imported_payee',\n            value: equals.map(payeeRule => payeeRule.value)\n          }\n        ],\n        actions\n      });\n    }\n\n    if (contains.length > 0) {\n      rules = rules.concat(\n        contains.map(payeeRule => ({\n          stage: null,\n          conditions: [\n            {\n              op: 'contains',\n              field: 'imported_payee',\n              value: payeeRule.value\n            }\n          ],\n          actions\n        }))\n      );\n    }\n  }\n\n  // Convert category rules\n  let catRules = allPayees\n    .filter(p => p.category)\n    .reduce((map, payee) => {\n      let ids = map.get(payee.category) || new Set();\n      ids.add(payee.id);\n      map.set(payee.category, ids);\n      return map;\n    }, new Map());\n\n  for (let [catId, payeeIds] of catRules) {\n    rules.push({\n      stage: null,\n      conditions: [\n        {\n          op: 'oneOf',\n          field: 'payee',\n          value: [...payeeIds]\n        }\n      ],\n      actions: [\n        {\n          op: 'set',\n          field: 'category',\n          value: catId\n        }\n      ]\n    });\n  }\n\n  // Very important: we never want to sync migration changes, but it\n  // still has to run through the syncing layer to make sure\n  // projections are correct. This is only OK because we require a\n  // sync reset after this.\n  let prevMode = setSyncingMode('disabled');\n  await batchMessages(async () => {\n    for (let rule of rules) {\n      await insertRule({\n        stage: rule.stage,\n        conditions: rule.conditions,\n        actions: rule.actions\n      });\n    }\n\n    await db.runQuery('DELETE FROM payee_rules', []);\n  });\n  setSyncingMode(prevMode);\n}\n","import * as sheet from '../sheet';\nimport { batchMessages } from '../sync';\nimport * as db from '../db';\nimport { incrFetch, whereIn } from '../db/util';\nimport * as transfer from './transfer';\nimport * as rules from './transaction-rules';\nconst connection = require('../../platform/server/connection');\n\nasync function idsWithChildren(ids) {\n  let whereIds = whereIn(ids, 'parent_id');\n  let rows = await db.all(\n    `SELECT id FROM v_transactions_internal WHERE ${whereIds}`\n  );\n  let set = new Set(ids);\n  for (let row of rows) {\n    set.add(row.id);\n  }\n  return [...set];\n}\n\nasync function getTransactionsByIds(ids) {\n  // TODO: convert to whereIn\n  //\n  // or better yet, use ActualQL\n  return incrFetch(\n    (query, params) => db.selectWithSchema('transactions', query, params),\n    ids,\n    id => `id = '${id}'`,\n    where => `SELECT * FROM v_transactions_internal WHERE ${where}`\n  );\n}\n\nexport async function batchUpdateTransactions({\n  added,\n  deleted,\n  updated,\n  learnCategories = false,\n  detectOrphanPayees = true\n}) {\n  // Track the ids of each type of transaction change (see below for why)\n  let addedIds = [];\n  let updatedIds = updated ? updated.map(u => u.id) : [];\n  let deletedIds = deleted ? await idsWithChildren(deleted.map(d => d.id)) : [];\n\n  let oldPayees = new Set();\n  let accounts = await db.all('SELECT * FROM accounts WHERE tombstone = 0');\n\n  // We need to get all the payees of updated transactions _before_\n  // making changes\n  if (updated) {\n    let descUpdatedIds = updated\n      .filter(update => update.payee)\n      .map(update => update.id);\n\n    let transactions = await getTransactionsByIds(descUpdatedIds);\n\n    for (let i = 0; i < transactions.length; i++) {\n      oldPayees.add(transactions[i].payee);\n    }\n  }\n\n  // Apply all the updates. We can batch this now! This is important\n  // and makes bulk updates much faster\n  await batchMessages(async () => {\n    if (added) {\n      addedIds = await Promise.all(\n        added.map(async t => db.insertTransaction(t))\n      );\n    }\n\n    if (deleted) {\n      await Promise.all(\n        // It's important to use `deletedIds` and not `deleted` here\n        // because we've expanded it to include children above. The\n        // inconsistency of the delete APIs is annoying and should\n        // be fixed (it should only take an id)\n        deletedIds.map(async id => {\n          await db.deleteTransaction({ id });\n        })\n      );\n    }\n\n    if (updated) {\n      await Promise.all(\n        updated.map(async t => {\n          if (t.account) {\n            // Moving transactions off budget should always clear the\n            // category\n            let account = accounts.find(acct => acct.id === t.account);\n            if (account.offbudget === 1) {\n              t.category = null;\n            }\n          }\n\n          await db.updateTransaction(t);\n        })\n      );\n    }\n  });\n\n  // Get all of the full transactions that were changed. This is\n  // needed to run any cascading logic that depends on the full\n  // transaction. Things like transfers, analyzing rule updates, and\n  // more\n  let allAdded = await getTransactionsByIds(addedIds);\n  let allUpdated = await getTransactionsByIds(updatedIds);\n  let allDeleted = await getTransactionsByIds(deletedIds);\n\n  // Post-processing phase: first do any updates to transfers.\n  // Transfers update the transactions and we need to return updates\n  // to the client so that can apply them. Note that added\n  // transactions just return the full transaction.\n  let resultAdded = allAdded;\n  let resultUpdated;\n\n  await batchMessages(async () => {\n    await Promise.all(allAdded.map(t => transfer.onInsert(t)));\n\n    // Return any updates from here\n    resultUpdated = (await Promise.all(\n      allUpdated.map(t => transfer.onUpdate(t))\n    )).filter(Boolean);\n\n    await Promise.all(allDeleted.map(t => transfer.onDelete(t)));\n  });\n\n  if (learnCategories) {\n    // Analyze any updated categories and update rules to learn from\n    // the user's activity\n    let ids = new Set([\n      ...(added ? added.filter(add => add.category).map(add => add.id) : []),\n      ...(updated\n        ? updated.filter(update => update.category).map(update => update.id)\n        : [])\n    ]);\n    await rules.updateCategoryRules(\n      allAdded.concat(allUpdated).filter(trans => ids.has(trans.id))\n    );\n  }\n\n  if (detectOrphanPayees) {\n    // Look for any orphaned payees and notify the user about merging\n    // them\n\n    if (updated) {\n      let newPayeeIds = updated.map(u => u.payee).filter(Boolean);\n      if (newPayeeIds.length > 0) {\n        let allOrphaned = new Set(await db.getOrphanedPayees());\n\n        let orphanedIds = [...oldPayees].filter(id => allOrphaned.has(id));\n\n        if (orphanedIds.length > 0) {\n          connection.send('orphaned-payees', {\n            orphanedIds,\n            updatedPayeeIds: newPayeeIds\n          });\n        }\n      }\n    }\n  }\n\n  return {\n    added: resultAdded,\n    updated: resultUpdated\n  };\n}\n","import * as db from '../db';\n\nasync function getPayee(acct) {\n  return db.first('SELECT * FROM payees WHERE transfer_acct = ?', [acct]);\n}\n\nasync function getTransferredAccount(transaction) {\n  if (transaction.payee) {\n    let { transfer_acct, id } = await db.first(\n      'SELECT id, transfer_acct FROM v_payees WHERE id = ?',\n      [transaction.payee]\n    );\n    return transfer_acct;\n  }\n  return null;\n}\n\nasync function clearCategory(transaction, transferAcct) {\n  const { offbudget: fromOffBudget } = await db.first(\n    'SELECT offbudget FROM accounts WHERE id = ?',\n    [transaction.account]\n  );\n  const { offbudget: toOffBudget } = await db.first(\n    'SELECT offbudget FROM accounts WHERE id = ?',\n    [transferAcct]\n  );\n\n  // We should clear the category to make sure it's not being\n  // accounted for in the budget, unless it should be in the case of\n  // transferring from an on-budget to off-budget account\n  if (fromOffBudget === toOffBudget) {\n    await db.updateTransaction({ id: transaction.id, category: null });\n    return true;\n  }\n  return false;\n}\n\nexport async function addTransfer(transaction, transferredAccount) {\n  let { id: fromPayee } = await db.first(\n    'SELECT id FROM payees WHERE transfer_acct = ?',\n    [transaction.account]\n  );\n\n  // We need to enforce certain constraints with child transaction transfers\n  if (transaction.parent_id) {\n    let row = await db.first(\n      `\n        SELECT p.id, p.transfer_acct FROM v_transactions t\n        LEFT JOIN payees p ON p.id = t.payee\n        WHERE t.id = ?\n      `,\n      [transaction.parent_id]\n    );\n\n    if (row.transfer_acct) {\n      if (row.id !== transaction.payee) {\n        // This child transaction is trying to use a transfer payee,\n        // but the parent is already using a different transfer payee.\n        // This is not allowed, so not only do we do nothing, we clear\n        // the payee of the child transaction to make it clear\n        await db.updateTransaction({ id: transaction.id, payee: null });\n        return { id: transaction.id, payee: null };\n      }\n\n      // The parent has the same transfer payee, so it \"owns\" the\n      // transfer logic\n      return null;\n    }\n  }\n\n  const id = await db.insertTransaction({\n    account: transferredAccount,\n    amount: -transaction.amount,\n    payee: fromPayee,\n    date: transaction.date,\n    transfer_id: transaction.id,\n    notes: transaction.notes || null,\n    cleared: false\n  });\n\n  await db.updateTransaction({ id: transaction.id, transfer_id: id });\n  const categoryCleared = await clearCategory(transaction, transferredAccount);\n\n  return {\n    id: transaction.id,\n    transfer_id: id,\n    ...(categoryCleared ? { category: null } : {})\n  };\n}\n\nexport async function removeTransfer(transaction) {\n  let transferTrans = await db.getTransaction(transaction.transfer_id);\n  if (transferTrans.is_child) {\n    // If it's a child transaction, we don't delete it because that\n    // would invalidate the whole split transaction. Instead of turn\n    // it into a normal transaction\n    await db.updateTransaction({\n      id: transaction.transfer_id,\n      transfer_id: null,\n      payee: null\n    });\n  } else {\n    await db.deleteTransaction({ id: transaction.transfer_id });\n  }\n  await db.updateTransaction({ id: transaction.id, transfer_id: null });\n  return { id: transaction.id, transfer_id: null };\n}\n\nexport async function updateTransfer(transaction, transferredAccount) {\n  let payee = await getPayee(transaction.account);\n\n  await db.updateTransaction({\n    id: transaction.transfer_id,\n    account: transferredAccount,\n    // Make sure to update the payee on the other side in case the\n    // user moved this transaction into another account\n    payee: payee.id,\n    date: transaction.date,\n    notes: transaction.notes,\n    amount: -transaction.amount\n  });\n\n  const categoryCleared = await clearCategory(transaction, transferredAccount);\n  if (categoryCleared) {\n    return { id: transaction.id, category: null };\n  }\n}\n\nexport async function onInsert(transaction) {\n  let transferredAccount = await getTransferredAccount(transaction);\n\n  if (transferredAccount) {\n    return addTransfer(transaction, transferredAccount);\n  }\n}\n\nexport async function onDelete(transaction) {\n  if (transaction.transfer_id) {\n    await removeTransfer(transaction);\n  }\n}\n\nexport async function onUpdate(transaction) {\n  const transferredAccount = await getTransferredAccount(transaction);\n\n  if (transferredAccount && !transaction.transfer_id) {\n    return addTransfer(transaction, transferredAccount);\n  }\n\n  if (!transferredAccount && transaction.transfer_id) {\n    return removeTransfer(transaction);\n  }\n\n  if (transferredAccount && transaction.transfer_id) {\n    return updateTransfer(transaction, transferredAccount);\n  }\n}\n","import * as models from './models';\n\nexport const transactionModel = {\n  ...models.transactionModel,\n\n  toExternal(transactions, idx, payees) {\n    return transactions;\n    // function convert(t, payee) {\n    //   return {\n    //     id: t.id,\n    //     account_id: t.acct,\n    //     amount: t.amount,\n    //     payee_id: payee ? payee.id : null,\n    //     payee: payee ? payee.name : null,\n    //     imported_payee: t.imported_description,\n    //     category_id: t.category,\n    //     date: t.date,\n    //     notes: t.notes,\n    //     imported_id: t.financial_id,\n    //     transfer_id: t.transferred_id,\n    //     cleared: t.cleared\n    //   };\n    // }\n\n    // let splits = getAllSplitTransactions(transactions, idx);\n    // if (splits) {\n    //   let payee =\n    //     splits.parent.description && payees[splits.parent.description];\n\n    //   return {\n    //     ...convert(splits.parent, payee),\n    //     subtransactions: splits.children.map(child => convert(child, payee))\n    //   };\n    // }\n\n    // let transaction = transactions[idx];\n    // let payee = transaction.description && payees[transaction.description];\n    // return convert(transaction, payee);\n  },\n\n  fromExternal(transaction) {\n    let result = {};\n    if ('id' in transaction) {\n      result.id = transaction.id;\n    }\n    if ('account_id' in transaction) {\n      result.acct = transaction.account_id;\n    }\n    if ('amount' in transaction) {\n      result.amount = transaction.amount;\n    }\n    if ('payee_id' in transaction) {\n      result.description = transaction.payee_id;\n    }\n    if ('imported_payee' in transaction) {\n      result.imported_description = transaction.imported_payee;\n    }\n    if ('category_id' in transaction) {\n      result.category = transaction.category_id;\n    }\n    if ('date' in transaction) {\n      result.date = transaction.date;\n    }\n    if ('notes' in transaction) {\n      result.notes = transaction.notes;\n    }\n    if ('imported_id' in transaction) {\n      result.financial_id = transaction.imported_id;\n    }\n    if ('transfer_id' in transaction) {\n      result.transferred_id = transaction.transfer_id;\n    }\n    if ('cleared' in transaction) {\n      result.cleared = transaction.cleared;\n    }\n    return result;\n  }\n};\n\nexport const accountModel = {\n  ...models.accountModel,\n\n  toExternal(account) {\n    return {\n      id: account.id,\n      name: account.name,\n      type: account.type,\n      offbudget: account.offbudget ? true : false,\n      closed: account.closed ? true : false\n    };\n  },\n\n  fromExternal(account) {\n    let result = { ...account };\n    if ('offbudget' in account) {\n      result.offbudget = account.offbudget ? 1 : 0;\n    }\n    if ('closed' in account) {\n      result.closed = account.closed ? 1 : 0;\n    }\n    return result;\n  }\n};\n\nexport const categoryModel = {\n  ...models.categoryModel,\n\n  toExternal(category) {\n    return {\n      id: category.id,\n      name: category.name,\n      is_income: category.is_income ? true : false,\n      group_id: category.cat_group\n    };\n  },\n\n  fromExternal(category) {\n    let { group_id: _, ...result } = category;\n    if ('is_income' in category) {\n      result.is_income = category.is_income ? 1 : 0;\n    }\n    if ('group_id' in category) {\n      result.cat_group = category.group_id;\n    }\n    return result;\n  }\n};\n\nexport const categoryGroupModel = {\n  ...models.categoryGroupModel,\n\n  toExternal(group) {\n    return {\n      id: group.id,\n      name: group.name,\n      is_income: group.is_income ? true : false,\n      categories: group.categories.map(categoryModel.toExternal)\n    };\n  },\n\n  fromExternal(group) {\n    let result = { ...group };\n    if ('is_income' in group) {\n      result.is_income = group.is_income ? 1 : 0;\n    }\n    if ('categories' in group) {\n      result.categories = group.categories.map(categoryModel.fromExternal);\n    }\n    return result;\n  }\n};\n\nexport const payeeModel = {\n  ...models.payeeModel,\n\n  toExternal(payee) {\n    return {\n      id: payee.id,\n      name: payee.name,\n      category: payee.category,\n      transfer_acct: payee.transfer_acct\n    };\n  },\n\n  fromExternal(payee) {\n    // No translation is needed\n    return payee;\n  }\n};\n\nexport const payeeRuleModel = {\n  ...models.payeeRuleModel,\n\n  toExternal(rule) {\n    let { tombstone, ...result } = rule;\n    return result;\n  },\n\n  fromExternal(rule) {\n    return rule;\n  }\n};\n","import { addTransactions } from './accounts/sync';\nimport {\n  transactionModel,\n  accountModel,\n  categoryModel,\n  categoryGroupModel,\n  payeeModel,\n  payeeRuleModel\n} from './api-models';\nimport {\n  ungroupTransactions,\n  updateTransaction,\n  deleteTransaction\n} from '../shared/transactions';\nimport * as db from './db';\nimport * as sheet from './sheet';\nimport * as prefs from './prefs';\nimport * as monthUtils from '../shared/months';\nimport * as update from './update';\nimport * as cloudStorage from './cloud-storage';\nimport { setSyncingMode, batchMessages } from './sync';\nimport { groupById, cleanUUID } from '../shared/util';\nimport { getClock } from './timestamp';\nimport { runMutator } from './mutators';\nimport { integerToAmount } from '../shared/util';\nimport { runQuery as aqlQuery } from './aql/schema/run-query';\nimport q from '../shared/query';\n\nconst { resolveName } = require('./spreadsheet/util');\nconst connection = require('../platform/server/connection');\n\nlet IMPORT_MODE = false;\n\n// This is duplicate from main.js...\nfunction APIError(msg, meta) {\n  return { type: 'APIError', message: msg, meta };\n}\n\n// The API is different in two ways: we never want undo enabled, and\n// we also need to notify the UI manually if stuff has changed (if\n// they are connecting to an already running instance, the UI should\n// update). The wrapper handles that.\nfunction withMutation(handler) {\n  return args => {\n    return runMutator(\n      async () => {\n        let latestTimestamp = getClock().timestamp.toString();\n        let result = await handler(args);\n\n        let rows = await db.all(\n          'SELECT DISTINCT dataset FROM messages_crdt WHERE timestamp > ?',\n          [latestTimestamp]\n        );\n\n        // Only send the sync event if anybody else is connected\n        if (connection.getNumClients() > 1) {\n          connection.send('sync-event', {\n            type: 'success',\n            tables: rows.map(row => row.dataset)\n          });\n        }\n\n        return result;\n      },\n      { undoDisabled: true }\n    );\n  };\n}\n\nlet handlers = {};\n\nasync function validateMonth(month) {\n  if (!month.match(/^\\d{4}-\\d{2}$/)) {\n    throw APIError('Invalid month format, use YYYY-MM: ' + month);\n  }\n\n  if (!IMPORT_MODE) {\n    let { start, end } = await handlers['get-budget-bounds']();\n    let range = monthUtils.range(start, end);\n    if (!range.includes(month)) {\n      throw APIError('No budget exists for month: ' + month);\n    }\n  }\n}\n\nasync function validateExpenseCategory(debug, id) {\n  if (id == null) {\n    throw APIError(`${debug}: category id is required`);\n  }\n\n  let row = await db.first('SELECT is_income FROM categories WHERE id = ?', [\n    id\n  ]);\n\n  if (!row) {\n    throw APIError(`${debug}: category \"${id}\" does not exist`);\n  }\n\n  if (row.is_income !== 0) {\n    throw APIError(`${debug}: category \"${id}\" is not an expense category`);\n  }\n}\n\nlet batchPromise = null;\n\nhandlers['api/batch-budget-start'] = async function() {\n  if (batchPromise) {\n    throw APIError('Cannot start a batch process: batch already started');\n  }\n\n  // If we are importing, all we need to do is start a raw database\n  // transaction. Updating spreadsheet cells doesn't go through the\n  // syncing layer in that case.\n  if (IMPORT_MODE) {\n    db.asyncTransaction(() => {\n      return new Promise((resolve, reject) => {\n        batchPromise = { resolve, reject };\n      });\n    });\n  } else {\n    batchMessages(() => {\n      return new Promise((resolve, reject) => {\n        batchPromise = { resolve, reject };\n      });\n    });\n  }\n};\n\nhandlers['api/batch-budget-end'] = async function() {\n  if (!batchPromise) {\n    throw APIError('Cannot end a batch process: no batch started');\n  }\n\n  batchPromise.resolve();\n  batchPromise = null;\n};\n\nhandlers['api/load-budget'] = async function({ id }) {\n  let { id: currentId } = prefs.getPrefs() || {};\n\n  if (currentId !== id) {\n    connection.send('start-load');\n    let { error } = await handlers['load-budget']({ id });\n\n    if (!error) {\n      connection.send('finish-load');\n    } else {\n      connection.send('show-budgets');\n\n      if (error === 'out-of-sync-migrations' || error === 'out-of-sync-data') {\n        throw new Error(\n          'This budget cannot be loaded with this version of the app.'\n        );\n      } else if (error === 'budget-not-found') {\n        throw new Error(\n          'Budget \"' +\n            id +\n            '\" not found. Check the id of your budget in the \"Advanced\" section of the settings page.'\n        );\n      } else {\n        throw new Error('We had an unknown problem opening \"' + id + '\".');\n      }\n    }\n  }\n};\n\nhandlers['api/start-import'] = async function({ budgetName }) {\n  // Notify UI to close budget\n  await handlers['close-budget']();\n\n  // Create the budget\n  await handlers['create-budget']({ budgetName, avoidUpload: true });\n\n  // Clear out the default expense categories\n  await db.runQuery('DELETE FROM categories WHERE is_income = 0');\n  await db.runQuery('DELETE FROM category_groups WHERE is_income = 0');\n\n  // Turn syncing off\n  setSyncingMode('import');\n\n  connection.send('start-import');\n  IMPORT_MODE = true;\n};\n\nhandlers['api/finish-import'] = async function() {\n  sheet.get().markCacheDirty();\n\n  // We always need to fully reload the app. Importing doesn't touch\n  // the spreadsheet, but we can't just recreate the spreadsheet\n  // either; there is other internal state that isn't created\n  let { id } = prefs.getPrefs();\n  await handlers['close-budget']();\n  await handlers['load-budget']({ id });\n\n  await handlers['get-budget-bounds']();\n  await sheet.waitOnSpreadsheet();\n\n  await cloudStorage.upload().catch(err => {});\n\n  connection.send('finish-import');\n  IMPORT_MODE = false;\n};\n\nhandlers['api/abort-import'] = async function() {\n  if (IMPORT_MODE) {\n    let { id } = prefs.getPrefs();\n\n    await handlers['close-budget']();\n    await handlers['delete-budget']({ id });\n    connection.send('show-budgets');\n  }\n\n  IMPORT_MODE = false;\n};\n\nhandlers['api/query'] = async function({ query }) {\n  return aqlQuery(query);\n};\n\nhandlers['api/budget-months'] = async function() {\n  let { start, end } = await handlers['get-budget-bounds']();\n  return monthUtils.range(start, end);\n};\n\nhandlers['api/budget-month'] = async function({ month }) {\n  await validateMonth(month);\n\n  let groups = await db.getCategoriesGrouped();\n  let sheetName = monthUtils.sheetForMonth(month);\n\n  function value(name) {\n    let v = sheet.get().getCellValue(sheetName, name);\n    return v === '' ? 0 : v;\n  }\n\n  // This is duplicated from main.js because the return format is\n  // different (for now)\n  return {\n    month,\n    incomeAvailable: value('available-funds'),\n    lastMonthOverspent: value('last-month-overspent'),\n    forNextMonth: value('buffered'),\n    totalBudgeted: value('total-budgeted'),\n    toBudget: value('to-budget'),\n\n    fromLastMonth: value('from-last-month'),\n    totalIncome: value('total-income'),\n    totalSpent: value('total-spent'),\n    totalBalance: value('total-leftover'),\n\n    categoryGroups: groups.map(group => {\n      if (group.is_income) {\n        return {\n          ...categoryGroupModel.toExternal(group),\n          received: value('total-income'),\n\n          categories: group.categories.map(cat => ({\n            ...categoryModel.toExternal(cat),\n            received: value(`sum-amount-${cat.id}`)\n          }))\n        };\n      }\n\n      return {\n        ...categoryGroupModel.toExternal(group),\n        budgeted: value(`group-budget-${group.id}`),\n        spent: value(`group-sum-amount-${group.id}`),\n        balance: value(`group-leftover-${group.id}`),\n\n        categories: group.categories.map(cat => ({\n          ...categoryModel.toExternal(cat),\n          budgeted: value(`budget-${cat.id}`),\n          spent: value(`sum-amount-${cat.id}`),\n          balance: value(`leftover-${cat.id}`),\n          carryover: value(`carryover-${cat.id}`)\n        }))\n      };\n    })\n  };\n};\n\nhandlers['api/budget-set-amount'] = withMutation(async function({\n  month,\n  categoryId,\n  amount\n}) {\n  return handlers['budget/budget-amount']({\n    month,\n    category: categoryId,\n    amount\n  });\n});\n\nhandlers['api/budget-set-carryover'] = withMutation(async function({\n  month,\n  categoryId,\n  flag\n}) {\n  await validateMonth(month);\n  await validateExpenseCategory('budget-set-carryover', categoryId);\n  return handlers['budget/set-carryover']({\n    startMonth: month,\n    category: categoryId,\n    flag\n  });\n});\n\nhandlers['api/transactions-export'] = async function({\n  transactions,\n  categoryGroups,\n  payees\n}) {\n  return handlers['transactions-export']({\n    transactions,\n    categoryGroups,\n    payees\n  });\n};\n\nhandlers['api/transactions-import'] = withMutation(async function({\n  accountId,\n  transactions\n}) {\n  return handlers['transactions-import']({ accountId, transactions });\n});\n\nhandlers['api/transactions-add'] = withMutation(async function({\n  accountId,\n  transactions\n}) {\n  await addTransactions(accountId, transactions, { runTransfers: false });\n  return 'ok';\n});\n\nhandlers['api/transactions-get'] = async function({\n  accountId,\n  startDate,\n  endDate\n}) {\n  let { data } = await aqlQuery(\n    q('transactions')\n      .filter({\n        $and: [\n          accountId && { account: accountId },\n          startDate && { date: { $gte: startDate } },\n          endDate && { date: { $lte: endDate } }\n        ].filter(Boolean)\n      })\n      .select('*')\n      .options({ splits: 'grouped' })\n  );\n  return data;\n};\n\nhandlers['api/transactions-filter'] = async function({ text, accountId }) {\n  throw new Error('`filterTransactions` is deprecated, use `runQuery` instead');\n};\n\nhandlers['api/transaction-update'] = withMutation(async function({\n  id,\n  fields\n}) {\n  let { data } = await aqlQuery(\n    q('transactions')\n      .filter({ id })\n      .select('*')\n      .options({ splits: 'grouped' })\n  );\n  let transactions = ungroupTransactions(data);\n\n  if (transactions.length === 0) {\n    return [];\n  }\n\n  let { diff } = updateTransaction(transactions, fields);\n  return handlers['transactions-batch-update'](diff);\n});\n\nhandlers['api/transaction-delete'] = withMutation(async function({ id }) {\n  let { data } = await aqlQuery(\n    q('transactions')\n      .filter({ id })\n      .select('*')\n      .options({ splits: 'grouped' })\n  );\n  let transactions = ungroupTransactions(data);\n\n  if (transactions.length === 0) {\n    return [];\n  }\n\n  let { diff } = deleteTransaction(transactions, id);\n  return handlers['transactions-batch-update'](diff);\n});\n\nhandlers['api/accounts-get'] = async function() {\n  let accounts = await db.getAccounts();\n  return accounts.map(account => accountModel.toExternal(account));\n};\n\nhandlers['api/account-create'] = withMutation(async function({\n  account,\n  initialBalance = null\n}) {\n  return handlers['account-create']({\n    name: account.name,\n    type: account.type,\n    offBudget: account.offbudget,\n    closed: account.closed,\n    // Current the API expects an amount but it really should expect\n    // an integer\n    balance: initialBalance != null ? integerToAmount(initialBalance) : null\n  });\n});\n\nhandlers['api/account-update'] = withMutation(async function({ id, fields }) {\n  return db.updateAccount({ id, ...accountModel.fromExternal(fields) });\n});\n\nhandlers['api/account-close'] = withMutation(async function({\n  id,\n  transferAccountId,\n  transferCategoryId\n}) {\n  return handlers['account-close']({\n    id,\n    transferAccountId,\n    categoryId: transferCategoryId\n  });\n});\n\nhandlers['api/account-reopen'] = withMutation(async function({ id }) {\n  return handlers['account-reopen']({ id });\n});\n\nhandlers['api/account-delete'] = withMutation(async function({ id }) {\n  return handlers['account-close']({ id, forced: true });\n});\n\nhandlers['api/categories-get'] = async function({ grouped } = {}) {\n  let result = await handlers['get-categories']();\n  return grouped\n    ? result.grouped.map(categoryGroupModel.toExternal)\n    : result.list.map(categoryModel.toExternal);\n};\n\nhandlers['api/category-group-create'] = withMutation(async function({ group }) {\n  return handlers['category-group-create']({ name: group.name });\n});\n\nhandlers['api/category-group-update'] = withMutation(async function({\n  id,\n  fields\n}) {\n  return handlers['category-group-update']({\n    id,\n    ...categoryGroupModel.fromExternal(fields)\n  });\n});\n\nhandlers['api/category-group-delete'] = withMutation(async function({\n  id,\n  transferCategoryId\n}) {\n  return handlers['category-group-delete']({\n    id,\n    transferId: transferCategoryId\n  });\n});\n\nhandlers['api/category-create'] = withMutation(async function({ category }) {\n  return handlers['category-create']({\n    name: category.name,\n    groupId: category.group_id,\n    isIncome: category.is_income\n  });\n});\n\nhandlers['api/category-update'] = withMutation(async function({ id, fields }) {\n  return handlers['category-update']({\n    id,\n    ...categoryModel.fromExternal(fields)\n  });\n});\n\nhandlers['api/category-delete'] = withMutation(async function({\n  id,\n  transferCategoryId\n}) {\n  return handlers['category-delete']({\n    id,\n    transferId: transferCategoryId\n  });\n});\n\nhandlers['api/payees-get'] = async function() {\n  let payees = await handlers['payees-get']();\n  return payees.map(payeeModel.toExternal);\n};\n\nhandlers['api/payee-create'] = withMutation(async function({ payee }) {\n  return handlers['payee-create']({ name: payee.name });\n});\n\nhandlers['api/payee-update'] = withMutation(async function({ id, fields }) {\n  return handlers['payees-batch-change']({\n    updated: [{ id, ...payeeModel.fromExternal(fields) }]\n  });\n});\n\nhandlers['api/payee-delete'] = withMutation(async function({ id }) {\n  return handlers['payees-batch-change']({ deleted: [{ id }] });\n});\n\nhandlers['api/payee-rules-get'] = async function({ payeeId }) {\n  let rules = await handlers['payees-get-rules']({ id: payeeId });\n  return rules.map(payeeRuleModel.toExternal);\n};\n\nhandlers['api/payee-rule-create'] = withMutation(async function({\n  payee_id,\n  rule\n}) {\n  return handlers['payees-add-rule']({\n    payee_id,\n    type: rule.type,\n    value: rule.value || null\n  });\n});\n\nhandlers['api/payee-rule-update'] = withMutation(async function({\n  id,\n  fields\n}) {\n  return handlers['payees-update-rule']({\n    id,\n    ...payeeRuleModel.fromExternal(fields)\n  });\n});\n\nhandlers['api/payee-rule-delete'] = withMutation(async function({ id }) {\n  return handlers['payees-delete-rule']({ id });\n});\n\nexport default function(serverHandlers) {\n  handlers = Object.assign({}, serverHandlers, handlers);\n  return handlers;\n}\n","import mitt from 'mitt';\nimport { captureException } from '../platform/exceptions';\n\n// This is a simple helper abstraction for defining methods exposed to\n// the client. It doesn't do much, but checks for naming conflicts and\n// makes it cleaner to combine methods. We call a group of related\n// methods an \"app\".\n\nclass App {\n  constructor() {\n    this.handlers = {};\n    this.services = [];\n    this.events = mitt();\n    this.unlistenServices = [];\n  }\n\n  method(name, func) {\n    if (this.handlers[name] != null) {\n      throw new Error(\n        'Conflicting method name, names must be globally unique: ' + name\n      );\n    }\n    this.handlers[name] = func;\n  }\n\n  service(func) {\n    this.services.push(func);\n  }\n\n  combine(...apps) {\n    for (let app of apps) {\n      Object.keys(app.handlers).forEach(name => {\n        this.method(name, app.handlers[name]);\n      });\n\n      app.services.forEach(service => {\n        this.service(service);\n      });\n\n      for (let [name, listeners] of app.events.all.entries()) {\n        for (let listener of listeners) {\n          this.events.on(name, listener);\n        }\n      }\n    }\n  }\n\n  startServices() {\n    if (this.unlistenServices.length > 0) {\n      captureException(\n        new Error(\n          'App: startServices called while services are already running'\n        )\n      );\n    }\n    this.unlistenServices = this.services.map(service => service());\n  }\n\n  stopServices() {\n    this.unlistenServices.forEach(unlisten => {\n      if (unlisten) {\n        unlisten();\n      }\n    });\n    this.unlistenServices = [];\n  }\n}\n\nexport function createApp() {\n  return new App();\n}\n","let _uid = 0;\nfunction resetUid() {\n  _uid = 0;\n}\n\nfunction uid(tableName) {\n  _uid++;\n  return tableName + _uid;\n}\n\nclass CompileError extends Error {}\n\nfunction nativeDateToInt(date) {\n  let pad = x => (x < 10 ? '0' : '') + x;\n  return date.getFullYear() + pad(date.getMonth() + 1) + pad(date.getDate());\n}\n\nfunction dateToInt(date) {\n  return parseInt(date.replace(/-/g, ''));\n}\n\nexport function addTombstone(schema, tableName, tableId, whereStr) {\n  let hasTombstone = schema[tableName].tombstone != null;\n  return hasTombstone ? `${whereStr} AND ${tableId}.tombstone = 0` : whereStr;\n}\n\nfunction popPath(path) {\n  let parts = path.split('.');\n  return { path: parts.slice(0, -1).join('.'), field: parts[parts.length - 1] };\n}\n\nfunction isKeyword(str) {\n  return str === 'group';\n}\n\nexport function quoteAlias(alias) {\n  return alias.indexOf('.') === -1 && !isKeyword(alias) ? alias : `\"${alias}\"`;\n}\n\nfunction typed(value, type, { literal = false } = {}) {\n  return { value, type, literal };\n}\n\nfunction getFieldDescription(schema, tableName, field) {\n  if (schema[tableName] == null) {\n    throw new CompileError(`Table \"${tableName}\" does not exist in the schema`);\n  }\n\n  let fieldDesc = schema[tableName][field];\n  if (fieldDesc == null) {\n    throw new CompileError(\n      `Field \"${field}\" does not exist in table \"${tableName}\"`\n    );\n  }\n  return fieldDesc;\n}\n\nfunction makePath(state, path) {\n  let { schema, paths } = state;\n\n  let parts = path.split('.');\n  if (parts.length < 2) {\n    throw new CompileError('Invalid path: ' + path);\n  }\n\n  let initialTable = parts[0];\n\n  let tableName = parts.slice(1).reduce((tableName, field) => {\n    let table = schema[tableName];\n\n    if (table == null) {\n      throw new CompileError(`Path error: ${tableName} table does not exist`);\n    }\n\n    if (!table[field] || table[field].ref == null) {\n      throw new CompileError(\n        `Field not joinable on table ${tableName}: \"${field}\"`\n      );\n    }\n\n    return table[field].ref;\n  }, initialTable);\n\n  let joinTable;\n  let parentParts = parts.slice(0, -1);\n  if (parentParts.length === 1) {\n    joinTable = parentParts[0];\n  } else {\n    let parentPath = parentParts.join('.');\n    let parentDesc = paths.get(parentPath);\n    if (!parentDesc) {\n      throw new CompileError('Path does not exist: ' + parentPath);\n    }\n    joinTable = parentDesc.tableId;\n  }\n\n  return {\n    tableName: tableName,\n    tableId: uid(tableName),\n    joinField: parts[parts.length - 1],\n    joinTable\n  };\n}\n\nfunction resolvePath(state, path) {\n  let paths = path.split('.');\n  let tableId;\n\n  paths = paths.reduce(\n    (acc, name) => {\n      let fullName = acc.context + '.' + name;\n      return {\n        context: fullName,\n        path: [...acc.path, fullName]\n      };\n    },\n    { context: state.implicitTableName, path: [] }\n  ).path;\n\n  paths.forEach(path => {\n    if (!state.paths.get(path)) {\n      state.paths.set(path, makePath(state, path));\n    }\n  });\n\n  let pathInfo = state.paths.get(paths[paths.length - 1]);\n  return pathInfo;\n}\n\nfunction transformField(state, name) {\n  if (typeof name !== 'string') {\n    throw new CompileError('Invalid field name, must be a string');\n  }\n\n  let { path, field } = popPath(name);\n\n  let pathInfo;\n  if (path === '') {\n    pathInfo = {\n      tableName: state.implicitTableName,\n      tableId: state.implicitTableId\n    };\n  } else {\n    pathInfo = resolvePath(state, path);\n  }\n\n  let fieldDesc = getFieldDescription(state.schema, pathInfo.tableName, field);\n\n  // If this is a field that references an item in another table, that\n  // item could have been deleted. If that's the case, we want to\n  // return `null` instead of an id pointing to a deleted item. This\n  // converts an id reference into a path that pulls the id through a\n  // table join which will filter out dead items, resulting in a\n  // `null` id if the item is deleted\n  if (\n    state.validateRefs &&\n    fieldDesc.ref &&\n    fieldDesc.type === 'id' &&\n    field !== 'id'\n  ) {\n    let refPath = state.implicitTableName + '.' + name;\n    let refPathInfo = state.paths.get(refPath);\n\n    if (!refPathInfo) {\n      refPathInfo = makePath(state, refPath);\n      refPathInfo.noMapping = true;\n      state.paths.set(refPath, refPathInfo);\n    }\n\n    field = 'id';\n    pathInfo = refPathInfo;\n  }\n\n  let fieldStr = pathInfo.tableId + '.' + field;\n  return typed(fieldStr, fieldDesc.type);\n}\n\nfunction parseDate(str) {\n  let m = str.match(/^(\\d{4}-\\d{2}-\\d{2})$/);\n  if (m) {\n    return typed(dateToInt(m[1]), 'date', { literal: true });\n  }\n  return null;\n}\n\nfunction parseMonth(str) {\n  let m = str.match(/^(\\d{4}-\\d{2})$/);\n  if (m) {\n    return typed(dateToInt(m[1]), 'date', { literal: true });\n  }\n  return null;\n}\n\nfunction parseYear(str) {\n  let m = str.match(/^(\\d{4})$/);\n  if (m) {\n    return typed(dateToInt(m[1]), 'date', { literal: true });\n  }\n  return null;\n}\n\nfunction badDateFormat(str, type) {\n  throw new CompileError(`Bad ${type} format: ${str}`);\n}\n\nfunction inferParam(param, type) {\n  let existingType = param.paramType;\n  if (existingType) {\n    let casts = {\n      date: ['string'],\n      'date-month': ['date'],\n      'date-year': ['date', 'date-month'],\n      id: ['string'],\n      float: ['integer']\n    };\n\n    if (\n      existingType !== type &&\n      (!casts[type] || !casts[type].includes(existingType))\n    ) {\n      throw new Error(\n        `Parameter \"${name}\" can't convert to ${type} (already inferred as ${existingType})`\n      );\n    }\n  } else {\n    param.paramType = type;\n  }\n}\n\nfunction castInput(state, expr, type) {\n  if (expr.type === type) {\n    return expr;\n  } else if (expr.type === 'param') {\n    inferParam(expr, type);\n    return typed(expr.value, type);\n  } else if (expr.type === 'null') {\n    if (!expr.literal) {\n      throw new CompileError(\"A non-literal null doesn't make sense\");\n    }\n\n    if (type === 'boolean') {\n      return typed(0, 'boolean', { literal: true });\n    }\n    return expr;\n  }\n\n  // These are all things that can be safely casted automatically\n  if (type === 'date') {\n    if (expr.type === 'string') {\n      if (expr.literal) {\n        return parseDate(expr.value) || badDateFormat(expr.value, 'date');\n      } else {\n        throw new CompileError(\n          'Casting string fields to dates is not supported'\n        );\n      }\n    }\n\n    throw new CompileError(`Can't cast ${expr.type} to date`);\n  } else if (type === 'date-month') {\n    let expr2;\n    if (expr.type === 'date') {\n      expr2 = expr;\n    } else if (expr.type === 'string' || expr.type === 'any') {\n      expr2 =\n        parseMonth(expr.value) ||\n        parseDate(expr.value) ||\n        badDateFormat(expr.value, 'date-month');\n    } else {\n      throw new CompileError(`Can't cast ${expr.type} to date-month`);\n    }\n\n    if (expr2.literal) {\n      return typed(\n        dateToInt(expr2.value.toString().slice(0, 6)),\n        'date-month',\n        { literal: true }\n      );\n    } else {\n      return typed(\n        `CAST(SUBSTR(${expr2.value}, 1, 6) AS integer)`,\n        'date-month'\n      );\n    }\n  } else if (type === 'date-year') {\n    let expr2;\n    if (expr.type === 'date' || expr.type === 'date-month') {\n      expr2 = expr;\n    } else if (expr.type === 'string') {\n      expr2 =\n        parseYear(expr.value) ||\n        parseMonth(expr.value) ||\n        parseDate(expr.value) ||\n        badDateFormat(expr.value, 'date-year');\n    } else {\n      throw new CompileError(`Can't cast ${expr.type} to date-year`);\n    }\n\n    if (expr2.literal) {\n      return typed(dateToInt(expr2.value.toString().slice(0, 4)), 'date-year', {\n        literal: true\n      });\n    } else {\n      return typed(\n        `CAST(SUBSTR(${expr2.value}, 1, 4) AS integer)`,\n        'date-year'\n      );\n    }\n  } else if (type === 'id') {\n    if (expr.type === 'string') {\n      return typed(expr.value, 'id', { literal: expr.literal });\n    }\n  } else if (type === 'float') {\n    if (expr.type === 'integer') {\n      return typed(expr.value, 'float', { literal: expr.literal });\n    }\n  }\n\n  if (expr.type === 'any') {\n    return typed(expr.value, type, { literal: expr.literal });\n  }\n\n  throw new CompileError(`Can't convert ${expr.type} to ${type}`);\n}\n\n// TODO: remove state from these functions\nfunction val(state, expr, type) {\n  let castedExpr = expr;\n\n  // Cast the type if necessary\n  if (type) {\n    castedExpr = castInput(state, expr, type);\n  }\n\n  if (castedExpr.literal) {\n    if (castedExpr.type === 'id') {\n      return `'${castedExpr.value}'`;\n    } else if (castedExpr.type === 'string') {\n      // Escape quotes\n      let value = castedExpr.value.replace(/'/g, \"''\");\n      return `'${value}'`;\n    }\n  }\n\n  return castedExpr.value;\n}\n\nfunction valArray(state, arr, types) {\n  return arr.map((value, idx) => val(state, value, types ? types[idx] : null));\n}\n\nfunction validateArgLength(arr, min, max) {\n  if (max == null) {\n    max = min;\n  }\n\n  if (min != null && arr.length < min) {\n    throw new CompileError('Too few arguments');\n  }\n  if (max != null && arr.length > max) {\n    throw new CompileError('Too many arguments');\n  }\n}\n\n//// Nice errors\n\nfunction saveStack(type, func) {\n  return (state, ...args) => {\n    if (state == null || state.compileStack == null) {\n      throw new CompileError(\n        'This function cannot track error data. ' +\n          'It needs to accept the compiler state as the first argument.'\n      );\n    }\n\n    state.compileStack.push({ type, args });\n    let ret = func(state, ...args);\n    state.compileStack.pop();\n    return ret;\n  };\n}\n\nfunction prettyValue(value) {\n  if (typeof value === 'string') {\n    return value;\n  } else if (value === undefined) {\n    return 'undefined';\n  }\n\n  let str = JSON.stringify(value);\n  if (str.length > 70) {\n    let expanded = JSON.stringify(value, null, 2);\n    return expanded.split('\\n').join('\\n  ');\n  }\n  return str;\n}\n\nfunction getCompileError(error, stack) {\n  if (stack.length === 0) {\n    return error;\n  }\n\n  let stackStr = stack\n    .slice(1)\n    .reverse()\n    .map(entry => {\n      switch (entry.type) {\n        case 'expr':\n        case 'function':\n          return prettyValue(entry.args[0]);\n        case 'op': {\n          let [fieldRef, opData] = entry.args;\n          return prettyValue({ [fieldRef]: opData });\n        }\n        case 'value':\n          return prettyValue(entry.value);\n        default:\n          return '';\n      }\n    })\n    .map(str => '\\n  ' + str)\n    .join('');\n\n  const rootMethod = stack[0].type;\n  const methodArgs = stack[0].args[0];\n  stackStr += `\\n  ${rootMethod}(${prettyValue(\n    methodArgs.length === 1 ? methodArgs[0] : methodArgs\n  )})`;\n\n  // In production, hide internal stack traces\n  if (process.env.NODE_ENV === 'production') {\n    const err = new CompileError();\n    err.message = `${error.message}\\n\\nExpression stack:` + stackStr;\n    err.stack = null;\n    return err;\n  }\n\n  error.message = `${error.message}\\n\\nExpression stack:` + stackStr;\n  return error;\n}\n\n//// Compiler\n\nfunction compileLiteral(value) {\n  if (value === undefined) {\n    throw new CompileError('`undefined` is not a valid query value');\n  } else if (value === null) {\n    return typed('NULL', 'null', { literal: true });\n  } else if (value instanceof Date) {\n    return typed(nativeDateToInt(value), 'date', { literal: true });\n  } else if (typeof value === 'string') {\n    // Allow user to escape $, and quote the string to make it a\n    // string literal in the output\n    value = value.replace(/\\\\\\$/g, '$');\n    return typed(value, 'string', { literal: true });\n  } else if (typeof value === 'boolean') {\n    return typed(value ? 1 : 0, 'boolean', { literal: true });\n  } else if (typeof value === 'number') {\n    return typed(value, (value | 0) === value ? 'integer' : 'float', {\n      literal: true\n    });\n  } else if (Array.isArray(value)) {\n    return typed(value, 'array', { literal: true });\n  } else {\n    throw new CompileError(\n      'Unsupported type of expression: ' + JSON.stringify(value)\n    );\n  }\n}\n\nconst compileExpr = saveStack('expr', (state, expr) => {\n  if (typeof expr === 'string') {\n    // Field reference\n    if (expr[0] === '$') {\n      let fieldRef = expr === '$' ? state.implicitField : expr.slice(1);\n\n      if (fieldRef == null || fieldRef === '') {\n        throw new CompileError('Invalid field reference: ' + expr);\n      }\n\n      return transformField(state, fieldRef);\n    }\n\n    // Named parameter\n    if (expr[0] === ':') {\n      let param = { value: '?', type: 'param', paramName: expr.slice(1) };\n      state.namedParameters.push(param);\n      return param;\n    }\n  }\n\n  if (expr !== null) {\n    if (Array.isArray(expr)) {\n      return compileLiteral(expr);\n    } else if (\n      typeof expr === 'object' &&\n      Object.keys(expr).find(k => k[0] === '$')\n    ) {\n      // It's a function call\n      return compileFunction(state, expr);\n    }\n  }\n\n  return compileLiteral(expr);\n});\n\nfunction assertType(name, data, acceptedTypes) {\n  if (acceptedTypes.indexOf(data.type) === -1) {\n    throw new CompileError(\n      `Invalid type of expression to ${name}, must be one of ${JSON.stringify(\n        acceptedTypes\n      )}: ${JSON.stringify(data.value)}`\n    );\n  }\n}\n\nfunction assertArgLength(name, args, len) {\n  if (args.length !== len) {\n    throw new CompileError(\n      `Invalid number of args to ${name}: expected ${len} but received ${args.length}`\n    )();\n  }\n}\n\nconst compileFunction = saveStack('function', (state, func) => {\n  let [name] = Object.keys(func);\n  let argExprs = func[name];\n  if (!Array.isArray(argExprs)) {\n    argExprs = [argExprs];\n  }\n\n  if (name[0] !== '$') {\n    throw new CompileError(\n      `Unknown property \"${name}\". Did you mean to call a function? Try prefixing it with $`\n    );\n  }\n\n  let args = argExprs;\n  // `$condition` is a special-case where it will be evaluated later\n  if (name !== '$condition') {\n    args = argExprs.map(arg => compileExpr(state, arg));\n  }\n\n  switch (name) {\n    // aggregate functions\n    case '$sum': {\n      validateArgLength(args, 1);\n      let [arg1] = valArray(state, args, ['float']);\n      return typed(`SUM(${arg1})`, args[0].type);\n    }\n\n    case '$sumOver': {\n      let [arg1] = valArray(state, args, ['float']);\n      let order = state.orders\n        ? 'ORDER BY ' + compileOrderBy(state, state.orders)\n        : '';\n\n      return typed(\n        `(SUM(${arg1}) OVER (${order} ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING))`,\n        args[0].type\n      );\n    }\n\n    case '$count': {\n      validateArgLength(args, 1);\n      let [arg1] = valArray(state, args);\n      return typed(`COUNT(${arg1})`, 'integer');\n    }\n\n    // string functions\n    case '$substr': {\n      validateArgLength(args, 2, 3);\n      let [arg1, arg2, arg3] = valArray(state, args, [\n        'string',\n        'integer',\n        'integer'\n      ]);\n      return typed(`SUBSTR(${arg1}, ${arg2}, ${arg3})`, 'string');\n    }\n    case '$lower': {\n      validateArgLength(args, 1);\n      let [arg1] = valArray(state, args, ['string']);\n      return typed(`LOWER(${arg1})`, 'string');\n    }\n\n    // integer/float functions\n    case '$neg': {\n      validateArgLength(args, 1);\n      let [arg1] = valArray(state, args, ['float']);\n      return typed(`(-${val(state, args[0])})`, args[0].type);\n    }\n    case '$abs': {\n      validateArgLength(args, 1);\n      let [arg1] = valArray(state, args, ['float']);\n      return typed(`ABS(${val(state, args[0])})`, args[0].type);\n    }\n    case '$idiv': {\n      validateArgLength(args, 2);\n      let [arg1, arg2] = valArray(state, args, ['integer', 'integer']);\n      return typed(\n        `(${val(state, args[0])} / ${val(state, args[1])})`,\n        args[0].type\n      );\n    }\n\n    // date functions\n    case '$month': {\n      validateArgLength(args, 1);\n      return castInput(state, args[0], 'date-month');\n    }\n    case '$year': {\n      validateArgLength(args, 1);\n      return castInput(state, args[0], 'date-year');\n    }\n\n    // various functions\n    case '$condition':\n      validateArgLength(args, 1);\n      let conds = compileConditions(state, args[0]);\n      return typed(conds.join(' AND '), 'boolean');\n\n    case '$nocase':\n      validateArgLength(args, 1);\n      let [arg1] = valArray(state, args, ['string']);\n      return typed(`${arg1} COLLATE NOCASE`, args[0].type);\n\n    case '$literal': {\n      validateArgLength(args, 1);\n      if (!args[0].literal) {\n        throw new CompileError('Literal not passed to $literal');\n      }\n      return args[0];\n    }\n    default:\n      throw new CompileError(`Unknown function: ${name}`);\n  }\n});\n\nconst compileOp = saveStack('op', (state, fieldRef, opData) => {\n  let { $transform, ...opExpr } = opData;\n  let [op] = Object.keys(opExpr);\n\n  let rhs = compileExpr(state, opData[op]);\n\n  let lhs;\n  if ($transform) {\n    lhs = compileFunction(\n      { ...state, implicitField: fieldRef },\n      typeof $transform === 'string' ? { [$transform]: '$' } : $transform\n    );\n  } else {\n    lhs = compileExpr(state, '$' + fieldRef);\n  }\n\n  switch (op) {\n    case '$gte': {\n      let [left, right] = valArray(state, [lhs, rhs], [null, lhs.type]);\n      return `${left} >= ${right}`;\n    }\n    case '$lte': {\n      let [left, right] = valArray(state, [lhs, rhs], [null, lhs.type]);\n      return `${left} <= ${right}`;\n    }\n    case '$gt': {\n      let [left, right] = valArray(state, [lhs, rhs], [null, lhs.type]);\n      return `${left} > ${right}`;\n    }\n    case '$lt': {\n      let [left, right] = valArray(state, [lhs, rhs], [null, lhs.type]);\n      return `${left} < ${right}`;\n    }\n    case '$eq': {\n      if (castInput(state, rhs, lhs.type).type === 'null') {\n        return `${val(state, lhs)} IS NULL`;\n      }\n\n      let [left, right] = valArray(state, [lhs, rhs], [null, lhs.type]);\n\n      if (rhs.type === 'param') {\n        let orders = state.namedParameters.map(param => {\n          return param === rhs || param === lhs ? [param, { ...param }] : param;\n        });\n        state.namedParameters = [].concat.apply([], orders);\n\n        return `CASE\n          WHEN ${left} IS NULL THEN ${right} IS NULL\n          ELSE ${left} = ${right}\n        END`;\n      }\n\n      return `${left} = ${right}`;\n    }\n    case '$oneof': {\n      let [left, right] = valArray(state, [lhs, rhs], [null, 'array']);\n      // Dedupe the ids\n      let ids = [...new Set(right)];\n      return `${left} IN (` + ids.map(id => `'${id}'`).join(',') + ')';\n    }\n    case '$like': {\n      let [left, right] = valArray(state, [lhs, rhs], ['string', 'string']);\n      return `${left} LIKE ${right}`;\n    }\n    default:\n      throw new CompileError(`Unknown operator: ${op}`);\n  }\n});\n\nfunction compileConditions(state, conds) {\n  if (!Array.isArray(conds)) {\n    // Convert the object form `{foo: 1, bar:2}` into the array form\n    // `[{foo: 1}, {bar:2}]`\n    conds = Object.entries(conds).map(cond => {\n      return { [cond[0]]: cond[1] };\n    });\n  }\n\n  return conds.filter(Boolean).reduce((res, condsObj) => {\n    let compiled = Object.entries(condsObj)\n      .map(([field, cond]) => {\n        // Allow a falsy value in the lhs of $and and $or to allow for\n        // quick forms like `$or: amount != 0 && ...`\n        if (field === '$and') {\n          if (!cond) {\n            return null;\n          }\n          return compileAnd(state, cond);\n        } else if (field === '$or') {\n          if (!cond) {\n            return null;\n          }\n          return compileOr(state, cond);\n        }\n\n        if (\n          typeof cond === 'string' ||\n          typeof cond === 'number' ||\n          typeof cond === 'boolean' ||\n          cond instanceof Date ||\n          cond == null\n        ) {\n          return compileOp(state, field, { $eq: cond });\n        }\n\n        if (Array.isArray(cond)) {\n          // An array of conditions for a field is implicitly an `and`\n          return cond.map(c => compileOp(state, field, c)).join(' AND ');\n        }\n        return compileOp(state, field, cond);\n      })\n      .filter(Boolean);\n\n    return [...res, ...compiled];\n  }, []);\n}\n\nfunction compileOr(state, conds) {\n  // Same as above\n  if (!conds) {\n    return '0';\n  }\n  let res = compileConditions(state, conds);\n  if (res.length === 0) {\n    return '0';\n  }\n  return '(' + res.join('\\n  OR ') + ')';\n}\n\nfunction compileAnd(state, conds) {\n  // Same as above\n  if (!conds) {\n    return '1';\n  }\n  let res = compileConditions(state, conds);\n  if (res.length === 0) {\n    return '1';\n  }\n  return '(' + res.join('\\n  AND ') + ')';\n}\n\nconst compileWhere = saveStack('filter', (state, conds) => {\n  return compileAnd(state, conds);\n});\n\nfunction compileJoins(state, tableRef, internalTableFilters) {\n  let joins = [];\n  state.paths.forEach((desc, path) => {\n    let {\n      tableName,\n      tableId,\n      joinField,\n      joinTable,\n      noMapping\n    } = state.paths.get(path);\n\n    let on = `${tableId}.id = ${tableRef(joinTable)}.${quoteAlias(joinField)}`;\n\n    let filters = internalTableFilters(tableName);\n    if (filters.length > 0) {\n      on +=\n        ' AND ' +\n        compileAnd(\n          { ...state, implicitTableName: tableName, implicitTableId: tableId },\n          filters\n        );\n    }\n\n    joins.push(\n      `LEFT JOIN ${\n        noMapping ? tableName : tableRef(tableName, true)\n      } ${tableId} ON ${addTombstone(state.schema, tableName, tableId, on)}`\n    );\n\n    if (state.dependencies.indexOf(tableName) === -1) {\n      state.dependencies.push(tableName);\n    }\n  });\n  return joins.join('\\n');\n}\n\nfunction expandStar(state, expr) {\n  let path;\n  let pathInfo;\n  if (expr === '*') {\n    pathInfo = {\n      tableName: state.implicitTableName,\n      tableId: state.implicitTableId\n    };\n  } else if (expr.match(/\\.\\*$/)) {\n    let result = popPath(expr);\n    path = result.path;\n    pathInfo = resolvePath(state, result.path);\n  }\n\n  let table = state.schema[pathInfo.tableName];\n  if (table == null) {\n    throw new Error(`Table \"${pathInfo.tableName}\" does not exist`);\n  }\n\n  return Object.keys(table).map(field => (path ? `${path}.${field}` : field));\n}\n\nconst compileSelect = saveStack(\n  'select',\n  (state, exprs, isAggregate, orders) => {\n    // Always include the id if it's not an aggregate\n    if (!isAggregate && !exprs.includes('id') && !exprs.includes('*')) {\n      exprs = exprs.concat(['id']);\n    }\n\n    let select = exprs.map(expr => {\n      if (typeof expr === 'string') {\n        if (expr.indexOf('*') !== -1) {\n          let fields = expandStar(state, expr);\n\n          return fields\n            .map(field => {\n              let compiled = compileExpr(state, '$' + field);\n              state.outputTypes.set(field, compiled.type);\n              return compiled.value + ' AS ' + quoteAlias(field);\n            })\n            .join(', ');\n        }\n\n        let compiled = compileExpr(state, '$' + expr);\n        state.outputTypes.set(expr, compiled.type);\n        return compiled.value + ' AS ' + quoteAlias(expr);\n      }\n\n      let [name, value] = Object.entries(expr)[0];\n      if (name[0] === '$') {\n        state.compileStack.push({ type: 'value', value: expr });\n        throw new CompileError(\n          `Invalid field \"${name}\", are you trying to select a function? You need to name the expression`\n        );\n      }\n\n      if (typeof value === 'string') {\n        let compiled = compileExpr(state, '$' + value);\n        state.outputTypes.set(name, compiled.type);\n        return `${compiled.value} AS ${quoteAlias(name)}`;\n      }\n\n      let compiled = compileFunction({ ...state, orders }, value);\n      state.outputTypes.set(name, compiled.type);\n      return compiled.value + ` AS ${quoteAlias(name)}`;\n    });\n\n    return select.join(', ');\n  }\n);\n\nconst compileGroupBy = saveStack('groupBy', (state, exprs) => {\n  let groupBy = exprs.map(expr => {\n    if (typeof expr === 'string') {\n      return compileExpr(state, '$' + expr).value;\n    }\n\n    return compileFunction(state, expr).value;\n  });\n\n  return groupBy.join(', ');\n});\n\nconst compileOrderBy = saveStack('orderBy', (state, exprs) => {\n  let orderBy = exprs.map(expr => {\n    let compiled;\n    let dir = null;\n\n    if (typeof expr === 'string') {\n      compiled = compileExpr(state, '$' + expr).value;\n    } else {\n      let entries = Object.entries(expr);\n      let entry = entries[0];\n\n      // Check if this is a field reference\n      if (entries.length === 1 && entry[0][0] !== '$') {\n        dir = entry[1];\n        compiled = compileExpr(state, '$' + entry[0]).value;\n      } else {\n        // Otherwise it's a function\n        let { $dir, ...func } = expr;\n        dir = $dir;\n        compiled = compileFunction(state, func).value;\n      }\n    }\n\n    if (dir != null) {\n      if (dir !== 'desc' && dir !== 'asc') {\n        throw new CompileError('Invalid order direction: ' + dir);\n      }\n      return `${compiled} ${dir}`;\n    }\n    return compiled;\n  });\n\n  return orderBy.join(', ');\n});\n\nlet AGGREGATE_FUNCTIONS = ['$sum', '$count'];\nfunction isAggregateFunction(expr) {\n  if (typeof expr !== 'object' || Array.isArray(expr)) {\n    return false;\n  }\n\n  let [name, argExprs] = Object.entries(expr)[0];\n  if (!Array.isArray(argExprs)) {\n    argExprs = [argExprs];\n  }\n\n  if (AGGREGATE_FUNCTIONS.indexOf(name) !== -1) {\n    return true;\n  }\n\n  return argExprs.find(ex => isAggregateFunction(ex));\n}\n\nexport function isAggregateQuery(queryState) {\n  // it's aggregate if:\n  // either an aggregate function is used in `select`\n  // or a `groupBy` exists\n\n  if (queryState.groupExpressions.length > 0) {\n    return true;\n  }\n\n  return queryState.selectExpressions.find(expr => {\n    if (typeof expr !== 'string') {\n      let [name, value] = Object.entries(expr)[0];\n      return isAggregateFunction(value);\n    }\n    return false;\n  });\n}\n\nexport function compileQuery(queryState, schema, schemaConfig = {}) {\n  let { withDead, validateRefs = true, tableOptions, rawMode } = queryState;\n\n  let {\n    tableViews = {},\n    tableFilters = name => [],\n    customizeQuery = queryState => queryState\n  } = schemaConfig;\n\n  let internalTableFilters = name => {\n    let filters = tableFilters(name);\n    // These filters cannot join tables and must be simple strings\n    for (let filter of filters) {\n      if (Array.isArray(filter)) {\n        throw new CompileError(\n          'Invalid internal table filter: only object filters are supported'\n        );\n      }\n      if (Object.keys(filter)[0].indexOf('.') !== -1) {\n        throw new CompileError(\n          'Invalid internal table filter: field names cannot contain paths'\n        );\n      }\n    }\n    return filters;\n  };\n\n  let tableRef = (name, isJoin) => {\n    let view =\n      typeof tableViews === 'function'\n        ? tableViews(name, { withDead, isJoin, tableOptions })\n        : tableViews[name];\n    return view || name;\n  };\n\n  let tableName = queryState.table;\n\n  let {\n    filterExpressions,\n    selectExpressions,\n    groupExpressions,\n    orderExpressions,\n    limit,\n    offset,\n    calculation\n  } = customizeQuery(queryState);\n\n  let select = '';\n  let where = '';\n  let joins = '';\n  let groupBy = '';\n  let orderBy = '';\n  let dependences = [];\n  let state = {\n    schema,\n    implicitTableName: tableName,\n    implicitTableId: tableRef(tableName),\n    paths: new Map(),\n    dependencies: [tableName],\n    compileStack: [],\n    outputTypes: new Map(),\n    validateRefs,\n    namedParameters: []\n  };\n\n  resetUid();\n\n  try {\n    select = compileSelect(\n      state,\n      selectExpressions,\n      isAggregateQuery(queryState),\n      orderExpressions\n    );\n\n    if (filterExpressions.length > 0) {\n      let result = compileWhere(state, filterExpressions);\n      where = 'WHERE ' + result;\n    } else {\n      where = 'WHERE 1';\n    }\n\n    if (!rawMode) {\n      let filters = internalTableFilters(tableName);\n      if (filters.length > 0) {\n        where += ' AND ' + compileAnd(state, filters);\n      }\n    }\n\n    if (groupExpressions.length > 0) {\n      let result = compileGroupBy(state, groupExpressions);\n      groupBy = 'GROUP BY ' + result;\n    }\n\n    // Orders don't matter if doing a single calculation\n    if (orderExpressions.length > 0) {\n      let result = compileOrderBy(state, orderExpressions);\n      orderBy = 'ORDER BY ' + result;\n    }\n\n    if (state.paths.size > 0) {\n      joins = compileJoins(state, tableRef, internalTableFilters);\n    }\n  } catch (e) {\n    if (e instanceof CompileError) {\n      throw getCompileError(e, state.compileStack);\n    }\n\n    throw e;\n  }\n\n  let sqlPieces = {\n    select,\n    from: tableRef(tableName),\n    joins,\n    where,\n    groupBy,\n    orderBy,\n    limit,\n    offset\n  };\n\n  return {\n    sqlPieces,\n    state\n  };\n}\n\nexport function defaultConstructQuery(queryState, state, sqlPieces) {\n  let s = sqlPieces;\n\n  let where = queryState.withDead\n    ? s.where\n    : addTombstone(\n        state.schema,\n        state.implicitTableName,\n        state.implicitTableId,\n        s.where\n      );\n\n  return `\n    SELECT ${s.select} FROM ${s.from}\n    ${s.joins}\n    ${where}\n    ${s.groupBy}\n    ${s.orderBy}\n    ${s.limit != null ? `LIMIT ${s.limit}` : ''}\n    ${s.offset != null ? `OFFSET ${s.offset}` : ''}\n  `;\n}\n\nexport function generateSQLWithState(queryState, schema, schemaConfig) {\n  let { sqlPieces, state } = compileQuery(queryState, schema, schemaConfig);\n  return { sql: defaultConstructQuery(queryState, state, sqlPieces), state };\n}\n\nexport function generateSQL(queryState) {\n  return generateSQLWithState(queryState).sql;\n}\n","import * as db from '../db';\nimport { compileQuery, defaultConstructQuery } from './compiler';\nimport { convertInputType, convertOutputType } from './schema-helpers';\n\n// TODO (compiler):\n// * Properly safeguard all inputs against SQL injection\n// * Functions for incr/decr dates\n// * Support HAVING\n// * Allow creating in-memory tables to run queries against static\n//   data\n// * For aggregate functions on selected ids, manually implement\n//   them only only support a specific few (sum amount / etc)\n// * Select expressions should be evaluated first, and added to a\n//   global \"field lookup\" table that other filter/groupBy/etc\n//   expressions can reference\n\nfunction applyTypes(data, outputTypes) {\n  for (let i = 0; i < data.length; i++) {\n    let item = data[i];\n    Object.keys(item).forEach(name => {\n      item[name] = convertOutputType(item[name], outputTypes.get(name));\n    });\n  }\n}\n\nexport async function execQuery(\n  queryState,\n  state,\n  sqlPieces,\n  params,\n  outputTypes\n) {\n  let sql = defaultConstructQuery(queryState, state, sqlPieces);\n  let data = await db.all(sql, params);\n  applyTypes(data, outputTypes);\n  return data;\n}\n\nexport async function runCompiledQuery(\n  query,\n  pieces,\n  state,\n  { params = {}, executors = {} } = {}\n) {\n  let paramArray = state.namedParameters.map(param => {\n    let name = param.paramName;\n    if (params[name] === undefined) {\n      throw new Error(`Parameter ${name} not provided to query`);\n    }\n    return convertInputType(params[name], param.paramType);\n  });\n\n  let data;\n  if (executors[state.implicitTableName]) {\n    data = await executors[state.implicitTableName](\n      state,\n      query,\n      pieces,\n      paramArray,\n      state.outputTypes\n    );\n  } else {\n    data = await execQuery(query, state, pieces, paramArray, state.outputTypes);\n  }\n\n  if (query.calculation) {\n    if (data.length > 0) {\n      let row = data[0];\n      let k = Object.keys(row)[0];\n      // TODO: the function being run should be the one to\n      // determine the default value, not hardcoded as 0\n      data = row[k] || 0;\n    } else {\n      data = null;\n    }\n  }\n  return data;\n}\n\nexport async function runQuery(schema, schemaConfig, query, options) {\n  let { sqlPieces, state } = compileQuery(query, schema, schemaConfig);\n  let data = await runCompiledQuery(query, sqlPieces, state, options);\n  return { data, dependencies: state.dependencies };\n}\n","import { toDateRepr, fromDateRepr } from '../models';\nimport { dayFromDate } from '../../shared/months';\n\nfunction isRequired(name, fieldDesc) {\n  return fieldDesc.required || name === 'id';\n}\n\n// TODO: All of the data type needs to check the input value. This\n// doesn't just convert, it casts. See integer handling.\nexport function convertInputType(value, type) {\n  if (value === undefined) {\n    throw new Error('Query value cannot be undefined');\n  } else if (value === null) {\n    if (type === 'boolean') {\n      return 0;\n    }\n\n    return null;\n  }\n\n  switch (type) {\n    case 'date':\n      if (value instanceof Date) {\n        return toDateRepr(dayFromDate(value));\n      } else if (\n        value.match(/^\\d{4}-\\d{2}-\\d{2}$/) == null ||\n        value.date < '2000-01-01'\n      ) {\n        throw new Error('Invalid date: ' + value);\n      }\n\n      return toDateRepr(value);\n    case 'date-month':\n      return toDateRepr(value.slice(0, 7));\n    case 'date-year':\n      return toDateRepr(value.slice(0, 4));\n    case 'boolean':\n      return value ? 1 : 0;\n    case 'id':\n      if (typeof value !== 'string' && value !== null) {\n        throw new Error('Invalid id, must be string: ' + value);\n      }\n      return value;\n    case 'integer':\n      if (typeof value === 'number' && (value | 0) === value) {\n        return value;\n      } else {\n        throw new Error(\"Can't convert to integer: \" + JSON.stringify(value));\n      }\n    case 'json':\n      return JSON.stringify(value);\n    default:\n  }\n  return value;\n}\n\nexport function convertOutputType(value, type) {\n  if (value === null) {\n    if (type === 'boolean') {\n      return false;\n    }\n    return null;\n  }\n\n  switch (type) {\n    case 'date':\n      return fromDateRepr(value);\n    case 'date-month':\n      return fromDateRepr(value).slice(0, 7);\n    case 'date-year':\n      return fromDateRepr(value).slice(0, 4);\n    case 'boolean':\n      return value === 1;\n    case 'json':\n    case 'json/fallback':\n      try {\n        return JSON.parse(value);\n      } catch (e) {\n        return type === 'json/fallback' ? value : null;\n      }\n    default:\n  }\n\n  return value;\n}\n\nexport function conform(schema, schemaConfig, table, obj, { skipNull } = {}) {\n  let tableSchema = schema[table];\n  if (tableSchema == null) {\n    throw new Error(`Table \"${table}\" does not exist`);\n  }\n\n  let views = schemaConfig.views || {};\n\n  // Rename fields if necessary\n  let fieldRef = field => {\n    if (views[table] && views[table].fields) {\n      return views[table].fields[field] || field;\n    }\n    return field;\n  };\n\n  return Object.fromEntries(\n    Object.keys(obj)\n      .map(field => {\n        // Fields that start with an underscore are ignored\n        if (field[0] === '_') {\n          return null;\n        }\n\n        let fieldDesc = tableSchema[field];\n        if (fieldDesc == null) {\n          throw new Error(\n            `Field \"${field}\" does not exist on table ${table}: ${JSON.stringify(\n              obj\n            )}`\n          );\n        }\n\n        if (isRequired(field, fieldDesc) && obj[field] == null) {\n          throw new Error(\n            `\"${field}\" is required for table \"${table}\": ${JSON.stringify(\n              obj\n            )}`\n          );\n        }\n\n        // This option removes null values (see `convertForInsert`)\n        if (skipNull && obj[field] == null) {\n          return null;\n        }\n\n        return [fieldRef(field), convertInputType(obj[field], fieldDesc.type)];\n      })\n      .filter(Boolean)\n  );\n}\n\nexport function convertForInsert(schema, schemaConfig, table, rawObj) {\n  let obj = { ...rawObj };\n\n  let tableSchema = schema[table];\n  if (tableSchema == null) {\n    throw new Error(`Error inserting: table \"${table}\" does not exist`);\n  }\n\n  // Inserting checks all the fields in the table and adds any default\n  // values necessary\n  Object.keys(tableSchema).forEach(field => {\n    let fieldDesc = tableSchema[field];\n\n    if (obj[field] == null) {\n      if (fieldDesc.default !== undefined) {\n        obj[field] =\n          typeof fieldDesc.default === 'function'\n            ? fieldDesc.default()\n            : fieldDesc.default;\n      } else if (isRequired(field, fieldDesc)) {\n        // Although this check is also done in `conform`, it only\n        // checks the fields in `obj`. For insert, we need to do it\n        // here to check that all required fields in the table exist\n        throw new Error(\n          `\"${field}\" is required for table \"${table}\": ${JSON.stringify(obj)}`\n        );\n      }\n    }\n  });\n\n  // We use `skipNull` to remove any null values. There's no need to\n  // set those when inserting, that will be the default and it reduces\n  // the amount of messages generated to sync\n  return conform(schema, schemaConfig, table, obj, { skipNull: true });\n}\n\nexport function convertForUpdate(schema, schemaConfig, table, rawObj) {\n  let obj = { ...rawObj };\n\n  let tableSchema = schema[table];\n  if (tableSchema == null) {\n    throw new Error(`Error updating: table \"${table}\" does not exist`);\n  }\n\n  return conform(schema, schemaConfig, table, obj);\n}\n\nexport function convertFromSelect(schema, schemaConfig, table, obj) {\n  let tableSchema = schema[table];\n  if (tableSchema == null) {\n    throw new Error(`Table \"${table}\" does not exist`);\n  }\n\n  let fields = Object.keys(tableSchema);\n  let result = {};\n  for (let i = 0; i < fields.length; i++) {\n    let fieldName = fields[i];\n    let fieldDesc = tableSchema[fieldName];\n\n    result[fieldName] = convertOutputType(obj[fieldName], fieldDesc.type);\n  }\n  return result;\n}\n","import * as db from '../../db';\nimport { whereIn } from '../../db/util';\nimport { groupBy } from '../../../shared/util';\nimport { isAggregateQuery } from '../compiler';\nimport { convertOutputType } from '../schema-helpers';\nimport { execQuery } from '../exec';\n\n// Transactions executor\n\nexport function toGroup(parents, children, mapper = x => x) {\n  return parents.reduce((list, parent) => {\n    let childs = children.get(parent.id) || [];\n    list.push({\n      ...mapper(parent),\n      subtransactions: childs.map(mapper)\n    });\n    return list;\n  }, []);\n}\n\n// These two queries will return very different things:\n//\n// q('transactions').select({ $count: 'id' })\n// q('transactions', { splits: \"grouped\" }).select({ $count: 'id' })\n//\n// The first will return the count of non-split and child\n// transactions, and the second will return the count of all parent\n// (or non-split) transactions\n\nfunction execTransactions(state, query, sql, params, outputTypes) {\n  let tableOptions = query.tableOptions || {};\n  let splitType = tableOptions.splits || 'inline';\n\n  if (['all', 'inline', 'none', 'grouped'].indexOf(splitType) === -1) {\n    throw new Error(`Invalid \"splits\" option for transactions: \"${splitType}\"`);\n  }\n\n  if (splitType === 'all' || splitType === 'inline' || splitType === 'none') {\n    return execTransactionsBasic(\n      state,\n      query,\n      sql,\n      params,\n      splitType,\n      outputTypes\n    );\n  } else if (splitType === 'grouped') {\n    return execTransactionsGrouped(\n      state,\n      query,\n      sql,\n      params,\n      splitType,\n      outputTypes\n    );\n  }\n}\n\nfunction _isUnhappy(filter) {\n  // These fields can be filtered - all split transactions will\n  // still be returned regardless\n  for (let key of Object.keys(filter)) {\n    if (key === '$or' || key === '$and') {\n      if (filter[key] && _isUnhappy(filter[key])) {\n        return true;\n      }\n    } else if (!(key.indexOf('account') === 0 || key === 'date')) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function isHappyPathQuery(queryState) {\n  return queryState.filterExpressions.find(_isUnhappy) == null;\n}\n\nasync function execTransactionsGrouped(\n  state,\n  queryState,\n  sql,\n  params,\n  splitType,\n  outputTypes\n) {\n  let { table: tableName, withDead } = queryState;\n  let whereDead = withDead ? '' : `AND ${sql.from}.tombstone = 0`;\n\n  if (isAggregateQuery(queryState)) {\n    let allSql = `\n      SELECT ${sql.select}\n      FROM ${sql.from}\n      ${sql.joins}\n      ${sql.where} AND is_parent = 0 ${whereDead}\n      ${sql.groupBy}\n      ${sql.orderBy}\n      ${sql.limit != null ? `LIMIT ${sql.limit}` : ''}\n      ${sql.offset != null ? `OFFSET ${sql.offset}` : ''}\n    `;\n    return db.all(allSql);\n  }\n\n  let rows;\n  let matched = null;\n\n  if (isHappyPathQuery(queryState)) {\n    // This is just an optimization - we can just filter out children\n    // directly and only list parents\n    let rowSql = `\n      SELECT ${sql.from}.id as group_id\n      FROM ${sql.from}\n      ${sql.joins}\n      ${sql.where} AND is_child = 0 ${whereDead}\n      ${sql.orderBy}\n      ${sql.limit != null ? `LIMIT ${sql.limit}` : ''}\n      ${sql.offset != null ? `OFFSET ${sql.offset}` : ''}\n    `;\n    rows = await db.all(rowSql, params);\n  } else {\n    // TODO: phew, what a doozy. write docs why it works this way\n    //\n    // prettier-ignore\n    let rowSql = `\n      SELECT group_id, matched FROM (\n        SELECT\n          group_id,\n          GROUP_CONCAT(id) as matched\n          FROM (\n            SELECT ${sql.from}.id, IFNULL(${sql.from}.parent_id, ${sql.from}.id) as group_id\n            FROM ${sql.from}\n            LEFT JOIN transactions _t2 ON ${sql.from}.is_child = 1 AND _t2.id = ${sql.from}.parent_id\n            ${sql.joins}\n            ${sql.where} AND ${sql.from}.tombstone = 0 AND IFNULL(_t2.tombstone, 0) = 0\n          )\n        GROUP BY group_id\n      )\n      LEFT JOIN ${sql.from} ON ${sql.from}.id = group_id\n      ${sql.joins}\n      ${sql.orderBy}\n      ${sql.limit != null ? `LIMIT ${sql.limit}` : ''}\n      ${sql.offset != null ? `OFFSET ${sql.offset}` : ''}\n    `;\n\n    rows = await db.all(rowSql, params);\n    matched = new Set(\n      [].concat.apply([], rows.map(row => row.matched.split(',')))\n    );\n  }\n\n  let where = whereIn(\n    rows.map(row => row.group_id),\n    `IFNULL(${sql.from}.parent_id, ${sql.from}.id)`\n  );\n  let finalSql = `\n    SELECT ${sql.select}, parent_id AS _parent_id FROM ${sql.from}\n    ${sql.joins}\n    WHERE ${where} ${whereDead}\n    ${sql.orderBy}\n  `;\n\n  let start = Date.now();\n  let allRows = await db.all(finalSql);\n\n  // Group the parents and children up\n  let { parents, children } = allRows.reduce(\n    (acc, trans) => {\n      let pid = trans._parent_id;\n      delete trans._parent_id;\n\n      if (pid == null) {\n        acc.parents.push(trans);\n      } else {\n        let arr = acc.children.get(pid) || [];\n        arr.push(trans);\n        acc.children.set(pid, arr);\n      }\n      return acc;\n    },\n    { parents: [], children: new Map() }\n  );\n\n  let mapper = trans => {\n    Object.keys(trans).forEach(name => {\n      trans[name] = convertOutputType(trans[name], outputTypes.get(name));\n    });\n\n    if (matched && !matched.has(trans.id)) {\n      trans._unmatched = true;\n    }\n    return trans;\n  };\n\n  return toGroup(parents, children, mapper);\n}\n\nasync function execTransactionsBasic(\n  state,\n  queryState,\n  sql,\n  params,\n  splitType,\n  outputTypes\n) {\n  let s = { ...sql };\n\n  if (splitType !== 'all') {\n    if (splitType === 'none') {\n      s.where = `${s.where} AND ${s.from}.parent_id IS NULL`;\n    } else {\n      s.where = `${s.where} AND ${s.from}.is_parent = 0`;\n    }\n  }\n\n  return execQuery(queryState, state, s, params, outputTypes);\n}\n\nexport default {\n  transactions: execTransactions\n};\n","function f(type, opts) {\n  return { type, ...opts };\n}\n\n// This is the table schema!\n//\n// The schema itself is the public API for querying and updating data.\n// The schema config provides a lot of control over how queries are\n// constructed other metadata used by the executors. The goal is to\n// provide a simple interface to the app, but allow the backend to\n// highly optimize how queries are run.\n//\n// A few notes:\n//\n// * `transactions` is a special table and is has a highly customized\n// executor (see `executors.js`) for performace. It should mostly be\n// transparent to you, but it's worth reading the comments in there if\n// requirements change, especially regarding split transactions.\n//\n// * You should rarely change the schema and only add to it, but it is\n// relatively safe to change if needed. The only problem is changing a\n// public API, but that could be mitigated with an option in schema\n// config to map field name for backwards compatibility.\n//\n// * It's important that the table names here in the schema map to the\n// real tables in sqlite that are updated. Otherwise subscriptions\n// might not work because the dependencies are wrong. If needed in the\n// future, we can provide another option in the schema config to map a\n// table name the internal table that is updated.\n\nexport const schema = {\n  transactions: {\n    id: f('id'),\n    is_parent: f('boolean'),\n    is_child: f('boolean'),\n    parent_id: f('id'),\n    account: f('id', { ref: 'accounts', required: true }),\n    category: f('id', { ref: 'categories' }),\n    amount: f('integer', { default: 0, required: true }),\n    payee: f('id', { ref: 'payees' }),\n    notes: f('string'),\n    date: f('date', { required: true }),\n    imported_id: f('string'),\n    error: f('json'),\n    imported_payee: f('string'),\n    starting_balance_flag: f('boolean'),\n    transfer_id: f('id'),\n    sort_order: f('float', { default: () => Date.now() }),\n    cleared: f('boolean', { default: true }),\n    tombstone: f('boolean'),\n    schedule: f('id', { ref: 'schedules' })\n    // subtransactions is a special field added if the table has the\n    // `splits: grouped` option\n  },\n  payees: {\n    id: f('id'),\n    name: f('string', { required: true }),\n    transfer_acct: f('id', { ref: 'accounts' }),\n    tombstone: f('boolean')\n  },\n  accounts: {\n    id: f('id'),\n    name: f('string', { required: true }),\n    // TODO: enum\n    type: f('string'),\n    offbudget: f('boolean'),\n    closed: f('boolean'),\n    sort_order: f('float'),\n    tombstone: f('boolean')\n  },\n  categories: {\n    id: f('id'),\n    name: f('string'),\n    is_income: f('boolean'),\n    group: f('id', { ref: 'category_groups' }),\n    sort_order: f('float'),\n    tombstone: f('boolean')\n  },\n  category_groups: {\n    id: f('id'),\n    name: f('string'),\n    is_income: f('boolean'),\n    sort_order: f('float'),\n    tombstone: f('boolean')\n  },\n  schedules: {\n    id: f('id'),\n    rule: f('id', { ref: 'rules', required: true }),\n    next_date: f('date'),\n    completed: f('boolean'),\n    posts_transaction: f('boolean'),\n    tombstone: f('boolean'),\n\n    // These are special fields that are actually pulled from the\n    // underlying rule\n    _payee: f('id', { ref: 'payees' }),\n    _account: f('id', { ref: 'accounts' }),\n    _amount: f('json/fallback'),\n    _amountOp: f('string'),\n    _date: f('json/fallback'),\n    _conditions: f('json'),\n    _actions: f('json')\n  },\n  rules: {\n    id: f('id'),\n    stage: f('string'),\n    conditions: f('json'),\n    actions: f('json'),\n    tombstone: f('boolean')\n  },\n  notes: {\n    id: f('id'),\n    note: f('string')\n  }\n};\n\nexport const schemaConfig = {\n  // Note: these views *must* represent the underlying table that we\n  // are mapping here. The compiler makes optimizations with this\n  // assumption\n  tableViews(name, { isJoin, withDead, tableOptions = {} }) {\n    switch (name) {\n      case 'transactions': {\n        // If joining, we always only show alive transactions. There's\n        // no way to configure join behavior yet\n        if (isJoin) {\n          return 'v_transactions_internal_alive';\n        }\n\n        let splitType = tableOptions.splits || 'inline';\n        // Use the view to exclude dead transactions if using `inline` or `none`\n        if (!withDead && (splitType === 'inline' || splitType === 'none')) {\n          return 'v_transactions_internal_alive';\n        }\n\n        // Otherwse we disregard the `withDead` option here and handle\n        // that in the executors to improve performance\n        return 'v_transactions_internal';\n      }\n\n      case 'schedules':\n        return 'v_schedules';\n\n      case 'categories':\n        return 'v_categories';\n\n      case 'payees':\n        return 'v_payees';\n\n      default:\n    }\n    return name;\n  },\n\n  customizeQuery(queryState) {\n    let { table: tableName, tableOptions = {} } = queryState;\n\n    function orderBy(orders) {\n      // If order was specified, always add id as the last sort to make\n      // it deterministic\n      if (orders.length > 0) {\n        return orders.concat(['id']);\n      }\n\n      // Otherwise, these are the default orders for each table\n      switch (tableName) {\n        case 'transactions':\n          return [\n            { date: 'desc' },\n            'starting_balance_flag',\n            { sort_order: 'desc' },\n            'id'\n          ];\n        case 'payees':\n          return [\n            { $condition: { transfer_acct: null }, $dir: 'desc' },\n            { $nocase: '$name' }\n          ];\n        case 'accounts':\n          return ['sort_order', 'name'];\n        case 'schedules':\n          return [{ $condition: { completed: true } }, 'next_date'];\n        default:\n      }\n\n      return [];\n    }\n\n    return {\n      ...queryState,\n      orderExpressions: orderBy(queryState.orderExpressions)\n    };\n  },\n\n  views: {\n    payees: {\n      v_payees: internalFields => {\n        let fields = internalFields({\n          name: 'COALESCE(__accounts.name, _.name)'\n        });\n\n        return `\n          SELECT ${fields} FROM payees _\n          LEFT JOIN accounts __accounts ON (_.transfer_acct = __accounts.id AND __accounts.tombstone = 0)\n          -- We never want to show transfer payees that are pointing to deleted accounts.\n          -- Either this isn't a transfer payee, if the account exists\n          WHERE _.transfer_acct IS NULL OR __accounts.id IS NOT NULL\n        `;\n      }\n    },\n\n    categories: {\n      fields: {\n        group: 'cat_group'\n      },\n\n      v_categories: internalFields => {\n        let fields = internalFields({ group: 'cat_group' });\n        return `SELECT ${fields} FROM categories _`;\n      }\n    },\n\n    schedules: {\n      v_schedules: internalFields => {\n        let fields = internalFields({\n          next_date: `\n            CASE\n              WHEN _nd.local_next_date_ts = _nd.base_next_date_ts THEN _nd.local_next_date\n              ELSE _nd.base_next_date\n            END\n          `,\n          _payee: `pm.targetId`,\n          _account: `json_extract(_rules.conditions, _paths.account || '.value')`,\n          _amount: `json_extract(_rules.conditions, _paths.amount || '.value')`,\n          _amountOp: `json_extract(_rules.conditions, _paths.amount || '.op')`,\n          _date: `json_extract(_rules.conditions, _paths.date || '.value')`,\n          _conditions: '_rules.conditions',\n          _actions: '_rules.actions'\n        });\n\n        return `\n          SELECT ${fields} FROM schedules _\n          LEFT JOIN schedules_next_date _nd ON _nd.schedule_id = _.id\n          LEFT JOIN schedules_json_paths _paths ON _paths.schedule_id = _.id\n          LEFT JOIN rules _rules ON _rules.id = _.rule\n          LEFT JOIN payee_mapping pm ON pm.id = json_extract(_rules.conditions, _paths.payee || '.value')\n        `;\n      }\n    },\n\n    transactions: {\n      fields: {\n        is_parent: 'isParent',\n        is_child: 'isChild',\n        account: 'acct',\n        imported_id: 'financial_id',\n        imported_payee: 'imported_description',\n        transfer_id: 'transferred_id',\n        payee: 'description'\n      },\n\n      v_transactions_internal: internalFields => {\n        // Override some fields to make custom stuff\n        let fields = internalFields({\n          payee: 'pm.targetId',\n          category: `CASE WHEN _.isParent = 1 THEN NULL ELSE cm.transferId END`,\n          amount: `IFNULL(_.amount, 0)`,\n          parent_id: 'CASE WHEN _.isChild = 0 THEN NULL ELSE _.parent_id END'\n        });\n\n        return `\n          SELECT ${fields} FROM transactions _\n          LEFT JOIN category_mapping cm ON cm.id = _.category\n          LEFT JOIN payee_mapping pm ON pm.id = _.description\n          WHERE\n           _.date IS NOT NULL AND\n           _.acct IS NOT NULL AND\n           (_.isChild = 0 OR _.parent_id IS NOT NULL)\n        `;\n      },\n\n      // We join on t2 to only include valid child transactions. We\n      // want to only include ones with valid parents, which is when\n      // an alive parent transaction exists\n      v_transactions_internal_alive: `\n        SELECT _.* FROM v_transactions_internal _\n        LEFT JOIN transactions t2 ON (_.is_child = 1 AND t2.id = _.parent_id)\n        WHERE IFNULL(_.tombstone, 0) = 0 AND (_.is_child = 0 OR t2.tombstone = 0)\n      `,\n\n      v_transactions: (_, publicFields) => {\n        let fields = publicFields({\n          payee: 'p.id',\n          category: 'c.id',\n          account: 'a.id'\n        });\n\n        // This adds an order, and also validates any id references by\n        // selecting the ids through a join which return null if they\n        // are dead\n        return `\n          SELECT ${fields} FROM v_transactions_internal_alive _\n          LEFT JOIN payees p ON (p.id = _.payee AND p.tombstone = 0)\n          LEFT JOIN categories c ON (c.id = _.category AND c.tombstone = 0)\n          LEFT JOIN accounts a ON (a.id = _.account AND a.tombstone = 0)\n          ORDER BY _.date desc, _.starting_balance_flag, _.sort_order desc, _.id;\n        `;\n      }\n    }\n  }\n};\n","import { schema, schemaConfig } from './index';\nimport schemaExecutors from './executors';\nimport {\n  runQuery as _runQuery,\n  runCompiledQuery as _runCompiledQuery\n} from '../exec';\nimport { Query } from '../../../shared/query';\n\nexport function runCompiledQuery(query, sqlPieces, state, params) {\n  return _runCompiledQuery(query, sqlPieces, state, {\n    params,\n    executors: schemaExecutors\n  });\n}\n\nexport function runQuery(query, params) {\n  if (query instanceof Query) {\n    query = query.serialize();\n  }\n\n  return _runQuery(schema, schemaConfig, query, {\n    params,\n    executors: schemaExecutors\n  });\n}\n","import { quoteAlias } from './compiler';\n\nfunction selectFields(fields) {\n  return Object.keys(fields)\n    .map(as => {\n      let field = fields[as];\n      let needsAs = field !== as;\n      // If it's just an identifier, we automatically prefix it with\n      // `_.` which makes sure it references the root table\n      if (!field.match(/[ .]/)) {\n        field = `_.${field}`;\n      }\n      return needsAs ? `${field} AS ${quoteAlias(as)}` : `${field}`;\n    })\n    .join(', ');\n}\n\nexport function makeViews(schema, schemaConfig) {\n  let views = schemaConfig.views;\n  let viewStrs = [];\n\n  Object.keys(views).forEach(table => {\n    let { fields: fieldMappings = {}, ...tableViews } = views[table];\n\n    let publicFields = Object.fromEntries(\n      Object.keys(schema[table]).map(name => [name, name])\n    );\n    let internalFields = { ...publicFields, ...fieldMappings };\n\n    Object.keys(tableViews).forEach(viewName => {\n      let publicMaker = overrides => {\n        let fields = { ...publicFields, ...overrides };\n        return selectFields(fields);\n      };\n      let internalMaker = overrides => {\n        let fields = { ...internalFields, ...overrides };\n        return selectFields(fields);\n      };\n\n      let sql;\n      if (typeof tableViews[viewName] === 'function') {\n        sql = tableViews[viewName](internalMaker, publicMaker);\n      } else {\n        sql = tableViews[viewName];\n      }\n      sql = sql.trim().replace(/;$/, '');\n\n      viewStrs.push(`\n        DROP VIEW IF EXISTS ${viewName};\n        CREATE VIEW ${viewName} AS ${sql};\n      `);\n    });\n  });\n\n  return viewStrs.join('\\n');\n}\n","import fs from '../platform/server/fs';\nimport * as monthUtils from '../shared/months';\nimport * as sqlite from '../platform/server/sqlite';\nimport * as prefs from './prefs';\nimport * as cloudStorage from './cloud-storage';\nconst connection = require('../platform/server/connection');\nconst uuid = require('../platform/uuid');\nconst dateFns = require('date-fns');\n\n// A special backup that represents the latest version of the db that\n// can be reverted to after loading a backup\nconst LATEST_BACKUP_FILENAME = 'db.latest.sqlite';\nlet serviceInterval = null;\n\nexport async function getBackups(id) {\n  const budgetDir = fs.getBudgetDir(id);\n  const backupDir = fs.join(budgetDir, 'backups');\n\n  let paths = [];\n  if (await fs.exists(backupDir)) {\n    paths = await fs.listDir(backupDir);\n    paths = paths.filter(file => file.match(/\\.sqlite$/));\n  }\n\n  const backups = await Promise.all(\n    paths.map(async path => {\n      const mtime = await fs.getModifiedTime(fs.join(backupDir, path));\n      return {\n        id: path,\n        date: new Date(mtime)\n      };\n    })\n  );\n\n  backups.sort((b1, b2) => {\n    if (b1.date < b2.date) {\n      return 1;\n    } else if (b1.date > b2.date) {\n      return -1;\n    }\n    return 0;\n  });\n\n  return backups;\n}\n\nexport async function getLatestBackup(id) {\n  const budgetDir = fs.getBudgetDir(id);\n  if (await fs.exists(fs.join(budgetDir, LATEST_BACKUP_FILENAME))) {\n    return {\n      id: LATEST_BACKUP_FILENAME,\n      date: null,\n      isLatest: true\n    };\n  }\n  return null;\n}\n\nexport async function getAvailableBackups(id) {\n  let backups = await getBackups(id);\n\n  let latestBackup = await getLatestBackup(id);\n  if (latestBackup) {\n    backups.unshift(latestBackup);\n  }\n\n  backups = backups.map(backup => ({\n    ...backup,\n    date: backup.date ? dateFns.format(backup.date, 'yyyy-MM-dd h:mm') : null\n  }));\n\n  return backups;\n}\n\nexport async function updateBackups(backups) {\n  const byDay = backups.reduce((groups, backup) => {\n    const day = dateFns.format(backup.date, 'yyyy-MM-dd');\n    groups[day] = groups[day] || [];\n    groups[day].push(backup);\n    return groups;\n  }, {});\n\n  const removed = [];\n  for (let day of Object.keys(byDay)) {\n    const dayBackups = byDay[day];\n    const isToday = day === monthUtils.currentDay();\n    // Allow 3 backups of the current day (so fine-grained edits are\n    // kept around). Otherwise only keep around one backup per day.\n    // And only keep a total of 10 backups.\n    for (let backup of dayBackups.slice(isToday ? 3 : 1)) {\n      removed.push(backup.id);\n    }\n  }\n\n  // Get the list of remaining backups and only keep the latest 10\n  const currentBackups = backups.filter(backup => !removed.includes(backup.id));\n  return removed.concat(currentBackups.slice(10).map(backup => backup.id));\n}\n\nexport async function makeBackup(id) {\n  const budgetDir = fs.getBudgetDir(id);\n\n  // When making a backup, we no longer consider the user to be\n  // viewing any backups. If there exists a \"latest backup\" we should\n  // delete it and consider whatever is current as the latest\n  if (await fs.exists(fs.join(budgetDir, LATEST_BACKUP_FILENAME))) {\n    await fs.removeFile(fs.join(fs.getBudgetDir(id), LATEST_BACKUP_FILENAME));\n  }\n\n  let backupId = `${uuid.v4Sync()}.sqlite`;\n  let backupPath = fs.join(budgetDir, 'backups', backupId);\n\n  if (!(await fs.exists(fs.join(budgetDir, 'backups')))) {\n    await fs.mkdir(fs.join(budgetDir, 'backups'));\n  }\n\n  await fs.copyFile(fs.join(budgetDir, 'db.sqlite'), backupPath);\n\n  // Remove all the messages from the backup\n  const db = sqlite.openDatabase(backupPath);\n  await sqlite.runQuery(db, 'DELETE FROM messages_crdt');\n  await sqlite.runQuery(db, 'DELETE FROM messages_clock');\n  sqlite.closeDatabase(db);\n\n  const toRemove = await updateBackups(await getBackups(id));\n  for (let id of toRemove) {\n    await fs.removeFile(fs.join(budgetDir, 'backups', id));\n  }\n\n  connection.send('backups-updated', await getAvailableBackups(id));\n}\n\nexport async function loadBackup(id, backupId) {\n  const budgetDir = fs.getBudgetDir(id);\n\n  if (!(await fs.exists(fs.join(budgetDir, LATEST_BACKUP_FILENAME)))) {\n    // If this is the first time we're loading a backup, save the\n    // current version so the user can easily revert back to it\n    await fs.copyFile(\n      fs.join(budgetDir, 'db.sqlite'),\n      fs.join(budgetDir, LATEST_BACKUP_FILENAME)\n    );\n\n    await fs.copyFile(\n      fs.join(budgetDir, 'metadata.json'),\n      fs.join(budgetDir, 'metadata.latest.json')\n    );\n\n    // Restart the backup service to make sure the user has the full\n    // amount of time to figure out which one they want\n    stopBackupService();\n    startBackupService(id);\n\n    await prefs.loadPrefs(id);\n  }\n\n  if (backupId === LATEST_BACKUP_FILENAME) {\n    console.log('Reverting backup');\n\n    // If reverting back to the latest, copy and delete the latest\n    // backup\n    await fs.copyFile(\n      fs.join(budgetDir, LATEST_BACKUP_FILENAME),\n      fs.join(budgetDir, 'db.sqlite')\n    );\n    await fs.copyFile(\n      fs.join(budgetDir, 'metadata.latest.json'),\n      fs.join(budgetDir, 'metadata.json')\n    );\n    await fs.removeFile(fs.join(budgetDir, LATEST_BACKUP_FILENAME));\n    await fs.removeFile(fs.join(budgetDir, 'metadata.latest.json'));\n\n    // Re-upload the new file\n    try {\n      await cloudStorage.upload();\n    } catch (e) {}\n    prefs.unloadPrefs();\n  } else {\n    console.log('Loading backup', backupId);\n\n    // This function is only ever called when a budget isn't loaded,\n    // so it's safe to load our prefs in. We need to forget about any\n    // syncing data if we are loading a backup (the current sync data\n    // will be restored if the user reverts to the original version)\n    await prefs.loadPrefs(id);\n    await prefs.savePrefs({\n      groupId: null,\n      lastSyncedTimestamp: null,\n      lastUploaded: null\n    });\n\n    // Re-upload the new file\n    try {\n      await cloudStorage.upload();\n    } catch (e) {}\n\n    prefs.unloadPrefs();\n\n    await fs.copyFile(\n      fs.join(budgetDir, 'backups', backupId),\n      fs.join(budgetDir, 'db.sqlite')\n    );\n  }\n}\n\nexport function startBackupService(id) {\n  if (serviceInterval) {\n    clearInterval(serviceInterval);\n  }\n\n  // Make a backup every 15 minutes\n  serviceInterval = setInterval(async () => {\n    console.log('Making backup');\n    await makeBackup(id);\n  }, 1000 * 60 * 15);\n}\n\nexport function stopBackupService() {\n  clearInterval(serviceInterval);\n  serviceInterval = null;\n}\n","import * as monthUtils from '../../shared/months';\nimport * as db from '../db';\nimport { batchMessages } from '../sync';\nimport { groupBySingle } from '../../shared/util';\nimport * as prefs from '../prefs';\nimport * as sheet from '../sheet';\n\nasync function getSheetValue(sheetName, cell) {\n  const node = await sheet.getCell(sheetName, cell);\n  return typeof node.value === 'number' ? node.value : 0;\n}\n\n// We want to only allow the positive movement of money back and\n// forth. buffered should never be allowed to go into the negative,\n// and you shouldn't be allowed to pull non-existant money from\n// leftover.\nfunction calcBufferedAmount(toBudget, buffered, amount) {\n  amount = Math.min(Math.max(amount, -buffered), Math.max(toBudget, 0));\n  return buffered + amount;\n}\n\nfunction getBudgetTable() {\n  let { budgetType } = prefs.getPrefs() || {};\n  return budgetType === 'report' ? 'reflect_budgets' : 'zero_budgets';\n}\n\nfunction isReflectBudget() {\n  let { budgetType } = prefs.getPrefs();\n  return budgetType === 'report';\n}\n\nfunction isZeroBudget() {\n  let { budgetType } = prefs.getPrefs();\n  return budgetType === 'rollover';\n}\n\nfunction dbMonth(month) {\n  return parseInt(month.replace('-', ''));\n}\n\nfunction getBudgetData(table, month) {\n  return db.all(\n    `\n    SELECT b.*, c.is_income FROM v_categories c\n    LEFT JOIN ${table} b ON b.category = c.id\n    WHERE c.tombstone = 0 AND b.month = ?\n  `,\n    [month]\n  );\n}\n\nfunction getAllMonths(startMonth) {\n  let { createdMonths } = sheet.get().meta();\n  let latest = null;\n  for (let month of createdMonths) {\n    if (latest == null || month > latest) {\n      latest = month;\n    }\n  }\n  return monthUtils.rangeInclusive(startMonth, latest);\n}\n\n// TODO: Valid month format in all the functions below\n\nexport function getBudget({ category, month }) {\n  let table = getBudgetTable();\n  let existing = db.firstSync(\n    `SELECT * FROM ${table} WHERE month = ? AND category = ?`,\n    [dbMonth(month), category]\n  );\n  return existing ? existing.amount || 0 : 0;\n}\n\nexport function setBudget({ category, month, amount }) {\n  if (typeof amount !== 'number') {\n    amount = 0;\n  }\n  const table = getBudgetTable();\n\n  let existing = db.firstSync(\n    `SELECT id FROM ${table} WHERE month = ? AND category = ?`,\n    [dbMonth(month), category]\n  );\n  if (existing) {\n    return db.update(table, { id: existing.id, amount });\n  }\n  return db.insert(table, {\n    id: `${dbMonth(month)}-${category}`,\n    month: dbMonth(month),\n    category,\n    amount\n  });\n}\n\nexport function setBuffer(month, amount) {\n  let existing = db.firstSync(\n    `SELECT id FROM zero_budget_months WHERE id = ?`,\n    [month]\n  );\n  if (existing) {\n    return db.update('zero_budget_months', {\n      id: existing.id,\n      buffered: amount\n    });\n  }\n  return db.insert('zero_budget_months', { id: month, buffered: amount });\n}\n\nfunction setCarryover(table, category, month, flag) {\n  let existing = db.firstSync(\n    `SELECT id FROM ${table} WHERE month = ? AND category = ?`,\n    [month, category]\n  );\n  if (existing) {\n    return db.update(table, { id: existing.id, carryover: flag ? 1 : 0 });\n  }\n  return db.insert(table, {\n    id: `${month}-${category}`,\n    month,\n    category,\n    carryover: flag ? 1 : 0\n  });\n}\n\n// Actions\n\nexport async function copyPreviousMonth({ month }) {\n  let prevMonth = dbMonth(monthUtils.prevMonth(month));\n  let table = getBudgetTable();\n  let budgetData = await getBudgetData(table, prevMonth);\n\n  await batchMessages(() => {\n    budgetData.forEach(prevBudget => {\n      if (prevBudget.is_income === 1 && !isReflectBudget()) {\n        return;\n      }\n      setBudget({\n        category: prevBudget.category,\n        month,\n        amount: prevBudget.amount\n      });\n    });\n  });\n}\n\nexport async function setZero({ month }) {\n  let categories = await db.all(\n    'SELECT * FROM v_categories WHERE tombstone = 0'\n  );\n\n  await batchMessages(() => {\n    categories.forEach(cat => {\n      if (cat.is_income === 1 && !isReflectBudget()) {\n        return;\n      }\n      setBudget({ category: cat.id, month, amount: 0 });\n    });\n  });\n}\n\nexport async function set3MonthAvg({ month }) {\n  let categories = await db.all(\n    'SELECT * FROM v_categories WHERE tombstone = 0'\n  );\n\n  let prevMonth1 = monthUtils.prevMonth(month);\n  let prevMonth2 = monthUtils.prevMonth(prevMonth1);\n  let prevMonth3 = monthUtils.prevMonth(prevMonth2);\n\n  await batchMessages(async () => {\n    for (let cat of categories) {\n      if (cat.is_income === 1 && !isReflectBudget()) {\n        continue;\n      }\n\n      let spent1 = await getSheetValue(\n        monthUtils.sheetForMonth(prevMonth1),\n        'sum-amount-' + cat.id\n      );\n      let spent2 = await getSheetValue(\n        monthUtils.sheetForMonth(prevMonth2),\n        'sum-amount-' + cat.id\n      );\n      let spent3 = await getSheetValue(\n        monthUtils.sheetForMonth(prevMonth3),\n        'sum-amount-' + cat.id\n      );\n\n      const avg = ((spent1 + spent2 + spent3) / 3) | 0;\n      setBudget({ category: cat.id, month, amount: -avg });\n    }\n  });\n}\n\nexport async function setAllFuture({ startMonth }) {\n  if (!isReflectBudget()) {\n    throw new Error('setAllFuture only applies to report budget type');\n  }\n  let table = getBudgetTable();\n  let budgetData = await getBudgetData(table, dbMonth(startMonth));\n  let months = getAllMonths(monthUtils.addMonths(startMonth, 1));\n\n  batchMessages(() => {\n    for (let month of months) {\n      budgetData.forEach(budget => {\n        if (budget.is_income === 1 && !isReflectBudget()) {\n          return;\n        }\n        setBudget({ category: budget.category, month, amount: budget.amount });\n      });\n    }\n  });\n}\n\nexport async function holdForNextMonth({ month, amount }) {\n  let row = await db.first(\n    'SELECT buffered FROM zero_budget_months WHERE id = ?',\n    [month]\n  );\n\n  let sheetName = monthUtils.sheetForMonth(month);\n  let toBudget = await getSheetValue(sheetName, 'to-budget');\n\n  if (toBudget > 0) {\n    let bufferedAmount = calcBufferedAmount(\n      toBudget,\n      (row && row.buffered) || 0,\n      amount\n    );\n\n    await setBuffer(month, bufferedAmount);\n    return true;\n  }\n  return false;\n}\n\nexport async function holdForFutureMonths({ startMonth, amount }) {\n  let months = getAllMonths(startMonth);\n\n  await batchMessages(async () => {\n    for (let month of months) {\n      if (!(await holdForNextMonth({ month, amount }))) {\n        break;\n      }\n    }\n  });\n}\n\nexport async function resetHold({ month }) {\n  await setBuffer(month, 0);\n}\n\nexport async function coverOverspending({ month, to, from }) {\n  let sheetName = monthUtils.sheetForMonth(month);\n  let toBudgeted = await getSheetValue(sheetName, 'budget-' + to);\n  let leftover = await getSheetValue(sheetName, 'leftover-' + to);\n  let leftoverFrom = await getSheetValue(\n    sheetName,\n    from === 'to-be-budgeted' ? 'to-budget' : 'leftover-' + from\n  );\n\n  if (leftover >= 0 || leftoverFrom <= 0) {\n    return;\n  }\n\n  let amountCovered = Math.min(-leftover, leftoverFrom);\n\n  // If we are covering it from the to be budgeted amount, ignore this\n  if (from !== 'to-be-budgeted') {\n    const fromBudgeted = await getSheetValue(sheetName, 'budget-' + from);\n    await setBudget({\n      category: from,\n      month,\n      amount: fromBudgeted - amountCovered\n    });\n  }\n\n  await setBudget({ category: to, month, amount: toBudgeted + amountCovered });\n}\n\nexport async function transferAvailable({ month, amount, category }) {\n  let sheetName = monthUtils.sheetForMonth(month);\n  let leftover = await getSheetValue(sheetName, 'to-budget');\n  amount = Math.max(Math.min(amount, leftover), 0);\n\n  let budgeted = await getSheetValue(sheetName, 'budget-' + category);\n  await setBudget({ category, month, amount: budgeted + amount });\n}\n\nexport async function transferCategory({ month, amount, from, to }) {\n  const sheetName = monthUtils.sheetForMonth(month);\n  const fromBudgeted = await getSheetValue(sheetName, 'budget-' + from);\n\n  await setBudget({ category: from, month, amount: fromBudgeted - amount });\n\n  // If we are simply moving it back into available cash to budget,\n  // don't do anything else\n  if (to !== 'to-be-budgeted') {\n    const toBudgeted = await getSheetValue(sheetName, 'budget-' + to);\n    await setBudget({ category: to, month, amount: toBudgeted + amount });\n  }\n}\n\nexport async function setCategoryCarryover({ startMonth, category, flag }) {\n  let table = getBudgetTable();\n  let months = getAllMonths(startMonth);\n\n  await batchMessages(() => {\n    for (let month of months) {\n      setCarryover(table, category, dbMonth(month), flag);\n    }\n  });\n}\n","import { createApp } from '../app';\nimport { mutator } from '../mutators';\nimport { undoable } from '../undo';\nimport * as actions from './actions';\n\n\nlet app = createApp();\n\napp.method('budget/budget-amount', mutator(undoable(actions.setBudget)));\napp.method(\n  'budget/copy-previous-month',\n  mutator(undoable(actions.copyPreviousMonth))\n);\napp.method('budget/set-zero', mutator(undoable(actions.setZero)));\napp.method('budget/set-3month-avg', mutator(undoable(actions.set3MonthAvg)));\napp.method('budget/set-all-future', mutator(undoable(actions.setAllFuture)));\napp.method(\n  'budget/hold-for-next-month',\n  mutator(undoable(actions.holdForNextMonth))\n);\napp.method(\n  'budget/hold-for-future-months',\n  mutator(undoable(actions.holdForFutureMonths))\n);\napp.method('budget/reset-hold', mutator(undoable(actions.resetHold)));\napp.method(\n  'budget/cover-overspending',\n  mutator(undoable(actions.coverOverspending))\n);\napp.method(\n  'budget/transfer-available',\n  mutator(undoable(actions.transferAvailable))\n);\napp.method(\n  'budget/transfer-category',\n  mutator(undoable(actions.transferCategory))\n);\napp.method(\n  'budget/set-carryover',\n  mutator(undoable(actions.setCategoryCarryover))\n);\n\nexport default app;\n","import * as sheet from '../sheet';\nimport * as db from '../db';\nimport * as monthUtils from '../../shared/months';\nimport { getChangedValues } from '../../shared/util';\nimport { resolveName } from '../spreadsheet/util';\nimport * as report from './report';\nimport * as rollover from './rollover';\nimport { sumAmounts } from './util';\nimport * as budgetActions from '../budget/actions';\n\nfunction mergeUpdates(updates) {\n  const merged = {};\n  updates.forEach(update => {\n    Object.keys(update).forEach(sheet => {\n      if (merged[sheet]) {\n        merged[sheet] = { ...merged[sheet], ...update[sheet] };\n      } else {\n        merged[sheet] = update[sheet];\n      }\n    });\n  });\n  return merged;\n}\n\nexport function getBudgetType() {\n  let meta = sheet.get().meta();\n  return meta.budgetType || 'rollover';\n}\n\nexport function getBudgetRange(start, end) {\n  start = monthUtils.getMonth(start);\n  end = monthUtils.getMonth(end);\n\n  // The start date should never be after the end date. If that\n  // happened, the month range might be a valid range and weird\n  // things happen\n  if (start > end) {\n    start = end;\n  }\n\n  // Budgets should exist 3 months before the earliest needed date\n  // (either the oldest transaction or the current month if no\n  // transactions yet), and a year from the current date. There's no\n  // need to ever have budgets outside that range.\n  start = monthUtils.subMonths(start, 3);\n  end = monthUtils.addMonths(end, 12);\n\n  return { start, end, range: monthUtils.rangeInclusive(start, end) };\n}\n\nfunction createCategory(cat, sheetName, prevSheetName, start, end) {\n  sheet.get().createDynamic(sheetName, 'sum-amount-' + cat.id, {\n    initialValue: 0,\n    run: () => {\n      // Making this sync is faster!\n      let rows = db.runQuery(\n        `SELECT SUM(amount) as amount FROM v_transactions_internal_alive t\n           LEFT JOIN accounts a ON a.id = t.account\n         WHERE t.date >= ${start} AND t.date <= ${end}\n           AND category = '${cat.id}' AND a.offbudget = 0`,\n        [],\n        true\n      );\n      let row = rows[0];\n      let amount = row ? row.amount : 0;\n      return amount || 0;\n    }\n  });\n\n  if (getBudgetType() === 'rollover') {\n    rollover.createCategory(cat, sheetName, prevSheetName);\n  } else {\n    report.createCategory(cat, sheetName, prevSheetName);\n  }\n}\n\nfunction createCategoryGroup(group, sheetName) {\n  sheet.get().createDynamic(sheetName, 'group-sum-amount-' + group.id, {\n    initialValue: 0,\n    dependencies: group.categories.map(cat => `sum-amount-${cat.id}`),\n    run: sumAmounts\n  });\n\n  if (!group.is_income || getBudgetType() !== 'rollover') {\n    sheet.get().createDynamic(sheetName, 'group-budget-' + group.id, {\n      initialValue: 0,\n      dependencies: group.categories.map(cat => `budget-${cat.id}`),\n      run: sumAmounts\n    });\n\n    sheet.get().createDynamic(sheetName, 'group-leftover-' + group.id, {\n      initialValue: 0,\n      dependencies: group.categories.map(cat => `leftover-${cat.id}`),\n      run: sumAmounts\n    });\n  }\n}\n\nfunction handleAccountChange(months, oldValue, newValue) {\n  if (!oldValue || oldValue.offbudget !== newValue.offbudget) {\n    let rows = db.runQuery(\n      `\n        SELECT DISTINCT(category) as category FROM transactions\n        WHERE acct = ?\n      `,\n      [newValue.id],\n      true\n    );\n\n    months.forEach(month => {\n      let sheetName = monthUtils.sheetForMonth(month, getBudgetType());\n\n      rows.forEach(row => {\n        sheet\n          .get()\n          .recompute(resolveName(sheetName, 'sum-amount-' + row.category));\n      });\n    });\n  }\n}\n\nfunction handleTransactionChange(transaction, changedFields) {\n  if (\n    (changedFields.has('date') ||\n      changedFields.has('acct') ||\n      changedFields.has('amount') ||\n      changedFields.has('category') ||\n      changedFields.has('tombstone') ||\n      changedFields.has('isParent')) &&\n    transaction.date &&\n    transaction.category\n  ) {\n    let month = monthUtils.monthFromDate(db.fromDateRepr(transaction.date));\n    let sheetName = monthUtils.sheetForMonth(month, getBudgetType());\n\n    sheet\n      .get()\n      .recompute(resolveName(sheetName, 'sum-amount-' + transaction.category));\n  }\n}\n\nfunction handleCategoryMappingChange(months, oldValue, newValue) {\n  months.forEach(month => {\n    let sheetName = monthUtils.sheetForMonth(month, getBudgetType());\n    if (oldValue) {\n      sheet\n        .get()\n        .recompute(resolveName(sheetName, 'sum-amount-' + oldValue.transferId));\n    }\n    sheet\n      .get()\n      .recompute(resolveName(sheetName, 'sum-amount-' + newValue.transferId));\n  });\n}\n\nfunction handleCategoryChange(months, oldValue, newValue) {\n  function addDeps(sheetName, groupId, catId) {\n    sheet\n      .get()\n      .addDependencies(sheetName, `group-sum-amount-${groupId}`, [\n        `sum-amount-${catId}`\n      ]);\n    sheet\n      .get()\n      .addDependencies(sheetName, `group-budget-${groupId}`, [\n        `budget-${catId}`\n      ]);\n    sheet\n      .get()\n      .addDependencies(sheetName, `group-leftover-${groupId}`, [\n        `leftover-${catId}`\n      ]);\n  }\n\n  function removeDeps(sheetName, groupId, catId) {\n    sheet\n      .get()\n      .removeDependencies(sheetName, `group-sum-amount-${groupId}`, [\n        `sum-amount-${catId}`\n      ]);\n    sheet\n      .get()\n      .removeDependencies(sheetName, `group-budget-${groupId}`, [\n        `budget-${catId}`\n      ]);\n    sheet\n      .get()\n      .removeDependencies(sheetName, `group-leftover-${groupId}`, [\n        `leftover-${catId}`\n      ]);\n  }\n\n  let budgetType = getBudgetType();\n\n  if (oldValue && oldValue.tombstone === 0 && newValue.tombstone === 1) {\n    let id = newValue.id;\n    let groupId = newValue.cat_group;\n\n    months.forEach(month => {\n      let sheetName = monthUtils.sheetForMonth(month);\n      removeDeps(sheetName, groupId, id);\n    });\n  } else if (\n    newValue.tombstone === 0 &&\n    (!oldValue || oldValue.tombstone === 1)\n  ) {\n    if (budgetType === 'rollover') {\n      rollover.createBlankCategory(newValue, months);\n    }\n\n    months.forEach(month => {\n      let prevMonth = monthUtils.prevMonth(month);\n      let prevSheetName = monthUtils.sheetForMonth(prevMonth, budgetType);\n      let sheetName = monthUtils.sheetForMonth(month, budgetType);\n      let { start, end } = monthUtils.bounds(month);\n\n      createCategory(newValue, sheetName, prevSheetName, start, end);\n\n      let id = newValue.id;\n      let groupId = newValue.cat_group;\n\n      if (getBudgetType() === 'rollover') {\n        sheet\n          .get()\n          .addDependencies(sheetName, 'last-month-overspent', [\n            `${prevSheetName}!leftover-${id}`,\n            `${prevSheetName}!carryover-${id}`\n          ]);\n      }\n\n      addDeps(sheetName, groupId, id);\n    });\n  } else if (oldValue && oldValue.cat_group !== newValue.cat_group) {\n    // The category moved so we need to update the dependencies\n    let id = newValue.id;\n\n    months.forEach(month => {\n      let sheetName = monthUtils.sheetForMonth(month, budgetType);\n      removeDeps(sheetName, oldValue.cat_group, id);\n      addDeps(sheetName, newValue.cat_group, id);\n    });\n  }\n}\n\nfunction handleCategoryGroupChange(months, oldValue, newValue) {\n  let budgetType = getBudgetType();\n\n  function addDeps(sheetName, groupId) {\n    sheet\n      .get()\n      .addDependencies(sheetName, 'total-budgeted', [\n        `group-budget-${groupId}`\n      ]);\n    sheet\n      .get()\n      .addDependencies(sheetName, 'total-spent', [\n        `group-sum-amount-${groupId}`\n      ]);\n    sheet\n      .get()\n      .addDependencies(sheetName, 'total-leftover', [\n        `group-leftover-${groupId}`\n      ]);\n  }\n\n  function removeDeps(sheetName, groupId) {\n    sheet\n      .get()\n      .removeDependencies(sheetName, 'total-budgeted', [\n        `group-budget-${groupId}`\n      ]);\n    sheet\n      .get()\n      .removeDependencies(sheetName, 'total-spent', [\n        `group-sum-amount-${groupId}`\n      ]);\n    sheet\n      .get()\n      .removeDependencies(sheetName, 'total-leftover', [\n        `group-leftover-${groupId}`\n      ]);\n  }\n\n  if (newValue.tombstone === 1 && oldValue && oldValue.tombstone === 0) {\n    let id = newValue.id;\n    months.forEach(month => {\n      let sheetName = monthUtils.sheetForMonth(month, budgetType);\n      removeDeps(sheetName, id);\n    });\n  } else if (\n    newValue.tombstone === 0 &&\n    (!oldValue || oldValue.tombstone === 1)\n  ) {\n    let group = newValue;\n\n    if (!group.is_income || budgetType !== 'rollover') {\n      months.forEach(month => {\n        let sheetName = monthUtils.sheetForMonth(month, budgetType);\n\n        // Dirty, dirty hack. These functions should not be async, but this is\n        // OK because we're leveraging the sync nature of queries. Ideally we\n        // wouldn't be querying here. But I think we have to. At least for now\n        // we do\n        let categories = db.runQuery(\n          'SELECT * FROM categories WHERE tombstone = 0 AND cat_group = ?',\n          [group.id],\n          true\n        );\n        createCategoryGroup({ ...group, categories }, sheetName);\n\n        addDeps(sheetName, group.id);\n      });\n    }\n  }\n}\n\nfunction handleBudgetMonthChange(budget) {\n  let sheetName = monthUtils.sheetForMonth(budget.id);\n  sheet.get().set(`${sheetName}!buffered`, budget.buffered);\n}\n\nfunction handleBudgetChange(budget) {\n  if (budget.category) {\n    let sheetName = monthUtils.sheetForMonth(budget.month.toString());\n    sheet\n      .get()\n      .set(`${sheetName}!budget-${budget.category}`, budget.amount || 0);\n    sheet\n      .get()\n      .set(\n        `${sheetName}!carryover-${budget.category}`,\n        budget.carryover === 1 ? true : false\n      );\n  }\n}\n\nexport function triggerBudgetChanges(oldValues, newValues) {\n  let { createdMonths = new Set() } = sheet.get().meta();\n  sheet.startTransaction();\n\n  try {\n    newValues.forEach((items, table) => {\n      let old = oldValues.get(table);\n\n      items.forEach(newValue => {\n        let oldValue = old && old.get(newValue.id);\n\n        if (table === 'zero_budget_months') {\n          handleBudgetMonthChange(newValue);\n        } else if (table === 'zero_budgets' || table === 'reflect_budgets') {\n          handleBudgetChange(newValue);\n        } else if (table === 'transactions') {\n          let changed = new Set(\n            Object.keys(getChangedValues(oldValue || {}, newValue) || {})\n          );\n\n          if (oldValue) {\n            handleTransactionChange(oldValue, changed);\n          }\n          handleTransactionChange(newValue, changed);\n        } else if (table === 'category_mapping') {\n          handleCategoryMappingChange(createdMonths, oldValue, newValue);\n        } else if (table === 'categories') {\n          handleCategoryChange(createdMonths, oldValue, newValue);\n        } else if (table === 'category_groups') {\n          handleCategoryGroupChange(createdMonths, oldValue, newValue);\n        } else if (table === 'accounts') {\n          handleAccountChange(createdMonths, oldValue, newValue);\n        }\n      });\n    });\n  } finally {\n    sheet.endTransaction();\n  }\n}\n\nexport async function doTransfer(categoryIds, transferId) {\n  let { createdMonths: months } = sheet.get().meta();\n\n  [...months].map(month => {\n    let totalValue = categoryIds\n      .map(id => {\n        return budgetActions.getBudget({ month, category: id });\n      })\n      .reduce((total, value) => total + value, 0);\n\n    let transferValue = budgetActions.getBudget({\n      month,\n      category: transferId\n    });\n\n    budgetActions.setBudget({\n      month,\n      category: transferId,\n      amount: totalValue + transferValue\n    });\n  });\n}\n\nexport async function createBudget(months) {\n  const categories = await db.getCategories();\n  const groups = await db.getCategoriesGrouped();\n\n  sheet.startTransaction();\n  let meta = sheet.get().meta();\n  meta.createdMonths = meta.createdMonths || new Set();\n\n  let budgetType = getBudgetType();\n\n  if (budgetType === 'rollover') {\n    rollover.createBudget(meta, categories, months);\n  }\n\n  months.forEach(month => {\n    if (!meta.createdMonths.has(month)) {\n      let prevMonth = monthUtils.prevMonth(month);\n      let { start, end } = monthUtils.bounds(month);\n      let sheetName = monthUtils.sheetForMonth(month, budgetType);\n      let prevSheetName = monthUtils.sheetForMonth(prevMonth, budgetType);\n\n      categories.forEach(cat => {\n        createCategory(cat, sheetName, prevSheetName, start, end);\n      });\n      groups.forEach(group => {\n        createCategoryGroup(group, sheetName);\n      });\n\n      if (budgetType === 'rollover') {\n        rollover.createSummary(groups, categories, prevSheetName, sheetName);\n      } else {\n        report.createSummary(groups, categories, sheetName);\n      }\n\n      meta.createdMonths.add(month);\n    }\n  });\n\n  sheet.get().setMeta(meta);\n  sheet.endTransaction();\n\n  // Wait for the spreadsheet to finish computing. Normally this won't\n  // do anything (as values are cached) but on first run this need to\n  // show the loading screen while it initially sets up.\n  await sheet.waitOnSpreadsheet();\n}\n\nexport async function createAllBudgets() {\n  let earliestTransaction = await db.first(\n    'SELECT * FROM transactions WHERE isChild=0 AND date IS NOT NULL ORDER BY date ASC LIMIT 1'\n  );\n  let earliestDate =\n    earliestTransaction && db.fromDateRepr(earliestTransaction.date);\n  let currentMonth = monthUtils.currentMonth();\n\n  // Get the range based off of the earliest transaction and the\n  // current month. If no transactions currently exist the current\n  // month is also used as the starting month\n  let { start, end, range } = getBudgetRange(\n    earliestDate || currentMonth,\n    currentMonth\n  );\n\n  let meta = sheet.get().meta();\n  let createdMonths = meta.createdMonths || new Set();\n  let newMonths = range.filter(m => !createdMonths.has(m));\n\n  if (newMonths.length > 0) {\n    await createBudget(range);\n  }\n\n  return { start, end };\n}\n\nexport async function setType(type) {\n  let meta = sheet.get().meta();\n  if (type === meta.budgetType) {\n    return;\n  }\n\n  meta.budgetType = type;\n  meta.createdMonths = new Set();\n\n  // Go through and force all the cells to be recomputed\n  let nodes = sheet.get().getNodes();\n  db.transaction(() => {\n    for (let name of nodes.keys()) {\n      let [sheetName, cellName] = name.split('!');\n      if (sheetName.match(/^budget\\d+/)) {\n        sheet.get().deleteCell(sheetName, cellName);\n      }\n    }\n  });\n\n  sheet.get().startCacheBarrier();\n  sheet.loadUserBudgets(db);\n  let bounds = await createAllBudgets();\n  sheet.get().endCacheBarrier();\n\n  return bounds;\n}\n","import * as sheet from '../sheet';\nimport * as monthUtils from '../../shared/months';\nimport { number, sumAmounts } from './util';\nconst { resolveName } = require('../spreadsheet/util');\n\nexport async function createCategory(cat, sheetName, prevSheetName) {\n  sheet.get().createStatic(sheetName, `budget-${cat.id}`, 0);\n\n  // This makes the app more robust by \"fixing up\" null budget values.\n  // Those should not be allowed, but in case somehow a null value\n  // ends up there, we are resilient to it. Preferrably the\n  // spreadsheet would have types and be more strict about what is\n  // allowed to be set.\n  if (sheet.get().getCellValue(sheetName, `budget-${cat.id}`) == null) {\n    sheet.get().set(resolveName(sheetName, `budget-${cat.id}`), 0);\n  }\n\n  sheet.get().createDynamic(sheetName, `leftover-${cat.id}`, {\n    initialValue: 0,\n    dependencies: [\n      `budget-${cat.id}`,\n      `sum-amount-${cat.id}`,\n      `${prevSheetName}!carryover-${cat.id}`,\n      `${prevSheetName}!leftover-${cat.id}`\n    ],\n    run: (budgeted, sumAmount, prevCarryover, prevLeftover) => {\n      if (cat.is_income) {\n        return (\n          number(budgeted) -\n          number(sumAmount) +\n          (prevCarryover ? number(prevLeftover) : 0)\n        );\n      }\n\n      return (\n        number(budgeted) +\n        number(sumAmount) +\n        (prevCarryover ? number(prevLeftover) : 0)\n      );\n    }\n  });\n  sheet.get().createDynamic(sheetName, `spent-with-carryover-${cat.id}`, {\n    initialValue: 0,\n    dependencies: [\n      `budget-${cat.id}`,\n      `sum-amount-${cat.id}`,\n      `carryover-${cat.id}`\n    ],\n    // TODO: Why refresh??\n    refresh: true,\n    run: (budgeted, sumAmount, carryover) => {\n      return carryover\n        ? Math.max(0, number(budgeted) + number(sumAmount))\n        : sumAmount;\n    }\n  });\n\n  sheet.get().createStatic(sheetName, `carryover-${cat.id}`, false);\n}\n\nexport function createSummary(groups, categories, sheetName) {\n  let incomeGroup = groups.filter(group => group.is_income)[0];\n  let expenseCategories = categories.filter(cat => !cat.is_income);\n\n  sheet.get().createDynamic(sheetName, 'total-budgeted', {\n    initialValue: 0,\n    dependencies: groups\n      .filter(group => !group.is_income)\n      .map(group => `group-budget-${group.id}`),\n    run: sumAmounts\n  });\n\n  sheet.get().createDynamic(sheetName, 'total-spent', {\n    initialValue: 0,\n    refresh: true,\n    dependencies: expenseCategories.map(\n      cat => `${sheetName}!spent-with-carryover-${cat.id}`\n    ),\n    run: sumAmounts\n  });\n\n  sheet.get().createDynamic(sheetName, 'total-income', {\n    initialValue: 0,\n    dependencies: [`group-sum-amount-${incomeGroup.id}`],\n    run: amount => amount\n  });\n\n  sheet.get().createDynamic(sheetName, 'total-leftover', {\n    initialValue: 0,\n    dependencies: ['total-budgeted', 'total-spent'],\n    run: sumAmounts\n  });\n\n  sheet.get().createDynamic(sheetName, 'total-budget-income', {\n    initialValue: 0,\n    dependencies: [`group-budget-${incomeGroup.id}`],\n    run: amount => amount\n  });\n\n  sheet.get().createDynamic(sheetName, 'total-saved', {\n    initialValue: 0,\n    dependencies: ['total-budget-income', 'total-budgeted'],\n    run: (income, budgeted) => {\n      return income - budgeted;\n    }\n  });\n\n  sheet.get().createDynamic(sheetName, 'real-saved', {\n    initialValue: 0,\n    dependencies: ['total-income', 'total-spent'],\n    run: (income, spent) => {\n      return income - -spent;\n    }\n  });\n}\n","import * as sheet from '../sheet';\nimport * as monthUtils from '../../shared/months';\nimport { number, sumAmounts, flatten2, unflatten2 } from './util';\nconst { resolveName } = require('../spreadsheet/util');\n\nfunction getBlankSheet(months) {\n  let blankMonth = monthUtils.prevMonth(months[0]);\n  return monthUtils.sheetForMonth(blankMonth, 'rollover');\n}\n\nexport function createBlankCategory(cat, months) {\n  if (months.length > 0) {\n    let sheetName = getBlankSheet(months);\n    sheet.get().createStatic(sheetName, `carryover-${cat.id}`, false);\n    sheet.get().createStatic(sheetName, `leftover-${cat.id}`, 0);\n    sheet.get().createStatic(sheetName, `leftover-pos-${cat.id}`, 0);\n  }\n}\n\nfunction createBlankMonth(categories, sheetName, months) {\n  sheet.get().createStatic(sheetName, 'is-blank', true);\n  sheet.get().createStatic(sheetName, 'to-budget', 0);\n  sheet.get().createStatic(sheetName, 'buffered', 0);\n\n  categories.forEach(cat => createBlankCategory(cat, months));\n}\n\nexport function createCategory(cat, sheetName, prevSheetName) {\n  if (!cat.is_income) {\n    sheet.get().createStatic(sheetName, `budget-${cat.id}`, 0);\n\n    // This makes the app more robust by \"fixing up\" null budget values.\n    // Those should not be allowed, but in case somehow a null value\n    // ends up there, we are resilient to it. Preferrably the\n    // spreadsheet would have types and be more strict about what is\n    // allowed to be set.\n    if (sheet.get().getCellValue(sheetName, `budget-${cat.id}`) == null) {\n      sheet.get().set(resolveName(sheetName, `budget-${cat.id}`), 0);\n    }\n\n    sheet.get().createStatic(sheetName, `carryover-${cat.id}`, false);\n\n    sheet.get().createDynamic(sheetName, `leftover-${cat.id}`, {\n      initialValue: 0,\n      dependencies: [\n        `budget-${cat.id}`,\n        `sum-amount-${cat.id}`,\n        `${prevSheetName}!carryover-${cat.id}`,\n        `${prevSheetName}!leftover-${cat.id}`,\n        `${prevSheetName}!leftover-pos-${cat.id}`\n      ],\n      run: (budgeted, spent, prevCarryover, prevLeftover, prevLeftoverPos) => {\n        return (\n          number(budgeted) +\n          number(spent) +\n          (prevCarryover ? number(prevLeftover) : number(prevLeftoverPos))\n        );\n      }\n    });\n\n    sheet.get().createDynamic(sheetName, 'leftover-pos-' + cat.id, {\n      initialValue: 0,\n      dependencies: [`leftover-${cat.id}`],\n      run: leftover => {\n        return leftover < 0 ? 0 : leftover;\n      }\n    });\n  }\n}\n\nexport function createSummary(groups, categories, prevSheetName, sheetName) {\n  let incomeGroup = groups.filter(group => group.is_income)[0];\n  let expenseCategories = categories.filter(cat => !cat.is_income);\n\n  sheet.get().createStatic(sheetName, 'buffered', 0);\n\n  sheet.get().createDynamic(sheetName, 'from-last-month', {\n    initialValue: 0,\n    dependencies: [`${prevSheetName}!to-budget`, `${prevSheetName}!buffered`],\n    run: (toBudget, buffered) => number(toBudget) + number(buffered)\n  });\n\n  // Alias the group income total to `total-income`\n  sheet.get().createDynamic(sheetName, 'total-income', {\n    initialValue: 0,\n    dependencies: [`group-sum-amount-${incomeGroup.id}`],\n    run: amount => amount\n  });\n\n  sheet.get().createDynamic(sheetName, 'available-funds', {\n    initialValue: 0,\n    dependencies: ['total-income', 'from-last-month'],\n    run: (income, fromLastMonth) => number(income) + number(fromLastMonth)\n  });\n\n  sheet.get().createDynamic(sheetName, 'last-month-overspent', {\n    initialValue: 0,\n    dependencies: flatten2(\n      expenseCategories.map(cat => [\n        `${prevSheetName}!leftover-${cat.id}`,\n        `${prevSheetName}!carryover-${cat.id}`\n      ])\n    ),\n    run: (...data) => {\n      data = unflatten2(data);\n      return data.reduce((total, [leftover, carryover]) => {\n        if (carryover) {\n          return total;\n        }\n        return total + Math.min(0, number(leftover));\n      }, 0);\n    }\n  });\n\n  sheet.get().createDynamic(sheetName, 'total-budgeted', {\n    initialValue: 0,\n    dependencies: groups\n      .filter(group => !group.is_income)\n      .map(group => `group-budget-${group.id}`),\n    run: (...amounts) => {\n      // Negate budgeted amount\n      return -sumAmounts(...amounts);\n    }\n  });\n\n  sheet.get().createDynamic(sheetName, 'buffered', { initialValue: 0 });\n\n  sheet.get().createDynamic(sheetName, 'to-budget', {\n    initialValue: 0,\n    dependencies: [\n      'available-funds',\n      'last-month-overspent',\n      'total-budgeted',\n      'buffered'\n    ],\n    run: (available, lastOverspent, totalBudgeted, buffered) => {\n      return (\n        number(available) +\n        number(lastOverspent) +\n        number(totalBudgeted) -\n        number(buffered)\n      );\n    }\n  });\n\n  sheet.get().createDynamic(sheetName, 'total-spent', {\n    initialValue: 0,\n    dependencies: groups\n      .filter(group => !group.is_income)\n      .map(group => `group-sum-amount-${group.id}`),\n    run: sumAmounts\n  });\n\n  sheet.get().createDynamic(sheetName, 'total-leftover', {\n    initialValue: 0,\n    dependencies: groups\n      .filter(group => !group.is_income)\n      .map(group => `group-leftover-${group.id}`),\n    run: sumAmounts\n  });\n}\n\nexport function createBudget(meta, categories, months) {\n  // The spreadsheet is now strict - so we need to fill in some\n  // default values for the month before the first month. Only do this\n  // if it doesn't already exist\n  let blankSheet = getBlankSheet(months);\n  if (meta.blankSheet !== blankSheet) {\n    sheet.get().clearSheet(meta.blankSheet);\n    createBlankMonth(categories, blankSheet, months);\n    meta.blankSheet = blankSheet;\n  }\n}\n","import { number } from '../spreadsheet/globals';\n\nexport { number } from '../spreadsheet/globals';\n\nexport function sumAmounts(...amounts) {\n  return amounts.reduce((total, amount) => {\n    return total + number(amount);\n  }, 0);\n}\n\nexport function flatten2(arr) {\n  return Array.prototype.concat.apply([], arr);\n}\n\nexport function unflatten2(arr) {\n  let res = [];\n  for (let i = 0; i < arr.length; i += 2) {\n    res.push([arr[i], arr[i + 1]]);\n  }\n  return res;\n}\n\n","import fs from '../platform/server/fs';\nimport asyncStorage from '../platform/server/asyncStorage';\nimport { fetch } from '../platform/server/fetch';\nimport * as monthUtils from '../shared/months';\nimport * as sqlite from '../platform/server/sqlite';\nimport * as prefs from './prefs';\nimport { getConfig } from './config';\nimport { runMutator } from './mutators';\nimport {\n  HTTPError,\n  PostError,\n  FileDownloadError,\n  FileUploadError\n} from './errors';\nimport encryption from './encryption';\nimport { post } from './post';\nlet uuid = require('../platform/uuid');\nlet AdmZip = require('adm-zip');\n\nlet UPLOAD_FREQUENCY_IN_DAYS = 7;\n\nasync function checkHTTPStatus(res) {\n  if (res.status !== 200) {\n    return res.text().then(str => {\n      throw new HTTPError(res.status, str);\n    });\n  } else {\n    return res;\n  }\n}\n\nasync function fetchJSON(...args) {\n  let res = await fetch(...args);\n  res = await checkHTTPStatus(res);\n  return res.json();\n}\n\nexport async function checkKey() {\n  let userToken = await asyncStorage.getItem('user-token');\n\n  let { cloudFileId, encryptKeyId } = prefs.getPrefs();\n\n  let res;\n  try {\n    res = await post(getConfig().SYNC_SERVER + '/user-get-key', {\n      token: userToken,\n      fileId: cloudFileId\n    });\n  } catch (e) {\n    console.log(e);\n    return { error: { reason: 'network' } };\n  }\n\n  // This == comparison is important, they could be null or undefined\n  // eslint-disable-next-line\n  return {\n    valid:\n      res.id == encryptKeyId && // eslint-disable-line\n      (encryptKeyId == null || encryption.hasKey(encryptKeyId))\n  };\n}\n\nexport async function resetSyncState(newKeyState) {\n  let userToken = await asyncStorage.getItem('user-token');\n\n  let { cloudFileId } = prefs.getPrefs();\n\n  if (process.env.IS_BETA) {\n    return { error: { reason: 'beta-version' } };\n  }\n\n  try {\n    await post(getConfig().SYNC_SERVER + '/reset-user-file', {\n      token: userToken,\n      fileId: cloudFileId\n    });\n  } catch (e) {\n    if (e instanceof PostError) {\n      return {\n        error: {\n          reason: e.reason === 'unauthorized' ? 'unauthorized' : 'network'\n        }\n      };\n    }\n    return { error: { reason: 'internal' } };\n  }\n\n  if (newKeyState) {\n    try {\n      await post(getConfig().SYNC_SERVER + '/user-create-key', {\n        token: userToken,\n        fileId: cloudFileId,\n        keyId: newKeyState.key.getId(),\n        keySalt: newKeyState.salt,\n        testContent: newKeyState.testContent\n      });\n    } catch (e) {\n      if (e instanceof PostError) {\n        return { error: { reason: 'network' } };\n      }\n      return { error: { reason: 'internal' } };\n    }\n  }\n\n  return {};\n}\n\nexport async function exportBuffer() {\n  let { id, budgetName } = prefs.getPrefs();\n  if (!budgetName) {\n    return null;\n  }\n\n  let budgetDir = fs.getBudgetDir(id);\n\n  // create zip\n  let zipped = new AdmZip();\n\n  // We run this in a mutator even though its not mutating anything\n  // because we are reading the sqlite file from disk. We want to make\n  // sure that we get a valid snapshot of it so we want this to be\n  // serialized with all other mutations.\n  await runMutator(async () => {\n    let rawDbContent = await fs.readFile(\n      fs.join(budgetDir, 'db.sqlite'),\n      'binary'\n    );\n\n    // Do some post-processing of the database. We NEVER upload the cache with\n    // the database; this forces new downloads to always recompute everything\n    // which is not only safer, but reduces the filesize a lot.\n    let memDb = await sqlite.openDatabase(rawDbContent);\n    sqlite.execQuery(\n      memDb,\n      `\n        DELETE FROM kvcache;\n        DELETE FROM kvcache_key;\n      `\n    );\n\n    let dbContent = sqlite.exportDatabase(memDb);\n    sqlite.closeDatabase(memDb);\n\n    // mark it as a file that needs a new clock so when a new client\n    // downloads it, it'll get set to a unique node\n    let meta = JSON.parse(\n      await fs.readFile(fs.join(budgetDir, 'metadata.json'))\n    );\n\n    meta.resetClock = true;\n    let metaContent = Buffer.from(JSON.stringify(meta), 'utf8');\n\n    zipped.addFile('db.sqlite', dbContent);\n    zipped.addFile('metadata.json', metaContent);\n  });\n\n  return zipped.toBuffer();\n}\n\nexport async function upload() {\n  let userToken = await asyncStorage.getItem('user-token');\n  if (!userToken) {\n    throw FileUploadError('unauthorized');\n  }\n\n  // We never change the server from the beta version\n  if (process.env.IS_BETA) {\n    throw FileUploadError('beta-version');\n  }\n\n  let zipContent = await exportBuffer();\n  if (zipContent == null) {\n    return;\n  }\n\n  let { id, groupId, budgetName, cloudFileId, encryptKeyId } = prefs.getPrefs();\n  let uploadContent = zipContent;\n  let uploadMeta = null;\n\n  // The upload process encrypts with the key tagged in the prefs for\n  // the file. It will upload the file and the server is responsible\n  // for checking that the key is up-to-date and rejecting it if not\n  if (encryptKeyId) {\n    let encrypted;\n    try {\n      encrypted = await encryption.encrypt(zipContent, encryptKeyId);\n    } catch (e) {\n      throw FileUploadError('encrypt-failure', {\n        isMissingKey: e.message === 'missing-key'\n      });\n    }\n    uploadContent = encrypted.value;\n    uploadMeta = encrypted.meta;\n  }\n\n  if (!cloudFileId) {\n    cloudFileId = uuid.v4Sync();\n  }\n\n  let res;\n  try {\n    res = await fetchJSON(getConfig().SYNC_SERVER + '/upload-user-file', {\n      method: 'POST',\n      headers: {\n        'Content-Length': uploadContent.length,\n        'Content-Type': 'application/encrypted-file',\n        'X-ACTUAL-TOKEN': userToken,\n        'X-ACTUAL-FILE-ID': cloudFileId,\n        'X-ACTUAL-NAME': encodeURIComponent(budgetName),\n        'X-ACTUAL-FORMAT': 2,\n        ...(uploadMeta\n          ? { 'X-ACTUAL-ENCRYPT-META': JSON.stringify(uploadMeta) }\n          : null),\n        ...(groupId ? { 'X-ACTUAL-GROUP-ID': groupId } : null)\n      },\n      body: uploadContent\n    });\n  } catch (err) {\n    console.log('Upload failure', err);\n\n    let reason = err instanceof PostError ? err.reason : 'network';\n\n    if (err instanceof PostError) {\n      throw new FileUploadError(\n        err.reason === 'unauthorized' ? 'unauthorized' : err.reason || 'network'\n      );\n    }\n\n    throw FileUploadError('internal');\n  }\n\n  if (res.status === 'ok') {\n    // Only save it if we are still working on the same file\n    if (prefs.getPrefs() && prefs.getPrefs().id === id) {\n      await prefs.savePrefs({\n        lastUploaded: monthUtils.currentDay(),\n        cloudFileId,\n        groupId: res.groupId\n      });\n    }\n  } else {\n    throw FileUploadError('internal');\n  }\n}\n\nexport async function possiblyUpload() {\n  let { cloudFileId, groupId, lastUploaded, id } = prefs.getPrefs();\n\n  let threshold =\n    lastUploaded && monthUtils.addDays(lastUploaded, UPLOAD_FREQUENCY_IN_DAYS);\n  let currentDay = monthUtils.currentDay();\n\n  // We only want to try to upload every UPLOAD_FREQUENCY_IN_DAYS days\n  if (lastUploaded && currentDay < threshold) {\n    return;\n  }\n\n  // We only want to upload existing cloud files that are part of a\n  // valid group\n  if (!cloudFileId || !groupId) {\n    return;\n  }\n\n  // Don't block on uploading\n  upload().catch(err => {});\n}\n\nexport async function removeFile(fileId) {\n  const [[, userId], [, userKey]] = await asyncStorage.multiGet([\n    'user-id',\n    'user-key'\n  ]);\n\n  await post(getConfig().SYNC_SERVER + '/delete-user-file', {\n    userId,\n    key: userKey,\n    fileId\n  });\n}\n\nexport async function listRemoteFiles() {\n  let userToken = await asyncStorage.getItem('user-token');\n  if (!userToken) {\n    return null;\n  }\n\n  let res;\n  try {\n    res = await fetchJSON(getConfig().SYNC_SERVER + '/list-user-files', {\n      headers: {\n        'X-ACTUAL-TOKEN': userToken\n      }\n    });\n  } catch (e) {\n    console.log('Error', e);\n    return null;\n  }\n\n  if (res.status === 'error') {\n    return null;\n  }\n\n  console.log(res.data);\n\n  return res.data.map(file => ({\n    ...file,\n    hasKey: encryption.hasKey(file.encryptKeyId)\n  }));\n}\n\nexport async function download(fileId, replace) {\n  let userToken = await asyncStorage.getItem('user-token');\n\n  let buffer;\n  try {\n    buffer = await fetch(getConfig().SYNC_SERVER + '/download-user-file', {\n      headers: {\n        'X-ACTUAL-TOKEN': userToken,\n        'X-ACTUAL-FILE-ID': fileId\n      }\n    })\n      .then(checkHTTPStatus)\n      .then(res => {\n        if (res.arrayBuffer) {\n          return res.arrayBuffer().then(ab => Buffer.from(ab));\n        }\n        return res.buffer();\n      });\n  } catch (err) {\n    console.log('Download failure', err);\n    throw FileDownloadError('download-failure');\n  }\n\n  let res;\n  try {\n    res = await fetchJSON(getConfig().SYNC_SERVER + '/get-user-file-info', {\n      headers: {\n        'X-ACTUAL-TOKEN': userToken,\n        'X-ACTUAL-FILE-ID': fileId\n      }\n    });\n  } catch (err) {\n    throw FileDownloadError('internal', { fileId });\n  }\n\n  if (res.status !== 'ok') {\n    throw FileDownloadError('internal', { fileId });\n  }\n  let fileData = res.data;\n\n  // The download process checks if the server gave us decrypt\n  // information. It is assumed that this key has already been loaded\n  // in, which is done in a previous step\n  if (fileData.encryptMeta) {\n    try {\n      buffer = await encryption.decrypt(buffer, fileData.encryptMeta);\n    } catch (e) {\n      throw FileDownloadError('decrypt-failure', {\n        isMissingKey: e.message === 'missing-key'\n      });\n    }\n  }\n\n  let zipped = new AdmZip(buffer);\n  let entries = zipped.getEntries();\n  let dbEntry = entries.find(e => e.entryName.includes('db.sqlite'));\n  let metaEntry = entries.find(e => e.entryName.includes('metadata.json'));\n\n  if (!dbEntry || !metaEntry) {\n    throw FileDownloadError('invalid-zip-file');\n  }\n\n  let dbContent = zipped.readFile(dbEntry);\n  let metaContent = zipped.readFile(metaEntry);\n\n  let meta;\n  try {\n    meta = JSON.parse(metaContent.toString('utf8'));\n  } catch (err) {\n    throw FileDownloadError('invalid-meta-file');\n  }\n\n  // Update the metadata. The stored file on the server might be\n  // out-of-date with a few keys\n  meta = {\n    ...meta,\n    cloudFileId: fileData.fileId,\n    groupId: fileData.groupId,\n    lastUploaded: monthUtils.currentDay(),\n    encryptKeyId: fileData.encryptMeta ? fileData.encryptMeta.keyId : null\n  };\n\n  let budgetDir = fs.getBudgetDir(meta.id);\n\n  if (await fs.exists(budgetDir)) {\n    if (replace) {\n      // Don't remove the directory so that backups are retained\n      let dbFile = fs.join(budgetDir, 'db.sqlite');\n      let metaFile = fs.join(budgetDir, 'metadata.json');\n\n      if (await fs.exists(dbFile)) {\n        await fs.removeFile(dbFile);\n      }\n      if (await fs.exists(metaFile)) {\n        await fs.removeFile(metaFile);\n      }\n    } else {\n      throw FileDownloadError('file-exists', { id: meta.id });\n    }\n  } else {\n    await fs.mkdir(budgetDir);\n  }\n\n  await fs.writeFile(fs.join(budgetDir, 'db.sqlite'), dbContent);\n  await fs.writeFile(fs.join(budgetDir, 'metadata.json'), JSON.stringify(meta));\n\n  return { id: meta.id };\n}\n","let config = {\n  SYNC_SERVER: 'https://sync.actualbudget.com/sync',\n  SIGNUP_SERVER: 'https://sync.actualbudget.com/account',\n  PLAID_SERVER: 'https://sync.actualbudget.com/plaid'\n};\n\nexport function setConfig(c) {\n  config = c;\n}\n\nexport function getConfig() {\n  return config;\n}\n","import LRU from 'lru-cache';\nimport * as sqlite from '../../platform/server/sqlite';\nimport fs from '../../platform/server/fs';\nimport { sendMessages, batchMessages } from '../sync';\nimport { schema, schemaConfig } from '../aql/schema';\nimport {\n  accountModel,\n  categoryModel,\n  categoryGroupModel,\n  payeeModel,\n  payeeRuleModel\n} from '../models';\nimport { groupById } from '../../shared/util';\nimport Timestamp, {\n  makeClock,\n  setClock,\n  serializeClock,\n  deserializeClock,\n  makeClientId\n} from '../timestamp';\nimport {\n  convertForInsert,\n  convertForUpdate,\n  convertFromSelect\n} from '../aql/schema-helpers';\nimport { shoveSortOrders, SORT_INCREMENT } from './sort';\n\nexport { toDateRepr, fromDateRepr } from '../models';\n\nconst uuid = require('../../platform/uuid');\n\nlet dbPath;\nlet db;\n\n// Util\n\nexport function getDatabasePath() {\n  return dbPath;\n}\n\nexport async function openDatabase(id) {\n  if (db) {\n    await sqlite.closeDatabase(db);\n  }\n\n  dbPath = fs.join(fs.getBudgetDir(id), 'db.sqlite');\n  setDatabase(await sqlite.openDatabase(dbPath));\n\n  // await execQuery('PRAGMA journal_mode = WAL');\n}\n\nexport async function reopenDatabase() {\n  await sqlite.closeDatabase(db);\n  setDatabase(await sqlite.openDatabase(dbPath));\n}\n\nexport async function closeDatabase() {\n  if (db) {\n    await sqlite.closeDatabase(db);\n    setDatabase(null);\n  }\n}\n\nexport function setDatabase(db_) {\n  db = db_;\n  resetQueryCache();\n}\n\nexport function getDatabase() {\n  return db;\n}\n\nexport async function loadClock() {\n  let row = await first('SELECT * FROM messages_clock');\n  if (row) {\n    let clock = deserializeClock(row.clock);\n    setClock(clock);\n  } else {\n    // No clock exists yet (first run of the app), so create a default\n    // one.\n    let timestamp = new Timestamp(0, 0, makeClientId());\n    let clock = makeClock(timestamp);\n    setClock(clock);\n\n    await runQuery('INSERT INTO messages_clock (id, clock) VALUES (?, ?)', [\n      1,\n      serializeClock(clock)\n    ]);\n  }\n}\n\n// Functions\n\nexport function runQuery(sql, params, fetchAll) {\n  // const unrecord = perf.record('sqlite');\n  const result = sqlite.runQuery(db, sql, params, fetchAll);\n  // unrecord();\n  return result;\n}\n\nexport function execQuery(sql) {\n  sqlite.execQuery(db, sql);\n}\n\n// This manages an LRU cache of prepared query statements. This is\n// only needed in hot spots when you are running lots of queries.\nlet _queryCache = new LRU({ max: 100 });\nexport function cache(sql) {\n  let cached = _queryCache.get(sql);\n  if (cached) {\n    return cached;\n  }\n\n  let prepared = sqlite.prepare(db, sql);\n  _queryCache.set(sql, prepared);\n  return prepared;\n}\n\nfunction resetQueryCache() {\n  _queryCache = new LRU({ max: 100 });\n}\n\nexport function transaction(fn) {\n  return sqlite.transaction(db, fn);\n}\n\nexport function asyncTransaction(fn) {\n  return sqlite.asyncTransaction(db, fn);\n}\n\n// This function is marked as async because `runQuery` is no longer\n// async. We return a promise here until we've audited all the code to\n// make sure nothing calls `.then` on this.\nexport async function all(sql, params) {\n  return runQuery(sql, params, true);\n}\n\nexport async function first(sql, params) {\n  const arr = await runQuery(sql, params, true);\n  return arr.length === 0 ? null : arr[0];\n}\n\n// The underlying sql system is now sync, but we can't update `first` yet\n// without auditing all uses of it\nexport function firstSync(sql, params) {\n  const arr = runQuery(sql, params, true);\n  return arr.length === 0 ? null : arr[0];\n}\n\n// This function is marked as async because `runQuery` is no longer\n// async. We return a promise here until we've audited all the code to\n// make sure nothing calls `.then` on this.\nexport async function run(sql, params) {\n  return runQuery(sql, params);\n}\n\nexport async function select(table, id) {\n  const rows = await runQuery(\n    'SELECT * FROM ' + table + ' WHERE id = ?',\n    [id],\n    true\n  );\n  return rows[0];\n}\n\nexport async function update(table, params) {\n  let fields = Object.keys(params).filter(k => k !== 'id');\n\n  if (params.id == null) {\n    throw new Error('update: id is required');\n  }\n\n  await sendMessages(\n    fields.map(k => {\n      return {\n        dataset: table,\n        row: params.id,\n        column: k,\n        value: params[k],\n        timestamp: Timestamp.send()\n      };\n    })\n  );\n}\n\nexport async function insertWithUUID(table, row) {\n  if (!row.id) {\n    row = { ...row, id: uuid.v4Sync() };\n  }\n\n  await insert(table, row);\n\n  // We can't rely on the return value of insert because if the\n  // primary key is text, sqlite returns the internal row id which we\n  // don't care about. We want to return the generated UUID.\n  return row.id;\n}\n\nexport async function insert(table, row) {\n  let fields = Object.keys(row).filter(k => k !== 'id');\n\n  if (row.id == null) {\n    throw new Error('insert: id is required');\n  }\n\n  await sendMessages(\n    fields.map(k => {\n      return {\n        dataset: table,\n        row: row.id,\n        column: k,\n        value: row[k],\n        timestamp: Timestamp.send()\n      };\n    })\n  );\n}\n\nexport async function delete_(table, id) {\n  await sendMessages([\n    {\n      dataset: table,\n      row: id,\n      column: 'tombstone',\n      value: 1,\n      timestamp: Timestamp.send()\n    }\n  ]);\n}\n\nexport async function selectWithSchema(table, sql, params) {\n  let rows = await runQuery(sql, params, true);\n  return rows\n    .map(row => convertFromSelect(schema, schemaConfig, table, row))\n    .filter(Boolean);\n}\n\nexport async function selectFirstWithSchema(table, sql, params) {\n  let rows = await selectWithSchema(table, sql, params);\n  return rows.length > 0 ? rows[0] : null;\n}\n\nexport function insertWithSchema(table, row) {\n  // Even though `insertWithUUID` does this, we need to do it here so\n  // the schema validation passes\n  if (!row.id) {\n    row = { ...row, id: uuid.v4Sync() };\n  }\n\n  return insertWithUUID(\n    table,\n    convertForInsert(schema, schemaConfig, table, row)\n  );\n}\n\nexport function updateWithSchema(table, fields) {\n  return update(table, convertForUpdate(schema, schemaConfig, table, fields));\n}\n\n// Data-specific functions. Ideally this would be split up into\n// different files\n\nexport async function getCategories() {\n  return all(`\n    SELECT c.* FROM categories c\n      LEFT JOIN category_groups cg ON c.cat_group = cg.id\n      WHERE c.tombstone = 0\n      ORDER BY cg.sort_order, cg.id, c.sort_order, c.id\n  `);\n}\n\nexport async function getCategoriesGrouped() {\n  const groups = await all(\n    'SELECT * FROM category_groups WHERE tombstone = 0 ORDER BY is_income, sort_order, id'\n  );\n  const rows = await all(`\n    SELECT * FROM categories WHERE tombstone = 0\n      ORDER BY sort_order, id\n  `);\n\n  return groups.map(group => {\n    return {\n      ...group,\n      categories: rows.filter(row => row.cat_group === group.id)\n    };\n  });\n}\n\nexport async function insertCategoryGroup(group) {\n  const lastGroup = await first(`\n    SELECT sort_order FROM category_groups WHERE tombstone = 0 ORDER BY sort_order DESC, id DESC LIMIT 1\n  `);\n  const sort_order = (lastGroup ? lastGroup.sort_order : 0) + SORT_INCREMENT;\n\n  group = {\n    ...categoryGroupModel.validate(group),\n    sort_order: sort_order\n  };\n  return insertWithUUID('category_groups', group);\n}\n\nexport function updateCategoryGroup(group) {\n  group = categoryGroupModel.validate(group, { update: true });\n  return update('category_groups', group);\n}\n\nexport async function moveCategoryGroup(id, targetId) {\n  const groups = await all(\n    `SELECT id, sort_order FROM category_groups WHERE tombstone = 0 ORDER BY sort_order, id`\n  );\n\n  const { updates, sort_order } = shoveSortOrders(groups, targetId);\n  for (let info of updates) {\n    await update('category_groups', info);\n  }\n  await update('category_groups', { id, sort_order });\n}\n\nexport async function deleteCategoryGroup(group, transferId) {\n  const categories = await all('SELECT * FROM categories WHERE cat_group = ?', [\n    group.id\n  ]);\n\n  // Delete all the categories within a group\n  await Promise.all(categories.map(cat => deleteCategory(cat, transferId)));\n  await delete_('category_groups', group.id);\n}\n\nexport async function insertCategory(category, { atEnd } = {}) {\n  let sort_order;\n\n  let id_;\n  await batchMessages(async () => {\n    if (atEnd) {\n      const lastCat = await first(`\n        SELECT sort_order FROM categories WHERE tombstone = 0 ORDER BY sort_order DESC, id DESC LIMIT 1\n      `);\n      sort_order = (lastCat ? lastCat.sort_order : 0) + SORT_INCREMENT;\n    } else {\n      // Unfortunately since we insert at the beginning, we need to shove\n      // the sort orders to make sure there's room for it\n      const categories = await all(\n        `SELECT id, sort_order FROM categories WHERE cat_group = ? AND tombstone = 0 ORDER BY sort_order, id`,\n        [category.cat_group]\n      );\n\n      const { updates, sort_order: order } = shoveSortOrders(\n        categories,\n        categories.length > 0 ? categories[0].id : null\n      );\n      for (let info of updates) {\n        await update('categories', info);\n      }\n      sort_order = order;\n    }\n\n    category = {\n      ...categoryModel.validate(category),\n      sort_order: sort_order\n    };\n\n    const id = await insertWithUUID('categories', category);\n    // Create an entry in the mapping table that points it to itself\n    await insert('category_mapping', { id, transferId: id });\n    id_ = id;\n  });\n  return id_;\n}\n\nexport function updateCategory(category) {\n  category = categoryModel.validate(category, { update: true });\n  return update('categories', category);\n}\n\nexport async function moveCategory(id, groupId, targetId) {\n  if (!groupId) {\n    throw new Error('moveCategory: groupId is required');\n  }\n\n  const categories = await all(\n    `SELECT id, sort_order FROM categories WHERE cat_group = ? AND tombstone = 0 ORDER BY sort_order, id`,\n    [groupId]\n  );\n\n  const { updates, sort_order } = shoveSortOrders(categories, targetId);\n  for (let info of updates) {\n    await update('categories', info);\n  }\n  await update('categories', { id, sort_order, cat_group: groupId });\n}\n\nexport async function deleteCategory(category, transferId) {\n  if (transferId) {\n    // We need to update all the deleted categories that currently\n    // point to the one we're about to delete so they all are\n    // \"forwarded\" to the new transferred category.\n    const existingTransfers = await all(\n      'SELECT * FROM category_mapping WHERE transferId = ?',\n      [category.id]\n    );\n    for (let mapping of existingTransfers) {\n      await update('category_mapping', { id: mapping.id, transferId });\n    }\n\n    // Finally, map the category we're about to delete to the new one\n    await update('category_mapping', { id: category.id, transferId });\n  }\n\n  return delete_('categories', category.id);\n}\n\nexport async function getPayee(id) {\n  return first(`SELECT * FROM payees WHERE id = ?`, [id]);\n}\n\nexport async function insertPayee(payee) {\n  payee = payeeModel.validate(payee);\n  let id;\n  await batchMessages(async () => {\n    id = await insertWithUUID('payees', payee);\n    await insert('payee_mapping', { id, targetId: id });\n  });\n  return id;\n}\n\nexport async function deletePayee(payee) {\n  let { transfer_acct } = await first('SELECT * FROM payees WHERE id = ?', [\n    payee.id\n  ]);\n  if (transfer_acct) {\n    // You should never be able to delete transfer payees\n    return;\n  }\n\n  // let mappings = await all('SELECT id FROM payee_mapping WHERE targetId = ?', [\n  //   payee.id\n  // ]);\n  // await Promise.all(\n  //   mappings.map(m => update('payee_mapping', { id: m.id, targetId: null }))\n  // );\n\n  let rules = await all('SELECT * FROM payee_rules WHERE payee_id = ?', [\n    payee.id\n  ]);\n  await Promise.all(rules.map(rule => deletePayeeRule({ id: rule.id })));\n  return delete_('payees', payee.id);\n}\n\nexport async function deleteTransferPayee(payee) {\n  // This allows deleting transfer payees\n  return delete_('payees', payee.id);\n}\n\nexport function updatePayee(payee) {\n  payee = payeeModel.validate(payee, { update: true });\n  return update('payees', payee);\n}\n\nexport async function mergePayees(target, ids) {\n  // Load in payees so we can check some stuff\n  let payees = groupById(await all('SELECT * FROM payees'));\n\n  // Filter out any transfer payees\n  if (payees[target].transfer_acct != null) {\n    return;\n  }\n  ids = ids.filter(id => payees[id].transfer_acct == null);\n\n  await batchMessages(async () => {\n    await Promise.all(\n      ids.map(async id => {\n        let mappings = await all(\n          'SELECT id FROM payee_mapping WHERE targetId = ?',\n          [id]\n        );\n        await Promise.all(\n          mappings.map(m =>\n            update('payee_mapping', { id: m.id, targetId: target })\n          )\n        );\n      })\n    );\n\n    return Promise.all(\n      ids.map(id =>\n        Promise.all([\n          update('payee_mapping', { id, targetId: target }),\n          delete_('payees', id)\n        ])\n      )\n    );\n  });\n}\n\nexport function getPayees() {\n  return all(`\n    SELECT p.*, COALESCE(a.name, p.name) AS name FROM payees p\n    LEFT JOIN accounts a ON (p.transfer_acct = a.id AND a.tombstone = 0)\n    WHERE p.tombstone = 0 AND (p.transfer_acct IS NULL OR a.id IS NOT NULL)\n    ORDER BY p.transfer_acct IS NULL DESC, p.name COLLATE NOCASE\n  `);\n}\n\nexport async function getOrphanedPayees() {\n  let rows = await all(`\n    SELECT p.id FROM payees p\n    LEFT JOIN payee_mapping pm ON pm.id = p.id\n    LEFT JOIN v_transactions_internal_alive t ON t.payee = pm.targetId\n    WHERE p.tombstone = 0 AND p.transfer_acct IS NULL AND t.id IS NULL\n  `);\n  return rows.map(row => row.id);\n}\n\nexport async function getPayeeByName(name) {\n  return first(`SELECT * FROM payees WHERE LOWER(name) = ? AND tombstone = 0`, [\n    name.toLowerCase()\n  ]);\n}\n\nexport function insertPayeeRule(rule) {\n  rule = payeeRuleModel.validate(rule);\n  return insertWithUUID('payee_rules', rule);\n}\n\nexport function deletePayeeRule(rule) {\n  return delete_('payee_rules', rule.id);\n}\n\nexport function updatePayeeRule(rule) {\n  rule = payeeModel.validate(rule, { update: true });\n  return update('payee_rules', rule);\n}\n\nexport function getPayeeRules(id) {\n  return all(\n    `SELECT pr.* FROM payee_rules pr\n     LEFT JOIN payee_mapping pm ON pm.id = pr.payee_id\n     WHERE pm.targetId = ? AND pr.tombstone = 0`,\n    [id]\n  );\n}\n\nexport function getAccounts() {\n  return all(\n    `SELECT a.*, b.name as bankName, b.id as bankId FROM accounts a\n       LEFT JOIN banks b ON a.bank = b.id\n       WHERE a.tombstone = 0\n       ORDER BY sort_order, name`\n  );\n}\n\nexport async function insertAccount(account) {\n  // Default to checking. Makes it a lot easier for tests and is\n  // generally harmless.\n  if (account.type === undefined) {\n    account = { ...account, type: 'checking' };\n  }\n\n  const accounts = await all(\n    'SELECT * FROM accounts WHERE offbudget = ? ORDER BY sort_order, name',\n    [account.offbudget != null ? account.offbudget : 0]\n  );\n\n  // Don't pass a target in, it will default to appending at the end\n  let { sort_order } = shoveSortOrders(accounts);\n\n  account = accountModel.validate({ ...account, sort_order });\n  return insertWithUUID('accounts', account);\n}\n\nexport function updateAccount(account) {\n  account = accountModel.validate(account, { update: true });\n  return update('accounts', account);\n}\n\nexport function deleteAccount(account) {\n  return delete_('accounts', account.id);\n}\n\nexport async function moveAccount(id, targetId) {\n  let account = await first('SELECT * FROM accounts WHERE id = ?', [id]);\n  let accounts;\n  if (account.closed) {\n    accounts = await all(\n      `SELECT id, sort_order FROM accounts WHERE closed = 1 ORDER BY sort_order, name`\n    );\n  } else {\n    accounts = await all(\n      `SELECT id, sort_order FROM accounts WHERE tombstone = 0 AND offbudget = ? ORDER BY sort_order, name`,\n      [account.offbudget]\n    );\n  }\n\n  const { updates, sort_order } = shoveSortOrders(accounts, targetId);\n  await batchMessages(() => {\n    for (let info of updates) {\n      update('accounts', info);\n    }\n    update('accounts', { id, sort_order });\n  });\n}\n\nexport async function getTransaction(id) {\n  let rows = await selectWithSchema(\n    'transactions',\n    'SELECT * FROM v_transactions WHERE id = ?',\n    [id]\n  );\n  return rows[0];\n}\n\nfunction _addFragmentForAccount(accountId, addWhere, options = {}) {\n  let { showClosed = false, showOffbudget = true } = options;\n\n  let fragment = addWhere ? ' WHERE (' : ' AND ';\n  let params = [];\n\n  if (accountId) {\n    if (accountId === 'offbudget') {\n      fragment += 'a.closed = 0 AND a.offbudget = 1 ';\n    } else if (accountId === 'budgeted') {\n      fragment += 'a.closed = 0 AND a.offbudget = 0 ';\n    } else if (accountId === 'uncategorized') {\n      fragment += `\n          t.category IS NULL AND a.offbudget = 0 AND isParent = 0 AND (\n            ta.offbudget IS NULL OR ta.offbudget = 1\n          )\n        `;\n    } else {\n      fragment += 'a.id = ? ';\n      params.push(accountId);\n    }\n  } else {\n    fragment += showClosed ? '1' : 'a.closed = 0';\n\n    if (!showOffbudget) {\n      fragment += ' AND a.offbudget = 0';\n    }\n  }\n\n  return { fragment, params };\n}\n\nexport async function getTransactionsByDate(\n  accountId,\n  startDate,\n  endDate,\n  options = {}\n) {\n  throw new Error('`getTransactionsByDate` is deprecated');\n}\n\nexport async function getTransactions(accountId, arg2) {\n  if (arg2 !== undefined) {\n    throw new Error(\n      '`getTransactions` was given a second argument, it now only takes a single argument `accountId`'\n    );\n  }\n\n  return selectWithSchema(\n    'transactions',\n    'SELECT * FROM v_transactions WHERE account = ?',\n    [accountId]\n  );\n}\n\nexport function insertTransaction(transaction) {\n  return insertWithSchema('transactions', transaction);\n}\n\nexport function updateTransaction(transaction) {\n  return updateWithSchema('transactions', transaction);\n}\n\nexport async function deleteTransaction(transaction) {\n  return delete_('transactions', transaction.id);\n}\n","import * as db from './index';\nimport { addSyncListener } from '../sync/index';\n\n// This file keeps all the mappings in memory so we can access it\n// synchronously. This is primarily used in the rules system, but\n// there may be other uses in the future. You don't need to worry\n// about this generally; if you are querying transactions, ids are\n// transparently mapped for you. But if you are building something\n// that stores ids and later uses them, you need to remember to map\n// the ids.\n//\n// IMPORTANT: `loadMappings` must be called first before other modules\n// that listen for sync changes. This must be the first sync listener\n// to run in case other listeners use this mapping table; otherwise\n// they might see stale mappings.\n\nlet allMappings;\nlet unlistenSync;\n\nexport async function loadMappings() {\n  // The mappings are separated into tables specific to the type of\n  // data. But you know, we really could keep a global mapping table.\n  let categories = (await db.all('SELECT * FROM category_mapping')).map(r => [\n    r.id,\n    r.transferId\n  ]);\n  let payees = (await db.all('SELECT * FROM payee_mapping')).map(r => [\n    r.id,\n    r.targetId\n  ]);\n\n  // All ids are unique, so we can just keep a global table of mappings\n  allMappings = new Map(categories.concat(payees));\n\n  if (unlistenSync) {\n    unlistenSync();\n  }\n  unlistenSync = addSyncListener(onApplySync);\n}\n\nfunction onApplySync(oldValues, newValues) {\n  newValues.forEach((items, table) => {\n    if (table.indexOf('mapping') !== -1) {\n      let field = table === 'category_mapping' ? 'transferId' : 'targetId';\n\n      items.forEach(newValue => {\n        allMappings.set(newValue.id, newValue[field]);\n      });\n    }\n  });\n}\n\nexport function getMappings() {\n  return allMappings;\n}\n\nexport function getMapping(id) {\n  return allMappings.get(id) || null;\n}\n","export const SORT_INCREMENT = 16384;\n\nfunction midpoint(items, to) {\n  const below = items[to - 1];\n  const above = items[to];\n\n  if (!below) {\n    return above.sort_order / 2;\n  } else if (!above) {\n    return below.sort_order + SORT_INCREMENT;\n  } else {\n    return (below.sort_order + above.sort_order) / 2;\n  }\n}\n\nexport function shoveSortOrders(items, targetId) {\n  const to = items.findIndex(item => item.id === targetId);\n  const target = items[to];\n  const before = items[to - 1];\n  let updates = [];\n\n  // If no target is specified, append at the end\n  if (!targetId || to === -1) {\n    let order;\n    if (items.length > 0) {\n      // Add a new increment to whatever is the latest sort order\n      order = items[items.length - 1].sort_order + SORT_INCREMENT;\n    } else {\n      // If no items exist, the default is to use the first increment\n      order = SORT_INCREMENT;\n    }\n\n    return { updates, sort_order: order };\n  } else {\n    if (target.sort_order - (before ? before.sort_order : 0) <= 2) {\n      let next = to;\n      let order = (items[next].sort_order | 0) + SORT_INCREMENT;\n      while (next < items.length) {\n        // No need to update it if it's already greater than the current\n        // order. This can happen because there may already be large\n        // gaps\n        if (order <= items[next].sort_order) {\n          break;\n        }\n\n        updates.push({ id: items[next].id, sort_order: order });\n\n        next++;\n        order += SORT_INCREMENT;\n      }\n    }\n\n    return { updates, sort_order: midpoint(items, to) };\n  }\n}\n","export async function incrFetch(\n  runQuery,\n  terms,\n  compare,\n  makeQuery,\n  params = []\n) {\n  let pageCount = 500;\n  let results = [];\n\n  let fetchedIds = new Set();\n\n  for (let i = 0; i < terms.length; i += pageCount) {\n    let slice = terms.slice(i, i + pageCount).filter(id => !fetchedIds.has(id));\n    if (slice.length > 0) {\n      let filter = slice.map(id => compare(id)).join(' OR ');\n      let query = makeQuery('(' + filter + ')');\n\n      let rows = await runQuery(query, params, true);\n      fetchedIds = new Set([...fetchedIds, ...slice]);\n      results = results.concat(rows);\n    }\n  }\n\n  return results;\n}\n\nexport function whereIn(ids, field) {\n  let ids2 = [...new Set(ids)];\n  let filter = `${field} IN (` + ids2.map(id => `'${id}'`).join(',') + ')';\n  return filter;\n}\n","let crypto = require('crypto');\n\nlet ENCRYPTION_ALGORITHM = 'aes-256-gcm';\n\nexport async function sha256String(str) {\n  return crypto\n    .createHash('sha256')\n    .update(str)\n    .digest('base64');\n}\n\nexport function randomBytes(n) {\n  return crypto.randomBytes(n);\n}\n\nexport function encrypt(masterKey, value) {\n  let masterKeyBuffer = masterKey.getValue().raw;\n  // let iv = createKeyBuffer({ numBytes: 12, secret: masterKeyBuffer });\n  let iv = crypto.randomBytes(12);\n  let cipher = crypto.createCipheriv(ENCRYPTION_ALGORITHM, masterKeyBuffer, iv);\n  let encrypted = cipher.update(value);\n  encrypted = Buffer.concat([encrypted, cipher.final()]);\n\n  let authTag = cipher.getAuthTag();\n\n  return {\n    value: encrypted,\n    meta: {\n      keyId: masterKey.getId(),\n      algorithm: ENCRYPTION_ALGORITHM,\n      iv: iv.toString('base64'),\n      authTag: authTag.toString('base64')\n    }\n  };\n}\n\nexport function decrypt(masterKey, encrypted, meta) {\n  let masterKeyBuffer = masterKey.getValue().raw;\n  let { algorithm, iv, authTag } = meta;\n  iv = Buffer.from(iv, 'base64');\n\n  authTag = Buffer.from(authTag, 'base64');\n\n  let decipher = crypto.createDecipheriv(algorithm, masterKeyBuffer, iv);\n  decipher.setAuthTag(authTag);\n\n  let decrypted = decipher.update(encrypted);\n  decrypted = Buffer.concat([decrypted, decipher.final()]);\n  return decrypted;\n}\n\nexport function createKey({ secret, salt }) {\n  let buffer = createKeyBuffer({ secret, salt });\n  return {\n    raw: buffer,\n    base64: buffer.toString('base64')\n  };\n}\n\nexport function importKey(str) {\n  return {\n    raw: Buffer.from(str, 'base64'),\n    base64: str\n  };\n}\n\n/**\n * Generates a Buffer of a desired byte length to be used as either an encryption key or an initialization vector.\n *\n * @private\n * @param {Integer} [numBytes = 32] - Optional, number of bytes to fill the Buffer with.\n * @param {String} [secret = <random bytes>] - Optional, a secret to use as a basis for the key generation algorithm.\n * @returns {Buffer}\n */\nfunction createKeyBuffer({ numBytes, secret, salt }) {\n  return crypto.pbkdf2Sync(\n    secret || crypto.randomBytes(128).toString('base64'),\n    salt || crypto.randomBytes(32).toString('base64'),\n    10000,\n    numBytes || 32,\n    'sha512'\n  );\n}\n","import * as internals from './encryption-internals';\nlet uuid = require('../platform/uuid/index.electron.js');\n\n// A map of all possible master encryption keys to use, keyed by\n// unique id\nlet keys = {};\n\nclass Key {\n  constructor({ id, value }) {\n    this.id = id || uuid.v4Sync();\n  }\n\n  async createFromPassword({ password, salt }) {\n    this.value = await internals.createKey({ secret: password, salt });\n  }\n\n  async createFromBase64(str) {\n    this.value = await internals.importKey(str);\n  }\n\n  getId() {\n    return this.id;\n  }\n\n  getValue() {\n    return this.value;\n  }\n\n  serialize() {\n    return {\n      id: this.id,\n      base64: this.value.base64\n    };\n  }\n}\n\nfunction getKey(keyId) {\n  if (keyId == null || keys[keyId] == null) {\n    throw new Error('missing-key');\n  }\n  return keys[keyId];\n}\n\nfunction hasKey(keyId) {\n  return keyId in keys;\n}\n\nfunction encrypt(value, keyId) {\n  return internals.encrypt(getKey(keyId), value);\n}\n\nfunction decrypt(encrypted, meta) {\n  return internals.decrypt(getKey(meta.keyId), encrypted, meta);\n}\n\nfunction randomBytes(n) {\n  return internals.randomBytes(n);\n}\n\nasync function loadKey(key) {\n  let keyInstance;\n  if (!(key instanceof Key)) {\n    keyInstance = new Key({ id: key.id });\n    await keyInstance.createFromBase64(key.base64);\n  } else {\n    keyInstance = key;\n  }\n\n  keys[keyInstance.getId()] = keyInstance;\n}\n\nfunction unloadKey(key) {\n  delete keys[key.getId()];\n}\n\nfunction unloadAllKeys() {\n  keys = {};\n}\n\nasync function createKey({ id, password, salt }) {\n  let key = new Key({ id });\n  await key.createFromPassword({ password, salt });\n  return key;\n}\n\nexport default {\n  decrypt,\n  encrypt,\n  randomBytes,\n  createKey,\n  loadKey,\n  getKey,\n  hasKey,\n  unloadKey,\n  unloadAllKeys\n};\n","// TODO: normalize error types\nexport class PostError extends Error {\n  constructor(reason, meta) {\n    super('PostError: ' + reason);\n    this.type = 'PostError';\n    this.reason = reason;\n    this.meta = meta;\n  }\n}\n\nexport class HTTPError extends Error {\n  constructor(code, body) {\n    super(`HTTPError: unsuccessful status code (${code}): ${body}`);\n    this.statusCode = code;\n    this.responseBody = body;\n  }\n}\n\nexport class SyncError extends Error {\n  constructor(reason, meta) {\n    super('SyncError: ' + reason);\n    this.reason = reason;\n    this.meta = meta;\n  }\n}\n\nexport class TransactionError extends Error {\n  // eslint-disable-next-line\n  constructor(message) {\n    super(message);\n  }\n}\n\nexport class RuleError extends Error {\n  constructor(type, message) {\n    super('RuleError: ' + message);\n    this.type = type;\n  }\n}\n\nexport function APIError(msg, meta) {\n  return { type: 'APIError', message: msg, meta };\n}\n\nexport function FileDownloadError(reason, meta) {\n  return { type: 'FileDownloadError', reason, meta };\n}\n\nexport function FileUploadError(reason, meta) {\n  return { type: 'FileUploadError', reason, meta };\n}\n\nexport function isCodeError(err) {\n  return err instanceof ReferenceError || err instanceof SyntaxError;\n}\n","import { createApp } from './app';\nconst connection = require('../platform/server/connection');\n\n// Main app\nconst app = createApp();\n\napp.events.on('sync', info => {\n  connection.send('sync-event', info);\n});\n\nexport default app;\n","import './polyfills';\nimport { differenceInDays } from 'date-fns';\nimport asyncStorage from '../platform/server/asyncStorage';\nimport { captureException, captureBreadcrumb } from '../platform/exceptions';\nimport * as prefs from './prefs';\nimport fs from '../platform/server/fs';\nimport * as sqlite from '../platform/server/sqlite';\nimport logger from '../platform/server/log';\nimport Platform from './platform';\nimport * as db from './db';\nimport * as sheet from './sheet';\nimport { withUndo, clearUndo, undo, redo } from './undo';\nimport { updateVersion } from './update';\nimport { Condition, Action, rankRules } from './accounts/rules';\nimport * as rules from './accounts/transaction-rules';\nimport * as mappings from './db/mappings';\nimport { batchUpdateTransactions } from './accounts/transactions';\nimport { FIELD_TYPES as ruleFieldTypes } from '../shared/rules';\nimport {\n  getAvailableBackups,\n  loadBackup,\n  makeBackup,\n  startBackupService,\n  stopBackupService\n} from './backups';\nimport { amountToInteger, stringToInteger } from '../shared/util';\nimport * as monthUtils from '../shared/months';\nimport { fromPlaidAccountType } from '../shared/accounts';\nimport * as budget from './budget/base';\nimport * as bankSync from './accounts/sync';\nimport * as link from './accounts/link';\nimport { uniqueFileName, idFromFileName } from './util/budget-name';\nimport { mutator, runHandler } from './mutators';\nimport * as timestamp from './timestamp';\nimport * as merkle from './merkle';\nimport {\n  initialFullSync,\n  fullSync,\n  batchMessages,\n  setSyncingMode,\n  makeTestMessage,\n  clearFullSyncTimeout,\n  syncAndReceiveMessages,\n  resetSync,\n  repairSync\n} from './sync';\nimport * as syncMigrations from './sync/migrate';\nimport { getStartingBalancePayee } from './accounts/payees';\nimport { parseFile } from './accounts/parse-file';\nimport { exportToCSV, exportQueryToCSV } from './accounts/export-to-csv';\nimport { getConfig, setConfig } from './config';\nimport installAPI from './api';\nimport injectAPI from '@actual-app/api/injected';\nimport * as cloudStorage from './cloud-storage';\nimport encryption from './encryption';\nimport * as tracking from './tracking/events';\nimport { post } from './post';\nimport { APIError, TransactionError, PostError, RuleError } from './errors';\nimport { createTestBudget } from '../mocks/budget';\nimport { runQuery as aqlQuery } from './aql/schema/run-query';\nimport { Query } from '../shared/query';\nimport q from '../shared/query';\nimport app from './main-app';\n\n// Apps\nimport schedulesApp from './schedules/app';\nimport budgetApp from './budget/app';\nimport notesApp from './notes/app';\nimport toolsApp from './tools/app';\n\nconst YNAB4 = require('@actual-app/import-ynab4/importer');\nconst YNAB5 = require('@actual-app/import-ynab5/importer');\nconst uuid = require('../platform/uuid');\nconst connection = require('../platform/server/connection');\nconst { resolveName, unresolveName } = require('./spreadsheet/util');\nconst SyncPb = require('./sync/proto/sync_pb');\n\n// let indexeddb = require('../platform/server/indexeddb');\n\nlet VERSION;\nlet DEMO_BUDGET_ID = '_demo-budget';\nlet TEST_BUDGET_ID = '_test-budget';\n\n// util\n\nfunction onSheetChange({ names }) {\n  const nodes = names.map(name => {\n    let node = sheet.get()._getNode(name);\n    return { name: node.name, value: node.value };\n  });\n  connection.send('cells-changed', nodes);\n}\n\nfunction joinURL(base, ...paths) {\n  let url = new URL(base);\n  url.pathname = fs.join(paths);\n  return url.toString();\n}\n\n// handlers\n\nexport let handlers = {};\n\nhandlers['undo'] = mutator(async function() {\n  return undo();\n});\n\nhandlers['redo'] = mutator(function() {\n  return redo();\n});\n\nhandlers['transactions-batch-update'] = mutator(async function({\n  added,\n  deleted,\n  updated,\n  learnCategories\n}) {\n  return withUndo(async () => {\n    let result = await batchUpdateTransactions({\n      added,\n      updated,\n      deleted,\n      learnCategories\n    });\n\n    // Return all data updates to the frontend\n    return result.updated;\n  });\n});\n\nhandlers['transaction-add'] = mutator(async function(transaction) {\n  await handlers['transactions-batch-update']({ added: [transaction] });\n  return {};\n});\n\nhandlers['transaction-update'] = mutator(async function(transaction) {\n  await handlers['transactions-batch-update']({ updated: [transaction] });\n  return {};\n});\n\nhandlers['transaction-delete'] = mutator(async function(transaction) {\n  await handlers['transactions-batch-update']({ deleted: [transaction] });\n  return {};\n});\n\nhandlers['transactions-filter'] = async function({\n  term,\n  accountId,\n  latestDate,\n  count,\n  notPaged,\n  options = {}\n}) {\n  return db.getTransactions(\n    term,\n    accountId,\n    latestDate,\n    notPaged ? null : count == null ? undefined : count,\n    options\n  );\n};\n\nhandlers['transactions-parse-file'] = async function({ filepath, options }) {\n  return parseFile(filepath, options);\n};\n\nhandlers['transactions-export'] = async function({\n  transactions,\n  accounts,\n  categoryGroups,\n  payees\n}) {\n  return exportToCSV(transactions, accounts, categoryGroups, payees);\n};\n\nhandlers['transactions-export-query'] = async function({ query: queryState }) {\n  return exportQueryToCSV(new Query(queryState));\n};\n\nhandlers['get-categories'] = async function() {\n  return {\n    grouped: await db.getCategoriesGrouped(),\n    list: await db.getCategories()\n  };\n};\n\nhandlers['get-earliest-transaction'] = async function() {\n  let { data } = await aqlQuery(\n    q('transactions')\n      .options({ splits: 'none' })\n      .orderBy({ date: 'asc' })\n      .select('*')\n      .limit(1)\n  );\n  return data[0] || null;\n};\n\nhandlers['get-budget-bounds'] = async function() {\n  return budget.createAllBudgets();\n};\n\nhandlers['rollover-budget-month'] = async function({ month }) {\n  let groups = await db.getCategoriesGrouped();\n  let sheetName = monthUtils.sheetForMonth(month);\n\n  function value(name) {\n    let v = sheet.getCellValue(sheetName, name);\n    return { value: v === '' ? 0 : v, name: resolveName(sheetName, name) };\n  }\n\n  let values = [\n    value('available-funds'),\n    value('last-month-overspent'),\n    value('buffered'),\n    value('total-budgeted'),\n    value('to-budget'),\n\n    value('from-last-month'),\n    value('total-income'),\n    value('total-spent'),\n    value('total-leftover')\n  ];\n\n  for (let group of groups) {\n    if (group.is_income) {\n      values.push(value('total-income'));\n\n      for (let cat of group.categories) {\n        values.push(value(`sum-amount-${cat.id}`));\n      }\n    } else {\n      values = values.concat([\n        value(`group-budget-${group.id}`),\n        value(`group-sum-amount-${group.id}`),\n        value(`group-leftover-${group.id}`)\n      ]);\n\n      for (let cat of group.categories) {\n        values = values.concat([\n          value(`budget-${cat.id}`),\n          value(`sum-amount-${cat.id}`),\n          value(`leftover-${cat.id}`),\n          value(`carryover-${cat.id}`)\n        ]);\n      }\n    }\n  }\n\n  return values;\n};\n\nhandlers['report-budget-month'] = async function({ month }) {\n  let groups = await db.getCategoriesGrouped();\n  let sheetName = monthUtils.sheetForMonth(month);\n\n  function value(name) {\n    let v = sheet.getCellValue(sheetName, name);\n    return { value: v === '' ? 0 : v, name: resolveName(sheetName, name) };\n  }\n\n  let values = [\n    value('total-budgeted'),\n    value('total-budget-income'),\n    value('total-saved'),\n    value('total-income'),\n    value('total-spent'),\n    value('real-saved'),\n    value('total-leftover')\n  ];\n\n  for (let group of groups) {\n    values = values.concat([\n      value(`group-budget-${group.id}`),\n      value(`group-sum-amount-${group.id}`),\n      value(`group-leftover-${group.id}`)\n    ]);\n\n    for (let cat of group.categories) {\n      values = values.concat([\n        value(`budget-${cat.id}`),\n        value(`sum-amount-${cat.id}`),\n        value(`leftover-${cat.id}`)\n      ]);\n\n      if (!group.is_income) {\n        values.push(value(`carryover-${cat.id}`));\n      }\n    }\n  }\n\n  return values;\n};\n\nhandlers['budget-set-type'] = async function({ type }) {\n  if (type !== 'rollover' && type !== 'report') {\n    throw new Error('Invalid budget type: ' + type);\n  }\n\n  // It's already the same; don't do anything\n  if (type === prefs.getPrefs().budgetType) {\n    return;\n  }\n\n  // Save prefs\n  return prefs.savePrefs({ budgetType: type });\n};\n\nhandlers['category-create'] = mutator(async function({\n  name,\n  groupId,\n  isIncome\n}) {\n  return withUndo(async () => {\n    if (!groupId) {\n      throw APIError('Creating a category: groupId is required');\n    }\n\n    return db.insertCategory({\n      name,\n      cat_group: groupId,\n      is_income: isIncome ? 1 : 0\n    });\n  });\n});\n\nhandlers['category-update'] = mutator(async function(category) {\n  return withUndo(async () => {\n    try {\n      await db.updateCategory(category);\n    } catch (e) {\n      if (e.message.toLowerCase().includes('unique constraint')) {\n        return { error: { type: 'category-exists' } };\n      }\n      throw e;\n    }\n    return {};\n  });\n});\n\nhandlers['category-move'] = mutator(async function({ id, groupId, targetId }) {\n  return withUndo(async () => {\n    await batchMessages(async () => {\n      await db.moveCategory(id, groupId, targetId);\n    });\n    return 'ok';\n  });\n});\n\nhandlers['category-delete'] = mutator(async function({ id, transferId }) {\n  return withUndo(async () => {\n    let result = {};\n    await batchMessages(async () => {\n      let row = await db.first(\n        'SELECT is_income FROM categories WHERE id = ?',\n        [id]\n      );\n      if (!row) {\n        result = { error: 'no-categories' };\n        return;\n      }\n\n      let transfer =\n        transferId &&\n        (await db.first('SELECT is_income FROM categories WHERE id = ?', [\n          transferId\n        ]));\n\n      if (!row || (transferId && !transfer)) {\n        result = { error: 'no-categories' };\n        return;\n      } else if (transferId && row.is_income !== transfer.is_income) {\n        result = { error: 'category-type' };\n        return;\n      }\n\n      // Update spreadsheet values if it's an expense category\n      // TODO: We should do this for income too if it's a reflect budget\n      if (row.is_income === 0) {\n        if (transferId) {\n          await budget.doTransfer([id], transferId);\n        }\n      }\n\n      await db.deleteCategory({ id }, transferId);\n    });\n\n    return result;\n  });\n});\n\nhandlers['category-group-create'] = mutator(async function({ name, isIncome }) {\n  return withUndo(async () => {\n    return db.insertCategoryGroup({\n      name,\n      is_income: isIncome ? 1 : 0\n    });\n  });\n});\n\nhandlers['category-group-update'] = mutator(async function(group) {\n  return withUndo(async () => {\n    return db.updateCategoryGroup(group);\n  });\n});\n\nhandlers['category-group-move'] = mutator(async function({ id, targetId }) {\n  return withUndo(async () => {\n    await batchMessages(async () => {\n      await db.moveCategoryGroup(id, targetId);\n    });\n    return 'ok';\n  });\n});\n\nhandlers['category-group-delete'] = mutator(async function({ id, transferId }) {\n  return withUndo(async () => {\n    const groupCategories = await db.all(\n      'SELECT id FROM categories WHERE cat_group = ? AND tombstone = 0',\n      [id]\n    );\n\n    return batchMessages(async () => {\n      if (transferId) {\n        await budget.doTransfer(groupCategories.map(c => c.id), transferId);\n      }\n      await db.deleteCategoryGroup({ id }, transferId);\n    });\n  });\n});\n\nhandlers['must-category-transfer'] = async function({ id }) {\n  const res = await db.runQuery(\n    `SELECT count(t.id) as count FROM transactions t\n       LEFT JOIN category_mapping cm ON cm.id = t.category\n       WHERE cm.transferId = ? AND t.tombstone = 0`,\n    [id],\n    true\n  );\n\n  // If there are transactions with this category, return early since\n  // we already know it needs to be tranferred\n  if (res[0].count !== 0) {\n    return true;\n  }\n\n  // If there are any non-zero budget values, also force the user to\n  // transfer the category.\n  return [...sheet.get().meta().createdMonths].some(month => {\n    const sheetName = monthUtils.sheetForMonth(month);\n    const value = sheet.get().getCellValue(sheetName, 'budget-' + id);\n\n    return value !== 0;\n  });\n};\n\nhandlers['payee-create'] = mutator(async function({ name }) {\n  return withUndo(async () => {\n    return db.insertPayee({ name });\n  });\n});\n\nhandlers['payees-get'] = async function() {\n  return db.getPayees();\n};\n\nhandlers['payees-get-rule-counts'] = async function() {\n  let payeeCounts = {};\n  let allRules = rules.getRules();\n\n  rules.iterateIds(rules.getRules(), 'payee', (rule, id) => {\n    if (payeeCounts[id] == null) {\n      payeeCounts[id] = 0;\n    }\n    payeeCounts[id]++;\n  });\n\n  return payeeCounts;\n};\n\nhandlers['payees-merge'] = mutator(async function({ targetId, mergeIds }) {\n  return withUndo(\n    async () => {\n      return db.mergePayees(targetId, mergeIds);\n    },\n    { targetId, mergeIds }\n  );\n});\n\nhandlers['payees-batch-change'] = mutator(async function({\n  added,\n  deleted,\n  updated\n}) {\n  return withUndo(async () => {\n    return batchMessages(async () => {\n      if (deleted) {\n        await Promise.all(deleted.map(p => db.deletePayee(p)));\n      }\n\n      if (added) {\n        await Promise.all(added.map(p => db.insertPayee(p)));\n      }\n\n      if (updated) {\n        await Promise.all(updated.map(p => db.updatePayee(p)));\n      }\n    });\n  });\n});\n\nhandlers['payees-check-orphaned'] = async function({ ids }) {\n  let orphaned = new Set(await db.getOrphanedPayees());\n  return ids.filter(id => orphaned.has(id));\n};\n\nhandlers['payees-get-rules'] = async function({ id }) {\n  return rules.getRulesForPayee(id).map(rule => rule.serialize());\n};\n\nhandlers['payees-delete-rule'] = mutator(async function({ id, payee_id }) {\n  return withUndo(\n    async () => {\n      return await db.deletePayeeRule({ id });\n    },\n    { payeeId: payee_id }\n  );\n});\n\nhandlers['payees-update-rule'] = mutator(async function(rule) {\n  return withUndo(\n    async () => {\n      return await db.updatePayeeRule(rule);\n    },\n    { payeeId: rule.payee_id }\n  );\n});\n\nhandlers['payees-add-rule'] = mutator(async function(rule) {\n  return withUndo(\n    async () => {\n      let id = await db.insertPayeeRule(rule);\n      return { ...rule, id };\n    },\n    { payeeId: rule.payee_id }\n  );\n});\n\nfunction validateRule(rule) {\n  // Returns an array of errors, the array is the same link as the\n  // passed-in `array`, or null if there are no errors\n  function runValidation(array, validate) {\n    let result = array.map(item => {\n      try {\n        validate(item);\n      } catch (e) {\n        if (e instanceof RuleError) {\n          console.warn('Invalid rule', e);\n          return e.type;\n        }\n        throw e;\n      }\n      return null;\n    });\n\n    return result.some(Boolean) ? result : null;\n  }\n\n  let conditionErrors = runValidation(\n    rule.conditions,\n    cond =>\n      new Condition(\n        cond.op,\n        cond.field,\n        cond.value,\n        cond.options,\n        ruleFieldTypes\n      )\n  );\n\n  let actionErrors = runValidation(\n    rule.actions,\n    action =>\n      new Action(\n        action.op,\n        action.field,\n        action.value,\n        action.options,\n        ruleFieldTypes\n      )\n  );\n\n  if (conditionErrors || actionErrors) {\n    return {\n      conditionErrors,\n      actionErrors\n    };\n  }\n\n  return null;\n}\n\nhandlers['rule-validate'] = async function(rule) {\n  let error = validateRule(rule);\n  return { error };\n};\n\nhandlers['rule-add'] = mutator(async function(rule) {\n  let error = validateRule(rule);\n  if (error) {\n    return { error };\n  }\n\n  let id = await rules.insertRule(rule);\n  return { id };\n});\n\nhandlers['rule-update'] = mutator(async function(rule) {\n  let error = validateRule(rule);\n  if (error) {\n    return { error };\n  }\n\n  await rules.updateRule(rule);\n  return {};\n});\n\nhandlers['rule-delete'] = mutator(async function(rule) {\n  return rules.deleteRule(rule);\n});\n\nhandlers['rule-delete-all'] = mutator(async function(ids) {\n  let someDeletionsFailed = false;\n\n  await batchMessages(async () => {\n    for (let id of ids) {\n      let res = await rules.deleteRule({ id });\n      if (res === false) {\n        someDeletionsFailed = true;\n      }\n    }\n  });\n\n  return { someDeletionsFailed };\n});\n\nhandlers['rule-apply-actions'] = mutator(async function({\n  transactionIds,\n  actions\n}) {\n  return rules.applyActions(transactionIds, actions, handlers);\n});\n\nhandlers['rule-add-payee-rename'] = mutator(async function({ fromNames, to }) {\n  return rules.updatePayeeRenameRule(fromNames, to);\n});\n\nhandlers['rules-get'] = async function() {\n  return rankRules(rules.getRules()).map(rule => rule.serialize());\n};\n\nhandlers['rule-get'] = async function({ id }) {\n  let rule = rules.getRules().find(rule => rule.id === id);\n  return rule ? rule.serialize() : null;\n};\n\nhandlers['rules-run'] = async function({ transaction }) {\n  return rules.runRules(transaction);\n};\n\nhandlers['rules-migrate'] = async function() {\n  await rules.migrateOldRules();\n};\n\nhandlers['make-filters-from-conditions'] = async function({ conditions }) {\n  return rules.conditionsToAQL(conditions);\n};\n\nhandlers['getCell'] = async function({ sheetName, name }) {\n  // Fields is no longer used - hardcode\n  let fields = ['name', 'value'];\n  let node = sheet.get()._getNode(resolveName(sheetName, name));\n  if (fields) {\n    let res = {};\n    fields.forEach(field => {\n      if (field === 'run') {\n        res[field] = node._run ? node._run.toString() : null;\n      } else {\n        res[field] = node[field];\n      }\n    });\n    return res;\n  } else {\n    return node;\n  }\n};\n\nhandlers['getCells'] = async function({ names }) {\n  return names.map(name => ({ value: sheet.get()._getNode(name).value }));\n};\n\nhandlers['getCellNamesInSheet'] = async function({ sheetName }) {\n  let names = [];\n  for (let name of sheet\n    .get()\n    .getNodes()\n    .keys()) {\n    let { sheet: nodeSheet, name: nodeName } = unresolveName(name);\n    if (nodeSheet === sheetName) {\n      names.push(nodeName);\n    }\n  }\n  return names;\n};\n\nhandlers['debugCell'] = async function({ sheetName, name }) {\n  let node = sheet.get().getNode(resolveName(sheetName, name));\n  return {\n    ...node,\n    _run: node._run && node._run.toString()\n  };\n};\n\nhandlers['create-query'] = async function({ sheetName, name, query }) {\n  // Always run it regardless of cache. We don't know anything has changed\n  // between the cache value being saved and now\n  sheet.get().createQuery(sheetName, name, query);\n  return 'ok';\n};\n\nhandlers['query'] = async function(query) {\n  if (query.table == null) {\n    throw new Error('query has no table, did you forgot to call `.serialize`?');\n  }\n\n  return aqlQuery(query);\n};\n\nhandlers['bank-delete'] = async function({ id }) {\n  const accts = await db.runQuery(\n    'SELECT * FROM accounts WHERE bank = ?',\n    [id],\n    true\n  );\n\n  await db.delete_('banks', id);\n  await Promise.all(\n    accts.map(async acct => {\n      // TODO: This will not sync across devices because we are bypassing\n      // the \"recorded\" functions\n      await db.runQuery('DELETE FROM transactions WHERE acct = ?', [acct.id]);\n      await db.delete_('accounts', acct.id);\n    })\n  );\n  return 'ok';\n};\n\nhandlers['account-update'] = mutator(async function({ id, name }) {\n  return withUndo(async () => {\n    await db.update('accounts', { id, name });\n    return {};\n  });\n});\n\nhandlers['accounts-get'] = async function() {\n  return db.getAccounts();\n};\n\nhandlers['account-properties'] = async function({ id }) {\n  const { balance } = await db.first(\n    'SELECT sum(amount) as balance FROM transactions WHERE acct = ? AND isParent = 0 AND tombstone = 0',\n    [id]\n  );\n  const { count } = await db.first(\n    'SELECT count(id) as count FROM transactions WHERE acct = ? AND tombstone = 0',\n    [id]\n  );\n\n  return { balance: balance || 0, numTransactions: count };\n};\n\nhandlers['accounts-link'] = async function({\n  institution,\n  publicToken,\n  accountId,\n  upgradingId\n}) {\n  let bankId = await link.handoffPublicToken(institution, publicToken);\n\n  let [[, userId], [, userKey]] = await asyncStorage.multiGet([\n    'user-id',\n    'user-key'\n  ]);\n\n  // Get all the available accounts and find the selected one\n  let accounts = await bankSync.getAccounts(userId, userKey, bankId);\n  let account = accounts.find(acct => acct.account_id === accountId);\n\n  await db.update('accounts', {\n    id: upgradingId,\n    account_id: account.account_id,\n    official_name: account.official_name,\n    type: fromPlaidAccountType(account.type),\n    balance_current: amountToInteger(account.balances.current),\n    balance_available: amountToInteger(account.balances.available),\n    balance_limit: amountToInteger(account.balances.limit),\n    mask: account.mask,\n    bank: bankId\n  });\n\n  await bankSync.syncAccount(\n    userId,\n    userKey,\n    upgradingId,\n    account.account_id,\n    bankId\n  );\n\n  connection.send('sync-event', {\n    type: 'success',\n    tables: ['transactions']\n  });\n\n  return 'ok';\n};\n\nhandlers['accounts-connect'] = async function({\n  institution,\n  publicToken,\n  accountIds,\n  offbudgetIds\n}) {\n  let bankId = await link.handoffPublicToken(institution, publicToken);\n  let ids = await link.addAccounts(bankId, accountIds, offbudgetIds);\n  return ids;\n};\n\nhandlers['account-create'] = mutator(async function({\n  name,\n  type,\n  balance,\n  offBudget,\n  closed\n}) {\n  return withUndo(async () => {\n    const id = await db.insertAccount({\n      name,\n      type,\n      offbudget: offBudget ? 1 : 0,\n      closed: closed ? 1 : 0\n    });\n\n    await db.insertPayee({\n      name: '',\n      transfer_acct: id\n    });\n\n    if (balance != null) {\n      let payee = await getStartingBalancePayee();\n\n      await db.insertTransaction({\n        account: id,\n        amount: amountToInteger(balance),\n        category: offBudget ? null : payee.category,\n        payee: payee.id,\n        date: monthUtils.currentDay(),\n        cleared: true,\n        starting_balance_flag: true\n      });\n    }\n\n    return id;\n  });\n});\n\nhandlers['account-close'] = mutator(async function({\n  id,\n  transferAccountId,\n  categoryId,\n  forced\n}) {\n  // Unlink the account if it's linked. This makes sure to remove it\n  // from Plaid. (This should not be undo-able, as it mutates the\n  // remote server and the user will have to link the account again)\n  await handlers['account-unlink']({ id });\n\n  return withUndo(async () => {\n    let account = await db.first(\n      'SELECT * FROM accounts WHERE id = ? AND tombstone = 0',\n      [id]\n    );\n\n    // Do nothing if the account doesn't exist or it's already been\n    // closed\n    if (!account || account.closed === 1) {\n      return;\n    }\n\n    const { balance, numTransactions } = await handlers['account-properties']({\n      id\n    });\n\n    // If there are no transactions, we can simply delete the account\n    if (numTransactions === 0) {\n      await db.deleteAccount({ id });\n    } else if (forced) {\n      let rows = await db.runQuery(\n        'SELECT id, transfer_id FROM v_transactions WHERE account = ?',\n        [id],\n        true\n      );\n\n      let { id: payeeId } = await db.first(\n        'SELECT id FROM payees WHERE transfer_acct = ?',\n        [id]\n      );\n\n      await batchMessages(() => {\n        // TODO: what this should really do is send a special message that\n        // automatically marks the tombstone value for all transactions\n        // within an account... or something? This is problematic\n        // because another client could easily add new data that\n        // should be marked as deleted.\n\n        rows.forEach(row => {\n          if (row.transfer_id) {\n            db.updateTransaction({\n              id: row.transfer_id,\n              payee: null,\n              transfer_id: null\n            });\n          }\n\n          db.deleteTransaction({ id: row.id });\n        });\n\n        db.deleteAccount({ id });\n        db.deleteTransferPayee({ id: payeeId });\n      });\n    } else {\n      if (balance !== 0 && transferAccountId == null) {\n        throw APIError('balance is non-zero: transferAccountId is required');\n      }\n\n      await db.update('accounts', { id, closed: 1 });\n\n      // If there is a balance we need to transfer it to the specified\n      // account (and possibly categorize it)\n      if (balance !== 0) {\n        let { id: payeeId } = await db.first(\n          'SELECT id FROM payees WHERE transfer_acct = ?',\n          [transferAccountId]\n        );\n\n        await handlers['transaction-add']({\n          id: uuid.v4Sync(),\n          payee: payeeId,\n          amount: -balance,\n          account: id,\n          date: monthUtils.currentDay(),\n          notes: 'Closing account',\n          category: categoryId || null\n        });\n      }\n    }\n  });\n});\n\nhandlers['account-reopen'] = mutator(async function({ id }) {\n  return withUndo(async () => {\n    await db.update('accounts', { id, closed: 0 });\n  });\n});\n\nhandlers['account-move'] = mutator(async function({ id, targetId }) {\n  return withUndo(async () => {\n    await db.moveAccount(id, targetId);\n  });\n});\n\nlet stopPolling = false;\n\nhandlers['poll-web-token'] = async function({ token }) {\n  let [[, userId], [, key]] = await asyncStorage.multiGet([\n    'user-id',\n    'user-key'\n  ]);\n\n  let startTime = Date.now();\n  stopPolling = false;\n\n  async function getData(cb) {\n    if (stopPolling) {\n      return;\n    }\n\n    if (Date.now() - startTime >= 1000 * 60 * 10) {\n      cb('timeout');\n      return;\n    }\n\n    let data = await post(\n      getConfig().PLAID_SERVER + '/get-web-token-contents',\n      {\n        userId,\n        key,\n        token\n      }\n    );\n\n    if (data) {\n      if (data.error) {\n        cb('unknown');\n      } else {\n        cb(null, data);\n      }\n    } else {\n      setTimeout(() => getData(cb), 3000);\n    }\n  }\n\n  return new Promise(resolve => {\n    getData((error, data) => {\n      if (error) {\n        resolve({ error });\n      } else {\n        resolve({ data });\n      }\n    });\n  });\n};\n\nhandlers['poll-web-token-stop'] = async function() {\n  stopPolling = true;\n  return 'ok';\n};\n\nhandlers['accounts-sync'] = async function({ id }) {\n  let [[, userId], [, userKey]] = await asyncStorage.multiGet([\n    'user-id',\n    'user-key'\n  ]);\n  let accounts = await db.runQuery(\n    `SELECT a.*, b.id as bankId FROM accounts a\n         LEFT JOIN banks b ON a.bank = b.id\n         WHERE a.tombstone = 0 AND a.closed = 0`,\n    [],\n    true\n  );\n\n  if (id) {\n    accounts = accounts.filter(acct => acct.id === id);\n  }\n\n  let errors = [];\n  let newTransactions = [];\n  let matchedTransactions = [];\n  let updatedAccounts = [];\n\n  let { groupId } = prefs.getPrefs();\n\n  for (var i = 0; i < accounts.length; i++) {\n    const acct = accounts[i];\n    if (acct.bankId) {\n      try {\n        const res = await bankSync.syncAccount(\n          userId,\n          userKey,\n          acct.id,\n          acct.account_id,\n          acct.bankId\n        );\n        let { added, updated } = res;\n\n        newTransactions = newTransactions.concat(added);\n        matchedTransactions = matchedTransactions.concat(updated);\n\n        if (added.length > 0 || updated.length > 0) {\n          updatedAccounts = updatedAccounts.concat(acct.id);\n        }\n      } catch (err) {\n        if (err.type === 'BankSyncError') {\n          errors.push({\n            type: 'SyncError',\n            accountId: acct.id,\n            message: 'Failed syncing account \"' + acct.name + '\".',\n            category: err.category,\n            code: err.code\n          });\n        } else if (err instanceof PostError && err.reason !== 'internal') {\n          errors.push({\n            accountId: acct.id,\n            message: `Account \"${\n              acct.name\n            }\" is not linked properly. Please link it again`\n          });\n        } else {\n          errors.push({\n            accountId: acct.id,\n            message:\n              'There was an internal error. Please email help@actualbudget.com for support.',\n            internal: err.stack\n          });\n\n          err.message = 'Failed syncing account: ' + err.message;\n\n          captureException(err);\n        }\n      }\n    }\n  }\n\n  if (updatedAccounts.length > 0) {\n    connection.send('sync-event', {\n      type: 'success',\n      tables: ['transactions']\n    });\n  }\n\n  return { errors, newTransactions, matchedTransactions, updatedAccounts };\n};\n\nhandlers['transactions-import'] = mutator(function({\n  accountId,\n  transactions\n}) {\n  return withUndo(async () => {\n    if (typeof accountId !== 'string') {\n      throw APIError('transactions-import: accountId must be an id');\n    }\n\n    try {\n      return await bankSync.reconcileTransactions(accountId, transactions);\n    } catch (err) {\n      if (err instanceof TransactionError) {\n        return { errors: [{ message: err.message }], added: [], updated: [] };\n      }\n\n      throw err;\n    }\n  });\n});\n\nhandlers['account-unlink'] = mutator(async function({ id }) {\n  let { bank: bankId } = await db.first(\n    'SELECT bank FROM accounts WHERE id = ?',\n    [id]\n  );\n\n  if (!bankId) {\n    return 'ok';\n  }\n\n  await db.updateAccount({\n    id,\n    account_id: null,\n    bank: null,\n    balance_current: null,\n    balance_available: null,\n    balance_limit: null\n  });\n\n  let { count } = await db.first(\n    'SELECT COUNT(*) as count FROM accounts WHERE bank = ?',\n    [bankId]\n  );\n\n  if (count === 0) {\n    // No more accounts are associated with this bank. We can remove\n    // it from Plaid.\n\n    let [[, userId], [, key]] = await asyncStorage.multiGet([\n      'user-id',\n      'user-key'\n    ]);\n\n    await post(getConfig().PLAID_SERVER + '/remove-access-token', {\n      userId,\n      key,\n      item_id: bankId\n    });\n  }\n\n  return 'ok';\n});\n\nhandlers['make-plaid-public-token'] = async function({ bankId }) {\n  let [[, userId], [, userKey]] = await asyncStorage.multiGet([\n    'user-id',\n    'user-key'\n  ]);\n\n  let data = await post(getConfig().PLAID_SERVER + '/make-public-token', {\n    userId: userId,\n    key: userKey,\n    item_id: '' + bankId\n  });\n\n  if (data.error_code) {\n    return { error: '', code: data.error_code, type: data.error_type };\n  }\n\n  return { linkToken: data.link_token };\n};\n\nhandlers['save-global-prefs'] = async function(prefs) {\n  if ('maxMonths' in prefs) {\n    await asyncStorage.setItem('max-months', '' + prefs.maxMonths);\n  }\n  if ('trackUsage' in prefs) {\n    tracking.toggle(prefs.trackUsage);\n    await asyncStorage.setItem('track-usage', '' + prefs.trackUsage);\n  }\n  if ('autoUpdate' in prefs) {\n    await asyncStorage.setItem('auto-update', '' + prefs.autoUpdate);\n    process.send({ type: 'shouldAutoUpdate', flag: prefs.autoUpdate });\n  }\n  if ('documentDir' in prefs) {\n    if (await fs.exists(prefs.documentDir)) {\n      await asyncStorage.setItem('document-dir', prefs.documentDir);\n    }\n  }\n  if ('floatingSidebar' in prefs) {\n    await asyncStorage.setItem('floating-sidebar', '' + prefs.floatingSidebar);\n  }\n  return 'ok';\n};\n\nhandlers['load-global-prefs'] = async function() {\n  let [\n    [, floatingSidebar],\n    [, seenTutorial],\n    [, maxMonths],\n    [, trackUsage],\n    [, autoUpdate],\n    [, documentDir],\n    [, encryptKey]\n  ] = await asyncStorage.multiGet([\n    'floating-sidebar',\n    'seen-tutorial',\n    'max-months',\n    'track-usage',\n    'auto-update',\n    'document-dir',\n    'encrypt-key'\n  ]);\n  return {\n    floatingSidebar: floatingSidebar === 'true' ? true : false,\n    seenTutorial: seenTutorial === 'true' ? true : false,\n    maxMonths: stringToInteger(maxMonths || ''),\n    // Default to true\n    trackUsage: trackUsage == null || trackUsage === 'true' ? true : false,\n    autoUpdate: autoUpdate == null || autoUpdate === 'true' ? true : false,\n    documentDir: documentDir || getDefaultDocumentDir(),\n    keyId: encryptKey && JSON.parse(encryptKey).id\n  };\n};\n\nhandlers['save-prefs'] = async function(prefsToSet) {\n  let { cloudFileId } = prefs.getPrefs();\n\n  // Need to sync the budget name on the server as well\n  if (prefsToSet.budgetName && cloudFileId) {\n    let userToken = await asyncStorage.getItem('user-token');\n\n    await post(getConfig().SYNC_SERVER + '/update-user-filename', {\n      token: userToken,\n      fileId: cloudFileId,\n      name: prefsToSet.budgetName\n    });\n  }\n\n  await prefs.savePrefs(prefsToSet);\n  return 'ok';\n};\n\nhandlers['load-prefs'] = async function() {\n  return prefs.getPrefs();\n};\n\nhandlers['sync-reset'] = async function() {\n  return await resetSync();\n};\n\nhandlers['sync-repair'] = async function() {\n  await repairSync();\n};\n\n// A user can only enable/change their key with the file loaded. This\n// will change in the future: during onboarding the user should be\n// able to enable encryption. (Imagine if they are importing data from\n// another source, they should be able to encrypt first)\nhandlers['key-make'] = async function({ password }) {\n  if (!prefs.getPrefs()) {\n    throw new Error('user-set-key must be called with file loaded');\n  }\n\n  let cloudFileId = prefs.getPrefs().cloudFileId;\n\n  let salt = encryption.randomBytes(32).toString('base64');\n  let id = uuid.v4Sync();\n  let key = await encryption.createKey({ id, password, salt });\n\n  // Load the key\n  await encryption.loadKey(key);\n\n  // Make some test data to use if the key is valid or not\n  let testContent = await makeTestMessage(key.getId());\n\n  // Changing your key necessitates a sync reset as well. This will\n  // clear all existing encrypted data from the server so you won't\n  // have a mix of data encrypted with different keys.\n  return await resetSync({\n    key,\n    salt,\n    testContent: JSON.stringify({\n      ...testContent,\n      value: testContent.value.toString('base64')\n    })\n  });\n};\n\n// This can be called both while a file is already loaded or not. This\n// will see if a key is valid and if so save it off.\nhandlers['key-test'] = async function({ fileId, password }) {\n  let userToken = await asyncStorage.getItem('user-token');\n\n  if (fileId == null) {\n    fileId = prefs.getPrefs().cloudFileId;\n  }\n\n  let res;\n  try {\n    res = await post(getConfig().SYNC_SERVER + '/user-get-key', {\n      token: userToken,\n      fileId\n    });\n  } catch (e) {\n    console.log(e);\n    return { error: { reason: 'network' } };\n  }\n\n  let { id, salt, test } = res;\n\n  if (test == null) {\n    return { error: { reason: 'old-key-style' } };\n  }\n\n  test = JSON.parse(test);\n\n  let key = await encryption.createKey({ id, password, salt });\n  encryption.loadKey(key);\n\n  try {\n    await encryption.decrypt(Buffer.from(test.value, 'base64'), test.meta);\n  } catch (e) {\n    console.log(e);\n\n    // Unload the key, it's invalid\n    encryption.unloadKey(key);\n    return { error: { reason: 'decrypt-failure' } };\n  }\n\n  // Persist key in async storage\n  let keys = JSON.parse((await asyncStorage.getItem(`encrypt-keys`)) || '{}');\n  keys[fileId] = key.serialize();\n  await asyncStorage.setItem('encrypt-keys', JSON.stringify(keys));\n\n  // Save the key id in prefs if the are loaded. If they aren't, we\n  // are testing a key to download a file and when the file is\n  // actually downloaded it will update the prefs with the latest key id\n  if (prefs.getPrefs()) {\n    await prefs.savePrefs({ encryptKeyId: key.getId() });\n  }\n\n  return {};\n};\n\nhandlers['should-pitch-subscribe'] = async function() {\n  let seenSubscribe = await asyncStorage.getItem('seenSubscribe');\n  return seenSubscribe !== 'true';\n};\n\nhandlers['has-pitched-subscribe'] = async function() {\n  await asyncStorage.setItem('seenSubscribe', 'true');\n  return 'ok';\n};\n\nhandlers['subscribe-set-user'] = async function({ token }) {\n  await asyncStorage.setItem('user-token', token);\n};\n\nhandlers['subscribe-get-user'] = async function() {\n  let userToken = await asyncStorage.getItem('user-token');\n\n  if (userToken) {\n    try {\n      let res = await post(getConfig().SIGNUP_SERVER + '/account', {\n        token: userToken\n      });\n\n      return { offline: false };\n    } catch (e) {\n      // The server responded successfully, but the user isn't found.\n      // Could be a server problem, but most likely in development we\n      // are switching between staging/prod\n      if (e.reason === 'unauthorized') {\n        return null;\n      }\n\n      // Worse case, return the user id so the frontend knows the user\n      // has been logged in.\n      return { offline: true };\n    }\n  }\n\n  return null;\n};\n\nhandlers['subscribe-sign-in'] = async function({ password }) {\n  let res = await post(getConfig().SIGNUP_SERVER + '/login', {\n    password\n  });\n\n  if (res.token) {\n    await asyncStorage.setItem('user-token', res.token);\n    return {};\n  }\n\n  return { error: 'invalid-password' };\n};\n\nhandlers['subscribe-sign-out'] = async function() {\n  encryption.unloadAllKeys();\n  await asyncStorage.multiRemove([\n    'user-token',\n    'encrypt-keys',\n    'lastBudget',\n    'readOnly'\n  ]);\n  return 'ok';\n};\n\nhandlers['sync'] = async function() {\n  return fullSync();\n};\n\nhandlers['get-version'] = async function() {\n  return { version: VERSION };\n};\n\nhandlers['get-budgets'] = async function() {\n  const paths = await fs.listDir(fs.getDocumentDir());\n  const budgets = (await Promise.all(\n    paths.map(async name => {\n      const prefsPath = fs.join(fs.getDocumentDir(), name, 'metadata.json');\n      if (await fs.exists(prefsPath)) {\n        let prefs;\n        try {\n          prefs = JSON.parse(await fs.readFile(prefsPath));\n        } catch (e) {\n          console.log('Error parsing metadata:', e.stack);\n          return;\n        }\n\n        // We treat the directory name as the canonical id so that if\n        // the user moves it around/renames/etc, nothing breaks. The\n        // id is stored in prefs just for convenience (and the prefs\n        // will always update to the latest given id)\n        if (name !== DEMO_BUDGET_ID) {\n          return {\n            id: name,\n            cloudFileId: prefs.cloudFileId,\n            groupId: prefs.groupId,\n            name: prefs.budgetName || '(no name)'\n          };\n        }\n      }\n\n      return null;\n    })\n  )).filter(x => x);\n\n  return budgets;\n};\n\nhandlers['get-ynab4-files'] = async function() {\n  return YNAB4.findBudgets();\n};\n\nhandlers['get-remote-files'] = async function() {\n  return cloudStorage.listRemoteFiles();\n};\n\nhandlers['reset-budget-cache'] = mutator(async function() {\n  // Recomputing everything will update the cache\n  await sheet.loadUserBudgets(db);\n  sheet.get().recomputeAll();\n  await sheet.waitOnSpreadsheet();\n});\n\nhandlers['upload-budget'] = async function({ id } = {}) {\n  if (id) {\n    if (prefs.getPrefs()) {\n      throw new Error('upload-budget: id given but prefs already loaded');\n    }\n\n    await prefs.loadPrefs(id);\n  }\n\n  try {\n    await cloudStorage.upload();\n  } catch (e) {\n    console.log(e);\n    if (e.type === 'FileUploadError') {\n      return { error: e };\n    }\n    captureException(e);\n    return { error: { reason: 'internal' } };\n  } finally {\n    if (id) {\n      prefs.unloadPrefs();\n    }\n  }\n\n  return {};\n};\n\nhandlers['download-budget'] = async function({ fileId, replace }) {\n  let result;\n  try {\n    result = await cloudStorage.download(fileId, replace);\n  } catch (e) {\n    if (e.type === 'FileDownloadError') {\n      if (e.reason === 'file-exists' && e.meta.id) {\n        await prefs.loadPrefs(e.meta.id);\n        let name = prefs.getPrefs().budgetName;\n        prefs.unloadPrefs();\n\n        e.meta = { ...e.meta, name };\n      }\n\n      return { error: e };\n    } else {\n      captureException(e);\n      return { error: { reason: 'internal' } };\n    }\n  }\n\n  let id = result.id;\n\n  // Load the budget and do a full sync\n  result = await loadBudget(result.id, VERSION, { showUpdate: true });\n  if (result.error) {\n    return { error: { reason: result.error } };\n  }\n\n  setSyncingMode('enabled');\n  await initialFullSync();\n\n  await handlers['close-budget']();\n\n  return { id };\n};\n\nhandlers['load-budget'] = async function({ id }) {\n  let currentPrefs = prefs.getPrefs();\n\n  if (currentPrefs) {\n    if (currentPrefs.id === id) {\n      // If it's already loaded, do nothing\n      return {};\n    } else {\n      // Otherwise, close the currently loaded budget\n      await handlers['close-budget']();\n    }\n  }\n\n  let res = await loadBudget(id, VERSION, { showUpdate: true });\n\n  async function trackSizes() {\n    let getFileSize = async name => {\n      let dbFile = fs.join(fs.getBudgetDir(id), name);\n      try {\n        return await fs.size(dbFile);\n      } catch (err) {\n        return null;\n      }\n    };\n\n    try {\n      let dbSize = await getFileSize('db.sqlite');\n      let cacheSize = await getFileSize('cache.sqlite');\n      tracking.track('app:load-budget', { size: dbSize, cacheSize });\n    } catch (err) {\n      console.warn(err);\n    }\n  }\n  trackSizes();\n\n  return res;\n};\n\nhandlers['create-demo-budget'] = async function() {\n  // Make sure the read only flag isn't leftover (normally it's\n  // reset when signing in, but you don't have to sign in for the\n  // demo budget)\n  await asyncStorage.setItem('readOnly', '');\n\n  return handlers['create-budget']({\n    budgetName: 'Demo Budget',\n    testMode: true,\n    testBudgetId: DEMO_BUDGET_ID\n  });\n};\n\nhandlers['close-budget'] = async function() {\n  captureBreadcrumb({ message: 'Closing budget' });\n\n  // The spreadsheet may be running, wait for it to complete\n  await sheet.waitOnSpreadsheet();\n  sheet.unloadSpreadsheet();\n\n  clearFullSyncTimeout();\n  await app.stopServices();\n\n  await db.closeDatabase();\n\n  try {\n    await asyncStorage.setItem('lastBudget', '');\n  } catch (e) {\n    // This might fail if we are shutting down after failing to load a\n    // budget. We want to unload whatever has already been loaded but\n    // be resilient to anything failing\n  }\n\n  prefs.unloadPrefs();\n  stopBackupService();\n  return 'ok';\n};\n\nhandlers['delete-budget'] = async function({ id, cloudFileId }) {\n  // If it's a cloud file, you can delete it from the server by\n  // passing its cloud id\n  if (cloudFileId && !process.env.IS_BETA) {\n    await cloudStorage.removeFile(cloudFileId).catch(err => {});\n  }\n\n  // If a local file exists, you can delete it by passing its local id\n  if (id) {\n    let budgetDir = fs.getBudgetDir(id);\n    await fs.removeDirRecursively(budgetDir);\n  }\n\n  return 'ok';\n};\n\nhandlers['create-budget'] = async function({\n  budgetName,\n  avoidUpload,\n  testMode,\n  testBudgetId\n} = {}) {\n  let id;\n  if (testMode) {\n    budgetName = budgetName || 'Test Budget';\n    id = testBudgetId || TEST_BUDGET_ID;\n\n    if (await fs.exists(fs.getBudgetDir(id))) {\n      await fs.removeDirRecursively(fs.getBudgetDir(id));\n    }\n  } else {\n    // Generate budget name if not given\n    if (!budgetName) {\n      // Unfortunately we need to load all of the existing files first\n      // so we can detect conflicting names.\n      let files = await handlers['get-budgets']();\n      budgetName = await uniqueFileName(files);\n    }\n\n    id = await idFromFileName(budgetName);\n  }\n\n  let budgetDir = fs.getBudgetDir(id);\n  await fs.mkdir(budgetDir);\n\n  // Create the initial database\n  await fs.copyFile(fs.bundledDatabasePath, fs.join(budgetDir, 'db.sqlite'));\n\n  // Create the initial prefs file\n  await fs.writeFile(\n    fs.join(budgetDir, 'metadata.json'),\n    JSON.stringify(prefs.getDefaultPrefs(id, budgetName))\n  );\n\n  // Load it in\n  let { error } = await loadBudget(id, VERSION);\n  if (error) {\n    console.log('Error creating budget: ' + error);\n    return { error };\n  }\n\n  if (!avoidUpload && !testMode) {\n    try {\n      await cloudStorage.upload();\n    } catch (e) {\n      // Ignore any errors uploading. If they are offline they should\n      // still be able to create files.\n    }\n  }\n\n  if (testMode) {\n    await createTestBudget(handlers);\n  }\n\n  return {};\n};\n\nhandlers['set-tutorial-seen'] = async function() {\n  await asyncStorage.setItem('seen-tutorial', 'true');\n  return 'ok';\n};\n\nhandlers['import-budget'] = async function({ filepath, type }) {\n  try {\n    if (!(await fs.exists(filepath))) {\n      throw new Error(`File not found at the provided path: ${filepath}`);\n    }\n\n    let buffer = Buffer.from(await fs.readFile(filepath, 'binary'));\n\n    switch (type) {\n      case 'ynab4':\n        try {\n          await YNAB4.importBuffer(filepath, buffer);\n        } catch (e) {\n          let msg = e.message.toLowerCase();\n          if (\n            msg.includes('not a ynab4') ||\n            msg.includes('could not find file')\n          ) {\n            return { error: 'not-ynab4' };\n          }\n        }\n        break;\n      case 'ynab5':\n        let data;\n        try {\n          data = JSON.parse(buffer.toString());\n        } catch (e) {\n          return { error: 'parse-error' };\n        }\n\n        try {\n          await YNAB5.importYNAB5(data);\n        } catch (e) {\n          return { error: 'not-ynab5' };\n        }\n        break;\n      default:\n    }\n  } catch (err) {\n    err.message = 'Error importing budget: ' + err.message;\n    captureException(err);\n    return { error: 'internal-error' };\n  }\n\n  return {};\n};\n\nhandlers['export-budget'] = async function() {\n  return await cloudStorage.exportBuffer();\n};\n\nasync function loadBudget(id, appVersion, { showUpdate } = {}) {\n  let dir;\n  try {\n    dir = fs.getBudgetDir(id);\n  } catch (e) {\n    captureException(\n      new Error('`getBudgetDir` failed in `loadBudget`: ' + e.message)\n    );\n    return { error: 'budget-not-found' };\n  }\n\n  captureBreadcrumb({ message: 'Loading budget ' + dir });\n\n  if (!(await fs.exists(dir))) {\n    captureException(new Error('budget directory does not exist'));\n    return { error: 'budget-not-found' };\n  }\n\n  try {\n    await prefs.loadPrefs(id);\n    await db.openDatabase(id);\n  } catch (e) {\n    captureBreadcrumb({ message: 'Error loading budget ' + id });\n    captureException(e);\n    await handlers['close-budget']();\n    return { error: 'opening-budget' };\n  }\n\n  // Older versions didn't tag the file with the current user, so do\n  // so now\n  if (!prefs.getPrefs().userId) {\n    let [[, userId]] = await asyncStorage.multiGet(['user-token']);\n    prefs.savePrefs({ userId });\n  }\n\n  let { budgetVersion, budgetId } = prefs.getPrefs();\n\n  try {\n    await updateVersion(budgetVersion, showUpdate);\n  } catch (e) {\n    console.warn('Error updating', e);\n    let result;\n    if (e.message.includes('out-of-sync-migrations')) {\n      result = { error: 'out-of-sync-migrations' };\n    } else if (e.message.includes('out-of-sync-data')) {\n      result = { error: 'out-of-sync-data' };\n    } else {\n      captureException(e);\n      logger.info('Error updating budget ' + id, e);\n      console.log('Error updating budget', e);\n      result = { error: 'loading-budget' };\n    }\n\n    await handlers['close-budget']();\n    return result;\n  }\n\n  await db.loadClock();\n\n  if (prefs.getPrefs().resetClock) {\n    // If we need to generate a fresh clock, we need to generate a new\n    // client id. This happens when the database is transferred to a\n    // new device.\n    //\n    // TODO: The client id should be stored elsewhere. It shouldn't\n    // work this way, but it's fine for now.\n    timestamp.getClock().timestamp.setNode(timestamp.makeClientId());\n    await db.runQuery(\n      'INSERT OR REPLACE INTO messages_clock (id, clock) VALUES (1, ?)',\n      [timestamp.serializeClock(timestamp.getClock())]\n    );\n\n    await prefs.savePrefs({ resetClock: false });\n  }\n\n  if (!Platform.isWeb && !Platform.isMobile && !global.__TESTING__) {\n    startBackupService(id);\n  }\n\n  try {\n    await sheet.loadSpreadsheet(db, onSheetChange);\n  } catch (e) {\n    captureException(e);\n    await handlers['close-budget']();\n    return { error: 'opening-budget' };\n  }\n\n  // This is a bit leaky, but we need to set the initial budget type\n  sheet.get().meta().budgetType = prefs.getPrefs().budgetType;\n  await budget.createAllBudgets();\n\n  // Load all the in-memory state\n  await mappings.loadMappings();\n  await rules.loadRules();\n  await syncMigrations.listen();\n  await app.startServices();\n\n  clearUndo();\n\n  // Ensure that syncing is enabled\n  if (!global.__TESTING__) {\n    if (process.env.IS_BETA || id === DEMO_BUDGET_ID) {\n      setSyncingMode('disabled');\n    } else if (id === TEST_BUDGET_ID) {\n      await asyncStorage.setItem('lastBudget', id);\n    } else {\n      setSyncingMode('enabled');\n\n      await asyncStorage.setItem('lastBudget', id);\n\n      // Only upload periodically on desktop\n      if (!Platform.isMobile) {\n        await cloudStorage.possiblyUpload();\n      }\n    }\n  }\n\n  app.events.emit('load-budget', { id });\n\n  return {};\n}\n\nhandlers['get-upgrade-notifications'] = async function() {\n  let { id } = prefs.getPrefs();\n  if (id === TEST_BUDGET_ID || id === DEMO_BUDGET_ID) {\n    return [];\n  }\n\n  let types = ['schedules', 'repair-splits'];\n  let unseen = [];\n\n  for (let type of types) {\n    let key = `notifications.${type}`;\n    if (prefs.getPrefs()[key] == null) {\n      unseen.push(type);\n    }\n  }\n\n  return unseen;\n};\n\nhandlers['seen-upgrade-notification'] = async function({ type }) {\n  let key = `notifications.${type}`;\n  prefs.savePrefs({ [key]: true });\n};\n\nhandlers['upload-file-web'] = async function({ filename, contents }) {\n  if (!Platform.isWeb) {\n    return null;\n  }\n\n  await fs.writeFile('/uploads/' + filename, contents);\n  return 'ok';\n};\n\nhandlers['backups-get'] = async function({ id }) {\n  return getAvailableBackups(id);\n};\n\nhandlers['backup-load'] = async function({ id, backupId }) {\n  await loadBackup(id, backupId);\n};\n\nhandlers['backup-make'] = async function({ id }) {\n  await makeBackup(id);\n};\n\nhandlers['get-last-opened-backup'] = async function() {\n  const id = await asyncStorage.getItem('lastBudget');\n  if (id && id !== '') {\n    const budgetDir = fs.getBudgetDir(id);\n\n    // We never want to give back a budget that does not exist on the\n    // filesystem anymore, so first check that it exists\n    if (await fs.exists(budgetDir)) {\n      return id;\n    }\n  }\n  return null;\n};\n\nhandlers['app-focused'] = async function() {\n  if (prefs.getPrefs() && prefs.getPrefs().id) {\n    // First we sync\n    fullSync();\n  }\n};\n\nhandlers['track'] = async function({ name, props }) {\n  tracking.track(name, props);\n};\n\nhandlers = installAPI(handlers);\n\ninjectAPI.send = (name, args) => runHandler(app.handlers[name], args);\n\n// A hack for now until we clean up everything\napp.handlers = handlers;\napp.combine(schedulesApp, budgetApp, notesApp, toolsApp);\n\nfunction getDefaultDocumentDir() {\n  if (Platform.isMobile) {\n    // On mobile, unfortunately we need to be backwards compatible\n    // with the old folder structure which does not store files inside\n    // of an `Actual` directory. In the future, if we really care, we\n    // can migrate them, but for now just return the documents dir\n    return process.env.ACTUAL_DOCUMENT_DIR;\n  }\n  return fs.join(process.env.ACTUAL_DOCUMENT_DIR, 'Actual');\n}\n\nasync function setupDocumentsDir() {\n  async function ensureExists(dir) {\n    // Make sure the document folder exists\n    if (!(await fs.exists(dir))) {\n      await fs.mkdir(dir);\n    }\n  }\n\n  let documentDir = await asyncStorage.getItem('document-dir');\n\n  // Test the existing documents directory to make sure it's a valid\n  // path that exists, and if it errors fallback to the default one\n  if (documentDir) {\n    try {\n      await ensureExists(documentDir);\n    } catch (e) {\n      documentDir = null;\n    }\n  }\n\n  if (!documentDir) {\n    documentDir = getDefaultDocumentDir();\n  }\n\n  await ensureExists(documentDir);\n  fs._setDocumentDir(documentDir);\n}\n\nexport async function initApp(version, isDev, socketName) {\n  VERSION = version;\n\n  await sqlite.init();\n  await Promise.all([asyncStorage.init(), fs.init()]);\n  await tracking.init();\n  await setupDocumentsDir();\n\n  let keysStr = await asyncStorage.getItem('encrypt-keys');\n  if (keysStr) {\n    try {\n      let keys = JSON.parse(keysStr);\n\n      // Load all the keys\n      await Promise.all(\n        Object.keys(keys).map(fileId => {\n          return encryption.loadKey(keys[fileId]);\n        })\n      );\n    } catch (e) {\n      console.log('Error loading key', e);\n      throw new Error('load-key-error');\n    }\n  }\n\n  if (isDev) {\n    const lastBudget = await asyncStorage.getItem('lastBudget');\n    // if (lastBudget) {\n    //   loadBudget(lastBudget, VERSION);\n    // }\n    // setConfig({\n    //   SYNC_SERVER: 'https://sync-staging.actualbudget.com/sync',\n    //   SIGNUP_SERVER: 'https://sync-staging.actualbudget.com/account',\n    //   PLAID_SERVER: 'https://sync-staging.actualbudget.com/plaid'\n    // });\n    setConfig({\n      SYNC_SERVER: 'http://localhost:5006/sync',\n      SIGNUP_SERVER: 'http://localhost:5006/account',\n      PLAID_SERVER: 'http://localhost:5006/plaid'\n    });\n  }\n\n  connection.init(socketName, app.handlers);\n\n  tracking.track('app:init', {\n    platform: Platform.isMobile ? 'mobile' : Platform.isWeb ? 'web' : 'desktop'\n  });\n\n  if (!isDev && !Platform.isMobile && !Platform.isWeb) {\n    let autoUpdate = await asyncStorage.getItem('auto-update');\n    process.send({\n      type: 'shouldAutoUpdate',\n      flag: autoUpdate == null || autoUpdate === 'true'\n    });\n  }\n\n  if (isDev || process.env.IS_BETA) {\n    global.$send = (name, args) => runHandler(app.handlers[name], args);\n    global.$query = aqlQuery;\n    global.$q = q;\n    global.$db = db;\n    global.$setSyncingMode = setSyncingMode;\n  }\n}\n\nexport async function init({ budgetId, config }) {\n  // Get from build\n  // eslint-disable-next-line\n  VERSION = ACTUAL_APP_VERSION;\n\n  let dataDir, serverURL;\n  if (config) {\n    dataDir = config.dataDir;\n    serverURL = config.serverURL;\n  } else {\n    dataDir = process.env.ACTUAL_DATA_DIR;\n    serverURL = process.env.ACTUAL_SERVER_URL;\n  }\n\n  await sqlite.init();\n  await Promise.all([asyncStorage.init({ persist: false }), fs.init()]);\n  fs._setDocumentDir(dataDir || process.cwd());\n\n  if (serverURL) {\n    setConfig({\n      SYNC_SERVER: joinURL(serverURL, '/sync'),\n      SIGNUP_SERVER: joinURL(serverURL, '/account'),\n      PLAID_SERVER: joinURL(serverURL, '/plaid')\n    });\n  } else {\n    // This turns off all server URLs. In this mode we don't want any\n    // access to the server, we are doing things locally\n    setConfig(null);\n\n    app.events.on('load-budget', () => {\n      setSyncingMode('offline');\n    });\n  }\n\n  if (budgetId) {\n    await runHandler(handlers['load-budget'], { id: budgetId });\n  }\n\n  return lib;\n}\n\n// Export a few things required for the platform\nexport const lib = {\n  getDataDir: fs.getDataDir,\n  sendMessage: (msg, args) => connection.send(msg, args),\n  send: async (name, args) => {\n    let res = await runHandler(app.handlers[name], args);\n    return res;\n  },\n  on: (name, func) => app.events.on(name, func),\n  syncAndReceiveMessages,\n  q: q,\n  db,\n\n  // Expose CRDT mechanisms so server can use them\n  merkle,\n  timestamp,\n  SyncProtoBuf: SyncPb\n};\n\nif (process.env.NODE_ENV === 'development' && Platform.isWeb) {\n  // Support reloading the backend\n  self.addEventListener('message', async e => {\n    if (e.data.type === '__actual:shutdown') {\n      await sheet.waitOnSpreadsheet();\n      await app.stopServices();\n      await db.closeDatabase();\n      asyncStorage.shutdown();\n      fs.shutdown();\n\n      setTimeout(() => {\n        // Give everything else some time to process shutdown events\n        self.close();\n      }, 100);\n    }\n  });\n}\n","// TODO: Ok, several problems:\n//\n// * If nothing matches between two merkle trees, we should fallback\n// * to the last window instead the front one (use 0 instead of the\n// * key)\n//\n// * Need to check to make sure if account exists when handling\n// * transaction changes in syncing\n\nexport function getKeys(trie) {\n  return Object.keys(trie).filter(x => x !== 'hash');\n}\n\nexport function keyToTimestamp(key) {\n  // 16 is the length of the base 3 value of the current time in\n  // minutes. Ensure it's padded to create the full value\n  let fullkey = key + '0'.repeat(16 - key.length);\n\n  // Parse the base 3 representation\n  return parseInt(fullkey, 3) * 1000 * 60;\n}\n\nexport function insert(trie, timestamp) {\n  let hash = timestamp.hash();\n  let key = Number((timestamp.millis() / 1000 / 60) | 0).toString(3);\n\n  trie = Object.assign({}, trie, { hash: trie.hash ^ hash });\n  return insertKey(trie, key, hash);\n}\n\nfunction insertKey(trie, key, hash) {\n  if (key.length === 0) {\n    return trie;\n  }\n  const c = key[0];\n  const n = trie[c] || {};\n  return Object.assign({}, trie, {\n    [c]: Object.assign({}, n, insertKey(n, key.slice(1), hash), {\n      hash: n.hash ^ hash\n    })\n  });\n}\n\nexport function build(timestamps) {\n  let trie = {};\n  for (let timestamp of timestamps) {\n    insert(trie, timestamp);\n  }\n  return trie;\n}\n\nexport function diff(trie1, trie2) {\n  if (trie1.hash === trie2.hash) {\n    return null;\n  }\n\n  let node1 = trie1;\n  let node2 = trie2;\n  let k = '';\n\n  // This loop will eventually stop when it traverses down to find\n  // where the hashes differ, or otherwise when there are no leaves\n  // left (this shouldn't happen, if that's the case the hash check at\n  // the top of this function should pass)\n  while (1) {\n    let keyset = new Set([...getKeys(node1), ...getKeys(node2)]);\n    let keys = [...keyset.values()];\n    keys.sort();\n\n    let diffkey = null;\n\n    // Traverse down the trie through keys that aren't the same. We\n    // traverse down the keys in order. Stop in two cases: either one\n    // of the nodes doesn't have the key, or a different key isn't\n    // found. For the former case, we have to that because pruning is\n    // lossy. We don't know if we've pruned off a changed key so we\n    // can't traverse down anymore. For the latter case, it means two\n    // things: either we've hit the bottom of the tree, or the changed\n    // key has been pruned off. In the latter case we have a \"partial\"\n    // key and will fill the rest with 0s. Note that if multiple older\n    // messages were added into one trie, it's possible we will\n    // generate a time that only encompasses *some* of the those\n    // messages. Pruning is lossy, and we traverse down the left-most\n    // changed time that we know of, because of pruning it might take\n    // multiple passes to sync up a trie.\n    for (let i = 0; i < keys.length; i++) {\n      let key = keys[i];\n\n      if (!node1[key] || !node2[key]) {\n        break;\n      }\n\n      let next1 = node1[key];\n      let next2 = node2[key];\n      if (next1.hash !== next2.hash) {\n        diffkey = key;\n        break;\n      }\n    }\n\n    if (!diffkey) {\n      return keyToTimestamp(k);\n    }\n\n    k += diffkey;\n    node1 = node1[diffkey] || {};\n    node2 = node2[diffkey] || {};\n  }\n}\n\nexport function prune(trie, n = 2) {\n  // Do nothing if empty\n  if (!trie.hash) {\n    return trie;\n  }\n\n  let keys = getKeys(trie);\n  keys.sort();\n\n  let next = { hash: trie.hash };\n  keys = keys.slice(-n).map(k => (next[k] = prune(trie[k], n)));\n\n  return next;\n}\n\nexport function debug(trie, k = '', indent = 0) {\n  const str =\n    ' '.repeat(indent) +\n    (k !== '' ? `k: ${k} ` : '') +\n    `hash: ${trie.hash || '(empty)'}\\n`;\n  return (\n    str +\n    getKeys(trie)\n      .map(key => {\n        return debug(trie[key], key, indent + 2);\n      })\n      .join('')\n  );\n}\n","import fs from '../../platform/server/fs';\nimport * as sqlite from '../../platform/server/sqlite';\n\n// We have to bundle in JS migrations manually to avoid having to `eval`\n// them which doesn't play well with CSP. There isn't great, and eventually\n// we can remove this migration.\nimport m1632571489012 from '../../../migrations/1632571489012_remove_cache.js';\n\nconst uuid = require('../../platform/uuid');\n\nlet MIGRATIONS_DIR = fs.migrationsPath;\n\nlet javascriptMigrations = {\n  1632571489012: m1632571489012\n};\n\nexport async function withMigrationsDir(dir, func) {\n  let oldDir = MIGRATIONS_DIR;\n  MIGRATIONS_DIR = dir;\n  await func();\n  MIGRATIONS_DIR = oldDir;\n}\n\nexport function getMigrationsDir() {\n  return MIGRATIONS_DIR;\n}\n\nfunction getMigrationId(name) {\n  return parseInt(name.match(/^(\\d)+/)[0]);\n}\n\nexport function getUpMigration(id, names) {\n  for (let m of names) {\n    if (getMigrationId(m) === id) {\n      return m;\n    }\n  }\n}\n\nexport async function getAppliedMigrations(db) {\n  const rows = await sqlite.runQuery(\n    db,\n    'SELECT * FROM __migrations__ ORDER BY id ASC',\n    [],\n    true\n  );\n  return rows.map(row => row.id);\n}\n\nexport async function getMigrationList(migrationsDir) {\n  const files = await fs.listDir(migrationsDir);\n  return files\n    .filter(name => name.match(/(\\.sql|\\.js)$/))\n    .sort((m1, m2) => {\n      const id1 = getMigrationId(m1);\n      const id2 = getMigrationId(m2);\n      if (id1 < id2) {\n        return -1;\n      } else if (id1 > id2) {\n        return 1;\n      }\n      return 0;\n    });\n}\n\nexport function getPending(appliedIds, all) {\n  return all.filter(name => {\n    const id = getMigrationId(name);\n    return appliedIds.indexOf(id) === -1;\n  });\n}\n\nasync function applyJavaScript(db, id) {\n  const dbInterface = {\n    runQuery: (query, params, fetchAll) =>\n      sqlite.runQuery(db, query, params, fetchAll),\n    execQuery: query => sqlite.execQuery(db, query),\n    transaction: func => sqlite.transaction(db, func)\n  };\n\n  if (javascriptMigrations[id] == null) {\n    throw new Error('Could not find JS migration code to run for ' + id);\n  }\n\n  let run = javascriptMigrations[id];\n  return run(dbInterface, () => uuid.v4Sync());\n}\n\nasync function applySql(db, sql) {\n  try {\n    await sqlite.execQuery(db, sql);\n  } catch (e) {\n    console.log('Error applying sql:', sql);\n    throw e;\n  }\n}\n\nexport async function applyMigration(db, name, migrationsDir) {\n  const code = await fs.readFile(fs.join(migrationsDir, name));\n  if (name.match(/\\.js$/)) {\n    await applyJavaScript(db, getMigrationId(name));\n  } else {\n    await applySql(db, code);\n  }\n  await sqlite.runQuery(db, 'INSERT INTO __migrations__ (id) VALUES (?)', [\n    getMigrationId(name)\n  ]);\n}\n\nfunction checkDatabaseValidity(appliedIds, available) {\n  for (let i = 0; i < appliedIds.length; i++) {\n    if (\n      i >= available.length ||\n      appliedIds[i] !== getMigrationId(available[i])\n    ) {\n      throw new Error('out-of-sync-migrations');\n    }\n  }\n}\n\nexport async function migrate(db) {\n  let appliedIds = await getAppliedMigrations(db);\n  let available = await getMigrationList(MIGRATIONS_DIR);\n\n  checkDatabaseValidity(appliedIds, available);\n\n  const pending = getPending(appliedIds, available);\n\n  for (let migration of pending) {\n    await applyMigration(db, migration, MIGRATIONS_DIR);\n  }\n\n  return pending;\n}\n","export function requiredFields(name, row, fields, update) {\n  fields.forEach(field => {\n    if (update) {\n      if (row.hasOwnProperty(field) && row[field] == null) {\n        throw new Error(`${name} is missing field ${field}`);\n      }\n    } else {\n      if (!row.hasOwnProperty(field) || row[field] == null) {\n        throw new Error(`${name} is missing field ${field}`);\n      }\n    }\n  });\n}\n\nexport function toDateRepr(str) {\n  if (typeof str !== 'string') {\n    throw new Error('toDateRepr not passed a string: ' + str);\n  }\n\n  return parseInt(str.replace(/-/g, ''));\n}\n\nexport function fromDateRepr(number) {\n  if (typeof number !== 'number') {\n    throw new Error('fromDateRepr not passed a number: ' + number);\n  }\n\n  const dateString = number.toString();\n  return (\n    dateString.slice(0, 4) +\n    '-' +\n    dateString.slice(4, 6) +\n    '-' +\n    dateString.slice(6)\n  );\n}\n\nexport const accountModel = {\n  validateAccountType(account) {\n    const { type } = account;\n    if (\n      type !== 'checking' &&\n      type !== 'savings' &&\n      type !== 'investment' &&\n      type !== 'credit' &&\n      type !== 'mortgage' &&\n      type !== 'debt' &&\n      type !== 'other'\n    ) {\n      throw new Error('Invalid account type: ' + type);\n    }\n  },\n\n  validate(account, { update } = {}) {\n    if (!update || account.type != null) {\n      accountModel.validateAccountType(account);\n    }\n\n    requiredFields(\n      'account',\n      account,\n      update ? ['name', 'type', 'offbudget', 'closed'] : ['name', 'type'],\n      update\n    );\n\n    return account;\n  }\n};\n\nexport const categoryModel = {\n  validate(category, { update } = {}) {\n    requiredFields(\n      'category',\n      category,\n      update ? ['name', 'is_income', 'cat_group'] : ['name', 'cat_group'],\n      update\n    );\n\n    let { sort_order, ...rest } = category;\n    return rest;\n  }\n};\n\nexport const categoryGroupModel = {\n  validate(categoryGroup, { update } = {}) {\n    requiredFields(\n      'categoryGroup',\n      categoryGroup,\n      update ? ['name', 'is_income'] : ['name'],\n      update\n    );\n\n    let { sort_order, ...rest } = categoryGroup;\n    return rest;\n  }\n};\n\nexport const payeeModel = {\n  validate(payee, { update } = {}) {\n    requiredFields('payee', payee, ['name'], update);\n    return payee;\n  }\n};\n\nexport const payeeRuleModel = {\n  validateType(rule) {\n    const { type } = rule;\n    if (type !== 'equals' && type !== 'contains') {\n      throw new Error('Invalid rule type: ' + type);\n    }\n  },\n\n  validate(rule, { update } = {}) {\n    if (!update || 'type' in rule) {\n      payeeRuleModel.validateType(rule);\n    }\n\n    requiredFields('payee_rules', rule, ['payee_id', 'type'], update);\n    return rule;\n  }\n};\n\nexport const transactionModel = {\n  validate(trans, { update } = {}) {\n    requiredFields('transaction', trans, ['date', 'acct'], update);\n\n    if ('date' in trans) {\n      // Make sure it's the right format, and also do a sanity check.\n      // Really old dates can mess up the system and can happen by\n      // accident\n      if (\n        trans.date.match(/^\\d{4}-\\d{2}-\\d{2}$/) == null ||\n        trans.date < '2000-01-01'\n      ) {\n        throw new Error('Invalid transaction date: ' + trans.date);\n      }\n    }\n\n    return trans;\n  },\n\n  toJS(row) {\n    // Check a non-important field that typically wouldn't be passed in\n    // manually, and use it as a smoke test to see if this is a\n    // fully-formed transaction or not.\n    if (!('location' in row)) {\n      throw new Error(\n        'A full transaction is required to be passed to `toJS`. Instead got: ' +\n          JSON.stringify(row)\n      );\n    }\n\n    let trans = { ...row };\n    trans.error = row.error ? JSON.parse(row.error) : null;\n    trans.isParent = row.isParent === 1 ? true : false;\n    trans.isChild = row.isChild === 1 ? true : false;\n    trans.starting_balance_flag =\n      row.starting_balance_flag === 1 ? true : false;\n    trans.cleared = row.cleared === 1 ? true : false;\n    trans.pending = row.pending === 1 ? true : false;\n    trans.date = trans.date && fromDateRepr(trans.date);\n    return trans;\n  },\n\n  fromJS(trans) {\n    let row = { ...trans };\n    if ('error' in row) {\n      row.error = trans.error ? JSON.stringify(trans.error) : null;\n    }\n    if ('isParent' in row) {\n      row.isParent = trans.isParent ? 1 : 0;\n    }\n    if ('isChild' in row) {\n      row.isChild = trans.isChild ? 1 : 0;\n    }\n    if ('cleared' in row) {\n      row.cleared = trans.cleared ? 1 : 0;\n    }\n    if ('pending' in row) {\n      row.pending = trans.pending ? 1 : 0;\n    }\n    if ('starting_balance_flag' in row) {\n      row.starting_balance_flag = trans.starting_balance_flag ? 1 : 0;\n    }\n    if ('date' in row) {\n      row.date = toDateRepr(trans.date);\n    }\n\n    return row;\n  }\n};\n","import { sequential } from '../shared/async';\nimport { captureException, captureBreadcrumb } from '../platform/exceptions';\n\nlet runningMethods = new Set();\n\nlet currentContext = null;\nlet mutatingMethods = new WeakMap();\nlet globalMutationsEnabled = false;\n\nlet _latestHandlerNames = [];\n\nexport function mutator(handler) {\n  mutatingMethods.set(handler, true);\n  return handler;\n}\n\nexport function isMutating(handler) {\n  return mutatingMethods.has(handler);\n}\n\nasync function flushRunningMethods() {\n  // Give the client some time to invoke new requests\n  await wait(200);\n\n  while (runningMethods.size > 0) {\n    // Wait for all of them\n    await Promise.all([...runningMethods.values()]);\n\n    // We give clients more time to make other requests. This lets them continue\n    // to do an async workflow\n    await wait(100);\n  }\n}\n\nfunction wait(time) {\n  return new Promise(resolve => setTimeout(resolve, time));\n}\n\nexport async function runHandler(handler, args, { undoTag, name } = {}) {\n  // For debug reasons, track the latest handlers that have been\n  // called\n  _latestHandlerNames.push(name);\n  if (_latestHandlerNames.length > 5) {\n    _latestHandlerNames = _latestHandlerNames.slice(-5);\n  }\n\n  if (mutatingMethods.has(handler)) {\n    return runMutator(() => handler(args), { undoTag });\n  }\n\n  // When closing a file, it clears out all global state for the file. That\n  // means any async workflows currently executed would be cut off. We handle\n  // this by letting all async workflows finish executing before closing the\n  // file\n  if (name === 'close-budget') {\n    await flushRunningMethods();\n  }\n\n  let promise = handler(args);\n  runningMethods.add(promise);\n  promise.then(() => {\n    runningMethods.delete(promise);\n  });\n  return promise;\n}\n\n// These are useful for tests. Only use them in tests.\nexport function enableGlobalMutations() {\n  if (global.__TESTING__) {\n    globalMutationsEnabled = true;\n  }\n}\n\nexport function disableGlobalMutations() {\n  if (global.__TESTING__) {\n    globalMutationsEnabled = false;\n  }\n}\n\nexport const runMutator = sequential(async (func, initialContext = {}) => {\n  currentContext = initialContext;\n  return func().finally(() => {\n    currentContext = null;\n  });\n});\n\nexport function withMutatorContext(context, func) {\n  if (currentContext == null && !globalMutationsEnabled) {\n    captureBreadcrumb('Recent methods: ' + _latestHandlerNames.join(', '));\n    captureException(new Error('withMutatorContext: mutator not running'));\n\n    // See comment below. This is not an error right now, but it will\n    // be in the future.\n    return func();\n  }\n\n  let prevContext = currentContext;\n  currentContext = { ...currentContext, ...context };\n  return func().finally(() => {\n    currentContext = prevContext;\n  });\n}\n\nexport function getMutatorContext() {\n  if (currentContext == null) {\n    captureBreadcrumb({\n      category: 'server',\n      message: 'Recent methods: ' + _latestHandlerNames.join(', ')\n    });\n    // captureException(new Error('getMutatorContext: mutator not running'));\n\n    // For now, this is a non-fatal error. It will be in the future,\n    // but this is relatively non-critical (undo just won't work) so\n    // return an empty context. When we have more confidence that\n    // everything is running inside a mutator, throw an error.\n    return {};\n  }\n\n  if (currentContext == null && globalMutationsEnabled) {\n    return {};\n  }\n  return currentContext;\n}\n","import { createApp } from '../app';\nimport * as db from '../db';\n\nlet app = createApp();\n\napp.method('notes-save', async ({ id, note }) => {\n  await db.update('notes', { id, note });\n});\n\nexport default app;\n","let enabled = false;\nlet entries = {};\nlet counters = {};\n\nexport function reset() {\n  entries = {};\n  counters = {};\n}\n\nexport function record(name) {\n  const start = Date.now();\n  return () => unrecord(name, start);\n}\n\nfunction unrecord(name, start) {\n  const end = Date.now();\n\n  if (enabled) {\n    if (entries[name] == null) {\n      entries[name] = [];\n    }\n    entries[name].push(end - start);\n  }\n}\n\nexport function increment(name) {\n  if (enabled) {\n    if (counters[name] == null) {\n      counters[name] = 0;\n    }\n    counters[name]++;\n  }\n}\n\nexport function start() {\n  enabled = true;\n}\n\nexport function stop() {\n  enabled = false;\n\n  console.log('~~ PERFORMANCE REPORT ~~');\n  for (let name in entries) {\n    const records = entries[name];\n    const total = records.reduce((total, n) => total + n / 1000, 0);\n    const avg = total / records.length;\n\n    console.log(\n      `[${name}] count: ${records.length} total: ${total}s avg: ${avg}`\n    );\n  }\n\n  for (let name in counters) {\n    console.log(`[${name}] ${counters[name]}`);\n  }\n  console.log('~~ END REPORT ~~');\n\n  reset();\n}\n","export default {\n  isMobile: false,\n  isWeb: false,\n  isDesktop: true\n};\n","// By default, no polyfills are installed\n","import Platform from './platform';\nconst { PostError, HTTPError } = require('./errors');\nconst { fetch } = require('../platform/server/fetch');\n\nfunction throwIfNot200(res, text) {\n  if (res.status !== 200) {\n    if (res.status === 500) {\n      throw new PostError(res.status === 500 ? 'internal' : text);\n    }\n\n    let contentType = res.headers.get('Content-Type');\n    if (contentType.toLowerCase().indexOf('application/json') !== -1) {\n      let json = JSON.parse(text);\n      throw new PostError(json.reason);\n    }\n    throw new PostError(text);\n  }\n}\n\nexport async function post(url, data) {\n  let text;\n  let res;\n\n  let s = new Error().stack;\n\n  try {\n    res = await fetch(url, {\n      method: 'POST',\n      body: JSON.stringify(data),\n      headers: {\n        'Content-Type': 'application/json'\n      }\n    });\n    text = await res.text();\n  } catch (err) {\n    throw new PostError('network-failure');\n  }\n\n  throwIfNot200(res, text);\n\n  try {\n    res = JSON.parse(text);\n  } catch (err) {\n    // Something seriously went wrong. TODO handle errors\n    throw new PostError('parse-json', { meta: text });\n  }\n\n  if (res.status !== 'ok') {\n    console.log(\n      'API call failed: ' +\n        url +\n        '\\nData: ' +\n        JSON.stringify(data, null, 2) +\n        '\\nResponse: ' +\n        JSON.stringify(res, null, 2)\n    );\n\n    throw new PostError(res.description || res.reason || 'unknown');\n  }\n\n  return res.data;\n}\n\nexport async function postBinary(url, data, headers) {\n  let res;\n  try {\n    res = await fetch(url, {\n      method: 'POST',\n      body: Platform.isWeb ? data : Buffer.from(data),\n      headers: {\n        'Content-Length': data.length,\n        'Content-Type': 'application/actual-sync',\n        ...headers\n      }\n    });\n  } catch (err) {\n    throw new PostError('network-failure');\n  }\n\n  let buffer;\n  if (res.arrayBuffer) {\n    buffer = Buffer.from(await res.arrayBuffer());\n  } else {\n    buffer = await res.buffer();\n  }\n\n  throwIfNot200(res, buffer.toString());\n\n  return buffer;\n}\n\nexport function get(url) {\n  return fetch(url).then(res => res.text());\n}\n","import { sendMessages } from './sync';\nimport Timestamp from './timestamp';\nconst fs = require('../platform/server/fs');\n\nlet prefs = null;\n\nexport async function loadPrefs(id) {\n  if (global.__TESTING__ && !id) {\n    prefs = { dummyTestPrefs: true };\n    return prefs;\n  }\n\n  const fullpath = fs.join(fs.getBudgetDir(id), 'metadata.json');\n\n  try {\n    prefs = JSON.parse(await fs.readFile(fullpath));\n  } catch (e) {\n    // If the user messed something up, be flexible and allow them to\n    // still load the budget database. Default the budget name to the\n    // id.\n    prefs = { id, budgetName: id };\n  }\n\n  // No matter what is in `id` field, force it to be the current id.\n  // This makes it resilient to users moving around folders, etc\n  prefs.id = id;\n  return prefs;\n}\n\nexport async function savePrefs(prefsToSet, { avoidSync = false } = {}) {\n  Object.assign(prefs, prefsToSet);\n\n  if (!avoidSync) {\n    // Sync whitelisted prefs\n    let messages = Object.keys(prefsToSet)\n      .map(key => {\n        if (key === 'budgetType' || key === 'budgetName') {\n          return {\n            dataset: 'prefs',\n            row: key,\n            column: 'value',\n            value: prefsToSet[key],\n            timestamp: Timestamp.send()\n          };\n        }\n        return null;\n      })\n      .filter(x => x);\n\n    if (messages.length > 0) {\n      await sendMessages(messages);\n    }\n  }\n\n  if (!prefs.dummyTestPrefs) {\n    let prefsPath = fs.join(fs.getBudgetDir(prefs.id), 'metadata.json');\n    await fs.writeFile(prefsPath, JSON.stringify(prefs));\n  }\n}\n\nexport function unloadPrefs() {\n  prefs = null;\n}\n\nexport function getPrefs() {\n  return prefs;\n}\n\nexport function getDefaultPrefs(id, budgetName) {\n  // Add any notifications in here that new users shouldn't see.\n  // Without them, a popup will show to explain a new feature.\n  return {\n    id,\n    budgetName,\n    'notifications.schedules': true,\n    'notifications.repair-splits': true\n  };\n}\n\nexport async function readPrefs(id) {\n  const fullpath = fs.join(fs.getBudgetDir(id), 'metadata.json');\n\n  try {\n    return JSON.parse(await fs.readFile(fullpath));\n  } catch (e) {\n    return null;\n  }\n}\n","import deepEqual from 'deep-equal';\nimport * as d from 'date-fns';\nimport { createApp } from '../app';\nimport * as db from '../db';\nimport * as prefs from '../prefs';\nimport { toDateRepr } from '../models';\nimport { runQuery as aqlQuery } from '../aql/schema/run-query';\nimport { compileQuery } from '../aql/compiler';\nimport { schema, schemaConfig } from '../aql/schema';\nimport { dayFromDate, currentDay, parseDate } from '../../shared/months';\nimport q from '../../shared/query';\nimport {\n  insertRule,\n  updateRule,\n  getRules,\n  ruleModel\n} from '../accounts/transaction-rules';\nimport { Rule, Condition } from '../accounts/rules';\nimport {\n  extractScheduleConds,\n  recurConfigToRSchedule,\n  getHasTransactionsQuery,\n  getStatus,\n  getScheduledAmount\n} from '../../shared/schedules';\nimport { mutator, runMutator } from '../mutators';\nimport { undoable } from '../undo';\nimport { Schedule as RSchedule } from '../util/rschedule';\nimport { addSyncListener, batchMessages } from '../sync';\nimport { captureBreadcrumb } from '../../platform/exceptions';\nimport { addTransactions } from '../accounts/sync';\nimport { findSchedules } from './find-schedules';\n\nconst connection = require('../../platform/server/connection');\nconst uuid = require('../../platform/uuid');\n\n// Utilities\n\nfunction zip(arr1, arr2) {\n  let result = [];\n  for (let i = 0; i < arr1.length; i++) {\n    result.push([arr1[i], arr2[i]]);\n  }\n  return result;\n}\n\nexport function updateConditions(conditions, newConditions) {\n  let scheduleConds = extractScheduleConds(conditions);\n  let newScheduleConds = extractScheduleConds(newConditions);\n\n  let replacements = zip(\n    Object.values(scheduleConds),\n    Object.values(newScheduleConds)\n  );\n\n  let updated = conditions.map(cond => {\n    let r = replacements.find(r => cond === r[0]);\n    return r && r[1] ? r[1] : cond;\n  });\n\n  let added = replacements\n    .filter(x => x[0] == null && x[1] != null)\n    .map(x => x[1]);\n\n  return updated.concat(added);\n}\n\nexport function getNextDate(dateCond, start = new Date()) {\n  start = d.startOfDay(start);\n\n  let cond = new Condition(\n    dateCond.op,\n    'date',\n    dateCond.value,\n    null,\n    new Map(Object.entries({ date: 'date' }))\n  );\n  let value = cond.getValue();\n\n  if (value.type === 'date') {\n    return value.date;\n  } else if (value.type === 'recur') {\n    let dates = value.schedule.occurrences({ start, take: 1 }).toArray();\n\n    if (dates.length > 0) {\n      let date = dates[0].date;\n      return dayFromDate(date);\n    }\n  }\n  return null;\n}\n\nexport async function getRuleForSchedule(id) {\n  if (id == null) {\n    throw new Error('Schedule not attached to a rule');\n  }\n\n  let { data: ruleId } = await aqlQuery(\n    q('schedules')\n      .filter({ id })\n      .calculate('rule')\n  );\n  return getRules().find(rule => rule.id === ruleId);\n}\n\nexport async function fixRuleForSchedule(id) {\n  let { data: ruleId } = await aqlQuery(\n    q('schedules')\n      .filter({ id })\n      .calculate('rule')\n  );\n\n  if (ruleId) {\n    // Take the bad rule out of the system so it never causes problems\n    // in the future\n    await db.delete_('rules', ruleId);\n  }\n\n  let newId = await insertRule({\n    stage: null,\n    conditions: [\n      { op: 'isapprox', field: 'date', value: currentDay() },\n      { op: 'isapprox', field: 'amount', value: 0 }\n    ],\n    actions: [{ op: 'link-schedule', value: id }]\n  });\n\n  await db.updateWithSchema('schedules', { id, rule: newId });\n\n  return getRules().find(rule => rule.id === newId);\n}\n\nexport async function setNextDate({ id, start, conditions, reset }) {\n  if (conditions == null) {\n    let rule = await getRuleForSchedule(id);\n    if (rule == null) {\n      throw new Error('No rule found for schedule');\n    }\n    conditions = rule.serialize().conditions;\n  }\n\n  let { date: dateCond } = extractScheduleConds(conditions);\n\n  let { data: nextDate } = await aqlQuery(\n    q('schedules')\n      .filter({ id })\n      .calculate('next_date')\n  );\n\n  // Only do this if a date condition exists\n  if (dateCond) {\n    let newNextDate = getNextDate(\n      dateCond,\n      start ? start(nextDate) : new Date()\n    );\n\n    if (newNextDate !== nextDate) {\n      // Our `update` functon requires the id of the item and we don't\n      // have it, so we need to query it\n      let nd = await db.first(\n        'SELECT id, base_next_date_ts FROM schedules_next_date WHERE schedule_id = ?',\n        [id]\n      );\n\n      await db.update(\n        'schedules_next_date',\n        reset\n          ? {\n              id: nd.id,\n              base_next_date: toDateRepr(newNextDate),\n              base_next_date_ts: Date.now()\n            }\n          : {\n              id: nd.id,\n              local_next_date: toDateRepr(newNextDate),\n              local_next_date_ts: nd.base_next_date_ts\n            }\n      );\n    }\n  }\n}\n\n// Methods\n\nexport async function createSchedule({ schedule, conditions = [] } = {}) {\n  let scheduleId = (schedule && schedule.id) || uuid.v4Sync();\n\n  let { date: dateCond } = extractScheduleConds(conditions);\n  if (dateCond == null) {\n    throw new Error('A date condition is required to create a schedule');\n  }\n  if (dateCond.value == null) {\n    throw new Error('Date is required');\n  }\n\n  let nextDate = getNextDate(dateCond);\n  let nextDateRepr = nextDate ? toDateRepr(nextDate) : null;\n\n  // Create the rule here based on the info\n  let ruleId;\n  ruleId = await insertRule({\n    stage: null,\n    conditions,\n    actions: [{ op: 'link-schedule', value: scheduleId }]\n  });\n\n  let now = Date.now();\n  let nextDateId = await db.insertWithUUID('schedules_next_date', {\n    schedule_id: scheduleId,\n    local_next_date: nextDateRepr,\n    local_next_date_ts: now,\n    base_next_date: nextDateRepr,\n    base_next_date_ts: now\n  });\n\n  let id = await db.insertWithSchema('schedules', {\n    ...schedule,\n    id: scheduleId,\n    rule: ruleId\n  });\n\n  return scheduleId;\n}\n\n// TODO: don't allow deleting rules that link schedules\n\nexport async function updateSchedule({ schedule, conditions, resetNextDate }) {\n  if (schedule.rule) {\n    throw new Error('You cannot change the rule of a schedule');\n  }\n\n  // We need the rule if there are conditions\n  let rule;\n\n  // This must be outside the `batchMessages` call because we change\n  // and then read data\n  if (conditions) {\n    let { date: dateCond } = extractScheduleConds(conditions);\n    if (dateCond && dateCond.value == null) {\n      throw new Error('Date is required');\n    }\n\n    // We need to get the full rule to merge in the updated\n    // conditions\n    rule = await getRuleForSchedule(schedule.id);\n\n    if (rule == null) {\n      // In the edge case that a rule gets corrupted (either by a bug in\n      // the system or user messing with their data), don't crash. We\n      // generate a new rule because schedules have to have a rule\n      // attached to them.\n      rule = await fixRuleForSchedule(schedule.id);\n    }\n  }\n\n  await batchMessages(async () => {\n    if (conditions) {\n      let oldConditions = rule.serialize().conditions;\n      let newConditions = updateConditions(oldConditions, conditions);\n\n      await updateRule({ id: rule.id, conditions: newConditions });\n\n      // Annoyingly, sometimes it has `type` and sometimes it doesn't\n      let stripType = ({ type, ...fields }) => fields;\n\n      // Update `next_date` if the user forced it, or if the account\n      // or date changed. We check account because we don't update\n      // schedules automatically for closed account, and the user\n      // might switch accounts from a closed one\n      if (\n        resetNextDate ||\n        !deepEqual(\n          oldConditions.find(c => c.field === 'account'),\n          oldConditions.find(c => c.field === 'account')\n        ) ||\n        !deepEqual(\n          stripType(oldConditions.find(c => c.field === 'date')),\n          stripType(newConditions.find(c => c.field === 'date'))\n        )\n      ) {\n        await setNextDate({\n          id: schedule.id,\n          conditions: newConditions,\n          reset: true\n        });\n      }\n    } else if (resetNextDate) {\n      await setNextDate({ id: schedule.id, reset: true });\n    }\n\n    await db.updateWithSchema('schedules', schedule);\n  });\n}\n\nexport async function deleteSchedule({ id }) {\n  let { data: ruleId } = await aqlQuery(\n    q('schedules')\n      .filter({ id })\n      .calculate('rule')\n  );\n\n  await batchMessages(async () => {\n    await db.delete_('rules', ruleId);\n    await db.delete_('schedules', id);\n  });\n}\n\nexport async function skipNextDate({ id }) {\n  return setNextDate({\n    id,\n    start: nextDate => {\n      return d.addDays(parseDate(nextDate), 1);\n    }\n  });\n}\n\n// `schedule` here might not be a saved schedule, so it might not have\n// an id\nexport function getPossibleTransactions({ schedule }) {}\n\nexport function discoverSchedules() {\n  return findSchedules();\n}\n\nexport async function getUpcomingDates({ config, count }) {\n  let rules = recurConfigToRSchedule(config);\n\n  try {\n    let schedule = new RSchedule({ rrules: rules });\n\n    return schedule\n      .occurrences({ start: d.startOfDay(new Date()), take: count })\n      .toArray()\n      .map(date => dayFromDate(date.date));\n  } catch (err) {\n    captureBreadcrumb(config);\n    throw err;\n  }\n}\n\n// Services\n\nfunction onRuleUpdate(rule) {\n  let { actions, conditions } =\n    rule instanceof Rule ? rule.serialize() : ruleModel.toJS(rule);\n\n  if (actions && actions.find(a => a.op === 'link-schedule')) {\n    let scheduleId = actions.find(a => a.op === 'link-schedule').value;\n\n    if (scheduleId) {\n      let conds = extractScheduleConds(conditions);\n\n      let payeeIdx = conditions.findIndex(c => c === conds.payee);\n      let accountIdx = conditions.findIndex(c => c === conds.account);\n      let amountIdx = conditions.findIndex(c => c === conds.amount);\n      let dateIdx = conditions.findIndex(c => c === conds.date);\n\n      db.runQuery(\n        'INSERT OR REPLACE INTO schedules_json_paths (schedule_id, payee, account, amount, date) VALUES (?, ?, ?, ?, ?)',\n        [\n          scheduleId,\n          payeeIdx === -1 ? null : `$[${payeeIdx}]`,\n          accountIdx === -1 ? null : `$[${accountIdx}]`,\n          amountIdx === -1 ? null : `$[${amountIdx}]`,\n          dateIdx === -1 ? null : `$[${dateIdx}]`\n        ]\n      );\n    }\n  }\n}\n\nfunction trackJSONPaths() {\n  // Populate the table\n  db.transaction(() => {\n    getRules().forEach(rule => {\n      onRuleUpdate(rule);\n    });\n  });\n\n  return addSyncListener(onApplySync);\n}\n\nfunction onApplySync(oldValues, newValues) {\n  let found = false;\n  newValues.forEach((items, table) => {\n    if (table === 'rules') {\n      found = true;\n      items.forEach(newValue => {\n        onRuleUpdate(newValue);\n      });\n    }\n  });\n}\n\n// This is the service that move schedules forward automatically and\n// posts transactions\n\nasync function postTransactionForSchedule({ id }) {\n  let { data } = await aqlQuery(\n    q('schedules')\n      .filter({ id })\n      .select('*')\n  );\n  let schedule = data[0];\n  if (schedule == null || schedule._account == null) {\n    return;\n  }\n\n  let transaction = {\n    payee: schedule._payee,\n    account: schedule._account,\n    amount: getScheduledAmount(schedule._amount),\n    date: schedule.next_date,\n    schedule: schedule.id,\n    cleared: false\n  };\n\n  if (transaction.account) {\n    await addTransactions(transaction.account, [transaction]);\n  }\n}\n\n// TODO: make this sequential\n\nexport async function advanceSchedulesService(syncSuccess) {\n  // Move all paid schedules\n  let { data: schedules } = await aqlQuery(\n    q('schedules')\n      .filter({ completed: false, '_account.closed': false })\n      .select('*')\n  );\n  let { data: hasTransData } = await aqlQuery(\n    getHasTransactionsQuery(schedules)\n  );\n  let hasTrans = new Set(hasTransData.filter(Boolean).map(row => row.schedule));\n\n  let failedToPost = [];\n  let didPost = false;\n\n  for (let schedule of schedules) {\n    let status = getStatus(\n      schedule.next_date,\n      schedule.completed,\n      hasTrans.has(schedule.id)\n    );\n\n    if (status === 'paid') {\n      if (schedule._date) {\n        // Move forward recurring schedules\n        if (schedule._date.frequency) {\n          try {\n            await setNextDate({ id: schedule.id });\n          } catch (err) {\n            // This might error if the rule is corrupted and it can't\n            // find the rule\n          }\n        } else {\n          if (schedule._date < currentDay()) {\n            // Complete any single schedules\n            await updateSchedule({\n              schedule: { id: schedule.id, completed: true }\n            });\n          }\n        }\n      }\n    } else if (\n      (status === 'due' || status === 'missed') &&\n      schedule.posts_transaction &&\n      schedule._account\n    ) {\n      // Automatically create a transaction for due schedules\n      if (syncSuccess) {\n        await postTransactionForSchedule({ id: schedule.id });\n\n        didPost = true;\n      } else {\n        failedToPost.push(schedule._payee);\n      }\n    }\n  }\n\n  if (failedToPost.length > 0) {\n    connection.send('schedules-offline', { payees: failedToPost });\n  } else if (didPost) {\n    // This forces a full refresh of transactions because it\n    // simulates them coming in from a full sync. This not a\n    // great API right now, but I think generally the approach\n    // is sane to treat them as external sync events.\n    connection.send('sync-event', {\n      type: 'success',\n      tables: ['transactions'],\n      syncDisabled: 'false'\n    });\n  }\n}\n\n// Expose functions to the client\nlet app = createApp();\n\napp.method('schedule/create', mutator(undoable(createSchedule)));\napp.method('schedule/update', mutator(undoable(updateSchedule)));\napp.method('schedule/delete', mutator(undoable(deleteSchedule)));\napp.method('schedule/skip-next-date', mutator(undoable(skipNextDate)));\napp.method(\n  'schedule/post-transaction',\n  mutator(undoable(postTransactionForSchedule))\n);\napp.method(\n  'schedule/force-run-service',\n  mutator(() => advanceSchedulesService(true))\n);\napp.method('schedule/get-possible-transactions', getPossibleTransactions);\napp.method('schedule/discover', discoverSchedules);\napp.method('schedule/get-upcoming-dates', getUpcomingDates);\n\napp.service(trackJSONPaths);\n\napp.events.on('sync', ({ type, subtype }) => {\n  let completeEvent =\n    type === 'success' || type === 'error' || type === 'unauthorized';\n\n  if (completeEvent && prefs.getPrefs()) {\n    let { lastScheduleRun } = prefs.getPrefs();\n\n    if (lastScheduleRun !== currentDay()) {\n      runMutator(() => advanceSchedulesService(type === 'success'));\n\n      prefs.savePrefs({ lastScheduleRun: currentDay() });\n    }\n  }\n});\n\nexport default app;\n","import * as d from 'date-fns';\nimport * as db from '../db';\nimport { Schedule as RSchedule } from '../util/rschedule';\nimport { groupBy } from '../../shared/util';\nimport { fromDateRepr } from '../models';\nimport { runQuery as aqlQuery } from '../aql/schema/run-query';\nimport q from '../../shared/query';\nimport { getApproxNumberThreshold } from '../../shared/rules';\nimport { recurConfigToRSchedule } from '../../shared/schedules';\nimport { dayFromDate, parseDate, subDays } from '../../shared/months';\nimport { conditionsToAQL } from '../accounts/transaction-rules';\nconst uuid = require('../../platform/uuid');\n\nfunction takeDates(config) {\n  let schedule = new RSchedule({ rrules: recurConfigToRSchedule(config) });\n  return schedule\n    .occurrences({ take: 3 })\n    .toArray()\n    .map(d => d.date);\n}\n\nasync function getTransactions(date, account) {\n  let { data } = await aqlQuery(\n    q('transactions')\n      .filter({\n        account,\n        schedule: null,\n        // Don't match transfers\n        'payee.transfer_acct': null,\n        $and: [\n          { date: { $gte: d.subDays(date, 2) } },\n          { date: { $lte: d.addDays(date, 2) } }\n        ]\n      })\n      .select('*')\n      .options({ splits: 'none' })\n  );\n  return data;\n}\n\nfunction getRank(day1, day2) {\n  let dayDiff = Math.abs(d.differenceInDays(parseDate(day1), parseDate(day2)));\n\n  // The amount of days off determines the rank: exact same day\n  // is highest rank 1, 1 day off is .5, etc. This will find the\n  // best start date that matches all the dates the closest\n  return 1 / (dayDiff + 1);\n}\n\nexport function matchSchedules(allOccurs, config, partialMatchRank = 0.5) {\n  allOccurs = [...allOccurs].reverse();\n  let baseOccur = allOccurs[0];\n  let occurs = allOccurs.slice(1);\n  let schedules = [];\n\n  for (let trans of baseOccur.transactions) {\n    let threshold = getApproxNumberThreshold(trans.amount);\n    let payee = trans.payee;\n    let account = trans.account;\n\n    let found = occurs.map(occur => {\n      let matched = occur.transactions.find(\n        t =>\n          t.amount >= trans.amount - threshold &&\n          t.amount <= trans.amount + threshold\n      );\n      matched = matched && matched.payee === payee ? matched : null;\n\n      if (matched) {\n        return { trans: matched, rank: getRank(occur.date, matched.date) };\n      }\n      return null;\n    });\n\n    if (found.indexOf(null) !== -1) {\n      continue;\n    }\n\n    let rank = found.reduce(\n      (total, match) => total + match.rank,\n      getRank(baseOccur.date, trans.date)\n    );\n\n    let exactAmount = found.reduce(\n      (exact, match) => exact && match.trans.amount === trans.amount,\n      true\n    );\n\n    schedules.push({\n      rank,\n      amount: trans.amount,\n      account: trans.account,\n      payee: trans.payee,\n      date: config,\n      // Exact dates rank as 1, so all of them matches exactly it\n      // would equal the number of `allOccurs`\n      exactDate: rank === allOccurs.length,\n      exactAmount\n    });\n  }\n\n  return schedules;\n}\n\nasync function schedulesForPattern(\n  baseStart,\n  numDays,\n  baseConfig,\n  accountId,\n  partialMatchRank\n) {\n  let schedules = [];\n\n  let i = 0;\n  for (let i = 0; i < numDays; i++) {\n    let start = d.addDays(baseStart, i);\n    let config;\n    if (typeof baseConfig === 'function') {\n      config = baseConfig(start);\n\n      if (config === false) {\n        // Skip this one\n        continue;\n      }\n    } else {\n      config = { ...baseConfig, start };\n    }\n\n    // Our recur config expects a day string, not a native date format\n    config.start = dayFromDate(config.start);\n\n    let data = [];\n    let dates = takeDates(config);\n    for (let date of dates) {\n      data.push({\n        date: dayFromDate(date),\n        transactions: await getTransactions(date, accountId)\n      });\n    }\n\n    schedules = schedules.concat(\n      matchSchedules(data, config, partialMatchRank)\n    );\n  }\n  return schedules;\n}\n\nasync function weekly(startDate, accountId) {\n  return schedulesForPattern(\n    d.subWeeks(parseDate(startDate), 4),\n    7 * 2,\n    { frequency: 'weekly' },\n    accountId\n  );\n}\n\nasync function every2weeks(startDate, accountId) {\n  return schedulesForPattern(\n    // 6 weeks would cover 3 instances, but we also scan an addition\n    // week back\n    d.subWeeks(parseDate(startDate), 7),\n    7 * 2,\n    { frequency: 'weekly', interval: 2 },\n    accountId\n  );\n}\n\nasync function monthly(startDate, accountId) {\n  return schedulesForPattern(\n    d.subMonths(parseDate(startDate), 4),\n    31 * 2,\n    start => {\n      // 28 is the max number of days that all months are guaranteed\n      // to have. We don't want to go any higher than that because\n      // we'll end up skipping months that don't have that day.\n      // The use cases of end of month days will be covered with the\n      // `monthlyLastDay` pattern;\n      if (d.getDate(start) > 28) {\n        return false;\n      }\n      return { start, frequency: 'monthly' };\n    },\n    accountId\n  );\n}\n\nasync function monthlyLastDay(startDate, accountId) {\n  // We do two separate calls because this pattern doesn't fit into\n  // how `schedulesForPattern` works\n  let s1 = await schedulesForPattern(\n    d.subMonths(parseDate(startDate), 3),\n    1,\n    { frequency: 'monthly', patterns: [{ type: 'day', value: -1 }] },\n    accountId,\n    // Last day patterns should win over day-specific ones that just\n    // happen to match\n    0.75\n  );\n\n  let s2 = await schedulesForPattern(\n    d.subMonths(parseDate(startDate), 4),\n    1,\n    { frequency: 'monthly', patterns: [{ type: 'day', value: -1 }] },\n    accountId,\n    0.75\n  );\n\n  return s1.concat(s2);\n}\n\nasync function monthly1stor3rd(startDate, accountId) {\n  return schedulesForPattern(\n    d.subWeeks(parseDate(startDate), 8),\n    14,\n    start => {\n      let day = d.format(new Date(), 'iiii');\n      let dayValue = day.slice(0, 2).toUpperCase();\n\n      return {\n        start,\n        frequency: 'monthly',\n        patterns: [{ type: dayValue, value: 1 }, { type: dayValue, value: 3 }]\n      };\n    },\n    accountId\n  );\n}\n\nasync function monthly2ndor4th(startDate, accountId) {\n  return schedulesForPattern(\n    d.subMonths(parseDate(startDate), 8),\n    14,\n    start => {\n      let day = d.format(new Date(), 'iiii');\n      let dayValue = day.slice(0, 2).toUpperCase();\n\n      return {\n        start,\n        frequency: 'monthly',\n        patterns: [{ type: dayValue, value: 2 }, { type: dayValue, value: 4 }]\n      };\n    },\n    accountId\n  );\n}\n\nasync function findStartDate(schedule) {\n  let conditions = schedule._conditions;\n  let dateCond = conditions.find(c => c.field === 'date');\n  let currentConfig = dateCond.value;\n\n  while (1) {\n    let prevConfig = currentConfig;\n    currentConfig = { ...prevConfig };\n\n    switch (currentConfig.frequency) {\n      case 'weekly':\n        currentConfig.start = dayFromDate(\n          d.subWeeks(\n            parseDate(currentConfig.start),\n            currentConfig.interval || 1\n          )\n        );\n\n        break;\n      case 'monthly':\n        currentConfig.start = dayFromDate(\n          d.subMonths(\n            parseDate(currentConfig.start),\n            currentConfig.interval || 1\n          )\n        );\n        break;\n      case 'yearly':\n        currentConfig.start = dayFromDate(\n          d.subYears(\n            parseDate(currentConfig.start),\n            currentConfig.interval || 1\n          )\n        );\n        break;\n      default:\n        throw new Error('findStartDate: invalid frequency');\n    }\n\n    let newConditions = conditions.map(c =>\n      c.field === 'date' ? { ...c, value: currentConfig } : c\n    );\n\n    let { filters, errors } = conditionsToAQL(newConditions, {\n      recurDateBounds: 1\n    });\n    if (errors.length > 0) {\n      // Somehow we generated an invalid config. Abort the whole\n      // process and don't change the date at all\n      currentConfig = null;\n      break;\n    }\n\n    let { data } = await aqlQuery(\n      q('transactions')\n        .filter({ $and: filters })\n        .select('*')\n    );\n\n    if (data.length === 0) {\n      // No data, revert back to the last valid value and stop\n      currentConfig = prevConfig;\n      break;\n    }\n  }\n\n  if (currentConfig) {\n    return {\n      ...schedule,\n      date: currentConfig,\n      _conditions: conditions.map(c =>\n        c.field === 'date' ? { ...c, value: currentConfig } : c\n      )\n    };\n  }\n  return schedule;\n}\n\nexport async function findSchedules() {\n  // Patterns to look for:\n  // * Weekly\n  // * Every two weeks\n  // * Monthly on day X\n  // * Monthly on every 1st or 3rd day\n  // * Monthly on every 2nd or 4th day\n  //\n  // Search for them approx (+- 2 days) but track which transactions\n  // and find the best one...\n\n  let { data: accounts } = await aqlQuery(\n    q('accounts')\n      .filter({ closed: false })\n      .select('*')\n  );\n\n  let allSchedules = [];\n\n  for (let account of accounts) {\n    // Find latest transaction-ish to start with\n    let latestTrans = await db.first(\n      'SELECT * FROM v_transactions WHERE account = ? AND parent_id IS NULL ORDER BY date DESC LIMIT 1',\n      [account.id]\n    );\n\n    if (latestTrans) {\n      let latestDate = fromDateRepr(latestTrans.date);\n      allSchedules = allSchedules.concat(\n        await weekly(latestDate, account.id),\n        await every2weeks(latestDate, account.id),\n        await monthly(latestDate, account.id),\n        await monthlyLastDay(latestDate, account.id),\n        await monthly1stor3rd(latestDate, account.id),\n        await monthly2ndor4th(latestDate, account.id)\n      );\n    }\n  }\n\n  let schedules = [...groupBy(allSchedules, 'payee').entries()].map(\n    ([payeeId, schedules]) => {\n      schedules.sort((s1, s2) => s2.rank - s1.rank);\n      let winner = schedules[0];\n\n      // Convert to schedule and return it\n      return {\n        id: uuid.v4Sync(),\n        account: winner.account,\n        payee: winner.payee,\n        date: winner.date,\n        amount: winner.amount,\n        _conditions: [\n          { op: 'is', field: 'account', value: winner.account },\n          { op: 'is', field: 'payee', value: winner.payee },\n          {\n            op: winner.exactDate ? 'is' : 'isapprox',\n            field: 'date',\n            value: winner.date\n          },\n          {\n            op: winner.exactAmount ? 'is' : 'isapprox',\n            field: 'amount',\n            value: winner.amount\n          }\n        ]\n      };\n    }\n  );\n\n  let finalized = [];\n  for (let schedule of schedules) {\n    finalized.push(await findStartDate(schedule));\n  }\n  return finalized;\n}\n","import Spreadsheet from './spreadsheet/spreadsheet';\nimport * as prefs from './prefs';\nimport { captureBreadcrumb } from '../platform/exceptions';\nimport * as sqlite from '../platform/server/sqlite';\nimport { sheetForMonth } from '../shared/months';\nimport Platform from './platform';\nconst { resolveName } = require('./spreadsheet/util');\n\nlet globalSheet, globalOnChange;\nlet globalCacheDb;\n\nexport function get() {\n  return globalSheet;\n}\n\nasync function updateSpreadsheetCache(rawDb, names) {\n  await sqlite.transaction(rawDb, () => {\n    names.forEach(name => {\n      const node = globalSheet._getNode(name);\n\n      // Don't cache query nodes yet\n      if (node.sql == null) {\n        sqlite.runQuery(\n          rawDb,\n          'INSERT OR REPLACE INTO kvcache (key, value) VALUES (?, ?)',\n          [name, JSON.stringify(node.value)]\n        );\n      }\n    });\n  });\n}\n\nfunction setCacheStatus(mainDb, cacheDb, { clean }) {\n  if (clean) {\n    // Generate random number and stick in both places\n    let num = Math.random() * 10000000;\n    sqlite.runQuery(\n      cacheDb,\n      'INSERT OR REPLACE INTO kvcache_key (id, key) VALUES (1, ?)',\n      [num]\n    );\n\n    if (mainDb) {\n      sqlite.runQuery(\n        mainDb,\n        'INSERT OR REPLACE INTO kvcache_key (id, key) VALUES (1, ?)',\n        [num]\n      );\n    }\n  } else {\n    sqlite.runQuery(cacheDb, 'DELETE FROM kvcache_key');\n  }\n}\n\nfunction isCacheDirty(mainDb, cacheDb) {\n  let rows = sqlite.runQuery(\n    cacheDb,\n    'SELECT key FROM kvcache_key WHERE id = 1',\n    [],\n    true\n  );\n  let num = rows.length === 0 ? null : rows[0].key;\n\n  if (num == null) {\n    return true;\n  }\n\n  if (mainDb) {\n    let rows = sqlite.runQuery(\n      mainDb,\n      'SELECT key FROM kvcache_key WHERE id = 1',\n      [],\n      true\n    );\n    if (rows.length === 0 || rows[0].key !== num) {\n      return true;\n    }\n  }\n\n  // Always also check if there is anything in `kvcache`. We ask for one item;\n  // if we didn't get back anything it's empty so there is no cache\n  rows = sqlite.runQuery(cacheDb, 'SELECT * FROM kvcache LIMIT 1', [], true);\n  return rows.length === 0;\n}\n\nexport async function loadSpreadsheet(db, onSheetChange) {\n  let cacheEnabled = !global.__TESTING__;\n  let mainDb = db.getDatabase();\n  let cacheDb;\n\n  if (Platform.isDesktop && cacheEnabled) {\n    // Desktop apps use a separate database for the cache. This is because it is\n    // much more likely to directly work with files on desktop, and this makes\n    // it a lot clearer what the true filesize of the main db is (and avoid\n    // copying the cache data around).\n    let cachePath = db.getDatabasePath().replace(/db\\.sqlite$/, 'cache.sqlite');\n    globalCacheDb = cacheDb = sqlite.openDatabase(cachePath);\n\n    sqlite.execQuery(\n      cacheDb,\n      `\n        CREATE TABLE IF NOT EXISTS kvcache (key TEXT PRIMARY KEY, value TEXT);\n        CREATE TABLE IF NOT EXISTS kvcache_key (id INTEGER PRIMARY KEY, key REAL)\n      `\n    );\n  } else {\n    // All other platforms use the same database for cache\n    cacheDb = mainDb;\n  }\n\n  let sheet;\n  if (cacheEnabled) {\n    sheet = new Spreadsheet(\n      updateSpreadsheetCache.bind(null, cacheDb),\n      setCacheStatus.bind(null, mainDb, cacheDb)\n    );\n  } else {\n    sheet = new Spreadsheet();\n  }\n\n  captureBreadcrumb({\n    message: 'loading spreaadsheet',\n    category: 'server'\n  });\n\n  globalSheet = sheet;\n  globalOnChange = onSheetChange;\n\n  if (onSheetChange) {\n    sheet.addEventListener('change', onSheetChange);\n  }\n\n  if (cacheEnabled && !isCacheDirty(mainDb, cacheDb)) {\n    let cachedRows = await sqlite.runQuery(\n      cacheDb,\n      'SELECT * FROM kvcache',\n      [],\n      true\n    );\n    console.log(`Loaded spreadsheet from cache (${cachedRows.length} items)`);\n\n    for (let row of cachedRows) {\n      let parsed = JSON.parse(row.value);\n      sheet.load(row.key, parsed);\n    }\n  } else {\n    console.log('Loading fresh spreadsheet');\n    await loadUserBudgets(db);\n  }\n\n  captureBreadcrumb({\n    message: 'loaded spreaadsheet',\n    category: 'server'\n  });\n\n  return sheet;\n}\n\nexport function unloadSpreadsheet() {\n  if (globalSheet) {\n    // TODO: Should wait for the sheet to finish\n    globalSheet.unload();\n    globalSheet = null;\n  }\n\n  if (globalCacheDb) {\n    sqlite.closeDatabase(globalCacheDb);\n    globalCacheDb = null;\n  }\n}\n\nexport async function reloadSpreadsheet(db) {\n  if (globalSheet) {\n    unloadSpreadsheet();\n    return loadSpreadsheet(db, globalOnChange);\n  }\n}\n\nexport async function loadUserBudgets(db) {\n  let sheet = globalSheet;\n\n  // TODO: Clear out the cache here so make sure future loads of the app\n  // don't load any extra values that aren't set here\n\n  let { budgetType } = prefs.getPrefs() || {};\n\n  let table = budgetType === 'report' ? 'reflect_budgets' : 'zero_budgets';\n  let budgets = await db.all(`\n      SELECT * FROM ${table} b\n      LEFT JOIN categories c ON c.id = b.category\n      WHERE c.tombstone = 0\n    `);\n\n  sheet.startTransaction();\n\n  // Load all the budget amounts and carryover values\n  for (let budget of budgets) {\n    if (budget.month && budget.category) {\n      let sheetName = `budget${budget.month}`;\n      sheet.set(`${sheetName}!budget-${budget.category}`, budget.amount);\n      sheet.set(\n        `${sheetName}!carryover-${budget.category}`,\n        budget.carryover === 1 ? true : false\n      );\n    }\n  }\n\n  // For zero-based budgets, load the buffered amounts\n  if (budgetType !== 'report') {\n    let budgetMonths = await db.all('SELECT * FROM zero_budget_months');\n    for (let budgetMonth of budgetMonths) {\n      let sheetName = sheetForMonth(budgetMonth.id);\n      sheet.set(`${sheetName}!buffered`, budgetMonth.buffered);\n    }\n  }\n\n  sheet.endTransaction();\n}\n\nexport function getCell(sheet, name) {\n  return globalSheet._getNode(resolveName(sheet, name));\n}\n\nexport function getCellValue(sheet, name) {\n  return globalSheet.getValue(resolveName(sheet, name));\n}\n\nexport function startTransaction() {\n  if (globalSheet) {\n    globalSheet.startTransaction();\n  }\n}\n\nexport function endTransaction() {\n  if (globalSheet) {\n    globalSheet.endTransaction();\n  }\n}\n\nexport function waitOnSpreadsheet() {\n  return new Promise(resolve => {\n    if (globalSheet) {\n      globalSheet.onFinish(resolve);\n    } else {\n      resolve();\n    }\n  });\n}\n","function first(arr) {\n  return arr[0];\n}\n\nfunction firstValue(arr) {\n  const keys = Object.keys(arr[0]);\n  return arr[0][keys[0]];\n}\n\nfunction number(v) {\n  if (typeof v === 'number') {\n    return v;\n  } else if (typeof v === 'string') {\n    const parsed = parseFloat(v);\n    if (isNaN(parsed)) {\n      return 0;\n    }\n    return parsed;\n  }\n\n  return 0;\n}\n\nfunction min(x, y) {\n  return Math.min(x, y);\n}\n\nfunction max(x, y) {\n  return Math.max(x, y);\n}\n\nmodule.exports = {\n  first,\n  firstValue,\n  number,\n  min,\n  max\n};\n","function Graph(serialized) {\n  var graph = {\n    addNode,\n    removeNode,\n    adjacent,\n    adjacentIncoming,\n    addEdge,\n    removeEdge,\n    removeIncomingEdges,\n    topologicalSort,\n    generateDOT,\n    getEdges\n  };\n\n  var edges = new Map();\n  var incomingEdges = new Map();\n\n  function getEdges() {\n    return { edges, incomingEdges };\n  }\n\n  function addNode(node) {\n    edges.set(node, adjacent(node));\n    incomingEdges.set(node, adjacentIncoming(node));\n    return graph;\n  }\n\n  function removeIncomingEdges(node) {\n    const incoming = adjacentIncoming(node);\n    incomingEdges.set(node, new Set());\n\n    let iter = incoming.values();\n    let cur = iter.next();\n    while (!cur.done) {\n      removeEdge(cur.value, node);\n      cur = iter.next();\n    }\n  }\n\n  function removeNode(node) {\n    removeIncomingEdges(node);\n    edges.delete(node);\n    incomingEdges.delete(node);\n  }\n\n  function adjacent(node) {\n    return edges.get(node) || new Set();\n  }\n\n  function adjacentIncoming(node) {\n    return incomingEdges.get(node) || new Set();\n  }\n\n  // Adds an edge from node u to node v.\n  // Implicitly adds the nodes if they were not already added.\n  function addEdge(node1, node2) {\n    addNode(node1);\n    addNode(node2);\n    adjacent(node1).add(node2);\n    adjacentIncoming(node2).add(node1);\n    return graph;\n  }\n\n  // Removes the edge from node u to node v.\n  // Does not remove the nodes.\n  // Does nothing if the edge does not exist.\n  function removeEdge(node1, node2) {\n    if (edges.has(node1)) {\n      adjacent(node1).delete(node2);\n    }\n    if (incomingEdges.has(node2)) {\n      adjacentIncoming(node2).delete(node1);\n    }\n    return graph;\n  }\n\n  function topologicalSortUntil(name, visited, sorted) {\n    visited.add(name);\n\n    let iter = adjacent(name).values();\n    let cur = iter.next();\n    while (!cur.done) {\n      if (!visited.has(cur.value)) {\n        topologicalSortUntil(cur.value, visited, sorted);\n      }\n      cur = iter.next();\n    }\n\n    sorted.unshift(name);\n  }\n\n  function topologicalSort(sourceNodes) {\n    const visited = new Set();\n    const sorted = [];\n\n    sourceNodes.forEach(name => {\n      if (!visited.has(name)) {\n        topologicalSortUntil(name, visited, sorted);\n      }\n    });\n\n    return sorted;\n  }\n\n  function generateDOT() {\n    let edgeStrings = [];\n    edges.forEach(function(adj, edge) {\n      if (adj.length !== 0) {\n        edgeStrings.push(`${edge} -> {${adj.join(',')}}`);\n      }\n    });\n\n    return `\n      digraph G {\n       ${edgeStrings.join('\\n').replace(/!/g, '_')}\n      }\n    `;\n  }\n\n  return graph;\n}\n\nmodule.exports = Graph;\n","import mitt from 'mitt';\nimport { schema, schemaConfig } from '../aql/schema';\nimport { compileQuery } from '../aql/compiler';\nimport { runCompiledQuery } from '../aql/schema/run-query';\n\nconst Graph = require('./graph-data-structure');\nconst { unresolveName, resolveName } = require('./util');\n\nexport default class Spreadsheet {\n  constructor(saveCache, setCacheStatus) {\n    this.graph = new Graph();\n    this.nodes = new Map();\n    this.transactionDepth = 0;\n    this.saveCache = saveCache;\n    this.setCacheStatus = setCacheStatus;\n    this.dirtyCells = [];\n    this.computeQueue = [];\n    this.events = mitt();\n    this._meta = {\n      createdMonths: new Set()\n    };\n  }\n\n  meta() {\n    return this._meta;\n  }\n\n  setMeta(meta) {\n    this._meta = meta;\n  }\n\n  // Spreadsheet interface\n\n  _getNode(name) {\n    const { sheet } = unresolveName(name);\n\n    if (!this.nodes.has(name)) {\n      this.nodes.set(name, {\n        name,\n        expr: null,\n        value: null,\n        sheet: sheet\n      });\n    }\n    return this.nodes.get(name);\n  }\n\n  getNode(name) {\n    return this._getNode(name);\n  }\n\n  hasCell(name) {\n    return this.nodes.has(name);\n  }\n\n  add(name, expr, value) {\n    this.set(name, expr);\n  }\n\n  getNodes() {\n    return this.nodes;\n  }\n\n  serialize() {\n    return {\n      graph: this.graph.getEdges(),\n      nodes: [...this.nodes.entries()]\n    };\n  }\n\n  transaction(func) {\n    this.startTransaction();\n    try {\n      func();\n    } catch (e) {\n      console.log(e);\n    }\n    return this.endTransaction();\n  }\n\n  startTransaction() {\n    this.transactionDepth++;\n  }\n\n  endTransaction() {\n    this.transactionDepth--;\n\n    if (this.transactionDepth === 0) {\n      const cells = this.dirtyCells;\n      this.dirtyCells = [];\n\n      this.queueComputation(this.graph.topologicalSort(cells));\n    }\n\n    return [];\n  }\n\n  queueComputation(cellNames) {\n    // TODO: Formally write out the different cases when the existing\n    // queue is not empty. There should be cases where we can easily\n    // optimize this by skipping computations if we know they are\n    // going to be computed again. The hard thing is to ensure that\n    // the order of computations stays correct\n\n    this.computeQueue = this.computeQueue.concat(cellNames);\n\n    // Begin running on the next tick so we guarantee that it doesn't finish\n    // within the same tick. Since some computations are async, this makes it\n    // consistent (otherwise it would only sometimes finish sync)\n    Promise.resolve().then(() => {\n      if (!this.running) {\n        this.runComputations();\n      }\n    });\n  }\n\n  runComputations(idx = 0) {\n    this.running = true;\n\n    while (idx < this.computeQueue.length) {\n      let name = this.computeQueue[idx];\n      let node;\n      let result;\n\n      try {\n        node = this.getNode(name);\n\n        if (node._run) {\n          let args = node._dependencies.map(dep => {\n            return this.getNode(dep).value;\n          });\n\n          result = node._run(...args);\n\n          if (result instanceof Promise) {\n            console.warn(\n              'dynamic cell returned a promise! this is discouraged because errors are not handled properly'\n            );\n          }\n        } else if (node.sql) {\n          result = runCompiledQuery(\n            node.query,\n            node.sql.sqlPieces,\n            node.sql.state\n          );\n        } else {\n          idx++;\n          continue;\n        }\n      } catch (e) {\n        console.log('Error while evaluating ' + name + ':', e);\n        // If an error happens, bail on the rest of the computations\n        this.running = false;\n        this.computeQueue = [];\n        return;\n      }\n\n      if (result instanceof Promise) {\n        // When the cell is finished computing, finish computing the\n        // rest\n        result.then(\n          value => {\n            node.value = value;\n            this.runComputations(idx + 1);\n          },\n          err => {\n            // TODO: use captureException here\n            console.warn(`Failed running ${node.name}!`, err);\n            this.runComputations(idx + 1);\n          }\n        );\n\n        return;\n      } else {\n        node.value = result;\n      }\n\n      idx++;\n    }\n\n    // If everything computed in one loop (no async operations) notify\n    // the user and empty the queue\n    if (idx === this.computeQueue.length) {\n      this.events.emit('change', { names: this.computeQueue });\n\n      // Cache the updated cells\n      if (this.saveCache) {\n        this.saveCache(this.computeQueue);\n      }\n      this.markCacheSafe();\n\n      this.running = false;\n      this.computeQueue = [];\n    }\n  }\n\n  markCacheSafe() {\n    if (!this.cacheBarrier) {\n      if (this.setCacheStatus) {\n        this.setCacheStatus({ clean: true });\n      }\n    }\n  }\n\n  markCacheDirty() {\n    if (this.setCacheStatus) {\n      this.setCacheStatus({ clean: false });\n    }\n  }\n\n  startCacheBarrier() {\n    this.cacheBarrier = true;\n    this.markCacheDirty();\n  }\n\n  endCacheBarrier() {\n    this.cacheBarrier = false;\n\n    let pendingChange = this.running || this.computeQueue.length > 0;\n    if (!pendingChange) {\n      this.markCacheSafe();\n    }\n  }\n\n  addEventListener(name, func) {\n    this.events.on(name, func);\n    return () => this.events.off(name, func);\n  }\n\n  onFinish(func) {\n    if (this.transactionDepth !== 0) {\n      throw new Error(\n        'onFinish called while inside a spreadsheet transaction. This is not allowed as it will lead to race conditions'\n      );\n    }\n\n    if (!this.running && this.computeQueue.length === 0) {\n      func([]);\n      // The remove function does nothing\n      return () => {};\n    }\n\n    let remove = this.addEventListener('change', (...args) => {\n      remove();\n      return func(...args);\n    });\n    return remove;\n  }\n\n  unload() {\n    this.events.all.clear();\n  }\n\n  getValue(name) {\n    return this.getNode(name).value;\n  }\n\n  getExpr(name) {\n    return this.getNode(name).expr;\n  }\n\n  getCellValue(sheet, name) {\n    return this.getNode(resolveName(sheet, name)).value;\n  }\n\n  getCellExpr(sheet, name) {\n    return this.getNode(resolveName(sheet, name)).expr;\n  }\n\n  getCellValueLoose(sheetName, cellName) {\n    let name = resolveName(sheetName, cellName);\n    if (this.nodes.has(name)) {\n      return this.getNode(name).value;\n    }\n    return null;\n  }\n\n  bootup(onReady) {\n    this.onFinish(() => {\n      onReady();\n    });\n  }\n\n  load(name, value) {\n    const node = this._getNode(name);\n    node.expr = value;\n    node.value = value;\n  }\n\n  create(name, value) {\n    return this.transaction(() => {\n      const node = this._getNode(name);\n      node.expr = value;\n      node.value = value;\n      this._markDirty(name);\n    });\n  }\n\n  set(name, value) {\n    this.create(name, value);\n  }\n\n  recompute(name) {\n    this.transaction(() => {\n      this.dirtyCells.push(name);\n    });\n  }\n\n  recomputeAll() {\n    // Recompute everything!\n    this.transaction(() => {\n      this.dirtyCells = [...this.nodes.keys()];\n    });\n  }\n\n  createQuery(sheetName, cellName, query) {\n    let name = resolveName(sheetName, cellName);\n    let node = this._getNode(name);\n\n    if (node.query !== query) {\n      node.query = query;\n      let { sqlPieces, state } = compileQuery(node.query, schema, schemaConfig);\n      node.sql = { sqlPieces, state };\n\n      this.transaction(() => {\n        this._markDirty(name);\n      });\n    }\n  }\n\n  createStatic(sheetName, cellName, initialValue) {\n    let name = resolveName(sheetName, cellName);\n    let exists = this.nodes.has(name);\n    if (!exists) {\n      this.create(name, initialValue);\n    }\n  }\n\n  createDynamic(\n    sheetName,\n    cellName,\n    { dependencies = [], run, initialValue, refresh }\n  ) {\n    let name = resolveName(sheetName, cellName);\n    let node = this._getNode(name);\n\n    if (node.dynamic) {\n      // If it already exists, do nothing\n      return;\n    }\n\n    node.dynamic = true;\n    node._run = run;\n\n    dependencies = dependencies.map(dep => {\n      let resolved;\n      if (!unresolveName(dep).sheet) {\n        resolved = resolveName(sheetName, dep);\n      } else {\n        resolved = dep;\n      }\n\n      return resolved;\n    });\n\n    node._dependencies = dependencies;\n\n    // TODO: diff these\n    this.graph.removeIncomingEdges(name);\n    dependencies.forEach(dep => {\n      this.graph.addEdge(dep, name);\n    });\n\n    if (node.value == null || refresh) {\n      this.transaction(() => {\n        node.value = initialValue;\n        this._markDirty(name);\n      });\n    }\n  }\n\n  clearSheet(sheetName) {\n    for (let [name, node] of this.nodes.entries()) {\n      if (node.sheet === sheetName) {\n        this.nodes.delete(name);\n      }\n    }\n  }\n\n  voidCell(sheetName, name, voidValue = null) {\n    let node = this.getNode(resolveName(sheetName, name));\n    node._run = null;\n    node.dynamic = false;\n    node.value = voidValue;\n  }\n\n  deleteCell(sheetName, name) {\n    this.voidCell(sheetName, name);\n    this.nodes.delete(resolveName(sheetName, name));\n  }\n\n  addDependencies(sheetName, cellName, deps) {\n    let name = resolveName(sheetName, cellName);\n\n    deps = deps.map(dep => {\n      if (!unresolveName(dep).sheet) {\n        return resolveName(sheetName, dep);\n      }\n      return dep;\n    });\n\n    let node = this.getNode(name);\n    let newDeps = deps.filter(\n      dep => (node._dependencies || []).indexOf(dep) === -1\n    );\n\n    if (newDeps.length > 0) {\n      node._dependencies = (node._dependencies || []).concat(newDeps);\n      newDeps.forEach(dep => {\n        this.graph.addEdge(dep, name);\n      });\n      this.recompute(name);\n    }\n  }\n\n  removeDependencies(sheetName, cellName, deps) {\n    let name = resolveName(sheetName, cellName);\n\n    deps = deps.map(dep => {\n      if (!unresolveName(dep).sheet) {\n        return resolveName(sheetName, dep);\n      }\n      return dep;\n    });\n\n    let node = this.getNode(name);\n\n    node._dependencies = (node._dependencies || []).filter(\n      dep => deps.indexOf(dep) === -1\n    );\n\n    deps.forEach(dep => {\n      this.graph.removeEdge(dep, name);\n    });\n    this.recompute(name);\n  }\n\n  _markDirty(name) {\n    this.dirtyCells.push(name);\n  }\n\n  triggerDatabaseChanges(oldValues, newValues) {\n    let tables = new Set([...oldValues.keys(), ...newValues.keys()]);\n\n    this.startTransaction();\n    // TODO: Create an index of deps so we don't have to iterate\n    // across all nodes\n    this.nodes.forEach(node => {\n      if (\n        node.sql &&\n        node.sql.state.dependencies.some(dep => tables.has(dep))\n      ) {\n        this._markDirty(node.name);\n      }\n    });\n    this.endTransaction();\n  }\n}\n","function unresolveName(name) {\n  let idx = name.indexOf('!');\n  if (idx !== -1) {\n    return {\n      sheet: name.slice(0, idx),\n      name: name.slice(idx + 1)\n    };\n  }\n  return { sheet: null, name };\n}\n\nfunction resolveName(sheet, name) {\n  return sheet + '!' + name;\n}\n\nfunction resolveNamesAsObjects(sheets) {\n  const cells = {};\n  Object.keys(sheets).forEach(sheetName => {\n    const sheet = sheets[sheetName];\n\n    Object.keys(sheet).forEach(name => {\n      const expr = sheet[name];\n      cells[resolveName(sheetName, name)] = expr;\n    });\n  });\n  return cells;\n}\n\nfunction resolveNamesAsArrays(sheets) {\n  const cells = [];\n  Object.keys(sheets).forEach(sheetName => {\n    const sheet = sheets[sheetName];\n\n    sheet.forEach(name => {\n      const expr = sheet[name];\n      cells.push(resolveName(sheetName, name));\n    });\n  });\n  return cells;\n}\n\nmodule.exports = {\n  unresolveName,\n  resolveName,\n  resolveNamesAsObjects,\n  resolveNamesAsArrays\n};\n","import encryption from '../encryption';\nimport * as prefs from '../prefs';\nlet { SyncError } = require('../errors');\nlet SyncPb = require('./proto/sync_pb');\n\nfunction coerceBuffer(value) {\n  // The web encryption APIs give us back raw Uint8Array... but our\n  // encryption code assumes we can work with it as a buffer. This is\n  // a leaky abstraction and ideally the our abstraction over the web\n  // encryption APIs should do this.\n  if (!Buffer.isBuffer(value)) {\n    return Buffer.from(value);\n  }\n  return value;\n}\n\nexport async function encode(groupId, fileId, since, messages) {\n  let { encryptKeyId } = prefs.getPrefs();\n  let requestPb = new SyncPb.SyncRequest();\n\n  for (let i = 0; i < messages.length; i++) {\n    let msg = messages[i];\n    let envelopePb = new SyncPb.MessageEnvelope();\n    envelopePb.setTimestamp(msg.timestamp);\n\n    let messagePb = new SyncPb.Message();\n    messagePb.setDataset(msg.dataset);\n    messagePb.setRow(msg.row);\n    messagePb.setColumn(msg.column);\n    messagePb.setValue(msg.value);\n    let binaryMsg = messagePb.serializeBinary();\n\n    if (encryptKeyId) {\n      let encrypted = new SyncPb.EncryptedData();\n\n      let result;\n      try {\n        result = await encryption.encrypt(binaryMsg, encryptKeyId);\n      } catch (e) {\n        throw new SyncError('encrypt-failure', {\n          isMissingKey: e.message === 'missing-key'\n        });\n      }\n\n      encrypted.setData(result.value);\n      encrypted.setIv(Buffer.from(result.meta.iv, 'base64'));\n      encrypted.setAuthtag(Buffer.from(result.meta.authTag, 'base64'));\n\n      envelopePb.setContent(encrypted.serializeBinary());\n      envelopePb.setIsencrypted(true);\n    } else {\n      envelopePb.setContent(binaryMsg);\n    }\n\n    requestPb.addMessages(envelopePb);\n  }\n\n  requestPb.setGroupid(groupId);\n  requestPb.setFileid(fileId);\n  requestPb.setKeyid(encryptKeyId);\n  requestPb.setSince(since);\n\n  return requestPb.serializeBinary();\n}\n\nexport async function decode(data) {\n  let { encryptKeyId } = prefs.getPrefs();\n\n  let responsePb = SyncPb.SyncResponse.deserializeBinary(data);\n  let merkle = JSON.parse(responsePb.getMerkle());\n  let list = responsePb.getMessagesList();\n  let messages = [];\n\n  for (let i = 0; i < list.length; i++) {\n    let envelopePb = list[i];\n    let timestamp = envelopePb.getTimestamp();\n    let encrypted = envelopePb.getIsencrypted();\n    let msg;\n\n    if (encrypted) {\n      let binary = SyncPb.EncryptedData.deserializeBinary(\n        envelopePb.getContent()\n      );\n\n      let decrypted;\n      try {\n        decrypted = await encryption.decrypt(coerceBuffer(binary.getData()), {\n          keyId: encryptKeyId,\n          algorithm: 'aes-256-gcm',\n          iv: coerceBuffer(binary.getIv()),\n          authTag: coerceBuffer(binary.getAuthtag())\n        });\n      } catch (e) {\n        console.log(e);\n        throw new SyncError('decrypt-failure', {\n          isMissingKey: e.message === 'missing-key'\n        });\n      }\n\n      msg = SyncPb.Message.deserializeBinary(decrypted);\n    } else {\n      msg = SyncPb.Message.deserializeBinary(envelopePb.getContent());\n    }\n\n    messages.push({\n      timestamp: timestamp,\n      dataset: msg.getDataset(),\n      row: msg.getRow(),\n      column: msg.getColumn(),\n      value: msg.getValue()\n    });\n  }\n\n  return { messages, merkle };\n}\n","import { sequential, once } from '../../shared/async';\nimport * as perf from '../perf';\nimport * as prefs from '../prefs';\nimport app from '../main-app';\nimport asyncStorage from '../../platform/server/asyncStorage';\nimport { captureException } from '../../platform/exceptions';\nimport logger from '../../platform/server/log';\nimport { postBinary } from '../post';\nimport * as db from '../db';\nimport * as sheet from '../sheet';\nimport { triggerBudgetChanges, setType as setBudgetType } from '../budget/base';\nimport * as undo from '../undo';\nimport { runMutator } from '../mutators';\nimport { setIn, getIn } from '../../shared/util';\nimport Timestamp, {\n  serializeClock,\n  deserializeClock,\n  getClock\n} from '../timestamp';\nimport * as merkle from '../merkle';\nimport * as encoder from './encoder';\nimport { getConfig } from '../config';\nimport { rebuildMerkleHash } from './repair';\n\nconst { PostError, SyncError } = require('../errors');\nconst connection = require('../../platform/server/connection');\n\nlet FULL_SYNC_DELAY = 1000;\nlet SYNCING_MODE = 'enabled';\n\nexport function setSyncingMode(mode) {\n  let prevMode = SYNCING_MODE;\n  switch (mode) {\n    case 'enabled':\n      SYNCING_MODE = 'enabled';\n      break;\n    case 'offline':\n      SYNCING_MODE = 'offline';\n      break;\n    case 'disabled':\n      SYNCING_MODE = 'disabled';\n      break;\n    case 'import':\n      SYNCING_MODE = 'import';\n      break;\n    default:\n      throw new Error('setSyncingMode: invalid mode: ' + mode);\n  }\n  return prevMode;\n}\n\nexport function checkSyncingMode(mode) {\n  switch (mode) {\n    case 'enabled':\n      return SYNCING_MODE === 'enabled' || SYNCING_MODE === 'offline';\n    case 'disabled':\n      return SYNCING_MODE === 'disabled' || SYNCING_MODE === 'import';\n    case 'offline':\n      return SYNCING_MODE === 'offline';\n    case 'import':\n      return SYNCING_MODE === 'import';\n    default:\n      throw new Error('checkSyncingMode: invalid mode: ' + mode);\n  }\n}\n\nexport makeTestMessage from './make-test-message';\nexport resetSync from './reset';\nexport repairSync from './repair';\n\nfunction apply(msg, prev) {\n  let { dataset, row, column, value } = msg;\n\n  if (dataset === 'prefs') {\n    // Do nothing, it doesn't exist in the db\n  } else {\n    try {\n      let query;\n      if (prev) {\n        query = {\n          sql: db.cache(`UPDATE ${dataset} SET ${column} = ? WHERE id = ?`),\n          params: [value, row]\n        };\n      } else {\n        query = {\n          sql: db.cache(`INSERT INTO ${dataset} (id, ${column}) VALUES (?, ?)`),\n          params: [row, value]\n        };\n      }\n\n      db.runQuery(query.sql, query.params);\n    } catch (e) {\n      //console.log(e);\n      throw new SyncError('invalid-schema');\n    }\n  }\n}\n\nasync function fetchAll(table, ids) {\n  let results = [];\n\n  // TODO: convert to `whereIn`\n\n  for (let i = 0; i < ids.length; i += 500) {\n    let partIds = ids.slice(i, i + 500);\n    let sql;\n    let column = `${table}.id`;\n\n    // We have to provide *mapped* data so the spreadsheet works. The functions\n    // which trigger budget changes based on data changes assumes data has been\n    // mapped. The only mapped data that the budget is concerned about is\n    // categories. This is kind of annoying, but we manually map it here\n    if (table === 'transactions') {\n      sql = `\n        SELECT t.*, c.transferId AS category\n        FROM transactions t\n        LEFT JOIN category_mapping c ON c.id = t.category\n      `;\n      column = 't.id';\n    } else {\n      sql = `SELECT * FROM ${table}`;\n    }\n\n    sql += ` WHERE `;\n    sql += partIds.map(id => `${column} = ?`).join(' OR ');\n\n    try {\n      let rows = await db.runQuery(sql, partIds, true);\n      results = results.concat(rows);\n    } catch (e) {\n      throw new SyncError('invalid-schema');\n    }\n  }\n\n  return results;\n}\n\nexport function serializeValue(value) {\n  if (value === null) {\n    return '0:';\n  } else if (typeof value === 'number') {\n    return 'N:' + value;\n  } else if (typeof value === 'string') {\n    return 'S:' + value;\n  }\n\n  throw new Error('Unserializable value type: ' + JSON.stringify(value));\n}\n\nexport function deserializeValue(value) {\n  const type = value[0];\n  switch (type) {\n    case '0':\n      return null;\n    case 'N':\n      return parseFloat(value.slice(2));\n    case 'S':\n      return value.slice(2);\n    default:\n  }\n\n  throw new Error('Invalid type key for value: ' + value);\n}\n\nlet _syncListeners = [];\n\nexport function addSyncListener(func) {\n  _syncListeners.push(func);\n\n  return () => {\n    _syncListeners = _syncListeners.filter(f => f !== func);\n  };\n}\n\nasync function compareMessages(messages) {\n  let newMessages = [];\n\n  for (let i = 0; i < messages.length; i++) {\n    let message = messages[i];\n    let { dataset, row, column, timestamp } = message;\n    let timestampStr = timestamp.toString();\n\n    let res = db.runQuery(\n      db.cache(\n        'SELECT timestamp FROM messages_crdt WHERE dataset = ? AND row = ? AND column = ? AND timestamp >= ?'\n      ),\n      [dataset, row, column, timestampStr],\n      true\n    );\n\n    // Returned message is any one that is \"later\" than this message,\n    // meaning if the result exists this message is an old one\n    if (res.length === 0) {\n      newMessages.push(message);\n    } else if (res[0].timestamp !== timestampStr) {\n      newMessages.push({ ...message, old: true });\n    }\n  }\n\n  return newMessages;\n}\n\n// This is the fast path `apply` function when in \"import\" mode.\n// There's no need to run through the whole sync system when\n// importing, but **there is a caveat**: because we don't run sync\n// listeners importers should not rely on any functions that use any\n// projected state (like rules). We can't fire those because they\n// depend on having both old and new data which we don't quere here\nfunction applyMessagesForImport(messages) {\n  db.transaction(() => {\n    for (let i = 0; i < messages.length; i++) {\n      let msg = messages[i];\n      let { dataset, row, column, timestamp, value } = msg;\n\n      if (!msg.old) {\n        try {\n          apply(msg);\n        } catch (e) {\n          apply(msg, true);\n        }\n\n        if (dataset === 'prefs') {\n          throw new Error('Cannot set prefs while importing');\n        }\n      }\n    }\n  });\n}\n\nexport const applyMessages = sequential(async messages => {\n  if (checkSyncingMode('import')) {\n    return applyMessagesForImport(messages);\n  } else if (checkSyncingMode('enabled')) {\n    // Compare the messages with the existing crdt. This filters out\n    // already applied messages and determines if a message is old or\n    // not. An \"old\" message doesn't need to be applied, but it still\n    // needs to be put into the merkle trie to maintain the hash.\n    messages = await compareMessages(messages);\n  }\n\n  messages = [...messages].sort((m1, m2) => {\n    let t1 = m1.timestamp ? m1.timestamp.toString() : '';\n    let t2 = m2.timestamp ? m2.timestamp.toString() : '';\n    if (t1 < t2) {\n      return -1;\n    } else if (t1 > t2) {\n      return 1;\n    }\n    return 0;\n  });\n\n  let idsPerTable = {};\n  messages.forEach(msg => {\n    if (msg.dataset === 'prefs') {\n      return;\n    }\n\n    if (idsPerTable[msg.dataset] == null) {\n      idsPerTable[msg.dataset] = [];\n    }\n    idsPerTable[msg.dataset].push(msg.row);\n  });\n\n  async function fetchData() {\n    let data = new Map();\n\n    for (let table of Object.keys(idsPerTable)) {\n      const rows = await fetchAll(table, idsPerTable[table]);\n\n      for (let i = 0; i < rows.length; i++) {\n        let row = rows[i];\n        setIn(data, [table, row.id], row);\n      }\n    }\n\n    return data;\n  }\n\n  let prefsToSet = {};\n  let oldData = await fetchData();\n\n  undo.appendMessages(messages, oldData);\n\n  // It's important to not mutate the clock while processing the\n  // messages. We only want to mutate it if the transaction succeeds.\n  // The merkle variable will be updated while applying the messages and\n  // we'll apply it afterwards.\n  let clock;\n  let currentMerkle;\n  if (checkSyncingMode('enabled')) {\n    clock = getClock();\n    currentMerkle = clock.merkle;\n  }\n\n  if (sheet.get()) {\n    sheet.get().startCacheBarrier();\n  }\n\n  // Now that we have all of the data, go through and apply the\n  // messages carefully. This transaction is **crucial**: it\n  // guarantees that everything is atomically committed to the\n  // database, and if any part of it fails everything aborts and\n  // nothing is changed. This is critical to maintain consistency. We\n  // also avoid any side effects to in-memory objects, and apply them\n  // after this succeeds.\n  db.transaction(() => {\n    let added = new Set();\n\n    for (let i = 0; i < messages.length; i++) {\n      let msg = messages[i];\n      let { dataset, row, column, timestamp, value } = msg;\n\n      if (!msg.old) {\n        apply(msg, getIn(oldData, [dataset, row]) || added.has(dataset + row));\n\n        if (dataset === 'prefs') {\n          prefsToSet[row] = value;\n        } else {\n          // Keep track of which items have been added it in this sync\n          // so it knows whether they already exist in the db or not. We\n          // ignore any changes to the spreadsheet.\n          added.add(dataset + row);\n        }\n      }\n\n      if (checkSyncingMode('enabled')) {\n        db.runQuery(\n          db.cache(`INSERT INTO messages_crdt (timestamp, dataset, row, column, value)\n           VALUES (?, ?, ?, ?, ?)`),\n          [timestamp.toString(), dataset, row, column, serializeValue(value)]\n        );\n\n        currentMerkle = merkle.insert(currentMerkle, msg.timestamp);\n      }\n    }\n\n    if (checkSyncingMode('enabled')) {\n      currentMerkle = merkle.prune(currentMerkle);\n\n      // Save the clock in the db first (queries might throw\n      // exceptions)\n      db.runQuery(\n        db.cache(\n          'INSERT OR REPLACE INTO messages_clock (id, clock) VALUES (1, ?)'\n        ),\n        [serializeClock({ ...clock, merkle: currentMerkle })]\n      );\n    }\n  });\n\n  if (checkSyncingMode('enabled')) {\n    // The transaction succeeded, so we can update in-memory objects\n    // now. Update the in-memory clock.\n    clock.merkle = currentMerkle;\n  }\n\n  // Save any synced prefs\n  if (Object.keys(prefsToSet).length > 0) {\n    prefs.savePrefs(prefsToSet, { avoidSync: true });\n\n    if (prefsToSet.budgetType) {\n      setBudgetType(prefsToSet.budgetType);\n    }\n\n    connection.send('prefs-updated');\n  }\n\n  let newData = await fetchData();\n\n  // In testing, sometimes the spreadsheet isn't loaded, and that's ok\n  if (sheet.get()) {\n    // Need to clean up these APIs and make them consistent\n    sheet.startTransaction();\n    triggerBudgetChanges(oldData, newData);\n    sheet.get().triggerDatabaseChanges(oldData, newData);\n    sheet.endTransaction();\n\n    // Allow the cache to be used in the future. At this point it's guaranteed\n    // to be up-to-date because we are done mutating any other data\n    sheet.get().endCacheBarrier();\n  }\n\n  _syncListeners.forEach(func => func(oldData, newData));\n\n  let tables = getTablesFromMessages(messages.filter(msg => !msg.old));\n  app.events.emit('sync', {\n    type: 'applied',\n    tables,\n    data: newData,\n    prevData: oldData\n  });\n\n  return messages;\n});\n\nexport function receiveMessages(messages) {\n  messages.forEach(msg => {\n    Timestamp.recv(msg.timestamp);\n  });\n\n  return runMutator(() => applyMessages(messages));\n}\n\nasync function _sendMessages(messages) {\n  try {\n    await applyMessages(messages);\n  } catch (e) {\n    if (e instanceof SyncError) {\n      if (e.reason === 'invalid-schema') {\n        // We know this message came from a local modification, and it\n        // couldn't apply, which doesn't make any sense. Must be a bug\n        // in the code. Send a specific error type for it for a custom\n        // message.\n        app.events.emit('sync', {\n          type: 'error',\n          subtype: 'apply-failure'\n        });\n      } else {\n        app.events.emit('sync', { type: 'error' });\n      }\n    }\n\n    throw e;\n  }\n\n  await scheduleFullSync();\n}\n\nlet IS_BATCHING = false;\nlet _BATCHED = [];\nexport async function batchMessages(func) {\n  if (IS_BATCHING) {\n    await func();\n    return;\n  }\n\n  IS_BATCHING = true;\n  let batched = [];\n\n  try {\n    await func();\n    // TODO: if it fails, it shouldn't apply them?\n  } finally {\n    IS_BATCHING = false;\n    batched = _BATCHED;\n    _BATCHED = [];\n  }\n\n  if (batched.length > 0) {\n    await _sendMessages(batched);\n  }\n}\n\nexport async function sendMessages(messages) {\n  if (IS_BATCHING) {\n    _BATCHED = _BATCHED.concat(messages);\n  } else {\n    return _sendMessages(messages);\n  }\n}\n\nexport function getMessagesSince(since) {\n  return db.runQuery(\n    'SELECT timestamp, dataset, row, column, value FROM messages_crdt WHERE timestamp > ?',\n    [since],\n    true\n  );\n}\n\nexport async function syncAndReceiveMessages(messages, since) {\n  let localMessages = await getMessagesSince(since);\n  await receiveMessages(\n    messages.map(msg => ({\n      ...msg,\n      value: deserializeValue(msg.value),\n      timestamp: Timestamp.parse(msg.timestamp)\n    }))\n  );\n  return localMessages;\n}\n\nexport function clearFullSyncTimeout() {\n  if (syncTimeout) {\n    clearTimeout(syncTimeout);\n    syncTimeout = null;\n  }\n}\n\nlet syncTimeout = null;\nexport function scheduleFullSync() {\n  clearFullSyncTimeout();\n\n  if (checkSyncingMode('enabled') && !checkSyncingMode('offline')) {\n    if (global.__TESTING__) {\n      return fullSync().then(res => {\n        if (res.error) {\n          throw res.error;\n        }\n        return res;\n      });\n    } else {\n      syncTimeout = setTimeout(fullSync, FULL_SYNC_DELAY);\n    }\n  }\n}\n\nfunction getTablesFromMessages(messages) {\n  return messages.reduce((acc, message) => {\n    let dataset =\n      message.dataset === 'schedules_next_date' ? 'schedules' : message.dataset;\n\n    if (!acc.includes(dataset)) {\n      acc.push(dataset);\n    }\n    return acc;\n  }, []);\n}\n\n// This is different than `fullSync` because it waits for the\n// spreadsheet to finish any processing. This is useful if we want to\n// perform a full sync and wait for everything to finish, usually if\n// you're doing an initial sync before working with a file.\nexport async function initialFullSync() {\n  let result = await fullSync();\n  if (!result.error) {\n    // Make sure to wait for anything in the spreadsheet to process\n    await sheet.waitOnSpreadsheet();\n  }\n}\n\nexport const fullSync = once(async function() {\n  app.events.emit('sync', { type: 'start' });\n  let messages;\n\n  try {\n    messages = await _fullSync(null, 0, null);\n  } catch (e) {\n    console.log(e);\n\n    if (e instanceof SyncError) {\n      if (e.reason === 'out-of-sync') {\n        captureException(e);\n\n        app.events.emit('sync', {\n          type: 'error',\n          subtype: 'out-of-sync'\n        });\n      } else if (e.reason === 'invalid-schema') {\n        app.events.emit('sync', {\n          type: 'error',\n          subtype: 'invalid-schema'\n        });\n      } else if (\n        e.reason === 'decrypt-failure' ||\n        e.reason === 'encrypt-failure'\n      ) {\n        app.events.emit('sync', {\n          type: 'error',\n          subtype: e.reason,\n          meta: e.meta\n        });\n      } else if (e.reason === 'beta-version') {\n        app.events.emit('sync', {\n          type: 'error',\n          subtype: e.reason\n        });\n      } else {\n        app.events.emit('sync', { type: 'error' });\n      }\n    } else if (e instanceof PostError) {\n      console.log(e);\n      if (e.reason === 'unauthorized') {\n        app.events.emit('sync', { type: 'unauthorized' });\n\n        // Set the user into read-only mode\n        asyncStorage.setItem('readOnly', 'true');\n      } else if (e.reason === 'network-failure') {\n        app.events.emit('sync', { type: 'error', subtype: 'network' });\n      } else {\n        app.events.emit('sync', { type: 'error', subtype: e.reason });\n      }\n    } else {\n      captureException(e);\n      // TODO: Send the message to the client and allow them to expand & view it\n      app.events.emit('sync', { type: 'error' });\n    }\n\n    return { error: { message: e.message, reason: e.reason, meta: e.meta } };\n  }\n\n  let tables = getTablesFromMessages(messages);\n\n  app.events.emit('sync', {\n    type: 'success',\n    tables,\n    syncDisabled: checkSyncingMode('disabled')\n  });\n  return { messages };\n});\n\nasync function _fullSync(sinceTimestamp, count, prevDiffTime) {\n  let { cloudFileId, groupId, lastSyncedTimestamp } = prefs.getPrefs() || {};\n\n  clearFullSyncTimeout();\n\n  if (checkSyncingMode('disabled') || checkSyncingMode('offline')) {\n    return [];\n  }\n\n  // Snapshot the point at which we are currently syncing\n  let currentTime = getClock().timestamp.toString();\n\n  let since =\n    sinceTimestamp ||\n    lastSyncedTimestamp ||\n    // Default to 5 minutes ago\n    new Timestamp(Date.now() - 5 * 60 * 1000, 0, '0').toString();\n\n  let messages = getMessagesSince(since);\n\n  let userToken = await asyncStorage.getItem('user-token');\n\n  logger.info(\n    'Syncing since',\n    since,\n    messages.length,\n    '(attempt: ' + count + ')'\n  );\n\n  let buffer = await encoder.encode(groupId, cloudFileId, since, messages);\n\n  // TODO: There a limit on how many messages we can send because of\n  // the payload size. Right now it's at 20MB on the server. We should\n  // check the worst case here and make multiple requests if it's\n  // really large.\n  let resBuffer = await postBinary(getConfig().SYNC_SERVER + '/sync', buffer, {\n    'X-ACTUAL-TOKEN': userToken\n  });\n\n  // Abort if the file is either no longer loaded, the group id has\n  // changed because of a sync reset\n  if (!prefs.getPrefs() || prefs.getPrefs().groupId !== groupId) {\n    return [];\n  }\n\n  let res = await encoder.decode(resBuffer);\n\n  logger.info('Got messages from server', res.messages.length);\n\n  let localTimeChanged = getClock().timestamp.toString() !== currentTime;\n\n  // Apply the new messages\n  let receivedMessages = [];\n  if (res.messages.length > 0) {\n    receivedMessages = await receiveMessages(\n      res.messages.map(msg => ({\n        ...msg,\n        value: deserializeValue(msg.value),\n        timestamp: Timestamp.parse(msg.timestamp)\n      }))\n    );\n  }\n\n  let diffTime = merkle.diff(res.merkle, getClock().merkle);\n  let result = res.messages;\n\n  if (diffTime !== null) {\n    // This is a bit wonky, but we loop until we are in sync with the\n    // server. While syncing, either the client or server could change\n    // out from under us, so it might take a couple passes to\n    // completely sync up. This is a check that stops the loop in case\n    // we are corrupted and can't sync up. We try 10 times if we keep\n    // getting the same diff time, and add a upper limit of 300 no\n    // matter what (just to stop this from ever being an infinite\n    // loop).\n    //\n    // It's slightly possible for the user to add more messages while we\n    // are in `receiveMessages`, but `localTimeChanged` would still be\n    // false. In that case, we don't reset the counter but it should be\n    // very unlikely that this happens enough to hit the loop limit.\n\n    if ((count >= 10 && diffTime === prevDiffTime) || count >= 100) {\n      logger.info('SENT -------');\n      logger.info(JSON.stringify(messages));\n      logger.info('RECEIVED -------');\n      logger.info(JSON.stringify(res.messages));\n\n      let rebuiltMerkle = rebuildMerkleHash();\n\n      console.log(\n        count,\n        'messages:',\n        messages.length,\n        messages.length > 0 ? messages[0] : null,\n        'res.messages:',\n        res.messages.length,\n        res.messages.length > 0 ? res.messages[0] : null,\n        'clientId',\n        getClock().timestamp.node(),\n        'groupId',\n        groupId,\n        'diffTime:',\n        diffTime,\n        diffTime === prevDiffTime,\n        'local clock:',\n        getClock().timestamp.toString(),\n        getClock().merkle.hash,\n        'rebuilt hash:',\n        rebuiltMerkle.numMessages,\n        rebuiltMerkle.trie.hash,\n        'server hash:',\n        res.merkle.hash,\n        'localTimeChanged:',\n        localTimeChanged\n      );\n\n      if (rebuiltMerkle.trie.hash === res.merkle.hash) {\n        // Rebuilding the merkle worked... but why?\n        let clocks = await db.all('SELECT * FROM messages_clock');\n        if (clocks.length !== 1) {\n          console.log('Bad number of clocks:', clocks.length);\n        }\n        let hash = deserializeClock(clocks[0]).merkle.hash;\n        console.log('Merkle hash in db:', hash);\n      }\n\n      throw new SyncError('out-of-sync');\n    }\n\n    receivedMessages = receivedMessages.concat(\n      await _fullSync(\n        new Timestamp(diffTime, 0, '0').toString(),\n        // If something local changed while we were syncing, always\n        // reset, token the counter. We never want to think syncing failed\n        // because we tried to syncing many times and couldn't sync,\n        // but it was because the user kept changing stuff in the\n        // middle of syncing.\n        localTimeChanged ? 0 : count + 1,\n        diffTime\n      )\n    );\n  } else {\n    // All synced up, store the current time as a simple optimization\n    // for the next sync\n    await prefs.savePrefs({\n      lastSyncedTimestamp: getClock().timestamp.toString()\n    });\n  }\n\n  return receivedMessages;\n}\n","import encryption from '../encryption';\nlet SyncPb = require('./proto/sync_pb');\n\nasync function randomString() {\n  return (await encryption.randomBytes(12)).toString();\n}\n\nexport default async function makeTestMessage(keyId) {\n  let messagePb = new SyncPb.Message();\n  messagePb.setDataset(await randomString());\n  messagePb.setRow(await randomString());\n  messagePb.setColumn(await randomString());\n  messagePb.setValue(await randomString());\n  let binaryMsg = messagePb.serializeBinary();\n\n  return await encryption.encrypt(binaryMsg, keyId);\n}\n","import { addSyncListener, applyMessages } from './index';\nimport Timestamp from '../timestamp';\n\nfunction migrateParentIds(oldValues, newValues) {\n  newValues.forEach((items, table) => {\n    if (table === 'transactions') {\n      let old = oldValues.get(table);\n      let toApply = [];\n\n      items.forEach(newValue => {\n        if (\n          newValue.isChild === 1 &&\n          newValue.parent_id == null &&\n          newValue.id.includes('/')\n        ) {\n          let parentId = newValue.id.split('/')[0];\n\n          toApply.push({\n            dataset: 'transactions',\n            row: newValue.id,\n            column: 'parent_id',\n            value: parentId,\n            timestamp: Timestamp.send()\n          });\n        }\n      });\n\n      if (toApply.length > 0) {\n        applyMessages(toApply);\n      }\n    }\n  });\n}\n\nlet _unlisten = null;\nexport function listen() {\n  unlisten();\n  _unlisten = addSyncListener(migrateParentIds);\n}\n\nexport function unlisten() {\n  if (_unlisten) {\n    _unlisten();\n    _unlisten = null;\n  }\n}\n","// source: sync.proto\n/**\n * @fileoverview\n * @enhanceable\n * @suppress {messageConventions} JS Compiler reports an error if a variable or\n *     field starts with 'MSG_' and isn't a translatable message.\n * @public\n */\n// GENERATED CODE -- DO NOT EDIT!\n\nvar jspb = require('google-protobuf');\nvar goog = jspb;\nvar global = globalThis;\n\ngoog.exportSymbol('proto.EncryptedData', null, global);\ngoog.exportSymbol('proto.Message', null, global);\ngoog.exportSymbol('proto.MessageEnvelope', null, global);\ngoog.exportSymbol('proto.SyncRequest', null, global);\ngoog.exportSymbol('proto.SyncResponse', null, global);\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.EncryptedData = function(opt_data) {\n  jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.EncryptedData, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n  /**\n   * @public\n   * @override\n   */\n  proto.EncryptedData.displayName = 'proto.EncryptedData';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.Message = function(opt_data) {\n  jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.Message, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n  /**\n   * @public\n   * @override\n   */\n  proto.Message.displayName = 'proto.Message';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.MessageEnvelope = function(opt_data) {\n  jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.MessageEnvelope, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n  /**\n   * @public\n   * @override\n   */\n  proto.MessageEnvelope.displayName = 'proto.MessageEnvelope';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.SyncRequest = function(opt_data) {\n  jspb.Message.initialize(this, opt_data, 0, -1, proto.SyncRequest.repeatedFields_, null);\n};\ngoog.inherits(proto.SyncRequest, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n  /**\n   * @public\n   * @override\n   */\n  proto.SyncRequest.displayName = 'proto.SyncRequest';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.SyncResponse = function(opt_data) {\n  jspb.Message.initialize(this, opt_data, 0, -1, proto.SyncResponse.repeatedFields_, null);\n};\ngoog.inherits(proto.SyncResponse, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n  /**\n   * @public\n   * @override\n   */\n  proto.SyncResponse.displayName = 'proto.SyncResponse';\n}\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.\n * For the list of reserved names please see:\n *     net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n *     JSPB instance for transitional soy proto support:\n *     http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.EncryptedData.prototype.toObject = function(opt_includeInstance) {\n  return proto.EncryptedData.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n *     the JSPB instance for transitional soy proto support:\n *     http://goto/soy-param-migration\n * @param {!proto.EncryptedData} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.EncryptedData.toObject = function(includeInstance, msg) {\n  var f, obj = {\n    iv: msg.getIv_asB64(),\n    authtag: msg.getAuthtag_asB64(),\n    data: msg.getData_asB64()\n  };\n\n  if (includeInstance) {\n    obj.$jspbMessageInstance = msg;\n  }\n  return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.EncryptedData}\n */\nproto.EncryptedData.deserializeBinary = function(bytes) {\n  var reader = new jspb.BinaryReader(bytes);\n  var msg = new proto.EncryptedData;\n  return proto.EncryptedData.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.EncryptedData} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.EncryptedData}\n */\nproto.EncryptedData.deserializeBinaryFromReader = function(msg, reader) {\n  while (reader.nextField()) {\n    if (reader.isEndGroup()) {\n      break;\n    }\n    var field = reader.getFieldNumber();\n    switch (field) {\n    case 1:\n      var value = /** @type {!Uint8Array} */ (reader.readBytes());\n      msg.setIv(value);\n      break;\n    case 2:\n      var value = /** @type {!Uint8Array} */ (reader.readBytes());\n      msg.setAuthtag(value);\n      break;\n    case 3:\n      var value = /** @type {!Uint8Array} */ (reader.readBytes());\n      msg.setData(value);\n      break;\n    default:\n      reader.skipField();\n      break;\n    }\n  }\n  return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.EncryptedData.prototype.serializeBinary = function() {\n  var writer = new jspb.BinaryWriter();\n  proto.EncryptedData.serializeBinaryToWriter(this, writer);\n  return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.EncryptedData} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.EncryptedData.serializeBinaryToWriter = function(message, writer) {\n  var f = undefined;\n  f = message.getIv_asU8();\n  if (f.length > 0) {\n    writer.writeBytes(\n      1,\n      f\n    );\n  }\n  f = message.getAuthtag_asU8();\n  if (f.length > 0) {\n    writer.writeBytes(\n      2,\n      f\n    );\n  }\n  f = message.getData_asU8();\n  if (f.length > 0) {\n    writer.writeBytes(\n      3,\n      f\n    );\n  }\n};\n\n\n/**\n * optional bytes iv = 1;\n * @return {!(string|Uint8Array)}\n */\nproto.EncryptedData.prototype.getIv = function() {\n  return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * optional bytes iv = 1;\n * This is a type-conversion wrapper around `getIv()`\n * @return {string}\n */\nproto.EncryptedData.prototype.getIv_asB64 = function() {\n  return /** @type {string} */ (jspb.Message.bytesAsB64(\n      this.getIv()));\n};\n\n\n/**\n * optional bytes iv = 1;\n * Note that Uint8Array is not supported on all browsers.\n * @see http://caniuse.com/Uint8Array\n * This is a type-conversion wrapper around `getIv()`\n * @return {!Uint8Array}\n */\nproto.EncryptedData.prototype.getIv_asU8 = function() {\n  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(\n      this.getIv()));\n};\n\n\n/**\n * @param {!(string|Uint8Array)} value\n * @return {!proto.EncryptedData} returns this\n */\nproto.EncryptedData.prototype.setIv = function(value) {\n  return jspb.Message.setProto3BytesField(this, 1, value);\n};\n\n\n/**\n * optional bytes authTag = 2;\n * @return {!(string|Uint8Array)}\n */\nproto.EncryptedData.prototype.getAuthtag = function() {\n  return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * optional bytes authTag = 2;\n * This is a type-conversion wrapper around `getAuthtag()`\n * @return {string}\n */\nproto.EncryptedData.prototype.getAuthtag_asB64 = function() {\n  return /** @type {string} */ (jspb.Message.bytesAsB64(\n      this.getAuthtag()));\n};\n\n\n/**\n * optional bytes authTag = 2;\n * Note that Uint8Array is not supported on all browsers.\n * @see http://caniuse.com/Uint8Array\n * This is a type-conversion wrapper around `getAuthtag()`\n * @return {!Uint8Array}\n */\nproto.EncryptedData.prototype.getAuthtag_asU8 = function() {\n  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(\n      this.getAuthtag()));\n};\n\n\n/**\n * @param {!(string|Uint8Array)} value\n * @return {!proto.EncryptedData} returns this\n */\nproto.EncryptedData.prototype.setAuthtag = function(value) {\n  return jspb.Message.setProto3BytesField(this, 2, value);\n};\n\n\n/**\n * optional bytes data = 3;\n * @return {!(string|Uint8Array)}\n */\nproto.EncryptedData.prototype.getData = function() {\n  return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * optional bytes data = 3;\n * This is a type-conversion wrapper around `getData()`\n * @return {string}\n */\nproto.EncryptedData.prototype.getData_asB64 = function() {\n  return /** @type {string} */ (jspb.Message.bytesAsB64(\n      this.getData()));\n};\n\n\n/**\n * optional bytes data = 3;\n * Note that Uint8Array is not supported on all browsers.\n * @see http://caniuse.com/Uint8Array\n * This is a type-conversion wrapper around `getData()`\n * @return {!Uint8Array}\n */\nproto.EncryptedData.prototype.getData_asU8 = function() {\n  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(\n      this.getData()));\n};\n\n\n/**\n * @param {!(string|Uint8Array)} value\n * @return {!proto.EncryptedData} returns this\n */\nproto.EncryptedData.prototype.setData = function(value) {\n  return jspb.Message.setProto3BytesField(this, 3, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.\n * For the list of reserved names please see:\n *     net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n *     JSPB instance for transitional soy proto support:\n *     http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.Message.prototype.toObject = function(opt_includeInstance) {\n  return proto.Message.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n *     the JSPB instance for transitional soy proto support:\n *     http://goto/soy-param-migration\n * @param {!proto.Message} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.Message.toObject = function(includeInstance, msg) {\n  var f, obj = {\n    dataset: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n    row: jspb.Message.getFieldWithDefault(msg, 2, \"\"),\n    column: jspb.Message.getFieldWithDefault(msg, 3, \"\"),\n    value: jspb.Message.getFieldWithDefault(msg, 4, \"\")\n  };\n\n  if (includeInstance) {\n    obj.$jspbMessageInstance = msg;\n  }\n  return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.Message}\n */\nproto.Message.deserializeBinary = function(bytes) {\n  var reader = new jspb.BinaryReader(bytes);\n  var msg = new proto.Message;\n  return proto.Message.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.Message} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.Message}\n */\nproto.Message.deserializeBinaryFromReader = function(msg, reader) {\n  while (reader.nextField()) {\n    if (reader.isEndGroup()) {\n      break;\n    }\n    var field = reader.getFieldNumber();\n    switch (field) {\n    case 1:\n      var value = /** @type {string} */ (reader.readString());\n      msg.setDataset(value);\n      break;\n    case 2:\n      var value = /** @type {string} */ (reader.readString());\n      msg.setRow(value);\n      break;\n    case 3:\n      var value = /** @type {string} */ (reader.readString());\n      msg.setColumn(value);\n      break;\n    case 4:\n      var value = /** @type {string} */ (reader.readString());\n      msg.setValue(value);\n      break;\n    default:\n      reader.skipField();\n      break;\n    }\n  }\n  return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.Message.prototype.serializeBinary = function() {\n  var writer = new jspb.BinaryWriter();\n  proto.Message.serializeBinaryToWriter(this, writer);\n  return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.Message} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.Message.serializeBinaryToWriter = function(message, writer) {\n  var f = undefined;\n  f = message.getDataset();\n  if (f.length > 0) {\n    writer.writeString(\n      1,\n      f\n    );\n  }\n  f = message.getRow();\n  if (f.length > 0) {\n    writer.writeString(\n      2,\n      f\n    );\n  }\n  f = message.getColumn();\n  if (f.length > 0) {\n    writer.writeString(\n      3,\n      f\n    );\n  }\n  f = message.getValue();\n  if (f.length > 0) {\n    writer.writeString(\n      4,\n      f\n    );\n  }\n};\n\n\n/**\n * optional string dataset = 1;\n * @return {string}\n */\nproto.Message.prototype.getDataset = function() {\n  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Message} returns this\n */\nproto.Message.prototype.setDataset = function(value) {\n  return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional string row = 2;\n * @return {string}\n */\nproto.Message.prototype.getRow = function() {\n  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Message} returns this\n */\nproto.Message.prototype.setRow = function(value) {\n  return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\n/**\n * optional string column = 3;\n * @return {string}\n */\nproto.Message.prototype.getColumn = function() {\n  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Message} returns this\n */\nproto.Message.prototype.setColumn = function(value) {\n  return jspb.Message.setProto3StringField(this, 3, value);\n};\n\n\n/**\n * optional string value = 4;\n * @return {string}\n */\nproto.Message.prototype.getValue = function() {\n  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Message} returns this\n */\nproto.Message.prototype.setValue = function(value) {\n  return jspb.Message.setProto3StringField(this, 4, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.\n * For the list of reserved names please see:\n *     net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n *     JSPB instance for transitional soy proto support:\n *     http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.MessageEnvelope.prototype.toObject = function(opt_includeInstance) {\n  return proto.MessageEnvelope.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n *     the JSPB instance for transitional soy proto support:\n *     http://goto/soy-param-migration\n * @param {!proto.MessageEnvelope} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.MessageEnvelope.toObject = function(includeInstance, msg) {\n  var f, obj = {\n    timestamp: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n    isencrypted: jspb.Message.getBooleanFieldWithDefault(msg, 2, false),\n    content: msg.getContent_asB64()\n  };\n\n  if (includeInstance) {\n    obj.$jspbMessageInstance = msg;\n  }\n  return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.MessageEnvelope}\n */\nproto.MessageEnvelope.deserializeBinary = function(bytes) {\n  var reader = new jspb.BinaryReader(bytes);\n  var msg = new proto.MessageEnvelope;\n  return proto.MessageEnvelope.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.MessageEnvelope} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.MessageEnvelope}\n */\nproto.MessageEnvelope.deserializeBinaryFromReader = function(msg, reader) {\n  while (reader.nextField()) {\n    if (reader.isEndGroup()) {\n      break;\n    }\n    var field = reader.getFieldNumber();\n    switch (field) {\n    case 1:\n      var value = /** @type {string} */ (reader.readString());\n      msg.setTimestamp(value);\n      break;\n    case 2:\n      var value = /** @type {boolean} */ (reader.readBool());\n      msg.setIsencrypted(value);\n      break;\n    case 3:\n      var value = /** @type {!Uint8Array} */ (reader.readBytes());\n      msg.setContent(value);\n      break;\n    default:\n      reader.skipField();\n      break;\n    }\n  }\n  return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.MessageEnvelope.prototype.serializeBinary = function() {\n  var writer = new jspb.BinaryWriter();\n  proto.MessageEnvelope.serializeBinaryToWriter(this, writer);\n  return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.MessageEnvelope} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.MessageEnvelope.serializeBinaryToWriter = function(message, writer) {\n  var f = undefined;\n  f = message.getTimestamp();\n  if (f.length > 0) {\n    writer.writeString(\n      1,\n      f\n    );\n  }\n  f = message.getIsencrypted();\n  if (f) {\n    writer.writeBool(\n      2,\n      f\n    );\n  }\n  f = message.getContent_asU8();\n  if (f.length > 0) {\n    writer.writeBytes(\n      3,\n      f\n    );\n  }\n};\n\n\n/**\n * optional string timestamp = 1;\n * @return {string}\n */\nproto.MessageEnvelope.prototype.getTimestamp = function() {\n  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.MessageEnvelope} returns this\n */\nproto.MessageEnvelope.prototype.setTimestamp = function(value) {\n  return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional bool isEncrypted = 2;\n * @return {boolean}\n */\nproto.MessageEnvelope.prototype.getIsencrypted = function() {\n  return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 2, false));\n};\n\n\n/**\n * @param {boolean} value\n * @return {!proto.MessageEnvelope} returns this\n */\nproto.MessageEnvelope.prototype.setIsencrypted = function(value) {\n  return jspb.Message.setProto3BooleanField(this, 2, value);\n};\n\n\n/**\n * optional bytes content = 3;\n * @return {!(string|Uint8Array)}\n */\nproto.MessageEnvelope.prototype.getContent = function() {\n  return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * optional bytes content = 3;\n * This is a type-conversion wrapper around `getContent()`\n * @return {string}\n */\nproto.MessageEnvelope.prototype.getContent_asB64 = function() {\n  return /** @type {string} */ (jspb.Message.bytesAsB64(\n      this.getContent()));\n};\n\n\n/**\n * optional bytes content = 3;\n * Note that Uint8Array is not supported on all browsers.\n * @see http://caniuse.com/Uint8Array\n * This is a type-conversion wrapper around `getContent()`\n * @return {!Uint8Array}\n */\nproto.MessageEnvelope.prototype.getContent_asU8 = function() {\n  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(\n      this.getContent()));\n};\n\n\n/**\n * @param {!(string|Uint8Array)} value\n * @return {!proto.MessageEnvelope} returns this\n */\nproto.MessageEnvelope.prototype.setContent = function(value) {\n  return jspb.Message.setProto3BytesField(this, 3, value);\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array<number>}\n * @const\n */\nproto.SyncRequest.repeatedFields_ = [1];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.\n * For the list of reserved names please see:\n *     net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n *     JSPB instance for transitional soy proto support:\n *     http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.SyncRequest.prototype.toObject = function(opt_includeInstance) {\n  return proto.SyncRequest.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n *     the JSPB instance for transitional soy proto support:\n *     http://goto/soy-param-migration\n * @param {!proto.SyncRequest} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SyncRequest.toObject = function(includeInstance, msg) {\n  var f, obj = {\n    messagesList: jspb.Message.toObjectList(msg.getMessagesList(),\n    proto.MessageEnvelope.toObject, includeInstance),\n    fileid: jspb.Message.getFieldWithDefault(msg, 2, \"\"),\n    groupid: jspb.Message.getFieldWithDefault(msg, 3, \"\"),\n    keyid: jspb.Message.getFieldWithDefault(msg, 5, \"\"),\n    since: jspb.Message.getFieldWithDefault(msg, 6, \"\")\n  };\n\n  if (includeInstance) {\n    obj.$jspbMessageInstance = msg;\n  }\n  return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.SyncRequest}\n */\nproto.SyncRequest.deserializeBinary = function(bytes) {\n  var reader = new jspb.BinaryReader(bytes);\n  var msg = new proto.SyncRequest;\n  return proto.SyncRequest.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.SyncRequest} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.SyncRequest}\n */\nproto.SyncRequest.deserializeBinaryFromReader = function(msg, reader) {\n  while (reader.nextField()) {\n    if (reader.isEndGroup()) {\n      break;\n    }\n    var field = reader.getFieldNumber();\n    switch (field) {\n    case 1:\n      var value = new proto.MessageEnvelope;\n      reader.readMessage(value,proto.MessageEnvelope.deserializeBinaryFromReader);\n      msg.addMessages(value);\n      break;\n    case 2:\n      var value = /** @type {string} */ (reader.readString());\n      msg.setFileid(value);\n      break;\n    case 3:\n      var value = /** @type {string} */ (reader.readString());\n      msg.setGroupid(value);\n      break;\n    case 5:\n      var value = /** @type {string} */ (reader.readString());\n      msg.setKeyid(value);\n      break;\n    case 6:\n      var value = /** @type {string} */ (reader.readString());\n      msg.setSince(value);\n      break;\n    default:\n      reader.skipField();\n      break;\n    }\n  }\n  return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.SyncRequest.prototype.serializeBinary = function() {\n  var writer = new jspb.BinaryWriter();\n  proto.SyncRequest.serializeBinaryToWriter(this, writer);\n  return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.SyncRequest} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SyncRequest.serializeBinaryToWriter = function(message, writer) {\n  var f = undefined;\n  f = message.getMessagesList();\n  if (f.length > 0) {\n    writer.writeRepeatedMessage(\n      1,\n      f,\n      proto.MessageEnvelope.serializeBinaryToWriter\n    );\n  }\n  f = message.getFileid();\n  if (f.length > 0) {\n    writer.writeString(\n      2,\n      f\n    );\n  }\n  f = message.getGroupid();\n  if (f.length > 0) {\n    writer.writeString(\n      3,\n      f\n    );\n  }\n  f = message.getKeyid();\n  if (f.length > 0) {\n    writer.writeString(\n      5,\n      f\n    );\n  }\n  f = message.getSince();\n  if (f.length > 0) {\n    writer.writeString(\n      6,\n      f\n    );\n  }\n};\n\n\n/**\n * repeated MessageEnvelope messages = 1;\n * @return {!Array<!proto.MessageEnvelope>}\n */\nproto.SyncRequest.prototype.getMessagesList = function() {\n  return /** @type{!Array<!proto.MessageEnvelope>} */ (\n    jspb.Message.getRepeatedWrapperField(this, proto.MessageEnvelope, 1));\n};\n\n\n/**\n * @param {!Array<!proto.MessageEnvelope>} value\n * @return {!proto.SyncRequest} returns this\n*/\nproto.SyncRequest.prototype.setMessagesList = function(value) {\n  return jspb.Message.setRepeatedWrapperField(this, 1, value);\n};\n\n\n/**\n * @param {!proto.MessageEnvelope=} opt_value\n * @param {number=} opt_index\n * @return {!proto.MessageEnvelope}\n */\nproto.SyncRequest.prototype.addMessages = function(opt_value, opt_index) {\n  return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.MessageEnvelope, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.SyncRequest} returns this\n */\nproto.SyncRequest.prototype.clearMessagesList = function() {\n  return this.setMessagesList([]);\n};\n\n\n/**\n * optional string fileId = 2;\n * @return {string}\n */\nproto.SyncRequest.prototype.getFileid = function() {\n  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SyncRequest} returns this\n */\nproto.SyncRequest.prototype.setFileid = function(value) {\n  return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\n/**\n * optional string groupId = 3;\n * @return {string}\n */\nproto.SyncRequest.prototype.getGroupid = function() {\n  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SyncRequest} returns this\n */\nproto.SyncRequest.prototype.setGroupid = function(value) {\n  return jspb.Message.setProto3StringField(this, 3, value);\n};\n\n\n/**\n * optional string keyId = 5;\n * @return {string}\n */\nproto.SyncRequest.prototype.getKeyid = function() {\n  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SyncRequest} returns this\n */\nproto.SyncRequest.prototype.setKeyid = function(value) {\n  return jspb.Message.setProto3StringField(this, 5, value);\n};\n\n\n/**\n * optional string since = 6;\n * @return {string}\n */\nproto.SyncRequest.prototype.getSince = function() {\n  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SyncRequest} returns this\n */\nproto.SyncRequest.prototype.setSince = function(value) {\n  return jspb.Message.setProto3StringField(this, 6, value);\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array<number>}\n * @const\n */\nproto.SyncResponse.repeatedFields_ = [1];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.\n * For the list of reserved names please see:\n *     net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n *     JSPB instance for transitional soy proto support:\n *     http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.SyncResponse.prototype.toObject = function(opt_includeInstance) {\n  return proto.SyncResponse.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n *     the JSPB instance for transitional soy proto support:\n *     http://goto/soy-param-migration\n * @param {!proto.SyncResponse} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SyncResponse.toObject = function(includeInstance, msg) {\n  var f, obj = {\n    messagesList: jspb.Message.toObjectList(msg.getMessagesList(),\n    proto.MessageEnvelope.toObject, includeInstance),\n    merkle: jspb.Message.getFieldWithDefault(msg, 2, \"\")\n  };\n\n  if (includeInstance) {\n    obj.$jspbMessageInstance = msg;\n  }\n  return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.SyncResponse}\n */\nproto.SyncResponse.deserializeBinary = function(bytes) {\n  var reader = new jspb.BinaryReader(bytes);\n  var msg = new proto.SyncResponse;\n  return proto.SyncResponse.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.SyncResponse} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.SyncResponse}\n */\nproto.SyncResponse.deserializeBinaryFromReader = function(msg, reader) {\n  while (reader.nextField()) {\n    if (reader.isEndGroup()) {\n      break;\n    }\n    var field = reader.getFieldNumber();\n    switch (field) {\n    case 1:\n      var value = new proto.MessageEnvelope;\n      reader.readMessage(value,proto.MessageEnvelope.deserializeBinaryFromReader);\n      msg.addMessages(value);\n      break;\n    case 2:\n      var value = /** @type {string} */ (reader.readString());\n      msg.setMerkle(value);\n      break;\n    default:\n      reader.skipField();\n      break;\n    }\n  }\n  return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.SyncResponse.prototype.serializeBinary = function() {\n  var writer = new jspb.BinaryWriter();\n  proto.SyncResponse.serializeBinaryToWriter(this, writer);\n  return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.SyncResponse} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SyncResponse.serializeBinaryToWriter = function(message, writer) {\n  var f = undefined;\n  f = message.getMessagesList();\n  if (f.length > 0) {\n    writer.writeRepeatedMessage(\n      1,\n      f,\n      proto.MessageEnvelope.serializeBinaryToWriter\n    );\n  }\n  f = message.getMerkle();\n  if (f.length > 0) {\n    writer.writeString(\n      2,\n      f\n    );\n  }\n};\n\n\n/**\n * repeated MessageEnvelope messages = 1;\n * @return {!Array<!proto.MessageEnvelope>}\n */\nproto.SyncResponse.prototype.getMessagesList = function() {\n  return /** @type{!Array<!proto.MessageEnvelope>} */ (\n    jspb.Message.getRepeatedWrapperField(this, proto.MessageEnvelope, 1));\n};\n\n\n/**\n * @param {!Array<!proto.MessageEnvelope>} value\n * @return {!proto.SyncResponse} returns this\n*/\nproto.SyncResponse.prototype.setMessagesList = function(value) {\n  return jspb.Message.setRepeatedWrapperField(this, 1, value);\n};\n\n\n/**\n * @param {!proto.MessageEnvelope=} opt_value\n * @param {number=} opt_index\n * @return {!proto.MessageEnvelope}\n */\nproto.SyncResponse.prototype.addMessages = function(opt_value, opt_index) {\n  return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.MessageEnvelope, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.SyncResponse} returns this\n */\nproto.SyncResponse.prototype.clearMessagesList = function() {\n  return this.setMessagesList([]);\n};\n\n\n/**\n * optional string merkle = 2;\n * @return {string}\n */\nproto.SyncResponse.prototype.getMerkle = function() {\n  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SyncResponse} returns this\n */\nproto.SyncResponse.prototype.setMerkle = function(value) {\n  return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\ngoog.object.extend(exports, proto);\n","import * as db from '../db';\nimport Timestamp, { serializeClock, getClock } from '../timestamp';\nimport * as merkle from '../merkle';\n\nexport function rebuildMerkleHash() {\n  let rows = db.runQuery('SELECT timestamp FROM messages_crdt', [], true);\n  let trie = {};\n\n  for (let i = 0; i < rows.length; i++) {\n    trie = merkle.insert(trie, Timestamp.parse(rows[i].timestamp));\n  }\n\n  return {\n    numMessages: rows.length,\n    trie: trie\n  };\n}\n\nexport default async function repairSync() {\n  let rebuilt = rebuildMerkleHash();\n  let clock = getClock();\n\n  // Save it locally\n  clock.merkle = rebuilt.trie;\n\n  // Persist it in the db\n  db.runQuery(\n    db.cache('INSERT OR REPLACE INTO messages_clock (id, clock) VALUES (1, ?)'),\n    [serializeClock(clock)]\n  );\n}\n","import * as cloudStorage from '../cloud-storage';\nimport * as db from '../db';\nimport * as prefs from '../prefs';\nimport asyncStorage from '../../platform/server/asyncStorage';\nimport { captureException } from '../../platform/exceptions';\nimport { runMutator } from '../mutators';\nconst connection = require('../../platform/server/connection');\n\nexport default async function resetSync(keyState) {\n  if (!keyState) {\n    // If we aren't resetting the key, make sure our key is up-to-date\n    // so we don't accidentally upload a file encrypted with the wrong\n    // key (or not encrypted at all)\n    let { valid, error } = await cloudStorage.checkKey();\n    if (error) {\n      return { error };\n    } else if (!valid) {\n      return { error: { reason: 'file-has-new-key' } };\n    }\n  }\n\n  let { error } = await cloudStorage.resetSyncState(keyState);\n  if (error) {\n    return { error };\n  }\n\n  await runMutator(async () => {\n    // TOOD: We could automatically generate the list of tables to\n    // cleanup by looking at the schema\n    //\n    // Be VERY careful here since we are bulk deleting data. It should\n    // never delete any data that doesn't have `tombstone = 1`\n    await db.execQuery(`\n      DELETE FROM messages_crdt;\n      DELETE FROM messages_clock;\n      DELETE FROM transactions WHERE tombstone = 1;\n      DELETE FROM accounts WHERE tombstone = 1;\n      DELETE FROM payees WHERE tombstone = 1;\n      DELETE FROM categories WHERE tombstone = 1;\n      DELETE FROM category_groups WHERE tombstone = 1;\n      DELETE FROM schedules WHERE tombstone = 1;\n      DELETE FROM rules WHERE tombstone = 1;\n      ANALYZE;\n      VACUUM;\n    `);\n    await db.loadClock();\n  });\n\n  await prefs.savePrefs({\n    groupId: null,\n    lastSyncedTimestamp: null,\n    lastUploaded: null\n  });\n\n  if (keyState) {\n    let { key } = keyState;\n    let { cloudFileId } = prefs.getPrefs();\n\n    // The key has changed, we need to update our local data to\n    // store the new key\n\n    // Persist key in async storage\n    let keys = JSON.parse((await asyncStorage.getItem(`encrypt-keys`)) || '{}');\n    keys[cloudFileId] = key.serialize();\n    await asyncStorage.setItem('encrypt-keys', JSON.stringify(keys));\n\n    // Save the key id in prefs\n    await prefs.savePrefs({ encryptKeyId: key.getId() });\n  }\n\n  // Finally, upload the file to make it the \"true\" version that all\n  // other clients need to pull down to get back in sync\n  try {\n    await cloudStorage.upload();\n  } catch (e) {\n    if (e.reason) {\n      return { error: e };\n    }\n    captureException(e);\n    return { error: { reason: 'upload-failure' } };\n  } finally {\n    connection.send('prefs-updated');\n  }\n\n  return {};\n}\n","import murmurhash from 'murmurhash';\nconst uuid = require('../platform/uuid');\n\n/**\n * Hybrid Unique Logical Clock (HULC) timestamp generator\n *\n * Globally-unique, monotonic timestamps are generated from the\n *    combination of the unreliable system time, a counter, and an\n *    identifier for the current node (instance, machine, process, etc.).\n *    These timestamps can accommodate clock stuttering (duplicate values),\n *    regression, and node differences within the configured maximum drift.\n *\n * In order to generate timestamps locally or for transmission to another\n *    node, use the send() method. For global causality, timestamps must\n *    be included in each message processed by the system. Whenever a\n *    message is received, its timestamp must be passed to the recv()\n *    method.\n *\n * Timestamps serialize into a 46-character collatable string\n *    example: 2015-04-24T22:23:42.123Z-1000-0123456789ABCDEF\n *    example: 2015-04-24T22:23:42.123Z-1000-A219E7A71CC18912\n *\n * The 64-bit hybrid clock is based on the HLC specification,\n * http://www.cse.buffalo.edu/tech-reports/2014-04.pdf\n */\n\n// A mutable global clock\nlet clock = null;\n\nexport function setClock(clock_) {\n  clock = clock_;\n}\n\nexport function getClock() {\n  return clock;\n}\n\nexport function makeClock(timestamp, merkle = {}) {\n  return { timestamp: MutableTimestamp.from(timestamp), merkle };\n}\n\nexport function serializeClock(clock) {\n  return JSON.stringify({\n    timestamp: clock.timestamp.toString(),\n    merkle: clock.merkle\n  });\n}\n\nexport function deserializeClock(clock) {\n  let data;\n  try {\n    data = JSON.parse(clock);\n  } catch (e) {\n    data = {\n      timestamp: '1970-01-01T00:00:00.000Z-0000-' + makeClientId(),\n      merkle: {}\n    };\n  }\n\n  return {\n    timestamp: MutableTimestamp.from(Timestamp.parse(data.timestamp)),\n    merkle: data.merkle\n  };\n}\n\nexport function makeClientId() {\n  return uuid\n    .v4Sync()\n    .replace(/-/g, '')\n    .slice(-16);\n}\n\nvar config = {\n  // Allow 5 minutes of clock drift\n  maxDrift: 5 * 60 * 1000\n};\n\n/**\n * timestamp instance class\n */\nexport default class Timestamp {\n  constructor(millis, counter, node) {\n    this._state = {\n      millis: millis,\n      counter: counter,\n      node: node\n    };\n  }\n\n  valueOf() {\n    return this.toString();\n  }\n\n  toString() {\n    return [\n      new Date(this.millis()).toISOString(),\n      (\n        '0000' +\n        this.counter()\n          .toString(16)\n          .toUpperCase()\n      ).slice(-4),\n      ('0000000000000000' + this.node()).slice(-16)\n    ].join('-');\n  }\n\n  millis() {\n    return this._state.millis;\n  }\n\n  counter() {\n    return this._state.counter;\n  }\n\n  node() {\n    return this._state.node;\n  }\n\n  hash() {\n    return murmurhash.v3(this.toString());\n  }\n}\n\nexport class MutableTimestamp extends Timestamp {\n  setMillis(n) {\n    this._state.millis = n;\n  }\n\n  setCounter(n) {\n    this._state.counter = n;\n  }\n\n  setNode(n) {\n    this._state.node = n;\n  }\n}\n\nMutableTimestamp.from = timestamp => {\n  return new MutableTimestamp(\n    timestamp.millis(),\n    timestamp.counter(),\n    timestamp.node()\n  );\n};\n\n// Timestamp generator initialization\n// * sets the node ID to an arbitrary value\n// * useful for mocking/unit testing\nTimestamp.init = function(options = {}) {\n  if (options.maxDrift) {\n    config.maxDrift = options.maxDrift;\n  }\n\n  setClock(\n    makeClock(\n      new Timestamp(\n        0,\n        0,\n        options.node\n          ? ('0000000000000000' + options.node).toString().slice(-16)\n          : ''\n      )\n    ),\n    null\n  );\n};\n\n/**\n * Timestamp send. Generates a unique, monotonic timestamp suitable\n * for transmission to another system in string format\n */\nTimestamp.send = function() {\n  if (!clock) {\n    return null;\n  }\n\n  // retrieve the local wall time\n  var phys = Date.now();\n\n  // unpack the clock.timestamp logical time and counter\n  var lOld = clock.timestamp.millis();\n  var cOld = clock.timestamp.counter();\n\n  // calculate the next logical time and counter\n  // * ensure that the logical time never goes backward\n  // * increment the counter if phys time does not advance\n  var lNew = Math.max(lOld, phys);\n  var cNew = lOld === lNew ? cOld + 1 : 0;\n\n  // check the result for drift and counter overflow\n  if (lNew - phys > config.maxDrift) {\n    throw new Timestamp.ClockDriftError(lNew, phys, config.maxDrift);\n  }\n  if (cNew > 65535) {\n    throw new Timestamp.OverflowError();\n  }\n\n  // repack the logical time/counter\n  clock.timestamp.setMillis(lNew);\n  clock.timestamp.setCounter(cNew);\n\n  return new Timestamp(\n    clock.timestamp.millis(),\n    clock.timestamp.counter(),\n    clock.timestamp.node()\n  );\n};\n\n// Timestamp receive. Parses and merges a timestamp from a remote\n// system with the local timeglobal uniqueness and monotonicity are\n// preserved\nTimestamp.recv = function(msg) {\n  if (!clock) {\n    return null;\n  }\n\n  // retrieve the local wall time\n  var phys = Date.now();\n\n  // unpack the message wall time/counter\n  var lMsg = msg.millis();\n  var cMsg = msg.counter();\n\n  // assert the node id and remote clock drift\n  // if (msg.node() === clock.timestamp.node()) {\n  //   throw new Timestamp.DuplicateNodeError(clock.timestamp.node());\n  // }\n  if (lMsg - phys > config.maxDrift) {\n    throw new Timestamp.ClockDriftError();\n  }\n\n  // unpack the clock.timestamp logical time and counter\n  var lOld = clock.timestamp.millis();\n  var cOld = clock.timestamp.counter();\n\n  // calculate the next logical time and counter\n  // . ensure that the logical time never goes backward\n  // . if all logical clocks are equal, increment the max counter\n  // . if max = old > message, increment local counter\n  // . if max = messsage > old, increment message counter\n  // . otherwise, clocks are monotonic, reset counter\n  var lNew = Math.max(Math.max(lOld, phys), lMsg);\n  var cNew =\n    lNew === lOld && lNew === lMsg\n      ? Math.max(cOld, cMsg) + 1\n      : lNew === lOld\n      ? cOld + 1\n      : lNew === lMsg\n      ? cMsg + 1\n      : 0;\n\n  // check the result for drift and counter overflow\n  if (lNew - phys > config.maxDrift) {\n    throw new Timestamp.ClockDriftError();\n  }\n  if (cNew > 65535) {\n    throw new Timestamp.OverflowError();\n  }\n\n  // repack the logical time/counter\n  clock.timestamp.setMillis(lNew);\n  clock.timestamp.setCounter(cNew);\n\n  return new Timestamp(\n    clock.timestamp.millis(),\n    clock.timestamp.counter(),\n    clock.timestamp.node()\n  );\n};\n\n/**\n * timestamp parsing\n * converts a fixed-length string timestamp to the structured value\n */\nTimestamp.parse = function(timestamp) {\n  if (typeof timestamp === 'string') {\n    var parts = timestamp.split('-');\n    if (parts && parts.length === 5) {\n      var millis = Date.parse(parts.slice(0, 3).join('-')).valueOf();\n      var counter = parseInt(parts[3], 16);\n      var node = parts[4];\n      if (!isNaN(millis) && !isNaN(counter))\n        return new Timestamp(millis, counter, node);\n    }\n  }\n  return null;\n};\n\n/**\n * zero/minimum timestamp\n */\nvar zero = Timestamp.parse('1970-01-01T00:00:00.000Z-0000-0000000000000000');\nTimestamp.zero = function() {\n  return zero;\n};\n\n/**\n * maximum timestamp\n */\nvar max = Timestamp.parse('9999-12-31T23:59:59.999Z-FFFF-FFFFFFFFFFFFFFFF');\nTimestamp.max = function() {\n  return max;\n};\n\nTimestamp.since = isoString => {\n  return isoString + '-0000-0000000000000000';\n};\n\n/**\n * error classes\n */\nTimestamp.DuplicateNodeError = class extends Error {\n  constructor(node) {\n    super();\n    this.type = 'DuplicateNodeError';\n    this.message = 'duplicate node identifier ' + node;\n  }\n};\n\nTimestamp.ClockDriftError = class extends Error {\n  constructor(...args) {\n    super();\n    this.type = 'ClockDriftError';\n    this.message = ['maximum clock drift exceeded'].concat(args).join(' ');\n  }\n};\n\nTimestamp.OverflowError = class extends Error {\n  constructor() {\n    super();\n    this.type = 'OverflowError';\n    this.message = 'timestamp counter overflow';\n  }\n};\n","import { batchMessages } from '../sync';\nimport { runMutator } from '../mutators';\nimport { createApp } from '../app';\nimport * as db from '../db';\nimport { batchUpdateTransactions } from '../accounts/transactions';\n\nlet app = createApp();\n\napp.method('tools/fix-split-transactions', async () => {\n  // 1. Check for child transactions that have a blank payee, and set\n  //    the payee to whatever the parent has\n  let blankPayeeRows = await db.all(`\n    SELECT t.*, p.payee AS parentPayee FROM v_transactions_internal t\n    LEFT JOIN v_transactions_internal p ON t.parent_id = p.id\n    WHERE t.is_child = 1 AND t.payee IS NULL AND p.payee IS NOT NULL\n  `);\n\n  await runMutator(async () => {\n    let updated = blankPayeeRows.map(row => ({\n      id: row.id,\n      payee: row.parentPayee\n    }));\n    await batchUpdateTransactions({ updated });\n  });\n\n  // 2. Make sure the \"cleared\" flag is synced up with the parent\n  // transactions\n  let clearedRows = await db.all(`\n    SELECT t.id, p.cleared FROM v_transactions_internal t\n    LEFT JOIN v_transactions_internal p ON t.parent_id = p.id\n    WHERE t.is_child = 1 AND t.cleared != p.cleared\n  `);\n\n  await runMutator(async () => {\n    let updated = clearedRows.map(row => ({\n      id: row.id,\n      cleared: row.cleared === 1\n    }));\n    await batchUpdateTransactions({ updated });\n  });\n\n  // 3. Mark the `tombstone` field as true on any child transactions\n  //    that have a dead parent\n  let deletedRows = await db.all(`\n    SELECT t.* FROM v_transactions_internal t\n    LEFT JOIN v_transactions_internal p ON t.parent_id = p.id\n    WHERE t.is_child = 1 AND t.tombstone = 0 AND (p.tombstone = 1 OR p.id IS NULL)\n  `);\n\n  await runMutator(async () => {\n    let updated = deletedRows.map(row => ({ id: row.id, tombstone: 1 }));\n    await batchUpdateTransactions({ updated });\n  });\n\n  return {\n    numBlankPayees: blankPayeeRows.length,\n    numCleared: clearedRows.length,\n    numDeleted: deletedRows.length\n  };\n});\n\nexport default app;\n","import asyncStorage from '../../platform/server/asyncStorage';\nimport { sha256String } from '../encryption-internals';\nlet Mixpanel = require('@jlongster/mixpanel');\nlet uuid = require('../../platform/uuid');\n\nlet currentUniqueId;\nlet mixpanel;\nlet isEnabled = true;\n\nexport function toggle(trackUsage) {\n  isEnabled = trackUsage == null || trackUsage === 'true' ? true : false;\n}\n\n// TODO: Figure out location, send to EU data centers if in EU\n// {\n//     host: \"api-eu.mixpanel.com\",\n// },\n\n// This must stay up-to-date with all apps that hit mixpanel! That includes the\n// website and server. If changing this, make sure to change it everywhere\nasync function hash(userId) {\n  let hashed = await sha256String(userId);\n  return `user-${hashed.replace(/[=/]/g, '')}`;\n}\n\nfunction isAnonymous(id) {\n  return !id.startsWith('user-');\n}\n\nexport async function init() {\n  mixpanel = Mixpanel.init('7e6461b8dde1d5dbf04ed1711768257a');\n\n  let [\n    [, distinctId],\n    [, userId],\n    [, trackUsage]\n  ] = await asyncStorage.multiGet(['distinct-id-v2', 'user-id', 'track-usage']);\n\n  toggle(trackUsage);\n\n  if (distinctId == null) {\n    if (userId) {\n      let hashedId = await hash(userId);\n      currentUniqueId = hashedId;\n      setProfile({ $name: hashedId });\n    } else {\n      currentUniqueId = uuid.v4Sync();\n    }\n\n    await asyncStorage.setItem('distinct-id-v2', currentUniqueId);\n  } else {\n    currentUniqueId = distinctId;\n\n    if (!isAnonymous(distinctId)) {\n      setProfile({ $name: distinctId });\n    }\n  }\n}\n\nexport async function login(userId) {\n  let hashedId = await hash(userId);\n  await asyncStorage.setItem('distinct-id-v2', hashedId);\n\n  if (isAnonymous(currentUniqueId)) {\n    mixpanel.identify(hashedId, currentUniqueId);\n\n    startBuffering();\n    // So ridiculous. https://help.mixpanel.com/hc/en-us/articles/115004497803-Identity-Management-Best-Practices#serverside-aliasing\n    setTimeout(() => {\n      stopBuffering();\n    }, 2000);\n\n    currentUniqueId = hashedId;\n    setProfile({ $name: hashedId });\n  } else {\n    currentUniqueId = hashedId;\n  }\n}\n\nlet BUFFERING = false;\nlet BUFFER = [];\n\nfunction startBuffering() {\n  BUFFERING = true;\n  BUFFER = [];\n}\n\nfunction stopBuffering() {\n  for (let call of BUFFER) {\n    call[0](...call[1]);\n  }\n  BUFFERING = false;\n  BUFFER = [];\n}\n\nfunction buffered(func) {\n  return (...args) => {\n    if (process.env.NODE_ENV !== 'development') {\n      if (BUFFERING) {\n        BUFFER.push([func, [currentUniqueId, ...args]]);\n      } else {\n        func(currentUniqueId, ...args);\n      }\n    }\n  };\n}\n\nexport const track = buffered((distinct_id, name, props) => {});\n\nexport const setProfile = buffered((distinct_id, props) => {});\n","import { sendMessages } from './sync';\nimport { getIn } from '../shared/util';\nimport Timestamp from './timestamp';\nimport { withMutatorContext, getMutatorContext } from './mutators';\nconst connection = require('../platform/server/connection');\n\n// A marker always sits as the first entry to simplify logic\nlet MESSAGE_HISTORY = [{ type: 'marker' }];\nlet CURSOR = 0;\nlet HISTORY_SIZE = 20;\n\nfunction trimHistory() {\n  MESSAGE_HISTORY = MESSAGE_HISTORY.slice(0, CURSOR + 1);\n\n  let markers = MESSAGE_HISTORY.filter(item => item.type === 'marker');\n  if (markers.length > HISTORY_SIZE) {\n    let slice = markers.slice(-HISTORY_SIZE);\n    let cutoff = MESSAGE_HISTORY.indexOf(slice[0]);\n    MESSAGE_HISTORY = MESSAGE_HISTORY.slice(cutoff);\n    CURSOR = MESSAGE_HISTORY.length - 1;\n  }\n}\n\nexport function appendMessages(messages, oldData) {\n  let context = getMutatorContext();\n\n  if (context.undoListening && messages.length > 0) {\n    trimHistory();\n\n    let { undoTag } = context;\n\n    MESSAGE_HISTORY.push({\n      type: 'messages',\n      messages,\n      oldData,\n      undoTag\n    });\n    CURSOR++;\n  }\n}\n\nexport function clearUndo() {\n  MESSAGE_HISTORY = [{ type: 'marker' }];\n  CURSOR = 0;\n}\n\nexport function withUndo(func, meta) {\n  let context = getMutatorContext();\n  if (context.undoDisabled || context.undoListening) {\n    return func();\n  }\n\n  MESSAGE_HISTORY = MESSAGE_HISTORY.slice(0, CURSOR + 1);\n\n  let marker = { type: 'marker', meta };\n\n  if (MESSAGE_HISTORY[MESSAGE_HISTORY.length - 1].type === 'marker') {\n    MESSAGE_HISTORY[MESSAGE_HISTORY.length - 1] = marker;\n  } else {\n    MESSAGE_HISTORY.push(marker);\n    CURSOR++;\n  }\n\n  return withMutatorContext(\n    { undoListening: true, undoTag: context.undoTag },\n    func\n  );\n}\n\nexport function undoable(func) {\n  return (...args) => {\n    return withUndo(() => {\n      return func(...args);\n    });\n  };\n}\n\nasync function applyUndoAction(messages, meta, undoTag) {\n  await withMutatorContext({ undoListening: false }, () => {\n    return sendMessages(\n      messages.map(msg => ({ ...msg, timestamp: Timestamp.send() }))\n    );\n  });\n\n  const tables = messages.reduce((acc, message) => {\n    if (!acc.includes(message.dataset)) {\n      acc.push(message.dataset);\n    }\n    return acc;\n  }, []);\n\n  connection.send('undo-event', {\n    messages,\n    tables,\n    meta,\n    undoTag\n  });\n}\n\nexport async function undo() {\n  let end = CURSOR;\n  CURSOR = Math.max(CURSOR - 1, 0);\n\n  // Walk back to the nearest marker\n  while (CURSOR > 0 && MESSAGE_HISTORY[CURSOR].type !== 'marker') {\n    CURSOR--;\n  }\n\n  let meta = MESSAGE_HISTORY[CURSOR].meta;\n  let start = Math.max(CURSOR, 0);\n  let entries = MESSAGE_HISTORY.slice(start, end + 1).filter(\n    entry => entry.type === 'messages'\n  );\n\n  if (entries.length > 0) {\n    let toApply = entries\n      .reduce((acc, entry) => {\n        return acc.concat(\n          entry.messages\n            .map(message => undoMessage(message, entry.oldData))\n            .filter(x => x)\n        );\n      }, [])\n      .reverse();\n\n    await applyUndoAction(toApply, meta, entries[0].undoTag);\n  }\n}\n\nfunction undoMessage(message, oldData) {\n  let oldItem = getIn(oldData, [message.dataset, message.row]);\n  if (oldItem) {\n    let column = message.column;\n    if (message.dataset === 'spreadsheet_cells') {\n      // The spreadsheet messages use the `expr` column, but only as a\n      // placeholder. We actually want to read the `cachedValue` prop\n      // from the old item.\n      column = 'cachedValue';\n    }\n\n    return { ...message, value: oldItem[column] };\n  } else {\n    if (message.dataset === 'spreadsheet_cells') {\n      if (message.column === 'expr') {\n        return { ...message, value: null };\n      }\n      return message;\n    } else if (\n      // The mapping fields aren't ever deleted... this should be\n      // harmless since all they are is meta information. Maybe we\n      // should fix this though.\n      message.dataset !== 'category_mapping' &&\n      message.dataset !== 'payee_mapping'\n    ) {\n      if (\n        message.dataset === 'zero_budget_months' ||\n        message.dataset === 'zero_budgets' ||\n        message.dataset === 'reflect_budgets'\n      ) {\n        // Only these fields are reversable\n        if (['buffered', 'amount', 'carryover'].includes(message.column)) {\n          return { ...message, value: 0 };\n        }\n        return null;\n      } else if (message.dataset === 'notes') {\n        return { ...message, value: null };\n      }\n\n      return { ...message, column: 'tombstone', value: 1 };\n    }\n  }\n  return null;\n}\n\nexport async function redo() {\n  let meta =\n    MESSAGE_HISTORY[CURSOR].type === 'marker'\n      ? MESSAGE_HISTORY[CURSOR].meta\n      : null;\n\n  let start = CURSOR;\n  CURSOR = Math.min(CURSOR + 1, MESSAGE_HISTORY.length - 1);\n\n  // Walk forward to the nearest marker\n  while (\n    CURSOR < MESSAGE_HISTORY.length - 1 &&\n    MESSAGE_HISTORY[CURSOR].type !== 'marker'\n  ) {\n    CURSOR++;\n  }\n\n  let end = CURSOR;\n  let entries = MESSAGE_HISTORY.slice(start + 1, end + 1).filter(\n    entry => entry.type === 'messages'\n  );\n\n  if (entries.length > 0) {\n    let toApply = entries.reduce((acc, entry) => {\n      return acc\n        .concat(entry.messages)\n        .concat(redoResurrections(entry.messages, entry.oldData));\n    }, []);\n\n    await applyUndoAction(toApply, meta, entries[entries.length - 1].undoTag);\n  }\n}\n\nfunction redoResurrections(messages, oldData) {\n  let resurrect = new Set();\n\n  messages.forEach(message => {\n    // If any of the ids didn't exist before, we need to \"resurrect\"\n    // them by resetting their tombstones to 0\n    let oldItem = getIn(oldData, [message.dataset, message.row]);\n    if (\n      !oldItem &&\n      ![\n        'zero_budget_months',\n        'zero_budgets',\n        'reflect_budgets',\n        'notes',\n        'category_mapping',\n        'payee_mapping'\n      ].includes(message.dataset)\n    ) {\n      resurrect.add(message.dataset + '.' + message.row);\n    }\n  });\n\n  return [...resurrect].map(desc => {\n    let [table, row] = desc.split('.');\n    return {\n      dataset: table,\n      row,\n      column: 'tombstone',\n      value: 0,\n      timestamp: Timestamp.send()\n    };\n  });\n}\n","import md5 from 'md5';\nimport * as migrations from './migrate/migrations';\nimport * as db from './db';\nimport { schema, schemaConfig } from './aql/schema';\nimport { makeViews } from './aql/views';\n\n// Managing the init/update process\n\nasync function runMigrations() {\n  await migrations.migrate(db.getDatabase());\n}\n\nexport async function updateViews() {\n  let hashKey = 'view-hash';\n  let row = await db.first('SELECT value FROM __meta__ WHERE key = ?', [\n    hashKey\n  ]);\n  let { value: hash } = row || {};\n\n  let views = makeViews(schema, schemaConfig);\n  let currentHash = md5(views);\n\n  if (hash !== currentHash) {\n    await db.execQuery(views);\n    await db.runQuery(\n      'INSERT OR REPLACE INTO __meta__ (key, value) VALUES (?, ?)',\n      [hashKey, currentHash]\n    );\n  }\n}\n\nexport async function updateVersion() {\n  await runMigrations();\n  await updateViews();\n}\n","import fs from '../../platform/server/fs';\nconst uuid = require('../../platform/uuid');\n\nexport async function uniqueFileName(existingFiles) {\n  let initialName = 'My Finances';\n  let idx = 1;\n\n  // If there is a conflict, keep appending an index until there is no\n  // conflict and we have a unique name\n  let newName = initialName;\n  while (existingFiles.find(file => file.name === newName)) {\n    newName = `${initialName} ${idx}`;\n    idx++;\n  }\n\n  return newName;\n}\n\nexport async function idFromFileName(name) {\n  let id =\n    name.replace(/( |[^A-Za-z0-9])/g, '-') + '-' + uuid.v4Sync().slice(0, 7);\n\n  // Make sure the id is unique. There's a chance one could already\n  // exist (although very unlikely now that we append unique\n  // characters onto the id)\n  let index = 0;\n\n  let budgetDir = fs.getBudgetDir(id);\n  while (await fs.exists(budgetDir)) {\n    index++;\n    budgetDir = fs.getBudgetDir(id + index.toString());\n  }\n\n  // If a suffix was added, update the id\n  if (index > 0) {\n    id = id + index.toString();\n  }\n\n  return id;\n}\n","import '@rschedule/standard-date-adapter/setup';\nimport '@rschedule/json-tools/Schedule';\n\nexport * from '@rschedule/standard-date-adapter';\nexport * from '@rschedule/core';\nexport * from '@rschedule/core/generators';\n","export function fromPlaidAccountType(type, subtype) {\n  switch (type) {\n    case 'brokerage':\n    case 'investment':\n      return 'investment';\n    case 'credit':\n      return 'credit';\n    case 'loan':\n      return 'debt';\n    case 'other':\n      return 'other';\n    case 'depository':\n    default:\n      switch (subtype) {\n        case 'money market':\n        case 'savings':\n          return 'savings';\n        case 'cd':\n          return 'cd';\n        default:\n          return 'checking';\n      }\n  }\n}\n\nexport function prettyAccountType(type) {\n  switch (type) {\n    case 'checking':\n      return 'Checking';\n    case 'savings':\n      return 'Savings';\n    case 'cd':\n      return 'CD';\n    case 'investment':\n      return 'Investment';\n    case 'credit':\n      return 'Credit Card';\n    case 'mortgage':\n      return 'Mortgage';\n    case 'debt':\n      return 'Debt';\n    case 'other':\n    default:\n      return 'Other';\n  }\n}\n\nexport function determineOffBudget(type) {\n  switch (type) {\n    case 'investment':\n    case 'mortgage':\n    case 'debt':\n    case 'other':\n      return true;\n    default:\n  }\n  return false;\n}\n","export function sequential(fn) {\n  let sequenceState = {\n    running: null,\n    queue: []\n  };\n\n  function pump() {\n    if (sequenceState.queue.length > 0) {\n      const next = sequenceState.queue.shift();\n      run(next.args, next.resolve, next.reject);\n    } else {\n      sequenceState.running = null;\n    }\n  }\n\n  function run(args, resolve, reject) {\n    sequenceState.running = fn(...args);\n\n    sequenceState.running.then(\n      val => {\n        pump();\n        resolve(val);\n      },\n      err => {\n        pump();\n        reject(err);\n      }\n    );\n  }\n\n  return (...args) => {\n    if (!sequenceState.running) {\n      return new Promise((resolve, reject) => {\n        return run(args, resolve, reject);\n      });\n    } else {\n      return new Promise((resolve, reject) => {\n        sequenceState.queue.push({ resolve, reject, args });\n      });\n    }\n  };\n}\n\nexport function once(fn) {\n  let promise = null;\n  let onceFn = (...args) => {\n    if (!promise) {\n      promise = fn(...args).finally(() => {\n        promise = null;\n      });\n      return promise;\n    }\n\n    return promise;\n  };\n\n  return onceFn;\n}\n","import * as d from 'date-fns';\nimport memoizeOne from 'memoize-one';\n\nfunction _parse(value) {\n  if (typeof value === 'string') {\n    // Dates are hard. We just want to deal with months in the format\n    // 2020-01 and days in the format 2020-01-01, but life is never\n    // simple. We want to rely on native dates for date logic because\n    // days are complicated (leap years, etc). But relying on native\n    // dates mean we're exposed to craziness.\n    //\n    // The biggest problem is that JS dates work with local time by\n    // default. We could try to only work with UTC, but there's not an\n    // easy way to make `format` avoid local time, and not sure if we\n    // want that anyway (`currentMonth` should surely print the local\n    // time). We need to embrace local time, and as long as inputs to\n    // date logic and outputs from format are local time, it should\n    // work.\n    //\n    // To make sure we're in local time, always give Date integer\n    // values. If you pass in a string to parse, different string\n    // formats produce different results.\n    //\n    // A big problem is daylight savings, however. Usually, when\n    // giving the time to the Date constructor, you get back a date\n    // specifically for that time in your local timezone. However, if\n    // daylight savings occurs on that exact time, you will get back\n    // something different:\n    //\n    // This is fine:\n    // > new Date(2017, 2, 12, 1).toString()\n    // > 'Sun Mar 12 2017 01:00:00 GMT-0500 (Eastern Standard Time)'\n    //\n    // But wait, we got back a different time (3AM instead of 2AM):\n    // > new Date(2017, 2, 12, 2).toString()\n    // > 'Sun Mar 12 2017 03:00:00 GMT-0400 (Eastern Daylight Time)'\n    //\n    // The time is \"correctly\" adjusted via DST, but we _really_\n    // wanted 2AM. The problem is that time simply doesn't exist.\n    //\n    // Why is this a problem? Well, consider a case where the DST\n    // shift happens *at midnight* and it goes back an hour. You think\n    // you have a date object for the next day, but when formatted it\n    // actually shows the previous day. A more likely scenario: buggy\n    // timezone data makes JS dates do this shift when it shouldn't,\n    // so using midnight at the time for date logic gives back the\n    // last day. See the time range of Sep 30 15:00 - Oct 1 1:00 for\n    // the AEST timezone when nodejs-mobile incorrectly gives you back\n    // a time an hour *before* you specified. Since this happens on\n    // Oct 1, doing `addMonths(September, 1)` still gives you back\n    // September. Issue here:\n    // https://github.com/JaneaSystems/nodejs-mobile/issues/251\n    //\n    // The fix is simple once you understand this. Always use the 12th\n    // hour of the day. That's it. There is no DST that shifts more\n    // than 12 hours (god let's hope not) so no matter how far DST has\n    // shifted backwards or forwards, doing date logic will stay\n    // within the day we want.\n\n    let [year, month, day] = value.split('-');\n    if (day != null) {\n      return new Date(parseInt(year), parseInt(month) - 1, parseInt(day), 12);\n    } else if (month != null) {\n      return new Date(parseInt(year), parseInt(month) - 1, 1, 12);\n    } else {\n      return new Date(parseInt(year), 0, 1, 12);\n    }\n  }\n  return value;\n}\n\nexport const parseDate = _parse;\n\nexport function yearFromDate(date) {\n  return d.format(_parse(date), 'yyyy');\n}\n\nexport function monthFromDate(date) {\n  return d.format(_parse(date), 'yyyy-MM');\n}\n\nexport function dayFromDate(date) {\n  return d.format(_parse(date), 'yyyy-MM-dd');\n}\n\nexport function currentMonth() {\n  if (global.IS_TESTING) {\n    return '2017-01';\n  } else {\n    return d.format(new Date(), 'yyyy-MM');\n  }\n}\n\nexport function currentDay() {\n  if (global.IS_TESTING) {\n    return '2017-01-01';\n  } else {\n    return d.format(new Date(), 'yyyy-MM-dd');\n  }\n}\n\nexport function nextMonth(month) {\n  return d.format(d.addMonths(_parse(month), 1), 'yyyy-MM');\n}\n\nexport function prevMonth(month) {\n  return d.format(d.subMonths(_parse(month), 1), 'yyyy-MM');\n}\n\nexport function addMonths(month, n) {\n  return d.format(d.addMonths(_parse(month), n), 'yyyy-MM');\n}\n\nexport function subMonths(month, n) {\n  return d.format(d.subMonths(_parse(month), n), 'yyyy-MM');\n}\n\nexport function addDays(day, n) {\n  return d.format(d.addDays(_parse(day), n), 'yyyy-MM-dd');\n}\n\nexport function subDays(day, n) {\n  return d.format(d.subDays(_parse(day), n), 'yyyy-MM-dd');\n}\n\nexport function isBefore(month1, month2) {\n  return d.isBefore(_parse(month1), _parse(month2));\n}\n\nexport function isAfter(month1, month2) {\n  return d.isAfter(_parse(month1), _parse(month2));\n}\n\n// TODO: This doesn't really fit in this module anymore, should\n// probably live elsewhere\nexport function bounds(month) {\n  return {\n    start: parseInt(d.format(d.startOfMonth(_parse(month)), 'yyyyMMdd')),\n    end: parseInt(d.format(d.endOfMonth(_parse(month)), 'yyyyMMdd'))\n  };\n}\n\nexport function _range(start, end, inclusive) {\n  const months = [];\n  let month = monthFromDate(start);\n  while (d.isBefore(_parse(month), _parse(end))) {\n    months.push(month);\n    month = addMonths(month, 1);\n  }\n\n  if (inclusive) {\n    months.push(month);\n  }\n\n  return months;\n}\n\nexport function range(start, end) {\n  return _range(start, end);\n}\n\nexport function rangeInclusive(start, end) {\n  return _range(start, end, true);\n}\n\nexport function _dayRange(start, end, inclusive) {\n  const days = [];\n  let day = start;\n  while (d.isBefore(_parse(day), _parse(end))) {\n    days.push(day);\n    day = addDays(day, 1);\n  }\n\n  if (inclusive) {\n    days.push(day);\n  }\n\n  return days;\n}\n\nexport function dayRange(start, end) {\n  return _dayRange(start, end);\n}\n\nexport function dayRangeInclusive(start, end) {\n  return _dayRange(start, end, true);\n}\n\nexport function getMonthIndex(month) {\n  return parseInt(month.slice(5, 7)) - 1;\n}\n\nexport function getYear(month) {\n  return month.slice(0, 4);\n}\n\nexport function getMonth(day) {\n  return day.slice(0, 7);\n}\n\nexport function getYearStart(month) {\n  return getYear(month) + '-01';\n}\n\nexport function getYearEnd(month) {\n  return getYear(month) + '-12';\n}\n\nexport function sheetForMonth(month) {\n  return 'budget' + month.replace('-', '');\n}\n\nexport function nameForMonth(month) {\n  return d.format(_parse(month), \"MMMM 'yy\");\n}\n\nexport function format(month, str) {\n  return d.format(_parse(month), str);\n}\n\nexport const getDateFormatRegex = memoizeOne(format => {\n  return new RegExp(\n    format\n      .replace(/d+/g, '\\\\d{1,2}')\n      .replace(/M+/g, '\\\\d{1,2}')\n      .replace(/y+/g, '\\\\d{4}')\n  );\n});\n\nexport const getDayMonthFormat = memoizeOne(format => {\n  return format\n    .replace(/y+/g, '')\n    .replace(/[^\\w]$/, '')\n    .replace(/^[^\\w]/, '');\n});\n\nexport const getDayMonthRegex = memoizeOne(format => {\n  let regex = format\n    .replace(/y+/g, '')\n    .replace(/[^\\w]$/, '')\n    .replace(/^[^\\w]/, '')\n    .replace(/d+/g, '\\\\d{1,2}')\n    .replace(/M+/g, '\\\\d{1,2}');\n  return new RegExp('^' + regex + '$');\n});\n\nexport const getMonthYearFormat = memoizeOne(format => {\n  return format\n    .replace(/d+/g, '')\n    .replace(/[^\\w]$/, '')\n    .replace(/^[^\\w]/, '')\n    .replace(/\\/\\//, '/')\n    .replace(/\\.\\./, '.')\n    .replace(/--/, '-');\n});\n\nexport const getMonthYearRegex = memoizeOne(format => {\n  let regex = format\n    .replace(/d+/g, '')\n    .replace(/[^\\w]$/, '')\n    .replace(/^[^\\w]/, '')\n    .replace(/\\/\\//, '/')\n    .replace(/M+/g, '\\\\d{1,2}')\n    .replace(/y+/g, '\\\\d{2,4}');\n  return new RegExp('^' + regex + '$');\n});\n\nexport const getShortYearFormat = memoizeOne(format => {\n  return format.replace(/y+/g, 'yy');\n});\n\nexport const getShortYearRegex = memoizeOne(format => {\n  let regex = format\n    .replace(/[^\\w]$/, '')\n    .replace(/^[^\\w]/, '')\n    .replace(/d+/g, '\\\\d{1,2}')\n    .replace(/M+/g, '\\\\d{1,2}')\n    .replace(/y+/g, '\\\\d{2}');\n  return new RegExp('^' + regex + '$');\n});\n","export class Query {\n  constructor(state) {\n    this.state = {\n      filterExpressions: state.filterExpressions || [],\n      selectExpressions: state.selectExpressions || [],\n      groupExpressions: state.groupExpressions || [],\n      orderExpressions: state.orderExpressions || [],\n      calculation: false,\n      rawMode: false,\n      withDead: false,\n      validateRefs: true,\n      limit: null,\n      offset: null,\n      ...state\n    };\n  }\n\n  filter(expr) {\n    return new Query({\n      ...this.state,\n      filterExpressions: [...this.state.filterExpressions, expr]\n    });\n  }\n\n  unfilter(exprs) {\n    let exprSet = new Set(exprs);\n    return new Query({\n      ...this.state,\n      filterExpressions: this.state.filterExpressions.filter(\n        expr => !exprSet.has(Object.keys(expr)[0])\n      )\n    });\n  }\n\n  select(exprs = []) {\n    if (!Array.isArray(exprs)) {\n      exprs = [exprs];\n    }\n\n    let query = new Query({ ...this.state, selectExpressions: exprs });\n    query.state.calculation = false;\n    return query;\n  }\n\n  calculate(expr) {\n    let query = this.select({ result: expr });\n    query.state.calculation = true;\n    return query;\n  }\n\n  groupBy(exprs) {\n    if (!Array.isArray(exprs)) {\n      exprs = [exprs];\n    }\n\n    return new Query({\n      ...this.state,\n      groupExpressions: [...this.state.groupExpressions, ...exprs]\n    });\n  }\n\n  orderBy(exprs) {\n    if (!Array.isArray(exprs)) {\n      exprs = [exprs];\n    }\n\n    return new Query({\n      ...this.state,\n      orderExpressions: [...this.state.orderExpressions, ...exprs]\n    });\n  }\n\n  limit(num) {\n    return new Query({ ...this.state, limit: num });\n  }\n\n  offset(num) {\n    return new Query({ ...this.state, offset: num });\n  }\n\n  raw() {\n    return new Query({ ...this.state, rawMode: true });\n  }\n\n  withDead() {\n    return new Query({ ...this.state, withDead: true });\n  }\n\n  withoutValidatedRefs() {\n    return new Query({ ...this.state, validateRefs: false });\n  }\n\n  options(opts) {\n    return new Query({ ...this.state, tableOptions: opts });\n  }\n\n  serialize() {\n    return this.state;\n  }\n}\n\nexport function getPrimaryOrderBy(query, defaultOrderBy) {\n  let orderExprs = query.serialize().orderExpressions;\n  if (orderExprs.length === 0) {\n    if (defaultOrderBy) {\n      return { order: 'asc', ...defaultOrderBy };\n    }\n    return null;\n  }\n\n  let firstOrder = orderExprs[0];\n  if (typeof firstOrder === 'string') {\n    return { field: firstOrder, order: 'asc' };\n  }\n  // Handle this form: { field: 'desc' }\n  let [field] = Object.keys(firstOrder);\n  return { field, order: firstOrder[field] };\n}\n\nexport default function q(table) {\n  return new Query({ table });\n}\n","import { integerToAmount, amountToInteger, currencyToAmount } from './util';\n\n// For now, this info is duplicated from the backend. Figure out how\n// to share it later.\nexport const TYPE_INFO = {\n  date: {\n    ops: ['is', 'isapprox', 'gt', 'gte', 'lt', 'lte'],\n    nullable: false\n  },\n  id: {\n    ops: ['is', 'contains', 'oneOf'],\n    nullable: true\n  },\n  string: {\n    ops: ['is', 'contains', 'oneOf'],\n    nullable: false\n  },\n  number: {\n    ops: ['is', 'isapprox', 'isbetween', 'gt', 'gte', 'lt', 'lte'],\n    nullable: false\n  },\n  boolean: {\n    ops: ['is'],\n    nullable: false\n  }\n};\n\nexport const FIELD_TYPES = new Map(\n  Object.entries({\n    imported_payee: 'string',\n    payee: 'id',\n    date: 'date',\n    notes: 'string',\n    amount: 'number',\n    amountInflow: 'number',\n    amountOutfow: 'number',\n    category: 'id',\n    account: 'id',\n    cleared: 'boolean'\n  })\n);\n\nexport function mapField(field, opts) {\n  opts = opts || {};\n\n  switch (field) {\n    case 'imported_payee':\n      return 'imported payee';\n    case 'amount':\n      if (opts.inflow) {\n        return 'amount (inflow)';\n      } else if (opts.outflow) {\n        return 'amount (outflow)';\n      }\n      return 'amount';\n    case 'amount-inflow':\n      return 'amount (inflow)';\n    case 'amount-outflow':\n      return 'amount (outflow)';\n    default:\n      return field;\n  }\n}\n\nexport function friendlyOp(op, type) {\n  switch (op) {\n    case 'oneOf':\n      return 'one of';\n    case 'is':\n      return 'is';\n    case 'isapprox':\n      return 'is approx';\n    case 'isbetween':\n      return 'is between';\n    case 'contains':\n      return 'contains';\n    case 'gt':\n      if (type === 'date') {\n        return 'is after';\n      }\n      return 'is greater than';\n    case 'gte':\n      if (type === 'date') {\n        return 'is after or equals';\n      }\n      return 'is greater than or equals';\n    case 'lt':\n      if (type === 'date') {\n        return 'is before';\n      }\n      return 'is less than';\n    case 'lte':\n      if (type === 'date') {\n        return 'is before or equals';\n      }\n      return 'is less than or equals';\n    case 'true':\n      return 'is true';\n    case 'false':\n      return 'is false';\n    case 'set':\n      return 'set';\n    case 'link-schedule':\n      return 'link schedule';\n    default:\n      return '';\n  }\n}\n\nexport function deserializeField(field) {\n  if (field === 'amount-inflow') {\n    return { field: 'amount', options: { inflow: true } };\n  } else if (field === 'amount-outflow') {\n    return { field: 'amount', options: { outflow: true } };\n  } else {\n    return { field };\n  }\n}\n\nexport function getFieldError(type) {\n  switch (type) {\n    case 'date-format':\n      return 'Invalid date format';\n    case 'no-null':\n    case 'no-empty-array':\n    case 'no-empty-string':\n      return 'Value cannot be empty';\n    case 'not-number':\n      return 'Value must be a number';\n    case 'invalid-field':\n      return 'Please choose a valid field for this type of rule';\n    default:\n      return 'Internal error, sorry! Contact help@actualbudget.com';\n  }\n}\n\nexport function sortNumbers(num1, num2) {\n  if (num1 < num2) {\n    return [num1, num2];\n  }\n  return [num2, num1];\n}\n\nexport function parse(item) {\n  switch (item.type) {\n    case 'number': {\n      let parsed = item.value;\n      if (item.field === 'amount' && item.op !== 'isbetween') {\n        parsed = integerToAmount(parsed);\n      }\n      return { ...item, value: parsed };\n    }\n    case 'string': {\n      let parsed = item.value == null ? '' : item.value;\n      return { ...item, value: parsed };\n    }\n    default:\n  }\n\n  return { ...item, error: null };\n}\n\nexport function unparse({ error, inputKey, ...item }) {\n  switch (item.type) {\n    case 'number': {\n      let unparsed = item.value;\n      if (item.field === 'amount' && item.op !== 'isbetween') {\n        unparsed = amountToInteger(unparsed);\n      }\n\n      return { ...item, value: unparsed };\n    }\n    case 'string': {\n      let unparsed = item.value == null ? '' : item.value;\n      return { ...item, value: unparsed };\n    }\n    default:\n  }\n\n  return item;\n}\n\nexport function makeValue(value, cond) {\n  switch (cond.type) {\n    case 'number': {\n      if (cond.op !== 'isbetween') {\n        return {\n          ...cond,\n          error: null,\n          value: value ? currencyToAmount(value) || 0 : 0\n        };\n      }\n      break;\n    }\n    default:\n  }\n\n  return { ...cond, error: null, value };\n}\n\nexport function getApproxNumberThreshold(number) {\n  return (Math.abs(number) * 0.075) | 0;\n}\n","import * as monthUtils from './months';\nimport q from './query';\n\nexport function getStatus(nextDate, completed, hasTrans) {\n  let today = monthUtils.currentDay();\n\n  if (completed) {\n    return 'completed';\n  } else if (hasTrans) {\n    return 'paid';\n  } else if (nextDate === today) {\n    return 'due';\n  } else if (nextDate > today && nextDate <= monthUtils.addDays(today, 7)) {\n    return 'upcoming';\n  } else if (nextDate < today) {\n    return 'missed';\n  } else {\n    return 'scheduled';\n  }\n}\n\nexport function getHasTransactionsQuery(schedules) {\n  let filters = schedules.map(schedule => {\n    let dateCond = schedule._conditions.find(c => c.field === 'date');\n    return {\n      $and: {\n        schedule: schedule.id,\n        date: {\n          $gte:\n            dateCond && dateCond.op === 'is'\n              ? schedule.next_date\n              : monthUtils.subDays(schedule.next_date, 2)\n        }\n      }\n    };\n  });\n\n  return q('transactions')\n    .filter({ $or: filters })\n    .orderBy({ date: 'desc' })\n    .groupBy('schedule')\n    .select(['schedule', 'date']);\n}\n\nfunction makeNumberSuffix(num) {\n  // Slight abuse of date-fns to turn a number like \"1\" into the full\n  // form \"1st\" but formatting a date with that number\n  return monthUtils.format(new Date(2020, 0, num, 12), 'do');\n}\n\nfunction prettyDayName(day) {\n  let days = {\n    SU: 'Sunday',\n    MO: 'Monday',\n    TU: 'Tuesday',\n    WE: 'Wednesday',\n    TH: 'Thursday',\n    FR: 'Friday',\n    SA: 'Saturday'\n  };\n  return days[day];\n}\n\nexport function getRecurringDescription(config) {\n  let interval = config.interval || 1;\n\n  switch (config.frequency) {\n    case 'weekly': {\n      let desc = 'Every ';\n      desc += interval !== 1 ? `${interval} weeks` : 'week';\n      desc += ' on ' + monthUtils.format(config.start, 'EEEE');\n      return desc;\n    }\n    case 'monthly': {\n      let desc = 'Every ';\n      desc += interval !== 1 ? `${interval} months` : 'month';\n\n      if (config.patterns && config.patterns.length > 0) {\n        // Sort the days ascending. We filter out -1 because that\n        // represents \"last days\" and should always be last, but this\n        // sort would put them first\n        let patterns = [...config.patterns]\n          .sort((p1, p2) => {\n            let typeOrder =\n              (p1.type === 'day' ? 1 : 0) - (p2.type === 'day' ? 1 : 0);\n            let valOrder = p1.value - p2.value;\n\n            if (typeOrder === 0) {\n              return valOrder;\n            }\n            return typeOrder;\n          })\n          .filter(p => p.value !== -1);\n\n        // Add on all -1 values to the end\n        patterns = patterns.concat(config.patterns.filter(p => p.value === -1));\n\n        desc += ' on the ';\n\n        let strs = [];\n\n        let uniqueDays = new Set(patterns.map(p => p.type));\n        let isSameDay = uniqueDays.length === 1 && !uniqueDays.has('day');\n\n        for (let pattern of patterns) {\n          if (pattern.type === 'day') {\n            if (pattern.value === -1) {\n              strs.push('last day');\n            } else {\n              // Example: 15th day\n              strs.push(makeNumberSuffix(pattern.value));\n            }\n          } else {\n            let dayName = isSameDay ? '' : ' ' + prettyDayName(pattern.type);\n\n            if (pattern.value === -1) {\n              // Example: last Monday\n              strs.push('last' + dayName);\n            } else {\n              // Example: 3rd Monday\n              strs.push(makeNumberSuffix(pattern.value) + dayName);\n            }\n          }\n        }\n\n        if (strs.length > 2) {\n          desc += strs.slice(0, strs.length - 1).join(', ');\n          desc += ', and ';\n          desc += strs[strs.length - 1];\n        } else {\n          desc += strs.join(' and ');\n        }\n\n        if (isSameDay) {\n          desc += ' ' + prettyDayName(patterns[0].type);\n        }\n      } else {\n        desc += ' on the ' + monthUtils.format(config.start, 'do');\n      }\n\n      return desc;\n    }\n    case 'yearly': {\n      let desc = 'Every ';\n      desc += interval !== 1 ? `${interval} years` : 'year';\n      desc += ' on ' + monthUtils.format(config.start, 'LLL do');\n      return desc;\n    }\n    default:\n      return 'Recurring error';\n  }\n}\n\nexport function recurConfigToRSchedule(config) {\n  let base = {\n    start: monthUtils.parseDate(config.start),\n    frequency: config.frequency.toUpperCase(),\n    byHourOfDay: [12]\n  };\n\n  if (config.interval) {\n    base.interval = config.interval;\n  }\n\n  let abbrevDay = name => name.slice(0, 2).toUpperCase();\n\n  switch (config.frequency) {\n    case 'weekly':\n      // Nothing to do\n      return [base];\n    case 'monthly':\n      if (config.patterns && config.patterns.length > 0) {\n        let days = config.patterns.filter(p => p.type === 'day');\n        let dayNames = config.patterns.filter(p => p.type !== 'day');\n\n        return [\n          days.length > 0 && { ...base, byDayOfMonth: days.map(p => p.value) },\n          dayNames.length > 0 && {\n            ...base,\n            byDayOfWeek: dayNames.map(p => [abbrevDay(p.type), p.value])\n          }\n        ].filter(Boolean);\n      } else {\n        // Nothing to do\n        return [base];\n      }\n    case 'yearly':\n      return [base];\n    default:\n      throw new Error('Invalid recurring date config');\n  }\n}\n\nexport function extractScheduleConds(conditions) {\n  return {\n    payee:\n      conditions.find(cond => cond.op === 'is' && cond.field === 'payee') ||\n      conditions.find(\n        cond => cond.op === 'is' && cond.field === 'description'\n      ) ||\n      null,\n    account:\n      conditions.find(cond => cond.op === 'is' && cond.field === 'account') ||\n      conditions.find(cond => cond.op === 'is' && cond.field === 'acct') ||\n      null,\n    amount:\n      conditions.find(\n        cond =>\n          (cond.op === 'is' ||\n            cond.op === 'isapprox' ||\n            cond.op === 'isbetween') &&\n          cond.field === 'amount'\n      ) || null,\n    date:\n      conditions.find(\n        cond =>\n          (cond.op === 'is' || cond.op === 'isapprox') && cond.field === 'date'\n      ) || null\n  };\n}\n\nexport function getScheduledAmount(amount) {\n  if (amount && typeof amount !== 'number') {\n    return ((amount.num1 + amount.num2) / 2) | 0;\n  }\n  return amount;\n}\n","import { last, diffItems, getChangedValues, applyChanges } from './util';\nconst uuid = require('../platform/uuid');\n\n// The amount might be null when adding a new transaction\nfunction num(n) {\n  return typeof n === 'number' ? n : 0;\n}\n\nfunction SplitTransactionError(total, parent) {\n  let difference = num(parent.amount) - total;\n\n  return {\n    type: 'SplitTransactionError',\n    version: 1,\n    difference\n  };\n}\n\nexport function makeChild(parent, data) {\n  let prefix = parent.id === 'temp' ? 'temp' : '';\n\n  return {\n    amount: 0,\n    ...data,\n    payee: data.payee || parent.payee,\n    id: data.id ? data.id : prefix + uuid.v4Sync(),\n    account: parent.account,\n    date: parent.date,\n    cleared: parent.cleared != null ? parent.cleared : null,\n    starting_balance_flag:\n      parent.starting_balance_flag != null\n        ? parent.starting_balance_flag\n        : null,\n    is_child: true,\n    parent_id: parent.id,\n    error: null\n  };\n}\n\nexport function recalculateSplit(trans) {\n  // Calculate the new total of split transactions and make sure\n  // that it equals the parent amount\n  const total = trans.subtransactions.reduce(\n    (acc, t) => acc + num(t.amount),\n    0\n  );\n  return {\n    ...trans,\n    error:\n      total === num(trans.amount) ? null : SplitTransactionError(total, trans)\n  };\n}\n\nexport function findParentIndex(transactions, idx) {\n  // This relies on transactions being sorted in a way where parents\n  // are always before children, which is enforced in the db layer.\n  // Walk backwards and find the last parent;\n  while (idx >= 0) {\n    let trans = transactions[idx];\n    if (trans.is_parent) {\n      return idx;\n    }\n    idx--;\n  }\n  return null;\n}\n\nexport function getSplit(transactions, parentIndex) {\n  let split = [transactions[parentIndex]];\n  let curr = parentIndex + 1;\n  while (curr < transactions.length && transactions[curr].is_child) {\n    split.push(transactions[curr]);\n    curr++;\n  }\n  return split;\n}\n\nexport function ungroupTransactions(transactions) {\n  let x = transactions.reduce((list, parent) => {\n    let { subtransactions, ...trans } = parent;\n    subtransactions = subtransactions || [];\n\n    list.push(trans);\n\n    for (let i = 0; i < subtransactions.length; i++) {\n      list.push(subtransactions[i]);\n    }\n    return list;\n  }, []);\n  return x;\n}\n\nexport function groupTransaction(split) {\n  return { ...split[0], subtransactions: split.slice(1) };\n}\n\nexport function ungroupTransaction(split) {\n  if (split == null) {\n    return null;\n  }\n  return ungroupTransactions([split]);\n}\n\nexport function applyTransactionDiff(groupedTrans, diff) {\n  return groupTransaction(applyChanges(diff, ungroupTransaction(groupedTrans)));\n}\n\nexport function replaceTransactions(transactions, id, func) {\n  let idx = transactions.findIndex(t => t.id === id);\n  let trans = transactions[idx];\n  let transactionsCopy = [...transactions];\n\n  if (idx === -1) {\n    throw new Error('Tried to edit unknown transaction id: ' + id);\n  }\n\n  if (trans.is_parent || trans.is_child) {\n    let parentIndex = findParentIndex(transactions, idx);\n    if (parentIndex == null) {\n      console.log('Cannot find parent index');\n      return { diff: { deleted: [], updated: [] } };\n    }\n\n    let split = getSplit(transactions, parentIndex);\n    let grouped = func(groupTransaction(split));\n    let newSplit = ungroupTransaction(grouped);\n\n    let diff;\n    if (newSplit == null) {\n      // If everything was deleted, just delete the parent which will\n      // delete everything\n      diff = { deleted: [{ id: split[0].id }], updated: [] };\n      grouped = { id: split[0].id, _deleted: true };\n      transactionsCopy.splice(parentIndex, split.length);\n    } else {\n      diff = diffItems(split, newSplit);\n      transactionsCopy.splice(parentIndex, split.length, ...newSplit);\n    }\n\n    return { data: transactionsCopy, newTransaction: grouped, diff };\n  } else {\n    let grouped = func(trans);\n    let newTrans = ungroupTransaction(grouped) || [];\n    if (grouped) {\n      grouped.subtransactions = grouped.subtransactions || [];\n    }\n    transactionsCopy.splice(idx, 1, ...newTrans);\n\n    return {\n      data: transactionsCopy,\n      newTransaction: grouped || { id: trans.id, _deleted: true },\n      diff: diffItems([trans], newTrans)\n    };\n  }\n}\n\nexport function addSplitTransaction(transactions, id) {\n  return replaceTransactions(transactions, id, trans => {\n    if (!trans.is_parent) {\n      return trans;\n    }\n    let prevSub = last(trans.subtransactions);\n    trans.subtransactions.push(\n      makeChild(trans, {\n        amount: 0,\n        sort_order: num(prevSub && prevSub.sort_order) - 1\n      })\n    );\n    return trans;\n  });\n}\n\nexport function updateTransaction(transactions, transaction) {\n  return replaceTransactions(transactions, transaction.id, trans => {\n    if (trans.is_parent) {\n      let parent = trans.id === transaction.id ? transaction : trans;\n      let sub = trans.subtransactions.map(t => {\n        // Make sure to update the children to reflect the updated\n        // properties (if the parent updated)\n\n        let child = t;\n        if (trans.id === transaction.id) {\n          child = {\n            ...t,\n            payee: t.payee === trans.payee ? transaction.payee : t.payee\n          };\n        } else if (t.id === transaction.id) {\n          child = transaction;\n        }\n\n        return makeChild(parent, child);\n      });\n\n      return recalculateSplit({ ...parent, subtransactions: sub });\n    } else {\n      return transaction;\n    }\n  });\n}\n\nexport function deleteTransaction(transactions, id) {\n  return replaceTransactions(transactions, id, trans => {\n    if (trans.is_parent) {\n      if (trans.id === id) {\n        return null;\n      } else if (trans.subtransactions.length === 1) {\n        return {\n          ...trans,\n          subtransactions: null,\n          is_parent: false,\n          error: null\n        };\n      } else {\n        let sub = trans.subtransactions.filter(t => t.id !== id);\n        return recalculateSplit({ ...trans, subtransactions: sub });\n      }\n    } else {\n      return null;\n    }\n  });\n}\n\nexport function splitTransaction(transactions, id) {\n  return replaceTransactions(transactions, id, trans => {\n    if (trans.is_parent || trans.is_child) {\n      return trans;\n    }\n\n    return {\n      ...trans,\n      is_parent: true,\n      error: num(trans.amount) === 0 ? null : SplitTransactionError(0, trans),\n      subtransactions: [makeChild(trans, { amount: 0, sort_order: -1 })]\n    };\n  });\n}\n\nexport function realizeTempTransactions(transactions) {\n  let parent = transactions.find(t => !t.is_child);\n  parent = { ...parent, id: uuid.v4Sync() };\n\n  let children = transactions.filter(t => t.is_child);\n  return [\n    parent,\n    ...children.map(child => ({\n      ...child,\n      id: uuid.v4Sync(),\n      parent_id: parent.id\n    }))\n  ];\n}\n","let currencyFormatter = require('currency-formatter');\n\nexport function cleanUUID(uuid) {\n  return uuid.replace(/-/g, '');\n}\n\nexport function last(arr) {\n  return arr[arr.length - 1];\n}\n\nexport function mergeObjects(objects) {\n  return Object.assign.apply(null, [{}, ...objects]);\n}\n\nexport function composeCellChanges(objects) {\n  const merged = {};\n  Object.keys(objects).forEach(key => {\n    if (merged[key]) {\n      merged[key] = { ...merged[key], ...objects[key] };\n    } else {\n      merged[key] = objects[key];\n    }\n  });\n}\n\nexport function flattenArray(arrays) {\n  return Array.prototype.concat.apply([], arrays);\n}\n\nexport function shallowEqual(a, b) {\n  if (a === b) {\n    return true;\n  }\n\n  var numKeysA = 0,\n    numKeysB = 0,\n    key;\n  for (key in b) {\n    numKeysB++;\n    if (!a.hasOwnProperty(key) || a[key] !== b[key]) {\n      return false;\n    }\n  }\n  for (key in a) {\n    numKeysA++;\n  }\n  return numKeysA === numKeysB;\n}\n\nexport function getChangedValues(obj1, obj2) {\n  // Keep the id field because this is mostly used to diff database\n  // objects\n  const diff = obj1.id ? { id: obj1.id } : {};\n  const keys = Object.keys(obj2);\n  let hasChanged = false;\n\n  for (let i = 0; i < keys.length; i++) {\n    let key = keys[i];\n\n    if (obj1[key] !== obj2[key]) {\n      diff[key] = obj2[key];\n      hasChanged = true;\n    }\n  }\n\n  return hasChanged ? diff : null;\n}\n\nexport function hasFieldsChanged(obj1, obj2, fields) {\n  let changed = false;\n  for (var i = 0; i < fields.length; i++) {\n    let field = fields[i];\n    if (obj1[field] !== obj2[field]) {\n      changed = true;\n      break;\n    }\n  }\n  return changed;\n}\n\nexport function applyChanges(changes, items) {\n  items = [...items];\n\n  if (changes.added) {\n    changes.added.forEach(add => {\n      items.push(add);\n    });\n  }\n\n  if (changes.updated) {\n    changes.updated.forEach(({ id, ...fields }) => {\n      const idx = items.findIndex(t => t.id === id);\n      items[idx] = {\n        ...items[idx],\n        ...fields\n      };\n    });\n  }\n\n  if (changes.deleted) {\n    changes.deleted.forEach(t => {\n      const idx = items.findIndex(t2 => t.id === t2.id);\n      if (idx !== -1) {\n        items.splice(idx, 1);\n      }\n    });\n  }\n\n  return items;\n}\n\nexport function partitionByField(data, field) {\n  let res = new Map();\n  for (let i = 0; i < data.length; i++) {\n    let item = data[i];\n    let key = item[field];\n\n    let items = res.get(key) || [];\n    items.push(item);\n\n    res.set(key, items);\n  }\n  return res;\n}\n\nexport function groupBy(data, field, mapper) {\n  let res = new Map();\n  for (let i = 0; i < data.length; i++) {\n    let item = data[i];\n    let key = item[field];\n    let existing = res.get(key) || [];\n    res.set(key, existing.concat([mapper ? mapper(item) : data[i]]));\n  }\n  return res;\n}\n\nexport function groupBySingle(data, field, mapper) {\n  let res = new Map();\n  for (let i = 0; i < data.length; i++) {\n    let item = data[i];\n    let key = item[field];\n    if (res.has(key)) {\n      throw new Error('groupBySingle found conflicting key: ' + key);\n    }\n    res.set(key, mapper ? mapper(item) : data[i]);\n  }\n  return res;\n}\n\n// This should replace the existing `groupById` function, since a\n// `Map` is better, but we can't swap it out because `Map` has a\n// different API and we need to go through and update everywhere that\n// uses it.\nfunction _groupById(data) {\n  let res = new Map();\n  for (let i = 0; i < data.length; i++) {\n    let item = data[i];\n    res.set(item.id, item);\n  }\n  return res;\n}\n\nexport function diffItems(items, newItems) {\n  let grouped = _groupById(items);\n  let newGrouped = _groupById(newItems);\n  let added = [];\n  let updated = [];\n\n  let deleted = items\n    .filter(item => !newGrouped.has(item.id))\n    .map(item => ({ id: item.id }));\n\n  newItems.forEach(newItem => {\n    let item = grouped.get(newItem.id);\n    if (!item) {\n      added.push(newItem);\n    } else {\n      const changes = getChangedValues(item, newItem);\n      if (changes) {\n        updated.push(changes);\n      }\n    }\n  });\n\n  return { added, updated, deleted };\n}\n\nexport function groupById(data) {\n  let res = {};\n  for (let i = 0; i < data.length; i++) {\n    let item = data[i];\n    res[item.id] = item;\n  }\n  return res;\n}\n\nexport function debugMemoFailure(prevProps, nextProps) {\n  let changed = getChangedValues(prevProps, nextProps);\n  if (changed !== null) {\n    console.log(changed);\n  }\n  return changed === null;\n}\n\nexport function setIn(map, keys, item) {\n  for (let i = 0; i < keys.length; i++) {\n    let key = keys[i];\n\n    if (i === keys.length - 1) {\n      map.set(key, item);\n    } else {\n      if (!map.has(key)) {\n        map.set(key, new Map());\n      }\n\n      map = map.get(key);\n    }\n  }\n}\n\nexport function getIn(map, keys) {\n  let item = map;\n  for (let i = 0; i < keys.length; i++) {\n    item = item.get(keys[i]);\n\n    if (item == null) {\n      return item;\n    }\n  }\n  return item;\n}\n\n// Useful for throwing exception from expressions\nexport function throwError(err) {\n  throw err;\n}\n\nexport function fastSetMerge(set1, set2) {\n  let finalSet = new Set(set1);\n  let iter = set2.values();\n  let value = iter.next();\n  while (!value.done) {\n    finalSet.add(value.value);\n    value = iter.next();\n  }\n  return finalSet;\n}\n\nexport function titleFirst(str) {\n  return str[0].toUpperCase() + str.slice(1);\n}\n\nexport let numberFormats = [\n  { value: 'comma-dot', label: '1,000.33' },\n  { value: 'dot-comma', label: '1.000,33' },\n  { value: 'space-comma', label: '1 000,33' }\n];\n\nlet numberFormat = {\n  value: null,\n  formatter: null,\n  regex: null\n};\n\nexport function setNumberFormat(format) {\n  let locale, regex, separator;\n\n  switch (format) {\n    case 'space-comma':\n      locale = 'za-ZA';\n      regex = /[^-0-9,]/g;\n      separator = ',';\n      break;\n    case 'dot-comma':\n      locale = 'de-DE';\n      regex = /[^-0-9,]/g;\n      separator = ',';\n      break;\n    case 'comma-dot':\n    default:\n      locale = 'en-US';\n      regex = /[^-0-9.]/g;\n      separator = '.';\n  }\n\n  numberFormat = {\n    value: format,\n    separator,\n    // This is the keep in line with the Intl API which we might\n    // switch to when it's available on all mobile platforms\n    formatter: {\n      format: number =>\n        currencyFormatter.format(number, { locale, format: '%v' })\n    },\n    regex\n  };\n}\n\nexport function getNumberFormat() {\n  return numberFormat;\n}\n\nsetNumberFormat('1,000.33');\n\nexport function toRelaxedNumber(value) {\n  return integerToAmount(currencyToInteger(value) || 0);\n}\n\nexport function toRelaxedInteger(value) {\n  return stringToInteger(value) || 0;\n}\n\nexport function integerToCurrency(n) {\n  // Awesome\n  return numberFormat.formatter.format(n / 100);\n}\n\nexport function amountToCurrency(n) {\n  return numberFormat.formatter.format(n);\n}\n\nexport function amountToPrettyCurrency(n, code) {\n  return currencyFormatter.format(n, { code });\n}\n\nexport function currencyToAmount(str) {\n  let amount = parseFloat(\n    str.replace(numberFormat.regex, '').replace(numberFormat.separator, '.')\n  );\n  return isNaN(amount) ? null : amount;\n}\n\nexport function currencyToInteger(str) {\n  let amount = currencyToAmount(str);\n  return amount ? amountToInteger(amount) : null;\n}\n\nexport function stringToInteger(str) {\n  let amount = parseInt(str.replace(/[^-0-9.,]/g, ''));\n  if (!isNaN(amount)) {\n    return amount;\n  }\n  return null;\n}\n\nexport function amountToInteger(n) {\n  return Math.round(n * 100);\n}\n\nexport function integerToAmount(n) {\n  return parseFloat((n / 100).toFixed(2));\n}\n\n// This is used when the input format could be anything (from\n// financial files and we don't want to parse based on the user's\n// number format, because the user could be importing from many\n// currencies. We extract out the numbers and just ignore separators.\nexport function looselyParseAmount(amount) {\n  function safeNumber(v) {\n    return isNaN(v) ? null : v;\n  }\n\n  let m = amount.match(/[.,][^.,]*$/);\n  if (!m || m.index === 0) {\n    return safeNumber(parseFloat(amount));\n  }\n\n  let left = amount.slice(0, m.index);\n  let right = amount.slice(m.index + 1);\n\n  return safeNumber(parseFloat(left.replace(/[^0-9-]/g, '') + '.' + right));\n}\n\nexport function semverToNumber(str) {\n  return parseInt(\n    '1' +\n      str\n        .split('.')\n        .map(x => {\n          return ('000' + x.replace(/[^0-9]/g, '')).slice(-3);\n        })\n        .join('')\n  );\n}\n","module.exports = require(\"better-sqlite3\");","module.exports = require(\"crypto\");","module.exports = require(\"fs\");","module.exports = require(\"node-fetch\");","module.exports = require(\"node-libofx\");","module.exports = require(\"path\");","module.exports = require(\"stream\");","module.exports = require(\"string_decoder\");","module.exports = require(\"util\");","module.exports = require(\"zlib\");"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/@rschedule/core/es2015/generators.js","webpack:///./node_modules/@rschedule/core/es2015/main.js","webpack:///./node_modules/@rschedule/core/es2015/rules.js","webpack:///./node_modules/@rschedule/json-tools/es2015/Schedule.js","webpack:///./node_modules/@rschedule/json-tools/es2015/main.js","webpack:///./node_modules/@rschedule/standard-date-adapter/es2015/main.js","webpack:///./node_modules/@rschedule/standard-date-adapter/es2015/setup.js","webpack:///./node_modules/accounting/accounting.js","webpack:///./node_modules/adm-zip/adm-zip.js","webpack:///./node_modules/adm-zip/headers/entryHeader.js","webpack:///./node_modules/adm-zip/headers/index.js","webpack:///./node_modules/adm-zip/headers/mainHeader.js","webpack:///./node_modules/adm-zip/methods/deflater.js","webpack:///./node_modules/adm-zip/methods/index.js","webpack:///./node_modules/adm-zip/methods/inflater.js","webpack:///./node_modules/adm-zip/methods/zipcrypto.js","webpack:///./node_modules/adm-zip/util/constants.js","webpack:///./node_modules/adm-zip/util/errors.js","webpack:///./node_modules/adm-zip/util/fattr.js","webpack:///./node_modules/adm-zip/util/fileSystem.js","webpack:///./node_modules/adm-zip/util/index.js","webpack:///./node_modules/adm-zip/util/utils.js","webpack:///./node_modules/adm-zip/zipEntry.js","webpack:///./node_modules/adm-zip/zipFile.js","webpack:///./node_modules/available-typed-arrays/index.js","webpack:///./node_modules/call-bind/callBound.js","webpack:///./node_modules/call-bind/index.js","webpack:///./node_modules/charenc/charenc.js","webpack:///./node_modules/crypt/crypt.js","webpack:///./node_modules/csv-parse/lib/ResizeableBuffer.js","webpack:///./node_modules/csv-parse/lib/index.js","webpack:///./node_modules/csv-parse/lib/sync.js","webpack:///./node_modules/csv-stringify/lib/index.js","webpack:///./node_modules/csv-stringify/lib/sync.js","webpack:///./node_modules/currency-formatter/index.js","webpack:///./node_modules/damerau-levenshtein/index.js","webpack:///./node_modules/date-fns/esm/_lib/addLeadingZeros/index.js","webpack:///./node_modules/date-fns/esm/_lib/assign/index.js","webpack:///./node_modules/date-fns/esm/_lib/cloneObject/index.js","webpack:///./node_modules/date-fns/esm/_lib/format/formatters/index.js","webpack:///./node_modules/date-fns/esm/_lib/format/lightFormatters/index.js","webpack:///./node_modules/date-fns/esm/_lib/format/longFormatters/index.js","webpack:///./node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/protectedTokens/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCDay/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCISODay/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCISOWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/setUTCWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js","webpack:///./node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js","webpack:///./node_modules/date-fns/esm/_lib/toInteger/index.js","webpack:///./node_modules/date-fns/esm/addDays/index.js","webpack:///./node_modules/date-fns/esm/addHours/index.js","webpack:///./node_modules/date-fns/esm/addISOWeekYears/index.js","webpack:///./node_modules/date-fns/esm/addMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/addMinutes/index.js","webpack:///./node_modules/date-fns/esm/addMonths/index.js","webpack:///./node_modules/date-fns/esm/addQuarters/index.js","webpack:///./node_modules/date-fns/esm/addSeconds/index.js","webpack:///./node_modules/date-fns/esm/addWeeks/index.js","webpack:///./node_modules/date-fns/esm/addYears/index.js","webpack:///./node_modules/date-fns/esm/areIntervalsOverlapping/index.js","webpack:///./node_modules/date-fns/esm/closestIndexTo/index.js","webpack:///./node_modules/date-fns/esm/closestTo/index.js","webpack:///./node_modules/date-fns/esm/compareAsc/index.js","webpack:///./node_modules/date-fns/esm/compareDesc/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarDays/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarISOWeekYears/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarISOWeeks/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarMonths/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarQuarters/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarWeeks/index.js","webpack:///./node_modules/date-fns/esm/differenceInCalendarYears/index.js","webpack:///./node_modules/date-fns/esm/differenceInDays/index.js","webpack:///./node_modules/date-fns/esm/differenceInHours/index.js","webpack:///./node_modules/date-fns/esm/differenceInISOWeekYears/index.js","webpack:///./node_modules/date-fns/esm/differenceInMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/differenceInMinutes/index.js","webpack:///./node_modules/date-fns/esm/differenceInMonths/index.js","webpack:///./node_modules/date-fns/esm/differenceInQuarters/index.js","webpack:///./node_modules/date-fns/esm/differenceInSeconds/index.js","webpack:///./node_modules/date-fns/esm/differenceInWeeks/index.js","webpack:///./node_modules/date-fns/esm/differenceInYears/index.js","webpack:///./node_modules/date-fns/esm/eachDayOfInterval/index.js","webpack:///./node_modules/date-fns/esm/eachWeekOfInterval/index.js","webpack:///./node_modules/date-fns/esm/eachWeekendOfInterval/index.js","webpack:///./node_modules/date-fns/esm/eachWeekendOfMonth/index.js","webpack:///./node_modules/date-fns/esm/eachWeekendOfYear/index.js","webpack:///./node_modules/date-fns/esm/endOfDay/index.js","webpack:///./node_modules/date-fns/esm/endOfDecade/index.js","webpack:///./node_modules/date-fns/esm/endOfHour/index.js","webpack:///./node_modules/date-fns/esm/endOfISOWeek/index.js","webpack:///./node_modules/date-fns/esm/endOfISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/endOfMinute/index.js","webpack:///./node_modules/date-fns/esm/endOfMonth/index.js","webpack:///./node_modules/date-fns/esm/endOfQuarter/index.js","webpack:///./node_modules/date-fns/esm/endOfSecond/index.js","webpack:///./node_modules/date-fns/esm/endOfWeek/index.js","webpack:///./node_modules/date-fns/esm/endOfYear/index.js","webpack:///./node_modules/date-fns/esm/format/index.js","webpack:///./node_modules/date-fns/esm/formatDistance/index.js","webpack:///./node_modules/date-fns/esm/formatDistanceStrict/index.js","webpack:///./node_modules/date-fns/esm/formatRelative/index.js","webpack:///./node_modules/date-fns/esm/fromUnixTime/index.js","webpack:///./node_modules/date-fns/esm/getDate/index.js","webpack:///./node_modules/date-fns/esm/getDay/index.js","webpack:///./node_modules/date-fns/esm/getDayOfYear/index.js","webpack:///./node_modules/date-fns/esm/getDaysInMonth/index.js","webpack:///./node_modules/date-fns/esm/getDaysInYear/index.js","webpack:///./node_modules/date-fns/esm/getDecade/index.js","webpack:///./node_modules/date-fns/esm/getHours/index.js","webpack:///./node_modules/date-fns/esm/getISODay/index.js","webpack:///./node_modules/date-fns/esm/getISOWeek/index.js","webpack:///./node_modules/date-fns/esm/getISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/getISOWeeksInYear/index.js","webpack:///./node_modules/date-fns/esm/getMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/getMinutes/index.js","webpack:///./node_modules/date-fns/esm/getMonth/index.js","webpack:///./node_modules/date-fns/esm/getOverlappingDaysInIntervals/index.js","webpack:///./node_modules/date-fns/esm/getQuarter/index.js","webpack:///./node_modules/date-fns/esm/getSeconds/index.js","webpack:///./node_modules/date-fns/esm/getTime/index.js","webpack:///./node_modules/date-fns/esm/getUnixTime/index.js","webpack:///./node_modules/date-fns/esm/getWeek/index.js","webpack:///./node_modules/date-fns/esm/getWeekOfMonth/index.js","webpack:///./node_modules/date-fns/esm/getWeekYear/index.js","webpack:///./node_modules/date-fns/esm/getWeeksInMonth/index.js","webpack:///./node_modules/date-fns/esm/getYear/index.js","webpack:///./node_modules/date-fns/esm/index.js","webpack:///./node_modules/date-fns/esm/isAfter/index.js","webpack:///./node_modules/date-fns/esm/isBefore/index.js","webpack:///./node_modules/date-fns/esm/isDate/index.js","webpack:///./node_modules/date-fns/esm/isEqual/index.js","webpack:///./node_modules/date-fns/esm/isFirstDayOfMonth/index.js","webpack:///./node_modules/date-fns/esm/isFriday/index.js","webpack:///./node_modules/date-fns/esm/isLastDayOfMonth/index.js","webpack:///./node_modules/date-fns/esm/isLeapYear/index.js","webpack:///./node_modules/date-fns/esm/isMonday/index.js","webpack:///./node_modules/date-fns/esm/isSameDay/index.js","webpack:///./node_modules/date-fns/esm/isSameHour/index.js","webpack:///./node_modules/date-fns/esm/isSameISOWeek/index.js","webpack:///./node_modules/date-fns/esm/isSameISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/isSameMinute/index.js","webpack:///./node_modules/date-fns/esm/isSameMonth/index.js","webpack:///./node_modules/date-fns/esm/isSameQuarter/index.js","webpack:///./node_modules/date-fns/esm/isSameSecond/index.js","webpack:///./node_modules/date-fns/esm/isSameWeek/index.js","webpack:///./node_modules/date-fns/esm/isSameYear/index.js","webpack:///./node_modules/date-fns/esm/isSaturday/index.js","webpack:///./node_modules/date-fns/esm/isSunday/index.js","webpack:///./node_modules/date-fns/esm/isThursday/index.js","webpack:///./node_modules/date-fns/esm/isTuesday/index.js","webpack:///./node_modules/date-fns/esm/isValid/index.js","webpack:///./node_modules/date-fns/esm/isWednesday/index.js","webpack:///./node_modules/date-fns/esm/isWeekend/index.js","webpack:///./node_modules/date-fns/esm/isWithinInterval/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfDecade/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfISOWeek/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfMonth/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfQuarter/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfWeek/index.js","webpack:///./node_modules/date-fns/esm/lastDayOfYear/index.js","webpack:///./node_modules/date-fns/esm/lightFormat/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js","webpack:///./node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/_lib/match/index.js","webpack:///./node_modules/date-fns/esm/locale/en-US/index.js","webpack:///./node_modules/date-fns/esm/max/index.js","webpack:///./node_modules/date-fns/esm/min/index.js","webpack:///./node_modules/date-fns/esm/parse/_lib/parsers/index.js","webpack:///./node_modules/date-fns/esm/parse/index.js","webpack:///./node_modules/date-fns/esm/parseISO/index.js","webpack:///./node_modules/date-fns/esm/roundToNearestMinutes/index.js","webpack:///./node_modules/date-fns/esm/setDate/index.js","webpack:///./node_modules/date-fns/esm/setDay/index.js","webpack:///./node_modules/date-fns/esm/setDayOfYear/index.js","webpack:///./node_modules/date-fns/esm/setHours/index.js","webpack:///./node_modules/date-fns/esm/setISODay/index.js","webpack:///./node_modules/date-fns/esm/setISOWeek/index.js","webpack:///./node_modules/date-fns/esm/setISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/setMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/setMinutes/index.js","webpack:///./node_modules/date-fns/esm/setMonth/index.js","webpack:///./node_modules/date-fns/esm/setQuarter/index.js","webpack:///./node_modules/date-fns/esm/setSeconds/index.js","webpack:///./node_modules/date-fns/esm/setWeek/index.js","webpack:///./node_modules/date-fns/esm/setWeekYear/index.js","webpack:///./node_modules/date-fns/esm/setYear/index.js","webpack:///./node_modules/date-fns/esm/startOfDay/index.js","webpack:///./node_modules/date-fns/esm/startOfDecade/index.js","webpack:///./node_modules/date-fns/esm/startOfHour/index.js","webpack:///./node_modules/date-fns/esm/startOfISOWeek/index.js","webpack:///./node_modules/date-fns/esm/startOfISOWeekYear/index.js","webpack:///./node_modules/date-fns/esm/startOfMinute/index.js","webpack:///./node_modules/date-fns/esm/startOfMonth/index.js","webpack:///./node_modules/date-fns/esm/startOfQuarter/index.js","webpack:///./node_modules/date-fns/esm/startOfSecond/index.js","webpack:///./node_modules/date-fns/esm/startOfWeek/index.js","webpack:///./node_modules/date-fns/esm/startOfWeekYear/index.js","webpack:///./node_modules/date-fns/esm/startOfYear/index.js","webpack:///./node_modules/date-fns/esm/subDays/index.js","webpack:///./node_modules/date-fns/esm/subHours/index.js","webpack:///./node_modules/date-fns/esm/subISOWeekYears/index.js","webpack:///./node_modules/date-fns/esm/subMilliseconds/index.js","webpack:///./node_modules/date-fns/esm/subMinutes/index.js","webpack:///./node_modules/date-fns/esm/subMonths/index.js","webpack:///./node_modules/date-fns/esm/subQuarters/index.js","webpack:///./node_modules/date-fns/esm/subSeconds/index.js","webpack:///./node_modules/date-fns/esm/subWeeks/index.js","webpack:///./node_modules/date-fns/esm/subYears/index.js","webpack:///./node_modules/date-fns/esm/toDate/index.js","webpack:///./node_modules/deep-equal/index.js","webpack:///./node_modules/deep-equal/node_modules/isarray/index.js","webpack:///./node_modules/define-properties/index.js","webpack:///./node_modules/es-abstract/helpers/getOwnPropertyDescriptor.js","webpack:///./node_modules/es-get-iterator/index.js","webpack:///./node_modules/es-get-iterator/node_modules/isarray/index.js","webpack:///./node_modules/foreach/index.js","webpack:///./node_modules/function-bind/implementation.js","webpack:///./node_modules/function-bind/index.js","webpack:///./node_modules/get-intrinsic/index.js","webpack:///./node_modules/google-protobuf/google-protobuf.js","webpack:///./node_modules/has-bigints/index.js","webpack:///./node_modules/has-symbols/index.js","webpack:///./node_modules/has-symbols/shams.js","webpack:///./node_modules/has-tostringtag/shams.js","webpack:///./node_modules/has/src/index.js","webpack:///./node_modules/is-arguments/index.js","webpack:///./node_modules/is-bigint/index.js","webpack:///./node_modules/is-boolean-object/index.js","webpack:///./node_modules/is-buffer/index.js","webpack:///./node_modules/is-date-object/index.js","webpack:///./node_modules/is-map/index.js","webpack:///./node_modules/is-number-object/index.js","webpack:///./node_modules/is-regex/index.js","webpack:///./node_modules/is-set/index.js","webpack:///./node_modules/is-string/index.js","webpack:///./node_modules/is-symbol/index.js","webpack:///./node_modules/is-typed-array/index.js","webpack:///./node_modules/is-weakmap/index.js","webpack:///./node_modules/is-weakset/index.js","webpack:///./node_modules/locale-currency/index.js","webpack:///./node_modules/locale-currency/map.js","webpack:///./node_modules/lru-cache/index.js","webpack:///./node_modules/lru-cache/node_modules/yallist/iterator.js","webpack:///./node_modules/lru-cache/node_modules/yallist/yallist.js","webpack:///./node_modules/md5/md5.js","webpack:///./node_modules/memoize-one/dist/memoize-one.esm.js","webpack:///./node_modules/murmurhash/murmurhash.js","webpack:///./node_modules/object-assign/index.js","webpack:///./node_modules/object-inspect/index.js","webpack:///./node_modules/object-inspect/util.inspect.js","webpack:///./node_modules/object-is/implementation.js","webpack:///./node_modules/object-is/index.js","webpack:///./node_modules/object-is/polyfill.js","webpack:///./node_modules/object-is/shim.js","webpack:///./node_modules/object-keys/implementation.js","webpack:///./node_modules/object-keys/index.js","webpack:///./node_modules/object-keys/isArguments.js","webpack:///./node_modules/object.assign/implementation.js","webpack:///./node_modules/object.assign/index.js","webpack:///./node_modules/object.assign/polyfill.js","webpack:///./node_modules/object.assign/shim.js","webpack:///./node_modules/regexp.prototype.flags/implementation.js","webpack:///./node_modules/regexp.prototype.flags/index.js","webpack:///./node_modules/regexp.prototype.flags/polyfill.js","webpack:///./node_modules/regexp.prototype.flags/shim.js","webpack:///./node_modules/side-channel/index.js","webpack:///./node_modules/slash/index.js","webpack:///./node_modules/uuid/index.js","webpack:///./node_modules/uuid/lib/bytesToUuid.js","webpack:///./node_modules/uuid/lib/rng.js","webpack:///./node_modules/uuid/v1.js","webpack:///./node_modules/uuid/v4.js","webpack:///./node_modules/which-boxed-primitive/index.js","webpack:///./node_modules/which-collection/index.js","webpack:///./node_modules/which-typed-array/index.js","webpack:///./packages/api/app/query.js","webpack:///./packages/api/injected.js","webpack:///./packages/api/methods.js","webpack:///./packages/import-ynab4/importer.js","webpack:///./packages/import-ynab4/node_modules/@actual-app/api/utils.js","webpack:///./packages/import-ynab5/importer.js","webpack:///./packages/import-ynab5/node_modules/@actual-app/api/utils.js","webpack:///./packages/loot-core/migrations/1632571489012_remove_cache.js","webpack:///./packages/loot-core/node_modules/adm-zip/adm-zip.js","webpack:///./packages/loot-core/node_modules/adm-zip/headers/entryHeader.js","webpack:///./packages/loot-core/node_modules/adm-zip/headers/index.js","webpack:///./packages/loot-core/node_modules/adm-zip/headers/mainHeader.js","webpack:///./packages/loot-core/node_modules/adm-zip/methods/deflater.js","webpack:///./packages/loot-core/node_modules/adm-zip/methods/index.js","webpack:///./packages/loot-core/node_modules/adm-zip/methods/inflater.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/constants.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/errors.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/fattr.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/fileSystem.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/index.js","webpack:///./packages/loot-core/node_modules/adm-zip/util/utils.js","webpack:///./packages/loot-core/node_modules/adm-zip/zipEntry.js","webpack:///./packages/loot-core/node_modules/adm-zip/zipFile.js","webpack:///../src/index.ts","webpack:///./packages/loot-core/src/mocks/budget.js","webpack:///./packages/loot-core/src/platform/exceptions/index.electron.js","webpack:///./packages/loot-core/src/platform/server/asyncStorage/index.electron.js","webpack:///./packages/loot-core/src/platform/server/connection/index.api.js","webpack:///./packages/loot-core/src/platform/server/fetch/index.electron.js","webpack:///./packages/loot-core/src/platform/server/fs/index.electron.js","webpack:///./packages/loot-core/src/platform/server/log/index.api.js","webpack:///./packages/loot-core/src/platform/server/sqlite/index.electron.js","webpack:///./packages/loot-core/src/platform/uuid/index.electron.js","webpack:///./packages/loot-core/src/server/accounts/export-to-csv.js","webpack:///./packages/loot-core/src/server/accounts/link.js","webpack:///./packages/loot-core/src/server/accounts/parse-file.js","webpack:///./packages/loot-core/src/server/accounts/payees.js","webpack:///./packages/loot-core/src/server/accounts/qif2json.js","webpack:///./packages/loot-core/src/server/accounts/rules.js","webpack:///./packages/loot-core/src/server/accounts/sync.js","webpack:///./packages/loot-core/src/server/accounts/title/index.js","webpack:///./packages/loot-core/src/server/accounts/title/lower-case.js","webpack:///./packages/loot-core/src/server/accounts/title/specials.js","webpack:///./packages/loot-core/src/server/accounts/transaction-rules.js","webpack:///./packages/loot-core/src/server/accounts/transactions.js","webpack:///./packages/loot-core/src/server/accounts/transfer.js","webpack:///./packages/loot-core/src/server/api-models.js","webpack:///./packages/loot-core/src/server/api.js","webpack:///./packages/loot-core/src/server/app.js","webpack:///./packages/loot-core/src/server/aql/compiler.js","webpack:///./packages/loot-core/src/server/aql/exec.js","webpack:///./packages/loot-core/src/server/aql/schema-helpers.js","webpack:///./packages/loot-core/src/server/aql/schema/executors.js","webpack:///./packages/loot-core/src/server/aql/schema/index.js","webpack:///./packages/loot-core/src/server/aql/schema/run-query.js","webpack:///./packages/loot-core/src/server/aql/views.js","webpack:///./packages/loot-core/src/server/backups.js","webpack:///./packages/loot-core/src/server/budget/actions.js","webpack:///./packages/loot-core/src/server/budget/app.js","webpack:///./packages/loot-core/src/server/budget/base.js","webpack:///./packages/loot-core/src/server/budget/report.js","webpack:///./packages/loot-core/src/server/budget/rollover.js","webpack:///./packages/loot-core/src/server/budget/util.js","webpack:///./packages/loot-core/src/server/cloud-storage.js","webpack:///./packages/loot-core/src/server/db/index.js","webpack:///./packages/loot-core/src/server/db/mappings.js","webpack:///./packages/loot-core/src/server/db/sort.js","webpack:///./packages/loot-core/src/server/db/util.js","webpack:///./packages/loot-core/src/server/encryption-internals.js","webpack:///./packages/loot-core/src/server/encryption.js","webpack:///./packages/loot-core/src/server/errors.js","webpack:///./packages/loot-core/src/server/main-app.js","webpack:///./packages/loot-core/src/server/main.js","webpack:///./packages/loot-core/src/server/merkle.js","webpack:///./packages/loot-core/src/server/migrate/migrations.js","webpack:///./packages/loot-core/src/server/models.js","webpack:///./packages/loot-core/src/server/mutators.js","webpack:///./packages/loot-core/src/server/notes/app.js","webpack:///./packages/loot-core/src/server/perf.js","webpack:///./packages/loot-core/src/server/platform.js","webpack:///./packages/loot-core/src/server/polyfills.js","webpack:///./packages/loot-core/src/server/post.js","webpack:///./packages/loot-core/src/server/prefs.js","webpack:///./packages/loot-core/src/server/schedules/app.js","webpack:///./packages/loot-core/src/server/schedules/find-schedules.js","webpack:///./packages/loot-core/src/server/server-config.js","webpack:///./packages/loot-core/src/server/sheet.js","webpack:///./packages/loot-core/src/server/spreadsheet/globals.js","webpack:///./packages/loot-core/src/server/spreadsheet/graph-data-structure.js","webpack:///./packages/loot-core/src/server/spreadsheet/spreadsheet.js","webpack:///./packages/loot-core/src/server/spreadsheet/util.js","webpack:///./packages/loot-core/src/server/sync/encoder.js","webpack:///./packages/loot-core/src/server/sync/index.js","webpack:///./packages/loot-core/src/server/sync/make-test-message.js","webpack:///./packages/loot-core/src/server/sync/migrate.js","webpack:///./packages/loot-core/src/server/sync/proto/sync_pb.js","webpack:///./packages/loot-core/src/server/sync/repair.js","webpack:///./packages/loot-core/src/server/sync/reset.js","webpack:///./packages/loot-core/src/server/timestamp.js","webpack:///./packages/loot-core/src/server/tools/app.js","webpack:///./packages/loot-core/src/server/tracking/events.js","webpack:///./packages/loot-core/src/server/undo.js","webpack:///./packages/loot-core/src/server/update.js","webpack:///./packages/loot-core/src/server/util/budget-name.js","webpack:///./packages/loot-core/src/server/util/rschedule.js","webpack:///./packages/loot-core/src/shared/accounts.js","webpack:///./packages/loot-core/src/shared/async.js","webpack:///./packages/loot-core/src/shared/months.js","webpack:///./packages/loot-core/src/shared/query.js","webpack:///./packages/loot-core/src/shared/rules.js","webpack:///./packages/loot-core/src/shared/schedules.js","webpack:///./packages/loot-core/src/shared/transactions.js","webpack:///./packages/loot-core/src/shared/util.js","webpack:///external \"better-sqlite3\"","webpack:///external \"crypto\"","webpack:///external \"fs\"","webpack:///external \"node-fetch\"","webpack:///external \"node-libofx\"","webpack:///external \"path\"","webpack:///external \"stream\"","webpack:///external \"string_decoder\"","webpack:///external \"util\"","webpack:///external \"zlib\""],"names":["OccurrenceGenerator","constructor","args","timezone","undefined","maxDuration","firstDate","_firstDate","start","_run","next","value","dateAdapter","fromDateTime","lastDate","_lastDate","isInfinite","end","reverse","pipe","operators","reduce","prev","curr","base","occurrences","OccurrenceIterator","normalizeOccurrencesArgs","collections","CollectionIterator","normalizeCollectionsArgs","occursBetween","startInput","endInput","options","normalizeDateInput","hasDuration","excludeEnds","getMaxDuration","iterator","subtract","day","isBefore","isEqual","occursOn","rawArgs","normalizeOccursOnArgs","weekday","before","ArgumentError","after","add","date","get","skipToDate","getDifferenceBetweenWeekdays","granularity","isAfter","occursAfter","adapter","excludeStart","occursBefore","isAfterOrEqual","DateAdapterBase$1","Object","assign","excludeDates","map","normalizeRunArgs","dateInputToDateTime","normalizeDateInputToAdapter","dateInputToDateAdapter","normalizeRunOutput","normalizeDateTimeTimezone$1","method","Number","isInteger","iterable","Symbol","occurrenceIterator","toArray","take","Array","from","InfiniteLoopError","yieldArgs","normalizeDateOutput","Collection","dates","periodStart","periodEnd","weekStart","Error","getPeriod","startDate","collectionIterator","collection","push","period","index","isBeforeOrEqual","skipEmptyPeriods","incrementPeriod","endGranularity","Operator","streams","config","stream","set","calculateIsInfinite","calculateHasDuration","IterableWrapper","generator","runArgs","done","processYieldArgs","length","every","s","streamsComparer","a","b","streamsReverseComparer","selectNextIterable","sort","filter","shift","selectLastIterable","pop","AddOperator","_","wrappedStreams","input","some","streamsDuration","Calendar","schedules","data","isArray","schedule","prop","count","Dates","adapters","datetimes","duration","toDateTime","remove","slice","findIndex","valueOf","splice","keepLocalTime","json","toJSON","fromJSON","fn","dateTimeSortComparer","dateCache","InvalidDateAdapterError","dateAdapterConfig","DateAdapterBase","_date","generators","name","isDate","_object","unimplementedError","fromDate","_options","_json","_datetime","toISOString","DateTime","hasTimezoneSupport","DateAdapter","WEEKDAYS","MILLISECONDS_IN_SECOND","MILLISECONDS_IN_MINUTE","MILLISECONDS_IN_HOUR","MILLISECONDS_IN_DAY","MILLISECONDS_IN_WEEK","InvalidDateTimeError","Date","assertIsValid","UTC","year","month","hour","minute","second","millisecond","fromDateAdapter","_end","object","assertSameTimeZone","isOccurring","amount","unit","unshift","forkDateTime","addUTCYears","addUTCMonths","addUTCWeeks","addUTCDays","addUTCHours","addUTCMinutes","addUTCSeconds","addUTCMilliseconds","subUTCYears","subUTCMonths","subUTCWeeks","subUTCDays","subUTCHours","subUTCMinutes","subUTCSeconds","subUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCYearDay","getUTCDay","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","setUTCFullYear","monthLength","setUTCDate","setUTCMonth","setUTCHours","setUTCMinutes","setUTCSeconds","setUTCMilliseconds","opt","setDateToStartOfWeek","setDateToEndOfWeek","isNaN","x","y","JSON","stringify","wkst","orderedWeekdays","indexOf","wkdays","shiftArray","array","block","getDaysInFebruary","isLeapYear","now","diff","Math","floor","toInteger","NaN","int","ceil","addMilliseconds","dirtyDate","dirtyAmount","arguments","TypeError","timestamp","desiredMonth","dateWithDesiredMonth","daysInMonth","min","days","getTime","normalizeDateTimeTimezone","RuleBase","recurrenceRules","cloneRuleOptions","normOptions","normalizeRuleOptions","RecurrenceRulesIterator","recurrenceRulesReducer","Rule","tzoptions","DateTime$1","ScheduleBase","occurrenceStream","SubtractOperator","inclusion","exclusion","cycleStreams","iterateExclusion","unique","UniqueOperator","lastValue","Schedule","rrules","exrules","arg","ruleArgs","rule","rdates","exdates","intersection","IntersectionOperator","maxFailedIterations","defaultMaxFailedIterations","hasEndDate","cycleStreams$1","iteration","maxIterations","lastValidDate","last","forEach","DurationIterableWrapper","workingValue","MergeDurationOperatorError","mergeDuration","MergeDurationOperator","reverseRun","forwardRun","checkFromStart","checkFromEnd","SplitDurationOperatorError","splitDuration","SplitDurationOperator","splitFn","datesBucket","splitDate","selectedDate","bucketIndex","selectedBucketIndex","dateIndex","selectedDateIndex","bucket","dateShouldComeNext","datePastEnd","datePastSkipToDate","valid","uniqDateTimes","Map","values","result","abs","getDaysInYear","numberSortComparer","freqToGranularity","freq","cloneJSON","parse","RuleOptionError","normalizeDefaultOptions","recurrenceModules","startOptions","mod","normalizeOptions","keys","key","obj","RecurrenceRuleError","ValidDateTime","InvalidDateTime","rules","iterate","iterateWithReverseCount","iterateWithCount","normalizeDateTimeArgs","startingDate","nextDate","runRules","isDatePastEnd","run","RecurrenceRule","processor","FrequencyRule","initDate","intervalUnit","frequency","firstIntervalStartDate","normalizedStartDate","intervalStartDate","intervalEndDate","normalizedEndDate","skipToInterval","validateDate","dateIsWithinInterval","setToCurrentInterval","intervalDifference","intervalDifferenceBetweenDates","first","interval","direction","difference","intervalDuration","months","RevFrequencyRule","FREQUENCIES","FrequencyRuleModule","byMillisecondOfSecond","norm","includes","deps","ruleOptionFilled","option","freqCache","WeakMap","RecurrenceRuleBase","has","RevRecurrenceRuleBase","RevByTimeOfUnitRule","currentTime","time","baseGranularity","RevByMillisecondOfSecondRule","ByTimeOfUnitRule","ByMillisecondOfSecondRule","ByMillisecondOfSecondRuleModule","num","RevBySecondOfMinuteRule","bySecondOfMinute","BySecondOfMinuteRule","BySecondOfMinuteRuleModule","RevByMinuteOfHourRule","byMinuteOfHour","ByMinuteOfHourRule","ByMinuteOfHourRuleModule","RevByHourOfDayRule","byHourOfDay","ByHourOfDayRule","ByHourOfDayRuleModule","getNextWeekday","getNthWeekdayOfMonth","nth","ByDayOfMonthRule","normalizedByDayOfMonth","normalizeByDayOfMonth","byDayOfMonth","byDayOfWeek","currentDay","nextMonth","lengthOfMonth","filteredByDayOfMonth","entry","nthWeekdayOfMonth","Set","RevByDayOfMonthRule","ByDayOfMonthRuleModule","byDayOfYear","getNthWeekdayOfYear","getPreviousWeekday","RevByDayOfWeekRule","byMonthOfYear","expandYearly","expandMonthly","expand","getPrevWeekdaysOfYear","getPrevWeekdaysOfMonth","normalizedNthWeekdaysOfYear","normalizedNextWeekdays","normalizedNthWeekdaysOfMonth","ByDayOfWeekRule","getNextWeekdaysOfYear","getNextWeekdaysOfMonth","ByDayOfWeekRuleModule","invalidWeeday","find","RevByMonthOfYearRule","currentMonth","ByMonthOfYearRule","ByMonthOfYearRuleModule","ICAL_RULES","prototype","serialize","opts","type","nested","serializeDataToJSON","ParseJSONError","registerJSONSerializerFn","SerializeJSONError","JSON_FN_MAP","gen","StandardDateAdapter","toString","call","datetime","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","root","lib","version","settings","currency","symbol","format","decimal","thousand","precision","grouping","number","nativeMap","nativeIsArray","isString","charCodeAt","substr","isObject","defaults","defs","hasOwnProperty","context","results","i","j","checkPrecision","val","round","checkCurrencyFormat","match","pos","neg","replace","zero","unformat","regex","RegExp","unformatted","parseFloat","toFixed","exponentialForm","rounded","finalResult","formatNumber","usePrecision","negative","parseInt","split","formatMoney","formats","useFormat","formatColumn","list","padAfterSymbol","maxLength","formatted","fVal","join","module","exports","accounting","Utils","require","pth","ZipEntry","ZipFile","get_Bool","def","get_Str","defaultOptions","noSort","readEntries","Constants","NONE","fs","inBuffer","create","Uint8Array","Buffer","isBuffer","BUFFER","filetools","existsSync","FILE","filename","readFileSync","Errors","INVALID_FILENAME","_zip","canonical","sanitize","getEntry","item","entryName","header","fixPath","zipPath","posix","normalize","sep","readFile","pass","getData","readFileAsync","callback","getDataAsync","readAsText","encoding","readAsTextAsync","err","deleteFile","deleteEntry","addZipComment","comment","getZipComment","addZipEntryComment","getZipEntryComment","updateFile","content","setData","addLocalFile","localPath","zipName","p","_attr","statSync","addFile","FILE_NOT_FOUND","addLocalFolder","rx","test","items","findFiles","self","filepath","relative","stats","isFile","alloc","addLocalFolderAsync","open","code","stat","er0","er1","addLocalFolderPromise","props","Promise","resolve","reject","attr","update","isStat","Stats","mtime","fileattr","isDirectory","isWin","unix","mode","setEntry","getEntries","entries","getEntryCount","extractEntryTo","targetPath","maintainEntryPath","overwrite","keepOriginalPermission","outFileName","NO_ENTRY","target","basename","children","getEntryChildren","child","CANT_EXTRACT_FILE","childName","fileAttr","writeFileTo","CANT_OVERRIDE","extractAllTo","NO_ZIP","makeDir","utimesSync","extractAllToAsync","getPath","getError","msg","file","dirEntries","fileEntries","e","dirPath","dirAttr","chmodSync","er","size","filePath","err_1","writeFileToAsync","succ","utimes","err_2","delete","writeZip","targetFileName","zipData","compressToBuffer","ok","writeZipPromise","perm","toBufferPromise","then","ret","toAsyncBuffer","toBuffer","onSuccess","onFail","onItemStart","onItemEnd","_verMade","_version","_flags","_method","_time","_crc","_compressedSize","_size","_fnameLen","_extraLen","_comLen","_diskStart","_inattr","_offset","FLG_EFS","_dataHeader","setTime","made","flags","STORED","DEFLATED","crc","max","compressedSize","fileNameLength","extraLength","commentLength","diskNumStart","inAttr","offset","encripted","entryHeaderSize","CENHDR","realDataOffset","LOCHDR","fnameLen","extraLen","dataHeader","loadDataHeaderFromBinary","readUInt32LE","LOCSIG","INVALID_LOC","readUInt16LE","LOCVER","LOCFLG","LOCHOW","LOCTIM","LOCCRC","LOCSIZ","LOCLEN","LOCNAM","LOCEXT","loadFromBinary","CENSIG","INVALID_CEN","CENVEM","CENVER","CENFLG","CENHOW","CENTIM","CENCRC","CENSIZ","CENLEN","CENNAM","CENEXT","CENCOM","CENDSK","CENATT","CENATX","CENOFF","dataHeaderToBinary","writeUInt32LE","writeUInt16LE","entryHeaderToBinary","fill","bytes","nr","methodToString","toUpperCase","EntryHeader","MainHeader","_volumeEntries","_totalEntries","_commentLength","diskEntries","totalEntries","mainHeaderSize","ENDHDR","ENDSIG","ZIP64HDR","ZIP64SIG","INVALID_END","ENDSUB","ENDTOT","ENDSIZ","ENDOFF","ENDCOM","readBigUInt64LE","ZIP64SUB","ZIP64TOT","ZIP64SIZ","ZIP64OFF","toBinary","len","offs","inbuf","zlib","chunkSize","deflate","deflateRawSync","deflateAsync","tmp","createDeflateRaw","parts","total","on","buf","written","part","copy","Deflater","Inflater","ZipCrypto","inflate","inflateRawSync","inflateAsync","createInflateRaw","randomFillSync","crctable","Uint32Array","t","uMul","imul","crc32update","pCrc32","bval","genSalt","node","salt","random","Initkeys","pw","updateKeys","byteValue","k","make_decrypter","pwd","c","make_encrypter","decrypt","decrypter","_salter","encrypt","oldlike","encrypter","EXTSIG","EXTHDR","EXTCRC","EXTSIZ","EXTLEN","END64HDR","END64SIG","END64START","END64OFF","END64NUMDISKS","ZIP64LEAD","ZIP64SIZE","ZIP64VEM","ZIP64VER","ZIP64DSK","ZIP64DSKDIR","ZIP64SIZB","ZIP64EXTRA","SHRUNK","REDUCED1","REDUCED2","REDUCED3","REDUCED4","IMPLODED","ENHANCED_DEFLATED","PKWARE","BZIP2","LZMA","IBM_TERSE","IBM_LZ77","AES_ENCRYPT","FLG_ENC","FLG_COMP1","FLG_COMP2","FLG_DESC","FLG_ENH","FLG_PATCH","FLG_STR","FLG_MSK","EF_ID","EF_SIZE","ID_ZIP64","ID_AVINFO","ID_PFS","ID_OS2","ID_NTFS","ID_OPENVMS","ID_UNIX","ID_FORK","ID_PATCH","ID_X509_PKCS7","ID_X509_CERTID_F","ID_X509_CERTID_C","ID_STRONGENC","ID_RECORD_MGT","ID_X509_PKCS7_RL","ID_IBM1","ID_IBM2","ID_POSZIP","EF_ZIP64_OR_32","EF_ZIP64_OR_16","EF_ZIP64_SUNCOMP","EF_ZIP64_SCOMP","EF_ZIP64_RHO","EF_ZIP64_DSN","NO_DATA","BAD_CRC","FILE_IN_THE_WAY","UNKNOWN_METHOD","AVAIL_DATA","INVALID_DISTANCE","TO_MANY_CODES","INVALID_REPEAT_LEN","INVALID_REPEAT_FIRST","INCOMPLETE_CODES","INVALID_DYN_DISTANCE","INVALID_CODES_LEN","INVALID_STORE_BLOCK","INVALID_BLOCK_TYPE","DIRECTORY_CONTENT_ERROR","NOT_IMPLEMENTED","INVALID_FORMAT","path","_path","_obj","newAttr","_stat","directory","readonly","hidden","executable","atime","console","warn","readOnly","decodeAttributes","encodeAttributes","isReadOnly","isHidden","isExecutable","mTime","aTime","process","versions","originalFs","FileAttr","fsystem","platform","is_Obj","crcTable","folder","mkdirSync","fpath","resolvedPath","dirname","fd","openSync","writeSync","closeSync","exists","exist","chmod","write","close","findSync","dir","pattern","recursive","files","readdirSync","concat","getAttributes","setAttributes","byte","crc32","genCRCTable","off","safeSuffix","prefix","l","buffer","swap64","Headers","Methods","_entryHeader","_entryName","_comment","_isDirectory","uncompressedData","_extra","getCompressedDataFromZip","crc32OK","decompress","async","compressedData","inflater","compress","deflater","deflated","readUInt64LE","parseExtra","signature","parseZip64ExtendedInformation","rawEntryName","lastChar","extra","n","getCompressedData","getCompressedDataAsync","changed","packHeader","addpos","entryList","entryTable","mainHeader","loadedEntries","readMainHeader","iterateEntries","readNow","endStart","endOffset","commentEnd","sortEntries","toLowerCase","localeCompare","_self","zipEntry","dataBlock","entryHeaders","totalSize","dindex","entryNameLen","postHeader","dataLength","entryHeader","outBuffer","mh","compress2Buffer","entryLists","possibleNames","g","globalThis","global","availableTypedArrays","out","GetIntrinsic","callBind","$indexOf","callBoundIntrinsic","allowMissing","intrinsic","bind","$apply","$call","$reflectApply","$gOPD","$defineProperty","$max","originalFunction","func","desc","configurable","applyBind","apply","charenc","utf8","stringToBytes","str","bin","unescape","encodeURIComponent","bytesToString","decodeURIComponent","escape","String","fromCharCode","base64map","crypt","rotl","rotr","endian","randomBytes","bytesToWords","words","wordsToBytes","bytesToHex","hex","hexToBytes","bytesToBase64","base64","triplet","charAt","base64ToBytes","imod4","pow","ResizeableBuffer","prepend","resize","clone","append","reset","Transform","tab","nl","np","cr","space","boms","Parser","readableObjectMode","__originalOptions","__normalizeOptions","underscore","CsvError","bom","fnCastField","cast","cast_date","fnFirstLineToHeaders","columns","normalizeColumnsArray","columns_duplicates_to_array","delimiter_json","delimiter","from_line","ignore_last_delimiters","info","max_record_size","objname","on_record","quote","raw","record_delimiter","rd","relax","relax_column_count","relax_column_count_less","relax_column_count_more","skip_empty_lines","skip_lines_with_empty_values","skip_lines_with_error","rtrim","ltrim","trim","to","to_line","comment_lines","empty_lines","invalid_field_length","lines","records","state","bomSkipped","bufBytesStart","castField","commenting","error","enabled","escaping","escapeIsQuote","compare","expectedRecordLength","field","firstLineToHeaders","needMoreDataSize","previousBuf","quoting","stop","rawBuffer","record","recordHasError","record_length","recordDelimiterMaxLength","v","trimChars","wasQuoting","wasRowDelimiter","_transform","__parse","_flush","nextBuf","bomLength","bufLen","__needMoreData","record_delimiterCount","__autoDiscoverRecordDelimiter","chr","__isEscape","__isQuote","nextChr","isNextChrTrimable","__isCharTrimable","isNextChrComment","__compareBytes","isNextChrDelimiter","__isDelimiter","isNextChrRecordDelimiter","__isRecordDelimiter","__error","__infoField","recordDelimiterLength","skipCommentLine","__resetField","__resetRecord","errField","__onField","errRecord","__onRecord","commentCount","delimiterLength","lappend","rappend","recordLength","isRecordEmpty","__firstLineToColumns","finalErr","disabled","__push","__infoRecord","headers","normalizedHeaders","trimRight","__cast","f","isColumns","__isFloat","sourceBuf","targetBuf","targetPos","firstByte","sourceLength","numOfCharLeft","requiredLength","loop1","del","rdLength","emit","__infoDataSet","column","argument","parser","read","setImmediate","message","contexts","captureStackTrace","normalizedColumns","err1","err2","bom_utf8","Stringifier","writableObjectMode","quoted","quoted_empty","quoted_match","isRegExp","quoted_string","eof","normalize_columns","bigint","boolean","string","chunk","chunk_string","chunkIsHeader","csvrecord","containsdelimiter","containsQuote","containsEscape","containsRecordDelimiter","quotedString","quotedMatch","shouldQuote","regexp","newcolumns","stringifier","chunks","charCodeOfDot","reEscapeChar","rePropName","reIsDeepProp","reIsPlainProp","getTag","isKey","isSymbol","stringToPath","expression","subString","castPath","toKey","INFINITY","StringDecoder","decoder","onData","localeCurrency","currencies","localeFormats","defaultCurrency","thousandsSeparator","decimalSeparator","symbolOnLeft","spaceBetweenAmountAndSymbol","decimalDigits","defaultLocaleFormat","formatMapping","locale","getCurrency","localeMatch","exec","language","region","localeFormat","findCurrency","isUndefined","currencyCode","__this","that","limit","thisLength","thatLength","matrix","prepare","this_i","that_j","cost","steps","similarity","addLeadingZeros","targetLength","sign","output","dirtyObject","property","cloneObject","dayPeriodEnum","am","pm","midnight","noon","morning","afternoon","evening","night","formatters","G","token","localize","era","width","signedYear","ordinalNumber","lightFormatters","Y","signedWeekYear","getUTCWeekYear","weekYear","twoDigitYear","R","isoWeekYear","getUTCISOWeekYear","u","Q","quarter","q","M","L","w","week","getUTCWeek","I","isoWeek","getUTCISOWeek","d","D","dayOfYear","getUTCDayOfYear","E","dayOfWeek","localDayOfWeek","weekStartsOn","isoDayOfWeek","hours","dayPeriodEnumValue","dayPeriod","B","h","H","K","m","S","numberOfDigits","milliseconds","fractionalSeconds","X","_localize","originalDate","_originalDate","timezoneOffset","getTimezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","O","formatTimezoneShort","z","T","dirtyDelimiter","absOffset","minutes","dateLongFormatter","formatLong","timeLongFormatter","dateTimeLongFormatter","matchResult","datePattern","timePattern","dateTimeFormat","dateTime","longFormatters","P","getTimezoneOffsetInMilliseconds","baseTimezoneOffset","setSeconds","millisecondsPartOfTimezoneOffset","toDate","startOfYearTimestamp","startOfUTCISOWeek","startOfUTCISOWeekYear","fourthOfJanuaryOfNextYear","startOfNextYear","fourthOfJanuaryOfThisYear","startOfThisYear","startOfUTCWeek","startOfUTCWeekYear","dirtyOptions","localeFirstWeekContainsDate","firstWeekContainsDate","defaultFirstWeekContainsDate","RangeError","firstWeekOfNextYear","firstWeekOfThisYear","protectedTokens","isProtectedToken","throwProtectedError","setUTCDay","dirtyDay","localeWeekStartsOn","defaultWeekStartsOn","remainder","dayIndex","setUTCISODay","setUTCISOWeek","dirtyISOWeek","setUTCWeek","dirtyWeek","fourthOfJanuary","firstWeek","dirtyNumber","addDays","setDate","addHours","addISOWeekYears","setISOWeekYear","getISOWeekYear","addMinutes","addMonths","setFullYear","setHours","getDaysInMonth","setMonth","addQuarters","addSeconds","addWeeks","addYears","areIntervalsOverlapping","dirtyIntervalLeft","dirtyIntervalRight","intervalLeft","intervalRight","leftStartTime","leftEndTime","rightStartTime","rightEndTime","closestIndexTo","dirtyDateToCompare","dirtyDatesArray","dateToCompare","timeToCompare","datesArray","minDistance","currentDate","distance","closestTo","compareAsc","dirtyDateLeft","dirtyDateRight","dateLeft","dateRight","compareDesc","differenceInCalendarDays","startOfDayLeft","startOfDay","startOfDayRight","timestampLeft","timestampRight","differenceInCalendarISOWeekYears","differenceInCalendarISOWeeks","startOfISOWeekLeft","startOfISOWeek","startOfISOWeekRight","differenceInCalendarMonths","yearDiff","monthDiff","differenceInCalendarQuarters","quarterDiff","getQuarter","differenceInCalendarWeeks","startOfWeekLeft","startOfWeek","startOfWeekRight","differenceInCalendarYears","differenceInDays","isLastDayNotFull","differenceInHours","differenceInMilliseconds","differenceInISOWeekYears","subISOWeekYears","isLastISOWeekYearNotFull","differenceInMinutes","differenceInMonths","isLastMonthNotFull","differenceInQuarters","differenceInSeconds","differenceInWeeks","differenceInYears","isLastYearNotFull","eachDayOfInterval","dirtyInterval","endDate","endTime","step","eachWeekOfInterval","startDateWeek","endDateWeek","weeks","currentWeek","eachWeekendOfInterval","dateInterval","weekends","isWeekend","isSunday","eachWeekendOfMonth","startOfMonth","endOfMonth","eachWeekendOfYear","startOfYear","endOfYear","endOfDay","endOfDecade","decade","endOfHour","setMinutes","endOfISOWeek","endOfWeek","endOfISOWeekYear","setMilliseconds","endOfMinute","endOfQuarter","endOfSecond","getDay","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","dirtyFormatStr","formatStr","defaultLocale","isValid","utcDate","subMilliseconds","formatterOptions","substring","firstCharacter","longFormatter","cleanEscapedString","formatter","awareOfUnicodeTokens","MINUTES_IN_DAY","MINUTES_IN_ALMOST_TWO_DAYS","MINUTES_IN_MONTH","MINUTES_IN_TWO_MONTHS","formatDistance","dirtyBaseDate","comparison","localizeOptions","addSuffix","Boolean","seconds","offsetInSeconds","includeSeconds","nearestMonth","monthsSinceStartOfYear","years","MINUTES_IN_YEAR","formatDistanceStrict","roundingMethod","roundingMethodFn","formatRelative","baseDate","utcBaseDate","fromUnixTime","dirtyUnixTime","unixTime","dayOfMonth","getDayOfYear","monthIndex","lastDayOfMonth","getDecade","getISODay","getISOWeek","startOfISOWeekYear","getISOWeeksInYear","thisYear","nextYear","getOverlappingDaysInIntervals","isOverlapping","overlapStartDate","overlapEndDate","differenceInMs","getUnixTime","getWeek","startOfWeekYear","getWeekOfMonth","startWeekDay","currentWeekDay","startWeekDayWithOptions","getWeekYear","getWeeksInMonth","getYear","dirtyLeftDate","dirtyRightDate","isFirstDayOfMonth","isFriday","isLastDayOfMonth","isMonday","isSameDay","dateLeftStartOfDay","dateRightStartOfDay","isSameHour","dateLeftStartOfHour","startOfHour","dateRightStartOfHour","isSameISOWeek","isSameWeek","isSameISOWeekYear","dateLeftStartOfYear","dateRightStartOfYear","isSameMinute","dateLeftStartOfMinute","startOfMinute","dateRightStartOfMinute","isSameMonth","isSameQuarter","dateLeftStartOfQuarter","startOfQuarter","dateRightStartOfQuarter","isSameSecond","dateLeftStartOfSecond","startOfSecond","dateRightStartOfSecond","dateLeftStartOfWeek","dateRightStartOfWeek","isSameYear","isSaturday","isThursday","isTuesday","isWednesday","isWithinInterval","startTime","lastDayOfDecade","lastDayOfISOWeek","lastDayOfWeek","lastDayOfISOWeekYear","lastDayOfQuarter","lastDayOfYear","lightFormat","buildFormatLongFn","defaultWidth","buildLocalizeFn","dirtyIndex","valuesArray","formattingValues","defaultFormattingWidth","argumentCallback","buildMatchFn","dirtyString","matchPattern","matchPatterns","defaultMatchWidth","matchedString","parsePatterns","defaultParseWidth","findKey","valueCallback","rest","predicate","buildMatchPatternFn","parseResult","parsePattern","formatDistanceLocale","lessThanXSeconds","one","other","xSeconds","halfAMinute","lessThanXMinutes","xMinutes","aboutXHours","xHours","xDays","aboutXMonths","xMonths","aboutXYears","xYears","overXYears","almostXYears","dateFormats","full","long","medium","short","timeFormats","dateTimeFormats","formatRelativeLocale","lastWeek","yesterday","today","tomorrow","nextWeek","eraValues","narrow","abbreviated","wide","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","rem100","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","any","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","numericPatterns","hour23h","hour24h","hour11h","hour12h","singleDigit","twoDigits","threeDigits","fourDigits","anyDigitsSigned","singleDigitSigned","twoDigitsSigned","threeDigitsSigned","fourDigitsSigned","timezonePatterns","basicOptionalMinutes","basic","basicOptionalSeconds","extended","extendedOptionalSeconds","parseNumericPattern","parseTimezonePattern","parseAnyDigitsSigned","parseNDigits","parseNDigitsSigned","dayPeriodEnumToHours","enumValue","normalizeTwoDigitYear","currentYear","isCommonEra","absCurrentYear","rangeEnd","rangeEndCentury","isPreviousCentury","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP_YEAR","isLeapYearIndex","parsers","priority","isTwoDigitYear","validate","normalizedTwoDigitYear","firstWeekOfYear","wholeWeekDays","isPM","timestampIsSet","TIMEZONE_UNIT_PRIORITY","notWhitespaceRegExp","dirtyDateString","dirtyFormatString","dateString","formatString","subFnOptions","setters","dateToSystemTimezone","tokens","uniquePrioritySetters","setter","setterArray","convertedDate","DEFAULT_ADDITIONAL_DIGITS","patterns","dateTimeDelimiter","timeZoneDelimiter","dateRegex","timeRegex","timezoneRegex","parseISO","additionalDigits","dateStrings","splitDateString","parseYearResult","parseYear","parseDate","restDateString","parseTime","parseTimezone","fullTime","fullTimeDate","fullTimeDateNextDay","offsetDiff","timeString","captures","century","isWeekDate","parseDateUnit","validateWeekDate","dayOfISOWeekYear","validateDayOfYearDate","parseTimeUnit","validateTime","timezoneString","validateTimezone","fourthOfJanuaryDay","daysInMonths","_year","_hours","roundToNearestMinutes","nearestTo","roundedMinutes","remainderMinutes","addedMinutes","dirtyDayOfMonth","setDay","setDayOfYear","dirtyDayOfYear","dirtyHours","setISODay","setISOWeek","dirtyISOWeekYear","dirtyMilliseconds","dirtyMinutes","dirtyMonth","setQuarter","dirtyQuarter","oldQuarter","dirtySeconds","setWeek","setWeekYear","dirtyWeekYear","setYear","dirtyYear","startOfDecade","cleanDate","subDays","subHours","subMinutes","subMonths","subQuarters","subSeconds","subWeeks","subYears","argStr","stack","objectKeys","isArguments","is","isRegex","whichBoxedPrimitive","callBound","whichCollection","getIterator","getSideChannel","whichTypedArray","$getTime","gPO","getPrototypeOf","$objToString","$Set","$mapHas","$mapGet","$mapSize","$setAdd","$setDelete","$setHas","$setSize","setHasEqualElement","val1","channel","internalDeepEqual","findLooseMatchingPrimitives","prim","mapMightHaveLoosePrim","altValue","curB","looseOpts","strict","setMightHaveLoosePrim","mapHasEqualEntry","key1","item1","key2","actual","expected","actualBoxed","expectedBoxed","hasActual","hasExpected","sentinel","objEquiv","setEquiv","iA","iB","resultA","resultB","mapEquiv","item2","aIsArray","bIsArray","aIsError","bIsError","aIsRegex","bIsRegex","source","aIsDate","bIsDate","aIsBuffer","bIsBuffer","ka","kb","aCollection","bCollection","deepEqual","arr","hasSymbols","toStr","origDefineProperty","defineProperty","isFunction","arePropertyDescriptorsSupported","enumerable","supportsDescriptors","writable","defineProperties","predicates","getOwnPropertySymbols","$iterator","$Map","$arrayPush","$charCodeAt","$stringSlice","advanceStringIndex","getArrayIterator","arraylike","getNonCollectionIterator","noPrimordialCollections","nextIndex","isMap","isSet","$mapForEach","$setForEach","$mapIterator","$setIterator","getStopIterationIterator","$mapAtAtIterator","$setAtAtIterator","getCollectionIterator","hasOwn","ctx","ERROR_MESSAGE","funcType","bound","binder","boundLength","boundArgs","Function","Empty","implementation","$SyntaxError","SyntaxError","$Function","$TypeError","getEvalledConstructor","expressionSyntax","getOwnPropertyDescriptor","throwTypeError","ThrowTypeError","callee","calleeThrows","gOPDthrows","getProto","__proto__","needsEval","TypedArray","INTRINSICS","AggregateError","ArrayBuffer","Atomics","BigInt","DataView","decodeURI","encodeURI","eval","EvalError","Float32Array","Float64Array","FinalizationRegistry","Int8Array","Int16Array","Int32Array","isFinite","Proxy","ReferenceError","Reflect","SharedArrayBuffer","Uint8ClampedArray","Uint16Array","URIError","WeakRef","WeakSet","doEval","LEGACY_ALIASES","$concat","$spliceApply","$replace","$strSlice","getBaseIntrinsic","intrinsicName","alias","intrinsicBaseName","intrinsicRealName","skipFurtherCaching","isOwn","$jscomp","scope","findInternal","ASSUME_ES5","ASSUME_NO_NATIVE_MAP","ASSUME_NO_NATIVE_SET","SIMPLE_FROUND_POLYFILL","getGlobal","window","polyfill","checkStringArgs","COMPILED","goog","isDef","isBoolean","isNumber","exportPath_","execScript","define","CLOSURE_UNCOMPILED_DEFINES","CLOSURE_DEFINES","nodeType","FEATURESET_YEAR","DEBUG","LOCALE","TRUSTED_SITE","STRICT_MODE_COMPATIBLE","DISALLOW_TEST_ONLY_CODE","ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING","provide","isInModuleLoader_","isProvided_","constructNamespace_","implicitNamespaces_","lastIndexOf","getObjectByName","getScriptNonce","getScriptNonce_","document","cspNonce_","NONCE_PATTERN_","querySelector","nonce","getAttribute","VALID_MODULE_RE_","search","isInGoogModuleLoader_","moduleLoaderState_","moduleName","getInternal_","loadedModules_","ModuleType","ES6","GOOG","isInEs6ModuleLoader_","getCurrentModulePath","declareLegacyNamespace","declareModuleId","moduleId","setTestOnly","forwardDeclare","isDefAndNotNull","globalize","addDependency","DEPENDENCIES_ENABLED","debugLoader_","ENABLE_DEBUG_LOADER","logToConsole_","requested","load_","requireType","basePath","nullFunction","abstractMethod","addSingletonGetter","instance_","getInstance","instantiatedSingletons_","LOAD_MODULE_USING_EVAL","SEAL_MODULE_EXPORTS","TRANSPILE","ASSUME_ES_MODULES_TRANSPILED","TRANSPILE_TO_LANGUAGE","TRANSPILER","hasBadLetScoping","useSafari10Workaround","workaroundSafari10EvalBug","loadModule","loadModuleFromSource_","seal","normalizePath_","loadFileSync_","CLOSURE_LOAD_FILE_SYNC","XMLHttpRequest","send","status","responseText","transpile_","transpile","$gwtExport","typeOf","propertyIsEnumerable","isNull","isArrayLike","isDateLike","getUid","UID_PROPERTY_","uidCounter_","hasUid","removeUid","removeAttribute","getHashCode","removeHashCode","bindNative_","bindJs_","partial","mixin","globalEval","evalWorksForGlobals_","_evalTest_","createElement","defer","appendChild","createTextNode","head","removeChild","getCssName","cssNameMapping_","cssNameMappingStyle_","CLOSURE_CSS_NAME_MAP_FN","setCssNameMapping","CLOSURE_CSS_NAME_MAPPING","getMsg","html","getMsgWithFallback","exportSymbol","exportProperty","inherits","superClass_","caller","defineClass","statics","createSealingConstructor_","applyProperties_","SEAL_CLASS_INSTANCES","isUnsealable_","UNSEALABLE_CONSTRUCTOR_PROPERTY_","OBJECT_PROTOTYPE_FIELDS_","tagUnsealableClass","inHtmlDocument_","isDocumentLoading_","attachEvent","readyState","findBasePath_","CLOSURE_BASE_PATH","currentScript","getElementsByTagName","src","Transpiler","requiresTranspilation_","transpilationTarget_","createRequiresTranspilation_","es3","navigator","userAgent","needsTranspile","transpiler_","protectScriptTag_","DebugLoader_","dependencies_","idToPath_","written_","loadingDeps_","depsToLoad_","paused_","factory_","DependencyFactory","deferredCallbacks_","deferredQueue_","bootstrap","setTimeout","getPathFromDeps_","onLoad","loadClosureDeps","createDependency","loadDeps_","areDepsLoaded_","requires","setDependencyFactory","loading_","pause","resume","resume_","loaded","loaded_","pending","setModuleState","registerEs6ModuleExports","registerGoogModuleExports","clearModuleState","defer_","areDepsLoaded","load","pause_","LoadController","Dependency","relativePath","provides","loadFlags","loadCallbacks_","getPathName","callbackMap_","registerCallback_","unregisterCallback_","callback_","CLOSURE_IMPORT_SCRIPT","IS_OLD_IE_","TRUSTED_TYPES_POLICY_","createHTML","setAttribute","onreadystatechange","onload","createScriptURL","Es6ModuleDependency","textContent","createScript","TransformedDependency","contents_","lazyFetch_","transform","ensure","TranspiledDependency","transpiler","PreTranspiledEs6ModuleDependency","GoogModuleDependency","needsTranspile_","atob","all","lang","CLOSURE_NO_DEPS","TRUSTED_TYPES_POLICY_NAME","identity_","createTrustedTypesPolicy","TrustedTypes","createPolicy","createURL","getCount","getAnyKey","getAnyValue","contains","containsValue","getValues","getKeys","getValueByKeys","containsKey","findValue","isEmpty","clear","setIfUndefined","setWithReturnValueIfNotSet","equals","unsafeClone","transpose","PROTOTYPE_FIELDS_","extend","createSet","createImmutableView","isFrozen","freeze","isImmutableView","getAllPropertyNames","getOwnPropertyNames","getSuperClass","debug","reportErrorToServer","dom","NodeType","ELEMENT","ATTRIBUTE","TEXT","CDATA_SECTION","ENTITY_REFERENCE","ENTITY","PROCESSING_INSTRUCTION","COMMENT","DOCUMENT","DOCUMENT_TYPE","DOCUMENT_FRAGMENT","NOTATION","asserts","ENABLE_ASSERTS","AssertionError","subs_","messagePattern","DEFAULT_ERROR_HANDLER","errorHandler_","doAssertFailure_","setErrorHandler","assert","assertExists","fail","assertNumber","assertString","assertFunction","assertObject","assertArray","assertBoolean","assertElement","assertInstanceof","getType_","assertFinite","assertObjectPrototypeIsIntact","displayName","jspb","BinaryConstants","ConstBinaryMessage","BinaryMessage","FieldType","INVALID","DOUBLE","FLOAT","INT64","UINT64","INT32","FIXED64","FIXED32","BOOL","STRING","GROUP","MESSAGE","BYTES","UINT32","ENUM","SFIXED32","SFIXED64","SINT32","SINT64","FHASH64","VHASH64","WireType","VARINT","DELIMITED","START_GROUP","END_GROUP","FieldTypeToWireType","INVALID_FIELD_NUMBER","FLOAT32_EPS","FLOAT32_MIN","FLOAT32_MAX","FLOAT64_EPS","FLOAT64_MIN","FLOAT64_MAX","TWO_TO_20","TWO_TO_23","TWO_TO_31","TWO_TO_32","TWO_TO_52","TWO_TO_63","TWO_TO_64","ZERO_HASH","NATIVE_ARRAY_PROTOTYPES","ASSUME_NATIVE_FUNCTIONS","peek","forEachRight","reduceRight","findRight","findIndexRight","insert","insertAt","insertArrayAt","insertBefore","removeAt","removeLast","removeIf","removeAllIf","removeDuplicates","binarySearch","binarySearch_","defaultCompare","binarySelect","stableSort","sortByKey","sortObjectsByKey","isSorted","defaultCompareEquality","compare3","inverseDefaultCompare","binaryInsert","binaryRemove","toObject","range","repeat","flatten","rotate","moveItem","zip","shuffle","copyByIndex","concatMap","stringToByteArray","byteArrayToString","byteArrayToHex","hexToByteArray","stringToUtf8ByteArray","utf8ByteArrayToString","xorByteArray","assertIsLocation","getWindow_","Location","Element","debugStringForType_","assertIsElementType_","assertIsHTMLAnchorElement","assertIsHTMLButtonElement","assertIsHTMLLinkElement","assertIsHTMLImageElement","assertIsHTMLAudioElement","assertIsHTMLVideoElement","assertIsHTMLInputElement","assertIsHTMLTextAreaElement","assertIsHTMLCanvasElement","assertIsHTMLEmbedElement","assertIsHTMLFormElement","assertIsHTMLFrameElement","assertIsHTMLIFrameElement","assertIsHTMLObjectElement","assertIsHTMLScriptElement","ownerDocument","defaultView","parentWindow","functions","constant","FALSE","TRUE","NULL","identity","lock","partialRight","withReturnValue","sequence","equalTo","compose","and","or","not","CACHE_RETURN_VALUE","cacheReturnValue","once","debounce","clearTimeout","throttle","rateLimit","HtmlElement","TagName","tagName_","A","ABBR","ACRONYM","ADDRESS","APPLET","AREA","ARTICLE","ASIDE","AUDIO","BASE","BASEFONT","BDI","BDO","BIG","BLOCKQUOTE","BODY","BR","BUTTON","CANVAS","CAPTION","CENTER","CITE","CODE","COL","COLGROUP","COMMAND","DATA","DATALIST","DD","DEL","DETAILS","DFN","DIALOG","DIR","DIV","DL","DT","EM","EMBED","FIELDSET","FIGCAPTION","FIGURE","FONT","FOOTER","FORM","FRAME","FRAMESET","H1","H2","H3","H4","H5","H6","HEAD","HEADER","HGROUP","HR","HTML","IFRAME","IMG","INPUT","INS","ISINDEX","KBD","KEYGEN","LABEL","LEGEND","LI","LINK","MAIN","MAP","MARK","MATH","MENU","MENUITEM","META","METER","NAV","NOFRAMES","NOSCRIPT","OBJECT","OL","OPTGROUP","OPTION","OUTPUT","PARAM","PICTURE","PRE","PROGRESS","RP","RT","RTC","RUBY","SAMP","SCRIPT","SECTION","SELECT","SMALL","SOURCE","SPAN","STRIKE","STRONG","STYLE","SUB","SUMMARY","SUP","SVG","TABLE","TBODY","TD","TEMPLATE","TEXTAREA","TFOOT","TH","THEAD","TIME","TITLE","TR","TRACK","TT","U","UL","VAR","VIDEO","WBR","tags","VOID_TAGS_","area","br","col","command","embed","hr","img","keygen","link","meta","param","track","wbr","isVoidTag","trustedtypes","PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY","TypedString","Const","stringConstValueWithSecurityContract__googStringSecurityPrivate_","GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_","STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_","TYPE_MARKER_","implementsGoogStringTypedString","getTypedStringValue","unwrap","EMPTY","SafeScript","privateDoNotAccessOrElseSafeScriptWrappedValue_","SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","fromConstant","createSafeScriptSecurityPrivateDoNotAccessOrElse","fromConstantAndArgs","stringify_","fromJson","unwrapTrustedScript","initSecurityPrivateDoNotAccessOrElse_","url","createObjectUrl","getUrlObject_","createObjectURL","revokeObjectUrl","revokeObjectURL","findUrlObject_","URL","webkitURL","browserSupportsObjectUrls","i18n","bidi","FORCE_RTL","IS_RTL","Format","LRE","RLE","PDF","LRM","RLM","Dir","LTR","RTL","NEUTRAL","RIGHT","LEFT","I18N_RIGHT","I18N_LEFT","toDir","ltrChars_","rtlChars_","htmlSkipReg_","stripHtmlIfNeeded_","rtlCharReg_","ltrCharReg_","hasAnyRtl","hasRtlChar","hasAnyLtr","ltrRe_","rtlRe_","isRtlChar","isLtrChar","isNeutralChar","ltrDirCheckRe_","rtlDirCheckRe_","startsWithRtl","isRtlText","startsWithLtr","isLtrText","isRequiredLtrRe_","isNeutralText","ltrExitDirCheckRe_","rtlExitDirCheckRe_","endsWithLtr","isLtrExitText","endsWithRtl","isRtlExitText","rtlLocalesRe_","isRtlLanguage","bracketGuardTextRe_","guardBracketInText","enforceRtlInHtml","enforceRtlInText","enforceLtrInHtml","enforceLtrInText","dimensionsRe_","leftRe_","rightRe_","tempRe_","mirrorCSS","doubleQuoteSubstituteRe_","singleQuoteSubstituteRe_","normalizeHebrewQuote","wordSeparatorRe_","hasNumeralsRe_","rtlDetectionThreshold_","estimateDirection","detectRtlDirectionality","setElementDirAndAlign","style","textAlign","setElementDirByTextDirectionality","DirectionalString","TrustedResourceUrl","privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_","trustedURL_","TRUSTED_RESOURCE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","implementsGoogI18nBidiDirectionalString","getDirection","cloneWithParams","URL_PARAM_PARSER_","createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse","stringifyParams_","unwrapTrustedScriptURL","unwrapTrustedURL","BASE_URL_","FORMAT_MARKER_","formatWithParams","fromConstants","internal","startsWith","endsWith","caseInsensitiveStartsWith","caseInsensitiveCompare","caseInsensitiveEndsWith","caseInsensitiveEquals","isEmptyOrWhitespace","newLineToBr","htmlEscape","AMP_RE_","LT_RE_","GT_RE_","QUOT_RE_","SINGLE_QUOTE_RE_","NULL_RE_","ALL_RE_","whitespaceEscape","caseInsensitiveContains","compareVersions","compareElements_","SafeUrl","privateDoNotAccessOrElseSafeUrlWrappedValue_","SAFE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","INNOCUOUS_STRING","createSafeUrlSecurityPrivateDoNotAccessOrElse","SAFE_MIME_TYPE_PATTERN_","isSafeMimeType","fromBlob","DATA_URL_PATTERN_","fromDataUrl","fromTelUrl","SIP_URL_PATTERN_","fromSipUrl","fromFacebookMessengerUrl","fromWhatsAppUrl","fromSmsUrl","isSmsUrlBodyValid_","fromSshUrl","sanitizeChromeExtensionUrl","sanitizeExtensionUrl_","sanitizeFirefoxExtensionUrl","sanitizeEdgeExtensionUrl","fromTrustedResourceUrl","SAFE_URL_PATTERN_","SAFE_URL_PATTERN","sanitizeAssertUnchanged","ABOUT_BLANK","SafeStyle","privateDoNotAccessOrElseSafeStyleWrappedValue_","SAFE_STYLE_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","createSafeStyleSecurityPrivateDoNotAccessOrElse","sanitizePropertyValue_","sanitizePropertyValueString_","FUNCTIONS_RE_","URL_RE_","VALUE_RE_","COMMENT_RE_","hasBalancedQuotes_","hasBalancedSquareBrackets_","VALUE_ALLOWED_CHARS_","sanitizeUrl_","SafeStyleSheet","privateDoNotAccessOrElseSafeStyleSheetWrappedValue_","SAFE_STYLE_SHEET_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","createRule","hasBalancedBrackets_","createSafeStyleSheetSecurityPrivateDoNotAccessOrElse","labs","util","getNativeUserAgentString_","getNavigator_","userAgent_","setUserAgent","getUserAgent","matchUserAgent","matchUserAgentIgnoreCase","extractVersionTuples","browser","matchOpera_","matchIE_","matchEdgeHtml_","matchEdgeChromium_","matchOperaChromium_","matchFirefox_","matchSafari_","matchChrome_","matchCoast_","isSilk","matchIosWebview_","matchAndroidBrowser_","isChrome","isFirefox","isOpera","isIE","isEdge","isEdgeChromium","isOperaChromium","isSafari","isCoast","isIosWebview","isAndroidBrowser","getVersion","getIEVersion_","isVersionOrHigher","SafeHtml","privateDoNotAccessOrElseSafeHtmlWrappedValue_","SAFE_HTML_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_","dir_","unwrapTrustedHTML","createSafeHtmlSecurityPrivateDoNotAccessOrElse","htmlEscapePreservingNewlines","htmlEscapePreservingNewlinesAndSpaces","VALID_NAMES_IN_TAG_","URL_ATTRIBUTES_","action","cite","formaction","href","manifest","poster","NOT_ALLOWED_TAG_NAMES_","verifyTagName","createSafeHtmlTagSecurityPrivateDoNotAccessOrElse","createIframe","srcdoc","combineAttributes","sandbox","createSandboxIframe","canUseSandboxIframe","HTMLIFrameElement","createScriptSrc","createStyle","createMetaRefresh","getAttrNameAndValue_","getStyleValue_","createWithDir","concatWithDir","stringifyAttributes","DOCTYPE_HTML","uncheckedconversions","safeHtmlFromStringKnownToSatisfyTypeContract","safeScriptFromStringKnownToSatisfyTypeContract","safeStyleFromStringKnownToSatisfyTypeContract","safeStyleSheetFromStringKnownToSatisfyTypeContract","safeUrlFromStringKnownToSatisfyTypeContract","trustedResourceUrlFromStringKnownToSatisfyTypeContract","safe","InsertAdjacentHtmlPosition","AFTERBEGIN","AFTEREND","BEFOREBEGIN","BEFOREEND","insertAdjacentHtml","insertAdjacentHTML","SET_INNER_HTML_DISALLOWED_TAGS_","isInnerHtmlCleanupRecursive_","firstChild","innerHTML","parentElement","unsafeSetInnerHtmlDoNotUseOrElse","lastChild","setInnerHtml","tagName","setOuterHtml","outerHTML","setFormElementAction","setButtonFormAction","formAction","setInputFormAction","setStyle","cssText","documentWrite","setAnchorHref","setImageSrc","setAudioSrc","setVideoSrc","setEmbedSrc","setFrameSrc","setIframeSrc","setIframeSrcdoc","setLinkHrefAndRel","rel","setObjectData","setScriptSrc","setScriptContent","text","setLocationHref","assignLocation","replaceLocation","openInWindow","parseFromStringHtml","parseFromString","createImageFromBlob","Image","DETECT_DOUBLE_ESCAPING","FORCE_NON_DOM_HTML_UNESCAPING","Unicode","NBSP","subs","collapseWhitespace","isEmptyString","isEmptyOrWhitespaceSafe","makeSafe","isEmptySafe","isBreakingWhitespace","isAlpha","isNumeric","isAlphaNumeric","isSpace","isUnicodeChar","stripNewlines","canonicalizeNewlines","normalizeWhitespace","normalizeSpaces","collapseBreakingSpaces","trimLeft","numberAwareCompare_","intAwareCompare","floatAwareCompare","numerateCompare","urlEncode","urlDecode","E_RE_","unescapeEntities","unescapeEntitiesUsingDom_","unescapePureXmlEntities_","unescapeEntitiesWithDocument","HTML_ENTITY_PATTERN_","nodeValue","preserveSpaces","stripQuotes","truncate","truncateMiddle","specialEscapeChars_","jsEscapeCache_","escapeChar","escapeString","countOf","removeAll","regExpEscape","replaceAll","padNumber","buildString","getRandomString","hashCode","uniqueStringCounter_","createUniqueString","toNumber","isLowerCamelCase","isUpperCamelCase","toCamelCase","toSelectorCase","toTitleCase","capitalize","splitLimit","lastComponent","editDistance","engine","isPresto","isTrident","isWebKit","isGecko","getEngineTuple_","getVersionForKey_","isAndroid","isIpod","isIphone","isIpad","isIos","isMacintosh","isLinux","isWindows","isChromeOS","isChromecast","isKaiOS","isGo2Phone","reflect","objectProperty","sinkValue","canAccessProperty","cache","ASSUME_IE","ASSUME_EDGE","ASSUME_GECKO","ASSUME_WEBKIT","ASSUME_MOBILE_WEBKIT","ASSUME_OPERA","ASSUME_ANY_VERSION","BROWSER_KNOWN_","getUserAgentString","getNavigatorTyped","getNavigator","OPERA","IE","EDGE","EDGE_OR_IE","GECKO","WEBKIT","isMobile_","MOBILE","SAFARI","determinePlatform_","PLATFORM","ASSUME_MAC","ASSUME_WINDOWS","ASSUME_LINUX","ASSUME_X11","ASSUME_ANDROID","ASSUME_IPHONE","ASSUME_IPAD","ASSUME_IPOD","ASSUME_KAIOS","ASSUME_GO2PHONE","PLATFORM_KNOWN_","MAC","WINDOWS","isLegacyLinux_","LINUX","isX11_","appVersion","X11","ANDROID","IPHONE","IPAD","IPOD","IOS","KAIOS","GO2PHONE","determineVersion_","getVersionRegexResult_","getDocumentMode_","documentMode","VERSION","isVersionOrHigherCache_","isVersion","isDocumentModeOrHigher","DOCUMENT_MODE","isDocumentMode","product","ASSUME_FIREFOX","ASSUME_CHROME","ASSUME_SAFARI","PRODUCT_KNOWN_","FIREFOX","isIphoneOrIpod_","CHROME","isSafariDesktop_","DEFAULT_ALPHABET_COMMON_","ENCODED_VALS","ENCODED_VALS_WEBSAFE","Alphabet","DEFAULT","NO_PADDING","WEBSAFE","WEBSAFE_DOT_PADDING","WEBSAFE_NO_PADDING","paddingChars_","isPadding_","byteToCharMaps_","charToByteMap_","ASSUME_NATIVE_SUPPORT_","HAS_NATIVE_ENCODE_","btoa","HAS_NATIVE_DECODE_","encodeByteArray","init_","encodeString","decodeString","decodeStringInternal_","decodeStringToByteArray","decodeStringToUint8Array","subarray","utils","split64Low","split64High","splitUint64","splitInt64","splitZigzag64","splitFloat32","log","LN2","splitFloat64","splitHash64","joinUint64","joinInt64","toZigzag64","joinZigzag64","fromZigzag64","joinFloat32","Infinity","joinFloat64","joinHash64","DIGITS","ZERO_CHAR_CODE_","A_CHAR_CODE_","joinUnsignedDecimalString","joinSignedDecimalString","hash64ToDecimalString","hash64ArrayToDecimalStrings","decimalStringToHash64","splitDecimalString","toHexDigit_","fromHexCharCode_","hash64ToHexString","hexStringToHash64","hash64ToNumber","numberToHash64","countVarints","countVarintFields","countFixedFields_","countFixed32Fields","countFixed64Fields","countDelimitedFields","debugBytesToTextFormat","byteSourceToUint8Array","debugScalarToTextFormat","BinaryDecoder","bytes_","cursor_","end_","start_","error_","setBlock","instanceCache_","free","getBuffer","getEnd","setEnd","getCursor","setCursor","advance","atEnd","pastEnd","readSplitVarint64","readSplitZigzagVarint64","readSplitFixed64","skipVarint","unskipVarint","readUnsignedVarint32","readSignedVarint32","readUnsignedVarint32String","readSignedVarint32String","readZigzagVarint32","readUnsignedVarint64","readUnsignedVarint64String","readSignedVarint64","readSignedVarint64String","readZigzagVarint64","readZigzagVarintHash64","readZigzagVarint64String","readUint8","readUint16","readUint32","readUint64","readUint64String","readInt8","readInt16","readInt32","readInt64","readInt64String","readFloat","readDouble","readBool","readEnum","readString","readStringWithLength","readBytes","readVarintHash64","readFixedHash64","BinaryReader","decoder_","fieldCursor_","nextField_","nextWireType_","readCallbacks_","getFieldCursor","getFieldNumber","getWireType","isDelimited","isEndGroup","nextField","unskipHeader","skipMatchingFields","skipField","skipVarintField","skipDelimitedField","skipFixed32Field","skipFixed64Field","skipGroup","registerReadCallback","runReadCallback","readAny","readFixed64","readFixed32","readSfixed32","readSfixed64","readSint32","readSint64","readMessage","readGroup","getFieldDecoder","readInt32String","readUint32String","readSint64String","readFixed64String","readSfixed32String","readSfixed64String","readSintHash64","readPackedField_","readPackedInt32","readPackedInt32String","readPackedInt64","readPackedInt64String","readPackedUint32","readPackedUint32String","readPackedUint64","readPackedUint64String","readPackedSint32","readPackedSint64","readPackedSint64String","readPackedFixed32","readPackedFixed64","readPackedFixed64String","readPackedSfixed32","readPackedSfixed64","readPackedSfixed64String","readPackedFloat","readPackedDouble","readPackedBool","readPackedEnum","readPackedVarintHash64","readPackedFixedHash64","BinaryEncoder","buffer_","writeSplitVarint64","writeSplitFixed64","writeUint32","writeUnsignedVarint32","writeSignedVarint32","writeUnsignedVarint64","writeSignedVarint64","writeZigzagVarint32","writeZigzagVarint64","writeZigzagVarint64String","writeZigzagVarintHash64","writeUint8","writeUint16","writeUint64","writeInt8","writeInt16","writeInt32","writeInt64","writeInt64String","writeFloat","writeDouble","writeBool","writeEnum","writeBytes","writeVarintHash64","writeFixedHash64","writeString","arith","UInt64","lo","hi","cmp","rightShift","leftShift","msb","lsb","sub","mul32x32","mul","div","fromString","Int64","BinaryWriter","blocks_","totalLength_","encoder_","bookmarks_","appendUint8Array_","beginDelimited_","writeFieldHeader_","endDelimited_","writeSerializedMessage","maybeWriteSerializedMessage","getResultBuffer","getResultBase64String","beginSubMessage","endSubMessage","writeAny","writeFixed64","writeFixed32","writeSfixed32","writeSfixed64","writeSint32","writeSint64","writeUnsignedVarint32_","writeSignedVarint32_","writeUnsignedVarint64_","writeSignedVarint64_","writeZigzagVarint32_","writeZigzagVarint64_","writeZigzagVarint64String_","writeZigzagVarintHash64_","writeInt32String","writeUint32String","writeUint64String","writeSintHash64","writeSint64String","writeFixed64String","writeSfixed64String","writeMessage","writeMessageSet","writeGroup","writeSplitZigzagVarint64","writeRepeatedInt32","writeRepeatedInt32String","writeRepeatedInt64","writeRepeatedSplitFixed64","writeRepeatedSplitVarint64","writeRepeatedSplitZigzagVarint64","writeRepeatedInt64String","writeRepeatedUint32","writeRepeatedUint32String","writeRepeatedUint64","writeRepeatedUint64String","writeRepeatedSint32","writeRepeatedSint64","writeRepeatedSint64String","writeRepeatedSintHash64","writeRepeatedFixed32","writeRepeatedFixed64","writeRepeatedFixed64String","writeRepeatedSfixed32","writeRepeatedSfixed64","writeRepeatedSfixed64String","writeRepeatedFloat","writeRepeatedDouble","writeRepeatedBool","writeRepeatedEnum","writeRepeatedString","writeRepeatedBytes","writeRepeatedMessage","writeRepeatedGroup","writeRepeatedFixedHash64","writeRepeatedVarintHash64","writePackedInt32","writePackedInt32String","writePackedInt64","writePackedSplitFixed64","writePackedSplitVarint64","writePackedSplitZigzagVarint64","writePackedInt64String","writePackedUint32","writePackedUint32String","writePackedUint64","writePackedUint64String","writePackedSint32","writePackedSint64","writePackedSint64String","writePackedSintHash64","writePackedFixed32","writePackedFixed64","writePackedFixed64String","writePackedSfixed32","writePackedSfixed64","writePackedSfixed64String","writePackedFloat","writePackedDouble","writePackedBool","writePackedEnum","writePackedFixedHash64","writePackedVarintHash64","arr_","valueCtor_","map_","arrClean","loadFromArray_","Entry_","valueWrapper","stringKeys_","wrapEntry_","fromObject","ArrayIteratorIterable_","idx_","getLength","getEntryList","serializeBinary","deserializeBinary","ExtensionFieldInfo","fieldIndex","fieldName","ctor","toObjectFn","isRepeated","ExtensionFieldBinaryInfo","fieldInfo","binaryReaderFn","binaryWriterFn","binaryMessageSerializeFn","binaryMessageDeserializeFn","isPacked","isMessageType","Message","GENERATE_TO_OBJECT","GENERATE_FROM_OBJECT","GENERATE_TO_STRING","ASSUME_LOCAL_ARRAYS","SERIALIZE_EMPTY_TRAILING_FIELDS","SUPPORTS_UINT8ARRAY_","getJsPbMessageId","messageId_","getIndex_","arrayIndexOffset_","hiddenES6Property_","getFieldNumber_","initialize","wrappers_","initPivotAndExtensionObject_","convertedPrimitiveFields_","repeatedFields","pivot_","EMPTY_LIST_SENTINEL_","maybeInitEmptyExtensionObject_","extensionObject_","computeOneofCase","isArray_","isExtensionObject_","MAX_VALUE","toObjectList","toObjectExtension","serializeBinaryExtensions","readBinaryExtension","getField","getRepeatedField","getOptionalFloatingPointField","getBooleanField","getRepeatedFloatingPointField","getRepeatedBooleanField","bytesAsB64","bytesAsU8","bytesListAsB64","assertConsistentTypes_","bytesListAsU8","getFieldWithDefault","getBooleanFieldWithDefault","getFloatingPointFieldWithDefault","getFieldProto3","getMapField","setField","setProto3IntField","setFieldIgnoringDefault_","setProto3FloatField","setProto3BooleanField","setProto3StringField","setProto3BytesField","setProto3EnumField","setProto3StringIntField","addToRepeatedField","setOneofField","getWrapperField","getRepeatedWrapperField","wrapRepeatedField_","setWrapperField","setOneofWrapperField","setRepeatedWrapperField","addToRepeatedWrapperField","toMap","syncMapFields_","getExtension","setExtension","compareFields","compareExtensions","cloneMessage","clone_","copyInto","registerMessageType","messageId","messageSetExtensions","messageSetExtensionsBinary","Export","$BigInt","hasNativeBigInts","origSymbol","hasSymbolSham","hasNativeSymbols","sym","symObj","symVal","syms","descriptor","hasToStringTagShams","toStringTag","hasToStringTag","$toString","isStandardArguments","isLegacyArguments","supportsStandardArguments","hasBigInts","bigIntValueOf","tryBigInt","tryBigIntObject","isBigInt","$boolToStr","tryBooleanObject","booleanBrandCheck","boolClass","isSlowBuffer","_isBuffer","readFloatLE","tryDateObject","tryDateGetDayCall","dateClass","isDateObject","exported","numToStr","tryNumberObject","numClass","isNumberObject","$exec","isRegexMarker","badStringifier","throwRegexMarker","toPrimitive","gOPD","regexClass","hasLastIndexDataProperty","strValue","tryStringObject","strClass","symToStr","symStringRegex","isSymbolObject","isRealSymbolObject","typedArrays","$slice","toStrTags","typedArray","proto","superProto","tryTypedArrays","tryAllTypedArrays","anyTrue","getter","isTypedArray","tag","$WeakMap","$WeakSet","isWeakMap","isWeakSet","getCountryCode","localeString","components","countryCode","getLocales","locales","AD","AE","AF","AG","AI","AL","AM","AN","AO","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HT","HU","ID","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","ST","SV","SX","SY","SZ","TC","TF","TG","TJ","TK","TL","TM","TN","TO","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","YT","ZA","ZM","ZW","Yallist","MAX","LENGTH","LENGTH_CALCULATOR","ALLOW_STALE","MAX_AGE","DISPOSE","NO_DISPOSE_ON_SET","LRU_LIST","CACHE","UPDATE_AGE_ON_GET","naiveLength","LRUCache","lc","stale","maxAge","dispose","noDisposeOnSet","updateAgeOnGet","mL","allowStale","mA","lengthCalculator","lC","hit","itemCount","rforEach","thisp","walker","tail","forEachStep","dump","isStale","dumpLru","Entry","expiresAt","prune","doUse","unshiftNode","removeNode","Node","pushNode","res","forEachReverse","getReverse","mapReverse","initial","acc","reduceReverse","toArrayReverse","sliceReverse","deleteCount","inserted","md5","FF","_ff","_gg","HH","_hh","II","_ii","aa","bb","cc","dd","_blocksize","_digestsize","digestbytes","asBytes","asString","simpleIsEqual","resultFn","lastThis","lastArgs","lastResult","calledOnce","isNewArgEqualToLast","newArg","_len","newArgs","_key","_global","MurmurHashV2","seed","MurmurHashV3","h1","h1b","c1","c1b","c2","c2b","k1","murmur","v2","v3","propIsEnumerable","shouldUseNative","test1","test2","order2","test3","letter","symbols","hasMap","mapSizeDescriptor","mapSize","mapForEach","hasSet","setSizeDescriptor","setSize","setForEach","hasWeakMap","weakMapHas","hasWeakSet","weakSetHas","hasWeakRef","weakRefDeref","deref","booleanValueOf","objectToString","functionToString","$match","$toUpperCase","$toLowerCase","$test","$join","$arrSlice","$floor","gOPS","symToString","hasShammedSymbols","isEnumerable","addNumericSeparator","sepRegex","intStr","dec","inspectCustom","custom","inspectSymbol","inspect_","depth","seen","quoteStyle","maxStringLength","customInspect","indent","numericSeparator","inspectString","bigIntStr","maxDepth","getIndent","inspect","noIndent","newOpts","nameOf","arrObjKeys","symString","markBoxed","isElement","nodeName","attrs","attributes","wrapQuotes","childNodes","xs","singleLineValues","indentedJoin","isError","cause","mapParts","collectionOf","setParts","weakCollectionOf","isWeakRef","ys","isPlainObject","protoTag","stringTag","constructorTag","defaultStyle","quoteChar","HTMLElement","remaining","trailer","lowbyte","joinedEntries","baseIndent","lineJoiner","isArr","symMap","numberIsNaN","getPolyfill","shim","shimObjectIs","testObjectIs","keysShim","isArgs","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","o","excludedKeys","$applicationCache","$console","$external","$frame","$frameElement","$frames","$innerHeight","$innerWidth","$onmozfullscreenchange","$onmozfullscreenerror","$outerHeight","$outerWidth","$pageXOffset","$pageYOffset","$parent","$scrollLeft","$scrollTop","$scrollX","$scrollY","$self","$webkitIndexedDB","$webkitStorageInfo","$window","hasAutomationEqualityBug","equalsConstructorPrototypeIfNotBuggy","theKeys","skipProto","skipConstructor","origKeys","originalKeys","shimObjectKeys","keysWorksWithArguments","canBeObject","$push","$propIsEnumerable","originalGetSymbols","source1","objTarget","getSymbols","lacksProperEnumerationOrder","letters","assignHasPendingExceptions","preventExtensions","thrower","shimAssign","$Object","hasIndices","ignoreCase","multiline","dotAll","unicode","sticky","flagsBound","TypeErr","shimFlags","$weakMapGet","$weakMapSet","$weakMapHas","$mapSet","listGetNode","listGet","objects","listSet","listHas","$wm","$m","$o","isExtendedLengthPath","hasNonAscii","v1","v4","uuid","byteToHex","bytesToUuid","bth","crypto","nodeRNG","rng","_nodeId","_clockseq","_lastMSecs","_lastNSecs","clockseq","seedBytes","msecs","nsecs","dt","tl","tmh","rnds","ii","foundName","Query","filterExpressions","selectExpressions","groupExpressions","orderExpressions","calculation","rawMode","withDead","validateRefs","expr","unfilter","exprs","exprSet","select","query","calculate","groupBy","orderBy","withoutValidatedRefs","tableOptions","getPrimaryOrderBy","defaultOrderBy","orderExprs","order","firstOrder","table","injected","runImport","budgetName","loadBudget","budgetId","id","batchBudgetUpdates","runQuery","getBudgetMonths","getBudgetMonth","setBudgetAmount","categoryId","setBudgetCarryover","flag","addTransactions","accountId","transactions","importTransactions","getTransactions","filterTransactions","updateTransaction","fields","deleteTransaction","getAccounts","createAccount","account","initialBalance","updateAccount","closeAccount","transferAccountId","transferCategoryId","reopenAccount","deleteAccount","getCategoryGroups","grouped","createCategoryGroup","group","updateCategoryGroup","deleteCategoryGroup","getCategories","createCategory","category","updateCategory","deleteCategory","getPayees","createPayee","payee","updatePayee","deletePayee","getPayeeRules","payeeId","createPayeeRule","payee_id","updatePayeeRule","deletePayeeRule","normalizePathSep","AdmZip","amountToInteger","mapAccountType","keyName","_parse","monthFromDate","getCurrentMonth","importAccounts","entityIdMap","accounts","isTombstone","accountType","accountName","offbudget","onBudget","closed","entityId","importCategories","masterCategories","masterCategory","subCategories","cat","is_income","group_id","masterCategoryId","importPayees","payees","autoFillCategoryId","transfer_acct","targetAccountId","categories","incomeCategoryId","getCategory","isOffBudget","acctId","acct","transaction","sortOrder","transactionsGrouped","toImport","transferId","transferTransactionId","newTransaction","notes","memo","transfer_id","subtransactions","subTransactions","fillInBudgets","categoryBudgets","budgets","budgeted","importBudgets","monthlyBudgets","earliestMonth","carryoverFlags","budget","filled","monthlySubCategoryBudgets","catBudget","catId","overspendingHandling","estimateRecentness","findLatestDevice","zipped","devices","contents","hasFullKnowledge","deviceGUID","shortName","shortDeviceId","recentness","knowledge","doImport","getBudgetName","unixFilepath","getFile","paths","importBuffer","dirMatch","metaStr","budgetPath","relativeDataFolderName","deviceFiles","yfullPath","integerToAmount","amountFromYnab","deleted","on_budget","incomeCatId","ynabIncomeCategories","checkSpecialCat","category_group_id","category_groups","groupId","cats","newCategory","startingBalanceCatId","startingPayeeYNAB","subtransactionsGrouped","subtrans","category_id","account_id","cleared","imported_id","import_id","transfer_transaction_id","transfer_account_id","internalCatIdYnab","creditcardCatIdYnab","importYNAB5","runMigration","db","getValue","cachedValue","execQuery","monthBudget","dbmonth","sheetName","carryover","buffers","parseNote","note","parsed","FileSystem","_filename","FLG_LNG","_permissions","PATH_SEPARATOR","recoursive","writeInt32LE","inputType","nameA","nameB","handler","handlers","evt","pickRandom","integer","findMin","getStartingBalanceCat","extractCommonThings","groups","incomePayee","expensePayees","expenseGroup","incomeGroup","bill","expenseCategories","billCategories","billPayees","fillPrimaryChecking","numTransactions","monthUtils","pick","earliestDate","starting_balance_flag","fillChecking","added","fastMode","fillInvestment","fillSavings","fillMortgage","fillOther","createBudget","primaryAccount","earliestPrimaryDate","setBudget","budgetActions","setBudgetIfSpent","spent","sheet","runMutator","batchMessages","prevSaved","toBudget","available","createTestBudget","setSyncingMode","offBudget","categoryGroups","isIncome","allGroups","runHandler","aqlQuery","$sum","primaryBalance","$gt","lastDeposit","prefs","isCached","captureException","exc","SentryClient","captureBreadcrumb","breadcrumb","addBreadcrumb","lootFs","getStorePath","getDataDir","store","persisted","init","persist","_saveStore","writeFile","getItem","setItem","removeItem","multiGet","multiSet","keyValues","multiRemove","fetch","fetchBinary","fileStream","createWriteStream","body","documentDir","rootPath","__dirname","__filename","env","ACTUAL_DATA_DIR","_setDocumentDir","getDocumentDir","getBudgetDir","bundledDatabasePath","migrationsPath","demoBudgetPath","listDir","readdir","access","constants","F_OK","mkdir","copyFile","frompath","topath","readStream","createReadStream","writeStream","removeFile","unlink","removeDir","dirpath","rmdir","removeDirRecursively","fullpath","getModifiedTime","Database","verifyParamTypes","sql","params","fetchAll","stmt","changes","insertId","lastInsertRowid","transactionDepth","asyncTransaction","openDatabase","pathOrBuffer","closeDatabase","exportDatabase","v4Sync","exportToCSV","accountNamesById","reduced","categoryNamesById","subCategory","payeeNamesById","transactionsForExport","Account","Payee","Notes","Category","Amount","csvStringify","exportQueryToCSV","Id","ParentId","IsParent","splits","parentsPayees","trans","noParents","handoffPublicToken","institution","publicToken","asyncStorage","userId","institution_id","post","getServer","PLAID_SERVER","item_id","public_token","bank_id","addAccounts","bankId","accountIds","offbudgetIds","userKey","bankSync","official_name","fromPlaidAccountType","balance_current","balances","current","mask","bank","parseFile","errors","ext","parseQIF","parseCSV","parseOFX","csv2json","qif2json","looselyParseAmount","payee_name","imported_payee","getOFXTransactions","initModule","fi_id","dayFromDate","description","row","getStartingBalancePayee","qif","line","division","address","lArray","subcategory","clearedStatus","sArray","dateFormat","safeNumber","safeParseInt","RuleError","parseRecurDate","recurConfigToRSchedule","RSchedule","parseDateString","dateFns","parseBetweenAmount","between","num1","num2","CONDITION_TYPES","ops","nullable","op","Condition","fieldTypes","typeName","rawValue","unparsedValue","fieldValue","outflow","inflow","extractValue","fieldDate","fullDate","high","low","yearFromDate","threshold","getApproxNumberThreshold","sortNumbers","ACTION_OPS","Action","stage","conditions","actions","evalConditions","condition","execActions","getId","RuleIndexer","getIndex","getIndexForValue","getKey","getIndexes","cond","indexes","getApplicableRules","indexedRules","fastSetMerge","OP_SCORES","oneOf","isapprox","isbetween","gt","gte","lt","lte","computeScore","initialScore","score","_rankRules","scores","r1","r2","score1","score2","id1","id2","rankRules","pre","normal","migrateIds","mappings","ci","ai","iterateIds","counts","ruleiter","vi","levenshtein","BankSyncError","makeSplitTransaction","recalculateSplit","is_parent","idx","makeChildTransaction","sort_order","parent","getAccountBalance","updateAccountBalance","balance","fromPlaid","transaction_id","downloadTransactions","since","allTransactions","accountBalance","pageSize","numDownloaded","start_date","end_date","error_code","error_type","total_transactions","resolvePayee","payeeName","payeesToCreate","newPayee","normalizeTransactions","rawPayeeName","normalized","trimmed","title","createNewPayees","addsAndUpdates","usedPayeeIds","reconcileTransactions","hasMatched","updated","transactionsStep1","fuzzyDataset","transactionsStep2","transactionsStep3","existing","updates","hasFieldsChanged","finalTransaction","batchUpdateTransactions","runTransfers","newTransactions","syncAccount","latestTransaction","startingTransaction","acctRow","startingDay","currentBalance","previousBalance","oldestDate","initialId","lowerCase","specials","character","convertToRegExp","parseMatch","lead","forced","lower","parsedMatch","fullLower","customSpecials","special","replaceRegExp","conjunctions","articles","prepositions","intended","allRules","unlistenSync","firstcharIndexer","payeeIndexer","resetState","invert","fromEntries","internalFields","schemaConfig","views","publicFields","fromInternalField","toInternalField","ruleModel","requiredFields","toJS","parseArray","fromJS","makeRule","FIELD_TYPES","getMappings","loadRules","addSyncListener","onApplySync","getRules","insertRule","updateRule","deleteRule","oldValues","newValues","newValue","oldRule","tombstone","tables","finalTrans","allChanges","conditionsToAQL","recurDateBounds","filters","$and","$lt","$transform","$eq","$or","$gte","$lte","applyActions","transactionIds","parsedActions","getRulesForPayee","getIsSetterRules","condField","actionField","condValue","actionValue","getOneOfSetterRules","updatePayeeRenameRule","fromNames","renameRule","getProbableCategory","winner","updateCategoryRules","payeeIds","transIds","register","toDateRepr","partitionByField","categoriesToSet","latestTrans","ruleSetters","newRule","migrateOldRules","allPayees","payeesById","rulesByPayeeId","payeeRules","r","payeeRule","catRules","ids","prevMode","connection","idsWithChildren","whereIds","whereIn","rows","getTransactionsByIds","incrFetch","where","learnCategories","detectOrphanPayees","addedIds","updatedIds","deletedIds","oldPayees","descUpdatedIds","allAdded","allUpdated","allDeleted","resultAdded","resultUpdated","transfer","newPayeeIds","allOrphaned","orphanedIds","updatedPayeeIds","getPayee","getTransferredAccount","clearCategory","transferAcct","fromOffBudget","toOffBudget","addTransfer","transferredAccount","fromPayee","parent_id","categoryCleared","removeTransfer","transferTrans","is_child","updateTransfer","onInsert","onDelete","onUpdate","transactionModel","models","toExternal","fromExternal","imported_description","financial_id","transferred_id","accountModel","categoryModel","cat_group","categoryGroupModel","payeeModel","payeeRuleModel","resolveName","IMPORT_MODE","APIError","withMutation","latestTimestamp","getClock","getNumClients","dataset","undoDisabled","validateMonth","validateExpenseCategory","batchPromise","currentId","avoidUpload","markCacheDirty","cloudStorage","catch","getCellValue","incomeAvailable","lastMonthOverspent","forNextMonth","totalBudgeted","fromLastMonth","totalIncome","totalSpent","totalBalance","received","startMonth","ungroupTransactions","serverHandlers","App","services","events","mitt","unlistenServices","service","combine","apps","app","listeners","listener","startServices","stopServices","unlisten","createApp","_uid","resetUid","uid","tableName","CompileError","nativeDateToInt","pad","dateToInt","addTombstone","schema","tableId","whereStr","hasTombstone","popPath","isKeyword","quoteAlias","typed","literal","getFieldDescription","fieldDesc","makePath","initialTable","ref","joinTable","parentParts","parentPath","parentDesc","joinField","resolvePath","fullName","implicitTableName","pathInfo","transformField","implicitTableId","refPath","refPathInfo","noMapping","fieldStr","parseMonth","badDateFormat","inferParam","existingType","paramType","casts","float","castInput","expr2","castedExpr","valArray","types","validateArgLength","saveStack","compileStack","prettyValue","expanded","getCompileError","stackStr","fieldRef","opData","rootMethod","methodArgs","compileLiteral","compileExpr","implicitField","paramName","namedParameters","compileFunction","assertType","acceptedTypes","assertArgLength","argExprs","arg1","orders","compileOrderBy","arg2","arg3","conds","compileConditions","compileOp","opExpr","rhs","lhs","left","right","condsObj","compiled","compileAnd","compileOr","compileWhere","compileJoins","tableRef","internalTableFilters","joins","dependencies","expandStar","compileSelect","isAggregate","outputTypes","compileGroupBy","$dir","AGGREGATE_FUNCTIONS","isAggregateFunction","ex","isAggregateQuery","queryState","compileQuery","tableViews","tableFilters","customizeQuery","isJoin","view","dependences","sqlPieces","defaultConstructQuery","generateSQLWithState","generateSQL","applyTypes","convertOutputType","runCompiledQuery","pieces","executors","paramArray","convertInputType","isRequired","required","fromDateRepr","conform","skipNull","tableSchema","convertForInsert","rawObj","default","convertForUpdate","convertFromSelect","toGroup","parents","mapper","childs","execTransactions","splitType","execTransactionsBasic","execTransactionsGrouped","_isUnhappy","isHappyPathQuery","whereDead","allSql","matched","rowSql","finalSql","allRows","pid","_parent_id","_unmatched","next_date","completed","posts_transaction","_payee","_account","_amount","_amountOp","_conditions","_actions","$condition","$nocase","v_payees","v_categories","v_schedules","v_transactions_internal","v_transactions_internal_alive","v_transactions","_runCompiledQuery","schemaExecutors","_runQuery","selectFields","as","needsAs","makeViews","viewStrs","fieldMappings","viewName","publicMaker","overrides","internalMaker","LATEST_BACKUP_FILENAME","serviceInterval","getBackups","budgetDir","backupDir","backups","b1","b2","getLatestBackup","isLatest","getAvailableBackups","latestBackup","backup","updateBackups","byDay","removed","dayBackups","isToday","currentBackups","makeBackup","backupId","backupPath","sqlite","toRemove","loadBackup","stopBackupService","startBackupService","lastSyncedTimestamp","lastUploaded","clearInterval","setInterval","getSheetValue","cell","calcBufferedAmount","buffered","getBudgetTable","budgetType","isReflectBudget","isZeroBudget","dbMonth","getBudgetData","getAllMonths","createdMonths","latest","getBudget","setBuffer","setCarryover","copyPreviousMonth","prevMonth","budgetData","prevBudget","setZero","set3MonthAvg","prevMonth1","prevMonth2","prevMonth3","spent1","spent2","spent3","avg","setAllFuture","holdForNextMonth","bufferedAmount","holdForFutureMonths","resetHold","coverOverspending","toBudgeted","leftover","leftoverFrom","amountCovered","fromBudgeted","transferAvailable","transferCategory","setCategoryCarryover","mutator","undoable","mergeUpdates","merged","getBudgetType","getBudgetRange","prevSheetName","createDynamic","initialValue","rollover","report","sumAmounts","handleAccountChange","oldValue","recompute","handleTransactionChange","changedFields","handleCategoryMappingChange","handleCategoryChange","addDeps","addDependencies","removeDeps","removeDependencies","handleCategoryGroupChange","handleBudgetMonthChange","handleBudgetChange","triggerBudgetChanges","old","getChangedValues","doTransfer","categoryIds","totalValue","transferValue","setMeta","createAllBudgets","earliestTransaction","newMonths","setType","nodes","getNodes","cellName","deleteCell","startCacheBarrier","bounds","endCacheBarrier","createStatic","sumAmount","prevCarryover","prevLeftover","refresh","createSummary","income","getBlankSheet","blankMonth","createBlankCategory","createBlankMonth","prevLeftoverPos","flatten2","unflatten2","amounts","lastOverspent","blankSheet","clearSheet","UPLOAD_FREQUENCY_IN_DAYS","checkHTTPStatus","HTTPError","fetchJSON","checkKey","userToken","cloudFileId","encryptKeyId","SYNC_SERVER","fileId","reason","encryption","hasKey","resetSyncState","newKeyState","IS_BETA","PostError","keyId","keySalt","testContent","exportBuffer","rawDbContent","memDb","dbContent","resetClock","metaContent","fileData","dbEntry","metaEntry","FileDownloadError","encryptMeta","dbFile","metaFile","upload","FileUploadError","zipContent","uploadContent","uploadMeta","encrypted","isMissingKey","possiblyUpload","listRemoteFiles","download","arrayBuffer","ab","dbPath","getDatabasePath","setDatabase","reopenDatabase","db_","resetQueryCache","getDatabase","loadClock","clock","deserializeClock","setClock","Timestamp","makeClientId","makeClock","serializeClock","_queryCache","LRU","cached","prepared","firstSync","sendMessages","insertWithUUID","delete_","selectWithSchema","selectFirstWithSchema","insertWithSchema","updateWithSchema","getCategoriesGrouped","insertCategoryGroup","lastGroup","SORT_INCREMENT","moveCategoryGroup","targetId","shoveSortOrders","insertCategory","id_","lastCat","moveCategory","existingTransfers","mapping","insertPayee","deleteTransferPayee","mergePayees","groupById","getOrphanedPayees","getPayeeByName","insertPayeeRule","insertAccount","moveAccount","getTransaction","_addFragmentForAccount","addWhere","showClosed","showOffbudget","fragment","getTransactionsByDate","insertTransaction","allMappings","loadMappings","getMapping","midpoint","below","above","terms","makeQuery","pageCount","fetchedIds","ids2","ENCRYPTION_ALGORITHM","sha256String","createHash","digest","masterKey","masterKeyBuffer","iv","cipher","createCipheriv","final","authTag","getAuthTag","algorithm","decipher","createDecipheriv","setAuthTag","decrypted","createKey","secret","createKeyBuffer","importKey","numBytes","pbkdf2Sync","Key","createFromPassword","password","internals","createFromBase64","loadKey","keyInstance","unloadKey","unloadAllKeys","statusCode","responseBody","SyncError","TransactionError","isCodeError","YNAB4","YNAB5","unresolveName","SyncPb","DEMO_BUDGET_ID","TEST_BUDGET_ID","UNCONFIGURED_SERVER","onSheetChange","names","_getNode","undo","redo","withUndo","term","latestDate","notPaged","groupCategories","payeeCounts","mergeIds","orphaned","validateRule","runValidation","conditionErrors","ruleFieldTypes","actionErrors","someDeletionsFailed","nodeSheet","getNode","createQuery","accts","upgradingId","balance_available","balance_limit","stopPolling","cb","matchedTransactions","updatedAccounts","linkToken","link_token","maxMonths","tracking","trackUsage","autoUpdate","floatingSidebar","seenTutorial","encryptKey","stringToInteger","getDefaultDocumentDir","prefsToSet","resetSync","repairSync","makeTestMessage","seenSubscribe","BASE_SERVER","bootstrapped","SIGNUP_SERVER","offline","setServer","fullSync","prefsPath","findBudgets","recomputeAll","showUpdate","initialFullSync","currentPrefs","trackSizes","getFileSize","dbSize","cacheSize","testMode","testBudgetId","clearFullSyncTimeout","uniqueFileName","idFromFileName","sqliteDb","budgetVersion","updateVersion","logger","setNode","Platform","isWeb","isMobile","__TESTING__","syncMigrations","clearUndo","unseen","installAPI","injectAPI","schedulesApp","budgetApp","notesApp","toolsApp","ACTUAL_DOCUMENT_DIR","setupDocumentsDir","ensureExists","initApp","isDev","socketName","keysStr","lastBudget","$send","$query","$q","$db","$setSyncingMode","ACTUAL_APP_VERSION","dataDir","serverURL","ACTUAL_SERVER_URL","cwd","sendMessage","syncAndReceiveMessages","merkle","SyncProtoBuf","addEventListener","shutdown","trie","keyToTimestamp","fullkey","hash","millis","insertKey","build","timestamps","trie1","trie2","node1","node2","keyset","diffkey","next1","next2","MIGRATIONS_DIR","javascriptMigrations","m1632571489012","withMigrationsDir","oldDir","getMigrationsDir","getMigrationId","getUpMigration","getAppliedMigrations","getMigrationList","migrationsDir","m1","m2","getPending","appliedIds","applyJavaScript","dbInterface","applySql","applyMigration","checkDatabaseValidity","migrate","migration","validateAccountType","categoryGroup","validateType","isParent","isChild","runningMethods","currentContext","mutatingMethods","globalMutationsEnabled","_latestHandlerNames","isMutating","flushRunningMethods","wait","undoTag","promise","enableGlobalMutations","disableGlobalMutations","sequential","initialContext","finally","withMutatorContext","prevContext","getMutatorContext","counters","unrecord","increment","isDesktop","throwIfNot200","contentType","postBinary","loadPrefs","dummyTestPrefs","savePrefs","avoidSync","messages","unloadPrefs","getPrefs","getDefaultPrefs","readPrefs","arr1","arr2","updateConditions","newConditions","scheduleConds","extractScheduleConds","newScheduleConds","replacements","getNextDate","dateCond","getRuleForSchedule","ruleId","fixRuleForSchedule","newId","setNextDate","newNextDate","nd","base_next_date","base_next_date_ts","local_next_date","local_next_date_ts","createSchedule","scheduleId","nextDateRepr","nextDateId","schedule_id","updateSchedule","resetNextDate","oldConditions","stripType","deleteSchedule","skipNextDate","getPossibleTransactions","discoverSchedules","findSchedules","getUpcomingDates","onRuleUpdate","payeeIdx","accountIdx","amountIdx","dateIdx","trackJSONPaths","found","postTransactionForSchedule","getScheduledAmount","advanceSchedulesService","syncSuccess","getHasTransactionsQuery","hasTransData","hasTrans","failedToPost","didPost","getStatus","syncDisabled","subtype","completeEvent","lastScheduleRun","takeDates","getRank","day1","day2","dayDiff","matchSchedules","allOccurs","partialMatchRank","baseOccur","occurs","occur","rank","exactAmount","exact","exactDate","schedulesForPattern","baseStart","numDays","baseConfig","weekly","every2weeks","monthly","monthlyLastDay","s1","s2","monthly1stor3rd","dayValue","monthly2ndor4th","findStartDate","currentConfig","prevConfig","allSchedules","finalized","joinURL","pathname","globalSheet","globalOnChange","globalCacheDb","updateSpreadsheetCache","rawDb","setCacheStatus","mainDb","cacheDb","clean","isCacheDirty","loadSpreadsheet","cacheEnabled","cachePath","Spreadsheet","cachedRows","loadUserBudgets","unloadSpreadsheet","unload","reloadSpreadsheet","startTransaction","budgetMonths","budgetMonth","sheetForMonth","endTransaction","getCell","waitOnSpreadsheet","onFinish","firstValue","Graph","serialized","graph","addNode","adjacent","adjacentIncoming","addEdge","removeEdge","removeIncomingEdges","topologicalSort","generateDOT","getEdges","edges","incomingEdges","incoming","iter","cur","topologicalSortUntil","visited","sorted","sourceNodes","edgeStrings","adj","edge","saveCache","dirtyCells","computeQueue","_meta","hasCell","cells","queueComputation","cellNames","running","runComputations","_dependencies","dep","markCacheSafe","cacheBarrier","pendingChange","getExpr","getCellExpr","getCellValueLoose","bootup","onReady","_markDirty","dynamic","resolved","voidCell","voidValue","newDeps","triggerDatabaseChanges","resolveNamesAsObjects","sheets","resolveNamesAsArrays","coerceBuffer","encode","requestPb","SyncRequest","envelopePb","MessageEnvelope","setTimestamp","messagePb","setDataset","setRow","setColumn","setValue","binaryMsg","EncryptedData","setIv","setAuthtag","setContent","setIsencrypted","addMessages","setGroupid","setFileid","setKeyid","setSince","decode","responsePb","SyncResponse","getMerkle","getMessagesList","getTimestamp","getIsencrypted","binary","getContent","getIv","getAuthtag","getDataset","getRow","getColumn","FULL_SYNC_DELAY","SYNCING_MODE","checkSyncingMode","partIds","serializeValue","deserializeValue","_syncListeners","compareMessages","newMessages","timestampStr","applyMessagesForImport","applyMessages","t1","t2","idsPerTable","fetchData","setIn","oldData","currentMerkle","getIn","setBudgetType","newData","getTablesFromMessages","prevData","receiveMessages","recv","_sendMessages","scheduleFullSync","IS_BATCHING","_BATCHED","batched","getMessagesSince","localMessages","syncTimeout","_fullSync","sinceTimestamp","prevDiffTime","encoder","resBuffer","localTimeChanged","receivedMessages","diffTime","rebuiltMerkle","rebuildMerkleHash","numMessages","clocks","randomString","migrateParentIds","toApply","parentId","_unlisten","listen","opt_data","repeatedFields_","opt_includeInstance","includeInstance","getIv_asB64","authtag","getAuthtag_asB64","getData_asB64","$jspbMessageInstance","reader","deserializeBinaryFromReader","writer","serializeBinaryToWriter","getIv_asU8","getAuthtag_asU8","getData_asU8","isencrypted","getContent_asB64","getContent_asU8","messagesList","fileid","groupid","keyid","getFileid","getGroupid","getKeyid","getSince","setMessagesList","opt_value","opt_index","clearMessagesList","setMerkle","rebuilt","keyState","clock_","MutableTimestamp","maxDrift","counter","_state","murmurhash","setMillis","setCounter","phys","lOld","cOld","lNew","cNew","ClockDriftError","OverflowError","lMsg","cMsg","isoString","DuplicateNodeError","blankPayeeRows","parentPayee","clearedRows","deletedRows","numBlankPayees","numCleared","numDeleted","currentUniqueId","mixpanel","isEnabled","toggle","hashed","isAnonymous","login","BUFFERING","startBuffering","stopBuffering","distinct_id","setProfile","MESSAGE_HISTORY","CURSOR","HISTORY_SIZE","trimHistory","markers","cutoff","appendMessages","undoListening","marker","applyUndoAction","undoMessage","oldItem","redoResurrections","resurrect","runMigrations","migrations","updateViews","hashKey","currentHash","existingFiles","initialName","newName","prettyAccountType","determineOffBudget","sequenceState","queue","pump","onceFn","IS_TESTING","month1","month2","_range","inclusive","rangeInclusive","_dayRange","dayRange","dayRangeInclusive","getMonthIndex","getYearStart","getYearEnd","nameForMonth","getDateFormatRegex","memoizeOne","getDayMonthFormat","getDayMonthRegex","getMonthYearFormat","getMonthYearRegex","getShortYearFormat","getShortYearRegex","TYPE_INFO","amountInflow","amountOutfow","mapField","friendlyOp","deserializeField","getFieldError","unparse","inputKey","unparsed","makeValue","currencyToAmount","makeNumberSuffix","prettyDayName","SU","TU","WE","getRecurringDescription","p1","p2","typeOrder","valOrder","strs","uniqueDays","dayName","abbrevDay","dayNames","SplitTransactionError","makeChild","findParentIndex","getSplit","parentIndex","groupTransaction","ungroupTransaction","applyTransactionDiff","groupedTrans","applyChanges","replaceTransactions","transactionsCopy","newSplit","_deleted","diffItems","newTrans","addSplitTransaction","prevSub","splitTransaction","realizeTempTransactions","currencyFormatter","cleanUUID","mergeObjects","composeCellChanges","flattenArray","arrays","shallowEqual","numKeysA","numKeysB","obj1","obj2","hasChanged","groupBySingle","_groupById","newItems","newGrouped","newItem","debugMemoFailure","prevProps","nextProps","throwError","set1","set2","finalSet","titleFirst","numberFormats","label","numberFormat","setNumberFormat","separator","getNumberFormat","toRelaxedNumber","currencyToInteger","toRelaxedInteger","integerToCurrency","amountToCurrency","amountToPrettyCurrency","semverToNumber"],"mappings":"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G;AACrB,WAAO,CAAC,EAAE,KAAKJ,MAAL,CAAYlF,IAAZ,IAAoB,KAAKkF,MAAL,CAAYlF,IAAZ,CAAiBY,WAAvC,CAAR;AACD;;AAjCmC;;AAoCtC,MAAMgQ,QAAN,SAAuBV,YAAvB,CAAoC;AAClC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACEzR,aAAW,CAACiC,OAAO,GAAG,EAAX,EAAe;AACxB,UAAMA,OAAN;AACA,SAAKmQ,MAAL,GAAc,EAAd;AACA,SAAKC,OAAL,GAAe,EAAf;;AACA,SAAK,MAAM1J,IAAX,IAAmB,CAAC,QAAD,EAAW,SAAX,CAAnB,EAA0C;AACxC,YAAM2J,GAAG,GAAGrQ,OAAO,CAAC0G,IAAD,CAAnB;;AACA,UAAI2J,GAAJ,EAAS;AACP,aAAK3J,IAAL,IAAa2J,GAAG,CAACpO,GAAJ,CAAQqO,QAAQ,IAAI;AAC/B,cAAIA,QAAQ,YAAYjB,IAAxB,EAA8B;AAC5B,mBAAOiB,QAAQ,CAAC5L,GA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/D,MAAM,GAAG,IAArB,CAAtB;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASoxC,QAAT,CAAkBrtC,SAAlB,EAA6BC,WAA7B,EAA0C;AACvD,MAAIC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIiF,MAAM,GAAG0D,uEAAS,CAACM,WAAD,CAAtB;AACA,MAAIQ,IAAI,GAAGxE,MAAM,GAAG,CAApB;AACA,SAAOswC,iEAAO,CAACvsC,SAAD,EAAYS,IAAZ,CAAd;AACD,C;;;;;;;;;;;;ACnCD;AAAA;AAAA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS6sC,QAAT,CAAkBttC,SAAlB,EAA6BC,WAA7B,EAA0C;AACvD,MAAIC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIiF,MAAM,GAAG0D,uEAAS,CAACM,WAAD,CAAtB;AACA,SAAO6sC,mEAAS,CAAC9sC,SAAD,EAAY/D,MAAM,GAAG,EAArB,CAAhB;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA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AG,CAAxB,EAA2B,CAA3B,EAA8B,CAA9B;AACAtI,MAAI,CAACg6C,QAAL,CAAc,EAAd,EAAkB,EAAlB,EAAsB,EAAtB,EAA0B,GAA1B;AACA,SAAOh6C,IAAP;AACD,C;;;;;;;;;;;;ACpCD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;CAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,IAAIugD,sBAAsB,GAAG,uDAA7B,C,CAEA;AACA;;AACA,IAAIC,0BAA0B,GAAG,mCAAjC;AAEA,IAAIC,mBAAmB,GAAG,YAA1B;AACA,IAAIC,iBAAiB,GAAG,KAAxB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS9kC,MAAT,CAAgB5O,SAAhB,EAA2B2zC,cAA3B,EAA2C5I,YAA3C,EAAyD;AACtE,MAAI7qC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI48C,SAAS,GAAGpf,MAAM,CAACmf,cAAD,CAAtB;AACA,MAAI7hD,OAAO,GAAGi5C,YAAY,IAAI,EAA9B;AAEA,MAAIhI,MAAM,GAAGjxC,OAAO,CAACixC,MAAR,IAAkB8Q,8DAA/B;AAEA,MAAI7I,2BAA2B,GAC7BjI,MAAM,CAACjxC,OAAP,IAAkBixC,MAAM,CAACjxC,OAAP,CAAem5C,qBADnC;AAEA,MAAIC,4BAA4B,GAC9BF,2BAA2B,IAAI,IAA/B,GAC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;;;;;;;AC3bD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,IAAIc,cAAc,GAAG,IAArB;AACA,IAAIC,0BAA0B,GAAG,IAAjC;AACA,IAAIC,gBAAgB,GAAG,KAAvB;AACA,IAAIC,qBAAqB,GAAG,KAA5B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASC,cAAT,CAAwB50C,SAAxB,EAAmC60C,aAAnC,EAAkD9J,YAAlD,EAAgE;AAC7E,MAAI7qC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIlF,OAAO,GAAGi5C,YAAY,IAAI,EAA9B;AACA,MAAIhI,MAAM,GAAGjxC,OAAO,CAACixC,MAAR,IAAkB8Q,8DAA/B;;AAEA,MAAI,CAAC9Q,MAAM,CAAC6R,cAAZ,EAA4B;AAC1B,UAAM,IAAIzJ,UAAJ,CAAe,6CAAf,CAAN;AACD;;AAED,MAAI2J,UAAU,GAAGpG,oEAAU,CAAC1uC,SAAD,EAAY60C,aAAZ,CAA3B;;AAEA,MAAIp2C,KAAK,CAACq2C,U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AAIE,gBAAgB,GAAG,KAAvB;AACA,IAAIc,eAAe,GAAG,MAAtB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASC,oBAAT,CACbz1C,SADa,EAEb60C,aAFa,EAGb9J,YAHa,EAIb;AACA,MAAI7qC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIlF,OAAO,GAAGi5C,YAAY,IAAI,EAA9B;AACA,MAAIhI,MAAM,GAAGjxC,OAAO,CAACixC,MAAR,IAAkB8Q,8DAA/B;;AAEA,MAAI,CAAC9Q,MAAM,CAAC6R,cAAZ,EAA4B;AAC1B,UAAM,IAAIzJ,UAAJ,CAAe,sDAAf,CAAN;AACD;;AAED,MAAI2J,UAAU,GAAGpG,oEAAU,CAAC1uC,S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CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASl6B,UAAT,CAAoBnO,SAApB,EAA+B;AAC5C,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAIqpC,OAAO,GAAGr2C,IAAI,CAACmb,UAAL,EAAd;AACA,SAAOk7B,OAAP;AACD,C;;;;;;;;;;;;ACjCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASr7B,QAAT,CAAkBhO,SAAlB,EAA6B;AAC1C,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAIzE,KAAK,GAAGvI,IAAI,CAACgb,QAAL,EAAZ;AACA,SAAOzS,KAAP;AACD,C;;;;;;;;;;;;ACjCD;AAAA;AAAA;AAAA;AAEA,IAAIP,mBAAmB,GAAG,KAAK,EAAL,GAAU,EAAV,GAAe,IAAzC;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS67C,6BAAT,CACbrJ,iBADa,EAEbC,kBAFa,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AAGA;AACA;AACA;AAGA;AAGA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC3LA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASjI,OAAT,CAAiB2M,SAAjB,EAA4BiuC,kBAA5B,EAAgD;AAC7D,MAAI/tC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAImuC,aAAa,GAAG9D,gEAAM,CAAC4D,kBAAD,CAA1B;AACA,SAAOj7C,IAAI,CAAC0N,OAAL,KAAiBytC,aAAa,CAACztC,OAAd,EAAxB;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASpO,QAAT,CAAkB0N,SAAlB,EAA6BiuC,kBAA7B,EAAiD;AAC9D,MAAI/tC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAImuC,aAAa,GAAG9D,gEAAM,CAAC4D,kBAAD,CAA1B;AACA,SAAOj7C,IAAI,CAAC0N,OAAL,KAAiBytC,aAAa,CAACztC,OAAd,EAAxB;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASzG,MAAT,CAAgB1J,KAAhB,EAAuB;AACpC,MAAI2P,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,SACEzG,KAAK,YAAY4K,IAAjB,IACC,OAAO5K,KAAP,KAAiB,QAAjB,IACCqD,MAAM,CAACoZ,SAAP,CAAiBY,QAAjB,CAA0BC,IAA1B,CAA+Btd,KAA/B,MAA0C,eAH9C;AAKD,C;;;;;;;;;;;;AChDD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASgC,OAAT,CAAiBqlD,aAAjB,EAAgCC,cAAhC,EAAgD;AAC7D,MAAI33C,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI63C,QAAQ,GAAGxE,gEAAM,CAACuN,aAAD,CAArB;AACA,MAAI9I,SAAS,GAAGzE,gEAAM,CAACwN,cAAD,CAAtB;AACA,SAAOhJ,QAAQ,CAACnuC,OAAT,OAAuBouC,SAAS,CAACpuC,OAAV,EAA9B;AACD,C;;;;;;;;;;;;ACrCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASo3C,iBAAT,CAA2B93C,SAA3B,EAAsC;AACnD,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,SAAOqzC,gEAAM,CAACrqC,SAAD,CAAN,CAAkBiO,OAAlB,OAAgC,CAAvC;AACD,C;;;;;;;;;;;;AC/BD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS8pC,QAAT,CAAkB/3C,SAAlB,EAA6B;AAC1C,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,SAAOqzC,gEAAM,CAACrqC,SAAD,CAAN,CAAkBszC,MAAlB,OAA+B,CAAtC;AACD,C;;;;;;;;;;;;AC/BD;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS0E,gBAAT,CAA0Bh4C,SAA1B,EAAqC;AAClD,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,SAAO0yC,kEAAQ,CAAC1/C,IAAD,CAAR,CAAe0N,OAAf,OAA6B4xC,oEAAU,CAACt/C,IAAD,CAAV,CAAiB0N,OAAjB,EAApC;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASpB,UAAT,CAAoBU,SAApB,EAA+B;AAC5C,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,MAAIhE,IAAI,GAAGq3C,gEAAM,CAACrqC,SAAD,CAAjB;AACA,MAAI1E,IAAI,GAAGtI,IAAI,CAAC+a,WAAL,EAAX;AACA,SAAOzS,IAAI,GAAG,GAAP,KAAe,CAAf,IAAqBA,IAAI,GAAG,CAAP,KAAa,CAAb,IAAkBA,IAAI,GAAG,GAAP,KAAe,CAA7D;AACD,C;;;;;;;;;;;;ACjCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS28C,QAAT,CAAkBj4C,SAAlB,EAA6B;AAC1C,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,SAAOqzC,gEAAM,CAACrqC,SAAD,CAAN,CAAkBszC,MAAlB,OAA+B,CAAtC;AACD,C;;;;;;;;;;;;AC/BD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS4E,SAAT,CAAmBvJ,aAAnB,EAAkCC,cAAlC,EAAkD;AAC/D,MAAI1uC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAImhD,kBAAkB,GAAGjJ,oEAAU,CAACP,aAAD,CAAnC;AACA,MAAIyJ,mBAAmB,GAAGlJ,oEAAU,CAACN,cAAD,CAApC;AAEA,SAAOuJ,kBAAkB,CAACz3C,OAAnB,OAAiC03C,mBAAmB,CAAC13C,OAApB,EAAxC;AACD,C;;;;;;;;;;;;ACnCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS23C,UAAT,CAAoB1J,aAApB,EAAmCC,cAAnC,EAAmD;AAChE,MAAI1uC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIshD,mBAAmB,GAAGC,qEAAW,CAAC5J,aAAD,CAArC;AACA,MAAI6J,oBAAoB,GAAGD,qEAAW,CAAC3J,cAAD,CAAtC;AAEA,SAAO0J,mBAAmB,CAAC53C,OAApB,OAAkC83C,oBAAoB,CAAC93C,OAArB,EAAzC;AACD,C;;;;;;;;;;;;ACnCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS+3C,aAAT,CAAuB9J,aAAvB,EAAsCC,cAAtC,EAAsD;AACnE,MAAI1uC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,SAAO0hD,oEAAU,CAAC/J,aAAD,EAAgBC,cAAhB,EAAgC;AAAEnH,gBAAY,EAAE;AAAhB,GAAhC,CAAjB;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASkR,iBAAT,CAA2BhK,aAA3B,EAA0CC,cAA1C,EAA0D;AACvE,MAAI1uC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI4hD,mBAAmB,GAAGnC,4EAAkB,CAAC9H,aAAD,CAA5C;AACA,MAAIkK,oBAAoB,GAAGpC,4EAAkB,CAAC7H,cAAD,CAA7C;AAEA,SAAOgK,mBAAmB,CAACl4C,OAApB,OAAkCm4C,oBAAoB,CAACn4C,OAArB,EAAzC;AACD,C;;;;;;;;;;;;AC1CD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASo4C,YAAT,CAAsBnK,aAAtB,EAAqCC,cAArC,EAAqD;AAClE,MAAI1uC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI+hD,qBAAqB,GAAGC,uEAAa,CAACrK,aAAD,CAAzC;AACA,MAAIsK,sBAAsB,GAAGD,uEAAa,CAACpK,cAAD,CAA1C;AAEA,SAAOmK,qBAAqB,CAACr4C,OAAtB,OAAoCu4C,sBAAsB,CAACv4C,OAAvB,EAA3C;AACD,C;;;;;;;;;;;;ACvCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASw4C,WAAT,CAAqBvK,aAArB,EAAoCC,cAApC,EAAoD;AACjE,MAAI1uC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI63C,QAAQ,GAAGxE,gEAAM,CAACsE,aAAD,CAArB;AACA,MAAIG,SAAS,GAAGzE,gEAAM,CAACuE,cAAD,CAAtB;AACA,SACEC,QAAQ,CAAC9gC,WAAT,OAA2B+gC,SAAS,CAAC/gC,WAAV,EAA3B,IACA8gC,QAAQ,CAAC7gC,QAAT,OAAwB8gC,SAAS,CAAC9gC,QAAV,EAF1B;AAID,C;;;;;;;;;;;;ACrCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASmrC,aAAT,CAAuBxK,aAAvB,EAAsCC,cAAtC,EAAsD;AACnE,MAAI1uC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIoiD,sBAAsB,GAAGC,wEAAc,CAAC1K,aAAD,CAA3C;AACA,MAAI2K,uBAAuB,GAAGD,wEAAc,CAACzK,cAAD,CAA5C;AAEA,SAAOwK,sBAAsB,CAAC14C,OAAvB,OAAqC44C,uBAAuB,CAAC54C,OAAxB,EAA5C;AACD,C;;;;;;;;;;;;ACnCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS64C,YAAT,CAAsB5K,aAAtB,EAAqCC,cAArC,EAAqD;AAClE,MAAI1uC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIwiD,qBAAqB,GAAGC,uEAAa,CAAC9K,aAAD,CAAzC;AACA,MAAI+K,sBAAsB,GAAGD,uEAAa,CAAC7K,cAAD,CAA1C;AAEA,SAAO4K,qBAAqB,CAAC94C,OAAtB,OAAoCg5C,sBAAsB,CAACh5C,OAAvB,EAA3C;AACD,C;;;;;;;;;;;;ACvCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASg4C,UAAT,CACb/J,aADa,EAEbC,cAFa,EAGb7D,YAHa,EAIb;AACA,MAAI7qC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI2iD,mBAAmB,GAAGxJ,qEAAW,CAACxB,aAAD,EAAgB5D,YAAhB,CAArC;AACA,MAAI6O,oBAAoB,GAAGzJ,qEAAW,CAACvB,cAAD,EAAiB7D,YAAjB,CAAtC;AAEA,SAAO4O,mBAAmB,CAACj5C,OAApB,OAAkCk5C,oBAAoB,CAACl5C,OAArB,EAAzC;AACD,C;;;;;;;;;;;;ACnDD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASm5C,UAAT,CAAoBlL,aAApB,EAAmCC,cAAnC,EAAmD;AAChE,MAAI1uC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAI63C,QAAQ,GAAGxE,gEAAM,CAACsE,aAAD,CAArB;AACA,MAAIG,SAAS,GAAGzE,gEAAM,CAACuE,cAAD,CAAtB;AACA,SAAOC,QAAQ,CAAC9gC,WAAT,OAA2B+gC,SAAS,CAAC/gC,WAAV,EAAlC;AACD,C;;;;;;;;;;;;AClCD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS+rC,UAAT,CAAoB95C,SAApB,EAA+B;AAC5C,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,SAAOqzC,gEAAM,CAACrqC,SAAD,CAAN,CAAkBszC,MAAlB,OAA+B,CAAtC;AACD,C;;;;;;;;;;;;AC/BD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASnB,QAAT,CAAkBnyC,SAAlB,EAA6B;AAC1C,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,SAAOqzC,gEAAM,CAACrqC,SAAD,CAAN,CAAkBszC,MAAlB,OAA+B,CAAtC;AACD,C;;;;;;;;;;;;AC/BD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASyG,UAAT,CAAoB/5C,SAApB,EAA+B;AAC5C,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,SAAOqzC,gEAAM,CAACrqC,SAAD,CAAN,CAAkBszC,MAAlB,OAA+B,CAAtC;AACD,C;;;;;;;;;;;;AC/BD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAAS0G,SAAT,CAAmBh6C,SAAnB,EAA8B;AAC3C,MAAIE,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,mCAAmCD,SAAS,CAAClJ,MAA7C,GAAsD,UADlD,CAAN;AAGD;;AAED,SAAOqzC,gEAAM,CAACrqC,SAAD,CAAN,CAAkBszC,MAAlB,OAA+B,CAAtC;AACD,C;;;;;;;;;;;;AC/BD;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASQ,OAAT,CAAiB9zC,SAAjB,EA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6B,MAAT,EAAiBoF,KAAjB,EAAwBp1B,KAAxB,EAA+Bre,OAA/B,EAAwC;AAC7C,aAAO+uD,oBAAoB,CAAC1gB,MAAD,CAA3B;AACD,KAJA;AAKD3pC,OAAG,EAAE,UAASxD,IAAT,EAAeqqB,KAAf,EAAsB9sB,KAAtB,EAA6BuB,OAA7B,EAAsC;AACzC,aAAO,CAAC,IAAIqJ,IAAJ,CAAS5K,KAAT,CAAD,EAAkB;AAAE6xD,sBAAc,EAAE;AAAlB,OAAlB,CAAP;AACD;AAPA;AArmCS,CAAd;AAgnCeR,sEAAf,E;;;;;;;;;;;;ACj3CA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKA,IAAIS,sBAAsB,GAAG,EAA7B,C,CAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,IAAI9O,sBAAsB,GAAG,uDAA7B;AAEA,IAAIE,mBAAmB,GAAG,YAA1B;AACA,IAAIC,iBAAiB,GAAG,KAAxB;AAEA,IAAI4O,mBAAmB,GAAG,IAA1B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASh9C,KAAT,CACbi9C,eADa,EAEbC,iBAFa,EAGb3N,aAHa,EAIb9J,YAJa,EAKb;AACA,MAAI7qC,SAAS,CAAClJ,MAAV,GAAmB,CAAvB,EAA0B;AACxB,UAAM,IAAImJ,SAAJ,CACJ,oCAAoCD,SAAS,CAAClJ,MAA9C,GAAuD,UADnD,CAAN;AAGD;;AAED,MAAIyrD,UAAU,GAAGjuB,MAAM,CAAC+tB,eAAD,CAAvB;AACA,MAAIG,YAAY,GAAGluB,MAAM,CAACguB,iBAAD,CAAzB;AACA,MAAI1wD,OAAO,GAAGi5C,YAAY,IAAI,EAA9B;AAEA,MAAIhI,MAAM,GAAGjxC,OAAO,CAACixC,MAAR,IAAk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","file":"bundle.api.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded chunks\n \t// \"0\" means \"already loaded\"\n \tvar installedChunks = {\n \t\t\"main\": 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// uncaught error handler for webpack runtime\n \t__webpack_require__.oe = function(err) {\n \t\tprocess.nextTick(function() {\n \t\t\tthrow err; // catch this error by using import().catch()\n \t\t});\n \t};\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./packages/loot-core/src/server/main.js\");\n","import {\n  ArgumentError,\n  getDifferenceBetweenWeekdays,\n  DateAdapterBase as DateAdapterBase$1,\n  dateInputToDateTime,\n  dateInputToDateAdapter,\n  normalizeDateTimeTimezone as normalizeDateTimeTimezone$1,\n  InfiniteLoopError,\n  dateTimeSortComparer,\n  cloneRuleOptions,\n  normalizeRuleOptions,\n  RecurrenceRulesIterator,\n  recurrenceRulesReducer,\n  DateTime as DateTime$1,\n} from '@rschedule/core';\n\nclass OccurrenceGenerator {\n  constructor(args = {}) {\n    this.timezone = args.timezone !== undefined ? args.timezone : null;\n    this.maxDuration = args.maxDuration || 0;\n  }\n  /** Returns the first occurrence or, if there are no occurrences, null. */\n  get firstDate() {\n    if (this._firstDate !== undefined) return this._firstDate;\n    const start = this._run().next().value;\n    this._firstDate = start ? this.dateAdapter.fromDateTime(start) : null;\n    return this._firstDate;\n  }\n  /** If generator is infinite, returns `null`. Otherwise returns the end date */\n  get lastDate() {\n    if (this._lastDate !== undefined) return this._lastDate;\n    if (this.isInfinite) {\n      this._lastDate = null;\n      return null;\n    }\n    const end = this._run({ reverse: true }).next().value;\n    this._lastDate = end ? this.dateAdapter.fromDateTime(end) : null;\n    return this._lastDate;\n  }\n  pipe(...operators) {\n    return operators.reduce((prev, curr) => curr({ base: prev, timezone: this.timezone }), this);\n  }\n  /**\n     * Processes the object's rules/dates and returns an iterable for the occurrences.\n     *\n     * Options object:\n     * - `start` the date to begin iteration on\n     * - `end` the date to end iteration on\n     * - `take` the max number of dates to take before ending iteration\n     * - `reverse` whether to iterate in reverse or not\n     *\n     * Examples:\n     *\n     * ```\n     * const iterator = schedule.occurrences({ start: new Date(), take: 5 });\n     \n     * for (const date of iterator) {\n     *   // do stuff\n     * }\n  \n     * iterator.toArray() // returns Date array\n     * iterator.next().value // returns next Date\n     * ```\n     *\n     */\n  occurrences(args = {}) {\n    return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));\n  }\n  /**\n   * Iterates over the object's occurrences and bundles them into collections\n   * with a specified granularity (default is `\"YEARLY\"`). Make sure to\n   * read about each option & combination of options below.\n   *\n   * Options object:\n   *   - start?: DateAdapter\n   *   - end?: DateAdapter\n   *   - take?: number\n   *   - reverse?: NOT SUPPORTED\n   *   - granularity?: CollectionsGranularity\n   *   - weekStart?: DateAdapter.Weekday\n   *   - skipEmptyPeriods?: boolean\n   *\n   * Returned `Collection` object:\n   *\n   *   - `dates` property containing an array of DateAdapter objects.\n   *   - `granularity` property containing the granularity.\n   *     - `CollectionsGranularity` === `RuleOptions.Frequency`.\n   *     - default is `\"YEARLY\"`\n   *   - `periodStart` property containing a DateAdapter equal to the period's\n   *     start time.\n   *   - `periodEnd` property containing a DateAdapter equal to the period's\n   *     end time.\n   *\n   * #### Details:\n   *\n   * `collections()` always returns full periods. This means that the `start` argument is\n   * transformed to be the start of whatever period the `start` argument is in, and the\n   * `end` argument is transformed to be the end of whatever period the `end` argument is\n   * in.\n   *\n   * - Example: with granularity `\"YEARLY\"`, the `start` argument will be transformed to be the\n   *   start of the year passed in the `start` argument, and the `end` argument will be transformed\n   *   to be the end of the year passed in the `end` argument.\n   *\n   * By default, the `periodStart` value of `Collection` objects produced by this method increments linearly.\n   * This means the returned `Collection#dates` property may have length 0. This can be changed by\n   * passing the `skipEmptyPeriods: true` option, in which case the `periodStart` from one collection to the\n   * next can \"jump\".\n   *\n   * - Example 1: if your object's first occurrence is 2019/2/1 (February 1st) and you call\n   *   `collection({skipEmptyPeriods: true, granularity: 'DAILY', start: new Date(2019,0,1)})`\n   *   (so starting on January 1st), the first Collection produced will have a `periodStart` in February.\n   *\n   * - Example 2: if your object's first occurrence is 2019/2/1 (February 1st) and you call\n   *   `collection({granularity: 'DAILY', start: new Date(2019,0,1)})`\n   *   (so starting on January 1st), the first collection produced will have a `Collection#periodStart`\n   *   of January 1st and have `Collection#dates === []`. Similarly, the next 30 collections produced\n   *   (Jan 2nd - 31st) will all contain an empty array for the `dates` property. Then the February 1st\n   *   `Collection` will contain dates.\n   *\n   * When giving a `take` argument to `collections()`, you are specifying\n   * the number of `Collection` objects to return (rather than occurrences).\n   *\n   * When choosing a granularity of `\"WEEKLY\"`, the `weekStart` option is required.\n   *\n   * When choosing a granularity of `\"MONTHLY\"`:\n   *\n   * - If the `weekStart` option *is not* present, will generate collections with\n   *   the `periodStart` and `periodEnd` at the beginning and end of each month.\n   *\n   * - If the `weekStart` option *is* present, will generate collections with the\n   *   `periodStart` equal to the start of the first week of the month, and the\n   *   `periodEnd` equal to the end of the last week of the month. This behavior could be\n   *   desired when rendering opportunities in a calendar view, where the calendar renders\n   *   full weeks (which may result in the calendar displaying dates in the\n   *   previous or next months).\n   *\n   */\n  collections(args = {}) {\n    return new CollectionIterator(this, this.normalizeCollectionsArgs(args));\n  }\n  /**\n   * Returns true if an occurrence starts on or between the provided start/end\n   * datetimes. If the `excludeEnds` option is provided, then occurrences\n   * equal to the start/end times are ignored.\n   *\n   * If the occurrence generator has a duration, and `excludeEnds !== true`,\n   * and a `maxDuration` argument is supplied (either in the constructor or\n   * here), then any occurrence that's time overlaps with the start/end times\n   * return true.\n   */\n  occursBetween(startInput, endInput, options = {}) {\n    const start = this.normalizeDateInput(startInput);\n    const end = this.normalizeDateInput(endInput);\n    if (this.hasDuration && !options.excludeEnds) {\n      const maxDuration = this.getMaxDuration('occursBetween', options);\n      const iterator = this._run({\n        start: start.subtract(maxDuration, 'millisecond'),\n        end,\n        reverse: true,\n      });\n      for (const day of iterator) {\n        if (day.end.isBefore(start)) continue;\n        return true;\n      }\n      return false;\n    }\n    for (const day of this._run({ start, end })) {\n      if (options.excludeEnds) {\n        if (day.isEqual(start)) {\n          continue;\n        }\n        if (day.isEqual(end)) {\n          break;\n        }\n      }\n      return true;\n    }\n    return false;\n  }\n  occursOn(rawArgs) {\n    const args = this.normalizeOccursOnArgs(rawArgs);\n    if (args.weekday) {\n      if (this.isInfinite && !args.before) {\n        throw new ArgumentError(\n          'When calling `occursOn()` with a `weekday` argument ' +\n            'and an occurrence object that has infinite occurrences, ' +\n            'you must include a `before` argument as well.',\n        );\n      }\n      const start = args.after && (args.excludeEnds ? args.after.add(1, 'day') : args.after);\n      const end = args.before && (args.excludeEnds ? args.before.subtract(1, 'day') : args.before);\n      const iterator = this._run({ start, end });\n      let date = iterator.next().value;\n      if (!date) return false;\n      while (date) {\n        if (date.get('weekday') === args.weekday) {\n          return true;\n        }\n        date = iterator.next({\n          skipToDate: date\n            .add(getDifferenceBetweenWeekdays(date.get('weekday'), args.weekday), 'day')\n            .granularity('day'),\n        }).value;\n      }\n      return false;\n    }\n    if (!args.date) {\n      throw new ArgumentError(\n        `\"occursOn()\" must be called with either a \"date\" or \"weekday\" argument`,\n      );\n    }\n    if (this.hasDuration) {\n      const maxDuration = this.getMaxDuration('occursOn', args);\n      const iterator = this._run({\n        start: args.date.subtract(maxDuration, 'millisecond'),\n        end: args.date,\n      });\n      for (const date of iterator) {\n        if (date.end.isBefore(args.date)) continue;\n        if (date.isAfter(args.date)) return false;\n        return true;\n      }\n      return false;\n    }\n    for (const day of this._run({ start: args.date, end: args.date })) {\n      return !!day;\n    }\n    return false;\n  }\n  /**\n   * Returns true if an occurrence starts after the provided datetime.\n   * If the `excludeStart` option is provided, then occurrences\n   * equal to the provided datetime are ignored.\n   *\n   * If the occurrence generator has a duration, and `excludeStart !== true`,\n   * and a `maxDuration` argument is supplied (either in the constructor or\n   * here), then any occurrence that's end time is after/equal to the provided\n   * datetime return true.\n   */\n  occursAfter(date, options = {}) {\n    const adapter = this.normalizeDateInput(date);\n    if (this.hasDuration && !options.excludeStart) {\n      const maxDuration = this.getMaxDuration('occursAfter', options);\n      const iterator = this._run({\n        start: adapter.subtract(maxDuration, 'millisecond'),\n      });\n      for (const date of iterator) {\n        if (date.end.isBefore(adapter)) continue;\n        return true;\n      }\n      return false;\n    }\n    for (const day of this._run({ start: adapter })) {\n      if (options.excludeStart && day.isEqual(adapter)) {\n        continue;\n      }\n      return true;\n    }\n    return false;\n  }\n  /**\n   * Returns true if an occurrence starts before the provided datetime.\n   * If the `excludeStart` option is provided, then occurrences\n   * equal to the provided datetime are ignored.\n   *\n   * If the occurrence generator has a duration, and `excludeStart` is\n   * also provided, then this will only return true if an occurrence\n   * both starts and ends before the provided datetime.\n   */\n  occursBefore(date, options = {}) {\n    const adapter = this.normalizeDateInput(date);\n    if (this.hasDuration && options.excludeStart) {\n      for (const day of this._run({ end: adapter, reverse: true })) {\n        if (day.end.isAfterOrEqual(adapter)) continue;\n        return true;\n      }\n      return false;\n    }\n    for (const day of this._run({ end: adapter, reverse: true })) {\n      if (options.excludeStart && day.isEqual(adapter)) {\n        continue;\n      }\n      return true;\n    }\n    return false;\n  }\n  get dateAdapter() {\n    return DateAdapterBase$1.adapter;\n  }\n  normalizeOccurrencesArgs(rawArgs) {\n    return Object.assign(Object.assign({}, rawArgs), {\n      start: this.normalizeDateInput(rawArgs.start),\n      end: this.normalizeDateInput(rawArgs.end),\n    });\n  }\n  normalizeCollectionsArgs(rawArgs) {\n    if (rawArgs.reverse !== undefined) {\n      throw new ArgumentError(\n        '`collections()` does not support the `reverse` option at this time.',\n      );\n    }\n    return Object.assign(Object.assign({}, rawArgs), {\n      start: this.normalizeDateInput(rawArgs.start),\n      end: this.normalizeDateInput(rawArgs.end),\n    });\n  }\n  normalizeOccursOnArgs(rawArgs = {}) {\n    return Object.assign(Object.assign({}, rawArgs), {\n      date: this.normalizeDateInput(rawArgs.date),\n      after: this.normalizeDateInput(rawArgs.after),\n      before: this.normalizeDateInput(rawArgs.before),\n      excludeDates:\n        rawArgs.excludeDates && rawArgs.excludeDates.map(date => this.normalizeDateInput(date)),\n    });\n  }\n  normalizeRunArgs(args) {\n    return Object.assign(Object.assign({}, args), {\n      start: this.normalizeDateInput(args.start),\n      end: this.normalizeDateInput(args.end),\n    });\n  }\n  normalizeDateInput(date) {\n    return date ? dateInputToDateTime(date, this.timezone) : undefined;\n  }\n  normalizeDateInputToAdapter(date) {\n    if (!date) return;\n    return dateInputToDateAdapter(date);\n  }\n  normalizeRunOutput(date) {\n    return normalizeDateTimeTimezone$1(date, this.timezone);\n  }\n  getMaxDuration(method, options) {\n    const maxDuration = options.maxDuration || this.maxDuration;\n    if (!Number.isInteger(maxDuration)) {\n      throw new ArgumentError(\n        `When an occurrence generator ` +\n          `has a duration, a 'maxDuration' argument must be supplied ` +\n          `to ${method}().`,\n      );\n    }\n    return maxDuration;\n  }\n}\nclass OccurrenceIterator {\n  constructor(iterable, args) {\n    this.iterable = iterable;\n    this.args = args;\n    // Need to assert the return type of these methods to prevent typescript from\n    // incorrectly reducing them to `DateAdapterBase & { generators: G }`.\n    this[Symbol.iterator] = () => this.occurrenceIterator();\n    this.iterator = iterable._run(args);\n    this.isInfinite = iterable.isInfinite;\n  }\n  next(args) {\n    return this.occurrenceIterator(args).next();\n  }\n  toArray() {\n    if (this.args.end || this.args.take || !this.isInfinite) {\n      return Array.from(this.occurrenceIterator());\n    }\n    throw new InfiniteLoopError(\n      'OccurrenceIterator#toArray() can only be called if the iterator ' +\n        'is not infinite, or you provide and `end` argument, or you provide ' +\n        'a `take` argument.',\n    );\n  }\n  *occurrenceIterator(rawArgs) {\n    let args = this.normalizeRunArgs(rawArgs);\n    let date = this.iterator.next(args).value;\n    while (date) {\n      const yieldArgs = yield this.normalizeDateOutput(date);\n      args = this.normalizeRunArgs(yieldArgs);\n      date = this.iterator.next(args).value;\n    }\n    return undefined;\n  }\n  normalizeRunArgs(args) {\n    return {\n      skipToDate: this.normalizeDateInput(args && args.skipToDate),\n    };\n  }\n  normalizeDateInput(date) {\n    return date ? dateInputToDateTime(date, this.iterable.timezone) : undefined;\n  }\n  normalizeDateOutput(date) {\n    if (!date) return;\n    return date ? DateAdapterBase$1.adapter.fromDateTime(date) : undefined;\n  }\n}\nclass Collection {\n  constructor(dates = [], granularity, periodStart, periodEnd) {\n    this.dates = dates;\n    this.granularity = granularity;\n    this.periodStart = periodStart;\n    this.periodEnd = periodEnd;\n  }\n}\nclass CollectionIterator {\n  constructor(iterable, args) {\n    this.iterable = iterable;\n    this.args = args;\n    this.granularity = 'year';\n    this[Symbol.iterator] = () => this.iterator;\n    if (args.granularity) {\n      this.granularity = args.granularity;\n      if (this.granularity === 'week' && !args.weekStart) {\n        throw new Error('\"week\" granularity requires `weekStart` arg');\n      }\n    }\n    if (args.weekStart) {\n      this.weekStart = args.weekStart;\n    }\n    if (args.reverse) {\n      throw new Error(\n        '`OccurrenceGenerator#collections()` does not support iterating in reverse. ' +\n          'Though `OccurrenceGenerator#occurrences()` does support iterating in reverse.',\n      );\n    }\n    // Set the end arg, if present, to the end of the period.\n    this.args = Object.assign(Object.assign({}, args), {\n      start: args.start || iterable._run().next().value,\n      end: args.end && this.getPeriod(args.end).end,\n    });\n    this.startDate =\n      (this.args.start && this.normalizeDateOutput(this.getPeriod(this.args.start).start)) || null;\n    this.iterator = this.collectionIterator();\n  }\n  next() {\n    return this.iterator.next();\n  }\n  /**\n   * While `next()` and `[Symbol.iterator]` both share state,\n   * `toArray()` does not share state and always returns the whole\n   * collections array.\n   */\n  toArray() {\n    if (this.args.end || this.args.take || !this.iterable.isInfinite) {\n      const collections = [];\n      for (const collection of this.collectionIterator()) {\n        collections.push(collection);\n      }\n      return collections;\n    }\n    throw new InfiniteLoopError(\n      'CollectionIterator#toArray() can only be called if the iterator ' +\n        'is not infinite, or you provide and `end` argument, or you provide ' +\n        'a `take` argument.',\n    );\n  }\n  normalizeDateOutput(date) {\n    if (!date) return;\n    return DateAdapterBase$1.adapter.fromDateTime(date);\n  }\n  *collectionIterator() {\n    if (!this.startDate) return;\n    let iterator = this.occurrenceIterator();\n    let date = iterator.next().value;\n    if (!date) return;\n    // `period` === `periodStart` unless the granularity\n    // is `MONTHLY` and a `weekStart` param was provided. In this case,\n    // period holds a date === the first of the current month while\n    // periodStart holds a date === the beginning of the first week of the month\n    // (which might be in the the previous month). Read the\n    // `OccurrenceGenerator#collections()` description for more info.\n    let period = this.getPeriod(this.args.start);\n    let dates = [];\n    let index = 0;\n    while (date && (this.args.take === undefined || this.args.take > index)) {\n      while (date && date.isBeforeOrEqual(period.end)) {\n        dates.push(date);\n        date = iterator.next().value;\n      }\n      yield new Collection(\n        dates.map(date => this.normalizeDateOutput(date)),\n        this.granularity,\n        this.normalizeDateOutput(period.start),\n        this.normalizeDateOutput(period.end),\n      );\n      if (!date) return;\n      dates = [];\n      period = !this.args.skipEmptyPeriods\n        ? this.getPeriod(this.incrementPeriod(period.period))\n        : this.getPeriod(date);\n      // With these args, periods may overlap and the same date may show up\n      // in two periods. Because of this, we need to reset the iterator\n      // (otherwise it won't return a date it has already returned).\n      if (this.granularity === 'month' && this.weekStart) {\n        iterator = this.iterable._run({\n          start: period.start,\n          end: this.args.end,\n        });\n        date = iterator.next().value;\n      }\n      index++;\n    }\n  }\n  getPeriod(date) {\n    let start;\n    let end;\n    let period;\n    if (this.granularity === 'month' && this.weekStart) {\n      start = date.granularity('month').granularity('week', { weekStart: this.weekStart });\n      end = date.endGranularity('month').endGranularity('week', { weekStart: this.weekStart });\n      period = date.granularity('month');\n    } else {\n      start = date.granularity(this.granularity, { weekStart: this.weekStart });\n      end = date.endGranularity(this.granularity, { weekStart: this.weekStart });\n      period = start;\n    }\n    return { start, end, period };\n  }\n  incrementPeriod(date) {\n    return date.add(1, this.granularity);\n  }\n  occurrenceIterator() {\n    let start = this.args.start || this.iterable._run().next().value;\n    if (!start) return this.iterable._run(this.args);\n    start = this.getPeriod(start).start;\n    return this.iterable._run({\n      start,\n      end: this.args.end,\n    });\n  }\n}\nclass Operator extends OccurrenceGenerator {\n  constructor(streams, config) {\n    super(config);\n    this.streams = streams;\n    this.config = config;\n    this.timezone = config.timezone;\n    this.streams = streams.map(stream =>\n      stream instanceof Operator ? stream : stream.set('timezone', this.timezone),\n    );\n    this.isInfinite = this.calculateIsInfinite();\n    this.hasDuration = this.calculateHasDuration();\n  }\n  normalizeDateInput(date) {\n    if (!date) return;\n    return dateInputToDateTime(date, this.timezone);\n  }\n  normalizeRunOutput(date) {\n    return normalizeDateTimeTimezone$1(date, this.timezone);\n  }\n}\n\n/**\n * Simple class that lets us access the `value`, `runArgs`, and `done`\n * status of an OccurrenceGenerator iterator\n */\nclass IterableWrapper {\n  constructor(generator, runArgs) {\n    this.runArgs = runArgs;\n    this.stream = generator._run(this.runArgs);\n    this.next();\n  }\n  next(args) {\n    const { done, value } = this.stream.next(args);\n    this.done = typeof done === 'boolean' ? done : true;\n    this.value = value;\n    return { done, value };\n  }\n}\nfunction processYieldArgs(streams, options = {}, yieldArgs = {}) {\n  if (!yieldArgs.skipToDate || streams.length === 0) return;\n  // check for invalid `skipToDate` option\n  if (\n    options.reverse\n      ? streams.every(s => s.value.isBeforeOrEqual(yieldArgs.skipToDate))\n      : streams.every(s => s.value.isAfterOrEqual(yieldArgs.skipToDate))\n  ) {\n    throw new Error(\n      'A provided `skipToDate` option must be greater than the last yielded date ' +\n        '(or smaller, in the case of reverse iteration)',\n    );\n  }\n  for (const stream of streams) {\n    if (stream.done) continue; // no point in calling `next()`\n    if (\n      options.reverse\n        ? stream.value.isBeforeOrEqual(yieldArgs.skipToDate)\n        : stream.value.isAfterOrEqual(yieldArgs.skipToDate)\n    ) {\n      // This can happen there are two streams and one stream starts after the other finishes.\n      // Or, when iterating in reverse, when one stream ends before the other starts.\n      // In this case we don't want to call `next()` because it will throw an error.\n      // In both of these cases, calling `next()` won't do anything anyway.\n      continue;\n    }\n    stream.next(yieldArgs);\n  }\n}\n/** sorts ascending with completed iterables at the end */\nfunction streamsComparer(a, b) {\n  if (a.done && b.done) return 0;\n  if (a.done) return 1;\n  if (b.done) return -1;\n  if (a.value.isAfter(b.value)) return 1;\n  return -1;\n}\n/** sorts descending with completed iterables at the start */\nfunction streamsReverseComparer(a, b) {\n  if (a.done && b.done) return 0;\n  if (a.done) return -1;\n  if (b.done) return 1;\n  if (a.value.isAfter(b.value)) return -1;\n  return 1;\n}\nfunction selectNextIterable(streams, options = {}, yieldArgs = {}) {\n  processYieldArgs(streams, options, yieldArgs);\n  return streams\n    .sort(options.reverse ? streamsReverseComparer : streamsComparer)\n    .filter(s => !s.done)\n    .shift();\n}\nfunction selectLastIterable(streams, options = {}, yieldArgs = {}) {\n  processYieldArgs(streams, options, yieldArgs);\n  return streams\n    .sort(options.reverse ? streamsReverseComparer : streamsComparer)\n    .filter(s => !s.done)\n    .pop();\n}\n\n/**\n * An operator function which accepts a spread of occurrence generators\n * and adds their occurrences to the output.\n *\n * @param streams a spread of occurrence generators\n */\nfunction add(...streams) {\n  return options => new AddOperator(streams, options);\n}\nclass AddOperator extends Operator {\n  set(_, value) {\n    return new AddOperator(\n      this.streams.map(stream => stream.set('timezone', value)),\n      Object.assign(Object.assign({}, this.config), {\n        base: this.config.base && this.config.base.set('timezone', value),\n        timezone: value,\n      }),\n    );\n  }\n  *_run(args = {}) {\n    const wrappedStreams = this.streams.map(input => new IterableWrapper(input, args));\n    if (this.config.base) {\n      wrappedStreams.push(new IterableWrapper(this.config.base, args));\n    }\n    if (wrappedStreams.length === 0) return;\n    let stream = selectNextIterable(wrappedStreams, args);\n    while (stream && !stream.done) {\n      // yield the current stream's value\n      const yieldArgs = yield this.normalizeRunOutput(stream.value);\n      if (!(yieldArgs && yieldArgs.skipToDate)) {\n        // iterate the current stream\n        stream.next();\n      }\n      // select the next stream\n      stream = selectNextIterable(wrappedStreams, args, yieldArgs);\n    }\n  }\n  calculateIsInfinite() {\n    return (\n      (this.config.base && this.config.base.isInfinite) ||\n      this.streams.some(stream => stream.isInfinite)\n    );\n  }\n  calculateHasDuration() {\n    const streamsDuration = this.streams.every(stream => stream.hasDuration);\n    if (!this.config.base) return streamsDuration;\n    return this.config.base.hasDuration && streamsDuration;\n  }\n}\n\nclass Calendar extends OccurrenceGenerator {\n  /**\n   *\n   * Create a new Calendar object with the specified options.\n   *\n   * ### Options\n   *\n   * - **timezone**: The timezone that yielded occurrences should be *displayed* in.\n   *   Note, this one affects the *displayed* timezone of yielded occurrences.\n   *   For rules, occurrences are first found using the unmodified rule\n   *   config (including whatever timezone the `start` datetime is defined\n   *   in), and then converted to the timezone specified here before being\n   *   yielded. By default, the timezone is *local* time (`null`). So if you don't\n   *   want your rules to be displayed in local time, you must supply a\n   *   timezone argument.\n   * - **data**: arbitrary data you can associate with this Calendar. This\n   *   is the only mutable property of `Calendar` objects.\n   * - **maxDuration**: currently unused.\n   * - **schedules**: either an occurrence generator, or an array of occurrence generators, which should\n   *   be used to build up this Calendar's occurrences. The Calendar will display the union of occurrences\n   *   its schedules produce.\n   *\n   */\n  constructor(args = {}) {\n    super(args);\n    this.schedules = [];\n    this.data = args.data;\n    if (args.schedules) {\n      this.schedules = Array.isArray(args.schedules) ? args.schedules : [args.schedules];\n      this.schedules = this.schedules.map(schedule => schedule.set('timezone', this.timezone));\n    }\n    this.isInfinite = this.schedules.some(schedule => schedule.isInfinite);\n    this.hasDuration = this.schedules.every(schedule => schedule.hasDuration);\n  }\n  occurrences(args = {}) {\n    return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));\n  }\n  collections(args = {}) {\n    return new CollectionIterator(this, this.normalizeCollectionsArgs(args));\n  }\n  set(prop, value, options) {\n    if (prop === 'timezone') {\n      return new Calendar({\n        schedules: this.schedules.map(schedule => schedule.set(prop, value, options)),\n        data: this.data,\n        timezone: value,\n        maxDuration: this.maxDuration,\n      });\n    } else if (prop === 'schedules') {\n      return new Calendar({\n        schedules: Array.isArray(value) ? value : [value],\n        data: this.data,\n        timezone: this.timezone,\n        maxDuration: this.maxDuration,\n      });\n    }\n    throw new ArgumentError('Unknown value for `prop`: ' + `\"${prop}\"`);\n  }\n  *_run(args = {}) {\n    if (this.schedules.length === 0) return;\n    const count = args.take;\n    delete args.take;\n    let iterator;\n    if (this.schedules.length === 1) {\n      iterator = this.schedules[0]._run(args);\n    } else {\n      iterator = new AddOperator(this.schedules, {\n        timezone: this.timezone,\n      })._run(args);\n    }\n    let date = iterator.next().value;\n    let index = 0;\n    while (date && (count === undefined || count > index)) {\n      date = date.add(this, 'generator');\n      const yieldArgs = yield this.normalizeRunOutput(date);\n      date = iterator.next(yieldArgs).value;\n      index++;\n    }\n    return undefined;\n  }\n}\n\nclass Dates extends OccurrenceGenerator {\n  constructor(args = {}) {\n    super(args);\n    this.adapters = [];\n    this.isInfinite = false;\n    this.maxDuration = 0;\n    this.datetimes = [];\n    this.data = args.data;\n    if (args.dates) {\n      this.adapters = args.dates.map(date => {\n        let adapter = this.normalizeDateInputToAdapter(date);\n        if (args.duration && !adapter.duration) {\n          adapter = adapter.set('duration', args.duration);\n        }\n        return adapter.set('timezone', this.timezone);\n      });\n      this.datetimes = this.adapters.map(adapter => adapter.toDateTime());\n    }\n    this.hasDuration = this.datetimes.every(date => !!date.duration);\n    if (this.hasDuration) {\n      this.maxDuration = this.adapters.reduce(\n        (prev, curr) => (curr.duration > prev ? curr.duration : prev),\n        0,\n      );\n    }\n  }\n  get length() {\n    return this.adapters.length;\n  }\n  /** Returns the first occurrence or, if there are no occurrences, null. */\n  get firstDate() {\n    return this.adapters[0] || null;\n  }\n  /** Returns the last occurrence or, if there are no occurrences, null. */\n  get lastDate() {\n    return this.adapters[this.length - 1] || null;\n  }\n  occurrences(args = {}) {\n    return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));\n  }\n  collections(args = {}) {\n    return new CollectionIterator(this, this.normalizeCollectionsArgs(args));\n  }\n  add(value) {\n    return new Dates({\n      dates: [...this.adapters, value],\n      timezone: this.timezone,\n      data: this.data,\n    });\n  }\n  remove(value) {\n    const dates = this.adapters.slice();\n    const input = this.normalizeDateInputToAdapter(value);\n    const index = dates.findIndex(date => date.valueOf() === input.valueOf());\n    if (index >= 0) {\n      dates.splice(index, 1);\n    }\n    return new Dates({\n      dates,\n      timezone: this.timezone,\n      data: this.data,\n    });\n  }\n  set(prop, value, options = {}) {\n    let timezone = this.timezone;\n    let dates = this.adapters.slice();\n    if (prop === 'timezone') {\n      if (value === this.timezone) return this;\n      else if (options.keepLocalTime) {\n        dates = this.adapters.map(adapter => {\n          const json = adapter.toJSON();\n          json.timezone = value;\n          return this.dateAdapter.fromJSON(json);\n        });\n      }\n      timezone = value;\n    } else if (prop === 'dates') {\n      dates = value;\n    } else if (prop === 'duration') {\n      dates = dates.map(date => date.set('duration', value || 0));\n    } else {\n      throw new ArgumentError(\n        `Unexpected prop argument \"${prop}\". Accepted values are \"timezone\" or \"dates\"`,\n      );\n    }\n    return new Dates({\n      dates,\n      data: this.data,\n      timezone,\n    });\n  }\n  filter(fn) {\n    return new Dates({\n      dates: this.adapters.filter(fn),\n      data: this.data,\n      timezone: this.timezone,\n    });\n  }\n  *_run(args = {}) {\n    let dates = this.datetimes.sort(dateTimeSortComparer);\n    if (args.start) {\n      dates = dates.filter(date => date.isAfterOrEqual(args.start));\n    }\n    if (args.end) {\n      dates = dates.filter(date => date.isBeforeOrEqual(args.end));\n    }\n    if (args.reverse) {\n      dates = dates.slice().reverse();\n    }\n    if (args.take) {\n      dates = dates.slice(0, args.take);\n    }\n    const dateCache = dates.slice();\n    let date = dateCache.shift();\n    let yieldArgs;\n    while (date) {\n      if (\n        yieldArgs &&\n        yieldArgs.skipToDate &&\n        (args.reverse ? yieldArgs.skipToDate.isBefore(date) : yieldArgs.skipToDate.isAfter(date))\n      ) {\n        date = dateCache.shift();\n        continue;\n      }\n      date = date.add(this, 'generator');\n      yieldArgs = yield this.normalizeRunOutput(date);\n      // Here, we are matching the behavior of the RecurrenceRulesIterator\n      if (\n        yieldArgs &&\n        yieldArgs.skipToDate &&\n        (args.reverse\n          ? yieldArgs.skipToDate.isAfterOrEqual(date)\n          : yieldArgs.skipToDate.isBeforeOrEqual(date))\n      ) {\n        throw new Error(\n          'A provided `skipToDate` option must be greater than the last yielded date ' +\n            '(or smaller, in the case of reverse iteration)',\n        );\n      }\n      date = dateCache.shift();\n    }\n    return undefined;\n  }\n}\n\nclass InvalidDateAdapterError extends Error {}\nlet dateAdapterConfig;\nclass DateAdapterBase {\n  constructor(_date, options) {\n    this.duration = (options && options.duration) || 0;\n    this.generators = (options && options.generators && options.generators.slice()) || [];\n    if (!Number.isInteger(this.duration) || this.duration < 0) {\n      throw new InvalidDateAdapterError('duration must be a non-negative integer');\n    }\n  }\n  static set adapter(value) {\n    if (dateAdapterConfig) {\n      throw new Error(`\"${dateAdapterConfig.name}\" has already been configured.`);\n    }\n    dateAdapterConfig = value;\n  }\n  static get adapter() {\n    if (!dateAdapterConfig) {\n      throw new Error('No date adapter has been configured. See rSchedule docs.');\n    }\n    return dateAdapterConfig;\n  }\n  static isDate(_object) {\n    throw unimplementedError('isDate()');\n  }\n  static fromDate(_date, _options) {\n    throw unimplementedError('fromDate()');\n  }\n  static fromJSON(_json) {\n    throw unimplementedError('fromJSON()');\n  }\n  static fromDateTime(_datetime) {\n    throw unimplementedError('fromDateTime()');\n  }\n  /**\n   * Returns a string in simplified extended ISO format (ISO 8601).\n   *\n   * _Note: this method is intended for testing and its\n   * implementation isn't particularly performant._\n   */\n  toISOString() {\n    return this.set('timezone', 'UTC')\n      .toDateTime()\n      .toISOString();\n  }\n  toDateTime() {\n    const date = DateTime.fromJSON(\n      Object.assign(Object.assign({}, this.toJSON()), { generators: this.generators }),\n    );\n    return date;\n  }\n}\nDateAdapterBase.hasTimezoneSupport = false;\nfunction unimplementedError(name) {\n  return new Error(`You must implement the \"${name}\" method for this DateAdapter class`);\n}\nvar DateAdapter;\n(function(DateAdapter) {\n  DateAdapter.WEEKDAYS = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\n  DateAdapter.MILLISECONDS_IN_SECOND = 1000;\n  DateAdapter.MILLISECONDS_IN_MINUTE = DateAdapter.MILLISECONDS_IN_SECOND * 60;\n  DateAdapter.MILLISECONDS_IN_HOUR = DateAdapter.MILLISECONDS_IN_MINUTE * 60;\n  DateAdapter.MILLISECONDS_IN_DAY = DateAdapter.MILLISECONDS_IN_HOUR * 24;\n  DateAdapter.MILLISECONDS_IN_WEEK = DateAdapter.MILLISECONDS_IN_DAY * 7;\n})(DateAdapter || (DateAdapter = {}));\nclass InvalidDateTimeError extends Error {}\nclass DateTime {\n  constructor(date, timezone, duration, generators) {\n    this.date = new Date(date);\n    this.timezone = timezone || null;\n    this.duration = duration || 0;\n    this.generators = (generators && generators.slice()) || [];\n    if (!Number.isInteger(this.duration) || this.duration < 0) {\n      throw new InvalidDateTimeError('duration must be a non-negative integer');\n    }\n    this.assertIsValid();\n  }\n  // /**\n  //  * Similar to `Array.isArray()`, `isInstance()` provides a surefire method\n  //  * of determining if an object is a `DateTime` by checking against the\n  //  * global symbol registry.\n  //  */\n  // static isInstance(object: any): object is DateTime {\n  //   return !!(object && object[DATETIME_ID]);\n  // }\n  static fromJSON(json) {\n    const date = new Date(\n      Date.UTC(\n        json.year,\n        json.month - 1,\n        json.day,\n        json.hour,\n        json.minute,\n        json.second,\n        json.millisecond,\n      ),\n    );\n    return new DateTime(date, json.timezone, json.duration, json.generators);\n  }\n  static fromDateAdapter(adapter) {\n    return DateTime.fromJSON(\n      Object.assign(Object.assign({}, adapter.toJSON()), { generators: adapter.generators }),\n    );\n  }\n  /**\n   * Returns `undefined` if `duration` is `0`. Else returns\n   * the `end` date.\n   */\n  get end() {\n    if (!this.duration) return;\n    if (this._end) return this._end;\n    this._end = this.add(this.duration, 'millisecond');\n    return this._end;\n  }\n  // While we constrain the argument to be another DateAdapter in typescript\n  // we handle the case of someone passing in another type of object in javascript\n  isEqual(object) {\n    if (!object) {\n      return false;\n    }\n    assertSameTimeZone(this, object);\n    return this.valueOf() === object.valueOf();\n  }\n  isBefore(object) {\n    assertSameTimeZone(this, object);\n    return this.valueOf() < object.valueOf();\n  }\n  isBeforeOrEqual(object) {\n    assertSameTimeZone(this, object);\n    return this.valueOf() <= object.valueOf();\n  }\n  isAfter(object) {\n    assertSameTimeZone(this, object);\n    return this.valueOf() > object.valueOf();\n  }\n  isAfterOrEqual(object) {\n    assertSameTimeZone(this, object);\n    return this.valueOf() >= object.valueOf();\n  }\n  isOccurring(object) {\n    if (!this.duration) {\n      throw new Error('DateTime#isOccurring() is only applicable to DateTimes with durations');\n    }\n    assertSameTimeZone(this, object);\n    return (\n      object.isAfterOrEqual(this) && object.isBeforeOrEqual(this.add(this.duration, 'millisecond'))\n    );\n  }\n  add(amount, unit) {\n    switch (unit) {\n      case 'generator': {\n        const generators = this.generators.slice();\n        generators.unshift(amount);\n        return new DateTime(this.date, this.timezone, this.duration, generators);\n      }\n      case 'year':\n        return this.forkDateTime(addUTCYears(this.date, amount));\n      case 'month':\n        return this.forkDateTime(addUTCMonths(this.date, amount));\n      case 'week':\n        return this.forkDateTime(addUTCWeeks(this.date, amount));\n      case 'day':\n        return this.forkDateTime(addUTCDays(this.date, amount));\n      case 'hour':\n        return this.forkDateTime(addUTCHours(this.date, amount));\n      case 'minute':\n        return this.forkDateTime(addUTCMinutes(this.date, amount));\n      case 'second':\n        return this.forkDateTime(addUTCSeconds(this.date, amount));\n      case 'millisecond':\n        return this.forkDateTime(addUTCMilliseconds(this.date, amount));\n      default:\n        throw new Error('Invalid unit provided to `DateTime#add`');\n    }\n  }\n  subtract(amount, unit) {\n    switch (unit) {\n      case 'year':\n        return this.forkDateTime(subUTCYears(this.date, amount));\n      case 'month':\n        return this.forkDateTime(subUTCMonths(this.date, amount));\n      case 'week':\n        return this.forkDateTime(subUTCWeeks(this.date, amount));\n      case 'day':\n        return this.forkDateTime(subUTCDays(this.date, amount));\n      case 'hour':\n        return this.forkDateTime(subUTCHours(this.date, amount));\n      case 'minute':\n        return this.forkDateTime(subUTCMinutes(this.date, amount));\n      case 'second':\n        return this.forkDateTime(subUTCSeconds(this.date, amount));\n      case 'millisecond':\n        return this.forkDateTime(subUTCMilliseconds(this.date, amount));\n      default:\n        throw new Error('Invalid unit provided to `DateTime#subtract`');\n    }\n  }\n  get(unit) {\n    switch (unit) {\n      case 'year':\n        return this.date.getUTCFullYear();\n      case 'month':\n        return this.date.getUTCMonth() + 1;\n      case 'yearday':\n        return getUTCYearDay(this.date);\n      case 'weekday':\n        return DateAdapter.WEEKDAYS[this.date.getUTCDay()];\n      case 'day':\n        return this.date.getUTCDate();\n      case 'hour':\n        return this.date.getUTCHours();\n      case 'minute':\n        return this.date.getUTCMinutes();\n      case 'second':\n        return this.date.getUTCSeconds();\n      case 'millisecond':\n        return this.date.getUTCMilliseconds();\n      default:\n        throw new Error('Invalid unit provided to `DateTime#set`');\n    }\n  }\n  set(unit, value) {\n    if (unit === 'duration') {\n      return new DateTime(this.date, this.timezone, value, this.generators);\n    }\n    if (unit === 'generators') {\n      return new DateTime(this.date, this.timezone, this.duration, value);\n    }\n    let date = new Date(this.date);\n    switch (unit) {\n      case 'year':\n        date.setUTCFullYear(value);\n        break;\n      case 'month': {\n        // If the current day of the month\n        // is greater than days in the month we are moving to, we need to also\n        // set the day to the end of that month.\n        const length = monthLength(value, date.getUTCFullYear());\n        const day = date.getUTCDate();\n        if (day > length) {\n          date.setUTCDate(1);\n          date.setUTCMonth(value);\n          date = subUTCDays(date, 1);\n        } else {\n          date.setUTCMonth(value - 1);\n        }\n        break;\n      }\n      case 'day':\n        date.setUTCDate(value);\n        break;\n      case 'hour':\n        date.setUTCHours(value);\n        break;\n      case 'minute':\n        date.setUTCMinutes(value);\n        break;\n      case 'second':\n        date.setUTCSeconds(value);\n        break;\n      case 'millisecond':\n        date.setUTCMilliseconds(value);\n        break;\n      default:\n        throw new Error('Invalid unit provided to `DateTime#set`');\n    }\n    return this.forkDateTime(date);\n  }\n  granularity(granularity, opt = {}) {\n    let date = this.forkDateTime(this.date);\n    switch (granularity) {\n      case 'year':\n        date = date.set('month', 1);\n      case 'month':\n        date = date.set('day', 1);\n        break;\n      case 'week':\n        date = setDateToStartOfWeek(date, opt.weekStart);\n    }\n    switch (granularity) {\n      case 'year':\n      case 'month':\n      case 'week':\n      case 'day':\n        date = date.set('hour', 0);\n      case 'hour':\n        date = date.set('minute', 0);\n      case 'minute':\n        date = date.set('second', 0);\n      case 'second':\n        date = date.set('millisecond', 0);\n      case 'millisecond':\n        return date;\n      default:\n        throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);\n    }\n  }\n  endGranularity(granularity, opt = {}) {\n    let date = this.forkDateTime(this.date);\n    switch (granularity) {\n      case 'year':\n        date = date.set('month', 12);\n      case 'month':\n        date = date.set('day', monthLength(date.get('month'), date.get('year')));\n        break;\n      case 'week':\n        date = setDateToEndOfWeek(date, opt.weekStart);\n    }\n    switch (granularity) {\n      case 'year':\n      case 'month':\n      case 'week':\n      case 'day':\n        date = date.set('hour', 23);\n      case 'hour':\n        date = date.set('minute', 59);\n      case 'minute':\n        date = date.set('second', 59);\n      case 'second':\n        date = date.set('millisecond', 999);\n      case 'millisecond':\n        return date;\n      default:\n        throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);\n    }\n  }\n  toISOString() {\n    return this.date.toISOString();\n  }\n  toDateTime() {\n    return this;\n  }\n  toJSON() {\n    const json = {\n      timezone: this.timezone,\n      year: this.get('year'),\n      month: this.get('month'),\n      day: this.get('day'),\n      hour: this.get('hour'),\n      minute: this.get('minute'),\n      second: this.get('second'),\n      millisecond: this.get('millisecond'),\n    };\n    if (this.duration) {\n      json.duration = this.duration;\n    }\n    return json;\n  }\n  valueOf() {\n    return this.date.valueOf();\n  }\n  assertIsValid() {\n    if (isNaN(this.valueOf())) {\n      throw new InvalidDateTimeError('DateTime has invalid date.');\n    }\n    return true;\n  }\n  forkDateTime(date) {\n    return new DateTime(date, this.timezone, this.duration, this.generators);\n  }\n}\nfunction assertSameTimeZone(x, y) {\n  if (x.timezone !== y.timezone) {\n    throw new InvalidDateTimeError(\n      'Attempted to compare a datetime to another date in a different timezone: ' +\n        JSON.stringify(x) +\n        ' and ' +\n        JSON.stringify(y),\n    );\n  }\n  return true;\n}\nfunction setDateToStartOfWeek(date, wkst) {\n  const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));\n  return date.subtract(index, 'day');\n}\nfunction setDateToEndOfWeek(date, wkst) {\n  const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));\n  return date.add(6 - index, 'day');\n}\nfunction orderedWeekdays(wkst = 'SU') {\n  const wkdays = DateAdapter.WEEKDAYS.slice();\n  let index = wkdays.indexOf(wkst);\n  while (index !== 0) {\n    shiftArray(wkdays);\n    index--;\n  }\n  return wkdays;\n}\nfunction shiftArray(array, from = 'first') {\n  if (array.length === 0) {\n    return array;\n  } else if (from === 'first') {\n    array.push(array.shift());\n  } else {\n    array.unshift(array.pop());\n  }\n  return array;\n}\n/**\n * Returns the days in the given month.\n *\n * @param month base-1\n * @param year\n */\nfunction monthLength(month, year) {\n  const block = {\n    1: 31,\n    2: getDaysInFebruary(year),\n    3: 31,\n    4: 30,\n    5: 31,\n    6: 30,\n    7: 31,\n    8: 31,\n    9: 30,\n    10: 31,\n    11: 30,\n    12: 31,\n  };\n  return block[month];\n}\nfunction getDaysInFebruary(year) {\n  return isLeapYear(year) ? 29 : 28;\n}\n// taken from date-fn\nfunction isLeapYear(year) {\n  return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\nfunction getUTCYearDay(now) {\n  const start = new Date(Date.UTC(now.getUTCFullYear(), 0, 1));\n  const diff = now.valueOf() - start.valueOf();\n  return 1 + Math.floor(diff / DateAdapter.MILLISECONDS_IN_DAY);\n}\n/**\n * These functions are basically lifted from `date-fns`, but changed\n * to use the UTC date methods, which `date-fns` doesn't support.\n */\nfunction toInteger(input) {\n  if (input === null || input === true || input === false) {\n    return NaN;\n  }\n  const int = Number(input);\n  if (isNaN(int)) {\n    return int;\n  }\n  return int < 0 ? Math.ceil(int) : Math.floor(int);\n}\nfunction addMilliseconds(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError('2 arguments required, but only ' + arguments.length + ' present');\n  }\n  const timestamp = dirtyDate.valueOf();\n  const amount = toInteger(dirtyAmount);\n  return new Date(timestamp + amount);\n}\nfunction addUTCYears(date, input) {\n  const amount = toInteger(input);\n  return addUTCMonths(date, amount * 12);\n}\nfunction addUTCMonths(date, input) {\n  const amount = toInteger(input);\n  date = new Date(date);\n  const desiredMonth = date.getUTCMonth() + amount;\n  const dateWithDesiredMonth = new Date(0);\n  dateWithDesiredMonth.setUTCFullYear(date.getUTCFullYear(), desiredMonth, 1);\n  dateWithDesiredMonth.setUTCHours(0, 0, 0, 0);\n  const daysInMonth = monthLength(\n    dateWithDesiredMonth.getUTCMonth() + 1,\n    dateWithDesiredMonth.getUTCFullYear(),\n  );\n  // Set the last day of the new month\n  // if the original date was the last day of the longer month\n  date.setUTCMonth(desiredMonth, Math.min(daysInMonth, date.getUTCDate()));\n  return date;\n}\nfunction addUTCWeeks(date, input) {\n  const amount = toInteger(input);\n  const days = amount * 7;\n  return addUTCDays(date, days);\n}\nfunction addUTCDays(date, input) {\n  // by adding milliseconds rather than days, we supress the native Date object's automatic\n  // daylight savings time conversions which we don't want in UTC mode\n  return addUTCMilliseconds(date, toInteger(input) * DateAdapter.MILLISECONDS_IN_DAY);\n}\nfunction addUTCHours(date, input) {\n  const amount = toInteger(input);\n  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_HOUR);\n}\nfunction addUTCMinutes(date, input) {\n  const amount = toInteger(input);\n  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_MINUTE);\n}\nfunction addUTCSeconds(date, input) {\n  const amount = toInteger(input);\n  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_SECOND);\n}\nfunction addUTCMilliseconds(date, input) {\n  const amount = toInteger(input);\n  const timestamp = date.getTime();\n  return new Date(timestamp + amount);\n}\nfunction subUTCYears(date, amount) {\n  return addUTCYears(date, -amount);\n}\nfunction subUTCMonths(date, amount) {\n  return addUTCMonths(date, -amount);\n}\nfunction subUTCWeeks(date, amount) {\n  return addUTCWeeks(date, -amount);\n}\nfunction subUTCDays(date, amount) {\n  return addUTCDays(date, -amount);\n}\nfunction subUTCHours(date, amount) {\n  return addUTCHours(date, -amount);\n}\nfunction subUTCMinutes(date, amount) {\n  return addUTCMinutes(date, -amount);\n}\nfunction subUTCSeconds(date, amount) {\n  return addUTCSeconds(date, -amount);\n}\nfunction subUTCMilliseconds(date, amount) {\n  return addUTCMilliseconds(date, -amount);\n}\n\n// export function normalizeDateInput<T extends DateAdapter>(\n//   dateAdapter: DateAdapterConstructor<T>,\n//   input: DateInput<T>,\n//   timezone: string | null,\n// ): DateTime {\n//   if (input instanceof DateTime) {\n//     if (input.timezone !== timezone) {\n//       return dateAdapter\n//         .fromDateTime(input)\n//         .set('timezone', timezone)\n//         .toDateTime();\n//     }\n//     return input;\n//   }\n//   return input instanceof DateAdapter\n//     ? input.set('timezone', timezone).toDateTime()\n//     : new dateAdapter(input).toDateTime();\n// }\nfunction normalizeDateTimeTimezone(date, timezone) {\n  if (date.timezone !== timezone) {\n    return DateAdapterBase.adapter\n      .fromDateTime(date)\n      .set('timezone', timezone)\n      .toDateTime();\n  }\n  return date;\n}\n\nclass RuleBase extends OccurrenceGenerator {\n  constructor(recurrenceRules, config, options = {}) {\n    super(options);\n    this.recurrenceRules = recurrenceRules;\n    this.options = cloneRuleOptions(config);\n    this.normOptions = normalizeRuleOptions(this.recurrenceRules, this.options);\n    this.timezone =\n      options.timezone !== undefined ? options.timezone : this.normOptions.start.timezone;\n    this.data = options.data;\n    this.hasDuration = !!config.duration;\n    if (this.hasDuration) this.duration = config.duration;\n    this.isInfinite = this.normOptions.end === undefined && this.normOptions.count === undefined;\n  }\n  occurrences(args = {}) {\n    return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));\n  }\n  collections(args = {}) {\n    return new CollectionIterator(this, this.normalizeCollectionsArgs(args));\n  }\n  *_run(rawArgs = {}) {\n    const args = this.normalizeRunArgs(rawArgs);\n    const iterator = new RecurrenceRulesIterator(\n      recurrenceRulesReducer(this.recurrenceRules),\n      this.normOptions,\n      args,\n    );\n    let date = iterator.next().value;\n    let index = 0;\n    while (date && (args.take === undefined || index < args.take)) {\n      index++;\n      date = date.add(this, 'generator');\n      const yieldArgs = yield this.normalizeRunOutput(date);\n      if (yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate) {\n        // The RecurrenceRuleIterator might have a different timezone from the rule.\n        // Because of this, the yieldArgs will not properly be normalized by the\n        // OccurrenceIterator, so we need to do it here\n        date = iterator.next(\n          Object.assign(Object.assign({}, yieldArgs), {\n            skipToDate: normalizeDateTimeTimezone(yieldArgs.skipToDate, iterator.start.timezone),\n          }),\n        ).value;\n      } else {\n        // theoretically, the yieldArgs are undefined here\n        // maybe in the future there will be other yieldArg options though\n        date = iterator.next(yieldArgs).value;\n      }\n    }\n    return undefined;\n  }\n}\n\nclass Rule extends RuleBase {\n  /**\n   * Create a new Rule object with the specified rule config and options.\n   *\n   * ### Options\n   *\n   * - **timezone**: the timezone that yielded occurrences should be in. Note,\n   *   this does not change the rule config. Occurrences are first found using\n   *   the unmodified rule config, and then converted to the timezone specified\n   *   here before being yielded.\n   * - **data**: arbitrary data you can associate with this rule. This\n   *   is the only mutable property of `Rule` objects.\n   *\n   * ### Rule Config\n   *\n   * - #### frequency\n   *\n   *   The frequency rule part identifies the type of recurrence rule. Valid values\n   *   include `\"SECONDLY\"`, `\"MINUTELY\"`, `\"HOURLY\"`, `\"DAILY\"`, `\"WEEKLY\"`,\n   *   `\"MONTHLY\"`, or `\"YEARLY\"`.\n   *\n   * - #### start\n   *\n   *   The start of the rule (not necessarily the first occurrence).\n   *   Either a `DateAdapter` instance, date object, or `DateTime` object.\n   *   The type of date object depends on the `DateAdapter` class used for this\n   *   `Rule`.\n   *\n   * - #### end?\n   *\n   *   The end of the rule (not necessarily the last occurrence).\n   *   Either a `DateAdapter` instance, date object, or `DateTime` object.\n   *   The type of date object depends on the `DateAdapter` class used for this\n   *   `Rule`.\n   *\n   * - #### duration?\n   *\n   *   A length of time expressed in milliseconds.\n   *\n   * - #### interval?\n   *\n   *   The interval rule part contains a positive integer representing at\n   *   which intervals the recurrence rule repeats. The default value is\n   *   `1`, meaning every second for a SECONDLY rule, every minute for a\n   *   MINUTELY rule, every hour for an HOURLY rule, every day for a\n   *   DAILY rule, every week for a WEEKLY rule, every month for a\n   *   MONTHLY rule, and every year for a YEARLY rule. For example,\n   *   within a DAILY rule, a value of `8` means every eight days.\n   *\n   * - #### count?\n   *\n   *   The count rule part defines the number of occurrences at which to\n   *   range-bound the recurrence. `count` and `end` are both two different\n   *   ways of specifying how a recurrence completes.\n   *\n   * - #### weekStart?\n   *\n   *   The weekStart rule part specifies the day on which the workweek starts.\n   *   Valid values are `\"MO\"`, `\"TU\"`, `\"WE\"`, `\"TH\"`, `\"FR\"`, `\"SA\"`, and `\"SU\"`.\n   *   This is significant when a WEEKLY rule has an interval greater than 1,\n   *   and a `byDayOfWeek` rule part is specified. The\n   *   default value is `\"MO\"`.\n   *\n   * - #### bySecondOfMinute?\n   *\n   *   The bySecondOfMinute rule part expects an array of seconds\n   *   within a minute. Valid values are 0 to 60.\n   *\n   * - #### byMinuteOfHour?\n   *\n   *   The byMinuteOfHour rule part expects an array of minutes within an hour.\n   *   Valid values are 0 to 59.\n   *\n   * - #### byHourOfDay?\n   *\n   *   The byHourOfDay rule part expects an array of hours of the day.\n   *   Valid values are 0 to 23.\n   *\n   * - #### byDayOfWeek?\n   *\n   *   *note: the byDayOfWeek rule part is kinda complex. Blame the ICAL spec.*\n   *\n   *   The byDayOfWeek rule part expects an array. Each array entry can\n   *   be a day of the week (`\"SU\"`, `\"MO\"` , `\"TU\"`, `\"WE\"`, `\"TH\"`,\n   *   `\"FR\"`, `\"SA\"`). If the rule's `frequency` is either MONTHLY or YEARLY,\n   *   Any entry can also be a tuple where the first value of the tuple is a\n   *   day of the week and the second value is an positive/negative integer\n   *   (e.g. `[\"SU\", 1]`). In this case, the number indicates the nth occurrence of\n   *   the specified day within the MONTHLY or YEARLY rule.\n   *\n   *   The behavior of byDayOfWeek changes depending on the `frequency`\n   *   of the rule.\n   *\n   *   Within a MONTHLY rule, `[\"MO\", 1]` represents the first Monday\n   *   within the month, whereas `[\"MO\", -1]` represents the last Monday\n   *   of the month.\n   *\n   *   Within a YEARLY rule, the numeric value in a byDayOfWeek tuple entry\n   *   corresponds to an offset within the month when the byMonthOfYear rule part is\n   *   present, and corresponds to an offset within the year otherwise.\n   *\n   *   Regardless of rule `frequency`, if a byDayOfWeek entry is a string\n   *   (rather than a tuple), it means \"all of these days\" within the specified\n   *   frequency (e.g. within a MONTHLY rule, `\"MO\"` represents all Mondays within\n   *   the month).\n   *\n   * - #### byDayOfMonth?\n   *\n   *   The byDayOfMonth rule part expects an array of days\n   *   of the month. Valid values are 1 to 31 or -31 to -1.\n   *\n   *   For example, -10 represents the tenth to the last day of the month.\n   *   The byDayOfMonth rule part *must not* be specified when the rule's\n   *   `frequency` is set to WEEKLY.\n   *\n   * - #### byMonthOfYear?\n   *\n   *   The byMonthOfYear rule part expects an array of months\n   *   of the year. Valid values are 1 to 12.\n   *\n   */\n  constructor(config, options = {}) {\n    super(Rule.recurrenceRules, config, options);\n  }\n  set(prop, value, tzoptions = {}) {\n    let options = cloneRuleOptions(this.options);\n    let timezone = this.timezone;\n    if (prop === 'timezone') {\n      if (value === this.timezone && !tzoptions.keepLocalTime) return this;\n      else if (tzoptions.keepLocalTime) {\n        const json = this.normalizeDateInput(options.start).toJSON();\n        json.timezone = value;\n        const adapter = this.dateAdapter.fromJSON(json);\n        // prettier-ignore\n        options.start =\n                    options.start instanceof this.dateAdapter ? adapter :\n                        options.start instanceof DateTime$1 ? adapter.toDateTime() :\n                            adapter.date;\n      }\n      timezone = value;\n    } else if (prop === 'options') {\n      options = value;\n    } else {\n      options[prop] = value;\n    }\n    return new Rule(options, {\n      data: this.data,\n      maxDuration: this.maxDuration,\n      timezone,\n    });\n  }\n}\nRule.recurrenceRules = [];\n\nclass ScheduleBase extends OccurrenceGenerator {\n  /**\n   * Create a new Schedule object with the specified options.\n   *\n   * The order of precidence for rrules, rdates, exrules, and exdates is:\n   *\n   * 1. rrules are included\n   * 2. exrules are excluded\n   * 3. rdates are included\n   * 4. exdates are excluded\n   *\n   */\n  constructor(options) {\n    super(options);\n    this.data = options.data;\n  }\n  occurrences(args = {}) {\n    return new OccurrenceIterator(this, this.normalizeOccurrencesArgs(args));\n  }\n  collections(args = {}) {\n    return new CollectionIterator(this, this.normalizeCollectionsArgs(args));\n  }\n  *_run(args = {}) {\n    const count = args.take;\n    delete args.take;\n    const iterator = this.occurrenceStream._run(args);\n    let date = iterator.next().value;\n    let index = 0;\n    while (date && (count === undefined || count > index)) {\n      date = date.add(this, 'generator');\n      const yieldArgs = yield this.normalizeRunOutput(date);\n      date = iterator.next(yieldArgs).value;\n      index++;\n    }\n    return undefined;\n  }\n}\n\n/**\n * An operator function which accepts a spread of occurrence generators\n * and removes their occurrences from the output.\n *\n * @param streams a spread of occurrence generators\n */\nfunction subtract(...streams) {\n  return options => new SubtractOperator(streams, options);\n}\nclass SubtractOperator extends Operator {\n  /** Not actually used but necessary for IRunnable interface */\n  set(_, value) {\n    return new SubtractOperator(\n      this.streams.map(stream => stream.set('timezone', value)),\n      Object.assign(Object.assign({}, this.config), {\n        base: this.config.base && this.config.base.set('timezone', value),\n        timezone: value,\n      }),\n    );\n  }\n  *_run(args = {}) {\n    if (!this.config.base) return;\n    const inclusion = new IterableWrapper(this.config.base, args);\n    const exclusion = new IterableWrapper(\n      new AddOperator(this.streams, {\n        timezone: this.config.timezone,\n      }),\n      args,\n    );\n    cycleStreams(inclusion, exclusion, args);\n    while (!inclusion.done) {\n      const yieldArgs = yield this.normalizeRunOutput(inclusion.value);\n      if (!(yieldArgs && yieldArgs.skipToDate)) {\n        inclusion.next();\n      }\n      cycleStreams(inclusion, exclusion, args, yieldArgs);\n    }\n  }\n  calculateIsInfinite() {\n    return !!(this.config.base && this.config.base.isInfinite);\n  }\n  calculateHasDuration() {\n    return !!(this.config.base && this.config.base.hasDuration);\n  }\n}\nfunction cycleStreams(inclusion, exclusion, options = {}, yieldArgs = {}) {\n  processYieldArgs([inclusion, exclusion], options, yieldArgs);\n  iterateExclusion(inclusion, exclusion, options);\n  while (!inclusion.done && !exclusion.done && inclusion.value.isEqual(exclusion.value)) {\n    inclusion.next();\n    iterateExclusion(inclusion, exclusion, options);\n  }\n}\nfunction iterateExclusion(inclusion, exclusion, options = {}) {\n  if (options.reverse) {\n    while (!exclusion.done && !inclusion.done && exclusion.value.isAfter(inclusion.value)) {\n      exclusion.next();\n    }\n    return;\n  }\n  while (!exclusion.done && !inclusion.done && exclusion.value.isBefore(inclusion.value)) {\n    exclusion.next();\n  }\n}\n\n/**\n * An operator function which deduplicates an occurrence stream. Occurrence\n * `duration` is currently ignored.\n */\nfunction unique() {\n  return options => new UniqueOperator([], options);\n}\nclass UniqueOperator extends Operator {\n  /** Not actually used but necessary for IRunnable interface */\n  set(_, value) {\n    return new UniqueOperator(\n      [],\n      Object.assign(Object.assign({}, this.config), {\n        base: this.config.base && this.config.base.set('timezone', value),\n        timezone: value,\n      }),\n    );\n  }\n  *_run(args = {}) {\n    if (!this.config.base) return;\n    const stream = new IterableWrapper(this.config.base, args);\n    while (!stream.done) {\n      const yieldArgs = yield this.normalizeRunOutput(stream.value);\n      const lastValue = stream.value;\n      // iterate the current stream\n      stream.next(yieldArgs);\n      while (\n        !(yieldArgs && yieldArgs.skipToDate) &&\n        !stream.done &&\n        stream.value.isEqual(lastValue)\n      ) {\n        stream.next();\n      }\n    }\n  }\n  calculateIsInfinite() {\n    return !!(this.config.base && this.config.base.isInfinite);\n  }\n  calculateHasDuration() {\n    return !!(this.config.base && this.config.base.hasDuration);\n  }\n}\n\nclass Schedule extends ScheduleBase {\n  /**\n   * Create a new Schedule object with the specified options.\n   *\n   * The order of precidence for rrules, rdates, exrules, and exdates is:\n   *\n   * 1. rrules are included\n   * 2. exrules are excluded\n   * 3. rdates are included\n   * 4. exdates are excluded\n   *\n   * ### Options\n   *\n   * - **timezone**: The timezone that yielded occurrences should be *displayed* in.\n   *   Note, this one affects the *displayed* timezone of yielded occurrences.\n   *   For rules, occurrences are first found using the unmodified rule\n   *   config (including whatever timezone the `start` datetime is defined\n   *   in), and then converted to the timezone specified here before being\n   *   yielded. By default, the timezone is *local* time (`null`). So if you don't\n   *   want your rules to be displayed in local time, you must supply a\n   *   timezone argument.\n   * - **data**: arbitrary data you can associate with this Schedule. This\n   *   is the only mutable property of `Schedule` objects.\n   * - **maxDuration**: currently unused.\n   * - **rrules**: rules specifying when occurrences happen. See the \"Rule Config\"\n   *   section below.\n   * - **rdates**: individual dates that should be _included_ in the schedule.\n   * - **exdates**: individual dates that should be _excluded_ from the schedule.\n   * - **exrules**: rules specifying when occurrences shouldn't happen. See the\n   *   \"Rule Config\" section below.\n   *\n   * ### Rule Config\n   *\n   * - #### frequency\n   *\n   *   The frequency rule part identifies the type of recurrence rule. Valid values\n   *   include `\"SECONDLY\"`, `\"MINUTELY\"`, `\"HOURLY\"`, `\"DAILY\"`, `\"WEEKLY\"`,\n   *   `\"MONTHLY\"`, or `\"YEARLY\"`.\n   *\n   * - #### start\n   *\n   *   The start of the rule (not necessarily the first occurrence).\n   *   Either a `DateAdapter` instance, date object, or `DateTime` object.\n   *   The type of date object depends on the `DateAdapter` class used for this\n   *   `Rule`.\n   *\n   * - #### end?\n   *\n   *   The end of the rule (not necessarily the last occurrence).\n   *   Either a `DateAdapter` instance, date object, or `DateTime` object.\n   *   The type of date object depends on the `DateAdapter` class used for this\n   *   `Rule`.\n   *\n   * - #### duration?\n   *\n   *   A length of time expressed in milliseconds.\n   *\n   * - #### interval?\n   *\n   *   The interval rule part contains a positive integer representing at\n   *   which intervals the recurrence rule repeats. The default value is\n   *   `1`, meaning every second for a SECONDLY rule, every minute for a\n   *   MINUTELY rule, every hour for an HOURLY rule, every day for a\n   *   DAILY rule, every week for a WEEKLY rule, every month for a\n   *   MONTHLY rule, and every year for a YEARLY rule. For example,\n   *   within a DAILY rule, a value of `8` means every eight days.\n   *\n   * - #### count?\n   *\n   *   The count rule part defines the number of occurrences at which to\n   *   range-bound the recurrence. `count` and `end` are both two different\n   *   ways of specifying how a recurrence completes.\n   *\n   * - #### weekStart?\n   *\n   *   The weekStart rule part specifies the day on which the workweek starts.\n   *   Valid values are `\"MO\"`, `\"TU\"`, `\"WE\"`, `\"TH\"`, `\"FR\"`, `\"SA\"`, and `\"SU\"`.\n   *   This is significant when a WEEKLY rule has an interval greater than 1,\n   *   and a `byDayOfWeek` rule part is specified. The\n   *   default value is `\"MO\"`.\n   *\n   * - #### bySecondOfMinute?\n   *\n   *   The bySecondOfMinute rule part expects an array of seconds\n   *   within a minute. Valid values are 0 to 60.\n   *\n   * - #### byMinuteOfHour?\n   *\n   *   The byMinuteOfHour rule part expects an array of minutes within an hour.\n   *   Valid values are 0 to 59.\n   *\n   * - #### byHourOfDay?\n   *\n   *   The byHourOfDay rule part expects an array of hours of the day.\n   *   Valid values are 0 to 23.\n   *\n   * - #### byDayOfWeek?\n   *\n   *   *note: the byDayOfWeek rule part is kinda complex. Blame the ICAL spec.*\n   *\n   *   The byDayOfWeek rule part expects an array. Each array entry can\n   *   be a day of the week (`\"SU\"`, `\"MO\"` , `\"TU\"`, `\"WE\"`, `\"TH\"`,\n   *   `\"FR\"`, `\"SA\"`). If the rule's `frequency` is either MONTHLY or YEARLY,\n   *   Any entry can also be a tuple where the first value of the tuple is a\n   *   day of the week and the second value is an positive/negative integer\n   *   (e.g. `[\"SU\", 1]`). In this case, the number indicates the nth occurrence of\n   *   the specified day within the MONTHLY or YEARLY rule.\n   *\n   *   The behavior of byDayOfWeek changes depending on the `frequency`\n   *   of the rule.\n   *\n   *   Within a MONTHLY rule, `[\"MO\", 1]` represents the first Monday\n   *   within the month, whereas `[\"MO\", -1]` represents the last Monday\n   *   of the month.\n   *\n   *   Within a YEARLY rule, the numeric value in a byDayOfWeek tuple entry\n   *   corresponds to an offset within the month when the byMonthOfYear rule part is\n   *   present, and corresponds to an offset within the year otherwise.\n   *\n   *   Regardless of rule `frequency`, if a byDayOfWeek entry is a string\n   *   (rather than a tuple), it means \"all of these days\" within the specified\n   *   frequency (e.g. within a MONTHLY rule, `\"MO\"` represents all Mondays within\n   *   the month).\n   *\n   * - #### byDayOfMonth?\n   *\n   *   The byDayOfMonth rule part expects an array of days\n   *   of the month. Valid values are 1 to 31 or -31 to -1.\n   *\n   *   For example, -10 represents the tenth to the last day of the month.\n   *   The byDayOfMonth rule part *must not* be specified when the rule's\n   *   `frequency` is set to WEEKLY.\n   *\n   * - #### byMonthOfYear?\n   *\n   *   The byMonthOfYear rule part expects an array of months\n   *   of the year. Valid values are 1 to 12.\n   *\n   */\n  constructor(options = {}) {\n    super(options);\n    this.rrules = [];\n    this.exrules = [];\n    for (const prop of ['rrules', 'exrules']) {\n      const arg = options[prop];\n      if (arg) {\n        this[prop] = arg.map(ruleArgs => {\n          if (ruleArgs instanceof Rule) {\n            return ruleArgs.set('timezone', this.timezone);\n          } else {\n            return new Rule(ruleArgs, {\n              timezone: this.timezone,\n            });\n          }\n        });\n      }\n    }\n    for (const prop of ['rdates', 'exdates']) {\n      const arg = options[prop];\n      if (arg) {\n        this[prop] =\n          arg instanceof Dates\n            ? arg.set('timezone', this.timezone)\n            : new Dates({\n                dates: arg,\n                timezone: this.timezone,\n              });\n      } else {\n        this[prop] = new Dates({\n          timezone: this.timezone,\n        });\n      }\n    }\n    this.hasDuration =\n      this.rrules.every(rule => rule.hasDuration) &&\n      this.exrules.every(rule => rule.hasDuration) &&\n      this.rdates.hasDuration &&\n      this.exdates.hasDuration;\n    this.isInfinite = this.rrules.some(rule => rule.isInfinite);\n    this.occurrenceStream = [\n      add(...this.rrules),\n      subtract(...this.exrules),\n      add(this.rdates),\n      subtract(this.exdates),\n      unique(),\n    ].reduce((prev, curr) => curr({ base: prev, timezone: this.timezone }), undefined);\n  }\n  add(prop, value) {\n    const rrules = this.rrules.slice();\n    const exrules = this.exrules.slice();\n    let rdates = this.rdates;\n    let exdates = this.exdates;\n    switch (prop) {\n      case 'rrule':\n        rrules.push(value);\n        break;\n      case 'exrule':\n        exrules.push(value);\n        break;\n      case 'rdate':\n        rdates = this.rdates.add(value);\n        break;\n      case 'exdate':\n        exdates = this.exdates.add(value);\n        break;\n    }\n    return new Schedule({\n      timezone: this.timezone,\n      data: this.data,\n      rrules,\n      exrules,\n      rdates,\n      exdates,\n    });\n  }\n  remove(prop, value) {\n    let rrules = this.rrules;\n    let exrules = this.exrules;\n    let rdates = this.rdates;\n    let exdates = this.exdates;\n    switch (prop) {\n      case 'rrule':\n        rrules = rrules.filter(rule => rule !== value);\n        break;\n      case 'exrule':\n        exrules = exrules.filter(rule => rule !== value);\n        break;\n      case 'rdate':\n        rdates = this.rdates.remove(value);\n        break;\n      case 'exdate':\n        exdates = this.exdates.remove(value);\n        break;\n    }\n    return new Schedule({\n      timezone: this.timezone,\n      data: this.data,\n      rrules,\n      exrules,\n      rdates,\n      exdates,\n    });\n  }\n  set(prop, value, options = {}) {\n    let timezone = this.timezone;\n    let rrules = this.rrules;\n    let exrules = this.exrules;\n    let rdates = this.rdates;\n    let exdates = this.exdates;\n    switch (prop) {\n      case 'timezone':\n        if (value === this.timezone && !options.keepLocalTime) return this;\n        else if (options.keepLocalTime) {\n          rrules = rrules.map(rule => rule.set('timezone', value, options));\n          exrules = exrules.map(rule => rule.set('timezone', value, options));\n          rdates = rdates.set('timezone', value, options);\n          exdates = exdates.set('timezone', value, options);\n        }\n        timezone = value;\n        break;\n      case 'rrules':\n        rrules = value;\n        break;\n      case 'exrules':\n        exrules = value;\n        break;\n      case 'rdates':\n        rdates = value;\n        break;\n      case 'exdates':\n        exdates = value;\n        break;\n    }\n    return new Schedule({\n      timezone,\n      data: this.data,\n      rrules,\n      exrules,\n      rdates,\n      exdates,\n    });\n  }\n}\n\n/**\n * An operator function, which takes a spread of occurrence generators and only\n * returns the dates which intersect every occurrence generator.\n *\n * Because it's possible for all the generators to never intersect,\n * and because the intersection operator can't detect this lack of intersection,\n * you must call `intersection()` with a `{maxFailedIterations: number}` argument.\n * For convenience, you can globally set `RScheduleConfig.defaultMaxFailedIterations`.\n * Without further information, I'd probably set `defaultMaxFailedIterations = 50`.\n *\n * The `maxFailedIterations` argument caps the number of iterations the operator will\n * run through without finding a single valid occurrence. If this number is reached, the operator will\n * stop iterating (preventing a possible infinite loop).\n *\n * - Note: `maxFailedIterations` caps the number of iterations which\n *   *fail to turn up a single valid occurrence*. Every time a valid occurrence is returned,\n *   the current iteration count is reset to 0.\n *\n */\nfunction intersection(args) {\n  return options => new IntersectionOperator(args, options);\n}\nclass IntersectionOperator extends Operator {\n  constructor(args, config) {\n    super(args.streams, config);\n    if (this.isInfinite) {\n      this.maxFailedIterations =\n        args.maxFailedIterations || IntersectionOperator.defaultMaxFailedIterations;\n      if (!this.maxFailedIterations) {\n        throw new ArgumentError(\n          'The IntersectionOperator must be provided ' +\n            'a `maxFailedIterations` argument when it is built from schedules of infinite length. ' +\n            'This argument is used to ensure that the IntersectionOperator does not enter ' +\n            'an infinite loop because the underlying schedules never intersect. ' +\n            'If the `maxFailedIterations` count is reached it will be assumed that ' +\n            'all valid occurrences have been found and iteration will end without error.' +\n            'Without additional information, \"50\" is probably a good ' +\n            '`maxFailedIterations` value. ' +\n            'If the schedules are not of infinite length, `maxFailedIterations` is ignored. ' +\n            'Note also that you can provide a `defaultMaxFailedIterations` number via ' +\n            'IntersectionOperator.defaultMaxFailedIterations.',\n        );\n      }\n    }\n  }\n  set(_, value) {\n    return new IntersectionOperator(\n      {\n        maxFailedIterations: this.maxFailedIterations,\n        streams: this.streams.map(stream => stream.set('timezone', value)),\n      },\n      Object.assign(Object.assign({}, this.config), {\n        base: this.config.base && this.config.base.set('timezone', value),\n        timezone: value,\n      }),\n    );\n  }\n  *_run(args = {}) {\n    const streams = this.streams.map(stream => new IterableWrapper(stream, args));\n    if (this.config.base) {\n      streams.push(new IterableWrapper(this.config.base, args));\n    }\n    if (streams.length === 0) return;\n    const hasEndDate = !!(!this.isInfinite || args.reverse || args.end);\n    if (\n      !cycleStreams$1(\n        streams,\n        undefined,\n        Object.assign(Object.assign({}, args), {\n          hasEndDate,\n          iteration: 0,\n          maxIterations: this.maxFailedIterations,\n        }),\n      )\n    ) {\n      return;\n    }\n    let stream = selectNextIterable(streams, args);\n    while (stream) {\n      const yieldArgs = yield this.normalizeRunOutput(stream.value);\n      const lastValidDate = stream.value;\n      if (!(yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate)) {\n        // iterate the current stream\n        stream.next();\n      }\n      if (\n        !cycleStreams$1(\n          streams,\n          lastValidDate,\n          Object.assign(Object.assign({}, args), {\n            hasEndDate,\n            iteration: 0,\n            maxIterations: this.maxFailedIterations,\n          }),\n          yieldArgs,\n        )\n      ) {\n        return;\n      }\n      // The call to `cycleStreams()`, above, has already called\n      // selectNextIterable with the `yieldArgs`\n      stream = selectNextIterable(streams, args);\n    }\n  }\n  calculateIsInfinite() {\n    // Note: Array#every() === true when length === 0\n    if (!this.config.base) {\n      if (this.streams.length === 0) return false;\n      return this.streams.every(stream => stream.isInfinite);\n    } else if (this.streams.length === 0) return this.config.base.isInfinite;\n    return this.config.base.isInfinite && this.streams.every(stream => stream.isInfinite);\n  }\n  calculateHasDuration() {\n    const streamsDuration = this.streams.every(stream => stream.hasDuration);\n    if (!this.config.base) return streamsDuration;\n    return this.config.base.hasDuration && streamsDuration;\n  }\n}\nfunction cycleStreams$1(streams, lastValidDate, options, yieldArgs) {\n  const next = selectNextIterable(streams, options, yieldArgs);\n  if (!next) return false;\n  if (lastValidDate && next.value.isEqual(lastValidDate)) return true;\n  if (streams.some(stream => stream.done)) return false;\n  if (streams.every(stream => stream.value.isEqual(next.value))) return true;\n  options.iteration++;\n  if (options.maxIterations && !options.hasEndDate && options.iteration > options.maxIterations) {\n    return false;\n  }\n  // Since not all of the streams are equal, we grab the last stream...\n  const last = selectLastIterable(streams, options);\n  // ...and skip all the other streams so they are equal or past the last one\n  streams.forEach(stream => {\n    // Because streams can have multiple, identical dates in a row,\n    // we don't want to `skipToDate` if the provided date is equal to the current date.\n    if (last.value.isEqual(stream.value)) return;\n    stream.next({ skipToDate: last.value });\n  });\n  // then we repeat\n  return cycleStreams$1(streams, lastValidDate, options);\n}\n\nclass DurationIterableWrapper extends IterableWrapper {\n  constructor(generator, runArgs) {\n    super(generator, runArgs);\n    this.workingValue = this.value;\n    this.next();\n  }\n}\nclass MergeDurationOperatorError extends Error {}\n/**\n * An operator function which takes an occurrence stream with\n * `hasDuration === true` and merges occurrences which have overlapping\n * start and end times.\n *\n * Because it's possible for all the occurrences in the stream to have\n * overlapping start and end times, you must provide a `maxDuration`\n * argument that represents the maximum possible duration for a single\n * occurrence. If this duration is exceeded, a `MergeDurationOperatorError`\n * will be thrown.\n *\n * - For your convenience, you can globally set a default\n *   `MergeDurationOperator#maxDuration` via\n *   `RScheduleConfig.MergeDurationOperator.defaultMaxDuration`.\n *\n * Usage example:\n *\n * ```typescript\n * const MILLISECONDS_IN_HOUR = 1000 * 60 * 60;\n *\n * const dates = new Dates({\n *   dates: [\n *     new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n *     new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 2 }),\n *     new StandardDateAdapter(new Date(2010, 10, 11, 14), { duration: MILLISECONDS_IN_HOUR * 2 }),\n *     new StandardDateAdapter(new Date(2010, 10, 12, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n *   ],\n *   dateAdpter: StandardDateAdapter,\n * }).pipe(\n *   mergeDuration({\n *     maxDuration: MILLISECONDS_IN_HOUR * 24\n *   })\n * )\n *\n * dates.occurrences().toArray() === [\n *   new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n *   new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 3 }),\n *   new StandardDateAdapter(new Date(2010, 10, 12, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n * ]\n * ```\n */\nfunction mergeDuration(args) {\n  return options => new MergeDurationOperator(args, options);\n}\nclass MergeDurationOperator extends Operator {\n  constructor(args, config) {\n    super([], config);\n    this.maxDuration = args.maxDuration;\n    if (config.base && !config.base.hasDuration) {\n      throw new ArgumentError(\n        'Base stream provided to MergeDurationOperator does not have an associated duration. ' +\n          'The MergeDurationOperator can only be used with streams which have a duration. ',\n      );\n    }\n  }\n  /** Not actually used but necessary for IRunnable interface */\n  set(_, value) {\n    return new MergeDurationOperator(\n      {\n        maxDuration: this.maxDuration,\n      },\n      Object.assign(Object.assign({}, this.config), {\n        base: this.config.base && this.config.base.set('timezone', value),\n        timezone: value,\n      }),\n    );\n  }\n  _run(args = {}) {\n    return args.reverse ? this.reverseRun(args) : this.forwardRun(args);\n  }\n  calculateIsInfinite() {\n    return !!(this.config.base && this.config.base.isInfinite);\n  }\n  calculateHasDuration() {\n    return true;\n  }\n  *forwardRun(args = {}) {\n    if (!this.config.base) return;\n    // We want to find occurrences that end after the provided\n    // `start` time even if they begin before the provided `start`\n    // time. Because of this, we must begin iterating `maxDuration`\n    // before the provided start time.\n    let checkFromStart = args.start;\n    if (args.start) {\n      checkFromStart = args.start.subtract(this.maxDuration, 'millisecond');\n    }\n    let checkFromEnd = args.end;\n    if (args.end) {\n      checkFromEnd = args.end.add(this.maxDuration, 'millisecond');\n    }\n    const stream = new DurationIterableWrapper(\n      this.config.base,\n      Object.assign(Object.assign({}, args), { start: checkFromStart, end: checkFromEnd }),\n    );\n    let yieldArgs;\n    // checking `stream.workingValue` because when `stream.done === true`\n    // `stream.workingValue` will not have been yielded yet\n    while (stream.workingValue) {\n      // TODO(@john.carroll.p): figure out how to handle `DateTime#generators` for merged `DateTimes`\n      while (!stream.done && stream.workingValue.end.isAfterOrEqual(stream.value)) {\n        if (stream.workingValue.duration > this.maxDuration) {\n          throw new MergeDurationOperatorError(\n            `MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` +\n              this.maxDuration,\n          );\n        }\n        if (stream.value.end.isAfter(stream.workingValue.end)) {\n          const diff = stream.value.end.valueOf() - stream.workingValue.end.valueOf();\n          stream.workingValue = stream.workingValue.set(\n            'duration',\n            stream.workingValue.duration + diff,\n          );\n        }\n        stream.next();\n      }\n      // check to make sure the occurrence we are about to yield ends after the\n      // provided start time.\n      if (args.start && stream.workingValue.end.isBefore(args.start)) {\n        stream.workingValue = stream.value;\n        stream.next();\n        continue;\n      }\n      // make sure the occurrence we are about to yield ends after the\n      // provided skipToDate\n      if (\n        (yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate) &&\n        stream.workingValue.end.isBefore(yieldArgs.skipToDate)\n      ) {\n        stream.workingValue = stream.value;\n        stream.next();\n        continue;\n      }\n      // make sure we are not after the user requested `end` time.\n      if (args.end && stream.workingValue && stream.workingValue.isAfter(args.end)) {\n        break;\n      }\n      if (stream.workingValue.duration > this.maxDuration) {\n        throw new MergeDurationOperatorError(\n          `MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` +\n            this.maxDuration,\n        );\n      }\n      yieldArgs = yield this.normalizeRunOutput(stream.workingValue);\n      if (\n        (yieldArgs === null || yieldArgs === void 0 ? void 0 : yieldArgs.skipToDate) &&\n        stream.workingValue.isAfterOrEqual(yieldArgs.skipToDate)\n      ) {\n        throw new Error(\n          'A provided `skipToDate` option must be greater than the last yielded date ' +\n            '(or smaller, in the case of reverse iteration)',\n        );\n      }\n      stream.workingValue = stream.value;\n      stream.next();\n    }\n  }\n  *reverseRun(args = {}) {\n    if (!this.config.base) return;\n    // We want to find occurrences that end after the provided\n    // `start` time even if they begin before the provided `start`\n    // time. Because of this, we must begin iterating `maxDuration`\n    // before the provided start time.\n    let checkFromStart = args.start;\n    if (args.start) {\n      checkFromStart = args.start.subtract(this.maxDuration, 'millisecond');\n    }\n    let checkFromEnd = args.end;\n    if (args.end) {\n      checkFromEnd = args.end.add(this.maxDuration, 'millisecond');\n    }\n    const stream = new DurationIterableWrapper(\n      this.config.base,\n      Object.assign(Object.assign({}, args), { start: checkFromStart, end: checkFromEnd }),\n    );\n    let yieldArgs;\n    // checking `stream.workingValue` because when `stream.done === true`\n    // `stream.workingValue` will not have been yielded yet\n    while (stream.workingValue) {\n      // TODO(@john.carroll.p): figure out how to handle `DateTime#generators` for merged `DateTimes`\n      while (!stream.done && stream.workingValue.isBeforeOrEqual(stream.value.end)) {\n        if (stream.workingValue.duration > this.maxDuration) {\n          throw new MergeDurationOperatorError(\n            `MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` +\n              this.maxDuration,\n          );\n        }\n        if (\n          stream.value.isBefore(stream.workingValue) ||\n          stream.value.end.isAfter(stream.workingValue.end)\n        ) {\n          if (stream.value.end.isAfter(stream.workingValue.end)) {\n            // `stream.workingValue` is a subset of `stream.value`\n            // so simply replace `stream.workingValue` with `stream.value`\n            stream.workingValue = stream.value;\n          } else {\n            const diff = stream.workingValue.valueOf() - stream.value.valueOf();\n            stream.workingValue = stream.value.set('duration', stream.workingValue.duration + diff);\n          }\n        }\n        stream.next();\n      }\n      // check to make sure the occurrence we are about to yield starts before the\n      // provided start time.\n      if (args.start && stream.workingValue.end.isBefore(args.start)) {\n        break;\n      }\n      if (\n        yieldArgs &&\n        yieldArgs.skipToDate &&\n        stream.workingValue.end.isBefore(yieldArgs.skipToDate)\n      ) {\n        stream.workingValue = stream.value;\n        stream.next();\n        continue;\n      }\n      // make sure we are not after the user requested `end` time.\n      if (args.end && stream.workingValue && stream.workingValue.isAfter(args.end)) {\n        stream.workingValue = stream.value;\n        stream.next();\n        continue;\n      }\n      if (stream.workingValue.duration > this.maxDuration) {\n        throw new MergeDurationOperatorError(\n          `MergeDurationOperatorError: Occurrence duration exceeded maxDuration of ` +\n            this.maxDuration,\n        );\n      }\n      yieldArgs = yield this.normalizeRunOutput(stream.workingValue);\n      if (\n        yieldArgs &&\n        yieldArgs.skipToDate &&\n        stream.workingValue.end.isBeforeOrEqual(yieldArgs.skipToDate)\n      ) {\n        throw new Error(\n          'A provided `skipToDate` option must be greater than the last yielded date ' +\n            '(or smaller, in the case of reverse iteration)',\n        );\n      }\n      stream.workingValue = stream.value;\n      stream.next();\n    }\n  }\n}\n\nclass SplitDurationOperatorError extends Error {}\n/**\n * An operator function which takes an occurrence stream with\n * `hasDuration === true` and passes occurrences through a splitting\n * function. One usecase for this operator is to dynamically break up\n * occurrences with a large duration into several smaller occurrences.\n *\n * You must provide a `maxDuration` argument that represents the\n * maximum possible duration for a single occurrence. If this\n * duration is exceeded, a `SplitDurationOperatorError` will be\n * thrown.\n *\n * - For your convenience, you can globally set a default\n *   `SplitDurationOperator#maxDuration` via\n *   `RScheduleConfig.SplitDurationOperator.defaultMaxDuration`.\n *\n * Usage example:\n *\n * ```typescript\n * const MILLISECONDS_IN_HOUR = 1000 * 60 * 60;\n *\n * const splitFn = (date: DateTime) => {\n *   if (date.duration > MILLISECONDS_IN_HOUR) {\n *     const diff = date.duration! / 2;\n *\n *     return [\n *       date.set('duration', diff),\n *       date.add(diff, 'millisecond').set('duration', diff),\n *     ];\n *   }\n *\n *   return [date];\n * };\n *\n * const dates = new Dates({\n *   dates: [\n *     new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n *     new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 2 }),\n *   ],\n *   dateAdpter: StandardDateAdapter,\n * }).pipe(\n *   splitDuration({\n *     splitFn,\n *     maxDuration: MILLISECONDS_IN_HOUR * 1\n *   })\n * )\n *\n * expect(dates.occurrences().toArray()).toEqual([\n *   new StandardDateAdapter(new Date(2010, 10, 10, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n *   new StandardDateAdapter(new Date(2010, 10, 11, 13), { duration: MILLISECONDS_IN_HOUR * 1 }),\n *   new StandardDateAdapter(new Date(2010, 10, 11, 14), { duration: MILLISECONDS_IN_HOUR * 1 }),\n * ])\n * ```\n */\nfunction splitDuration(args) {\n  return options => new SplitDurationOperator(args, options);\n}\nclass SplitDurationOperator extends Operator {\n  constructor(args, config) {\n    super([], config);\n    this.splitFn = args.splitFn;\n    this.maxDuration = args.maxDuration;\n    if (config.base && !config.base.hasDuration) {\n      throw new ArgumentError(\n        'Base stream provided to SplitDurationOperator does not have an associated duration. ' +\n          'The SplitDurationOperator can only be used with streams which have a duration.',\n      );\n    }\n  }\n  /** Not actually used but necessary for IRunnable interface */\n  set(_, value) {\n    return new SplitDurationOperator(\n      {\n        maxDuration: this.maxDuration,\n        splitFn: this.splitFn,\n      },\n      Object.assign(Object.assign({}, this.config), {\n        base: this.config.base && this.config.base.set('timezone', value),\n        timezone: value,\n      }),\n    );\n  }\n  *_run(args = {}) {\n    if (!this.config.base) return;\n    const reverse = args.reverse || false;\n    // We want to find occurrences that end after the provided\n    // `start` time even if they begin before the provided `start`\n    // time. Because of this, we add `maxDuration` to\n    // the provided start time.\n    let checkFromStart = args.start;\n    if (args.start) {\n      checkFromStart = args.start.subtract(this.maxDuration, 'millisecond');\n    }\n    // same goes for `end` time as with `start` time.\n    let checkFromEnd = args.end;\n    if (args.end) {\n      checkFromEnd = args.end.add(this.maxDuration, 'millisecond');\n    }\n    const stream = new IterableWrapper(\n      this.config.base,\n      Object.assign(Object.assign({}, args), { start: checkFromStart, end: checkFromEnd }),\n    );\n    let yieldArgs;\n    const datesBucket = [];\n    while (!stream.done || (datesBucket[0] && datesBucket[0][0])) {\n      /**\n       * Example:\n       * 10am - 2pm -> 10am - 12pm, 12pm - 2pm\n       * 11am - 3pm -> 11am - 1pm, 1pm - 3pm\n       * 2pm - 4pm -> 2pm - 3pm, 3pm - 4pm\n       */\n      if (!(datesBucket[0] && datesBucket[0][0])) {\n        // we're out of dates\n        datesBucket.push(this.splitDate(stream.value, reverse));\n        stream.next();\n      }\n      while (\n        !stream.done &&\n        (reverse\n          ? datesBucket[0].some(date => date.isBeforeOrEqual(stream.value.end))\n          : datesBucket[0].some(date => date.isAfterOrEqual(stream.value)))\n      ) {\n        datesBucket.push(this.splitDate(stream.value, reverse));\n        stream.next();\n      }\n      let selectedDate = datesBucket[0] && datesBucket[0][0];\n      let bucketIndex = -1;\n      let selectedBucketIndex = 0;\n      let dateIndex = -1;\n      let selectedDateIndex = 0;\n      // find the next date as well as its location in the datesBucket\n      for (const bucket of datesBucket) {\n        bucketIndex++;\n        dateIndex = -1;\n        for (const date of bucket) {\n          dateIndex++;\n          let dateShouldComeNext;\n          if (reverse) {\n            dateShouldComeNext =\n              date.isAfter(selectedDate) ||\n              (date.isEqual(selectedDate) && date.duration > selectedDate.duration);\n          } else {\n            dateShouldComeNext =\n              date.isBefore(selectedDate) ||\n              (date.isEqual(selectedDate) && date.duration < selectedDate.duration);\n          }\n          if (dateShouldComeNext) {\n            selectedDate = date;\n            selectedBucketIndex = bucketIndex;\n            selectedDateIndex = dateIndex;\n            break;\n          }\n        }\n      }\n      datesBucket[selectedBucketIndex].splice(selectedDateIndex, 1);\n      if (datesBucket[selectedBucketIndex].length === 0) {\n        datesBucket.splice(selectedBucketIndex, 1);\n      }\n      // If we've been yieldedArgs from the last cycle, check to see\n      // that the selectedDate honors the `skipToDate` requirement\n      // if not, discard this selectedDate\n      if (\n        yieldArgs &&\n        yieldArgs.skipToDate &&\n        selectedDate &&\n        !datePastEnd(selectedDate, args) &&\n        !datePastSkipToDate(selectedDate, yieldArgs.skipToDate, args)\n      ) {\n        continue;\n      }\n      // because we subtracted `maxDuration` to the base iterator's start time,\n      // check to make sure the selectedDate we are about to yield should\n      // actually be yielded (it may be before the provided `start` time).\n      // If not, discard the selectedDate.\n      if (args.start && selectedDate.end.isBefore(args.start)) {\n        if (reverse) break;\n        continue;\n      }\n      // because we added `maxDuration` to the base iterator's end time,\n      // check to make sure the selectedDate we are about to yield should\n      // actually be yielded (it may be after the provided `end` time).\n      // If not, end iteration.\n      if (args.end && selectedDate.isAfter(args.end)) {\n        if (reverse) continue;\n        break;\n      }\n      if (selectedDate.duration > this.maxDuration) {\n        throw new SplitDurationOperatorError(\n          `SplitDurationOperatorError: Occurrence duration exceeded maxDuration of ` +\n            this.maxDuration,\n        );\n      }\n      yieldArgs = yield this.normalizeRunOutput(selectedDate);\n      if (\n        yieldArgs &&\n        yieldArgs.skipToDate &&\n        (args.reverse\n          ? selectedDate.isBeforeOrEqual(yieldArgs.skipToDate)\n          : selectedDate.isAfterOrEqual(yieldArgs.skipToDate))\n      ) {\n        throw new Error(\n          'A provided `skipToDate` option must be greater than the last yielded date ' +\n            '(or smaller, in the case of reverse iteration)',\n        );\n      }\n    }\n  }\n  calculateIsInfinite() {\n    return !!(this.config.base && this.config.base.isInfinite);\n  }\n  calculateHasDuration() {\n    return true;\n  }\n  splitDate(date, reverse) {\n    const dates = this.splitFn(date);\n    let valid;\n    if (dates.length === 0) {\n      valid = false;\n    } else if (dates.length === 1) {\n      valid = date.duration === dates[0].duration;\n    } else {\n      valid = date.duration === dates.reduce((prev, curr) => prev + curr.duration, 0);\n    }\n    if (!valid) {\n      throw new Error(\n        'The provided SplitDurationOperator split function ' +\n          'must return an array of DateTimes with length > 0 ' +\n          'where the total duration of the new dates equals the duration of ' +\n          'the original date.',\n      );\n    }\n    dates.sort(dateTimeSortComparer);\n    if (reverse) {\n      dates.reverse();\n    }\n    return dates;\n  }\n}\nfunction datePastEnd(date, options) {\n  return !!(options.reverse\n    ? options.start && date.isBefore(options.start)\n    : options.end && date.isAfter(options.end));\n}\nfunction datePastSkipToDate(date, skipToDate, options) {\n  return !!(options.reverse ? skipToDate.isAfterOrEqual(date) : skipToDate.isBeforeOrEqual(date));\n}\n\nexport {\n  AddOperator,\n  Calendar,\n  Collection,\n  CollectionIterator,\n  Dates,\n  IntersectionOperator,\n  MergeDurationOperator,\n  MergeDurationOperatorError,\n  OccurrenceGenerator,\n  OccurrenceIterator,\n  Operator,\n  Rule,\n  RuleBase,\n  Schedule,\n  ScheduleBase,\n  SplitDurationOperator,\n  SplitDurationOperatorError,\n  SubtractOperator,\n  UniqueOperator,\n  add,\n  intersection,\n  mergeDuration,\n  splitDuration,\n  subtract,\n  unique,\n};\n","class InvalidDateAdapterError extends Error {}\nlet dateAdapterConfig;\nclass DateAdapterBase {\n  constructor(_date, options) {\n    this.duration = (options && options.duration) || 0;\n    this.generators = (options && options.generators && options.generators.slice()) || [];\n    if (!Number.isInteger(this.duration) || this.duration < 0) {\n      throw new InvalidDateAdapterError('duration must be a non-negative integer');\n    }\n  }\n  static set adapter(value) {\n    if (dateAdapterConfig) {\n      throw new Error(`\"${dateAdapterConfig.name}\" has already been configured.`);\n    }\n    dateAdapterConfig = value;\n  }\n  static get adapter() {\n    if (!dateAdapterConfig) {\n      throw new Error('No date adapter has been configured. See rSchedule docs.');\n    }\n    return dateAdapterConfig;\n  }\n  static isDate(_object) {\n    throw unimplementedError('isDate()');\n  }\n  static fromDate(_date, _options) {\n    throw unimplementedError('fromDate()');\n  }\n  static fromJSON(_json) {\n    throw unimplementedError('fromJSON()');\n  }\n  static fromDateTime(_datetime) {\n    throw unimplementedError('fromDateTime()');\n  }\n  /**\n   * Returns a string in simplified extended ISO format (ISO 8601).\n   *\n   * _Note: this method is intended for testing and its\n   * implementation isn't particularly performant._\n   */\n  toISOString() {\n    return this.set('timezone', 'UTC')\n      .toDateTime()\n      .toISOString();\n  }\n  toDateTime() {\n    const date = DateTime.fromJSON(\n      Object.assign(Object.assign({}, this.toJSON()), { generators: this.generators }),\n    );\n    return date;\n  }\n}\nDateAdapterBase.hasTimezoneSupport = false;\nfunction unimplementedError(name) {\n  return new Error(`You must implement the \"${name}\" method for this DateAdapter class`);\n}\nvar DateAdapter;\n(function(DateAdapter) {\n  DateAdapter.WEEKDAYS = ['SU', 'MO', 'TU', 'WE', 'TH', 'FR', 'SA'];\n  DateAdapter.MILLISECONDS_IN_SECOND = 1000;\n  DateAdapter.MILLISECONDS_IN_MINUTE = DateAdapter.MILLISECONDS_IN_SECOND * 60;\n  DateAdapter.MILLISECONDS_IN_HOUR = DateAdapter.MILLISECONDS_IN_MINUTE * 60;\n  DateAdapter.MILLISECONDS_IN_DAY = DateAdapter.MILLISECONDS_IN_HOUR * 24;\n  DateAdapter.MILLISECONDS_IN_WEEK = DateAdapter.MILLISECONDS_IN_DAY * 7;\n})(DateAdapter || (DateAdapter = {}));\nclass InvalidDateTimeError extends Error {}\nclass DateTime {\n  constructor(date, timezone, duration, generators) {\n    this.date = new Date(date);\n    this.timezone = timezone || null;\n    this.duration = duration || 0;\n    this.generators = (generators && generators.slice()) || [];\n    if (!Number.isInteger(this.duration) || this.duration < 0) {\n      throw new InvalidDateTimeError('duration must be a non-negative integer');\n    }\n    this.assertIsValid();\n  }\n  // /**\n  //  * Similar to `Array.isArray()`, `isInstance()` provides a surefire method\n  //  * of determining if an object is a `DateTime` by checking against the\n  //  * global symbol registry.\n  //  */\n  // static isInstance(object: any): object is DateTime {\n  //   return !!(object && object[DATETIME_ID]);\n  // }\n  static fromJSON(json) {\n    const date = new Date(\n      Date.UTC(\n        json.year,\n        json.month - 1,\n        json.day,\n        json.hour,\n        json.minute,\n        json.second,\n        json.millisecond,\n      ),\n    );\n    return new DateTime(date, json.timezone, json.duration, json.generators);\n  }\n  static fromDateAdapter(adapter) {\n    return DateTime.fromJSON(\n      Object.assign(Object.assign({}, adapter.toJSON()), { generators: adapter.generators }),\n    );\n  }\n  /**\n   * Returns `undefined` if `duration` is `0`. Else returns\n   * the `end` date.\n   */\n  get end() {\n    if (!this.duration) return;\n    if (this._end) return this._end;\n    this._end = this.add(this.duration, 'millisecond');\n    return this._end;\n  }\n  // While we constrain the argument to be another DateAdapter in typescript\n  // we handle the case of someone passing in another type of object in javascript\n  isEqual(object) {\n    if (!object) {\n      return false;\n    }\n    assertSameTimeZone(this, object);\n    return this.valueOf() === object.valueOf();\n  }\n  isBefore(object) {\n    assertSameTimeZone(this, object);\n    return this.valueOf() < object.valueOf();\n  }\n  isBeforeOrEqual(object) {\n    assertSameTimeZone(this, object);\n    return this.valueOf() <= object.valueOf();\n  }\n  isAfter(object) {\n    assertSameTimeZone(this, object);\n    return this.valueOf() > object.valueOf();\n  }\n  isAfterOrEqual(object) {\n    assertSameTimeZone(this, object);\n    return this.valueOf() >= object.valueOf();\n  }\n  isOccurring(object) {\n    if (!this.duration) {\n      throw new Error('DateTime#isOccurring() is only applicable to DateTimes with durations');\n    }\n    assertSameTimeZone(this, object);\n    return (\n      object.isAfterOrEqual(this) && object.isBeforeOrEqual(this.add(this.duration, 'millisecond'))\n    );\n  }\n  add(amount, unit) {\n    switch (unit) {\n      case 'generator': {\n        const generators = this.generators.slice();\n        generators.unshift(amount);\n        return new DateTime(this.date, this.timezone, this.duration, generators);\n      }\n      case 'year':\n        return this.forkDateTime(addUTCYears(this.date, amount));\n      case 'month':\n        return this.forkDateTime(addUTCMonths(this.date, amount));\n      case 'week':\n        return this.forkDateTime(addUTCWeeks(this.date, amount));\n      case 'day':\n        return this.forkDateTime(addUTCDays(this.date, amount));\n      case 'hour':\n        return this.forkDateTime(addUTCHours(this.date, amount));\n      case 'minute':\n        return this.forkDateTime(addUTCMinutes(this.date, amount));\n      case 'second':\n        return this.forkDateTime(addUTCSeconds(this.date, amount));\n      case 'millisecond':\n        return this.forkDateTime(addUTCMilliseconds(this.date, amount));\n      default:\n        throw new Error('Invalid unit provided to `DateTime#add`');\n    }\n  }\n  subtract(amount, unit) {\n    switch (unit) {\n      case 'year':\n        return this.forkDateTime(subUTCYears(this.date, amount));\n      case 'month':\n        return this.forkDateTime(subUTCMonths(this.date, amount));\n      case 'week':\n        return this.forkDateTime(subUTCWeeks(this.date, amount));\n      case 'day':\n        return this.forkDateTime(subUTCDays(this.date, amount));\n      case 'hour':\n        return this.forkDateTime(subUTCHours(this.date, amount));\n      case 'minute':\n        return this.forkDateTime(subUTCMinutes(this.date, amount));\n      case 'second':\n        return this.forkDateTime(subUTCSeconds(this.date, amount));\n      case 'millisecond':\n        return this.forkDateTime(subUTCMilliseconds(this.date, amount));\n      default:\n        throw new Error('Invalid unit provided to `DateTime#subtract`');\n    }\n  }\n  get(unit) {\n    switch (unit) {\n      case 'year':\n        return this.date.getUTCFullYear();\n      case 'month':\n        return this.date.getUTCMonth() + 1;\n      case 'yearday':\n        return getUTCYearDay(this.date);\n      case 'weekday':\n        return DateAdapter.WEEKDAYS[this.date.getUTCDay()];\n      case 'day':\n        return this.date.getUTCDate();\n      case 'hour':\n        return this.date.getUTCHours();\n      case 'minute':\n        return this.date.getUTCMinutes();\n      case 'second':\n        return this.date.getUTCSeconds();\n      case 'millisecond':\n        return this.date.getUTCMilliseconds();\n      default:\n        throw new Error('Invalid unit provided to `DateTime#set`');\n    }\n  }\n  set(unit, value) {\n    if (unit === 'duration') {\n      return new DateTime(this.date, this.timezone, value, this.generators);\n    }\n    if (unit === 'generators') {\n      return new DateTime(this.date, this.timezone, this.duration, value);\n    }\n    let date = new Date(this.date);\n    switch (unit) {\n      case 'year':\n        date.setUTCFullYear(value);\n        break;\n      case 'month': {\n        // If the current day of the month\n        // is greater than days in the month we are moving to, we need to also\n        // set the day to the end of that month.\n        const length = monthLength(value, date.getUTCFullYear());\n        const day = date.getUTCDate();\n        if (day > length) {\n          date.setUTCDate(1);\n          date.setUTCMonth(value);\n          date = subUTCDays(date, 1);\n        } else {\n          date.setUTCMonth(value - 1);\n        }\n        break;\n      }\n      case 'day':\n        date.setUTCDate(value);\n        break;\n      case 'hour':\n        date.setUTCHours(value);\n        break;\n      case 'minute':\n        date.setUTCMinutes(value);\n        break;\n      case 'second':\n        date.setUTCSeconds(value);\n        break;\n      case 'millisecond':\n        date.setUTCMilliseconds(value);\n        break;\n      default:\n        throw new Error('Invalid unit provided to `DateTime#set`');\n    }\n    return this.forkDateTime(date);\n  }\n  granularity(granularity, opt = {}) {\n    let date = this.forkDateTime(this.date);\n    switch (granularity) {\n      case 'year':\n        date = date.set('month', 1);\n      case 'month':\n        date = date.set('day', 1);\n        break;\n      case 'week':\n        date = setDateToStartOfWeek(date, opt.weekStart);\n    }\n    switch (granularity) {\n      case 'year':\n      case 'month':\n      case 'week':\n      case 'day':\n        date = date.set('hour', 0);\n      case 'hour':\n        date = date.set('minute', 0);\n      case 'minute':\n        date = date.set('second', 0);\n      case 'second':\n        date = date.set('millisecond', 0);\n      case 'millisecond':\n        return date;\n      default:\n        throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);\n    }\n  }\n  endGranularity(granularity, opt = {}) {\n    let date = this.forkDateTime(this.date);\n    switch (granularity) {\n      case 'year':\n        date = date.set('month', 12);\n      case 'month':\n        date = date.set('day', monthLength(date.get('month'), date.get('year')));\n        break;\n      case 'week':\n        date = setDateToEndOfWeek(date, opt.weekStart);\n    }\n    switch (granularity) {\n      case 'year':\n      case 'month':\n      case 'week':\n      case 'day':\n        date = date.set('hour', 23);\n      case 'hour':\n        date = date.set('minute', 59);\n      case 'minute':\n        date = date.set('second', 59);\n      case 'second':\n        date = date.set('millisecond', 999);\n      case 'millisecond':\n        return date;\n      default:\n        throw new Error('Invalid granularity provided to `DateTime#granularity`: ' + granularity);\n    }\n  }\n  toISOString() {\n    return this.date.toISOString();\n  }\n  toDateTime() {\n    return this;\n  }\n  toJSON() {\n    const json = {\n      timezone: this.timezone,\n      year: this.get('year'),\n      month: this.get('month'),\n      day: this.get('day'),\n      hour: this.get('hour'),\n      minute: this.get('minute'),\n      second: this.get('second'),\n      millisecond: this.get('millisecond'),\n    };\n    if (this.duration) {\n      json.duration = this.duration;\n    }\n    return json;\n  }\n  valueOf() {\n    return this.date.valueOf();\n  }\n  assertIsValid() {\n    if (isNaN(this.valueOf())) {\n      throw new InvalidDateTimeError('DateTime has invalid date.');\n    }\n    return true;\n  }\n  forkDateTime(date) {\n    return new DateTime(date, this.timezone, this.duration, this.generators);\n  }\n}\nfunction assertSameTimeZone(x, y) {\n  if (x.timezone !== y.timezone) {\n    throw new InvalidDateTimeError(\n      'Attempted to compare a datetime to another date in a different timezone: ' +\n        JSON.stringify(x) +\n        ' and ' +\n        JSON.stringify(y),\n    );\n  }\n  return true;\n}\nfunction setDateToStartOfWeek(date, wkst) {\n  const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));\n  return date.subtract(index, 'day');\n}\nfunction setDateToEndOfWeek(date, wkst) {\n  const index = orderedWeekdays(wkst).indexOf(date.get('weekday'));\n  return date.add(6 - index, 'day');\n}\nfunction dateTimeSortComparer(a, b) {\n  if (a.isAfter(b)) return 1;\n  if (a.isBefore(b)) return -1;\n  if (a.duration && b.duration) {\n    if (a.duration > b.duration) return 1;\n    if (a.duration < b.duration) return -1;\n  }\n  return 0;\n}\nfunction uniqDateTimes(dates) {\n  return Array.from(new Map(dates.map(date => [date.toISOString(), date])).values());\n}\nfunction orderedWeekdays(wkst = 'SU') {\n  const wkdays = DateAdapter.WEEKDAYS.slice();\n  let index = wkdays.indexOf(wkst);\n  while (index !== 0) {\n    shiftArray(wkdays);\n    index--;\n  }\n  return wkdays;\n}\nfunction shiftArray(array, from = 'first') {\n  if (array.length === 0) {\n    return array;\n  } else if (from === 'first') {\n    array.push(array.shift());\n  } else {\n    array.unshift(array.pop());\n  }\n  return array;\n}\nfunction getDifferenceBetweenWeekdays(x, y) {\n  if (x === y) return 0;\n  const result = DateAdapter.WEEKDAYS.indexOf(x) - DateAdapter.WEEKDAYS.indexOf(y);\n  return result > 0 ? 7 - result : Math.abs(result);\n}\n/**\n * Returns the days in the given month.\n *\n * @param month base-1\n * @param year\n */\nfunction monthLength(month, year) {\n  const block = {\n    1: 31,\n    2: getDaysInFebruary(year),\n    3: 31,\n    4: 30,\n    5: 31,\n    6: 30,\n    7: 31,\n    8: 31,\n    9: 30,\n    10: 31,\n    11: 30,\n    12: 31,\n  };\n  return block[month];\n}\nfunction getDaysInFebruary(year) {\n  return isLeapYear(year) ? 29 : 28;\n}\n// taken from date-fn\nfunction isLeapYear(year) {\n  return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\nfunction getDaysInYear(year) {\n  return isLeapYear(year) ? 366 : 365;\n}\nfunction getUTCYearDay(now) {\n  const start = new Date(Date.UTC(now.getUTCFullYear(), 0, 1));\n  const diff = now.valueOf() - start.valueOf();\n  return 1 + Math.floor(diff / DateAdapter.MILLISECONDS_IN_DAY);\n}\n/**\n * These functions are basically lifted from `date-fns`, but changed\n * to use the UTC date methods, which `date-fns` doesn't support.\n */\nfunction toInteger(input) {\n  if (input === null || input === true || input === false) {\n    return NaN;\n  }\n  const int = Number(input);\n  if (isNaN(int)) {\n    return int;\n  }\n  return int < 0 ? Math.ceil(int) : Math.floor(int);\n}\nfunction addMilliseconds(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError('2 arguments required, but only ' + arguments.length + ' present');\n  }\n  const timestamp = dirtyDate.valueOf();\n  const amount = toInteger(dirtyAmount);\n  return new Date(timestamp + amount);\n}\nfunction addUTCYears(date, input) {\n  const amount = toInteger(input);\n  return addUTCMonths(date, amount * 12);\n}\nfunction addUTCMonths(date, input) {\n  const amount = toInteger(input);\n  date = new Date(date);\n  const desiredMonth = date.getUTCMonth() + amount;\n  const dateWithDesiredMonth = new Date(0);\n  dateWithDesiredMonth.setUTCFullYear(date.getUTCFullYear(), desiredMonth, 1);\n  dateWithDesiredMonth.setUTCHours(0, 0, 0, 0);\n  const daysInMonth = monthLength(\n    dateWithDesiredMonth.getUTCMonth() + 1,\n    dateWithDesiredMonth.getUTCFullYear(),\n  );\n  // Set the last day of the new month\n  // if the original date was the last day of the longer month\n  date.setUTCMonth(desiredMonth, Math.min(daysInMonth, date.getUTCDate()));\n  return date;\n}\nfunction addUTCWeeks(date, input) {\n  const amount = toInteger(input);\n  const days = amount * 7;\n  return addUTCDays(date, days);\n}\nfunction addUTCDays(date, input) {\n  // by adding milliseconds rather than days, we supress the native Date object's automatic\n  // daylight savings time conversions which we don't want in UTC mode\n  return addUTCMilliseconds(date, toInteger(input) * DateAdapter.MILLISECONDS_IN_DAY);\n}\nfunction addUTCHours(date, input) {\n  const amount = toInteger(input);\n  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_HOUR);\n}\nfunction addUTCMinutes(date, input) {\n  const amount = toInteger(input);\n  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_MINUTE);\n}\nfunction addUTCSeconds(date, input) {\n  const amount = toInteger(input);\n  return addMilliseconds(date, amount * DateAdapter.MILLISECONDS_IN_SECOND);\n}\nfunction addUTCMilliseconds(date, input) {\n  const amount = toInteger(input);\n  const timestamp = date.getTime();\n  return new Date(timestamp + amount);\n}\nfunction subUTCYears(date, amount) {\n  return addUTCYears(date, -amount);\n}\nfunction subUTCMonths(date, amount) {\n  return addUTCMonths(date, -amount);\n}\nfunction subUTCWeeks(date, amount) {\n  return addUTCWeeks(date, -amount);\n}\nfunction subUTCDays(date, amount) {\n  return addUTCDays(date, -amount);\n}\nfunction subUTCHours(date, amount) {\n  return addUTCHours(date, -amount);\n}\nfunction subUTCMinutes(date, amount) {\n  return addUTCMinutes(date, -amount);\n}\nfunction subUTCSeconds(date, amount) {\n  return addUTCSeconds(date, -amount);\n}\nfunction subUTCMilliseconds(date, amount) {\n  return addUTCMilliseconds(date, -amount);\n}\n\nclass ArgumentError extends Error {}\nclass InfiniteLoopError extends Error {}\nfunction numberSortComparer(a, b) {\n  if (a > b) {\n    return 1;\n  } else if (b > a) {\n    return -1;\n  } else {\n    return 0;\n  }\n}\nfunction freqToGranularity(freq) {\n  switch (freq) {\n    case 'YEARLY':\n      return 'year';\n    case 'MONTHLY':\n      return 'month';\n    case 'WEEKLY':\n      return 'week';\n    case 'DAILY':\n      return 'day';\n    case 'HOURLY':\n      return 'hour';\n    case 'MINUTELY':\n      return 'minute';\n    case 'SECONDLY':\n      return 'second';\n    case 'MILLISECONDLY':\n      return 'millisecond';\n    default:\n      throw new Error('unknown freq passed to freqToGranularity()');\n  }\n}\nfunction cloneJSON(json) {\n  return JSON.parse(JSON.stringify(json));\n}\nfunction dateInputToDateAdapter(date) {\n  // prettier-ignore\n  return date instanceof DateTime ? DateAdapterBase.adapter.fromDateTime(date) :\n        date instanceof DateAdapterBase ? date :\n            DateAdapterBase.adapter.fromDate(date);\n}\nfunction dateInputToDateTime(date, timezone) {\n  if (date instanceof DateTime) {\n    if (date.timezone !== timezone) {\n      return DateAdapterBase.adapter\n        .fromDateTime(date)\n        .set('timezone', timezone)\n        .toDateTime();\n    }\n    return date;\n  }\n  return date instanceof DateAdapterBase\n    ? date.set('timezone', timezone).toDateTime()\n    : DateAdapterBase.adapter\n        .fromDate(date)\n        .set('timezone', timezone)\n        .toDateTime();\n}\n// export function normalizeDateInput<T extends DateAdapter>(\n//   dateAdapter: DateAdapterConstructor<T>,\n//   input: DateInput<T>,\n//   timezone: string | null,\n// ): DateTime {\n//   if (input instanceof DateTime) {\n//     if (input.timezone !== timezone) {\n//       return dateAdapter\n//         .fromDateTime(input)\n//         .set('timezone', timezone)\n//         .toDateTime();\n//     }\n//     return input;\n//   }\n//   return input instanceof DateAdapter\n//     ? input.set('timezone', timezone).toDateTime()\n//     : new dateAdapter(input).toDateTime();\n// }\nfunction normalizeDateTimeTimezone(date, timezone) {\n  if (date.timezone !== timezone) {\n    return DateAdapterBase.adapter\n      .fromDateTime(date)\n      .set('timezone', timezone)\n      .toDateTime();\n  }\n  return date;\n}\n\nclass RuleOptionError extends Error {}\nfunction normalizeDefaultOptions(options) {\n  let start;\n  if (options.start instanceof DateTime) {\n    start = options.start;\n  } else if (options.start instanceof DateAdapterBase) {\n    start = options.start.toDateTime();\n  } else if (DateAdapterBase.adapter.isDate(options.start)) {\n    start = DateAdapterBase.adapter.fromDate(options.start).toDateTime();\n  } else {\n    throw new RuleOptionError(\n      '\"start\" must be either a `DateAdapter` instance or an instance of the ' +\n        'date a DateAdapter is wrapping (e.g. `StandardDateAdapter` wraps a `Date`)',\n    );\n  }\n  let end;\n  if (options.end) {\n    if (options.end instanceof DateTime) {\n      end = options.end;\n    } else if (options.end instanceof DateAdapterBase) {\n      end = options.end.toDateTime();\n    } else if (DateAdapterBase.adapter.isDate(options.end)) {\n      end = DateAdapterBase.adapter.fromDate(options.end).toDateTime();\n    } else {\n      throw new RuleOptionError(\n        '\"end\" must be either be `undefined`, a `DateAdapter` instance, or an instance of the ' +\n          'date a DateAdapter is wrapping (e.g. `StandardDateAdapter` wraps a `Date`)',\n      );\n    }\n  }\n  if (options.duration !== undefined) {\n    if (!Number.isInteger(options.duration)) {\n      throw new RuleOptionError('\"duration\" expects a whole number');\n    }\n    if (options.duration <= 0) {\n      throw new RuleOptionError('\"duration\" must be greater than 0');\n    }\n  }\n  if (options.count !== undefined) {\n    if (!Number.isInteger(options.count)) {\n      throw new RuleOptionError('\"count\" must be a whole number');\n    }\n    if (options.count < 0) {\n      throw new RuleOptionError('\"count\" must be greater than 0');\n    }\n  }\n  if (options.end !== undefined && options.count !== undefined) {\n    throw new RuleOptionError('\"end\" and \"count\" cannot both be present');\n  }\n  return {\n    start,\n    end,\n    count: options.count,\n    duration: options.duration,\n  };\n}\nfunction normalizeRuleOptions(recurrenceModules, options) {\n  const normOptions = normalizeDefaultOptions(options);\n  const startOptions = cloneJSON(options);\n  recurrenceModules.forEach(mod => {\n    mod.normalizeOptions(startOptions, normOptions);\n  });\n  Object.keys(normOptions).forEach(key => {\n    if (normOptions[key] === undefined) {\n      delete normOptions[key];\n    }\n  });\n  return normOptions;\n}\nfunction cloneRuleOptions(options) {\n  const obj = cloneJSON(options);\n  obj.start = options.start;\n  if (options.end) obj.end = options.end;\n  return obj;\n}\n\nclass RecurrenceRuleError extends Error {}\nclass ValidDateTime {\n  constructor(date) {\n    this.date = date;\n  }\n}\nclass InvalidDateTime {\n  constructor(date) {\n    this.date = date;\n  }\n}\nfunction recurrenceRulesReducer(rules) {\n  return iterator =>\n    rules.reduce((prev, curr) => {\n      const rule = curr.get(iterator);\n      if (rule) prev.push(rule);\n      return prev;\n    }, []);\n}\n\nclass RecurrenceRulesIterator {\n  constructor(recurrenceRules, options, args) {\n    this.options = options;\n    this.args = args;\n    this.rules = [];\n    this.iterator =\n      // prettier-ignore\n      this.options.count === undefined ? this.iterate() :\n            this.args.reverse ? this.iterateWithReverseCount() :\n                this.iterateWithCount();\n    this.options = Object.assign(Object.assign({}, cloneJSON(options)), {\n      start: options.start,\n      end: options.end,\n    });\n    this.reverse = (this.options.count === undefined && args.reverse) || false;\n    const { start, end } = this.normalizeDateTimeArgs(args);\n    if (options.count !== undefined) {\n      this.start = options.start;\n    } else if (start && options.start) {\n      this.start = start.isAfterOrEqual(options.start) ? start : options.start;\n    } else {\n      this.start = start || options.start;\n    }\n    if (end && options.end) {\n      this.end = end.isBeforeOrEqual(options.end) ? end : options.end;\n    } else {\n      this.end = end || options.end;\n    }\n    if (this.args.reverse && !(options.count !== undefined || this.end)) {\n      throw new Error(\n        'When iterating in reverse, the rule must have an `end` or `count` ' +\n          'property or you must provide an `end` argument.',\n      );\n    }\n    this.isInfinite = !this.end && this.options.count === undefined;\n    this.hasDuration = !!this.options.duration;\n    this.rules = Array.isArray(recurrenceRules) ? recurrenceRules : recurrenceRules(this);\n  }\n  [Symbol.iterator]() {\n    return this.iterator;\n  }\n  next(args) {\n    return this.iterator.next(args);\n  }\n  /**\n   * In the pipe controller, we have an extra level of indirection with\n   * the `run()` and `iterate()` methods. The `iterate()` method is the\n   * method which actually runs the logic in the pipes. If we didn't\n   * need to account for the `count` property of a rule, we would *only*\n   * need the iterate method... so much simpler. But we do need to account\n   * for rules with a `count` property.\n   *\n   * Rules with a `count` property need to begin iteration at the beginning\n   * because the `count` is always from the rule's start time. So if someone\n   * passes in a new start time as an argument to a rule with `count`, we\n   * need to secretly iterate from the beginning, tracking the number of\n   * iterations, and then only start yielding dates when we reach the section\n   * the user cares about (or, if we hit our `count` quota, cancel iterating).\n   *\n   * Additionally, we need to handle iterating in reverse. In this case, we build\n   * up a cache of dates between the rule's start time and the reverse iteration\n   * start date. Once we hit the reverse iteration start date, we start\n   * yielding dates in the cache, in reverse order.\n   *\n   * In general, I imagine the count number, if used, will be small. But a large\n   * count will definitely have a negative performance affect. I don't think\n   * there's anything to be done about this.\n   */\n  *iterateWithReverseCount() {\n    const dates = Array.from(this.iterateWithCount()).reverse();\n    let yieldArgs;\n    const dateCache = dates.slice();\n    let date = dateCache.shift();\n    while (date) {\n      if (yieldArgs && yieldArgs.skipToDate && date.isAfter(yieldArgs.skipToDate)) {\n        date = dateCache.shift();\n        continue;\n      }\n      yieldArgs = yield date;\n      if (yieldArgs && yieldArgs.skipToDate && yieldArgs.skipToDate.isAfterOrEqual(date)) {\n        throw new Error(\n          'A provided `skipToDate` option must be greater than the last yielded date ' +\n            '(or smaller, in the case of reverse iteration)',\n        );\n      }\n      date = dateCache.shift();\n    }\n    return undefined;\n  }\n  *iterateWithCount() {\n    if (this.options.count === 0) return;\n    const iterable = this.iterate();\n    const start = this.args.start || this.start;\n    let date = iterable.next().value;\n    let index = 1;\n    let yieldArgs;\n    while (date && index <= this.options.count) {\n      index++;\n      if (date.isBefore(start)) {\n        date = iterable.next().value;\n        continue;\n      }\n      if (yieldArgs && yieldArgs.skipToDate && date.isBefore(yieldArgs.skipToDate)) {\n        date = iterable.next().value;\n        continue;\n      }\n      yieldArgs = yield date;\n      if (yieldArgs && yieldArgs.skipToDate && yieldArgs.skipToDate.isBeforeOrEqual(date)) {\n        throw new Error(\n          'A provided `skipToDate` option must be greater than the last yielded date ' +\n            '(or smaller, in the case of reverse iteration)',\n        );\n      }\n      date = iterable.next().value;\n    }\n    return undefined;\n  }\n  *iterate() {\n    let startingDate = this.start;\n    if (this.reverse) startingDate = this.end;\n    let date = this.nextDate(startingDate);\n    while (date) {\n      const args = yield this.normalizeRunOutput(date);\n      if (args && args.skipToDate) {\n        if (\n          this.reverse\n            ? args.skipToDate.isAfterOrEqual(date)\n            : args.skipToDate.isBeforeOrEqual(date)\n        ) {\n          // We cannot consistently skip backwards because after an iterator is \"done\"\n          // it always returns undefined and you cannot reset it. Theoretically, it would be\n          // fine to skip backwards if the iterator wasn't already \"done\", but this\n          // would be prone to user error so we simply disallow skipping backwards altogether.\n          throw new Error(\n            'A provided `skipToDate` option must be greater than the last yielded date ' +\n              '(or smaller, in the case of reverse iteration)',\n          );\n        }\n        date = this.nextDate(args.skipToDate);\n      } else {\n        date = this.nextDate(\n          this.reverse ? date.subtract(1, 'millisecond') : date.add(1, 'millisecond'),\n        );\n      }\n    }\n    return undefined;\n  }\n  /**\n   * Loops through the recurrence rules until a valid date is found.\n   */\n  nextDate(start) {\n    let result = this.runRules(start.set('generators', []));\n    if (this.isDatePastEnd(result.date)) return null;\n    let index = 0;\n    while (result instanceof InvalidDateTime && index < 50) {\n      result = this.runRules(result.date);\n      if (this.isDatePastEnd(result.date)) return null;\n      index++;\n    }\n    if (result instanceof InvalidDateTime) {\n      throw new RecurrenceRuleError(\n        `Failed to find a matching occurrence in ${index} iterations. ` +\n          `Last iterated date: \"${result.date.toISOString()}\"`,\n      );\n    }\n    if (this.reverse ? start.isBefore(result.date) : start.isAfter(result.date)) {\n      throw new RecurrenceRuleError(\n        'An error occurred in a recurrence rule. If this happened using ' +\n          'the rSchedule provided recurrence rules, you should ' +\n          'open an issue in the rSchedule repo. The maintainer is going to ' +\n          'want to know how to recreate the error.',\n      );\n    }\n    return result.date;\n  }\n  /**\n   * Performs one run of the recurrence rules and returns the result.\n   * It's a slightly optimized reducer function.\n   */\n  runRules(start) {\n    let result = new ValidDateTime(start);\n    for (const rule of this.rules) {\n      if (result instanceof InvalidDateTime) {\n        return result;\n      }\n      result = rule.run(result.date);\n    }\n    return result;\n  }\n  isDatePastEnd(date) {\n    return this.reverse ? date.isBefore(this.start) : this.end && date.isAfter(this.end);\n  }\n  normalizeRunOutput(date) {\n    return this.hasDuration ? date.set('duration', this.options.duration) : date;\n  }\n  normalizeDateTimeArgs(args) {\n    return {\n      start: args.start && normalizeDateTimeTimezone(args.start, this.options.start.timezone),\n      end: args.end && normalizeDateTimeTimezone(args.end, this.options.start.timezone),\n    };\n  }\n}\n\nexport {\n  ArgumentError,\n  DateAdapter,\n  DateAdapterBase,\n  DateTime,\n  InfiniteLoopError,\n  InvalidDateAdapterError,\n  InvalidDateTime,\n  InvalidDateTimeError,\n  RecurrenceRuleError,\n  RecurrenceRulesIterator,\n  RuleOptionError,\n  ValidDateTime,\n  cloneJSON,\n  cloneRuleOptions,\n  dateInputToDateAdapter,\n  dateInputToDateTime,\n  dateTimeSortComparer,\n  freqToGranularity,\n  getDaysInYear,\n  getDifferenceBetweenWeekdays,\n  isLeapYear,\n  normalizeDateTimeTimezone,\n  normalizeRuleOptions,\n  numberSortComparer,\n  orderedWeekdays,\n  recurrenceRulesReducer,\n  uniqDateTimes,\n};\n","import {\n  freqToGranularity,\n  ValidDateTime,\n  InvalidDateTime,\n  DateAdapter,\n  RuleOptionError,\n  numberSortComparer,\n  getDifferenceBetweenWeekdays,\n  RecurrenceRuleError,\n  uniqDateTimes,\n  dateTimeSortComparer,\n} from '@rschedule/core';\n\nclass RecurrenceRule {\n  constructor(processor) {\n    this.processor = processor;\n    this.start = processor.start;\n    this.end = processor.end;\n    this.options = processor.options;\n  }\n}\n\nclass FrequencyRule extends RecurrenceRule {\n  constructor(processor, initDate) {\n    super(processor);\n    this.initDate = initDate;\n    this.intervalUnit = freqToGranularity(this.options.frequency);\n    this.firstIntervalStartDate = this.normalizedStartDate(this.options.start);\n    this.intervalStartDate = this.firstIntervalStartDate;\n    this.intervalEndDate = this.normalizedEndDate(this.firstIntervalStartDate);\n    this.skipToInterval(this.initDate);\n  }\n  run(date) {\n    return this.validateDate(new ValidDateTime(date));\n  }\n  validateDate(arg) {\n    const { date } = arg;\n    if (arg instanceof ValidDateTime && this.dateIsWithinInterval(date)) {\n      return arg;\n    }\n    this.skipToInterval(date);\n    return new InvalidDateTime(\n      // if the interval is 1, date will always be within the interval\n      this.dateIsWithinInterval(date) ? date : this.setToCurrentInterval(),\n    );\n  }\n  setToCurrentInterval() {\n    return this.intervalStartDate;\n  }\n  normalizedStartDate(date) {\n    if (this.options.frequency === 'WEEKLY') {\n      return date.granularity('week', { weekStart: this.options.weekStart });\n    }\n    return date.granularity(this.intervalUnit);\n  }\n  normalizedEndDate(start) {\n    switch (this.options.frequency) {\n      case 'YEARLY':\n        return start.add(1, 'year');\n      case 'MONTHLY':\n        return start.add(1, 'month');\n      case 'WEEKLY':\n        return start.add(1, 'week');\n      case 'DAILY':\n        return start.add(1, 'day');\n      case 'HOURLY':\n        return start.add(1, 'hour');\n      case 'MINUTELY':\n        return start.add(1, 'minute');\n      case 'SECONDLY':\n        return start.add(1, 'second');\n      case 'MILLISECONDLY':\n        return start.add(1, 'millisecond');\n      default:\n        throw new Error(`Unknown frequency ${this.options.frequency}`);\n    }\n  }\n  skipToInterval(date) {\n    const amount = this.intervalDifference(date);\n    this.intervalStartDate = this.firstIntervalStartDate.add(amount, this.intervalUnit);\n    this.intervalEndDate = this.normalizedEndDate(this.intervalStartDate);\n  }\n  dateIsWithinInterval(date) {\n    return this.intervalStartDate.isBeforeOrEqual(date) && this.intervalEndDate.isAfter(date);\n  }\n  intervalDifference(date) {\n    return intervalDifferenceBetweenDates({\n      first: this.firstIntervalStartDate,\n      second: date,\n      unit: this.intervalUnit,\n      interval: this.options.interval,\n      weekStart: this.options.weekStart,\n      direction: 'after',\n    });\n  }\n}\n/**\n * Given the frequency (unit) and interval, this function finds\n * how many jumps forward the first date needs in order to equal\n * or exceed the second date.\n *\n * For example:\n *\n * 1. Unit is daily and interval is 1. The second date is 3 days\n *    after the first. This will return 3.\n * 2. Unit is yearly and interval is 1. The second date is 3 days\n *    after the first. This will return 0.\n * 3. Unit is yearly and interval is 3. The second date is 4 years\n *    after the first. This will return 6.\n */\nfunction intervalDifferenceBetweenDates({ first, second, unit, interval, weekStart, direction }) {\n  let difference = (() => {\n    let intervalDuration;\n    let months;\n    switch (unit) {\n      case 'year':\n        months = (second.get('year') - first.get('year')) * 12;\n        months = months + second.get('month') - first.get('month');\n        return Math.floor(months / 12);\n      case 'month':\n        months = (second.get('year') - first.get('year')) * 12;\n        months = months + second.get('month') - first.get('month');\n        return months;\n      case 'week':\n        first = first.granularity('week', { weekStart });\n        intervalDuration = DateAdapter.MILLISECONDS_IN_WEEK;\n        break;\n      case 'day':\n        intervalDuration = DateAdapter.MILLISECONDS_IN_DAY;\n        break;\n      case 'hour':\n        intervalDuration = DateAdapter.MILLISECONDS_IN_HOUR;\n        break;\n      case 'minute':\n        intervalDuration = DateAdapter.MILLISECONDS_IN_MINUTE;\n        break;\n      case 'second':\n        intervalDuration = DateAdapter.MILLISECONDS_IN_SECOND;\n        break;\n      case 'millisecond':\n        intervalDuration = 1;\n        break;\n      default:\n        throw new Error('Unexpected `unit` value');\n    }\n    const diff = second.valueOf() - first.valueOf();\n    return Math.floor(diff / intervalDuration);\n  })();\n  const fn = direction === 'after' ? Math.ceil : Math.floor;\n  difference = fn(difference / interval) * interval;\n  return difference;\n}\n\nclass RevFrequencyRule extends FrequencyRule {\n  setToCurrentInterval() {\n    return this.intervalEndDate.subtract(1, 'millisecond');\n  }\n  intervalDifference(date) {\n    return intervalDifferenceBetweenDates({\n      first: this.firstIntervalStartDate,\n      second: date,\n      unit: this.intervalUnit,\n      interval: this.options.interval,\n      weekStart: this.options.weekStart,\n      direction: 'before',\n    });\n  }\n}\n\nconst FREQUENCIES = [\n  'MILLISECONDLY',\n  'SECONDLY',\n  'MINUTELY',\n  'HOURLY',\n  'DAILY',\n  'WEEKLY',\n  'MONTHLY',\n  'YEARLY',\n];\nconst FrequencyRuleModule = {\n  name: 'FrequencyRule',\n  get: processor => {\n    if (\n      processor.options.byMillisecondOfSecond !== undefined ||\n      processor.options.frequency !== 'MILLISECONDLY'\n    ) {\n      return null;\n    }\n    if (processor.reverse) return new RevFrequencyRule(processor, processor.end);\n    return new FrequencyRule(processor, processor.start);\n  },\n  normalizeOptions: (options, norm) => {\n    if (!FREQUENCIES.includes(options.frequency)) {\n      throw new RuleOptionError(`\"frequency\" must be one of ${JSON.stringify(FREQUENCIES)}`);\n    }\n    if (options.interval !== undefined) {\n      if (!Number.isInteger(options.interval)) {\n        throw new RuleOptionError('\"interval\" expects a whole number');\n      }\n      if (options.interval < 1) {\n        throw new RuleOptionError('\"interval\" cannot be less than 1');\n      }\n    }\n    if (options.weekStart !== undefined) {\n      if (!DateAdapter.WEEKDAYS.includes(options.weekStart)) {\n        throw new RuleOptionError(\n          `\"weekStart\" must be one of ${JSON.stringify(DateAdapter.WEEKDAYS)}`,\n        );\n      }\n    }\n    norm.frequency = options.frequency;\n    norm.interval = options.interval || 1;\n    norm.weekStart = options.weekStart || 'MO';\n  },\n  deps: () => [FrequencyRuleModule],\n};\n\nfunction ruleOptionFilled(option) {\n  return Array.isArray(option) && option.length > 0;\n}\n\nconst freqCache = new WeakMap();\nclass RecurrenceRuleBase extends RecurrenceRule {\n  constructor(processor) {\n    super(processor);\n    if (!freqCache.has(this.processor)) {\n      freqCache.set(this.processor, new FrequencyRule(processor, processor.start));\n    }\n    this.frequency = freqCache.get(this.processor);\n  }\n  validateDate(arg) {\n    return this.frequency.validateDate(arg);\n  }\n}\nclass RevRecurrenceRuleBase extends RecurrenceRule {\n  constructor(processor) {\n    super(processor);\n    if (!freqCache.has(this.processor)) {\n      freqCache.set(this.processor, new RevFrequencyRule(processor, processor.end));\n    }\n    this.frequency = freqCache.get(this.processor);\n  }\n  validateDate(arg) {\n    return this.frequency.validateDate(arg);\n  }\n}\n\n/**\n * Contains shared logic for ByHourOfDay, ByMinuteOfHour,\n * BySecondOfMinute, and ByMillisecondOfSecond reverse rule pipes\n */\nclass RevByTimeOfUnitRule extends RevRecurrenceRuleBase {\n  run(date) {\n    // e.g. const currentTime = date.get('hour');\n    const currentTime = date.get(this.granularity);\n    // e.g. for (const time of this.options.byHourOfDay) {\n    for (const time of this.option) {\n      if (currentTime < time) continue;\n      if (currentTime === time) {\n        return this.validateDate(new ValidDateTime(date));\n      }\n      // e.g. return this.nextValidDate(args, date.endGranularity('day').set('hour', time));\n      return this.validateDate(\n        new InvalidDateTime(date.endGranularity(this.baseGranularity).set(this.granularity, time)),\n      );\n    }\n    return this.validateDate(\n      new InvalidDateTime(\n        date\n          // e.g. .endGranularity('day')\n          .endGranularity(this.baseGranularity)\n          // e.g. .subtract(1, 'day')\n          .subtract(1, this.baseGranularity)\n          // e.g. .set('hour', this.options.byHourOfDay[0]);\n          .set(this.granularity, this.option[0]),\n      ),\n    );\n  }\n}\n\nclass RevByMillisecondOfSecondRule extends RevByTimeOfUnitRule {\n  constructor() {\n    super(...arguments);\n    this.baseGranularity = 'second';\n    this.granularity = 'millisecond';\n    this.option = this.options.byMillisecondOfSecond.slice().reverse();\n  }\n}\n\n/**\n * Contains shared logic for ByHourOfDay, ByMinuteOfHour,\n * BySecondOfMinute, and ByMillisecondOfSecond rule pipes\n */\nclass ByTimeOfUnitRule extends RecurrenceRuleBase {\n  run(date) {\n    // e.g. const currentTime = date.get('hour');\n    const currentTime = date.get(this.granularity);\n    // e.g. for (const time of this.options.byHourOfDay) {\n    for (const time of this.option) {\n      if (currentTime > time) continue;\n      if (currentTime === time) {\n        return this.validateDate(new ValidDateTime(date));\n      }\n      // e.g. return this.nextValidDate(args, date.granularity('day').set('hour', time));\n      return this.validateDate(\n        new InvalidDateTime(date.granularity(this.baseGranularity).set(this.granularity, time)),\n      );\n    }\n    return this.validateDate(\n      new InvalidDateTime(\n        date\n          // e.g. .granularity('day')\n          .granularity(this.baseGranularity)\n          // e.g. .add(1, 'day')\n          .add(1, this.baseGranularity)\n          // e.g. .set('hour', this.options.byHourOfDay[0]);\n          .set(this.granularity, this.option[0]),\n      ),\n    );\n  }\n}\n\nclass ByMillisecondOfSecondRule extends ByTimeOfUnitRule {\n  constructor() {\n    super(...arguments);\n    this.baseGranularity = 'second';\n    this.granularity = 'millisecond';\n    this.option = this.options.byMillisecondOfSecond;\n  }\n}\n\nconst ByMillisecondOfSecondRuleModule = {\n  name: 'ByMillisecondOfSecond',\n  get: processor => {\n    if (processor.options.byMillisecondOfSecond === undefined) return null;\n    if (processor.reverse) return new RevByMillisecondOfSecondRule(processor);\n    return new ByMillisecondOfSecondRule(processor);\n  },\n  normalizeOptions: (options, norm) => {\n    if (options.byMillisecondOfSecond !== undefined) {\n      if (!ruleOptionFilled(options.byMillisecondOfSecond)) {\n        throw new RuleOptionError('\"byMillisecondOfSecond\" expects a non-empty array');\n      }\n      if (options.byMillisecondOfSecond.some(num => num < 0 || num > 999)) {\n        throw new RuleOptionError('\"byMillisecondOfSecond\" values must be >= 0 && <= 999');\n      }\n      norm.byMillisecondOfSecond = options.byMillisecondOfSecond;\n      norm.byMillisecondOfSecond.sort(numberSortComparer);\n    } else if (options.frequency !== 'MILLISECONDLY') {\n      norm.byMillisecondOfSecond = [norm.start.get('millisecond')];\n    }\n  },\n  deps: () => [FrequencyRuleModule, ByMillisecondOfSecondRuleModule],\n};\n\nclass RevBySecondOfMinuteRule extends RevByTimeOfUnitRule {\n  constructor() {\n    super(...arguments);\n    this.baseGranularity = 'minute';\n    this.granularity = 'second';\n    this.option = this.options.bySecondOfMinute.slice().reverse();\n  }\n}\n\nclass BySecondOfMinuteRule extends ByTimeOfUnitRule {\n  constructor() {\n    super(...arguments);\n    this.baseGranularity = 'minute';\n    this.granularity = 'second';\n    this.option = this.options.bySecondOfMinute;\n  }\n}\n\nconst BySecondOfMinuteRuleModule = {\n  name: 'BySecondOfMinute',\n  get: processor => {\n    if (processor.options.bySecondOfMinute === undefined) return null;\n    if (processor.reverse) return new RevBySecondOfMinuteRule(processor);\n    return new BySecondOfMinuteRule(processor);\n  },\n  normalizeOptions: (options, norm) => {\n    if (options.bySecondOfMinute !== undefined) {\n      if (!ruleOptionFilled(options.bySecondOfMinute)) {\n        throw new RuleOptionError('\"bySecondOfMinute\" expects a non-empty array');\n      }\n      if (options.bySecondOfMinute.some(num => num < 0 || num > 60)) {\n        throw new RuleOptionError('\"bySecondOfMinute\" values must be >= 0 && <= 60');\n      }\n      norm.bySecondOfMinute = options.bySecondOfMinute;\n      norm.bySecondOfMinute.sort(numberSortComparer);\n    } else if (!['SECONDLY', 'MILLISECONDLY'].includes(options.frequency)) {\n      norm.bySecondOfMinute = [norm.start.get('second')];\n    }\n  },\n  deps: () => [FrequencyRuleModule, BySecondOfMinuteRuleModule, ByMillisecondOfSecondRuleModule],\n};\n\nclass RevByMinuteOfHourRule extends RevByTimeOfUnitRule {\n  constructor() {\n    super(...arguments);\n    this.baseGranularity = 'hour';\n    this.granularity = 'minute';\n    this.option = this.options.byMinuteOfHour.slice().reverse();\n  }\n}\n\nclass ByMinuteOfHourRule extends ByTimeOfUnitRule {\n  constructor() {\n    super(...arguments);\n    this.baseGranularity = 'hour';\n    this.granularity = 'minute';\n    this.option = this.options.byMinuteOfHour;\n  }\n}\n\nconst ByMinuteOfHourRuleModule = {\n  name: 'ByMinuteOfHour',\n  get: processor => {\n    if (processor.options.byMinuteOfHour === undefined) return null;\n    if (processor.reverse) return new RevByMinuteOfHourRule(processor);\n    return new ByMinuteOfHourRule(processor);\n  },\n  normalizeOptions: (options, norm) => {\n    if (options.byMinuteOfHour !== undefined) {\n      if (!ruleOptionFilled(options.byMinuteOfHour)) {\n        throw new RuleOptionError('\"byMinuteOfHour\" expects a non-empty array');\n      }\n      if (options.byMinuteOfHour.some(num => num < 0 || num > 59)) {\n        throw new RuleOptionError('\"byMinuteOfHour\" values must be >= 0 && <= 59');\n      }\n      norm.byMinuteOfHour = options.byMinuteOfHour;\n      norm.byMinuteOfHour.sort(numberSortComparer);\n    } else if (!['MINUTELY', 'SECONDLY', 'MILLISECONDLY'].includes(options.frequency)) {\n      norm.byMinuteOfHour = [norm.start.get('minute')];\n    }\n  },\n  deps: () => [\n    FrequencyRuleModule,\n    ByMinuteOfHourRuleModule,\n    BySecondOfMinuteRuleModule,\n    ByMillisecondOfSecondRuleModule,\n  ],\n};\n\nclass RevByHourOfDayRule extends RevByTimeOfUnitRule {\n  constructor() {\n    super(...arguments);\n    this.baseGranularity = 'day';\n    this.granularity = 'hour';\n    this.option = this.options.byHourOfDay.slice().reverse();\n  }\n}\n\nclass ByHourOfDayRule extends ByTimeOfUnitRule {\n  constructor() {\n    super(...arguments);\n    this.baseGranularity = 'day';\n    this.granularity = 'hour';\n    this.option = this.options.byHourOfDay;\n  }\n}\n\nconst ByHourOfDayRuleModule = {\n  name: 'ByHourOfDay',\n  get: processor => {\n    if (processor.options.byHourOfDay === undefined) return null;\n    if (processor.reverse) return new RevByHourOfDayRule(processor);\n    return new ByHourOfDayRule(processor);\n  },\n  normalizeOptions: (options, norm) => {\n    if (options.byHourOfDay !== undefined) {\n      if (!ruleOptionFilled(options.byHourOfDay)) {\n        throw new RuleOptionError('\"byHourOfDay\" expects a non-empty array');\n      }\n      if (options.byHourOfDay.some(num => num < 0 || num > 23)) {\n        throw new RuleOptionError('\"byHourOfDay\" values must be >= 0 && <= 23');\n      }\n      norm.byHourOfDay = options.byHourOfDay;\n      norm.byHourOfDay.sort(numberSortComparer);\n    } else if (['YEARLY', 'MONTHLY', 'WEEKLY', 'DAILY'].includes(options.frequency)) {\n      norm.byHourOfDay = [norm.start.get('hour')];\n    }\n  },\n  deps: () => [\n    FrequencyRuleModule,\n    ByHourOfDayRuleModule,\n    ByMinuteOfHourRuleModule,\n    BySecondOfMinuteRuleModule,\n    ByMillisecondOfSecondRuleModule,\n  ],\n};\n\nfunction getNextWeekday(date, weekday) {\n  return date.add(getDifferenceBetweenWeekdays(date.get('weekday'), weekday), 'day');\n}\n\nfunction getNthWeekdayOfMonth(date, weekday, nth) {\n  let base = date.set('day', 1);\n  if (nth < 0) {\n    base = base.add(1, 'month');\n  }\n  base = getNextWeekday(base, weekday);\n  // when nth is negative, adding it will act as subtraction\n  return nth < 0 ? base.add(nth, 'week') : base.add(nth - 1, 'week');\n}\n\nclass ByDayOfMonthRule extends RecurrenceRuleBase {\n  run(date) {\n    const normalizedByDayOfMonth = normalizeByDayOfMonth(\n      date,\n      this.options.byDayOfMonth,\n      this.options.byDayOfWeek,\n    );\n    const currentDay = date.get('day');\n    for (const day of normalizedByDayOfMonth) {\n      if (currentDay > day) continue;\n      if (currentDay === day) {\n        return this.validateDate(new ValidDateTime(date));\n      }\n      return this.validateDate(new InvalidDateTime(date.granularity('month').set('day', day)));\n    }\n    let next;\n    let nextMonth = date;\n    let index = 0;\n    while (!next && index < 30) {\n      nextMonth = nextMonth.granularity('month').add(1, 'month');\n      next = normalizeByDayOfMonth(\n        nextMonth,\n        this.options.byDayOfMonth,\n        this.options.byDayOfWeek,\n      )[0];\n      index++;\n    }\n    if (index >= 13) {\n      throw new RecurrenceRuleError('byDayOfMonth Infinite while loop');\n    }\n    return this.validateDate(new InvalidDateTime(nextMonth.set('day', next)));\n  }\n}\n/**\n * Does a few things:\n *\n * 1. filters out byDayOfMonth entries which are not applicable\n *    to current month\n * 2. negative entries to positive ones\n * 3. if a byDayOfWeek option is given, removes days which are\n *    not on the correct day of the week\n */\nfunction normalizeByDayOfMonth(date, byDayOfMonth, byDayOfWeek) {\n  const lengthOfMonth = date.endGranularity('month').get('day');\n  let normalizedByDayOfMonth = byDayOfMonth\n    .filter(day => lengthOfMonth >= Math.abs(day))\n    .map(day => (day > 0 ? day : lengthOfMonth + day + 1));\n  if (byDayOfWeek) {\n    const base = date.granularity('month');\n    const filteredByDayOfMonth = [];\n    byDayOfWeek.forEach(entry => {\n      if (typeof entry === 'string') {\n        filteredByDayOfMonth.push(\n          ...normalizedByDayOfMonth.filter(day => base.set('day', day).get('weekday') === entry),\n        );\n        return;\n      }\n      const nthWeekdayOfMonth = getNthWeekdayOfMonth(date, ...entry).get('day');\n      if (normalizedByDayOfMonth.includes(nthWeekdayOfMonth)) {\n        filteredByDayOfMonth.push(nthWeekdayOfMonth);\n      }\n    });\n    normalizedByDayOfMonth = Array.from(new Set(filteredByDayOfMonth));\n  }\n  return normalizedByDayOfMonth.sort((a, b) => {\n    if (a > b) return 1;\n    if (a < b) return -1;\n    else return 0;\n  });\n}\n\nclass RevByDayOfMonthRule extends RevRecurrenceRuleBase {\n  run(date) {\n    const normalizedByDayOfMonth = normalizeByDayOfMonth(\n      date,\n      this.options.byDayOfMonth,\n      this.options.byDayOfWeek,\n    ).reverse();\n    const currentDay = date.get('day');\n    for (const day of normalizedByDayOfMonth) {\n      if (currentDay < day) continue;\n      if (currentDay === day) {\n        return this.validateDate(new ValidDateTime(date));\n      }\n      return this.validateDate(new InvalidDateTime(date.endGranularity('month').set('day', day)));\n    }\n    let next;\n    let nextMonth = date;\n    let index = 0;\n    while (!next && index < 30) {\n      nextMonth = nextMonth.endGranularity('month').subtract(1, 'month');\n      next = normalizeByDayOfMonth(\n        nextMonth,\n        this.options.byDayOfMonth,\n        this.options.byDayOfWeek,\n      ).pop();\n      index++;\n    }\n    if (index >= 13) {\n      throw new RecurrenceRuleError('byDayOfMonth Infinite while loop');\n    }\n    return this.validateDate(new InvalidDateTime(nextMonth.set('day', next)));\n  }\n}\n\nconst ByDayOfMonthRuleModule = {\n  name: 'ByDayOfMonth',\n  get: processor => {\n    if (processor.options.byDayOfMonth === undefined) return null;\n    if (processor.reverse) return new RevByDayOfMonthRule(processor);\n    return new ByDayOfMonthRule(processor);\n  },\n  normalizeOptions: (options, norm) => {\n    if (options.byDayOfMonth !== undefined) {\n      if (options.frequency === 'WEEKLY') {\n        throw new RuleOptionError('when \"frequency\" is \"WEEKLY\", \"byDayOfMonth\" cannot be present');\n      }\n      if (!ruleOptionFilled(options.byDayOfMonth)) {\n        throw new RuleOptionError('\"byDayOfMonth\" expects a non-empty array');\n      }\n      if (options.byDayOfMonth.some(num => num === 0 || num < -31 || num > 31)) {\n        throw new RuleOptionError(\n          '\"byDayOfMonth\" values must be `num !== 0 && num <= 31 && num >= -31`',\n        );\n      }\n      norm.byDayOfMonth = options.byDayOfMonth.slice();\n    } else if (\n      !(ruleOptionFilled(options.byDayOfWeek) || ruleOptionFilled(options.byDayOfYear)) &&\n      ['YEARLY', 'MONTHLY'].includes(options.frequency)\n    ) {\n      norm.byDayOfMonth = [norm.start.get('day')];\n    }\n  },\n  deps: () => [\n    FrequencyRuleModule,\n    ByDayOfMonthRuleModule,\n    ByHourOfDayRuleModule,\n    ByMinuteOfHourRuleModule,\n    BySecondOfMinuteRuleModule,\n    ByMillisecondOfSecondRuleModule,\n  ],\n};\n\nfunction getNthWeekdayOfYear(date, weekday, nth) {\n  let base = date.set('month', 1).set('day', 1);\n  if (nth < 0) {\n    base = base.add(1, 'year');\n  }\n  base = getNextWeekday(base, weekday);\n  // when nth is negative, adding it will act as subtraction\n  return nth < 0 ? base.add(nth, 'week') : base.add(nth - 1, 'week');\n}\n\nfunction getPreviousWeekday(date, weekday) {\n  const diff = getDifferenceBetweenWeekdays(date.get('weekday'), weekday);\n  return date.subtract(diff === 0 ? 0 : 7 - diff, 'day');\n}\n\nclass RevByDayOfWeekRule extends RevRecurrenceRuleBase {\n  run(date) {\n    if (this.options.frequency === 'YEARLY') {\n      return this.options.byMonthOfYear === undefined\n        ? this.expandYearly(date)\n        : this.expandMonthly(date);\n    } else if (this.options.frequency === 'MONTHLY') {\n      return this.expandMonthly(date);\n    }\n    return this.expand(date);\n  }\n  expandYearly(date) {\n    let next = getPrevWeekdaysOfYear(date, this.options.byDayOfWeek)[0];\n    let index = 0;\n    let base = date;\n    // If we can't find a valid date this year,\n    // search the previous year. Only search the past 28 years.\n    // (the calendar repeats on a 28 year cycle, according\n    // to the internet).\n    while (!next && index < 28) {\n      index++;\n      base = base.granularity('year').subtract(1, 'millisecond');\n      next = getPrevWeekdaysOfYear(base, this.options.byDayOfWeek)[0];\n    }\n    if (!next) {\n      throw new RecurrenceRuleError(\n        'The byDayOfWeek rule appears to contain an impossible combination',\n      );\n    }\n    return this.result(date, next);\n  }\n  expandMonthly(date) {\n    let next = getPrevWeekdaysOfMonth(date, this.options.byDayOfWeek)[0];\n    let index = 0;\n    let base = date;\n    // TODO: performance improvment\n    // If, in the first year, a match isn't found, we should be able to\n    // jumpt to the previous leap year and check that. Or, if already on\n    // a leap year, we can just error immediately.\n    // If we can't find a valid date this month,\n    // search the previous month. Only search the past 4 years\n    // (to account for leap year).\n    while (!next && index < 50) {\n      index++;\n      base = base.granularity('month').subtract(1, 'millisecond');\n      next = getPrevWeekdaysOfMonth(base, this.options.byDayOfWeek)[0];\n    }\n    if (!next) {\n      throw new RecurrenceRuleError(\n        'The byDayOfWeek rule appears to contain an impossible combination',\n      );\n    }\n    return this.result(date, next);\n  }\n  expand(date) {\n    const next = this.options.byDayOfWeek\n      .map(weekday => getPreviousWeekday(date, weekday))\n      .sort(dateTimeSortComparer)\n      .pop();\n    return this.result(date, next);\n  }\n  result(date, next) {\n    if (next.isEqual(date)) {\n      return this.validateDate(new ValidDateTime(date));\n    }\n    return this.validateDate(new InvalidDateTime(next.endGranularity('day')));\n  }\n}\n/** For each byDayOfWeek entry, find the previous DateTime */\nfunction getPrevWeekdaysOfYear(date, byDayOfWeek) {\n  const normalizedNthWeekdaysOfYear = byDayOfWeek\n    .filter(entry => Array.isArray(entry))\n    .map(entry => getNthWeekdayOfYear(date, ...entry));\n  const normalizedNextWeekdays = byDayOfWeek\n    .filter(entry => typeof entry === 'string')\n    .map(weekday => getPreviousWeekday(date, weekday))\n    .filter(entry => entry.get('year') === date.get('year'));\n  return uniqDateTimes([...normalizedNthWeekdaysOfYear, ...normalizedNextWeekdays])\n    .filter(entry => entry.isBeforeOrEqual(date))\n    .sort(dateTimeSortComparer)\n    .reverse();\n}\n/** For each byDayOfWeek entry, find the previous DateTime */\nfunction getPrevWeekdaysOfMonth(date, byDayOfWeek) {\n  const normalizedNthWeekdaysOfMonth = byDayOfWeek\n    .filter(entry => Array.isArray(entry))\n    .map(entry => getNthWeekdayOfMonth(date, ...entry));\n  const normalizedNextWeekdays = byDayOfWeek\n    .filter(entry => typeof entry === 'string')\n    .map(weekday => getPreviousWeekday(date, weekday))\n    .filter(\n      entry => entry.get('year') === date.get('year') && entry.get('month') === date.get('month'),\n    );\n  return uniqDateTimes([...normalizedNthWeekdaysOfMonth, ...normalizedNextWeekdays])\n    .filter(entry => entry.isBeforeOrEqual(date))\n    .sort(dateTimeSortComparer)\n    .reverse();\n}\n\nclass ByDayOfWeekRule extends RecurrenceRuleBase {\n  run(date) {\n    if (this.options.frequency === 'YEARLY') {\n      return this.options.byMonthOfYear === undefined\n        ? this.expandYearly(date)\n        : this.expandMonthly(date);\n    } else if (this.options.frequency === 'MONTHLY') {\n      return this.expandMonthly(date);\n    }\n    return this.expand(date);\n  }\n  expandYearly(date) {\n    let next = getNextWeekdaysOfYear(date, this.options.byDayOfWeek)[0];\n    let index = 0;\n    let base = date;\n    // If we can't find a valid date this year,\n    // search next year. Only search the next 28 years.\n    // (the calendar repeats on a 28 year cycle, according\n    // to the internet).\n    while (!next && index < 28) {\n      index++;\n      base = base.granularity('year').add(1, 'year');\n      next = getNextWeekdaysOfYear(base, this.options.byDayOfWeek)[0];\n    }\n    if (!next) {\n      throw new RecurrenceRuleError(\n        'The byDayOfWeek rule appears to contain an impossible combination',\n      );\n    }\n    return this.result(date, next);\n  }\n  expandMonthly(date) {\n    let next = getNextWeekdaysOfMonth(date, this.options.byDayOfWeek)[0];\n    let index = 0;\n    let base = date;\n    // TODO: performance improvment\n    // If, in the first year, a match isn't found, we should be able to\n    // jumpt to the next leap year and check that. Or, if already on\n    // a leap year, we can just error immediately.\n    // If we can't find a valid date this month,\n    // search the next month. Only search the next 4 years\n    // (to account for leap year).\n    while (!next && index < 50) {\n      index++;\n      base = base.granularity('month').add(1, 'month');\n      next = getNextWeekdaysOfMonth(base, this.options.byDayOfWeek)[0];\n    }\n    if (!next) {\n      throw new RecurrenceRuleError(\n        'The byDayOfWeek rule appears to contain an impossible combination',\n      );\n    }\n    return this.result(date, next);\n  }\n  expand(date) {\n    const next = this.options.byDayOfWeek\n      .map(weekday => getNextWeekday(date, weekday))\n      .sort(dateTimeSortComparer)[0];\n    return this.result(date, next);\n  }\n  result(date, next) {\n    if (next.isEqual(date)) {\n      return this.validateDate(new ValidDateTime(date));\n    }\n    return this.validateDate(new InvalidDateTime(next.granularity('day')));\n  }\n}\n/** For each byDayOfWeek entry, find the next DateTime */\nfunction getNextWeekdaysOfYear(date, byDayOfWeek) {\n  const normalizedNthWeekdaysOfYear = byDayOfWeek\n    .filter(entry => Array.isArray(entry))\n    .map(entry => getNthWeekdayOfYear(date, ...entry));\n  const normalizedNextWeekdays = byDayOfWeek\n    .filter(entry => typeof entry === 'string')\n    .map(weekday => getNextWeekday(date, weekday))\n    .filter(entry => entry.get('year') === date.get('year'));\n  return uniqDateTimes([...normalizedNthWeekdaysOfYear, ...normalizedNextWeekdays])\n    .filter(entry => entry.isAfterOrEqual(date))\n    .sort(dateTimeSortComparer);\n}\n/** For each byDayOfWeek entry, find the next DateTime */\nfunction getNextWeekdaysOfMonth(date, byDayOfWeek) {\n  const normalizedNthWeekdaysOfMonth = byDayOfWeek\n    .filter(entry => Array.isArray(entry))\n    .map(entry => getNthWeekdayOfMonth(date, ...entry));\n  const normalizedNextWeekdays = byDayOfWeek\n    .filter(entry => typeof entry === 'string')\n    .map(weekday => getNextWeekday(date, weekday))\n    .filter(\n      entry => entry.get('year') === date.get('year') && entry.get('month') === date.get('month'),\n    );\n  return uniqDateTimes([...normalizedNthWeekdaysOfMonth, ...normalizedNextWeekdays])\n    .filter(entry => entry.isAfterOrEqual(date))\n    .sort(dateTimeSortComparer);\n}\n\nconst ByDayOfWeekRuleModule = {\n  name: 'ByDayOfWeek',\n  get: processor => {\n    if (processor.options.byDayOfWeek === undefined) return null;\n    if (processor.reverse) return new RevByDayOfWeekRule(processor);\n    return new ByDayOfWeekRule(processor);\n  },\n  normalizeOptions: (options, norm) => {\n    if (options.byDayOfWeek !== undefined) {\n      if (!ruleOptionFilled(options.byDayOfWeek)) {\n        throw new RuleOptionError('\"byDayOfWeek\" expects a non-empty array');\n      }\n      const invalidWeeday = options.byDayOfWeek.find(day =>\n        Array.isArray(day)\n          ? !DateAdapter.WEEKDAYS.includes(day[0])\n          : !DateAdapter.WEEKDAYS.includes(day),\n      );\n      if (invalidWeeday) {\n        throw new RuleOptionError(\n          `\"byDayOfWeek\" expects weedays in the form ` +\n            `${JSON.stringify(DateAdapter.WEEKDAYS)} but \"${invalidWeeday}\" was provided`,\n        );\n      }\n      if (\n        !['YEARLY', 'MONTHLY'].includes(options.frequency) &&\n        options.byDayOfWeek.some(weekday => Array.isArray(weekday))\n      ) {\n        throw new RuleOptionError(\n          '\"byDayOfWeek\" can only include a numeric value (i.e. `[string, number]`) when the \"frequency\" is ' +\n            'either \"MONTHLY\" or \"YEARLY\"',\n        );\n      }\n      if (\n        options.frequency === 'MONTHLY' &&\n        options.byDayOfWeek.some(\n          weekday =>\n            Array.isArray(weekday) && (weekday[1] < -31 || weekday[1] === 0 || weekday[1] > 31),\n        )\n      ) {\n        throw new RuleOptionError(\n          'when \"frequency\" is \"MONTHLY\", each \"byDayOfWeek\" can optionally only' +\n            ' have a numeric value >= -31 and <= 31 and !== 0',\n        );\n      }\n      if (\n        options.frequency === 'YEARLY' &&\n        options.byDayOfWeek.some(\n          weekday =>\n            Array.isArray(weekday) && (weekday[1] < -366 || weekday[1] === 0 || weekday[1] > 366),\n        )\n      ) {\n        throw new RuleOptionError(\n          'when \"frequency\" is \"YEARLY\", each \"byDayOfWeek\" can optionally only' +\n            ' have a numeric value >= -366 and <= 366 and !== 0',\n        );\n      }\n      norm.byDayOfWeek = options.byDayOfWeek;\n    } else if (!ruleOptionFilled(options.byDayOfMonth) && options.frequency === 'WEEKLY') {\n      norm.byDayOfWeek = [norm.start.get('weekday')];\n    }\n  },\n  deps: () => [\n    FrequencyRuleModule,\n    ByDayOfWeekRuleModule,\n    ByHourOfDayRuleModule,\n    ByMinuteOfHourRuleModule,\n    BySecondOfMinuteRuleModule,\n    ByMillisecondOfSecondRuleModule,\n  ],\n};\n\nclass RevByMonthOfYearRule extends RevRecurrenceRuleBase {\n  constructor() {\n    super(...arguments);\n    this.option = this.processor.options.byMonthOfYear.slice().reverse();\n  }\n  run(date) {\n    const currentMonth = date.get('month');\n    for (const month of this.option) {\n      if (currentMonth < month) continue;\n      if (currentMonth === month) {\n        return this.validateDate(new ValidDateTime(date));\n      }\n      return this.validateDate(\n        new InvalidDateTime(date.endGranularity('year').set('month', month)),\n      );\n    }\n    return this.validateDate(\n      new InvalidDateTime(\n        date\n          .endGranularity('year')\n          .subtract(1, 'year')\n          .set('month', this.option[0]),\n      ),\n    );\n  }\n}\n\nclass ByMonthOfYearRule extends RecurrenceRuleBase {\n  run(date) {\n    const currentMonth = date.get('month');\n    for (const month of this.options.byMonthOfYear) {\n      if (currentMonth > month) continue;\n      if (currentMonth === month) {\n        return this.validateDate(new ValidDateTime(date));\n      }\n      return this.validateDate(new InvalidDateTime(date.granularity('year').set('month', month)));\n    }\n    return this.validateDate(\n      new InvalidDateTime(\n        date\n          .granularity('year')\n          .add(1, 'year')\n          .set('month', this.options.byMonthOfYear[0]),\n      ),\n    );\n  }\n}\n\nconst ByMonthOfYearRuleModule = {\n  name: 'ByMonthOfYear',\n  get: processor => {\n    if (processor.options.byMonthOfYear === undefined) return null;\n    if (processor.reverse) {\n      return new RevByMonthOfYearRule(processor);\n    }\n    return new ByMonthOfYearRule(processor);\n  },\n  normalizeOptions: (options, norm) => {\n    if (options.byMonthOfYear !== undefined) {\n      if (!ruleOptionFilled(options.byMonthOfYear)) {\n        throw new RuleOptionError('\"byMonthOfYear\" expects a non-empty array');\n      }\n      if (options.byMonthOfYear.some(num => num < 1 || num > 12)) {\n        throw new RuleOptionError('\"byMonthOfYear\" values must be `num >= 1 && num >= 12`');\n      }\n      norm.byMonthOfYear = options.byMonthOfYear.slice();\n      norm.byMonthOfYear.sort(numberSortComparer);\n    } else if (\n      !(\n        ruleOptionFilled(options.byDayOfMonth) ||\n        ruleOptionFilled(options.byDayOfWeek) ||\n        ruleOptionFilled(options.byDayOfYear)\n      ) &&\n      options.frequency === 'YEARLY'\n    ) {\n      norm.byMonthOfYear = [norm.start.get('month')];\n    }\n  },\n  deps: () => [\n    FrequencyRuleModule,\n    ByMonthOfYearRuleModule,\n    ByDayOfMonthRuleModule,\n    ByHourOfDayRuleModule,\n    ByMinuteOfHourRuleModule,\n    BySecondOfMinuteRuleModule,\n    ByMillisecondOfSecondRuleModule,\n  ],\n};\n\nconst ICAL_RULES = [\n  FrequencyRuleModule,\n  ByMonthOfYearRuleModule,\n  ByDayOfMonthRuleModule,\n  ByDayOfWeekRuleModule,\n  ByHourOfDayRuleModule,\n  ByMinuteOfHourRuleModule,\n  BySecondOfMinuteRuleModule,\n  ByMillisecondOfSecondRuleModule,\n];\n\nexport {\n  ByDayOfMonthRule,\n  ByDayOfMonthRuleModule,\n  ByDayOfWeekRule,\n  ByDayOfWeekRuleModule,\n  ByHourOfDayRule,\n  ByHourOfDayRuleModule,\n  ByMillisecondOfSecondRule,\n  ByMillisecondOfSecondRuleModule,\n  ByMinuteOfHourRule,\n  ByMinuteOfHourRuleModule,\n  ByMonthOfYearRule,\n  ByMonthOfYearRuleModule,\n  BySecondOfMinuteRule,\n  BySecondOfMinuteRuleModule,\n  FrequencyRule,\n  FrequencyRuleModule,\n  ICAL_RULES,\n  RevByDayOfMonthRule,\n  RevByDayOfWeekRule,\n  RevByHourOfDayRule,\n  RevByMillisecondOfSecondRule,\n  RevByMinuteOfHourRule,\n  RevByMonthOfYearRule,\n  RevBySecondOfMinuteRule,\n  RevFrequencyRule,\n  getPrevWeekdaysOfMonth,\n  getPrevWeekdaysOfYear,\n};\n","import { Dates, Rule, Schedule } from '@rschedule/core/generators';\nimport {\n  serializeDataToJSON,\n  ParseJSONError,\n  registerJSONSerializerFn,\n} from '@rschedule/json-tools';\nimport { DateAdapterBase, cloneJSON } from '@rschedule/core';\n\nDates.prototype.toJSON = function serialize(opts = {}) {\n  const json = {\n    type: 'Dates',\n    dates: this.adapters.map(adapter => adapter.toJSON()),\n  };\n  if (!opts.nested) json.timezone = this.timezone;\n  serializeDataToJSON(this, json, opts);\n  return json;\n};\nDates.fromJSON = function parse(json, options = {}) {\n  if (json.type !== 'Dates') {\n    throw new ParseJSONError('Invalid Dates JSON');\n  }\n  return new Dates({\n    dates: json.dates.map(date => DateAdapterBase.adapter.fromJSON(date)),\n    data: typeof options.data === 'function' ? options.data(json) : json.data,\n    timezone: options.timezone || json.timezone,\n  });\n};\nregisterJSONSerializerFn('Dates', Dates.fromJSON);\n\nRule.prototype.toJSON = function serialize(opts = {}) {\n  const json = {\n    type: 'Rule',\n    config: Object.assign(Object.assign({}, cloneJSON(this.options)), {\n      start: this.normalizeDateInput(this.options.start).toJSON(),\n    }),\n  };\n  if (this.options.end) {\n    json.config.end = this.normalizeDateInput(this.options.end).toJSON();\n  }\n  if (!opts.nested) json.timezone = this.timezone;\n  serializeDataToJSON(this, json, opts);\n  return json;\n};\nRule.fromJSON = function fromJSON(json, options = {}) {\n  const config = Object.assign(Object.assign({}, json.config), {\n    start: DateAdapterBase.adapter.fromJSON(json.config.start),\n    end: json.config.end && DateAdapterBase.adapter.fromJSON(json.config.end),\n  });\n  return new Rule(config, {\n    data: typeof options.data === 'function' ? options.data(json) : json.data,\n    timezone: options.timezone || json.timezone,\n  });\n};\nregisterJSONSerializerFn('Rule', Rule.fromJSON);\n\nSchedule.prototype.toJSON = function serialize(opts = {}) {\n  const json = {\n    type: 'Schedule',\n    rrules: this.rrules.map(rule =>\n      rule.toJSON(Object.assign(Object.assign({}, opts), { nested: true })),\n    ),\n    exrules: this.exrules.map(rule =>\n      rule.toJSON(Object.assign(Object.assign({}, opts), { nested: true })),\n    ),\n    rdates: this.rdates.toJSON(Object.assign(Object.assign({}, opts), { nested: true })),\n    exdates: this.exdates.toJSON(Object.assign(Object.assign({}, opts), { nested: true })),\n  };\n  if (!opts.nested) json.timezone = this.timezone;\n  serializeDataToJSON(this, json, opts);\n  return json;\n};\nSchedule.fromJSON = function parse(json, options = {}) {\n  if (json.type !== 'Schedule') {\n    throw new ParseJSONError('Invalid Schedule JSON');\n  }\n  return new Schedule({\n    rrules: json.rrules.map(rule =>\n      Rule.fromJSON(rule, Object.assign({ timezone: json.timezone }, options)),\n    ),\n    exrules: json.exrules.map(rule =>\n      Rule.fromJSON(rule, Object.assign({ timezone: json.timezone }, options)),\n    ),\n    rdates: Dates.fromJSON(json.rdates, Object.assign({ timezone: json.timezone }, options)),\n    exdates: Dates.fromJSON(json.exdates, Object.assign({ timezone: json.timezone }, options)),\n    data: typeof options.data === 'function' ? options.data(json) : json.data,\n    timezone: options.timezone || json.timezone,\n  });\n};\nregisterJSONSerializerFn('Schedule', Schedule.fromJSON);\n","import { OccurrenceGenerator } from '@rschedule/core/generators';\n\nclass ParseJSONError extends Error {}\nclass SerializeJSONError extends Error {}\nOccurrenceGenerator.JSON_FN_MAP = new Map();\nOccurrenceGenerator.prototype.toJSON = function serialize(opts) {\n  throw new SerializeJSONError(\n    `To support smaller bundles, ${this.constructor.name}#toJSON() ` +\n      `must be manually added. See \"@rschedule/json-tools\" in the rSchedule docs.`,\n  );\n};\nOccurrenceGenerator.fromJSON = function parse(json, options) {\n  if (typeof json !== 'object' || json === null) {\n    throw new ParseJSONError(`Invalid json \"${json}\"`);\n  }\n  const fn = OccurrenceGenerator.JSON_FN_MAP.get(json.type);\n  if (!fn) {\n    throw new ParseJSONError(\n      `Unknown rSchedule object type \"${json.type}\". Have you added a json serializer ` +\n        `for \"${json.type}\"? ` +\n        `See \"@rschedule/json-tools\" in the rSchedule docs.`,\n    );\n  }\n  return fn(json, options);\n};\nfunction serializeDataToJSON(gen, json, opt) {\n  if (!opt.data) return;\n  if (opt.data === true) {\n    json.data = gen.data;\n  } else {\n    json.data = opt.data(gen);\n  }\n  if (json.data === undefined) delete json.data;\n}\nfunction registerJSONSerializerFn(name, fn) {\n  OccurrenceGenerator.JSON_FN_MAP.set(name, fn);\n}\n\nexport { ParseJSONError, SerializeJSONError, registerJSONSerializerFn, serializeDataToJSON };\n","import { DateAdapterBase, InvalidDateAdapterError, ArgumentError } from '@rschedule/core';\n\nclass StandardDateAdapter extends DateAdapterBase {\n  constructor(date, options = {}) {\n    super(undefined, options);\n    if (!['UTC', null, undefined].includes(options.timezone)) {\n      throw new InvalidDateAdapterError(\n        `StandardDateAdapter only supports \"UTC\" and ` +\n          `local time zones but \"${options.timezone}\" was provided.`,\n      );\n    }\n    this._date = new Date(date);\n    this.timezone = options.timezone !== undefined ? options.timezone : null;\n    this.assertIsValid();\n  }\n  static isDate(object) {\n    return Object.prototype.toString.call(object) === '[object Date]';\n  }\n  static fromDate(date, options) {\n    return new StandardDateAdapter(date, options);\n  }\n  static fromJSON(json) {\n    const args = [\n      json.year,\n      json.month - 1,\n      json.day,\n      json.hour,\n      json.minute,\n      json.second,\n      json.millisecond,\n    ];\n    switch (json.timezone) {\n      case 'UTC': {\n        return new StandardDateAdapter(new Date(Date.UTC(...args)), {\n          timezone: 'UTC',\n          duration: json.duration,\n        });\n      }\n      case null: {\n        return new StandardDateAdapter(new Date(...args), {\n          timezone: null,\n          duration: json.duration,\n        });\n      }\n      default:\n        throw new InvalidDateAdapterError(\n          'The `StandardDateAdapter` only supports datetimes in ' +\n            `UTC or LOCAL (null) time. You provided a JSON object ` +\n            `with timezone \"${json.timezone}\".`,\n        );\n    }\n  }\n  static fromDateTime(datetime) {\n    const date = StandardDateAdapter.fromJSON(datetime.toJSON());\n    date.generators.push(...datetime.generators);\n    return date;\n  }\n  get date() {\n    return new Date(this._date);\n  }\n  get end() {\n    if (!this.duration) return;\n    if (this._end) return this._end;\n    this._end = StandardDateAdapter.fromDateTime(\n      this.toDateTime().add(this.duration, 'millisecond'),\n    ).date;\n    return this._end;\n  }\n  set(prop, value) {\n    if (prop === 'timezone') {\n      if (this.timezone === value) return this;\n      else {\n        return new StandardDateAdapter(this._date, {\n          timezone: value,\n          duration: this.duration,\n          generators: this.generators,\n        });\n      }\n    } else if (prop === 'duration') {\n      if (this.duration === value) return this;\n      else {\n        return new StandardDateAdapter(this._date, {\n          timezone: this.timezone,\n          duration: value,\n          generators: this.generators,\n        });\n      }\n    }\n    throw new ArgumentError(`Unknown prop \"${prop}\" for StandardDateAdapter#set()`);\n  }\n  valueOf() {\n    return this._date.valueOf();\n  }\n  toJSON() {\n    let json;\n    if (this.timezone === 'UTC') {\n      json = {\n        timezone: this.timezone,\n        year: this._date.getUTCFullYear(),\n        month: this._date.getUTCMonth() + 1,\n        day: this._date.getUTCDate(),\n        hour: this._date.getUTCHours(),\n        minute: this._date.getUTCMinutes(),\n        second: this._date.getUTCSeconds(),\n        millisecond: this._date.getUTCMilliseconds(),\n      };\n    } else {\n      json = {\n        timezone: this.timezone,\n        year: this._date.getFullYear(),\n        month: this._date.getMonth() + 1,\n        day: this._date.getDate(),\n        hour: this._date.getHours(),\n        minute: this._date.getMinutes(),\n        second: this._date.getSeconds(),\n        millisecond: this._date.getMilliseconds(),\n      };\n    }\n    if (this.duration) {\n      json.duration = this.duration;\n    }\n    return json;\n  }\n  assertIsValid() {\n    if (!StandardDateAdapter.isDate(this._date) || isNaN(this._date.valueOf())) {\n      throw new InvalidDateAdapterError('StandardDateAdapter has invalid date.');\n    } else if (![null, 'UTC'].includes(this.timezone)) {\n      throw new InvalidDateAdapterError(\n        'StandardDateAdapter only supports local (null) and UTC timezones but ' +\n          `\"${this.timezone}\" was specified.`,\n      );\n    } else if (this.duration && this.duration <= 0) {\n      throw new InvalidDateAdapterError('If provided, duration must be greater than 0.');\n    }\n    return true;\n  }\n}\nStandardDateAdapter.hasTimezoneSupport = false;\n\nexport { StandardDateAdapter };\n","import { DateAdapterBase } from '@rschedule/core';\nimport { Rule } from '@rschedule/core/generators';\nimport { ICAL_RULES } from '@rschedule/core/rules/ICAL_RULES';\nimport { StandardDateAdapter } from '@rschedule/standard-date-adapter';\n\nDateAdapterBase.adapter = StandardDateAdapter;\nRule.recurrenceRules = ICAL_RULES;\n","/*!\n * accounting.js v0.4.2\n * Copyright 2014 Open Exchange Rates\n *\n * Freely distributable under the MIT license.\n * Portions of accounting.js are inspired or borrowed from underscore.js\n *\n * Full details and documentation:\n * http://openexchangerates.github.io/accounting.js/\n */\n\n(function(root, undefined) {\n\n\t/* --- Setup --- */\n\n\t// Create the local library object, to be exported or referenced globally later\n\tvar lib = {};\n\n\t// Current version\n\tlib.version = '0.4.2';\n\n\n\t/* --- Exposed settings --- */\n\n\t// The library's settings configuration object. Contains default parameters for\n\t// currency and number formatting\n\tlib.settings = {\n\t\tcurrency: {\n\t\t\tsymbol : \"$\",\t\t// default currency symbol is '$'\n\t\t\tformat : \"%s%v\",\t// controls output: %s = symbol, %v = value (can be object, see docs)\n\t\t\tdecimal : \".\",\t\t// decimal point separator\n\t\t\tthousand : \",\",\t\t// thousands separator\n\t\t\tprecision : 2,\t\t// decimal places\n\t\t\tgrouping : 3\t\t// digit grouping (not implemented yet)\n\t\t},\n\t\tnumber: {\n\t\t\tprecision : 0,\t\t// default precision on numbers is 0\n\t\t\tgrouping : 3,\t\t// digit grouping (not implemented yet)\n\t\t\tthousand : \",\",\n\t\t\tdecimal : \".\"\n\t\t}\n\t};\n\n\n\t/* --- Internal Helper Methods --- */\n\n\t// Store reference to possibly-available ECMAScript 5 methods for later\n\tvar nativeMap = Array.prototype.map,\n\t\tnativeIsArray = Array.isArray,\n\t\ttoString = Object.prototype.toString;\n\n\t/**\n\t * Tests whether supplied parameter is a string\n\t * from underscore.js\n\t */\n\tfunction isString(obj) {\n\t\treturn !!(obj === '' || (obj && obj.charCodeAt && obj.substr));\n\t}\n\n\t/**\n\t * Tests whether supplied parameter is an array\n\t * from underscore.js, delegates to ECMA5's native Array.isArray\n\t */\n\tfunction isArray(obj) {\n\t\treturn nativeIsArray ? nativeIsArray(obj) : toString.call(obj) === '[object Array]';\n\t}\n\n\t/**\n\t * Tests whether supplied parameter is a true object\n\t */\n\tfunction isObject(obj) {\n\t\treturn obj && toString.call(obj) === '[object Object]';\n\t}\n\n\t/**\n\t * Extends an object with a defaults object, similar to underscore's _.defaults\n\t *\n\t * Used for abstracting parameter handling from API methods\n\t */\n\tfunction defaults(object, defs) {\n\t\tvar key;\n\t\tobject = object || {};\n\t\tdefs = defs || {};\n\t\t// Iterate over object non-prototype properties:\n\t\tfor (key in defs) {\n\t\t\tif (defs.hasOwnProperty(key)) {\n\t\t\t\t// Replace values with defaults only if undefined (allow empty/zero values):\n\t\t\t\tif (object[key] == null) object[key] = defs[key];\n\t\t\t}\n\t\t}\n\t\treturn object;\n\t}\n\n\t/**\n\t * Implementation of `Array.map()` for iteration loops\n\t *\n\t * Returns a new Array as a result of calling `iterator` on each array value.\n\t * Defers to native Array.map if available\n\t */\n\tfunction map(obj, iterator, context) {\n\t\tvar results = [], i, j;\n\n\t\tif (!obj) return results;\n\n\t\t// Use native .map method if it exists:\n\t\tif (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);\n\n\t\t// Fallback for native .map:\n\t\tfor (i = 0, j = obj.length; i < j; i++ ) {\n\t\t\tresults[i] = iterator.call(context, obj[i], i, obj);\n\t\t}\n\t\treturn results;\n\t}\n\n\t/**\n\t * Check and normalise the value of precision (must be positive integer)\n\t */\n\tfunction checkPrecision(val, base) {\n\t\tval = Math.round(Math.abs(val));\n\t\treturn isNaN(val)? base : val;\n\t}\n\n\n\t/**\n\t * Parses a format string or object and returns format obj for use in rendering\n\t *\n\t * `format` is either a string with the default (positive) format, or object\n\t * containing `pos` (required), `neg` and `zero` values (or a function returning\n\t * either a string or object)\n\t *\n\t * Either string or format.pos must contain \"%v\" (value) to be valid\n\t */\n\tfunction checkCurrencyFormat(format) {\n\t\tvar defaults = lib.settings.currency.format;\n\n\t\t// Allow function as format parameter (should return string or object):\n\t\tif ( typeof format === \"function\" ) format = format();\n\n\t\t// Format can be a string, in which case `value` (\"%v\") must be present:\n\t\tif ( isString( format ) && format.match(\"%v\") ) {\n\n\t\t\t// Create and return positive, negative and zero formats:\n\t\t\treturn {\n\t\t\t\tpos : format,\n\t\t\t\tneg : format.replace(\"-\", \"\").replace(\"%v\", \"-%v\"),\n\t\t\t\tzero : format\n\t\t\t};\n\n\t\t// If no format, or object is missing valid positive value, use defaults:\n\t\t} else if ( !format || !format.pos || !format.pos.match(\"%v\") ) {\n\n\t\t\t// If defaults is a string, casts it to an object for faster checking next time:\n\t\t\treturn ( !isString( defaults ) ) ? defaults : lib.settings.currency.format = {\n\t\t\t\tpos : defaults,\n\t\t\t\tneg : defaults.replace(\"%v\", \"-%v\"),\n\t\t\t\tzero : defaults\n\t\t\t};\n\n\t\t}\n\t\t// Otherwise, assume format was fine:\n\t\treturn format;\n\t}\n\n\n\t/* --- API Methods --- */\n\n\t/**\n\t * Takes a string/array of strings, removes all formatting/cruft and returns the raw float value\n\t * Alias: `accounting.parse(string)`\n\t *\n\t * Decimal must be included in the regular expression to match floats (defaults to\n\t * accounting.settings.number.decimal), so if the number uses a non-standard decimal \n\t * separator, provide it as the second argument.\n\t *\n\t * Also matches bracketed negatives (eg. \"$ (1.99)\" => -1.99)\n\t *\n\t * Doesn't throw any errors (`NaN`s become 0) but this may change in future\n\t */\n\tvar unformat = lib.unformat = lib.parse = function(value, decimal) {\n\t\t// Recursively unformat arrays:\n\t\tif (isArray(value)) {\n\t\t\treturn map(value, function(val) {\n\t\t\t\treturn unformat(val, decimal);\n\t\t\t});\n\t\t}\n\n\t\t// Fails silently (need decent errors):\n\t\tvalue = value || 0;\n\n\t\t// Return the value as-is if it's already a number:\n\t\tif (typeof value === \"number\") return value;\n\n\t\t// Default decimal point comes from settings, but could be set to eg. \",\" in opts:\n\t\tdecimal = decimal || lib.settings.number.decimal;\n\n\t\t // Build regex to strip out everything except digits, decimal point and minus sign:\n\t\tvar regex = new RegExp(\"[^0-9-\" + decimal + \"]\", [\"g\"]),\n\t\t\tunformatted = parseFloat(\n\t\t\t\t(\"\" + value)\n\t\t\t\t.replace(/\\((?=\\d+)(.*)\\)/, \"-$1\") // replace bracketed values with negatives\n\t\t\t\t.replace(regex, '')         // strip out any cruft\n\t\t\t\t.replace(decimal, '.')      // make sure decimal point is standard\n\t\t\t);\n\n\t\t// This will fail silently which may cause trouble, let's wait and see:\n\t\treturn !isNaN(unformatted) ? unformatted : 0;\n\t};\n\n\n\t/**\n\t * Implementation of toFixed() that treats floats more like decimals\n\t *\n\t * Fixes binary rounding issues (eg. (0.615).toFixed(2) === \"0.61\") that present\n\t * problems for accounting- and finance-related software.\n\t */\n\tvar toFixed = lib.toFixed = function(value, precision) {\n\t\tprecision = checkPrecision(precision, lib.settings.number.precision);\n\n\t\tvar exponentialForm = Number(lib.unformat(value) + 'e' + precision);\n\t\tvar rounded = Math.round(exponentialForm);\n\t\tvar finalResult = Number(rounded + 'e-' + precision).toFixed(precision);\n\t\treturn finalResult;\n\t};\n\n\n\t/**\n\t * Format a number, with comma-separated thousands and custom precision/decimal places\n\t * Alias: `accounting.format()`\n\t *\n\t * Localise by overriding the precision and thousand / decimal separators\n\t * 2nd parameter `precision` can be an object matching `settings.number`\n\t */\n\tvar formatNumber = lib.formatNumber = lib.format = function(number, precision, thousand, decimal) {\n\t\t// Resursively format arrays:\n\t\tif (isArray(number)) {\n\t\t\treturn map(number, function(val) {\n\t\t\t\treturn formatNumber(val, precision, thousand, decimal);\n\t\t\t});\n\t\t}\n\n\t\t// Clean up number:\n\t\tnumber = unformat(number);\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(precision) ? precision : {\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal\n\t\t\t\t}),\n\t\t\t\tlib.settings.number\n\t\t\t),\n\n\t\t\t// Clean up precision\n\t\t\tusePrecision = checkPrecision(opts.precision),\n\n\t\t\t// Do some calc:\n\t\t\tnegative = number < 0 ? \"-\" : \"\",\n\t\t\tbase = parseInt(toFixed(Math.abs(number || 0), usePrecision), 10) + \"\",\n\t\t\tmod = base.length > 3 ? base.length % 3 : 0;\n\n\t\t// Format the number:\n\t\treturn negative + (mod ? base.substr(0, mod) + opts.thousand : \"\") + base.substr(mod).replace(/(\\d{3})(?=\\d)/g, \"$1\" + opts.thousand) + (usePrecision ? opts.decimal + toFixed(Math.abs(number), usePrecision).split('.')[1] : \"\");\n\t};\n\n\n\t/**\n\t * Format a number into currency\n\t *\n\t * Usage: accounting.formatMoney(number, symbol, precision, thousandsSep, decimalSep, format)\n\t * defaults: (0, \"$\", 2, \",\", \".\", \"%s%v\")\n\t *\n\t * Localise by overriding the symbol, precision, thousand / decimal separators and format\n\t * Second param can be an object matching `settings.currency` which is the easiest way.\n\t *\n\t * To do: tidy up the parameters\n\t */\n\tvar formatMoney = lib.formatMoney = function(number, symbol, precision, thousand, decimal, format) {\n\t\t// Resursively format arrays:\n\t\tif (isArray(number)) {\n\t\t\treturn map(number, function(val){\n\t\t\t\treturn formatMoney(val, symbol, precision, thousand, decimal, format);\n\t\t\t});\n\t\t}\n\n\t\t// Clean up number:\n\t\tnumber = unformat(number);\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(symbol) ? symbol : {\n\t\t\t\t\tsymbol : symbol,\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal,\n\t\t\t\t\tformat : format\n\t\t\t\t}),\n\t\t\t\tlib.settings.currency\n\t\t\t),\n\n\t\t\t// Check format (returns object with pos, neg and zero):\n\t\t\tformats = checkCurrencyFormat(opts.format),\n\n\t\t\t// Choose which format to use for this value:\n\t\t\tuseFormat = number > 0 ? formats.pos : number < 0 ? formats.neg : formats.zero;\n\n\t\t// Return with currency symbol added:\n\t\treturn useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(number), checkPrecision(opts.precision), opts.thousand, opts.decimal));\n\t};\n\n\n\t/**\n\t * Format a list of numbers into an accounting column, padding with whitespace\n\t * to line up currency symbols, thousand separators and decimals places\n\t *\n\t * List should be an array of numbers\n\t * Second parameter can be an object containing keys that match the params\n\t *\n\t * Returns array of accouting-formatted number strings of same length\n\t *\n\t * NB: `white-space:pre` CSS rule is required on the list container to prevent\n\t * browsers from collapsing the whitespace in the output strings.\n\t */\n\tlib.formatColumn = function(list, symbol, precision, thousand, decimal, format) {\n\t\tif (!list || !isArray(list)) return [];\n\n\t\t// Build options object from second param (if object) or all params, extending defaults:\n\t\tvar opts = defaults(\n\t\t\t\t(isObject(symbol) ? symbol : {\n\t\t\t\t\tsymbol : symbol,\n\t\t\t\t\tprecision : precision,\n\t\t\t\t\tthousand : thousand,\n\t\t\t\t\tdecimal : decimal,\n\t\t\t\t\tformat : format\n\t\t\t\t}),\n\t\t\t\tlib.settings.currency\n\t\t\t),\n\n\t\t\t// Check format (returns object with pos, neg and zero), only need pos for now:\n\t\t\tformats = checkCurrencyFormat(opts.format),\n\n\t\t\t// Whether to pad at start of string or after currency symbol:\n\t\t\tpadAfterSymbol = formats.pos.indexOf(\"%s\") < formats.pos.indexOf(\"%v\") ? true : false,\n\n\t\t\t// Store value for the length of the longest string in the column:\n\t\t\tmaxLength = 0,\n\n\t\t\t// Format the list according to options, store the length of the longest string:\n\t\t\tformatted = map(list, function(val, i) {\n\t\t\t\tif (isArray(val)) {\n\t\t\t\t\t// Recursively format columns if list is a multi-dimensional array:\n\t\t\t\t\treturn lib.formatColumn(val, opts);\n\t\t\t\t} else {\n\t\t\t\t\t// Clean up the value\n\t\t\t\t\tval = unformat(val);\n\n\t\t\t\t\t// Choose which format to use for this value (pos, neg or zero):\n\t\t\t\t\tvar useFormat = val > 0 ? formats.pos : val < 0 ? formats.neg : formats.zero,\n\n\t\t\t\t\t\t// Format this value, push into formatted list and save the length:\n\t\t\t\t\t\tfVal = useFormat.replace('%s', opts.symbol).replace('%v', formatNumber(Math.abs(val), checkPrecision(opts.precision), opts.thousand, opts.decimal));\n\n\t\t\t\t\tif (fVal.length > maxLength) maxLength = fVal.length;\n\t\t\t\t\treturn fVal;\n\t\t\t\t}\n\t\t\t});\n\n\t\t// Pad each number in the list and send back the column of numbers:\n\t\treturn map(formatted, function(val, i) {\n\t\t\t// Only if this is a string (not a nested array, which would have already been padded):\n\t\t\tif (isString(val) && val.length < maxLength) {\n\t\t\t\t// Depending on symbol position, pad after symbol or at index 0:\n\t\t\t\treturn padAfterSymbol ? val.replace(opts.symbol, opts.symbol+(new Array(maxLength - val.length + 1).join(\" \"))) : (new Array(maxLength - val.length + 1).join(\" \")) + val;\n\t\t\t}\n\t\t\treturn val;\n\t\t});\n\t};\n\n\n\t/* --- Module Definition --- */\n\n\t// Export accounting for CommonJS. If being loaded as an AMD module, define it as such.\n\t// Otherwise, just add `accounting` to the global object\n\tif (typeof exports !== 'undefined') {\n\t\tif (typeof module !== 'undefined' && module.exports) {\n\t\t\texports = module.exports = lib;\n\t\t}\n\t\texports.accounting = lib;\n\t} else if (typeof define === 'function' && define.amd) {\n\t\t// Return the library as an AMD module:\n\t\tdefine([], function() {\n\t\t\treturn lib;\n\t\t});\n\t} else {\n\t\t// Use accounting.noConflict to restore `accounting` back to its original value.\n\t\t// Returns a reference to the library's `accounting` object;\n\t\t// e.g. `var numbers = accounting.noConflict();`\n\t\tlib.noConflict = (function(oldAccounting) {\n\t\t\treturn function() {\n\t\t\t\t// Reset the value of the root's `accounting` variable:\n\t\t\t\troot.accounting = oldAccounting;\n\t\t\t\t// Delete the noConflict method:\n\t\t\t\tlib.noConflict = undefined;\n\t\t\t\t// Return reference to the library to re-assign it:\n\t\t\t\treturn lib;\n\t\t\t};\n\t\t})(root.accounting);\n\n\t\t// Declare `fx` on the root (global/window) object:\n\t\troot['accounting'] = lib;\n\t}\n\n\t// Root will be `window` in browser or `global` on the server:\n}(this));\n","const Utils = require(\"./util\");\nconst pth = require(\"path\");\nconst ZipEntry = require(\"./zipEntry\");\nconst ZipFile = require(\"./zipFile\");\n\nconst get_Bool = (val, def) => (typeof val === \"boolean\" ? val : def);\nconst get_Str = (val, def) => (typeof val === \"string\" ? val : def);\n\nconst defaultOptions = {\n    // option \"noSort\" : if true it disables files sorting\n    noSort: false,\n    // read entries during load (initial loading may be slower)\n    readEntries: false,\n    // default method is none\n    method: Utils.Constants.NONE,\n    // file system\n    fs: null\n};\n\nmodule.exports = function (/**String*/ input, /** object */ options) {\n    let inBuffer = null;\n\n    // create object based default options, allowing them to be overwritten\n    const opts = Object.assign(Object.create(null), defaultOptions);\n\n    // test input variable\n    if (input && \"object\" === typeof input) {\n        // if value is not buffer we accept it to be object with options\n        if (!(input instanceof Uint8Array)) {\n            Object.assign(opts, input);\n            input = opts.input ? opts.input : undefined;\n            if (opts.input) delete opts.input;\n        }\n\n        // if input is buffer\n        if (Buffer.isBuffer(input)) {\n            inBuffer = input;\n            opts.method = Utils.Constants.BUFFER;\n            input = undefined;\n        }\n    }\n\n    // assign options\n    Object.assign(opts, options);\n\n    // instanciate utils filesystem\n    const filetools = new Utils(opts);\n\n    // if input is file name we retrieve its content\n    if (input && \"string\" === typeof input) {\n        // load zip file\n        if (filetools.fs.existsSync(input)) {\n            opts.method = Utils.Constants.FILE;\n            opts.filename = input;\n            inBuffer = filetools.fs.readFileSync(input);\n        } else {\n            throw new Error(Utils.Errors.INVALID_FILENAME);\n        }\n    }\n\n    // create variable\n    const _zip = new ZipFile(inBuffer, opts);\n\n    const { canonical, sanitize } = Utils;\n\n    function getEntry(/**Object*/ entry) {\n        if (entry && _zip) {\n            var item;\n            // If entry was given as a file name\n            if (typeof entry === \"string\") item = _zip.getEntry(entry);\n            // if entry was given as a ZipEntry object\n            if (typeof entry === \"object\" && typeof entry.entryName !== \"undefined\" && typeof entry.header !== \"undefined\") item = _zip.getEntry(entry.entryName);\n\n            if (item) {\n                return item;\n            }\n        }\n        return null;\n    }\n\n    function fixPath(zipPath) {\n        const { join, normalize, sep } = pth.posix;\n        // convert windows file separators and normalize\n        return join(\".\", normalize(sep + zipPath.split(\"\\\\\").join(sep) + sep));\n    }\n\n    return {\n        /**\n         * Extracts the given entry from the archive and returns the content as a Buffer object\n         * @param entry ZipEntry object or String with the full path of the entry\n         *\n         * @return Buffer or Null in case of error\n         */\n        readFile: function (/**Object*/ entry, /*String, Buffer*/ pass) {\n            var item = getEntry(entry);\n            return (item && item.getData(pass)) || null;\n        },\n\n        /**\n         * Asynchronous readFile\n         * @param entry ZipEntry object or String with the full path of the entry\n         * @param callback\n         *\n         * @return Buffer or Null in case of error\n         */\n        readFileAsync: function (/**Object*/ entry, /**Function*/ callback) {\n            var item = getEntry(entry);\n            if (item) {\n                item.getDataAsync(callback);\n            } else {\n                callback(null, \"getEntry failed for:\" + entry);\n            }\n        },\n\n        /**\n         * Extracts the given entry from the archive and returns the content as plain text in the given encoding\n         * @param entry ZipEntry object or String with the full path of the entry\n         * @param encoding Optional. If no encoding is specified utf8 is used\n         *\n         * @return String\n         */\n        readAsText: function (/**Object*/ entry, /**String=*/ encoding) {\n            var item = getEntry(entry);\n            if (item) {\n                var data = item.getData();\n                if (data && data.length) {\n                    return data.toString(encoding || \"utf8\");\n                }\n            }\n            return \"\";\n        },\n\n        /**\n         * Asynchronous readAsText\n         * @param entry ZipEntry object or String with the full path of the entry\n         * @param callback\n         * @param encoding Optional. If no encoding is specified utf8 is used\n         *\n         * @return String\n         */\n        readAsTextAsync: function (/**Object*/ entry, /**Function*/ callback, /**String=*/ encoding) {\n            var item = getEntry(entry);\n            if (item) {\n                item.getDataAsync(function (data, err) {\n                    if (err) {\n                        callback(data, err);\n                        return;\n                    }\n\n                    if (data && data.length) {\n                        callback(data.toString(encoding || \"utf8\"));\n                    } else {\n                        callback(\"\");\n                    }\n                });\n            } else {\n                callback(\"\");\n            }\n        },\n\n        /**\n         * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory\n         *\n         * @param entry\n         */\n        deleteFile: function (/**Object*/ entry) {\n            // @TODO: test deleteFile\n            var item = getEntry(entry);\n            if (item) {\n                _zip.deleteEntry(item.entryName);\n            }\n        },\n\n        /**\n         * Adds a comment to the zip. The zip must be rewritten after adding the comment.\n         *\n         * @param comment\n         */\n        addZipComment: function (/**String*/ comment) {\n            // @TODO: test addZipComment\n            _zip.comment = comment;\n        },\n\n        /**\n         * Returns the zip comment\n         *\n         * @return String\n         */\n        getZipComment: function () {\n            return _zip.comment || \"\";\n        },\n\n        /**\n         * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment\n         * The comment cannot exceed 65535 characters in length\n         *\n         * @param entry\n         * @param comment\n         */\n        addZipEntryComment: function (/**Object*/ entry, /**String*/ comment) {\n            var item = getEntry(entry);\n            if (item) {\n                item.comment = comment;\n            }\n        },\n\n        /**\n         * Returns the comment of the specified entry\n         *\n         * @param entry\n         * @return String\n         */\n        getZipEntryComment: function (/**Object*/ entry) {\n            var item = getEntry(entry);\n            if (item) {\n                return item.comment || \"\";\n            }\n            return \"\";\n        },\n\n        /**\n         * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content\n         *\n         * @param entry\n         * @param content\n         */\n        updateFile: function (/**Object*/ entry, /**Buffer*/ content) {\n            var item = getEntry(entry);\n            if (item) {\n                item.setData(content);\n            }\n        },\n\n        /**\n         * Adds a file from the disk to the archive\n         *\n         * @param localPath File to add to zip\n         * @param zipPath Optional path inside the zip\n         * @param zipName Optional name for the file\n         */\n        addLocalFile: function (/**String*/ localPath, /**String=*/ zipPath, /**String=*/ zipName, /**String*/ comment) {\n            if (filetools.fs.existsSync(localPath)) {\n                // fix ZipPath\n                zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n                // p - local file name\n                var p = localPath.split(\"\\\\\").join(\"/\").split(\"/\").pop();\n\n                // add file name into zippath\n                zipPath += zipName ? zipName : p;\n\n                // read file attributes\n                const _attr = filetools.fs.statSync(localPath);\n\n                // add file into zip file\n                this.addFile(zipPath, filetools.fs.readFileSync(localPath), comment, _attr);\n            } else {\n                throw new Error(Utils.Errors.FILE_NOT_FOUND.replace(\"%s\", localPath));\n            }\n        },\n\n        /**\n         * Adds a local directory and all its nested files and directories to the archive\n         *\n         * @param localPath\n         * @param zipPath optional path inside zip\n         * @param filter optional RegExp or Function if files match will\n         *               be included.\n         */\n        addLocalFolder: function (/**String*/ localPath, /**String=*/ zipPath, /**=RegExp|Function*/ filter) {\n            // Prepare filter\n            if (filter instanceof RegExp) {\n                // if filter is RegExp wrap it\n                filter = (function (rx) {\n                    return function (filename) {\n                        return rx.test(filename);\n                    };\n                })(filter);\n            } else if (\"function\" !== typeof filter) {\n                // if filter is not function we will replace it\n                filter = function () {\n                    return true;\n                };\n            }\n\n            // fix ZipPath\n            zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n            // normalize the path first\n            localPath = pth.normalize(localPath);\n\n            if (filetools.fs.existsSync(localPath)) {\n                const items = filetools.findFiles(localPath);\n                const self = this;\n\n                if (items.length) {\n                    items.forEach(function (filepath) {\n                        var p = pth.relative(localPath, filepath).split(\"\\\\\").join(\"/\"); //windows fix\n                        if (filter(p)) {\n                            var stats = filetools.fs.statSync(filepath);\n                            if (stats.isFile()) {\n                                self.addFile(zipPath + p, filetools.fs.readFileSync(filepath), \"\", stats);\n                            } else {\n                                self.addFile(zipPath + p + \"/\", Buffer.alloc(0), \"\", stats);\n                            }\n                        }\n                    });\n                }\n            } else {\n                throw new Error(Utils.Errors.FILE_NOT_FOUND.replace(\"%s\", localPath));\n            }\n        },\n\n        /**\n         * Asynchronous addLocalFile\n         * @param localPath\n         * @param callback\n         * @param zipPath optional path inside zip\n         * @param filter optional RegExp or Function if files match will\n         *               be included.\n         */\n        addLocalFolderAsync: function (/*String*/ localPath, /*Function*/ callback, /*String*/ zipPath, /*RegExp|Function*/ filter) {\n            if (filter instanceof RegExp) {\n                filter = (function (rx) {\n                    return function (filename) {\n                        return rx.test(filename);\n                    };\n                })(filter);\n            } else if (\"function\" !== typeof filter) {\n                filter = function () {\n                    return true;\n                };\n            }\n\n            // fix ZipPath\n            zipPath = zipPath ? fixPath(zipPath) : \"\";\n\n            // normalize the path first\n            localPath = pth.normalize(localPath);\n\n            var self = this;\n            filetools.fs.open(localPath, \"r\", function (err) {\n                if (err && err.code === \"ENOENT\") {\n                    callback(undefined, Utils.Errors.FILE_NOT_FOUND.replace(\"%s\", localPath));\n                } else if (err) {\n                    callback(undefined, err);\n                } else {\n                    var items = filetools.findFiles(localPath);\n                    var i = -1;\n\n                    var next = function () {\n                        i += 1;\n                        if (i < items.length) {\n                            var filepath = items[i];\n                            var p = pth.relative(localPath, filepath).split(\"\\\\\").join(\"/\"); //windows fix\n                            p = p\n                                .normalize(\"NFD\")\n                                .replace(/[\\u0300-\\u036f]/g, \"\")\n                                .replace(/[^\\x20-\\x7E]/g, \"\"); // accent fix\n                            if (filter(p)) {\n                                filetools.fs.stat(filepath, function (er0, stats) {\n                                    if (er0) callback(undefined, er0);\n                                    if (stats.isFile()) {\n                                        filetools.fs.readFile(filepath, function (er1, data) {\n                                            if (er1) {\n                                                callback(undefined, er1);\n                                            } else {\n                                                self.addFile(zipPath + p, data, \"\", stats);\n                                                next();\n                                            }\n                                        });\n                                    } else {\n                                        self.addFile(zipPath + p + \"/\", Buffer.alloc(0), \"\", stats);\n                                        next();\n                                    }\n                                });\n                            } else {\n                                next();\n                            }\n                        } else {\n                            callback(true, undefined);\n                        }\n                    };\n\n                    next();\n                }\n            });\n        },\n\n        /**\n         *\n         * @param {string} localPath - path where files will be extracted\n         * @param {object} props - optional properties\n         * @param {string} props.zipPath - optional path inside zip\n         * @param {regexp, function} props.filter - RegExp or Function if files match will be included.\n         */\n        addLocalFolderPromise: function (/*String*/ localPath, /* object */ props) {\n            return new Promise((resolve, reject) => {\n                const { filter, zipPath } = Object.assign({}, props);\n                this.addLocalFolderAsync(\n                    localPath,\n                    (done, err) => {\n                        if (err) reject(err);\n                        if (done) resolve(this);\n                    },\n                    zipPath,\n                    filter\n                );\n            });\n        },\n\n        /**\n         * Allows you to create a entry (file or directory) in the zip file.\n         * If you want to create a directory the entryName must end in / and a null buffer should be provided.\n         * Comment and attributes are optional\n         *\n         * @param {string} entryName\n         * @param {Buffer | string} content - file content as buffer or utf8 coded string\n         * @param {string} comment - file comment\n         * @param {number | object} attr - number as unix file permissions, object as filesystem Stats object\n         */\n        addFile: function (/**String*/ entryName, /**Buffer*/ content, /**String*/ comment, /**Number*/ attr) {\n            let entry = getEntry(entryName);\n            const update = entry != null;\n\n            // prepare new entry\n            if (!update) {\n                entry = new ZipEntry();\n                entry.entryName = entryName;\n            }\n            entry.comment = comment || \"\";\n\n            const isStat = \"object\" === typeof attr && attr instanceof filetools.fs.Stats;\n\n            // last modification time from file stats\n            if (isStat) {\n                entry.header.time = attr.mtime;\n            }\n\n            // Set file attribute\n            var fileattr = entry.isDirectory ? 0x10 : 0; // (MS-DOS directory flag)\n\n            // extended attributes field for Unix\n            if (!Utils.isWin) {\n                // set file type either S_IFDIR / S_IFREG\n                let unix = entry.isDirectory ? 0x4000 : 0x8000;\n\n                if (isStat) {\n                    // File attributes from file stats\n                    unix |= 0xfff & attr.mode;\n                } else if (\"number\" === typeof attr) {\n                    // attr from given attr values\n                    unix |= 0xfff & attr;\n                } else {\n                    // Default values:\n                    unix |= entry.isDirectory ? 0o755 : 0o644; // permissions (drwxr-xr-x) or (-r-wr--r--)\n                }\n\n                fileattr = (fileattr | (unix << 16)) >>> 0; // add attributes\n            }\n\n            entry.attr = fileattr;\n\n            entry.setData(content);\n            if (!update) _zip.setEntry(entry);\n        },\n\n        /**\n         * Returns an array of ZipEntry objects representing the files and folders inside the archive\n         *\n         * @return Array\n         */\n        getEntries: function () {\n            return _zip ? _zip.entries : [];\n        },\n\n        /**\n         * Returns a ZipEntry object representing the file or folder specified by ``name``.\n         *\n         * @param name\n         * @return ZipEntry\n         */\n        getEntry: function (/**String*/ name) {\n            return getEntry(name);\n        },\n\n        getEntryCount: function () {\n            return _zip.getEntryCount();\n        },\n\n        forEach: function (callback) {\n            return _zip.forEach(callback);\n        },\n\n        /**\n         * Extracts the given entry to the given targetPath\n         * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted\n         *\n         * @param entry ZipEntry object or String with the full path of the entry\n         * @param targetPath Target folder where to write the file\n         * @param maintainEntryPath If maintainEntryPath is true and the entry is inside a folder, the entry folder\n         *                          will be created in targetPath as well. Default is TRUE\n         * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.\n         *                  Default is FALSE\n         * @param keepOriginalPermission The file will be set as the permission from the entry if this is true.\n         *                  Default is FALSE\n         * @param outFileName String If set will override the filename of the extracted file (Only works if the entry is a file)\n         *\n         * @return Boolean\n         */\n        extractEntryTo: function (\n            /**Object*/ entry,\n            /**String*/ targetPath,\n            /**Boolean*/ maintainEntryPath,\n            /**Boolean*/ overwrite,\n            /**Boolean*/ keepOriginalPermission,\n            /**String**/ outFileName\n        ) {\n            overwrite = get_Bool(overwrite, false);\n            keepOriginalPermission = get_Bool(keepOriginalPermission, false);\n            maintainEntryPath = get_Bool(maintainEntryPath, true);\n            outFileName = get_Str(outFileName, get_Str(keepOriginalPermission, undefined));\n\n            var item = getEntry(entry);\n            if (!item) {\n                throw new Error(Utils.Errors.NO_ENTRY);\n            }\n\n            var entryName = canonical(item.entryName);\n\n            var target = sanitize(targetPath, outFileName && !item.isDirectory ? outFileName : maintainEntryPath ? entryName : pth.basename(entryName));\n\n            if (item.isDirectory) {\n                var children = _zip.getEntryChildren(item);\n                children.forEach(function (child) {\n                    if (child.isDirectory) return;\n                    var content = child.getData();\n                    if (!content) {\n                        throw new Error(Utils.Errors.CANT_EXTRACT_FILE);\n                    }\n                    var name = canonical(child.entryName);\n                    var childName = sanitize(targetPath, maintainEntryPath ? name : pth.basename(name));\n                    // The reverse operation for attr depend on method addFile()\n                    const fileAttr = keepOriginalPermission ? child.header.fileAttr : undefined;\n                    filetools.writeFileTo(childName, content, overwrite, fileAttr);\n                });\n                return true;\n            }\n\n            var content = item.getData();\n            if (!content) throw new Error(Utils.Errors.CANT_EXTRACT_FILE);\n\n            if (filetools.fs.existsSync(target) && !overwrite) {\n                throw new Error(Utils.Errors.CANT_OVERRIDE);\n            }\n            // The reverse operation for attr depend on method addFile()\n            const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n            filetools.writeFileTo(target, content, overwrite, fileAttr);\n\n            return true;\n        },\n\n        /**\n         * Test the archive\n         *\n         */\n        test: function (pass) {\n            if (!_zip) {\n                return false;\n            }\n\n            for (var entry in _zip.entries) {\n                try {\n                    if (entry.isDirectory) {\n                        continue;\n                    }\n                    var content = _zip.entries[entry].getData(pass);\n                    if (!content) {\n                        return false;\n                    }\n                } catch (err) {\n                    return false;\n                }\n            }\n            return true;\n        },\n\n        /**\n         * Extracts the entire archive to the given location\n         *\n         * @param targetPath Target location\n         * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.\n         *                  Default is FALSE\n         * @param keepOriginalPermission The file will be set as the permission from the entry if this is true.\n         *                  Default is FALSE\n         */\n        extractAllTo: function (/**String*/ targetPath, /**Boolean*/ overwrite, /**Boolean*/ keepOriginalPermission, /*String, Buffer*/ pass) {\n            overwrite = get_Bool(overwrite, false);\n            pass = get_Str(keepOriginalPermission, pass);\n            keepOriginalPermission = get_Bool(keepOriginalPermission, false);\n            if (!_zip) {\n                throw new Error(Utils.Errors.NO_ZIP);\n            }\n            _zip.entries.forEach(function (entry) {\n                var entryName = sanitize(targetPath, canonical(entry.entryName.toString()));\n                if (entry.isDirectory) {\n                    filetools.makeDir(entryName);\n                    return;\n                }\n                var content = entry.getData(pass);\n                if (!content) {\n                    throw new Error(Utils.Errors.CANT_EXTRACT_FILE);\n                }\n                // The reverse operation for attr depend on method addFile()\n                const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n                filetools.writeFileTo(entryName, content, overwrite, fileAttr);\n                try {\n                    filetools.fs.utimesSync(entryName, entry.header.time, entry.header.time);\n                } catch (err) {\n                    throw new Error(Utils.Errors.CANT_EXTRACT_FILE);\n                }\n            });\n        },\n\n        /**\n         * Asynchronous extractAllTo\n         *\n         * @param targetPath Target location\n         * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.\n         *                  Default is FALSE\n         * @param keepOriginalPermission The file will be set as the permission from the entry if this is true.\n         *                  Default is FALSE\n         * @param callback The callback will be executed when all entries are extracted successfully or any error is thrown.\n         */\n        extractAllToAsync: function (/**String*/ targetPath, /**Boolean*/ overwrite, /**Boolean*/ keepOriginalPermission, /**Function*/ callback) {\n            if (!callback) {\n                callback = function () {};\n            }\n            overwrite = get_Bool(overwrite, false);\n            if (typeof keepOriginalPermission === \"function\" && !callback) callback = keepOriginalPermission;\n            keepOriginalPermission = get_Bool(keepOriginalPermission, false);\n            if (!_zip) {\n                callback(new Error(Utils.Errors.NO_ZIP));\n                return;\n            }\n\n            targetPath = pth.resolve(targetPath);\n            // convert entryName to\n            const getPath = (entry) => sanitize(targetPath, pth.normalize(canonical(entry.entryName.toString())));\n            const getError = (msg, file) => new Error(msg + ': \"' + file + '\"');\n\n            // separate directories from files\n            const dirEntries = [];\n            const fileEntries = new Set();\n            _zip.entries.forEach((e) => {\n                if (e.isDirectory) {\n                    dirEntries.push(e);\n                } else {\n                    fileEntries.add(e);\n                }\n            });\n\n            // Create directory entries first synchronously\n            // this prevents race condition and assures folders are there before writing files\n            for (const entry of dirEntries) {\n                const dirPath = getPath(entry);\n                // The reverse operation for attr depend on method addFile()\n                const dirAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n                try {\n                    filetools.makeDir(dirPath);\n                    if (dirAttr) filetools.fs.chmodSync(dirPath, dirAttr);\n                    // in unix timestamp will change if files are later added to folder, but still\n                    filetools.fs.utimesSync(dirPath, entry.header.time, entry.header.time);\n                } catch (er) {\n                    callback(getError(\"Unable to create folder\", dirPath));\n                }\n            }\n\n            // callback wrapper, for some house keeping\n            const done = () => {\n                if (fileEntries.size === 0) {\n                    callback();\n                }\n            };\n\n            // Extract file entries asynchronously\n            for (const entry of fileEntries.values()) {\n                const entryName = pth.normalize(canonical(entry.entryName.toString()));\n                const filePath = sanitize(targetPath, entryName);\n                entry.getDataAsync(function (content, err_1) {\n                    if (err_1) {\n                        callback(new Error(err_1));\n                        return;\n                    }\n                    if (!content) {\n                        callback(new Error(Utils.Errors.CANT_EXTRACT_FILE));\n                    } else {\n                        // The reverse operation for attr depend on method addFile()\n                        const fileAttr = keepOriginalPermission ? entry.header.fileAttr : undefined;\n                        filetools.writeFileToAsync(filePath, content, overwrite, fileAttr, function (succ) {\n                            if (!succ) {\n                                callback(getError(\"Unable to write file\", filePath));\n                                return;\n                            }\n                            filetools.fs.utimes(filePath, entry.header.time, entry.header.time, function (err_2) {\n                                if (err_2) {\n                                    callback(getError(\"Unable to set times\", filePath));\n                                    return;\n                                }\n                                fileEntries.delete(entry);\n                                // call the callback if it was last entry\n                                done();\n                            });\n                        });\n                    }\n                });\n            }\n            // call the callback if fileEntries was empty\n            done();\n        },\n\n        /**\n         * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip\n         *\n         * @param targetFileName\n         * @param callback\n         */\n        writeZip: function (/**String*/ targetFileName, /**Function*/ callback) {\n            if (arguments.length === 1) {\n                if (typeof targetFileName === \"function\") {\n                    callback = targetFileName;\n                    targetFileName = \"\";\n                }\n            }\n\n            if (!targetFileName && opts.filename) {\n                targetFileName = opts.filename;\n            }\n            if (!targetFileName) return;\n\n            var zipData = _zip.compressToBuffer();\n            if (zipData) {\n                var ok = filetools.writeFileTo(targetFileName, zipData, true);\n                if (typeof callback === \"function\") callback(!ok ? new Error(\"failed\") : null, \"\");\n            }\n        },\n\n        writeZipPromise: function (/**String*/ targetFileName, /* object */ props) {\n            const { overwrite, perm } = Object.assign({ overwrite: true }, props);\n\n            return new Promise((resolve, reject) => {\n                // find file name\n                if (!targetFileName && opts.filename) targetFileName = opts.filename;\n                if (!targetFileName) reject(\"ADM-ZIP: ZIP File Name Missing\");\n\n                this.toBufferPromise().then((zipData) => {\n                    const ret = (done) => (done ? resolve(done) : reject(\"ADM-ZIP: Wasn't able to write zip file\"));\n                    filetools.writeFileToAsync(targetFileName, zipData, overwrite, perm, ret);\n                }, reject);\n            });\n        },\n\n        toBufferPromise: function () {\n            return new Promise((resolve, reject) => {\n                _zip.toAsyncBuffer(resolve, reject);\n            });\n        },\n\n        /**\n         * Returns the content of the entire zip file as a Buffer object\n         *\n         * @return Buffer\n         */\n        toBuffer: function (/**Function=*/ onSuccess, /**Function=*/ onFail, /**Function=*/ onItemStart, /**Function=*/ onItemEnd) {\n            this.valueOf = 2;\n            if (typeof onSuccess === \"function\") {\n                _zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd);\n                return null;\n            }\n            return _zip.compressToBuffer();\n        }\n    };\n};\n","var Utils = require(\"../util\"),\n    Constants = Utils.Constants;\n\n/* The central directory file header */\nmodule.exports = function () {\n    var _verMade = 20, // v2.0\n        _version = 10, // v1.0\n        _flags = 0,\n        _method = 0,\n        _time = 0,\n        _crc = 0,\n        _compressedSize = 0,\n        _size = 0,\n        _fnameLen = 0,\n        _extraLen = 0,\n        _comLen = 0,\n        _diskStart = 0,\n        _inattr = 0,\n        _attr = 0,\n        _offset = 0;\n\n    _verMade |= Utils.isWin ? 0x0a00 : 0x0300;\n\n    // Set EFS flag since filename and comment fields are all by default encoded using UTF-8.\n    // Without it file names may be corrupted for other apps when file names use unicode chars\n    _flags |= Constants.FLG_EFS;\n\n    var _dataHeader = {};\n\n    function setTime(val) {\n        val = new Date(val);\n        _time =\n            (((val.getFullYear() - 1980) & 0x7f) << 25) | // b09-16 years from 1980\n            ((val.getMonth() + 1) << 21) | // b05-08 month\n            (val.getDate() << 16) | // b00-04 hour\n            // 2 bytes time\n            (val.getHours() << 11) | // b11-15 hour\n            (val.getMinutes() << 5) | // b05-10 minute\n            (val.getSeconds() >> 1); // b00-04 seconds divided by 2\n    }\n\n    setTime(+new Date());\n\n    return {\n        get made() {\n            return _verMade;\n        },\n        set made(val) {\n            _verMade = val;\n        },\n\n        get version() {\n            return _version;\n        },\n        set version(val) {\n            _version = val;\n        },\n\n        get flags() {\n            return _flags;\n        },\n        set flags(val) {\n            _flags = val;\n        },\n\n        get method() {\n            return _method;\n        },\n        set method(val) {\n            switch (val) {\n                case Constants.STORED:\n                    this.version = 10;\n                case Constants.DEFLATED:\n                default:\n                    this.version = 20;\n            }\n            _method = val;\n        },\n\n        get time() {\n            return new Date(((_time >> 25) & 0x7f) + 1980, ((_time >> 21) & 0x0f) - 1, (_time >> 16) & 0x1f, (_time >> 11) & 0x1f, (_time >> 5) & 0x3f, (_time & 0x1f) << 1);\n        },\n        set time(val) {\n            setTime(val);\n        },\n\n        get crc() {\n            return _crc;\n        },\n        set crc(val) {\n            _crc = Math.max(0, val) >>> 0;\n        },\n\n        get compressedSize() {\n            return _compressedSize;\n        },\n        set compressedSize(val) {\n            _compressedSize = Math.max(0, val) >>> 0;\n        },\n\n        get size() {\n            return _size;\n        },\n        set size(val) {\n            _size = Math.max(0, val) >>> 0;\n        },\n\n        get fileNameLength() {\n            return _fnameLen;\n        },\n        set fileNameLength(val) {\n            _fnameLen = val;\n        },\n\n        get extraLength() {\n            return _extraLen;\n        },\n        set extraLength(val) {\n            _extraLen = val;\n        },\n\n        get commentLength() {\n            return _comLen;\n        },\n        set commentLength(val) {\n            _comLen = val;\n        },\n\n        get diskNumStart() {\n            return _diskStart;\n        },\n        set diskNumStart(val) {\n            _diskStart = Math.max(0, val) >>> 0;\n        },\n\n        get inAttr() {\n            return _inattr;\n        },\n        set inAttr(val) {\n            _inattr = Math.max(0, val) >>> 0;\n        },\n\n        get attr() {\n            return _attr;\n        },\n        set attr(val) {\n            _attr = Math.max(0, val) >>> 0;\n        },\n\n        // get Unix file permissions\n        get fileAttr() {\n            return _attr ? (((_attr >>> 0) | 0) >> 16) & 0xfff : 0;\n        },\n\n        get offset() {\n            return _offset;\n        },\n        set offset(val) {\n            _offset = Math.max(0, val) >>> 0;\n        },\n\n        get encripted() {\n            return (_flags & 1) === 1;\n        },\n\n        get entryHeaderSize() {\n            return Constants.CENHDR + _fnameLen + _extraLen + _comLen;\n        },\n\n        get realDataOffset() {\n            return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen;\n        },\n\n        get dataHeader() {\n            return _dataHeader;\n        },\n\n        loadDataHeaderFromBinary: function (/*Buffer*/ input) {\n            var data = input.slice(_offset, _offset + Constants.LOCHDR);\n            // 30 bytes and should start with \"PK\\003\\004\"\n            if (data.readUInt32LE(0) !== Constants.LOCSIG) {\n                throw new Error(Utils.Errors.INVALID_LOC);\n            }\n            _dataHeader = {\n                // version needed to extract\n                version: data.readUInt16LE(Constants.LOCVER),\n                // general purpose bit flag\n                flags: data.readUInt16LE(Constants.LOCFLG),\n                // compression method\n                method: data.readUInt16LE(Constants.LOCHOW),\n                // modification time (2 bytes time, 2 bytes date)\n                time: data.readUInt32LE(Constants.LOCTIM),\n                // uncompressed file crc-32 value\n                crc: data.readUInt32LE(Constants.LOCCRC),\n                // compressed size\n                compressedSize: data.readUInt32LE(Constants.LOCSIZ),\n                // uncompressed size\n                size: data.readUInt32LE(Constants.LOCLEN),\n                // filename length\n                fnameLen: data.readUInt16LE(Constants.LOCNAM),\n                // extra field length\n                extraLen: data.readUInt16LE(Constants.LOCEXT)\n            };\n        },\n\n        loadFromBinary: function (/*Buffer*/ data) {\n            // data should be 46 bytes and start with \"PK 01 02\"\n            if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) {\n                throw new Error(Utils.Errors.INVALID_CEN);\n            }\n            // version made by\n            _verMade = data.readUInt16LE(Constants.CENVEM);\n            // version needed to extract\n            _version = data.readUInt16LE(Constants.CENVER);\n            // encrypt, decrypt flags\n            _flags = data.readUInt16LE(Constants.CENFLG);\n            // compression method\n            _method = data.readUInt16LE(Constants.CENHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            _time = data.readUInt32LE(Constants.CENTIM);\n            // uncompressed file crc-32 value\n            _crc = data.readUInt32LE(Constants.CENCRC);\n            // compressed size\n            _compressedSize = data.readUInt32LE(Constants.CENSIZ);\n            // uncompressed size\n            _size = data.readUInt32LE(Constants.CENLEN);\n            // filename length\n            _fnameLen = data.readUInt16LE(Constants.CENNAM);\n            // extra field length\n            _extraLen = data.readUInt16LE(Constants.CENEXT);\n            // file comment length\n            _comLen = data.readUInt16LE(Constants.CENCOM);\n            // volume number start\n            _diskStart = data.readUInt16LE(Constants.CENDSK);\n            // internal file attributes\n            _inattr = data.readUInt16LE(Constants.CENATT);\n            // external file attributes\n            _attr = data.readUInt32LE(Constants.CENATX);\n            // LOC header offset\n            _offset = data.readUInt32LE(Constants.CENOFF);\n        },\n\n        dataHeaderToBinary: function () {\n            // LOC header size (30 bytes)\n            var data = Buffer.alloc(Constants.LOCHDR);\n            // \"PK\\003\\004\"\n            data.writeUInt32LE(Constants.LOCSIG, 0);\n            // version needed to extract\n            data.writeUInt16LE(_version, Constants.LOCVER);\n            // general purpose bit flag\n            data.writeUInt16LE(_flags, Constants.LOCFLG);\n            // compression method\n            data.writeUInt16LE(_method, Constants.LOCHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            data.writeUInt32LE(_time, Constants.LOCTIM);\n            // uncompressed file crc-32 value\n            data.writeUInt32LE(_crc, Constants.LOCCRC);\n            // compressed size\n            data.writeUInt32LE(_compressedSize, Constants.LOCSIZ);\n            // uncompressed size\n            data.writeUInt32LE(_size, Constants.LOCLEN);\n            // filename length\n            data.writeUInt16LE(_fnameLen, Constants.LOCNAM);\n            // extra field length\n            data.writeUInt16LE(_extraLen, Constants.LOCEXT);\n            return data;\n        },\n\n        entryHeaderToBinary: function () {\n            // CEN header size (46 bytes)\n            var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen);\n            // \"PK\\001\\002\"\n            data.writeUInt32LE(Constants.CENSIG, 0);\n            // version made by\n            data.writeUInt16LE(_verMade, Constants.CENVEM);\n            // version needed to extract\n            data.writeUInt16LE(_version, Constants.CENVER);\n            // encrypt, decrypt flags\n            data.writeUInt16LE(_flags, Constants.CENFLG);\n            // compression method\n            data.writeUInt16LE(_method, Constants.CENHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            data.writeUInt32LE(_time, Constants.CENTIM);\n            // uncompressed file crc-32 value\n            data.writeUInt32LE(_crc, Constants.CENCRC);\n            // compressed size\n            data.writeUInt32LE(_compressedSize, Constants.CENSIZ);\n            // uncompressed size\n            data.writeUInt32LE(_size, Constants.CENLEN);\n            // filename length\n            data.writeUInt16LE(_fnameLen, Constants.CENNAM);\n            // extra field length\n            data.writeUInt16LE(_extraLen, Constants.CENEXT);\n            // file comment length\n            data.writeUInt16LE(_comLen, Constants.CENCOM);\n            // volume number start\n            data.writeUInt16LE(_diskStart, Constants.CENDSK);\n            // internal file attributes\n            data.writeUInt16LE(_inattr, Constants.CENATT);\n            // external file attributes\n            data.writeUInt32LE(_attr, Constants.CENATX);\n            // LOC header offset\n            data.writeUInt32LE(_offset, Constants.CENOFF);\n            // fill all with\n            data.fill(0x00, Constants.CENHDR);\n            return data;\n        },\n\n        toJSON: function () {\n            const bytes = function (nr) {\n                return nr + \" bytes\";\n            };\n\n            return {\n                made: _verMade,\n                version: _version,\n                flags: _flags,\n                method: Utils.methodToString(_method),\n                time: this.time,\n                crc: \"0x\" + _crc.toString(16).toUpperCase(),\n                compressedSize: bytes(_compressedSize),\n                size: bytes(_size),\n                fileNameLength: bytes(_fnameLen),\n                extraLength: bytes(_extraLen),\n                commentLength: bytes(_comLen),\n                diskNumStart: _diskStart,\n                inAttr: _inattr,\n                attr: _attr,\n                offset: _offset,\n                entryHeaderSize: bytes(Constants.CENHDR + _fnameLen + _extraLen + _comLen)\n            };\n        },\n\n        toString: function () {\n            return JSON.stringify(this.toJSON(), null, \"\\t\");\n        }\n    };\n};\n","exports.EntryHeader = require(\"./entryHeader\");\nexports.MainHeader = require(\"./mainHeader\");\n","var Utils = require(\"../util\"),\n    Constants = Utils.Constants;\n\n/* The entries in the end of central directory */\nmodule.exports = function () {\n    var _volumeEntries = 0,\n        _totalEntries = 0,\n        _size = 0,\n        _offset = 0,\n        _commentLength = 0;\n\n    return {\n        get diskEntries() {\n            return _volumeEntries;\n        },\n        set diskEntries(/*Number*/ val) {\n            _volumeEntries = _totalEntries = val;\n        },\n\n        get totalEntries() {\n            return _totalEntries;\n        },\n        set totalEntries(/*Number*/ val) {\n            _totalEntries = _volumeEntries = val;\n        },\n\n        get size() {\n            return _size;\n        },\n        set size(/*Number*/ val) {\n            _size = val;\n        },\n\n        get offset() {\n            return _offset;\n        },\n        set offset(/*Number*/ val) {\n            _offset = val;\n        },\n\n        get commentLength() {\n            return _commentLength;\n        },\n        set commentLength(/*Number*/ val) {\n            _commentLength = val;\n        },\n\n        get mainHeaderSize() {\n            return Constants.ENDHDR + _commentLength;\n        },\n\n        loadFromBinary: function (/*Buffer*/ data) {\n            // data should be 22 bytes and start with \"PK 05 06\"\n            // or be 56+ bytes and start with \"PK 06 06\" for Zip64\n            if (\n                (data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG) &&\n                (data.length < Constants.ZIP64HDR || data.readUInt32LE(0) !== Constants.ZIP64SIG)\n            ) {\n                throw new Error(Utils.Errors.INVALID_END);\n            }\n\n            if (data.readUInt32LE(0) === Constants.ENDSIG) {\n                // number of entries on this volume\n                _volumeEntries = data.readUInt16LE(Constants.ENDSUB);\n                // total number of entries\n                _totalEntries = data.readUInt16LE(Constants.ENDTOT);\n                // central directory size in bytes\n                _size = data.readUInt32LE(Constants.ENDSIZ);\n                // offset of first CEN header\n                _offset = data.readUInt32LE(Constants.ENDOFF);\n                // zip file comment length\n                _commentLength = data.readUInt16LE(Constants.ENDCOM);\n            } else {\n                // number of entries on this volume\n                _volumeEntries = Utils.readBigUInt64LE(data, Constants.ZIP64SUB);\n                // total number of entries\n                _totalEntries = Utils.readBigUInt64LE(data, Constants.ZIP64TOT);\n                // central directory size in bytes\n                _size = Utils.readBigUInt64LE(data, Constants.ZIP64SIZ);\n                // offset of first CEN header\n                _offset = Utils.readBigUInt64LE(data, Constants.ZIP64OFF);\n\n                _commentLength = 0;\n            }\n        },\n\n        toBinary: function () {\n            var b = Buffer.alloc(Constants.ENDHDR + _commentLength);\n            // \"PK 05 06\" signature\n            b.writeUInt32LE(Constants.ENDSIG, 0);\n            b.writeUInt32LE(0, 4);\n            // number of entries on this volume\n            b.writeUInt16LE(_volumeEntries, Constants.ENDSUB);\n            // total number of entries\n            b.writeUInt16LE(_totalEntries, Constants.ENDTOT);\n            // central directory size in bytes\n            b.writeUInt32LE(_size, Constants.ENDSIZ);\n            // offset of first CEN header\n            b.writeUInt32LE(_offset, Constants.ENDOFF);\n            // zip file comment length\n            b.writeUInt16LE(_commentLength, Constants.ENDCOM);\n            // fill comment memory with spaces so no garbage is left there\n            b.fill(\" \", Constants.ENDHDR);\n\n            return b;\n        },\n\n        toJSON: function () {\n            // creates 0x0000 style output\n            const offset = function (nr, len) {\n                let offs = nr.toString(16).toUpperCase();\n                while (offs.length < len) offs = \"0\" + offs;\n                return \"0x\" + offs;\n            };\n\n            return {\n                diskEntries: _volumeEntries,\n                totalEntries: _totalEntries,\n                size: _size + \" bytes\",\n                offset: offset(_offset, 4),\n                commentLength: _commentLength\n            };\n        },\n\n        toString: function () {\n            return JSON.stringify(this.toJSON(), null, \"\\t\");\n        }\n    };\n};\n","module.exports = function (/*Buffer*/ inbuf) {\n    var zlib = require(\"zlib\");\n\n    var opts = { chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024 };\n\n    return {\n        deflate: function () {\n            return zlib.deflateRawSync(inbuf, opts);\n        },\n\n        deflateAsync: function (/*Function*/ callback) {\n            var tmp = zlib.createDeflateRaw(opts),\n                parts = [],\n                total = 0;\n            tmp.on(\"data\", function (data) {\n                parts.push(data);\n                total += data.length;\n            });\n            tmp.on(\"end\", function () {\n                var buf = Buffer.alloc(total),\n                    written = 0;\n                buf.fill(0);\n                for (var i = 0; i < parts.length; i++) {\n                    var part = parts[i];\n                    part.copy(buf, written);\n                    written += part.length;\n                }\n                callback && callback(buf);\n            });\n            tmp.end(inbuf);\n        }\n    };\n};\n","exports.Deflater = require(\"./deflater\");\nexports.Inflater = require(\"./inflater\");\nexports.ZipCrypto = require(\"./zipcrypto\");\n","module.exports = function (/*Buffer*/ inbuf) {\n    var zlib = require(\"zlib\");\n\n    return {\n        inflate: function () {\n            return zlib.inflateRawSync(inbuf);\n        },\n\n        inflateAsync: function (/*Function*/ callback) {\n            var tmp = zlib.createInflateRaw(),\n                parts = [],\n                total = 0;\n            tmp.on(\"data\", function (data) {\n                parts.push(data);\n                total += data.length;\n            });\n            tmp.on(\"end\", function () {\n                var buf = Buffer.alloc(total),\n                    written = 0;\n                buf.fill(0);\n                for (var i = 0; i < parts.length; i++) {\n                    var part = parts[i];\n                    part.copy(buf, written);\n                    written += part.length;\n                }\n                callback && callback(buf);\n            });\n            tmp.end(inbuf);\n        }\n    };\n};\n","\"use strict\";\n\n// node crypt, we use it for generate salt\n// eslint-disable-next-line node/no-unsupported-features/node-builtins\nconst { randomFillSync } = require(\"crypto\");\n\n// generate CRC32 lookup table\nconst crctable = new Uint32Array(256).map((t, crc) => {\n    for (let j = 0; j < 8; j++) {\n        if (0 !== (crc & 1)) {\n            crc = (crc >>> 1) ^ 0xedb88320;\n        } else {\n            crc >>>= 1;\n        }\n    }\n    return crc >>> 0;\n});\n\n// C-style uInt32 Multiply (discards higher bits, when JS multiply discards lower bits)\nconst uMul = (a, b) => Math.imul(a, b) >>> 0;\n\n// crc32 byte single update (actually same function is part of utils.crc32 function :) )\nconst crc32update = (pCrc32, bval) => {\n    return crctable[(pCrc32 ^ bval) & 0xff] ^ (pCrc32 >>> 8);\n};\n\n// function for generating salt for encrytion header\nconst genSalt = () => {\n    if (\"function\" === typeof randomFillSync) {\n        return randomFillSync(Buffer.alloc(12));\n    } else {\n        // fallback if function is not defined\n        return genSalt.node();\n    }\n};\n\n// salt generation with node random function (mainly as fallback)\ngenSalt.node = () => {\n    const salt = Buffer.alloc(12);\n    const len = salt.length;\n    for (let i = 0; i < len; i++) salt[i] = (Math.random() * 256) & 0xff;\n    return salt;\n};\n\n// general config\nconst config = {\n    genSalt\n};\n\n// Class Initkeys handles same basic ops with keys\nfunction Initkeys(pw) {\n    const pass = Buffer.isBuffer(pw) ? pw : Buffer.from(pw);\n    this.keys = new Uint32Array([0x12345678, 0x23456789, 0x34567890]);\n    for (let i = 0; i < pass.length; i++) {\n        this.updateKeys(pass[i]);\n    }\n}\n\nInitkeys.prototype.updateKeys = function (byteValue) {\n    const keys = this.keys;\n    keys[0] = crc32update(keys[0], byteValue);\n    keys[1] += keys[0] & 0xff;\n    keys[1] = uMul(keys[1], 134775813) + 1;\n    keys[2] = crc32update(keys[2], keys[1] >>> 24);\n    return byteValue;\n};\n\nInitkeys.prototype.next = function () {\n    const k = (this.keys[2] | 2) >>> 0; // key\n    return (uMul(k, k ^ 1) >> 8) & 0xff; // decode\n};\n\nfunction make_decrypter(/*Buffer*/ pwd) {\n    // 1. Stage initialize key\n    const keys = new Initkeys(pwd);\n\n    // return decrypter function\n    return function (/*Buffer*/ data) {\n        // result - we create new Buffer for results\n        const result = Buffer.alloc(data.length);\n        let pos = 0;\n        // process input data\n        for (let c of data) {\n            //c ^= keys.next();\n            //result[pos++] = c; // decode & Save Value\n            result[pos++] = keys.updateKeys(c ^ keys.next()); // update keys with decoded byte\n        }\n        return result;\n    };\n}\n\nfunction make_encrypter(/*Buffer*/ pwd) {\n    // 1. Stage initialize key\n    const keys = new Initkeys(pwd);\n\n    // return encrypting function, result and pos is here so we dont have to merge buffers later\n    return function (/*Buffer*/ data, /*Buffer*/ result, /* Number */ pos = 0) {\n        // result - we create new Buffer for results\n        if (!result) result = Buffer.alloc(data.length);\n        // process input data\n        for (let c of data) {\n            const k = keys.next(); // save key byte\n            result[pos++] = c ^ k; // save val\n            keys.updateKeys(c); // update keys with decoded byte\n        }\n        return result;\n    };\n}\n\nfunction decrypt(/*Buffer*/ data, /*Object*/ header, /*String, Buffer*/ pwd) {\n    if (!data || !Buffer.isBuffer(data) || data.length < 12) {\n        return Buffer.alloc(0);\n    }\n\n    // 1. We Initialize and generate decrypting function\n    const decrypter = make_decrypter(pwd);\n\n    // 2. decrypt salt what is always 12 bytes and is a part of file content\n    const salt = decrypter(data.slice(0, 12));\n\n    // 3. does password meet expectations\n    if (salt[11] !== header.crc >>> 24) {\n        throw \"ADM-ZIP: Wrong Password\";\n    }\n\n    // 4. decode content\n    return decrypter(data.slice(12));\n}\n\n// lets add way to populate salt, NOT RECOMMENDED for production but maybe useful for testing general functionality\nfunction _salter(data) {\n    if (Buffer.isBuffer(data) && data.length >= 12) {\n        // be aware - currently salting buffer data is modified\n        config.genSalt = function () {\n            return data.slice(0, 12);\n        };\n    } else if (data === \"node\") {\n        // test salt generation with node random function\n        config.genSalt = genSalt.node;\n    } else {\n        // if value is not acceptable config gets reset.\n        config.genSalt = genSalt;\n    }\n}\n\nfunction encrypt(/*Buffer*/ data, /*Object*/ header, /*String, Buffer*/ pwd, /*Boolean*/ oldlike = false) {\n    // 1. test data if data is not Buffer we make buffer from it\n    if (data == null) data = Buffer.alloc(0);\n    // if data is not buffer be make buffer from it\n    if (!Buffer.isBuffer(data)) data = Buffer.from(data.toString());\n\n    // 2. We Initialize and generate encrypting function\n    const encrypter = make_encrypter(pwd);\n\n    // 3. generate salt (12-bytes of random data)\n    const salt = config.genSalt();\n    salt[11] = (header.crc >>> 24) & 0xff;\n\n    // old implementations (before PKZip 2.04g) used two byte check\n    if (oldlike) salt[10] = (header.crc >>> 16) & 0xff;\n\n    // 4. create output\n    const result = Buffer.alloc(data.length + 12);\n    encrypter(salt, result);\n\n    // finally encode content\n    return encrypter(data, result, 12);\n}\n\nmodule.exports = { decrypt, encrypt, _salter };\n","module.exports = {\n    /* The local file header */\n    LOCHDR           : 30, // LOC header size\n    LOCSIG           : 0x04034b50, // \"PK\\003\\004\"\n    LOCVER           : 4,\t// version needed to extract\n    LOCFLG           : 6, // general purpose bit flag\n    LOCHOW           : 8, // compression method\n    LOCTIM           : 10, // modification time (2 bytes time, 2 bytes date)\n    LOCCRC           : 14, // uncompressed file crc-32 value\n    LOCSIZ           : 18, // compressed size\n    LOCLEN           : 22, // uncompressed size\n    LOCNAM           : 26, // filename length\n    LOCEXT           : 28, // extra field length\n\n    /* The Data descriptor */\n    EXTSIG           : 0x08074b50, // \"PK\\007\\008\"\n    EXTHDR           : 16, // EXT header size\n    EXTCRC           : 4, // uncompressed file crc-32 value\n    EXTSIZ           : 8, // compressed size\n    EXTLEN           : 12, // uncompressed size\n\n    /* The central directory file header */\n    CENHDR           : 46, // CEN header size\n    CENSIG           : 0x02014b50, // \"PK\\001\\002\"\n    CENVEM           : 4, // version made by\n    CENVER           : 6, // version needed to extract\n    CENFLG           : 8, // encrypt, decrypt flags\n    CENHOW           : 10, // compression method\n    CENTIM           : 12, // modification time (2 bytes time, 2 bytes date)\n    CENCRC           : 16, // uncompressed file crc-32 value\n    CENSIZ           : 20, // compressed size\n    CENLEN           : 24, // uncompressed size\n    CENNAM           : 28, // filename length\n    CENEXT           : 30, // extra field length\n    CENCOM           : 32, // file comment length\n    CENDSK           : 34, // volume number start\n    CENATT           : 36, // internal file attributes\n    CENATX           : 38, // external file attributes (host system dependent)\n    CENOFF           : 42, // LOC header offset\n\n    /* The entries in the end of central directory */\n    ENDHDR           : 22, // END header size\n    ENDSIG           : 0x06054b50, // \"PK\\005\\006\"\n    ENDSUB           : 8, // number of entries on this disk\n    ENDTOT           : 10, // total number of entries\n    ENDSIZ           : 12, // central directory size in bytes\n    ENDOFF           : 16, // offset of first CEN header\n    ENDCOM           : 20, // zip file comment length\n\n    END64HDR         : 20, // zip64 END header size\n    END64SIG         : 0x07064b50, // zip64 Locator signature, \"PK\\006\\007\"\n    END64START       : 4, // number of the disk with the start of the zip64\n    END64OFF         : 8, // relative offset of the zip64 end of central directory\n    END64NUMDISKS    : 16, // total number of disks\n\n    ZIP64SIG         : 0x06064b50, // zip64 signature, \"PK\\006\\006\"\n    ZIP64HDR         : 56, // zip64 record minimum size\n    ZIP64LEAD        : 12, // leading bytes at the start of the record, not counted by the value stored in ZIP64SIZE\n    ZIP64SIZE        : 4, // zip64 size of the central directory record\n    ZIP64VEM         : 12, // zip64 version made by\n    ZIP64VER         : 14, // zip64 version needed to extract\n    ZIP64DSK         : 16, // zip64 number of this disk\n    ZIP64DSKDIR      : 20, // number of the disk with the start of the record directory\n    ZIP64SUB         : 24, // number of entries on this disk\n    ZIP64TOT         : 32, // total number of entries\n    ZIP64SIZB        : 40, // zip64 central directory size in bytes\n    ZIP64OFF         : 48, // offset of start of central directory with respect to the starting disk number\n    ZIP64EXTRA       : 56, // extensible data sector\n\n    /* Compression methods */\n    STORED           : 0, // no compression\n    SHRUNK           : 1, // shrunk\n    REDUCED1         : 2, // reduced with compression factor 1\n    REDUCED2         : 3, // reduced with compression factor 2\n    REDUCED3         : 4, // reduced with compression factor 3\n    REDUCED4         : 5, // reduced with compression factor 4\n    IMPLODED         : 6, // imploded\n    // 7 reserved for Tokenizing compression algorithm\n    DEFLATED         : 8, // deflated\n    ENHANCED_DEFLATED: 9, // enhanced deflated\n    PKWARE           : 10,// PKWare DCL imploded\n    // 11 reserved by PKWARE\n    BZIP2            : 12, //  compressed using BZIP2\n    // 13 reserved by PKWARE\n    LZMA             : 14, // LZMA\n    // 15-17 reserved by PKWARE\n    IBM_TERSE        : 18, // compressed using IBM TERSE\n    IBM_LZ77         : 19, // IBM LZ77 z\n    AES_ENCRYPT      : 99, // WinZIP AES encryption method\n\n    /* General purpose bit flag */\n    // values can obtained with expression 2**bitnr\n    FLG_ENC          : 1,    // Bit 0: encrypted file\n    FLG_COMP1        : 2,    // Bit 1, compression option\n    FLG_COMP2        : 4,    // Bit 2, compression option\n    FLG_DESC         : 8,    // Bit 3, data descriptor\n    FLG_ENH          : 16,   // Bit 4, enhanced deflating\n    FLG_PATCH        : 32,   // Bit 5, indicates that the file is compressed patched data.\n    FLG_STR          : 64,   // Bit 6, strong encryption (patented)\n                             // Bits 7-10: Currently unused.\n    FLG_EFS          : 2048, // Bit 11: Language encoding flag (EFS)\n                             // Bit 12: Reserved by PKWARE for enhanced compression.\n                             // Bit 13: encrypted the Central Directory (patented).\n                             // Bits 14-15: Reserved by PKWARE.\n    FLG_MSK          : 4096, // mask header values\n\n    /* Load type */\n    FILE             : 2,\n    BUFFER           : 1,\n    NONE             : 0,\n\n    /* 4.5 Extensible data fields */\n    EF_ID            : 0,\n    EF_SIZE          : 2,\n\n    /* Header IDs */\n    ID_ZIP64         : 0x0001,\n    ID_AVINFO        : 0x0007,\n    ID_PFS           : 0x0008,\n    ID_OS2           : 0x0009,\n    ID_NTFS          : 0x000a,\n    ID_OPENVMS       : 0x000c,\n    ID_UNIX          : 0x000d,\n    ID_FORK          : 0x000e,\n    ID_PATCH         : 0x000f,\n    ID_X509_PKCS7    : 0x0014,\n    ID_X509_CERTID_F : 0x0015,\n    ID_X509_CERTID_C : 0x0016,\n    ID_STRONGENC     : 0x0017,\n    ID_RECORD_MGT    : 0x0018,\n    ID_X509_PKCS7_RL : 0x0019,\n    ID_IBM1          : 0x0065,\n    ID_IBM2          : 0x0066,\n    ID_POSZIP        : 0x4690,\n\n    EF_ZIP64_OR_32   : 0xffffffff,\n    EF_ZIP64_OR_16   : 0xffff,\n    EF_ZIP64_SUNCOMP : 0,\n    EF_ZIP64_SCOMP   : 8,\n    EF_ZIP64_RHO     : 16,\n    EF_ZIP64_DSN     : 24\n};\n","module.exports = {\n    /* Header error messages */\n    INVALID_LOC: \"Invalid LOC header (bad signature)\",\n    INVALID_CEN: \"Invalid CEN header (bad signature)\",\n    INVALID_END: \"Invalid END header (bad signature)\",\n\n    /* ZipEntry error messages*/\n    NO_DATA: \"Nothing to decompress\",\n    BAD_CRC: \"CRC32 checksum failed\",\n    FILE_IN_THE_WAY: \"There is a file in the way: %s\",\n    UNKNOWN_METHOD: \"Invalid/unsupported compression method\",\n\n    /* Inflater error messages */\n    AVAIL_DATA: \"inflate::Available inflate data did not terminate\",\n    INVALID_DISTANCE: \"inflate::Invalid literal/length or distance code in fixed or dynamic block\",\n    TO_MANY_CODES: \"inflate::Dynamic block code description: too many length or distance codes\",\n    INVALID_REPEAT_LEN: \"inflate::Dynamic block code description: repeat more than specified lengths\",\n    INVALID_REPEAT_FIRST: \"inflate::Dynamic block code description: repeat lengths with no first length\",\n    INCOMPLETE_CODES: \"inflate::Dynamic block code description: code lengths codes incomplete\",\n    INVALID_DYN_DISTANCE: \"inflate::Dynamic block code description: invalid distance code lengths\",\n    INVALID_CODES_LEN: \"inflate::Dynamic block code description: invalid literal/length code lengths\",\n    INVALID_STORE_BLOCK: \"inflate::Stored block length did not match one's complement\",\n    INVALID_BLOCK_TYPE: \"inflate::Invalid block type (type == 3)\",\n\n    /* ADM-ZIP error messages */\n    CANT_EXTRACT_FILE: \"Could not extract the file\",\n    CANT_OVERRIDE: \"Target file already exists\",\n    NO_ZIP: \"No zip file was loaded\",\n    NO_ENTRY: \"Entry doesn't exist\",\n    DIRECTORY_CONTENT_ERROR: \"A directory cannot have content\",\n    FILE_NOT_FOUND: \"File not found: %s\",\n    NOT_IMPLEMENTED: \"Not implemented\",\n    INVALID_FILENAME: \"Invalid filename\",\n    INVALID_FORMAT: \"Invalid or unsupported zip format. No END header found\"\n};\n","const fs = require(\"./fileSystem\").require();\nconst pth = require(\"path\");\n\nfs.existsSync = fs.existsSync || pth.existsSync;\n\nmodule.exports = function (/*String*/ path) {\n    var _path = path || \"\",\n        _obj = newAttr(),\n        _stat = null;\n\n    function newAttr() {\n        return {\n            directory: false,\n            readonly: false,\n            hidden: false,\n            executable: false,\n            mtime: 0,\n            atime: 0\n        };\n    }\n\n    if (_path && fs.existsSync(_path)) {\n        _stat = fs.statSync(_path);\n        _obj.directory = _stat.isDirectory();\n        _obj.mtime = _stat.mtime;\n        _obj.atime = _stat.atime;\n        _obj.executable = (0o111 & _stat.mode) !== 0; // file is executable who ever har right not just owner\n        _obj.readonly = (0o200 & _stat.mode) === 0; // readonly if owner has no write right\n        _obj.hidden = pth.basename(_path)[0] === \".\";\n    } else {\n        console.warn(\"Invalid path: \" + _path);\n    }\n\n    return {\n        get directory() {\n            return _obj.directory;\n        },\n\n        get readOnly() {\n            return _obj.readonly;\n        },\n\n        get hidden() {\n            return _obj.hidden;\n        },\n\n        get mtime() {\n            return _obj.mtime;\n        },\n\n        get atime() {\n            return _obj.atime;\n        },\n\n        get executable() {\n            return _obj.executable;\n        },\n\n        decodeAttributes: function () {},\n\n        encodeAttributes: function () {},\n\n        toJSON: function () {\n            return {\n                path: _path,\n                isDirectory: _obj.directory,\n                isReadOnly: _obj.readonly,\n                isHidden: _obj.hidden,\n                isExecutable: _obj.executable,\n                mTime: _obj.mtime,\n                aTime: _obj.atime\n            };\n        },\n\n        toString: function () {\n            return JSON.stringify(this.toJSON(), null, \"\\t\");\n        }\n    };\n};\n","exports.require = function () {\n    if (typeof process === \"object\" && process.versions && process.versions[\"electron\"]) {\n        try {\n            const originalFs = require(\"original-fs\");\n            if (Object.keys(originalFs).length > 0) {\n                return originalFs;\n            }\n        } catch (e) {}\n    }\n    return require(\"fs\");\n};\n","module.exports = require(\"./utils\");\nmodule.exports.Constants = require(\"./constants\");\nmodule.exports.Errors = require(\"./errors\");\nmodule.exports.FileAttr = require(\"./fattr\");\n","const fsystem = require(\"./fileSystem\").require();\nconst pth = require(\"path\");\nconst Constants = require(\"./constants\");\nconst isWin = typeof process === \"object\" && \"win32\" === process.platform;\n\nconst is_Obj = (obj) => obj && typeof obj === \"object\";\n\n// generate CRC32 lookup table\nconst crcTable = new Uint32Array(256).map((t, c) => {\n    for (let k = 0; k < 8; k++) {\n        if ((c & 1) !== 0) {\n            c = 0xedb88320 ^ (c >>> 1);\n        } else {\n            c >>>= 1;\n        }\n    }\n    return c >>> 0;\n});\n\n// UTILS functions\n\nfunction Utils(opts) {\n    this.sep = pth.sep;\n    this.fs = fsystem;\n\n    if (is_Obj(opts)) {\n        // custom filesystem\n        if (is_Obj(opts.fs) && typeof opts.fs.statSync === \"function\") {\n            this.fs = opts.fs;\n        }\n    }\n}\n\nmodule.exports = Utils;\n\n// INSTANCED functions\n\nUtils.prototype.makeDir = function (/*String*/ folder) {\n    const self = this;\n\n    // Sync - make directories tree\n    function mkdirSync(/*String*/ fpath) {\n        let resolvedPath = fpath.split(self.sep)[0];\n        fpath.split(self.sep).forEach(function (name) {\n            if (!name || name.substr(-1, 1) === \":\") return;\n            resolvedPath += self.sep + name;\n            var stat;\n            try {\n                stat = self.fs.statSync(resolvedPath);\n            } catch (e) {\n                self.fs.mkdirSync(resolvedPath);\n            }\n            if (stat && stat.isFile()) throw Errors.FILE_IN_THE_WAY.replace(\"%s\", resolvedPath);\n        });\n    }\n\n    mkdirSync(folder);\n};\n\nUtils.prototype.writeFileTo = function (/*String*/ path, /*Buffer*/ content, /*Boolean*/ overwrite, /*Number*/ attr) {\n    const self = this;\n    if (self.fs.existsSync(path)) {\n        if (!overwrite) return false; // cannot overwrite\n\n        var stat = self.fs.statSync(path);\n        if (stat.isDirectory()) {\n            return false;\n        }\n    }\n    var folder = pth.dirname(path);\n    if (!self.fs.existsSync(folder)) {\n        self.makeDir(folder);\n    }\n\n    var fd;\n    try {\n        fd = self.fs.openSync(path, \"w\", 438); // 0666\n    } catch (e) {\n        self.fs.chmodSync(path, 438);\n        fd = self.fs.openSync(path, \"w\", 438);\n    }\n    if (fd) {\n        try {\n            self.fs.writeSync(fd, content, 0, content.length, 0);\n        } finally {\n            self.fs.closeSync(fd);\n        }\n    }\n    self.fs.chmodSync(path, attr || 438);\n    return true;\n};\n\nUtils.prototype.writeFileToAsync = function (/*String*/ path, /*Buffer*/ content, /*Boolean*/ overwrite, /*Number*/ attr, /*Function*/ callback) {\n    if (typeof attr === \"function\") {\n        callback = attr;\n        attr = undefined;\n    }\n\n    const self = this;\n\n    self.fs.exists(path, function (exist) {\n        if (exist && !overwrite) return callback(false);\n\n        self.fs.stat(path, function (err, stat) {\n            if (exist && stat.isDirectory()) {\n                return callback(false);\n            }\n\n            var folder = pth.dirname(path);\n            self.fs.exists(folder, function (exists) {\n                if (!exists) self.makeDir(folder);\n\n                self.fs.open(path, \"w\", 438, function (err, fd) {\n                    if (err) {\n                        self.fs.chmod(path, 438, function () {\n                            self.fs.open(path, \"w\", 438, function (err, fd) {\n                                self.fs.write(fd, content, 0, content.length, 0, function () {\n                                    self.fs.close(fd, function () {\n                                        self.fs.chmod(path, attr || 438, function () {\n                                            callback(true);\n                                        });\n                                    });\n                                });\n                            });\n                        });\n                    } else if (fd) {\n                        self.fs.write(fd, content, 0, content.length, 0, function () {\n                            self.fs.close(fd, function () {\n                                self.fs.chmod(path, attr || 438, function () {\n                                    callback(true);\n                                });\n                            });\n                        });\n                    } else {\n                        self.fs.chmod(path, attr || 438, function () {\n                            callback(true);\n                        });\n                    }\n                });\n            });\n        });\n    });\n};\n\nUtils.prototype.findFiles = function (/*String*/ path) {\n    const self = this;\n\n    function findSync(/*String*/ dir, /*RegExp*/ pattern, /*Boolean*/ recursive) {\n        if (typeof pattern === \"boolean\") {\n            recursive = pattern;\n            pattern = undefined;\n        }\n        let files = [];\n        self.fs.readdirSync(dir).forEach(function (file) {\n            var path = pth.join(dir, file);\n\n            if (self.fs.statSync(path).isDirectory() && recursive) files = files.concat(findSync(path, pattern, recursive));\n\n            if (!pattern || pattern.test(path)) {\n                files.push(pth.normalize(path) + (self.fs.statSync(path).isDirectory() ? self.sep : \"\"));\n            }\n        });\n        return files;\n    }\n\n    return findSync(path, undefined, true);\n};\n\nUtils.prototype.getAttributes = function () {};\n\nUtils.prototype.setAttributes = function () {};\n\n// STATIC functions\n\n// crc32 single update (it is part of crc32)\nUtils.crc32update = function (crc, byte) {\n    return crcTable[(crc ^ byte) & 0xff] ^ (crc >>> 8);\n};\n\nUtils.crc32 = function (buf) {\n    if (typeof buf === \"string\") {\n        buf = Buffer.from(buf, \"utf8\");\n    }\n    // Generate crcTable\n    if (!crcTable.length) genCRCTable();\n\n    let len = buf.length;\n    let crc = ~0;\n    for (let off = 0; off < len; ) crc = Utils.crc32update(crc, buf[off++]);\n    // xor and cast as uint32 number\n    return ~crc >>> 0;\n};\n\nUtils.methodToString = function (/*Number*/ method) {\n    switch (method) {\n        case Constants.STORED:\n            return \"STORED (\" + method + \")\";\n        case Constants.DEFLATED:\n            return \"DEFLATED (\" + method + \")\";\n        default:\n            return \"UNSUPPORTED (\" + method + \")\";\n    }\n};\n\n// removes \"..\" style path elements\nUtils.canonical = function (/*string*/ path) {\n    if (!path) return \"\";\n    // trick normalize think path is absolute\n    var safeSuffix = pth.posix.normalize(\"/\" + path.split(\"\\\\\").join(\"/\"));\n    return pth.join(\".\", safeSuffix);\n};\n\n// make abolute paths taking prefix as root folder\nUtils.sanitize = function (/*string*/ prefix, /*string*/ name) {\n    prefix = pth.resolve(pth.normalize(prefix));\n    var parts = name.split(\"/\");\n    for (var i = 0, l = parts.length; i < l; i++) {\n        var path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep)));\n        if (path.indexOf(prefix) === 0) {\n            return path;\n        }\n    }\n    return pth.normalize(pth.join(prefix, pth.basename(name)));\n};\n\n// converts buffer, Uint8Array, string types to buffer\nUtils.toBuffer = function toBuffer(/*buffer, Uint8Array, string*/ input) {\n    if (Buffer.isBuffer(input)) {\n        return input;\n    } else if (input instanceof Uint8Array) {\n        return Buffer.from(input);\n    } else {\n        // expect string all other values are invalid and return empty buffer\n        return typeof input === \"string\" ? Buffer.from(input, \"utf8\") : Buffer.alloc(0);\n    }\n};\n\nUtils.readBigUInt64LE = function (/*Buffer*/ buffer, /*int*/ index) {\n    var slice = Buffer.from(buffer.slice(index, index + 8));\n    slice.swap64();\n\n    return parseInt(`0x${slice.toString(\"hex\")}`);\n};\n\nUtils.isWin = isWin; // Do we have windows system\nUtils.crcTable = crcTable;\n","var Utils = require(\"./util\"),\n    Headers = require(\"./headers\"),\n    Constants = Utils.Constants,\n    Methods = require(\"./methods\");\n\nmodule.exports = function (/*Buffer*/ input) {\n    var _entryHeader = new Headers.EntryHeader(),\n        _entryName = Buffer.alloc(0),\n        _comment = Buffer.alloc(0),\n        _isDirectory = false,\n        uncompressedData = null,\n        _extra = Buffer.alloc(0);\n\n    function getCompressedDataFromZip() {\n        if (!input || !Buffer.isBuffer(input)) {\n            return Buffer.alloc(0);\n        }\n        _entryHeader.loadDataHeaderFromBinary(input);\n        return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize);\n    }\n\n    function crc32OK(data) {\n        // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written\n        if ((_entryHeader.flags & 0x8) !== 0x8) {\n            if (Utils.crc32(data) !== _entryHeader.dataHeader.crc) {\n                return false;\n            }\n        } else {\n            // @TODO: load and check data descriptor header\n            // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure\n            // (optionally preceded by a 4-byte signature) immediately after the compressed data:\n        }\n        return true;\n    }\n\n    function decompress(/*Boolean*/ async, /*Function*/ callback, /*String, Buffer*/ pass) {\n        if (typeof callback === \"undefined\" && typeof async === \"string\") {\n            pass = async;\n            async = void 0;\n        }\n        if (_isDirectory) {\n            if (async && callback) {\n                callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error.\n            }\n            return Buffer.alloc(0);\n        }\n\n        var compressedData = getCompressedDataFromZip();\n\n        if (compressedData.length === 0) {\n            // File is empty, nothing to decompress.\n            if (async && callback) callback(compressedData);\n            return compressedData;\n        }\n\n        if (_entryHeader.encripted) {\n            if (\"string\" !== typeof pass && !Buffer.isBuffer(pass)) {\n                throw new Error(\"ADM-ZIP: Incompatible password parameter\");\n            }\n            compressedData = Methods.ZipCrypto.decrypt(compressedData, _entryHeader, pass);\n        }\n\n        var data = Buffer.alloc(_entryHeader.size);\n\n        switch (_entryHeader.method) {\n            case Utils.Constants.STORED:\n                compressedData.copy(data);\n                if (!crc32OK(data)) {\n                    if (async && callback) callback(data, Utils.Errors.BAD_CRC); //si added error\n                    throw new Error(Utils.Errors.BAD_CRC);\n                } else {\n                    //si added otherwise did not seem to return data.\n                    if (async && callback) callback(data);\n                    return data;\n                }\n            case Utils.Constants.DEFLATED:\n                var inflater = new Methods.Inflater(compressedData);\n                if (!async) {\n                    const result = inflater.inflate(data);\n                    result.copy(data, 0);\n                    if (!crc32OK(data)) {\n                        throw new Error(Utils.Errors.BAD_CRC + \" \" + _entryName.toString());\n                    }\n                    return data;\n                } else {\n                    inflater.inflateAsync(function (result) {\n                        result.copy(result, 0);\n                        if (callback) {\n                            if (!crc32OK(result)) {\n                                callback(result, Utils.Errors.BAD_CRC); //si added error\n                            } else {\n                                callback(result);\n                            }\n                        }\n                    });\n                }\n                break;\n            default:\n                if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD);\n                throw new Error(Utils.Errors.UNKNOWN_METHOD);\n        }\n    }\n\n    function compress(/*Boolean*/ async, /*Function*/ callback) {\n        if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {\n            // no data set or the data wasn't changed to require recompression\n            if (async && callback) callback(getCompressedDataFromZip());\n            return getCompressedDataFromZip();\n        }\n\n        if (uncompressedData.length && !_isDirectory) {\n            var compressedData;\n            // Local file header\n            switch (_entryHeader.method) {\n                case Utils.Constants.STORED:\n                    _entryHeader.compressedSize = _entryHeader.size;\n\n                    compressedData = Buffer.alloc(uncompressedData.length);\n                    uncompressedData.copy(compressedData);\n\n                    if (async && callback) callback(compressedData);\n                    return compressedData;\n                default:\n                case Utils.Constants.DEFLATED:\n                    var deflater = new Methods.Deflater(uncompressedData);\n                    if (!async) {\n                        var deflated = deflater.deflate();\n                        _entryHeader.compressedSize = deflated.length;\n                        return deflated;\n                    } else {\n                        deflater.deflateAsync(function (data) {\n                            compressedData = Buffer.alloc(data.length);\n                            _entryHeader.compressedSize = data.length;\n                            data.copy(compressedData);\n                            callback && callback(compressedData);\n                        });\n                    }\n                    deflater = null;\n                    break;\n            }\n        } else if (async && callback) {\n            callback(Buffer.alloc(0));\n        } else {\n            return Buffer.alloc(0);\n        }\n    }\n\n    function readUInt64LE(buffer, offset) {\n        return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset);\n    }\n\n    function parseExtra(data) {\n        var offset = 0;\n        var signature, size, part;\n        while (offset < data.length) {\n            signature = data.readUInt16LE(offset);\n            offset += 2;\n            size = data.readUInt16LE(offset);\n            offset += 2;\n            part = data.slice(offset, offset + size);\n            offset += size;\n            if (Constants.ID_ZIP64 === signature) {\n                parseZip64ExtendedInformation(part);\n            }\n        }\n    }\n\n    //Override header field values with values from the ZIP64 extra field\n    function parseZip64ExtendedInformation(data) {\n        var size, compressedSize, offset, diskNumStart;\n\n        if (data.length >= Constants.EF_ZIP64_SCOMP) {\n            size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);\n            if (_entryHeader.size === Constants.EF_ZIP64_OR_32) {\n                _entryHeader.size = size;\n            }\n        }\n        if (data.length >= Constants.EF_ZIP64_RHO) {\n            compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);\n            if (_entryHeader.compressedSize === Constants.EF_ZIP64_OR_32) {\n                _entryHeader.compressedSize = compressedSize;\n            }\n        }\n        if (data.length >= Constants.EF_ZIP64_DSN) {\n            offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);\n            if (_entryHeader.offset === Constants.EF_ZIP64_OR_32) {\n                _entryHeader.offset = offset;\n            }\n        }\n        if (data.length >= Constants.EF_ZIP64_DSN + 4) {\n            diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);\n            if (_entryHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {\n                _entryHeader.diskNumStart = diskNumStart;\n            }\n        }\n    }\n\n    return {\n        get entryName() {\n            return _entryName.toString();\n        },\n        get rawEntryName() {\n            return _entryName;\n        },\n        set entryName(val) {\n            _entryName = Utils.toBuffer(val);\n            var lastChar = _entryName[_entryName.length - 1];\n            _isDirectory = lastChar === 47 || lastChar === 92;\n            _entryHeader.fileNameLength = _entryName.length;\n        },\n\n        get extra() {\n            return _extra;\n        },\n        set extra(val) {\n            _extra = val;\n            _entryHeader.extraLength = val.length;\n            parseExtra(val);\n        },\n\n        get comment() {\n            return _comment.toString();\n        },\n        set comment(val) {\n            _comment = Utils.toBuffer(val);\n            _entryHeader.commentLength = _comment.length;\n        },\n\n        get name() {\n            var n = _entryName.toString();\n            return _isDirectory\n                ? n\n                      .substr(n.length - 1)\n                      .split(\"/\")\n                      .pop()\n                : n.split(\"/\").pop();\n        },\n        get isDirectory() {\n            return _isDirectory;\n        },\n\n        getCompressedData: function () {\n            return compress(false, null);\n        },\n\n        getCompressedDataAsync: function (/*Function*/ callback) {\n            compress(true, callback);\n        },\n\n        setData: function (value) {\n            uncompressedData = Utils.toBuffer(value);\n            if (!_isDirectory && uncompressedData.length) {\n                _entryHeader.size = uncompressedData.length;\n                _entryHeader.method = Utils.Constants.DEFLATED;\n                _entryHeader.crc = Utils.crc32(value);\n                _entryHeader.changed = true;\n            } else {\n                // folders and blank files should be stored\n                _entryHeader.method = Utils.Constants.STORED;\n            }\n        },\n\n        getData: function (pass) {\n            if (_entryHeader.changed) {\n                return uncompressedData;\n            } else {\n                return decompress(false, null, pass);\n            }\n        },\n\n        getDataAsync: function (/*Function*/ callback, pass) {\n            if (_entryHeader.changed) {\n                callback(uncompressedData);\n            } else {\n                decompress(true, callback, pass);\n            }\n        },\n\n        set attr(attr) {\n            _entryHeader.attr = attr;\n        },\n        get attr() {\n            return _entryHeader.attr;\n        },\n\n        set header(/*Buffer*/ data) {\n            _entryHeader.loadFromBinary(data);\n        },\n\n        get header() {\n            return _entryHeader;\n        },\n\n        packHeader: function () {\n            // 1. create header (buffer)\n            var header = _entryHeader.entryHeaderToBinary();\n            var addpos = Utils.Constants.CENHDR;\n            // 2. add file name\n            _entryName.copy(header, addpos);\n            addpos += _entryName.length;\n            // 3. add extra data\n            if (_entryHeader.extraLength) {\n                _extra.copy(header, addpos);\n                addpos += _entryHeader.extraLength;\n            }\n            // 4. add file comment\n            if (_entryHeader.commentLength) {\n                _comment.copy(header, addpos);\n            }\n            return header;\n        },\n\n        toJSON: function () {\n            const bytes = function (nr) {\n                return \"<\" + ((nr && nr.length + \" bytes buffer\") || \"null\") + \">\";\n            };\n\n            return {\n                entryName: this.entryName,\n                name: this.name,\n                comment: this.comment,\n                isDirectory: this.isDirectory,\n                header: _entryHeader.toJSON(),\n                compressedData: bytes(input),\n                data: bytes(uncompressedData)\n            };\n        },\n\n        toString: function () {\n            return JSON.stringify(this.toJSON(), null, \"\\t\");\n        }\n    };\n};\n","const ZipEntry = require(\"./zipEntry\");\nconst Headers = require(\"./headers\");\nconst Utils = require(\"./util\");\n\nmodule.exports = function (/*Buffer|null*/ inBuffer, /** object */ options) {\n    var entryList = [],\n        entryTable = {},\n        _comment = Buffer.alloc(0),\n        mainHeader = new Headers.MainHeader(),\n        loadedEntries = false;\n\n    // assign options\n    const opts = Object.assign(Object.create(null), options);\n\n    const { noSort } = opts;\n\n    if (inBuffer) {\n        // is a memory buffer\n        readMainHeader(opts.readEntries);\n    } else {\n        // none. is a new file\n        loadedEntries = true;\n    }\n\n    function iterateEntries(callback) {\n        const totalEntries = mainHeader.diskEntries; // total number of entries\n        let index = mainHeader.offset; // offset of first CEN header\n\n        for (let i = 0; i < totalEntries; i++) {\n            let tmp = index;\n            const entry = new ZipEntry(inBuffer);\n\n            entry.header = inBuffer.slice(tmp, (tmp += Utils.Constants.CENHDR));\n            entry.entryName = inBuffer.slice(tmp, (tmp += entry.header.fileNameLength));\n\n            index += entry.header.entryHeaderSize;\n\n            callback(entry);\n        }\n    }\n\n    function readEntries() {\n        loadedEntries = true;\n        entryTable = {};\n        entryList = new Array(mainHeader.diskEntries); // total number of entries\n        var index = mainHeader.offset; // offset of first CEN header\n        for (var i = 0; i < entryList.length; i++) {\n            var tmp = index,\n                entry = new ZipEntry(inBuffer);\n            entry.header = inBuffer.slice(tmp, (tmp += Utils.Constants.CENHDR));\n\n            entry.entryName = inBuffer.slice(tmp, (tmp += entry.header.fileNameLength));\n\n            if (entry.header.extraLength) {\n                entry.extra = inBuffer.slice(tmp, (tmp += entry.header.extraLength));\n            }\n\n            if (entry.header.commentLength) entry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength);\n\n            index += entry.header.entryHeaderSize;\n\n            entryList[i] = entry;\n            entryTable[entry.entryName] = entry;\n        }\n    }\n\n    function readMainHeader(/*Boolean*/ readNow) {\n        var i = inBuffer.length - Utils.Constants.ENDHDR, // END header size\n            max = Math.max(0, i - 0xffff), // 0xFFFF is the max zip file comment length\n            n = max,\n            endStart = inBuffer.length,\n            endOffset = -1, // Start offset of the END header\n            commentEnd = 0;\n\n        for (i; i >= n; i--) {\n            if (inBuffer[i] !== 0x50) continue; // quick check that the byte is 'P'\n            if (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) {\n                // \"PK\\005\\006\"\n                endOffset = i;\n                commentEnd = i;\n                endStart = i + Utils.Constants.ENDHDR;\n                // We already found a regular signature, let's look just a bit further to check if there's any zip64 signature\n                n = i - Utils.Constants.END64HDR;\n                continue;\n            }\n\n            if (inBuffer.readUInt32LE(i) === Utils.Constants.END64SIG) {\n                // Found a zip64 signature, let's continue reading the whole zip64 record\n                n = max;\n                continue;\n            }\n\n            if (inBuffer.readUInt32LE(i) === Utils.Constants.ZIP64SIG) {\n                // Found the zip64 record, let's determine it's size\n                endOffset = i;\n                endStart = i + Utils.readBigUInt64LE(inBuffer, i + Utils.Constants.ZIP64SIZE) + Utils.Constants.ZIP64LEAD;\n                break;\n            }\n        }\n\n        if (!~endOffset) throw new Error(Utils.Errors.INVALID_FORMAT);\n\n        mainHeader.loadFromBinary(inBuffer.slice(endOffset, endStart));\n        if (mainHeader.commentLength) {\n            _comment = inBuffer.slice(commentEnd + Utils.Constants.ENDHDR);\n        }\n        if (readNow) readEntries();\n    }\n\n    function sortEntries() {\n        if (entryList.length > 1 && !noSort) {\n            entryList.sort((a, b) => a.entryName.toLowerCase().localeCompare(b.entryName.toLowerCase()));\n        }\n    }\n\n    return {\n        /**\n         * Returns an array of ZipEntry objects existent in the current opened archive\n         * @return Array\n         */\n        get entries() {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            return entryList;\n        },\n\n        /**\n         * Archive comment\n         * @return {String}\n         */\n        get comment() {\n            return _comment.toString();\n        },\n        set comment(val) {\n            _comment = Utils.toBuffer(val);\n            mainHeader.commentLength = _comment.length;\n        },\n\n        getEntryCount: function () {\n            if (!loadedEntries) {\n                return mainHeader.diskEntries;\n            }\n\n            return entryList.length;\n        },\n\n        forEach: function (callback) {\n            if (!loadedEntries) {\n                iterateEntries(callback);\n                return;\n            }\n\n            entryList.forEach(callback);\n        },\n\n        /**\n         * Returns a reference to the entry with the given name or null if entry is inexistent\n         *\n         * @param entryName\n         * @return ZipEntry\n         */\n        getEntry: function (/*String*/ entryName) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            return entryTable[entryName] || null;\n        },\n\n        /**\n         * Adds the given entry to the entry list\n         *\n         * @param entry\n         */\n        setEntry: function (/*ZipEntry*/ entry) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            entryList.push(entry);\n            entryTable[entry.entryName] = entry;\n            mainHeader.totalEntries = entryList.length;\n        },\n\n        /**\n         * Removes the entry with the given name from the entry list.\n         *\n         * If the entry is a directory, then all nested files and directories will be removed\n         * @param entryName\n         */\n        deleteEntry: function (/*String*/ entryName) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            var entry = entryTable[entryName];\n            if (entry && entry.isDirectory) {\n                var _self = this;\n                this.getEntryChildren(entry).forEach(function (child) {\n                    if (child.entryName !== entryName) {\n                        _self.deleteEntry(child.entryName);\n                    }\n                });\n            }\n            entryList.splice(entryList.indexOf(entry), 1);\n            delete entryTable[entryName];\n            mainHeader.totalEntries = entryList.length;\n        },\n\n        /**\n         *  Iterates and returns all nested files and directories of the given entry\n         *\n         * @param entry\n         * @return Array\n         */\n        getEntryChildren: function (/*ZipEntry*/ entry) {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            if (entry && entry.isDirectory) {\n                const list = [];\n                const name = entry.entryName;\n                const len = name.length;\n\n                entryList.forEach(function (zipEntry) {\n                    if (zipEntry.entryName.substr(0, len) === name) {\n                        list.push(zipEntry);\n                    }\n                });\n                return list;\n            }\n            return [];\n        },\n\n        /**\n         * Returns the zip file\n         *\n         * @return Buffer\n         */\n        compressToBuffer: function () {\n            if (!loadedEntries) {\n                readEntries();\n            }\n            sortEntries();\n\n            const dataBlock = [];\n            const entryHeaders = [];\n            let totalSize = 0;\n            let dindex = 0;\n\n            mainHeader.size = 0;\n            mainHeader.offset = 0;\n\n            for (const entry of entryList) {\n                // compress data and set local and entry header accordingly. Reason why is called first\n                const compressedData = entry.getCompressedData();\n                // 1. construct data header\n                entry.header.offset = dindex;\n                const dataHeader = entry.header.dataHeaderToBinary();\n                const entryNameLen = entry.rawEntryName.length;\n                // 1.2. postheader - data after data header\n                const postHeader = Buffer.alloc(entryNameLen + entry.extra.length);\n                entry.rawEntryName.copy(postHeader, 0);\n                postHeader.copy(entry.extra, entryNameLen);\n\n                // 2. offsets\n                const dataLength = dataHeader.length + postHeader.length + compressedData.length;\n                dindex += dataLength;\n\n                // 3. store values in sequence\n                dataBlock.push(dataHeader);\n                dataBlock.push(postHeader);\n                dataBlock.push(compressedData);\n\n                // 4. construct entry header\n                const entryHeader = entry.packHeader();\n                entryHeaders.push(entryHeader);\n                // 5. update main header\n                mainHeader.size += entryHeader.length;\n                totalSize += dataLength + entryHeader.length;\n            }\n\n            totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n            // point to end of data and beginning of central directory first record\n            mainHeader.offset = dindex;\n\n            dindex = 0;\n            const outBuffer = Buffer.alloc(totalSize);\n            // write data blocks\n            for (const content of dataBlock) {\n                content.copy(outBuffer, dindex);\n                dindex += content.length;\n            }\n\n            // write central directory entries\n            for (const content of entryHeaders) {\n                content.copy(outBuffer, dindex);\n                dindex += content.length;\n            }\n\n            // write main header\n            const mh = mainHeader.toBinary();\n            if (_comment) {\n                _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment\n            }\n            mh.copy(outBuffer, dindex);\n\n            return outBuffer;\n        },\n\n        toAsyncBuffer: function (/*Function*/ onSuccess, /*Function*/ onFail, /*Function*/ onItemStart, /*Function*/ onItemEnd) {\n            try {\n                if (!loadedEntries) {\n                    readEntries();\n                }\n                sortEntries();\n\n                const dataBlock = [];\n                const entryHeaders = [];\n                let totalSize = 0;\n                let dindex = 0;\n\n                mainHeader.size = 0;\n                mainHeader.offset = 0;\n\n                const compress2Buffer = function (entryLists) {\n                    if (entryLists.length) {\n                        const entry = entryLists.pop();\n                        const name = entry.entryName + entry.extra.toString();\n                        if (onItemStart) onItemStart(name);\n                        entry.getCompressedDataAsync(function (compressedData) {\n                            if (onItemEnd) onItemEnd(name);\n\n                            entry.header.offset = dindex;\n                            // data header\n                            const dataHeader = entry.header.dataHeaderToBinary();\n                            const postHeader = Buffer.alloc(name.length, name);\n                            const dataLength = dataHeader.length + postHeader.length + compressedData.length;\n\n                            dindex += dataLength;\n\n                            dataBlock.push(dataHeader);\n                            dataBlock.push(postHeader);\n                            dataBlock.push(compressedData);\n\n                            const entryHeader = entry.packHeader();\n                            entryHeaders.push(entryHeader);\n                            mainHeader.size += entryHeader.length;\n                            totalSize += dataLength + entryHeader.length;\n\n                            compress2Buffer(entryLists);\n                        });\n                    } else {\n                        totalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n                        // point to end of data and beginning of central directory first record\n                        mainHeader.offset = dindex;\n\n                        dindex = 0;\n                        const outBuffer = Buffer.alloc(totalSize);\n                        dataBlock.forEach(function (content) {\n                            content.copy(outBuffer, dindex); // write data blocks\n                            dindex += content.length;\n                        });\n                        entryHeaders.forEach(function (content) {\n                            content.copy(outBuffer, dindex); // write central directory entries\n                            dindex += content.length;\n                        });\n\n                        const mh = mainHeader.toBinary();\n                        if (_comment) {\n                            _comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment\n                        }\n\n                        mh.copy(outBuffer, dindex); // write main header\n\n                        onSuccess(outBuffer);\n                    }\n                };\n\n                compress2Buffer(entryList);\n            } catch (e) {\n                onFail(e);\n            }\n        }\n    };\n};\n","'use strict';\n\nvar possibleNames = [\n\t'BigInt64Array',\n\t'BigUint64Array',\n\t'Float32Array',\n\t'Float64Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Int8Array',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray'\n];\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\n\nmodule.exports = function availableTypedArrays() {\n\tvar out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true);\nvar $max = GetIntrinsic('%Math.max%');\n\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = null;\n\t}\n}\n\nmodule.exports = function callBind(originalFunction) {\n\tvar func = $reflectApply(bind, $call, arguments);\n\tif ($gOPD && $defineProperty) {\n\t\tvar desc = $gOPD(func, 'length');\n\t\tif (desc.configurable) {\n\t\t\t// original length, plus the receiver, minus any additional arguments (after the receiver)\n\t\t\t$defineProperty(\n\t\t\t\tfunc,\n\t\t\t\t'length',\n\t\t\t\t{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }\n\t\t\t);\n\t\t}\n\t}\n\treturn func;\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","var charenc = {\n  // UTF-8 encoding\n  utf8: {\n    // Convert a string to a byte array\n    stringToBytes: function(str) {\n      return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));\n    },\n\n    // Convert a byte array to a string\n    bytesToString: function(bytes) {\n      return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));\n    }\n  },\n\n  // Binary encoding\n  bin: {\n    // Convert a string to a byte array\n    stringToBytes: function(str) {\n      for (var bytes = [], i = 0; i < str.length; i++)\n        bytes.push(str.charCodeAt(i) & 0xFF);\n      return bytes;\n    },\n\n    // Convert a byte array to a string\n    bytesToString: function(bytes) {\n      for (var str = [], i = 0; i < bytes.length; i++)\n        str.push(String.fromCharCode(bytes[i]));\n      return str.join('');\n    }\n  }\n};\n\nmodule.exports = charenc;\n","(function() {\n  var base64map\n      = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n\n  crypt = {\n    // Bit-wise rotation left\n    rotl: function(n, b) {\n      return (n << b) | (n >>> (32 - b));\n    },\n\n    // Bit-wise rotation right\n    rotr: function(n, b) {\n      return (n << (32 - b)) | (n >>> b);\n    },\n\n    // Swap big-endian to little-endian and vice versa\n    endian: function(n) {\n      // If number given, swap endian\n      if (n.constructor == Number) {\n        return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;\n      }\n\n      // Else, assume array and swap all items\n      for (var i = 0; i < n.length; i++)\n        n[i] = crypt.endian(n[i]);\n      return n;\n    },\n\n    // Generate an array of any length of random bytes\n    randomBytes: function(n) {\n      for (var bytes = []; n > 0; n--)\n        bytes.push(Math.floor(Math.random() * 256));\n      return bytes;\n    },\n\n    // Convert a byte array to big-endian 32-bit words\n    bytesToWords: function(bytes) {\n      for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)\n        words[b >>> 5] |= bytes[i] << (24 - b % 32);\n      return words;\n    },\n\n    // Convert big-endian 32-bit words to a byte array\n    wordsToBytes: function(words) {\n      for (var bytes = [], b = 0; b < words.length * 32; b += 8)\n        bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);\n      return bytes;\n    },\n\n    // Convert a byte array to a hex string\n    bytesToHex: function(bytes) {\n      for (var hex = [], i = 0; i < bytes.length; i++) {\n        hex.push((bytes[i] >>> 4).toString(16));\n        hex.push((bytes[i] & 0xF).toString(16));\n      }\n      return hex.join('');\n    },\n\n    // Convert a hex string to a byte array\n    hexToBytes: function(hex) {\n      for (var bytes = [], c = 0; c < hex.length; c += 2)\n        bytes.push(parseInt(hex.substr(c, 2), 16));\n      return bytes;\n    },\n\n    // Convert a byte array to a base-64 string\n    bytesToBase64: function(bytes) {\n      for (var base64 = [], i = 0; i < bytes.length; i += 3) {\n        var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n        for (var j = 0; j < 4; j++)\n          if (i * 8 + j * 6 <= bytes.length * 8)\n            base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F));\n          else\n            base64.push('=');\n      }\n      return base64.join('');\n    },\n\n    // Convert a base-64 string to a byte array\n    base64ToBytes: function(base64) {\n      // Remove non-base-64 characters\n      base64 = base64.replace(/[^A-Z0-9+\\/]/ig, '');\n\n      for (var bytes = [], i = 0, imod4 = 0; i < base64.length;\n          imod4 = ++i % 4) {\n        if (imod4 == 0) continue;\n        bytes.push(((base64map.indexOf(base64.charAt(i - 1))\n            & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2))\n            | (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));\n      }\n      return bytes;\n    }\n  };\n\n  module.exports = crypt;\n})();\n","\n\nclass ResizeableBuffer{\n  constructor(size=100){\n    this.size = size\n    this.length = 0\n    this.buf = Buffer.alloc(size)\n  }\n  prepend(val){\n    if(Buffer.isBuffer(val)){\n      const length = this.length + val.length\n      if(length >= this.size){\n        this.resize()\n        if(length >= this.size){\n          throw Error('INVALID_BUFFER_STATE')\n        }\n      }\n      const buf = this.buf\n      this.buf = Buffer.alloc(this.size)\n      val.copy(this.buf, 0)\n      buf.copy(this.buf, val.length)\n      this.length += val.length\n    }else{\n      const length = this.length++\n      if(length === this.size){\n        this.resize()\n      }\n      const buf = this.clone()\n      this.buf[0] = val\n      buf.copy(this.buf,1, 0, length)\n    }\n  }\n  append(val){\n    const length = this.length++\n    if(length === this.size){\n      this.resize()\n    }\n    this.buf[length] = val\n  }\n  clone(){\n    return Buffer.from(this.buf.slice(0, this.length))\n  }\n  resize(){\n    const length = this.length\n    this.size = this.size * 2\n    const buf = Buffer.alloc(this.size)\n    this.buf.copy(buf,0, 0, length)\n    this.buf = buf\n  }\n  toString(encoding){\n    if(encoding){\n      return this.buf.slice(0, this.length).toString(encoding)\n    }else{\n      return Uint8Array.prototype.slice.call(this.buf.slice(0, this.length))\n    }\n  }\n  toJSON(){\n    return this.toString('utf8')\n  }\n  reset(){\n    this.length = 0\n  }\n}\n\nmodule.exports = ResizeableBuffer\n","\n/*\nCSV Parse\n\nPlease look at the [project documentation](https://csv.js.org/parse/) for\nadditional information.\n*/\n\nconst { Transform } = require('stream')\nconst ResizeableBuffer = require('./ResizeableBuffer')\n\n// white space characters\n// https://en.wikipedia.org/wiki/Whitespace_character\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Character_Classes#Types\n// \\f\\n\\r\\t\\v\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff\nconst tab = 9\nconst nl = 10 // \\n, 0x0A in hexadecimal, 10 in decimal\nconst np = 12\nconst cr = 13 // \\r, 0x0D in hexadécimal, 13 in decimal\nconst space = 32\nconst boms = {\n  // Note, the following are equals:\n  // Buffer.from(\"\\ufeff\")\n  // Buffer.from([239, 187, 191])\n  // Buffer.from('EFBBBF', 'hex')\n  'utf8': Buffer.from([239, 187, 191]),\n  // Note, the following are equals:\n  // Buffer.from \"\\ufeff\", 'utf16le\n  // Buffer.from([255, 254])\n  'utf16le': Buffer.from([255, 254])\n}\n\nclass Parser extends Transform {\n  constructor(opts = {}){\n    super({...{readableObjectMode: true}, ...opts, encoding: null})\n    this.__originalOptions = opts\n    this.__normalizeOptions(opts)\n  }\n  __normalizeOptions(opts){\n    const options = {}\n    // Merge with user options\n    for(let opt in opts){\n      options[underscore(opt)] = opts[opt]\n    }\n    // Normalize option `encoding`\n    // Note: defined first because other options depends on it\n    // to convert chars/strings into buffers.\n    if(options.encoding === undefined || options.encoding === true){\n      options.encoding = 'utf8'\n    }else if(options.encoding === null || options.encoding === false){\n      options.encoding = null\n    }else if(typeof options.encoding !== 'string' && options.encoding !== null){\n      throw new CsvError('CSV_INVALID_OPTION_ENCODING', [\n        'Invalid option encoding:',\n        'encoding must be a string or null to return a buffer,',\n        `got ${JSON.stringify(options.encoding)}`\n      ], options)\n    }\n    // Normalize option `bom`\n    if(options.bom === undefined || options.bom === null || options.bom === false){\n      options.bom = false\n    }else if(options.bom !== true){\n      throw new CsvError('CSV_INVALID_OPTION_BOM', [\n        'Invalid option bom:', 'bom must be true,',\n        `got ${JSON.stringify(options.bom)}`\n      ], options)\n    }\n    // Normalize option `cast`\n    let fnCastField = null\n    if(options.cast === undefined || options.cast === null || options.cast === false || options.cast === ''){\n      options.cast = undefined\n    }else if(typeof options.cast === 'function'){\n      fnCastField = options.cast\n      options.cast = true\n    }else if(options.cast !== true){\n      throw new CsvError('CSV_INVALID_OPTION_CAST', [\n        'Invalid option cast:', 'cast must be true or a function,',\n        `got ${JSON.stringify(options.cast)}`\n      ], options)\n    }\n    // Normalize option `cast_date`\n    if(options.cast_date === undefined || options.cast_date === null || options.cast_date === false || options.cast_date === ''){\n      options.cast_date = false\n    }else if(options.cast_date === true){\n      options.cast_date = function(value){\n        const date = Date.parse(value)\n        return !isNaN(date) ? new Date(date) : value\n      }\n    }else{\n      throw new CsvError('CSV_INVALID_OPTION_CAST_DATE', [\n        'Invalid option cast_date:', 'cast_date must be true or a function,',\n        `got ${JSON.stringify(options.cast_date)}`\n      ], options)\n    }\n    // Normalize option `columns`\n    let fnFirstLineToHeaders = null\n    if(options.columns === true){\n      // Fields in the first line are converted as-is to columns\n      fnFirstLineToHeaders = undefined\n    }else if(typeof options.columns === 'function'){\n      fnFirstLineToHeaders = options.columns\n      options.columns = true\n    }else if(Array.isArray(options.columns)){\n      options.columns = normalizeColumnsArray(options.columns)\n    }else if(options.columns === undefined || options.columns === null || options.columns === false){\n      options.columns = false\n    }else{\n      throw new CsvError('CSV_INVALID_OPTION_COLUMNS', [\n        'Invalid option columns:',\n        'expect an array, a function or true,',\n        `got ${JSON.stringify(options.columns)}`\n      ], options)\n    }\n    // Normalize option `columns_duplicates_to_array`\n    if(options.columns_duplicates_to_array === undefined || options.columns_duplicates_to_array === null || options.columns_duplicates_to_array === false){\n      options.columns_duplicates_to_array = false\n    }else if(options.columns_duplicates_to_array !== true){\n      throw new CsvError('CSV_INVALID_OPTION_COLUMNS_DUPLICATES_TO_ARRAY', [\n        'Invalid option columns_duplicates_to_array:',\n        'expect an boolean,',\n        `got ${JSON.stringify(options.columns_duplicates_to_array)}`\n      ], options)\n    }else if(options.columns === false){\n      throw new CsvError('CSV_INVALID_OPTION_COLUMNS_DUPLICATES_TO_ARRAY', [\n        'Invalid option columns_duplicates_to_array:',\n        'the `columns` mode must be activated.'\n      ], options)\n    }\n    // Normalize option `comment`\n    if(options.comment === undefined || options.comment === null || options.comment === false || options.comment === ''){\n      options.comment = null\n    }else{\n      if(typeof options.comment === 'string'){\n        options.comment = Buffer.from(options.comment, options.encoding)\n      }\n      if(!Buffer.isBuffer(options.comment)){\n        throw new CsvError('CSV_INVALID_OPTION_COMMENT', [\n          'Invalid option comment:',\n          'comment must be a buffer or a string,',\n          `got ${JSON.stringify(options.comment)}`\n        ], options)\n      }\n    }\n    // Normalize option `delimiter`\n    const delimiter_json = JSON.stringify(options.delimiter)\n    if(!Array.isArray(options.delimiter)) options.delimiter = [options.delimiter]\n    if(options.delimiter.length === 0){\n      throw new CsvError('CSV_INVALID_OPTION_DELIMITER', [\n        'Invalid option delimiter:',\n        'delimiter must be a non empty string or buffer or array of string|buffer,',\n        `got ${delimiter_json}`\n      ], options)\n    }\n    options.delimiter = options.delimiter.map(function(delimiter){\n      if(delimiter === undefined || delimiter === null || delimiter === false){\n        return Buffer.from(',', options.encoding)\n      }\n      if(typeof delimiter === 'string'){\n        delimiter = Buffer.from(delimiter, options.encoding)\n      }\n      if( !Buffer.isBuffer(delimiter) || delimiter.length === 0){\n        throw new CsvError('CSV_INVALID_OPTION_DELIMITER', [\n          'Invalid option delimiter:',\n          'delimiter must be a non empty string or buffer or array of string|buffer,',\n          `got ${delimiter_json}`\n        ], options)\n      }\n      return delimiter\n    })\n    // Normalize option `escape`\n    if(options.escape === undefined || options.escape === true){\n      options.escape = Buffer.from('\"', options.encoding)\n    }else if(typeof options.escape === 'string'){\n      options.escape = Buffer.from(options.escape, options.encoding)\n    }else if (options.escape === null || options.escape === false){\n      options.escape = null\n    }\n    if(options.escape !== null){\n      if(!Buffer.isBuffer(options.escape)){\n        throw new Error(`Invalid Option: escape must be a buffer, a string or a boolean, got ${JSON.stringify(options.escape)}`)\n      }\n    }\n    // Normalize option `from`\n    if(options.from === undefined || options.from === null){\n      options.from = 1\n    }else{\n      if(typeof options.from === 'string' && /\\d+/.test(options.from)){\n        options.from = parseInt(options.from)\n      }\n      if(Number.isInteger(options.from)){\n        if(options.from < 0){\n          throw new Error(`Invalid Option: from must be a positive integer, got ${JSON.stringify(opts.from)}`)\n        }\n      }else{\n        throw new Error(`Invalid Option: from must be an integer, got ${JSON.stringify(options.from)}`)\n      }\n    }\n    // Normalize option `from_line`\n    if(options.from_line === undefined || options.from_line === null){\n      options.from_line = 1\n    }else{\n      if(typeof options.from_line === 'string' && /\\d+/.test(options.from_line)){\n        options.from_line = parseInt(options.from_line)\n      }\n      if(Number.isInteger(options.from_line)){\n        if(options.from_line <= 0){\n          throw new Error(`Invalid Option: from_line must be a positive integer greater than 0, got ${JSON.stringify(opts.from_line)}`)\n        }\n      }else{\n        throw new Error(`Invalid Option: from_line must be an integer, got ${JSON.stringify(opts.from_line)}`)\n      }\n    }\n    // Normalize options `ignore_last_delimiters`\n    if(options.ignore_last_delimiters === undefined || options.ignore_last_delimiters === null){\n      options.ignore_last_delimiters = false\n    }else if(typeof options.ignore_last_delimiters === 'number'){\n      options.ignore_last_delimiters = Math.floor(options.ignore_last_delimiters)\n      if(options.ignore_last_delimiters === 0){\n        options.ignore_last_delimiters = false\n      }\n    }else if(typeof options.ignore_last_delimiters !== 'boolean'){\n      throw new CsvError('CSV_INVALID_OPTION_IGNORE_LAST_DELIMITERS', [\n        'Invalid option `ignore_last_delimiters`:',\n        'the value must be a boolean value or an integer,',\n        `got ${JSON.stringify(options.ignore_last_delimiters)}`\n      ], options)\n    }\n    if(options.ignore_last_delimiters === true && options.columns === false){\n      throw new CsvError('CSV_IGNORE_LAST_DELIMITERS_REQUIRES_COLUMNS', [\n        'The option `ignore_last_delimiters`',\n        'requires the activation of the `columns` option'\n      ], options)\n    }\n    // Normalize option `info`\n    if(options.info === undefined || options.info === null || options.info === false){\n      options.info = false\n    }else if(options.info !== true){\n      throw new Error(`Invalid Option: info must be true, got ${JSON.stringify(options.info)}`)\n    }\n    // Normalize option `max_record_size`\n    if(options.max_record_size === undefined || options.max_record_size === null || options.max_record_size === false){\n      options.max_record_size = 0\n    }else if(Number.isInteger(options.max_record_size) && options.max_record_size >= 0){\n      // Great, nothing to do\n    }else if(typeof options.max_record_size === 'string' && /\\d+/.test(options.max_record_size)){\n      options.max_record_size = parseInt(options.max_record_size)\n    }else{\n      throw new Error(`Invalid Option: max_record_size must be a positive integer, got ${JSON.stringify(options.max_record_size)}`)\n    }\n    // Normalize option `objname`\n    if(options.objname === undefined || options.objname === null || options.objname === false){\n      options.objname = undefined\n    }else if(Buffer.isBuffer(options.objname)){\n      if(options.objname.length === 0){\n        throw new Error(`Invalid Option: objname must be a non empty buffer`)\n      }\n      if(options.encoding === null){\n        // Don't call `toString`, leave objname as a buffer\n      }else{\n        options.objname = options.objname.toString(options.encoding)\n      }\n    }else if(typeof options.objname === 'string'){\n      if(options.objname.length === 0){\n        throw new Error(`Invalid Option: objname must be a non empty string`)\n      }\n      // Great, nothing to do\n    }else{\n      throw new Error(`Invalid Option: objname must be a string or a buffer, got ${options.objname}`)\n    }\n    // Normalize option `on_record`\n    if(options.on_record === undefined || options.on_record === null){\n      options.on_record = undefined\n    }else if(typeof options.on_record !== 'function'){\n      throw new CsvError('CSV_INVALID_OPTION_ON_RECORD', [\n        'Invalid option `on_record`:',\n        'expect a function,',\n        `got ${JSON.stringify(options.on_record)}`\n      ], options)\n    }\n    // Normalize option `quote`\n    if(options.quote === null || options.quote === false || options.quote === ''){\n      options.quote = null\n    }else{\n      if(options.quote === undefined || options.quote === true){\n        options.quote = Buffer.from('\"', options.encoding)\n      }else if(typeof options.quote === 'string'){\n        options.quote = Buffer.from(options.quote, options.encoding)\n      }\n      if(!Buffer.isBuffer(options.quote)){\n        throw new Error(`Invalid Option: quote must be a buffer or a string, got ${JSON.stringify(options.quote)}`)\n      }\n    }\n    // Normalize option `raw`\n    if(options.raw === undefined || options.raw === null || options.raw === false){\n      options.raw = false\n    }else if(options.raw !== true){\n      throw new Error(`Invalid Option: raw must be true, got ${JSON.stringify(options.raw)}`)\n    }\n    // Normalize option `record_delimiter`\n    if(!options.record_delimiter){\n      options.record_delimiter = []\n    }else if(!Array.isArray(options.record_delimiter)){\n      options.record_delimiter = [options.record_delimiter]\n    }\n    options.record_delimiter = options.record_delimiter.map( function(rd){\n      if(typeof rd === 'string'){\n        rd = Buffer.from(rd, options.encoding)\n      }\n      return rd\n    })\n    // Normalize option `relax`\n    if(typeof options.relax === 'boolean'){\n      // Great, nothing to do\n    }else if(options.relax === undefined || options.relax === null){\n      options.relax = false\n    }else{\n      throw new Error(`Invalid Option: relax must be a boolean, got ${JSON.stringify(options.relax)}`)\n    }\n    // Normalize option `relax_column_count`\n    if(typeof options.relax_column_count === 'boolean'){\n      // Great, nothing to do\n    }else if(options.relax_column_count === undefined || options.relax_column_count === null){\n      options.relax_column_count = false\n    }else{\n      throw new Error(`Invalid Option: relax_column_count must be a boolean, got ${JSON.stringify(options.relax_column_count)}`)\n    }\n    if(typeof options.relax_column_count_less === 'boolean'){\n      // Great, nothing to do\n    }else if(options.relax_column_count_less === undefined || options.relax_column_count_less === null){\n      options.relax_column_count_less = false\n    }else{\n      throw new Error(`Invalid Option: relax_column_count_less must be a boolean, got ${JSON.stringify(options.relax_column_count_less)}`)\n    }\n    if(typeof options.relax_column_count_more === 'boolean'){\n      // Great, nothing to do\n    }else if(options.relax_column_count_more === undefined || options.relax_column_count_more === null){\n      options.relax_column_count_more = false\n    }else{\n      throw new Error(`Invalid Option: relax_column_count_more must be a boolean, got ${JSON.stringify(options.relax_column_count_more)}`)\n    }\n    // Normalize option `skip_empty_lines`\n    if(typeof options.skip_empty_lines === 'boolean'){\n      // Great, nothing to do\n    }else if(options.skip_empty_lines === undefined || options.skip_empty_lines === null){\n      options.skip_empty_lines = false\n    }else{\n      throw new Error(`Invalid Option: skip_empty_lines must be a boolean, got ${JSON.stringify(options.skip_empty_lines)}`)\n    }\n    // Normalize option `skip_lines_with_empty_values`\n    if(typeof options.skip_lines_with_empty_values === 'boolean'){\n      // Great, nothing to do\n    }else if(options.skip_lines_with_empty_values === undefined || options.skip_lines_with_empty_values === null){\n      options.skip_lines_with_empty_values = false\n    }else{\n      throw new Error(`Invalid Option: skip_lines_with_empty_values must be a boolean, got ${JSON.stringify(options.skip_lines_with_empty_values)}`)\n    }\n    // Normalize option `skip_lines_with_error`\n    if(typeof options.skip_lines_with_error === 'boolean'){\n      // Great, nothing to do\n    }else if(options.skip_lines_with_error === undefined || options.skip_lines_with_error === null){\n      options.skip_lines_with_error = false\n    }else{\n      throw new Error(`Invalid Option: skip_lines_with_error must be a boolean, got ${JSON.stringify(options.skip_lines_with_error)}`)\n    }\n    // Normalize option `rtrim`\n    if(options.rtrim === undefined || options.rtrim === null || options.rtrim === false){\n      options.rtrim = false\n    }else if(options.rtrim !== true){\n      throw new Error(`Invalid Option: rtrim must be a boolean, got ${JSON.stringify(options.rtrim)}`)\n    }\n    // Normalize option `ltrim`\n    if(options.ltrim === undefined || options.ltrim === null || options.ltrim === false){\n      options.ltrim = false\n    }else if(options.ltrim !== true){\n      throw new Error(`Invalid Option: ltrim must be a boolean, got ${JSON.stringify(options.ltrim)}`)\n    }\n    // Normalize option `trim`\n    if(options.trim === undefined || options.trim === null || options.trim === false){\n      options.trim = false\n    }else if(options.trim !== true){\n      throw new Error(`Invalid Option: trim must be a boolean, got ${JSON.stringify(options.trim)}`)\n    }\n    // Normalize options `trim`, `ltrim` and `rtrim`\n    if(options.trim === true && opts.ltrim !== false){\n      options.ltrim = true\n    }else if(options.ltrim !== true){\n      options.ltrim = false\n    }\n    if(options.trim === true && opts.rtrim !== false){\n      options.rtrim = true\n    }else if(options.rtrim !== true){\n      options.rtrim = false\n    }\n    // Normalize option `to`\n    if(options.to === undefined || options.to === null){\n      options.to = -1\n    }else{\n      if(typeof options.to === 'string' && /\\d+/.test(options.to)){\n        options.to = parseInt(options.to)\n      }\n      if(Number.isInteger(options.to)){\n        if(options.to <= 0){\n          throw new Error(`Invalid Option: to must be a positive integer greater than 0, got ${JSON.stringify(opts.to)}`)\n        }\n      }else{\n        throw new Error(`Invalid Option: to must be an integer, got ${JSON.stringify(opts.to)}`)\n      }\n    }\n    // Normalize option `to_line`\n    if(options.to_line === undefined || options.to_line === null){\n      options.to_line = -1\n    }else{\n      if(typeof options.to_line === 'string' && /\\d+/.test(options.to_line)){\n        options.to_line = parseInt(options.to_line)\n      }\n      if(Number.isInteger(options.to_line)){\n        if(options.to_line <= 0){\n          throw new Error(`Invalid Option: to_line must be a positive integer greater than 0, got ${JSON.stringify(opts.to_line)}`)\n        }\n      }else{\n        throw new Error(`Invalid Option: to_line must be an integer, got ${JSON.stringify(opts.to_line)}`)\n      }\n    }\n    this.info = {\n      bytes: 0,\n      comment_lines: 0,\n      empty_lines: 0,\n      invalid_field_length: 0,\n      lines: 1,\n      records: 0\n    }\n    this.options = options\n    this.state = {\n      bomSkipped: false,\n      bufBytesStart: 0,\n      castField: fnCastField,\n      commenting: false,\n      // Current error encountered by a record\n      error: undefined,\n      enabled: options.from_line === 1,\n      escaping: false,\n      // escapeIsQuote: options.escape === options.quote,\n      escapeIsQuote: Buffer.isBuffer(options.escape) && Buffer.isBuffer(options.quote) && Buffer.compare(options.escape, options.quote) === 0,\n      // columns can be `false`, `true`, `Array`\n      expectedRecordLength: Array.isArray(options.columns) ? options.columns.length : undefined,\n      field: new ResizeableBuffer(20),\n      firstLineToHeaders: fnFirstLineToHeaders,\n      needMoreDataSize: Math.max(\n        // Skip if the remaining buffer smaller than comment\n        options.comment !== null ? options.comment.length : 0,\n        // Skip if the remaining buffer can be delimiter\n        ...options.delimiter.map( (delimiter) => delimiter.length),\n        // Skip if the remaining buffer can be escape sequence\n        options.quote !== null ? options.quote.length : 0,\n      ),\n      previousBuf: undefined,\n      quoting: false,\n      stop: false,\n      rawBuffer: new ResizeableBuffer(100),\n      record: [],\n      recordHasError: false,\n      record_length: 0,\n      recordDelimiterMaxLength: options.record_delimiter.length === 0 ? 2 : Math.max(...options.record_delimiter.map( (v) => v.length)),\n      trimChars: [Buffer.from(' ', options.encoding)[0], Buffer.from('\\t', options.encoding)[0]],\n      wasQuoting: false,\n      wasRowDelimiter: false\n    }\n  }\n  // Implementation of `Transform._transform`\n  _transform(buf, encoding, callback){\n    if(this.state.stop === true){\n      return\n    }\n    const err = this.__parse(buf, false)\n    if(err !== undefined){\n      this.state.stop = true\n    }\n    callback(err)\n  }\n  // Implementation of `Transform._flush`\n  _flush(callback){\n    if(this.state.stop === true){\n      return\n    }\n    const err = this.__parse(undefined, true)\n    callback(err)\n  }\n  // Central parser implementation\n  __parse(nextBuf, end){\n    const {bom, comment, escape, from_line, ltrim, max_record_size, quote, raw, relax, rtrim, skip_empty_lines, to, to_line} = this.options\n    let {record_delimiter} = this.options\n    const {bomSkipped, previousBuf, rawBuffer, escapeIsQuote} = this.state\n    let buf\n    if(previousBuf === undefined){\n      if(nextBuf === undefined){\n        // Handle empty string\n        this.push(null)\n        return\n      }else{\n        buf = nextBuf\n      }\n    }else if(previousBuf !== undefined && nextBuf === undefined){\n      buf = previousBuf\n    }else{\n      buf = Buffer.concat([previousBuf, nextBuf])\n    }\n    // Handle UTF BOM\n    if(bomSkipped === false){\n      if(bom === false){\n        this.state.bomSkipped = true\n      }else if(buf.length < 3){\n        // No enough data\n        if(end === false){\n          // Wait for more data\n          this.state.previousBuf = buf\n          return\n        }\n      }else{\n        for(let encoding in boms){\n          if(boms[encoding].compare(buf, 0, boms[encoding].length) === 0){\n            // Skip BOM\n            let bomLength = boms[encoding].length\n            this.state.bufBytesStart += bomLength\n            buf = buf.slice(bomLength)\n            // Renormalize original options with the new encoding\n            this.__normalizeOptions({...this.__originalOptions, encoding: encoding})\n            break\n          }\n        }\n        this.state.bomSkipped = true\n      }\n    }\n    const bufLen = buf.length\n    let pos\n    for(pos = 0; pos < bufLen; pos++){\n      // Ensure we get enough space to look ahead\n      // There should be a way to move this out of the loop\n      if(this.__needMoreData(pos, bufLen, end)){\n        break\n      }\n      if(this.state.wasRowDelimiter === true){\n        this.info.lines++\n        this.state.wasRowDelimiter = false\n      }\n      if(to_line !== -1 && this.info.lines > to_line){\n        this.state.stop = true\n        this.push(null)\n        return\n      }\n      // Auto discovery of record_delimiter, unix, mac and windows supported\n      if(this.state.quoting === false && record_delimiter.length === 0){\n        const record_delimiterCount = this.__autoDiscoverRecordDelimiter(buf, pos)\n        if(record_delimiterCount){\n          record_delimiter = this.options.record_delimiter\n        }\n      }\n      const chr = buf[pos]\n      if(raw === true){\n        rawBuffer.append(chr)\n      }\n      if((chr === cr || chr === nl) && this.state.wasRowDelimiter === false ){\n        this.state.wasRowDelimiter = true\n      }\n      // Previous char was a valid escape char\n      // treat the current char as a regular char\n      if(this.state.escaping === true){\n        this.state.escaping = false\n      }else{\n        // Escape is only active inside quoted fields\n        // We are quoting, the char is an escape chr and there is a chr to escape\n        // if(escape !== null && this.state.quoting === true && chr === escape && pos + 1 < bufLen){\n        if(escape !== null && this.state.quoting === true && this.__isEscape(buf, pos, chr) && pos + escape.length < bufLen){\n          if(escapeIsQuote){\n            if(this.__isQuote(buf, pos+escape.length)){\n              this.state.escaping = true\n              pos += escape.length - 1\n              continue\n            }\n          }else{\n            this.state.escaping = true\n            pos += escape.length - 1\n            continue\n          }\n        }\n        // Not currently escaping and chr is a quote\n        // TODO: need to compare bytes instead of single char\n        if(this.state.commenting === false && this.__isQuote(buf, pos)){\n          if(this.state.quoting === true){\n            const nextChr = buf[pos+quote.length]\n            const isNextChrTrimable = rtrim && this.__isCharTrimable(nextChr)\n            const isNextChrComment = comment !== null && this.__compareBytes(comment, buf, pos+quote.length, nextChr)\n            const isNextChrDelimiter = this.__isDelimiter(buf, pos+quote.length, nextChr)\n            const isNextChrRecordDelimiter = record_delimiter.length === 0 ? this.__autoDiscoverRecordDelimiter(buf, pos+quote.length) : this.__isRecordDelimiter(nextChr, buf, pos+quote.length)\n            // Escape a quote\n            // Treat next char as a regular character\n            if(escape !== null && this.__isEscape(buf, pos, chr) && this.__isQuote(buf, pos + escape.length)){\n              pos += escape.length - 1\n            }else if(!nextChr || isNextChrDelimiter || isNextChrRecordDelimiter || isNextChrComment || isNextChrTrimable){\n              this.state.quoting = false\n              this.state.wasQuoting = true\n              pos += quote.length - 1\n              continue\n            }else if(relax === false){\n              const err = this.__error(\n                new CsvError('CSV_INVALID_CLOSING_QUOTE', [\n                  'Invalid Closing Quote:',\n                  `got \"${String.fromCharCode(nextChr)}\"`,\n                  `at line ${this.info.lines}`,\n                  'instead of delimiter, record delimiter, trimable character',\n                  '(if activated) or comment',\n                ], this.options, this.__infoField())\n              )\n              if(err !== undefined) return err\n            }else{\n              this.state.quoting = false\n              this.state.wasQuoting = true\n              this.state.field.prepend(quote)\n              pos += quote.length - 1\n            }\n          }else{\n            if(this.state.field.length !== 0){\n              // In relax mode, treat opening quote preceded by chrs as regular\n              if( relax === false ){\n                const err = this.__error(\n                  new CsvError('INVALID_OPENING_QUOTE', [\n                    'Invalid Opening Quote:',\n                    `a quote is found inside a field at line ${this.info.lines}`,\n                  ], this.options, this.__infoField(), {\n                    field: this.state.field,\n                  })\n                )\n                if(err !== undefined) return err\n              }\n            }else{\n              this.state.quoting = true\n              pos += quote.length - 1\n              continue\n            }\n          }\n        }\n        if(this.state.quoting === false){\n          let recordDelimiterLength = this.__isRecordDelimiter(chr, buf, pos)\n          if(recordDelimiterLength !== 0){\n            // Do not emit comments which take a full line\n            const skipCommentLine = this.state.commenting && (this.state.wasQuoting === false && this.state.record.length === 0 && this.state.field.length === 0)\n            if(skipCommentLine){\n              this.info.comment_lines++\n              // Skip full comment line\n            }else{\n              // Activate records emition if above from_line\n              if(this.state.enabled === false && this.info.lines + (this.state.wasRowDelimiter === true ? 1: 0) >= from_line){\n                this.state.enabled = true\n                this.__resetField()\n                this.__resetRecord()\n                pos += recordDelimiterLength - 1\n                continue\n              }\n              // Skip if line is empty and skip_empty_lines activated\n              if(skip_empty_lines === true && this.state.wasQuoting === false && this.state.record.length === 0 && this.state.field.length === 0){\n                this.info.empty_lines++\n                pos += recordDelimiterLength - 1\n                continue\n              }\n              this.info.bytes = this.state.bufBytesStart + pos;\n              const errField = this.__onField()\n              if(errField !== undefined) return errField\n              this.info.bytes = this.state.bufBytesStart + pos + recordDelimiterLength;\n              const errRecord = this.__onRecord()\n              if(errRecord !== undefined) return errRecord\n              if(to !== -1 && this.info.records >= to){\n                this.state.stop = true\n                this.push(null)\n                return\n              }\n            }\n            this.state.commenting = false\n            pos += recordDelimiterLength - 1\n            continue\n          }\n          if(this.state.commenting){\n            continue\n          }\n          const commentCount = comment === null ? 0 : this.__compareBytes(comment, buf, pos, chr)\n          if(commentCount !== 0){\n            this.state.commenting = true\n            continue\n          }\n          let delimiterLength = this.__isDelimiter(buf, pos, chr)\n          if(delimiterLength !== 0){\n            this.info.bytes = this.state.bufBytesStart + pos;\n            const errField = this.__onField()\n            if(errField !== undefined) return errField\n            pos += delimiterLength - 1\n            continue\n          }\n        }\n      }\n      if(this.state.commenting === false){\n        if(max_record_size !== 0 && this.state.record_length + this.state.field.length > max_record_size){\n          const err = this.__error(\n            new CsvError('CSV_MAX_RECORD_SIZE', [\n              'Max Record Size:',\n              'record exceed the maximum number of tolerated bytes',\n              `of ${max_record_size}`,\n              `at line ${this.info.lines}`,\n            ], this.options, this.__infoField())\n          )\n          if(err !== undefined) return err\n        }\n      }\n      const lappend = ltrim === false || this.state.quoting === true || this.state.field.length !== 0 || !this.__isCharTrimable(chr)\n      // rtrim in non quoting is handle in __onField\n      const rappend = rtrim === false || this.state.wasQuoting === false\n      if( lappend === true && rappend === true ){\n        this.state.field.append(chr)\n      }else if(rtrim === true && !this.__isCharTrimable(chr)){\n        const err = this.__error(\n          new CsvError('CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTE', [\n            'Invalid Closing Quote:',\n            'found non trimable byte after quote',\n            `at line ${this.info.lines}`,\n          ], this.options, this.__infoField())\n        )\n        if(err !== undefined) return err\n      }\n    }\n    if(end === true){\n      // Ensure we are not ending in a quoting state\n      if(this.state.quoting === true){\n        const err = this.__error(\n          new CsvError('CSV_QUOTE_NOT_CLOSED', [\n            'Quote Not Closed:',\n            `the parsing is finished with an opening quote at line ${this.info.lines}`,\n          ], this.options, this.__infoField())\n        )\n        if(err !== undefined) return err\n      }else{\n        // Skip last line if it has no characters\n        if(this.state.wasQuoting === true || this.state.record.length !== 0 || this.state.field.length !== 0){\n          this.info.bytes = this.state.bufBytesStart + pos;\n          const errField = this.__onField()\n          if(errField !== undefined) return errField\n          const errRecord = this.__onRecord()\n          if(errRecord !== undefined) return errRecord\n        }else if(this.state.wasRowDelimiter === true){\n          this.info.empty_lines++\n        }else if(this.state.commenting === true){\n          this.info.comment_lines++\n        }\n      }\n    }else{\n      this.state.bufBytesStart += pos\n      this.state.previousBuf = buf.slice(pos)\n    }\n    if(this.state.wasRowDelimiter === true){\n      this.info.lines++\n      this.state.wasRowDelimiter = false\n    }\n  }\n  __onRecord(){\n    const {columns, columns_duplicates_to_array, encoding, info, from, relax_column_count, relax_column_count_less, relax_column_count_more, raw, skip_lines_with_empty_values} = this.options\n    const {enabled, record} = this.state\n    if(enabled === false){\n      return this.__resetRecord()\n    }\n    // Convert the first line into column names\n    const recordLength = record.length\n    if(columns === true){\n      if(skip_lines_with_empty_values === true && isRecordEmpty(record)){\n        this.__resetRecord()\n        return\n      }\n      return this.__firstLineToColumns(record)\n    }\n    if(columns === false && this.info.records === 0){\n      this.state.expectedRecordLength = recordLength\n    }\n    if(recordLength !== this.state.expectedRecordLength){\n      const err = columns === false ?\n        // Todo: rename CSV_INCONSISTENT_RECORD_LENGTH to\n        // CSV_RECORD_INCONSISTENT_FIELDS_LENGTH\n        new CsvError('CSV_INCONSISTENT_RECORD_LENGTH', [\n          'Invalid Record Length:',\n          `expect ${this.state.expectedRecordLength},`,\n          `got ${recordLength} on line ${this.info.lines}`,\n        ], this.options, this.__infoField(), {\n          record: record,\n        })\n      :\n        // Todo: rename CSV_RECORD_DONT_MATCH_COLUMNS_LENGTH to\n        // CSV_RECORD_INCONSISTENT_COLUMNS\n        new CsvError('CSV_RECORD_DONT_MATCH_COLUMNS_LENGTH', [\n          'Invalid Record Length:',\n          `columns length is ${columns.length},`, // rename columns\n          `got ${recordLength} on line ${this.info.lines}`,\n        ], this.options, this.__infoField(), {\n          record: record,\n        })\n      if(relax_column_count === true ||\n        (relax_column_count_less === true && recordLength < this.state.expectedRecordLength) ||\n        (relax_column_count_more === true && recordLength > this.state.expectedRecordLength) ){\n        this.info.invalid_field_length++\n        this.state.error = err\n      // Error is undefined with skip_lines_with_error\n      }else{\n        const finalErr = this.__error(err)\n        if(finalErr) return finalErr\n      }\n    }\n    if(skip_lines_with_empty_values === true && isRecordEmpty(record)){\n      this.__resetRecord()\n      return\n    }\n    if(this.state.recordHasError === true){\n      this.__resetRecord()\n      this.state.recordHasError = false\n      return\n    }\n    this.info.records++\n    if(from === 1 || this.info.records >= from){\n      // With columns, records are object\n      if(columns !== false){\n        const obj = {}\n        // Transform record array to an object\n        for(let i = 0, l = record.length; i < l; i++){\n          if(columns[i] === undefined || columns[i].disabled) continue\n          // Turn duplicate columns into an array\n          if (columns_duplicates_to_array === true && obj[columns[i].name] !== undefined) {\n            if (Array.isArray(obj[columns[i].name])) {\n              obj[columns[i].name] = obj[columns[i].name].concat(record[i])\n            } else {\n              obj[columns[i].name] = [obj[columns[i].name], record[i]]\n            }\n          } else {\n            obj[columns[i].name] = record[i]\n          }\n        }\n        const {objname} = this.options\n        // Without objname (default)\n        if(objname === undefined){\n          if(raw === true || info === true){\n            const err = this.__push(Object.assign(\n              {record: obj},\n              (raw === true ? {raw: this.state.rawBuffer.toString(encoding)}: {}),\n              (info === true ? {info: this.__infoRecord()}: {})\n            ))\n            if(err){\n              return err\n            }\n          }else{\n            const err = this.__push(obj)\n            if(err){\n              return err\n            }\n          }\n        // With objname (default)\n        }else{\n          if(raw === true || info === true){\n            const err = this.__push(Object.assign(\n              {record: [obj[objname], obj]},\n              raw === true ? {raw: this.state.rawBuffer.toString(encoding)}: {},\n              info === true ? {info: this.__infoRecord()}: {}\n            ))\n            if(err){\n              return err\n            }\n          }else{\n            const err = this.__push([obj[objname], obj])\n            if(err){\n              return err\n            }\n          }\n        }\n      // Without columns, records are array\n      }else{\n        if(raw === true || info === true){\n          const err = this.__push(Object.assign(\n            {record: record},\n            raw === true ? {raw: this.state.rawBuffer.toString(encoding)}: {},\n            info === true ? {info: this.__infoRecord()}: {}\n          ))\n          if(err){\n            return err\n          }\n        }else{\n          const err = this.__push(record)\n          if(err){\n            return err\n          }\n        }\n      }\n    }\n    this.__resetRecord()\n  }\n  __firstLineToColumns(record){\n    const {firstLineToHeaders} = this.state\n    try{\n      const headers = firstLineToHeaders === undefined ? record : firstLineToHeaders.call(null, record)\n      if(!Array.isArray(headers)){\n        return this.__error(\n          new CsvError('CSV_INVALID_COLUMN_MAPPING', [\n            'Invalid Column Mapping:',\n            'expect an array from column function,',\n            `got ${JSON.stringify(headers)}`\n          ], this.options, this.__infoField(), {\n            headers: headers,\n          })\n        )\n      }\n      const normalizedHeaders = normalizeColumnsArray(headers)\n      this.state.expectedRecordLength = normalizedHeaders.length\n      this.options.columns = normalizedHeaders\n      this.__resetRecord()\n      return\n    }catch(err){\n      return err\n    }\n  }\n  __resetRecord(){\n    if(this.options.raw === true){\n      this.state.rawBuffer.reset()\n    }\n    this.state.error = undefined\n    this.state.record = []\n    this.state.record_length = 0\n  }\n  __onField(){\n    const {cast, encoding, rtrim, max_record_size} = this.options\n    const {enabled, wasQuoting} = this.state\n    // Short circuit for the from_line options\n    if(enabled === false){\n      return this.__resetField()\n    }\n    let field = this.state.field.toString(encoding)\n    if(rtrim === true && wasQuoting === false){\n      field = field.trimRight()\n    }\n    if(cast === true){\n      const [err, f] = this.__cast(field)\n      if(err !== undefined) return err\n      field = f\n    }\n    this.state.record.push(field)\n    // Increment record length if record size must not exceed a limit\n    if(max_record_size !== 0 && typeof field === 'string'){\n      this.state.record_length += field.length\n    }\n    this.__resetField()\n  }\n  __resetField(){\n    this.state.field.reset()\n    this.state.wasQuoting = false\n  }\n  __push(record){\n    const {on_record} = this.options\n    if(on_record !== undefined){\n      const info = this.__infoRecord()\n      try{\n        record = on_record.call(null, record, info)\n      }catch(err){\n        return err\n      }\n      if(record === undefined || record === null){ return }\n    }\n    this.push(record)\n  }\n  // Return a tuple with the error and the casted value\n  __cast(field){\n    const {columns, relax_column_count} = this.options\n    const isColumns = Array.isArray(columns)\n    // Dont loose time calling cast\n    // because the final record is an object\n    // and this field can't be associated to a key present in columns\n    if( isColumns === true && relax_column_count && this.options.columns.length <= this.state.record.length ){\n      return [undefined, undefined]\n    }\n    if(this.state.castField !== null){\n      try{\n        const info = this.__infoField()\n        return [undefined, this.state.castField.call(null, field, info)]\n      }catch(err){\n        return [err]\n      }\n    }\n    if(this.__isFloat(field)){\n      return [undefined, parseFloat(field)]\n    }else if(this.options.cast_date !== false){\n      const info = this.__infoField()\n      return [undefined, this.options.cast_date.call(null, field, info)]\n    }\n    return [undefined, field]\n  }\n  // Helper to test if a character is a space or a line delimiter\n  __isCharTrimable(chr){\n    return chr === space || chr === tab || chr === cr || chr === nl || chr === np\n  }\n  // Keep it in case we implement the `cast_int` option\n  // __isInt(value){\n  //   // return Number.isInteger(parseInt(value))\n  //   // return !isNaN( parseInt( obj ) );\n  //   return /^(\\-|\\+)?[1-9][0-9]*$/.test(value)\n  // }\n  __isFloat(value){\n    return (value - parseFloat( value ) + 1) >= 0 // Borrowed from jquery\n  }\n  __compareBytes(sourceBuf, targetBuf, targetPos, firstByte){\n    if(sourceBuf[0] !== firstByte) return 0\n    const sourceLength = sourceBuf.length\n    for(let i = 1; i < sourceLength; i++){\n      if(sourceBuf[i] !== targetBuf[targetPos+i]) return 0\n    }\n    return sourceLength\n  }\n  __needMoreData(i, bufLen, end){\n    if(end) return false\n    const {quote} = this.options\n    const {quoting, needMoreDataSize, recordDelimiterMaxLength} = this.state\n    const numOfCharLeft = bufLen - i - 1\n    const requiredLength = Math.max(\n      needMoreDataSize,\n      // Skip if the remaining buffer smaller than record delimiter\n      recordDelimiterMaxLength,\n      // Skip if the remaining buffer can be record delimiter following the closing quote\n      // 1 is for quote.length\n      quoting ? (quote.length + recordDelimiterMaxLength) : 0,\n    )\n    return numOfCharLeft < requiredLength\n  }\n  __isDelimiter(buf, pos, chr){\n    const {delimiter, ignore_last_delimiters} = this.options\n    if(ignore_last_delimiters === true && this.state.record.length === this.options.columns.length - 1){\n      return 0\n    }else if(ignore_last_delimiters !== false && typeof ignore_last_delimiters === 'number' && this.state.record.length === ignore_last_delimiters - 1){\n      return 0\n    }\n    loop1: for(let i = 0; i < delimiter.length; i++){\n      const del = delimiter[i]\n      if(del[0] === chr){\n        for(let j = 1; j < del.length; j++){\n          if(del[j] !== buf[pos+j]) continue loop1\n        }\n        return del.length\n      }\n    }\n    return 0\n  }\n  __isRecordDelimiter(chr, buf, pos){\n    const {record_delimiter} = this.options\n    const recordDelimiterLength = record_delimiter.length\n    loop1: for(let i = 0; i < recordDelimiterLength; i++){\n      const rd = record_delimiter[i]\n      const rdLength = rd.length\n      if(rd[0] !== chr){\n        continue\n      }\n      for(let j = 1; j < rdLength; j++){\n        if(rd[j] !== buf[pos+j]){\n          continue loop1\n        }\n      }\n      return rd.length\n    }\n    return 0\n  }\n  __isEscape(buf, pos, chr){\n    const {escape} = this.options\n    if(escape === null) return false\n    const l = escape.length\n    if(escape[0] === chr){\n      for(let i = 0; i < l; i++){\n        if(escape[i] !== buf[pos+i]){\n          return false\n        }\n      }\n      return true\n    }\n    return false\n  }\n  __isQuote(buf, pos){\n    const {quote} = this.options\n    if(quote === null) return false\n    const l = quote.length\n    for(let i = 0; i < l; i++){\n      if(quote[i] !== buf[pos+i]){\n        return false\n      }\n    }\n    return true\n  }\n  __autoDiscoverRecordDelimiter(buf, pos){\n    const {encoding} = this.options\n    const chr = buf[pos]\n    if(chr === cr){\n      if(buf[pos+1] === nl){\n        this.options.record_delimiter.push(Buffer.from('\\r\\n', encoding))\n        this.state.recordDelimiterMaxLength = 2\n        return 2\n      }else{\n        this.options.record_delimiter.push(Buffer.from('\\r', encoding))\n        this.state.recordDelimiterMaxLength = 1\n        return 1\n      }\n    }else if(chr === nl){\n      this.options.record_delimiter.push(Buffer.from('\\n', encoding))\n      this.state.recordDelimiterMaxLength = 1\n      return 1\n    }\n    return 0\n  }\n  __error(msg){\n    const {skip_lines_with_error} = this.options\n    const err = typeof msg === 'string' ? new Error(msg) : msg\n    if(skip_lines_with_error){\n      this.state.recordHasError = true\n      this.emit('skip', err)\n      return undefined\n    }else{\n      return err\n    }\n  }\n  __infoDataSet(){\n    return {\n      ...this.info,\n      columns: this.options.columns\n    }\n  }\n  __infoRecord(){\n    const {columns} = this.options\n    return {\n      ...this.__infoDataSet(),\n      error: this.state.error,\n      header: columns === true,\n      index: this.state.record.length,\n    }\n  }\n  __infoField(){\n    const {columns} = this.options\n    const isColumns = Array.isArray(columns)\n    return {\n      ...this.__infoRecord(),\n      column: isColumns === true ?\n        ( columns.length > this.state.record.length ?\n          columns[this.state.record.length].name :\n          null\n        ) :\n        this.state.record.length,\n      quoting: this.state.wasQuoting,\n    }\n  }\n}\n\nconst parse = function(){\n  let data, options, callback\n  for(let i in arguments){\n    const argument = arguments[i]\n    const type = typeof argument\n    if(data === undefined && (typeof argument === 'string' || Buffer.isBuffer(argument))){\n      data = argument\n    }else if(options === undefined && isObject(argument)){\n      options = argument\n    }else if(callback === undefined && type === 'function'){\n      callback = argument\n    }else{\n      throw new CsvError('CSV_INVALID_ARGUMENT', [\n        'Invalid argument:',\n        `got ${JSON.stringify(argument)} at index ${i}`\n      ], options || {})\n    }\n  }\n  const parser = new Parser(options)\n  if(callback){\n    const records = options === undefined || options.objname === undefined ? [] : {}\n    parser.on('readable', function(){\n      let record\n      while((record = this.read()) !== null){\n        if(options === undefined || options.objname === undefined){\n          records.push(record)\n        }else{\n          records[record[0]] = record[1]\n        }\n      }\n    })\n    parser.on('error', function(err){\n      callback(err, undefined, parser.__infoDataSet())\n    })\n    parser.on('end', function(){\n      callback(undefined, records, parser.__infoDataSet())\n    })\n  }\n  if(data !== undefined){\n    // Give a chance for events to be registered later\n    if(typeof setImmediate === 'function'){\n      setImmediate(function(){\n        parser.write(data)\n        parser.end()\n      })\n    }else{\n      parser.write(data)\n      parser.end()\n    }\n  }\n  return parser\n}\n\nclass CsvError extends Error {\n  constructor(code, message, options, ...contexts) {\n    if(Array.isArray(message)) message = message.join(' ')\n    super(message)\n    if(Error.captureStackTrace !== undefined){\n      Error.captureStackTrace(this, CsvError)\n    }\n    this.code = code\n    for(const context of contexts){\n      for(const key in context){\n        const value = context[key]\n        this[key] = Buffer.isBuffer(value) ? value.toString(options.encoding) : value == null ? value : JSON.parse(JSON.stringify(value))\n      }\n    }\n  }\n}\n\nparse.Parser = Parser\n\nparse.CsvError = CsvError\n\nmodule.exports = parse\n\nconst underscore = function(str){\n  return str.replace(/([A-Z])/g, function(_, match){\n    return '_' + match.toLowerCase()\n  })\n}\n\nconst isObject = function(obj){\n  return (typeof obj === 'object' && obj !== null && !Array.isArray(obj))\n}\n\nconst isRecordEmpty = function(record){\n  return record.every( (field) => field == null || field.toString && field.toString().trim() === '' )\n}\n\nconst normalizeColumnsArray = function(columns){\n  const normalizedColumns = [];\n  for(let i = 0, l = columns.length; i < l; i++){\n    const column = columns[i]\n    if(column === undefined || column === null || column === false){\n      normalizedColumns[i] = { disabled: true }\n    }else if(typeof column === 'string'){\n      normalizedColumns[i] = { name: column }\n    }else if(isObject(column)){\n      if(typeof column.name !== 'string'){\n        throw new CsvError('CSV_OPTION_COLUMNS_MISSING_NAME', [\n          'Option columns missing name:',\n          `property \"name\" is required at position ${i}`,\n          'when column is an object literal'\n        ])\n      }\n      normalizedColumns[i] = column\n    }else{\n      throw new CsvError('CSV_INVALID_COLUMN_DEFINITION', [\n        'Invalid column definition:',\n        'expect a string or a literal object,',\n        `got ${JSON.stringify(column)} at position ${i}`\n      ])\n    }\n  }\n  return normalizedColumns;\n}\n","\nconst parse = require('.')\n\nmodule.exports = function(data, options={}){\n  if(typeof data === 'string'){\n    data = Buffer.from(data)\n  }\n  const records = options && options.objname ? {} : []\n  const parser = new parse.Parser(options)\n  parser.push = function(record){\n    if(record === null){\n      return\n    }\n    if(options.objname === undefined)\n      records.push(record)\n    else{\n      records[record[0]] = record[1]\n    }\n  }\n  const err1 = parser.__parse(data, false)\n  if(err1 !== undefined) throw err1\n  const err2 = parser.__parse(undefined, true)\n  if(err2 !== undefined) throw err2\n  return records\n}\n","\n/*\nCSV Stringify\n\nPlease look at the [project documentation](https://csv.js.org/stringify/) for\nadditional information.\n*/\n\nconst { Transform } = require('stream')\nconst bom_utf8 = Buffer.from([239, 187, 191])\n\nclass Stringifier extends Transform {\n  constructor(opts = {}){\n    super({...{writableObjectMode: true}, ...opts})\n    const options = {}\n    let err\n    // Merge with user options\n    for(let opt in opts){\n      options[underscore(opt)] = opts[opt]\n    }\n    if(err = this.normalize(options)) throw err\n    switch(options.record_delimiter){\n      case 'auto':\n        options.record_delimiter = null\n        break\n      case 'unix':\n        options.record_delimiter = \"\\n\"\n        break\n      case 'mac':\n        options.record_delimiter = \"\\r\"\n        break\n      case 'windows':\n        options.record_delimiter = \"\\r\\n\"\n        break\n      case 'ascii':\n        options.record_delimiter = \"\\u001e\"\n        break\n      case 'unicode':\n        options.record_delimiter = \"\\u2028\"\n        break\n    }\n    // Expose options\n    this.options = options\n    // Internal state\n    this.state = {\n      stop: false\n    }\n    // Information\n    this.info = {\n      records: 0\n    }\n  }\n  normalize(options){\n    // Normalize option `bom`\n    if(options.bom === undefined || options.bom === null || options.bom === false){\n      options.bom = false\n    }else if(options.bom !== true){\n      return new CsvError('CSV_OPTION_BOOLEAN_INVALID_TYPE', [\n        'option `bom` is optional and must be a boolean value,',\n        `got ${JSON.stringify(options.bom)}`\n      ])\n    }\n    // Normalize option `delimiter`\n    if(options.delimiter === undefined || options.delimiter === null){\n      options.delimiter = ','\n    }else if(Buffer.isBuffer(options.delimiter)){\n      options.delimiter = options.delimiter.toString()\n    }else if(typeof options.delimiter !== 'string'){\n      return new CsvError('CSV_OPTION_DELIMITER_INVALID_TYPE', [\n        'option `delimiter` must be a buffer or a string,',\n        `got ${JSON.stringify(options.delimiter)}`\n      ])\n    }\n    // Normalize option `quote`\n    if(options.quote === undefined || options.quote === null){\n      options.quote = '\"'\n    }else if(options.quote === true){\n      options.quote = '\"'\n    }else if(options.quote === false){\n      options.quote = ''\n    }else if (Buffer.isBuffer(options.quote)){\n      options.quote = options.quote.toString()\n    }else if(typeof options.quote !== 'string'){\n      return new CsvError('CSV_OPTION_QUOTE_INVALID_TYPE', [\n        'option `quote` must be a boolean, a buffer or a string,',\n        `got ${JSON.stringify(options.quote)}`\n      ])\n    }\n    // Normalize option `quoted`\n    if(options.quoted === undefined || options.quoted === null){\n      options.quoted = false\n    }else{\n      // todo\n    }\n    // Normalize option `quoted_empty`\n    if(options.quoted_empty === undefined || options.quoted_empty === null){\n      options.quoted_empty = undefined\n    }else{\n      // todo\n    }\n    // Normalize option `quoted_match`\n    if(options.quoted_match === undefined || options.quoted_match === null || options.quoted_match === false){\n      options.quoted_match = null\n    }else if(!Array.isArray(options.quoted_match)){\n      options.quoted_match = [options.quoted_match]\n    }\n    if(options.quoted_match){\n      for(let quoted_match of options.quoted_match){\n        const isString = typeof quoted_match === 'string'\n        const isRegExp = quoted_match instanceof RegExp\n        if(!isString && !isRegExp){\n          return Error(`Invalid Option: quoted_match must be a string or a regex, got ${JSON.stringify(quoted_match)}`)\n        }\n      }\n    }\n    // Normalize option `quoted_string`\n    if(options.quoted_string === undefined || options.quoted_string === null){\n      options.quoted_string = false\n    }else{\n      // todo\n    }\n    // Normalize option `eof`\n    if(options.eof === undefined || options.eof === null){\n      options.eof = true\n    }else{\n      // todo\n    }\n    // Normalize option `escape`\n    if(options.escape === undefined || options.escape === null){\n      options.escape = '\"'\n    }else if(Buffer.isBuffer(options.escape)){\n      options.escape = options.escape.toString()\n    }else if(typeof options.escape !== 'string'){\n      return Error(`Invalid Option: escape must be a buffer or a string, got ${JSON.stringify(options.escape)}`)\n    }\n    if (options.escape.length > 1){\n      return Error(`Invalid Option: escape must be one character, got ${options.escape.length} characters`)\n    }\n    // Normalize option `header`\n    if(options.header === undefined || options.header === null){\n      options.header = false\n    }else{\n      // todo\n    }\n    // Normalize option `columns`\n    options.columns = this.normalize_columns(options.columns)\n    // Normalize option `quoted`\n    if(options.quoted === undefined || options.quoted === null){\n      options.quoted = false\n    }else{\n      // todo\n    }\n    // Normalize option `cast`\n    if(options.cast === undefined || options.cast === null){\n      options.cast = {}\n    }else{\n      // todo\n    }\n    // Normalize option cast.bigint\n    if(options.cast.bigint === undefined || options.cast.bigint === null){\n      // Cast boolean to string by default\n      options.cast.bigint = value => '' + value\n    }\n    // Normalize option cast.boolean\n    if(options.cast.boolean === undefined || options.cast.boolean === null){\n      // Cast boolean to string by default\n      options.cast.boolean = value => value ? '1' : ''\n    }\n    // Normalize option cast.date\n    if(options.cast.date === undefined || options.cast.date === null){\n      // Cast date to timestamp string by default\n      options.cast.date = value => '' + value.getTime()\n    }\n    // Normalize option cast.number\n    if(options.cast.number === undefined || options.cast.number === null){\n      // Cast number to string using native casting by default\n      options.cast.number = value => '' + value\n    }\n    // Normalize option cast.object\n    if(options.cast.object === undefined || options.cast.object === null){\n      // Stringify object as JSON by default\n      options.cast.object = value => JSON.stringify(value)\n    }\n    // Normalize option cast.string\n    if(options.cast.string === undefined || options.cast.string === null){\n      // Leave string untouched\n      options.cast.string = function(value){return value}\n    }\n    // Normalize option `record_delimiter`\n    if(options.record_delimiter === undefined || options.record_delimiter === null){\n      options.record_delimiter = '\\n'\n    }else if(Buffer.isBuffer(options.record_delimiter)){\n      options.record_delimiter = options.record_delimiter.toString()\n    }else if(typeof options.record_delimiter !== 'string'){\n      return Error(`Invalid Option: record_delimiter must be a buffer or a string, got ${JSON.stringify(options.record_delimiter)}`)\n    }\n  }\n  _transform(chunk, encoding, callback){\n    if(this.state.stop === true){\n      return\n    }\n    // Chunk validation\n    if(!Array.isArray(chunk) && typeof chunk !== 'object'){\n      this.state.stop = true\n      return callback(Error(`Invalid Record: expect an array or an object, got ${JSON.stringify(chunk)}`))\n    }\n    // Detect columns from the first record\n    if(this.info.records === 0){\n      if(Array.isArray(chunk)){\n        if(this.options.header === true && !this.options.columns){\n          this.state.stop = true\n          return callback(Error('Undiscoverable Columns: header option requires column option or object records'))\n        }\n      }else if(this.options.columns === undefined || this.options.columns === null){\n        this.options.columns = this.normalize_columns(Object.keys(chunk))\n      }\n    }\n    // Emit the header\n    if(this.info.records === 0){\n      this.bom()\n      this.headers()\n    }\n    // Emit and stringify the record if an object or an array\n    try{\n      this.emit('record', chunk, this.info.records)\n    }catch(err){\n      this.state.stop = true\n      return this.emit('error', err)\n    }\n    // Convert the record into a string\n    let chunk_string\n    if(this.options.eof){\n      chunk_string = this.stringify(chunk)\n      if(chunk_string === undefined){\n        return\n      }else{\n        chunk_string = chunk_string + this.options.record_delimiter\n      }\n    }else{\n      chunk_string = this.stringify(chunk)\n      if(chunk_string === undefined){\n        return\n      }else{\n        if(this.options.header || this.info.records){\n          chunk_string = this.options.record_delimiter + chunk_string\n        }\n      }\n    }\n    // Emit the csv\n    this.info.records++\n    this.push(chunk_string)\n    callback()\n  }\n  _flush(callback){\n    if(this.info.records === 0){\n      this.bom()\n      this.headers()\n    }\n    callback()\n  }\n  stringify(chunk, chunkIsHeader=false){\n    if(typeof chunk !== 'object'){\n      return chunk\n    }\n    const {columns, header} = this.options\n    const record = []\n    // Record is an array\n    if(Array.isArray(chunk)){\n      // We are getting an array but the user has specified output columns. In\n      // this case, we respect the columns indexes\n      if(columns){\n        chunk.splice(columns.length)\n      }\n      // Cast record elements\n      for(let i=0; i<chunk.length; i++){\n        const field = chunk[i]\n        const [err, value] = this.__cast(field, {\n          index: i, column: i, records: this.info.records, header: chunkIsHeader\n        })\n        if(err){\n          this.emit('error', err)\n          return\n        }\n        record[i] = [value, field]\n      }\n    // Record is a literal object\n    }else{\n      if(columns){\n        for(let i=0; i<columns.length; i++){\n          const field = get(chunk, columns[i].key)\n          const [err, value] = this.__cast(field, {\n            index: i, column: columns[i].key, records: this.info.records, header: chunkIsHeader\n          })\n          if(err){\n            this.emit('error', err)\n            return\n          }\n          record[i] = [value, field]\n        }\n      }else{\n        for(let column of chunk){\n          const field = chunk[column]\n          const [err, value] = this.__cast(field, {\n            index: i, column: columns[i].key, records: this.info.records, header: chunkIsHeader\n          })\n          if(err){\n            this.emit('error', err)\n            return\n          }\n          record.push([value, field])\n        }\n      }\n    }\n    let csvrecord = ''\n    for(let i=0; i<record.length; i++){\n      let options, err\n      let [value, field] = record[i]\n      if(typeof value === \"string\"){\n        options = this.options\n      }else if(isObject(value)){\n        // let { value, ...options } = value\n        options = value\n        value = options.value\n        delete options.value\n        if(typeof value !== \"string\" && value !== undefined && value !== null){\n          this.emit(\"error\", Error(`Invalid Casting Value: returned value must return a string, null or undefined, got ${JSON.stringify(value)}`))\n          return\n        }\n        options = {...this.options, ...options}\n        if(err = this.normalize(options)){\n          this.emit(\"error\", err)\n          return\n        }\n      }else if(value === undefined || value === null){\n        options = this.options\n      }else{\n        this.emit(\"error\", Error(`Invalid Casting Value: returned value must return a string, an object, null or undefined, got ${JSON.stringify(value)}`))\n        return\n      }\n      const {delimiter, escape, quote, quoted, quoted_empty, quoted_string, quoted_match, record_delimiter} = options\n      if(value){\n        if(typeof value !== 'string'){\n          this.emit(\"error\", Error(`Formatter must return a string, null or undefined, got ${JSON.stringify(value)}`))\n          return null\n        }\n        const containsdelimiter = delimiter.length && value.indexOf(delimiter) >= 0\n        const containsQuote = (quote !== '') && value.indexOf(quote) >= 0\n        const containsEscape = value.indexOf(escape) >= 0 && (escape !== quote)\n        const containsRecordDelimiter = value.indexOf(record_delimiter) >= 0\n        const quotedString = quoted_string && typeof field === 'string'\n        let quotedMatch = quoted_match && quoted_match.filter( quoted_match => {\n          if(typeof quoted_match === 'string'){\n            return value.indexOf(quoted_match) !== -1\n          }else{\n            return quoted_match.test(value)\n          }\n        })\n        quotedMatch = quotedMatch && quotedMatch.length > 0\n        const shouldQuote = containsQuote === true || containsdelimiter || containsRecordDelimiter || quoted || quotedString || quotedMatch\n        if(shouldQuote === true && containsEscape === true){\n          const regexp = escape === '\\\\'\n          ? new RegExp(escape + escape, 'g')\n          : new RegExp(escape, 'g')\n          value = value.replace(regexp, escape + escape)\n        }\n        if(containsQuote === true){\n          const regexp = new RegExp(quote,'g')\n          value = value.replace(regexp, escape + quote)\n        }\n        if(shouldQuote === true){\n          value = quote + value + quote\n        }\n        csvrecord += value\n      }else if(quoted_empty === true || (field === '' && quoted_string === true && quoted_empty !== false)){\n        csvrecord += quote + quote\n      }\n      if(i !== record.length - 1){\n        csvrecord += delimiter\n      }\n    }\n    return csvrecord\n  }\n  bom(){\n    if(this.options.bom !== true){\n      return\n    }\n    this.push(bom_utf8)\n  }\n  headers(){\n    if(this.options.header === false){\n      return\n    }\n    if(this.options.columns === undefined){\n      return\n    }\n    let headers = this.options.columns.map(column => column.header)\n    if(this.options.eof){\n      headers = this.stringify(headers, true) + this.options.record_delimiter\n    }else{\n      headers = this.stringify(headers)\n    }\n    this.push(headers)\n  }\n  __cast(value, context){\n    const type = typeof value\n    try{\n      if(type === 'string'){ // Fine for 99% of the cases\n        return [undefined, this.options.cast.string(value, context)]\n      }else if(type === 'bigint'){\n        return [undefined, this.options.cast.bigint(value, context)]\n      }else if(type === 'number'){\n        return [undefined, this.options.cast.number(value, context)]\n      }else if(type === 'boolean'){\n        return [undefined, this.options.cast.boolean(value, context)]\n      }else if(value instanceof Date){\n        return [undefined, this.options.cast.date(value, context)]\n      }else if(type === 'object' && value !== null){\n        return [undefined, this.options.cast.object(value, context)]\n      }else{\n        return [undefined, value, value]\n      }\n    }catch(err){\n      return [err]\n    }\n  }\n  normalize_columns(columns){\n    if(columns === undefined || columns === null){\n      return undefined\n    }\n    if(typeof columns !== 'object'){\n      throw Error('Invalid option \"columns\": expect an array or an object')\n    }\n    if(!Array.isArray(columns)){\n      const newcolumns = []\n      for(let k in columns){\n        newcolumns.push({\n          key: k,\n          header: columns[k]\n        })\n      }\n      columns = newcolumns\n    }else{\n      const newcolumns = []\n      for(let column of columns){\n        if(typeof column === 'string'){\n          newcolumns.push({\n            key: column,\n            header: column\n          })\n        }else if(typeof column === 'object' && column !== undefined && !Array.isArray(column)){\n          if(!column.key){\n            throw Error('Invalid column definition: property \"key\" is required')\n          }\n          if(column.header === undefined){\n            column.header = column.key\n          }\n          newcolumns.push(column)\n        }else{\n          throw Error('Invalid column definition: expect a string or an object')\n        }\n      }\n      columns = newcolumns\n    }\n    return columns\n  }\n}\n\nconst stringify = function(){\n  let data, options, callback\n  for(let i in arguments){\n    const argument = arguments[i]\n    const type = typeof argument\n    if(data === undefined && (Array.isArray(argument))){\n      data = argument\n    }else if(options === undefined && isObject(argument)){\n      options = argument\n    }else if(callback === undefined && type === 'function'){\n      callback = argument\n    }else{\n      throw new CsvError('CSV_INVALID_ARGUMENT', [\n        'Invalid argument:',\n        `got ${JSON.stringify(argument)} at index ${i}`\n      ])\n    }\n  }\n  const stringifier = new Stringifier(options)\n  if(callback){\n    const chunks = []\n    stringifier.on('readable', function(){\n      let chunk\n      while((chunk = this.read()) !== null){\n        chunks.push(chunk)\n      }\n    })\n    stringifier.on('error', function(err){\n      callback(err)\n    })\n    stringifier.on('end', function(){\n      callback(undefined, chunks.join(''))\n    })\n  }\n  if(data !== undefined){\n    // Give a chance for events to be registered later\n    if(typeof setImmediate === 'function'){\n      setImmediate(function(){\n        for(let record of data){\n          stringifier.write(record)\n        }\n        stringifier.end()\n      })\n    }else{\n      for(let record of data){\n        stringifier.write(record)\n      }\n      stringifier.end()\n    }\n  }\n  return stringifier\n}\n\nclass CsvError extends Error {\n  constructor(code, message, ...contexts) {\n    if(Array.isArray(message)) message = message.join(' ')\n    super(message)\n    if(Error.captureStackTrace !== undefined){\n      Error.captureStackTrace(this, CsvError)\n    }\n    this.code = code\n    for(const context of contexts){\n      for(const key in context){\n        const value = context[key]\n        this[key] = Buffer.isBuffer(value) ? value.toString() : value == null ? value : JSON.parse(JSON.stringify(value))\n      }\n    }\n  }\n}\n\nstringify.Stringifier = Stringifier\n\nstringify.CsvError = CsvError\n\nmodule.exports = stringify\n\nconst isObject = function(obj){\n  return typeof obj === 'object' && obj !== null && ! Array.isArray(obj)\n}\n\nconst underscore = function(str){\n  return str.replace(/([A-Z])/g, function(_, match){\n    return '_' + match.toLowerCase()\n  })\n}\n\n// Lodash implementation of `get`\n\nconst charCodeOfDot = '.'.charCodeAt(0)\nconst reEscapeChar = /\\\\(\\\\)?/g\nconst rePropName = RegExp(\n  // Match anything that isn't a dot or bracket.\n  '[^.[\\\\]]+' + '|' +\n  // Or match property names within brackets.\n  '\\\\[(?:' +\n    // Match a non-string expression.\n    '([^\"\\'][^[]*)' + '|' +\n    // Or match strings (supports escaping characters).\n    '([\"\\'])((?:(?!\\\\2)[^\\\\\\\\]|\\\\\\\\.)*?)\\\\2' +\n  ')\\\\]'+ '|' +\n  // Or match \"\" as the space between consecutive dots or empty brackets.\n  '(?=(?:\\\\.|\\\\[\\\\])(?:\\\\.|\\\\[\\\\]|$))'\n, 'g')\nconst reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/\nconst reIsPlainProp = /^\\w*$/\nconst getTag = function(value){\n  if(!value)\n    value === undefined ? '[object Undefined]' : '[object Null]'\n  return Object.prototype.toString.call(value)\n}\nconst isKey = function(value, object){\n  if(Array.isArray(value)){\n    return false\n  }\n  const type = typeof value\n  if(type === 'number' || type === 'symbol' || type === 'boolean' || !value || isSymbol(value)){\n    return true\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object))\n}\nconst isSymbol = function(value){\n  const type = typeof value\n  return type === 'symbol' || (type === 'object' && value && getTag(value) === '[object Symbol]')\n}\nconst stringToPath = function(string){\n  const result = []\n  if(string.charCodeAt(0) === charCodeOfDot){\n    result.push('')\n  }\n  string.replace(rePropName, function(match, expression, quote, subString){\n    let key = match\n    if(quote){\n      key = subString.replace(reEscapeChar, '$1')\n    }else if(expression){\n      key = expression.trim()\n    }\n    result.push(key)\n  })\n  return result\n}\nconst castPath = function(value, object){\n  if(Array.isArray(value)){\n    return value\n  } else {\n    return isKey(value, object) ? [value] : stringToPath(value)\n  }\n}\nconst toKey = function(value){\n  if(typeof value === 'string' || isSymbol(value))\n    return value\n  const result = `${value}`\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result\n}\nconst get = function(object, path){\n  path = castPath(path, object)\n  let index = 0\n  const length = path.length\n  while(object != null && index < length){\n    object = object[toKey(path[index++])]\n  }\n  return (index && index === length) ? object : undefined\n}\n","\nconst stringify = require('.')\nconst {StringDecoder} = require('string_decoder')\n\nmodule.exports = function(records, options={}){\n  const data = []\n  if(Buffer.isBuffer(records)){\n    const decoder = new StringDecoder()\n    records = decoder.write(records)\n  }\n  function onData(record){\n    if(record){\n      data.push(record.toString())\n    }\n  }\n  let stringifier = new stringify.Stringifier(options)\n  stringifier.on('data', onData);\n  for(let record of records){\n    stringifier.write(record) \n  }\n  stringifier.end()\n  stringifier.off('data', onData);\n  return data.join('')\n}\n","var accounting = require('accounting')\nvar assign = require('object-assign')\nvar localeCurrency = require('locale-currency')\nvar currencies = require('./currencies.json')\nvar localeFormats = require('./localeFormats.json')\n\nvar defaultCurrency = {\n  symbol: '',\n  thousandsSeparator: ',',\n  decimalSeparator: '.',\n  symbolOnLeft: true,\n  spaceBetweenAmountAndSymbol: false,\n  decimalDigits: 2\n}\n\nvar defaultLocaleFormat = {}\n\nvar formatMapping = [\n  {\n    symbolOnLeft: true,\n    spaceBetweenAmountAndSymbol: false,\n    format: {\n      pos: '%s%v',\n      neg: '-%s%v',\n      zero: '%s%v'\n    }\n  },\n  {\n    symbolOnLeft: true,\n    spaceBetweenAmountAndSymbol: true,\n    format: {\n      pos: '%s %v',\n      neg: '-%s %v',\n      zero: '%s %v'\n    }\n  },\n  {\n    symbolOnLeft: false,\n    spaceBetweenAmountAndSymbol: false,\n    format: {\n      pos: '%v%s',\n      neg: '-%v%s',\n      zero: '%v%s'\n    }\n  },\n  {\n    symbolOnLeft: false,\n    spaceBetweenAmountAndSymbol: true,\n    format: {\n      pos: '%v %s',\n      neg: '-%v %s',\n      zero: '%v %s'\n    }\n  }\n]\n\nfunction format(value, options) {\n  var code = options.code || (options.locale && localeCurrency.getCurrency(options.locale))\n  var localeMatch = /^([a-z]+)([_-]([a-z]+))?$/i.exec(options.locale) || []\n  var language = localeMatch[1]\n  var region = localeMatch[3]\n  var localeFormat = assign({}, defaultLocaleFormat,\n                            localeFormats[language] || {},\n                            localeFormats[language + '-' + region] || {})\n  var currency = assign({}, defaultCurrency, findCurrency(code), localeFormat)\n  \n  var symbolOnLeft = currency.symbolOnLeft\n  var spaceBetweenAmountAndSymbol = currency.spaceBetweenAmountAndSymbol\n\n  var format = formatMapping.filter(function(f) {\n    return f.symbolOnLeft == symbolOnLeft && f.spaceBetweenAmountAndSymbol == spaceBetweenAmountAndSymbol\n  })[0].format\n\n  return accounting.formatMoney(value, {\n    symbol: isUndefined(options.symbol)\n              ? currency.symbol\n              : options.symbol,\n\n    decimal: isUndefined(options.decimal)\n              ? currency.decimalSeparator\n              : options.decimal,\n\n    thousand: isUndefined(options.thousand)\n              ? currency.thousandsSeparator\n              : options.thousand,\n\n    precision: typeof options.precision === 'number'\n              ? options.precision\n              : currency.decimalDigits,\n\n    format: ['string', 'object'].indexOf(typeof options.format) > -1\n              ? options.format\n              : format\n  })\n}\n\nfunction findCurrency (currencyCode) {\n  return currencies[currencyCode]\n}\n\nfunction isUndefined (val) {\n  return typeof val === 'undefined'\n}\n\nfunction unformat(value, options) {\n  var code = options.code || (options.locale && localeCurrency.getCurrency(options.locale))\n  var localeFormat = localeFormats[options.locale] || defaultLocaleFormat\n  var currency = assign({}, defaultCurrency, findCurrency(code), localeFormat)\n  var decimal = isUndefined(options.decimal) ? currency.decimalSeparator : options.decimal\n  return accounting.unformat(value, decimal)\n}\n\nmodule.exports = {\n  defaultCurrency: defaultCurrency,\n  get currencies() {\n    // In favor of backwards compatibility, the currencies map is converted to an array here\n    return Object.keys(currencies).map(function(key) {\n      return currencies[key]\n    })\n  },\n  findCurrency: findCurrency,\n  format: format,\n  unformat: unformat\n}","// TheSpanishInquisition\n\n// Cache the matrix. Note that if you not pass a limit this implementation will use a dynamically calculate one.\n\nmodule.exports = function(__this, that, limit) {\n\n  var thisLength = __this.length,\n      thatLength = that.length,\n      matrix = [];\n\n  // If the limit is not defined it will be calculate from this and that args.\n  limit = (limit || ((thatLength > thisLength ? thatLength : thisLength)))+1;\n\n  for (var i = 0; i < limit; i++) {\n    matrix[i] = [i];\n    matrix[i].length = limit;\n  }\n  for (i = 0; i < limit; i++) {\n    matrix[0][i] = i;\n  }\n\n  if (Math.abs(thisLength - thatLength) > (limit || 100)){\n    return prepare (limit || 100);\n  }\n  if (thisLength === 0){\n    return prepare (thatLength);\n  }\n  if (thatLength === 0){\n    return prepare (thisLength);\n  }\n\n  // Calculate matrix.\n  var j, this_i, that_j, cost, min, t;\n  for (i = 1; i <= thisLength; ++i) {\n    this_i = __this[i-1];\n\n    // Step 4\n    for (j = 1; j <= thatLength; ++j) {\n      // Check the jagged ld total so far\n      if (i === j && matrix[i][j] > 4) return prepare (thisLength);\n\n      that_j = that[j-1];\n      cost = (this_i === that_j) ? 0 : 1; // Step 5\n      // Calculate the minimum (much faster than Math.min(...)).\n      min    = matrix[i - 1][j    ] + 1; // Deletion.\n      if ((t = matrix[i    ][j - 1] + 1   ) < min) min = t;   // Insertion.\n      if ((t = matrix[i - 1][j - 1] + cost) < min) min = t;   // Substitution.\n\n      // Update matrix.\n      matrix[i][j] = (i > 1 && j > 1 && this_i === that[j-2] && __this[i-2] === that_j && (t = matrix[i-2][j-2]+cost) < min) ? t : min; // Transposition.\n    }\n  }\n\n  return prepare (matrix[thisLength][thatLength]);\n\n/**\n *\n */\n  function prepare(steps) {\n    var length = Math.max(thisLength, thatLength)\n    var relative = length === 0\n      ? 0\n      : (steps / length);\n    var similarity = 1 - relative\n    return {\n      steps: steps,\n      relative: relative,\n      similarity: similarity\n    };\n  }\n\n};\n","export default function addLeadingZeros(number, targetLength) {\n  var sign = number < 0 ? '-' : ''\n  var output = Math.abs(number).toString()\n  while (output.length < targetLength) {\n    output = '0' + output\n  }\n  return sign + output\n}\n","export default function assign(target, dirtyObject) {\n  if (target == null) {\n    throw new TypeError(\n      'assign requires that input parameter not be null or undefined'\n    )\n  }\n\n  dirtyObject = dirtyObject || {}\n\n  for (var property in dirtyObject) {\n    if (dirtyObject.hasOwnProperty(property)) {\n      target[property] = dirtyObject[property]\n    }\n  }\n\n  return target\n}\n","import assign from '../assign/index.js'\n\nexport default function cloneObject(dirtyObject) {\n  return assign({}, dirtyObject)\n}\n","import lightFormatters from '../lightFormatters/index.js'\nimport getUTCDayOfYear from '../../../_lib/getUTCDayOfYear/index.js'\nimport getUTCISOWeek from '../../../_lib/getUTCISOWeek/index.js'\nimport getUTCISOWeekYear from '../../../_lib/getUTCISOWeekYear/index.js'\nimport getUTCWeek from '../../../_lib/getUTCWeek/index.js'\nimport getUTCWeekYear from '../../../_lib/getUTCWeekYear/index.js'\nimport addLeadingZeros from '../../addLeadingZeros/index.js'\n\nvar dayPeriodEnum = {\n  am: 'am',\n  pm: 'pm',\n  midnight: 'midnight',\n  noon: 'noon',\n  morning: 'morning',\n  afternoon: 'afternoon',\n  evening: 'evening',\n  night: 'night'\n}\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O  | Timezone (GMT)                 |\n * |  p! | Long localized time            |  P! | Long localized date            |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z  | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nvar formatters = {\n  // Era\n  G: function(date, token, localize) {\n    var era = date.getUTCFullYear() > 0 ? 1 : 0\n    switch (token) {\n      // AD, BC\n      case 'G':\n      case 'GG':\n      case 'GGG':\n        return localize.era(era, { width: 'abbreviated' })\n      // A, B\n      case 'GGGGG':\n        return localize.era(era, { width: 'narrow' })\n      // Anno Domini, Before Christ\n      case 'GGGG':\n      default:\n        return localize.era(era, { width: 'wide' })\n    }\n  },\n\n  // Year\n  y: function(date, token, localize) {\n    // Ordinal number\n    if (token === 'yo') {\n      var signedYear = date.getUTCFullYear()\n      // Returns 1 for 1 BC (which is year 0 in JavaScript)\n      var year = signedYear > 0 ? signedYear : 1 - signedYear\n      return localize.ordinalNumber(year, { unit: 'year' })\n    }\n\n    return lightFormatters.y(date, token)\n  },\n\n  // Local week-numbering year\n  Y: function(date, token, localize, options) {\n    var signedWeekYear = getUTCWeekYear(date, options)\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear\n\n    // Two digit year\n    if (token === 'YY') {\n      var twoDigitYear = weekYear % 100\n      return addLeadingZeros(twoDigitYear, 2)\n    }\n\n    // Ordinal number\n    if (token === 'Yo') {\n      return localize.ordinalNumber(weekYear, { unit: 'year' })\n    }\n\n    // Padding\n    return addLeadingZeros(weekYear, token.length)\n  },\n\n  // ISO week-numbering year\n  R: function(date, token) {\n    var isoWeekYear = getUTCISOWeekYear(date)\n\n    // Padding\n    return addLeadingZeros(isoWeekYear, token.length)\n  },\n\n  // Extended year. This is a single number designating the year of this calendar system.\n  // The main difference between `y` and `u` localizers are B.C. years:\n  // | Year | `y` | `u` |\n  // |------|-----|-----|\n  // | AC 1 |   1 |   1 |\n  // | BC 1 |   1 |   0 |\n  // | BC 2 |   2 |  -1 |\n  // Also `yy` always returns the last two digits of a year,\n  // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n  u: function(date, token) {\n    var year = date.getUTCFullYear()\n    return addLeadingZeros(year, token.length)\n  },\n\n  // Quarter\n  Q: function(date, token, localize) {\n    var quarter = Math.ceil((date.getUTCMonth() + 1) / 3)\n    switch (token) {\n      // 1, 2, 3, 4\n      case 'Q':\n        return String(quarter)\n      // 01, 02, 03, 04\n      case 'QQ':\n        return addLeadingZeros(quarter, 2)\n      // 1st, 2nd, 3rd, 4th\n      case 'Qo':\n        return localize.ordinalNumber(quarter, { unit: 'quarter' })\n      // Q1, Q2, Q3, Q4\n      case 'QQQ':\n        return localize.quarter(quarter, {\n          width: 'abbreviated',\n          context: 'formatting'\n        })\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case 'QQQQQ':\n        return localize.quarter(quarter, {\n          width: 'narrow',\n          context: 'formatting'\n        })\n      // 1st quarter, 2nd quarter, ...\n      case 'QQQQ':\n      default:\n        return localize.quarter(quarter, {\n          width: 'wide',\n          context: 'formatting'\n        })\n    }\n  },\n\n  // Stand-alone quarter\n  q: function(date, token, localize) {\n    var quarter = Math.ceil((date.getUTCMonth() + 1) / 3)\n    switch (token) {\n      // 1, 2, 3, 4\n      case 'q':\n        return String(quarter)\n      // 01, 02, 03, 04\n      case 'qq':\n        return addLeadingZeros(quarter, 2)\n      // 1st, 2nd, 3rd, 4th\n      case 'qo':\n        return localize.ordinalNumber(quarter, { unit: 'quarter' })\n      // Q1, Q2, Q3, Q4\n      case 'qqq':\n        return localize.quarter(quarter, {\n          width: 'abbreviated',\n          context: 'standalone'\n        })\n      // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n      case 'qqqqq':\n        return localize.quarter(quarter, {\n          width: 'narrow',\n          context: 'standalone'\n        })\n      // 1st quarter, 2nd quarter, ...\n      case 'qqqq':\n      default:\n        return localize.quarter(quarter, {\n          width: 'wide',\n          context: 'standalone'\n        })\n    }\n  },\n\n  // Month\n  M: function(date, token, localize) {\n    var month = date.getUTCMonth()\n    switch (token) {\n      case 'M':\n      case 'MM':\n        return lightFormatters.M(date, token)\n      // 1st, 2nd, ..., 12th\n      case 'Mo':\n        return localize.ordinalNumber(month + 1, { unit: 'month' })\n      // Jan, Feb, ..., Dec\n      case 'MMM':\n        return localize.month(month, {\n          width: 'abbreviated',\n          context: 'formatting'\n        })\n      // J, F, ..., D\n      case 'MMMMM':\n        return localize.month(month, { width: 'narrow', context: 'formatting' })\n      // January, February, ..., December\n      case 'MMMM':\n      default:\n        return localize.month(month, { width: 'wide', context: 'formatting' })\n    }\n  },\n\n  // Stand-alone month\n  L: function(date, token, localize) {\n    var month = date.getUTCMonth()\n    switch (token) {\n      // 1, 2, ..., 12\n      case 'L':\n        return String(month + 1)\n      // 01, 02, ..., 12\n      case 'LL':\n        return addLeadingZeros(month + 1, 2)\n      // 1st, 2nd, ..., 12th\n      case 'Lo':\n        return localize.ordinalNumber(month + 1, { unit: 'month' })\n      // Jan, Feb, ..., Dec\n      case 'LLL':\n        return localize.month(month, {\n          width: 'abbreviated',\n          context: 'standalone'\n        })\n      // J, F, ..., D\n      case 'LLLLL':\n        return localize.month(month, { width: 'narrow', context: 'standalone' })\n      // January, February, ..., December\n      case 'LLLL':\n      default:\n        return localize.month(month, { width: 'wide', context: 'standalone' })\n    }\n  },\n\n  // Local week of year\n  w: function(date, token, localize, options) {\n    var week = getUTCWeek(date, options)\n\n    if (token === 'wo') {\n      return localize.ordinalNumber(week, { unit: 'week' })\n    }\n\n    return addLeadingZeros(week, token.length)\n  },\n\n  // ISO week of year\n  I: function(date, token, localize) {\n    var isoWeek = getUTCISOWeek(date)\n\n    if (token === 'Io') {\n      return localize.ordinalNumber(isoWeek, { unit: 'week' })\n    }\n\n    return addLeadingZeros(isoWeek, token.length)\n  },\n\n  // Day of the month\n  d: function(date, token, localize) {\n    if (token === 'do') {\n      return localize.ordinalNumber(date.getUTCDate(), { unit: 'date' })\n    }\n\n    return lightFormatters.d(date, token)\n  },\n\n  // Day of year\n  D: function(date, token, localize) {\n    var dayOfYear = getUTCDayOfYear(date)\n\n    if (token === 'Do') {\n      return localize.ordinalNumber(dayOfYear, { unit: 'dayOfYear' })\n    }\n\n    return addLeadingZeros(dayOfYear, token.length)\n  },\n\n  // Day of week\n  E: function(date, token, localize) {\n    var dayOfWeek = date.getUTCDay()\n    switch (token) {\n      // Tue\n      case 'E':\n      case 'EE':\n      case 'EEE':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'formatting'\n        })\n      // T\n      case 'EEEEE':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'formatting'\n        })\n      // Tu\n      case 'EEEEEE':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'formatting'\n        })\n      // Tuesday\n      case 'EEEE':\n      default:\n        return localize.day(dayOfWeek, { width: 'wide', context: 'formatting' })\n    }\n  },\n\n  // Local day of week\n  e: function(date, token, localize, options) {\n    var dayOfWeek = date.getUTCDay()\n    var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7\n    switch (token) {\n      // Numerical value (Nth day of week with current locale or weekStartsOn)\n      case 'e':\n        return String(localDayOfWeek)\n      // Padded numerical value\n      case 'ee':\n        return addLeadingZeros(localDayOfWeek, 2)\n      // 1st, 2nd, ..., 7th\n      case 'eo':\n        return localize.ordinalNumber(localDayOfWeek, { unit: 'day' })\n      case 'eee':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'formatting'\n        })\n      // T\n      case 'eeeee':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'formatting'\n        })\n      // Tu\n      case 'eeeeee':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'formatting'\n        })\n      // Tuesday\n      case 'eeee':\n      default:\n        return localize.day(dayOfWeek, { width: 'wide', context: 'formatting' })\n    }\n  },\n\n  // Stand-alone local day of week\n  c: function(date, token, localize, options) {\n    var dayOfWeek = date.getUTCDay()\n    var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7\n    switch (token) {\n      // Numerical value (same as in `e`)\n      case 'c':\n        return String(localDayOfWeek)\n      // Padded numerical value\n      case 'cc':\n        return addLeadingZeros(localDayOfWeek, token.length)\n      // 1st, 2nd, ..., 7th\n      case 'co':\n        return localize.ordinalNumber(localDayOfWeek, { unit: 'day' })\n      case 'ccc':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'standalone'\n        })\n      // T\n      case 'ccccc':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'standalone'\n        })\n      // Tu\n      case 'cccccc':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'standalone'\n        })\n      // Tuesday\n      case 'cccc':\n      default:\n        return localize.day(dayOfWeek, { width: 'wide', context: 'standalone' })\n    }\n  },\n\n  // ISO day of week\n  i: function(date, token, localize) {\n    var dayOfWeek = date.getUTCDay()\n    var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek\n    switch (token) {\n      // 2\n      case 'i':\n        return String(isoDayOfWeek)\n      // 02\n      case 'ii':\n        return addLeadingZeros(isoDayOfWeek, token.length)\n      // 2nd\n      case 'io':\n        return localize.ordinalNumber(isoDayOfWeek, { unit: 'day' })\n      // Tue\n      case 'iii':\n        return localize.day(dayOfWeek, {\n          width: 'abbreviated',\n          context: 'formatting'\n        })\n      // T\n      case 'iiiii':\n        return localize.day(dayOfWeek, {\n          width: 'narrow',\n          context: 'formatting'\n        })\n      // Tu\n      case 'iiiiii':\n        return localize.day(dayOfWeek, {\n          width: 'short',\n          context: 'formatting'\n        })\n      // Tuesday\n      case 'iiii':\n      default:\n        return localize.day(dayOfWeek, { width: 'wide', context: 'formatting' })\n    }\n  },\n\n  // AM or PM\n  a: function(date, token, localize) {\n    var hours = date.getUTCHours()\n    var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am'\n\n    switch (token) {\n      case 'a':\n      case 'aa':\n      case 'aaa':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        })\n      case 'aaaaa':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'narrow',\n          context: 'formatting'\n        })\n      case 'aaaa':\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'wide',\n          context: 'formatting'\n        })\n    }\n  },\n\n  // AM, PM, midnight, noon\n  b: function(date, token, localize) {\n    var hours = date.getUTCHours()\n    var dayPeriodEnumValue\n    if (hours === 12) {\n      dayPeriodEnumValue = dayPeriodEnum.noon\n    } else if (hours === 0) {\n      dayPeriodEnumValue = dayPeriodEnum.midnight\n    } else {\n      dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am'\n    }\n\n    switch (token) {\n      case 'b':\n      case 'bb':\n      case 'bbb':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        })\n      case 'bbbbb':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'narrow',\n          context: 'formatting'\n        })\n      case 'bbbb':\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'wide',\n          context: 'formatting'\n        })\n    }\n  },\n\n  // in the morning, in the afternoon, in the evening, at night\n  B: function(date, token, localize) {\n    var hours = date.getUTCHours()\n    var dayPeriodEnumValue\n    if (hours >= 17) {\n      dayPeriodEnumValue = dayPeriodEnum.evening\n    } else if (hours >= 12) {\n      dayPeriodEnumValue = dayPeriodEnum.afternoon\n    } else if (hours >= 4) {\n      dayPeriodEnumValue = dayPeriodEnum.morning\n    } else {\n      dayPeriodEnumValue = dayPeriodEnum.night\n    }\n\n    switch (token) {\n      case 'B':\n      case 'BB':\n      case 'BBB':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'abbreviated',\n          context: 'formatting'\n        })\n      case 'BBBBB':\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'narrow',\n          context: 'formatting'\n        })\n      case 'BBBB':\n      default:\n        return localize.dayPeriod(dayPeriodEnumValue, {\n          width: 'wide',\n          context: 'formatting'\n        })\n    }\n  },\n\n  // Hour [1-12]\n  h: function(date, token, localize) {\n    if (token === 'ho') {\n      var hours = date.getUTCHours() % 12\n      if (hours === 0) hours = 12\n      return localize.ordinalNumber(hours, { unit: 'hour' })\n    }\n\n    return lightFormatters.h(date, token)\n  },\n\n  // Hour [0-23]\n  H: function(date, token, localize) {\n    if (token === 'Ho') {\n      return localize.ordinalNumber(date.getUTCHours(), { unit: 'hour' })\n    }\n\n    return lightFormatters.H(date, token)\n  },\n\n  // Hour [0-11]\n  K: function(date, token, localize) {\n    var hours = date.getUTCHours() % 12\n\n    if (token === 'Ko') {\n      return localize.ordinalNumber(hours, { unit: 'hour' })\n    }\n\n    return addLeadingZeros(hours, token.length)\n  },\n\n  // Hour [1-24]\n  k: function(date, token, localize) {\n    var hours = date.getUTCHours()\n    if (hours === 0) hours = 24\n\n    if (token === 'ko') {\n      return localize.ordinalNumber(hours, { unit: 'hour' })\n    }\n\n    return addLeadingZeros(hours, token.length)\n  },\n\n  // Minute\n  m: function(date, token, localize) {\n    if (token === 'mo') {\n      return localize.ordinalNumber(date.getUTCMinutes(), { unit: 'minute' })\n    }\n\n    return lightFormatters.m(date, token)\n  },\n\n  // Second\n  s: function(date, token, localize) {\n    if (token === 'so') {\n      return localize.ordinalNumber(date.getUTCSeconds(), { unit: 'second' })\n    }\n\n    return lightFormatters.s(date, token)\n  },\n\n  // Fraction of second\n  S: function(date, token) {\n    var numberOfDigits = token.length\n    var milliseconds = date.getUTCMilliseconds()\n    var fractionalSeconds = Math.floor(\n      milliseconds * Math.pow(10, numberOfDigits - 3)\n    )\n    return addLeadingZeros(fractionalSeconds, numberOfDigits)\n  },\n\n  // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n  X: function(date, token, _localize, options) {\n    var originalDate = options._originalDate || date\n    var timezoneOffset = originalDate.getTimezoneOffset()\n\n    if (timezoneOffset === 0) {\n      return 'Z'\n    }\n\n    switch (token) {\n      // Hours and optional minutes\n      case 'X':\n        return formatTimezoneWithOptionalMinutes(timezoneOffset)\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XX`\n      case 'XXXX':\n      case 'XX': // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset)\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `XXX`\n      case 'XXXXX':\n      case 'XXX': // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, ':')\n    }\n  },\n\n  // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n  x: function(date, token, _localize, options) {\n    var originalDate = options._originalDate || date\n    var timezoneOffset = originalDate.getTimezoneOffset()\n\n    switch (token) {\n      // Hours and optional minutes\n      case 'x':\n        return formatTimezoneWithOptionalMinutes(timezoneOffset)\n\n      // Hours, minutes and optional seconds without `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xx`\n      case 'xxxx':\n      case 'xx': // Hours and minutes without `:` delimiter\n        return formatTimezone(timezoneOffset)\n\n      // Hours, minutes and optional seconds with `:` delimiter\n      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n      // so this token always has the same output as `xxx`\n      case 'xxxxx':\n      case 'xxx': // Hours and minutes with `:` delimiter\n      default:\n        return formatTimezone(timezoneOffset, ':')\n    }\n  },\n\n  // Timezone (GMT)\n  O: function(date, token, _localize, options) {\n    var originalDate = options._originalDate || date\n    var timezoneOffset = originalDate.getTimezoneOffset()\n\n    switch (token) {\n      // Short\n      case 'O':\n      case 'OO':\n      case 'OOO':\n        return 'GMT' + formatTimezoneShort(timezoneOffset, ':')\n      // Long\n      case 'OOOO':\n      default:\n        return 'GMT' + formatTimezone(timezoneOffset, ':')\n    }\n  },\n\n  // Timezone (specific non-location)\n  z: function(date, token, _localize, options) {\n    var originalDate = options._originalDate || date\n    var timezoneOffset = originalDate.getTimezoneOffset()\n\n    switch (token) {\n      // Short\n      case 'z':\n      case 'zz':\n      case 'zzz':\n        return 'GMT' + formatTimezoneShort(timezoneOffset, ':')\n      // Long\n      case 'zzzz':\n      default:\n        return 'GMT' + formatTimezone(timezoneOffset, ':')\n    }\n  },\n\n  // Seconds timestamp\n  t: function(date, token, _localize, options) {\n    var originalDate = options._originalDate || date\n    var timestamp = Math.floor(originalDate.getTime() / 1000)\n    return addLeadingZeros(timestamp, token.length)\n  },\n\n  // Milliseconds timestamp\n  T: function(date, token, _localize, options) {\n    var originalDate = options._originalDate || date\n    var timestamp = originalDate.getTime()\n    return addLeadingZeros(timestamp, token.length)\n  }\n}\n\nfunction formatTimezoneShort(offset, dirtyDelimiter) {\n  var sign = offset > 0 ? '-' : '+'\n  var absOffset = Math.abs(offset)\n  var hours = Math.floor(absOffset / 60)\n  var minutes = absOffset % 60\n  if (minutes === 0) {\n    return sign + String(hours)\n  }\n  var delimiter = dirtyDelimiter || ''\n  return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2)\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {\n  if (offset % 60 === 0) {\n    var sign = offset > 0 ? '-' : '+'\n    return sign + addLeadingZeros(Math.abs(offset) / 60, 2)\n  }\n  return formatTimezone(offset, dirtyDelimiter)\n}\n\nfunction formatTimezone(offset, dirtyDelimiter) {\n  var delimiter = dirtyDelimiter || ''\n  var sign = offset > 0 ? '-' : '+'\n  var absOffset = Math.abs(offset)\n  var hours = addLeadingZeros(Math.floor(absOffset / 60), 2)\n  var minutes = addLeadingZeros(absOffset % 60, 2)\n  return sign + hours + delimiter + minutes\n}\n\nexport default formatters\n","import addLeadingZeros from '../../addLeadingZeros/index.js'\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O  | Timezone (GMT)                 |\n * |  p! | Long localized time            |  P! | Long localized date            |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z  | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nvar formatters = {\n  // Year\n  y: function(date, token) {\n    // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n    // | Year     |     y | yy |   yyy |  yyyy | yyyyy |\n    // |----------|-------|----|-------|-------|-------|\n    // | AD 1     |     1 | 01 |   001 |  0001 | 00001 |\n    // | AD 12    |    12 | 12 |   012 |  0012 | 00012 |\n    // | AD 123   |   123 | 23 |   123 |  0123 | 00123 |\n    // | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |\n    // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n    var signedYear = date.getUTCFullYear()\n    // Returns 1 for 1 BC (which is year 0 in JavaScript)\n    var year = signedYear > 0 ? signedYear : 1 - signedYear\n    return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length)\n  },\n\n  // Month\n  M: function(date, token) {\n    var month = date.getUTCMonth()\n    return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2)\n  },\n\n  // Day of the month\n  d: function(date, token) {\n    return addLeadingZeros(date.getUTCDate(), token.length)\n  },\n\n  // AM or PM\n  a: function(date, token) {\n    var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am'\n\n    switch (token) {\n      case 'a':\n      case 'aa':\n      case 'aaa':\n        return dayPeriodEnumValue.toUpperCase()\n      case 'aaaaa':\n        return dayPeriodEnumValue[0]\n      case 'aaaa':\n      default:\n        return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.'\n    }\n  },\n\n  // Hour [1-12]\n  h: function(date, token) {\n    return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length)\n  },\n\n  // Hour [0-23]\n  H: function(date, token) {\n    return addLeadingZeros(date.getUTCHours(), token.length)\n  },\n\n  // Minute\n  m: function(date, token) {\n    return addLeadingZeros(date.getUTCMinutes(), token.length)\n  },\n\n  // Second\n  s: function(date, token) {\n    return addLeadingZeros(date.getUTCSeconds(), token.length)\n  }\n}\n\nexport default formatters\n","function dateLongFormatter(pattern, formatLong) {\n  switch (pattern) {\n    case 'P':\n      return formatLong.date({ width: 'short' })\n    case 'PP':\n      return formatLong.date({ width: 'medium' })\n    case 'PPP':\n      return formatLong.date({ width: 'long' })\n    case 'PPPP':\n    default:\n      return formatLong.date({ width: 'full' })\n  }\n}\n\nfunction timeLongFormatter(pattern, formatLong) {\n  switch (pattern) {\n    case 'p':\n      return formatLong.time({ width: 'short' })\n    case 'pp':\n      return formatLong.time({ width: 'medium' })\n    case 'ppp':\n      return formatLong.time({ width: 'long' })\n    case 'pppp':\n    default:\n      return formatLong.time({ width: 'full' })\n  }\n}\n\nfunction dateTimeLongFormatter(pattern, formatLong) {\n  var matchResult = pattern.match(/(P+)(p+)?/)\n  var datePattern = matchResult[1]\n  var timePattern = matchResult[2]\n\n  if (!timePattern) {\n    return dateLongFormatter(pattern, formatLong)\n  }\n\n  var dateTimeFormat\n\n  switch (datePattern) {\n    case 'P':\n      dateTimeFormat = formatLong.dateTime({ width: 'short' })\n      break\n    case 'PP':\n      dateTimeFormat = formatLong.dateTime({ width: 'medium' })\n      break\n    case 'PPP':\n      dateTimeFormat = formatLong.dateTime({ width: 'long' })\n      break\n    case 'PPPP':\n    default:\n      dateTimeFormat = formatLong.dateTime({ width: 'full' })\n      break\n  }\n\n  return dateTimeFormat\n    .replace('{{date}}', dateLongFormatter(datePattern, formatLong))\n    .replace('{{time}}', timeLongFormatter(timePattern, formatLong))\n}\n\nvar longFormatters = {\n  p: timeLongFormatter,\n  P: dateTimeLongFormatter\n}\n\nexport default longFormatters\n","var MILLISECONDS_IN_MINUTE = 60000\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport default function getTimezoneOffsetInMilliseconds (dirtyDate) {\n  var date = new Date(dirtyDate.getTime())\n  var baseTimezoneOffset = date.getTimezoneOffset()\n  date.setSeconds(0, 0)\n  var millisecondsPartOfTimezoneOffset = date.getTime() % MILLISECONDS_IN_MINUTE\n\n  return baseTimezoneOffset * MILLISECONDS_IN_MINUTE + millisecondsPartOfTimezoneOffset\n}\n","import toDate from '../../toDate/index.js'\n\nvar MILLISECONDS_IN_DAY = 86400000\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function getUTCDayOfYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var timestamp = date.getTime()\n  date.setUTCMonth(0, 1)\n  date.setUTCHours(0, 0, 0, 0)\n  var startOfYearTimestamp = date.getTime()\n  var difference = timestamp - startOfYearTimestamp\n  return Math.floor(difference / MILLISECONDS_IN_DAY) + 1\n}\n","import toDate from '../../toDate/index.js'\nimport startOfUTCISOWeek from '../startOfUTCISOWeek/index.js'\nimport startOfUTCISOWeekYear from '../startOfUTCISOWeekYear/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function getUTCISOWeek(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var diff =\n    startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime()\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1\n}\n","import toDate from '../../toDate/index.js'\nimport startOfUTCISOWeek from '../startOfUTCISOWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function getUTCISOWeekYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getUTCFullYear()\n\n  var fourthOfJanuaryOfNextYear = new Date(0)\n  fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4)\n  fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0)\n  var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear)\n\n  var fourthOfJanuaryOfThisYear = new Date(0)\n  fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4)\n  fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0)\n  var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear)\n\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year\n  } else {\n    return year - 1\n  }\n}\n","import toDate from '../../toDate/index.js'\nimport startOfUTCWeek from '../startOfUTCWeek/index.js'\nimport startOfUTCWeekYear from '../startOfUTCWeekYear/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function getUTCWeek(dirtyDate, options) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var diff =\n    startOfUTCWeek(date, options).getTime() -\n    startOfUTCWeekYear(date, options).getTime()\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\nimport startOfUTCWeek from '../startOfUTCWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function getUTCWeekYear (dirtyDate, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError('1 argument required, but only ' + arguments.length + ' present')\n  }\n\n  var date = toDate(dirtyDate, dirtyOptions)\n  var year = date.getUTCFullYear()\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeFirstWeekContainsDate = locale &&\n    locale.options &&\n    locale.options.firstWeekContainsDate\n  var defaultFirstWeekContainsDate =\n    localeFirstWeekContainsDate == null\n      ? 1\n      : toInteger(localeFirstWeekContainsDate)\n  var firstWeekContainsDate =\n    options.firstWeekContainsDate == null\n      ? defaultFirstWeekContainsDate\n      : toInteger(options.firstWeekContainsDate)\n\n  // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively')\n  }\n\n  var firstWeekOfNextYear = new Date(0)\n  firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate)\n  firstWeekOfNextYear.setUTCHours(0, 0, 0, 0)\n  var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, dirtyOptions)\n\n  var firstWeekOfThisYear = new Date(0)\n  firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate)\n  firstWeekOfThisYear.setUTCHours(0, 0, 0, 0)\n  var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, dirtyOptions)\n\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year\n  } else {\n    return year - 1\n  }\n}\n","export var protectedTokens = ['D', 'DD', 'YY', 'YYYY']\n\nexport function isProtectedToken(token) {\n  return protectedTokens.indexOf(token) !== -1\n}\n\nexport function throwProtectedError(token) {\n  throw new RangeError(\n    '`options.awareOfUnicodeTokens` must be set to `true` to use `' +\n      token +\n      '` token; see: https://git.io/fxCyr'\n  )\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function setUTCDay(dirtyDate, dirtyDay, dirtyOptions) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeWeekStartsOn =\n    locale && locale.options && locale.options.weekStartsOn\n  var defaultWeekStartsOn =\n    localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n  var weekStartsOn =\n    options.weekStartsOn == null\n      ? defaultWeekStartsOn\n      : toInteger(options.weekStartsOn)\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n  }\n\n  var date = toDate(dirtyDate)\n  var day = toInteger(dirtyDay)\n\n  var currentDay = date.getUTCDay()\n\n  var remainder = day % 7\n  var dayIndex = (remainder + 7) % 7\n\n  var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay\n\n  date.setUTCDate(date.getUTCDate() + diff)\n  return date\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function setUTCISODay(dirtyDate, dirtyDay) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var day = toInteger(dirtyDay)\n\n  if (day % 7 === 0) {\n    day = day - 7\n  }\n\n  var weekStartsOn = 1\n  var date = toDate(dirtyDate)\n  var currentDay = date.getUTCDay()\n\n  var remainder = day % 7\n  var dayIndex = (remainder + 7) % 7\n\n  var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay\n\n  date.setUTCDate(date.getUTCDate() + diff)\n  return date\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\nimport getUTCISOWeek from '../getUTCISOWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function setUTCISOWeek(dirtyDate, dirtyISOWeek) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var isoWeek = toInteger(dirtyISOWeek)\n  var diff = getUTCISOWeek(date) - isoWeek\n  date.setUTCDate(date.getUTCDate() - diff * 7)\n  return date\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\nimport getUTCWeek from '../getUTCWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function setUTCWeek(dirtyDate, dirtyWeek, options) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var week = toInteger(dirtyWeek)\n  var diff = getUTCWeek(date, options) - week\n  date.setUTCDate(date.getUTCDate() - diff * 7)\n  return date\n}\n","import toDate from '../../toDate/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function startOfUTCISOWeek(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var weekStartsOn = 1\n\n  var date = toDate(dirtyDate)\n  var day = date.getUTCDay()\n  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn\n\n  date.setUTCDate(date.getUTCDate() - diff)\n  date.setUTCHours(0, 0, 0, 0)\n  return date\n}\n","import getUTCISOWeekYear from '../getUTCISOWeekYear/index.js'\nimport startOfUTCISOWeek from '../startOfUTCISOWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function startOfUTCISOWeekYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var year = getUTCISOWeekYear(dirtyDate)\n  var fourthOfJanuary = new Date(0)\n  fourthOfJanuary.setUTCFullYear(year, 0, 4)\n  fourthOfJanuary.setUTCHours(0, 0, 0, 0)\n  var date = startOfUTCISOWeek(fourthOfJanuary)\n  return date\n}\n","import toInteger from '../toInteger/index.js'\nimport toDate from '../../toDate/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function startOfUTCWeek(dirtyDate, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeWeekStartsOn =\n    locale && locale.options && locale.options.weekStartsOn\n  var defaultWeekStartsOn =\n    localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n  var weekStartsOn =\n    options.weekStartsOn == null\n      ? defaultWeekStartsOn\n      : toInteger(options.weekStartsOn)\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n  }\n\n  var date = toDate(dirtyDate)\n  var day = date.getUTCDay()\n  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn\n\n  date.setUTCDate(date.getUTCDate() - diff)\n  date.setUTCHours(0, 0, 0, 0)\n  return date\n}\n","import toInteger from '../toInteger/index.js'\nimport getUTCWeekYear from '../getUTCWeekYear/index.js'\nimport startOfUTCWeek from '../startOfUTCWeek/index.js'\n\n// This function will be a part of public API when UTC function will be implemented.\n// See issue: https://github.com/date-fns/date-fns/issues/376\nexport default function startOfUTCWeekYear (dirtyDate, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError('1 argument required, but only ' + arguments.length + ' present')\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeFirstWeekContainsDate = locale &&\n    locale.options &&\n    locale.options.firstWeekContainsDate\n  var defaultFirstWeekContainsDate =\n    localeFirstWeekContainsDate == null\n      ? 1\n      : toInteger(localeFirstWeekContainsDate)\n  var firstWeekContainsDate =\n    options.firstWeekContainsDate == null\n      ? defaultFirstWeekContainsDate\n      : toInteger(options.firstWeekContainsDate)\n\n  var year = getUTCWeekYear(dirtyDate, dirtyOptions)\n  var firstWeek = new Date(0)\n  firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate)\n  firstWeek.setUTCHours(0, 0, 0, 0)\n  var date = startOfUTCWeek(firstWeek, dirtyOptions)\n  return date\n}\n","export default function toInteger (dirtyNumber) {\n  if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {\n    return NaN\n  }\n\n  var number = Number(dirtyNumber)\n\n  if (isNaN(number)) {\n    return number\n  }\n\n  return number < 0 ? Math.ceil(number) : Math.floor(number)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name addDays\n * @category Day Helpers\n * @summary Add the specified number of days to the given date.\n *\n * @description\n * Add the specified number of days to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be added\n * @returns {Date} the new date with the days added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 10 days to 1 September 2014:\n * var result = addDays(new Date(2014, 8, 1), 10)\n * //=> Thu Sep 11 2014 00:00:00\n */\nexport default function addDays(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var amount = toInteger(dirtyAmount)\n  date.setDate(date.getDate() + amount)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMilliseconds from '../addMilliseconds/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\n\n/**\n * @name addHours\n * @category Hour Helpers\n * @summary Add the specified number of hours to the given date.\n *\n * @description\n * Add the specified number of hours to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of hours to be added\n * @returns {Date} the new date with the hours added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 2 hours to 10 July 2014 23:00:00:\n * var result = addHours(new Date(2014, 6, 10, 23, 0), 2)\n * //=> Fri Jul 11 2014 01:00:00\n */\nexport default function addHours(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_HOUR)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport getISOWeekYear from '../getISOWeekYear/index.js'\nimport setISOWeekYear from '../setISOWeekYear/index.js'\n\n/**\n * @name addISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Add the specified number of ISO week-numbering years to the given date.\n *\n * @description\n * Add the specified number of ISO week-numbering years to the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `addISOYears` to `addISOWeekYears`.\n *   \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n *   This change makes the name consistent with\n *   locale-dependent week-numbering year helpers, e.g., `addWeekYears`.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of ISO week-numbering years to be added\n * @returns {Date} the new date with the ISO week-numbering years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 ISO week-numbering years to 2 July 2010:\n * var result = addISOWeekYears(new Date(2010, 6, 2), 5)\n * //=> Fri Jun 26 2015 00:00:00\n */\nexport default function addISOWeekYears(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return setISOWeekYear(dirtyDate, getISOWeekYear(dirtyDate) + amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name addMilliseconds\n * @category Millisecond Helpers\n * @summary Add the specified number of milliseconds to the given date.\n *\n * @description\n * Add the specified number of milliseconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be added\n * @returns {Date} the new date with the milliseconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 750 milliseconds to 10 July 2014 12:45:30.000:\n * var result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:30.750\n */\nexport default function addMilliseconds(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var timestamp = toDate(dirtyDate).getTime()\n  var amount = toInteger(dirtyAmount)\n  return new Date(timestamp + amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMilliseconds from '../addMilliseconds/index.js'\n\nvar MILLISECONDS_IN_MINUTE = 60000\n\n/**\n * @name addMinutes\n * @category Minute Helpers\n * @summary Add the specified number of minutes to the given date.\n *\n * @description\n * Add the specified number of minutes to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of minutes to be added\n * @returns {Date} the new date with the minutes added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 30 minutes to 10 July 2014 12:00:00:\n * var result = addMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 12:30:00\n */\nexport default function addMinutes(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addMilliseconds(dirtyDate, amount * MILLISECONDS_IN_MINUTE)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport getDaysInMonth from '../getDaysInMonth/index.js'\n\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be added\n * @returns {Date} the new date with the months added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * var result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n */\nexport default function addMonths(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var amount = toInteger(dirtyAmount)\n  var desiredMonth = date.getMonth() + amount\n  var dateWithDesiredMonth = new Date(0)\n  dateWithDesiredMonth.setFullYear(date.getFullYear(), desiredMonth, 1)\n  dateWithDesiredMonth.setHours(0, 0, 0, 0)\n  var daysInMonth = getDaysInMonth(dateWithDesiredMonth)\n  // Set the last day of the new month\n  // if the original date was the last day of the longer month\n  date.setMonth(desiredMonth, Math.min(daysInMonth, date.getDate()))\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMonths from '../addMonths/index.js'\n\n/**\n * @name addQuarters\n * @category Quarter Helpers\n * @summary Add the specified number of year quarters to the given date.\n *\n * @description\n * Add the specified number of year quarters to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of quarters to be added\n * @returns {Date} the new date with the quarters added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 1 quarter to 1 September 2014:\n * var result = addQuarters(new Date(2014, 8, 1), 1)\n * //=> Mon Dec 01 2014 00:00:00\n */\nexport default function addQuarters(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  var months = amount * 3\n  return addMonths(dirtyDate, months)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMilliseconds from '../addMilliseconds/index.js'\n\n/**\n * @name addSeconds\n * @category Second Helpers\n * @summary Add the specified number of seconds to the given date.\n *\n * @description\n * Add the specified number of seconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of seconds to be added\n * @returns {Date} the new date with the seconds added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 30 seconds to 10 July 2014 12:45:00:\n * var result = addSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:45:30\n */\nexport default function addSeconds(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addMilliseconds(dirtyDate, amount * 1000)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addDays from '../addDays/index.js'\n\n/**\n * @name addWeeks\n * @category Week Helpers\n * @summary Add the specified number of weeks to the given date.\n *\n * @description\n * Add the specified number of week to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of weeks to be added\n * @returns {Date} the new date with the weeks added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 4 weeks to 1 September 2014:\n * var result = addWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Sep 29 2014 00:00:00\n */\nexport default function addWeeks(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  var days = amount * 7\n  return addDays(dirtyDate, days)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMonths from '../addMonths/index.js'\n\n/**\n * @name addYears\n * @category Year Helpers\n * @summary Add the specified number of years to the given date.\n *\n * @description\n * Add the specified number of years to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be added\n * @returns {Date} the new date with the years added\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Add 5 years to 1 September 2014:\n * var result = addYears(new Date(2014, 8, 1), 5)\n * //=> Sun Sep 01 2019 00:00:00\n */\nexport default function addYears(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addMonths(dirtyDate, amount * 12)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name areIntervalsOverlapping\n * @category Interval Helpers\n * @summary Is the given time interval overlapping with another time interval?\n *\n * @description\n * Is the given time interval overlapping with another time interval?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `areRangesOverlapping` to `areIntervalsOverlapping`.\n *   This change was made to mirror the use of the word \"interval\" in standard ISO 8601:2004 terminology:\n *\n *   ```\n *   2.1.3\n *   time interval\n *   part of the time axis limited by two instants\n *   ```\n *\n *   Also, this function now accepts an object with `start` and `end` properties\n *   instead of two arguments as an interval.\n *   This function now throws `RangeError` if the start of the interval is after its end\n *   or if any date in the interval is `Invalid Date`.\n *\n *   ```javascript\n *   // Before v2.0.0\n *\n *   areRangesOverlapping(\n *     new Date(2014, 0, 10), new Date(2014, 0, 20),\n *     new Date(2014, 0, 17), new Date(2014, 0, 21)\n *   )\n *\n *   // v2.0.0 onward\n *\n *   areIntervalsOverlapping(\n *     { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *     { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }\n *   )\n *   ```\n *\n * @param {Interval} intervalLeft - the first interval to compare. See [Interval]{@link docs/types/Interval}\n * @param {Interval} intervalRight - the second interval to compare. See [Interval]{@link docs/types/Interval}\n * @returns {Boolean} whether the time intervals are overlapping\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For overlapping time intervals:\n * areIntervalsOverlapping(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }\n * )\n * //=> true\n *\n * @example\n * // For non-overlapping time intervals:\n * areIntervalsOverlapping(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 21), end: new Date(2014, 0, 22) }\n * )\n * //=> false\n */\nexport default function areIntervalsOverlapping(\n  dirtyIntervalLeft,\n  dirtyIntervalRight\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var intervalLeft = dirtyIntervalLeft || {}\n  var intervalRight = dirtyIntervalRight || {}\n  var leftStartTime = toDate(intervalLeft.start).getTime()\n  var leftEndTime = toDate(intervalLeft.end).getTime()\n  var rightStartTime = toDate(intervalRight.start).getTime()\n  var rightEndTime = toDate(intervalRight.end).getTime()\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(leftStartTime <= leftEndTime && rightStartTime <= rightEndTime)) {\n    throw new RangeError('Invalid interval')\n  }\n\n  return leftStartTime < rightEndTime && rightStartTime < leftEndTime\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name closestIndexTo\n * @category Common Helpers\n * @summary Return an index of the closest date from the array comparing to the given date.\n *\n * @description\n * Return an index of the closest date from the array comparing to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now, `closestIndexTo` doesn't throw an exception\n *   when the second argument is not an array, and returns Invalid Date instead.\n *\n * @param {Date|Number} dateToCompare - the date to compare with\n * @param {Date[]|Number[]} datesArray - the array to search\n * @returns {Number} an index of the date closest to the given date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Which date is closer to 6 September 2015?\n * var dateToCompare = new Date(2015, 8, 6)\n * var datesArray = [\n *   new Date(2015, 0, 1),\n *   new Date(2016, 0, 1),\n *   new Date(2017, 0, 1)\n * ]\n * var result = closestIndexTo(dateToCompare, datesArray)\n * //=> 1\n */\nexport default function closestIndexTo(dirtyDateToCompare, dirtyDatesArray) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateToCompare = toDate(dirtyDateToCompare)\n\n  if (isNaN(dateToCompare)) {\n    return NaN\n  }\n\n  var timeToCompare = dateToCompare.getTime()\n\n  var datesArray\n  // `dirtyDatesArray` is undefined or null\n  if (dirtyDatesArray == null) {\n    datesArray = []\n\n    // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n  } else if (typeof dirtyDatesArray.forEach === 'function') {\n    datesArray = dirtyDatesArray\n\n    // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array\n  } else {\n    datesArray = Array.prototype.slice.call(dirtyDatesArray)\n  }\n\n  var result\n  var minDistance\n  datesArray.forEach(function(dirtyDate, index) {\n    var currentDate = toDate(dirtyDate)\n\n    if (isNaN(currentDate)) {\n      result = NaN\n      minDistance = NaN\n      return\n    }\n\n    var distance = Math.abs(timeToCompare - currentDate.getTime())\n    if (result == null || distance < minDistance) {\n      result = index\n      minDistance = distance\n    }\n  })\n\n  return result\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name closestTo\n * @category Common Helpers\n * @summary Return a date from the array closest to the given date.\n *\n * @description\n * Return a date from the array closest to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now, `closestTo` doesn't throw an exception\n *   when the second argument is not an array, and returns Invalid Date instead.\n *\n * @param {Date|Number} dateToCompare - the date to compare with\n * @param {Date[]|Number[]} datesArray - the array to search\n * @returns {Date} the date from the array closest to the given date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Which date is closer to 6 September 2015: 1 January 2000 or 1 January 2030?\n * var dateToCompare = new Date(2015, 8, 6)\n * var result = closestTo(dateToCompare, [\n *   new Date(2000, 0, 1),\n *   new Date(2030, 0, 1)\n * ])\n * //=> Tue Jan 01 2030 00:00:00\n */\nexport default function closestTo(dirtyDateToCompare, dirtyDatesArray) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateToCompare = toDate(dirtyDateToCompare)\n\n  if (isNaN(dateToCompare)) {\n    return new Date(NaN)\n  }\n\n  var timeToCompare = dateToCompare.getTime()\n\n  var datesArray\n  // `dirtyDatesArray` is undefined or null\n  if (dirtyDatesArray == null) {\n    datesArray = []\n\n    // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n  } else if (typeof dirtyDatesArray.forEach === 'function') {\n    datesArray = dirtyDatesArray\n\n    // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array\n  } else {\n    datesArray = Array.prototype.slice.call(dirtyDatesArray)\n  }\n\n  var result\n  var minDistance\n  datesArray.forEach(function(dirtyDate) {\n    var currentDate = toDate(dirtyDate)\n\n    if (isNaN(currentDate)) {\n      result = new Date(NaN)\n      minDistance = NaN\n      return\n    }\n\n    var distance = Math.abs(timeToCompare - currentDate.getTime())\n    if (result == null || distance < minDistance) {\n      result = currentDate\n      minDistance = distance\n    }\n  })\n\n  return result\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name compareAsc\n * @category Common Helpers\n * @summary Compare the two dates and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return 1 if the first date is after the second,\n * -1 if the first date is before the second or 0 if dates are equal.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989:\n * var result = compareAsc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> -1\n *\n * @example\n * // Sort the array of dates:\n * var result = [\n *   new Date(1995, 6, 2),\n *   new Date(1987, 1, 11),\n *   new Date(1989, 6, 10)\n * ].sort(compareAsc)\n * //=> [\n * //   Wed Feb 11 1987 00:00:00,\n * //   Mon Jul 10 1989 00:00:00,\n * //   Sun Jul 02 1995 00:00:00\n * // ]\n */\nexport default function compareAsc(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n\n  var diff = dateLeft.getTime() - dateRight.getTime()\n\n  if (diff < 0) {\n    return -1\n  } else if (diff > 0) {\n    return 1\n    // Return 0 if diff is 0; return NaN if diff is NaN\n  } else {\n    return diff\n  }\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name compareDesc\n * @category Common Helpers\n * @summary Compare the two dates reverse chronologically and return -1, 0 or 1.\n *\n * @description\n * Compare the two dates and return -1 if the first date is after the second,\n * 1 if the first date is before the second or 0 if dates are equal.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Number} the result of the comparison\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Compare 11 February 1987 and 10 July 1989 reverse chronologically:\n * var result = compareDesc(new Date(1987, 1, 11), new Date(1989, 6, 10))\n * //=> 1\n *\n * @example\n * // Sort the array of dates in reverse chronological order:\n * var result = [\n *   new Date(1995, 6, 2),\n *   new Date(1987, 1, 11),\n *   new Date(1989, 6, 10)\n * ].sort(compareDesc)\n * //=> [\n * //   Sun Jul 02 1995 00:00:00,\n * //   Mon Jul 10 1989 00:00:00,\n * //   Wed Feb 11 1987 00:00:00\n * // ]\n */\nexport default function compareDesc(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n\n  var diff = dateLeft.getTime() - dateRight.getTime()\n\n  if (diff > 0) {\n    return -1\n  } else if (diff < 0) {\n    return 1\n    // Return 0 if diff is 0; return NaN if diff is NaN\n  } else {\n    return diff\n  }\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport startOfDay from '../startOfDay/index.js'\n\nvar MILLISECONDS_IN_DAY = 86400000\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar days\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * var result = differenceInCalendarDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * var result = differenceInCalendarDays(\n *   new Date(2011, 6, 2, 0, 1),\n *   new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport default function differenceInCalendarDays(\n  dirtyDateLeft,\n  dirtyDateRight\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var startOfDayLeft = startOfDay(dirtyDateLeft)\n  var startOfDayRight = startOfDay(dirtyDateRight)\n\n  var timestampLeft =\n    startOfDayLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfDayLeft)\n  var timestampRight =\n    startOfDayRight.getTime() - getTimezoneOffsetInMilliseconds(startOfDayRight)\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a day is not constant\n  // (e.g. it's different in the day of the daylight saving time clock shift)\n  return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_DAY)\n}\n","import getISOWeekYear from '../getISOWeekYear/index.js'\n\n/**\n * @name differenceInCalendarISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the number of calendar ISO week-numbering years between the given dates.\n *\n * @description\n * Get the number of calendar ISO week-numbering years between the given dates.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `differenceInCalendarISOYears` to `differenceInCalendarISOWeekYears`.\n *   \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n *   This change makes the name consistent with\n *   locale-dependent week-numbering year helpers, e.g., `addWeekYears`.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar ISO week-numbering years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar ISO week-numbering years are 1 January 2010 and 1 January 2012?\n * var result = differenceInCalendarISOWeekYears(\n *   new Date(2012, 0, 1),\n *   new Date(2010, 0, 1)\n * )\n * //=> 2\n */\nexport default function differenceInCalendarISOWeekYears(\n  dirtyDateLeft,\n  dirtyDateRight\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return getISOWeekYear(dirtyDateLeft) - getISOWeekYear(dirtyDateRight)\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @name differenceInCalendarISOWeeks\n * @category ISO Week Helpers\n * @summary Get the number of calendar ISO weeks between the given dates.\n *\n * @description\n * Get the number of calendar ISO weeks between the given dates.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar ISO weeks\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar ISO weeks are between 6 July 2014 and 21 July 2014?\n * var result = differenceInCalendarISOWeeks(\n *   new Date(2014, 6, 21),\n *   new Date(2014, 6, 6)\n * )\n * //=> 3\n */\nexport default function differenceInCalendarISOWeeks(\n  dirtyDateLeft,\n  dirtyDateRight\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var startOfISOWeekLeft = startOfISOWeek(dirtyDateLeft)\n  var startOfISOWeekRight = startOfISOWeek(dirtyDateRight)\n\n  var timestampLeft =\n    startOfISOWeekLeft.getTime() -\n    getTimezoneOffsetInMilliseconds(startOfISOWeekLeft)\n  var timestampRight =\n    startOfISOWeekRight.getTime() -\n    getTimezoneOffsetInMilliseconds(startOfISOWeekRight)\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name differenceInCalendarMonths\n * @category Month Helpers\n * @summary Get the number of calendar months between the given dates.\n *\n * @description\n * Get the number of calendar months between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar months are between 31 January 2014 and 1 September 2014?\n * var result = differenceInCalendarMonths(\n *   new Date(2014, 8, 1),\n *   new Date(2014, 0, 31)\n * )\n * //=> 8\n */\nexport default function differenceInCalendarMonths(\n  dirtyDateLeft,\n  dirtyDateRight\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n\n  var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear()\n  var monthDiff = dateLeft.getMonth() - dateRight.getMonth()\n\n  return yearDiff * 12 + monthDiff\n}\n","import getQuarter from '../getQuarter/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name differenceInCalendarQuarters\n * @category Quarter Helpers\n * @summary Get the number of calendar quarters between the given dates.\n *\n * @description\n * Get the number of calendar quarters between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar quarters\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar quarters are between 31 December 2013 and 2 July 2014?\n * var result = differenceInCalendarQuarters(\n *   new Date(2014, 6, 2),\n *   new Date(2013, 11, 31)\n * )\n * //=> 3\n */\nexport default function differenceInCalendarQuarters(\n  dirtyDateLeft,\n  dirtyDateRight\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n\n  var yearDiff = dateLeft.getFullYear() - dateRight.getFullYear()\n  var quarterDiff = getQuarter(dateLeft) - getQuarter(dateRight)\n\n  return yearDiff * 4 + quarterDiff\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport startOfWeek from '../startOfWeek/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @name differenceInCalendarWeeks\n * @category Week Helpers\n * @summary Get the number of calendar weeks between the given dates.\n *\n * @description\n * Get the number of calendar weeks between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Number} the number of calendar weeks\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // How many calendar weeks are between 5 July 2014 and 20 July 2014?\n * var result = differenceInCalendarWeeks(\n *   new Date(2014, 6, 20),\n *   new Date(2014, 6, 5)\n * )\n * //=> 3\n *\n * @example\n * // If the week starts on Monday,\n * // how many calendar weeks are between 5 July 2014 and 20 July 2014?\n * var result = differenceInCalendarWeeks(\n *   new Date(2014, 6, 20),\n *   new Date(2014, 6, 5),\n *   { weekStartsOn: 1 }\n * )\n * //=> 2\n */\nexport default function differenceInCalendarWeeks(\n  dirtyDateLeft,\n  dirtyDateRight,\n  dirtyOptions\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var startOfWeekLeft = startOfWeek(dirtyDateLeft, dirtyOptions)\n  var startOfWeekRight = startOfWeek(dirtyDateRight, dirtyOptions)\n\n  var timestampLeft =\n    startOfWeekLeft.getTime() - getTimezoneOffsetInMilliseconds(startOfWeekLeft)\n  var timestampRight =\n    startOfWeekRight.getTime() -\n    getTimezoneOffsetInMilliseconds(startOfWeekRight)\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round((timestampLeft - timestampRight) / MILLISECONDS_IN_WEEK)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name differenceInCalendarYears\n * @category Year Helpers\n * @summary Get the number of calendar years between the given dates.\n *\n * @description\n * Get the number of calendar years between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of calendar years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many calendar years are between 31 December 2013 and 11 February 2015?\n * var result = differenceInCalendarYears(\n *   new Date(2015, 1, 11),\n *   new Date(2013, 11, 31)\n * )\n * //=> 2\n */\nexport default function differenceInCalendarYears(\n  dirtyDateLeft,\n  dirtyDateRight\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n\n  return dateLeft.getFullYear() - dateRight.getFullYear()\n}\n","import toDate from '../toDate/index.js'\nimport differenceInCalendarDays from '../differenceInCalendarDays/index.js'\nimport compareAsc from '../compareAsc/index.js'\n\n/**\n * @name differenceInDays\n * @category Day Helpers\n * @summary Get the number of full days between the given dates.\n *\n * @description\n * Get the number of full day periods between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full days\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * var result = differenceInDays(\n *   new Date(2012, 6, 2, 0, 0),\n *   new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 365\n * // How many days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * var result = differenceInDays(\n *   new Date(2011, 6, 2, 0, 1),\n *   new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 0\n */\nexport default function differenceInDays(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n\n  var sign = compareAsc(dateLeft, dateRight)\n  var difference = Math.abs(differenceInCalendarDays(dateLeft, dateRight))\n\n  dateLeft.setDate(dateLeft.getDate() - sign * difference)\n\n  // Math.abs(diff in full days - diff in calendar days) === 1 if last calendar day is not full\n  // If so, result must be decreased by 1 in absolute value\n  var isLastDayNotFull = compareAsc(dateLeft, dateRight) === -sign\n  var result = sign * (difference - isLastDayNotFull)\n  // Prevent negative zero\n  return result === 0 ? 0 : result\n}\n","import differenceInMilliseconds from '../differenceInMilliseconds/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\n\n/**\n * @name differenceInHours\n * @category Hour Helpers\n * @summary Get the number of hours between the given dates.\n *\n * @description\n * Get the number of hours between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of hours\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many hours are between 2 July 2014 06:50:00 and 2 July 2014 19:00:00?\n * var result = differenceInHours(\n *   new Date(2014, 6, 2, 19, 0),\n *   new Date(2014, 6, 2, 6, 50)\n * )\n * //=> 12\n */\nexport default function differenceInHours(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var diff =\n    differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) /\n    MILLISECONDS_IN_HOUR\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n","import toDate from '../toDate/index.js'\nimport differenceInCalendarISOWeekYears from '../differenceInCalendarISOWeekYears/index.js'\nimport compareAsc from '../compareAsc/index.js'\nimport subISOWeekYears from '../subISOWeekYears/index.js'\n\n/**\n * @name differenceInISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the number of full ISO week-numbering years between the given dates.\n *\n * @description\n * Get the number of full ISO week-numbering years between the given dates.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `differenceInISOYears` to `differenceInISOWeekYears`.\n *   \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n *   This change makes the name consistent with\n *   locale-dependent week-numbering year helpers, e.g., `addWeekYears`.\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full ISO week-numbering years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full ISO week-numbering years are between 1 January 2010 and 1 January 2012?\n * var result = differenceInISOWeekYears(\n *   new Date(2012, 0, 1),\n *   new Date(2010, 0, 1)\n * )\n * //=> 1\n */\nexport default function differenceInISOWeekYears(\n  dirtyDateLeft,\n  dirtyDateRight\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n\n  var sign = compareAsc(dateLeft, dateRight)\n  var difference = Math.abs(\n    differenceInCalendarISOWeekYears(dateLeft, dateRight)\n  )\n  dateLeft = subISOWeekYears(dateLeft, sign * difference)\n\n  // Math.abs(diff in full ISO years - diff in calendar ISO years) === 1\n  // if last calendar ISO year is not full\n  // If so, result must be decreased by 1 in absolute value\n  var isLastISOWeekYearNotFull = compareAsc(dateLeft, dateRight) === -sign\n  var result = sign * (difference - isLastISOWeekYearNotFull)\n  // Prevent negative zero\n  return result === 0 ? 0 : result\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name differenceInMilliseconds\n * @category Millisecond Helpers\n * @summary Get the number of milliseconds between the given dates.\n *\n * @description\n * Get the number of milliseconds between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of milliseconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many milliseconds are between\n * // 2 July 2014 12:30:20.600 and 2 July 2014 12:30:21.700?\n * var result = differenceInMilliseconds(\n *   new Date(2014, 6, 2, 12, 30, 21, 700),\n *   new Date(2014, 6, 2, 12, 30, 20, 600)\n * )\n * //=> 1100\n */\nexport default function differenceInMilliseconds(\n  dirtyDateLeft,\n  dirtyDateRight\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n  return dateLeft.getTime() - dateRight.getTime()\n}\n","import differenceInMilliseconds from '../differenceInMilliseconds/index.js'\n\nvar MILLISECONDS_IN_MINUTE = 60000\n\n/**\n * @name differenceInMinutes\n * @category Minute Helpers\n * @summary Get the number of minutes between the given dates.\n *\n * @description\n * Get the number of minutes between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of minutes\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many minutes are between 2 July 2014 12:07:59 and 2 July 2014 12:20:00?\n * var result = differenceInMinutes(\n *   new Date(2014, 6, 2, 12, 20, 0),\n *   new Date(2014, 6, 2, 12, 7, 59)\n * )\n * //=> 12\n */\nexport default function differenceInMinutes(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var diff =\n    differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) /\n    MILLISECONDS_IN_MINUTE\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n","import toDate from '../toDate/index.js'\nimport differenceInCalendarMonths from '../differenceInCalendarMonths/index.js'\nimport compareAsc from '../compareAsc/index.js'\n\n/**\n * @name differenceInMonths\n * @category Month Helpers\n * @summary Get the number of full months between the given dates.\n *\n * @description\n * Get the number of full months between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full months\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full months are between 31 January 2014 and 1 September 2014?\n * var result = differenceInMonths(new Date(2014, 8, 1), new Date(2014, 0, 31))\n * //=> 7\n */\nexport default function differenceInMonths(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n\n  var sign = compareAsc(dateLeft, dateRight)\n  var difference = Math.abs(differenceInCalendarMonths(dateLeft, dateRight))\n  dateLeft.setMonth(dateLeft.getMonth() - sign * difference)\n\n  // Math.abs(diff in full months - diff in calendar months) === 1 if last calendar month is not full\n  // If so, result must be decreased by 1 in absolute value\n  var isLastMonthNotFull = compareAsc(dateLeft, dateRight) === -sign\n  var result = sign * (difference - isLastMonthNotFull)\n  // Prevent negative zero\n  return result === 0 ? 0 : result\n}\n","import differenceInMonths from '../differenceInMonths/index.js'\n\n/**\n * @name differenceInQuarters\n * @category Quarter Helpers\n * @summary Get the number of full quarters between the given dates.\n *\n * @description\n * Get the number of full quarters between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full quarters\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full quarters are between 31 December 2013 and 2 July 2014?\n * var result = differenceInQuarters(new Date(2014, 6, 2), new Date(2013, 11, 31))\n * //=> 2\n */\nexport default function differenceInQuarters(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var diff = differenceInMonths(dirtyDateLeft, dirtyDateRight) / 3\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n","import differenceInMilliseconds from '../differenceInMilliseconds/index.js'\n\n/**\n * @name differenceInSeconds\n * @category Second Helpers\n * @summary Get the number of seconds between the given dates.\n *\n * @description\n * Get the number of seconds between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of seconds\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many seconds are between\n * // 2 July 2014 12:30:07.999 and 2 July 2014 12:30:20.000?\n * var result = differenceInSeconds(\n *   new Date(2014, 6, 2, 12, 30, 20, 0),\n *   new Date(2014, 6, 2, 12, 30, 7, 999)\n * )\n * //=> 12\n */\nexport default function differenceInSeconds(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var diff = differenceInMilliseconds(dirtyDateLeft, dirtyDateRight) / 1000\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n","import differenceInDays from '../differenceInDays/index.js'\n\n/**\n * @name differenceInWeeks\n * @category Week Helpers\n * @summary Get the number of full weeks between the given dates.\n *\n * @description\n * Get the number of full weeks between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full weeks\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full weeks are between 5 July 2014 and 20 July 2014?\n * var result = differenceInWeeks(new Date(2014, 6, 20), new Date(2014, 6, 5))\n * //=> 2\n */\nexport default function differenceInWeeks(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var diff = differenceInDays(dirtyDateLeft, dirtyDateRight) / 7\n  return diff > 0 ? Math.floor(diff) : Math.ceil(diff)\n}\n","import toDate from '../toDate/index.js'\nimport differenceInCalendarYears from '../differenceInCalendarYears/index.js'\nimport compareAsc from '../compareAsc/index.js'\n\n/**\n * @name differenceInYears\n * @category Year Helpers\n * @summary Get the number of full years between the given dates.\n *\n * @description\n * Get the number of full years between the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the later date\n * @param {Date|Number} dateRight - the earlier date\n * @returns {Number} the number of full years\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // How many full years are between 31 December 2013 and 11 February 2015?\n * var result = differenceInYears(new Date(2015, 1, 11), new Date(2013, 11, 31))\n * //=> 1\n */\nexport default function differenceInYears(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n\n  var sign = compareAsc(dateLeft, dateRight)\n  var difference = Math.abs(differenceInCalendarYears(dateLeft, dateRight))\n  dateLeft.setFullYear(dateLeft.getFullYear() - sign * difference)\n\n  // Math.abs(diff in full years - diff in calendar years) === 1 if last calendar year is not full\n  // If so, result must be decreased by 1 in absolute value\n  var isLastYearNotFull = compareAsc(dateLeft, dateRight) === -sign\n  var result = sign * (difference - isLastYearNotFull)\n  // Prevent negative zero\n  return result === 0 ? 0 : result\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name eachDayOfInterval\n * @category Interval Helpers\n * @summary Return the array of dates within the specified time interval.\n *\n * @description\n * Return the array of dates within the specified time interval.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `eachDay` to `eachDayOfInterval`.\n *   This change was made to mirror the use of the word \"interval\" in standard ISO 8601:2004 terminology:\n *\n *   ```\n *   2.1.3\n *   time interval\n *   part of the time axis limited by two instants\n *   ```\n *\n *   Also, this function now accepts an object with `start` and `end` properties\n *   instead of two arguments as an interval.\n *   This function now throws `RangeError` if the start of the interval is after its end\n *   or if any date in the interval is `Invalid Date`.\n *\n *   ```javascript\n *   // Before v2.0.0\n *\n *   eachDay(new Date(2014, 0, 10), new Date(2014, 0, 20))\n *\n *   // v2.0.0 onward\n *\n *   eachDayOfInterval(\n *     { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) }\n *   )\n *   ```\n *\n * @param {Interval} interval - the interval. See [Interval]{@link docs/types/Interval}\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.step=1] - the step to increment by. The value should be more than 1.\n * @returns {Date[]} the array with starts of days from the day of the interval start to the day of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.step` must be a number greater than 1\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each day between 6 October 2014 and 10 October 2014:\n * var result = eachDayOfInterval({\n *   start: new Date(2014, 9, 6),\n *   end: new Date(2014, 9, 10)\n * })\n * //=> [\n * //   Mon Oct 06 2014 00:00:00,\n * //   Tue Oct 07 2014 00:00:00,\n * //   Wed Oct 08 2014 00:00:00,\n * //   Thu Oct 09 2014 00:00:00,\n * //   Fri Oct 10 2014 00:00:00\n * // ]\n */\nexport default function eachDayOfInterval(dirtyInterval, options) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var interval = dirtyInterval || {}\n  var startDate = toDate(interval.start)\n  var endDate = toDate(interval.end)\n\n  var endTime = endDate.getTime()\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(startDate.getTime() <= endTime)) {\n    throw new RangeError('Invalid interval')\n  }\n\n  var dates = []\n\n  var currentDate = startDate\n  currentDate.setHours(0, 0, 0, 0)\n\n  var step = options && 'step' in options ? Number(options.step) : 1\n  if (step < 1 || isNaN(step))\n    throw new RangeError('`options.step` must be a number greater than 1')\n\n  while (currentDate.getTime() <= endTime) {\n    dates.push(toDate(currentDate))\n    currentDate.setDate(currentDate.getDate() + step)\n    currentDate.setHours(0, 0, 0, 0)\n  }\n\n  return dates\n}\n","import toDate from '../toDate/index.js'\nimport startOfWeek from '../startOfWeek/index.js'\nimport addWeeks from '../addWeeks/index.js'\n\n/**\n * @name eachWeekOfInterval\n * @category Interval Helpers\n * @summary Return the array of weeks within the specified time interval.\n *\n * @description\n * Return the array of weeks within the specified time interval.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Interval} interval - the interval. See [Interval]{@link docs/types/Interval}\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Date[]} the array with starts of weeks from the week of the interval start to the week of the interval end\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be 0, 1, ..., 6\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Each week within interval 6 October 2014 - 23 November 2014:\n * var result = eachWeekOfInterval({\n *   start: new Date(2014, 9, 6),\n *   end: new Date(2014, 10, 23)\n * })\n * //=> [\n * //   Sun Oct 05 2014 00:00:00,\n * //   Sun Oct 12 2014 00:00:00,\n * //   Sun Oct 19 2014 00:00:00,\n * //   Sun Oct 26 2014 00:00:00,\n * //   Sun Nov 02 2014 00:00:00,\n * //   Sun Nov 09 2014 00:00:00,\n * //   Sun Nov 16 2014 00:00:00,\n * //   Sun Nov 23 2014 00:00:00\n * // ]\n */\nexport default function eachWeekOfInterval(dirtyInterval, options) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var interval = dirtyInterval || {}\n  var startDate = toDate(interval.start)\n  var endDate = toDate(interval.end)\n\n  var endTime = endDate.getTime()\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(startDate.getTime() <= endTime)) {\n    throw new RangeError('Invalid interval')\n  }\n\n  var startDateWeek = startOfWeek(startDate, options)\n  var endDateWeek = startOfWeek(endDate, options)\n\n  // Some timezones switch DST at midnight, making start of day unreliable in these timezones, 3pm is a safe bet\n  startDateWeek.setHours(15)\n  endDateWeek.setHours(15)\n\n  endTime = endDateWeek.getTime()\n\n  var weeks = []\n\n  var currentWeek = startDateWeek\n\n  while (currentWeek.getTime() <= endTime) {\n    currentWeek.setHours(0)\n    weeks.push(toDate(currentWeek))\n    currentWeek = addWeeks(currentWeek, 1)\n    currentWeek.setHours(15)\n  }\n\n  return weeks\n}\n","import eachDayOfInterval from '../eachDayOfInterval/index.js'\nimport isSunday from '../isSunday/index.js'\nimport isWeekend from '../isWeekend/index.js'\n\n/**\n * @name eachWeekendOfInterval\n * @category Interval Helpers\n * @summary List all the Saturdays and Sundays in the given date interval.\n *\n * @description\n * Get all the Saturdays and Sundays in the given date interval.\n *\n * @param {Interval} interval - the given interval. See [Interval]{@link docs/types/Interval}\n * @returns {Date[]} an array containing all the Saturdays and Sundays\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // Lists all Saturdays and Sundays in the given date interval\n * var result = eachWeekendOfInterval({\n *   start: new Date(2018, 8, 17),\n *   end: new Date(2018, 8, 30)\n * })\n * //=> [\n * //   Sat Sep 22 2018 00:00:00,\n * //   Sun Sep 23 2018 00:00:00,\n * //   Sat Sep 29 2018 00:00:00,\n * //   Sun Sep 30 2018 00:00:00\n * // ]\n */\nexport default function eachWeekendOfInterval(interval) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateInterval = eachDayOfInterval(interval)\n  var weekends = []\n  var index = 0\n  while (index++ < dateInterval.length) {\n    var date = dateInterval[index]\n    if (isWeekend(date)) {\n      weekends.push(date)\n      if (isSunday(date)) index = index + 5\n    }\n  }\n  return weekends\n}\n","import eachWeekendOfInterval from '../eachWeekendOfInterval/index.js'\nimport startOfMonth from '../startOfMonth/index.js'\nimport endOfMonth from '../endOfMonth/index.js'\n\n/**\n * @name eachWeekendOfMonth\n * @category Month Helpers\n * @summary List all the Saturdays and Sundays in the given month.\n *\n * @description\n * Get all the Saturdays and Sundays in the given month.\n *\n * @param {Date|Number} date - the given month\n * @returns {Date[]} an array containing all the Saturdays and Sundays\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The passed date is invalid\n *\n * @example\n * // Lists all Saturdays and Sundays in the given month\n * var result = eachWeekendOfMonth(new Date(2022, 1, 1))\n * //=> [\n * //   Sat Feb 05 2022 00:00:00,\n * //   Sun Feb 06 2022 00:00:00,\n * //   Sat Feb 12 2022 00:00:00,\n * //   Sun Feb 13 2022 00:00:00,\n * //   Sat Feb 19 2022 00:00:00,\n * //   Sun Feb 20 2022 00:00:00,\n * //   Sat Feb 26 2022 00:00:00,\n * //   Sun Feb 27 2022 00:00:00\n * // ]\n */\nexport default function eachWeekendOfMonth(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var startDate = startOfMonth(dirtyDate)\n  if (isNaN(startDate)) throw new RangeError('The passed date is invalid')\n\n  var endDate = endOfMonth(dirtyDate)\n  return eachWeekendOfInterval({ start: startDate, end: endDate })\n}\n","import eachWeekendOfInterval from '../eachWeekendOfInterval/index.js'\nimport startOfYear from '../startOfYear/index.js'\nimport endOfYear from '../endOfYear/index.js'\n\n/**\n * @name eachWeekendOfYear\n * @category Year Helpers\n * @summary List all the Saturdays and Sundays in the year.\n *\n * @description\n * Get all the Saturdays and Sundays in the year.\n *\n * @param {Date|Number} date - the given year\n * @returns {Date[]} an array containing all the Saturdays and Sundays\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} The passed date is invalid\n *\n * @example\n * // Lists all Saturdays and Sundays in the year\n * var result = eachWeekendOfYear(new Date(2020, 1, 1))\n * //=> [\n * //   Sat Jan 03 2020 00:00:00,\n * //   Sun Jan 04 2020 00:00:00,\n * //   ...\n * //   Sun Dec 27 2020 00:00:00\n * // ]\n * ]\n */\nexport default function eachWeekendOfYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var startDate = startOfYear(dirtyDate)\n  if (isNaN(startDate)) throw new RangeError('The passed date is invalid')\n\n  var endDate = endOfYear(dirtyDate)\n  return eachWeekendOfInterval({ start: startDate, end: endDate })\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfDay\n * @category Day Helpers\n * @summary Return the end of a day for the given date.\n *\n * @description\n * Return the end of a day for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a day for 2 September 2014 11:55:00:\n * var result = endOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 23:59:59.999\n */\nexport default function endOfDay(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  date.setHours(23, 59, 59, 999)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfDecade\n * @category Decade Helpers\n * @summary Return the end of a decade for the given date.\n *\n * @description\n * Return the end of a decade for the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a decade\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // The end of a decade for 12 May 1984 00:00:00:\n * var result = endOfDecade(new Date(1984, 4, 12, 00, 00, 00))\n * //=> Dec 31 1989 23:59:59.999\n */\nexport default function endOfDecade(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n  var decade = 9 + Math.floor(year / 10) * 10\n  date.setFullYear(decade, 11, 31)\n  date.setHours(23, 59, 59, 999)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfHour\n * @category Hour Helpers\n * @summary Return the end of an hour for the given date.\n *\n * @description\n * Return the end of an hour for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an hour\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of an hour for 2 September 2014 11:55:00:\n * var result = endOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:59:59.999\n */\nexport default function endOfHour(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  date.setMinutes(59, 59, 999)\n  return date\n}\n","import endOfWeek from '../endOfWeek/index.js'\n\n/**\n * @name endOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the end of an ISO week for the given date.\n *\n * @description\n * Return the end of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of an ISO week for 2 September 2014 11:55:00:\n * var result = endOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport default function endOfISOWeek(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return endOfWeek(dirtyDate, { weekStartsOn: 1 })\n}\n","import getISOWeekYear from '../getISOWeekYear/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\n\n/**\n * @name endOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the end of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the end of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `endOfISOYear` to `endOfISOWeekYear`.\n *   \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n *   This change makes the name consistent with\n *   locale-dependent week-numbering year helpers, e.g., `addWeekYears`.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of an ISO week-numbering year for 2 July 2005:\n * var result = endOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Sun Jan 01 2006 23:59:59.999\n */\nexport default function endOfISOWeekYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var year = getISOWeekYear(dirtyDate)\n  var fourthOfJanuaryOfNextYear = new Date(0)\n  fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4)\n  fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0)\n  var date = startOfISOWeek(fourthOfJanuaryOfNextYear)\n  date.setMilliseconds(date.getMilliseconds() - 1)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfMinute\n * @category Minute Helpers\n * @summary Return the end of a minute for the given date.\n *\n * @description\n * Return the end of a minute for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a minute\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a minute for 1 December 2014 22:15:45.400:\n * var result = endOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:59.999\n */\nexport default function endOfMinute(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  date.setSeconds(59, 999)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * var result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport default function endOfMonth(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var month = date.getMonth()\n  date.setFullYear(date.getFullYear(), month + 1, 0)\n  date.setHours(23, 59, 59, 999)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfQuarter\n * @category Quarter Helpers\n * @summary Return the end of a year quarter for the given date.\n *\n * @description\n * Return the end of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a quarter for 2 September 2014 11:55:00:\n * var result = endOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport default function endOfQuarter(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var currentMonth = date.getMonth()\n  var month = currentMonth - (currentMonth % 3) + 3\n  date.setMonth(month, 0)\n  date.setHours(23, 59, 59, 999)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfSecond\n * @category Second Helpers\n * @summary Return the end of a second for the given date.\n *\n * @description\n * Return the end of a second for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a second\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a second for 1 December 2014 22:15:45.400:\n * var result = endOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.999\n */\nexport default function endOfSecond(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  date.setMilliseconds(999)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name endOfWeek\n * @category Week Helpers\n * @summary Return the end of a week for the given date.\n *\n * @description\n * Return the end of a week for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Date} the end of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The end of a week for 2 September 2014 11:55:00:\n * var result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 23:59:59.999\n *\n * @example\n * // If the week starts on Monday, the end of the week for 2 September 2014 11:55:00:\n * var result = endOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 23:59:59.999\n */\nexport default function endOfWeek(dirtyDate, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n\n  var locale = options.locale\n  var localeWeekStartsOn =\n    locale && locale.options && locale.options.weekStartsOn\n  var defaultWeekStartsOn =\n    localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n  var weekStartsOn =\n    options.weekStartsOn == null\n      ? defaultWeekStartsOn\n      : toInteger(options.weekStartsOn)\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n  }\n\n  var date = toDate(dirtyDate)\n  var day = date.getDay()\n  var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn)\n\n  date.setDate(date.getDate() + diff)\n  date.setHours(23, 59, 59, 999)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name endOfYear\n * @category Year Helpers\n * @summary Return the end of a year for the given date.\n *\n * @description\n * Return the end of a year for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The end of a year for 2 September 2014 11:55:00:\n * var result = endOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Dec 31 2014 23:59:59.999\n */\nexport default function endOfYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n  date.setFullYear(year + 1, 0, 0)\n  date.setHours(23, 59, 59, 999)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport toDate from '../toDate/index.js'\nimport isValid from '../isValid/index.js'\nimport defaultLocale from '../locale/en-US/index.js'\nimport formatters from '../_lib/format/formatters/index.js'\nimport longFormatters from '../_lib/format/longFormatters/index.js'\nimport subMilliseconds from '../subMilliseconds/index.js'\nimport {\n  isProtectedToken,\n  throwProtectedError\n} from '../_lib/protectedTokens/index.js'\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n//   (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nvar longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g\n\nvar escapedStringRegExp = /^'(.*?)'?$/\nvar doubleQuoteRegExp = /''/g\n\n/**\n * @name format\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit                            | Pattern | Result examples                   | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era                             | G..GGG  | AD, BC                            |       |\n * |                                 | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 | GGGGG   | A, B                              |       |\n * | Calendar year                   | y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | yo      | 44th, 1st, 0th, 17th              | 5,7   |\n * |                                 | yy      | 44, 01, 00, 17                    | 5     |\n * |                                 | yyy     | 044, 001, 1900, 2017              | 5     |\n * |                                 | yyyy    | 0044, 0001, 1900, 2017            | 5     |\n * |                                 | yyyyy   | ...                               | 3,5   |\n * | Local week-numbering year       | Y       | 44, 1, 1900, 2017                 | 5     |\n * |                                 | Yo      | 44th, 1st, 1900th, 2017th         | 5,7   |\n * |                                 | YY      | 44, 01, 00, 17                    | 5,8   |\n * |                                 | YYY     | 044, 001, 1900, 2017              | 5     |\n * |                                 | YYYY    | 0044, 0001, 1900, 2017            | 5,8   |\n * |                                 | YYYYY   | ...                               | 3,5   |\n * | ISO week-numbering year         | R       | -43, 0, 1, 1900, 2017             | 5,7   |\n * |                                 | RR      | -43, 00, 01, 1900, 2017           | 5,7   |\n * |                                 | RRR     | -043, 000, 001, 1900, 2017        | 5,7   |\n * |                                 | RRRR    | -0043, 0000, 0001, 1900, 2017     | 5,7   |\n * |                                 | RRRRR   | ...                               | 3,5,7 |\n * | Extended year                   | u       | -43, 0, 1, 1900, 2017             | 5     |\n * |                                 | uu      | -43, 01, 1900, 2017               | 5     |\n * |                                 | uuu     | -043, 001, 1900, 2017             | 5     |\n * |                                 | uuuu    | -0043, 0001, 1900, 2017           | 5     |\n * |                                 | uuuuu   | ...                               | 3,5   |\n * | Quarter (formatting)            | Q       | 1, 2, 3, 4                        |       |\n * |                                 | Qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | QQ      | 01, 02, 03, 04                    |       |\n * |                                 | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | q       | 1, 2, 3, 4                        |       |\n * |                                 | qo      | 1st, 2nd, 3rd, 4th                | 7     |\n * |                                 | qq      | 01, 02, 03, 04                    |       |\n * |                                 | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 | qqqqq   | 1, 2, 3, 4                        | 4     |\n * | Month (formatting)              | M       | 1, 2, ..., 12                     |       |\n * |                                 | Mo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | MM      | 01, 02, ..., 12                   |       |\n * |                                 | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 | MMMM    | January, February, ..., December  | 2     |\n * |                                 | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | L       | 1, 2, ..., 12                     |       |\n * |                                 | Lo      | 1st, 2nd, ..., 12th               | 7     |\n * |                                 | LL      | 01, 02, ..., 12                   |       |\n * |                                 | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 | LLLL    | January, February, ..., December  | 2     |\n * |                                 | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | w       | 1, 2, ..., 53                     |       |\n * |                                 | wo      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | I       | 1, 2, ..., 53                     | 7     |\n * |                                 | Io      | 1st, 2nd, ..., 53th               | 7     |\n * |                                 | II      | 01, 02, ..., 53                   | 7     |\n * | Day of month                    | d       | 1, 2, ..., 31                     |       |\n * |                                 | do      | 1st, 2nd, ..., 31st               | 7     |\n * |                                 | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     | D       | 1, 2, ..., 365, 366               | 8     |\n * |                                 | Do      | 1st, 2nd, ..., 365th, 366th       | 7     |\n * |                                 | DD      | 01, 02, ..., 365, 366             | 8     |\n * |                                 | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 | DDDD    | ...                               | 3     |\n * | Day of week (formatting)        | E..EEE  | Mon, Tue, Wed, ..., Su            |       |\n * |                                 | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 | EEEEEE  | Mo, Tu, We, Th, Fr, Su, Sa        |       |\n * | ISO day of week (formatting)    | i       | 1, 2, 3, ..., 7                   | 7     |\n * |                                 | io      | 1st, 2nd, ..., 7th                | 7     |\n * |                                 | ii      | 01, 02, ..., 07                   | 7     |\n * |                                 | iii     | Mon, Tue, Wed, ..., Su            | 7     |\n * |                                 | iiii    | Monday, Tuesday, ..., Sunday      | 2,7   |\n * |                                 | iiiii   | M, T, W, T, F, S, S               | 7     |\n * |                                 | iiiiii  | Mo, Tu, We, Th, Fr, Su, Sa        | 7     |\n * | Local day of week (formatting)  | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 | eo      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | ee      | 02, 03, ..., 01                   |       |\n * |                                 | eee     | Mon, Tue, Wed, ..., Su            |       |\n * |                                 | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 | eeeeee  | Mo, Tu, We, Th, Fr, Su, Sa        |       |\n * | Local day of week (stand-alone) | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 | co      | 2nd, 3rd, ..., 1st                | 7     |\n * |                                 | cc      | 02, 03, ..., 01                   |       |\n * |                                 | ccc     | Mon, Tue, Wed, ..., Su            |       |\n * |                                 | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 | cccccc  | Mo, Tu, We, Th, Fr, Su, Sa        |       |\n * | AM, PM                          | a..aaa  | AM, PM                            |       |\n * |                                 | aaaa    | a.m., p.m.                        | 2     |\n * |                                 | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          | b..bbb  | AM, PM, noon, midnight            |       |\n * |                                 | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             | B..BBB  | at night, in the morning, ...     |       |\n * |                                 | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 | ho      | 1st, 2nd, ..., 11th, 12th         | 7     |\n * |                                 | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 | Ho      | 0th, 1st, 2nd, ..., 23rd          | 7     |\n * |                                 | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 | Ko      | 1st, 2nd, ..., 11th, 0th          | 7     |\n * |                                 | KK      | 1, 2, ..., 11, 0                  |       |\n * | Hour [1-24]                     | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 | ko      | 24th, 1st, 2nd, ..., 23rd         | 7     |\n * |                                 | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          | m       | 0, 1, ..., 59                     |       |\n * |                                 | mo      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | mm      | 00, 01, ..., 59                   |       |\n * | Second                          | s       | 0, 1, ..., 59                     |       |\n * |                                 | so      | 0th, 1st, ..., 59th               | 7     |\n * |                                 | ss      | 00, 01, ..., 59                   |       |\n * | Fraction of second              | S       | 0, 1, ..., 9                      |       |\n * |                                 | SS      | 00, 01, ..., 99                   |       |\n * |                                 | SSS     | 000, 0001, ..., 999               |       |\n * |                                 | SSSS    | ...                               | 3     |\n * | Timezone (ISO-8601 w/ Z)        | X       | -08, +0530, Z                     |       |\n * |                                 | XX      | -0800, +0530, Z                   |       |\n * |                                 | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       | x       | -08, +0530, +00                   |       |\n * |                                 | xx      | -0800, +0530, +0000               |       |\n * |                                 | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * | Timezone (GMT)                  | O...OOO | GMT-8, GMT+5:30, GMT+0            |       |\n * |                                 | OOOO    | GMT-08:00, GMT+05:30, GMT+00:00   | 2     |\n * | Timezone (specific non-locat.)  | z...zzz | GMT-8, GMT+5:30, GMT+0            | 6     |\n * |                                 | zzzz    | GMT-08:00, GMT+05:30, GMT+00:00   | 2,6   |\n * | Seconds timestamp               | t       | 512969520                         | 7     |\n * |                                 | tt      | ...                               | 3,7   |\n * | Milliseconds timestamp          | T       | 512969520900                      | 7     |\n * |                                 | TT      | ...                               | 3,7   |\n * | Long localized date             | P       | 05/29/1453                        | 7     |\n * |                                 | PP      | May 29, 1453                      | 7     |\n * |                                 | PPP     | May 29th, 1453                    | 7     |\n * |                                 | PPPP    | Sunday, May 29th, 1453            | 2,7   |\n * | Long localized time             | p       | 12:00 AM                          | 7     |\n * |                                 | pp      | 12:00:00 AM                       | 7     |\n * |                                 | ppp     | 12:00:00 AM GMT+2                 | 7     |\n * |                                 | pppp    | 12:00:00 AM GMT+02:00             | 2,7   |\n * | Combination of date and time    | Pp      | 05/29/1453, 12:00 AM              | 7     |\n * |                                 | PPpp    | May 29, 1453, 12:00:00 AM         | 7     |\n * |                                 | PPPppp  | May 29th, 1453 at ...             | 7     |\n * |                                 | PPPPpppp| Sunday, May 29th, 1453 at ...     | 2,7   |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n *    the output will be the same as default pattern for this unit, usually\n *    the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n *    are marked with \"2\" in the last column of the table.\n *\n *    `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n *    `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n *    The output will be padded with zeros to match the length of the pattern.\n *\n *    `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` always returns the last two digits of a year,\n *    while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n *    | Year | `yy` | `uu` |\n *    |------|------|------|\n *    | 1    |   01 |   01 |\n *    | 14   |   14 |   14 |\n *    | 376  |   76 |  376 |\n *    | 1453 |   53 | 1453 |\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}\n *    and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n *    so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `t`: seconds timestamp\n *    - `T`: milliseconds timestamp\n *    - `o`: ordinal number modifier\n *    - `P`: long localized date\n *    - `p`: long localized time\n *\n * 8. These tokens are often confused with others. See: https://git.io/fxCyr\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The second argument is now required for the sake of explicitness.\n *\n *   ```javascript\n *   // Before v2.0.0\n *   format(new Date(2016, 0, 1))\n *\n *   // v2.0.0 onward\n *   format(new Date(2016, 0, 1), \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\")\n *   ```\n *\n * - New format string API for `format` function\n *   which is based on [Unicode Technical Standard #35](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table).\n *   See [this post](https://blog.date-fns.org/post/unicode-tokens-in-date-fns-v2-sreatyki91jg) for more details.\n *\n * - Characters are now escaped using single quote symbols (`'`) instead of square brackets.\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {Boolean} [options.awareOfUnicodeTokens=false] - if true, allows usage of Unicode tokens causes confusion:\n *   - Some of the day of year tokens (`D`, `DD`) that are confused with the day of month tokens (`d`, `dd`).\n *   - Some of the local week-numbering year tokens (`YY`, `YYYY`) that are confused with the calendar year tokens (`yy`, `yyyy`).\n *   See: https://git.io/fxCyr\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.awareOfUnicodeTokens` must be set to `true` to use `XX` token; see: https://git.io/fxCyr\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * var result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n *   locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * var result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport default function format(dirtyDate, dirtyFormatStr, dirtyOptions) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var formatStr = String(dirtyFormatStr)\n  var options = dirtyOptions || {}\n\n  var locale = options.locale || defaultLocale\n\n  var localeFirstWeekContainsDate =\n    locale.options && locale.options.firstWeekContainsDate\n  var defaultFirstWeekContainsDate =\n    localeFirstWeekContainsDate == null\n      ? 1\n      : toInteger(localeFirstWeekContainsDate)\n  var firstWeekContainsDate =\n    options.firstWeekContainsDate == null\n      ? defaultFirstWeekContainsDate\n      : toInteger(options.firstWeekContainsDate)\n\n  // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError(\n      'firstWeekContainsDate must be between 1 and 7 inclusively'\n    )\n  }\n\n  var localeWeekStartsOn = locale.options && locale.options.weekStartsOn\n  var defaultWeekStartsOn =\n    localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n  var weekStartsOn =\n    options.weekStartsOn == null\n      ? defaultWeekStartsOn\n      : toInteger(options.weekStartsOn)\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n  }\n\n  if (!locale.localize) {\n    throw new RangeError('locale must contain localize property')\n  }\n\n  if (!locale.formatLong) {\n    throw new RangeError('locale must contain formatLong property')\n  }\n\n  var originalDate = toDate(dirtyDate)\n\n  if (!isValid(originalDate)) {\n    throw new RangeError('Invalid time value')\n  }\n\n  // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n  // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n  // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n  var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate)\n  var utcDate = subMilliseconds(originalDate, timezoneOffset)\n\n  var formatterOptions = {\n    firstWeekContainsDate: firstWeekContainsDate,\n    weekStartsOn: weekStartsOn,\n    locale: locale,\n    _originalDate: originalDate\n  }\n\n  var result = formatStr\n    .match(longFormattingTokensRegExp)\n    .map(function(substring) {\n      var firstCharacter = substring[0]\n      if (firstCharacter === 'p' || firstCharacter === 'P') {\n        var longFormatter = longFormatters[firstCharacter]\n        return longFormatter(substring, locale.formatLong, formatterOptions)\n      }\n      return substring\n    })\n    .join('')\n    .match(formattingTokensRegExp)\n    .map(function(substring) {\n      // Replace two single quote characters with one single quote character\n      if (substring === \"''\") {\n        return \"'\"\n      }\n\n      var firstCharacter = substring[0]\n      if (firstCharacter === \"'\") {\n        return cleanEscapedString(substring)\n      }\n\n      var formatter = formatters[firstCharacter]\n      if (formatter) {\n        if (!options.awareOfUnicodeTokens && isProtectedToken(substring)) {\n          throwProtectedError(substring)\n        }\n        return formatter(utcDate, substring, locale.localize, formatterOptions)\n      }\n\n      return substring\n    })\n    .join('')\n\n  return result\n}\n\nfunction cleanEscapedString(input) {\n  return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\")\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport compareAsc from '../compareAsc/index.js'\nimport toDate from '../toDate/index.js'\nimport differenceInSeconds from '../differenceInSeconds/index.js'\nimport differenceInMonths from '../differenceInMonths/index.js'\nimport cloneObject from '../_lib/cloneObject/index.js'\nimport defaultLocale from '../locale/en-US/index.js'\n\nvar MINUTES_IN_DAY = 1440\nvar MINUTES_IN_ALMOST_TWO_DAYS = 2520\nvar MINUTES_IN_MONTH = 43200\nvar MINUTES_IN_TWO_MONTHS = 86400\n\n/**\n * @name formatDistance\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words.\n *\n * | Distance between dates                                            | Result              |\n * |-------------------------------------------------------------------|---------------------|\n * | 0 ... 30 secs                                                     | less than a minute  |\n * | 30 secs ... 1 min 30 secs                                         | 1 minute            |\n * | 1 min 30 secs ... 44 mins 30 secs                                 | [2..44] minutes     |\n * | 44 mins ... 30 secs ... 89 mins 30 secs                           | about 1 hour        |\n * | 89 mins 30 secs ... 23 hrs 59 mins 30 secs                        | about [2..24] hours |\n * | 23 hrs 59 mins 30 secs ... 41 hrs 59 mins 30 secs                 | 1 day               |\n * | 41 hrs 59 mins 30 secs ... 29 days 23 hrs 59 mins 30 secs         | [2..30] days        |\n * | 29 days 23 hrs 59 mins 30 secs ... 44 days 23 hrs 59 mins 30 secs | about 1 month       |\n * | 44 days 23 hrs 59 mins 30 secs ... 59 days 23 hrs 59 mins 30 secs | about 2 months      |\n * | 59 days 23 hrs 59 mins 30 secs ... 1 yr                           | [2..12] months      |\n * | 1 yr ... 1 yr 3 months                                            | about 1 year        |\n * | 1 yr 3 months ... 1 yr 9 month s                                  | over 1 year         |\n * | 1 yr 9 months ... 2 yrs                                           | almost 2 years      |\n * | N yrs ... N yrs 3 months                                          | about N years       |\n * | N yrs 3 months ... N yrs 9 months                                 | over N years        |\n * | N yrs 9 months ... N+1 yrs                                        | almost N+1 years    |\n *\n * With `options.includeSeconds == true`:\n * | Distance between dates | Result               |\n * |------------------------|----------------------|\n * | 0 secs ... 5 secs      | less than 5 seconds  |\n * | 5 secs ... 10 secs     | less than 10 seconds |\n * | 10 secs ... 20 secs    | less than 20 seconds |\n * | 20 secs ... 40 secs    | half a minute        |\n * | 40 secs ... 60 secs    | less than a minute   |\n * | 60 secs ... 90 secs    | 1 minute             |\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `distanceInWords ` to `formatDistance `\n *   to make its name consistent with `format` and `formatRelative`.\n *\n * - The order of arguments is swapped to make the function\n *   consistent with `differenceIn...` functions.\n *\n *   ```javascript\n *   // Before v2.0.0\n *\n *   distanceInWords(\n *     new Date(1986, 3, 4, 10, 32, 0),\n *     new Date(1986, 3, 4, 11, 32, 0),\n *     { addSuffix: true }\n *   ) //=> 'in about 1 hour'\n *\n *   // v2.0.0 onward\n *\n *   formatDistance(\n *     new Date(1986, 3, 4, 11, 32, 0),\n *     new Date(1986, 3, 4, 10, 32, 0),\n *     { addSuffix: true }\n *   ) //=> 'in about 1 hour'\n *   ```\n *\n * @param {Date|Number} date - the date\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {Boolean} [options.includeSeconds=false] - distances less than a minute are more detailed\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * var result = formatDistance(new Date(2014, 6, 2), new Date(2015, 0, 1))\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00, including seconds?\n * var result = formatDistance(\n *   new Date(2015, 0, 1, 0, 0, 15),\n *   new Date(2015, 0, 1, 0, 0, 0),\n *   { includeSeconds: true }\n * )\n * //=> 'less than 20 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * var result = formatDistance(new Date(2015, 0, 1), new Date(2016, 0, 1), {\n *   addSuffix: true\n * })\n * //=> 'about 1 year ago'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = formatDistance(new Date(2016, 7, 1), new Date(2015, 0, 1), {\n *   locale: eoLocale\n * })\n * //=> 'pli ol 1 jaro'\n */\nexport default function formatDistance(dirtyDate, dirtyBaseDate, dirtyOptions) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale || defaultLocale\n\n  if (!locale.formatDistance) {\n    throw new RangeError('locale must contain formatDistance property')\n  }\n\n  var comparison = compareAsc(dirtyDate, dirtyBaseDate)\n\n  if (isNaN(comparison)) {\n    throw new RangeError('Invalid time value')\n  }\n\n  var localizeOptions = cloneObject(options)\n  localizeOptions.addSuffix = Boolean(options.addSuffix)\n  localizeOptions.comparison = comparison\n\n  var dateLeft\n  var dateRight\n  if (comparison > 0) {\n    dateLeft = toDate(dirtyBaseDate)\n    dateRight = toDate(dirtyDate)\n  } else {\n    dateLeft = toDate(dirtyDate)\n    dateRight = toDate(dirtyBaseDate)\n  }\n\n  var seconds = differenceInSeconds(dateRight, dateLeft)\n  var offsetInSeconds =\n    (getTimezoneOffsetInMilliseconds(dateRight) -\n      getTimezoneOffsetInMilliseconds(dateLeft)) /\n    1000\n  var minutes = Math.round((seconds - offsetInSeconds) / 60)\n  var months\n\n  // 0 up to 2 mins\n  if (minutes < 2) {\n    if (options.includeSeconds) {\n      if (seconds < 5) {\n        return locale.formatDistance('lessThanXSeconds', 5, localizeOptions)\n      } else if (seconds < 10) {\n        return locale.formatDistance('lessThanXSeconds', 10, localizeOptions)\n      } else if (seconds < 20) {\n        return locale.formatDistance('lessThanXSeconds', 20, localizeOptions)\n      } else if (seconds < 40) {\n        return locale.formatDistance('halfAMinute', null, localizeOptions)\n      } else if (seconds < 60) {\n        return locale.formatDistance('lessThanXMinutes', 1, localizeOptions)\n      } else {\n        return locale.formatDistance('xMinutes', 1, localizeOptions)\n      }\n    } else {\n      if (minutes === 0) {\n        return locale.formatDistance('lessThanXMinutes', 1, localizeOptions)\n      } else {\n        return locale.formatDistance('xMinutes', minutes, localizeOptions)\n      }\n    }\n\n    // 2 mins up to 0.75 hrs\n  } else if (minutes < 45) {\n    return locale.formatDistance('xMinutes', minutes, localizeOptions)\n\n    // 0.75 hrs up to 1.5 hrs\n  } else if (minutes < 90) {\n    return locale.formatDistance('aboutXHours', 1, localizeOptions)\n\n    // 1.5 hrs up to 24 hrs\n  } else if (minutes < MINUTES_IN_DAY) {\n    var hours = Math.round(minutes / 60)\n    return locale.formatDistance('aboutXHours', hours, localizeOptions)\n\n    // 1 day up to 1.75 days\n  } else if (minutes < MINUTES_IN_ALMOST_TWO_DAYS) {\n    return locale.formatDistance('xDays', 1, localizeOptions)\n\n    // 1.75 days up to 30 days\n  } else if (minutes < MINUTES_IN_MONTH) {\n    var days = Math.round(minutes / MINUTES_IN_DAY)\n    return locale.formatDistance('xDays', days, localizeOptions)\n\n    // 1 month up to 2 months\n  } else if (minutes < MINUTES_IN_TWO_MONTHS) {\n    months = Math.round(minutes / MINUTES_IN_MONTH)\n    return locale.formatDistance('aboutXMonths', months, localizeOptions)\n  }\n\n  months = differenceInMonths(dateRight, dateLeft)\n\n  // 2 months up to 12 months\n  if (months < 12) {\n    var nearestMonth = Math.round(minutes / MINUTES_IN_MONTH)\n    return locale.formatDistance('xMonths', nearestMonth, localizeOptions)\n\n    // 1 year up to max Date\n  } else {\n    var monthsSinceStartOfYear = months % 12\n    var years = Math.floor(months / 12)\n\n    // N years up to 1 years 3 months\n    if (monthsSinceStartOfYear < 3) {\n      return locale.formatDistance('aboutXYears', years, localizeOptions)\n\n      // N years 3 months up to N years 9 months\n    } else if (monthsSinceStartOfYear < 9) {\n      return locale.formatDistance('overXYears', years, localizeOptions)\n\n      // N years 9 months up to N year 12 months\n    } else {\n      return locale.formatDistance('almostXYears', years + 1, localizeOptions)\n    }\n  }\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport compareAsc from '../compareAsc/index.js'\nimport toDate from '../toDate/index.js'\nimport differenceInSeconds from '../differenceInSeconds/index.js'\nimport cloneObject from '../_lib/cloneObject/index.js'\nimport defaultLocale from '../locale/en-US/index.js'\n\nvar MINUTES_IN_DAY = 1440\nvar MINUTES_IN_MONTH = 43200\nvar MINUTES_IN_YEAR = 525600\n\n/**\n * @name formatDistanceStrict\n * @category Common Helpers\n * @summary Return the distance between the given dates in words.\n *\n * @description\n * Return the distance between the given dates in words, using strict units.\n * This is like `formatDistance`, but does not use helpers like 'almost', 'over',\n * 'less than' and the like.\n *\n * | Distance between dates | Result              |\n * |------------------------|---------------------|\n * | 0 ... 59 secs          | [0..59] seconds     |\n * | 1 ... 59 mins          | [1..59] minutes     |\n * | 1 ... 23 hrs           | [1..23] hours       |\n * | 1 ... 29 days          | [1..29] days        |\n * | 1 ... 11 months        | [1..11] months      |\n * | 1 ... N years          | [1..N]  years       |\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `distanceInWordsStrict` to `formatDistanceStrict`\n *   to make its name consistent with `format` and `formatRelative`.\n *\n * - The order of arguments is swapped to make the function\n *   consistent with `differenceIn...` functions.\n *\n *   ```javascript\n *   // Before v2.0.0\n *\n *   distanceInWordsStrict(\n *     new Date(2015, 0, 2),\n *     new Date(2014, 6, 2)\n *   ) //=> '6 months'\n *\n *   // v2.0.0 onward\n *\n *   formatDistanceStrict(\n *     new Date(2014, 6, 2),\n *     new Date(2015, 0, 2)\n *   ) //=> '6 months'\n *   ```\n *\n * - `partialMethod` option is renamed to `roundingMethod`.\n *\n *   ```javascript\n *   // Before v2.0.0\n *\n *   distanceInWordsStrict(\n *     new Date(1986, 3, 4, 10, 32, 0),\n *     new Date(1986, 3, 4, 10, 33, 1),\n *     { partialMethod: 'ceil' }\n *   ) //=> '2 minutes'\n *\n *   // v2.0.0 onward\n *\n *   formatDistanceStrict(\n *     new Date(1986, 3, 4, 10, 33, 1),\n *     new Date(1986, 3, 4, 10, 32, 0),\n *     { roundingMethod: 'ceil' }\n *   ) //=> '2 minutes'\n *   ```\n *\n * - If `roundingMethod` is not specified, it now defaults to `round` instead of `floor`.\n *\n * - `unit` option now accepts one of the strings:\n *   'second', 'minute', 'hour', 'day', 'month' or 'year' instead of 's', 'm', 'h', 'd', 'M' or 'Y'\n *\n *   ```javascript\n *   // Before v2.0.0\n *\n *   distanceInWordsStrict(\n *     new Date(1986, 3, 4, 10, 32, 0),\n *     new Date(1986, 3, 4, 10, 33, 1),\n *     { unit: 'm' }\n *   )\n *\n *   // v2.0.0 onward\n *\n *   formatDistanceStrict(\n *     new Date(1986, 3, 4, 10, 33, 1),\n *     new Date(1986, 3, 4, 10, 32, 0),\n *     { unit: 'minute' }\n *   )\n *   ```\n *\n * @param {Date|Number} date - the date\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {Boolean} [options.addSuffix=false] - result indicates if the second date is earlier or later than the first\n * @param {'second'|'minute'|'hour'|'day'|'month'|'year'} [options.unit] - if specified, will force a unit\n * @param {'floor'|'ceil'|'round'} [options.roundingMethod='round'] - which way to round partial units\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the distance in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.roundingMethod` must be 'floor', 'ceil' or 'round'\n * @throws {RangeError} `options.unit` must be 'second', 'minute', 'hour', 'day', 'month' or 'year'\n * @throws {RangeError} `options.locale` must contain `formatDistance` property\n *\n * @example\n * // What is the distance between 2 July 2014 and 1 January 2015?\n * var result = formatDistanceStrict(new Date(2014, 6, 2), new Date(2015, 0, 2))\n * //=> '6 months'\n *\n * @example\n * // What is the distance between 1 January 2015 00:00:15\n * // and 1 January 2015 00:00:00?\n * var result = formatDistanceStrict(\n *   new Date(2015, 0, 1, 0, 0, 15),\n *   new Date(2015, 0, 1, 0, 0, 0)\n * )\n * //=> '15 seconds'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, with a suffix?\n * var result = formatDistanceStrict(new Date(2015, 0, 1), new Date(2016, 0, 1), {\n *   addSuffix: true\n * })\n * //=> '1 year ago'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 1 January 2015, in minutes?\n * var result = formatDistanceStrict(new Date(2016, 0, 1), new Date(2015, 0, 1), {\n *   unit: 'minute'\n * })\n * //=> '525600 minutes'\n *\n * @example\n * // What is the distance from 1 January 2016\n * // to 28 January 2015, in months, rounded up?\n * var result = formatDistanceStrict(new Date(2015, 0, 28), new Date(2015, 0, 1), {\n *   unit: 'month',\n *   roundingMethod: 'ceil'\n * })\n * //=> '1 month'\n *\n * @example\n * // What is the distance between 1 August 2016 and 1 January 2015 in Esperanto?\n * import { eoLocale } from 'date-fns/locale/eo'\n * var result = formatDistanceStrict(new Date(2016, 7, 1), new Date(2015, 0, 1), {\n *   locale: eoLocale\n * })\n * //=> '1 jaro'\n */\nexport default function formatDistanceStrict(\n  dirtyDate,\n  dirtyBaseDate,\n  dirtyOptions\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale || defaultLocale\n\n  if (!locale.formatDistance) {\n    throw new RangeError('locale must contain localize.formatDistance property')\n  }\n\n  var comparison = compareAsc(dirtyDate, dirtyBaseDate)\n\n  if (isNaN(comparison)) {\n    throw new RangeError('Invalid time value')\n  }\n\n  var localizeOptions = cloneObject(options)\n  localizeOptions.addSuffix = Boolean(options.addSuffix)\n  localizeOptions.comparison = comparison\n\n  var dateLeft\n  var dateRight\n  if (comparison > 0) {\n    dateLeft = toDate(dirtyBaseDate)\n    dateRight = toDate(dirtyDate)\n  } else {\n    dateLeft = toDate(dirtyDate)\n    dateRight = toDate(dirtyBaseDate)\n  }\n\n  var roundingMethod =\n    options.roundingMethod == null ? 'round' : String(options.roundingMethod)\n  var roundingMethodFn\n\n  if (roundingMethod === 'floor') {\n    roundingMethodFn = Math.floor\n  } else if (roundingMethod === 'ceil') {\n    roundingMethodFn = Math.ceil\n  } else if (roundingMethod === 'round') {\n    roundingMethodFn = Math.round\n  } else {\n    throw new RangeError(\"roundingMethod must be 'floor', 'ceil' or 'round'\")\n  }\n\n  var seconds = differenceInSeconds(dateRight, dateLeft)\n  var offsetInSeconds =\n    (getTimezoneOffsetInMilliseconds(dateRight) -\n      getTimezoneOffsetInMilliseconds(dateLeft)) /\n    1000\n  var minutes = roundingMethodFn((seconds - offsetInSeconds) / 60)\n\n  var unit\n  if (options.unit == null) {\n    if (minutes < 1) {\n      unit = 'second'\n    } else if (minutes < 60) {\n      unit = 'minute'\n    } else if (minutes < MINUTES_IN_DAY) {\n      unit = 'hour'\n    } else if (minutes < MINUTES_IN_MONTH) {\n      unit = 'day'\n    } else if (minutes < MINUTES_IN_YEAR) {\n      unit = 'month'\n    } else {\n      unit = 'year'\n    }\n  } else {\n    unit = String(options.unit)\n  }\n\n  // 0 up to 60 seconds\n  if (unit === 'second') {\n    return locale.formatDistance('xSeconds', seconds, localizeOptions)\n\n    // 1 up to 60 mins\n  } else if (unit === 'minute') {\n    return locale.formatDistance('xMinutes', minutes, localizeOptions)\n\n    // 1 up to 24 hours\n  } else if (unit === 'hour') {\n    var hours = roundingMethodFn(minutes / 60)\n    return locale.formatDistance('xHours', hours, localizeOptions)\n\n    // 1 up to 30 days\n  } else if (unit === 'day') {\n    var days = roundingMethodFn(minutes / MINUTES_IN_DAY)\n    return locale.formatDistance('xDays', days, localizeOptions)\n\n    // 1 up to 12 months\n  } else if (unit === 'month') {\n    var months = roundingMethodFn(minutes / MINUTES_IN_MONTH)\n    return locale.formatDistance('xMonths', months, localizeOptions)\n\n    // 1 year up to max Date\n  } else if (unit === 'year') {\n    var years = roundingMethodFn(minutes / MINUTES_IN_YEAR)\n    return locale.formatDistance('xYears', years, localizeOptions)\n  }\n\n  throw new RangeError(\n    \"unit must be 'second', 'minute', 'hour', 'day', 'month' or 'year'\"\n  )\n}\n","import getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport toDate from '../toDate/index.js'\nimport format from '../format/index.js'\nimport differenceInCalendarDays from '../differenceInCalendarDays/index.js'\nimport defaultLocale from '../locale/en-US/index.js'\nimport subMilliseconds from '../subMilliseconds/index.js'\n\n/**\n * @name formatRelative\n * @category Common Helpers\n * @summary Represent the date in words relative to the given base date.\n *\n * @description\n * Represent the date in words relative to the given base date.\n *\n * | Distance to the base date | Result                    |\n * |---------------------------|---------------------------|\n * | Previous 6 days           | last Sunday at 04:30 AM   |\n * | Last day                  | yesterday at 04:30 AM     |\n * | Same day                  | today at 04:30 AM         |\n * | Next day                  | tomorrow at 04:30 AM      |\n * | Next 6 days               | Sunday at 04:30 AM        |\n * | Other                     | 12/31/2017                |\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to format\n * @param {Date|Number} baseDate - the date to compare with\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {String} the date in words\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.locale` must contain `localize` property\n * @throws {RangeError} `options.locale` must contain `formatLong` property\n * @throws {RangeError} `options.locale` must contain `formatRelative` property\n */\nexport default function formatRelative(dirtyDate, dirtyBaseDate, dirtyOptions) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var baseDate = toDate(dirtyBaseDate)\n\n  var options = dirtyOptions || {}\n  var locale = options.locale || defaultLocale\n\n  if (!locale.localize) {\n    throw new RangeError('locale must contain localize property')\n  }\n\n  if (!locale.formatLong) {\n    throw new RangeError('locale must contain formatLong property')\n  }\n\n  if (!locale.formatRelative) {\n    throw new RangeError('locale must contain formatRelative property')\n  }\n\n  var diff = differenceInCalendarDays(date, baseDate)\n\n  if (isNaN(diff)) {\n    throw new RangeError('Invalid time value')\n  }\n\n  var token\n  if (diff < -6) {\n    token = 'other'\n  } else if (diff < -1) {\n    token = 'lastWeek'\n  } else if (diff < 0) {\n    token = 'yesterday'\n  } else if (diff < 1) {\n    token = 'today'\n  } else if (diff < 2) {\n    token = 'tomorrow'\n  } else if (diff < 7) {\n    token = 'nextWeek'\n  } else {\n    token = 'other'\n  }\n\n  var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date))\n  var utcBaseDate = subMilliseconds(\n    baseDate,\n    getTimezoneOffsetInMilliseconds(baseDate)\n  )\n  var formatStr = locale.formatRelative(token, utcDate, utcBaseDate, options)\n  return format(date, formatStr, options)\n}\n","import toDate from '../toDate/index.js'\nimport toInteger from '../_lib/toInteger/index.js'\n\n/**\n * @name fromUnixTime\n * @category Timestamp Helpers\n * @summary Create a date from a Unix timestamp.\n *\n * @description\n * Create a date from a Unix timestamp.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Number} unixTime - the given Unix timestamp\n * @returns {Date} the date\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Create the date 29 February 2012 11:45:05:\n * var result = fromUnixTime(1330515905)\n * //=> Wed Feb 29 2012 11:45:05\n */\nexport default function fromUnixTime(dirtyUnixTime) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var unixTime = toInteger(dirtyUnixTime)\n\n  return toDate(unixTime * 1000)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getDate\n * @category Day Helpers\n * @summary Get the day of the month of the given date.\n *\n * @description\n * Get the day of the month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the month is 29 February 2012?\n * var result = getDate(new Date(2012, 1, 29))\n * //=> 29\n */\nexport default function getDate(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var dayOfMonth = date.getDate()\n  return dayOfMonth\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getDay\n * @category Weekday Helpers\n * @summary Get the day of the week of the given date.\n *\n * @description\n * Get the day of the week of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the week is 29 February 2012?\n * var result = getDay(new Date(2012, 1, 29))\n * //=> 3\n */\nexport default function getDay(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var day = date.getDay()\n  return day\n}\n","import toDate from '../toDate/index.js'\nimport startOfYear from '../startOfYear/index.js'\nimport differenceInCalendarDays from '../differenceInCalendarDays/index.js'\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * var result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport default function getDayOfYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var diff = differenceInCalendarDays(date, startOfYear(date))\n  var dayOfYear = diff + 1\n  return dayOfYear\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getDaysInMonth\n * @category Month Helpers\n * @summary Get the number of days in a month of the given date.\n *\n * @description\n * Get the number of days in a month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of days in a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many days are in February 2000?\n * var result = getDaysInMonth(new Date(2000, 1))\n * //=> 29\n */\nexport default function getDaysInMonth(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n  var monthIndex = date.getMonth()\n  var lastDayOfMonth = new Date(0)\n  lastDayOfMonth.setFullYear(year, monthIndex + 1, 0)\n  lastDayOfMonth.setHours(0, 0, 0, 0)\n  return lastDayOfMonth.getDate()\n}\n","import toDate from '../toDate/index.js'\nimport isLeapYear from '../isLeapYear/index.js'\n\n/**\n * @name getDaysInYear\n * @category Year Helpers\n * @summary Get the number of days in a year of the given date.\n *\n * @description\n * Get the number of days in a year of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of days in a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many days are in 2012?\n * var result = getDaysInYear(new Date(2012, 0, 1))\n * //=> 366\n */\nexport default function getDaysInYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n\n  if (isNaN(date)) {\n    return NaN\n  }\n\n  return isLeapYear(date) ? 366 : 365\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getDecade\n * @category Decade Helpers\n * @summary Get the decade of the given date.\n *\n * @description\n * Get the decade of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year of decade\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which decade belongs 27 November 1942?\n * var result = getDecade(new Date(1942, 10, 27))\n * //=> 1940\n */\nexport default function getDecade(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n  var decade = Math.floor(year / 10) * 10\n  return decade\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getHours\n * @category Hour Helpers\n * @summary Get the hours of the given date.\n *\n * @description\n * Get the hours of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the hours\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the hours of 29 February 2012 11:45:00:\n * var result = getHours(new Date(2012, 1, 29, 11, 45))\n * //=> 11\n */\nexport default function getHours(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var hours = date.getHours()\n  return hours\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getISODay\n * @category Weekday Helpers\n * @summary Get the day of the ISO week of the given date.\n *\n * @description\n * Get the day of the ISO week of the given date,\n * which is 7 for Sunday, 1 for Monday etc.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the day of ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which day of the ISO week is 26 February 2012?\n * var result = getISODay(new Date(2012, 1, 26))\n * //=> 7\n */\nexport default function getISODay(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var day = date.getDay()\n\n  if (day === 0) {\n    day = 7\n  }\n\n  return day\n}\n","import toDate from '../toDate/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\nimport startOfISOWeekYear from '../startOfISOWeekYear/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * var result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport default function getISOWeek(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var diff = startOfISOWeek(date).getTime() - startOfISOWeekYear(date).getTime()\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1\n}\n","import toDate from '../toDate/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `getISOYear` to `getISOWeekYear`.\n *   \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n *   This change makes the name consistent with\n *   locale-dependent week-numbering year helpers, e.g., `getWeekYear`.\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * var result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport default function getISOWeekYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n\n  var fourthOfJanuaryOfNextYear = new Date(0)\n  fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4)\n  fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0)\n  var startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear)\n\n  var fourthOfJanuaryOfThisYear = new Date(0)\n  fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4)\n  fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0)\n  var startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear)\n\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year\n  } else {\n    return year - 1\n  }\n}\n","import startOfISOWeekYear from '../startOfISOWeekYear/index.js'\nimport addWeeks from '../addWeeks/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @name getISOWeeksInYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the number of weeks in an ISO week-numbering year of the given date.\n *\n * @description\n * Get the number of weeks in an ISO week-numbering year of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the number of ISO weeks in a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // How many weeks are in ISO week-numbering year 2015?\n * var result = getISOWeeksInYear(new Date(2015, 1, 11))\n * //=> 53\n */\nexport default function getISOWeeksInYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var thisYear = startOfISOWeekYear(dirtyDate)\n  var nextYear = startOfISOWeekYear(addWeeks(thisYear, 60))\n  var diff = nextYear.valueOf() - thisYear.valueOf()\n  // Round the number of weeks to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getMilliseconds\n * @category Millisecond Helpers\n * @summary Get the milliseconds of the given date.\n *\n * @description\n * Get the milliseconds of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the milliseconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the milliseconds of 29 February 2012 11:45:05.123:\n * var result = getMilliseconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 123\n */\nexport default function getMilliseconds(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var milliseconds = date.getMilliseconds()\n  return milliseconds\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getMinutes\n * @category Minute Helpers\n * @summary Get the minutes of the given date.\n *\n * @description\n * Get the minutes of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the minutes\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the minutes of 29 February 2012 11:45:05:\n * var result = getMinutes(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 45\n */\nexport default function getMinutes(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var minutes = date.getMinutes()\n  return minutes\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getMonth\n * @category Month Helpers\n * @summary Get the month of the given date.\n *\n * @description\n * Get the month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which month is 29 February 2012?\n * var result = getMonth(new Date(2012, 1, 29))\n * //=> 1\n */\nexport default function getMonth(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var month = date.getMonth()\n  return month\n}\n","import toDate from '../toDate/index.js'\n\nvar MILLISECONDS_IN_DAY = 24 * 60 * 60 * 1000\n\n/**\n * @name getOverlappingDaysInIntervals\n * @category Interval Helpers\n * @summary Get the number of days that overlap in two time intervals\n *\n * @description\n * Get the number of days that overlap in two time intervals\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `getOverlappingDaysInRanges` to `getOverlappingDaysInIntervals`.\n *   This change was made to mirror the use of the word \"interval\" in standard ISO 8601:2004 terminology:\n *\n *   ```\n *   2.1.3\n *   time interval\n *   part of the time axis limited by two instants\n *   ```\n *\n *   Also, this function now accepts an object with `start` and `end` properties\n *   instead of two arguments as an interval.\n *   This function now throws `RangeError` if the start of the interval is after its end\n *   or if any date in the interval is `Invalid Date`.\n *\n *   ```javascript\n *   // Before v2.0.0\n *\n *   getOverlappingDaysInRanges(\n *     new Date(2014, 0, 10), new Date(2014, 0, 20),\n *     new Date(2014, 0, 17), new Date(2014, 0, 21)\n *   )\n *\n *   // v2.0.0 onward\n *\n *   getOverlappingDaysInIntervals(\n *     { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *     { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }\n *   )\n *   ```\n *\n * @param {Interval} intervalLeft - the first interval to compare. See [Interval]{@link docs/Interval}\n * @param {Interval} intervalRight - the second interval to compare. See [Interval]{@link docs/Interval}\n * @returns {Number} the number of days that overlap in two time intervals\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For overlapping time intervals adds 1 for each started overlapping day:\n * getOverlappingDaysInIntervals(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 17), end: new Date(2014, 0, 21) }\n * )\n * //=> 3\n *\n * @example\n * // For non-overlapping time intervals returns 0:\n * getOverlappingDaysInIntervals(\n *   { start: new Date(2014, 0, 10), end: new Date(2014, 0, 20) },\n *   { start: new Date(2014, 0, 21), end: new Date(2014, 0, 22) }\n * )\n * //=> 0\n */\nexport default function getOverlappingDaysInIntervals(\n  dirtyIntervalLeft,\n  dirtyIntervalRight\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var intervalLeft = dirtyIntervalLeft || {}\n  var intervalRight = dirtyIntervalRight || {}\n  var leftStartTime = toDate(intervalLeft.start).getTime()\n  var leftEndTime = toDate(intervalLeft.end).getTime()\n  var rightStartTime = toDate(intervalRight.start).getTime()\n  var rightEndTime = toDate(intervalRight.end).getTime()\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(leftStartTime <= leftEndTime && rightStartTime <= rightEndTime)) {\n    throw new RangeError('Invalid interval')\n  }\n\n  var isOverlapping =\n    leftStartTime < rightEndTime && rightStartTime < leftEndTime\n\n  if (!isOverlapping) {\n    return 0\n  }\n\n  var overlapStartDate =\n    rightStartTime < leftStartTime ? leftStartTime : rightStartTime\n\n  var overlapEndDate = rightEndTime > leftEndTime ? leftEndTime : rightEndTime\n\n  var differenceInMs = overlapEndDate - overlapStartDate\n\n  return Math.ceil(differenceInMs / MILLISECONDS_IN_DAY)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getQuarter\n * @category Quarter Helpers\n * @summary Get the year quarter of the given date.\n *\n * @description\n * Get the year quarter of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which quarter is 2 July 2014?\n * var result = getQuarter(new Date(2014, 6, 2))\n * //=> 3\n */\nexport default function getQuarter(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var quarter = Math.floor(date.getMonth() / 3) + 1\n  return quarter\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getSeconds\n * @category Second Helpers\n * @summary Get the seconds of the given date.\n *\n * @description\n * Get the seconds of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the seconds\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the seconds of 29 February 2012 11:45:05.123:\n * var result = getSeconds(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 5\n */\nexport default function getSeconds(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var seconds = date.getSeconds()\n  return seconds\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getTime\n * @category Timestamp Helpers\n * @summary Get the milliseconds timestamp of the given date.\n *\n * @description\n * Get the milliseconds timestamp of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the timestamp\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05.123:\n * var result = getTime(new Date(2012, 1, 29, 11, 45, 5, 123))\n * //=> 1330515905123\n */\nexport default function getTime(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var timestamp = date.getTime()\n  return timestamp\n}\n","import getTime from '../getTime/index.js'\n\n/**\n * @name getUnixTime\n * @category Timestamp Helpers\n * @summary Get the seconds timestamp of the given date.\n *\n * @description\n * Get the seconds timestamp of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the timestamp\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Get the timestamp of 29 February 2012 11:45:05 CET:\n * var result = getUnixTime(new Date(2012, 1, 29, 11, 45, 5))\n * //=> 1330512305\n */\nexport default function getUnixTime(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return Math.floor(getTime(dirtyDate) / 1000)\n}\n","import toDate from '../toDate/index.js'\nimport startOfWeek from '../startOfWeek/index.js'\nimport startOfWeekYear from '../startOfWeekYear/index.js'\n\nvar MILLISECONDS_IN_WEEK = 604800000\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Number} the week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * var result = getISOWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * var result = getISOWeek(new Date(2005, 0, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> 53\n */\n\nexport default function getWeek(dirtyDate, options) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var diff =\n    startOfWeek(date, options).getTime() -\n    startOfWeekYear(date, options).getTime()\n\n  // Round the number of days to the nearest integer\n  // because the number of milliseconds in a week is not constant\n  // (e.g. it's different in the week of the daylight saving time clock shift)\n  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport getDate from '../getDate/index.js'\nimport startOfMonth from '../startOfMonth/index.js'\nimport getDay from '../getDay/index.js'\n\n/**\n * @name getWeekOfMonth\n * @category Week Helpers\n * @summary Get the week of the month of the given date.\n *\n * @description\n * Get the week of the month of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @returns {Number} the week of month\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // Which week of the month is 9 November 2017?\n * var result = getWeekOfMonth(new Date(2017, 10, 9))\n * //=> 2\n */\nexport default function getWeekOfMonth(date, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeWeekStartsOn =\n    locale && locale.options && locale.options.weekStartsOn\n  var defaultWeekStartsOn =\n    localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n  var weekStartsOn =\n    options.weekStartsOn == null\n      ? defaultWeekStartsOn\n      : toInteger(options.weekStartsOn)\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n  }\n\n  var startWeekDay = getDay(startOfMonth(date))\n  var currentWeekDay = getDay(date)\n\n  var startWeekDayWithOptions =\n    startWeekDay < weekStartsOn ? 7 - weekStartsOn : startWeekDay\n  var diff = startWeekDayWithOptions > currentWeekDay ? 7 - weekStartsOn : 0\n\n  return Math.ceil((getDate(date) + diff) / 7)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport startOfWeek from '../startOfWeek/index.js'\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Number} the local week-numbering year\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * var result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * var result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * var result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport default function getWeekYear(dirtyDate, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeFirstWeekContainsDate =\n    locale && locale.options && locale.options.firstWeekContainsDate\n  var defaultFirstWeekContainsDate =\n    localeFirstWeekContainsDate == null\n      ? 1\n      : toInteger(localeFirstWeekContainsDate)\n  var firstWeekContainsDate =\n    options.firstWeekContainsDate == null\n      ? defaultFirstWeekContainsDate\n      : toInteger(options.firstWeekContainsDate)\n\n  // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError(\n      'firstWeekContainsDate must be between 1 and 7 inclusively'\n    )\n  }\n\n  var firstWeekOfNextYear = new Date(0)\n  firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate)\n  firstWeekOfNextYear.setHours(0, 0, 0, 0)\n  var startOfNextYear = startOfWeek(firstWeekOfNextYear, dirtyOptions)\n\n  var firstWeekOfThisYear = new Date(0)\n  firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate)\n  firstWeekOfThisYear.setHours(0, 0, 0, 0)\n  var startOfThisYear = startOfWeek(firstWeekOfThisYear, dirtyOptions)\n\n  if (date.getTime() >= startOfNextYear.getTime()) {\n    return year + 1\n  } else if (date.getTime() >= startOfThisYear.getTime()) {\n    return year\n  } else {\n    return year - 1\n  }\n}\n","import differenceInCalendarWeeks from '../differenceInCalendarWeeks/index.js'\nimport lastDayOfMonth from '../lastDayOfMonth/index.js'\nimport startOfMonth from '../startOfMonth/index.js'\n\n/**\n * @name getWeeksInMonth\n * @category Week Helpers\n * @summary Get the number of calendar weeks a month spans.\n *\n * @description\n * Get the number of calendar weeks the month in the given date spans.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Number} the number of calendar weeks\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // How many calendar weeks does February 2015 span?\n * var result = getWeeksInMonth(new Date(2015, 1, 8))\n * //=> 4\n *\n * @example\n * // If the week starts on Monday,\n * // how many calendar weeks does July 2017 span?\n * var result = getWeeksInMonth(new Date(2017, 6, 5), { weekStartsOn: 1 })\n * //=> 6\n */\nexport default function getWeeksInMonth(date, options) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return (\n    differenceInCalendarWeeks(\n      lastDayOfMonth(date),\n      startOfMonth(date),\n      options\n    ) + 1\n  )\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name getYear\n * @category Year Helpers\n * @summary Get the year of the given date.\n *\n * @description\n * Get the year of the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the given date\n * @returns {Number} the year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which year is 2 July 2014?\n * var result = getYear(new Date(2014, 6, 2))\n * //=> 2014\n */\nexport default function getYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n  return year\n}\n","// This file is generated automatically by `scripts/build/indices.js`. Please, don't change it.\n\nexport { default as addDays } from './addDays/index.js'\nexport { default as addHours } from './addHours/index.js'\nexport { default as addISOWeekYears } from './addISOWeekYears/index.js'\nexport { default as addMilliseconds } from './addMilliseconds/index.js'\nexport { default as addMinutes } from './addMinutes/index.js'\nexport { default as addMonths } from './addMonths/index.js'\nexport { default as addQuarters } from './addQuarters/index.js'\nexport { default as addSeconds } from './addSeconds/index.js'\nexport { default as addWeeks } from './addWeeks/index.js'\nexport { default as addYears } from './addYears/index.js'\nexport {\n  default as areIntervalsOverlapping\n} from './areIntervalsOverlapping/index.js'\nexport { default as closestIndexTo } from './closestIndexTo/index.js'\nexport { default as closestTo } from './closestTo/index.js'\nexport { default as compareAsc } from './compareAsc/index.js'\nexport { default as compareDesc } from './compareDesc/index.js'\nexport {\n  default as differenceInCalendarDays\n} from './differenceInCalendarDays/index.js'\nexport {\n  default as differenceInCalendarISOWeekYears\n} from './differenceInCalendarISOWeekYears/index.js'\nexport {\n  default as differenceInCalendarISOWeeks\n} from './differenceInCalendarISOWeeks/index.js'\nexport {\n  default as differenceInCalendarMonths\n} from './differenceInCalendarMonths/index.js'\nexport {\n  default as differenceInCalendarQuarters\n} from './differenceInCalendarQuarters/index.js'\nexport {\n  default as differenceInCalendarWeeks\n} from './differenceInCalendarWeeks/index.js'\nexport {\n  default as differenceInCalendarYears\n} from './differenceInCalendarYears/index.js'\nexport { default as differenceInDays } from './differenceInDays/index.js'\nexport { default as differenceInHours } from './differenceInHours/index.js'\nexport {\n  default as differenceInISOWeekYears\n} from './differenceInISOWeekYears/index.js'\nexport {\n  default as differenceInMilliseconds\n} from './differenceInMilliseconds/index.js'\nexport { default as differenceInMinutes } from './differenceInMinutes/index.js'\nexport { default as differenceInMonths } from './differenceInMonths/index.js'\nexport {\n  default as differenceInQuarters\n} from './differenceInQuarters/index.js'\nexport { default as differenceInSeconds } from './differenceInSeconds/index.js'\nexport { default as differenceInWeeks } from './differenceInWeeks/index.js'\nexport { default as differenceInYears } from './differenceInYears/index.js'\nexport { default as eachDayOfInterval } from './eachDayOfInterval/index.js'\nexport { default as eachWeekOfInterval } from './eachWeekOfInterval/index.js'\nexport {\n  default as eachWeekendOfInterval\n} from './eachWeekendOfInterval/index.js'\nexport { default as eachWeekendOfMonth } from './eachWeekendOfMonth/index.js'\nexport { default as eachWeekendOfYear } from './eachWeekendOfYear/index.js'\nexport { default as endOfDay } from './endOfDay/index.js'\nexport { default as endOfDecade } from './endOfDecade/index.js'\nexport { default as endOfHour } from './endOfHour/index.js'\nexport { default as endOfISOWeek } from './endOfISOWeek/index.js'\nexport { default as endOfISOWeekYear } from './endOfISOWeekYear/index.js'\nexport { default as endOfMinute } from './endOfMinute/index.js'\nexport { default as endOfMonth } from './endOfMonth/index.js'\nexport { default as endOfQuarter } from './endOfQuarter/index.js'\nexport { default as endOfSecond } from './endOfSecond/index.js'\nexport { default as endOfWeek } from './endOfWeek/index.js'\nexport { default as endOfYear } from './endOfYear/index.js'\nexport { default as format } from './format/index.js'\nexport { default as formatDistance } from './formatDistance/index.js'\nexport {\n  default as formatDistanceStrict\n} from './formatDistanceStrict/index.js'\nexport { default as formatRelative } from './formatRelative/index.js'\nexport { default as fromUnixTime } from './fromUnixTime/index.js'\nexport { default as getDate } from './getDate/index.js'\nexport { default as getDay } from './getDay/index.js'\nexport { default as getDayOfYear } from './getDayOfYear/index.js'\nexport { default as getDaysInMonth } from './getDaysInMonth/index.js'\nexport { default as getDaysInYear } from './getDaysInYear/index.js'\nexport { default as getDecade } from './getDecade/index.js'\nexport { default as getHours } from './getHours/index.js'\nexport { default as getISODay } from './getISODay/index.js'\nexport { default as getISOWeek } from './getISOWeek/index.js'\nexport { default as getISOWeekYear } from './getISOWeekYear/index.js'\nexport { default as getISOWeeksInYear } from './getISOWeeksInYear/index.js'\nexport { default as getMilliseconds } from './getMilliseconds/index.js'\nexport { default as getMinutes } from './getMinutes/index.js'\nexport { default as getMonth } from './getMonth/index.js'\nexport {\n  default as getOverlappingDaysInIntervals\n} from './getOverlappingDaysInIntervals/index.js'\nexport { default as getQuarter } from './getQuarter/index.js'\nexport { default as getSeconds } from './getSeconds/index.js'\nexport { default as getTime } from './getTime/index.js'\nexport { default as getUnixTime } from './getUnixTime/index.js'\nexport { default as getWeek } from './getWeek/index.js'\nexport { default as getWeekOfMonth } from './getWeekOfMonth/index.js'\nexport { default as getWeekYear } from './getWeekYear/index.js'\nexport { default as getWeeksInMonth } from './getWeeksInMonth/index.js'\nexport { default as getYear } from './getYear/index.js'\nexport { default as isAfter } from './isAfter/index.js'\nexport { default as isBefore } from './isBefore/index.js'\nexport { default as isDate } from './isDate/index.js'\nexport { default as isEqual } from './isEqual/index.js'\nexport { default as isFirstDayOfMonth } from './isFirstDayOfMonth/index.js'\nexport { default as isFriday } from './isFriday/index.js'\nexport { default as isLastDayOfMonth } from './isLastDayOfMonth/index.js'\nexport { default as isLeapYear } from './isLeapYear/index.js'\nexport { default as isMonday } from './isMonday/index.js'\nexport { default as isSameDay } from './isSameDay/index.js'\nexport { default as isSameHour } from './isSameHour/index.js'\nexport { default as isSameISOWeek } from './isSameISOWeek/index.js'\nexport { default as isSameISOWeekYear } from './isSameISOWeekYear/index.js'\nexport { default as isSameMinute } from './isSameMinute/index.js'\nexport { default as isSameMonth } from './isSameMonth/index.js'\nexport { default as isSameQuarter } from './isSameQuarter/index.js'\nexport { default as isSameSecond } from './isSameSecond/index.js'\nexport { default as isSameWeek } from './isSameWeek/index.js'\nexport { default as isSameYear } from './isSameYear/index.js'\nexport { default as isSaturday } from './isSaturday/index.js'\nexport { default as isSunday } from './isSunday/index.js'\nexport { default as isThursday } from './isThursday/index.js'\nexport { default as isTuesday } from './isTuesday/index.js'\nexport { default as isValid } from './isValid/index.js'\nexport { default as isWednesday } from './isWednesday/index.js'\nexport { default as isWeekend } from './isWeekend/index.js'\nexport { default as isWithinInterval } from './isWithinInterval/index.js'\nexport { default as lastDayOfDecade } from './lastDayOfDecade/index.js'\nexport { default as lastDayOfISOWeek } from './lastDayOfISOWeek/index.js'\nexport {\n  default as lastDayOfISOWeekYear\n} from './lastDayOfISOWeekYear/index.js'\nexport { default as lastDayOfMonth } from './lastDayOfMonth/index.js'\nexport { default as lastDayOfQuarter } from './lastDayOfQuarter/index.js'\nexport { default as lastDayOfWeek } from './lastDayOfWeek/index.js'\nexport { default as lastDayOfYear } from './lastDayOfYear/index.js'\nexport { default as lightFormat } from './lightFormat/index.js'\nexport { default as max } from './max/index.js'\nexport { default as min } from './min/index.js'\nexport { default as parse } from './parse/index.js'\nexport { default as parseISO } from './parseISO/index.js'\nexport {\n  default as roundToNearestMinutes\n} from './roundToNearestMinutes/index.js'\nexport { default as setDate } from './setDate/index.js'\nexport { default as setDay } from './setDay/index.js'\nexport { default as setDayOfYear } from './setDayOfYear/index.js'\nexport { default as setHours } from './setHours/index.js'\nexport { default as setISODay } from './setISODay/index.js'\nexport { default as setISOWeek } from './setISOWeek/index.js'\nexport { default as setISOWeekYear } from './setISOWeekYear/index.js'\nexport { default as setMilliseconds } from './setMilliseconds/index.js'\nexport { default as setMinutes } from './setMinutes/index.js'\nexport { default as setMonth } from './setMonth/index.js'\nexport { default as setQuarter } from './setQuarter/index.js'\nexport { default as setSeconds } from './setSeconds/index.js'\nexport { default as setWeek } from './setWeek/index.js'\nexport { default as setWeekYear } from './setWeekYear/index.js'\nexport { default as setYear } from './setYear/index.js'\nexport { default as startOfDay } from './startOfDay/index.js'\nexport { default as startOfDecade } from './startOfDecade/index.js'\nexport { default as startOfHour } from './startOfHour/index.js'\nexport { default as startOfISOWeek } from './startOfISOWeek/index.js'\nexport { default as startOfISOWeekYear } from './startOfISOWeekYear/index.js'\nexport { default as startOfMinute } from './startOfMinute/index.js'\nexport { default as startOfMonth } from './startOfMonth/index.js'\nexport { default as startOfQuarter } from './startOfQuarter/index.js'\nexport { default as startOfSecond } from './startOfSecond/index.js'\nexport { default as startOfWeek } from './startOfWeek/index.js'\nexport { default as startOfWeekYear } from './startOfWeekYear/index.js'\nexport { default as startOfYear } from './startOfYear/index.js'\nexport { default as subDays } from './subDays/index.js'\nexport { default as subHours } from './subHours/index.js'\nexport { default as subISOWeekYears } from './subISOWeekYears/index.js'\nexport { default as subMilliseconds } from './subMilliseconds/index.js'\nexport { default as subMinutes } from './subMinutes/index.js'\nexport { default as subMonths } from './subMonths/index.js'\nexport { default as subQuarters } from './subQuarters/index.js'\nexport { default as subSeconds } from './subSeconds/index.js'\nexport { default as subWeeks } from './subWeeks/index.js'\nexport { default as subYears } from './subYears/index.js'\nexport { default as toDate } from './toDate/index.js'\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isAfter\n * @category Common Helpers\n * @summary Is the first date after the second one?\n *\n * @description\n * Is the first date after the second one?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date that should be after the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is after the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 after 11 February 1987?\n * var result = isAfter(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> true\n */\nexport default function isAfter(dirtyDate, dirtyDateToCompare) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var dateToCompare = toDate(dirtyDateToCompare)\n  return date.getTime() > dateToCompare.getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isBefore\n * @category Common Helpers\n * @summary Is the first date before the second one?\n *\n * @description\n * Is the first date before the second one?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date that should be before the other one to return true\n * @param {Date|Number} dateToCompare - the date to compare with\n * @returns {Boolean} the first date is before the second date\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Is 10 July 1989 before 11 February 1987?\n * var result = isBefore(new Date(1989, 6, 10), new Date(1987, 1, 11))\n * //=> false\n */\nexport default function isBefore(dirtyDate, dirtyDateToCompare) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var dateToCompare = toDate(dirtyDateToCompare)\n  return date.getTime() < dateToCompare.getTime()\n}\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {*} value - the value to check\n * @returns {boolean} true if the given value is a date\n * @throws {TypeError} 1 arguments required\n *\n * @example\n * // For a valid date:\n * var result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * var result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * var result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * var result = isDate({})\n * //=> false\n */\nexport default function isDate(value) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return (\n    value instanceof Date ||\n    (typeof value === 'object' &&\n      Object.prototype.toString.call(value) === '[object Date]')\n  )\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isEqual\n * @category Common Helpers\n * @summary Are the given dates equal?\n *\n * @description\n * Are the given dates equal?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to compare\n * @param {Date|Number} dateRight - the second date to compare\n * @returns {Boolean} the dates are equal\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 July 2014 06:30:45.000 and 2 July 2014 06:30:45.500 equal?\n * var result = isEqual(\n *   new Date(2014, 6, 2, 6, 30, 45, 0),\n *   new Date(2014, 6, 2, 6, 30, 45, 500)\n * )\n * //=> false\n */\nexport default function isEqual(dirtyLeftDate, dirtyRightDate) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyLeftDate)\n  var dateRight = toDate(dirtyRightDate)\n  return dateLeft.getTime() === dateRight.getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isFirstDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the first day of a month?\n *\n * @description\n * Is the given date the first day of a month?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is the first day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 1 September 2014 the first day of a month?\n * var result = isFirstDayOfMonth(new Date(2014, 8, 1))\n * //=> true\n */\nexport default function isFirstDayOfMonth(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return toDate(dirtyDate).getDate() === 1\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isFriday\n * @category Weekday Helpers\n * @summary Is the given date Friday?\n *\n * @description\n * Is the given date Friday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Friday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 26 September 2014 Friday?\n * var result = isFriday(new Date(2014, 8, 26))\n * //=> true\n */\nexport default function isFriday(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return toDate(dirtyDate).getDay() === 5\n}\n","import toDate from '../toDate/index.js'\nimport endOfDay from '../endOfDay/index.js'\nimport endOfMonth from '../endOfMonth/index.js'\n\n/**\n * @name isLastDayOfMonth\n * @category Month Helpers\n * @summary Is the given date the last day of a month?\n *\n * @description\n * Is the given date the last day of a month?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 28 February 2014 the last day of a month?\n * var result = isLastDayOfMonth(new Date(2014, 1, 28))\n * //=> true\n */\nexport default function isLastDayOfMonth(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  return endOfDay(date).getTime() === endOfMonth(date).getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isLeapYear\n * @category Year Helpers\n * @summary Is the given date in the leap year?\n *\n * @description\n * Is the given date in the leap year?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is in the leap year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 1 September 2012 in the leap year?\n * var result = isLeapYear(new Date(2012, 8, 1))\n * //=> true\n */\nexport default function isLeapYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n  return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isMonday\n * @category Weekday Helpers\n * @summary Is the given date Monday?\n *\n * @description\n * Is the given date Monday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Monday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 22 September 2014 Monday?\n * var result = isMonday(new Date(2014, 8, 22))\n * //=> true\n */\nexport default function isMonday(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return toDate(dirtyDate).getDay() === 1\n}\n","import startOfDay from '../startOfDay/index.js'\n\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day?\n *\n * @description\n * Are the given dates in the same day?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same day\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * var result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n */\nexport default function isSameDay(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeftStartOfDay = startOfDay(dirtyDateLeft)\n  var dateRightStartOfDay = startOfDay(dirtyDateRight)\n\n  return dateLeftStartOfDay.getTime() === dateRightStartOfDay.getTime()\n}\n","import startOfHour from '../startOfHour/index.js'\n\n/**\n * @name isSameHour\n * @category Hour Helpers\n * @summary Are the given dates in the same hour?\n *\n * @description\n * Are the given dates in the same hour?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same hour\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:00:00 and 4 September 06:30:00 in the same hour?\n * var result = isSameHour(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 6, 30))\n * //=> true\n */\nexport default function isSameHour(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeftStartOfHour = startOfHour(dirtyDateLeft)\n  var dateRightStartOfHour = startOfHour(dirtyDateRight)\n\n  return dateLeftStartOfHour.getTime() === dateRightStartOfHour.getTime()\n}\n","import isSameWeek from '../isSameWeek/index.js'\n\n/**\n * @name isSameISOWeek\n * @category ISO Week Helpers\n * @summary Are the given dates in the same ISO week?\n *\n * @description\n * Are the given dates in the same ISO week?\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same ISO week\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 1 September 2014 and 7 September 2014 in the same ISO week?\n * var result = isSameISOWeek(new Date(2014, 8, 1), new Date(2014, 8, 7))\n * //=> true\n */\nexport default function isSameISOWeek(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return isSameWeek(dirtyDateLeft, dirtyDateRight, { weekStartsOn: 1 })\n}\n","import startOfISOWeekYear from '../startOfISOWeekYear/index.js'\n\n/**\n * @name isSameISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Are the given dates in the same ISO week-numbering year?\n *\n * @description\n * Are the given dates in the same ISO week-numbering year?\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `isSameISOYear` to `isSameISOWeekYear`.\n *   \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n *   This change makes the name consistent with\n *   locale-dependent week-numbering year helpers, e.g., `getWeekYear`.\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same ISO week-numbering year\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 29 December 2003 and 2 January 2005 in the same ISO week-numbering year?\n * var result = isSameISOWeekYear(new Date(2003, 11, 29), new Date(2005, 0, 2))\n * //=> true\n */\nexport default function isSameISOWeekYear(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeftStartOfYear = startOfISOWeekYear(dirtyDateLeft)\n  var dateRightStartOfYear = startOfISOWeekYear(dirtyDateRight)\n\n  return dateLeftStartOfYear.getTime() === dateRightStartOfYear.getTime()\n}\n","import startOfMinute from '../startOfMinute/index.js'\n\n/**\n * @name isSameMinute\n * @category Minute Helpers\n * @summary Are the given dates in the same minute?\n *\n * @description\n * Are the given dates in the same minute?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same minute\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:30:00 and 4 September 2014 06:30:15\n * // in the same minute?\n * var result = isSameMinute(\n *   new Date(2014, 8, 4, 6, 30),\n *   new Date(2014, 8, 4, 6, 30, 15)\n * )\n * //=> true\n */\nexport default function isSameMinute(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeftStartOfMinute = startOfMinute(dirtyDateLeft)\n  var dateRightStartOfMinute = startOfMinute(dirtyDateRight)\n\n  return dateLeftStartOfMinute.getTime() === dateRightStartOfMinute.getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month?\n *\n * @description\n * Are the given dates in the same month?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same month\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * var result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */\nexport default function isSameMonth(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n  return (\n    dateLeft.getFullYear() === dateRight.getFullYear() &&\n    dateLeft.getMonth() === dateRight.getMonth()\n  )\n}\n","import startOfQuarter from '../startOfQuarter/index.js'\n\n/**\n * @name isSameQuarter\n * @category Quarter Helpers\n * @summary Are the given dates in the same year quarter?\n *\n * @description\n * Are the given dates in the same year quarter?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same quarter\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 1 January 2014 and 8 March 2014 in the same quarter?\n * var result = isSameQuarter(new Date(2014, 0, 1), new Date(2014, 2, 8))\n * //=> true\n */\nexport default function isSameQuarter(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeftStartOfQuarter = startOfQuarter(dirtyDateLeft)\n  var dateRightStartOfQuarter = startOfQuarter(dirtyDateRight)\n\n  return dateLeftStartOfQuarter.getTime() === dateRightStartOfQuarter.getTime()\n}\n","import startOfSecond from '../startOfSecond/index.js'\n\n/**\n * @name isSameSecond\n * @category Second Helpers\n * @summary Are the given dates in the same second?\n *\n * @description\n * Are the given dates in the same second?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same second\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 4 September 2014 06:30:15.000 and 4 September 2014 06:30.15.500\n * // in the same second?\n * var result = isSameSecond(\n *   new Date(2014, 8, 4, 6, 30, 15),\n *   new Date(2014, 8, 4, 6, 30, 15, 500)\n * )\n * //=> true\n */\nexport default function isSameSecond(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeftStartOfSecond = startOfSecond(dirtyDateLeft)\n  var dateRightStartOfSecond = startOfSecond(dirtyDateRight)\n\n  return dateLeftStartOfSecond.getTime() === dateRightStartOfSecond.getTime()\n}\n","import startOfWeek from '../startOfWeek/index.js'\n\n/**\n * @name isSameWeek\n * @category Week Helpers\n * @summary Are the given dates in the same week?\n *\n * @description\n * Are the given dates in the same week?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Boolean} the dates are in the same week\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // Are 31 August 2014 and 4 September 2014 in the same week?\n * var result = isSameWeek(new Date(2014, 7, 31), new Date(2014, 8, 4))\n * //=> true\n *\n * @example\n * // If week starts with Monday,\n * // are 31 August 2014 and 4 September 2014 in the same week?\n * var result = isSameWeek(new Date(2014, 7, 31), new Date(2014, 8, 4), {\n *   weekStartsOn: 1\n * })\n * //=> false\n */\nexport default function isSameWeek(\n  dirtyDateLeft,\n  dirtyDateRight,\n  dirtyOptions\n) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeftStartOfWeek = startOfWeek(dirtyDateLeft, dirtyOptions)\n  var dateRightStartOfWeek = startOfWeek(dirtyDateRight, dirtyOptions)\n\n  return dateLeftStartOfWeek.getTime() === dateRightStartOfWeek.getTime()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isSameYear\n * @category Year Helpers\n * @summary Are the given dates in the same year?\n *\n * @description\n * Are the given dates in the same year?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} dateLeft - the first date to check\n * @param {Date|Number} dateRight - the second date to check\n * @returns {Boolean} the dates are in the same year\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same year?\n * var result = isSameYear(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n */\nexport default function isSameYear(dirtyDateLeft, dirtyDateRight) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateLeft = toDate(dirtyDateLeft)\n  var dateRight = toDate(dirtyDateRight)\n  return dateLeft.getFullYear() === dateRight.getFullYear()\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isSaturday\n * @category Weekday Helpers\n * @summary Is the given date Saturday?\n *\n * @description\n * Is the given date Saturday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Saturday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 27 September 2014 Saturday?\n * var result = isSaturday(new Date(2014, 8, 27))\n * //=> true\n */\nexport default function isSaturday(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return toDate(dirtyDate).getDay() === 6\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isSunday\n * @category Weekday Helpers\n * @summary Is the given date Sunday?\n *\n * @description\n * Is the given date Sunday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Sunday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 21 September 2014 Sunday?\n * var result = isSunday(new Date(2014, 8, 21))\n * //=> true\n */\nexport default function isSunday(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return toDate(dirtyDate).getDay() === 0\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isThursday\n * @category Weekday Helpers\n * @summary Is the given date Thursday?\n *\n * @description\n * Is the given date Thursday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Thursday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 25 September 2014 Thursday?\n * var result = isThursday(new Date(2014, 8, 25))\n * //=> true\n */\nexport default function isThursday(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return toDate(dirtyDate).getDay() === 4\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isTuesday\n * @category Weekday Helpers\n * @summary Is the given date Tuesday?\n *\n * @description\n * Is the given date Tuesday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Tuesday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 23 September 2014 Tuesday?\n * var result = isTuesday(new Date(2014, 8, 23))\n * //=> true\n */\nexport default function isTuesday(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return toDate(dirtyDate).getDay() === 2\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Now `isValid` doesn't throw an exception\n *   if the first argument is not an instance of Date.\n *   Instead, argument is converted beforehand using `toDate`.\n *\n *   Examples:\n *\n *   | `isValid` argument        | Before v2.0.0 | v2.0.0 onward |\n *   |---------------------------|---------------|---------------|\n *   | `new Date()`              | `true`        | `true`        |\n *   | `new Date('2016-01-01')`  | `true`        | `true`        |\n *   | `new Date('')`            | `false`       | `false`       |\n *   | `new Date(1488370835081)` | `true`        | `true`        |\n *   | `new Date(NaN)`           | `false`       | `false`       |\n *   | `'2016-01-01'`            | `TypeError`   | `true`        |\n *   | `''`                      | `TypeError`   | `false`       |\n *   | `1488370835081`           | `TypeError`   | `true`        |\n *   | `NaN`                     | `TypeError`   | `false`       |\n *\n *   We introduce this change to make *date-fns* consistent with ECMAScript behavior\n *   that try to coerce arguments to the expected type\n *   (which is also the case with other *date-fns* functions).\n *\n * @param {*} date - the date to check\n * @returns {Boolean} the date is valid\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // For the valid date:\n * var result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertable into a date:\n * var result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * var result = isValid(new Date(''))\n * //=> false\n */\nexport default function isValid(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  return !isNaN(date)\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isWednesday\n * @category Weekday Helpers\n * @summary Is the given date Wednesday?\n *\n * @description\n * Is the given date Wednesday?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date is Wednesday\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Is 24 September 2014 Wednesday?\n * var result = isWednesday(new Date(2014, 8, 24))\n * //=> true\n */\nexport default function isWednesday(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return toDate(dirtyDate).getDay() === 3\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isWeekend\n * @category Weekday Helpers\n * @summary Does the given date fall on a weekend?\n *\n * @description\n * Does the given date fall on a weekend?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to check\n * @returns {Boolean} the date falls on a weekend\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Does 5 October 2014 fall on a weekend?\n * var result = isWeekend(new Date(2014, 9, 5))\n * //=> true\n */\nexport default function isWeekend(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var day = date.getDay()\n  return day === 0 || day === 6\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name isWithinInterval\n * @category Interval Helpers\n * @summary Is the given date within the interval?\n *\n * @description\n * Is the given date within the interval?\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `isWithinRange` to `isWithinInterval`.\n *   This change was made to mirror the use of the word \"interval\" in standard ISO 8601:2004 terminology:\n *\n *   ```\n *   2.1.3\n *   time interval\n *   part of the time axis limited by two instants\n *   ```\n *\n *   Also, this function now accepts an object with `start` and `end` properties\n *   instead of two arguments as an interval.\n *   This function now throws `RangeError` if the start of the interval is after its end\n *   or if any date in the interval is `Invalid Date`.\n *\n *   ```javascript\n *   // Before v2.0.0\n *\n *   isWithinRange(\n *     new Date(2014, 0, 3),\n *     new Date(2014, 0, 1), new Date(2014, 0, 7)\n *   )\n *\n *   // v2.0.0 onward\n *\n *   isWithinInterval(\n *     new Date(2014, 0, 3),\n *     { start: new Date(2014, 0, 1), end: new Date(2014, 0, 7) }\n *   )\n *   ```\n *\n * @param {Date|Number} date - the date to check\n * @param {Interval} interval - the interval to check\n * @returns {Boolean} the date is within the interval\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} The start of an interval cannot be after its end\n * @throws {RangeError} Date in interval cannot be `Invalid Date`\n *\n * @example\n * // For the date within the interval:\n * isWithinInterval(new Date(2014, 0, 3), {\n *   start: new Date(2014, 0, 1),\n *   end: new Date(2014, 0, 7)\n * })\n * //=> true\n *\n * @example\n * // For the date outside of the interval:\n * isWithinInterval(new Date(2014, 0, 10), {\n *   start: new Date(2014, 0, 1),\n *   end: new Date(2014, 0, 7)\n * })\n * //=> false\n */\nexport default function isWithinInterval(dirtyDate, dirtyInterval) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var interval = dirtyInterval || {}\n  var time = toDate(dirtyDate).getTime()\n  var startTime = toDate(interval.start).getTime()\n  var endTime = toDate(interval.end).getTime()\n\n  // Throw an exception if start date is after end date or if any date is `Invalid Date`\n  if (!(startTime <= endTime)) {\n    throw new RangeError('Invalid interval')\n  }\n\n  return time >= startTime && time <= endTime\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name lastDayOfDecade\n * @category Decade Helpers\n * @summary Return the last day of a decade for the given date.\n *\n * @description\n * Return the last day of a decade for the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of a decade\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of a decade for 21 December 2012 21:12:00:\n * var result = lastDayOfDecade(new Date(2012, 11, 21, 21, 12, 00))\n * //=> Wed Dec 31 2019 00:00:00\n */\nexport default function lastDayOfDecade(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n  var decade = 9 + Math.floor(year / 10) * 10\n  date.setFullYear(decade + 1, 0, 0)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n","import lastDayOfWeek from '../lastDayOfWeek/index.js'\n\n/**\n * @name lastDayOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the last day of an ISO week for the given date.\n *\n * @description\n * Return the last day of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of an ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of an ISO week for 2 September 2014 11:55:00:\n * var result = lastDayOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function lastDayOfISOWeek(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return lastDayOfWeek(dirtyDate, { weekStartsOn: 1 })\n}\n","import getISOWeekYear from '../getISOWeekYear/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\n\n/**\n * @name lastDayOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the last day of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the last day of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `lastDayOfISOYear` to `lastDayOfISOWeekYear`.\n *   \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n *   This change makes the name consistent with\n *   locale-dependent week-numbering year helpers, e.g., `getWeekYear`.\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the end of an ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of an ISO week-numbering year for 2 July 2005:\n * var result = lastDayOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Sun Jan 01 2006 00:00:00\n */\nexport default function lastDayOfISOWeekYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var year = getISOWeekYear(dirtyDate)\n  var fourthOfJanuary = new Date(0)\n  fourthOfJanuary.setFullYear(year + 1, 0, 4)\n  fourthOfJanuary.setHours(0, 0, 0, 0)\n  var date = startOfISOWeek(fourthOfJanuary)\n  date.setDate(date.getDate() - 1)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name lastDayOfMonth\n * @category Month Helpers\n * @summary Return the last day of a month for the given date.\n *\n * @description\n * Return the last day of a month for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of a month for 2 September 2014 11:55:00:\n * var result = lastDayOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport default function lastDayOfMonth(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var month = date.getMonth()\n  date.setFullYear(date.getFullYear(), month + 1, 0)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name lastDayOfQuarter\n * @category Quarter Helpers\n * @summary Return the last day of a year quarter for the given date.\n *\n * @description\n * Return the last day of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @returns {Date} the last day of a quarter\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // The last day of a quarter for 2 September 2014 11:55:00:\n * var result = lastDayOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport default function lastDayOfQuarter(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var currentMonth = date.getMonth()\n  var month = currentMonth - (currentMonth % 3) + 3\n  date.setMonth(month, 0)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name lastDayOfWeek\n * @category Week Helpers\n * @summary Return the last day of a week for the given date.\n *\n * @description\n * Return the last day of a week for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Date} the last day of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The last day of a week for 2 September 2014 11:55:00:\n * var result = lastDayOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sat Sep 06 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the last day of the week for 2 September 2014 11:55:00:\n * var result = lastDayOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function lastDayOfWeek(dirtyDate, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeWeekStartsOn =\n    locale && locale.options && locale.options.weekStartsOn\n  var defaultWeekStartsOn =\n    localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n  var weekStartsOn =\n    options.weekStartsOn == null\n      ? defaultWeekStartsOn\n      : toInteger(options.weekStartsOn)\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6')\n  }\n\n  var date = toDate(dirtyDate)\n  var day = date.getDay()\n  var diff = (day < weekStartsOn ? -7 : 0) + 6 - (day - weekStartsOn)\n\n  date.setHours(0, 0, 0, 0)\n  date.setDate(date.getDate() + diff)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name lastDayOfYear\n * @category Year Helpers\n * @summary Return the last day of a year for the given date.\n *\n * @description\n * Return the last day of a year for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the last day of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The last day of a year for 2 September 2014 11:55:00:\n * var result = lastDayOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Dec 31 2014 00:00:00\n */\nexport default function lastDayOfYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n  date.setFullYear(year + 1, 0, 0)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n","import toDate from '../toDate/index.js'\nimport formatters from '../_lib/format/lightFormatters/index.js'\nimport getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport isValid from '../isValid/index.js'\nimport subMilliseconds from '../subMilliseconds/index.js'\n\n// This RegExp consists of three parts separated by `|`:\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /(\\w)\\1*|''|'(''|[^'])+('|$)|./g\n\nvar escapedStringRegExp = /^'(.*?)'?$/\nvar doubleQuoteRegExp = /''/g\n\n/**\n * @name lightFormat\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. Unlike `format`,\n * `lightFormat` doesn't use locales and outputs date using the most popular tokens.\n *\n * > ⚠️ Please note that the `lightFormat` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit                            | Pattern | Result examples                   |\n * |---------------------------------|---------|-----------------------------------|\n * | AM, PM                          | a..aaa  | AM, PM                            |\n * |                                 | aaaa    | a.m., p.m.                        |\n * |                                 | aaaaa   | a, p                              |\n * | Calendar year                   | y       | 44, 1, 1900, 2017                 |\n * |                                 | yy      | 44, 01, 00, 17                    |\n * |                                 | yyy     | 044, 001, 000, 017                |\n * |                                 | yyyy    | 0044, 0001, 1900, 2017            |\n * | Month (formatting)              | M       | 1, 2, ..., 12                     |\n * |                                 | MM      | 01, 02, ..., 12                   |\n * | Day of month                    | d       | 1, 2, ..., 31                     |\n * |                                 | dd      | 01, 02, ..., 31                   |\n * | Hour [1-12]                     | h       | 1, 2, ..., 11, 12                 |\n * |                                 | hh      | 01, 02, ..., 11, 12               |\n * | Hour [0-23]                     | H       | 0, 1, 2, ..., 23                  |\n * |                                 | HH      | 00, 01, 02, ..., 23               |\n * | Minute                          | m       | 0, 1, ..., 59                     |\n * |                                 | mm      | 00, 01, ..., 59                   |\n * | Second                          | s       | 0, 1, ..., 59                     |\n * |                                 | ss      | 00, 01, ..., 59                   |\n * | Timezone (ISO-8601 w/ Z)        | X       | -08, +0530, Z                     |\n * |                                 | XX      | -0800, +0530, Z                   |\n * |                                 | XXX     | -08:00, +05:30, Z                 |\n * |                                 | XXXX    | -0800, +0530, Z, +123456          |\n * |                                 | XXXXX   | -08:00, +05:30, Z, +12:34:56      |\n * | Timezone (ISO-8601 w/o Z)       | x       | -08, +0530, +00                   |\n * |                                 | xx      | -0800, +0530, +0000               |\n * |                                 | xxx     | -08:00, +05:30, +00:00            |\n * |                                 | xxxx    | -0800, +0530, +0000, +123456      |\n * |                                 | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |\n *\n * @param {Date|Number} date - the original date\n * @param {String} format - the string of tokens\n * @returns {String} the formatted date string\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * var result = format(new Date(2014, 1, 11), 'yyyy-MM-dd')\n * //=> '1987-02-11'\n */\nexport default function lightFormat(dirtyDate, dirtyFormatStr) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var formatStr = String(dirtyFormatStr)\n\n  var originalDate = toDate(dirtyDate)\n\n  if (!isValid(originalDate)) {\n    throw new RangeError('Invalid time value')\n  }\n\n  // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n  // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n  // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376\n  var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate)\n  var utcDate = subMilliseconds(originalDate, timezoneOffset)\n\n  var result = formatStr\n    .match(formattingTokensRegExp)\n    .map(function(substring) {\n      // Replace two single quote characters with one single quote character\n      if (substring === \"''\") {\n        return \"'\"\n      }\n\n      var firstCharacter = substring[0]\n      if (firstCharacter === \"'\") {\n        return cleanEscapedString(substring)\n      }\n\n      var formatter = formatters[firstCharacter]\n      if (formatter) {\n        return formatter(utcDate, substring, null, {})\n      }\n\n      return substring\n    })\n    .join('')\n\n  return result\n}\n\nfunction cleanEscapedString(input) {\n  return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\")\n}\n","export default function buildFormatLongFn (args) {\n  return function (dirtyOptions) {\n    var options = dirtyOptions || {}\n    var width = options.width ? String(options.width) : args.defaultWidth\n    var format = args.formats[width] || args.formats[args.defaultWidth]\n    return format\n  }\n}\n","export default function buildLocalizeFn (args) {\n  return function (dirtyIndex, dirtyOptions) {\n    var options = dirtyOptions || {}\n    var width = options.width ? String(options.width) : args.defaultWidth\n    var context = options.context ? String(options.context) : 'standalone'\n\n    var valuesArray\n    if (context === 'formatting' && args.formattingValues) {\n      valuesArray = args.formattingValues[width] || args.formattingValues[args.defaultFormattingWidth]\n    } else {\n      valuesArray = args.values[width] || args.values[args.defaultWidth]\n    }\n    var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex\n    return valuesArray[index]\n  }\n}\n","export default function buildMatchFn (args) {\n  return function (dirtyString, dirtyOptions) {\n    var string = String(dirtyString)\n    var options = dirtyOptions || {}\n    var width = options.width\n\n    var matchPattern = (width && args.matchPatterns[width]) || args.matchPatterns[args.defaultMatchWidth]\n    var matchResult = string.match(matchPattern)\n\n    if (!matchResult) {\n      return null\n    }\n    var matchedString = matchResult[0]\n\n    var parsePatterns = (width && args.parsePatterns[width]) || args.parsePatterns[args.defaultParseWidth]\n\n    var value\n    if (Object.prototype.toString.call(parsePatterns) === '[object Array]') {\n      value = parsePatterns.findIndex(function (pattern) {\n        return pattern.test(string)\n      })\n    } else {\n      value = findKey(parsePatterns, function (pattern) {\n        return pattern.test(string)\n      })\n    }\n\n    value = args.valueCallback ? args.valueCallback(value) : value\n    value = options.valueCallback ? options.valueCallback(value) : value\n\n    return {\n      value: value,\n      rest: string.slice(matchedString.length)\n    }\n  }\n}\n\nfunction findKey (object, predicate) {\n  for (var key in object) {\n    if (object.hasOwnProperty(key) && predicate(object[key])) {\n      return key\n    }\n  }\n}\n","export default function buildMatchPatternFn (args) {\n  return function (dirtyString, dirtyOptions) {\n    var string = String(dirtyString)\n    var options = dirtyOptions || {}\n\n    var matchResult = string.match(args.matchPattern)\n    if (!matchResult) {\n      return null\n    }\n    var matchedString = matchResult[0]\n\n    var parseResult = string.match(args.parsePattern)\n    if (!parseResult) {\n      return null\n    }\n    var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0]\n    value = options.valueCallback ? options.valueCallback(value) : value\n\n    return {\n      value: value,\n      rest: string.slice(matchedString.length)\n    }\n  }\n}\n","var formatDistanceLocale = {\n  lessThanXSeconds: {\n    one: 'less than a second',\n    other: 'less than {{count}} seconds'\n  },\n\n  xSeconds: {\n    one: '1 second',\n    other: '{{count}} seconds'\n  },\n\n  halfAMinute: 'half a minute',\n\n  lessThanXMinutes: {\n    one: 'less than a minute',\n    other: 'less than {{count}} minutes'\n  },\n\n  xMinutes: {\n    one: '1 minute',\n    other: '{{count}} minutes'\n  },\n\n  aboutXHours: {\n    one: 'about 1 hour',\n    other: 'about {{count}} hours'\n  },\n\n  xHours: {\n    one: '1 hour',\n    other: '{{count}} hours'\n  },\n\n  xDays: {\n    one: '1 day',\n    other: '{{count}} days'\n  },\n\n  aboutXMonths: {\n    one: 'about 1 month',\n    other: 'about {{count}} months'\n  },\n\n  xMonths: {\n    one: '1 month',\n    other: '{{count}} months'\n  },\n\n  aboutXYears: {\n    one: 'about 1 year',\n    other: 'about {{count}} years'\n  },\n\n  xYears: {\n    one: '1 year',\n    other: '{{count}} years'\n  },\n\n  overXYears: {\n    one: 'over 1 year',\n    other: 'over {{count}} years'\n  },\n\n  almostXYears: {\n    one: 'almost 1 year',\n    other: 'almost {{count}} years'\n  }\n}\n\nexport default function formatDistance (token, count, options) {\n  options = options || {}\n\n  var result\n  if (typeof formatDistanceLocale[token] === 'string') {\n    result = formatDistanceLocale[token]\n  } else if (count === 1) {\n    result = formatDistanceLocale[token].one\n  } else {\n    result = formatDistanceLocale[token].other.replace('{{count}}', count)\n  }\n\n  if (options.addSuffix) {\n    if (options.comparison > 0) {\n      return 'in ' + result\n    } else {\n      return result + ' ago'\n    }\n  }\n\n  return result\n}\n","import buildFormatLongFn from '../../../_lib/buildFormatLongFn/index.js'\n\nvar dateFormats = {\n  full: 'EEEE, MMMM do, y',\n  long: 'MMMM do, y',\n  medium: 'MMM d, y',\n  short: 'MM/dd/yyyy'\n}\n\nvar timeFormats = {\n  full: 'h:mm:ss a zzzz',\n  long: 'h:mm:ss a z',\n  medium: 'h:mm:ss a',\n  short: 'h:mm a'\n}\n\nvar dateTimeFormats = {\n  full: \"{{date}} 'at' {{time}}\",\n  long: \"{{date}} 'at' {{time}}\",\n  medium: '{{date}}, {{time}}',\n  short: '{{date}}, {{time}}'\n}\n\nvar formatLong = {\n  date: buildFormatLongFn({\n    formats: dateFormats,\n    defaultWidth: 'full'\n  }),\n\n  time: buildFormatLongFn({\n    formats: timeFormats,\n    defaultWidth: 'full'\n  }),\n\n  dateTime: buildFormatLongFn({\n    formats: dateTimeFormats,\n    defaultWidth: 'full'\n  })\n}\n\nexport default formatLong\n","var formatRelativeLocale = {\n  lastWeek: \"'last' eeee 'at' p\",\n  yesterday: \"'yesterday at' p\",\n  today: \"'today at' p\",\n  tomorrow: \"'tomorrow at' p\",\n  nextWeek: \"eeee 'at' p\",\n  other: 'P'\n}\n\nexport default function formatRelative (token, date, baseDate, options) {\n  return formatRelativeLocale[token]\n}\n","import buildLocalizeFn from '../../../_lib/buildLocalizeFn/index.js'\n\nvar eraValues = {\n  narrow: ['B', 'A'],\n  abbreviated: ['BC', 'AD'],\n  wide: ['Before Christ', 'Anno Domini']\n}\n\nvar quarterValues = {\n  narrow: ['1', '2', '3', '4'],\n  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],\n  wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']\n}\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nvar monthValues = {\n  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],\n  abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n  wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']\n}\n\nvar dayValues = {\n  narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n  short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n  abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n  wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n}\n\nvar dayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mi',\n    noon: 'n',\n    morning: 'morning',\n    afternoon: 'afternoon',\n    evening: 'evening',\n    night: 'night'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'morning',\n    afternoon: 'afternoon',\n    evening: 'evening',\n    night: 'night'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'morning',\n    afternoon: 'afternoon',\n    evening: 'evening',\n    night: 'night'\n  }\n}\nvar formattingDayPeriodValues = {\n  narrow: {\n    am: 'a',\n    pm: 'p',\n    midnight: 'mi',\n    noon: 'n',\n    morning: 'in the morning',\n    afternoon: 'in the afternoon',\n    evening: 'in the evening',\n    night: 'at night'\n  },\n  abbreviated: {\n    am: 'AM',\n    pm: 'PM',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'in the morning',\n    afternoon: 'in the afternoon',\n    evening: 'in the evening',\n    night: 'at night'\n  },\n  wide: {\n    am: 'a.m.',\n    pm: 'p.m.',\n    midnight: 'midnight',\n    noon: 'noon',\n    morning: 'in the morning',\n    afternoon: 'in the afternoon',\n    evening: 'in the evening',\n    night: 'at night'\n  }\n}\n\nfunction ordinalNumber (dirtyNumber, dirtyOptions) {\n  var number = Number(dirtyNumber)\n\n  // If ordinal numbers depend on context, for example,\n  // if they are different for different grammatical genders,\n  // use `options.unit`:\n  //\n  //   var options = dirtyOptions || {}\n  //   var unit = String(options.unit)\n  //\n  // where `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n  // 'day', 'hour', 'minute', 'second'\n\n  var rem100 = number % 100\n  if (rem100 > 20 || rem100 < 10) {\n    switch (rem100 % 10) {\n      case 1:\n        return number + 'st'\n      case 2:\n        return number + 'nd'\n      case 3:\n        return number + 'rd'\n    }\n  }\n  return number + 'th'\n}\n\nvar localize = {\n  ordinalNumber: ordinalNumber,\n\n  era: buildLocalizeFn({\n    values: eraValues,\n    defaultWidth: 'wide'\n  }),\n\n  quarter: buildLocalizeFn({\n    values: quarterValues,\n    defaultWidth: 'wide',\n    argumentCallback: function (quarter) {\n      return Number(quarter) - 1\n    }\n  }),\n\n  month: buildLocalizeFn({\n    values: monthValues,\n    defaultWidth: 'wide'\n  }),\n\n  day: buildLocalizeFn({\n    values: dayValues,\n    defaultWidth: 'wide'\n  }),\n\n  dayPeriod: buildLocalizeFn({\n    values: dayPeriodValues,\n    defaultWidth: 'wide',\n    formattingValues: formattingDayPeriodValues,\n    defaultFormattingWidth: 'wide'\n  })\n}\n\nexport default localize\n","import buildMatchPatternFn from '../../../_lib/buildMatchPatternFn/index.js'\nimport buildMatchFn from '../../../_lib/buildMatchFn/index.js'\n\nvar matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i\nvar parseOrdinalNumberPattern = /\\d+/i\n\nvar matchEraPatterns = {\n  narrow: /^(b|a)/i,\n  abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n  wide: /^(before christ|before common era|anno domini|common era)/i\n}\nvar parseEraPatterns = {\n  any: [/^b/i, /^(a|c)/i]\n}\n\nvar matchQuarterPatterns = {\n  narrow: /^[1234]/i,\n  abbreviated: /^q[1234]/i,\n  wide: /^[1234](th|st|nd|rd)? quarter/i\n}\nvar parseQuarterPatterns = {\n  any: [/1/i, /2/i, /3/i, /4/i]\n}\n\nvar matchMonthPatterns = {\n  narrow: /^[jfmasond]/i,\n  abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n  wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i\n}\nvar parseMonthPatterns = {\n  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],\n  any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]\n}\n\nvar matchDayPatterns = {\n  narrow: /^[smtwf]/i,\n  short: /^(su|mo|tu|we|th|fr|sa)/i,\n  abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n  wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i\n}\nvar parseDayPatterns = {\n  narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n  any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]\n}\n\nvar matchDayPeriodPatterns = {\n  narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n  any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i\n}\nvar parseDayPeriodPatterns = {\n  any: {\n    am: /^a/i,\n    pm: /^p/i,\n    midnight: /^mi/i,\n    noon: /^no/i,\n    morning: /morning/i,\n    afternoon: /afternoon/i,\n    evening: /evening/i,\n    night: /night/i\n  }\n}\n\nvar match = {\n  ordinalNumber: buildMatchPatternFn({\n    matchPattern: matchOrdinalNumberPattern,\n    parsePattern: parseOrdinalNumberPattern,\n    valueCallback: function (value) {\n      return parseInt(value, 10)\n    }\n  }),\n\n  era: buildMatchFn({\n    matchPatterns: matchEraPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseEraPatterns,\n    defaultParseWidth: 'any'\n  }),\n\n  quarter: buildMatchFn({\n    matchPatterns: matchQuarterPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseQuarterPatterns,\n    defaultParseWidth: 'any',\n    valueCallback: function (index) {\n      return index + 1\n    }\n  }),\n\n  month: buildMatchFn({\n    matchPatterns: matchMonthPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseMonthPatterns,\n    defaultParseWidth: 'any'\n  }),\n\n  day: buildMatchFn({\n    matchPatterns: matchDayPatterns,\n    defaultMatchWidth: 'wide',\n    parsePatterns: parseDayPatterns,\n    defaultParseWidth: 'any'\n  }),\n\n  dayPeriod: buildMatchFn({\n    matchPatterns: matchDayPeriodPatterns,\n    defaultMatchWidth: 'any',\n    parsePatterns: parseDayPeriodPatterns,\n    defaultParseWidth: 'any'\n  })\n}\n\nexport default match\n","import formatDistance from './_lib/formatDistance/index.js'\nimport formatLong from './_lib/formatLong/index.js'\nimport formatRelative from './_lib/formatRelative/index.js'\nimport localize from './_lib/localize/index.js'\nimport match from './_lib/match/index.js'\n\n/**\n * @type {Locale}\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}\n * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}\n */\nvar locale = {\n  formatDistance: formatDistance,\n  formatLong: formatLong,\n  formatRelative: formatRelative,\n  localize: localize,\n  match: match,\n  options: {\n    weekStartsOn: 0 /* Sunday */,\n    firstWeekContainsDate: 1\n  }\n}\n\nexport default locale\n","import toDate from '../toDate/index.js'\n\n/**\n * @name max\n * @category Common Helpers\n * @summary Return the latest of the given dates.\n *\n * @description\n * Return the latest of the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - `max` function now accepts an array of dates rather than spread arguments.\n *\n *   ```javascript\n *   // Before v2.0.0\n *   var date1 = new Date(1989, 6, 10)\n *   var date2 = new Date(1987, 1, 11)\n *   var maxDate = max(date1, date2)\n *\n *   // v2.0.0 onward:\n *   var dates = [new Date(1989, 6, 10), new Date(1987, 1, 11)]\n *   var maxDate = max(dates)\n *   ```\n *\n * @param {Date[]|Number[]} datesArray - the dates to compare\n * @returns {Date} the latest of the dates\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which of these dates is the latest?\n * var result = max([\n *   new Date(1989, 6, 10),\n *   new Date(1987, 1, 11),\n *   new Date(1995, 6, 2),\n *   new Date(1990, 0, 1)\n * ])\n * //=> Sun Jul 02 1995 00:00:00\n */\nexport default function max(dirtyDatesArray) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var datesArray\n  // `dirtyDatesArray` is undefined or null\n  if (dirtyDatesArray == null) {\n    datesArray = []\n\n    // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n  } else if (typeof dirtyDatesArray.forEach === 'function') {\n    datesArray = dirtyDatesArray\n\n    // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array\n  } else {\n    datesArray = Array.prototype.slice.call(dirtyDatesArray)\n  }\n\n  var result\n  datesArray.forEach(function(dirtyDate) {\n    var currentDate = toDate(dirtyDate)\n\n    if (result === undefined || result < currentDate || isNaN(currentDate)) {\n      result = currentDate\n    }\n  })\n\n  return result\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name min\n * @category Common Helpers\n * @summary Return the earliest of the given dates.\n *\n * @description\n * Return the earliest of the given dates.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - `min` function now accepts an array of dates rather than spread arguments.\n *\n *   ```javascript\n *   // Before v2.0.0\n *   var date1 = new Date(1989, 6, 10)\n *   var date2 = new Date(1987, 1, 11)\n *   var minDate = min(date1, date2)\n *\n *   // v2.0.0 onward:\n *   var dates = [new Date(1989, 6, 10), new Date(1987, 1, 11)]\n *   var minDate = min(dates)\n *   ```\n *\n * @param {Date[]|Number[]} datesArray - the dates to compare\n * @returns {Date} the earliest of the dates\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Which of these dates is the earliest?\n * var result = min([\n *   new Date(1989, 6, 10),\n *   new Date(1987, 1, 11),\n *   new Date(1995, 6, 2),\n *   new Date(1990, 0, 1)\n * ])\n * //=> Wed Feb 11 1987 00:00:00\n */\nexport default function min(dirtyDatesArray) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var datesArray\n  // `dirtyDatesArray` is undefined or null\n  if (dirtyDatesArray == null) {\n    datesArray = []\n\n    // `dirtyDatesArray` is Array, Set or Map, or object with custom `forEach` method\n  } else if (typeof dirtyDatesArray.forEach === 'function') {\n    datesArray = dirtyDatesArray\n\n    // If `dirtyDatesArray` is Array-like Object, convert to Array. Otherwise, make it empty Array\n  } else {\n    datesArray = Array.prototype.slice.call(dirtyDatesArray)\n  }\n\n  var result\n  datesArray.forEach(function(dirtyDate) {\n    var currentDate = toDate(dirtyDate)\n\n    if (result === undefined || result > currentDate || isNaN(currentDate)) {\n      result = currentDate\n    }\n  })\n\n  return result\n}\n","import getUTCWeekYear from '../../../_lib/getUTCWeekYear/index.js'\nimport setUTCDay from '../../../_lib/setUTCDay/index.js'\nimport setUTCWeek from '../../../_lib/setUTCWeek/index.js'\nimport startOfUTCWeek from '../../../_lib/startOfUTCWeek/index.js'\nimport setUTCISODay from '../../../_lib/setUTCISODay/index.js'\nimport setUTCISOWeek from '../../../_lib/setUTCISOWeek/index.js'\nimport startOfUTCISOWeek from '../../../_lib/startOfUTCISOWeek/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\nvar MILLISECONDS_IN_MINUTE = 60000\nvar MILLISECONDS_IN_SECOND = 1000\n\nvar numericPatterns = {\n  month: /^(1[0-2]|0?\\d)/, // 0 to 12\n  date: /^(3[0-1]|[0-2]?\\d)/, // 0 to 31\n  dayOfYear: /^(36[0-6]|3[0-5]\\d|[0-2]?\\d?\\d)/, // 0 to 366\n  week: /^(5[0-3]|[0-4]?\\d)/, // 0 to 53\n  hour23h: /^(2[0-3]|[0-1]?\\d)/, // 0 to 23\n  hour24h: /^(2[0-4]|[0-1]?\\d)/, // 0 to 24\n  hour11h: /^(1[0-1]|0?\\d)/, // 0 to 11\n  hour12h: /^(1[0-2]|0?\\d)/, // 0 to 12\n  minute: /^[0-5]?\\d/, // 0 to 59\n  second: /^[0-5]?\\d/, // 0 to 59\n\n  singleDigit: /^\\d/, // 0 to 9\n  twoDigits: /^\\d{1,2}/, // 0 to 99\n  threeDigits: /^\\d{1,3}/, // 0 to 999\n  fourDigits: /^\\d{1,4}/, // 0 to 9999\n\n  anyDigitsSigned: /^-?\\d+/,\n  singleDigitSigned: /^-?\\d/, // 0 to 9, -0 to -9\n  twoDigitsSigned: /^-?\\d{1,2}/, // 0 to 99, -0 to -99\n  threeDigitsSigned: /^-?\\d{1,3}/, // 0 to 999, -0 to -999\n  fourDigitsSigned: /^-?\\d{1,4}/ // 0 to 9999, -0 to -9999\n}\n\nvar timezonePatterns = {\n  basicOptionalMinutes: /^([+-])(\\d{2})(\\d{2})?|Z/,\n  basic: /^([+-])(\\d{2})(\\d{2})|Z/,\n  basicOptionalSeconds: /^([+-])(\\d{2})(\\d{2})((\\d{2}))?|Z/,\n  extended: /^([+-])(\\d{2}):(\\d{2})|Z/,\n  extendedOptionalSeconds: /^([+-])(\\d{2}):(\\d{2})(:(\\d{2}))?|Z/\n}\n\nfunction parseNumericPattern(pattern, string, valueCallback) {\n  var matchResult = string.match(pattern)\n\n  if (!matchResult) {\n    return null\n  }\n\n  var value = parseInt(matchResult[0], 10)\n\n  return {\n    value: valueCallback ? valueCallback(value) : value,\n    rest: string.slice(matchResult[0].length)\n  }\n}\n\nfunction parseTimezonePattern(pattern, string) {\n  var matchResult = string.match(pattern)\n\n  if (!matchResult) {\n    return null\n  }\n\n  // Input is 'Z'\n  if (matchResult[0] === 'Z') {\n    return {\n      value: 0,\n      rest: string.slice(1)\n    }\n  }\n\n  var sign = matchResult[1] === '+' ? 1 : -1\n  var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0\n  var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0\n  var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0\n\n  return {\n    value:\n      sign *\n      (hours * MILLISECONDS_IN_HOUR +\n        minutes * MILLISECONDS_IN_MINUTE +\n        seconds * MILLISECONDS_IN_SECOND),\n    rest: string.slice(matchResult[0].length)\n  }\n}\n\nfunction parseAnyDigitsSigned(string, valueCallback) {\n  return parseNumericPattern(\n    numericPatterns.anyDigitsSigned,\n    string,\n    valueCallback\n  )\n}\n\nfunction parseNDigits(n, string, valueCallback) {\n  switch (n) {\n    case 1:\n      return parseNumericPattern(\n        numericPatterns.singleDigit,\n        string,\n        valueCallback\n      )\n    case 2:\n      return parseNumericPattern(\n        numericPatterns.twoDigits,\n        string,\n        valueCallback\n      )\n    case 3:\n      return parseNumericPattern(\n        numericPatterns.threeDigits,\n        string,\n        valueCallback\n      )\n    case 4:\n      return parseNumericPattern(\n        numericPatterns.fourDigits,\n        string,\n        valueCallback\n      )\n    default:\n      return parseNumericPattern(\n        new RegExp('^\\\\d{1,' + n + '}'),\n        string,\n        valueCallback\n      )\n  }\n}\n\nfunction parseNDigitsSigned(n, string, valueCallback) {\n  switch (n) {\n    case 1:\n      return parseNumericPattern(\n        numericPatterns.singleDigitSigned,\n        string,\n        valueCallback\n      )\n    case 2:\n      return parseNumericPattern(\n        numericPatterns.twoDigitsSigned,\n        string,\n        valueCallback\n      )\n    case 3:\n      return parseNumericPattern(\n        numericPatterns.threeDigitsSigned,\n        string,\n        valueCallback\n      )\n    case 4:\n      return parseNumericPattern(\n        numericPatterns.fourDigitsSigned,\n        string,\n        valueCallback\n      )\n    default:\n      return parseNumericPattern(\n        new RegExp('^-?\\\\d{1,' + n + '}'),\n        string,\n        valueCallback\n      )\n  }\n}\n\nfunction dayPeriodEnumToHours(enumValue) {\n  switch (enumValue) {\n    case 'morning':\n      return 4\n    case 'evening':\n      return 17\n    case 'pm':\n    case 'noon':\n    case 'afternoon':\n      return 12\n    case 'am':\n    case 'midnight':\n    case 'night':\n    default:\n      return 0\n  }\n}\n\nfunction normalizeTwoDigitYear(twoDigitYear, currentYear) {\n  var isCommonEra = currentYear > 0\n  // Absolute number of the current year:\n  // 1 -> 1 AC\n  // 0 -> 1 BC\n  // -1 -> 2 BC\n  var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear\n\n  var result\n  if (absCurrentYear <= 50) {\n    result = twoDigitYear || 100\n  } else {\n    var rangeEnd = absCurrentYear + 50\n    var rangeEndCentury = Math.floor(rangeEnd / 100) * 100\n    var isPreviousCentury = twoDigitYear >= rangeEnd % 100\n    result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0)\n  }\n\n  return isCommonEra ? result : 1 - result\n}\n\nvar DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nvar DAYS_IN_MONTH_LEAP_YEAR = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\n// User for validation\nfunction isLeapYearIndex(year) {\n  return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0)\n}\n\n/*\n * |     | Unit                           |     | Unit                           |\n * |-----|--------------------------------|-----|--------------------------------|\n * |  a  | AM, PM                         |  A* | Milliseconds in day            |\n * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |\n * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |\n * |  d  | Day of month                   |  D  | Day of year                    |\n * |  e  | Local day of week              |  E  | Day of week                    |\n * |  f  |                                |  F* | Day of week in month           |\n * |  g* | Modified Julian day            |  G  | Era                            |\n * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |\n * |  i! | ISO day of week                |  I! | ISO week of year               |\n * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |\n * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |\n * |  l* | (deprecated)                   |  L  | Stand-alone month              |\n * |  m  | Minute                         |  M  | Month                          |\n * |  n  |                                |  N  |                                |\n * |  o! | Ordinal number modifier        |  O* | Timezone (GMT)                 |\n * |  p  |                                |  P  |                                |\n * |  q  | Stand-alone quarter            |  Q  | Quarter                        |\n * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |\n * |  s  | Second                         |  S  | Fraction of second             |\n * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |\n * |  u  | Extended year                  |  U* | Cyclic year                    |\n * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |\n * |  w  | Local week of year             |  W* | Week of month                  |\n * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |\n * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |\n * |  z* | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `parse` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n *   i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n *   `R` is supposed to be used in conjunction with `I` and `i`\n *   for universal ISO week-numbering date, whereas\n *   `Y` is supposed to be used in conjunction with `w` and `e`\n *   for week-numbering date specific to the locale.\n */\nvar parsers = {\n  // Era\n  G: {\n    priority: 140,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        // AD, BC\n        case 'G':\n        case 'GG':\n        case 'GGG':\n          return (\n            match.era(string, { width: 'abbreviated' }) ||\n            match.era(string, { width: 'narrow' })\n          )\n        // A, B\n        case 'GGGGG':\n          return match.era(string, { width: 'narrow' })\n        // Anno Domini, Before Christ\n        case 'GGGG':\n        default:\n          return (\n            match.era(string, { width: 'wide' }) ||\n            match.era(string, { width: 'abbreviated' }) ||\n            match.era(string, { width: 'narrow' })\n          )\n      }\n    },\n    set: function(date, flags, value, options) {\n      // Sets year 10 BC if BC, or 10 AC if AC\n      date.setUTCFullYear(value === 1 ? 10 : -9, 0, 1)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Year\n  y: {\n    // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns\n    // | Year     |     y | yy |   yyy |  yyyy | yyyyy |\n    // |----------|-------|----|-------|-------|-------|\n    // | AD 1     |     1 | 01 |   001 |  0001 | 00001 |\n    // | AD 12    |    12 | 12 |   012 |  0012 | 00012 |\n    // | AD 123   |   123 | 23 |   123 |  0123 | 00123 |\n    // | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |\n    // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n    priority: 130,\n    parse: function(string, token, match, options) {\n      var valueCallback = function(year) {\n        return {\n          year: year,\n          isTwoDigitYear: token === 'yy'\n        }\n      }\n\n      switch (token) {\n        case 'y':\n          return parseNDigits(4, string, valueCallback)\n        case 'yo':\n          return match.ordinalNumber(string, {\n            unit: 'year',\n            valueCallback: valueCallback\n          })\n        default:\n          return parseNDigits(token.length, string, valueCallback)\n      }\n    },\n    validate: function(date, value, options) {\n      return value.isTwoDigitYear || value.year > 0\n    },\n    set: function(date, flags, value, options) {\n      var currentYear = getUTCWeekYear(date, options)\n\n      if (value.isTwoDigitYear) {\n        var normalizedTwoDigitYear = normalizeTwoDigitYear(\n          value.year,\n          currentYear\n        )\n        date.setUTCFullYear(normalizedTwoDigitYear, 0, 1)\n        date.setUTCHours(0, 0, 0, 0)\n        return date\n      }\n\n      var year = currentYear > 0 ? value.year : 1 - value.year\n      date.setUTCFullYear(year, 0, 1)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Local week-numbering year\n  Y: {\n    priority: 130,\n    parse: function(string, token, match, options) {\n      var valueCallback = function(year) {\n        return {\n          year: year,\n          isTwoDigitYear: token === 'YY'\n        }\n      }\n\n      switch (token) {\n        case 'Y':\n          return parseNDigits(4, string, valueCallback)\n        case 'Yo':\n          return match.ordinalNumber(string, {\n            unit: 'year',\n            valueCallback: valueCallback\n          })\n        default:\n          return parseNDigits(token.length, string, valueCallback)\n      }\n    },\n    validate: function(date, value, options) {\n      return value.isTwoDigitYear || value.year > 0\n    },\n    set: function(date, flags, value, options) {\n      var currentYear = date.getUTCFullYear()\n\n      if (value.isTwoDigitYear) {\n        var normalizedTwoDigitYear = normalizeTwoDigitYear(\n          value.year,\n          currentYear\n        )\n        date.setUTCFullYear(\n          normalizedTwoDigitYear,\n          0,\n          options.firstWeekContainsDate\n        )\n        date.setUTCHours(0, 0, 0, 0)\n        return startOfUTCWeek(date, options)\n      }\n\n      var year = currentYear > 0 ? value.year : 1 - value.year\n      date.setUTCFullYear(year, 0, options.firstWeekContainsDate)\n      date.setUTCHours(0, 0, 0, 0)\n      return startOfUTCWeek(date, options)\n    }\n  },\n\n  // ISO week-numbering year\n  R: {\n    priority: 130,\n    parse: function(string, token, match, options) {\n      if (token === 'R') {\n        return parseNDigitsSigned(4, string)\n      }\n\n      return parseNDigitsSigned(token.length, string)\n    },\n    set: function(date, flags, value, options) {\n      var firstWeekOfYear = new Date(0)\n      firstWeekOfYear.setUTCFullYear(value, 0, 4)\n      firstWeekOfYear.setUTCHours(0, 0, 0, 0)\n      return startOfUTCISOWeek(firstWeekOfYear)\n    }\n  },\n\n  // Extended year\n  u: {\n    priority: 130,\n    parse: function(string, token, match, options) {\n      if (token === 'u') {\n        return parseNDigitsSigned(4, string)\n      }\n\n      return parseNDigitsSigned(token.length, string)\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCFullYear(value, 0, 1)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Quarter\n  Q: {\n    priority: 120,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        // 1, 2, 3, 4\n        case 'Q':\n        case 'QQ': // 01, 02, 03, 04\n          return parseNDigits(token.length, string)\n        // 1st, 2nd, 3rd, 4th\n        case 'Qo':\n          return match.ordinalNumber(string, { unit: 'quarter' })\n        // Q1, Q2, Q3, Q4\n        case 'QQQ':\n          return (\n            match.quarter(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.quarter(string, { width: 'narrow', context: 'formatting' })\n          )\n        // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n        case 'QQQQQ':\n          return match.quarter(string, {\n            width: 'narrow',\n            context: 'formatting'\n          })\n        // 1st quarter, 2nd quarter, ...\n        case 'QQQQ':\n        default:\n          return (\n            match.quarter(string, { width: 'wide', context: 'formatting' }) ||\n            match.quarter(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.quarter(string, { width: 'narrow', context: 'formatting' })\n          )\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 1 && value <= 4\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCMonth((value - 1) * 3, 1)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Stand-alone quarter\n  q: {\n    priority: 120,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        // 1, 2, 3, 4\n        case 'q':\n        case 'qq': // 01, 02, 03, 04\n          return parseNDigits(token.length, string)\n        // 1st, 2nd, 3rd, 4th\n        case 'qo':\n          return match.ordinalNumber(string, { unit: 'quarter' })\n        // Q1, Q2, Q3, Q4\n        case 'qqq':\n          return (\n            match.quarter(string, {\n              width: 'abbreviated',\n              context: 'standalone'\n            }) ||\n            match.quarter(string, { width: 'narrow', context: 'standalone' })\n          )\n        // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n        case 'qqqqq':\n          return match.quarter(string, {\n            width: 'narrow',\n            context: 'standalone'\n          })\n        // 1st quarter, 2nd quarter, ...\n        case 'qqqq':\n        default:\n          return (\n            match.quarter(string, { width: 'wide', context: 'standalone' }) ||\n            match.quarter(string, {\n              width: 'abbreviated',\n              context: 'standalone'\n            }) ||\n            match.quarter(string, { width: 'narrow', context: 'standalone' })\n          )\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 1 && value <= 4\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCMonth((value - 1) * 3, 1)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Month\n  M: {\n    priority: 110,\n    parse: function(string, token, match, options) {\n      var valueCallback = function(value) {\n        return value - 1\n      }\n\n      switch (token) {\n        // 1, 2, ..., 12\n        case 'M':\n          return parseNumericPattern(\n            numericPatterns.month,\n            string,\n            valueCallback\n          )\n        // 01, 02, ..., 12\n        case 'MM':\n          return parseNDigits(2, string, valueCallback)\n        // 1st, 2nd, ..., 12th\n        case 'Mo':\n          return match.ordinalNumber(string, {\n            unit: 'month',\n            valueCallback: valueCallback\n          })\n        // Jan, Feb, ..., Dec\n        case 'MMM':\n          return (\n            match.month(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.month(string, { width: 'narrow', context: 'formatting' })\n          )\n        // J, F, ..., D\n        case 'MMMMM':\n          return match.month(string, { width: 'narrow', context: 'formatting' })\n        // January, February, ..., December\n        case 'MMMM':\n        default:\n          return (\n            match.month(string, { width: 'wide', context: 'formatting' }) ||\n            match.month(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.month(string, { width: 'narrow', context: 'formatting' })\n          )\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 0 && value <= 11\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCMonth(value, 1)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Stand-alone month\n  L: {\n    priority: 110,\n    parse: function(string, token, match, options) {\n      var valueCallback = function(value) {\n        return value - 1\n      }\n\n      switch (token) {\n        // 1, 2, ..., 12\n        case 'L':\n          return parseNumericPattern(\n            numericPatterns.month,\n            string,\n            valueCallback\n          )\n        // 01, 02, ..., 12\n        case 'LL':\n          return parseNDigits(2, string, valueCallback)\n        // 1st, 2nd, ..., 12th\n        case 'Lo':\n          return match.ordinalNumber(string, {\n            unit: 'month',\n            valueCallback: valueCallback\n          })\n        // Jan, Feb, ..., Dec\n        case 'LLL':\n          return (\n            match.month(string, {\n              width: 'abbreviated',\n              context: 'standalone'\n            }) ||\n            match.month(string, { width: 'narrow', context: 'standalone' })\n          )\n        // J, F, ..., D\n        case 'LLLLL':\n          return match.month(string, { width: 'narrow', context: 'standalone' })\n        // January, February, ..., December\n        case 'LLLL':\n        default:\n          return (\n            match.month(string, { width: 'wide', context: 'standalone' }) ||\n            match.month(string, {\n              width: 'abbreviated',\n              context: 'standalone'\n            }) ||\n            match.month(string, { width: 'narrow', context: 'standalone' })\n          )\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 0 && value <= 11\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCMonth(value, 1)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Local week of year\n  w: {\n    priority: 100,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'w':\n          return parseNumericPattern(numericPatterns.week, string)\n        case 'wo':\n          return match.ordinalNumber(string, { unit: 'week' })\n        default:\n          return parseNDigits(token.length, string)\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 1 && value <= 53\n    },\n    set: function(date, flags, value, options) {\n      return startOfUTCWeek(setUTCWeek(date, value, options), options)\n    }\n  },\n\n  // ISO week of year\n  I: {\n    priority: 100,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'I':\n          return parseNumericPattern(numericPatterns.week, string)\n        case 'Io':\n          return match.ordinalNumber(string, { unit: 'week' })\n        default:\n          return parseNDigits(token.length, string)\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 1 && value <= 53\n    },\n    set: function(date, flags, value, options) {\n      return startOfUTCISOWeek(setUTCISOWeek(date, value, options), options)\n    }\n  },\n\n  // Day of the month\n  d: {\n    priority: 90,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'd':\n          return parseNumericPattern(numericPatterns.date, string)\n        case 'do':\n          return match.ordinalNumber(string, { unit: 'date' })\n        default:\n          return parseNDigits(token.length, string)\n      }\n    },\n    validate: function(date, value, options) {\n      var year = date.getUTCFullYear()\n      var isLeapYear = isLeapYearIndex(year)\n      var month = date.getUTCMonth()\n      if (isLeapYear) {\n        return value >= 1 && value <= DAYS_IN_MONTH_LEAP_YEAR[month]\n      } else {\n        return value >= 1 && value <= DAYS_IN_MONTH[month]\n      }\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCDate(value)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Day of year\n  D: {\n    priority: 90,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'D':\n        case 'DD':\n          return parseNumericPattern(numericPatterns.dayOfYear, string)\n        case 'Do':\n          return match.ordinalNumber(string, { unit: 'date' })\n        default:\n          return parseNDigits(token.length, string)\n      }\n    },\n    validate: function(date, value, options) {\n      var year = date.getUTCFullYear()\n      var isLeapYear = isLeapYearIndex(year)\n      if (isLeapYear) {\n        return value >= 1 && value <= 366\n      } else {\n        return value >= 1 && value <= 365\n      }\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCMonth(0, value)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Day of week\n  E: {\n    priority: 90,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        // Tue\n        case 'E':\n        case 'EE':\n        case 'EEE':\n          return (\n            match.day(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.day(string, { width: 'short', context: 'formatting' }) ||\n            match.day(string, { width: 'narrow', context: 'formatting' })\n          )\n        // T\n        case 'EEEEE':\n          return match.day(string, { width: 'narrow', context: 'formatting' })\n        // Tu\n        case 'EEEEEE':\n          return (\n            match.day(string, { width: 'short', context: 'formatting' }) ||\n            match.day(string, { width: 'narrow', context: 'formatting' })\n          )\n        // Tuesday\n        case 'EEEE':\n        default:\n          return (\n            match.day(string, { width: 'wide', context: 'formatting' }) ||\n            match.day(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.day(string, { width: 'short', context: 'formatting' }) ||\n            match.day(string, { width: 'narrow', context: 'formatting' })\n          )\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 0 && value <= 6\n    },\n    set: function(date, flags, value, options) {\n      date = setUTCDay(date, value, options)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Local day of week\n  e: {\n    priority: 90,\n    parse: function(string, token, match, options) {\n      var valueCallback = function(value) {\n        var wholeWeekDays = Math.floor((value - 1) / 7) * 7\n        return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays\n      }\n\n      switch (token) {\n        // 3\n        case 'e':\n        case 'ee': // 03\n          return parseNDigits(token.length, string, valueCallback)\n        // 3rd\n        case 'eo':\n          return match.ordinalNumber(string, {\n            unit: 'day',\n            valueCallback: valueCallback\n          })\n        // Tue\n        case 'eee':\n          return (\n            match.day(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.day(string, { width: 'short', context: 'formatting' }) ||\n            match.day(string, { width: 'narrow', context: 'formatting' })\n          )\n        // T\n        case 'eeeee':\n          return match.day(string, { width: 'narrow', context: 'formatting' })\n        // Tu\n        case 'eeeeee':\n          return (\n            match.day(string, { width: 'short', context: 'formatting' }) ||\n            match.day(string, { width: 'narrow', context: 'formatting' })\n          )\n        // Tuesday\n        case 'eeee':\n        default:\n          return (\n            match.day(string, { width: 'wide', context: 'formatting' }) ||\n            match.day(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.day(string, { width: 'short', context: 'formatting' }) ||\n            match.day(string, { width: 'narrow', context: 'formatting' })\n          )\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 0 && value <= 6\n    },\n    set: function(date, flags, value, options) {\n      date = setUTCDay(date, value, options)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Stand-alone local day of week\n  c: {\n    priority: 90,\n    parse: function(string, token, match, options) {\n      var valueCallback = function(value) {\n        var wholeWeekDays = Math.floor((value - 1) / 7) * 7\n        return ((value + options.weekStartsOn + 6) % 7) + wholeWeekDays\n      }\n\n      switch (token) {\n        // 3\n        case 'c':\n        case 'cc': // 03\n          return parseNDigits(token.length, string, valueCallback)\n        // 3rd\n        case 'co':\n          return match.ordinalNumber(string, {\n            unit: 'day',\n            valueCallback: valueCallback\n          })\n        // Tue\n        case 'ccc':\n          return (\n            match.day(string, {\n              width: 'abbreviated',\n              context: 'standalone'\n            }) ||\n            match.day(string, { width: 'short', context: 'standalone' }) ||\n            match.day(string, { width: 'narrow', context: 'standalone' })\n          )\n        // T\n        case 'ccccc':\n          return match.day(string, { width: 'narrow', context: 'standalone' })\n        // Tu\n        case 'cccccc':\n          return (\n            match.day(string, { width: 'short', context: 'standalone' }) ||\n            match.day(string, { width: 'narrow', context: 'standalone' })\n          )\n        // Tuesday\n        case 'cccc':\n        default:\n          return (\n            match.day(string, { width: 'wide', context: 'standalone' }) ||\n            match.day(string, {\n              width: 'abbreviated',\n              context: 'standalone'\n            }) ||\n            match.day(string, { width: 'short', context: 'standalone' }) ||\n            match.day(string, { width: 'narrow', context: 'standalone' })\n          )\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 0 && value <= 6\n    },\n    set: function(date, flags, value, options) {\n      date = setUTCDay(date, value, options)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // ISO day of week\n  i: {\n    priority: 90,\n    parse: function(string, token, match, options) {\n      var valueCallback = function(value) {\n        if (value === 0) {\n          return 7\n        }\n        return value\n      }\n\n      switch (token) {\n        // 2\n        case 'i':\n        case 'ii': // 02\n          return parseNDigits(token.length, string)\n        // 2nd\n        case 'io':\n          return match.ordinalNumber(string, { unit: 'day' })\n        // Tue\n        case 'iii':\n          return (\n            match.day(string, {\n              width: 'abbreviated',\n              context: 'formatting',\n              valueCallback: valueCallback\n            }) ||\n            match.day(string, {\n              width: 'short',\n              context: 'formatting',\n              valueCallback: valueCallback\n            }) ||\n            match.day(string, {\n              width: 'narrow',\n              context: 'formatting',\n              valueCallback: valueCallback\n            })\n          )\n        // T\n        case 'iiiii':\n          return match.day(string, {\n            width: 'narrow',\n            context: 'formatting',\n            valueCallback: valueCallback\n          })\n        // Tu\n        case 'iiiiii':\n          return (\n            match.day(string, {\n              width: 'short',\n              context: 'formatting',\n              valueCallback: valueCallback\n            }) ||\n            match.day(string, {\n              width: 'narrow',\n              context: 'formatting',\n              valueCallback: valueCallback\n            })\n          )\n        // Tuesday\n        case 'iiii':\n        default:\n          return (\n            match.day(string, {\n              width: 'wide',\n              context: 'formatting',\n              valueCallback: valueCallback\n            }) ||\n            match.day(string, {\n              width: 'abbreviated',\n              context: 'formatting',\n              valueCallback: valueCallback\n            }) ||\n            match.day(string, {\n              width: 'short',\n              context: 'formatting',\n              valueCallback: valueCallback\n            }) ||\n            match.day(string, {\n              width: 'narrow',\n              context: 'formatting',\n              valueCallback: valueCallback\n            })\n          )\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 1 && value <= 7\n    },\n    set: function(date, flags, value, options) {\n      date = setUTCISODay(date, value, options)\n      date.setUTCHours(0, 0, 0, 0)\n      return date\n    }\n  },\n\n  // AM or PM\n  a: {\n    priority: 80,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'a':\n        case 'aa':\n        case 'aaa':\n          return (\n            match.dayPeriod(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n          )\n        case 'aaaaa':\n          return match.dayPeriod(string, {\n            width: 'narrow',\n            context: 'formatting'\n          })\n        case 'aaaa':\n        default:\n          return (\n            match.dayPeriod(string, { width: 'wide', context: 'formatting' }) ||\n            match.dayPeriod(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n          )\n      }\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0)\n      return date\n    }\n  },\n\n  // AM, PM, midnight\n  b: {\n    priority: 80,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'b':\n        case 'bb':\n        case 'bbb':\n          return (\n            match.dayPeriod(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n          )\n        case 'bbbbb':\n          return match.dayPeriod(string, {\n            width: 'narrow',\n            context: 'formatting'\n          })\n        case 'bbbb':\n        default:\n          return (\n            match.dayPeriod(string, { width: 'wide', context: 'formatting' }) ||\n            match.dayPeriod(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n          )\n      }\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0)\n      return date\n    }\n  },\n\n  // in the morning, in the afternoon, in the evening, at night\n  B: {\n    priority: 80,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'B':\n        case 'BB':\n        case 'BBB':\n          return (\n            match.dayPeriod(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n          )\n        case 'BBBBB':\n          return match.dayPeriod(string, {\n            width: 'narrow',\n            context: 'formatting'\n          })\n        case 'BBBB':\n        default:\n          return (\n            match.dayPeriod(string, { width: 'wide', context: 'formatting' }) ||\n            match.dayPeriod(string, {\n              width: 'abbreviated',\n              context: 'formatting'\n            }) ||\n            match.dayPeriod(string, { width: 'narrow', context: 'formatting' })\n          )\n      }\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCHours(dayPeriodEnumToHours(value), 0, 0, 0)\n      return date\n    }\n  },\n\n  // Hour [1-12]\n  h: {\n    priority: 70,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'h':\n          return parseNumericPattern(numericPatterns.hour12h, string)\n        case 'ho':\n          return match.ordinalNumber(string, { unit: 'hour' })\n        default:\n          return parseNDigits(token.length, string)\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 1 && value <= 12\n    },\n    set: function(date, flags, value, options) {\n      var isPM = date.getUTCHours() >= 12\n      if (isPM && value < 12) {\n        date.setUTCHours(value + 12, 0, 0, 0)\n      } else if (!isPM && value === 12) {\n        date.setUTCHours(0, 0, 0, 0)\n      } else {\n        date.setUTCHours(value, 0, 0, 0)\n      }\n      return date\n    }\n  },\n\n  // Hour [0-23]\n  H: {\n    priority: 70,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'H':\n          return parseNumericPattern(numericPatterns.hour23h, string)\n        case 'Ho':\n          return match.ordinalNumber(string, { unit: 'hour' })\n        default:\n          return parseNDigits(token.length, string)\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 0 && value <= 23\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCHours(value, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Hour [0-11]\n  K: {\n    priority: 70,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'K':\n          return parseNumericPattern(numericPatterns.hour11h, string)\n        case 'Ko':\n          return match.ordinalNumber(string, { unit: 'hour' })\n        default:\n          return parseNDigits(token.length, string)\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 0 && value <= 11\n    },\n    set: function(date, flags, value, options) {\n      var isPM = date.getUTCHours() >= 12\n      if (isPM && value < 12) {\n        date.setUTCHours(value + 12, 0, 0, 0)\n      } else {\n        date.setUTCHours(value, 0, 0, 0)\n      }\n      return date\n    }\n  },\n\n  // Hour [1-24]\n  k: {\n    priority: 70,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'k':\n          return parseNumericPattern(numericPatterns.hour24h, string)\n        case 'ko':\n          return match.ordinalNumber(string, { unit: 'hour' })\n        default:\n          return parseNDigits(token.length, string)\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 1 && value <= 24\n    },\n    set: function(date, flags, value, options) {\n      var hours = value <= 24 ? value % 24 : value\n      date.setUTCHours(hours, 0, 0, 0)\n      return date\n    }\n  },\n\n  // Minute\n  m: {\n    priority: 60,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'm':\n          return parseNumericPattern(numericPatterns.minute, string)\n        case 'mo':\n          return match.ordinalNumber(string, { unit: 'minute' })\n        default:\n          return parseNDigits(token.length, string)\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 0 && value <= 59\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCMinutes(value, 0, 0)\n      return date\n    }\n  },\n\n  // Second\n  s: {\n    priority: 50,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 's':\n          return parseNumericPattern(numericPatterns.second, string)\n        case 'so':\n          return match.ordinalNumber(string, { unit: 'second' })\n        default:\n          return parseNDigits(token.length, string)\n      }\n    },\n    validate: function(date, value, options) {\n      return value >= 0 && value <= 59\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCSeconds(value, 0)\n      return date\n    }\n  },\n\n  // Fraction of second\n  S: {\n    priority: 30,\n    parse: function(string, token, match, options) {\n      var valueCallback = function(value) {\n        return Math.floor(value * Math.pow(10, -token.length + 3))\n      }\n      return parseNDigits(token.length, string, valueCallback)\n    },\n    set: function(date, flags, value, options) {\n      date.setUTCMilliseconds(value)\n      return date\n    }\n  },\n\n  // Timezone (ISO-8601. +00:00 is `'Z'`)\n  X: {\n    priority: 10,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'X':\n          return parseTimezonePattern(\n            timezonePatterns.basicOptionalMinutes,\n            string\n          )\n        case 'XX':\n          return parseTimezonePattern(timezonePatterns.basic, string)\n        case 'XXXX':\n          return parseTimezonePattern(\n            timezonePatterns.basicOptionalSeconds,\n            string\n          )\n        case 'XXXXX':\n          return parseTimezonePattern(\n            timezonePatterns.extendedOptionalSeconds,\n            string\n          )\n        case 'XXX':\n        default:\n          return parseTimezonePattern(timezonePatterns.extended, string)\n      }\n    },\n    set: function(date, flags, value, options) {\n      if (flags.timestampIsSet) {\n        return date\n      }\n      return new Date(date.getTime() - value)\n    }\n  },\n\n  // Timezone (ISO-8601)\n  x: {\n    priority: 10,\n    parse: function(string, token, match, options) {\n      switch (token) {\n        case 'x':\n          return parseTimezonePattern(\n            timezonePatterns.basicOptionalMinutes,\n            string\n          )\n        case 'xx':\n          return parseTimezonePattern(timezonePatterns.basic, string)\n        case 'xxxx':\n          return parseTimezonePattern(\n            timezonePatterns.basicOptionalSeconds,\n            string\n          )\n        case 'xxxxx':\n          return parseTimezonePattern(\n            timezonePatterns.extendedOptionalSeconds,\n            string\n          )\n        case 'xxx':\n        default:\n          return parseTimezonePattern(timezonePatterns.extended, string)\n      }\n    },\n    set: function(date, flags, value, options) {\n      if (flags.timestampIsSet) {\n        return date\n      }\n      return new Date(date.getTime() - value)\n    }\n  },\n\n  // Seconds timestamp\n  t: {\n    priority: 40,\n    parse: function(string, token, match, options) {\n      return parseAnyDigitsSigned(string)\n    },\n    set: function(date, flags, value, options) {\n      return [new Date(value * 1000), { timestampIsSet: true }]\n    }\n  },\n\n  // Milliseconds timestamp\n  T: {\n    priority: 20,\n    parse: function(string, token, match, options) {\n      return parseAnyDigitsSigned(string)\n    },\n    set: function(date, flags, value, options) {\n      return [new Date(value), { timestampIsSet: true }]\n    }\n  }\n}\n\nexport default parsers\n","import toInteger from '../_lib/toInteger/index.js'\nimport assign from '../_lib/assign/index.js'\nimport getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\nimport toDate from '../toDate/index.js'\nimport subMilliseconds from '../subMilliseconds/index.js'\nimport defaultLocale from '../locale/en-US/index.js'\nimport parsers from './_lib/parsers/index.js'\nimport {\n  isProtectedToken,\n  throwProtectedError\n} from '../_lib/protectedTokens/index.js'\n\nvar TIMEZONE_UNIT_PRIORITY = 10\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n//   (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n//   except a single quote symbol, which ends the sequence.\n//   Two quote characters do not end the sequence.\n//   If there is no matching single quote\n//   then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nvar formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g\n\nvar escapedStringRegExp = /^'(.*?)'?$/\nvar doubleQuoteRegExp = /''/g\n\nvar notWhitespaceRegExp = /\\S/\n\n/**\n * @name parse\n * @category Common Helpers\n * @summary Parse the date.\n *\n * @description\n * Return the date parsed from string using the given format string.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://git.io/fxCyr\n *\n * The characters in the format string wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n *\n * Format of the format string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 5 below the table).\n *\n * Accepted format string patterns:\n * | Unit                            |Prior| Pattern | Result examples                   | Notes |\n * |---------------------------------|-----|---------|-----------------------------------|-------|\n * | Era                             | 140 | G..GGG  | AD, BC                            |       |\n * |                                 |     | GGGG    | Anno Domini, Before Christ        | 2     |\n * |                                 |     | GGGGG   | A, B                              |       |\n * | Calendar year                   | 130 | y       | 44, 1, 1900, 2017, 9999           | 4     |\n * |                                 |     | yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | yy      | 44, 01, 00, 17                    | 4     |\n * |                                 |     | yyy     | 044, 001, 123, 999                | 4     |\n * |                                 |     | yyyy    | 0044, 0001, 1900, 2017            | 4     |\n * |                                 |     | yyyyy   | ...                               | 2,4   |\n * | Local week-numbering year       | 130 | Y       | 44, 1, 1900, 2017, 9000           | 4     |\n * |                                 |     | Yo      | 44th, 1st, 1900th, 9999999th      | 4,5   |\n * |                                 |     | YY      | 44, 01, 00, 17                    | 4,6   |\n * |                                 |     | YYY     | 044, 001, 123, 999                | 4     |\n * |                                 |     | YYYY    | 0044, 0001, 1900, 2017            | 4,6   |\n * |                                 |     | YYYYY   | ...                               | 2,4   |\n * | ISO week-numbering year         | 130 | R       | -43, 1, 1900, 2017, 9999, -9999   | 4,5   |\n * |                                 |     | RR      | -43, 01, 00, 17                   | 4,5   |\n * |                                 |     | RRR     | -043, 001, 123, 999, -999         | 4,5   |\n * |                                 |     | RRRR    | -0043, 0001, 2017, 9999, -9999    | 4,5   |\n * |                                 |     | RRRRR   | ...                               | 2,4,5 |\n * | Extended year                   | 130 | u       | -43, 1, 1900, 2017, 9999, -999    | 4     |\n * |                                 |     | uu      | -43, 01, 99, -99                  | 4     |\n * |                                 |     | uuu     | -043, 001, 123, 999, -999         | 4     |\n * |                                 |     | uuuu    | -0043, 0001, 2017, 9999, -9999    | 4     |\n * |                                 |     | uuuuu   | ...                               | 2,4   |\n * | Quarter (formatting)            | 120 | Q       | 1, 2, 3, 4                        |       |\n * |                                 |     | Qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | QQ      | 01, 02, 03, 04                    |       |\n * |                                 |     | QQQ     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | QQQQQ   | 1, 2, 3, 4                        | 4     |\n * | Quarter (stand-alone)           | 120 | q       | 1, 2, 3, 4                        |       |\n * |                                 |     | qo      | 1st, 2nd, 3rd, 4th                | 5     |\n * |                                 |     | qq      | 01, 02, 03, 04                    |       |\n * |                                 |     | qqq     | Q1, Q2, Q3, Q4                    |       |\n * |                                 |     | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |\n * |                                 |     | qqqqq   | 1, 2, 3, 4                        | 3     |\n * | Month (formatting)              | 110 | M       | 1, 2, ..., 12                     |       |\n * |                                 |     | Mo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | MM      | 01, 02, ..., 12                   |       |\n * |                                 |     | MMM     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | MMMM    | January, February, ..., December  | 2     |\n * |                                 |     | MMMMM   | J, F, ..., D                      |       |\n * | Month (stand-alone)             | 110 | L       | 1, 2, ..., 12                     |       |\n * |                                 |     | Lo      | 1st, 2nd, ..., 12th               | 5     |\n * |                                 |     | LL      | 01, 02, ..., 12                   |       |\n * |                                 |     | LLL     | Jan, Feb, ..., Dec                |       |\n * |                                 |     | LLLL    | January, February, ..., December  | 2     |\n * |                                 |     | LLLLL   | J, F, ..., D                      |       |\n * | Local week of year              | 100 | w       | 1, 2, ..., 53                     |       |\n * |                                 |     | wo      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | ww      | 01, 02, ..., 53                   |       |\n * | ISO week of year                | 100 | I       | 1, 2, ..., 53                     | 5     |\n * |                                 |     | Io      | 1st, 2nd, ..., 53th               | 5     |\n * |                                 |     | II      | 01, 02, ..., 53                   | 5     |\n * | Day of month                    |  90 | d       | 1, 2, ..., 31                     |       |\n * |                                 |     | do      | 1st, 2nd, ..., 31st               | 5     |\n * |                                 |     | dd      | 01, 02, ..., 31                   |       |\n * | Day of year                     |  90 | D       | 1, 2, ..., 365, 366               | 6     |\n * |                                 |     | Do      | 1st, 2nd, ..., 365th, 366th       | 5     |\n * |                                 |     | DD      | 01, 02, ..., 365, 366             | 6     |\n * |                                 |     | DDD     | 001, 002, ..., 365, 366           |       |\n * |                                 |     | DDDD    | ...                               | 2     |\n * | Day of week (formatting)        |  90 | E..EEE  | Mon, Tue, Wed, ..., Su            |       |\n * |                                 |     | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | EEEEE   | M, T, W, T, F, S, S               |       |\n * |                                 |     | EEEEEE  | Mo, Tu, We, Th, Fr, Su, Sa        |       |\n * | ISO day of week (formatting)    |  90 | i       | 1, 2, 3, ..., 7                   | 5     |\n * |                                 |     | io      | 1st, 2nd, ..., 7th                | 5     |\n * |                                 |     | ii      | 01, 02, ..., 07                   | 5     |\n * |                                 |     | iii     | Mon, Tue, Wed, ..., Su            | 5     |\n * |                                 |     | iiii    | Monday, Tuesday, ..., Sunday      | 2,5   |\n * |                                 |     | iiiii   | M, T, W, T, F, S, S               | 5     |\n * |                                 |     | iiiiii  | Mo, Tu, We, Th, Fr, Su, Sa        | 5     |\n * | Local day of week (formatting)  |  90 | e       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | eo      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | ee      | 02, 03, ..., 01                   |       |\n * |                                 |     | eee     | Mon, Tue, Wed, ..., Su            |       |\n * |                                 |     | eeee    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | eeeee   | M, T, W, T, F, S, S               |       |\n * |                                 |     | eeeeee  | Mo, Tu, We, Th, Fr, Su, Sa        |       |\n * | Local day of week (stand-alone) |  90 | c       | 2, 3, 4, ..., 1                   |       |\n * |                                 |     | co      | 2nd, 3rd, ..., 1st                | 5     |\n * |                                 |     | cc      | 02, 03, ..., 01                   |       |\n * |                                 |     | ccc     | Mon, Tue, Wed, ..., Su            |       |\n * |                                 |     | cccc    | Monday, Tuesday, ..., Sunday      | 2     |\n * |                                 |     | ccccc   | M, T, W, T, F, S, S               |       |\n * |                                 |     | cccccc  | Mo, Tu, We, Th, Fr, Su, Sa        |       |\n * | AM, PM                          |  80 | a..aaa  | AM, PM                            |       |\n * |                                 |     | aaaa    | a.m., p.m.                        | 2     |\n * |                                 |     | aaaaa   | a, p                              |       |\n * | AM, PM, noon, midnight          |  80 | b..bbb  | AM, PM, noon, midnight            |       |\n * |                                 |     | bbbb    | a.m., p.m., noon, midnight        | 2     |\n * |                                 |     | bbbbb   | a, p, n, mi                       |       |\n * | Flexible day period             |  80 | B..BBB  | at night, in the morning, ...     |       |\n * |                                 |     | BBBB    | at night, in the morning, ...     | 2     |\n * |                                 |     | BBBBB   | at night, in the morning, ...     |       |\n * | Hour [1-12]                     |  70 | h       | 1, 2, ..., 11, 12                 |       |\n * |                                 |     | ho      | 1st, 2nd, ..., 11th, 12th         | 5     |\n * |                                 |     | hh      | 01, 02, ..., 11, 12               |       |\n * | Hour [0-23]                     |  70 | H       | 0, 1, 2, ..., 23                  |       |\n * |                                 |     | Ho      | 0th, 1st, 2nd, ..., 23rd          | 5     |\n * |                                 |     | HH      | 00, 01, 02, ..., 23               |       |\n * | Hour [0-11]                     |  70 | K       | 1, 2, ..., 11, 0                  |       |\n * |                                 |     | Ko      | 1st, 2nd, ..., 11th, 0th          | 5     |\n * |                                 |     | KK      | 1, 2, ..., 11, 0                  |       |\n * | Hour [1-24]                     |  70 | k       | 24, 1, 2, ..., 23                 |       |\n * |                                 |     | ko      | 24th, 1st, 2nd, ..., 23rd         | 5     |\n * |                                 |     | kk      | 24, 01, 02, ..., 23               |       |\n * | Minute                          |  60 | m       | 0, 1, ..., 59                     |       |\n * |                                 |     | mo      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | mm      | 00, 01, ..., 59                   |       |\n * | Second                          |  50 | s       | 0, 1, ..., 59                     |       |\n * |                                 |     | so      | 0th, 1st, ..., 59th               | 5     |\n * |                                 |     | ss      | 00, 01, ..., 59                   |       |\n * | Seconds timestamp               |  40 | t       | 512969520                         |       |\n * |                                 |     | tt      | ...                               | 2     |\n * | Fraction of second              |  30 | S       | 0, 1, ..., 9                      |       |\n * |                                 |     | SS      | 00, 01, ..., 99                   |       |\n * |                                 |     | SSS     | 000, 0001, ..., 999               |       |\n * |                                 |     | SSSS    | ...                               | 2     |\n * | Milliseconds timestamp          |  20 | T       | 512969520900                      |       |\n * |                                 |     | TT      | ...                               | 2     |\n * | Timezone (ISO-8601 w/ Z)        |  10 | X       | -08, +0530, Z                     |       |\n * |                                 |     | XX      | -0800, +0530, Z                   |       |\n * |                                 |     | XXX     | -08:00, +05:30, Z                 |       |\n * |                                 |     | XXXX    | -0800, +0530, Z, +123456          | 2     |\n * |                                 |     | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |\n * | Timezone (ISO-8601 w/o Z)       |  10 | x       | -08, +0530, +00                   |       |\n * |                                 |     | xx      | -0800, +0530, +0000               |       |\n * |                                 |     | xxx     | -08:00, +05:30, +00:00            | 2     |\n * |                                 |     | xxxx    | -0800, +0530, +0000, +123456      |       |\n * |                                 |     | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n *    are the same as \"stand-alone\" units, but are different in some languages.\n *    \"Formatting\" units are declined according to the rules of the language\n *    in the context of a date. \"Stand-alone\" units are always nominative singular.\n *    In `format` function, they will produce different result:\n *\n *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n *    `parse` will try to match both formatting and stand-alone units interchangably.\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n *    the single quote characters (see below).\n *    If the sequence is longer than listed in table:\n *    - for numerical units (`yyyyyyyy`) `parse` will try to match a number\n *      as wide as the sequence\n *    - for text units (`MMMMMMMM`) `parse` will try to match the widest variation of the unit.\n *      These variations are marked with \"2\" in the last column of the table.\n *\n * 3. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n *    These tokens represent the shortest form of the quarter.\n *\n * 4. The main difference between `y` and `u` patterns are B.C. years:\n *\n *    | Year | `y` | `u` |\n *    |------|-----|-----|\n *    | AC 1 |   1 |   1 |\n *    | BC 1 |   1 |   0 |\n *    | BC 2 |   2 |  -1 |\n *\n *    Also `yy` will try to guess the century of two digit year by proximity with `baseDate`:\n *\n *    `parse('50', 'yy', new Date(2018, 0, 1)) //=> Sat Jan 01 2050 00:00:00`\n *\n *    `parse('75', 'yy', new Date(2018, 0, 1)) //=> Wed Jan 01 1975 00:00:00`\n *\n *    while `uu` will just assign the year as is:\n *\n *    `parse('50', 'uu', new Date(2018, 0, 1)) //=> Sat Jan 01 0050 00:00:00`\n *\n *    `parse('75', 'uu', new Date(2018, 0, 1)) //=> Tue Jan 01 0075 00:00:00`\n *\n *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n *    except local week-numbering years are dependent on `options.weekStartsOn`\n *    and `options.firstWeekContainsDate` (compare [setISOWeekYear]{@link https://date-fns.org/docs/setISOWeekYear}\n *    and [setWeekYear]{@link https://date-fns.org/docs/setWeekYear}).\n *\n * 5. These patterns are not in the Unicode Technical Standard #35:\n *    - `i`: ISO day of week\n *    - `I`: ISO week of year\n *    - `R`: ISO week-numbering year\n *    - `o`: ordinal number modifier\n *\n * 6. These tokens are often confused with others. See: https://git.io/fxCyr\n *\n * Values will be assigned to the date in the descending order of its unit's priority.\n * Units of an equal priority overwrite each other in the order of appearance.\n *\n * If no values of higher priority are parsed (e.g. when parsing string 'January 1st' without a year),\n * the values will be taken from 3rd argument `baseDate` which works as a context of parsing.\n *\n * `baseDate` must be passed for correct work of the function.\n * If you're not sure which `baseDate` to supply, create a new instance of Date:\n * `parse('02/11/2014', 'MM/dd/yyyy', new Date())`\n * In this case parsing will be done in the context of the current date.\n * If `baseDate` is `Invalid Date` or a value not convertible to valid `Date`,\n * then `Invalid Date` will be returned.\n *\n * The result may vary by locale.\n *\n * If `formatString` matches with `dateString` but does not provides tokens, `baseDate` will be returned.\n *\n * If parsing failed, `Invalid Date` will be returned.\n * Invalid Date is a Date, whose time value is NaN.\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - Old `parse` was renamed to `toDate`.\n *   Now `parse` is a new function which parses a string using a provided format.\n *\n *   ```javascript\n *   // Before v2.0.0\n *   parse('2016-01-01')\n *\n *   // v2.0.0 onward\n *   toDate('2016-01-01')\n *   parse('2016-01-01', 'yyyy-MM-dd', new Date())\n *   ```\n *\n * @param {String} dateString - the string to parse\n * @param {String} formatString - the string of tokens\n * @param {Date|Number} baseDate - defines values missing from the parsed dateString\n * @param {Object} [options] - an object with options.\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @param {Boolean} [options.awareOfUnicodeTokens=false] - if true, allows usage of Unicode tokens causes confusion:\n *   - Some of the day of year tokens (`D`, `DD`) that are confused with the day of month tokens (`d`, `dd`).\n *   - Some of the local week-numbering year tokens (`YY`, `YYYY`) that are confused with the calendar year tokens (`yy`, `yyyy`).\n *   See: https://git.io/fxCyr\n * @returns {Date} the parsed date\n * @throws {TypeError} 3 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n * @throws {RangeError} `options.locale` must contain `match` property\n * @throws {RangeError} `options.awareOfUnicodeTokens` must be set to `true` to use `XX` token; see: https://git.io/fxCyr\n *\n * @example\n * // Parse 11 February 2014 from middle-endian format:\n * var result = parse('02/11/2014', 'MM/dd/yyyy', new Date())\n * //=> Tue Feb 11 2014 00:00:00\n *\n * @example\n * // Parse 28th of February in Esperanto locale in the context of 2010 year:\n * import eo from 'date-fns/locale/eo'\n * var result = parse('28-a de februaro', \"do 'de' MMMM\", new Date(2010, 0, 1), {\n *   locale: eo\n * })\n * //=> Sun Feb 28 2010 00:00:00\n */\nexport default function parse(\n  dirtyDateString,\n  dirtyFormatString,\n  dirtyBaseDate,\n  dirtyOptions\n) {\n  if (arguments.length < 3) {\n    throw new TypeError(\n      '3 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var dateString = String(dirtyDateString)\n  var formatString = String(dirtyFormatString)\n  var options = dirtyOptions || {}\n\n  var locale = options.locale || defaultLocale\n\n  if (!locale.match) {\n    throw new RangeError('locale must contain match property')\n  }\n\n  var localeFirstWeekContainsDate =\n    locale.options && locale.options.firstWeekContainsDate\n  var defaultFirstWeekContainsDate =\n    localeFirstWeekContainsDate == null\n      ? 1\n      : toInteger(localeFirstWeekContainsDate)\n  var firstWeekContainsDate =\n    options.firstWeekContainsDate == null\n      ? defaultFirstWeekContainsDate\n      : toInteger(options.firstWeekContainsDate)\n\n  // Test if weekStartsOn is between 1 and 7 _and_ is not NaN\n  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n    throw new RangeError(\n      'firstWeekContainsDate must be between 1 and 7 inclusively'\n    )\n  }\n\n  var localeWeekStartsOn = locale.options && locale.options.weekStartsOn\n  var defaultWeekStartsOn =\n    localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n  var weekStartsOn =\n    options.weekStartsOn == null\n      ? defaultWeekStartsOn\n      : toInteger(options.weekStartsOn)\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n  }\n\n  if (formatString === '') {\n    if (dateString === '') {\n      return toDate(dirtyBaseDate)\n    } else {\n      return new Date(NaN)\n    }\n  }\n\n  var subFnOptions = {\n    firstWeekContainsDate: firstWeekContainsDate,\n    weekStartsOn: weekStartsOn,\n    locale: locale\n  }\n\n  // If timezone isn't specified, it will be set to the system timezone\n  var setters = [\n    {\n      priority: TIMEZONE_UNIT_PRIORITY,\n      set: dateToSystemTimezone,\n      index: 0\n    }\n  ]\n\n  var i\n\n  var tokens = formatString.match(formattingTokensRegExp)\n\n  for (i = 0; i < tokens.length; i++) {\n    var token = tokens[i]\n\n    if (!options.awareOfUnicodeTokens && isProtectedToken(token)) {\n      throwProtectedError(token)\n    }\n\n    var firstCharacter = token[0]\n    var parser = parsers[firstCharacter]\n    if (parser) {\n      var parseResult = parser.parse(\n        dateString,\n        token,\n        locale.match,\n        subFnOptions\n      )\n\n      if (!parseResult) {\n        return new Date(NaN)\n      }\n\n      setters.push({\n        priority: parser.priority,\n        set: parser.set,\n        validate: parser.validate,\n        value: parseResult.value,\n        index: setters.length\n      })\n\n      dateString = parseResult.rest\n    } else {\n      // Replace two single quote characters with one single quote character\n      if (token === \"''\") {\n        token = \"'\"\n      } else if (firstCharacter === \"'\") {\n        token = cleanEscapedString(token)\n      }\n\n      // Cut token from string, or, if string doesn't match the token, return Invalid Date\n      if (dateString.indexOf(token) === 0) {\n        dateString = dateString.slice(token.length)\n      } else {\n        return new Date(NaN)\n      }\n    }\n  }\n\n  // Check if the remaining input contains something other than whitespace\n  if (dateString.length > 0 && notWhitespaceRegExp.test(dateString)) {\n    return new Date(NaN)\n  }\n\n  var uniquePrioritySetters = setters\n    .map(function(setter) {\n      return setter.priority\n    })\n    .sort(function(a, b) {\n      return b - a\n    })\n    .filter(function(priority, index, array) {\n      return array.indexOf(priority) === index\n    })\n    .map(function(priority) {\n      return setters\n        .filter(function(setter) {\n          return setter.priority === priority\n        })\n        .reverse()\n    })\n    .map(function(setterArray) {\n      return setterArray[0]\n    })\n\n  var date = toDate(dirtyBaseDate)\n\n  if (isNaN(date)) {\n    return new Date(NaN)\n  }\n\n  // Convert the date in system timezone to the same date in UTC+00:00 timezone.\n  // This ensures that when UTC functions will be implemented, locales will be compatible with them.\n  // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/37\n  var utcDate = subMilliseconds(date, getTimezoneOffsetInMilliseconds(date))\n\n  var flags = {}\n  for (i = 0; i < uniquePrioritySetters.length; i++) {\n    var setter = uniquePrioritySetters[i]\n\n    if (\n      setter.validate &&\n      !setter.validate(utcDate, setter.value, subFnOptions)\n    ) {\n      return new Date(NaN)\n    }\n\n    var result = setter.set(utcDate, flags, setter.value, subFnOptions)\n    // Result is tuple (date, flags)\n    if (result[0]) {\n      utcDate = result[0]\n      assign(flags, result[1])\n      // Result is date\n    } else {\n      utcDate = result\n    }\n  }\n\n  return utcDate\n}\n\nfunction dateToSystemTimezone(date, flags) {\n  if (flags.timestampIsSet) {\n    return date\n  }\n\n  var convertedDate = new Date(0)\n  convertedDate.setFullYear(\n    date.getUTCFullYear(),\n    date.getUTCMonth(),\n    date.getUTCDate()\n  )\n  convertedDate.setHours(\n    date.getUTCHours(),\n    date.getUTCMinutes(),\n    date.getUTCSeconds(),\n    date.getUTCMilliseconds()\n  )\n  return convertedDate\n}\n\nfunction cleanEscapedString(input) {\n  return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, \"'\")\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport getTimezoneOffsetInMilliseconds from '../_lib/getTimezoneOffsetInMilliseconds/index.js'\n\nvar MILLISECONDS_IN_HOUR = 3600000\nvar MILLISECONDS_IN_MINUTE = 60000\nvar DEFAULT_ADDITIONAL_DIGITS = 2\n\nvar patterns = {\n  dateTimeDelimiter: /[T ]/,\n  timeZoneDelimiter: /[Z ]/i,\n  timezone: /([Z+-].*)$/\n}\n\nvar dateRegex = /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/\nvar timeRegex = /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/\nvar timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/\n\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The previous `parse` implementation was renamed to `parseISO`.\n *\n *   ```javascript\n *   // Before v2.0.0\n *   parse('2016-01-01')\n *\n *   // v2.0.0 onward\n *   parseISO('2016-01-01')\n *   ```\n *\n * - `parseISO` now validates separate date and time values in ISO-8601 strings\n *   and returns `Invalid Date` if the date is invalid.\n *\n *   ```javascript\n *   parseISO('2018-13-32')\n *   //=> Invalid Date\n *   ```\n *\n * - `parseISO` now doesn't fall back to `new Date` constructor\n *   if it fails to parse a string argument. Instead, it returns `Invalid Date`.\n *\n * @param {String} argument - the value to convert\n * @param {Object} [options] - an object with options.\n * @param {0|1|2} [options.additionalDigits=2] - the additional number of digits in the extended year format\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.additionalDigits` must be 0, 1 or 2\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * var result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * var result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport default function parseISO(argument, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n\n  var additionalDigits =\n    options.additionalDigits == null\n      ? DEFAULT_ADDITIONAL_DIGITS\n      : toInteger(options.additionalDigits)\n  if (\n    additionalDigits !== 2 &&\n    additionalDigits !== 1 &&\n    additionalDigits !== 0\n  ) {\n    throw new RangeError('additionalDigits must be 0, 1 or 2')\n  }\n\n  if (\n    !(\n      typeof argument === 'string' ||\n      Object.prototype.toString.call(argument) === '[object String]'\n    )\n  ) {\n    return new Date(NaN)\n  }\n\n  var dateStrings = splitDateString(argument)\n  var parseYearResult = parseYear(dateStrings.date, additionalDigits)\n  var date = parseDate(parseYearResult.restDateString, parseYearResult.year)\n\n  if (isNaN(date) || !date) {\n    return new Date(NaN)\n  }\n\n  var timestamp = date.getTime()\n  var time = 0\n  var offset\n\n  if (dateStrings.time) {\n    time = parseTime(dateStrings.time)\n    if (isNaN(time)) {\n      return new Date(NaN)\n    }\n  }\n\n  if (dateStrings.timezone) {\n    offset = parseTimezone(dateStrings.timezone)\n    if (isNaN(offset)) {\n      return new Date(NaN)\n    }\n  } else {\n    var fullTime = timestamp + time\n    var fullTimeDate = new Date(fullTime)\n\n    offset = getTimezoneOffsetInMilliseconds(fullTimeDate)\n\n    // Adjust time when it's coming from DST\n    var fullTimeDateNextDay = new Date(fullTime)\n    fullTimeDateNextDay.setDate(fullTimeDate.getDate() + 1)\n    var offsetDiff =\n      getTimezoneOffsetInMilliseconds(fullTimeDateNextDay) - offset\n    if (offsetDiff > 0) {\n      offset += offsetDiff\n    }\n  }\n\n  return new Date(timestamp + time + offset)\n}\n\nfunction splitDateString(dateString) {\n  var dateStrings = {}\n  var array = dateString.split(patterns.dateTimeDelimiter)\n  var timeString\n\n  if (/:/.test(array[0])) {\n    dateStrings.date = null\n    timeString = array[0]\n  } else {\n    dateStrings.date = array[0]\n    timeString = array[1]\n    if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n      dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0]\n      timeString = dateString.substr(dateStrings.date.length, dateString.length)\n    }\n  }\n\n  if (timeString) {\n    var token = patterns.timezone.exec(timeString)\n    if (token) {\n      dateStrings.time = timeString.replace(token[1], '')\n      dateStrings.timezone = token[1]\n    } else {\n      dateStrings.time = timeString\n    }\n  }\n\n  return dateStrings\n}\n\nfunction parseYear(dateString, additionalDigits) {\n  var regex = new RegExp(\n    '^(?:(\\\\d{4}|[+-]\\\\d{' +\n      (4 + additionalDigits) +\n      '})|(\\\\d{2}|[+-]\\\\d{' +\n      (2 + additionalDigits) +\n      '})$)'\n  )\n\n  var captures = dateString.match(regex)\n  // Invalid ISO-formatted year\n  if (!captures) return { year: null }\n\n  var year = captures[1] && parseInt(captures[1])\n  var century = captures[2] && parseInt(captures[2])\n\n  return {\n    year: century == null ? year : century * 100,\n    restDateString: dateString.slice((captures[1] || captures[2]).length)\n  }\n}\n\nfunction parseDate(dateString, year) {\n  // Invalid ISO-formatted year\n  if (year === null) return null\n\n  var captures = dateString.match(dateRegex)\n  // Invalid ISO-formatted string\n  if (!captures) return null\n\n  var isWeekDate = !!captures[4]\n  var dayOfYear = parseDateUnit(captures[1])\n  var month = parseDateUnit(captures[2]) - 1\n  var day = parseDateUnit(captures[3])\n  var week = parseDateUnit(captures[4]) - 1\n  var dayOfWeek = parseDateUnit(captures[5]) - 1\n\n  if (isWeekDate) {\n    if (!validateWeekDate(year, week, dayOfWeek)) {\n      return new Date(NaN)\n    }\n    return dayOfISOWeekYear(year, week, dayOfWeek)\n  } else {\n    var date = new Date(0)\n    if (\n      !validateDate(year, month, day) ||\n      !validateDayOfYearDate(year, dayOfYear)\n    ) {\n      return new Date(NaN)\n    }\n    date.setUTCFullYear(year, month, Math.max(dayOfYear, day))\n    return date\n  }\n}\n\nfunction parseDateUnit(value) {\n  return value ? parseInt(value) : 1\n}\n\nfunction parseTime(timeString) {\n  var captures = timeString.match(timeRegex)\n  if (!captures) return null // Invalid ISO-formatted time\n\n  var hours = parseTimeUnit(captures[1])\n  var minutes = parseTimeUnit(captures[2])\n  var seconds = parseTimeUnit(captures[3])\n\n  if (!validateTime(hours, minutes, seconds)) {\n    return NaN\n  }\n\n  return (\n    (hours % 24) * MILLISECONDS_IN_HOUR +\n    minutes * MILLISECONDS_IN_MINUTE +\n    seconds * 1000\n  )\n}\n\nfunction parseTimeUnit(value) {\n  return (value && parseFloat(value.replace(',', '.'))) || 0\n}\n\nfunction parseTimezone(timezoneString) {\n  if (timezoneString === 'Z') return 0\n\n  var captures = timezoneString.match(timezoneRegex)\n  if (!captures) return 0\n\n  var sign = captures[1] === '+' ? -1 : 1\n  var hours = parseInt(captures[2])\n  var minutes = (captures[3] && parseInt(captures[3])) || 0\n\n  if (!validateTimezone(hours, minutes)) {\n    return NaN\n  }\n\n  return (\n    sign * (hours * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE)\n  )\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n  var date = new Date(0)\n  date.setUTCFullYear(isoWeekYear, 0, 4)\n  var fourthOfJanuaryDay = date.getUTCDay() || 7\n  var diff = (week || 0) * 7 + (day || 0) + 1 - fourthOfJanuaryDay\n  date.setUTCDate(date.getUTCDate() + diff)\n  return date\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nvar daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\nfunction isLeapYearIndex(year) {\n  return year % 400 === 0 || (year % 4 === 0 && year % 100)\n}\n\nfunction validateDate(year, month, date) {\n  return !(\n    month < 0 ||\n    month > 11 ||\n    date < 1 ||\n    date > (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28))\n  )\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n  return !(dayOfYear < 1 || dayOfYear > (isLeapYearIndex(year) ? 366 : 365))\n}\n\nfunction validateWeekDate(_year, week, day) {\n  return !(week < 0 || week > 52 || day < 0 || day > 6)\n}\n\nfunction validateTime(hours, minutes, seconds) {\n  return !(\n    seconds < 0 ||\n    seconds >= 60 ||\n    minutes < 0 ||\n    minutes >= 60 ||\n    hours < 0 ||\n    hours >= 25\n  )\n}\n\nfunction validateTimezone(_hours, minutes) {\n  return !(minutes < 0 || minutes > 59)\n}\n","import toDate from '../toDate/index.js'\nimport toInteger from '../_lib/toInteger/index.js'\n\n/**\n * @name roundToNearestMinutes\n * @category Minute Helpers\n * @summary Rounds the given date to the nearest minute\n *\n * @description\n * Rounds the given date to the nearest minute\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to round\n * @param {Object} [options] - an object with options.\n * @param {Number} [options.nearestTo=1] - passed to `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}\n * @returns {Date} the new date rounded to the closest minute\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.nearestTo` must be between 1 and 30\n *\n * @example\n * // Round 10 July 2014 12:12:34 to nearest minute:\n * var result = roundToNearestMinutes(new Date(2014, 6, 10, 12, 12, 34))\n * //=> Thu Jul 10 2014 12:13:00\n */\nexport default function roundToNearestMinutes(dirtyDate, options) {\n  if (arguments.length < 1) {\n    throw new TypeError('1 argument required, but only none provided present')\n  }\n\n  var nearestTo =\n    options && 'nearestTo' in options ? toInteger(options.nearestTo) : 1\n\n  if (nearestTo < 1 || nearestTo > 30) {\n    throw new RangeError('`options.nearestTo` must be between 1 and 30')\n  }\n\n  var date = toDate(dirtyDate)\n  var seconds = date.getSeconds() // relevant if nearestTo is 1, which is the default case\n  var minutes = date.getMinutes() + seconds / 60\n  var roundedMinutes = Math.floor(minutes / nearestTo) * nearestTo\n  var remainderMinutes = minutes % nearestTo\n  var addedMinutes = Math.round(remainderMinutes / nearestTo) * nearestTo\n\n  return new Date(\n    date.getFullYear(),\n    date.getMonth(),\n    date.getDate(),\n    date.getHours(),\n    roundedMinutes + addedMinutes\n  )\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setDate\n * @category Day Helpers\n * @summary Set the day of the month to the given date.\n *\n * @description\n * Set the day of the month to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} dayOfMonth - the day of the month of the new date\n * @returns {Date} the new date with the day of the month set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 30th day of the month to 1 September 2014:\n * var result = setDate(new Date(2014, 8, 1), 30)\n * //=> Tue Sep 30 2014 00:00:00\n */\nexport default function setDate(dirtyDate, dirtyDayOfMonth) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var dayOfMonth = toInteger(dirtyDayOfMonth)\n  date.setDate(dayOfMonth)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport addDays from '../addDays/index.js'\n\n/**\n * @name setDay\n * @category Weekday Helpers\n * @summary Set the day of the week to the given date.\n *\n * @description\n * Set the day of the week to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} day - the day of the week of the new date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Date} the new date with the day of the week set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * var result = setDay(new Date(2014, 8, 1), 0)\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If week starts with Monday, set Sunday to 1 September 2014:\n * var result = setDay(new Date(2014, 8, 1), 0, { weekStartsOn: 1 })\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function setDay(dirtyDate, dirtyDay, dirtyOptions) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeWeekStartsOn =\n    locale && locale.options && locale.options.weekStartsOn\n  var defaultWeekStartsOn =\n    localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n  var weekStartsOn =\n    options.weekStartsOn == null\n      ? defaultWeekStartsOn\n      : toInteger(options.weekStartsOn)\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n  }\n\n  var date = toDate(dirtyDate, options)\n  var day = toInteger(dirtyDay)\n  var currentDay = date.getDay()\n\n  var remainder = day % 7\n  var dayIndex = (remainder + 7) % 7\n\n  var diff = (dayIndex < weekStartsOn ? 7 : 0) + day - currentDay\n  return addDays(date, diff, options)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setDayOfYear\n * @category Day Helpers\n * @summary Set the day of the year to the given date.\n *\n * @description\n * Set the day of the year to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} dayOfYear - the day of the year of the new date\n * @returns {Date} the new date with the day of the year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 2nd day of the year to 2 July 2014:\n * var result = setDayOfYear(new Date(2014, 6, 2), 2)\n * //=> Thu Jan 02 2014 00:00:00\n */\nexport default function setDayOfYear(dirtyDate, dirtyDayOfYear) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var dayOfYear = toInteger(dirtyDayOfYear)\n  date.setMonth(0)\n  date.setDate(dayOfYear)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setHours\n * @category Hour Helpers\n * @summary Set the hours to the given date.\n *\n * @description\n * Set the hours to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} hours - the hours of the new date\n * @returns {Date} the new date with the hours set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 4 hours to 1 September 2014 11:30:00:\n * var result = setHours(new Date(2014, 8, 1, 11, 30), 4)\n * //=> Mon Sep 01 2014 04:30:00\n */\nexport default function setHours(dirtyDate, dirtyHours) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var hours = toInteger(dirtyHours)\n  date.setHours(hours)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport addDays from '../addDays/index.js'\nimport getISODay from '../getISODay/index.js'\n\n/**\n * @name setISODay\n * @category Weekday Helpers\n * @summary Set the day of the ISO week to the given date.\n *\n * @description\n * Set the day of the ISO week to the given date.\n * ISO week starts with Monday.\n * 7 is the index of Sunday, 1 is the index of Monday etc.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} day - the day of the ISO week of the new date\n * @returns {Date} the new date with the day of the ISO week set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set Sunday to 1 September 2014:\n * var result = setISODay(new Date(2014, 8, 1), 7)\n * //=> Sun Sep 07 2014 00:00:00\n */\nexport default function setISODay(dirtyDate, dirtyDay) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var day = toInteger(dirtyDay)\n  var currentDay = getISODay(date)\n  var diff = day - currentDay\n  return addDays(date, diff)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport getISOWeek from '../getISOWeek/index.js'\n\n/**\n * @name setISOWeek\n * @category ISO Week Helpers\n * @summary Set the ISO week to the given date.\n *\n * @description\n * Set the ISO week to the given date, saving the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} isoWeek - the ISO week of the new date\n * @returns {Date} the new date with the ISO week set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 53rd ISO week to 7 August 2004:\n * var result = setISOWeek(new Date(2004, 7, 7), 53)\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport default function setISOWeek(dirtyDate, dirtyISOWeek) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var isoWeek = toInteger(dirtyISOWeek)\n  var diff = getISOWeek(date) - isoWeek\n  date.setDate(date.getDate() - diff * 7)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport startOfISOWeekYear from '../startOfISOWeekYear/index.js'\nimport differenceInCalendarDays from '../differenceInCalendarDays/index.js'\n\n/**\n * @name setISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Set the ISO week-numbering year to the given date.\n *\n * @description\n * Set the ISO week-numbering year to the given date,\n * saving the week number and the weekday number.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `setISOYear` to `setISOWeekYear`.\n *   \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n *   This change makes the name consistent with\n *   locale-dependent week-numbering year helpers, e.g., `setWeekYear`.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} isoWeekYear - the ISO week-numbering year of the new date\n * @returns {Date} the new date with the ISO week-numbering year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set ISO week-numbering year 2007 to 29 December 2008:\n * var result = setISOWeekYear(new Date(2008, 11, 29), 2007)\n * //=> Mon Jan 01 2007 00:00:00\n */\nexport default function setISOWeekYear(dirtyDate, dirtyISOWeekYear) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var isoWeekYear = toInteger(dirtyISOWeekYear)\n  var diff = differenceInCalendarDays(date, startOfISOWeekYear(date))\n  var fourthOfJanuary = new Date(0)\n  fourthOfJanuary.setFullYear(isoWeekYear, 0, 4)\n  fourthOfJanuary.setHours(0, 0, 0, 0)\n  date = startOfISOWeekYear(fourthOfJanuary)\n  date.setDate(date.getDate() + diff)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setMilliseconds\n * @category Millisecond Helpers\n * @summary Set the milliseconds to the given date.\n *\n * @description\n * Set the milliseconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} milliseconds - the milliseconds of the new date\n * @returns {Date} the new date with the milliseconds set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 300 milliseconds to 1 September 2014 11:30:40.500:\n * var result = setMilliseconds(new Date(2014, 8, 1, 11, 30, 40, 500), 300)\n * //=> Mon Sep 01 2014 11:30:40.300\n */\nexport default function setMilliseconds(dirtyDate, dirtyMilliseconds) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var milliseconds = toInteger(dirtyMilliseconds)\n  date.setMilliseconds(milliseconds)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setMinutes\n * @category Minute Helpers\n * @summary Set the minutes to the given date.\n *\n * @description\n * Set the minutes to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} minutes - the minutes of the new date\n * @returns {Date} the new date with the minutes set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 minutes to 1 September 2014 11:30:40:\n * var result = setMinutes(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:45:40\n */\nexport default function setMinutes(dirtyDate, dirtyMinutes) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var minutes = toInteger(dirtyMinutes)\n  date.setMinutes(minutes)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport getDaysInMonth from '../getDaysInMonth/index.js'\n\n/**\n * @name setMonth\n * @category Month Helpers\n * @summary Set the month to the given date.\n *\n * @description\n * Set the month to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} month - the month of the new date\n * @returns {Date} the new date with the month set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set February to 1 September 2014:\n * var result = setMonth(new Date(2014, 8, 1), 1)\n * //=> Sat Feb 01 2014 00:00:00\n */\nexport default function setMonth(dirtyDate, dirtyMonth) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var month = toInteger(dirtyMonth)\n  var year = date.getFullYear()\n  var day = date.getDate()\n\n  var dateWithDesiredMonth = new Date(0)\n  dateWithDesiredMonth.setFullYear(year, month, 15)\n  dateWithDesiredMonth.setHours(0, 0, 0, 0)\n  var daysInMonth = getDaysInMonth(dateWithDesiredMonth)\n  // Set the last day of the new month\n  // if the original date was the last day of the longer month\n  date.setMonth(month, Math.min(day, daysInMonth))\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport setMonth from '../setMonth/index.js'\n\n/**\n * @name setQuarter\n * @category Quarter Helpers\n * @summary Set the year quarter to the given date.\n *\n * @description\n * Set the year quarter to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} quarter - the quarter of the new date\n * @returns {Date} the new date with the quarter set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set the 2nd quarter to 2 July 2014:\n * var result = setQuarter(new Date(2014, 6, 2), 2)\n * //=> Wed Apr 02 2014 00:00:00\n */\nexport default function setQuarter(dirtyDate, dirtyQuarter) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var quarter = toInteger(dirtyQuarter)\n  var oldQuarter = Math.floor(date.getMonth() / 3) + 1\n  var diff = quarter - oldQuarter\n  return setMonth(date, date.getMonth() + diff * 3)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setSeconds\n * @category Second Helpers\n * @summary Set the seconds to the given date.\n *\n * @description\n * Set the seconds to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} seconds - the seconds of the new date\n * @returns {Date} the new date with the seconds set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set 45 seconds to 1 September 2014 11:30:40:\n * var result = setSeconds(new Date(2014, 8, 1, 11, 30, 40), 45)\n * //=> Mon Sep 01 2014 11:30:45\n */\nexport default function setSeconds(dirtyDate, dirtySeconds) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var seconds = toInteger(dirtySeconds)\n  date.setSeconds(seconds)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport getWeek from '../getWeek/index.js'\n\n/**\n * @name setWeek\n * @category Week Helpers\n * @summary Set the local week to the given date.\n *\n * @description\n * Set the local week to the given date, saving the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} week - the week of the new date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Date} the new date with the local week set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Set the 1st week to 2 January 2005 with default options:\n * var result = setWeek(new Date(2005, 0, 2), 1)\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // Set the 1st week to 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January:\n * var result = setWeek(new Date(2005, 0, 2), 1, {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Sun Jan 4 2004 00:00:00\n */\nexport default function setWeek(dirtyDate, dirtyWeek, dirtyOptions) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var week = toInteger(dirtyWeek)\n  var diff = getWeek(date, dirtyOptions) - week\n  date.setDate(date.getDate() - diff * 7)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\nimport startOfWeekYear from '../startOfWeekYear/index.js'\nimport differenceInCalendarDays from '../differenceInCalendarDays/index.js'\n\n/**\n * @name setWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Set the local week-numbering year to the given date.\n *\n * @description\n * Set the local week-numbering year to the given date,\n * saving the week number and the weekday number.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} weekYear - the local week-numbering year of the new date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Date} the new date with the local week-numbering year set\n * @throws {TypeError} 2 arguments required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // Set the local week-numbering year 2004 to 2 January 2010 with default options:\n * var result = setWeekYear(new Date(2010, 0, 2), 2004)\n * //=> Sat Jan 03 2004 00:00:00\n *\n * @example\n * // Set the local week-numbering year 2004 to 2 January 2010,\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * var result = setWeekYear(new Date(2010, 0, 2), 2004, {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Sat Jan 01 2005 00:00:00\n */\nexport default function setWeekYear(dirtyDate, dirtyWeekYear, dirtyOptions) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeFirstWeekContainsDate =\n    locale && locale.options && locale.options.firstWeekContainsDate\n  var defaultFirstWeekContainsDate =\n    localeFirstWeekContainsDate == null\n      ? 1\n      : toInteger(localeFirstWeekContainsDate)\n  var firstWeekContainsDate =\n    options.firstWeekContainsDate == null\n      ? defaultFirstWeekContainsDate\n      : toInteger(options.firstWeekContainsDate)\n\n  var date = toDate(dirtyDate)\n  var weekYear = toInteger(dirtyWeekYear)\n  var diff = differenceInCalendarDays(date, startOfWeekYear(date, dirtyOptions))\n  var firstWeek = new Date(0)\n  firstWeek.setFullYear(weekYear, 0, firstWeekContainsDate)\n  firstWeek.setHours(0, 0, 0, 0)\n  date = startOfWeekYear(firstWeek, dirtyOptions)\n  date.setDate(date.getDate() + diff)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name setYear\n * @category Year Helpers\n * @summary Set the year to the given date.\n *\n * @description\n * Set the year to the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} year - the year of the new date\n * @returns {Date} the new date with the year set\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Set year 2013 to 1 September 2014:\n * var result = setYear(new Date(2014, 8, 1), 2013)\n * //=> Sun Sep 01 2013 00:00:00\n */\nexport default function setYear(dirtyDate, dirtyYear) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = toInteger(dirtyYear)\n\n  // Check if date is Invalid Date because Date.prototype.setFullYear ignores the value of Invalid Date\n  if (isNaN(date)) {\n    return new Date(NaN)\n  }\n\n  date.setFullYear(year)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a day\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * var result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport default function startOfDay(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfDecade\n * @category Decade Helpers\n * @summary Return the start of a decade for the given date.\n *\n * @description\n * Return the start of a decade for the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a decade\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a decade for 21 October 2015 00:00:00:\n * var result = startOfDecade(new Date(2015, 9, 21, 00, 00, 00))\n * //=> Jan 01 2010 00:00:00\n */\nexport default function startOfDecade(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var year = date.getFullYear()\n  var decade = Math.floor(year / 10) * 10\n  date.setFullYear(decade, 0, 1)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfHour\n * @category Hour Helpers\n * @summary Return the start of an hour for the given date.\n *\n * @description\n * Return the start of an hour for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an hour\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an hour for 2 September 2014 11:55:00:\n * var result = startOfHour(new Date(2014, 8, 2, 11, 55))\n * //=> Tue Sep 02 2014 11:00:00\n */\nexport default function startOfHour(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  date.setMinutes(0, 0, 0)\n  return date\n}\n","import startOfWeek from '../startOfWeek/index.js'\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an ISO week\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * var result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfISOWeek(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  return startOfWeek(dirtyDate, { weekStartsOn: 1 })\n}\n","import getISOWeekYear from '../getISOWeekYear/index.js'\nimport startOfISOWeek from '../startOfISOWeek/index.js'\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of an ISO week-numbering year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * var result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport default function startOfISOWeekYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var year = getISOWeekYear(dirtyDate)\n  var fourthOfJanuary = new Date(0)\n  fourthOfJanuary.setFullYear(year, 0, 4)\n  fourthOfJanuary.setHours(0, 0, 0, 0)\n  var date = startOfISOWeek(fourthOfJanuary)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfMinute\n * @category Minute Helpers\n * @summary Return the start of a minute for the given date.\n *\n * @description\n * Return the start of a minute for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a minute\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a minute for 1 December 2014 22:15:45.400:\n * var result = startOfMinute(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:00\n */\nexport default function startOfMinute(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  date.setSeconds(0, 0)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a month\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * var result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfMonth(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  date.setDate(1)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfQuarter\n * @category Quarter Helpers\n * @summary Return the start of a year quarter for the given date.\n *\n * @description\n * Return the start of a year quarter for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a quarter\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a quarter for 2 September 2014 11:55:00:\n * var result = startOfQuarter(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Jul 01 2014 00:00:00\n */\nexport default function startOfQuarter(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  var currentMonth = date.getMonth()\n  var month = currentMonth - (currentMonth % 3)\n  date.setMonth(month, 1)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfSecond\n * @category Second Helpers\n * @summary Return the start of a second for the given date.\n *\n * @description\n * Return the start of a second for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a second\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a second for 1 December 2014 22:15:45.400:\n * var result = startOfSecond(new Date(2014, 11, 1, 22, 15, 45, 400))\n * //=> Mon Dec 01 2014 22:15:45.000\n */\nexport default function startOfSecond(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var date = toDate(dirtyDate)\n  date.setMilliseconds(0)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport toDate from '../toDate/index.js'\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}\n * @returns {Date} the start of a week\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * var result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function startOfWeek(dirtyDate, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeWeekStartsOn =\n    locale && locale.options && locale.options.weekStartsOn\n  var defaultWeekStartsOn =\n    localeWeekStartsOn == null ? 0 : toInteger(localeWeekStartsOn)\n  var weekStartsOn =\n    options.weekStartsOn == null\n      ? defaultWeekStartsOn\n      : toInteger(options.weekStartsOn)\n\n  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN\n  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {\n    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively')\n  }\n\n  var date = toDate(dirtyDate)\n  var day = date.getDay()\n  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn\n\n  date.setDate(date.getDate() - diff)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport getWeekYear from '../getWeekYear/index.js'\nimport startOfWeek from '../startOfWeek/index.js'\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#Week_numbering\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @param {Object} [options] - an object with options.\n * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)\n * @param {1|2|3|4|5|6|7} [options.firstWeekContainsDate=1] - the day of January, which is always in the first week of the year\n * @returns {Date} the start of a week-numbering year\n * @throws {TypeError} 1 argument required\n * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6\n * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * var result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * var result = startOfWeekYear(new Date(2005, 6, 2), {\n *   weekStartsOn: 1,\n *   firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport default function startOfWeekYear(dirtyDate, dirtyOptions) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var options = dirtyOptions || {}\n  var locale = options.locale\n  var localeFirstWeekContainsDate =\n    locale && locale.options && locale.options.firstWeekContainsDate\n  var defaultFirstWeekContainsDate =\n    localeFirstWeekContainsDate == null\n      ? 1\n      : toInteger(localeFirstWeekContainsDate)\n  var firstWeekContainsDate =\n    options.firstWeekContainsDate == null\n      ? defaultFirstWeekContainsDate\n      : toInteger(options.firstWeekContainsDate)\n\n  var year = getWeekYear(dirtyDate, dirtyOptions)\n  var firstWeek = new Date(0)\n  firstWeek.setFullYear(year, 0, firstWeekContainsDate)\n  firstWeek.setHours(0, 0, 0, 0)\n  var date = startOfWeek(firstWeek, dirtyOptions)\n  return date\n}\n","import toDate from '../toDate/index.js'\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the original date\n * @returns {Date} the start of a year\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * var result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport default function startOfYear(dirtyDate) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var cleanDate = toDate(dirtyDate)\n  var date = new Date(0)\n  date.setFullYear(cleanDate.getFullYear(), 0, 1)\n  date.setHours(0, 0, 0, 0)\n  return date\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addDays from '../addDays/index.js'\n\n/**\n * @name subDays\n * @category Day Helpers\n * @summary Subtract the specified number of days from the given date.\n *\n * @description\n * Subtract the specified number of days from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of days to be subtracted\n * @returns {Date} the new date with the days subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 10 days from 1 September 2014:\n * var result = subDays(new Date(2014, 8, 1), 10)\n * //=> Fri Aug 22 2014 00:00:00\n */\nexport default function subDays(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addDays(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addHours from '../addHours/index.js'\n\n/**\n * @name subHours\n * @category Hour Helpers\n * @summary Subtract the specified number of hours from the given date.\n *\n * @description\n * Subtract the specified number of hours from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of hours to be subtracted\n * @returns {Date} the new date with the hours subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 2 hours from 11 July 2014 01:00:00:\n * var result = subHours(new Date(2014, 6, 11, 1, 0), 2)\n * //=> Thu Jul 10 2014 23:00:00\n */\nexport default function subHours(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addHours(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addISOWeekYears from '../addISOWeekYears/index.js'\n\n/**\n * @name subISOWeekYears\n * @category ISO Week-Numbering Year Helpers\n * @summary Subtract the specified number of ISO week-numbering years from the given date.\n *\n * @description\n * Subtract the specified number of ISO week-numbering years from the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * - The function was renamed from `subISOYears` to `subISOWeekYears`.\n *   \"ISO week year\" is short for [ISO week-numbering year](https://en.wikipedia.org/wiki/ISO_week_date).\n *   This change makes the name consistent with\n *   locale-dependent week-numbering year helpers, e.g., `setWeekYear`.\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of ISO week-numbering years to be subtracted\n * @returns {Date} the new date with the ISO week-numbering years subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 ISO week-numbering years from 1 September 2014:\n * var result = subISOWeekYears(new Date(2014, 8, 1), 5)\n * //=> Mon Aug 31 2009 00:00:00\n */\nexport default function subISOWeekYears(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addISOWeekYears(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMilliseconds from '../addMilliseconds/index.js'\n\n/**\n * @name subMilliseconds\n * @category Millisecond Helpers\n * @summary Subtract the specified number of milliseconds from the given date.\n *\n * @description\n * Subtract the specified number of milliseconds from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of milliseconds to be subtracted\n * @returns {Date} the new date with the milliseconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:\n * var result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)\n * //=> Thu Jul 10 2014 12:45:29.250\n */\nexport default function subMilliseconds(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addMilliseconds(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMinutes from '../addMinutes/index.js'\n\n/**\n * @name subMinutes\n * @category Minute Helpers\n * @summary Subtract the specified number of minutes from the given date.\n *\n * @description\n * Subtract the specified number of minutes from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of minutes to be subtracted\n * @returns {Date} the new date with the minutes subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 30 minutes from 10 July 2014 12:00:00:\n * var result = subMinutes(new Date(2014, 6, 10, 12, 0), 30)\n * //=> Thu Jul 10 2014 11:30:00\n */\nexport default function subMinutes(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addMinutes(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addMonths from '../addMonths/index.js'\n\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of months to be subtracted\n * @returns {Date} the new date with the months subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * var result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport default function subMonths(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addMonths(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addQuarters from '../addQuarters/index.js'\n\n/**\n * @name subQuarters\n * @category Quarter Helpers\n * @summary Subtract the specified number of year quarters from the given date.\n *\n * @description\n * Subtract the specified number of year quarters from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of quarters to be subtracted\n * @returns {Date} the new date with the quarters subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 3 quarters from 1 September 2014:\n * var result = subQuarters(new Date(2014, 8, 1), 3)\n * //=> Sun Dec 01 2013 00:00:00\n */\nexport default function subQuarters(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addQuarters(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addSeconds from '../addSeconds/index.js'\n\n/**\n * @name subSeconds\n * @category Second Helpers\n * @summary Subtract the specified number of seconds from the given date.\n *\n * @description\n * Subtract the specified number of seconds from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of seconds to be subtracted\n * @returns {Date} the new date with the seconds subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 30 seconds from 10 July 2014 12:45:00:\n * var result = subSeconds(new Date(2014, 6, 10, 12, 45, 0), 30)\n * //=> Thu Jul 10 2014 12:44:30\n */\nexport default function subSeconds(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addSeconds(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addWeeks from '../addWeeks/index.js'\n\n/**\n * @name subWeeks\n * @category Week Helpers\n * @summary Subtract the specified number of weeks from the given date.\n *\n * @description\n * Subtract the specified number of weeks from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of weeks to be subtracted\n * @returns {Date} the new date with the weeks subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 4 weeks from 1 September 2014:\n * var result = subWeeks(new Date(2014, 8, 1), 4)\n * //=> Mon Aug 04 2014 00:00:00\n */\nexport default function subWeeks(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addWeeks(dirtyDate, -amount)\n}\n","import toInteger from '../_lib/toInteger/index.js'\nimport addYears from '../addYears/index.js'\n\n/**\n * @name subYears\n * @category Year Helpers\n * @summary Subtract the specified number of years from the given date.\n *\n * @description\n * Subtract the specified number of years from the given date.\n *\n * ### v2.0.0 breaking changes:\n *\n * - [Changes that are common for the whole library](https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#Common-Changes).\n *\n * @param {Date|Number} date - the date to be changed\n * @param {Number} amount - the amount of years to be subtracted\n * @returns {Date} the new date with the years subtracted\n * @throws {TypeError} 2 arguments required\n *\n * @example\n * // Subtract 5 years from 1 September 2014:\n * var result = subYears(new Date(2014, 8, 1), 5)\n * //=> Tue Sep 01 2009 00:00:00\n */\nexport default function subYears(dirtyDate, dirtyAmount) {\n  if (arguments.length < 2) {\n    throw new TypeError(\n      '2 arguments required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var amount = toInteger(dirtyAmount)\n  return addYears(dirtyDate, -amount)\n}\n","/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @param {Date|Number} argument - the value to convert\n * @returns {Date} the parsed date in the local time zone\n * @throws {TypeError} 1 argument required\n *\n * @example\n * // Clone the date:\n * var result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * var result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport default function toDate(argument) {\n  if (arguments.length < 1) {\n    throw new TypeError(\n      '1 argument required, but only ' + arguments.length + ' present'\n    )\n  }\n\n  var argStr = Object.prototype.toString.call(argument)\n\n  // Clone the date\n  if (\n    argument instanceof Date ||\n    (typeof argument === 'object' && argStr === '[object Date]')\n  ) {\n    // Prevent the date to lose the milliseconds when passed to new Date() in IE10\n    return new Date(argument.getTime())\n  } else if (typeof argument === 'number' || argStr === '[object Number]') {\n    return new Date(argument)\n  } else {\n    if (\n      (typeof argument === 'string' || argStr === '[object String]') &&\n      typeof console !== 'undefined'\n    ) {\n      console.warn(\n        \"Starting with v2.0.0-beta.1 date-fns doesn't accept strings as arguments. Please use `parseISO` to parse strings. See: https://git.io/fpAk2\"\n      )\n      console.warn(new Error().stack)\n    }\n    return new Date(NaN)\n  }\n}\n","'use strict';\n\nvar objectKeys = require('object-keys');\nvar isArguments = require('is-arguments');\nvar is = require('object-is');\nvar isRegex = require('is-regex');\nvar flags = require('regexp.prototype.flags');\nvar isArray = require('isarray');\nvar isDate = require('is-date-object');\nvar whichBoxedPrimitive = require('which-boxed-primitive');\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bind/callBound');\nvar whichCollection = require('which-collection');\nvar getIterator = require('es-get-iterator');\nvar getSideChannel = require('side-channel');\nvar whichTypedArray = require('which-typed-array');\nvar assign = require('object.assign');\n\nvar $getTime = callBound('Date.prototype.getTime');\nvar gPO = Object.getPrototypeOf;\nvar $objToString = callBound('Object.prototype.toString');\n\nvar $Set = GetIntrinsic('%Set%', true);\nvar $mapHas = callBound('Map.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSize = callBound('Map.prototype.size', true);\nvar $setAdd = callBound('Set.prototype.add', true);\nvar $setDelete = callBound('Set.prototype.delete', true);\nvar $setHas = callBound('Set.prototype.has', true);\nvar $setSize = callBound('Set.prototype.size', true);\n\n// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L401-L414\nfunction setHasEqualElement(set, val1, opts, channel) {\n  var i = getIterator(set);\n  var result;\n  while ((result = i.next()) && !result.done) {\n    if (internalDeepEqual(val1, result.value, opts, channel)) { // eslint-disable-line no-use-before-define\n      // Remove the matching element to make sure we do not check that again.\n      $setDelete(set, result.value);\n      return true;\n    }\n  }\n\n  return false;\n}\n\n// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L416-L439\nfunction findLooseMatchingPrimitives(prim) {\n  if (typeof prim === 'undefined') {\n    return null;\n  }\n  if (typeof prim === 'object') { // Only pass in null as object!\n    return void 0;\n  }\n  if (typeof prim === 'symbol') {\n    return false;\n  }\n  if (typeof prim === 'string' || typeof prim === 'number') {\n    // Loose equal entries exist only if the string is possible to convert to a regular number and not NaN.\n    return +prim === +prim; // eslint-disable-line no-implicit-coercion\n  }\n  return true;\n}\n\n// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L449-L460\nfunction mapMightHaveLoosePrim(a, b, prim, item, opts, channel) {\n  var altValue = findLooseMatchingPrimitives(prim);\n  if (altValue != null) {\n    return altValue;\n  }\n  var curB = $mapGet(b, altValue);\n  var looseOpts = assign({}, opts, { strict: false });\n  if (\n    (typeof curB === 'undefined' && !$mapHas(b, altValue))\n    // eslint-disable-next-line no-use-before-define\n    || !internalDeepEqual(item, curB, looseOpts, channel)\n  ) {\n    return false;\n  }\n  // eslint-disable-next-line no-use-before-define\n  return !$mapHas(a, altValue) && internalDeepEqual(item, curB, looseOpts, channel);\n}\n\n// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L441-L447\nfunction setMightHaveLoosePrim(a, b, prim) {\n  var altValue = findLooseMatchingPrimitives(prim);\n  if (altValue != null) {\n    return altValue;\n  }\n\n  return $setHas(b, altValue) && !$setHas(a, altValue);\n}\n\n// taken from https://github.com/browserify/commonjs-assert/blob/bba838e9ba9e28edf3127ce6974624208502f6bc/internal/util/comparisons.js#L518-L533\nfunction mapHasEqualEntry(set, map, key1, item1, opts, channel) {\n  var i = getIterator(set);\n  var result;\n  var key2;\n  while ((result = i.next()) && !result.done) {\n    key2 = result.value;\n    if (\n      // eslint-disable-next-line no-use-before-define\n      internalDeepEqual(key1, key2, opts, channel)\n      // eslint-disable-next-line no-use-before-define\n      && internalDeepEqual(item1, $mapGet(map, key2), opts, channel)\n    ) {\n      $setDelete(set, key2);\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction internalDeepEqual(actual, expected, options, channel) {\n  var opts = options || {};\n\n  // 7.1. All identical values are equivalent, as determined by ===.\n  if (opts.strict ? is(actual, expected) : actual === expected) {\n    return true;\n  }\n\n  var actualBoxed = whichBoxedPrimitive(actual);\n  var expectedBoxed = whichBoxedPrimitive(expected);\n  if (actualBoxed !== expectedBoxed) {\n    return false;\n  }\n\n  // 7.3. Other pairs that do not both pass typeof value == 'object', equivalence is determined by ==.\n  if (!actual || !expected || (typeof actual !== 'object' && typeof expected !== 'object')) {\n    return opts.strict ? is(actual, expected) : actual == expected; // eslint-disable-line eqeqeq\n  }\n\n  /*\n   * 7.4. For all other Object pairs, including Array objects, equivalence is\n   * determined by having the same number of owned properties (as verified\n   * with Object.prototype.hasOwnProperty.call), the same set of keys\n   * (although not necessarily the same order), equivalent values for every\n   * corresponding key, and an identical 'prototype' property. Note: this\n   * accounts for both named and indexed properties on Arrays.\n   */\n  // see https://github.com/nodejs/node/commit/d3aafd02efd3a403d646a3044adcf14e63a88d32 for memos/channel inspiration\n\n  var hasActual = channel.has(actual);\n  var hasExpected = channel.has(expected);\n  var sentinel;\n  if (hasActual && hasExpected) {\n    if (channel.get(actual) === channel.get(expected)) {\n      return true;\n    }\n  } else {\n    sentinel = {};\n  }\n  if (!hasActual) { channel.set(actual, sentinel); }\n  if (!hasExpected) { channel.set(expected, sentinel); }\n\n  // eslint-disable-next-line no-use-before-define\n  return objEquiv(actual, expected, opts, channel);\n}\n\nfunction isBuffer(x) {\n  if (!x || typeof x !== 'object' || typeof x.length !== 'number') {\n    return false;\n  }\n  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n    return false;\n  }\n  if (x.length > 0 && typeof x[0] !== 'number') {\n    return false;\n  }\n\n  return !!(x.constructor && x.constructor.isBuffer && x.constructor.isBuffer(x));\n}\n\nfunction setEquiv(a, b, opts, channel) {\n  if ($setSize(a) !== $setSize(b)) {\n    return false;\n  }\n  var iA = getIterator(a);\n  var iB = getIterator(b);\n  var resultA;\n  var resultB;\n  var set;\n  while ((resultA = iA.next()) && !resultA.done) {\n    if (resultA.value && typeof resultA.value === 'object') {\n      if (!set) { set = new $Set(); }\n      $setAdd(set, resultA.value);\n    } else if (!$setHas(b, resultA.value)) {\n      if (opts.strict) { return false; }\n      if (!setMightHaveLoosePrim(a, b, resultA.value)) {\n        return false;\n      }\n      if (!set) { set = new $Set(); }\n      $setAdd(set, resultA.value);\n    }\n  }\n  if (set) {\n    while ((resultB = iB.next()) && !resultB.done) {\n      // We have to check if a primitive value is already matching and only if it's not, go hunting for it.\n      if (resultB.value && typeof resultB.value === 'object') {\n        if (!setHasEqualElement(set, resultB.value, opts.strict, channel)) {\n          return false;\n        }\n      } else if (\n        !opts.strict\n        && !$setHas(a, resultB.value)\n        && !setHasEqualElement(set, resultB.value, opts.strict, channel)\n      ) {\n        return false;\n      }\n    }\n    return $setSize(set) === 0;\n  }\n  return true;\n}\n\nfunction mapEquiv(a, b, opts, channel) {\n  if ($mapSize(a) !== $mapSize(b)) {\n    return false;\n  }\n  var iA = getIterator(a);\n  var iB = getIterator(b);\n  var resultA;\n  var resultB;\n  var set;\n  var key;\n  var item1;\n  var item2;\n  while ((resultA = iA.next()) && !resultA.done) {\n    key = resultA.value[0];\n    item1 = resultA.value[1];\n    if (key && typeof key === 'object') {\n      if (!set) { set = new $Set(); }\n      $setAdd(set, key);\n    } else {\n      item2 = $mapGet(b, key);\n      if ((typeof item2 === 'undefined' && !$mapHas(b, key)) || !internalDeepEqual(item1, item2, opts, channel)) {\n        if (opts.strict) {\n          return false;\n        }\n        if (!mapMightHaveLoosePrim(a, b, key, item1, opts, channel)) {\n          return false;\n        }\n        if (!set) { set = new $Set(); }\n        $setAdd(set, key);\n      }\n    }\n  }\n\n  if (set) {\n    while ((resultB = iB.next()) && !resultB.done) {\n      key = resultB.value[0];\n      item2 = resultB.value[1];\n      if (key && typeof key === 'object') {\n        if (!mapHasEqualEntry(set, a, key, item2, opts, channel)) {\n          return false;\n        }\n      } else if (\n        !opts.strict\n        && (!a.has(key) || !internalDeepEqual($mapGet(a, key), item2, opts, channel))\n        && !mapHasEqualEntry(set, a, key, item2, assign({}, opts, { strict: false }), channel)\n      ) {\n        return false;\n      }\n    }\n    return $setSize(set) === 0;\n  }\n  return true;\n}\n\nfunction objEquiv(a, b, opts, channel) {\n  /* eslint max-statements: [2, 100], max-lines-per-function: [2, 120], max-depth: [2, 5] */\n  var i, key;\n\n  if (typeof a !== typeof b) { return false; }\n  if (a == null || b == null) { return false; }\n\n  if ($objToString(a) !== $objToString(b)) { return false; }\n\n  if (isArguments(a) !== isArguments(b)) { return false; }\n\n  var aIsArray = isArray(a);\n  var bIsArray = isArray(b);\n  if (aIsArray !== bIsArray) { return false; }\n\n  // TODO: replace when a cross-realm brand check is available\n  var aIsError = a instanceof Error;\n  var bIsError = b instanceof Error;\n  if (aIsError !== bIsError) { return false; }\n  if (aIsError || bIsError) {\n    if (a.name !== b.name || a.message !== b.message) { return false; }\n  }\n\n  var aIsRegex = isRegex(a);\n  var bIsRegex = isRegex(b);\n  if (aIsRegex !== bIsRegex) { return false; }\n  if ((aIsRegex || bIsRegex) && (a.source !== b.source || flags(a) !== flags(b))) {\n    return false;\n  }\n\n  var aIsDate = isDate(a);\n  var bIsDate = isDate(b);\n  if (aIsDate !== bIsDate) { return false; }\n  if (aIsDate || bIsDate) { // && would work too, because both are true or both false here\n    if ($getTime(a) !== $getTime(b)) { return false; }\n  }\n  if (opts.strict && gPO && gPO(a) !== gPO(b)) { return false; }\n\n  if (whichTypedArray(a) !== whichTypedArray(b)) {\n    return false;\n  }\n\n  var aIsBuffer = isBuffer(a);\n  var bIsBuffer = isBuffer(b);\n  if (aIsBuffer !== bIsBuffer) { return false; }\n  if (aIsBuffer || bIsBuffer) { // && would work too, because both are true or both false here\n    if (a.length !== b.length) { return false; }\n    for (i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) { return false; }\n    }\n    return true;\n  }\n\n  if (typeof a !== typeof b) { return false; }\n\n  var ka = objectKeys(a);\n  var kb = objectKeys(b);\n  // having the same number of owned properties (keys incorporates hasOwnProperty)\n  if (ka.length !== kb.length) { return false; }\n\n  // the same set of keys (although not necessarily the same order),\n  ka.sort();\n  kb.sort();\n  // ~~~cheap key test\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i]) { return false; } // eslint-disable-line eqeqeq\n  }\n\n  // equivalent values for every corresponding key, and ~~~possibly expensive deep test\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!internalDeepEqual(a[key], b[key], opts, channel)) { return false; }\n  }\n\n  var aCollection = whichCollection(a);\n  var bCollection = whichCollection(b);\n  if (aCollection !== bCollection) {\n    return false;\n  }\n  if (aCollection === 'Set' || bCollection === 'Set') { // aCollection === bCollection\n    return setEquiv(a, b, opts, channel);\n  }\n  if (aCollection === 'Map') { // aCollection === bCollection\n    return mapEquiv(a, b, opts, channel);\n  }\n\n  return true;\n}\n\nmodule.exports = function deepEqual(a, b, opts) {\n  return internalDeepEqual(a, b, opts, getSideChannel());\n};\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n","'use strict';\n\nvar keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar origDefineProperty = Object.defineProperty;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\torigDefineProperty(obj, 'x', { enumerable: false, value: obj });\n\t\t// eslint-disable-next-line no-unused-vars, no-restricted-syntax\n\t\tfor (var _ in obj) { // jscs:ignore disallowUnusedVariables\n\t\t\treturn false;\n\t\t}\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\torigDefineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tvalue: value,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\n/* eslint global-require: 0 */\n// the code is structured this way so that bundlers can\n// alias out `has-symbols` to `() => true` or `() => false` if your target\n// environments' Symbol capabilities are known, and then use\n// dead code elimination on the rest of this module.\n//\n// Similarly, `isarray` can be aliased to `Array.isArray` if\n// available in all target environments.\n\nvar isArguments = require('is-arguments');\n\nif (require('has-symbols')() || require('has-symbols/shams')()) {\n\tvar $iterator = Symbol.iterator;\n\t// Symbol is available natively or shammed\n\t// natively:\n\t//  - Chrome >= 38\n\t//  - Edge 12-14?, Edge >= 15 for sure\n\t//  - FF >= 36\n\t//  - Safari >= 9\n\t//  - node >= 0.12\n\tmodule.exports = function getIterator(iterable) {\n\t\t// alternatively, `iterable[$iterator]?.()`\n\t\tif (iterable != null && typeof iterable[$iterator] !== 'undefined') {\n\t\t\treturn iterable[$iterator]();\n\t\t}\n\t\tif (isArguments(iterable)) {\n\t\t\t// arguments objects lack Symbol.iterator\n\t\t\t// - node 0.12\n\t\t\treturn Array.prototype[$iterator].call(iterable);\n\t\t}\n\t};\n} else {\n\t// Symbol is not available, native or shammed\n\tvar isArray = require('isarray');\n\tvar isString = require('is-string');\n\tvar GetIntrinsic = require('get-intrinsic');\n\tvar $Map = GetIntrinsic('%Map%', true);\n\tvar $Set = GetIntrinsic('%Set%', true);\n\tvar callBound = require('call-bind/callBound');\n\tvar $arrayPush = callBound('Array.prototype.push');\n\tvar $charCodeAt = callBound('String.prototype.charCodeAt');\n\tvar $stringSlice = callBound('String.prototype.slice');\n\n\tvar advanceStringIndex = function advanceStringIndex(S, index) {\n\t\tvar length = S.length;\n\t\tif ((index + 1) >= length) {\n\t\t\treturn index + 1;\n\t\t}\n\n\t\tvar first = $charCodeAt(S, index);\n\t\tif (first < 0xD800 || first > 0xDBFF) {\n\t\t\treturn index + 1;\n\t\t}\n\n\t\tvar second = $charCodeAt(S, index + 1);\n\t\tif (second < 0xDC00 || second > 0xDFFF) {\n\t\t\treturn index + 1;\n\t\t}\n\n\t\treturn index + 2;\n\t};\n\n\tvar getArrayIterator = function getArrayIterator(arraylike) {\n\t\tvar i = 0;\n\t\treturn {\n\t\t\tnext: function next() {\n\t\t\t\tvar done = i >= arraylike.length;\n\t\t\t\tvar value;\n\t\t\t\tif (!done) {\n\t\t\t\t\tvalue = arraylike[i];\n\t\t\t\t\ti += 1;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tdone: done,\n\t\t\t\t\tvalue: value\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t};\n\n\tvar getNonCollectionIterator = function getNonCollectionIterator(iterable, noPrimordialCollections) {\n\t\tif (isArray(iterable) || isArguments(iterable)) {\n\t\t\treturn getArrayIterator(iterable);\n\t\t}\n\t\tif (isString(iterable)) {\n\t\t\tvar i = 0;\n\t\t\treturn {\n\t\t\t\tnext: function next() {\n\t\t\t\t\tvar nextIndex = advanceStringIndex(iterable, i);\n\t\t\t\t\tvar value = $stringSlice(iterable, i, nextIndex);\n\t\t\t\t\ti = nextIndex;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdone: nextIndex > iterable.length,\n\t\t\t\t\t\tvalue: value\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t// es6-shim and es-shims' es-map use a string \"_es6-shim iterator_\" property on different iterables, such as MapIterator.\n\t\tif (noPrimordialCollections && typeof iterable['_es6-shim iterator_'] !== 'undefined') {\n\t\t\treturn iterable['_es6-shim iterator_']();\n\t\t}\n\t};\n\n\tif (!$Map && !$Set) {\n\t\t// the only language iterables are Array, String, arguments\n\t\t// - Safari <= 6.0\n\t\t// - Chrome < 38\n\t\t// - node < 0.12\n\t\t// - FF < 13\n\t\t// - IE < 11\n\t\t// - Edge < 11\n\n\t\tmodule.exports = function getIterator(iterable) {\n\t\t\tif (iterable != null) {\n\t\t\t\treturn getNonCollectionIterator(iterable, true);\n\t\t\t}\n\t\t};\n\t} else {\n\t\t// either Map or Set are available, but Symbol is not\n\t\t// - es6-shim on an ES5 browser\n\t\t// - Safari 6.2 (maybe 6.1?)\n\t\t// - FF v[13, 36)\n\t\t// - IE 11\n\t\t// - Edge 11\n\t\t// - Safari v[6, 9)\n\n\t\tvar isMap = require('is-map');\n\t\tvar isSet = require('is-set');\n\n\t\t// Firefox >= 27, IE 11, Safari 6.2 - 9, Edge 11, es6-shim in older envs, all have forEach\n\t\tvar $mapForEach = callBound('Map.prototype.forEach', true);\n\t\tvar $setForEach = callBound('Set.prototype.forEach', true);\n\t\tif (typeof process === 'undefined' || !process.versions || !process.versions.node) { // \"if is not node\"\n\n\t\t\t// Firefox 17 - 26 has `.iterator()`, whose iterator `.next()` either\n\t\t\t// returns a value, or throws a StopIteration object. These browsers\n\t\t\t// do not have any other mechanism for iteration.\n\t\t\tvar $mapIterator = callBound('Map.prototype.iterator', true);\n\t\t\tvar $setIterator = callBound('Set.prototype.iterator', true);\n\t\t\tvar getStopIterationIterator = function (iterator) {\n\t\t\t\tvar done = false;\n\t\t\t\treturn {\n\t\t\t\t\tnext: function next() {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tdone: done,\n\t\t\t\t\t\t\t\tvalue: done ? undefined : iterator.next()\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tdone = true;\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tdone: true,\n\t\t\t\t\t\t\t\tvalue: undefined\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\t\t}\n\t\t// Firefox 27-35, and some older es6-shim versions, use a string \"@@iterator\" property\n\t\t// this returns a proper iterator object, so we should use it instead of forEach.\n\t\t// newer es6-shim versions use a string \"_es6-shim iterator_\" property.\n\t\tvar $mapAtAtIterator = callBound('Map.prototype.@@iterator', true) || callBound('Map.prototype._es6-shim iterator_', true);\n\t\tvar $setAtAtIterator = callBound('Set.prototype.@@iterator', true) || callBound('Set.prototype._es6-shim iterator_', true);\n\n\t\tvar getCollectionIterator = function getCollectionIterator(iterable) {\n\t\t\tif (isMap(iterable)) {\n\t\t\t\tif ($mapIterator) {\n\t\t\t\t\treturn getStopIterationIterator($mapIterator(iterable));\n\t\t\t\t}\n\t\t\t\tif ($mapAtAtIterator) {\n\t\t\t\t\treturn $mapAtAtIterator(iterable);\n\t\t\t\t}\n\t\t\t\tif ($mapForEach) {\n\t\t\t\t\tvar entries = [];\n\t\t\t\t\t$mapForEach(iterable, function (v, k) {\n\t\t\t\t\t\t$arrayPush(entries, [k, v]);\n\t\t\t\t\t});\n\t\t\t\t\treturn getArrayIterator(entries);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isSet(iterable)) {\n\t\t\t\tif ($setIterator) {\n\t\t\t\t\treturn getStopIterationIterator($setIterator(iterable));\n\t\t\t\t}\n\t\t\t\tif ($setAtAtIterator) {\n\t\t\t\t\treturn $setAtAtIterator(iterable);\n\t\t\t\t}\n\t\t\t\tif ($setForEach) {\n\t\t\t\t\tvar values = [];\n\t\t\t\t\t$setForEach(iterable, function (v) {\n\t\t\t\t\t\t$arrayPush(values, v);\n\t\t\t\t\t});\n\t\t\t\t\treturn getArrayIterator(values);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tmodule.exports = function getIterator(iterable) {\n\t\t\treturn getCollectionIterator(iterable) || getNonCollectionIterator(iterable);\n\t\t};\n\t}\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n","\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toString = Object.prototype.toString;\n\nmodule.exports = function forEach (obj, fn, ctx) {\n    if (toString.call(fn) !== '[object Function]') {\n        throw new TypeError('iterator must be a function');\n    }\n    var l = obj.length;\n    if (l === +l) {\n        for (var i = 0; i < l; i++) {\n            fn.call(ctx, obj[i], i, obj);\n        }\n    } else {\n        for (var k in obj) {\n            if (hasOwn.call(obj, k)) {\n                fn.call(ctx, obj[k], k, obj);\n            }\n        }\n    }\n};\n\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slice.call(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                args.concat(slice.call(arguments))\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        } else {\n            return target.apply(\n                that,\n                args.concat(slice.call(arguments))\n            );\n        }\n    };\n\n    var boundLength = Math.max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs.push('$' + i);\n    }\n\n    bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar undefined;\n\nvar $SyntaxError = SyntaxError;\nvar $Function = Function;\nvar $TypeError = TypeError;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\n\nvar getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': RangeError,\n\t'%ReferenceError%': ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('has');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,b,c){a instanceof String&&(a=String(a));for(var d=a.length,e=0;e<d;e++){var f=a[e];if(b.call(c,f,e,a))return{i:e,v:f}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;\n$jscomp.defineProperty=$jscomp.ASSUME_ES5||\"function\"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};$jscomp.getGlobal=function(a){return\"undefined\"!=typeof window&&window===a?a:\"undefined\"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);\n$jscomp.polyfill=function(a,b,c,d){if(b){c=$jscomp.global;a=a.split(\".\");for(d=0;d<a.length-1;d++){var e=a[d];e in c||(c[e]={});c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})}};$jscomp.polyfill(\"Array.prototype.findIndex\",function(a){return a?a:function(a,c){return $jscomp.findInternal(this,a,c).i}},\"es6\",\"es3\");\n$jscomp.checkStringArgs=function(a,b,c){if(null==a)throw new TypeError(\"The 'this' value for String.prototype.\"+c+\" must not be null or undefined\");if(b instanceof RegExp)throw new TypeError(\"First argument to String.prototype.\"+c+\" must not be a regular expression\");return a+\"\"};\n$jscomp.polyfill(\"String.prototype.endsWith\",function(a){return a?a:function(a,c){var b=$jscomp.checkStringArgs(this,a,\"endsWith\");a+=\"\";void 0===c&&(c=b.length);c=Math.max(0,Math.min(c|0,b.length));for(var e=a.length;0<e&&0<c;)if(b[--c]!=a[--e])return!1;return 0>=e}},\"es6\",\"es3\");$jscomp.polyfill(\"Array.prototype.find\",function(a){return a?a:function(a,c){return $jscomp.findInternal(this,a,c).v}},\"es6\",\"es3\");\n$jscomp.polyfill(\"String.prototype.startsWith\",function(a){return a?a:function(a,c){var b=$jscomp.checkStringArgs(this,a,\"startsWith\");a+=\"\";var e=b.length,f=a.length;c=Math.max(0,Math.min(c|0,b.length));for(var g=0;g<f&&c<e;)if(b[c++]!=a[g++])return!1;return g>=f}},\"es6\",\"es3\");\n$jscomp.polyfill(\"String.prototype.repeat\",function(a){return a?a:function(a){var b=$jscomp.checkStringArgs(this,null,\"repeat\");if(0>a||1342177279<a)throw new RangeError(\"Invalid count value\");a|=0;for(var d=\"\";a;)if(a&1&&(d+=b),a>>>=1)b+=b;return d}},\"es6\",\"es3\");var COMPILED=!0,goog=goog||{};goog.global=this||self;goog.isDef=function(a){return void 0!==a};goog.isString=function(a){return\"string\"==typeof a};goog.isBoolean=function(a){return\"boolean\"==typeof a};\ngoog.isNumber=function(a){return\"number\"==typeof a};goog.exportPath_=function(a,b,c){a=a.split(\".\");c=c||goog.global;a[0]in c||\"undefined\"==typeof c.execScript||c.execScript(\"var \"+a[0]);for(var d;a.length&&(d=a.shift());)!a.length&&goog.isDef(b)?c[d]=b:c=c[d]&&c[d]!==Object.prototype[d]?c[d]:c[d]={}};\ngoog.define=function(a,b){if(!COMPILED){var c=goog.global.CLOSURE_UNCOMPILED_DEFINES,d=goog.global.CLOSURE_DEFINES;c&&void 0===c.nodeType&&Object.prototype.hasOwnProperty.call(c,a)?b=c[a]:d&&void 0===d.nodeType&&Object.prototype.hasOwnProperty.call(d,a)&&(b=d[a])}return b};goog.FEATURESET_YEAR=2012;goog.DEBUG=!0;goog.LOCALE=\"en\";goog.TRUSTED_SITE=!0;goog.STRICT_MODE_COMPATIBLE=!1;goog.DISALLOW_TEST_ONLY_CODE=COMPILED&&!goog.DEBUG;goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING=!1;\ngoog.provide=function(a){if(goog.isInModuleLoader_())throw Error(\"goog.provide cannot be used within a module.\");if(!COMPILED&&goog.isProvided_(a))throw Error('Namespace \"'+a+'\" already declared.');goog.constructNamespace_(a)};goog.constructNamespace_=function(a,b){if(!COMPILED){delete goog.implicitNamespaces_[a];for(var c=a;(c=c.substring(0,c.lastIndexOf(\".\")))&&!goog.getObjectByName(c);)goog.implicitNamespaces_[c]=!0}goog.exportPath_(a,b)};\ngoog.getScriptNonce=function(a){if(a&&a!=goog.global)return goog.getScriptNonce_(a.document);null===goog.cspNonce_&&(goog.cspNonce_=goog.getScriptNonce_(goog.global.document));return goog.cspNonce_};goog.NONCE_PATTERN_=/^[\\w+/_-]+[=]{0,2}$/;goog.cspNonce_=null;goog.getScriptNonce_=function(a){return(a=a.querySelector&&a.querySelector(\"script[nonce]\"))&&(a=a.nonce||a.getAttribute(\"nonce\"))&&goog.NONCE_PATTERN_.test(a)?a:\"\"};goog.VALID_MODULE_RE_=/^[a-zA-Z_$][a-zA-Z0-9._$]*$/;\ngoog.module=function(a){if(!goog.isString(a)||!a||-1==a.search(goog.VALID_MODULE_RE_))throw Error(\"Invalid module identifier\");if(!goog.isInGoogModuleLoader_())throw Error(\"Module \"+a+\" has been loaded incorrectly. Note, modules cannot be loaded as normal scripts. They require some kind of pre-processing step. You're likely trying to load a module via a script tag or as a part of a concatenated bundle without rewriting the module. For more info see: https://github.com/google/closure-library/wiki/goog.module:-an-ES6-module-like-alternative-to-goog.provide.\");\nif(goog.moduleLoaderState_.moduleName)throw Error(\"goog.module may only be called once per module.\");goog.moduleLoaderState_.moduleName=a;if(!COMPILED){if(goog.isProvided_(a))throw Error('Namespace \"'+a+'\" already declared.');delete goog.implicitNamespaces_[a]}};goog.module.get=function(a){return goog.module.getInternal_(a)};\ngoog.module.getInternal_=function(a){if(!COMPILED){if(a in goog.loadedModules_)return goog.loadedModules_[a].exports;if(!goog.implicitNamespaces_[a])return a=goog.getObjectByName(a),null!=a?a:null}return null};goog.ModuleType={ES6:\"es6\",GOOG:\"goog\"};goog.moduleLoaderState_=null;goog.isInModuleLoader_=function(){return goog.isInGoogModuleLoader_()||goog.isInEs6ModuleLoader_()};goog.isInGoogModuleLoader_=function(){return!!goog.moduleLoaderState_&&goog.moduleLoaderState_.type==goog.ModuleType.GOOG};\ngoog.isInEs6ModuleLoader_=function(){if(goog.moduleLoaderState_&&goog.moduleLoaderState_.type==goog.ModuleType.ES6)return!0;var a=goog.global.$jscomp;return a?\"function\"!=typeof a.getCurrentModulePath?!1:!!a.getCurrentModulePath():!1};\ngoog.module.declareLegacyNamespace=function(){if(!COMPILED&&!goog.isInGoogModuleLoader_())throw Error(\"goog.module.declareLegacyNamespace must be called from within a goog.module\");if(!COMPILED&&!goog.moduleLoaderState_.moduleName)throw Error(\"goog.module must be called prior to goog.module.declareLegacyNamespace.\");goog.moduleLoaderState_.declareLegacyNamespace=!0};\ngoog.declareModuleId=function(a){if(!COMPILED){if(!goog.isInEs6ModuleLoader_())throw Error(\"goog.declareModuleId may only be called from within an ES6 module\");if(goog.moduleLoaderState_&&goog.moduleLoaderState_.moduleName)throw Error(\"goog.declareModuleId may only be called once per module.\");if(a in goog.loadedModules_)throw Error('Module with namespace \"'+a+'\" already exists.');}if(goog.moduleLoaderState_)goog.moduleLoaderState_.moduleName=a;else{var b=goog.global.$jscomp;if(!b||\"function\"!=typeof b.getCurrentModulePath)throw Error('Module with namespace \"'+\na+'\" has been loaded incorrectly.');b=b.require(b.getCurrentModulePath());goog.loadedModules_[a]={exports:b,type:goog.ModuleType.ES6,moduleId:a}}};goog.setTestOnly=function(a){if(goog.DISALLOW_TEST_ONLY_CODE)throw a=a||\"\",Error(\"Importing test-only code into non-debug environment\"+(a?\": \"+a:\".\"));};goog.forwardDeclare=function(a){};\nCOMPILED||(goog.isProvided_=function(a){return a in goog.loadedModules_||!goog.implicitNamespaces_[a]&&goog.isDefAndNotNull(goog.getObjectByName(a))},goog.implicitNamespaces_={\"goog.module\":!0});goog.getObjectByName=function(a,b){a=a.split(\".\");b=b||goog.global;for(var c=0;c<a.length;c++)if(b=b[a[c]],!goog.isDefAndNotNull(b))return null;return b};goog.globalize=function(a,b){b=b||goog.global;for(var c in a)b[c]=a[c]};\ngoog.addDependency=function(a,b,c,d){!COMPILED&&goog.DEPENDENCIES_ENABLED&&goog.debugLoader_.addDependency(a,b,c,d)};goog.ENABLE_DEBUG_LOADER=!0;goog.logToConsole_=function(a){goog.global.console&&goog.global.console.error(a)};\ngoog.require=function(a){if(!COMPILED){goog.ENABLE_DEBUG_LOADER&&goog.debugLoader_.requested(a);if(goog.isProvided_(a)){if(goog.isInModuleLoader_())return goog.module.getInternal_(a)}else if(goog.ENABLE_DEBUG_LOADER){var b=goog.moduleLoaderState_;goog.moduleLoaderState_=null;try{goog.debugLoader_.load_(a)}finally{goog.moduleLoaderState_=b}}return null}};goog.requireType=function(a){return{}};goog.basePath=\"\";goog.nullFunction=function(){};\ngoog.abstractMethod=function(){throw Error(\"unimplemented abstract method\");};goog.addSingletonGetter=function(a){a.instance_=void 0;a.getInstance=function(){if(a.instance_)return a.instance_;goog.DEBUG&&(goog.instantiatedSingletons_[goog.instantiatedSingletons_.length]=a);return a.instance_=new a}};goog.instantiatedSingletons_=[];goog.LOAD_MODULE_USING_EVAL=!0;goog.SEAL_MODULE_EXPORTS=goog.DEBUG;goog.loadedModules_={};goog.DEPENDENCIES_ENABLED=!COMPILED&&goog.ENABLE_DEBUG_LOADER;goog.TRANSPILE=\"detect\";\ngoog.ASSUME_ES_MODULES_TRANSPILED=!1;goog.TRANSPILE_TO_LANGUAGE=\"\";goog.TRANSPILER=\"transpile.js\";goog.hasBadLetScoping=null;goog.useSafari10Workaround=function(){if(null==goog.hasBadLetScoping){try{var a=!eval('\"use strict\";let x = 1; function f() { return typeof x; };f() == \"number\";')}catch(b){a=!1}goog.hasBadLetScoping=a}return goog.hasBadLetScoping};goog.workaroundSafari10EvalBug=function(a){return\"(function(){\"+a+\"\\n;})();\\n\"};\ngoog.loadModule=function(a){var b=goog.moduleLoaderState_;try{goog.moduleLoaderState_={moduleName:\"\",declareLegacyNamespace:!1,type:goog.ModuleType.GOOG};if(goog.isFunction(a))var c=a.call(void 0,{});else if(goog.isString(a))goog.useSafari10Workaround()&&(a=goog.workaroundSafari10EvalBug(a)),c=goog.loadModuleFromSource_.call(void 0,a);else throw Error(\"Invalid module definition\");var d=goog.moduleLoaderState_.moduleName;if(goog.isString(d)&&d)goog.moduleLoaderState_.declareLegacyNamespace?goog.constructNamespace_(d,\nc):goog.SEAL_MODULE_EXPORTS&&Object.seal&&\"object\"==typeof c&&null!=c&&Object.seal(c),goog.loadedModules_[d]={exports:c,type:goog.ModuleType.GOOG,moduleId:goog.moduleLoaderState_.moduleName};else throw Error('Invalid module name \"'+d+'\"');}finally{goog.moduleLoaderState_=b}};goog.loadModuleFromSource_=function(a){eval(a);return{}};goog.normalizePath_=function(a){a=a.split(\"/\");for(var b=0;b<a.length;)\".\"==a[b]?a.splice(b,1):b&&\"..\"==a[b]&&a[b-1]&&\"..\"!=a[b-1]?a.splice(--b,2):b++;return a.join(\"/\")};\ngoog.loadFileSync_=function(a){if(goog.global.CLOSURE_LOAD_FILE_SYNC)return goog.global.CLOSURE_LOAD_FILE_SYNC(a);try{var b=new goog.global.XMLHttpRequest;b.open(\"get\",a,!1);b.send();return 0==b.status||200==b.status?b.responseText:null}catch(c){return null}};\ngoog.transpile_=function(a,b,c){var d=goog.global.$jscomp;d||(goog.global.$jscomp=d={});var e=d.transpile;if(!e){var f=goog.basePath+goog.TRANSPILER,g=goog.loadFileSync_(f);if(g){(function(){(0,eval)(g+\"\\n//# sourceURL=\"+f)}).call(goog.global);if(goog.global.$gwtExport&&goog.global.$gwtExport.$jscomp&&!goog.global.$gwtExport.$jscomp.transpile)throw Error('The transpiler did not properly export the \"transpile\" method. $gwtExport: '+JSON.stringify(goog.global.$gwtExport));goog.global.$jscomp.transpile=\ngoog.global.$gwtExport.$jscomp.transpile;d=goog.global.$jscomp;e=d.transpile}}e||(e=d.transpile=function(a,b){goog.logToConsole_(b+\" requires transpilation but no transpiler was found.\");return a});return e(a,b,c)};\ngoog.typeOf=function(a){var b=typeof a;if(\"object\"==b)if(a){if(a instanceof Array)return\"array\";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(\"[object Window]\"==c)return\"object\";if(\"[object Array]\"==c||\"number\"==typeof a.length&&\"undefined\"!=typeof a.splice&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"splice\"))return\"array\";if(\"[object Function]\"==c||\"undefined\"!=typeof a.call&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"call\"))return\"function\"}else return\"null\";\nelse if(\"function\"==b&&\"undefined\"==typeof a.call)return\"object\";return b};goog.isNull=function(a){return null===a};goog.isDefAndNotNull=function(a){return null!=a};goog.isArray=function(a){return\"array\"==goog.typeOf(a)};goog.isArrayLike=function(a){var b=goog.typeOf(a);return\"array\"==b||\"object\"==b&&\"number\"==typeof a.length};goog.isDateLike=function(a){return goog.isObject(a)&&\"function\"==typeof a.getFullYear};goog.isFunction=function(a){return\"function\"==goog.typeOf(a)};\ngoog.isObject=function(a){var b=typeof a;return\"object\"==b&&null!=a||\"function\"==b};goog.getUid=function(a){return a[goog.UID_PROPERTY_]||(a[goog.UID_PROPERTY_]=++goog.uidCounter_)};goog.hasUid=function(a){return!!a[goog.UID_PROPERTY_]};goog.removeUid=function(a){null!==a&&\"removeAttribute\"in a&&a.removeAttribute(goog.UID_PROPERTY_);try{delete a[goog.UID_PROPERTY_]}catch(b){}};goog.UID_PROPERTY_=\"closure_uid_\"+(1E9*Math.random()>>>0);goog.uidCounter_=0;goog.getHashCode=goog.getUid;\ngoog.removeHashCode=goog.removeUid;goog.cloneObject=function(a){var b=goog.typeOf(a);if(\"object\"==b||\"array\"==b){if(\"function\"===typeof a.clone)return a.clone();b=\"array\"==b?[]:{};for(var c in a)b[c]=goog.cloneObject(a[c]);return b}return a};goog.bindNative_=function(a,b,c){return a.call.apply(a.bind,arguments)};\ngoog.bindJs_=function(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}};goog.bind=function(a,b,c){Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf(\"native code\")?goog.bind=goog.bindNative_:goog.bind=goog.bindJs_;return goog.bind.apply(null,arguments)};\ngoog.partial=function(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var b=c.slice();b.push.apply(b,arguments);return a.apply(this,b)}};goog.mixin=function(a,b){for(var c in b)a[c]=b[c]};goog.now=goog.TRUSTED_SITE&&Date.now||function(){return+new Date};\ngoog.globalEval=function(a){if(goog.global.execScript)goog.global.execScript(a,\"JavaScript\");else if(goog.global.eval){if(null==goog.evalWorksForGlobals_){try{goog.global.eval(\"var _evalTest_ = 1;\")}catch(d){}if(\"undefined\"!=typeof goog.global._evalTest_){try{delete goog.global._evalTest_}catch(d){}goog.evalWorksForGlobals_=!0}else goog.evalWorksForGlobals_=!1}if(goog.evalWorksForGlobals_)goog.global.eval(a);else{var b=goog.global.document,c=b.createElement(\"SCRIPT\");c.type=\"text/javascript\";c.defer=\n!1;c.appendChild(b.createTextNode(a));b.head.appendChild(c);b.head.removeChild(c)}}else throw Error(\"goog.globalEval not available\");};goog.evalWorksForGlobals_=null;\ngoog.getCssName=function(a,b){if(\".\"==String(a).charAt(0))throw Error('className passed in goog.getCssName must not start with \".\". You passed: '+a);var c=function(a){return goog.cssNameMapping_[a]||a},d=function(a){a=a.split(\"-\");for(var b=[],d=0;d<a.length;d++)b.push(c(a[d]));return b.join(\"-\")};d=goog.cssNameMapping_?\"BY_WHOLE\"==goog.cssNameMappingStyle_?c:d:function(a){return a};a=b?a+\"-\"+d(b):d(a);return goog.global.CLOSURE_CSS_NAME_MAP_FN?goog.global.CLOSURE_CSS_NAME_MAP_FN(a):a};\ngoog.setCssNameMapping=function(a,b){goog.cssNameMapping_=a;goog.cssNameMappingStyle_=b};!COMPILED&&goog.global.CLOSURE_CSS_NAME_MAPPING&&(goog.cssNameMapping_=goog.global.CLOSURE_CSS_NAME_MAPPING);goog.getMsg=function(a,b,c){c&&c.html&&(a=a.replace(/</g,\"&lt;\"));b&&(a=a.replace(/\\{\\$([^}]+)}/g,function(a,c){return null!=b&&c in b?b[c]:a}));return a};goog.getMsgWithFallback=function(a,b){return a};goog.exportSymbol=function(a,b,c){goog.exportPath_(a,b,c)};\ngoog.exportProperty=function(a,b,c){a[b]=c};goog.inherits=function(a,b){function c(){}c.prototype=b.prototype;a.superClass_=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.base=function(a,c,f){for(var d=Array(arguments.length-2),e=2;e<arguments.length;e++)d[e-2]=arguments[e];return b.prototype[c].apply(a,d)}};\ngoog.base=function(a,b,c){var d=arguments.callee.caller;if(goog.STRICT_MODE_COMPATIBLE||goog.DEBUG&&!d)throw Error(\"arguments.caller not defined.  goog.base() cannot be used with strict mode code. See http://www.ecma-international.org/ecma-262/5.1/#sec-C\");if(\"undefined\"!==typeof d.superClass_){for(var e=Array(arguments.length-1),f=1;f<arguments.length;f++)e[f-1]=arguments[f];return d.superClass_.constructor.apply(a,e)}if(\"string\"!=typeof b&&\"symbol\"!=typeof b)throw Error(\"method names provided to goog.base must be a string or a symbol\");\ne=Array(arguments.length-2);for(f=2;f<arguments.length;f++)e[f-2]=arguments[f];f=!1;for(var g=a.constructor.prototype;g;g=Object.getPrototypeOf(g))if(g[b]===d)f=!0;else if(f)return g[b].apply(a,e);if(a[b]===d)return a.constructor.prototype[b].apply(a,e);throw Error(\"goog.base called from a method of one name to a method of a different name\");};goog.scope=function(a){if(goog.isInModuleLoader_())throw Error(\"goog.scope is not supported within a module.\");a.call(goog.global)};\nCOMPILED||(goog.global.COMPILED=COMPILED);goog.defineClass=function(a,b){var c=b.constructor,d=b.statics;c&&c!=Object.prototype.constructor||(c=function(){throw Error(\"cannot instantiate an interface (no constructor defined).\");});c=goog.defineClass.createSealingConstructor_(c,a);a&&goog.inherits(c,a);delete b.constructor;delete b.statics;goog.defineClass.applyProperties_(c.prototype,b);null!=d&&(d instanceof Function?d(c):goog.defineClass.applyProperties_(c,d));return c};\ngoog.defineClass.SEAL_CLASS_INSTANCES=goog.DEBUG;goog.defineClass.createSealingConstructor_=function(a,b){if(!goog.defineClass.SEAL_CLASS_INSTANCES)return a;var c=!goog.defineClass.isUnsealable_(b),d=function(){var b=a.apply(this,arguments)||this;b[goog.UID_PROPERTY_]=b[goog.UID_PROPERTY_];this.constructor===d&&c&&Object.seal instanceof Function&&Object.seal(b);return b};return d};goog.defineClass.isUnsealable_=function(a){return a&&a.prototype&&a.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_]};\ngoog.defineClass.OBJECT_PROTOTYPE_FIELDS_=\"constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf\".split(\" \");goog.defineClass.applyProperties_=function(a,b){for(var c in b)Object.prototype.hasOwnProperty.call(b,c)&&(a[c]=b[c]);for(var d=0;d<goog.defineClass.OBJECT_PROTOTYPE_FIELDS_.length;d++)c=goog.defineClass.OBJECT_PROTOTYPE_FIELDS_[d],Object.prototype.hasOwnProperty.call(b,c)&&(a[c]=b[c])};\ngoog.tagUnsealableClass=function(a){!COMPILED&&goog.defineClass.SEAL_CLASS_INSTANCES&&(a.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_]=!0)};goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_=\"goog_defineClass_legacy_unsealable\";\n!COMPILED&&goog.DEPENDENCIES_ENABLED&&(goog.inHtmlDocument_=function(){var a=goog.global.document;return null!=a&&\"write\"in a},goog.isDocumentLoading_=function(){var a=goog.global.document;return a.attachEvent?\"complete\"!=a.readyState:\"loading\"==a.readyState},goog.findBasePath_=function(){if(goog.isDef(goog.global.CLOSURE_BASE_PATH)&&goog.isString(goog.global.CLOSURE_BASE_PATH))goog.basePath=goog.global.CLOSURE_BASE_PATH;else if(goog.inHtmlDocument_()){var a=goog.global.document,b=a.currentScript;\na=b?[b]:a.getElementsByTagName(\"SCRIPT\");for(b=a.length-1;0<=b;--b){var c=a[b].src,d=c.lastIndexOf(\"?\");d=-1==d?c.length:d;if(\"base.js\"==c.substr(d-7,7)){goog.basePath=c.substr(0,d-7);break}}}},goog.findBasePath_(),goog.Transpiler=function(){this.requiresTranspilation_=null;this.transpilationTarget_=goog.TRANSPILE_TO_LANGUAGE},goog.Transpiler.prototype.createRequiresTranspilation_=function(){function a(a,b){e?d[a]=!0:b()?(c=a,d[a]=!1):e=d[a]=!0}function b(a){try{return!!eval(a)}catch(h){return!1}}\nvar c=\"es3\",d={es3:!1},e=!1,f=goog.global.navigator&&goog.global.navigator.userAgent?goog.global.navigator.userAgent:\"\";a(\"es5\",function(){return b(\"[1,].length==1\")});a(\"es6\",function(){return f.match(/Edge\\/(\\d+)(\\.\\d)*/i)?!1:b('(()=>{\"use strict\";class X{constructor(){if(new.target!=String)throw 1;this.x=42}}let q=Reflect.construct(X,[],String);if(q.x!=42||!(q instanceof String))throw 1;for(const a of[2,3]){if(a==2)continue;function f(z={a}){let a=0;return z.a}{function f(){return 0;}}return f()==3}})()')});\na(\"es7\",function(){return b(\"2 ** 2 == 4\")});a(\"es8\",function(){return b(\"async () => 1, true\")});a(\"es9\",function(){return b(\"({...rest} = {}), true\")});a(\"es_next\",function(){return!1});return{target:c,map:d}},goog.Transpiler.prototype.needsTranspile=function(a,b){if(\"always\"==goog.TRANSPILE)return!0;if(\"never\"==goog.TRANSPILE)return!1;if(!this.requiresTranspilation_){var c=this.createRequiresTranspilation_();this.requiresTranspilation_=c.map;this.transpilationTarget_=this.transpilationTarget_||\nc.target}if(a in this.requiresTranspilation_)return this.requiresTranspilation_[a]?!0:!goog.inHtmlDocument_()||\"es6\"!=b||\"noModule\"in goog.global.document.createElement(\"script\")?!1:!0;throw Error(\"Unknown language mode: \"+a);},goog.Transpiler.prototype.transpile=function(a,b){return goog.transpile_(a,b,this.transpilationTarget_)},goog.transpiler_=new goog.Transpiler,goog.protectScriptTag_=function(a){return a.replace(/<\\/(SCRIPT)/ig,\"\\\\x3c/$1\")},goog.DebugLoader_=function(){this.dependencies_={};\nthis.idToPath_={};this.written_={};this.loadingDeps_=[];this.depsToLoad_=[];this.paused_=!1;this.factory_=new goog.DependencyFactory(goog.transpiler_);this.deferredCallbacks_={};this.deferredQueue_=[]},goog.DebugLoader_.prototype.bootstrap=function(a,b){function c(){d&&(goog.global.setTimeout(d,0),d=null)}var d=b;if(a.length){b=[];for(var e=0;e<a.length;e++){var f=this.getPathFromDeps_(a[e]);if(!f)throw Error(\"Unregonized namespace: \"+a[e]);b.push(this.dependencies_[f])}f=goog.require;var g=0;for(e=\n0;e<a.length;e++)f(a[e]),b[e].onLoad(function(){++g==a.length&&c()})}else c()},goog.DebugLoader_.prototype.loadClosureDeps=function(){this.depsToLoad_.push(this.factory_.createDependency(goog.normalizePath_(goog.basePath+\"deps.js\"),\"deps.js\",[],[],{},!1));this.loadDeps_()},goog.DebugLoader_.prototype.requested=function(a,b){(a=this.getPathFromDeps_(a))&&(b||this.areDepsLoaded_(this.dependencies_[a].requires))&&(b=this.deferredCallbacks_[a])&&(delete this.deferredCallbacks_[a],b())},goog.DebugLoader_.prototype.setDependencyFactory=\nfunction(a){this.factory_=a},goog.DebugLoader_.prototype.load_=function(a){if(this.getPathFromDeps_(a)){var b=this,c=[],d=function(a){var e=b.getPathFromDeps_(a);if(!e)throw Error(\"Bad dependency path or symbol: \"+a);if(!b.written_[e]){b.written_[e]=!0;a=b.dependencies_[e];for(e=0;e<a.requires.length;e++)goog.isProvided_(a.requires[e])||d(a.requires[e]);c.push(a)}};d(a);a=!!this.depsToLoad_.length;this.depsToLoad_=this.depsToLoad_.concat(c);this.paused_||a||this.loadDeps_()}else throw a=\"goog.require could not find: \"+\na,goog.logToConsole_(a),Error(a);},goog.DebugLoader_.prototype.loadDeps_=function(){for(var a=this,b=this.paused_;this.depsToLoad_.length&&!b;)(function(){var c=!1,d=a.depsToLoad_.shift(),e=!1;a.loading_(d);var f={pause:function(){if(c)throw Error(\"Cannot call pause after the call to load.\");b=!0},resume:function(){c?a.resume_():b=!1},loaded:function(){if(e)throw Error(\"Double call to loaded.\");e=!0;a.loaded_(d)},pending:function(){for(var b=[],c=0;c<a.loadingDeps_.length;c++)b.push(a.loadingDeps_[c]);\nreturn b},setModuleState:function(a){goog.moduleLoaderState_={type:a,moduleName:\"\",declareLegacyNamespace:!1}},registerEs6ModuleExports:function(a,b,c){c&&(goog.loadedModules_[c]={exports:b,type:goog.ModuleType.ES6,moduleId:c||\"\"})},registerGoogModuleExports:function(a,b){goog.loadedModules_[a]={exports:b,type:goog.ModuleType.GOOG,moduleId:a}},clearModuleState:function(){goog.moduleLoaderState_=null},defer:function(b){if(c)throw Error(\"Cannot register with defer after the call to load.\");a.defer_(d,\nb)},areDepsLoaded:function(){return a.areDepsLoaded_(d.requires)}};try{d.load(f)}finally{c=!0}})();b&&this.pause_()},goog.DebugLoader_.prototype.pause_=function(){this.paused_=!0},goog.DebugLoader_.prototype.resume_=function(){this.paused_&&(this.paused_=!1,this.loadDeps_())},goog.DebugLoader_.prototype.loading_=function(a){this.loadingDeps_.push(a)},goog.DebugLoader_.prototype.loaded_=function(a){for(var b=0;b<this.loadingDeps_.length;b++)if(this.loadingDeps_[b]==a){this.loadingDeps_.splice(b,1);\nbreak}for(b=0;b<this.deferredQueue_.length;b++)if(this.deferredQueue_[b]==a.path){this.deferredQueue_.splice(b,1);break}if(this.loadingDeps_.length==this.deferredQueue_.length&&!this.depsToLoad_.length)for(;this.deferredQueue_.length;)this.requested(this.deferredQueue_.shift(),!0);a.loaded()},goog.DebugLoader_.prototype.areDepsLoaded_=function(a){for(var b=0;b<a.length;b++){var c=this.getPathFromDeps_(a[b]);if(!c||!(c in this.deferredCallbacks_||goog.isProvided_(a[b])))return!1}return!0},goog.DebugLoader_.prototype.getPathFromDeps_=\nfunction(a){return a in this.idToPath_?this.idToPath_[a]:a in this.dependencies_?a:null},goog.DebugLoader_.prototype.defer_=function(a,b){this.deferredCallbacks_[a.path]=b;this.deferredQueue_.push(a.path)},goog.LoadController=function(){},goog.LoadController.prototype.pause=function(){},goog.LoadController.prototype.resume=function(){},goog.LoadController.prototype.loaded=function(){},goog.LoadController.prototype.pending=function(){},goog.LoadController.prototype.registerEs6ModuleExports=function(a,\nb,c){},goog.LoadController.prototype.setModuleState=function(a){},goog.LoadController.prototype.clearModuleState=function(){},goog.LoadController.prototype.defer=function(a){},goog.LoadController.prototype.areDepsLoaded=function(){},goog.Dependency=function(a,b,c,d,e){this.path=a;this.relativePath=b;this.provides=c;this.requires=d;this.loadFlags=e;this.loaded_=!1;this.loadCallbacks_=[]},goog.Dependency.prototype.getPathName=function(){var a=this.path,b=a.indexOf(\"://\");0<=b&&(a=a.substring(b+3),b=\na.indexOf(\"/\"),0<=b&&(a=a.substring(b+1)));return a},goog.Dependency.prototype.onLoad=function(a){this.loaded_?a():this.loadCallbacks_.push(a)},goog.Dependency.prototype.loaded=function(){this.loaded_=!0;var a=this.loadCallbacks_;this.loadCallbacks_=[];for(var b=0;b<a.length;b++)a[b]()},goog.Dependency.defer_=!1,goog.Dependency.callbackMap_={},goog.Dependency.registerCallback_=function(a){var b=Math.random().toString(32);goog.Dependency.callbackMap_[b]=a;return b},goog.Dependency.unregisterCallback_=\nfunction(a){delete goog.Dependency.callbackMap_[a]},goog.Dependency.callback_=function(a,b){if(a in goog.Dependency.callbackMap_){for(var c=goog.Dependency.callbackMap_[a],d=[],e=1;e<arguments.length;e++)d.push(arguments[e]);c.apply(void 0,d)}else throw Error(\"Callback key \"+a+\" does not exist (was base.js loaded more than once?).\");},goog.Dependency.prototype.load=function(a){if(goog.global.CLOSURE_IMPORT_SCRIPT)goog.global.CLOSURE_IMPORT_SCRIPT(this.path)?a.loaded():a.pause();else if(goog.inHtmlDocument_()){var b=\ngoog.global.document;if(\"complete\"==b.readyState&&!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING){if(/\\bdeps.js$/.test(this.path)){a.loaded();return}throw Error('Cannot write \"'+this.path+'\" after document load');}if(!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING&&goog.isDocumentLoading_()){var c=goog.Dependency.registerCallback_(function(b){goog.DebugLoader_.IS_OLD_IE_&&\"complete\"!=b.readyState||(goog.Dependency.unregisterCallback_(c),a.loaded())}),d=!goog.DebugLoader_.IS_OLD_IE_&&goog.getScriptNonce()?\n' nonce=\"'+goog.getScriptNonce()+'\"':\"\";d='<script src=\"'+this.path+'\" '+(goog.DebugLoader_.IS_OLD_IE_?\"onreadystatechange\":\"onload\")+\"=\\\"goog.Dependency.callback_('\"+c+'\\', this)\" type=\"text/javascript\" '+(goog.Dependency.defer_?\"defer\":\"\")+d+\">\\x3c/script>\";b.write(goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createHTML(d):d)}else{var e=b.createElement(\"script\");e.defer=goog.Dependency.defer_;e.async=!1;e.type=\"text/javascript\";(d=goog.getScriptNonce())&&e.setAttribute(\"nonce\",d);goog.DebugLoader_.IS_OLD_IE_?\n(a.pause(),e.onreadystatechange=function(){if(\"loaded\"==e.readyState||\"complete\"==e.readyState)a.loaded(),a.resume()}):e.onload=function(){e.onload=null;a.loaded()};e.src=goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createScriptURL(this.path):this.path;b.head.appendChild(e)}}else goog.logToConsole_(\"Cannot use default debug loader outside of HTML documents.\"),\"deps.js\"==this.relativePath?(goog.logToConsole_(\"Consider setting CLOSURE_IMPORT_SCRIPT before loading base.js, or setting CLOSURE_NO_DEPS to true.\"),\na.loaded()):a.pause()},goog.Es6ModuleDependency=function(a,b,c,d,e){goog.Dependency.call(this,a,b,c,d,e)},goog.inherits(goog.Es6ModuleDependency,goog.Dependency),goog.Es6ModuleDependency.prototype.load=function(a){function b(a,b){a=b?'<script type=\"module\" crossorigin>'+b+\"\\x3c/script>\":'<script type=\"module\" crossorigin src=\"'+a+'\">\\x3c/script>';d.write(goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createHTML(a):a)}function c(a,b){var c=d.createElement(\"script\");c.defer=!0;c.async=!1;c.type=\n\"module\";c.setAttribute(\"crossorigin\",!0);var e=goog.getScriptNonce();e&&c.setAttribute(\"nonce\",e);b?c.textContent=goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createScript(b):b:c.src=goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createScriptURL(a):a;d.head.appendChild(c)}if(goog.global.CLOSURE_IMPORT_SCRIPT)goog.global.CLOSURE_IMPORT_SCRIPT(this.path)?a.loaded():a.pause();else if(goog.inHtmlDocument_()){var d=goog.global.document,e=this;if(goog.isDocumentLoading_()){var f=b;goog.Dependency.defer_=\n!0}else f=c;var g=goog.Dependency.registerCallback_(function(){goog.Dependency.unregisterCallback_(g);a.setModuleState(goog.ModuleType.ES6)});f(void 0,'goog.Dependency.callback_(\"'+g+'\")');f(this.path,void 0);var h=goog.Dependency.registerCallback_(function(b){goog.Dependency.unregisterCallback_(h);a.registerEs6ModuleExports(e.path,b,goog.moduleLoaderState_.moduleName)});f(void 0,'import * as m from \"'+this.path+'\"; goog.Dependency.callback_(\"'+h+'\", m)');var k=goog.Dependency.registerCallback_(function(){goog.Dependency.unregisterCallback_(k);\na.clearModuleState();a.loaded()});f(void 0,'goog.Dependency.callback_(\"'+k+'\")')}else goog.logToConsole_(\"Cannot use default debug loader outside of HTML documents.\"),a.pause()},goog.TransformedDependency=function(a,b,c,d,e){goog.Dependency.call(this,a,b,c,d,e);this.contents_=null;this.lazyFetch_=!goog.inHtmlDocument_()||!(\"noModule\"in goog.global.document.createElement(\"script\"))},goog.inherits(goog.TransformedDependency,goog.Dependency),goog.TransformedDependency.prototype.load=function(a){function b(){e.contents_=\ngoog.loadFileSync_(e.path);e.contents_&&(e.contents_=e.transform(e.contents_),e.contents_&&(e.contents_+=\"\\n//# sourceURL=\"+e.path))}function c(){e.lazyFetch_&&b();if(e.contents_){f&&a.setModuleState(goog.ModuleType.ES6);try{var c=e.contents_;e.contents_=null;goog.globalEval(c);if(f)var d=goog.moduleLoaderState_.moduleName}finally{f&&a.clearModuleState()}f&&goog.global.$jscomp.require.ensure([e.getPathName()],function(){a.registerEs6ModuleExports(e.path,goog.global.$jscomp.require(e.getPathName()),\nd)});a.loaded()}}function d(){var a=goog.global.document,b=goog.Dependency.registerCallback_(function(){goog.Dependency.unregisterCallback_(b);c()}),d='<script type=\"text/javascript\">'+goog.protectScriptTag_('goog.Dependency.callback_(\"'+b+'\");')+\"\\x3c/script>\";a.write(goog.TRUSTED_TYPES_POLICY_?goog.TRUSTED_TYPES_POLICY_.createHTML(d):d)}var e=this;if(goog.global.CLOSURE_IMPORT_SCRIPT)b(),this.contents_&&goog.global.CLOSURE_IMPORT_SCRIPT(\"\",this.contents_)?(this.contents_=null,a.loaded()):a.pause();\nelse{var f=this.loadFlags.module==goog.ModuleType.ES6;this.lazyFetch_||b();var g=1<a.pending().length,h=g&&goog.DebugLoader_.IS_OLD_IE_;g=goog.Dependency.defer_&&(g||goog.isDocumentLoading_());if(h||g)a.defer(function(){c()});else{var k=goog.global.document;h=goog.inHtmlDocument_()&&\"ActiveXObject\"in goog.global;if(f&&goog.inHtmlDocument_()&&goog.isDocumentLoading_()&&!h){goog.Dependency.defer_=!0;a.pause();var l=k.onreadystatechange;k.onreadystatechange=function(){\"interactive\"==k.readyState&&(k.onreadystatechange=\nl,c(),a.resume());goog.isFunction(l)&&l.apply(void 0,arguments)}}else!goog.DebugLoader_.IS_OLD_IE_&&goog.inHtmlDocument_()&&goog.isDocumentLoading_()?d():c()}}},goog.TransformedDependency.prototype.transform=function(a){},goog.TranspiledDependency=function(a,b,c,d,e,f){goog.TransformedDependency.call(this,a,b,c,d,e);this.transpiler=f},goog.inherits(goog.TranspiledDependency,goog.TransformedDependency),goog.TranspiledDependency.prototype.transform=function(a){return this.transpiler.transpile(a,this.getPathName())},\ngoog.PreTranspiledEs6ModuleDependency=function(a,b,c,d,e){goog.TransformedDependency.call(this,a,b,c,d,e)},goog.inherits(goog.PreTranspiledEs6ModuleDependency,goog.TransformedDependency),goog.PreTranspiledEs6ModuleDependency.prototype.transform=function(a){return a},goog.GoogModuleDependency=function(a,b,c,d,e,f,g){goog.TransformedDependency.call(this,a,b,c,d,e);this.needsTranspile_=f;this.transpiler_=g},goog.inherits(goog.GoogModuleDependency,goog.TransformedDependency),goog.GoogModuleDependency.prototype.transform=\nfunction(a){this.needsTranspile_&&(a=this.transpiler_.transpile(a,this.getPathName()));return goog.LOAD_MODULE_USING_EVAL&&goog.isDef(goog.global.JSON)?\"goog.loadModule(\"+goog.global.JSON.stringify(a+\"\\n//# sourceURL=\"+this.path+\"\\n\")+\");\":'goog.loadModule(function(exports) {\"use strict\";'+a+\"\\n;return exports});\\n//# sourceURL=\"+this.path+\"\\n\"},goog.DebugLoader_.IS_OLD_IE_=!(goog.global.atob||!goog.global.document||!goog.global.document.all),goog.DebugLoader_.prototype.addDependency=function(a,b,\nc,d){b=b||[];a=a.replace(/\\\\/g,\"/\");var e=goog.normalizePath_(goog.basePath+a);d&&\"boolean\"!==typeof d||(d=d?{module:goog.ModuleType.GOOG}:{});c=this.factory_.createDependency(e,a,b,c,d,goog.transpiler_.needsTranspile(d.lang||\"es3\",d.module));this.dependencies_[e]=c;for(c=0;c<b.length;c++)this.idToPath_[b[c]]=e;this.idToPath_[a]=e},goog.DependencyFactory=function(a){this.transpiler=a},goog.DependencyFactory.prototype.createDependency=function(a,b,c,d,e,f){return e.module==goog.ModuleType.GOOG?new goog.GoogModuleDependency(a,\nb,c,d,e,f,this.transpiler):f?new goog.TranspiledDependency(a,b,c,d,e,this.transpiler):e.module==goog.ModuleType.ES6?\"never\"==goog.TRANSPILE&&goog.ASSUME_ES_MODULES_TRANSPILED?new goog.PreTranspiledEs6ModuleDependency(a,b,c,d,e):new goog.Es6ModuleDependency(a,b,c,d,e):new goog.Dependency(a,b,c,d,e)},goog.debugLoader_=new goog.DebugLoader_,goog.loadClosureDeps=function(){goog.debugLoader_.loadClosureDeps()},goog.setDependencyFactory=function(a){goog.debugLoader_.setDependencyFactory(a)},goog.global.CLOSURE_NO_DEPS||\ngoog.debugLoader_.loadClosureDeps(),goog.bootstrap=function(a,b){goog.debugLoader_.bootstrap(a,b)});goog.TRUSTED_TYPES_POLICY_NAME=\"\";goog.identity_=function(a){return a};goog.createTrustedTypesPolicy=function(a){var b=null;if(\"undefined\"===typeof TrustedTypes||!TrustedTypes.createPolicy)return b;try{b=TrustedTypes.createPolicy(a,{createHTML:goog.identity_,createScript:goog.identity_,createScriptURL:goog.identity_,createURL:goog.identity_})}catch(c){goog.logToConsole_(c.message)}return b};\ngoog.TRUSTED_TYPES_POLICY_=goog.TRUSTED_TYPES_POLICY_NAME?goog.createTrustedTypesPolicy(goog.TRUSTED_TYPES_POLICY_NAME+\"#base\"):null;goog.object={};goog.object.is=function(a,b){return a===b?0!==a||1/a===1/b:a!==a&&b!==b};goog.object.forEach=function(a,b,c){for(var d in a)b.call(c,a[d],d,a)};goog.object.filter=function(a,b,c){var d={},e;for(e in a)b.call(c,a[e],e,a)&&(d[e]=a[e]);return d};goog.object.map=function(a,b,c){var d={},e;for(e in a)d[e]=b.call(c,a[e],e,a);return d};goog.object.some=function(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return!0;return!1};\ngoog.object.every=function(a,b,c){for(var d in a)if(!b.call(c,a[d],d,a))return!1;return!0};goog.object.getCount=function(a){var b=0,c;for(c in a)b++;return b};goog.object.getAnyKey=function(a){for(var b in a)return b};goog.object.getAnyValue=function(a){for(var b in a)return a[b]};goog.object.contains=function(a,b){return goog.object.containsValue(a,b)};goog.object.getValues=function(a){var b=[],c=0,d;for(d in a)b[c++]=a[d];return b};\ngoog.object.getKeys=function(a){var b=[],c=0,d;for(d in a)b[c++]=d;return b};goog.object.getValueByKeys=function(a,b){var c=goog.isArrayLike(b),d=c?b:arguments;for(c=c?0:1;c<d.length;c++){if(null==a)return;a=a[d[c]]}return a};goog.object.containsKey=function(a,b){return null!==a&&b in a};goog.object.containsValue=function(a,b){for(var c in a)if(a[c]==b)return!0;return!1};goog.object.findKey=function(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return d};\ngoog.object.findValue=function(a,b,c){return(b=goog.object.findKey(a,b,c))&&a[b]};goog.object.isEmpty=function(a){for(var b in a)return!1;return!0};goog.object.clear=function(a){for(var b in a)delete a[b]};goog.object.remove=function(a,b){var c;(c=b in a)&&delete a[b];return c};goog.object.add=function(a,b,c){if(null!==a&&b in a)throw Error('The object already contains the key \"'+b+'\"');goog.object.set(a,b,c)};goog.object.get=function(a,b,c){return null!==a&&b in a?a[b]:c};\ngoog.object.set=function(a,b,c){a[b]=c};goog.object.setIfUndefined=function(a,b,c){return b in a?a[b]:a[b]=c};goog.object.setWithReturnValueIfNotSet=function(a,b,c){if(b in a)return a[b];c=c();return a[b]=c};goog.object.equals=function(a,b){for(var c in a)if(!(c in b)||a[c]!==b[c])return!1;for(var d in b)if(!(d in a))return!1;return!0};goog.object.clone=function(a){var b={},c;for(c in a)b[c]=a[c];return b};\ngoog.object.unsafeClone=function(a){var b=goog.typeOf(a);if(\"object\"==b||\"array\"==b){if(goog.isFunction(a.clone))return a.clone();b=\"array\"==b?[]:{};for(var c in a)b[c]=goog.object.unsafeClone(a[c]);return b}return a};goog.object.transpose=function(a){var b={},c;for(c in a)b[a[c]]=c;return b};goog.object.PROTOTYPE_FIELDS_=\"constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf\".split(\" \");\ngoog.object.extend=function(a,b){for(var c,d,e=1;e<arguments.length;e++){d=arguments[e];for(c in d)a[c]=d[c];for(var f=0;f<goog.object.PROTOTYPE_FIELDS_.length;f++)c=goog.object.PROTOTYPE_FIELDS_[f],Object.prototype.hasOwnProperty.call(d,c)&&(a[c]=d[c])}};\ngoog.object.create=function(a){var b=arguments.length;if(1==b&&goog.isArray(arguments[0]))return goog.object.create.apply(null,arguments[0]);if(b%2)throw Error(\"Uneven number of arguments\");for(var c={},d=0;d<b;d+=2)c[arguments[d]]=arguments[d+1];return c};goog.object.createSet=function(a){var b=arguments.length;if(1==b&&goog.isArray(arguments[0]))return goog.object.createSet.apply(null,arguments[0]);for(var c={},d=0;d<b;d++)c[arguments[d]]=!0;return c};\ngoog.object.createImmutableView=function(a){var b=a;Object.isFrozen&&!Object.isFrozen(a)&&(b=Object.create(a),Object.freeze(b));return b};goog.object.isImmutableView=function(a){return!!Object.isFrozen&&Object.isFrozen(a)};\ngoog.object.getAllPropertyNames=function(a,b,c){if(!a)return[];if(!Object.getOwnPropertyNames||!Object.getPrototypeOf)return goog.object.getKeys(a);for(var d={};a&&(a!==Object.prototype||b)&&(a!==Function.prototype||c);){for(var e=Object.getOwnPropertyNames(a),f=0;f<e.length;f++)d[e[f]]=!0;a=Object.getPrototypeOf(a)}return goog.object.getKeys(d)};goog.object.getSuperClass=function(a){return(a=Object.getPrototypeOf(a.prototype))&&a.constructor};goog.debug={};goog.debug.Error=function(a){if(Error.captureStackTrace)Error.captureStackTrace(this,goog.debug.Error);else{var b=Error().stack;b&&(this.stack=b)}a&&(this.message=String(a));this.reportErrorToServer=!0};goog.inherits(goog.debug.Error,Error);goog.debug.Error.prototype.name=\"CustomError\";goog.dom={};goog.dom.NodeType={ELEMENT:1,ATTRIBUTE:2,TEXT:3,CDATA_SECTION:4,ENTITY_REFERENCE:5,ENTITY:6,PROCESSING_INSTRUCTION:7,COMMENT:8,DOCUMENT:9,DOCUMENT_TYPE:10,DOCUMENT_FRAGMENT:11,NOTATION:12};goog.asserts={};goog.asserts.ENABLE_ASSERTS=goog.DEBUG;goog.asserts.AssertionError=function(a,b){goog.debug.Error.call(this,goog.asserts.subs_(a,b));this.messagePattern=a};goog.inherits(goog.asserts.AssertionError,goog.debug.Error);goog.asserts.AssertionError.prototype.name=\"AssertionError\";goog.asserts.DEFAULT_ERROR_HANDLER=function(a){throw a;};goog.asserts.errorHandler_=goog.asserts.DEFAULT_ERROR_HANDLER;\ngoog.asserts.subs_=function(a,b){a=a.split(\"%s\");for(var c=\"\",d=a.length-1,e=0;e<d;e++)c+=a[e]+(e<b.length?b[e]:\"%s\");return c+a[d]};goog.asserts.doAssertFailure_=function(a,b,c,d){var e=\"Assertion failed\";if(c){e+=\": \"+c;var f=d}else a&&(e+=\": \"+a,f=b);a=new goog.asserts.AssertionError(\"\"+e,f||[]);goog.asserts.errorHandler_(a)};goog.asserts.setErrorHandler=function(a){goog.asserts.ENABLE_ASSERTS&&(goog.asserts.errorHandler_=a)};\ngoog.asserts.assert=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!a&&goog.asserts.doAssertFailure_(\"\",null,b,Array.prototype.slice.call(arguments,2));return a};goog.asserts.assertExists=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&null==a&&goog.asserts.doAssertFailure_(\"Expected to exist: %s.\",[a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.fail=function(a,b){goog.asserts.ENABLE_ASSERTS&&goog.asserts.errorHandler_(new goog.asserts.AssertionError(\"Failure\"+(a?\": \"+a:\"\"),Array.prototype.slice.call(arguments,1)))};goog.asserts.assertNumber=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isNumber(a)&&goog.asserts.doAssertFailure_(\"Expected number but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.assertString=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isString(a)&&goog.asserts.doAssertFailure_(\"Expected string but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};goog.asserts.assertFunction=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isFunction(a)&&goog.asserts.doAssertFailure_(\"Expected function but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.assertObject=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isObject(a)&&goog.asserts.doAssertFailure_(\"Expected object but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};goog.asserts.assertArray=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isArray(a)&&goog.asserts.doAssertFailure_(\"Expected array but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.assertBoolean=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isBoolean(a)&&goog.asserts.doAssertFailure_(\"Expected boolean but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};goog.asserts.assertElement=function(a,b,c){!goog.asserts.ENABLE_ASSERTS||goog.isObject(a)&&a.nodeType==goog.dom.NodeType.ELEMENT||goog.asserts.doAssertFailure_(\"Expected Element but got %s: %s.\",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.assertInstanceof=function(a,b,c,d){!goog.asserts.ENABLE_ASSERTS||a instanceof b||goog.asserts.doAssertFailure_(\"Expected instanceof %s but got %s.\",[goog.asserts.getType_(b),goog.asserts.getType_(a)],c,Array.prototype.slice.call(arguments,3));return a};goog.asserts.assertFinite=function(a,b,c){!goog.asserts.ENABLE_ASSERTS||\"number\"==typeof a&&isFinite(a)||goog.asserts.doAssertFailure_(\"Expected %s to be a finite number but it is not.\",[a],b,Array.prototype.slice.call(arguments,2));return a};\ngoog.asserts.assertObjectPrototypeIsIntact=function(){for(var a in Object.prototype)goog.asserts.fail(a+\" should not be enumerable in Object.prototype.\")};goog.asserts.getType_=function(a){return a instanceof Function?a.displayName||a.name||\"unknown type name\":a instanceof Object?a.constructor.displayName||a.constructor.name||Object.prototype.toString.call(a):null===a?\"null\":typeof a};var jspb={BinaryConstants:{},ConstBinaryMessage:function(){},BinaryMessage:function(){}};jspb.BinaryConstants.FieldType={INVALID:-1,DOUBLE:1,FLOAT:2,INT64:3,UINT64:4,INT32:5,FIXED64:6,FIXED32:7,BOOL:8,STRING:9,GROUP:10,MESSAGE:11,BYTES:12,UINT32:13,ENUM:14,SFIXED32:15,SFIXED64:16,SINT32:17,SINT64:18,FHASH64:30,VHASH64:31};jspb.BinaryConstants.WireType={INVALID:-1,VARINT:0,FIXED64:1,DELIMITED:2,START_GROUP:3,END_GROUP:4,FIXED32:5};\njspb.BinaryConstants.FieldTypeToWireType=function(a){var b=jspb.BinaryConstants.FieldType,c=jspb.BinaryConstants.WireType;switch(a){case b.INT32:case b.INT64:case b.UINT32:case b.UINT64:case b.SINT32:case b.SINT64:case b.BOOL:case b.ENUM:case b.VHASH64:return c.VARINT;case b.DOUBLE:case b.FIXED64:case b.SFIXED64:case b.FHASH64:return c.FIXED64;case b.STRING:case b.MESSAGE:case b.BYTES:return c.DELIMITED;case b.FLOAT:case b.FIXED32:case b.SFIXED32:return c.FIXED32;default:return c.INVALID}};\njspb.BinaryConstants.INVALID_FIELD_NUMBER=-1;jspb.BinaryConstants.FLOAT32_EPS=1.401298464324817E-45;jspb.BinaryConstants.FLOAT32_MIN=1.1754943508222875E-38;jspb.BinaryConstants.FLOAT32_MAX=3.4028234663852886E38;jspb.BinaryConstants.FLOAT64_EPS=4.9E-324;jspb.BinaryConstants.FLOAT64_MIN=2.2250738585072014E-308;jspb.BinaryConstants.FLOAT64_MAX=1.7976931348623157E308;jspb.BinaryConstants.TWO_TO_20=1048576;jspb.BinaryConstants.TWO_TO_23=8388608;jspb.BinaryConstants.TWO_TO_31=2147483648;\njspb.BinaryConstants.TWO_TO_32=4294967296;jspb.BinaryConstants.TWO_TO_52=4503599627370496;jspb.BinaryConstants.TWO_TO_63=0x7fffffffffffffff;jspb.BinaryConstants.TWO_TO_64=1.8446744073709552E19;jspb.BinaryConstants.ZERO_HASH=\"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\";goog.array={};goog.NATIVE_ARRAY_PROTOTYPES=goog.TRUSTED_SITE;goog.array.ASSUME_NATIVE_FUNCTIONS=2012<goog.FEATURESET_YEAR;goog.array.peek=function(a){return a[a.length-1]};goog.array.last=goog.array.peek;\ngoog.array.indexOf=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.indexOf)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.indexOf.call(a,b,c)}:function(a,b,c){c=null==c?0:0>c?Math.max(0,a.length+c):c;if(goog.isString(a))return goog.isString(b)&&1==b.length?a.indexOf(b,c):-1;for(;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1};\ngoog.array.lastIndexOf=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.lastIndexOf)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.lastIndexOf.call(a,b,null==c?a.length-1:c)}:function(a,b,c){c=null==c?a.length-1:c;0>c&&(c=Math.max(0,a.length+c));if(goog.isString(a))return goog.isString(b)&&1==b.length?a.lastIndexOf(b,c):-1;for(;0<=c;c--)if(c in a&&a[c]===b)return c;return-1};\ngoog.array.forEach=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.forEach)?function(a,b,c){goog.asserts.assert(null!=a.length);Array.prototype.forEach.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=goog.isString(a)?a.split(\"\"):a,f=0;f<d;f++)f in e&&b.call(c,e[f],f,a)};goog.array.forEachRight=function(a,b,c){var d=a.length,e=goog.isString(a)?a.split(\"\"):a;for(--d;0<=d;--d)d in e&&b.call(c,e[d],d,a)};\ngoog.array.filter=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.filter)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.filter.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=[],f=0,g=goog.isString(a)?a.split(\"\"):a,h=0;h<d;h++)if(h in g){var k=g[h];b.call(c,k,h,a)&&(e[f++]=k)}return e};\ngoog.array.map=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.map)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.map.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=Array(d),f=goog.isString(a)?a.split(\"\"):a,g=0;g<d;g++)g in f&&(e[g]=b.call(c,f[g],g,a));return e};\ngoog.array.reduce=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.reduce)?function(a,b,c,d){goog.asserts.assert(null!=a.length);d&&(b=goog.bind(b,d));return Array.prototype.reduce.call(a,b,c)}:function(a,b,c,d){var e=c;goog.array.forEach(a,function(c,g){e=b.call(d,e,c,g,a)});return e};\ngoog.array.reduceRight=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.reduceRight)?function(a,b,c,d){goog.asserts.assert(null!=a.length);goog.asserts.assert(null!=b);d&&(b=goog.bind(b,d));return Array.prototype.reduceRight.call(a,b,c)}:function(a,b,c,d){var e=c;goog.array.forEachRight(a,function(c,g){e=b.call(d,e,c,g,a)});return e};\ngoog.array.some=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.some)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.some.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=goog.isString(a)?a.split(\"\"):a,f=0;f<d;f++)if(f in e&&b.call(c,e[f],f,a))return!0;return!1};\ngoog.array.every=goog.NATIVE_ARRAY_PROTOTYPES&&(goog.array.ASSUME_NATIVE_FUNCTIONS||Array.prototype.every)?function(a,b,c){goog.asserts.assert(null!=a.length);return Array.prototype.every.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=goog.isString(a)?a.split(\"\"):a,f=0;f<d;f++)if(f in e&&!b.call(c,e[f],f,a))return!1;return!0};goog.array.count=function(a,b,c){var d=0;goog.array.forEach(a,function(a,f,g){b.call(c,a,f,g)&&++d},c);return d};\ngoog.array.find=function(a,b,c){b=goog.array.findIndex(a,b,c);return 0>b?null:goog.isString(a)?a.charAt(b):a[b]};goog.array.findIndex=function(a,b,c){for(var d=a.length,e=goog.isString(a)?a.split(\"\"):a,f=0;f<d;f++)if(f in e&&b.call(c,e[f],f,a))return f;return-1};goog.array.findRight=function(a,b,c){b=goog.array.findIndexRight(a,b,c);return 0>b?null:goog.isString(a)?a.charAt(b):a[b]};\ngoog.array.findIndexRight=function(a,b,c){var d=a.length,e=goog.isString(a)?a.split(\"\"):a;for(--d;0<=d;d--)if(d in e&&b.call(c,e[d],d,a))return d;return-1};goog.array.contains=function(a,b){return 0<=goog.array.indexOf(a,b)};goog.array.isEmpty=function(a){return 0==a.length};goog.array.clear=function(a){if(!goog.isArray(a))for(var b=a.length-1;0<=b;b--)delete a[b];a.length=0};goog.array.insert=function(a,b){goog.array.contains(a,b)||a.push(b)};\ngoog.array.insertAt=function(a,b,c){goog.array.splice(a,c,0,b)};goog.array.insertArrayAt=function(a,b,c){goog.partial(goog.array.splice,a,c,0).apply(null,b)};goog.array.insertBefore=function(a,b,c){var d;2==arguments.length||0>(d=goog.array.indexOf(a,c))?a.push(b):goog.array.insertAt(a,b,d)};goog.array.remove=function(a,b){b=goog.array.indexOf(a,b);var c;(c=0<=b)&&goog.array.removeAt(a,b);return c};\ngoog.array.removeLast=function(a,b){b=goog.array.lastIndexOf(a,b);return 0<=b?(goog.array.removeAt(a,b),!0):!1};goog.array.removeAt=function(a,b){goog.asserts.assert(null!=a.length);return 1==Array.prototype.splice.call(a,b,1).length};goog.array.removeIf=function(a,b,c){b=goog.array.findIndex(a,b,c);return 0<=b?(goog.array.removeAt(a,b),!0):!1};goog.array.removeAllIf=function(a,b,c){var d=0;goog.array.forEachRight(a,function(e,f){b.call(c,e,f,a)&&goog.array.removeAt(a,f)&&d++});return d};\ngoog.array.concat=function(a){return Array.prototype.concat.apply([],arguments)};goog.array.join=function(a){return Array.prototype.concat.apply([],arguments)};goog.array.toArray=function(a){var b=a.length;if(0<b){for(var c=Array(b),d=0;d<b;d++)c[d]=a[d];return c}return[]};goog.array.clone=goog.array.toArray;goog.array.extend=function(a,b){for(var c=1;c<arguments.length;c++){var d=arguments[c];if(goog.isArrayLike(d)){var e=a.length||0,f=d.length||0;a.length=e+f;for(var g=0;g<f;g++)a[e+g]=d[g]}else a.push(d)}};\ngoog.array.splice=function(a,b,c,d){goog.asserts.assert(null!=a.length);return Array.prototype.splice.apply(a,goog.array.slice(arguments,1))};goog.array.slice=function(a,b,c){goog.asserts.assert(null!=a.length);return 2>=arguments.length?Array.prototype.slice.call(a,b):Array.prototype.slice.call(a,b,c)};\ngoog.array.removeDuplicates=function(a,b,c){b=b||a;var d=function(a){return goog.isObject(a)?\"o\"+goog.getUid(a):(typeof a).charAt(0)+a};c=c||d;d={};for(var e=0,f=0;f<a.length;){var g=a[f++],h=c(g);Object.prototype.hasOwnProperty.call(d,h)||(d[h]=!0,b[e++]=g)}b.length=e};goog.array.binarySearch=function(a,b,c){return goog.array.binarySearch_(a,c||goog.array.defaultCompare,!1,b)};goog.array.binarySelect=function(a,b,c){return goog.array.binarySearch_(a,b,!0,void 0,c)};\ngoog.array.binarySearch_=function(a,b,c,d,e){for(var f=0,g=a.length,h;f<g;){var k=f+g>>1;var l=c?b.call(e,a[k],k,a):b(d,a[k]);0<l?f=k+1:(g=k,h=!l)}return h?f:~f};goog.array.sort=function(a,b){a.sort(b||goog.array.defaultCompare)};goog.array.stableSort=function(a,b){for(var c=Array(a.length),d=0;d<a.length;d++)c[d]={index:d,value:a[d]};var e=b||goog.array.defaultCompare;goog.array.sort(c,function(a,b){return e(a.value,b.value)||a.index-b.index});for(d=0;d<a.length;d++)a[d]=c[d].value};\ngoog.array.sortByKey=function(a,b,c){var d=c||goog.array.defaultCompare;goog.array.sort(a,function(a,c){return d(b(a),b(c))})};goog.array.sortObjectsByKey=function(a,b,c){goog.array.sortByKey(a,function(a){return a[b]},c)};goog.array.isSorted=function(a,b,c){b=b||goog.array.defaultCompare;for(var d=1;d<a.length;d++){var e=b(a[d-1],a[d]);if(0<e||0==e&&c)return!1}return!0};\ngoog.array.equals=function(a,b,c){if(!goog.isArrayLike(a)||!goog.isArrayLike(b)||a.length!=b.length)return!1;var d=a.length;c=c||goog.array.defaultCompareEquality;for(var e=0;e<d;e++)if(!c(a[e],b[e]))return!1;return!0};goog.array.compare3=function(a,b,c){c=c||goog.array.defaultCompare;for(var d=Math.min(a.length,b.length),e=0;e<d;e++){var f=c(a[e],b[e]);if(0!=f)return f}return goog.array.defaultCompare(a.length,b.length)};goog.array.defaultCompare=function(a,b){return a>b?1:a<b?-1:0};\ngoog.array.inverseDefaultCompare=function(a,b){return-goog.array.defaultCompare(a,b)};goog.array.defaultCompareEquality=function(a,b){return a===b};goog.array.binaryInsert=function(a,b,c){c=goog.array.binarySearch(a,b,c);return 0>c?(goog.array.insertAt(a,b,-(c+1)),!0):!1};goog.array.binaryRemove=function(a,b,c){b=goog.array.binarySearch(a,b,c);return 0<=b?goog.array.removeAt(a,b):!1};\ngoog.array.bucket=function(a,b,c){for(var d={},e=0;e<a.length;e++){var f=a[e],g=b.call(c,f,e,a);goog.isDef(g)&&(d[g]||(d[g]=[])).push(f)}return d};goog.array.toObject=function(a,b,c){var d={};goog.array.forEach(a,function(e,f){d[b.call(c,e,f,a)]=e});return d};goog.array.range=function(a,b,c){var d=[],e=0,f=a;c=c||1;void 0!==b&&(e=a,f=b);if(0>c*(f-e))return[];if(0<c)for(a=e;a<f;a+=c)d.push(a);else for(a=e;a>f;a+=c)d.push(a);return d};\ngoog.array.repeat=function(a,b){for(var c=[],d=0;d<b;d++)c[d]=a;return c};goog.array.flatten=function(a){for(var b=[],c=0;c<arguments.length;c++){var d=arguments[c];if(goog.isArray(d))for(var e=0;e<d.length;e+=8192){var f=goog.array.slice(d,e,e+8192);f=goog.array.flatten.apply(null,f);for(var g=0;g<f.length;g++)b.push(f[g])}else b.push(d)}return b};\ngoog.array.rotate=function(a,b){goog.asserts.assert(null!=a.length);a.length&&(b%=a.length,0<b?Array.prototype.unshift.apply(a,a.splice(-b,b)):0>b&&Array.prototype.push.apply(a,a.splice(0,-b)));return a};goog.array.moveItem=function(a,b,c){goog.asserts.assert(0<=b&&b<a.length);goog.asserts.assert(0<=c&&c<a.length);b=Array.prototype.splice.call(a,b,1);Array.prototype.splice.call(a,c,0,b[0])};\ngoog.array.zip=function(a){if(!arguments.length)return[];for(var b=[],c=arguments[0].length,d=1;d<arguments.length;d++)arguments[d].length<c&&(c=arguments[d].length);for(d=0;d<c;d++){for(var e=[],f=0;f<arguments.length;f++)e.push(arguments[f][d]);b.push(e)}return b};goog.array.shuffle=function(a,b){b=b||Math.random;for(var c=a.length-1;0<c;c--){var d=Math.floor(b()*(c+1)),e=a[c];a[c]=a[d];a[d]=e}};goog.array.copyByIndex=function(a,b){var c=[];goog.array.forEach(b,function(b){c.push(a[b])});return c};\ngoog.array.concatMap=function(a,b,c){return goog.array.concat.apply([],goog.array.map(a,b,c))};goog.crypt={};goog.crypt.stringToByteArray=function(a){for(var b=[],c=0,d=0;d<a.length;d++){var e=a.charCodeAt(d);255<e&&(b[c++]=e&255,e>>=8);b[c++]=e}return b};goog.crypt.byteArrayToString=function(a){if(8192>=a.length)return String.fromCharCode.apply(null,a);for(var b=\"\",c=0;c<a.length;c+=8192){var d=goog.array.slice(a,c,c+8192);b+=String.fromCharCode.apply(null,d)}return b};\ngoog.crypt.byteArrayToHex=function(a,b){return goog.array.map(a,function(a){a=a.toString(16);return 1<a.length?a:\"0\"+a}).join(b||\"\")};goog.crypt.hexToByteArray=function(a){goog.asserts.assert(0==a.length%2,\"Key string length must be multiple of 2\");for(var b=[],c=0;c<a.length;c+=2)b.push(parseInt(a.substring(c,c+2),16));return b};\ngoog.crypt.stringToUtf8ByteArray=function(a){for(var b=[],c=0,d=0;d<a.length;d++){var e=a.charCodeAt(d);128>e?b[c++]=e:(2048>e?b[c++]=e>>6|192:(55296==(e&64512)&&d+1<a.length&&56320==(a.charCodeAt(d+1)&64512)?(e=65536+((e&1023)<<10)+(a.charCodeAt(++d)&1023),b[c++]=e>>18|240,b[c++]=e>>12&63|128):b[c++]=e>>12|224,b[c++]=e>>6&63|128),b[c++]=e&63|128)}return b};\ngoog.crypt.utf8ByteArrayToString=function(a){for(var b=[],c=0,d=0;c<a.length;){var e=a[c++];if(128>e)b[d++]=String.fromCharCode(e);else if(191<e&&224>e){var f=a[c++];b[d++]=String.fromCharCode((e&31)<<6|f&63)}else if(239<e&&365>e){f=a[c++];var g=a[c++],h=a[c++];e=((e&7)<<18|(f&63)<<12|(g&63)<<6|h&63)-65536;b[d++]=String.fromCharCode(55296+(e>>10));b[d++]=String.fromCharCode(56320+(e&1023))}else f=a[c++],g=a[c++],b[d++]=String.fromCharCode((e&15)<<12|(f&63)<<6|g&63)}return b.join(\"\")};\ngoog.crypt.xorByteArray=function(a,b){goog.asserts.assert(a.length==b.length,\"XOR array lengths must match\");for(var c=[],d=0;d<a.length;d++)c.push(a[d]^b[d]);return c};goog.dom.asserts={};goog.dom.asserts.assertIsLocation=function(a){if(goog.asserts.ENABLE_ASSERTS){var b=goog.dom.asserts.getWindow_(a);b&&(!a||!(a instanceof b.Location)&&a instanceof b.Element)&&goog.asserts.fail(\"Argument is not a Location (or a non-Element mock); got: %s\",goog.dom.asserts.debugStringForType_(a))}return a};\ngoog.dom.asserts.assertIsElementType_=function(a,b){if(goog.asserts.ENABLE_ASSERTS){var c=goog.dom.asserts.getWindow_(a);c&&\"undefined\"!=typeof c[b]&&(a&&(a instanceof c[b]||!(a instanceof c.Location||a instanceof c.Element))||goog.asserts.fail(\"Argument is not a %s (or a non-Element, non-Location mock); got: %s\",b,goog.dom.asserts.debugStringForType_(a)))}return a};goog.dom.asserts.assertIsHTMLAnchorElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLAnchorElement\")};\ngoog.dom.asserts.assertIsHTMLButtonElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLButtonElement\")};goog.dom.asserts.assertIsHTMLLinkElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLLinkElement\")};goog.dom.asserts.assertIsHTMLImageElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLImageElement\")};goog.dom.asserts.assertIsHTMLAudioElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLAudioElement\")};\ngoog.dom.asserts.assertIsHTMLVideoElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLVideoElement\")};goog.dom.asserts.assertIsHTMLInputElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLInputElement\")};goog.dom.asserts.assertIsHTMLTextAreaElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLTextAreaElement\")};goog.dom.asserts.assertIsHTMLCanvasElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLCanvasElement\")};\ngoog.dom.asserts.assertIsHTMLEmbedElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLEmbedElement\")};goog.dom.asserts.assertIsHTMLFormElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLFormElement\")};goog.dom.asserts.assertIsHTMLFrameElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLFrameElement\")};goog.dom.asserts.assertIsHTMLIFrameElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLIFrameElement\")};\ngoog.dom.asserts.assertIsHTMLObjectElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLObjectElement\")};goog.dom.asserts.assertIsHTMLScriptElement=function(a){return goog.dom.asserts.assertIsElementType_(a,\"HTMLScriptElement\")};\ngoog.dom.asserts.debugStringForType_=function(a){if(goog.isObject(a))try{return a.constructor.displayName||a.constructor.name||Object.prototype.toString.call(a)}catch(b){return\"<object could not be stringified>\"}else return void 0===a?\"undefined\":null===a?\"null\":typeof a};goog.dom.asserts.getWindow_=function(a){try{var b=a&&a.ownerDocument,c=b&&(b.defaultView||b.parentWindow);c=c||goog.global;if(c.Element&&c.Location)return c}catch(d){}return null};goog.functions={};goog.functions.constant=function(a){return function(){return a}};goog.functions.FALSE=function(){return!1};goog.functions.TRUE=function(){return!0};goog.functions.NULL=function(){return null};goog.functions.identity=function(a,b){return a};goog.functions.error=function(a){return function(){throw Error(a);}};goog.functions.fail=function(a){return function(){throw a;}};\ngoog.functions.lock=function(a,b){b=b||0;return function(){return a.apply(this,Array.prototype.slice.call(arguments,0,b))}};goog.functions.nth=function(a){return function(){return arguments[a]}};goog.functions.partialRight=function(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var b=Array.prototype.slice.call(arguments);b.push.apply(b,c);return a.apply(this,b)}};goog.functions.withReturnValue=function(a,b){return goog.functions.sequence(a,goog.functions.constant(b))};\ngoog.functions.equalTo=function(a,b){return function(c){return b?a==c:a===c}};goog.functions.compose=function(a,b){var c=arguments,d=c.length;return function(){var a;d&&(a=c[d-1].apply(this,arguments));for(var b=d-2;0<=b;b--)a=c[b].call(this,a);return a}};goog.functions.sequence=function(a){var b=arguments,c=b.length;return function(){for(var a,e=0;e<c;e++)a=b[e].apply(this,arguments);return a}};\ngoog.functions.and=function(a){var b=arguments,c=b.length;return function(){for(var a=0;a<c;a++)if(!b[a].apply(this,arguments))return!1;return!0}};goog.functions.or=function(a){var b=arguments,c=b.length;return function(){for(var a=0;a<c;a++)if(b[a].apply(this,arguments))return!0;return!1}};goog.functions.not=function(a){return function(){return!a.apply(this,arguments)}};\ngoog.functions.create=function(a,b){var c=function(){};c.prototype=a.prototype;c=new c;a.apply(c,Array.prototype.slice.call(arguments,1));return c};goog.functions.CACHE_RETURN_VALUE=!0;goog.functions.cacheReturnValue=function(a){var b=!1,c;return function(){if(!goog.functions.CACHE_RETURN_VALUE)return a();b||(c=a(),b=!0);return c}};goog.functions.once=function(a){var b=a;return function(){if(b){var a=b;b=null;a()}}};\ngoog.functions.debounce=function(a,b,c){var d=0;return function(e){goog.global.clearTimeout(d);var f=arguments;d=goog.global.setTimeout(function(){a.apply(c,f)},b)}};goog.functions.throttle=function(a,b,c){var d=0,e=!1,f=[],g=function(){d=0;e&&(e=!1,h())},h=function(){d=goog.global.setTimeout(g,b);a.apply(c,f)};return function(a){f=arguments;d?e=!0:h()}};goog.functions.rateLimit=function(a,b,c){var d=0,e=function(){d=0};return function(f){d||(d=goog.global.setTimeout(e,b),a.apply(c,arguments))}};goog.dom.HtmlElement=function(){};goog.dom.TagName=function(a){this.tagName_=a};goog.dom.TagName.prototype.toString=function(){return this.tagName_};goog.dom.TagName.A=new goog.dom.TagName(\"A\");goog.dom.TagName.ABBR=new goog.dom.TagName(\"ABBR\");goog.dom.TagName.ACRONYM=new goog.dom.TagName(\"ACRONYM\");goog.dom.TagName.ADDRESS=new goog.dom.TagName(\"ADDRESS\");goog.dom.TagName.APPLET=new goog.dom.TagName(\"APPLET\");goog.dom.TagName.AREA=new goog.dom.TagName(\"AREA\");goog.dom.TagName.ARTICLE=new goog.dom.TagName(\"ARTICLE\");\ngoog.dom.TagName.ASIDE=new goog.dom.TagName(\"ASIDE\");goog.dom.TagName.AUDIO=new goog.dom.TagName(\"AUDIO\");goog.dom.TagName.B=new goog.dom.TagName(\"B\");goog.dom.TagName.BASE=new goog.dom.TagName(\"BASE\");goog.dom.TagName.BASEFONT=new goog.dom.TagName(\"BASEFONT\");goog.dom.TagName.BDI=new goog.dom.TagName(\"BDI\");goog.dom.TagName.BDO=new goog.dom.TagName(\"BDO\");goog.dom.TagName.BIG=new goog.dom.TagName(\"BIG\");goog.dom.TagName.BLOCKQUOTE=new goog.dom.TagName(\"BLOCKQUOTE\");goog.dom.TagName.BODY=new goog.dom.TagName(\"BODY\");\ngoog.dom.TagName.BR=new goog.dom.TagName(\"BR\");goog.dom.TagName.BUTTON=new goog.dom.TagName(\"BUTTON\");goog.dom.TagName.CANVAS=new goog.dom.TagName(\"CANVAS\");goog.dom.TagName.CAPTION=new goog.dom.TagName(\"CAPTION\");goog.dom.TagName.CENTER=new goog.dom.TagName(\"CENTER\");goog.dom.TagName.CITE=new goog.dom.TagName(\"CITE\");goog.dom.TagName.CODE=new goog.dom.TagName(\"CODE\");goog.dom.TagName.COL=new goog.dom.TagName(\"COL\");goog.dom.TagName.COLGROUP=new goog.dom.TagName(\"COLGROUP\");\ngoog.dom.TagName.COMMAND=new goog.dom.TagName(\"COMMAND\");goog.dom.TagName.DATA=new goog.dom.TagName(\"DATA\");goog.dom.TagName.DATALIST=new goog.dom.TagName(\"DATALIST\");goog.dom.TagName.DD=new goog.dom.TagName(\"DD\");goog.dom.TagName.DEL=new goog.dom.TagName(\"DEL\");goog.dom.TagName.DETAILS=new goog.dom.TagName(\"DETAILS\");goog.dom.TagName.DFN=new goog.dom.TagName(\"DFN\");goog.dom.TagName.DIALOG=new goog.dom.TagName(\"DIALOG\");goog.dom.TagName.DIR=new goog.dom.TagName(\"DIR\");goog.dom.TagName.DIV=new goog.dom.TagName(\"DIV\");\ngoog.dom.TagName.DL=new goog.dom.TagName(\"DL\");goog.dom.TagName.DT=new goog.dom.TagName(\"DT\");goog.dom.TagName.EM=new goog.dom.TagName(\"EM\");goog.dom.TagName.EMBED=new goog.dom.TagName(\"EMBED\");goog.dom.TagName.FIELDSET=new goog.dom.TagName(\"FIELDSET\");goog.dom.TagName.FIGCAPTION=new goog.dom.TagName(\"FIGCAPTION\");goog.dom.TagName.FIGURE=new goog.dom.TagName(\"FIGURE\");goog.dom.TagName.FONT=new goog.dom.TagName(\"FONT\");goog.dom.TagName.FOOTER=new goog.dom.TagName(\"FOOTER\");goog.dom.TagName.FORM=new goog.dom.TagName(\"FORM\");\ngoog.dom.TagName.FRAME=new goog.dom.TagName(\"FRAME\");goog.dom.TagName.FRAMESET=new goog.dom.TagName(\"FRAMESET\");goog.dom.TagName.H1=new goog.dom.TagName(\"H1\");goog.dom.TagName.H2=new goog.dom.TagName(\"H2\");goog.dom.TagName.H3=new goog.dom.TagName(\"H3\");goog.dom.TagName.H4=new goog.dom.TagName(\"H4\");goog.dom.TagName.H5=new goog.dom.TagName(\"H5\");goog.dom.TagName.H6=new goog.dom.TagName(\"H6\");goog.dom.TagName.HEAD=new goog.dom.TagName(\"HEAD\");goog.dom.TagName.HEADER=new goog.dom.TagName(\"HEADER\");\ngoog.dom.TagName.HGROUP=new goog.dom.TagName(\"HGROUP\");goog.dom.TagName.HR=new goog.dom.TagName(\"HR\");goog.dom.TagName.HTML=new goog.dom.TagName(\"HTML\");goog.dom.TagName.I=new goog.dom.TagName(\"I\");goog.dom.TagName.IFRAME=new goog.dom.TagName(\"IFRAME\");goog.dom.TagName.IMG=new goog.dom.TagName(\"IMG\");goog.dom.TagName.INPUT=new goog.dom.TagName(\"INPUT\");goog.dom.TagName.INS=new goog.dom.TagName(\"INS\");goog.dom.TagName.ISINDEX=new goog.dom.TagName(\"ISINDEX\");goog.dom.TagName.KBD=new goog.dom.TagName(\"KBD\");\ngoog.dom.TagName.KEYGEN=new goog.dom.TagName(\"KEYGEN\");goog.dom.TagName.LABEL=new goog.dom.TagName(\"LABEL\");goog.dom.TagName.LEGEND=new goog.dom.TagName(\"LEGEND\");goog.dom.TagName.LI=new goog.dom.TagName(\"LI\");goog.dom.TagName.LINK=new goog.dom.TagName(\"LINK\");goog.dom.TagName.MAIN=new goog.dom.TagName(\"MAIN\");goog.dom.TagName.MAP=new goog.dom.TagName(\"MAP\");goog.dom.TagName.MARK=new goog.dom.TagName(\"MARK\");goog.dom.TagName.MATH=new goog.dom.TagName(\"MATH\");goog.dom.TagName.MENU=new goog.dom.TagName(\"MENU\");\ngoog.dom.TagName.MENUITEM=new goog.dom.TagName(\"MENUITEM\");goog.dom.TagName.META=new goog.dom.TagName(\"META\");goog.dom.TagName.METER=new goog.dom.TagName(\"METER\");goog.dom.TagName.NAV=new goog.dom.TagName(\"NAV\");goog.dom.TagName.NOFRAMES=new goog.dom.TagName(\"NOFRAMES\");goog.dom.TagName.NOSCRIPT=new goog.dom.TagName(\"NOSCRIPT\");goog.dom.TagName.OBJECT=new goog.dom.TagName(\"OBJECT\");goog.dom.TagName.OL=new goog.dom.TagName(\"OL\");goog.dom.TagName.OPTGROUP=new goog.dom.TagName(\"OPTGROUP\");\ngoog.dom.TagName.OPTION=new goog.dom.TagName(\"OPTION\");goog.dom.TagName.OUTPUT=new goog.dom.TagName(\"OUTPUT\");goog.dom.TagName.P=new goog.dom.TagName(\"P\");goog.dom.TagName.PARAM=new goog.dom.TagName(\"PARAM\");goog.dom.TagName.PICTURE=new goog.dom.TagName(\"PICTURE\");goog.dom.TagName.PRE=new goog.dom.TagName(\"PRE\");goog.dom.TagName.PROGRESS=new goog.dom.TagName(\"PROGRESS\");goog.dom.TagName.Q=new goog.dom.TagName(\"Q\");goog.dom.TagName.RP=new goog.dom.TagName(\"RP\");goog.dom.TagName.RT=new goog.dom.TagName(\"RT\");\ngoog.dom.TagName.RTC=new goog.dom.TagName(\"RTC\");goog.dom.TagName.RUBY=new goog.dom.TagName(\"RUBY\");goog.dom.TagName.S=new goog.dom.TagName(\"S\");goog.dom.TagName.SAMP=new goog.dom.TagName(\"SAMP\");goog.dom.TagName.SCRIPT=new goog.dom.TagName(\"SCRIPT\");goog.dom.TagName.SECTION=new goog.dom.TagName(\"SECTION\");goog.dom.TagName.SELECT=new goog.dom.TagName(\"SELECT\");goog.dom.TagName.SMALL=new goog.dom.TagName(\"SMALL\");goog.dom.TagName.SOURCE=new goog.dom.TagName(\"SOURCE\");goog.dom.TagName.SPAN=new goog.dom.TagName(\"SPAN\");\ngoog.dom.TagName.STRIKE=new goog.dom.TagName(\"STRIKE\");goog.dom.TagName.STRONG=new goog.dom.TagName(\"STRONG\");goog.dom.TagName.STYLE=new goog.dom.TagName(\"STYLE\");goog.dom.TagName.SUB=new goog.dom.TagName(\"SUB\");goog.dom.TagName.SUMMARY=new goog.dom.TagName(\"SUMMARY\");goog.dom.TagName.SUP=new goog.dom.TagName(\"SUP\");goog.dom.TagName.SVG=new goog.dom.TagName(\"SVG\");goog.dom.TagName.TABLE=new goog.dom.TagName(\"TABLE\");goog.dom.TagName.TBODY=new goog.dom.TagName(\"TBODY\");goog.dom.TagName.TD=new goog.dom.TagName(\"TD\");\ngoog.dom.TagName.TEMPLATE=new goog.dom.TagName(\"TEMPLATE\");goog.dom.TagName.TEXTAREA=new goog.dom.TagName(\"TEXTAREA\");goog.dom.TagName.TFOOT=new goog.dom.TagName(\"TFOOT\");goog.dom.TagName.TH=new goog.dom.TagName(\"TH\");goog.dom.TagName.THEAD=new goog.dom.TagName(\"THEAD\");goog.dom.TagName.TIME=new goog.dom.TagName(\"TIME\");goog.dom.TagName.TITLE=new goog.dom.TagName(\"TITLE\");goog.dom.TagName.TR=new goog.dom.TagName(\"TR\");goog.dom.TagName.TRACK=new goog.dom.TagName(\"TRACK\");goog.dom.TagName.TT=new goog.dom.TagName(\"TT\");\ngoog.dom.TagName.U=new goog.dom.TagName(\"U\");goog.dom.TagName.UL=new goog.dom.TagName(\"UL\");goog.dom.TagName.VAR=new goog.dom.TagName(\"VAR\");goog.dom.TagName.VIDEO=new goog.dom.TagName(\"VIDEO\");goog.dom.TagName.WBR=new goog.dom.TagName(\"WBR\");goog.dom.tags={};goog.dom.tags.VOID_TAGS_={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0};goog.dom.tags.isVoidTag=function(a){return!0===goog.dom.tags.VOID_TAGS_[a]};goog.html={};goog.html.trustedtypes={};goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY=goog.TRUSTED_TYPES_POLICY_NAME?goog.createTrustedTypesPolicy(goog.TRUSTED_TYPES_POLICY_NAME+\"#html\"):null;goog.string={};goog.string.TypedString=function(){};goog.string.Const=function(a,b){this.stringConstValueWithSecurityContract__googStringSecurityPrivate_=a===goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_&&b||\"\";this.STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_=goog.string.Const.TYPE_MARKER_};goog.string.Const.prototype.implementsGoogStringTypedString=!0;goog.string.Const.prototype.getTypedStringValue=function(){return this.stringConstValueWithSecurityContract__googStringSecurityPrivate_};\ngoog.string.Const.prototype.toString=function(){return\"Const{\"+this.stringConstValueWithSecurityContract__googStringSecurityPrivate_+\"}\"};goog.string.Const.unwrap=function(a){if(a instanceof goog.string.Const&&a.constructor===goog.string.Const&&a.STRING_CONST_TYPE_MARKER__GOOG_STRING_SECURITY_PRIVATE_===goog.string.Const.TYPE_MARKER_)return a.stringConstValueWithSecurityContract__googStringSecurityPrivate_;goog.asserts.fail(\"expected object of type Const, got '\"+a+\"'\");return\"type_error:Const\"};\ngoog.string.Const.from=function(a){return new goog.string.Const(goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_,a)};goog.string.Const.TYPE_MARKER_={};goog.string.Const.GOOG_STRING_CONSTRUCTOR_TOKEN_PRIVATE_={};goog.string.Const.EMPTY=goog.string.Const.from(\"\");goog.html.SafeScript=function(){this.privateDoNotAccessOrElseSafeScriptWrappedValue_=\"\";this.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_};goog.html.SafeScript.prototype.implementsGoogStringTypedString=!0;goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={};goog.html.SafeScript.fromConstant=function(a){a=goog.string.Const.unwrap(a);return 0===a.length?goog.html.SafeScript.EMPTY:goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeScript.fromConstantAndArgs=function(a,b){for(var c=[],d=1;d<arguments.length;d++)c.push(goog.html.SafeScript.stringify_(arguments[d]));return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(\"(\"+goog.string.Const.unwrap(a)+\")(\"+c.join(\", \")+\");\")};goog.html.SafeScript.fromJson=function(a){return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(goog.html.SafeScript.stringify_(a))};goog.html.SafeScript.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeScriptWrappedValue_.toString()};\ngoog.DEBUG&&(goog.html.SafeScript.prototype.toString=function(){return\"SafeScript{\"+this.privateDoNotAccessOrElseSafeScriptWrappedValue_+\"}\"});goog.html.SafeScript.unwrap=function(a){return goog.html.SafeScript.unwrapTrustedScript(a).toString()};\ngoog.html.SafeScript.unwrapTrustedScript=function(a){if(a instanceof goog.html.SafeScript&&a.constructor===goog.html.SafeScript&&a.SAFE_SCRIPT_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeScript.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_)return a.privateDoNotAccessOrElseSafeScriptWrappedValue_;goog.asserts.fail(\"expected object of type SafeScript, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:SafeScript\"};\ngoog.html.SafeScript.stringify_=function(a){return JSON.stringify(a).replace(/</g,\"\\\\x3c\")};goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse=function(a){return(new goog.html.SafeScript).initSecurityPrivateDoNotAccessOrElse_(a)};\ngoog.html.SafeScript.prototype.initSecurityPrivateDoNotAccessOrElse_=function(a){this.privateDoNotAccessOrElseSafeScriptWrappedValue_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY?goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createScript(a):a;return this};goog.html.SafeScript.EMPTY=goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(\"\");goog.fs={};goog.fs.url={};goog.fs.url.createObjectUrl=function(a){return goog.fs.url.getUrlObject_().createObjectURL(a)};goog.fs.url.revokeObjectUrl=function(a){goog.fs.url.getUrlObject_().revokeObjectURL(a)};goog.fs.url.getUrlObject_=function(){var a=goog.fs.url.findUrlObject_();if(null!=a)return a;throw Error(\"This browser doesn't seem to support blob URLs\");};\ngoog.fs.url.findUrlObject_=function(){return goog.isDef(goog.global.URL)&&goog.isDef(goog.global.URL.createObjectURL)?goog.global.URL:goog.isDef(goog.global.webkitURL)&&goog.isDef(goog.global.webkitURL.createObjectURL)?goog.global.webkitURL:goog.isDef(goog.global.createObjectURL)?goog.global:null};goog.fs.url.browserSupportsObjectUrls=function(){return null!=goog.fs.url.findUrlObject_()};goog.i18n={};goog.i18n.bidi={};goog.i18n.bidi.FORCE_RTL=!1;\ngoog.i18n.bidi.IS_RTL=goog.i18n.bidi.FORCE_RTL||(\"ar\"==goog.LOCALE.substring(0,2).toLowerCase()||\"fa\"==goog.LOCALE.substring(0,2).toLowerCase()||\"he\"==goog.LOCALE.substring(0,2).toLowerCase()||\"iw\"==goog.LOCALE.substring(0,2).toLowerCase()||\"ps\"==goog.LOCALE.substring(0,2).toLowerCase()||\"sd\"==goog.LOCALE.substring(0,2).toLowerCase()||\"ug\"==goog.LOCALE.substring(0,2).toLowerCase()||\"ur\"==goog.LOCALE.substring(0,2).toLowerCase()||\"yi\"==goog.LOCALE.substring(0,2).toLowerCase())&&(2==goog.LOCALE.length||\n\"-\"==goog.LOCALE.substring(2,3)||\"_\"==goog.LOCALE.substring(2,3))||3<=goog.LOCALE.length&&\"ckb\"==goog.LOCALE.substring(0,3).toLowerCase()&&(3==goog.LOCALE.length||\"-\"==goog.LOCALE.substring(3,4)||\"_\"==goog.LOCALE.substring(3,4))||7<=goog.LOCALE.length&&(\"-\"==goog.LOCALE.substring(2,3)||\"_\"==goog.LOCALE.substring(2,3))&&(\"adlm\"==goog.LOCALE.substring(3,7).toLowerCase()||\"arab\"==goog.LOCALE.substring(3,7).toLowerCase()||\"hebr\"==goog.LOCALE.substring(3,7).toLowerCase()||\"nkoo\"==goog.LOCALE.substring(3,\n7).toLowerCase()||\"rohg\"==goog.LOCALE.substring(3,7).toLowerCase()||\"thaa\"==goog.LOCALE.substring(3,7).toLowerCase())||8<=goog.LOCALE.length&&(\"-\"==goog.LOCALE.substring(3,4)||\"_\"==goog.LOCALE.substring(3,4))&&(\"adlm\"==goog.LOCALE.substring(4,8).toLowerCase()||\"arab\"==goog.LOCALE.substring(4,8).toLowerCase()||\"hebr\"==goog.LOCALE.substring(4,8).toLowerCase()||\"nkoo\"==goog.LOCALE.substring(4,8).toLowerCase()||\"rohg\"==goog.LOCALE.substring(4,8).toLowerCase()||\"thaa\"==goog.LOCALE.substring(4,8).toLowerCase());\ngoog.i18n.bidi.Format={LRE:\"\\u202a\",RLE:\"\\u202b\",PDF:\"\\u202c\",LRM:\"\\u200e\",RLM:\"\\u200f\"};goog.i18n.bidi.Dir={LTR:1,RTL:-1,NEUTRAL:0};goog.i18n.bidi.RIGHT=\"right\";goog.i18n.bidi.LEFT=\"left\";goog.i18n.bidi.I18N_RIGHT=goog.i18n.bidi.IS_RTL?goog.i18n.bidi.LEFT:goog.i18n.bidi.RIGHT;goog.i18n.bidi.I18N_LEFT=goog.i18n.bidi.IS_RTL?goog.i18n.bidi.RIGHT:goog.i18n.bidi.LEFT;\ngoog.i18n.bidi.toDir=function(a,b){return\"number\"==typeof a?0<a?goog.i18n.bidi.Dir.LTR:0>a?goog.i18n.bidi.Dir.RTL:b?null:goog.i18n.bidi.Dir.NEUTRAL:null==a?null:a?goog.i18n.bidi.Dir.RTL:goog.i18n.bidi.Dir.LTR};goog.i18n.bidi.ltrChars_=\"A-Za-z\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u02b8\\u0300-\\u0590\\u0900-\\u1fff\\u200e\\u2c00-\\ud801\\ud804-\\ud839\\ud83c-\\udbff\\uf900-\\ufb1c\\ufe00-\\ufe6f\\ufefd-\\uffff\";goog.i18n.bidi.rtlChars_=\"\\u0591-\\u06ef\\u06fa-\\u08ff\\u200f\\ud802-\\ud803\\ud83a-\\ud83b\\ufb1d-\\ufdff\\ufe70-\\ufefc\";\ngoog.i18n.bidi.htmlSkipReg_=/<[^>]*>|&[^;]+;/g;goog.i18n.bidi.stripHtmlIfNeeded_=function(a,b){return b?a.replace(goog.i18n.bidi.htmlSkipReg_,\"\"):a};goog.i18n.bidi.rtlCharReg_=new RegExp(\"[\"+goog.i18n.bidi.rtlChars_+\"]\");goog.i18n.bidi.ltrCharReg_=new RegExp(\"[\"+goog.i18n.bidi.ltrChars_+\"]\");goog.i18n.bidi.hasAnyRtl=function(a,b){return goog.i18n.bidi.rtlCharReg_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.hasRtlChar=goog.i18n.bidi.hasAnyRtl;\ngoog.i18n.bidi.hasAnyLtr=function(a,b){return goog.i18n.bidi.ltrCharReg_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.ltrRe_=new RegExp(\"^[\"+goog.i18n.bidi.ltrChars_+\"]\");goog.i18n.bidi.rtlRe_=new RegExp(\"^[\"+goog.i18n.bidi.rtlChars_+\"]\");goog.i18n.bidi.isRtlChar=function(a){return goog.i18n.bidi.rtlRe_.test(a)};goog.i18n.bidi.isLtrChar=function(a){return goog.i18n.bidi.ltrRe_.test(a)};goog.i18n.bidi.isNeutralChar=function(a){return!goog.i18n.bidi.isLtrChar(a)&&!goog.i18n.bidi.isRtlChar(a)};\ngoog.i18n.bidi.ltrDirCheckRe_=new RegExp(\"^[^\"+goog.i18n.bidi.rtlChars_+\"]*[\"+goog.i18n.bidi.ltrChars_+\"]\");goog.i18n.bidi.rtlDirCheckRe_=new RegExp(\"^[^\"+goog.i18n.bidi.ltrChars_+\"]*[\"+goog.i18n.bidi.rtlChars_+\"]\");goog.i18n.bidi.startsWithRtl=function(a,b){return goog.i18n.bidi.rtlDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.isRtlText=goog.i18n.bidi.startsWithRtl;\ngoog.i18n.bidi.startsWithLtr=function(a,b){return goog.i18n.bidi.ltrDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.isLtrText=goog.i18n.bidi.startsWithLtr;goog.i18n.bidi.isRequiredLtrRe_=/^http:\\/\\/.*/;goog.i18n.bidi.isNeutralText=function(a,b){a=goog.i18n.bidi.stripHtmlIfNeeded_(a,b);return goog.i18n.bidi.isRequiredLtrRe_.test(a)||!goog.i18n.bidi.hasAnyLtr(a)&&!goog.i18n.bidi.hasAnyRtl(a)};\ngoog.i18n.bidi.ltrExitDirCheckRe_=new RegExp(\"[\"+goog.i18n.bidi.ltrChars_+\"][^\"+goog.i18n.bidi.rtlChars_+\"]*$\");goog.i18n.bidi.rtlExitDirCheckRe_=new RegExp(\"[\"+goog.i18n.bidi.rtlChars_+\"][^\"+goog.i18n.bidi.ltrChars_+\"]*$\");goog.i18n.bidi.endsWithLtr=function(a,b){return goog.i18n.bidi.ltrExitDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.isLtrExitText=goog.i18n.bidi.endsWithLtr;\ngoog.i18n.bidi.endsWithRtl=function(a,b){return goog.i18n.bidi.rtlExitDirCheckRe_.test(goog.i18n.bidi.stripHtmlIfNeeded_(a,b))};goog.i18n.bidi.isRtlExitText=goog.i18n.bidi.endsWithRtl;goog.i18n.bidi.rtlLocalesRe_=/^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i;goog.i18n.bidi.isRtlLanguage=function(a){return goog.i18n.bidi.rtlLocalesRe_.test(a)};goog.i18n.bidi.bracketGuardTextRe_=/(\\(.*?\\)+)|(\\[.*?\\]+)|(\\{.*?\\}+)|(<.*?>+)/g;\ngoog.i18n.bidi.guardBracketInText=function(a,b){b=(void 0===b?goog.i18n.bidi.hasAnyRtl(a):b)?goog.i18n.bidi.Format.RLM:goog.i18n.bidi.Format.LRM;return a.replace(goog.i18n.bidi.bracketGuardTextRe_,b+\"$&\"+b)};goog.i18n.bidi.enforceRtlInHtml=function(a){return\"<\"==a.charAt(0)?a.replace(/<\\w+/,\"$& dir=rtl\"):\"\\n<span dir=rtl>\"+a+\"</span>\"};goog.i18n.bidi.enforceRtlInText=function(a){return goog.i18n.bidi.Format.RLE+a+goog.i18n.bidi.Format.PDF};\ngoog.i18n.bidi.enforceLtrInHtml=function(a){return\"<\"==a.charAt(0)?a.replace(/<\\w+/,\"$& dir=ltr\"):\"\\n<span dir=ltr>\"+a+\"</span>\"};goog.i18n.bidi.enforceLtrInText=function(a){return goog.i18n.bidi.Format.LRE+a+goog.i18n.bidi.Format.PDF};goog.i18n.bidi.dimensionsRe_=/:\\s*([.\\d][.\\w]*)\\s+([.\\d][.\\w]*)\\s+([.\\d][.\\w]*)\\s+([.\\d][.\\w]*)/g;goog.i18n.bidi.leftRe_=/left/gi;goog.i18n.bidi.rightRe_=/right/gi;goog.i18n.bidi.tempRe_=/%%%%/g;\ngoog.i18n.bidi.mirrorCSS=function(a){return a.replace(goog.i18n.bidi.dimensionsRe_,\":$1 $4 $3 $2\").replace(goog.i18n.bidi.leftRe_,\"%%%%\").replace(goog.i18n.bidi.rightRe_,goog.i18n.bidi.LEFT).replace(goog.i18n.bidi.tempRe_,goog.i18n.bidi.RIGHT)};goog.i18n.bidi.doubleQuoteSubstituteRe_=/([\\u0591-\\u05f2])\"/g;goog.i18n.bidi.singleQuoteSubstituteRe_=/([\\u0591-\\u05f2])'/g;\ngoog.i18n.bidi.normalizeHebrewQuote=function(a){return a.replace(goog.i18n.bidi.doubleQuoteSubstituteRe_,\"$1\\u05f4\").replace(goog.i18n.bidi.singleQuoteSubstituteRe_,\"$1\\u05f3\")};goog.i18n.bidi.wordSeparatorRe_=/\\s+/;goog.i18n.bidi.hasNumeralsRe_=/[\\d\\u06f0-\\u06f9]/;goog.i18n.bidi.rtlDetectionThreshold_=.4;\ngoog.i18n.bidi.estimateDirection=function(a,b){var c=0,d=0,e=!1;a=goog.i18n.bidi.stripHtmlIfNeeded_(a,b).split(goog.i18n.bidi.wordSeparatorRe_);for(b=0;b<a.length;b++){var f=a[b];goog.i18n.bidi.startsWithRtl(f)?(c++,d++):goog.i18n.bidi.isRequiredLtrRe_.test(f)?e=!0:goog.i18n.bidi.hasAnyLtr(f)?d++:goog.i18n.bidi.hasNumeralsRe_.test(f)&&(e=!0)}return 0==d?e?goog.i18n.bidi.Dir.LTR:goog.i18n.bidi.Dir.NEUTRAL:c/d>goog.i18n.bidi.rtlDetectionThreshold_?goog.i18n.bidi.Dir.RTL:goog.i18n.bidi.Dir.LTR};\ngoog.i18n.bidi.detectRtlDirectionality=function(a,b){return goog.i18n.bidi.estimateDirection(a,b)==goog.i18n.bidi.Dir.RTL};goog.i18n.bidi.setElementDirAndAlign=function(a,b){a&&(b=goog.i18n.bidi.toDir(b))&&(a.style.textAlign=b==goog.i18n.bidi.Dir.RTL?goog.i18n.bidi.RIGHT:goog.i18n.bidi.LEFT,a.dir=b==goog.i18n.bidi.Dir.RTL?\"rtl\":\"ltr\")};\ngoog.i18n.bidi.setElementDirByTextDirectionality=function(a,b){switch(goog.i18n.bidi.estimateDirection(b)){case goog.i18n.bidi.Dir.LTR:a.dir=\"ltr\";break;case goog.i18n.bidi.Dir.RTL:a.dir=\"rtl\";break;default:a.removeAttribute(\"dir\")}};goog.i18n.bidi.DirectionalString=function(){};goog.html.TrustedResourceUrl=function(){this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_=\"\";this.trustedURL_=null;this.TRUSTED_RESOURCE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_};goog.html.TrustedResourceUrl.prototype.implementsGoogStringTypedString=!0;goog.html.TrustedResourceUrl.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_.toString()};\ngoog.html.TrustedResourceUrl.prototype.implementsGoogI18nBidiDirectionalString=!0;goog.html.TrustedResourceUrl.prototype.getDirection=function(){return goog.i18n.bidi.Dir.LTR};\ngoog.html.TrustedResourceUrl.prototype.cloneWithParams=function(a,b){var c=goog.html.TrustedResourceUrl.unwrap(this);c=goog.html.TrustedResourceUrl.URL_PARAM_PARSER_.exec(c);var d=c[3]||\"\";return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(c[1]+goog.html.TrustedResourceUrl.stringifyParams_(\"?\",c[2]||\"\",a)+goog.html.TrustedResourceUrl.stringifyParams_(\"#\",d,b))};\ngoog.DEBUG&&(goog.html.TrustedResourceUrl.prototype.toString=function(){return\"TrustedResourceUrl{\"+this.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_+\"}\"});goog.html.TrustedResourceUrl.unwrap=function(a){return goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(a).toString()};\ngoog.html.TrustedResourceUrl.unwrapTrustedScriptURL=function(a){if(a instanceof goog.html.TrustedResourceUrl&&a.constructor===goog.html.TrustedResourceUrl&&a.TRUSTED_RESOURCE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_)return a.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_;goog.asserts.fail(\"expected object of type TrustedResourceUrl, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:TrustedResourceUrl\"};\ngoog.html.TrustedResourceUrl.unwrapTrustedURL=function(a){return a.trustedURL_?a.trustedURL_:goog.html.TrustedResourceUrl.unwrap(a)};\ngoog.html.TrustedResourceUrl.format=function(a,b){var c=goog.string.Const.unwrap(a);if(!goog.html.TrustedResourceUrl.BASE_URL_.test(c))throw Error(\"Invalid TrustedResourceUrl format: \"+c);a=c.replace(goog.html.TrustedResourceUrl.FORMAT_MARKER_,function(a,e){if(!Object.prototype.hasOwnProperty.call(b,e))throw Error('Found marker, \"'+e+'\", in format string, \"'+c+'\", but no valid label mapping found in args: '+JSON.stringify(b));a=b[e];return a instanceof goog.string.Const?goog.string.Const.unwrap(a):\nencodeURIComponent(String(a))});return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(a)};goog.html.TrustedResourceUrl.FORMAT_MARKER_=/%{(\\w+)}/g;goog.html.TrustedResourceUrl.BASE_URL_=/^((https:)?\\/\\/[0-9a-z.:[\\]-]+\\/|\\/[^/\\\\]|[^:/\\\\%]+\\/|[^:/\\\\%]*[?#]|about:blank#)/i;goog.html.TrustedResourceUrl.URL_PARAM_PARSER_=/^([^?#]*)(\\?[^#]*)?(#[\\s\\S]*)?/;\ngoog.html.TrustedResourceUrl.formatWithParams=function(a,b,c,d){return goog.html.TrustedResourceUrl.format(a,b).cloneWithParams(c,d)};goog.html.TrustedResourceUrl.fromConstant=function(a){return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(goog.string.Const.unwrap(a))};goog.html.TrustedResourceUrl.fromConstants=function(a){for(var b=\"\",c=0;c<a.length;c++)b+=goog.string.Const.unwrap(a[c]);return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.TrustedResourceUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={};\ngoog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse=function(a){var b=new goog.html.TrustedResourceUrl;b.privateDoNotAccessOrElseTrustedResourceUrlWrappedValue_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY?goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createScriptURL(a):a;goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY&&(b.trustedURL_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createURL(a));return b};\ngoog.html.TrustedResourceUrl.stringifyParams_=function(a,b,c){if(null==c)return b;if(goog.isString(c))return c?a+encodeURIComponent(c):\"\";for(var d in c){var e=c[d];e=goog.isArray(e)?e:[e];for(var f=0;f<e.length;f++){var g=e[f];null!=g&&(b||(b=a),b+=(b.length>a.length?\"&\":\"\")+encodeURIComponent(d)+\"=\"+encodeURIComponent(String(g)))}}return b};goog.string.internal={};goog.string.internal.startsWith=function(a,b){return 0==a.lastIndexOf(b,0)};goog.string.internal.endsWith=function(a,b){var c=a.length-b.length;return 0<=c&&a.indexOf(b,c)==c};goog.string.internal.caseInsensitiveStartsWith=function(a,b){return 0==goog.string.internal.caseInsensitiveCompare(b,a.substr(0,b.length))};goog.string.internal.caseInsensitiveEndsWith=function(a,b){return 0==goog.string.internal.caseInsensitiveCompare(b,a.substr(a.length-b.length,b.length))};\ngoog.string.internal.caseInsensitiveEquals=function(a,b){return a.toLowerCase()==b.toLowerCase()};goog.string.internal.isEmptyOrWhitespace=function(a){return/^[\\s\\xa0]*$/.test(a)};goog.string.internal.trim=goog.TRUSTED_SITE&&String.prototype.trim?function(a){return a.trim()}:function(a){return/^[\\s\\xa0]*([\\s\\S]*?)[\\s\\xa0]*$/.exec(a)[1]};goog.string.internal.caseInsensitiveCompare=function(a,b){a=String(a).toLowerCase();b=String(b).toLowerCase();return a<b?-1:a==b?0:1};\ngoog.string.internal.newLineToBr=function(a,b){return a.replace(/(\\r\\n|\\r|\\n)/g,b?\"<br />\":\"<br>\")};\ngoog.string.internal.htmlEscape=function(a,b){if(b)a=a.replace(goog.string.internal.AMP_RE_,\"&amp;\").replace(goog.string.internal.LT_RE_,\"&lt;\").replace(goog.string.internal.GT_RE_,\"&gt;\").replace(goog.string.internal.QUOT_RE_,\"&quot;\").replace(goog.string.internal.SINGLE_QUOTE_RE_,\"&#39;\").replace(goog.string.internal.NULL_RE_,\"&#0;\");else{if(!goog.string.internal.ALL_RE_.test(a))return a;-1!=a.indexOf(\"&\")&&(a=a.replace(goog.string.internal.AMP_RE_,\"&amp;\"));-1!=a.indexOf(\"<\")&&(a=a.replace(goog.string.internal.LT_RE_,\n\"&lt;\"));-1!=a.indexOf(\">\")&&(a=a.replace(goog.string.internal.GT_RE_,\"&gt;\"));-1!=a.indexOf('\"')&&(a=a.replace(goog.string.internal.QUOT_RE_,\"&quot;\"));-1!=a.indexOf(\"'\")&&(a=a.replace(goog.string.internal.SINGLE_QUOTE_RE_,\"&#39;\"));-1!=a.indexOf(\"\\x00\")&&(a=a.replace(goog.string.internal.NULL_RE_,\"&#0;\"))}return a};goog.string.internal.AMP_RE_=/&/g;goog.string.internal.LT_RE_=/</g;goog.string.internal.GT_RE_=/>/g;goog.string.internal.QUOT_RE_=/\"/g;goog.string.internal.SINGLE_QUOTE_RE_=/'/g;\ngoog.string.internal.NULL_RE_=/\\x00/g;goog.string.internal.ALL_RE_=/[\\x00&<>\"']/;goog.string.internal.whitespaceEscape=function(a,b){return goog.string.internal.newLineToBr(a.replace(/  /g,\" &#160;\"),b)};goog.string.internal.contains=function(a,b){return-1!=a.indexOf(b)};goog.string.internal.caseInsensitiveContains=function(a,b){return goog.string.internal.contains(a.toLowerCase(),b.toLowerCase())};\ngoog.string.internal.compareVersions=function(a,b){var c=0;a=goog.string.internal.trim(String(a)).split(\".\");b=goog.string.internal.trim(String(b)).split(\".\");for(var d=Math.max(a.length,b.length),e=0;0==c&&e<d;e++){var f=a[e]||\"\",g=b[e]||\"\";do{f=/(\\d*)(\\D*)(.*)/.exec(f)||[\"\",\"\",\"\",\"\"];g=/(\\d*)(\\D*)(.*)/.exec(g)||[\"\",\"\",\"\",\"\"];if(0==f[0].length&&0==g[0].length)break;c=0==f[1].length?0:parseInt(f[1],10);var h=0==g[1].length?0:parseInt(g[1],10);c=goog.string.internal.compareElements_(c,h)||goog.string.internal.compareElements_(0==\nf[2].length,0==g[2].length)||goog.string.internal.compareElements_(f[2],g[2]);f=f[3];g=g[3]}while(0==c)}return c};goog.string.internal.compareElements_=function(a,b){return a<b?-1:a>b?1:0};goog.html.SafeUrl=function(){this.privateDoNotAccessOrElseSafeUrlWrappedValue_=\"\";this.SAFE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_};goog.html.SafeUrl.INNOCUOUS_STRING=\"about:invalid#zClosurez\";goog.html.SafeUrl.prototype.implementsGoogStringTypedString=!0;goog.html.SafeUrl.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeUrlWrappedValue_.toString()};\ngoog.html.SafeUrl.prototype.implementsGoogI18nBidiDirectionalString=!0;goog.html.SafeUrl.prototype.getDirection=function(){return goog.i18n.bidi.Dir.LTR};goog.DEBUG&&(goog.html.SafeUrl.prototype.toString=function(){return\"SafeUrl{\"+this.privateDoNotAccessOrElseSafeUrlWrappedValue_+\"}\"});goog.html.SafeUrl.unwrap=function(a){return goog.html.SafeUrl.unwrapTrustedURL(a).toString()};\ngoog.html.SafeUrl.unwrapTrustedURL=function(a){if(a instanceof goog.html.SafeUrl&&a.constructor===goog.html.SafeUrl&&a.SAFE_URL_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_)return a.privateDoNotAccessOrElseSafeUrlWrappedValue_;goog.asserts.fail(\"expected object of type SafeUrl, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:SafeUrl\"};goog.html.SafeUrl.fromConstant=function(a){return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(goog.string.Const.unwrap(a))};\ngoog.html.SAFE_MIME_TYPE_PATTERN_=/^(?:audio\\/(?:3gpp2|3gpp|aac|L16|midi|mp3|mp4|mpeg|oga|ogg|opus|x-m4a|x-wav|wav|webm)|image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp|x-icon)|text\\/csv|video\\/(?:mpeg|mp4|ogg|webm|quicktime))(?:;\\w+=(?:\\w+|\"[\\w;=]+\"))*$/i;goog.html.SafeUrl.isSafeMimeType=function(a){return goog.html.SAFE_MIME_TYPE_PATTERN_.test(a)};goog.html.SafeUrl.fromBlob=function(a){a=goog.html.SAFE_MIME_TYPE_PATTERN_.test(a.type)?goog.fs.url.createObjectUrl(a):goog.html.SafeUrl.INNOCUOUS_STRING;return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.DATA_URL_PATTERN_=/^data:([^,]*);base64,[a-z0-9+\\/]+=*$/i;goog.html.SafeUrl.fromDataUrl=function(a){a=a.replace(/(%0A|%0D)/g,\"\");var b=a.match(goog.html.DATA_URL_PATTERN_);b=b&&goog.html.SAFE_MIME_TYPE_PATTERN_.test(b[1]);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(b?a:goog.html.SafeUrl.INNOCUOUS_STRING)};goog.html.SafeUrl.fromTelUrl=function(a){goog.string.internal.caseInsensitiveStartsWith(a,\"tel:\")||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SIP_URL_PATTERN_=/^sip[s]?:[+a-z0-9_.!$%&'*\\/=^`{|}~-]+@([a-z0-9-]+\\.)+[a-z0-9]{2,63}$/i;goog.html.SafeUrl.fromSipUrl=function(a){goog.html.SIP_URL_PATTERN_.test(decodeURIComponent(a))||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};goog.html.SafeUrl.fromFacebookMessengerUrl=function(a){goog.string.internal.caseInsensitiveStartsWith(a,\"fb-messenger://share\")||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeUrl.fromWhatsAppUrl=function(a){goog.string.internal.caseInsensitiveStartsWith(a,\"whatsapp://send\")||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};goog.html.SafeUrl.fromSmsUrl=function(a){goog.string.internal.caseInsensitiveStartsWith(a,\"sms:\")&&goog.html.SafeUrl.isSmsUrlBodyValid_(a)||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeUrl.isSmsUrlBodyValid_=function(a){var b=a.indexOf(\"#\");0<b&&(a=a.substring(0,b));b=a.match(/[?&]body=/gi);if(!b)return!0;if(1<b.length)return!1;a=a.match(/[?&]body=([^&]*)/)[1];if(!a)return!0;try{decodeURIComponent(a)}catch(c){return!1}return/^(?:[a-z0-9\\-_.~]|%[0-9a-f]{2})+$/i.test(a)};goog.html.SafeUrl.fromSshUrl=function(a){goog.string.internal.caseInsensitiveStartsWith(a,\"ssh://\")||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeUrl.sanitizeChromeExtensionUrl=function(a,b){return goog.html.SafeUrl.sanitizeExtensionUrl_(/^chrome-extension:\\/\\/([^\\/]+)\\//,a,b)};goog.html.SafeUrl.sanitizeFirefoxExtensionUrl=function(a,b){return goog.html.SafeUrl.sanitizeExtensionUrl_(/^moz-extension:\\/\\/([^\\/]+)\\//,a,b)};goog.html.SafeUrl.sanitizeEdgeExtensionUrl=function(a,b){return goog.html.SafeUrl.sanitizeExtensionUrl_(/^ms-browser-extension:\\/\\/([^\\/]+)\\//,a,b)};\ngoog.html.SafeUrl.sanitizeExtensionUrl_=function(a,b,c){(a=a.exec(b))?(a=a[1],-1==(c instanceof goog.string.Const?[goog.string.Const.unwrap(c)]:c.map(function(a){return goog.string.Const.unwrap(a)})).indexOf(a)&&(b=goog.html.SafeUrl.INNOCUOUS_STRING)):b=goog.html.SafeUrl.INNOCUOUS_STRING;return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(b)};goog.html.SafeUrl.fromTrustedResourceUrl=function(a){return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(goog.html.TrustedResourceUrl.unwrap(a))};\ngoog.html.SAFE_URL_PATTERN_=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;goog.html.SafeUrl.SAFE_URL_PATTERN=goog.html.SAFE_URL_PATTERN_;goog.html.SafeUrl.sanitize=function(a){if(a instanceof goog.html.SafeUrl)return a;a=\"object\"==typeof a&&a.implementsGoogStringTypedString?a.getTypedStringValue():String(a);goog.html.SAFE_URL_PATTERN_.test(a)||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeUrl.sanitizeAssertUnchanged=function(a,b){if(a instanceof goog.html.SafeUrl)return a;a=\"object\"==typeof a&&a.implementsGoogStringTypedString?a.getTypedStringValue():String(a);if(b&&/^data:/i.test(a)&&(b=goog.html.SafeUrl.fromDataUrl(a),b.getTypedStringValue()==a))return b;goog.asserts.assert(goog.html.SAFE_URL_PATTERN_.test(a),\"%s does not match the safe URL pattern\",a)||(a=goog.html.SafeUrl.INNOCUOUS_STRING);return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeUrl.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={};goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse=function(a){var b=new goog.html.SafeUrl;b.privateDoNotAccessOrElseSafeUrlWrappedValue_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY?goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createURL(a):a;return b};goog.html.SafeUrl.ABOUT_BLANK=goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(\"about:blank\");goog.html.SafeStyle=function(){this.privateDoNotAccessOrElseSafeStyleWrappedValue_=\"\";this.SAFE_STYLE_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_};goog.html.SafeStyle.prototype.implementsGoogStringTypedString=!0;goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={};\ngoog.html.SafeStyle.fromConstant=function(a){a=goog.string.Const.unwrap(a);if(0===a.length)return goog.html.SafeStyle.EMPTY;goog.asserts.assert(goog.string.internal.endsWith(a,\";\"),\"Last character of style string is not ';': \"+a);goog.asserts.assert(goog.string.internal.contains(a,\":\"),\"Style string must contain at least one ':', to specify a \\\"name: value\\\" pair: \"+a);return goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(a)};\ngoog.html.SafeStyle.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeStyleWrappedValue_};goog.DEBUG&&(goog.html.SafeStyle.prototype.toString=function(){return\"SafeStyle{\"+this.privateDoNotAccessOrElseSafeStyleWrappedValue_+\"}\"});\ngoog.html.SafeStyle.unwrap=function(a){if(a instanceof goog.html.SafeStyle&&a.constructor===goog.html.SafeStyle&&a.SAFE_STYLE_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeStyle.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_)return a.privateDoNotAccessOrElseSafeStyleWrappedValue_;goog.asserts.fail(\"expected object of type SafeStyle, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:SafeStyle\"};goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse=function(a){return(new goog.html.SafeStyle).initSecurityPrivateDoNotAccessOrElse_(a)};\ngoog.html.SafeStyle.prototype.initSecurityPrivateDoNotAccessOrElse_=function(a){this.privateDoNotAccessOrElseSafeStyleWrappedValue_=a;return this};goog.html.SafeStyle.EMPTY=goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(\"\");goog.html.SafeStyle.INNOCUOUS_STRING=\"zClosurez\";\ngoog.html.SafeStyle.create=function(a){var b=\"\",c;for(c in a){if(!/^[-_a-zA-Z0-9]+$/.test(c))throw Error(\"Name allows only [-_a-zA-Z0-9], got: \"+c);var d=a[c];null!=d&&(d=goog.isArray(d)?goog.array.map(d,goog.html.SafeStyle.sanitizePropertyValue_).join(\" \"):goog.html.SafeStyle.sanitizePropertyValue_(d),b+=c+\":\"+d+\";\")}return b?goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(b):goog.html.SafeStyle.EMPTY};\ngoog.html.SafeStyle.sanitizePropertyValue_=function(a){if(a instanceof goog.html.SafeUrl)return'url(\"'+goog.html.SafeUrl.unwrap(a).replace(/</g,\"%3c\").replace(/[\\\\\"]/g,\"\\\\$&\")+'\")';a=a instanceof goog.string.Const?goog.string.Const.unwrap(a):goog.html.SafeStyle.sanitizePropertyValueString_(String(a));if(/[{;}]/.test(a))throw new goog.asserts.AssertionError(\"Value does not allow [{;}], got: %s.\",[a]);return a};\ngoog.html.SafeStyle.sanitizePropertyValueString_=function(a){var b=a.replace(goog.html.SafeStyle.FUNCTIONS_RE_,\"$1\").replace(goog.html.SafeStyle.FUNCTIONS_RE_,\"$1\").replace(goog.html.SafeStyle.URL_RE_,\"url\");if(goog.html.SafeStyle.VALUE_RE_.test(b)){if(goog.html.SafeStyle.COMMENT_RE_.test(a))return goog.asserts.fail(\"String value disallows comments, got: \"+a),goog.html.SafeStyle.INNOCUOUS_STRING;if(!goog.html.SafeStyle.hasBalancedQuotes_(a))return goog.asserts.fail(\"String value requires balanced quotes, got: \"+\na),goog.html.SafeStyle.INNOCUOUS_STRING;if(!goog.html.SafeStyle.hasBalancedSquareBrackets_(a))return goog.asserts.fail(\"String value requires balanced square brackets and one identifier per pair of brackets, got: \"+a),goog.html.SafeStyle.INNOCUOUS_STRING}else return goog.asserts.fail(\"String value allows only \"+goog.html.SafeStyle.VALUE_ALLOWED_CHARS_+\" and simple functions, got: \"+a),goog.html.SafeStyle.INNOCUOUS_STRING;return goog.html.SafeStyle.sanitizeUrl_(a)};\ngoog.html.SafeStyle.hasBalancedQuotes_=function(a){for(var b=!0,c=!0,d=0;d<a.length;d++){var e=a.charAt(d);\"'\"==e&&c?b=!b:'\"'==e&&b&&(c=!c)}return b&&c};goog.html.SafeStyle.hasBalancedSquareBrackets_=function(a){for(var b=!0,c=/^[-_a-zA-Z0-9]$/,d=0;d<a.length;d++){var e=a.charAt(d);if(\"]\"==e){if(b)return!1;b=!0}else if(\"[\"==e){if(!b)return!1;b=!1}else if(!b&&!c.test(e))return!1}return b};goog.html.SafeStyle.VALUE_ALLOWED_CHARS_=\"[-,.\\\"'%_!# a-zA-Z0-9\\\\[\\\\]]\";\ngoog.html.SafeStyle.VALUE_RE_=new RegExp(\"^\"+goog.html.SafeStyle.VALUE_ALLOWED_CHARS_+\"+$\");goog.html.SafeStyle.URL_RE_=/\\b(url\\([ \\t\\n]*)('[ -&(-\\[\\]-~]*'|\"[ !#-\\[\\]-~]*\"|[!#-&*-\\[\\]-~]*)([ \\t\\n]*\\))/g;goog.html.SafeStyle.FUNCTIONS_RE_=/\\b(hsl|hsla|rgb|rgba|matrix|calc|minmax|fit-content|repeat|(rotate|scale|translate)(X|Y|Z|3d)?)\\([-+*/0-9a-z.%\\[\\], ]+\\)/g;goog.html.SafeStyle.COMMENT_RE_=/\\/\\*/;\ngoog.html.SafeStyle.sanitizeUrl_=function(a){return a.replace(goog.html.SafeStyle.URL_RE_,function(a,c,d,e){var b=\"\";d=d.replace(/^(['\"])(.*)\\1$/,function(a,c,d){b=c;return d});a=goog.html.SafeUrl.sanitize(d).getTypedStringValue();return c+b+a+b+e})};goog.html.SafeStyle.concat=function(a){var b=\"\",c=function(a){goog.isArray(a)?goog.array.forEach(a,c):b+=goog.html.SafeStyle.unwrap(a)};goog.array.forEach(arguments,c);return b?goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(b):goog.html.SafeStyle.EMPTY};goog.html.SafeStyleSheet=function(){this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_=\"\";this.SAFE_STYLE_SHEET_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_};goog.html.SafeStyleSheet.prototype.implementsGoogStringTypedString=!0;goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={};\ngoog.html.SafeStyleSheet.createRule=function(a,b){if(goog.string.internal.contains(a,\"<\"))throw Error(\"Selector does not allow '<', got: \"+a);var c=a.replace(/('|\")((?!\\1)[^\\r\\n\\f\\\\]|\\\\[\\s\\S])*\\1/g,\"\");if(!/^[-_a-zA-Z0-9#.:* ,>+~[\\]()=^$|]+$/.test(c))throw Error(\"Selector allows only [-_a-zA-Z0-9#.:* ,>+~[\\\\]()=^$|] and strings, got: \"+a);if(!goog.html.SafeStyleSheet.hasBalancedBrackets_(c))throw Error(\"() and [] in selector must be balanced, got: \"+a);b instanceof goog.html.SafeStyle||(b=goog.html.SafeStyle.create(b));\na=a+\"{\"+goog.html.SafeStyle.unwrap(b).replace(/</g,\"\\\\3C \")+\"}\";return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(a)};goog.html.SafeStyleSheet.hasBalancedBrackets_=function(a){for(var b={\"(\":\")\",\"[\":\"]\"},c=[],d=0;d<a.length;d++){var e=a[d];if(b[e])c.push(b[e]);else if(goog.object.contains(b,e)&&c.pop()!=e)return!1}return 0==c.length};\ngoog.html.SafeStyleSheet.concat=function(a){var b=\"\",c=function(a){goog.isArray(a)?goog.array.forEach(a,c):b+=goog.html.SafeStyleSheet.unwrap(a)};goog.array.forEach(arguments,c);return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.SafeStyleSheet.fromConstant=function(a){a=goog.string.Const.unwrap(a);if(0===a.length)return goog.html.SafeStyleSheet.EMPTY;goog.asserts.assert(!goog.string.internal.contains(a,\"<\"),\"Forbidden '<' character in style sheet string: \"+a);return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(a)};goog.html.SafeStyleSheet.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_};\ngoog.DEBUG&&(goog.html.SafeStyleSheet.prototype.toString=function(){return\"SafeStyleSheet{\"+this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_+\"}\"});\ngoog.html.SafeStyleSheet.unwrap=function(a){if(a instanceof goog.html.SafeStyleSheet&&a.constructor===goog.html.SafeStyleSheet&&a.SAFE_STYLE_SHEET_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeStyleSheet.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_)return a.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_;goog.asserts.fail(\"expected object of type SafeStyleSheet, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:SafeStyleSheet\"};\ngoog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse=function(a){return(new goog.html.SafeStyleSheet).initSecurityPrivateDoNotAccessOrElse_(a)};goog.html.SafeStyleSheet.prototype.initSecurityPrivateDoNotAccessOrElse_=function(a){this.privateDoNotAccessOrElseSafeStyleSheetWrappedValue_=a;return this};goog.html.SafeStyleSheet.EMPTY=goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(\"\");goog.labs={};goog.labs.userAgent={};goog.labs.userAgent.util={};goog.labs.userAgent.util.getNativeUserAgentString_=function(){var a=goog.labs.userAgent.util.getNavigator_();return a&&(a=a.userAgent)?a:\"\"};goog.labs.userAgent.util.getNavigator_=function(){return goog.global.navigator};goog.labs.userAgent.util.userAgent_=goog.labs.userAgent.util.getNativeUserAgentString_();goog.labs.userAgent.util.setUserAgent=function(a){goog.labs.userAgent.util.userAgent_=a||goog.labs.userAgent.util.getNativeUserAgentString_()};\ngoog.labs.userAgent.util.getUserAgent=function(){return goog.labs.userAgent.util.userAgent_};goog.labs.userAgent.util.matchUserAgent=function(a){var b=goog.labs.userAgent.util.getUserAgent();return goog.string.internal.contains(b,a)};goog.labs.userAgent.util.matchUserAgentIgnoreCase=function(a){var b=goog.labs.userAgent.util.getUserAgent();return goog.string.internal.caseInsensitiveContains(b,a)};\ngoog.labs.userAgent.util.extractVersionTuples=function(a){for(var b=/(\\w[\\w ]+)\\/([^\\s]+)\\s*(?:\\((.*?)\\))?/g,c=[],d;d=b.exec(a);)c.push([d[1],d[2],d[3]||void 0]);return c};goog.labs.userAgent.browser={};goog.labs.userAgent.browser.matchOpera_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Opera\")};goog.labs.userAgent.browser.matchIE_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Trident\")||goog.labs.userAgent.util.matchUserAgent(\"MSIE\")};goog.labs.userAgent.browser.matchEdgeHtml_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Edge\")};goog.labs.userAgent.browser.matchEdgeChromium_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Edg/\")};\ngoog.labs.userAgent.browser.matchOperaChromium_=function(){return goog.labs.userAgent.util.matchUserAgent(\"OPR\")};goog.labs.userAgent.browser.matchFirefox_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Firefox\")||goog.labs.userAgent.util.matchUserAgent(\"FxiOS\")};\ngoog.labs.userAgent.browser.matchSafari_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Safari\")&&!(goog.labs.userAgent.browser.matchChrome_()||goog.labs.userAgent.browser.matchCoast_()||goog.labs.userAgent.browser.matchOpera_()||goog.labs.userAgent.browser.matchEdgeHtml_()||goog.labs.userAgent.browser.matchEdgeChromium_()||goog.labs.userAgent.browser.matchOperaChromium_()||goog.labs.userAgent.browser.matchFirefox_()||goog.labs.userAgent.browser.isSilk()||goog.labs.userAgent.util.matchUserAgent(\"Android\"))};\ngoog.labs.userAgent.browser.matchCoast_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Coast\")};goog.labs.userAgent.browser.matchIosWebview_=function(){return(goog.labs.userAgent.util.matchUserAgent(\"iPad\")||goog.labs.userAgent.util.matchUserAgent(\"iPhone\"))&&!goog.labs.userAgent.browser.matchSafari_()&&!goog.labs.userAgent.browser.matchChrome_()&&!goog.labs.userAgent.browser.matchCoast_()&&!goog.labs.userAgent.browser.matchFirefox_()&&goog.labs.userAgent.util.matchUserAgent(\"AppleWebKit\")};\ngoog.labs.userAgent.browser.matchChrome_=function(){return(goog.labs.userAgent.util.matchUserAgent(\"Chrome\")||goog.labs.userAgent.util.matchUserAgent(\"CriOS\"))&&!goog.labs.userAgent.browser.matchEdgeHtml_()};goog.labs.userAgent.browser.matchAndroidBrowser_=function(){return goog.labs.userAgent.util.matchUserAgent(\"Android\")&&!(goog.labs.userAgent.browser.isChrome()||goog.labs.userAgent.browser.isFirefox()||goog.labs.userAgent.browser.isOpera()||goog.labs.userAgent.browser.isSilk())};\ngoog.labs.userAgent.browser.isOpera=goog.labs.userAgent.browser.matchOpera_;goog.labs.userAgent.browser.isIE=goog.labs.userAgent.browser.matchIE_;goog.labs.userAgent.browser.isEdge=goog.labs.userAgent.browser.matchEdgeHtml_;goog.labs.userAgent.browser.isEdgeChromium=goog.labs.userAgent.browser.matchEdgeChromium_;goog.labs.userAgent.browser.isOperaChromium=goog.labs.userAgent.browser.matchOperaChromium_;goog.labs.userAgent.browser.isFirefox=goog.labs.userAgent.browser.matchFirefox_;\ngoog.labs.userAgent.browser.isSafari=goog.labs.userAgent.browser.matchSafari_;goog.labs.userAgent.browser.isCoast=goog.labs.userAgent.browser.matchCoast_;goog.labs.userAgent.browser.isIosWebview=goog.labs.userAgent.browser.matchIosWebview_;goog.labs.userAgent.browser.isChrome=goog.labs.userAgent.browser.matchChrome_;goog.labs.userAgent.browser.isAndroidBrowser=goog.labs.userAgent.browser.matchAndroidBrowser_;goog.labs.userAgent.browser.isSilk=function(){return goog.labs.userAgent.util.matchUserAgent(\"Silk\")};\ngoog.labs.userAgent.browser.getVersion=function(){function a(a){a=goog.array.find(a,d);return c[a]||\"\"}var b=goog.labs.userAgent.util.getUserAgent();if(goog.labs.userAgent.browser.isIE())return goog.labs.userAgent.browser.getIEVersion_(b);b=goog.labs.userAgent.util.extractVersionTuples(b);var c={};goog.array.forEach(b,function(a){c[a[0]]=a[1]});var d=goog.partial(goog.object.containsKey,c);return goog.labs.userAgent.browser.isOpera()?a([\"Version\",\"Opera\"]):goog.labs.userAgent.browser.isEdge()?a([\"Edge\"]):\ngoog.labs.userAgent.browser.isEdgeChromium()?a([\"Edg\"]):goog.labs.userAgent.browser.isChrome()?a([\"Chrome\",\"CriOS\"]):(b=b[2])&&b[1]||\"\"};goog.labs.userAgent.browser.isVersionOrHigher=function(a){return 0<=goog.string.internal.compareVersions(goog.labs.userAgent.browser.getVersion(),a)};\ngoog.labs.userAgent.browser.getIEVersion_=function(a){var b=/rv: *([\\d\\.]*)/.exec(a);if(b&&b[1])return b[1];b=\"\";var c=/MSIE +([\\d\\.]+)/.exec(a);if(c&&c[1])if(a=/Trident\\/(\\d.\\d)/.exec(a),\"7.0\"==c[1])if(a&&a[1])switch(a[1]){case \"4.0\":b=\"8.0\";break;case \"5.0\":b=\"9.0\";break;case \"6.0\":b=\"10.0\";break;case \"7.0\":b=\"11.0\"}else b=\"7.0\";else b=c[1];return b};goog.html.SafeHtml=function(){this.privateDoNotAccessOrElseSafeHtmlWrappedValue_=\"\";this.SAFE_HTML_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_=goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_;this.dir_=null};goog.html.SafeHtml.prototype.implementsGoogI18nBidiDirectionalString=!0;goog.html.SafeHtml.prototype.getDirection=function(){return this.dir_};goog.html.SafeHtml.prototype.implementsGoogStringTypedString=!0;goog.html.SafeHtml.prototype.getTypedStringValue=function(){return this.privateDoNotAccessOrElseSafeHtmlWrappedValue_.toString()};\ngoog.DEBUG&&(goog.html.SafeHtml.prototype.toString=function(){return\"SafeHtml{\"+this.privateDoNotAccessOrElseSafeHtmlWrappedValue_+\"}\"});goog.html.SafeHtml.unwrap=function(a){return goog.html.SafeHtml.unwrapTrustedHTML(a).toString()};\ngoog.html.SafeHtml.unwrapTrustedHTML=function(a){if(a instanceof goog.html.SafeHtml&&a.constructor===goog.html.SafeHtml&&a.SAFE_HTML_TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_===goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_)return a.privateDoNotAccessOrElseSafeHtmlWrappedValue_;goog.asserts.fail(\"expected object of type SafeHtml, got '\"+a+\"' of type \"+goog.typeOf(a));return\"type_error:SafeHtml\"};\ngoog.html.SafeHtml.htmlEscape=function(a){if(a instanceof goog.html.SafeHtml)return a;var b=\"object\"==typeof a,c=null;b&&a.implementsGoogI18nBidiDirectionalString&&(c=a.getDirection());a=b&&a.implementsGoogStringTypedString?a.getTypedStringValue():String(a);return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.htmlEscape(a),c)};\ngoog.html.SafeHtml.htmlEscapePreservingNewlines=function(a){if(a instanceof goog.html.SafeHtml)return a;a=goog.html.SafeHtml.htmlEscape(a);return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.newLineToBr(goog.html.SafeHtml.unwrap(a)),a.getDirection())};\ngoog.html.SafeHtml.htmlEscapePreservingNewlinesAndSpaces=function(a){if(a instanceof goog.html.SafeHtml)return a;a=goog.html.SafeHtml.htmlEscape(a);return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(goog.string.internal.whitespaceEscape(goog.html.SafeHtml.unwrap(a)),a.getDirection())};goog.html.SafeHtml.from=goog.html.SafeHtml.htmlEscape;goog.html.SafeHtml.VALID_NAMES_IN_TAG_=/^[a-zA-Z0-9-]+$/;\ngoog.html.SafeHtml.URL_ATTRIBUTES_={action:!0,cite:!0,data:!0,formaction:!0,href:!0,manifest:!0,poster:!0,src:!0};goog.html.SafeHtml.NOT_ALLOWED_TAG_NAMES_={APPLET:!0,BASE:!0,EMBED:!0,IFRAME:!0,LINK:!0,MATH:!0,META:!0,OBJECT:!0,SCRIPT:!0,STYLE:!0,SVG:!0,TEMPLATE:!0};goog.html.SafeHtml.create=function(a,b,c){goog.html.SafeHtml.verifyTagName(String(a));return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(String(a),b,c)};\ngoog.html.SafeHtml.verifyTagName=function(a){if(!goog.html.SafeHtml.VALID_NAMES_IN_TAG_.test(a))throw Error(\"Invalid tag name <\"+a+\">.\");if(a.toUpperCase()in goog.html.SafeHtml.NOT_ALLOWED_TAG_NAMES_)throw Error(\"Tag name <\"+a+\"> is not allowed for SafeHtml.\");};\ngoog.html.SafeHtml.createIframe=function(a,b,c,d){a&&goog.html.TrustedResourceUrl.unwrap(a);var e={};e.src=a||null;e.srcdoc=b&&goog.html.SafeHtml.unwrap(b);a=goog.html.SafeHtml.combineAttributes(e,{sandbox:\"\"},c);return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"iframe\",a,d)};\ngoog.html.SafeHtml.createSandboxIframe=function(a,b,c,d){if(!goog.html.SafeHtml.canUseSandboxIframe())throw Error(\"The browser does not support sandboxed iframes.\");var e={};e.src=a?goog.html.SafeUrl.unwrap(goog.html.SafeUrl.sanitize(a)):null;e.srcdoc=b||null;e.sandbox=\"\";a=goog.html.SafeHtml.combineAttributes(e,{},c);return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"iframe\",a,d)};\ngoog.html.SafeHtml.canUseSandboxIframe=function(){return goog.global.HTMLIFrameElement&&\"sandbox\"in goog.global.HTMLIFrameElement.prototype};goog.html.SafeHtml.createScriptSrc=function(a,b){goog.html.TrustedResourceUrl.unwrap(a);a=goog.html.SafeHtml.combineAttributes({src:a},{},b);return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"script\",a)};\ngoog.html.SafeHtml.createScript=function(a,b){for(var c in b){var d=c.toLowerCase();if(\"language\"==d||\"src\"==d||\"text\"==d||\"type\"==d)throw Error('Cannot set \"'+d+'\" attribute');}c=\"\";a=goog.array.concat(a);for(d=0;d<a.length;d++)c+=goog.html.SafeScript.unwrap(a[d]);a=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(c,goog.i18n.bidi.Dir.NEUTRAL);return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"script\",b,a)};\ngoog.html.SafeHtml.createStyle=function(a,b){b=goog.html.SafeHtml.combineAttributes({type:\"text/css\"},{},b);var c=\"\";a=goog.array.concat(a);for(var d=0;d<a.length;d++)c+=goog.html.SafeStyleSheet.unwrap(a[d]);a=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(c,goog.i18n.bidi.Dir.NEUTRAL);return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"style\",b,a)};\ngoog.html.SafeHtml.createMetaRefresh=function(a,b){a=goog.html.SafeUrl.unwrap(goog.html.SafeUrl.sanitize(a));(goog.labs.userAgent.browser.isIE()||goog.labs.userAgent.browser.isEdge())&&goog.string.internal.contains(a,\";\")&&(a=\"'\"+a.replace(/'/g,\"%27\")+\"'\");return goog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse(\"meta\",{\"http-equiv\":\"refresh\",content:(b||0)+\"; url=\"+a})};\ngoog.html.SafeHtml.getAttrNameAndValue_=function(a,b,c){if(c instanceof goog.string.Const)c=goog.string.Const.unwrap(c);else if(\"style\"==b.toLowerCase())c=goog.html.SafeHtml.getStyleValue_(c);else{if(/^on/i.test(b))throw Error('Attribute \"'+b+'\" requires goog.string.Const value, \"'+c+'\" given.');if(b.toLowerCase()in goog.html.SafeHtml.URL_ATTRIBUTES_)if(c instanceof goog.html.TrustedResourceUrl)c=goog.html.TrustedResourceUrl.unwrap(c);else if(c instanceof goog.html.SafeUrl)c=goog.html.SafeUrl.unwrap(c);\nelse if(goog.isString(c))c=goog.html.SafeUrl.sanitize(c).getTypedStringValue();else throw Error('Attribute \"'+b+'\" on tag \"'+a+'\" requires goog.html.SafeUrl, goog.string.Const, or string, value \"'+c+'\" given.');}c.implementsGoogStringTypedString&&(c=c.getTypedStringValue());goog.asserts.assert(goog.isString(c)||goog.isNumber(c),\"String or number value expected, got \"+typeof c+\" with value: \"+c);return b+'=\"'+goog.string.internal.htmlEscape(String(c))+'\"'};\ngoog.html.SafeHtml.getStyleValue_=function(a){if(!goog.isObject(a))throw Error('The \"style\" attribute requires goog.html.SafeStyle or map of style properties, '+typeof a+\" given: \"+a);a instanceof goog.html.SafeStyle||(a=goog.html.SafeStyle.create(a));return goog.html.SafeStyle.unwrap(a)};goog.html.SafeHtml.createWithDir=function(a,b,c,d){b=goog.html.SafeHtml.create(b,c,d);b.dir_=a;return b};\ngoog.html.SafeHtml.join=function(a,b){a=goog.html.SafeHtml.htmlEscape(a);var c=a.getDirection(),d=[],e=function(a){goog.isArray(a)?goog.array.forEach(a,e):(a=goog.html.SafeHtml.htmlEscape(a),d.push(goog.html.SafeHtml.unwrap(a)),a=a.getDirection(),c==goog.i18n.bidi.Dir.NEUTRAL?c=a:a!=goog.i18n.bidi.Dir.NEUTRAL&&c!=a&&(c=null))};goog.array.forEach(b,e);return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(d.join(goog.html.SafeHtml.unwrap(a)),c)};\ngoog.html.SafeHtml.concat=function(a){return goog.html.SafeHtml.join(goog.html.SafeHtml.EMPTY,Array.prototype.slice.call(arguments))};goog.html.SafeHtml.concatWithDir=function(a,b){var c=goog.html.SafeHtml.concat(goog.array.slice(arguments,1));c.dir_=a;return c};goog.html.SafeHtml.TYPE_MARKER_GOOG_HTML_SECURITY_PRIVATE_={};goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse=function(a,b){return(new goog.html.SafeHtml).initSecurityPrivateDoNotAccessOrElse_(a,b)};\ngoog.html.SafeHtml.prototype.initSecurityPrivateDoNotAccessOrElse_=function(a,b){this.privateDoNotAccessOrElseSafeHtmlWrappedValue_=goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY?goog.html.trustedtypes.PRIVATE_DO_NOT_ACCESS_OR_ELSE_POLICY.createHTML(a):a;this.dir_=b;return this};\ngoog.html.SafeHtml.createSafeHtmlTagSecurityPrivateDoNotAccessOrElse=function(a,b,c){var d=null;var e=\"<\"+a+goog.html.SafeHtml.stringifyAttributes(a,b);goog.isDefAndNotNull(c)?goog.isArray(c)||(c=[c]):c=[];goog.dom.tags.isVoidTag(a.toLowerCase())?(goog.asserts.assert(!c.length,\"Void tag <\"+a+\"> does not allow content.\"),e+=\">\"):(d=goog.html.SafeHtml.concat(c),e+=\">\"+goog.html.SafeHtml.unwrap(d)+\"</\"+a+\">\",d=d.getDirection());(a=b&&b.dir)&&(d=/^(ltr|rtl|auto)$/i.test(a)?goog.i18n.bidi.Dir.NEUTRAL:\nnull);return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(e,d)};goog.html.SafeHtml.stringifyAttributes=function(a,b){var c=\"\";if(b)for(var d in b){if(!goog.html.SafeHtml.VALID_NAMES_IN_TAG_.test(d))throw Error('Invalid attribute name \"'+d+'\".');var e=b[d];goog.isDefAndNotNull(e)&&(c+=\" \"+goog.html.SafeHtml.getAttrNameAndValue_(a,d,e))}return c};\ngoog.html.SafeHtml.combineAttributes=function(a,b,c){var d={},e;for(e in a)goog.asserts.assert(e.toLowerCase()==e,\"Must be lower case\"),d[e]=a[e];for(e in b)goog.asserts.assert(e.toLowerCase()==e,\"Must be lower case\"),d[e]=b[e];for(e in c){var f=e.toLowerCase();if(f in a)throw Error('Cannot override \"'+f+'\" attribute, got \"'+e+'\" with value \"'+c[e]+'\"');f in b&&delete d[f];d[e]=c[e]}return d};\ngoog.html.SafeHtml.DOCTYPE_HTML=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(\"<!DOCTYPE html>\",goog.i18n.bidi.Dir.NEUTRAL);goog.html.SafeHtml.EMPTY=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(\"\",goog.i18n.bidi.Dir.NEUTRAL);goog.html.SafeHtml.BR=goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(\"<br>\",goog.i18n.bidi.Dir.NEUTRAL);goog.html.uncheckedconversions={};goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract=function(a,b,c){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.SafeHtml.createSafeHtmlSecurityPrivateDoNotAccessOrElse(b,c||null)};\ngoog.html.uncheckedconversions.safeScriptFromStringKnownToSatisfyTypeContract=function(a,b){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.SafeScript.createSafeScriptSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.uncheckedconversions.safeStyleFromStringKnownToSatisfyTypeContract=function(a,b){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.SafeStyle.createSafeStyleSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.uncheckedconversions.safeStyleSheetFromStringKnownToSatisfyTypeContract=function(a,b){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.SafeStyleSheet.createSafeStyleSheetSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract=function(a,b){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.SafeUrl.createSafeUrlSecurityPrivateDoNotAccessOrElse(b)};\ngoog.html.uncheckedconversions.trustedResourceUrlFromStringKnownToSatisfyTypeContract=function(a,b){goog.asserts.assertString(goog.string.Const.unwrap(a),\"must provide justification\");goog.asserts.assert(!goog.string.internal.isEmptyOrWhitespace(goog.string.Const.unwrap(a)),\"must provide non-empty justification\");return goog.html.TrustedResourceUrl.createTrustedResourceUrlSecurityPrivateDoNotAccessOrElse(b)};goog.dom.safe={};goog.dom.safe.InsertAdjacentHtmlPosition={AFTERBEGIN:\"afterbegin\",AFTEREND:\"afterend\",BEFOREBEGIN:\"beforebegin\",BEFOREEND:\"beforeend\"};goog.dom.safe.insertAdjacentHtml=function(a,b,c){a.insertAdjacentHTML(b,goog.html.SafeHtml.unwrapTrustedHTML(c))};goog.dom.safe.SET_INNER_HTML_DISALLOWED_TAGS_={MATH:!0,SCRIPT:!0,STYLE:!0,SVG:!0,TEMPLATE:!0};\ngoog.dom.safe.isInnerHtmlCleanupRecursive_=goog.functions.cacheReturnValue(function(){if(goog.DEBUG&&\"undefined\"===typeof document)return!1;var a=document.createElement(\"div\"),b=document.createElement(\"div\");b.appendChild(document.createElement(\"div\"));a.appendChild(b);if(goog.DEBUG&&!a.firstChild)return!1;b=a.firstChild.firstChild;a.innerHTML=goog.html.SafeHtml.unwrapTrustedHTML(goog.html.SafeHtml.EMPTY);return!b.parentElement});\ngoog.dom.safe.unsafeSetInnerHtmlDoNotUseOrElse=function(a,b){if(goog.dom.safe.isInnerHtmlCleanupRecursive_())for(;a.lastChild;)a.removeChild(a.lastChild);a.innerHTML=goog.html.SafeHtml.unwrapTrustedHTML(b)};\ngoog.dom.safe.setInnerHtml=function(a,b){if(goog.asserts.ENABLE_ASSERTS){var c=a.tagName.toUpperCase();if(goog.dom.safe.SET_INNER_HTML_DISALLOWED_TAGS_[c])throw Error(\"goog.dom.safe.setInnerHtml cannot be used to set content of \"+a.tagName+\".\");}goog.dom.safe.unsafeSetInnerHtmlDoNotUseOrElse(a,b)};goog.dom.safe.setOuterHtml=function(a,b){a.outerHTML=goog.html.SafeHtml.unwrapTrustedHTML(b)};\ngoog.dom.safe.setFormElementAction=function(a,b){b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);goog.dom.asserts.assertIsHTMLFormElement(a).action=goog.html.SafeUrl.unwrapTrustedURL(b)};goog.dom.safe.setButtonFormAction=function(a,b){b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);goog.dom.asserts.assertIsHTMLButtonElement(a).formAction=goog.html.SafeUrl.unwrapTrustedURL(b)};\ngoog.dom.safe.setInputFormAction=function(a,b){b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);goog.dom.asserts.assertIsHTMLInputElement(a).formAction=goog.html.SafeUrl.unwrapTrustedURL(b)};goog.dom.safe.setStyle=function(a,b){a.style.cssText=goog.html.SafeStyle.unwrap(b)};goog.dom.safe.documentWrite=function(a,b){a.write(goog.html.SafeHtml.unwrapTrustedHTML(b))};\ngoog.dom.safe.setAnchorHref=function(a,b){goog.dom.asserts.assertIsHTMLAnchorElement(a);b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);a.href=goog.html.SafeUrl.unwrapTrustedURL(b)};goog.dom.safe.setImageSrc=function(a,b){goog.dom.asserts.assertIsHTMLImageElement(a);if(!(b instanceof goog.html.SafeUrl)){var c=/^data:image\\//i.test(b);b=goog.html.SafeUrl.sanitizeAssertUnchanged(b,c)}a.src=goog.html.SafeUrl.unwrapTrustedURL(b)};\ngoog.dom.safe.setAudioSrc=function(a,b){goog.dom.asserts.assertIsHTMLAudioElement(a);if(!(b instanceof goog.html.SafeUrl)){var c=/^data:audio\\//i.test(b);b=goog.html.SafeUrl.sanitizeAssertUnchanged(b,c)}a.src=goog.html.SafeUrl.unwrapTrustedURL(b)};goog.dom.safe.setVideoSrc=function(a,b){goog.dom.asserts.assertIsHTMLVideoElement(a);if(!(b instanceof goog.html.SafeUrl)){var c=/^data:video\\//i.test(b);b=goog.html.SafeUrl.sanitizeAssertUnchanged(b,c)}a.src=goog.html.SafeUrl.unwrapTrustedURL(b)};\ngoog.dom.safe.setEmbedSrc=function(a,b){goog.dom.asserts.assertIsHTMLEmbedElement(a);a.src=goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(b)};goog.dom.safe.setFrameSrc=function(a,b){goog.dom.asserts.assertIsHTMLFrameElement(a);a.src=goog.html.TrustedResourceUrl.unwrapTrustedURL(b)};goog.dom.safe.setIframeSrc=function(a,b){goog.dom.asserts.assertIsHTMLIFrameElement(a);a.src=goog.html.TrustedResourceUrl.unwrapTrustedURL(b)};\ngoog.dom.safe.setIframeSrcdoc=function(a,b){goog.dom.asserts.assertIsHTMLIFrameElement(a);a.srcdoc=goog.html.SafeHtml.unwrapTrustedHTML(b)};\ngoog.dom.safe.setLinkHrefAndRel=function(a,b,c){goog.dom.asserts.assertIsHTMLLinkElement(a);a.rel=c;goog.string.internal.caseInsensitiveContains(c,\"stylesheet\")?(goog.asserts.assert(b instanceof goog.html.TrustedResourceUrl,'URL must be TrustedResourceUrl because \"rel\" contains \"stylesheet\"'),a.href=goog.html.TrustedResourceUrl.unwrapTrustedURL(b)):a.href=b instanceof goog.html.TrustedResourceUrl?goog.html.TrustedResourceUrl.unwrapTrustedURL(b):b instanceof goog.html.SafeUrl?goog.html.SafeUrl.unwrapTrustedURL(b):\ngoog.html.SafeUrl.unwrapTrustedURL(goog.html.SafeUrl.sanitizeAssertUnchanged(b))};goog.dom.safe.setObjectData=function(a,b){goog.dom.asserts.assertIsHTMLObjectElement(a);a.data=goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(b)};goog.dom.safe.setScriptSrc=function(a,b){goog.dom.asserts.assertIsHTMLScriptElement(a);a.src=goog.html.TrustedResourceUrl.unwrapTrustedScriptURL(b);(b=goog.getScriptNonce())&&a.setAttribute(\"nonce\",b)};\ngoog.dom.safe.setScriptContent=function(a,b){goog.dom.asserts.assertIsHTMLScriptElement(a);a.text=goog.html.SafeScript.unwrapTrustedScript(b);(b=goog.getScriptNonce())&&a.setAttribute(\"nonce\",b)};goog.dom.safe.setLocationHref=function(a,b){goog.dom.asserts.assertIsLocation(a);b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);a.href=goog.html.SafeUrl.unwrapTrustedURL(b)};\ngoog.dom.safe.assignLocation=function(a,b){goog.dom.asserts.assertIsLocation(a);b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);a.assign(goog.html.SafeUrl.unwrapTrustedURL(b))};goog.dom.safe.replaceLocation=function(a,b){goog.dom.asserts.assertIsLocation(a);b=b instanceof goog.html.SafeUrl?b:goog.html.SafeUrl.sanitizeAssertUnchanged(b);a.replace(goog.html.SafeUrl.unwrapTrustedURL(b))};\ngoog.dom.safe.openInWindow=function(a,b,c,d,e){a=a instanceof goog.html.SafeUrl?a:goog.html.SafeUrl.sanitizeAssertUnchanged(a);return(b||goog.global).open(goog.html.SafeUrl.unwrapTrustedURL(a),c?goog.string.Const.unwrap(c):\"\",d,e)};goog.dom.safe.parseFromStringHtml=function(a,b){return goog.dom.safe.parseFromString(a,b,\"text/html\")};goog.dom.safe.parseFromString=function(a,b,c){return a.parseFromString(goog.html.SafeHtml.unwrapTrustedHTML(b),c)};\ngoog.dom.safe.createImageFromBlob=function(a){if(!/^image\\/.*/g.test(a.type))throw Error(\"goog.dom.safe.createImageFromBlob only accepts MIME type image/.*.\");var b=goog.global.URL.createObjectURL(a);a=new goog.global.Image;a.onload=function(){goog.global.URL.revokeObjectURL(b)};goog.dom.safe.setImageSrc(a,goog.html.uncheckedconversions.safeUrlFromStringKnownToSatisfyTypeContract(goog.string.Const.from(\"Image blob URL.\"),b));return a};goog.string.DETECT_DOUBLE_ESCAPING=!1;goog.string.FORCE_NON_DOM_HTML_UNESCAPING=!1;goog.string.Unicode={NBSP:\"\\u00a0\"};goog.string.startsWith=goog.string.internal.startsWith;goog.string.endsWith=goog.string.internal.endsWith;goog.string.caseInsensitiveStartsWith=goog.string.internal.caseInsensitiveStartsWith;goog.string.caseInsensitiveEndsWith=goog.string.internal.caseInsensitiveEndsWith;goog.string.caseInsensitiveEquals=goog.string.internal.caseInsensitiveEquals;\ngoog.string.subs=function(a,b){for(var c=a.split(\"%s\"),d=\"\",e=Array.prototype.slice.call(arguments,1);e.length&&1<c.length;)d+=c.shift()+e.shift();return d+c.join(\"%s\")};goog.string.collapseWhitespace=function(a){return a.replace(/[\\s\\xa0]+/g,\" \").replace(/^\\s+|\\s+$/g,\"\")};goog.string.isEmptyOrWhitespace=goog.string.internal.isEmptyOrWhitespace;goog.string.isEmptyString=function(a){return 0==a.length};goog.string.isEmpty=goog.string.isEmptyOrWhitespace;goog.string.isEmptyOrWhitespaceSafe=function(a){return goog.string.isEmptyOrWhitespace(goog.string.makeSafe(a))};\ngoog.string.isEmptySafe=goog.string.isEmptyOrWhitespaceSafe;goog.string.isBreakingWhitespace=function(a){return!/[^\\t\\n\\r ]/.test(a)};goog.string.isAlpha=function(a){return!/[^a-zA-Z]/.test(a)};goog.string.isNumeric=function(a){return!/[^0-9]/.test(a)};goog.string.isAlphaNumeric=function(a){return!/[^a-zA-Z0-9]/.test(a)};goog.string.isSpace=function(a){return\" \"==a};goog.string.isUnicodeChar=function(a){return 1==a.length&&\" \"<=a&&\"~\">=a||\"\\u0080\"<=a&&\"\\ufffd\">=a};\ngoog.string.stripNewlines=function(a){return a.replace(/(\\r\\n|\\r|\\n)+/g,\" \")};goog.string.canonicalizeNewlines=function(a){return a.replace(/(\\r\\n|\\r|\\n)/g,\"\\n\")};goog.string.normalizeWhitespace=function(a){return a.replace(/\\xa0|\\s/g,\" \")};goog.string.normalizeSpaces=function(a){return a.replace(/\\xa0|[ \\t]+/g,\" \")};goog.string.collapseBreakingSpaces=function(a){return a.replace(/[\\t\\r\\n ]+/g,\" \").replace(/^[\\t\\r\\n ]+|[\\t\\r\\n ]+$/g,\"\")};goog.string.trim=goog.string.internal.trim;\ngoog.string.trimLeft=function(a){return a.replace(/^[\\s\\xa0]+/,\"\")};goog.string.trimRight=function(a){return a.replace(/[\\s\\xa0]+$/,\"\")};goog.string.caseInsensitiveCompare=goog.string.internal.caseInsensitiveCompare;\ngoog.string.numberAwareCompare_=function(a,b,c){if(a==b)return 0;if(!a)return-1;if(!b)return 1;for(var d=a.toLowerCase().match(c),e=b.toLowerCase().match(c),f=Math.min(d.length,e.length),g=0;g<f;g++){c=d[g];var h=e[g];if(c!=h)return a=parseInt(c,10),!isNaN(a)&&(b=parseInt(h,10),!isNaN(b)&&a-b)?a-b:c<h?-1:1}return d.length!=e.length?d.length-e.length:a<b?-1:1};goog.string.intAwareCompare=function(a,b){return goog.string.numberAwareCompare_(a,b,/\\d+|\\D+/g)};\ngoog.string.floatAwareCompare=function(a,b){return goog.string.numberAwareCompare_(a,b,/\\d+|\\.\\d+|\\D+/g)};goog.string.numerateCompare=goog.string.floatAwareCompare;goog.string.urlEncode=function(a){return encodeURIComponent(String(a))};goog.string.urlDecode=function(a){return decodeURIComponent(a.replace(/\\+/g,\" \"))};goog.string.newLineToBr=goog.string.internal.newLineToBr;\ngoog.string.htmlEscape=function(a,b){a=goog.string.internal.htmlEscape(a,b);goog.string.DETECT_DOUBLE_ESCAPING&&(a=a.replace(goog.string.E_RE_,\"&#101;\"));return a};goog.string.E_RE_=/e/g;goog.string.unescapeEntities=function(a){return goog.string.contains(a,\"&\")?!goog.string.FORCE_NON_DOM_HTML_UNESCAPING&&\"document\"in goog.global?goog.string.unescapeEntitiesUsingDom_(a):goog.string.unescapePureXmlEntities_(a):a};\ngoog.string.unescapeEntitiesWithDocument=function(a,b){return goog.string.contains(a,\"&\")?goog.string.unescapeEntitiesUsingDom_(a,b):a};\ngoog.string.unescapeEntitiesUsingDom_=function(a,b){var c={\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"'};var d=b?b.createElement(\"div\"):goog.global.document.createElement(\"div\");return a.replace(goog.string.HTML_ENTITY_PATTERN_,function(a,b){var e=c[a];if(e)return e;\"#\"==b.charAt(0)&&(b=Number(\"0\"+b.substr(1)),isNaN(b)||(e=String.fromCharCode(b)));e||(goog.dom.safe.setInnerHtml(d,goog.html.uncheckedconversions.safeHtmlFromStringKnownToSatisfyTypeContract(goog.string.Const.from(\"Single HTML entity.\"),\na+\" \")),e=d.firstChild.nodeValue.slice(0,-1));return c[a]=e})};goog.string.unescapePureXmlEntities_=function(a){return a.replace(/&([^;]+);/g,function(a,c){switch(c){case \"amp\":return\"&\";case \"lt\":return\"<\";case \"gt\":return\">\";case \"quot\":return'\"';default:return\"#\"!=c.charAt(0)||(c=Number(\"0\"+c.substr(1)),isNaN(c))?a:String.fromCharCode(c)}})};goog.string.HTML_ENTITY_PATTERN_=/&([^;\\s<&]+);?/g;goog.string.whitespaceEscape=function(a,b){return goog.string.newLineToBr(a.replace(/  /g,\" &#160;\"),b)};\ngoog.string.preserveSpaces=function(a){return a.replace(/(^|[\\n ]) /g,\"$1\"+goog.string.Unicode.NBSP)};goog.string.stripQuotes=function(a,b){for(var c=b.length,d=0;d<c;d++){var e=1==c?b:b.charAt(d);if(a.charAt(0)==e&&a.charAt(a.length-1)==e)return a.substring(1,a.length-1)}return a};goog.string.truncate=function(a,b,c){c&&(a=goog.string.unescapeEntities(a));a.length>b&&(a=a.substring(0,b-3)+\"...\");c&&(a=goog.string.htmlEscape(a));return a};\ngoog.string.truncateMiddle=function(a,b,c,d){c&&(a=goog.string.unescapeEntities(a));if(d&&a.length>b){d>b&&(d=b);var e=a.length-d;a=a.substring(0,b-d)+\"...\"+a.substring(e)}else a.length>b&&(d=Math.floor(b/2),e=a.length-d,a=a.substring(0,d+b%2)+\"...\"+a.substring(e));c&&(a=goog.string.htmlEscape(a));return a};goog.string.specialEscapeChars_={\"\\x00\":\"\\\\0\",\"\\b\":\"\\\\b\",\"\\f\":\"\\\\f\",\"\\n\":\"\\\\n\",\"\\r\":\"\\\\r\",\"\\t\":\"\\\\t\",\"\\x0B\":\"\\\\x0B\",'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\",\"<\":\"\\\\u003C\"};goog.string.jsEscapeCache_={\"'\":\"\\\\'\"};\ngoog.string.quote=function(a){a=String(a);for(var b=['\"'],c=0;c<a.length;c++){var d=a.charAt(c),e=d.charCodeAt(0);b[c+1]=goog.string.specialEscapeChars_[d]||(31<e&&127>e?d:goog.string.escapeChar(d))}b.push('\"');return b.join(\"\")};goog.string.escapeString=function(a){for(var b=[],c=0;c<a.length;c++)b[c]=goog.string.escapeChar(a.charAt(c));return b.join(\"\")};\ngoog.string.escapeChar=function(a){if(a in goog.string.jsEscapeCache_)return goog.string.jsEscapeCache_[a];if(a in goog.string.specialEscapeChars_)return goog.string.jsEscapeCache_[a]=goog.string.specialEscapeChars_[a];var b=a.charCodeAt(0);if(31<b&&127>b)var c=a;else{if(256>b){if(c=\"\\\\x\",16>b||256<b)c+=\"0\"}else c=\"\\\\u\",4096>b&&(c+=\"0\");c+=b.toString(16).toUpperCase()}return goog.string.jsEscapeCache_[a]=c};goog.string.contains=goog.string.internal.contains;goog.string.caseInsensitiveContains=goog.string.internal.caseInsensitiveContains;\ngoog.string.countOf=function(a,b){return a&&b?a.split(b).length-1:0};goog.string.removeAt=function(a,b,c){var d=a;0<=b&&b<a.length&&0<c&&(d=a.substr(0,b)+a.substr(b+c,a.length-b-c));return d};goog.string.remove=function(a,b){return a.replace(b,\"\")};goog.string.removeAll=function(a,b){b=new RegExp(goog.string.regExpEscape(b),\"g\");return a.replace(b,\"\")};goog.string.replaceAll=function(a,b,c){b=new RegExp(goog.string.regExpEscape(b),\"g\");return a.replace(b,c.replace(/\\$/g,\"$$$$\"))};\ngoog.string.regExpEscape=function(a){return String(a).replace(/([-()\\[\\]{}+?*.$\\^|,:#<!\\\\])/g,\"\\\\$1\").replace(/\\x08/g,\"\\\\x08\")};goog.string.repeat=String.prototype.repeat?function(a,b){return a.repeat(b)}:function(a,b){return Array(b+1).join(a)};goog.string.padNumber=function(a,b,c){a=goog.isDef(c)?a.toFixed(c):String(a);c=a.indexOf(\".\");-1==c&&(c=a.length);return goog.string.repeat(\"0\",Math.max(0,b-c))+a};goog.string.makeSafe=function(a){return null==a?\"\":String(a)};\ngoog.string.buildString=function(a){return Array.prototype.join.call(arguments,\"\")};goog.string.getRandomString=function(){return Math.floor(2147483648*Math.random()).toString(36)+Math.abs(Math.floor(2147483648*Math.random())^goog.now()).toString(36)};goog.string.compareVersions=goog.string.internal.compareVersions;goog.string.hashCode=function(a){for(var b=0,c=0;c<a.length;++c)b=31*b+a.charCodeAt(c)>>>0;return b};goog.string.uniqueStringCounter_=2147483648*Math.random()|0;\ngoog.string.createUniqueString=function(){return\"goog_\"+goog.string.uniqueStringCounter_++};goog.string.toNumber=function(a){var b=Number(a);return 0==b&&goog.string.isEmptyOrWhitespace(a)?NaN:b};goog.string.isLowerCamelCase=function(a){return/^[a-z]+([A-Z][a-z]*)*$/.test(a)};goog.string.isUpperCamelCase=function(a){return/^([A-Z][a-z]*)+$/.test(a)};goog.string.toCamelCase=function(a){return String(a).replace(/\\-([a-z])/g,function(a,c){return c.toUpperCase()})};\ngoog.string.toSelectorCase=function(a){return String(a).replace(/([A-Z])/g,\"-$1\").toLowerCase()};goog.string.toTitleCase=function(a,b){b=goog.isString(b)?goog.string.regExpEscape(b):\"\\\\s\";return a.replace(new RegExp(\"(^\"+(b?\"|[\"+b+\"]+\":\"\")+\")([a-z])\",\"g\"),function(a,b,e){return b+e.toUpperCase()})};goog.string.capitalize=function(a){return String(a.charAt(0)).toUpperCase()+String(a.substr(1)).toLowerCase()};\ngoog.string.parseInt=function(a){isFinite(a)&&(a=String(a));return goog.isString(a)?/^\\s*-?0x/i.test(a)?parseInt(a,16):parseInt(a,10):NaN};goog.string.splitLimit=function(a,b,c){a=a.split(b);for(var d=[];0<c&&a.length;)d.push(a.shift()),c--;a.length&&d.push(a.join(b));return d};goog.string.lastComponent=function(a,b){if(b)\"string\"==typeof b&&(b=[b]);else return a;for(var c=-1,d=0;d<b.length;d++)if(\"\"!=b[d]){var e=a.lastIndexOf(b[d]);e>c&&(c=e)}return-1==c?a:a.slice(c+1)};\ngoog.string.editDistance=function(a,b){var c=[],d=[];if(a==b)return 0;if(!a.length||!b.length)return Math.max(a.length,b.length);for(var e=0;e<b.length+1;e++)c[e]=e;for(e=0;e<a.length;e++){d[0]=e+1;for(var f=0;f<b.length;f++)d[f+1]=Math.min(d[f]+1,c[f+1]+1,c[f]+Number(a[e]!=b[f]));for(f=0;f<c.length;f++)c[f]=d[f]}return d[b.length]};goog.labs.userAgent.engine={};goog.labs.userAgent.engine.isPresto=function(){return goog.labs.userAgent.util.matchUserAgent(\"Presto\")};goog.labs.userAgent.engine.isTrident=function(){return goog.labs.userAgent.util.matchUserAgent(\"Trident\")||goog.labs.userAgent.util.matchUserAgent(\"MSIE\")};goog.labs.userAgent.engine.isEdge=function(){return goog.labs.userAgent.util.matchUserAgent(\"Edge\")};\ngoog.labs.userAgent.engine.isWebKit=function(){return goog.labs.userAgent.util.matchUserAgentIgnoreCase(\"WebKit\")&&!goog.labs.userAgent.engine.isEdge()};goog.labs.userAgent.engine.isGecko=function(){return goog.labs.userAgent.util.matchUserAgent(\"Gecko\")&&!goog.labs.userAgent.engine.isWebKit()&&!goog.labs.userAgent.engine.isTrident()&&!goog.labs.userAgent.engine.isEdge()};\ngoog.labs.userAgent.engine.getVersion=function(){var a=goog.labs.userAgent.util.getUserAgent();if(a){a=goog.labs.userAgent.util.extractVersionTuples(a);var b=goog.labs.userAgent.engine.getEngineTuple_(a);if(b)return\"Gecko\"==b[0]?goog.labs.userAgent.engine.getVersionForKey_(a,\"Firefox\"):b[1];a=a[0];var c;if(a&&(c=a[2])&&(c=/Trident\\/([^\\s;]+)/.exec(c)))return c[1]}return\"\"};\ngoog.labs.userAgent.engine.getEngineTuple_=function(a){if(!goog.labs.userAgent.engine.isEdge())return a[1];for(var b=0;b<a.length;b++){var c=a[b];if(\"Edge\"==c[0])return c}};goog.labs.userAgent.engine.isVersionOrHigher=function(a){return 0<=goog.string.compareVersions(goog.labs.userAgent.engine.getVersion(),a)};goog.labs.userAgent.engine.getVersionForKey_=function(a,b){return(a=goog.array.find(a,function(a){return b==a[0]}))&&a[1]||\"\"};goog.labs.userAgent.platform={};goog.labs.userAgent.platform.isAndroid=function(){return goog.labs.userAgent.util.matchUserAgent(\"Android\")};goog.labs.userAgent.platform.isIpod=function(){return goog.labs.userAgent.util.matchUserAgent(\"iPod\")};goog.labs.userAgent.platform.isIphone=function(){return goog.labs.userAgent.util.matchUserAgent(\"iPhone\")&&!goog.labs.userAgent.util.matchUserAgent(\"iPod\")&&!goog.labs.userAgent.util.matchUserAgent(\"iPad\")};goog.labs.userAgent.platform.isIpad=function(){return goog.labs.userAgent.util.matchUserAgent(\"iPad\")};\ngoog.labs.userAgent.platform.isIos=function(){return goog.labs.userAgent.platform.isIphone()||goog.labs.userAgent.platform.isIpad()||goog.labs.userAgent.platform.isIpod()};goog.labs.userAgent.platform.isMacintosh=function(){return goog.labs.userAgent.util.matchUserAgent(\"Macintosh\")};goog.labs.userAgent.platform.isLinux=function(){return goog.labs.userAgent.util.matchUserAgent(\"Linux\")};goog.labs.userAgent.platform.isWindows=function(){return goog.labs.userAgent.util.matchUserAgent(\"Windows\")};\ngoog.labs.userAgent.platform.isChromeOS=function(){return goog.labs.userAgent.util.matchUserAgent(\"CrOS\")};goog.labs.userAgent.platform.isChromecast=function(){return goog.labs.userAgent.util.matchUserAgent(\"CrKey\")};goog.labs.userAgent.platform.isKaiOS=function(){return goog.labs.userAgent.util.matchUserAgentIgnoreCase(\"KaiOS\")};goog.labs.userAgent.platform.isGo2Phone=function(){return goog.labs.userAgent.util.matchUserAgentIgnoreCase(\"GAFP\")};\ngoog.labs.userAgent.platform.getVersion=function(){var a=goog.labs.userAgent.util.getUserAgent(),b=\"\";goog.labs.userAgent.platform.isWindows()?(b=/Windows (?:NT|Phone) ([0-9.]+)/,b=(a=b.exec(a))?a[1]:\"0.0\"):goog.labs.userAgent.platform.isIos()?(b=/(?:iPhone|iPod|iPad|CPU)\\s+OS\\s+(\\S+)/,b=(a=b.exec(a))&&a[1].replace(/_/g,\".\")):goog.labs.userAgent.platform.isMacintosh()?(b=/Mac OS X ([0-9_.]+)/,b=(a=b.exec(a))?a[1].replace(/_/g,\".\"):\"10\"):goog.labs.userAgent.platform.isKaiOS()?(b=/(?:KaiOS)\\/(\\S+)/i,\nb=(a=b.exec(a))&&a[1]):goog.labs.userAgent.platform.isAndroid()?(b=/Android\\s+([^\\);]+)(\\)|;)/,b=(a=b.exec(a))&&a[1]):goog.labs.userAgent.platform.isChromeOS()&&(b=/(?:CrOS\\s+(?:i686|x86_64)\\s+([0-9.]+))/,b=(a=b.exec(a))&&a[1]);return b||\"\"};goog.labs.userAgent.platform.isVersionOrHigher=function(a){return 0<=goog.string.compareVersions(goog.labs.userAgent.platform.getVersion(),a)};goog.reflect={};goog.reflect.object=function(a,b){return b};goog.reflect.objectProperty=function(a,b){return a};goog.reflect.sinkValue=function(a){goog.reflect.sinkValue[\" \"](a);return a};goog.reflect.sinkValue[\" \"]=goog.nullFunction;goog.reflect.canAccessProperty=function(a,b){try{return goog.reflect.sinkValue(a[b]),!0}catch(c){}return!1};goog.reflect.cache=function(a,b,c,d){d=d?d(b):b;return Object.prototype.hasOwnProperty.call(a,d)?a[d]:a[d]=c(b)};goog.userAgent={};goog.userAgent.ASSUME_IE=!1;goog.userAgent.ASSUME_EDGE=!1;goog.userAgent.ASSUME_GECKO=!1;goog.userAgent.ASSUME_WEBKIT=!1;goog.userAgent.ASSUME_MOBILE_WEBKIT=!1;goog.userAgent.ASSUME_OPERA=!1;goog.userAgent.ASSUME_ANY_VERSION=!1;goog.userAgent.BROWSER_KNOWN_=goog.userAgent.ASSUME_IE||goog.userAgent.ASSUME_EDGE||goog.userAgent.ASSUME_GECKO||goog.userAgent.ASSUME_MOBILE_WEBKIT||goog.userAgent.ASSUME_WEBKIT||goog.userAgent.ASSUME_OPERA;goog.userAgent.getUserAgentString=function(){return goog.labs.userAgent.util.getUserAgent()};\ngoog.userAgent.getNavigatorTyped=function(){return goog.global.navigator||null};goog.userAgent.getNavigator=function(){return goog.userAgent.getNavigatorTyped()};goog.userAgent.OPERA=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_OPERA:goog.labs.userAgent.browser.isOpera();goog.userAgent.IE=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_IE:goog.labs.userAgent.browser.isIE();goog.userAgent.EDGE=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_EDGE:goog.labs.userAgent.engine.isEdge();\ngoog.userAgent.EDGE_OR_IE=goog.userAgent.EDGE||goog.userAgent.IE;goog.userAgent.GECKO=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_GECKO:goog.labs.userAgent.engine.isGecko();goog.userAgent.WEBKIT=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_WEBKIT||goog.userAgent.ASSUME_MOBILE_WEBKIT:goog.labs.userAgent.engine.isWebKit();goog.userAgent.isMobile_=function(){return goog.userAgent.WEBKIT&&goog.labs.userAgent.util.matchUserAgent(\"Mobile\")};\ngoog.userAgent.MOBILE=goog.userAgent.ASSUME_MOBILE_WEBKIT||goog.userAgent.isMobile_();goog.userAgent.SAFARI=goog.userAgent.WEBKIT;goog.userAgent.determinePlatform_=function(){var a=goog.userAgent.getNavigatorTyped();return a&&a.platform||\"\"};goog.userAgent.PLATFORM=goog.userAgent.determinePlatform_();goog.userAgent.ASSUME_MAC=!1;goog.userAgent.ASSUME_WINDOWS=!1;goog.userAgent.ASSUME_LINUX=!1;goog.userAgent.ASSUME_X11=!1;goog.userAgent.ASSUME_ANDROID=!1;goog.userAgent.ASSUME_IPHONE=!1;\ngoog.userAgent.ASSUME_IPAD=!1;goog.userAgent.ASSUME_IPOD=!1;goog.userAgent.ASSUME_KAIOS=!1;goog.userAgent.ASSUME_GO2PHONE=!1;goog.userAgent.PLATFORM_KNOWN_=goog.userAgent.ASSUME_MAC||goog.userAgent.ASSUME_WINDOWS||goog.userAgent.ASSUME_LINUX||goog.userAgent.ASSUME_X11||goog.userAgent.ASSUME_ANDROID||goog.userAgent.ASSUME_IPHONE||goog.userAgent.ASSUME_IPAD||goog.userAgent.ASSUME_IPOD;goog.userAgent.MAC=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_MAC:goog.labs.userAgent.platform.isMacintosh();\ngoog.userAgent.WINDOWS=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_WINDOWS:goog.labs.userAgent.platform.isWindows();goog.userAgent.isLegacyLinux_=function(){return goog.labs.userAgent.platform.isLinux()||goog.labs.userAgent.platform.isChromeOS()};goog.userAgent.LINUX=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_LINUX:goog.userAgent.isLegacyLinux_();goog.userAgent.isX11_=function(){var a=goog.userAgent.getNavigatorTyped();return!!a&&goog.string.contains(a.appVersion||\"\",\"X11\")};\ngoog.userAgent.X11=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_X11:goog.userAgent.isX11_();goog.userAgent.ANDROID=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_ANDROID:goog.labs.userAgent.platform.isAndroid();goog.userAgent.IPHONE=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPHONE:goog.labs.userAgent.platform.isIphone();goog.userAgent.IPAD=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPAD:goog.labs.userAgent.platform.isIpad();\ngoog.userAgent.IPOD=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPOD:goog.labs.userAgent.platform.isIpod();goog.userAgent.IOS=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPHONE||goog.userAgent.ASSUME_IPAD||goog.userAgent.ASSUME_IPOD:goog.labs.userAgent.platform.isIos();goog.userAgent.KAIOS=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_KAIOS:goog.labs.userAgent.platform.isKaiOS();goog.userAgent.GO2PHONE=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_GO2PHONE:goog.labs.userAgent.platform.isGo2Phone();\ngoog.userAgent.determineVersion_=function(){var a=\"\",b=goog.userAgent.getVersionRegexResult_();b&&(a=b?b[1]:\"\");return goog.userAgent.IE&&(b=goog.userAgent.getDocumentMode_(),null!=b&&b>parseFloat(a))?String(b):a};\ngoog.userAgent.getVersionRegexResult_=function(){var a=goog.userAgent.getUserAgentString();if(goog.userAgent.GECKO)return/rv:([^\\);]+)(\\)|;)/.exec(a);if(goog.userAgent.EDGE)return/Edge\\/([\\d\\.]+)/.exec(a);if(goog.userAgent.IE)return/\\b(?:MSIE|rv)[: ]([^\\);]+)(\\)|;)/.exec(a);if(goog.userAgent.WEBKIT)return/WebKit\\/(\\S+)/.exec(a);if(goog.userAgent.OPERA)return/(?:Version)[ \\/]?(\\S+)/.exec(a)};goog.userAgent.getDocumentMode_=function(){var a=goog.global.document;return a?a.documentMode:void 0};\ngoog.userAgent.VERSION=goog.userAgent.determineVersion_();goog.userAgent.compare=function(a,b){return goog.string.compareVersions(a,b)};goog.userAgent.isVersionOrHigherCache_={};goog.userAgent.isVersionOrHigher=function(a){return goog.userAgent.ASSUME_ANY_VERSION||goog.reflect.cache(goog.userAgent.isVersionOrHigherCache_,a,function(){return 0<=goog.string.compareVersions(goog.userAgent.VERSION,a)})};goog.userAgent.isVersion=goog.userAgent.isVersionOrHigher;\ngoog.userAgent.isDocumentModeOrHigher=function(a){return Number(goog.userAgent.DOCUMENT_MODE)>=a};goog.userAgent.isDocumentMode=goog.userAgent.isDocumentModeOrHigher;goog.userAgent.DOCUMENT_MODE=function(){if(goog.global.document&&goog.userAgent.IE)return goog.userAgent.getDocumentMode_()}();goog.userAgent.product={};goog.userAgent.product.ASSUME_FIREFOX=!1;goog.userAgent.product.ASSUME_IPHONE=!1;goog.userAgent.product.ASSUME_IPAD=!1;goog.userAgent.product.ASSUME_ANDROID=!1;goog.userAgent.product.ASSUME_CHROME=!1;goog.userAgent.product.ASSUME_SAFARI=!1;\ngoog.userAgent.product.PRODUCT_KNOWN_=goog.userAgent.ASSUME_IE||goog.userAgent.ASSUME_EDGE||goog.userAgent.ASSUME_OPERA||goog.userAgent.product.ASSUME_FIREFOX||goog.userAgent.product.ASSUME_IPHONE||goog.userAgent.product.ASSUME_IPAD||goog.userAgent.product.ASSUME_ANDROID||goog.userAgent.product.ASSUME_CHROME||goog.userAgent.product.ASSUME_SAFARI;goog.userAgent.product.OPERA=goog.userAgent.OPERA;goog.userAgent.product.IE=goog.userAgent.IE;goog.userAgent.product.EDGE=goog.userAgent.EDGE;\ngoog.userAgent.product.FIREFOX=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_FIREFOX:goog.labs.userAgent.browser.isFirefox();goog.userAgent.product.isIphoneOrIpod_=function(){return goog.labs.userAgent.platform.isIphone()||goog.labs.userAgent.platform.isIpod()};goog.userAgent.product.IPHONE=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_IPHONE:goog.userAgent.product.isIphoneOrIpod_();\ngoog.userAgent.product.IPAD=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_IPAD:goog.labs.userAgent.platform.isIpad();goog.userAgent.product.ANDROID=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_ANDROID:goog.labs.userAgent.browser.isAndroidBrowser();goog.userAgent.product.CHROME=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_CHROME:goog.labs.userAgent.browser.isChrome();\ngoog.userAgent.product.isSafariDesktop_=function(){return goog.labs.userAgent.browser.isSafari()&&!goog.labs.userAgent.platform.isIos()};goog.userAgent.product.SAFARI=goog.userAgent.product.PRODUCT_KNOWN_?goog.userAgent.product.ASSUME_SAFARI:goog.userAgent.product.isSafariDesktop_();goog.crypt.base64={};goog.crypt.base64.DEFAULT_ALPHABET_COMMON_=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";goog.crypt.base64.ENCODED_VALS=goog.crypt.base64.DEFAULT_ALPHABET_COMMON_+\"+/=\";goog.crypt.base64.ENCODED_VALS_WEBSAFE=goog.crypt.base64.DEFAULT_ALPHABET_COMMON_+\"-_.\";goog.crypt.base64.Alphabet={DEFAULT:0,NO_PADDING:1,WEBSAFE:2,WEBSAFE_DOT_PADDING:3,WEBSAFE_NO_PADDING:4};goog.crypt.base64.paddingChars_=\"=.\";\ngoog.crypt.base64.isPadding_=function(a){return goog.string.contains(goog.crypt.base64.paddingChars_,a)};goog.crypt.base64.byteToCharMaps_={};goog.crypt.base64.charToByteMap_=null;goog.crypt.base64.ASSUME_NATIVE_SUPPORT_=goog.userAgent.GECKO||goog.userAgent.WEBKIT&&!goog.userAgent.product.SAFARI||goog.userAgent.OPERA;goog.crypt.base64.HAS_NATIVE_ENCODE_=goog.crypt.base64.ASSUME_NATIVE_SUPPORT_||\"function\"==typeof goog.global.btoa;\ngoog.crypt.base64.HAS_NATIVE_DECODE_=goog.crypt.base64.ASSUME_NATIVE_SUPPORT_||!goog.userAgent.product.SAFARI&&!goog.userAgent.IE&&\"function\"==typeof goog.global.atob;\ngoog.crypt.base64.encodeByteArray=function(a,b){goog.asserts.assert(goog.isArrayLike(a),\"encodeByteArray takes an array as a parameter\");void 0===b&&(b=goog.crypt.base64.Alphabet.DEFAULT);goog.crypt.base64.init_();b=goog.crypt.base64.byteToCharMaps_[b];for(var c=[],d=0;d<a.length;d+=3){var e=a[d],f=d+1<a.length,g=f?a[d+1]:0,h=d+2<a.length,k=h?a[d+2]:0,l=e>>2;e=(e&3)<<4|g>>4;g=(g&15)<<2|k>>6;k&=63;h||(k=64,f||(g=64));c.push(b[l],b[e],b[g]||\"\",b[k]||\"\")}return c.join(\"\")};\ngoog.crypt.base64.encodeString=function(a,b){return goog.crypt.base64.HAS_NATIVE_ENCODE_&&!b?goog.global.btoa(a):goog.crypt.base64.encodeByteArray(goog.crypt.stringToByteArray(a),b)};goog.crypt.base64.decodeString=function(a,b){if(goog.crypt.base64.HAS_NATIVE_DECODE_&&!b)return goog.global.atob(a);var c=\"\";goog.crypt.base64.decodeStringInternal_(a,function(a){c+=String.fromCharCode(a)});return c};\ngoog.crypt.base64.decodeStringToByteArray=function(a,b){var c=[];goog.crypt.base64.decodeStringInternal_(a,function(a){c.push(a)});return c};\ngoog.crypt.base64.decodeStringToUint8Array=function(a){goog.asserts.assert(!goog.userAgent.IE||goog.userAgent.isVersionOrHigher(\"10\"),\"Browser does not support typed arrays\");var b=a.length,c=3*b/4;c%3?c=Math.floor(c):goog.crypt.base64.isPadding_(a[b-1])&&(c=goog.crypt.base64.isPadding_(a[b-2])?c-2:c-1);var d=new Uint8Array(c),e=0;goog.crypt.base64.decodeStringInternal_(a,function(a){d[e++]=a});return d.subarray(0,e)};\ngoog.crypt.base64.decodeStringInternal_=function(a,b){function c(b){for(;d<a.length;){var c=a.charAt(d++),e=goog.crypt.base64.charToByteMap_[c];if(null!=e)return e;if(!goog.string.isEmptyOrWhitespace(c))throw Error(\"Unknown base64 encoding at char: \"+c);}return b}goog.crypt.base64.init_();for(var d=0;;){var e=c(-1),f=c(0),g=c(64),h=c(64);if(64===h&&-1===e)break;b(e<<2|f>>4);64!=g&&(b(f<<4&240|g>>2),64!=h&&b(g<<6&192|h))}};\ngoog.crypt.base64.init_=function(){if(!goog.crypt.base64.charToByteMap_){goog.crypt.base64.charToByteMap_={};for(var a=goog.crypt.base64.DEFAULT_ALPHABET_COMMON_.split(\"\"),b=[\"+/=\",\"+/\",\"-_=\",\"-_.\",\"-_\"],c=0;5>c;c++){var d=a.concat(b[c].split(\"\"));goog.crypt.base64.byteToCharMaps_[c]=d;for(var e=0;e<d.length;e++){var f=d[e],g=goog.crypt.base64.charToByteMap_[f];void 0===g?goog.crypt.base64.charToByteMap_[f]=e:goog.asserts.assert(g===e)}}}};jspb.utils={};jspb.utils.split64Low=0;jspb.utils.split64High=0;jspb.utils.splitUint64=function(a){var b=a>>>0;a=Math.floor((a-b)/jspb.BinaryConstants.TWO_TO_32)>>>0;jspb.utils.split64Low=b;jspb.utils.split64High=a};jspb.utils.splitInt64=function(a){var b=0>a;a=Math.abs(a);var c=a>>>0;a=Math.floor((a-c)/jspb.BinaryConstants.TWO_TO_32);a>>>=0;b&&(a=~a>>>0,c=(~c>>>0)+1,4294967295<c&&(c=0,a++,4294967295<a&&(a=0)));jspb.utils.split64Low=c;jspb.utils.split64High=a};\njspb.utils.splitZigzag64=function(a){var b=0>a;a=2*Math.abs(a);jspb.utils.splitUint64(a);a=jspb.utils.split64Low;var c=jspb.utils.split64High;b&&(0==a?0==c?c=a=4294967295:(c--,a=4294967295):a--);jspb.utils.split64Low=a;jspb.utils.split64High=c};\njspb.utils.splitFloat32=function(a){var b=0>a?1:0;a=b?-a:a;if(0===a)0<1/a?(jspb.utils.split64High=0,jspb.utils.split64Low=0):(jspb.utils.split64High=0,jspb.utils.split64Low=2147483648);else if(isNaN(a))jspb.utils.split64High=0,jspb.utils.split64Low=2147483647;else if(a>jspb.BinaryConstants.FLOAT32_MAX)jspb.utils.split64High=0,jspb.utils.split64Low=(b<<31|2139095040)>>>0;else if(a<jspb.BinaryConstants.FLOAT32_MIN)a=Math.round(a/Math.pow(2,-149)),jspb.utils.split64High=0,jspb.utils.split64Low=(b<<31|\na)>>>0;else{var c=Math.floor(Math.log(a)/Math.LN2);a*=Math.pow(2,-c);a=Math.round(a*jspb.BinaryConstants.TWO_TO_23);16777216<=a&&++c;jspb.utils.split64High=0;jspb.utils.split64Low=(b<<31|c+127<<23|a&8388607)>>>0}};\njspb.utils.splitFloat64=function(a){var b=0>a?1:0;a=b?-a:a;if(0===a)jspb.utils.split64High=0<1/a?0:2147483648,jspb.utils.split64Low=0;else if(isNaN(a))jspb.utils.split64High=2147483647,jspb.utils.split64Low=4294967295;else if(a>jspb.BinaryConstants.FLOAT64_MAX)jspb.utils.split64High=(b<<31|2146435072)>>>0,jspb.utils.split64Low=0;else if(a<jspb.BinaryConstants.FLOAT64_MIN){var c=a/Math.pow(2,-1074);a=c/jspb.BinaryConstants.TWO_TO_32;jspb.utils.split64High=(b<<31|a)>>>0;jspb.utils.split64Low=c>>>0}else{c=\na;var d=0;if(2<=c)for(;2<=c&&1023>d;)d++,c/=2;else for(;1>c&&-1022<d;)c*=2,d--;c=a*Math.pow(2,-d);a=c*jspb.BinaryConstants.TWO_TO_20&1048575;c=c*jspb.BinaryConstants.TWO_TO_52>>>0;jspb.utils.split64High=(b<<31|d+1023<<20|a)>>>0;jspb.utils.split64Low=c}};\njspb.utils.splitHash64=function(a){var b=a.charCodeAt(0),c=a.charCodeAt(1),d=a.charCodeAt(2),e=a.charCodeAt(3),f=a.charCodeAt(4),g=a.charCodeAt(5),h=a.charCodeAt(6);a=a.charCodeAt(7);jspb.utils.split64Low=b+(c<<8)+(d<<16)+(e<<24)>>>0;jspb.utils.split64High=f+(g<<8)+(h<<16)+(a<<24)>>>0};jspb.utils.joinUint64=function(a,b){return b*jspb.BinaryConstants.TWO_TO_32+(a>>>0)};\njspb.utils.joinInt64=function(a,b){var c=b&2147483648;c&&(a=~a+1>>>0,b=~b>>>0,0==a&&(b=b+1>>>0));a=jspb.utils.joinUint64(a,b);return c?-a:a};jspb.utils.toZigzag64=function(a,b,c){var d=b>>31;return c(a<<1^d,(b<<1|a>>>31)^d)};jspb.utils.joinZigzag64=function(a,b){return jspb.utils.fromZigzag64(a,b,jspb.utils.joinInt64)};jspb.utils.fromZigzag64=function(a,b,c){var d=-(a&1);return c((a>>>1|b<<31)^d,b>>>1^d)};\njspb.utils.joinFloat32=function(a,b){b=2*(a>>31)+1;var c=a>>>23&255;a&=8388607;return 255==c?a?NaN:Infinity*b:0==c?b*Math.pow(2,-149)*a:b*Math.pow(2,c-150)*(a+Math.pow(2,23))};jspb.utils.joinFloat64=function(a,b){var c=2*(b>>31)+1,d=b>>>20&2047;a=jspb.BinaryConstants.TWO_TO_32*(b&1048575)+a;return 2047==d?a?NaN:Infinity*c:0==d?c*Math.pow(2,-1074)*a:c*Math.pow(2,d-1075)*(a+jspb.BinaryConstants.TWO_TO_52)};\njspb.utils.joinHash64=function(a,b){return String.fromCharCode(a>>>0&255,a>>>8&255,a>>>16&255,a>>>24&255,b>>>0&255,b>>>8&255,b>>>16&255,b>>>24&255)};jspb.utils.DIGITS=\"0123456789abcdef\".split(\"\");jspb.utils.ZERO_CHAR_CODE_=48;jspb.utils.A_CHAR_CODE_=97;\njspb.utils.joinUnsignedDecimalString=function(a,b){function c(a,b){a=a?String(a):\"\";return b?\"0000000\".slice(a.length)+a:a}if(2097151>=b)return\"\"+jspb.utils.joinUint64(a,b);var d=(a>>>24|b<<8)>>>0&16777215;b=b>>16&65535;a=(a&16777215)+6777216*d+6710656*b;d+=8147497*b;b*=2;1E7<=a&&(d+=Math.floor(a/1E7),a%=1E7);1E7<=d&&(b+=Math.floor(d/1E7),d%=1E7);return c(b,0)+c(d,b)+c(a,1)};\njspb.utils.joinSignedDecimalString=function(a,b){var c=b&2147483648;c&&(a=~a+1>>>0,b=~b+(0==a?1:0)>>>0);a=jspb.utils.joinUnsignedDecimalString(a,b);return c?\"-\"+a:a};jspb.utils.hash64ToDecimalString=function(a,b){jspb.utils.splitHash64(a);a=jspb.utils.split64Low;var c=jspb.utils.split64High;return b?jspb.utils.joinSignedDecimalString(a,c):jspb.utils.joinUnsignedDecimalString(a,c)};\njspb.utils.hash64ArrayToDecimalStrings=function(a,b){for(var c=Array(a.length),d=0;d<a.length;d++)c[d]=jspb.utils.hash64ToDecimalString(a[d],b);return c};\njspb.utils.decimalStringToHash64=function(a){function b(a,b){for(var c=0;8>c&&(1!==a||0<b);c++)b=a*e[c]+b,e[c]=b&255,b>>>=8}function c(){for(var a=0;8>a;a++)e[a]=~e[a]&255}goog.asserts.assert(0<a.length);var d=!1;\"-\"===a[0]&&(d=!0,a=a.slice(1));for(var e=[0,0,0,0,0,0,0,0],f=0;f<a.length;f++)b(10,a.charCodeAt(f)-jspb.utils.ZERO_CHAR_CODE_);d&&(c(),b(1,1));return goog.crypt.byteArrayToString(e)};jspb.utils.splitDecimalString=function(a){jspb.utils.splitHash64(jspb.utils.decimalStringToHash64(a))};\njspb.utils.toHexDigit_=function(a){return String.fromCharCode(10>a?jspb.utils.ZERO_CHAR_CODE_+a:jspb.utils.A_CHAR_CODE_-10+a)};jspb.utils.fromHexCharCode_=function(a){return a>=jspb.utils.A_CHAR_CODE_?a-jspb.utils.A_CHAR_CODE_+10:a-jspb.utils.ZERO_CHAR_CODE_};jspb.utils.hash64ToHexString=function(a){var b=Array(18);b[0]=\"0\";b[1]=\"x\";for(var c=0;8>c;c++){var d=a.charCodeAt(7-c);b[2*c+2]=jspb.utils.toHexDigit_(d>>4);b[2*c+3]=jspb.utils.toHexDigit_(d&15)}return b.join(\"\")};\njspb.utils.hexStringToHash64=function(a){a=a.toLowerCase();goog.asserts.assert(18==a.length);goog.asserts.assert(\"0\"==a[0]);goog.asserts.assert(\"x\"==a[1]);for(var b=\"\",c=0;8>c;c++){var d=jspb.utils.fromHexCharCode_(a.charCodeAt(2*c+2)),e=jspb.utils.fromHexCharCode_(a.charCodeAt(2*c+3));b=String.fromCharCode(16*d+e)+b}return b};\njspb.utils.hash64ToNumber=function(a,b){jspb.utils.splitHash64(a);a=jspb.utils.split64Low;var c=jspb.utils.split64High;return b?jspb.utils.joinInt64(a,c):jspb.utils.joinUint64(a,c)};jspb.utils.numberToHash64=function(a){jspb.utils.splitInt64(a);return jspb.utils.joinHash64(jspb.utils.split64Low,jspb.utils.split64High)};jspb.utils.countVarints=function(a,b,c){for(var d=0,e=b;e<c;e++)d+=a[e]>>7;return c-b-d};\njspb.utils.countVarintFields=function(a,b,c,d){var e=0;d=8*d+jspb.BinaryConstants.WireType.VARINT;if(128>d)for(;b<c&&a[b++]==d;)for(e++;;){var f=a[b++];if(0==(f&128))break}else for(;b<c;){for(f=d;128<f;){if(a[b]!=(f&127|128))return e;b++;f>>=7}if(a[b++]!=f)break;for(e++;f=a[b++],0!=(f&128););}return e};jspb.utils.countFixedFields_=function(a,b,c,d,e){var f=0;if(128>d)for(;b<c&&a[b++]==d;)f++,b+=e;else for(;b<c;){for(var g=d;128<g;){if(a[b++]!=(g&127|128))return f;g>>=7}if(a[b++]!=g)break;f++;b+=e}return f};\njspb.utils.countFixed32Fields=function(a,b,c,d){return jspb.utils.countFixedFields_(a,b,c,8*d+jspb.BinaryConstants.WireType.FIXED32,4)};jspb.utils.countFixed64Fields=function(a,b,c,d){return jspb.utils.countFixedFields_(a,b,c,8*d+jspb.BinaryConstants.WireType.FIXED64,8)};\njspb.utils.countDelimitedFields=function(a,b,c,d){var e=0;for(d=8*d+jspb.BinaryConstants.WireType.DELIMITED;b<c;){for(var f=d;128<f;){if(a[b++]!=(f&127|128))return e;f>>=7}if(a[b++]!=f)break;e++;for(var g=0,h=1;f=a[b++],g+=(f&127)*h,h*=128,0!=(f&128););b+=g}return e};jspb.utils.debugBytesToTextFormat=function(a){var b='\"';if(a){a=jspb.utils.byteSourceToUint8Array(a);for(var c=0;c<a.length;c++)b+=\"\\\\x\",16>a[c]&&(b+=\"0\"),b+=a[c].toString(16)}return b+'\"'};\njspb.utils.debugScalarToTextFormat=function(a){return\"string\"===typeof a?goog.string.quote(a):a.toString()};jspb.utils.stringToByteArray=function(a){for(var b=new Uint8Array(a.length),c=0;c<a.length;c++){var d=a.charCodeAt(c);if(255<d)throw Error(\"Conversion error: string contains codepoint outside of byte range\");b[c]=d}return b};\njspb.utils.byteSourceToUint8Array=function(a){if(a.constructor===Uint8Array)return a;if(a.constructor===ArrayBuffer||\"undefined\"!=typeof Buffer&&a.constructor===Buffer||a.constructor===Array)return new Uint8Array(a);if(a.constructor===String)return goog.crypt.base64.decodeStringToUint8Array(a);goog.asserts.fail(\"Type not convertible to Uint8Array.\");return new Uint8Array(0)};jspb.BinaryDecoder=function(a,b,c){this.bytes_=null;this.cursor_=this.end_=this.start_=0;this.error_=!1;a&&this.setBlock(a,b,c)};jspb.BinaryDecoder.instanceCache_=[];jspb.BinaryDecoder.alloc=function(a,b,c){if(jspb.BinaryDecoder.instanceCache_.length){var d=jspb.BinaryDecoder.instanceCache_.pop();a&&d.setBlock(a,b,c);return d}return new jspb.BinaryDecoder(a,b,c)};jspb.BinaryDecoder.prototype.free=function(){this.clear();100>jspb.BinaryDecoder.instanceCache_.length&&jspb.BinaryDecoder.instanceCache_.push(this)};\njspb.BinaryDecoder.prototype.clone=function(){return jspb.BinaryDecoder.alloc(this.bytes_,this.start_,this.end_-this.start_)};jspb.BinaryDecoder.prototype.clear=function(){this.bytes_=null;this.cursor_=this.end_=this.start_=0;this.error_=!1};jspb.BinaryDecoder.prototype.getBuffer=function(){return this.bytes_};\njspb.BinaryDecoder.prototype.setBlock=function(a,b,c){this.bytes_=jspb.utils.byteSourceToUint8Array(a);this.start_=void 0!==b?b:0;this.end_=void 0!==c?this.start_+c:this.bytes_.length;this.cursor_=this.start_};jspb.BinaryDecoder.prototype.getEnd=function(){return this.end_};jspb.BinaryDecoder.prototype.setEnd=function(a){this.end_=a};jspb.BinaryDecoder.prototype.reset=function(){this.cursor_=this.start_};jspb.BinaryDecoder.prototype.getCursor=function(){return this.cursor_};\njspb.BinaryDecoder.prototype.setCursor=function(a){this.cursor_=a};jspb.BinaryDecoder.prototype.advance=function(a){this.cursor_+=a;goog.asserts.assert(this.cursor_<=this.end_)};jspb.BinaryDecoder.prototype.atEnd=function(){return this.cursor_==this.end_};jspb.BinaryDecoder.prototype.pastEnd=function(){return this.cursor_>this.end_};jspb.BinaryDecoder.prototype.getError=function(){return this.error_||0>this.cursor_||this.cursor_>this.end_};\njspb.BinaryDecoder.prototype.readSplitVarint64=function(a){for(var b=128,c=0,d=0,e=0;4>e&&128<=b;e++)b=this.bytes_[this.cursor_++],c|=(b&127)<<7*e;128<=b&&(b=this.bytes_[this.cursor_++],c|=(b&127)<<28,d|=(b&127)>>4);if(128<=b)for(e=0;5>e&&128<=b;e++)b=this.bytes_[this.cursor_++],d|=(b&127)<<7*e+3;if(128>b)return a(c>>>0,d>>>0);goog.asserts.fail(\"Failed to read varint, encoding is invalid.\");this.error_=!0};\njspb.BinaryDecoder.prototype.readSplitZigzagVarint64=function(a){return this.readSplitVarint64(function(b,c){return jspb.utils.fromZigzag64(b,c,a)})};jspb.BinaryDecoder.prototype.readSplitFixed64=function(a){var b=this.bytes_,c=this.cursor_;this.cursor_+=8;for(var d=0,e=0,f=c+7;f>=c;f--)d=d<<8|b[f],e=e<<8|b[f+4];return a(d,e)};jspb.BinaryDecoder.prototype.skipVarint=function(){for(;this.bytes_[this.cursor_]&128;)this.cursor_++;this.cursor_++};\njspb.BinaryDecoder.prototype.unskipVarint=function(a){for(;128<a;)this.cursor_--,a>>>=7;this.cursor_--};\njspb.BinaryDecoder.prototype.readUnsignedVarint32=function(){var a=this.bytes_;var b=a[this.cursor_+0];var c=b&127;if(128>b)return this.cursor_+=1,goog.asserts.assert(this.cursor_<=this.end_),c;b=a[this.cursor_+1];c|=(b&127)<<7;if(128>b)return this.cursor_+=2,goog.asserts.assert(this.cursor_<=this.end_),c;b=a[this.cursor_+2];c|=(b&127)<<14;if(128>b)return this.cursor_+=3,goog.asserts.assert(this.cursor_<=this.end_),c;b=a[this.cursor_+3];c|=(b&127)<<21;if(128>b)return this.cursor_+=4,goog.asserts.assert(this.cursor_<=\nthis.end_),c;b=a[this.cursor_+4];c|=(b&15)<<28;if(128>b)return this.cursor_+=5,goog.asserts.assert(this.cursor_<=this.end_),c>>>0;this.cursor_+=5;128<=a[this.cursor_++]&&128<=a[this.cursor_++]&&128<=a[this.cursor_++]&&128<=a[this.cursor_++]&&128<=a[this.cursor_++]&&goog.asserts.assert(!1);goog.asserts.assert(this.cursor_<=this.end_);return c};jspb.BinaryDecoder.prototype.readSignedVarint32=jspb.BinaryDecoder.prototype.readUnsignedVarint32;jspb.BinaryDecoder.prototype.readUnsignedVarint32String=function(){return this.readUnsignedVarint32().toString()};\njspb.BinaryDecoder.prototype.readSignedVarint32String=function(){return this.readSignedVarint32().toString()};jspb.BinaryDecoder.prototype.readZigzagVarint32=function(){var a=this.readUnsignedVarint32();return a>>>1^-(a&1)};jspb.BinaryDecoder.prototype.readUnsignedVarint64=function(){return this.readSplitVarint64(jspb.utils.joinUint64)};jspb.BinaryDecoder.prototype.readUnsignedVarint64String=function(){return this.readSplitVarint64(jspb.utils.joinUnsignedDecimalString)};\njspb.BinaryDecoder.prototype.readSignedVarint64=function(){return this.readSplitVarint64(jspb.utils.joinInt64)};jspb.BinaryDecoder.prototype.readSignedVarint64String=function(){return this.readSplitVarint64(jspb.utils.joinSignedDecimalString)};jspb.BinaryDecoder.prototype.readZigzagVarint64=function(){return this.readSplitVarint64(jspb.utils.joinZigzag64)};jspb.BinaryDecoder.prototype.readZigzagVarintHash64=function(){return this.readSplitZigzagVarint64(jspb.utils.joinHash64)};\njspb.BinaryDecoder.prototype.readZigzagVarint64String=function(){return this.readSplitZigzagVarint64(jspb.utils.joinSignedDecimalString)};jspb.BinaryDecoder.prototype.readUint8=function(){var a=this.bytes_[this.cursor_+0];this.cursor_+=1;goog.asserts.assert(this.cursor_<=this.end_);return a};jspb.BinaryDecoder.prototype.readUint16=function(){var a=this.bytes_[this.cursor_+0],b=this.bytes_[this.cursor_+1];this.cursor_+=2;goog.asserts.assert(this.cursor_<=this.end_);return a<<0|b<<8};\njspb.BinaryDecoder.prototype.readUint32=function(){var a=this.bytes_[this.cursor_+0],b=this.bytes_[this.cursor_+1],c=this.bytes_[this.cursor_+2],d=this.bytes_[this.cursor_+3];this.cursor_+=4;goog.asserts.assert(this.cursor_<=this.end_);return(a<<0|b<<8|c<<16|d<<24)>>>0};jspb.BinaryDecoder.prototype.readUint64=function(){var a=this.readUint32(),b=this.readUint32();return jspb.utils.joinUint64(a,b)};\njspb.BinaryDecoder.prototype.readUint64String=function(){var a=this.readUint32(),b=this.readUint32();return jspb.utils.joinUnsignedDecimalString(a,b)};jspb.BinaryDecoder.prototype.readInt8=function(){var a=this.bytes_[this.cursor_+0];this.cursor_+=1;goog.asserts.assert(this.cursor_<=this.end_);return a<<24>>24};\njspb.BinaryDecoder.prototype.readInt16=function(){var a=this.bytes_[this.cursor_+0],b=this.bytes_[this.cursor_+1];this.cursor_+=2;goog.asserts.assert(this.cursor_<=this.end_);return(a<<0|b<<8)<<16>>16};jspb.BinaryDecoder.prototype.readInt32=function(){var a=this.bytes_[this.cursor_+0],b=this.bytes_[this.cursor_+1],c=this.bytes_[this.cursor_+2],d=this.bytes_[this.cursor_+3];this.cursor_+=4;goog.asserts.assert(this.cursor_<=this.end_);return a<<0|b<<8|c<<16|d<<24};\njspb.BinaryDecoder.prototype.readInt64=function(){var a=this.readUint32(),b=this.readUint32();return jspb.utils.joinInt64(a,b)};jspb.BinaryDecoder.prototype.readInt64String=function(){var a=this.readUint32(),b=this.readUint32();return jspb.utils.joinSignedDecimalString(a,b)};jspb.BinaryDecoder.prototype.readFloat=function(){var a=this.readUint32();return jspb.utils.joinFloat32(a,0)};\njspb.BinaryDecoder.prototype.readDouble=function(){var a=this.readUint32(),b=this.readUint32();return jspb.utils.joinFloat64(a,b)};jspb.BinaryDecoder.prototype.readBool=function(){return!!this.bytes_[this.cursor_++]};jspb.BinaryDecoder.prototype.readEnum=function(){return this.readSignedVarint32()};\njspb.BinaryDecoder.prototype.readString=function(a){var b=this.bytes_,c=this.cursor_;a=c+a;for(var d=[],e=\"\";c<a;){var f=b[c++];if(128>f)d.push(f);else if(192>f)continue;else if(224>f){var g=b[c++];d.push((f&31)<<6|g&63)}else if(240>f){g=b[c++];var h=b[c++];d.push((f&15)<<12|(g&63)<<6|h&63)}else if(248>f){g=b[c++];h=b[c++];var k=b[c++];f=(f&7)<<18|(g&63)<<12|(h&63)<<6|k&63;f-=65536;d.push((f>>10&1023)+55296,(f&1023)+56320)}8192<=d.length&&(e+=String.fromCharCode.apply(null,d),d.length=0)}e+=goog.crypt.byteArrayToString(d);\nthis.cursor_=c;return e};jspb.BinaryDecoder.prototype.readStringWithLength=function(){var a=this.readUnsignedVarint32();return this.readString(a)};jspb.BinaryDecoder.prototype.readBytes=function(a){if(0>a||this.cursor_+a>this.bytes_.length)return this.error_=!0,goog.asserts.fail(\"Invalid byte length!\"),new Uint8Array(0);var b=this.bytes_.subarray(this.cursor_,this.cursor_+a);this.cursor_+=a;goog.asserts.assert(this.cursor_<=this.end_);return b};jspb.BinaryDecoder.prototype.readVarintHash64=function(){return this.readSplitVarint64(jspb.utils.joinHash64)};\njspb.BinaryDecoder.prototype.readFixedHash64=function(){var a=this.bytes_,b=this.cursor_,c=a[b+0],d=a[b+1],e=a[b+2],f=a[b+3],g=a[b+4],h=a[b+5],k=a[b+6];a=a[b+7];this.cursor_+=8;return String.fromCharCode(c,d,e,f,g,h,k,a)};jspb.BinaryReader=function(a,b,c){this.decoder_=jspb.BinaryDecoder.alloc(a,b,c);this.fieldCursor_=this.decoder_.getCursor();this.nextField_=jspb.BinaryConstants.INVALID_FIELD_NUMBER;this.nextWireType_=jspb.BinaryConstants.WireType.INVALID;this.error_=!1;this.readCallbacks_=null};jspb.BinaryReader.instanceCache_=[];\njspb.BinaryReader.alloc=function(a,b,c){if(jspb.BinaryReader.instanceCache_.length){var d=jspb.BinaryReader.instanceCache_.pop();a&&d.decoder_.setBlock(a,b,c);return d}return new jspb.BinaryReader(a,b,c)};jspb.BinaryReader.prototype.alloc=jspb.BinaryReader.alloc;\njspb.BinaryReader.prototype.free=function(){this.decoder_.clear();this.nextField_=jspb.BinaryConstants.INVALID_FIELD_NUMBER;this.nextWireType_=jspb.BinaryConstants.WireType.INVALID;this.error_=!1;this.readCallbacks_=null;100>jspb.BinaryReader.instanceCache_.length&&jspb.BinaryReader.instanceCache_.push(this)};jspb.BinaryReader.prototype.getFieldCursor=function(){return this.fieldCursor_};jspb.BinaryReader.prototype.getCursor=function(){return this.decoder_.getCursor()};\njspb.BinaryReader.prototype.getBuffer=function(){return this.decoder_.getBuffer()};jspb.BinaryReader.prototype.getFieldNumber=function(){return this.nextField_};jspb.BinaryReader.prototype.getWireType=function(){return this.nextWireType_};jspb.BinaryReader.prototype.isDelimited=function(){return this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED};jspb.BinaryReader.prototype.isEndGroup=function(){return this.nextWireType_==jspb.BinaryConstants.WireType.END_GROUP};\njspb.BinaryReader.prototype.getError=function(){return this.error_||this.decoder_.getError()};jspb.BinaryReader.prototype.setBlock=function(a,b,c){this.decoder_.setBlock(a,b,c);this.nextField_=jspb.BinaryConstants.INVALID_FIELD_NUMBER;this.nextWireType_=jspb.BinaryConstants.WireType.INVALID};jspb.BinaryReader.prototype.reset=function(){this.decoder_.reset();this.nextField_=jspb.BinaryConstants.INVALID_FIELD_NUMBER;this.nextWireType_=jspb.BinaryConstants.WireType.INVALID};\njspb.BinaryReader.prototype.advance=function(a){this.decoder_.advance(a)};\njspb.BinaryReader.prototype.nextField=function(){if(this.decoder_.atEnd())return!1;if(this.getError())return goog.asserts.fail(\"Decoder hit an error\"),!1;this.fieldCursor_=this.decoder_.getCursor();var a=this.decoder_.readUnsignedVarint32(),b=a>>>3;a&=7;if(a!=jspb.BinaryConstants.WireType.VARINT&&a!=jspb.BinaryConstants.WireType.FIXED32&&a!=jspb.BinaryConstants.WireType.FIXED64&&a!=jspb.BinaryConstants.WireType.DELIMITED&&a!=jspb.BinaryConstants.WireType.START_GROUP&&a!=jspb.BinaryConstants.WireType.END_GROUP)return goog.asserts.fail(\"Invalid wire type: %s (at position %s)\",\na,this.fieldCursor_),this.error_=!0,!1;this.nextField_=b;this.nextWireType_=a;return!0};jspb.BinaryReader.prototype.unskipHeader=function(){this.decoder_.unskipVarint(this.nextField_<<3|this.nextWireType_)};jspb.BinaryReader.prototype.skipMatchingFields=function(){var a=this.nextField_;for(this.unskipHeader();this.nextField()&&this.getFieldNumber()==a;)this.skipField();this.decoder_.atEnd()||this.unskipHeader()};\njspb.BinaryReader.prototype.skipVarintField=function(){this.nextWireType_!=jspb.BinaryConstants.WireType.VARINT?(goog.asserts.fail(\"Invalid wire type for skipVarintField\"),this.skipField()):this.decoder_.skipVarint()};jspb.BinaryReader.prototype.skipDelimitedField=function(){if(this.nextWireType_!=jspb.BinaryConstants.WireType.DELIMITED)goog.asserts.fail(\"Invalid wire type for skipDelimitedField\"),this.skipField();else{var a=this.decoder_.readUnsignedVarint32();this.decoder_.advance(a)}};\njspb.BinaryReader.prototype.skipFixed32Field=function(){this.nextWireType_!=jspb.BinaryConstants.WireType.FIXED32?(goog.asserts.fail(\"Invalid wire type for skipFixed32Field\"),this.skipField()):this.decoder_.advance(4)};jspb.BinaryReader.prototype.skipFixed64Field=function(){this.nextWireType_!=jspb.BinaryConstants.WireType.FIXED64?(goog.asserts.fail(\"Invalid wire type for skipFixed64Field\"),this.skipField()):this.decoder_.advance(8)};\njspb.BinaryReader.prototype.skipGroup=function(){var a=this.nextField_;do{if(!this.nextField()){goog.asserts.fail(\"Unmatched start-group tag: stream EOF\");this.error_=!0;break}if(this.nextWireType_==jspb.BinaryConstants.WireType.END_GROUP){this.nextField_!=a&&(goog.asserts.fail(\"Unmatched end-group tag\"),this.error_=!0);break}this.skipField()}while(1)};\njspb.BinaryReader.prototype.skipField=function(){switch(this.nextWireType_){case jspb.BinaryConstants.WireType.VARINT:this.skipVarintField();break;case jspb.BinaryConstants.WireType.FIXED64:this.skipFixed64Field();break;case jspb.BinaryConstants.WireType.DELIMITED:this.skipDelimitedField();break;case jspb.BinaryConstants.WireType.FIXED32:this.skipFixed32Field();break;case jspb.BinaryConstants.WireType.START_GROUP:this.skipGroup();break;default:goog.asserts.fail(\"Invalid wire encoding for field.\")}};\njspb.BinaryReader.prototype.registerReadCallback=function(a,b){null===this.readCallbacks_&&(this.readCallbacks_={});goog.asserts.assert(!this.readCallbacks_[a]);this.readCallbacks_[a]=b};jspb.BinaryReader.prototype.runReadCallback=function(a){goog.asserts.assert(null!==this.readCallbacks_);a=this.readCallbacks_[a];goog.asserts.assert(a);return a(this)};\njspb.BinaryReader.prototype.readAny=function(a){this.nextWireType_=jspb.BinaryConstants.FieldTypeToWireType(a);var b=jspb.BinaryConstants.FieldType;switch(a){case b.DOUBLE:return this.readDouble();case b.FLOAT:return this.readFloat();case b.INT64:return this.readInt64();case b.UINT64:return this.readUint64();case b.INT32:return this.readInt32();case b.FIXED64:return this.readFixed64();case b.FIXED32:return this.readFixed32();case b.BOOL:return this.readBool();case b.STRING:return this.readString();\ncase b.GROUP:goog.asserts.fail(\"Group field type not supported in readAny()\");case b.MESSAGE:goog.asserts.fail(\"Message field type not supported in readAny()\");case b.BYTES:return this.readBytes();case b.UINT32:return this.readUint32();case b.ENUM:return this.readEnum();case b.SFIXED32:return this.readSfixed32();case b.SFIXED64:return this.readSfixed64();case b.SINT32:return this.readSint32();case b.SINT64:return this.readSint64();case b.FHASH64:return this.readFixedHash64();case b.VHASH64:return this.readVarintHash64();\ndefault:goog.asserts.fail(\"Invalid field type in readAny()\")}return 0};jspb.BinaryReader.prototype.readMessage=function(a,b){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var c=this.decoder_.getEnd(),d=this.decoder_.readUnsignedVarint32();d=this.decoder_.getCursor()+d;this.decoder_.setEnd(d);b(a,this);this.decoder_.setCursor(d);this.decoder_.setEnd(c)};\njspb.BinaryReader.prototype.readGroup=function(a,b,c){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.START_GROUP);goog.asserts.assert(this.nextField_==a);c(b,this);this.error_||this.nextWireType_==jspb.BinaryConstants.WireType.END_GROUP||(goog.asserts.fail(\"Group submessage did not end with an END_GROUP tag\"),this.error_=!0)};\njspb.BinaryReader.prototype.getFieldDecoder=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var a=this.decoder_.readUnsignedVarint32(),b=this.decoder_.getCursor(),c=b+a;a=jspb.BinaryDecoder.alloc(this.decoder_.getBuffer(),b,a);this.decoder_.setCursor(c);return a};jspb.BinaryReader.prototype.readInt32=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readSignedVarint32()};\njspb.BinaryReader.prototype.readInt32String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readSignedVarint32String()};jspb.BinaryReader.prototype.readInt64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readSignedVarint64()};jspb.BinaryReader.prototype.readInt64String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readSignedVarint64String()};\njspb.BinaryReader.prototype.readUint32=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readUnsignedVarint32()};jspb.BinaryReader.prototype.readUint32String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readUnsignedVarint32String()};jspb.BinaryReader.prototype.readUint64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readUnsignedVarint64()};\njspb.BinaryReader.prototype.readUint64String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readUnsignedVarint64String()};jspb.BinaryReader.prototype.readSint32=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readZigzagVarint32()};jspb.BinaryReader.prototype.readSint64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readZigzagVarint64()};\njspb.BinaryReader.prototype.readSint64String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readZigzagVarint64String()};jspb.BinaryReader.prototype.readFixed32=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED32);return this.decoder_.readUint32()};jspb.BinaryReader.prototype.readFixed64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64);return this.decoder_.readUint64()};\njspb.BinaryReader.prototype.readFixed64String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64);return this.decoder_.readUint64String()};jspb.BinaryReader.prototype.readSfixed32=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED32);return this.decoder_.readInt32()};jspb.BinaryReader.prototype.readSfixed32String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED32);return this.decoder_.readInt32().toString()};\njspb.BinaryReader.prototype.readSfixed64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64);return this.decoder_.readInt64()};jspb.BinaryReader.prototype.readSfixed64String=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64);return this.decoder_.readInt64String()};jspb.BinaryReader.prototype.readFloat=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED32);return this.decoder_.readFloat()};\njspb.BinaryReader.prototype.readDouble=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64);return this.decoder_.readDouble()};jspb.BinaryReader.prototype.readBool=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return!!this.decoder_.readUnsignedVarint32()};jspb.BinaryReader.prototype.readEnum=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readSignedVarint64()};\njspb.BinaryReader.prototype.readString=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var a=this.decoder_.readUnsignedVarint32();return this.decoder_.readString(a)};jspb.BinaryReader.prototype.readBytes=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var a=this.decoder_.readUnsignedVarint32();return this.decoder_.readBytes(a)};\njspb.BinaryReader.prototype.readVarintHash64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readVarintHash64()};jspb.BinaryReader.prototype.readSintHash64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readZigzagVarintHash64()};jspb.BinaryReader.prototype.readSplitVarint64=function(a){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readSplitVarint64(a)};\njspb.BinaryReader.prototype.readSplitZigzagVarint64=function(a){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.VARINT);return this.decoder_.readSplitVarint64(function(b,c){return jspb.utils.fromZigzag64(b,c,a)})};jspb.BinaryReader.prototype.readFixedHash64=function(){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64);return this.decoder_.readFixedHash64()};\njspb.BinaryReader.prototype.readSplitFixed64=function(a){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.FIXED64);return this.decoder_.readSplitFixed64(a)};jspb.BinaryReader.prototype.readPackedField_=function(a){goog.asserts.assert(this.nextWireType_==jspb.BinaryConstants.WireType.DELIMITED);var b=this.decoder_.readUnsignedVarint32();b=this.decoder_.getCursor()+b;for(var c=[];this.decoder_.getCursor()<b;)c.push(a.call(this.decoder_));return c};\njspb.BinaryReader.prototype.readPackedInt32=function(){return this.readPackedField_(this.decoder_.readSignedVarint32)};jspb.BinaryReader.prototype.readPackedInt32String=function(){return this.readPackedField_(this.decoder_.readSignedVarint32String)};jspb.BinaryReader.prototype.readPackedInt64=function(){return this.readPackedField_(this.decoder_.readSignedVarint64)};jspb.BinaryReader.prototype.readPackedInt64String=function(){return this.readPackedField_(this.decoder_.readSignedVarint64String)};\njspb.BinaryReader.prototype.readPackedUint32=function(){return this.readPackedField_(this.decoder_.readUnsignedVarint32)};jspb.BinaryReader.prototype.readPackedUint32String=function(){return this.readPackedField_(this.decoder_.readUnsignedVarint32String)};jspb.BinaryReader.prototype.readPackedUint64=function(){return this.readPackedField_(this.decoder_.readUnsignedVarint64)};jspb.BinaryReader.prototype.readPackedUint64String=function(){return this.readPackedField_(this.decoder_.readUnsignedVarint64String)};\njspb.BinaryReader.prototype.readPackedSint32=function(){return this.readPackedField_(this.decoder_.readZigzagVarint32)};jspb.BinaryReader.prototype.readPackedSint64=function(){return this.readPackedField_(this.decoder_.readZigzagVarint64)};jspb.BinaryReader.prototype.readPackedSint64String=function(){return this.readPackedField_(this.decoder_.readZigzagVarint64String)};jspb.BinaryReader.prototype.readPackedFixed32=function(){return this.readPackedField_(this.decoder_.readUint32)};\njspb.BinaryReader.prototype.readPackedFixed64=function(){return this.readPackedField_(this.decoder_.readUint64)};jspb.BinaryReader.prototype.readPackedFixed64String=function(){return this.readPackedField_(this.decoder_.readUint64String)};jspb.BinaryReader.prototype.readPackedSfixed32=function(){return this.readPackedField_(this.decoder_.readInt32)};jspb.BinaryReader.prototype.readPackedSfixed64=function(){return this.readPackedField_(this.decoder_.readInt64)};\njspb.BinaryReader.prototype.readPackedSfixed64String=function(){return this.readPackedField_(this.decoder_.readInt64String)};jspb.BinaryReader.prototype.readPackedFloat=function(){return this.readPackedField_(this.decoder_.readFloat)};jspb.BinaryReader.prototype.readPackedDouble=function(){return this.readPackedField_(this.decoder_.readDouble)};jspb.BinaryReader.prototype.readPackedBool=function(){return this.readPackedField_(this.decoder_.readBool)};jspb.BinaryReader.prototype.readPackedEnum=function(){return this.readPackedField_(this.decoder_.readEnum)};\njspb.BinaryReader.prototype.readPackedVarintHash64=function(){return this.readPackedField_(this.decoder_.readVarintHash64)};jspb.BinaryReader.prototype.readPackedFixedHash64=function(){return this.readPackedField_(this.decoder_.readFixedHash64)};jspb.BinaryEncoder=function(){this.buffer_=[]};jspb.BinaryEncoder.prototype.length=function(){return this.buffer_.length};jspb.BinaryEncoder.prototype.end=function(){var a=this.buffer_;this.buffer_=[];return a};\njspb.BinaryEncoder.prototype.writeSplitVarint64=function(a,b){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(b==Math.floor(b));goog.asserts.assert(0<=a&&a<jspb.BinaryConstants.TWO_TO_32);for(goog.asserts.assert(0<=b&&b<jspb.BinaryConstants.TWO_TO_32);0<b||127<a;)this.buffer_.push(a&127|128),a=(a>>>7|b<<25)>>>0,b>>>=7;this.buffer_.push(a)};\njspb.BinaryEncoder.prototype.writeSplitFixed64=function(a,b){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(b==Math.floor(b));goog.asserts.assert(0<=a&&a<jspb.BinaryConstants.TWO_TO_32);goog.asserts.assert(0<=b&&b<jspb.BinaryConstants.TWO_TO_32);this.writeUint32(a);this.writeUint32(b)};\njspb.BinaryEncoder.prototype.writeUnsignedVarint32=function(a){goog.asserts.assert(a==Math.floor(a));for(goog.asserts.assert(0<=a&&a<jspb.BinaryConstants.TWO_TO_32);127<a;)this.buffer_.push(a&127|128),a>>>=7;this.buffer_.push(a)};\njspb.BinaryEncoder.prototype.writeSignedVarint32=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(a>=-jspb.BinaryConstants.TWO_TO_31&&a<jspb.BinaryConstants.TWO_TO_31);if(0<=a)this.writeUnsignedVarint32(a);else{for(var b=0;9>b;b++)this.buffer_.push(a&127|128),a>>=7;this.buffer_.push(1)}};\njspb.BinaryEncoder.prototype.writeUnsignedVarint64=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(0<=a&&a<jspb.BinaryConstants.TWO_TO_64);jspb.utils.splitInt64(a);this.writeSplitVarint64(jspb.utils.split64Low,jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeSignedVarint64=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(a>=-jspb.BinaryConstants.TWO_TO_63&&a<jspb.BinaryConstants.TWO_TO_63);jspb.utils.splitInt64(a);this.writeSplitVarint64(jspb.utils.split64Low,jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeZigzagVarint32=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(a>=-jspb.BinaryConstants.TWO_TO_31&&a<jspb.BinaryConstants.TWO_TO_31);this.writeUnsignedVarint32((a<<1^a>>31)>>>0)};jspb.BinaryEncoder.prototype.writeZigzagVarint64=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(a>=-jspb.BinaryConstants.TWO_TO_63&&a<jspb.BinaryConstants.TWO_TO_63);jspb.utils.splitZigzag64(a);this.writeSplitVarint64(jspb.utils.split64Low,jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeZigzagVarint64String=function(a){this.writeZigzagVarintHash64(jspb.utils.decimalStringToHash64(a))};jspb.BinaryEncoder.prototype.writeZigzagVarintHash64=function(a){var b=this;jspb.utils.splitHash64(a);jspb.utils.toZigzag64(jspb.utils.split64Low,jspb.utils.split64High,function(a,d){b.writeSplitVarint64(a>>>0,d>>>0)})};\njspb.BinaryEncoder.prototype.writeUint8=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(0<=a&&256>a);this.buffer_.push(a>>>0&255)};jspb.BinaryEncoder.prototype.writeUint16=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(0<=a&&65536>a);this.buffer_.push(a>>>0&255);this.buffer_.push(a>>>8&255)};\njspb.BinaryEncoder.prototype.writeUint32=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(0<=a&&a<jspb.BinaryConstants.TWO_TO_32);this.buffer_.push(a>>>0&255);this.buffer_.push(a>>>8&255);this.buffer_.push(a>>>16&255);this.buffer_.push(a>>>24&255)};jspb.BinaryEncoder.prototype.writeUint64=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(0<=a&&a<jspb.BinaryConstants.TWO_TO_64);jspb.utils.splitUint64(a);this.writeUint32(jspb.utils.split64Low);this.writeUint32(jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeInt8=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(-128<=a&&128>a);this.buffer_.push(a>>>0&255)};jspb.BinaryEncoder.prototype.writeInt16=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(-32768<=a&&32768>a);this.buffer_.push(a>>>0&255);this.buffer_.push(a>>>8&255)};\njspb.BinaryEncoder.prototype.writeInt32=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(a>=-jspb.BinaryConstants.TWO_TO_31&&a<jspb.BinaryConstants.TWO_TO_31);this.buffer_.push(a>>>0&255);this.buffer_.push(a>>>8&255);this.buffer_.push(a>>>16&255);this.buffer_.push(a>>>24&255)};\njspb.BinaryEncoder.prototype.writeInt64=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(a>=-jspb.BinaryConstants.TWO_TO_63&&a<jspb.BinaryConstants.TWO_TO_63);jspb.utils.splitInt64(a);this.writeSplitFixed64(jspb.utils.split64Low,jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeInt64String=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(+a>=-jspb.BinaryConstants.TWO_TO_63&&+a<jspb.BinaryConstants.TWO_TO_63);jspb.utils.splitHash64(jspb.utils.decimalStringToHash64(a));this.writeSplitFixed64(jspb.utils.split64Low,jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeFloat=function(a){goog.asserts.assert(Infinity===a||-Infinity===a||isNaN(a)||a>=-jspb.BinaryConstants.FLOAT32_MAX&&a<=jspb.BinaryConstants.FLOAT32_MAX);jspb.utils.splitFloat32(a);this.writeUint32(jspb.utils.split64Low)};\njspb.BinaryEncoder.prototype.writeDouble=function(a){goog.asserts.assert(Infinity===a||-Infinity===a||isNaN(a)||a>=-jspb.BinaryConstants.FLOAT64_MAX&&a<=jspb.BinaryConstants.FLOAT64_MAX);jspb.utils.splitFloat64(a);this.writeUint32(jspb.utils.split64Low);this.writeUint32(jspb.utils.split64High)};jspb.BinaryEncoder.prototype.writeBool=function(a){goog.asserts.assert(\"boolean\"===typeof a||\"number\"===typeof a);this.buffer_.push(a?1:0)};\njspb.BinaryEncoder.prototype.writeEnum=function(a){goog.asserts.assert(a==Math.floor(a));goog.asserts.assert(a>=-jspb.BinaryConstants.TWO_TO_31&&a<jspb.BinaryConstants.TWO_TO_31);this.writeSignedVarint32(a)};jspb.BinaryEncoder.prototype.writeBytes=function(a){this.buffer_.push.apply(this.buffer_,a)};jspb.BinaryEncoder.prototype.writeVarintHash64=function(a){jspb.utils.splitHash64(a);this.writeSplitVarint64(jspb.utils.split64Low,jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeFixedHash64=function(a){jspb.utils.splitHash64(a);this.writeUint32(jspb.utils.split64Low);this.writeUint32(jspb.utils.split64High)};\njspb.BinaryEncoder.prototype.writeString=function(a){for(var b=this.buffer_.length,c=0;c<a.length;c++){var d=a.charCodeAt(c);if(128>d)this.buffer_.push(d);else if(2048>d)this.buffer_.push(d>>6|192),this.buffer_.push(d&63|128);else if(65536>d)if(55296<=d&&56319>=d&&c+1<a.length){var e=a.charCodeAt(c+1);56320<=e&&57343>=e&&(d=1024*(d-55296)+e-56320+65536,this.buffer_.push(d>>18|240),this.buffer_.push(d>>12&63|128),this.buffer_.push(d>>6&63|128),this.buffer_.push(d&63|128),c++)}else this.buffer_.push(d>>\n12|224),this.buffer_.push(d>>6&63|128),this.buffer_.push(d&63|128)}return this.buffer_.length-b};jspb.arith={};jspb.arith.UInt64=function(a,b){this.lo=a;this.hi=b};jspb.arith.UInt64.prototype.cmp=function(a){return this.hi<a.hi||this.hi==a.hi&&this.lo<a.lo?-1:this.hi==a.hi&&this.lo==a.lo?0:1};jspb.arith.UInt64.prototype.rightShift=function(){return new jspb.arith.UInt64((this.lo>>>1|(this.hi&1)<<31)>>>0,this.hi>>>1>>>0)};jspb.arith.UInt64.prototype.leftShift=function(){return new jspb.arith.UInt64(this.lo<<1>>>0,(this.hi<<1|this.lo>>>31)>>>0)};\njspb.arith.UInt64.prototype.msb=function(){return!!(this.hi&2147483648)};jspb.arith.UInt64.prototype.lsb=function(){return!!(this.lo&1)};jspb.arith.UInt64.prototype.zero=function(){return 0==this.lo&&0==this.hi};jspb.arith.UInt64.prototype.add=function(a){return new jspb.arith.UInt64((this.lo+a.lo&4294967295)>>>0>>>0,((this.hi+a.hi&4294967295)>>>0)+(4294967296<=this.lo+a.lo?1:0)>>>0)};\njspb.arith.UInt64.prototype.sub=function(a){return new jspb.arith.UInt64((this.lo-a.lo&4294967295)>>>0>>>0,((this.hi-a.hi&4294967295)>>>0)-(0>this.lo-a.lo?1:0)>>>0)};jspb.arith.UInt64.mul32x32=function(a,b){var c=a&65535;a>>>=16;var d=b&65535,e=b>>>16;b=c*d+65536*(c*e&65535)+65536*(a*d&65535);for(c=a*e+(c*e>>>16)+(a*d>>>16);4294967296<=b;)b-=4294967296,c+=1;return new jspb.arith.UInt64(b>>>0,c>>>0)};\njspb.arith.UInt64.prototype.mul=function(a){var b=jspb.arith.UInt64.mul32x32(this.lo,a);a=jspb.arith.UInt64.mul32x32(this.hi,a);a.hi=a.lo;a.lo=0;return b.add(a)};\njspb.arith.UInt64.prototype.div=function(a){if(0==a)return[];var b=new jspb.arith.UInt64(0,0),c=new jspb.arith.UInt64(this.lo,this.hi);a=new jspb.arith.UInt64(a,0);for(var d=new jspb.arith.UInt64(1,0);!a.msb();)a=a.leftShift(),d=d.leftShift();for(;!d.zero();)0>=a.cmp(c)&&(b=b.add(d),c=c.sub(a)),a=a.rightShift(),d=d.rightShift();return[b,c]};jspb.arith.UInt64.prototype.toString=function(){for(var a=\"\",b=this;!b.zero();){b=b.div(10);var c=b[0];a=b[1].lo+a;b=c}\"\"==a&&(a=\"0\");return a};\njspb.arith.UInt64.fromString=function(a){for(var b=new jspb.arith.UInt64(0,0),c=new jspb.arith.UInt64(0,0),d=0;d<a.length;d++){if(\"0\">a[d]||\"9\"<a[d])return null;var e=parseInt(a[d],10);c.lo=e;b=b.mul(10).add(c)}return b};jspb.arith.UInt64.prototype.clone=function(){return new jspb.arith.UInt64(this.lo,this.hi)};jspb.arith.Int64=function(a,b){this.lo=a;this.hi=b};\njspb.arith.Int64.prototype.add=function(a){return new jspb.arith.Int64((this.lo+a.lo&4294967295)>>>0>>>0,((this.hi+a.hi&4294967295)>>>0)+(4294967296<=this.lo+a.lo?1:0)>>>0)};jspb.arith.Int64.prototype.sub=function(a){return new jspb.arith.Int64((this.lo-a.lo&4294967295)>>>0>>>0,((this.hi-a.hi&4294967295)>>>0)-(0>this.lo-a.lo?1:0)>>>0)};jspb.arith.Int64.prototype.clone=function(){return new jspb.arith.Int64(this.lo,this.hi)};\njspb.arith.Int64.prototype.toString=function(){var a=0!=(this.hi&2147483648),b=new jspb.arith.UInt64(this.lo,this.hi);a&&(b=(new jspb.arith.UInt64(0,0)).sub(b));return(a?\"-\":\"\")+b.toString()};jspb.arith.Int64.fromString=function(a){var b=0<a.length&&\"-\"==a[0];b&&(a=a.substring(1));a=jspb.arith.UInt64.fromString(a);if(null===a)return null;b&&(a=(new jspb.arith.UInt64(0,0)).sub(a));return new jspb.arith.Int64(a.lo,a.hi)};jspb.BinaryWriter=function(){this.blocks_=[];this.totalLength_=0;this.encoder_=new jspb.BinaryEncoder;this.bookmarks_=[]};jspb.BinaryWriter.prototype.appendUint8Array_=function(a){var b=this.encoder_.end();this.blocks_.push(b);this.blocks_.push(a);this.totalLength_+=b.length+a.length};\njspb.BinaryWriter.prototype.beginDelimited_=function(a){this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED);a=this.encoder_.end();this.blocks_.push(a);this.totalLength_+=a.length;a.push(this.totalLength_);return a};jspb.BinaryWriter.prototype.endDelimited_=function(a){var b=a.pop();b=this.totalLength_+this.encoder_.length()-b;for(goog.asserts.assert(0<=b);127<b;)a.push(b&127|128),b>>>=7,this.totalLength_++;a.push(b);this.totalLength_++};\njspb.BinaryWriter.prototype.writeSerializedMessage=function(a,b,c){this.appendUint8Array_(a.subarray(b,c))};jspb.BinaryWriter.prototype.maybeWriteSerializedMessage=function(a,b,c){null!=a&&null!=b&&null!=c&&this.writeSerializedMessage(a,b,c)};jspb.BinaryWriter.prototype.reset=function(){this.blocks_=[];this.encoder_.end();this.totalLength_=0;this.bookmarks_=[]};\njspb.BinaryWriter.prototype.getResultBuffer=function(){goog.asserts.assert(0==this.bookmarks_.length);for(var a=new Uint8Array(this.totalLength_+this.encoder_.length()),b=this.blocks_,c=b.length,d=0,e=0;e<c;e++){var f=b[e];a.set(f,d);d+=f.length}b=this.encoder_.end();a.set(b,d);d+=b.length;goog.asserts.assert(d==a.length);this.blocks_=[a];return a};jspb.BinaryWriter.prototype.getResultBase64String=function(a){return goog.crypt.base64.encodeByteArray(this.getResultBuffer(),a)};\njspb.BinaryWriter.prototype.beginSubMessage=function(a){this.bookmarks_.push(this.beginDelimited_(a))};jspb.BinaryWriter.prototype.endSubMessage=function(){goog.asserts.assert(0<=this.bookmarks_.length);this.endDelimited_(this.bookmarks_.pop())};jspb.BinaryWriter.prototype.writeFieldHeader_=function(a,b){goog.asserts.assert(1<=a&&a==Math.floor(a));this.encoder_.writeUnsignedVarint32(8*a+b)};\njspb.BinaryWriter.prototype.writeAny=function(a,b,c){var d=jspb.BinaryConstants.FieldType;switch(a){case d.DOUBLE:this.writeDouble(b,c);break;case d.FLOAT:this.writeFloat(b,c);break;case d.INT64:this.writeInt64(b,c);break;case d.UINT64:this.writeUint64(b,c);break;case d.INT32:this.writeInt32(b,c);break;case d.FIXED64:this.writeFixed64(b,c);break;case d.FIXED32:this.writeFixed32(b,c);break;case d.BOOL:this.writeBool(b,c);break;case d.STRING:this.writeString(b,c);break;case d.GROUP:goog.asserts.fail(\"Group field type not supported in writeAny()\");\nbreak;case d.MESSAGE:goog.asserts.fail(\"Message field type not supported in writeAny()\");break;case d.BYTES:this.writeBytes(b,c);break;case d.UINT32:this.writeUint32(b,c);break;case d.ENUM:this.writeEnum(b,c);break;case d.SFIXED32:this.writeSfixed32(b,c);break;case d.SFIXED64:this.writeSfixed64(b,c);break;case d.SINT32:this.writeSint32(b,c);break;case d.SINT64:this.writeSint64(b,c);break;case d.FHASH64:this.writeFixedHash64(b,c);break;case d.VHASH64:this.writeVarintHash64(b,c);break;default:goog.asserts.fail(\"Invalid field type in writeAny()\")}};\njspb.BinaryWriter.prototype.writeUnsignedVarint32_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeUnsignedVarint32(b))};jspb.BinaryWriter.prototype.writeSignedVarint32_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSignedVarint32(b))};jspb.BinaryWriter.prototype.writeUnsignedVarint64_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeUnsignedVarint64(b))};\njspb.BinaryWriter.prototype.writeSignedVarint64_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSignedVarint64(b))};jspb.BinaryWriter.prototype.writeZigzagVarint32_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeZigzagVarint32(b))};jspb.BinaryWriter.prototype.writeZigzagVarint64_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeZigzagVarint64(b))};\njspb.BinaryWriter.prototype.writeZigzagVarint64String_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeZigzagVarint64String(b))};jspb.BinaryWriter.prototype.writeZigzagVarintHash64_=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeZigzagVarintHash64(b))};\njspb.BinaryWriter.prototype.writeInt32=function(a,b){null!=b&&(goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_31&&b<jspb.BinaryConstants.TWO_TO_31),this.writeSignedVarint32_(a,b))};jspb.BinaryWriter.prototype.writeInt32String=function(a,b){null!=b&&(b=parseInt(b,10),goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_31&&b<jspb.BinaryConstants.TWO_TO_31),this.writeSignedVarint32_(a,b))};\njspb.BinaryWriter.prototype.writeInt64=function(a,b){null!=b&&(goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_63&&b<jspb.BinaryConstants.TWO_TO_63),this.writeSignedVarint64_(a,b))};jspb.BinaryWriter.prototype.writeInt64String=function(a,b){null!=b&&(b=jspb.arith.Int64.fromString(b),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSplitVarint64(b.lo,b.hi))};\njspb.BinaryWriter.prototype.writeUint32=function(a,b){null!=b&&(goog.asserts.assert(0<=b&&b<jspb.BinaryConstants.TWO_TO_32),this.writeUnsignedVarint32_(a,b))};jspb.BinaryWriter.prototype.writeUint32String=function(a,b){null!=b&&(b=parseInt(b,10),goog.asserts.assert(0<=b&&b<jspb.BinaryConstants.TWO_TO_32),this.writeUnsignedVarint32_(a,b))};jspb.BinaryWriter.prototype.writeUint64=function(a,b){null!=b&&(goog.asserts.assert(0<=b&&b<jspb.BinaryConstants.TWO_TO_64),this.writeUnsignedVarint64_(a,b))};\njspb.BinaryWriter.prototype.writeUint64String=function(a,b){null!=b&&(b=jspb.arith.UInt64.fromString(b),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSplitVarint64(b.lo,b.hi))};jspb.BinaryWriter.prototype.writeSint32=function(a,b){null!=b&&(goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_31&&b<jspb.BinaryConstants.TWO_TO_31),this.writeZigzagVarint32_(a,b))};\njspb.BinaryWriter.prototype.writeSint64=function(a,b){null!=b&&(goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_63&&b<jspb.BinaryConstants.TWO_TO_63),this.writeZigzagVarint64_(a,b))};jspb.BinaryWriter.prototype.writeSintHash64=function(a,b){null!=b&&this.writeZigzagVarintHash64_(a,b)};jspb.BinaryWriter.prototype.writeSint64String=function(a,b){null!=b&&this.writeZigzagVarint64String_(a,b)};\njspb.BinaryWriter.prototype.writeFixed32=function(a,b){null!=b&&(goog.asserts.assert(0<=b&&b<jspb.BinaryConstants.TWO_TO_32),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED32),this.encoder_.writeUint32(b))};jspb.BinaryWriter.prototype.writeFixed64=function(a,b){null!=b&&(goog.asserts.assert(0<=b&&b<jspb.BinaryConstants.TWO_TO_64),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeUint64(b))};\njspb.BinaryWriter.prototype.writeFixed64String=function(a,b){null!=b&&(b=jspb.arith.UInt64.fromString(b),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeSplitFixed64(b.lo,b.hi))};jspb.BinaryWriter.prototype.writeSfixed32=function(a,b){null!=b&&(goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_31&&b<jspb.BinaryConstants.TWO_TO_31),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED32),this.encoder_.writeInt32(b))};\njspb.BinaryWriter.prototype.writeSfixed64=function(a,b){null!=b&&(goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_63&&b<jspb.BinaryConstants.TWO_TO_63),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeInt64(b))};jspb.BinaryWriter.prototype.writeSfixed64String=function(a,b){null!=b&&(b=jspb.arith.Int64.fromString(b),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeSplitFixed64(b.lo,b.hi))};\njspb.BinaryWriter.prototype.writeFloat=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED32),this.encoder_.writeFloat(b))};jspb.BinaryWriter.prototype.writeDouble=function(a,b){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeDouble(b))};\njspb.BinaryWriter.prototype.writeBool=function(a,b){null!=b&&(goog.asserts.assert(\"boolean\"===typeof b||\"number\"===typeof b),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeBool(b))};jspb.BinaryWriter.prototype.writeEnum=function(a,b){null!=b&&(goog.asserts.assert(b>=-jspb.BinaryConstants.TWO_TO_31&&b<jspb.BinaryConstants.TWO_TO_31),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSignedVarint32(b))};\njspb.BinaryWriter.prototype.writeString=function(a,b){null!=b&&(a=this.beginDelimited_(a),this.encoder_.writeString(b),this.endDelimited_(a))};jspb.BinaryWriter.prototype.writeBytes=function(a,b){null!=b&&(b=jspb.utils.byteSourceToUint8Array(b),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(b.length),this.appendUint8Array_(b))};jspb.BinaryWriter.prototype.writeMessage=function(a,b,c){null!=b&&(a=this.beginDelimited_(a),c(b,this),this.endDelimited_(a))};\njspb.BinaryWriter.prototype.writeMessageSet=function(a,b,c){null!=b&&(this.writeFieldHeader_(1,jspb.BinaryConstants.WireType.START_GROUP),this.writeFieldHeader_(2,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeSignedVarint32(a),a=this.beginDelimited_(3),c(b,this),this.endDelimited_(a),this.writeFieldHeader_(1,jspb.BinaryConstants.WireType.END_GROUP))};\njspb.BinaryWriter.prototype.writeGroup=function(a,b,c){null!=b&&(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.START_GROUP),c(b,this),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.END_GROUP))};jspb.BinaryWriter.prototype.writeFixedHash64=function(a,b){null!=b&&(goog.asserts.assert(8==b.length),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED64),this.encoder_.writeFixedHash64(b))};\njspb.BinaryWriter.prototype.writeVarintHash64=function(a,b){null!=b&&(goog.asserts.assert(8==b.length),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT),this.encoder_.writeVarintHash64(b))};jspb.BinaryWriter.prototype.writeSplitFixed64=function(a,b,c){this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.FIXED64);this.encoder_.writeSplitFixed64(b,c)};\njspb.BinaryWriter.prototype.writeSplitVarint64=function(a,b,c){this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT);this.encoder_.writeSplitVarint64(b,c)};jspb.BinaryWriter.prototype.writeSplitZigzagVarint64=function(a,b,c){this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.VARINT);var d=this.encoder_;jspb.utils.toZigzag64(b,c,function(a,b){d.writeSplitVarint64(a>>>0,b>>>0)})};\njspb.BinaryWriter.prototype.writeRepeatedInt32=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeSignedVarint32_(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedInt32String=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeInt32String(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedInt64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeSignedVarint64_(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedSplitFixed64=function(a,b,c,d){if(null!=b)for(var e=0;e<b.length;e++)this.writeSplitFixed64(a,c(b[e]),d(b[e]))};jspb.BinaryWriter.prototype.writeRepeatedSplitVarint64=function(a,b,c,d){if(null!=b)for(var e=0;e<b.length;e++)this.writeSplitVarint64(a,c(b[e]),d(b[e]))};jspb.BinaryWriter.prototype.writeRepeatedSplitZigzagVarint64=function(a,b,c,d){if(null!=b)for(var e=0;e<b.length;e++)this.writeSplitZigzagVarint64(a,c(b[e]),d(b[e]))};\njspb.BinaryWriter.prototype.writeRepeatedInt64String=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeInt64String(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedUint32=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeUnsignedVarint32_(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedUint32String=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeUint32String(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedUint64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeUnsignedVarint64_(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedUint64String=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeUint64String(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedSint32=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeZigzagVarint32_(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedSint64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeZigzagVarint64_(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedSint64String=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeZigzagVarint64String_(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedSintHash64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeZigzagVarintHash64_(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedFixed32=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeFixed32(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedFixed64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeFixed64(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedFixed64String=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeFixed64String(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedSfixed32=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeSfixed32(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedSfixed64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeSfixed64(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedSfixed64String=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeSfixed64String(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedFloat=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeFloat(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedDouble=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeDouble(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedBool=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeBool(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedEnum=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeEnum(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedString=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeString(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedBytes=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeBytes(a,b[c])};jspb.BinaryWriter.prototype.writeRepeatedMessage=function(a,b,c){if(null!=b)for(var d=0;d<b.length;d++){var e=this.beginDelimited_(a);c(b[d],this);this.endDelimited_(e)}};\njspb.BinaryWriter.prototype.writeRepeatedGroup=function(a,b,c){if(null!=b)for(var d=0;d<b.length;d++)this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.START_GROUP),c(b[d],this),this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.END_GROUP)};jspb.BinaryWriter.prototype.writeRepeatedFixedHash64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeFixedHash64(a,b[c])};\njspb.BinaryWriter.prototype.writeRepeatedVarintHash64=function(a,b){if(null!=b)for(var c=0;c<b.length;c++)this.writeVarintHash64(a,b[c])};jspb.BinaryWriter.prototype.writePackedInt32=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeSignedVarint32(b[c]);this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedInt32String=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeSignedVarint32(parseInt(b[c],10));this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedInt64=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeSignedVarint64(b[c]);this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedSplitFixed64=function(a,b,c,d){if(null!=b){a=this.beginDelimited_(a);for(var e=0;e<b.length;e++)this.encoder_.writeSplitFixed64(c(b[e]),d(b[e]));this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedSplitVarint64=function(a,b,c,d){if(null!=b){a=this.beginDelimited_(a);for(var e=0;e<b.length;e++)this.encoder_.writeSplitVarint64(c(b[e]),d(b[e]));this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedSplitZigzagVarint64=function(a,b,c,d){if(null!=b){a=this.beginDelimited_(a);for(var e=this.encoder_,f=0;f<b.length;f++)jspb.utils.toZigzag64(c(b[f]),d(b[f]),function(a,b){e.writeSplitVarint64(a>>>0,b>>>0)});this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedInt64String=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++){var d=jspb.arith.Int64.fromString(b[c]);this.encoder_.writeSplitVarint64(d.lo,d.hi)}this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedUint32=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeUnsignedVarint32(b[c]);this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedUint32String=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeUnsignedVarint32(parseInt(b[c],10));this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedUint64=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeUnsignedVarint64(b[c]);this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedUint64String=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++){var d=jspb.arith.UInt64.fromString(b[c]);this.encoder_.writeSplitVarint64(d.lo,d.hi)}this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedSint32=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeZigzagVarint32(b[c]);this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedSint64=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeZigzagVarint64(b[c]);this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedSint64String=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeZigzagVarintHash64(jspb.utils.decimalStringToHash64(b[c]));this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedSintHash64=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeZigzagVarintHash64(b[c]);this.endDelimited_(a)}};\njspb.BinaryWriter.prototype.writePackedFixed32=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(4*b.length),a=0;a<b.length;a++)this.encoder_.writeUint32(b[a])};jspb.BinaryWriter.prototype.writePackedFixed64=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*b.length),a=0;a<b.length;a++)this.encoder_.writeUint64(b[a])};\njspb.BinaryWriter.prototype.writePackedFixed64String=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*b.length),a=0;a<b.length;a++){var c=jspb.arith.UInt64.fromString(b[a]);this.encoder_.writeSplitFixed64(c.lo,c.hi)}};\njspb.BinaryWriter.prototype.writePackedSfixed32=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(4*b.length),a=0;a<b.length;a++)this.encoder_.writeInt32(b[a])};jspb.BinaryWriter.prototype.writePackedSfixed64=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*b.length),a=0;a<b.length;a++)this.encoder_.writeInt64(b[a])};\njspb.BinaryWriter.prototype.writePackedSfixed64String=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*b.length),a=0;a<b.length;a++)this.encoder_.writeInt64String(b[a])};jspb.BinaryWriter.prototype.writePackedFloat=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(4*b.length),a=0;a<b.length;a++)this.encoder_.writeFloat(b[a])};\njspb.BinaryWriter.prototype.writePackedDouble=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*b.length),a=0;a<b.length;a++)this.encoder_.writeDouble(b[a])};jspb.BinaryWriter.prototype.writePackedBool=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(b.length),a=0;a<b.length;a++)this.encoder_.writeBool(b[a])};\njspb.BinaryWriter.prototype.writePackedEnum=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeEnum(b[c]);this.endDelimited_(a)}};jspb.BinaryWriter.prototype.writePackedFixedHash64=function(a,b){if(null!=b&&b.length)for(this.writeFieldHeader_(a,jspb.BinaryConstants.WireType.DELIMITED),this.encoder_.writeUnsignedVarint32(8*b.length),a=0;a<b.length;a++)this.encoder_.writeFixedHash64(b[a])};\njspb.BinaryWriter.prototype.writePackedVarintHash64=function(a,b){if(null!=b&&b.length){a=this.beginDelimited_(a);for(var c=0;c<b.length;c++)this.encoder_.writeVarintHash64(b[c]);this.endDelimited_(a)}};jspb.Map=function(a,b){this.arr_=a;this.valueCtor_=b;this.map_={};this.arrClean=!0;0<this.arr_.length&&this.loadFromArray_()};jspb.Map.prototype.loadFromArray_=function(){for(var a=0;a<this.arr_.length;a++){var b=this.arr_[a],c=b[0];this.map_[c.toString()]=new jspb.Map.Entry_(c,b[1])}this.arrClean=!0};\njspb.Map.prototype.toArray=function(){if(this.arrClean){if(this.valueCtor_){var a=this.map_,b;for(b in a)if(Object.prototype.hasOwnProperty.call(a,b)){var c=a[b].valueWrapper;c&&c.toArray()}}}else{this.arr_.length=0;a=this.stringKeys_();a.sort();for(b=0;b<a.length;b++){var d=this.map_[a[b]];(c=d.valueWrapper)&&c.toArray();this.arr_.push([d.key,d.value])}this.arrClean=!0}return this.arr_};\njspb.Map.prototype.toObject=function(a,b){for(var c=this.toArray(),d=[],e=0;e<c.length;e++){var f=this.map_[c[e][0].toString()];this.wrapEntry_(f);var g=f.valueWrapper;g?(goog.asserts.assert(b),d.push([f.key,b(a,g)])):d.push([f.key,f.value])}return d};jspb.Map.fromObject=function(a,b,c){b=new jspb.Map([],b);for(var d=0;d<a.length;d++){var e=a[d][0],f=c(a[d][1]);b.set(e,f)}return b};jspb.Map.ArrayIteratorIterable_=function(a){this.idx_=0;this.arr_=a};\njspb.Map.ArrayIteratorIterable_.prototype.next=function(){return this.idx_<this.arr_.length?{done:!1,value:this.arr_[this.idx_++]}:{done:!0,value:void 0}};\"undefined\"!=typeof Symbol&&(jspb.Map.ArrayIteratorIterable_.prototype[Symbol.iterator]=function(){return this});jspb.Map.prototype.getLength=function(){return this.stringKeys_().length};jspb.Map.prototype.clear=function(){this.map_={};this.arrClean=!1};\njspb.Map.prototype.del=function(a){a=a.toString();var b=this.map_.hasOwnProperty(a);delete this.map_[a];this.arrClean=!1;return b};jspb.Map.prototype.getEntryList=function(){var a=[],b=this.stringKeys_();b.sort();for(var c=0;c<b.length;c++){var d=this.map_[b[c]];a.push([d.key,d.value])}return a};jspb.Map.prototype.entries=function(){var a=[],b=this.stringKeys_();b.sort();for(var c=0;c<b.length;c++){var d=this.map_[b[c]];a.push([d.key,this.wrapEntry_(d)])}return new jspb.Map.ArrayIteratorIterable_(a)};\njspb.Map.prototype.keys=function(){var a=[],b=this.stringKeys_();b.sort();for(var c=0;c<b.length;c++)a.push(this.map_[b[c]].key);return new jspb.Map.ArrayIteratorIterable_(a)};jspb.Map.prototype.values=function(){var a=[],b=this.stringKeys_();b.sort();for(var c=0;c<b.length;c++)a.push(this.wrapEntry_(this.map_[b[c]]));return new jspb.Map.ArrayIteratorIterable_(a)};\njspb.Map.prototype.forEach=function(a,b){var c=this.stringKeys_();c.sort();for(var d=0;d<c.length;d++){var e=this.map_[c[d]];a.call(b,this.wrapEntry_(e),e.key,this)}};jspb.Map.prototype.set=function(a,b){var c=new jspb.Map.Entry_(a);this.valueCtor_?(c.valueWrapper=b,c.value=b.toArray()):c.value=b;this.map_[a.toString()]=c;this.arrClean=!1;return this};jspb.Map.prototype.wrapEntry_=function(a){return this.valueCtor_?(a.valueWrapper||(a.valueWrapper=new this.valueCtor_(a.value)),a.valueWrapper):a.value};\njspb.Map.prototype.get=function(a){if(a=this.map_[a.toString()])return this.wrapEntry_(a)};jspb.Map.prototype.has=function(a){return a.toString()in this.map_};jspb.Map.prototype.serializeBinary=function(a,b,c,d,e){var f=this.stringKeys_();f.sort();for(var g=0;g<f.length;g++){var h=this.map_[f[g]];b.beginSubMessage(a);c.call(b,1,h.key);this.valueCtor_?d.call(b,2,this.wrapEntry_(h),e):d.call(b,2,h.value);b.endSubMessage()}};\njspb.Map.deserializeBinary=function(a,b,c,d,e,f,g){for(;b.nextField()&&!b.isEndGroup();){var h=b.getFieldNumber();1==h?f=c.call(b):2==h&&(a.valueCtor_?(goog.asserts.assert(e),g||(g=new a.valueCtor_),d.call(b,g,e)):g=d.call(b))}goog.asserts.assert(void 0!=f);goog.asserts.assert(void 0!=g);a.set(f,g)};jspb.Map.prototype.stringKeys_=function(){var a=this.map_,b=[],c;for(c in a)Object.prototype.hasOwnProperty.call(a,c)&&b.push(c);return b};\njspb.Map.Entry_=function(a,b){this.key=a;this.value=b;this.valueWrapper=void 0};jspb.ExtensionFieldInfo=function(a,b,c,d,e){this.fieldIndex=a;this.fieldName=b;this.ctor=c;this.toObjectFn=d;this.isRepeated=e};jspb.ExtensionFieldBinaryInfo=function(a,b,c,d,e,f){this.fieldInfo=a;this.binaryReaderFn=b;this.binaryWriterFn=c;this.binaryMessageSerializeFn=d;this.binaryMessageDeserializeFn=e;this.isPacked=f};jspb.ExtensionFieldInfo.prototype.isMessageType=function(){return!!this.ctor};jspb.Message=function(){};jspb.Message.GENERATE_TO_OBJECT=!0;jspb.Message.GENERATE_FROM_OBJECT=!goog.DISALLOW_TEST_ONLY_CODE;\njspb.Message.GENERATE_TO_STRING=!0;jspb.Message.ASSUME_LOCAL_ARRAYS=!1;jspb.Message.SERIALIZE_EMPTY_TRAILING_FIELDS=!0;jspb.Message.SUPPORTS_UINT8ARRAY_=\"function\"==typeof Uint8Array;jspb.Message.prototype.getJsPbMessageId=function(){return this.messageId_};jspb.Message.getIndex_=function(a,b){return b+a.arrayIndexOffset_};jspb.Message.hiddenES6Property_=function(){};jspb.Message.getFieldNumber_=function(a,b){return b-a.arrayIndexOffset_};\njspb.Message.initialize=function(a,b,c,d,e,f){a.wrappers_=null;b||(b=c?[c]:[]);a.messageId_=c?String(c):void 0;a.arrayIndexOffset_=0===c?-1:0;a.array=b;jspb.Message.initPivotAndExtensionObject_(a,d);a.convertedPrimitiveFields_={};jspb.Message.SERIALIZE_EMPTY_TRAILING_FIELDS||(a.repeatedFields=e);if(e)for(b=0;b<e.length;b++)c=e[b],c<a.pivot_?(c=jspb.Message.getIndex_(a,c),a.array[c]=a.array[c]||jspb.Message.EMPTY_LIST_SENTINEL_):(jspb.Message.maybeInitEmptyExtensionObject_(a),a.extensionObject_[c]=\na.extensionObject_[c]||jspb.Message.EMPTY_LIST_SENTINEL_);if(f&&f.length)for(b=0;b<f.length;b++)jspb.Message.computeOneofCase(a,f[b])};jspb.Message.EMPTY_LIST_SENTINEL_=goog.DEBUG&&Object.freeze?Object.freeze([]):[];jspb.Message.isArray_=function(a){return jspb.Message.ASSUME_LOCAL_ARRAYS?a instanceof Array:Array.isArray(a)};jspb.Message.isExtensionObject_=function(a){return null!==a&&\"object\"==typeof a&&!jspb.Message.isArray_(a)&&!(jspb.Message.SUPPORTS_UINT8ARRAY_&&a instanceof Uint8Array)};\njspb.Message.initPivotAndExtensionObject_=function(a,b){var c=a.array.length,d=-1;if(c&&(d=c-1,c=a.array[d],jspb.Message.isExtensionObject_(c))){a.pivot_=jspb.Message.getFieldNumber_(a,d);a.extensionObject_=c;return}-1<b?(a.pivot_=Math.max(b,jspb.Message.getFieldNumber_(a,d+1)),a.extensionObject_=null):a.pivot_=Number.MAX_VALUE};jspb.Message.maybeInitEmptyExtensionObject_=function(a){var b=jspb.Message.getIndex_(a,a.pivot_);a.array[b]||(a.extensionObject_=a.array[b]={})};\njspb.Message.toObjectList=function(a,b,c){for(var d=[],e=0;e<a.length;e++)d[e]=b.call(a[e],c,a[e]);return d};jspb.Message.toObjectExtension=function(a,b,c,d,e){for(var f in c){var g=c[f],h=d.call(a,g);if(null!=h){for(var k in g.fieldName)if(g.fieldName.hasOwnProperty(k))break;b[k]=g.toObjectFn?g.isRepeated?jspb.Message.toObjectList(h,g.toObjectFn,e):g.toObjectFn(e,h):h}}};\njspb.Message.serializeBinaryExtensions=function(a,b,c,d){for(var e in c){var f=c[e],g=f.fieldInfo;if(!f.binaryWriterFn)throw Error(\"Message extension present that was generated without binary serialization support\");var h=d.call(a,g);if(null!=h)if(g.isMessageType())if(f.binaryMessageSerializeFn)f.binaryWriterFn.call(b,g.fieldIndex,h,f.binaryMessageSerializeFn);else throw Error(\"Message extension present holding submessage without binary support enabled, and message is being serialized to binary format\");\nelse f.binaryWriterFn.call(b,g.fieldIndex,h)}};jspb.Message.readBinaryExtension=function(a,b,c,d,e){var f=c[b.getFieldNumber()];if(f){c=f.fieldInfo;if(!f.binaryReaderFn)throw Error(\"Deserializing extension whose generated code does not support binary format\");if(c.isMessageType()){var g=new c.ctor;f.binaryReaderFn.call(b,g,f.binaryMessageDeserializeFn)}else g=f.binaryReaderFn.call(b);c.isRepeated&&!f.isPacked?(b=d.call(a,c))?b.push(g):e.call(a,c,[g]):e.call(a,c,g)}else b.skipField()};\njspb.Message.getField=function(a,b){if(b<a.pivot_){b=jspb.Message.getIndex_(a,b);var c=a.array[b];return c===jspb.Message.EMPTY_LIST_SENTINEL_?a.array[b]=[]:c}if(a.extensionObject_)return c=a.extensionObject_[b],c===jspb.Message.EMPTY_LIST_SENTINEL_?a.extensionObject_[b]=[]:c};jspb.Message.getRepeatedField=function(a,b){return jspb.Message.getField(a,b)};jspb.Message.getOptionalFloatingPointField=function(a,b){a=jspb.Message.getField(a,b);return null==a?a:+a};\njspb.Message.getBooleanField=function(a,b){a=jspb.Message.getField(a,b);return null==a?a:!!a};jspb.Message.getRepeatedFloatingPointField=function(a,b){var c=jspb.Message.getRepeatedField(a,b);a.convertedPrimitiveFields_||(a.convertedPrimitiveFields_={});if(!a.convertedPrimitiveFields_[b]){for(var d=0;d<c.length;d++)c[d]=+c[d];a.convertedPrimitiveFields_[b]=!0}return c};\njspb.Message.getRepeatedBooleanField=function(a,b){var c=jspb.Message.getRepeatedField(a,b);a.convertedPrimitiveFields_||(a.convertedPrimitiveFields_={});if(!a.convertedPrimitiveFields_[b]){for(var d=0;d<c.length;d++)c[d]=!!c[d];a.convertedPrimitiveFields_[b]=!0}return c};\njspb.Message.bytesAsB64=function(a){if(null==a||\"string\"===typeof a)return a;if(jspb.Message.SUPPORTS_UINT8ARRAY_&&a instanceof Uint8Array)return goog.crypt.base64.encodeByteArray(a);goog.asserts.fail(\"Cannot coerce to b64 string: \"+goog.typeOf(a));return null};jspb.Message.bytesAsU8=function(a){if(null==a||a instanceof Uint8Array)return a;if(\"string\"===typeof a)return goog.crypt.base64.decodeStringToUint8Array(a);goog.asserts.fail(\"Cannot coerce to Uint8Array: \"+goog.typeOf(a));return null};\njspb.Message.bytesListAsB64=function(a){jspb.Message.assertConsistentTypes_(a);return a.length&&\"string\"!==typeof a[0]?goog.array.map(a,jspb.Message.bytesAsB64):a};jspb.Message.bytesListAsU8=function(a){jspb.Message.assertConsistentTypes_(a);return!a.length||a[0]instanceof Uint8Array?a:goog.array.map(a,jspb.Message.bytesAsU8)};\njspb.Message.assertConsistentTypes_=function(a){if(goog.DEBUG&&a&&1<a.length){var b=goog.typeOf(a[0]);goog.array.forEach(a,function(a){goog.typeOf(a)!=b&&goog.asserts.fail(\"Inconsistent type in JSPB repeated field array. Got \"+goog.typeOf(a)+\" expected \"+b)})}};jspb.Message.getFieldWithDefault=function(a,b,c){a=jspb.Message.getField(a,b);return null==a?c:a};jspb.Message.getBooleanFieldWithDefault=function(a,b,c){a=jspb.Message.getBooleanField(a,b);return null==a?c:a};\njspb.Message.getFloatingPointFieldWithDefault=function(a,b,c){a=jspb.Message.getOptionalFloatingPointField(a,b);return null==a?c:a};jspb.Message.getFieldProto3=jspb.Message.getFieldWithDefault;jspb.Message.getMapField=function(a,b,c,d){a.wrappers_||(a.wrappers_={});if(b in a.wrappers_)return a.wrappers_[b];var e=jspb.Message.getField(a,b);if(!e){if(c)return;e=[];jspb.Message.setField(a,b,e)}return a.wrappers_[b]=new jspb.Map(e,d)};\njspb.Message.setField=function(a,b,c){goog.asserts.assertInstanceof(a,jspb.Message);b<a.pivot_?a.array[jspb.Message.getIndex_(a,b)]=c:(jspb.Message.maybeInitEmptyExtensionObject_(a),a.extensionObject_[b]=c);return a};jspb.Message.setProto3IntField=function(a,b,c){return jspb.Message.setFieldIgnoringDefault_(a,b,c,0)};jspb.Message.setProto3FloatField=function(a,b,c){return jspb.Message.setFieldIgnoringDefault_(a,b,c,0)};\njspb.Message.setProto3BooleanField=function(a,b,c){return jspb.Message.setFieldIgnoringDefault_(a,b,c,!1)};jspb.Message.setProto3StringField=function(a,b,c){return jspb.Message.setFieldIgnoringDefault_(a,b,c,\"\")};jspb.Message.setProto3BytesField=function(a,b,c){return jspb.Message.setFieldIgnoringDefault_(a,b,c,\"\")};jspb.Message.setProto3EnumField=function(a,b,c){return jspb.Message.setFieldIgnoringDefault_(a,b,c,0)};\njspb.Message.setProto3StringIntField=function(a,b,c){return jspb.Message.setFieldIgnoringDefault_(a,b,c,\"0\")};jspb.Message.setFieldIgnoringDefault_=function(a,b,c,d){goog.asserts.assertInstanceof(a,jspb.Message);c!==d?jspb.Message.setField(a,b,c):b<a.pivot_?a.array[jspb.Message.getIndex_(a,b)]=null:(jspb.Message.maybeInitEmptyExtensionObject_(a),delete a.extensionObject_[b]);return a};\njspb.Message.addToRepeatedField=function(a,b,c,d){goog.asserts.assertInstanceof(a,jspb.Message);b=jspb.Message.getRepeatedField(a,b);void 0!=d?b.splice(d,0,c):b.push(c);return a};jspb.Message.setOneofField=function(a,b,c,d){goog.asserts.assertInstanceof(a,jspb.Message);(c=jspb.Message.computeOneofCase(a,c))&&c!==b&&void 0!==d&&(a.wrappers_&&c in a.wrappers_&&(a.wrappers_[c]=void 0),jspb.Message.setField(a,c,void 0));return jspb.Message.setField(a,b,d)};\njspb.Message.computeOneofCase=function(a,b){for(var c,d,e=0;e<b.length;e++){var f=b[e],g=jspb.Message.getField(a,f);null!=g&&(c=f,d=g,jspb.Message.setField(a,f,void 0))}return c?(jspb.Message.setField(a,c,d),c):0};jspb.Message.getWrapperField=function(a,b,c,d){a.wrappers_||(a.wrappers_={});if(!a.wrappers_[c]){var e=jspb.Message.getField(a,c);if(d||e)a.wrappers_[c]=new b(e)}return a.wrappers_[c]};\njspb.Message.getRepeatedWrapperField=function(a,b,c){jspb.Message.wrapRepeatedField_(a,b,c);b=a.wrappers_[c];b==jspb.Message.EMPTY_LIST_SENTINEL_&&(b=a.wrappers_[c]=[]);return b};jspb.Message.wrapRepeatedField_=function(a,b,c){a.wrappers_||(a.wrappers_={});if(!a.wrappers_[c]){for(var d=jspb.Message.getRepeatedField(a,c),e=[],f=0;f<d.length;f++)e[f]=new b(d[f]);a.wrappers_[c]=e}};\njspb.Message.setWrapperField=function(a,b,c){goog.asserts.assertInstanceof(a,jspb.Message);a.wrappers_||(a.wrappers_={});var d=c?c.toArray():c;a.wrappers_[b]=c;return jspb.Message.setField(a,b,d)};jspb.Message.setOneofWrapperField=function(a,b,c,d){goog.asserts.assertInstanceof(a,jspb.Message);a.wrappers_||(a.wrappers_={});var e=d?d.toArray():d;a.wrappers_[b]=d;return jspb.Message.setOneofField(a,b,c,e)};\njspb.Message.setRepeatedWrapperField=function(a,b,c){goog.asserts.assertInstanceof(a,jspb.Message);a.wrappers_||(a.wrappers_={});c=c||[];for(var d=[],e=0;e<c.length;e++)d[e]=c[e].toArray();a.wrappers_[b]=c;return jspb.Message.setField(a,b,d)};\njspb.Message.addToRepeatedWrapperField=function(a,b,c,d,e){jspb.Message.wrapRepeatedField_(a,d,b);var f=a.wrappers_[b];f||(f=a.wrappers_[b]=[]);c=c?c:new d;a=jspb.Message.getRepeatedField(a,b);void 0!=e?(f.splice(e,0,c),a.splice(e,0,c.toArray())):(f.push(c),a.push(c.toArray()));return c};jspb.Message.toMap=function(a,b,c,d){for(var e={},f=0;f<a.length;f++)e[b.call(a[f])]=c?c.call(a[f],d,a[f]):a[f];return e};\njspb.Message.prototype.syncMapFields_=function(){if(this.wrappers_)for(var a in this.wrappers_){var b=this.wrappers_[a];if(Array.isArray(b))for(var c=0;c<b.length;c++)b[c]&&b[c].toArray();else b&&b.toArray()}};jspb.Message.prototype.toArray=function(){this.syncMapFields_();return this.array};jspb.Message.GENERATE_TO_STRING&&(jspb.Message.prototype.toString=function(){this.syncMapFields_();return this.array.toString()});\njspb.Message.prototype.getExtension=function(a){if(this.extensionObject_){this.wrappers_||(this.wrappers_={});var b=a.fieldIndex;if(a.isRepeated){if(a.isMessageType())return this.wrappers_[b]||(this.wrappers_[b]=goog.array.map(this.extensionObject_[b]||[],function(b){return new a.ctor(b)})),this.wrappers_[b]}else if(a.isMessageType())return!this.wrappers_[b]&&this.extensionObject_[b]&&(this.wrappers_[b]=new a.ctor(this.extensionObject_[b])),this.wrappers_[b];return this.extensionObject_[b]}};\njspb.Message.prototype.setExtension=function(a,b){this.wrappers_||(this.wrappers_={});jspb.Message.maybeInitEmptyExtensionObject_(this);var c=a.fieldIndex;a.isRepeated?(b=b||[],a.isMessageType()?(this.wrappers_[c]=b,this.extensionObject_[c]=goog.array.map(b,function(a){return a.toArray()})):this.extensionObject_[c]=b):a.isMessageType()?(this.wrappers_[c]=b,this.extensionObject_[c]=b?b.toArray():b):this.extensionObject_[c]=b;return this};\njspb.Message.difference=function(a,b){if(!(a instanceof b.constructor))throw Error(\"Messages have different types.\");var c=a.toArray();b=b.toArray();var d=[],e=0,f=c.length>b.length?c.length:b.length;a.getJsPbMessageId()&&(d[0]=a.getJsPbMessageId(),e=1);for(;e<f;e++)jspb.Message.compareFields(c[e],b[e])||(d[e]=b[e]);return new a.constructor(d)};jspb.Message.equals=function(a,b){return a==b||!(!a||!b)&&a instanceof b.constructor&&jspb.Message.compareFields(a.toArray(),b.toArray())};\njspb.Message.compareExtensions=function(a,b){a=a||{};b=b||{};var c={},d;for(d in a)c[d]=0;for(d in b)c[d]=0;for(d in c)if(!jspb.Message.compareFields(a[d],b[d]))return!1;return!0};\njspb.Message.compareFields=function(a,b){if(a==b)return!0;if(!goog.isObject(a)||!goog.isObject(b))return\"number\"===typeof a&&isNaN(a)||\"number\"===typeof b&&isNaN(b)?String(a)==String(b):!1;if(a.constructor!=b.constructor)return!1;if(jspb.Message.SUPPORTS_UINT8ARRAY_&&a.constructor===Uint8Array){if(a.length!=b.length)return!1;for(var c=0;c<a.length;c++)if(a[c]!=b[c])return!1;return!0}if(a.constructor===Array){var d=void 0,e=void 0,f=Math.max(a.length,b.length);for(c=0;c<f;c++){var g=a[c],h=b[c];g&&\ng.constructor==Object&&(goog.asserts.assert(void 0===d),goog.asserts.assert(c===a.length-1),d=g,g=void 0);h&&h.constructor==Object&&(goog.asserts.assert(void 0===e),goog.asserts.assert(c===b.length-1),e=h,h=void 0);if(!jspb.Message.compareFields(g,h))return!1}return d||e?(d=d||{},e=e||{},jspb.Message.compareExtensions(d,e)):!0}if(a.constructor===Object)return jspb.Message.compareExtensions(a,b);throw Error(\"Invalid type in JSPB array\");};jspb.Message.prototype.cloneMessage=function(){return jspb.Message.cloneMessage(this)};\njspb.Message.prototype.clone=function(){return jspb.Message.cloneMessage(this)};jspb.Message.clone=function(a){return jspb.Message.cloneMessage(a)};jspb.Message.cloneMessage=function(a){return new a.constructor(jspb.Message.clone_(a.toArray()))};\njspb.Message.copyInto=function(a,b){goog.asserts.assertInstanceof(a,jspb.Message);goog.asserts.assertInstanceof(b,jspb.Message);goog.asserts.assert(a.constructor==b.constructor,\"Copy source and target message should have the same type.\");a=jspb.Message.clone(a);for(var c=b.toArray(),d=a.toArray(),e=c.length=0;e<d.length;e++)c[e]=d[e];b.wrappers_=a.wrappers_;b.extensionObject_=a.extensionObject_};\njspb.Message.clone_=function(a){if(Array.isArray(a)){for(var b=Array(a.length),c=0;c<a.length;c++){var d=a[c];null!=d&&(b[c]=\"object\"==typeof d?jspb.Message.clone_(goog.asserts.assert(d)):d)}return b}if(jspb.Message.SUPPORTS_UINT8ARRAY_&&a instanceof Uint8Array)return new Uint8Array(a);b={};for(c in a)d=a[c],null!=d&&(b[c]=\"object\"==typeof d?jspb.Message.clone_(goog.asserts.assert(d)):d);return b};jspb.Message.registerMessageType=function(a,b){b.messageId=a};jspb.Message.messageSetExtensions={};\njspb.Message.messageSetExtensionsBinary={};jspb.Export={};\"object\"===typeof exports&&(exports.Map=jspb.Map,exports.Message=jspb.Message,exports.BinaryReader=jspb.BinaryReader,exports.BinaryWriter=jspb.BinaryWriter,exports.ExtensionFieldInfo=jspb.ExtensionFieldInfo,exports.ExtensionFieldBinaryInfo=jspb.ExtensionFieldBinaryInfo,exports.exportSymbol=goog.exportSymbol,exports.inherits=goog.inherits,exports.object={extend:goog.object.extend},exports.typeOf=goog.typeOf);\n","'use strict';\n\nvar $BigInt = global.BigInt;\n\nmodule.exports = function hasNativeBigInts() {\n\treturn typeof $BigInt === 'function'\n\t\t&& typeof BigInt === 'function'\n\t\t&& typeof $BigInt(42) === 'bigint' // eslint-disable-line no-magic-numbers\n\t\t&& typeof BigInt(42) === 'bigint'; // eslint-disable-line no-magic-numbers\n};\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n","'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar hasBigInts = require('has-bigints')();\n\nif (hasBigInts) {\n\tvar bigIntValueOf = BigInt.prototype.valueOf;\n\tvar tryBigInt = function tryBigIntObject(value) {\n\t\ttry {\n\t\t\tbigIntValueOf.call(value);\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t}\n\t\treturn false;\n\t};\n\n\tmodule.exports = function isBigInt(value) {\n\t\tif (\n\t\t\tvalue === null\n\t\t\t|| typeof value === 'undefined'\n\t\t\t|| typeof value === 'boolean'\n\t\t\t|| typeof value === 'string'\n\t\t\t|| typeof value === 'number'\n\t\t\t|| typeof value === 'symbol'\n\t\t\t|| typeof value === 'function'\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t\tif (typeof value === 'bigint') {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn tryBigInt(value);\n\t};\n} else {\n\tmodule.exports = function isBigInt(value) {\n\t\treturn false && value;\n\t};\n}\n","'use strict';\n\nvar callBound = require('call-bind/callBound');\nvar $boolToStr = callBound('Boolean.prototype.toString');\nvar $toString = callBound('Object.prototype.toString');\n\nvar tryBooleanObject = function booleanBrandCheck(value) {\n\ttry {\n\t\t$boolToStr(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar boolClass = '[object Boolean]';\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nmodule.exports = function isBoolean(value) {\n\tif (typeof value === 'boolean') {\n\t\treturn true;\n\t}\n\tif (value === null || typeof value !== 'object') {\n\t\treturn false;\n\t}\n\treturn hasToStringTag && Symbol.toStringTag in value ? tryBooleanObject(value) : $toString(value) === boolClass;\n};\n","/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n","'use strict';\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n","'use strict';\n\nvar $Map = typeof Map === 'function' && Map.prototype ? Map : null;\nvar $Set = typeof Set === 'function' && Set.prototype ? Set : null;\n\nvar exported;\n\nif (!$Map) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isMap(x) {\n\t\t// `Map` is not present in this environment.\n\t\treturn false;\n\t};\n}\n\nvar $mapHas = $Map ? Map.prototype.has : null;\nvar $setHas = $Set ? Set.prototype.has : null;\nif (!exported && !$mapHas) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isMap(x) {\n\t\t// `Map` does not have a `has` method\n\t\treturn false;\n\t};\n}\n\nmodule.exports = exported || function isMap(x) {\n\tif (!x || typeof x !== 'object') {\n\t\treturn false;\n\t}\n\ttry {\n\t\t$mapHas.call(x);\n\t\tif ($setHas) {\n\t\t\ttry {\n\t\t\t\t$setHas.call(x);\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn x instanceof $Map; // core-js workaround, pre-v2.5.0\n\t} catch (e) {}\n\treturn false;\n};\n","'use strict';\n\nvar numToStr = Number.prototype.toString;\nvar tryNumberObject = function tryNumberObject(value) {\n\ttry {\n\t\tnumToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar numClass = '[object Number]';\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nmodule.exports = function isNumberObject(value) {\n\tif (typeof value === 'number') {\n\t\treturn true;\n\t}\n\tif (typeof value !== 'object') {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryNumberObject(value) : toStr.call(value) === numClass;\n};\n","'use strict';\n\nvar callBound = require('call-bind/callBound');\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n","'use strict';\n\nvar $Map = typeof Map === 'function' && Map.prototype ? Map : null;\nvar $Set = typeof Set === 'function' && Set.prototype ? Set : null;\n\nvar exported;\n\nif (!$Set) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isSet(x) {\n\t\t// `Set` is not present in this environment.\n\t\treturn false;\n\t};\n}\n\nvar $mapHas = $Map ? Map.prototype.has : null;\nvar $setHas = $Set ? Set.prototype.has : null;\nif (!exported && !$setHas) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isSet(x) {\n\t\t// `Set` does not have a `has` method\n\t\treturn false;\n\t};\n}\n\nmodule.exports = exported || function isSet(x) {\n\tif (!x || typeof x !== 'object') {\n\t\treturn false;\n\t}\n\ttry {\n\t\t$setHas.call(x);\n\t\tif ($mapHas) {\n\t\t\ttry {\n\t\t\t\t$mapHas.call(x);\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn x instanceof $Set; // core-js workaround, pre-v2.5.0\n\t} catch (e) {}\n\treturn false;\n};\n","'use strict';\n\nvar strValue = String.prototype.valueOf;\nvar tryStringObject = function tryStringObject(value) {\n\ttry {\n\t\tstrValue.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar strClass = '[object String]';\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nmodule.exports = function isString(value) {\n\tif (typeof value === 'string') {\n\t\treturn true;\n\t}\n\tif (typeof value !== 'object') {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryStringObject(value) : toStr.call(value) === strClass;\n};\n","'use strict';\n\nvar toStr = Object.prototype.toString;\nvar hasSymbols = require('has-symbols')();\n\nif (hasSymbols) {\n\tvar symToStr = Symbol.prototype.toString;\n\tvar symStringRegex = /^Symbol\\(.*\\)$/;\n\tvar isSymbolObject = function isRealSymbolObject(value) {\n\t\tif (typeof value.valueOf() !== 'symbol') {\n\t\t\treturn false;\n\t\t}\n\t\treturn symStringRegex.test(symToStr.call(value));\n\t};\n\n\tmodule.exports = function isSymbol(value) {\n\t\tif (typeof value === 'symbol') {\n\t\t\treturn true;\n\t\t}\n\t\tif (toStr.call(value) !== '[object Symbol]') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\treturn isSymbolObject(value);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n} else {\n\n\tmodule.exports = function isSymbol(value) {\n\t\t// this environment does not support Symbols.\n\t\treturn false && value;\n\t};\n}\n","'use strict';\n\nvar forEach = require('foreach');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr) {\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar anyTrue = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!anyTrue) {\n\t\t\ttry {\n\t\t\t\tanyTrue = getter.call(value) === typedArray;\n\t\t\t} catch (e) { /**/ }\n\t\t}\n\t});\n\treturn anyTrue;\n};\n\nmodule.exports = function isTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) {\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\treturn $indexOf(typedArrays, tag) > -1;\n\t}\n\tif (!gOPD) { return false; }\n\treturn tryTypedArrays(value);\n};\n","'use strict';\n\nvar $WeakMap = typeof WeakMap === 'function' && WeakMap.prototype ? WeakMap : null;\nvar $WeakSet = typeof WeakSet === 'function' && WeakSet.prototype ? WeakSet : null;\n\nvar exported;\n\nif (!$WeakMap) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isWeakMap(x) {\n\t\t// `WeakMap` is not present in this environment.\n\t\treturn false;\n\t};\n}\n\nvar $mapHas = $WeakMap ? $WeakMap.prototype.has : null;\nvar $setHas = $WeakSet ? $WeakSet.prototype.has : null;\nif (!exported && !$mapHas) {\n\t// eslint-disable-next-line no-unused-vars\n\texported = function isWeakMap(x) {\n\t\t// `WeakMap` does not have a `has` method\n\t\treturn false;\n\t};\n}\n\nmodule.exports = exported || function isWeakMap(x) {\n\tif (!x || typeof x !== 'object') {\n\t\treturn false;\n\t}\n\ttry {\n\t\t$mapHas.call(x, $mapHas);\n\t\tif ($setHas) {\n\t\t\ttry {\n\t\t\t\t$setHas.call(x, $setHas);\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn x instanceof $WeakMap; // core-js workaround, pre-v3\n\t} catch (e) {}\n\treturn false;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bind/callBound');\n\nvar $WeakSet = GetIntrinsic('%WeakSet%', true);\n\nvar $setHas = callBound('WeakSet.prototype.has', true);\n\nif ($setHas) {\n\tvar $mapHas = callBound('WeakMap.prototype.has', true);\n\n\tmodule.exports = function isWeakSet(x) {\n\t\tif (!x || typeof x !== 'object') {\n\t\t\treturn false;\n\t\t}\n\t\ttry {\n\t\t\t$setHas(x, $setHas);\n\t\t\tif ($mapHas) {\n\t\t\t\ttry {\n\t\t\t\t\t$mapHas(x, $mapHas);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn x instanceof $WeakSet; // core-js workaround, pre-v3\n\t\t} catch (e) {}\n\t\treturn false;\n\t};\n} else {\n\t// eslint-disable-next-line no-unused-vars\n\tmodule.exports = function isWeakSet(x) {\n\t\t// `WeakSet` does not exist, or does not have a `has` method\n\t\treturn false;\n\t};\n}\n","var map = require(\"./map\");\n\nvar getCountryCode = function(localeString) {\n    var components = localeString.split(\"_\");\n    if (components.length == 2) {\n        return components.pop();\n    }\n    components = localeString.split(\"-\");\n    if (components.length == 2) {\n        return components.pop();\n    }\n    return localeString;\n}\n\nexports.getCurrency = function(locale) {\n    var countryCode = getCountryCode(locale).toUpperCase();\n    if (countryCode in map) {\n        return map[countryCode];\n    }\n    return null;\n}\n\nexports.getLocales = function(currencyCode) {\n    currencyCode = currencyCode.toUpperCase();\n    var locales = [];\n    for (countryCode in map) {\n        if (map[countryCode] === currencyCode) {\n            locales.push(countryCode);\n        }\n    }\n    return locales;\n}","// Generated using ShowCurrencies.java\nvar map = {\nAD: 'EUR',\nAE: 'AED',\nAF: 'AFN',\nAG: 'XCD',\nAI: 'XCD',\nAL: 'ALL',\nAM: 'AMD',\nAN: 'ANG',\nAO: 'AOA',\nAR: 'ARS',\nAS: 'USD',\nAT: 'EUR',\nAU: 'AUD',\nAW: 'AWG',\nAX: 'EUR',\nAZ: 'AZN',\nBA: 'BAM',\nBB: 'BBD',\nBD: 'BDT',\nBE: 'EUR',\nBF: 'XOF',\nBG: 'BGN',\nBH: 'BHD',\nBI: 'BIF',\nBJ: 'XOF',\nBL: 'EUR',\nBM: 'BMD',\nBN: 'BND',\nBO: 'BOB',\nBQ: 'USD',\nBR: 'BRL',\nBS: 'BSD',\nBT: 'BTN',\nBV: 'NOK',\nBW: 'BWP',\nBY: 'BYR',\nBZ: 'BZD',\nCA: 'CAD',\nCC: 'AUD',\nCD: 'CDF',\nCF: 'XAF',\nCG: 'XAF',\nCH: 'CHF',\nCI: 'XOF',\nCK: 'NZD',\nCL: 'CLP',\nCM: 'XAF',\nCN: 'CNY',\nCO: 'COP',\nCR: 'CRC',\nCU: 'CUP',\nCV: 'CVE',\nCW: 'ANG',\nCX: 'AUD',\nCY: 'EUR',\nCZ: 'CZK',\nDE: 'EUR',\nDJ: 'DJF',\nDK: 'DKK',\nDM: 'XCD',\nDO: 'DOP',\nDZ: 'DZD',\nEC: 'USD',\nEE: 'EUR',\nEG: 'EGP',\nEH: 'MAD',\nER: 'ERN',\nES: 'EUR',\nET: 'ETB',\nFI: 'EUR',\nFJ: 'FJD',\nFK: 'FKP',\nFM: 'USD',\nFO: 'DKK',\nFR: 'EUR',\nGA: 'XAF',\nGB: 'GBP',\nGD: 'XCD',\nGE: 'GEL',\nGF: 'EUR',\nGG: 'GBP',\nGH: 'GHS',\nGI: 'GIP',\nGL: 'DKK',\nGM: 'GMD',\nGN: 'GNF',\nGP: 'EUR',\nGQ: 'XAF',\nGR: 'EUR',\nGS: 'GBP',\nGT: 'GTQ',\nGU: 'USD',\nGW: 'XOF',\nGY: 'GYD',\nHK: 'HKD',\nHM: 'AUD',\nHN: 'HNL',\nHR: 'HRK',\nHT: 'HTG',\nHU: 'HUF',\nID: 'IDR',\nIE: 'EUR',\nIL: 'ILS',\nIM: 'GBP',\nIN: 'INR',\nIO: 'USD',\nIQ: 'IQD',\nIR: 'IRR',\nIS: 'ISK',\nIT: 'EUR',\nJE: 'GBP',\nJM: 'JMD',\nJO: 'JOD',\nJP: 'JPY',\nKE: 'KES',\nKG: 'KGS',\nKH: 'KHR',\nKI: 'AUD',\nKM: 'KMF',\nKN: 'XCD',\nKP: 'KPW',\nKR: 'KRW',\nKW: 'KWD',\nKY: 'KYD',\nKZ: 'KZT',\nLA: 'LAK',\nLB: 'LBP',\nLC: 'XCD',\nLI: 'CHF',\nLK: 'LKR',\nLR: 'LRD',\nLS: 'LSL',\nLT: 'LTL',\nLU: 'EUR',\nLV: 'LVL',\nLY: 'LYD',\nMA: 'MAD',\nMC: 'EUR',\nMD: 'MDL',\nME: 'EUR',\nMF: 'EUR',\nMG: 'MGA',\nMH: 'USD',\nMK: 'MKD',\nML: 'XOF',\nMM: 'MMK',\nMN: 'MNT',\nMO: 'MOP',\nMP: 'USD',\nMQ: 'EUR',\nMR: 'MRO',\nMS: 'XCD',\nMT: 'EUR',\nMU: 'MUR',\nMV: 'MVR',\nMW: 'MWK',\nMX: 'MXN',\nMY: 'MYR',\nMZ: 'MZN',\nNA: 'NAD',\nNC: 'XPF',\nNE: 'XOF',\nNF: 'AUD',\nNG: 'NGN',\nNI: 'NIO',\nNL: 'EUR',\nNO: 'NOK',\nNP: 'NPR',\nNR: 'AUD',\nNU: 'NZD',\nNZ: 'NZD',\nOM: 'OMR',\nPA: 'PAB',\nPE: 'PEN',\nPF: 'XPF',\nPG: 'PGK',\nPH: 'PHP',\nPK: 'PKR',\nPL: 'PLN',\nPM: 'EUR',\nPN: 'NZD',\nPR: 'USD',\nPS: 'ILS',\nPT: 'EUR',\nPW: 'USD',\nPY: 'PYG',\nQA: 'QAR',\nRE: 'EUR',\nRO: 'RON',\nRS: 'RSD',\nRU: 'RUB',\nRW: 'RWF',\nSA: 'SAR',\nSB: 'SBD',\nSC: 'SCR',\nSD: 'SDG',\nSE: 'SEK',\nSG: 'SGD',\nSH: 'SHP',\nSI: 'EUR',\nSJ: 'NOK',\nSK: 'EUR',\nSL: 'SLL',\nSM: 'EUR',\nSN: 'XOF',\nSO: 'SOS',\nSR: 'SRD',\nST: 'STD',\nSV: 'SVC',\nSX: 'ANG',\nSY: 'SYP',\nSZ: 'SZL',\nTC: 'USD',\nTD: 'XAF',\nTF: 'EUR',\nTG: 'XOF',\nTH: 'THB',\nTJ: 'TJS',\nTK: 'NZD',\nTL: 'USD',\nTM: 'TMT',\nTN: 'TND',\nTO: 'TOP',\nTR: 'TRY',\nTT: 'TTD',\nTV: 'AUD',\nTW: 'TWD',\nTZ: 'TZS',\nUA: 'UAH',\nUG: 'UGX',\nUM: 'USD',\nUS: 'USD',\nUY: 'UYU',\nUZ: 'UZS',\nVA: 'EUR',\nVC: 'XCD',\nVE: 'VEF',\nVG: 'USD',\nVI: 'USD',\nVN: 'VND',\nVU: 'VUV',\nWF: 'XPF',\nWS: 'WST',\nYE: 'YER',\nYT: 'EUR',\nZA: 'ZAR',\nZM: 'ZMK',\nZW: 'ZWL'\n};\n\nmodule.exports = map;","'use strict'\n\n// A linked list to keep track of recently-used-ness\nconst Yallist = require('yallist')\n\nconst MAX = Symbol('max')\nconst LENGTH = Symbol('length')\nconst LENGTH_CALCULATOR = Symbol('lengthCalculator')\nconst ALLOW_STALE = Symbol('allowStale')\nconst MAX_AGE = Symbol('maxAge')\nconst DISPOSE = Symbol('dispose')\nconst NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')\nconst LRU_LIST = Symbol('lruList')\nconst CACHE = Symbol('cache')\nconst UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')\n\nconst naiveLength = () => 1\n\n// lruList is a yallist where the head is the youngest\n// item, and the tail is the oldest.  the list contains the Hit\n// objects as the entries.\n// Each Hit object has a reference to its Yallist.Node.  This\n// never changes.\n//\n// cache is a Map (or PseudoMap) that matches the keys to\n// the Yallist.Node object.\nclass LRUCache {\n  constructor (options) {\n    if (typeof options === 'number')\n      options = { max: options }\n\n    if (!options)\n      options = {}\n\n    if (options.max && (typeof options.max !== 'number' || options.max < 0))\n      throw new TypeError('max must be a non-negative number')\n    // Kind of weird to have a default max of Infinity, but oh well.\n    const max = this[MAX] = options.max || Infinity\n\n    const lc = options.length || naiveLength\n    this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc\n    this[ALLOW_STALE] = options.stale || false\n    if (options.maxAge && typeof options.maxAge !== 'number')\n      throw new TypeError('maxAge must be a number')\n    this[MAX_AGE] = options.maxAge || 0\n    this[DISPOSE] = options.dispose\n    this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false\n    this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false\n    this.reset()\n  }\n\n  // resize the cache when the max changes.\n  set max (mL) {\n    if (typeof mL !== 'number' || mL < 0)\n      throw new TypeError('max must be a non-negative number')\n\n    this[MAX] = mL || Infinity\n    trim(this)\n  }\n  get max () {\n    return this[MAX]\n  }\n\n  set allowStale (allowStale) {\n    this[ALLOW_STALE] = !!allowStale\n  }\n  get allowStale () {\n    return this[ALLOW_STALE]\n  }\n\n  set maxAge (mA) {\n    if (typeof mA !== 'number')\n      throw new TypeError('maxAge must be a non-negative number')\n\n    this[MAX_AGE] = mA\n    trim(this)\n  }\n  get maxAge () {\n    return this[MAX_AGE]\n  }\n\n  // resize the cache when the lengthCalculator changes.\n  set lengthCalculator (lC) {\n    if (typeof lC !== 'function')\n      lC = naiveLength\n\n    if (lC !== this[LENGTH_CALCULATOR]) {\n      this[LENGTH_CALCULATOR] = lC\n      this[LENGTH] = 0\n      this[LRU_LIST].forEach(hit => {\n        hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)\n        this[LENGTH] += hit.length\n      })\n    }\n    trim(this)\n  }\n  get lengthCalculator () { return this[LENGTH_CALCULATOR] }\n\n  get length () { return this[LENGTH] }\n  get itemCount () { return this[LRU_LIST].length }\n\n  rforEach (fn, thisp) {\n    thisp = thisp || this\n    for (let walker = this[LRU_LIST].tail; walker !== null;) {\n      const prev = walker.prev\n      forEachStep(this, fn, walker, thisp)\n      walker = prev\n    }\n  }\n\n  forEach (fn, thisp) {\n    thisp = thisp || this\n    for (let walker = this[LRU_LIST].head; walker !== null;) {\n      const next = walker.next\n      forEachStep(this, fn, walker, thisp)\n      walker = next\n    }\n  }\n\n  keys () {\n    return this[LRU_LIST].toArray().map(k => k.key)\n  }\n\n  values () {\n    return this[LRU_LIST].toArray().map(k => k.value)\n  }\n\n  reset () {\n    if (this[DISPOSE] &&\n        this[LRU_LIST] &&\n        this[LRU_LIST].length) {\n      this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))\n    }\n\n    this[CACHE] = new Map() // hash of items by key\n    this[LRU_LIST] = new Yallist() // list of items in order of use recency\n    this[LENGTH] = 0 // length of items in the list\n  }\n\n  dump () {\n    return this[LRU_LIST].map(hit =>\n      isStale(this, hit) ? false : {\n        k: hit.key,\n        v: hit.value,\n        e: hit.now + (hit.maxAge || 0)\n      }).toArray().filter(h => h)\n  }\n\n  dumpLru () {\n    return this[LRU_LIST]\n  }\n\n  set (key, value, maxAge) {\n    maxAge = maxAge || this[MAX_AGE]\n\n    if (maxAge && typeof maxAge !== 'number')\n      throw new TypeError('maxAge must be a number')\n\n    const now = maxAge ? Date.now() : 0\n    const len = this[LENGTH_CALCULATOR](value, key)\n\n    if (this[CACHE].has(key)) {\n      if (len > this[MAX]) {\n        del(this, this[CACHE].get(key))\n        return false\n      }\n\n      const node = this[CACHE].get(key)\n      const item = node.value\n\n      // dispose of the old one before overwriting\n      // split out into 2 ifs for better coverage tracking\n      if (this[DISPOSE]) {\n        if (!this[NO_DISPOSE_ON_SET])\n          this[DISPOSE](key, item.value)\n      }\n\n      item.now = now\n      item.maxAge = maxAge\n      item.value = value\n      this[LENGTH] += len - item.length\n      item.length = len\n      this.get(key)\n      trim(this)\n      return true\n    }\n\n    const hit = new Entry(key, value, len, now, maxAge)\n\n    // oversized objects fall out of cache automatically.\n    if (hit.length > this[MAX]) {\n      if (this[DISPOSE])\n        this[DISPOSE](key, value)\n\n      return false\n    }\n\n    this[LENGTH] += hit.length\n    this[LRU_LIST].unshift(hit)\n    this[CACHE].set(key, this[LRU_LIST].head)\n    trim(this)\n    return true\n  }\n\n  has (key) {\n    if (!this[CACHE].has(key)) return false\n    const hit = this[CACHE].get(key).value\n    return !isStale(this, hit)\n  }\n\n  get (key) {\n    return get(this, key, true)\n  }\n\n  peek (key) {\n    return get(this, key, false)\n  }\n\n  pop () {\n    const node = this[LRU_LIST].tail\n    if (!node)\n      return null\n\n    del(this, node)\n    return node.value\n  }\n\n  del (key) {\n    del(this, this[CACHE].get(key))\n  }\n\n  load (arr) {\n    // reset the cache\n    this.reset()\n\n    const now = Date.now()\n    // A previous serialized cache has the most recent items first\n    for (let l = arr.length - 1; l >= 0; l--) {\n      const hit = arr[l]\n      const expiresAt = hit.e || 0\n      if (expiresAt === 0)\n        // the item was created without expiration in a non aged cache\n        this.set(hit.k, hit.v)\n      else {\n        const maxAge = expiresAt - now\n        // dont add already expired items\n        if (maxAge > 0) {\n          this.set(hit.k, hit.v, maxAge)\n        }\n      }\n    }\n  }\n\n  prune () {\n    this[CACHE].forEach((value, key) => get(this, key, false))\n  }\n}\n\nconst get = (self, key, doUse) => {\n  const node = self[CACHE].get(key)\n  if (node) {\n    const hit = node.value\n    if (isStale(self, hit)) {\n      del(self, node)\n      if (!self[ALLOW_STALE])\n        return undefined\n    } else {\n      if (doUse) {\n        if (self[UPDATE_AGE_ON_GET])\n          node.value.now = Date.now()\n        self[LRU_LIST].unshiftNode(node)\n      }\n    }\n    return hit.value\n  }\n}\n\nconst isStale = (self, hit) => {\n  if (!hit || (!hit.maxAge && !self[MAX_AGE]))\n    return false\n\n  const diff = Date.now() - hit.now\n  return hit.maxAge ? diff > hit.maxAge\n    : self[MAX_AGE] && (diff > self[MAX_AGE])\n}\n\nconst trim = self => {\n  if (self[LENGTH] > self[MAX]) {\n    for (let walker = self[LRU_LIST].tail;\n      self[LENGTH] > self[MAX] && walker !== null;) {\n      // We know that we're about to delete this one, and also\n      // what the next least recently used key will be, so just\n      // go ahead and set it now.\n      const prev = walker.prev\n      del(self, walker)\n      walker = prev\n    }\n  }\n}\n\nconst del = (self, node) => {\n  if (node) {\n    const hit = node.value\n    if (self[DISPOSE])\n      self[DISPOSE](hit.key, hit.value)\n\n    self[LENGTH] -= hit.length\n    self[CACHE].delete(hit.key)\n    self[LRU_LIST].removeNode(node)\n  }\n}\n\nclass Entry {\n  constructor (key, value, length, now, maxAge) {\n    this.key = key\n    this.value = value\n    this.length = length\n    this.now = now\n    this.maxAge = maxAge || 0\n  }\n}\n\nconst forEachStep = (self, fn, node, thisp) => {\n  let hit = node.value\n  if (isStale(self, hit)) {\n    del(self, node)\n    if (!self[ALLOW_STALE])\n      hit = undefined\n  }\n  if (hit)\n    fn.call(thisp, hit.value, hit.key, self)\n}\n\nmodule.exports = LRUCache\n","'use strict'\nmodule.exports = function (Yallist) {\n  Yallist.prototype[Symbol.iterator] = function* () {\n    for (let walker = this.head; walker; walker = walker.next) {\n      yield walker.value\n    }\n  }\n}\n","'use strict'\nmodule.exports = Yallist\n\nYallist.Node = Node\nYallist.create = Yallist\n\nfunction Yallist (list) {\n  var self = this\n  if (!(self instanceof Yallist)) {\n    self = new Yallist()\n  }\n\n  self.tail = null\n  self.head = null\n  self.length = 0\n\n  if (list && typeof list.forEach === 'function') {\n    list.forEach(function (item) {\n      self.push(item)\n    })\n  } else if (arguments.length > 0) {\n    for (var i = 0, l = arguments.length; i < l; i++) {\n      self.push(arguments[i])\n    }\n  }\n\n  return self\n}\n\nYallist.prototype.removeNode = function (node) {\n  if (node.list !== this) {\n    throw new Error('removing node which does not belong to this list')\n  }\n\n  var next = node.next\n  var prev = node.prev\n\n  if (next) {\n    next.prev = prev\n  }\n\n  if (prev) {\n    prev.next = next\n  }\n\n  if (node === this.head) {\n    this.head = next\n  }\n  if (node === this.tail) {\n    this.tail = prev\n  }\n\n  node.list.length--\n  node.next = null\n  node.prev = null\n  node.list = null\n\n  return next\n}\n\nYallist.prototype.unshiftNode = function (node) {\n  if (node === this.head) {\n    return\n  }\n\n  if (node.list) {\n    node.list.removeNode(node)\n  }\n\n  var head = this.head\n  node.list = this\n  node.next = head\n  if (head) {\n    head.prev = node\n  }\n\n  this.head = node\n  if (!this.tail) {\n    this.tail = node\n  }\n  this.length++\n}\n\nYallist.prototype.pushNode = function (node) {\n  if (node === this.tail) {\n    return\n  }\n\n  if (node.list) {\n    node.list.removeNode(node)\n  }\n\n  var tail = this.tail\n  node.list = this\n  node.prev = tail\n  if (tail) {\n    tail.next = node\n  }\n\n  this.tail = node\n  if (!this.head) {\n    this.head = node\n  }\n  this.length++\n}\n\nYallist.prototype.push = function () {\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    push(this, arguments[i])\n  }\n  return this.length\n}\n\nYallist.prototype.unshift = function () {\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    unshift(this, arguments[i])\n  }\n  return this.length\n}\n\nYallist.prototype.pop = function () {\n  if (!this.tail) {\n    return undefined\n  }\n\n  var res = this.tail.value\n  this.tail = this.tail.prev\n  if (this.tail) {\n    this.tail.next = null\n  } else {\n    this.head = null\n  }\n  this.length--\n  return res\n}\n\nYallist.prototype.shift = function () {\n  if (!this.head) {\n    return undefined\n  }\n\n  var res = this.head.value\n  this.head = this.head.next\n  if (this.head) {\n    this.head.prev = null\n  } else {\n    this.tail = null\n  }\n  this.length--\n  return res\n}\n\nYallist.prototype.forEach = function (fn, thisp) {\n  thisp = thisp || this\n  for (var walker = this.head, i = 0; walker !== null; i++) {\n    fn.call(thisp, walker.value, i, this)\n    walker = walker.next\n  }\n}\n\nYallist.prototype.forEachReverse = function (fn, thisp) {\n  thisp = thisp || this\n  for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {\n    fn.call(thisp, walker.value, i, this)\n    walker = walker.prev\n  }\n}\n\nYallist.prototype.get = function (n) {\n  for (var i = 0, walker = this.head; walker !== null && i < n; i++) {\n    // abort out of the list early if we hit a cycle\n    walker = walker.next\n  }\n  if (i === n && walker !== null) {\n    return walker.value\n  }\n}\n\nYallist.prototype.getReverse = function (n) {\n  for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {\n    // abort out of the list early if we hit a cycle\n    walker = walker.prev\n  }\n  if (i === n && walker !== null) {\n    return walker.value\n  }\n}\n\nYallist.prototype.map = function (fn, thisp) {\n  thisp = thisp || this\n  var res = new Yallist()\n  for (var walker = this.head; walker !== null;) {\n    res.push(fn.call(thisp, walker.value, this))\n    walker = walker.next\n  }\n  return res\n}\n\nYallist.prototype.mapReverse = function (fn, thisp) {\n  thisp = thisp || this\n  var res = new Yallist()\n  for (var walker = this.tail; walker !== null;) {\n    res.push(fn.call(thisp, walker.value, this))\n    walker = walker.prev\n  }\n  return res\n}\n\nYallist.prototype.reduce = function (fn, initial) {\n  var acc\n  var walker = this.head\n  if (arguments.length > 1) {\n    acc = initial\n  } else if (this.head) {\n    walker = this.head.next\n    acc = this.head.value\n  } else {\n    throw new TypeError('Reduce of empty list with no initial value')\n  }\n\n  for (var i = 0; walker !== null; i++) {\n    acc = fn(acc, walker.value, i)\n    walker = walker.next\n  }\n\n  return acc\n}\n\nYallist.prototype.reduceReverse = function (fn, initial) {\n  var acc\n  var walker = this.tail\n  if (arguments.length > 1) {\n    acc = initial\n  } else if (this.tail) {\n    walker = this.tail.prev\n    acc = this.tail.value\n  } else {\n    throw new TypeError('Reduce of empty list with no initial value')\n  }\n\n  for (var i = this.length - 1; walker !== null; i--) {\n    acc = fn(acc, walker.value, i)\n    walker = walker.prev\n  }\n\n  return acc\n}\n\nYallist.prototype.toArray = function () {\n  var arr = new Array(this.length)\n  for (var i = 0, walker = this.head; walker !== null; i++) {\n    arr[i] = walker.value\n    walker = walker.next\n  }\n  return arr\n}\n\nYallist.prototype.toArrayReverse = function () {\n  var arr = new Array(this.length)\n  for (var i = 0, walker = this.tail; walker !== null; i++) {\n    arr[i] = walker.value\n    walker = walker.prev\n  }\n  return arr\n}\n\nYallist.prototype.slice = function (from, to) {\n  to = to || this.length\n  if (to < 0) {\n    to += this.length\n  }\n  from = from || 0\n  if (from < 0) {\n    from += this.length\n  }\n  var ret = new Yallist()\n  if (to < from || to < 0) {\n    return ret\n  }\n  if (from < 0) {\n    from = 0\n  }\n  if (to > this.length) {\n    to = this.length\n  }\n  for (var i = 0, walker = this.head; walker !== null && i < from; i++) {\n    walker = walker.next\n  }\n  for (; walker !== null && i < to; i++, walker = walker.next) {\n    ret.push(walker.value)\n  }\n  return ret\n}\n\nYallist.prototype.sliceReverse = function (from, to) {\n  to = to || this.length\n  if (to < 0) {\n    to += this.length\n  }\n  from = from || 0\n  if (from < 0) {\n    from += this.length\n  }\n  var ret = new Yallist()\n  if (to < from || to < 0) {\n    return ret\n  }\n  if (from < 0) {\n    from = 0\n  }\n  if (to > this.length) {\n    to = this.length\n  }\n  for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {\n    walker = walker.prev\n  }\n  for (; walker !== null && i > from; i--, walker = walker.prev) {\n    ret.push(walker.value)\n  }\n  return ret\n}\n\nYallist.prototype.splice = function (start, deleteCount /*, ...nodes */) {\n  if (start > this.length) {\n    start = this.length - 1\n  }\n  if (start < 0) {\n    start = this.length + start;\n  }\n\n  for (var i = 0, walker = this.head; walker !== null && i < start; i++) {\n    walker = walker.next\n  }\n\n  var ret = []\n  for (var i = 0; walker && i < deleteCount; i++) {\n    ret.push(walker.value)\n    walker = this.removeNode(walker)\n  }\n  if (walker === null) {\n    walker = this.tail\n  }\n\n  if (walker !== this.head && walker !== this.tail) {\n    walker = walker.prev\n  }\n\n  for (var i = 2; i < arguments.length; i++) {\n    walker = insert(this, walker, arguments[i])\n  }\n  return ret;\n}\n\nYallist.prototype.reverse = function () {\n  var head = this.head\n  var tail = this.tail\n  for (var walker = head; walker !== null; walker = walker.prev) {\n    var p = walker.prev\n    walker.prev = walker.next\n    walker.next = p\n  }\n  this.head = tail\n  this.tail = head\n  return this\n}\n\nfunction insert (self, node, value) {\n  var inserted = node === self.head ?\n    new Node(value, null, node, self) :\n    new Node(value, node, node.next, self)\n\n  if (inserted.next === null) {\n    self.tail = inserted\n  }\n  if (inserted.prev === null) {\n    self.head = inserted\n  }\n\n  self.length++\n\n  return inserted\n}\n\nfunction push (self, item) {\n  self.tail = new Node(item, self.tail, null, self)\n  if (!self.head) {\n    self.head = self.tail\n  }\n  self.length++\n}\n\nfunction unshift (self, item) {\n  self.head = new Node(item, null, self.head, self)\n  if (!self.tail) {\n    self.tail = self.head\n  }\n  self.length++\n}\n\nfunction Node (value, prev, next, list) {\n  if (!(this instanceof Node)) {\n    return new Node(value, prev, next, list)\n  }\n\n  this.list = list\n  this.value = value\n\n  if (prev) {\n    prev.next = this\n    this.prev = prev\n  } else {\n    this.prev = null\n  }\n\n  if (next) {\n    next.prev = this\n    this.next = next\n  } else {\n    this.next = null\n  }\n}\n\ntry {\n  // add if support for Symbol.iterator is present\n  require('./iterator.js')(Yallist)\n} catch (er) {}\n","(function(){\r\n  var crypt = require('crypt'),\r\n      utf8 = require('charenc').utf8,\r\n      isBuffer = require('is-buffer'),\r\n      bin = require('charenc').bin,\r\n\r\n  // The core\r\n  md5 = function (message, options) {\r\n    // Convert to byte array\r\n    if (message.constructor == String)\r\n      if (options && options.encoding === 'binary')\r\n        message = bin.stringToBytes(message);\r\n      else\r\n        message = utf8.stringToBytes(message);\r\n    else if (isBuffer(message))\r\n      message = Array.prototype.slice.call(message, 0);\r\n    else if (!Array.isArray(message) && message.constructor !== Uint8Array)\r\n      message = message.toString();\r\n    // else, assume byte array already\r\n\r\n    var m = crypt.bytesToWords(message),\r\n        l = message.length * 8,\r\n        a =  1732584193,\r\n        b = -271733879,\r\n        c = -1732584194,\r\n        d =  271733878;\r\n\r\n    // Swap endian\r\n    for (var i = 0; i < m.length; i++) {\r\n      m[i] = ((m[i] <<  8) | (m[i] >>> 24)) & 0x00FF00FF |\r\n             ((m[i] << 24) | (m[i] >>>  8)) & 0xFF00FF00;\r\n    }\r\n\r\n    // Padding\r\n    m[l >>> 5] |= 0x80 << (l % 32);\r\n    m[(((l + 64) >>> 9) << 4) + 14] = l;\r\n\r\n    // Method shortcuts\r\n    var FF = md5._ff,\r\n        GG = md5._gg,\r\n        HH = md5._hh,\r\n        II = md5._ii;\r\n\r\n    for (var i = 0; i < m.length; i += 16) {\r\n\r\n      var aa = a,\r\n          bb = b,\r\n          cc = c,\r\n          dd = d;\r\n\r\n      a = FF(a, b, c, d, m[i+ 0],  7, -680876936);\r\n      d = FF(d, a, b, c, m[i+ 1], 12, -389564586);\r\n      c = FF(c, d, a, b, m[i+ 2], 17,  606105819);\r\n      b = FF(b, c, d, a, m[i+ 3], 22, -1044525330);\r\n      a = FF(a, b, c, d, m[i+ 4],  7, -176418897);\r\n      d = FF(d, a, b, c, m[i+ 5], 12,  1200080426);\r\n      c = FF(c, d, a, b, m[i+ 6], 17, -1473231341);\r\n      b = FF(b, c, d, a, m[i+ 7], 22, -45705983);\r\n      a = FF(a, b, c, d, m[i+ 8],  7,  1770035416);\r\n      d = FF(d, a, b, c, m[i+ 9], 12, -1958414417);\r\n      c = FF(c, d, a, b, m[i+10], 17, -42063);\r\n      b = FF(b, c, d, a, m[i+11], 22, -1990404162);\r\n      a = FF(a, b, c, d, m[i+12],  7,  1804603682);\r\n      d = FF(d, a, b, c, m[i+13], 12, -40341101);\r\n      c = FF(c, d, a, b, m[i+14], 17, -1502002290);\r\n      b = FF(b, c, d, a, m[i+15], 22,  1236535329);\r\n\r\n      a = GG(a, b, c, d, m[i+ 1],  5, -165796510);\r\n      d = GG(d, a, b, c, m[i+ 6],  9, -1069501632);\r\n      c = GG(c, d, a, b, m[i+11], 14,  643717713);\r\n      b = GG(b, c, d, a, m[i+ 0], 20, -373897302);\r\n      a = GG(a, b, c, d, m[i+ 5],  5, -701558691);\r\n      d = GG(d, a, b, c, m[i+10],  9,  38016083);\r\n      c = GG(c, d, a, b, m[i+15], 14, -660478335);\r\n      b = GG(b, c, d, a, m[i+ 4], 20, -405537848);\r\n      a = GG(a, b, c, d, m[i+ 9],  5,  568446438);\r\n      d = GG(d, a, b, c, m[i+14],  9, -1019803690);\r\n      c = GG(c, d, a, b, m[i+ 3], 14, -187363961);\r\n      b = GG(b, c, d, a, m[i+ 8], 20,  1163531501);\r\n      a = GG(a, b, c, d, m[i+13],  5, -1444681467);\r\n      d = GG(d, a, b, c, m[i+ 2],  9, -51403784);\r\n      c = GG(c, d, a, b, m[i+ 7], 14,  1735328473);\r\n      b = GG(b, c, d, a, m[i+12], 20, -1926607734);\r\n\r\n      a = HH(a, b, c, d, m[i+ 5],  4, -378558);\r\n      d = HH(d, a, b, c, m[i+ 8], 11, -2022574463);\r\n      c = HH(c, d, a, b, m[i+11], 16,  1839030562);\r\n      b = HH(b, c, d, a, m[i+14], 23, -35309556);\r\n      a = HH(a, b, c, d, m[i+ 1],  4, -1530992060);\r\n      d = HH(d, a, b, c, m[i+ 4], 11,  1272893353);\r\n      c = HH(c, d, a, b, m[i+ 7], 16, -155497632);\r\n      b = HH(b, c, d, a, m[i+10], 23, -1094730640);\r\n      a = HH(a, b, c, d, m[i+13],  4,  681279174);\r\n      d = HH(d, a, b, c, m[i+ 0], 11, -358537222);\r\n      c = HH(c, d, a, b, m[i+ 3], 16, -722521979);\r\n      b = HH(b, c, d, a, m[i+ 6], 23,  76029189);\r\n      a = HH(a, b, c, d, m[i+ 9],  4, -640364487);\r\n      d = HH(d, a, b, c, m[i+12], 11, -421815835);\r\n      c = HH(c, d, a, b, m[i+15], 16,  530742520);\r\n      b = HH(b, c, d, a, m[i+ 2], 23, -995338651);\r\n\r\n      a = II(a, b, c, d, m[i+ 0],  6, -198630844);\r\n      d = II(d, a, b, c, m[i+ 7], 10,  1126891415);\r\n      c = II(c, d, a, b, m[i+14], 15, -1416354905);\r\n      b = II(b, c, d, a, m[i+ 5], 21, -57434055);\r\n      a = II(a, b, c, d, m[i+12],  6,  1700485571);\r\n      d = II(d, a, b, c, m[i+ 3], 10, -1894986606);\r\n      c = II(c, d, a, b, m[i+10], 15, -1051523);\r\n      b = II(b, c, d, a, m[i+ 1], 21, -2054922799);\r\n      a = II(a, b, c, d, m[i+ 8],  6,  1873313359);\r\n      d = II(d, a, b, c, m[i+15], 10, -30611744);\r\n      c = II(c, d, a, b, m[i+ 6], 15, -1560198380);\r\n      b = II(b, c, d, a, m[i+13], 21,  1309151649);\r\n      a = II(a, b, c, d, m[i+ 4],  6, -145523070);\r\n      d = II(d, a, b, c, m[i+11], 10, -1120210379);\r\n      c = II(c, d, a, b, m[i+ 2], 15,  718787259);\r\n      b = II(b, c, d, a, m[i+ 9], 21, -343485551);\r\n\r\n      a = (a + aa) >>> 0;\r\n      b = (b + bb) >>> 0;\r\n      c = (c + cc) >>> 0;\r\n      d = (d + dd) >>> 0;\r\n    }\r\n\r\n    return crypt.endian([a, b, c, d]);\r\n  };\r\n\r\n  // Auxiliary functions\r\n  md5._ff  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (b & c | ~b & d) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n  md5._gg  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (b & d | c & ~d) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n  md5._hh  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (b ^ c ^ d) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n  md5._ii  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n\r\n  // Package private blocksize\r\n  md5._blocksize = 16;\r\n  md5._digestsize = 16;\r\n\r\n  module.exports = function (message, options) {\r\n    if (message === undefined || message === null)\r\n      throw new Error('Illegal argument ' + message);\r\n\r\n    var digestbytes = crypt.wordsToBytes(md5(message, options));\r\n    return options && options.asBytes ? digestbytes :\r\n        options && options.asString ? bin.bytesToString(digestbytes) :\r\n        crypt.bytesToHex(digestbytes);\r\n  };\r\n\r\n})();\r\n","var simpleIsEqual = function simpleIsEqual(a, b) {\n  return a === b;\n};\n\nfunction index (resultFn, isEqual) {\n  if (isEqual === void 0) {\n    isEqual = simpleIsEqual;\n  }\n\n  var lastThis;\n  var lastArgs = [];\n  var lastResult;\n  var calledOnce = false;\n\n  var isNewArgEqualToLast = function isNewArgEqualToLast(newArg, index) {\n    return isEqual(newArg, lastArgs[index], index);\n  };\n\n  var result = function result() {\n    for (var _len = arguments.length, newArgs = new Array(_len), _key = 0; _key < _len; _key++) {\n      newArgs[_key] = arguments[_key];\n    }\n\n    if (calledOnce && lastThis === this && newArgs.length === lastArgs.length && newArgs.every(isNewArgEqualToLast)) {\n      return lastResult;\n    }\n\n    lastResult = resultFn.apply(this, newArgs);\n    calledOnce = true;\n    lastThis = this;\n    lastArgs = newArgs;\n    return lastResult;\n  };\n\n  return result;\n}\n\nexport default index;\n","(function(){\n  var _global = this;\n\n  /**\n   * JS Implementation of MurmurHash2\n   *\n   * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n   * @see http://github.com/garycourt/murmurhash-js\n   * @author <a href=\"mailto:aappleby@gmail.com\">Austin Appleby</a>\n   * @see http://sites.google.com/site/murmurhash/\n   *\n   * @param {string} str ASCII only\n   * @param {number} seed Positive integer only\n   * @return {number} 32-bit positive integer hash\n   */\n  function MurmurHashV2(str, seed) {\n    var\n      l = str.length,\n      h = seed ^ l,\n      i = 0,\n      k;\n\n    while (l >= 4) {\n      k =\n        ((str.charCodeAt(i) & 0xff)) |\n        ((str.charCodeAt(++i) & 0xff) << 8) |\n        ((str.charCodeAt(++i) & 0xff) << 16) |\n        ((str.charCodeAt(++i) & 0xff) << 24);\n\n      k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n      k ^= k >>> 24;\n      k = (((k & 0xffff) * 0x5bd1e995) + ((((k >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n\n    h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16)) ^ k;\n\n      l -= 4;\n      ++i;\n    }\n\n    switch (l) {\n    case 3: h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n    case 2: h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n    case 1: h ^= (str.charCodeAt(i) & 0xff);\n            h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n    }\n\n    h ^= h >>> 13;\n    h = (((h & 0xffff) * 0x5bd1e995) + ((((h >>> 16) * 0x5bd1e995) & 0xffff) << 16));\n    h ^= h >>> 15;\n\n    return h >>> 0;\n  };\n\n  /**\n   * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011)\n   *\n   * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n   * @see http://github.com/garycourt/murmurhash-js\n   * @author <a href=\"mailto:aappleby@gmail.com\">Austin Appleby</a>\n   * @see http://sites.google.com/site/murmurhash/\n   *\n   * @param {string} key ASCII only\n   * @param {number} seed Positive integer only\n   * @return {number} 32-bit positive integer hash\n   */\n  function MurmurHashV3(key, seed) {\n    var remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i;\n\n    remainder = key.length & 3; // key.length % 4\n    bytes = key.length - remainder;\n    h1 = seed;\n    c1 = 0xcc9e2d51;\n    c2 = 0x1b873593;\n    i = 0;\n\n    while (i < bytes) {\n        k1 =\n          ((key.charCodeAt(i) & 0xff)) |\n          ((key.charCodeAt(++i) & 0xff) << 8) |\n          ((key.charCodeAt(++i) & 0xff) << 16) |\n          ((key.charCodeAt(++i) & 0xff) << 24);\n      ++i;\n\n      k1 = ((((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16))) & 0xffffffff;\n      k1 = (k1 << 15) | (k1 >>> 17);\n      k1 = ((((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16))) & 0xffffffff;\n\n      h1 ^= k1;\n          h1 = (h1 << 13) | (h1 >>> 19);\n      h1b = ((((h1 & 0xffff) * 5) + ((((h1 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;\n      h1 = (((h1b & 0xffff) + 0x6b64) + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16));\n    }\n\n    k1 = 0;\n\n    switch (remainder) {\n      case 3: k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;\n      case 2: k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;\n      case 1: k1 ^= (key.charCodeAt(i) & 0xff);\n\n      k1 = (((k1 & 0xffff) * c1) + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff;\n      k1 = (k1 << 15) | (k1 >>> 17);\n      k1 = (((k1 & 0xffff) * c2) + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff;\n      h1 ^= k1;\n    }\n\n    h1 ^= key.length;\n\n    h1 ^= h1 >>> 16;\n    h1 = (((h1 & 0xffff) * 0x85ebca6b) + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;\n    h1 ^= h1 >>> 13;\n    h1 = ((((h1 & 0xffff) * 0xc2b2ae35) + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;\n    h1 ^= h1 >>> 16;\n\n    return h1 >>> 0;\n  }\n\n  var murmur = MurmurHashV3;\n  murmur.v2 = MurmurHashV2;\n  murmur.v3 = MurmurHashV3;\n\n  if (typeof(module) != 'undefined') {\n    module.exports = murmur;\n  } else {\n    var _previousRoot = _global.murmur;\n    murmur.noConflict = function() {\n      _global.murmur = _previousRoot;\n      return murmur;\n    }\n    _global.murmur = murmur;\n  }\n}());\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar $match = String.prototype.match;\nvar $slice = String.prototype.slice;\nvar $replace = String.prototype.replace;\nvar $toUpperCase = String.prototype.toUpperCase;\nvar $toLowerCase = String.prototype.toLowerCase;\nvar $test = RegExp.prototype.test;\nvar $concat = Array.prototype.concat;\nvar $join = Array.prototype.join;\nvar $arrSlice = Array.prototype.slice;\nvar $floor = Math.floor;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\n// ie, `has-tostringtag/shams\nvar toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol')\n    ? Symbol.toStringTag\n    : null;\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n    [].__proto__ === Array.prototype // eslint-disable-line no-proto\n        ? function (O) {\n            return O.__proto__; // eslint-disable-line no-proto\n        }\n        : null\n);\n\nfunction addNumericSeparator(num, str) {\n    if (\n        num === Infinity\n        || num === -Infinity\n        || num !== num\n        || (num && num > -1000 && num < 1000)\n        || $test.call(/e/, str)\n    ) {\n        return str;\n    }\n    var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;\n    if (typeof num === 'number') {\n        var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)\n        if (int !== num) {\n            var intStr = String(int);\n            var dec = $slice.call(str, intStr.length + 1);\n            return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');\n        }\n    }\n    return $replace.call(str, sepRegex, '$&_');\n}\n\nvar inspectCustom = require('./util.inspect').custom;\nvar inspectSymbol = inspectCustom && isSymbol(inspectCustom) ? inspectCustom : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n    var opts = options || {};\n\n    if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n        throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n    }\n    if (\n        has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n            ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n            : opts.maxStringLength !== null\n        )\n    ) {\n        throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n    }\n    var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n    if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n        throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n    }\n\n    if (\n        has(opts, 'indent')\n        && opts.indent !== null\n        && opts.indent !== '\\t'\n        && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n    ) {\n        throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n    }\n    if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {\n        throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');\n    }\n    var numericSeparator = opts.numericSeparator;\n\n    if (typeof obj === 'undefined') {\n        return 'undefined';\n    }\n    if (obj === null) {\n        return 'null';\n    }\n    if (typeof obj === 'boolean') {\n        return obj ? 'true' : 'false';\n    }\n\n    if (typeof obj === 'string') {\n        return inspectString(obj, opts);\n    }\n    if (typeof obj === 'number') {\n        if (obj === 0) {\n            return Infinity / obj > 0 ? '0' : '-0';\n        }\n        var str = String(obj);\n        return numericSeparator ? addNumericSeparator(obj, str) : str;\n    }\n    if (typeof obj === 'bigint') {\n        var bigIntStr = String(obj) + 'n';\n        return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;\n    }\n\n    var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n    if (typeof depth === 'undefined') { depth = 0; }\n    if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n        return isArray(obj) ? '[Array]' : '[Object]';\n    }\n\n    var indent = getIndent(opts, depth);\n\n    if (typeof seen === 'undefined') {\n        seen = [];\n    } else if (indexOf(seen, obj) >= 0) {\n        return '[Circular]';\n    }\n\n    function inspect(value, from, noIndent) {\n        if (from) {\n            seen = $arrSlice.call(seen);\n            seen.push(from);\n        }\n        if (noIndent) {\n            var newOpts = {\n                depth: opts.depth\n            };\n            if (has(opts, 'quoteStyle')) {\n                newOpts.quoteStyle = opts.quoteStyle;\n            }\n            return inspect_(value, newOpts, depth + 1, seen);\n        }\n        return inspect_(value, opts, depth + 1, seen);\n    }\n\n    if (typeof obj === 'function') {\n        var name = nameOf(obj);\n        var keys = arrObjKeys(obj, inspect);\n        return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');\n    }\n    if (isSymbol(obj)) {\n        var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n        return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n    }\n    if (isElement(obj)) {\n        var s = '<' + $toLowerCase.call(String(obj.nodeName));\n        var attrs = obj.attributes || [];\n        for (var i = 0; i < attrs.length; i++) {\n            s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n        }\n        s += '>';\n        if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n        s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>';\n        return s;\n    }\n    if (isArray(obj)) {\n        if (obj.length === 0) { return '[]'; }\n        var xs = arrObjKeys(obj, inspect);\n        if (indent && !singleLineValues(xs)) {\n            return '[' + indentedJoin(xs, indent) + ']';\n        }\n        return '[ ' + $join.call(xs, ', ') + ' ]';\n    }\n    if (isError(obj)) {\n        var parts = arrObjKeys(obj, inspect);\n        if ('cause' in obj && !isEnumerable.call(obj, 'cause')) {\n            return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';\n        }\n        if (parts.length === 0) { return '[' + String(obj) + ']'; }\n        return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';\n    }\n    if (typeof obj === 'object' && customInspect) {\n        if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {\n            return obj[inspectSymbol]();\n        } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n            return obj.inspect();\n        }\n    }\n    if (isMap(obj)) {\n        var mapParts = [];\n        mapForEach.call(obj, function (value, key) {\n            mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n        });\n        return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n    }\n    if (isSet(obj)) {\n        var setParts = [];\n        setForEach.call(obj, function (value) {\n            setParts.push(inspect(value, obj));\n        });\n        return collectionOf('Set', setSize.call(obj), setParts, indent);\n    }\n    if (isWeakMap(obj)) {\n        return weakCollectionOf('WeakMap');\n    }\n    if (isWeakSet(obj)) {\n        return weakCollectionOf('WeakSet');\n    }\n    if (isWeakRef(obj)) {\n        return weakCollectionOf('WeakRef');\n    }\n    if (isNumber(obj)) {\n        return markBoxed(inspect(Number(obj)));\n    }\n    if (isBigInt(obj)) {\n        return markBoxed(inspect(bigIntValueOf.call(obj)));\n    }\n    if (isBoolean(obj)) {\n        return markBoxed(booleanValueOf.call(obj));\n    }\n    if (isString(obj)) {\n        return markBoxed(inspect(String(obj)));\n    }\n    if (!isDate(obj) && !isRegExp(obj)) {\n        var ys = arrObjKeys(obj, inspect);\n        var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n        var protoTag = obj instanceof Object ? '' : 'null prototype';\n        var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';\n        var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n        var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');\n        if (ys.length === 0) { return tag + '{}'; }\n        if (indent) {\n            return tag + '{' + indentedJoin(ys, indent) + '}';\n        }\n        return tag + '{ ' + $join.call(ys, ', ') + ' }';\n    }\n    return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n    var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n    return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n    return $replace.call(String(s), /\"/g, '&quot;');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n    if (hasShammedSymbols) {\n        return obj && typeof obj === 'object' && obj instanceof Symbol;\n    }\n    if (typeof obj === 'symbol') {\n        return true;\n    }\n    if (!obj || typeof obj !== 'object' || !symToString) {\n        return false;\n    }\n    try {\n        symToString.call(obj);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nfunction isBigInt(obj) {\n    if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n        return false;\n    }\n    try {\n        bigIntValueOf.call(obj);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n    return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n    return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n    if (f.name) { return f.name; }\n    var m = $match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n    if (m) { return m[1]; }\n    return null;\n}\n\nfunction indexOf(xs, x) {\n    if (xs.indexOf) { return xs.indexOf(x); }\n    for (var i = 0, l = xs.length; i < l; i++) {\n        if (xs[i] === x) { return i; }\n    }\n    return -1;\n}\n\nfunction isMap(x) {\n    if (!mapSize || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        mapSize.call(x);\n        try {\n            setSize.call(x);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof Map; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakMap(x) {\n    if (!weakMapHas || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakMapHas.call(x, weakMapHas);\n        try {\n            weakSetHas.call(x, weakSetHas);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakRef(x) {\n    if (!weakRefDeref || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakRefDeref.call(x);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nfunction isSet(x) {\n    if (!setSize || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        setSize.call(x);\n        try {\n            mapSize.call(x);\n        } catch (m) {\n            return true;\n        }\n        return x instanceof Set; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakSet(x) {\n    if (!weakSetHas || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakSetHas.call(x, weakSetHas);\n        try {\n            weakMapHas.call(x, weakMapHas);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isElement(x) {\n    if (!x || typeof x !== 'object') { return false; }\n    if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n        return true;\n    }\n    return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n    if (str.length > opts.maxStringLength) {\n        var remaining = str.length - opts.maxStringLength;\n        var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n        return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;\n    }\n    // eslint-disable-next-line no-control-regex\n    var s = $replace.call($replace.call(str, /(['\\\\])/g, '\\\\$1'), /[\\x00-\\x1f]/g, lowbyte);\n    return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n    var n = c.charCodeAt(0);\n    var x = {\n        8: 'b',\n        9: 't',\n        10: 'n',\n        12: 'f',\n        13: 'r'\n    }[n];\n    if (x) { return '\\\\' + x; }\n    return '\\\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));\n}\n\nfunction markBoxed(str) {\n    return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n    return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n    var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');\n    return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n    for (var i = 0; i < xs.length; i++) {\n        if (indexOf(xs[i], '\\n') >= 0) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction getIndent(opts, depth) {\n    var baseIndent;\n    if (opts.indent === '\\t') {\n        baseIndent = '\\t';\n    } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n        baseIndent = $join.call(Array(opts.indent + 1), ' ');\n    } else {\n        return null;\n    }\n    return {\n        base: baseIndent,\n        prev: $join.call(Array(depth + 1), baseIndent)\n    };\n}\n\nfunction indentedJoin(xs, indent) {\n    if (xs.length === 0) { return ''; }\n    var lineJoiner = '\\n' + indent.prev + indent.base;\n    return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n    var isArr = isArray(obj);\n    var xs = [];\n    if (isArr) {\n        xs.length = obj.length;\n        for (var i = 0; i < obj.length; i++) {\n            xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n        }\n    }\n    var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n    var symMap;\n    if (hasShammedSymbols) {\n        symMap = {};\n        for (var k = 0; k < syms.length; k++) {\n            symMap['$' + syms[k]] = syms[k];\n        }\n    }\n\n    for (var key in obj) { // eslint-disable-line no-restricted-syntax\n        if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n        if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n        if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n            // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n            continue; // eslint-disable-line no-restricted-syntax, no-continue\n        } else if ($test.call(/[^\\w$]/, key)) {\n            xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n        } else {\n            xs.push(key + ': ' + inspect(obj[key], obj));\n        }\n    }\n    if (typeof gOPS === 'function') {\n        for (var j = 0; j < syms.length; j++) {\n            if (isEnumerable.call(obj, syms[j])) {\n                xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n            }\n        }\n    }\n    return xs;\n}\n","module.exports = require('util').inspect;\n","'use strict';\n\nvar numberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t}\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (numberIsNaN(a) && numberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Object);\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\treturn typeof Object.is === 'function' ? Object.is : implementation;\n};\n","'use strict';\n\nvar getPolyfill = require('./polyfill');\nvar define = require('define-properties');\n\nmodule.exports = function shimObjectIs() {\n\tvar polyfill = getPolyfill();\n\tdefine(Object, { is: polyfill }, {\n\t\tis: function testObjectIs() {\n\t\t\treturn Object.is !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = require('./isArguments'); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n","'use strict';\n\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","'use strict';\n\n// modified from https://github.com/es-shims/es6-shim\nvar keys = require('object-keys');\nvar canBeObject = function (obj) {\n\treturn typeof obj !== 'undefined' && obj !== null;\n};\nvar hasSymbols = require('has-symbols/shams')();\nvar callBound = require('call-bind/callBound');\nvar toObject = Object;\nvar $push = callBound('Array.prototype.push');\nvar $propIsEnumerable = callBound('Object.prototype.propertyIsEnumerable');\nvar originalGetSymbols = hasSymbols ? Object.getOwnPropertySymbols : null;\n\n// eslint-disable-next-line no-unused-vars\nmodule.exports = function assign(target, source1) {\n\tif (!canBeObject(target)) { throw new TypeError('target must be an object'); }\n\tvar objTarget = toObject(target);\n\tvar s, source, i, props, syms, value, key;\n\tfor (s = 1; s < arguments.length; ++s) {\n\t\tsource = toObject(arguments[s]);\n\t\tprops = keys(source);\n\t\tvar getSymbols = hasSymbols && (Object.getOwnPropertySymbols || originalGetSymbols);\n\t\tif (getSymbols) {\n\t\t\tsyms = getSymbols(source);\n\t\t\tfor (i = 0; i < syms.length; ++i) {\n\t\t\t\tkey = syms[i];\n\t\t\t\tif ($propIsEnumerable(source, key)) {\n\t\t\t\t\t$push(props, key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (i = 0; i < props.length; ++i) {\n\t\t\tkey = props[i];\n\t\t\tvalue = source[key];\n\t\t\tif ($propIsEnumerable(source, key)) {\n\t\t\t\tobjTarget[key] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn objTarget;\n};\n","'use strict';\n\nvar defineProperties = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind.apply(getPolyfill());\n// eslint-disable-next-line no-unused-vars\nvar bound = function assign(target, source1) {\n\treturn polyfill(Object, arguments);\n};\n\ndefineProperties(bound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = bound;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar lacksProperEnumerationOrder = function () {\n\tif (!Object.assign) {\n\t\treturn false;\n\t}\n\t/*\n\t * v8, specifically in node 4.x, has a bug with incorrect property enumeration order\n\t * note: this does not detect the bug unless there's 20 characters\n\t */\n\tvar str = 'abcdefghijklmnopqrst';\n\tvar letters = str.split('');\n\tvar map = {};\n\tfor (var i = 0; i < letters.length; ++i) {\n\t\tmap[letters[i]] = letters[i];\n\t}\n\tvar obj = Object.assign({}, map);\n\tvar actual = '';\n\tfor (var k in obj) {\n\t\tactual += k;\n\t}\n\treturn str !== actual;\n};\n\nvar assignHasPendingExceptions = function () {\n\tif (!Object.assign || !Object.preventExtensions) {\n\t\treturn false;\n\t}\n\t/*\n\t * Firefox 37 still has \"pending exception\" logic in its Object.assign implementation,\n\t * which is 72% slower than our shim, and Firefox 40's native implementation.\n\t */\n\tvar thrower = Object.preventExtensions({ 1: 2 });\n\ttry {\n\t\tObject.assign(thrower, 'xy');\n\t} catch (e) {\n\t\treturn thrower[1] === 'y';\n\t}\n\treturn false;\n};\n\nmodule.exports = function getPolyfill() {\n\tif (!Object.assign) {\n\t\treturn implementation;\n\t}\n\tif (lacksProperEnumerationOrder()) {\n\t\treturn implementation;\n\t}\n\tif (assignHasPendingExceptions()) {\n\t\treturn implementation;\n\t}\n\treturn Object.assign;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar getPolyfill = require('./polyfill');\n\nmodule.exports = function shimAssign() {\n\tvar polyfill = getPolyfill();\n\tdefine(\n\t\tObject,\n\t\t{ assign: polyfill },\n\t\t{ assign: function () { return Object.assign !== polyfill; } }\n\t);\n\treturn polyfill;\n};\n","'use strict';\n\nvar $Object = Object;\nvar $TypeError = TypeError;\n\nmodule.exports = function flags() {\n\tif (this != null && this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.hasIndices) {\n\t\tresult += 'd';\n\t}\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar flagsBound = callBind(getPolyfill());\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar supportsDescriptors = require('define-properties').supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function getPolyfill() {\n\tif (supportsDescriptors && (/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (descriptor && typeof descriptor.get === 'function' && typeof (/a/).dotAll === 'boolean') {\n\t\t\treturn descriptor.get;\n\t\t}\n\t}\n\treturn implementation;\n};\n","'use strict';\n\nvar supportsDescriptors = require('define-properties').supportsDescriptors;\nvar getPolyfill = require('./polyfill');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bind/callBound');\nvar inspect = require('object-inspect');\n\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n * This function traverses the list returning the node corresponding to the\n * given key.\n *\n * That node is also moved to the head of the list, so that if it's accessed\n * again we don't need to traverse the whole list. By doing so, all the recently\n * used nodes can be accessed relatively quickly.\n */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\tfor (var prev = list, curr; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\tcurr.next = list.next;\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = { // eslint-disable-line no-param-reassign\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t};\n\t}\n};\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\nmodule.exports = function getSideChannel() {\n\tvar $wm;\n\tvar $m;\n\tvar $o;\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Initialize the linked list as an empty node, so that we don't have\n\t\t\t\t\t * to special-case handling of the first node: we can always refer to\n\t\t\t\t\t * it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t */\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n","'use strict';\nmodule.exports = path => {\n\tconst isExtendedLengthPath = /^\\\\\\\\\\?\\\\/.test(path);\n\tconst hasNonAscii = /[^\\u0000-\\u0080]+/.test(path); // eslint-disable-line no-control-regex\n\n\tif (isExtendedLengthPath || hasNonAscii) {\n\t\treturn path;\n\t}\n\n\treturn path.replace(/\\\\/g, '/');\n};\n","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n  byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n  var i = offset || 0;\n  var bth = byteToHex;\n  // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n  return ([bth[buf[i++]], bth[buf[i++]], \n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]], '-',\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]]]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","// Unique ID creation requires a high quality random # generator.  In node.js\n// this is pretty straight-forward - we use the crypto API.\n\nvar crypto = require('crypto');\n\nmodule.exports = function nodeRNG() {\n  return crypto.randomBytes(16);\n};\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n  var i = buf && offset || 0;\n  var b = buf || [];\n\n  options = options || {};\n  var node = options.node || _nodeId;\n  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n  // node and clockseq need to be initialized to random values if they're not\n  // specified.  We do this lazily to minimize issues related to insufficient\n  // system entropy.  See #189\n  if (node == null || clockseq == null) {\n    var seedBytes = rng();\n    if (node == null) {\n      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n      node = _nodeId = [\n        seedBytes[0] | 0x01,\n        seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n      ];\n    }\n    if (clockseq == null) {\n      // Per 4.2.2, randomize (14 bit) clockseq\n      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n    }\n  }\n\n  // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n  // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n  // Time since last uuid creation (in msecs)\n  var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n  // Per 4.2.1.2, Bump clockseq on clock regression\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  }\n\n  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  }\n\n  // Per 4.2.1.2 Throw error if too many uuids are requested\n  if (nsecs >= 10000) {\n    throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n  }\n\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq;\n\n  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n  msecs += 12219292800000;\n\n  // `time_low`\n  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n  b[i++] = tl >>> 24 & 0xff;\n  b[i++] = tl >>> 16 & 0xff;\n  b[i++] = tl >>> 8 & 0xff;\n  b[i++] = tl & 0xff;\n\n  // `time_mid`\n  var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff;\n\n  // `time_high_and_version`\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n  b[i++] = tmh >>> 16 & 0xff;\n\n  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n  b[i++] = clockseq >>> 8 | 0x80;\n\n  // `clock_seq_low`\n  b[i++] = clockseq & 0xff;\n\n  // `node`\n  for (var n = 0; n < 6; ++n) {\n    b[i + n] = node[n];\n  }\n\n  return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n  var i = buf && offset || 0;\n\n  if (typeof(options) == 'string') {\n    buf = options === 'binary' ? new Array(16) : null;\n    options = null;\n  }\n  options = options || {};\n\n  var rnds = options.random || (options.rng || rng)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = (rnds[6] & 0x0f) | 0x40;\n  rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    for (var ii = 0; ii < 16; ++ii) {\n      buf[i + ii] = rnds[ii];\n    }\n  }\n\n  return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n","'use strict';\n\nvar isString = require('is-string');\nvar isNumber = require('is-number-object');\nvar isBoolean = require('is-boolean-object');\nvar isSymbol = require('is-symbol');\nvar isBigInt = require('is-bigint');\n\n// eslint-disable-next-line consistent-return\nmodule.exports = function whichBoxedPrimitive(value) {\n\t// eslint-disable-next-line eqeqeq\n\tif (value == null || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\treturn null;\n\t}\n\tif (isString(value)) {\n\t\treturn 'String';\n\t}\n\tif (isNumber(value)) {\n\t\treturn 'Number';\n\t}\n\tif (isBoolean(value)) {\n\t\treturn 'Boolean';\n\t}\n\tif (isSymbol(value)) {\n\t\treturn 'Symbol';\n\t}\n\tif (isBigInt(value)) {\n\t\treturn 'BigInt';\n\t}\n};\n","'use strict';\n\nvar isMap = require('is-map');\nvar isSet = require('is-set');\nvar isWeakMap = require('is-weakmap');\nvar isWeakSet = require('is-weakset');\n\nmodule.exports = function whichCollection(value) {\n\tif (value && typeof value === 'object') {\n\t\tif (isMap(value)) {\n\t\t\treturn 'Map';\n\t\t}\n\t\tif (isSet(value)) {\n\t\t\treturn 'Set';\n\t\t}\n\t\tif (isWeakMap(value)) {\n\t\t\treturn 'WeakMap';\n\t\t}\n\t\tif (isWeakSet(value)) {\n\t\t\treturn 'WeakSet';\n\t\t}\n\t}\n\treturn false;\n};\n","'use strict';\n\nvar forEach = require('foreach');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar toStrTags = {};\nvar gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tif (typeof g[typedArray] === 'function') {\n\t\t\tvar arr = new g[typedArray]();\n\t\t\tif (Symbol.toStringTag in arr) {\n\t\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\t\tif (!descriptor) {\n\t\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t\t}\n\t\t\t\ttoStrTags[typedArray] = descriptor.get;\n\t\t\t}\n\t\t}\n\t});\n}\n\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\tvar foundName = false;\n\tforEach(toStrTags, function (getter, typedArray) {\n\t\tif (!foundName) {\n\t\t\ttry {\n\t\t\t\tvar name = getter.call(value);\n\t\t\t\tif (name === typedArray) {\n\t\t\t\t\tfoundName = name;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t}\n\t});\n\treturn foundName;\n};\n\nvar isTypedArray = require('is-typed-array');\n\nmodule.exports = function whichTypedArray(value) {\n\tif (!isTypedArray(value)) { return false; }\n\tif (!hasToStringTag || !(Symbol.toStringTag in value)) { return $slice($toString(value), 8, -1); }\n\treturn tryTypedArrays(value);\n};\n","class Query {\n  constructor(state) {\n    this.state = {\n      filterExpressions: state.filterExpressions || [],\n      selectExpressions: state.selectExpressions || [],\n      groupExpressions: state.groupExpressions || [],\n      orderExpressions: state.orderExpressions || [],\n      calculation: false,\n      rawMode: false,\n      withDead: false,\n      validateRefs: true,\n      limit: null,\n      offset: null,\n      ...state\n    };\n  }\n\n  filter(expr) {\n    return new Query({\n      ...this.state,\n      filterExpressions: [...this.state.filterExpressions, expr]\n    });\n  }\n\n  unfilter(exprs) {\n    let exprSet = new Set(exprs);\n    return new Query({\n      ...this.state,\n      filterExpressions: this.state.filterExpressions.filter(\n        expr => !exprSet.has(Object.keys(expr)[0])\n      )\n    });\n  }\n\n  select(exprs = []) {\n    if (!Array.isArray(exprs)) {\n      exprs = [exprs];\n    }\n\n    let query = new Query({ ...this.state, selectExpressions: exprs });\n    query.state.calculation = false;\n    return query;\n  }\n\n  calculate(expr) {\n    let query = this.select({ result: expr });\n    query.state.calculation = true;\n    return query;\n  }\n\n  groupBy(exprs) {\n    if (!Array.isArray(exprs)) {\n      exprs = [exprs];\n    }\n\n    return new Query({\n      ...this.state,\n      groupExpressions: [...this.state.groupExpressions, ...exprs]\n    });\n  }\n\n  orderBy(exprs) {\n    if (!Array.isArray(exprs)) {\n      exprs = [exprs];\n    }\n\n    return new Query({\n      ...this.state,\n      orderExpressions: [...this.state.orderExpressions, ...exprs]\n    });\n  }\n\n  limit(num) {\n    return new Query({ ...this.state, limit: num });\n  }\n\n  offset(num) {\n    return new Query({ ...this.state, offset: num });\n  }\n\n  raw() {\n    return new Query({ ...this.state, rawMode: true });\n  }\n\n  withDead() {\n    return new Query({ ...this.state, withDead: true });\n  }\n\n  withoutValidatedRefs() {\n    return new Query({ ...this.state, validateRefs: false });\n  }\n\n  options(opts) {\n    return new Query({ ...this.state, tableOptions: opts });\n  }\n\n  serialize() {\n    return this.state;\n  }\n}\n\nfunction getPrimaryOrderBy(query, defaultOrderBy) {\n  let orderExprs = query.serialize().orderExpressions;\n  if (orderExprs.length === 0) {\n    if (defaultOrderBy) {\n      return { order: 'asc', ...defaultOrderBy };\n    }\n    return null;\n  }\n\n  let firstOrder = orderExprs[0];\n  if (typeof firstOrder === 'string') {\n    return { field: firstOrder, order: 'asc' };\n  }\n  // Handle this form: { field: 'desc' }\n  let [field] = Object.keys(firstOrder);\n  return { field, order: firstOrder[field] };\n}\n\nmodule.exports = function q(table) {\n  return new Query({ table });\n};\n","// TODO: comment on why it works this way\n\nlet send;\n\nmodule.exports = { send };\n","const q = require('./app/query');\nconst injected = require('./injected');\n\nfunction send(name, args) {\n  return injected.send(name, args);\n}\n\nasync function runImport(name, func) {\n  await send('api/start-import', { budgetName: name });\n  try {\n    await func();\n  } catch (e) {\n    await send('api/abort-import');\n    throw e;\n  }\n  await send('api/finish-import');\n}\n\nasync function loadBudget(budgetId) {\n  return send('api/load-budget', { id: budgetId });\n}\n\nasync function batchBudgetUpdates(func) {\n  await send('api/batch-budget-start');\n  try {\n    await func();\n  } finally {\n    await send('api/batch-budget-end');\n  }\n}\n\nfunction runQuery(query) {\n  return send('api/query', { query: query.serialize() });\n}\n\nfunction getBudgetMonths() {\n  return send('api/budget-months');\n}\n\nfunction getBudgetMonth(month) {\n  return send('api/budget-month', { month });\n}\n\nfunction setBudgetAmount(month, categoryId, value) {\n  return send('api/budget-set-amount', { month, categoryId, amount: value });\n}\n\nfunction setBudgetCarryover(month, categoryId, flag) {\n  return send('api/budget-set-carryover', { month, categoryId, flag });\n}\n\nfunction addTransactions(accountId, transactions) {\n  return send('api/transactions-add', { accountId, transactions });\n}\n\nfunction importTransactions(accountId, transactions) {\n  return send('api/transactions-import', { accountId, transactions });\n}\n\nfunction getTransactions(accountId, startDate, endDate) {\n  return send('api/transactions-get', { accountId, startDate, endDate });\n}\n\nfunction filterTransactions(accountId, text) {\n  return send('api/transactions-filter', { accountId, text });\n}\n\nfunction updateTransaction(id, fields) {\n  return send('api/transaction-update', { id, fields });\n}\n\nfunction deleteTransaction(id) {\n  return send('api/transaction-delete', { id });\n}\n\nfunction getAccounts() {\n  return send('api/accounts-get');\n}\n\nfunction createAccount(account, initialBalance) {\n  return send('api/account-create', { account, initialBalance });\n}\n\nfunction updateAccount(id, fields) {\n  return send('api/account-update', { id, fields });\n}\n\nfunction closeAccount(id, transferAccountId, transferCategoryId) {\n  return send('api/account-close', {\n    id,\n    transferAccountId,\n    transferCategoryId\n  });\n}\n\nfunction reopenAccount(id) {\n  return send('api/account-reopen', { id });\n}\n\nfunction deleteAccount(id) {\n  return send('api/account-delete', { id });\n}\n\nfunction getCategoryGroups() {\n  return send('api/categories-get', { grouped: true });\n}\n\nfunction createCategoryGroup(group) {\n  return send('api/category-group-create', { group });\n}\n\nfunction updateCategoryGroup(id, fields) {\n  return send('api/category-group-update', { id, fields });\n}\n\nfunction deleteCategoryGroup(id, transferCategoryId) {\n  return send('api/category-group-delete', { id, transferCategoryId });\n}\n\nfunction getCategories() {\n  return send('api/categories-get', { grouped: false });\n}\n\nfunction createCategory(category) {\n  return send('api/category-create', { category });\n}\n\nfunction updateCategory(id, fields) {\n  return send('api/category-update', { id, fields });\n}\n\nfunction deleteCategory(id, transferCategoryId) {\n  return send('api/category-delete', { id, transferCategoryId });\n}\n\nfunction getPayees() {\n  return send('api/payees-get');\n}\n\nfunction createPayee(payee) {\n  return send('api/payee-create', { payee });\n}\n\nfunction updatePayee(id, fields) {\n  return send('api/payee-update', { id, fields });\n}\n\nfunction deletePayee(id) {\n  return send('api/payee-delete', { id });\n}\n\nfunction getPayeeRules(payeeId) {\n  return send('api/payee-rules-get', { payeeId });\n}\n\nfunction createPayeeRule(payeeId, rule) {\n  return send('api/payee-rule-create', { payee_id: payeeId, rule });\n}\n\nfunction updatePayeeRule(id, fields) {\n  return send('api/payee-rule-update', { id, fields });\n}\n\nfunction deletePayeeRule(id) {\n  return send('api/payee-rule-delete', { id });\n}\n\nmodule.exports = {\n  runImport,\n\n  runQuery,\n  q,\n\n  loadBudget,\n  batchBudgetUpdates,\n  getBudgetMonths,\n  getBudgetMonth,\n  setBudgetAmount,\n  setBudgetCarryover,\n\n  addTransactions,\n  importTransactions,\n  filterTransactions,\n  getTransactions,\n  updateTransaction,\n  deleteTransaction,\n\n  getAccounts,\n  createAccount,\n  updateAccount,\n  closeAccount,\n  reopenAccount,\n  deleteAccount,\n\n  getCategories,\n  createCategoryGroup,\n  updateCategoryGroup,\n  deleteCategoryGroup,\n  createCategory,\n  updateCategory,\n  deleteCategory,\n\n  getPayees,\n  createPayee,\n  updatePayee,\n  deletePayee,\n  getPayeeRules,\n  createPayeeRule,\n  deletePayeeRule,\n  updatePayeeRule\n};\n","const d = require('date-fns');\nconst normalizePathSep = require('slash');\nconst uuid = require('uuid');\nconst AdmZip = require('adm-zip');\nconst actual = require('@actual-app/api/methods');\nconst { amountToInteger } = require('@actual-app/api/utils');\n\n// Utils\n\nfunction mapAccountType(type) {\n  switch (type) {\n    case 'Cash':\n    case 'Checking':\n      return 'checking';\n    case 'CreditCard':\n      return 'credit';\n    case 'Savings':\n      return 'savings';\n    case 'InvestmentAccount':\n      return 'investment';\n    case 'Mortgage':\n      return 'mortgage';\n    default:\n      return 'other';\n  }\n}\n\nfunction sortByKey(arr, key) {\n  return [...arr].sort((item1, item2) => {\n    if (item1[key] < item2[key]) {\n      return -1;\n    } else if (item1[key] > item2[key]) {\n      return 1;\n    }\n    return 0;\n  });\n}\n\nfunction groupBy(arr, keyName) {\n  return arr.reduce(function(obj, item) {\n    var key = item[keyName];\n    if (!obj.hasOwnProperty(key)) {\n      obj[key] = [];\n    }\n    obj[key].push(item);\n    return obj;\n  }, {});\n}\n\nfunction _parse(value) {\n  if (typeof value === 'string') {\n    // We don't want parsing to take local timezone into account,\n    // which parsing a string does. Pass the integers manually to\n    // bypass it.\n\n    let [year, month, day] = value.split('-');\n    if (day != null) {\n      return new Date(parseInt(year), parseInt(month) - 1, parseInt(day));\n    } else if (month != null) {\n      return new Date(parseInt(year), parseInt(month) - 1, 1);\n    } else {\n      return new Date(parseInt(year), 0, 1);\n    }\n  }\n  return value;\n}\n\nfunction monthFromDate(date) {\n  return d.format(_parse(date), 'yyyy-MM');\n}\n\nfunction getCurrentMonth() {\n  return d.format(new Date(), 'yyyy-MM');\n}\n\n// Importer\n\nasync function importAccounts(data, entityIdMap) {\n  return Promise.all(\n    data.accounts.map(async account => {\n      if (!account.isTombstone) {\n        const id = await actual.createAccount({\n          type: mapAccountType(account.accountType),\n          name: account.accountName,\n          offbudget: account.onBudget ? false : true,\n          closed: account.hidden ? true : false\n        });\n        entityIdMap.set(account.entityId, id);\n      }\n    })\n  );\n}\n\nasync function importCategories(data, entityIdMap) {\n  const masterCategories = sortByKey(data.masterCategories, 'sortableIndex');\n\n  await Promise.all(\n    masterCategories.map(async masterCategory => {\n      if (\n        masterCategory.type === 'OUTFLOW' &&\n        !masterCategory.isTombstone &&\n        masterCategory.subCategories &&\n        masterCategory.subCategories.some(cat => !cat.isTombstone) > 0\n      ) {\n        const id = await actual.createCategoryGroup({\n          name: masterCategory.name,\n          is_income: false\n        });\n        entityIdMap.set(masterCategory.entityId, id);\n\n        if (masterCategory.subCategories) {\n          const subCategories = sortByKey(\n            masterCategory.subCategories,\n            'sortableIndex'\n          );\n          subCategories.reverse();\n\n          // This can't be done in parallel because sort order depends\n          // on insertion order\n          for (let category of subCategories) {\n            if (!category.isTombstone) {\n              const id = await actual.createCategory({\n                name: category.name,\n                group_id: entityIdMap.get(category.masterCategoryId)\n              });\n              entityIdMap.set(category.entityId, id);\n            }\n          }\n        }\n      }\n    })\n  );\n}\n\nasync function importPayees(data, entityIdMap) {\n  for (let payee of data.payees) {\n    if (!payee.isTombstone) {\n      let id = await actual.createPayee({\n        name: payee.name,\n        category: entityIdMap.get(payee.autoFillCategoryId) || null,\n        transfer_acct: entityIdMap.get(payee.targetAccountId) || null\n      });\n\n      // TODO: import payee rules\n\n      entityIdMap.set(payee.entityId, id);\n    }\n  }\n}\n\nasync function importTransactions(data, entityIdMap) {\n  const categories = await actual.getCategories();\n  const incomeCategoryId = categories.find(cat => cat.name === 'Income').id;\n  const accounts = await actual.getAccounts();\n  const payees = await actual.getPayees();\n\n  function getCategory(id) {\n    if (id == null || id === 'Category/__Split__') {\n      return null;\n    } else if (\n      id === 'Category/__ImmediateIncome__' ||\n      id === 'Category/__DeferredIncome__'\n    ) {\n      return incomeCategoryId;\n    }\n    return entityIdMap.get(id);\n  }\n\n  function isOffBudget(acctId) {\n    let acct = accounts.find(acct => acct.id === acctId);\n    if (!acct) {\n      throw new Error('Could not find account for transaction when importing');\n    }\n    return acct.offbudget;\n  }\n\n  // Go ahead and generate ids for all of the transactions so we can\n  // reliably resolve transfers\n  for (let transaction of data.transactions) {\n    entityIdMap.set(transaction.entityId, uuid.v4());\n  }\n\n  let sortOrder = 1;\n  let transactionsGrouped = groupBy(data.transactions, 'accountId');\n\n  await Promise.all(\n    Object.keys(transactionsGrouped).map(async accountId => {\n      let transactions = transactionsGrouped[accountId];\n\n      let toImport = transactions\n        .map(transaction => {\n          if (transaction.isTombstone) {\n            return;\n          }\n\n          let id = entityIdMap.get(transaction.entityId);\n          let transferId =\n            entityIdMap.get(transaction.transferTransactionId) || null;\n\n          let payee = null;\n          if (transferId) {\n            payee = payees.find(\n              p =>\n                p.transfer_acct === entityIdMap.get(transaction.targetAccountId)\n            ).id;\n          } else {\n            payee = entityIdMap.get(transaction.payeeId);\n          }\n\n          let newTransaction = {\n            id,\n            amount: amountToInteger(transaction.amount),\n            category: isOffBudget(entityIdMap.get(accountId))\n              ? null\n              : getCategory(transaction.categoryId),\n            date: transaction.date,\n            notes: transaction.memo || null,\n            payee,\n            transfer_id: transferId\n          };\n\n          newTransaction.subtransactions =\n            transaction.subTransactions &&\n            transaction.subTransactions.map((t, i) => {\n              return {\n                amount: amountToInteger(t.amount),\n                category: getCategory(t.categoryId)\n              };\n            });\n\n          return newTransaction;\n        })\n        .filter(x => x);\n\n      await actual.addTransactions(entityIdMap.get(accountId), toImport);\n    })\n  );\n}\n\nfunction fillInBudgets(data, categoryBudgets) {\n  // YNAB only contains entries for categories that have been actually\n  // budgeted. That would be fine except that we need to set the\n  // \"carryover\" flag on each month when carrying debt across months.\n  // To make sure our system has a chance to set this flag on each\n  // category, make sure a budget exists for every category of every\n  // month.\n  const budgets = [...categoryBudgets];\n  data.masterCategories.forEach(masterCategory => {\n    if (masterCategory.subCategories) {\n      masterCategory.subCategories.forEach(category => {\n        if (!budgets.find(b => b.categoryId === category.entityId)) {\n          budgets.push({\n            budgeted: 0,\n            categoryId: category.entityId\n          });\n        }\n      });\n    }\n  });\n  return budgets;\n}\n\nasync function importBudgets(data, entityIdMap) {\n  let budgets = sortByKey(data.monthlyBudgets, 'month');\n  let earliestMonth = monthFromDate(budgets[0].month);\n  let currentMonth = getCurrentMonth();\n\n  await actual.batchBudgetUpdates(async () => {\n    const carryoverFlags = {};\n\n    for (let budget of budgets) {\n      let filled = fillInBudgets(\n        data,\n        budget.monthlySubCategoryBudgets.filter(b => !b.isTombstone)\n      );\n\n      await Promise.all(\n        filled.map(async catBudget => {\n          let amount = amountToInteger(catBudget.budgeted);\n          let catId = entityIdMap.get(catBudget.categoryId);\n          let month = monthFromDate(budget.month);\n          if (!catId) {\n            return;\n          }\n\n          await actual.setBudgetAmount(month, catId, amount);\n\n          if (catBudget.overspendingHandling === 'AffectsBuffer') {\n            // Turn off the carryover flag so it doesn't propagate\n            // to future months\n            carryoverFlags[catId] = false;\n          } else if (\n            catBudget.overspendingHandling === 'Confined' ||\n            carryoverFlags[catId]\n          ) {\n            // Overspending has switched to carryover, set the\n            // flag so it propagates to future months\n            carryoverFlags[catId] = true;\n\n            await actual.setBudgetCarryover(month, catId, true);\n          }\n        })\n      );\n    }\n  });\n}\n\nfunction estimateRecentness(str) {\n  // The \"recentness\" is the total amount of changes that this device\n  // is aware of, which is estimated by summing up all of the version\n  // numbers that its aware of. This works because version numbers are\n  // increasing integers.\n  return str.split(',').reduce((total, version) => {\n    const [_, number] = version.split('-');\n    return total + parseInt(number);\n  }, 0);\n}\n\nfunction findLatestDevice(zipped, entries) {\n  let devices = entries\n    .map(entry => {\n      const contents = zipped.readFile(entry).toString('utf8');\n\n      let data;\n      try {\n        data = JSON.parse(contents);\n      } catch (e) {\n        return null;\n      }\n\n      if (data.hasFullKnowledge) {\n        return {\n          deviceGUID: data.deviceGUID,\n          shortName: data.shortDeviceId,\n          recentness: estimateRecentness(data.knowledge)\n        };\n      }\n\n      return null;\n    })\n    .filter(x => x);\n\n  devices = sortByKey(devices, 'recentness');\n  return devices[devices.length - 1].deviceGUID;\n}\n\nasync function doImport(data) {\n  const entityIdMap = new Map();\n\n  console.log('Importing Accounts...');\n  await importAccounts(data, entityIdMap);\n\n  console.log('Importing Categories...');\n  await importCategories(data, entityIdMap);\n\n  console.log('Importing Payees...');\n  await importPayees(data, entityIdMap);\n\n  console.log('Importing Transactions...');\n  await importTransactions(data, entityIdMap);\n\n  console.log('Importing Budgets...');\n  await importBudgets(data, entityIdMap);\n\n  console.log('Setting up...');\n}\n\nfunction getBudgetName(filepath) {\n  let unixFilepath = normalizePathSep(filepath);\n\n  if (!/\\.zip/.test(unixFilepath)) {\n    return null;\n  }\n\n  unixFilepath = unixFilepath.replace(/\\.zip$/, '').replace(/.ynab4$/, '');\n\n  // Most budgets are named like \"Budget~51938D82.ynab4\" but sometimes\n  // they are only \"Budget.ynab4\". We only want to grab the name\n  // before the ~ if it exists.\n  let m = unixFilepath.match(/([^/~]+)[^/]*$/);\n  if (!m) {\n    return null;\n  }\n  return m[1];\n}\n\nfunction getFile(entries, path) {\n  let files = entries.filter(e => e.entryName === path);\n  if (files.length === 0) {\n    throw new Error('Could not find file: ' + path);\n  }\n  if (files.length >= 2) {\n    throw new Error('File name matches multiple files: ' + path);\n  }\n  return files[0];\n}\n\nfunction join(...paths) {\n  return paths.slice(1).reduce((full, path) => {\n    return full + '/' + path.replace(/^\\//, '');\n  }, paths[0].replace(/\\/$/, ''));\n}\n\nasync function importBuffer(filepath, buffer) {\n  let budgetName = getBudgetName(filepath);\n\n  if (!budgetName) {\n    throw new Error('Not a YNAB4 file: ' + filepath);\n  }\n\n  let zipped = new AdmZip(buffer);\n  let entries = zipped.getEntries();\n\n  let root = '';\n  let dirMatch = entries[0].entryName.match(/([^/]*\\.ynab4)/);\n  if (dirMatch) {\n    root = dirMatch[1] + '/';\n  }\n\n  let metaStr = zipped.readFile(getFile(entries, root + 'Budget.ymeta'));\n  let meta = JSON.parse(metaStr.toString('utf8'));\n  let budgetPath = join(root, meta.relativeDataFolderName);\n\n  let deviceFiles = entries.filter(e =>\n    e.entryName.startsWith(join(budgetPath, 'devices'))\n  );\n  let deviceGUID = findLatestDevice(zipped, deviceFiles);\n\n  const yfullPath = join(budgetPath, deviceGUID, 'Budget.yfull');\n  let contents;\n  try {\n    contents = zipped.readFile(getFile(entries, yfullPath)).toString('utf8');\n  } catch (e) {\n    console.log(e);\n    throw new Error('Error reading Budget.yfull file');\n  }\n\n  let data;\n  try {\n    data = JSON.parse(contents);\n  } catch (e) {\n    throw new Error('Error parsing Budget.yull file');\n  }\n\n  return actual.runImport(budgetName, () => doImport(data));\n}\n\nmodule.exports = { importBuffer };\n","function amountToInteger(n) {\n  return Math.round(n * 100) | 0;\n}\n\nfunction integerToAmount(n) {\n  return parseFloat((n / 100).toFixed(2));\n}\n\nmodule.exports = { amountToInteger, integerToAmount };\n","const d = require('date-fns');\nconst uuid = require('uuid');\nconst actual = require('@actual-app/api/methods');\nconst { amountToInteger } = require('@actual-app/api/utils');\n\nfunction amountFromYnab(amount) {\n  // ynabs multiplies amount by 1000 and actual by 100\n  // so, this function divides by 10\n  return Math.round(amount / 10);\n}\n\nfunction monthFromDate(date) {\n  let parts = date.split('-');\n  return parts[0] + '-' + parts[1];\n}\n\nfunction mapAccountType(type) {\n  switch (type) {\n    case 'cash':\n    case 'checking':\n      return 'checking';\n    case 'creditCard':\n    case 'lineOfCredit':\n      return 'credit';\n    case 'savings':\n      return 'savings';\n    case 'investmentAccount':\n      return 'investment';\n    case 'mortgage':\n      return 'mortgage';\n    default:\n      return 'other';\n  }\n}\n\nfunction sortByKey(arr, key) {\n  return [...arr].sort((item1, item2) => {\n    if (item1[key] < item2[key]) {\n      return -1;\n    } else if (item1[key] > item2[key]) {\n      return 1;\n    }\n    return 0;\n  });\n}\n\nfunction groupBy(arr, keyName) {\n  return arr.reduce(function(obj, item) {\n    var key = item[keyName];\n    if (!obj.hasOwnProperty(key)) {\n      obj[key] = [];\n    }\n    obj[key].push(item);\n    return obj;\n  }, {});\n}\n\nfunction importAccounts(data, entityIdMap) {\n  return Promise.all(\n    data.accounts.map(async account => {\n      if (!account.deleted) {\n        let id = await actual.createAccount({\n          type: mapAccountType(account.type),\n          name: account.name,\n          offbudget: account.on_budget ? false : true,\n          closed: account.closed\n        });\n        entityIdMap.set(account.id, id);\n      }\n    })\n  );\n}\n\nasync function importCategories(data, entityIdMap) {\n  // Hidden categories are put in its own group by YNAB,\n  // so it's already handled.\n\n  const categories = await actual.getCategories();\n  const incomeCatId = categories.find(cat => cat.name === 'Income').id;\n  const ynabIncomeCategories = ['To be Budgeted', 'Inflow: Ready to Assign'];\n\n  function checkSpecialCat(cat) {\n    if (\n      cat.category_group_id ===\n      data.category_groups.find(\n        group => group.name === 'Internal Master Category'\n      ).id\n    ) {\n      if (ynabIncomeCategories.includes(cat.name)) {\n        return 'income';\n      } else {\n        return 'internal';\n      }\n    } else if (\n      cat.category_group_id ===\n      data.category_groups.find(group => group.name === 'Credit Card Payments')\n        .id\n    ) {\n      return 'creditCard';\n    }\n  }\n  // Can't be done in parallel to have\n  // correct sort order.\n\n  for (let group of data.category_groups) {\n    if (!group.deleted) {\n      // Ignores internal category and credit cards\n      if (\n        group.name !== 'Internal Master Category' &&\n        group.name !== 'Credit Card Payments'\n      ) {\n        var groupId = await actual.createCategoryGroup({\n          name: group.name,\n          is_income: false\n        });\n        entityIdMap.set(group.id, groupId);\n      }\n\n      let cats = data.categories.filter(\n        cat => cat.category_group_id === group.id\n      );\n\n      for (let cat of cats.reverse()) {\n        if (!cat.deleted) {\n          let newCategory = {};\n          newCategory.name = cat.name;\n\n          // Handles special categories. Starting balance is a payee\n          // in YNAB so it's handled in importTransactions\n          switch (checkSpecialCat(cat)) {\n            case 'income': {\n              // doesn't create new category, only assigns id\n              let id = incomeCatId;\n              entityIdMap.set(cat.id, id);\n              break;\n            }\n            case 'creditCard': // ignores it\n            case 'internal': // uncategorized is ignored too, handled by actual\n              break;\n            default: {\n              newCategory.group_id = groupId;\n              let id = await actual.createCategory(newCategory);\n              entityIdMap.set(cat.id, id);\n              break;\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\nfunction importPayees(data, entityIdMap) {\n  return Promise.all(\n    data.payees.map(async payee => {\n      if (!payee.deleted) {\n        let id = await actual.createPayee({\n          name: payee.name\n        });\n        entityIdMap.set(payee.id, id);\n      }\n    })\n  );\n}\n\nasync function importTransactions(data, entityIdMap) {\n  const payees = await actual.getPayees();\n  const categories = await actual.getCategories();\n  const incomeCatId = categories.find(cat => cat.name === 'Income').id;\n  const startingBalanceCatId = categories.find(\n    cat => cat.name === 'Starting Balances'\n  ).id; //better way to do it?\n  const startingPayeeYNAB = data.payees.find(\n    payee => payee.name === 'Starting Balance'\n  ).id;\n\n  let transactionsGrouped = groupBy(data.transactions, 'account_id');\n  let subtransactionsGrouped = groupBy(data.subtransactions, 'transaction_id');\n\n  // Go ahead and generate ids for all of the transactions so we can\n  // reliably resolve transfers\n  for (let transaction of data.transactions) {\n    entityIdMap.set(transaction.id, uuid.v4());\n  }\n\n  await Promise.all(\n    Object.keys(transactionsGrouped).map(async accountId => {\n      let transactions = transactionsGrouped[accountId];\n\n      let toImport = transactions\n        .map(transaction => {\n          if (transaction.deleted) {\n            return null;\n          }\n\n          // Handle subtransactions\n          let subtransactions = subtransactionsGrouped[transaction.id];\n          if (subtransactions) {\n            subtransactions = subtransactions.map(subtrans => {\n              return {\n                amount: amountFromYnab(subtrans.amount),\n                category: entityIdMap.get(subtrans.category_id) || null,\n                notes: subtrans.memo\n              };\n            });\n          }\n\n          // Add transaction\n          let newTransaction = {\n            id: entityIdMap.get(transaction.id),\n            account: entityIdMap.get(transaction.account_id),\n            date: transaction.date,\n            amount: amountFromYnab(transaction.amount),\n            category: entityIdMap.get(transaction.category_id) || null,\n            cleared: ['cleared', 'reconciled'].includes(transaction.cleared),\n            notes: transaction.memo || null,\n            imported_id: transaction.import_id || null,\n            transfer_id:\n              entityIdMap.get(transaction.transfer_transaction_id) || null,\n            subtransactions: subtransactions\n          };\n\n          // Handle transfer payee\n          if (transaction.transfer_account_id) {\n            newTransaction.payee = payees.find(\n              p =>\n                p.transfer_acct ===\n                entityIdMap.get(transaction.transfer_account_id)\n            ).id;\n          } else {\n            newTransaction.payee = entityIdMap.get(transaction.payee_id);\n          }\n\n          // Handle starting balances\n          if (\n            transaction.payee_id === startingPayeeYNAB &&\n            entityIdMap.get(transaction.category_id) === incomeCatId\n          ) {\n            newTransaction.category = startingBalanceCatId;\n            newTransaction.payee = null;\n          }\n          return newTransaction;\n        })\n        .filter(x => x);\n\n      await actual.addTransactions(entityIdMap.get(accountId), toImport);\n    })\n  );\n}\n\nasync function importBudgets(data, entityIdMap) {\n  // There should be info in the docs to deal with\n  // no credit card category and how YNAB and Actual\n  // handle differently the amount To be Budgeted\n  // i.e. Actual considers the cc debt while YNAB doesn't\n  //\n  // Also, there could be a way to set rollover using\n  // Deferred Income Subcat and Immediate Income Subcat\n\n  let budgets = sortByKey(data.months, 'month');\n\n  const internalCatIdYnab = data.category_groups.find(\n    group => group.name === 'Internal Master Category'\n  ).id;\n  const creditcardCatIdYnab = data.category_groups.find(\n    group => group.name === 'Credit Card Payments'\n  ).id;\n\n  await actual.batchBudgetUpdates(async () => {\n    for (let budget of budgets) {\n      let month = monthFromDate(budget.month);\n\n      await Promise.all(\n        budget.categories.map(async catBudget => {\n          let catId = entityIdMap.get(catBudget.id);\n          let amount = catBudget.budgeted / 10;\n\n          if (\n            !catId ||\n            catBudget.category_group_id === internalCatIdYnab ||\n            catBudget.category_group_id === creditcardCatIdYnab\n          ) {\n            return;\n          }\n\n          await actual.setBudgetAmount(month, catId, amount);\n        })\n      );\n    }\n  });\n}\n\n// Utils\n\nasync function doImport(data) {\n  const entityIdMap = new Map();\n\n  console.log('Importing Accounts...');\n  await importAccounts(data, entityIdMap);\n\n  console.log('Importing Categories...');\n  await importCategories(data, entityIdMap);\n\n  console.log('Importing Payees...');\n  await importPayees(data, entityIdMap);\n\n  console.log('Importing Transactions...');\n  await importTransactions(data, entityIdMap);\n\n  console.log('Importing Budgets...');\n  await importBudgets(data, entityIdMap);\n\n  console.log('Setting up...');\n}\n\nasync function importYNAB5(data) {\n  if (data.data) {\n    data = data.data;\n  }\n\n  return actual.runImport(data.budget.name, () => doImport(data.budget));\n}\n\nmodule.exports = { importYNAB5 };\n","function amountToInteger(n) {\n  return Math.round(n * 100) | 0;\n}\n\nfunction integerToAmount(n) {\n  return parseFloat((n / 100).toFixed(2));\n}\n\nmodule.exports = { amountToInteger, integerToAmount };\n","export default async function runMigration(db, uuid) {\n  function getValue(node) {\n    return node.expr != null ? node.expr : node.cachedValue;\n  }\n\n  db.execQuery(`\nCREATE TABLE zero_budget_months\n  (id TEXT PRIMARY KEY,\n   buffered INTEGER DEFAULT 0); \n\nCREATE TABLE zero_budgets\n  (id TEXT PRIMARY KEY,\n   month INTEGER,\n   category TEXT,\n   amount INTEGER DEFAULT 0,\n   carryover INTEGER DEFAULT 0);\n\nCREATE TABLE reflect_budgets\n  (id TEXT PRIMARY KEY,\n   month INTEGER,\n   category TEXT,\n   amount INTEGER DEFAULT 0,\n   carryover INTEGER DEFAULT 0);\n\nCREATE TABLE notes\n  (id TEXT PRIMARY KEY,\n   note TEXT);\n\nCREATE TABLE kvcache (key TEXT PRIMARY KEY, value TEXT);\nCREATE TABLE kvcache_key (id INTEGER PRIMARY KEY, key REAL);\n`);\n\n  // Migrate budget amounts and carryover\n  let budget = db.runQuery(\n    `SELECT * FROM spreadsheet_cells WHERE name LIKE 'budget%!budget-%'`,\n    [],\n    true\n  );\n  db.transaction(() => {\n    budget.map(monthBudget => {\n      let match = monthBudget.name.match(\n        /^(budget-report|budget)(\\d+)!budget-(.+)$/\n      );\n      if (match == null) {\n        console.log('Warning: invalid budget month name', monthBudget.name);\n        return;\n      }\n\n      let type = match[1];\n      let month = match[2].slice(0, 4) + '-' + match[2].slice(4);\n      let dbmonth = parseInt(match[2]);\n      let cat = match[3];\n\n      let amount = parseInt(getValue(monthBudget));\n      if (isNaN(amount)) {\n        amount = 0;\n      }\n\n      let sheetName = monthBudget.name.split('!')[0];\n      let carryover = db.runQuery(\n        'SELECT * FROM spreadsheet_cells WHERE name = ?',\n        [`${sheetName}!carryover-${cat}`],\n        true\n      );\n\n      let table = type === 'budget-report' ? 'reflect_budgets' : 'zero_budgets';\n      db.runQuery(\n        `INSERT INTO ${table} (id, month, category, amount, carryover) VALUES (?, ?, ?, ?, ?)`,\n        [\n          `${month}-${cat}`,\n          dbmonth,\n          cat,\n          amount,\n          carryover.length > 0 && getValue(carryover[0]) === 'true' ? 1 : 0\n        ]\n      );\n    });\n  });\n\n  // Migrate buffers\n  let buffers = db.runQuery(\n    `SELECT * FROM spreadsheet_cells WHERE name LIKE 'budget%!buffered'`,\n    [],\n    true\n  );\n  db.transaction(() => {\n    buffers.map(buffer => {\n      let match = buffer.name.match(/^budget(\\d+)!buffered$/);\n      if (match) {\n        let month = match[1].slice(0, 4) + '-' + match[1].slice(4);\n        let amount = parseInt(getValue(buffer));\n        if (isNaN(amount)) {\n          amount = 0;\n        }\n\n        db.runQuery(\n          `INSERT INTO zero_budget_months (id, buffered) VALUES (?, ?)`,\n          [month, amount]\n        );\n      }\n    });\n  });\n\n  // Migrate notes\n  let notes = db.runQuery(\n    `SELECT * FROM spreadsheet_cells WHERE name LIKE 'notes!%'`,\n    [],\n    true\n  );\n\n  let parseNote = str => {\n    try {\n      let value = JSON.parse(str);\n      return value && value !== '' ? value : null;\n    } catch (e) {\n      return null;\n    }\n  };\n\n  db.transaction(() => {\n    notes.forEach(note => {\n      let parsed = parseNote(getValue(note));\n      if (parsed) {\n        let [, id] = note.name.split('!');\n        db.runQuery(`INSERT INTO notes (id, note) VALUES (?, ?)`, [id, parsed]);\n      }\n    });\n  });\n\n  db.execQuery(`\n    DROP TABLE spreadsheet_cells;\n    ANALYZE;\n    VACUUM;\n  `);\n}\n","var Utils = require(\"./util\");\nvar fs = Utils.FileSystem.require(),\n\tpth = require(\"path\");\n\nfs.existsSync = fs.existsSync || pth.existsSync;\n\nvar ZipEntry = require(\"./zipEntry\"),\n\tZipFile = require(\"./zipFile\");\n\nvar isWin = /^win/.test(process.platform);\n\n\nmodule.exports = function (/*String*/input) {\n\tvar _zip = undefined,\n\t\t_filename = \"\";\n\n\tif (input && typeof input === \"string\") { // load zip file\n\t\tif (fs.existsSync(input)) {\n\t\t\t_filename = input;\n\t\t\t_zip = new ZipFile(input, Utils.Constants.FILE);\n\t\t} else {\n\t\t\tthrow Utils.Errors.INVALID_FILENAME;\n\t\t}\n\t} else if (input && Buffer.isBuffer(input)) { // load buffer\n\t\t_zip = new ZipFile(input, Utils.Constants.BUFFER);\n\t} else { // create new zip file\n\t\t_zip = new ZipFile(null, Utils.Constants.NONE);\n\t}\n\n\tfunction sanitize(prefix, name) {\n\t\tprefix = pth.resolve(pth.normalize(prefix));\n\t\tvar parts = name.split('/');\n\t\tfor (var i = 0, l = parts.length; i < l; i++) {\n\t\t\tvar path = pth.normalize(pth.join(prefix, parts.slice(i, l).join(pth.sep)));\n\t\t\tif (path.indexOf(prefix) === 0) {\n\t\t\t\treturn path;\n\t\t\t}\n\t\t}\n\t\treturn pth.normalize(pth.join(prefix, pth.basename(name)));\n\t}\n\n\tfunction getEntry(/*Object*/entry) {\n\t\tif (entry && _zip) {\n\t\t\tvar item;\n\t\t\t// If entry was given as a file name\n\t\t\tif (typeof entry === \"string\")\n\t\t\t\titem = _zip.getEntry(entry);\n\t\t\t// if entry was given as a ZipEntry object\n\t\t\tif (typeof entry === \"object\" && typeof entry.entryName !== \"undefined\" && typeof entry.header !== \"undefined\")\n\t\t\t\titem = _zip.getEntry(entry.entryName);\n\n\t\t\tif (item) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\treturn {\n\t\t/**\n\t\t * Extracts the given entry from the archive and returns the content as a Buffer object\n\t\t * @param entry ZipEntry object or String with the full path of the entry\n\t\t *\n\t\t * @return Buffer or Null in case of error\n\t\t */\n\t\treadFile: function (/*Object*/entry) {\n\t\t\tvar item = getEntry(entry);\n\t\t\treturn item && item.getData() || null;\n\t\t},\n\n\t\t/**\n\t\t * Asynchronous readFile\n\t\t * @param entry ZipEntry object or String with the full path of the entry\n\t\t * @param callback\n\t\t *\n\t\t * @return Buffer or Null in case of error\n\t\t */\n\t\treadFileAsync: function (/*Object*/entry, /*Function*/callback) {\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (item) {\n\t\t\t\titem.getDataAsync(callback);\n\t\t\t} else {\n\t\t\t\tcallback(null, \"getEntry failed for:\" + entry)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Extracts the given entry from the archive and returns the content as plain text in the given encoding\n\t\t * @param entry ZipEntry object or String with the full path of the entry\n\t\t * @param encoding Optional. If no encoding is specified utf8 is used\n\t\t *\n\t\t * @return String\n\t\t */\n\t\treadAsText: function (/*Object*/entry, /*String - Optional*/encoding) {\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (item) {\n\t\t\t\tvar data = item.getData();\n\t\t\t\tif (data && data.length) {\n\t\t\t\t\treturn data.toString(encoding || \"utf8\");\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn \"\";\n\t\t},\n\n\t\t/**\n\t\t * Asynchronous readAsText\n\t\t * @param entry ZipEntry object or String with the full path of the entry\n\t\t * @param callback\n\t\t * @param encoding Optional. If no encoding is specified utf8 is used\n\t\t *\n\t\t * @return String\n\t\t */\n\t\treadAsTextAsync: function (/*Object*/entry, /*Function*/callback, /*String - Optional*/encoding) {\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (item) {\n\t\t\t\titem.getDataAsync(function (data, err) {\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tcallback(data, err);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data && data.length) {\n\t\t\t\t\t\tcallback(data.toString(encoding || \"utf8\"));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcallback(\"\");\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tcallback(\"\");\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove the entry from the file or the entry and all it's nested directories and files if the given entry is a directory\n\t\t *\n\t\t * @param entry\n\t\t */\n\t\tdeleteFile: function (/*Object*/entry) { // @TODO: test deleteFile\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (item) {\n\t\t\t\t_zip.deleteEntry(item.entryName);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Adds a comment to the zip. The zip must be rewritten after adding the comment.\n\t\t *\n\t\t * @param comment\n\t\t */\n\t\taddZipComment: function (/*String*/comment) { // @TODO: test addZipComment\n\t\t\t_zip.comment = comment;\n\t\t},\n\n\t\t/**\n\t\t * Returns the zip comment\n\t\t *\n\t\t * @return String\n\t\t */\n\t\tgetZipComment: function () {\n\t\t\treturn _zip.comment || '';\n\t\t},\n\n\t\t/**\n\t\t * Adds a comment to a specified zipEntry. The zip must be rewritten after adding the comment\n\t\t * The comment cannot exceed 65535 characters in length\n\t\t *\n\t\t * @param entry\n\t\t * @param comment\n\t\t */\n\t\taddZipEntryComment: function (/*Object*/entry, /*String*/comment) {\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (item) {\n\t\t\t\titem.comment = comment;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Returns the comment of the specified entry\n\t\t *\n\t\t * @param entry\n\t\t * @return String\n\t\t */\n\t\tgetZipEntryComment: function (/*Object*/entry) {\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (item) {\n\t\t\t\treturn item.comment || '';\n\t\t\t}\n\t\t\treturn ''\n\t\t},\n\n\t\t/**\n\t\t * Updates the content of an existing entry inside the archive. The zip must be rewritten after updating the content\n\t\t *\n\t\t * @param entry\n\t\t * @param content\n\t\t */\n\t\tupdateFile: function (/*Object*/entry, /*Buffer*/content) {\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (item) {\n\t\t\t\titem.setData(content);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Adds a file from the disk to the archive\n\t\t *\n\t\t * @param localPath File to add to zip\n\t\t * @param zipPath Optional path inside the zip\n\t\t * @param zipName Optional name for the file\n\t\t */\n\t\taddLocalFile: function (/*String*/localPath, /*String*/zipPath, /*String*/zipName) {\n\t\t\tif (fs.existsSync(localPath)) {\n\t\t\t\tif (zipPath) {\n\t\t\t\t\tzipPath = zipPath.split(\"\\\\\").join(\"/\");\n\t\t\t\t\tif (zipPath.charAt(zipPath.length - 1) !== \"/\") {\n\t\t\t\t\t\tzipPath += \"/\";\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tzipPath = \"\";\n\t\t\t\t}\n\t\t\t\tvar p = localPath.split(\"\\\\\").join(\"/\").split(\"/\").pop();\n\n\t\t\t\tif (zipName) {\n\t\t\t\t\tthis.addFile(zipPath + zipName, fs.readFileSync(localPath), \"\", 0)\n\t\t\t\t} else {\n\t\t\t\t\tthis.addFile(zipPath + p, fs.readFileSync(localPath), \"\", 0)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow Utils.Errors.FILE_NOT_FOUND.replace(\"%s\", localPath);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Adds a local directory and all its nested files and directories to the archive\n\t\t *\n\t\t * @param localPath\n\t\t * @param zipPath optional path inside zip\n\t\t * @param filter optional RegExp or Function if files match will\n\t\t *               be included.\n\t\t */\n\t\taddLocalFolder: function (/*String*/localPath, /*String*/zipPath, /*RegExp|Function*/filter) {\n\t\t\tif (filter === undefined) {\n\t\t\t\tfilter = function () {\n\t\t\t\t\treturn true;\n\t\t\t\t};\n\t\t\t} else if (filter instanceof RegExp) {\n\t\t\t\tfilter = function (filter) {\n\t\t\t\t\treturn function (filename) {\n\t\t\t\t\t\treturn filter.test(filename);\n\t\t\t\t\t}\n\t\t\t\t}(filter);\n\t\t\t}\n\n\t\t\tif (zipPath) {\n\t\t\t\tzipPath = zipPath.split(\"\\\\\").join(\"/\");\n\t\t\t\tif (zipPath.charAt(zipPath.length - 1) !== \"/\") {\n\t\t\t\t\tzipPath += \"/\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tzipPath = \"\";\n\t\t\t}\n\t\t\t// normalize the path first\n\t\t\tlocalPath = pth.normalize(localPath);\n\t\t\tlocalPath = localPath.split(\"\\\\\").join(\"/\"); //windows fix\n\t\t\tif (localPath.charAt(localPath.length - 1) !== \"/\")\n\t\t\t\tlocalPath += \"/\";\n\n\t\t\tif (fs.existsSync(localPath)) {\n\n\t\t\t\tvar items = Utils.findFiles(localPath),\n\t\t\t\t\tself = this;\n\n\t\t\t\tif (items.length) {\n\t\t\t\t\titems.forEach(function (path) {\n\t\t\t\t\t\tvar p = path.split(\"\\\\\").join(\"/\").replace(new RegExp(localPath.replace(/(\\(|\\))/g, '\\\\$1'), 'i'), \"\"); //windows fix\n\t\t\t\t\t\tif (filter(p)) {\n\t\t\t\t\t\t\tif (p.charAt(p.length - 1) !== \"/\") {\n\t\t\t\t\t\t\t\tself.addFile(zipPath + p, fs.readFileSync(path), \"\", 0)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tself.addFile(zipPath + p, Buffer.alloc(0), \"\", 0)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow Utils.Errors.FILE_NOT_FOUND.replace(\"%s\", localPath);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Allows you to create a entry (file or directory) in the zip file.\n\t\t * If you want to create a directory the entryName must end in / and a null buffer should be provided.\n\t\t * Comment and attributes are optional\n\t\t *\n\t\t * @param entryName\n\t\t * @param content\n\t\t * @param comment\n\t\t * @param attr\n\t\t */\n\t\taddFile: function (/*String*/entryName, /*Buffer*/content, /*String*/comment, /*Number*/attr) {\n\t\t\tvar entry = new ZipEntry();\n\t\t\tentry.entryName = entryName;\n\t\t\tentry.comment = comment || \"\";\n\n\t\t\tif (!attr) {\n\t\t\t\tif (entry.isDirectory) {\n\t\t\t\t\tattr = (0o40755 << 16) | 0x10; // (permissions drwxr-xr-x) + (MS-DOS directory flag)\n\t\t\t\t} else {\n\t\t\t\t\tattr = 0o644 << 16; // permissions -r-wr--r--\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tentry.attr = attr;\n\n\t\t\tentry.setData(content);\n\t\t\t_zip.setEntry(entry);\n\t\t},\n\n\t\t/**\n\t\t * Returns an array of ZipEntry objects representing the files and folders inside the archive\n\t\t *\n\t\t * @return Array\n\t\t */\n\t\tgetEntries: function () {\n\t\t\tif (_zip) {\n\t\t\t\treturn _zip.entries;\n\t\t\t} else {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Returns a ZipEntry object representing the file or folder specified by ``name``.\n\t\t *\n\t\t * @param name\n\t\t * @return ZipEntry\n\t\t */\n\t\tgetEntry: function (/*String*/name) {\n\t\t\treturn getEntry(name);\n\t\t},\n\n\t\t/**\n\t\t * Extracts the given entry to the given targetPath\n\t\t * If the entry is a directory inside the archive, the entire directory and it's subdirectories will be extracted\n\t\t *\n\t\t * @param entry ZipEntry object or String with the full path of the entry\n\t\t * @param targetPath Target folder where to write the file\n\t\t * @param maintainEntryPath If maintainEntryPath is true and the entry is inside a folder, the entry folder\n\t\t *                          will be created in targetPath as well. Default is TRUE\n\t\t * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.\n\t\t *                  Default is FALSE\n\t\t *\n\t\t * @return Boolean\n\t\t */\n\t\textractEntryTo: function (/*Object*/entry, /*String*/targetPath, /*Boolean*/maintainEntryPath, /*Boolean*/overwrite) {\n\t\t\toverwrite = overwrite || false;\n\t\t\tmaintainEntryPath = typeof maintainEntryPath === \"undefined\" ? true : maintainEntryPath;\n\n\t\t\tvar item = getEntry(entry);\n\t\t\tif (!item) {\n\t\t\t\tthrow Utils.Errors.NO_ENTRY;\n\t\t\t}\n\n\t\t\tvar entryName = item.entryName;\n\n\t\t\tvar target = sanitize(targetPath, maintainEntryPath ? entryName : pth.basename(entryName));\n\n\t\t\tif (item.isDirectory) {\n\t\t\t\ttarget = pth.resolve(target, \"..\");\n\t\t\t\tvar children = _zip.getEntryChildren(item);\n\t\t\t\tchildren.forEach(function (child) {\n\t\t\t\t\tif (child.isDirectory) return;\n\t\t\t\t\tvar content = child.getData();\n\t\t\t\t\tif (!content) {\n\t\t\t\t\t\tthrow Utils.Errors.CANT_EXTRACT_FILE;\n\t\t\t\t\t}\n\t\t\t\t\tvar childName = sanitize(targetPath, maintainEntryPath ? child.entryName : pth.basename(child.entryName));\n\n\t\t\t\t\tUtils.writeFileTo(childName, content, overwrite);\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tvar content = item.getData();\n\t\t\tif (!content) throw Utils.Errors.CANT_EXTRACT_FILE;\n\n\t\t\tif (fs.existsSync(target) && !overwrite) {\n\t\t\t\tthrow Utils.Errors.CANT_OVERRIDE;\n\t\t\t}\n\t\t\tUtils.writeFileTo(target, content, overwrite);\n\n\t\t\treturn true;\n\t\t},\n\n\t\t/**\n\t\t * Test the archive\n\t\t *\n\t\t */\n\t\ttest: function () {\n\t\t\tif (!_zip) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfor (var entry in _zip.entries) {\n\t\t\t\ttry {\n\t\t\t\t\tif (entry.isDirectory) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tvar content = _zip.entries[entry].getData();\n\t\t\t\t\tif (!content) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} catch (err) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t/**\n\t\t * Extracts the entire archive to the given location\n\t\t *\n\t\t * @param targetPath Target location\n\t\t * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.\n\t\t *                  Default is FALSE\n\t\t */\n\t\textractAllTo: function (/*String*/targetPath, /*Boolean*/overwrite) {\n\t\t\toverwrite = overwrite || false;\n\t\t\tif (!_zip) {\n\t\t\t\tthrow Utils.Errors.NO_ZIP;\n\t\t\t}\n\t\t\t_zip.entries.forEach(function (entry) {\n\t\t\t\tvar entryName = sanitize(targetPath, entry.entryName.toString());\n\t\t\t\tif (entry.isDirectory) {\n\t\t\t\t\tUtils.makeDir(entryName);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar content = entry.getData();\n\t\t\t\tif (!content) {\n\t\t\t\t\tthrow Utils.Errors.CANT_EXTRACT_FILE;\n\t\t\t\t}\n\t\t\t\tUtils.writeFileTo(entryName, content, overwrite);\n\t\t\t\ttry {\n\t\t\t\t\tfs.utimesSync(entryName, entry.header.time, entry.header.time)\n\t\t\t\t} catch (err) {\n\t\t\t\t\tthrow Utils.Errors.CANT_EXTRACT_FILE;\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Asynchronous extractAllTo\n\t\t *\n\t\t * @param targetPath Target location\n\t\t * @param overwrite If the file already exists at the target path, the file will be overwriten if this is true.\n\t\t *                  Default is FALSE\n\t\t * @param callback\n\t\t */\n\t\textractAllToAsync: function (/*String*/targetPath, /*Boolean*/overwrite, /*Function*/callback) {\n\t\t\tif (!callback) {\n\t\t\t\tcallback = function() {}\n\t\t\t}\n\t\t\toverwrite = overwrite || false;\n\t\t\tif (!_zip) {\n\t\t\t\tcallback(new Error(Utils.Errors.NO_ZIP));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar entries = _zip.entries;\n\t\t\tvar i = entries.length;\n\t\t\tentries.forEach(function (entry) {\n\t\t\t\tif (i <= 0) return; // Had an error already\n\n\t\t\t\tvar entryName = pth.normalize(entry.entryName.toString());\n\n\t\t\t\tif (entry.isDirectory) {\n\t\t\t\t\tUtils.makeDir(sanitize(targetPath, entryName));\n\t\t\t\t\tif (--i === 0)\n\t\t\t\t\t\tcallback(undefined);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tentry.getDataAsync(function (content, err) {\n\t\t\t\t\tif (i <= 0) return;\n\t\t\t\t\tif (err) {\n\t\t\t\t\t\tcallback(new Error(err));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!content) {\n\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\tcallback(new Error(Utils.Errors.CANT_EXTRACT_FILE));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tUtils.writeFileToAsync(sanitize(targetPath, entryName), content, overwrite, function (succ) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tfs.utimesSync(pth.resolve(targetPath, entryName), entry.header.time, entry.header.time);\n\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\tcallback(new Error('Unable to set utimes'));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (i <= 0) return;\n\t\t\t\t\t\tif (!succ) {\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\t\tcallback(new Error('Unable to write'));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (--i === 0)\n\t\t\t\t\t\t\tcallback(undefined);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Writes the newly created zip file to disk at the specified location or if a zip was opened and no ``targetFileName`` is provided, it will overwrite the opened zip\n\t\t *\n\t\t * @param targetFileName\n\t\t * @param callback\n\t\t */\n\t\twriteZip: function (/*String*/targetFileName, /*Function*/callback) {\n\t\t\tif (arguments.length === 1) {\n\t\t\t\tif (typeof targetFileName === \"function\") {\n\t\t\t\t\tcallback = targetFileName;\n\t\t\t\t\ttargetFileName = \"\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!targetFileName && _filename) {\n\t\t\t\ttargetFileName = _filename;\n\t\t\t}\n\t\t\tif (!targetFileName) return;\n\n\t\t\tvar zipData = _zip.compressToBuffer();\n\t\t\tif (zipData) {\n\t\t\t\tvar ok = Utils.writeFileTo(targetFileName, zipData, true);\n\t\t\t\tif (typeof callback === 'function') callback(!ok ? new Error(\"failed\") : null, \"\");\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Returns the content of the entire zip file as a Buffer object\n\t\t *\n\t\t * @return Buffer\n\t\t */\n\t\ttoBuffer: function (/*Function*/onSuccess, /*Function*/onFail, /*Function*/onItemStart, /*Function*/onItemEnd) {\n\t\t\tthis.valueOf = 2;\n\t\t\tif (typeof onSuccess === \"function\") {\n\t\t\t\t_zip.toAsyncBuffer(onSuccess, onFail, onItemStart, onItemEnd);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn _zip.compressToBuffer()\n\t\t}\n\t}\n};\n","var Utils = require(\"../util\"),\n    Constants = Utils.Constants;\n\n/* The central directory file header */\nmodule.exports = function () {\n    var _verMade = 0x0A,\n        _version = 0x0A,\n        _flags = 0,\n        _method = 0,\n        _time = 0,\n        _crc = 0,\n        _compressedSize = 0,\n        _size = 0,\n        _fnameLen = 0,\n        _extraLen = 0,\n\n        _comLen = 0,\n        _diskStart = 0,\n        _inattr = 0,\n        _attr = 0,\n        _offset = 0;\n\n    var _dataHeader = {};\n\n    function setTime(val) {\n        val = new Date(val);\n        _time = (val.getFullYear() - 1980 & 0x7f) << 25  // b09-16 years from 1980\n            | (val.getMonth() + 1) << 21                 // b05-08 month\n            | val.getDate() << 16                        // b00-04 hour\n\n            // 2 bytes time\n            | val.getHours() << 11    // b11-15 hour\n            | val.getMinutes() << 5   // b05-10 minute\n            | val.getSeconds() >> 1;  // b00-04 seconds divided by 2\n    }\n\n    setTime(+new Date());\n\n    return {\n        get made () { return _verMade; },\n        set made (val) { _verMade = val; },\n\n        get version () { return _version; },\n        set version (val) { _version = val },\n\n        get flags () { return _flags },\n        set flags (val) { _flags = val; },\n\n        get method () { return _method; },\n        set method (val) { _method = val; },\n\n        get time () { return new Date(\n            ((_time >> 25) & 0x7f) + 1980,\n            ((_time >> 21) & 0x0f) - 1,\n            (_time >> 16) & 0x1f,\n            (_time >> 11) & 0x1f,\n            (_time >> 5) & 0x3f,\n            (_time & 0x1f) << 1\n        );\n        },\n        set time (val) {\n            setTime(val);\n        },\n\n        get crc () { return _crc; },\n        set crc (val) { _crc = val; },\n\n        get compressedSize () { return _compressedSize; },\n        set compressedSize (val) { _compressedSize = val; },\n\n        get size () { return _size; },\n        set size (val) { _size = val; },\n\n        get fileNameLength () { return _fnameLen; },\n        set fileNameLength (val) { _fnameLen = val; },\n\n        get extraLength () { return _extraLen },\n        set extraLength (val) { _extraLen = val; },\n\n        get commentLength () { return _comLen },\n        set commentLength (val) { _comLen = val },\n\n        get diskNumStart () { return _diskStart },\n        set diskNumStart (val) { _diskStart = val },\n\n        get inAttr () { return _inattr },\n        set inAttr (val) { _inattr = val },\n\n        get attr () { return _attr },\n        set attr (val) { _attr = val },\n\n        get offset () { return _offset },\n        set offset (val) { _offset = val },\n\n        get encripted () { return (_flags & 1) === 1 },\n\n        get entryHeaderSize () {\n            return Constants.CENHDR + _fnameLen + _extraLen + _comLen;\n        },\n\n        get realDataOffset () {\n            return _offset + Constants.LOCHDR + _dataHeader.fnameLen + _dataHeader.extraLen;\n        },\n\n        get dataHeader () {\n            return _dataHeader;\n        },\n\n        loadDataHeaderFromBinary : function(/*Buffer*/input) {\n            var data = input.slice(_offset, _offset + Constants.LOCHDR);\n            // 30 bytes and should start with \"PK\\003\\004\"\n            if (data.readUInt32LE(0) !== Constants.LOCSIG) {\n                throw Utils.Errors.INVALID_LOC;\n            }\n            _dataHeader = {\n                // version needed to extract\n                version : data.readUInt16LE(Constants.LOCVER),\n                // general purpose bit flag\n                flags : data.readUInt16LE(Constants.LOCFLG),\n                // compression method\n                method : data.readUInt16LE(Constants.LOCHOW),\n                // modification time (2 bytes time, 2 bytes date)\n                time : data.readUInt32LE(Constants.LOCTIM),\n                // uncompressed file crc-32 value\n                crc : data.readUInt32LE(Constants.LOCCRC),\n                // compressed size\n                compressedSize : data.readUInt32LE(Constants.LOCSIZ),\n                // uncompressed size\n                size : data.readUInt32LE(Constants.LOCLEN),\n                // filename length\n                fnameLen : data.readUInt16LE(Constants.LOCNAM),\n                // extra field length\n                extraLen : data.readUInt16LE(Constants.LOCEXT)\n            }\n        },\n\n        loadFromBinary : function(/*Buffer*/data) {\n            // data should be 46 bytes and start with \"PK 01 02\"\n            if (data.length !== Constants.CENHDR || data.readUInt32LE(0) !== Constants.CENSIG) {\n                throw Utils.Errors.INVALID_CEN;\n            }\n            // version made by\n            _verMade = data.readUInt16LE(Constants.CENVEM);\n            // version needed to extract\n            _version = data.readUInt16LE(Constants.CENVER);\n            // encrypt, decrypt flags\n            _flags = data.readUInt16LE(Constants.CENFLG);\n            // compression method\n            _method = data.readUInt16LE(Constants.CENHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            _time = data.readUInt32LE(Constants.CENTIM);\n            // uncompressed file crc-32 value\n            _crc = data.readUInt32LE(Constants.CENCRC);\n            // compressed size\n            _compressedSize = data.readUInt32LE(Constants.CENSIZ);\n            // uncompressed size\n            _size = data.readUInt32LE(Constants.CENLEN);\n            // filename length\n            _fnameLen = data.readUInt16LE(Constants.CENNAM);\n            // extra field length\n            _extraLen = data.readUInt16LE(Constants.CENEXT);\n            // file comment length\n            _comLen = data.readUInt16LE(Constants.CENCOM);\n            // volume number start\n            _diskStart = data.readUInt16LE(Constants.CENDSK);\n            // internal file attributes\n            _inattr = data.readUInt16LE(Constants.CENATT);\n            // external file attributes\n            _attr = data.readUInt32LE(Constants.CENATX);\n            // LOC header offset\n            _offset = data.readUInt32LE(Constants.CENOFF);\n        },\n\n        dataHeaderToBinary : function() {\n            // LOC header size (30 bytes)\n            var data = Buffer.alloc(Constants.LOCHDR);\n            // \"PK\\003\\004\"\n            data.writeUInt32LE(Constants.LOCSIG, 0);\n            // version needed to extract\n            data.writeUInt16LE(_version, Constants.LOCVER);\n            // general purpose bit flag\n            data.writeUInt16LE(_flags, Constants.LOCFLG);\n            // compression method\n            data.writeUInt16LE(_method, Constants.LOCHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            data.writeUInt32LE(_time, Constants.LOCTIM);\n            // uncompressed file crc-32 value\n            data.writeUInt32LE(_crc, Constants.LOCCRC);\n            // compressed size\n            data.writeUInt32LE(_compressedSize, Constants.LOCSIZ);\n            // uncompressed size\n            data.writeUInt32LE(_size, Constants.LOCLEN);\n            // filename length\n            data.writeUInt16LE(_fnameLen, Constants.LOCNAM);\n            // extra field length\n            data.writeUInt16LE(_extraLen, Constants.LOCEXT);\n            return data;\n        },\n\n        entryHeaderToBinary : function() {\n            // CEN header size (46 bytes)\n            var data = Buffer.alloc(Constants.CENHDR + _fnameLen + _extraLen + _comLen);\n            // \"PK\\001\\002\"\n            data.writeUInt32LE(Constants.CENSIG, 0);\n            // version made by\n            data.writeUInt16LE(_verMade, Constants.CENVEM);\n            // version needed to extract\n            data.writeUInt16LE(_version, Constants.CENVER);\n            // encrypt, decrypt flags\n            data.writeUInt16LE(_flags, Constants.CENFLG);\n            // compression method\n            data.writeUInt16LE(_method, Constants.CENHOW);\n            // modification time (2 bytes time, 2 bytes date)\n            data.writeUInt32LE(_time, Constants.CENTIM);\n            // uncompressed file crc-32 value\n            data.writeUInt32LE(_crc, Constants.CENCRC);\n            // compressed size\n            data.writeUInt32LE(_compressedSize, Constants.CENSIZ);\n            // uncompressed size\n            data.writeUInt32LE(_size, Constants.CENLEN);\n            // filename length\n            data.writeUInt16LE(_fnameLen, Constants.CENNAM);\n            // extra field length\n            data.writeUInt16LE(_extraLen, Constants.CENEXT);\n            // file comment length\n            data.writeUInt16LE(_comLen, Constants.CENCOM);\n            // volume number start\n            data.writeUInt16LE(_diskStart, Constants.CENDSK);\n            // internal file attributes\n            data.writeUInt16LE(_inattr, Constants.CENATT);\n            // external file attributes\n            data.writeUInt32LE(_attr, Constants.CENATX);\n            // LOC header offset\n            data.writeUInt32LE(_offset, Constants.CENOFF);\n            // fill all with\n            data.fill(0x00, Constants.CENHDR);\n            return data;\n        },\n\n        toString : function() {\n            return '{\\n' +\n                '\\t\"made\" : ' + _verMade + \",\\n\" +\n                '\\t\"version\" : ' + _version + \",\\n\" +\n                '\\t\"flags\" : ' + _flags + \",\\n\" +\n                '\\t\"method\" : ' + Utils.methodToString(_method) + \",\\n\" +\n                '\\t\"time\" : ' + this.time + \",\\n\" +\n                '\\t\"crc\" : 0x' + _crc.toString(16).toUpperCase() + \",\\n\" +\n                '\\t\"compressedSize\" : ' + _compressedSize + \" bytes,\\n\" +\n                '\\t\"size\" : ' + _size + \" bytes,\\n\" +\n                '\\t\"fileNameLength\" : ' + _fnameLen + \",\\n\" +\n                '\\t\"extraLength\" : ' + _extraLen + \" bytes,\\n\" +\n                '\\t\"commentLength\" : ' + _comLen + \" bytes,\\n\" +\n                '\\t\"diskNumStart\" : ' + _diskStart + \",\\n\" +\n                '\\t\"inAttr\" : ' + _inattr + \",\\n\" +\n                '\\t\"attr\" : ' + _attr + \",\\n\" +\n                '\\t\"offset\" : ' + _offset + \",\\n\" +\n                '\\t\"entryHeaderSize\" : ' + (Constants.CENHDR + _fnameLen + _extraLen + _comLen) + \" bytes\\n\" +\n                '}';\n        }\n    }\n};\n","exports.EntryHeader = require(\"./entryHeader\");\r\nexports.MainHeader = require(\"./mainHeader\");\r\n","var Utils = require(\"../util\"),\n    Constants = Utils.Constants;\n\n/* The entries in the end of central directory */\nmodule.exports = function () {\n    var _volumeEntries = 0,\n        _totalEntries = 0,\n        _size = 0,\n        _offset = 0,\n        _commentLength = 0;\n\n    return {\n        get diskEntries () { return _volumeEntries },\n        set diskEntries (/*Number*/val) { _volumeEntries = _totalEntries = val; },\n\n        get totalEntries () { return _totalEntries },\n        set totalEntries (/*Number*/val) { _totalEntries = _volumeEntries = val; },\n\n        get size () { return _size },\n        set size (/*Number*/val) { _size = val; },\n\n        get offset () { return _offset },\n        set offset (/*Number*/val) { _offset = val; },\n\n        get commentLength () { return _commentLength },\n        set commentLength (/*Number*/val) { _commentLength = val; },\n\n        get mainHeaderSize () {\n            return Constants.ENDHDR + _commentLength;\n        },\n\n        loadFromBinary : function(/*Buffer*/data) {\n            // data should be 22 bytes and start with \"PK 05 06\"\n            if (data.length !== Constants.ENDHDR || data.readUInt32LE(0) !== Constants.ENDSIG)\n                throw Utils.Errors.INVALID_END;\n\n            // number of entries on this volume\n            _volumeEntries = data.readUInt16LE(Constants.ENDSUB);\n            // total number of entries\n            _totalEntries = data.readUInt16LE(Constants.ENDTOT);\n            // central directory size in bytes\n            _size = data.readUInt32LE(Constants.ENDSIZ);\n            // offset of first CEN header\n            _offset = data.readUInt32LE(Constants.ENDOFF);\n            // zip file comment length\n            _commentLength = data.readUInt16LE(Constants.ENDCOM);\n        },\n\n        toBinary : function() {\n           var b = Buffer.alloc(Constants.ENDHDR + _commentLength);\n            // \"PK 05 06\" signature\n            b.writeUInt32LE(Constants.ENDSIG, 0);\n            b.writeUInt32LE(0, 4);\n            // number of entries on this volume\n            b.writeUInt16LE(_volumeEntries, Constants.ENDSUB);\n            // total number of entries\n            b.writeUInt16LE(_totalEntries, Constants.ENDTOT);\n            // central directory size in bytes\n            b.writeUInt32LE(_size, Constants.ENDSIZ);\n            // offset of first CEN header\n            b.writeUInt32LE(_offset, Constants.ENDOFF);\n            // zip file comment length\n            b.writeUInt16LE(_commentLength, Constants.ENDCOM);\n            // fill comment memory with spaces so no garbage is left there\n            b.fill(\" \", Constants.ENDHDR);\n\n            return b;\n        },\n\n        toString : function() {\n            return '{\\n' +\n                '\\t\"diskEntries\" : ' + _volumeEntries + \",\\n\" +\n                '\\t\"totalEntries\" : ' + _totalEntries + \",\\n\" +\n                '\\t\"size\" : ' + _size + \" bytes,\\n\" +\n                '\\t\"offset\" : 0x' + _offset.toString(16).toUpperCase() + \",\\n\" +\n                '\\t\"commentLength\" : 0x' + _commentLength + \"\\n\" +\n            '}';\n        }\n    }\n};","module.exports = function (/*Buffer*/inbuf) {\n\n  var zlib = require(\"zlib\");\n  \n  var opts = {chunkSize: (parseInt(inbuf.length / 1024) + 1) * 1024};\n  \n  return {\n    deflate: function () {\n      return zlib.deflateRawSync(inbuf, opts);\n    },\n\n    deflateAsync: function (/*Function*/callback) {\n      var tmp = zlib.createDeflateRaw(opts), parts = [], total = 0;\n      tmp.on('data', function (data) {\n        parts.push(data);\n        total += data.length;\n      });\n      tmp.on('end', function () {\n        var buf = Buffer.alloc(total), written = 0;\n        buf.fill(0);\n        for (var i = 0; i < parts.length; i++) {\n          var part = parts[i];\n          part.copy(buf, written);\n          written += part.length;\n        }\n        callback && callback(buf);\n      });\n      tmp.end(inbuf);\n    }\n  }\n};\n","exports.Deflater = require(\"./deflater\");\r\nexports.Inflater = require(\"./inflater\");","module.exports = function (/*Buffer*/inbuf) {\n\n  var zlib = require(\"zlib\");\n\n  return {\n    inflate: function () {\n      return zlib.inflateRawSync(inbuf);\n    },\n\n    inflateAsync: function (/*Function*/callback) {\n      var tmp = zlib.createInflateRaw(), parts = [], total = 0;\n      tmp.on('data', function (data) {\n        parts.push(data);\n        total += data.length;\n      });\n      tmp.on('end', function () {\n        var buf = Buffer.alloc(total), written = 0;\n        buf.fill(0);\n        for (var i = 0; i < parts.length; i++) {\n          var part = parts[i];\n          part.copy(buf, written);\n          written += part.length;\n        }\n        callback && callback(buf);\n      });\n      tmp.end(inbuf);\n    }\n  }\n};\n","module.exports = {\r\n    /* The local file header */\r\n    LOCHDR           : 30, // LOC header size\r\n    LOCSIG           : 0x04034b50, // \"PK\\003\\004\"\r\n    LOCVER           : 4,\t// version needed to extract\r\n    LOCFLG           : 6, // general purpose bit flag\r\n    LOCHOW           : 8, // compression method\r\n    LOCTIM           : 10, // modification time (2 bytes time, 2 bytes date)\r\n    LOCCRC           : 14, // uncompressed file crc-32 value\r\n    LOCSIZ           : 18, // compressed size\r\n    LOCLEN           : 22, // uncompressed size\r\n    LOCNAM           : 26, // filename length\r\n    LOCEXT           : 28, // extra field length\r\n\r\n    /* The Data descriptor */\r\n    EXTSIG           : 0x08074b50, // \"PK\\007\\008\"\r\n    EXTHDR           : 16, // EXT header size\r\n    EXTCRC           : 4, // uncompressed file crc-32 value\r\n    EXTSIZ           : 8, // compressed size\r\n    EXTLEN           : 12, // uncompressed size\r\n\r\n    /* The central directory file header */\r\n    CENHDR           : 46, // CEN header size\r\n    CENSIG           : 0x02014b50, // \"PK\\001\\002\"\r\n    CENVEM           : 4, // version made by\r\n    CENVER           : 6, // version needed to extract\r\n    CENFLG           : 8, // encrypt, decrypt flags\r\n    CENHOW           : 10, // compression method\r\n    CENTIM           : 12, // modification time (2 bytes time, 2 bytes date)\r\n    CENCRC           : 16, // uncompressed file crc-32 value\r\n    CENSIZ           : 20, // compressed size\r\n    CENLEN           : 24, // uncompressed size\r\n    CENNAM           : 28, // filename length\r\n    CENEXT           : 30, // extra field length\r\n    CENCOM           : 32, // file comment length\r\n    CENDSK           : 34, // volume number start\r\n    CENATT           : 36, // internal file attributes\r\n    CENATX           : 38, // external file attributes (host system dependent)\r\n    CENOFF           : 42, // LOC header offset\r\n\r\n    /* The entries in the end of central directory */\r\n    ENDHDR           : 22, // END header size\r\n    ENDSIG           : 0x06054b50, // \"PK\\005\\006\"\r\n    ENDSUB           : 8, // number of entries on this disk\r\n    ENDTOT           : 10, // total number of entries\r\n    ENDSIZ           : 12, // central directory size in bytes\r\n    ENDOFF           : 16, // offset of first CEN header\r\n    ENDCOM           : 20, // zip file comment length\r\n\r\n    /* Compression methods */\r\n    STORED           : 0, // no compression\r\n    SHRUNK           : 1, // shrunk\r\n    REDUCED1         : 2, // reduced with compression factor 1\r\n    REDUCED2         : 3, // reduced with compression factor 2\r\n    REDUCED3         : 4, // reduced with compression factor 3\r\n    REDUCED4         : 5, // reduced with compression factor 4\r\n    IMPLODED         : 6, // imploded\r\n    // 7 reserved\r\n    DEFLATED         : 8, // deflated\r\n    ENHANCED_DEFLATED: 9, // enhanced deflated\r\n    PKWARE           : 10,// PKWare DCL imploded\r\n    // 11 reserved\r\n    BZIP2            : 12, //  compressed using BZIP2\r\n    // 13 reserved\r\n    LZMA             : 14, // LZMA\r\n    // 15-17 reserved\r\n    IBM_TERSE        : 18, // compressed using IBM TERSE\r\n    IBM_LZ77         : 19, //IBM LZ77 z\r\n\r\n    /* General purpose bit flag */\r\n    FLG_ENC          : 0,  // encripted file\r\n    FLG_COMP1        : 1,  // compression option\r\n    FLG_COMP2        : 2,  // compression option\r\n    FLG_DESC         : 4,  // data descriptor\r\n    FLG_ENH          : 8,  // enhanced deflation\r\n    FLG_STR          : 16, // strong encryption\r\n    FLG_LNG          : 1024, // language encoding\r\n    FLG_MSK          : 4096, // mask header values\r\n\r\n    /* Load type */\r\n    FILE             : 0,\r\n    BUFFER           : 1,\r\n    NONE             : 2,\r\n\r\n    /* 4.5 Extensible data fields */\r\n    EF_ID            : 0,\r\n    EF_SIZE          : 2,\r\n\r\n    /* Header IDs */\r\n    ID_ZIP64         : 0x0001,\r\n    ID_AVINFO        : 0x0007,\r\n    ID_PFS           : 0x0008,\r\n    ID_OS2           : 0x0009,\r\n    ID_NTFS          : 0x000a,\r\n    ID_OPENVMS       : 0x000c,\r\n    ID_UNIX          : 0x000d,\r\n    ID_FORK          : 0x000e,\r\n    ID_PATCH         : 0x000f,\r\n    ID_X509_PKCS7    : 0x0014,\r\n    ID_X509_CERTID_F : 0x0015,\r\n    ID_X509_CERTID_C : 0x0016,\r\n    ID_STRONGENC     : 0x0017,\r\n    ID_RECORD_MGT    : 0x0018,\r\n    ID_X509_PKCS7_RL : 0x0019,\r\n    ID_IBM1          : 0x0065,\r\n    ID_IBM2          : 0x0066,\r\n    ID_POSZIP        : 0x4690,\r\n\r\n    EF_ZIP64_OR_32   : 0xffffffff,\r\n    EF_ZIP64_OR_16   : 0xffff,\r\n    EF_ZIP64_SUNCOMP : 0,\r\n    EF_ZIP64_SCOMP   : 8,\r\n    EF_ZIP64_RHO     : 16,\r\n    EF_ZIP64_DSN     : 24\r\n};\r\n","module.exports = {\r\n    /* Header error messages */\r\n    \"INVALID_LOC\" : \"Invalid LOC header (bad signature)\",\r\n    \"INVALID_CEN\" : \"Invalid CEN header (bad signature)\",\r\n    \"INVALID_END\" : \"Invalid END header (bad signature)\",\r\n\r\n    /* ZipEntry error messages*/\r\n    \"NO_DATA\" : \"Nothing to decompress\",\r\n    \"BAD_CRC\" : \"CRC32 checksum failed\",\r\n    \"FILE_IN_THE_WAY\" : \"There is a file in the way: %s\",\r\n    \"UNKNOWN_METHOD\" : \"Invalid/unsupported compression method\",\r\n\r\n    /* Inflater error messages */\r\n    \"AVAIL_DATA\" : \"inflate::Available inflate data did not terminate\",\r\n    \"INVALID_DISTANCE\" : \"inflate::Invalid literal/length or distance code in fixed or dynamic block\",\r\n    \"TO_MANY_CODES\" : \"inflate::Dynamic block code description: too many length or distance codes\",\r\n    \"INVALID_REPEAT_LEN\" : \"inflate::Dynamic block code description: repeat more than specified lengths\",\r\n    \"INVALID_REPEAT_FIRST\" : \"inflate::Dynamic block code description: repeat lengths with no first length\",\r\n    \"INCOMPLETE_CODES\" : \"inflate::Dynamic block code description: code lengths codes incomplete\",\r\n    \"INVALID_DYN_DISTANCE\": \"inflate::Dynamic block code description: invalid distance code lengths\",\r\n    \"INVALID_CODES_LEN\": \"inflate::Dynamic block code description: invalid literal/length code lengths\",\r\n    \"INVALID_STORE_BLOCK\" : \"inflate::Stored block length did not match one's complement\",\r\n    \"INVALID_BLOCK_TYPE\" : \"inflate::Invalid block type (type == 3)\",\r\n\r\n    /* ADM-ZIP error messages */\r\n    \"CANT_EXTRACT_FILE\" : \"Could not extract the file\",\r\n    \"CANT_OVERRIDE\" : \"Target file already exists\",\r\n    \"NO_ZIP\" : \"No zip file was loaded\",\r\n    \"NO_ENTRY\" : \"Entry doesn't exist\",\r\n    \"DIRECTORY_CONTENT_ERROR\" : \"A directory cannot have content\",\r\n    \"FILE_NOT_FOUND\" : \"File not found: %s\",\r\n    \"NOT_IMPLEMENTED\" : \"Not implemented\",\r\n    \"INVALID_FILENAME\" : \"Invalid filename\",\r\n    \"INVALID_FORMAT\" : \"Invalid or unsupported zip format. No END header found\"\r\n};","var fs = require(\"./fileSystem\").require(),\r\n    pth = require(\"path\");\r\n\t\r\nfs.existsSync = fs.existsSync || pth.existsSync;\r\n\r\nmodule.exports = function(/*String*/path) {\r\n\r\n    var _path = path || \"\",\r\n        _permissions = 0,\r\n        _obj = newAttr(),\r\n        _stat = null;\r\n\r\n    function newAttr() {\r\n        return {\r\n            directory : false,\r\n            readonly : false,\r\n            hidden : false,\r\n            executable : false,\r\n            mtime : 0,\r\n            atime : 0\r\n        }\r\n    }\r\n\r\n    if (_path && fs.existsSync(_path)) {\r\n        _stat = fs.statSync(_path);\r\n        _obj.directory = _stat.isDirectory();\r\n        _obj.mtime = _stat.mtime;\r\n        _obj.atime = _stat.atime;\r\n        _obj.executable = !!(1 & parseInt ((_stat.mode & parseInt (\"777\", 8)).toString (8)[0]));\r\n        _obj.readonly = !!(2 & parseInt ((_stat.mode & parseInt (\"777\", 8)).toString (8)[0]));\r\n        _obj.hidden = pth.basename(_path)[0] === \".\";\r\n    } else {\r\n        console.warn(\"Invalid path: \" + _path)\r\n    }\r\n\r\n    return {\r\n\r\n        get directory () {\r\n            return _obj.directory;\r\n        },\r\n\r\n        get readOnly () {\r\n            return _obj.readonly;\r\n        },\r\n\r\n        get hidden () {\r\n            return _obj.hidden;\r\n        },\r\n\r\n        get mtime () {\r\n            return _obj.mtime;\r\n        },\r\n\r\n        get atime () {\r\n           return _obj.atime;\r\n        },\r\n\r\n\r\n        get executable () {\r\n            return _obj.executable;\r\n        },\r\n\r\n        decodeAttributes : function(val) {\r\n\r\n        },\r\n\r\n        encodeAttributes : function (val) {\r\n\r\n        },\r\n\r\n        toString : function() {\r\n           return '{\\n' +\r\n               '\\t\"path\" : \"' + _path + \",\\n\" +\r\n               '\\t\"isDirectory\" : ' + _obj.directory + \",\\n\" +\r\n               '\\t\"isReadOnly\" : ' + _obj.readonly + \",\\n\" +\r\n               '\\t\"isHidden\" : ' + _obj.hidden + \",\\n\" +\r\n               '\\t\"isExecutable\" : ' + _obj.executable + \",\\n\" +\r\n               '\\t\"mTime\" : ' + _obj.mtime + \"\\n\" +\r\n               '\\t\"aTime\" : ' + _obj.atime + \"\\n\" +\r\n           '}';\r\n        }\r\n    }\r\n\r\n};\r\n","exports.require = function() {\n  var fs = require(\"fs\");\n  if (process.versions['electron']) {\n\t  try {\n\t    originalFs = require(\"original-fs\");\n\t    if (Object.keys(originalFs).length > 0) {\n\t      fs = originalFs;\n      }\n\t  } catch (e) {}\n  }\n  return fs\n};\n","module.exports = require(\"./utils\");\r\nmodule.exports.FileSystem = require(\"./fileSystem\");\r\nmodule.exports.Constants = require(\"./constants\");\r\nmodule.exports.Errors = require(\"./errors\");\r\nmodule.exports.FileAttr = require(\"./fattr\");","var fs = require(\"./fileSystem\").require(),\r\n    pth = require('path');\r\n\r\nfs.existsSync = fs.existsSync || pth.existsSync;\r\n\r\nmodule.exports = (function() {\r\n\r\n    var crcTable = [],\r\n        Constants = require('./constants'),\r\n        Errors = require('./errors'),\r\n\r\n        PATH_SEPARATOR = pth.sep;\r\n\r\n\r\n    function mkdirSync(/*String*/path) {\r\n        var resolvedPath = path.split(PATH_SEPARATOR)[0];\r\n        path.split(PATH_SEPARATOR).forEach(function(name) {\r\n            if (!name || name.substr(-1,1) === \":\") return;\r\n            resolvedPath += PATH_SEPARATOR + name;\r\n            var stat;\r\n            try {\r\n                stat = fs.statSync(resolvedPath);\r\n            } catch (e) {\r\n                fs.mkdirSync(resolvedPath);\r\n            }\r\n            if (stat && stat.isFile())\r\n                throw Errors.FILE_IN_THE_WAY.replace(\"%s\", resolvedPath);\r\n        });\r\n    }\r\n\r\n    function findSync(/*String*/dir, /*RegExp*/pattern, /*Boolean*/recoursive) {\r\n        if (typeof pattern === 'boolean') {\r\n            recoursive = pattern;\r\n            pattern = undefined;\r\n        }\r\n        var files = [];\r\n        fs.readdirSync(dir).forEach(function(file) {\r\n            var path = pth.join(dir, file);\r\n\r\n            if (fs.statSync(path).isDirectory() && recoursive)\r\n                files = files.concat(findSync(path, pattern, recoursive));\r\n\r\n            if (!pattern || pattern.test(path)) {\r\n                files.push(pth.normalize(path) + (fs.statSync(path).isDirectory() ? PATH_SEPARATOR : \"\"));\r\n            }\r\n\r\n        });\r\n        return files;\r\n    }\r\n\r\n    return {\r\n        makeDir : function(/*String*/path) {\r\n            mkdirSync(path);\r\n        },\r\n\r\n        crc32 : function(buf) {\r\n            if (typeof buf === 'string') {\r\n                buf = Buffer.alloc(buf.length, buf);\r\n            }\r\n            var b = Buffer.alloc(4);\r\n            if (!crcTable.length) {\r\n                for (var n = 0; n < 256; n++) {\r\n                    var c = n;\r\n                    for (var k = 8; --k >= 0;)  //\r\n                        if ((c & 1) !== 0)  { c = 0xedb88320 ^ (c >>> 1); } else { c = c >>> 1; }\r\n                    if (c < 0) {\r\n                        b.writeInt32LE(c, 0);\r\n                        c = b.readUInt32LE(0);\r\n                    }\r\n                    crcTable[n] = c;\r\n                }\r\n            }\r\n            var crc = 0, off = 0, len = buf.length, c1 = ~crc;\r\n            while(--len >= 0) c1 = crcTable[(c1 ^ buf[off++]) & 0xff] ^ (c1 >>> 8);\r\n            crc = ~c1;\r\n            b.writeInt32LE(crc & 0xffffffff, 0);\r\n            return b.readUInt32LE(0);\r\n        },\r\n\r\n        methodToString : function(/*Number*/method) {\r\n            switch (method) {\r\n                case Constants.STORED:\r\n                    return 'STORED (' + method + ')';\r\n                case Constants.DEFLATED:\r\n                    return 'DEFLATED (' + method + ')';\r\n                default:\r\n                    return 'UNSUPPORTED (' + method + ')';\r\n            }\r\n\r\n        },\r\n\r\n        writeFileTo : function(/*String*/path, /*Buffer*/content, /*Boolean*/overwrite, /*Number*/attr) {\r\n            if (fs.existsSync(path)) {\r\n                if (!overwrite)\r\n                    return false; // cannot overwrite\r\n\r\n                var stat = fs.statSync(path);\r\n                if (stat.isDirectory()) {\r\n                    return false;\r\n                }\r\n            }\r\n            var folder = pth.dirname(path);\r\n            if (!fs.existsSync(folder)) {\r\n                mkdirSync(folder);\r\n            }\r\n\r\n            var fd;\r\n            try {\r\n                fd = fs.openSync(path, 'w', 438); // 0666\r\n            } catch(e) {\r\n                fs.chmodSync(path, 438);\r\n                fd = fs.openSync(path, 'w', 438);\r\n            }\r\n            if (fd) {\r\n                try {\r\n                    fs.writeSync(fd, content, 0, content.length, 0);\r\n                }\r\n                catch (e){\r\n                    throw e;\r\n                }\r\n                finally {\r\n                    fs.closeSync(fd);\r\n                }\r\n            }\r\n            fs.chmodSync(path, attr || 438);\r\n            return true;\r\n        },\r\n\r\n        writeFileToAsync : function(/*String*/path, /*Buffer*/content, /*Boolean*/overwrite, /*Number*/attr, /*Function*/callback) {\r\n            if(typeof attr === 'function') {\r\n                callback = attr;\r\n                attr = undefined;\r\n            }\r\n\r\n            fs.exists(path, function(exists) {\r\n                if(exists && !overwrite)\r\n                    return callback(false);\r\n\r\n                fs.stat(path, function(err, stat) {\r\n                    if(exists &&stat.isDirectory()) {\r\n                        return callback(false);\r\n                    }\r\n\r\n                    var folder = pth.dirname(path);\r\n                    fs.exists(folder, function(exists) {\r\n                        if(!exists)\r\n                            mkdirSync(folder);\r\n\r\n                        fs.open(path, 'w', 438, function(err, fd) {\r\n                            if(err) {\r\n                                fs.chmod(path, 438, function() {\r\n                                    fs.open(path, 'w', 438, function(err, fd) {\r\n                                        fs.write(fd, content, 0, content.length, 0, function() {\r\n                                            fs.close(fd, function() {\r\n                                                fs.chmod(path, attr || 438, function() {\r\n                                                    callback(true);\r\n                                                })\r\n                                            });\r\n                                        });\r\n                                    });\r\n                                })\r\n                            } else {\r\n                                if(fd) {\r\n                                    fs.write(fd, content, 0, content.length, 0, function() {\r\n                                        fs.close(fd, function() {\r\n                                            fs.chmod(path, attr || 438, function() {\r\n                                                callback(true);\r\n                                            })\r\n                                        });\r\n                                    });\r\n                                } else {\r\n                                    fs.chmod(path, attr || 438, function() {\r\n                                        callback(true);\r\n                                    })\r\n                                }\r\n                            }\r\n                        });\r\n                    })\r\n                })\r\n            })\r\n        },\r\n\r\n        findFiles : function(/*String*/path) {\r\n            return findSync(path, true);\r\n        },\r\n\r\n        getAttributes : function(/*String*/path) {\r\n\r\n        },\r\n\r\n        setAttributes : function(/*String*/path) {\r\n\r\n        },\r\n\r\n        toBuffer : function(input) {\r\n            if (Buffer.isBuffer(input)) {\r\n                return input;\r\n            } else {\r\n                if (input.length === 0) {\r\n                    return Buffer.alloc(0)\r\n                }\r\n                return Buffer.from(input, 'utf8');\r\n            }\r\n        },\r\n\r\n        Constants : Constants,\r\n        Errors : Errors\r\n    }\r\n})();\r\n","var Utils = require(\"./util\"),\n    Headers = require(\"./headers\"),\n    Constants = Utils.Constants,\n    Methods = require(\"./methods\");\n\nmodule.exports = function (/*Buffer*/input) {\n\n    var _entryHeader = new Headers.EntryHeader(),\n        _entryName = Buffer.alloc(0),\n        _comment = Buffer.alloc(0),\n        _isDirectory = false,\n        uncompressedData = null,\n        _extra = Buffer.alloc(0);\n\n    function getCompressedDataFromZip() {\n        if (!input || !Buffer.isBuffer(input)) {\n            return Buffer.alloc(0);\n        }\n        _entryHeader.loadDataHeaderFromBinary(input);\n        return input.slice(_entryHeader.realDataOffset, _entryHeader.realDataOffset + _entryHeader.compressedSize)\n    }\n\n    function crc32OK(data) {\n        // if bit 3 (0x08) of the general-purpose flags field is set, then the CRC-32 and file sizes are not known when the header is written\n        if ((_entryHeader.flags & 0x8) !== 0x8) {\n           if (Utils.crc32(data) !== _entryHeader.dataHeader.crc) {\n               return false;\n           }\n        } else {\n            // @TODO: load and check data descriptor header\n            // The fields in the local header are filled with zero, and the CRC-32 and size are appended in a 12-byte structure\n            // (optionally preceded by a 4-byte signature) immediately after the compressed data:\n        }\n        return true;\n    }\n\n    function decompress(/*Boolean*/async, /*Function*/callback, /*String*/pass) {\n        if(typeof callback === 'undefined' && typeof async === 'string') {\n            pass=async;\n            async=void 0;\n        }\n        if (_isDirectory) {\n            if (async && callback) {\n                callback(Buffer.alloc(0), Utils.Errors.DIRECTORY_CONTENT_ERROR); //si added error.\n            }\n            return Buffer.alloc(0);\n        }\n\n        var compressedData = getCompressedDataFromZip();\n       \n        if (compressedData.length === 0) {\n            if (async && callback) callback(compressedData, Utils.Errors.NO_DATA);//si added error.\n            return compressedData;\n        }\n\n        var data = Buffer.alloc(_entryHeader.size);\n\n        switch (_entryHeader.method) {\n            case Utils.Constants.STORED:\n                compressedData.copy(data);\n                if (!crc32OK(data)) {\n                    if (async && callback) callback(data, Utils.Errors.BAD_CRC);//si added error\n                    return Utils.Errors.BAD_CRC;\n                } else {//si added otherwise did not seem to return data.\n                    if (async && callback) callback(data);\n                    return data;\n                }\n            case Utils.Constants.DEFLATED:\n                var inflater = new Methods.Inflater(compressedData);\n                if (!async) {\n                    var result = inflater.inflate(data);\n                    result.copy(data, 0);\n                    if (!crc32OK(data)) {\n                        console.warn(Utils.Errors.BAD_CRC + \" \" + _entryName.toString())\n                    }\n                    return data;\n                } else {\n                    inflater.inflateAsync(function(result) {\n                        result.copy(data, 0);\n                        if (!crc32OK(data)) {\n                            if (callback) callback(data, Utils.Errors.BAD_CRC); //si added error\n                        } else { //si added otherwise did not seem to return data.\n                            if (callback) callback(data);\n                        }\n                    })\n                }\n                break;\n            default:\n                if (async && callback) callback(Buffer.alloc(0), Utils.Errors.UNKNOWN_METHOD);\n                return Utils.Errors.UNKNOWN_METHOD;\n        }\n    }\n\n    function compress(/*Boolean*/async, /*Function*/callback) {\n        if ((!uncompressedData || !uncompressedData.length) && Buffer.isBuffer(input)) {\n            // no data set or the data wasn't changed to require recompression\n            if (async && callback) callback(getCompressedDataFromZip());\n            return getCompressedDataFromZip();\n        }\n\n        if (uncompressedData.length && !_isDirectory) {\n            var compressedData;\n            // Local file header\n            switch (_entryHeader.method) {\n                case Utils.Constants.STORED:\n                    _entryHeader.compressedSize = _entryHeader.size;\n\n                    compressedData = Buffer.alloc(uncompressedData.length);\n                    uncompressedData.copy(compressedData);\n\n                    if (async && callback) callback(compressedData);\n                    return compressedData;\n                default:\n                case Utils.Constants.DEFLATED:\n\n                    var deflater = new Methods.Deflater(uncompressedData);\n                    if (!async) {\n                        var deflated = deflater.deflate();\n                        _entryHeader.compressedSize = deflated.length;\n                        return deflated;\n                    } else {\n                        deflater.deflateAsync(function(data) {\n                            compressedData = Buffer.alloc(data.length);\n                            _entryHeader.compressedSize = data.length;\n                            data.copy(compressedData);\n                            callback && callback(compressedData);\n                        })\n                    }\n                    deflater = null;\n                    break;\n            }\n        } else {\n            if (async && callback) {\n                callback(Buffer.alloc(0));\n            } else {\n                return Buffer.alloc(0);\n            }\n        }\n    }\n\n    function readUInt64LE(buffer, offset) {\n        return (buffer.readUInt32LE(offset + 4) << 4) + buffer.readUInt32LE(offset);\n    }\n\n    function parseExtra(data) {\n        var offset = 0;\n        var signature, size, part;\n        while(offset<data.length) {\n            signature = data.readUInt16LE(offset);\n            offset += 2;\n            size = data.readUInt16LE(offset);\n            offset += 2;\n            part = data.slice(offset, offset+size);\n            offset += size;\n            if(Constants.ID_ZIP64 === signature) {\n                parseZip64ExtendedInformation(part);\n            }\n        }\n    }\n\n    //Override header field values with values from the ZIP64 extra field\n    function parseZip64ExtendedInformation(data) {\n        var size, compressedSize, offset, diskNumStart;\n\n        if(data.length >= Constants.EF_ZIP64_SCOMP) {\n            size = readUInt64LE(data, Constants.EF_ZIP64_SUNCOMP);\n            if(_entryHeader.size === Constants.EF_ZIP64_OR_32) {\n                _entryHeader.size = size;\n            }\n        }\n        if(data.length >= Constants.EF_ZIP64_RHO) {\n            compressedSize = readUInt64LE(data, Constants.EF_ZIP64_SCOMP);\n            if(_entryHeader.compressedSize === Constants.EF_ZIP64_OR_32) {\n                _entryHeader.compressedSize = compressedSize;\n            }\n        }\n        if(data.length >= Constants.EF_ZIP64_DSN) {\n            offset = readUInt64LE(data, Constants.EF_ZIP64_RHO);\n            if(_entryHeader.offset === Constants.EF_ZIP64_OR_32) {\n                _entryHeader.offset = offset;\n            }\n        }\n        if(data.length >= Constants.EF_ZIP64_DSN+4) {\n            diskNumStart = data.readUInt32LE(Constants.EF_ZIP64_DSN);\n            if(_entryHeader.diskNumStart === Constants.EF_ZIP64_OR_16) {\n                _entryHeader.diskNumStart = diskNumStart;\n            }\n        }\n    }\n\n\n    return {\n        get entryName () { return _entryName.toString(); },\n        get rawEntryName() { return _entryName; },\n        set entryName (val) {\n            _entryName = Utils.toBuffer(val);\n            var lastChar = _entryName[_entryName.length - 1];\n            _isDirectory = (lastChar === 47) || (lastChar === 92);\n            _entryHeader.fileNameLength = _entryName.length;\n        },\n\n        get extra () { return _extra; },\n        set extra (val) {\n            _extra = val;\n            _entryHeader.extraLength = val.length;\n            parseExtra(val);\n        },\n\n        get comment () { return _comment.toString(); },\n        set comment (val) {\n            _comment = Utils.toBuffer(val);\n            _entryHeader.commentLength = _comment.length;\n        },\n\n        get name () { var n = _entryName.toString(); return _isDirectory ? n.substr(n.length - 1).split(\"/\").pop() : n.split(\"/\").pop(); },\n        get isDirectory () { return _isDirectory },\n\n        getCompressedData : function() {\n            return compress(false, null)\n        },\n\n        getCompressedDataAsync : function(/*Function*/callback) {\n            compress(true, callback)\n        },\n\n        setData : function(value) {\n            uncompressedData = Utils.toBuffer(value);\n            if (!_isDirectory && uncompressedData.length) {\n                _entryHeader.size = uncompressedData.length;\n                _entryHeader.method = Utils.Constants.DEFLATED;\n                _entryHeader.crc = Utils.crc32(value);\n                _entryHeader.changed = true;\n            } else { // folders and blank files should be stored\n                _entryHeader.method = Utils.Constants.STORED;\n            }\n        },\n\n        getData : function(pass) {\n            if (_entryHeader.changed) {\n\t\t\t\treturn uncompressedData;\n\t\t\t} else {\n\t\t\t\treturn decompress(false, null, pass);\n            }\n        },\n\n        getDataAsync : function(/*Function*/callback, pass) {\n\t\t\tif (_entryHeader.changed) {\n\t\t\t\tcallback(uncompressedData)\n\t\t\t} else {\n\t\t\t\tdecompress(true, callback, pass)\n            }\n        },\n\n        set attr(attr) { _entryHeader.attr = attr; },\n        get attr() { return _entryHeader.attr; },\n\n        set header(/*Buffer*/data) {\n            _entryHeader.loadFromBinary(data);\n        },\n\n        get header() {\n            return _entryHeader;\n        },\n\n        packHeader : function() {\n            var header = _entryHeader.entryHeaderToBinary();\n            // add\n            _entryName.copy(header, Utils.Constants.CENHDR);\n            if (_entryHeader.extraLength) {\n                _extra.copy(header, Utils.Constants.CENHDR + _entryName.length)\n            }\n            if (_entryHeader.commentLength) {\n                _comment.copy(header, Utils.Constants.CENHDR + _entryName.length + _entryHeader.extraLength, _comment.length);\n            }\n            return header;\n        },\n\n        toString : function() {\n            return '{\\n' +\n                '\\t\"entryName\" : \"' + _entryName.toString() + \"\\\",\\n\" +\n                '\\t\"name\" : \"' + (_isDirectory ? _entryName.toString().replace(/\\/$/, '').split(\"/\").pop() : _entryName.toString().split(\"/\").pop()) + \"\\\",\\n\" +\n                '\\t\"comment\" : \"' + _comment.toString() + \"\\\",\\n\" +\n                '\\t\"isDirectory\" : ' + _isDirectory + \",\\n\" +\n                '\\t\"header\" : ' + _entryHeader.toString().replace(/\\t/mg, \"\\t\\t\").replace(/}/mg, \"\\t}\")  + \",\\n\" +\n                '\\t\"compressedData\" : <' + (input && input.length  + \" bytes buffer\" || \"null\") + \">\\n\" +\n                '\\t\"data\" : <' + (uncompressedData && uncompressedData.length  + \" bytes buffer\" || \"null\") + \">\\n\" +\n                '}';\n        }\n    }\n};\n","var ZipEntry = require(\"./zipEntry\"),\n\tHeaders = require(\"./headers\"),\n\tUtils = require(\"./util\");\n\nmodule.exports = function (/*String|Buffer*/input, /*Number*/inputType) {\n\tvar entryList = [],\n\t\tentryTable = {},\n\t\t_comment = Buffer.alloc(0),\n\t\tfilename = \"\",\n\t\tfs = Utils.FileSystem.require(),\n\t\tinBuffer = null,\n\t\tmainHeader = new Headers.MainHeader();\n\n\tif (inputType === Utils.Constants.FILE) {\n\t\t// is a filename\n\t\tfilename = input;\n\t\tinBuffer = fs.readFileSync(filename);\n\t\treadMainHeader();\n\t} else if (inputType === Utils.Constants.BUFFER) {\n\t\t// is a memory buffer\n\t\tinBuffer = input;\n\t\treadMainHeader();\n\t} else {\n\t\t// none. is a new file\n\t}\n\n\tfunction readEntries() {\n\t\tentryTable = {};\n\t\tentryList = new Array(mainHeader.diskEntries);  // total number of entries\n\t\tvar index = mainHeader.offset;  // offset of first CEN header\n\t\tfor (var i = 0; i < entryList.length; i++) {\n\n\t\t\tvar tmp = index,\n\t\t\t\tentry = new ZipEntry(inBuffer);\n\t\t\tentry.header = inBuffer.slice(tmp, tmp += Utils.Constants.CENHDR);\n\n\t\t\tentry.entryName = inBuffer.slice(tmp, tmp += entry.header.fileNameLength);\n\n\t\t\tif (entry.header.extraLength) {\n\t\t\t\tentry.extra = inBuffer.slice(tmp, tmp += entry.header.extraLength);\n\t\t\t}\n\n\t\t\tif (entry.header.commentLength)\n\t\t\t\tentry.comment = inBuffer.slice(tmp, tmp + entry.header.commentLength);\n\n\t\t\tindex += entry.header.entryHeaderSize;\n\n\t\t\tentryList[i] = entry;\n\t\t\tentryTable[entry.entryName] = entry;\n\t\t}\n\t}\n\n\tfunction readMainHeader() {\n\t\tvar i = inBuffer.length - Utils.Constants.ENDHDR, // END header size\n\t\t\tn = Math.max(0, i - 0xFFFF), // 0xFFFF is the max zip file comment length\n\t\t\tendOffset = -1; // Start offset of the END header\n\n\t\tfor (i; i >= n; i--) {\n\t\t\tif (inBuffer[i] !== 0x50) continue; // quick check that the byte is 'P'\n\t\t\tif (inBuffer.readUInt32LE(i) === Utils.Constants.ENDSIG) { // \"PK\\005\\006\"\n\t\t\t\tendOffset = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (!~endOffset)\n\t\t\tthrow Utils.Errors.INVALID_FORMAT;\n\n\t\tmainHeader.loadFromBinary(inBuffer.slice(endOffset, endOffset + Utils.Constants.ENDHDR));\n\t\tif (mainHeader.commentLength) {\n\t\t\t_comment = inBuffer.slice(endOffset + Utils.Constants.ENDHDR);\n\t\t}\n\t\treadEntries();\n\t}\n\n\treturn {\n\t\t/**\n\t\t * Returns an array of ZipEntry objects existent in the current opened archive\n\t\t * @return Array\n\t\t */\n\t\tget entries() {\n\t\t\treturn entryList;\n\t\t},\n\n\t\t/**\n\t\t * Archive comment\n\t\t * @return {String}\n\t\t */\n\t\tget comment() {\n\t\t\treturn _comment.toString();\n\t\t},\n\t\tset comment(val) {\n\t\t\tmainHeader.commentLength = val.length;\n\t\t\t_comment = val;\n\t\t},\n\n\t\t/**\n\t\t * Returns a reference to the entry with the given name or null if entry is inexistent\n\t\t *\n\t\t * @param entryName\n\t\t * @return ZipEntry\n\t\t */\n\t\tgetEntry: function (/*String*/entryName) {\n\t\t\treturn entryTable[entryName] || null;\n\t\t},\n\n\t\t/**\n\t\t * Adds the given entry to the entry list\n\t\t *\n\t\t * @param entry\n\t\t */\n\t\tsetEntry: function (/*ZipEntry*/entry) {\n\t\t\tentryList.push(entry);\n\t\t\tentryTable[entry.entryName] = entry;\n\t\t\tmainHeader.totalEntries = entryList.length;\n\t\t},\n\n\t\t/**\n\t\t * Removes the entry with the given name from the entry list.\n\t\t *\n\t\t * If the entry is a directory, then all nested files and directories will be removed\n\t\t * @param entryName\n\t\t */\n\t\tdeleteEntry: function (/*String*/entryName) {\n\t\t\tvar entry = entryTable[entryName];\n\t\t\tif (entry && entry.isDirectory) {\n\t\t\t\tvar _self = this;\n\t\t\t\tthis.getEntryChildren(entry).forEach(function (child) {\n\t\t\t\t\tif (child.entryName !== entryName) {\n\t\t\t\t\t\t_self.deleteEntry(child.entryName)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t\tentryList.splice(entryList.indexOf(entry), 1);\n\t\t\tdelete(entryTable[entryName]);\n\t\t\tmainHeader.totalEntries = entryList.length;\n\t\t},\n\n\t\t/**\n\t\t *  Iterates and returns all nested files and directories of the given entry\n\t\t *\n\t\t * @param entry\n\t\t * @return Array\n\t\t */\n\t\tgetEntryChildren: function (/*ZipEntry*/entry) {\n\t\t\tif (entry.isDirectory) {\n\t\t\t\tvar list = [],\n\t\t\t\t\tname = entry.entryName,\n\t\t\t\t\tlen = name.length;\n\n\t\t\t\tentryList.forEach(function (zipEntry) {\n\t\t\t\t\tif (zipEntry.entryName.substr(0, len) === name) {\n\t\t\t\t\t\tlist.push(zipEntry);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn list;\n\t\t\t}\n\t\t\treturn []\n\t\t},\n\n\t\t/**\n\t\t * Returns the zip file\n\t\t *\n\t\t * @return Buffer\n\t\t */\n\t\tcompressToBuffer: function () {\n\t\t\tif (entryList.length > 1) {\n\t\t\t\tentryList.sort(function (a, b) {\n\t\t\t\t\tvar nameA = a.entryName.toLowerCase();\n\t\t\t\t\tvar nameB = b.entryName.toLowerCase();\n\t\t\t\t\tif (nameA < nameB) {\n\t\t\t\t\t\treturn -1\n\t\t\t\t\t}\n\t\t\t\t\tif (nameA > nameB) {\n\t\t\t\t\t\treturn 1\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar totalSize = 0,\n\t\t\t\tdataBlock = [],\n\t\t\t\tentryHeaders = [],\n\t\t\t\tdindex = 0;\n\n\t\t\tmainHeader.size = 0;\n\t\t\tmainHeader.offset = 0;\n\n\t\t\tentryList.forEach(function (entry) {\n\t\t\t\t// compress data and set local and entry header accordingly. Reason why is called first\n\t\t\t\tvar compressedData = entry.getCompressedData();\n\t\t\t\t// data header\n\t\t\t\tentry.header.offset = dindex;\n\t\t\t\tvar dataHeader = entry.header.dataHeaderToBinary();\n\t\t\t\tvar entryNameLen = entry.rawEntryName.length;\n\t\t\t\tvar extra = entry.extra.toString();\n\t\t\t\tvar postHeader = Buffer.alloc(entryNameLen + extra.length);\n\t\t\t\tentry.rawEntryName.copy(postHeader, 0);\n\t\t\t\tpostHeader.fill(extra, entryNameLen);\n\n\t\t\t\tvar dataLength = dataHeader.length + postHeader.length + compressedData.length;\n\n\t\t\t\tdindex += dataLength;\n\n\t\t\t\tdataBlock.push(dataHeader);\n\t\t\t\tdataBlock.push(postHeader);\n\t\t\t\tdataBlock.push(compressedData);\n\n\t\t\t\tvar entryHeader = entry.packHeader();\n\t\t\t\tentryHeaders.push(entryHeader);\n\t\t\t\tmainHeader.size += entryHeader.length;\n\t\t\t\ttotalSize += (dataLength + entryHeader.length);\n\t\t\t});\n\n\t\t\ttotalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n\t\t\t// point to end of data and beginning of central directory first record\n\t\t\tmainHeader.offset = dindex;\n\n\t\t\tdindex = 0;\n\t\t\tvar outBuffer = Buffer.alloc(totalSize);\n\t\t\tdataBlock.forEach(function (content) {\n\t\t\t\tcontent.copy(outBuffer, dindex); // write data blocks\n\t\t\t\tdindex += content.length;\n\t\t\t});\n\t\t\tentryHeaders.forEach(function (content) {\n\t\t\t\tcontent.copy(outBuffer, dindex); // write central directory entries\n\t\t\t\tdindex += content.length;\n\t\t\t});\n\n\t\t\tvar mh = mainHeader.toBinary();\n\t\t\tif (_comment) {\n\t\t\t\t_comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment\n\t\t\t}\n\n\t\t\tmh.copy(outBuffer, dindex); // write main header\n\n\t\t\treturn outBuffer\n\t\t},\n\n\t\ttoAsyncBuffer: function (/*Function*/onSuccess, /*Function*/onFail, /*Function*/onItemStart, /*Function*/onItemEnd) {\n\t\t\tif (entryList.length > 1) {\n\t\t\t\tentryList.sort(function (a, b) {\n\t\t\t\t\tvar nameA = a.entryName.toLowerCase();\n\t\t\t\t\tvar nameB = b.entryName.toLowerCase();\n\t\t\t\t\tif (nameA > nameB) {\n\t\t\t\t\t\treturn -1\n\t\t\t\t\t}\n\t\t\t\t\tif (nameA < nameB) {\n\t\t\t\t\t\treturn 1\n\t\t\t\t\t}\n\t\t\t\t\treturn 0;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tvar totalSize = 0,\n\t\t\t\tdataBlock = [],\n\t\t\t\tentryHeaders = [],\n\t\t\t\tdindex = 0;\n\n\t\t\tmainHeader.size = 0;\n\t\t\tmainHeader.offset = 0;\n\n\t\t\tvar compress = function (entryList) {\n\t\t\t\tvar self = arguments.callee;\n\t\t\t\tif (entryList.length) {\n\t\t\t\t\tvar entry = entryList.pop();\n\t\t\t\t\tvar name = entry.entryName + entry.extra.toString();\n\t\t\t\t\tif (onItemStart) onItemStart(name);\n\t\t\t\t\tentry.getCompressedDataAsync(function (compressedData) {\n\t\t\t\t\t\tif (onItemEnd) onItemEnd(name);\n\n\t\t\t\t\t\tentry.header.offset = dindex;\n\t\t\t\t\t\t// data header\n\t\t\t\t\t\tvar dataHeader = entry.header.dataHeaderToBinary();\n\t\t\t\t\t\tvar postHeader;\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tpostHeader = Buffer.alloc(name.length, name);  // using alloc will work on node  5.x+\n\t\t\t\t\t\t} catch(e){\n\t\t\t\t\t\t\tpostHeader = new Buffer(name); // use deprecated method if alloc fails...\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar dataLength = dataHeader.length + postHeader.length + compressedData.length;\n\n\t\t\t\t\t\tdindex += dataLength;\n\n\t\t\t\t\t\tdataBlock.push(dataHeader);\n\t\t\t\t\t\tdataBlock.push(postHeader);\n\t\t\t\t\t\tdataBlock.push(compressedData);\n\n\t\t\t\t\t\tvar entryHeader = entry.packHeader();\n\t\t\t\t\t\tentryHeaders.push(entryHeader);\n\t\t\t\t\t\tmainHeader.size += entryHeader.length;\n\t\t\t\t\t\ttotalSize += (dataLength + entryHeader.length);\n\n\t\t\t\t\t\tif (entryList.length) {\n\t\t\t\t\t\t\tself(entryList);\n\t\t\t\t\t\t} else {\n\n\n\t\t\t\t\t\t\ttotalSize += mainHeader.mainHeaderSize; // also includes zip file comment length\n\t\t\t\t\t\t\t// point to end of data and beginning of central directory first record\n\t\t\t\t\t\t\tmainHeader.offset = dindex;\n\n\t\t\t\t\t\t\tdindex = 0;\n\t\t\t\t\t\t\tvar outBuffer = Buffer.alloc(totalSize);\n\t\t\t\t\t\t\tdataBlock.forEach(function (content) {\n\t\t\t\t\t\t\t\tcontent.copy(outBuffer, dindex); // write data blocks\n\t\t\t\t\t\t\t\tdindex += content.length;\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tentryHeaders.forEach(function (content) {\n\t\t\t\t\t\t\t\tcontent.copy(outBuffer, dindex); // write central directory entries\n\t\t\t\t\t\t\t\tdindex += content.length;\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tvar mh = mainHeader.toBinary();\n\t\t\t\t\t\t\tif (_comment) {\n\t\t\t\t\t\t\t\t_comment.copy(mh, Utils.Constants.ENDHDR); // add zip file comment\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tmh.copy(outBuffer, dindex); // write main header\n\n\t\t\t\t\t\t\tonSuccess(outBuffer);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tcompress(entryList);\n\t\t}\n\t}\n};\n","export type EventType = string | symbol;\n\n// An event handler can take an optional event argument\n// and should not return a value\nexport type Handler<T = any> = (event?: T) => void;\nexport type WildcardHandler = (type: EventType, event?: any) => void;\n\n// An array of all currently registered event handlers for a type\nexport type EventHandlerList = Array<Handler>;\nexport type WildCardEventHandlerList = Array<WildcardHandler>;\n\n// A map of event types and their corresponding event handlers.\nexport type EventHandlerMap = Map<EventType, EventHandlerList | WildCardEventHandlerList>;\n\nexport interface Emitter {\n\tall: EventHandlerMap;\n\n\ton<T = any>(type: EventType, handler: Handler<T>): void;\n\ton(type: '*', handler: WildcardHandler): void;\n\n\toff<T = any>(type: EventType, handler: Handler<T>): void;\n\toff(type: '*', handler: WildcardHandler): void;\n\n\temit<T = any>(type: EventType, event?: T): void;\n\temit(type: '*', event?: any): void;\n}\n\n/**\n * Mitt: Tiny (~200b) functional event emitter / pubsub.\n * @name mitt\n * @returns {Mitt}\n */\nexport default function mitt(all?: EventHandlerMap): Emitter {\n\tall = all || new Map();\n\n\treturn {\n\n\t\t/**\n\t\t * A Map of event names to registered handler functions.\n\t\t */\n\t\tall,\n\n\t\t/**\n\t\t * Register an event handler for the given type.\n\t\t * @param {string|symbol} type Type of event to listen for, or `\"*\"` for all events\n\t\t * @param {Function} handler Function to call in response to given event\n\t\t * @memberOf mitt\n\t\t */\n\t\ton<T = any>(type: EventType, handler: Handler<T>) {\n\t\t\tconst handlers = all.get(type);\n\t\t\tconst added = handlers && handlers.push(handler);\n\t\t\tif (!added) {\n\t\t\t\tall.set(type, [handler]);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove an event handler for the given type.\n\t\t * @param {string|symbol} type Type of event to unregister `handler` from, or `\"*\"`\n\t\t * @param {Function} handler Handler function to remove\n\t\t * @memberOf mitt\n\t\t */\n\t\toff<T = any>(type: EventType, handler: Handler<T>) {\n\t\t\tconst handlers = all.get(type);\n\t\t\tif (handlers) {\n\t\t\t\thandlers.splice(handlers.indexOf(handler) >>> 0, 1);\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Invoke all handlers for the given type.\n\t\t * If present, `\"*\"` handlers are invoked after type-matched handlers.\n\t\t *\n\t\t * Note: Manually firing \"*\" handlers is not supported.\n\t\t *\n\t\t * @param {string|symbol} type The event type to invoke\n\t\t * @param {Any} [evt] Any value (object is recommended and powerful), passed to each handler\n\t\t * @memberOf mitt\n\t\t */\n\t\temit<T = any>(type: EventType, evt: T) {\n\t\t\t((all.get(type) || []) as EventHandlerList).slice().map((handler) => { handler(evt); });\n\t\t\t((all.get('*') || []) as WildCardEventHandlerList).slice().map((handler) => { handler(type, evt); });\n\t\t}\n\t};\n}\n","import * as monthUtils from '../shared/months';\nimport * as sheet from '../server/sheet';\nimport * as budget from '../server/budget/base';\nimport * as db from '../server/db';\nimport * as prefs from '../server/prefs';\nimport * as budgetActions from '../server/budget/actions';\nimport { runQuery as aqlQuery } from '../server/aql/schema/run-query';\nimport { batchMessages, setSyncingMode } from '../server/sync';\nimport { runHandler, runMutator } from '../server/mutators';\nimport { addTransactions } from '../server/accounts/sync';\nimport q from '../shared/query';\n\nfunction pickRandom(list) {\n  return list[((Math.random() * list.length) | 0) % list.length];\n}\n\nfunction number(start, end) {\n  return start + (end - start) * Math.random();\n}\n\nfunction integer(start, end) {\n  return number(start, end) | 0;\n}\n\nfunction findMin(items, field) {\n  let item = items[0];\n  for (let i = 0; i < items.length; i++) {\n    if (items[i][field] < item[field]) {\n      item = items[i];\n    }\n  }\n  return item;\n}\n\nfunction getStartingBalanceCat(categories) {\n  return categories.find(c => c.name === 'Starting Balances').id;\n}\n\nfunction extractCommonThings(payees, groups) {\n  let incomePayee = payees.find(p => p.name === 'Deposit');\n  let expensePayees = payees.filter(\n    p => p.name !== 'Deposit' && p.name !== 'Starting Balance'\n  );\n  let expenseGroup = groups.find(g => g.is_income === 0);\n  let incomeGroup = groups.find(g => g.is_income === 1);\n  let categories = expenseGroup.categories.filter(\n    c =>\n      [\n        'Food',\n        'Restaurants',\n        'Entertainment',\n        'Clothing',\n        'General',\n        'Gift',\n        'Medical'\n      ].indexOf(c.name) !== -1\n  );\n\n  return {\n    incomePayee,\n    expensePayees: expensePayees.filter(p => !p.bill),\n    incomeGroup,\n    expenseCategories: categories,\n    billCategories: groups.find(g => g.name === 'Bills').categories,\n    billPayees: expensePayees.filter(p => p.bill)\n  };\n}\n\nasync function fillPrimaryChecking(handlers, account, payees, groups) {\n  let {\n    incomePayee,\n    expensePayees,\n    incomeGroup,\n    expenseCategories,\n    billCategories,\n    billPayees\n  } = extractCommonThings(payees, groups);\n  let numTransactions = integer(100, 200);\n\n  let transactions = [];\n  for (let i = 0; i < numTransactions; i++) {\n    let payee;\n    if (Math.random() < 0.09) {\n      payee = incomePayee;\n    } else {\n      payee = pickRandom(expensePayees);\n    }\n\n    let category;\n    if (payee.name === 'Deposit') {\n      category = incomeGroup.categories.find(c => c.name === 'Income');\n    } else {\n      category = pickRandom(expenseCategories);\n    }\n\n    let amount;\n    if (payee.name === 'Deposit') {\n      amount = integer(50000, 70000);\n    } else {\n      amount = integer(0, Math.random() < 0.05 ? -8000 : -700);\n    }\n\n    let transaction = {\n      amount,\n      payee: payee.id,\n      account: account.id,\n      date: monthUtils.subDays(monthUtils.currentDay(), (i / 3) | 0),\n      category: category.id\n    };\n    transactions.push(transaction);\n\n    if (Math.random() < 0.2) {\n      let a = (transaction.amount / 3) | 0;\n      let pick = () =>\n        payee === incomePayee\n          ? incomeGroup.categories.find(c => c.name === 'Income').id\n          : pickRandom(expenseCategories).id;\n      transaction.subtransactions = [\n        { amount: a, category: pick() },\n        { amount: a, category: pick() },\n        {\n          amount: transaction.amount - a * 2,\n          category: pick()\n        }\n      ];\n    }\n  }\n\n  let earliestMonth = monthUtils.monthFromDate(\n    transactions[transactions.length - 1].date\n  );\n  let months = monthUtils.rangeInclusive(\n    earliestMonth,\n    monthUtils.currentMonth()\n  );\n  let currentDay = monthUtils.currentDay();\n  for (let month of months) {\n    let date = monthUtils.addDays(month, '12');\n    if (monthUtils.isBefore(date, currentDay)) {\n      transactions.push({\n        amount: -10000,\n        payee: billPayees.find(p => p.name.toLowerCase().includes('power')).id,\n        account: account.id,\n        date,\n        category: billCategories.find(c => c.name === 'Power').id\n      });\n    }\n\n    date = monthUtils.addDays(month, '18');\n    if (monthUtils.isBefore(date, currentDay)) {\n      transactions.push({\n        amount: -9000,\n        payee: billPayees.find(p => p.name.toLowerCase().includes('water')).id,\n        account: account.id,\n        date,\n        category: billCategories.find(c => c.name === 'Water').id\n      });\n    }\n\n    date = monthUtils.addDays(month, '2');\n    if (monthUtils.isBefore(date, currentDay)) {\n      transactions.push({\n        amount: -120000,\n        payee: billPayees.find(p => p.name.toLowerCase().includes('housy')).id,\n        account: account.id,\n        date,\n        category: billCategories.find(c => c.name === 'Mortgage').id\n      });\n    }\n\n    date = monthUtils.addDays(month, '20');\n    if (monthUtils.isBefore(date, currentDay)) {\n      transactions.push({\n        amount: -6000,\n        payee: billPayees.find(p => p.name.toLowerCase().includes('internet'))\n          .id,\n        account: account.id,\n        date,\n        category: billCategories.find(c => c.name === 'Internet').id\n      });\n    }\n\n    date = monthUtils.addDays(month, '23');\n    if (monthUtils.isBefore(date, currentDay)) {\n      transactions.push({\n        amount: -7500,\n        payee: billPayees.find(p => p.name.toLowerCase().includes('t-mobile'))\n          .id,\n        account: account.id,\n        date,\n        category: billCategories.find(c => c.name === 'Cell').id\n      });\n    }\n  }\n\n  let earliestDate = null;\n  transactions.forEach(t => {\n    if (earliestDate == null || t.date < earliestDate) {\n      earliestDate = t.date;\n    }\n  });\n\n  transactions.unshift({\n    amount: 100000,\n    payee: payees.find(p => p.name === 'Starting Balance').id,\n    account: account.id,\n    date: earliestDate,\n    category: getStartingBalanceCat(incomeGroup.categories),\n    starting_balance_flag: true\n  });\n\n  return addTransactions(account.id, transactions);\n}\n\nasync function fillChecking(handlers, account, payees, groups) {\n  let {\n    incomePayee,\n    expensePayees,\n    incomeGroup,\n    expenseCategories\n  } = extractCommonThings(payees, groups);\n  let numTransactions = integer(20, 40);\n\n  let transactions = [];\n  for (let i = 0; i < numTransactions; i++) {\n    let payee;\n    if (Math.random() < 0.04) {\n      payee = incomePayee;\n    } else {\n      payee = pickRandom(expensePayees);\n    }\n\n    let category;\n    if (payee.name === 'Deposit') {\n      category = incomeGroup.categories.find(c => c.name === 'Income');\n    } else {\n      category = pickRandom(expenseCategories);\n    }\n\n    let amount =\n      payee.name === 'Deposit' ? integer(50000, 70000) : integer(0, -10000);\n\n    transactions.push({\n      amount,\n      payee: payee.id,\n      account: account.id,\n      date: monthUtils.subDays(monthUtils.currentDay(), (i * 2) | 0),\n      category: category.id\n    });\n  }\n\n  transactions.unshift({\n    amount: integer(90000, 120000),\n    payee: payees.find(p => p.name === 'Starting Balance').id,\n    account: account.id,\n    date: transactions[transactions.length - 1].date,\n    category: getStartingBalanceCat(incomeGroup.categories),\n    starting_balance_flag: true\n  });\n\n  await handlers['transactions-batch-update']({\n    added: transactions,\n    fastMode: true\n  });\n}\n\nasync function fillInvestment(handlers, account, payees, groups) {\n  let {\n    incomePayee,\n    expensePayees,\n    incomeGroup,\n    expenseCategories\n  } = extractCommonThings(payees, groups);\n\n  let numTransactions = integer(10, 30);\n\n  let transactions = [];\n  for (let i = 0; i < numTransactions; i++) {\n    let payee = incomePayee;\n    let category = incomeGroup.categories.find(c => c.name === 'Income');\n\n    let amount = integer(10000, 20000);\n\n    transactions.push({\n      amount,\n      payee: payee.id,\n      account: account.id,\n      date: monthUtils.subDays(monthUtils.currentDay(), integer(10, 360)),\n      category: category.id\n    });\n  }\n\n  transactions.unshift({\n    amount: integer(10000, 20000),\n    payee: payees.find(p => p.name === 'Starting Balance').id,\n    account: account.id,\n    date: findMin(transactions, 'date').date,\n    category: getStartingBalanceCat(incomeGroup.categories),\n    starting_balance_flag: true\n  });\n\n  await handlers['transactions-batch-update']({\n    added: transactions,\n    fastMode: true\n  });\n}\n\nasync function fillSavings(handlers, account, payees, groups) {\n  let {\n    incomePayee,\n    expensePayees,\n    incomeGroup,\n    expenseCategories\n  } = extractCommonThings(payees, groups);\n\n  let numTransactions = integer(15, 40);\n\n  let transactions = [];\n  for (let i = 0; i < numTransactions; i++) {\n    let payee;\n    if (Math.random() < 0.3) {\n      payee = incomePayee;\n    } else {\n      payee = pickRandom(expensePayees);\n    }\n    let category =\n      payee === incomePayee\n        ? incomeGroup.categories.find(c => c.name === 'Income')\n        : pickRandom(expenseCategories);\n    let amount =\n      payee === incomePayee ? integer(10000, 80000) : integer(-10000, -2000);\n\n    transactions.push({\n      amount,\n      payee: payee.id,\n      account: account.id,\n      date: monthUtils.subDays(monthUtils.currentDay(), (i * 5) | 0),\n      category: category.id\n    });\n  }\n\n  transactions.unshift({\n    amount: 30000,\n    payee: payees.find(p => p.name === 'Starting Balance').id,\n    account: account.id,\n    date: transactions[transactions.length - 1].date,\n    category: getStartingBalanceCat(incomeGroup.categories),\n    starting_balance_flag: true\n  });\n\n  await handlers['transactions-batch-update']({\n    added: transactions,\n    fastMode: true\n  });\n}\n\nasync function fillMortgage(handlers, account, payees, groups) {\n  let {\n    incomePayee,\n    expensePayees,\n    incomeGroup,\n    expenseCategories\n  } = extractCommonThings(payees, groups);\n\n  let numTransactions = integer(7, 10);\n  let amount = integer(100000, 200000);\n  let category = incomeGroup.categories.find(c => c.name === 'Income');\n\n  let transactions = [\n    {\n      amount: integer(-3000, -3500) * 100 * 100,\n      payee: payees.find(p => p.name === 'Starting Balance').id,\n      account: account.id,\n      date:\n        monthUtils.subMonths(monthUtils.currentDay(), numTransactions) + '-02',\n      category: getStartingBalanceCat(incomeGroup.categories),\n      starting_balance_flag: true\n    }\n  ];\n  for (let i = 0; i < numTransactions; i++) {\n    let payee = incomePayee;\n\n    transactions.push({\n      amount,\n      payee: payee.id,\n      account: account.id,\n      date: monthUtils.subMonths(monthUtils.currentDay(), i) + '-02',\n      category: category.id,\n      starting_balance_flag: true\n    });\n  }\n\n  await handlers['transactions-batch-update']({\n    added: transactions,\n    fastMode: true\n  });\n}\n\nasync function fillOther(handlers, account, payees, groups) {\n  let {\n    incomePayee,\n    expensePayees,\n    incomeGroup,\n    expenseCategories\n  } = extractCommonThings(payees, groups);\n\n  let numTransactions = integer(3, 6);\n  let category = incomeGroup.categories.find(c => c.name === 'Income');\n\n  let transactions = [\n    {\n      amount: integer(3250, 3700) * 100 * 100,\n      payee: payees.find(p => p.name === 'Starting Balance').id,\n      account: account.id,\n      date:\n        monthUtils.subMonths(monthUtils.currentDay(), numTransactions) + '-02',\n      category: getStartingBalanceCat(incomeGroup.categories),\n      starting_balance_flag: true\n    }\n  ];\n  for (let i = 0; i < numTransactions; i++) {\n    let payee = incomePayee;\n    let amount = integer(4, 9) * 100 * 100;\n\n    transactions.push({\n      amount,\n      payee: payee.id,\n      account: account.id,\n      date: monthUtils.subMonths(monthUtils.currentDay(), i) + '-02',\n      category: category.id\n    });\n  }\n\n  await handlers['transactions-batch-update']({\n    added: transactions,\n    fastMode: true\n  });\n}\n\nasync function createBudget(accounts, payees, groups) {\n  let primaryAccount = accounts.find(a => (a.name = 'Bank of America'));\n  let earliestDate = (await db.first(\n    `SELECT * FROM v_transactions t LEFT JOIN accounts a ON t.account = a.id\n       WHERE a.offbudget = 0 AND t.is_child = 0 ORDER BY date ASC LIMIT 1`\n  )).date;\n  let earliestPrimaryDate = (await db.first(\n    `SELECT * FROM v_transactions t LEFT JOIN accounts a ON t.account = a.id\n       WHERE a.id = ? AND a.offbudget = 0 AND t.is_child = 0 ORDER BY date ASC LIMIT 1`,\n    [primaryAccount.id]\n  )).date;\n\n  let start = monthUtils.monthFromDate(db.fromDateRepr(earliestDate));\n  let end = monthUtils.currentMonth();\n  let months = monthUtils.rangeInclusive(start, end);\n\n  function category(name) {\n    for (let group of groups) {\n      let cat = group.categories.find(c => c.name === name);\n      if (cat) {\n        return cat;\n      }\n    }\n  }\n\n  function setBudget(month, category, amount) {\n    return budgetActions.setBudget({ month, category: category.id, amount });\n  }\n\n  function setBudgetIfSpent(month, cat) {\n    let spent = sheet.getCellValue(\n      monthUtils.sheetForMonth(month),\n      `sum-amount-${cat.id}`\n    );\n\n    if (spent < 0) {\n      setBudget(month, cat, -spent);\n    }\n  }\n\n  await runMutator(() =>\n    batchMessages(async () => {\n      for (let month of months) {\n        if (\n          month >=\n          monthUtils.monthFromDate(db.fromDateRepr(earliestPrimaryDate))\n        ) {\n          setBudget(month, category('Food'), 40000);\n          setBudget(month, category('Restaurants'), 30000);\n          setBudget(month, category('Entertainment'), 10000);\n          setBudget(month, category('Clothing'), 3000);\n          setBudget(month, category('General'), 50000);\n          setBudget(month, category('Gift'), 7500);\n          setBudget(month, category('Medical'), 10000);\n\n          setBudget(month, category('Cell'), 7500);\n          setBudget(month, category('Internet'), 6000);\n          setBudget(month, category('Mortgage'), 120000);\n          setBudget(month, category('Water'), 9000);\n          setBudget(month, category('Power'), 10000);\n        } else {\n          setBudgetIfSpent(month, category('Food'));\n          setBudgetIfSpent(month, category('Restaurants'));\n          setBudgetIfSpent(month, category('Entertainment'));\n          setBudgetIfSpent(month, category('Clothing'));\n          setBudgetIfSpent(month, category('General'));\n          setBudgetIfSpent(month, category('Gift'));\n          setBudgetIfSpent(month, category('Medical'));\n\n          setBudgetIfSpent(month, category('Cell'));\n          setBudgetIfSpent(month, category('Internet'));\n          setBudgetIfSpent(month, category('Mortgage'));\n          setBudgetIfSpent(month, category('Water'));\n          setBudgetIfSpent(month, category('Power'));\n        }\n      }\n    })\n  );\n\n  await sheet.waitOnSpreadsheet();\n\n  await runMutator(() =>\n    batchMessages(async () => {\n      let prevSaved = 0;\n      for (let month of months) {\n        if (\n          month >=\n            monthUtils.monthFromDate(db.fromDateRepr(earliestPrimaryDate)) &&\n          month <= monthUtils.currentMonth()\n        ) {\n          let sheetName = monthUtils.sheetForMonth(month);\n          let toBudget = sheet.getCellValue(sheetName, 'to-budget');\n          let available = toBudget - prevSaved;\n\n          if (available - 403000 > 0) {\n            setBudget(month, category('Savings'), available - 403000);\n            budgetActions.setBuffer(month, 403000);\n\n            prevSaved += available - 403000;\n          } else if (available > 0) {\n            budgetActions.setBuffer(month, available);\n          }\n        }\n      }\n    })\n  );\n\n  await sheet.waitOnSpreadsheet();\n\n  let sheetName = monthUtils.sheetForMonth(monthUtils.currentMonth());\n  let toBudget = sheet.getCellValue(sheetName, 'to-budget');\n  if (toBudget < 0) {\n    await addTransactions(primaryAccount.id, [\n      {\n        amount: -toBudget,\n        category: category('Income').id,\n        date: monthUtils.currentMonth() + '-01'\n      }\n    ]);\n  }\n\n  // let sheetName = monthUtils.sheetForMonth(monthUtils.currentMonth());\n  // let toBudget = sheet.getCellValue(sheetName, 'to-budget');\n  // setBudget(monthUtils.currentMonth(), category('Savings'), toBudget);\n\n  await sheet.waitOnSpreadsheet();\n}\n\nexport async function createTestBudget(handlers) {\n  setSyncingMode('import');\n\n  await db.execQuery('PRAGMA journal_mode = OFF');\n\n  // Clear out the default categories. This is fine to do without\n  // going through the sync system because we are in import mode and\n  // these aren't tracked through messages anyway.\n  await db.runQuery('DELETE FROM categories;');\n  await db.runQuery('DELETE FROM category_groups');\n\n  let accounts = [\n    { name: 'Bank of America', type: 'checking' },\n    { name: 'Ally Savings', type: 'savings' },\n    { name: 'Capital One Checking', type: 'checking' },\n    { name: 'HSBC', type: 'checking' },\n    { name: 'Vanguard 401k', type: 'investment', offBudget: 1 },\n    { name: 'Mortgage', type: 'mortgage', offBudget: 1 },\n    { name: 'House Asset', type: 'other', offBudget: 1 },\n    { name: 'Roth IRA', type: 'investment', offBudget: 1 }\n  ];\n  await runMutator(() =>\n    batchMessages(async () => {\n      for (let account of accounts) {\n        account.id = await handlers['account-create'](account);\n      }\n    })\n  );\n\n  let payees = [\n    { name: 'Starting Balance' },\n    { name: 'Kroger' },\n    { name: 'Publix' },\n    { name: 'Home Depot' },\n    { name: 'Movies' },\n    { name: 'Online store' },\n    { name: 'Deposit' },\n    { name: 'Dominion Power', bill: true },\n    { name: 'Extra Watery', bill: true },\n    { name: 'Housy House', bill: true },\n    { name: 'Fast Internet', bill: true },\n    { name: 'T-mobile', bill: true }\n  ];\n\n  await runMutator(() =>\n    batchMessages(async () => {\n      for (let payee of payees) {\n        payee.id = await handlers['payee-create']({ name: payee.name });\n      }\n    })\n  );\n\n  let categoryGroups = [\n    {\n      name: 'Usual Expenses',\n      categories: [\n        { name: 'Savings' },\n        { name: 'Medical' },\n        { name: 'Gift' },\n        { name: 'General' },\n        { name: 'Clothing' },\n        { name: 'Entertainment' },\n        { name: 'Restaurants' },\n        { name: 'Food' }\n      ]\n    },\n    {\n      name: 'Bills',\n      categories: [\n        { name: 'Power' },\n        { name: 'Water' },\n        { name: 'Mortgage' },\n        { name: 'Internet' },\n        { name: 'Cell' }\n      ]\n    },\n    {\n      name: 'Income',\n      is_income: true,\n      categories: [\n        { name: 'Income', is_income: true },\n        { name: 'Misc', is_income: true },\n        { name: 'Starting Balances', is_income: true }\n      ]\n    }\n  ];\n\n  await runMutator(async () => {\n    for (let group of categoryGroups) {\n      group.id = await handlers['category-group-create']({\n        name: group.name,\n        isIncome: group.is_income ? 1 : 0\n      });\n\n      for (let category of group.categories) {\n        category.id = await handlers['category-create']({\n          ...category,\n          isIncome: category.is_income ? 1 : 0,\n          groupId: group.id\n        });\n      }\n    }\n  });\n\n  let allGroups = (await runHandler(handlers['get-categories'])).grouped;\n\n  setSyncingMode('import');\n\n  await runMutator(() =>\n    batchMessages(async () => {\n      for (let account of accounts) {\n        switch (account.type) {\n          case 'checking':\n            if (account.name === 'Bank of America') {\n              await fillPrimaryChecking(handlers, account, payees, allGroups);\n            } else {\n              await fillChecking(handlers, account, payees, allGroups);\n            }\n            break;\n          case 'investment':\n            await fillInvestment(handlers, account, payees, allGroups);\n            break;\n          case 'savings':\n            await fillSavings(handlers, account, payees, allGroups);\n            break;\n          case 'mortgage':\n            await fillMortgage(handlers, account, payees, allGroups);\n            break;\n          case 'other':\n            if (account.name === 'House Asset') {\n              await fillOther(handlers, account, payees, allGroups);\n            } else {\n              await fillChecking(handlers, account, payees, allGroups);\n            }\n            break;\n          default:\n        }\n      }\n    })\n  );\n\n  setSyncingMode('import');\n\n  // This checks to see if the primary account is in the negative.\n  // This might happen depending on the transactions added, but we\n  // don't want to show that as it'd be weird. We modify the latest\n  // deposit transaction to force it to be positive\n  let primaryAccount = accounts.find(a => (a.name = 'Bank of America'));\n  let { data: primaryBalance } = await aqlQuery(\n    q('transactions')\n      .filter({ account: primaryAccount.id })\n      .calculate({ $sum: '$amount' })\n      .serialize()\n  );\n  if (primaryBalance < 0) {\n    let { data: results } = await aqlQuery(\n      q('transactions')\n        .filter({ account: primaryAccount.id, amount: { $gt: 0 } })\n        .limit(1)\n        .select(['id', 'amount'])\n        .serialize()\n    );\n    let lastDeposit = results[0];\n\n    await runHandler(handlers['transaction-update'], {\n      ...lastDeposit,\n      amount: lastDeposit.amount + -primaryBalance + integer(10000, 20000)\n    });\n  }\n\n  // Bust the cache and reload the spreadsheet\n  setSyncingMode('disabled');\n  await prefs.savePrefs({ isCached: false });\n  await sheet.reloadSpreadsheet(db);\n  await budget.createAllBudgets();\n\n  await sheet.waitOnSpreadsheet();\n\n  // Create a budget\n  await createBudget(accounts, payees, allGroups);\n}\n","export function captureException(exc) {\n  console.log('[Exception]', exc);\n  if (global.SentryClient) {\n    global.SentryClient.captureException(exc);\n  }\n}\n\nexport function captureBreadcrumb(breadcrumb) {\n  if (global.SentryClient) {\n    global.SentryClient.addBreadcrumb(breadcrumb);\n  }\n}\n","const lootFs = require('../fs');\nconst fs = require('fs');\nconst { join } = require('path');\n\nlet getStorePath = () => join(lootFs.getDataDir(), 'global-store.json');\nlet store;\nlet persisted = true;\n\nfunction init({ persist = true } = {}) {\n  if (persist) {\n    try {\n      store = JSON.parse(fs.readFileSync(getStorePath(), 'utf8'));\n    } catch (e) {\n      store = {};\n    }\n  } else {\n    store = {};\n  }\n\n  persisted = persist;\n}\n\nfunction _saveStore() {\n  if (persisted) {\n    return new Promise(function(resolve, reject) {\n      fs.writeFile(getStorePath(), JSON.stringify(store), 'utf8', function(\n        err,\n        _\n      ) {\n        return err ? reject(err) : resolve();\n      });\n    });\n  }\n}\n\nfunction getItem(key) {\n  return new Promise(function(resolve) {\n    return resolve(store[key]);\n  });\n}\n\nfunction setItem(key, value) {\n  store[key] = value;\n  return _saveStore();\n}\n\nfunction removeItem(key) {\n  delete store[key];\n  return _saveStore();\n}\n\nfunction multiGet(keys) {\n  return new Promise(function(resolve) {\n    return resolve(\n      keys.map(function(key) {\n        return [key, store[key]];\n      })\n    );\n  });\n}\n\nfunction multiSet(keyValues) {\n  keyValues.forEach(function([key, value]) {\n    store[key] = value;\n  });\n  return _saveStore();\n}\n\nfunction multiRemove(keys) {\n  keys.forEach(function(key) {\n    delete store[key];\n  });\n  return _saveStore();\n}\n\nmodule.exports = {\n  init,\n  getItem,\n  setItem,\n  removeItem,\n  multiGet,\n  multiSet,\n  multiRemove\n};\n","function init() {}\n\nfunction send(type, args) {\n  // Nothing\n}\n\nmodule.exports = { init, send };\n","let fs = require('fs');\nlet fetch = require('node-fetch');\n\nasync function fetchBinary(url, filepath) {\n  const res = await fetch(url);\n  return new Promise((resolve, reject) => {\n    const fileStream = fs.createWriteStream(filepath);\n    res.body.pipe(fileStream);\n    res.body.on('error', err => {\n      reject(err);\n    });\n    fileStream.on('finish', function() {\n      resolve();\n    });\n  });\n}\n\nmodule.exports = { fetch, fetchBinary };\n","const fs = require('fs');\nconst path = require('path');\n\nlet documentDir;\n\nlet rootPath = path.join(__dirname, '..', '..', '..', '..');\n\nif (__filename.match('bundle')) {\n  // The file name is not our filename and indicates that we're in the\n  // bundled form. Because of this, the root path is different.\n  rootPath = path.join(__dirname, '..');\n}\n\nmodule.exports = {\n  init: () => {\n    // Nothing to do\n  },\n  getDataDir: () => {\n    if (!process.env.ACTUAL_DATA_DIR) {\n      throw new Error('ACTUAL_DATA_DIR env variable is required');\n    }\n    return process.env.ACTUAL_DATA_DIR;\n  },\n  _setDocumentDir: dir => (documentDir = dir),\n  getDocumentDir: () => {\n    if (!documentDir) {\n      throw new Error('Document directory is not set');\n    }\n    return documentDir;\n  },\n  getBudgetDir: id => {\n    if (!id) {\n      throw new Error('getDocumentDir: id is falsy: ' + id);\n    }\n\n    // TODO: This should be better\n    //\n    // A cheesy safe guard. The id is generated from the budget name,\n    // so it provides an entry point for the user to accidentally (or\n    // intentionally) access other parts of the system. Always\n    // restrict it to only access files within the budget directory by\n    // never allowing slashes.\n    if (id.match(/[^A-Za-z0-9\\-_]/)) {\n      throw new Error(\n        `Invalid budget id \"${id}\". Check the id of your budget in the \"Advanced\" section of the settings page.`\n      );\n    }\n\n    return path.join(module.exports.getDocumentDir(), id);\n  },\n  bundledDatabasePath: path.join(rootPath, 'default-db.sqlite'),\n  migrationsPath: path.join(rootPath, 'migrations'),\n  demoBudgetPath: path.join(rootPath, 'demo-budget'),\n  join: path.join,\n  basename: filepath => path.basename(filepath),\n  listDir: filepath =>\n    new Promise((resolve, reject) => {\n      fs.readdir(filepath, (err, files) => {\n        if (err) {\n          reject(err);\n        } else {\n          resolve(files);\n        }\n      });\n    }),\n  exists: filepath =>\n    new Promise(resolve => {\n      fs.access(filepath, fs.constants.F_OK, err => {\n        return resolve(!err);\n      });\n    }),\n  mkdir: filepath =>\n    new Promise((resolve, reject) => {\n      fs.mkdir(filepath, err => {\n        if (err) {\n          reject(err);\n        } else {\n          resolve();\n        }\n      });\n    }),\n  size: filepath =>\n    new Promise((resolve, reject) => {\n      fs.stat(filepath, (err, stats) => {\n        if (err) {\n          reject(err);\n        } else {\n          resolve(stats.size);\n        }\n      });\n    }),\n  copyFile: (frompath, topath) => {\n    return new Promise((resolve, reject) => {\n      const readStream = fs.createReadStream(frompath);\n      const writeStream = fs.createWriteStream(topath);\n\n      readStream.on('error', reject);\n      writeStream.on('error', reject);\n\n      writeStream.on('open', () => readStream.pipe(writeStream));\n      writeStream.once('close', resolve);\n    });\n  },\n  readFile: (filepath, encoding = 'utf8') => {\n    if (encoding === 'binary') {\n      // `binary` is not actually a valid encoding, you pass `null` into node if\n      // you want a buffer\n      encoding = null;\n    }\n    return new Promise((resolve, reject) => {\n      fs.readFile(filepath, encoding, (err, data) => {\n        if (err) {\n          reject(err);\n        } else {\n          resolve(data);\n        }\n      });\n    });\n  },\n  writeFile: (filepath, contents) => {\n    return new Promise(function(resolve, reject) {\n      fs.writeFile(filepath, contents, 'utf8', function(err, _) {\n        return err ? reject(err) : resolve();\n      });\n    });\n  },\n  removeFile: filepath => {\n    return new Promise(function(resolve, reject) {\n      fs.unlink(filepath, err => {\n        return err ? reject(err) : resolve();\n      });\n    });\n  },\n  removeDir: dirpath => {\n    return new Promise(function(resolve, reject) {\n      fs.rmdir(dirpath, err => {\n        return err ? reject(err) : resolve();\n      });\n    });\n  },\n  removeDirRecursively: async dirpath => {\n    const f = module.exports;\n    if (await f.exists(dirpath)) {\n      for (let file of await f.listDir(dirpath)) {\n        const fullpath = f.join(dirpath, file);\n        if (fs.statSync(fullpath).isDirectory()) {\n          await f.removeDirRecursively(fullpath);\n        } else {\n          await f.removeFile(fullpath);\n        }\n      }\n\n      await f.removeDir(dirpath);\n    }\n  },\n  getModifiedTime: filepath => {\n    return new Promise(function(resolve, reject) {\n      fs.stat(filepath, (err, stats) => {\n        if (err) {\n          reject(err);\n        } else {\n          resolve(new Date(stats.mtime));\n        }\n      });\n    });\n  }\n};\n","export default {\n  info: (...args) => {\n    console.log(...args);\n  },\n  warn: (...args) => {\n    console.warn(...args);\n  }\n};\n","const Database = require('better-sqlite3');\n\nfunction verifyParamTypes(sql, arr) {\n  arr.forEach(val => {\n    if (typeof val !== 'string' && typeof val !== 'number' && val !== null) {\n      console.log(sql, arr);\n      throw new Error('Invalid field type ' + val + ' for sql ' + sql);\n    }\n  });\n}\n\nexport async function init() {}\n\nexport function prepare(db, sql) {\n  return db.prepare(sql);\n}\n\nexport function runQuery(db, sql, params = [], fetchAll) {\n  if (params) {\n    verifyParamTypes(sql, params);\n  }\n\n  let stmt;\n  try {\n    stmt = typeof sql === 'string' ? db.prepare(sql) : sql;\n  } catch (e) {\n    console.log('error', sql);\n    throw e;\n  }\n\n  if (fetchAll) {\n    try {\n      let result = stmt.all(...params);\n      return result;\n    } catch (e) {\n      console.log('error', sql);\n      throw e;\n    }\n  } else {\n    try {\n      let info = stmt.run(...params);\n      return { changes: info.changes, insertId: info.lastInsertRowid };\n    } catch (e) {\n      // console.log('error', sql);\n      throw e;\n    }\n  }\n}\n\nexport function execQuery(db, sql) {\n  db.exec(sql);\n}\n\nexport function transaction(db, fn) {\n  db.transaction(fn)();\n}\n\n// **Important**: this is an unsafe function since sqlite executes\n// executes statements sequentially. It would be easy for other code\n// to run statements in between our transaction and get caught up in\n// it. This is rarely used, and only needed for specific cases (like\n// batch importing a bunch of data). Don't use this.\nlet transactionDepth = 0;\nexport async function asyncTransaction(db, fn) {\n  // Support nested transactions by \"coalescing\" them into the parent\n  // one if one is already started\n  if (transactionDepth === 0) {\n    db.exec('BEGIN TRANSACTION');\n  }\n  transactionDepth++;\n\n  try {\n    await fn();\n  } finally {\n    transactionDepth--;\n    // We always commit because rollback is more dangerous - any\n    // queries that ran *in-between* this async function would be\n    // lost. Right now we are only using transactions for speed\n    // purposes unfortunately\n    if (transactionDepth === 0) {\n      db.exec('COMMIT');\n    }\n  }\n}\n\nexport function openDatabase(pathOrBuffer) {\n  return new Database(pathOrBuffer);\n}\n\nexport function closeDatabase(db) {\n  return db.close();\n}\n\nexport function exportDatabase(db) {\n  return db.serialize();\n}\n","const uuid = require('uuid');\n\nmodule.exports = {\n  v4: function() {\n    return Promise.resolve(uuid.v4());\n  },\n\n  v4Sync: function() {\n    return uuid.v4();\n  }\n};\n","import fs from 'fs';\nimport csvStringify from 'csv-stringify/lib/sync';\nimport { runQuery as aqlQuery } from '../aql/schema/run-query';\nimport { integerToAmount } from '../../shared/util';\n\nexport async function exportToCSV(\n  transactions,\n  accounts,\n  categoryGroups,\n  payees\n) {\n  const accountNamesById = accounts.reduce((reduced, { id, name }) => {\n    reduced[id] = name;\n    return reduced;\n  }, {});\n\n  const categoryNamesById = categoryGroups.reduce(\n    (reduced, { name, categories: subCategories }) => {\n      subCategories.forEach(\n        subCategory =>\n          (reduced[subCategory.id] = `${name}: ${subCategory.name}`)\n      );\n      return reduced;\n    },\n    {}\n  );\n\n  const payeeNamesById = payees.reduce((reduced, { id, name }) => {\n    reduced[id] = name;\n    return reduced;\n  }, {});\n\n  const transactionsForExport = transactions.map(\n    ({ account, date, payee, notes, category, amount }) => ({\n      Account: accountNamesById[account],\n      Date: date,\n      Payee: payeeNamesById[payee],\n      Notes: notes,\n      Category: categoryNamesById[category],\n      Amount: amount == null ? 0 : integerToAmount(amount)\n    })\n  );\n\n  return csvStringify(transactionsForExport, { header: true });\n}\n\nexport async function exportQueryToCSV(query) {\n  let { data: transactions } = await aqlQuery(\n    query\n      .select([\n        { Id: 'id' },\n        { Account: 'account.name' },\n        { Date: 'date' },\n        { Payee: 'payee.name' },\n        { ParentId: 'parent_id' },\n        { IsParent: 'is_parent' },\n        { Notes: 'notes' },\n        { Category: 'category.name' },\n        { Amount: 'amount' }\n      ])\n      .options({ splits: 'all' })\n  );\n\n  let parentsPayees = new Map();\n  for (let trans of transactions) {\n    if (trans.IsParent) {\n      parentsPayees.set(trans.Id, trans.Payee);\n    }\n  }\n\n  // filter out any parent transactions\n  let noParents = transactions.filter(t => !t.IsParent);\n\n  // map final properties for export and grab the payee for splits from their parent transaction\n  let transactionsForExport = noParents.map(trans => {\n    return {\n      Account: trans.Account,\n      Date: trans.Date,\n      Payee: trans.ParentId ? parentsPayees.get(trans.ParentId) : trans.Payee,\n      Notes: trans.Notes,\n      Category: trans.Category,\n      Amount: trans.Amount == null ? 0 : integerToAmount(trans.Amount)\n    };\n  });\n\n  return csvStringify(transactionsForExport, { header: true });\n}\n","import asyncStorage from '../../platform/server/asyncStorage';\nimport * as db from '../db';\nimport { getServer  } from '../server-config';\nimport * as bankSync from './sync';\nimport { fromPlaidAccountType } from '../../shared/accounts';\nimport { amountToInteger } from '../../shared/util';\nimport { post } from '../post';\nimport { runMutator } from '../mutators';\nconst uuid = require('../../platform/uuid');\n\nexport async function handoffPublicToken(institution, publicToken) {\n  let [[, userId], [, key]] = await asyncStorage.multiGet([\n    'user-id',\n    'user-key'\n  ]);\n\n  if (institution == null || !institution.institution_id || !institution.name) {\n    throw new Error('Invalid institution object');\n  }\n\n  let id = uuid.v4Sync();\n\n  // Make sure to generate an access token first before inserting it\n  // into our local database in case it fails\n  await post(getServer().PLAID_SERVER + '/handoff_public_token', {\n    userId,\n    key,\n    item_id: id,\n    public_token: publicToken\n  });\n\n  await runMutator(() =>\n    db.insertWithUUID('banks', {\n      id,\n      bank_id: institution.institution_id,\n      name: institution.name\n    })\n  );\n\n  return id;\n}\n\nexport async function addAccounts(bankId, accountIds, offbudgetIds = []) {\n  let [[, userId], [, userKey]] = await asyncStorage.multiGet([\n    'user-id',\n    'user-key'\n  ]);\n\n  // Get all the available accounts\n  let accounts = await bankSync.getAccounts(userId, userKey, bankId);\n\n  // Only add the selected accounts\n  accounts = accounts.filter(acct => accountIds.includes(acct.account_id));\n\n  return Promise.all(\n    accounts.map(async acct => {\n      let id = await runMutator(async () => {\n        let id = await db.insertAccount({\n          account_id: acct.account_id,\n          name: acct.name,\n          official_name: acct.official_name,\n          type: fromPlaidAccountType(acct.type),\n          balance_current: amountToInteger(acct.balances.current),\n          mask: acct.mask,\n          bank: bankId,\n          offbudget: offbudgetIds.includes(acct.account_id) ? 1 : 0\n        });\n\n        // Create a transfer payee\n        await db.insertPayee({\n          name: '',\n          transfer_acct: id\n        });\n\n        return id;\n      });\n\n      // Do an initial sync\n      await bankSync.syncAccount(userId, userKey, id, acct.account_id, bankId);\n\n      return id;\n    })\n  );\n}\n","import fs from '../../platform/server/fs';\nimport qif2json from './qif2json';\nimport csv2json from 'csv-parse/lib/sync';\nimport { dayFromDate } from '../../shared/months';\nimport { looselyParseAmount } from '../../shared/util';\n\nexport function parseFile(filepath, options) {\n  let errors = [];\n  let m = filepath.match(/\\.[^.]*$/);\n\n  if (m) {\n    let ext = m[0];\n\n    switch (ext.toLowerCase()) {\n      case '.qif':\n        return parseQIF(filepath);\n      case '.csv':\n        return parseCSV(filepath, options);\n      case '.ofx':\n      case '.qfx':\n        return parseOFX(filepath);\n      default:\n    }\n  }\n\n  errors.push({\n    message: 'Invalid file type',\n    internal: ''\n  });\n  return { errors };\n}\n\nasync function parseCSV(filepath, options = {}) {\n  let errors = [];\n  let contents = await fs.readFile(filepath);\n\n  let data;\n  try {\n    data = csv2json(contents, {\n      columns: true,\n      bom: true,\n      delimiter: options.delimiter || ',',\n      quote: '\"',\n      trim: true,\n      relax_column_count: true\n    });\n  } catch (err) {\n    errors.push({\n      message: 'Failed parsing: ' + err.message,\n      internal: err.message\n    });\n    return { errors, transactions: [] };\n  }\n\n  return { errors, transactions: data };\n}\n\nasync function parseQIF(filepath) {\n  let errors = [];\n  let contents = await fs.readFile(filepath);\n\n  let data;\n  try {\n    data = qif2json(contents);\n  } catch (err) {\n    errors.push({\n      message: \"Failed parsing: doesn't look like a valid QIF file.\",\n      internal: err.stack\n    });\n    return { errors, transactions: [] };\n  }\n\n  return {\n    errors,\n    transactions: data.transactions.map(trans => ({\n      amount: trans.amount != null ? looselyParseAmount(trans.amount) : null,\n      date: trans.date,\n      payee_name: trans.payee,\n      imported_payee: trans.payee,\n      notes: trans.memo || null\n    }))\n  };\n}\n\nasync function parseOFX(filepath) {\n  let { getOFXTransactions, initModule } = await import(\n    /* webpackChunkName: 'xfo' */ 'node-libofx'\n  );\n  await initModule();\n\n  let errors = [];\n  let contents = await fs.readFile(filepath);\n\n  let data;\n  try {\n    data = getOFXTransactions(contents);\n  } catch (err) {\n    errors.push({\n      message: 'Failed importing file',\n      internal: err.stack\n    });\n    return { errors };\n  }\n\n  return {\n    errors,\n    transactions: data.map(trans => ({\n      amount: trans.amount,\n      imported_id: trans.fi_id,\n      date: trans.date ? dayFromDate(trans.date * 1000) : null,\n      payee_name: trans.name,\n      imported_payee: trans.name,\n      notes: trans.memo || null\n    }))\n  };\n}\n","import * as db from '../db';\n\nexport async function createPayee(description) {\n  // Check to make sure no payee already exists with exactly the same\n  // name\n  let row = await db.first(\n    `SELECT id FROM payees WHERE LOWER(name) = ? AND tombstone = 0`,\n    [description.toLowerCase()]\n  );\n\n  if (row) {\n    return row.id;\n  } else {\n    return db.insertPayee({ name: description });\n  }\n}\n\nexport async function getStartingBalancePayee() {\n  let category = await db.first(`\n    SELECT * FROM categories\n      WHERE is_income = 1 AND\n      LOWER(name) = 'starting balances' AND\n      tombstone = 0\n  `);\n  if (category === null) {\n    category = await db.first(\n      'SELECT * FROM categories WHERE is_income = 1 AND tombstone = 0'\n    );\n  }\n\n  let id = await createPayee('Starting Balance');\n  return {\n    id,\n    category: category ? category.id : null\n  };\n}\n","export default function parse(qif, options) {\n  var lines = qif.split('\\n'),\n    line = lines.shift(),\n    type = /!Type:([^$]*)$/.exec(line.trim()),\n    data = {},\n    transactions = (data.transactions = []),\n    transaction = {};\n\n  options = options || {};\n\n  if (!type || !type.length) {\n    throw new Error('File does not appear to be a valid qif file: ' + line);\n  }\n  data.type = type[1];\n\n  var division = {};\n\n  while ((line = lines.shift())) {\n    line = line.trim();\n    if (line === '^') {\n      transactions.push(transaction);\n      transaction = {};\n      continue;\n    }\n    switch (line[0]) {\n      case 'D':\n        transaction.date = line.substring(1);\n        break;\n      case 'T':\n        transaction.amount = line.substring(1);\n        break;\n      case 'N':\n        transaction.number = line.substring(1);\n        break;\n      case 'M':\n        transaction.memo = line.substring(1);\n        break;\n      case 'A':\n        transaction.address = (transaction.address || []).concat(\n          line.substring(1)\n        );\n        break;\n      case 'P':\n        transaction.payee = line.substring(1).replace(/&amp;/g, '&');\n        break;\n      case 'L':\n        var lArray = line.substring(1).split(':');\n        transaction.category = lArray[0];\n        if (lArray[1] !== undefined) {\n          transaction.subcategory = lArray[1];\n        }\n        break;\n      case 'C':\n        transaction.clearedStatus = line.substring(1);\n        break;\n      case 'S':\n        var sArray = line.substring(1).split(':');\n        division.category = sArray[0];\n        if (sArray[1] !== undefined) {\n          division.subcategory = sArray[1];\n        }\n        break;\n      case 'E':\n        division.description = line.substring(1);\n        break;\n      case '$':\n        division.amount = parseFloat(line.substring(1));\n        if (!(transaction.division instanceof Array)) {\n          transaction.division = [];\n        }\n        transaction.division.push(division);\n        division = {};\n\n        break;\n\n      default:\n        throw new Error('Unknown Detail Code: ' + line[0]);\n    }\n  }\n\n  if (Object.keys(transaction).length) {\n    transactions.push(transaction);\n  }\n\n  data.dateFormat = options.dateFormat;\n  return data;\n}\n","import { RuleError } from '../errors';\nimport * as dateFns from 'date-fns';\nimport {\n  monthFromDate,\n  yearFromDate,\n  isBefore,\n  isAfter,\n  addDays,\n  subDays,\n  format as formatDate,\n  parseDate\n} from '../../shared/months';\nimport { fastSetMerge } from '../../shared/util';\nimport { sortNumbers, getApproxNumberThreshold } from '../../shared/rules';\nimport { recurConfigToRSchedule } from '../../shared/schedules';\nimport { Schedule as RSchedule } from '../util/rschedule';\n\nfunction safeNumber(n) {\n  return isNaN(n) ? null : n;\n}\n\nfunction safeParseInt(n) {\n  return safeNumber(parseInt(n));\n}\n\nfunction assert(test, type, msg) {\n  if (!test) {\n    throw new RuleError(type, msg);\n  }\n}\n\nexport function parseRecurDate(desc) {\n  try {\n    let rules = recurConfigToRSchedule(desc);\n\n    return {\n      type: 'recur',\n      schedule: new RSchedule({ rrules: rules })\n    };\n  } catch (e) {\n    throw new RuleError('parse-recur-date', e.message);\n  }\n}\n\nexport function parseDateString(str) {\n  if (typeof str !== 'string') {\n    return null;\n  } else if (str.length === 10) {\n    // YYYY-MM-DD\n    if (!dateFns.isValid(dateFns.parseISO(str))) {\n      return null;\n    }\n\n    return { type: 'date', date: str };\n  } else if (str.length === 7) {\n    // YYYY-MM\n    if (!dateFns.isValid(dateFns.parseISO(str + '-01'))) {\n      return null;\n    }\n\n    return { type: 'month', date: str };\n  } else if (str.length === 4) {\n    // YYYY\n    if (!dateFns.isValid(dateFns.parseISO(str + '-01-01'))) {\n      return null;\n    }\n\n    return { type: 'year', date: str };\n  }\n\n  return null;\n}\n\nexport function parseBetweenAmount(between) {\n  let { num1, num2 } = between;\n  if (typeof num1 !== 'number' || typeof num2 !== 'number') {\n    return null;\n  }\n  return { type: 'between', num1, num2 };\n}\n\nlet CONDITION_TYPES = {\n  date: {\n    ops: ['is', 'isapprox', 'gt', 'gte', 'lt', 'lte'],\n    nullable: false,\n    parse(op, value, fieldName) {\n      let parsed =\n        typeof value === 'string'\n          ? parseDateString(value)\n          : value.frequency != null\n          ? parseRecurDate(value)\n          : null;\n      assert(\n        parsed,\n        'date-format',\n        `Invalid date format (field: ${fieldName})`\n      );\n\n      // Approximate only works with exact & recurring dates\n      if (op === 'isapprox') {\n        assert(\n          parsed.type === 'date' || parsed.type === 'recur',\n          'date-format',\n          `Invalid date value for \"isapprox\" (field: ${fieldName})`\n        );\n      }\n      // These only work with exact dates\n      else if (op === 'gt' || op === 'gte' || op === 'lt' || op === 'lte') {\n        assert(\n          parsed.type === 'date',\n          'date-format',\n          `Invalid date value for \"${op}\" (field: ${fieldName})`\n        );\n      }\n\n      return parsed;\n    }\n  },\n  id: {\n    ops: ['is', 'contains', 'oneOf'],\n    nullable: true,\n    parse(op, value, fieldName) {\n      if (op === 'oneOf') {\n        assert(\n          Array.isArray(value),\n          'no-empty-array',\n          `oneOf must have an array value (field: ${fieldName})`\n        );\n        return value;\n      }\n      return value;\n    }\n  },\n  string: {\n    ops: ['is', 'contains', 'oneOf'],\n    nullable: false,\n    parse(op, value, fieldName) {\n      if (op === 'oneOf') {\n        assert(\n          Array.isArray(value),\n          'no-empty-array',\n          `oneOf must have an array value (field: ${fieldName}): ${JSON.stringify(\n            value\n          )}`\n        );\n        return value.filter(Boolean).map(val => val.toLowerCase());\n      }\n\n      if (op === 'contains') {\n        assert(\n          typeof value === 'string' && value.length > 0,\n          'no-empty-string',\n          `contains must have non-empty string (field: ${fieldName})`\n        );\n      }\n\n      return value.toLowerCase();\n    }\n  },\n  number: {\n    ops: ['is', 'isapprox', 'isbetween', 'gt', 'gte', 'lt', 'lte'],\n    nullable: false,\n    parse(op, value, fieldName) {\n      let parsed =\n        typeof value === 'number'\n          ? { type: 'literal', value }\n          : parseBetweenAmount(value);\n\n      assert(\n        parsed != null,\n        'not-number',\n        `Value must be a number or between amount: ${JSON.stringify(\n          value\n        )} (field: ${fieldName})`\n      );\n\n      if (op === 'isbetween') {\n        assert(\n          parsed.type === 'between',\n          'number-format',\n          `Invalid between value for \"${op}\" (field: ${fieldName})`\n        );\n      } else {\n        assert(\n          parsed.type === 'literal',\n          'number-format',\n          `Invalid number value for \"${op}\" (field: ${fieldName})`\n        );\n      }\n\n      return parsed;\n    }\n  },\n  boolean: {\n    ops: ['is'],\n    nullable: false,\n    parse(op, value, fieldName) {\n      assert(\n        typeof value === 'boolean',\n        'not-boolean',\n        `Value must be a boolean: ${value} (field: ${fieldName})`\n      );\n\n      return value;\n    }\n  }\n};\n\nexport class Condition {\n  constructor(op, field, value, options, fieldTypes) {\n    let typeName = fieldTypes.get(field);\n    assert(typeName, 'internal', 'Invalid condition field: ' + field);\n\n    let type = CONDITION_TYPES[typeName];\n\n    // It's important to validate rules because a faulty rule might mess\n    // up the user's transaction (and be very confusing)\n    assert(\n      type,\n      'internal',\n      `Invalid condition type: ${typeName} (field: ${field})`\n    );\n    assert(\n      type.ops.includes(op),\n      'internal',\n      `Invalid condition operator: ${op} (type: ${typeName}, field: ${field})`\n    );\n\n    if (type.nullable !== true) {\n      assert(value != null, 'no-null', `Field cannot be empty: ${field}`);\n    }\n\n    // For strings, an empty string is equal to null\n    if (typeName === 'string' && type.nullable !== true) {\n      assert(value !== '', 'no-null', `Field cannot be empty: ${field}`);\n    }\n\n    this.rawValue = value;\n    this.unparsedValue = value;\n    this.op = op;\n    this.field = field;\n    this.value = type.parse ? type.parse(op, value, field) : value;\n    this.options = options;\n    this.type = typeName;\n  }\n\n  eval(object) {\n    let fieldValue = object[this.field];\n    if (fieldValue === undefined) {\n      return false;\n    }\n\n    if (typeof fieldValue === 'string') {\n      fieldValue = fieldValue.toLowerCase();\n    }\n\n    let type = this.type;\n\n    if (type === 'number' && this.options) {\n      if (this.options.outflow) {\n        if (fieldValue > 0) {\n          return false;\n        }\n\n        fieldValue = -fieldValue;\n      } else if (this.options.inflow) {\n        if (fieldValue < 0) {\n          return false;\n        }\n      }\n    }\n\n    let extractValue = v => (type === 'number' ? v.value : v);\n\n    switch (this.op) {\n      case 'isapprox':\n      case 'is':\n        if (type === 'date') {\n          if (fieldValue == null) {\n            return false;\n          }\n\n          if (this.value.type === 'recur') {\n            let { schedule } = this.value;\n            if (this.op === 'isapprox') {\n              let fieldDate = parseDate(fieldValue);\n              return schedule.occursBetween(\n                dateFns.subDays(fieldDate, 2),\n                dateFns.addDays(fieldDate, 2)\n              );\n            } else {\n              return schedule.occursOn({ date: parseDate(fieldValue) });\n            }\n          } else {\n            let { date } = this.value;\n\n            if (this.op === 'isapprox') {\n              let fullDate = parseDate(date);\n              let high = addDays(fullDate, 2);\n              let low = subDays(fullDate, 2);\n\n              return fieldValue >= low && fieldValue <= high;\n            } else {\n              switch (this.value.type) {\n                case 'date':\n                  return fieldValue === date;\n                case 'month':\n                  return monthFromDate(fieldValue) === date;\n                case 'year':\n                  return yearFromDate(fieldValue) === date;\n                default:\n              }\n            }\n          }\n        } else if (type === 'number') {\n          let number = this.value.value;\n          if (this.op === 'isapprox') {\n            let threshold = getApproxNumberThreshold(number);\n            return (\n              fieldValue >= number - threshold &&\n              fieldValue <= number + threshold\n            );\n          }\n          return fieldValue === number;\n        }\n\n        return fieldValue === this.value;\n      case 'isbetween': {\n        // The parsing logic already checks that the value is of the\n        // right type (only numbers with high and low)\n        let [low, high] = sortNumbers(this.value.num1, this.value.num2);\n        return fieldValue >= low && fieldValue <= high;\n      }\n      case 'contains':\n        if (fieldValue === null) {\n          return false;\n        }\n        return fieldValue.indexOf(this.value) !== -1;\n      case 'oneOf':\n        if (fieldValue === null) {\n          return false;\n        }\n        return this.value.indexOf(fieldValue) !== -1;\n      case 'gt':\n        if (fieldValue === null) {\n          return false;\n        } else if (type === 'date') {\n          return isAfter(fieldValue, this.value.date);\n        }\n\n        return fieldValue > extractValue(this.value);\n      case 'gte':\n        if (fieldValue === null) {\n          return false;\n        } else if (type === 'date') {\n          return (\n            fieldValue === this.value.date ||\n            isAfter(fieldValue, this.value.date)\n          );\n        }\n\n        return fieldValue >= extractValue(this.value);\n      case 'lt':\n        if (fieldValue === null) {\n          return false;\n        } else if (type === 'date') {\n          return isBefore(fieldValue, this.value.date);\n        }\n        return fieldValue < extractValue(this.value);\n      case 'lte':\n        if (fieldValue === null) {\n          return false;\n        } else if (type === 'date') {\n          return (\n            fieldValue === this.value.date ||\n            isBefore(fieldValue, this.value.date)\n          );\n        }\n        return fieldValue <= extractValue(this.value);\n      default:\n    }\n\n    return false;\n  }\n\n  getValue() {\n    return this.value;\n  }\n\n  serialize() {\n    return {\n      op: this.op,\n      field: this.field,\n      value: this.unparsedValue,\n      type: this.type,\n      ...(this.options ? { options: this.options } : null)\n    };\n  }\n}\n\nlet ACTION_OPS = ['set', 'link-schedule'];\n\nexport class Action {\n  constructor(op, field, value, options, fieldTypes) {\n    assert(\n      ACTION_OPS.includes(op),\n      'internal',\n      `Invalid action operation: ${op}`\n    );\n\n    if (op === 'set') {\n      let typeName = fieldTypes.get(field);\n      assert(typeName, 'internal', `Invalid field for action: ${field}`);\n      this.field = field;\n      this.type = typeName;\n    } else if (op === 'link-schedule') {\n      this.field = null;\n      this.type = 'id';\n    }\n\n    this.op = op;\n    this.rawValue = value;\n    this.value = value;\n    this.options = options;\n  }\n\n  exec(object) {\n    switch (this.op) {\n      case 'set':\n        object[this.field] = this.value;\n        break;\n      case 'link-schedule':\n        object.schedule = this.value;\n        break;\n      default:\n    }\n  }\n\n  serialize() {\n    return {\n      op: this.op,\n      field: this.field,\n      value: this.value,\n      type: this.type,\n      ...(this.options ? { options: this.options } : null)\n    };\n  }\n}\n\nexport class Rule {\n  constructor({ id, stage, conditions, actions, fieldTypes }) {\n    this.id = id;\n    this.stage = stage;\n    this.conditions = conditions.map(\n      c => new Condition(c.op, c.field, c.value, c.options, fieldTypes)\n    );\n    this.actions = actions.map(\n      a => new Action(a.op, a.field, a.value, a.options, fieldTypes)\n    );\n  }\n\n  evalConditions(object) {\n    if (this.conditions.length === 0) {\n      return false;\n    }\n\n    return this.conditions.every(condition => {\n      return condition.eval(object);\n    });\n  }\n\n  execActions(object) {\n    let changes = {};\n    this.actions.forEach(action => action.exec(changes));\n    return changes;\n  }\n\n  exec(object) {\n    if (this.evalConditions(object)) {\n      return this.execActions(object);\n    }\n    return null;\n  }\n\n  // Apply is similar to exec but applies the changes for you\n  apply(object) {\n    let changes = this.exec(object);\n    return Object.assign({}, object, changes);\n  }\n\n  getId() {\n    return this.id;\n  }\n\n  serialize() {\n    return {\n      id: this.id,\n      stage: this.stage,\n      conditions: this.conditions.map(c => c.serialize()),\n      actions: this.actions.map(a => a.serialize())\n    };\n  }\n}\n\nexport class RuleIndexer {\n  constructor({ field, method }) {\n    this.field = field;\n    this.method = method;\n    this.rules = new Map();\n  }\n\n  getIndex(key) {\n    if (!this.rules.has(key)) {\n      this.rules.set(key, new Set());\n    }\n    return this.rules.get(key);\n  }\n\n  getIndexForValue(value) {\n    return this.getIndex(this.getKey(value) || '*');\n  }\n\n  getKey(value) {\n    if (typeof value === 'string' && value !== '') {\n      if (this.method === 'firstchar') {\n        return value[0].toLowerCase();\n      }\n      return value.toLowerCase();\n    }\n    return null;\n  }\n\n  getIndexes(rule) {\n    let cond = rule.conditions.find(cond => cond.field === this.field);\n    let indexes = [];\n\n    if (cond && (cond.op === 'oneOf' || cond.op === 'is')) {\n      if (cond.op === 'oneOf') {\n        cond.value.forEach(val => indexes.push(this.getIndexForValue(val)));\n      } else {\n        indexes.push(this.getIndexForValue(cond.value));\n      }\n    } else {\n      indexes.push(this.getIndex('*'));\n    }\n\n    return indexes;\n  }\n\n  index(rule) {\n    let indexes = this.getIndexes(rule);\n    indexes.forEach(index => {\n      index.add(rule);\n    });\n  }\n\n  remove(rule) {\n    let indexes = this.getIndexes(rule);\n    indexes.forEach(index => {\n      index.delete(rule);\n    });\n  }\n\n  getApplicableRules(object) {\n    let indexedRules;\n    if (this.field in object) {\n      let key = this.getKey(object[this.field]);\n      if (key) {\n        indexedRules = this.rules.get(key);\n      }\n    }\n\n    return fastSetMerge(\n      indexedRules || new Set(),\n      this.rules.get('*') || new Set()\n    );\n  }\n}\n\nconst OP_SCORES = {\n  is: 10,\n  oneOf: 9,\n  isapprox: 5,\n  isbetween: 5,\n  gt: 1,\n  gte: 1,\n  lt: 1,\n  lte: 1,\n  contains: 0\n};\n\nfunction computeScore(rule) {\n  let initialScore = rule.conditions.reduce((score, condition) => {\n    if (OP_SCORES[condition.op] == null) {\n      console.log(`Found invalid operation while ranking: ${condition.op}`);\n      return 0;\n    }\n\n    return score + OP_SCORES[condition.op];\n  }, 0);\n\n  if (\n    rule.conditions.every(\n      cond => cond.op === 'is' || cond.op === 'isapprox' || cond.op === 'oneOf'\n    )\n  ) {\n    return initialScore * 2;\n  }\n  return initialScore;\n}\n\nfunction _rankRules(rules) {\n  let scores = new Map();\n  rules.forEach(rule => {\n    scores.set(rule, computeScore(rule));\n  });\n\n  // No matter the order of rules, this must always return exactly the same\n  // order. That's why rules have ids: if two rules have the same score, it\n  // sorts by id\n  return [...rules].sort((r1, r2) => {\n    let score1 = scores.get(r1);\n    let score2 = scores.get(r2);\n    if (score1 < score2) {\n      return -1;\n    } else if (score1 > score2) {\n      return 1;\n    } else {\n      let id1 = r1.getId();\n      let id2 = r2.getId();\n      return id1 < id2 ? -1 : id1 > id2 ? 1 : 0;\n    }\n  });\n}\n\nexport function rankRules(rules) {\n  let pre = [];\n  let normal = [];\n  let post = [];\n\n  for (let rule of rules) {\n    switch (rule.stage) {\n      case 'pre':\n        pre.push(rule);\n        break;\n      case 'post':\n        post.push(rule);\n        break;\n      default:\n        normal.push(rule);\n    }\n  }\n\n  pre = _rankRules(pre);\n  normal = _rankRules(normal);\n  post = _rankRules(post);\n\n  return pre.concat(normal).concat(post);\n}\n\nexport function migrateIds(rule, mappings) {\n  // Go through the in-memory rules and patch up ids that have been\n  // \"migrated\" to other ids. This is a little tricky, but a lot\n  // easier than trying to keep an up-to-date mapping in the db. This\n  // is necessary because ids can be transparently mapped as items are\n  // merged/deleted in the system.\n  //\n  // It's very important here that we look at `rawValue` specifically,\n  // and only apply the patches to the other `value` fields. We always\n  // need to keep the original id around because undo can walk\n  // backwards, and we need to be able to consistently apply a\n  // \"projection\" of these mapped values. For example: if we have ids\n  // [1, 2] and applying mappings transforms it to [2, 2], if `1` gets\n  // mapped to something else there's no way to no to map *only* the\n  // first id back to make [1, 2]. Keeping the original value around\n  // solves this.\n  for (let ci = 0; ci < rule.conditions.length; ci++) {\n    let cond = rule.conditions[ci];\n    if (cond.type === 'id') {\n      switch (cond.op) {\n        case 'is':\n          cond.value = mappings.get(cond.rawValue) || cond.rawValue;\n          cond.unparsedValue = cond.value;\n          break;\n        case 'oneOf':\n          cond.value = cond.rawValue.map(v => mappings.get(v) || v);\n          cond.unparsedValue = [...cond.value];\n          break;\n        default:\n      }\n    }\n  }\n\n  for (let ai = 0; ai < rule.actions.length; ai++) {\n    let action = rule.actions[ai];\n    if (action.type === 'id') {\n      if (action.op === 'set') {\n        action.value = mappings.get(action.rawValue) || action.rawValue;\n      }\n    }\n  }\n}\n\n// This finds all the rules that reference the `id`\nexport function iterateIds(rules, fieldName, func) {\n  let counts = {};\n  let i;\n\n  ruleiter: for (i = 0; i < rules.length; i++) {\n    let rule = rules[i];\n    for (let ci = 0; ci < rule.conditions.length; ci++) {\n      let cond = rule.conditions[ci];\n      if (cond.type === 'id' && cond.field === fieldName) {\n        switch (cond.op) {\n          case 'is':\n            if (func(rule, cond.value)) {\n              continue ruleiter;\n            }\n            break;\n          case 'oneOf':\n            for (let vi = 0; vi < cond.value.length; vi++) {\n              if (func(rule, cond.value[vi])) {\n                continue ruleiter;\n              }\n            }\n            break;\n          default:\n        }\n      }\n    }\n\n    for (let ai = 0; ai < rule.actions.length; ai++) {\n      let action = rule.actions[ai];\n      if (action.type === 'id' && action.field === fieldName) {\n        // Currently `set` is the only op, but if we add more this\n        // will need to be extended\n        if (action.op === 'set') {\n          if (func(rule, action.value)) {\n            break;\n          }\n        }\n      }\n    }\n  }\n}\n","import title from './title';\nimport * as db from '../db';\nimport {\n  mergeObjects,\n  hasFieldsChanged,\n  toRelaxedNumber,\n  amountToInteger,\n  integerToAmount\n} from '../../shared/util';\nimport {\n  makeChild as makeChildTransaction,\n  recalculateSplit\n} from '../../shared/transactions';\nimport * as monthUtils from '../../shared/months';\nimport { transactionModel } from '../api-models';\nimport { getServer } from '../server-config';\nimport { batchMessages } from '../sync';\nimport { runMutator } from '../mutators';\nimport { getStartingBalancePayee } from './payees';\nimport * as transfer from './transfer';\nimport { TransactionError } from '../errors';\nimport { runRules } from './transaction-rules';\nimport { batchUpdateTransactions } from './transactions';\n\nconst dateFns = require('date-fns');\nconst { post } = require('../post');\nconst levenshtein = require('damerau-levenshtein');\nconst uuid = require('../../platform/uuid');\n\n// Plaid article about API options:\n// https://support.plaid.com/customer/en/portal/articles/2612155-transactions-returned-per-request\n\nfunction BankSyncError(type, code) {\n  return { type: 'BankSyncError', category: type, code };\n}\n\nfunction makeSplitTransaction(trans, subtransactions) {\n  // We need to calculate the final state of split transactions\n  let { subtransactions: sub, ...parent } = recalculateSplit({\n    ...trans,\n    is_parent: true,\n    subtransactions: subtransactions.map((transaction, idx) =>\n      makeChildTransaction(trans, {\n        ...transaction,\n        sort_order: 0 - idx\n      })\n    )\n  });\n  return [parent, ...sub];\n}\n\nfunction getAccountBalance(account) {\n  // Debt account types need their balance reversed\n  switch (account.type) {\n    case 'credit':\n    case 'loan':\n      return -account.balances.current;\n    default:\n      return account.balances.current;\n  }\n}\n\nasync function updateAccountBalance(id, balance) {\n  await db.runQuery('UPDATE accounts SET balance_current = ? WHERE id = ?', [\n    amountToInteger(balance),\n    id\n  ]);\n}\n\nexport async function getAccounts(userId, userKey, id) {\n  let res = await post(getServer().PLAID_SERVER + '/accounts', {\n    userId,\n    key: userKey,\n    item_id: id\n  });\n\n  let { accounts } = res;\n\n  accounts.forEach(acct => {\n    acct.balances.current = getAccountBalance(acct);\n  });\n\n  return accounts;\n}\n\nexport function fromPlaid(trans) {\n  return {\n    imported_id: trans.transaction_id,\n    payee_name: trans.name,\n    imported_payee: trans.name,\n    amount: -amountToInteger(trans.amount),\n    date: trans.date\n  };\n}\n\nasync function downloadTransactions(\n  userId,\n  userKey,\n  acctId,\n  bankId,\n  since,\n  count\n) {\n  let allTransactions = [];\n  let accountBalance = null;\n  let pageSize = 100;\n  let offset = 0;\n  let numDownloaded = 0;\n\n  while (1) {\n    const endDate = monthUtils.currentDay();\n\n    const res = await post(getServer().PLAID_SERVER + '/transactions', {\n      userId: userId,\n      key: userKey,\n      item_id: '' + bankId,\n      account_id: acctId,\n      start_date: since,\n      end_date: endDate,\n      count: pageSize,\n      offset\n    });\n\n    if (res.error_code) {\n      throw BankSyncError(res.error_type, res.error_code);\n    }\n\n    if (res.transactions.length === 0) {\n      break;\n    }\n\n    numDownloaded += res.transactions.length;\n\n    // Remove pending transactions for now - we will handle them in\n    // the future.\n    allTransactions = allTransactions.concat(\n      res.transactions.filter(t => !t.pending)\n    );\n    accountBalance = getAccountBalance(res.accounts[0]);\n\n    if (\n      numDownloaded === res.total_transactions ||\n      (count != null && allTransactions.length >= count)\n    ) {\n      break;\n    }\n\n    offset += pageSize;\n  }\n\n  allTransactions =\n    count != null ? allTransactions.slice(0, count) : allTransactions;\n\n  return {\n    transactions: allTransactions.map(fromPlaid),\n    accountBalance\n  };\n}\n\nasync function resolvePayee(trans, payeeName, payeesToCreate) {\n  if (trans.payee == null && payeeName) {\n    // First check our registry of new payees (to avoid a db access)\n    // then check the db for existing payees\n    let payee = payeesToCreate.get(payeeName.toLowerCase());\n    payee = payee || (await db.getPayeeByName(payeeName));\n\n    if (payee != null) {\n      return payee.id;\n    } else {\n      // Otherwise we're going to create a new one\n      let newPayee = { id: uuid.v4Sync(), name: payeeName };\n      payeesToCreate.set(payeeName.toLowerCase(), newPayee);\n      return newPayee.id;\n    }\n  }\n\n  return trans.payee;\n}\n\nasync function normalizeTransactions(\n  transactions,\n  acctId,\n  { rawPayeeName } = {}\n) {\n  let payeesToCreate = new Map();\n\n  let normalized = [];\n  for (let trans of transactions) {\n    // Validate the date because we do some stuff with it. The db\n    // layer does better validation, but this will give nicer errors\n    if (trans.date == null) {\n      throw new Error('`date` is required when adding a transaction');\n    }\n\n    // Strip off the irregular properties\n    let { payee_name, subtransactions, ...rest } = trans;\n    trans = rest;\n\n    if (payee_name) {\n      let trimmed = payee_name.trim();\n      if (trimmed === '') {\n        payee_name = null;\n      } else {\n        payee_name = rawPayeeName ? trimmed : title(trimmed);\n      }\n    }\n\n    trans.imported_payee = trans.imported_payee || payee_name;\n    if (trans.imported_payee) {\n      trans.imported_payee = trans.imported_payee.trim();\n    }\n\n    // It's important to resolve both the account and payee early so\n    // when rules are run, they have the right data. Resolving payees\n    // also simplifies the payee creation process\n    trans.account = acctId;\n    trans.payee = await resolvePayee(trans, payee_name, payeesToCreate);\n\n    normalized.push({\n      payee_name,\n      subtransactions: subtransactions\n        ? subtransactions.map(t => ({ ...t, account: acctId }))\n        : null,\n      trans\n    });\n  }\n\n  return { normalized, payeesToCreate };\n}\n\nasync function createNewPayees(payeesToCreate, addsAndUpdates) {\n  let usedPayeeIds = new Set(addsAndUpdates.map(t => t.payee));\n\n  await batchMessages(async () => {\n    for (let payee of payeesToCreate.values()) {\n      // Only create the payee if it ended up being used\n      if (usedPayeeIds.has(payee.id)) {\n        await db.insertPayee(payee);\n      }\n    }\n  });\n}\n\nexport async function reconcileTransactions(acctId, transactions) {\n  const hasMatched = new Set();\n  const updated = [];\n  const added = [];\n\n  let { normalized, payeesToCreate } = await normalizeTransactions(\n    transactions,\n    acctId\n  );\n\n  // The first pass runs the rules, and preps data for fuzzy matching\n  let transactionsStep1 = [];\n  for (let { payee_name, trans, subtransactions } of normalized) {\n    // Run the rules\n    trans = runRules(trans);\n\n    let match = null;\n    let fuzzyDataset = null;\n\n    // First, match with an existing transaction's imported_id. This\n    // is the highest fidelity match and should always be attempted\n    // first.\n    if (trans.imported_id) {\n      match = await db.first(\n        'SELECT * FROM v_transactions WHERE imported_id = ? AND account = ?',\n        [trans.imported_id, acctId]\n      );\n\n      // TODO: Pending transactions\n\n      if (match) {\n        hasMatched.add(match.id);\n      }\n    }\n\n    // If it didn't match, query data needed for fuzzy matching\n    if (!match) {\n      // Look 1 day ahead and 4 days back when fuzzy matching. This\n      // needs to select all fields that need to be read from the\n      // matched transaction. See the final pass below for the needed\n      // fields.\n      fuzzyDataset = await db.all(\n        `SELECT id, date, imported_id, payee, category, notes FROM v_transactions\n           WHERE date >= ? AND date <= ? AND amount = ? AND account = ? AND is_child = 0`,\n        [\n          db.toDateRepr(monthUtils.subDays(trans.date, 4)),\n          db.toDateRepr(monthUtils.addDays(trans.date, 1)),\n          trans.amount || 0,\n          acctId\n        ]\n      );\n    }\n\n    transactionsStep1.push({\n      payee_name,\n      trans,\n      subtransactions,\n      match,\n      fuzzyDataset\n    });\n  }\n\n  // Next, do the fuzzy matching. This first pass matches based on the\n  // payee id. We do this in multiple passes so that higher fidelity\n  // matching always happens first, i.e. a transaction should match\n  // match with low fidelity if a later transaction is going to match\n  // the same one with high fidelity.\n  let transactionsStep2 = transactionsStep1.map(data => {\n    if (!data.match && data.fuzzyDataset) {\n      // Try to find one where the payees match.\n      let match = data.fuzzyDataset.find(\n        row => !hasMatched.has(row.id) && data.trans.payee === row.payee\n      );\n\n      if (match) {\n        hasMatched.add(match.id);\n        return { ...data, match };\n      }\n    }\n    return data;\n  });\n\n  // The final fuzzy matching pass. This is the lowest fidelity\n  // matching: it just find the first transaction that hasn't been\n  // matched yet. Remember the the dataset only contains transactions\n  // around the same date with the same amount.\n  let transactionsStep3 = transactionsStep2.map(data => {\n    if (!data.match && data.fuzzyDataset) {\n      let match = data.fuzzyDataset.find(row => !hasMatched.has(row.id));\n      if (match) {\n        hasMatched.add(match.id);\n        return { ...data, match };\n      }\n    }\n    return data;\n  });\n\n  // Finally, generate & commit the changes\n  for (let { payee_name, trans, subtransactions, match } of transactionsStep3) {\n    if (match) {\n      // TODO: change the above sql query to use aql\n      let existing = {\n        ...match,\n        cleared: match.cleared === 1,\n        date: db.fromDateRepr(match.date)\n      };\n\n      // Update the transaction\n      const updates = {\n        date: trans.date,\n        imported_id: trans.imported_id || null,\n        payee: existing.payee || trans.payee || null,\n        category: existing.category || trans.category || null,\n        imported_payee: trans.imported_payee || null,\n        notes: existing.notes || trans.notes || null,\n        cleared: trans.cleared != null ? trans.cleared : true\n      };\n\n      if (hasFieldsChanged(existing, updates, Object.keys(updates))) {\n        updated.push({ id: existing.id, ...updates });\n      }\n    } else {\n      // Insert a new transaction\n      let finalTransaction = {\n        ...trans,\n        id: uuid.v4Sync(),\n        category: trans.category || null,\n        cleared: trans.cleared != null ? trans.cleared : true\n      };\n\n      if (subtransactions && subtransactions.length > 0) {\n        added.push(...makeSplitTransaction(finalTransaction, subtransactions));\n      } else {\n        added.push(finalTransaction);\n      }\n    }\n  }\n\n  await createNewPayees(payeesToCreate, [...added, ...updated]);\n  await batchUpdateTransactions({ added, updated });\n\n  return {\n    added: added.map(trans => trans.id),\n    updated: updated.map(trans => trans.id)\n  };\n}\n\n// This is similar to `reconcileTransactions` except much simpler: it\n// does not try to match any transactions. It just adds them\nexport async function addTransactions(\n  acctId,\n  transactions,\n  { runTransfers = true } = {}\n) {\n  const added = [];\n\n  let { normalized, payeesToCreate } = await normalizeTransactions(\n    transactions,\n    acctId,\n    { rawPayeeName: true }\n  );\n\n  for (let { payee_name, trans, subtransactions } of normalized) {\n    // Run the rules\n    trans = runRules(trans);\n\n    let finalTransaction = {\n      id: uuid.v4Sync(),\n      ...trans,\n      account: acctId,\n      cleared: trans.cleared != null ? trans.cleared : true\n    };\n\n    // Add split transactions if they are given\n    if (subtransactions && subtransactions.length > 0) {\n      added.push(...makeSplitTransaction(finalTransaction, subtransactions));\n    } else {\n      added.push(finalTransaction);\n    }\n  }\n\n  await createNewPayees(payeesToCreate, added);\n\n  let newTransactions;\n  if (runTransfers) {\n    let res = await batchUpdateTransactions({ added });\n    newTransactions = res.added.map(t => t.id);\n  } else {\n    await batchMessages(async () => {\n      newTransactions = await Promise.all(\n        added.map(async trans => db.insertTransaction(trans))\n      );\n    });\n  }\n  return newTransactions;\n}\n\nexport async function syncAccount(userId, userKey, id, acctId, bankId) {\n  // TODO: Handle the case where transactions exist in the future\n  // (that will make start date after end date)\n  const latestTransaction = await db.first(\n    'SELECT * FROM v_transactions WHERE account = ? ORDER BY date DESC LIMIT 1',\n    [id]\n  );\n\n  if (latestTransaction) {\n    const startingTransaction = await db.first(\n      'SELECT date FROM v_transactions WHERE account = ? ORDER BY date ASC LIMIT 1',\n      [id]\n    );\n    const startingDate = db.fromDateRepr(startingTransaction.date);\n    // assert(startingTransaction)\n\n    // Get all transactions since the latest transaction, plus any 5\n    // days before the latest transaction. This gives us a chance to\n    // resolve any transactions that were entered manually.\n    //\n    // TODO: What this really should do is query the last imported_id\n    // and since then\n    let date = monthUtils.subDays(db.fromDateRepr(latestTransaction.date), 31);\n\n    // Never download transactions before the starting date. This was\n    // when the account was added to the system.\n    if (date < startingDate) {\n      date = startingDate;\n    }\n\n    let { transactions, accountBalance } = await downloadTransactions(\n      userId,\n      userKey,\n      acctId,\n      bankId,\n      date\n    );\n    if (transactions.length === 0) {\n      return { added: [], updated: [] };\n    }\n\n    transactions = transactions.map(trans => ({ ...trans, account: id }));\n\n    return runMutator(async () => {\n      const result = await reconcileTransactions(id, transactions);\n      await updateAccountBalance(id, accountBalance);\n      return result;\n    });\n  } else {\n    const acctRow = await db.select('accounts', id);\n\n    // Otherwise, download transaction for the last few days if it's an\n    // on-budget account, or for the past 30 days if off-budget\n    const startingDay = monthUtils.subDays(\n      monthUtils.currentDay(),\n      acctRow.offbudget === 0 ? 1 : 30\n    );\n\n    const { transactions } = await downloadTransactions(\n      userId,\n      userKey,\n      acctId,\n      bankId,\n      dateFns.format(dateFns.parseISO(startingDay), 'yyyy-MM-dd')\n    );\n\n    // We need to add a transaction that represents the starting\n    // balance for everything to balance out. In order to get balance\n    // before the first imported transaction, we need to get the\n    // current balance from the accounts table and subtract all the\n    // imported transactions.\n    let currentBalance = acctRow.balance_current;\n\n    const previousBalance = transactions.reduce((total, trans) => {\n      return total - trans.amount;\n    }, currentBalance);\n\n    const oldestDate =\n      transactions.length > 0\n        ? transactions[transactions.length - 1].date\n        : monthUtils.currentDay();\n\n    let payee = await getStartingBalancePayee();\n\n    return runMutator(async () => {\n      let initialId = await db.insertTransaction({\n        account: id,\n        amount: previousBalance,\n        category: acctRow.offbudget === 0 ? payee.category : null,\n        payee: payee.id,\n        date: oldestDate,\n        cleared: true,\n        starting_balance_flag: true\n      });\n\n      let result = await reconcileTransactions(id, transactions);\n      return {\n        ...result,\n        added: [initialId, ...result.added]\n      };\n    });\n  }\n}\n","// Utilities\nconst lowerCase = require('./lower-case');\nconst specials = require('./specials');\n\nlet character =\n  '[0-9\\u0041-\\u005A\\u0061-\\u007A\\u00AA\\u00B5\\u00BA\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376-\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0523\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u064A\\u066E-\\u066F\\u0671-\\u06D3\\u06D5\\u06E5-\\u06E6\\u06EE-\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4-\\u07F5\\u07FA\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0972\\u097B-\\u097F\\u0985-\\u098C\\u098F-\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC-\\u09DD\\u09DF-\\u09E1\\u09F0-\\u09F1\\u0A05-\\u0A0A\\u0A0F-\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32-\\u0A33\\u0A35-\\u0A36\\u0A38-\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2-\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0-\\u0AE1\\u0B05-\\u0B0C\\u0B0F-\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32-\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C-\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99-\\u0B9A\\u0B9C\\u0B9E-\\u0B9F\\u0BA3-\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58-\\u0C59\\u0C60-\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0-\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39\\u0D3D\\u0D60-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32-\\u0E33\\u0E40-\\u0E46\\u0E81-\\u0E82\\u0E84\\u0E87-\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA-\\u0EAB\\u0EAD-\\u0EB0\\u0EB2-\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDD\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8B\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065-\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10D0-\\u10FA\\u10FC\\u1100-\\u1159\\u115F-\\u11A2\\u11A8-\\u11F9\\u1200-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u1676\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19A9\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE-\\u1BAF\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u2094\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2C6F\\u2C71-\\u2C7D\\u2C80-\\u2CE4\\u2D00-\\u2D25\\u2D30-\\u2D65\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31B7\\u31F0-\\u31FF\\u3400\\u4DB5\\u4E00\\u9FC3\\uA000-\\uA48C\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A-\\uA62B\\uA640-\\uA65F\\uA662-\\uA66E\\uA67F-\\uA697\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78C\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA90A-\\uA925\\uA930-\\uA946\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAC00\\uD7A3\\uF900-\\uFA2D\\uFA30-\\uFA6A\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40-\\uFB41\\uFB43-\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]';\nlet regex = new RegExp(\n  `(?:(?:(\\\\s?(?:^|[.\\\\(\\\\)!?;:\"-])\\\\s*)(${character}))|(${character}))(${character}*[’']*${character}*)`,\n  'g'\n);\n\nlet convertToRegExp = specials =>\n  specials.map(s => [new RegExp(`\\\\b${s}\\\\b`, 'gi'), s]);\n\nfunction parseMatch(match) {\n  const firstCharacter = match[0];\n\n  // test first character\n  if (/\\s/.test(firstCharacter)) {\n    // if whitespace - trim and return\n    return match.substr(1);\n  }\n  if (/[()]/.test(firstCharacter)) {\n    // if parens - this shouldn't be replaced\n    return null;\n  }\n\n  return match;\n}\n\nmodule.exports = (str, options = {}) => {\n  str = str\n    .toLowerCase()\n    .replace(regex, (m, lead = '', forced, lower, rest) => {\n      const parsedMatch = parseMatch(m);\n      if (!parsedMatch) {\n        return m;\n      }\n      if (!forced) {\n        const fullLower = lower + rest;\n\n        if (lowerCase.has(fullLower)) {\n          return parsedMatch;\n        }\n      }\n\n      return lead + (lower || forced).toUpperCase() + rest;\n    });\n\n  const customSpecials = options.special || [];\n  const replace = [...specials, ...customSpecials];\n  const replaceRegExp = convertToRegExp(replace);\n\n  replaceRegExp.forEach(([pattern, s]) => {\n    str = str.replace(pattern, s);\n  });\n\n  return str;\n};\n","const conjunctions = [\n  'for',\n  'and',\n  'nor',\n  'but',\n  'or',\n  'yet',\n  'so'\n]\n\nconst articles = [\n  'a',\n  'an',\n  'the'\n]\n\nconst prepositions = [\n  'aboard',\n  'about',\n  'above',\n  'across',\n  'after',\n  'against',\n  'along',\n  'amid',\n  'among',\n  'anti',\n  'around',\n  'as',\n  'at',\n  'before',\n  'behind',\n  'below',\n  'beneath',\n  'beside',\n  'besides',\n  'between',\n  'beyond',\n  'but',\n  'by',\n  'concerning',\n  'considering',\n  'despite',\n  'down',\n  'during',\n  'except',\n  'excepting',\n  'excluding',\n  'following',\n  'for',\n  'from',\n  'in',\n  'inside',\n  'into',\n  'like',\n  'minus',\n  'near',\n  'of',\n  'off',\n  'on',\n  'onto',\n  'opposite',\n  'over',\n  'past',\n  'per',\n  'plus',\n  'regarding',\n  'round',\n  'save',\n  'since',\n  'than',\n  'through',\n  'to',\n  'toward',\n  'towards',\n  'under',\n  'underneath',\n  'unlike',\n  'until',\n  'up',\n  'upon',\n  'versus',\n  'via',\n  'with',\n  'within',\n  'without'\n]\n\nmodule.exports = new Set([\n  ...conjunctions,\n  ...articles,\n  ...prepositions\n])\n","const intended = [\n  'CLI',\n  'API',\n  'HTTP',\n  'HTTPS',\n  'JSX',\n  'DNS',\n  'URL',\n  'CI',\n  'CDN',\n  'GitHub',\n  'CSS',\n  'JS',\n  'JavaScript',\n  'TypeScript',\n  'HTML',\n  'WordPress',\n  'JavaScript',\n  'Next.js',\n  'Node.js'\n];\n\nmodule.exports = intended;\n","import * as db from '../db';\nimport {\n  Condition,\n  Action,\n  Rule,\n  RuleIndexer,\n  rankRules,\n  migrateIds,\n  iterateIds\n} from './rules';\nimport { getMappings } from '../db/mappings';\nimport { addDays, subDays, parseDate, dayFromDate } from '../../shared/months';\nimport { addSyncListener } from '../sync/index';\nimport { RuleError } from '../errors';\nimport {\n  FIELD_TYPES,\n  sortNumbers,\n  getApproxNumberThreshold\n} from '../../shared/rules';\nimport q from '../../shared/query';\nimport { requiredFields, toDateRepr } from '../models';\nimport { currentDay } from '../../shared/months';\nimport { partitionByField, fastSetMerge } from '../../shared/util';\nimport { setSyncingMode, batchMessages } from '../sync';\nimport { schemaConfig } from '../aql/schema';\nconst uuid = require('../../platform/uuid');\n\n// TODO: Detect if it looks like the user is creating a rename rule\n// and prompt to create it in the pre phase instead\n// * We could also make the \"create rule\" button a dropdown that\n//   provides different \"templates\" like \"create renaming rule\"\n\nexport { iterateIds } from './rules';\n\nlet allRules;\nlet unlistenSync;\nlet firstcharIndexer;\nlet payeeIndexer;\n\nexport function resetState() {\n  allRules = new Map();\n  firstcharIndexer = new RuleIndexer({\n    field: 'imported_payee',\n    method: 'firstchar'\n  });\n  payeeIndexer = new RuleIndexer({ field: 'payee' });\n}\n\n// Database functions\n\nfunction invert(obj) {\n  return Object.fromEntries(\n    Object.entries(obj).map(entry => {\n      return [entry[1], entry[0]];\n    })\n  );\n}\n\nlet internalFields = schemaConfig.views.transactions.fields;\nlet publicFields = invert(schemaConfig.views.transactions.fields);\n\nfunction fromInternalField(obj) {\n  return {\n    ...obj,\n    field: publicFields[obj.field] || obj.field\n  };\n}\n\nfunction toInternalField(obj) {\n  return {\n    ...obj,\n    field: internalFields[obj.field] || obj.field\n  };\n}\n\nexport const ruleModel = {\n  validate(rule, { update } = {}) {\n    requiredFields('rules', rule, ['conditions', 'actions'], update);\n\n    if (!update || 'stage' in rule) {\n      if (\n        rule.stage !== 'pre' &&\n        rule.stage !== 'post' &&\n        rule.stage !== null\n      ) {\n        throw new Error('Invalid rule stage: ' + rule.stage);\n      }\n    }\n\n    return rule;\n  },\n\n  toJS(row) {\n    function parseArray(str) {\n      let value;\n      try {\n        value = typeof str === 'string' ? JSON.parse(str) : str;\n      } catch (e) {\n        throw new RuleError('internal', 'Cannot parse rule json');\n      }\n\n      if (!Array.isArray(value)) {\n        throw new RuleError('internal', 'Rule json must be an array');\n      }\n      return value;\n    }\n\n    let rule = { ...row };\n    rule.conditions = rule.conditions\n      ? parseArray(rule.conditions).map(cond => fromInternalField(cond))\n      : [];\n    rule.actions = rule.actions\n      ? parseArray(rule.actions).map(action => fromInternalField(action))\n      : [];\n    return rule;\n  },\n\n  fromJS(rule) {\n    let row = { ...rule };\n    if ('conditions' in row) {\n      let conditions = row.conditions.map(cond => toInternalField(cond));\n      row.conditions = JSON.stringify(conditions);\n    }\n    if ('actions' in row) {\n      let actions = row.actions.map(action => toInternalField(action));\n      row.actions = JSON.stringify(actions);\n    }\n    return row;\n  }\n};\n\nexport function makeRule(data) {\n  let rule;\n  try {\n    rule = new Rule({\n      ...ruleModel.toJS(data),\n      fieldTypes: FIELD_TYPES\n    });\n  } catch (e) {\n    console.warn('Invalid rule', e);\n    if (e instanceof RuleError) {\n      return null;\n    }\n    throw e;\n  }\n\n  // This is needed because we map ids on the fly, and they might\n  // not be persisted into the db. Mappings allow items to\n  // transparently merge with other items\n  migrateIds(rule, getMappings());\n\n  return rule;\n}\n\nexport async function loadRules() {\n  resetState();\n\n  let rules = await db.all(`\n    SELECT * FROM rules\n      WHERE conditions IS NOT NULL AND actions IS NOT NULL AND tombstone = 0\n  `);\n\n  for (let i = 0; i < rules.length; i++) {\n    let desc = rules[i];\n    // These are old stages, can be removed before release\n    if (desc.stage === 'cleanup' || desc.stage === 'modify') {\n      desc.stage = 'pre';\n    }\n\n    let rule = makeRule(desc);\n    if (rule) {\n      allRules.set(rule.id, rule);\n      firstcharIndexer.index(rule);\n      payeeIndexer.index(rule);\n    }\n  }\n\n  if (unlistenSync) {\n    unlistenSync();\n  }\n  unlistenSync = addSyncListener(onApplySync);\n}\n\nexport function getRules() {\n  // This can simply return the in-memory data\n  return [...allRules.values()];\n}\n\nexport async function insertRule(rule) {\n  rule = ruleModel.validate(rule);\n  return db.insertWithUUID('rules', ruleModel.fromJS(rule));\n}\n\nexport async function updateRule(rule) {\n  rule = ruleModel.validate(rule, { update: true });\n  return db.update('rules', ruleModel.fromJS(rule));\n}\n\nexport async function deleteRule(rule) {\n  let schedule = await db.first('SELECT id FROM schedules WHERE rule = ?', [\n    rule.id\n  ]);\n\n  if (schedule) {\n    return false;\n  }\n\n  return db.delete_('rules', rule.id);\n}\n\n// Sync projections\n\nfunction onApplySync(oldValues, newValues) {\n  newValues.forEach((items, table) => {\n    if (table === 'rules') {\n      items.forEach(newValue => {\n        let oldRule = allRules.get(newValue.id);\n\n        if (newValue.tombstone === 1) {\n          // Deleted, need to remove it from in-memory\n          let rule = allRules.get(newValue.id);\n          if (rule) {\n            allRules.delete(rule.getId());\n            firstcharIndexer.remove(rule);\n            payeeIndexer.remove(rule);\n          }\n        } else {\n          // Inserted/updated\n          let rule = makeRule(newValue);\n          if (rule) {\n            if (oldRule) {\n              firstcharIndexer.remove(oldRule);\n              payeeIndexer.remove(oldRule);\n            }\n            allRules.set(newValue.id, rule);\n            firstcharIndexer.index(rule);\n            payeeIndexer.index(rule);\n          }\n        }\n      });\n    }\n  });\n\n  // If any of the mapping tables have changed, we need to refresh the\n  // ids\n  let tables = [...newValues.keys()];\n  if (tables.find(table => table.indexOf('mapping') !== -1)) {\n    getRules().forEach(rule => {\n      migrateIds(rule, getMappings());\n    });\n  }\n}\n\n// Runner\nexport function runRules(trans) {\n  let finalTrans = { ...trans };\n  let allChanges = {};\n\n  let rules = rankRules(\n    fastSetMerge(\n      firstcharIndexer.getApplicableRules(trans),\n      payeeIndexer.getApplicableRules(trans)\n    )\n  );\n\n  for (let i = 0; i < rules.length; i++) {\n    finalTrans = rules[i].apply(finalTrans);\n  }\n\n  return finalTrans;\n}\n\n// This does the inverse: finds all the transactions matching a rule\nexport function conditionsToAQL(conditions, { recurDateBounds = 100 } = {}) {\n  let errors = [];\n\n  conditions = conditions\n    .map(cond => {\n      if (cond instanceof Condition) {\n        return cond;\n      }\n\n      try {\n        return new Condition(\n          cond.op,\n          cond.field,\n          cond.value,\n          cond.options,\n          FIELD_TYPES\n        );\n      } catch (e) {\n        errors.push(e.type || 'internal');\n        console.log('conditionsToAQL: invalid condition: ' + e.message);\n        return null;\n      }\n    })\n    .filter(Boolean);\n\n  // rule -> actualql\n  let filters = conditions.map(cond => {\n    let { type, field, op, value, options } = cond;\n\n    let getValue = value => {\n      if (type === 'number') {\n        return value.value;\n      }\n      return value;\n    };\n\n    let apply = (field, op, value) => {\n      if (type === 'number') {\n        if (options) {\n          if (options.outflow) {\n            return {\n              $and: [\n                { amount: { $lt: 0 } },\n                { [field]: { $transform: '$neg', [op]: value } }\n              ]\n            };\n          } else if (options.inflow) {\n            return {\n              $and: [{ amount: { $gt: 0 } }, { [field]: { [op]: value } }]\n            };\n          }\n        }\n\n        return { amount: { [op]: value } };\n      } else if (type === 'string') {\n        return { [field]: { $transform: '$lower', [op]: value } };\n      } else if (type === 'date') {\n        return { [field]: { [op]: value.date } };\n      }\n      return { [field]: { [op]: value } };\n    };\n\n    switch (op) {\n      case 'isapprox':\n      case 'is':\n        if (type === 'date') {\n          if (value.type === 'recur') {\n            let dates = value.schedule\n              .occurrences({ take: recurDateBounds })\n              .toArray()\n              .map(d => dayFromDate(d.date));\n\n            let compare = d => ({ $eq: d });\n\n            return {\n              $or: dates.map(d => {\n                if (op === 'isapprox') {\n                  return {\n                    $and: [\n                      { date: { $gte: subDays(d, 2) } },\n                      { date: { $lte: addDays(d, 2) } }\n                    ]\n                  };\n                }\n                return { date: d };\n              })\n            };\n          } else {\n            let { date } = value;\n\n            if (op === 'isapprox') {\n              let fullDate = parseDate(value.date);\n              let high = addDays(fullDate, 2);\n              let low = subDays(fullDate, 2);\n\n              return {\n                $and: [{ date: { $gte: low } }, { date: { $lte: high } }]\n              };\n            } else {\n              switch (value.type) {\n                case 'date':\n                  return { date: value.date };\n                case 'month': {\n                  let low = value.date + '-00';\n                  let high = value.date + '-99';\n                  return {\n                    $and: [{ date: { $gte: low } }, { date: { $lte: high } }]\n                  };\n                }\n                case 'year': {\n                  let low = value.date + '-00-00';\n                  let high = value.date + '-99-99';\n                  return {\n                    $and: [{ date: { $gte: low } }, { date: { $lte: high } }]\n                  };\n                }\n                default:\n              }\n            }\n          }\n        } else if (type === 'number') {\n          let number = value.value;\n          if (op === 'isapprox') {\n            let threshold = getApproxNumberThreshold(number);\n\n            return {\n              $and: [\n                apply(field, '$gte', number - threshold),\n                apply(field, '$lte', number + threshold)\n              ]\n            };\n          }\n          return apply(field, '$eq', number);\n        }\n\n        return apply(field, '$eq', value);\n\n      case 'isbetween':\n        // This operator is only applicable to the specific `between`\n        // number type so we don't use `apply`\n        let [low, high] = sortNumbers(value.num1, value.num2);\n        return {\n          [field]: [{ $gte: low }, { $lte: high }]\n        };\n      case 'contains':\n        // Running contains with id will automatically reach into\n        // the `name` of the referenced table and do a string match\n        return apply(\n          type === 'id' ? field + '.name' : field,\n          '$like',\n          '%' + value + '%'\n        );\n      case 'oneOf':\n        let values = value;\n        if (values.length === 0) {\n          // This forces it to match nothing\n          return { id: null };\n        }\n        return { $or: values.map(v => apply(field, '$eq', v)) };\n      case 'gt':\n        return apply(field, '$gt', getValue(value));\n      case 'gte':\n        return apply(field, '$gte', getValue(value));\n      case 'lt':\n        return apply(field, '$lt', getValue(value));\n      case 'lte':\n        return apply(field, '$lte', getValue(value));\n      case 'true':\n        return apply(field, '$eq', true);\n      case 'false':\n        return apply(field, '$eq', false);\n      default:\n        throw new Error('Unhandled operator: ' + op);\n    }\n  });\n\n  return { filters, errors };\n}\n\nexport function applyActions(transactionIds, actions, handlers) {\n  let parsedActions = actions\n    .map(action => {\n      if (action instanceof Action) {\n        return action;\n      }\n\n      try {\n        return new Action(\n          action.op,\n          action.field,\n          action.value,\n          action.options,\n          FIELD_TYPES\n        );\n      } catch (e) {\n        console.log('Action error', e);\n        return null;\n      }\n    })\n    .filter(Boolean);\n\n  if (parsedActions.length !== actions.length) {\n    // An error happened while parsing\n    return null;\n  }\n\n  let updated = transactionIds.map(id => {\n    let update = { id };\n    for (let action of parsedActions) {\n      action.exec(update);\n    }\n    return update;\n  });\n\n  return handlers['transactions-batch-update']({ updated });\n}\n\nexport function getRulesForPayee(payeeId) {\n  let rules = new Set();\n  iterateIds(getRules(), 'payee', (rule, id) => {\n    if (id === payeeId) {\n      rules.add(rule);\n    }\n  });\n\n  return rankRules([...rules]);\n}\n\nfunction* getIsSetterRules(\n  stage,\n  condField,\n  actionField,\n  { condValue, actionValue }\n) {\n  let rules = getRules();\n  for (let i = 0; i < rules.length; i++) {\n    let rule = rules[i];\n\n    if (\n      rule.stage === stage &&\n      rule.actions.length === 1 &&\n      rule.actions[0].op === 'set' &&\n      rule.actions[0].field === actionField &&\n      (actionValue === undefined || rule.actions[0].value === actionValue) &&\n      rule.conditions.length === 1 &&\n      rule.conditions[0].op === 'is' &&\n      rule.conditions[0].field === condField &&\n      (condValue === undefined || rule.conditions[0].value === condValue)\n    ) {\n      yield rule.serialize();\n    }\n  }\n\n  return null;\n}\n\nfunction* getOneOfSetterRules(\n  stage,\n  condField,\n  actionField,\n  { condValue, actionValue }\n) {\n  let rules = getRules();\n  for (let i = 0; i < rules.length; i++) {\n    let rule = rules[i];\n\n    if (\n      rule.stage === stage &&\n      rule.actions.length === 1 &&\n      rule.actions[0].op === 'set' &&\n      rule.actions[0].field === actionField &&\n      (actionValue == null || rule.actions[0].value === actionValue) &&\n      rule.conditions.length === 1 &&\n      rule.conditions[0].op === 'oneOf' &&\n      rule.conditions[0].field === condField &&\n      (condValue == null || rule.conditions[0].value.indexOf(condValue) !== -1)\n    ) {\n      yield rule.serialize();\n    }\n  }\n\n  return null;\n}\n\nexport async function updatePayeeRenameRule(fromNames, to) {\n  let renameRule = getOneOfSetterRules('pre', 'imported_payee', 'payee', {\n    actionValue: to\n  }).next().value;\n\n  // Note that we don't check for existing rules that set this\n  // `imported_payee` to something else. It's important to do\n  // that for categories because categories will be changes frequently\n  // for the same payee, but renames won't be changed much. It's a use\n  // case we could improve in the future, but this is fine for now.\n\n  if (renameRule) {\n    let condition = renameRule.conditions[0];\n    let newValue = [\n      ...fastSetMerge(\n        new Set(condition.value),\n        new Set(fromNames.filter(name => name !== ''))\n      )\n    ];\n    let rule = {\n      ...renameRule,\n      conditions: [{ ...condition, value: newValue }]\n    };\n    await updateRule(rule);\n    return renameRule.id;\n  } else {\n    let rule = new Rule({\n      stage: 'pre',\n      conditions: [{ op: 'oneOf', field: 'imported_payee', value: fromNames }],\n      actions: [{ op: 'set', field: 'payee', value: to }],\n      fieldTypes: FIELD_TYPES\n    });\n    return insertRule(rule.serialize());\n  }\n}\n\nexport function getProbableCategory(transactions) {\n  let scores = new Map();\n\n  transactions.forEach(trans => {\n    if (trans.category) {\n      scores.set(trans.category, (scores.get(trans.category) || 0) + 1);\n    }\n  });\n\n  let winner = transactions.reduce((winner, trans) => {\n    let score = scores.get(trans.category);\n    if (!winner || score > winner.score) {\n      return { score, category: trans.category };\n    }\n    return winner;\n  }, null);\n\n  return winner.score >= 3 ? winner.category : null;\n}\n\nexport async function updateCategoryRules(transactions) {\n  if (transactions.length === 0) {\n    return;\n  }\n\n  let payeeIds = new Set(transactions.map(trans => trans.payee));\n  let transIds = new Set(transactions.map(trans => trans.id));\n\n  // It's going to be quickest to get the oldest date and then query\n  // all transactions since then so we can work in memory\n  let oldestDate = null;\n  for (let i = 0; i < transactions.length; i++) {\n    if (oldestDate === null || transactions[i].date < oldestDate) {\n      oldestDate = transactions[i].date;\n    }\n  }\n\n  // We look 6 months behind to include any other transaction. This\n  // makes it so we, 1. don't have to load in all transactions ever\n  // and 2. \"forget\" really old transactions which might be nice and\n  // 3. don't have to individually run a query for each payee\n  oldestDate = subDays(oldestDate, 180);\n\n  // Also look 180 days in the future to get any future transactions\n  // (this might change when we think about scheduled transactions)\n  let register = await db.all(\n    `SELECT t.* FROM v_transactions t\n     LEFT JOIN accounts a ON a.id = t.account\n     WHERE date >= ? AND date <= ? AND is_parent = 0 AND a.closed = 0`,\n    [toDateRepr(oldestDate), toDateRepr(addDays(currentDay(), 180))]\n  );\n\n  let allTransactions = partitionByField(register, 'payee');\n  let categoriesToSet = new Map();\n\n  for (let payeeId of payeeIds) {\n    // Don't do anything if payee is null\n    if (payeeId) {\n      let latestTrans = (allTransactions.get(payeeId) || []).slice(0, 5);\n\n      // Check if one of the latest transactions was one that was\n      // updated. We only want to update anything if so.\n      if (latestTrans.find(trans => transIds.has(trans.id))) {\n        let category = getProbableCategory(latestTrans);\n        if (category) {\n          categoriesToSet.set(payeeId, category);\n        }\n      }\n    }\n  }\n\n  await batchMessages(async () => {\n    for (let [payeeId, category] of categoriesToSet.entries()) {\n      let ruleSetters = [\n        ...getIsSetterRules(null, 'payee', 'category', {\n          condValue: payeeId\n        })\n      ];\n\n      if (ruleSetters.length > 0) {\n        // If there are existing rules, change all of them to the new\n        // category (if they aren't already using it). We set all of\n        // them because it's possible that multiple rules exist\n        // because 2 clients made them independently. Not really a big\n        // deal, but to make sure our update gets applied set it to\n        // all of them\n        for (let rule of ruleSetters) {\n          let action = rule.actions[0];\n          if (action.value !== category) {\n            await updateRule({\n              ...rule,\n              actions: [{ ...action, value: category }]\n            });\n          }\n        }\n      } else {\n        // No existing rules, so create one\n        let newRule = new Rule({\n          stage: null,\n          conditions: [{ op: 'is', field: 'payee', value: payeeId }],\n          actions: [{ op: 'set', field: 'category', value: category }],\n          fieldTypes: FIELD_TYPES\n        });\n        await insertRule(newRule.serialize());\n      }\n    }\n  });\n}\n\n// This can be removed in the future\nexport async function migrateOldRules() {\n  let allPayees = await db.all(\n    `SELECT p.*, c.id as category FROM payees p\n    LEFT JOIN category_mapping cm ON cm.id = p.category\n    LEFT JOIN categories c ON (c.id = cm.transferId AND c.tombstone = 0)\n    WHERE p.tombstone = 0 AND transfer_acct IS NULL`\n  );\n  let allRules = await db.all(\n    `SELECT pr.*, pm.targetId as payee_id FROM payee_rules pr\n      LEFT JOIN payee_mapping pm ON pm.id = pr.payee_id\n      WHERE pr.tombstone = 0`\n  );\n\n  let payeesById = new Map();\n  for (let i = 0; i < allPayees.length; i++) {\n    payeesById.set(allPayees[i].id, allPayees[i]);\n  }\n\n  let rulesByPayeeId = new Map();\n  for (let i = 0; i < allRules.length; i++) {\n    let item = allRules[i];\n    let rules = rulesByPayeeId.get(item.payee_id) || [];\n    rules.push(item);\n    rulesByPayeeId.set(item.payee_id, rules);\n  }\n\n  let rules = [];\n\n  // Convert payee name rules\n  for (let [payeeId, payeeRules] of rulesByPayeeId.entries()) {\n    let equals = payeeRules.filter(r => {\n      let payee = payeesById.get(r.payee_id);\n\n      return (\n        (r.type === 'equals' || r.type == null) &&\n        (!payee || r.value.toLowerCase() !== payee.name.toLowerCase())\n      );\n    });\n    let contains = payeeRules.filter(r => r.type === 'contains');\n    let actions = [{ op: 'set', field: 'payee', value: payeeId }];\n\n    if (equals.length > 0) {\n      rules.push({\n        stage: null,\n        conditions: [\n          {\n            op: 'oneOf',\n            field: 'imported_payee',\n            value: equals.map(payeeRule => payeeRule.value)\n          }\n        ],\n        actions\n      });\n    }\n\n    if (contains.length > 0) {\n      rules = rules.concat(\n        contains.map(payeeRule => ({\n          stage: null,\n          conditions: [\n            {\n              op: 'contains',\n              field: 'imported_payee',\n              value: payeeRule.value\n            }\n          ],\n          actions\n        }))\n      );\n    }\n  }\n\n  // Convert category rules\n  let catRules = allPayees\n    .filter(p => p.category)\n    .reduce((map, payee) => {\n      let ids = map.get(payee.category) || new Set();\n      ids.add(payee.id);\n      map.set(payee.category, ids);\n      return map;\n    }, new Map());\n\n  for (let [catId, payeeIds] of catRules) {\n    rules.push({\n      stage: null,\n      conditions: [\n        {\n          op: 'oneOf',\n          field: 'payee',\n          value: [...payeeIds]\n        }\n      ],\n      actions: [\n        {\n          op: 'set',\n          field: 'category',\n          value: catId\n        }\n      ]\n    });\n  }\n\n  // Very important: we never want to sync migration changes, but it\n  // still has to run through the syncing layer to make sure\n  // projections are correct. This is only OK because we require a\n  // sync reset after this.\n  let prevMode = setSyncingMode('disabled');\n  await batchMessages(async () => {\n    for (let rule of rules) {\n      await insertRule({\n        stage: rule.stage,\n        conditions: rule.conditions,\n        actions: rule.actions\n      });\n    }\n\n    await db.runQuery('DELETE FROM payee_rules', []);\n  });\n  setSyncingMode(prevMode);\n}\n","import * as sheet from '../sheet';\nimport { batchMessages } from '../sync';\nimport * as db from '../db';\nimport { incrFetch, whereIn } from '../db/util';\nimport * as transfer from './transfer';\nimport * as rules from './transaction-rules';\nconst connection = require('../../platform/server/connection');\n\nasync function idsWithChildren(ids) {\n  let whereIds = whereIn(ids, 'parent_id');\n  let rows = await db.all(\n    `SELECT id FROM v_transactions_internal WHERE ${whereIds}`\n  );\n  let set = new Set(ids);\n  for (let row of rows) {\n    set.add(row.id);\n  }\n  return [...set];\n}\n\nasync function getTransactionsByIds(ids) {\n  // TODO: convert to whereIn\n  //\n  // or better yet, use ActualQL\n  return incrFetch(\n    (query, params) => db.selectWithSchema('transactions', query, params),\n    ids,\n    id => `id = '${id}'`,\n    where => `SELECT * FROM v_transactions_internal WHERE ${where}`\n  );\n}\n\nexport async function batchUpdateTransactions({\n  added,\n  deleted,\n  updated,\n  learnCategories = false,\n  detectOrphanPayees = true\n}) {\n  // Track the ids of each type of transaction change (see below for why)\n  let addedIds = [];\n  let updatedIds = updated ? updated.map(u => u.id) : [];\n  let deletedIds = deleted ? await idsWithChildren(deleted.map(d => d.id)) : [];\n\n  let oldPayees = new Set();\n  let accounts = await db.all('SELECT * FROM accounts WHERE tombstone = 0');\n\n  // We need to get all the payees of updated transactions _before_\n  // making changes\n  if (updated) {\n    let descUpdatedIds = updated\n      .filter(update => update.payee)\n      .map(update => update.id);\n\n    let transactions = await getTransactionsByIds(descUpdatedIds);\n\n    for (let i = 0; i < transactions.length; i++) {\n      oldPayees.add(transactions[i].payee);\n    }\n  }\n\n  // Apply all the updates. We can batch this now! This is important\n  // and makes bulk updates much faster\n  await batchMessages(async () => {\n    if (added) {\n      addedIds = await Promise.all(\n        added.map(async t => db.insertTransaction(t))\n      );\n    }\n\n    if (deleted) {\n      await Promise.all(\n        // It's important to use `deletedIds` and not `deleted` here\n        // because we've expanded it to include children above. The\n        // inconsistency of the delete APIs is annoying and should\n        // be fixed (it should only take an id)\n        deletedIds.map(async id => {\n          await db.deleteTransaction({ id });\n        })\n      );\n    }\n\n    if (updated) {\n      await Promise.all(\n        updated.map(async t => {\n          if (t.account) {\n            // Moving transactions off budget should always clear the\n            // category\n            let account = accounts.find(acct => acct.id === t.account);\n            if (account.offbudget === 1) {\n              t.category = null;\n            }\n          }\n\n          await db.updateTransaction(t);\n        })\n      );\n    }\n  });\n\n  // Get all of the full transactions that were changed. This is\n  // needed to run any cascading logic that depends on the full\n  // transaction. Things like transfers, analyzing rule updates, and\n  // more\n  let allAdded = await getTransactionsByIds(addedIds);\n  let allUpdated = await getTransactionsByIds(updatedIds);\n  let allDeleted = await getTransactionsByIds(deletedIds);\n\n  // Post-processing phase: first do any updates to transfers.\n  // Transfers update the transactions and we need to return updates\n  // to the client so that can apply them. Note that added\n  // transactions just return the full transaction.\n  let resultAdded = allAdded;\n  let resultUpdated;\n\n  await batchMessages(async () => {\n    await Promise.all(allAdded.map(t => transfer.onInsert(t)));\n\n    // Return any updates from here\n    resultUpdated = (await Promise.all(\n      allUpdated.map(t => transfer.onUpdate(t))\n    )).filter(Boolean);\n\n    await Promise.all(allDeleted.map(t => transfer.onDelete(t)));\n  });\n\n  if (learnCategories) {\n    // Analyze any updated categories and update rules to learn from\n    // the user's activity\n    let ids = new Set([\n      ...(added ? added.filter(add => add.category).map(add => add.id) : []),\n      ...(updated\n        ? updated.filter(update => update.category).map(update => update.id)\n        : [])\n    ]);\n    await rules.updateCategoryRules(\n      allAdded.concat(allUpdated).filter(trans => ids.has(trans.id))\n    );\n  }\n\n  if (detectOrphanPayees) {\n    // Look for any orphaned payees and notify the user about merging\n    // them\n\n    if (updated) {\n      let newPayeeIds = updated.map(u => u.payee).filter(Boolean);\n      if (newPayeeIds.length > 0) {\n        let allOrphaned = new Set(await db.getOrphanedPayees());\n\n        let orphanedIds = [...oldPayees].filter(id => allOrphaned.has(id));\n\n        if (orphanedIds.length > 0) {\n          connection.send('orphaned-payees', {\n            orphanedIds,\n            updatedPayeeIds: newPayeeIds\n          });\n        }\n      }\n    }\n  }\n\n  return {\n    added: resultAdded,\n    updated: resultUpdated\n  };\n}\n","import * as db from '../db';\n\nasync function getPayee(acct) {\n  return db.first('SELECT * FROM payees WHERE transfer_acct = ?', [acct]);\n}\n\nasync function getTransferredAccount(transaction) {\n  if (transaction.payee) {\n    let { transfer_acct, id } = await db.first(\n      'SELECT id, transfer_acct FROM v_payees WHERE id = ?',\n      [transaction.payee]\n    );\n    return transfer_acct;\n  }\n  return null;\n}\n\nasync function clearCategory(transaction, transferAcct) {\n  const { offbudget: fromOffBudget } = await db.first(\n    'SELECT offbudget FROM accounts WHERE id = ?',\n    [transaction.account]\n  );\n  const { offbudget: toOffBudget } = await db.first(\n    'SELECT offbudget FROM accounts WHERE id = ?',\n    [transferAcct]\n  );\n\n  // We should clear the category to make sure it's not being\n  // accounted for in the budget, unless it should be in the case of\n  // transferring from an on-budget to off-budget account\n  if (fromOffBudget === toOffBudget) {\n    await db.updateTransaction({ id: transaction.id, category: null });\n    return true;\n  }\n  return false;\n}\n\nexport async function addTransfer(transaction, transferredAccount) {\n  let { id: fromPayee } = await db.first(\n    'SELECT id FROM payees WHERE transfer_acct = ?',\n    [transaction.account]\n  );\n\n  // We need to enforce certain constraints with child transaction transfers\n  if (transaction.parent_id) {\n    let row = await db.first(\n      `\n        SELECT p.id, p.transfer_acct FROM v_transactions t\n        LEFT JOIN payees p ON p.id = t.payee\n        WHERE t.id = ?\n      `,\n      [transaction.parent_id]\n    );\n\n    if (row.transfer_acct) {\n      if (row.id !== transaction.payee) {\n        // This child transaction is trying to use a transfer payee,\n        // but the parent is already using a different transfer payee.\n        // This is not allowed, so not only do we do nothing, we clear\n        // the payee of the child transaction to make it clear\n        await db.updateTransaction({ id: transaction.id, payee: null });\n        return { id: transaction.id, payee: null };\n      }\n\n      // The parent has the same transfer payee, so it \"owns\" the\n      // transfer logic\n      return null;\n    }\n  }\n\n  const id = await db.insertTransaction({\n    account: transferredAccount,\n    amount: -transaction.amount,\n    payee: fromPayee,\n    date: transaction.date,\n    transfer_id: transaction.id,\n    notes: transaction.notes || null,\n    cleared: false\n  });\n\n  await db.updateTransaction({ id: transaction.id, transfer_id: id });\n  const categoryCleared = await clearCategory(transaction, transferredAccount);\n\n  return {\n    id: transaction.id,\n    transfer_id: id,\n    ...(categoryCleared ? { category: null } : {})\n  };\n}\n\nexport async function removeTransfer(transaction) {\n  let transferTrans = await db.getTransaction(transaction.transfer_id);\n  if (transferTrans.is_child) {\n    // If it's a child transaction, we don't delete it because that\n    // would invalidate the whole split transaction. Instead of turn\n    // it into a normal transaction\n    await db.updateTransaction({\n      id: transaction.transfer_id,\n      transfer_id: null,\n      payee: null\n    });\n  } else {\n    await db.deleteTransaction({ id: transaction.transfer_id });\n  }\n  await db.updateTransaction({ id: transaction.id, transfer_id: null });\n  return { id: transaction.id, transfer_id: null };\n}\n\nexport async function updateTransfer(transaction, transferredAccount) {\n  let payee = await getPayee(transaction.account);\n\n  await db.updateTransaction({\n    id: transaction.transfer_id,\n    account: transferredAccount,\n    // Make sure to update the payee on the other side in case the\n    // user moved this transaction into another account\n    payee: payee.id,\n    date: transaction.date,\n    notes: transaction.notes,\n    amount: -transaction.amount\n  });\n\n  const categoryCleared = await clearCategory(transaction, transferredAccount);\n  if (categoryCleared) {\n    return { id: transaction.id, category: null };\n  }\n}\n\nexport async function onInsert(transaction) {\n  let transferredAccount = await getTransferredAccount(transaction);\n\n  if (transferredAccount) {\n    return addTransfer(transaction, transferredAccount);\n  }\n}\n\nexport async function onDelete(transaction) {\n  if (transaction.transfer_id) {\n    await removeTransfer(transaction);\n  }\n}\n\nexport async function onUpdate(transaction) {\n  const transferredAccount = await getTransferredAccount(transaction);\n\n  if (transferredAccount && !transaction.transfer_id) {\n    return addTransfer(transaction, transferredAccount);\n  }\n\n  if (!transferredAccount && transaction.transfer_id) {\n    return removeTransfer(transaction);\n  }\n\n  if (transferredAccount && transaction.transfer_id) {\n    return updateTransfer(transaction, transferredAccount);\n  }\n}\n","import * as models from './models';\n\nexport const transactionModel = {\n  ...models.transactionModel,\n\n  toExternal(transactions, idx, payees) {\n    return transactions;\n    // function convert(t, payee) {\n    //   return {\n    //     id: t.id,\n    //     account_id: t.acct,\n    //     amount: t.amount,\n    //     payee_id: payee ? payee.id : null,\n    //     payee: payee ? payee.name : null,\n    //     imported_payee: t.imported_description,\n    //     category_id: t.category,\n    //     date: t.date,\n    //     notes: t.notes,\n    //     imported_id: t.financial_id,\n    //     transfer_id: t.transferred_id,\n    //     cleared: t.cleared\n    //   };\n    // }\n\n    // let splits = getAllSplitTransactions(transactions, idx);\n    // if (splits) {\n    //   let payee =\n    //     splits.parent.description && payees[splits.parent.description];\n\n    //   return {\n    //     ...convert(splits.parent, payee),\n    //     subtransactions: splits.children.map(child => convert(child, payee))\n    //   };\n    // }\n\n    // let transaction = transactions[idx];\n    // let payee = transaction.description && payees[transaction.description];\n    // return convert(transaction, payee);\n  },\n\n  fromExternal(transaction) {\n    let result = {};\n    if ('id' in transaction) {\n      result.id = transaction.id;\n    }\n    if ('account_id' in transaction) {\n      result.acct = transaction.account_id;\n    }\n    if ('amount' in transaction) {\n      result.amount = transaction.amount;\n    }\n    if ('payee_id' in transaction) {\n      result.description = transaction.payee_id;\n    }\n    if ('imported_payee' in transaction) {\n      result.imported_description = transaction.imported_payee;\n    }\n    if ('category_id' in transaction) {\n      result.category = transaction.category_id;\n    }\n    if ('date' in transaction) {\n      result.date = transaction.date;\n    }\n    if ('notes' in transaction) {\n      result.notes = transaction.notes;\n    }\n    if ('imported_id' in transaction) {\n      result.financial_id = transaction.imported_id;\n    }\n    if ('transfer_id' in transaction) {\n      result.transferred_id = transaction.transfer_id;\n    }\n    if ('cleared' in transaction) {\n      result.cleared = transaction.cleared;\n    }\n    return result;\n  }\n};\n\nexport const accountModel = {\n  ...models.accountModel,\n\n  toExternal(account) {\n    return {\n      id: account.id,\n      name: account.name,\n      type: account.type,\n      offbudget: account.offbudget ? true : false,\n      closed: account.closed ? true : false\n    };\n  },\n\n  fromExternal(account) {\n    let result = { ...account };\n    if ('offbudget' in account) {\n      result.offbudget = account.offbudget ? 1 : 0;\n    }\n    if ('closed' in account) {\n      result.closed = account.closed ? 1 : 0;\n    }\n    return result;\n  }\n};\n\nexport const categoryModel = {\n  ...models.categoryModel,\n\n  toExternal(category) {\n    return {\n      id: category.id,\n      name: category.name,\n      is_income: category.is_income ? true : false,\n      group_id: category.cat_group\n    };\n  },\n\n  fromExternal(category) {\n    let { group_id: _, ...result } = category;\n    if ('is_income' in category) {\n      result.is_income = category.is_income ? 1 : 0;\n    }\n    if ('group_id' in category) {\n      result.cat_group = category.group_id;\n    }\n    return result;\n  }\n};\n\nexport const categoryGroupModel = {\n  ...models.categoryGroupModel,\n\n  toExternal(group) {\n    return {\n      id: group.id,\n      name: group.name,\n      is_income: group.is_income ? true : false,\n      categories: group.categories.map(categoryModel.toExternal)\n    };\n  },\n\n  fromExternal(group) {\n    let result = { ...group };\n    if ('is_income' in group) {\n      result.is_income = group.is_income ? 1 : 0;\n    }\n    if ('categories' in group) {\n      result.categories = group.categories.map(categoryModel.fromExternal);\n    }\n    return result;\n  }\n};\n\nexport const payeeModel = {\n  ...models.payeeModel,\n\n  toExternal(payee) {\n    return {\n      id: payee.id,\n      name: payee.name,\n      category: payee.category,\n      transfer_acct: payee.transfer_acct\n    };\n  },\n\n  fromExternal(payee) {\n    // No translation is needed\n    return payee;\n  }\n};\n\nexport const payeeRuleModel = {\n  ...models.payeeRuleModel,\n\n  toExternal(rule) {\n    let { tombstone, ...result } = rule;\n    return result;\n  },\n\n  fromExternal(rule) {\n    return rule;\n  }\n};\n","import { addTransactions } from './accounts/sync';\nimport {\n  transactionModel,\n  accountModel,\n  categoryModel,\n  categoryGroupModel,\n  payeeModel,\n  payeeRuleModel\n} from './api-models';\nimport {\n  ungroupTransactions,\n  updateTransaction,\n  deleteTransaction\n} from '../shared/transactions';\nimport * as db from './db';\nimport * as sheet from './sheet';\nimport * as prefs from './prefs';\nimport * as monthUtils from '../shared/months';\nimport * as update from './update';\nimport * as cloudStorage from './cloud-storage';\nimport { setSyncingMode, batchMessages } from './sync';\nimport { groupById, cleanUUID } from '../shared/util';\nimport { getClock } from './timestamp';\nimport { runMutator } from './mutators';\nimport { integerToAmount } from '../shared/util';\nimport { runQuery as aqlQuery } from './aql/schema/run-query';\nimport q from '../shared/query';\n\nconst { resolveName } = require('./spreadsheet/util');\nconst connection = require('../platform/server/connection');\n\nlet IMPORT_MODE = false;\n\n// This is duplicate from main.js...\nfunction APIError(msg, meta) {\n  return { type: 'APIError', message: msg, meta };\n}\n\n// The API is different in two ways: we never want undo enabled, and\n// we also need to notify the UI manually if stuff has changed (if\n// they are connecting to an already running instance, the UI should\n// update). The wrapper handles that.\nfunction withMutation(handler) {\n  return args => {\n    return runMutator(\n      async () => {\n        let latestTimestamp = getClock().timestamp.toString();\n        let result = await handler(args);\n\n        let rows = await db.all(\n          'SELECT DISTINCT dataset FROM messages_crdt WHERE timestamp > ?',\n          [latestTimestamp]\n        );\n\n        // Only send the sync event if anybody else is connected\n        if (connection.getNumClients() > 1) {\n          connection.send('sync-event', {\n            type: 'success',\n            tables: rows.map(row => row.dataset)\n          });\n        }\n\n        return result;\n      },\n      { undoDisabled: true }\n    );\n  };\n}\n\nlet handlers = {};\n\nasync function validateMonth(month) {\n  if (!month.match(/^\\d{4}-\\d{2}$/)) {\n    throw APIError('Invalid month format, use YYYY-MM: ' + month);\n  }\n\n  if (!IMPORT_MODE) {\n    let { start, end } = await handlers['get-budget-bounds']();\n    let range = monthUtils.range(start, end);\n    if (!range.includes(month)) {\n      throw APIError('No budget exists for month: ' + month);\n    }\n  }\n}\n\nasync function validateExpenseCategory(debug, id) {\n  if (id == null) {\n    throw APIError(`${debug}: category id is required`);\n  }\n\n  let row = await db.first('SELECT is_income FROM categories WHERE id = ?', [\n    id\n  ]);\n\n  if (!row) {\n    throw APIError(`${debug}: category \"${id}\" does not exist`);\n  }\n\n  if (row.is_income !== 0) {\n    throw APIError(`${debug}: category \"${id}\" is not an expense category`);\n  }\n}\n\nlet batchPromise = null;\n\nhandlers['api/batch-budget-start'] = async function() {\n  if (batchPromise) {\n    throw APIError('Cannot start a batch process: batch already started');\n  }\n\n  // If we are importing, all we need to do is start a raw database\n  // transaction. Updating spreadsheet cells doesn't go through the\n  // syncing layer in that case.\n  if (IMPORT_MODE) {\n    db.asyncTransaction(() => {\n      return new Promise((resolve, reject) => {\n        batchPromise = { resolve, reject };\n      });\n    });\n  } else {\n    batchMessages(() => {\n      return new Promise((resolve, reject) => {\n        batchPromise = { resolve, reject };\n      });\n    });\n  }\n};\n\nhandlers['api/batch-budget-end'] = async function() {\n  if (!batchPromise) {\n    throw APIError('Cannot end a batch process: no batch started');\n  }\n\n  batchPromise.resolve();\n  batchPromise = null;\n};\n\nhandlers['api/load-budget'] = async function({ id }) {\n  let { id: currentId } = prefs.getPrefs() || {};\n\n  if (currentId !== id) {\n    connection.send('start-load');\n    let { error } = await handlers['load-budget']({ id });\n\n    if (!error) {\n      connection.send('finish-load');\n    } else {\n      connection.send('show-budgets');\n\n      if (error === 'out-of-sync-migrations' || error === 'out-of-sync-data') {\n        throw new Error(\n          'This budget cannot be loaded with this version of the app.'\n        );\n      } else if (error === 'budget-not-found') {\n        throw new Error(\n          'Budget \"' +\n            id +\n            '\" not found. Check the id of your budget in the \"Advanced\" section of the settings page.'\n        );\n      } else {\n        throw new Error('We had an unknown problem opening \"' + id + '\".');\n      }\n    }\n  }\n};\n\nhandlers['api/start-import'] = async function({ budgetName }) {\n  // Notify UI to close budget\n  await handlers['close-budget']();\n\n  // Create the budget\n  await handlers['create-budget']({ budgetName, avoidUpload: true });\n\n  // Clear out the default expense categories\n  await db.runQuery('DELETE FROM categories WHERE is_income = 0');\n  await db.runQuery('DELETE FROM category_groups WHERE is_income = 0');\n\n  // Turn syncing off\n  setSyncingMode('import');\n\n  connection.send('start-import');\n  IMPORT_MODE = true;\n};\n\nhandlers['api/finish-import'] = async function() {\n  sheet.get().markCacheDirty();\n\n  // We always need to fully reload the app. Importing doesn't touch\n  // the spreadsheet, but we can't just recreate the spreadsheet\n  // either; there is other internal state that isn't created\n  let { id } = prefs.getPrefs();\n  await handlers['close-budget']();\n  await handlers['load-budget']({ id });\n\n  await handlers['get-budget-bounds']();\n  await sheet.waitOnSpreadsheet();\n\n  await cloudStorage.upload().catch(err => {});\n\n  connection.send('finish-import');\n  IMPORT_MODE = false;\n};\n\nhandlers['api/abort-import'] = async function() {\n  if (IMPORT_MODE) {\n    let { id } = prefs.getPrefs();\n\n    await handlers['close-budget']();\n    await handlers['delete-budget']({ id });\n    connection.send('show-budgets');\n  }\n\n  IMPORT_MODE = false;\n};\n\nhandlers['api/query'] = async function({ query }) {\n  return aqlQuery(query);\n};\n\nhandlers['api/budget-months'] = async function() {\n  let { start, end } = await handlers['get-budget-bounds']();\n  return monthUtils.range(start, end);\n};\n\nhandlers['api/budget-month'] = async function({ month }) {\n  await validateMonth(month);\n\n  let groups = await db.getCategoriesGrouped();\n  let sheetName = monthUtils.sheetForMonth(month);\n\n  function value(name) {\n    let v = sheet.get().getCellValue(sheetName, name);\n    return v === '' ? 0 : v;\n  }\n\n  // This is duplicated from main.js because the return format is\n  // different (for now)\n  return {\n    month,\n    incomeAvailable: value('available-funds'),\n    lastMonthOverspent: value('last-month-overspent'),\n    forNextMonth: value('buffered'),\n    totalBudgeted: value('total-budgeted'),\n    toBudget: value('to-budget'),\n\n    fromLastMonth: value('from-last-month'),\n    totalIncome: value('total-income'),\n    totalSpent: value('total-spent'),\n    totalBalance: value('total-leftover'),\n\n    categoryGroups: groups.map(group => {\n      if (group.is_income) {\n        return {\n          ...categoryGroupModel.toExternal(group),\n          received: value('total-income'),\n\n          categories: group.categories.map(cat => ({\n            ...categoryModel.toExternal(cat),\n            received: value(`sum-amount-${cat.id}`)\n          }))\n        };\n      }\n\n      return {\n        ...categoryGroupModel.toExternal(group),\n        budgeted: value(`group-budget-${group.id}`),\n        spent: value(`group-sum-amount-${group.id}`),\n        balance: value(`group-leftover-${group.id}`),\n\n        categories: group.categories.map(cat => ({\n          ...categoryModel.toExternal(cat),\n          budgeted: value(`budget-${cat.id}`),\n          spent: value(`sum-amount-${cat.id}`),\n          balance: value(`leftover-${cat.id}`),\n          carryover: value(`carryover-${cat.id}`)\n        }))\n      };\n    })\n  };\n};\n\nhandlers['api/budget-set-amount'] = withMutation(async function({\n  month,\n  categoryId,\n  amount\n}) {\n  return handlers['budget/budget-amount']({\n    month,\n    category: categoryId,\n    amount\n  });\n});\n\nhandlers['api/budget-set-carryover'] = withMutation(async function({\n  month,\n  categoryId,\n  flag\n}) {\n  await validateMonth(month);\n  await validateExpenseCategory('budget-set-carryover', categoryId);\n  return handlers['budget/set-carryover']({\n    startMonth: month,\n    category: categoryId,\n    flag\n  });\n});\n\nhandlers['api/transactions-export'] = async function({\n  transactions,\n  categoryGroups,\n  payees\n}) {\n  return handlers['transactions-export']({\n    transactions,\n    categoryGroups,\n    payees\n  });\n};\n\nhandlers['api/transactions-import'] = withMutation(async function({\n  accountId,\n  transactions\n}) {\n  return handlers['transactions-import']({ accountId, transactions });\n});\n\nhandlers['api/transactions-add'] = withMutation(async function({\n  accountId,\n  transactions\n}) {\n  await addTransactions(accountId, transactions, { runTransfers: false });\n  return 'ok';\n});\n\nhandlers['api/transactions-get'] = async function({\n  accountId,\n  startDate,\n  endDate\n}) {\n  let { data } = await aqlQuery(\n    q('transactions')\n      .filter({\n        $and: [\n          accountId && { account: accountId },\n          startDate && { date: { $gte: startDate } },\n          endDate && { date: { $lte: endDate } }\n        ].filter(Boolean)\n      })\n      .select('*')\n      .options({ splits: 'grouped' })\n  );\n  return data;\n};\n\nhandlers['api/transactions-filter'] = async function({ text, accountId }) {\n  throw new Error('`filterTransactions` is deprecated, use `runQuery` instead');\n};\n\nhandlers['api/transaction-update'] = withMutation(async function({\n  id,\n  fields\n}) {\n  let { data } = await aqlQuery(\n    q('transactions')\n      .filter({ id })\n      .select('*')\n      .options({ splits: 'grouped' })\n  );\n  let transactions = ungroupTransactions(data);\n\n  if (transactions.length === 0) {\n    return [];\n  }\n\n  let { diff } = updateTransaction(transactions, fields);\n  return handlers['transactions-batch-update'](diff);\n});\n\nhandlers['api/transaction-delete'] = withMutation(async function({ id }) {\n  let { data } = await aqlQuery(\n    q('transactions')\n      .filter({ id })\n      .select('*')\n      .options({ splits: 'grouped' })\n  );\n  let transactions = ungroupTransactions(data);\n\n  if (transactions.length === 0) {\n    return [];\n  }\n\n  let { diff } = deleteTransaction(transactions, id);\n  return handlers['transactions-batch-update'](diff);\n});\n\nhandlers['api/accounts-get'] = async function() {\n  let accounts = await db.getAccounts();\n  return accounts.map(account => accountModel.toExternal(account));\n};\n\nhandlers['api/account-create'] = withMutation(async function({\n  account,\n  initialBalance = null\n}) {\n  return handlers['account-create']({\n    name: account.name,\n    type: account.type,\n    offBudget: account.offbudget,\n    closed: account.closed,\n    // Current the API expects an amount but it really should expect\n    // an integer\n    balance: initialBalance != null ? integerToAmount(initialBalance) : null\n  });\n});\n\nhandlers['api/account-update'] = withMutation(async function({ id, fields }) {\n  return db.updateAccount({ id, ...accountModel.fromExternal(fields) });\n});\n\nhandlers['api/account-close'] = withMutation(async function({\n  id,\n  transferAccountId,\n  transferCategoryId\n}) {\n  return handlers['account-close']({\n    id,\n    transferAccountId,\n    categoryId: transferCategoryId\n  });\n});\n\nhandlers['api/account-reopen'] = withMutation(async function({ id }) {\n  return handlers['account-reopen']({ id });\n});\n\nhandlers['api/account-delete'] = withMutation(async function({ id }) {\n  return handlers['account-close']({ id, forced: true });\n});\n\nhandlers['api/categories-get'] = async function({ grouped } = {}) {\n  let result = await handlers['get-categories']();\n  return grouped\n    ? result.grouped.map(categoryGroupModel.toExternal)\n    : result.list.map(categoryModel.toExternal);\n};\n\nhandlers['api/category-group-create'] = withMutation(async function({ group }) {\n  return handlers['category-group-create']({ name: group.name });\n});\n\nhandlers['api/category-group-update'] = withMutation(async function({\n  id,\n  fields\n}) {\n  return handlers['category-group-update']({\n    id,\n    ...categoryGroupModel.fromExternal(fields)\n  });\n});\n\nhandlers['api/category-group-delete'] = withMutation(async function({\n  id,\n  transferCategoryId\n}) {\n  return handlers['category-group-delete']({\n    id,\n    transferId: transferCategoryId\n  });\n});\n\nhandlers['api/category-create'] = withMutation(async function({ category }) {\n  return handlers['category-create']({\n    name: category.name,\n    groupId: category.group_id,\n    isIncome: category.is_income\n  });\n});\n\nhandlers['api/category-update'] = withMutation(async function({ id, fields }) {\n  return handlers['category-update']({\n    id,\n    ...categoryModel.fromExternal(fields)\n  });\n});\n\nhandlers['api/category-delete'] = withMutation(async function({\n  id,\n  transferCategoryId\n}) {\n  return handlers['category-delete']({\n    id,\n    transferId: transferCategoryId\n  });\n});\n\nhandlers['api/payees-get'] = async function() {\n  let payees = await handlers['payees-get']();\n  return payees.map(payeeModel.toExternal);\n};\n\nhandlers['api/payee-create'] = withMutation(async function({ payee }) {\n  return handlers['payee-create']({ name: payee.name });\n});\n\nhandlers['api/payee-update'] = withMutation(async function({ id, fields }) {\n  return handlers['payees-batch-change']({\n    updated: [{ id, ...payeeModel.fromExternal(fields) }]\n  });\n});\n\nhandlers['api/payee-delete'] = withMutation(async function({ id }) {\n  return handlers['payees-batch-change']({ deleted: [{ id }] });\n});\n\nhandlers['api/payee-rules-get'] = async function({ payeeId }) {\n  let rules = await handlers['payees-get-rules']({ id: payeeId });\n  return rules.map(payeeRuleModel.toExternal);\n};\n\nhandlers['api/payee-rule-create'] = withMutation(async function({\n  payee_id,\n  rule\n}) {\n  return handlers['payees-add-rule']({\n    payee_id,\n    type: rule.type,\n    value: rule.value || null\n  });\n});\n\nhandlers['api/payee-rule-update'] = withMutation(async function({\n  id,\n  fields\n}) {\n  return handlers['payees-update-rule']({\n    id,\n    ...payeeRuleModel.fromExternal(fields)\n  });\n});\n\nhandlers['api/payee-rule-delete'] = withMutation(async function({ id }) {\n  return handlers['payees-delete-rule']({ id });\n});\n\nexport default function(serverHandlers) {\n  handlers = Object.assign({}, serverHandlers, handlers);\n  return handlers;\n}\n","import mitt from 'mitt';\nimport { captureException } from '../platform/exceptions';\n\n// This is a simple helper abstraction for defining methods exposed to\n// the client. It doesn't do much, but checks for naming conflicts and\n// makes it cleaner to combine methods. We call a group of related\n// methods an \"app\".\n\nclass App {\n  constructor() {\n    this.handlers = {};\n    this.services = [];\n    this.events = mitt();\n    this.unlistenServices = [];\n  }\n\n  method(name, func) {\n    if (this.handlers[name] != null) {\n      throw new Error(\n        'Conflicting method name, names must be globally unique: ' + name\n      );\n    }\n    this.handlers[name] = func;\n  }\n\n  service(func) {\n    this.services.push(func);\n  }\n\n  combine(...apps) {\n    for (let app of apps) {\n      Object.keys(app.handlers).forEach(name => {\n        this.method(name, app.handlers[name]);\n      });\n\n      app.services.forEach(service => {\n        this.service(service);\n      });\n\n      for (let [name, listeners] of app.events.all.entries()) {\n        for (let listener of listeners) {\n          this.events.on(name, listener);\n        }\n      }\n    }\n  }\n\n  startServices() {\n    if (this.unlistenServices.length > 0) {\n      captureException(\n        new Error(\n          'App: startServices called while services are already running'\n        )\n      );\n    }\n    this.unlistenServices = this.services.map(service => service());\n  }\n\n  stopServices() {\n    this.unlistenServices.forEach(unlisten => {\n      if (unlisten) {\n        unlisten();\n      }\n    });\n    this.unlistenServices = [];\n  }\n}\n\nexport function createApp() {\n  return new App();\n}\n","let _uid = 0;\nfunction resetUid() {\n  _uid = 0;\n}\n\nfunction uid(tableName) {\n  _uid++;\n  return tableName + _uid;\n}\n\nclass CompileError extends Error {}\n\nfunction nativeDateToInt(date) {\n  let pad = x => (x < 10 ? '0' : '') + x;\n  return date.getFullYear() + pad(date.getMonth() + 1) + pad(date.getDate());\n}\n\nfunction dateToInt(date) {\n  return parseInt(date.replace(/-/g, ''));\n}\n\nexport function addTombstone(schema, tableName, tableId, whereStr) {\n  let hasTombstone = schema[tableName].tombstone != null;\n  return hasTombstone ? `${whereStr} AND ${tableId}.tombstone = 0` : whereStr;\n}\n\nfunction popPath(path) {\n  let parts = path.split('.');\n  return { path: parts.slice(0, -1).join('.'), field: parts[parts.length - 1] };\n}\n\nfunction isKeyword(str) {\n  return str === 'group';\n}\n\nexport function quoteAlias(alias) {\n  return alias.indexOf('.') === -1 && !isKeyword(alias) ? alias : `\"${alias}\"`;\n}\n\nfunction typed(value, type, { literal = false } = {}) {\n  return { value, type, literal };\n}\n\nfunction getFieldDescription(schema, tableName, field) {\n  if (schema[tableName] == null) {\n    throw new CompileError(`Table \"${tableName}\" does not exist in the schema`);\n  }\n\n  let fieldDesc = schema[tableName][field];\n  if (fieldDesc == null) {\n    throw new CompileError(\n      `Field \"${field}\" does not exist in table \"${tableName}\"`\n    );\n  }\n  return fieldDesc;\n}\n\nfunction makePath(state, path) {\n  let { schema, paths } = state;\n\n  let parts = path.split('.');\n  if (parts.length < 2) {\n    throw new CompileError('Invalid path: ' + path);\n  }\n\n  let initialTable = parts[0];\n\n  let tableName = parts.slice(1).reduce((tableName, field) => {\n    let table = schema[tableName];\n\n    if (table == null) {\n      throw new CompileError(`Path error: ${tableName} table does not exist`);\n    }\n\n    if (!table[field] || table[field].ref == null) {\n      throw new CompileError(\n        `Field not joinable on table ${tableName}: \"${field}\"`\n      );\n    }\n\n    return table[field].ref;\n  }, initialTable);\n\n  let joinTable;\n  let parentParts = parts.slice(0, -1);\n  if (parentParts.length === 1) {\n    joinTable = parentParts[0];\n  } else {\n    let parentPath = parentParts.join('.');\n    let parentDesc = paths.get(parentPath);\n    if (!parentDesc) {\n      throw new CompileError('Path does not exist: ' + parentPath);\n    }\n    joinTable = parentDesc.tableId;\n  }\n\n  return {\n    tableName: tableName,\n    tableId: uid(tableName),\n    joinField: parts[parts.length - 1],\n    joinTable\n  };\n}\n\nfunction resolvePath(state, path) {\n  let paths = path.split('.');\n  let tableId;\n\n  paths = paths.reduce(\n    (acc, name) => {\n      let fullName = acc.context + '.' + name;\n      return {\n        context: fullName,\n        path: [...acc.path, fullName]\n      };\n    },\n    { context: state.implicitTableName, path: [] }\n  ).path;\n\n  paths.forEach(path => {\n    if (!state.paths.get(path)) {\n      state.paths.set(path, makePath(state, path));\n    }\n  });\n\n  let pathInfo = state.paths.get(paths[paths.length - 1]);\n  return pathInfo;\n}\n\nfunction transformField(state, name) {\n  if (typeof name !== 'string') {\n    throw new CompileError('Invalid field name, must be a string');\n  }\n\n  let { path, field } = popPath(name);\n\n  let pathInfo;\n  if (path === '') {\n    pathInfo = {\n      tableName: state.implicitTableName,\n      tableId: state.implicitTableId\n    };\n  } else {\n    pathInfo = resolvePath(state, path);\n  }\n\n  let fieldDesc = getFieldDescription(state.schema, pathInfo.tableName, field);\n\n  // If this is a field that references an item in another table, that\n  // item could have been deleted. If that's the case, we want to\n  // return `null` instead of an id pointing to a deleted item. This\n  // converts an id reference into a path that pulls the id through a\n  // table join which will filter out dead items, resulting in a\n  // `null` id if the item is deleted\n  if (\n    state.validateRefs &&\n    fieldDesc.ref &&\n    fieldDesc.type === 'id' &&\n    field !== 'id'\n  ) {\n    let refPath = state.implicitTableName + '.' + name;\n    let refPathInfo = state.paths.get(refPath);\n\n    if (!refPathInfo) {\n      refPathInfo = makePath(state, refPath);\n      refPathInfo.noMapping = true;\n      state.paths.set(refPath, refPathInfo);\n    }\n\n    field = 'id';\n    pathInfo = refPathInfo;\n  }\n\n  let fieldStr = pathInfo.tableId + '.' + field;\n  return typed(fieldStr, fieldDesc.type);\n}\n\nfunction parseDate(str) {\n  let m = str.match(/^(\\d{4}-\\d{2}-\\d{2})$/);\n  if (m) {\n    return typed(dateToInt(m[1]), 'date', { literal: true });\n  }\n  return null;\n}\n\nfunction parseMonth(str) {\n  let m = str.match(/^(\\d{4}-\\d{2})$/);\n  if (m) {\n    return typed(dateToInt(m[1]), 'date', { literal: true });\n  }\n  return null;\n}\n\nfunction parseYear(str) {\n  let m = str.match(/^(\\d{4})$/);\n  if (m) {\n    return typed(dateToInt(m[1]), 'date', { literal: true });\n  }\n  return null;\n}\n\nfunction badDateFormat(str, type) {\n  throw new CompileError(`Bad ${type} format: ${str}`);\n}\n\nfunction inferParam(param, type) {\n  let existingType = param.paramType;\n  if (existingType) {\n    let casts = {\n      date: ['string'],\n      'date-month': ['date'],\n      'date-year': ['date', 'date-month'],\n      id: ['string'],\n      float: ['integer']\n    };\n\n    if (\n      existingType !== type &&\n      (!casts[type] || !casts[type].includes(existingType))\n    ) {\n      throw new Error(\n        `Parameter \"${name}\" can't convert to ${type} (already inferred as ${existingType})`\n      );\n    }\n  } else {\n    param.paramType = type;\n  }\n}\n\nfunction castInput(state, expr, type) {\n  if (expr.type === type) {\n    return expr;\n  } else if (expr.type === 'param') {\n    inferParam(expr, type);\n    return typed(expr.value, type);\n  } else if (expr.type === 'null') {\n    if (!expr.literal) {\n      throw new CompileError(\"A non-literal null doesn't make sense\");\n    }\n\n    if (type === 'boolean') {\n      return typed(0, 'boolean', { literal: true });\n    }\n    return expr;\n  }\n\n  // These are all things that can be safely casted automatically\n  if (type === 'date') {\n    if (expr.type === 'string') {\n      if (expr.literal) {\n        return parseDate(expr.value) || badDateFormat(expr.value, 'date');\n      } else {\n        throw new CompileError(\n          'Casting string fields to dates is not supported'\n        );\n      }\n    }\n\n    throw new CompileError(`Can't cast ${expr.type} to date`);\n  } else if (type === 'date-month') {\n    let expr2;\n    if (expr.type === 'date') {\n      expr2 = expr;\n    } else if (expr.type === 'string' || expr.type === 'any') {\n      expr2 =\n        parseMonth(expr.value) ||\n        parseDate(expr.value) ||\n        badDateFormat(expr.value, 'date-month');\n    } else {\n      throw new CompileError(`Can't cast ${expr.type} to date-month`);\n    }\n\n    if (expr2.literal) {\n      return typed(\n        dateToInt(expr2.value.toString().slice(0, 6)),\n        'date-month',\n        { literal: true }\n      );\n    } else {\n      return typed(\n        `CAST(SUBSTR(${expr2.value}, 1, 6) AS integer)`,\n        'date-month'\n      );\n    }\n  } else if (type === 'date-year') {\n    let expr2;\n    if (expr.type === 'date' || expr.type === 'date-month') {\n      expr2 = expr;\n    } else if (expr.type === 'string') {\n      expr2 =\n        parseYear(expr.value) ||\n        parseMonth(expr.value) ||\n        parseDate(expr.value) ||\n        badDateFormat(expr.value, 'date-year');\n    } else {\n      throw new CompileError(`Can't cast ${expr.type} to date-year`);\n    }\n\n    if (expr2.literal) {\n      return typed(dateToInt(expr2.value.toString().slice(0, 4)), 'date-year', {\n        literal: true\n      });\n    } else {\n      return typed(\n        `CAST(SUBSTR(${expr2.value}, 1, 4) AS integer)`,\n        'date-year'\n      );\n    }\n  } else if (type === 'id') {\n    if (expr.type === 'string') {\n      return typed(expr.value, 'id', { literal: expr.literal });\n    }\n  } else if (type === 'float') {\n    if (expr.type === 'integer') {\n      return typed(expr.value, 'float', { literal: expr.literal });\n    }\n  }\n\n  if (expr.type === 'any') {\n    return typed(expr.value, type, { literal: expr.literal });\n  }\n\n  throw new CompileError(`Can't convert ${expr.type} to ${type}`);\n}\n\n// TODO: remove state from these functions\nfunction val(state, expr, type) {\n  let castedExpr = expr;\n\n  // Cast the type if necessary\n  if (type) {\n    castedExpr = castInput(state, expr, type);\n  }\n\n  if (castedExpr.literal) {\n    if (castedExpr.type === 'id') {\n      return `'${castedExpr.value}'`;\n    } else if (castedExpr.type === 'string') {\n      // Escape quotes\n      let value = castedExpr.value.replace(/'/g, \"''\");\n      return `'${value}'`;\n    }\n  }\n\n  return castedExpr.value;\n}\n\nfunction valArray(state, arr, types) {\n  return arr.map((value, idx) => val(state, value, types ? types[idx] : null));\n}\n\nfunction validateArgLength(arr, min, max) {\n  if (max == null) {\n    max = min;\n  }\n\n  if (min != null && arr.length < min) {\n    throw new CompileError('Too few arguments');\n  }\n  if (max != null && arr.length > max) {\n    throw new CompileError('Too many arguments');\n  }\n}\n\n//// Nice errors\n\nfunction saveStack(type, func) {\n  return (state, ...args) => {\n    if (state == null || state.compileStack == null) {\n      throw new CompileError(\n        'This function cannot track error data. ' +\n          'It needs to accept the compiler state as the first argument.'\n      );\n    }\n\n    state.compileStack.push({ type, args });\n    let ret = func(state, ...args);\n    state.compileStack.pop();\n    return ret;\n  };\n}\n\nfunction prettyValue(value) {\n  if (typeof value === 'string') {\n    return value;\n  } else if (value === undefined) {\n    return 'undefined';\n  }\n\n  let str = JSON.stringify(value);\n  if (str.length > 70) {\n    let expanded = JSON.stringify(value, null, 2);\n    return expanded.split('\\n').join('\\n  ');\n  }\n  return str;\n}\n\nfunction getCompileError(error, stack) {\n  if (stack.length === 0) {\n    return error;\n  }\n\n  let stackStr = stack\n    .slice(1)\n    .reverse()\n    .map(entry => {\n      switch (entry.type) {\n        case 'expr':\n        case 'function':\n          return prettyValue(entry.args[0]);\n        case 'op': {\n          let [fieldRef, opData] = entry.args;\n          return prettyValue({ [fieldRef]: opData });\n        }\n        case 'value':\n          return prettyValue(entry.value);\n        default:\n          return '';\n      }\n    })\n    .map(str => '\\n  ' + str)\n    .join('');\n\n  const rootMethod = stack[0].type;\n  const methodArgs = stack[0].args[0];\n  stackStr += `\\n  ${rootMethod}(${prettyValue(\n    methodArgs.length === 1 ? methodArgs[0] : methodArgs\n  )})`;\n\n  // In production, hide internal stack traces\n  if (process.env.NODE_ENV === 'production') {\n    const err = new CompileError();\n    err.message = `${error.message}\\n\\nExpression stack:` + stackStr;\n    err.stack = null;\n    return err;\n  }\n\n  error.message = `${error.message}\\n\\nExpression stack:` + stackStr;\n  return error;\n}\n\n//// Compiler\n\nfunction compileLiteral(value) {\n  if (value === undefined) {\n    throw new CompileError('`undefined` is not a valid query value');\n  } else if (value === null) {\n    return typed('NULL', 'null', { literal: true });\n  } else if (value instanceof Date) {\n    return typed(nativeDateToInt(value), 'date', { literal: true });\n  } else if (typeof value === 'string') {\n    // Allow user to escape $, and quote the string to make it a\n    // string literal in the output\n    value = value.replace(/\\\\\\$/g, '$');\n    return typed(value, 'string', { literal: true });\n  } else if (typeof value === 'boolean') {\n    return typed(value ? 1 : 0, 'boolean', { literal: true });\n  } else if (typeof value === 'number') {\n    return typed(value, (value | 0) === value ? 'integer' : 'float', {\n      literal: true\n    });\n  } else if (Array.isArray(value)) {\n    return typed(value, 'array', { literal: true });\n  } else {\n    throw new CompileError(\n      'Unsupported type of expression: ' + JSON.stringify(value)\n    );\n  }\n}\n\nconst compileExpr = saveStack('expr', (state, expr) => {\n  if (typeof expr === 'string') {\n    // Field reference\n    if (expr[0] === '$') {\n      let fieldRef = expr === '$' ? state.implicitField : expr.slice(1);\n\n      if (fieldRef == null || fieldRef === '') {\n        throw new CompileError('Invalid field reference: ' + expr);\n      }\n\n      return transformField(state, fieldRef);\n    }\n\n    // Named parameter\n    if (expr[0] === ':') {\n      let param = { value: '?', type: 'param', paramName: expr.slice(1) };\n      state.namedParameters.push(param);\n      return param;\n    }\n  }\n\n  if (expr !== null) {\n    if (Array.isArray(expr)) {\n      return compileLiteral(expr);\n    } else if (\n      typeof expr === 'object' &&\n      Object.keys(expr).find(k => k[0] === '$')\n    ) {\n      // It's a function call\n      return compileFunction(state, expr);\n    }\n  }\n\n  return compileLiteral(expr);\n});\n\nfunction assertType(name, data, acceptedTypes) {\n  if (acceptedTypes.indexOf(data.type) === -1) {\n    throw new CompileError(\n      `Invalid type of expression to ${name}, must be one of ${JSON.stringify(\n        acceptedTypes\n      )}: ${JSON.stringify(data.value)}`\n    );\n  }\n}\n\nfunction assertArgLength(name, args, len) {\n  if (args.length !== len) {\n    throw new CompileError(\n      `Invalid number of args to ${name}: expected ${len} but received ${args.length}`\n    )();\n  }\n}\n\nconst compileFunction = saveStack('function', (state, func) => {\n  let [name] = Object.keys(func);\n  let argExprs = func[name];\n  if (!Array.isArray(argExprs)) {\n    argExprs = [argExprs];\n  }\n\n  if (name[0] !== '$') {\n    throw new CompileError(\n      `Unknown property \"${name}\". Did you mean to call a function? Try prefixing it with $`\n    );\n  }\n\n  let args = argExprs;\n  // `$condition` is a special-case where it will be evaluated later\n  if (name !== '$condition') {\n    args = argExprs.map(arg => compileExpr(state, arg));\n  }\n\n  switch (name) {\n    // aggregate functions\n    case '$sum': {\n      validateArgLength(args, 1);\n      let [arg1] = valArray(state, args, ['float']);\n      return typed(`SUM(${arg1})`, args[0].type);\n    }\n\n    case '$sumOver': {\n      let [arg1] = valArray(state, args, ['float']);\n      let order = state.orders\n        ? 'ORDER BY ' + compileOrderBy(state, state.orders)\n        : '';\n\n      return typed(\n        `(SUM(${arg1}) OVER (${order} ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING))`,\n        args[0].type\n      );\n    }\n\n    case '$count': {\n      validateArgLength(args, 1);\n      let [arg1] = valArray(state, args);\n      return typed(`COUNT(${arg1})`, 'integer');\n    }\n\n    // string functions\n    case '$substr': {\n      validateArgLength(args, 2, 3);\n      let [arg1, arg2, arg3] = valArray(state, args, [\n        'string',\n        'integer',\n        'integer'\n      ]);\n      return typed(`SUBSTR(${arg1}, ${arg2}, ${arg3})`, 'string');\n    }\n    case '$lower': {\n      validateArgLength(args, 1);\n      let [arg1] = valArray(state, args, ['string']);\n      return typed(`LOWER(${arg1})`, 'string');\n    }\n\n    // integer/float functions\n    case '$neg': {\n      validateArgLength(args, 1);\n      let [arg1] = valArray(state, args, ['float']);\n      return typed(`(-${val(state, args[0])})`, args[0].type);\n    }\n    case '$abs': {\n      validateArgLength(args, 1);\n      let [arg1] = valArray(state, args, ['float']);\n      return typed(`ABS(${val(state, args[0])})`, args[0].type);\n    }\n    case '$idiv': {\n      validateArgLength(args, 2);\n      let [arg1, arg2] = valArray(state, args, ['integer', 'integer']);\n      return typed(\n        `(${val(state, args[0])} / ${val(state, args[1])})`,\n        args[0].type\n      );\n    }\n\n    // date functions\n    case '$month': {\n      validateArgLength(args, 1);\n      return castInput(state, args[0], 'date-month');\n    }\n    case '$year': {\n      validateArgLength(args, 1);\n      return castInput(state, args[0], 'date-year');\n    }\n\n    // various functions\n    case '$condition':\n      validateArgLength(args, 1);\n      let conds = compileConditions(state, args[0]);\n      return typed(conds.join(' AND '), 'boolean');\n\n    case '$nocase':\n      validateArgLength(args, 1);\n      let [arg1] = valArray(state, args, ['string']);\n      return typed(`${arg1} COLLATE NOCASE`, args[0].type);\n\n    case '$literal': {\n      validateArgLength(args, 1);\n      if (!args[0].literal) {\n        throw new CompileError('Literal not passed to $literal');\n      }\n      return args[0];\n    }\n    default:\n      throw new CompileError(`Unknown function: ${name}`);\n  }\n});\n\nconst compileOp = saveStack('op', (state, fieldRef, opData) => {\n  let { $transform, ...opExpr } = opData;\n  let [op] = Object.keys(opExpr);\n\n  let rhs = compileExpr(state, opData[op]);\n\n  let lhs;\n  if ($transform) {\n    lhs = compileFunction(\n      { ...state, implicitField: fieldRef },\n      typeof $transform === 'string' ? { [$transform]: '$' } : $transform\n    );\n  } else {\n    lhs = compileExpr(state, '$' + fieldRef);\n  }\n\n  switch (op) {\n    case '$gte': {\n      let [left, right] = valArray(state, [lhs, rhs], [null, lhs.type]);\n      return `${left} >= ${right}`;\n    }\n    case '$lte': {\n      let [left, right] = valArray(state, [lhs, rhs], [null, lhs.type]);\n      return `${left} <= ${right}`;\n    }\n    case '$gt': {\n      let [left, right] = valArray(state, [lhs, rhs], [null, lhs.type]);\n      return `${left} > ${right}`;\n    }\n    case '$lt': {\n      let [left, right] = valArray(state, [lhs, rhs], [null, lhs.type]);\n      return `${left} < ${right}`;\n    }\n    case '$eq': {\n      if (castInput(state, rhs, lhs.type).type === 'null') {\n        return `${val(state, lhs)} IS NULL`;\n      }\n\n      let [left, right] = valArray(state, [lhs, rhs], [null, lhs.type]);\n\n      if (rhs.type === 'param') {\n        let orders = state.namedParameters.map(param => {\n          return param === rhs || param === lhs ? [param, { ...param }] : param;\n        });\n        state.namedParameters = [].concat.apply([], orders);\n\n        return `CASE\n          WHEN ${left} IS NULL THEN ${right} IS NULL\n          ELSE ${left} = ${right}\n        END`;\n      }\n\n      return `${left} = ${right}`;\n    }\n    case '$oneof': {\n      let [left, right] = valArray(state, [lhs, rhs], [null, 'array']);\n      // Dedupe the ids\n      let ids = [...new Set(right)];\n      return `${left} IN (` + ids.map(id => `'${id}'`).join(',') + ')';\n    }\n    case '$like': {\n      let [left, right] = valArray(state, [lhs, rhs], ['string', 'string']);\n      return `${left} LIKE ${right}`;\n    }\n    default:\n      throw new CompileError(`Unknown operator: ${op}`);\n  }\n});\n\nfunction compileConditions(state, conds) {\n  if (!Array.isArray(conds)) {\n    // Convert the object form `{foo: 1, bar:2}` into the array form\n    // `[{foo: 1}, {bar:2}]`\n    conds = Object.entries(conds).map(cond => {\n      return { [cond[0]]: cond[1] };\n    });\n  }\n\n  return conds.filter(Boolean).reduce((res, condsObj) => {\n    let compiled = Object.entries(condsObj)\n      .map(([field, cond]) => {\n        // Allow a falsy value in the lhs of $and and $or to allow for\n        // quick forms like `$or: amount != 0 && ...`\n        if (field === '$and') {\n          if (!cond) {\n            return null;\n          }\n          return compileAnd(state, cond);\n        } else if (field === '$or') {\n          if (!cond) {\n            return null;\n          }\n          return compileOr(state, cond);\n        }\n\n        if (\n          typeof cond === 'string' ||\n          typeof cond === 'number' ||\n          typeof cond === 'boolean' ||\n          cond instanceof Date ||\n          cond == null\n        ) {\n          return compileOp(state, field, { $eq: cond });\n        }\n\n        if (Array.isArray(cond)) {\n          // An array of conditions for a field is implicitly an `and`\n          return cond.map(c => compileOp(state, field, c)).join(' AND ');\n        }\n        return compileOp(state, field, cond);\n      })\n      .filter(Boolean);\n\n    return [...res, ...compiled];\n  }, []);\n}\n\nfunction compileOr(state, conds) {\n  // Same as above\n  if (!conds) {\n    return '0';\n  }\n  let res = compileConditions(state, conds);\n  if (res.length === 0) {\n    return '0';\n  }\n  return '(' + res.join('\\n  OR ') + ')';\n}\n\nfunction compileAnd(state, conds) {\n  // Same as above\n  if (!conds) {\n    return '1';\n  }\n  let res = compileConditions(state, conds);\n  if (res.length === 0) {\n    return '1';\n  }\n  return '(' + res.join('\\n  AND ') + ')';\n}\n\nconst compileWhere = saveStack('filter', (state, conds) => {\n  return compileAnd(state, conds);\n});\n\nfunction compileJoins(state, tableRef, internalTableFilters) {\n  let joins = [];\n  state.paths.forEach((desc, path) => {\n    let {\n      tableName,\n      tableId,\n      joinField,\n      joinTable,\n      noMapping\n    } = state.paths.get(path);\n\n    let on = `${tableId}.id = ${tableRef(joinTable)}.${quoteAlias(joinField)}`;\n\n    let filters = internalTableFilters(tableName);\n    if (filters.length > 0) {\n      on +=\n        ' AND ' +\n        compileAnd(\n          { ...state, implicitTableName: tableName, implicitTableId: tableId },\n          filters\n        );\n    }\n\n    joins.push(\n      `LEFT JOIN ${\n        noMapping ? tableName : tableRef(tableName, true)\n      } ${tableId} ON ${addTombstone(state.schema, tableName, tableId, on)}`\n    );\n\n    if (state.dependencies.indexOf(tableName) === -1) {\n      state.dependencies.push(tableName);\n    }\n  });\n  return joins.join('\\n');\n}\n\nfunction expandStar(state, expr) {\n  let path;\n  let pathInfo;\n  if (expr === '*') {\n    pathInfo = {\n      tableName: state.implicitTableName,\n      tableId: state.implicitTableId\n    };\n  } else if (expr.match(/\\.\\*$/)) {\n    let result = popPath(expr);\n    path = result.path;\n    pathInfo = resolvePath(state, result.path);\n  }\n\n  let table = state.schema[pathInfo.tableName];\n  if (table == null) {\n    throw new Error(`Table \"${pathInfo.tableName}\" does not exist`);\n  }\n\n  return Object.keys(table).map(field => (path ? `${path}.${field}` : field));\n}\n\nconst compileSelect = saveStack(\n  'select',\n  (state, exprs, isAggregate, orders) => {\n    // Always include the id if it's not an aggregate\n    if (!isAggregate && !exprs.includes('id') && !exprs.includes('*')) {\n      exprs = exprs.concat(['id']);\n    }\n\n    let select = exprs.map(expr => {\n      if (typeof expr === 'string') {\n        if (expr.indexOf('*') !== -1) {\n          let fields = expandStar(state, expr);\n\n          return fields\n            .map(field => {\n              let compiled = compileExpr(state, '$' + field);\n              state.outputTypes.set(field, compiled.type);\n              return compiled.value + ' AS ' + quoteAlias(field);\n            })\n            .join(', ');\n        }\n\n        let compiled = compileExpr(state, '$' + expr);\n        state.outputTypes.set(expr, compiled.type);\n        return compiled.value + ' AS ' + quoteAlias(expr);\n      }\n\n      let [name, value] = Object.entries(expr)[0];\n      if (name[0] === '$') {\n        state.compileStack.push({ type: 'value', value: expr });\n        throw new CompileError(\n          `Invalid field \"${name}\", are you trying to select a function? You need to name the expression`\n        );\n      }\n\n      if (typeof value === 'string') {\n        let compiled = compileExpr(state, '$' + value);\n        state.outputTypes.set(name, compiled.type);\n        return `${compiled.value} AS ${quoteAlias(name)}`;\n      }\n\n      let compiled = compileFunction({ ...state, orders }, value);\n      state.outputTypes.set(name, compiled.type);\n      return compiled.value + ` AS ${quoteAlias(name)}`;\n    });\n\n    return select.join(', ');\n  }\n);\n\nconst compileGroupBy = saveStack('groupBy', (state, exprs) => {\n  let groupBy = exprs.map(expr => {\n    if (typeof expr === 'string') {\n      return compileExpr(state, '$' + expr).value;\n    }\n\n    return compileFunction(state, expr).value;\n  });\n\n  return groupBy.join(', ');\n});\n\nconst compileOrderBy = saveStack('orderBy', (state, exprs) => {\n  let orderBy = exprs.map(expr => {\n    let compiled;\n    let dir = null;\n\n    if (typeof expr === 'string') {\n      compiled = compileExpr(state, '$' + expr).value;\n    } else {\n      let entries = Object.entries(expr);\n      let entry = entries[0];\n\n      // Check if this is a field reference\n      if (entries.length === 1 && entry[0][0] !== '$') {\n        dir = entry[1];\n        compiled = compileExpr(state, '$' + entry[0]).value;\n      } else {\n        // Otherwise it's a function\n        let { $dir, ...func } = expr;\n        dir = $dir;\n        compiled = compileFunction(state, func).value;\n      }\n    }\n\n    if (dir != null) {\n      if (dir !== 'desc' && dir !== 'asc') {\n        throw new CompileError('Invalid order direction: ' + dir);\n      }\n      return `${compiled} ${dir}`;\n    }\n    return compiled;\n  });\n\n  return orderBy.join(', ');\n});\n\nlet AGGREGATE_FUNCTIONS = ['$sum', '$count'];\nfunction isAggregateFunction(expr) {\n  if (typeof expr !== 'object' || Array.isArray(expr)) {\n    return false;\n  }\n\n  let [name, argExprs] = Object.entries(expr)[0];\n  if (!Array.isArray(argExprs)) {\n    argExprs = [argExprs];\n  }\n\n  if (AGGREGATE_FUNCTIONS.indexOf(name) !== -1) {\n    return true;\n  }\n\n  return argExprs.find(ex => isAggregateFunction(ex));\n}\n\nexport function isAggregateQuery(queryState) {\n  // it's aggregate if:\n  // either an aggregate function is used in `select`\n  // or a `groupBy` exists\n\n  if (queryState.groupExpressions.length > 0) {\n    return true;\n  }\n\n  return queryState.selectExpressions.find(expr => {\n    if (typeof expr !== 'string') {\n      let [name, value] = Object.entries(expr)[0];\n      return isAggregateFunction(value);\n    }\n    return false;\n  });\n}\n\nexport function compileQuery(queryState, schema, schemaConfig = {}) {\n  let { withDead, validateRefs = true, tableOptions, rawMode } = queryState;\n\n  let {\n    tableViews = {},\n    tableFilters = name => [],\n    customizeQuery = queryState => queryState\n  } = schemaConfig;\n\n  let internalTableFilters = name => {\n    let filters = tableFilters(name);\n    // These filters cannot join tables and must be simple strings\n    for (let filter of filters) {\n      if (Array.isArray(filter)) {\n        throw new CompileError(\n          'Invalid internal table filter: only object filters are supported'\n        );\n      }\n      if (Object.keys(filter)[0].indexOf('.') !== -1) {\n        throw new CompileError(\n          'Invalid internal table filter: field names cannot contain paths'\n        );\n      }\n    }\n    return filters;\n  };\n\n  let tableRef = (name, isJoin) => {\n    let view =\n      typeof tableViews === 'function'\n        ? tableViews(name, { withDead, isJoin, tableOptions })\n        : tableViews[name];\n    return view || name;\n  };\n\n  let tableName = queryState.table;\n\n  let {\n    filterExpressions,\n    selectExpressions,\n    groupExpressions,\n    orderExpressions,\n    limit,\n    offset,\n    calculation\n  } = customizeQuery(queryState);\n\n  let select = '';\n  let where = '';\n  let joins = '';\n  let groupBy = '';\n  let orderBy = '';\n  let dependences = [];\n  let state = {\n    schema,\n    implicitTableName: tableName,\n    implicitTableId: tableRef(tableName),\n    paths: new Map(),\n    dependencies: [tableName],\n    compileStack: [],\n    outputTypes: new Map(),\n    validateRefs,\n    namedParameters: []\n  };\n\n  resetUid();\n\n  try {\n    select = compileSelect(\n      state,\n      selectExpressions,\n      isAggregateQuery(queryState),\n      orderExpressions\n    );\n\n    if (filterExpressions.length > 0) {\n      let result = compileWhere(state, filterExpressions);\n      where = 'WHERE ' + result;\n    } else {\n      where = 'WHERE 1';\n    }\n\n    if (!rawMode) {\n      let filters = internalTableFilters(tableName);\n      if (filters.length > 0) {\n        where += ' AND ' + compileAnd(state, filters);\n      }\n    }\n\n    if (groupExpressions.length > 0) {\n      let result = compileGroupBy(state, groupExpressions);\n      groupBy = 'GROUP BY ' + result;\n    }\n\n    // Orders don't matter if doing a single calculation\n    if (orderExpressions.length > 0) {\n      let result = compileOrderBy(state, orderExpressions);\n      orderBy = 'ORDER BY ' + result;\n    }\n\n    if (state.paths.size > 0) {\n      joins = compileJoins(state, tableRef, internalTableFilters);\n    }\n  } catch (e) {\n    if (e instanceof CompileError) {\n      throw getCompileError(e, state.compileStack);\n    }\n\n    throw e;\n  }\n\n  let sqlPieces = {\n    select,\n    from: tableRef(tableName),\n    joins,\n    where,\n    groupBy,\n    orderBy,\n    limit,\n    offset\n  };\n\n  return {\n    sqlPieces,\n    state\n  };\n}\n\nexport function defaultConstructQuery(queryState, state, sqlPieces) {\n  let s = sqlPieces;\n\n  let where = queryState.withDead\n    ? s.where\n    : addTombstone(\n        state.schema,\n        state.implicitTableName,\n        state.implicitTableId,\n        s.where\n      );\n\n  return `\n    SELECT ${s.select} FROM ${s.from}\n    ${s.joins}\n    ${where}\n    ${s.groupBy}\n    ${s.orderBy}\n    ${s.limit != null ? `LIMIT ${s.limit}` : ''}\n    ${s.offset != null ? `OFFSET ${s.offset}` : ''}\n  `;\n}\n\nexport function generateSQLWithState(queryState, schema, schemaConfig) {\n  let { sqlPieces, state } = compileQuery(queryState, schema, schemaConfig);\n  return { sql: defaultConstructQuery(queryState, state, sqlPieces), state };\n}\n\nexport function generateSQL(queryState) {\n  return generateSQLWithState(queryState).sql;\n}\n","import * as db from '../db';\nimport { compileQuery, defaultConstructQuery } from './compiler';\nimport { convertInputType, convertOutputType } from './schema-helpers';\n\n// TODO (compiler):\n// * Properly safeguard all inputs against SQL injection\n// * Functions for incr/decr dates\n// * Support HAVING\n// * Allow creating in-memory tables to run queries against static\n//   data\n// * For aggregate functions on selected ids, manually implement\n//   them only only support a specific few (sum amount / etc)\n// * Select expressions should be evaluated first, and added to a\n//   global \"field lookup\" table that other filter/groupBy/etc\n//   expressions can reference\n\nfunction applyTypes(data, outputTypes) {\n  for (let i = 0; i < data.length; i++) {\n    let item = data[i];\n    Object.keys(item).forEach(name => {\n      item[name] = convertOutputType(item[name], outputTypes.get(name));\n    });\n  }\n}\n\nexport async function execQuery(\n  queryState,\n  state,\n  sqlPieces,\n  params,\n  outputTypes\n) {\n  let sql = defaultConstructQuery(queryState, state, sqlPieces);\n  let data = await db.all(sql, params);\n  applyTypes(data, outputTypes);\n  return data;\n}\n\nexport async function runCompiledQuery(\n  query,\n  pieces,\n  state,\n  { params = {}, executors = {} } = {}\n) {\n  let paramArray = state.namedParameters.map(param => {\n    let name = param.paramName;\n    if (params[name] === undefined) {\n      throw new Error(`Parameter ${name} not provided to query`);\n    }\n    return convertInputType(params[name], param.paramType);\n  });\n\n  let data;\n  if (executors[state.implicitTableName]) {\n    data = await executors[state.implicitTableName](\n      state,\n      query,\n      pieces,\n      paramArray,\n      state.outputTypes\n    );\n  } else {\n    data = await execQuery(query, state, pieces, paramArray, state.outputTypes);\n  }\n\n  if (query.calculation) {\n    if (data.length > 0) {\n      let row = data[0];\n      let k = Object.keys(row)[0];\n      // TODO: the function being run should be the one to\n      // determine the default value, not hardcoded as 0\n      data = row[k] || 0;\n    } else {\n      data = null;\n    }\n  }\n  return data;\n}\n\nexport async function runQuery(schema, schemaConfig, query, options) {\n  let { sqlPieces, state } = compileQuery(query, schema, schemaConfig);\n  let data = await runCompiledQuery(query, sqlPieces, state, options);\n  return { data, dependencies: state.dependencies };\n}\n","import { toDateRepr, fromDateRepr } from '../models';\nimport { dayFromDate } from '../../shared/months';\n\nfunction isRequired(name, fieldDesc) {\n  return fieldDesc.required || name === 'id';\n}\n\n// TODO: All of the data type needs to check the input value. This\n// doesn't just convert, it casts. See integer handling.\nexport function convertInputType(value, type) {\n  if (value === undefined) {\n    throw new Error('Query value cannot be undefined');\n  } else if (value === null) {\n    if (type === 'boolean') {\n      return 0;\n    }\n\n    return null;\n  }\n\n  switch (type) {\n    case 'date':\n      if (value instanceof Date) {\n        return toDateRepr(dayFromDate(value));\n      } else if (\n        value.match(/^\\d{4}-\\d{2}-\\d{2}$/) == null ||\n        value.date < '2000-01-01'\n      ) {\n        throw new Error('Invalid date: ' + value);\n      }\n\n      return toDateRepr(value);\n    case 'date-month':\n      return toDateRepr(value.slice(0, 7));\n    case 'date-year':\n      return toDateRepr(value.slice(0, 4));\n    case 'boolean':\n      return value ? 1 : 0;\n    case 'id':\n      if (typeof value !== 'string' && value !== null) {\n        throw new Error('Invalid id, must be string: ' + value);\n      }\n      return value;\n    case 'integer':\n      if (typeof value === 'number' && (value | 0) === value) {\n        return value;\n      } else {\n        throw new Error(\"Can't convert to integer: \" + JSON.stringify(value));\n      }\n    case 'json':\n      return JSON.stringify(value);\n    default:\n  }\n  return value;\n}\n\nexport function convertOutputType(value, type) {\n  if (value === null) {\n    if (type === 'boolean') {\n      return false;\n    }\n    return null;\n  }\n\n  switch (type) {\n    case 'date':\n      return fromDateRepr(value);\n    case 'date-month':\n      return fromDateRepr(value).slice(0, 7);\n    case 'date-year':\n      return fromDateRepr(value).slice(0, 4);\n    case 'boolean':\n      return value === 1;\n    case 'json':\n    case 'json/fallback':\n      try {\n        return JSON.parse(value);\n      } catch (e) {\n        return type === 'json/fallback' ? value : null;\n      }\n    default:\n  }\n\n  return value;\n}\n\nexport function conform(schema, schemaConfig, table, obj, { skipNull } = {}) {\n  let tableSchema = schema[table];\n  if (tableSchema == null) {\n    throw new Error(`Table \"${table}\" does not exist`);\n  }\n\n  let views = schemaConfig.views || {};\n\n  // Rename fields if necessary\n  let fieldRef = field => {\n    if (views[table] && views[table].fields) {\n      return views[table].fields[field] || field;\n    }\n    return field;\n  };\n\n  return Object.fromEntries(\n    Object.keys(obj)\n      .map(field => {\n        // Fields that start with an underscore are ignored\n        if (field[0] === '_') {\n          return null;\n        }\n\n        let fieldDesc = tableSchema[field];\n        if (fieldDesc == null) {\n          throw new Error(\n            `Field \"${field}\" does not exist on table ${table}: ${JSON.stringify(\n              obj\n            )}`\n          );\n        }\n\n        if (isRequired(field, fieldDesc) && obj[field] == null) {\n          throw new Error(\n            `\"${field}\" is required for table \"${table}\": ${JSON.stringify(\n              obj\n            )}`\n          );\n        }\n\n        // This option removes null values (see `convertForInsert`)\n        if (skipNull && obj[field] == null) {\n          return null;\n        }\n\n        return [fieldRef(field), convertInputType(obj[field], fieldDesc.type)];\n      })\n      .filter(Boolean)\n  );\n}\n\nexport function convertForInsert(schema, schemaConfig, table, rawObj) {\n  let obj = { ...rawObj };\n\n  let tableSchema = schema[table];\n  if (tableSchema == null) {\n    throw new Error(`Error inserting: table \"${table}\" does not exist`);\n  }\n\n  // Inserting checks all the fields in the table and adds any default\n  // values necessary\n  Object.keys(tableSchema).forEach(field => {\n    let fieldDesc = tableSchema[field];\n\n    if (obj[field] == null) {\n      if (fieldDesc.default !== undefined) {\n        obj[field] =\n          typeof fieldDesc.default === 'function'\n            ? fieldDesc.default()\n            : fieldDesc.default;\n      } else if (isRequired(field, fieldDesc)) {\n        // Although this check is also done in `conform`, it only\n        // checks the fields in `obj`. For insert, we need to do it\n        // here to check that all required fields in the table exist\n        throw new Error(\n          `\"${field}\" is required for table \"${table}\": ${JSON.stringify(obj)}`\n        );\n      }\n    }\n  });\n\n  // We use `skipNull` to remove any null values. There's no need to\n  // set those when inserting, that will be the default and it reduces\n  // the amount of messages generated to sync\n  return conform(schema, schemaConfig, table, obj, { skipNull: true });\n}\n\nexport function convertForUpdate(schema, schemaConfig, table, rawObj) {\n  let obj = { ...rawObj };\n\n  let tableSchema = schema[table];\n  if (tableSchema == null) {\n    throw new Error(`Error updating: table \"${table}\" does not exist`);\n  }\n\n  return conform(schema, schemaConfig, table, obj);\n}\n\nexport function convertFromSelect(schema, schemaConfig, table, obj) {\n  let tableSchema = schema[table];\n  if (tableSchema == null) {\n    throw new Error(`Table \"${table}\" does not exist`);\n  }\n\n  let fields = Object.keys(tableSchema);\n  let result = {};\n  for (let i = 0; i < fields.length; i++) {\n    let fieldName = fields[i];\n    let fieldDesc = tableSchema[fieldName];\n\n    result[fieldName] = convertOutputType(obj[fieldName], fieldDesc.type);\n  }\n  return result;\n}\n","import * as db from '../../db';\nimport { whereIn } from '../../db/util';\nimport { groupBy } from '../../../shared/util';\nimport { isAggregateQuery } from '../compiler';\nimport { convertOutputType } from '../schema-helpers';\nimport { execQuery } from '../exec';\n\n// Transactions executor\n\nexport function toGroup(parents, children, mapper = x => x) {\n  return parents.reduce((list, parent) => {\n    let childs = children.get(parent.id) || [];\n    list.push({\n      ...mapper(parent),\n      subtransactions: childs.map(mapper)\n    });\n    return list;\n  }, []);\n}\n\n// These two queries will return very different things:\n//\n// q('transactions').select({ $count: 'id' })\n// q('transactions', { splits: \"grouped\" }).select({ $count: 'id' })\n//\n// The first will return the count of non-split and child\n// transactions, and the second will return the count of all parent\n// (or non-split) transactions\n\nfunction execTransactions(state, query, sql, params, outputTypes) {\n  let tableOptions = query.tableOptions || {};\n  let splitType = tableOptions.splits || 'inline';\n\n  if (['all', 'inline', 'none', 'grouped'].indexOf(splitType) === -1) {\n    throw new Error(`Invalid \"splits\" option for transactions: \"${splitType}\"`);\n  }\n\n  if (splitType === 'all' || splitType === 'inline' || splitType === 'none') {\n    return execTransactionsBasic(\n      state,\n      query,\n      sql,\n      params,\n      splitType,\n      outputTypes\n    );\n  } else if (splitType === 'grouped') {\n    return execTransactionsGrouped(\n      state,\n      query,\n      sql,\n      params,\n      splitType,\n      outputTypes\n    );\n  }\n}\n\nfunction _isUnhappy(filter) {\n  // These fields can be filtered - all split transactions will\n  // still be returned regardless\n  for (let key of Object.keys(filter)) {\n    if (key === '$or' || key === '$and') {\n      if (filter[key] && _isUnhappy(filter[key])) {\n        return true;\n      }\n    } else if (!(key.indexOf('account') === 0 || key === 'date')) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function isHappyPathQuery(queryState) {\n  return queryState.filterExpressions.find(_isUnhappy) == null;\n}\n\nasync function execTransactionsGrouped(\n  state,\n  queryState,\n  sql,\n  params,\n  splitType,\n  outputTypes\n) {\n  let { table: tableName, withDead } = queryState;\n  let whereDead = withDead ? '' : `AND ${sql.from}.tombstone = 0`;\n\n  if (isAggregateQuery(queryState)) {\n    let allSql = `\n      SELECT ${sql.select}\n      FROM ${sql.from}\n      ${sql.joins}\n      ${sql.where} AND is_parent = 0 ${whereDead}\n      ${sql.groupBy}\n      ${sql.orderBy}\n      ${sql.limit != null ? `LIMIT ${sql.limit}` : ''}\n      ${sql.offset != null ? `OFFSET ${sql.offset}` : ''}\n    `;\n    return db.all(allSql);\n  }\n\n  let rows;\n  let matched = null;\n\n  if (isHappyPathQuery(queryState)) {\n    // This is just an optimization - we can just filter out children\n    // directly and only list parents\n    let rowSql = `\n      SELECT ${sql.from}.id as group_id\n      FROM ${sql.from}\n      ${sql.joins}\n      ${sql.where} AND is_child = 0 ${whereDead}\n      ${sql.orderBy}\n      ${sql.limit != null ? `LIMIT ${sql.limit}` : ''}\n      ${sql.offset != null ? `OFFSET ${sql.offset}` : ''}\n    `;\n    rows = await db.all(rowSql, params);\n  } else {\n    // TODO: phew, what a doozy. write docs why it works this way\n    //\n    // prettier-ignore\n    let rowSql = `\n      SELECT group_id, matched FROM (\n        SELECT\n          group_id,\n          GROUP_CONCAT(id) as matched\n          FROM (\n            SELECT ${sql.from}.id, IFNULL(${sql.from}.parent_id, ${sql.from}.id) as group_id\n            FROM ${sql.from}\n            LEFT JOIN transactions _t2 ON ${sql.from}.is_child = 1 AND _t2.id = ${sql.from}.parent_id\n            ${sql.joins}\n            ${sql.where} AND ${sql.from}.tombstone = 0 AND IFNULL(_t2.tombstone, 0) = 0\n          )\n        GROUP BY group_id\n      )\n      LEFT JOIN ${sql.from} ON ${sql.from}.id = group_id\n      ${sql.joins}\n      ${sql.orderBy}\n      ${sql.limit != null ? `LIMIT ${sql.limit}` : ''}\n      ${sql.offset != null ? `OFFSET ${sql.offset}` : ''}\n    `;\n\n    rows = await db.all(rowSql, params);\n    matched = new Set(\n      [].concat.apply([], rows.map(row => row.matched.split(',')))\n    );\n  }\n\n  let where = whereIn(\n    rows.map(row => row.group_id),\n    `IFNULL(${sql.from}.parent_id, ${sql.from}.id)`\n  );\n  let finalSql = `\n    SELECT ${sql.select}, parent_id AS _parent_id FROM ${sql.from}\n    ${sql.joins}\n    WHERE ${where} ${whereDead}\n    ${sql.orderBy}\n  `;\n\n  let start = Date.now();\n  let allRows = await db.all(finalSql);\n\n  // Group the parents and children up\n  let { parents, children } = allRows.reduce(\n    (acc, trans) => {\n      let pid = trans._parent_id;\n      delete trans._parent_id;\n\n      if (pid == null) {\n        acc.parents.push(trans);\n      } else {\n        let arr = acc.children.get(pid) || [];\n        arr.push(trans);\n        acc.children.set(pid, arr);\n      }\n      return acc;\n    },\n    { parents: [], children: new Map() }\n  );\n\n  let mapper = trans => {\n    Object.keys(trans).forEach(name => {\n      trans[name] = convertOutputType(trans[name], outputTypes.get(name));\n    });\n\n    if (matched && !matched.has(trans.id)) {\n      trans._unmatched = true;\n    }\n    return trans;\n  };\n\n  return toGroup(parents, children, mapper);\n}\n\nasync function execTransactionsBasic(\n  state,\n  queryState,\n  sql,\n  params,\n  splitType,\n  outputTypes\n) {\n  let s = { ...sql };\n\n  if (splitType !== 'all') {\n    if (splitType === 'none') {\n      s.where = `${s.where} AND ${s.from}.parent_id IS NULL`;\n    } else {\n      s.where = `${s.where} AND ${s.from}.is_parent = 0`;\n    }\n  }\n\n  return execQuery(queryState, state, s, params, outputTypes);\n}\n\nexport default {\n  transactions: execTransactions\n};\n","function f(type, opts) {\n  return { type, ...opts };\n}\n\n// This is the table schema!\n//\n// The schema itself is the public API for querying and updating data.\n// The schema config provides a lot of control over how queries are\n// constructed other metadata used by the executors. The goal is to\n// provide a simple interface to the app, but allow the backend to\n// highly optimize how queries are run.\n//\n// A few notes:\n//\n// * `transactions` is a special table and is has a highly customized\n// executor (see `executors.js`) for performace. It should mostly be\n// transparent to you, but it's worth reading the comments in there if\n// requirements change, especially regarding split transactions.\n//\n// * You should rarely change the schema and only add to it, but it is\n// relatively safe to change if needed. The only problem is changing a\n// public API, but that could be mitigated with an option in schema\n// config to map field name for backwards compatibility.\n//\n// * It's important that the table names here in the schema map to the\n// real tables in sqlite that are updated. Otherwise subscriptions\n// might not work because the dependencies are wrong. If needed in the\n// future, we can provide another option in the schema config to map a\n// table name the internal table that is updated.\n\nexport const schema = {\n  transactions: {\n    id: f('id'),\n    is_parent: f('boolean'),\n    is_child: f('boolean'),\n    parent_id: f('id'),\n    account: f('id', { ref: 'accounts', required: true }),\n    category: f('id', { ref: 'categories' }),\n    amount: f('integer', { default: 0, required: true }),\n    payee: f('id', { ref: 'payees' }),\n    notes: f('string'),\n    date: f('date', { required: true }),\n    imported_id: f('string'),\n    error: f('json'),\n    imported_payee: f('string'),\n    starting_balance_flag: f('boolean'),\n    transfer_id: f('id'),\n    sort_order: f('float', { default: () => Date.now() }),\n    cleared: f('boolean', { default: true }),\n    tombstone: f('boolean'),\n    schedule: f('id', { ref: 'schedules' })\n    // subtransactions is a special field added if the table has the\n    // `splits: grouped` option\n  },\n  payees: {\n    id: f('id'),\n    name: f('string', { required: true }),\n    transfer_acct: f('id', { ref: 'accounts' }),\n    tombstone: f('boolean')\n  },\n  accounts: {\n    id: f('id'),\n    name: f('string', { required: true }),\n    // TODO: enum\n    type: f('string'),\n    offbudget: f('boolean'),\n    closed: f('boolean'),\n    sort_order: f('float'),\n    tombstone: f('boolean')\n  },\n  categories: {\n    id: f('id'),\n    name: f('string'),\n    is_income: f('boolean'),\n    group: f('id', { ref: 'category_groups' }),\n    sort_order: f('float'),\n    tombstone: f('boolean')\n  },\n  category_groups: {\n    id: f('id'),\n    name: f('string'),\n    is_income: f('boolean'),\n    sort_order: f('float'),\n    tombstone: f('boolean')\n  },\n  schedules: {\n    id: f('id'),\n    rule: f('id', { ref: 'rules', required: true }),\n    next_date: f('date'),\n    completed: f('boolean'),\n    posts_transaction: f('boolean'),\n    tombstone: f('boolean'),\n\n    // These are special fields that are actually pulled from the\n    // underlying rule\n    _payee: f('id', { ref: 'payees' }),\n    _account: f('id', { ref: 'accounts' }),\n    _amount: f('json/fallback'),\n    _amountOp: f('string'),\n    _date: f('json/fallback'),\n    _conditions: f('json'),\n    _actions: f('json')\n  },\n  rules: {\n    id: f('id'),\n    stage: f('string'),\n    conditions: f('json'),\n    actions: f('json'),\n    tombstone: f('boolean')\n  },\n  notes: {\n    id: f('id'),\n    note: f('string')\n  }\n};\n\nexport const schemaConfig = {\n  // Note: these views *must* represent the underlying table that we\n  // are mapping here. The compiler makes optimizations with this\n  // assumption\n  tableViews(name, { isJoin, withDead, tableOptions = {} }) {\n    switch (name) {\n      case 'transactions': {\n        // If joining, we always only show alive transactions. There's\n        // no way to configure join behavior yet\n        if (isJoin) {\n          return 'v_transactions_internal_alive';\n        }\n\n        let splitType = tableOptions.splits || 'inline';\n        // Use the view to exclude dead transactions if using `inline` or `none`\n        if (!withDead && (splitType === 'inline' || splitType === 'none')) {\n          return 'v_transactions_internal_alive';\n        }\n\n        // Otherwse we disregard the `withDead` option here and handle\n        // that in the executors to improve performance\n        return 'v_transactions_internal';\n      }\n\n      case 'schedules':\n        return 'v_schedules';\n\n      case 'categories':\n        return 'v_categories';\n\n      case 'payees':\n        return 'v_payees';\n\n      default:\n    }\n    return name;\n  },\n\n  customizeQuery(queryState) {\n    let { table: tableName, tableOptions = {} } = queryState;\n\n    function orderBy(orders) {\n      // If order was specified, always add id as the last sort to make\n      // it deterministic\n      if (orders.length > 0) {\n        return orders.concat(['id']);\n      }\n\n      // Otherwise, these are the default orders for each table\n      switch (tableName) {\n        case 'transactions':\n          return [\n            { date: 'desc' },\n            'starting_balance_flag',\n            { sort_order: 'desc' },\n            'id'\n          ];\n        case 'payees':\n          return [\n            { $condition: { transfer_acct: null }, $dir: 'desc' },\n            { $nocase: '$name' }\n          ];\n        case 'accounts':\n          return ['sort_order', 'name'];\n        case 'schedules':\n          return [{ $condition: { completed: true } }, 'next_date'];\n        default:\n      }\n\n      return [];\n    }\n\n    return {\n      ...queryState,\n      orderExpressions: orderBy(queryState.orderExpressions)\n    };\n  },\n\n  views: {\n    payees: {\n      v_payees: internalFields => {\n        let fields = internalFields({\n          name: 'COALESCE(__accounts.name, _.name)'\n        });\n\n        return `\n          SELECT ${fields} FROM payees _\n          LEFT JOIN accounts __accounts ON (_.transfer_acct = __accounts.id AND __accounts.tombstone = 0)\n          -- We never want to show transfer payees that are pointing to deleted accounts.\n          -- Either this isn't a transfer payee, if the account exists\n          WHERE _.transfer_acct IS NULL OR __accounts.id IS NOT NULL\n        `;\n      }\n    },\n\n    categories: {\n      fields: {\n        group: 'cat_group'\n      },\n\n      v_categories: internalFields => {\n        let fields = internalFields({ group: 'cat_group' });\n        return `SELECT ${fields} FROM categories _`;\n      }\n    },\n\n    schedules: {\n      v_schedules: internalFields => {\n        let fields = internalFields({\n          next_date: `\n            CASE\n              WHEN _nd.local_next_date_ts = _nd.base_next_date_ts THEN _nd.local_next_date\n              ELSE _nd.base_next_date\n            END\n          `,\n          _payee: `pm.targetId`,\n          _account: `json_extract(_rules.conditions, _paths.account || '.value')`,\n          _amount: `json_extract(_rules.conditions, _paths.amount || '.value')`,\n          _amountOp: `json_extract(_rules.conditions, _paths.amount || '.op')`,\n          _date: `json_extract(_rules.conditions, _paths.date || '.value')`,\n          _conditions: '_rules.conditions',\n          _actions: '_rules.actions'\n        });\n\n        return `\n          SELECT ${fields} FROM schedules _\n          LEFT JOIN schedules_next_date _nd ON _nd.schedule_id = _.id\n          LEFT JOIN schedules_json_paths _paths ON _paths.schedule_id = _.id\n          LEFT JOIN rules _rules ON _rules.id = _.rule\n          LEFT JOIN payee_mapping pm ON pm.id = json_extract(_rules.conditions, _paths.payee || '.value')\n        `;\n      }\n    },\n\n    transactions: {\n      fields: {\n        is_parent: 'isParent',\n        is_child: 'isChild',\n        account: 'acct',\n        imported_id: 'financial_id',\n        imported_payee: 'imported_description',\n        transfer_id: 'transferred_id',\n        payee: 'description'\n      },\n\n      v_transactions_internal: internalFields => {\n        // Override some fields to make custom stuff\n        let fields = internalFields({\n          payee: 'pm.targetId',\n          category: `CASE WHEN _.isParent = 1 THEN NULL ELSE cm.transferId END`,\n          amount: `IFNULL(_.amount, 0)`,\n          parent_id: 'CASE WHEN _.isChild = 0 THEN NULL ELSE _.parent_id END'\n        });\n\n        return `\n          SELECT ${fields} FROM transactions _\n          LEFT JOIN category_mapping cm ON cm.id = _.category\n          LEFT JOIN payee_mapping pm ON pm.id = _.description\n          WHERE\n           _.date IS NOT NULL AND\n           _.acct IS NOT NULL AND\n           (_.isChild = 0 OR _.parent_id IS NOT NULL)\n        `;\n      },\n\n      // We join on t2 to only include valid child transactions. We\n      // want to only include ones with valid parents, which is when\n      // an alive parent transaction exists\n      v_transactions_internal_alive: `\n        SELECT _.* FROM v_transactions_internal _\n        LEFT JOIN transactions t2 ON (_.is_child = 1 AND t2.id = _.parent_id)\n        WHERE IFNULL(_.tombstone, 0) = 0 AND (_.is_child = 0 OR t2.tombstone = 0)\n      `,\n\n      v_transactions: (_, publicFields) => {\n        let fields = publicFields({\n          payee: 'p.id',\n          category: 'c.id',\n          account: 'a.id'\n        });\n\n        // This adds an order, and also validates any id references by\n        // selecting the ids through a join which return null if they\n        // are dead\n        return `\n          SELECT ${fields} FROM v_transactions_internal_alive _\n          LEFT JOIN payees p ON (p.id = _.payee AND p.tombstone = 0)\n          LEFT JOIN categories c ON (c.id = _.category AND c.tombstone = 0)\n          LEFT JOIN accounts a ON (a.id = _.account AND a.tombstone = 0)\n          ORDER BY _.date desc, _.starting_balance_flag, _.sort_order desc, _.id;\n        `;\n      }\n    }\n  }\n};\n","import { schema, schemaConfig } from './index';\nimport schemaExecutors from './executors';\nimport {\n  runQuery as _runQuery,\n  runCompiledQuery as _runCompiledQuery\n} from '../exec';\nimport { Query } from '../../../shared/query';\n\nexport function runCompiledQuery(query, sqlPieces, state, params) {\n  return _runCompiledQuery(query, sqlPieces, state, {\n    params,\n    executors: schemaExecutors\n  });\n}\n\nexport function runQuery(query, params) {\n  if (query instanceof Query) {\n    query = query.serialize();\n  }\n\n  return _runQuery(schema, schemaConfig, query, {\n    params,\n    executors: schemaExecutors\n  });\n}\n","import { quoteAlias } from './compiler';\n\nfunction selectFields(fields) {\n  return Object.keys(fields)\n    .map(as => {\n      let field = fields[as];\n      let needsAs = field !== as;\n      // If it's just an identifier, we automatically prefix it with\n      // `_.` which makes sure it references the root table\n      if (!field.match(/[ .]/)) {\n        field = `_.${field}`;\n      }\n      return needsAs ? `${field} AS ${quoteAlias(as)}` : `${field}`;\n    })\n    .join(', ');\n}\n\nexport function makeViews(schema, schemaConfig) {\n  let views = schemaConfig.views;\n  let viewStrs = [];\n\n  Object.keys(views).forEach(table => {\n    let { fields: fieldMappings = {}, ...tableViews } = views[table];\n\n    let publicFields = Object.fromEntries(\n      Object.keys(schema[table]).map(name => [name, name])\n    );\n    let internalFields = { ...publicFields, ...fieldMappings };\n\n    Object.keys(tableViews).forEach(viewName => {\n      let publicMaker = overrides => {\n        let fields = { ...publicFields, ...overrides };\n        return selectFields(fields);\n      };\n      let internalMaker = overrides => {\n        let fields = { ...internalFields, ...overrides };\n        return selectFields(fields);\n      };\n\n      let sql;\n      if (typeof tableViews[viewName] === 'function') {\n        sql = tableViews[viewName](internalMaker, publicMaker);\n      } else {\n        sql = tableViews[viewName];\n      }\n      sql = sql.trim().replace(/;$/, '');\n\n      viewStrs.push(`\n        DROP VIEW IF EXISTS ${viewName};\n        CREATE VIEW ${viewName} AS ${sql};\n      `);\n    });\n  });\n\n  return viewStrs.join('\\n');\n}\n","import fs from '../platform/server/fs';\nimport * as monthUtils from '../shared/months';\nimport * as sqlite from '../platform/server/sqlite';\nimport * as prefs from './prefs';\nimport * as cloudStorage from './cloud-storage';\nconst connection = require('../platform/server/connection');\nconst uuid = require('../platform/uuid');\nconst dateFns = require('date-fns');\n\n// A special backup that represents the latest version of the db that\n// can be reverted to after loading a backup\nconst LATEST_BACKUP_FILENAME = 'db.latest.sqlite';\nlet serviceInterval = null;\n\nexport async function getBackups(id) {\n  const budgetDir = fs.getBudgetDir(id);\n  const backupDir = fs.join(budgetDir, 'backups');\n\n  let paths = [];\n  if (await fs.exists(backupDir)) {\n    paths = await fs.listDir(backupDir);\n    paths = paths.filter(file => file.match(/\\.sqlite$/));\n  }\n\n  const backups = await Promise.all(\n    paths.map(async path => {\n      const mtime = await fs.getModifiedTime(fs.join(backupDir, path));\n      return {\n        id: path,\n        date: new Date(mtime)\n      };\n    })\n  );\n\n  backups.sort((b1, b2) => {\n    if (b1.date < b2.date) {\n      return 1;\n    } else if (b1.date > b2.date) {\n      return -1;\n    }\n    return 0;\n  });\n\n  return backups;\n}\n\nexport async function getLatestBackup(id) {\n  const budgetDir = fs.getBudgetDir(id);\n  if (await fs.exists(fs.join(budgetDir, LATEST_BACKUP_FILENAME))) {\n    return {\n      id: LATEST_BACKUP_FILENAME,\n      date: null,\n      isLatest: true\n    };\n  }\n  return null;\n}\n\nexport async function getAvailableBackups(id) {\n  let backups = await getBackups(id);\n\n  let latestBackup = await getLatestBackup(id);\n  if (latestBackup) {\n    backups.unshift(latestBackup);\n  }\n\n  backups = backups.map(backup => ({\n    ...backup,\n    date: backup.date ? dateFns.format(backup.date, 'yyyy-MM-dd h:mm') : null\n  }));\n\n  return backups;\n}\n\nexport async function updateBackups(backups) {\n  const byDay = backups.reduce((groups, backup) => {\n    const day = dateFns.format(backup.date, 'yyyy-MM-dd');\n    groups[day] = groups[day] || [];\n    groups[day].push(backup);\n    return groups;\n  }, {});\n\n  const removed = [];\n  for (let day of Object.keys(byDay)) {\n    const dayBackups = byDay[day];\n    const isToday = day === monthUtils.currentDay();\n    // Allow 3 backups of the current day (so fine-grained edits are\n    // kept around). Otherwise only keep around one backup per day.\n    // And only keep a total of 10 backups.\n    for (let backup of dayBackups.slice(isToday ? 3 : 1)) {\n      removed.push(backup.id);\n    }\n  }\n\n  // Get the list of remaining backups and only keep the latest 10\n  const currentBackups = backups.filter(backup => !removed.includes(backup.id));\n  return removed.concat(currentBackups.slice(10).map(backup => backup.id));\n}\n\nexport async function makeBackup(id) {\n  const budgetDir = fs.getBudgetDir(id);\n\n  // When making a backup, we no longer consider the user to be\n  // viewing any backups. If there exists a \"latest backup\" we should\n  // delete it and consider whatever is current as the latest\n  if (await fs.exists(fs.join(budgetDir, LATEST_BACKUP_FILENAME))) {\n    await fs.removeFile(fs.join(fs.getBudgetDir(id), LATEST_BACKUP_FILENAME));\n  }\n\n  let backupId = `${uuid.v4Sync()}.sqlite`;\n  let backupPath = fs.join(budgetDir, 'backups', backupId);\n\n  if (!(await fs.exists(fs.join(budgetDir, 'backups')))) {\n    await fs.mkdir(fs.join(budgetDir, 'backups'));\n  }\n\n  await fs.copyFile(fs.join(budgetDir, 'db.sqlite'), backupPath);\n\n  // Remove all the messages from the backup\n  const db = sqlite.openDatabase(backupPath);\n  await sqlite.runQuery(db, 'DELETE FROM messages_crdt');\n  await sqlite.runQuery(db, 'DELETE FROM messages_clock');\n  sqlite.closeDatabase(db);\n\n  const toRemove = await updateBackups(await getBackups(id));\n  for (let id of toRemove) {\n    await fs.removeFile(fs.join(budgetDir, 'backups', id));\n  }\n\n  connection.send('backups-updated', await getAvailableBackups(id));\n}\n\nexport async function loadBackup(id, backupId) {\n  const budgetDir = fs.getBudgetDir(id);\n\n  if (!(await fs.exists(fs.join(budgetDir, LATEST_BACKUP_FILENAME)))) {\n    // If this is the first time we're loading a backup, save the\n    // current version so the user can easily revert back to it\n    await fs.copyFile(\n      fs.join(budgetDir, 'db.sqlite'),\n      fs.join(budgetDir, LATEST_BACKUP_FILENAME)\n    );\n\n    await fs.copyFile(\n      fs.join(budgetDir, 'metadata.json'),\n      fs.join(budgetDir, 'metadata.latest.json')\n    );\n\n    // Restart the backup service to make sure the user has the full\n    // amount of time to figure out which one they want\n    stopBackupService();\n    startBackupService(id);\n\n    await prefs.loadPrefs(id);\n  }\n\n  if (backupId === LATEST_BACKUP_FILENAME) {\n    console.log('Reverting backup');\n\n    // If reverting back to the latest, copy and delete the latest\n    // backup\n    await fs.copyFile(\n      fs.join(budgetDir, LATEST_BACKUP_FILENAME),\n      fs.join(budgetDir, 'db.sqlite')\n    );\n    await fs.copyFile(\n      fs.join(budgetDir, 'metadata.latest.json'),\n      fs.join(budgetDir, 'metadata.json')\n    );\n    await fs.removeFile(fs.join(budgetDir, LATEST_BACKUP_FILENAME));\n    await fs.removeFile(fs.join(budgetDir, 'metadata.latest.json'));\n\n    // Re-upload the new file\n    try {\n      await cloudStorage.upload();\n    } catch (e) {}\n    prefs.unloadPrefs();\n  } else {\n    console.log('Loading backup', backupId);\n\n    // This function is only ever called when a budget isn't loaded,\n    // so it's safe to load our prefs in. We need to forget about any\n    // syncing data if we are loading a backup (the current sync data\n    // will be restored if the user reverts to the original version)\n    await prefs.loadPrefs(id);\n    await prefs.savePrefs({\n      groupId: null,\n      lastSyncedTimestamp: null,\n      lastUploaded: null\n    });\n\n    // Re-upload the new file\n    try {\n      await cloudStorage.upload();\n    } catch (e) {}\n\n    prefs.unloadPrefs();\n\n    await fs.copyFile(\n      fs.join(budgetDir, 'backups', backupId),\n      fs.join(budgetDir, 'db.sqlite')\n    );\n  }\n}\n\nexport function startBackupService(id) {\n  if (serviceInterval) {\n    clearInterval(serviceInterval);\n  }\n\n  // Make a backup every 15 minutes\n  serviceInterval = setInterval(async () => {\n    console.log('Making backup');\n    await makeBackup(id);\n  }, 1000 * 60 * 15);\n}\n\nexport function stopBackupService() {\n  clearInterval(serviceInterval);\n  serviceInterval = null;\n}\n","import * as monthUtils from '../../shared/months';\nimport * as db from '../db';\nimport { batchMessages } from '../sync';\nimport { groupBySingle } from '../../shared/util';\nimport * as prefs from '../prefs';\nimport * as sheet from '../sheet';\n\nasync function getSheetValue(sheetName, cell) {\n  const node = await sheet.getCell(sheetName, cell);\n  return typeof node.value === 'number' ? node.value : 0;\n}\n\n// We want to only allow the positive movement of money back and\n// forth. buffered should never be allowed to go into the negative,\n// and you shouldn't be allowed to pull non-existant money from\n// leftover.\nfunction calcBufferedAmount(toBudget, buffered, amount) {\n  amount = Math.min(Math.max(amount, -buffered), Math.max(toBudget, 0));\n  return buffered + amount;\n}\n\nfunction getBudgetTable() {\n  let { budgetType } = prefs.getPrefs() || {};\n  return budgetType === 'report' ? 'reflect_budgets' : 'zero_budgets';\n}\n\nfunction isReflectBudget() {\n  let { budgetType } = prefs.getPrefs();\n  return budgetType === 'report';\n}\n\nfunction isZeroBudget() {\n  let { budgetType } = prefs.getPrefs();\n  return budgetType === 'rollover';\n}\n\nfunction dbMonth(month) {\n  return parseInt(month.replace('-', ''));\n}\n\nfunction getBudgetData(table, month) {\n  return db.all(\n    `\n    SELECT b.*, c.is_income FROM v_categories c\n    LEFT JOIN ${table} b ON b.category = c.id\n    WHERE c.tombstone = 0 AND b.month = ?\n  `,\n    [month]\n  );\n}\n\nfunction getAllMonths(startMonth) {\n  let { createdMonths } = sheet.get().meta();\n  let latest = null;\n  for (let month of createdMonths) {\n    if (latest == null || month > latest) {\n      latest = month;\n    }\n  }\n  return monthUtils.rangeInclusive(startMonth, latest);\n}\n\n// TODO: Valid month format in all the functions below\n\nexport function getBudget({ category, month }) {\n  let table = getBudgetTable();\n  let existing = db.firstSync(\n    `SELECT * FROM ${table} WHERE month = ? AND category = ?`,\n    [dbMonth(month), category]\n  );\n  return existing ? existing.amount || 0 : 0;\n}\n\nexport function setBudget({ category, month, amount }) {\n  if (typeof amount !== 'number') {\n    amount = 0;\n  }\n  const table = getBudgetTable();\n\n  let existing = db.firstSync(\n    `SELECT id FROM ${table} WHERE month = ? AND category = ?`,\n    [dbMonth(month), category]\n  );\n  if (existing) {\n    return db.update(table, { id: existing.id, amount });\n  }\n  return db.insert(table, {\n    id: `${dbMonth(month)}-${category}`,\n    month: dbMonth(month),\n    category,\n    amount\n  });\n}\n\nexport function setBuffer(month, amount) {\n  let existing = db.firstSync(\n    `SELECT id FROM zero_budget_months WHERE id = ?`,\n    [month]\n  );\n  if (existing) {\n    return db.update('zero_budget_months', {\n      id: existing.id,\n      buffered: amount\n    });\n  }\n  return db.insert('zero_budget_months', { id: month, buffered: amount });\n}\n\nfunction setCarryover(table, category, month, flag) {\n  let existing = db.firstSync(\n    `SELECT id FROM ${table} WHERE month = ? AND category = ?`,\n    [month, category]\n  );\n  if (existing) {\n    return db.update(table, { id: existing.id, carryover: flag ? 1 : 0 });\n  }\n  return db.insert(table, {\n    id: `${month}-${category}`,\n    month,\n    category,\n    carryover: flag ? 1 : 0\n  });\n}\n\n// Actions\n\nexport async function copyPreviousMonth({ month }) {\n  let prevMonth = dbMonth(monthUtils.prevMonth(month));\n  let table = getBudgetTable();\n  let budgetData = await getBudgetData(table, prevMonth);\n\n  await batchMessages(() => {\n    budgetData.forEach(prevBudget => {\n      if (prevBudget.is_income === 1 && !isReflectBudget()) {\n        return;\n      }\n      setBudget({\n        category: prevBudget.category,\n        month,\n        amount: prevBudget.amount\n      });\n    });\n  });\n}\n\nexport async function setZero({ month }) {\n  let categories = await db.all(\n    'SELECT * FROM v_categories WHERE tombstone = 0'\n  );\n\n  await batchMessages(() => {\n    categories.forEach(cat => {\n      if (cat.is_income === 1 && !isReflectBudget()) {\n        return;\n      }\n      setBudget({ category: cat.id, month, amount: 0 });\n    });\n  });\n}\n\nexport async function set3MonthAvg({ month }) {\n  let categories = await db.all(\n    'SELECT * FROM v_categories WHERE tombstone = 0'\n  );\n\n  let prevMonth1 = monthUtils.prevMonth(month);\n  let prevMonth2 = monthUtils.prevMonth(prevMonth1);\n  let prevMonth3 = monthUtils.prevMonth(prevMonth2);\n\n  await batchMessages(async () => {\n    for (let cat of categories) {\n      if (cat.is_income === 1 && !isReflectBudget()) {\n        continue;\n      }\n\n      let spent1 = await getSheetValue(\n        monthUtils.sheetForMonth(prevMonth1),\n        'sum-amount-' + cat.id\n      );\n      let spent2 = await getSheetValue(\n        monthUtils.sheetForMonth(prevMonth2),\n        'sum-amount-' + cat.id\n      );\n      let spent3 = await getSheetValue(\n        monthUtils.sheetForMonth(prevMonth3),\n        'sum-amount-' + cat.id\n      );\n\n      const avg = ((spent1 + spent2 + spent3) / 3) | 0;\n      setBudget({ category: cat.id, month, amount: -avg });\n    }\n  });\n}\n\nexport async function setAllFuture({ startMonth }) {\n  if (!isReflectBudget()) {\n    throw new Error('setAllFuture only applies to report budget type');\n  }\n  let table = getBudgetTable();\n  let budgetData = await getBudgetData(table, dbMonth(startMonth));\n  let months = getAllMonths(monthUtils.addMonths(startMonth, 1));\n\n  batchMessages(() => {\n    for (let month of months) {\n      budgetData.forEach(budget => {\n        if (budget.is_income === 1 && !isReflectBudget()) {\n          return;\n        }\n        setBudget({ category: budget.category, month, amount: budget.amount });\n      });\n    }\n  });\n}\n\nexport async function holdForNextMonth({ month, amount }) {\n  let row = await db.first(\n    'SELECT buffered FROM zero_budget_months WHERE id = ?',\n    [month]\n  );\n\n  let sheetName = monthUtils.sheetForMonth(month);\n  let toBudget = await getSheetValue(sheetName, 'to-budget');\n\n  if (toBudget > 0) {\n    let bufferedAmount = calcBufferedAmount(\n      toBudget,\n      (row && row.buffered) || 0,\n      amount\n    );\n\n    await setBuffer(month, bufferedAmount);\n    return true;\n  }\n  return false;\n}\n\nexport async function holdForFutureMonths({ startMonth, amount }) {\n  let months = getAllMonths(startMonth);\n\n  await batchMessages(async () => {\n    for (let month of months) {\n      if (!(await holdForNextMonth({ month, amount }))) {\n        break;\n      }\n    }\n  });\n}\n\nexport async function resetHold({ month }) {\n  await setBuffer(month, 0);\n}\n\nexport async function coverOverspending({ month, to, from }) {\n  let sheetName = monthUtils.sheetForMonth(month);\n  let toBudgeted = await getSheetValue(sheetName, 'budget-' + to);\n  let leftover = await getSheetValue(sheetName, 'leftover-' + to);\n  let leftoverFrom = await getSheetValue(\n    sheetName,\n    from === 'to-be-budgeted' ? 'to-budget' : 'leftover-' + from\n  );\n\n  if (leftover >= 0 || leftoverFrom <= 0) {\n    return;\n  }\n\n  let amountCovered = Math.min(-leftover, leftoverFrom);\n\n  // If we are covering it from the to be budgeted amount, ignore this\n  if (from !== 'to-be-budgeted') {\n    const fromBudgeted = await getSheetValue(sheetName, 'budget-' + from);\n    await setBudget({\n      category: from,\n      month,\n      amount: fromBudgeted - amountCovered\n    });\n  }\n\n  await setBudget({ category: to, month, amount: toBudgeted + amountCovered });\n}\n\nexport async function transferAvailable({ month, amount, category }) {\n  let sheetName = monthUtils.sheetForMonth(month);\n  let leftover = await getSheetValue(sheetName, 'to-budget');\n  amount = Math.max(Math.min(amount, leftover), 0);\n\n  let budgeted = await getSheetValue(sheetName, 'budget-' + category);\n  await setBudget({ category, month, amount: budgeted + amount });\n}\n\nexport async function transferCategory({ month, amount, from, to }) {\n  const sheetName = monthUtils.sheetForMonth(month);\n  const fromBudgeted = await getSheetValue(sheetName, 'budget-' + from);\n\n  await setBudget({ category: from, month, amount: fromBudgeted - amount });\n\n  // If we are simply moving it back into available cash to budget,\n  // don't do anything else\n  if (to !== 'to-be-budgeted') {\n    const toBudgeted = await getSheetValue(sheetName, 'budget-' + to);\n    await setBudget({ category: to, month, amount: toBudgeted + amount });\n  }\n}\n\nexport async function setCategoryCarryover({ startMonth, category, flag }) {\n  let table = getBudgetTable();\n  let months = getAllMonths(startMonth);\n\n  await batchMessages(() => {\n    for (let month of months) {\n      setCarryover(table, category, dbMonth(month), flag);\n    }\n  });\n}\n","import { createApp } from '../app';\nimport { mutator } from '../mutators';\nimport { undoable } from '../undo';\nimport * as actions from './actions';\n\n\nlet app = createApp();\n\napp.method('budget/budget-amount', mutator(undoable(actions.setBudget)));\napp.method(\n  'budget/copy-previous-month',\n  mutator(undoable(actions.copyPreviousMonth))\n);\napp.method('budget/set-zero', mutator(undoable(actions.setZero)));\napp.method('budget/set-3month-avg', mutator(undoable(actions.set3MonthAvg)));\napp.method('budget/set-all-future', mutator(undoable(actions.setAllFuture)));\napp.method(\n  'budget/hold-for-next-month',\n  mutator(undoable(actions.holdForNextMonth))\n);\napp.method(\n  'budget/hold-for-future-months',\n  mutator(undoable(actions.holdForFutureMonths))\n);\napp.method('budget/reset-hold', mutator(undoable(actions.resetHold)));\napp.method(\n  'budget/cover-overspending',\n  mutator(undoable(actions.coverOverspending))\n);\napp.method(\n  'budget/transfer-available',\n  mutator(undoable(actions.transferAvailable))\n);\napp.method(\n  'budget/transfer-category',\n  mutator(undoable(actions.transferCategory))\n);\napp.method(\n  'budget/set-carryover',\n  mutator(undoable(actions.setCategoryCarryover))\n);\n\nexport default app;\n","import * as sheet from '../sheet';\nimport * as db from '../db';\nimport * as monthUtils from '../../shared/months';\nimport { getChangedValues } from '../../shared/util';\nimport { resolveName } from '../spreadsheet/util';\nimport * as report from './report';\nimport * as rollover from './rollover';\nimport { sumAmounts } from './util';\nimport * as budgetActions from '../budget/actions';\n\nfunction mergeUpdates(updates) {\n  const merged = {};\n  updates.forEach(update => {\n    Object.keys(update).forEach(sheet => {\n      if (merged[sheet]) {\n        merged[sheet] = { ...merged[sheet], ...update[sheet] };\n      } else {\n        merged[sheet] = update[sheet];\n      }\n    });\n  });\n  return merged;\n}\n\nexport function getBudgetType() {\n  let meta = sheet.get().meta();\n  return meta.budgetType || 'rollover';\n}\n\nexport function getBudgetRange(start, end) {\n  start = monthUtils.getMonth(start);\n  end = monthUtils.getMonth(end);\n\n  // The start date should never be after the end date. If that\n  // happened, the month range might be a valid range and weird\n  // things happen\n  if (start > end) {\n    start = end;\n  }\n\n  // Budgets should exist 3 months before the earliest needed date\n  // (either the oldest transaction or the current month if no\n  // transactions yet), and a year from the current date. There's no\n  // need to ever have budgets outside that range.\n  start = monthUtils.subMonths(start, 3);\n  end = monthUtils.addMonths(end, 12);\n\n  return { start, end, range: monthUtils.rangeInclusive(start, end) };\n}\n\nfunction createCategory(cat, sheetName, prevSheetName, start, end) {\n  sheet.get().createDynamic(sheetName, 'sum-amount-' + cat.id, {\n    initialValue: 0,\n    run: () => {\n      // Making this sync is faster!\n      let rows = db.runQuery(\n        `SELECT SUM(amount) as amount FROM v_transactions_internal_alive t\n           LEFT JOIN accounts a ON a.id = t.account\n         WHERE t.date >= ${start} AND t.date <= ${end}\n           AND category = '${cat.id}' AND a.offbudget = 0`,\n        [],\n        true\n      );\n      let row = rows[0];\n      let amount = row ? row.amount : 0;\n      return amount || 0;\n    }\n  });\n\n  if (getBudgetType() === 'rollover') {\n    rollover.createCategory(cat, sheetName, prevSheetName);\n  } else {\n    report.createCategory(cat, sheetName, prevSheetName);\n  }\n}\n\nfunction createCategoryGroup(group, sheetName) {\n  sheet.get().createDynamic(sheetName, 'group-sum-amount-' + group.id, {\n    initialValue: 0,\n    dependencies: group.categories.map(cat => `sum-amount-${cat.id}`),\n    run: sumAmounts\n  });\n\n  if (!group.is_income || getBudgetType() !== 'rollover') {\n    sheet.get().createDynamic(sheetName, 'group-budget-' + group.id, {\n      initialValue: 0,\n      dependencies: group.categories.map(cat => `budget-${cat.id}`),\n      run: sumAmounts\n    });\n\n    sheet.get().createDynamic(sheetName, 'group-leftover-' + group.id, {\n      initialValue: 0,\n      dependencies: group.categories.map(cat => `leftover-${cat.id}`),\n      run: sumAmounts\n    });\n  }\n}\n\nfunction handleAccountChange(months, oldValue, newValue) {\n  if (!oldValue || oldValue.offbudget !== newValue.offbudget) {\n    let rows = db.runQuery(\n      `\n        SELECT DISTINCT(category) as category FROM transactions\n        WHERE acct = ?\n      `,\n      [newValue.id],\n      true\n    );\n\n    months.forEach(month => {\n      let sheetName = monthUtils.sheetForMonth(month, getBudgetType());\n\n      rows.forEach(row => {\n        sheet\n          .get()\n          .recompute(resolveName(sheetName, 'sum-amount-' + row.category));\n      });\n    });\n  }\n}\n\nfunction handleTransactionChange(transaction, changedFields) {\n  if (\n    (changedFields.has('date') ||\n      changedFields.has('acct') ||\n      changedFields.has('amount') ||\n      changedFields.has('category') ||\n      changedFields.has('tombstone') ||\n      changedFields.has('isParent')) &&\n    transaction.date &&\n    transaction.category\n  ) {\n    let month = monthUtils.monthFromDate(db.fromDateRepr(transaction.date));\n    let sheetName = monthUtils.sheetForMonth(month, getBudgetType());\n\n    sheet\n      .get()\n      .recompute(resolveName(sheetName, 'sum-amount-' + transaction.category));\n  }\n}\n\nfunction handleCategoryMappingChange(months, oldValue, newValue) {\n  months.forEach(month => {\n    let sheetName = monthUtils.sheetForMonth(month, getBudgetType());\n    if (oldValue) {\n      sheet\n        .get()\n        .recompute(resolveName(sheetName, 'sum-amount-' + oldValue.transferId));\n    }\n    sheet\n      .get()\n      .recompute(resolveName(sheetName, 'sum-amount-' + newValue.transferId));\n  });\n}\n\nfunction handleCategoryChange(months, oldValue, newValue) {\n  function addDeps(sheetName, groupId, catId) {\n    sheet\n      .get()\n      .addDependencies(sheetName, `group-sum-amount-${groupId}`, [\n        `sum-amount-${catId}`\n      ]);\n    sheet\n      .get()\n      .addDependencies(sheetName, `group-budget-${groupId}`, [\n        `budget-${catId}`\n      ]);\n    sheet\n      .get()\n      .addDependencies(sheetName, `group-leftover-${groupId}`, [\n        `leftover-${catId}`\n      ]);\n  }\n\n  function removeDeps(sheetName, groupId, catId) {\n    sheet\n      .get()\n      .removeDependencies(sheetName, `group-sum-amount-${groupId}`, [\n        `sum-amount-${catId}`\n      ]);\n    sheet\n      .get()\n      .removeDependencies(sheetName, `group-budget-${groupId}`, [\n        `budget-${catId}`\n      ]);\n    sheet\n      .get()\n      .removeDependencies(sheetName, `group-leftover-${groupId}`, [\n        `leftover-${catId}`\n      ]);\n  }\n\n  let budgetType = getBudgetType();\n\n  if (oldValue && oldValue.tombstone === 0 && newValue.tombstone === 1) {\n    let id = newValue.id;\n    let groupId = newValue.cat_group;\n\n    months.forEach(month => {\n      let sheetName = monthUtils.sheetForMonth(month);\n      removeDeps(sheetName, groupId, id);\n    });\n  } else if (\n    newValue.tombstone === 0 &&\n    (!oldValue || oldValue.tombstone === 1)\n  ) {\n    if (budgetType === 'rollover') {\n      rollover.createBlankCategory(newValue, months);\n    }\n\n    months.forEach(month => {\n      let prevMonth = monthUtils.prevMonth(month);\n      let prevSheetName = monthUtils.sheetForMonth(prevMonth, budgetType);\n      let sheetName = monthUtils.sheetForMonth(month, budgetType);\n      let { start, end } = monthUtils.bounds(month);\n\n      createCategory(newValue, sheetName, prevSheetName, start, end);\n\n      let id = newValue.id;\n      let groupId = newValue.cat_group;\n\n      if (getBudgetType() === 'rollover') {\n        sheet\n          .get()\n          .addDependencies(sheetName, 'last-month-overspent', [\n            `${prevSheetName}!leftover-${id}`,\n            `${prevSheetName}!carryover-${id}`\n          ]);\n      }\n\n      addDeps(sheetName, groupId, id);\n    });\n  } else if (oldValue && oldValue.cat_group !== newValue.cat_group) {\n    // The category moved so we need to update the dependencies\n    let id = newValue.id;\n\n    months.forEach(month => {\n      let sheetName = monthUtils.sheetForMonth(month, budgetType);\n      removeDeps(sheetName, oldValue.cat_group, id);\n      addDeps(sheetName, newValue.cat_group, id);\n    });\n  }\n}\n\nfunction handleCategoryGroupChange(months, oldValue, newValue) {\n  let budgetType = getBudgetType();\n\n  function addDeps(sheetName, groupId) {\n    sheet\n      .get()\n      .addDependencies(sheetName, 'total-budgeted', [\n        `group-budget-${groupId}`\n      ]);\n    sheet\n      .get()\n      .addDependencies(sheetName, 'total-spent', [\n        `group-sum-amount-${groupId}`\n      ]);\n    sheet\n      .get()\n      .addDependencies(sheetName, 'total-leftover', [\n        `group-leftover-${groupId}`\n      ]);\n  }\n\n  function removeDeps(sheetName, groupId) {\n    sheet\n      .get()\n      .removeDependencies(sheetName, 'total-budgeted', [\n        `group-budget-${groupId}`\n      ]);\n    sheet\n      .get()\n      .removeDependencies(sheetName, 'total-spent', [\n        `group-sum-amount-${groupId}`\n      ]);\n    sheet\n      .get()\n      .removeDependencies(sheetName, 'total-leftover', [\n        `group-leftover-${groupId}`\n      ]);\n  }\n\n  if (newValue.tombstone === 1 && oldValue && oldValue.tombstone === 0) {\n    let id = newValue.id;\n    months.forEach(month => {\n      let sheetName = monthUtils.sheetForMonth(month, budgetType);\n      removeDeps(sheetName, id);\n    });\n  } else if (\n    newValue.tombstone === 0 &&\n    (!oldValue || oldValue.tombstone === 1)\n  ) {\n    let group = newValue;\n\n    if (!group.is_income || budgetType !== 'rollover') {\n      months.forEach(month => {\n        let sheetName = monthUtils.sheetForMonth(month, budgetType);\n\n        // Dirty, dirty hack. These functions should not be async, but this is\n        // OK because we're leveraging the sync nature of queries. Ideally we\n        // wouldn't be querying here. But I think we have to. At least for now\n        // we do\n        let categories = db.runQuery(\n          'SELECT * FROM categories WHERE tombstone = 0 AND cat_group = ?',\n          [group.id],\n          true\n        );\n        createCategoryGroup({ ...group, categories }, sheetName);\n\n        addDeps(sheetName, group.id);\n      });\n    }\n  }\n}\n\nfunction handleBudgetMonthChange(budget) {\n  let sheetName = monthUtils.sheetForMonth(budget.id);\n  sheet.get().set(`${sheetName}!buffered`, budget.buffered);\n}\n\nfunction handleBudgetChange(budget) {\n  if (budget.category) {\n    let sheetName = monthUtils.sheetForMonth(budget.month.toString());\n    sheet\n      .get()\n      .set(`${sheetName}!budget-${budget.category}`, budget.amount || 0);\n    sheet\n      .get()\n      .set(\n        `${sheetName}!carryover-${budget.category}`,\n        budget.carryover === 1 ? true : false\n      );\n  }\n}\n\nexport function triggerBudgetChanges(oldValues, newValues) {\n  let { createdMonths = new Set() } = sheet.get().meta();\n  sheet.startTransaction();\n\n  try {\n    newValues.forEach((items, table) => {\n      let old = oldValues.get(table);\n\n      items.forEach(newValue => {\n        let oldValue = old && old.get(newValue.id);\n\n        if (table === 'zero_budget_months') {\n          handleBudgetMonthChange(newValue);\n        } else if (table === 'zero_budgets' || table === 'reflect_budgets') {\n          handleBudgetChange(newValue);\n        } else if (table === 'transactions') {\n          let changed = new Set(\n            Object.keys(getChangedValues(oldValue || {}, newValue) || {})\n          );\n\n          if (oldValue) {\n            handleTransactionChange(oldValue, changed);\n          }\n          handleTransactionChange(newValue, changed);\n        } else if (table === 'category_mapping') {\n          handleCategoryMappingChange(createdMonths, oldValue, newValue);\n        } else if (table === 'categories') {\n          handleCategoryChange(createdMonths, oldValue, newValue);\n        } else if (table === 'category_groups') {\n          handleCategoryGroupChange(createdMonths, oldValue, newValue);\n        } else if (table === 'accounts') {\n          handleAccountChange(createdMonths, oldValue, newValue);\n        }\n      });\n    });\n  } finally {\n    sheet.endTransaction();\n  }\n}\n\nexport async function doTransfer(categoryIds, transferId) {\n  let { createdMonths: months } = sheet.get().meta();\n\n  [...months].map(month => {\n    let totalValue = categoryIds\n      .map(id => {\n        return budgetActions.getBudget({ month, category: id });\n      })\n      .reduce((total, value) => total + value, 0);\n\n    let transferValue = budgetActions.getBudget({\n      month,\n      category: transferId\n    });\n\n    budgetActions.setBudget({\n      month,\n      category: transferId,\n      amount: totalValue + transferValue\n    });\n  });\n}\n\nexport async function createBudget(months) {\n  const categories = await db.getCategories();\n  const groups = await db.getCategoriesGrouped();\n\n  sheet.startTransaction();\n  let meta = sheet.get().meta();\n  meta.createdMonths = meta.createdMonths || new Set();\n\n  let budgetType = getBudgetType();\n\n  if (budgetType === 'rollover') {\n    rollover.createBudget(meta, categories, months);\n  }\n\n  months.forEach(month => {\n    if (!meta.createdMonths.has(month)) {\n      let prevMonth = monthUtils.prevMonth(month);\n      let { start, end } = monthUtils.bounds(month);\n      let sheetName = monthUtils.sheetForMonth(month, budgetType);\n      let prevSheetName = monthUtils.sheetForMonth(prevMonth, budgetType);\n\n      categories.forEach(cat => {\n        createCategory(cat, sheetName, prevSheetName, start, end);\n      });\n      groups.forEach(group => {\n        createCategoryGroup(group, sheetName);\n      });\n\n      if (budgetType === 'rollover') {\n        rollover.createSummary(groups, categories, prevSheetName, sheetName);\n      } else {\n        report.createSummary(groups, categories, sheetName);\n      }\n\n      meta.createdMonths.add(month);\n    }\n  });\n\n  sheet.get().setMeta(meta);\n  sheet.endTransaction();\n\n  // Wait for the spreadsheet to finish computing. Normally this won't\n  // do anything (as values are cached) but on first run this need to\n  // show the loading screen while it initially sets up.\n  await sheet.waitOnSpreadsheet();\n}\n\nexport async function createAllBudgets() {\n  let earliestTransaction = await db.first(\n    'SELECT * FROM transactions WHERE isChild=0 AND date IS NOT NULL ORDER BY date ASC LIMIT 1'\n  );\n  let earliestDate =\n    earliestTransaction && db.fromDateRepr(earliestTransaction.date);\n  let currentMonth = monthUtils.currentMonth();\n\n  // Get the range based off of the earliest transaction and the\n  // current month. If no transactions currently exist the current\n  // month is also used as the starting month\n  let { start, end, range } = getBudgetRange(\n    earliestDate || currentMonth,\n    currentMonth\n  );\n\n  let meta = sheet.get().meta();\n  let createdMonths = meta.createdMonths || new Set();\n  let newMonths = range.filter(m => !createdMonths.has(m));\n\n  if (newMonths.length > 0) {\n    await createBudget(range);\n  }\n\n  return { start, end };\n}\n\nexport async function setType(type) {\n  let meta = sheet.get().meta();\n  if (type === meta.budgetType) {\n    return;\n  }\n\n  meta.budgetType = type;\n  meta.createdMonths = new Set();\n\n  // Go through and force all the cells to be recomputed\n  let nodes = sheet.get().getNodes();\n  db.transaction(() => {\n    for (let name of nodes.keys()) {\n      let [sheetName, cellName] = name.split('!');\n      if (sheetName.match(/^budget\\d+/)) {\n        sheet.get().deleteCell(sheetName, cellName);\n      }\n    }\n  });\n\n  sheet.get().startCacheBarrier();\n  sheet.loadUserBudgets(db);\n  let bounds = await createAllBudgets();\n  sheet.get().endCacheBarrier();\n\n  return bounds;\n}\n","import * as sheet from '../sheet';\nimport * as monthUtils from '../../shared/months';\nimport { number, sumAmounts } from './util';\nconst { resolveName } = require('../spreadsheet/util');\n\nexport async function createCategory(cat, sheetName, prevSheetName) {\n  sheet.get().createStatic(sheetName, `budget-${cat.id}`, 0);\n\n  // This makes the app more robust by \"fixing up\" null budget values.\n  // Those should not be allowed, but in case somehow a null value\n  // ends up there, we are resilient to it. Preferrably the\n  // spreadsheet would have types and be more strict about what is\n  // allowed to be set.\n  if (sheet.get().getCellValue(sheetName, `budget-${cat.id}`) == null) {\n    sheet.get().set(resolveName(sheetName, `budget-${cat.id}`), 0);\n  }\n\n  sheet.get().createDynamic(sheetName, `leftover-${cat.id}`, {\n    initialValue: 0,\n    dependencies: [\n      `budget-${cat.id}`,\n      `sum-amount-${cat.id}`,\n      `${prevSheetName}!carryover-${cat.id}`,\n      `${prevSheetName}!leftover-${cat.id}`\n    ],\n    run: (budgeted, sumAmount, prevCarryover, prevLeftover) => {\n      if (cat.is_income) {\n        return (\n          number(budgeted) -\n          number(sumAmount) +\n          (prevCarryover ? number(prevLeftover) : 0)\n        );\n      }\n\n      return (\n        number(budgeted) +\n        number(sumAmount) +\n        (prevCarryover ? number(prevLeftover) : 0)\n      );\n    }\n  });\n  sheet.get().createDynamic(sheetName, `spent-with-carryover-${cat.id}`, {\n    initialValue: 0,\n    dependencies: [\n      `budget-${cat.id}`,\n      `sum-amount-${cat.id}`,\n      `carryover-${cat.id}`\n    ],\n    // TODO: Why refresh??\n    refresh: true,\n    run: (budgeted, sumAmount, carryover) => {\n      return carryover\n        ? Math.max(0, number(budgeted) + number(sumAmount))\n        : sumAmount;\n    }\n  });\n\n  sheet.get().createStatic(sheetName, `carryover-${cat.id}`, false);\n}\n\nexport function createSummary(groups, categories, sheetName) {\n  let incomeGroup = groups.filter(group => group.is_income)[0];\n  let expenseCategories = categories.filter(cat => !cat.is_income);\n\n  sheet.get().createDynamic(sheetName, 'total-budgeted', {\n    initialValue: 0,\n    dependencies: groups\n      .filter(group => !group.is_income)\n      .map(group => `group-budget-${group.id}`),\n    run: sumAmounts\n  });\n\n  sheet.get().createDynamic(sheetName, 'total-spent', {\n    initialValue: 0,\n    refresh: true,\n    dependencies: expenseCategories.map(\n      cat => `${sheetName}!spent-with-carryover-${cat.id}`\n    ),\n    run: sumAmounts\n  });\n\n  sheet.get().createDynamic(sheetName, 'total-income', {\n    initialValue: 0,\n    dependencies: [`group-sum-amount-${incomeGroup.id}`],\n    run: amount => amount\n  });\n\n  sheet.get().createDynamic(sheetName, 'total-leftover', {\n    initialValue: 0,\n    dependencies: ['total-budgeted', 'total-spent'],\n    run: sumAmounts\n  });\n\n  sheet.get().createDynamic(sheetName, 'total-budget-income', {\n    initialValue: 0,\n    dependencies: [`group-budget-${incomeGroup.id}`],\n    run: amount => amount\n  });\n\n  sheet.get().createDynamic(sheetName, 'total-saved', {\n    initialValue: 0,\n    dependencies: ['total-budget-income', 'total-budgeted'],\n    run: (income, budgeted) => {\n      return income - budgeted;\n    }\n  });\n\n  sheet.get().createDynamic(sheetName, 'real-saved', {\n    initialValue: 0,\n    dependencies: ['total-income', 'total-spent'],\n    run: (income, spent) => {\n      return income - -spent;\n    }\n  });\n}\n","import * as sheet from '../sheet';\nimport * as monthUtils from '../../shared/months';\nimport { number, sumAmounts, flatten2, unflatten2 } from './util';\nconst { resolveName } = require('../spreadsheet/util');\n\nfunction getBlankSheet(months) {\n  let blankMonth = monthUtils.prevMonth(months[0]);\n  return monthUtils.sheetForMonth(blankMonth, 'rollover');\n}\n\nexport function createBlankCategory(cat, months) {\n  if (months.length > 0) {\n    let sheetName = getBlankSheet(months);\n    sheet.get().createStatic(sheetName, `carryover-${cat.id}`, false);\n    sheet.get().createStatic(sheetName, `leftover-${cat.id}`, 0);\n    sheet.get().createStatic(sheetName, `leftover-pos-${cat.id}`, 0);\n  }\n}\n\nfunction createBlankMonth(categories, sheetName, months) {\n  sheet.get().createStatic(sheetName, 'is-blank', true);\n  sheet.get().createStatic(sheetName, 'to-budget', 0);\n  sheet.get().createStatic(sheetName, 'buffered', 0);\n\n  categories.forEach(cat => createBlankCategory(cat, months));\n}\n\nexport function createCategory(cat, sheetName, prevSheetName) {\n  if (!cat.is_income) {\n    sheet.get().createStatic(sheetName, `budget-${cat.id}`, 0);\n\n    // This makes the app more robust by \"fixing up\" null budget values.\n    // Those should not be allowed, but in case somehow a null value\n    // ends up there, we are resilient to it. Preferrably the\n    // spreadsheet would have types and be more strict about what is\n    // allowed to be set.\n    if (sheet.get().getCellValue(sheetName, `budget-${cat.id}`) == null) {\n      sheet.get().set(resolveName(sheetName, `budget-${cat.id}`), 0);\n    }\n\n    sheet.get().createStatic(sheetName, `carryover-${cat.id}`, false);\n\n    sheet.get().createDynamic(sheetName, `leftover-${cat.id}`, {\n      initialValue: 0,\n      dependencies: [\n        `budget-${cat.id}`,\n        `sum-amount-${cat.id}`,\n        `${prevSheetName}!carryover-${cat.id}`,\n        `${prevSheetName}!leftover-${cat.id}`,\n        `${prevSheetName}!leftover-pos-${cat.id}`\n      ],\n      run: (budgeted, spent, prevCarryover, prevLeftover, prevLeftoverPos) => {\n        return (\n          number(budgeted) +\n          number(spent) +\n          (prevCarryover ? number(prevLeftover) : number(prevLeftoverPos))\n        );\n      }\n    });\n\n    sheet.get().createDynamic(sheetName, 'leftover-pos-' + cat.id, {\n      initialValue: 0,\n      dependencies: [`leftover-${cat.id}`],\n      run: leftover => {\n        return leftover < 0 ? 0 : leftover;\n      }\n    });\n  }\n}\n\nexport function createSummary(groups, categories, prevSheetName, sheetName) {\n  let incomeGroup = groups.filter(group => group.is_income)[0];\n  let expenseCategories = categories.filter(cat => !cat.is_income);\n\n  sheet.get().createStatic(sheetName, 'buffered', 0);\n\n  sheet.get().createDynamic(sheetName, 'from-last-month', {\n    initialValue: 0,\n    dependencies: [`${prevSheetName}!to-budget`, `${prevSheetName}!buffered`],\n    run: (toBudget, buffered) => number(toBudget) + number(buffered)\n  });\n\n  // Alias the group income total to `total-income`\n  sheet.get().createDynamic(sheetName, 'total-income', {\n    initialValue: 0,\n    dependencies: [`group-sum-amount-${incomeGroup.id}`],\n    run: amount => amount\n  });\n\n  sheet.get().createDynamic(sheetName, 'available-funds', {\n    initialValue: 0,\n    dependencies: ['total-income', 'from-last-month'],\n    run: (income, fromLastMonth) => number(income) + number(fromLastMonth)\n  });\n\n  sheet.get().createDynamic(sheetName, 'last-month-overspent', {\n    initialValue: 0,\n    dependencies: flatten2(\n      expenseCategories.map(cat => [\n        `${prevSheetName}!leftover-${cat.id}`,\n        `${prevSheetName}!carryover-${cat.id}`\n      ])\n    ),\n    run: (...data) => {\n      data = unflatten2(data);\n      return data.reduce((total, [leftover, carryover]) => {\n        if (carryover) {\n          return total;\n        }\n        return total + Math.min(0, number(leftover));\n      }, 0);\n    }\n  });\n\n  sheet.get().createDynamic(sheetName, 'total-budgeted', {\n    initialValue: 0,\n    dependencies: groups\n      .filter(group => !group.is_income)\n      .map(group => `group-budget-${group.id}`),\n    run: (...amounts) => {\n      // Negate budgeted amount\n      return -sumAmounts(...amounts);\n    }\n  });\n\n  sheet.get().createDynamic(sheetName, 'buffered', { initialValue: 0 });\n\n  sheet.get().createDynamic(sheetName, 'to-budget', {\n    initialValue: 0,\n    dependencies: [\n      'available-funds',\n      'last-month-overspent',\n      'total-budgeted',\n      'buffered'\n    ],\n    run: (available, lastOverspent, totalBudgeted, buffered) => {\n      return (\n        number(available) +\n        number(lastOverspent) +\n        number(totalBudgeted) -\n        number(buffered)\n      );\n    }\n  });\n\n  sheet.get().createDynamic(sheetName, 'total-spent', {\n    initialValue: 0,\n    dependencies: groups\n      .filter(group => !group.is_income)\n      .map(group => `group-sum-amount-${group.id}`),\n    run: sumAmounts\n  });\n\n  sheet.get().createDynamic(sheetName, 'total-leftover', {\n    initialValue: 0,\n    dependencies: groups\n      .filter(group => !group.is_income)\n      .map(group => `group-leftover-${group.id}`),\n    run: sumAmounts\n  });\n}\n\nexport function createBudget(meta, categories, months) {\n  // The spreadsheet is now strict - so we need to fill in some\n  // default values for the month before the first month. Only do this\n  // if it doesn't already exist\n  let blankSheet = getBlankSheet(months);\n  if (meta.blankSheet !== blankSheet) {\n    sheet.get().clearSheet(meta.blankSheet);\n    createBlankMonth(categories, blankSheet, months);\n    meta.blankSheet = blankSheet;\n  }\n}\n","import { number } from '../spreadsheet/globals';\n\nexport { number } from '../spreadsheet/globals';\n\nexport function sumAmounts(...amounts) {\n  return amounts.reduce((total, amount) => {\n    return total + number(amount);\n  }, 0);\n}\n\nexport function flatten2(arr) {\n  return Array.prototype.concat.apply([], arr);\n}\n\nexport function unflatten2(arr) {\n  let res = [];\n  for (let i = 0; i < arr.length; i += 2) {\n    res.push([arr[i], arr[i + 1]]);\n  }\n  return res;\n}\n\n","import fs from '../platform/server/fs';\nimport asyncStorage from '../platform/server/asyncStorage';\nimport { fetch } from '../platform/server/fetch';\nimport * as monthUtils from '../shared/months';\nimport * as sqlite from '../platform/server/sqlite';\nimport * as prefs from './prefs';\nimport { getServer } from './server-config';\nimport { runMutator } from './mutators';\nimport {\n  HTTPError,\n  PostError,\n  FileDownloadError,\n  FileUploadError\n} from './errors';\nimport encryption from './encryption';\nimport { post } from './post';\nlet uuid = require('../platform/uuid');\nlet AdmZip = require('adm-zip');\n\nlet UPLOAD_FREQUENCY_IN_DAYS = 7;\n\nasync function checkHTTPStatus(res) {\n  if (res.status !== 200) {\n    return res.text().then(str => {\n      throw new HTTPError(res.status, str);\n    });\n  } else {\n    return res;\n  }\n}\n\nasync function fetchJSON(...args) {\n  let res = await fetch(...args);\n  res = await checkHTTPStatus(res);\n  return res.json();\n}\n\nexport async function checkKey() {\n  let userToken = await asyncStorage.getItem('user-token');\n\n  let { cloudFileId, encryptKeyId } = prefs.getPrefs();\n\n  let res;\n  try {\n    res = await post(getServer().SYNC_SERVER + '/user-get-key', {\n      token: userToken,\n      fileId: cloudFileId\n    });\n  } catch (e) {\n    console.log(e);\n    return { error: { reason: 'network' } };\n  }\n\n  // This == comparison is important, they could be null or undefined\n  // eslint-disable-next-line\n  return {\n    valid:\n      res.id == encryptKeyId && // eslint-disable-line\n      (encryptKeyId == null || encryption.hasKey(encryptKeyId))\n  };\n}\n\nexport async function resetSyncState(newKeyState) {\n  let userToken = await asyncStorage.getItem('user-token');\n\n  let { cloudFileId } = prefs.getPrefs();\n\n  if (process.env.IS_BETA) {\n    return { error: { reason: 'beta-version' } };\n  }\n\n  try {\n    await post(getServer().SYNC_SERVER + '/reset-user-file', {\n      token: userToken,\n      fileId: cloudFileId\n    });\n  } catch (e) {\n    if (e instanceof PostError) {\n      return {\n        error: {\n          reason: e.reason === 'unauthorized' ? 'unauthorized' : 'network'\n        }\n      };\n    }\n    return { error: { reason: 'internal' } };\n  }\n\n  if (newKeyState) {\n    try {\n      await post(getServer().SYNC_SERVER + '/user-create-key', {\n        token: userToken,\n        fileId: cloudFileId,\n        keyId: newKeyState.key.getId(),\n        keySalt: newKeyState.salt,\n        testContent: newKeyState.testContent\n      });\n    } catch (e) {\n      if (e instanceof PostError) {\n        return { error: { reason: 'network' } };\n      }\n      return { error: { reason: 'internal' } };\n    }\n  }\n\n  return {};\n}\n\nexport async function exportBuffer() {\n  let { id, budgetName } = prefs.getPrefs();\n  if (!budgetName) {\n    return null;\n  }\n\n  let budgetDir = fs.getBudgetDir(id);\n\n  // create zip\n  let zipped = new AdmZip();\n\n  // We run this in a mutator even though its not mutating anything\n  // because we are reading the sqlite file from disk. We want to make\n  // sure that we get a valid snapshot of it so we want this to be\n  // serialized with all other mutations.\n  await runMutator(async () => {\n    let rawDbContent = await fs.readFile(\n      fs.join(budgetDir, 'db.sqlite'),\n      'binary'\n    );\n\n    // Do some post-processing of the database. We NEVER upload the cache with\n    // the database; this forces new downloads to always recompute everything\n    // which is not only safer, but reduces the filesize a lot.\n    let memDb = await sqlite.openDatabase(rawDbContent);\n    sqlite.execQuery(\n      memDb,\n      `\n        DELETE FROM kvcache;\n        DELETE FROM kvcache_key;\n      `\n    );\n\n    let dbContent = sqlite.exportDatabase(memDb);\n    sqlite.closeDatabase(memDb);\n\n    // mark it as a file that needs a new clock so when a new client\n    // downloads it, it'll get set to a unique node\n    let meta = JSON.parse(\n      await fs.readFile(fs.join(budgetDir, 'metadata.json'))\n    );\n\n    meta.resetClock = true;\n    let metaContent = Buffer.from(JSON.stringify(meta), 'utf8');\n\n    zipped.addFile('db.sqlite', dbContent);\n    zipped.addFile('metadata.json', metaContent);\n  });\n\n  return Buffer.from(zipped.toBuffer());\n}\n\nexport async function importBuffer(fileData, buffer) {\n  let zipped = new AdmZip(buffer);\n  let entries = zipped.getEntries();\n  let dbEntry = entries.find(e => e.entryName.includes('db.sqlite'));\n  let metaEntry = entries.find(e => e.entryName.includes('metadata.json'));\n\n  if (!dbEntry || !metaEntry) {\n    throw FileDownloadError('invalid-zip-file');\n  }\n\n  let dbContent = zipped.readFile(dbEntry);\n  let metaContent = zipped.readFile(metaEntry);\n\n  let meta;\n  try {\n    meta = JSON.parse(metaContent.toString('utf8'));\n  } catch (err) {\n    throw FileDownloadError('invalid-meta-file');\n  }\n\n  // Update the metadata. The stored file on the server might be\n  // out-of-date with a few keys\n  meta = {\n    ...meta,\n    cloudFileId: fileData.fileId,\n    groupId: fileData.groupId,\n    lastUploaded: monthUtils.currentDay(),\n    encryptKeyId: fileData.encryptMeta ? fileData.encryptMeta.keyId : null\n  };\n\n  let budgetDir = fs.getBudgetDir(meta.id);\n\n  if (await fs.exists(budgetDir)) {\n    // Don't remove the directory so that backups are retained\n    let dbFile = fs.join(budgetDir, 'db.sqlite');\n    let metaFile = fs.join(budgetDir, 'metadata.json');\n\n    if (await fs.exists(dbFile)) {\n      await fs.removeFile(dbFile);\n    }\n    if (await fs.exists(metaFile)) {\n      await fs.removeFile(metaFile);\n    }\n  } else {\n    await fs.mkdir(budgetDir);\n  }\n\n  await fs.writeFile(fs.join(budgetDir, 'db.sqlite'), dbContent);\n  await fs.writeFile(fs.join(budgetDir, 'metadata.json'), JSON.stringify(meta));\n\n  return { id: meta.id };\n}\n\nexport async function upload() {\n  let userToken = await asyncStorage.getItem('user-token');\n  if (!userToken) {\n    throw FileUploadError('unauthorized');\n  }\n\n  // We never change the server from the beta version\n  if (process.env.IS_BETA) {\n    throw FileUploadError('beta-version');\n  }\n\n  let zipContent = await exportBuffer();\n  if (zipContent == null) {\n    return;\n  }\n\n  let { id, groupId, budgetName, cloudFileId, encryptKeyId } = prefs.getPrefs();\n  let uploadContent = zipContent;\n  let uploadMeta = null;\n\n  // The upload process encrypts with the key tagged in the prefs for\n  // the file. It will upload the file and the server is responsible\n  // for checking that the key is up-to-date and rejecting it if not\n  if (encryptKeyId) {\n    let encrypted;\n    try {\n      encrypted = await encryption.encrypt(zipContent, encryptKeyId);\n    } catch (e) {\n      throw FileUploadError('encrypt-failure', {\n        isMissingKey: e.message === 'missing-key'\n      });\n    }\n    uploadContent = encrypted.value;\n    uploadMeta = encrypted.meta;\n  }\n\n  if (!cloudFileId) {\n    cloudFileId = uuid.v4Sync();\n  }\n\n  let res;\n  try {\n    res = await fetchJSON(getServer().SYNC_SERVER + '/upload-user-file', {\n      method: 'POST',\n      headers: {\n        'Content-Length': uploadContent.length,\n        'Content-Type': 'application/encrypted-file',\n        'X-ACTUAL-TOKEN': userToken,\n        'X-ACTUAL-FILE-ID': cloudFileId,\n        'X-ACTUAL-NAME': encodeURIComponent(budgetName),\n        'X-ACTUAL-FORMAT': 2,\n        ...(uploadMeta\n          ? { 'X-ACTUAL-ENCRYPT-META': JSON.stringify(uploadMeta) }\n          : null),\n        ...(groupId ? { 'X-ACTUAL-GROUP-ID': groupId } : null)\n      },\n      body: uploadContent\n    });\n  } catch (err) {\n    console.log('Upload failure', err);\n\n    let reason = err instanceof PostError ? err.reason : 'network';\n\n    if (err instanceof PostError) {\n      throw new FileUploadError(\n        err.reason === 'unauthorized' ? 'unauthorized' : err.reason || 'network'\n      );\n    }\n\n    throw FileUploadError('internal');\n  }\n\n  if (res.status === 'ok') {\n    // Only save it if we are still working on the same file\n    if (prefs.getPrefs() && prefs.getPrefs().id === id) {\n      await prefs.savePrefs({\n        lastUploaded: monthUtils.currentDay(),\n        cloudFileId,\n        groupId: res.groupId\n      });\n    }\n  } else {\n    throw FileUploadError('internal');\n  }\n}\n\nexport async function possiblyUpload() {\n  let { cloudFileId, groupId, lastUploaded, id } = prefs.getPrefs();\n\n  let threshold =\n    lastUploaded && monthUtils.addDays(lastUploaded, UPLOAD_FREQUENCY_IN_DAYS);\n  let currentDay = monthUtils.currentDay();\n\n  // We only want to try to upload every UPLOAD_FREQUENCY_IN_DAYS days\n  if (lastUploaded && currentDay < threshold) {\n    return;\n  }\n\n  // We only want to upload existing cloud files that are part of a\n  // valid group\n  if (!cloudFileId || !groupId) {\n    return;\n  }\n\n  // Don't block on uploading\n  upload().catch(err => {});\n}\n\nexport async function removeFile(fileId) {\n  const [[, userToken]] = await asyncStorage.multiGet(['user-token']);\n\n  await post(getServer().SYNC_SERVER + '/delete-user-file', {\n    token: userToken,\n    fileId\n  });\n}\n\nexport async function listRemoteFiles() {\n  let userToken = await asyncStorage.getItem('user-token');\n  if (!userToken) {\n    return null;\n  }\n\n  let res;\n  try {\n    res = await fetchJSON(getServer().SYNC_SERVER + '/list-user-files', {\n      headers: {\n        'X-ACTUAL-TOKEN': userToken\n      }\n    });\n  } catch (e) {\n    console.log('Error', e);\n    return null;\n  }\n\n  if (res.status === 'error') {\n    return null;\n  }\n\n  return res.data.map(file => ({\n    ...file,\n    hasKey: encryption.hasKey(file.encryptKeyId)\n  }));\n}\n\nexport async function download(fileId, replace) {\n  let userToken = await asyncStorage.getItem('user-token');\n\n  let buffer;\n  try {\n    buffer = await fetch(getServer().SYNC_SERVER + '/download-user-file', {\n      headers: {\n        'X-ACTUAL-TOKEN': userToken,\n        'X-ACTUAL-FILE-ID': fileId\n      }\n    })\n      .then(checkHTTPStatus)\n      .then(res => {\n        if (res.arrayBuffer) {\n          return res.arrayBuffer().then(ab => Buffer.from(ab));\n        }\n        return res.buffer();\n      });\n  } catch (err) {\n    console.log('Download failure', err);\n    throw FileDownloadError('download-failure');\n  }\n\n  let res;\n  try {\n    res = await fetchJSON(getServer().SYNC_SERVER + '/get-user-file-info', {\n      headers: {\n        'X-ACTUAL-TOKEN': userToken,\n        'X-ACTUAL-FILE-ID': fileId\n      }\n    });\n  } catch (err) {\n    throw FileDownloadError('internal', { fileId });\n  }\n\n  if (res.status !== 'ok') {\n    throw FileDownloadError('internal', { fileId });\n  }\n  let fileData = res.data;\n\n  // The download process checks if the server gave us decrypt\n  // information. It is assumed that this key has already been loaded\n  // in, which is done in a previous step\n  if (fileData.encryptMeta) {\n    try {\n      buffer = await encryption.decrypt(buffer, fileData.encryptMeta);\n    } catch (e) {\n      throw FileDownloadError('decrypt-failure', {\n        isMissingKey: e.message === 'missing-key'\n      });\n    }\n  }\n\n  return importBuffer(fileData, buffer, replace);\n}\n","import LRU from 'lru-cache';\nimport * as sqlite from '../../platform/server/sqlite';\nimport fs from '../../platform/server/fs';\nimport { sendMessages, batchMessages } from '../sync';\nimport { schema, schemaConfig } from '../aql/schema';\nimport {\n  accountModel,\n  categoryModel,\n  categoryGroupModel,\n  payeeModel,\n  payeeRuleModel\n} from '../models';\nimport { groupById } from '../../shared/util';\nimport Timestamp, {\n  makeClock,\n  setClock,\n  serializeClock,\n  deserializeClock,\n  makeClientId\n} from '../timestamp';\nimport {\n  convertForInsert,\n  convertForUpdate,\n  convertFromSelect\n} from '../aql/schema-helpers';\nimport { shoveSortOrders, SORT_INCREMENT } from './sort';\n\nexport { toDateRepr, fromDateRepr } from '../models';\n\nconst uuid = require('../../platform/uuid');\n\nlet dbPath;\nlet db;\n\n// Util\n\nexport function getDatabasePath() {\n  return dbPath;\n}\n\nexport async function openDatabase(id) {\n  if (db) {\n    await sqlite.closeDatabase(db);\n  }\n\n  dbPath = fs.join(fs.getBudgetDir(id), 'db.sqlite');\n  setDatabase(await sqlite.openDatabase(dbPath));\n\n  // await execQuery('PRAGMA journal_mode = WAL');\n}\n\nexport async function reopenDatabase() {\n  await sqlite.closeDatabase(db);\n  setDatabase(await sqlite.openDatabase(dbPath));\n}\n\nexport async function closeDatabase() {\n  if (db) {\n    await sqlite.closeDatabase(db);\n    setDatabase(null);\n  }\n}\n\nexport function setDatabase(db_) {\n  db = db_;\n  resetQueryCache();\n}\n\nexport function getDatabase() {\n  return db;\n}\n\nexport async function loadClock() {\n  let row = await first('SELECT * FROM messages_clock');\n  if (row) {\n    let clock = deserializeClock(row.clock);\n    setClock(clock);\n  } else {\n    // No clock exists yet (first run of the app), so create a default\n    // one.\n    let timestamp = new Timestamp(0, 0, makeClientId());\n    let clock = makeClock(timestamp);\n    setClock(clock);\n\n    await runQuery('INSERT INTO messages_clock (id, clock) VALUES (?, ?)', [\n      1,\n      serializeClock(clock)\n    ]);\n  }\n}\n\n// Functions\n\nexport function runQuery(sql, params, fetchAll) {\n  // const unrecord = perf.record('sqlite');\n  const result = sqlite.runQuery(db, sql, params, fetchAll);\n  // unrecord();\n  return result;\n}\n\nexport function execQuery(sql) {\n  sqlite.execQuery(db, sql);\n}\n\n// This manages an LRU cache of prepared query statements. This is\n// only needed in hot spots when you are running lots of queries.\nlet _queryCache = new LRU({ max: 100 });\nexport function cache(sql) {\n  let cached = _queryCache.get(sql);\n  if (cached) {\n    return cached;\n  }\n\n  let prepared = sqlite.prepare(db, sql);\n  _queryCache.set(sql, prepared);\n  return prepared;\n}\n\nfunction resetQueryCache() {\n  _queryCache = new LRU({ max: 100 });\n}\n\nexport function transaction(fn) {\n  return sqlite.transaction(db, fn);\n}\n\nexport function asyncTransaction(fn) {\n  return sqlite.asyncTransaction(db, fn);\n}\n\n// This function is marked as async because `runQuery` is no longer\n// async. We return a promise here until we've audited all the code to\n// make sure nothing calls `.then` on this.\nexport async function all(sql, params) {\n  return runQuery(sql, params, true);\n}\n\nexport async function first(sql, params) {\n  const arr = await runQuery(sql, params, true);\n  return arr.length === 0 ? null : arr[0];\n}\n\n// The underlying sql system is now sync, but we can't update `first` yet\n// without auditing all uses of it\nexport function firstSync(sql, params) {\n  const arr = runQuery(sql, params, true);\n  return arr.length === 0 ? null : arr[0];\n}\n\n// This function is marked as async because `runQuery` is no longer\n// async. We return a promise here until we've audited all the code to\n// make sure nothing calls `.then` on this.\nexport async function run(sql, params) {\n  return runQuery(sql, params);\n}\n\nexport async function select(table, id) {\n  const rows = await runQuery(\n    'SELECT * FROM ' + table + ' WHERE id = ?',\n    [id],\n    true\n  );\n  return rows[0];\n}\n\nexport async function update(table, params) {\n  let fields = Object.keys(params).filter(k => k !== 'id');\n\n  if (params.id == null) {\n    throw new Error('update: id is required');\n  }\n\n  await sendMessages(\n    fields.map(k => {\n      return {\n        dataset: table,\n        row: params.id,\n        column: k,\n        value: params[k],\n        timestamp: Timestamp.send()\n      };\n    })\n  );\n}\n\nexport async function insertWithUUID(table, row) {\n  if (!row.id) {\n    row = { ...row, id: uuid.v4Sync() };\n  }\n\n  await insert(table, row);\n\n  // We can't rely on the return value of insert because if the\n  // primary key is text, sqlite returns the internal row id which we\n  // don't care about. We want to return the generated UUID.\n  return row.id;\n}\n\nexport async function insert(table, row) {\n  let fields = Object.keys(row).filter(k => k !== 'id');\n\n  if (row.id == null) {\n    throw new Error('insert: id is required');\n  }\n\n  await sendMessages(\n    fields.map(k => {\n      return {\n        dataset: table,\n        row: row.id,\n        column: k,\n        value: row[k],\n        timestamp: Timestamp.send()\n      };\n    })\n  );\n}\n\nexport async function delete_(table, id) {\n  await sendMessages([\n    {\n      dataset: table,\n      row: id,\n      column: 'tombstone',\n      value: 1,\n      timestamp: Timestamp.send()\n    }\n  ]);\n}\n\nexport async function selectWithSchema(table, sql, params) {\n  let rows = await runQuery(sql, params, true);\n  return rows\n    .map(row => convertFromSelect(schema, schemaConfig, table, row))\n    .filter(Boolean);\n}\n\nexport async function selectFirstWithSchema(table, sql, params) {\n  let rows = await selectWithSchema(table, sql, params);\n  return rows.length > 0 ? rows[0] : null;\n}\n\nexport function insertWithSchema(table, row) {\n  // Even though `insertWithUUID` does this, we need to do it here so\n  // the schema validation passes\n  if (!row.id) {\n    row = { ...row, id: uuid.v4Sync() };\n  }\n\n  return insertWithUUID(\n    table,\n    convertForInsert(schema, schemaConfig, table, row)\n  );\n}\n\nexport function updateWithSchema(table, fields) {\n  return update(table, convertForUpdate(schema, schemaConfig, table, fields));\n}\n\n// Data-specific functions. Ideally this would be split up into\n// different files\n\nexport async function getCategories() {\n  return all(`\n    SELECT c.* FROM categories c\n      LEFT JOIN category_groups cg ON c.cat_group = cg.id\n      WHERE c.tombstone = 0\n      ORDER BY cg.sort_order, cg.id, c.sort_order, c.id\n  `);\n}\n\nexport async function getCategoriesGrouped() {\n  const groups = await all(\n    'SELECT * FROM category_groups WHERE tombstone = 0 ORDER BY is_income, sort_order, id'\n  );\n  const rows = await all(`\n    SELECT * FROM categories WHERE tombstone = 0\n      ORDER BY sort_order, id\n  `);\n\n  return groups.map(group => {\n    return {\n      ...group,\n      categories: rows.filter(row => row.cat_group === group.id)\n    };\n  });\n}\n\nexport async function insertCategoryGroup(group) {\n  const lastGroup = await first(`\n    SELECT sort_order FROM category_groups WHERE tombstone = 0 ORDER BY sort_order DESC, id DESC LIMIT 1\n  `);\n  const sort_order = (lastGroup ? lastGroup.sort_order : 0) + SORT_INCREMENT;\n\n  group = {\n    ...categoryGroupModel.validate(group),\n    sort_order: sort_order\n  };\n  return insertWithUUID('category_groups', group);\n}\n\nexport function updateCategoryGroup(group) {\n  group = categoryGroupModel.validate(group, { update: true });\n  return update('category_groups', group);\n}\n\nexport async function moveCategoryGroup(id, targetId) {\n  const groups = await all(\n    `SELECT id, sort_order FROM category_groups WHERE tombstone = 0 ORDER BY sort_order, id`\n  );\n\n  const { updates, sort_order } = shoveSortOrders(groups, targetId);\n  for (let info of updates) {\n    await update('category_groups', info);\n  }\n  await update('category_groups', { id, sort_order });\n}\n\nexport async function deleteCategoryGroup(group, transferId) {\n  const categories = await all('SELECT * FROM categories WHERE cat_group = ?', [\n    group.id\n  ]);\n\n  // Delete all the categories within a group\n  await Promise.all(categories.map(cat => deleteCategory(cat, transferId)));\n  await delete_('category_groups', group.id);\n}\n\nexport async function insertCategory(category, { atEnd } = {}) {\n  let sort_order;\n\n  let id_;\n  await batchMessages(async () => {\n    if (atEnd) {\n      const lastCat = await first(`\n        SELECT sort_order FROM categories WHERE tombstone = 0 ORDER BY sort_order DESC, id DESC LIMIT 1\n      `);\n      sort_order = (lastCat ? lastCat.sort_order : 0) + SORT_INCREMENT;\n    } else {\n      // Unfortunately since we insert at the beginning, we need to shove\n      // the sort orders to make sure there's room for it\n      const categories = await all(\n        `SELECT id, sort_order FROM categories WHERE cat_group = ? AND tombstone = 0 ORDER BY sort_order, id`,\n        [category.cat_group]\n      );\n\n      const { updates, sort_order: order } = shoveSortOrders(\n        categories,\n        categories.length > 0 ? categories[0].id : null\n      );\n      for (let info of updates) {\n        await update('categories', info);\n      }\n      sort_order = order;\n    }\n\n    category = {\n      ...categoryModel.validate(category),\n      sort_order: sort_order\n    };\n\n    const id = await insertWithUUID('categories', category);\n    // Create an entry in the mapping table that points it to itself\n    await insert('category_mapping', { id, transferId: id });\n    id_ = id;\n  });\n  return id_;\n}\n\nexport function updateCategory(category) {\n  category = categoryModel.validate(category, { update: true });\n  return update('categories', category);\n}\n\nexport async function moveCategory(id, groupId, targetId) {\n  if (!groupId) {\n    throw new Error('moveCategory: groupId is required');\n  }\n\n  const categories = await all(\n    `SELECT id, sort_order FROM categories WHERE cat_group = ? AND tombstone = 0 ORDER BY sort_order, id`,\n    [groupId]\n  );\n\n  const { updates, sort_order } = shoveSortOrders(categories, targetId);\n  for (let info of updates) {\n    await update('categories', info);\n  }\n  await update('categories', { id, sort_order, cat_group: groupId });\n}\n\nexport async function deleteCategory(category, transferId) {\n  if (transferId) {\n    // We need to update all the deleted categories that currently\n    // point to the one we're about to delete so they all are\n    // \"forwarded\" to the new transferred category.\n    const existingTransfers = await all(\n      'SELECT * FROM category_mapping WHERE transferId = ?',\n      [category.id]\n    );\n    for (let mapping of existingTransfers) {\n      await update('category_mapping', { id: mapping.id, transferId });\n    }\n\n    // Finally, map the category we're about to delete to the new one\n    await update('category_mapping', { id: category.id, transferId });\n  }\n\n  return delete_('categories', category.id);\n}\n\nexport async function getPayee(id) {\n  return first(`SELECT * FROM payees WHERE id = ?`, [id]);\n}\n\nexport async function insertPayee(payee) {\n  payee = payeeModel.validate(payee);\n  let id;\n  await batchMessages(async () => {\n    id = await insertWithUUID('payees', payee);\n    await insert('payee_mapping', { id, targetId: id });\n  });\n  return id;\n}\n\nexport async function deletePayee(payee) {\n  let { transfer_acct } = await first('SELECT * FROM payees WHERE id = ?', [\n    payee.id\n  ]);\n  if (transfer_acct) {\n    // You should never be able to delete transfer payees\n    return;\n  }\n\n  // let mappings = await all('SELECT id FROM payee_mapping WHERE targetId = ?', [\n  //   payee.id\n  // ]);\n  // await Promise.all(\n  //   mappings.map(m => update('payee_mapping', { id: m.id, targetId: null }))\n  // );\n\n  let rules = await all('SELECT * FROM payee_rules WHERE payee_id = ?', [\n    payee.id\n  ]);\n  await Promise.all(rules.map(rule => deletePayeeRule({ id: rule.id })));\n  return delete_('payees', payee.id);\n}\n\nexport async function deleteTransferPayee(payee) {\n  // This allows deleting transfer payees\n  return delete_('payees', payee.id);\n}\n\nexport function updatePayee(payee) {\n  payee = payeeModel.validate(payee, { update: true });\n  return update('payees', payee);\n}\n\nexport async function mergePayees(target, ids) {\n  // Load in payees so we can check some stuff\n  let payees = groupById(await all('SELECT * FROM payees'));\n\n  // Filter out any transfer payees\n  if (payees[target].transfer_acct != null) {\n    return;\n  }\n  ids = ids.filter(id => payees[id].transfer_acct == null);\n\n  await batchMessages(async () => {\n    await Promise.all(\n      ids.map(async id => {\n        let mappings = await all(\n          'SELECT id FROM payee_mapping WHERE targetId = ?',\n          [id]\n        );\n        await Promise.all(\n          mappings.map(m =>\n            update('payee_mapping', { id: m.id, targetId: target })\n          )\n        );\n      })\n    );\n\n    return Promise.all(\n      ids.map(id =>\n        Promise.all([\n          update('payee_mapping', { id, targetId: target }),\n          delete_('payees', id)\n        ])\n      )\n    );\n  });\n}\n\nexport function getPayees() {\n  return all(`\n    SELECT p.*, COALESCE(a.name, p.name) AS name FROM payees p\n    LEFT JOIN accounts a ON (p.transfer_acct = a.id AND a.tombstone = 0)\n    WHERE p.tombstone = 0 AND (p.transfer_acct IS NULL OR a.id IS NOT NULL)\n    ORDER BY p.transfer_acct IS NULL DESC, p.name COLLATE NOCASE\n  `);\n}\n\nexport async function getOrphanedPayees() {\n  let rows = await all(`\n    SELECT p.id FROM payees p\n    LEFT JOIN payee_mapping pm ON pm.id = p.id\n    LEFT JOIN v_transactions_internal_alive t ON t.payee = pm.targetId\n    WHERE p.tombstone = 0 AND p.transfer_acct IS NULL AND t.id IS NULL\n  `);\n  return rows.map(row => row.id);\n}\n\nexport async function getPayeeByName(name) {\n  return first(`SELECT * FROM payees WHERE LOWER(name) = ? AND tombstone = 0`, [\n    name.toLowerCase()\n  ]);\n}\n\nexport function insertPayeeRule(rule) {\n  rule = payeeRuleModel.validate(rule);\n  return insertWithUUID('payee_rules', rule);\n}\n\nexport function deletePayeeRule(rule) {\n  return delete_('payee_rules', rule.id);\n}\n\nexport function updatePayeeRule(rule) {\n  rule = payeeModel.validate(rule, { update: true });\n  return update('payee_rules', rule);\n}\n\nexport function getPayeeRules(id) {\n  return all(\n    `SELECT pr.* FROM payee_rules pr\n     LEFT JOIN payee_mapping pm ON pm.id = pr.payee_id\n     WHERE pm.targetId = ? AND pr.tombstone = 0`,\n    [id]\n  );\n}\n\nexport function getAccounts() {\n  return all(\n    `SELECT a.*, b.name as bankName, b.id as bankId FROM accounts a\n       LEFT JOIN banks b ON a.bank = b.id\n       WHERE a.tombstone = 0\n       ORDER BY sort_order, name`\n  );\n}\n\nexport async function insertAccount(account) {\n  // Default to checking. Makes it a lot easier for tests and is\n  // generally harmless.\n  if (account.type === undefined) {\n    account = { ...account, type: 'checking' };\n  }\n\n  const accounts = await all(\n    'SELECT * FROM accounts WHERE offbudget = ? ORDER BY sort_order, name',\n    [account.offbudget != null ? account.offbudget : 0]\n  );\n\n  // Don't pass a target in, it will default to appending at the end\n  let { sort_order } = shoveSortOrders(accounts);\n\n  account = accountModel.validate({ ...account, sort_order });\n  return insertWithUUID('accounts', account);\n}\n\nexport function updateAccount(account) {\n  account = accountModel.validate(account, { update: true });\n  return update('accounts', account);\n}\n\nexport function deleteAccount(account) {\n  return delete_('accounts', account.id);\n}\n\nexport async function moveAccount(id, targetId) {\n  let account = await first('SELECT * FROM accounts WHERE id = ?', [id]);\n  let accounts;\n  if (account.closed) {\n    accounts = await all(\n      `SELECT id, sort_order FROM accounts WHERE closed = 1 ORDER BY sort_order, name`\n    );\n  } else {\n    accounts = await all(\n      `SELECT id, sort_order FROM accounts WHERE tombstone = 0 AND offbudget = ? ORDER BY sort_order, name`,\n      [account.offbudget]\n    );\n  }\n\n  const { updates, sort_order } = shoveSortOrders(accounts, targetId);\n  await batchMessages(() => {\n    for (let info of updates) {\n      update('accounts', info);\n    }\n    update('accounts', { id, sort_order });\n  });\n}\n\nexport async function getTransaction(id) {\n  let rows = await selectWithSchema(\n    'transactions',\n    'SELECT * FROM v_transactions WHERE id = ?',\n    [id]\n  );\n  return rows[0];\n}\n\nfunction _addFragmentForAccount(accountId, addWhere, options = {}) {\n  let { showClosed = false, showOffbudget = true } = options;\n\n  let fragment = addWhere ? ' WHERE (' : ' AND ';\n  let params = [];\n\n  if (accountId) {\n    if (accountId === 'offbudget') {\n      fragment += 'a.closed = 0 AND a.offbudget = 1 ';\n    } else if (accountId === 'budgeted') {\n      fragment += 'a.closed = 0 AND a.offbudget = 0 ';\n    } else if (accountId === 'uncategorized') {\n      fragment += `\n          t.category IS NULL AND a.offbudget = 0 AND isParent = 0 AND (\n            ta.offbudget IS NULL OR ta.offbudget = 1\n          )\n        `;\n    } else {\n      fragment += 'a.id = ? ';\n      params.push(accountId);\n    }\n  } else {\n    fragment += showClosed ? '1' : 'a.closed = 0';\n\n    if (!showOffbudget) {\n      fragment += ' AND a.offbudget = 0';\n    }\n  }\n\n  return { fragment, params };\n}\n\nexport async function getTransactionsByDate(\n  accountId,\n  startDate,\n  endDate,\n  options = {}\n) {\n  throw new Error('`getTransactionsByDate` is deprecated');\n}\n\nexport async function getTransactions(accountId, arg2) {\n  if (arg2 !== undefined) {\n    throw new Error(\n      '`getTransactions` was given a second argument, it now only takes a single argument `accountId`'\n    );\n  }\n\n  return selectWithSchema(\n    'transactions',\n    'SELECT * FROM v_transactions WHERE account = ?',\n    [accountId]\n  );\n}\n\nexport function insertTransaction(transaction) {\n  return insertWithSchema('transactions', transaction);\n}\n\nexport function updateTransaction(transaction) {\n  return updateWithSchema('transactions', transaction);\n}\n\nexport async function deleteTransaction(transaction) {\n  return delete_('transactions', transaction.id);\n}\n","import * as db from './index';\nimport { addSyncListener } from '../sync/index';\n\n// This file keeps all the mappings in memory so we can access it\n// synchronously. This is primarily used in the rules system, but\n// there may be other uses in the future. You don't need to worry\n// about this generally; if you are querying transactions, ids are\n// transparently mapped for you. But if you are building something\n// that stores ids and later uses them, you need to remember to map\n// the ids.\n//\n// IMPORTANT: `loadMappings` must be called first before other modules\n// that listen for sync changes. This must be the first sync listener\n// to run in case other listeners use this mapping table; otherwise\n// they might see stale mappings.\n\nlet allMappings;\nlet unlistenSync;\n\nexport async function loadMappings() {\n  // The mappings are separated into tables specific to the type of\n  // data. But you know, we really could keep a global mapping table.\n  let categories = (await db.all('SELECT * FROM category_mapping')).map(r => [\n    r.id,\n    r.transferId\n  ]);\n  let payees = (await db.all('SELECT * FROM payee_mapping')).map(r => [\n    r.id,\n    r.targetId\n  ]);\n\n  // All ids are unique, so we can just keep a global table of mappings\n  allMappings = new Map(categories.concat(payees));\n\n  if (unlistenSync) {\n    unlistenSync();\n  }\n  unlistenSync = addSyncListener(onApplySync);\n}\n\nfunction onApplySync(oldValues, newValues) {\n  newValues.forEach((items, table) => {\n    if (table.indexOf('mapping') !== -1) {\n      let field = table === 'category_mapping' ? 'transferId' : 'targetId';\n\n      items.forEach(newValue => {\n        allMappings.set(newValue.id, newValue[field]);\n      });\n    }\n  });\n}\n\nexport function getMappings() {\n  return allMappings;\n}\n\nexport function getMapping(id) {\n  return allMappings.get(id) || null;\n}\n","export const SORT_INCREMENT = 16384;\n\nfunction midpoint(items, to) {\n  const below = items[to - 1];\n  const above = items[to];\n\n  if (!below) {\n    return above.sort_order / 2;\n  } else if (!above) {\n    return below.sort_order + SORT_INCREMENT;\n  } else {\n    return (below.sort_order + above.sort_order) / 2;\n  }\n}\n\nexport function shoveSortOrders(items, targetId) {\n  const to = items.findIndex(item => item.id === targetId);\n  const target = items[to];\n  const before = items[to - 1];\n  let updates = [];\n\n  // If no target is specified, append at the end\n  if (!targetId || to === -1) {\n    let order;\n    if (items.length > 0) {\n      // Add a new increment to whatever is the latest sort order\n      order = items[items.length - 1].sort_order + SORT_INCREMENT;\n    } else {\n      // If no items exist, the default is to use the first increment\n      order = SORT_INCREMENT;\n    }\n\n    return { updates, sort_order: order };\n  } else {\n    if (target.sort_order - (before ? before.sort_order : 0) <= 2) {\n      let next = to;\n      let order = (items[next].sort_order | 0) + SORT_INCREMENT;\n      while (next < items.length) {\n        // No need to update it if it's already greater than the current\n        // order. This can happen because there may already be large\n        // gaps\n        if (order <= items[next].sort_order) {\n          break;\n        }\n\n        updates.push({ id: items[next].id, sort_order: order });\n\n        next++;\n        order += SORT_INCREMENT;\n      }\n    }\n\n    return { updates, sort_order: midpoint(items, to) };\n  }\n}\n","export async function incrFetch(\n  runQuery,\n  terms,\n  compare,\n  makeQuery,\n  params = []\n) {\n  let pageCount = 500;\n  let results = [];\n\n  let fetchedIds = new Set();\n\n  for (let i = 0; i < terms.length; i += pageCount) {\n    let slice = terms.slice(i, i + pageCount).filter(id => !fetchedIds.has(id));\n    if (slice.length > 0) {\n      let filter = slice.map(id => compare(id)).join(' OR ');\n      let query = makeQuery('(' + filter + ')');\n\n      let rows = await runQuery(query, params, true);\n      fetchedIds = new Set([...fetchedIds, ...slice]);\n      results = results.concat(rows);\n    }\n  }\n\n  return results;\n}\n\nexport function whereIn(ids, field) {\n  let ids2 = [...new Set(ids)];\n  let filter = `${field} IN (` + ids2.map(id => `'${id}'`).join(',') + ')';\n  return filter;\n}\n","let crypto = require('crypto');\n\nlet ENCRYPTION_ALGORITHM = 'aes-256-gcm';\n\nexport async function sha256String(str) {\n  return crypto\n    .createHash('sha256')\n    .update(str)\n    .digest('base64');\n}\n\nexport function randomBytes(n) {\n  return crypto.randomBytes(n);\n}\n\nexport function encrypt(masterKey, value) {\n  let masterKeyBuffer = masterKey.getValue().raw;\n  // let iv = createKeyBuffer({ numBytes: 12, secret: masterKeyBuffer });\n  let iv = crypto.randomBytes(12);\n  let cipher = crypto.createCipheriv(ENCRYPTION_ALGORITHM, masterKeyBuffer, iv);\n  let encrypted = cipher.update(value);\n  encrypted = Buffer.concat([encrypted, cipher.final()]);\n\n  let authTag = cipher.getAuthTag();\n\n  return {\n    value: encrypted,\n    meta: {\n      keyId: masterKey.getId(),\n      algorithm: ENCRYPTION_ALGORITHM,\n      iv: iv.toString('base64'),\n      authTag: authTag.toString('base64')\n    }\n  };\n}\n\nexport function decrypt(masterKey, encrypted, meta) {\n  let masterKeyBuffer = masterKey.getValue().raw;\n  let { algorithm, iv, authTag } = meta;\n  iv = Buffer.from(iv, 'base64');\n\n  authTag = Buffer.from(authTag, 'base64');\n\n  let decipher = crypto.createDecipheriv(algorithm, masterKeyBuffer, iv);\n  decipher.setAuthTag(authTag);\n\n  let decrypted = decipher.update(encrypted);\n  decrypted = Buffer.concat([decrypted, decipher.final()]);\n  return decrypted;\n}\n\nexport function createKey({ secret, salt }) {\n  let buffer = createKeyBuffer({ secret, salt });\n  return {\n    raw: buffer,\n    base64: buffer.toString('base64')\n  };\n}\n\nexport function importKey(str) {\n  return {\n    raw: Buffer.from(str, 'base64'),\n    base64: str\n  };\n}\n\n/**\n * Generates a Buffer of a desired byte length to be used as either an encryption key or an initialization vector.\n *\n * @private\n * @param {Integer} [numBytes = 32] - Optional, number of bytes to fill the Buffer with.\n * @param {String} [secret = <random bytes>] - Optional, a secret to use as a basis for the key generation algorithm.\n * @returns {Buffer}\n */\nfunction createKeyBuffer({ numBytes, secret, salt }) {\n  return crypto.pbkdf2Sync(\n    secret || crypto.randomBytes(128).toString('base64'),\n    salt || crypto.randomBytes(32).toString('base64'),\n    10000,\n    numBytes || 32,\n    'sha512'\n  );\n}\n","import * as internals from './encryption-internals';\nlet uuid = require('../platform/uuid/index.electron.js');\n\n// A map of all possible master encryption keys to use, keyed by\n// unique id\nlet keys = {};\n\nclass Key {\n  constructor({ id, value }) {\n    this.id = id || uuid.v4Sync();\n  }\n\n  async createFromPassword({ password, salt }) {\n    this.value = await internals.createKey({ secret: password, salt });\n  }\n\n  async createFromBase64(str) {\n    this.value = await internals.importKey(str);\n  }\n\n  getId() {\n    return this.id;\n  }\n\n  getValue() {\n    return this.value;\n  }\n\n  serialize() {\n    return {\n      id: this.id,\n      base64: this.value.base64\n    };\n  }\n}\n\nfunction getKey(keyId) {\n  if (keyId == null || keys[keyId] == null) {\n    throw new Error('missing-key');\n  }\n  return keys[keyId];\n}\n\nfunction hasKey(keyId) {\n  return keyId in keys;\n}\n\nfunction encrypt(value, keyId) {\n  return internals.encrypt(getKey(keyId), value);\n}\n\nfunction decrypt(encrypted, meta) {\n  return internals.decrypt(getKey(meta.keyId), encrypted, meta);\n}\n\nfunction randomBytes(n) {\n  return internals.randomBytes(n);\n}\n\nasync function loadKey(key) {\n  let keyInstance;\n  if (!(key instanceof Key)) {\n    keyInstance = new Key({ id: key.id });\n    await keyInstance.createFromBase64(key.base64);\n  } else {\n    keyInstance = key;\n  }\n\n  keys[keyInstance.getId()] = keyInstance;\n}\n\nfunction unloadKey(key) {\n  delete keys[key.getId()];\n}\n\nfunction unloadAllKeys() {\n  keys = {};\n}\n\nasync function createKey({ id, password, salt }) {\n  let key = new Key({ id });\n  await key.createFromPassword({ password, salt });\n  return key;\n}\n\nexport default {\n  decrypt,\n  encrypt,\n  randomBytes,\n  createKey,\n  loadKey,\n  getKey,\n  hasKey,\n  unloadKey,\n  unloadAllKeys\n};\n","// TODO: normalize error types\nexport class PostError extends Error {\n  constructor(reason, meta) {\n    super('PostError: ' + reason);\n    this.type = 'PostError';\n    this.reason = reason;\n    this.meta = meta;\n  }\n}\n\nexport class HTTPError extends Error {\n  constructor(code, body) {\n    super(`HTTPError: unsuccessful status code (${code}): ${body}`);\n    this.statusCode = code;\n    this.responseBody = body;\n  }\n}\n\nexport class SyncError extends Error {\n  constructor(reason, meta) {\n    super('SyncError: ' + reason);\n    this.reason = reason;\n    this.meta = meta;\n  }\n}\n\nexport class TransactionError extends Error {\n  // eslint-disable-next-line\n  constructor(message) {\n    super(message);\n  }\n}\n\nexport class RuleError extends Error {\n  constructor(type, message) {\n    super('RuleError: ' + message);\n    this.type = type;\n  }\n}\n\nexport function APIError(msg, meta) {\n  return { type: 'APIError', message: msg, meta };\n}\n\nexport function FileDownloadError(reason, meta) {\n  return { type: 'FileDownloadError', reason, meta };\n}\n\nexport function FileUploadError(reason, meta) {\n  return { type: 'FileUploadError', reason, meta };\n}\n\nexport function isCodeError(err) {\n  return err instanceof ReferenceError || err instanceof SyntaxError;\n}\n","import { createApp } from './app';\nconst connection = require('../platform/server/connection');\n\n// Main app\nconst app = createApp();\n\napp.events.on('sync', info => {\n  connection.send('sync-event', info);\n});\n\nexport default app;\n","import './polyfills';\nimport { differenceInDays } from 'date-fns';\nimport asyncStorage from '../platform/server/asyncStorage';\nimport { captureException, captureBreadcrumb } from '../platform/exceptions';\nimport * as prefs from './prefs';\nimport fs from '../platform/server/fs';\nimport * as sqlite from '../platform/server/sqlite';\nimport logger from '../platform/server/log';\nimport Platform from './platform';\nimport * as db from './db';\nimport * as sheet from './sheet';\nimport { withUndo, clearUndo, undo, redo } from './undo';\nimport { updateVersion } from './update';\nimport { Condition, Action, rankRules } from './accounts/rules';\nimport * as rules from './accounts/transaction-rules';\nimport * as mappings from './db/mappings';\nimport { batchUpdateTransactions } from './accounts/transactions';\nimport { FIELD_TYPES as ruleFieldTypes } from '../shared/rules';\nimport {\n  getAvailableBackups,\n  loadBackup,\n  makeBackup,\n  startBackupService,\n  stopBackupService\n} from './backups';\nimport { amountToInteger, stringToInteger } from '../shared/util';\nimport * as monthUtils from '../shared/months';\nimport { fromPlaidAccountType } from '../shared/accounts';\nimport * as budget from './budget/base';\nimport * as bankSync from './accounts/sync';\nimport * as link from './accounts/link';\nimport { uniqueFileName, idFromFileName } from './util/budget-name';\nimport { mutator, runHandler } from './mutators';\nimport * as timestamp from './timestamp';\nimport * as merkle from './merkle';\nimport {\n  initialFullSync,\n  fullSync,\n  batchMessages,\n  setSyncingMode,\n  makeTestMessage,\n  clearFullSyncTimeout,\n  syncAndReceiveMessages,\n  resetSync,\n  repairSync\n} from './sync';\nimport * as syncMigrations from './sync/migrate';\nimport { getStartingBalancePayee } from './accounts/payees';\nimport { parseFile } from './accounts/parse-file';\nimport { exportToCSV, exportQueryToCSV } from './accounts/export-to-csv';\nimport { getServer, setServer } from './server-config';\nimport installAPI from './api';\nimport injectAPI from '@actual-app/api/injected';\nimport * as cloudStorage from './cloud-storage';\nimport encryption from './encryption';\nimport * as tracking from './tracking/events';\nimport { get, post } from './post';\nimport { APIError, TransactionError, PostError, RuleError } from './errors';\nimport { createTestBudget } from '../mocks/budget';\nimport { runQuery as aqlQuery } from './aql/schema/run-query';\nimport { Query } from '../shared/query';\nimport q from '../shared/query';\nimport app from './main-app';\n\n// Apps\nimport schedulesApp from './schedules/app';\nimport budgetApp from './budget/app';\nimport notesApp from './notes/app';\nimport toolsApp from './tools/app';\n\nconst YNAB4 = require('@actual-app/import-ynab4/importer');\nconst YNAB5 = require('@actual-app/import-ynab5/importer');\nconst uuid = require('../platform/uuid');\nconst connection = require('../platform/server/connection');\nconst { resolveName, unresolveName } = require('./spreadsheet/util');\nconst SyncPb = require('./sync/proto/sync_pb');\n\n// let indexeddb = require('../platform/server/indexeddb');\n\nlet VERSION;\nlet DEMO_BUDGET_ID = '_demo-budget';\nlet TEST_BUDGET_ID = '_test-budget';\nlet UNCONFIGURED_SERVER = 'https://not-configured/';\n\n// util\n\nfunction onSheetChange({ names }) {\n  const nodes = names.map(name => {\n    let node = sheet.get()._getNode(name);\n    return { name: node.name, value: node.value };\n  });\n  connection.send('cells-changed', nodes);\n}\n\n// handlers\n\nexport let handlers = {};\n\nhandlers['undo'] = mutator(async function() {\n  return undo();\n});\n\nhandlers['redo'] = mutator(function() {\n  return redo();\n});\n\nhandlers['transactions-batch-update'] = mutator(async function({\n  added,\n  deleted,\n  updated,\n  learnCategories\n}) {\n  return withUndo(async () => {\n    let result = await batchUpdateTransactions({\n      added,\n      updated,\n      deleted,\n      learnCategories\n    });\n\n    // Return all data updates to the frontend\n    return result.updated;\n  });\n});\n\nhandlers['transaction-add'] = mutator(async function(transaction) {\n  await handlers['transactions-batch-update']({ added: [transaction] });\n  return {};\n});\n\nhandlers['transaction-update'] = mutator(async function(transaction) {\n  await handlers['transactions-batch-update']({ updated: [transaction] });\n  return {};\n});\n\nhandlers['transaction-delete'] = mutator(async function(transaction) {\n  await handlers['transactions-batch-update']({ deleted: [transaction] });\n  return {};\n});\n\nhandlers['transactions-filter'] = async function({\n  term,\n  accountId,\n  latestDate,\n  count,\n  notPaged,\n  options = {}\n}) {\n  return db.getTransactions(\n    term,\n    accountId,\n    latestDate,\n    notPaged ? null : count == null ? undefined : count,\n    options\n  );\n};\n\nhandlers['transactions-parse-file'] = async function({ filepath, options }) {\n  return parseFile(filepath, options);\n};\n\nhandlers['transactions-export'] = async function({\n  transactions,\n  accounts,\n  categoryGroups,\n  payees\n}) {\n  return exportToCSV(transactions, accounts, categoryGroups, payees);\n};\n\nhandlers['transactions-export-query'] = async function({ query: queryState }) {\n  return exportQueryToCSV(new Query(queryState));\n};\n\nhandlers['get-categories'] = async function() {\n  return {\n    grouped: await db.getCategoriesGrouped(),\n    list: await db.getCategories()\n  };\n};\n\nhandlers['get-earliest-transaction'] = async function() {\n  let { data } = await aqlQuery(\n    q('transactions')\n      .options({ splits: 'none' })\n      .orderBy({ date: 'asc' })\n      .select('*')\n      .limit(1)\n  );\n  return data[0] || null;\n};\n\nhandlers['get-budget-bounds'] = async function() {\n  return budget.createAllBudgets();\n};\n\nhandlers['rollover-budget-month'] = async function({ month }) {\n  let groups = await db.getCategoriesGrouped();\n  let sheetName = monthUtils.sheetForMonth(month);\n\n  function value(name) {\n    let v = sheet.getCellValue(sheetName, name);\n    return { value: v === '' ? 0 : v, name: resolveName(sheetName, name) };\n  }\n\n  let values = [\n    value('available-funds'),\n    value('last-month-overspent'),\n    value('buffered'),\n    value('total-budgeted'),\n    value('to-budget'),\n\n    value('from-last-month'),\n    value('total-income'),\n    value('total-spent'),\n    value('total-leftover')\n  ];\n\n  for (let group of groups) {\n    if (group.is_income) {\n      values.push(value('total-income'));\n\n      for (let cat of group.categories) {\n        values.push(value(`sum-amount-${cat.id}`));\n      }\n    } else {\n      values = values.concat([\n        value(`group-budget-${group.id}`),\n        value(`group-sum-amount-${group.id}`),\n        value(`group-leftover-${group.id}`)\n      ]);\n\n      for (let cat of group.categories) {\n        values = values.concat([\n          value(`budget-${cat.id}`),\n          value(`sum-amount-${cat.id}`),\n          value(`leftover-${cat.id}`),\n          value(`carryover-${cat.id}`)\n        ]);\n      }\n    }\n  }\n\n  return values;\n};\n\nhandlers['report-budget-month'] = async function({ month }) {\n  let groups = await db.getCategoriesGrouped();\n  let sheetName = monthUtils.sheetForMonth(month);\n\n  function value(name) {\n    let v = sheet.getCellValue(sheetName, name);\n    return { value: v === '' ? 0 : v, name: resolveName(sheetName, name) };\n  }\n\n  let values = [\n    value('total-budgeted'),\n    value('total-budget-income'),\n    value('total-saved'),\n    value('total-income'),\n    value('total-spent'),\n    value('real-saved'),\n    value('total-leftover')\n  ];\n\n  for (let group of groups) {\n    values = values.concat([\n      value(`group-budget-${group.id}`),\n      value(`group-sum-amount-${group.id}`),\n      value(`group-leftover-${group.id}`)\n    ]);\n\n    for (let cat of group.categories) {\n      values = values.concat([\n        value(`budget-${cat.id}`),\n        value(`sum-amount-${cat.id}`),\n        value(`leftover-${cat.id}`)\n      ]);\n\n      if (!group.is_income) {\n        values.push(value(`carryover-${cat.id}`));\n      }\n    }\n  }\n\n  return values;\n};\n\nhandlers['budget-set-type'] = async function({ type }) {\n  if (type !== 'rollover' && type !== 'report') {\n    throw new Error('Invalid budget type: ' + type);\n  }\n\n  // It's already the same; don't do anything\n  if (type === prefs.getPrefs().budgetType) {\n    return;\n  }\n\n  // Save prefs\n  return prefs.savePrefs({ budgetType: type });\n};\n\nhandlers['category-create'] = mutator(async function({\n  name,\n  groupId,\n  isIncome\n}) {\n  return withUndo(async () => {\n    if (!groupId) {\n      throw APIError('Creating a category: groupId is required');\n    }\n\n    return db.insertCategory({\n      name,\n      cat_group: groupId,\n      is_income: isIncome ? 1 : 0\n    });\n  });\n});\n\nhandlers['category-update'] = mutator(async function(category) {\n  return withUndo(async () => {\n    try {\n      await db.updateCategory(category);\n    } catch (e) {\n      if (e.message.toLowerCase().includes('unique constraint')) {\n        return { error: { type: 'category-exists' } };\n      }\n      throw e;\n    }\n    return {};\n  });\n});\n\nhandlers['category-move'] = mutator(async function({ id, groupId, targetId }) {\n  return withUndo(async () => {\n    await batchMessages(async () => {\n      await db.moveCategory(id, groupId, targetId);\n    });\n    return 'ok';\n  });\n});\n\nhandlers['category-delete'] = mutator(async function({ id, transferId }) {\n  return withUndo(async () => {\n    let result = {};\n    await batchMessages(async () => {\n      let row = await db.first(\n        'SELECT is_income FROM categories WHERE id = ?',\n        [id]\n      );\n      if (!row) {\n        result = { error: 'no-categories' };\n        return;\n      }\n\n      let transfer =\n        transferId &&\n        (await db.first('SELECT is_income FROM categories WHERE id = ?', [\n          transferId\n        ]));\n\n      if (!row || (transferId && !transfer)) {\n        result = { error: 'no-categories' };\n        return;\n      } else if (transferId && row.is_income !== transfer.is_income) {\n        result = { error: 'category-type' };\n        return;\n      }\n\n      // Update spreadsheet values if it's an expense category\n      // TODO: We should do this for income too if it's a reflect budget\n      if (row.is_income === 0) {\n        if (transferId) {\n          await budget.doTransfer([id], transferId);\n        }\n      }\n\n      await db.deleteCategory({ id }, transferId);\n    });\n\n    return result;\n  });\n});\n\nhandlers['category-group-create'] = mutator(async function({ name, isIncome }) {\n  return withUndo(async () => {\n    return db.insertCategoryGroup({\n      name,\n      is_income: isIncome ? 1 : 0\n    });\n  });\n});\n\nhandlers['category-group-update'] = mutator(async function(group) {\n  return withUndo(async () => {\n    return db.updateCategoryGroup(group);\n  });\n});\n\nhandlers['category-group-move'] = mutator(async function({ id, targetId }) {\n  return withUndo(async () => {\n    await batchMessages(async () => {\n      await db.moveCategoryGroup(id, targetId);\n    });\n    return 'ok';\n  });\n});\n\nhandlers['category-group-delete'] = mutator(async function({ id, transferId }) {\n  return withUndo(async () => {\n    const groupCategories = await db.all(\n      'SELECT id FROM categories WHERE cat_group = ? AND tombstone = 0',\n      [id]\n    );\n\n    return batchMessages(async () => {\n      if (transferId) {\n        await budget.doTransfer(groupCategories.map(c => c.id), transferId);\n      }\n      await db.deleteCategoryGroup({ id }, transferId);\n    });\n  });\n});\n\nhandlers['must-category-transfer'] = async function({ id }) {\n  const res = await db.runQuery(\n    `SELECT count(t.id) as count FROM transactions t\n       LEFT JOIN category_mapping cm ON cm.id = t.category\n       WHERE cm.transferId = ? AND t.tombstone = 0`,\n    [id],\n    true\n  );\n\n  // If there are transactions with this category, return early since\n  // we already know it needs to be tranferred\n  if (res[0].count !== 0) {\n    return true;\n  }\n\n  // If there are any non-zero budget values, also force the user to\n  // transfer the category.\n  return [...sheet.get().meta().createdMonths].some(month => {\n    const sheetName = monthUtils.sheetForMonth(month);\n    const value = sheet.get().getCellValue(sheetName, 'budget-' + id);\n\n    return value !== 0;\n  });\n};\n\nhandlers['payee-create'] = mutator(async function({ name }) {\n  return withUndo(async () => {\n    return db.insertPayee({ name });\n  });\n});\n\nhandlers['payees-get'] = async function() {\n  return db.getPayees();\n};\n\nhandlers['payees-get-rule-counts'] = async function() {\n  let payeeCounts = {};\n  let allRules = rules.getRules();\n\n  rules.iterateIds(rules.getRules(), 'payee', (rule, id) => {\n    if (payeeCounts[id] == null) {\n      payeeCounts[id] = 0;\n    }\n    payeeCounts[id]++;\n  });\n\n  return payeeCounts;\n};\n\nhandlers['payees-merge'] = mutator(async function({ targetId, mergeIds }) {\n  return withUndo(\n    async () => {\n      return db.mergePayees(targetId, mergeIds);\n    },\n    { targetId, mergeIds }\n  );\n});\n\nhandlers['payees-batch-change'] = mutator(async function({\n  added,\n  deleted,\n  updated\n}) {\n  return withUndo(async () => {\n    return batchMessages(async () => {\n      if (deleted) {\n        await Promise.all(deleted.map(p => db.deletePayee(p)));\n      }\n\n      if (added) {\n        await Promise.all(added.map(p => db.insertPayee(p)));\n      }\n\n      if (updated) {\n        await Promise.all(updated.map(p => db.updatePayee(p)));\n      }\n    });\n  });\n});\n\nhandlers['payees-check-orphaned'] = async function({ ids }) {\n  let orphaned = new Set(await db.getOrphanedPayees());\n  return ids.filter(id => orphaned.has(id));\n};\n\nhandlers['payees-get-rules'] = async function({ id }) {\n  return rules.getRulesForPayee(id).map(rule => rule.serialize());\n};\n\nhandlers['payees-delete-rule'] = mutator(async function({ id, payee_id }) {\n  return withUndo(\n    async () => {\n      return await db.deletePayeeRule({ id });\n    },\n    { payeeId: payee_id }\n  );\n});\n\nhandlers['payees-update-rule'] = mutator(async function(rule) {\n  return withUndo(\n    async () => {\n      return await db.updatePayeeRule(rule);\n    },\n    { payeeId: rule.payee_id }\n  );\n});\n\nhandlers['payees-add-rule'] = mutator(async function(rule) {\n  return withUndo(\n    async () => {\n      let id = await db.insertPayeeRule(rule);\n      return { ...rule, id };\n    },\n    { payeeId: rule.payee_id }\n  );\n});\n\nfunction validateRule(rule) {\n  // Returns an array of errors, the array is the same link as the\n  // passed-in `array`, or null if there are no errors\n  function runValidation(array, validate) {\n    let result = array.map(item => {\n      try {\n        validate(item);\n      } catch (e) {\n        if (e instanceof RuleError) {\n          console.warn('Invalid rule', e);\n          return e.type;\n        }\n        throw e;\n      }\n      return null;\n    });\n\n    return result.some(Boolean) ? result : null;\n  }\n\n  let conditionErrors = runValidation(\n    rule.conditions,\n    cond =>\n      new Condition(\n        cond.op,\n        cond.field,\n        cond.value,\n        cond.options,\n        ruleFieldTypes\n      )\n  );\n\n  let actionErrors = runValidation(\n    rule.actions,\n    action =>\n      new Action(\n        action.op,\n        action.field,\n        action.value,\n        action.options,\n        ruleFieldTypes\n      )\n  );\n\n  if (conditionErrors || actionErrors) {\n    return {\n      conditionErrors,\n      actionErrors\n    };\n  }\n\n  return null;\n}\n\nhandlers['rule-validate'] = async function(rule) {\n  let error = validateRule(rule);\n  return { error };\n};\n\nhandlers['rule-add'] = mutator(async function(rule) {\n  let error = validateRule(rule);\n  if (error) {\n    return { error };\n  }\n\n  let id = await rules.insertRule(rule);\n  return { id };\n});\n\nhandlers['rule-update'] = mutator(async function(rule) {\n  let error = validateRule(rule);\n  if (error) {\n    return { error };\n  }\n\n  await rules.updateRule(rule);\n  return {};\n});\n\nhandlers['rule-delete'] = mutator(async function(rule) {\n  return rules.deleteRule(rule);\n});\n\nhandlers['rule-delete-all'] = mutator(async function(ids) {\n  let someDeletionsFailed = false;\n\n  await batchMessages(async () => {\n    for (let id of ids) {\n      let res = await rules.deleteRule({ id });\n      if (res === false) {\n        someDeletionsFailed = true;\n      }\n    }\n  });\n\n  return { someDeletionsFailed };\n});\n\nhandlers['rule-apply-actions'] = mutator(async function({\n  transactionIds,\n  actions\n}) {\n  return rules.applyActions(transactionIds, actions, handlers);\n});\n\nhandlers['rule-add-payee-rename'] = mutator(async function({ fromNames, to }) {\n  return rules.updatePayeeRenameRule(fromNames, to);\n});\n\nhandlers['rules-get'] = async function() {\n  return rankRules(rules.getRules()).map(rule => rule.serialize());\n};\n\nhandlers['rule-get'] = async function({ id }) {\n  let rule = rules.getRules().find(rule => rule.id === id);\n  return rule ? rule.serialize() : null;\n};\n\nhandlers['rules-run'] = async function({ transaction }) {\n  return rules.runRules(transaction);\n};\n\nhandlers['rules-migrate'] = async function() {\n  await rules.migrateOldRules();\n};\n\nhandlers['make-filters-from-conditions'] = async function({ conditions }) {\n  return rules.conditionsToAQL(conditions);\n};\n\nhandlers['getCell'] = async function({ sheetName, name }) {\n  // Fields is no longer used - hardcode\n  let fields = ['name', 'value'];\n  let node = sheet.get()._getNode(resolveName(sheetName, name));\n  if (fields) {\n    let res = {};\n    fields.forEach(field => {\n      if (field === 'run') {\n        res[field] = node._run ? node._run.toString() : null;\n      } else {\n        res[field] = node[field];\n      }\n    });\n    return res;\n  } else {\n    return node;\n  }\n};\n\nhandlers['getCells'] = async function({ names }) {\n  return names.map(name => ({ value: sheet.get()._getNode(name).value }));\n};\n\nhandlers['getCellNamesInSheet'] = async function({ sheetName }) {\n  let names = [];\n  for (let name of sheet\n    .get()\n    .getNodes()\n    .keys()) {\n    let { sheet: nodeSheet, name: nodeName } = unresolveName(name);\n    if (nodeSheet === sheetName) {\n      names.push(nodeName);\n    }\n  }\n  return names;\n};\n\nhandlers['debugCell'] = async function({ sheetName, name }) {\n  let node = sheet.get().getNode(resolveName(sheetName, name));\n  return {\n    ...node,\n    _run: node._run && node._run.toString()\n  };\n};\n\nhandlers['create-query'] = async function({ sheetName, name, query }) {\n  // Always run it regardless of cache. We don't know anything has changed\n  // between the cache value being saved and now\n  sheet.get().createQuery(sheetName, name, query);\n  return 'ok';\n};\n\nhandlers['query'] = async function(query) {\n  if (query.table == null) {\n    throw new Error('query has no table, did you forgot to call `.serialize`?');\n  }\n\n  return aqlQuery(query);\n};\n\nhandlers['bank-delete'] = async function({ id }) {\n  const accts = await db.runQuery(\n    'SELECT * FROM accounts WHERE bank = ?',\n    [id],\n    true\n  );\n\n  await db.delete_('banks', id);\n  await Promise.all(\n    accts.map(async acct => {\n      // TODO: This will not sync across devices because we are bypassing\n      // the \"recorded\" functions\n      await db.runQuery('DELETE FROM transactions WHERE acct = ?', [acct.id]);\n      await db.delete_('accounts', acct.id);\n    })\n  );\n  return 'ok';\n};\n\nhandlers['account-update'] = mutator(async function({ id, name }) {\n  return withUndo(async () => {\n    await db.update('accounts', { id, name });\n    return {};\n  });\n});\n\nhandlers['accounts-get'] = async function() {\n  return db.getAccounts();\n};\n\nhandlers['account-properties'] = async function({ id }) {\n  const { balance } = await db.first(\n    'SELECT sum(amount) as balance FROM transactions WHERE acct = ? AND isParent = 0 AND tombstone = 0',\n    [id]\n  );\n  const { count } = await db.first(\n    'SELECT count(id) as count FROM transactions WHERE acct = ? AND tombstone = 0',\n    [id]\n  );\n\n  return { balance: balance || 0, numTransactions: count };\n};\n\nhandlers['accounts-link'] = async function({\n  institution,\n  publicToken,\n  accountId,\n  upgradingId\n}) {\n  let bankId = await link.handoffPublicToken(institution, publicToken);\n\n  let [[, userId], [, userKey]] = await asyncStorage.multiGet([\n    'user-id',\n    'user-key'\n  ]);\n\n  // Get all the available accounts and find the selected one\n  let accounts = await bankSync.getAccounts(userId, userKey, bankId);\n  let account = accounts.find(acct => acct.account_id === accountId);\n\n  await db.update('accounts', {\n    id: upgradingId,\n    account_id: account.account_id,\n    official_name: account.official_name,\n    type: fromPlaidAccountType(account.type),\n    balance_current: amountToInteger(account.balances.current),\n    balance_available: amountToInteger(account.balances.available),\n    balance_limit: amountToInteger(account.balances.limit),\n    mask: account.mask,\n    bank: bankId\n  });\n\n  await bankSync.syncAccount(\n    userId,\n    userKey,\n    upgradingId,\n    account.account_id,\n    bankId\n  );\n\n  connection.send('sync-event', {\n    type: 'success',\n    tables: ['transactions']\n  });\n\n  return 'ok';\n};\n\nhandlers['accounts-connect'] = async function({\n  institution,\n  publicToken,\n  accountIds,\n  offbudgetIds\n}) {\n  let bankId = await link.handoffPublicToken(institution, publicToken);\n  let ids = await link.addAccounts(bankId, accountIds, offbudgetIds);\n  return ids;\n};\n\nhandlers['account-create'] = mutator(async function({\n  name,\n  type,\n  balance,\n  offBudget,\n  closed\n}) {\n  return withUndo(async () => {\n    const id = await db.insertAccount({\n      name,\n      type,\n      offbudget: offBudget ? 1 : 0,\n      closed: closed ? 1 : 0\n    });\n\n    await db.insertPayee({\n      name: '',\n      transfer_acct: id\n    });\n\n    if (balance != null) {\n      let payee = await getStartingBalancePayee();\n\n      await db.insertTransaction({\n        account: id,\n        amount: amountToInteger(balance),\n        category: offBudget ? null : payee.category,\n        payee: payee.id,\n        date: monthUtils.currentDay(),\n        cleared: true,\n        starting_balance_flag: true\n      });\n    }\n\n    return id;\n  });\n});\n\nhandlers['account-close'] = mutator(async function({\n  id,\n  transferAccountId,\n  categoryId,\n  forced\n}) {\n  // Unlink the account if it's linked. This makes sure to remove it\n  // from Plaid. (This should not be undo-able, as it mutates the\n  // remote server and the user will have to link the account again)\n  await handlers['account-unlink']({ id });\n\n  return withUndo(async () => {\n    let account = await db.first(\n      'SELECT * FROM accounts WHERE id = ? AND tombstone = 0',\n      [id]\n    );\n\n    // Do nothing if the account doesn't exist or it's already been\n    // closed\n    if (!account || account.closed === 1) {\n      return;\n    }\n\n    const { balance, numTransactions } = await handlers['account-properties']({\n      id\n    });\n\n    // If there are no transactions, we can simply delete the account\n    if (numTransactions === 0) {\n      await db.deleteAccount({ id });\n    } else if (forced) {\n      let rows = await db.runQuery(\n        'SELECT id, transfer_id FROM v_transactions WHERE account = ?',\n        [id],\n        true\n      );\n\n      let { id: payeeId } = await db.first(\n        'SELECT id FROM payees WHERE transfer_acct = ?',\n        [id]\n      );\n\n      await batchMessages(() => {\n        // TODO: what this should really do is send a special message that\n        // automatically marks the tombstone value for all transactions\n        // within an account... or something? This is problematic\n        // because another client could easily add new data that\n        // should be marked as deleted.\n\n        rows.forEach(row => {\n          if (row.transfer_id) {\n            db.updateTransaction({\n              id: row.transfer_id,\n              payee: null,\n              transfer_id: null\n            });\n          }\n\n          db.deleteTransaction({ id: row.id });\n        });\n\n        db.deleteAccount({ id });\n        db.deleteTransferPayee({ id: payeeId });\n      });\n    } else {\n      if (balance !== 0 && transferAccountId == null) {\n        throw APIError('balance is non-zero: transferAccountId is required');\n      }\n\n      await db.update('accounts', { id, closed: 1 });\n\n      // If there is a balance we need to transfer it to the specified\n      // account (and possibly categorize it)\n      if (balance !== 0) {\n        let { id: payeeId } = await db.first(\n          'SELECT id FROM payees WHERE transfer_acct = ?',\n          [transferAccountId]\n        );\n\n        await handlers['transaction-add']({\n          id: uuid.v4Sync(),\n          payee: payeeId,\n          amount: -balance,\n          account: id,\n          date: monthUtils.currentDay(),\n          notes: 'Closing account',\n          category: categoryId || null\n        });\n      }\n    }\n  });\n});\n\nhandlers['account-reopen'] = mutator(async function({ id }) {\n  return withUndo(async () => {\n    await db.update('accounts', { id, closed: 0 });\n  });\n});\n\nhandlers['account-move'] = mutator(async function({ id, targetId }) {\n  return withUndo(async () => {\n    await db.moveAccount(id, targetId);\n  });\n});\n\nlet stopPolling = false;\n\nhandlers['poll-web-token'] = async function({ token }) {\n  let [[, userId], [, key]] = await asyncStorage.multiGet([\n    'user-id',\n    'user-key'\n  ]);\n\n  let startTime = Date.now();\n  stopPolling = false;\n\n  async function getData(cb) {\n    if (stopPolling) {\n      return;\n    }\n\n    if (Date.now() - startTime >= 1000 * 60 * 10) {\n      cb('timeout');\n      return;\n    }\n\n    let data = await post(\n      getServer().PLAID_SERVER + '/get-web-token-contents',\n      {\n        userId,\n        key,\n        token\n      }\n    );\n\n    if (data) {\n      if (data.error) {\n        cb('unknown');\n      } else {\n        cb(null, data);\n      }\n    } else {\n      setTimeout(() => getData(cb), 3000);\n    }\n  }\n\n  return new Promise(resolve => {\n    getData((error, data) => {\n      if (error) {\n        resolve({ error });\n      } else {\n        resolve({ data });\n      }\n    });\n  });\n};\n\nhandlers['poll-web-token-stop'] = async function() {\n  stopPolling = true;\n  return 'ok';\n};\n\nhandlers['accounts-sync'] = async function({ id }) {\n  let [[, userId], [, userKey]] = await asyncStorage.multiGet([\n    'user-id',\n    'user-key'\n  ]);\n  let accounts = await db.runQuery(\n    `SELECT a.*, b.id as bankId FROM accounts a\n         LEFT JOIN banks b ON a.bank = b.id\n         WHERE a.tombstone = 0 AND a.closed = 0`,\n    [],\n    true\n  );\n\n  if (id) {\n    accounts = accounts.filter(acct => acct.id === id);\n  }\n\n  let errors = [];\n  let newTransactions = [];\n  let matchedTransactions = [];\n  let updatedAccounts = [];\n\n  let { groupId } = prefs.getPrefs();\n\n  for (var i = 0; i < accounts.length; i++) {\n    const acct = accounts[i];\n    if (acct.bankId) {\n      try {\n        const res = await bankSync.syncAccount(\n          userId,\n          userKey,\n          acct.id,\n          acct.account_id,\n          acct.bankId\n        );\n        let { added, updated } = res;\n\n        newTransactions = newTransactions.concat(added);\n        matchedTransactions = matchedTransactions.concat(updated);\n\n        if (added.length > 0 || updated.length > 0) {\n          updatedAccounts = updatedAccounts.concat(acct.id);\n        }\n      } catch (err) {\n        if (err.type === 'BankSyncError') {\n          errors.push({\n            type: 'SyncError',\n            accountId: acct.id,\n            message: 'Failed syncing account \"' + acct.name + '\".',\n            category: err.category,\n            code: err.code\n          });\n        } else if (err instanceof PostError && err.reason !== 'internal') {\n          errors.push({\n            accountId: acct.id,\n            message: `Account \"${\n              acct.name\n            }\" is not linked properly. Please link it again`\n          });\n        } else {\n          errors.push({\n            accountId: acct.id,\n            message:\n              'There was an internal error. Please email help@actualbudget.com for support.',\n            internal: err.stack\n          });\n\n          err.message = 'Failed syncing account: ' + err.message;\n\n          captureException(err);\n        }\n      }\n    }\n  }\n\n  if (updatedAccounts.length > 0) {\n    connection.send('sync-event', {\n      type: 'success',\n      tables: ['transactions']\n    });\n  }\n\n  return { errors, newTransactions, matchedTransactions, updatedAccounts };\n};\n\nhandlers['transactions-import'] = mutator(function({\n  accountId,\n  transactions\n}) {\n  return withUndo(async () => {\n    if (typeof accountId !== 'string') {\n      throw APIError('transactions-import: accountId must be an id');\n    }\n\n    try {\n      return await bankSync.reconcileTransactions(accountId, transactions);\n    } catch (err) {\n      if (err instanceof TransactionError) {\n        return { errors: [{ message: err.message }], added: [], updated: [] };\n      }\n\n      throw err;\n    }\n  });\n});\n\nhandlers['account-unlink'] = mutator(async function({ id }) {\n  let { bank: bankId } = await db.first(\n    'SELECT bank FROM accounts WHERE id = ?',\n    [id]\n  );\n\n  if (!bankId) {\n    return 'ok';\n  }\n\n  await db.updateAccount({\n    id,\n    account_id: null,\n    bank: null,\n    balance_current: null,\n    balance_available: null,\n    balance_limit: null\n  });\n\n  let { count } = await db.first(\n    'SELECT COUNT(*) as count FROM accounts WHERE bank = ?',\n    [bankId]\n  );\n\n  if (count === 0) {\n    // No more accounts are associated with this bank. We can remove\n    // it from Plaid.\n\n    let [[, userId], [, key]] = await asyncStorage.multiGet([\n      'user-id',\n      'user-key'\n    ]);\n\n    await post(getServer().PLAID_SERVER + '/remove-access-token', {\n      userId,\n      key,\n      item_id: bankId\n    });\n  }\n\n  return 'ok';\n});\n\nhandlers['make-plaid-public-token'] = async function({ bankId }) {\n  let [[, userId], [, userKey]] = await asyncStorage.multiGet([\n    'user-id',\n    'user-key'\n  ]);\n\n  let data = await post(getServer().PLAID_SERVER + '/make-public-token', {\n    userId: userId,\n    key: userKey,\n    item_id: '' + bankId\n  });\n\n  if (data.error_code) {\n    return { error: '', code: data.error_code, type: data.error_type };\n  }\n\n  return { linkToken: data.link_token };\n};\n\nhandlers['save-global-prefs'] = async function(prefs) {\n  if ('maxMonths' in prefs) {\n    await asyncStorage.setItem('max-months', '' + prefs.maxMonths);\n  }\n  if ('trackUsage' in prefs) {\n    tracking.toggle(prefs.trackUsage);\n    await asyncStorage.setItem('track-usage', '' + prefs.trackUsage);\n  }\n  if ('autoUpdate' in prefs) {\n    await asyncStorage.setItem('auto-update', '' + prefs.autoUpdate);\n    process.send({ type: 'shouldAutoUpdate', flag: prefs.autoUpdate });\n  }\n  if ('documentDir' in prefs) {\n    if (await fs.exists(prefs.documentDir)) {\n      await asyncStorage.setItem('document-dir', prefs.documentDir);\n    }\n  }\n  if ('floatingSidebar' in prefs) {\n    await asyncStorage.setItem('floating-sidebar', '' + prefs.floatingSidebar);\n  }\n  return 'ok';\n};\n\nhandlers['load-global-prefs'] = async function() {\n  let [\n    [, floatingSidebar],\n    [, seenTutorial],\n    [, maxMonths],\n    [, trackUsage],\n    [, autoUpdate],\n    [, documentDir],\n    [, encryptKey]\n  ] = await asyncStorage.multiGet([\n    'floating-sidebar',\n    'seen-tutorial',\n    'max-months',\n    'track-usage',\n    'auto-update',\n    'document-dir',\n    'encrypt-key'\n  ]);\n  return {\n    floatingSidebar: floatingSidebar === 'true' ? true : false,\n    seenTutorial: seenTutorial === 'true' ? true : false,\n    maxMonths: stringToInteger(maxMonths || ''),\n    // Default to true\n    trackUsage: trackUsage == null || trackUsage === 'true' ? true : false,\n    autoUpdate: autoUpdate == null || autoUpdate === 'true' ? true : false,\n    documentDir: documentDir || getDefaultDocumentDir(),\n    keyId: encryptKey && JSON.parse(encryptKey).id\n  };\n};\n\nhandlers['save-prefs'] = async function(prefsToSet) {\n  let { cloudFileId } = prefs.getPrefs();\n\n  // Need to sync the budget name on the server as well\n  if (prefsToSet.budgetName && cloudFileId) {\n    let userToken = await asyncStorage.getItem('user-token');\n\n    await post(getServer().SYNC_SERVER + '/update-user-filename', {\n      token: userToken,\n      fileId: cloudFileId,\n      name: prefsToSet.budgetName\n    });\n  }\n\n  await prefs.savePrefs(prefsToSet);\n  return 'ok';\n};\n\nhandlers['load-prefs'] = async function() {\n  return prefs.getPrefs();\n};\n\nhandlers['sync-reset'] = async function() {\n  return await resetSync();\n};\n\nhandlers['sync-repair'] = async function() {\n  await repairSync();\n};\n\n// A user can only enable/change their key with the file loaded. This\n// will change in the future: during onboarding the user should be\n// able to enable encryption. (Imagine if they are importing data from\n// another source, they should be able to encrypt first)\nhandlers['key-make'] = async function({ password }) {\n  if (!prefs.getPrefs()) {\n    throw new Error('user-set-key must be called with file loaded');\n  }\n\n  let cloudFileId = prefs.getPrefs().cloudFileId;\n\n  let salt = encryption.randomBytes(32).toString('base64');\n  let id = uuid.v4Sync();\n  let key = await encryption.createKey({ id, password, salt });\n\n  // Load the key\n  await encryption.loadKey(key);\n\n  // Make some test data to use if the key is valid or not\n  let testContent = await makeTestMessage(key.getId());\n\n  // Changing your key necessitates a sync reset as well. This will\n  // clear all existing encrypted data from the server so you won't\n  // have a mix of data encrypted with different keys.\n  return await resetSync({\n    key,\n    salt,\n    testContent: JSON.stringify({\n      ...testContent,\n      value: testContent.value.toString('base64')\n    })\n  });\n};\n\n// This can be called both while a file is already loaded or not. This\n// will see if a key is valid and if so save it off.\nhandlers['key-test'] = async function({ fileId, password }) {\n  let userToken = await asyncStorage.getItem('user-token');\n\n  if (fileId == null) {\n    fileId = prefs.getPrefs().cloudFileId;\n  }\n\n  let res;\n  try {\n    res = await post(getServer().SYNC_SERVER + '/user-get-key', {\n      token: userToken,\n      fileId\n    });\n  } catch (e) {\n    console.log(e);\n    return { error: { reason: 'network' } };\n  }\n\n  let { id, salt, test } = res;\n\n  if (test == null) {\n    return { error: { reason: 'old-key-style' } };\n  }\n\n  test = JSON.parse(test);\n\n  let key = await encryption.createKey({ id, password, salt });\n  encryption.loadKey(key);\n\n  try {\n    await encryption.decrypt(Buffer.from(test.value, 'base64'), test.meta);\n  } catch (e) {\n    console.log(e);\n\n    // Unload the key, it's invalid\n    encryption.unloadKey(key);\n    return { error: { reason: 'decrypt-failure' } };\n  }\n\n  // Persist key in async storage\n  let keys = JSON.parse((await asyncStorage.getItem(`encrypt-keys`)) || '{}');\n  keys[fileId] = key.serialize();\n  await asyncStorage.setItem('encrypt-keys', JSON.stringify(keys));\n\n  // Save the key id in prefs if the are loaded. If they aren't, we\n  // are testing a key to download a file and when the file is\n  // actually downloaded it will update the prefs with the latest key id\n  if (prefs.getPrefs()) {\n    await prefs.savePrefs({ encryptKeyId: key.getId() });\n  }\n\n  return {};\n};\n\nhandlers['should-pitch-subscribe'] = async function() {\n  let seenSubscribe = await asyncStorage.getItem('seenSubscribe');\n  return seenSubscribe !== 'true';\n};\n\nhandlers['has-pitched-subscribe'] = async function() {\n  await asyncStorage.setItem('seenSubscribe', 'true');\n  return 'ok';\n};\n\nhandlers['subscribe-needs-bootstrap'] = async function({ url } = {}) {\n  if (getServer(url).BASE_SERVER === UNCONFIGURED_SERVER) {\n    return { bootstrapped: true };\n  }\n\n  let res;\n  try {\n    res = await get(getServer(url).SIGNUP_SERVER + '/needs-bootstrap');\n  } catch (err) {\n    return { error: 'network-failure' };\n  }\n\n  try {\n    res = JSON.parse(res);\n  } catch (err) {\n    return { error: 'parse-failure' };\n  }\n\n  if (res.status === 'error') {\n    return { error: res.reason };\n  }\n\n  return { bootstrapped: res.data.bootstrapped };\n};\n\nhandlers['subscribe-bootstrap'] = async function({ password }) {\n  let res;\n  try {\n    res = await post(getServer().SIGNUP_SERVER + '/bootstrap', { password });\n  } catch (err) {\n    return { error: err.reason || 'network-failure' };\n  }\n\n  if (res.token) {\n    await asyncStorage.setItem('user-token', res.token);\n    return {};\n  }\n  return { error: 'internal' };\n};\n\nhandlers['subscribe-set-user'] = async function({ token }) {\n  await asyncStorage.setItem('user-token', token);\n};\n\nhandlers['subscribe-get-user'] = async function() {\n  if (getServer() && getServer().BASE_SERVER === UNCONFIGURED_SERVER) {\n    return { offline: false };\n  }\n\n  let userToken = await asyncStorage.getItem('user-token');\n\n  if (userToken) {\n    try {\n      let res = await get(getServer().SIGNUP_SERVER + '/validate', {\n        headers: {\n          'X-ACTUAL-TOKEN': userToken\n        }\n      });\n      res = JSON.parse(res);\n\n      if (res.status === 'error') {\n        if (res.reason === 'unauthorized') {\n          return null;\n        }\n        return { offline: true };\n      }\n\n      return { offline: false };\n    } catch (e) {\n      console.log(e);\n      return { offline: true };\n    }\n  }\n\n  return null;\n};\n\nhandlers['subscribe-change-password'] = async function({ password }) {\n  let userToken = await asyncStorage.getItem('user-token');\n  let res;\n  try {\n    res = await post(getServer().SIGNUP_SERVER + '/change-password', {\n      token: userToken,\n      password\n    });\n  } catch (err) {\n    return { error: err.reason || 'network-failure' };\n  }\n\n  return {};\n};\n\nhandlers['subscribe-sign-in'] = async function({ password }) {\n  let res = await post(getServer().SIGNUP_SERVER + '/login', {\n    password\n  });\n\n  if (res.token) {\n    await asyncStorage.setItem('user-token', res.token);\n    return {};\n  }\n\n  return { error: 'invalid-password' };\n};\n\nhandlers['subscribe-sign-out'] = async function() {\n  encryption.unloadAllKeys();\n  await asyncStorage.multiRemove([\n    'user-token',\n    'encrypt-keys',\n    'lastBudget',\n    'readOnly'\n  ]);\n  return 'ok';\n};\n\nhandlers['get-server-url'] = async function() {\n  return getServer() && getServer().BASE_SERVER;\n};\n\nhandlers['set-server-url'] = async function({ url }) {\n  if (url != null) {\n    // Validate the server is running\n    let { error } = await runHandler(handlers['subscribe-needs-bootstrap'], {\n      url\n    });\n    if (error) {\n      return { error };\n    }\n  } else {\n    // When the server isn't configured, we just use a placeholder\n    url = UNCONFIGURED_SERVER;\n  }\n\n  asyncStorage.setItem('server-url', url);\n  setServer(url);\n  return {};\n};\n\nhandlers['sync'] = async function() {\n  return fullSync();\n};\n\nhandlers['get-version'] = async function() {\n  return { version: VERSION };\n};\n\nhandlers['get-budgets'] = async function() {\n  const paths = await fs.listDir(fs.getDocumentDir());\n  const budgets = (await Promise.all(\n    paths.map(async name => {\n      const prefsPath = fs.join(fs.getDocumentDir(), name, 'metadata.json');\n      if (await fs.exists(prefsPath)) {\n        let prefs;\n        try {\n          prefs = JSON.parse(await fs.readFile(prefsPath));\n        } catch (e) {\n          console.log('Error parsing metadata:', e.stack);\n          return;\n        }\n\n        // We treat the directory name as the canonical id so that if\n        // the user moves it around/renames/etc, nothing breaks. The\n        // id is stored in prefs just for convenience (and the prefs\n        // will always update to the latest given id)\n        if (name !== DEMO_BUDGET_ID) {\n          return {\n            id: name,\n            cloudFileId: prefs.cloudFileId,\n            groupId: prefs.groupId,\n            name: prefs.budgetName || '(no name)'\n          };\n        }\n      }\n\n      return null;\n    })\n  )).filter(x => x);\n\n  return budgets;\n};\n\nhandlers['get-ynab4-files'] = async function() {\n  return YNAB4.findBudgets();\n};\n\nhandlers['get-remote-files'] = async function() {\n  return cloudStorage.listRemoteFiles();\n};\n\nhandlers['reset-budget-cache'] = mutator(async function() {\n  // Recomputing everything will update the cache\n  await sheet.loadUserBudgets(db);\n  sheet.get().recomputeAll();\n  await sheet.waitOnSpreadsheet();\n});\n\nhandlers['upload-budget'] = async function({ id } = {}) {\n  if (id) {\n    if (prefs.getPrefs()) {\n      throw new Error('upload-budget: id given but prefs already loaded');\n    }\n\n    await prefs.loadPrefs(id);\n  }\n\n  try {\n    await cloudStorage.upload();\n  } catch (e) {\n    console.log(e);\n    if (e.type === 'FileUploadError') {\n      return { error: e };\n    }\n    captureException(e);\n    return { error: { reason: 'internal' } };\n  } finally {\n    if (id) {\n      prefs.unloadPrefs();\n    }\n  }\n\n  return {};\n};\n\nhandlers['download-budget'] = async function({ fileId, replace }) {\n  let result;\n  try {\n    result = await cloudStorage.download(fileId, replace);\n  } catch (e) {\n    if (e.type === 'FileDownloadError') {\n      if (e.reason === 'file-exists' && e.meta.id) {\n        await prefs.loadPrefs(e.meta.id);\n        let name = prefs.getPrefs().budgetName;\n        prefs.unloadPrefs();\n\n        e.meta = { ...e.meta, name };\n      }\n\n      return { error: e };\n    } else {\n      captureException(e);\n      return { error: { reason: 'internal' } };\n    }\n  }\n\n  let id = result.id;\n\n  // Load the budget and do a full sync\n  result = await loadBudget(result.id, VERSION, { showUpdate: true });\n  if (result.error) {\n    return { error: { reason: result.error } };\n  }\n\n  setSyncingMode('enabled');\n  await initialFullSync();\n\n  await handlers['close-budget']();\n\n  return { id };\n};\n\nhandlers['load-budget'] = async function({ id }) {\n  let currentPrefs = prefs.getPrefs();\n\n  if (currentPrefs) {\n    if (currentPrefs.id === id) {\n      // If it's already loaded, do nothing\n      return {};\n    } else {\n      // Otherwise, close the currently loaded budget\n      await handlers['close-budget']();\n    }\n  }\n\n  let res = await loadBudget(id, VERSION, { showUpdate: true });\n\n  async function trackSizes() {\n    let getFileSize = async name => {\n      let dbFile = fs.join(fs.getBudgetDir(id), name);\n      try {\n        return await fs.size(dbFile);\n      } catch (err) {\n        return null;\n      }\n    };\n\n    try {\n      let dbSize = await getFileSize('db.sqlite');\n      let cacheSize = await getFileSize('cache.sqlite');\n      tracking.track('app:load-budget', { size: dbSize, cacheSize });\n    } catch (err) {\n      console.warn(err);\n    }\n  }\n  trackSizes();\n\n  return res;\n};\n\nhandlers['create-demo-budget'] = async function() {\n  // Make sure the read only flag isn't leftover (normally it's\n  // reset when signing in, but you don't have to sign in for the\n  // demo budget)\n  await asyncStorage.setItem('readOnly', '');\n\n  return handlers['create-budget']({\n    budgetName: 'Demo Budget',\n    testMode: true,\n    testBudgetId: DEMO_BUDGET_ID\n  });\n};\n\nhandlers['close-budget'] = async function() {\n  captureBreadcrumb({ message: 'Closing budget' });\n\n  // The spreadsheet may be running, wait for it to complete\n  await sheet.waitOnSpreadsheet();\n  sheet.unloadSpreadsheet();\n\n  clearFullSyncTimeout();\n  await app.stopServices();\n\n  await db.closeDatabase();\n\n  try {\n    await asyncStorage.setItem('lastBudget', '');\n  } catch (e) {\n    // This might fail if we are shutting down after failing to load a\n    // budget. We want to unload whatever has already been loaded but\n    // be resilient to anything failing\n  }\n\n  prefs.unloadPrefs();\n  stopBackupService();\n  return 'ok';\n};\n\nhandlers['delete-budget'] = async function({ id, cloudFileId }) {\n  // If it's a cloud file, you can delete it from the server by\n  // passing its cloud id\n  if (cloudFileId && !process.env.IS_BETA) {\n    await cloudStorage.removeFile(cloudFileId).catch(err => {});\n  }\n\n  // If a local file exists, you can delete it by passing its local id\n  if (id) {\n    let budgetDir = fs.getBudgetDir(id);\n    await fs.removeDirRecursively(budgetDir);\n  }\n\n  return 'ok';\n};\n\nhandlers['create-budget'] = async function({\n  budgetName,\n  avoidUpload,\n  testMode,\n  testBudgetId\n} = {}) {\n  let id;\n  if (testMode) {\n    budgetName = budgetName || 'Test Budget';\n    id = testBudgetId || TEST_BUDGET_ID;\n\n    if (await fs.exists(fs.getBudgetDir(id))) {\n      await fs.removeDirRecursively(fs.getBudgetDir(id));\n    }\n  } else {\n    // Generate budget name if not given\n    if (!budgetName) {\n      // Unfortunately we need to load all of the existing files first\n      // so we can detect conflicting names.\n      let files = await handlers['get-budgets']();\n      budgetName = await uniqueFileName(files);\n    }\n\n    id = await idFromFileName(budgetName);\n  }\n\n  let budgetDir = fs.getBudgetDir(id);\n  await fs.mkdir(budgetDir);\n\n  // Create the initial database\n  await fs.copyFile(fs.bundledDatabasePath, fs.join(budgetDir, 'db.sqlite'));\n\n  // Create the initial prefs file\n  await fs.writeFile(\n    fs.join(budgetDir, 'metadata.json'),\n    JSON.stringify(prefs.getDefaultPrefs(id, budgetName))\n  );\n\n  // Load it in\n  let { error } = await loadBudget(id, VERSION);\n  if (error) {\n    console.log('Error creating budget: ' + error);\n    return { error };\n  }\n\n  if (!avoidUpload && !testMode) {\n    try {\n      await cloudStorage.upload();\n    } catch (e) {\n      // Ignore any errors uploading. If they are offline they should\n      // still be able to create files.\n    }\n  }\n\n  if (testMode) {\n    await createTestBudget(handlers);\n  }\n\n  return {};\n};\n\nhandlers['set-tutorial-seen'] = async function() {\n  await asyncStorage.setItem('seen-tutorial', 'true');\n  return 'ok';\n};\n\nhandlers['import-budget'] = async function({ filepath, type }) {\n  try {\n    if (!(await fs.exists(filepath))) {\n      throw new Error(`File not found at the provided path: ${filepath}`);\n    }\n\n    let buffer = Buffer.from(await fs.readFile(filepath, 'binary'));\n\n    switch (type) {\n      case 'ynab4':\n        try {\n          await YNAB4.importBuffer(filepath, buffer);\n        } catch (e) {\n          let msg = e.message.toLowerCase();\n          if (\n            msg.includes('not a ynab4') ||\n            msg.includes('could not find file')\n          ) {\n            return { error: 'not-ynab4' };\n          }\n        }\n        break;\n      case 'ynab5':\n        let data;\n        try {\n          data = JSON.parse(buffer.toString());\n        } catch (e) {\n          return { error: 'parse-error' };\n        }\n\n        try {\n          await YNAB5.importYNAB5(data);\n        } catch (e) {\n          return { error: 'not-ynab5' };\n        }\n        break;\n      case 'actual':\n        // We should pull out import/export into its own app so this\n        // can be abstracted out better. Importing Actual files is a\n        // special case because we can directly write down the files,\n        // but because it doesn't go through the API layer we need to\n        // duplicate some of the workflow\n        await handlers['close-budget']();\n\n        let { id } = await cloudStorage.importBuffer(\n          { cloudFileId: null, groupId: null },\n          buffer\n        );\n\n        // We never want to load cached data from imported files, so\n        // delete the cache\n        let sqliteDb = await sqlite.openDatabase(\n          fs.join(fs.getBudgetDir(id), 'db.sqlite')\n        );\n        sqlite.execQuery(\n          sqliteDb,\n          `\n          DELETE FROM kvcache;\n          DELETE FROM kvcache_key;\n        `\n        );\n        sqlite.closeDatabase(sqliteDb);\n\n        // Load the budget, force everything to be computed, and try\n        // to upload it as a cloud file\n        await handlers['load-budget']({ id });\n        await handlers['get-budget-bounds']();\n        await sheet.waitOnSpreadsheet();\n        await cloudStorage.upload().catch(err => {});\n\n        break;\n      default:\n    }\n  } catch (err) {\n    err.message = 'Error importing budget: ' + err.message;\n    captureException(err);\n    return { error: 'internal-error' };\n  }\n\n  return {};\n};\n\nhandlers['export-budget'] = async function() {\n  return await cloudStorage.exportBuffer();\n};\n\nasync function loadBudget(id, appVersion, { showUpdate } = {}) {\n  let dir;\n  try {\n    dir = fs.getBudgetDir(id);\n  } catch (e) {\n    captureException(\n      new Error('`getBudgetDir` failed in `loadBudget`: ' + e.message)\n    );\n    return { error: 'budget-not-found' };\n  }\n\n  captureBreadcrumb({ message: 'Loading budget ' + dir });\n\n  if (!(await fs.exists(dir))) {\n    captureException(new Error('budget directory does not exist'));\n    return { error: 'budget-not-found' };\n  }\n\n  try {\n    await prefs.loadPrefs(id);\n    await db.openDatabase(id);\n  } catch (e) {\n    captureBreadcrumb({ message: 'Error loading budget ' + id });\n    captureException(e);\n    await handlers['close-budget']();\n    return { error: 'opening-budget' };\n  }\n\n  // Older versions didn't tag the file with the current user, so do\n  // so now\n  if (!prefs.getPrefs().userId) {\n    let [[, userId]] = await asyncStorage.multiGet(['user-token']);\n    prefs.savePrefs({ userId });\n  }\n\n  let { budgetVersion, budgetId } = prefs.getPrefs();\n\n  try {\n    await updateVersion(budgetVersion, showUpdate);\n  } catch (e) {\n    console.warn('Error updating', e);\n    let result;\n    if (e.message.includes('out-of-sync-migrations')) {\n      result = { error: 'out-of-sync-migrations' };\n    } else if (e.message.includes('out-of-sync-data')) {\n      result = { error: 'out-of-sync-data' };\n    } else {\n      captureException(e);\n      logger.info('Error updating budget ' + id, e);\n      console.log('Error updating budget', e);\n      result = { error: 'loading-budget' };\n    }\n\n    await handlers['close-budget']();\n    return result;\n  }\n\n  await db.loadClock();\n\n  if (prefs.getPrefs().resetClock) {\n    // If we need to generate a fresh clock, we need to generate a new\n    // client id. This happens when the database is transferred to a\n    // new device.\n    //\n    // TODO: The client id should be stored elsewhere. It shouldn't\n    // work this way, but it's fine for now.\n    timestamp.getClock().timestamp.setNode(timestamp.makeClientId());\n    await db.runQuery(\n      'INSERT OR REPLACE INTO messages_clock (id, clock) VALUES (1, ?)',\n      [timestamp.serializeClock(timestamp.getClock())]\n    );\n\n    await prefs.savePrefs({ resetClock: false });\n  }\n\n  if (!Platform.isWeb && !Platform.isMobile && !global.__TESTING__) {\n    startBackupService(id);\n  }\n\n  try {\n    await sheet.loadSpreadsheet(db, onSheetChange);\n  } catch (e) {\n    captureException(e);\n    await handlers['close-budget']();\n    return { error: 'opening-budget' };\n  }\n\n  // This is a bit leaky, but we need to set the initial budget type\n  sheet.get().meta().budgetType = prefs.getPrefs().budgetType;\n  await budget.createAllBudgets();\n\n  // Load all the in-memory state\n  await mappings.loadMappings();\n  await rules.loadRules();\n  await syncMigrations.listen();\n  await app.startServices();\n\n  clearUndo();\n\n  // Ensure that syncing is enabled\n  if (!global.__TESTING__) {\n    if (process.env.IS_BETA || id === DEMO_BUDGET_ID) {\n      setSyncingMode('disabled');\n    } else if (id === TEST_BUDGET_ID) {\n      await asyncStorage.setItem('lastBudget', id);\n    } else {\n      setSyncingMode('enabled');\n\n      await asyncStorage.setItem('lastBudget', id);\n\n      // Only upload periodically on desktop\n      if (!Platform.isMobile) {\n        await cloudStorage.possiblyUpload();\n      }\n    }\n  }\n\n  app.events.emit('load-budget', { id });\n\n  return {};\n}\n\nhandlers['get-upgrade-notifications'] = async function() {\n  let { id } = prefs.getPrefs();\n  if (id === TEST_BUDGET_ID || id === DEMO_BUDGET_ID) {\n    return [];\n  }\n\n  let types = ['schedules', 'repair-splits'];\n  let unseen = [];\n\n  for (let type of types) {\n    let key = `notifications.${type}`;\n    if (prefs.getPrefs()[key] == null) {\n      unseen.push(type);\n    }\n  }\n\n  return unseen;\n};\n\nhandlers['seen-upgrade-notification'] = async function({ type }) {\n  let key = `notifications.${type}`;\n  prefs.savePrefs({ [key]: true });\n};\n\nhandlers['upload-file-web'] = async function({ filename, contents }) {\n  if (!Platform.isWeb) {\n    return null;\n  }\n\n  await fs.writeFile('/uploads/' + filename, contents);\n  return 'ok';\n};\n\nhandlers['backups-get'] = async function({ id }) {\n  return getAvailableBackups(id);\n};\n\nhandlers['backup-load'] = async function({ id, backupId }) {\n  await loadBackup(id, backupId);\n};\n\nhandlers['backup-make'] = async function({ id }) {\n  await makeBackup(id);\n};\n\nhandlers['get-last-opened-backup'] = async function() {\n  const id = await asyncStorage.getItem('lastBudget');\n  if (id && id !== '') {\n    const budgetDir = fs.getBudgetDir(id);\n\n    // We never want to give back a budget that does not exist on the\n    // filesystem anymore, so first check that it exists\n    if (await fs.exists(budgetDir)) {\n      return id;\n    }\n  }\n  return null;\n};\n\nhandlers['app-focused'] = async function() {\n  if (prefs.getPrefs() && prefs.getPrefs().id) {\n    // First we sync\n    fullSync();\n  }\n};\n\nhandlers['track'] = async function({ name, props }) {\n  tracking.track(name, props);\n};\n\nhandlers = installAPI(handlers);\n\ninjectAPI.send = (name, args) => runHandler(app.handlers[name], args);\n\n// A hack for now until we clean up everything\napp.handlers = handlers;\napp.combine(schedulesApp, budgetApp, notesApp, toolsApp);\n\nfunction getDefaultDocumentDir() {\n  if (Platform.isMobile) {\n    // On mobile, unfortunately we need to be backwards compatible\n    // with the old folder structure which does not store files inside\n    // of an `Actual` directory. In the future, if we really care, we\n    // can migrate them, but for now just return the documents dir\n    return process.env.ACTUAL_DOCUMENT_DIR;\n  }\n  return fs.join(process.env.ACTUAL_DOCUMENT_DIR, 'Actual');\n}\n\nasync function setupDocumentsDir() {\n  async function ensureExists(dir) {\n    // Make sure the document folder exists\n    if (!(await fs.exists(dir))) {\n      await fs.mkdir(dir);\n    }\n  }\n\n  let documentDir = await asyncStorage.getItem('document-dir');\n\n  // Test the existing documents directory to make sure it's a valid\n  // path that exists, and if it errors fallback to the default one\n  if (documentDir) {\n    try {\n      await ensureExists(documentDir);\n    } catch (e) {\n      documentDir = null;\n    }\n  }\n\n  if (!documentDir) {\n    documentDir = getDefaultDocumentDir();\n  }\n\n  await ensureExists(documentDir);\n  fs._setDocumentDir(documentDir);\n}\n\nexport async function initApp(version, isDev, socketName) {\n  VERSION = version;\n\n  await sqlite.init();\n  await Promise.all([asyncStorage.init(), fs.init()]);\n  await tracking.init();\n  await setupDocumentsDir();\n\n  let keysStr = await asyncStorage.getItem('encrypt-keys');\n  if (keysStr) {\n    try {\n      let keys = JSON.parse(keysStr);\n\n      // Load all the keys\n      await Promise.all(\n        Object.keys(keys).map(fileId => {\n          return encryption.loadKey(keys[fileId]);\n        })\n      );\n    } catch (e) {\n      console.log('Error loading key', e);\n      throw new Error('load-key-error');\n    }\n  }\n\n  if (isDev) {\n    const lastBudget = await asyncStorage.getItem('lastBudget');\n    // if (lastBudget) {\n    //   loadBudget(lastBudget, VERSION);\n    // }\n  }\n\n  const url = await asyncStorage.getItem('server-url');\n  if (url) {\n    setServer(url);\n  }\n\n  connection.init(socketName, app.handlers);\n\n  tracking.track('app:init', {\n    platform: Platform.isMobile ? 'mobile' : Platform.isWeb ? 'web' : 'desktop'\n  });\n\n  if (!isDev && !Platform.isMobile && !Platform.isWeb) {\n    let autoUpdate = await asyncStorage.getItem('auto-update');\n    process.send({\n      type: 'shouldAutoUpdate',\n      flag: autoUpdate == null || autoUpdate === 'true'\n    });\n  }\n\n  if (isDev || process.env.IS_BETA) {\n    global.$send = (name, args) => runHandler(app.handlers[name], args);\n    global.$query = aqlQuery;\n    global.$q = q;\n    global.$db = db;\n    global.$setSyncingMode = setSyncingMode;\n  }\n}\n\nexport async function init({ budgetId, config }) {\n  // Get from build\n  // eslint-disable-next-line\n  VERSION = ACTUAL_APP_VERSION;\n\n  let dataDir, serverURL;\n  if (config) {\n    dataDir = config.dataDir;\n    serverURL = config.serverURL;\n  } else {\n    dataDir = process.env.ACTUAL_DATA_DIR;\n    serverURL = process.env.ACTUAL_SERVER_URL;\n  }\n\n  await sqlite.init();\n  await Promise.all([asyncStorage.init({ persist: false }), fs.init()]);\n  fs._setDocumentDir(dataDir || process.cwd());\n\n  if (serverURL) {\n    setServer(serverURL);\n  } else {\n    // This turns off all server URLs. In this mode we don't want any\n    // access to the server, we are doing things locally\n    setServer(null);\n\n    app.events.on('load-budget', () => {\n      setSyncingMode('offline');\n    });\n  }\n\n  if (budgetId) {\n    await runHandler(handlers['load-budget'], { id: budgetId });\n  }\n\n  return lib;\n}\n\n// Export a few things required for the platform\nexport const lib = {\n  getDataDir: fs.getDataDir,\n  sendMessage: (msg, args) => connection.send(msg, args),\n  send: async (name, args) => {\n    let res = await runHandler(app.handlers[name], args);\n    return res;\n  },\n  on: (name, func) => app.events.on(name, func),\n  syncAndReceiveMessages,\n  q,\n  db,\n\n  // Expose CRDT mechanisms so server can use them\n  merkle,\n  timestamp,\n  SyncProtoBuf: SyncPb\n};\n\nif (process.env.NODE_ENV === 'development' && Platform.isWeb) {\n  // Support reloading the backend\n  self.addEventListener('message', async e => {\n    if (e.data.type === '__actual:shutdown') {\n      await sheet.waitOnSpreadsheet();\n      await app.stopServices();\n      await db.closeDatabase();\n      asyncStorage.shutdown();\n      fs.shutdown();\n\n      setTimeout(() => {\n        // Give everything else some time to process shutdown events\n        self.close();\n      }, 100);\n    }\n  });\n}\n","// TODO: Ok, several problems:\n//\n// * If nothing matches between two merkle trees, we should fallback\n// * to the last window instead the front one (use 0 instead of the\n// * key)\n//\n// * Need to check to make sure if account exists when handling\n// * transaction changes in syncing\n\nexport function getKeys(trie) {\n  return Object.keys(trie).filter(x => x !== 'hash');\n}\n\nexport function keyToTimestamp(key) {\n  // 16 is the length of the base 3 value of the current time in\n  // minutes. Ensure it's padded to create the full value\n  let fullkey = key + '0'.repeat(16 - key.length);\n\n  // Parse the base 3 representation\n  return parseInt(fullkey, 3) * 1000 * 60;\n}\n\nexport function insert(trie, timestamp) {\n  let hash = timestamp.hash();\n  let key = Number((timestamp.millis() / 1000 / 60) | 0).toString(3);\n\n  trie = Object.assign({}, trie, { hash: trie.hash ^ hash });\n  return insertKey(trie, key, hash);\n}\n\nfunction insertKey(trie, key, hash) {\n  if (key.length === 0) {\n    return trie;\n  }\n  const c = key[0];\n  const n = trie[c] || {};\n  return Object.assign({}, trie, {\n    [c]: Object.assign({}, n, insertKey(n, key.slice(1), hash), {\n      hash: n.hash ^ hash\n    })\n  });\n}\n\nexport function build(timestamps) {\n  let trie = {};\n  for (let timestamp of timestamps) {\n    insert(trie, timestamp);\n  }\n  return trie;\n}\n\nexport function diff(trie1, trie2) {\n  if (trie1.hash === trie2.hash) {\n    return null;\n  }\n\n  let node1 = trie1;\n  let node2 = trie2;\n  let k = '';\n\n  // This loop will eventually stop when it traverses down to find\n  // where the hashes differ, or otherwise when there are no leaves\n  // left (this shouldn't happen, if that's the case the hash check at\n  // the top of this function should pass)\n  while (1) {\n    let keyset = new Set([...getKeys(node1), ...getKeys(node2)]);\n    let keys = [...keyset.values()];\n    keys.sort();\n\n    let diffkey = null;\n\n    // Traverse down the trie through keys that aren't the same. We\n    // traverse down the keys in order. Stop in two cases: either one\n    // of the nodes doesn't have the key, or a different key isn't\n    // found. For the former case, we have to that because pruning is\n    // lossy. We don't know if we've pruned off a changed key so we\n    // can't traverse down anymore. For the latter case, it means two\n    // things: either we've hit the bottom of the tree, or the changed\n    // key has been pruned off. In the latter case we have a \"partial\"\n    // key and will fill the rest with 0s. Note that if multiple older\n    // messages were added into one trie, it's possible we will\n    // generate a time that only encompasses *some* of the those\n    // messages. Pruning is lossy, and we traverse down the left-most\n    // changed time that we know of, because of pruning it might take\n    // multiple passes to sync up a trie.\n    for (let i = 0; i < keys.length; i++) {\n      let key = keys[i];\n\n      if (!node1[key] || !node2[key]) {\n        break;\n      }\n\n      let next1 = node1[key];\n      let next2 = node2[key];\n      if (next1.hash !== next2.hash) {\n        diffkey = key;\n        break;\n      }\n    }\n\n    if (!diffkey) {\n      return keyToTimestamp(k);\n    }\n\n    k += diffkey;\n    node1 = node1[diffkey] || {};\n    node2 = node2[diffkey] || {};\n  }\n}\n\nexport function prune(trie, n = 2) {\n  // Do nothing if empty\n  if (!trie.hash) {\n    return trie;\n  }\n\n  let keys = getKeys(trie);\n  keys.sort();\n\n  let next = { hash: trie.hash };\n  keys = keys.slice(-n).map(k => (next[k] = prune(trie[k], n)));\n\n  return next;\n}\n\nexport function debug(trie, k = '', indent = 0) {\n  const str =\n    ' '.repeat(indent) +\n    (k !== '' ? `k: ${k} ` : '') +\n    `hash: ${trie.hash || '(empty)'}\\n`;\n  return (\n    str +\n    getKeys(trie)\n      .map(key => {\n        return debug(trie[key], key, indent + 2);\n      })\n      .join('')\n  );\n}\n","import fs from '../../platform/server/fs';\nimport * as sqlite from '../../platform/server/sqlite';\n\n// We have to bundle in JS migrations manually to avoid having to `eval`\n// them which doesn't play well with CSP. There isn't great, and eventually\n// we can remove this migration.\nimport m1632571489012 from '../../../migrations/1632571489012_remove_cache.js';\n\nconst uuid = require('../../platform/uuid');\n\nlet MIGRATIONS_DIR = fs.migrationsPath;\n\nlet javascriptMigrations = {\n  1632571489012: m1632571489012\n};\n\nexport async function withMigrationsDir(dir, func) {\n  let oldDir = MIGRATIONS_DIR;\n  MIGRATIONS_DIR = dir;\n  await func();\n  MIGRATIONS_DIR = oldDir;\n}\n\nexport function getMigrationsDir() {\n  return MIGRATIONS_DIR;\n}\n\nfunction getMigrationId(name) {\n  return parseInt(name.match(/^(\\d)+/)[0]);\n}\n\nexport function getUpMigration(id, names) {\n  for (let m of names) {\n    if (getMigrationId(m) === id) {\n      return m;\n    }\n  }\n}\n\nexport async function getAppliedMigrations(db) {\n  const rows = await sqlite.runQuery(\n    db,\n    'SELECT * FROM __migrations__ ORDER BY id ASC',\n    [],\n    true\n  );\n  return rows.map(row => row.id);\n}\n\nexport async function getMigrationList(migrationsDir) {\n  const files = await fs.listDir(migrationsDir);\n  return files\n    .filter(name => name.match(/(\\.sql|\\.js)$/))\n    .sort((m1, m2) => {\n      const id1 = getMigrationId(m1);\n      const id2 = getMigrationId(m2);\n      if (id1 < id2) {\n        return -1;\n      } else if (id1 > id2) {\n        return 1;\n      }\n      return 0;\n    });\n}\n\nexport function getPending(appliedIds, all) {\n  return all.filter(name => {\n    const id = getMigrationId(name);\n    return appliedIds.indexOf(id) === -1;\n  });\n}\n\nasync function applyJavaScript(db, id) {\n  const dbInterface = {\n    runQuery: (query, params, fetchAll) =>\n      sqlite.runQuery(db, query, params, fetchAll),\n    execQuery: query => sqlite.execQuery(db, query),\n    transaction: func => sqlite.transaction(db, func)\n  };\n\n  if (javascriptMigrations[id] == null) {\n    throw new Error('Could not find JS migration code to run for ' + id);\n  }\n\n  let run = javascriptMigrations[id];\n  return run(dbInterface, () => uuid.v4Sync());\n}\n\nasync function applySql(db, sql) {\n  try {\n    await sqlite.execQuery(db, sql);\n  } catch (e) {\n    console.log('Error applying sql:', sql);\n    throw e;\n  }\n}\n\nexport async function applyMigration(db, name, migrationsDir) {\n  const code = await fs.readFile(fs.join(migrationsDir, name));\n  if (name.match(/\\.js$/)) {\n    await applyJavaScript(db, getMigrationId(name));\n  } else {\n    await applySql(db, code);\n  }\n  await sqlite.runQuery(db, 'INSERT INTO __migrations__ (id) VALUES (?)', [\n    getMigrationId(name)\n  ]);\n}\n\nfunction checkDatabaseValidity(appliedIds, available) {\n  for (let i = 0; i < appliedIds.length; i++) {\n    if (\n      i >= available.length ||\n      appliedIds[i] !== getMigrationId(available[i])\n    ) {\n      throw new Error('out-of-sync-migrations');\n    }\n  }\n}\n\nexport async function migrate(db) {\n  let appliedIds = await getAppliedMigrations(db);\n  let available = await getMigrationList(MIGRATIONS_DIR);\n\n  checkDatabaseValidity(appliedIds, available);\n\n  const pending = getPending(appliedIds, available);\n\n  for (let migration of pending) {\n    await applyMigration(db, migration, MIGRATIONS_DIR);\n  }\n\n  return pending;\n}\n","export function requiredFields(name, row, fields, update) {\n  fields.forEach(field => {\n    if (update) {\n      if (row.hasOwnProperty(field) && row[field] == null) {\n        throw new Error(`${name} is missing field ${field}`);\n      }\n    } else {\n      if (!row.hasOwnProperty(field) || row[field] == null) {\n        throw new Error(`${name} is missing field ${field}`);\n      }\n    }\n  });\n}\n\nexport function toDateRepr(str) {\n  if (typeof str !== 'string') {\n    throw new Error('toDateRepr not passed a string: ' + str);\n  }\n\n  return parseInt(str.replace(/-/g, ''));\n}\n\nexport function fromDateRepr(number) {\n  if (typeof number !== 'number') {\n    throw new Error('fromDateRepr not passed a number: ' + number);\n  }\n\n  const dateString = number.toString();\n  return (\n    dateString.slice(0, 4) +\n    '-' +\n    dateString.slice(4, 6) +\n    '-' +\n    dateString.slice(6)\n  );\n}\n\nexport const accountModel = {\n  validateAccountType(account) {\n    const { type } = account;\n    if (\n      type !== 'checking' &&\n      type !== 'savings' &&\n      type !== 'investment' &&\n      type !== 'credit' &&\n      type !== 'mortgage' &&\n      type !== 'debt' &&\n      type !== 'other'\n    ) {\n      throw new Error('Invalid account type: ' + type);\n    }\n  },\n\n  validate(account, { update } = {}) {\n    if (!update || account.type != null) {\n      accountModel.validateAccountType(account);\n    }\n\n    requiredFields(\n      'account',\n      account,\n      update ? ['name', 'type', 'offbudget', 'closed'] : ['name', 'type'],\n      update\n    );\n\n    return account;\n  }\n};\n\nexport const categoryModel = {\n  validate(category, { update } = {}) {\n    requiredFields(\n      'category',\n      category,\n      update ? ['name', 'is_income', 'cat_group'] : ['name', 'cat_group'],\n      update\n    );\n\n    let { sort_order, ...rest } = category;\n    return rest;\n  }\n};\n\nexport const categoryGroupModel = {\n  validate(categoryGroup, { update } = {}) {\n    requiredFields(\n      'categoryGroup',\n      categoryGroup,\n      update ? ['name', 'is_income'] : ['name'],\n      update\n    );\n\n    let { sort_order, ...rest } = categoryGroup;\n    return rest;\n  }\n};\n\nexport const payeeModel = {\n  validate(payee, { update } = {}) {\n    requiredFields('payee', payee, ['name'], update);\n    return payee;\n  }\n};\n\nexport const payeeRuleModel = {\n  validateType(rule) {\n    const { type } = rule;\n    if (type !== 'equals' && type !== 'contains') {\n      throw new Error('Invalid rule type: ' + type);\n    }\n  },\n\n  validate(rule, { update } = {}) {\n    if (!update || 'type' in rule) {\n      payeeRuleModel.validateType(rule);\n    }\n\n    requiredFields('payee_rules', rule, ['payee_id', 'type'], update);\n    return rule;\n  }\n};\n\nexport const transactionModel = {\n  validate(trans, { update } = {}) {\n    requiredFields('transaction', trans, ['date', 'acct'], update);\n\n    if ('date' in trans) {\n      // Make sure it's the right format, and also do a sanity check.\n      // Really old dates can mess up the system and can happen by\n      // accident\n      if (\n        trans.date.match(/^\\d{4}-\\d{2}-\\d{2}$/) == null ||\n        trans.date < '2000-01-01'\n      ) {\n        throw new Error('Invalid transaction date: ' + trans.date);\n      }\n    }\n\n    return trans;\n  },\n\n  toJS(row) {\n    // Check a non-important field that typically wouldn't be passed in\n    // manually, and use it as a smoke test to see if this is a\n    // fully-formed transaction or not.\n    if (!('location' in row)) {\n      throw new Error(\n        'A full transaction is required to be passed to `toJS`. Instead got: ' +\n          JSON.stringify(row)\n      );\n    }\n\n    let trans = { ...row };\n    trans.error = row.error ? JSON.parse(row.error) : null;\n    trans.isParent = row.isParent === 1 ? true : false;\n    trans.isChild = row.isChild === 1 ? true : false;\n    trans.starting_balance_flag =\n      row.starting_balance_flag === 1 ? true : false;\n    trans.cleared = row.cleared === 1 ? true : false;\n    trans.pending = row.pending === 1 ? true : false;\n    trans.date = trans.date && fromDateRepr(trans.date);\n    return trans;\n  },\n\n  fromJS(trans) {\n    let row = { ...trans };\n    if ('error' in row) {\n      row.error = trans.error ? JSON.stringify(trans.error) : null;\n    }\n    if ('isParent' in row) {\n      row.isParent = trans.isParent ? 1 : 0;\n    }\n    if ('isChild' in row) {\n      row.isChild = trans.isChild ? 1 : 0;\n    }\n    if ('cleared' in row) {\n      row.cleared = trans.cleared ? 1 : 0;\n    }\n    if ('pending' in row) {\n      row.pending = trans.pending ? 1 : 0;\n    }\n    if ('starting_balance_flag' in row) {\n      row.starting_balance_flag = trans.starting_balance_flag ? 1 : 0;\n    }\n    if ('date' in row) {\n      row.date = toDateRepr(trans.date);\n    }\n\n    return row;\n  }\n};\n","import { sequential } from '../shared/async';\nimport { captureException, captureBreadcrumb } from '../platform/exceptions';\n\nlet runningMethods = new Set();\n\nlet currentContext = null;\nlet mutatingMethods = new WeakMap();\nlet globalMutationsEnabled = false;\n\nlet _latestHandlerNames = [];\n\nexport function mutator(handler) {\n  mutatingMethods.set(handler, true);\n  return handler;\n}\n\nexport function isMutating(handler) {\n  return mutatingMethods.has(handler);\n}\n\nasync function flushRunningMethods() {\n  // Give the client some time to invoke new requests\n  await wait(200);\n\n  while (runningMethods.size > 0) {\n    // Wait for all of them\n    await Promise.all([...runningMethods.values()]);\n\n    // We give clients more time to make other requests. This lets them continue\n    // to do an async workflow\n    await wait(100);\n  }\n}\n\nfunction wait(time) {\n  return new Promise(resolve => setTimeout(resolve, time));\n}\n\nexport async function runHandler(handler, args, { undoTag, name } = {}) {\n  // For debug reasons, track the latest handlers that have been\n  // called\n  _latestHandlerNames.push(name);\n  if (_latestHandlerNames.length > 5) {\n    _latestHandlerNames = _latestHandlerNames.slice(-5);\n  }\n\n  if (mutatingMethods.has(handler)) {\n    return runMutator(() => handler(args), { undoTag });\n  }\n\n  // When closing a file, it clears out all global state for the file. That\n  // means any async workflows currently executed would be cut off. We handle\n  // this by letting all async workflows finish executing before closing the\n  // file\n  if (name === 'close-budget') {\n    await flushRunningMethods();\n  }\n\n  let promise = handler(args);\n  runningMethods.add(promise);\n  promise.then(() => {\n    runningMethods.delete(promise);\n  });\n  return promise;\n}\n\n// These are useful for tests. Only use them in tests.\nexport function enableGlobalMutations() {\n  if (global.__TESTING__) {\n    globalMutationsEnabled = true;\n  }\n}\n\nexport function disableGlobalMutations() {\n  if (global.__TESTING__) {\n    globalMutationsEnabled = false;\n  }\n}\n\nexport const runMutator = sequential(async (func, initialContext = {}) => {\n  currentContext = initialContext;\n  return func().finally(() => {\n    currentContext = null;\n  });\n});\n\nexport function withMutatorContext(context, func) {\n  if (currentContext == null && !globalMutationsEnabled) {\n    captureBreadcrumb('Recent methods: ' + _latestHandlerNames.join(', '));\n    captureException(new Error('withMutatorContext: mutator not running'));\n\n    // See comment below. This is not an error right now, but it will\n    // be in the future.\n    return func();\n  }\n\n  let prevContext = currentContext;\n  currentContext = { ...currentContext, ...context };\n  return func().finally(() => {\n    currentContext = prevContext;\n  });\n}\n\nexport function getMutatorContext() {\n  if (currentContext == null) {\n    captureBreadcrumb({\n      category: 'server',\n      message: 'Recent methods: ' + _latestHandlerNames.join(', ')\n    });\n    // captureException(new Error('getMutatorContext: mutator not running'));\n\n    // For now, this is a non-fatal error. It will be in the future,\n    // but this is relatively non-critical (undo just won't work) so\n    // return an empty context. When we have more confidence that\n    // everything is running inside a mutator, throw an error.\n    return {};\n  }\n\n  if (currentContext == null && globalMutationsEnabled) {\n    return {};\n  }\n  return currentContext;\n}\n","import { createApp } from '../app';\nimport * as db from '../db';\n\nlet app = createApp();\n\napp.method('notes-save', async ({ id, note }) => {\n  await db.update('notes', { id, note });\n});\n\nexport default app;\n","let enabled = false;\nlet entries = {};\nlet counters = {};\n\nexport function reset() {\n  entries = {};\n  counters = {};\n}\n\nexport function record(name) {\n  const start = Date.now();\n  return () => unrecord(name, start);\n}\n\nfunction unrecord(name, start) {\n  const end = Date.now();\n\n  if (enabled) {\n    if (entries[name] == null) {\n      entries[name] = [];\n    }\n    entries[name].push(end - start);\n  }\n}\n\nexport function increment(name) {\n  if (enabled) {\n    if (counters[name] == null) {\n      counters[name] = 0;\n    }\n    counters[name]++;\n  }\n}\n\nexport function start() {\n  enabled = true;\n}\n\nexport function stop() {\n  enabled = false;\n\n  console.log('~~ PERFORMANCE REPORT ~~');\n  for (let name in entries) {\n    const records = entries[name];\n    const total = records.reduce((total, n) => total + n / 1000, 0);\n    const avg = total / records.length;\n\n    console.log(\n      `[${name}] count: ${records.length} total: ${total}s avg: ${avg}`\n    );\n  }\n\n  for (let name in counters) {\n    console.log(`[${name}] ${counters[name]}`);\n  }\n  console.log('~~ END REPORT ~~');\n\n  reset();\n}\n","export default {\n  isMobile: false,\n  isWeb: false,\n  isDesktop: true\n};\n","// By default, no polyfills are installed\n","import Platform from './platform';\nconst { PostError, HTTPError } = require('./errors');\nconst { fetch } = require('../platform/server/fetch');\n\nfunction throwIfNot200(res, text) {\n  if (res.status !== 200) {\n    if (res.status === 500) {\n      throw new PostError(res.status === 500 ? 'internal' : text);\n    }\n\n    let contentType = res.headers.get('Content-Type');\n    if (contentType.toLowerCase().indexOf('application/json') !== -1) {\n      let json = JSON.parse(text);\n      throw new PostError(json.reason);\n    }\n    throw new PostError(text);\n  }\n}\n\nexport async function post(url, data) {\n  let text;\n  let res;\n\n  let s = new Error().stack;\n\n  try {\n    res = await fetch(url, {\n      method: 'POST',\n      body: JSON.stringify(data),\n      headers: {\n        'Content-Type': 'application/json'\n      }\n    });\n    text = await res.text();\n  } catch (err) {\n    throw new PostError('network-failure');\n  }\n\n  throwIfNot200(res, text);\n\n  try {\n    res = JSON.parse(text);\n  } catch (err) {\n    // Something seriously went wrong. TODO handle errors\n    throw new PostError('parse-json', { meta: text });\n  }\n\n  if (res.status !== 'ok') {\n    console.log(\n      'API call failed: ' +\n        url +\n        '\\nData: ' +\n        JSON.stringify(data, null, 2) +\n        '\\nResponse: ' +\n        JSON.stringify(res, null, 2)\n    );\n\n    throw new PostError(res.description || res.reason || 'unknown');\n  }\n\n  return res.data;\n}\n\nexport async function postBinary(url, data, headers) {\n  let res;\n  try {\n    res = await fetch(url, {\n      method: 'POST',\n      body: Platform.isWeb ? data : Buffer.from(data),\n      headers: {\n        'Content-Length': data.length,\n        'Content-Type': 'application/actual-sync',\n        ...headers\n      }\n    });\n  } catch (err) {\n    throw new PostError('network-failure');\n  }\n\n  let buffer;\n  if (res.arrayBuffer) {\n    buffer = Buffer.from(await res.arrayBuffer());\n  } else {\n    buffer = await res.buffer();\n  }\n\n  throwIfNot200(res, buffer.toString());\n\n  return buffer;\n}\n\nexport function get(url, opts) {\n  return fetch(url, opts).then(res => res.text());\n}\n","import { sendMessages } from './sync';\nimport Timestamp from './timestamp';\nconst fs = require('../platform/server/fs');\n\nlet prefs = null;\n\nexport async function loadPrefs(id) {\n  if (global.__TESTING__ && !id) {\n    prefs = { dummyTestPrefs: true };\n    return prefs;\n  }\n\n  const fullpath = fs.join(fs.getBudgetDir(id), 'metadata.json');\n\n  try {\n    prefs = JSON.parse(await fs.readFile(fullpath));\n  } catch (e) {\n    // If the user messed something up, be flexible and allow them to\n    // still load the budget database. Default the budget name to the\n    // id.\n    prefs = { id, budgetName: id };\n  }\n\n  // No matter what is in `id` field, force it to be the current id.\n  // This makes it resilient to users moving around folders, etc\n  prefs.id = id;\n  return prefs;\n}\n\nexport async function savePrefs(prefsToSet, { avoidSync = false } = {}) {\n  Object.assign(prefs, prefsToSet);\n\n  if (!avoidSync) {\n    // Sync whitelisted prefs\n    let messages = Object.keys(prefsToSet)\n      .map(key => {\n        if (key === 'budgetType' || key === 'budgetName') {\n          return {\n            dataset: 'prefs',\n            row: key,\n            column: 'value',\n            value: prefsToSet[key],\n            timestamp: Timestamp.send()\n          };\n        }\n        return null;\n      })\n      .filter(x => x);\n\n    if (messages.length > 0) {\n      await sendMessages(messages);\n    }\n  }\n\n  if (!prefs.dummyTestPrefs) {\n    let prefsPath = fs.join(fs.getBudgetDir(prefs.id), 'metadata.json');\n    await fs.writeFile(prefsPath, JSON.stringify(prefs));\n  }\n}\n\nexport function unloadPrefs() {\n  prefs = null;\n}\n\nexport function getPrefs() {\n  return prefs;\n}\n\nexport function getDefaultPrefs(id, budgetName) {\n  // Add any notifications in here that new users shouldn't see.\n  // Without them, a popup will show to explain a new feature.\n  return {\n    id,\n    budgetName,\n    'notifications.schedules': true,\n    'notifications.repair-splits': true\n  };\n}\n\nexport async function readPrefs(id) {\n  const fullpath = fs.join(fs.getBudgetDir(id), 'metadata.json');\n\n  try {\n    return JSON.parse(await fs.readFile(fullpath));\n  } catch (e) {\n    return null;\n  }\n}\n","import deepEqual from 'deep-equal';\nimport * as d from 'date-fns';\nimport { createApp } from '../app';\nimport * as db from '../db';\nimport * as prefs from '../prefs';\nimport { toDateRepr } from '../models';\nimport { runQuery as aqlQuery } from '../aql/schema/run-query';\nimport { compileQuery } from '../aql/compiler';\nimport { schema, schemaConfig } from '../aql/schema';\nimport { dayFromDate, currentDay, parseDate } from '../../shared/months';\nimport q from '../../shared/query';\nimport {\n  insertRule,\n  updateRule,\n  getRules,\n  ruleModel\n} from '../accounts/transaction-rules';\nimport { Rule, Condition } from '../accounts/rules';\nimport {\n  extractScheduleConds,\n  recurConfigToRSchedule,\n  getHasTransactionsQuery,\n  getStatus,\n  getScheduledAmount\n} from '../../shared/schedules';\nimport { mutator, runMutator } from '../mutators';\nimport { undoable } from '../undo';\nimport { Schedule as RSchedule } from '../util/rschedule';\nimport { addSyncListener, batchMessages } from '../sync';\nimport { captureBreadcrumb } from '../../platform/exceptions';\nimport { addTransactions } from '../accounts/sync';\nimport { findSchedules } from './find-schedules';\n\nconst connection = require('../../platform/server/connection');\nconst uuid = require('../../platform/uuid');\n\n// Utilities\n\nfunction zip(arr1, arr2) {\n  let result = [];\n  for (let i = 0; i < arr1.length; i++) {\n    result.push([arr1[i], arr2[i]]);\n  }\n  return result;\n}\n\nexport function updateConditions(conditions, newConditions) {\n  let scheduleConds = extractScheduleConds(conditions);\n  let newScheduleConds = extractScheduleConds(newConditions);\n\n  let replacements = zip(\n    Object.values(scheduleConds),\n    Object.values(newScheduleConds)\n  );\n\n  let updated = conditions.map(cond => {\n    let r = replacements.find(r => cond === r[0]);\n    return r && r[1] ? r[1] : cond;\n  });\n\n  let added = replacements\n    .filter(x => x[0] == null && x[1] != null)\n    .map(x => x[1]);\n\n  return updated.concat(added);\n}\n\nexport function getNextDate(dateCond, start = new Date()) {\n  start = d.startOfDay(start);\n\n  let cond = new Condition(\n    dateCond.op,\n    'date',\n    dateCond.value,\n    null,\n    new Map(Object.entries({ date: 'date' }))\n  );\n  let value = cond.getValue();\n\n  if (value.type === 'date') {\n    return value.date;\n  } else if (value.type === 'recur') {\n    let dates = value.schedule.occurrences({ start, take: 1 }).toArray();\n\n    if (dates.length > 0) {\n      let date = dates[0].date;\n      return dayFromDate(date);\n    }\n  }\n  return null;\n}\n\nexport async function getRuleForSchedule(id) {\n  if (id == null) {\n    throw new Error('Schedule not attached to a rule');\n  }\n\n  let { data: ruleId } = await aqlQuery(\n    q('schedules')\n      .filter({ id })\n      .calculate('rule')\n  );\n  return getRules().find(rule => rule.id === ruleId);\n}\n\nexport async function fixRuleForSchedule(id) {\n  let { data: ruleId } = await aqlQuery(\n    q('schedules')\n      .filter({ id })\n      .calculate('rule')\n  );\n\n  if (ruleId) {\n    // Take the bad rule out of the system so it never causes problems\n    // in the future\n    await db.delete_('rules', ruleId);\n  }\n\n  let newId = await insertRule({\n    stage: null,\n    conditions: [\n      { op: 'isapprox', field: 'date', value: currentDay() },\n      { op: 'isapprox', field: 'amount', value: 0 }\n    ],\n    actions: [{ op: 'link-schedule', value: id }]\n  });\n\n  await db.updateWithSchema('schedules', { id, rule: newId });\n\n  return getRules().find(rule => rule.id === newId);\n}\n\nexport async function setNextDate({ id, start, conditions, reset }) {\n  if (conditions == null) {\n    let rule = await getRuleForSchedule(id);\n    if (rule == null) {\n      throw new Error('No rule found for schedule');\n    }\n    conditions = rule.serialize().conditions;\n  }\n\n  let { date: dateCond } = extractScheduleConds(conditions);\n\n  let { data: nextDate } = await aqlQuery(\n    q('schedules')\n      .filter({ id })\n      .calculate('next_date')\n  );\n\n  // Only do this if a date condition exists\n  if (dateCond) {\n    let newNextDate = getNextDate(\n      dateCond,\n      start ? start(nextDate) : new Date()\n    );\n\n    if (newNextDate !== nextDate) {\n      // Our `update` functon requires the id of the item and we don't\n      // have it, so we need to query it\n      let nd = await db.first(\n        'SELECT id, base_next_date_ts FROM schedules_next_date WHERE schedule_id = ?',\n        [id]\n      );\n\n      await db.update(\n        'schedules_next_date',\n        reset\n          ? {\n              id: nd.id,\n              base_next_date: toDateRepr(newNextDate),\n              base_next_date_ts: Date.now()\n            }\n          : {\n              id: nd.id,\n              local_next_date: toDateRepr(newNextDate),\n              local_next_date_ts: nd.base_next_date_ts\n            }\n      );\n    }\n  }\n}\n\n// Methods\n\nexport async function createSchedule({ schedule, conditions = [] } = {}) {\n  let scheduleId = (schedule && schedule.id) || uuid.v4Sync();\n\n  let { date: dateCond } = extractScheduleConds(conditions);\n  if (dateCond == null) {\n    throw new Error('A date condition is required to create a schedule');\n  }\n  if (dateCond.value == null) {\n    throw new Error('Date is required');\n  }\n\n  let nextDate = getNextDate(dateCond);\n  let nextDateRepr = nextDate ? toDateRepr(nextDate) : null;\n\n  // Create the rule here based on the info\n  let ruleId;\n  ruleId = await insertRule({\n    stage: null,\n    conditions,\n    actions: [{ op: 'link-schedule', value: scheduleId }]\n  });\n\n  let now = Date.now();\n  let nextDateId = await db.insertWithUUID('schedules_next_date', {\n    schedule_id: scheduleId,\n    local_next_date: nextDateRepr,\n    local_next_date_ts: now,\n    base_next_date: nextDateRepr,\n    base_next_date_ts: now\n  });\n\n  let id = await db.insertWithSchema('schedules', {\n    ...schedule,\n    id: scheduleId,\n    rule: ruleId\n  });\n\n  return scheduleId;\n}\n\n// TODO: don't allow deleting rules that link schedules\n\nexport async function updateSchedule({ schedule, conditions, resetNextDate }) {\n  if (schedule.rule) {\n    throw new Error('You cannot change the rule of a schedule');\n  }\n\n  // We need the rule if there are conditions\n  let rule;\n\n  // This must be outside the `batchMessages` call because we change\n  // and then read data\n  if (conditions) {\n    let { date: dateCond } = extractScheduleConds(conditions);\n    if (dateCond && dateCond.value == null) {\n      throw new Error('Date is required');\n    }\n\n    // We need to get the full rule to merge in the updated\n    // conditions\n    rule = await getRuleForSchedule(schedule.id);\n\n    if (rule == null) {\n      // In the edge case that a rule gets corrupted (either by a bug in\n      // the system or user messing with their data), don't crash. We\n      // generate a new rule because schedules have to have a rule\n      // attached to them.\n      rule = await fixRuleForSchedule(schedule.id);\n    }\n  }\n\n  await batchMessages(async () => {\n    if (conditions) {\n      let oldConditions = rule.serialize().conditions;\n      let newConditions = updateConditions(oldConditions, conditions);\n\n      await updateRule({ id: rule.id, conditions: newConditions });\n\n      // Annoyingly, sometimes it has `type` and sometimes it doesn't\n      let stripType = ({ type, ...fields }) => fields;\n\n      // Update `next_date` if the user forced it, or if the account\n      // or date changed. We check account because we don't update\n      // schedules automatically for closed account, and the user\n      // might switch accounts from a closed one\n      if (\n        resetNextDate ||\n        !deepEqual(\n          oldConditions.find(c => c.field === 'account'),\n          oldConditions.find(c => c.field === 'account')\n        ) ||\n        !deepEqual(\n          stripType(oldConditions.find(c => c.field === 'date')),\n          stripType(newConditions.find(c => c.field === 'date'))\n        )\n      ) {\n        await setNextDate({\n          id: schedule.id,\n          conditions: newConditions,\n          reset: true\n        });\n      }\n    } else if (resetNextDate) {\n      await setNextDate({ id: schedule.id, reset: true });\n    }\n\n    await db.updateWithSchema('schedules', schedule);\n  });\n}\n\nexport async function deleteSchedule({ id }) {\n  let { data: ruleId } = await aqlQuery(\n    q('schedules')\n      .filter({ id })\n      .calculate('rule')\n  );\n\n  await batchMessages(async () => {\n    await db.delete_('rules', ruleId);\n    await db.delete_('schedules', id);\n  });\n}\n\nexport async function skipNextDate({ id }) {\n  return setNextDate({\n    id,\n    start: nextDate => {\n      return d.addDays(parseDate(nextDate), 1);\n    }\n  });\n}\n\n// `schedule` here might not be a saved schedule, so it might not have\n// an id\nexport function getPossibleTransactions({ schedule }) {}\n\nexport function discoverSchedules() {\n  return findSchedules();\n}\n\nexport async function getUpcomingDates({ config, count }) {\n  let rules = recurConfigToRSchedule(config);\n\n  try {\n    let schedule = new RSchedule({ rrules: rules });\n\n    return schedule\n      .occurrences({ start: d.startOfDay(new Date()), take: count })\n      .toArray()\n      .map(date => dayFromDate(date.date));\n  } catch (err) {\n    captureBreadcrumb(config);\n    throw err;\n  }\n}\n\n// Services\n\nfunction onRuleUpdate(rule) {\n  let { actions, conditions } =\n    rule instanceof Rule ? rule.serialize() : ruleModel.toJS(rule);\n\n  if (actions && actions.find(a => a.op === 'link-schedule')) {\n    let scheduleId = actions.find(a => a.op === 'link-schedule').value;\n\n    if (scheduleId) {\n      let conds = extractScheduleConds(conditions);\n\n      let payeeIdx = conditions.findIndex(c => c === conds.payee);\n      let accountIdx = conditions.findIndex(c => c === conds.account);\n      let amountIdx = conditions.findIndex(c => c === conds.amount);\n      let dateIdx = conditions.findIndex(c => c === conds.date);\n\n      db.runQuery(\n        'INSERT OR REPLACE INTO schedules_json_paths (schedule_id, payee, account, amount, date) VALUES (?, ?, ?, ?, ?)',\n        [\n          scheduleId,\n          payeeIdx === -1 ? null : `$[${payeeIdx}]`,\n          accountIdx === -1 ? null : `$[${accountIdx}]`,\n          amountIdx === -1 ? null : `$[${amountIdx}]`,\n          dateIdx === -1 ? null : `$[${dateIdx}]`\n        ]\n      );\n    }\n  }\n}\n\nfunction trackJSONPaths() {\n  // Populate the table\n  db.transaction(() => {\n    getRules().forEach(rule => {\n      onRuleUpdate(rule);\n    });\n  });\n\n  return addSyncListener(onApplySync);\n}\n\nfunction onApplySync(oldValues, newValues) {\n  let found = false;\n  newValues.forEach((items, table) => {\n    if (table === 'rules') {\n      found = true;\n      items.forEach(newValue => {\n        onRuleUpdate(newValue);\n      });\n    }\n  });\n}\n\n// This is the service that move schedules forward automatically and\n// posts transactions\n\nasync function postTransactionForSchedule({ id }) {\n  let { data } = await aqlQuery(\n    q('schedules')\n      .filter({ id })\n      .select('*')\n  );\n  let schedule = data[0];\n  if (schedule == null || schedule._account == null) {\n    return;\n  }\n\n  let transaction = {\n    payee: schedule._payee,\n    account: schedule._account,\n    amount: getScheduledAmount(schedule._amount),\n    date: schedule.next_date,\n    schedule: schedule.id,\n    cleared: false\n  };\n\n  if (transaction.account) {\n    await addTransactions(transaction.account, [transaction]);\n  }\n}\n\n// TODO: make this sequential\n\nexport async function advanceSchedulesService(syncSuccess) {\n  // Move all paid schedules\n  let { data: schedules } = await aqlQuery(\n    q('schedules')\n      .filter({ completed: false, '_account.closed': false })\n      .select('*')\n  );\n  let { data: hasTransData } = await aqlQuery(\n    getHasTransactionsQuery(schedules)\n  );\n  let hasTrans = new Set(hasTransData.filter(Boolean).map(row => row.schedule));\n\n  let failedToPost = [];\n  let didPost = false;\n\n  for (let schedule of schedules) {\n    let status = getStatus(\n      schedule.next_date,\n      schedule.completed,\n      hasTrans.has(schedule.id)\n    );\n\n    if (status === 'paid') {\n      if (schedule._date) {\n        // Move forward recurring schedules\n        if (schedule._date.frequency) {\n          try {\n            await setNextDate({ id: schedule.id });\n          } catch (err) {\n            // This might error if the rule is corrupted and it can't\n            // find the rule\n          }\n        } else {\n          if (schedule._date < currentDay()) {\n            // Complete any single schedules\n            await updateSchedule({\n              schedule: { id: schedule.id, completed: true }\n            });\n          }\n        }\n      }\n    } else if (\n      (status === 'due' || status === 'missed') &&\n      schedule.posts_transaction &&\n      schedule._account\n    ) {\n      // Automatically create a transaction for due schedules\n      if (syncSuccess) {\n        await postTransactionForSchedule({ id: schedule.id });\n\n        didPost = true;\n      } else {\n        failedToPost.push(schedule._payee);\n      }\n    }\n  }\n\n  if (failedToPost.length > 0) {\n    connection.send('schedules-offline', { payees: failedToPost });\n  } else if (didPost) {\n    // This forces a full refresh of transactions because it\n    // simulates them coming in from a full sync. This not a\n    // great API right now, but I think generally the approach\n    // is sane to treat them as external sync events.\n    connection.send('sync-event', {\n      type: 'success',\n      tables: ['transactions'],\n      syncDisabled: 'false'\n    });\n  }\n}\n\n// Expose functions to the client\nlet app = createApp();\n\napp.method('schedule/create', mutator(undoable(createSchedule)));\napp.method('schedule/update', mutator(undoable(updateSchedule)));\napp.method('schedule/delete', mutator(undoable(deleteSchedule)));\napp.method('schedule/skip-next-date', mutator(undoable(skipNextDate)));\napp.method(\n  'schedule/post-transaction',\n  mutator(undoable(postTransactionForSchedule))\n);\napp.method(\n  'schedule/force-run-service',\n  mutator(() => advanceSchedulesService(true))\n);\napp.method('schedule/get-possible-transactions', getPossibleTransactions);\napp.method('schedule/discover', discoverSchedules);\napp.method('schedule/get-upcoming-dates', getUpcomingDates);\n\napp.service(trackJSONPaths);\n\napp.events.on('sync', ({ type, subtype }) => {\n  let completeEvent =\n    type === 'success' || type === 'error' || type === 'unauthorized';\n\n  if (completeEvent && prefs.getPrefs()) {\n    let { lastScheduleRun } = prefs.getPrefs();\n\n    if (lastScheduleRun !== currentDay()) {\n      runMutator(() => advanceSchedulesService(type === 'success'));\n\n      prefs.savePrefs({ lastScheduleRun: currentDay() });\n    }\n  }\n});\n\nexport default app;\n","import * as d from 'date-fns';\nimport * as db from '../db';\nimport { Schedule as RSchedule } from '../util/rschedule';\nimport { groupBy } from '../../shared/util';\nimport { fromDateRepr } from '../models';\nimport { runQuery as aqlQuery } from '../aql/schema/run-query';\nimport q from '../../shared/query';\nimport { getApproxNumberThreshold } from '../../shared/rules';\nimport { recurConfigToRSchedule } from '../../shared/schedules';\nimport { dayFromDate, parseDate, subDays } from '../../shared/months';\nimport { conditionsToAQL } from '../accounts/transaction-rules';\nconst uuid = require('../../platform/uuid');\n\nfunction takeDates(config) {\n  let schedule = new RSchedule({ rrules: recurConfigToRSchedule(config) });\n  return schedule\n    .occurrences({ take: 3 })\n    .toArray()\n    .map(d => d.date);\n}\n\nasync function getTransactions(date, account) {\n  let { data } = await aqlQuery(\n    q('transactions')\n      .filter({\n        account,\n        schedule: null,\n        // Don't match transfers\n        'payee.transfer_acct': null,\n        $and: [\n          { date: { $gte: d.subDays(date, 2) } },\n          { date: { $lte: d.addDays(date, 2) } }\n        ]\n      })\n      .select('*')\n      .options({ splits: 'none' })\n  );\n  return data;\n}\n\nfunction getRank(day1, day2) {\n  let dayDiff = Math.abs(d.differenceInDays(parseDate(day1), parseDate(day2)));\n\n  // The amount of days off determines the rank: exact same day\n  // is highest rank 1, 1 day off is .5, etc. This will find the\n  // best start date that matches all the dates the closest\n  return 1 / (dayDiff + 1);\n}\n\nexport function matchSchedules(allOccurs, config, partialMatchRank = 0.5) {\n  allOccurs = [...allOccurs].reverse();\n  let baseOccur = allOccurs[0];\n  let occurs = allOccurs.slice(1);\n  let schedules = [];\n\n  for (let trans of baseOccur.transactions) {\n    let threshold = getApproxNumberThreshold(trans.amount);\n    let payee = trans.payee;\n    let account = trans.account;\n\n    let found = occurs.map(occur => {\n      let matched = occur.transactions.find(\n        t =>\n          t.amount >= trans.amount - threshold &&\n          t.amount <= trans.amount + threshold\n      );\n      matched = matched && matched.payee === payee ? matched : null;\n\n      if (matched) {\n        return { trans: matched, rank: getRank(occur.date, matched.date) };\n      }\n      return null;\n    });\n\n    if (found.indexOf(null) !== -1) {\n      continue;\n    }\n\n    let rank = found.reduce(\n      (total, match) => total + match.rank,\n      getRank(baseOccur.date, trans.date)\n    );\n\n    let exactAmount = found.reduce(\n      (exact, match) => exact && match.trans.amount === trans.amount,\n      true\n    );\n\n    schedules.push({\n      rank,\n      amount: trans.amount,\n      account: trans.account,\n      payee: trans.payee,\n      date: config,\n      // Exact dates rank as 1, so all of them matches exactly it\n      // would equal the number of `allOccurs`\n      exactDate: rank === allOccurs.length,\n      exactAmount\n    });\n  }\n\n  return schedules;\n}\n\nasync function schedulesForPattern(\n  baseStart,\n  numDays,\n  baseConfig,\n  accountId,\n  partialMatchRank\n) {\n  let schedules = [];\n\n  let i = 0;\n  for (let i = 0; i < numDays; i++) {\n    let start = d.addDays(baseStart, i);\n    let config;\n    if (typeof baseConfig === 'function') {\n      config = baseConfig(start);\n\n      if (config === false) {\n        // Skip this one\n        continue;\n      }\n    } else {\n      config = { ...baseConfig, start };\n    }\n\n    // Our recur config expects a day string, not a native date format\n    config.start = dayFromDate(config.start);\n\n    let data = [];\n    let dates = takeDates(config);\n    for (let date of dates) {\n      data.push({\n        date: dayFromDate(date),\n        transactions: await getTransactions(date, accountId)\n      });\n    }\n\n    schedules = schedules.concat(\n      matchSchedules(data, config, partialMatchRank)\n    );\n  }\n  return schedules;\n}\n\nasync function weekly(startDate, accountId) {\n  return schedulesForPattern(\n    d.subWeeks(parseDate(startDate), 4),\n    7 * 2,\n    { frequency: 'weekly' },\n    accountId\n  );\n}\n\nasync function every2weeks(startDate, accountId) {\n  return schedulesForPattern(\n    // 6 weeks would cover 3 instances, but we also scan an addition\n    // week back\n    d.subWeeks(parseDate(startDate), 7),\n    7 * 2,\n    { frequency: 'weekly', interval: 2 },\n    accountId\n  );\n}\n\nasync function monthly(startDate, accountId) {\n  return schedulesForPattern(\n    d.subMonths(parseDate(startDate), 4),\n    31 * 2,\n    start => {\n      // 28 is the max number of days that all months are guaranteed\n      // to have. We don't want to go any higher than that because\n      // we'll end up skipping months that don't have that day.\n      // The use cases of end of month days will be covered with the\n      // `monthlyLastDay` pattern;\n      if (d.getDate(start) > 28) {\n        return false;\n      }\n      return { start, frequency: 'monthly' };\n    },\n    accountId\n  );\n}\n\nasync function monthlyLastDay(startDate, accountId) {\n  // We do two separate calls because this pattern doesn't fit into\n  // how `schedulesForPattern` works\n  let s1 = await schedulesForPattern(\n    d.subMonths(parseDate(startDate), 3),\n    1,\n    { frequency: 'monthly', patterns: [{ type: 'day', value: -1 }] },\n    accountId,\n    // Last day patterns should win over day-specific ones that just\n    // happen to match\n    0.75\n  );\n\n  let s2 = await schedulesForPattern(\n    d.subMonths(parseDate(startDate), 4),\n    1,\n    { frequency: 'monthly', patterns: [{ type: 'day', value: -1 }] },\n    accountId,\n    0.75\n  );\n\n  return s1.concat(s2);\n}\n\nasync function monthly1stor3rd(startDate, accountId) {\n  return schedulesForPattern(\n    d.subWeeks(parseDate(startDate), 8),\n    14,\n    start => {\n      let day = d.format(new Date(), 'iiii');\n      let dayValue = day.slice(0, 2).toUpperCase();\n\n      return {\n        start,\n        frequency: 'monthly',\n        patterns: [{ type: dayValue, value: 1 }, { type: dayValue, value: 3 }]\n      };\n    },\n    accountId\n  );\n}\n\nasync function monthly2ndor4th(startDate, accountId) {\n  return schedulesForPattern(\n    d.subMonths(parseDate(startDate), 8),\n    14,\n    start => {\n      let day = d.format(new Date(), 'iiii');\n      let dayValue = day.slice(0, 2).toUpperCase();\n\n      return {\n        start,\n        frequency: 'monthly',\n        patterns: [{ type: dayValue, value: 2 }, { type: dayValue, value: 4 }]\n      };\n    },\n    accountId\n  );\n}\n\nasync function findStartDate(schedule) {\n  let conditions = schedule._conditions;\n  let dateCond = conditions.find(c => c.field === 'date');\n  let currentConfig = dateCond.value;\n\n  while (1) {\n    let prevConfig = currentConfig;\n    currentConfig = { ...prevConfig };\n\n    switch (currentConfig.frequency) {\n      case 'weekly':\n        currentConfig.start = dayFromDate(\n          d.subWeeks(\n            parseDate(currentConfig.start),\n            currentConfig.interval || 1\n          )\n        );\n\n        break;\n      case 'monthly':\n        currentConfig.start = dayFromDate(\n          d.subMonths(\n            parseDate(currentConfig.start),\n            currentConfig.interval || 1\n          )\n        );\n        break;\n      case 'yearly':\n        currentConfig.start = dayFromDate(\n          d.subYears(\n            parseDate(currentConfig.start),\n            currentConfig.interval || 1\n          )\n        );\n        break;\n      default:\n        throw new Error('findStartDate: invalid frequency');\n    }\n\n    let newConditions = conditions.map(c =>\n      c.field === 'date' ? { ...c, value: currentConfig } : c\n    );\n\n    let { filters, errors } = conditionsToAQL(newConditions, {\n      recurDateBounds: 1\n    });\n    if (errors.length > 0) {\n      // Somehow we generated an invalid config. Abort the whole\n      // process and don't change the date at all\n      currentConfig = null;\n      break;\n    }\n\n    let { data } = await aqlQuery(\n      q('transactions')\n        .filter({ $and: filters })\n        .select('*')\n    );\n\n    if (data.length === 0) {\n      // No data, revert back to the last valid value and stop\n      currentConfig = prevConfig;\n      break;\n    }\n  }\n\n  if (currentConfig) {\n    return {\n      ...schedule,\n      date: currentConfig,\n      _conditions: conditions.map(c =>\n        c.field === 'date' ? { ...c, value: currentConfig } : c\n      )\n    };\n  }\n  return schedule;\n}\n\nexport async function findSchedules() {\n  // Patterns to look for:\n  // * Weekly\n  // * Every two weeks\n  // * Monthly on day X\n  // * Monthly on every 1st or 3rd day\n  // * Monthly on every 2nd or 4th day\n  //\n  // Search for them approx (+- 2 days) but track which transactions\n  // and find the best one...\n\n  let { data: accounts } = await aqlQuery(\n    q('accounts')\n      .filter({ closed: false })\n      .select('*')\n  );\n\n  let allSchedules = [];\n\n  for (let account of accounts) {\n    // Find latest transaction-ish to start with\n    let latestTrans = await db.first(\n      'SELECT * FROM v_transactions WHERE account = ? AND parent_id IS NULL ORDER BY date DESC LIMIT 1',\n      [account.id]\n    );\n\n    if (latestTrans) {\n      let latestDate = fromDateRepr(latestTrans.date);\n      allSchedules = allSchedules.concat(\n        await weekly(latestDate, account.id),\n        await every2weeks(latestDate, account.id),\n        await monthly(latestDate, account.id),\n        await monthlyLastDay(latestDate, account.id),\n        await monthly1stor3rd(latestDate, account.id),\n        await monthly2ndor4th(latestDate, account.id)\n      );\n    }\n  }\n\n  let schedules = [...groupBy(allSchedules, 'payee').entries()].map(\n    ([payeeId, schedules]) => {\n      schedules.sort((s1, s2) => s2.rank - s1.rank);\n      let winner = schedules[0];\n\n      // Convert to schedule and return it\n      return {\n        id: uuid.v4Sync(),\n        account: winner.account,\n        payee: winner.payee,\n        date: winner.date,\n        amount: winner.amount,\n        _conditions: [\n          { op: 'is', field: 'account', value: winner.account },\n          { op: 'is', field: 'payee', value: winner.payee },\n          {\n            op: winner.exactDate ? 'is' : 'isapprox',\n            field: 'date',\n            value: winner.date\n          },\n          {\n            op: winner.exactAmount ? 'is' : 'isapprox',\n            field: 'amount',\n            value: winner.amount\n          }\n        ]\n      };\n    }\n  );\n\n  let finalized = [];\n  for (let schedule of schedules) {\n    finalized.push(await findStartDate(schedule));\n  }\n  return finalized;\n}\n","import fs from '../platform/server/fs';\n\nlet config = null;\n\nfunction joinURL(base, ...paths) {\n  let url = new URL(base);\n  url.pathname = fs.join(...paths);\n  return url.toString();\n}\n\nexport function setServer(url) {\n  if (url == null) {\n    config = null;\n  } else {\n    config = getServer(url);\n  }\n}\n\n// `url` is optional; if not given it will provide the global config\nexport function getServer(url) {\n  if (url) {\n    return {\n      BASE_SERVER: url,\n      SYNC_SERVER: joinURL(url, '/sync'),\n      SIGNUP_SERVER: joinURL(url, '/account'),\n      PLAID_SERVER: joinURL(url, '/plaid')\n    };\n  }\n  return config;\n}\n","import Spreadsheet from './spreadsheet/spreadsheet';\nimport * as prefs from './prefs';\nimport { captureBreadcrumb } from '../platform/exceptions';\nimport * as sqlite from '../platform/server/sqlite';\nimport { sheetForMonth } from '../shared/months';\nimport Platform from './platform';\nconst { resolveName } = require('./spreadsheet/util');\n\nlet globalSheet, globalOnChange;\nlet globalCacheDb;\n\nexport function get() {\n  return globalSheet;\n}\n\nasync function updateSpreadsheetCache(rawDb, names) {\n  await sqlite.transaction(rawDb, () => {\n    names.forEach(name => {\n      const node = globalSheet._getNode(name);\n\n      // Don't cache query nodes yet\n      if (node.sql == null) {\n        sqlite.runQuery(\n          rawDb,\n          'INSERT OR REPLACE INTO kvcache (key, value) VALUES (?, ?)',\n          [name, JSON.stringify(node.value)]\n        );\n      }\n    });\n  });\n}\n\nfunction setCacheStatus(mainDb, cacheDb, { clean }) {\n  if (clean) {\n    // Generate random number and stick in both places\n    let num = Math.random() * 10000000;\n    sqlite.runQuery(\n      cacheDb,\n      'INSERT OR REPLACE INTO kvcache_key (id, key) VALUES (1, ?)',\n      [num]\n    );\n\n    if (mainDb) {\n      sqlite.runQuery(\n        mainDb,\n        'INSERT OR REPLACE INTO kvcache_key (id, key) VALUES (1, ?)',\n        [num]\n      );\n    }\n  } else {\n    sqlite.runQuery(cacheDb, 'DELETE FROM kvcache_key');\n  }\n}\n\nfunction isCacheDirty(mainDb, cacheDb) {\n  let rows = sqlite.runQuery(\n    cacheDb,\n    'SELECT key FROM kvcache_key WHERE id = 1',\n    [],\n    true\n  );\n  let num = rows.length === 0 ? null : rows[0].key;\n\n  if (num == null) {\n    return true;\n  }\n\n  if (mainDb) {\n    let rows = sqlite.runQuery(\n      mainDb,\n      'SELECT key FROM kvcache_key WHERE id = 1',\n      [],\n      true\n    );\n    if (rows.length === 0 || rows[0].key !== num) {\n      return true;\n    }\n  }\n\n  // Always also check if there is anything in `kvcache`. We ask for one item;\n  // if we didn't get back anything it's empty so there is no cache\n  rows = sqlite.runQuery(cacheDb, 'SELECT * FROM kvcache LIMIT 1', [], true);\n  return rows.length === 0;\n}\n\nexport async function loadSpreadsheet(db, onSheetChange) {\n  let cacheEnabled = !global.__TESTING__;\n  let mainDb = db.getDatabase();\n  let cacheDb;\n\n  if (Platform.isDesktop && cacheEnabled) {\n    // Desktop apps use a separate database for the cache. This is because it is\n    // much more likely to directly work with files on desktop, and this makes\n    // it a lot clearer what the true filesize of the main db is (and avoid\n    // copying the cache data around).\n    let cachePath = db.getDatabasePath().replace(/db\\.sqlite$/, 'cache.sqlite');\n    globalCacheDb = cacheDb = sqlite.openDatabase(cachePath);\n\n    sqlite.execQuery(\n      cacheDb,\n      `\n        CREATE TABLE IF NOT EXISTS kvcache (key TEXT PRIMARY KEY, value TEXT);\n        CREATE TABLE IF NOT EXISTS kvcache_key (id INTEGER PRIMARY KEY, key REAL)\n      `\n    );\n  } else {\n    // All other platforms use the same database for cache\n    cacheDb = mainDb;\n  }\n\n  let sheet;\n  if (cacheEnabled) {\n    sheet = new Spreadsheet(\n      updateSpreadsheetCache.bind(null, cacheDb),\n      setCacheStatus.bind(null, mainDb, cacheDb)\n    );\n  } else {\n    sheet = new Spreadsheet();\n  }\n\n  captureBreadcrumb({\n    message: 'loading spreaadsheet',\n    category: 'server'\n  });\n\n  globalSheet = sheet;\n  globalOnChange = onSheetChange;\n\n  if (onSheetChange) {\n    sheet.addEventListener('change', onSheetChange);\n  }\n\n  if (cacheEnabled && !isCacheDirty(mainDb, cacheDb)) {\n    let cachedRows = await sqlite.runQuery(\n      cacheDb,\n      'SELECT * FROM kvcache',\n      [],\n      true\n    );\n    console.log(`Loaded spreadsheet from cache (${cachedRows.length} items)`);\n\n    for (let row of cachedRows) {\n      let parsed = JSON.parse(row.value);\n      sheet.load(row.key, parsed);\n    }\n  } else {\n    console.log('Loading fresh spreadsheet');\n    await loadUserBudgets(db);\n  }\n\n  captureBreadcrumb({\n    message: 'loaded spreaadsheet',\n    category: 'server'\n  });\n\n  return sheet;\n}\n\nexport function unloadSpreadsheet() {\n  if (globalSheet) {\n    // TODO: Should wait for the sheet to finish\n    globalSheet.unload();\n    globalSheet = null;\n  }\n\n  if (globalCacheDb) {\n    sqlite.closeDatabase(globalCacheDb);\n    globalCacheDb = null;\n  }\n}\n\nexport async function reloadSpreadsheet(db) {\n  if (globalSheet) {\n    unloadSpreadsheet();\n    return loadSpreadsheet(db, globalOnChange);\n  }\n}\n\nexport async function loadUserBudgets(db) {\n  let sheet = globalSheet;\n\n  // TODO: Clear out the cache here so make sure future loads of the app\n  // don't load any extra values that aren't set here\n\n  let { budgetType } = prefs.getPrefs() || {};\n\n  let table = budgetType === 'report' ? 'reflect_budgets' : 'zero_budgets';\n  let budgets = await db.all(`\n      SELECT * FROM ${table} b\n      LEFT JOIN categories c ON c.id = b.category\n      WHERE c.tombstone = 0\n    `);\n\n  sheet.startTransaction();\n\n  // Load all the budget amounts and carryover values\n  for (let budget of budgets) {\n    if (budget.month && budget.category) {\n      let sheetName = `budget${budget.month}`;\n      sheet.set(`${sheetName}!budget-${budget.category}`, budget.amount);\n      sheet.set(\n        `${sheetName}!carryover-${budget.category}`,\n        budget.carryover === 1 ? true : false\n      );\n    }\n  }\n\n  // For zero-based budgets, load the buffered amounts\n  if (budgetType !== 'report') {\n    let budgetMonths = await db.all('SELECT * FROM zero_budget_months');\n    for (let budgetMonth of budgetMonths) {\n      let sheetName = sheetForMonth(budgetMonth.id);\n      sheet.set(`${sheetName}!buffered`, budgetMonth.buffered);\n    }\n  }\n\n  sheet.endTransaction();\n}\n\nexport function getCell(sheet, name) {\n  return globalSheet._getNode(resolveName(sheet, name));\n}\n\nexport function getCellValue(sheet, name) {\n  return globalSheet.getValue(resolveName(sheet, name));\n}\n\nexport function startTransaction() {\n  if (globalSheet) {\n    globalSheet.startTransaction();\n  }\n}\n\nexport function endTransaction() {\n  if (globalSheet) {\n    globalSheet.endTransaction();\n  }\n}\n\nexport function waitOnSpreadsheet() {\n  return new Promise(resolve => {\n    if (globalSheet) {\n      globalSheet.onFinish(resolve);\n    } else {\n      resolve();\n    }\n  });\n}\n","function first(arr) {\n  return arr[0];\n}\n\nfunction firstValue(arr) {\n  const keys = Object.keys(arr[0]);\n  return arr[0][keys[0]];\n}\n\nfunction number(v) {\n  if (typeof v === 'number') {\n    return v;\n  } else if (typeof v === 'string') {\n    const parsed = parseFloat(v);\n    if (isNaN(parsed)) {\n      return 0;\n    }\n    return parsed;\n  }\n\n  return 0;\n}\n\nfunction min(x, y) {\n  return Math.min(x, y);\n}\n\nfunction max(x, y) {\n  return Math.max(x, y);\n}\n\nmodule.exports = {\n  first,\n  firstValue,\n  number,\n  min,\n  max\n};\n","function Graph(serialized) {\n  var graph = {\n    addNode,\n    removeNode,\n    adjacent,\n    adjacentIncoming,\n    addEdge,\n    removeEdge,\n    removeIncomingEdges,\n    topologicalSort,\n    generateDOT,\n    getEdges\n  };\n\n  var edges = new Map();\n  var incomingEdges = new Map();\n\n  function getEdges() {\n    return { edges, incomingEdges };\n  }\n\n  function addNode(node) {\n    edges.set(node, adjacent(node));\n    incomingEdges.set(node, adjacentIncoming(node));\n    return graph;\n  }\n\n  function removeIncomingEdges(node) {\n    const incoming = adjacentIncoming(node);\n    incomingEdges.set(node, new Set());\n\n    let iter = incoming.values();\n    let cur = iter.next();\n    while (!cur.done) {\n      removeEdge(cur.value, node);\n      cur = iter.next();\n    }\n  }\n\n  function removeNode(node) {\n    removeIncomingEdges(node);\n    edges.delete(node);\n    incomingEdges.delete(node);\n  }\n\n  function adjacent(node) {\n    return edges.get(node) || new Set();\n  }\n\n  function adjacentIncoming(node) {\n    return incomingEdges.get(node) || new Set();\n  }\n\n  // Adds an edge from node u to node v.\n  // Implicitly adds the nodes if they were not already added.\n  function addEdge(node1, node2) {\n    addNode(node1);\n    addNode(node2);\n    adjacent(node1).add(node2);\n    adjacentIncoming(node2).add(node1);\n    return graph;\n  }\n\n  // Removes the edge from node u to node v.\n  // Does not remove the nodes.\n  // Does nothing if the edge does not exist.\n  function removeEdge(node1, node2) {\n    if (edges.has(node1)) {\n      adjacent(node1).delete(node2);\n    }\n    if (incomingEdges.has(node2)) {\n      adjacentIncoming(node2).delete(node1);\n    }\n    return graph;\n  }\n\n  function topologicalSortUntil(name, visited, sorted) {\n    visited.add(name);\n\n    let iter = adjacent(name).values();\n    let cur = iter.next();\n    while (!cur.done) {\n      if (!visited.has(cur.value)) {\n        topologicalSortUntil(cur.value, visited, sorted);\n      }\n      cur = iter.next();\n    }\n\n    sorted.unshift(name);\n  }\n\n  function topologicalSort(sourceNodes) {\n    const visited = new Set();\n    const sorted = [];\n\n    sourceNodes.forEach(name => {\n      if (!visited.has(name)) {\n        topologicalSortUntil(name, visited, sorted);\n      }\n    });\n\n    return sorted;\n  }\n\n  function generateDOT() {\n    let edgeStrings = [];\n    edges.forEach(function(adj, edge) {\n      if (adj.length !== 0) {\n        edgeStrings.push(`${edge} -> {${adj.join(',')}}`);\n      }\n    });\n\n    return `\n      digraph G {\n       ${edgeStrings.join('\\n').replace(/!/g, '_')}\n      }\n    `;\n  }\n\n  return graph;\n}\n\nmodule.exports = Graph;\n","import mitt from 'mitt';\nimport { schema, schemaConfig } from '../aql/schema';\nimport { compileQuery } from '../aql/compiler';\nimport { runCompiledQuery } from '../aql/schema/run-query';\n\nconst Graph = require('./graph-data-structure');\nconst { unresolveName, resolveName } = require('./util');\n\nexport default class Spreadsheet {\n  constructor(saveCache, setCacheStatus) {\n    this.graph = new Graph();\n    this.nodes = new Map();\n    this.transactionDepth = 0;\n    this.saveCache = saveCache;\n    this.setCacheStatus = setCacheStatus;\n    this.dirtyCells = [];\n    this.computeQueue = [];\n    this.events = mitt();\n    this._meta = {\n      createdMonths: new Set()\n    };\n  }\n\n  meta() {\n    return this._meta;\n  }\n\n  setMeta(meta) {\n    this._meta = meta;\n  }\n\n  // Spreadsheet interface\n\n  _getNode(name) {\n    const { sheet } = unresolveName(name);\n\n    if (!this.nodes.has(name)) {\n      this.nodes.set(name, {\n        name,\n        expr: null,\n        value: null,\n        sheet: sheet\n      });\n    }\n    return this.nodes.get(name);\n  }\n\n  getNode(name) {\n    return this._getNode(name);\n  }\n\n  hasCell(name) {\n    return this.nodes.has(name);\n  }\n\n  add(name, expr, value) {\n    this.set(name, expr);\n  }\n\n  getNodes() {\n    return this.nodes;\n  }\n\n  serialize() {\n    return {\n      graph: this.graph.getEdges(),\n      nodes: [...this.nodes.entries()]\n    };\n  }\n\n  transaction(func) {\n    this.startTransaction();\n    try {\n      func();\n    } catch (e) {\n      console.log(e);\n    }\n    return this.endTransaction();\n  }\n\n  startTransaction() {\n    this.transactionDepth++;\n  }\n\n  endTransaction() {\n    this.transactionDepth--;\n\n    if (this.transactionDepth === 0) {\n      const cells = this.dirtyCells;\n      this.dirtyCells = [];\n\n      this.queueComputation(this.graph.topologicalSort(cells));\n    }\n\n    return [];\n  }\n\n  queueComputation(cellNames) {\n    // TODO: Formally write out the different cases when the existing\n    // queue is not empty. There should be cases where we can easily\n    // optimize this by skipping computations if we know they are\n    // going to be computed again. The hard thing is to ensure that\n    // the order of computations stays correct\n\n    this.computeQueue = this.computeQueue.concat(cellNames);\n\n    // Begin running on the next tick so we guarantee that it doesn't finish\n    // within the same tick. Since some computations are async, this makes it\n    // consistent (otherwise it would only sometimes finish sync)\n    Promise.resolve().then(() => {\n      if (!this.running) {\n        this.runComputations();\n      }\n    });\n  }\n\n  runComputations(idx = 0) {\n    this.running = true;\n\n    while (idx < this.computeQueue.length) {\n      let name = this.computeQueue[idx];\n      let node;\n      let result;\n\n      try {\n        node = this.getNode(name);\n\n        if (node._run) {\n          let args = node._dependencies.map(dep => {\n            return this.getNode(dep).value;\n          });\n\n          result = node._run(...args);\n\n          if (result instanceof Promise) {\n            console.warn(\n              'dynamic cell returned a promise! this is discouraged because errors are not handled properly'\n            );\n          }\n        } else if (node.sql) {\n          result = runCompiledQuery(\n            node.query,\n            node.sql.sqlPieces,\n            node.sql.state\n          );\n        } else {\n          idx++;\n          continue;\n        }\n      } catch (e) {\n        console.log('Error while evaluating ' + name + ':', e);\n        // If an error happens, bail on the rest of the computations\n        this.running = false;\n        this.computeQueue = [];\n        return;\n      }\n\n      if (result instanceof Promise) {\n        // When the cell is finished computing, finish computing the\n        // rest\n        result.then(\n          value => {\n            node.value = value;\n            this.runComputations(idx + 1);\n          },\n          err => {\n            // TODO: use captureException here\n            console.warn(`Failed running ${node.name}!`, err);\n            this.runComputations(idx + 1);\n          }\n        );\n\n        return;\n      } else {\n        node.value = result;\n      }\n\n      idx++;\n    }\n\n    // If everything computed in one loop (no async operations) notify\n    // the user and empty the queue\n    if (idx === this.computeQueue.length) {\n      this.events.emit('change', { names: this.computeQueue });\n\n      // Cache the updated cells\n      if (this.saveCache) {\n        this.saveCache(this.computeQueue);\n      }\n      this.markCacheSafe();\n\n      this.running = false;\n      this.computeQueue = [];\n    }\n  }\n\n  markCacheSafe() {\n    if (!this.cacheBarrier) {\n      if (this.setCacheStatus) {\n        this.setCacheStatus({ clean: true });\n      }\n    }\n  }\n\n  markCacheDirty() {\n    if (this.setCacheStatus) {\n      this.setCacheStatus({ clean: false });\n    }\n  }\n\n  startCacheBarrier() {\n    this.cacheBarrier = true;\n    this.markCacheDirty();\n  }\n\n  endCacheBarrier() {\n    this.cacheBarrier = false;\n\n    let pendingChange = this.running || this.computeQueue.length > 0;\n    if (!pendingChange) {\n      this.markCacheSafe();\n    }\n  }\n\n  addEventListener(name, func) {\n    this.events.on(name, func);\n    return () => this.events.off(name, func);\n  }\n\n  onFinish(func) {\n    if (this.transactionDepth !== 0) {\n      throw new Error(\n        'onFinish called while inside a spreadsheet transaction. This is not allowed as it will lead to race conditions'\n      );\n    }\n\n    if (!this.running && this.computeQueue.length === 0) {\n      func([]);\n      // The remove function does nothing\n      return () => {};\n    }\n\n    let remove = this.addEventListener('change', (...args) => {\n      remove();\n      return func(...args);\n    });\n    return remove;\n  }\n\n  unload() {\n    this.events.all.clear();\n  }\n\n  getValue(name) {\n    return this.getNode(name).value;\n  }\n\n  getExpr(name) {\n    return this.getNode(name).expr;\n  }\n\n  getCellValue(sheet, name) {\n    return this.getNode(resolveName(sheet, name)).value;\n  }\n\n  getCellExpr(sheet, name) {\n    return this.getNode(resolveName(sheet, name)).expr;\n  }\n\n  getCellValueLoose(sheetName, cellName) {\n    let name = resolveName(sheetName, cellName);\n    if (this.nodes.has(name)) {\n      return this.getNode(name).value;\n    }\n    return null;\n  }\n\n  bootup(onReady) {\n    this.onFinish(() => {\n      onReady();\n    });\n  }\n\n  load(name, value) {\n    const node = this._getNode(name);\n    node.expr = value;\n    node.value = value;\n  }\n\n  create(name, value) {\n    return this.transaction(() => {\n      const node = this._getNode(name);\n      node.expr = value;\n      node.value = value;\n      this._markDirty(name);\n    });\n  }\n\n  set(name, value) {\n    this.create(name, value);\n  }\n\n  recompute(name) {\n    this.transaction(() => {\n      this.dirtyCells.push(name);\n    });\n  }\n\n  recomputeAll() {\n    // Recompute everything!\n    this.transaction(() => {\n      this.dirtyCells = [...this.nodes.keys()];\n    });\n  }\n\n  createQuery(sheetName, cellName, query) {\n    let name = resolveName(sheetName, cellName);\n    let node = this._getNode(name);\n\n    if (node.query !== query) {\n      node.query = query;\n      let { sqlPieces, state } = compileQuery(node.query, schema, schemaConfig);\n      node.sql = { sqlPieces, state };\n\n      this.transaction(() => {\n        this._markDirty(name);\n      });\n    }\n  }\n\n  createStatic(sheetName, cellName, initialValue) {\n    let name = resolveName(sheetName, cellName);\n    let exists = this.nodes.has(name);\n    if (!exists) {\n      this.create(name, initialValue);\n    }\n  }\n\n  createDynamic(\n    sheetName,\n    cellName,\n    { dependencies = [], run, initialValue, refresh }\n  ) {\n    let name = resolveName(sheetName, cellName);\n    let node = this._getNode(name);\n\n    if (node.dynamic) {\n      // If it already exists, do nothing\n      return;\n    }\n\n    node.dynamic = true;\n    node._run = run;\n\n    dependencies = dependencies.map(dep => {\n      let resolved;\n      if (!unresolveName(dep).sheet) {\n        resolved = resolveName(sheetName, dep);\n      } else {\n        resolved = dep;\n      }\n\n      return resolved;\n    });\n\n    node._dependencies = dependencies;\n\n    // TODO: diff these\n    this.graph.removeIncomingEdges(name);\n    dependencies.forEach(dep => {\n      this.graph.addEdge(dep, name);\n    });\n\n    if (node.value == null || refresh) {\n      this.transaction(() => {\n        node.value = initialValue;\n        this._markDirty(name);\n      });\n    }\n  }\n\n  clearSheet(sheetName) {\n    for (let [name, node] of this.nodes.entries()) {\n      if (node.sheet === sheetName) {\n        this.nodes.delete(name);\n      }\n    }\n  }\n\n  voidCell(sheetName, name, voidValue = null) {\n    let node = this.getNode(resolveName(sheetName, name));\n    node._run = null;\n    node.dynamic = false;\n    node.value = voidValue;\n  }\n\n  deleteCell(sheetName, name) {\n    this.voidCell(sheetName, name);\n    this.nodes.delete(resolveName(sheetName, name));\n  }\n\n  addDependencies(sheetName, cellName, deps) {\n    let name = resolveName(sheetName, cellName);\n\n    deps = deps.map(dep => {\n      if (!unresolveName(dep).sheet) {\n        return resolveName(sheetName, dep);\n      }\n      return dep;\n    });\n\n    let node = this.getNode(name);\n    let newDeps = deps.filter(\n      dep => (node._dependencies || []).indexOf(dep) === -1\n    );\n\n    if (newDeps.length > 0) {\n      node._dependencies = (node._dependencies || []).concat(newDeps);\n      newDeps.forEach(dep => {\n        this.graph.addEdge(dep, name);\n      });\n      this.recompute(name);\n    }\n  }\n\n  removeDependencies(sheetName, cellName, deps) {\n    let name = resolveName(sheetName, cellName);\n\n    deps = deps.map(dep => {\n      if (!unresolveName(dep).sheet) {\n        return resolveName(sheetName, dep);\n      }\n      return dep;\n    });\n\n    let node = this.getNode(name);\n\n    node._dependencies = (node._dependencies || []).filter(\n      dep => deps.indexOf(dep) === -1\n    );\n\n    deps.forEach(dep => {\n      this.graph.removeEdge(dep, name);\n    });\n    this.recompute(name);\n  }\n\n  _markDirty(name) {\n    this.dirtyCells.push(name);\n  }\n\n  triggerDatabaseChanges(oldValues, newValues) {\n    let tables = new Set([...oldValues.keys(), ...newValues.keys()]);\n\n    this.startTransaction();\n    // TODO: Create an index of deps so we don't have to iterate\n    // across all nodes\n    this.nodes.forEach(node => {\n      if (\n        node.sql &&\n        node.sql.state.dependencies.some(dep => tables.has(dep))\n      ) {\n        this._markDirty(node.name);\n      }\n    });\n    this.endTransaction();\n  }\n}\n","function unresolveName(name) {\n  let idx = name.indexOf('!');\n  if (idx !== -1) {\n    return {\n      sheet: name.slice(0, idx),\n      name: name.slice(idx + 1)\n    };\n  }\n  return { sheet: null, name };\n}\n\nfunction resolveName(sheet, name) {\n  return sheet + '!' + name;\n}\n\nfunction resolveNamesAsObjects(sheets) {\n  const cells = {};\n  Object.keys(sheets).forEach(sheetName => {\n    const sheet = sheets[sheetName];\n\n    Object.keys(sheet).forEach(name => {\n      const expr = sheet[name];\n      cells[resolveName(sheetName, name)] = expr;\n    });\n  });\n  return cells;\n}\n\nfunction resolveNamesAsArrays(sheets) {\n  const cells = [];\n  Object.keys(sheets).forEach(sheetName => {\n    const sheet = sheets[sheetName];\n\n    sheet.forEach(name => {\n      const expr = sheet[name];\n      cells.push(resolveName(sheetName, name));\n    });\n  });\n  return cells;\n}\n\nmodule.exports = {\n  unresolveName,\n  resolveName,\n  resolveNamesAsObjects,\n  resolveNamesAsArrays\n};\n","import encryption from '../encryption';\nimport * as prefs from '../prefs';\nlet { SyncError } = require('../errors');\nlet SyncPb = require('./proto/sync_pb');\n\nfunction coerceBuffer(value) {\n  // The web encryption APIs give us back raw Uint8Array... but our\n  // encryption code assumes we can work with it as a buffer. This is\n  // a leaky abstraction and ideally the our abstraction over the web\n  // encryption APIs should do this.\n  if (!Buffer.isBuffer(value)) {\n    return Buffer.from(value);\n  }\n  return value;\n}\n\nexport async function encode(groupId, fileId, since, messages) {\n  let { encryptKeyId } = prefs.getPrefs();\n  let requestPb = new SyncPb.SyncRequest();\n\n  for (let i = 0; i < messages.length; i++) {\n    let msg = messages[i];\n    let envelopePb = new SyncPb.MessageEnvelope();\n    envelopePb.setTimestamp(msg.timestamp);\n\n    let messagePb = new SyncPb.Message();\n    messagePb.setDataset(msg.dataset);\n    messagePb.setRow(msg.row);\n    messagePb.setColumn(msg.column);\n    messagePb.setValue(msg.value);\n    let binaryMsg = messagePb.serializeBinary();\n\n    if (encryptKeyId) {\n      let encrypted = new SyncPb.EncryptedData();\n\n      let result;\n      try {\n        result = await encryption.encrypt(binaryMsg, encryptKeyId);\n      } catch (e) {\n        throw new SyncError('encrypt-failure', {\n          isMissingKey: e.message === 'missing-key'\n        });\n      }\n\n      encrypted.setData(result.value);\n      encrypted.setIv(Buffer.from(result.meta.iv, 'base64'));\n      encrypted.setAuthtag(Buffer.from(result.meta.authTag, 'base64'));\n\n      envelopePb.setContent(encrypted.serializeBinary());\n      envelopePb.setIsencrypted(true);\n    } else {\n      envelopePb.setContent(binaryMsg);\n    }\n\n    requestPb.addMessages(envelopePb);\n  }\n\n  requestPb.setGroupid(groupId);\n  requestPb.setFileid(fileId);\n  requestPb.setKeyid(encryptKeyId);\n  requestPb.setSince(since);\n\n  return requestPb.serializeBinary();\n}\n\nexport async function decode(data) {\n  let { encryptKeyId } = prefs.getPrefs();\n\n  let responsePb = SyncPb.SyncResponse.deserializeBinary(data);\n  let merkle = JSON.parse(responsePb.getMerkle());\n  let list = responsePb.getMessagesList();\n  let messages = [];\n\n  for (let i = 0; i < list.length; i++) {\n    let envelopePb = list[i];\n    let timestamp = envelopePb.getTimestamp();\n    let encrypted = envelopePb.getIsencrypted();\n    let msg;\n\n    if (encrypted) {\n      let binary = SyncPb.EncryptedData.deserializeBinary(\n        envelopePb.getContent()\n      );\n\n      let decrypted;\n      try {\n        decrypted = await encryption.decrypt(coerceBuffer(binary.getData()), {\n          keyId: encryptKeyId,\n          algorithm: 'aes-256-gcm',\n          iv: coerceBuffer(binary.getIv()),\n          authTag: coerceBuffer(binary.getAuthtag())\n        });\n      } catch (e) {\n        console.log(e);\n        throw new SyncError('decrypt-failure', {\n          isMissingKey: e.message === 'missing-key'\n        });\n      }\n\n      msg = SyncPb.Message.deserializeBinary(decrypted);\n    } else {\n      msg = SyncPb.Message.deserializeBinary(envelopePb.getContent());\n    }\n\n    messages.push({\n      timestamp: timestamp,\n      dataset: msg.getDataset(),\n      row: msg.getRow(),\n      column: msg.getColumn(),\n      value: msg.getValue()\n    });\n  }\n\n  return { messages, merkle };\n}\n","import { sequential, once } from '../../shared/async';\nimport * as perf from '../perf';\nimport * as prefs from '../prefs';\nimport app from '../main-app';\nimport asyncStorage from '../../platform/server/asyncStorage';\nimport { captureException } from '../../platform/exceptions';\nimport logger from '../../platform/server/log';\nimport { postBinary } from '../post';\nimport * as db from '../db';\nimport * as sheet from '../sheet';\nimport { triggerBudgetChanges, setType as setBudgetType } from '../budget/base';\nimport * as undo from '../undo';\nimport { runMutator } from '../mutators';\nimport { setIn, getIn } from '../../shared/util';\nimport Timestamp, {\n  serializeClock,\n  deserializeClock,\n  getClock\n} from '../timestamp';\nimport * as merkle from '../merkle';\nimport * as encoder from './encoder';\nimport { getServer } from '../server-config';\nimport { rebuildMerkleHash } from './repair';\n\nconst { PostError, SyncError } = require('../errors');\nconst connection = require('../../platform/server/connection');\n\nlet FULL_SYNC_DELAY = 1000;\nlet SYNCING_MODE = 'enabled';\n\nexport function setSyncingMode(mode) {\n  let prevMode = SYNCING_MODE;\n  switch (mode) {\n    case 'enabled':\n      SYNCING_MODE = 'enabled';\n      break;\n    case 'offline':\n      SYNCING_MODE = 'offline';\n      break;\n    case 'disabled':\n      SYNCING_MODE = 'disabled';\n      break;\n    case 'import':\n      SYNCING_MODE = 'import';\n      break;\n    default:\n      throw new Error('setSyncingMode: invalid mode: ' + mode);\n  }\n  return prevMode;\n}\n\nexport function checkSyncingMode(mode) {\n  switch (mode) {\n    case 'enabled':\n      return SYNCING_MODE === 'enabled' || SYNCING_MODE === 'offline';\n    case 'disabled':\n      return SYNCING_MODE === 'disabled' || SYNCING_MODE === 'import';\n    case 'offline':\n      return SYNCING_MODE === 'offline';\n    case 'import':\n      return SYNCING_MODE === 'import';\n    default:\n      throw new Error('checkSyncingMode: invalid mode: ' + mode);\n  }\n}\n\nexport makeTestMessage from './make-test-message';\nexport resetSync from './reset';\nexport repairSync from './repair';\n\nfunction apply(msg, prev) {\n  let { dataset, row, column, value } = msg;\n\n  if (dataset === 'prefs') {\n    // Do nothing, it doesn't exist in the db\n  } else {\n    try {\n      let query;\n      if (prev) {\n        query = {\n          sql: db.cache(`UPDATE ${dataset} SET ${column} = ? WHERE id = ?`),\n          params: [value, row]\n        };\n      } else {\n        query = {\n          sql: db.cache(`INSERT INTO ${dataset} (id, ${column}) VALUES (?, ?)`),\n          params: [row, value]\n        };\n      }\n\n      db.runQuery(query.sql, query.params);\n    } catch (e) {\n      //console.log(e);\n      throw new SyncError('invalid-schema');\n    }\n  }\n}\n\nasync function fetchAll(table, ids) {\n  let results = [];\n\n  // TODO: convert to `whereIn`\n\n  for (let i = 0; i < ids.length; i += 500) {\n    let partIds = ids.slice(i, i + 500);\n    let sql;\n    let column = `${table}.id`;\n\n    // We have to provide *mapped* data so the spreadsheet works. The functions\n    // which trigger budget changes based on data changes assumes data has been\n    // mapped. The only mapped data that the budget is concerned about is\n    // categories. This is kind of annoying, but we manually map it here\n    if (table === 'transactions') {\n      sql = `\n        SELECT t.*, c.transferId AS category\n        FROM transactions t\n        LEFT JOIN category_mapping c ON c.id = t.category\n      `;\n      column = 't.id';\n    } else {\n      sql = `SELECT * FROM ${table}`;\n    }\n\n    sql += ` WHERE `;\n    sql += partIds.map(id => `${column} = ?`).join(' OR ');\n\n    try {\n      let rows = await db.runQuery(sql, partIds, true);\n      results = results.concat(rows);\n    } catch (e) {\n      throw new SyncError('invalid-schema');\n    }\n  }\n\n  return results;\n}\n\nexport function serializeValue(value) {\n  if (value === null) {\n    return '0:';\n  } else if (typeof value === 'number') {\n    return 'N:' + value;\n  } else if (typeof value === 'string') {\n    return 'S:' + value;\n  }\n\n  throw new Error('Unserializable value type: ' + JSON.stringify(value));\n}\n\nexport function deserializeValue(value) {\n  const type = value[0];\n  switch (type) {\n    case '0':\n      return null;\n    case 'N':\n      return parseFloat(value.slice(2));\n    case 'S':\n      return value.slice(2);\n    default:\n  }\n\n  throw new Error('Invalid type key for value: ' + value);\n}\n\nlet _syncListeners = [];\n\nexport function addSyncListener(func) {\n  _syncListeners.push(func);\n\n  return () => {\n    _syncListeners = _syncListeners.filter(f => f !== func);\n  };\n}\n\nasync function compareMessages(messages) {\n  let newMessages = [];\n\n  for (let i = 0; i < messages.length; i++) {\n    let message = messages[i];\n    let { dataset, row, column, timestamp } = message;\n    let timestampStr = timestamp.toString();\n\n    let res = db.runQuery(\n      db.cache(\n        'SELECT timestamp FROM messages_crdt WHERE dataset = ? AND row = ? AND column = ? AND timestamp >= ?'\n      ),\n      [dataset, row, column, timestampStr],\n      true\n    );\n\n    // Returned message is any one that is \"later\" than this message,\n    // meaning if the result exists this message is an old one\n    if (res.length === 0) {\n      newMessages.push(message);\n    } else if (res[0].timestamp !== timestampStr) {\n      newMessages.push({ ...message, old: true });\n    }\n  }\n\n  return newMessages;\n}\n\n// This is the fast path `apply` function when in \"import\" mode.\n// There's no need to run through the whole sync system when\n// importing, but **there is a caveat**: because we don't run sync\n// listeners importers should not rely on any functions that use any\n// projected state (like rules). We can't fire those because they\n// depend on having both old and new data which we don't quere here\nfunction applyMessagesForImport(messages) {\n  db.transaction(() => {\n    for (let i = 0; i < messages.length; i++) {\n      let msg = messages[i];\n      let { dataset, row, column, timestamp, value } = msg;\n\n      if (!msg.old) {\n        try {\n          apply(msg);\n        } catch (e) {\n          apply(msg, true);\n        }\n\n        if (dataset === 'prefs') {\n          throw new Error('Cannot set prefs while importing');\n        }\n      }\n    }\n  });\n}\n\nexport const applyMessages = sequential(async messages => {\n  if (checkSyncingMode('import')) {\n    return applyMessagesForImport(messages);\n  } else if (checkSyncingMode('enabled')) {\n    // Compare the messages with the existing crdt. This filters out\n    // already applied messages and determines if a message is old or\n    // not. An \"old\" message doesn't need to be applied, but it still\n    // needs to be put into the merkle trie to maintain the hash.\n    messages = await compareMessages(messages);\n  }\n\n  messages = [...messages].sort((m1, m2) => {\n    let t1 = m1.timestamp ? m1.timestamp.toString() : '';\n    let t2 = m2.timestamp ? m2.timestamp.toString() : '';\n    if (t1 < t2) {\n      return -1;\n    } else if (t1 > t2) {\n      return 1;\n    }\n    return 0;\n  });\n\n  let idsPerTable = {};\n  messages.forEach(msg => {\n    if (msg.dataset === 'prefs') {\n      return;\n    }\n\n    if (idsPerTable[msg.dataset] == null) {\n      idsPerTable[msg.dataset] = [];\n    }\n    idsPerTable[msg.dataset].push(msg.row);\n  });\n\n  async function fetchData() {\n    let data = new Map();\n\n    for (let table of Object.keys(idsPerTable)) {\n      const rows = await fetchAll(table, idsPerTable[table]);\n\n      for (let i = 0; i < rows.length; i++) {\n        let row = rows[i];\n        setIn(data, [table, row.id], row);\n      }\n    }\n\n    return data;\n  }\n\n  let prefsToSet = {};\n  let oldData = await fetchData();\n\n  undo.appendMessages(messages, oldData);\n\n  // It's important to not mutate the clock while processing the\n  // messages. We only want to mutate it if the transaction succeeds.\n  // The merkle variable will be updated while applying the messages and\n  // we'll apply it afterwards.\n  let clock;\n  let currentMerkle;\n  if (checkSyncingMode('enabled')) {\n    clock = getClock();\n    currentMerkle = clock.merkle;\n  }\n\n  if (sheet.get()) {\n    sheet.get().startCacheBarrier();\n  }\n\n  // Now that we have all of the data, go through and apply the\n  // messages carefully. This transaction is **crucial**: it\n  // guarantees that everything is atomically committed to the\n  // database, and if any part of it fails everything aborts and\n  // nothing is changed. This is critical to maintain consistency. We\n  // also avoid any side effects to in-memory objects, and apply them\n  // after this succeeds.\n  db.transaction(() => {\n    let added = new Set();\n\n    for (let i = 0; i < messages.length; i++) {\n      let msg = messages[i];\n      let { dataset, row, column, timestamp, value } = msg;\n\n      if (!msg.old) {\n        apply(msg, getIn(oldData, [dataset, row]) || added.has(dataset + row));\n\n        if (dataset === 'prefs') {\n          prefsToSet[row] = value;\n        } else {\n          // Keep track of which items have been added it in this sync\n          // so it knows whether they already exist in the db or not. We\n          // ignore any changes to the spreadsheet.\n          added.add(dataset + row);\n        }\n      }\n\n      if (checkSyncingMode('enabled')) {\n        db.runQuery(\n          db.cache(`INSERT INTO messages_crdt (timestamp, dataset, row, column, value)\n           VALUES (?, ?, ?, ?, ?)`),\n          [timestamp.toString(), dataset, row, column, serializeValue(value)]\n        );\n\n        currentMerkle = merkle.insert(currentMerkle, msg.timestamp);\n      }\n    }\n\n    if (checkSyncingMode('enabled')) {\n      currentMerkle = merkle.prune(currentMerkle);\n\n      // Save the clock in the db first (queries might throw\n      // exceptions)\n      db.runQuery(\n        db.cache(\n          'INSERT OR REPLACE INTO messages_clock (id, clock) VALUES (1, ?)'\n        ),\n        [serializeClock({ ...clock, merkle: currentMerkle })]\n      );\n    }\n  });\n\n  if (checkSyncingMode('enabled')) {\n    // The transaction succeeded, so we can update in-memory objects\n    // now. Update the in-memory clock.\n    clock.merkle = currentMerkle;\n  }\n\n  // Save any synced prefs\n  if (Object.keys(prefsToSet).length > 0) {\n    prefs.savePrefs(prefsToSet, { avoidSync: true });\n\n    if (prefsToSet.budgetType) {\n      setBudgetType(prefsToSet.budgetType);\n    }\n\n    connection.send('prefs-updated');\n  }\n\n  let newData = await fetchData();\n\n  // In testing, sometimes the spreadsheet isn't loaded, and that's ok\n  if (sheet.get()) {\n    // Need to clean up these APIs and make them consistent\n    sheet.startTransaction();\n    triggerBudgetChanges(oldData, newData);\n    sheet.get().triggerDatabaseChanges(oldData, newData);\n    sheet.endTransaction();\n\n    // Allow the cache to be used in the future. At this point it's guaranteed\n    // to be up-to-date because we are done mutating any other data\n    sheet.get().endCacheBarrier();\n  }\n\n  _syncListeners.forEach(func => func(oldData, newData));\n\n  let tables = getTablesFromMessages(messages.filter(msg => !msg.old));\n  app.events.emit('sync', {\n    type: 'applied',\n    tables,\n    data: newData,\n    prevData: oldData\n  });\n\n  return messages;\n});\n\nexport function receiveMessages(messages) {\n  messages.forEach(msg => {\n    Timestamp.recv(msg.timestamp);\n  });\n\n  return runMutator(() => applyMessages(messages));\n}\n\nasync function _sendMessages(messages) {\n  try {\n    await applyMessages(messages);\n  } catch (e) {\n    if (e instanceof SyncError) {\n      if (e.reason === 'invalid-schema') {\n        // We know this message came from a local modification, and it\n        // couldn't apply, which doesn't make any sense. Must be a bug\n        // in the code. Send a specific error type for it for a custom\n        // message.\n        app.events.emit('sync', {\n          type: 'error',\n          subtype: 'apply-failure'\n        });\n      } else {\n        app.events.emit('sync', { type: 'error' });\n      }\n    }\n\n    throw e;\n  }\n\n  await scheduleFullSync();\n}\n\nlet IS_BATCHING = false;\nlet _BATCHED = [];\nexport async function batchMessages(func) {\n  if (IS_BATCHING) {\n    await func();\n    return;\n  }\n\n  IS_BATCHING = true;\n  let batched = [];\n\n  try {\n    await func();\n    // TODO: if it fails, it shouldn't apply them?\n  } finally {\n    IS_BATCHING = false;\n    batched = _BATCHED;\n    _BATCHED = [];\n  }\n\n  if (batched.length > 0) {\n    await _sendMessages(batched);\n  }\n}\n\nexport async function sendMessages(messages) {\n  if (IS_BATCHING) {\n    _BATCHED = _BATCHED.concat(messages);\n  } else {\n    return _sendMessages(messages);\n  }\n}\n\nexport function getMessagesSince(since) {\n  return db.runQuery(\n    'SELECT timestamp, dataset, row, column, value FROM messages_crdt WHERE timestamp > ?',\n    [since],\n    true\n  );\n}\n\nexport async function syncAndReceiveMessages(messages, since) {\n  let localMessages = await getMessagesSince(since);\n  await receiveMessages(\n    messages.map(msg => ({\n      ...msg,\n      value: deserializeValue(msg.value),\n      timestamp: Timestamp.parse(msg.timestamp)\n    }))\n  );\n  return localMessages;\n}\n\nexport function clearFullSyncTimeout() {\n  if (syncTimeout) {\n    clearTimeout(syncTimeout);\n    syncTimeout = null;\n  }\n}\n\nlet syncTimeout = null;\nexport function scheduleFullSync() {\n  clearFullSyncTimeout();\n\n  if (checkSyncingMode('enabled') && !checkSyncingMode('offline')) {\n    if (global.__TESTING__) {\n      return fullSync().then(res => {\n        if (res.error) {\n          throw res.error;\n        }\n        return res;\n      });\n    } else {\n      syncTimeout = setTimeout(fullSync, FULL_SYNC_DELAY);\n    }\n  }\n}\n\nfunction getTablesFromMessages(messages) {\n  return messages.reduce((acc, message) => {\n    let dataset =\n      message.dataset === 'schedules_next_date' ? 'schedules' : message.dataset;\n\n    if (!acc.includes(dataset)) {\n      acc.push(dataset);\n    }\n    return acc;\n  }, []);\n}\n\n// This is different than `fullSync` because it waits for the\n// spreadsheet to finish any processing. This is useful if we want to\n// perform a full sync and wait for everything to finish, usually if\n// you're doing an initial sync before working with a file.\nexport async function initialFullSync() {\n  let result = await fullSync();\n  if (!result.error) {\n    // Make sure to wait for anything in the spreadsheet to process\n    await sheet.waitOnSpreadsheet();\n  }\n}\n\nexport const fullSync = once(async function() {\n  app.events.emit('sync', { type: 'start' });\n  let messages;\n\n  try {\n    messages = await _fullSync(null, 0, null);\n  } catch (e) {\n    console.log(e);\n\n    if (e instanceof SyncError) {\n      if (e.reason === 'out-of-sync') {\n        captureException(e);\n\n        app.events.emit('sync', {\n          type: 'error',\n          subtype: 'out-of-sync'\n        });\n      } else if (e.reason === 'invalid-schema') {\n        app.events.emit('sync', {\n          type: 'error',\n          subtype: 'invalid-schema'\n        });\n      } else if (\n        e.reason === 'decrypt-failure' ||\n        e.reason === 'encrypt-failure'\n      ) {\n        app.events.emit('sync', {\n          type: 'error',\n          subtype: e.reason,\n          meta: e.meta\n        });\n      } else if (e.reason === 'beta-version') {\n        app.events.emit('sync', {\n          type: 'error',\n          subtype: e.reason\n        });\n      } else {\n        app.events.emit('sync', { type: 'error' });\n      }\n    } else if (e instanceof PostError) {\n      console.log(e);\n      if (e.reason === 'unauthorized') {\n        app.events.emit('sync', { type: 'unauthorized' });\n\n        // Set the user into read-only mode\n        asyncStorage.setItem('readOnly', 'true');\n      } else if (e.reason === 'network-failure') {\n        app.events.emit('sync', { type: 'error', subtype: 'network' });\n      } else {\n        app.events.emit('sync', { type: 'error', subtype: e.reason });\n      }\n    } else {\n      captureException(e);\n      // TODO: Send the message to the client and allow them to expand & view it\n      app.events.emit('sync', { type: 'error' });\n    }\n\n    return { error: { message: e.message, reason: e.reason, meta: e.meta } };\n  }\n\n  let tables = getTablesFromMessages(messages);\n\n  app.events.emit('sync', {\n    type: 'success',\n    tables,\n    syncDisabled: checkSyncingMode('disabled')\n  });\n  return { messages };\n});\n\nasync function _fullSync(sinceTimestamp, count, prevDiffTime) {\n  let { cloudFileId, groupId, lastSyncedTimestamp } = prefs.getPrefs() || {};\n\n  clearFullSyncTimeout();\n\n  if (checkSyncingMode('disabled') || checkSyncingMode('offline')) {\n    return [];\n  }\n\n  // Snapshot the point at which we are currently syncing\n  let currentTime = getClock().timestamp.toString();\n\n  let since =\n    sinceTimestamp ||\n    lastSyncedTimestamp ||\n    // Default to 5 minutes ago\n    new Timestamp(Date.now() - 5 * 60 * 1000, 0, '0').toString();\n\n  let messages = getMessagesSince(since);\n\n  let userToken = await asyncStorage.getItem('user-token');\n\n  logger.info(\n    'Syncing since',\n    since,\n    messages.length,\n    '(attempt: ' + count + ')'\n  );\n\n  let buffer = await encoder.encode(groupId, cloudFileId, since, messages);\n\n  // TODO: There a limit on how many messages we can send because of\n  // the payload size. Right now it's at 20MB on the server. We should\n  // check the worst case here and make multiple requests if it's\n  // really large.\n  let resBuffer = await postBinary(getServer().SYNC_SERVER + '/sync', buffer, {\n    'X-ACTUAL-TOKEN': userToken\n  });\n\n  // Abort if the file is either no longer loaded, the group id has\n  // changed because of a sync reset\n  if (!prefs.getPrefs() || prefs.getPrefs().groupId !== groupId) {\n    return [];\n  }\n\n  let res = await encoder.decode(resBuffer);\n\n  logger.info('Got messages from server', res.messages.length);\n\n  let localTimeChanged = getClock().timestamp.toString() !== currentTime;\n\n  // Apply the new messages\n  let receivedMessages = [];\n  if (res.messages.length > 0) {\n    receivedMessages = await receiveMessages(\n      res.messages.map(msg => ({\n        ...msg,\n        value: deserializeValue(msg.value),\n        timestamp: Timestamp.parse(msg.timestamp)\n      }))\n    );\n  }\n\n  let diffTime = merkle.diff(res.merkle, getClock().merkle);\n  let result = res.messages;\n\n  if (diffTime !== null) {\n    // This is a bit wonky, but we loop until we are in sync with the\n    // server. While syncing, either the client or server could change\n    // out from under us, so it might take a couple passes to\n    // completely sync up. This is a check that stops the loop in case\n    // we are corrupted and can't sync up. We try 10 times if we keep\n    // getting the same diff time, and add a upper limit of 300 no\n    // matter what (just to stop this from ever being an infinite\n    // loop).\n    //\n    // It's slightly possible for the user to add more messages while we\n    // are in `receiveMessages`, but `localTimeChanged` would still be\n    // false. In that case, we don't reset the counter but it should be\n    // very unlikely that this happens enough to hit the loop limit.\n\n    if ((count >= 10 && diffTime === prevDiffTime) || count >= 100) {\n      logger.info('SENT -------');\n      logger.info(JSON.stringify(messages));\n      logger.info('RECEIVED -------');\n      logger.info(JSON.stringify(res.messages));\n\n      let rebuiltMerkle = rebuildMerkleHash();\n\n      console.log(\n        count,\n        'messages:',\n        messages.length,\n        messages.length > 0 ? messages[0] : null,\n        'res.messages:',\n        res.messages.length,\n        res.messages.length > 0 ? res.messages[0] : null,\n        'clientId',\n        getClock().timestamp.node(),\n        'groupId',\n        groupId,\n        'diffTime:',\n        diffTime,\n        diffTime === prevDiffTime,\n        'local clock:',\n        getClock().timestamp.toString(),\n        getClock().merkle.hash,\n        'rebuilt hash:',\n        rebuiltMerkle.numMessages,\n        rebuiltMerkle.trie.hash,\n        'server hash:',\n        res.merkle.hash,\n        'localTimeChanged:',\n        localTimeChanged\n      );\n\n      if (rebuiltMerkle.trie.hash === res.merkle.hash) {\n        // Rebuilding the merkle worked... but why?\n        let clocks = await db.all('SELECT * FROM messages_clock');\n        if (clocks.length !== 1) {\n          console.log('Bad number of clocks:', clocks.length);\n        }\n        let hash = deserializeClock(clocks[0]).merkle.hash;\n        console.log('Merkle hash in db:', hash);\n      }\n\n      throw new SyncError('out-of-sync');\n    }\n\n    receivedMessages = receivedMessages.concat(\n      await _fullSync(\n        new Timestamp(diffTime, 0, '0').toString(),\n        // If something local changed while we were syncing, always\n        // reset, token the counter. We never want to think syncing failed\n        // because we tried to syncing many times and couldn't sync,\n        // but it was because the user kept changing stuff in the\n        // middle of syncing.\n        localTimeChanged ? 0 : count + 1,\n        diffTime\n      )\n    );\n  } else {\n    // All synced up, store the current time as a simple optimization\n    // for the next sync\n    await prefs.savePrefs({\n      lastSyncedTimestamp: getClock().timestamp.toString()\n    });\n  }\n\n  return receivedMessages;\n}\n","import encryption from '../encryption';\nlet SyncPb = require('./proto/sync_pb');\n\nasync function randomString() {\n  return (await encryption.randomBytes(12)).toString();\n}\n\nexport default async function makeTestMessage(keyId) {\n  let messagePb = new SyncPb.Message();\n  messagePb.setDataset(await randomString());\n  messagePb.setRow(await randomString());\n  messagePb.setColumn(await randomString());\n  messagePb.setValue(await randomString());\n  let binaryMsg = messagePb.serializeBinary();\n\n  return await encryption.encrypt(binaryMsg, keyId);\n}\n","import { addSyncListener, applyMessages } from './index';\nimport Timestamp from '../timestamp';\n\nfunction migrateParentIds(oldValues, newValues) {\n  newValues.forEach((items, table) => {\n    if (table === 'transactions') {\n      let old = oldValues.get(table);\n      let toApply = [];\n\n      items.forEach(newValue => {\n        if (\n          newValue.isChild === 1 &&\n          newValue.parent_id == null &&\n          newValue.id.includes('/')\n        ) {\n          let parentId = newValue.id.split('/')[0];\n\n          toApply.push({\n            dataset: 'transactions',\n            row: newValue.id,\n            column: 'parent_id',\n            value: parentId,\n            timestamp: Timestamp.send()\n          });\n        }\n      });\n\n      if (toApply.length > 0) {\n        applyMessages(toApply);\n      }\n    }\n  });\n}\n\nlet _unlisten = null;\nexport function listen() {\n  unlisten();\n  _unlisten = addSyncListener(migrateParentIds);\n}\n\nexport function unlisten() {\n  if (_unlisten) {\n    _unlisten();\n    _unlisten = null;\n  }\n}\n","// source: sync.proto\n/**\n * @fileoverview\n * @enhanceable\n * @suppress {messageConventions} JS Compiler reports an error if a variable or\n *     field starts with 'MSG_' and isn't a translatable message.\n * @public\n */\n// GENERATED CODE -- DO NOT EDIT!\n\nvar jspb = require('google-protobuf');\nvar goog = jspb;\nvar global = globalThis;\n\ngoog.exportSymbol('proto.EncryptedData', null, global);\ngoog.exportSymbol('proto.Message', null, global);\ngoog.exportSymbol('proto.MessageEnvelope', null, global);\ngoog.exportSymbol('proto.SyncRequest', null, global);\ngoog.exportSymbol('proto.SyncResponse', null, global);\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.EncryptedData = function(opt_data) {\n  jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.EncryptedData, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n  /**\n   * @public\n   * @override\n   */\n  proto.EncryptedData.displayName = 'proto.EncryptedData';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.Message = function(opt_data) {\n  jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.Message, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n  /**\n   * @public\n   * @override\n   */\n  proto.Message.displayName = 'proto.Message';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.MessageEnvelope = function(opt_data) {\n  jspb.Message.initialize(this, opt_data, 0, -1, null, null);\n};\ngoog.inherits(proto.MessageEnvelope, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n  /**\n   * @public\n   * @override\n   */\n  proto.MessageEnvelope.displayName = 'proto.MessageEnvelope';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.SyncRequest = function(opt_data) {\n  jspb.Message.initialize(this, opt_data, 0, -1, proto.SyncRequest.repeatedFields_, null);\n};\ngoog.inherits(proto.SyncRequest, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n  /**\n   * @public\n   * @override\n   */\n  proto.SyncRequest.displayName = 'proto.SyncRequest';\n}\n/**\n * Generated by JsPbCodeGenerator.\n * @param {Array=} opt_data Optional initial data array, typically from a\n * server response, or constructed directly in Javascript. The array is used\n * in place and becomes part of the constructed object. It is not cloned.\n * If no data is provided, the constructed object will be empty, but still\n * valid.\n * @extends {jspb.Message}\n * @constructor\n */\nproto.SyncResponse = function(opt_data) {\n  jspb.Message.initialize(this, opt_data, 0, -1, proto.SyncResponse.repeatedFields_, null);\n};\ngoog.inherits(proto.SyncResponse, jspb.Message);\nif (goog.DEBUG && !COMPILED) {\n  /**\n   * @public\n   * @override\n   */\n  proto.SyncResponse.displayName = 'proto.SyncResponse';\n}\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.\n * For the list of reserved names please see:\n *     net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n *     JSPB instance for transitional soy proto support:\n *     http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.EncryptedData.prototype.toObject = function(opt_includeInstance) {\n  return proto.EncryptedData.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n *     the JSPB instance for transitional soy proto support:\n *     http://goto/soy-param-migration\n * @param {!proto.EncryptedData} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.EncryptedData.toObject = function(includeInstance, msg) {\n  var f, obj = {\n    iv: msg.getIv_asB64(),\n    authtag: msg.getAuthtag_asB64(),\n    data: msg.getData_asB64()\n  };\n\n  if (includeInstance) {\n    obj.$jspbMessageInstance = msg;\n  }\n  return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.EncryptedData}\n */\nproto.EncryptedData.deserializeBinary = function(bytes) {\n  var reader = new jspb.BinaryReader(bytes);\n  var msg = new proto.EncryptedData;\n  return proto.EncryptedData.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.EncryptedData} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.EncryptedData}\n */\nproto.EncryptedData.deserializeBinaryFromReader = function(msg, reader) {\n  while (reader.nextField()) {\n    if (reader.isEndGroup()) {\n      break;\n    }\n    var field = reader.getFieldNumber();\n    switch (field) {\n    case 1:\n      var value = /** @type {!Uint8Array} */ (reader.readBytes());\n      msg.setIv(value);\n      break;\n    case 2:\n      var value = /** @type {!Uint8Array} */ (reader.readBytes());\n      msg.setAuthtag(value);\n      break;\n    case 3:\n      var value = /** @type {!Uint8Array} */ (reader.readBytes());\n      msg.setData(value);\n      break;\n    default:\n      reader.skipField();\n      break;\n    }\n  }\n  return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.EncryptedData.prototype.serializeBinary = function() {\n  var writer = new jspb.BinaryWriter();\n  proto.EncryptedData.serializeBinaryToWriter(this, writer);\n  return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.EncryptedData} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.EncryptedData.serializeBinaryToWriter = function(message, writer) {\n  var f = undefined;\n  f = message.getIv_asU8();\n  if (f.length > 0) {\n    writer.writeBytes(\n      1,\n      f\n    );\n  }\n  f = message.getAuthtag_asU8();\n  if (f.length > 0) {\n    writer.writeBytes(\n      2,\n      f\n    );\n  }\n  f = message.getData_asU8();\n  if (f.length > 0) {\n    writer.writeBytes(\n      3,\n      f\n    );\n  }\n};\n\n\n/**\n * optional bytes iv = 1;\n * @return {!(string|Uint8Array)}\n */\nproto.EncryptedData.prototype.getIv = function() {\n  return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * optional bytes iv = 1;\n * This is a type-conversion wrapper around `getIv()`\n * @return {string}\n */\nproto.EncryptedData.prototype.getIv_asB64 = function() {\n  return /** @type {string} */ (jspb.Message.bytesAsB64(\n      this.getIv()));\n};\n\n\n/**\n * optional bytes iv = 1;\n * Note that Uint8Array is not supported on all browsers.\n * @see http://caniuse.com/Uint8Array\n * This is a type-conversion wrapper around `getIv()`\n * @return {!Uint8Array}\n */\nproto.EncryptedData.prototype.getIv_asU8 = function() {\n  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(\n      this.getIv()));\n};\n\n\n/**\n * @param {!(string|Uint8Array)} value\n * @return {!proto.EncryptedData} returns this\n */\nproto.EncryptedData.prototype.setIv = function(value) {\n  return jspb.Message.setProto3BytesField(this, 1, value);\n};\n\n\n/**\n * optional bytes authTag = 2;\n * @return {!(string|Uint8Array)}\n */\nproto.EncryptedData.prototype.getAuthtag = function() {\n  return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * optional bytes authTag = 2;\n * This is a type-conversion wrapper around `getAuthtag()`\n * @return {string}\n */\nproto.EncryptedData.prototype.getAuthtag_asB64 = function() {\n  return /** @type {string} */ (jspb.Message.bytesAsB64(\n      this.getAuthtag()));\n};\n\n\n/**\n * optional bytes authTag = 2;\n * Note that Uint8Array is not supported on all browsers.\n * @see http://caniuse.com/Uint8Array\n * This is a type-conversion wrapper around `getAuthtag()`\n * @return {!Uint8Array}\n */\nproto.EncryptedData.prototype.getAuthtag_asU8 = function() {\n  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(\n      this.getAuthtag()));\n};\n\n\n/**\n * @param {!(string|Uint8Array)} value\n * @return {!proto.EncryptedData} returns this\n */\nproto.EncryptedData.prototype.setAuthtag = function(value) {\n  return jspb.Message.setProto3BytesField(this, 2, value);\n};\n\n\n/**\n * optional bytes data = 3;\n * @return {!(string|Uint8Array)}\n */\nproto.EncryptedData.prototype.getData = function() {\n  return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * optional bytes data = 3;\n * This is a type-conversion wrapper around `getData()`\n * @return {string}\n */\nproto.EncryptedData.prototype.getData_asB64 = function() {\n  return /** @type {string} */ (jspb.Message.bytesAsB64(\n      this.getData()));\n};\n\n\n/**\n * optional bytes data = 3;\n * Note that Uint8Array is not supported on all browsers.\n * @see http://caniuse.com/Uint8Array\n * This is a type-conversion wrapper around `getData()`\n * @return {!Uint8Array}\n */\nproto.EncryptedData.prototype.getData_asU8 = function() {\n  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(\n      this.getData()));\n};\n\n\n/**\n * @param {!(string|Uint8Array)} value\n * @return {!proto.EncryptedData} returns this\n */\nproto.EncryptedData.prototype.setData = function(value) {\n  return jspb.Message.setProto3BytesField(this, 3, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.\n * For the list of reserved names please see:\n *     net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n *     JSPB instance for transitional soy proto support:\n *     http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.Message.prototype.toObject = function(opt_includeInstance) {\n  return proto.Message.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n *     the JSPB instance for transitional soy proto support:\n *     http://goto/soy-param-migration\n * @param {!proto.Message} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.Message.toObject = function(includeInstance, msg) {\n  var f, obj = {\n    dataset: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n    row: jspb.Message.getFieldWithDefault(msg, 2, \"\"),\n    column: jspb.Message.getFieldWithDefault(msg, 3, \"\"),\n    value: jspb.Message.getFieldWithDefault(msg, 4, \"\")\n  };\n\n  if (includeInstance) {\n    obj.$jspbMessageInstance = msg;\n  }\n  return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.Message}\n */\nproto.Message.deserializeBinary = function(bytes) {\n  var reader = new jspb.BinaryReader(bytes);\n  var msg = new proto.Message;\n  return proto.Message.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.Message} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.Message}\n */\nproto.Message.deserializeBinaryFromReader = function(msg, reader) {\n  while (reader.nextField()) {\n    if (reader.isEndGroup()) {\n      break;\n    }\n    var field = reader.getFieldNumber();\n    switch (field) {\n    case 1:\n      var value = /** @type {string} */ (reader.readString());\n      msg.setDataset(value);\n      break;\n    case 2:\n      var value = /** @type {string} */ (reader.readString());\n      msg.setRow(value);\n      break;\n    case 3:\n      var value = /** @type {string} */ (reader.readString());\n      msg.setColumn(value);\n      break;\n    case 4:\n      var value = /** @type {string} */ (reader.readString());\n      msg.setValue(value);\n      break;\n    default:\n      reader.skipField();\n      break;\n    }\n  }\n  return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.Message.prototype.serializeBinary = function() {\n  var writer = new jspb.BinaryWriter();\n  proto.Message.serializeBinaryToWriter(this, writer);\n  return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.Message} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.Message.serializeBinaryToWriter = function(message, writer) {\n  var f = undefined;\n  f = message.getDataset();\n  if (f.length > 0) {\n    writer.writeString(\n      1,\n      f\n    );\n  }\n  f = message.getRow();\n  if (f.length > 0) {\n    writer.writeString(\n      2,\n      f\n    );\n  }\n  f = message.getColumn();\n  if (f.length > 0) {\n    writer.writeString(\n      3,\n      f\n    );\n  }\n  f = message.getValue();\n  if (f.length > 0) {\n    writer.writeString(\n      4,\n      f\n    );\n  }\n};\n\n\n/**\n * optional string dataset = 1;\n * @return {string}\n */\nproto.Message.prototype.getDataset = function() {\n  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Message} returns this\n */\nproto.Message.prototype.setDataset = function(value) {\n  return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional string row = 2;\n * @return {string}\n */\nproto.Message.prototype.getRow = function() {\n  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Message} returns this\n */\nproto.Message.prototype.setRow = function(value) {\n  return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\n/**\n * optional string column = 3;\n * @return {string}\n */\nproto.Message.prototype.getColumn = function() {\n  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Message} returns this\n */\nproto.Message.prototype.setColumn = function(value) {\n  return jspb.Message.setProto3StringField(this, 3, value);\n};\n\n\n/**\n * optional string value = 4;\n * @return {string}\n */\nproto.Message.prototype.getValue = function() {\n  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.Message} returns this\n */\nproto.Message.prototype.setValue = function(value) {\n  return jspb.Message.setProto3StringField(this, 4, value);\n};\n\n\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.\n * For the list of reserved names please see:\n *     net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n *     JSPB instance for transitional soy proto support:\n *     http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.MessageEnvelope.prototype.toObject = function(opt_includeInstance) {\n  return proto.MessageEnvelope.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n *     the JSPB instance for transitional soy proto support:\n *     http://goto/soy-param-migration\n * @param {!proto.MessageEnvelope} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.MessageEnvelope.toObject = function(includeInstance, msg) {\n  var f, obj = {\n    timestamp: jspb.Message.getFieldWithDefault(msg, 1, \"\"),\n    isencrypted: jspb.Message.getBooleanFieldWithDefault(msg, 2, false),\n    content: msg.getContent_asB64()\n  };\n\n  if (includeInstance) {\n    obj.$jspbMessageInstance = msg;\n  }\n  return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.MessageEnvelope}\n */\nproto.MessageEnvelope.deserializeBinary = function(bytes) {\n  var reader = new jspb.BinaryReader(bytes);\n  var msg = new proto.MessageEnvelope;\n  return proto.MessageEnvelope.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.MessageEnvelope} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.MessageEnvelope}\n */\nproto.MessageEnvelope.deserializeBinaryFromReader = function(msg, reader) {\n  while (reader.nextField()) {\n    if (reader.isEndGroup()) {\n      break;\n    }\n    var field = reader.getFieldNumber();\n    switch (field) {\n    case 1:\n      var value = /** @type {string} */ (reader.readString());\n      msg.setTimestamp(value);\n      break;\n    case 2:\n      var value = /** @type {boolean} */ (reader.readBool());\n      msg.setIsencrypted(value);\n      break;\n    case 3:\n      var value = /** @type {!Uint8Array} */ (reader.readBytes());\n      msg.setContent(value);\n      break;\n    default:\n      reader.skipField();\n      break;\n    }\n  }\n  return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.MessageEnvelope.prototype.serializeBinary = function() {\n  var writer = new jspb.BinaryWriter();\n  proto.MessageEnvelope.serializeBinaryToWriter(this, writer);\n  return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.MessageEnvelope} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.MessageEnvelope.serializeBinaryToWriter = function(message, writer) {\n  var f = undefined;\n  f = message.getTimestamp();\n  if (f.length > 0) {\n    writer.writeString(\n      1,\n      f\n    );\n  }\n  f = message.getIsencrypted();\n  if (f) {\n    writer.writeBool(\n      2,\n      f\n    );\n  }\n  f = message.getContent_asU8();\n  if (f.length > 0) {\n    writer.writeBytes(\n      3,\n      f\n    );\n  }\n};\n\n\n/**\n * optional string timestamp = 1;\n * @return {string}\n */\nproto.MessageEnvelope.prototype.getTimestamp = function() {\n  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.MessageEnvelope} returns this\n */\nproto.MessageEnvelope.prototype.setTimestamp = function(value) {\n  return jspb.Message.setProto3StringField(this, 1, value);\n};\n\n\n/**\n * optional bool isEncrypted = 2;\n * @return {boolean}\n */\nproto.MessageEnvelope.prototype.getIsencrypted = function() {\n  return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 2, false));\n};\n\n\n/**\n * @param {boolean} value\n * @return {!proto.MessageEnvelope} returns this\n */\nproto.MessageEnvelope.prototype.setIsencrypted = function(value) {\n  return jspb.Message.setProto3BooleanField(this, 2, value);\n};\n\n\n/**\n * optional bytes content = 3;\n * @return {!(string|Uint8Array)}\n */\nproto.MessageEnvelope.prototype.getContent = function() {\n  return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * optional bytes content = 3;\n * This is a type-conversion wrapper around `getContent()`\n * @return {string}\n */\nproto.MessageEnvelope.prototype.getContent_asB64 = function() {\n  return /** @type {string} */ (jspb.Message.bytesAsB64(\n      this.getContent()));\n};\n\n\n/**\n * optional bytes content = 3;\n * Note that Uint8Array is not supported on all browsers.\n * @see http://caniuse.com/Uint8Array\n * This is a type-conversion wrapper around `getContent()`\n * @return {!Uint8Array}\n */\nproto.MessageEnvelope.prototype.getContent_asU8 = function() {\n  return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8(\n      this.getContent()));\n};\n\n\n/**\n * @param {!(string|Uint8Array)} value\n * @return {!proto.MessageEnvelope} returns this\n */\nproto.MessageEnvelope.prototype.setContent = function(value) {\n  return jspb.Message.setProto3BytesField(this, 3, value);\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array<number>}\n * @const\n */\nproto.SyncRequest.repeatedFields_ = [1];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.\n * For the list of reserved names please see:\n *     net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n *     JSPB instance for transitional soy proto support:\n *     http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.SyncRequest.prototype.toObject = function(opt_includeInstance) {\n  return proto.SyncRequest.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n *     the JSPB instance for transitional soy proto support:\n *     http://goto/soy-param-migration\n * @param {!proto.SyncRequest} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SyncRequest.toObject = function(includeInstance, msg) {\n  var f, obj = {\n    messagesList: jspb.Message.toObjectList(msg.getMessagesList(),\n    proto.MessageEnvelope.toObject, includeInstance),\n    fileid: jspb.Message.getFieldWithDefault(msg, 2, \"\"),\n    groupid: jspb.Message.getFieldWithDefault(msg, 3, \"\"),\n    keyid: jspb.Message.getFieldWithDefault(msg, 5, \"\"),\n    since: jspb.Message.getFieldWithDefault(msg, 6, \"\")\n  };\n\n  if (includeInstance) {\n    obj.$jspbMessageInstance = msg;\n  }\n  return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.SyncRequest}\n */\nproto.SyncRequest.deserializeBinary = function(bytes) {\n  var reader = new jspb.BinaryReader(bytes);\n  var msg = new proto.SyncRequest;\n  return proto.SyncRequest.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.SyncRequest} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.SyncRequest}\n */\nproto.SyncRequest.deserializeBinaryFromReader = function(msg, reader) {\n  while (reader.nextField()) {\n    if (reader.isEndGroup()) {\n      break;\n    }\n    var field = reader.getFieldNumber();\n    switch (field) {\n    case 1:\n      var value = new proto.MessageEnvelope;\n      reader.readMessage(value,proto.MessageEnvelope.deserializeBinaryFromReader);\n      msg.addMessages(value);\n      break;\n    case 2:\n      var value = /** @type {string} */ (reader.readString());\n      msg.setFileid(value);\n      break;\n    case 3:\n      var value = /** @type {string} */ (reader.readString());\n      msg.setGroupid(value);\n      break;\n    case 5:\n      var value = /** @type {string} */ (reader.readString());\n      msg.setKeyid(value);\n      break;\n    case 6:\n      var value = /** @type {string} */ (reader.readString());\n      msg.setSince(value);\n      break;\n    default:\n      reader.skipField();\n      break;\n    }\n  }\n  return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.SyncRequest.prototype.serializeBinary = function() {\n  var writer = new jspb.BinaryWriter();\n  proto.SyncRequest.serializeBinaryToWriter(this, writer);\n  return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.SyncRequest} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SyncRequest.serializeBinaryToWriter = function(message, writer) {\n  var f = undefined;\n  f = message.getMessagesList();\n  if (f.length > 0) {\n    writer.writeRepeatedMessage(\n      1,\n      f,\n      proto.MessageEnvelope.serializeBinaryToWriter\n    );\n  }\n  f = message.getFileid();\n  if (f.length > 0) {\n    writer.writeString(\n      2,\n      f\n    );\n  }\n  f = message.getGroupid();\n  if (f.length > 0) {\n    writer.writeString(\n      3,\n      f\n    );\n  }\n  f = message.getKeyid();\n  if (f.length > 0) {\n    writer.writeString(\n      5,\n      f\n    );\n  }\n  f = message.getSince();\n  if (f.length > 0) {\n    writer.writeString(\n      6,\n      f\n    );\n  }\n};\n\n\n/**\n * repeated MessageEnvelope messages = 1;\n * @return {!Array<!proto.MessageEnvelope>}\n */\nproto.SyncRequest.prototype.getMessagesList = function() {\n  return /** @type{!Array<!proto.MessageEnvelope>} */ (\n    jspb.Message.getRepeatedWrapperField(this, proto.MessageEnvelope, 1));\n};\n\n\n/**\n * @param {!Array<!proto.MessageEnvelope>} value\n * @return {!proto.SyncRequest} returns this\n*/\nproto.SyncRequest.prototype.setMessagesList = function(value) {\n  return jspb.Message.setRepeatedWrapperField(this, 1, value);\n};\n\n\n/**\n * @param {!proto.MessageEnvelope=} opt_value\n * @param {number=} opt_index\n * @return {!proto.MessageEnvelope}\n */\nproto.SyncRequest.prototype.addMessages = function(opt_value, opt_index) {\n  return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.MessageEnvelope, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.SyncRequest} returns this\n */\nproto.SyncRequest.prototype.clearMessagesList = function() {\n  return this.setMessagesList([]);\n};\n\n\n/**\n * optional string fileId = 2;\n * @return {string}\n */\nproto.SyncRequest.prototype.getFileid = function() {\n  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SyncRequest} returns this\n */\nproto.SyncRequest.prototype.setFileid = function(value) {\n  return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\n/**\n * optional string groupId = 3;\n * @return {string}\n */\nproto.SyncRequest.prototype.getGroupid = function() {\n  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SyncRequest} returns this\n */\nproto.SyncRequest.prototype.setGroupid = function(value) {\n  return jspb.Message.setProto3StringField(this, 3, value);\n};\n\n\n/**\n * optional string keyId = 5;\n * @return {string}\n */\nproto.SyncRequest.prototype.getKeyid = function() {\n  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SyncRequest} returns this\n */\nproto.SyncRequest.prototype.setKeyid = function(value) {\n  return jspb.Message.setProto3StringField(this, 5, value);\n};\n\n\n/**\n * optional string since = 6;\n * @return {string}\n */\nproto.SyncRequest.prototype.getSince = function() {\n  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SyncRequest} returns this\n */\nproto.SyncRequest.prototype.setSince = function(value) {\n  return jspb.Message.setProto3StringField(this, 6, value);\n};\n\n\n\n/**\n * List of repeated fields within this message type.\n * @private {!Array<number>}\n * @const\n */\nproto.SyncResponse.repeatedFields_ = [1];\n\n\n\nif (jspb.Message.GENERATE_TO_OBJECT) {\n/**\n * Creates an object representation of this proto.\n * Field names that are reserved in JavaScript and will be renamed to pb_name.\n * Optional fields that are not set will be set to undefined.\n * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.\n * For the list of reserved names please see:\n *     net/proto2/compiler/js/internal/generator.cc#kKeyword.\n * @param {boolean=} opt_includeInstance Deprecated. whether to include the\n *     JSPB instance for transitional soy proto support:\n *     http://goto/soy-param-migration\n * @return {!Object}\n */\nproto.SyncResponse.prototype.toObject = function(opt_includeInstance) {\n  return proto.SyncResponse.toObject(opt_includeInstance, this);\n};\n\n\n/**\n * Static version of the {@see toObject} method.\n * @param {boolean|undefined} includeInstance Deprecated. Whether to include\n *     the JSPB instance for transitional soy proto support:\n *     http://goto/soy-param-migration\n * @param {!proto.SyncResponse} msg The msg instance to transform.\n * @return {!Object}\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SyncResponse.toObject = function(includeInstance, msg) {\n  var f, obj = {\n    messagesList: jspb.Message.toObjectList(msg.getMessagesList(),\n    proto.MessageEnvelope.toObject, includeInstance),\n    merkle: jspb.Message.getFieldWithDefault(msg, 2, \"\")\n  };\n\n  if (includeInstance) {\n    obj.$jspbMessageInstance = msg;\n  }\n  return obj;\n};\n}\n\n\n/**\n * Deserializes binary data (in protobuf wire format).\n * @param {jspb.ByteSource} bytes The bytes to deserialize.\n * @return {!proto.SyncResponse}\n */\nproto.SyncResponse.deserializeBinary = function(bytes) {\n  var reader = new jspb.BinaryReader(bytes);\n  var msg = new proto.SyncResponse;\n  return proto.SyncResponse.deserializeBinaryFromReader(msg, reader);\n};\n\n\n/**\n * Deserializes binary data (in protobuf wire format) from the\n * given reader into the given message object.\n * @param {!proto.SyncResponse} msg The message object to deserialize into.\n * @param {!jspb.BinaryReader} reader The BinaryReader to use.\n * @return {!proto.SyncResponse}\n */\nproto.SyncResponse.deserializeBinaryFromReader = function(msg, reader) {\n  while (reader.nextField()) {\n    if (reader.isEndGroup()) {\n      break;\n    }\n    var field = reader.getFieldNumber();\n    switch (field) {\n    case 1:\n      var value = new proto.MessageEnvelope;\n      reader.readMessage(value,proto.MessageEnvelope.deserializeBinaryFromReader);\n      msg.addMessages(value);\n      break;\n    case 2:\n      var value = /** @type {string} */ (reader.readString());\n      msg.setMerkle(value);\n      break;\n    default:\n      reader.skipField();\n      break;\n    }\n  }\n  return msg;\n};\n\n\n/**\n * Serializes the message to binary data (in protobuf wire format).\n * @return {!Uint8Array}\n */\nproto.SyncResponse.prototype.serializeBinary = function() {\n  var writer = new jspb.BinaryWriter();\n  proto.SyncResponse.serializeBinaryToWriter(this, writer);\n  return writer.getResultBuffer();\n};\n\n\n/**\n * Serializes the given message to binary data (in protobuf wire\n * format), writing to the given BinaryWriter.\n * @param {!proto.SyncResponse} message\n * @param {!jspb.BinaryWriter} writer\n * @suppress {unusedLocalVariables} f is only used for nested messages\n */\nproto.SyncResponse.serializeBinaryToWriter = function(message, writer) {\n  var f = undefined;\n  f = message.getMessagesList();\n  if (f.length > 0) {\n    writer.writeRepeatedMessage(\n      1,\n      f,\n      proto.MessageEnvelope.serializeBinaryToWriter\n    );\n  }\n  f = message.getMerkle();\n  if (f.length > 0) {\n    writer.writeString(\n      2,\n      f\n    );\n  }\n};\n\n\n/**\n * repeated MessageEnvelope messages = 1;\n * @return {!Array<!proto.MessageEnvelope>}\n */\nproto.SyncResponse.prototype.getMessagesList = function() {\n  return /** @type{!Array<!proto.MessageEnvelope>} */ (\n    jspb.Message.getRepeatedWrapperField(this, proto.MessageEnvelope, 1));\n};\n\n\n/**\n * @param {!Array<!proto.MessageEnvelope>} value\n * @return {!proto.SyncResponse} returns this\n*/\nproto.SyncResponse.prototype.setMessagesList = function(value) {\n  return jspb.Message.setRepeatedWrapperField(this, 1, value);\n};\n\n\n/**\n * @param {!proto.MessageEnvelope=} opt_value\n * @param {number=} opt_index\n * @return {!proto.MessageEnvelope}\n */\nproto.SyncResponse.prototype.addMessages = function(opt_value, opt_index) {\n  return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.MessageEnvelope, opt_index);\n};\n\n\n/**\n * Clears the list making it empty but non-null.\n * @return {!proto.SyncResponse} returns this\n */\nproto.SyncResponse.prototype.clearMessagesList = function() {\n  return this.setMessagesList([]);\n};\n\n\n/**\n * optional string merkle = 2;\n * @return {string}\n */\nproto.SyncResponse.prototype.getMerkle = function() {\n  return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, \"\"));\n};\n\n\n/**\n * @param {string} value\n * @return {!proto.SyncResponse} returns this\n */\nproto.SyncResponse.prototype.setMerkle = function(value) {\n  return jspb.Message.setProto3StringField(this, 2, value);\n};\n\n\ngoog.object.extend(exports, proto);\n","import * as db from '../db';\nimport Timestamp, { serializeClock, getClock } from '../timestamp';\nimport * as merkle from '../merkle';\n\nexport function rebuildMerkleHash() {\n  let rows = db.runQuery('SELECT timestamp FROM messages_crdt', [], true);\n  let trie = {};\n\n  for (let i = 0; i < rows.length; i++) {\n    trie = merkle.insert(trie, Timestamp.parse(rows[i].timestamp));\n  }\n\n  return {\n    numMessages: rows.length,\n    trie: trie\n  };\n}\n\nexport default async function repairSync() {\n  let rebuilt = rebuildMerkleHash();\n  let clock = getClock();\n\n  // Save it locally\n  clock.merkle = rebuilt.trie;\n\n  // Persist it in the db\n  db.runQuery(\n    db.cache('INSERT OR REPLACE INTO messages_clock (id, clock) VALUES (1, ?)'),\n    [serializeClock(clock)]\n  );\n}\n","import * as cloudStorage from '../cloud-storage';\nimport * as db from '../db';\nimport * as prefs from '../prefs';\nimport asyncStorage from '../../platform/server/asyncStorage';\nimport { captureException } from '../../platform/exceptions';\nimport { runMutator } from '../mutators';\nconst connection = require('../../platform/server/connection');\n\nexport default async function resetSync(keyState) {\n  if (!keyState) {\n    // If we aren't resetting the key, make sure our key is up-to-date\n    // so we don't accidentally upload a file encrypted with the wrong\n    // key (or not encrypted at all)\n    let { valid, error } = await cloudStorage.checkKey();\n    if (error) {\n      return { error };\n    } else if (!valid) {\n      return { error: { reason: 'file-has-new-key' } };\n    }\n  }\n\n  let { error } = await cloudStorage.resetSyncState(keyState);\n  if (error) {\n    return { error };\n  }\n\n  await runMutator(async () => {\n    // TOOD: We could automatically generate the list of tables to\n    // cleanup by looking at the schema\n    //\n    // Be VERY careful here since we are bulk deleting data. It should\n    // never delete any data that doesn't have `tombstone = 1`\n    await db.execQuery(`\n      DELETE FROM messages_crdt;\n      DELETE FROM messages_clock;\n      DELETE FROM transactions WHERE tombstone = 1;\n      DELETE FROM accounts WHERE tombstone = 1;\n      DELETE FROM payees WHERE tombstone = 1;\n      DELETE FROM categories WHERE tombstone = 1;\n      DELETE FROM category_groups WHERE tombstone = 1;\n      DELETE FROM schedules WHERE tombstone = 1;\n      DELETE FROM rules WHERE tombstone = 1;\n      ANALYZE;\n      VACUUM;\n    `);\n    await db.loadClock();\n  });\n\n  await prefs.savePrefs({\n    groupId: null,\n    lastSyncedTimestamp: null,\n    lastUploaded: null\n  });\n\n  if (keyState) {\n    let { key } = keyState;\n    let { cloudFileId } = prefs.getPrefs();\n\n    // The key has changed, we need to update our local data to\n    // store the new key\n\n    // Persist key in async storage\n    let keys = JSON.parse((await asyncStorage.getItem(`encrypt-keys`)) || '{}');\n    keys[cloudFileId] = key.serialize();\n    await asyncStorage.setItem('encrypt-keys', JSON.stringify(keys));\n\n    // Save the key id in prefs\n    await prefs.savePrefs({ encryptKeyId: key.getId() });\n  }\n\n  // Finally, upload the file to make it the \"true\" version that all\n  // other clients need to pull down to get back in sync\n  try {\n    await cloudStorage.upload();\n  } catch (e) {\n    if (e.reason) {\n      return { error: e };\n    }\n    captureException(e);\n    return { error: { reason: 'upload-failure' } };\n  } finally {\n    connection.send('prefs-updated');\n  }\n\n  return {};\n}\n","import murmurhash from 'murmurhash';\nconst uuid = require('../platform/uuid');\n\n/**\n * Hybrid Unique Logical Clock (HULC) timestamp generator\n *\n * Globally-unique, monotonic timestamps are generated from the\n *    combination of the unreliable system time, a counter, and an\n *    identifier for the current node (instance, machine, process, etc.).\n *    These timestamps can accommodate clock stuttering (duplicate values),\n *    regression, and node differences within the configured maximum drift.\n *\n * In order to generate timestamps locally or for transmission to another\n *    node, use the send() method. For global causality, timestamps must\n *    be included in each message processed by the system. Whenever a\n *    message is received, its timestamp must be passed to the recv()\n *    method.\n *\n * Timestamps serialize into a 46-character collatable string\n *    example: 2015-04-24T22:23:42.123Z-1000-0123456789ABCDEF\n *    example: 2015-04-24T22:23:42.123Z-1000-A219E7A71CC18912\n *\n * The 64-bit hybrid clock is based on the HLC specification,\n * http://www.cse.buffalo.edu/tech-reports/2014-04.pdf\n */\n\n// A mutable global clock\nlet clock = null;\n\nexport function setClock(clock_) {\n  clock = clock_;\n}\n\nexport function getClock() {\n  return clock;\n}\n\nexport function makeClock(timestamp, merkle = {}) {\n  return { timestamp: MutableTimestamp.from(timestamp), merkle };\n}\n\nexport function serializeClock(clock) {\n  return JSON.stringify({\n    timestamp: clock.timestamp.toString(),\n    merkle: clock.merkle\n  });\n}\n\nexport function deserializeClock(clock) {\n  let data;\n  try {\n    data = JSON.parse(clock);\n  } catch (e) {\n    data = {\n      timestamp: '1970-01-01T00:00:00.000Z-0000-' + makeClientId(),\n      merkle: {}\n    };\n  }\n\n  return {\n    timestamp: MutableTimestamp.from(Timestamp.parse(data.timestamp)),\n    merkle: data.merkle\n  };\n}\n\nexport function makeClientId() {\n  return uuid\n    .v4Sync()\n    .replace(/-/g, '')\n    .slice(-16);\n}\n\nvar config = {\n  // Allow 5 minutes of clock drift\n  maxDrift: 5 * 60 * 1000\n};\n\n/**\n * timestamp instance class\n */\nexport default class Timestamp {\n  constructor(millis, counter, node) {\n    this._state = {\n      millis: millis,\n      counter: counter,\n      node: node\n    };\n  }\n\n  valueOf() {\n    return this.toString();\n  }\n\n  toString() {\n    return [\n      new Date(this.millis()).toISOString(),\n      (\n        '0000' +\n        this.counter()\n          .toString(16)\n          .toUpperCase()\n      ).slice(-4),\n      ('0000000000000000' + this.node()).slice(-16)\n    ].join('-');\n  }\n\n  millis() {\n    return this._state.millis;\n  }\n\n  counter() {\n    return this._state.counter;\n  }\n\n  node() {\n    return this._state.node;\n  }\n\n  hash() {\n    return murmurhash.v3(this.toString());\n  }\n}\n\nexport class MutableTimestamp extends Timestamp {\n  setMillis(n) {\n    this._state.millis = n;\n  }\n\n  setCounter(n) {\n    this._state.counter = n;\n  }\n\n  setNode(n) {\n    this._state.node = n;\n  }\n}\n\nMutableTimestamp.from = timestamp => {\n  return new MutableTimestamp(\n    timestamp.millis(),\n    timestamp.counter(),\n    timestamp.node()\n  );\n};\n\n// Timestamp generator initialization\n// * sets the node ID to an arbitrary value\n// * useful for mocking/unit testing\nTimestamp.init = function(options = {}) {\n  if (options.maxDrift) {\n    config.maxDrift = options.maxDrift;\n  }\n\n  setClock(\n    makeClock(\n      new Timestamp(\n        0,\n        0,\n        options.node\n          ? ('0000000000000000' + options.node).toString().slice(-16)\n          : ''\n      )\n    ),\n    null\n  );\n};\n\n/**\n * Timestamp send. Generates a unique, monotonic timestamp suitable\n * for transmission to another system in string format\n */\nTimestamp.send = function() {\n  if (!clock) {\n    return null;\n  }\n\n  // retrieve the local wall time\n  var phys = Date.now();\n\n  // unpack the clock.timestamp logical time and counter\n  var lOld = clock.timestamp.millis();\n  var cOld = clock.timestamp.counter();\n\n  // calculate the next logical time and counter\n  // * ensure that the logical time never goes backward\n  // * increment the counter if phys time does not advance\n  var lNew = Math.max(lOld, phys);\n  var cNew = lOld === lNew ? cOld + 1 : 0;\n\n  // check the result for drift and counter overflow\n  if (lNew - phys > config.maxDrift) {\n    throw new Timestamp.ClockDriftError(lNew, phys, config.maxDrift);\n  }\n  if (cNew > 65535) {\n    throw new Timestamp.OverflowError();\n  }\n\n  // repack the logical time/counter\n  clock.timestamp.setMillis(lNew);\n  clock.timestamp.setCounter(cNew);\n\n  return new Timestamp(\n    clock.timestamp.millis(),\n    clock.timestamp.counter(),\n    clock.timestamp.node()\n  );\n};\n\n// Timestamp receive. Parses and merges a timestamp from a remote\n// system with the local timeglobal uniqueness and monotonicity are\n// preserved\nTimestamp.recv = function(msg) {\n  if (!clock) {\n    return null;\n  }\n\n  // retrieve the local wall time\n  var phys = Date.now();\n\n  // unpack the message wall time/counter\n  var lMsg = msg.millis();\n  var cMsg = msg.counter();\n\n  // assert the node id and remote clock drift\n  // if (msg.node() === clock.timestamp.node()) {\n  //   throw new Timestamp.DuplicateNodeError(clock.timestamp.node());\n  // }\n  if (lMsg - phys > config.maxDrift) {\n    throw new Timestamp.ClockDriftError();\n  }\n\n  // unpack the clock.timestamp logical time and counter\n  var lOld = clock.timestamp.millis();\n  var cOld = clock.timestamp.counter();\n\n  // calculate the next logical time and counter\n  // . ensure that the logical time never goes backward\n  // . if all logical clocks are equal, increment the max counter\n  // . if max = old > message, increment local counter\n  // . if max = messsage > old, increment message counter\n  // . otherwise, clocks are monotonic, reset counter\n  var lNew = Math.max(Math.max(lOld, phys), lMsg);\n  var cNew =\n    lNew === lOld && lNew === lMsg\n      ? Math.max(cOld, cMsg) + 1\n      : lNew === lOld\n      ? cOld + 1\n      : lNew === lMsg\n      ? cMsg + 1\n      : 0;\n\n  // check the result for drift and counter overflow\n  if (lNew - phys > config.maxDrift) {\n    throw new Timestamp.ClockDriftError();\n  }\n  if (cNew > 65535) {\n    throw new Timestamp.OverflowError();\n  }\n\n  // repack the logical time/counter\n  clock.timestamp.setMillis(lNew);\n  clock.timestamp.setCounter(cNew);\n\n  return new Timestamp(\n    clock.timestamp.millis(),\n    clock.timestamp.counter(),\n    clock.timestamp.node()\n  );\n};\n\n/**\n * timestamp parsing\n * converts a fixed-length string timestamp to the structured value\n */\nTimestamp.parse = function(timestamp) {\n  if (typeof timestamp === 'string') {\n    var parts = timestamp.split('-');\n    if (parts && parts.length === 5) {\n      var millis = Date.parse(parts.slice(0, 3).join('-')).valueOf();\n      var counter = parseInt(parts[3], 16);\n      var node = parts[4];\n      if (!isNaN(millis) && !isNaN(counter))\n        return new Timestamp(millis, counter, node);\n    }\n  }\n  return null;\n};\n\n/**\n * zero/minimum timestamp\n */\nvar zero = Timestamp.parse('1970-01-01T00:00:00.000Z-0000-0000000000000000');\nTimestamp.zero = function() {\n  return zero;\n};\n\n/**\n * maximum timestamp\n */\nvar max = Timestamp.parse('9999-12-31T23:59:59.999Z-FFFF-FFFFFFFFFFFFFFFF');\nTimestamp.max = function() {\n  return max;\n};\n\nTimestamp.since = isoString => {\n  return isoString + '-0000-0000000000000000';\n};\n\n/**\n * error classes\n */\nTimestamp.DuplicateNodeError = class extends Error {\n  constructor(node) {\n    super();\n    this.type = 'DuplicateNodeError';\n    this.message = 'duplicate node identifier ' + node;\n  }\n};\n\nTimestamp.ClockDriftError = class extends Error {\n  constructor(...args) {\n    super();\n    this.type = 'ClockDriftError';\n    this.message = ['maximum clock drift exceeded'].concat(args).join(' ');\n  }\n};\n\nTimestamp.OverflowError = class extends Error {\n  constructor() {\n    super();\n    this.type = 'OverflowError';\n    this.message = 'timestamp counter overflow';\n  }\n};\n","import { batchMessages } from '../sync';\nimport { runMutator } from '../mutators';\nimport { createApp } from '../app';\nimport * as db from '../db';\nimport { batchUpdateTransactions } from '../accounts/transactions';\n\nlet app = createApp();\n\napp.method('tools/fix-split-transactions', async () => {\n  // 1. Check for child transactions that have a blank payee, and set\n  //    the payee to whatever the parent has\n  let blankPayeeRows = await db.all(`\n    SELECT t.*, p.payee AS parentPayee FROM v_transactions_internal t\n    LEFT JOIN v_transactions_internal p ON t.parent_id = p.id\n    WHERE t.is_child = 1 AND t.payee IS NULL AND p.payee IS NOT NULL\n  `);\n\n  await runMutator(async () => {\n    let updated = blankPayeeRows.map(row => ({\n      id: row.id,\n      payee: row.parentPayee\n    }));\n    await batchUpdateTransactions({ updated });\n  });\n\n  // 2. Make sure the \"cleared\" flag is synced up with the parent\n  // transactions\n  let clearedRows = await db.all(`\n    SELECT t.id, p.cleared FROM v_transactions_internal t\n    LEFT JOIN v_transactions_internal p ON t.parent_id = p.id\n    WHERE t.is_child = 1 AND t.cleared != p.cleared\n  `);\n\n  await runMutator(async () => {\n    let updated = clearedRows.map(row => ({\n      id: row.id,\n      cleared: row.cleared === 1\n    }));\n    await batchUpdateTransactions({ updated });\n  });\n\n  // 3. Mark the `tombstone` field as true on any child transactions\n  //    that have a dead parent\n  let deletedRows = await db.all(`\n    SELECT t.* FROM v_transactions_internal t\n    LEFT JOIN v_transactions_internal p ON t.parent_id = p.id\n    WHERE t.is_child = 1 AND t.tombstone = 0 AND (p.tombstone = 1 OR p.id IS NULL)\n  `);\n\n  await runMutator(async () => {\n    let updated = deletedRows.map(row => ({ id: row.id, tombstone: 1 }));\n    await batchUpdateTransactions({ updated });\n  });\n\n  return {\n    numBlankPayees: blankPayeeRows.length,\n    numCleared: clearedRows.length,\n    numDeleted: deletedRows.length\n  };\n});\n\nexport default app;\n","import asyncStorage from '../../platform/server/asyncStorage';\nimport { sha256String } from '../encryption-internals';\nlet uuid = require('../../platform/uuid');\n\nlet currentUniqueId;\nlet mixpanel;\nlet isEnabled = true;\n\nexport function toggle(trackUsage) {\n  isEnabled = trackUsage == null || trackUsage === 'true' ? true : false;\n}\n\n// TODO: Figure out location, send to EU data centers if in EU\n// {\n//     host: \"api-eu.mixpanel.com\",\n// },\n\n// This must stay up-to-date with all apps that hit mixpanel! That includes the\n// website and server. If changing this, make sure to change it everywhere\nasync function hash(userId) {\n  let hashed = await sha256String(userId);\n  return `user-${hashed.replace(/[=/]/g, '')}`;\n}\n\nfunction isAnonymous(id) {\n  return !id.startsWith('user-');\n}\n\nexport async function init() {\n}\n\nexport async function login(userId) {\n}\n\nlet BUFFERING = false;\nlet BUFFER = [];\n\nfunction startBuffering() {\n  BUFFERING = true;\n  BUFFER = [];\n}\n\nfunction stopBuffering() {\n  for (let call of BUFFER) {\n    call[0](...call[1]);\n  }\n  BUFFERING = false;\n  BUFFER = [];\n}\n\nfunction buffered(func) {\n  return (...args) => {\n    if (process.env.NODE_ENV !== 'development') {\n      if (BUFFERING) {\n        BUFFER.push([func, [currentUniqueId, ...args]]);\n      } else {\n        func(currentUniqueId, ...args);\n      }\n    }\n  };\n}\n\nexport const track = buffered((distinct_id, name, props) => {});\n\nexport const setProfile = buffered((distinct_id, props) => {});\n","import { sendMessages } from './sync';\nimport { getIn } from '../shared/util';\nimport Timestamp from './timestamp';\nimport { withMutatorContext, getMutatorContext } from './mutators';\nconst connection = require('../platform/server/connection');\n\n// A marker always sits as the first entry to simplify logic\nlet MESSAGE_HISTORY = [{ type: 'marker' }];\nlet CURSOR = 0;\nlet HISTORY_SIZE = 20;\n\nfunction trimHistory() {\n  MESSAGE_HISTORY = MESSAGE_HISTORY.slice(0, CURSOR + 1);\n\n  let markers = MESSAGE_HISTORY.filter(item => item.type === 'marker');\n  if (markers.length > HISTORY_SIZE) {\n    let slice = markers.slice(-HISTORY_SIZE);\n    let cutoff = MESSAGE_HISTORY.indexOf(slice[0]);\n    MESSAGE_HISTORY = MESSAGE_HISTORY.slice(cutoff);\n    CURSOR = MESSAGE_HISTORY.length - 1;\n  }\n}\n\nexport function appendMessages(messages, oldData) {\n  let context = getMutatorContext();\n\n  if (context.undoListening && messages.length > 0) {\n    trimHistory();\n\n    let { undoTag } = context;\n\n    MESSAGE_HISTORY.push({\n      type: 'messages',\n      messages,\n      oldData,\n      undoTag\n    });\n    CURSOR++;\n  }\n}\n\nexport function clearUndo() {\n  MESSAGE_HISTORY = [{ type: 'marker' }];\n  CURSOR = 0;\n}\n\nexport function withUndo(func, meta) {\n  let context = getMutatorContext();\n  if (context.undoDisabled || context.undoListening) {\n    return func();\n  }\n\n  MESSAGE_HISTORY = MESSAGE_HISTORY.slice(0, CURSOR + 1);\n\n  let marker = { type: 'marker', meta };\n\n  if (MESSAGE_HISTORY[MESSAGE_HISTORY.length - 1].type === 'marker') {\n    MESSAGE_HISTORY[MESSAGE_HISTORY.length - 1] = marker;\n  } else {\n    MESSAGE_HISTORY.push(marker);\n    CURSOR++;\n  }\n\n  return withMutatorContext(\n    { undoListening: true, undoTag: context.undoTag },\n    func\n  );\n}\n\nexport function undoable(func) {\n  return (...args) => {\n    return withUndo(() => {\n      return func(...args);\n    });\n  };\n}\n\nasync function applyUndoAction(messages, meta, undoTag) {\n  await withMutatorContext({ undoListening: false }, () => {\n    return sendMessages(\n      messages.map(msg => ({ ...msg, timestamp: Timestamp.send() }))\n    );\n  });\n\n  const tables = messages.reduce((acc, message) => {\n    if (!acc.includes(message.dataset)) {\n      acc.push(message.dataset);\n    }\n    return acc;\n  }, []);\n\n  connection.send('undo-event', {\n    messages,\n    tables,\n    meta,\n    undoTag\n  });\n}\n\nexport async function undo() {\n  let end = CURSOR;\n  CURSOR = Math.max(CURSOR - 1, 0);\n\n  // Walk back to the nearest marker\n  while (CURSOR > 0 && MESSAGE_HISTORY[CURSOR].type !== 'marker') {\n    CURSOR--;\n  }\n\n  let meta = MESSAGE_HISTORY[CURSOR].meta;\n  let start = Math.max(CURSOR, 0);\n  let entries = MESSAGE_HISTORY.slice(start, end + 1).filter(\n    entry => entry.type === 'messages'\n  );\n\n  if (entries.length > 0) {\n    let toApply = entries\n      .reduce((acc, entry) => {\n        return acc.concat(\n          entry.messages\n            .map(message => undoMessage(message, entry.oldData))\n            .filter(x => x)\n        );\n      }, [])\n      .reverse();\n\n    await applyUndoAction(toApply, meta, entries[0].undoTag);\n  }\n}\n\nfunction undoMessage(message, oldData) {\n  let oldItem = getIn(oldData, [message.dataset, message.row]);\n  if (oldItem) {\n    let column = message.column;\n    if (message.dataset === 'spreadsheet_cells') {\n      // The spreadsheet messages use the `expr` column, but only as a\n      // placeholder. We actually want to read the `cachedValue` prop\n      // from the old item.\n      column = 'cachedValue';\n    }\n\n    return { ...message, value: oldItem[column] };\n  } else {\n    if (message.dataset === 'spreadsheet_cells') {\n      if (message.column === 'expr') {\n        return { ...message, value: null };\n      }\n      return message;\n    } else if (\n      // The mapping fields aren't ever deleted... this should be\n      // harmless since all they are is meta information. Maybe we\n      // should fix this though.\n      message.dataset !== 'category_mapping' &&\n      message.dataset !== 'payee_mapping'\n    ) {\n      if (\n        message.dataset === 'zero_budget_months' ||\n        message.dataset === 'zero_budgets' ||\n        message.dataset === 'reflect_budgets'\n      ) {\n        // Only these fields are reversable\n        if (['buffered', 'amount', 'carryover'].includes(message.column)) {\n          return { ...message, value: 0 };\n        }\n        return null;\n      } else if (message.dataset === 'notes') {\n        return { ...message, value: null };\n      }\n\n      return { ...message, column: 'tombstone', value: 1 };\n    }\n  }\n  return null;\n}\n\nexport async function redo() {\n  let meta =\n    MESSAGE_HISTORY[CURSOR].type === 'marker'\n      ? MESSAGE_HISTORY[CURSOR].meta\n      : null;\n\n  let start = CURSOR;\n  CURSOR = Math.min(CURSOR + 1, MESSAGE_HISTORY.length - 1);\n\n  // Walk forward to the nearest marker\n  while (\n    CURSOR < MESSAGE_HISTORY.length - 1 &&\n    MESSAGE_HISTORY[CURSOR].type !== 'marker'\n  ) {\n    CURSOR++;\n  }\n\n  let end = CURSOR;\n  let entries = MESSAGE_HISTORY.slice(start + 1, end + 1).filter(\n    entry => entry.type === 'messages'\n  );\n\n  if (entries.length > 0) {\n    let toApply = entries.reduce((acc, entry) => {\n      return acc\n        .concat(entry.messages)\n        .concat(redoResurrections(entry.messages, entry.oldData));\n    }, []);\n\n    await applyUndoAction(toApply, meta, entries[entries.length - 1].undoTag);\n  }\n}\n\nfunction redoResurrections(messages, oldData) {\n  let resurrect = new Set();\n\n  messages.forEach(message => {\n    // If any of the ids didn't exist before, we need to \"resurrect\"\n    // them by resetting their tombstones to 0\n    let oldItem = getIn(oldData, [message.dataset, message.row]);\n    if (\n      !oldItem &&\n      ![\n        'zero_budget_months',\n        'zero_budgets',\n        'reflect_budgets',\n        'notes',\n        'category_mapping',\n        'payee_mapping'\n      ].includes(message.dataset)\n    ) {\n      resurrect.add(message.dataset + '.' + message.row);\n    }\n  });\n\n  return [...resurrect].map(desc => {\n    let [table, row] = desc.split('.');\n    return {\n      dataset: table,\n      row,\n      column: 'tombstone',\n      value: 0,\n      timestamp: Timestamp.send()\n    };\n  });\n}\n","import md5 from 'md5';\nimport * as migrations from './migrate/migrations';\nimport * as db from './db';\nimport { schema, schemaConfig } from './aql/schema';\nimport { makeViews } from './aql/views';\n\n// Managing the init/update process\n\nasync function runMigrations() {\n  await migrations.migrate(db.getDatabase());\n}\n\nexport async function updateViews() {\n  let hashKey = 'view-hash';\n  let row = await db.first('SELECT value FROM __meta__ WHERE key = ?', [\n    hashKey\n  ]);\n  let { value: hash } = row || {};\n\n  let views = makeViews(schema, schemaConfig);\n  let currentHash = md5(views);\n\n  if (hash !== currentHash) {\n    await db.execQuery(views);\n    await db.runQuery(\n      'INSERT OR REPLACE INTO __meta__ (key, value) VALUES (?, ?)',\n      [hashKey, currentHash]\n    );\n  }\n}\n\nexport async function updateVersion() {\n  await runMigrations();\n  await updateViews();\n}\n","import fs from '../../platform/server/fs';\nconst uuid = require('../../platform/uuid');\n\nexport async function uniqueFileName(existingFiles) {\n  let initialName = 'My Finances';\n  let idx = 1;\n\n  // If there is a conflict, keep appending an index until there is no\n  // conflict and we have a unique name\n  let newName = initialName;\n  while (existingFiles.find(file => file.name === newName)) {\n    newName = `${initialName} ${idx}`;\n    idx++;\n  }\n\n  return newName;\n}\n\nexport async function idFromFileName(name) {\n  let id =\n    name.replace(/( |[^A-Za-z0-9])/g, '-') + '-' + uuid.v4Sync().slice(0, 7);\n\n  // Make sure the id is unique. There's a chance one could already\n  // exist (although very unlikely now that we append unique\n  // characters onto the id)\n  let index = 0;\n\n  let budgetDir = fs.getBudgetDir(id);\n  while (await fs.exists(budgetDir)) {\n    index++;\n    budgetDir = fs.getBudgetDir(id + index.toString());\n  }\n\n  // If a suffix was added, update the id\n  if (index > 0) {\n    id = id + index.toString();\n  }\n\n  return id;\n}\n","import '@rschedule/standard-date-adapter/setup';\nimport '@rschedule/json-tools/Schedule';\n\nexport * from '@rschedule/standard-date-adapter';\nexport * from '@rschedule/core';\nexport * from '@rschedule/core/generators';\n","export function fromPlaidAccountType(type, subtype) {\n  switch (type) {\n    case 'brokerage':\n    case 'investment':\n      return 'investment';\n    case 'credit':\n      return 'credit';\n    case 'loan':\n      return 'debt';\n    case 'other':\n      return 'other';\n    case 'depository':\n    default:\n      switch (subtype) {\n        case 'money market':\n        case 'savings':\n          return 'savings';\n        case 'cd':\n          return 'cd';\n        default:\n          return 'checking';\n      }\n  }\n}\n\nexport function prettyAccountType(type) {\n  switch (type) {\n    case 'checking':\n      return 'Checking';\n    case 'savings':\n      return 'Savings';\n    case 'cd':\n      return 'CD';\n    case 'investment':\n      return 'Investment';\n    case 'credit':\n      return 'Credit Card';\n    case 'mortgage':\n      return 'Mortgage';\n    case 'debt':\n      return 'Debt';\n    case 'other':\n    default:\n      return 'Other';\n  }\n}\n\nexport function determineOffBudget(type) {\n  switch (type) {\n    case 'investment':\n    case 'mortgage':\n    case 'debt':\n    case 'other':\n      return true;\n    default:\n  }\n  return false;\n}\n","export function sequential(fn) {\n  let sequenceState = {\n    running: null,\n    queue: []\n  };\n\n  function pump() {\n    if (sequenceState.queue.length > 0) {\n      const next = sequenceState.queue.shift();\n      run(next.args, next.resolve, next.reject);\n    } else {\n      sequenceState.running = null;\n    }\n  }\n\n  function run(args, resolve, reject) {\n    sequenceState.running = fn(...args);\n\n    sequenceState.running.then(\n      val => {\n        pump();\n        resolve(val);\n      },\n      err => {\n        pump();\n        reject(err);\n      }\n    );\n  }\n\n  return (...args) => {\n    if (!sequenceState.running) {\n      return new Promise((resolve, reject) => {\n        return run(args, resolve, reject);\n      });\n    } else {\n      return new Promise((resolve, reject) => {\n        sequenceState.queue.push({ resolve, reject, args });\n      });\n    }\n  };\n}\n\nexport function once(fn) {\n  let promise = null;\n  let onceFn = (...args) => {\n    if (!promise) {\n      promise = fn(...args).finally(() => {\n        promise = null;\n      });\n      return promise;\n    }\n\n    return promise;\n  };\n\n  return onceFn;\n}\n","import * as d from 'date-fns';\nimport memoizeOne from 'memoize-one';\n\nfunction _parse(value) {\n  if (typeof value === 'string') {\n    // Dates are hard. We just want to deal with months in the format\n    // 2020-01 and days in the format 2020-01-01, but life is never\n    // simple. We want to rely on native dates for date logic because\n    // days are complicated (leap years, etc). But relying on native\n    // dates mean we're exposed to craziness.\n    //\n    // The biggest problem is that JS dates work with local time by\n    // default. We could try to only work with UTC, but there's not an\n    // easy way to make `format` avoid local time, and not sure if we\n    // want that anyway (`currentMonth` should surely print the local\n    // time). We need to embrace local time, and as long as inputs to\n    // date logic and outputs from format are local time, it should\n    // work.\n    //\n    // To make sure we're in local time, always give Date integer\n    // values. If you pass in a string to parse, different string\n    // formats produce different results.\n    //\n    // A big problem is daylight savings, however. Usually, when\n    // giving the time to the Date constructor, you get back a date\n    // specifically for that time in your local timezone. However, if\n    // daylight savings occurs on that exact time, you will get back\n    // something different:\n    //\n    // This is fine:\n    // > new Date(2017, 2, 12, 1).toString()\n    // > 'Sun Mar 12 2017 01:00:00 GMT-0500 (Eastern Standard Time)'\n    //\n    // But wait, we got back a different time (3AM instead of 2AM):\n    // > new Date(2017, 2, 12, 2).toString()\n    // > 'Sun Mar 12 2017 03:00:00 GMT-0400 (Eastern Daylight Time)'\n    //\n    // The time is \"correctly\" adjusted via DST, but we _really_\n    // wanted 2AM. The problem is that time simply doesn't exist.\n    //\n    // Why is this a problem? Well, consider a case where the DST\n    // shift happens *at midnight* and it goes back an hour. You think\n    // you have a date object for the next day, but when formatted it\n    // actually shows the previous day. A more likely scenario: buggy\n    // timezone data makes JS dates do this shift when it shouldn't,\n    // so using midnight at the time for date logic gives back the\n    // last day. See the time range of Sep 30 15:00 - Oct 1 1:00 for\n    // the AEST timezone when nodejs-mobile incorrectly gives you back\n    // a time an hour *before* you specified. Since this happens on\n    // Oct 1, doing `addMonths(September, 1)` still gives you back\n    // September. Issue here:\n    // https://github.com/JaneaSystems/nodejs-mobile/issues/251\n    //\n    // The fix is simple once you understand this. Always use the 12th\n    // hour of the day. That's it. There is no DST that shifts more\n    // than 12 hours (god let's hope not) so no matter how far DST has\n    // shifted backwards or forwards, doing date logic will stay\n    // within the day we want.\n\n    let [year, month, day] = value.split('-');\n    if (day != null) {\n      return new Date(parseInt(year), parseInt(month) - 1, parseInt(day), 12);\n    } else if (month != null) {\n      return new Date(parseInt(year), parseInt(month) - 1, 1, 12);\n    } else {\n      return new Date(parseInt(year), 0, 1, 12);\n    }\n  }\n  return value;\n}\n\nexport const parseDate = _parse;\n\nexport function yearFromDate(date) {\n  return d.format(_parse(date), 'yyyy');\n}\n\nexport function monthFromDate(date) {\n  return d.format(_parse(date), 'yyyy-MM');\n}\n\nexport function dayFromDate(date) {\n  return d.format(_parse(date), 'yyyy-MM-dd');\n}\n\nexport function currentMonth() {\n  if (global.IS_TESTING) {\n    return '2017-01';\n  } else {\n    return d.format(new Date(), 'yyyy-MM');\n  }\n}\n\nexport function currentDay() {\n  if (global.IS_TESTING) {\n    return '2017-01-01';\n  } else {\n    return d.format(new Date(), 'yyyy-MM-dd');\n  }\n}\n\nexport function nextMonth(month) {\n  return d.format(d.addMonths(_parse(month), 1), 'yyyy-MM');\n}\n\nexport function prevMonth(month) {\n  return d.format(d.subMonths(_parse(month), 1), 'yyyy-MM');\n}\n\nexport function addMonths(month, n) {\n  return d.format(d.addMonths(_parse(month), n), 'yyyy-MM');\n}\n\nexport function subMonths(month, n) {\n  return d.format(d.subMonths(_parse(month), n), 'yyyy-MM');\n}\n\nexport function addDays(day, n) {\n  return d.format(d.addDays(_parse(day), n), 'yyyy-MM-dd');\n}\n\nexport function subDays(day, n) {\n  return d.format(d.subDays(_parse(day), n), 'yyyy-MM-dd');\n}\n\nexport function isBefore(month1, month2) {\n  return d.isBefore(_parse(month1), _parse(month2));\n}\n\nexport function isAfter(month1, month2) {\n  return d.isAfter(_parse(month1), _parse(month2));\n}\n\n// TODO: This doesn't really fit in this module anymore, should\n// probably live elsewhere\nexport function bounds(month) {\n  return {\n    start: parseInt(d.format(d.startOfMonth(_parse(month)), 'yyyyMMdd')),\n    end: parseInt(d.format(d.endOfMonth(_parse(month)), 'yyyyMMdd'))\n  };\n}\n\nexport function _range(start, end, inclusive) {\n  const months = [];\n  let month = monthFromDate(start);\n  while (d.isBefore(_parse(month), _parse(end))) {\n    months.push(month);\n    month = addMonths(month, 1);\n  }\n\n  if (inclusive) {\n    months.push(month);\n  }\n\n  return months;\n}\n\nexport function range(start, end) {\n  return _range(start, end);\n}\n\nexport function rangeInclusive(start, end) {\n  return _range(start, end, true);\n}\n\nexport function _dayRange(start, end, inclusive) {\n  const days = [];\n  let day = start;\n  while (d.isBefore(_parse(day), _parse(end))) {\n    days.push(day);\n    day = addDays(day, 1);\n  }\n\n  if (inclusive) {\n    days.push(day);\n  }\n\n  return days;\n}\n\nexport function dayRange(start, end) {\n  return _dayRange(start, end);\n}\n\nexport function dayRangeInclusive(start, end) {\n  return _dayRange(start, end, true);\n}\n\nexport function getMonthIndex(month) {\n  return parseInt(month.slice(5, 7)) - 1;\n}\n\nexport function getYear(month) {\n  return month.slice(0, 4);\n}\n\nexport function getMonth(day) {\n  return day.slice(0, 7);\n}\n\nexport function getYearStart(month) {\n  return getYear(month) + '-01';\n}\n\nexport function getYearEnd(month) {\n  return getYear(month) + '-12';\n}\n\nexport function sheetForMonth(month) {\n  return 'budget' + month.replace('-', '');\n}\n\nexport function nameForMonth(month) {\n  return d.format(_parse(month), \"MMMM 'yy\");\n}\n\nexport function format(month, str) {\n  return d.format(_parse(month), str);\n}\n\nexport const getDateFormatRegex = memoizeOne(format => {\n  return new RegExp(\n    format\n      .replace(/d+/g, '\\\\d{1,2}')\n      .replace(/M+/g, '\\\\d{1,2}')\n      .replace(/y+/g, '\\\\d{4}')\n  );\n});\n\nexport const getDayMonthFormat = memoizeOne(format => {\n  return format\n    .replace(/y+/g, '')\n    .replace(/[^\\w]$/, '')\n    .replace(/^[^\\w]/, '');\n});\n\nexport const getDayMonthRegex = memoizeOne(format => {\n  let regex = format\n    .replace(/y+/g, '')\n    .replace(/[^\\w]$/, '')\n    .replace(/^[^\\w]/, '')\n    .replace(/d+/g, '\\\\d{1,2}')\n    .replace(/M+/g, '\\\\d{1,2}');\n  return new RegExp('^' + regex + '$');\n});\n\nexport const getMonthYearFormat = memoizeOne(format => {\n  return format\n    .replace(/d+/g, '')\n    .replace(/[^\\w]$/, '')\n    .replace(/^[^\\w]/, '')\n    .replace(/\\/\\//, '/')\n    .replace(/\\.\\./, '.')\n    .replace(/--/, '-');\n});\n\nexport const getMonthYearRegex = memoizeOne(format => {\n  let regex = format\n    .replace(/d+/g, '')\n    .replace(/[^\\w]$/, '')\n    .replace(/^[^\\w]/, '')\n    .replace(/\\/\\//, '/')\n    .replace(/M+/g, '\\\\d{1,2}')\n    .replace(/y+/g, '\\\\d{2,4}');\n  return new RegExp('^' + regex + '$');\n});\n\nexport const getShortYearFormat = memoizeOne(format => {\n  return format.replace(/y+/g, 'yy');\n});\n\nexport const getShortYearRegex = memoizeOne(format => {\n  let regex = format\n    .replace(/[^\\w]$/, '')\n    .replace(/^[^\\w]/, '')\n    .replace(/d+/g, '\\\\d{1,2}')\n    .replace(/M+/g, '\\\\d{1,2}')\n    .replace(/y+/g, '\\\\d{2}');\n  return new RegExp('^' + regex + '$');\n});\n","export class Query {\n  constructor(state) {\n    this.state = {\n      filterExpressions: state.filterExpressions || [],\n      selectExpressions: state.selectExpressions || [],\n      groupExpressions: state.groupExpressions || [],\n      orderExpressions: state.orderExpressions || [],\n      calculation: false,\n      rawMode: false,\n      withDead: false,\n      validateRefs: true,\n      limit: null,\n      offset: null,\n      ...state\n    };\n  }\n\n  filter(expr) {\n    return new Query({\n      ...this.state,\n      filterExpressions: [...this.state.filterExpressions, expr]\n    });\n  }\n\n  unfilter(exprs) {\n    let exprSet = new Set(exprs);\n    return new Query({\n      ...this.state,\n      filterExpressions: this.state.filterExpressions.filter(\n        expr => !exprSet.has(Object.keys(expr)[0])\n      )\n    });\n  }\n\n  select(exprs = []) {\n    if (!Array.isArray(exprs)) {\n      exprs = [exprs];\n    }\n\n    let query = new Query({ ...this.state, selectExpressions: exprs });\n    query.state.calculation = false;\n    return query;\n  }\n\n  calculate(expr) {\n    let query = this.select({ result: expr });\n    query.state.calculation = true;\n    return query;\n  }\n\n  groupBy(exprs) {\n    if (!Array.isArray(exprs)) {\n      exprs = [exprs];\n    }\n\n    return new Query({\n      ...this.state,\n      groupExpressions: [...this.state.groupExpressions, ...exprs]\n    });\n  }\n\n  orderBy(exprs) {\n    if (!Array.isArray(exprs)) {\n      exprs = [exprs];\n    }\n\n    return new Query({\n      ...this.state,\n      orderExpressions: [...this.state.orderExpressions, ...exprs]\n    });\n  }\n\n  limit(num) {\n    return new Query({ ...this.state, limit: num });\n  }\n\n  offset(num) {\n    return new Query({ ...this.state, offset: num });\n  }\n\n  raw() {\n    return new Query({ ...this.state, rawMode: true });\n  }\n\n  withDead() {\n    return new Query({ ...this.state, withDead: true });\n  }\n\n  withoutValidatedRefs() {\n    return new Query({ ...this.state, validateRefs: false });\n  }\n\n  options(opts) {\n    return new Query({ ...this.state, tableOptions: opts });\n  }\n\n  serialize() {\n    return this.state;\n  }\n}\n\nexport function getPrimaryOrderBy(query, defaultOrderBy) {\n  let orderExprs = query.serialize().orderExpressions;\n  if (orderExprs.length === 0) {\n    if (defaultOrderBy) {\n      return { order: 'asc', ...defaultOrderBy };\n    }\n    return null;\n  }\n\n  let firstOrder = orderExprs[0];\n  if (typeof firstOrder === 'string') {\n    return { field: firstOrder, order: 'asc' };\n  }\n  // Handle this form: { field: 'desc' }\n  let [field] = Object.keys(firstOrder);\n  return { field, order: firstOrder[field] };\n}\n\nexport default function q(table) {\n  return new Query({ table });\n}\n","import { integerToAmount, amountToInteger, currencyToAmount } from './util';\n\n// For now, this info is duplicated from the backend. Figure out how\n// to share it later.\nexport const TYPE_INFO = {\n  date: {\n    ops: ['is', 'isapprox', 'gt', 'gte', 'lt', 'lte'],\n    nullable: false\n  },\n  id: {\n    ops: ['is', 'contains', 'oneOf'],\n    nullable: true\n  },\n  string: {\n    ops: ['is', 'contains', 'oneOf'],\n    nullable: false\n  },\n  number: {\n    ops: ['is', 'isapprox', 'isbetween', 'gt', 'gte', 'lt', 'lte'],\n    nullable: false\n  },\n  boolean: {\n    ops: ['is'],\n    nullable: false\n  }\n};\n\nexport const FIELD_TYPES = new Map(\n  Object.entries({\n    imported_payee: 'string',\n    payee: 'id',\n    date: 'date',\n    notes: 'string',\n    amount: 'number',\n    amountInflow: 'number',\n    amountOutfow: 'number',\n    category: 'id',\n    account: 'id',\n    cleared: 'boolean'\n  })\n);\n\nexport function mapField(field, opts) {\n  opts = opts || {};\n\n  switch (field) {\n    case 'imported_payee':\n      return 'imported payee';\n    case 'amount':\n      if (opts.inflow) {\n        return 'amount (inflow)';\n      } else if (opts.outflow) {\n        return 'amount (outflow)';\n      }\n      return 'amount';\n    case 'amount-inflow':\n      return 'amount (inflow)';\n    case 'amount-outflow':\n      return 'amount (outflow)';\n    default:\n      return field;\n  }\n}\n\nexport function friendlyOp(op, type) {\n  switch (op) {\n    case 'oneOf':\n      return 'one of';\n    case 'is':\n      return 'is';\n    case 'isapprox':\n      return 'is approx';\n    case 'isbetween':\n      return 'is between';\n    case 'contains':\n      return 'contains';\n    case 'gt':\n      if (type === 'date') {\n        return 'is after';\n      }\n      return 'is greater than';\n    case 'gte':\n      if (type === 'date') {\n        return 'is after or equals';\n      }\n      return 'is greater than or equals';\n    case 'lt':\n      if (type === 'date') {\n        return 'is before';\n      }\n      return 'is less than';\n    case 'lte':\n      if (type === 'date') {\n        return 'is before or equals';\n      }\n      return 'is less than or equals';\n    case 'true':\n      return 'is true';\n    case 'false':\n      return 'is false';\n    case 'set':\n      return 'set';\n    case 'link-schedule':\n      return 'link schedule';\n    default:\n      return '';\n  }\n}\n\nexport function deserializeField(field) {\n  if (field === 'amount-inflow') {\n    return { field: 'amount', options: { inflow: true } };\n  } else if (field === 'amount-outflow') {\n    return { field: 'amount', options: { outflow: true } };\n  } else {\n    return { field };\n  }\n}\n\nexport function getFieldError(type) {\n  switch (type) {\n    case 'date-format':\n      return 'Invalid date format';\n    case 'no-null':\n    case 'no-empty-array':\n    case 'no-empty-string':\n      return 'Value cannot be empty';\n    case 'not-number':\n      return 'Value must be a number';\n    case 'invalid-field':\n      return 'Please choose a valid field for this type of rule';\n    default:\n      return 'Internal error, sorry! Contact help@actualbudget.com';\n  }\n}\n\nexport function sortNumbers(num1, num2) {\n  if (num1 < num2) {\n    return [num1, num2];\n  }\n  return [num2, num1];\n}\n\nexport function parse(item) {\n  switch (item.type) {\n    case 'number': {\n      let parsed = item.value;\n      if (item.field === 'amount' && item.op !== 'isbetween') {\n        parsed = integerToAmount(parsed);\n      }\n      return { ...item, value: parsed };\n    }\n    case 'string': {\n      let parsed = item.value == null ? '' : item.value;\n      return { ...item, value: parsed };\n    }\n    default:\n  }\n\n  return { ...item, error: null };\n}\n\nexport function unparse({ error, inputKey, ...item }) {\n  switch (item.type) {\n    case 'number': {\n      let unparsed = item.value;\n      if (item.field === 'amount' && item.op !== 'isbetween') {\n        unparsed = amountToInteger(unparsed);\n      }\n\n      return { ...item, value: unparsed };\n    }\n    case 'string': {\n      let unparsed = item.value == null ? '' : item.value;\n      return { ...item, value: unparsed };\n    }\n    default:\n  }\n\n  return item;\n}\n\nexport function makeValue(value, cond) {\n  switch (cond.type) {\n    case 'number': {\n      if (cond.op !== 'isbetween') {\n        return {\n          ...cond,\n          error: null,\n          value: value ? currencyToAmount(value) || 0 : 0\n        };\n      }\n      break;\n    }\n    default:\n  }\n\n  return { ...cond, error: null, value };\n}\n\nexport function getApproxNumberThreshold(number) {\n  return (Math.abs(number) * 0.075) | 0;\n}\n","import * as monthUtils from './months';\nimport q from './query';\n\nexport function getStatus(nextDate, completed, hasTrans) {\n  let today = monthUtils.currentDay();\n\n  if (completed) {\n    return 'completed';\n  } else if (hasTrans) {\n    return 'paid';\n  } else if (nextDate === today) {\n    return 'due';\n  } else if (nextDate > today && nextDate <= monthUtils.addDays(today, 7)) {\n    return 'upcoming';\n  } else if (nextDate < today) {\n    return 'missed';\n  } else {\n    return 'scheduled';\n  }\n}\n\nexport function getHasTransactionsQuery(schedules) {\n  let filters = schedules.map(schedule => {\n    let dateCond = schedule._conditions.find(c => c.field === 'date');\n    return {\n      $and: {\n        schedule: schedule.id,\n        date: {\n          $gte:\n            dateCond && dateCond.op === 'is'\n              ? schedule.next_date\n              : monthUtils.subDays(schedule.next_date, 2)\n        }\n      }\n    };\n  });\n\n  return q('transactions')\n    .filter({ $or: filters })\n    .orderBy({ date: 'desc' })\n    .groupBy('schedule')\n    .select(['schedule', 'date']);\n}\n\nfunction makeNumberSuffix(num) {\n  // Slight abuse of date-fns to turn a number like \"1\" into the full\n  // form \"1st\" but formatting a date with that number\n  return monthUtils.format(new Date(2020, 0, num, 12), 'do');\n}\n\nfunction prettyDayName(day) {\n  let days = {\n    SU: 'Sunday',\n    MO: 'Monday',\n    TU: 'Tuesday',\n    WE: 'Wednesday',\n    TH: 'Thursday',\n    FR: 'Friday',\n    SA: 'Saturday'\n  };\n  return days[day];\n}\n\nexport function getRecurringDescription(config) {\n  let interval = config.interval || 1;\n\n  switch (config.frequency) {\n    case 'weekly': {\n      let desc = 'Every ';\n      desc += interval !== 1 ? `${interval} weeks` : 'week';\n      desc += ' on ' + monthUtils.format(config.start, 'EEEE');\n      return desc;\n    }\n    case 'monthly': {\n      let desc = 'Every ';\n      desc += interval !== 1 ? `${interval} months` : 'month';\n\n      if (config.patterns && config.patterns.length > 0) {\n        // Sort the days ascending. We filter out -1 because that\n        // represents \"last days\" and should always be last, but this\n        // sort would put them first\n        let patterns = [...config.patterns]\n          .sort((p1, p2) => {\n            let typeOrder =\n              (p1.type === 'day' ? 1 : 0) - (p2.type === 'day' ? 1 : 0);\n            let valOrder = p1.value - p2.value;\n\n            if (typeOrder === 0) {\n              return valOrder;\n            }\n            return typeOrder;\n          })\n          .filter(p => p.value !== -1);\n\n        // Add on all -1 values to the end\n        patterns = patterns.concat(config.patterns.filter(p => p.value === -1));\n\n        desc += ' on the ';\n\n        let strs = [];\n\n        let uniqueDays = new Set(patterns.map(p => p.type));\n        let isSameDay = uniqueDays.length === 1 && !uniqueDays.has('day');\n\n        for (let pattern of patterns) {\n          if (pattern.type === 'day') {\n            if (pattern.value === -1) {\n              strs.push('last day');\n            } else {\n              // Example: 15th day\n              strs.push(makeNumberSuffix(pattern.value));\n            }\n          } else {\n            let dayName = isSameDay ? '' : ' ' + prettyDayName(pattern.type);\n\n            if (pattern.value === -1) {\n              // Example: last Monday\n              strs.push('last' + dayName);\n            } else {\n              // Example: 3rd Monday\n              strs.push(makeNumberSuffix(pattern.value) + dayName);\n            }\n          }\n        }\n\n        if (strs.length > 2) {\n          desc += strs.slice(0, strs.length - 1).join(', ');\n          desc += ', and ';\n          desc += strs[strs.length - 1];\n        } else {\n          desc += strs.join(' and ');\n        }\n\n        if (isSameDay) {\n          desc += ' ' + prettyDayName(patterns[0].type);\n        }\n      } else {\n        desc += ' on the ' + monthUtils.format(config.start, 'do');\n      }\n\n      return desc;\n    }\n    case 'yearly': {\n      let desc = 'Every ';\n      desc += interval !== 1 ? `${interval} years` : 'year';\n      desc += ' on ' + monthUtils.format(config.start, 'LLL do');\n      return desc;\n    }\n    default:\n      return 'Recurring error';\n  }\n}\n\nexport function recurConfigToRSchedule(config) {\n  let base = {\n    start: monthUtils.parseDate(config.start),\n    frequency: config.frequency.toUpperCase(),\n    byHourOfDay: [12]\n  };\n\n  if (config.interval) {\n    base.interval = config.interval;\n  }\n\n  let abbrevDay = name => name.slice(0, 2).toUpperCase();\n\n  switch (config.frequency) {\n    case 'weekly':\n      // Nothing to do\n      return [base];\n    case 'monthly':\n      if (config.patterns && config.patterns.length > 0) {\n        let days = config.patterns.filter(p => p.type === 'day');\n        let dayNames = config.patterns.filter(p => p.type !== 'day');\n\n        return [\n          days.length > 0 && { ...base, byDayOfMonth: days.map(p => p.value) },\n          dayNames.length > 0 && {\n            ...base,\n            byDayOfWeek: dayNames.map(p => [abbrevDay(p.type), p.value])\n          }\n        ].filter(Boolean);\n      } else {\n        // Nothing to do\n        return [base];\n      }\n    case 'yearly':\n      return [base];\n    default:\n      throw new Error('Invalid recurring date config');\n  }\n}\n\nexport function extractScheduleConds(conditions) {\n  return {\n    payee:\n      conditions.find(cond => cond.op === 'is' && cond.field === 'payee') ||\n      conditions.find(\n        cond => cond.op === 'is' && cond.field === 'description'\n      ) ||\n      null,\n    account:\n      conditions.find(cond => cond.op === 'is' && cond.field === 'account') ||\n      conditions.find(cond => cond.op === 'is' && cond.field === 'acct') ||\n      null,\n    amount:\n      conditions.find(\n        cond =>\n          (cond.op === 'is' ||\n            cond.op === 'isapprox' ||\n            cond.op === 'isbetween') &&\n          cond.field === 'amount'\n      ) || null,\n    date:\n      conditions.find(\n        cond =>\n          (cond.op === 'is' || cond.op === 'isapprox') && cond.field === 'date'\n      ) || null\n  };\n}\n\nexport function getScheduledAmount(amount) {\n  if (amount && typeof amount !== 'number') {\n    return ((amount.num1 + amount.num2) / 2) | 0;\n  }\n  return amount;\n}\n","import { last, diffItems, getChangedValues, applyChanges } from './util';\nconst uuid = require('../platform/uuid');\n\n// The amount might be null when adding a new transaction\nfunction num(n) {\n  return typeof n === 'number' ? n : 0;\n}\n\nfunction SplitTransactionError(total, parent) {\n  let difference = num(parent.amount) - total;\n\n  return {\n    type: 'SplitTransactionError',\n    version: 1,\n    difference\n  };\n}\n\nexport function makeChild(parent, data) {\n  let prefix = parent.id === 'temp' ? 'temp' : '';\n\n  return {\n    amount: 0,\n    ...data,\n    payee: data.payee || parent.payee,\n    id: data.id ? data.id : prefix + uuid.v4Sync(),\n    account: parent.account,\n    date: parent.date,\n    cleared: parent.cleared != null ? parent.cleared : null,\n    starting_balance_flag:\n      parent.starting_balance_flag != null\n        ? parent.starting_balance_flag\n        : null,\n    is_child: true,\n    parent_id: parent.id,\n    error: null\n  };\n}\n\nexport function recalculateSplit(trans) {\n  // Calculate the new total of split transactions and make sure\n  // that it equals the parent amount\n  const total = trans.subtransactions.reduce(\n    (acc, t) => acc + num(t.amount),\n    0\n  );\n  return {\n    ...trans,\n    error:\n      total === num(trans.amount) ? null : SplitTransactionError(total, trans)\n  };\n}\n\nexport function findParentIndex(transactions, idx) {\n  // This relies on transactions being sorted in a way where parents\n  // are always before children, which is enforced in the db layer.\n  // Walk backwards and find the last parent;\n  while (idx >= 0) {\n    let trans = transactions[idx];\n    if (trans.is_parent) {\n      return idx;\n    }\n    idx--;\n  }\n  return null;\n}\n\nexport function getSplit(transactions, parentIndex) {\n  let split = [transactions[parentIndex]];\n  let curr = parentIndex + 1;\n  while (curr < transactions.length && transactions[curr].is_child) {\n    split.push(transactions[curr]);\n    curr++;\n  }\n  return split;\n}\n\nexport function ungroupTransactions(transactions) {\n  let x = transactions.reduce((list, parent) => {\n    let { subtransactions, ...trans } = parent;\n    subtransactions = subtransactions || [];\n\n    list.push(trans);\n\n    for (let i = 0; i < subtransactions.length; i++) {\n      list.push(subtransactions[i]);\n    }\n    return list;\n  }, []);\n  return x;\n}\n\nexport function groupTransaction(split) {\n  return { ...split[0], subtransactions: split.slice(1) };\n}\n\nexport function ungroupTransaction(split) {\n  if (split == null) {\n    return null;\n  }\n  return ungroupTransactions([split]);\n}\n\nexport function applyTransactionDiff(groupedTrans, diff) {\n  return groupTransaction(applyChanges(diff, ungroupTransaction(groupedTrans)));\n}\n\nexport function replaceTransactions(transactions, id, func) {\n  let idx = transactions.findIndex(t => t.id === id);\n  let trans = transactions[idx];\n  let transactionsCopy = [...transactions];\n\n  if (idx === -1) {\n    throw new Error('Tried to edit unknown transaction id: ' + id);\n  }\n\n  if (trans.is_parent || trans.is_child) {\n    let parentIndex = findParentIndex(transactions, idx);\n    if (parentIndex == null) {\n      console.log('Cannot find parent index');\n      return { diff: { deleted: [], updated: [] } };\n    }\n\n    let split = getSplit(transactions, parentIndex);\n    let grouped = func(groupTransaction(split));\n    let newSplit = ungroupTransaction(grouped);\n\n    let diff;\n    if (newSplit == null) {\n      // If everything was deleted, just delete the parent which will\n      // delete everything\n      diff = { deleted: [{ id: split[0].id }], updated: [] };\n      grouped = { id: split[0].id, _deleted: true };\n      transactionsCopy.splice(parentIndex, split.length);\n    } else {\n      diff = diffItems(split, newSplit);\n      transactionsCopy.splice(parentIndex, split.length, ...newSplit);\n    }\n\n    return { data: transactionsCopy, newTransaction: grouped, diff };\n  } else {\n    let grouped = func(trans);\n    let newTrans = ungroupTransaction(grouped) || [];\n    if (grouped) {\n      grouped.subtransactions = grouped.subtransactions || [];\n    }\n    transactionsCopy.splice(idx, 1, ...newTrans);\n\n    return {\n      data: transactionsCopy,\n      newTransaction: grouped || { id: trans.id, _deleted: true },\n      diff: diffItems([trans], newTrans)\n    };\n  }\n}\n\nexport function addSplitTransaction(transactions, id) {\n  return replaceTransactions(transactions, id, trans => {\n    if (!trans.is_parent) {\n      return trans;\n    }\n    let prevSub = last(trans.subtransactions);\n    trans.subtransactions.push(\n      makeChild(trans, {\n        amount: 0,\n        sort_order: num(prevSub && prevSub.sort_order) - 1\n      })\n    );\n    return trans;\n  });\n}\n\nexport function updateTransaction(transactions, transaction) {\n  return replaceTransactions(transactions, transaction.id, trans => {\n    if (trans.is_parent) {\n      let parent = trans.id === transaction.id ? transaction : trans;\n      let sub = trans.subtransactions.map(t => {\n        // Make sure to update the children to reflect the updated\n        // properties (if the parent updated)\n\n        let child = t;\n        if (trans.id === transaction.id) {\n          child = {\n            ...t,\n            payee: t.payee === trans.payee ? transaction.payee : t.payee\n          };\n        } else if (t.id === transaction.id) {\n          child = transaction;\n        }\n\n        return makeChild(parent, child);\n      });\n\n      return recalculateSplit({ ...parent, subtransactions: sub });\n    } else {\n      return transaction;\n    }\n  });\n}\n\nexport function deleteTransaction(transactions, id) {\n  return replaceTransactions(transactions, id, trans => {\n    if (trans.is_parent) {\n      if (trans.id === id) {\n        return null;\n      } else if (trans.subtransactions.length === 1) {\n        return {\n          ...trans,\n          subtransactions: null,\n          is_parent: false,\n          error: null\n        };\n      } else {\n        let sub = trans.subtransactions.filter(t => t.id !== id);\n        return recalculateSplit({ ...trans, subtransactions: sub });\n      }\n    } else {\n      return null;\n    }\n  });\n}\n\nexport function splitTransaction(transactions, id) {\n  return replaceTransactions(transactions, id, trans => {\n    if (trans.is_parent || trans.is_child) {\n      return trans;\n    }\n\n    return {\n      ...trans,\n      is_parent: true,\n      error: num(trans.amount) === 0 ? null : SplitTransactionError(0, trans),\n      subtransactions: [makeChild(trans, { amount: 0, sort_order: -1 })]\n    };\n  });\n}\n\nexport function realizeTempTransactions(transactions) {\n  let parent = transactions.find(t => !t.is_child);\n  parent = { ...parent, id: uuid.v4Sync() };\n\n  let children = transactions.filter(t => t.is_child);\n  return [\n    parent,\n    ...children.map(child => ({\n      ...child,\n      id: uuid.v4Sync(),\n      parent_id: parent.id\n    }))\n  ];\n}\n","let currencyFormatter = require('currency-formatter');\n\nexport function cleanUUID(uuid) {\n  return uuid.replace(/-/g, '');\n}\n\nexport function last(arr) {\n  return arr[arr.length - 1];\n}\n\nexport function mergeObjects(objects) {\n  return Object.assign.apply(null, [{}, ...objects]);\n}\n\nexport function composeCellChanges(objects) {\n  const merged = {};\n  Object.keys(objects).forEach(key => {\n    if (merged[key]) {\n      merged[key] = { ...merged[key], ...objects[key] };\n    } else {\n      merged[key] = objects[key];\n    }\n  });\n}\n\nexport function flattenArray(arrays) {\n  return Array.prototype.concat.apply([], arrays);\n}\n\nexport function shallowEqual(a, b) {\n  if (a === b) {\n    return true;\n  }\n\n  var numKeysA = 0,\n    numKeysB = 0,\n    key;\n  for (key in b) {\n    numKeysB++;\n    if (!a.hasOwnProperty(key) || a[key] !== b[key]) {\n      return false;\n    }\n  }\n  for (key in a) {\n    numKeysA++;\n  }\n  return numKeysA === numKeysB;\n}\n\nexport function getChangedValues(obj1, obj2) {\n  // Keep the id field because this is mostly used to diff database\n  // objects\n  const diff = obj1.id ? { id: obj1.id } : {};\n  const keys = Object.keys(obj2);\n  let hasChanged = false;\n\n  for (let i = 0; i < keys.length; i++) {\n    let key = keys[i];\n\n    if (obj1[key] !== obj2[key]) {\n      diff[key] = obj2[key];\n      hasChanged = true;\n    }\n  }\n\n  return hasChanged ? diff : null;\n}\n\nexport function hasFieldsChanged(obj1, obj2, fields) {\n  let changed = false;\n  for (var i = 0; i < fields.length; i++) {\n    let field = fields[i];\n    if (obj1[field] !== obj2[field]) {\n      changed = true;\n      break;\n    }\n  }\n  return changed;\n}\n\nexport function applyChanges(changes, items) {\n  items = [...items];\n\n  if (changes.added) {\n    changes.added.forEach(add => {\n      items.push(add);\n    });\n  }\n\n  if (changes.updated) {\n    changes.updated.forEach(({ id, ...fields }) => {\n      const idx = items.findIndex(t => t.id === id);\n      items[idx] = {\n        ...items[idx],\n        ...fields\n      };\n    });\n  }\n\n  if (changes.deleted) {\n    changes.deleted.forEach(t => {\n      const idx = items.findIndex(t2 => t.id === t2.id);\n      if (idx !== -1) {\n        items.splice(idx, 1);\n      }\n    });\n  }\n\n  return items;\n}\n\nexport function partitionByField(data, field) {\n  let res = new Map();\n  for (let i = 0; i < data.length; i++) {\n    let item = data[i];\n    let key = item[field];\n\n    let items = res.get(key) || [];\n    items.push(item);\n\n    res.set(key, items);\n  }\n  return res;\n}\n\nexport function groupBy(data, field, mapper) {\n  let res = new Map();\n  for (let i = 0; i < data.length; i++) {\n    let item = data[i];\n    let key = item[field];\n    let existing = res.get(key) || [];\n    res.set(key, existing.concat([mapper ? mapper(item) : data[i]]));\n  }\n  return res;\n}\n\nexport function groupBySingle(data, field, mapper) {\n  let res = new Map();\n  for (let i = 0; i < data.length; i++) {\n    let item = data[i];\n    let key = item[field];\n    if (res.has(key)) {\n      throw new Error('groupBySingle found conflicting key: ' + key);\n    }\n    res.set(key, mapper ? mapper(item) : data[i]);\n  }\n  return res;\n}\n\n// This should replace the existing `groupById` function, since a\n// `Map` is better, but we can't swap it out because `Map` has a\n// different API and we need to go through and update everywhere that\n// uses it.\nfunction _groupById(data) {\n  let res = new Map();\n  for (let i = 0; i < data.length; i++) {\n    let item = data[i];\n    res.set(item.id, item);\n  }\n  return res;\n}\n\nexport function diffItems(items, newItems) {\n  let grouped = _groupById(items);\n  let newGrouped = _groupById(newItems);\n  let added = [];\n  let updated = [];\n\n  let deleted = items\n    .filter(item => !newGrouped.has(item.id))\n    .map(item => ({ id: item.id }));\n\n  newItems.forEach(newItem => {\n    let item = grouped.get(newItem.id);\n    if (!item) {\n      added.push(newItem);\n    } else {\n      const changes = getChangedValues(item, newItem);\n      if (changes) {\n        updated.push(changes);\n      }\n    }\n  });\n\n  return { added, updated, deleted };\n}\n\nexport function groupById(data) {\n  let res = {};\n  for (let i = 0; i < data.length; i++) {\n    let item = data[i];\n    res[item.id] = item;\n  }\n  return res;\n}\n\nexport function debugMemoFailure(prevProps, nextProps) {\n  let changed = getChangedValues(prevProps, nextProps);\n  if (changed !== null) {\n    console.log(changed);\n  }\n  return changed === null;\n}\n\nexport function setIn(map, keys, item) {\n  for (let i = 0; i < keys.length; i++) {\n    let key = keys[i];\n\n    if (i === keys.length - 1) {\n      map.set(key, item);\n    } else {\n      if (!map.has(key)) {\n        map.set(key, new Map());\n      }\n\n      map = map.get(key);\n    }\n  }\n}\n\nexport function getIn(map, keys) {\n  let item = map;\n  for (let i = 0; i < keys.length; i++) {\n    item = item.get(keys[i]);\n\n    if (item == null) {\n      return item;\n    }\n  }\n  return item;\n}\n\n// Useful for throwing exception from expressions\nexport function throwError(err) {\n  throw err;\n}\n\nexport function fastSetMerge(set1, set2) {\n  let finalSet = new Set(set1);\n  let iter = set2.values();\n  let value = iter.next();\n  while (!value.done) {\n    finalSet.add(value.value);\n    value = iter.next();\n  }\n  return finalSet;\n}\n\nexport function titleFirst(str) {\n  return str[0].toUpperCase() + str.slice(1);\n}\n\nexport let numberFormats = [\n  { value: 'comma-dot', label: '1,000.33' },\n  { value: 'dot-comma', label: '1.000,33' },\n  { value: 'space-comma', label: '1 000,33' }\n];\n\nlet numberFormat = {\n  value: null,\n  formatter: null,\n  regex: null\n};\n\nexport function setNumberFormat(format) {\n  let locale, regex, separator;\n\n  switch (format) {\n    case 'space-comma':\n      locale = 'za-ZA';\n      regex = /[^-0-9,]/g;\n      separator = ',';\n      break;\n    case 'dot-comma':\n      locale = 'de-DE';\n      regex = /[^-0-9,]/g;\n      separator = ',';\n      break;\n    case 'comma-dot':\n    default:\n      locale = 'en-US';\n      regex = /[^-0-9.]/g;\n      separator = '.';\n  }\n\n  numberFormat = {\n    value: format,\n    separator,\n    // This is the keep in line with the Intl API which we might\n    // switch to when it's available on all mobile platforms\n    formatter: {\n      format: number =>\n        currencyFormatter.format(number, { locale, format: '%v' })\n    },\n    regex\n  };\n}\n\nexport function getNumberFormat() {\n  return numberFormat;\n}\n\nsetNumberFormat('1,000.33');\n\nexport function toRelaxedNumber(value) {\n  return integerToAmount(currencyToInteger(value) || 0);\n}\n\nexport function toRelaxedInteger(value) {\n  return stringToInteger(value) || 0;\n}\n\nexport function integerToCurrency(n) {\n  // Awesome\n  return numberFormat.formatter.format(n / 100);\n}\n\nexport function amountToCurrency(n) {\n  return numberFormat.formatter.format(n);\n}\n\nexport function amountToPrettyCurrency(n, code) {\n  return currencyFormatter.format(n, { code });\n}\n\nexport function currencyToAmount(str) {\n  let amount = parseFloat(\n    str.replace(numberFormat.regex, '').replace(numberFormat.separator, '.')\n  );\n  return isNaN(amount) ? null : amount;\n}\n\nexport function currencyToInteger(str) {\n  let amount = currencyToAmount(str);\n  return amount ? amountToInteger(amount) : null;\n}\n\nexport function stringToInteger(str) {\n  let amount = parseInt(str.replace(/[^-0-9.,]/g, ''));\n  if (!isNaN(amount)) {\n    return amount;\n  }\n  return null;\n}\n\nexport function amountToInteger(n) {\n  return Math.round(n * 100);\n}\n\nexport function integerToAmount(n) {\n  return parseFloat((n / 100).toFixed(2));\n}\n\n// This is used when the input format could be anything (from\n// financial files and we don't want to parse based on the user's\n// number format, because the user could be importing from many\n// currencies. We extract out the numbers and just ignore separators.\nexport function looselyParseAmount(amount) {\n  function safeNumber(v) {\n    return isNaN(v) ? null : v;\n  }\n\n  let m = amount.match(/[.,][^.,]*$/);\n  if (!m || m.index === 0) {\n    return safeNumber(parseFloat(amount));\n  }\n\n  let left = amount.slice(0, m.index);\n  let right = amount.slice(m.index + 1);\n\n  return safeNumber(parseFloat(left.replace(/[^0-9-]/g, '') + '.' + right));\n}\n\nexport function semverToNumber(str) {\n  return parseInt(\n    '1' +\n      str\n        .split('.')\n        .map(x => {\n          return ('000' + x.replace(/[^0-9]/g, '')).slice(-3);\n        })\n        .join('')\n  );\n}\n","module.exports = require(\"better-sqlite3\");","module.exports = require(\"crypto\");","module.exports = require(\"fs\");","module.exports = require(\"node-fetch\");","module.exports = require(\"node-libofx\");","module.exports = require(\"path\");","module.exports = require(\"stream\");","module.exports = require(\"string_decoder\");","module.exports = require(\"util\");","module.exports = require(\"zlib\");"],"sourceRoot":""}
\ No newline at end of file
-- 
GitLab