vegan-ipsum
Version:
Generates passages of vegan-themed placeholder text suitable for use in web pages, graphics, and more. Works in the browser, NodeJS, and React Native.
152 lines (146 loc) • 20.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _words = require("../constants/words");
var _util = require("../util");
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
/**
* Represents a range with minimum and maximum bounds.
*/
/**
* Type for a pseudo-random number generator function.
*/
/**
* Type for a seedable random number generator constructor.
*/
/**
* Interface for math utilities with a seedable random number generator.
*/
/**
* Options for configuring the `Generator` class.
*/
/**
* A class for generating random text (words, sentences, paragraphs).
*/
var Generator = /*#__PURE__*/function () {
/**
* Creates an instance of the `Generator` class.
*
* @param {IGeneratorOptions} options - Configuration options for the generator.
* @throws {Error} If the minimum exceeds the maximum in the provided bounds.
*/
function Generator() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$sentencesPerPara = _ref.sentencesPerParagraph,
sentencesPerParagraph = _ref$sentencesPerPara === void 0 ? {
max: 7,
min: 3
} : _ref$sentencesPerPara,
_ref$wordsPerSentence = _ref.wordsPerSentence,
wordsPerSentence = _ref$wordsPerSentence === void 0 ? {
max: 15,
min: 5
} : _ref$wordsPerSentence,
random = _ref.random,
_ref$words = _ref.words,
words = _ref$words === void 0 ? _words.WORDS : _ref$words;
_classCallCheck(this, Generator);
_defineProperty(this, "sentencesPerParagraph", void 0);
_defineProperty(this, "wordsPerSentence", void 0);
_defineProperty(this, "random", void 0);
_defineProperty(this, "words", void 0);
if (sentencesPerParagraph.min > sentencesPerParagraph.max) {
throw new Error("Minimum number of sentences per paragraph (".concat(sentencesPerParagraph.min, ") cannot exceed maximum (").concat(sentencesPerParagraph.max, ")."));
}
if (wordsPerSentence.min > wordsPerSentence.max) {
throw new Error("Minimum number of words per sentence (".concat(wordsPerSentence.min, ") cannot exceed maximum (").concat(wordsPerSentence.max, ")."));
}
this.sentencesPerParagraph = sentencesPerParagraph;
this.words = words;
this.wordsPerSentence = wordsPerSentence;
this.random = random || Math.random;
}
/**
* Generates a random integer between the specified minimum and maximum values.
*
* @param {number} min - The minimum value (inclusive).
* @param {number} max - The maximum value (inclusive).
* @returns {number} A random integer between `min` and `max`.
*/
return _createClass(Generator, [{
key: "generateRandomInteger",
value: function generateRandomInteger(min, max) {
return Math.floor(this.random() * (max - min + 1) + min);
}
/**
* Generates a random sequence of words.
*
* @param {number} [num] - The number of words to generate. If not provided, a random number is used.
* @returns {string} A string of randomly generated words.
*/
}, {
key: "generateRandomWords",
value: function generateRandomWords(num) {
var _this = this;
var _this$wordsPerSentenc = this.wordsPerSentence,
min = _this$wordsPerSentenc.min,
max = _this$wordsPerSentenc.max;
var length = num || this.generateRandomInteger(min, max);
return (0, _util.makeArrayOfLength)(length).reduce(function (accumulator) {
return "".concat(_this.pluckRandomWord(), " ").concat(accumulator);
}, "").trim();
}
/**
* Generates a random sentence.
*
* @param {number} [num] - The number of words in the sentence. If not provided, a random number is used.
* @returns {string} A randomly generated sentence.
*/
}, {
key: "generateRandomSentence",
value: function generateRandomSentence(num) {
return "".concat((0, _util.capitalize)(this.generateRandomWords(num)), ".");
}
/**
* Generates a random paragraph.
*
* @param {number} [num] - The number of sentences in the paragraph. If not provided, a random number is used.
* @returns {string} A randomly generated paragraph.
*/
}, {
key: "generateRandomParagraph",
value: function generateRandomParagraph(num) {
var _this2 = this;
var _this$sentencesPerPar = this.sentencesPerParagraph,
min = _this$sentencesPerPar.min,
max = _this$sentencesPerPar.max;
var length = num || this.generateRandomInteger(min, max);
return (0, _util.makeArrayOfLength)(length).reduce(function (accumulator) {
return "".concat(_this2.generateRandomSentence(), " ").concat(accumulator);
}, "").trim();
}
/**
* Selects a random word from the word list.
*
* @returns {string} A randomly selected word.
*/
}, {
key: "pluckRandomWord",
value: function pluckRandomWord() {
var min = 0;
var max = this.words.length - 1;
var index = this.generateRandomInteger(min, max);
return this.words[index];
}
}]);
}();
var _default = exports["default"] = Generator;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd29yZHMiLCJyZXF1aXJlIiwiX3V0aWwiLCJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJfY2xhc3NDYWxsQ2hlY2siLCJhIiwibiIsIlR5cGVFcnJvciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwiZSIsInIiLCJ0IiwibGVuZ3RoIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsImtleSIsIl9jcmVhdGVDbGFzcyIsIl9kZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiaSIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlN0cmluZyIsIk51bWJlciIsIkdlbmVyYXRvciIsIl9yZWYiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJfcmVmJHNlbnRlbmNlc1BlclBhcmEiLCJzZW50ZW5jZXNQZXJQYXJhZ3JhcGgiLCJtYXgiLCJtaW4iLCJfcmVmJHdvcmRzUGVyU2VudGVuY2UiLCJ3b3Jkc1BlclNlbnRlbmNlIiwicmFuZG9tIiwiX3JlZiR3b3JkcyIsIndvcmRzIiwiV09SRFMiLCJFcnJvciIsImNvbmNhdCIsIk1hdGgiLCJnZW5lcmF0ZVJhbmRvbUludGVnZXIiLCJmbG9vciIsImdlbmVyYXRlUmFuZG9tV29yZHMiLCJudW0iLCJfdGhpcyIsIl90aGlzJHdvcmRzUGVyU2VudGVuYyIsIm1ha2VBcnJheU9mTGVuZ3RoIiwicmVkdWNlIiwiYWNjdW11bGF0b3IiLCJwbHVja1JhbmRvbVdvcmQiLCJ0cmltIiwiZ2VuZXJhdGVSYW5kb21TZW50ZW5jZSIsImNhcGl0YWxpemUiLCJnZW5lcmF0ZVJhbmRvbVBhcmFncmFwaCIsIl90aGlzMiIsIl90aGlzJHNlbnRlbmNlc1BlclBhciIsImluZGV4IiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9nZW5lcmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV09SRFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzL3dvcmRzXCI7XG5pbXBvcnQgeyBjYXBpdGFsaXplLCBtYWtlQXJyYXlPZkxlbmd0aCB9IGZyb20gXCIuLi91dGlsXCI7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHJhbmdlIHdpdGggbWluaW11bSBhbmQgbWF4aW11bSBib3VuZHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUJvdW5kcyB7XG4gIG1pbjogbnVtYmVyO1xuICBtYXg6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUeXBlIGZvciBhIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvciBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgSVBybmcgPSAoKSA9PiBudW1iZXI7XG5cbi8qKlxuICogVHlwZSBmb3IgYSBzZWVkYWJsZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IHR5cGUgSVNlZWRSYW5kb20gPSBuZXcgKHNlZWQ/OiBzdHJpbmcpID0+IElQcm5nO1xuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgbWF0aCB1dGlsaXRpZXMgd2l0aCBhIHNlZWRhYmxlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElNYXRoIHtcbiAgc2VlZHJhbmRvbTogSVNlZWRSYW5kb207XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIGBHZW5lcmF0b3JgIGNsYXNzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElHZW5lcmF0b3JPcHRpb25zIHtcbiAgLyoqXG4gICAqIFJhbmdlIGZvciB0aGUgbnVtYmVyIG9mIHNlbnRlbmNlcyBwZXIgcGFyYWdyYXBoLlxuICAgKi9cbiAgc2VudGVuY2VzUGVyUGFyYWdyYXBoPzogSUJvdW5kcztcblxuICAvKipcbiAgICogUmFuZ2UgZm9yIHRoZSBudW1iZXIgb2Ygd29yZHMgcGVyIHNlbnRlbmNlLlxuICAgKi9cbiAgd29yZHNQZXJTZW50ZW5jZT86IElCb3VuZHM7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBmdW5jdGlvbi5cbiAgICovXG4gIHJhbmRvbT86IElQcm5nO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gd29yZCBsaXN0IHRvIHVzZSBmb3IgZ2VuZXJhdGluZyB0ZXh0LlxuICAgKi9cbiAgd29yZHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBBIGNsYXNzIGZvciBnZW5lcmF0aW5nIHJhbmRvbSB0ZXh0ICh3b3Jkcywgc2VudGVuY2VzLCBwYXJhZ3JhcGhzKS5cbiAqL1xuY2xhc3MgR2VuZXJhdG9yIHtcbiAgcHVibGljIHNlbnRlbmNlc1BlclBhcmFncmFwaDogSUJvdW5kcztcbiAgcHVibGljIHdvcmRzUGVyU2VudGVuY2U6IElCb3VuZHM7XG4gIHB1YmxpYyByYW5kb206IElQcm5nO1xuICBwdWJsaWMgd29yZHM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBgR2VuZXJhdG9yYCBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIHtJR2VuZXJhdG9yT3B0aW9uc30gb3B0aW9ucyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGdlbmVyYXRvci5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBtaW5pbXVtIGV4Y2VlZHMgdGhlIG1heGltdW0gaW4gdGhlIHByb3ZpZGVkIGJvdW5kcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBzZW50ZW5jZXNQZXJQYXJhZ3JhcGggPSB7IG1heDogNywgbWluOiAzIH0sXG4gICAgd29yZHNQZXJTZW50ZW5jZSA9IHsgbWF4OiAxNSwgbWluOiA1IH0sXG4gICAgcmFuZG9tLFxuICAgIHdvcmRzID0gV09SRFMsXG4gIH06IElHZW5lcmF0b3JPcHRpb25zID0ge30pIHtcbiAgICBpZiAoc2VudGVuY2VzUGVyUGFyYWdyYXBoLm1pbiA+IHNlbnRlbmNlc1BlclBhcmFncmFwaC5tYXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1pbmltdW0gbnVtYmVyIG9mIHNlbnRlbmNlcyBwZXIgcGFyYWdyYXBoICgke1xuICAgICAgICAgIHNlbnRlbmNlc1BlclBhcmFncmFwaC5taW5cbiAgICAgICAgfSkgY2Fubm90IGV4Y2VlZCBtYXhpbXVtICgke3NlbnRlbmNlc1BlclBhcmFncmFwaC5tYXh9KS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh3b3Jkc1BlclNlbnRlbmNlLm1pbiA+IHdvcmRzUGVyU2VudGVuY2UubWF4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBNaW5pbXVtIG51bWJlciBvZiB3b3JkcyBwZXIgc2VudGVuY2UgKCR7XG4gICAgICAgICAgd29yZHNQZXJTZW50ZW5jZS5taW5cbiAgICAgICAgfSkgY2Fubm90IGV4Y2VlZCBtYXhpbXVtICgke3dvcmRzUGVyU2VudGVuY2UubWF4fSkuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbnRlbmNlc1BlclBhcmFncmFwaCA9IHNlbnRlbmNlc1BlclBhcmFncmFwaDtcbiAgICB0aGlzLndvcmRzID0gd29yZHM7XG4gICAgdGhpcy53b3Jkc1BlclNlbnRlbmNlID0gd29yZHNQZXJTZW50ZW5jZTtcbiAgICB0aGlzLnJhbmRvbSA9IHJhbmRvbSB8fCBNYXRoLnJhbmRvbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIHRoZSBzcGVjaWZpZWQgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gLSBUaGUgbWluaW11bSB2YWx1ZSAoaW5jbHVzaXZlKS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1heCAtIFRoZSBtYXhpbXVtIHZhbHVlIChpbmNsdXNpdmUpLlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBBIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gYG1pbmAgYW5kIGBtYXhgLlxuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlUmFuZG9tSW50ZWdlcihtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkgKyBtaW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIHJhbmRvbSBzZXF1ZW5jZSBvZiB3b3Jkcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtudW1dIC0gVGhlIG51bWJlciBvZiB3b3JkcyB0byBnZW5lcmF0ZS4gSWYgbm90IHByb3ZpZGVkLCBhIHJhbmRvbSBudW1iZXIgaXMgdXNlZC5cbiAgICogQHJldHVybnMge3N0cmluZ30gQSBzdHJpbmcgb2YgcmFuZG9tbHkgZ2VuZXJhdGVkIHdvcmRzLlxuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlUmFuZG9tV29yZHMobnVtPzogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCB7IG1pbiwgbWF4IH0gPSB0aGlzLndvcmRzUGVyU2VudGVuY2U7XG4gICAgY29uc3QgbGVuZ3RoID0gbnVtIHx8IHRoaXMuZ2VuZXJhdGVSYW5kb21JbnRlZ2VyKG1pbiwgbWF4KTtcbiAgICByZXR1cm4gbWFrZUFycmF5T2ZMZW5ndGgobGVuZ3RoKVxuICAgICAgLnJlZHVjZSgoYWNjdW11bGF0b3I6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnBsdWNrUmFuZG9tV29yZCgpfSAke2FjY3VtdWxhdG9yfWA7XG4gICAgICB9LCBcIlwiKVxuICAgICAgLnRyaW0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSByYW5kb20gc2VudGVuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbnVtXSAtIFRoZSBudW1iZXIgb2Ygd29yZHMgaW4gdGhlIHNlbnRlbmNlLiBJZiBub3QgcHJvdmlkZWQsIGEgcmFuZG9tIG51bWJlciBpcyB1c2VkLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBBIHJhbmRvbWx5IGdlbmVyYXRlZCBzZW50ZW5jZS5cbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZVJhbmRvbVNlbnRlbmNlKG51bT86IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2NhcGl0YWxpemUodGhpcy5nZW5lcmF0ZVJhbmRvbVdvcmRzKG51bSkpfS5gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIHJhbmRvbSBwYXJhZ3JhcGguXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbnVtXSAtIFRoZSBudW1iZXIgb2Ygc2VudGVuY2VzIGluIHRoZSBwYXJhZ3JhcGguIElmIG5vdCBwcm92aWRlZCwgYSByYW5kb20gbnVtYmVyIGlzIHVzZWQuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IEEgcmFuZG9tbHkgZ2VuZXJhdGVkIHBhcmFncmFwaC5cbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZVJhbmRvbVBhcmFncmFwaChudW0/OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHsgbWluLCBtYXggfSA9IHRoaXMuc2VudGVuY2VzUGVyUGFyYWdyYXBoO1xuICAgIGNvbnN0IGxlbmd0aCA9IG51bSB8fCB0aGlzLmdlbmVyYXRlUmFuZG9tSW50ZWdlcihtaW4sIG1heCk7XG4gICAgcmV0dXJuIG1ha2VBcnJheU9mTGVuZ3RoKGxlbmd0aClcbiAgICAgIC5yZWR1Y2UoKGFjY3VtdWxhdG9yOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5nZW5lcmF0ZVJhbmRvbVNlbnRlbmNlKCl9ICR7YWNjdW11bGF0b3J9YDtcbiAgICAgIH0sIFwiXCIpXG4gICAgICAudHJpbSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgYSByYW5kb20gd29yZCBmcm9tIHRoZSB3b3JkIGxpc3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IEEgcmFuZG9tbHkgc2VsZWN0ZWQgd29yZC5cbiAgICovXG4gIHB1YmxpYyBwbHVja1JhbmRvbVdvcmQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBtaW4gPSAwO1xuICAgIGNvbnN0IG1heCA9IHRoaXMud29yZHMubGVuZ3RoIC0gMTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2VuZXJhdGVSYW5kb21JbnRlZ2VyKG1pbiwgbWF4KTtcbiAgICByZXR1cm4gdGhpcy53b3Jkc1tpbmRleF07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR2VuZXJhdG9yO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFELE9BQUE7QUFBd0QsU0FBQUUsUUFBQUMsQ0FBQSxzQ0FBQUQsT0FBQSx3QkFBQUUsTUFBQSx1QkFBQUEsTUFBQSxDQUFBQyxRQUFBLGFBQUFGLENBQUEsa0JBQUFBLENBQUEsZ0JBQUFBLENBQUEsV0FBQUEsQ0FBQSx5QkFBQUMsTUFBQSxJQUFBRCxDQUFBLENBQUFHLFdBQUEsS0FBQUYsTUFBQSxJQUFBRCxDQUFBLEtBQUFDLE1BQUEsQ0FBQUcsU0FBQSxxQkFBQUosQ0FBQSxLQUFBRCxPQUFBLENBQUFDLENBQUE7QUFBQSxTQUFBSyxnQkFBQUMsQ0FBQSxFQUFBQyxDQUFBLFVBQUFELENBQUEsWUFBQUMsQ0FBQSxhQUFBQyxTQUFBO0FBQUEsU0FBQUMsa0JBQUFDLENBQUEsRUFBQUMsQ0FBQSxhQUFBQyxDQUFBLE1BQUFBLENBQUEsR0FBQUQsQ0FBQSxDQUFBRSxNQUFBLEVBQUFELENBQUEsVUFBQVosQ0FBQSxHQUFBVyxDQUFBLENBQUFDLENBQUEsR0FBQVosQ0FBQSxDQUFBYyxVQUFBLEdBQUFkLENBQUEsQ0FBQWMsVUFBQSxRQUFBZCxDQUFBLENBQUFlLFlBQUEsa0JBQUFmLENBQUEsS0FBQUEsQ0FBQSxDQUFBZ0IsUUFBQSxRQUFBQyxNQUFBLENBQUFDLGNBQUEsQ0FBQVIsQ0FBQSxFQUFBUyxjQUFBLENBQUFuQixDQUFB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ZSxDQUFDLENBQUMsT0FBQVgsTUFBQSxDQUFJVSxXQUFXO01BQ2pELENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDTEUsSUFBSSxDQUFDLENBQUM7SUFDWDs7SUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFMRTtJQUFBckMsR0FBQTtJQUFBRyxLQUFBLEVBTUEsU0FBT21DLHNCQUFzQkEsQ0FBQ1IsR0FBWSxFQUFVO01BQ2xELFVBQUFMLE1BQUEsQ0FBVSxJQUFBYyxnQkFBVSxFQUFDLElBQUksQ0FBQ1YsbUJBQW1CLENBQUNDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JEOztJQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxFO0lBQUE5QixHQUFBO0lBQUFHLEtBQUEsRUFNQSxTQUFPcUMsdUJBQXVCQSxDQUFDVixHQUFZLEVBQVU7TUFBQSxJQUFBVyxNQUFBO01BQ25ELElBQUFDLHFCQUFBLEdBQXFCLElBQUksQ0FBQzNCLHFCQUFxQjtRQUF2Q0UsR0FBRyxHQUFBeUIscUJBQUEsQ0FBSHpCLEdBQUc7UUFBRUQsR0FBRyxHQUFBMEIscUJBQUEsQ0FBSDFCLEdBQUc7TUFDaEIsSUFBTXZCLE1BQU0sR0FBR3FDLEdBQUcsSUFBSSxJQUFJLENBQUNILHFCQUFxQixDQUFDVixHQUFHLEVBQUVELEdBQUcsQ0FBQztNQUMxRCxPQUFPLElBQUFpQix1QkFBaUIsRUFBQ3hDLE1BQU0sQ0FBQyxDQUM3QnlDLE1BQU0sQ0FBQyxVQUFDQyxXQUFtQixFQUFhO1FBQ3ZDLFVBQUFWLE1BQUEsQ0FBVWdCLE1BQUksQ0FBQ0gsc0JBQXNCLENBQUMsQ0FBQyxPQUFBYixNQUFBLENBQUlVLFdBQVc7TUFDeEQsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUNMRSxJQUFJLENBQUMsQ0FBQztJQUNYOztJQUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7RUFKRTtJQUFBckMsR0FBQTtJQUFBRyxLQUFBLEVBS0EsU0FBT2lDLGVBQWVBLENBQUEsRUFBVztNQUMvQixJQUFNbkIsR0FBRyxHQUFHLENBQUM7TUFDYixJQUFNRCxHQUFHLEdBQUcsSUFBSSxDQUFDTSxLQUFLLENBQUM3QixNQUFNLEdBQUcsQ0FBQztNQUNqQyxJQUFNa0QsS0FBSyxHQUFHLElBQUksQ0FBQ2hCLHFCQUFxQixDQUFDVixHQUFHLEVBQUVELEdBQUcsQ0FBQztNQUNsRCxPQUFPLElBQUksQ0FBQ00sS0FBSyxDQUFDcUIsS0FBSyxDQUFDO0lBQzFCO0VBQUM7QUFBQTtBQUFBLElBQUFDLFFBQUEsR0FBQUMsT0FBQSxjQUdZbkMsU0FBUyIsImlnbm9yZUxpc3QiOltdfQ==