UNPKG

@gravityforms/libraries

Version:

The Gravity Forms vendor libraries, for JavaScript and React development.

41 lines (33 loc) 5.68 MB
/* * ATTENTION: An "eval-source-map" devtool has been used. * This devtool is neither made for production nor for readable output files. * It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools. * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) * or disable the default devtool with "devtool: false". * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). */ /******/ (function() { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ "../../../node_modules/@react-dnd/invariant/dist/index.js": /*!****************************************************************!*\ !*** ../../../node_modules/@react-dnd/invariant/dist/index.js ***! \****************************************************************/ /***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ invariant: function() { return /* binding */ invariant; }\n/* harmony export */ });\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */ function invariant(condition, format, ...args) {\n if (isProduction()) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n }\n if (!condition) {\n let error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n let argIndex = 0;\n error = new Error(format.replace(/%s/g, function() {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n error.framesToPop = 1 // we don't care about invariant's own frame\n ;\n throw error;\n }\n}\nfunction isProduction() {\n return typeof process !== 'undefined' && \"development\" === 'production';\n}\n\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0ByZWFjdC1kbmQvaW52YXJpYW50L2Rpc3QvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVELFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QyxhQUF1QjtBQUNwRTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL2dyYXZpdHlmb3Jtcy8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQHJlYWN0LWRuZC9pbnZhcmlhbnQvZGlzdC9pbmRleC5qcz8wYTVlIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVXNlIGludmFyaWFudCgpIHRvIGFzc2VydCBzdGF0ZSB3aGljaCB5b3VyIHByb2dyYW0gYXNzdW1lcyB0byBiZSB0cnVlLlxuICpcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXG4gKiB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgYnJva2UgYW5kIHdoYXQgeW91IHdlcmVcbiAqIGV4cGVjdGluZy5cbiAqXG4gKiBUaGUgaW52YXJpYW50IG1lc3NhZ2Ugd2lsbCBiZSBzdHJpcHBlZCBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGludmFyaWFudFxuICogd2lsbCByZW1haW4gdG8gZW5zdXJlIGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLlxuICovIGV4cG9ydCBmdW5jdGlvbiBpbnZhcmlhbnQoY29uZGl0aW9uLCBmb3JtYXQsIC4uLmFyZ3MpIHtcbiAgICBpZiAoaXNQcm9kdWN0aW9uKCkpIHtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKCdNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCAnICsgJ2ZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgYXJnSW5kZXggPSAwO1xuICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgZXJyb3IubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgfVxuICAgICAgICBlcnJvci5mcmFtZXNUb1BvcCA9IDEgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCBpbnZhcmlhbnQncyBvd24gZnJhbWVcbiAgICAgICAgO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG59XG5mdW5jdGlvbiBpc1Byb2R1Y3Rpb24oKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLmVudlsnTk9ERV9FTlYnXSA9PT0gJ3Byb2R1Y3Rpb24nO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@react-dnd/invariant/dist/index.js\n"); /***/ }), /***/ "../../../node_modules/@react-dnd/shallowequal/dist/index.js": /*!*******************************************************************!*\ !*** ../../../node_modules/@react-dnd/shallowequal/dist/index.js ***! \*******************************************************************/ /***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ shallowEqual: function() { return /* binding */ shallowEqual; }\n/* harmony export */ });\nfunction shallowEqual(objA, objB, compare, compareContext) {\n let compareResult = compare ? compare.call(compareContext, objA, objB) : void 0;\n if (compareResult !== void 0) {\n return !!compareResult;\n }\n if (objA === objB) {\n return true;\n }\n if (typeof objA !== 'object' || !objA || typeof objB !== 'object' || !objB) {\n return false;\n }\n const keysA = Object.keys(objA);\n const keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) {\n return false;\n }\n const bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);\n // Test for A's keys different from B.\n for(let idx = 0; idx < keysA.length; idx++){\n const key = keysA[idx];\n if (!bHasOwnProperty(key)) {\n return false;\n }\n const valueA = objA[key];\n const valueB = objB[key];\n compareResult = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n if (compareResult === false || compareResult === void 0 && valueA !== valueB) {\n return false;\n }\n }\n return true;\n}\n\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0ByZWFjdC1kbmQvc2hhbGxvd2VxdWFsL2Rpc3QvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixvQkFBb0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ncmF2aXR5Zm9ybXMvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0ByZWFjdC1kbmQvc2hhbGxvd2VxdWFsL2Rpc3QvaW5kZXguanM/MGU5MCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakEsIG9iakIsIGNvbXBhcmUsIGNvbXBhcmVDb250ZXh0KSB7XG4gICAgbGV0IGNvbXBhcmVSZXN1bHQgPSBjb21wYXJlID8gY29tcGFyZS5jYWxsKGNvbXBhcmVDb250ZXh0LCBvYmpBLCBvYmpCKSA6IHZvaWQgMDtcbiAgICBpZiAoY29tcGFyZVJlc3VsdCAhPT0gdm9pZCAwKSB7XG4gICAgICAgIHJldHVybiAhIWNvbXBhcmVSZXN1bHQ7XG4gICAgfVxuICAgIGlmIChvYmpBID09PSBvYmpCKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iakEgIT09ICdvYmplY3QnIHx8ICFvYmpBIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCAhb2JqQikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XG4gICAgY29uc3Qga2V5c0IgPSBPYmplY3Qua2V5cyhvYmpCKTtcbiAgICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBiSGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmJpbmQob2JqQik7XG4gICAgLy8gVGVzdCBmb3IgQSdzIGtleXMgZGlmZmVyZW50IGZyb20gQi5cbiAgICBmb3IobGV0IGlkeCA9IDA7IGlkeCA8IGtleXNBLmxlbmd0aDsgaWR4Kyspe1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzQVtpZHhdO1xuICAgICAgICBpZiAoIWJIYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVBID0gb2JqQVtrZXldO1xuICAgICAgICBjb25zdCB2YWx1ZUIgPSBvYmpCW2tleV07XG4gICAgICAgIGNvbXBhcmVSZXN1bHQgPSBjb21wYXJlID8gY29tcGFyZS5jYWxsKGNvbXBhcmVDb250ZXh0LCB2YWx1ZUEsIHZhbHVlQiwga2V5KSA6IHZvaWQgMDtcbiAgICAgICAgaWYgKGNvbXBhcmVSZXN1bHQgPT09IGZhbHNlIHx8IGNvbXBhcmVSZXN1bHQgPT09IHZvaWQgMCAmJiB2YWx1ZUEgIT09IHZhbHVlQikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@react-dnd/shallowequal/dist/index.js\n"); /***/ }), /***/ "../../../node_modules/@wojtekmaj/date-utils/dist/cjs/index.js": /*!*********************************************************************!*\ !*** ../../../node_modules/@wojtekmaj/date-utils/dist/cjs/index.js ***! \*********************************************************************/ /***/ (function(__unused_webpack_module, exports) { "use strict"; eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.getISOLocalDateTime = exports.getISOLocalDate = exports.getISOLocalMonth = exports.getHoursMinutesSeconds = exports.getHoursMinutes = exports.getDaysInMonth = exports.getDayRange = exports.getNextDayEnd = exports.getPreviousDayEnd = exports.getDayEnd = exports.getNextDayStart = exports.getPreviousDayStart = exports.getDayStart = exports.getMonthRange = exports.getNextMonthEnd = exports.getPreviousMonthEnd = exports.getMonthEnd = exports.getNextMonthStart = exports.getPreviousMonthStart = exports.getMonthStart = exports.getYearRange = exports.getNextYearEnd = exports.getPreviousYearEnd = exports.getYearEnd = exports.getNextYearStart = exports.getPreviousYearStart = exports.getYearStart = exports.getDecadeRange = exports.getNextDecadeEnd = exports.getPreviousDecadeEnd = exports.getDecadeEnd = exports.getNextDecadeStart = exports.getPreviousDecadeStart = exports.getDecadeStart = exports.getCenturyRange = exports.getNextCenturyEnd = exports.getPreviousCenturyEnd = exports.getCenturyEnd = exports.getNextCenturyStart = exports.getPreviousCenturyStart = exports.getCenturyStart = exports.getMilliseconds = exports.getSeconds = exports.getMinutes = exports.getHours = exports.getDate = exports.getMonthHuman = exports.getMonth = exports.getYear = void 0;\n/**\n * Utils\n */\nfunction makeGetEdgeOfNeighbor(getPeriod, getEdgeOfPeriod, defaultOffset) {\n return function makeGetEdgeOfNeighborInternal(date, offset) {\n if (offset === void 0) { offset = defaultOffset; }\n var previousPeriod = getPeriod(date) + offset;\n return getEdgeOfPeriod(previousPeriod);\n };\n}\nfunction makeGetEnd(getBeginOfNextPeriod) {\n return function makeGetEndInternal(date) {\n return new Date(getBeginOfNextPeriod(date).getTime() - 1);\n };\n}\nfunction makeGetRange(getStart, getEnd) {\n return function makeGetRangeInternal(date) {\n return [getStart(date), getEnd(date)];\n };\n}\n/**\n * Simple getters - getting a property of a given point in time\n */\n/**\n * Gets year from a given date.\n *\n * @param {DateLike} date Date to get year from\n * @returns {number} Year\n */\nfunction getYear(date) {\n if (date instanceof Date) {\n return date.getFullYear();\n }\n if (typeof date === 'number') {\n return date;\n }\n var year = parseInt(date, 10);\n if (typeof date === 'string' && !isNaN(year)) {\n return year;\n }\n throw new Error(\"Failed to get year from date: \".concat(date, \".\"));\n}\nexports.getYear = getYear;\n/**\n * Gets month from a given date.\n *\n * @param {Date} date Date to get month from\n * @returns {number} Month\n */\nfunction getMonth(date) {\n if (date instanceof Date) {\n return date.getMonth();\n }\n throw new Error(\"Failed to get month from date: \".concat(date, \".\"));\n}\nexports.getMonth = getMonth;\n/**\n * Gets human-readable month from a given date.\n *\n * @param {Date} date Date to get human-readable month from\n * @returns {number} Human-readable month\n */\nfunction getMonthHuman(date) {\n if (date instanceof Date) {\n return date.getMonth() + 1;\n }\n throw new Error(\"Failed to get human-readable month from date: \".concat(date, \".\"));\n}\nexports.getMonthHuman = getMonthHuman;\n/**\n * Gets day of the month from a given date.\n *\n * @param {Date} date Date to get day of the month from\n * @returns {number} Day of the month\n */\nfunction getDate(date) {\n if (date instanceof Date) {\n return date.getDate();\n }\n throw new Error(\"Failed to get year from date: \".concat(date, \".\"));\n}\nexports.getDate = getDate;\n/**\n * Gets hours from a given date.\n *\n * @param {Date | string} date Date to get hours from\n * @returns {number} Hours\n */\nfunction getHours(date) {\n if (date instanceof Date) {\n return date.getHours();\n }\n if (typeof date === 'string') {\n var datePieces = date.split(':');\n if (datePieces.length >= 2) {\n var hoursString = datePieces[0];\n if (hoursString) {\n var hours = parseInt(hoursString, 10);\n if (!isNaN(hours)) {\n return hours;\n }\n }\n }\n }\n throw new Error(\"Failed to get hours from date: \".concat(date, \".\"));\n}\nexports.getHours = getHours;\n/**\n * Gets minutes from a given date.\n *\n * @param {Date | string} date Date to get minutes from\n * @returns {number} Minutes\n */\nfunction getMinutes(date) {\n if (date instanceof Date) {\n return date.getMinutes();\n }\n if (typeof date === 'string') {\n var datePieces = date.split(':');\n if (datePieces.length >= 2) {\n var minutesString = datePieces[1] || '0';\n var minutes = parseInt(minutesString, 10);\n if (!isNaN(minutes)) {\n return minutes;\n }\n }\n }\n throw new Error(\"Failed to get minutes from date: \".concat(date, \".\"));\n}\nexports.getMinutes = getMinutes;\n/**\n * Gets seconds from a given date.\n *\n * @param {Date | string} date Date to get seconds from\n * @returns {number} Seconds\n */\nfunction getSeconds(date) {\n if (date instanceof Date) {\n return date.getSeconds();\n }\n if (typeof date === 'string') {\n var datePieces = date.split(':');\n if (datePieces.length >= 2) {\n var secondsWithMillisecondsString = datePieces[2] || '0';\n var seconds = parseInt(secondsWithMillisecondsString, 10);\n if (!isNaN(seconds)) {\n return seconds;\n }\n }\n }\n throw new Error(\"Failed to get seconds from date: \".concat(date, \".\"));\n}\nexports.getSeconds = getSeconds;\n/**\n * Gets milliseconds from a given date.\n *\n * @param {Date | string} date Date to get milliseconds from\n * @returns {number} Milliseconds\n */\nfunction getMilliseconds(date) {\n if (date instanceof Date) {\n return date.getMilliseconds();\n }\n if (typeof date === 'string') {\n var datePieces = date.split(':');\n if (datePieces.length >= 2) {\n var secondsWithMillisecondsString = datePieces[2] || '0';\n var millisecondsString = secondsWithMillisecondsString.split('.')[1] || '0';\n var milliseconds = parseInt(millisecondsString, 10);\n if (!isNaN(milliseconds)) {\n return milliseconds;\n }\n }\n }\n throw new Error(\"Failed to get seconds from date: \".concat(date, \".\"));\n}\nexports.getMilliseconds = getMilliseconds;\n/**\n * Century\n */\n/**\n * Gets century start date from a given date.\n *\n * @param {DateLike} date Date to get century start from\n * @returns {Date} Century start date\n */\nfunction getCenturyStart(date) {\n var year = getYear(date);\n var centuryStartYear = year + ((-year + 1) % 100);\n var centuryStartDate = new Date();\n centuryStartDate.setFullYear(centuryStartYear, 0, 1);\n centuryStartDate.setHours(0, 0, 0, 0);\n return centuryStartDate;\n}\nexports.getCenturyStart = getCenturyStart;\n/**\n * Gets previous century start date from a given date.\n *\n * @param {DateLike} date Date to get previous century start from\n * @returns {Date} Previous century start date\n */\nexports.getPreviousCenturyStart = makeGetEdgeOfNeighbor(getYear, getCenturyStart, -100);\n/**\n * Gets next century start date from a given date.\n *\n * @param {DateLike} date Date to get next century start from\n * @returns {Date} Next century start date\n */\nexports.getNextCenturyStart = makeGetEdgeOfNeighbor(getYear, getCenturyStart, 100);\n/**\n * Gets century end date from a given date.\n *\n * @param {DateLike} date Date to get century end from\n * @returns {Date} Century end date\n */\nexports.getCenturyEnd = makeGetEnd(exports.getNextCenturyStart);\n/**\n * Gets previous century end date from a given date.\n *\n * @param {DateLike} date Date to get previous century end from\n * @returns {Date} Previous century end date\n */\nexports.getPreviousCenturyEnd = makeGetEdgeOfNeighbor(getYear, exports.getCenturyEnd, -100);\n/**\n * Gets next century end date from a given date.\n *\n * @param {DateLike} date Date to get next century end from\n * @returns {Date} Next century end date\n */\nexports.getNextCenturyEnd = makeGetEdgeOfNeighbor(getYear, exports.getCenturyEnd, 100);\n/**\n * Gets century start and end dates from a given date.\n *\n * @param {DateLike} date Date to get century start and end from\n * @returns {[Date, Date]} Century start and end dates\n */\nexports.getCenturyRange = makeGetRange(getCenturyStart, exports.getCenturyEnd);\n/**\n * Decade\n */\n/**\n * Gets decade start date from a given date.\n *\n * @param {DateLike} date Date to get decade start from\n * @returns {Date} Decade start date\n */\nfunction getDecadeStart(date) {\n var year = getYear(date);\n var decadeStartYear = year + ((-year + 1) % 10);\n var decadeStartDate = new Date();\n decadeStartDate.setFullYear(decadeStartYear, 0, 1);\n decadeStartDate.setHours(0, 0, 0, 0);\n return decadeStartDate;\n}\nexports.getDecadeStart = getDecadeStart;\n/**\n * Gets previous decade start date from a given date.\n *\n * @param {DateLike} date Date to get previous decade start from\n * @returns {Date} Previous decade start date\n */\nexports.getPreviousDecadeStart = makeGetEdgeOfNeighbor(getYear, getDecadeStart, -10);\n/**\n * Gets next decade start date from a given date.\n *\n * @param {DateLike} date Date to get next decade start from\n * @returns {Date} Next decade start date\n */\nexports.getNextDecadeStart = makeGetEdgeOfNeighbor(getYear, getDecadeStart, 10);\n/**\n * Gets decade end date from a given date.\n *\n * @param {DateLike} date Date to get decade end from\n * @returns {Date} Decade end date\n */\nexports.getDecadeEnd = makeGetEnd(exports.getNextDecadeStart);\n/**\n * Gets previous decade end date from a given date.\n *\n * @param {DateLike} date Date to get previous decade end from\n * @returns {Date} Previous decade end date\n */\nexports.getPreviousDecadeEnd = makeGetEdgeOfNeighbor(getYear, exports.getDecadeEnd, -10);\n/**\n * Gets next decade end date from a given date.\n *\n * @param {DateLike} date Date to get next decade end from\n * @returns {Date} Next decade end date\n */\nexports.getNextDecadeEnd = makeGetEdgeOfNeighbor(getYear, exports.getDecadeEnd, 10);\n/**\n * Gets decade start and end dates from a given date.\n *\n * @param {DateLike} date Date to get decade start and end from\n * @returns {[Date, Date]} Decade start and end dates\n */\nexports.getDecadeRange = makeGetRange(getDecadeStart, exports.getDecadeEnd);\n/**\n * Year\n */\n/**\n * Gets year start date from a given date.\n *\n * @param {DateLike} date Date to get year start from\n * @returns {Date} Year start date\n */\nfunction getYearStart(date) {\n var year = getYear(date);\n var yearStartDate = new Date();\n yearStartDate.setFullYear(year, 0, 1);\n yearStartDate.setHours(0, 0, 0, 0);\n return yearStartDate;\n}\nexports.getYearStart = getYearStart;\n/**\n * Gets previous year start date from a given date.\n *\n * @param {DateLike} date Date to get previous year start from\n * @returns {Date} Previous year start date\n */\nexports.getPreviousYearStart = makeGetEdgeOfNeighbor(getYear, getYearStart, -1);\n/**\n * Gets next year start date from a given date.\n *\n * @param {DateLike} date Date to get next year start from\n * @returns {Date} Next year start date\n */\nexports.getNextYearStart = makeGetEdgeOfNeighbor(getYear, getYearStart, 1);\n/**\n * Gets year end date from a given date.\n *\n * @param {DateLike} date Date to get year end from\n * @returns {Date} Year end date\n */\nexports.getYearEnd = makeGetEnd(exports.getNextYearStart);\n/**\n * Gets previous year end date from a given date.\n *\n * @param {DateLike} date Date to get previous year end from\n * @returns {Date} Previous year end date\n */\nexports.getPreviousYearEnd = makeGetEdgeOfNeighbor(getYear, exports.getYearEnd, -1);\n/**\n * Gets next year end date from a given date.\n *\n * @param {DateLike} date Date to get next year end from\n * @returns {Date} Next year end date\n */\nexports.getNextYearEnd = makeGetEdgeOfNeighbor(getYear, exports.getYearEnd, 1);\n/**\n * Gets year start and end dates from a given date.\n *\n * @param {DateLike} date Date to get year start and end from\n * @returns {[Date, Date]} Year start and end dates\n */\nexports.getYearRange = makeGetRange(getYearStart, exports.getYearEnd);\n/**\n * Month\n */\nfunction makeGetEdgeOfNeighborMonth(getEdgeOfPeriod, defaultOffset) {\n return function makeGetEdgeOfNeighborMonthInternal(date, offset) {\n if (offset === void 0) { offset = defaultOffset; }\n var year = getYear(date);\n var month = getMonth(date) + offset;\n var previousPeriod = new Date();\n previousPeriod.setFullYear(year, month, 1);\n previousPeriod.setHours(0, 0, 0, 0);\n return getEdgeOfPeriod(previousPeriod);\n };\n}\n/**\n * Gets month start date from a given date.\n *\n * @param {DateLike} date Date to get month start from\n * @returns {Date} Month start date\n */\nfunction getMonthStart(date) {\n var year = getYear(date);\n var month = getMonth(date);\n var monthStartDate = new Date();\n monthStartDate.setFullYear(year, month, 1);\n monthStartDate.setHours(0, 0, 0, 0);\n return monthStartDate;\n}\nexports.getMonthStart = getMonthStart;\n/**\n * Gets previous month start date from a given date.\n *\n * @param {DateLike} date Date to get previous month start from\n * @returns {Date} Previous month start date\n */\nexports.getPreviousMonthStart = makeGetEdgeOfNeighborMonth(getMonthStart, -1);\n/**\n * Gets next month start date from a given date.\n *\n * @param {DateLike} date Date to get next month start from\n * @returns {Date} Next month start date\n */\nexports.getNextMonthStart = makeGetEdgeOfNeighborMonth(getMonthStart, 1);\n/**\n * Gets month end date from a given date.\n *\n * @param {DateLike} date Date to get month end from\n * @returns {Date} Month end date\n */\nexports.getMonthEnd = makeGetEnd(exports.getNextMonthStart);\n/**\n * Gets previous month end date from a given date.\n *\n * @param {DateLike} date Date to get previous month end from\n * @returns {Date} Previous month end date\n */\nexports.getPreviousMonthEnd = makeGetEdgeOfNeighborMonth(exports.getMonthEnd, -1);\n/**\n * Gets next month end date from a given date.\n *\n * @param {DateLike} date Date to get next month end from\n * @returns {Date} Next month end date\n */\nexports.getNextMonthEnd = makeGetEdgeOfNeighborMonth(exports.getMonthEnd, 1);\n/**\n * Gets month start and end dates from a given date.\n *\n * @param {DateLike} date Date to get month start and end from\n * @returns {[Date, Date]} Month start and end dates\n */\nexports.getMonthRange = makeGetRange(getMonthStart, exports.getMonthEnd);\n/**\n * Day\n */\nfunction makeGetEdgeOfNeighborDay(getEdgeOfPeriod, defaultOffset) {\n return function makeGetEdgeOfNeighborDayInternal(date, offset) {\n if (offset === void 0) { offset = defaultOffset; }\n var year = getYear(date);\n var month = getMonth(date);\n var day = getDate(date) + offset;\n var previousPeriod = new Date();\n previousPeriod.setFullYear(year, month, day);\n previousPeriod.setHours(0, 0, 0, 0);\n return getEdgeOfPeriod(previousPeriod);\n };\n}\n/**\n * Gets day start date from a given date.\n *\n * @param {DateLike} date Date to get day start from\n * @returns {Date} Day start date\n */\nfunction getDayStart(date) {\n var year = getYear(date);\n var month = getMonth(date);\n var day = getDate(date);\n var dayStartDate = new Date();\n dayStartDate.setFullYear(year, month, day);\n dayStartDate.setHours(0, 0, 0, 0);\n return dayStartDate;\n}\nexports.getDayStart = getDayStart;\n/**\n * Gets previous day start date from a given date.\n *\n * @param {DateLike} date Date to get previous day start from\n * @returns {Date} Previous day start date\n */\nexports.getPreviousDayStart = makeGetEdgeOfNeighborDay(getDayStart, -1);\n/**\n * Gets next day start date from a given date.\n *\n * @param {DateLike} date Date to get next day start from\n * @returns {Date} Next day start date\n */\nexports.getNextDayStart = makeGetEdgeOfNeighborDay(getDayStart, 1);\n/**\n * Gets day end date from a given date.\n *\n * @param {DateLike} date Date to get day end from\n * @returns {Date} Day end date\n */\nexports.getDayEnd = makeGetEnd(exports.getNextDayStart);\n/**\n * Gets previous day end date from a given date.\n *\n * @param {DateLike} date Date to get previous day end from\n * @returns {Date} Previous day end date\n */\nexports.getPreviousDayEnd = makeGetEdgeOfNeighborDay(exports.getDayEnd, -1);\n/**\n * Gets next day end date from a given date.\n *\n * @param {DateLike} date Date to get next day end from\n * @returns {Date} Next day end date\n */\nexports.getNextDayEnd = makeGetEdgeOfNeighborDay(exports.getDayEnd, 1);\n/**\n * Gets day start and end dates from a given date.\n *\n * @param {DateLike} date Date to get day start and end from\n * @returns {[Date, Date]} Day start and end dates\n */\nexports.getDayRange = makeGetRange(getDayStart, exports.getDayEnd);\n/**\n * Other\n */\n/**\n * Returns a number of days in a month of a given date.\n *\n * @param {Date} date Date\n * @returns {number} Number of days in a month\n */\nfunction getDaysInMonth(date) {\n return getDate((0, exports.getMonthEnd)(date));\n}\nexports.getDaysInMonth = getDaysInMonth;\nfunction padStart(num, val) {\n if (val === void 0) { val = 2; }\n var numStr = \"\".concat(num);\n if (numStr.length >= val) {\n return num;\n }\n return \"0000\".concat(numStr).slice(-val);\n}\n/**\n * Returns local hours and minutes (hh:mm).\n *\n * @param {Date | string} date Date to get hours and minutes from\n * @returns {string} Local hours and minutes\n */\nfunction getHoursMinutes(date) {\n var hours = padStart(getHours(date));\n var minutes = padStart(getMinutes(date));\n return \"\".concat(hours, \":\").concat(minutes);\n}\nexports.getHoursMinutes = getHoursMinutes;\n/**\n * Returns local hours, minutes and seconds (hh:mm:ss).\n *\n * @param {Date | string} date Date to get hours, minutes and seconds from\n * @returns {string} Local hours, minutes and seconds\n */\nfunction getHoursMinutesSeconds(date) {\n var hours = padStart(getHours(date));\n var minutes = padStart(getMinutes(date));\n var seconds = padStart(getSeconds(date));\n return \"\".concat(hours, \":\").concat(minutes, \":\").concat(seconds);\n}\nexports.getHoursMinutesSeconds = getHoursMinutesSeconds;\n/**\n * Returns local month in ISO-like format (YYYY-MM).\n *\n * @param {Date} date Date to get month in ISO-like format from\n * @returns {string} Local month in ISO-like format\n */\nfunction getISOLocalMonth(date) {\n var year = padStart(getYear(date), 4);\n var month = padStart(getMonthHuman(date));\n return \"\".concat(year, \"-\").concat(month);\n}\nexports.getISOLocalMonth = getISOLocalMonth;\n/**\n * Returns local date in ISO-like format (YYYY-MM-DD).\n *\n * @param {Date} date Date to get date in ISO-like format from\n * @returns {string} Local date in ISO-like format\n */\nfunction getISOLocalDate(date) {\n var year = padStart(getYear(date), 4);\n var month = padStart(getMonthHuman(date));\n var day = padStart(getDate(date));\n return \"\".concat(year, \"-\").concat(month, \"-\").concat(day);\n}\nexports.getISOLocalDate = getISOLocalDate;\n/**\n * Returns local date & time in ISO-like format (YYYY-MM-DDThh:mm:ss).\n *\n * @param {Date} date Date to get date & time in ISO-like format from\n * @returns {string} Local date & time in ISO-like format\n */\nfunction getISOLocalDateTime(date) {\n return \"\".concat(getISOLocalDate(date), \"T\").concat(getHoursMinutesSeconds(date));\n}\nexports.getISOLocalDateTime = getISOLocalDateTime;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B3b2p0ZWttYWovZGF0ZS11dGlscy9kaXN0L2Nqcy9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCwyQkFBMkIsR0FBRyx1QkFBdUIsR0FBRyx3QkFBd0IsR0FBRyw4QkFBOEIsR0FBRyx1QkFBdUIsR0FBRyxzQkFBc0IsR0FBRyxtQkFBbUIsR0FBRyxxQkFBcUIsR0FBRyx5QkFBeUIsR0FBRyxpQkFBaUIsR0FBRyx1QkFBdUIsR0FBRywyQkFBMkIsR0FBRyxtQkFBbUIsR0FBRyxxQkFBcUIsR0FBRyx1QkFBdUIsR0FBRywyQkFBMkIsR0FBRyxtQkFBbUIsR0FBRyx5QkFBeUIsR0FBRyw2QkFBNkIsR0FBRyxxQkFBcUIsR0FBRyxvQkFBb0IsR0FBRyxzQkFBc0IsR0FBRywwQkFBMEIsR0FBRyxrQkFBa0IsR0FBRyx3QkFBd0IsR0FBRyw0QkFBNEIsR0FBRyxvQkFBb0IsR0FBRyxzQkFBc0IsR0FBRyx3QkFBd0IsR0FBRyw0QkFBNEIsR0FBRyxvQkFBb0IsR0FBRywwQkFBMEIsR0FBRyw4QkFBOEIsR0FBRyxzQkFBc0IsR0FBRyx1QkFBdUIsR0FBRyx5QkFBeUIsR0FBRyw2QkFBNkIsR0FBRyxxQkFBcUIsR0FBRywyQkFBMkIsR0FBRywrQkFBK0IsR0FBRyx1QkFBdUIsR0FBRyx1QkFBdUIsR0FBRyxrQkFBa0IsR0FBRyxrQkFBa0IsR0FBRyxnQkFBZ0IsR0FBRyxlQUFlLEdBQUcscUJBQXFCLEdBQUcsZ0JBQWdCLEdBQUcsZUFBZTtBQUM1dUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7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QUFjO0FBQzNCO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxXQUFXLE1BQU07QUFDakIsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBTTtBQUNqQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ncmF2aXR5Zm9ybXMvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B3b2p0ZWttYWovZGF0ZS11dGlscy9kaXN0L2Nqcy9pbmRleC5qcz82ZGI3Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRJU09Mb2NhbERhdGVUaW1lID0gZXhwb3J0cy5nZXRJU09Mb2NhbERhdGUgPSBleHBvcnRzLmdldElTT0xvY2FsTW9udGggPSBleHBvcnRzLmdldEhvdXJzTWludXRlc1NlY29uZHMgPSBleHBvcnRzLmdldEhvdXJzTWludXRlcyA9IGV4cG9ydHMuZ2V0RGF5c0luTW9udGggPSBleHBvcnRzLmdldERheVJhbmdlID0gZXhwb3J0cy5nZXROZXh0RGF5RW5kID0gZXhwb3J0cy5nZXRQcmV2aW91c0RheUVuZCA9IGV4cG9ydHMuZ2V0RGF5RW5kID0gZXhwb3J0cy5nZXROZXh0RGF5U3RhcnQgPSBleHBvcnRzLmdldFByZXZpb3VzRGF5U3RhcnQgPSBleHBvcnRzLmdldERheVN0YXJ0ID0gZXhwb3J0cy5nZXRNb250aFJhbmdlID0gZXhwb3J0cy5nZXROZXh0TW9udGhFbmQgPSBleHBvcnRzLmdldFByZXZpb3VzTW9udGhFbmQgPSBleHBvcnRzLmdldE1vbnRoRW5kID0gZXhwb3J0cy5nZXROZXh0TW9udGhTdGFydCA9IGV4cG9ydHMuZ2V0UHJldmlvdXNNb250aFN0YXJ0ID0gZXhwb3J0cy5nZXRNb250aFN0YXJ0ID0gZXhwb3J0cy5nZXRZZWFyUmFuZ2UgPSBleHBvcnRzLmdldE5leHRZZWFyRW5kID0gZXhwb3J0cy5nZXRQcmV2aW91c1llYXJFbmQgPSBleHBvcnRzLmdldFllYXJFbmQgPSBleHBvcnRzLmdldE5leHRZZWFyU3RhcnQgPSBleHBvcnRzLmdldFByZXZpb3VzWWVhclN0YXJ0ID0gZXhwb3J0cy5nZXRZZWFyU3RhcnQgPSBleHBvcnRzLmdldERlY2FkZVJhbmdlID0gZXhwb3J0cy5nZXROZXh0RGVjYWRlRW5kID0gZXhwb3J0cy5nZXRQcmV2aW91c0RlY2FkZUVuZCA9IGV4cG9ydHMuZ2V0RGVjYWRlRW5kID0gZXhwb3J0cy5nZXROZXh0RGVjYWRlU3RhcnQgPSBleHBvcnRzLmdldFByZXZpb3VzRGVjYWRlU3RhcnQgPSBleHBvcnRzLmdldERlY2FkZVN0YXJ0ID0gZXhwb3J0cy5nZXRDZW50dXJ5UmFuZ2UgPSBleHBvcnRzLmdldE5leHRDZW50dXJ5RW5kID0gZXhwb3J0cy5nZXRQcmV2aW91c0NlbnR1cnlFbmQgPSBleHBvcnRzLmdldENlbnR1cnlFbmQgPSBleHBvcnRzLmdldE5leHRDZW50dXJ5U3RhcnQgPSBleHBvcnRzLmdldFByZXZpb3VzQ2VudHVyeVN0YXJ0ID0gZXhwb3J0cy5nZXRDZW50dXJ5U3RhcnQgPSBleHBvcnRzLmdldE1pbGxpc2Vjb25kcyA9IGV4cG9ydHMuZ2V0U2Vjb25kcyA9IGV4cG9ydHMuZ2V0TWludXRlcyA9IGV4cG9ydHMuZ2V0SG91cnMgPSBleHBvcnRzLmdldERhdGUgPSBleHBvcnRzLmdldE1vbnRoSHVtYW4gPSBleHBvcnRzLmdldE1vbnRoID0gZXhwb3J0cy5nZXRZZWFyID0gdm9pZCAwO1xuLyoqXG4gKiBVdGlsc1xuICovXG5mdW5jdGlvbiBtYWtlR2V0RWRnZU9mTmVpZ2hib3IoZ2V0UGVyaW9kLCBnZXRFZGdlT2ZQZXJpb2QsIGRlZmF1bHRPZmZzZXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbWFrZUdldEVkZ2VPZk5laWdoYm9ySW50ZXJuYWwoZGF0ZSwgb2Zmc2V0KSB7XG4gICAgICAgIGlmIChvZmZzZXQgPT09IHZvaWQgMCkgeyBvZmZzZXQgPSBkZWZhdWx0T2Zmc2V0OyB9XG4gICAgICAgIHZhciBwcmV2aW91c1BlcmlvZCA9IGdldFBlcmlvZChkYXRlKSArIG9mZnNldDtcbiAgICAgICAgcmV0dXJuIGdldEVkZ2VPZlBlcmlvZChwcmV2aW91c1BlcmlvZCk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIG1ha2VHZXRFbmQoZ2V0QmVnaW5PZk5leHRQZXJpb2QpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbWFrZUdldEVuZEludGVybmFsKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGdldEJlZ2luT2ZOZXh0UGVyaW9kKGRhdGUpLmdldFRpbWUoKSAtIDEpO1xuICAgIH07XG59XG5mdW5jdGlvbiBtYWtlR2V0UmFuZ2UoZ2V0U3RhcnQsIGdldEVuZCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBtYWtlR2V0UmFuZ2VJbnRlcm5hbChkYXRlKSB7XG4gICAgICAgIHJldHVybiBbZ2V0U3RhcnQoZGF0ZSksIGdldEVuZChkYXRlKV07XG4gICAgfTtcbn1cbi8qKlxuICogU2ltcGxlIGdldHRlcnMgLSBnZXR0aW5nIGEgcHJvcGVydHkgb2YgYSBnaXZlbiBwb2ludCBpbiB0aW1lXG4gKi9cbi8qKlxuICogR2V0cyB5ZWFyIGZyb20gYSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZUxpa2V9IGRhdGUgRGF0ZSB0byBnZXQgeWVhciBmcm9tXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBZZWFyXG4gKi9cbmZ1bmN0aW9uIGdldFllYXIoZGF0ZSkge1xuICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cbiAgICB2YXIgeWVhciA9IHBhcnNlSW50KGRhdGUsIDEwKTtcbiAgICBpZiAodHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnICYmICFpc05hTih5ZWFyKSkge1xuICAgICAgICByZXR1cm4geWVhcjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGdldCB5ZWFyIGZyb20gZGF0ZTogXCIuY29uY2F0KGRhdGUsIFwiLlwiKSk7XG59XG5leHBvcnRzLmdldFllYXIgPSBnZXRZZWFyO1xuLyoqXG4gKiBHZXRzIG1vbnRoIGZyb20gYSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSBEYXRlIHRvIGdldCBtb250aCBmcm9tXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBNb250aFxuICovXG5mdW5jdGlvbiBnZXRNb250aChkYXRlKSB7XG4gICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiBkYXRlLmdldE1vbnRoKCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgbW9udGggZnJvbSBkYXRlOiBcIi5jb25jYXQoZGF0ZSwgXCIuXCIpKTtcbn1cbmV4cG9ydHMuZ2V0TW9udGggPSBnZXRNb250aDtcbi8qKlxuICogR2V0cyBodW1hbi1yZWFkYWJsZSBtb250aCBmcm9tIGEgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV9IGRhdGUgRGF0ZSB0byBnZXQgaHVtYW4tcmVhZGFibGUgbW9udGggZnJvbVxuICogQHJldHVybnMge251bWJlcn0gSHVtYW4tcmVhZGFibGUgbW9udGhcbiAqL1xuZnVuY3Rpb24gZ2V0TW9udGhIdW1hbihkYXRlKSB7XG4gICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiBkYXRlLmdldE1vbnRoKCkgKyAxO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IGh1bWFuLXJlYWRhYmxlIG1vbnRoIGZyb20gZGF0ZTogXCIuY29uY2F0KGRhdGUsIFwiLlwiKSk7XG59XG5leHBvcnRzLmdldE1vbnRoSHVtYW4gPSBnZXRNb250aEh1bWFuO1xuLyoqXG4gKiBHZXRzIGRheSBvZiB0aGUgbW9udGggZnJvbSBhIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfSBkYXRlIERhdGUgdG8gZ2V0IGRheSBvZiB0aGUgbW9udGggZnJvbVxuICogQHJldHVybnMge251bWJlcn0gRGF5IG9mIHRoZSBtb250aFxuICovXG5mdW5jdGlvbiBnZXREYXRlKGRhdGUpIHtcbiAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGUuZ2V0RGF0ZSgpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IHllYXIgZnJvbSBkYXRlOiBcIi5jb25jYXQoZGF0ZSwgXCIuXCIpKTtcbn1cbmV4cG9ydHMuZ2V0RGF0ZSA9IGdldERhdGU7XG4vKipcbiAqIEdldHMgaG91cnMgZnJvbSBhIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlIHwgc3RyaW5nfSBkYXRlIERhdGUgdG8gZ2V0IGhvdXJzIGZyb21cbiAqIEByZXR1cm5zIHtudW1iZXJ9IEhvdXJzXG4gKi9cbmZ1bmN0aW9uIGdldEhvdXJzKGRhdGUpIHtcbiAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgZGF0ZVBpZWNlcyA9IGRhdGUuc3BsaXQoJzonKTtcbiAgICAgICAgaWYgKGRhdGVQaWVjZXMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgIHZhciBob3Vyc1N0cmluZyA9IGRhdGVQaWVjZXNbMF07XG4gICAgICAgICAgICBpZiAoaG91cnNTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgaG91cnMgPSBwYXJzZUludChob3Vyc1N0cmluZywgMTApO1xuICAgICAgICAgICAgICAgIGlmICghaXNOYU4oaG91cnMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBob3VycztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGdldCBob3VycyBmcm9tIGRhdGU6IFwiLmNvbmNhdChkYXRlLCBcIi5cIikpO1xufVxuZXhwb3J0cy5nZXRIb3VycyA9IGdldEhvdXJzO1xuLyoqXG4gKiBHZXRzIG1pbnV0ZXMgZnJvbSBhIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlIHwgc3RyaW5nfSBkYXRlIERhdGUgdG8gZ2V0IG1pbnV0ZXMgZnJvbVxuICogQHJldHVybnMge251bWJlcn0gTWludXRlc1xuICovXG5mdW5jdGlvbiBnZXRNaW51dGVzKGRhdGUpIHtcbiAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhciBkYXRlUGllY2VzID0gZGF0ZS5zcGxpdCgnOicpO1xuICAgICAgICBpZiAoZGF0ZVBpZWNlcy5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgdmFyIG1pbnV0ZXNTdHJpbmcgPSBkYXRlUGllY2VzWzFdIHx8ICcwJztcbiAgICAgICAgICAgIHZhciBtaW51dGVzID0gcGFyc2VJbnQobWludXRlc1N0cmluZywgMTApO1xuICAgICAgICAgICAgaWYgKCFpc05hTihtaW51dGVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtaW51dGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgbWludXRlcyBmcm9tIGRhdGU6IFwiLmNvbmNhdChkYXRlLCBcIi5cIikpO1xufVxuZXhwb3J0cy5nZXRNaW51dGVzID0gZ2V0TWludXRlcztcbi8qKlxuICogR2V0cyBzZWNvbmRzIGZyb20gYSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZSB8IHN0cmluZ30gZGF0ZSBEYXRlIHRvIGdldCBzZWNvbmRzIGZyb21cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFNlY29uZHNcbiAqL1xuZnVuY3Rpb24gZ2V0U2Vjb25kcyhkYXRlKSB7XG4gICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiBkYXRlLmdldFNlY29uZHMoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgZGF0ZVBpZWNlcyA9IGRhdGUuc3BsaXQoJzonKTtcbiAgICAgICAgaWYgKGRhdGVQaWVjZXMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgIHZhciBzZWNvbmRzV2l0aE1pbGxpc2Vjb25kc1N0cmluZyA9IGRhdGVQaWVjZXNbMl0gfHwgJzAnO1xuICAgICAgICAgICAgdmFyIHNlY29uZHMgPSBwYXJzZUludChzZWNvbmRzV2l0aE1pbGxpc2Vjb25kc1N0cmluZywgMTApO1xuICAgICAgICAgICAgaWYgKCFpc05hTihzZWNvbmRzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWNvbmRzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgc2Vjb25kcyBmcm9tIGRhdGU6IFwiLmNvbmNhdChkYXRlLCBcIi5cIikpO1xufVxuZXhwb3J0cy5nZXRTZWNvbmRzID0gZ2V0U2Vjb25kcztcbi8qKlxuICogR2V0cyBtaWxsaXNlY29uZHMgZnJvbSBhIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlIHwgc3RyaW5nfSBkYXRlIERhdGUgdG8gZ2V0IG1pbGxpc2Vjb25kcyBmcm9tXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBNaWxsaXNlY29uZHNcbiAqL1xuZnVuY3Rpb24gZ2V0TWlsbGlzZWNvbmRzKGRhdGUpIHtcbiAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIGRhdGVQaWVjZXMgPSBkYXRlLnNwbGl0KCc6Jyk7XG4gICAgICAgIGlmIChkYXRlUGllY2VzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICB2YXIgc2Vjb25kc1dpdGhNaWxsaXNlY29uZHNTdHJpbmcgPSBkYXRlUGllY2VzWzJdIHx8ICcwJztcbiAgICAgICAgICAgIHZhciBtaWxsaXNlY29uZHNTdHJpbmcgPSBzZWNvbmRzV2l0aE1pbGxpc2Vjb25kc1N0cmluZy5zcGxpdCgnLicpWzFdIHx8ICcwJztcbiAgICAgICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBwYXJzZUludChtaWxsaXNlY29uZHNTdHJpbmcsIDEwKTtcbiAgICAgICAgICAgIGlmICghaXNOYU4obWlsbGlzZWNvbmRzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtaWxsaXNlY29uZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGdldCBzZWNvbmRzIGZyb20gZGF0ZTogXCIuY29uY2F0KGRhdGUsIFwiLlwiKSk7XG59XG5leHBvcnRzLmdldE1pbGxpc2Vjb25kcyA9IGdldE1pbGxpc2Vjb25kcztcbi8qKlxuICogQ2VudHVyeVxuICovXG4vKipcbiAqIEdldHMgY2VudHVyeSBzdGFydCBkYXRlIGZyb20gYSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZUxpa2V9IGRhdGUgRGF0ZSB0byBnZXQgY2VudHVyeSBzdGFydCBmcm9tXG4gKiBAcmV0dXJucyB7RGF0ZX0gQ2VudHVyeSBzdGFydCBkYXRlXG4gKi9cbmZ1bmN0aW9uIGdldENlbnR1cnlTdGFydChkYXRlKSB7XG4gICAgdmFyIHllYXIgPSBnZXRZZWFyKGRhdGUpO1xuICAgIHZhciBjZW50dXJ5U3RhcnRZZWFyID0geWVhciArICgoLXllYXIgKyAxKSAlIDEwMCk7XG4gICAgdmFyIGNlbnR1cnlTdGFydERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGNlbnR1cnlTdGFydERhdGUuc2V0RnVsbFllYXIoY2VudHVyeVN0YXJ0WWVhciwgMCwgMSk7XG4gICAgY2VudHVyeVN0YXJ0RGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICByZXR1cm4gY2VudHVyeVN0YXJ0RGF0ZTtcbn1cbmV4cG9ydHMuZ2V0Q2VudHVyeVN0YXJ0ID0gZ2V0Q2VudHVyeVN0YXJ0O1xuLyoqXG4gKiBHZXRzIHByZXZpb3VzIGNlbnR1cnkgc3RhcnQgZGF0ZSBmcm9tIGEgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGVMaWtlfSBkYXRlIERhdGUgdG8gZ2V0IHByZXZpb3VzIGNlbnR1cnkgc3RhcnQgZnJvbVxuICogQHJldHVybnMge0RhdGV9IFByZXZpb3VzIGNlbnR1cnkgc3RhcnQgZGF0ZVxuICovXG5leHBvcnRzLmdldFByZXZpb3VzQ2VudHVyeVN0YXJ0ID0gbWFrZUdldEVkZ2VPZk5laWdoYm9yKGdldFllYXIsIGdldENlbnR1cnlTdGFydCwgLTEwMCk7XG4vKipcbiAqIEdldHMgbmV4dCBjZW50dXJ5IHN0YXJ0IGRhdGUgZnJvbSBhIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlTGlrZX0gZGF0ZSBEYXRlIHRvIGdldCBuZXh0IGNlbnR1cnkgc3RhcnQgZnJvbVxuICogQHJldHVybnMge0RhdGV9IE5leHQgY2VudHVyeSBzdGFydCBkYXRlXG4gKi9cbmV4cG9ydHMuZ2V0TmV4dENlbnR1cnlTdGFydCA9IG1ha2VHZXRFZGdlT2ZOZWlnaGJvcihnZXRZZWFyLCBnZXRDZW50dXJ5U3RhcnQsIDEwMCk7XG4vKipcbiAqIEdldHMgY2VudHVyeSBlbmQgZGF0ZSBmcm9tIGEgZ2l2ZW4gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGVMaWtlfSBkYXRlIERhdGUgdG8gZ2V0IGNlbnR1cnkgZW5kIGZyb21cbiAqIEByZXR1cm5zIHtEYXRlfSBDZW50dXJ5IGVuZCBkYXRlXG4gKi9cbmV4cG9ydHMuZ2V0Q2VudHVyeUVuZCA9IG1ha2VHZXRFbmQoZXhwb3J0cy5nZXROZXh0Q2VudHVyeVN0YXJ0KTtcbi8qKlxuICogR2V0cyBwcmV2aW91cyBjZW50dXJ5IGVuZCBkYXRlIGZyb20gYSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZUxpa2V9IGRhdGUgRGF0ZSB0byBnZXQgcHJldmlvdXMgY2VudHVyeSBlbmQgZnJvbVxuICogQHJldHVybnMge0RhdGV9IFByZXZpb3VzIGNlbnR1cnkgZW5kIGRhdGVcbiAqL1xuZXhwb3J0cy5nZXRQcmV2aW91c0NlbnR1cnlFbmQgPSBtYWtlR2V0RWRnZU9mTmVpZ2hib3IoZ2V0WWVhciwgZXhwb3J0cy5nZXRDZW50dXJ5RW5kLCAtMTAwKTtcbi8qKlxuICogR2V0cyBuZXh0IGNlbnR1cnkgZW5kIGRhdGUgZnJvbSBhIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlTGlrZX0gZGF0ZSBEYXRlIHRvIGdldCBuZXh0IGNlbnR1cnkgZW5kIGZyb21cbiAqIEByZXR1cm5zIHtEYXRlfSBOZXh0IGNlbnR1cnkgZW5kIGRhdGVcbiAqL1xuZXhwb3J0cy5nZXROZXh0Q2VudHVyeUVuZCA9IG1ha2VHZXRFZGdlT2ZOZWlnaGJvcihnZXRZZWFyLCBleHBvcnRzLmdldENlbnR1cnlFbmQsIDEwMCk7XG4vKipcbiAqIEdldHMgY2VudHVyeSBzdGFydCBhbmQgZW5kIGRhdGVzIGZyb20gYSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZUxpa2V9IGRhdGUgRGF0ZSB0byBnZXQgY2VudHVyeSBzdGFydCBhbmQgZW5kIGZyb21cbiAqIEByZXR1cm5zIHtbRGF0ZSwgRGF0ZV19IENlbnR1cnkgc3RhcnQgYW5kIGVuZCBkYXRlc1xuICovXG5leHBvcnRzLmdldENlbnR1cnlSYW5nZSA9IG1ha2VHZXRSYW5nZShnZXRDZW50dXJ5U3RhcnQsIGV4cG9ydHMuZ2V0Q2VudHVyeUVuZCk7XG4vKipcbiAqIERlY2FkZVxuICovXG4vKipcbiAqIEdldHMgZGVjYWRlIHN0YXJ0IGRhdGUgZnJvbSBhIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlTGlrZX0gZGF0ZSBEYXRlIHRvIGdldCBkZWNhZGUgc3RhcnQgZnJvbVxuICogQHJldHVybnMge0RhdGV9IERlY2FkZSBzdGFydCBkYXRlXG4gKi9cbmZ1bmN0aW9uIGdldERlY2FkZVN0YXJ0KGRhdGUpIHtcbiAgICB2YXIgeWVhciA9IGdldFllYXIoZGF0ZSk7XG4gICAgdmFyIGRlY2FkZVN0YXJ0WWVhciA9IHllYXIgKyAoKC15ZWFyICsgMSkgJSAxMCk7XG4gICAgdmFyIGRlY2FkZVN0YXJ0RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgZGVjYWRlU3RhcnREYXRlLnNldEZ1bGxZZWFyKGRlY2FkZVN0YXJ0WWVhciwgMCwgMSk7XG4gICAgZGVjYWRlU3RhcnREYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIHJldHVybiBkZWNhZGVTdGFydERhdGU7XG59XG5leHBvcnRzLmdldERlY2FkZVN0YXJ0ID0gZ2V0RGVjYWRlU3RhcnQ7XG4vKipcbiAqIEdldHMgcHJldmlvdXMgZGVjYWRlIHN0YXJ0IGRhdGUgZnJvbSBhIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlTGlrZX0gZGF0ZSBEYXRlIHRvIGdldCBwcmV2aW91cyBkZWNhZGUgc3RhcnQgZnJvbVxuICogQHJldHVybnMge0RhdGV9IFByZXZpb3VzIGRlY2FkZSBzdGFydCBkYXRlXG4gKi9cbmV4cG9ydHMuZ2V0UHJldmlvdXNEZWNhZGVTdGFydCA9IG1ha2VHZXRFZGdlT2ZOZWlnaGJvcihnZXRZZWFyLCBnZXREZWNhZGVTdGFydCwgLTEwKTtcbi8qKlxuICogR2V0cyBuZXh0IGRlY2FkZSBzdGFydCBkYXRlIGZyb20gYSBnaXZlbiBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZUxpa2V9IGRhdGUgRGF0ZSB0byBnZXQgbmV4dCBkZWNhZGUgc3RhcnQgZnJvbVxuICogQHJldHVybnMge0RhdGV9IE5leHQgZGVjYWRlIHN0YXJ0IGRhdGVcbiAqL1xuZXhwb3J0cy5nZXROZXh0RGVjYWRlU3RhcnQgPSBtYWtlR2V0R