execd
Version:
Check if method has been called.
405 lines (306 loc) • 36.5 kB
JavaScript
"use strict";
/*;
@submodule-license:
The MIT License (MIT)
@mit-license
Copyright (@c) 2017 Richeve Siodina Bebedor
@email: richeve.bebedor@gmail.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@end-submodule-license
@submodule-configuration:
{
"package": "objo",
"path": "objo/data.module.js",
"file": "data.module.js",
"module": "objo",
"author": "Richeve S. Bebedor",
"eMail": "richeve.bebedor@gmail.com",
"contributors": [
"John Lenon Maghanoy <johnlenonmaghanoy@gmail.com>"
],
"repository": "https://github.com/volkovasystems/objo.git",
"test": "objo-test.js",
"global": false,
"internal": true,
"class": true
}
@end-submodule-configuration
@submodule-documentation:
Data class wrapper.
@end-submodule-documentation
@include:
{
"blon": "blon",
"ehm": "ehm",
"fno": "fno",
"glyo": "glyo",
"ndfo": "ndfo",
"nol": "nol",
"numo": "numo",
"stro": "stro",
"sxty4": "sxty4"
}
@end-include
*/var _stringify = require("babel-runtime/core-js/json/stringify");var _stringify2 = _interopRequireDefault(_stringify);var _from = require("babel-runtime/core-js/array/from");var _from2 = _interopRequireDefault(_from);var _getPrototypeOf = require("babel-runtime/core-js/object/get-prototype-of");var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);var _slicedToArray2 = require("babel-runtime/helpers/slicedToArray");var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);var _keys = require("babel-runtime/core-js/object/keys");var _keys2 = _interopRequireDefault(_keys);var _typeof2 = require("babel-runtime/helpers/typeof");var _typeof3 = _interopRequireDefault(_typeof2);var _hasInstance = require("babel-runtime/core-js/symbol/has-instance");var _hasInstance2 = _interopRequireDefault(_hasInstance);var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck");var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn");var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);var _createClass2 = require("babel-runtime/helpers/createClass");var _createClass3 = _interopRequireDefault(_createClass2);var _inherits2 = require("babel-runtime/helpers/inherits");var _inherits3 = _interopRequireDefault(_inherits2);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
var blon = require("blon");
var fno = require("fno");
var glyo = require("glyo");
var ndfo = require("ndfo");
var nol = require("nol");
var numo = require("numo");
var stro = require("stro");
var sxty4 = require("sxty4");
var Digit = numo.Digit;
var Glyph = glyo.Glyph;
var Null = nol.Null;
var Procedure = fno.Procedure;
var Sequence = stro.Sequence;
var State = blon.State;
var Undefined = ndfo.Undefined;
var Meta = require("ehm")();
var OBJECT_NAME = "Object";
var OBJECT_TYPE = "object";
var OBJECT_DATA_URL_PREFIX = "data:text/object;base64,";
var SERIALIZE_OBJECT_TAG_PATTERN = /^\[object Object(?:\:(.+?))?\]$/;var
Data = function (_Meta) {(0, _inherits3.default)(Data, _Meta);(0, _createClass3.default)(Data, null, [{ key: _hasInstance2.default, value: function value(
instance) {
return (
(typeof instance === "undefined" ? "undefined" : (0, _typeof3.default)(instance)) == OBJECT_TYPE ||
instance instanceof Object ||
typeof instance == "function" && instance.name === OBJECT_NAME ||
Meta.instanceOf(instance, this));
} }, { key: "parser", value: function parser(
data) {
/*;
@meta-configuration:
{
"data:required": "string"
}
@end-meta-configuration
*/
if (data instanceof Array) {
var list = data.reverse();
var index = list.length;
while (index--) {
data[index] = Data.parser(data[index]);
}
return data;
} else if (typeof data == "string") {
return Data.parser(Meta.deserialize(data).valueOf());
} else if (
(typeof data === "undefined" ? "undefined" : (0, _typeof3.default)(data)) == "object" &&
"type" in data && typeof data.type == "string" &&
"name" in data && typeof data.name == "string" &&
"value" in data && typeof data.value == "string" &&
data.format == Meta.DATA_URL_TAG &&
Meta.TAG_PATTERN.test(data.value))
{
switch (data.type) {
case "boolean":
return State.deserialize(data.value).valueOf();
case "function":
return Procedure.deserialize(data.value).valueOf();
case "number":
return Digit.deserialize(data.value).valueOf();
case "object":
if (data.name == Null.name) {
return Null.deserialize(data.value).valueOf();
}
return Data.deserialize(data.value).valueOf();
case "string":
return Sequence.deserialize(data.value).valueOf();
case "symbol":
return Glyph.deserialize(data.value).valueOf();
case "undefined":
return Undefined.deserialize(data.value).valueOf();}
} else if ((typeof data === "undefined" ? "undefined" : (0, _typeof3.default)(data)) == "object") {
var key = (0, _keys2.default)(data).reverse();
var _index = key.length;
while (_index--) {
var property = key[_index];
data[property] = Data.parser(data[property]);
}
return data;
}
throw new Error("cannot parse data, " + error);
} }, { key: "deserialize", value: function deserialize(
data, parser, blueprint) {
/*;
@meta-configuration:
{
"data": "*",
"parser": "function",
"blueprint": "function"
}
@end-meta-configuration
*/var _Meta$__deserializeDe =
Meta.__deserializeDefer__(arguments, this, Data.parser),_Meta$__deserializeDe2 = (0, _slicedToArray3.default)(_Meta$__deserializeDe, 4),data = _Meta$__deserializeDe2[0],parser = _Meta$__deserializeDe2[1],defer = _Meta$__deserializeDe2[2],blueprint = _Meta$__deserializeDe2[3];
var entity = Meta.deserialize(data, parser, blueprint);
if (entity.isCorrupted()) {
entity = Meta.deserialize(data, defer, blueprint);
}
if (entity.isCorrupted()) {
return entity.revert();
}
return entity;
} }, { key: "isCompatible", value: function isCompatible(
tag) {
/*;
@meta-configuration:
{
"tag": "string"
}
@end-meta-configuration
*/
if (typeof tag != "string") {
return false;
}
return SERIALIZE_OBJECT_TAG_PATTERN.test(tag);
} }]);
function Data(entity) {(0, _classCallCheck3.default)(this, Data);
/*;
@meta-configuration:
{
"entity:required": [
"object",
Object
]
}
@end-meta-configuration
*/return (0, _possibleConstructorReturn3.default)(this, (Data.__proto__ || (0, _getPrototypeOf2.default)(Data)).call(this,
entity, OBJECT_NAME));
}(0, _createClass3.default)(Data, [{ key: "check", value: function check(
entity) {
/*;
@meta-configuration:
{
"entity:required": [
"object",
Object
]
}
@end-meta-configuration
*/
return (
(typeof entity === "undefined" ? "undefined" : (0, _typeof3.default)(entity)) == "object" ||
entity instanceof Object);
} }, { key: "__toObject__", value: function __toObject__(
object) {
/*;
@meta-configuration:
"object:required": [
"object",
Object
]
@end-meta-configuration
*/
if (object instanceof Array) {
var array = (0, _from2.default)(object).reverse();
var index = array.length;
while (index--) {
var element = array[index];
var type = typeof element === "undefined" ? "undefined" : (0, _typeof3.default)(element);
switch (type) {
case "boolean":
array[index] = blon(element).toObject();
break;
case "function":
array[index] = fno(element).toObject();
break;
case "number":
array[index] = numo(element).toObject();
break;
case "object":
if (element === null) {
array[index] = nol(element).toObject();
} else {
array[index] = Meta.create(Data, element).toObject();
}
break;
case "string":
array[index] = stro(element).toObject();
break;
case "symbol":
array[index] = glyo(element).toObject();
break;
case "undefined":
array[index] = ndfo(element).toObject();
break;}
}
return array;
} else {
var data = {};
var property = (0, _keys2.default)(object).sort().reverse();
var _index2 = property.length;
while (_index2--) {
var key = property[_index2];
var value = object[key];
var _type = typeof value === "undefined" ? "undefined" : (0, _typeof3.default)(value);
switch (_type) {
case "boolean":
data[key] = blon(value).toObject();
break;
case "function":
data[key] = fno(value).toObject();
break;
case "number":
data[key] = numo(value).toObject();
break;
case "object":
if (value === null) {
data[key] = nol(value).toObject();
} else {
data[key] = Meta.create(Data, value).toObject();
}
break;
case "string":
data[key] = stro(value).toObject();
break;
case "symbol":
data[key] = glyo(value).toObject();
break;
case "undefined":
data[key] = ndfo(value).toObject();
break;}
}
return data;
}
} }, { key: "stringify", value: function stringify()
{
return (0, _stringify2.default)(this, function replacer(key, value) {
return Meta.create(value).serialize();
});
} }, { key: "serialize", value: function serialize(
interpreter) {
/*;
@meta-configuration:
{
"interpreter": "function"
}
@end-meta-configuration
*/
return this.stringify().replace(/\"/g, "");
} }, { key: "isEqual", value: function isEqual(
entity) {
if ((typeof entity === "undefined" ? "undefined" : (0, _typeof3.default)(entity)) != "object") {
return false;
}
return this.serialize() === Data.create(entity).serialize();
} }, { key: Meta.OBJECT, get: function get() {return this.__toObject__(this.valueOf());} }, { key: Meta.BOOLEAN, get: function get() {return this.toNumber() > 0;} }, { key: Meta.STRING, get: function get() {return (0, _stringify2.default)(this);} }, { key: Meta.NUMBER, get: function get() {return (0, _keys2.default)(this.valueOf()).length;} }]);return Data;}(Meta);
module.exports = Data;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRhdGEuc3VwcG9ydC5qcyJdLCJuYW1lcyI6WyJibG9uIiwicmVxdWlyZSIsImZubyIsImdseW8iLCJuZGZvIiwibm9sIiwibnVtbyIsInN0cm8iLCJzeHR5NCIsIkRpZ2l0IiwiR2x5cGgiLCJOdWxsIiwiUHJvY2VkdXJlIiwiU2VxdWVuY2UiLCJTdGF0ZSIsIlVuZGVmaW5lZCIsIk1ldGEiLCJPQkpFQ1RfTkFNRSIsIk9CSkVDVF9UWVBFIiwiT0JKRUNUX0RBVEFfVVJMX1BSRUZJWCIsIlNFUklBTElaRV9PQkpFQ1RfVEFHX1BBVFRFUk4iLCJEYXRhIiwiaW5zdGFuY2UiLCJPYmplY3QiLCJuYW1lIiwiaW5zdGFuY2VPZiIsImRhdGEiLCJBcnJheSIsImxpc3QiLCJyZXZlcnNlIiwiaW5kZXgiLCJsZW5ndGgiLCJwYXJzZXIiLCJkZXNlcmlhbGl6ZSIsInZhbHVlT2YiLCJ0eXBlIiwidmFsdWUiLCJmb3JtYXQiLCJEQVRBX1VSTF9UQUciLCJUQUdfUEFUVEVSTiIsInRlc3QiLCJrZXkiLCJwcm9wZXJ0eSIsIkVycm9yIiwiZXJyb3IiLCJibHVlcHJpbnQiLCJfX2Rlc2VyaWFsaXplRGVmZXJfXyIsImFyZ3VtZW50cyIsImRlZmVyIiwiZW50aXR5IiwiaXNDb3JydXB0ZWQiLCJyZXZlcnQiLCJ0YWciLCJvYmplY3QiLCJhcnJheSIsImVsZW1lbnQiLCJ0b09iamVjdCIsImNyZWF0ZSIsInNvcnQiLCJyZXBsYWNlciIsInNlcmlhbGl6ZSIsImludGVycHJldGVyIiwic3RyaW5naWZ5IiwicmVwbGFjZSIsIk9CSkVDVCIsIl9fdG9PYmplY3RfXyIsIkJPT0xFQU4iLCJ0b051bWJlciIsIlNUUklORyIsIk5VTUJFUiIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlFQSxJQUFNQSxPQUFPQyxRQUFTLE1BQVQs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LEtBQTNCLEVBQWtDLEVBQWxDLENBQVA7QUFDQSxHOztBQUVRZCxRLEVBQVE7QUFDaEIsT0FBSSxRQUFPQSxNQUFQLHVEQUFPQSxNQUFQLE1BQWlCLFFBQXJCLEVBQStCO0FBQzlCLFdBQU8sS0FBUDtBQUNBOztBQUVELFVBQU8sS0FBS1csU0FBTCxPQUFzQnZDLEtBQUtvQyxNQUFMLENBQWFSLE1BQWIsRUFBc0JXLFNBQXRCLEVBQTdCO0FBQ0EsRyxXQXZKSzVDLEtBQUtnRCxNLHNCQUFXLENBQ3JCLE9BQU8sS0FBS0MsWUFBTCxDQUFtQixLQUFLL0IsT0FBTCxFQUFuQixDQUFQLENBQ0EsQyxXQWlIS2xCLEtBQUtrRCxPLHNCQUFZLENBQ3RCLE9BQU8sS0FBS0MsUUFBTCxLQUFtQixDQUExQixDQUNBLEMsV0FFS25ELEtBQUtvRCxNLHNCQUFXLENBQ3JCLE9BQU8seUJBQWdCLElBQWhCLENBQVAsQ0FDQSxDLFdBRUtwRCxLQUFLcUQsTSxzQkFBVyxDQUNyQixPQUFPLG9CQUFhLEtBQUtuQyxPQUFMLEVBQWIsRUFBK0JILE1BQXRDLENBQ0EsQyxtQkF4UmlCZixJOzs7QUFxVG5Cc0QsT0FBT0MsT0FBUCxHQUFpQmxELElBQWpCIiwiZmlsZSI6ImRhdGEuc3VwcG9ydC5qcyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG4vKjtcblx0QHN1Ym1vZHVsZS1saWNlbnNlOlxuXHRcdFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuXHRcdEBtaXQtbGljZW5zZVxuXG5cdFx0Q29weXJpZ2h0IChAYykgMjAxNyBSaWNoZXZlIFNpb2RpbmEgQmViZWRvclxuXHRcdEBlbWFpbDogcmljaGV2ZS5iZWJlZG9yQGdtYWlsLmNvbVxuXG5cdFx0UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuXHRcdG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcblx0XHRpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG5cdFx0dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuXHRcdGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuXHRcdGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblx0XHRUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcblx0XHRjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG5cdFx0VEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuXHRcdElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuXHRcdEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuXHRcdEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcblx0XHRMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuXHRcdE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG5cdFx0U09GVFdBUkUuXG5cdEBlbmQtc3VibW9kdWxlLWxpY2Vuc2VcblxuXHRAc3VibW9kdWxlLWNvbmZpZ3VyYXRpb246XG5cdFx0e1xuXHRcdFx0XCJwYWNrYWdlXCI6IFwib2Jqb1wiLFxuXHRcdFx0XCJwYXRoXCI6IFwib2Jqby9kYXRhLm1vZHVsZS5qc1wiLFxuXHRcdFx0XCJmaWxlXCI6IFwiZGF0YS5tb2R1bGUuanNcIixcblx0XHRcdFwibW9kdWxlXCI6IFwib2Jqb1wiLFxuXHRcdFx0XCJhdXRob3JcIjogXCJSaWNoZXZlIFMuIEJlYmVkb3JcIixcblx0XHRcdFwiZU1haWxcIjogXCJyaWNoZXZlLmJlYmVkb3JAZ21haWwuY29tXCIsXG5cdFx0XHRcImNvbnRyaWJ1dG9yc1wiOiBbXG5cdFx0XHRcdFwiSm9obiBMZW5vbiBNYWdoYW5veSA8am9obmxlbm9ubWFnaGFub3lAZ21haWwuY29tPlwiXG5cdFx0XHRdLFxuXHRcdFx0XCJyZXBvc2l0b3J5XCI6IFwiaHR0cHM6Ly9naXRodWIuY29tL3ZvbGtvdmFzeXN0ZW1zL29iam8uZ2l0XCIsXG5cdFx0XHRcInRlc3RcIjogXCJvYmpvLXRlc3QuanNcIixcblx0XHRcdFwiZ2xvYmFsXCI6IGZhbHNlLFxuXHRcdFx0XCJpbnRlcm5hbFwiOiB0cnVlLFxuXHRcdFx0XCJjbGFzc1wiOiB0cnVlXG5cdFx0fVxuXHRAZW5kLXN1Ym1vZHVsZS1jb25maWd1cmF0aW9uXG5cblx0QHN1Ym1vZHVsZS1kb2N1bWVudGF0aW9uOlxuXHRcdERhdGEgY2xhc3Mgd3JhcHBlci5cblx0QGVuZC1zdWJtb2R1bGUtZG9jdW1lbnRhdGlvblxuXG5cdEBpbmNsdWRlOlxuXHRcdHtcblx0XHRcdFwiYmxvblwiOiBcImJsb25cIixcblx0XHRcdFwiZWhtXCI6IFwiZWhtXCIsXG5cdFx0XHRcImZub1wiOiBcImZub1wiLFxuXHRcdFx0XCJnbHlvXCI6IFwiZ2x5b1wiLFxuXHRcdFx0XCJuZGZvXCI6IFwibmRmb1wiLFxuXHRcdFx0XCJub2xcIjogXCJub2xcIixcblx0XHRcdFwibnVtb1wiOiBcIm51bW9cIixcblx0XHRcdFwic3Ryb1wiOiBcInN0cm9cIixcblx0XHRcdFwic3h0eTRcIjogXCJzeHR5NFwiXG5cdFx0fVxuXHRAZW5kLWluY2x1ZGVcbiovXG5cbmNvbnN0IGJsb24gPSByZXF1aXJlKCBcImJsb25cIiApO1xuY29uc3QgZm5vID0gcmVxdWlyZSggXCJmbm9cIiApO1xuY29uc3QgZ2x5byA9IHJlcXVpcmUoIFwiZ2x5b1wiICk7XG5jb25zdCBuZGZvID0gcmVxdWlyZSggXCJuZGZvXCIgKTtcbmNvbnN0IG5vbCA9IHJlcXVpcmUoIFwibm9sXCIgKTtcbmNvbnN0IG51bW8gPSByZXF1aXJlKCBcIm51bW9cIiApO1xuY29uc3Qgc3RybyA9IHJlcXVpcmUoIFwic3Ryb1wiICk7XG5jb25zdCBzeHR5NCA9IHJlcXVpcmUoIFwic3h0eTRcIiApO1xuXG5jb25zdCBEaWdpdCA9IG51bW8uRGlnaXQ7XG5jb25zdCBHbHlwaCA9IGdseW8uR2x5cGg7XG5jb25zdCBOdWxsID0gbm9sLk51bGw7XG5jb25zdCBQcm9jZWR1cmUgPSBmbm8uUHJvY2VkdXJlO1xuY29uc3QgU2VxdWVuY2UgPSBzdHJvLlNlcXVlbmNlO1xuY29uc3QgU3RhdGUgPSBibG9uLlN0YXRlO1xuY29uc3QgVW5kZWZpbmVkID0gbmRmby5VbmRlZmluZWQ7XG5cbmNvbnN0IE1ldGEgPSByZXF1aXJlKCBcImVobVwiICkoICk7XG5cbmNvbnN0IE9CSkVDVF9OQU1FID0gXCJPYmplY3RcIjtcbmNvbnN0IE9CSkVDVF9UWVBFID0gXCJvYmplY3RcIjtcbmNvbnN0IE9CSkVDVF9EQVRBX1VSTF9QUkVGSVggPSBcImRhdGE6dGV4dC9vYmplY3Q7YmFzZTY0LFwiO1xuXG5jb25zdCBTRVJJQUxJWkVfT0JKRUNUX1RBR19QQVRURVJOID0gL15cXFtvYmplY3QgT2JqZWN0KD86XFw6KC4rPykpP1xcXSQvO1xuXG5jbGFzcyBEYXRhIGV4dGVuZHMgTWV0YSB7XG5cdHN0YXRpYyBbIFN5bWJvbC5oYXNJbnN0YW5jZSBdKCBpbnN0YW5jZSApe1xuXHRcdHJldHVybiAoXG5cdFx0XHR0eXBlb2YgaW5zdGFuY2UgPT0gT0JKRUNUX1RZUEVcblx0XHRcdHx8IGluc3RhbmNlIGluc3RhbmNlb2YgT2JqZWN0XG5cdFx0XHR8fCB0eXBlb2YgaW5zdGFuY2UgPT0gXCJmdW5jdGlvblwiICYmIGluc3RhbmNlLm5hbWUgPT09IE9CSkVDVF9OQU1FXG5cdFx0XHR8fCBNZXRhLmluc3RhbmNlT2YoIGluc3RhbmNlLCB0aGlzIClcblx0XHQpO1xuXHR9XG5cblx0c3RhdGljIHBhcnNlciggZGF0YSApe1xuXHRcdC8qO1xuXHRcdFx0QG1ldGEtY29uZmlndXJhdGlvbjpcblx0XHRcdFx0e1xuXHRcdFx0XHRcdFwiZGF0YTpyZXF1aXJlZFwiOiBcInN0cmluZ1wiXG5cdFx0XHRcdH1cblx0XHRcdEBlbmQtbWV0YS1jb25maWd1cmF0aW9uXG5cdFx0Ki9cblxuXHRcdGlmKCBkYXRhIGluc3RhbmNlb2YgQXJyYXkgKXtcblx0XHRcdGxldCBsaXN0ID0gZGF0YS5yZXZlcnNlKCApO1xuXHRcdFx0bGV0IGluZGV4ID0gbGlzdC5sZW5ndGg7XG5cdFx0XHR3aGlsZSggaW5kZXgtLSApe1xuXHRcdFx0XHRkYXRhWyBpbmRleCBdID0gRGF0YS5wYXJzZXIoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cblx0XHR9ZWxzZSBpZiggdHlwZW9mIGRhdGEgPT0gXCJzdHJpbmdcIiApe1xuXHRcdFx0cmV0dXJuIERhdGEucGFyc2VyKCBNZXRhLmRlc2VyaWFsaXplKCBkYXRhICkudmFsdWVPZiggKSApO1xuXG5cdFx0fWVsc2UgaWYoXG5cdFx0XHR0eXBlb2YgZGF0YSA9PSBcIm9iamVjdFwiXG5cdFx0XHQmJiBcInR5cGVcIiBpbiBkYXRhICYmIHR5cGVvZiBkYXRhLnR5cGUgPT0gXCJzdHJpbmdcIlxuXHRcdFx0JiYgXCJuYW1lXCIgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS5uYW1lID09IFwic3RyaW5nXCJcblx0XHRcdCYmIFwidmFsdWVcIiBpbiBkYXRhICYmIHR5cGVvZiBkYXRhLnZhbHVlID09IFwic3RyaW5nXCJcblx0XHRcdCYmIGRhdGEuZm9ybWF0ID09IE1ldGEuREFUQV9VUkxfVEFHXG5cdFx0XHQmJiBNZXRhLlRBR19QQVRURVJOLnRlc3QoIGRhdGEudmFsdWUgKVxuXHRcdCl7XG5cdFx0XHRzd2l0Y2goIGRhdGEudHlwZSApe1xuXHRcdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0XHRcdHJldHVybiBTdGF0ZS5kZXNlcmlhbGl6ZSggZGF0YS52YWx1ZSApLnZhbHVlT2YoICk7XG5cblx0XHRcdFx0Y2FzZSBcImZ1bmN0aW9uXCI6XG5cdFx0XHRcdFx0cmV0dXJuIFByb2NlZHVyZS5kZXNlcmlhbGl6ZSggZGF0YS52YWx1ZSApLnZhbHVlT2YoICk7XG5cblx0XHRcdFx0Y2FzZSBcIm51bWJlclwiOlxuXHRcdFx0XHRcdHJldHVybiBEaWdpdC5kZXNlcmlhbGl6ZSggZGF0YS52YWx1ZSApLnZhbHVlT2YoICk7XG5cblx0XHRcdFx0Y2FzZSBcIm9iamVjdFwiOlxuXHRcdFx0XHRcdGlmKCBkYXRhLm5hbWUgPT0gTnVsbC5uYW1lICl7XG5cdFx0XHRcdFx0XHRyZXR1cm4gTnVsbC5kZXNlcmlhbGl6ZSggZGF0YS52YWx1ZSApLnZhbHVlT2YoICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIERhdGEuZGVzZXJpYWxpemUoIGRhdGEudmFsdWUgKS52YWx1ZU9mKCApO1xuXG5cdFx0XHRcdGNhc2UgXCJzdHJpbmdcIjpcblx0XHRcdFx0XHRyZXR1cm4gU2VxdWVuY2UuZGVzZXJpYWxpemUoIGRhdGEudmFsdWUgKS52YWx1ZU9mKCApO1xuXG5cdFx0XHRcdGNhc2UgXCJzeW1ib2xcIjpcblx0XHRcdFx0XHRyZXR1cm4gR2x5cGguZGVzZXJpYWxpemUoIGRhdGEudmFsdWUgKS52YWx1ZU9mKCApO1xuXG5cdFx0XHRcdGNhc2UgXCJ1bmRlZmluZWRcIjpcblx0XHRcdFx0XHRyZXR1cm4gVW5kZWZpbmVkLmRlc2VyaWFsaXplKCBkYXRhLnZhbHVlICkudmFsdWVPZiggKTtcblx0XHRcdH1cblxuXHRcdH1lbHNlIGlmKCB0eXBlb2YgZGF0YSA9PSBcIm9iamVjdFwiICl7XG5cdFx0XHRsZXQga2V5ID0gT2JqZWN0LmtleXMoIGRhdGEgKS5yZXZlcnNlKCApO1xuXHRcdFx0bGV0IGluZGV4ID0ga2V5Lmxlbmd0aDtcblx0XHRcdHdoaWxlKCBpbmRleC0tICl7XG5cdFx0XHRcdGxldCBwcm9wZXJ0eSA9IGtleVsgaW5kZXggXTtcblx0XHRcdFx0ZGF0YVsgcHJvcGVydHkgXSA9IERhdGEucGFyc2VyKCBkYXRhWyBwcm9wZXJ0eSBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH1cblxuXHRcdHRocm93IG5ldyBFcnJvciggYGNhbm5vdCBwYXJzZSBkYXRhLCAkeyBlcnJvciB9YCApO1xuXHR9XG5cblx0c3RhdGljIGRlc2VyaWFsaXplKCBkYXRhLCBwYXJzZXIsIGJsdWVwcmludCApe1xuXHRcdC8qO1xuXHRcdFx0QG1ldGEtY29uZmlndXJhdGlvbjpcblx0XHRcdFx0e1xuXHRcdFx0XHRcdFwiZGF0YVwiOiBcIipcIixcblx0XHRcdFx0XHRcInBhcnNlclwiOiBcImZ1bmN0aW9uXCIsXG5cdFx0XHRcdFx0XCJibHVlcHJpbnRcIjogXCJmdW5jdGlvblwiXG5cdFx0XHRcdH1cblx0XHRcdEBlbmQtbWV0YS1jb25maWd1cmF0aW9uXG5cdFx0Ki9cblxuXHRcdHZhciBbIGRhdGEsIHBhcnNlciwgZGVmZXIsIGJsdWVwcmludCBdID0gTWV0YS5fX2Rlc2VyaWFsaXplRGVmZXJfXyggYXJndW1lbnRzLCB0aGlzLCBEYXRhLnBhcnNlciApO1xuXG5cdFx0bGV0IGVudGl0eSA9IE1ldGEuZGVzZXJpYWxpemUoIGRhdGEsIHBhcnNlciwgYmx1ZXByaW50ICk7XG5cblx0XHRpZiggZW50aXR5LmlzQ29ycnVwdGVkKCApICl7XG5cdFx0XHRlbnRpdHkgPSBNZXRhLmRlc2VyaWFsaXplKCBkYXRhLCBkZWZlciwgYmx1ZXByaW50ICk7XG5cdFx0fVxuXG5cdFx0aWYoIGVudGl0eS5pc0NvcnJ1cHRlZCggKSApe1xuXHRcdFx0cmV0dXJuIGVudGl0eS5yZXZlcnQoICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVudGl0eTtcblx0fVxuXG5cdHN0YXRpYyBpc0NvbXBhdGlibGUoIHRhZyApe1xuXHRcdC8qO1xuXHRcdFx0QG1ldGEtY29uZmlndXJhdGlvbjpcblx0XHRcdFx0e1xuXHRcdFx0XHRcdFwidGFnXCI6IFwic3RyaW5nXCJcblx0XHRcdFx0fVxuXHRcdFx0QGVuZC1tZXRhLWNvbmZpZ3VyYXRpb25cblx0XHQqL1xuXG5cdFx0aWYoIHR5cGVvZiB0YWcgIT0gXCJzdHJpbmdcIiApe1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiBTRVJJQUxJWkVfT0JKRUNUX1RBR19QQVRURVJOLnRlc3QoIHRhZyApO1xuXHR9XG5cblx0Y29uc3RydWN0b3IoIGVudGl0eSApe1xuXHRcdC8qO1xuXHRcdFx0QG1ldGEtY29uZmlndXJhdGlvbjpcblx0XHRcdFx0e1xuXHRcdFx0XHRcdFwiZW50aXR5OnJlcXVpcmVkXCI6IFtcblx0XHRcdFx0XHRcdFwib2JqZWN0XCIsXG5cdFx0XHRcdFx0XHRPYmplY3Rcblx0XHRcdFx0XHRdXG5cdFx0XHRcdH1cblx0XHRcdEBlbmQtbWV0YS1jb25maWd1cmF0aW9uXG5cdFx0Ki9cblxuXHRcdHN1cGVyKCBlbnRpdHksIE9CSkVDVF9OQU1FICk7XG5cdH1cblxuXHRjaGVjayggZW50aXR5ICl7XG5cdFx0Lyo7XG5cdFx0XHRAbWV0YS1jb25maWd1cmF0aW9uOlxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCJlbnRpdHk6cmVxdWlyZWRcIjogW1xuXHRcdFx0XHRcdFx0XCJvYmplY3RcIixcblx0XHRcdFx0XHRcdE9iamVjdFxuXHRcdFx0XHRcdF1cblx0XHRcdFx0fVxuXHRcdFx0QGVuZC1tZXRhLWNvbmZpZ3VyYXRpb25cblx0XHQqL1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdHR5cGVvZiBlbnRpdHkgPT0gXCJvYmplY3RcIlxuXHRcdFx0fHwgZW50aXR5IGluc3RhbmNlb2YgT2JqZWN0XG5cdFx0KTtcblx0fVxuXG5cdGdldCBbIE1ldGEuT0JKRUNUIF0oICl7XG5cdFx0cmV0dXJuIHRoaXMuX190b09iamVjdF9fKCB0aGlzLnZhbHVlT2YoICkgKTtcblx0fVxuXG5cdF9fdG9PYmplY3RfXyggb2JqZWN0ICl7XG5cdFx0Lyo7XG5cdFx0XHRAbWV0YS1jb25maWd1cmF0aW9uOlxuXHRcdFx0XHRcIm9iamVjdDpyZXF1aXJlZFwiOiBbXG5cdFx0XHRcdFx0XCJvYmplY3RcIixcblx0XHRcdFx0XHRPYmplY3Rcblx0XHRcdFx0XVxuXHRcdFx0QGVuZC1tZXRhLWNvbmZpZ3VyYXRpb25cblx0XHQqL1xuXG5cdFx0aWYoIG9iamVjdCBpbnN0YW5jZW9mIEFycmF5ICl7XG5cdFx0XHRsZXQgYXJyYXkgPSBBcnJheS5mcm9tKCBvYmplY3QgKS5yZXZlcnNlKCApO1xuXG5cdFx0XHRsZXQgaW5kZXggPSBhcnJheS5sZW5ndGg7XG5cdFx0XHR3aGlsZSggaW5kZXgtLSApe1xuXHRcdFx0XHRsZXQgZWxlbWVudCA9IGFycmF5WyBpbmRleCBdO1xuXG5cdFx0XHRcdGxldCB0eXBlID0gdHlwZW9mIGVsZW1lbnQ7XG5cblx0XHRcdFx0c3dpdGNoKCB0eXBlICl7XG5cdFx0XHRcdFx0Y2FzZSBcImJvb2xlYW5cIjpcblx0XHRcdFx0XHRcdGFycmF5WyBpbmRleCBdID0gYmxvbiggZWxlbWVudCApLnRvT2JqZWN0KCApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIFwiZnVuY3Rpb25cIjpcblx0XHRcdFx0XHRcdGFycmF5WyBpbmRleCBdID0gZm5vKCBlbGVtZW50ICkudG9PYmplY3QoICk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdFx0XHRcdGFycmF5WyBpbmRleCBdID0gbnVtbyggZWxlbWVudCApLnRvT2JqZWN0KCApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIFwib2JqZWN0XCI6XG5cdFx0XHRcdFx0XHRpZiggZWxlbWVudCA9PT0gbnVsbCApe1xuXHRcdFx0XHRcdFx0XHRhcnJheVsgaW5kZXggXSA9IG5vbCggZWxlbWVudCApLnRvT2JqZWN0KCApO1xuXG5cdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0YXJyYXlbIGluZGV4IF0gPSBNZXRhLmNyZWF0ZSggRGF0YSwgZWxlbWVudCApLnRvT2JqZWN0KCApO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgXCJzdHJpbmdcIjpcblx0XHRcdFx0XHRcdGFycmF5WyBpbmRleCBdID0gc3RybyggZWxlbWVudCApLnRvT2JqZWN0KCApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIFwic3ltYm9sXCI6XG5cdFx0XHRcdFx0XHRhcnJheVsgaW5kZXggXSA9IGdseW8oIGVsZW1lbnQgKS50b09iamVjdCggKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBcInVuZGVmaW5lZFwiOlxuXHRcdFx0XHRcdFx0YXJyYXlbIGluZGV4IF0gPSBuZGZvKCBlbGVtZW50ICkudG9PYmplY3QoICk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gYXJyYXk7XG5cblx0XHR9ZWxzZXtcblx0XHRcdGxldCBkYXRhID0geyB9O1xuXHRcdFx0bGV0IHByb3BlcnR5ID0gT2JqZWN0LmtleXMoIG9iamVjdCApLnNvcnQoICkucmV2ZXJzZSggKTtcblxuXHRcdFx0bGV0IGluZGV4ID0gcHJvcGVydHkubGVuZ3RoO1xuXHRcdFx0d2hpbGUoIGluZGV4LS0gKXtcblx0XHRcdFx0bGV0IGtleSA9IHByb3BlcnR5WyBpbmRleCBdO1xuXG5cdFx0XHRcdGxldCB2YWx1ZSA9IG9iamVjdFsga2V5IF07XG5cblx0XHRcdFx0bGV0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XG5cblx0XHRcdFx0c3dpdGNoKCB0eXBlICl7XG5cdFx0XHRcdFx0Y2FzZSBcImJvb2xlYW5cIjpcblx0XHRcdFx0XHRcdGRhdGFbIGtleSBdID0gYmxvbiggdmFsdWUgKS50b09iamVjdCggKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBcImZ1bmN0aW9uXCI6XG5cdFx0XHRcdFx0XHRkYXRhWyBrZXkgXSA9IGZubyggdmFsdWUgKS50b09iamVjdCggKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBcIm51bWJlclwiOlxuXHRcdFx0XHRcdFx0ZGF0YVsga2V5IF0gPSBudW1vKCB2YWx1ZSApLnRvT2JqZWN0KCApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIFwib2JqZWN0XCI6XG5cdFx0XHRcdFx0XHRpZiggdmFsdWUgPT09IG51bGwgKXtcblx0XHRcdFx0XHRcdFx0ZGF0YVsga2V5IF0gPSBub2woIHZhbHVlICkudG9PYmplY3QoICk7XG5cblx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHRkYXRhWyBrZXkgXSA9IE1ldGEuY3JlYXRlKCBEYXRhLCB2YWx1ZSApLnRvT2JqZWN0KCApO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgXCJzdHJpbmdcIjpcblx0XHRcdFx0XHRcdGRhdGFbIGtleSBdID0gc3RybyggdmFsdWUgKS50b09iamVjdCggKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBcInN5bWJvbFwiOlxuXHRcdFx0XHRcdFx0ZGF0YVsga2V5IF0gPSBnbHlvKCB2YWx1ZSApLnRvT2JqZWN0KCApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIFwidW5kZWZpbmVkXCI6XG5cdFx0XHRcdFx0XHRkYXRhWyBrZXkgXSA9IG5kZm8oIHZhbHVlICkudG9PYmplY3QoICk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cdH1cblxuXHRnZXQgWyBNZXRhLkJPT0xFQU4gXSggKXtcblx0XHRyZXR1cm4gdGhpcy50b051bWJlciggKSA+IDA7XG5cdH1cblxuXHRnZXQgWyBNZXRhLlNUUklORyBdKCApe1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSggdGhpcyApO1xuXHR9XG5cblx0Z2V0IFsgTWV0YS5OVU1CRVIgXSggKXtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMoIHRoaXMudmFsdWVPZiggKSApLmxlbmd0aDtcblx0fVxuXG5cdHN0cmluZ2lmeSggKXtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoIHRoaXMsIGZ1bmN0aW9uIHJlcGxhY2VyKCBrZXksIHZhbHVlICl7XG5cdFx0XHRyZXR1cm4gTWV0YS5jcmVhdGUoIHZhbHVlICkuc2VyaWFsaXplKCApO1xuXHRcdH0gKTtcblx0fVxuXG5cdHNlcmlhbGl6ZSggaW50ZXJwcmV0ZXIgKXtcblx0XHQvKjtcblx0XHRcdEBtZXRhLWNvbmZpZ3VyYXRpb246XG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcImludGVycHJldGVyXCI6IFwiZnVuY3Rpb25cIlxuXHRcdFx0XHR9XG5cdFx0XHRAZW5kLW1ldGEtY29uZmlndXJhdGlvblxuXHRcdCovXG5cblx0XHRyZXR1cm4gdGhpcy5zdHJpbmdpZnkoICkucmVwbGFjZSggL1xcXCIvZywgXCJcIiApO1xuXHR9XG5cblx0aXNFcXVhbCggZW50aXR5ICl7XG5cdFx0aWYoIHR5cGVvZiBlbnRpdHkgIT0gXCJvYmplY3RcIiApe1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnNlcmlhbGl6ZSggKSA9PT0gRGF0YS5jcmVhdGUoIGVudGl0eSApLnNlcmlhbGl6ZSggKTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGE7XG4iXX0=
//# sourceMappingURL=data.support.js.map