You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

359 line
32KB

  1. (self["webpackChunk"] = self["webpackChunk"] || []).push([["adminlte-sort"],{
  2. /***/ "../LaclicBundles/SovBundle/Resources/assets/app/adminlte/sort/app.sort.js":
  3. /*!*********************************************************************************!*\
  4. !*** ../LaclicBundles/SovBundle/Resources/assets/app/adminlte/sort/app.sort.js ***!
  5. \*********************************************************************************/
  6. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  7. "use strict";
  8. __webpack_require__.r(__webpack_exports__);
  9. /* harmony import */ var jquery_ui__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery-ui */ "./node_modules/jquery-ui-dist/jquery-ui.js");
  10. /* harmony import */ var jquery_ui__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery_ui__WEBPACK_IMPORTED_MODULE_0__);
  11. /* harmony import */ var _sort_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sort.js */ "../LaclicBundles/SovBundle/Resources/assets/app/adminlte/sort/sort.js");
  12. /* harmony import */ var _sort_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_sort_js__WEBPACK_IMPORTED_MODULE_1__);
  13. /* harmony import */ var _sort_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sort.scss */ "../LaclicBundles/SovBundle/Resources/assets/app/adminlte/sort/sort.scss");
  14. /***/ }),
  15. /***/ "../LaclicBundles/SovBundle/Resources/assets/app/adminlte/sort/sort.js":
  16. /*!*****************************************************************************!*\
  17. !*** ../LaclicBundles/SovBundle/Resources/assets/app/adminlte/sort/sort.js ***!
  18. \*****************************************************************************/
  19. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  20. __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ "./node_modules/core-js/modules/es.regexp.exec.js");
  21. __webpack_require__(/*! core-js/modules/es.string.replace.js */ "./node_modules/core-js/modules/es.string.replace.js");
  22. __webpack_require__(/*! core-js/modules/es.array.find.js */ "./node_modules/core-js/modules/es.array.find.js");
  23. __webpack_require__(/*! core-js/modules/es.string.pad-start.js */ "./node_modules/core-js/modules/es.string.pad-start.js");
  24. __webpack_require__(/*! core-js/modules/es.date.to-string.js */ "./node_modules/core-js/modules/es.date.to-string.js");
  25. __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js");
  26. __webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ "./node_modules/core-js/modules/es.regexp.to-string.js");
  27. jQuery(document).ready(function () {
  28. initSovSortableList();
  29. });
  30. function initSovSortableList() {
  31. if ($('.sov-sortable').length > 0) {
  32. $('.sov-sortable tbody').sortable({
  33. placeholder: "ui-state-highlight"
  34. });
  35. $('.sov-sortable tbody').on("sortupdate", function (event, ui) {
  36. prototype = $('#form_entities').data('prototype');
  37. $('.sov-sortable tr.sov-draggable').each(function (index, li) {
  38. // instead be a number based on how many items we have
  39. var newForm = prototype.replace(/__name__/g, index); // Replace '__name__' in the prototype's HTML to
  40. $(li).find('div:last-child').remove();
  41. $(li).append(newForm);
  42. $(li).find('#form_entities_' + index + '_id').val($(li).data('id'));
  43. if ($('.sov-sortable').data('parent-position') !== '') {
  44. //Ajout d'un 0 initial pour les nuémros <10
  45. indexAsString = index.toString().padStart(2, '0');
  46. val = $('.sov-sortable').data('parent-position') + '.' + indexAsString;
  47. } else {
  48. val = index;
  49. }
  50. $(li).find('#form_entities_' + index + '_position').val(val);
  51. });
  52. });
  53. }
  54. }
  55. /***/ }),
  56. /***/ "./node_modules/core-js/internals/classof.js":
  57. /*!***************************************************!*\
  58. !*** ./node_modules/core-js/internals/classof.js ***!
  59. \***************************************************/
  60. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  61. var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "./node_modules/core-js/internals/to-string-tag-support.js");
  62. var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js/internals/classof-raw.js");
  63. var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js");
  64. var TO_STRING_TAG = wellKnownSymbol('toStringTag');
  65. // ES3 wrong here
  66. var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';
  67. // fallback for IE11 Script Access Denied error
  68. var tryGet = function (it, key) {
  69. try {
  70. return it[key];
  71. } catch (error) { /* empty */ }
  72. };
  73. // getting tag from ES6+ `Object.prototype.toString`
  74. module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {
  75. var O, tag, result;
  76. return it === undefined ? 'Undefined' : it === null ? 'Null'
  77. // @@toStringTag case
  78. : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag
  79. // builtinTag case
  80. : CORRECT_ARGUMENTS ? classofRaw(O)
  81. // ES3 arguments fallback
  82. : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;
  83. };
  84. /***/ }),
  85. /***/ "./node_modules/core-js/internals/object-to-string.js":
  86. /*!************************************************************!*\
  87. !*** ./node_modules/core-js/internals/object-to-string.js ***!
  88. \************************************************************/
  89. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  90. "use strict";
  91. var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "./node_modules/core-js/internals/to-string-tag-support.js");
  92. var classof = __webpack_require__(/*! ../internals/classof */ "./node_modules/core-js/internals/classof.js");
  93. // `Object.prototype.toString` method implementation
  94. // https://tc39.es/ecma262/#sec-object.prototype.tostring
  95. module.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {
  96. return '[object ' + classof(this) + ']';
  97. };
  98. /***/ }),
  99. /***/ "./node_modules/core-js/internals/string-pad-webkit-bug.js":
  100. /*!*****************************************************************!*\
  101. !*** ./node_modules/core-js/internals/string-pad-webkit-bug.js ***!
  102. \*****************************************************************/
  103. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  104. // https://github.com/zloirock/core-js/issues/280
  105. var userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ "./node_modules/core-js/internals/engine-user-agent.js");
  106. // eslint-disable-next-line unicorn/no-unsafe-regex -- safe
  107. module.exports = /Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(userAgent);
  108. /***/ }),
  109. /***/ "./node_modules/core-js/internals/string-pad.js":
  110. /*!******************************************************!*\
  111. !*** ./node_modules/core-js/internals/string-pad.js ***!
  112. \******************************************************/
  113. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  114. // https://github.com/tc39/proposal-string-pad-start-end
  115. var toLength = __webpack_require__(/*! ../internals/to-length */ "./node_modules/core-js/internals/to-length.js");
  116. var repeat = __webpack_require__(/*! ../internals/string-repeat */ "./node_modules/core-js/internals/string-repeat.js");
  117. var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js/internals/require-object-coercible.js");
  118. var ceil = Math.ceil;
  119. // `String.prototype.{ padStart, padEnd }` methods implementation
  120. var createMethod = function (IS_END) {
  121. return function ($this, maxLength, fillString) {
  122. var S = String(requireObjectCoercible($this));
  123. var stringLength = S.length;
  124. var fillStr = fillString === undefined ? ' ' : String(fillString);
  125. var intMaxLength = toLength(maxLength);
  126. var fillLen, stringFiller;
  127. if (intMaxLength <= stringLength || fillStr == '') return S;
  128. fillLen = intMaxLength - stringLength;
  129. stringFiller = repeat.call(fillStr, ceil(fillLen / fillStr.length));
  130. if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);
  131. return IS_END ? S + stringFiller : stringFiller + S;
  132. };
  133. };
  134. module.exports = {
  135. // `String.prototype.padStart` method
  136. // https://tc39.es/ecma262/#sec-string.prototype.padstart
  137. start: createMethod(false),
  138. // `String.prototype.padEnd` method
  139. // https://tc39.es/ecma262/#sec-string.prototype.padend
  140. end: createMethod(true)
  141. };
  142. /***/ }),
  143. /***/ "./node_modules/core-js/internals/string-repeat.js":
  144. /*!*********************************************************!*\
  145. !*** ./node_modules/core-js/internals/string-repeat.js ***!
  146. \*********************************************************/
  147. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  148. "use strict";
  149. var toInteger = __webpack_require__(/*! ../internals/to-integer */ "./node_modules/core-js/internals/to-integer.js");
  150. var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js/internals/require-object-coercible.js");
  151. // `String.prototype.repeat` method implementation
  152. // https://tc39.es/ecma262/#sec-string.prototype.repeat
  153. module.exports = function repeat(count) {
  154. var str = String(requireObjectCoercible(this));
  155. var result = '';
  156. var n = toInteger(count);
  157. if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');
  158. for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;
  159. return result;
  160. };
  161. /***/ }),
  162. /***/ "./node_modules/core-js/internals/to-string-tag-support.js":
  163. /*!*****************************************************************!*\
  164. !*** ./node_modules/core-js/internals/to-string-tag-support.js ***!
  165. \*****************************************************************/
  166. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  167. var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js");
  168. var TO_STRING_TAG = wellKnownSymbol('toStringTag');
  169. var test = {};
  170. test[TO_STRING_TAG] = 'z';
  171. module.exports = String(test) === '[object z]';
  172. /***/ }),
  173. /***/ "./node_modules/core-js/modules/es.date.to-string.js":
  174. /*!***********************************************************!*\
  175. !*** ./node_modules/core-js/modules/es.date.to-string.js ***!
  176. \***********************************************************/
  177. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  178. var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js");
  179. var DatePrototype = Date.prototype;
  180. var INVALID_DATE = 'Invalid Date';
  181. var TO_STRING = 'toString';
  182. var nativeDateToString = DatePrototype[TO_STRING];
  183. var getTime = DatePrototype.getTime;
  184. // `Date.prototype.toString` method
  185. // https://tc39.es/ecma262/#sec-date.prototype.tostring
  186. if (new Date(NaN) + '' != INVALID_DATE) {
  187. redefine(DatePrototype, TO_STRING, function toString() {
  188. var value = getTime.call(this);
  189. // eslint-disable-next-line no-self-compare -- NaN check
  190. return value === value ? nativeDateToString.call(this) : INVALID_DATE;
  191. });
  192. }
  193. /***/ }),
  194. /***/ "./node_modules/core-js/modules/es.object.to-string.js":
  195. /*!*************************************************************!*\
  196. !*** ./node_modules/core-js/modules/es.object.to-string.js ***!
  197. \*************************************************************/
  198. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  199. var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "./node_modules/core-js/internals/to-string-tag-support.js");
  200. var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js");
  201. var toString = __webpack_require__(/*! ../internals/object-to-string */ "./node_modules/core-js/internals/object-to-string.js");
  202. // `Object.prototype.toString` method
  203. // https://tc39.es/ecma262/#sec-object.prototype.tostring
  204. if (!TO_STRING_TAG_SUPPORT) {
  205. redefine(Object.prototype, 'toString', toString, { unsafe: true });
  206. }
  207. /***/ }),
  208. /***/ "./node_modules/core-js/modules/es.regexp.to-string.js":
  209. /*!*************************************************************!*\
  210. !*** ./node_modules/core-js/modules/es.regexp.to-string.js ***!
  211. \*************************************************************/
  212. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  213. "use strict";
  214. var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js");
  215. var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js");
  216. var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js");
  217. var flags = __webpack_require__(/*! ../internals/regexp-flags */ "./node_modules/core-js/internals/regexp-flags.js");
  218. var TO_STRING = 'toString';
  219. var RegExpPrototype = RegExp.prototype;
  220. var nativeToString = RegExpPrototype[TO_STRING];
  221. var NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });
  222. // FF44- RegExp#toString has a wrong name
  223. var INCORRECT_NAME = nativeToString.name != TO_STRING;
  224. // `RegExp.prototype.toString` method
  225. // https://tc39.es/ecma262/#sec-regexp.prototype.tostring
  226. if (NOT_GENERIC || INCORRECT_NAME) {
  227. redefine(RegExp.prototype, TO_STRING, function toString() {
  228. var R = anObject(this);
  229. var p = String(R.source);
  230. var rf = R.flags;
  231. var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? flags.call(R) : rf);
  232. return '/' + p + '/' + f;
  233. }, { unsafe: true });
  234. }
  235. /***/ }),
  236. /***/ "./node_modules/core-js/modules/es.string.pad-start.js":
  237. /*!*************************************************************!*\
  238. !*** ./node_modules/core-js/modules/es.string.pad-start.js ***!
  239. \*************************************************************/
  240. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  241. "use strict";
  242. var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js");
  243. var $padStart = __webpack_require__(/*! ../internals/string-pad */ "./node_modules/core-js/internals/string-pad.js").start;
  244. var WEBKIT_BUG = __webpack_require__(/*! ../internals/string-pad-webkit-bug */ "./node_modules/core-js/internals/string-pad-webkit-bug.js");
  245. // `String.prototype.padStart` method
  246. // https://tc39.es/ecma262/#sec-string.prototype.padstart
  247. $({ target: 'String', proto: true, forced: WEBKIT_BUG }, {
  248. padStart: function padStart(maxLength /* , fillString = ' ' */) {
  249. return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);
  250. }
  251. });
  252. /***/ }),
  253. /***/ "../LaclicBundles/SovBundle/Resources/assets/app/adminlte/sort/sort.scss":
  254. /*!*******************************************************************************!*\
  255. !*** ../LaclicBundles/SovBundle/Resources/assets/app/adminlte/sort/sort.scss ***!
  256. \*******************************************************************************/
  257. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  258. "use strict";
  259. __webpack_require__.r(__webpack_exports__);
  260. // extracted by mini-css-extract-plugin
  261. /***/ })
  262. },
  263. /******/ __webpack_require__ => { // webpackRuntimeModules
  264. /******/ "use strict";
  265. /******/
  266. /******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
  267. /******/ __webpack_require__.O(0, ["vendors-node_modules_core-js_internals_a-function_js-node_modules_core-js_internals_export_js","vendors-node_modules_core-js_modules_es_array_find_js","vendors-node_modules_core-js_internals_advance-string-index_js-node_modules_core-js_internals-bed4a0","vendors-node_modules_jquery_src_jquery_js","vendors-node_modules_core-js_modules_es_string_replace_js-node_modules_jquery-ui-dist_jquery-ui_js"], () => (__webpack_exec__("../LaclicBundles/SovBundle/Resources/assets/app/adminlte/sort/app.sort.js")));
  268. /******/ var __webpack_exports__ = __webpack_require__.O();
  269. /******/ }
  270. ]);
  271. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vTGFjbGljQnVuZGxlcy9Tb3ZCdW5kbGUvUmVzb3VyY2VzL2Fzc2V0cy9hcHAvYWRtaW5sdGUvc29ydC9hcHAuc29ydC5qcyIsIndlYnBhY2s6Ly8vLi4vTGFjbGljQnVuZGxlcy9Tb3ZCdW5kbGUvUmVzb3VyY2VzL2Fzc2V0cy9hcHAvYWRtaW5sdGUvc29ydC9zb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctcGFkLXdlYmtpdC1idWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1wYWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmRhdGUudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucGFkLXN0YXJ0LmpzIiwid2VicGFjazovLy8uLi9MYWNsaWNCdW5kbGVzL1NvdkJ1bmRsZS9SZXNvdXJjZXMvYXNzZXRzL2FwcC9hZG1pbmx0ZS9zb3J0L3NvcnQuc2NzcyJdLCJuYW1lcyI6WyJqUXVlcnkiLCJkb2N1bWVudCIsInJlYWR5IiwiaW5pdFNvdlNvcnRhYmxlTGlzdCIsIiQiLCJsZW5ndGgiLCJzb3J0YWJsZSIsInBsYWNlaG9sZGVyIiwib24iLCJldmVudCIsInVpIiwicHJvdG90eXBlIiwiZGF0YSIsImVhY2giLCJpbmRleCIsImxpIiwibmV3Rm9ybSIsInJlcGxhY2UiLCJmaW5kIiwicmVtb3ZlIiwiYXBwZW5kIiwidmFsIiwiaW5kZXhBc1N0cmluZyIsInRvU3RyaW5nIiwicGFkU3RhcnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNGQUEsTUFBTSxDQUFDQyxRQUFELENBQU4sQ0FBaUJDLEtBQWpCLENBQXVCLFlBQVk7QUFDL0JDLHFCQUFtQjtBQUN0QixDQUZEOztBQUlBLFNBQVNBLG1CQUFULEdBQStCO0FBRTNCLE1BQUlDLENBQUMsQ0FBQyxlQUFELENBQUQsQ0FBbUJDLE1BQW5CLEdBQTRCLENBQWhDLEVBQW1DO0FBQy9CRCxLQUFDLENBQUMscUJBQUQsQ0FBRCxDQUF5QkUsUUFBekIsQ0FBa0M7QUFDOUJDLGlCQUFXLEVBQUU7QUFEaUIsS0FBbEM7QUFJQUgsS0FBQyxDQUFDLHFCQUFELENBQUQsQ0FBeUJJLEVBQXpCLENBQTRCLFlBQTVCLEVBQTBDLFVBQVVDLEtBQVYsRUFBaUJDLEVBQWpCLEVBQXFCO0FBRTNEQyxlQUFTLEdBQUdQLENBQUMsQ0FBQyxnQkFBRCxDQUFELENBQW9CUSxJQUFwQixDQUF5QixXQUF6QixDQUFaO0FBRUFSLE9BQUMsQ0FBQyxnQ0FBRCxDQUFELENBQW9DUyxJQUFwQyxDQUF5QyxVQUFVQyxLQUFWLEVBQWlCQyxFQUFqQixFQUFxQjtBQUUxRDtBQUNBLFlBQUlDLE9BQU8sR0FBR0wsU0FBUyxDQUFDTSxPQUFWLENBQWtCLFdBQWxCLEVBQStCSCxLQUEvQixDQUFkLENBSDBELENBSzFEOztB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OztBQ1JhO0FBQ2IsZUFBZSxtQkFBTyxDQUFDLDJFQUF1QjtBQUM5QyxlQUFlLG1CQUFPLENBQUMsNkVBQXdCO0FBQy9DLFlBQVksbUJBQU8sQ0FBQyxxRUFBb0I7QUFDeEMsWUFBWSxtQkFBTyxDQUFDLG1GQUEyQjs7QUFFL0M7QUFDQTtBQUNBOztBQUVBLHFDQUFxQyw2QkFBNkIsMEJBQTBCLFlBQVksRUFBRTtBQUMxRztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsR0FBRyxlQUFlO0FBQ3JCOzs7Ozs7Ozs7Ozs7QUN4QmE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLGdCQUFnQiwwR0FBd0M7QUFDeEQsaUJBQWlCLG1CQUFPLENBQUMscUdBQW9DOztBQUU3RDtBQUNBO0FBQ0EsR0FBRyxvREFBb0Q7QUFDdkQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7Ozs7Ozs7OztBQ1hEIiwiZmlsZSI6ImFkbWlubHRlLXNvcnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCAnanF1ZXJ5LXVpJ1xuaW1wb3J0ICcuL3NvcnQuanMnXG5pbXBvcnQgJy4vc29ydC5zY3NzJyIsImpRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkge1xuICAgIGluaXRTb3ZTb3J0YWJsZUxpc3QoKTtcbn0pO1xuXG5mdW5jdGlvbiBpbml0U292U29ydGFibGVMaXN0KCkge1xuXG4gICAgaWYgKCQoJy5zb3Ytc29ydGFibGUnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICQoJy5zb3Ytc29ydGFibGUgdGJvZHknKS5zb3J0YWJsZSh7XG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJ1aS1zdGF0ZS1oaWdobGlnaHRcIlxuICAgICAgICB9KTtcblxuICAgICAgICAkKCcuc292LXNvcnRhYmxlIHRib2R5Jykub24oXCJzb3J0dXBkYXRlXCIsIGZ1bmN0aW9uIChldmVudCwgdWkpIHtcblxuICAgICAgICAgICAgcHJvdG90eXBlID0gJCgnI2Zvcm1fZW50aXRpZXMnKS5kYXRhKCdwcm90b3R5cGUnKTtcblxuICAgICAgICAgICAgJCgnLnNvdi1zb3J0YWJsZSB0ci5zb3YtZHJhZ2dhYmxlJykuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGxpKSB7XG5cbiAgICAgICAgICAgICAgICAvLyBpbnN0ZWFkIGJlIGEgbnVtYmVyIGJhc2VkIG9uIGhvdyBtYW55IGl0ZW1zIHdlIGhhdmVcbiAgICAgICAgICAgICAgICB2YXIgbmV3Rm9ybSA9IHByb3RvdHlwZS5yZXBsYWNlKC9fX25hbWVfXy9nLCBpbmRleCk7XG5cbiAgICAgICAgICAgICAgICAvLyBSZXBsYWNlICdfX25hbWVfXycgaW4gdGhlIHByb3RvdHlwZSdzIEhUTUwgdG9cbiAgICAgICAgICAgICAgICAkKGxpKS5maW5kKCdkaXY6bGFzdC1jaGlsZCcpLnJlbW92ZSgpO1xuXG4gICAgICAgICAgICAgICAgJChsaSkuYXBwZW5kKG5ld0Zvcm0pO1xuICAgICAgICAgICAgICAgICQobGkpLmZpbmQoJyNmb3JtX2VudGl0aWVzXycgKyBpbmRleCArICdfaWQnKS52YWwoJChsaSkuZGF0YSgnaWQnKSk7XG4gICAgICAgICAgICAgICAgaWYgKCQoJy5zb3Ytc29ydGFibGUnKS5kYXRhKCdwYXJlbnQtcG9zaXRpb24nKSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9Bam91dCBkJ3VuIDAgaW5pdGlhbCBwb3VyIGxlcyBudcOpbXJvcyA8MTBcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhBc1N0cmluZyA9IGluZGV4LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gJCgnLnNvdi1zb3J0YWJsZScpLmRhdGEoJ3BhcmVudC1wb3NpdGlvbicpICsgJy4nICsgaW5kZXhBc1N0cmluZ1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IGluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkKGxpKS5maW5kKCcjZm9ybV9lbnRpdGllc18nICsgaW5kZXggKyAnX3Bvc2l0aW9uJykudmFsKHZhbCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbiIsInZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUT19TVFJJTkdfVEFHKSkgPT0gJ3N0cmluZycgPyB0YWdcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IENPUlJFQ1RfQVJHVU1FTlRTID8gY2xhc3NvZlJhdyhPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChyZXN1bHQgPSBjbGFzc29mUmF3KE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyB7fS50b1N0cmluZyA6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby11bnNhZmUtcmVnZXggLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSAvVmVyc2lvblxcLzEwKD86XFwuXFxkKyl7MSwyfSg/OiBbXFx3Li9dKyk/KD86IE1vYmlsZVxcL1xcdyspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy1yZXBlYXQnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyBwYWRTdGFydCwgcGFkRW5kIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfRU5EKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIG1heExlbmd0aCwgZmlsbFN0cmluZykge1xuICAgIHZhciBTID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICB2YXIgc3RyaW5nTGVuZ3RoID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpbGxTdHIgPSBmaWxsU3RyaW5nID09PSB1bmRlZmluZWQgPyAnICcgOiBTdHJpbmcoZmlsbFN0cmluZyk7XG4gICAgdmFyIGludE1heExlbmd0aCA9IHRvTGVuZ3RoKG1heExlbmd0aCk7XG4gICAgdmFyIGZpbGxMZW4sIHN0cmluZ0ZpbGxlcjtcbiAgICBpZiAoaW50TWF4TGVuZ3RoIDw9IHN0cmluZ0xlbmd0aCB8fCBmaWxsU3RyID09ICcnKSByZXR1cm4gUztcbiAgICBmaWxsTGVuID0gaW50TWF4TGVuZ3RoIC0gc3RyaW5nTGVuZ3RoO1xuICAgIHN0cmluZ0ZpbGxlciA9IHJlcGVhdC5jYWxsKGZpbGxTdHIsIGNlaWwoZmlsbExlbiAvIGZpbGxTdHIubGVuZ3RoKSk7XG4gICAgaWYgKHN0cmluZ0ZpbGxlci5sZW5ndGggPiBmaWxsTGVuKSBzdHJpbmdGaWxsZXIgPSBzdHJpbmdGaWxsZXIuc2xpY2UoMCwgZmlsbExlbik7XG4gICAgcmV0dXJuIElTX0VORCA/IFMgKyBzdHJpbmdGaWxsZXIgOiBzdHJpbmdGaWxsZXIgKyBTO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnBhZHN0YXJ0XG4gIHN0YXJ0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5wYWRFbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucGFkZW5kXG4gIGVuZDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUucmVwZWF0YCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBlYXRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVwZWF0KGNvdW50KSB7XG4gIHZhciBzdHIgPSBTdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIG4gPSB0b0ludGVnZXIoY291bnQpO1xuICBpZiAobiA8IDAgfHwgbiA9PSBJbmZpbml0eSkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbnVtYmVyIG9mIHJlcGV0aXRpb25zJyk7XG4gIGZvciAoO24gPiAwOyAobiA+Pj49IDEpICYmIChzdHIgKz0gc3RyKSkgaWYgKG4gJiAxKSByZXN1bHQgKz0gc3RyO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuIiwidmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG5cbnZhciBEYXRlUHJvdG90eXBlID0gRGF0ZS5wcm90b3R5cGU7XG52YXIgSU5WQUxJRF9EQVRFID0gJ0ludmFsaWQgRGF0ZSc7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBuYXRpdmVEYXRlVG9TdHJpbmcgPSBEYXRlUHJvdG90eXBlW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90b3R5cGUuZ2V0VGltZTtcblxuLy8gYERhdGUucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZGF0ZS5wcm90b3R5cGUudG9zdHJpbmdcbmlmIChuZXcgRGF0ZShOYU4pICsgJycgIT0gSU5WQUxJRF9EQVRFKSB7XG4gIHJlZGVmaW5lKERhdGVQcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/IG5hdGl2ZURhdGVUb1N0cmluZy5jYWxsKHRoaXMpIDogSU5WQUxJRF9EQVRFO1xuICB9KTtcbn1cbiIsInZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKCFUT19TVFJJTkdfVEFHX1NVUFBPUlQpIHtcbiAgcmVkZWZpbmUoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgdG9TdHJpbmcsIHsgdW5zYWZlOiB0cnVlIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBmbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcblxudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcbnZhciBuYXRpdmVUb1N0cmluZyA9IFJlZ0V4cFByb3RvdHlwZVtUT19TVFJJTkddO1xuXG52YXIgTk9UX0dFTkVSSUMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVUb1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT0gJy9hL2InOyB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG52YXIgSU5DT1JSRUNUX05BTUUgPSBuYXRpdmVUb1N0cmluZy5uYW1lICE9IFRPX1NUUklORztcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoTk9UX0dFTkVSSUMgfHwgSU5DT1JSRUNUX05BTUUpIHtcbiAgcmVkZWZpbmUoUmVnRXhwLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwID0gU3RyaW5nKFIuc291cmNlKTtcbiAgICB2YXIgcmYgPSBSLmZsYWdzO1xuICAgIHZhciBmID0gU3RyaW5nKHJmID09PSB1bmRlZmluZWQgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCAmJiAhKCdmbGFncycgaW4gUmVnRXhwUHJvdG90eXBlKSA/IGZsYWdzLmNhbGwoUikgOiByZik7XG4gICAgcmV0dXJuICcvJyArIHAgKyAnLycgKyBmO1xuICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRwYWRTdGFydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctcGFkJykuc3RhcnQ7XG52YXIgV0VCS0lUX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctcGFkLXdlYmtpdC1idWcnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUucGFkU3RhcnRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnBhZHN0YXJ0XG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogV0VCS0lUX0JVRyB9LCB7XG4gIHBhZFN0YXJ0OiBmdW5jdGlvbiBwYWRTdGFydChtYXhMZW5ndGggLyogLCBmaWxsU3RyaW5nID0gJyAnICovKSB7XG4gICAgcmV0dXJuICRwYWRTdGFydCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiXSwic291cmNlUm9vdCI6IiJ9