clientnode 4.0.1494 → 4.0.1495

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/dist/Lock.d.ts +39 -0
  2. package/dist/Lock.js +68 -83
  3. package/dist/Logger.d.ts +102 -0
  4. package/dist/Logger.js +693 -163
  5. package/dist/Semaphore.d.ts +29 -0
  6. package/dist/Semaphore.js +55 -46
  7. package/dist/array.d.ts +150 -0
  8. package/dist/array.js +545 -337
  9. package/dist/bundle/index.js +4512 -0
  10. package/dist/cli.d.ts +31 -0
  11. package/dist/cli.js +44 -37
  12. package/dist/compatible/Lock.js +85 -0
  13. package/dist/compatible/Logger.js +715 -0
  14. package/dist/compatible/Semaphore.js +74 -0
  15. package/dist/compatible/array.js +660 -0
  16. package/dist/compatible/cli.js +58 -0
  17. package/dist/compatible/constants.js +200 -0
  18. package/dist/compatible/context.js +224 -0
  19. package/dist/compatible/cookie.js +240 -0
  20. package/dist/compatible/data-transfer.js +751 -0
  21. package/dist/compatible/datetime.js +1088 -0
  22. package/dist/compatible/domNode.js +481 -0
  23. package/dist/compatible/expression/evaluators.js +1152 -0
  24. package/dist/compatible/expression/helper.js +115 -0
  25. package/dist/compatible/expression/index.js +1274 -0
  26. package/dist/compatible/expression/indicator-functions.js +224 -0
  27. package/dist/compatible/expression/type.js +16 -0
  28. package/dist/compatible/filesystem.js +373 -0
  29. package/dist/compatible/function.js +114 -0
  30. package/dist/compatible/index.js +3081 -0
  31. package/dist/compatible/indicators.js +471 -0
  32. package/dist/compatible/module.js +168 -0
  33. package/dist/compatible/number.js +433 -0
  34. package/dist/compatible/object.js +1042 -0
  35. package/dist/compatible/process.js +230 -0
  36. package/dist/compatible/property-types.js +36 -0
  37. package/dist/compatible/scope.js +2016 -0
  38. package/dist/compatible/string.js +1156 -0
  39. package/dist/compatible/test-helper.js +837 -0
  40. package/dist/compatible/type.js +16 -0
  41. package/dist/compatible/utility.js +358 -0
  42. package/dist/constants.d.ts +99 -0
  43. package/dist/constants.js +184 -110
  44. package/dist/context.d.ts +8 -0
  45. package/dist/context.js +209 -25
  46. package/dist/cookie.d.ts +31 -0
  47. package/dist/cookie.js +204 -48
  48. package/dist/data-transfer.d.ts +45 -0
  49. package/dist/data-transfer.js +701 -166
  50. package/dist/datetime.d.ts +37 -0
  51. package/dist/datetime.js +1047 -245
  52. package/dist/domNode.d.ts +82 -0
  53. package/dist/domNode.js +427 -277
  54. package/dist/expression/evaluators.d.ts +55 -0
  55. package/dist/expression/evaluators.js +1113 -234
  56. package/dist/expression/helper.d.ts +4 -0
  57. package/dist/expression/helper.js +100 -82
  58. package/dist/expression/index.d.ts +7 -0
  59. package/dist/expression/index.js +1258 -10
  60. package/dist/expression/indicator-functions.d.ts +14 -0
  61. package/dist/expression/indicator-functions.js +208 -21
  62. package/dist/expression/type.d.ts +70 -0
  63. package/dist/expression/type.js +1 -5
  64. package/dist/filesystem.d.ts +143 -0
  65. package/dist/filesystem.js +286 -324
  66. package/dist/function.d.ts +20 -0
  67. package/dist/function.js +90 -51
  68. package/dist/index.d.ts +23 -0
  69. package/dist/index.js +3064 -26
  70. package/dist/indicators.d.ts +68 -0
  71. package/dist/indicators.js +418 -79
  72. package/dist/module.d.ts +10 -0
  73. package/dist/module.js +154 -109
  74. package/dist/number.d.ts +35 -0
  75. package/dist/number.js +397 -25
  76. package/dist/object.d.ts +231 -0
  77. package/dist/object.js +854 -803
  78. package/dist/process.d.ts +22 -0
  79. package/dist/process.js +200 -38
  80. package/dist/property-types.d.ts +460 -0
  81. package/dist/property-types.js +17 -96
  82. package/dist/scope.d.ts +44 -0
  83. package/dist/scope.js +1987 -56
  84. package/dist/string.d.ts +319 -0
  85. package/dist/string.js +929 -633
  86. package/dist/test/Lock.d.ts +1 -0
  87. package/dist/test/Logger.d.ts +1 -0
  88. package/dist/test/Semaphore.d.ts +1 -0
  89. package/dist/test/array.d.ts +1 -0
  90. package/dist/test/cookie.d.ts +1 -0
  91. package/dist/test/data-transfer.d.ts +1 -0
  92. package/dist/test/datetime.d.ts +1 -0
  93. package/dist/test/domNode.d.ts +1 -0
  94. package/dist/test/expression/evaluators.d.ts +1 -0
  95. package/dist/test/expression/helper.d.ts +1 -0
  96. package/dist/test/expression/indicator-functions.d.ts +1 -0
  97. package/dist/test/filesystem.d.ts +1 -0
  98. package/dist/test/function.d.ts +1 -0
  99. package/dist/test/indicators.d.ts +1 -0
  100. package/dist/test/number.d.ts +1 -0
  101. package/dist/test/object.d.ts +1 -0
  102. package/dist/test/process.d.ts +1 -0
  103. package/dist/test/property-types.d.ts +1 -0
  104. package/dist/test/scope.d.ts +1 -0
  105. package/dist/test/string.d.ts +1 -0
  106. package/dist/test/utility.d.ts +1 -0
  107. package/dist/test-helper.d.ts +245 -0
  108. package/dist/test-helper.js +514 -289
  109. package/dist/type.d.ts +248 -0
  110. package/dist/type.js +4 -9
  111. package/dist/utility.d.ts +44 -0
  112. package/dist/utility.js +310 -91
  113. package/package.json +2 -2
@@ -1,9 +1,482 @@
1
+ if(typeof window==='undefined'||window===null)var window=(typeof globalThis==='undefined'||globalThis===null)?{}:globalThis;import * as __WEBPACK_EXTERNAL_MODULE_core_js_modules_es_array_includes_js_66c3fd7d__ from "core-js/modules/es.array.includes.js";
2
+ import * as __WEBPACK_EXTERNAL_MODULE_core_js_modules_es_regexp_flags_js_c0be7d17__ from "core-js/modules/es.regexp.flags.js";
3
+ import { expect as __WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_expect__, test as __WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__ } from "@jest/globals";
4
+ /******/ var __webpack_modules__ = ([
5
+ /* 0 */
6
+ /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
7
+
8
+ var x = function(y) {
9
+ var x = {}; __webpack_require__.d(x, y); return x
10
+ }
11
+ var y = function(x) { return function() { return x; }; }
12
+ module.exports = x({ });
13
+
14
+ /***/ }),
15
+ /* 1 */
16
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
17
+
18
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
19
+ /* harmony export */ rq: function() { return /* binding */ CLASS_TO_TYPE_MAPPING; }
20
+ /* harmony export */ });
21
+ /* unused harmony exports DEFAULT_ENCODING, CLOSE_EVENT_NAMES, CONSOLE_METHODS, VALUE_COPY_SYMBOL, IGNORE_NULL_AND_UNDEFINED_SYMBOL, ABBREVIATIONS, ANIMATION_END_EVENT_NAMES, KEY_CODES, KEYBOARD_CODES, LOCALES, PLAIN_OBJECT_PROTOTYPES, SPECIAL_REGEX_SEQUENCES, TRANSITION_END_EVENT_NAMES */
22
+ // #!/usr/bin/env babel-node
23
+ // -*- coding: utf-8 -*-
24
+ /** @module constants *//* !
25
+ region header
26
+ [Project page](https://torben.website/clientnode)
27
+
28
+ Copyright Torben Sickert (info["~at~"]torben.website) 16.12.2012
29
+
30
+ License
31
+ -------
32
+
33
+ This library written by Torben Sickert stands under a creative commons
34
+ naming 3.0 unported license.
35
+ See https://creativecommons.org/licenses/by/3.0/deed.de
36
+ endregion
37
+ */var DEFAULT_ENCODING="utf8";var CLOSE_EVENT_NAMES=(/* unused pure expression or super */ null && (["close","exit","SIGINT","SIGTERM","SIGQUIT","uncaughtException"]));var CONSOLE_METHODS=(/* unused pure expression or super */ null && (["debug","error","info","log","warn"]));var VALUE_COPY_SYMBOL=Symbol.for("clientnodeValue");var IGNORE_NULL_AND_UNDEFINED_SYMBOL=Symbol.for("clientnodeIgnoreNullAndUndefined");// Lists all known abbreviation for proper camel case to delimited and back
38
+ // conversion.
39
+ var ABBREVIATIONS=(/* unused pure expression or super */ null && (["html","id","url","us","de","api","href"]));// Saves a string with all css3 browser specific animation end event names.
40
+ var ANIMATION_END_EVENT_NAMES="animationend webkitAnimationEnd oAnimationEnd MSAnimationEnd";// String representation to object type name mapping.
41
+ var CLASS_TO_TYPE_MAPPING={"[object Array]":"array","[object Boolean]":"boolean","[object Date]":"date","[object Error]":"error","[object Function]":"function","[object Map]":"map","[object Number]":"number","[object Object]":"object","[object RegExp]":"regexp","[object Set]":"set","[object String]":"string"};// Saves a mapping from key codes to their corresponding name.
42
+ var KEY_CODES=(/* unused pure expression or super */ null && ({BACKSPACE:8,SPACE:32,TAB:9,DELETE:46,ENTER:13,COMMA:188,PERIOD:190,END:35,ESCAPE:27,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,HOME:36,NUMPAD_ADD:107,NUMPAD_SUBTRACT:109,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,PAGE_UP:33,PAGE_DOWN:34,UP:38,DOWN:40,LEFT:37,RIGHT:39}));var KEYBOARD_CODES=(/* unused pure expression or super */ null && ({BACKSPACE:"Backspace",SPACE:"Space",TAB:"Tab",DELETE:"Delete",ENTER:"Enter",COMMA:"Comma",PERIOD:"Period",END:"End",ESCAPE:"Escape",F1:"F1",F2:"F2",F3:"F3",F4:"F4",F5:"F5",F6:"F6",F7:"F7",F8:"F8",F9:"F9",F10:"F10",F11:"F111",F12:"F12",HOME:"Home",NUMPAD_ADD:"NumpadAdd",NUMPAD_SUBTRACT:"NumpadSubtract",NUMPAD_DECIMAL:"NumpadDecimal",NUMPAD_DIVIDE:"NumpadDivide",NUMPAD_ENTER:"NumpadEnter",NUMPAD_MULTIPLY:"NumpadMultiply",PAGE_UP:"PageUp",PAGE_DOWN:"PageUp",UP:"ArrowUp",DOWN:"ArrowDown",LEFT:"ArrowLeft",RIGHT:"ArrowUp"}));var LOCALES=(/* unused pure expression or super */ null && ([]));var PLAIN_OBJECT_PROTOTYPES=[Object.prototype];// A list of special regular expression symbols.
43
+ var SPECIAL_REGEX_SEQUENCES=(/* unused pure expression or super */ null && (["-","[","]","(",")","^","$","*","+",".","{","}"]));// Saves a string with all css3 browser specific transition end event names.
44
+ var TRANSITION_END_EVENT_NAMES="transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd";
45
+
46
+ /***/ }),
47
+ /* 2 */,
48
+ /* 3 */
49
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
50
+
51
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
52
+ /* harmony export */ Do: function() { return /* binding */ _represent; },
53
+ /* harmony export */ Sj: function() { return /* binding */ determineType; }
54
+ /* harmony export */ });
55
+ /* unused harmony exports addDynamicGetterAndSetter, convertCircularObjectToJSON, convertMapToPlainObject, convertPlainObjectToMap, convertSubstringInPlainObject, copy, equals, evaluateDynamicData, evaluateAsyncDynamicData, removeKeysInEvaluation, extend, getProxyHandler, mask, modifyObject, removeKeyPrefixes, sort, unwrapProxy */
56
+ /* unused harmony import specifier */ var VALUE_COPY_SYMBOL;
57
+ /* unused harmony import specifier */ var IGNORE_NULL_AND_UNDEFINED_SYMBOL;
58
+ /* unused harmony import specifier */ var isMap;
59
+ /* unused harmony import specifier */ var isSet;
60
+ /* unused harmony import specifier */ var isObject;
61
+ /* unused harmony import specifier */ var isPlainObject;
62
+ /* unused harmony import specifier */ var isFunction;
63
+ /* unused harmony import specifier */ var isProxy;
64
+ /* unused harmony import specifier */ var isNotANumber;
65
+ /* unused harmony import specifier */ var evaluateOrThrowError;
66
+ /* unused harmony import specifier */ var escapeRegularExpressions;
67
+ /* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
68
+ /* harmony import */ var core_js_modules_es_regexp_flags_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(8);
69
+ /* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1);
70
+ /* harmony import */ var _indicators_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4);
1
71
  // #!/usr/bin/env babel-node
2
72
  // -*- coding: utf-8 -*-
3
- /** @module testHelper */
4
- 'use strict';
73
+ /** @module object *//* !
74
+ region header
75
+ [Project page](https://torben.website/clientnode)
76
+
77
+ Copyright Torben Sickert (info["~at~"]torben.website) 16.12.2012
78
+
79
+ License
80
+ -------
81
+
82
+ This library written by Torben Sickert stands under a creative commons
83
+ naming 3.0 unported license.
84
+ See https://creativecommons.org/licenses/by/3.0/deed.de
85
+ endregion
86
+ */function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArray(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}function _arrayWithoutHoles(r){if(Array.isArray(r))return _arrayLikeToArray(r)}function _regenerator(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function i(r,n,o,i){var c=n&&n.prototype instanceof Generator?n:Generator,u=Object.create(c.prototype);return _regeneratorDefine2(u,"_invoke",function(r,n,o){var i,c,u,f=0,p=o||[],y=!1,G={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function d(t,r){return i=t,c=0,u=e,G.n=r,a}};function d(r,n){for(c=r,u=n,t=0;!y&&f&&!o&&t<p.length;t++){var o,i=p[t],d=G.p,l=i[2];r>3?(o=l===n)&&(u=i[(c=i[4])?5:(c=3,3)],i[4]=i[5]=e):i[0]<=d&&((o=r<2&&d<i[1])?(c=0,G.v=n,G.n=i[1]):d<l&&(o=r<3||i[0]>n||n>l)&&(i[4]=r,i[5]=n,G.n=l,c=0))}if(o||r>1)return a;throw y=!0,n}return function(o,p,l){if(f>1)throw TypeError("Generator is already running");for(y&&1===p&&d(p,l),c=p,u=l;(t=c<2?e:u)||!y;){i||(c?c<3?(c>1&&(G.n=-1),d(c,u)):G.n=u:G.v=u);try{if(f=2,i){if(c||(o="next"),t=i[o]){if(!(t=t.call(i,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=i.return)&&t.call(i),c<2&&(u=TypeError("The iterator does not provide a '"+o+"' method"),c=1);i=e}else if((t=(y=G.n<0)?u:r.call(n,G))!==a)break}catch(t){i=e,c=1,u=t}finally{f=1}}return{value:t,done:y}}}(r,o,i),!0),u}var a={};function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}t=Object.getPrototypeOf;var c=[][n]?t(t([][n]())):(_regeneratorDefine2(t={},n,function(){return this}),t),u=GeneratorFunctionPrototype.prototype=Generator.prototype=Object.create(c);function f(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,GeneratorFunctionPrototype):(e.__proto__=GeneratorFunctionPrototype,_regeneratorDefine2(e,o,"GeneratorFunction")),e.prototype=Object.create(u),e}return GeneratorFunction.prototype=GeneratorFunctionPrototype,_regeneratorDefine2(u,"constructor",GeneratorFunctionPrototype),_regeneratorDefine2(GeneratorFunctionPrototype,"constructor",GeneratorFunction),GeneratorFunction.displayName="GeneratorFunction",_regeneratorDefine2(GeneratorFunctionPrototype,o,"GeneratorFunction"),_regeneratorDefine2(u),_regeneratorDefine2(u,o,"Generator"),_regeneratorDefine2(u,n,function(){return this}),_regeneratorDefine2(u,"toString",function(){return"[object Generator]"}),(_regenerator=function _regenerator(){return{w:i,m:f}})()}function _regeneratorDefine2(e,r,n,t){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}_regeneratorDefine2=function _regeneratorDefine(e,r,n,t){function o(r,n){_regeneratorDefine2(e,r,function(e){return this._invoke(r,n,e)})}r?i?i(e,r,{value:n,enumerable:!t,configurable:!t,writable:!t}):e[r]=n:(o("next",0),o("throw",1),o("return",2))},_regeneratorDefine2(e,r,n,t)}function asyncGeneratorStep(n,t,e,r,o,a,c){try{var i=n[a](c),u=i.value}catch(n){return void e(n)}i.done?t(u):Promise.resolve(u).then(r,o)}function _asyncToGenerator(n){return function(){var t=this,e=arguments;return new Promise(function(r,o){var a=n.apply(t,e);function _next(n){asyncGeneratorStep(a,r,o,_next,_throw,"next",n)}function _throw(n){asyncGeneratorStep(a,r,o,_next,_throw,"throw",n)}_next(void 0)})}}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)};function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t.return&&(u=t.return(),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _arrayWithHoles(r){if(Array.isArray(r))return r}function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t.return||t.return()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)};/**
87
+ * Adds dynamic getter and setter to any given data structure such as maps.
88
+ * @param object - Object to proxy.
89
+ * @param getterWrapper - Function to wrap each property get.
90
+ * @param setterWrapper - Function to wrap each property set.
91
+ * @param methodNames - Method names to perform actions on the given
92
+ * object.
93
+ * @param deep - Indicates to perform a deep wrapping of specified types.
94
+ * @param typesToExtend - Types which should be extended (Checks are
95
+ * performed via "value instanceof type".).
96
+ * @returns Returns given object wrapped with a dynamic getter proxy.
97
+ */var _addDynamicGetterAndSetter=function addDynamicGetterAndSetter(object,getterWrapper,setterWrapper,methodNames,deep,typesToExtend){if(getterWrapper===void 0){getterWrapper=null}if(setterWrapper===void 0){setterWrapper=null}if(methodNames===void 0){methodNames={}}if(deep===void 0){deep=true}if(typesToExtend===void 0){typesToExtend=[Object]}if(deep&&_typeof(object)==="object")if(Array.isArray(object)){var index=0;var _iterator=_createForOfIteratorHelper(object),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var value=_step.value;object[index]=_addDynamicGetterAndSetter(value,getterWrapper,setterWrapper,methodNames,deep);index+=1}}catch(err){_iterator.e(err)}finally{_iterator.f()}}else if(isMap(object)){var _iterator2=_createForOfIteratorHelper(object),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var _step2$value=_slicedToArray(_step2.value,2),key=_step2$value[0],_value=_step2$value[1];object.set(key,_addDynamicGetterAndSetter(_value,getterWrapper,setterWrapper,methodNames,deep))}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}}else if(isSet(object)){var cache=[];var _iterator3=_createForOfIteratorHelper(object),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var _value3=_step3.value;object.delete(_value3);cache.push(_addDynamicGetterAndSetter(_value3,getterWrapper,setterWrapper,methodNames,deep))}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}for(var _i=0,_cache=cache;_i<_cache.length;_i++){var _value2=_cache[_i];object.add(_value2)}}else if(object!==null)for(var _i2=0,_Object$entries=Object.entries(object);_i2<_Object$entries.length;_i2++){var _Object$entries$_i=_slicedToArray(_Object$entries[_i2],2),_key=_Object$entries$_i[0],_value4=_Object$entries$_i[1];object[_key]=_addDynamicGetterAndSetter(_value4,getterWrapper,setterWrapper,methodNames,deep)}if(getterWrapper||setterWrapper){var _iterator4=_createForOfIteratorHelper(typesToExtend),_step4;try{var _loop=function _loop(){var type=_step4.value;if(isObject(object)&&object instanceof type){var defaultHandler=getProxyHandler(object,methodNames);var handler=getProxyHandler(object,methodNames);if(getterWrapper)handler.get=function(_target,name){if(name==="__target__")return object;if(name==="__revoke__")return function(){revoke();return object};if(typeof object[name]==="function")return object[name];return getterWrapper(defaultHandler.get(proxy,name),name,object)};if(setterWrapper)handler.set=function(_target,name,value){return defaultHandler.set(proxy,name,setterWrapper(name,value,object))};var _Proxy$revocable=Proxy.revocable({},handler),proxy=_Proxy$revocable.proxy,revoke=_Proxy$revocable.revoke;return{v:proxy}}},_ret;for(_iterator4.s();!(_step4=_iterator4.n()).done;){_ret=_loop();if(_ret)return _ret.v}}catch(err){_iterator4.e(err)}finally{_iterator4.f()}}return object};/**
98
+ * Converts given object into its serialized JSON representation by
99
+ * replacing circular references with a given provided value.
100
+ *
101
+ * This method traverses given object recursively and tracks of seen and
102
+ * already serialized structures to reuse generated strings or mark a
103
+ * circular reference.
104
+ * @param object - Object to serialize.
105
+ * @param determineCircularReferenceValue - Callback to create a fallback
106
+ * value depending on given redundant value.
107
+ * @param numberOfSpaces - Number of spaces to use for string formatting.
108
+ * @returns The formatted JSON string.
109
+ */var convertCircularObjectToJSON=function convertCircularObjectToJSON(object,determineCircularReferenceValue,numberOfSpaces){if(determineCircularReferenceValue===void 0){determineCircularReferenceValue=function determineCircularReferenceValue(serializedValue){return serializedValue!==null&&serializedValue!==void 0?serializedValue:"__circularReference__"}}if(numberOfSpaces===void 0){numberOfSpaces=0}var seenObjects=new Map;var stringifier=function stringifier(object){var _replacer=function replacer(key,value){if(isObject(value)){var _seenObjects$get;if(seenObjects.has(value))return determineCircularReferenceValue((_seenObjects$get=seenObjects.get(value))!==null&&_seenObjects$get!==void 0?_seenObjects$get:null,key,value,seenObjects);// NOTE: Set before traversing deeper to detect cycles.
110
+ seenObjects.set(value,null);var result;if(Array.isArray(value)){result=[];var _iterator5=_createForOfIteratorHelper(value),_step5;try{for(_iterator5.s();!(_step5=_iterator5.n()).done;){var item=_step5.value;result.push(_replacer(null,item))}}catch(err){_iterator5.e(err)}finally{_iterator5.f()}}else{result={};for(var _i3=0,_Object$entries2=Object.entries(value);_i3<_Object$entries2.length;_i3++){var _Object$entries2$_i=_slicedToArray(_Object$entries2[_i3],2),name=_Object$entries2$_i[0],subValue=_Object$entries2$_i[1];result[name]=_replacer(name,subValue)}}seenObjects.set(value,result);return result}return value};return JSON.stringify(object,_replacer,numberOfSpaces)};return stringifier(object)};/**
111
+ * Converts given map and all nested found maps objects to corresponding
112
+ * object.
113
+ * @param object - Map to convert to.
114
+ * @param deep - Indicates whether to perform a recursive conversion.
115
+ * @returns Given map as object.
116
+ */var _convertMapToPlainObject=function convertMapToPlainObject(object,deep){if(deep===void 0){deep=true}if(_typeof(object)==="object"){if(isMap(object)){var newObject={};var _iterator6=_createForOfIteratorHelper(object),_step6;try{for(_iterator6.s();!(_step6=_iterator6.n()).done;){var _step6$value=_slicedToArray(_step6.value,2),key=_step6$value[0],value=_step6$value[1];if(deep)value=_convertMapToPlainObject(value,deep);if(["number","string"].includes(_typeof(key)))newObject[String(key)]=value}}catch(err){_iterator6.e(err)}finally{_iterator6.f()}return newObject}if(deep)if(isPlainObject(object))for(var _i4=0,_Object$entries3=Object.entries(object);_i4<_Object$entries3.length;_i4++){var _Object$entries3$_i=_slicedToArray(_Object$entries3[_i4],2),_key2=_Object$entries3$_i[0],_value5=_Object$entries3$_i[1];object[_key2]=_convertMapToPlainObject(_value5,deep)}else if(Array.isArray(object)){var index=0;for(var _i5=0,_arr=object;_i5<_arr.length;_i5++){var _value6=_arr[_i5];object[index]=_convertMapToPlainObject(_value6,deep);index+=1}}else if(isSet(object)){var cache=[];var _iterator7=_createForOfIteratorHelper(object),_step7;try{for(_iterator7.s();!(_step7=_iterator7.n()).done;){var _value8=_step7.value;object.delete(_value8);cache.push(_convertMapToPlainObject(_value8,deep))}}catch(err){_iterator7.e(err)}finally{_iterator7.f()}for(var _i6=0,_cache2=cache;_i6<_cache2.length;_i6++){var _value7=_cache2[_i6];object.add(_value7)}}}return object};/**
117
+ * Converts given plain object and all nested found objects to
118
+ * corresponding map.
119
+ * @param object - Object to convert to.
120
+ * @param deep - Indicates whether to perform a recursive conversion.
121
+ * @returns Given object as map.
122
+ */var _convertPlainObjectToMap=function convertPlainObjectToMap(object,deep){if(deep===void 0){deep=true}if(_typeof(object)==="object"){if(isPlainObject(object)){var newObject=new Map;for(var _i7=0,_Object$entries4=Object.entries(object);_i7<_Object$entries4.length;_i7++){var _Object$entries4$_i=_slicedToArray(_Object$entries4[_i7],2),key=_Object$entries4$_i[0],value=_Object$entries4$_i[1];if(deep)object[key]=_convertPlainObjectToMap(value,deep);newObject.set(key,object[key])}return newObject}if(deep)if(Array.isArray(object)){var index=0;for(var _i8=0,_arr2=object;_i8<_arr2.length;_i8++){var _value9=_arr2[_i8];object[index]=_convertPlainObjectToMap(_value9,deep);index+=1}}else if(isMap(object)){var _iterator8=_createForOfIteratorHelper(object),_step8;try{for(_iterator8.s();!(_step8=_iterator8.n()).done;){var _step8$value=_slicedToArray(_step8.value,2),_key3=_step8$value[0],_value0=_step8$value[1];object.set(_key3,_convertPlainObjectToMap(_value0,deep))}}catch(err){_iterator8.e(err)}finally{_iterator8.f()}}else if(isSet(object)){var cache=[];var _iterator9=_createForOfIteratorHelper(object),_step9;try{for(_iterator9.s();!(_step9=_iterator9.n()).done;){var _value10=_step9.value;object.delete(_value10);cache.push(_convertPlainObjectToMap(_value10,deep))}}catch(err){_iterator9.e(err)}finally{_iterator9.f()}for(var _i9=0,_cache3=cache;_i9<_cache3.length;_i9++){var _value1=_cache3[_i9];object.add(_value1)}}}return object};/**
123
+ * Replaces given pattern in each value in given object recursively with
124
+ * given string replacement.
125
+ * @param object - Object to convert substrings in.
126
+ * @param pattern - Regular expression to replace.
127
+ * @param replacement - String to use as replacement for found patterns.
128
+ * @returns Converted object with replaced patterns.
129
+ */var _convertSubstringInPlainObject=function convertSubstringInPlainObject(object,pattern,replacement){for(var _i0=0,_Object$entries5=Object.entries(object);_i0<_Object$entries5.length;_i0++){var _Object$entries5$_i=_slicedToArray(_Object$entries5[_i0],2),key=_Object$entries5$_i[0],value=_Object$entries5$_i[1];if(isPlainObject(value))object[key]=_convertSubstringInPlainObject(value,pattern,replacement);else if(typeof value==="string")object[key]=value.replace(pattern,replacement)}return object};/* eslint-disable jsdoc/require-description-complete-sentence *//**
130
+ * Copies given object (of any type) into optionally given destination.
131
+ * @param source - Object to copy.
132
+ * @param copyBlobs - Determines whether to copy blobs as well.
133
+ * @param recursionLimit - Specifies how deep we should traverse into given
134
+ * object recursively.
135
+ * @param recursionEndValue - Indicates which value to use for recursion ends.
136
+ * Usually a reference to corresponding source value will be used.
137
+ * @param destination - Target to copy source to.
138
+ * @param cyclic - Indicates whether known sub structures should be copied or
139
+ * referenced (if "true" endless loops can occur if source has cyclic
140
+ * structures).
141
+ * @param knownReferences - Used to avoid traversing loops and not to copy
142
+ * references e.g. to objects not to copy (e.g. symbol polyfills).
143
+ * @param recursionLevel - Internally used to track current recursion level in
144
+ * given source data structure.
145
+ * @returns Value "true" if both objects are equal and "false" otherwise.
146
+ */var _copy=function copy(source,copyBlobs,recursionLimit,recursionEndValue,destination,cyclic,knownReferences,recursionLevel){if(copyBlobs===void 0){copyBlobs=false}if(recursionLimit===void 0){recursionLimit=-1}if(recursionEndValue===void 0){recursionEndValue=VALUE_COPY_SYMBOL}if(destination===void 0){destination=null}if(cyclic===void 0){cyclic=false}if(knownReferences===void 0){knownReferences=[]}if(recursionLevel===void 0){recursionLevel=0}/* eslint-enable jsdoc/require-description-complete-sentence */if(isObject(source))if(destination){if(source===destination)throw new Error("Can't copy because source and destination are "+"identical.");if(!cyclic&&![undefined,null].includes(source)){var index=knownReferences.indexOf(source);if(index!==-1)return knownReferences[index];knownReferences.push(source)}var copyValue=function copyValue(value){if(recursionLimit!==-1&&recursionLimit<recursionLevel+1)return recursionEndValue===VALUE_COPY_SYMBOL?value:recursionEndValue;var result=_copy(value,copyBlobs,recursionLimit,recursionEndValue,null,cyclic,knownReferences,recursionLevel+1);if(!cyclic&&![undefined,null].includes(value)&&_typeof(value)==="object")knownReferences.push(value);return result};if(Array.isArray(source)){var _iterator0=_createForOfIteratorHelper(source),_step0;try{for(_iterator0.s();!(_step0=_iterator0.n()).done;){var item=_step0.value;destination.push(copyValue(item))}}catch(err){_iterator0.e(err)}finally{_iterator0.f()}}else if(source instanceof Map){var _iterator1=_createForOfIteratorHelper(source),_step1;try{for(_iterator1.s();!(_step1=_iterator1.n()).done;){var _step1$value=_slicedToArray(_step1.value,2),key=_step1$value[0],value=_step1$value[1];destination.set(key,copyValue(value))}}catch(err){_iterator1.e(err)}finally{_iterator1.f()}}else if(source instanceof Set){var _iterator10=_createForOfIteratorHelper(source),_step10;try{for(_iterator10.s();!(_step10=_iterator10.n()).done;){var _value11=_step10.value;destination.add(copyValue(_value11))}}catch(err){_iterator10.e(err)}finally{_iterator10.f()}}else for(var _i1=0,_Object$entries6=Object.entries(source);_i1<_Object$entries6.length;_i1++){var _Object$entries6$_i=_slicedToArray(_Object$entries6[_i1],2),_key4=_Object$entries6$_i[0],_value12=_Object$entries6$_i[1];try{destination[_key4]=copyValue(_value12)}catch(error){throw new Error("Failed to copy property value object \""+"".concat(_key4,"\": ").concat(_represent(error)),{cause:error})}}}else{if(Array.isArray(source))return _copy(source,copyBlobs,recursionLimit,recursionEndValue,[],cyclic,knownReferences,recursionLevel);if(source instanceof Map)return _copy(source,copyBlobs,recursionLimit,recursionEndValue,new Map,cyclic,knownReferences,recursionLevel);if(source instanceof Set)return _copy(source,copyBlobs,recursionLimit,recursionEndValue,new Set,cyclic,knownReferences,recursionLevel);if(source instanceof Date)return new Date(source.getTime());if(source instanceof RegExp){var modifier=/[^/]*$/.exec(source.toString());destination=new RegExp(source.source,modifier?modifier[0]:undefined);destination.lastIndex=source.lastIndex;return destination}if(typeof Blob!=="undefined"&&source instanceof Blob)return copyBlobs?source.slice(0,source.size,source.type):source;return _copy(source,copyBlobs,recursionLimit,recursionEndValue,{},cyclic,knownReferences,recursionLevel)}return destination||source};/**
147
+ * Determine the internal JavaScript [[Class]] of an object.
148
+ * @param value - Value to analyze.
149
+ * @returns Name of determined type.
150
+ */var determineType=function determineType(value){if([null,undefined].includes(value))return String(value);var type=_typeof(value);if(["function","object"].includes(type)&&"toString"in value){var stringRepresentation=Object.prototype.toString.call(value);if(Object.prototype.hasOwnProperty.call(_constants_js__WEBPACK_IMPORTED_MODULE_2__/* .CLASS_TO_TYPE_MAPPING */ .rq,stringRepresentation))return _constants_js__WEBPACK_IMPORTED_MODULE_2__/* .CLASS_TO_TYPE_MAPPING */ .rq[stringRepresentation]}return type};/**
151
+ * Returns true if given items are equal for given property list. If
152
+ * property list isn't set all properties will be checked. All keys which
153
+ * starts with one of the exception prefixes will be omitted.
154
+ * @param firstValue - First object to compare.
155
+ * @param secondValue - Second object to compare.
156
+ * @param givenOptions - Options to define how to compare.
157
+ * @param givenOptions.properties - Property names to check. Check all if
158
+ * "null" is selected (default).
159
+ * @param givenOptions.deep - Recursion depth negative values means
160
+ * infinitely deep (default).
161
+ * @param givenOptions.exceptionPrefixes - Property prefixes which
162
+ * indicates properties to ignore.
163
+ * @param givenOptions.ignoreFunctions - Indicates whether functions have
164
+ * to be identical to interpret is as equal. If set to "true" two functions
165
+ * will be assumed to be equal (default).
166
+ * @param givenOptions.compareBlobs - Indicates whether binary data should
167
+ * be converted to a base64 string to compare their content. Makes this
168
+ * function asynchronous in browsers and potentially takes a lot of
169
+ * resources.
170
+ * @returns Value "true" if both objects are equal and "false" otherwise.
171
+ * If "compareBlobs" is activated, and we're running in a browser like
172
+ * environment and binary data is given, then a promise wrapping the
173
+ * determined boolean values is returned.
174
+ */var _equals=function equals(firstValue,secondValue,givenOptions){if(givenOptions===void 0){givenOptions={}}var options=_objectSpread({compareBlobs:false,deep:-1,exceptionPrefixes:[],ignoreFunctions:true,properties:null,returnReasonIfNotEqual:false},givenOptions);if(options.ignoreFunctions&&isFunction(firstValue)&&isFunction(secondValue)||firstValue===secondValue||isNotANumber(firstValue)&&isNotANumber(secondValue)||firstValue instanceof RegExp&&secondValue instanceof RegExp&&firstValue.toString()===secondValue.toString()&&firstValue.flags.split("").sort().join("")===secondValue.flags.split("").sort().join("")||firstValue instanceof Date&&secondValue instanceof Date&&(isNaN(firstValue.getTime())&&isNaN(secondValue.getTime())||!isNaN(firstValue.getTime())&&!isNaN(secondValue.getTime())&&firstValue.getTime()===secondValue.getTime())||options.compareBlobs&&eval("typeof Buffer")!=="undefined"&&Object.prototype.hasOwnProperty.call(eval("Buffer"),"isBuffer")&&firstValue instanceof eval("Buffer")&&secondValue instanceof eval("Buffer")&&firstValue.toString("base64")===secondValue.toString("base64"))return true;if(options.compareBlobs&&typeof Blob!=="undefined"&&firstValue instanceof Blob&&secondValue instanceof Blob)return new Promise(function(resolve){var values=[];for(var _i10=0,_arr3=[firstValue,secondValue];_i10<_arr3.length;_i10++){var value=_arr3[_i10];var fileReader=new FileReader;fileReader.onload=function(event){if(event.target===null)values.push(null);else values.push(event.target.result);if(values.length===2)if(values[0]===values[1])resolve(true);else resolve(options.returnReasonIfNotEqual?">>> Blob(".concat(_represent(values[0]),") !== ")+"Blob(".concat(_represent(values[1]),")"):false)};fileReader.readAsDataURL(value)}});if(isPlainObject(firstValue)&&isPlainObject(secondValue)&&!(firstValue instanceof RegExp||secondValue instanceof RegExp)||Array.isArray(firstValue)&&Array.isArray(secondValue)&&firstValue.length===secondValue.length||determineType(firstValue)===determineType(secondValue)&&["map","set"].includes(determineType(firstValue))&&firstValue.size===secondValue.size){var promises=[];for(var _i11=0,_arr4=[[firstValue,secondValue],[secondValue,firstValue]];_i11<_arr4.length;_i11++){var _arr4$_i=_slicedToArray(_arr4[_i11],2),first=_arr4$_i[0],second=_arr4$_i[1];var firstIsArray=Array.isArray(first);if(firstIsArray&&(!Array.isArray(second)||first.length!==second.length))return options.returnReasonIfNotEqual?".length":false;var firstIsMap=isMap(first);if(firstIsMap&&(!isMap(second)||first.size!==second.size))return options.returnReasonIfNotEqual?".size":false;var firstIsSet=isSet(first);if(firstIsSet&&(!isSet(second)||first.size!==second.size))return options.returnReasonIfNotEqual?".size":false;if(firstIsArray){var index=0;var _loop2=function _loop2(){var value=_arr5[_i12];if(options.deep!==0){var result=_equals(value,second[index],_objectSpread(_objectSpread({},options),{},{deep:options.deep-1}));if(!result)return{v:false};var currentIndex=index;var determineResult=function determineResult(result){var _$$result$;return typeof result==="string"?"[".concat(String(currentIndex),"]")+((_$$result$={"[":"",">":" "}[result[0]])!==null&&_$$result$!==void 0?_$$result$:".")+result:result};if(Object.prototype.hasOwnProperty.call(result,"then"))promises.push(result.then(determineResult));if(typeof result==="string")return{v:determineResult(result)}}index+=1},_ret2;for(var _i12=0,_arr5=first;_i12<_arr5.length;_i12++){_ret2=_loop2();if(_ret2)return _ret2.v}}else if(firstIsMap){var _iterator11=_createForOfIteratorHelper(first),_step11;try{var _loop3=function _loop3(){var _step11$value=_slicedToArray(_step11.value,2),key=_step11$value[0],value=_step11$value[1];if(options.deep!==0){var result=_equals(value,second.get(key),_objectSpread(_objectSpread({},options),{},{deep:options.deep-1}));if(!result)return{v:false};var determineResult=function determineResult(result){var _$$result$2;return typeof result==="string"?"get(".concat(_represent(key),")")+((_$$result$2={"[":"",">":" "}[result[0]])!==null&&_$$result$2!==void 0?_$$result$2:".")+result:result};if(Object.prototype.hasOwnProperty.call(result,"then"))promises.push(result.then(determineResult));if(typeof result==="string")return{v:determineResult(result)}}},_ret3;for(_iterator11.s();!(_step11=_iterator11.n()).done;){_ret3=_loop3();if(_ret3)return _ret3.v}}catch(err){_iterator11.e(err)}finally{_iterator11.f()}}else if(firstIsSet){var _iterator12=_createForOfIteratorHelper(first),_step12;try{var _loop4=function _loop4(){var value=_step12.value;if(options.deep!==0){var equal=false;var subPromises=[];/*
175
+ NOTE: Check if their exists at least one being
176
+ equally.
177
+ */var _iterator13=_createForOfIteratorHelper(second),_step13;try{for(_iterator13.s();!(_step13=_iterator13.n()).done;){var _secondValue=_step13.value;var result=_equals(value,_secondValue,_objectSpread(_objectSpread({},options),{},{deep:options.deep-1}));if(typeof result==="boolean"){if(result){equal=true;break}}else subPromises.push(result)}}catch(err){_iterator13.e(err)}finally{_iterator13.f()}var determineResult=function determineResult(equal){return equal?true:options.returnReasonIfNotEqual?">>> {-> ".concat(_represent(value)," not found}"):false};if(equal)/*
178
+ NOTE: We do not have to wait for promises to be
179
+ resolved when one match could be found.
180
+ */return 0;// continue
181
+ if(subPromises.length)promises.push(new Promise(function(resolve){Promise.all(subPromises).then(function(results){resolve(determineResult(results.some(function(result){return result})))},function(){// Do nothing.
182
+ })}));return{v:determineResult(false)}}},_ret4;for(_iterator12.s();!(_step12=_iterator12.n()).done;){_ret4=_loop4();if(_ret4===0)continue;if(_ret4)return _ret4.v}}catch(err){_iterator12.e(err)}finally{_iterator12.f()}}else{var _loop5=function _loop5(){var _Object$entries7$_i=_slicedToArray(_Object$entries7[_i13],2),key=_Object$entries7$_i[0],value=_Object$entries7$_i[1];if(options.properties&&!options.properties.includes(key))return 0;// break
183
+ var doBreak=false;var _iterator14=_createForOfIteratorHelper(options.exceptionPrefixes),_step14;try{for(_iterator14.s();!(_step14=_iterator14.n()).done;){var exceptionPrefix=_step14.value;if(key.startsWith(exceptionPrefix)){doBreak=true;break}}}catch(err){_iterator14.e(err)}finally{_iterator14.f()}if(doBreak)return 0;// break
184
+ if(options.deep!==0){var result=_equals(value,second[key],_objectSpread(_objectSpread({},options),{},{deep:options.deep-1}));if(!result)return{v:false};var determineResult=function determineResult(result){var _$$result$3;return typeof result==="string"?key+((_$$result$3={"[":"",">":" "}[result[0]])!==null&&_$$result$3!==void 0?_$$result$3:".")+result:result};if(Object.prototype.hasOwnProperty.call(result,"then"))promises.push(result.then(determineResult));if(typeof result==="string")return{v:determineResult(result)}}},_ret5;for(var _i13=0,_Object$entries7=Object.entries(first);_i13<_Object$entries7.length;_i13++){_ret5=_loop5();if(_ret5===0)break;if(_ret5)return _ret5.v}}}if(promises.length)return new Promise(function(resolve){Promise.all(promises).then(function(results){var _iterator15=_createForOfIteratorHelper(results),_step15;try{for(_iterator15.s();!(_step15=_iterator15.n()).done;){var result=_step15.value;if(!result||typeof result==="string"){resolve(result);break}}}catch(err){_iterator15.e(err)}finally{_iterator15.f()}resolve(true)},function(){// Do nothing.
185
+ })});return true}return options.returnReasonIfNotEqual?">>> ".concat(_represent(firstValue)," !== ").concat(_represent(secondValue)):false};/**
186
+ * Wraps given data structure into proxies recursively to evaluate and resolve
187
+ * each get request to data having an object with indicating keys and replaces
188
+ * that object with corresponding evaluated values. All nested objects are
189
+ * wrapped with a proxy to resolve chains of referencing expressions as well.
190
+ * @param object - Given mapping to resolve.
191
+ * @param givenOptions - Options to configure evaluation.
192
+ * @param givenOptions.scope - Scope to use evaluate again.
193
+ * @param givenOptions.selfReferenceName - Name to use for reference to given
194
+ * object.
195
+ * @param givenOptions.expressionIndicatorKey - Indicator property name to mark
196
+ * a value to evaluate.
197
+ * @param givenOptions.executionIndicatorKey - Indicator property name to mark
198
+ * a value to evaluate.
199
+ * @returns Evaluated given mapping.
200
+ */var evaluateDynamicData=function evaluateDynamicData(object,givenOptions){if(givenOptions===void 0){givenOptions={}}var options=_objectSpread({scope:{},selfReferenceName:"self",expressionIndicatorKey:"__evaluate__",executionIndicatorKey:"__execute__"},givenOptions);if(_typeof(object)!=="object"||object===null)return object;if(!(options.selfReferenceName in options.scope))options.scope[options.selfReferenceName]=object;var internalEvaluateAndThrowError=function internalEvaluateAndThrowError(code,type){if(type===void 0){type=options.expressionIndicatorKey}return evaluateOrThrowError(code,{scope:options.scope,async:false,execute:type===options.executionIndicatorKey})};var _addProxyRecursively=function addProxyRecursively(data){if(_typeof(data)!=="object"||data===null||typeof Proxy==="undefined")return data;for(var _i14=0,_Object$entries8=Object.entries(data);_i14<_Object$entries8.length;_i14++){var _Object$entries8$_i=_slicedToArray(_Object$entries8[_i14],2),key=_Object$entries8$_i[0],givenValue=_Object$entries8$_i[1];if(key!=="__target__"&&isObject(givenValue)){var value=givenValue;_addProxyRecursively(value);// NOTE: We only wrap needed objects for performance reasons.
201
+ if(Object.prototype.hasOwnProperty.call(value,options.expressionIndicatorKey)||Object.prototype.hasOwnProperty.call(value,options.executionIndicatorKey)){var backup=value;data[key]=new Proxy(value,{get:function get(target,key){if(key==="__target__")return target;if(key==="hasOwnProperty")/*
202
+ eslint-disable
203
+ @typescript-eslint/unbound-method
204
+ */return target[key];/*
205
+ eslint-enable
206
+ @typescript-eslint/unbound-method
207
+ *//*
208
+ NOTE: Very complicated section, do only
209
+ changes while having good tests.
210
+ */for(var _i15=0,_arr6=[options.expressionIndicatorKey,options.executionIndicatorKey];_i15<_arr6.length;_i15++){var type=_arr6[_i15];if(key===type&&typeof target[key]==="string")return _resolve(internalEvaluateAndThrowError(target[key],type))}var resolvedTarget=_resolve(target);if(key==="toString"){var result=internalEvaluateAndThrowError(resolvedTarget);return result[key].bind(result)}if(typeof key!=="string"){var _result$key;var _result=internalEvaluateAndThrowError(resolvedTarget);if((_result$key=_result[key])!==null&&_result$key!==void 0&&_result$key.bind)return _result[key].bind(_result);return _result[key]}for(var _i16=0,_arr7=[options.expressionIndicatorKey,options.executionIndicatorKey];_i16<_arr7.length;_i16++){var _type=_arr7[_i16];if(Object.prototype.hasOwnProperty.call(target,_type)){var _result2$key;var _result2=_resolve(internalEvaluateAndThrowError(target[_type],_type));if((_result2$key=_result2[key])!==null&&_result2$key!==void 0&&_result2$key.bind)return _result2[key].bind(_result2);return _result2[key]}}return resolvedTarget[key];// End of complicated stuff.
211
+ },ownKeys:function ownKeys(target){for(var _i17=0,_arr8=[options.expressionIndicatorKey,options.executionIndicatorKey];_i17<_arr8.length;_i17++){var type=_arr8[_i17];if(Object.prototype.hasOwnProperty.call(target,type))return Object.getOwnPropertyNames(_resolve(internalEvaluateAndThrowError(target[type],type)))}return Object.getOwnPropertyNames(target)}});/*
212
+ NOTE: Known proxy polyfills does not provide the
213
+ "__target__" api.
214
+ */if(!data[key].__target__)data[key].__target__=backup}}}return data};var _resolve=function resolve(data){if(isObject(data)){if(isProxy(data)){// NOTE: We have to skip "ownKeys" proxy trap here.
215
+ for(var _i18=0,_arr9=[options.expressionIndicatorKey,options.executionIndicatorKey];_i18<_arr9.length;_i18++){var type=_arr9[_i18];if(Object.prototype.hasOwnProperty.call(data,type))return data[type]}data=data.__target__}for(var _i19=0,_Object$entries9=Object.entries(data);_i19<_Object$entries9.length;_i19++){var _Object$entries9$_i=_slicedToArray(_Object$entries9[_i19],2),key=_Object$entries9$_i[0],value=_Object$entries9$_i[1];if([options.expressionIndicatorKey,options.executionIndicatorKey].includes(key)){if(typeof Proxy==="undefined")return _resolve(internalEvaluateAndThrowError(value));return value}data[key]=_resolve(value)}}return data};options.scope.resolve=_resolve;var _removeProxyRecursively=function removeProxyRecursively(data){if(isObject(data))for(var _i20=0,_Object$entries0=Object.entries(data);_i20<_Object$entries0.length;_i20++){var _Object$entries0$_i=_slicedToArray(_Object$entries0[_i20],2),key=_Object$entries0$_i[0],value=_Object$entries0$_i[1];if(key!=="__target__"&&value!==null&&["function","undefined"].includes(_typeof(value))){var target=value.__target__;if(typeof target!=="undefined")data[key]=target;_removeProxyRecursively(value)}}return data};if(Object.prototype.hasOwnProperty.call(object,options.expressionIndicatorKey))return internalEvaluateAndThrowError(object[options.expressionIndicatorKey]);else if(Object.prototype.hasOwnProperty.call(object,options.executionIndicatorKey))return internalEvaluateAndThrowError(object[options.executionIndicatorKey],options.executionIndicatorKey);return _removeProxyRecursively(_resolve(_addProxyRecursively(object)))};/**
216
+ * Searches for indicating keys and replaces that data with corresponding
217
+ * evaluated and promise resolved value.
218
+ * @param data - Given mapping to resolve.
219
+ * @param givenOptions - Options to configure evaluation.
220
+ * @param givenOptions.scope - Scope to use evaluate again.
221
+ * @param givenOptions.selfReferenceName - Name to use for reference to given
222
+ * object.
223
+ * @param givenOptions.expressionIndicatorKey - Indicator property name to mark
224
+ * a value to evaluate.
225
+ * @param givenOptions.executionIndicatorKey - Indicator property name to mark
226
+ * a value to evaluate.
227
+ * @returns Evaluated given mapping.
228
+ */var _evaluateAsyncDynamicData=/*#__PURE__*/(/* unused pure expression or super */ null && (function(){var _evaluateAsyncDynamicData2=_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(data,givenOptions){var options,result,index,_iterator16,_step16,item,_i21,_Object$entries1,_Object$entries1$_i,key,value,_t;return _regenerator().w(function(_context){while(1)switch(_context.p=_context.n){case 0:if(givenOptions===void 0){givenOptions={}}options=_objectSpread({scope:{},selfReferenceName:"self",expressionIndicatorKey:"__async_evaluate__",executionIndicatorKey:"__async_execute__"},givenOptions);if(isObject(data)){_context.n=1;break}return _context.a(2,data);case 1:if(!(options.selfReferenceName in options.scope))options.scope[options.selfReferenceName]=data;result=data;if(!Array.isArray(data)){_context.n=10;break}index=0;_iterator16=_createForOfIteratorHelper(data);_context.p=2;_iterator16.s();case 3:if((_step16=_iterator16.n()).done){_context.n=6;break}item=_step16.value;_context.n=4;return _evaluateAsyncDynamicData(item,options);case 4:result[index]=_context.v;index+=1;case 5:_context.n=3;break;case 6:_context.n=8;break;case 7:_context.p=7;_t=_context.v;_iterator16.e(_t);case 8:_context.p=8;_iterator16.f();return _context.f(8);case 9:return _context.a(2,result);case 10:_i21=0,_Object$entries1=Object.entries(data);case 11:if(!(_i21<_Object$entries1.length)){_context.n=16;break}_Object$entries1$_i=_slicedToArray(_Object$entries1[_i21],2),key=_Object$entries1$_i[0],value=_Object$entries1$_i[1];if(![options.expressionIndicatorKey,options.executionIndicatorKey].includes(key)){_context.n=13;break}_context.n=12;return evaluateOrThrowError(value,{scope:options.scope,async:true,execute:key===options.executionIndicatorKey});case 12:return _context.a(2,_context.v);case 13:_context.n=14;return _evaluateAsyncDynamicData(value,options);case 14:result[key]=_context.v;case 15:_i21++;_context.n=11;break;case 16:return _context.a(2,result)}},_callee,null,[[2,7,8,9]])}));function evaluateAsyncDynamicData(_x,_x2){return _evaluateAsyncDynamicData2.apply(this,arguments)}return evaluateAsyncDynamicData}()));/**
229
+ * Removes properties in objects where a dynamic indicator lives.
230
+ * @param data - Object to traverse recursively.
231
+ * @param expressionIndicators - Property key to remove.
232
+ * @returns Given object with removed properties.
233
+ */var _removeKeysInEvaluation=function removeKeysInEvaluation(data,expressionIndicators){if(expressionIndicators===void 0){expressionIndicators=["__evaluate__","__execute__"]}for(var _i22=0,_Object$entries10=Object.entries(data);_i22<_Object$entries10.length;_i22++){var _Object$entries10$_i=_slicedToArray(_Object$entries10[_i22],2),key=_Object$entries10$_i[0],value=_Object$entries10$_i[1];if(!expressionIndicators.includes(key)&&expressionIndicators.some(function(name){return Object.prototype.hasOwnProperty.call(data,name)}))delete data[key];else if(isPlainObject(value))_removeKeysInEvaluation(value,expressionIndicators)}return data};/**
234
+ * Extends given target object with given sources object. As target and
235
+ * sources many expandable types are allowed but target and sources have to
236
+ * come from the same type.
237
+ * @param targetOrDeepIndicator - Maybe the target or deep indicator.
238
+ * @param targetOrSource - Target or source object; depending on first
239
+ * argument.
240
+ * @param additionalSources - Source objects to extend into target.
241
+ * @returns Returns given target extended with all given sources.
242
+ */var _extend=function extend(targetOrDeepIndicator,targetOrSource){var deep=false;for(var _len=arguments.length,additionalSources=new Array(_len>2?_len-2:0),_key5=2;_key5<_len;_key5++){additionalSources[_key5-2]=arguments[_key5]}var sources=additionalSources;var target;if(targetOrDeepIndicator===IGNORE_NULL_AND_UNDEFINED_SYMBOL||typeof targetOrDeepIndicator==="boolean"){// Handle a deep copy situation and skip deep indicator and target.
243
+ deep=targetOrDeepIndicator;target=targetOrSource}else{target=targetOrDeepIndicator;if(isObject(targetOrSource))sources=[targetOrSource].concat(_toConsumableArray(sources));else if(targetOrSource!==undefined)target=targetOrSource}var mergeValue=function mergeValue(targetValue,value){if(value===targetValue)return targetValue;// Traverse recursively if we're merging plain objects or maps.
244
+ if(deep&&value&&(isPlainObject(value)||isMap(value))){var clone;if(isMap(value))clone=targetValue&&isMap(targetValue)?targetValue:new Map;else clone=targetValue&&isPlainObject(targetValue)?targetValue:{};return _extend(deep,clone,value)}return value};var _iterator17=_createForOfIteratorHelper(sources),_step17;try{for(_iterator17.s();!(_step17=_iterator17.n()).done;){var source=_step17.value;var targetType=_typeof(target);var sourceType=_typeof(source);if(isMap(target))targetType+=" Map";if(isMap(source))sourceType+=" Map";if(targetType===sourceType&&target!==source){if(isMap(target)&&isMap(source)){var _iterator18=_createForOfIteratorHelper(source),_step18;try{for(_iterator18.s();!(_step18=_iterator18.n()).done;){var _step18$value=_slicedToArray(_step18.value,2),key=_step18$value[0],value=_step18$value[1];target.set(key,mergeValue(target.get(key),value))}}catch(err){_iterator18.e(err)}finally{_iterator18.f()}}else if(isObject(target)&&!Array.isArray(target)&&!(typeof Blob!=="undefined"&&target instanceof Blob)&&isObject(source)&&!Array.isArray(source)&&!(typeof Blob!=="undefined"&&source instanceof Blob)){for(var _i23=0,_Object$entries11=Object.entries(source);_i23<_Object$entries11.length;_i23++){var _Object$entries11$_i=_slicedToArray(_Object$entries11[_i23],2),_key6=_Object$entries11$_i[0],_value13=_Object$entries11$_i[1];if(!(deep===IGNORE_NULL_AND_UNDEFINED_SYMBOL&&[null,undefined].includes(_value13)))target[_key6]=mergeValue(target[_key6],_value13)}}else target=source;}else target=source}}catch(err){_iterator17.e(err)}finally{_iterator17.f()}return target};/**
245
+ * Generates a proxy handler which forwards all operations to given object
246
+ * as there wouldn't be a proxy.
247
+ * @param target - Object to proxy.
248
+ * @param methodNames - Mapping of operand name to object specific method
249
+ * name.
250
+ * @returns Determined proxy handler.
251
+ */var getProxyHandler=function getProxyHandler(target,methodNames){if(methodNames===void 0){methodNames={}}methodNames=_objectSpread({delete:"[]",get:"[]",has:"[]",set:"[]"},methodNames);return{deleteProperty:function deleteProperty(_targetObject,key){if(methodNames.delete==="[]"&&typeof key==="string")delete target[key];else return target[methodNames.delete](key);return true},get:function get(_targetObject,key){if(methodNames.get==="[]"&&typeof key==="string")return target[key];return target[methodNames.get](key)},has:function has(_targetObject,key){if(methodNames.has==="[]")return key in target;return target[methodNames.has](key)},set:function set(_targetObject,key,value){if(methodNames.set==="[]"&&typeof key==="string")target[key]=value;else return target[methodNames.set](key,value);return true}}};/**
252
+ * Slices all properties from given object which does not match provided
253
+ * object mask. Items can be explicitly whitelisted via "include" mask
254
+ * configuration or black listed via "exclude" mask configuration.
255
+ * @param object - Object to slice.
256
+ * @param maskConfiguration - Mask configuration.
257
+ * @returns Given but sliced object. If (nested) object will be modified a
258
+ * flat copy of that object will be returned.
259
+ */var _mask=function mask(object,maskConfiguration){maskConfiguration=_objectSpread({exclude:false,include:true},maskConfiguration);if(maskConfiguration.exclude===true||Array.isArray(maskConfiguration.exclude)&&maskConfiguration.exclude.length===0||maskConfiguration.include===false||_typeof(object)!=="object")return{};var exclude=Array.isArray(maskConfiguration.exclude)?maskConfiguration.exclude.reduce(function(mask,key){return _objectSpread(_objectSpread({},mask),{},_defineProperty({},key,true))},{}):maskConfiguration.exclude;var include=Array.isArray(maskConfiguration.include)?maskConfiguration.include.reduce(function(mask,key){return _objectSpread(_objectSpread({},mask),{},_defineProperty({},key,true))},{}):maskConfiguration.include;var result={};if(isPlainObject(include)){for(var _i24=0,_Object$entries12=Object.entries(include);_i24<_Object$entries12.length;_i24++){var _Object$entries12$_i=_slicedToArray(_Object$entries12[_i24],2),key=_Object$entries12$_i[0],value=_Object$entries12$_i[1];if(Object.prototype.hasOwnProperty.call(object,key))if(value===true)result[key]=object[key];else if((isPlainObject(value)||Array.isArray(value)&&value.length)&&_typeof(object[key])==="object")result[key]=_mask(object[key],{include:value})}}else// In this branch "mask.include === true" holds.
260
+ result=object;if(isPlainObject(exclude)){var useCopy=false;var copy=_objectSpread({},result);for(var _i25=0,_Object$entries13=Object.entries(exclude);_i25<_Object$entries13.length;_i25++){var _Object$entries13$_i=_slicedToArray(_Object$entries13[_i25],2),_key7=_Object$entries13$_i[0],_value14=_Object$entries13$_i[1];if(Object.prototype.hasOwnProperty.call(copy,_key7))if(_value14===true){useCopy=true;delete copy[_key7]}else if((isPlainObject(_value14)||Array.isArray(_value14)&&_value14.length)&&_typeof(copy[_key7])==="object"){var current=copy[_key7];copy[_key7]=_mask(copy[_key7],{exclude:_value14});if(copy[_key7]!==current)useCopy=true}}if(useCopy)result=copy}return result};/**
261
+ * Modifies given target corresponding to given source and removes source
262
+ * modification infos.
263
+ * @param target - Object to modify.
264
+ * @param source - Source object to load modifications from.
265
+ * @param removeIndicatorKey - Indicator property name or value to mark a
266
+ * value to remove from object or list.
267
+ * @param prependIndicatorKey - Indicator property name to mark a value to
268
+ * prepend to target list.
269
+ * @param appendIndicatorKey - Indicator property name to mark a value to
270
+ * append to target list.
271
+ * @param positionPrefix - Indicates a prefix to use a value on given
272
+ * position to add or remove.
273
+ * @param positionSuffix - Indicates a suffix to use a value on given
274
+ * position to add or remove.
275
+ * @param parentSource - Source context to remove modification info from
276
+ * (usually only needed internally).
277
+ * @param parentKey - Source key in given source context to remove
278
+ * modification info from (usually only needed internally).
279
+ * @returns Given target modified with given source.
280
+ */var _modifyObject=function modifyObject(target,source,removeIndicatorKey,prependIndicatorKey,appendIndicatorKey,positionPrefix,positionSuffix,parentSource,parentKey){if(removeIndicatorKey===void 0){removeIndicatorKey="__remove__"}if(prependIndicatorKey===void 0){prependIndicatorKey="__prepend__"}if(appendIndicatorKey===void 0){appendIndicatorKey="__append__"}if(positionPrefix===void 0){positionPrefix="__"}if(positionSuffix===void 0){positionSuffix="__"}if(parentSource===void 0){parentSource=null}if(parentKey===void 0){parentKey=null}if(isMap(source)&&isMap(target)){var _iterator19=_createForOfIteratorHelper(source),_step19;try{for(_iterator19.s();!(_step19=_iterator19.n()).done;){var _step19$value=_slicedToArray(_step19.value,2),key=_step19$value[0],value=_step19$value[1];if(target.has(key))_modifyObject(target.get(key),value,removeIndicatorKey,prependIndicatorKey,appendIndicatorKey,positionPrefix,positionSuffix,source,key)}}catch(err){_iterator19.e(err)}finally{_iterator19.f()}}else if(isObject(source)&&isObject(target))for(var _i26=0,_Object$entries14=Object.entries(source);_i26<_Object$entries14.length;_i26++){var _Object$entries14$_i=_slicedToArray(_Object$entries14[_i26],2),_key8=_Object$entries14$_i[0],sourceValue=_Object$entries14$_i[1];var index=NaN;if(Array.isArray(target)&&_key8.startsWith(positionPrefix)&&_key8.endsWith(positionSuffix)){index=parseInt(_key8.substring(positionPrefix.length,_key8.length-positionSuffix.length),10);if(index<0||index>=target.length)index=NaN}if([removeIndicatorKey,prependIndicatorKey,appendIndicatorKey].includes(_key8)||!isNaN(index)){if(Array.isArray(target)){if(_key8===removeIndicatorKey){var values=[].concat(sourceValue);var _iterator20=_createForOfIteratorHelper(values),_step20;try{for(_iterator20.s();!(_step20=_iterator20.n()).done;){var _value15=_step20.value;if(typeof _value15==="string"&&_value15.startsWith(positionPrefix)&&_value15.endsWith(positionSuffix))target.splice(parseInt(_value15.substring(positionPrefix.length,_value15.length-positionSuffix.length),10),1);else if(target.includes(_value15))target.splice(target.indexOf(_value15),1);else if(typeof _value15==="number"&&_value15<target.length)target.splice(_value15,1)}}catch(err){_iterator20.e(err)}finally{_iterator20.f()}}else if(_key8===appendIndicatorKey)target=target.concat(sourceValue);else if(_key8===prependIndicatorKey)target=[].concat(sourceValue).concat(target);else if(isObject(target[index])&&isObject(sourceValue))_extend(true,_modifyObject(target[index],sourceValue,removeIndicatorKey,prependIndicatorKey,appendIndicatorKey,positionPrefix,positionSuffix),target[index],sourceValue);else target[index]=sourceValue;}else if(_key8===removeIndicatorKey){var _iterator21=_createForOfIteratorHelper([].concat(sourceValue)),_step21;try{for(_iterator21.s();!(_step21=_iterator21.n()).done;){var _value16=_step21.value;if(typeof _value16==="string"&&Object.prototype.hasOwnProperty.call(target,_value16))delete target[_value16]}}catch(err){_iterator21.e(err)}finally{_iterator21.f()}}delete source[_key8];if(parentSource&&typeof parentKey==="string")delete parentSource[parentKey]}else if(target!==null&&Object.prototype.hasOwnProperty.call(target,_key8))target[_key8]=_modifyObject(target[_key8],sourceValue,removeIndicatorKey,prependIndicatorKey,appendIndicatorKey,positionPrefix,positionSuffix,source,_key8)}return target};/**
281
+ * Removes given key from given object recursively.
282
+ * @param object - Object to process.
283
+ * @param keys - List of keys to remove.
284
+ * @returns Processed given object.
285
+ */var _removeKeyPrefixes=function removeKeyPrefixes(object,keys){if(keys===void 0){keys="#"}var resolvedKeys=[].concat(keys);if(Array.isArray(object)){var index=0;var _iterator22=_createForOfIteratorHelper(object.slice()),_step22;try{for(_iterator22.s();!(_step22=_iterator22.n()).done;){var subObject=_step22.value;var skip=false;if(typeof subObject==="string"){var _iterator23=_createForOfIteratorHelper(resolvedKeys),_step23;try{for(_iterator23.s();!(_step23=_iterator23.n()).done;){var key=_step23.value;if(subObject.startsWith("".concat(key,":"))){object.splice(index,1);skip=true;break}}}catch(err){_iterator23.e(err)}finally{_iterator23.f()}if(skip)continue}object[index]=_removeKeyPrefixes(subObject,resolvedKeys);index+=1}}catch(err){_iterator22.e(err)}finally{_iterator22.f()}}else if(isSet(object)){var _iterator24=_createForOfIteratorHelper(new Set(object)),_step24;try{for(_iterator24.s();!(_step24=_iterator24.n()).done;){var _subObject=_step24.value;var _skip=false;if(typeof _subObject==="string"){var _iterator25=_createForOfIteratorHelper(resolvedKeys),_step25;try{for(_iterator25.s();!(_step25=_iterator25.n()).done;){var _key9=_step25.value;if(_subObject.startsWith("".concat(_key9,":"))){object.delete(_subObject);_skip=true;break}}}catch(err){_iterator25.e(err)}finally{_iterator25.f()}if(_skip)continue}_removeKeyPrefixes(_subObject,resolvedKeys)}}catch(err){_iterator24.e(err)}finally{_iterator24.f()}}else if(isMap(object)){var _iterator26=_createForOfIteratorHelper(new Map(object)),_step26;try{for(_iterator26.s();!(_step26=_iterator26.n()).done;){var _step26$value=_slicedToArray(_step26.value,2),_key0=_step26$value[0],_subObject2=_step26$value[1];var _skip2=false;if(typeof _key0==="string"){var _iterator27=_createForOfIteratorHelper(resolvedKeys),_step27;try{for(_iterator27.s();!(_step27=_iterator27.n()).done;){var resolvedKey=_step27.value;var escapedKey=escapeRegularExpressions(resolvedKey);if(new RegExp("^".concat(escapedKey,"[0-9]*$")).test(_key0)){object.delete(_key0);_skip2=true;break}}}catch(err){_iterator27.e(err)}finally{_iterator27.f()}if(_skip2)continue}object.set(_key0,_removeKeyPrefixes(_subObject2,resolvedKeys))}}catch(err){_iterator26.e(err)}finally{_iterator26.f()}}else if(isObject(object))for(var _i27=0,_Object$entries15=Object.entries(Object.assign({},object));_i27<_Object$entries15.length;_i27++){var _Object$entries15$_i=_slicedToArray(_Object$entries15[_i27],2),_key1=_Object$entries15$_i[0],value=_Object$entries15$_i[1];var _skip3=false;var _iterator28=_createForOfIteratorHelper(resolvedKeys),_step28;try{for(_iterator28.s();!(_step28=_iterator28.n()).done;){var _resolvedKey=_step28.value;var _escapedKey=escapeRegularExpressions(_resolvedKey);if(new RegExp("^".concat(_escapedKey,"[0-9]*$")).test(_key1)){delete object[_key1];_skip3=true;break}}}catch(err){_iterator28.e(err)}finally{_iterator28.f()}if(_skip3)continue;object[_key1]=_removeKeyPrefixes(value,resolvedKeys)}return object};/**
286
+ * Represents given object as formatted string.
287
+ * @param object - Object to represent.
288
+ * @param maximumLengthOfLists - Maximum number of array item to render.
289
+ * @param indention - String (usually whitespaces) to use as indention.
290
+ * @param initialIndention - String (usually whitespaces) to use as
291
+ * additional indention for the first object traversing level.
292
+ * @param maximumNumberOfLevelsReachedIdentifier - Replacement for objects
293
+ * which are out of specified bounds to traverse.
294
+ * @param numberOfLevels - Specifies number of levels to traverse given
295
+ * data structure.
296
+ * @returns Representation string.
297
+ */var _represent=function represent(object,maximumLengthOfLists,indention,initialIndention,maximumNumberOfLevelsReachedIdentifier,numberOfLevels){if(maximumLengthOfLists===void 0){maximumLengthOfLists=30}if(indention===void 0){indention=" "}if(initialIndention===void 0){initialIndention=""}if(maximumNumberOfLevelsReachedIdentifier===void 0){maximumNumberOfLevelsReachedIdentifier="__maximum_number_of_levels_reached__"}if(numberOfLevels===void 0){numberOfLevels=8}if(numberOfLevels===0)return String(maximumNumberOfLevelsReachedIdentifier);if(object===null)return"null";if(object===undefined)return"undefined";if(typeof object==="string")return"\"".concat(object.replace(/\n/g,"\n".concat(initialIndention)),"\"");if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isNumeric */ .kf)(object)||typeof object==="boolean")return String(object);if(object instanceof Date)return object.toISOString();if(Array.isArray(object)){var _result3="[";var _firstSeen=false;var _counter=1;var _iterator29=_createForOfIteratorHelper(object),_step29;try{for(_iterator29.s();!(_step29=_iterator29.n()).done;){var item=_step29.value;if(_counter>maximumLengthOfLists){_result3+="\n".concat(initialIndention,"...");break}if(_firstSeen)_result3+=",";_result3+="\n".concat(initialIndention).concat(indention)+_represent(item,maximumLengthOfLists,indention,"".concat(initialIndention).concat(indention),maximumNumberOfLevelsReachedIdentifier,numberOfLevels-1);_firstSeen=true;_counter+=1}}catch(err){_iterator29.e(err)}finally{_iterator29.f()}if(_firstSeen)_result3+="\n".concat(initialIndention);_result3+="]";return _result3}if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isMap */ .jh)(object)){var _result4="";var _firstSeen2=false;var _counter2=1;var _iterator30=_createForOfIteratorHelper(object),_step30;try{for(_iterator30.s();!(_step30=_iterator30.n()).done;){var _step30$value=_slicedToArray(_step30.value,2),key=_step30$value[0],_item=_step30$value[1];if(_counter2>maximumLengthOfLists){_result4+=",\n".concat(initialIndention,"...");break}if(_firstSeen2)_result4+=",\n".concat(initialIndention).concat(indention);_result4+=_represent(key,maximumLengthOfLists,indention,"".concat(initialIndention).concat(indention),maximumNumberOfLevelsReachedIdentifier,numberOfLevels-1)+" -> "+_represent(_item,maximumLengthOfLists,indention,"".concat(initialIndention).concat(indention),maximumNumberOfLevelsReachedIdentifier,numberOfLevels-1);_firstSeen2=true;_counter2+=1}}catch(err){_iterator30.e(err)}finally{_iterator30.f()}if(!_firstSeen2)_result4="EmptyMap";return _result4}if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isSet */ .vM)(object)){var _result5="{";var _firstSeen3=false;var _counter3=1;var _iterator31=_createForOfIteratorHelper(object),_step31;try{for(_iterator31.s();!(_step31=_iterator31.n()).done;){var _item2=_step31.value;if(_counter3>maximumLengthOfLists){_result5+=",\n".concat(initialIndention,"...");break}if(_firstSeen3)_result5+=",";_result5+="\n".concat(initialIndention).concat(indention)+_represent(_item2,maximumLengthOfLists,indention,"".concat(initialIndention).concat(indention),maximumNumberOfLevelsReachedIdentifier,numberOfLevels-1);_firstSeen3=true;_counter3+=1}}catch(err){_iterator31.e(err)}finally{_iterator31.f()}if(_firstSeen3)_result5+="\n".concat(initialIndention,"}");else _result5="EmptySet";return _result5}if((0,_indicators_js__WEBPACK_IMPORTED_MODULE_3__/* .isFunction */ .Tn)(object))return"__function__";var result="{";var keys=Object.getOwnPropertyNames(object).sort();var firstSeen=false;var counter=1;var _iterator32=_createForOfIteratorHelper(keys),_step32;try{for(_iterator32.s();!(_step32=_iterator32.n()).done;){var _key10=_step32.value;if(counter>maximumLengthOfLists){result+=",\n".concat(initialIndention,"...");break}if(firstSeen)result+=",";result+="\n".concat(initialIndention).concat(indention).concat(_key10,": ")+_represent(object[_key10],maximumLengthOfLists,indention,"".concat(initialIndention).concat(indention),maximumNumberOfLevelsReachedIdentifier,numberOfLevels-1);firstSeen=true;counter+=1}}catch(err){_iterator32.e(err)}finally{_iterator32.f()}if(firstSeen)result+="\n".concat(initialIndention);result+="}";return result};/**
298
+ * Sort given objects keys.
299
+ * @param object - Object which keys should be sorted.
300
+ * @returns Sorted list of given keys.
301
+ */var sort=function sort(object){var keys=[];if(Array.isArray(object))for(var index=0;index<object.length;index++)keys.push(index);else if(_typeof(object)==="object")if(isMap(object)){var _iterator33=_createForOfIteratorHelper(object),_step33;try{for(_iterator33.s();!(_step33=_iterator33.n()).done;){var keyValuePair=_step33.value;keys.push(keyValuePair[0])}}catch(err){_iterator33.e(err)}finally{_iterator33.f()}}else if(object!==null)for(var _i28=0,_Object$keys=Object.keys(object);_i28<_Object$keys.length;_i28++){var key=_Object$keys[_i28];keys.push(key)}return keys.sort()};/**
302
+ * Removes a proxy from given data structure recursively.
303
+ * @param object - Object to proxy.
304
+ * @param seenObjects - Tracks all already processed objects to avoid
305
+ * endless loops (usually only needed for internal purpose).
306
+ * @returns Returns given object unwrapped from a dynamic proxy.
307
+ */var _unwrapProxy=function unwrapProxy(object,seenObjects){if(seenObjects===void 0){seenObjects=new Set}if(isObject(object)){if(seenObjects.has(object))return object;try{if(isFunction(object.__revoke__)){if(isProxy(object))object=object.__target__;object.__revoke__()}}catch(_unused){return object}finally{seenObjects.add(object)}if(Array.isArray(object)){var index=0;var _iterator34=_createForOfIteratorHelper(object),_step34;try{for(_iterator34.s();!(_step34=_iterator34.n()).done;){var value=_step34.value;object[index]=_unwrapProxy(value,seenObjects);index+=1}}catch(err){_iterator34.e(err)}finally{_iterator34.f()}}else if(isMap(object)){var _iterator35=_createForOfIteratorHelper(object),_step35;try{for(_iterator35.s();!(_step35=_iterator35.n()).done;){var _step35$value=_slicedToArray(_step35.value,2),key=_step35$value[0],_value17=_step35$value[1];object.set(key,_unwrapProxy(_value17,seenObjects))}}catch(err){_iterator35.e(err)}finally{_iterator35.f()}}else if(isSet(object)){var cache=[];var _iterator36=_createForOfIteratorHelper(object),_step36;try{for(_iterator36.s();!(_step36=_iterator36.n()).done;){var _value19=_step36.value;object.delete(_value19);cache.push(_unwrapProxy(_value19,seenObjects))}}catch(err){_iterator36.e(err)}finally{_iterator36.f()}for(var _i29=0,_cache4=cache;_i29<_cache4.length;_i29++){var _value18=_cache4[_i29];object.add(_value18)}}else for(var _i30=0,_Object$entries16=Object.entries(object);_i30<_Object$entries16.length;_i30++){var _Object$entries16$_i=_slicedToArray(_Object$entries16[_i30],2),_key11=_Object$entries16$_i[0],_value20=_Object$entries16$_i[1];object[_key11]=_unwrapProxy(_value20,seenObjects)}}return object};
308
+
309
+ /***/ }),
310
+ /* 4 */
311
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
312
+
313
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
314
+ /* harmony export */ Tn: function() { return /* binding */ isFunction; },
315
+ /* harmony export */ jh: function() { return /* binding */ isMap; },
316
+ /* harmony export */ kf: function() { return /* binding */ isNumeric; },
317
+ /* harmony export */ vM: function() { return /* binding */ isSet; }
318
+ /* harmony export */ });
319
+ /* unused harmony exports isWindow, isArrayLike, isAnyMatching, isObject, isPlainObject, isProxy */
320
+ /* unused harmony import specifier */ var PLAIN_OBJECT_PROTOTYPES;
321
+ /* unused harmony import specifier */ var determineType;
322
+ /* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
323
+ /* harmony import */ var _object_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3);
324
+ // #!/usr/bin/env babel-node
325
+ // -*- coding: utf-8 -*-
326
+ /** @module indicators *//* !
327
+ region header
328
+ [Project page](https://torben.website/clientnode)
5
329
 
6
- /* !
330
+ Copyright Torben Sickert (info["~at~"]torben.website) 16.12.2012
331
+
332
+ License
333
+ -------
334
+
335
+ This library written by Torben Sickert stands under a creative commons
336
+ naming 3.0 unported license.
337
+ See https://creativecommons.org/licenses/by/3.0/deed.de
338
+ endregion
339
+ */function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t.return||t.return()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)};/**
340
+ * Determines whether its argument represents a JavaScript number.
341
+ * @param value - Value to analyze.
342
+ * @returns A boolean value indicating whether given object is numeric
343
+ * like.
344
+ */var isNumeric=function isNumeric(value){var type=(0,_object_js__WEBPACK_IMPORTED_MODULE_2__/* .determineType */ .Sj)(value);/*
345
+ NOTE: "parseFloat" "NaNs" numeric-cast false positives ("") but
346
+ misinterprets leading-number strings, particularly hex literals
347
+ ("0x...") subtraction forces infinities to NaN.
348
+ */return["number","string"].includes(type)&&!isNaN(value-parseFloat(value))};/**
349
+ * Determine whether the argument is a window.
350
+ * @param value - Value to check for.
351
+ * @returns Boolean value indicating the result.
352
+ */var isWindow=function isWindow(value){return![null,undefined].includes(value)&&_typeof(value)==="object"&&value===(value===null||value===void 0?void 0:value.window)};/**
353
+ * Checks if given object is similar to an array and can be handled like an
354
+ * array.
355
+ * @param object - Object to check behavior for.
356
+ * @returns A boolean value indicating whether given object is array like.
357
+ */var isArrayLike=function isArrayLike(object){var length;try{length=Boolean(object)&&object.length}catch(_unused){return false}var type=determineType(object);if(type==="function"||isWindow(object))return false;if(type==="array"||length===0)return true;if(typeof length==="number"&&length>0)try{var _dump=object[length-1];return true}catch(_unused2){// Continue regardless of an error.
358
+ }return false};/**
359
+ * Checks whether one of the given pattern matches given string.
360
+ * @param target - Target to check in pattern for.
361
+ * @param pattern - List of pattern to check for.
362
+ * @returns Value "true" if given object is matches by at leas one of the
363
+ * given pattern and "false" otherwise.
364
+ */var isAnyMatching=function isAnyMatching(target,pattern){var _iterator=_createForOfIteratorHelper(pattern),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var currentPattern=_step.value;if(typeof currentPattern==="string"){if(currentPattern===target)return true}else if(currentPattern.test(target))return true}}catch(err){_iterator.e(err)}finally{_iterator.f()}return false};/**
365
+ * Checks whether given object is a native object but not null.
366
+ * @param value - Value to check.
367
+ * @returns Value "true" if given object is a plain javaScript object and
368
+ * "false" otherwise.
369
+ */var isObject=function isObject(value){return value!==null&&_typeof(value)==="object"};/**
370
+ * Checks whether given object is a plain native object.
371
+ * @param value - Value to check.
372
+ * @returns Value "true" if given object is a plain javaScript object and
373
+ * "false" otherwise.
374
+ */var isPlainObject=function isPlainObject(value){var _prototype$constructo;if(!isObject(value))return false;var prototype=Object.getPrototypeOf(value);if(PLAIN_OBJECT_PROTOTYPES.includes(prototype))return true;/*
375
+ NOTE: Plain objects created in another realm (a vm context like used by
376
+ test runners or a worker for example) have their own "Object.prototype"
377
+ instance and would not be recognized by the identity check above.
378
+ */return prototype!==null&&Object.getPrototypeOf(prototype)===null&&((_prototype$constructo=prototype.constructor)===null||_prototype$constructo===void 0?void 0:_prototype$constructo.name)==="Object"};/**
379
+ * Checks whether given object is a set.
380
+ * @param value - Value to check.
381
+ * @returns Value "true" if given object is a set and "false" otherwise.
382
+ */var isSet=function isSet(value){return (0,_object_js__WEBPACK_IMPORTED_MODULE_2__/* .determineType */ .Sj)(value)==="set"};/**
383
+ * Checks whether given object is a map.
384
+ * @param value - Value to check.
385
+ * @returns Value "true" if given object is a map and "false" otherwise.
386
+ */var isMap=function isMap(value){return (0,_object_js__WEBPACK_IMPORTED_MODULE_2__/* .determineType */ .Sj)(value)==="map"};/**
387
+ * Checks whether given object is a proxy.
388
+ * @param value - Value to check.
389
+ * @returns Value "true" if given object is a proxy and "false" otherwise.
390
+ */var isProxy=function isProxy(value){return Boolean(value.__target__)};/**
391
+ * Checks whether given object is a function.
392
+ * @param value - Value to check.
393
+ * @returns Value "true" if given object is a function and "false"
394
+ * otherwise.
395
+ */var isFunction=function isFunction(value){return Boolean(value)&&["[object AsyncFunction]","[object Function]"].includes({}.toString.call(value))};
396
+
397
+ /***/ }),
398
+ /* 5 */,
399
+ /* 6 */,
400
+ /* 7 */,
401
+ /* 8 */
402
+ /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
403
+
404
+ var x = function(y) {
405
+ var x = {}; __webpack_require__.d(x, y); return x
406
+ }
407
+ var y = function(x) { return function() { return x; }; }
408
+ module.exports = x({ });
409
+
410
+ /***/ })
411
+ /******/ ]);
412
+ /************************************************************************/
413
+ /******/ // The module cache
414
+ /******/ var __webpack_module_cache__ = {};
415
+ /******/
416
+ /******/ // The require function
417
+ /******/ function __webpack_require__(moduleId) {
418
+ /******/ // Check if module is in cache
419
+ /******/ var cachedModule = __webpack_module_cache__[moduleId];
420
+ /******/ if (cachedModule !== undefined) {
421
+ /******/ return cachedModule.exports;
422
+ /******/ }
423
+ /******/ // Create a new module (and put it into the cache)
424
+ /******/ var module = __webpack_module_cache__[moduleId] = {
425
+ /******/ // no module.id needed
426
+ /******/ // no module.loaded needed
427
+ /******/ exports: {}
428
+ /******/ };
429
+ /******/
430
+ /******/ // Execute the module function
431
+ /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
432
+ /******/
433
+ /******/ // Return the exports of the module
434
+ /******/ return module.exports;
435
+ /******/ }
436
+ /******/
437
+ /************************************************************************/
438
+ /******/ /* webpack/runtime/define property getters */
439
+ /******/ !function() {
440
+ /******/ // define getter/value functions for harmony exports
441
+ /******/ __webpack_require__.d = function(exports, definition) {
442
+ /******/ if(Array.isArray(definition)) {
443
+ /******/ var i = 0;
444
+ /******/ while(i < definition.length) {
445
+ /******/ var key = definition[i++];
446
+ /******/ var binding = definition[i++];
447
+ /******/ if(!__webpack_require__.o(exports, key)) {
448
+ /******/ if(binding === 0) {
449
+ /******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
450
+ /******/ } else {
451
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
452
+ /******/ }
453
+ /******/ } else if(binding === 0) { i++; }
454
+ /******/ }
455
+ /******/ } else {
456
+ /******/ for(var key in definition) {
457
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
458
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
459
+ /******/ }
460
+ /******/ }
461
+ /******/ }
462
+ /******/ };
463
+ /******/ }();
464
+ /******/
465
+ /******/ /* webpack/runtime/hasOwnProperty shorthand */
466
+ /******/ !function() {
467
+ /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }
468
+ /******/ }();
469
+ /******/
470
+ /************************************************************************/
471
+
472
+ ;// external "@jest/globals"
473
+
474
+ // EXTERNAL MODULE: ./src/object.ts
475
+ var object = __webpack_require__(3);
476
+ ;// ./src/test-helper.ts
477
+ // #!/usr/bin/env babel-node
478
+ // -*- coding: utf-8 -*-
479
+ /** @module testHelper *//* !
7
480
  region header
8
481
  Copyright Torben Sickert (info["~at~"]torben.website) 16.12.2012
9
482
 
@@ -22,31 +495,16 @@
22
495
  (expected: ReturnType<FUNCTION>, ...parameters: Parameters<FUNCTION>) =>
23
496
  expect(FUNCTION(...parameters)).toStrictEqual(expected)
24
497
  )
25
- */
26
- // region imports
27
- import { AnyFunction, FirstParameter, FunctionTestTuple, FunctionTestPromiseTuple, FunctionTestPromiseRejectionTuple, TestMatchers as Matchers, TestSymbol, ThenParameter, UnknownFunction, FunctionTestAgainstResolvedPromiseTuple, FunctionTestPromiseAgainstResolvedPromiseTuple, FunctionTestPromiseRejectionAgainstResolvedPromiseTuple } from "./type.js";
28
- import { expect, test } from '@jest/globals';
29
- import { represent } from "./object.js";
30
- // endregion
31
- export const TEST_DEFINED_SYMBOL = Symbol.for('clientnodeTestHelperDefined');
32
- export const TEST_THROW_SYMBOL = Symbol.for('clientnodeTestHelperThrow');
33
- export const TEST_UNDEFINED_SYMBOL = Symbol.for('clientnodeTestHelperUndefined');
34
- /**
498
+ */// region imports
499
+ function _regenerator(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function i(r,n,o,i){var c=n&&n.prototype instanceof Generator?n:Generator,u=Object.create(c.prototype);return _regeneratorDefine2(u,"_invoke",function(r,n,o){var i,c,u,f=0,p=o||[],y=!1,G={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function d(t,r){return i=t,c=0,u=e,G.n=r,a}};function d(r,n){for(c=r,u=n,t=0;!y&&f&&!o&&t<p.length;t++){var o,i=p[t],d=G.p,l=i[2];r>3?(o=l===n)&&(u=i[(c=i[4])?5:(c=3,3)],i[4]=i[5]=e):i[0]<=d&&((o=r<2&&d<i[1])?(c=0,G.v=n,G.n=i[1]):d<l&&(o=r<3||i[0]>n||n>l)&&(i[4]=r,i[5]=n,G.n=l,c=0))}if(o||r>1)return a;throw y=!0,n}return function(o,p,l){if(f>1)throw TypeError("Generator is already running");for(y&&1===p&&d(p,l),c=p,u=l;(t=c<2?e:u)||!y;){i||(c?c<3?(c>1&&(G.n=-1),d(c,u)):G.n=u:G.v=u);try{if(f=2,i){if(c||(o="next"),t=i[o]){if(!(t=t.call(i,u)))throw TypeError("iterator result is not an object");if(!t.done)return t;u=t.value,c<2&&(c=0)}else 1===c&&(t=i.return)&&t.call(i),c<2&&(u=TypeError("The iterator does not provide a '"+o+"' method"),c=1);i=e}else if((t=(y=G.n<0)?u:r.call(n,G))!==a)break}catch(t){i=e,c=1,u=t}finally{f=1}}return{value:t,done:y}}}(r,o,i),!0),u}var a={};function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}t=Object.getPrototypeOf;var c=[][n]?t(t([][n]())):(_regeneratorDefine2(t={},n,function(){return this}),t),u=GeneratorFunctionPrototype.prototype=Generator.prototype=Object.create(c);function f(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,GeneratorFunctionPrototype):(e.__proto__=GeneratorFunctionPrototype,_regeneratorDefine2(e,o,"GeneratorFunction")),e.prototype=Object.create(u),e}return GeneratorFunction.prototype=GeneratorFunctionPrototype,_regeneratorDefine2(u,"constructor",GeneratorFunctionPrototype),_regeneratorDefine2(GeneratorFunctionPrototype,"constructor",GeneratorFunction),GeneratorFunction.displayName="GeneratorFunction",_regeneratorDefine2(GeneratorFunctionPrototype,o,"GeneratorFunction"),_regeneratorDefine2(u),_regeneratorDefine2(u,o,"Generator"),_regeneratorDefine2(u,n,function(){return this}),_regeneratorDefine2(u,"toString",function(){return"[object Generator]"}),(_regenerator=function _regenerator(){return{w:i,m:f}})()}function _regeneratorDefine2(e,r,n,t){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}_regeneratorDefine2=function _regeneratorDefine(e,r,n,t){function o(r,n){_regeneratorDefine2(e,r,function(e){return this._invoke(r,n,e)})}r?i?i(e,r,{value:n,enumerable:!t,configurable:!t,writable:!t}):e[r]=n:(o("next",0),o("throw",1),o("return",2))},_regeneratorDefine2(e,r,n,t)}function asyncGeneratorStep(n,t,e,r,o,a,c){try{var i=n[a](c),u=i.value}catch(n){return void e(n)}i.done?t(u):Promise.resolve(u).then(r,o)}function _asyncToGenerator(n){return function(){var t=this,e=arguments;return new Promise(function(r,o){var a=n.apply(t,e);function _next(n){asyncGeneratorStep(a,r,o,_next,_throw,"next",n)}function _throw(n){asyncGeneratorStep(a,r,o,_next,_throw,"throw",n)}_next(void 0)})}};// endregion
500
+ var TEST_DEFINED_SYMBOL=Symbol.for("clientnodeTestHelperDefined");var TEST_THROW_SYMBOL=Symbol.for("clientnodeTestHelperThrow");var TEST_UNDEFINED_SYMBOL=Symbol.for("clientnodeTestHelperUndefined");/**
35
501
  * Tests given result against given expectations. Respects special symbol
36
502
  * values.
37
503
  * @param givenResult - Target to compare expectation against.
38
504
  * @param expected - Expected result.
39
505
  * @param wrap - Indicates whether to wrap with an expect function call.
40
506
  * @returns Nothing or a promise resolving to nothing.
41
- */
42
- export const expectExpectedType = (givenResult, expected, wrap = true) => {
43
- const result = wrap ? expect(givenResult) : givenResult;
44
- if (expected === TEST_DEFINED_SYMBOL) return result.toBeDefined();
45
- if (expected === TEST_UNDEFINED_SYMBOL) return result.not.toBeDefined();
46
- if (expected === TEST_THROW_SYMBOL) return result.toThrow();
47
- return result.toStrictEqual(expected);
48
- };
49
- // region testEach
507
+ */var expectExpectedType=function expectExpectedType(givenResult,expected,wrap){if(wrap===void 0){wrap=true}var result=wrap?__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_expect__(givenResult):givenResult;if(expected===TEST_DEFINED_SYMBOL)return result.toBeDefined();if(expected===TEST_UNDEFINED_SYMBOL)return result.not.toBeDefined();if(expected===TEST_THROW_SYMBOL)return result.toThrow();return result.toStrictEqual(expected)};// region testEach
50
508
  /**
51
509
  * Tests each given test set (expected value follows by various list of
52
510
  * function parameters). It respects function signature to raise compile time
@@ -56,13 +514,7 @@ export const expectExpectedType = (givenResult, expected, wrap = true) => {
56
514
  * @param callback - Function reference to test.
57
515
  * @param functionTestTuple - Additional arrays of test sets to test given
58
516
  * function again.
59
- */
60
- const _testEach = (tester, functionName, callback, ...functionTestTuple) => {
61
- tester([...functionTestTuple])(`%p === ${functionName}(%p, ...)`, (expected, ...parameters) => {
62
- expectExpectedType(callback(...parameters), expected);
63
- });
64
- };
65
- /**
517
+ */var _testEach=function _testEach(tester,functionName,callback){for(var _len=arguments.length,functionTestTuple=new Array(_len>3?_len-3:0),_key=3;_key<_len;_key++){functionTestTuple[_key-3]=arguments[_key]}tester([].concat(functionTestTuple))("%p === ".concat(functionName,"(%p, ...)"),function(expected){for(var _len2=arguments.length,parameters=new Array(_len2>1?_len2-1:0),_key2=1;_key2<_len2;_key2++){parameters[_key2-1]=arguments[_key2]}expectExpectedType(callback.apply(void 0,parameters),expected)})};/**
66
518
  * Tests each given test set (expected value follows by various list of
67
519
  * function parameters). It respects function signature to raise compile time
68
520
  * errors if given test set does not match given function signature.
@@ -70,17 +522,7 @@ const _testEach = (tester, functionName, callback, ...functionTestTuple) => {
70
522
  * @param callback - Function reference to test.
71
523
  * @param functionTestTuple - Additional arrays of test sets to test given
72
524
  * function again.
73
- */
74
- export const testEach = (functionName, callback, ...functionTestTuple) => {
75
- _testEach(test.each, functionName, callback, ...functionTestTuple);
76
- };
77
- testEach.only = (functionName, callback, ...functionTestTuple) => {
78
- _testEach(test.only.each, functionName, callback, ...functionTestTuple);
79
- };
80
- testEach.skip = (functionName, callback, ...functionTestTuple) => {
81
- _testEach(test.skip.each, functionName, callback, ...functionTestTuple);
82
- };
83
- // endregion
525
+ */var testEach=function testEach(functionName,callback){for(var _len3=arguments.length,functionTestTuple=new Array(_len3>2?_len3-2:0),_key3=2;_key3<_len3;_key3++){functionTestTuple[_key3-2]=arguments[_key3]}_testEach.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.each,functionName,callback].concat(functionTestTuple))};testEach.only=function(functionName,callback){for(var _len4=arguments.length,functionTestTuple=new Array(_len4>2?_len4-2:0),_key4=2;_key4<_len4;_key4++){functionTestTuple[_key4-2]=arguments[_key4]}_testEach.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.only.each,functionName,callback].concat(functionTestTuple))};testEach.skip=function(functionName,callback){for(var _len5=arguments.length,functionTestTuple=new Array(_len5>2?_len5-2:0),_key5=2;_key5<_len5;_key5++){functionTestTuple[_key5-2]=arguments[_key5]}_testEach.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.skip.each,functionName,callback].concat(functionTestTuple))};// endregion
84
526
  // region testEachAgainstResolvedPromise
85
527
  /**
86
528
  * Tests each given test set (promise resolving to expected value follows by
@@ -92,13 +534,7 @@ testEach.skip = (functionName, callback, ...functionTestTuple) => {
92
534
  * @param callback - Function reference to test.
93
535
  * @param functionTestTuple - Additional arrays of test sets to test given
94
536
  * function again.
95
- */
96
- const _testEachAgainstResolvedPromise = (tester, functionName, callback, ...functionTestTuple) => {
97
- tester([...functionTestTuple])(`%p === ${functionName}(%p, ...)`, async (expected, ...parameters) => {
98
- expectExpectedType(callback(...parameters), await expected);
99
- });
100
- };
101
- /**
537
+ */var _testEachAgainstResolvedPromise=function _testEachAgainstResolvedPromise(tester,functionName,callback){for(var _len6=arguments.length,functionTestTuple=new Array(_len6>3?_len6-3:0),_key6=3;_key6<_len6;_key6++){functionTestTuple[_key6-3]=arguments[_key6]}tester([].concat(functionTestTuple))("%p === ".concat(functionName,"(%p, ...)"),/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(expected){var _len7,parameters,_key7,_args=arguments,_t,_t2;return _regenerator().w(function(_context){while(1)switch(_context.n){case 0:for(_len7=_args.length,parameters=new Array(_len7>1?_len7-1:0),_key7=1;_key7<_len7;_key7++){parameters[_key7-1]=_args[_key7]}_t=expectExpectedType;_t2=callback.apply(void 0,parameters);_context.n=1;return expected;case 1:_t(_t2,_context.v);case 2:return _context.a(2)}},_callee)})))};/**
102
538
  * Tests each given test set (promise resolving to expected value follows by
103
539
  * various list of function parameters). It respects function signature to
104
540
  * raise compile time errors if given test set does not match given function
@@ -107,17 +543,7 @@ const _testEachAgainstResolvedPromise = (tester, functionName, callback, ...func
107
543
  * @param callback - Function reference to test.
108
544
  * @param functionTestTuple - Additional arrays of test sets to test given
109
545
  * function again.
110
- */
111
- export const testEachAgainstResolvedPromise = (functionName, callback, ...functionTestTuple) => {
112
- _testEachAgainstResolvedPromise(test.each, functionName, callback, ...functionTestTuple);
113
- };
114
- testEachAgainstResolvedPromise.only = (functionName, callback, ...functionTestTuple) => {
115
- _testEachAgainstResolvedPromise(test.only.each, functionName, callback, ...functionTestTuple);
116
- };
117
- testEachAgainstResolvedPromise.skip = (functionName, callback, ...functionTestTuple) => {
118
- _testEachAgainstResolvedPromise(test.skip.each, functionName, callback, ...functionTestTuple);
119
- };
120
- // endregion
546
+ */var testEachAgainstResolvedPromise=function testEachAgainstResolvedPromise(functionName,callback){for(var _len8=arguments.length,functionTestTuple=new Array(_len8>2?_len8-2:0),_key8=2;_key8<_len8;_key8++){functionTestTuple[_key8-2]=arguments[_key8]}_testEachAgainstResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.each,functionName,callback].concat(functionTestTuple))};testEachAgainstResolvedPromise.only=function(functionName,callback){for(var _len9=arguments.length,functionTestTuple=new Array(_len9>2?_len9-2:0),_key9=2;_key9<_len9;_key9++){functionTestTuple[_key9-2]=arguments[_key9]}_testEachAgainstResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.only.each,functionName,callback].concat(functionTestTuple))};testEachAgainstResolvedPromise.skip=function(functionName,callback){for(var _len0=arguments.length,functionTestTuple=new Array(_len0>2?_len0-2:0),_key0=2;_key0<_len0;_key0++){functionTestTuple[_key0-2]=arguments[_key0]}_testEachAgainstResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.skip.each,functionName,callback].concat(functionTestTuple))};// endregion
121
547
  // region testEachResolvedPromise
122
548
  /**
123
549
  * Tests each given test set (expected value follows by various list of
@@ -128,11 +554,7 @@ testEachAgainstResolvedPromise.skip = (functionName, callback, ...functionTestTu
128
554
  * @param callback - Function reference to test.
129
555
  * @param functionTestTuple - Additional arrays of test sets to test given
130
556
  * function again.
131
- */
132
- const _testEachResolvedPromise = (tester, functionName, callback, ...functionTestTuple) => {
133
- tester([...functionTestTuple])(`%p === ${functionName}(%p, ...)`, (expected, ...parameters) => expectExpectedType(expect(callback(...parameters)).resolves, expected, false));
134
- };
135
- /**
557
+ */var _testEachResolvedPromise=function _testEachResolvedPromise(tester,functionName,callback){for(var _len1=arguments.length,functionTestTuple=new Array(_len1>3?_len1-3:0),_key1=3;_key1<_len1;_key1++){functionTestTuple[_key1-3]=arguments[_key1]}tester([].concat(functionTestTuple))("%p === ".concat(functionName,"(%p, ...)"),function(expected){for(var _len10=arguments.length,parameters=new Array(_len10>1?_len10-1:0),_key10=1;_key10<_len10;_key10++){parameters[_key10-1]=arguments[_key10]}return expectExpectedType(__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_expect__(callback.apply(void 0,parameters)).resolves,expected,false)})};/**
136
558
  * Tests each given test set (expected value follows by various list of
137
559
  * function parameters). It respects function signature to raise compile time
138
560
  * errors if given test set does not match given function signature.
@@ -140,17 +562,7 @@ const _testEachResolvedPromise = (tester, functionName, callback, ...functionTes
140
562
  * @param callback - Function reference to test.
141
563
  * @param functionTestTuple - Additional arrays of test sets to test given
142
564
  * function again.
143
- */
144
- export const testEachResolvedPromise = (functionName, callback, ...functionTestTuple) => {
145
- _testEachResolvedPromise(test.each, functionName, callback, ...functionTestTuple);
146
- };
147
- testEachResolvedPromise.only = (functionName, callback, ...functionTestTuple) => {
148
- _testEachResolvedPromise(test.only.each, functionName, callback, ...functionTestTuple);
149
- };
150
- testEachResolvedPromise.skip = (functionName, callback, ...functionTestTuple) => {
151
- _testEachResolvedPromise(test.skip.each, functionName, callback, ...functionTestTuple);
152
- };
153
- // endregion
565
+ */var testEachResolvedPromise=function testEachResolvedPromise(functionName,callback){for(var _len11=arguments.length,functionTestTuple=new Array(_len11>2?_len11-2:0),_key11=2;_key11<_len11;_key11++){functionTestTuple[_key11-2]=arguments[_key11]}_testEachResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.each,functionName,callback].concat(functionTestTuple))};testEachResolvedPromise.only=function(functionName,callback){for(var _len12=arguments.length,functionTestTuple=new Array(_len12>2?_len12-2:0),_key12=2;_key12<_len12;_key12++){functionTestTuple[_key12-2]=arguments[_key12]}_testEachResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.only.each,functionName,callback].concat(functionTestTuple))};testEachResolvedPromise.skip=function(functionName,callback){for(var _len13=arguments.length,functionTestTuple=new Array(_len13>2?_len13-2:0),_key13=2;_key13<_len13;_key13++){functionTestTuple[_key13-2]=arguments[_key13]}_testEachResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.skip.each,functionName,callback].concat(functionTestTuple))};// endregion
154
566
  // region testEachResolvedPromiseAgainstResolvedPromise
155
567
  /**
156
568
  * Tests each given test set (promise resolving to expected value follows by
@@ -162,11 +574,7 @@ testEachResolvedPromise.skip = (functionName, callback, ...functionTestTuple) =>
162
574
  * @param callback - Function reference to test.
163
575
  * @param functionTestTuple - Additional arrays of test sets to test given
164
576
  * function again.
165
- */
166
- const _testEachResolvedPromiseAgainstResolvedPromise = (tester, functionName, callback, ...functionTestTuple) => {
167
- tester([...functionTestTuple])(`%p === ${functionName}(%p, ...)`, async (expected, ...parameters) => expectExpectedType(expect(callback(...parameters)).resolves, await expected, false));
168
- };
169
- /**
577
+ */var _testEachResolvedPromiseAgainstResolvedPromise=function _testEachResolvedPromiseAgainstResolvedPromise(tester,functionName,callback){for(var _len14=arguments.length,functionTestTuple=new Array(_len14>3?_len14-3:0),_key14=3;_key14<_len14;_key14++){functionTestTuple[_key14-3]=arguments[_key14]}tester([].concat(functionTestTuple))("%p === ".concat(functionName,"(%p, ...)"),/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(expected){var _len15,parameters,_key15,_args2=arguments,_t3,_t4;return _regenerator().w(function(_context2){while(1)switch(_context2.n){case 0:for(_len15=_args2.length,parameters=new Array(_len15>1?_len15-1:0),_key15=1;_key15<_len15;_key15++){parameters[_key15-1]=_args2[_key15]}_t3=expectExpectedType;_t4=__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_expect__(callback.apply(void 0,parameters)).resolves;_context2.n=1;return expected;case 1:return _context2.a(2,_t3(_t4,_context2.v,false))}},_callee2)})))};/**
170
578
  * Tests each given test set (expected value follows by various list of
171
579
  * function parameters). It respects function signature to raise compile time
172
580
  * errors if given test set does not match given function signature.
@@ -174,17 +582,7 @@ const _testEachResolvedPromiseAgainstResolvedPromise = (tester, functionName, ca
174
582
  * @param callback - Function reference to test.
175
583
  * @param functionTestTuple - Additional arrays of test sets to test given
176
584
  * function again.
177
- */
178
- export const testEachResolvedPromiseAgainstResolvedPromise = (functionName, callback, ...functionTestTuple) => {
179
- _testEachResolvedPromiseAgainstResolvedPromise(test.each, functionName, callback, ...functionTestTuple);
180
- };
181
- testEachResolvedPromise.only = (functionName, callback, ...functionTestTuple) => {
182
- _testEachResolvedPromiseAgainstResolvedPromise(test.only.each, functionName, callback, ...functionTestTuple);
183
- };
184
- testEachResolvedPromise.skip = (functionName, callback, ...functionTestTuple) => {
185
- _testEachResolvedPromiseAgainstResolvedPromise(test.skip.each, functionName, callback, ...functionTestTuple);
186
- };
187
- // endregion
585
+ */var testEachResolvedPromiseAgainstResolvedPromise=function testEachResolvedPromiseAgainstResolvedPromise(functionName,callback){for(var _len16=arguments.length,functionTestTuple=new Array(_len16>2?_len16-2:0),_key16=2;_key16<_len16;_key16++){functionTestTuple[_key16-2]=arguments[_key16]}_testEachResolvedPromiseAgainstResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.each,functionName,callback].concat(functionTestTuple))};testEachResolvedPromise.only=function(functionName,callback){for(var _len17=arguments.length,functionTestTuple=new Array(_len17>2?_len17-2:0),_key17=2;_key17<_len17;_key17++){functionTestTuple[_key17-2]=arguments[_key17]}_testEachResolvedPromiseAgainstResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.only.each,functionName,callback].concat(functionTestTuple))};testEachResolvedPromise.skip=function(functionName,callback){for(var _len18=arguments.length,functionTestTuple=new Array(_len18>2?_len18-2:0),_key18=2;_key18<_len18;_key18++){functionTestTuple[_key18-2]=arguments[_key18]}_testEachResolvedPromiseAgainstResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.skip.each,functionName,callback].concat(functionTestTuple))};// endregion
188
586
  // region testEachRejectedPromise
189
587
  /**
190
588
  * Tests each given test set (expected value follows by various list of
@@ -195,11 +593,7 @@ testEachResolvedPromise.skip = (functionName, callback, ...functionTestTuple) =>
195
593
  * @param callback - Function reference to test.
196
594
  * @param functionTestTuple - Additional arrays of test sets to test given
197
595
  * function again.
198
- */
199
- const _testEachRejectedPromise = (tester, functionName, callback, ...functionTestTuple) => {
200
- tester([...functionTestTuple])(`%p === ${functionName}(%p, ...)`, (expected, ...parameters) => expectExpectedType(expect(callback(...parameters)).rejects, expected, false));
201
- };
202
- /**
596
+ */var _testEachRejectedPromise=function _testEachRejectedPromise(tester,functionName,callback){for(var _len19=arguments.length,functionTestTuple=new Array(_len19>3?_len19-3:0),_key19=3;_key19<_len19;_key19++){functionTestTuple[_key19-3]=arguments[_key19]}tester([].concat(functionTestTuple))("%p === ".concat(functionName,"(%p, ...)"),function(expected){for(var _len20=arguments.length,parameters=new Array(_len20>1?_len20-1:0),_key20=1;_key20<_len20;_key20++){parameters[_key20-1]=arguments[_key20]}return expectExpectedType(__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_expect__(callback.apply(void 0,parameters)).rejects,expected,false)})};/**
203
597
  * Tests each given test set (expected value follows by various list of
204
598
  * function parameters). It respects function signature to raise compile time
205
599
  * errors if given test set does not match given function signature.
@@ -207,17 +601,7 @@ const _testEachRejectedPromise = (tester, functionName, callback, ...functionTes
207
601
  * @param callback - Function reference to test.
208
602
  * @param functionTestTuple - Additional arrays of test sets to test given
209
603
  * function again.
210
- */
211
- export const testEachRejectedPromise = (functionName, callback, ...functionTestTuple) => {
212
- _testEachRejectedPromise(test.each, functionName, callback, ...functionTestTuple);
213
- };
214
- testEachRejectedPromise.only = (functionName, callback, ...functionTestTuple) => {
215
- _testEachRejectedPromise(test.only.each, functionName, callback, ...functionTestTuple);
216
- };
217
- testEachRejectedPromise.skip = (functionName, callback, ...functionTestTuple) => {
218
- _testEachRejectedPromise(test.skip.each, functionName, callback, ...functionTestTuple);
219
- };
220
- // endregion
604
+ */var testEachRejectedPromise=function testEachRejectedPromise(functionName,callback){for(var _len21=arguments.length,functionTestTuple=new Array(_len21>2?_len21-2:0),_key21=2;_key21<_len21;_key21++){functionTestTuple[_key21-2]=arguments[_key21]}_testEachRejectedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.each,functionName,callback].concat(functionTestTuple))};testEachRejectedPromise.only=function(functionName,callback){for(var _len22=arguments.length,functionTestTuple=new Array(_len22>2?_len22-2:0),_key22=2;_key22<_len22;_key22++){functionTestTuple[_key22-2]=arguments[_key22]}_testEachRejectedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.only.each,functionName,callback].concat(functionTestTuple))};testEachRejectedPromise.skip=function(functionName,callback){for(var _len23=arguments.length,functionTestTuple=new Array(_len23>2?_len23-2:0),_key23=2;_key23<_len23;_key23++){functionTestTuple[_key23-2]=arguments[_key23]}_testEachRejectedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.skip.each,functionName,callback].concat(functionTestTuple))};// endregion
221
605
  // region testEachRejectedPromiseAgainstResolvedPromise
222
606
  /**
223
607
  * Tests each given test set (promise resolving to expected value follows by
@@ -229,11 +613,7 @@ testEachRejectedPromise.skip = (functionName, callback, ...functionTestTuple) =>
229
613
  * @param callback - Function reference to test.
230
614
  * @param functionTestTuple - Additional arrays of test sets to test given
231
615
  * function again.
232
- */
233
- const _testEachRejectedPromiseAgainstResolvedPromise = (tester, functionName, callback, ...functionTestTuple) => {
234
- tester([...functionTestTuple])(`%p === ${functionName}(%p, ...)`, async (expected, ...parameters) => expectExpectedType(expect(callback(...parameters)).rejects, await expected, false));
235
- };
236
- /**
616
+ */var _testEachRejectedPromiseAgainstResolvedPromise=function _testEachRejectedPromiseAgainstResolvedPromise(tester,functionName,callback){for(var _len24=arguments.length,functionTestTuple=new Array(_len24>3?_len24-3:0),_key24=3;_key24<_len24;_key24++){functionTestTuple[_key24-3]=arguments[_key24]}tester([].concat(functionTestTuple))("%p === ".concat(functionName,"(%p, ...)"),/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(expected){var _len25,parameters,_key25,_args3=arguments,_t5,_t6;return _regenerator().w(function(_context3){while(1)switch(_context3.n){case 0:for(_len25=_args3.length,parameters=new Array(_len25>1?_len25-1:0),_key25=1;_key25<_len25;_key25++){parameters[_key25-1]=_args3[_key25]}_t5=expectExpectedType;_t6=__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_expect__(callback.apply(void 0,parameters)).rejects;_context3.n=1;return expected;case 1:return _context3.a(2,_t5(_t6,_context3.v,false))}},_callee3)})))};/**
237
617
  * Tests each given test set (expected value follows by various list of
238
618
  * function parameters). It respects function signature to raise compile time
239
619
  * errors if given test set does not match given function signature.
@@ -241,17 +621,7 @@ const _testEachRejectedPromiseAgainstResolvedPromise = (tester, functionName, ca
241
621
  * @param callback - Function reference to test.
242
622
  * @param functionTestTuple - Additional arrays of test sets to test given
243
623
  * function again.
244
- */
245
- export const testEachRejectedPromiseAgainstResolvedPromise = (functionName, callback, ...functionTestTuple) => {
246
- _testEachRejectedPromiseAgainstResolvedPromise(test.each, functionName, callback, ...functionTestTuple);
247
- };
248
- testEachRejectedPromiseAgainstResolvedPromise.only = (functionName, callback, ...functionTestTuple) => {
249
- _testEachRejectedPromiseAgainstResolvedPromise(test.only.each, functionName, callback, ...functionTestTuple);
250
- };
251
- testEachRejectedPromiseAgainstResolvedPromise.skip = (functionName, callback, ...functionTestTuple) => {
252
- _testEachRejectedPromiseAgainstResolvedPromise(test.skip.each, functionName, callback, ...functionTestTuple);
253
- };
254
- // endregion
624
+ */var testEachRejectedPromiseAgainstResolvedPromise=function testEachRejectedPromiseAgainstResolvedPromise(functionName,callback){for(var _len26=arguments.length,functionTestTuple=new Array(_len26>2?_len26-2:0),_key26=2;_key26<_len26;_key26++){functionTestTuple[_key26-2]=arguments[_key26]}_testEachRejectedPromiseAgainstResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.each,functionName,callback].concat(functionTestTuple))};testEachRejectedPromiseAgainstResolvedPromise.only=function(functionName,callback){for(var _len27=arguments.length,functionTestTuple=new Array(_len27>2?_len27-2:0),_key27=2;_key27<_len27;_key27++){functionTestTuple[_key27-2]=arguments[_key27]}_testEachRejectedPromiseAgainstResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.only.each,functionName,callback].concat(functionTestTuple))};testEachRejectedPromiseAgainstResolvedPromise.skip=function(functionName,callback){for(var _len28=arguments.length,functionTestTuple=new Array(_len28>2?_len28-2:0),_key28=2;_key28<_len28;_key28++){functionTestTuple[_key28-2]=arguments[_key28]}_testEachRejectedPromiseAgainstResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.skip.each,functionName,callback].concat(functionTestTuple))};// endregion
255
625
  // region testEachSingleParameterAgainstSameExpectation
256
626
  /**
257
627
  * Tests each given single parameter against same given expected value. It
@@ -262,13 +632,7 @@ testEachRejectedPromiseAgainstResolvedPromise.skip = (functionName, callback, ..
262
632
  * @param callback - Function reference to test.
263
633
  * @param expected - Value to check each function call return value against.
264
634
  * @param parameters - Additional first parameters to test given function with.
265
- */
266
- const _testEachSingleParameterAgainstSameExpectation = (tester, functionName, callback, expected, ...parameters) => {
267
- tester([...parameters])(`${represent(expected)} === ${functionName}(%p)`, parameter => {
268
- expectExpectedType(expected === TEST_THROW_SYMBOL ? () => callback(parameter) : callback(parameter), expected);
269
- });
270
- };
271
- /**
635
+ */var _testEachSingleParameterAgainstSameExpectation=function _testEachSingleParameterAgainstSameExpectation(tester,functionName,callback,expected){for(var _len29=arguments.length,parameters=new Array(_len29>4?_len29-4:0),_key29=4;_key29<_len29;_key29++){parameters[_key29-4]=arguments[_key29]}tester([].concat(parameters))("".concat((0,object/* represent */.Do)(expected)," === ").concat(functionName,"(%p)"),function(parameter){expectExpectedType(expected===TEST_THROW_SYMBOL?function(){return callback(parameter)}:callback(parameter),expected)})};/**
272
636
  * Tests each given single parameter against same given expected value. It
273
637
  * respects function signature to raise compile time errors if given test set
274
638
  * does not match given function signature.
@@ -276,17 +640,7 @@ const _testEachSingleParameterAgainstSameExpectation = (tester, functionName, ca
276
640
  * @param callback - Function reference to test.
277
641
  * @param expected - Value to check each function call return value against.
278
642
  * @param parameters - Additional first parameters to test given function with.
279
- */
280
- export const testEachSingleParameterAgainstSameExpectation = (functionName, callback, expected, ...parameters) => {
281
- _testEachSingleParameterAgainstSameExpectation(test.each, functionName, callback, expected, ...parameters);
282
- };
283
- testEachSingleParameterAgainstSameExpectation.only = (functionName, callback, expected, ...parameters) => {
284
- _testEachSingleParameterAgainstSameExpectation(test.only.each, functionName, callback, expected, ...parameters);
285
- };
286
- testEachSingleParameterAgainstSameExpectation.skip = (functionName, callback, expected, ...parameters) => {
287
- _testEachSingleParameterAgainstSameExpectation(test.skip.each, functionName, callback, expected, ...parameters);
288
- };
289
- // endregion
643
+ */var testEachSingleParameterAgainstSameExpectation=function testEachSingleParameterAgainstSameExpectation(functionName,callback,expected){for(var _len30=arguments.length,parameters=new Array(_len30>3?_len30-3:0),_key30=3;_key30<_len30;_key30++){parameters[_key30-3]=arguments[_key30]}_testEachSingleParameterAgainstSameExpectation.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.each,functionName,callback,expected].concat(parameters))};testEachSingleParameterAgainstSameExpectation.only=function(functionName,callback,expected){for(var _len31=arguments.length,parameters=new Array(_len31>3?_len31-3:0),_key31=3;_key31<_len31;_key31++){parameters[_key31-3]=arguments[_key31]}_testEachSingleParameterAgainstSameExpectation.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.only.each,functionName,callback,expected].concat(parameters))};testEachSingleParameterAgainstSameExpectation.skip=function(functionName,callback,expected){for(var _len32=arguments.length,parameters=new Array(_len32>3?_len32-3:0),_key32=3;_key32<_len32;_key32++){parameters[_key32-3]=arguments[_key32]}_testEachSingleParameterAgainstSameExpectation.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.skip.each,functionName,callback,expected].concat(parameters))};// endregion
290
644
  // region testEachResolvedPromiseWithSingleParameterAgainstSameExpectation
291
645
  /**
292
646
  * Tests each given single parameter against same given expected value. It
@@ -297,11 +651,7 @@ testEachSingleParameterAgainstSameExpectation.skip = (functionName, callback, ex
297
651
  * @param callback - Function reference to test.
298
652
  * @param expected - Value to check each function call return value against.
299
653
  * @param parameters - Additional first parameters to test given function with.
300
- */
301
- const _testEachResolvedPromiseWithSingleParameterAgainstSameExpectation = (tester, functionName, callback, expected, ...parameters) => {
302
- tester([...parameters])(`${represent(expected)} === ${functionName}(%p)`, parameter => expectExpectedType(expect(callback(parameter)).resolves, expected, false));
303
- };
304
- /**
654
+ */var _testEachResolvedPromiseWithSingleParameterAgainstSameExpectation=function _testEachResolvedPromiseWithSingleParameterAgainstSameExpectation(tester,functionName,callback,expected){for(var _len33=arguments.length,parameters=new Array(_len33>4?_len33-4:0),_key33=4;_key33<_len33;_key33++){parameters[_key33-4]=arguments[_key33]}tester([].concat(parameters))("".concat((0,object/* represent */.Do)(expected)," === ").concat(functionName,"(%p)"),function(parameter){return expectExpectedType(__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_expect__(callback(parameter)).resolves,expected,false)})};/**
305
655
  * Tests each given single parameter against same given expected value. It
306
656
  * respects function signature to raise compile time errors if given test set
307
657
  * does not match given function signature.
@@ -309,17 +659,7 @@ const _testEachResolvedPromiseWithSingleParameterAgainstSameExpectation = (teste
309
659
  * @param callback - Function reference to test.
310
660
  * @param expected - Value to check each function call return value against.
311
661
  * @param parameters - Additional first parameters to test given function with.
312
- */
313
- export const testEachResolvedPromiseWithSingleParameterAgainstSameExpectation = (functionName, callback, expected, ...parameters) => {
314
- _testEachResolvedPromiseWithSingleParameterAgainstSameExpectation(test.each, functionName, callback, expected, ...parameters);
315
- };
316
- testEachResolvedPromiseWithSingleParameterAgainstSameExpectation.only = (functionName, callback, expected, ...parameters) => {
317
- _testEachResolvedPromiseWithSingleParameterAgainstSameExpectation(test.only.each, functionName, callback, expected, ...parameters);
318
- };
319
- testEachResolvedPromiseWithSingleParameterAgainstSameExpectation.skip = (functionName, callback, expected, ...parameters) => {
320
- _testEachResolvedPromiseWithSingleParameterAgainstSameExpectation(test.skip.each, functionName, callback, expected, ...parameters);
321
- };
322
- // endregion
662
+ */var testEachResolvedPromiseWithSingleParameterAgainstSameExpectation=function testEachResolvedPromiseWithSingleParameterAgainstSameExpectation(functionName,callback,expected){for(var _len34=arguments.length,parameters=new Array(_len34>3?_len34-3:0),_key34=3;_key34<_len34;_key34++){parameters[_key34-3]=arguments[_key34]}_testEachResolvedPromiseWithSingleParameterAgainstSameExpectation.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.each,functionName,callback,expected].concat(parameters))};testEachResolvedPromiseWithSingleParameterAgainstSameExpectation.only=function(functionName,callback,expected){for(var _len35=arguments.length,parameters=new Array(_len35>3?_len35-3:0),_key35=3;_key35<_len35;_key35++){parameters[_key35-3]=arguments[_key35]}_testEachResolvedPromiseWithSingleParameterAgainstSameExpectation.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.only.each,functionName,callback,expected].concat(parameters))};testEachResolvedPromiseWithSingleParameterAgainstSameExpectation.skip=function(functionName,callback,expected){for(var _len36=arguments.length,parameters=new Array(_len36>3?_len36-3:0),_key36=3;_key36<_len36;_key36++){parameters[_key36-3]=arguments[_key36]}_testEachResolvedPromiseWithSingleParameterAgainstSameExpectation.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.skip.each,functionName,callback,expected].concat(parameters))};// endregion
323
663
  // region testEachResolvedPromiseWithSingleParameterAgainstSameResolvedPromise
324
664
  /**
325
665
  * Tests each given single parameter against same given promises resolving to
@@ -331,11 +671,7 @@ testEachResolvedPromiseWithSingleParameterAgainstSameExpectation.skip = (functio
331
671
  * @param expected - Promise resolving to value to check each function call
332
672
  * return value against.
333
673
  * @param parameters - Additional first parameters to test given function with.
334
- */
335
- const _testEachResolvedPromiseWithSingleParameterAgainstSameResolvedPromise = (tester, functionName, callback, expected, ...parameters) => {
336
- tester([...parameters])(`${represent(expected)} === ${functionName}(%p)`, async parameter => expectExpectedType(expect(callback(parameter)).resolves, await expected, false));
337
- };
338
- /**
674
+ */var _testEachResolvedPromiseWithSingleParameterAgainstSameResolvedPromise=function _testEachResolvedPromiseWithSingleParameterAgainstSameResolvedPromise(tester,functionName,callback,expected){for(var _len37=arguments.length,parameters=new Array(_len37>4?_len37-4:0),_key37=4;_key37<_len37;_key37++){parameters[_key37-4]=arguments[_key37]}tester([].concat(parameters))("".concat((0,object/* represent */.Do)(expected)," === ").concat(functionName,"(%p)"),/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(parameter){var _t7,_t8;return _regenerator().w(function(_context4){while(1)switch(_context4.n){case 0:_t7=expectExpectedType;_t8=__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_expect__(callback(parameter)).resolves;_context4.n=1;return expected;case 1:return _context4.a(2,_t7(_t8,_context4.v,false))}},_callee4)})))};/**
339
675
  * Tests each given single parameter against same given promises resolving to
340
676
  * expected value. It respects function signature to raise compile time errors
341
677
  * if given test set does not match given function signature.
@@ -344,17 +680,7 @@ const _testEachResolvedPromiseWithSingleParameterAgainstSameResolvedPromise = (t
344
680
  * @param expected - Promise resolving to value to check each function call
345
681
  * return value against.
346
682
  * @param parameters - Additional first parameters to test given function with.
347
- */
348
- export const testEachResolvedPromiseWithSingleParameterAgainstSameResolvedPromise = (functionName, callback, expected, ...parameters) => {
349
- _testEachResolvedPromiseWithSingleParameterAgainstSameResolvedPromise(test.each, functionName, callback, expected, ...parameters);
350
- };
351
- testEachResolvedPromiseWithSingleParameterAgainstSameResolvedPromise.only = (functionName, callback, expected, ...parameters) => {
352
- _testEachResolvedPromiseWithSingleParameterAgainstSameResolvedPromise(test.only.each, functionName, callback, expected, ...parameters);
353
- };
354
- testEachResolvedPromiseWithSingleParameterAgainstSameResolvedPromise.skip = (functionName, callback, expected, ...parameters) => {
355
- _testEachResolvedPromiseWithSingleParameterAgainstSameResolvedPromise(test.skip.each, functionName, callback, expected, ...parameters);
356
- };
357
- // endregion
683
+ */var testEachResolvedPromiseWithSingleParameterAgainstSameResolvedPromise=function testEachResolvedPromiseWithSingleParameterAgainstSameResolvedPromise(functionName,callback,expected){for(var _len38=arguments.length,parameters=new Array(_len38>3?_len38-3:0),_key38=3;_key38<_len38;_key38++){parameters[_key38-3]=arguments[_key38]}_testEachResolvedPromiseWithSingleParameterAgainstSameResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.each,functionName,callback,expected].concat(parameters))};testEachResolvedPromiseWithSingleParameterAgainstSameResolvedPromise.only=function(functionName,callback,expected){for(var _len39=arguments.length,parameters=new Array(_len39>3?_len39-3:0),_key39=3;_key39<_len39;_key39++){parameters[_key39-3]=arguments[_key39]}_testEachResolvedPromiseWithSingleParameterAgainstSameResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.only.each,functionName,callback,expected].concat(parameters))};testEachResolvedPromiseWithSingleParameterAgainstSameResolvedPromise.skip=function(functionName,callback,expected){for(var _len40=arguments.length,parameters=new Array(_len40>3?_len40-3:0),_key40=3;_key40<_len40;_key40++){parameters[_key40-3]=arguments[_key40]}_testEachResolvedPromiseWithSingleParameterAgainstSameResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.skip.each,functionName,callback,expected].concat(parameters))};// endregion
358
684
  // region testEachRejectedPromiseWithSingleParameterAgainstSameExpectation
359
685
  /**
360
686
  * Tests each given single parameter against same given expected value. It
@@ -365,11 +691,7 @@ testEachResolvedPromiseWithSingleParameterAgainstSameResolvedPromise.skip = (fun
365
691
  * @param callback - Function reference to test.
366
692
  * @param expected - Value to check each function call return value against.
367
693
  * @param parameters - Additional first parameters to test given function with.
368
- */
369
- const _testEachRejectedPromiseWithSingleParameterAgainstSameExpectation = (tester, functionName, callback, expected, ...parameters) => {
370
- tester([...parameters])(`${represent(expected)} === ${functionName}(%p)`, parameter => expectExpectedType(expect(callback(parameter)).rejects, expected, false));
371
- };
372
- /**
694
+ */var _testEachRejectedPromiseWithSingleParameterAgainstSameExpectation=function _testEachRejectedPromiseWithSingleParameterAgainstSameExpectation(tester,functionName,callback,expected){for(var _len41=arguments.length,parameters=new Array(_len41>4?_len41-4:0),_key41=4;_key41<_len41;_key41++){parameters[_key41-4]=arguments[_key41]}tester([].concat(parameters))("".concat((0,object/* represent */.Do)(expected)," === ").concat(functionName,"(%p)"),function(parameter){return expectExpectedType(__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_expect__(callback(parameter)).rejects,expected,false)})};/**
373
695
  * Tests each given single parameter against same given expected value. It
374
696
  * respects function signature to raise compile time errors if given test set
375
697
  * does not match given function signature.
@@ -377,17 +699,7 @@ const _testEachRejectedPromiseWithSingleParameterAgainstSameExpectation = (teste
377
699
  * @param callback - Function reference to test.
378
700
  * @param expected - Value to check each function call return value against.
379
701
  * @param parameters - Additional first parameters to test given function with.
380
- */
381
- export const testEachRejectedPromiseWithSingleParameterAgainstSameExpectation = (functionName, callback, expected, ...parameters) => {
382
- _testEachRejectedPromiseWithSingleParameterAgainstSameExpectation(test.each, functionName, callback, expected, ...parameters);
383
- };
384
- testEachRejectedPromiseWithSingleParameterAgainstSameExpectation.only = (functionName, callback, expected, ...parameters) => {
385
- _testEachRejectedPromiseWithSingleParameterAgainstSameExpectation(test.only.each, functionName, callback, expected, ...parameters);
386
- };
387
- testEachRejectedPromiseWithSingleParameterAgainstSameExpectation.skip = (functionName, callback, expected, ...parameters) => {
388
- _testEachRejectedPromiseWithSingleParameterAgainstSameExpectation(test.skip.each, functionName, callback, expected, ...parameters);
389
- };
390
- // endregion
702
+ */var testEachRejectedPromiseWithSingleParameterAgainstSameExpectation=function testEachRejectedPromiseWithSingleParameterAgainstSameExpectation(functionName,callback,expected){for(var _len42=arguments.length,parameters=new Array(_len42>3?_len42-3:0),_key42=3;_key42<_len42;_key42++){parameters[_key42-3]=arguments[_key42]}_testEachRejectedPromiseWithSingleParameterAgainstSameExpectation.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.each,functionName,callback,expected].concat(parameters))};testEachRejectedPromiseWithSingleParameterAgainstSameExpectation.only=function(functionName,callback,expected){for(var _len43=arguments.length,parameters=new Array(_len43>3?_len43-3:0),_key43=3;_key43<_len43;_key43++){parameters[_key43-3]=arguments[_key43]}_testEachRejectedPromiseWithSingleParameterAgainstSameExpectation.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.only.each,functionName,callback,expected].concat(parameters))};testEachRejectedPromiseWithSingleParameterAgainstSameExpectation.skip=function(functionName,callback,expected){for(var _len44=arguments.length,parameters=new Array(_len44>3?_len44-3:0),_key44=3;_key44<_len44;_key44++){parameters[_key44-3]=arguments[_key44]}_testEachRejectedPromiseWithSingleParameterAgainstSameExpectation.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.skip.each,functionName,callback,expected].concat(parameters))};// endregion
391
703
  // region testEachRejectedPromiseWithSingleParameterAgainstSameResolvedPromise
392
704
  /**
393
705
  * Tests each given single parameter against same given promise resolving
@@ -399,11 +711,7 @@ testEachRejectedPromiseWithSingleParameterAgainstSameExpectation.skip = (functio
399
711
  * @param expected - Promise resolving to value to check each function call
400
712
  * return value against.
401
713
  * @param parameters - Additional first parameters to test given function with.
402
- */
403
- const _testEachRejectedPromiseWithSingleParameterAgainstSameResolvedPromise = (tester, functionName, callback, expected, ...parameters) => {
404
- tester([...parameters])(`${represent(expected)} === ${functionName}(%p)`, async parameter => expectExpectedType(expect(callback(parameter)).rejects, await expected, false));
405
- };
406
- /**
714
+ */var _testEachRejectedPromiseWithSingleParameterAgainstSameResolvedPromise=function _testEachRejectedPromiseWithSingleParameterAgainstSameResolvedPromise(tester,functionName,callback,expected){for(var _len45=arguments.length,parameters=new Array(_len45>4?_len45-4:0),_key45=4;_key45<_len45;_key45++){parameters[_key45-4]=arguments[_key45]}tester([].concat(parameters))("".concat((0,object/* represent */.Do)(expected)," === ").concat(functionName,"(%p)"),/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(parameter){var _t9,_t0;return _regenerator().w(function(_context5){while(1)switch(_context5.n){case 0:_t9=expectExpectedType;_t0=__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_expect__(callback(parameter)).rejects;_context5.n=1;return expected;case 1:return _context5.a(2,_t9(_t0,_context5.v,false))}},_callee5)})))};/**
407
715
  * Tests each given single parameter against same given expected value. It
408
716
  * respects function signature to raise compile time errors if given test set
409
717
  * does not match given function signature.
@@ -411,17 +719,7 @@ const _testEachRejectedPromiseWithSingleParameterAgainstSameResolvedPromise = (t
411
719
  * @param callback - Function reference to test.
412
720
  * @param expected - Value to check each function call return value against.
413
721
  * @param parameters - Additional first parameters to test given function with.
414
- */
415
- export const testEachRejectedPromiseWithSingleParameterAgainstSameResolvedPromise = (functionName, callback, expected, ...parameters) => {
416
- _testEachRejectedPromiseWithSingleParameterAgainstSameResolvedPromise(test.each, functionName, callback, expected, ...parameters);
417
- };
418
- testEachRejectedPromiseWithSingleParameterAgainstSameResolvedPromise.only = (functionName, callback, expected, ...parameters) => {
419
- _testEachRejectedPromiseWithSingleParameterAgainstSameResolvedPromise(test.only.each, functionName, callback, expected, ...parameters);
420
- };
421
- testEachRejectedPromiseWithSingleParameterAgainstSameResolvedPromise.skip = (functionName, callback, expected, ...parameters) => {
422
- _testEachRejectedPromiseWithSingleParameterAgainstSameResolvedPromise(test.skip.each, functionName, callback, expected, ...parameters);
423
- };
424
- // endregion
722
+ */var testEachRejectedPromiseWithSingleParameterAgainstSameResolvedPromise=function testEachRejectedPromiseWithSingleParameterAgainstSameResolvedPromise(functionName,callback,expected){for(var _len46=arguments.length,parameters=new Array(_len46>3?_len46-3:0),_key46=3;_key46<_len46;_key46++){parameters[_key46-3]=arguments[_key46]}_testEachRejectedPromiseWithSingleParameterAgainstSameResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.each,functionName,callback,expected].concat(parameters))};testEachRejectedPromiseWithSingleParameterAgainstSameResolvedPromise.only=function(functionName,callback,expected){for(var _len47=arguments.length,parameters=new Array(_len47>3?_len47-3:0),_key47=3;_key47<_len47;_key47++){parameters[_key47-3]=arguments[_key47]}_testEachRejectedPromiseWithSingleParameterAgainstSameResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.only.each,functionName,callback,expected].concat(parameters))};testEachRejectedPromiseWithSingleParameterAgainstSameResolvedPromise.skip=function(functionName,callback,expected){for(var _len48=arguments.length,parameters=new Array(_len48>3?_len48-3:0),_key48=3;_key48<_len48;_key48++){parameters[_key48-3]=arguments[_key48]}_testEachRejectedPromiseWithSingleParameterAgainstSameResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.skip.each,functionName,callback,expected].concat(parameters))};// endregion
425
723
  // region testEachAgainstSameExpectation
426
724
  /**
427
725
  * Tests each given test set (various list of function parameters) against same
@@ -433,13 +731,7 @@ testEachRejectedPromiseWithSingleParameterAgainstSameResolvedPromise.skip = (fun
433
731
  * @param expected - Value to check each function call return value against.
434
732
  * @param functionParameters - Additional lists of parameters to test given
435
733
  * function again.
436
- */
437
- const _testEachAgainstSameExpectation = (tester, functionName, callback, expected, ...functionParameters) => {
438
- tester([...functionParameters])(`${represent(expected)} === ${functionName}(%p, ...)`, (...parameters) => {
439
- expectExpectedType(expected === TEST_THROW_SYMBOL ? () => callback(...parameters) : callback(...parameters), expected);
440
- });
441
- };
442
- /**
734
+ */var _testEachAgainstSameExpectation=function _testEachAgainstSameExpectation(tester,functionName,callback,expected){for(var _len49=arguments.length,functionParameters=new Array(_len49>4?_len49-4:0),_key49=4;_key49<_len49;_key49++){functionParameters[_key49-4]=arguments[_key49]}tester([].concat(functionParameters))("".concat((0,object/* represent */.Do)(expected)," === ").concat(functionName,"(%p, ...)"),function(){for(var _len50=arguments.length,parameters=new Array(_len50),_key50=0;_key50<_len50;_key50++){parameters[_key50]=arguments[_key50]}expectExpectedType(expected===TEST_THROW_SYMBOL?function(){return callback.apply(void 0,parameters)}:callback.apply(void 0,parameters),expected)})};/**
443
735
  * Tests each given test set (various list of function parameters) against same
444
736
  * given expected value. It respects function signature to raise compile time
445
737
  * errors if given test set does not match given function signature.
@@ -448,17 +740,7 @@ const _testEachAgainstSameExpectation = (tester, functionName, callback, expecte
448
740
  * @param expected - Value to check each function call return value against.
449
741
  * @param functionParameters - Additional lists of parameters to test given
450
742
  * function again.
451
- */
452
- export const testEachAgainstSameExpectation = (functionName, callback, expected, ...functionParameters) => {
453
- _testEachAgainstSameExpectation(test.each, functionName, callback, expected, ...functionParameters);
454
- };
455
- testEachAgainstSameExpectation.only = (functionName, callback, expected, ...functionParameters) => {
456
- _testEachAgainstSameExpectation(test.only.each, functionName, callback, expected, ...functionParameters);
457
- };
458
- testEachAgainstSameExpectation.skip = (functionName, callback, expected, ...functionParameters) => {
459
- _testEachAgainstSameExpectation(test.skip.each, functionName, callback, expected, ...functionParameters);
460
- };
461
- // endregion
743
+ */var testEachAgainstSameExpectation=function testEachAgainstSameExpectation(functionName,callback,expected){for(var _len51=arguments.length,functionParameters=new Array(_len51>3?_len51-3:0),_key51=3;_key51<_len51;_key51++){functionParameters[_key51-3]=arguments[_key51]}_testEachAgainstSameExpectation.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.each,functionName,callback,expected].concat(functionParameters))};testEachAgainstSameExpectation.only=function(functionName,callback,expected){for(var _len52=arguments.length,functionParameters=new Array(_len52>3?_len52-3:0),_key52=3;_key52<_len52;_key52++){functionParameters[_key52-3]=arguments[_key52]}_testEachAgainstSameExpectation.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.only.each,functionName,callback,expected].concat(functionParameters))};testEachAgainstSameExpectation.skip=function(functionName,callback,expected){for(var _len53=arguments.length,functionParameters=new Array(_len53>3?_len53-3:0),_key53=3;_key53<_len53;_key53++){functionParameters[_key53-3]=arguments[_key53]}_testEachAgainstSameExpectation.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.skip.each,functionName,callback,expected].concat(functionParameters))};// endregion
462
744
  // region testEachResolvedPromiseAgainstSameExpectation
463
745
  /**
464
746
  * Tests each given test set (various list of function parameters) against same
@@ -470,11 +752,7 @@ testEachAgainstSameExpectation.skip = (functionName, callback, expected, ...func
470
752
  * @param expected - Value to check each function call return value against.
471
753
  * @param functionParameters - Additional lists of parameters to test given
472
754
  * function again.
473
- */
474
- const _testEachResolvedPromiseAgainstSameExpectation = (tester, functionName, callback, expected, ...functionParameters) => {
475
- tester([...functionParameters])(`${represent(expected)} === ${functionName}(%p, ...)`, (...parameters) => expectExpectedType(expect(callback(...parameters)).resolves, expected, false));
476
- };
477
- /**
755
+ */var _testEachResolvedPromiseAgainstSameExpectation=function _testEachResolvedPromiseAgainstSameExpectation(tester,functionName,callback,expected){for(var _len54=arguments.length,functionParameters=new Array(_len54>4?_len54-4:0),_key54=4;_key54<_len54;_key54++){functionParameters[_key54-4]=arguments[_key54]}tester([].concat(functionParameters))("".concat((0,object/* represent */.Do)(expected)," === ").concat(functionName,"(%p, ...)"),function(){return expectExpectedType(__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_expect__(callback.apply(void 0,arguments)).resolves,expected,false)})};/**
478
756
  * Tests each given test set (various list of function parameters) against same
479
757
  * given expected value. It respects function signature to raise compile time
480
758
  * errors if given test set does not match given function signature.
@@ -483,17 +761,7 @@ const _testEachResolvedPromiseAgainstSameExpectation = (tester, functionName, ca
483
761
  * @param expected - Value to check each function call return value against.
484
762
  * @param functionParameters - Additional lists of parameters to test given
485
763
  * function again.
486
- */
487
- export const testEachResolvedPromiseAgainstSameExpectation = (functionName, callback, expected, ...functionParameters) => {
488
- _testEachResolvedPromiseAgainstSameExpectation(test.each, functionName, callback, expected, ...functionParameters);
489
- };
490
- testEachResolvedPromiseAgainstSameExpectation.only = (functionName, callback, expected, ...functionParameters) => {
491
- _testEachResolvedPromiseAgainstSameExpectation(test.only.each, functionName, callback, expected, ...functionParameters);
492
- };
493
- testEachResolvedPromiseAgainstSameExpectation.skip = (functionName, callback, expected, ...functionParameters) => {
494
- _testEachResolvedPromiseAgainstSameExpectation(test.skip.each, functionName, callback, expected, ...functionParameters);
495
- };
496
- // endregion
764
+ */var testEachResolvedPromiseAgainstSameExpectation=function testEachResolvedPromiseAgainstSameExpectation(functionName,callback,expected){for(var _len55=arguments.length,functionParameters=new Array(_len55>3?_len55-3:0),_key55=3;_key55<_len55;_key55++){functionParameters[_key55-3]=arguments[_key55]}_testEachResolvedPromiseAgainstSameExpectation.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.each,functionName,callback,expected].concat(functionParameters))};testEachResolvedPromiseAgainstSameExpectation.only=function(functionName,callback,expected){for(var _len56=arguments.length,functionParameters=new Array(_len56>3?_len56-3:0),_key56=3;_key56<_len56;_key56++){functionParameters[_key56-3]=arguments[_key56]}_testEachResolvedPromiseAgainstSameExpectation.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.only.each,functionName,callback,expected].concat(functionParameters))};testEachResolvedPromiseAgainstSameExpectation.skip=function(functionName,callback,expected){for(var _len57=arguments.length,functionParameters=new Array(_len57>3?_len57-3:0),_key57=3;_key57<_len57;_key57++){functionParameters[_key57-3]=arguments[_key57]}_testEachResolvedPromiseAgainstSameExpectation.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.skip.each,functionName,callback,expected].concat(functionParameters))};// endregion
497
765
  // region testEachResolvedPromiseAgainstSameResolvedPromise
498
766
  /**
499
767
  * Tests each given test set (various list of function parameters) against same
@@ -507,11 +775,7 @@ testEachResolvedPromiseAgainstSameExpectation.skip = (functionName, callback, ex
507
775
  * return value against.
508
776
  * @param functionParameters - Additional lists of parameters to test given
509
777
  * function again.
510
- */
511
- const _testEachResolvedPromiseAgainstSameResolvedPromise = (tester, functionName, callback, expected, ...functionParameters) => {
512
- tester([...functionParameters])(`${represent(expected)} === ${functionName}(%p, ...)`, async (...parameters) => expectExpectedType(expect(callback(...parameters)).resolves, await expected, false));
513
- };
514
- /**
778
+ */var _testEachResolvedPromiseAgainstSameResolvedPromise=function _testEachResolvedPromiseAgainstSameResolvedPromise(tester,functionName,callback,expected){for(var _len58=arguments.length,functionParameters=new Array(_len58>4?_len58-4:0),_key58=4;_key58<_len58;_key58++){functionParameters[_key58-4]=arguments[_key58]}tester([].concat(functionParameters))("".concat((0,object/* represent */.Do)(expected)," === ").concat(functionName,"(%p, ...)"),/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(){var _args6=arguments,_t1,_t10;return _regenerator().w(function(_context6){while(1)switch(_context6.n){case 0:_t1=expectExpectedType;_t10=__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_expect__(callback.apply(void 0,_args6)).resolves;_context6.n=1;return expected;case 1:return _context6.a(2,_t1(_t10,_context6.v,false))}},_callee6)})))};/**
515
779
  * Tests each given test set (various list of function parameters) against same
516
780
  * given promise resolving expected value. It respects function signature to
517
781
  * raise compile time errors if given test set does not match given function
@@ -522,17 +786,7 @@ const _testEachResolvedPromiseAgainstSameResolvedPromise = (tester, functionName
522
786
  * return value against.
523
787
  * @param functionParameters - Additional lists of parameters to test given
524
788
  * function again.
525
- */
526
- export const testEachResolvedPromiseAgainstSameResolvedPromise = (functionName, callback, expected, ...functionParameters) => {
527
- _testEachResolvedPromiseAgainstSameResolvedPromise(test.each, functionName, callback, expected, ...functionParameters);
528
- };
529
- testEachResolvedPromiseAgainstSameResolvedPromise.only = (functionName, callback, expected, ...functionParameters) => {
530
- _testEachResolvedPromiseAgainstSameResolvedPromise(test.only.each, functionName, callback, expected, ...functionParameters);
531
- };
532
- testEachResolvedPromiseAgainstSameResolvedPromise.skip = (functionName, callback, expected, ...functionParameters) => {
533
- _testEachResolvedPromiseAgainstSameResolvedPromise(test.skip.each, functionName, callback, expected, ...functionParameters);
534
- };
535
- // endregion
789
+ */var testEachResolvedPromiseAgainstSameResolvedPromise=function testEachResolvedPromiseAgainstSameResolvedPromise(functionName,callback,expected){for(var _len59=arguments.length,functionParameters=new Array(_len59>3?_len59-3:0),_key59=3;_key59<_len59;_key59++){functionParameters[_key59-3]=arguments[_key59]}_testEachResolvedPromiseAgainstSameResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.each,functionName,callback,expected].concat(functionParameters))};testEachResolvedPromiseAgainstSameResolvedPromise.only=function(functionName,callback,expected){for(var _len60=arguments.length,functionParameters=new Array(_len60>3?_len60-3:0),_key60=3;_key60<_len60;_key60++){functionParameters[_key60-3]=arguments[_key60]}_testEachResolvedPromiseAgainstSameResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.only.each,functionName,callback,expected].concat(functionParameters))};testEachResolvedPromiseAgainstSameResolvedPromise.skip=function(functionName,callback,expected){for(var _len61=arguments.length,functionParameters=new Array(_len61>3?_len61-3:0),_key61=3;_key61<_len61;_key61++){functionParameters[_key61-3]=arguments[_key61]}_testEachResolvedPromiseAgainstSameResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.skip.each,functionName,callback,expected].concat(functionParameters))};// endregion
536
790
  // region testEachRejectedPromiseAgainstSameExpectation
537
791
  /**
538
792
  * Tests each given test set (various list of function parameters) against same
@@ -544,11 +798,7 @@ testEachResolvedPromiseAgainstSameResolvedPromise.skip = (functionName, callback
544
798
  * @param expected - Value to check each function call return value against.
545
799
  * @param functionParameters - Additional lists of parameters to test given
546
800
  * function again.
547
- */
548
- const _testEachRejectedPromiseAgainstSameExpectation = (tester, functionName, callback, expected, ...functionParameters) => {
549
- tester([...functionParameters])(`${represent(expected)} === ${functionName}(%p, ...)`, (...parameters) => expectExpectedType(expect(callback(...parameters)).rejects, expected, false));
550
- };
551
- /**
801
+ */var _testEachRejectedPromiseAgainstSameExpectation=function _testEachRejectedPromiseAgainstSameExpectation(tester,functionName,callback,expected){for(var _len62=arguments.length,functionParameters=new Array(_len62>4?_len62-4:0),_key62=4;_key62<_len62;_key62++){functionParameters[_key62-4]=arguments[_key62]}tester([].concat(functionParameters))("".concat((0,object/* represent */.Do)(expected)," === ").concat(functionName,"(%p, ...)"),function(){return expectExpectedType(__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_expect__(callback.apply(void 0,arguments)).rejects,expected,false)})};/**
552
802
  * Tests each given test set (various list of function parameters) against same
553
803
  * given expected value. It respects function signature to raise compile time
554
804
  * errors if given test set does not match given function signature.
@@ -557,17 +807,7 @@ const _testEachRejectedPromiseAgainstSameExpectation = (tester, functionName, ca
557
807
  * @param expected - Value to check each function call return value against.
558
808
  * @param functionParameters - Additional lists of parameters to test given
559
809
  * function again.
560
- */
561
- export const testEachRejectedPromiseAgainstSameExpectation = (functionName, callback, expected, ...functionParameters) => {
562
- _testEachRejectedPromiseAgainstSameExpectation(test.each, functionName, callback, expected, ...functionParameters);
563
- };
564
- testEachRejectedPromiseAgainstSameExpectation.only = (functionName, callback, expected, ...functionParameters) => {
565
- _testEachRejectedPromiseAgainstSameExpectation(test.only.each, functionName, callback, expected, ...functionParameters);
566
- };
567
- testEachRejectedPromiseAgainstSameExpectation.skip = (functionName, callback, expected, ...functionParameters) => {
568
- _testEachRejectedPromiseAgainstSameExpectation(test.skip.each, functionName, callback, expected, ...functionParameters);
569
- };
570
- // endregion
810
+ */var testEachRejectedPromiseAgainstSameExpectation=function testEachRejectedPromiseAgainstSameExpectation(functionName,callback,expected){for(var _len63=arguments.length,functionParameters=new Array(_len63>3?_len63-3:0),_key63=3;_key63<_len63;_key63++){functionParameters[_key63-3]=arguments[_key63]}_testEachRejectedPromiseAgainstSameExpectation.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.each,functionName,callback,expected].concat(functionParameters))};testEachRejectedPromiseAgainstSameExpectation.only=function(functionName,callback,expected){for(var _len64=arguments.length,functionParameters=new Array(_len64>3?_len64-3:0),_key64=3;_key64<_len64;_key64++){functionParameters[_key64-3]=arguments[_key64]}_testEachRejectedPromiseAgainstSameExpectation.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.only.each,functionName,callback,expected].concat(functionParameters))};testEachRejectedPromiseAgainstSameExpectation.skip=function(functionName,callback,expected){for(var _len65=arguments.length,functionParameters=new Array(_len65>3?_len65-3:0),_key65=3;_key65<_len65;_key65++){functionParameters[_key65-3]=arguments[_key65]}_testEachRejectedPromiseAgainstSameExpectation.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.skip.each,functionName,callback,expected].concat(functionParameters))};// endregion
571
811
  // region testEachRejectedPromiseAgainstSameResolvedPromise
572
812
  /**
573
813
  * Tests each given test set (various list of function parameters) against same
@@ -581,11 +821,7 @@ testEachRejectedPromiseAgainstSameExpectation.skip = (functionName, callback, ex
581
821
  * return value against.
582
822
  * @param functionParameters - Additional lists of parameters to test given
583
823
  * function again.
584
- */
585
- const _testEachRejectedPromiseAgainstSameResolvedPromise = (tester, functionName, callback, expected, ...functionParameters) => {
586
- tester([...functionParameters])(`${represent(expected)} === ${functionName}(%p, ...)`, async (...parameters) => expectExpectedType(expect(callback(...parameters)).rejects, await expected, false));
587
- };
588
- /**
824
+ */var _testEachRejectedPromiseAgainstSameResolvedPromise=function _testEachRejectedPromiseAgainstSameResolvedPromise(tester,functionName,callback,expected){for(var _len66=arguments.length,functionParameters=new Array(_len66>4?_len66-4:0),_key66=4;_key66<_len66;_key66++){functionParameters[_key66-4]=arguments[_key66]}tester([].concat(functionParameters))("".concat((0,object/* represent */.Do)(expected)," === ").concat(functionName,"(%p, ...)"),/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7(){var _args7=arguments,_t11,_t12;return _regenerator().w(function(_context7){while(1)switch(_context7.n){case 0:_t11=expectExpectedType;_t12=__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_expect__(callback.apply(void 0,_args7)).rejects;_context7.n=1;return expected;case 1:return _context7.a(2,_t11(_t12,_context7.v,false))}},_callee7)})))};/**
589
825
  * Tests each given test set (various list of function parameters) against same
590
826
  * given promise resolving expected value. It respects function signature to
591
827
  * raise compile time errors if given test set does not match given function
@@ -596,17 +832,6 @@ const _testEachRejectedPromiseAgainstSameResolvedPromise = (tester, functionName
596
832
  * return value against.
597
833
  * @param functionParameters - Additional lists of parameters to test given
598
834
  * function again.
599
- */
600
- export const testEachRejectedPromiseAgainstSameResolvedPromise = (functionName, callback, expected, ...functionParameters) => {
601
- _testEachRejectedPromiseAgainstSameResolvedPromise(test.each, functionName, callback, expected, ...functionParameters);
602
- };
603
- testEachRejectedPromiseAgainstSameResolvedPromise.only = (functionName, callback, expected, ...functionParameters) => {
604
- _testEachRejectedPromiseAgainstSameResolvedPromise(test.only.each, functionName, callback, expected, ...functionParameters);
605
- };
606
- testEachRejectedPromiseAgainstSameResolvedPromise.skip = (functionName, callback, expected, ...functionParameters) => {
607
- _testEachRejectedPromiseAgainstSameResolvedPromise(test.skip.each, functionName, callback, expected, ...functionParameters);
608
- };
609
- // endregion
610
-
611
- export default testEach;
612
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3Rlc3QtaGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vICMhL3Vzci9iaW4vZW52IGJhYmVsLW5vZGVcbi8vIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLVxuLyoqIEBtb2R1bGUgdGVzdEhlbHBlciAqL1xuJ3VzZSBzdHJpY3QnXG4vKiAhXG4gICAgcmVnaW9uIGhlYWRlclxuICAgIENvcHlyaWdodCBUb3JiZW4gU2lja2VydCAoaW5mb1tcIn5hdH5cIl10b3JiZW4ud2Vic2l0ZSkgMTYuMTIuMjAxMlxuXG4gICAgTGljZW5zZVxuICAgIC0tLS0tLS1cblxuICAgIFRoaXMgbGlicmFyeSB3cml0dGVuIGJ5IFRvcmJlbiBTaWNrZXJ0IHN0YW5kcyB1bmRlciBhIGNyZWF0aXZlIGNvbW1vbnNcbiAgICBuYW1pbmcgMy4wIHVucG9ydGVkIGxpY2Vuc2UuXG4gICAgU2VlIGh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8zLjAvZGVlZC5kZVxuICAgIGVuZHJlZ2lvblxuXG4gICAgZ2VuZXJpYyB0ZXN0IGJvaWxlcnBsYXRlOlxuXG4gICAgdGVzdC5lYWNoKFtbRVhQRUNURUQsIC4uLlBBUkFNRVRFUlNdLCAuLi5dKShcbiAgICAgICAgJyVwID09PSBGVU5DVElPTiguLi4lcCknLFxuICAgICAgICAoZXhwZWN0ZWQ6IFJldHVyblR5cGU8RlVOQ1RJT04+LCAuLi5wYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzPEZVTkNUSU9OPikgPT5cbiAgICAgICAgICAgIGV4cGVjdChGVU5DVElPTiguLi5wYXJhbWV0ZXJzKSkudG9TdHJpY3RFcXVhbChleHBlY3RlZClcbiAgICApXG4qL1xuLy8gcmVnaW9uIGltcG9ydHNcbmltcG9ydCB7XG4gICAgQW55RnVuY3Rpb24sXG4gICAgRmlyc3RQYXJhbWV0ZXIsXG4gICAgRnVuY3Rpb25UZXN0VHVwbGUsXG4gICAgRnVuY3Rpb25UZXN0UHJvbWlzZVR1cGxlLFxuICAgIEZ1bmN0aW9uVGVzdFByb21pc2VSZWplY3Rpb25UdXBsZSxcbiAgICBUZXN0TWF0Y2hlcnMgYXMgTWF0Y2hlcnMsXG4gICAgVGVzdFN5bWJvbCxcbiAgICBUaGVuUGFyYW1ldGVyLFxuICAgIFVua25vd25GdW5jdGlvbiwgRnVuY3Rpb25UZXN0QWdhaW5zdFJlc29sdmVkUHJvbWlzZVR1cGxlLFxuICAgIEZ1bmN0aW9uVGVzdFByb21pc2VBZ2FpbnN0UmVzb2x2ZWRQcm9taXNlVHVwbGUsXG4gICAgRnVuY3Rpb25UZXN0UHJvbWlzZVJlamVjdGlvbkFnYWluc3RSZXNvbHZlZFByb21pc2VUdXBsZVxufSBmcm9tICcuL3R5cGUnXG5cbmltcG9ydCB7ZXhwZWN0LCB0ZXN0fSBmcm9tICdAamVzdC9nbG9iYWxzJ1xuXG5pbXBvcnQge3JlcHJlc2VudH0gZnJvbSAnLi9vYmplY3QnXG4vLyBlbmRyZWdpb25cbmV4cG9ydCBjb25zdCBURVNUX0RFRklORURfU1lNQk9MID0gU3ltYm9sLmZvcignY2xpZW50bm9kZVRlc3RIZWxwZXJEZWZpbmVkJylcbmV4cG9ydCBjb25zdCBURVNUX1RIUk9XX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ2NsaWVudG5vZGVUZXN0SGVscGVyVGhyb3cnKVxuZXhwb3J0IGNvbnN0IFRFU1RfVU5ERUZJTkVEX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ2NsaWVudG5vZGVUZXN0SGVscGVyVW5kZWZpbmVkJylcbi8qKlxuICogVGVzdHMgZ2l2ZW4gcmVzdWx0IGFnYWluc3QgZ2l2ZW4gZXhwZWN0YXRpb25zLiBSZXNwZWN0cyBzcGVjaWFsIHN5bWJvbFxuICogdmFsdWVzLlxuICogQHBhcmFtIGdpdmVuUmVzdWx0IC0gVGFyZ2V0IHRvIGNvbXBhcmUgZXhwZWN0YXRpb24gYWdhaW5zdC5cbiAqIEBwYXJhbSBleHBlY3RlZCAtIEV4cGVjdGVkIHJlc3VsdC5cbiAqIEBwYXJhbSB3cmFwIC0gSW5kaWNhdGVzIHdoZXRoZXIgdG8gd3JhcCB3aXRoIGFuIGV4cGVjdCBmdW5jdGlvbiBjYWxsLlxuICogQHJldHVybnMgTm90aGluZyBvciBhIHByb21pc2UgcmVzb2x2aW5nIHRvIG5vdGhpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBleHBlY3RFeHBlY3RlZFR5cGUgPSA8XG4gICAgVHlwZSA9IHVua25vd24sIFJlc3VsdCBleHRlbmRzIFByb21pc2U8dm9pZD4gfCB2b2lkID0gdm9pZFxuPihcbiAgICAgICAgZ2l2ZW5SZXN1bHQ6IE1hdGNoZXJzPFJlc3VsdD4gfCBSZXN1bHQsXG4gICAgICAgIGV4cGVjdGVkOiBUZXN0U3ltYm9sIHwgVHlwZSxcbiAgICAgICAgd3JhcCA9IHRydWVcbiAgICApOiBSZXN1bHQgPT4ge1xuICAgIGNvbnN0IHJlc3VsdDogTWF0Y2hlcnM8UmVzdWx0PiA9IHdyYXAgP1xuICAgICAgICBleHBlY3QoZ2l2ZW5SZXN1bHQgYXMgUmVzdWx0KSBhcyB1bmtub3duIGFzIE1hdGNoZXJzPFJlc3VsdD4gOlxuICAgICAgICBnaXZlblJlc3VsdCBhcyBNYXRjaGVyczxSZXN1bHQ+XG5cbiAgICBpZiAoZXhwZWN0ZWQgPT09IFRFU1RfREVGSU5FRF9TWU1CT0wpXG4gICAgICAgIHJldHVybiByZXN1bHQudG9CZURlZmluZWQoKVxuXG4gICAgaWYgKGV4cGVjdGVkID09PSBURVNUX1VOREVGSU5FRF9TWU1CT0wpXG4gICAgICAgIHJldHVybiByZXN1bHQubm90LnRvQmVEZWZpbmVkKClcblxuICAgIGlmIChleHBlY3RlZCA9PT0gVEVTVF9USFJPV19TWU1CT0wpXG4gICAgICAgIHJldHVybiByZXN1bHQudG9UaHJvdygpXG5cbiAgICByZXR1cm4gcmVzdWx0LnRvU3RyaWN0RXF1YWwoZXhwZWN0ZWQpXG59XG4vLyByZWdpb24gdGVzdEVhY2hcbi8qKlxuICogVGVzdHMgZWFjaCBnaXZlbiB0ZXN0IHNldCAoZXhwZWN0ZWQgdmFsdWUgZm9sbG93cyBieSB2YXJpb3VzIGxpc3Qgb2ZcbiAqIGZ1bmN0aW9uIHBhcmFtZXRlcnMpLiBJdCByZXNwZWN0cyBmdW5jdGlvbiBzaWduYXR1cmUgdG8gcmFpc2UgY29tcGlsZSB0aW1lXG4gKiBlcnJvcnMgaWYgZ2l2ZW4gdGVzdCBzZXQgZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZnVuY3Rpb24gc2lnbmF0dXJlLlxuICogQHBhcmFtIHRlc3RlciAtIFVuZGVybGluZyB0ZXN0aW5nIGZ1bmN0aW9uIHRvIHVzZS5cbiAqIEBwYXJhbSBmdW5jdGlvbk5hbWUgLSBGdW5jdGlvbiBkZXNjcmlwdGlvbiB0byB0ZXN0LlxuICogQHBhcmFtIGNhbGxiYWNrIC0gRnVuY3Rpb24gcmVmZXJlbmNlIHRvIHRlc3QuXG4gKiBAcGFyYW0gZnVuY3Rpb25UZXN0VHVwbGUgLSBBZGRpdGlvbmFsIGFycmF5cyBvZiB0ZXN0IHNldHMgdG8gdGVzdCBnaXZlblxuICogZnVuY3Rpb24gYWdhaW4uXG4gKi9cbmNvbnN0IF90ZXN0RWFjaCA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgdGVzdGVyOiB0eXBlb2YgdGVzdC5lYWNoLFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgLi4uZnVuY3Rpb25UZXN0VHVwbGU6IEFycmF5PEZ1bmN0aW9uVGVzdFR1cGxlPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgdGVzdGVyKFsuLi5mdW5jdGlvblRlc3RUdXBsZV0pKFxuICAgICAgICBgJXAgPT09ICR7ZnVuY3Rpb25OYW1lfSglcCwgLi4uKWAsXG4gICAgICAgICgoXG4gICAgICAgICAgICBleHBlY3RlZDogUmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+IHwgVGVzdFN5bWJvbCxcbiAgICAgICAgICAgIC4uLnBhcmFtZXRlcnM6IFBhcmFtZXRlcnM8RnVuY3Rpb25UeXBlPlxuICAgICAgICApID0+IHtcbiAgICAgICAgICAgIGV4cGVjdEV4cGVjdGVkVHlwZTxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+KFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKC4uLnBhcmFtZXRlcnMpIGFzIE1hdGNoZXJzPHZvaWQ+IHwgdm9pZCxcbiAgICAgICAgICAgICAgICBleHBlY3RlZFxuICAgICAgICAgICAgKVxuICAgICAgICB9KVxuICAgIClcbn1cbi8qKlxuICogVGVzdHMgZWFjaCBnaXZlbiB0ZXN0IHNldCAoZXhwZWN0ZWQgdmFsdWUgZm9sbG93cyBieSB2YXJpb3VzIGxpc3Qgb2ZcbiAqIGZ1bmN0aW9uIHBhcmFtZXRlcnMpLiBJdCByZXNwZWN0cyBmdW5jdGlvbiBzaWduYXR1cmUgdG8gcmFpc2UgY29tcGlsZSB0aW1lXG4gKiBlcnJvcnMgaWYgZ2l2ZW4gdGVzdCBzZXQgZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZnVuY3Rpb24gc2lnbmF0dXJlLlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSAtIEZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvIHRlc3QuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiByZWZlcmVuY2UgdG8gdGVzdC5cbiAqIEBwYXJhbSBmdW5jdGlvblRlc3RUdXBsZSAtIEFkZGl0aW9uYWwgYXJyYXlzIG9mIHRlc3Qgc2V0cyB0byB0ZXN0IGdpdmVuXG4gKiBmdW5jdGlvbiBhZ2Fpbi5cbiAqL1xuZXhwb3J0IGNvbnN0IHRlc3RFYWNoID0gPEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uPihcbiAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgIC4uLmZ1bmN0aW9uVGVzdFR1cGxlOiBBcnJheTxGdW5jdGlvblRlc3RUdXBsZTxGdW5jdGlvblR5cGU+PlxuKSA9PiB7XG4gICAgX3Rlc3RFYWNoKHRlc3QuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgLi4uZnVuY3Rpb25UZXN0VHVwbGUpXG59XG50ZXN0RWFjaC5vbmx5ID0gPEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uPihcbiAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgIC4uLmZ1bmN0aW9uVGVzdFR1cGxlOiBBcnJheTxGdW5jdGlvblRlc3RUdXBsZTxGdW5jdGlvblR5cGU+PlxuKSA9PiB7XG4gICAgX3Rlc3RFYWNoKHRlc3Qub25seS5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCAuLi5mdW5jdGlvblRlc3RUdXBsZSlcbn1cbnRlc3RFYWNoLnNraXAgPSA8RnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb24+KFxuICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgLi4uZnVuY3Rpb25UZXN0VHVwbGU6IEFycmF5PEZ1bmN0aW9uVGVzdFR1cGxlPEZ1bmN0aW9uVHlwZT4+XG4pID0+IHtcbiAgICBfdGVzdEVhY2godGVzdC5za2lwLmVhY2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIC4uLmZ1bmN0aW9uVGVzdFR1cGxlKVxufVxuLy8gZW5kcmVnaW9uXG4vLyByZWdpb24gdGVzdEVhY2hBZ2FpbnN0UmVzb2x2ZWRQcm9taXNlXG4vKipcbiAqIFRlc3RzIGVhY2ggZ2l2ZW4gdGVzdCBzZXQgKHByb21pc2UgcmVzb2x2aW5nIHRvIGV4cGVjdGVkIHZhbHVlIGZvbGxvd3MgYnlcbiAqIHZhcmlvdXMgbGlzdCBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzKS4gSXQgcmVzcGVjdHMgZnVuY3Rpb24gc2lnbmF0dXJlIHRvXG4gKiByYWlzZSBjb21waWxlIHRpbWUgZXJyb3JzIGlmIGdpdmVuIHRlc3Qgc2V0IGRvZXMgbm90IG1hdGNoIGdpdmVuIGZ1bmN0aW9uXG4gKiBzaWduYXR1cmUuXG4gKiBAcGFyYW0gdGVzdGVyIC0gVW5kZXJsaW5nIHRlc3RpbmcgZnVuY3Rpb24gdG8gdXNlLlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSAtIEZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvIHRlc3QuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiByZWZlcmVuY2UgdG8gdGVzdC5cbiAqIEBwYXJhbSBmdW5jdGlvblRlc3RUdXBsZSAtIEFkZGl0aW9uYWwgYXJyYXlzIG9mIHRlc3Qgc2V0cyB0byB0ZXN0IGdpdmVuXG4gKiBmdW5jdGlvbiBhZ2Fpbi5cbiAqL1xuY29uc3QgX3Rlc3RFYWNoQWdhaW5zdFJlc29sdmVkUHJvbWlzZSA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgdGVzdGVyOiB0eXBlb2YgdGVzdC5lYWNoLFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgLi4uZnVuY3Rpb25UZXN0VHVwbGU6IEFycmF5PEZ1bmN0aW9uVGVzdEFnYWluc3RSZXNvbHZlZFByb21pc2VUdXBsZTxcbiAgICAgICAgICAgIEZ1bmN0aW9uVHlwZVxuICAgICAgICA+PlxuICAgICkgPT4ge1xuICAgIHRlc3RlcihbLi4uZnVuY3Rpb25UZXN0VHVwbGVdKShcbiAgICAgICAgYCVwID09PSAke2Z1bmN0aW9uTmFtZX0oJXAsIC4uLilgLFxuICAgICAgICAoYXN5bmMgKFxuICAgICAgICAgICAgZXhwZWN0ZWQ6IFByb21pc2U8UmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+IHwgVGVzdFN5bWJvbD4sXG4gICAgICAgICAgICAuLi5wYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT5cbiAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICBleHBlY3RFeHBlY3RlZFR5cGU8UmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+PihcbiAgICAgICAgICAgICAgICBjYWxsYmFjayguLi5wYXJhbWV0ZXJzKSBhcyBNYXRjaGVyczx2b2lkPiB8IHZvaWQsXG4gICAgICAgICAgICAgICAgYXdhaXQgZXhwZWN0ZWRcbiAgICAgICAgICAgIClcbiAgICAgICAgfSlcbiAgICApXG59XG4vKipcbiAqIFRlc3RzIGVhY2ggZ2l2ZW4gdGVzdCBzZXQgKHByb21pc2UgcmVzb2x2aW5nIHRvIGV4cGVjdGVkIHZhbHVlIGZvbGxvd3MgYnlcbiAqIHZhcmlvdXMgbGlzdCBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzKS4gSXQgcmVzcGVjdHMgZnVuY3Rpb24gc2lnbmF0dXJlIHRvXG4gKiByYWlzZSBjb21waWxlIHRpbWUgZXJyb3JzIGlmIGdpdmVuIHRlc3Qgc2V0IGRvZXMgbm90IG1hdGNoIGdpdmVuIGZ1bmN0aW9uXG4gKiBzaWduYXR1cmUuXG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gRnVuY3Rpb24gZGVzY3JpcHRpb24gdG8gdGVzdC5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHJlZmVyZW5jZSB0byB0ZXN0LlxuICogQHBhcmFtIGZ1bmN0aW9uVGVzdFR1cGxlIC0gQWRkaXRpb25hbCBhcnJheXMgb2YgdGVzdCBzZXRzIHRvIHRlc3QgZ2l2ZW5cbiAqIGZ1bmN0aW9uIGFnYWluLlxuICovXG5leHBvcnQgY29uc3QgdGVzdEVhY2hBZ2FpbnN0UmVzb2x2ZWRQcm9taXNlID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgLi4uZnVuY3Rpb25UZXN0VHVwbGU6IEFycmF5PEZ1bmN0aW9uVGVzdEFnYWluc3RSZXNvbHZlZFByb21pc2VUdXBsZTxcbiAgICAgICAgICAgIEZ1bmN0aW9uVHlwZVxuICAgICAgICA+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaEFnYWluc3RSZXNvbHZlZFByb21pc2UoXG4gICAgICAgIHRlc3QuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgLi4uZnVuY3Rpb25UZXN0VHVwbGVcbiAgICApXG59XG50ZXN0RWFjaEFnYWluc3RSZXNvbHZlZFByb21pc2Uub25seSA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIC4uLmZ1bmN0aW9uVGVzdFR1cGxlOiBBcnJheTxGdW5jdGlvblRlc3RBZ2FpbnN0UmVzb2x2ZWRQcm9taXNlVHVwbGU8XG4gICAgICAgICAgICBGdW5jdGlvblR5cGVcbiAgICAgICAgPj5cbiAgICApID0+IHtcbiAgICBfdGVzdEVhY2hBZ2FpbnN0UmVzb2x2ZWRQcm9taXNlKFxuICAgICAgICB0ZXN0Lm9ubHkuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgLi4uZnVuY3Rpb25UZXN0VHVwbGVcbiAgICApXG59XG50ZXN0RWFjaEFnYWluc3RSZXNvbHZlZFByb21pc2Uuc2tpcCA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIC4uLmZ1bmN0aW9uVGVzdFR1cGxlOiBBcnJheTxGdW5jdGlvblRlc3RBZ2FpbnN0UmVzb2x2ZWRQcm9taXNlVHVwbGU8XG4gICAgICAgICAgICBGdW5jdGlvblR5cGVcbiAgICAgICAgPj5cbiAgICApID0+IHtcbiAgICBfdGVzdEVhY2hBZ2FpbnN0UmVzb2x2ZWRQcm9taXNlKFxuICAgICAgICB0ZXN0LnNraXAuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgLi4uZnVuY3Rpb25UZXN0VHVwbGVcbiAgICApXG59XG4vLyBlbmRyZWdpb25cbi8vIHJlZ2lvbiB0ZXN0RWFjaFJlc29sdmVkUHJvbWlzZVxuLyoqXG4gKiBUZXN0cyBlYWNoIGdpdmVuIHRlc3Qgc2V0IChleHBlY3RlZCB2YWx1ZSBmb2xsb3dzIGJ5IHZhcmlvdXMgbGlzdCBvZlxuICogZnVuY3Rpb24gcGFyYW1ldGVycykuIEl0IHJlc3BlY3RzIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byByYWlzZSBjb21waWxlIHRpbWVcbiAqIGVycm9ycyBpZiBnaXZlbiB0ZXN0IHNldCBkb2VzIG5vdCBtYXRjaCBnaXZlbiBmdW5jdGlvbiBzaWduYXR1cmUuXG4gKiBAcGFyYW0gdGVzdGVyIC0gVW5kZXJsaW5nIHRlc3RpbmcgZnVuY3Rpb24gdG8gdXNlLlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSAtIEZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvIHRlc3QuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiByZWZlcmVuY2UgdG8gdGVzdC5cbiAqIEBwYXJhbSBmdW5jdGlvblRlc3RUdXBsZSAtIEFkZGl0aW9uYWwgYXJyYXlzIG9mIHRlc3Qgc2V0cyB0byB0ZXN0IGdpdmVuXG4gKiBmdW5jdGlvbiBhZ2Fpbi5cbiAqL1xuY29uc3QgX3Rlc3RFYWNoUmVzb2x2ZWRQcm9taXNlID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICB0ZXN0ZXI6IHR5cGVvZiB0ZXN0LmVhY2gsXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICAuLi5mdW5jdGlvblRlc3RUdXBsZTogQXJyYXk8RnVuY3Rpb25UZXN0UHJvbWlzZVR1cGxlPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgdGVzdGVyKFsuLi5mdW5jdGlvblRlc3RUdXBsZV0pKFxuICAgICAgICBgJXAgPT09ICR7ZnVuY3Rpb25OYW1lfSglcCwgLi4uKWAsXG4gICAgICAgICgoXG4gICAgICAgICAgICBleHBlY3RlZDogVGVzdFN5bWJvbCB8IFRoZW5QYXJhbWV0ZXI8UmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+PixcbiAgICAgICAgICAgIC4uLnBhcmFtZXRlcnM6IFBhcmFtZXRlcnM8RnVuY3Rpb25UeXBlPlxuICAgICAgICApOiBQcm9taXNlPHZvaWQ+ID0+XG4gICAgICAgICAgICBleHBlY3RFeHBlY3RlZFR5cGU8XG4gICAgICAgICAgICAgICAgVGhlblBhcmFtZXRlcjxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+LCBQcm9taXNlPHZvaWQ+XG4gICAgICAgICAgICA+KGV4cGVjdChjYWxsYmFjayguLi5wYXJhbWV0ZXJzKSkucmVzb2x2ZXMsIGV4cGVjdGVkLCBmYWxzZSlcbiAgICAgICAgKVxuICAgIClcbn1cbi8qKlxuICogVGVzdHMgZWFjaCBnaXZlbiB0ZXN0IHNldCAoZXhwZWN0ZWQgdmFsdWUgZm9sbG93cyBieSB2YXJpb3VzIGxpc3Qgb2ZcbiAqIGZ1bmN0aW9uIHBhcmFtZXRlcnMpLiBJdCByZXNwZWN0cyBmdW5jdGlvbiBzaWduYXR1cmUgdG8gcmFpc2UgY29tcGlsZSB0aW1lXG4gKiBlcnJvcnMgaWYgZ2l2ZW4gdGVzdCBzZXQgZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZnVuY3Rpb24gc2lnbmF0dXJlLlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSAtIEZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvIHRlc3QuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiByZWZlcmVuY2UgdG8gdGVzdC5cbiAqIEBwYXJhbSBmdW5jdGlvblRlc3RUdXBsZSAtIEFkZGl0aW9uYWwgYXJyYXlzIG9mIHRlc3Qgc2V0cyB0byB0ZXN0IGdpdmVuXG4gKiBmdW5jdGlvbiBhZ2Fpbi5cbiAqL1xuZXhwb3J0IGNvbnN0IHRlc3RFYWNoUmVzb2x2ZWRQcm9taXNlID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgLi4uZnVuY3Rpb25UZXN0VHVwbGU6IEFycmF5PEZ1bmN0aW9uVGVzdFByb21pc2VUdXBsZTxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFJlc29sdmVkUHJvbWlzZShcbiAgICAgICAgdGVzdC5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCAuLi5mdW5jdGlvblRlc3RUdXBsZVxuICAgIClcbn1cbnRlc3RFYWNoUmVzb2x2ZWRQcm9taXNlLm9ubHkgPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICAuLi5mdW5jdGlvblRlc3RUdXBsZTogQXJyYXk8RnVuY3Rpb25UZXN0UHJvbWlzZVR1cGxlPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgX3Rlc3RFYWNoUmVzb2x2ZWRQcm9taXNlKFxuICAgICAgICB0ZXN0Lm9ubHkuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgLi4uZnVuY3Rpb25UZXN0VHVwbGVcbiAgICApXG59XG50ZXN0RWFjaFJlc29sdmVkUHJvbWlzZS5za2lwID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgLi4uZnVuY3Rpb25UZXN0VHVwbGU6IEFycmF5PEZ1bmN0aW9uVGVzdFByb21pc2VUdXBsZTxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFJlc29sdmVkUHJvbWlzZShcbiAgICAgICAgdGVzdC5za2lwLmVhY2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIC4uLmZ1bmN0aW9uVGVzdFR1cGxlXG4gICAgKVxufVxuLy8gZW5kcmVnaW9uXG4vLyByZWdpb24gdGVzdEVhY2hSZXNvbHZlZFByb21pc2VBZ2FpbnN0UmVzb2x2ZWRQcm9taXNlXG4vKipcbiAqIFRlc3RzIGVhY2ggZ2l2ZW4gdGVzdCBzZXQgKHByb21pc2UgcmVzb2x2aW5nIHRvIGV4cGVjdGVkIHZhbHVlIGZvbGxvd3MgYnlcbiAqIHZhcmlvdXMgbGlzdCBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzKS4gSXQgcmVzcGVjdHMgZnVuY3Rpb24gc2lnbmF0dXJlIHRvXG4gKiByYWlzZSBjb21waWxlIHRpbWUgZXJyb3JzIGlmIGdpdmVuIHRlc3Qgc2V0IGRvZXMgbm90IG1hdGNoIGdpdmVuIGZ1bmN0aW9uXG4gKiBzaWduYXR1cmUuXG4gKiBAcGFyYW0gdGVzdGVyIC0gVW5kZXJsaW5nIHRlc3RpbmcgZnVuY3Rpb24gdG8gdXNlLlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSAtIEZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvIHRlc3QuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiByZWZlcmVuY2UgdG8gdGVzdC5cbiAqIEBwYXJhbSBmdW5jdGlvblRlc3RUdXBsZSAtIEFkZGl0aW9uYWwgYXJyYXlzIG9mIHRlc3Qgc2V0cyB0byB0ZXN0IGdpdmVuXG4gKiBmdW5jdGlvbiBhZ2Fpbi5cbiAqL1xuY29uc3QgX3Rlc3RFYWNoUmVzb2x2ZWRQcm9taXNlQWdhaW5zdFJlc29sdmVkUHJvbWlzZSA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgdGVzdGVyOiB0eXBlb2YgdGVzdC5lYWNoLFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgLi4uZnVuY3Rpb25UZXN0VHVwbGU6IEFycmF5PFxuICAgICAgICAgICAgRnVuY3Rpb25UZXN0UHJvbWlzZUFnYWluc3RSZXNvbHZlZFByb21pc2VUdXBsZTxGdW5jdGlvblR5cGU+XG4gICAgICAgID5cbiAgICApID0+IHtcbiAgICB0ZXN0ZXIoWy4uLmZ1bmN0aW9uVGVzdFR1cGxlXSkoXG4gICAgICAgIGAlcCA9PT0gJHtmdW5jdGlvbk5hbWV9KCVwLCAuLi4pYCxcbiAgICAgICAgKGFzeW5jIChcbiAgICAgICAgICAgIGV4cGVjdGVkOiAoXG4gICAgICAgICAgICAgICAgUHJvbWlzZTxUaGVuUGFyYW1ldGVyPFJldHVyblR5cGU8RnVuY3Rpb25UeXBlPj4gfCBUZXN0U3ltYm9sPlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIC4uLnBhcmFtZXRlcnM6IFBhcmFtZXRlcnM8RnVuY3Rpb25UeXBlPlxuICAgICAgICApOiBQcm9taXNlPHZvaWQ+ID0+XG4gICAgICAgICAgICBleHBlY3RFeHBlY3RlZFR5cGU8XG4gICAgICAgICAgICAgICAgVGhlblBhcmFtZXRlcjxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+LCBQcm9taXNlPHZvaWQ+XG4gICAgICAgICAgICA+KGV4cGVjdChjYWxsYmFjayguLi5wYXJhbWV0ZXJzKSkucmVzb2x2ZXMsIGF3YWl0IGV4cGVjdGVkLCBmYWxzZSlcbiAgICAgICAgKVxuICAgIClcbn1cbi8qKlxuICogVGVzdHMgZWFjaCBnaXZlbiB0ZXN0IHNldCAoZXhwZWN0ZWQgdmFsdWUgZm9sbG93cyBieSB2YXJpb3VzIGxpc3Qgb2ZcbiAqIGZ1bmN0aW9uIHBhcmFtZXRlcnMpLiBJdCByZXNwZWN0cyBmdW5jdGlvbiBzaWduYXR1cmUgdG8gcmFpc2UgY29tcGlsZSB0aW1lXG4gKiBlcnJvcnMgaWYgZ2l2ZW4gdGVzdCBzZXQgZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZnVuY3Rpb24gc2lnbmF0dXJlLlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSAtIEZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvIHRlc3QuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiByZWZlcmVuY2UgdG8gdGVzdC5cbiAqIEBwYXJhbSBmdW5jdGlvblRlc3RUdXBsZSAtIEFkZGl0aW9uYWwgYXJyYXlzIG9mIHRlc3Qgc2V0cyB0byB0ZXN0IGdpdmVuXG4gKiBmdW5jdGlvbiBhZ2Fpbi5cbiAqL1xuZXhwb3J0IGNvbnN0IHRlc3RFYWNoUmVzb2x2ZWRQcm9taXNlQWdhaW5zdFJlc29sdmVkUHJvbWlzZSA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIC4uLmZ1bmN0aW9uVGVzdFR1cGxlOiBBcnJheTxcbiAgICAgICAgICAgIEZ1bmN0aW9uVGVzdFByb21pc2VBZ2FpbnN0UmVzb2x2ZWRQcm9taXNlVHVwbGU8RnVuY3Rpb25UeXBlPlxuICAgICAgICA+XG4gICAgKSA9PiB7XG4gICAgX3Rlc3RFYWNoUmVzb2x2ZWRQcm9taXNlQWdhaW5zdFJlc29sdmVkUHJvbWlzZShcbiAgICAgICAgdGVzdC5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCAuLi5mdW5jdGlvblRlc3RUdXBsZVxuICAgIClcbn1cbnRlc3RFYWNoUmVzb2x2ZWRQcm9taXNlLm9ubHkgPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICAuLi5mdW5jdGlvblRlc3RUdXBsZTogQXJyYXk8XG4gICAgICAgICAgICBGdW5jdGlvblRlc3RQcm9taXNlQWdhaW5zdFJlc29sdmVkUHJvbWlzZVR1cGxlPEZ1bmN0aW9uVHlwZT5cbiAgICAgICAgPlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFJlc29sdmVkUHJvbWlzZUFnYWluc3RSZXNvbHZlZFByb21pc2UoXG4gICAgICAgIHRlc3Qub25seS5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCAuLi5mdW5jdGlvblRlc3RUdXBsZVxuICAgIClcbn1cbnRlc3RFYWNoUmVzb2x2ZWRQcm9taXNlLnNraXAgPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICAuLi5mdW5jdGlvblRlc3RUdXBsZTogQXJyYXk8XG4gICAgICAgICAgICBGdW5jdGlvblRlc3RQcm9taXNlQWdhaW5zdFJlc29sdmVkUHJvbWlzZVR1cGxlPEZ1bmN0aW9uVHlwZT5cbiAgICAgICAgPlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFJlc29sdmVkUHJvbWlzZUFnYWluc3RSZXNvbHZlZFByb21pc2UoXG4gICAgICAgIHRlc3Quc2tpcC5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCAuLi5mdW5jdGlvblRlc3RUdXBsZVxuICAgIClcbn1cbi8vIGVuZHJlZ2lvblxuLy8gcmVnaW9uIHRlc3RFYWNoUmVqZWN0ZWRQcm9taXNlXG4vKipcbiAqIFRlc3RzIGVhY2ggZ2l2ZW4gdGVzdCBzZXQgKGV4cGVjdGVkIHZhbHVlIGZvbGxvd3MgYnkgdmFyaW91cyBsaXN0IG9mXG4gKiBmdW5jdGlvbiBwYXJhbWV0ZXJzKS4gSXQgcmVzcGVjdHMgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHJhaXNlIGNvbXBpbGUgdGltZVxuICogZXJyb3JzIGlmIGdpdmVuIHRlc3Qgc2V0IGRvZXMgbm90IG1hdGNoIGdpdmVuIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB0ZXN0ZXIgLSBVbmRlcmxpbmcgdGVzdGluZyBmdW5jdGlvbiB0byB1c2UuXG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gRnVuY3Rpb24gZGVzY3JpcHRpb24gdG8gdGVzdC5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHJlZmVyZW5jZSB0byB0ZXN0LlxuICogQHBhcmFtIGZ1bmN0aW9uVGVzdFR1cGxlIC0gQWRkaXRpb25hbCBhcnJheXMgb2YgdGVzdCBzZXRzIHRvIHRlc3QgZ2l2ZW5cbiAqIGZ1bmN0aW9uIGFnYWluLlxuICovXG5jb25zdCBfdGVzdEVhY2hSZWplY3RlZFByb21pc2UgPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIHRlc3RlcjogdHlwZW9mIHRlc3QuZWFjaCxcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIC4uLmZ1bmN0aW9uVGVzdFR1cGxlOiBBcnJheTxGdW5jdGlvblRlc3RQcm9taXNlUmVqZWN0aW9uVHVwbGU8XG4gICAgICAgICAgICBGdW5jdGlvblR5cGVcbiAgICAgICAgPj5cbiAgICApID0+IHtcbiAgICB0ZXN0ZXIoWy4uLmZ1bmN0aW9uVGVzdFR1cGxlXSkoXG4gICAgICAgIGAlcCA9PT0gJHtmdW5jdGlvbk5hbWV9KCVwLCAuLi4pYCxcbiAgICAgICAgKChcbiAgICAgICAgICAgIGV4cGVjdGVkOiBFcnJvciB8IFRlc3RTeW1ib2wsXG4gICAgICAgICAgICAuLi5wYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT5cbiAgICAgICAgKTogUHJvbWlzZTx2b2lkPiA9PlxuICAgICAgICAgICAgZXhwZWN0RXhwZWN0ZWRUeXBlPEVycm9yLCBQcm9taXNlPHZvaWQ+PihcbiAgICAgICAgICAgICAgICBleHBlY3QoY2FsbGJhY2soLi4ucGFyYW1ldGVycykpLnJlamVjdHMsIGV4cGVjdGVkLCBmYWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgKVxufVxuLyoqXG4gKiBUZXN0cyBlYWNoIGdpdmVuIHRlc3Qgc2V0IChleHBlY3RlZCB2YWx1ZSBmb2xsb3dzIGJ5IHZhcmlvdXMgbGlzdCBvZlxuICogZnVuY3Rpb24gcGFyYW1ldGVycykuIEl0IHJlc3BlY3RzIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byByYWlzZSBjb21waWxlIHRpbWVcbiAqIGVycm9ycyBpZiBnaXZlbiB0ZXN0IHNldCBkb2VzIG5vdCBtYXRjaCBnaXZlbiBmdW5jdGlvbiBzaWduYXR1cmUuXG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gRnVuY3Rpb24gZGVzY3JpcHRpb24gdG8gdGVzdC5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHJlZmVyZW5jZSB0byB0ZXN0LlxuICogQHBhcmFtIGZ1bmN0aW9uVGVzdFR1cGxlIC0gQWRkaXRpb25hbCBhcnJheXMgb2YgdGVzdCBzZXRzIHRvIHRlc3QgZ2l2ZW5cbiAqIGZ1bmN0aW9uIGFnYWluLlxuICovXG5leHBvcnQgY29uc3QgdGVzdEVhY2hSZWplY3RlZFByb21pc2UgPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICAuLi5mdW5jdGlvblRlc3RUdXBsZTogQXJyYXk8RnVuY3Rpb25UZXN0UHJvbWlzZVJlamVjdGlvblR1cGxlPFxuICAgICAgICAgICAgRnVuY3Rpb25UeXBlXG4gICAgICAgID4+XG4gICAgKSA9PiB7XG4gICAgX3Rlc3RFYWNoUmVqZWN0ZWRQcm9taXNlKFxuICAgICAgICB0ZXN0LmVhY2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIC4uLmZ1bmN0aW9uVGVzdFR1cGxlXG4gICAgKVxufVxudGVzdEVhY2hSZWplY3RlZFByb21pc2Uub25seSA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIC4uLmZ1bmN0aW9uVGVzdFR1cGxlOiBBcnJheTxGdW5jdGlvblRlc3RQcm9taXNlUmVqZWN0aW9uVHVwbGU8XG4gICAgICAgICAgICBGdW5jdGlvblR5cGVcbiAgICAgICAgPj5cbiAgICApID0+IHtcbiAgICBfdGVzdEVhY2hSZWplY3RlZFByb21pc2UoXG4gICAgICAgIHRlc3Qub25seS5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCAuLi5mdW5jdGlvblRlc3RUdXBsZVxuICAgIClcbn1cbnRlc3RFYWNoUmVqZWN0ZWRQcm9taXNlLnNraXAgPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICAuLi5mdW5jdGlvblRlc3RUdXBsZTogQXJyYXk8RnVuY3Rpb25UZXN0UHJvbWlzZVJlamVjdGlvblR1cGxlPFxuICAgICAgICAgICAgRnVuY3Rpb25UeXBlXG4gICAgICAgID4+XG4gICAgKSA9PiB7XG4gICAgX3Rlc3RFYWNoUmVqZWN0ZWRQcm9taXNlKFxuICAgICAgICB0ZXN0LnNraXAuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgLi4uZnVuY3Rpb25UZXN0VHVwbGVcbiAgICApXG59XG4vLyBlbmRyZWdpb25cbi8vIHJlZ2lvbiB0ZXN0RWFjaFJlamVjdGVkUHJvbWlzZUFnYWluc3RSZXNvbHZlZFByb21pc2Vcbi8qKlxuICogVGVzdHMgZWFjaCBnaXZlbiB0ZXN0IHNldCAocHJvbWlzZSByZXNvbHZpbmcgdG8gZXhwZWN0ZWQgdmFsdWUgZm9sbG93cyBieVxuICogdmFyaW91cyBsaXN0IG9mIGZ1bmN0aW9uIHBhcmFtZXRlcnMpLiBJdCByZXNwZWN0cyBmdW5jdGlvbiBzaWduYXR1cmUgdG9cbiAqIHJhaXNlIGNvbXBpbGUgdGltZSBlcnJvcnMgaWYgZ2l2ZW4gdGVzdCBzZXQgZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZnVuY3Rpb25cbiAqIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB0ZXN0ZXIgLSBVbmRlcmxpbmcgdGVzdGluZyBmdW5jdGlvbiB0byB1c2UuXG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gRnVuY3Rpb24gZGVzY3JpcHRpb24gdG8gdGVzdC5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHJlZmVyZW5jZSB0byB0ZXN0LlxuICogQHBhcmFtIGZ1bmN0aW9uVGVzdFR1cGxlIC0gQWRkaXRpb25hbCBhcnJheXMgb2YgdGVzdCBzZXRzIHRvIHRlc3QgZ2l2ZW5cbiAqIGZ1bmN0aW9uIGFnYWluLlxuICovXG5jb25zdCBfdGVzdEVhY2hSZWplY3RlZFByb21pc2VBZ2FpbnN0UmVzb2x2ZWRQcm9taXNlID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICB0ZXN0ZXI6IHR5cGVvZiB0ZXN0LmVhY2gsXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICAuLi5mdW5jdGlvblRlc3RUdXBsZTogQXJyYXk8XG4gICAgICAgICAgICBGdW5jdGlvblRlc3RQcm9taXNlUmVqZWN0aW9uQWdhaW5zdFJlc29sdmVkUHJvbWlzZVR1cGxlPFxuICAgICAgICAgICAgICAgIEZ1bmN0aW9uVHlwZVxuICAgICAgICAgICAgPlxuICAgICAgICA+XG4gICAgKSA9PiB7XG4gICAgdGVzdGVyKFsuLi5mdW5jdGlvblRlc3RUdXBsZV0pKFxuICAgICAgICBgJXAgPT09ICR7ZnVuY3Rpb25OYW1lfSglcCwgLi4uKWAsXG4gICAgICAgIChhc3luYyAoXG4gICAgICAgICAgICBleHBlY3RlZDogUHJvbWlzZTxFcnJvciB8IFRlc3RTeW1ib2w+LFxuICAgICAgICAgICAgLi4ucGFyYW1ldGVyczogUGFyYW1ldGVyczxGdW5jdGlvblR5cGU+XG4gICAgICAgICk6IFByb21pc2U8dm9pZD4gPT5cbiAgICAgICAgICAgIGV4cGVjdEV4cGVjdGVkVHlwZTxFcnJvciwgUHJvbWlzZTx2b2lkPj4oXG4gICAgICAgICAgICAgICAgZXhwZWN0KGNhbGxiYWNrKC4uLnBhcmFtZXRlcnMpKS5yZWplY3RzLCBhd2FpdCBleHBlY3RlZCwgZmFsc2VcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgIClcbn1cbi8qKlxuICogVGVzdHMgZWFjaCBnaXZlbiB0ZXN0IHNldCAoZXhwZWN0ZWQgdmFsdWUgZm9sbG93cyBieSB2YXJpb3VzIGxpc3Qgb2ZcbiAqIGZ1bmN0aW9uIHBhcmFtZXRlcnMpLiBJdCByZXNwZWN0cyBmdW5jdGlvbiBzaWduYXR1cmUgdG8gcmFpc2UgY29tcGlsZSB0aW1lXG4gKiBlcnJvcnMgaWYgZ2l2ZW4gdGVzdCBzZXQgZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZnVuY3Rpb24gc2lnbmF0dXJlLlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSAtIEZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvIHRlc3QuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiByZWZlcmVuY2UgdG8gdGVzdC5cbiAqIEBwYXJhbSBmdW5jdGlvblRlc3RUdXBsZSAtIEFkZGl0aW9uYWwgYXJyYXlzIG9mIHRlc3Qgc2V0cyB0byB0ZXN0IGdpdmVuXG4gKiBmdW5jdGlvbiBhZ2Fpbi5cbiAqL1xuZXhwb3J0IGNvbnN0IHRlc3RFYWNoUmVqZWN0ZWRQcm9taXNlQWdhaW5zdFJlc29sdmVkUHJvbWlzZSA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIC4uLmZ1bmN0aW9uVGVzdFR1cGxlOiBBcnJheTxcbiAgICAgICAgICAgIEZ1bmN0aW9uVGVzdFByb21pc2VSZWplY3Rpb25BZ2FpbnN0UmVzb2x2ZWRQcm9taXNlVHVwbGU8XG4gICAgICAgICAgICAgICBGdW5jdGlvblR5cGVcbiAgICAgICAgICAgID5cbiAgICAgICAgPlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFJlamVjdGVkUHJvbWlzZUFnYWluc3RSZXNvbHZlZFByb21pc2UoXG4gICAgICAgIHRlc3QuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgLi4uZnVuY3Rpb25UZXN0VHVwbGVcbiAgICApXG59XG50ZXN0RWFjaFJlamVjdGVkUHJvbWlzZUFnYWluc3RSZXNvbHZlZFByb21pc2Uub25seSA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIC4uLmZ1bmN0aW9uVGVzdFR1cGxlOiBBcnJheTxcbiAgICAgICAgICAgIEZ1bmN0aW9uVGVzdFByb21pc2VSZWplY3Rpb25BZ2FpbnN0UmVzb2x2ZWRQcm9taXNlVHVwbGU8XG4gICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBlXG4gICAgICAgICAgICA+XG4gICAgICAgID5cbiAgICApID0+IHtcbiAgICBfdGVzdEVhY2hSZWplY3RlZFByb21pc2VBZ2FpbnN0UmVzb2x2ZWRQcm9taXNlKFxuICAgICAgICB0ZXN0Lm9ubHkuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgLi4uZnVuY3Rpb25UZXN0VHVwbGVcbiAgICApXG59XG50ZXN0RWFjaFJlamVjdGVkUHJvbWlzZUFnYWluc3RSZXNvbHZlZFByb21pc2Uuc2tpcCA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIC4uLmZ1bmN0aW9uVGVzdFR1cGxlOiBBcnJheTxcbiAgICAgICAgICAgIEZ1bmN0aW9uVGVzdFByb21pc2VSZWplY3Rpb25BZ2FpbnN0UmVzb2x2ZWRQcm9taXNlVHVwbGU8XG4gICAgICAgICAgICAgICAgRnVuY3Rpb25UeXBlXG4gICAgICAgICAgICA+XG4gICAgICAgID5cbiAgICApID0+IHtcbiAgICBfdGVzdEVhY2hSZWplY3RlZFByb21pc2VBZ2FpbnN0UmVzb2x2ZWRQcm9taXNlKFxuICAgICAgICB0ZXN0LnNraXAuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgLi4uZnVuY3Rpb25UZXN0VHVwbGVcbiAgICApXG59XG4vLyBlbmRyZWdpb25cbi8vIHJlZ2lvbiB0ZXN0RWFjaFNpbmdsZVBhcmFtZXRlckFnYWluc3RTYW1lRXhwZWN0YXRpb25cbi8qKlxuICogVGVzdHMgZWFjaCBnaXZlbiBzaW5nbGUgcGFyYW1ldGVyIGFnYWluc3Qgc2FtZSBnaXZlbiBleHBlY3RlZCB2YWx1ZS4gSXRcbiAqIHJlc3BlY3RzIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byByYWlzZSBjb21waWxlIHRpbWUgZXJyb3JzIGlmIGdpdmVuIHRlc3Qgc2V0XG4gKiBkb2VzIG5vdCBtYXRjaCBnaXZlbiBmdW5jdGlvbiBzaWduYXR1cmUuXG4gKiBAcGFyYW0gdGVzdGVyIC0gVW5kZXJsaW5nIHRlc3RpbmcgZnVuY3Rpb24gdG8gdXNlLlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSAtIEZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvIHRlc3QuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiByZWZlcmVuY2UgdG8gdGVzdC5cbiAqIEBwYXJhbSBleHBlY3RlZCAtIFZhbHVlIHRvIGNoZWNrIGVhY2ggZnVuY3Rpb24gY2FsbCByZXR1cm4gdmFsdWUgYWdhaW5zdC5cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIC0gQWRkaXRpb25hbCBmaXJzdCBwYXJhbWV0ZXJzIHRvIHRlc3QgZ2l2ZW4gZnVuY3Rpb24gd2l0aC5cbiAqL1xuY29uc3QgX3Rlc3RFYWNoU2luZ2xlUGFyYW1ldGVyQWdhaW5zdFNhbWVFeHBlY3RhdGlvbiA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgdGVzdGVyOiB0eXBlb2YgdGVzdC5lYWNoLFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IFJldHVyblR5cGU8RnVuY3Rpb25UeXBlPiB8IFRlc3RTeW1ib2wsXG4gICAgICAgIC4uLnBhcmFtZXRlcnM6IEFycmF5PEZpcnN0UGFyYW1ldGVyPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgdGVzdGVyKFsuLi5wYXJhbWV0ZXJzXSkoXG4gICAgICAgIGAke3JlcHJlc2VudChleHBlY3RlZCl9ID09PSAke2Z1bmN0aW9uTmFtZX0oJXApYCxcbiAgICAgICAgKChwYXJhbWV0ZXI6IEZpcnN0UGFyYW1ldGVyPEZ1bmN0aW9uVHlwZT4pID0+IHtcbiAgICAgICAgICAgIGV4cGVjdEV4cGVjdGVkVHlwZTxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+KFxuICAgICAgICAgICAgICAgIChleHBlY3RlZCA9PT0gVEVTVF9USFJPV19TWU1CT0wgP1xuICAgICAgICAgICAgICAgICAgICAoKSA9PiBjYWxsYmFjayhwYXJhbWV0ZXIpIGFzIHVua25vd24gOlxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhwYXJhbWV0ZXIpXG4gICAgICAgICAgICAgICAgKSBhcyBNYXRjaGVyczx2b2lkPiB8IHZvaWQsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWRcbiAgICAgICAgICAgIClcbiAgICAgICAgfSlcbiAgICApXG59XG4vKipcbiAqIFRlc3RzIGVhY2ggZ2l2ZW4gc2luZ2xlIHBhcmFtZXRlciBhZ2FpbnN0IHNhbWUgZ2l2ZW4gZXhwZWN0ZWQgdmFsdWUuIEl0XG4gKiByZXNwZWN0cyBmdW5jdGlvbiBzaWduYXR1cmUgdG8gcmFpc2UgY29tcGlsZSB0aW1lIGVycm9ycyBpZiBnaXZlbiB0ZXN0IHNldFxuICogZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZnVuY3Rpb24gc2lnbmF0dXJlLlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSAtIEZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvIHRlc3QuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiByZWZlcmVuY2UgdG8gdGVzdC5cbiAqIEBwYXJhbSBleHBlY3RlZCAtIFZhbHVlIHRvIGNoZWNrIGVhY2ggZnVuY3Rpb24gY2FsbCByZXR1cm4gdmFsdWUgYWdhaW5zdC5cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIC0gQWRkaXRpb25hbCBmaXJzdCBwYXJhbWV0ZXJzIHRvIHRlc3QgZ2l2ZW4gZnVuY3Rpb24gd2l0aC5cbiAqL1xuZXhwb3J0IGNvbnN0IHRlc3RFYWNoU2luZ2xlUGFyYW1ldGVyQWdhaW5zdFNhbWVFeHBlY3RhdGlvbiA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIGV4cGVjdGVkOiBSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4gfCBUZXN0U3ltYm9sLFxuICAgICAgICAuLi5wYXJhbWV0ZXJzOiBBcnJheTxGaXJzdFBhcmFtZXRlcjxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFNpbmdsZVBhcmFtZXRlckFnYWluc3RTYW1lRXhwZWN0YXRpb24oXG4gICAgICAgIHRlc3QuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgZXhwZWN0ZWQsIC4uLnBhcmFtZXRlcnNcbiAgICApXG59XG50ZXN0RWFjaFNpbmdsZVBhcmFtZXRlckFnYWluc3RTYW1lRXhwZWN0YXRpb24ub25seSA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIGV4cGVjdGVkOiBSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4gfCBUZXN0U3ltYm9sLFxuICAgICAgICAuLi5wYXJhbWV0ZXJzOiBBcnJheTxGaXJzdFBhcmFtZXRlcjxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFNpbmdsZVBhcmFtZXRlckFnYWluc3RTYW1lRXhwZWN0YXRpb24oXG4gICAgICAgIHRlc3Qub25seS5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCBleHBlY3RlZCwgLi4ucGFyYW1ldGVyc1xuICAgIClcbn1cbnRlc3RFYWNoU2luZ2xlUGFyYW1ldGVyQWdhaW5zdFNhbWVFeHBlY3RhdGlvbi5za2lwID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IFJldHVyblR5cGU8RnVuY3Rpb25UeXBlPiB8IFRlc3RTeW1ib2wsXG4gICAgICAgIC4uLnBhcmFtZXRlcnM6IEFycmF5PEZpcnN0UGFyYW1ldGVyPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgX3Rlc3RFYWNoU2luZ2xlUGFyYW1ldGVyQWdhaW5zdFNhbWVFeHBlY3RhdGlvbihcbiAgICAgICAgdGVzdC5za2lwLmVhY2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIGV4cGVjdGVkLCAuLi5wYXJhbWV0ZXJzXG4gICAgKVxufVxuLy8gZW5kcmVnaW9uXG4vLyByZWdpb24gdGVzdEVhY2hSZXNvbHZlZFByb21pc2VXaXRoU2luZ2xlUGFyYW1ldGVyQWdhaW5zdFNhbWVFeHBlY3RhdGlvblxuLyoqXG4gKiBUZXN0cyBlYWNoIGdpdmVuIHNpbmdsZSBwYXJhbWV0ZXIgYWdhaW5zdCBzYW1lIGdpdmVuIGV4cGVjdGVkIHZhbHVlLiBJdFxuICogcmVzcGVjdHMgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHJhaXNlIGNvbXBpbGUgdGltZSBlcnJvcnMgaWYgZ2l2ZW4gdGVzdCBzZXRcbiAqIGRvZXMgbm90IG1hdGNoIGdpdmVuIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB0ZXN0ZXIgLSBVbmRlcmxpbmcgdGVzdGluZyBmdW5jdGlvbiB0byB1c2UuXG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gRnVuY3Rpb24gZGVzY3JpcHRpb24gdG8gdGVzdC5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHJlZmVyZW5jZSB0byB0ZXN0LlxuICogQHBhcmFtIGV4cGVjdGVkIC0gVmFsdWUgdG8gY2hlY2sgZWFjaCBmdW5jdGlvbiBjYWxsIHJldHVybiB2YWx1ZSBhZ2FpbnN0LlxuICogQHBhcmFtIHBhcmFtZXRlcnMgLSBBZGRpdGlvbmFsIGZpcnN0IHBhcmFtZXRlcnMgdG8gdGVzdCBnaXZlbiBmdW5jdGlvbiB3aXRoLlxuICovXG5jb25zdCBfdGVzdEVhY2hSZXNvbHZlZFByb21pc2VXaXRoU2luZ2xlUGFyYW1ldGVyQWdhaW5zdFNhbWVFeHBlY3RhdGlvbiA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgdGVzdGVyOiB0eXBlb2YgdGVzdC5lYWNoLFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IFRlc3RTeW1ib2wgfCBUaGVuUGFyYW1ldGVyPFJldHVyblR5cGU8RnVuY3Rpb25UeXBlPj4sXG4gICAgICAgIC4uLnBhcmFtZXRlcnM6IEFycmF5PEZpcnN0UGFyYW1ldGVyPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgdGVzdGVyKFsuLi5wYXJhbWV0ZXJzXSkoXG4gICAgICAgIGAke3JlcHJlc2VudChleHBlY3RlZCl9ID09PSAke2Z1bmN0aW9uTmFtZX0oJXApYCxcbiAgICAgICAgKChwYXJhbWV0ZXI6IEZpcnN0UGFyYW1ldGVyPEZ1bmN0aW9uVHlwZT4pID0+XG4gICAgICAgICAgICBleHBlY3RFeHBlY3RlZFR5cGU8XG4gICAgICAgICAgICAgICAgVGhlblBhcmFtZXRlcjxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+LCBQcm9taXNlPHZvaWQ+XG4gICAgICAgICAgICA+KGV4cGVjdChjYWxsYmFjayhwYXJhbWV0ZXIpKS5yZXNvbHZlcywgZXhwZWN0ZWQsIGZhbHNlKVxuICAgICAgICApXG4gICAgKVxufVxuLyoqXG4gKiBUZXN0cyBlYWNoIGdpdmVuIHNpbmdsZSBwYXJhbWV0ZXIgYWdhaW5zdCBzYW1lIGdpdmVuIGV4cGVjdGVkIHZhbHVlLiBJdFxuICogcmVzcGVjdHMgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHJhaXNlIGNvbXBpbGUgdGltZSBlcnJvcnMgaWYgZ2l2ZW4gdGVzdCBzZXRcbiAqIGRvZXMgbm90IG1hdGNoIGdpdmVuIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSBmdW5jdGlvbk5hbWUgLSBGdW5jdGlvbiBkZXNjcmlwdGlvbiB0byB0ZXN0LlxuICogQHBhcmFtIGNhbGxiYWNrIC0gRnVuY3Rpb24gcmVmZXJlbmNlIHRvIHRlc3QuXG4gKiBAcGFyYW0gZXhwZWN0ZWQgLSBWYWx1ZSB0byBjaGVjayBlYWNoIGZ1bmN0aW9uIGNhbGwgcmV0dXJuIHZhbHVlIGFnYWluc3QuXG4gKiBAcGFyYW0gcGFyYW1ldGVycyAtIEFkZGl0aW9uYWwgZmlyc3QgcGFyYW1ldGVycyB0byB0ZXN0IGdpdmVuIGZ1bmN0aW9uIHdpdGguXG4gKi9cbmV4cG9ydCBjb25zdFxuICAgIHRlc3RFYWNoUmVzb2x2ZWRQcm9taXNlV2l0aFNpbmdsZVBhcmFtZXRlckFnYWluc3RTYW1lRXhwZWN0YXRpb24gPSA8XG4gICAgICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4gICAgPihcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgICAgIGV4cGVjdGVkOiBUZXN0U3ltYm9sIHwgVGhlblBhcmFtZXRlcjxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+LFxuICAgICAgICAgICAgLi4ucGFyYW1ldGVyczogQXJyYXk8Rmlyc3RQYXJhbWV0ZXI8RnVuY3Rpb25UeXBlPj5cbiAgICAgICAgKSA9PiB7XG4gICAgICAgIF90ZXN0RWFjaFJlc29sdmVkUHJvbWlzZVdpdGhTaW5nbGVQYXJhbWV0ZXJBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uKFxuICAgICAgICAgICAgdGVzdC5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCBleHBlY3RlZCwgLi4ucGFyYW1ldGVyc1xuICAgICAgICApXG4gICAgfVxudGVzdEVhY2hSZXNvbHZlZFByb21pc2VXaXRoU2luZ2xlUGFyYW1ldGVyQWdhaW5zdFNhbWVFeHBlY3RhdGlvbi5vbmx5ID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IFRlc3RTeW1ib2wgfCBUaGVuUGFyYW1ldGVyPFJldHVyblR5cGU8RnVuY3Rpb25UeXBlPj4sXG4gICAgICAgIC4uLnBhcmFtZXRlcnM6IEFycmF5PEZpcnN0UGFyYW1ldGVyPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgX3Rlc3RFYWNoUmVzb2x2ZWRQcm9taXNlV2l0aFNpbmdsZVBhcmFtZXRlckFnYWluc3RTYW1lRXhwZWN0YXRpb24oXG4gICAgICAgIHRlc3Qub25seS5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCBleHBlY3RlZCwgLi4ucGFyYW1ldGVyc1xuICAgIClcbn1cbnRlc3RFYWNoUmVzb2x2ZWRQcm9taXNlV2l0aFNpbmdsZVBhcmFtZXRlckFnYWluc3RTYW1lRXhwZWN0YXRpb24uc2tpcCA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIGV4cGVjdGVkOiBUZXN0U3ltYm9sIHwgVGhlblBhcmFtZXRlcjxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+LFxuICAgICAgICAuLi5wYXJhbWV0ZXJzOiBBcnJheTxGaXJzdFBhcmFtZXRlcjxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFJlc29sdmVkUHJvbWlzZVdpdGhTaW5nbGVQYXJhbWV0ZXJBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uKFxuICAgICAgICB0ZXN0LnNraXAuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgZXhwZWN0ZWQsIC4uLnBhcmFtZXRlcnNcbiAgICApXG59XG4vLyBlbmRyZWdpb25cbi8vIHJlZ2lvbiB0ZXN0RWFjaFJlc29sdmVkUHJvbWlzZVdpdGhTaW5nbGVQYXJhbWV0ZXJBZ2FpbnN0U2FtZVJlc29sdmVkUHJvbWlzZVxuLyoqXG4gKiBUZXN0cyBlYWNoIGdpdmVuIHNpbmdsZSBwYXJhbWV0ZXIgYWdhaW5zdCBzYW1lIGdpdmVuIHByb21pc2VzIHJlc29sdmluZyB0b1xuICogZXhwZWN0ZWQgdmFsdWUuIEl0IHJlc3BlY3RzIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byByYWlzZSBjb21waWxlIHRpbWUgZXJyb3JzXG4gKiBpZiBnaXZlbiB0ZXN0IHNldCBkb2VzIG5vdCBtYXRjaCBnaXZlbiBmdW5jdGlvbiBzaWduYXR1cmUuXG4gKiBAcGFyYW0gdGVzdGVyIC0gVW5kZXJsaW5nIHRlc3RpbmcgZnVuY3Rpb24gdG8gdXNlLlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSAtIEZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvIHRlc3QuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiByZWZlcmVuY2UgdG8gdGVzdC5cbiAqIEBwYXJhbSBleHBlY3RlZCAtIFByb21pc2UgcmVzb2x2aW5nIHRvIHZhbHVlIHRvIGNoZWNrIGVhY2ggZnVuY3Rpb24gY2FsbFxuICogcmV0dXJuIHZhbHVlIGFnYWluc3QuXG4gKiBAcGFyYW0gcGFyYW1ldGVycyAtIEFkZGl0aW9uYWwgZmlyc3QgcGFyYW1ldGVycyB0byB0ZXN0IGdpdmVuIGZ1bmN0aW9uIHdpdGguXG4gKi9cbmNvbnN0IF90ZXN0RWFjaFJlc29sdmVkUHJvbWlzZVdpdGhTaW5nbGVQYXJhbWV0ZXJBZ2FpbnN0U2FtZVJlc29sdmVkUHJvbWlzZSA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgdGVzdGVyOiB0eXBlb2YgdGVzdC5lYWNoLFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IFByb21pc2U8XG4gICAgICAgICAgICBUZXN0U3ltYm9sIHwgVGhlblBhcmFtZXRlcjxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+XG4gICAgICAgID4sXG4gICAgICAgIC4uLnBhcmFtZXRlcnM6IEFycmF5PEZpcnN0UGFyYW1ldGVyPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgdGVzdGVyKFsuLi5wYXJhbWV0ZXJzXSkoXG4gICAgICAgIGAke3JlcHJlc2VudChleHBlY3RlZCl9ID09PSAke2Z1bmN0aW9uTmFtZX0oJXApYCxcbiAgICAgICAgKGFzeW5jIChwYXJhbWV0ZXI6IEZpcnN0UGFyYW1ldGVyPEZ1bmN0aW9uVHlwZT4pID0+XG4gICAgICAgICAgICBleHBlY3RFeHBlY3RlZFR5cGU8XG4gICAgICAgICAgICAgICAgUHJvbWlzZTxUaGVuUGFyYW1ldGVyPFJldHVyblR5cGU8RnVuY3Rpb25UeXBlPj4+LCBQcm9taXNlPHZvaWQ+XG4gICAgICAgICAgICA+KGV4cGVjdChjYWxsYmFjayhwYXJhbWV0ZXIpKS5yZXNvbHZlcywgYXdhaXQgZXhwZWN0ZWQsIGZhbHNlKVxuICAgICAgICApXG4gICAgKVxufVxuLyoqXG4gKiBUZXN0cyBlYWNoIGdpdmVuIHNpbmdsZSBwYXJhbWV0ZXIgYWdhaW5zdCBzYW1lIGdpdmVuIHByb21pc2VzIHJlc29sdmluZyB0b1xuICogZXhwZWN0ZWQgdmFsdWUuIEl0IHJlc3BlY3RzIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byByYWlzZSBjb21waWxlIHRpbWUgZXJyb3JzXG4gKiBpZiBnaXZlbiB0ZXN0IHNldCBkb2VzIG5vdCBtYXRjaCBnaXZlbiBmdW5jdGlvbiBzaWduYXR1cmUuXG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gRnVuY3Rpb24gZGVzY3JpcHRpb24gdG8gdGVzdC5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHJlZmVyZW5jZSB0byB0ZXN0LlxuICogQHBhcmFtIGV4cGVjdGVkIC0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdmFsdWUgdG8gY2hlY2sgZWFjaCBmdW5jdGlvbiBjYWxsXG4gKiByZXR1cm4gdmFsdWUgYWdhaW5zdC5cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIC0gQWRkaXRpb25hbCBmaXJzdCBwYXJhbWV0ZXJzIHRvIHRlc3QgZ2l2ZW4gZnVuY3Rpb24gd2l0aC5cbiAqL1xuZXhwb3J0IGNvbnN0XG4gICAgdGVzdEVhY2hSZXNvbHZlZFByb21pc2VXaXRoU2luZ2xlUGFyYW1ldGVyQWdhaW5zdFNhbWVSZXNvbHZlZFByb21pc2UgPSA8XG4gICAgICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4gICAgPihcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgICAgIGV4cGVjdGVkOiBQcm9taXNlPFxuICAgICAgICAgICAgICAgIFRlc3RTeW1ib2wgfCBUaGVuUGFyYW1ldGVyPFJldHVyblR5cGU8RnVuY3Rpb25UeXBlPj5cbiAgICAgICAgICAgID4sXG4gICAgICAgICAgICAuLi5wYXJhbWV0ZXJzOiBBcnJheTxGaXJzdFBhcmFtZXRlcjxGdW5jdGlvblR5cGU+PlxuICAgICAgICApID0+IHtcbiAgICAgICAgX3Rlc3RFYWNoUmVzb2x2ZWRQcm9taXNlV2l0aFNpbmdsZVBhcmFtZXRlckFnYWluc3RTYW1lUmVzb2x2ZWRQcm9taXNlKFxuICAgICAgICAgICAgdGVzdC5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCBleHBlY3RlZCwgLi4ucGFyYW1ldGVyc1xuICAgICAgICApXG4gICAgfVxudGVzdEVhY2hSZXNvbHZlZFByb21pc2VXaXRoU2luZ2xlUGFyYW1ldGVyQWdhaW5zdFNhbWVSZXNvbHZlZFByb21pc2Uub25seSA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIGV4cGVjdGVkOiBQcm9taXNlPFxuICAgICAgICAgICAgVGVzdFN5bWJvbCB8IFRoZW5QYXJhbWV0ZXI8UmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+PlxuICAgICAgICA+LFxuICAgICAgICAuLi5wYXJhbWV0ZXJzOiBBcnJheTxGaXJzdFBhcmFtZXRlcjxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFJlc29sdmVkUHJvbWlzZVdpdGhTaW5nbGVQYXJhbWV0ZXJBZ2FpbnN0U2FtZVJlc29sdmVkUHJvbWlzZShcbiAgICAgICAgdGVzdC5vbmx5LmVhY2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIGV4cGVjdGVkLCAuLi5wYXJhbWV0ZXJzXG4gICAgKVxufVxudGVzdEVhY2hSZXNvbHZlZFByb21pc2VXaXRoU2luZ2xlUGFyYW1ldGVyQWdhaW5zdFNhbWVSZXNvbHZlZFByb21pc2Uuc2tpcCA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIGV4cGVjdGVkOiBQcm9taXNlPFxuICAgICAgICAgICAgVGVzdFN5bWJvbCB8IFRoZW5QYXJhbWV0ZXI8UmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+PlxuICAgICAgICA+LFxuICAgICAgICAuLi5wYXJhbWV0ZXJzOiBBcnJheTxGaXJzdFBhcmFtZXRlcjxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFJlc29sdmVkUHJvbWlzZVdpdGhTaW5nbGVQYXJhbWV0ZXJBZ2FpbnN0U2FtZVJlc29sdmVkUHJvbWlzZShcbiAgICAgICAgdGVzdC5za2lwLmVhY2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIGV4cGVjdGVkLCAuLi5wYXJhbWV0ZXJzXG4gICAgKVxufVxuLy8gZW5kcmVnaW9uXG4vLyByZWdpb24gdGVzdEVhY2hSZWplY3RlZFByb21pc2VXaXRoU2luZ2xlUGFyYW1ldGVyQWdhaW5zdFNhbWVFeHBlY3RhdGlvblxuLyoqXG4gKiBUZXN0cyBlYWNoIGdpdmVuIHNpbmdsZSBwYXJhbWV0ZXIgYWdhaW5zdCBzYW1lIGdpdmVuIGV4cGVjdGVkIHZhbHVlLiBJdFxuICogcmVzcGVjdHMgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHJhaXNlIGNvbXBpbGUgdGltZSBlcnJvcnMgaWYgZ2l2ZW4gdGVzdCBzZXRcbiAqIGRvZXMgbm90IG1hdGNoIGdpdmVuIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB0ZXN0ZXIgLSBVbmRlcmxpbmcgdGVzdGluZyBmdW5jdGlvbiB0byB1c2UuXG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gRnVuY3Rpb24gZGVzY3JpcHRpb24gdG8gdGVzdC5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHJlZmVyZW5jZSB0byB0ZXN0LlxuICogQHBhcmFtIGV4cGVjdGVkIC0gVmFsdWUgdG8gY2hlY2sgZWFjaCBmdW5jdGlvbiBjYWxsIHJldHVybiB2YWx1ZSBhZ2FpbnN0LlxuICogQHBhcmFtIHBhcmFtZXRlcnMgLSBBZGRpdGlvbmFsIGZpcnN0IHBhcmFtZXRlcnMgdG8gdGVzdCBnaXZlbiBmdW5jdGlvbiB3aXRoLlxuICovXG5jb25zdCBfdGVzdEVhY2hSZWplY3RlZFByb21pc2VXaXRoU2luZ2xlUGFyYW1ldGVyQWdhaW5zdFNhbWVFeHBlY3RhdGlvbiA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgdGVzdGVyOiB0eXBlb2YgdGVzdC5lYWNoLFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IEVycm9yIHwgVGVzdFN5bWJvbCxcbiAgICAgICAgLi4ucGFyYW1ldGVyczogQXJyYXk8Rmlyc3RQYXJhbWV0ZXI8RnVuY3Rpb25UeXBlPj5cbiAgICApID0+IHtcbiAgICB0ZXN0ZXIoWy4uLnBhcmFtZXRlcnNdKShcbiAgICAgICAgYCR7cmVwcmVzZW50KGV4cGVjdGVkKX0gPT09ICR7ZnVuY3Rpb25OYW1lfSglcClgLFxuICAgICAgICAoKHBhcmFtZXRlcjogRmlyc3RQYXJhbWV0ZXI8RnVuY3Rpb25UeXBlPik6IFByb21pc2U8dm9pZD4gPT5cbiAgICAgICAgICAgIGV4cGVjdEV4cGVjdGVkVHlwZTxFcnJvciwgUHJvbWlzZTx2b2lkPj4oXG4gICAgICAgICAgICAgICAgZXhwZWN0KGNhbGxiYWNrKHBhcmFtZXRlcikpLnJlamVjdHMsIGV4cGVjdGVkLCBmYWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgKVxufVxuLyoqXG4gKiBUZXN0cyBlYWNoIGdpdmVuIHNpbmdsZSBwYXJhbWV0ZXIgYWdhaW5zdCBzYW1lIGdpdmVuIGV4cGVjdGVkIHZhbHVlLiBJdFxuICogcmVzcGVjdHMgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHJhaXNlIGNvbXBpbGUgdGltZSBlcnJvcnMgaWYgZ2l2ZW4gdGVzdCBzZXRcbiAqIGRvZXMgbm90IG1hdGNoIGdpdmVuIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSBmdW5jdGlvbk5hbWUgLSBGdW5jdGlvbiBkZXNjcmlwdGlvbiB0byB0ZXN0LlxuICogQHBhcmFtIGNhbGxiYWNrIC0gRnVuY3Rpb24gcmVmZXJlbmNlIHRvIHRlc3QuXG4gKiBAcGFyYW0gZXhwZWN0ZWQgLSBWYWx1ZSB0byBjaGVjayBlYWNoIGZ1bmN0aW9uIGNhbGwgcmV0dXJuIHZhbHVlIGFnYWluc3QuXG4gKiBAcGFyYW0gcGFyYW1ldGVycyAtIEFkZGl0aW9uYWwgZmlyc3QgcGFyYW1ldGVycyB0byB0ZXN0IGdpdmVuIGZ1bmN0aW9uIHdpdGguXG4gKi9cbmV4cG9ydCBjb25zdFxuICAgIHRlc3RFYWNoUmVqZWN0ZWRQcm9taXNlV2l0aFNpbmdsZVBhcmFtZXRlckFnYWluc3RTYW1lRXhwZWN0YXRpb24gPSA8XG4gICAgICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4gICAgPihcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgICAgIGV4cGVjdGVkOiBFcnJvciB8IFRlc3RTeW1ib2wsXG4gICAgICAgICAgICAuLi5wYXJhbWV0ZXJzOiBBcnJheTxGaXJzdFBhcmFtZXRlcjxGdW5jdGlvblR5cGU+PlxuICAgICAgICApID0+IHtcbiAgICAgICAgX3Rlc3RFYWNoUmVqZWN0ZWRQcm9taXNlV2l0aFNpbmdsZVBhcmFtZXRlckFnYWluc3RTYW1lRXhwZWN0YXRpb24oXG4gICAgICAgICAgICB0ZXN0LmVhY2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIGV4cGVjdGVkLCAuLi5wYXJhbWV0ZXJzXG4gICAgICAgIClcbiAgICB9XG50ZXN0RWFjaFJlamVjdGVkUHJvbWlzZVdpdGhTaW5nbGVQYXJhbWV0ZXJBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uLm9ubHkgPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICBleHBlY3RlZDogRXJyb3IgfCBUZXN0U3ltYm9sLFxuICAgICAgICAuLi5wYXJhbWV0ZXJzOiBBcnJheTxGaXJzdFBhcmFtZXRlcjxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFJlamVjdGVkUHJvbWlzZVdpdGhTaW5nbGVQYXJhbWV0ZXJBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uKFxuICAgICAgICB0ZXN0Lm9ubHkuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgZXhwZWN0ZWQsIC4uLnBhcmFtZXRlcnNcbiAgICApXG59XG50ZXN0RWFjaFJlamVjdGVkUHJvbWlzZVdpdGhTaW5nbGVQYXJhbWV0ZXJBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uLnNraXAgPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICBleHBlY3RlZDogRXJyb3IgfCBUZXN0U3ltYm9sLFxuICAgICAgICAuLi5wYXJhbWV0ZXJzOiBBcnJheTxGaXJzdFBhcmFtZXRlcjxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFJlamVjdGVkUHJvbWlzZVdpdGhTaW5nbGVQYXJhbWV0ZXJBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uKFxuICAgICAgICB0ZXN0LnNraXAuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgZXhwZWN0ZWQsIC4uLnBhcmFtZXRlcnNcbiAgICApXG59XG4vLyBlbmRyZWdpb25cbi8vIHJlZ2lvbiB0ZXN0RWFjaFJlamVjdGVkUHJvbWlzZVdpdGhTaW5nbGVQYXJhbWV0ZXJBZ2FpbnN0U2FtZVJlc29sdmVkUHJvbWlzZVxuLyoqXG4gKiBUZXN0cyBlYWNoIGdpdmVuIHNpbmdsZSBwYXJhbWV0ZXIgYWdhaW5zdCBzYW1lIGdpdmVuIHByb21pc2UgcmVzb2x2aW5nXG4gKiBleHBlY3RlZCB2YWx1ZS4gSXQgcmVzcGVjdHMgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHJhaXNlIGNvbXBpbGUgdGltZSBlcnJvcnNcbiAqIGlmIGdpdmVuIHRlc3Qgc2V0IGRvZXMgbm90IG1hdGNoIGdpdmVuIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB0ZXN0ZXIgLSBVbmRlcmxpbmcgdGVzdGluZyBmdW5jdGlvbiB0byB1c2UuXG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gRnVuY3Rpb24gZGVzY3JpcHRpb24gdG8gdGVzdC5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHJlZmVyZW5jZSB0byB0ZXN0LlxuICogQHBhcmFtIGV4cGVjdGVkIC0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdmFsdWUgdG8gY2hlY2sgZWFjaCBmdW5jdGlvbiBjYWxsXG4gKiByZXR1cm4gdmFsdWUgYWdhaW5zdC5cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIC0gQWRkaXRpb25hbCBmaXJzdCBwYXJhbWV0ZXJzIHRvIHRlc3QgZ2l2ZW4gZnVuY3Rpb24gd2l0aC5cbiAqL1xuY29uc3QgX3Rlc3RFYWNoUmVqZWN0ZWRQcm9taXNlV2l0aFNpbmdsZVBhcmFtZXRlckFnYWluc3RTYW1lUmVzb2x2ZWRQcm9taXNlID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICB0ZXN0ZXI6IHR5cGVvZiB0ZXN0LmVhY2gsXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICBleHBlY3RlZDogUHJvbWlzZTxFcnJvciB8IFRlc3RTeW1ib2w+LFxuICAgICAgICAuLi5wYXJhbWV0ZXJzOiBBcnJheTxGaXJzdFBhcmFtZXRlcjxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIHRlc3RlcihbLi4ucGFyYW1ldGVyc10pKFxuICAgICAgICBgJHtyZXByZXNlbnQoZXhwZWN0ZWQpfSA9PT0gJHtmdW5jdGlvbk5hbWV9KCVwKWAsXG4gICAgICAgIChhc3luYyAocGFyYW1ldGVyOiBGaXJzdFBhcmFtZXRlcjxGdW5jdGlvblR5cGU+KTogUHJvbWlzZTx2b2lkPiA9PlxuICAgICAgICAgICAgZXhwZWN0RXhwZWN0ZWRUeXBlPEVycm9yLCBQcm9taXNlPHZvaWQ+PihcbiAgICAgICAgICAgICAgICBleHBlY3QoY2FsbGJhY2socGFyYW1ldGVyKSkucmVqZWN0cywgYXdhaXQgZXhwZWN0ZWQsIGZhbHNlXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICApXG59XG4vKipcbiAqIFRlc3RzIGVhY2ggZ2l2ZW4gc2luZ2xlIHBhcmFtZXRlciBhZ2FpbnN0IHNhbWUgZ2l2ZW4gZXhwZWN0ZWQgdmFsdWUuIEl0XG4gKiByZXNwZWN0cyBmdW5jdGlvbiBzaWduYXR1cmUgdG8gcmFpc2UgY29tcGlsZSB0aW1lIGVycm9ycyBpZiBnaXZlbiB0ZXN0IHNldFxuICogZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZnVuY3Rpb24gc2lnbmF0dXJlLlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSAtIEZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvIHRlc3QuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiByZWZlcmVuY2UgdG8gdGVzdC5cbiAqIEBwYXJhbSBleHBlY3RlZCAtIFZhbHVlIHRvIGNoZWNrIGVhY2ggZnVuY3Rpb24gY2FsbCByZXR1cm4gdmFsdWUgYWdhaW5zdC5cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIC0gQWRkaXRpb25hbCBmaXJzdCBwYXJhbWV0ZXJzIHRvIHRlc3QgZ2l2ZW4gZnVuY3Rpb24gd2l0aC5cbiAqL1xuZXhwb3J0IGNvbnN0XG4gICAgdGVzdEVhY2hSZWplY3RlZFByb21pc2VXaXRoU2luZ2xlUGFyYW1ldGVyQWdhaW5zdFNhbWVSZXNvbHZlZFByb21pc2UgPSA8XG4gICAgICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4gICAgPihcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgICAgIGV4cGVjdGVkOiBQcm9taXNlPEVycm9yIHwgVGVzdFN5bWJvbD4sXG4gICAgICAgICAgICAuLi5wYXJhbWV0ZXJzOiBBcnJheTxGaXJzdFBhcmFtZXRlcjxGdW5jdGlvblR5cGU+PlxuICAgICAgICApID0+IHtcbiAgICAgICAgX3Rlc3RFYWNoUmVqZWN0ZWRQcm9taXNlV2l0aFNpbmdsZVBhcmFtZXRlckFnYWluc3RTYW1lUmVzb2x2ZWRQcm9taXNlKFxuICAgICAgICAgICAgdGVzdC5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCBleHBlY3RlZCwgLi4ucGFyYW1ldGVyc1xuICAgICAgICApXG4gICAgfVxudGVzdEVhY2hSZWplY3RlZFByb21pc2VXaXRoU2luZ2xlUGFyYW1ldGVyQWdhaW5zdFNhbWVSZXNvbHZlZFByb21pc2Uub25seSA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIGV4cGVjdGVkOiBQcm9taXNlPEVycm9yIHwgVGVzdFN5bWJvbD4sXG4gICAgICAgIC4uLnBhcmFtZXRlcnM6IEFycmF5PEZpcnN0UGFyYW1ldGVyPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgX3Rlc3RFYWNoUmVqZWN0ZWRQcm9taXNlV2l0aFNpbmdsZVBhcmFtZXRlckFnYWluc3RTYW1lUmVzb2x2ZWRQcm9taXNlKFxuICAgICAgICB0ZXN0Lm9ubHkuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgZXhwZWN0ZWQsIC4uLnBhcmFtZXRlcnNcbiAgICApXG59XG50ZXN0RWFjaFJlamVjdGVkUHJvbWlzZVdpdGhTaW5nbGVQYXJhbWV0ZXJBZ2FpbnN0U2FtZVJlc29sdmVkUHJvbWlzZS5za2lwID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IFByb21pc2U8RXJyb3IgfCBUZXN0U3ltYm9sPixcbiAgICAgICAgLi4ucGFyYW1ldGVyczogQXJyYXk8Rmlyc3RQYXJhbWV0ZXI8RnVuY3Rpb25UeXBlPj5cbiAgICApID0+IHtcbiAgICBfdGVzdEVhY2hSZWplY3RlZFByb21pc2VXaXRoU2luZ2xlUGFyYW1ldGVyQWdhaW5zdFNhbWVSZXNvbHZlZFByb21pc2UoXG4gICAgICAgIHRlc3Quc2tpcC5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCBleHBlY3RlZCwgLi4ucGFyYW1ldGVyc1xuICAgIClcbn1cbi8vIGVuZHJlZ2lvblxuLy8gcmVnaW9uIHRlc3RFYWNoQWdhaW5zdFNhbWVFeHBlY3RhdGlvblxuLyoqXG4gKiBUZXN0cyBlYWNoIGdpdmVuIHRlc3Qgc2V0ICh2YXJpb3VzIGxpc3Qgb2YgZnVuY3Rpb24gcGFyYW1ldGVycykgYWdhaW5zdCBzYW1lXG4gKiBnaXZlbiBleHBlY3RlZCB2YWx1ZS4gSXQgcmVzcGVjdHMgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHJhaXNlIGNvbXBpbGUgdGltZVxuICogZXJyb3JzIGlmIGdpdmVuIHRlc3Qgc2V0IGRvZXMgbm90IG1hdGNoIGdpdmVuIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB0ZXN0ZXIgLSBVbmRlcmxpbmcgdGVzdGluZyBmdW5jdGlvbiB0byB1c2UuXG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gRnVuY3Rpb24gZGVzY3JpcHRpb24gdG8gdGVzdC5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHJlZmVyZW5jZSB0byB0ZXN0LlxuICogQHBhcmFtIGV4cGVjdGVkIC0gVmFsdWUgdG8gY2hlY2sgZWFjaCBmdW5jdGlvbiBjYWxsIHJldHVybiB2YWx1ZSBhZ2FpbnN0LlxuICogQHBhcmFtIGZ1bmN0aW9uUGFyYW1ldGVycyAtIEFkZGl0aW9uYWwgbGlzdHMgb2YgcGFyYW1ldGVycyB0byB0ZXN0IGdpdmVuXG4gKiBmdW5jdGlvbiBhZ2Fpbi5cbiAqL1xuY29uc3QgX3Rlc3RFYWNoQWdhaW5zdFNhbWVFeHBlY3RhdGlvbiA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgdGVzdGVyOiB0eXBlb2YgdGVzdC5lYWNoLFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IFJldHVyblR5cGU8RnVuY3Rpb25UeXBlPiB8IFRlc3RTeW1ib2wsXG4gICAgICAgIC4uLmZ1bmN0aW9uUGFyYW1ldGVyczogQXJyYXk8UGFyYW1ldGVyczxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIHRlc3RlcihbLi4uZnVuY3Rpb25QYXJhbWV0ZXJzXSkoXG4gICAgICAgIGAke3JlcHJlc2VudChleHBlY3RlZCl9ID09PSAke2Z1bmN0aW9uTmFtZX0oJXAsIC4uLilgLFxuICAgICAgICAoKC4uLnBhcmFtZXRlcnM6IFBhcmFtZXRlcnM8RnVuY3Rpb25UeXBlPikgPT4ge1xuICAgICAgICAgICAgZXhwZWN0RXhwZWN0ZWRUeXBlPFJldHVyblR5cGU8RnVuY3Rpb25UeXBlPj4oXG4gICAgICAgICAgICAgICAgKGV4cGVjdGVkID09PSBURVNUX1RIUk9XX1NZTUJPTCA/XG4gICAgICAgICAgICAgICAgICAgICgpID0+IGNhbGxiYWNrKC4uLnBhcmFtZXRlcnMpIGFzIHVua25vd24gOlxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayguLi5wYXJhbWV0ZXJzKVxuICAgICAgICAgICAgICAgICkgYXMgTWF0Y2hlcnM8dm9pZD4gfCB2b2lkLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkXG4gICAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgKVxufVxuLyoqXG4gKiBUZXN0cyBlYWNoIGdpdmVuIHRlc3Qgc2V0ICh2YXJpb3VzIGxpc3Qgb2YgZnVuY3Rpb24gcGFyYW1ldGVycykgYWdhaW5zdCBzYW1lXG4gKiBnaXZlbiBleHBlY3RlZCB2YWx1ZS4gSXQgcmVzcGVjdHMgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHJhaXNlIGNvbXBpbGUgdGltZVxuICogZXJyb3JzIGlmIGdpdmVuIHRlc3Qgc2V0IGRvZXMgbm90IG1hdGNoIGdpdmVuIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSBmdW5jdGlvbk5hbWUgLSBGdW5jdGlvbiBkZXNjcmlwdGlvbiB0byB0ZXN0LlxuICogQHBhcmFtIGNhbGxiYWNrIC0gRnVuY3Rpb24gcmVmZXJlbmNlIHRvIHRlc3QuXG4gKiBAcGFyYW0gZXhwZWN0ZWQgLSBWYWx1ZSB0byBjaGVjayBlYWNoIGZ1bmN0aW9uIGNhbGwgcmV0dXJuIHZhbHVlIGFnYWluc3QuXG4gKiBAcGFyYW0gZnVuY3Rpb25QYXJhbWV0ZXJzIC0gQWRkaXRpb25hbCBsaXN0cyBvZiBwYXJhbWV0ZXJzIHRvIHRlc3QgZ2l2ZW5cbiAqIGZ1bmN0aW9uIGFnYWluLlxuICovXG5leHBvcnQgY29uc3QgdGVzdEVhY2hBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IFJldHVyblR5cGU8RnVuY3Rpb25UeXBlPiB8IFRlc3RTeW1ib2wsXG4gICAgICAgIC4uLmZ1bmN0aW9uUGFyYW1ldGVyczogQXJyYXk8UGFyYW1ldGVyczxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaEFnYWluc3RTYW1lRXhwZWN0YXRpb24oXG4gICAgICAgIHRlc3QuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgZXhwZWN0ZWQsIC4uLmZ1bmN0aW9uUGFyYW1ldGVyc1xuICAgIClcbn1cbnRlc3RFYWNoQWdhaW5zdFNhbWVFeHBlY3RhdGlvbi5vbmx5ID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IFJldHVyblR5cGU8RnVuY3Rpb25UeXBlPiB8IFRlc3RTeW1ib2wsXG4gICAgICAgIC4uLmZ1bmN0aW9uUGFyYW1ldGVyczogQXJyYXk8UGFyYW1ldGVyczxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaEFnYWluc3RTYW1lRXhwZWN0YXRpb24oXG4gICAgICAgIHRlc3Qub25seS5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCBleHBlY3RlZCwgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzXG4gICAgKVxufVxudGVzdEVhY2hBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uLnNraXAgPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICBleHBlY3RlZDogUmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+IHwgVGVzdFN5bWJvbCxcbiAgICAgICAgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzOiBBcnJheTxQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgX3Rlc3RFYWNoQWdhaW5zdFNhbWVFeHBlY3RhdGlvbihcbiAgICAgICAgdGVzdC5za2lwLmVhY2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIGV4cGVjdGVkLCAuLi5mdW5jdGlvblBhcmFtZXRlcnNcbiAgICApXG59XG4vLyBlbmRyZWdpb25cbi8vIHJlZ2lvbiB0ZXN0RWFjaFJlc29sdmVkUHJvbWlzZUFnYWluc3RTYW1lRXhwZWN0YXRpb25cbi8qKlxuICogVGVzdHMgZWFjaCBnaXZlbiB0ZXN0IHNldCAodmFyaW91cyBsaXN0IG9mIGZ1bmN0aW9uIHBhcmFtZXRlcnMpIGFnYWluc3Qgc2FtZVxuICogZ2l2ZW4gZXhwZWN0ZWQgdmFsdWUuIEl0IHJlc3BlY3RzIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byByYWlzZSBjb21waWxlIHRpbWVcbiAqIGVycm9ycyBpZiBnaXZlbiB0ZXN0IHNldCBkb2VzIG5vdCBtYXRjaCBnaXZlbiBmdW5jdGlvbiBzaWduYXR1cmUuXG4gKiBAcGFyYW0gdGVzdGVyIC0gVW5kZXJsaW5nIHRlc3RpbmcgZnVuY3Rpb24gdG8gdXNlLlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSAtIEZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvIHRlc3QuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiByZWZlcmVuY2UgdG8gdGVzdC5cbiAqIEBwYXJhbSBleHBlY3RlZCAtIFZhbHVlIHRvIGNoZWNrIGVhY2ggZnVuY3Rpb24gY2FsbCByZXR1cm4gdmFsdWUgYWdhaW5zdC5cbiAqIEBwYXJhbSBmdW5jdGlvblBhcmFtZXRlcnMgLSBBZGRpdGlvbmFsIGxpc3RzIG9mIHBhcmFtZXRlcnMgdG8gdGVzdCBnaXZlblxuICogZnVuY3Rpb24gYWdhaW4uXG4gKi9cbmNvbnN0IF90ZXN0RWFjaFJlc29sdmVkUHJvbWlzZUFnYWluc3RTYW1lRXhwZWN0YXRpb24gPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIHRlc3RlcjogdHlwZW9mIHRlc3QuZWFjaCxcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIGV4cGVjdGVkOiBUZXN0U3ltYm9sIHwgVGhlblBhcmFtZXRlcjxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+LFxuICAgICAgICAuLi5mdW5jdGlvblBhcmFtZXRlcnM6IEFycmF5PFBhcmFtZXRlcnM8RnVuY3Rpb25UeXBlPj5cbiAgICApID0+IHtcbiAgICB0ZXN0ZXIoWy4uLmZ1bmN0aW9uUGFyYW1ldGVyc10pKFxuICAgICAgICBgJHtyZXByZXNlbnQoZXhwZWN0ZWQpfSA9PT0gJHtmdW5jdGlvbk5hbWV9KCVwLCAuLi4pYCxcbiAgICAgICAgKCguLi5wYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT4pID0+XG4gICAgICAgICAgICBleHBlY3RFeHBlY3RlZFR5cGU8XG4gICAgICAgICAgICAgICAgVGhlblBhcmFtZXRlcjxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+LCBQcm9taXNlPHZvaWQ+XG4gICAgICAgICAgICA+KGV4cGVjdChjYWxsYmFjayguLi5wYXJhbWV0ZXJzKSkucmVzb2x2ZXMsIGV4cGVjdGVkLCBmYWxzZSlcbiAgICAgICAgKVxuICAgIClcbn1cbi8qKlxuICogVGVzdHMgZWFjaCBnaXZlbiB0ZXN0IHNldCAodmFyaW91cyBsaXN0IG9mIGZ1bmN0aW9uIHBhcmFtZXRlcnMpIGFnYWluc3Qgc2FtZVxuICogZ2l2ZW4gZXhwZWN0ZWQgdmFsdWUuIEl0IHJlc3BlY3RzIGZ1bmN0aW9uIHNpZ25hdHVyZSB0byByYWlzZSBjb21waWxlIHRpbWVcbiAqIGVycm9ycyBpZiBnaXZlbiB0ZXN0IHNldCBkb2VzIG5vdCBtYXRjaCBnaXZlbiBmdW5jdGlvbiBzaWduYXR1cmUuXG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gRnVuY3Rpb24gZGVzY3JpcHRpb24gdG8gdGVzdC5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHJlZmVyZW5jZSB0byB0ZXN0LlxuICogQHBhcmFtIGV4cGVjdGVkIC0gVmFsdWUgdG8gY2hlY2sgZWFjaCBmdW5jdGlvbiBjYWxsIHJldHVybiB2YWx1ZSBhZ2FpbnN0LlxuICogQHBhcmFtIGZ1bmN0aW9uUGFyYW1ldGVycyAtIEFkZGl0aW9uYWwgbGlzdHMgb2YgcGFyYW1ldGVycyB0byB0ZXN0IGdpdmVuXG4gKiBmdW5jdGlvbiBhZ2Fpbi5cbiAqL1xuZXhwb3J0IGNvbnN0IHRlc3RFYWNoUmVzb2x2ZWRQcm9taXNlQWdhaW5zdFNhbWVFeHBlY3RhdGlvbiA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIGV4cGVjdGVkOiBUZXN0U3ltYm9sIHwgVGhlblBhcmFtZXRlcjxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+LFxuICAgICAgICAuLi5mdW5jdGlvblBhcmFtZXRlcnM6IEFycmF5PFBhcmFtZXRlcnM8RnVuY3Rpb25UeXBlPj5cbiAgICApID0+IHtcbiAgICBfdGVzdEVhY2hSZXNvbHZlZFByb21pc2VBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uKFxuICAgICAgICB0ZXN0LmVhY2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIGV4cGVjdGVkLCAuLi5mdW5jdGlvblBhcmFtZXRlcnNcbiAgICApXG59XG50ZXN0RWFjaFJlc29sdmVkUHJvbWlzZUFnYWluc3RTYW1lRXhwZWN0YXRpb24ub25seSA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgICAgIGNhbGxiYWNrOiBGdW5jdGlvblR5cGUsXG4gICAgICAgIGV4cGVjdGVkOiBUZXN0U3ltYm9sIHwgVGhlblBhcmFtZXRlcjxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+LFxuICAgICAgICAuLi5mdW5jdGlvblBhcmFtZXRlcnM6IEFycmF5PFBhcmFtZXRlcnM8RnVuY3Rpb25UeXBlPj5cbiAgICApID0+IHtcbiAgICBfdGVzdEVhY2hSZXNvbHZlZFByb21pc2VBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uKFxuICAgICAgICB0ZXN0Lm9ubHkuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgZXhwZWN0ZWQsIC4uLmZ1bmN0aW9uUGFyYW1ldGVyc1xuICAgIClcbn1cbnRlc3RFYWNoUmVzb2x2ZWRQcm9taXNlQWdhaW5zdFNhbWVFeHBlY3RhdGlvbi5za2lwID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IFRlc3RTeW1ib2wgfCBUaGVuUGFyYW1ldGVyPFJldHVyblR5cGU8RnVuY3Rpb25UeXBlPj4sXG4gICAgICAgIC4uLmZ1bmN0aW9uUGFyYW1ldGVyczogQXJyYXk8UGFyYW1ldGVyczxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFJlc29sdmVkUHJvbWlzZUFnYWluc3RTYW1lRXhwZWN0YXRpb24oXG4gICAgICAgIHRlc3Quc2tpcC5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCBleHBlY3RlZCwgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzXG4gICAgKVxufVxuLy8gZW5kcmVnaW9uXG4vLyByZWdpb24gdGVzdEVhY2hSZXNvbHZlZFByb21pc2VBZ2FpbnN0U2FtZVJlc29sdmVkUHJvbWlzZVxuLyoqXG4gKiBUZXN0cyBlYWNoIGdpdmVuIHRlc3Qgc2V0ICh2YXJpb3VzIGxpc3Qgb2YgZnVuY3Rpb24gcGFyYW1ldGVycykgYWdhaW5zdCBzYW1lXG4gKiBnaXZlbiBwcm9taXNlIHJlc29sdmluZyBleHBlY3RlZCB2YWx1ZS4gSXQgcmVzcGVjdHMgZnVuY3Rpb24gc2lnbmF0dXJlIHRvXG4gKiByYWlzZSBjb21waWxlIHRpbWUgZXJyb3JzIGlmIGdpdmVuIHRlc3Qgc2V0IGRvZXMgbm90IG1hdGNoIGdpdmVuIGZ1bmN0aW9uXG4gKiBzaWduYXR1cmUuXG4gKiBAcGFyYW0gdGVzdGVyIC0gVW5kZXJsaW5nIHRlc3RpbmcgZnVuY3Rpb24gdG8gdXNlLlxuICogQHBhcmFtIGZ1bmN0aW9uTmFtZSAtIEZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvIHRlc3QuXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBGdW5jdGlvbiByZWZlcmVuY2UgdG8gdGVzdC5cbiAqIEBwYXJhbSBleHBlY3RlZCAtIFByb21pc2UgcmVzb2x2aW5nIHRvIHZhbHVlIHRvIGNoZWNrIGVhY2ggZnVuY3Rpb24gY2FsbFxuICogcmV0dXJuIHZhbHVlIGFnYWluc3QuXG4gKiBAcGFyYW0gZnVuY3Rpb25QYXJhbWV0ZXJzIC0gQWRkaXRpb25hbCBsaXN0cyBvZiBwYXJhbWV0ZXJzIHRvIHRlc3QgZ2l2ZW5cbiAqIGZ1bmN0aW9uIGFnYWluLlxuICovXG5jb25zdCBfdGVzdEVhY2hSZXNvbHZlZFByb21pc2VBZ2FpbnN0U2FtZVJlc29sdmVkUHJvbWlzZSA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgdGVzdGVyOiB0eXBlb2YgdGVzdC5lYWNoLFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IFByb21pc2U8XG4gICAgICAgICAgICBUZXN0U3ltYm9sIHwgVGhlblBhcmFtZXRlcjxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+XG4gICAgICAgID4sXG4gICAgICAgIC4uLmZ1bmN0aW9uUGFyYW1ldGVyczogQXJyYXk8UGFyYW1ldGVyczxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIHRlc3RlcihbLi4uZnVuY3Rpb25QYXJhbWV0ZXJzXSkoXG4gICAgICAgIGAke3JlcHJlc2VudChleHBlY3RlZCl9ID09PSAke2Z1bmN0aW9uTmFtZX0oJXAsIC4uLilgLFxuICAgICAgICAoYXN5bmMgKC4uLnBhcmFtZXRlcnM6IFBhcmFtZXRlcnM8RnVuY3Rpb25UeXBlPikgPT5cbiAgICAgICAgICAgIGV4cGVjdEV4cGVjdGVkVHlwZTxcbiAgICAgICAgICAgICAgICBUaGVuUGFyYW1ldGVyPFJldHVyblR5cGU8RnVuY3Rpb25UeXBlPj4sIFByb21pc2U8dm9pZD5cbiAgICAgICAgICAgID4oZXhwZWN0KGNhbGxiYWNrKC4uLnBhcmFtZXRlcnMpKS5yZXNvbHZlcywgYXdhaXQgZXhwZWN0ZWQsIGZhbHNlKVxuICAgICAgICApXG4gICAgKVxufVxuLyoqXG4gKiBUZXN0cyBlYWNoIGdpdmVuIHRlc3Qgc2V0ICh2YXJpb3VzIGxpc3Qgb2YgZnVuY3Rpb24gcGFyYW1ldGVycykgYWdhaW5zdCBzYW1lXG4gKiBnaXZlbiBwcm9taXNlIHJlc29sdmluZyBleHBlY3RlZCB2YWx1ZS4gSXQgcmVzcGVjdHMgZnVuY3Rpb24gc2lnbmF0dXJlIHRvXG4gKiByYWlzZSBjb21waWxlIHRpbWUgZXJyb3JzIGlmIGdpdmVuIHRlc3Qgc2V0IGRvZXMgbm90IG1hdGNoIGdpdmVuIGZ1bmN0aW9uXG4gKiBzaWduYXR1cmUuXG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gRnVuY3Rpb24gZGVzY3JpcHRpb24gdG8gdGVzdC5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHJlZmVyZW5jZSB0byB0ZXN0LlxuICogQHBhcmFtIGV4cGVjdGVkIC0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdmFsdWUgdG8gY2hlY2sgZWFjaCBmdW5jdGlvbiBjYWxsXG4gKiByZXR1cm4gdmFsdWUgYWdhaW5zdC5cbiAqIEBwYXJhbSBmdW5jdGlvblBhcmFtZXRlcnMgLSBBZGRpdGlvbmFsIGxpc3RzIG9mIHBhcmFtZXRlcnMgdG8gdGVzdCBnaXZlblxuICogZnVuY3Rpb24gYWdhaW4uXG4gKi9cbmV4cG9ydCBjb25zdCB0ZXN0RWFjaFJlc29sdmVkUHJvbWlzZUFnYWluc3RTYW1lUmVzb2x2ZWRQcm9taXNlID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IFByb21pc2U8VGVzdFN5bWJvbCB8IFRoZW5QYXJhbWV0ZXI8UmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+Pj4sXG4gICAgICAgIC4uLmZ1bmN0aW9uUGFyYW1ldGVyczogQXJyYXk8UGFyYW1ldGVyczxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFJlc29sdmVkUHJvbWlzZUFnYWluc3RTYW1lUmVzb2x2ZWRQcm9taXNlKFxuICAgICAgICB0ZXN0LmVhY2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIGV4cGVjdGVkLCAuLi5mdW5jdGlvblBhcmFtZXRlcnNcbiAgICApXG59XG50ZXN0RWFjaFJlc29sdmVkUHJvbWlzZUFnYWluc3RTYW1lUmVzb2x2ZWRQcm9taXNlLm9ubHkgPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICBleHBlY3RlZDogUHJvbWlzZTxUZXN0U3ltYm9sIHwgVGhlblBhcmFtZXRlcjxSZXR1cm5UeXBlPEZ1bmN0aW9uVHlwZT4+PixcbiAgICAgICAgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzOiBBcnJheTxQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgX3Rlc3RFYWNoUmVzb2x2ZWRQcm9taXNlQWdhaW5zdFNhbWVSZXNvbHZlZFByb21pc2UoXG4gICAgICAgIHRlc3Qub25seS5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCBleHBlY3RlZCwgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzXG4gICAgKVxufVxudGVzdEVhY2hSZXNvbHZlZFByb21pc2VBZ2FpbnN0U2FtZVJlc29sdmVkUHJvbWlzZS5za2lwID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IFByb21pc2U8VGVzdFN5bWJvbCB8IFRoZW5QYXJhbWV0ZXI8UmV0dXJuVHlwZTxGdW5jdGlvblR5cGU+Pj4sXG4gICAgICAgIC4uLmZ1bmN0aW9uUGFyYW1ldGVyczogQXJyYXk8UGFyYW1ldGVyczxGdW5jdGlvblR5cGU+PlxuICAgICkgPT4ge1xuICAgIF90ZXN0RWFjaFJlc29sdmVkUHJvbWlzZUFnYWluc3RTYW1lUmVzb2x2ZWRQcm9taXNlKFxuICAgICAgICB0ZXN0LnNraXAuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgZXhwZWN0ZWQsIC4uLmZ1bmN0aW9uUGFyYW1ldGVyc1xuICAgIClcbn1cbi8vIGVuZHJlZ2lvblxuLy8gcmVnaW9uIHRlc3RFYWNoUmVqZWN0ZWRQcm9taXNlQWdhaW5zdFNhbWVFeHBlY3RhdGlvblxuLyoqXG4gKiBUZXN0cyBlYWNoIGdpdmVuIHRlc3Qgc2V0ICh2YXJpb3VzIGxpc3Qgb2YgZnVuY3Rpb24gcGFyYW1ldGVycykgYWdhaW5zdCBzYW1lXG4gKiBnaXZlbiBleHBlY3RlZCB2YWx1ZS4gSXQgcmVzcGVjdHMgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHJhaXNlIGNvbXBpbGUgdGltZVxuICogZXJyb3JzIGlmIGdpdmVuIHRlc3Qgc2V0IGRvZXMgbm90IG1hdGNoIGdpdmVuIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB0ZXN0ZXIgLSBVbmRlcmxpbmcgdGVzdGluZyBmdW5jdGlvbiB0byB1c2UuXG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gRnVuY3Rpb24gZGVzY3JpcHRpb24gdG8gdGVzdC5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHJlZmVyZW5jZSB0byB0ZXN0LlxuICogQHBhcmFtIGV4cGVjdGVkIC0gVmFsdWUgdG8gY2hlY2sgZWFjaCBmdW5jdGlvbiBjYWxsIHJldHVybiB2YWx1ZSBhZ2FpbnN0LlxuICogQHBhcmFtIGZ1bmN0aW9uUGFyYW1ldGVycyAtIEFkZGl0aW9uYWwgbGlzdHMgb2YgcGFyYW1ldGVycyB0byB0ZXN0IGdpdmVuXG4gKiBmdW5jdGlvbiBhZ2Fpbi5cbiAqL1xuY29uc3QgX3Rlc3RFYWNoUmVqZWN0ZWRQcm9taXNlQWdhaW5zdFNhbWVFeHBlY3RhdGlvbiA9IDxcbiAgICBGdW5jdGlvblR5cGUgZXh0ZW5kcyBBbnlGdW5jdGlvbiA9IFVua25vd25GdW5jdGlvblxuPihcbiAgICAgICAgdGVzdGVyOiB0eXBlb2YgdGVzdC5lYWNoLFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IEVycm9yIHwgVGVzdFN5bWJvbCxcbiAgICAgICAgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzOiBBcnJheTxQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgdGVzdGVyKFsuLi5mdW5jdGlvblBhcmFtZXRlcnNdKShcbiAgICAgICAgYCR7cmVwcmVzZW50KGV4cGVjdGVkKX0gPT09ICR7ZnVuY3Rpb25OYW1lfSglcCwgLi4uKWAsXG4gICAgICAgICgoLi4ucGFyYW1ldGVyczogUGFyYW1ldGVyczxGdW5jdGlvblR5cGU+KTogUHJvbWlzZTx2b2lkPiA9PlxuICAgICAgICAgICAgZXhwZWN0RXhwZWN0ZWRUeXBlPEVycm9yLCBQcm9taXNlPHZvaWQ+PihcbiAgICAgICAgICAgICAgICBleHBlY3QoY2FsbGJhY2soLi4ucGFyYW1ldGVycykpLnJlamVjdHMsIGV4cGVjdGVkLCBmYWxzZVxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgKVxufVxuLyoqXG4gKiBUZXN0cyBlYWNoIGdpdmVuIHRlc3Qgc2V0ICh2YXJpb3VzIGxpc3Qgb2YgZnVuY3Rpb24gcGFyYW1ldGVycykgYWdhaW5zdCBzYW1lXG4gKiBnaXZlbiBleHBlY3RlZCB2YWx1ZS4gSXQgcmVzcGVjdHMgZnVuY3Rpb24gc2lnbmF0dXJlIHRvIHJhaXNlIGNvbXBpbGUgdGltZVxuICogZXJyb3JzIGlmIGdpdmVuIHRlc3Qgc2V0IGRvZXMgbm90IG1hdGNoIGdpdmVuIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSBmdW5jdGlvbk5hbWUgLSBGdW5jdGlvbiBkZXNjcmlwdGlvbiB0byB0ZXN0LlxuICogQHBhcmFtIGNhbGxiYWNrIC0gRnVuY3Rpb24gcmVmZXJlbmNlIHRvIHRlc3QuXG4gKiBAcGFyYW0gZXhwZWN0ZWQgLSBWYWx1ZSB0byBjaGVjayBlYWNoIGZ1bmN0aW9uIGNhbGwgcmV0dXJuIHZhbHVlIGFnYWluc3QuXG4gKiBAcGFyYW0gZnVuY3Rpb25QYXJhbWV0ZXJzIC0gQWRkaXRpb25hbCBsaXN0cyBvZiBwYXJhbWV0ZXJzIHRvIHRlc3QgZ2l2ZW5cbiAqIGZ1bmN0aW9uIGFnYWluLlxuICovXG5leHBvcnQgY29uc3QgdGVzdEVhY2hSZWplY3RlZFByb21pc2VBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IEVycm9yIHwgVGVzdFN5bWJvbCxcbiAgICAgICAgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzOiBBcnJheTxQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgX3Rlc3RFYWNoUmVqZWN0ZWRQcm9taXNlQWdhaW5zdFNhbWVFeHBlY3RhdGlvbihcbiAgICAgICAgdGVzdC5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCBleHBlY3RlZCwgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzXG4gICAgKVxufVxudGVzdEVhY2hSZWplY3RlZFByb21pc2VBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uLm9ubHkgPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICBleHBlY3RlZDogRXJyb3IgfCBUZXN0U3ltYm9sLFxuICAgICAgICAuLi5mdW5jdGlvblBhcmFtZXRlcnM6IEFycmF5PFBhcmFtZXRlcnM8RnVuY3Rpb25UeXBlPj5cbiAgICApID0+IHtcbiAgICBfdGVzdEVhY2hSZWplY3RlZFByb21pc2VBZ2FpbnN0U2FtZUV4cGVjdGF0aW9uKFxuICAgICAgICB0ZXN0Lm9ubHkuZWFjaCwgZnVuY3Rpb25OYW1lLCBjYWxsYmFjaywgZXhwZWN0ZWQsIC4uLmZ1bmN0aW9uUGFyYW1ldGVyc1xuICAgIClcbn1cbnRlc3RFYWNoUmVqZWN0ZWRQcm9taXNlQWdhaW5zdFNhbWVFeHBlY3RhdGlvbi5za2lwID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IEVycm9yIHwgVGVzdFN5bWJvbCxcbiAgICAgICAgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzOiBBcnJheTxQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgX3Rlc3RFYWNoUmVqZWN0ZWRQcm9taXNlQWdhaW5zdFNhbWVFeHBlY3RhdGlvbihcbiAgICAgICAgdGVzdC5za2lwLmVhY2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIGV4cGVjdGVkLCAuLi5mdW5jdGlvblBhcmFtZXRlcnNcbiAgICApXG59XG4vLyBlbmRyZWdpb25cbi8vIHJlZ2lvbiB0ZXN0RWFjaFJlamVjdGVkUHJvbWlzZUFnYWluc3RTYW1lUmVzb2x2ZWRQcm9taXNlXG4vKipcbiAqIFRlc3RzIGVhY2ggZ2l2ZW4gdGVzdCBzZXQgKHZhcmlvdXMgbGlzdCBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzKSBhZ2FpbnN0IHNhbWVcbiAqIGdpdmVuIHByb21pc2UgcmVzb2x2aW5nIGV4cGVjdGVkIHZhbHVlLiBJdCByZXNwZWN0cyBmdW5jdGlvbiBzaWduYXR1cmUgdG9cbiAqIHJhaXNlIGNvbXBpbGUgdGltZSBlcnJvcnMgaWYgZ2l2ZW4gdGVzdCBzZXQgZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZnVuY3Rpb25cbiAqIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSB0ZXN0ZXIgLSBVbmRlcmxpbmcgdGVzdGluZyBmdW5jdGlvbiB0byB1c2UuXG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gRnVuY3Rpb24gZGVzY3JpcHRpb24gdG8gdGVzdC5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIEZ1bmN0aW9uIHJlZmVyZW5jZSB0byB0ZXN0LlxuICogQHBhcmFtIGV4cGVjdGVkIC0gUHJvbWlzZSByZXNvbHZpbmcgdG8gVmFsdWUgdG8gY2hlY2sgZWFjaCBmdW5jdGlvbiBjYWxsXG4gKiByZXR1cm4gdmFsdWUgYWdhaW5zdC5cbiAqIEBwYXJhbSBmdW5jdGlvblBhcmFtZXRlcnMgLSBBZGRpdGlvbmFsIGxpc3RzIG9mIHBhcmFtZXRlcnMgdG8gdGVzdCBnaXZlblxuICogZnVuY3Rpb24gYWdhaW4uXG4gKi9cbmNvbnN0IF90ZXN0RWFjaFJlamVjdGVkUHJvbWlzZUFnYWluc3RTYW1lUmVzb2x2ZWRQcm9taXNlID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICB0ZXN0ZXI6IHR5cGVvZiB0ZXN0LmVhY2gsXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICBleHBlY3RlZDogUHJvbWlzZTxFcnJvciB8IFRlc3RTeW1ib2w+LFxuICAgICAgICAuLi5mdW5jdGlvblBhcmFtZXRlcnM6IEFycmF5PFBhcmFtZXRlcnM8RnVuY3Rpb25UeXBlPj5cbiAgICApID0+IHtcbiAgICB0ZXN0ZXIoWy4uLmZ1bmN0aW9uUGFyYW1ldGVyc10pKFxuICAgICAgICBgJHtyZXByZXNlbnQoZXhwZWN0ZWQpfSA9PT0gJHtmdW5jdGlvbk5hbWV9KCVwLCAuLi4pYCxcbiAgICAgICAgKGFzeW5jICguLi5wYXJhbWV0ZXJzOiBQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT4pOiBQcm9taXNlPHZvaWQ+ID0+XG4gICAgICAgICAgICBleHBlY3RFeHBlY3RlZFR5cGU8RXJyb3IsIFByb21pc2U8dm9pZD4+KFxuICAgICAgICAgICAgICAgIGV4cGVjdChjYWxsYmFjayguLi5wYXJhbWV0ZXJzKSkucmVqZWN0cywgYXdhaXQgZXhwZWN0ZWQsIGZhbHNlXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICApXG59XG4vKipcbiAqIFRlc3RzIGVhY2ggZ2l2ZW4gdGVzdCBzZXQgKHZhcmlvdXMgbGlzdCBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzKSBhZ2FpbnN0IHNhbWVcbiAqIGdpdmVuIHByb21pc2UgcmVzb2x2aW5nIGV4cGVjdGVkIHZhbHVlLiBJdCByZXNwZWN0cyBmdW5jdGlvbiBzaWduYXR1cmUgdG9cbiAqIHJhaXNlIGNvbXBpbGUgdGltZSBlcnJvcnMgaWYgZ2l2ZW4gdGVzdCBzZXQgZG9lcyBub3QgbWF0Y2ggZ2l2ZW4gZnVuY3Rpb25cbiAqIHNpZ25hdHVyZS5cbiAqIEBwYXJhbSBmdW5jdGlvbk5hbWUgLSBGdW5jdGlvbiBkZXNjcmlwdGlvbiB0byB0ZXN0LlxuICogQHBhcmFtIGNhbGxiYWNrIC0gRnVuY3Rpb24gcmVmZXJlbmNlIHRvIHRlc3QuXG4gKiBAcGFyYW0gZXhwZWN0ZWQgLSBQcm9taXNlIHJlc29sdmluZyB0byB2YWx1ZSB0byBjaGVjayBlYWNoIGZ1bmN0aW9uIGNhbGxcbiAqIHJldHVybiB2YWx1ZSBhZ2FpbnN0LlxuICogQHBhcmFtIGZ1bmN0aW9uUGFyYW1ldGVycyAtIEFkZGl0aW9uYWwgbGlzdHMgb2YgcGFyYW1ldGVycyB0byB0ZXN0IGdpdmVuXG4gKiBmdW5jdGlvbiBhZ2Fpbi5cbiAqL1xuZXhwb3J0IGNvbnN0IHRlc3RFYWNoUmVqZWN0ZWRQcm9taXNlQWdhaW5zdFNhbWVSZXNvbHZlZFByb21pc2UgPSA8XG4gICAgRnVuY3Rpb25UeXBlIGV4dGVuZHMgQW55RnVuY3Rpb24gPSBVbmtub3duRnVuY3Rpb25cbj4oXG4gICAgICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb25UeXBlLFxuICAgICAgICBleHBlY3RlZDogUHJvbWlzZTxFcnJvciB8IFRlc3RTeW1ib2w+LFxuICAgICAgICAuLi5mdW5jdGlvblBhcmFtZXRlcnM6IEFycmF5PFBhcmFtZXRlcnM8RnVuY3Rpb25UeXBlPj5cbiAgICApID0+IHtcbiAgICBfdGVzdEVhY2hSZWplY3RlZFByb21pc2VBZ2FpbnN0U2FtZVJlc29sdmVkUHJvbWlzZShcbiAgICAgICAgdGVzdC5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCBleHBlY3RlZCwgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzXG4gICAgKVxufVxudGVzdEVhY2hSZWplY3RlZFByb21pc2VBZ2FpbnN0U2FtZVJlc29sdmVkUHJvbWlzZS5vbmx5ID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IFByb21pc2U8RXJyb3IgfCBUZXN0U3ltYm9sPixcbiAgICAgICAgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzOiBBcnJheTxQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgX3Rlc3RFYWNoUmVqZWN0ZWRQcm9taXNlQWdhaW5zdFNhbWVSZXNvbHZlZFByb21pc2UoXG4gICAgICAgIHRlc3Qub25seS5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCBleHBlY3RlZCwgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzXG4gICAgKVxufVxudGVzdEVhY2hSZWplY3RlZFByb21pc2VBZ2FpbnN0U2FtZVJlc29sdmVkUHJvbWlzZS5za2lwID0gPFxuICAgIEZ1bmN0aW9uVHlwZSBleHRlbmRzIEFueUZ1bmN0aW9uID0gVW5rbm93bkZ1bmN0aW9uXG4+KFxuICAgICAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uVHlwZSxcbiAgICAgICAgZXhwZWN0ZWQ6IFByb21pc2U8RXJyb3IgfCBUZXN0U3ltYm9sPixcbiAgICAgICAgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzOiBBcnJheTxQYXJhbWV0ZXJzPEZ1bmN0aW9uVHlwZT4+XG4gICAgKSA9PiB7XG4gICAgX3Rlc3RFYWNoUmVqZWN0ZWRQcm9taXNlQWdhaW5zdFNhbWVSZXNvbHZlZFByb21pc2UoXG4gICAgICAgIHRlc3Quc2tpcC5lYWNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCBleHBlY3RlZCwgLi4uZnVuY3Rpb25QYXJhbWV0ZXJzXG4gICAgKVxufVxuLy8gZW5kcmVnaW9uXG5cbmV4cG9ydCBkZWZhdWx0IHRlc3RFYWNoXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FDSSxXQUFXLEVBQ1gsY0FBYyxFQUNkLGlCQUFpQixFQUNqQix3QkFBd0IsRUFDeEIsaUNBQWlDLEVBQ2pDLFlBQVksSUFBSSxRQUFRLEVBQ3hCLFVBQVUsRUFDVixhQUFhLEVBQ2IsZUFBZSxFQUFFLHVDQUF1QyxFQUN4RCw4Q0FBOEMsRUFDOUMsdURBQXVEO0FBRzNELFNBQVEsTUFBTSxFQUFFLElBQUksUUFBTyxlQUFlO0FBRTFDLFNBQVEsU0FBUztBQUNqQjtBQUNBLE9BQU8sTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDO0FBQzVFLE9BQU8sTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFD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
835
+ */var testEachRejectedPromiseAgainstSameResolvedPromise=function testEachRejectedPromiseAgainstSameResolvedPromise(functionName,callback,expected){for(var _len67=arguments.length,functionParameters=new Array(_len67>3?_len67-3:0),_key67=3;_key67<_len67;_key67++){functionParameters[_key67-3]=arguments[_key67]}_testEachRejectedPromiseAgainstSameResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.each,functionName,callback,expected].concat(functionParameters))};testEachRejectedPromiseAgainstSameResolvedPromise.only=function(functionName,callback,expected){for(var _len68=arguments.length,functionParameters=new Array(_len68>3?_len68-3:0),_key68=3;_key68<_len68;_key68++){functionParameters[_key68-3]=arguments[_key68]}_testEachRejectedPromiseAgainstSameResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.only.each,functionName,callback,expected].concat(functionParameters))};testEachRejectedPromiseAgainstSameResolvedPromise.skip=function(functionName,callback,expected){for(var _len69=arguments.length,functionParameters=new Array(_len69>3?_len69-3:0),_key69=3;_key69<_len69;_key69++){functionParameters[_key69-3]=arguments[_key69]}_testEachRejectedPromiseAgainstSameResolvedPromise.apply(void 0,[__WEBPACK_EXTERNAL_MODULE__jest_globals_d700ac6c_test__.skip.each,functionName,callback,expected].concat(functionParameters))};// endregion
836
+ /* harmony default export */ var test_helper = (testEach);
837
+ export { TEST_DEFINED_SYMBOL, TEST_THROW_SYMBOL, TEST_UNDEFINED_SYMBOL, test_helper as default, expectExpectedType, testEach, testEachAgainstResolvedPromise, testEachAgainstSameExpectation, testEachRejectedPromise, testEachRejectedPromiseAgainstResolvedPromise, testEachRejectedPromiseAgainstSameExpectation, testEachRejectedPromiseAgainstSameResolvedPromise, testEachRejectedPromiseWithSingleParameterAgainstSameExpectation, testEachRejectedPromiseWithSingleParameterAgainstSameResolvedPromise, testEachResolvedPromise, testEachResolvedPromiseAgainstResolvedPromise, testEachResolvedPromiseAgainstSameExpectation, testEachResolvedPromiseAgainstSameResolvedPromise, testEachResolvedPromiseWithSingleParameterAgainstSameExpectation, testEachResolvedPromiseWithSingleParameterAgainstSameResolvedPromise, testEachSingleParameterAgainstSameExpectation };