clientnode 4.0.1428 → 4.0.1430

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 (143) hide show
  1. package/dist/Lock.js +100 -1
  2. package/dist/Logger.js +185 -1
  3. package/dist/Semaphore.js +65 -1
  4. package/dist/array.js +452 -1
  5. package/dist/cli.js +51 -1
  6. package/dist/constants.js +126 -1
  7. package/dist/context.js +40 -1
  8. package/dist/cookie.js +84 -1
  9. package/dist/data-transfer.js +216 -1
  10. package/dist/datetime.js +282 -1
  11. package/dist/domNode.js +331 -1
  12. package/dist/expression/evaluators.js +273 -1
  13. package/dist/expression/helper.js +97 -1
  14. package/dist/expression/index.js +26 -1
  15. package/dist/expression/indicator-functions.js +37 -1
  16. package/dist/expression/type.js +20 -0
  17. package/dist/filesystem.js +410 -1
  18. package/dist/function.js +75 -1
  19. package/dist/index.js +43 -1
  20. package/dist/indicators.js +121 -1
  21. package/dist/number.js +61 -1
  22. package/dist/object.js +934 -1
  23. package/dist/process.js +69 -1
  24. package/dist/property-types.js +115 -1
  25. package/dist/require.js +82 -1
  26. package/dist/scope.js +85 -1
  27. package/dist/string.js +806 -1
  28. package/dist/test-helper.js +341 -1
  29. package/dist/type.js +21 -1
  30. package/dist/utility.js +139 -1
  31. package/package.json +23 -22
  32. package/dist/Lock.d.ts +0 -39
  33. package/dist/Logger.d.ts +0 -102
  34. package/dist/Semaphore.d.ts +0 -29
  35. package/dist/array.d.ts +0 -150
  36. package/dist/bundle/Lock.js +0 -1
  37. package/dist/bundle/Logger.js +0 -1
  38. package/dist/bundle/Semaphore.js +0 -1
  39. package/dist/bundle/array.js +0 -1
  40. package/dist/bundle/cli.js +0 -1
  41. package/dist/bundle/constants.js +0 -1
  42. package/dist/bundle/context.js +0 -1
  43. package/dist/bundle/cookie.js +0 -1
  44. package/dist/bundle/data-transfer.js +0 -1
  45. package/dist/bundle/datetime.js +0 -1
  46. package/dist/bundle/domNode.js +0 -1
  47. package/dist/bundle/expression/evaluators.js +0 -1
  48. package/dist/bundle/expression/helper.js +0 -1
  49. package/dist/bundle/expression/index.js +0 -1
  50. package/dist/bundle/expression/indicator-functions.js +0 -1
  51. package/dist/bundle/expression/types.js +0 -1
  52. package/dist/bundle/filesystem.js +0 -1
  53. package/dist/bundle/function.js +0 -1
  54. package/dist/bundle/index.js +0 -1
  55. package/dist/bundle/indicators.js +0 -1
  56. package/dist/bundle/number.js +0 -1
  57. package/dist/bundle/object.js +0 -1
  58. package/dist/bundle/process.js +0 -1
  59. package/dist/bundle/property-types.js +0 -1
  60. package/dist/bundle/require.js +0 -1
  61. package/dist/bundle/scope.js +0 -1
  62. package/dist/bundle/string.js +0 -1
  63. package/dist/bundle/test-helper.js +0 -1
  64. package/dist/bundle/type.js +0 -1
  65. package/dist/bundle/utility.js +0 -1
  66. package/dist/cli.d.ts +0 -31
  67. package/dist/compatible/Lock.js +0 -1
  68. package/dist/compatible/Logger.js +0 -1
  69. package/dist/compatible/Semaphore.js +0 -1
  70. package/dist/compatible/array.js +0 -1
  71. package/dist/compatible/cli.js +0 -1
  72. package/dist/compatible/constants.js +0 -1
  73. package/dist/compatible/context.js +0 -1
  74. package/dist/compatible/cookie.js +0 -1
  75. package/dist/compatible/data-transfer.js +0 -1
  76. package/dist/compatible/datetime.js +0 -1
  77. package/dist/compatible/domNode.js +0 -1
  78. package/dist/compatible/expression/evaluators.js +0 -1
  79. package/dist/compatible/expression/helper.js +0 -1
  80. package/dist/compatible/expression/index.js +0 -1
  81. package/dist/compatible/expression/indicator-functions.js +0 -1
  82. package/dist/compatible/expression/types.js +0 -1
  83. package/dist/compatible/filesystem.js +0 -1
  84. package/dist/compatible/function.js +0 -1
  85. package/dist/compatible/index.js +0 -1
  86. package/dist/compatible/indicators.js +0 -1
  87. package/dist/compatible/number.js +0 -1
  88. package/dist/compatible/object.js +0 -1
  89. package/dist/compatible/process.js +0 -1
  90. package/dist/compatible/property-types.js +0 -1
  91. package/dist/compatible/require.js +0 -1
  92. package/dist/compatible/scope.js +0 -1
  93. package/dist/compatible/string.js +0 -1
  94. package/dist/compatible/test-helper.js +0 -1
  95. package/dist/compatible/type.js +0 -1
  96. package/dist/compatible/utility.js +0 -1
  97. package/dist/constants.d.ts +0 -99
  98. package/dist/context.d.ts +0 -9
  99. package/dist/cookie.d.ts +0 -31
  100. package/dist/data-transfer.d.ts +0 -45
  101. package/dist/datetime.d.ts +0 -37
  102. package/dist/domNode.d.ts +0 -82
  103. package/dist/expression/evaluators.d.ts +0 -55
  104. package/dist/expression/helper.d.ts +0 -4
  105. package/dist/expression/index.d.ts +0 -7
  106. package/dist/expression/indicator-functions.d.ts +0 -14
  107. package/dist/expression/types.d.ts +0 -70
  108. package/dist/expression/types.js +0 -1
  109. package/dist/filesystem.d.ts +0 -138
  110. package/dist/function.d.ts +0 -20
  111. package/dist/index.d.ts +0 -23
  112. package/dist/indicators.d.ts +0 -68
  113. package/dist/number.d.ts +0 -35
  114. package/dist/object.d.ts +0 -213
  115. package/dist/process.d.ts +0 -22
  116. package/dist/property-types.d.ts +0 -460
  117. package/dist/require.d.ts +0 -6
  118. package/dist/scope.d.ts +0 -44
  119. package/dist/string.d.ts +0 -299
  120. package/dist/test/Lock.d.ts +0 -1
  121. package/dist/test/Logger.d.ts +0 -1
  122. package/dist/test/Semaphore.d.ts +0 -1
  123. package/dist/test/array.d.ts +0 -1
  124. package/dist/test/cookie.d.ts +0 -1
  125. package/dist/test/data-transfer.d.ts +0 -1
  126. package/dist/test/datetime.d.ts +0 -1
  127. package/dist/test/domNode.d.ts +0 -1
  128. package/dist/test/expression/evaluators.d.ts +0 -1
  129. package/dist/test/expression/helper.d.ts +0 -1
  130. package/dist/test/expression/indicator-functions.d.ts +0 -1
  131. package/dist/test/filesystem.d.ts +0 -1
  132. package/dist/test/function.d.ts +0 -1
  133. package/dist/test/indicators.d.ts +0 -1
  134. package/dist/test/number.d.ts +0 -1
  135. package/dist/test/object.d.ts +0 -1
  136. package/dist/test/process.d.ts +0 -1
  137. package/dist/test/property-types.d.ts +0 -1
  138. package/dist/test/scope.d.ts +0 -1
  139. package/dist/test/string.d.ts +0 -1
  140. package/dist/test/utility.d.ts +0 -1
  141. package/dist/test-helper.d.ts +0 -143
  142. package/dist/type.d.ts +0 -211
  143. package/dist/utility.d.ts +0 -44
package/dist/array.js CHANGED
@@ -1 +1,452 @@
1
- "use strict";if("undefined"!=typeof module&&null!==module&&"undefined"!==eval("typeof require")&&null!==eval("require")&&"main"in eval("require")&&"undefined"!==eval("typeof require.main")&&null!==eval("require.main")){var ORIGINAL_MAIN_MODULE=module;module!==eval("require.main")&&"paths"in module&&"paths"in eval("require.main")&&"undefined"!=typeof __dirname&&null!==__dirname&&(module.paths=eval("require.main.paths").concat(module.paths.filter(function(path){return eval("require.main.paths").includes(path)})))}if(null==window)var window="undefined"==typeof global||null===global?{}:global;!function(e,r){if("object"==typeof exports&&"object"==typeof module)module.exports=r(require("@babel/runtime/helpers/extends"));else if("function"==typeof define&&define.amd)define(["@babel/runtime/helpers/extends"],r);else{var t="object"==typeof exports?r(require("@babel/runtime/helpers/extends")):r(e["@babel/runtime/helpers/extends"]);for(var n in t)("object"==typeof exports?exports:e)[n]=t[n]}}(this,function(__WEBPACK_EXTERNAL_MODULE__3__){return function(){var __webpack_modules__=[function(e,r,t){t.d(r,{CLASS_TO_TYPE_MAPPING:function(){return n},PLAIN_OBJECT_PROTOTYPES:function(){return o}});Symbol.for("clientnodeValue"),Symbol.for("clientnodeIgnoreNullAndUndefined");var n={"[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"},o=[Object.prototype]},,function(__unused_webpack_module,__webpack_exports__,__webpack_require__){var _extends,VALUE_COPY_SYMBOL,IGNORE_NULL_AND_UNDEFINED_SYMBOL,isMap,isSet,isObject,isPlainObject,isFunction,isProxy,isNumeric,isNotANumber,evaluate,escapeRegularExpressions;__webpack_require__.d(__webpack_exports__,{determineType:function(){return determineType}});var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(3),_babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__),_constants__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(0);function _createForOfIteratorHelperLoose(e,r){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(t)return(t=t.call(e)).next.bind(t);if(Array.isArray(e)||(t=_unsupportedIterableToArray(e))||r&&e&&"number"==typeof e.length){t&&(e=t);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(e,r){if(e){if("string"==typeof e)return _arrayLikeToArray(e,r);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(e,r):void 0}}function _arrayLikeToArray(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=Array(r);t<r;t++)n[t]=e[t];return n}var _addDynamicGetterAndSetter=function(e,r,t,n,o,a){if(void 0===r&&(r=null),void 0===t&&(t=null),void 0===n&&(n={}),void 0===o&&(o=!0),void 0===a&&(a=[Object]),o&&"object"==typeof e)if(Array.isArray(e))for(var i,s=0,u=_createForOfIteratorHelperLoose(e);!(i=u()).done;){var l=i.value;e[s]=_addDynamicGetterAndSetter(l,r,t,n,o),s+=1}else if(isMap(e))for(var f,c=_createForOfIteratorHelperLoose(e);!(f=c()).done;){var _=f.value,p=_[0],v=_[1];e.set(p,_addDynamicGetterAndSetter(v,r,t,n,o))}else if(isSet(e)){for(var d,y=[],b=_createForOfIteratorHelperLoose(e);!(d=b()).done;){var g=d.value;e.delete(g),y.push(_addDynamicGetterAndSetter(g,r,t,n,o))}for(var O=0,h=y;O<h.length;O++){var m=h[O];e.add(m)}}else if(null!==e)for(var A=0,P=Object.entries(e);A<P.length;A++){var j=P[A],I=j[0],x=j[1];e[I]=_addDynamicGetterAndSetter(x,r,t,n,o)}if(r||t)for(var E,w,M=function(){var o=w.value;if(isObject(e)&&e instanceof o){var a=getProxyHandler(e,n),i=getProxyHandler(e,n);r&&(i.get=function(t,n){return"__target__"===n?e:"__revoke__"===n?function(){return l(),e}:"function"==typeof e[n]?e[n]:r(a.get(u,n),n,e)}),t&&(i.set=function(r,n,o){return a.set(u,n,t(n,o,e))});var s=Proxy.revocable({},i),u=s.proxy,l=s.revoke;return{v:u}}},L=_createForOfIteratorHelperLoose(a);!(w=L()).done;)if(E=M())return E.v;return e},convertCircularObjectToJSON=function(e,r,t){void 0===r&&(r=function(e){return null!=e?e:"__circularReference__"}),void 0===t&&(t=0);var n=new Map;return function(e){var o=function(e,t){if(isObject(t)){var a,i;if(n.has(t))return r(null!==(a=n.get(t))&&void 0!==a?a:null,e,t,n);if(n.set(t,null),Array.isArray(t)){i=[];for(var s,u=_createForOfIteratorHelperLoose(t);!(s=u()).done;){var l=s.value;i.push(o(null,l))}}else{i={};for(var f=0,c=Object.entries(t);f<c.length;f++){var _=c[f],p=_[0],v=_[1];i[p]=o(p,v)}}return n.set(t,i),i}return t};return JSON.stringify(e,o,t)}(e)},_convertMapToPlainObject=function(e,r){if(void 0===r&&(r=!0),"object"==typeof e){if(isMap(e)){for(var t,n={},o=_createForOfIteratorHelperLoose(e);!(t=o()).done;){var a=t.value,i=a[0],s=a[1];r&&(s=_convertMapToPlainObject(s,r)),["number","string"].includes(typeof i)&&(n[String(i)]=s)}return n}if(r)if(isPlainObject(e))for(var u=0,l=Object.entries(e);u<l.length;u++){var f=l[u],c=f[0],_=f[1];e[c]=_convertMapToPlainObject(_,r)}else if(Array.isArray(e))for(var p=0,v=0,d=e;v<d.length;v++){var y=d[v];e[p]=_convertMapToPlainObject(y,r),p+=1}else if(isSet(e)){for(var b,g=[],O=_createForOfIteratorHelperLoose(e);!(b=O()).done;){var h=b.value;e.delete(h),g.push(_convertMapToPlainObject(h,r))}for(var m=0,A=g;m<A.length;m++){var P=A[m];e.add(P)}}}return e},_convertPlainObjectToMap=function(e,r){if(void 0===r&&(r=!0),"object"==typeof e){if(isPlainObject(e)){for(var t=new Map,n=0,o=Object.entries(e);n<o.length;n++){var a=o[n],i=a[0],s=a[1];r&&(e[i]=_convertPlainObjectToMap(s,r)),t.set(i,e[i])}return t}if(r)if(Array.isArray(e))for(var u=0,l=0,f=e;l<f.length;l++){var c=f[l];e[u]=_convertPlainObjectToMap(c,r),u+=1}else if(isMap(e))for(var _,p=_createForOfIteratorHelperLoose(e);!(_=p()).done;){var v=_.value,d=v[0],y=v[1];e.set(d,_convertPlainObjectToMap(y,r))}else if(isSet(e)){for(var b,g=[],O=_createForOfIteratorHelperLoose(e);!(b=O()).done;){var h=b.value;e.delete(h),g.push(_convertPlainObjectToMap(h,r))}for(var m=0,A=g;m<A.length;m++){var P=A[m];e.add(P)}}}return e},_convertSubstringInPlainObject=function(e,r,t){for(var n=0,o=Object.entries(e);n<o.length;n++){var a=o[n],i=a[0],s=a[1];isPlainObject(s)?e[i]=_convertSubstringInPlainObject(s,r,t):"string"==typeof s&&(e[i]=s.replace(r,t))}return e},_copy=function(e,r,t,n,o,a,i,s){if(void 0===r&&(r=!1),void 0===t&&(t=-1),void 0===n&&(n=VALUE_COPY_SYMBOL),void 0===o&&(o=null),void 0===a&&(a=!1),void 0===i&&(i=[]),void 0===s&&(s=0),isObject(e)){if(!o){if(Array.isArray(e))return _copy(e,r,t,n,[],a,i,s);if(e instanceof Map)return _copy(e,r,t,n,new Map,a,i,s);if(e instanceof Set)return _copy(e,r,t,n,new Set,a,i,s);if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp){var u=/[^/]*$/.exec(e.toString());return(o=new RegExp(e.source,u?u[0]:void 0)).lastIndex=e.lastIndex,o}return"undefined"!=typeof Blob&&e instanceof Blob?r?e.slice(0,e.size,e.type):e:_copy(e,r,t,n,{},a,i,s)}if(e===o)throw new Error("Can't copy because source and destination are identical.");if(!a&&![void 0,null].includes(e)){var l=i.indexOf(e);if(-1!==l)return i[l];i.push(e)}var f=function(e){if(-1!==t&&t<s+1)return n===VALUE_COPY_SYMBOL?e:n;var o=_copy(e,r,t,n,null,a,i,s+1);return a||[void 0,null].includes(e)||"object"!=typeof e||i.push(e),o};if(Array.isArray(e))for(var c,_=_createForOfIteratorHelperLoose(e);!(c=_()).done;){var p=c.value;o.push(f(p))}else if(e instanceof Map)for(var v,d=_createForOfIteratorHelperLoose(e);!(v=d()).done;){var y=v.value,b=y[0],g=y[1];o.set(b,f(g))}else if(e instanceof Set)for(var O,h=_createForOfIteratorHelperLoose(e);!(O=h()).done;){var m=O.value;o.add(f(m))}else for(var A=0,P=Object.entries(e);A<P.length;A++){var j=P[A],I=j[0],x=j[1];try{o[I]=f(x)}catch(e){throw new Error('Failed to copy property value object "'+I+'": '+_represent(e),{cause:e})}}}return o||e},determineType=function(e){if([null,void 0].includes(e))return String(e);var r=typeof e;if(["function","object"].includes(r)&&"toString"in e){var t=Object.prototype.toString.call(e);if(Object.prototype.hasOwnProperty.call(_constants__WEBPACK_IMPORTED_MODULE_1__.CLASS_TO_TYPE_MAPPING,t))return _constants__WEBPACK_IMPORTED_MODULE_1__.CLASS_TO_TYPE_MAPPING[t]}return r},_equals=function equals(firstValue,secondValue,givenOptions){void 0===givenOptions&&(givenOptions={});var options=_extends({compareBlobs:!1,deep:-1,exceptionPrefixes:[],ignoreFunctions:!0,properties:null,returnReasonIfNotEqual:!1},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&&"undefined"!==eval("typeof Buffer")&&Object.prototype.hasOwnProperty.call(eval("Buffer"),"isBuffer")&&firstValue instanceof eval("Buffer")&&secondValue instanceof eval("Buffer")&&firstValue.toString("base64")===secondValue.toString("base64"))return!0;if(options.compareBlobs&&"undefined"!=typeof Blob&&firstValue instanceof Blob&&secondValue instanceof Blob)return new Promise(function(e){for(var r=[],t=0,n=[firstValue,secondValue];t<n.length;t++){var o=n[t],a=new FileReader;a.onload=function(t){null===t.target?r.push(null):r.push(t.target.result),2===r.length&&(r[0]===r[1]?e(!0):e(!!options.returnReasonIfNotEqual&&">>> Blob("+_represent(r[0])+") !== Blob("+_represent(r[1])+")"))},a.readAsDataURL(o)}});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){for(var promises=[],_i11=0,_arr4=[[firstValue,secondValue],[secondValue,firstValue]];_i11<_arr4.length;_i11++){var _arr4$_i=_arr4[_i11],first=_arr4$_i[0],second=_arr4$_i[1],firstIsArray=Array.isArray(first);if(firstIsArray&&(!Array.isArray(second)||first.length!==second.length))return!!options.returnReasonIfNotEqual&&".length";var firstIsMap=isMap(first);if(firstIsMap&&(!isMap(second)||first.size!==second.size))return!!options.returnReasonIfNotEqual&&".size";var firstIsSet=isSet(first);if(firstIsSet&&(!isSet(second)||first.size!==second.size))return!!options.returnReasonIfNotEqual&&".size";if(firstIsArray){for(var index=0,_loop2=function(){var e=_arr5[_i12];if(0!==options.deep){var r=_equals(e,second[index],_extends({},options,{deep:options.deep-1}));if(!r)return{v:!1};var t=index,n=function(e){var r;return"string"==typeof e?"["+String(t)+"]"+(null!==(r={"[":"",">":" "}[e[0]])&&void 0!==r?r:".")+e:e};if(Object.prototype.hasOwnProperty.call(r,"then")&&promises.push(r.then(n)),"string"==typeof r)return{v:n(r)}}index+=1},_ret2,_i12=0,_arr5=first;_i12<_arr5.length;_i12++)if(_ret2=_loop2(),_ret2)return _ret2.v}else if(firstIsMap){for(var _loop3=function(){var e=_step11.value,r=e[0],t=e[1];if(0!==options.deep){var n=_equals(t,second.get(r),_extends({},options,{deep:options.deep-1}));if(!n)return{v:!1};var o=function(e){var t;return"string"==typeof e?"get("+_represent(r)+")"+(null!==(t={"[":"",">":" "}[e[0]])&&void 0!==t?t:".")+e:e};if(Object.prototype.hasOwnProperty.call(n,"then")&&promises.push(n.then(o)),"string"==typeof n)return{v:o(n)}}},_ret3,_iterator11=_createForOfIteratorHelperLoose(first),_step11;!(_step11=_iterator11()).done;)if(_ret3=_loop3(),_ret3)return _ret3.v}else if(firstIsSet){for(var _loop4=function(){var e=_step12.value;if(0!==options.deep){for(var r,t=!1,n=[],o=_createForOfIteratorHelperLoose(second);!(r=o()).done;){var a=r.value,i=_equals(e,a,_extends({},options,{deep:options.deep-1}));if("boolean"==typeof i){if(i){t=!0;break}}else n.push(i)}var s=function(r){return!!r||!!options.returnReasonIfNotEqual&&">>> {-> "+_represent(e)+" not found}"};return t?0:(n.length&&promises.push(new Promise(function(e){Promise.all(n).then(function(r){e(s(r.some(function(e){return e})))},function(){})})),{v:s(!1)})}},_ret4,_iterator12=_createForOfIteratorHelperLoose(first),_step12;!(_step12=_iterator12()).done;)if(_ret4=_loop4(),0!==_ret4&&_ret4)return _ret4.v}else for(var _loop5=function(){var e=_Object$entries7[_i13],r=e[0],t=e[1];if(options.properties&&!options.properties.includes(r))return 0;for(var n,o=!1,a=_createForOfIteratorHelperLoose(options.exceptionPrefixes);!(n=a()).done;){var i=n.value;if(r.startsWith(i)){o=!0;break}}if(o)return 0;if(0!==options.deep){var s=_equals(t,second[r],_extends({},options,{deep:options.deep-1}));if(!s)return{v:!1};var u=function(e){var t;return"string"==typeof e?r+(null!==(t={"[":"",">":" "}[e[0]])&&void 0!==t?t:".")+e:e};if(Object.prototype.hasOwnProperty.call(s,"then")&&promises.push(s.then(u)),"string"==typeof s)return{v:u(s)}}},_ret5,_i13=0,_Object$entries7=Object.entries(first);_i13<_Object$entries7.length&&(_ret5=_loop5(),0!==_ret5);_i13++)if(_ret5)return _ret5.v}return!promises.length||new Promise(function(e){Promise.all(promises).then(function(r){for(var t,n=_createForOfIteratorHelperLoose(r);!(t=n()).done;){var o=t.value;if(!o||"string"==typeof o){e(o);break}}e(!0)},function(){})})}return!!options.returnReasonIfNotEqual&&">>> "+_represent(firstValue)+" !== "+_represent(secondValue)},evaluateDynamicData=function(e,r,t,n,o){if(void 0===r&&(r={}),void 0===t&&(t="self"),void 0===n&&(n="__evaluate__"),void 0===o&&(o="__execute__"),"object"!=typeof e||null===e)return e;t in r||(r[t]=e);var a=function(e,t){void 0===t&&(t=n);var a=evaluate(e,r,t===o);if(a.error)throw new Error(a.error);return a.result},i=function(e){if("object"!=typeof e||null===e||"undefined"==typeof Proxy)return e;for(var r=0,t=Object.entries(e);r<t.length;r++){var u=t[r],l=u[0],f=u[1];if("__target__"!==l&&isObject(f)){var c=f;if(i(c),Object.prototype.hasOwnProperty.call(c,n)||Object.prototype.hasOwnProperty.call(c,o)){var _=c;e[l]=new Proxy(c,{get:function(e,r){if("__target__"===r)return e;if("hasOwnProperty"===r)return e[r];for(var t=0,i=[n,o];t<i.length;t++){var u=i[t];if(r===u&&"string"==typeof e[r])return s(a(e[r],u))}var l=s(e);if("toString"===r){var f=a(l);return f[r].bind(f)}if("string"!=typeof r){var c,_=a(l);return null!=(c=_[r])&&c.bind?_[r].bind(_):_[r]}for(var p=0,v=[n,o];p<v.length;p++){var d=v[p];if(Object.prototype.hasOwnProperty.call(e,d))return a(l,d)[r]}return l[r]},ownKeys:function(e){for(var r=0,t=[n,o];r<t.length;r++){var i=t[r];if(Object.prototype.hasOwnProperty.call(e,i))return Object.getOwnPropertyNames(s(a(e[i],i)))}return Object.getOwnPropertyNames(e)}}),e[l].__target__||(e[l].__target__=_)}}}return e},s=function(e){if(isObject(e)){if(isProxy(e)){for(var r=0,t=[n,o];r<t.length;r++){var i=t[r];if(Object.prototype.hasOwnProperty.call(e,i))return e[i]}e=e.__target__}for(var u=0,l=Object.entries(e);u<l.length;u++){var f=l[u],c=f[0],_=f[1];if([n,o].includes(c))return"undefined"==typeof Proxy?s(a(_)):_;e[c]=s(_)}}return e};r.resolve=s;var u=function(e){if(isObject(e))for(var r=0,t=Object.entries(e);r<t.length;r++){var n=t[r],o=n[0],a=n[1];if("__target__"!==o&&null!==a&&["function","undefined"].includes(typeof a)){var i=a.__target__;void 0!==i&&(e[o]=i),u(a)}}return e};return Object.prototype.hasOwnProperty.call(e,n)?a(e[n]):Object.prototype.hasOwnProperty.call(e,o)?a(e[o],o):u(s(i(e)))},_removeKeysInEvaluation=function(e,r){void 0===r&&(r=["__evaluate__","__execute__"]);for(var t=0,n=Object.entries(e);t<n.length;t++){var o=n[t],a=o[0],i=o[1];!r.includes(a)&&r.some(function(r){return Object.prototype.hasOwnProperty.call(e,r)})?delete e[a]:isPlainObject(i)&&_removeKeysInEvaluation(i,r)}return e},_extend=function(e,r){for(var t=!1,n=arguments.length,o=new Array(n>2?n-2:0),a=2;a<n;a++)o[a-2]=arguments[a];var i,s=o;e===IGNORE_NULL_AND_UNDEFINED_SYMBOL||"boolean"==typeof e?(t=e,i=r):(i=e,isObject(r)?s=[r].concat(s):void 0!==r&&(i=r));for(var u,l=function(e,r){return r===e?e:t&&r&&(isPlainObject(r)||isMap(r))?(n=isMap(r)?e&&isMap(e)?e:new Map:e&&isPlainObject(e)?e:{},_extend(t,n,r)):r;var n},f=_createForOfIteratorHelperLoose(s);!(u=f()).done;){var c=u.value,_=typeof i,p=typeof c;if(isMap(i)&&(_+=" Map"),isMap(c)&&(p+=" Map"),_===p&&i!==c)if(isMap(i)&&isMap(c))for(var v,d=_createForOfIteratorHelperLoose(c);!(v=d()).done;){var y=v.value,b=y[0],g=y[1];i.set(b,l(i.get(b),g))}else if(!isObject(i)||Array.isArray(i)||"undefined"!=typeof Blob&&i instanceof Blob||!isObject(c)||Array.isArray(c)||"undefined"!=typeof Blob&&c instanceof Blob)i=c;else for(var O=0,h=Object.entries(c);O<h.length;O++){var m=h[O],A=m[0],P=m[1];t===IGNORE_NULL_AND_UNDEFINED_SYMBOL&&[null,void 0].includes(P)||(i[A]=l(i[A],P))}else i=c}return i},getProxyHandler=function(e,r){return void 0===r&&(r={}),r=_extends({delete:"[]",get:"[]",has:"[]",set:"[]"},r),{deleteProperty:function(t,n){return"[]"!==r.delete||"string"!=typeof n?e[r.delete](n):(delete e[n],!0)},get:function(t,n){return"[]"===r.get&&"string"==typeof n?e[n]:e[r.get](n)},has:function(t,n){return"[]"===r.has?n in e:e[r.has](n)},set:function(t,n,o){return"[]"!==r.set||"string"!=typeof n?e[r.set](n,o):(e[n]=o,!0)}}},_mask=function(e,r){if(!0===(r=_extends({exclude:!1,include:!0},r)).exclude||Array.isArray(r.exclude)&&0===r.exclude.length||!1===r.include||"object"!=typeof e)return{};var t=Array.isArray(r.exclude)?r.exclude.reduce(function(e,r){var t;return _extends({},e,((t={})[r]=!0,t))},{}):r.exclude,n=Array.isArray(r.include)?r.include.reduce(function(e,r){var t;return _extends({},e,((t={})[r]=!0,t))},{}):r.include,o={};if(isPlainObject(n))for(var a=0,i=Object.entries(n);a<i.length;a++){var s=i[a],u=s[0],l=s[1];Object.prototype.hasOwnProperty.call(e,u)&&(!0===l?o[u]=e[u]:(isPlainObject(l)||Array.isArray(l)&&l.length)&&"object"==typeof e[u]&&(o[u]=_mask(e[u],{include:l})))}else o=e;if(isPlainObject(t)){for(var f=!1,c=_extends({},o),_=0,p=Object.entries(t);_<p.length;_++){var v=p[_],d=v[0],y=v[1];if(Object.prototype.hasOwnProperty.call(c,d))if(!0===y)f=!0,delete c[d];else if((isPlainObject(y)||Array.isArray(y)&&y.length)&&"object"==typeof c[d]){var b=c[d];c[d]=_mask(c[d],{exclude:y}),c[d]!==b&&(f=!0)}}f&&(o=c)}return o},_modifyObject=function(e,r,t,n,o,a,i,s,u){if(void 0===t&&(t="__remove__"),void 0===n&&(n="__prepend__"),void 0===o&&(o="__append__"),void 0===a&&(a="__"),void 0===i&&(i="__"),void 0===s&&(s=null),void 0===u&&(u=null),isMap(r)&&isMap(e))for(var l,f=_createForOfIteratorHelperLoose(r);!(l=f()).done;){var c=l.value,_=c[0],p=c[1];e.has(_)&&_modifyObject(e.get(_),p,t,n,o,a,i,r,_)}else if(isObject(r)&&isObject(e))for(var v=0,d=Object.entries(r);v<d.length;v++){var y=d[v],b=y[0],g=y[1],O=NaN;if(Array.isArray(e)&&b.startsWith(a)&&b.endsWith(i)&&((O=parseInt(b.substring(a.length,b.length-i.length),10))<0||O>=e.length)&&(O=NaN),[t,n,o].includes(b)||!isNaN(O)){if(Array.isArray(e))if(b===t)for(var h,m=_createForOfIteratorHelperLoose([].concat(g));!(h=m()).done;){var A=h.value;"string"==typeof A&&A.startsWith(a)&&A.endsWith(i)?e.splice(parseInt(A.substring(a.length,A.length-i.length),10),1):e.includes(A)?e.splice(e.indexOf(A),1):"number"==typeof A&&A<e.length&&e.splice(A,1)}else b===o?e=e.concat(g):b===n?e=[].concat(g).concat(e):isObject(e[O])&&isObject(g)?_extend(!0,_modifyObject(e[O],g,t,n,o,a,i),e[O],g):e[O]=g;else if(b===t)for(var P,j=_createForOfIteratorHelperLoose([].concat(g));!(P=j()).done;){var I=P.value;"string"==typeof I&&Object.prototype.hasOwnProperty.call(e,I)&&delete e[I]}delete r[b],s&&"string"==typeof u&&delete s[u]}else null!==e&&Object.prototype.hasOwnProperty.call(e,b)&&(e[b]=_modifyObject(e[b],g,t,n,o,a,i,r,b))}return e},_removeKeyPrefixes=function(e,r){void 0===r&&(r="#");var t=[].concat(r);if(Array.isArray(e))for(var n,o=0,a=_createForOfIteratorHelperLoose(e.slice());!(n=a()).done;){var i=n.value,s=!1;if("string"==typeof i){for(var u,l=_createForOfIteratorHelperLoose(t);!(u=l()).done;){var f=u.value;if(i.startsWith(f+":")){e.splice(o,1),s=!0;break}}if(s)continue}e[o]=_removeKeyPrefixes(i,t),o+=1}else if(isSet(e))for(var c,_=_createForOfIteratorHelperLoose(new Set(e));!(c=_()).done;){var p=c.value,v=!1;if("string"==typeof p){for(var d,y=_createForOfIteratorHelperLoose(t);!(d=y()).done;){var b=d.value;if(p.startsWith(b+":")){e.delete(p),v=!0;break}}if(v)continue}_removeKeyPrefixes(p,t)}else if(isMap(e))for(var g,O=_createForOfIteratorHelperLoose(new Map(e));!(g=O()).done;){var h=g.value,m=h[0],A=h[1],P=!1;if("string"==typeof m){for(var j,I=_createForOfIteratorHelperLoose(t);!(j=I()).done;){var x=j.value,E=escapeRegularExpressions(x);if(new RegExp("^"+E+"[0-9]*$").test(m)){e.delete(m),P=!0;break}}if(P)continue}e.set(m,_removeKeyPrefixes(A,t))}else if(isObject(e))for(var w=0,M=Object.entries(Object.assign({},e));w<M.length;w++){for(var L,k=M[w],S=k[0],T=k[1],N=!1,F=_createForOfIteratorHelperLoose(t);!(L=F()).done;){var D=L.value,V=escapeRegularExpressions(D);if(new RegExp("^"+V+"[0-9]*$").test(S)){delete e[S],N=!0;break}}N||(e[S]=_removeKeyPrefixes(T,t))}return e},_represent=function(e,r,t,n,o,a){if(void 0===r&&(r=30),void 0===t&&(t=" "),void 0===n&&(n=""),void 0===o&&(o="__maximum_number_of_levels_reached__"),void 0===a&&(a=8),0===a)return String(o);if(null===e)return"null";if(void 0===e)return"undefined";if("string"==typeof e)return'"'+e.replace(/\n/g,"\n"+n)+'"';if(isNumeric(e)||"boolean"==typeof e)return String(e);if(e instanceof Date)return e.toISOString();if(Array.isArray(e)){for(var i,s="[",u=!1,l=1,f=_createForOfIteratorHelperLoose(e);!(i=f()).done;){var c=i.value;if(l>r){s+="\n"+n+"...";break}u&&(s+=","),s+="\n"+n+t+_represent(c,r,t,""+n+t,o,a-1),u=!0,l+=1}return u&&(s+="\n"+n),s+="]"}if(isMap(e)){for(var _,p="",v=!1,d=1,y=_createForOfIteratorHelperLoose(e);!(_=y()).done;){var b=_.value,g=b[0],O=b[1];if(d>r){p+=",\n"+n+"...";break}v&&(p+=",\n"+n+t),p+=_represent(g,r,t,""+n+t,o,a-1)+" -> "+_represent(O,r,t,""+n+t,o,a-1),v=!0,d+=1}return v||(p="EmptyMap"),p}if(isSet(e)){for(var h,m="{",A=!1,P=1,j=_createForOfIteratorHelperLoose(e);!(h=j()).done;){var I=h.value;if(P>r){m+=",\n"+n+"...";break}A&&(m+=","),m+="\n"+n+t+_represent(I,r,t,""+n+t,o,a-1),A=!0,P+=1}return A?m+="\n"+n+"}":m="EmptySet",m}if(isFunction(e))return"__function__";for(var x,E="{",w=!1,M=1,L=_createForOfIteratorHelperLoose(Object.getOwnPropertyNames(e).sort());!(x=L()).done;){var k=x.value;if(M>r){E+=",\n"+n+"...";break}w&&(E+=","),E+="\n"+n+t+k+": "+_represent(e[k],r,t,""+n+t,o,a-1),w=!0,M+=1}return w&&(E+="\n"+n),E+="}"},sort=function(e){var r=[];if(Array.isArray(e))for(var t=0;t<e.length;t++)r.push(t);else if("object"==typeof e)if(isMap(e))for(var n,o=_createForOfIteratorHelperLoose(e);!(n=o()).done;){var a=n.value;r.push(a[0])}else if(null!==e)for(var i=0,s=Object.keys(e);i<s.length;i++){var u=s[i];r.push(u)}return r.sort()},_unwrapProxy=function(e,r){if(void 0===r&&(r=new Set),isObject(e)){if(r.has(e))return e;try{isFunction(e.__revoke__)&&(isProxy(e)&&(e=e.__target__),e.__revoke__())}catch(r){return e}finally{r.add(e)}if(Array.isArray(e))for(var t,n=0,o=_createForOfIteratorHelperLoose(e);!(t=o()).done;){var a=t.value;e[n]=_unwrapProxy(a,r),n+=1}else if(isMap(e))for(var i,s=_createForOfIteratorHelperLoose(e);!(i=s()).done;){var u=i.value,l=u[0],f=u[1];e.set(l,_unwrapProxy(f,r))}else if(isSet(e)){for(var c,_=[],p=_createForOfIteratorHelperLoose(e);!(c=p()).done;){var v=c.value;e.delete(v),_.push(_unwrapProxy(v,r))}for(var d=0,y=_;d<y.length;d++){var b=y[d];e.add(b)}}else for(var g=0,O=Object.entries(e);g<O.length;g++){var h=O[g],m=h[0],A=h[1];e[m]=_unwrapProxy(A,r)}}return e}},function(e){e.exports=__WEBPACK_EXTERNAL_MODULE__3__},function(e,r,t){t.d(r,{isArrayLike:function(){return a},isPlainObject:function(){return i}});var n=t(0),o=t(2);var a=function(e){var r;try{r=Boolean(e)&&e.length}catch(e){return!1}var t,n=(0,o.determineType)(e);if("function"===n||![null,void 0].includes(t=e)&&"object"==typeof t&&t===(null==t?void 0:t.window))return!1;if("array"===n||0===r)return!0;if("number"==typeof r&&r>0)try{e[r-1];return!0}catch(e){}return!1},i=function(e){return function(e){return null!==e&&"object"==typeof e}(e)&&n.PLAIN_OBJECT_PROTOTYPES.includes(Object.getPrototypeOf(e))}}],__webpack_module_cache__={};function __webpack_require__(e){var r=__webpack_module_cache__[e];if(void 0!==r)return r.exports;var t=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](t,t.exports,__webpack_require__),t.exports}__webpack_require__.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return __webpack_require__.d(r,{a:r}),r},__webpack_require__.d=function(e,r){for(var t in r)__webpack_require__.o(r,t)&&!__webpack_require__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},__webpack_require__.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{aggregatePropertyIfEqual:function(){return aggregatePropertyIfEqual},deleteEmptyItems:function(){return deleteEmptyItems},extract:function(){return extract},extractIfMatches:function(){return extractIfMatches},extractIfPropertyExists:function(){return extractIfPropertyExists},extractIfPropertyMatches:function(){return extractIfPropertyMatches},intersect:function(){return intersect},makeArray:function(){return makeArray},makeRange:function(){return makeRange},merge:function(){return merge},paginate:function(){return paginate},permute:function(){return _permute2},permuteLength:function(){return permuteLength},removeArrayItem:function(){return removeArrayItem},sortTopological:function(){return sortTopological},sumUpProperty:function(){return sumUpProperty},unique:function(){return unique}});var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(3),_babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0__),_indicators__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(4);function _createForOfIteratorHelperLoose(e,r){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(t)return(t=t.call(e)).next.bind(t);if(Array.isArray(e)||(t=_unsupportedIterableToArray(e))||r&&e&&"number"==typeof e.length){t&&(e=t);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(e,r){if(e){if("string"==typeof e)return _arrayLikeToArray(e,r);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(e,r):void 0}}function _arrayLikeToArray(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=Array(r);t<r;t++)n[t]=e[t];return n}var aggregatePropertyIfEqual=function(e,r,t){void 0===t&&(t="");var n=t;if(Array.isArray(e)&&e.length&&Object.prototype.hasOwnProperty.call(e[0],r)){n=e[0][r];for(var o=0,a=makeArray(e);o<a.length;o++){if(a[o][r]!==n)return t}}return n},deleteEmptyItems=function(e,r){void 0===r&&(r=[]);for(var t=[],n=0,o=makeArray(e);n<o.length;n++){for(var a=o[n],i=!0,s=0,u=Object.entries(a);s<u.length;s++){var l=u[s],f=l[0],c=l[1];if(!["",null,void 0].includes(c)&&(!r.length||makeArray(r).includes(f))){i=!1;break}}i||t.push(a)}return t},extract=function(e,r){for(var t=[],n=0,o=makeArray(e);n<o.length;n++){for(var a=o[n],i={},s=0,u=makeArray(r);s<u.length;s++){var l=u[s];Object.prototype.hasOwnProperty.call(a,l)&&(i[l]=a[l])}t.push(i)}return t},extractIfMatches=function(e,r){if(!r)return makeArray(e);for(var t=[],n=0,o=makeArray(e);n<o.length;n++){var a=o[n];("string"==typeof r?new RegExp(r):r).test(a)&&t.push(a)}return t},extractIfPropertyExists=function(e,r){if(e&&r){for(var t=[],n=0,o=makeArray(e);n<o.length;n++){for(var a=o[n],i=!1,s=0,u=Object.entries(a);s<u.length;s++){var l=u[s],f=l[0],c=l[1];if(f===r&&![null,void 0].includes(c)){i=!0;break}}i&&t.push(a)}return t}return e},extractIfPropertyMatches=function(e,r){if(e){for(var t=[],n=0,o=makeArray(e);n<o.length;n++){var a=o[n],i=!0;for(var s in r)if(!r[s]||!("string"==typeof r[s]?new RegExp(r[s]):r[s]).test(a[s])){i=!1;break}i&&t.push(a)}return t}return e},intersect=function(e,r,t,n){void 0===t&&(t=[]),void 0===n&&(n=!0);var o=[];r=makeArray(r);for(var a=function(e,r,t,o,a,i){if(i?a&&(t=o):o=t,r[o]!==e[t]&&(n||![null,void 0].includes(r[o])||![null,void 0].includes(e[t])))return!1},i=0,s=makeArray(e);i<s.length;i++){var u=s[i];if((0,_indicators__WEBPACK_IMPORTED_MODULE_1__.isPlainObject)(u))for(var l=0,f=r;l<f.length;l++){var c=f[l],_=!0,p=void 0,v=Array.isArray(t);if((0,_indicators__WEBPACK_IMPORTED_MODULE_1__.isPlainObject)(t)||v&&t.length?p=!0:(p=!1,t=u),Array.isArray(t))for(var d,y=0,b=_createForOfIteratorHelperLoose(t);!(d=b()).done;){if(!1===a(u,c,y,d.value,v,p)){_=!1;break}y+=1}else for(var g=0,O=Object.entries(t);g<O.length;g++){var h=O[g];if(!1===a(u,c,h[0],h[1],v,p)){_=!1;break}}if(_){o.push(u);break}}else r.includes(u)&&o.push(u)}return o},makeArray=function(e){var r=[];return[null,void 0].includes(e)||((0,_indicators__WEBPACK_IMPORTED_MODULE_1__.isArrayLike)(Object(e))?merge(r,"string"==typeof e?[e]:e):r.push(e)),r},makeRange=function(e,r,t){var n,o;if(void 0===r&&(r=1),void 0===t&&(t=!1),1===(e=[].concat(e)).length)n=0,o=parseInt(String(e[0]),10);else{if(2!==e.length)return e;n=parseInt(String(e[0]),10),o=parseInt(String(e[1]),10)}if(o<n)return[];for(var a=[n];n<=o-r;)n+=r,(!t||n<=o-r)&&a.push(n);return a},merge=function(e,r){Array.isArray(r)||(r=Array.prototype.slice.call(r));for(var t,n=_createForOfIteratorHelperLoose(r);!(t=n()).done;){var o=t.value;e.push(o)}return e},paginate=function(e){void 0===e&&(e={});var r=e,t=r.boundaryCount,n=void 0===t?1:t,o=r.disabled,a=void 0!==o&&o,i=r.hideNextButton,s=void 0!==i&&i,u=r.hidePrevButton,l=void 0!==u&&u,f=r.page,c=void 0===f?1:f,_=r.pageSize,p=void 0===_?5:_,v=r.showFirstButton,d=void 0!==v&&v,y=r.showLastButton,b=void 0!==y&&y,g=r.siblingCount,O=void 0===g?4:g,h=r.total,m=void 0===h?100:h,A="number"!=typeof p||isNaN(p)?m:Math.ceil(m/p),P=makeRange([1,Math.min(n,A)]),j=makeRange([Math.max(A-n+1,n+1),A]),I=Math.max(Math.min(c-O,A-n-2*O-1),n+2),x=Math.min(Math.max(c+O,n+2*O+2),j.length>0?j[0]-2:A-1);return[].concat(d?["first"]:[],l?[]:["previous"],P,I>n+2?["start-ellipsis"]:n+1<A-n?[n+1]:[],makeRange([I,x]),x<A-n-1?["end-ellipsis"]:A-n>n?[A-n]:[],j,s?[]:["next"],b?["last"]:[]).map(function(e){var r;return"number"==typeof e?{disabled:a,page:e,selected:e===c,type:"page"}:_babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_0___default()({disabled:a||-1===e.indexOf("ellipsis")&&("next"===e||"last"===e?c>=A:c<=1),selected:!1,type:e},e.endsWith("-ellipsis")?{}:{page:(null!==(r={first:1,last:A}[e])&&void 0!==r?r:"next"===e)?Math.min(c+1,A):Math.max(c-1,1)})})},_permute2=function(e){var r=[],t=function(e,n){if(void 0===n&&(n=[]),0===e.length)r.push(n);else for(var o=0;o<e.length;o++){var a=e.slice();t(a,n.concat(a.splice(o,1)))}};return t(e),r},permuteLength=function(e,r){void 0===r&&(r=1);var t=[];if(0===e.length)return t;for(var n=function(e,r,o){if(0!==e)for(var a=0;a<r.length;a++)n(e-1,r.slice(a+1),o.concat([r[a]]));else o.length>0&&(t[t.length]=o)},o=r;o<e.length;o++)n(o,e,[]);return t.push(e),t},sumUpProperty=function(e,r){var t=0;if(Array.isArray(e)&&e.length)for(var n,o=_createForOfIteratorHelperLoose(e);!(n=o()).done;){var a=n.value;Object.prototype.hasOwnProperty.call(a,r)&&(t+=parseFloat(a[r]||0))}return t},removeArrayItem=function(e,r,t){void 0===t&&(t=!1);var n=e.indexOf(r);if(-1===n){if(t)throw new Error("Given target doesn't exists in given list.")}else e.splice(n,1);return e},sortTopological=function(e){for(var r=[],t=0,n=Object.entries(e);t<n.length;t++){var o=n[t],a=o[0],i=o[1];if(e[a]=[].concat(i),i.length>0)for(var s,u=_createForOfIteratorHelperLoose(makeArray(i));!(s=u()).done;){var l=s.value;r.push([a,l])}else r.push([a])}for(var f=[],c=0,_=r;c<_.length;c++)for(var p,v=_createForOfIteratorHelperLoose(_[c]);!(p=v()).done;){var d=p.value;f.includes(d)||f.push(d)}for(var y=[],b=function(e,t){if(0!==t.length&&t.includes(e))throw new Error('Cyclic dependency found. "'+e+'" is dependent of itself.\nDependency chain: "'+t.join('" -> "')+'" => "'+e+'".');var n=f.indexOf(e);if(-1!==n){var o;f[n]=null;for(var a=0,i=r;a<i.length;a++){var s=i[a];s[0]===e&&(o=o||t.concat([e]),b(s[1],o))}y.push(e)}},g=0;g<f.length;g++){var O=f[g];if(O){f[g]=null;for(var h,m=_createForOfIteratorHelperLoose(r);!(h=m()).done;){var A=h.value;A[0]===O&&b(A[1],[O])}y.push(O)}}return y},unique=function(e){for(var r,t=[],n=_createForOfIteratorHelperLoose(makeArray(e));!(r=n()).done;){var o=r.value;t.includes(o)||t.push(o)}return t};return __webpack_exports__}()});
1
+ // #!/usr/bin/env babel-node
2
+ // -*- coding: utf-8 -*-
3
+ /** @module array */
4
+ 'use strict';
5
+
6
+ /* !
7
+ region header
8
+ [Project page](https://torben.website/clientnode)
9
+
10
+ Copyright Torben Sickert (info["~at~"]torben.website) 16.12.2012
11
+
12
+ License
13
+ -------
14
+
15
+ This library written by Torben Sickert stands under a creative commons
16
+ naming 3.0 unported license.
17
+ See https://creativecommons.org/licenses/by/3.0/deed.de
18
+ endregion
19
+ */
20
+ import "core-js/modules/es.array.includes.js";
21
+ import "core-js/modules/es.array.push.js";
22
+ import { isArrayLike, isPlainObject } from "./indicators.js";
23
+
24
+ /**
25
+ * Summarizes given property of given item list.
26
+ * @param data - Array of objects with given property name.
27
+ * @param propertyName - Property name to summarize.
28
+ * @param defaultValue - Value to return if property values doesn't match.
29
+ * @returns Aggregated value.
30
+ */
31
+ export const aggregatePropertyIfEqual = (data, propertyName, defaultValue = '') => {
32
+ let result = defaultValue;
33
+ if (Array.isArray(data) && data.length && Object.prototype.hasOwnProperty.call(data[0], propertyName)) {
34
+ result = data[0][propertyName];
35
+ for (const item of makeArray(data)) if (item[propertyName] !== result) return defaultValue;
36
+ }
37
+ return result;
38
+ };
39
+ /**
40
+ * Deletes every item witch has only empty attributes for given property names.
41
+ * If given property names are empty each attribute will be considered. The
42
+ * empty string, "null" and "undefined" will be interpreted as empty.
43
+ * @param data - Data to filter.
44
+ * @param propertyNames - Properties to consider.
45
+ * @returns Given data without empty items.
46
+ */
47
+ export const deleteEmptyItems = (data, propertyNames = []) => {
48
+ const result = [];
49
+ for (const item of makeArray(data)) {
50
+ let empty = true;
51
+ for (const [propertyName, value] of Object.entries(item)) if (!['', null, undefined].includes(value) && (!propertyNames.length || makeArray(propertyNames).includes(propertyName))) {
52
+ empty = false;
53
+ break;
54
+ }
55
+ if (!empty) result.push(item);
56
+ }
57
+ return result;
58
+ };
59
+ /**
60
+ * Extracts all properties from all items which occur in given property names.
61
+ * @param data - Data where each item should be sliced.
62
+ * @param propertyNames - Property names to extract.
63
+ * @returns Data with sliced items.
64
+ */
65
+ export const extract = (data, propertyNames) => {
66
+ const result = [];
67
+ for (const item of makeArray(data)) {
68
+ const newItem = {};
69
+ for (const propertyName of makeArray(propertyNames)) if (Object.prototype.hasOwnProperty.call(item, propertyName)) newItem[propertyName] = item[propertyName];
70
+ result.push(newItem);
71
+ }
72
+ return result;
73
+ };
74
+ /**
75
+ * Extracts all values which matches given regular expression.
76
+ * @param data - Data to filter.
77
+ * @param regularExpression - Pattern to match for.
78
+ * @returns Filtered data.
79
+ */
80
+ export const extractIfMatches = (data, regularExpression) => {
81
+ if (!regularExpression) return makeArray(data);
82
+ const result = [];
83
+ for (const value of makeArray(data)) if ((typeof regularExpression === 'string' ? new RegExp(regularExpression) : regularExpression).test(value)) result.push(value);
84
+ return result;
85
+ };
86
+ /**
87
+ * Filters given data if given property is set or not.
88
+ * @param data - Data to filter.
89
+ * @param propertyName - Property name to check for existence.
90
+ * @returns Given data without the items which doesn't have specified property.
91
+ */
92
+ export const extractIfPropertyExists = (data, propertyName) => {
93
+ if (data && propertyName) {
94
+ const result = [];
95
+ for (const item of makeArray(data)) {
96
+ let exists = false;
97
+ for (const [key, value] of Object.entries(item)) if (key === propertyName && ![null, undefined].includes(value)) {
98
+ exists = true;
99
+ break;
100
+ }
101
+ if (exists) result.push(item);
102
+ }
103
+ return result;
104
+ }
105
+ return data;
106
+ };
107
+ /**
108
+ * Extract given data where specified property value matches given patterns.
109
+ * @param data - Data to filter.
110
+ * @param propertyPattern - Mapping of property names to pattern.
111
+ * @returns Filtered data.
112
+ */
113
+ export const extractIfPropertyMatches = (data, propertyPattern) => {
114
+ if (data) {
115
+ const result = [];
116
+ for (const item of makeArray(data)) {
117
+ let matches = true;
118
+ for (const propertyName in propertyPattern) if (!(propertyPattern[propertyName] && (typeof propertyPattern[propertyName] === 'string' ? new RegExp(propertyPattern[propertyName]) : propertyPattern[propertyName]).test(item[propertyName]))) {
119
+ matches = false;
120
+ break;
121
+ }
122
+ if (matches) result.push(item);
123
+ }
124
+ return result;
125
+ }
126
+ return data;
127
+ };
128
+ /**
129
+ * Determines all objects which exists in "first" and in "second".
130
+ * Object key which will be compared are given by "keys". If an empty array is
131
+ * given each key will be compared. If an object is given corresponding initial
132
+ * data key will be mapped to referenced new data key.
133
+ * @param first - Referenced data to check for.
134
+ * @param second - Data to check for existence.
135
+ * @param keys - Keys to define equality.
136
+ * @param strict - The strict parameter indicates whether "null" and
137
+ * "undefined" should be interpreted as equal (takes only effect if given keys
138
+ * aren't empty).
139
+ * @returns Data which does exit in given initial data.
140
+ */
141
+ export const intersect = (first, second, keys = [], strict = true) => {
142
+ const containingData = [];
143
+ second = makeArray(second);
144
+ const intersectItem = (firstItem, secondItem, firstKey, secondKey, keysAreAnArray, iterateGivenKeys) => {
145
+ if (iterateGivenKeys) {
146
+ if (keysAreAnArray) firstKey = secondKey;
147
+ } else secondKey = firstKey;
148
+ if (secondItem[secondKey] !== firstItem[firstKey] && (strict || !([null, undefined].includes(secondItem[secondKey]) && [null, undefined].includes(firstItem[firstKey])))) return false;
149
+ };
150
+ for (const firstItem of makeArray(first)) if (isPlainObject(firstItem)) for (const secondItem of second) {
151
+ let exists = true;
152
+ let iterateGivenKeys;
153
+ const keysAreAnArray = Array.isArray(keys);
154
+ if (isPlainObject(keys) || keysAreAnArray && keys.length) iterateGivenKeys = true;else {
155
+ iterateGivenKeys = false;
156
+ keys = firstItem;
157
+ }
158
+ if (Array.isArray(keys)) {
159
+ let index = 0;
160
+ for (const key of keys) {
161
+ if (intersectItem(firstItem, secondItem, index, key, keysAreAnArray, iterateGivenKeys) === false) {
162
+ exists = false;
163
+ break;
164
+ }
165
+ index += 1;
166
+ }
167
+ } else for (const [key, value] of Object.entries(keys)) if (intersectItem(firstItem, secondItem, key, value, keysAreAnArray, iterateGivenKeys) === false) {
168
+ exists = false;
169
+ break;
170
+ }
171
+ if (exists) {
172
+ containingData.push(firstItem);
173
+ break;
174
+ }
175
+ } else if (second.includes(firstItem)) containingData.push(firstItem);
176
+ return containingData;
177
+ };
178
+ /**
179
+ * Converts given object into an array.
180
+ * @param object - Target to convert.
181
+ * @returns Generated array.
182
+ */
183
+ export const makeArray = object => {
184
+ const result = [];
185
+ if (![null, undefined].includes(object)) if (isArrayLike(Object(object))) merge(result, typeof object === 'string' ? [object] : object);else result.push(object);
186
+ return result;
187
+ };
188
+ /**
189
+ * Creates a list of items within given range.
190
+ * @param range - Array of lower and upper bounds. If only one value is given
191
+ * lower bound will be assumed to be zero. Both integers have to be positive
192
+ * and will be contained in the resulting array. If more than two numbers are
193
+ * provided given range will be returned.
194
+ * @param step - Space between two consecutive values.
195
+ * @param ignoreLastStep - Removes last step.
196
+ * @returns Produced array of integers.
197
+ */
198
+ export const makeRange = (range, step = 1, ignoreLastStep = false) => {
199
+ range = [].concat(range);
200
+ let index;
201
+ let higherBound;
202
+ if (range.length === 1) {
203
+ index = 0;
204
+ higherBound = parseInt(String(range[0]), 10);
205
+ } else if (range.length === 2) {
206
+ index = parseInt(String(range[0]), 10);
207
+ higherBound = parseInt(String(range[1]), 10);
208
+ } else return range;
209
+ if (higherBound < index) return [];
210
+ const result = [index];
211
+ while (index <= higherBound - step) {
212
+ index += step;
213
+ if (!ignoreLastStep || index <= higherBound - step) result.push(index);
214
+ }
215
+ return result;
216
+ };
217
+ /**
218
+ * Merge the contents of two arrays together into the first array.
219
+ * @param target - Target array.
220
+ * @param source - Source array.
221
+ * @returns Target array with merged given source one.
222
+ */
223
+ export const merge = (target, source) => {
224
+ if (!Array.isArray(source)) source = Array.prototype.slice.call(source);
225
+ for (const value of source) target.push(value);
226
+ return target;
227
+ };
228
+ /**
229
+ * Generates a list if pagination symbols to render a pagination from.
230
+ * @param options - Configure bounds and current page of pagination to
231
+ * determine.
232
+ * @param options.boundaryCount - Indicates where to start pagination within
233
+ * given total range.
234
+ * @param options.disabled - Indicates whether to disable all items.
235
+ * @param options.hideNextButton - Indicates whether to show a jump to next
236
+ * item.
237
+ * @param options.hidePrevButton - Indicates whether to show a jump to previous
238
+ * item.
239
+ * @param options.page - Indicates current visible page.
240
+ * @param options.pageSize - Number of items per page.
241
+ * @param options.showFirstButton - Indicates whether to show a jump to first
242
+ * item.
243
+ * @param options.showLastButton - Indicates whether to show a jump to last
244
+ * item.
245
+ * @param options.siblingCount - Number of sibling page symbols next to current
246
+ * page symbol.
247
+ * @param options.total - Number of all items to paginate.
248
+ * @returns A list of pagination symbols.
249
+ */
250
+ export const paginate = (options = {}) => {
251
+ const {
252
+ boundaryCount = 1,
253
+ disabled = false,
254
+ hideNextButton = false,
255
+ hidePrevButton = false,
256
+ page = 1,
257
+ pageSize = 5,
258
+ showFirstButton = false,
259
+ showLastButton = false,
260
+ siblingCount = 4,
261
+ total = 100
262
+ } = options;
263
+ const numberOfPages = typeof pageSize === 'number' && !isNaN(pageSize) ? Math.ceil(total / pageSize) : total;
264
+ const startPages = makeRange([1, Math.min(boundaryCount, numberOfPages)]);
265
+ const endPages = makeRange([Math.max(numberOfPages - boundaryCount + 1, boundaryCount + 1), numberOfPages]);
266
+ const siblingsStart = Math.max(Math.min(
267
+ // Left boundary for lower pages.
268
+ page - siblingCount,
269
+ // Lower boundary for higher pages.
270
+ numberOfPages - boundaryCount - siblingCount * 2 - 1),
271
+ // If number is greater than number of "startPages".
272
+ boundaryCount + 2);
273
+ const siblingsEnd = Math.min(Math.max(
274
+ // Right bound for higher pages.
275
+ page + siblingCount,
276
+ // Upper boundary for lower pages.
277
+ boundaryCount + siblingCount * 2 + 2),
278
+ // If number is less than number of "endPages".
279
+ endPages.length > 0 ? endPages[0] - 2 : numberOfPages - 1);
280
+
281
+ /*
282
+ Symbol list of items to render represent as pagination.
283
+ Example result:
284
+ [
285
+ 'first', 'previous',
286
+ 1,
287
+ 'start-ellipsis',
288
+ 4, 5, 6,
289
+ 'end-ellipsis',
290
+ 10,
291
+ 'next', 'last'
292
+ ]
293
+ */
294
+ return [...(showFirstButton ? ['first'] : []), ...(hidePrevButton ? [] : ['previous']), ...startPages,
295
+ // Start ellipsis
296
+ ...(siblingsStart > boundaryCount + 2 ? ['start-ellipsis'] : boundaryCount + 1 < numberOfPages - boundaryCount ? [boundaryCount + 1] : []),
297
+ // Sibling pages
298
+ ...makeRange([siblingsStart, siblingsEnd]),
299
+ // End ellipsis
300
+ ...(siblingsEnd < numberOfPages - boundaryCount - 1 ? ['end-ellipsis'] : numberOfPages - boundaryCount > boundaryCount ? [numberOfPages - boundaryCount] : []), ...endPages, ...(hideNextButton ? [] : ['next']), ...(showLastButton ? ['last'] : [])].map(item => typeof item === 'number' ? {
301
+ disabled,
302
+ page: item,
303
+ selected: item === page,
304
+ type: 'page'
305
+ } : {
306
+ disabled: disabled || item.indexOf('ellipsis') === -1 && (item === 'next' || item === 'last' ? page >= numberOfPages : page <= 1),
307
+ selected: false,
308
+ type: item,
309
+ ...(item.endsWith('-ellipsis') ? {} : {
310
+ page: {
311
+ first: 1,
312
+ last: numberOfPages
313
+ }[item] ?? item === 'next' ? Math.min(page + 1, numberOfPages) :
314
+ // NOTE: Is "previous" type.
315
+ Math.max(page - 1, 1)
316
+ })
317
+ });
318
+ };
319
+ /**
320
+ * Generates all permutations of given iterable.
321
+ * @param data - Array like object.
322
+ * @returns Array of permuted arrays.
323
+ */
324
+ export const permute = data => {
325
+ const result = [];
326
+ const permute = (currentData, dataToMixin = []) => {
327
+ if (currentData.length === 0) result.push(dataToMixin);else for (let index = 0; index < currentData.length; index++) {
328
+ const copy = currentData.slice();
329
+ permute(copy, dataToMixin.concat(copy.splice(index, 1)));
330
+ }
331
+ };
332
+ permute(data);
333
+ return result;
334
+ };
335
+ /**
336
+ * Generates all lengths permutations of given iterable.
337
+ * @param data - Array like object.
338
+ * @param minimalSubsetLength - Defines how long the minimal subset length
339
+ * should be.
340
+ * @returns Array of permuted arrays.
341
+ */
342
+ export const permuteLength = (data, minimalSubsetLength = 1) => {
343
+ const result = [];
344
+ if (data.length === 0) return result;
345
+ const generate = (index, source, rest) => {
346
+ if (index === 0) {
347
+ if (rest.length > 0) result[result.length] = rest;
348
+ return;
349
+ }
350
+ for (let sourceIndex = 0; sourceIndex < source.length; sourceIndex++) generate(index - 1, source.slice(sourceIndex + 1), rest.concat([source[sourceIndex]]));
351
+ };
352
+ for (let index = minimalSubsetLength; index < data.length; index++) generate(index, data, []);
353
+ result.push(data);
354
+ return result;
355
+ };
356
+ /**
357
+ * Sums up given property of given item list.
358
+ * @param data - The objects with specified property to sum up.
359
+ * @param propertyName - Property name to sum up its value.
360
+ * @returns The aggregated value.
361
+ */
362
+ export const sumUpProperty = (data, propertyName) => {
363
+ let result = 0;
364
+ if (Array.isArray(data) && data.length) for (const item of data) if (Object.prototype.hasOwnProperty.call(item, propertyName)) result += parseFloat(item[propertyName] || 0);
365
+ return result;
366
+ };
367
+ /**
368
+ * Removes given target on given list.
369
+ * @param list - Array to splice.
370
+ * @param target - Target to remove from given list.
371
+ * @param strict - Indicates whether to fire an exception if given target
372
+ * doesn't exist given list.
373
+ * @returns Item with the appended target.
374
+ */
375
+ export const removeArrayItem = (list, target, strict = false) => {
376
+ const index = list.indexOf(target);
377
+ if (index === -1) {
378
+ if (strict) throw new Error(`Given target doesn't exists in given list.`);
379
+ } else list.splice(index, 1);
380
+ return list;
381
+ };
382
+ /**
383
+ * Sorts given object of dependencies in a topological order.
384
+ * @param items - Items to sort.
385
+ * @returns Sorted array of given items respecting their dependencies.
386
+ */
387
+ export const sortTopological = items => {
388
+ const edges = [];
389
+ for (const [name, value] of Object.entries(items)) {
390
+ items[name] = [].concat(value);
391
+ if (value.length > 0) for (const dependencyName of makeArray(value)) edges.push([name, dependencyName]);else edges.push([name]);
392
+ }
393
+ const nodes = [];
394
+ // Accumulate unique nodes into a large list.
395
+ for (const edge of edges) for (const node of edge) if (!nodes.includes(node)) nodes.push(node);
396
+ const sorted = [];
397
+ // Define a visitor function that recursively traverses dependencies.
398
+ const visit = (node, predecessors) => {
399
+ // Check if a node is dependent of itself.
400
+ if (predecessors.length !== 0 && predecessors.includes(node)) throw new Error(`Cyclic dependency found. "${node}" is dependent of ` + 'itself.\n' + `Dependency chain: "${predecessors.join('" -> "')}" => "` + `${node}".`);
401
+ const index = nodes.indexOf(node);
402
+ // If the node still exists, traverse its dependencies.
403
+ if (index !== -1) {
404
+ let copy;
405
+ // Mark the node to exclude it from future iterations.
406
+ nodes[index] = null;
407
+ /*
408
+ Loop through all edges and follow dependencies of the current
409
+ node
410
+ */
411
+ for (const edge of edges) if (edge[0] === node) {
412
+ /*
413
+ Lazily create a copy of predecessors with the current
414
+ node concatenated onto it.
415
+ */
416
+ copy = copy || predecessors.concat([node]);
417
+ // Recursively traverse to node dependencies.
418
+ visit(edge[1], copy);
419
+ }
420
+ sorted.push(node);
421
+ }
422
+ };
423
+ for (let index = 0; index < nodes.length; index++) {
424
+ const node = nodes[index];
425
+ // Ignore nodes that have been excluded.
426
+ if (node) {
427
+ // Mark the node to exclude it from future iterations.
428
+ nodes[index] = null;
429
+ /*
430
+ Loop through all edges and follow dependencies of the current
431
+ node.
432
+ */
433
+ for (const edge of edges) if (edge[0] === node)
434
+ // Recursively traverse to node dependencies.
435
+ visit(edge[1], [node]);
436
+ sorted.push(node);
437
+ }
438
+ }
439
+ return sorted;
440
+ };
441
+ /**
442
+ * Makes all values in given iterable unique by removing duplicates (The first
443
+ * occurrences will be left).
444
+ * @param data - Array like object.
445
+ * @returns Sliced version of given object.
446
+ */
447
+ export const unique = data => {
448
+ const result = [];
449
+ for (const value of makeArray(data)) if (!result.includes(value)) result.push(value);
450
+ return result;
451
+ };
452
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2FycmF5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vICMhL3Vzci9iaW4vZW52IGJhYmVsLW5vZGVcbi8vIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLVxuLyoqIEBtb2R1bGUgYXJyYXkgKi9cbid1c2Ugc3RyaWN0J1xuLyogIVxuICAgIHJlZ2lvbiBoZWFkZXJcbiAgICBbUHJvamVjdCBwYWdlXShodHRwczovL3RvcmJlbi53ZWJzaXRlL2NsaWVudG5vZGUpXG5cbiAgICBDb3B5cmlnaHQgVG9yYmVuIFNpY2tlcnQgKGluZm9bXCJ+YXR+XCJddG9yYmVuLndlYnNpdGUpIDE2LjEyLjIwMTJcblxuICAgIExpY2Vuc2VcbiAgICAtLS0tLS0tXG5cbiAgICBUaGlzIGxpYnJhcnkgd3JpdHRlbiBieSBUb3JiZW4gU2lja2VydCBzdGFuZHMgdW5kZXIgYSBjcmVhdGl2ZSBjb21tb25zXG4gICAgbmFtaW5nIDMuMCB1bnBvcnRlZCBsaWNlbnNlLlxuICAgIFNlZSBodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wL2RlZWQuZGVcbiAgICBlbmRyZWdpb25cbiovXG5pbXBvcnQgdHlwZSB7TWFwcGluZywgUGFnZSwgUGFnZVR5cGUsIFBhZ2luYXRlT3B0aW9ucywgVmFsdWVPZn0gZnJvbSAnLi90eXBlJ1xuXG5pbXBvcnQge2lzQXJyYXlMaWtlLCBpc1BsYWluT2JqZWN0fSBmcm9tICcuL2luZGljYXRvcnMnXG5cbi8qKlxuICogU3VtbWFyaXplcyBnaXZlbiBwcm9wZXJ0eSBvZiBnaXZlbiBpdGVtIGxpc3QuXG4gKiBAcGFyYW0gZGF0YSAtIEFycmF5IG9mIG9iamVjdHMgd2l0aCBnaXZlbiBwcm9wZXJ0eSBuYW1lLlxuICogQHBhcmFtIHByb3BlcnR5TmFtZSAtIFByb3BlcnR5IG5hbWUgdG8gc3VtbWFyaXplLlxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIFZhbHVlIHRvIHJldHVybiBpZiBwcm9wZXJ0eSB2YWx1ZXMgZG9lc24ndCBtYXRjaC5cbiAqIEByZXR1cm5zIEFnZ3JlZ2F0ZWQgdmFsdWUuXG4gKi9cbmV4cG9ydCBjb25zdCBhZ2dyZWdhdGVQcm9wZXJ0eUlmRXF1YWwgPSA8VCA9IHVua25vd24+KFxuICAgIGRhdGE6IEFycmF5PE1hcHBpbmc8dW5rbm93bj4+LFxuICAgIHByb3BlcnR5TmFtZTogc3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogVCA9ICcnIGFzIHVua25vd24gYXMgVFxuKTogVCA9PiB7XG4gICAgbGV0IHJlc3VsdDogVCA9IGRlZmF1bHRWYWx1ZVxuXG4gICAgaWYgKFxuICAgICAgICBBcnJheS5pc0FycmF5KGRhdGEpICYmXG4gICAgICAgIGRhdGEubGVuZ3RoICYmXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhWzBdLCBwcm9wZXJ0eU5hbWUpXG4gICAgKSB7XG4gICAgICAgIHJlc3VsdCA9IGRhdGFbMF1bcHJvcGVydHlOYW1lXSBhcyBUXG5cbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG1ha2VBcnJheTxNYXBwaW5nPHVua25vd24+PihkYXRhKSlcbiAgICAgICAgICAgIGlmIChpdGVtW3Byb3BlcnR5TmFtZV0gIT09IHJlc3VsdClcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxufVxuLyoqXG4gKiBEZWxldGVzIGV2ZXJ5IGl0ZW0gd2l0Y2ggaGFzIG9ubHkgZW1wdHkgYXR0cmlidXRlcyBmb3IgZ2l2ZW4gcHJvcGVydHkgbmFtZXMuXG4gKiBJZiBnaXZlbiBwcm9wZXJ0eSBuYW1lcyBhcmUgZW1wdHkgZWFjaCBhdHRyaWJ1dGUgd2lsbCBiZSBjb25zaWRlcmVkLiBUaGVcbiAqIGVtcHR5IHN0cmluZywgXCJudWxsXCIgYW5kIFwidW5kZWZpbmVkXCIgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBlbXB0eS5cbiAqIEBwYXJhbSBkYXRhIC0gRGF0YSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0gcHJvcGVydHlOYW1lcyAtIFByb3BlcnRpZXMgdG8gY29uc2lkZXIuXG4gKiBAcmV0dXJucyBHaXZlbiBkYXRhIHdpdGhvdXQgZW1wdHkgaXRlbXMuXG4gKi9cbmV4cG9ydCBjb25zdCBkZWxldGVFbXB0eUl0ZW1zID0gPFxuICAgIFQgZXh0ZW5kcyBNYXBwaW5nPHVua25vd24+ID0gTWFwcGluZzx1bmtub3duPlxuPihkYXRhOiBBcnJheTxUPiwgcHJvcGVydHlOYW1lczogQXJyYXk8c3RyaW5nIHwgc3ltYm9sPiA9IFtdKTogQXJyYXk8VD4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdDogQXJyYXk8VD4gPSBbXVxuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIG1ha2VBcnJheTxUPihkYXRhKSkge1xuICAgICAgICBsZXQgZW1wdHkgPSB0cnVlXG5cbiAgICAgICAgZm9yIChjb25zdCBbcHJvcGVydHlOYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaXRlbSkpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIVsnJywgbnVsbCwgdW5kZWZpbmVkXS5pbmNsdWRlcyh2YWx1ZSBhcyBudWxsKSAmJlxuICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgIXByb3BlcnR5TmFtZXMubGVuZ3RoIHx8XG4gICAgICAgICAgICAgICAgICAgIG1ha2VBcnJheShwcm9wZXJ0eU5hbWVzKS5pbmNsdWRlcyhwcm9wZXJ0eU5hbWUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZW1wdHkgPSBmYWxzZVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFlbXB0eSlcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxufVxuLyoqXG4gKiBFeHRyYWN0cyBhbGwgcHJvcGVydGllcyBmcm9tIGFsbCBpdGVtcyB3aGljaCBvY2N1ciBpbiBnaXZlbiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBwYXJhbSBkYXRhIC0gRGF0YSB3aGVyZSBlYWNoIGl0ZW0gc2hvdWxkIGJlIHNsaWNlZC5cbiAqIEBwYXJhbSBwcm9wZXJ0eU5hbWVzIC0gUHJvcGVydHkgbmFtZXMgdG8gZXh0cmFjdC5cbiAqIEByZXR1cm5zIERhdGEgd2l0aCBzbGljZWQgaXRlbXMuXG4gKi9cbmV4cG9ydCBjb25zdCBleHRyYWN0ID0gPFQgPSBNYXBwaW5nPHVua25vd24+PihcbiAgICBkYXRhOiB1bmtub3duLCBwcm9wZXJ0eU5hbWVzOiBBcnJheTxzdHJpbmc+XG4pOiBBcnJheTxUPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0OiBBcnJheTxUPiA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWFrZUFycmF5PE1hcHBpbmc8dW5rbm93bj4+KGRhdGEpKSB7XG4gICAgICAgIGNvbnN0IG5ld0l0ZW06IFQgPSB7fSBhcyBUXG4gICAgICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIG1ha2VBcnJheTxzdHJpbmc+KFxuICAgICAgICAgICAgcHJvcGVydHlOYW1lc1xuICAgICAgICApKVxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpdGVtLCBwcm9wZXJ0eU5hbWUpKVxuICAgICAgICAgICAgICAgIG5ld0l0ZW1bcHJvcGVydHlOYW1lIGFzIGtleW9mIFRdID1cbiAgICAgICAgICAgICAgICAgICAgaXRlbVtwcm9wZXJ0eU5hbWVdIGFzIFZhbHVlT2Y8VD5cblxuICAgICAgICByZXN1bHQucHVzaChuZXdJdGVtKVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbn1cbi8qKlxuICogRXh0cmFjdHMgYWxsIHZhbHVlcyB3aGljaCBtYXRjaGVzIGdpdmVuIHJlZ3VsYXIgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBkYXRhIC0gRGF0YSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0gcmVndWxhckV4cHJlc3Npb24gLSBQYXR0ZXJuIHRvIG1hdGNoIGZvci5cbiAqIEByZXR1cm5zIEZpbHRlcmVkIGRhdGEuXG4gKi9cbmV4cG9ydCBjb25zdCBleHRyYWN0SWZNYXRjaGVzID0gKFxuICAgIGRhdGE6IHVua25vd24sIHJlZ3VsYXJFeHByZXNzaW9uOiBzdHJpbmcgfCBSZWdFeHBcbik6IEFycmF5PHN0cmluZz4gPT4ge1xuICAgIGlmICghcmVndWxhckV4cHJlc3Npb24pXG4gICAgICAgIHJldHVybiBtYWtlQXJyYXk8c3RyaW5nPihkYXRhKVxuXG4gICAgY29uc3QgcmVzdWx0OiBBcnJheTxzdHJpbmc+ID0gW11cbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIG1ha2VBcnJheTxzdHJpbmc+KGRhdGEpKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoKHR5cGVvZiByZWd1bGFyRXhwcmVzc2lvbiA9PT0gJ3N0cmluZycpID9cbiAgICAgICAgICAgICAgICBuZXcgUmVnRXhwKHJlZ3VsYXJFeHByZXNzaW9uKSA6XG4gICAgICAgICAgICAgICAgcmVndWxhckV4cHJlc3Npb25cbiAgICAgICAgICAgICkudGVzdCh2YWx1ZSlcbiAgICAgICAgKVxuICAgICAgICAgICAgcmVzdWx0LnB1c2godmFsdWUpXG5cbiAgICByZXR1cm4gcmVzdWx0XG59XG4vKipcbiAqIEZpbHRlcnMgZ2l2ZW4gZGF0YSBpZiBnaXZlbiBwcm9wZXJ0eSBpcyBzZXQgb3Igbm90LlxuICogQHBhcmFtIGRhdGEgLSBEYXRhIHRvIGZpbHRlci5cbiAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgLSBQcm9wZXJ0eSBuYW1lIHRvIGNoZWNrIGZvciBleGlzdGVuY2UuXG4gKiBAcmV0dXJucyBHaXZlbiBkYXRhIHdpdGhvdXQgdGhlIGl0ZW1zIHdoaWNoIGRvZXNuJ3QgaGF2ZSBzcGVjaWZpZWQgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBleHRyYWN0SWZQcm9wZXJ0eUV4aXN0cyA9IDxcbiAgICBUIGV4dGVuZHMgTWFwcGluZzx1bmtub3duPiA9IE1hcHBpbmc8dW5rbm93bj5cbj4oZGF0YTogdW5rbm93biwgcHJvcGVydHlOYW1lOiBzdHJpbmcpOiBBcnJheTxUPiA9PiB7XG4gICAgaWYgKGRhdGEgJiYgcHJvcGVydHlOYW1lKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogQXJyYXk8VD4gPSBbXVxuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBtYWtlQXJyYXk8VD4oZGF0YSkpIHtcbiAgICAgICAgICAgIGxldCBleGlzdHMgPSBmYWxzZVxuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaXRlbSkpXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IHByb3BlcnR5TmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICAhW251bGwsIHVuZGVmaW5lZF0uaW5jbHVkZXModmFsdWUgYXMgbnVsbClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgZXhpc3RzID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGV4aXN0cylcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIHJldHVybiBkYXRhIGFzIEFycmF5PFQ+XG59XG4vKipcbiAqIEV4dHJhY3QgZ2l2ZW4gZGF0YSB3aGVyZSBzcGVjaWZpZWQgcHJvcGVydHkgdmFsdWUgbWF0Y2hlcyBnaXZlbiBwYXR0ZXJucy5cbiAqIEBwYXJhbSBkYXRhIC0gRGF0YSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0gcHJvcGVydHlQYXR0ZXJuIC0gTWFwcGluZyBvZiBwcm9wZXJ0eSBuYW1lcyB0byBwYXR0ZXJuLlxuICogQHJldHVybnMgRmlsdGVyZWQgZGF0YS5cbiAqL1xuZXhwb3J0IGNvbnN0IGV4dHJhY3RJZlByb3BlcnR5TWF0Y2hlcyA9IDxUID0gdW5rbm93bj4oXG4gICAgZGF0YTogdW5rbm93biwgcHJvcGVydHlQYXR0ZXJuOiBNYXBwaW5nPFJlZ0V4cCB8IHN0cmluZz5cbik6IEFycmF5PFQ+ID0+IHtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgICBjb25zdCByZXN1bHQ6IEFycmF5PFQ+ID0gW11cblxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWFrZUFycmF5PFQ+KGRhdGEpKSB7XG4gICAgICAgICAgICBsZXQgbWF0Y2hlcyA9IHRydWVcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIGluIHByb3BlcnR5UGF0dGVybilcbiAgICAgICAgICAgICAgICBpZiAoIShcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlQYXR0ZXJuW3Byb3BlcnR5TmFtZV0gJiZcbiAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBwcm9wZXJ0eVBhdHRlcm5bcHJvcGVydHlOYW1lXSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFJlZ0V4cChwcm9wZXJ0eVBhdHRlcm5bcHJvcGVydHlOYW1lXSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5UGF0dGVybltwcm9wZXJ0eU5hbWVdXG4gICAgICAgICAgICAgICAgICAgICkudGVzdCgoaXRlbSBhcyB1bmtub3duIGFzIE1hcHBpbmcpW3Byb3BlcnR5TmFtZV0pXG4gICAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChtYXRjaGVzKVxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGEgYXMgQXJyYXk8VD5cbn1cbi8qKlxuICogRGV0ZXJtaW5lcyBhbGwgb2JqZWN0cyB3aGljaCBleGlzdHMgaW4gXCJmaXJzdFwiIGFuZCBpbiBcInNlY29uZFwiLlxuICogT2JqZWN0IGtleSB3aGljaCB3aWxsIGJlIGNvbXBhcmVkIGFyZSBnaXZlbiBieSBcImtleXNcIi4gSWYgYW4gZW1wdHkgYXJyYXkgaXNcbiAqIGdpdmVuIGVhY2gga2V5IHdpbGwgYmUgY29tcGFyZWQuIElmIGFuIG9iamVjdCBpcyBnaXZlbiBjb3JyZXNwb25kaW5nIGluaXRpYWxcbiAqIGRhdGEga2V5IHdpbGwgYmUgbWFwcGVkIHRvIHJlZmVyZW5jZWQgbmV3IGRhdGEga2V5LlxuICogQHBhcmFtIGZpcnN0IC0gUmVmZXJlbmNlZCBkYXRhIHRvIGNoZWNrIGZvci5cbiAqIEBwYXJhbSBzZWNvbmQgLSBEYXRhIHRvIGNoZWNrIGZvciBleGlzdGVuY2UuXG4gKiBAcGFyYW0ga2V5cyAtIEtleXMgdG8gZGVmaW5lIGVxdWFsaXR5LlxuICogQHBhcmFtIHN0cmljdCAtIFRoZSBzdHJpY3QgcGFyYW1ldGVyIGluZGljYXRlcyB3aGV0aGVyIFwibnVsbFwiIGFuZFxuICogXCJ1bmRlZmluZWRcIiBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgZXF1YWwgKHRha2VzIG9ubHkgZWZmZWN0IGlmIGdpdmVuIGtleXNcbiAqIGFyZW4ndCBlbXB0eSkuXG4gKiBAcmV0dXJucyBEYXRhIHdoaWNoIGRvZXMgZXhpdCBpbiBnaXZlbiBpbml0aWFsIGRhdGEuXG4gKi9cbmV4cG9ydCBjb25zdCBpbnRlcnNlY3QgPSA8VCA9IHVua25vd24+KFxuICAgIGZpcnN0OiB1bmtub3duLFxuICAgIHNlY29uZDogdW5rbm93bixcbiAgICBrZXlzOiBBcnJheTxzdHJpbmc+IHwgTWFwcGluZzxudW1iZXIgfCBzdHJpbmc+ID0gW10sXG4gICAgc3RyaWN0ID0gdHJ1ZVxuKTogQXJyYXk8VD4gPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5pbmdEYXRhOiBBcnJheTxUPiA9IFtdXG5cbiAgICBzZWNvbmQgPSBtYWtlQXJyYXkoc2Vjb25kKVxuXG4gICAgY29uc3QgaW50ZXJzZWN0SXRlbSA9IChcbiAgICAgICAgZmlyc3RJdGVtOiBNYXBwaW5nPHVua25vd24+LFxuICAgICAgICBzZWNvbmRJdGVtOiBNYXBwaW5nPHVua25vd24+LFxuICAgICAgICBmaXJzdEtleTogc3RyaW5nIHwgbnVtYmVyLFxuICAgICAgICBzZWNvbmRLZXk6IHN0cmluZyB8IG51bWJlcixcbiAgICAgICAga2V5c0FyZUFuQXJyYXk6IGJvb2xlYW4sXG4gICAgICAgIGl0ZXJhdGVHaXZlbktleXM6IGJvb2xlYW5cbiAgICApOiBmYWxzZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICAgIGlmIChpdGVyYXRlR2l2ZW5LZXlzKSB7XG4gICAgICAgICAgICBpZiAoa2V5c0FyZUFuQXJyYXkpXG4gICAgICAgICAgICAgICAgZmlyc3RLZXkgPSBzZWNvbmRLZXlcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICBzZWNvbmRLZXkgPSBmaXJzdEtleVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHNlY29uZEl0ZW1bc2Vjb25kS2V5XSAhPT0gZmlyc3RJdGVtW2ZpcnN0S2V5XSAmJlxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgIHN0cmljdCB8fFxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIFtudWxsLCB1bmRlZmluZWRdLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kSXRlbVtzZWNvbmRLZXldIGFzIG51bGxcbiAgICAgICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgICAgICBbbnVsbCwgdW5kZWZpbmVkXS5pbmNsdWRlcyhmaXJzdEl0ZW1bZmlyc3RLZXldIGFzIG51bGwpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZpcnN0SXRlbSBvZiBtYWtlQXJyYXk8VD4oZmlyc3QpKVxuICAgICAgICBpZiAoaXNQbGFpbk9iamVjdChmaXJzdEl0ZW0pKVxuICAgICAgICAgICAgZm9yIChjb25zdCBzZWNvbmRJdGVtIG9mIChzZWNvbmQgYXMgQXJyYXk8VD4pKSB7XG4gICAgICAgICAgICAgICAgbGV0IGV4aXN0cyA9IHRydWVcbiAgICAgICAgICAgICAgICBsZXQgaXRlcmF0ZUdpdmVuS2V5czogYm9vbGVhblxuICAgICAgICAgICAgICAgIGNvbnN0IGtleXNBcmVBbkFycmF5OiBib29sZWFuID0gQXJyYXkuaXNBcnJheShrZXlzKVxuXG4gICAgICAgICAgICAgICAgaWYgKGlzUGxhaW5PYmplY3Qoa2V5cykgfHwga2V5c0FyZUFuQXJyYXkgJiYga2V5cy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdGVHaXZlbktleXMgPSB0cnVlXG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdGVHaXZlbktleXMgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICBrZXlzID0gZmlyc3RJdGVtIGFzIE1hcHBpbmc8bnVtYmVyIHwgc3RyaW5nPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludGVyc2VjdEl0ZW0oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZEl0ZW0gYXMgdW5rbm93biBhcyBNYXBwaW5nPHVua25vd24+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzQXJlQW5BcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRlR2l2ZW5LZXlzXG4gICAgICAgICAgICAgICAgICAgICAgICApID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0cyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGtleXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludGVyc2VjdEl0ZW0oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZEl0ZW0gYXMgdW5rbm93biBhcyBNYXBwaW5nPHVua25vd24+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzQXJlQW5BcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRlR2l2ZW5LZXlzXG4gICAgICAgICAgICAgICAgICAgICAgICApID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0cyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChleGlzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ0RhdGEucHVzaChmaXJzdEl0ZW0pXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoc2Vjb25kIGFzIEFycmF5PFQ+KS5pbmNsdWRlcyhmaXJzdEl0ZW0pKVxuICAgICAgICAgICAgY29udGFpbmluZ0RhdGEucHVzaChmaXJzdEl0ZW0pXG5cbiAgICByZXR1cm4gY29udGFpbmluZ0RhdGFcbn1cbi8qKlxuICogQ29udmVydHMgZ2l2ZW4gb2JqZWN0IGludG8gYW4gYXJyYXkuXG4gKiBAcGFyYW0gb2JqZWN0IC0gVGFyZ2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBHZW5lcmF0ZWQgYXJyYXkuXG4gKi9cbmV4cG9ydCBjb25zdCBtYWtlQXJyYXkgPSA8VCA9IHVua25vd24+KG9iamVjdDogdW5rbm93bik6IEFycmF5PFQ+ID0+IHtcbiAgICBjb25zdCByZXN1bHQ6IEFycmF5PHVua25vd24+ID0gW11cbiAgICBpZiAoIVtudWxsLCB1bmRlZmluZWRdLmluY2x1ZGVzKG9iamVjdCBhcyBudWxsKSlcbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKE9iamVjdChvYmplY3QpKSlcbiAgICAgICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICB0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJyA/IFtvYmplY3RdIDogb2JqZWN0IGFzIEFycmF5PFQ+XG4gICAgICAgICAgICApXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG9iamVjdClcblxuICAgIHJldHVybiByZXN1bHQgYXMgQXJyYXk8VD5cbn1cbi8qKlxuICogQ3JlYXRlcyBhIGxpc3Qgb2YgaXRlbXMgd2l0aGluIGdpdmVuIHJhbmdlLlxuICogQHBhcmFtIHJhbmdlIC0gQXJyYXkgb2YgbG93ZXIgYW5kIHVwcGVyIGJvdW5kcy4gSWYgb25seSBvbmUgdmFsdWUgaXMgZ2l2ZW5cbiAqIGxvd2VyIGJvdW5kIHdpbGwgYmUgYXNzdW1lZCB0byBiZSB6ZXJvLiBCb3RoIGludGVnZXJzIGhhdmUgdG8gYmUgcG9zaXRpdmVcbiAqIGFuZCB3aWxsIGJlIGNvbnRhaW5lZCBpbiB0aGUgcmVzdWx0aW5nIGFycmF5LiBJZiBtb3JlIHRoYW4gdHdvIG51bWJlcnMgYXJlXG4gKiBwcm92aWRlZCBnaXZlbiByYW5nZSB3aWxsIGJlIHJldHVybmVkLlxuICogQHBhcmFtIHN0ZXAgLSBTcGFjZSBiZXR3ZWVuIHR3byBjb25zZWN1dGl2ZSB2YWx1ZXMuXG4gKiBAcGFyYW0gaWdub3JlTGFzdFN0ZXAgLSBSZW1vdmVzIGxhc3Qgc3RlcC5cbiAqIEByZXR1cm5zIFByb2R1Y2VkIGFycmF5IG9mIGludGVnZXJzLlxuICovXG5leHBvcnQgY29uc3QgbWFrZVJhbmdlID0gKFxuICAgIHJhbmdlOiBudW1iZXIgfCBBcnJheTxudW1iZXI+IHwgW251bWJlcl0gfCBbbnVtYmVyLCBudW1iZXJdLFxuICAgIHN0ZXAgPSAxLFxuICAgIGlnbm9yZUxhc3RTdGVwID0gZmFsc2Vcbik6IEFycmF5PG51bWJlcj4gPT4ge1xuICAgIHJhbmdlID0gKFtdIGFzIEFycmF5PG51bWJlcj4pLmNvbmNhdChyYW5nZSlcblxuICAgIGxldCBpbmRleDogbnVtYmVyXG4gICAgbGV0IGhpZ2hlckJvdW5kOiBudW1iZXJcbiAgICBpZiAocmFuZ2UubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGluZGV4ID0gMFxuICAgICAgICBoaWdoZXJCb3VuZCA9IHBhcnNlSW50KFN0cmluZyhyYW5nZVswXSksIDEwKVxuICAgIH0gZWxzZSBpZiAocmFuZ2UubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGluZGV4ID0gcGFyc2VJbnQoU3RyaW5nKHJhbmdlWzBdKSwgMTApXG4gICAgICAgIGhpZ2hlckJvdW5kID0gcGFyc2VJbnQoU3RyaW5nKHJhbmdlWzFdKSwgMTApXG4gICAgfSBlbHNlXG4gICAgICAgIHJldHVybiByYW5nZVxuXG4gICAgaWYgKGhpZ2hlckJvdW5kIDwgaW5kZXgpXG4gICAgICAgIHJldHVybiBbXVxuXG4gICAgY29uc3QgcmVzdWx0ID0gW2luZGV4XVxuICAgIHdoaWxlIChpbmRleCA8PSBoaWdoZXJCb3VuZCAtIHN0ZXApIHtcbiAgICAgICAgaW5kZXggKz0gc3RlcFxuICAgICAgICBpZiAoIWlnbm9yZUxhc3RTdGVwIHx8IGluZGV4IDw9IGhpZ2hlckJvdW5kIC0gc3RlcClcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGluZGV4KVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbn1cbi8qKlxuICogTWVyZ2UgdGhlIGNvbnRlbnRzIG9mIHR3byBhcnJheXMgdG9nZXRoZXIgaW50byB0aGUgZmlyc3QgYXJyYXkuXG4gKiBAcGFyYW0gdGFyZ2V0IC0gVGFyZ2V0IGFycmF5LlxuICogQHBhcmFtIHNvdXJjZSAtIFNvdXJjZSBhcnJheS5cbiAqIEByZXR1cm5zIFRhcmdldCBhcnJheSB3aXRoIG1lcmdlZCBnaXZlbiBzb3VyY2Ugb25lLlxuICovXG5leHBvcnQgY29uc3QgbWVyZ2UgPSA8VCA9IHVua25vd24+KFxuICAgIHRhcmdldDogQXJyYXk8VD4sIHNvdXJjZTogQXJyYXk8VD5cbik6IEFycmF5PFQ+ID0+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc291cmNlKSlcbiAgICAgICAgc291cmNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoc291cmNlKSBhcyBBcnJheTxUPlxuXG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzb3VyY2UpXG4gICAgICAgIHRhcmdldC5wdXNoKHZhbHVlKVxuXG4gICAgcmV0dXJuIHRhcmdldFxufVxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBsaXN0IGlmIHBhZ2luYXRpb24gc3ltYm9scyB0byByZW5kZXIgYSBwYWdpbmF0aW9uIGZyb20uXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbmZpZ3VyZSBib3VuZHMgYW5kIGN1cnJlbnQgcGFnZSBvZiBwYWdpbmF0aW9uIHRvXG4gKiBkZXRlcm1pbmUuXG4gKiBAcGFyYW0gb3B0aW9ucy5ib3VuZGFyeUNvdW50IC0gSW5kaWNhdGVzIHdoZXJlIHRvIHN0YXJ0IHBhZ2luYXRpb24gd2l0aGluXG4gKiBnaXZlbiB0b3RhbCByYW5nZS5cbiAqIEBwYXJhbSBvcHRpb25zLmRpc2FibGVkIC0gSW5kaWNhdGVzIHdoZXRoZXIgdG8gZGlzYWJsZSBhbGwgaXRlbXMuXG4gKiBAcGFyYW0gb3B0aW9ucy5oaWRlTmV4dEJ1dHRvbiAtIEluZGljYXRlcyB3aGV0aGVyIHRvIHNob3cgYSBqdW1wIHRvIG5leHRcbiAqIGl0ZW0uXG4gKiBAcGFyYW0gb3B0aW9ucy5oaWRlUHJldkJ1dHRvbiAtIEluZGljYXRlcyB3aGV0aGVyIHRvIHNob3cgYSBqdW1wIHRvIHByZXZpb3VzXG4gKiBpdGVtLlxuICogQHBhcmFtIG9wdGlvbnMucGFnZSAtIEluZGljYXRlcyBjdXJyZW50IHZpc2libGUgcGFnZS5cbiAqIEBwYXJhbSBvcHRpb25zLnBhZ2VTaXplIC0gTnVtYmVyIG9mIGl0ZW1zIHBlciBwYWdlLlxuICogQHBhcmFtIG9wdGlvbnMuc2hvd0ZpcnN0QnV0dG9uIC0gSW5kaWNhdGVzIHdoZXRoZXIgdG8gc2hvdyBhIGp1bXAgdG8gZmlyc3RcbiAqIGl0ZW0uXG4gKiBAcGFyYW0gb3B0aW9ucy5zaG93TGFzdEJ1dHRvbiAtIEluZGljYXRlcyB3aGV0aGVyIHRvIHNob3cgYSBqdW1wIHRvIGxhc3RcbiAqIGl0ZW0uXG4gKiBAcGFyYW0gb3B0aW9ucy5zaWJsaW5nQ291bnQgLSBOdW1iZXIgb2Ygc2libGluZyBwYWdlIHN5bWJvbHMgbmV4dCB0byBjdXJyZW50XG4gKiBwYWdlIHN5bWJvbC5cbiAqIEBwYXJhbSBvcHRpb25zLnRvdGFsIC0gTnVtYmVyIG9mIGFsbCBpdGVtcyB0byBwYWdpbmF0ZS5cbiAqIEByZXR1cm5zIEEgbGlzdCBvZiBwYWdpbmF0aW9uIHN5bWJvbHMuXG4gKi9cbmV4cG9ydCBjb25zdCBwYWdpbmF0ZSA9IChcbiAgICBvcHRpb25zOiBQYXJ0aWFsPFBhZ2luYXRlT3B0aW9ucz4gPSB7fVxuKTogQXJyYXk8UGFnZT4gPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgICAgYm91bmRhcnlDb3VudCA9IDEsXG4gICAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICAgIGhpZGVOZXh0QnV0dG9uID0gZmFsc2UsXG4gICAgICAgIGhpZGVQcmV2QnV0dG9uID0gZmFsc2UsXG4gICAgICAgIHBhZ2UgPSAxLFxuICAgICAgICBwYWdlU2l6ZSA9IDUsXG4gICAgICAgIHNob3dGaXJzdEJ1dHRvbiA9IGZhbHNlLFxuICAgICAgICBzaG93TGFzdEJ1dHRvbiA9IGZhbHNlLFxuICAgICAgICBzaWJsaW5nQ291bnQgPSA0LFxuICAgICAgICB0b3RhbCA9IDEwMFxuICAgIH0gPSBvcHRpb25zXG5cbiAgICBjb25zdCBudW1iZXJPZlBhZ2VzOiBudW1iZXIgPVxuICAgIHR5cGVvZiBwYWdlU2l6ZSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHBhZ2VTaXplKSA/XG4gICAgICAgIE1hdGguY2VpbCh0b3RhbCAvIHBhZ2VTaXplKSA6XG4gICAgICAgIHRvdGFsXG5cbiAgICBjb25zdCBzdGFydFBhZ2VzOiBBcnJheTxudW1iZXI+ID1cbiAgICAgICAgbWFrZVJhbmdlKFsxLCBNYXRoLm1pbihib3VuZGFyeUNvdW50LCBudW1iZXJPZlBhZ2VzKV0pXG4gICAgY29uc3QgZW5kUGFnZXM6IEFycmF5PG51bWJlcj4gPSBtYWtlUmFuZ2UoW1xuICAgICAgICBNYXRoLm1heChudW1iZXJPZlBhZ2VzIC0gYm91bmRhcnlDb3VudCArIDEsIGJvdW5kYXJ5Q291bnQgKyAxKSxcbiAgICAgICAgbnVtYmVyT2ZQYWdlc1xuICAgIF0pXG5cbiAgICBjb25zdCBzaWJsaW5nc1N0YXJ0OiBudW1iZXIgPSBNYXRoLm1heChcbiAgICAgICAgTWF0aC5taW4oXG4gICAgICAgICAgICAvLyBMZWZ0IGJvdW5kYXJ5IGZvciBsb3dlciBwYWdlcy5cbiAgICAgICAgICAgIHBhZ2UgLSBzaWJsaW5nQ291bnQsXG4gICAgICAgICAgICAvLyBMb3dlciBib3VuZGFyeSBmb3IgaGlnaGVyIHBhZ2VzLlxuICAgICAgICAgICAgbnVtYmVyT2ZQYWdlcyAtIGJvdW5kYXJ5Q291bnQgLSBzaWJsaW5nQ291bnQgKiAyIC0gMVxuICAgICAgICApLFxuICAgICAgICAvLyBJZiBudW1iZXIgaXMgZ3JlYXRlciB0aGFuIG51bWJlciBvZiBcInN0YXJ0UGFnZXNcIi5cbiAgICAgICAgYm91bmRhcnlDb3VudCArIDJcbiAgICApXG5cbiAgICBjb25zdCBzaWJsaW5nc0VuZDogbnVtYmVyID0gTWF0aC5taW4oXG4gICAgICAgIE1hdGgubWF4KFxuICAgICAgICAgICAgLy8gUmlnaHQgYm91bmQgZm9yIGhpZ2hlciBwYWdlcy5cbiAgICAgICAgICAgIHBhZ2UgKyBzaWJsaW5nQ291bnQsXG4gICAgICAgICAgICAvLyBVcHBlciBib3VuZGFyeSBmb3IgbG93ZXIgcGFnZXMuXG4gICAgICAgICAgICBib3VuZGFyeUNvdW50ICsgc2libGluZ0NvdW50ICogMiArIDJcbiAgICAgICAgKSxcbiAgICAgICAgLy8gSWYgbnVtYmVyIGlzIGxlc3MgdGhhbiBudW1iZXIgb2YgXCJlbmRQYWdlc1wiLlxuICAgICAgICBlbmRQYWdlcy5sZW5ndGggPiAwID8gZW5kUGFnZXNbMF0gLSAyIDogbnVtYmVyT2ZQYWdlcyAtIDFcbiAgICApXG5cbiAgICAvKlxuICAgICAgICBTeW1ib2wgbGlzdCBvZiBpdGVtcyB0byByZW5kZXIgcmVwcmVzZW50IGFzIHBhZ2luYXRpb24uXG5cbiAgICAgICAgRXhhbXBsZSByZXN1bHQ6XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgJ2ZpcnN0JywgJ3ByZXZpb3VzJyxcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAnc3RhcnQtZWxsaXBzaXMnLFxuICAgICAgICAgICAgNCwgNSwgNixcbiAgICAgICAgICAgICdlbmQtZWxsaXBzaXMnLFxuICAgICAgICAgICAgMTAsXG4gICAgICAgICAgICAnbmV4dCcsICdsYXN0J1xuICAgICAgICBdXG4gICAgKi9cbiAgICByZXR1cm4gKFtcbiAgICAgICAgLi4uKHNob3dGaXJzdEJ1dHRvbiA/IFsnZmlyc3QnXSA6IFtdKSxcbiAgICAgICAgLi4uKGhpZGVQcmV2QnV0dG9uID8gW10gOiBbJ3ByZXZpb3VzJ10pLFxuICAgICAgICAuLi5zdGFydFBhZ2VzLFxuXG4gICAgICAgIC8vIFN0YXJ0IGVsbGlwc2lzXG4gICAgICAgIC4uLihcbiAgICAgICAgICAgIHNpYmxpbmdzU3RhcnQgPiBib3VuZGFyeUNvdW50ICsgMiA/XG4gICAgICAgICAgICAgICAgWydzdGFydC1lbGxpcHNpcyddIDpcbiAgICAgICAgICAgICAgICBib3VuZGFyeUNvdW50ICsgMSA8IG51bWJlck9mUGFnZXMgLSBib3VuZGFyeUNvdW50ID9cbiAgICAgICAgICAgICAgICAgICAgW2JvdW5kYXJ5Q291bnQgKyAxXSA6XG4gICAgICAgICAgICAgICAgICAgIFtdXG4gICAgICAgICksXG5cbiAgICAgICAgLy8gU2libGluZyBwYWdlc1xuICAgICAgICAuLi5tYWtlUmFuZ2UoW3NpYmxpbmdzU3RhcnQsIHNpYmxpbmdzRW5kXSksXG5cbiAgICAgICAgLy8gRW5kIGVsbGlwc2lzXG4gICAgICAgIC4uLihcbiAgICAgICAgICAgIHNpYmxpbmdzRW5kIDwgbnVtYmVyT2ZQYWdlcyAtIGJvdW5kYXJ5Q291bnQgLSAxID9cbiAgICAgICAgICAgICAgICBbJ2VuZC1lbGxpcHNpcyddIDpcbiAgICAgICAgICAgICAgICBudW1iZXJPZlBhZ2VzIC0gYm91bmRhcnlDb3VudCA+IGJvdW5kYXJ5Q291bnQgP1xuICAgICAgICAgICAgICAgICAgICBbbnVtYmVyT2ZQYWdlcyAtIGJvdW5kYXJ5Q291bnRdIDpcbiAgICAgICAgICAgICAgICAgICAgW11cbiAgICAgICAgKSxcblxuICAgICAgICAuLi5lbmRQYWdlcyxcbiAgICAgICAgLi4uKGhpZGVOZXh0QnV0dG9uID8gW10gOiBbJ25leHQnXSksXG4gICAgICAgIC4uLihzaG93TGFzdEJ1dHRvbiA/IFsnbGFzdCddIDogW10pXG4gICAgXSBhcyBBcnJheTxudW1iZXIgfCBQYWdlVHlwZT4pLm1hcCgoaXRlbTogbnVtYmVyIHwgUGFnZVR5cGUpOiBQYWdlID0+XG4gICAgICAgIHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJyA/XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgcGFnZTogaXRlbSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogaXRlbSA9PT0gcGFnZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAncGFnZSdcbiAgICAgICAgICAgIH0gOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc2FibGVkOlxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCB8fFxuICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmluZGV4T2YoJ2VsbGlwc2lzJykgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSA9PT0gJ25leHQnIHx8IGl0ZW0gPT09ICdsYXN0JyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UgPj0gbnVtYmVyT2ZQYWdlcyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UgPD0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0eXBlOiBpdGVtLFxuICAgICAgICAgICAgICAgIC4uLihpdGVtLmVuZHNXaXRoKCctZWxsaXBzaXMnKSA/XG4gICAgICAgICAgICAgICAgICAgIHt9IDpcbiAgICAgICAgICAgICAgICAgICAge3BhZ2U6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdDogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdDogbnVtYmVyT2ZQYWdlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1baXRlbSBhcyBzdHJpbmddID8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSA9PT0gJ25leHQnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4ocGFnZSArIDEsIG51bWJlck9mUGFnZXMpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogSXMgXCJwcmV2aW91c1wiIHR5cGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWF4KHBhZ2UgLSAxLCAxKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgIClcbn1cbi8qKlxuICogR2VuZXJhdGVzIGFsbCBwZXJtdXRhdGlvbnMgb2YgZ2l2ZW4gaXRlcmFibGUuXG4gKiBAcGFyYW0gZGF0YSAtIEFycmF5IGxpa2Ugb2JqZWN0LlxuICogQHJldHVybnMgQXJyYXkgb2YgcGVybXV0ZWQgYXJyYXlzLlxuICovXG5leHBvcnQgY29uc3QgcGVybXV0ZSA9IDxUID0gdW5rbm93bj4oZGF0YTogQXJyYXk8VD4pOiBBcnJheTxBcnJheTxUPj4gPT4ge1xuICAgIGNvbnN0IHJlc3VsdDogQXJyYXk8QXJyYXk8VD4+ID0gW11cblxuICAgIGNvbnN0IHBlcm11dGUgPSAoY3VycmVudERhdGE6IEFycmF5PFQ+LCBkYXRhVG9NaXhpbjogQXJyYXk8VD4gPSBbXSkgPT4ge1xuICAgICAgICBpZiAoY3VycmVudERhdGEubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmVzdWx0LnB1c2goZGF0YVRvTWl4aW4pXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjdXJyZW50RGF0YS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb3B5ID0gY3VycmVudERhdGEuc2xpY2UoKVxuICAgICAgICAgICAgICAgIHBlcm11dGUoY29weSwgZGF0YVRvTWl4aW4uY29uY2F0KGNvcHkuc3BsaWNlKGluZGV4LCAxKSkpXG4gICAgICAgICAgICB9XG4gICAgfVxuXG4gICAgcGVybXV0ZShkYXRhKVxuXG4gICAgcmV0dXJuIHJlc3VsdFxufVxuLyoqXG4gKiBHZW5lcmF0ZXMgYWxsIGxlbmd0aHMgcGVybXV0YXRpb25zIG9mIGdpdmVuIGl0ZXJhYmxlLlxuICogQHBhcmFtIGRhdGEgLSBBcnJheSBsaWtlIG9iamVjdC5cbiAqIEBwYXJhbSBtaW5pbWFsU3Vic2V0TGVuZ3RoIC0gRGVmaW5lcyBob3cgbG9uZyB0aGUgbWluaW1hbCBzdWJzZXQgbGVuZ3RoXG4gKiBzaG91bGQgYmUuXG4gKiBAcmV0dXJucyBBcnJheSBvZiBwZXJtdXRlZCBhcnJheXMuXG4gKi9cbmV4cG9ydCBjb25zdCBwZXJtdXRlTGVuZ3RoID0gPFQgPSB1bmtub3duPihcbiAgICBkYXRhOiBBcnJheTxUPiwgbWluaW1hbFN1YnNldExlbmd0aCA9IDFcbik6IEFycmF5PEFycmF5PFQ+PiA9PiB7XG4gICAgY29uc3QgcmVzdWx0OiBBcnJheTxBcnJheTxUPj4gPSBbXVxuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuXG4gICAgY29uc3QgZ2VuZXJhdGUgPSAoXG4gICAgICAgIGluZGV4OiBudW1iZXIsIHNvdXJjZTogQXJyYXk8VD4sIHJlc3Q6IEFycmF5PFQ+XG4gICAgKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKHJlc3QubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSByZXN0XG5cbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChcbiAgICAgICAgICAgIGxldCBzb3VyY2VJbmRleCA9IDA7IHNvdXJjZUluZGV4IDwgc291cmNlLmxlbmd0aDsgc291cmNlSW5kZXgrK1xuICAgICAgICApXG4gICAgICAgICAgICBnZW5lcmF0ZShcbiAgICAgICAgICAgICAgICBpbmRleCAtIDEsXG4gICAgICAgICAgICAgICAgc291cmNlLnNsaWNlKHNvdXJjZUluZGV4ICsgMSksXG4gICAgICAgICAgICAgICAgcmVzdC5jb25jYXQoW3NvdXJjZVtzb3VyY2VJbmRleF1dKVxuICAgICAgICAgICAgKVxuICAgIH1cblxuICAgIGZvciAoXG4gICAgICAgIGxldCBpbmRleDogbnVtYmVyID0gbWluaW1hbFN1YnNldExlbmd0aDtcbiAgICAgICAgaW5kZXggPCBkYXRhLmxlbmd0aDtcbiAgICAgICAgaW5kZXgrK1xuICAgIClcbiAgICAgICAgZ2VuZXJhdGUoaW5kZXgsIGRhdGEsIFtdKVxuXG4gICAgcmVzdWx0LnB1c2goZGF0YSlcblxuICAgIHJldHVybiByZXN1bHRcbn1cbi8qKlxuICogU3VtcyB1cCBnaXZlbiBwcm9wZXJ0eSBvZiBnaXZlbiBpdGVtIGxpc3QuXG4gKiBAcGFyYW0gZGF0YSAtIFRoZSBvYmplY3RzIHdpdGggc3BlY2lmaWVkIHByb3BlcnR5IHRvIHN1bSB1cC5cbiAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgLSBQcm9wZXJ0eSBuYW1lIHRvIHN1bSB1cCBpdHMgdmFsdWUuXG4gKiBAcmV0dXJucyBUaGUgYWdncmVnYXRlZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHN1bVVwUHJvcGVydHkgPSAoZGF0YTogdW5rbm93biwgcHJvcGVydHlOYW1lOiBzdHJpbmcpOiBudW1iZXIgPT4ge1xuICAgIGxldCByZXN1bHQgPSAwXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSAmJiBkYXRhLmxlbmd0aClcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGEpXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGl0ZW0sIHByb3BlcnR5TmFtZSkpXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgICAgICAgICgoaXRlbSBhcyBNYXBwaW5nKVtwcm9wZXJ0eU5hbWVdIHx8IDApIGFzXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmtub3duIGFzXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdcbiAgICAgICAgICAgICAgICApXG5cbiAgICByZXR1cm4gcmVzdWx0XG59XG4vKipcbiAqIFJlbW92ZXMgZ2l2ZW4gdGFyZ2V0IG9uIGdpdmVuIGxpc3QuXG4gKiBAcGFyYW0gbGlzdCAtIEFycmF5IHRvIHNwbGljZS5cbiAqIEBwYXJhbSB0YXJnZXQgLSBUYXJnZXQgdG8gcmVtb3ZlIGZyb20gZ2l2ZW4gbGlzdC5cbiAqIEBwYXJhbSBzdHJpY3QgLSBJbmRpY2F0ZXMgd2hldGhlciB0byBmaXJlIGFuIGV4Y2VwdGlvbiBpZiBnaXZlbiB0YXJnZXRcbiAqIGRvZXNuJ3QgZXhpc3QgZ2l2ZW4gbGlzdC5cbiAqIEByZXR1cm5zIEl0ZW0gd2l0aCB0aGUgYXBwZW5kZWQgdGFyZ2V0LlxuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlQXJyYXlJdGVtID0gPFQgPSB1bmtub3duPihcbiAgICBsaXN0OiBBcnJheTxUPiwgdGFyZ2V0OiBULCBzdHJpY3QgPSBmYWxzZVxuKTogQXJyYXk8VD4gPT4ge1xuICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSBsaXN0LmluZGV4T2YodGFyZ2V0KVxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgaWYgKHN0cmljdClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgR2l2ZW4gdGFyZ2V0IGRvZXNuJ3QgZXhpc3RzIGluIGdpdmVuIGxpc3QuYClcbiAgICB9IGVsc2VcbiAgICAgICAgbGlzdC5zcGxpY2UoaW5kZXgsIDEpXG5cbiAgICByZXR1cm4gbGlzdFxufVxuLyoqXG4gKiBTb3J0cyBnaXZlbiBvYmplY3Qgb2YgZGVwZW5kZW5jaWVzIGluIGEgdG9wb2xvZ2ljYWwgb3JkZXIuXG4gKiBAcGFyYW0gaXRlbXMgLSBJdGVtcyB0byBzb3J0LlxuICogQHJldHVybnMgU29ydGVkIGFycmF5IG9mIGdpdmVuIGl0ZW1zIHJlc3BlY3RpbmcgdGhlaXIgZGVwZW5kZW5jaWVzLlxuICovXG5leHBvcnQgY29uc3Qgc29ydFRvcG9sb2dpY2FsID0gKFxuICAgIGl0ZW1zOiBNYXBwaW5nPEFycmF5PHN0cmluZz4gfCBzdHJpbmc+XG4pOiBBcnJheTxzdHJpbmc+ID0+IHtcbiAgICBjb25zdCBlZGdlczogQXJyYXk8QXJyYXk8c3RyaW5nPj4gPSBbXVxuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGl0ZW1zKSkge1xuICAgICAgICBpdGVtc1tuYW1lXSA9IChbXSBhcyBBcnJheTxzdHJpbmc+KS5jb25jYXQodmFsdWUpXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgZm9yIChjb25zdCBkZXBlbmRlbmN5TmFtZSBvZiBtYWtlQXJyYXk8c3RyaW5nPih2YWx1ZSkpXG4gICAgICAgICAgICAgICAgZWRnZXMucHVzaChbbmFtZSwgZGVwZW5kZW5jeU5hbWVdKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBlZGdlcy5wdXNoKFtuYW1lXSlcbiAgICB9XG5cbiAgICBjb25zdCBub2RlczogQXJyYXk8bnVsbCB8IHN0cmluZz4gPSBbXVxuICAgIC8vIEFjY3VtdWxhdGUgdW5pcXVlIG5vZGVzIGludG8gYSBsYXJnZSBsaXN0LlxuICAgIGZvciAoY29uc3QgZWRnZSBvZiBlZGdlcylcbiAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIGVkZ2UpXG4gICAgICAgICAgICBpZiAoIW5vZGVzLmluY2x1ZGVzKG5vZGUpKVxuICAgICAgICAgICAgICAgIG5vZGVzLnB1c2gobm9kZSlcblxuICAgIGNvbnN0IHNvcnRlZDogQXJyYXk8c3RyaW5nPiA9IFtdXG4gICAgLy8gRGVmaW5lIGEgdmlzaXRvciBmdW5jdGlvbiB0aGF0IHJlY3Vyc2l2ZWx5IHRyYXZlcnNlcyBkZXBlbmRlbmNpZXMuXG4gICAgY29uc3QgdmlzaXQgPSAobm9kZTogc3RyaW5nLCBwcmVkZWNlc3NvcnM6IEFycmF5PHN0cmluZz4pOiB2b2lkID0+IHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgYSBub2RlIGlzIGRlcGVuZGVudCBvZiBpdHNlbGYuXG4gICAgICAgIGlmIChwcmVkZWNlc3NvcnMubGVuZ3RoICE9PSAwICYmIHByZWRlY2Vzc29ycy5pbmNsdWRlcyhub2RlKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgQ3ljbGljIGRlcGVuZGVuY3kgZm91bmQuIFwiJHtub2RlfVwiIGlzIGRlcGVuZGVudCBvZiBgICtcbiAgICAgICAgICAgICAgICAnaXRzZWxmLlxcbicgK1xuICAgICAgICAgICAgICAgIGBEZXBlbmRlbmN5IGNoYWluOiBcIiR7cHJlZGVjZXNzb3JzLmpvaW4oJ1wiIC0+IFwiJyl9XCIgPT4gXCJgICtcbiAgICAgICAgICAgICAgICBgJHtub2RlfVwiLmBcbiAgICAgICAgICAgIClcblxuICAgICAgICBjb25zdCBpbmRleCA9IG5vZGVzLmluZGV4T2Yobm9kZSlcbiAgICAgICAgLy8gSWYgdGhlIG5vZGUgc3RpbGwgZXhpc3RzLCB0cmF2ZXJzZSBpdHMgZGVwZW5kZW5jaWVzLlxuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBsZXQgY29weTogQXJyYXk8c3RyaW5nPiB8IHVuZGVmaW5lZFxuICAgICAgICAgICAgLy8gTWFyayB0aGUgbm9kZSB0byBleGNsdWRlIGl0IGZyb20gZnV0dXJlIGl0ZXJhdGlvbnMuXG4gICAgICAgICAgICBub2Rlc1tpbmRleF0gPSBudWxsXG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgIExvb3AgdGhyb3VnaCBhbGwgZWRnZXMgYW5kIGZvbGxvdyBkZXBlbmRlbmNpZXMgb2YgdGhlIGN1cnJlbnRcbiAgICAgICAgICAgICAgICBub2RlXG4gICAgICAgICAgICAqL1xuICAgICAgICAgICAgZm9yIChjb25zdCBlZGdlIG9mIGVkZ2VzKVxuICAgICAgICAgICAgICAgIGlmIChlZGdlWzBdID09PSBub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICBMYXppbHkgY3JlYXRlIGEgY29weSBvZiBwcmVkZWNlc3NvcnMgd2l0aCB0aGUgY3VycmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSBjb25jYXRlbmF0ZWQgb250byBpdC5cbiAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgY29weSA9IGNvcHkgfHwgcHJlZGVjZXNzb3JzLmNvbmNhdChbbm9kZV0pXG4gICAgICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIHRvIG5vZGUgZGVwZW5kZW5jaWVzLlxuICAgICAgICAgICAgICAgICAgICB2aXNpdChlZGdlWzFdLCBjb3B5KVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc29ydGVkLnB1c2gobm9kZSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBub2Rlcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29uc3Qgbm9kZTogbnVsbCB8IHN0cmluZyA9IG5vZGVzW2luZGV4XVxuICAgICAgICAvLyBJZ25vcmUgbm9kZXMgdGhhdCBoYXZlIGJlZW4gZXhjbHVkZWQuXG4gICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICAvLyBNYXJrIHRoZSBub2RlIHRvIGV4Y2x1ZGUgaXQgZnJvbSBmdXR1cmUgaXRlcmF0aW9ucy5cbiAgICAgICAgICAgIG5vZGVzW2luZGV4XSA9IG51bGxcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgTG9vcCB0aHJvdWdoIGFsbCBlZGdlcyBhbmQgZm9sbG93IGRlcGVuZGVuY2llcyBvZiB0aGUgY3VycmVudFxuICAgICAgICAgICAgICAgIG5vZGUuXG4gICAgICAgICAgICAqL1xuICAgICAgICAgICAgZm9yIChjb25zdCBlZGdlIG9mIGVkZ2VzKVxuICAgICAgICAgICAgICAgIGlmIChlZGdlWzBdID09PSBub2RlKVxuICAgICAgICAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSB0cmF2ZXJzZSB0byBub2RlIGRlcGVuZGVuY2llcy5cbiAgICAgICAgICAgICAgICAgICAgdmlzaXQoZWRnZVsxXSwgW25vZGVdKVxuXG4gICAgICAgICAgICBzb3J0ZWQucHVzaChub2RlKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvcnRlZFxufVxuLyoqXG4gKiBNYWtlcyBhbGwgdmFsdWVzIGluIGdpdmVuIGl0ZXJhYmxlIHVuaXF1ZSBieSByZW1vdmluZyBkdXBsaWNhdGVzIChUaGUgZmlyc3RcbiAqIG9jY3VycmVuY2VzIHdpbGwgYmUgbGVmdCkuXG4gKiBAcGFyYW0gZGF0YSAtIEFycmF5IGxpa2Ugb2JqZWN0LlxuICogQHJldHVybnMgU2xpY2VkIHZlcnNpb24gb2YgZ2l2ZW4gb2JqZWN0LlxuICovXG5leHBvcnQgY29uc3QgdW5pcXVlID0gPFQgPSB1bmtub3duPihkYXRhOiBBcnJheTxUPik6IEFycmF5PFQ+ID0+IHtcbiAgICBjb25zdCByZXN1bHQ6IEFycmF5PFQ+ID0gW11cblxuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgbWFrZUFycmF5KGRhdGEpKVxuICAgICAgICBpZiAoIXJlc3VsdC5pbmNsdWRlcyh2YWx1ZSBhcyBUKSlcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbHVlIGFzIFQpXG5cbiAgICByZXR1cm4gcmVzdWx0XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWJBO0FBQUE7QUFnQkEsU0FBUSxXQUFXLEVBQUUsYUFBYTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU0sd0JBQXdCLEdBQUcsQ0FDcEMsSUFBNkIsRUFDN0IsWUFBb0IsRUFDcEIsWUFBZSxHQUFHLEVBQWtCLEtBQ2hDO0VBQ0osSUFBSSxNQUFTLEdBQUcsWUFBWTtFQUU1QixJQUNJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQ25CLElBQUksQ0FBQyxNQUFNLElBQ1gsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsRUFDN0Q7SUFDRSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBTTtJQUVuQyxLQUFLLE1BQU0sSUFBSSxJQUFJLFNBQVMsQ0FBbUIsSUFBSSxDQUFDLEVBQ2hELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLE1BQU0sRUFDN0IsT0FBTyxZQUFZO0VBQy9CO0VBRUEsT0FBTyxNQUFNO0FBQ2pCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLGdCQUFnQixHQUFHLENBRTlCLElBQWMsRUFBRSxhQUFxQyxHQUFHLEVBQUUsS0FBZTtFQUN2RSxNQUFNLE1BQWdCLEdBQUcsRUFBRTtFQUUzQixLQUFLLE1BQU0sSUFBSSxJQUFJLFNBQVMsQ0FBSSxJQUFJLENBQUMsRUFBRTtJQUNuQyxJQUFJLEtBQUssR0FBRyxJQUFJO0lBRWhCLEtBQUssTUFBTSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUNwRCxJQUNJLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFhLENBQUMsS0FFMUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUNyQixTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUNsRCxFQUNIO01BQ0UsS0FBSyxHQUFHLEtBQUs7TUFDYjtJQUNKO0lBRUosSUFBSSxDQUFDLEtBQUssRUFDTixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztFQUN6QjtFQUVBLE9BQU8sTUFBTTtBQUNqQixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLE9BQU8sR0FBRyxDQUNuQixJQUFhLEVBQUUsYUFBNEIsS0FDaEM7RUFDWCxNQUFNLE1BQWdCLEdBQUcsRUFBRTtFQUUzQixLQUFLLE1BQU0sSUFBSSxJQUFJLFNBQVMsQ0FBbUIsSUFBSSxDQUFDLEVBQUU7SUFDbEQsTUFBTSxPQUFVLEdBQUcsQ0FBQyxDQUFNO0lBQzFCLEtBQUssTUFBTSxZQUFZLElBQUksU0FBUyxDQUNoQyxhQUNKLENBQUMsRUFDRyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEVBQ3hELE9BQU8sQ0FBQyxZQUFZLENBQVksR0FDNUIsSUFBSSxDQUFDLFlBQVksQ0FBZTtJQUU1QyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztFQUN4QjtFQUVBLE9BQU8sTUFBTTtBQUNqQixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLGdCQUFnQixHQUFHLENBQzVCLElBQWEsRUFBRSxpQkFBa0MsS0FDakM7RUFDaEIsSUFBSSxDQUFDLGlCQUFpQixFQUNsQixPQUFPLFNBQVMsQ0FBUyxJQUFJLENBQUM7RUFFbEMsTUFBTSxNQUFxQixHQUFHLEVBQUU7RUFDaEMsS0FBSyxNQUFNLEtBQUssSUFBSSxTQUFTLENBQVMsSUFBSSxDQUFDLEVBQ3ZDLElBQ0ksQ0FBRSxPQUFPLGlCQUFpQixLQUFLLFFBQVEsR0FDbkMsSUFBSSxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FDN0IsaUJBQWlCLEVBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsRUFFYixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUUxQixPQUFPLE1BQU07QUFDakIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTSx1QkFBdUIsR0FBRyxDQUVyQyxJQUFhLEVBQUUsWUFBb0IsS0FBZTtFQUNoRCxJQUFJLElBQUksSUFBSSxZQUFZLEVBQUU7SUFDdEIsTUFBTSxNQUFnQixHQUFHLEVBQUU7SUFFM0IsS0FBSyxNQUFNLElBQUksSUFBSSxTQUFTLENBQUksSUFBSSxDQUFDLEVBQUU7TUFDbkMsSUFBSSxNQUFNLEdBQUcsS0FBSztNQUNsQixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFDM0MsSUFDSSxHQUFHLEtBQUssWUFBWSxJQUNwQixDQUFDLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFhLENBQUMsRUFDNUM7UUFDRSxNQUFNLEdBQUcsSUFBSTtRQUNiO01BQ0o7TUFFSixJQUFJLE1BQU0sRUFDTixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUN6QjtJQUVBLE9BQU8sTUFBTTtFQUNqQjtFQUVBLE9BQU8sSUFBSTtBQUNmLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU0sd0JBQXdCLEdBQUcsQ0FDcEMsSUFBYSxFQUFFLGVBQXlDLEtBQzdDO0VBQ1gsSUFBSSxJQUFJLEVBQUU7SUFDTixNQUFNLE1BQWdCLEdBQUcsRUFBRTtJQUUzQixLQUFLLE1BQU0sSUFBSSxJQUFJLFNBQVMsQ0FBSSxJQUFJLENBQUMsRUFBRTtNQUNuQyxJQUFJLE9BQU8sR0FBRyxJQUFJO01BQ2xCLEtBQUssTUFBTSxZQUFZLElBQUksZUFBZSxFQUN0QyxJQUFJLEVBQ0EsZUFBZSxDQUFDLFlBQVksQ0FBQyxJQUM3QixDQUNLLE9BQU8sZUFBZSxDQUFDLFlBQVksQ0FBQyxLQUNqQyxRQUFRLEdBRVIsSUFBSSxNQUFNLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQ3pDLGVBQWUsQ0FBQyxZQUFZLENBQUMsRUFDbkMsSUFBSSxDQUFFLElBQUksQ0FBd0IsWUFBWSxDQUFDLENBQUMsQ0FDckQsRUFBRTtRQUNDLE9BQU8sR0FBRyxLQUFLO1FBQ2Y7TUFDSjtNQUVKLElBQUksT0FBTyxFQUNQLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3pCO0lBRUEsT0FBTyxNQUFNO0VBQ2pCO0VBRUEsT0FBTyxJQUFJO0FBQ2YsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLFNBQVMsR0FBRyxDQUNyQixLQUFjLEVBQ2QsTUFBZSxFQUNmLElBQThDLEdBQUcsRUFBRSxFQUNuRCxNQUFNLEdBQUcsSUFBSSxLQUNGO0VBQ1gsTUFBTSxjQUF3QixHQUFHLEVBQUU7RUFFbkMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7RUFFMUIsTUFBTSxhQUFhLEdBQUcsQ0FDbEIsU0FBMkIsRUFDM0IsVUFBNEIsRUFDNUIsUUFBeUIsRUFDekIsU0FBMEIsRUFDMUIsY0FBdUIsRUFDdkIsZ0JBQXlCLEtBQ0w7SUFDcEIsSUFBSSxnQkFBZ0IsRUFBRTtNQUNsQixJQUFJLGNBQWMsRUFDZCxRQUFRLEdBQUcsU0FBUztJQUM1QixDQUFDLE1BQ0csU0FBUyxHQUFHLFFBQVE7SUFFeEIsSUFDSSxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUV6QyxNQUFNLElBQ04sRUFDSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQ3RCLFVBQVUsQ0FBQyxTQUFTLENBQ3hCLENBQUMsSUFDRCxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBUyxDQUFDLENBQzFELENBQ0osRUFFRCxPQUFPLEtBQUs7RUFDcEIsQ0FBQztFQUVELEtBQUssTUFBTSxTQUFTLElBQUksU0FBUyxDQUFJLEtBQUssQ0FBQyxFQUN2QyxJQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFDeEIsS0FBSyxNQUFNLFVBQVUsSUFBSyxNQUFNLEVBQWU7SUFDM0MsSUFBSSxNQUFNLEdBQUcsSUFBSTtJQUNqQixJQUFJLGdCQUF5QjtJQUM3QixNQUFNLGNBQXVCLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFFbkQsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksY0FBYyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQ3BELGdCQUFnQixHQUFHLElBQUksTUFDdEI7TUFDRCxnQkFBZ0IsR0FBRyxLQUFLO01BQ3hCLElBQUksR0FBRyxTQUFxQztJQUNoRDtJQUVBLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtNQUNyQixJQUFJLEtBQUssR0FBRyxDQUFDO01BQ2IsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7UUFDcEIsSUFBSSxhQUFhLENBQ2IsU0FBUyxFQUNULFVBQVUsRUFDVixLQUFLLEVBQ0wsR0FBRyxFQUNILGNBQWMsRUFDZCxnQkFDSixDQUFDLEtBQUssS0FBSyxFQUFFO1VBQ1QsTUFBTSxHQUFHLEtBQUs7VUFDZDtRQUNKO1FBRUEsS0FBSyxJQUFJLENBQUM7TUFDZDtJQUNKLENBQUMsTUFDRyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFDM0MsSUFBSSxhQUFhLENBQ2IsU0FBUyxFQUNULFVBQVUsRUFDVixHQUFHLEVBQ0gsS0FBSyxFQUNMLGNBQWMsRUFDZCxnQkFDSixDQUFDLEtBQUssS0FBSyxFQUFFO01BQ1QsTUFBTSxHQUFHLEtBQUs7TUFDZDtJQUNKO0lBRVIsSUFBSSxNQUFNLEVBQUU7TUFDUixjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztNQUM5QjtJQUNKO0VBQ0osQ0FBQyxNQUNBLElBQUssTUFBTSxDQUFjLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFDN0MsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7RUFFdEMsT0FBTyxjQUFjO0FBQ3pCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLFNBQVMsR0FBaUIsTUFBZSxJQUFlO0VBQ2pFLE1BQU0sTUFBc0IsR0FBRyxFQUFFO0VBQ2pDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBYyxDQUFDLEVBQzNDLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUMzQixLQUFLLENBQ0QsTUFBTSxFQUNOLE9BQU8sTUFBTSxLQUFLLFFBQVEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQzVDLENBQUMsTUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztFQUUzQixPQUFPLE1BQU07QUFDakIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLFNBQVMsR0FBRyxDQUNyQixLQUEyRCxFQUMzRCxJQUFJLEdBQUcsQ0FBQyxFQUNSLGNBQWMsR0FBRyxLQUFLLEtBQ047RUFDaEIsS0FBSyxHQUFJLEVBQUUsQ0FBbUIsTUFBTSxDQUFDLEtBQUssQ0FBQztFQUUzQyxJQUFJLEtBQWE7RUFDakIsSUFBSSxXQUFtQjtFQUN2QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0lBQ3BCLEtBQUssR0FBRyxDQUFDO0lBQ1QsV0FBVyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ2hELENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0lBQzNCLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUN0QyxXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDaEQsQ0FBQyxNQUNHLE9BQU8sS0FBSztFQUVoQixJQUFJLFdBQVcsR0FBRyxLQUFLLEVBQ25CLE9BQU8sRUFBRTtFQUViLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDO0VBQ3RCLE9BQU8sS0FBSyxJQUFJLFdBQVcsR0FBRyxJQUFJLEVBQUU7SUFDaEMsS0FBSyxJQUFJLElBQUk7SUFDYixJQUFJLENBQUMsY0FBYyxJQUFJLEtBQUssSUFBSSxXQUFXLEdBQUcsSUFBSSxFQUM5QyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUMxQjtFQUVBLE9BQU8sTUFBTTtBQUNqQixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLEtBQUssR0FBRyxDQUNqQixNQUFnQixFQUFFLE1BQWdCLEtBQ3ZCO0VBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQ3RCLE1BQU0sR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFhO0VBRTNELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztFQUV0QixPQUFPLE1BQU07QUFDakIsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLFFBQVEsR0FBRyxDQUNwQixPQUFpQyxHQUFHLENBQUMsQ0FBQyxLQUN4QjtFQUNkLE1BQU07SUFDRixhQUFhLEdBQUcsQ0FBQztJQUNqQixRQUFRLEdBQUcsS0FBSztJQUNoQixjQUFjLEdBQUcsS0FBSztJQUN0QixjQUFjLEdBQUcsS0FBSztJQUN0QixJQUFJLEdBQUcsQ0FBQztJQUNSLFFBQVEsR0FBRyxDQUFDO0lBQ1osZUFBZSxHQUFHLEtBQUs7SUFDdkIsY0FBYyxHQUFHLEtBQUs7SUFDdEIsWUFBWSxHQUFHLENBQUM7SUFDaEIsS0FBSyxHQUFHO0VBQ1osQ0FBQyxHQUFHLE9BQU87RUFFWCxNQUFNLGFBQXFCLEdBQzNCLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQzNCLEtBQUs7RUFFVCxNQUFNLFVBQXlCLEdBQzNCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0VBQzFELE1BQU0sUUFBdUIsR0FBRyxTQUFTLENBQUMsQ0FDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEdBQUcsYUFBYSxHQUFHLENBQUMsRUFBRSxhQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQzlELGFBQWEsQ0FDaEIsQ0FBQztFQUVGLE1BQU0sYUFBcUIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUNsQyxJQUFJLENBQUMsR0FBRztFQUNKO0VBQ0EsSUFBSSxHQUFHLFlBQVk7RUFDbkI7RUFDQSxhQUFhLEdBQUcsYUFBYSxHQUFHLFlBQVksR0FBRyxDQUFDLEdBQUcsQ0FDdkQsQ0FBQztFQUNEO0VBQ0EsYUFBYSxHQUFHLENBQ3BCLENBQUM7RUFFRCxNQUFNLFdBQW1CLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDaEMsSUFBSSxDQUFDLEdBQUc7RUFDSjtFQUNBLElBQUksR0FBRyxZQUFZO0VBQ25CO0VBQ0EsYUFBYSxHQUFHLFlBQVksR0FBRyxDQUFDLEdBQUcsQ0FDdkMsQ0FBQztFQUNEO0VBQ0EsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhLEdBQUcsQ0FDNUQsQ0FBQzs7RUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUdJLE9BQVEsQ0FDSixJQUFJLGVBQWUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUNyQyxJQUFJLGNBQWMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUN2QyxHQUFHLFVBQVU7RUFFYjtFQUNBLElBQ0ksYUFBYSxHQUFHLGFBQWEsR0FBRyxDQUFDLEdBQzdCLENBQUMsZ0JBQWdCLENBQUMsR0FDbEIsYUFBYSxHQUFHLENBQUMsR0FBRyxhQUFhLEdBQUcsYUFBYSxHQUM3QyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsR0FDbkIsRUFBRSxDQUNiO0VBRUQ7RUFDQSxHQUFHLFNBQVMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQztFQUUxQztFQUNBLElBQ0ksV0FBVyxHQUFHLGFBQWEsR0FBRyxhQUFhLEdBQUcsQ0FBQyxHQUMzQyxDQUFDLGNBQWMsQ0FBQyxHQUNoQixhQUFhLEdBQUcsYUFBYSxHQUFHLGFBQWEsR0FDekMsQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDLEdBQy9CLEVBQUUsQ0FDYixFQUVELEdBQUcsUUFBUSxFQUNYLElBQUksY0FBYyxHQUFHLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQ25DLElBQUksY0FBYyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQ3RDLENBQThCLEdBQUcsQ0FBRSxJQUF1QixJQUN2RCxPQUFPLElBQUksS0FBSyxRQUFRLEdBQ3BCO0lBQ0ksUUFBUTtJQUNSLElBQUksRUFBRSxJQUFJO0lBQ1YsUUFBUSxFQUFFLElBQUksS0FBSyxJQUFJO0lBQ3ZCLElBQUksRUFBRTtFQUNWLENBQUMsR0FDRDtJQUNJLFFBQVEsRUFDSixRQUFRLElBRUosSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsS0FFM0IsSUFBSSxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssTUFBTSxHQUM5QixJQUFJLElBQUksYUFBYSxHQUNyQixJQUFJLElBQUksQ0FBQyxDQUVwQjtJQUNMLFFBQVEsRUFBRSxLQUFLO0lBQ2YsSUFBSSxFQUFFLElBQUk7SUFDVixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQzFCLENBQUMsQ0FBQyxHQUNGO01BQUMsSUFBSSxFQUNHO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLEVBQUU7TUFDVixDQUFDLENBQUMsSUFBSSxDQUFXLElBQ2pCLElBQUksS0FBSyxNQUFNLEdBQ1gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLGFBQWEsQ0FBQztNQUNqQztNQUNBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2hDLENBQUM7RUFFVCxDQUNSLENBQUM7QUFDTCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTSxPQUFPLEdBQWlCLElBQWMsSUFBc0I7RUFDckUsTUFBTSxNQUF1QixHQUFHLEVBQUU7RUFFbEMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxXQUFxQixFQUFFLFdBQXFCLEdBQUcsRUFBRSxLQUFLO0lBQ25FLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BRXhCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO01BQ3JELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztNQUNoQyxPQUFPLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RDtFQUNSLENBQUM7RUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDO0VBRWIsT0FBTyxNQUFNO0FBQ2pCLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTSxhQUFhLEdBQUcsQ0FDekIsSUFBYyxFQUFFLG1CQUFtQixHQUFHLENBQUMsS0FDckI7RUFDbEIsTUFBTSxNQUF1QixHQUFHLEVBQUU7RUFDbEMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFDakIsT0FBTyxNQUFNO0VBRWpCLE1BQU0sUUFBUSxHQUFHLENBQ2IsS0FBYSxFQUFFLE1BQWdCLEVBQUUsSUFBYyxLQUN4QztJQUNQLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtNQUNiLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ2YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJO01BRWhDO0lBQ0o7SUFFQSxLQUNJLElBQUksV0FBVyxHQUFHLENBQUMsRUFBRSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsRUFFL0QsUUFBUSxDQUNKLEtBQUssR0FBRyxDQUFDLEVBQ1QsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FDckMsQ0FBQztFQUNULENBQUM7RUFFRCxLQUNJLElBQUksS0FBYSxHQUFHLG1CQUFtQixFQUN2QyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFDbkIsS0FBSyxFQUFFLEVBRVAsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO0VBRTdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0VBRWpCLE9BQU8sTUFBTTtBQUNqQixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQWEsRUFBRSxZQUFvQixLQUFhO0VBQzFFLElBQUksTUFBTSxHQUFHLENBQUM7RUFFZCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFDbEMsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLEVBQ25CLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsRUFDeEQsTUFBTSxJQUFJLFVBQVUsQ0FDZCxJQUFJLENBQWEsWUFBWSxDQUFDLElBQUksQ0FHeEMsQ0FBQztFQUViLE9BQU8sTUFBTTtBQUNqQixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sTUFBTSxlQUFlLEdBQUcsQ0FDM0IsSUFBYyxFQUFFLE1BQVMsRUFBRSxNQUFNLEdBQUcsS0FBSyxLQUM5QjtFQUNYLE1BQU0sS0FBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0VBQzFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO0lBQ2QsSUFBSSxNQUFNLEVBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQztFQUNyRSxDQUFDLE1BQ0csSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0VBRXpCLE9BQU8sSUFBSTtBQUNmLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLGVBQWUsR0FDeEIsS0FBc0MsSUFDdEI7RUFDaEIsTUFBTSxLQUEyQixHQUFHLEVBQUU7RUFFdEMsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7SUFDL0MsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFJLEVBQUUsQ0FBbUIsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUNqRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUNoQixLQUFLLE1BQU0sY0FBYyxJQUFJLFNBQVMsQ0FBUyxLQUFLLENBQUMsRUFDakQsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxNQUV0QyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7RUFDMUI7RUFFQSxNQUFNLEtBQTJCLEdBQUcsRUFBRTtFQUN0QztFQUNBLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUNwQixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksRUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQ3JCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0VBRTVCLE1BQU0sTUFBcUIsR0FBRyxFQUFFO0VBQ2hDO0VBQ0EsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFZLEVBQUUsWUFBMkIsS0FBVztJQUMvRDtJQUNBLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FDWCw2QkFBNkIsSUFBSSxvQkFBb0IsR0FDckQsV0FBVyxHQUNYLHNCQUFzQixZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQ3pELEdBQUcsSUFBSSxJQUNYLENBQUM7SUFFTCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUNqQztJQUNBLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO01BQ2QsSUFBSSxJQUErQjtNQUNuQztNQUNBLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJO01BQ25CO0FBQ1o7QUFDQTtBQUNBO01BQ1ksS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQ3BCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNsQjtBQUNwQjtBQUNBO0FBQ0E7UUFDb0IsSUFBSSxHQUFHLElBQUksSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUM7UUFDQSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztNQUN4QjtNQUVKLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCO0VBQ0osQ0FBQztFQUVELEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQy9DLE1BQU0sSUFBbUIsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQ3hDO0lBQ0EsSUFBSSxJQUFJLEVBQUU7TUFDTjtNQUNBLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJO01BQ25CO0FBQ1o7QUFDQTtBQUNBO01BQ1ksS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQ3BCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUk7UUFDaEI7UUFDQSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7TUFFOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckI7RUFDSjtFQUVBLE9BQU8sTUFBTTtBQUNqQixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLE1BQU0sR0FBaUIsSUFBYyxJQUFlO0VBQzdELE1BQU0sTUFBZ0IsR0FBRyxFQUFFO0VBRTNCLEtBQUssTUFBTSxLQUFLLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFVLENBQUMsRUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFVLENBQUM7RUFFL0IsT0FBTyxNQUFNO0FBQ2pCLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=