@clickview/reports 0.0.14-rc.3 → 0.0.14

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 (135) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/scripts/{8-4362d8ec47-reports.chunk.js → 8-561ad8215b-reports.chunk.js} +1 -1
  3. package/dist/scripts/{9-2294aec88e-reports.chunk.js → 9-09d4882649-reports.chunk.js} +1 -1
  4. package/dist/scripts/{bundle-a50e7f7abd.min.js → bundle-ea3b1ca1bb.min.js} +1 -1
  5. package/package.json +3 -3
  6. package/dist/css/1-reports.chunk.css +0 -26
  7. package/dist/css/10-reports-1a016faa7a.chunk.css +0 -16
  8. package/dist/css/10-reports-dfc303887f.chunk.css +0 -94
  9. package/dist/css/11-reports-6e0e114b8b.chunk.css +0 -16
  10. package/dist/css/11-reports-c64a3dae3c.chunk.css +0 -24
  11. package/dist/css/12-reports-82f3a62e3f.chunk.css +0 -6
  12. package/dist/css/12-reports-87b0f4ae23.chunk.css +0 -18
  13. package/dist/css/12-reports.chunk.css +0 -39
  14. package/dist/css/13-reports-5101603969.chunk.css +0 -8
  15. package/dist/css/13-reports-d7c596841b.chunk.css +0 -6
  16. package/dist/css/13-reports.chunk.css +0 -4
  17. package/dist/css/14-reports-1b564b1b5c.chunk.css +0 -12
  18. package/dist/css/14-reports.chunk.css +0 -9
  19. package/dist/css/15-reports-c822f03e9f.chunk.css +0 -6
  20. package/dist/css/15-reports.chunk.css +0 -12
  21. package/dist/css/16-reports-e755ceba53.chunk.css +0 -4
  22. package/dist/css/16-reports.chunk.css +0 -9
  23. package/dist/css/17-reports-a851153aa2.chunk.css +0 -6
  24. package/dist/css/17-reports.chunk.css +0 -421
  25. package/dist/css/18-reports-8d22d0432e.chunk.css +0 -2
  26. package/dist/css/18-reports.chunk.css +0 -60
  27. package/dist/css/19-reports-b5e731ba4c.chunk.css +0 -2
  28. package/dist/css/19-reports.chunk.css +0 -152
  29. package/dist/css/2-reports-ee0f55c5ef.chunk.css +0 -6
  30. package/dist/css/20-reports-b24d9e1929.chunk.css +0 -4
  31. package/dist/css/20-reports.chunk.css +0 -15
  32. package/dist/css/21-reports-b5e731ba4c.chunk.css +0 -2
  33. package/dist/css/21-reports.chunk.css +0 -24
  34. package/dist/css/22-reports.chunk.css +0 -22
  35. package/dist/css/23-reports.chunk.css +0 -4
  36. package/dist/css/24-reports.chunk.css +0 -4
  37. package/dist/css/25-reports.chunk.css +0 -9
  38. package/dist/css/26-reports.chunk.css +0 -12
  39. package/dist/css/27-reports.chunk.css +0 -12
  40. package/dist/css/28-reports.chunk.css +0 -12
  41. package/dist/css/3-reports.chunk.css +0 -52
  42. package/dist/css/5-reports.chunk.css +0 -12
  43. package/dist/css/6-reports-7d7912037e.chunk.css +0 -12
  44. package/dist/css/6-reports.chunk.css +0 -83
  45. package/dist/css/8-reports-9e7980819e.chunk.css +0 -94
  46. package/dist/css/9-reports-17de4ec4e3.chunk.css +0 -94
  47. package/dist/css/9-reports-80a3d4c4dc.chunk.css +0 -94
  48. package/dist/css/9-reports.chunk.css +0 -1793
  49. package/dist/css/reports-app-363cd589d6.css +0 -63
  50. package/dist/css/reports-app.css +0 -11386
  51. package/dist/scripts/0-c45f33cf27-reports.chunk.js +0 -1
  52. package/dist/scripts/0-fdb01ce347-reports.chunk.js +0 -1
  53. package/dist/scripts/0-reports.chunk.js +0 -11
  54. package/dist/scripts/1-593f3a2b8d-reports.chunk.js +0 -1
  55. package/dist/scripts/1-c590ecd5b7-reports.chunk.js +0 -1
  56. package/dist/scripts/1-reports.chunk.js +0 -161
  57. package/dist/scripts/10-75042090ca-reports.chunk.js +0 -1
  58. package/dist/scripts/10-d366e632ff-reports.chunk.js +0 -1
  59. package/dist/scripts/10-reports.chunk.js +0 -1270
  60. package/dist/scripts/11-50d5d1ddfd-reports.chunk.js +0 -1
  61. package/dist/scripts/11-60744bb8ca-reports.chunk.js +0 -1
  62. package/dist/scripts/11-reports.chunk.js +0 -59
  63. package/dist/scripts/12-a75cd2076e-reports.chunk.js +0 -1
  64. package/dist/scripts/12-d58e14d944-reports.chunk.js +0 -1
  65. package/dist/scripts/12-reports.chunk.js +0 -191
  66. package/dist/scripts/13-0a16876333-reports.chunk.js +0 -1
  67. package/dist/scripts/13-ff911da0b4-reports.chunk.js +0 -1
  68. package/dist/scripts/13-reports.chunk.js +0 -98
  69. package/dist/scripts/14-27dad36371-reports.chunk.js +0 -1
  70. package/dist/scripts/14-4059f6ff70-reports.chunk.js +0 -1
  71. package/dist/scripts/14-reports.chunk.js +0 -50
  72. package/dist/scripts/15-1ff7d228f0-reports.chunk.js +0 -1
  73. package/dist/scripts/15-6fe99dadbd-reports.chunk.js +0 -1
  74. package/dist/scripts/15-reports.chunk.js +0 -34
  75. package/dist/scripts/16-356448bd82-reports.chunk.js +0 -1
  76. package/dist/scripts/16-f51c2fd114-reports.chunk.js +0 -1
  77. package/dist/scripts/16-reports.chunk.js +0 -18
  78. package/dist/scripts/17-75641e87b3-reports.chunk.js +0 -1
  79. package/dist/scripts/17-903b3a42a8-reports.chunk.js +0 -1
  80. package/dist/scripts/17-reports.chunk.js +0 -450
  81. package/dist/scripts/18-0825e33ae4-reports.chunk.js +0 -1
  82. package/dist/scripts/18-145828e75c-reports.chunk.js +0 -1
  83. package/dist/scripts/18-reports.chunk.js +0 -172
  84. package/dist/scripts/19-a84afe10d6-reports.chunk.js +0 -1
  85. package/dist/scripts/19-ee16e3fc45-reports.chunk.js +0 -1
  86. package/dist/scripts/19-reports.chunk.js +0 -143
  87. package/dist/scripts/2-65f25368c3-reports.chunk.js +0 -1
  88. package/dist/scripts/2-a4d6cdfd17-reports.chunk.js +0 -1
  89. package/dist/scripts/2-reports.chunk.js +0 -17
  90. package/dist/scripts/20-5dc6922f9f-reports.chunk.js +0 -1
  91. package/dist/scripts/20-789131e4b0-reports.chunk.js +0 -1
  92. package/dist/scripts/20-reports.chunk.js +0 -96
  93. package/dist/scripts/21-3eeb7d3987-reports.chunk.js +0 -1
  94. package/dist/scripts/21-ee33292057-reports.chunk.js +0 -1
  95. package/dist/scripts/21-reports.chunk.js +0 -96
  96. package/dist/scripts/22-3c846d6a6f-reports.chunk.js +0 -1
  97. package/dist/scripts/22-853d813bbe-reports.chunk.js +0 -1
  98. package/dist/scripts/22-reports.chunk.js +0 -81
  99. package/dist/scripts/23-f2afd0b1c8-reports.chunk.js +0 -1
  100. package/dist/scripts/23-reports.chunk.js +0 -66
  101. package/dist/scripts/24-reports.chunk.js +0 -58
  102. package/dist/scripts/25-reports.chunk.js +0 -50
  103. package/dist/scripts/26-reports.chunk.js +0 -42
  104. package/dist/scripts/27-reports.chunk.js +0 -34
  105. package/dist/scripts/28-reports.chunk.js +0 -34
  106. package/dist/scripts/29-reports.chunk.js +0 -35
  107. package/dist/scripts/3-5f4ba3c213-reports.chunk.js +0 -1
  108. package/dist/scripts/3-dc412a5e87-reports.chunk.js +0 -1
  109. package/dist/scripts/3-reports.chunk.js +0 -97
  110. package/dist/scripts/30-reports.chunk.js +0 -19
  111. package/dist/scripts/31-reports.chunk.js +0 -11
  112. package/dist/scripts/32-reports.chunk.js +0 -11
  113. package/dist/scripts/4-04ae41a740-reports.chunk.js +0 -1
  114. package/dist/scripts/4-d0e7a012aa-reports.chunk.js +0 -1
  115. package/dist/scripts/4-reports.chunk.js +0 -1118
  116. package/dist/scripts/5-6d052b2b2d-reports.chunk.js +0 -101
  117. package/dist/scripts/5-9ff38a41fa-reports.chunk.js +0 -1
  118. package/dist/scripts/5-reports.chunk.js +0 -74
  119. package/dist/scripts/6-a6302fc5d5-reports.chunk.js +0 -1
  120. package/dist/scripts/6-reports.chunk.js +0 -56
  121. package/dist/scripts/7-reports.chunk.js +0 -43
  122. package/dist/scripts/8-2fb9a98a35-reports.chunk.js +0 -101
  123. package/dist/scripts/8-dee5906c67-reports.chunk.js +0 -101
  124. package/dist/scripts/8-reports.chunk.js +0 -17
  125. package/dist/scripts/9-8bb5696164-reports.chunk.js +0 -101
  126. package/dist/scripts/9-9b86a34919-reports.chunk.js +0 -101
  127. package/dist/scripts/9-d33b0f6f8a-reports.chunk.js +0 -1
  128. package/dist/scripts/9-reports.chunk.js +0 -1184
  129. package/dist/scripts/bundle-04a5b8c96e.min.js +0 -19
  130. package/dist/scripts/bundle-21f98d831e.min.js +0 -19
  131. package/dist/scripts/bundle-e519b5eef9.min.js +0 -19
  132. package/dist/scripts/bundle.js +0 -5722
  133. package/dist/scripts/polyfills-018d301355.min.js +0 -1
  134. package/dist/scripts/polyfills-be148b3001.min.js +0 -1
  135. package/dist/scripts/polyfills.js +0 -2750
@@ -1,17 +0,0 @@
1
- (window["webpackJsonp_clickview_reports"] = window["webpackJsonp_clickview_reports"] || []).push([[2],{
2
-
3
- /***/ "../../../node_modules/highcharts-react-official/dist/highcharts-react.min.js":
4
- /***/ (function(module, exports, __webpack_require__) {
5
-
6
- eval("!function(e,t){ true?module.exports=t(__webpack_require__(\"react\"),__webpack_require__(\"../../../node_modules/highcharts/highcharts.js\")):undefined}(\"undefined\"!=typeof self?self:this,function(e,t){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,\"a\",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p=\"\",t(t.s=0)}([function(e,t,r){\"use strict\";function n(){return n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},n.apply(this,arguments)}function o(e){return i(e)||u(e)||c()}function c(){throw new TypeError(\"Invalid attempt to spread non-iterable instance\")}function u(e){if(Symbol.iterator in Object(e)||\"[object Arguments]\"===Object.prototype.toString.call(e))return Array.from(e)}function i(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t<e.length;t++)r[t]=e[t];return r}}Object.defineProperty(t,\"__esModule\",{value:!0});var a=r(1),s=r.n(a),f=r(2),p=r.n(f),l=\"undefined\"!=typeof window?a.useLayoutEffect:a.useEffect,d=Object(a.forwardRef)(function(e,t){var r=Object(a.useRef)(),c=Object(a.useRef)();return l(function(){function t(){var t=e.highcharts||p.a,n=e.constructorType||\"chart\";t?t[n]?e.options?c.current=t[n](r.current,e.options,e.callback?e.callback:void 0):console.warn('The \"options\" property was not passed.'):console.warn('The \"constructorType\" property is incorrect or some required module is not imported.'):console.warn('The \"highcharts\" property was not passed.')}if(c.current){if(!1!==e.allowChartUpdate)if(!e.immutable&&c.current){var n;(n=c.current).update.apply(n,[e.options].concat(o(e.updateArgs||[!0,!0])))}else t()}else t()}),l(function(){return function(){c.current&&(c.current.destroy(),c.current=null)}},[]),Object(a.useImperativeHandle)(t,function(){return{get chart(){return c.current},container:r}},[]),s.a.createElement(\"div\",n({},e.containerProps,{ref:r}))});t.default=Object(a.memo)(d)},function(t,r){t.exports=e},function(e,r){e.exports=t}])});\n//# sourceMappingURL=highcharts-react.min.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2hpZ2hjaGFydHMtcmVhY3Qtb2ZmaWNpYWwvZGlzdC9oaWdoY2hhcnRzLXJlYWN0Lm1pbi5qcy5qcyIsInNvdXJjZXMiOlsiZmlsZTovL0M6L0NsaWNrVmlldyBQcm9qZWN0cy9AY2xpY2t2aWV3L25vZGVfbW9kdWxlcy9oaWdoY2hhcnRzLXJlYWN0LW9mZmljaWFsL2Rpc3QvaGlnaGNoYXJ0cy1yZWFjdC5taW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dChyZXF1aXJlKFwicmVhY3RcIikscmVxdWlyZShcImhpZ2hjaGFydHNcIikpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wicmVhY3RcIixcImhpZ2hjaGFydHNcIl0sdCk6XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0cy5IaWdoY2hhcnRzUmVhY3Q9dChyZXF1aXJlKFwicmVhY3RcIikscmVxdWlyZShcImhpZ2hjaGFydHNcIikpOmUuSGlnaGNoYXJ0c1JlYWN0PXQoZS5SZWFjdCxlLkhpZ2hjaGFydHMpfShcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtpZihyW25dKXJldHVybiByW25dLmV4cG9ydHM7dmFyIG89cltuXT17aTpuLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbbl0uY2FsbChvLmV4cG9ydHMsbyxvLmV4cG9ydHMsdCksby5sPSEwLG8uZXhwb3J0c312YXIgcj17fTtyZXR1cm4gdC5tPWUsdC5jPXIsdC5kPWZ1bmN0aW9uKGUscixuKXt0Lm8oZSxyKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0Om59KX0sdC5uPWZ1bmN0aW9uKGUpe3ZhciByPWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiB0LmQocixcImFcIixyKSxyfSx0Lm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LHQucD1cIlwiLHQodC5zPTApfShbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oKXtyZXR1cm4gbj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfSxuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBvKGUpe3JldHVybiBpKGUpfHx1KGUpfHxjKCl9ZnVuY3Rpb24gYygpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKX1mdW5jdGlvbiB1KGUpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSl8fFwiW29iamVjdCBBcmd1bWVudHNdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIEFycmF5LmZyb20oZSl9ZnVuY3Rpb24gaShlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxyPW5ldyBBcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspclt0XT1lW3RdO3JldHVybiByfX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgYT1yKDEpLHM9ci5uKGEpLGY9cigyKSxwPXIubihmKSxsPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/YS51c2VMYXlvdXRFZmZlY3Q6YS51c2VFZmZlY3QsZD1PYmplY3QoYS5mb3J3YXJkUmVmKShmdW5jdGlvbihlLHQpe3ZhciByPU9iamVjdChhLnVzZVJlZikoKSxjPU9iamVjdChhLnVzZVJlZikoKTtyZXR1cm4gbChmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt2YXIgdD1lLmhpZ2hjaGFydHN8fHAuYSxuPWUuY29uc3RydWN0b3JUeXBlfHxcImNoYXJ0XCI7dD90W25dP2Uub3B0aW9ucz9jLmN1cnJlbnQ9dFtuXShyLmN1cnJlbnQsZS5vcHRpb25zLGUuY2FsbGJhY2s/ZS5jYWxsYmFjazp2b2lkIDApOmNvbnNvbGUud2FybignVGhlIFwib3B0aW9uc1wiIHByb3BlcnR5IHdhcyBub3QgcGFzc2VkLicpOmNvbnNvbGUud2FybignVGhlIFwiY29uc3RydWN0b3JUeXBlXCIgcHJvcGVydHkgaXMgaW5jb3JyZWN0IG9yIHNvbWUgcmVxdWlyZWQgbW9kdWxlIGlzIG5vdCBpbXBvcnRlZC4nKTpjb25zb2xlLndhcm4oJ1RoZSBcImhpZ2hjaGFydHNcIiBwcm9wZXJ0eSB3YXMgbm90IHBhc3NlZC4nKX1pZihjLmN1cnJlbnQpe2lmKCExIT09ZS5hbGxvd0NoYXJ0VXBkYXRlKWlmKCFlLmltbXV0YWJsZSYmYy5jdXJyZW50KXt2YXIgbjsobj1jLmN1cnJlbnQpLnVwZGF0ZS5hcHBseShuLFtlLm9wdGlvbnNdLmNvbmNhdChvKGUudXBkYXRlQXJnc3x8WyEwLCEwXSkpKX1lbHNlIHQoKX1lbHNlIHQoKX0pLGwoZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtjLmN1cnJlbnQmJihjLmN1cnJlbnQuZGVzdHJveSgpLGMuY3VycmVudD1udWxsKX19LFtdKSxPYmplY3QoYS51c2VJbXBlcmF0aXZlSGFuZGxlKSh0LGZ1bmN0aW9uKCl7cmV0dXJue2dldCBjaGFydCgpe3JldHVybiBjLmN1cnJlbnR9LGNvbnRhaW5lcjpyfX0sW10pLHMuYS5jcmVhdGVFbGVtZW50KFwiZGl2XCIsbih7fSxlLmNvbnRhaW5lclByb3BzLHtyZWY6cn0pKX0pO3QuZGVmYXVsdD1PYmplY3QoYS5tZW1vKShkKX0sZnVuY3Rpb24odCxyKXt0LmV4cG9ydHM9ZX0sZnVuY3Rpb24oZSxyKXtlLmV4cG9ydHM9dH1dKX0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGlnaGNoYXJ0cy1yZWFjdC5taW4uanMubWFwIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/highcharts-react-official/dist/highcharts-react.min.js\n");
7
-
8
- /***/ }),
9
-
10
- /***/ "../../../node_modules/highcharts/highcharts.js":
11
- /***/ (function(module, exports, __webpack_require__) {
12
-
13
- eval("var __WEBPACK_AMD_DEFINE_RESULT__;/*\n Highcharts JS v9.1.0 (2021-05-03)\n\n (c) 2009-2021 Torstein Honsi\n\n License: www.highcharts.com/license\n*/\n(function(W,O){ true&&module.exports?(O[\"default\"]=O,module.exports=W.document?O(W):O): true?!(__WEBPACK_AMD_DEFINE_RESULT__ = (function(){return O(W)}).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):(undefined)})(\"undefined\"!==typeof window?window:this,function(W){function O(D,b,e,z){D.hasOwnProperty(b)||(D[b]=z.apply(null,e))}var e={};O(e,\"Core/Globals.js\",[],function(){var D=\"undefined\"!==typeof W?W:\"undefined\"!==typeof window?window:{},b;(function(b){b.SVG_NS=\n\"http://www.w3.org/2000/svg\";b.product=\"Highcharts\";b.version=\"9.1.0\";b.win=D;b.doc=b.win.document;b.svg=b.doc&&b.doc.createElementNS&&!!b.doc.createElementNS(b.SVG_NS,\"svg\").createSVGRect;b.userAgent=b.win.navigator&&b.win.navigator.userAgent||\"\";b.isChrome=-1!==b.userAgent.indexOf(\"Chrome\");b.isFirefox=-1!==b.userAgent.indexOf(\"Firefox\");b.isMS=/(edge|msie|trident)/i.test(b.userAgent)&&!b.win.opera;b.isSafari=!b.isChrome&&-1!==b.userAgent.indexOf(\"Safari\");b.isTouchDevice=/(Mobile|Android|Windows Phone)/.test(b.userAgent);\nb.isWebKit=-1!==b.userAgent.indexOf(\"AppleWebKit\");b.deg2rad=2*Math.PI/360;b.hasBidiBug=b.isFirefox&&4>parseInt(b.userAgent.split(\"Firefox/\")[1],10);b.hasTouch=!!b.win.TouchEvent;b.marginNames=[\"plotTop\",\"marginRight\",\"marginBottom\",\"plotLeft\"];b.noop=function(){};b.supportsPassiveEvents=function(){var D=!1;if(!b.isMS){var e=Object.defineProperty({},\"passive\",{get:function(){D=!0}});b.win.addEventListener&&b.win.removeEventListener&&(b.win.addEventListener(\"testPassive\",b.noop,e),b.win.removeEventListener(\"testPassive\",\nb.noop,e))}return D}();b.charts=[];b.dateFormats={};b.seriesTypes={};b.symbolSizes={}})(b||(b={}));return b});O(e,\"Core/Utilities.js\",[e[\"Core/Globals.js\"]],function(D){function b(a,c,h,r){var y=c?\"Highcharts error\":\"Highcharts warning\";32===a&&(a=y+\": Deprecated member\");var d=w(a),M=d?y+\" #\"+a+\": www.highcharts.com/errors/\"+a+\"/\":a.toString();if(\"undefined\"!==typeof r){var t=\"\";d&&(M+=\"?\");n(r,function(p,a){t+=\"\\n - \"+a+\": \"+p;d&&(M+=encodeURI(a)+\"=\"+encodeURI(p))});M+=t}E(Highcharts,\"displayError\",\n{chart:h,code:a,message:M,params:r},function(){if(c)throw Error(M);g.console&&-1===b.messages.indexOf(M)&&console.warn(M)});b.messages.push(M)}function e(a,c){var y={};n(a,function(g,h){if(C(a[h],!0)&&!a.nodeType&&c[h])g=e(a[h],c[h]),Object.keys(g).length&&(y[h]=g);else if(C(a[h])||a[h]!==c[h])y[h]=a[h]});return y}function z(a,c){return parseInt(a,c||10)}function H(a){return\"string\"===typeof a}function G(a){a=Object.prototype.toString.call(a);return\"[object Array]\"===a||\"[object Array Iterator]\"===\na}function C(a,c){return!!a&&\"object\"===typeof a&&(!c||!G(a))}function B(a){return C(a)&&\"number\"===typeof a.nodeType}function x(a){var c=a&&a.constructor;return!(!C(a,!0)||B(a)||!c||!c.name||\"Object\"===c.name)}function w(a){return\"number\"===typeof a&&!isNaN(a)&&Infinity>a&&-Infinity<a}function v(a){return\"undefined\"!==typeof a&&null!==a}function f(a,c,g){var y;H(c)?v(g)?a.setAttribute(c,g):a&&a.getAttribute&&((y=a.getAttribute(c))||\"class\"!==c||(y=a.getAttribute(c+\"Name\"))):n(c,function(c,y){a.setAttribute(y,\nc)});return y}function d(a,c){var y;a||(a={});for(y in c)a[y]=c[y];return a}function q(){for(var a=arguments,c=a.length,g=0;g<c;g++){var h=a[g];if(\"undefined\"!==typeof h&&null!==h)return h}}function k(a,c){D.isMS&&!D.svg&&c&&\"undefined\"!==typeof c.opacity&&(c.filter=\"alpha(opacity=\"+100*c.opacity+\")\");d(a.style,c)}function l(a,g,h,r,m){a=c.createElement(a);g&&d(a,g);m&&k(a,{padding:\"0\",border:\"none\",margin:\"0\"});h&&k(a,h);r&&r.appendChild(a);return a}function N(a,c){return parseFloat(a.toPrecision(c||\n14))}function u(a,c,h){var y=D.getStyle||u;if(\"width\"===c)return c=Math.min(a.offsetWidth,a.scrollWidth),h=a.getBoundingClientRect&&a.getBoundingClientRect().width,h<c&&h>=c-1&&(c=Math.floor(h)),Math.max(0,c-(y(a,\"padding-left\",!0)||0)-(y(a,\"padding-right\",!0)||0));if(\"height\"===c)return Math.max(0,Math.min(a.offsetHeight,a.scrollHeight)-(y(a,\"padding-top\",!0)||0)-(y(a,\"padding-bottom\",!0)||0));g.getComputedStyle||b(27,!0);if(a=g.getComputedStyle(a,void 0)){var r=a.getPropertyValue(c);q(h,\"opacity\"!==\nc)&&(r=z(r))}return r}function n(a,c,g){for(var h in a)Object.hasOwnProperty.call(a,h)&&c.call(g||a[h],a[h],h,a)}function J(a,c,g){function h(t,p){var c=a.removeEventListener||D.removeEventListenerPolyfill;c&&c.call(a,t,p,!1)}function y(t){var p;if(a.nodeName){if(c){var g={};g[c]=!0}else g=t;n(g,function(a,c){if(t[c])for(p=t[c].length;p--;)h(c,t[c][p].fn)})}}var r=\"function\"===typeof a&&a.prototype||a;if(Object.hasOwnProperty.call(r,\"hcEvents\")){var M=r.hcEvents;c?(r=M[c]||[],g?(M[c]=r.filter(function(a){return g!==\na.fn}),h(c,g)):(y(M),M[c]=[])):(y(M),delete r.hcEvents)}}function E(a,g,h,r){h=h||{};if(c.createEvent&&(a.dispatchEvent||a.fireEvent&&a!==D)){var y=c.createEvent(\"Events\");y.initEvent(g,!0,!0);h=d(y,h);a.dispatchEvent?a.dispatchEvent(h):a.fireEvent(g,h)}else if(a.hcEvents){h.target||d(h,{preventDefault:function(){h.defaultPrevented=!0},target:a,type:g});y=[];for(var m=a,M=!1;m.hcEvents;)Object.hasOwnProperty.call(m,\"hcEvents\")&&m.hcEvents[g]&&(y.length&&(M=!0),y.unshift.apply(y,m.hcEvents[g])),m=\nObject.getPrototypeOf(m);M&&y.sort(function(a,p){return a.order-p.order});y.forEach(function(t){!1===t.fn.call(a,h)&&h.preventDefault()})}r&&!h.defaultPrevented&&r.call(a,h)}var m=D.charts,c=D.doc,g=D.win;\"\";(b||(b={})).messages=[];var a;Math.easeInOutSine=function(a){return-.5*(Math.cos(Math.PI*a)-1)};var h=Array.prototype.find?function(a,c){return a.find(c)}:function(a,c){var g,h=a.length;for(g=0;g<h;g++)if(c(a[g],g))return a[g]};n({map:\"map\",each:\"forEach\",grep:\"filter\",reduce:\"reduce\",some:\"some\"},\nfunction(a,c){D[c]=function(g){var h;b(32,!1,void 0,(h={},h[\"Highcharts.\"+c]=\"use Array.\"+a,h));return Array.prototype[a].apply(g,[].slice.call(arguments,1))}});var r,A=function(){var a=Math.random().toString(36).substring(2,9)+\"-\",c=0;return function(){return\"highcharts-\"+(r?\"\":a)+c++}}();g.jQuery&&(g.jQuery.fn.highcharts=function(){var a=[].slice.call(arguments);if(this[0])return a[0]?(new (D[H(a[0])?a.shift():\"Chart\"])(this[0],a[0],a[1]),this):m[f(this[0],\"data-highcharts-chart\")]});return{addEvent:function(a,\nc,g,h){void 0===h&&(h={});var r=\"function\"===typeof a&&a.prototype||a;Object.hasOwnProperty.call(r,\"hcEvents\")||(r.hcEvents={});r=r.hcEvents;D.Point&&a instanceof D.Point&&a.series&&a.series.chart&&(a.series.chart.runTrackerClick=!0);var y=a.addEventListener||D.addEventListenerPolyfill;y&&y.call(a,c,g,D.supportsPassiveEvents?{passive:void 0===h.passive?-1!==c.indexOf(\"touch\"):h.passive,capture:!1}:!1);r[c]||(r[c]=[]);r[c].push({fn:g,order:\"number\"===typeof h.order?h.order:Infinity});r[c].sort(function(a,\nt){return a.order-t.order});return function(){J(a,c,g)}},arrayMax:function(a){for(var c=a.length,g=a[0];c--;)a[c]>g&&(g=a[c]);return g},arrayMin:function(a){for(var c=a.length,g=a[0];c--;)a[c]<g&&(g=a[c]);return g},attr:f,clamp:function(a,c,g){return a>c?a<g?a:g:c},cleanRecursively:e,clearTimeout:function(a){v(a)&&clearTimeout(a)},correctFloat:N,createElement:l,css:k,defined:v,destroyObjectProperties:function(a,c){n(a,function(g,h){g&&g!==c&&g.destroy&&g.destroy();delete a[h]})},discardElement:function(c){a||\n(a=l(\"div\"));c&&a.appendChild(c);a.innerHTML=\"\"},erase:function(a,c){for(var g=a.length;g--;)if(a[g]===c){a.splice(g,1);break}},error:b,extend:d,extendClass:function(a,c){var g=function(){};g.prototype=new a;d(g.prototype,c);return g},find:h,fireEvent:E,getMagnitude:function(a){return Math.pow(10,Math.floor(Math.log(a)/Math.LN10))},getNestedProperty:function(a,c){for(a=a.split(\".\");a.length&&v(c);){var h=a.shift();if(\"undefined\"===typeof h||\"__proto__\"===h)return;c=c[h];if(!v(c)||\"function\"===typeof c||\n\"number\"===typeof c.nodeType||c===g)return}return c},getStyle:u,inArray:function(a,c,g){b(32,!1,void 0,{\"Highcharts.inArray\":\"use Array.indexOf\"});return c.indexOf(a,g)},isArray:G,isClass:x,isDOMElement:B,isFunction:function(a){return\"function\"===typeof a},isNumber:w,isObject:C,isString:H,keys:function(a){b(32,!1,void 0,{\"Highcharts.keys\":\"use Object.keys\"});return Object.keys(a)},merge:function(){var a,c=arguments,g={},h=function(a,c){\"object\"!==typeof a&&(a={});n(c,function(t,p){\"__proto__\"!==p&&\n\"constructor\"!==p&&(!C(t,!0)||x(t)||B(t)?a[p]=c[p]:a[p]=h(a[p]||{},t))});return a};!0===c[0]&&(g=c[1],c=Array.prototype.slice.call(c,2));var r=c.length;for(a=0;a<r;a++)g=h(g,c[a]);return g},normalizeTickInterval:function(a,c,g,h,r){var d=a;g=q(g,1);var M=a/g;c||(c=r?[1,1.2,1.5,2,2.5,3,4,5,6,8,10]:[1,2,2.5,5,10],!1===h&&(1===g?c=c.filter(function(a){return 0===a%1}):.1>=g&&(c=[1/g])));for(h=0;h<c.length&&!(d=c[h],r&&d*g>=a||!r&&M<=(c[h]+(c[h+1]||c[h]))/2);h++);return d=N(d*g,-Math.round(Math.log(.001)/\nMath.LN10))},objectEach:n,offset:function(a){var h=c.documentElement;a=a.parentElement||a.parentNode?a.getBoundingClientRect():{top:0,left:0,width:0,height:0};return{top:a.top+(g.pageYOffset||h.scrollTop)-(h.clientTop||0),left:a.left+(g.pageXOffset||h.scrollLeft)-(h.clientLeft||0),width:a.width,height:a.height}},pad:function(a,c,g){return Array((c||2)+1-String(a).replace(\"-\",\"\").length).join(g||\"0\")+a},pick:q,pInt:z,relativeLength:function(a,c,g){return/%$/.test(a)?c*parseFloat(a)/100+(g||0):parseFloat(a)},\nremoveEvent:J,splat:function(a){return G(a)?a:[a]},stableSort:function(a,c){var g=a.length,h,r;for(r=0;r<g;r++)a[r].safeI=r;a.sort(function(a,g){h=c(a,g);return 0===h?a.safeI-g.safeI:h});for(r=0;r<g;r++)delete a[r].safeI},syncTimeout:function(a,c,g){if(0<c)return setTimeout(a,c,g);a.call(0,g);return-1},timeUnits:{millisecond:1,second:1E3,minute:6E4,hour:36E5,day:864E5,week:6048E5,month:24192E5,year:314496E5},uniqueKey:A,useSerialIds:function(a){return r=q(a,r)},wrap:function(a,c,g){var h=a[c];a[c]=\nfunction(){var a=Array.prototype.slice.call(arguments),c=arguments,r=this;r.proceed=function(){h.apply(r,arguments.length?arguments:c)};a.unshift(h);a=g.apply(this,a);r.proceed=null;return a}}}});O(e,\"Core/Color/Color.js\",[e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(D,b){var e=b.isNumber,z=b.merge,H=b.pInt;\"\";b=function(){function b(e){this.parsers=[{regex:/rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]?(?:\\.[0-9]+)?)\\s*\\)/,parse:function(b){return[H(b[1]),H(b[2]),\nH(b[3]),parseFloat(b[4],10)]}},{regex:/rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/,parse:function(b){return[H(b[1]),H(b[2]),H(b[3]),1]}}];this.rgba=[];if(D.Color!==b)return new D.Color(e);if(!(this instanceof b))return new b(e);this.init(e)}b.parse=function(e){return new b(e)};b.prototype.init=function(e){var B,x;if((this.input=e=b.names[e&&e.toLowerCase?e.toLowerCase():\"\"]||e)&&e.stops)this.stops=e.stops.map(function(f){return new b(f[1])});else{if(e&&e.charAt&&\"#\"===e.charAt()){var w=\ne.length;e=parseInt(e.substr(1),16);7===w?B=[(e&16711680)>>16,(e&65280)>>8,e&255,1]:4===w&&(B=[(e&3840)>>4|(e&3840)>>8,(e&240)>>4|e&240,(e&15)<<4|e&15,1])}if(!B)for(x=this.parsers.length;x--&&!B;){var v=this.parsers[x];(w=v.regex.exec(e))&&(B=v.parse(w))}}this.rgba=B||[]};b.prototype.get=function(b){var B=this.input,x=this.rgba;if(\"undefined\"!==typeof this.stops){var w=z(B);w.stops=[].concat(w.stops);this.stops.forEach(function(v,f){w.stops[f]=[w.stops[f][0],v.get(b)]})}else w=x&&e(x[0])?\"rgb\"===\nb||!b&&1===x[3]?\"rgb(\"+x[0]+\",\"+x[1]+\",\"+x[2]+\")\":\"a\"===b?x[3]:\"rgba(\"+x.join(\",\")+\")\":B;return w};b.prototype.brighten=function(b){var B,x=this.rgba;if(this.stops)this.stops.forEach(function(w){w.brighten(b)});else if(e(b)&&0!==b)for(B=0;3>B;B++)x[B]+=H(255*b),0>x[B]&&(x[B]=0),255<x[B]&&(x[B]=255);return this};b.prototype.setOpacity=function(b){this.rgba[3]=b;return this};b.prototype.tweenTo=function(b,e){var x=this.rgba,w=b.rgba;w.length&&x&&x.length?(b=1!==w[3]||1!==x[3],e=(b?\"rgba(\":\"rgb(\")+Math.round(w[0]+\n(x[0]-w[0])*(1-e))+\",\"+Math.round(w[1]+(x[1]-w[1])*(1-e))+\",\"+Math.round(w[2]+(x[2]-w[2])*(1-e))+(b?\",\"+(w[3]+(x[3]-w[3])*(1-e)):\"\")+\")\"):e=b.input||\"none\";return e};b.names={white:\"#ffffff\",black:\"#000000\"};return b}();D.Color=b;D.color=b.parse;return b});O(e,\"Core/Color/Palette.js\",[],function(){return{colors:\"#7cb5ec #434348 #90ed7d #f7a35c #8085e9 #f15c80 #e4d354 #2b908f #f45b5b #91e8e1\".split(\" \"),backgroundColor:\"#ffffff\",neutralColor100:\"#000000\",neutralColor80:\"#333333\",neutralColor60:\"#666666\",\nneutralColor40:\"#999999\",neutralColor20:\"#cccccc\",neutralColor10:\"#e6e6e6\",neutralColor5:\"#f2f2f2\",neutralColor3:\"#f7f7f7\",highlightColor100:\"#003399\",highlightColor80:\"#335cad\",highlightColor60:\"#6685c2\",highlightColor20:\"#ccd6eb\",highlightColor10:\"#e6ebf5\",positiveColor:\"#06b535\",negativeColor:\"#f21313\"}});O(e,\"Core/Time.js\",[e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(e,b){var D=e.win,z=b.defined,H=b.error,G=b.extend,C=b.isObject,B=b.merge,x=b.objectEach,w=b.pad,v=b.pick,f=b.splat,d=\nb.timeUnits;\"\";b=function(){function q(d){this.options={};this.variableTimezone=this.useUTC=!1;this.Date=D.Date;this.getTimezoneOffset=this.timezoneOffsetFunction();this.update(d)}q.prototype.get=function(d,l){if(this.variableTimezone||this.timezoneOffset){var k=l.getTime(),u=k-this.getTimezoneOffset(l);l.setTime(u);d=l[\"getUTC\"+d]();l.setTime(k);return d}return this.useUTC?l[\"getUTC\"+d]():l[\"get\"+d]()};q.prototype.set=function(d,l,f){if(this.variableTimezone||this.timezoneOffset){if(\"Milliseconds\"===\nd||\"Seconds\"===d||\"Minutes\"===d&&0===this.getTimezoneOffset(l)%36E5)return l[\"setUTC\"+d](f);var u=this.getTimezoneOffset(l);u=l.getTime()-u;l.setTime(u);l[\"setUTC\"+d](f);d=this.getTimezoneOffset(l);u=l.getTime()+d;return l.setTime(u)}return this.useUTC?l[\"setUTC\"+d](f):l[\"set\"+d](f)};q.prototype.update=function(d){var l=v(d&&d.useUTC,!0);this.options=d=B(!0,this.options||{},d);this.Date=d.Date||D.Date||Date;this.timezoneOffset=(this.useUTC=l)&&d.timezoneOffset;this.getTimezoneOffset=this.timezoneOffsetFunction();\nthis.variableTimezone=l&&!(!d.getTimezoneOffset&&!d.timezone)};q.prototype.makeTime=function(d,l,f,u,n,q){if(this.useUTC){var k=this.Date.UTC.apply(0,arguments);var m=this.getTimezoneOffset(k);k+=m;var c=this.getTimezoneOffset(k);m!==c?k+=c-m:m-36E5!==this.getTimezoneOffset(k-36E5)||e.isSafari||(k-=36E5)}else k=(new this.Date(d,l,v(f,1),v(u,0),v(n,0),v(q,0))).getTime();return k};q.prototype.timezoneOffsetFunction=function(){var d=this,l=this.options,f=l.moment||D.moment;if(!this.useUTC)return function(d){return 6E4*\n(new Date(d.toString())).getTimezoneOffset()};if(l.timezone){if(f)return function(d){return 6E4*-f.tz(d,l.timezone).utcOffset()};H(25)}return this.useUTC&&l.getTimezoneOffset?function(d){return 6E4*l.getTimezoneOffset(d.valueOf())}:function(){return 6E4*(d.timezoneOffset||0)}};q.prototype.dateFormat=function(d,f,q){if(!z(f)||isNaN(f))return e.defaultOptions.lang&&e.defaultOptions.lang.invalidDate||\"\";d=v(d,\"%Y-%m-%d %H:%M:%S\");var l=this,n=new this.Date(f),k=this.get(\"Hours\",n),N=this.get(\"Day\",n),\nm=this.get(\"Date\",n),c=this.get(\"Month\",n),g=this.get(\"FullYear\",n),a=e.defaultOptions.lang,h=a&&a.weekdays,r=a&&a.shortWeekdays;n=G({a:r?r[N]:h[N].substr(0,3),A:h[N],d:w(m),e:w(m,2,\" \"),w:N,b:a.shortMonths[c],B:a.months[c],m:w(c+1),o:c+1,y:g.toString().substr(2,2),Y:g,H:w(k),k:k,I:w(k%12||12),l:k%12||12,M:w(this.get(\"Minutes\",n)),p:12>k?\"AM\":\"PM\",P:12>k?\"am\":\"pm\",S:w(n.getSeconds()),L:w(Math.floor(f%1E3),3)},e.dateFormats);x(n,function(a,c){for(;-1!==d.indexOf(\"%\"+c);)d=d.replace(\"%\"+c,\"function\"===\ntypeof a?a.call(l,f):a)});return q?d.substr(0,1).toUpperCase()+d.substr(1):d};q.prototype.resolveDTLFormat=function(d){return C(d,!0)?d:(d=f(d),{main:d[0],from:d[1],to:d[2]})};q.prototype.getTimeTicks=function(f,l,q,u){var n=this,k=[],N={};var m=new n.Date(l);var c=f.unitRange,g=f.count||1,a;u=v(u,1);if(z(l)){n.set(\"Milliseconds\",m,c>=d.second?0:g*Math.floor(n.get(\"Milliseconds\",m)/g));c>=d.second&&n.set(\"Seconds\",m,c>=d.minute?0:g*Math.floor(n.get(\"Seconds\",m)/g));c>=d.minute&&n.set(\"Minutes\",m,\nc>=d.hour?0:g*Math.floor(n.get(\"Minutes\",m)/g));c>=d.hour&&n.set(\"Hours\",m,c>=d.day?0:g*Math.floor(n.get(\"Hours\",m)/g));c>=d.day&&n.set(\"Date\",m,c>=d.month?1:Math.max(1,g*Math.floor(n.get(\"Date\",m)/g)));if(c>=d.month){n.set(\"Month\",m,c>=d.year?0:g*Math.floor(n.get(\"Month\",m)/g));var h=n.get(\"FullYear\",m)}c>=d.year&&n.set(\"FullYear\",m,h-h%g);c===d.week&&(h=n.get(\"Day\",m),n.set(\"Date\",m,n.get(\"Date\",m)-h+u+(h<u?-7:0)));h=n.get(\"FullYear\",m);u=n.get(\"Month\",m);var r=n.get(\"Date\",m),A=n.get(\"Hours\",m);\nl=m.getTime();!n.variableTimezone&&n.useUTC||!z(q)||(a=q-l>4*d.month||n.getTimezoneOffset(l)!==n.getTimezoneOffset(q));l=m.getTime();for(m=1;l<q;)k.push(l),l=c===d.year?n.makeTime(h+m*g,0):c===d.month?n.makeTime(h,u+m*g):!a||c!==d.day&&c!==d.week?a&&c===d.hour&&1<g?n.makeTime(h,u,r,A+m*g):l+c*g:n.makeTime(h,u,r+m*g*(c===d.day?1:7)),m++;k.push(l);c<=d.hour&&1E4>k.length&&k.forEach(function(a){0===a%18E5&&\"000000000\"===n.dateFormat(\"%H%M%S%L\",a)&&(N[a]=\"day\")})}k.info=G(f,{higherRanks:N,totalRange:c*\ng});return k};return q}();e.Time=b;return e.Time});O(e,\"Core/Options.js\",[e[\"Core/Globals.js\"],e[\"Core/Color/Color.js\"],e[\"Core/Color/Palette.js\"],e[\"Core/Time.js\"],e[\"Core/Utilities.js\"]],function(e,b,I,z,H){var D=e.isTouchDevice,C=e.svg;b=b.parse;var B=H.merge;\"\";var x={colors:I.colors,symbols:[\"circle\",\"diamond\",\"square\",\"triangle\",\"triangle-down\"],lang:{loading:\"Loading...\",months:\"January February March April May June July August September October November December\".split(\" \"),shortMonths:\"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec\".split(\" \"),\nweekdays:\"Sunday Monday Tuesday Wednesday Thursday Friday Saturday\".split(\" \"),decimalPoint:\".\",numericSymbols:\"kMGTPE\".split(\"\"),resetZoom:\"Reset zoom\",resetZoomTitle:\"Reset zoom level 1:1\",thousandsSep:\" \"},global:{},time:{Date:void 0,getTimezoneOffset:void 0,timezone:void 0,timezoneOffset:0,useUTC:!0},chart:{panning:{enabled:!1,type:\"x\"},styledMode:!1,borderRadius:0,colorCount:10,defaultSeriesType:\"line\",ignoreHiddenSeries:!0,spacing:[10,10,15,10],resetZoomButton:{theme:{zIndex:6},position:{align:\"right\",\nx:-10,y:10}},zoomBySingleTouch:!1,width:null,height:null,borderColor:I.highlightColor80,backgroundColor:I.backgroundColor,plotBorderColor:I.neutralColor20},title:{text:\"Chart title\",align:\"center\",margin:15,widthAdjust:-44},subtitle:{text:\"\",align:\"center\",widthAdjust:-44},caption:{margin:15,text:\"\",align:\"left\",verticalAlign:\"bottom\"},plotOptions:{},labels:{style:{position:\"absolute\",color:I.neutralColor80}},legend:{enabled:!0,align:\"center\",alignColumns:!0,layout:\"horizontal\",labelFormatter:function(){return this.name},\nborderColor:I.neutralColor40,borderRadius:0,navigation:{activeColor:I.highlightColor100,inactiveColor:I.neutralColor20},itemStyle:{color:I.neutralColor80,cursor:\"pointer\",fontSize:\"12px\",fontWeight:\"bold\",textOverflow:\"ellipsis\"},itemHoverStyle:{color:I.neutralColor100},itemHiddenStyle:{color:I.neutralColor20},shadow:!1,itemCheckboxStyle:{position:\"absolute\",width:\"13px\",height:\"13px\"},squareSymbol:!0,symbolPadding:5,verticalAlign:\"bottom\",x:0,y:0,title:{style:{fontWeight:\"bold\"}}},loading:{labelStyle:{fontWeight:\"bold\",\nposition:\"relative\",top:\"45%\"},style:{position:\"absolute\",backgroundColor:I.backgroundColor,opacity:.5,textAlign:\"center\"}},tooltip:{enabled:!0,animation:C,borderRadius:3,dateTimeLabelFormats:{millisecond:\"%A, %b %e, %H:%M:%S.%L\",second:\"%A, %b %e, %H:%M:%S\",minute:\"%A, %b %e, %H:%M\",hour:\"%A, %b %e, %H:%M\",day:\"%A, %b %e, %Y\",week:\"Week from %A, %b %e, %Y\",month:\"%B %Y\",year:\"%Y\"},footerFormat:\"\",padding:8,snap:D?25:10,headerFormat:'<span style=\"font-size: 10px\">{point.key}</span><br/>',pointFormat:'<span style=\"color:{point.color}\">\\u25cf</span> {series.name}: <b>{point.y}</b><br/>',\nbackgroundColor:b(I.neutralColor3).setOpacity(.85).get(),borderWidth:1,shadow:!0,style:{color:I.neutralColor80,cursor:\"default\",fontSize:\"12px\",whiteSpace:\"nowrap\"}},credits:{enabled:!0,href:\"https://www.highcharts.com?credits\",position:{align:\"right\",x:-10,verticalAlign:\"bottom\",y:-5},style:{cursor:\"pointer\",color:I.neutralColor40,fontSize:\"9px\"},text:\"Highcharts.com\"}};x.chart.styledMode=!1;\"\";var w=new z(B(x.global,x.time));return{defaultOptions:x,defaultTime:w,getOptions:function(){return x},\nsetOptions:function(v){B(!0,x,v);if(v.time||v.global)e.time?e.time.update(B(x.global,x.time,v.global,v.time)):e.time=w;return x}}});O(e,\"Core/Animation/Fx.js\",[e[\"Core/Color/Color.js\"],e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(e,b,I){var D=e.parse,H=b.win,G=I.isNumber,C=I.objectEach;return function(){function b(b,w,v){this.pos=NaN;this.options=w;this.elem=b;this.prop=v}b.prototype.dSetter=function(){var b=this.paths,w=b&&b[0];b=b&&b[1];var v=this.now||0,f=[];if(1!==v&&w&&b)if(w.length===\nb.length&&1>v)for(var d=0;d<b.length;d++){for(var q=w[d],k=b[d],l=[],N=0;N<k.length;N++){var u=q[N],n=k[N];G(u)&&G(n)&&(\"A\"!==k[0]||4!==N&&5!==N)?l[N]=u+v*(n-u):l[N]=n}f.push(l)}else f=b;else f=this.toD||[];this.elem.attr(\"d\",f,void 0,!0)};b.prototype.update=function(){var b=this.elem,w=this.prop,v=this.now,f=this.options.step;if(this[w+\"Setter\"])this[w+\"Setter\"]();else b.attr?b.element&&b.attr(w,v,null,!0):b.style[w]=v+this.unit;f&&f.call(b,v,this)};b.prototype.run=function(e,w,v){var f=this,d=f.options,\nq=function(d){return q.stopped?!1:f.step(d)},k=H.requestAnimationFrame||function(d){setTimeout(d,13)},l=function(){for(var d=0;d<b.timers.length;d++)b.timers[d]()||b.timers.splice(d--,1);b.timers.length&&k(l)};e!==w||this.elem[\"forceAnimate:\"+this.prop]?(this.startTime=+new Date,this.start=e,this.end=w,this.unit=v,this.now=this.start,this.pos=0,q.elem=this.elem,q.prop=this.prop,q()&&1===b.timers.push(q)&&k(l)):(delete d.curAnim[this.prop],d.complete&&0===Object.keys(d.curAnim).length&&d.complete.call(this.elem))};\nb.prototype.step=function(b){var w=+new Date,v=this.options,f=this.elem,d=v.complete,q=v.duration,k=v.curAnim;if(f.attr&&!f.element)b=!1;else if(b||w>=q+this.startTime){this.now=this.end;this.pos=1;this.update();var l=k[this.prop]=!0;C(k,function(d){!0!==d&&(l=!1)});l&&d&&d.call(f);b=!1}else this.pos=v.easing((w-this.startTime)/q),this.now=this.start+(this.end-this.start)*this.pos,this.update(),b=!0;return b};b.prototype.initPath=function(b,w,v){function f(d,m){for(;d.length<J;){var c=d[0],g=m[J-\nd.length];g&&\"M\"===c[0]&&(d[0]=\"C\"===g[0]?[\"C\",c[1],c[2],c[1],c[2],c[1],c[2]]:[\"L\",c[1],c[2]]);d.unshift(c);l&&(c=d.pop(),d.push(d[d.length-1],c))}}function d(d,m){for(;d.length<J;)if(m=d[Math.floor(d.length/N)-1].slice(),\"C\"===m[0]&&(m[1]=m[5],m[2]=m[6]),l){var c=d[Math.floor(d.length/N)].slice();d.splice(d.length/2,0,m,c)}else d.push(m)}var q=b.startX,k=b.endX;v=v.slice();var l=b.isArea,N=l?2:1;w=w&&w.slice();if(!w)return[v,v];if(q&&k&&k.length){for(b=0;b<q.length;b++)if(q[b]===k[0]){var u=b;break}else if(q[0]===\nk[k.length-q.length+b]){u=b;var n=!0;break}else if(q[q.length-1]===k[k.length-q.length+b]){u=q.length-b;break}\"undefined\"===typeof u&&(w=[])}if(w.length&&G(u)){var J=v.length+u*N;n?(f(w,v),d(v,w)):(f(v,w),d(w,v))}return[w,v]};b.prototype.fillSetter=function(){b.prototype.strokeSetter.apply(this,arguments)};b.prototype.strokeSetter=function(){this.elem.attr(this.prop,D(this.start).tweenTo(D(this.end),this.pos),null,!0)};b.timers=[];return b}()});O(e,\"Core/Animation/AnimationUtilities.js\",[e[\"Core/Animation/Fx.js\"],\ne[\"Core/Utilities.js\"]],function(e,b){function D(d){return x(d)?w({duration:500,defer:0},d):{duration:d?500:0,defer:0}}function z(d,f){for(var q=e.timers.length;q--;)e.timers[q].elem!==d||f&&f!==e.timers[q].prop||(e.timers[q].stopped=!0)}var H=b.defined,G=b.getStyle,C=b.isArray,B=b.isNumber,x=b.isObject,w=b.merge,v=b.objectEach,f=b.pick;return{animate:function(d,f,k){var l,q=\"\",u,n;if(!x(k)){var b=arguments;k={duration:b[2],easing:b[3],complete:b[4]}}B(k.duration)||(k.duration=400);k.easing=\"function\"===\ntypeof k.easing?k.easing:Math[k.easing]||Math.easeInOutSine;k.curAnim=w(f);v(f,function(b,m){z(d,m);n=new e(d,k,m);u=void 0;\"d\"===m&&C(f.d)?(n.paths=n.initPath(d,d.pathArray,f.d),n.toD=f.d,l=0,u=1):d.attr?l=d.attr(m):(l=parseFloat(G(d,m))||0,\"opacity\"!==m&&(q=\"px\"));u||(u=b);\"string\"===typeof u&&u.match(\"px\")&&(u=u.replace(/px/g,\"\"));n.run(l,u,q)})},animObject:D,getDeferredAnimation:function(d,f,b){var l=D(f),q=0,u=0;(b?[b]:d.series).forEach(function(d){d=D(d.options.animation);q=f&&H(f.defer)?l.defer:\nMath.max(q,d.duration+d.defer);u=Math.min(l.duration,d.duration)});d.renderer.forExport&&(q=0);return{defer:Math.max(0,q-u),duration:Math.min(q,u)}},setAnimation:function(d,q){q.renderer.globalAnimation=f(d,q.options.chart.animation,!0)},stop:z}});O(e,\"Core/Renderer/HTML/AST.js\",[e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(e,b){var D=e.SVG_NS,z=b.attr,H=b.createElement,G=b.discardElement,C=b.error,B=b.isString,x=b.objectEach,w=b.splat;\"\";var v=!1;try{v=!!(new DOMParser).parseFromString(\"\",\n\"text/html\")}catch(f){}return function(){function f(d){this.nodes=\"string\"===typeof d?this.parseMarkup(d):d}f.filterUserAttributes=function(d){x(d,function(q,b){var l=!0;-1===f.allowedAttributes.indexOf(b)&&(l=!1);-1!==[\"background\",\"dynsrc\",\"href\",\"lowsrc\",\"src\"].indexOf(b)&&(l=B(q)&&f.allowedReferences.some(function(d){return 0===q.indexOf(d)}));l||(C(\"Highcharts warning: Invalid attribute '\"+b+\"' in config\"),delete d[b])});return d};f.setElementHTML=function(d,q){d.innerHTML=\"\";q&&(new f(q)).addToDOM(d)};\nf.prototype.addToDOM=function(d){function q(d,l){var b;w(d).forEach(function(d){var n=d.tagName,u=d.textContent?e.doc.createTextNode(d.textContent):void 0;if(n)if(\"#text\"===n)var k=u;else if(-1!==f.allowedTags.indexOf(n)){n=e.doc.createElementNS(\"svg\"===n?D:l.namespaceURI||D,n);var m=d.attributes||{};x(d,function(c,g){\"tagName\"!==g&&\"attributes\"!==g&&\"children\"!==g&&\"textContent\"!==g&&(m[g]=c)});z(n,f.filterUserAttributes(m));u&&n.appendChild(u);q(d.children||[],n);k=n}else C(\"Highcharts warning: Invalid tagName '\"+\nn+\"' in config\");k&&l.appendChild(k);b=k});return b}return q(this.nodes,d)};f.prototype.parseMarkup=function(d){var f=[];if(v)d=(new DOMParser).parseFromString(d,\"text/html\");else{var b=H(\"div\");b.innerHTML=d;d={body:b}}var l=function(d,f){var n=d.nodeName.toLowerCase(),b={tagName:n};if(\"#text\"===n){n=d.textContent||\"\";if(/^[\\s]*$/.test(n))return;b.textContent=n}if(n=d.attributes){var u={};[].forEach.call(n,function(c){u[c.name]=c.value});b.attributes=u}if(d.childNodes.length){var m=[];[].forEach.call(d.childNodes,\nfunction(c){l(c,m)});m.length&&(b.children=m)}f.push(b)};[].forEach.call(d.body.childNodes,function(d){return l(d,f)});b&&G(b);return f};f.allowedTags=\"a b br button caption circle clipPath code dd defs div dl dt em feComponentTransfer feFuncA feFuncB feFuncG feFuncR feGaussianBlur feOffset feMerge feMergeNode filter h1 h2 h3 h4 h5 h6 hr i img li linearGradient marker ol p path pattern pre rect small span stop strong style sub sup svg table text thead tbody tspan td th tr u ul #text\".split(\" \");f.allowedAttributes=\n\"aria-controls aria-describedby aria-expanded aria-haspopup aria-hidden aria-label aria-labelledby aria-live aria-pressed aria-readonly aria-roledescription aria-selected class clip-path color colspan cx cy d dx dy disabled fill height href id in markerHeight markerWidth offset opacity orient padding paddingLeft patternUnits r refX refY role scope slope src startOffset stdDeviation stroke stroke-linecap stroke-width style result rowspan summary target tabindex text-align textAnchor textLength type valign width x x1 x2 y y1 y2 zIndex\".split(\" \");\nf.allowedReferences=\"https:// http:// mailto: / ../ ./ #\".split(\" \");return f}()});O(e,\"Core/FormatUtilities.js\",[e[\"Core/Options.js\"],e[\"Core/Utilities.js\"]],function(e,b){function D(b,v,f,d){b=+b||0;v=+v;var q=z.lang,k=(b.toString().split(\".\")[1]||\"\").split(\"e\")[0].length,l=b.toString().split(\"e\"),N=v;if(-1===v)v=Math.min(k,20);else if(!C(v))v=2;else if(v&&l[1]&&0>l[1]){var u=v+ +l[1];0<=u?(l[0]=(+l[0]).toExponential(u).split(\"e\")[0],v=u):(l[0]=l[0].split(\".\")[0]||0,b=20>v?(l[0]*Math.pow(10,l[1])).toFixed(v):\n0,l[1]=0)}u=(Math.abs(l[1]?l[0]:b)+Math.pow(10,-Math.max(v,k)-1)).toFixed(v);k=String(x(u));var n=3<k.length?k.length%3:0;f=B(f,q.decimalPoint);d=B(d,q.thousandsSep);b=(0>b?\"-\":\"\")+(n?k.substr(0,n)+d:\"\");b=0>+l[1]&&!N?\"0\":b+k.substr(n).replace(/(\\d{3})(?=\\d)/g,\"$1\"+d);v&&(b+=f+u.slice(-v));l[1]&&0!==+b&&(b+=\"e\"+l[1]);return b}var z=e.defaultOptions,H=e.defaultTime,G=b.getNestedProperty,C=b.isNumber,B=b.pick,x=b.pInt;return{dateFormat:function(b,v,f){return H.dateFormat(b,v,f)},format:function(b,v,\nf){var d=\"{\",q=!1,k=/f$/,l=/\\.([0-9])/,N=z.lang,u=f&&f.time||H;f=f&&f.numberFormatter||D;for(var n=[];b;){var J=b.indexOf(d);if(-1===J)break;var E=b.slice(0,J);if(q){E=E.split(\":\");d=G(E.shift()||\"\",v);if(E.length&&\"number\"===typeof d)if(E=E.join(\":\"),k.test(E)){var m=parseInt((E.match(l)||[\"\",\"-1\"])[1],10);null!==d&&(d=f(d,m,N.decimalPoint,-1<E.indexOf(\",\")?N.thousandsSep:\"\"))}else d=u.dateFormat(E,d);n.push(d)}else n.push(E);b=b.slice(J+1);d=(q=!q)?\"}\":\"{\"}n.push(b);return n.join(\"\")},numberFormat:D}});\nO(e,\"Core/Renderer/SVG/SVGElement.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Renderer/HTML/AST.js\"],e[\"Core/Color/Color.js\"],e[\"Core/Globals.js\"],e[\"Core/Color/Palette.js\"],e[\"Core/Utilities.js\"]],function(e,b,I,z,H,G){var D=e.animate,B=e.animObject,x=e.stop,w=z.deg2rad,v=z.doc,f=z.noop,d=z.svg,q=z.SVG_NS,k=z.win,l=G.addEvent,N=G.attr,u=G.createElement,n=G.css,J=G.defined,E=G.erase,m=G.extend,c=G.fireEvent,g=G.isArray,a=G.isFunction,h=G.isNumber,r=G.isString,A=G.merge,y=G.objectEach,L=\nG.pick,P=G.pInt,R=G.syncTimeout,V=G.uniqueKey;e=function(){function e(){this.element=void 0;this.onEvents={};this.opacity=1;this.renderer=void 0;this.SVG_NS=q;this.symbolCustomAttribs=\"x y width height r start end innerR anchorX anchorY rounded\".split(\" \")}e.prototype._defaultGetter=function(a){a=L(this[a+\"Value\"],this[a],this.element?this.element.getAttribute(a):null,0);/^[\\-0-9\\.]+$/.test(a)&&(a=parseFloat(a));return a};e.prototype._defaultSetter=function(a,t,p){p.setAttribute(t,a)};e.prototype.add=\nfunction(a){var t=this.renderer,p=this.element;a&&(this.parentGroup=a);this.parentInverted=a&&a.inverted;\"undefined\"!==typeof this.textStr&&\"text\"===this.element.nodeName&&t.buildText(this);this.added=!0;if(!a||a.handleZ||this.zIndex)var c=this.zIndexSetter();c||(a?a.element:t.box).appendChild(p);if(this.onAdd)this.onAdd();return this};e.prototype.addClass=function(a,t){var p=t?\"\":this.attr(\"class\")||\"\";a=(a||\"\").split(/ /g).reduce(function(a,t){-1===p.indexOf(t)&&a.push(t);return a},p?[p]:[]).join(\" \");\na!==p&&this.attr(\"class\",a);return this};e.prototype.afterSetters=function(){this.doTransform&&(this.updateTransform(),this.doTransform=!1)};e.prototype.align=function(a,t,p){var c={},g=this.renderer,d=g.alignedObjects,F,h,K;if(a){if(this.alignOptions=a,this.alignByTranslate=t,!p||r(p))this.alignTo=F=p||\"renderer\",E(d,this),d.push(this),p=void 0}else a=this.alignOptions,t=this.alignByTranslate,F=this.alignTo;p=L(p,g[F],\"scrollablePlotBox\"===F?g.plotBox:void 0,g);F=a.align;var M=a.verticalAlign;g=\n(p.x||0)+(a.x||0);d=(p.y||0)+(a.y||0);\"right\"===F?h=1:\"center\"===F&&(h=2);h&&(g+=(p.width-(a.width||0))/h);c[t?\"translateX\":\"x\"]=Math.round(g);\"bottom\"===M?K=1:\"middle\"===M&&(K=2);K&&(d+=(p.height-(a.height||0))/K);c[t?\"translateY\":\"y\"]=Math.round(d);this[this.placed?\"animate\":\"attr\"](c);this.placed=!0;this.alignAttr=c;return this};e.prototype.alignSetter=function(a){var t={left:\"start\",center:\"middle\",right:\"end\"};t[a]&&(this.alignValue=a,this.element.setAttribute(\"text-anchor\",t[a]))};e.prototype.animate=\nfunction(a,t,p){var c=this,g=B(L(t,this.renderer.globalAnimation,!0));t=g.defer;L(v.hidden,v.msHidden,v.webkitHidden,!1)&&(g.duration=0);0!==g.duration?(p&&(g.complete=p),R(function(){c.element&&D(c,a,g)},t)):(this.attr(a,void 0,p),y(a,function(a,p){g.step&&g.step.call(this,a,{prop:p,pos:1,elem:this})},this));return this};e.prototype.applyTextOutline=function(a){var t=this.element;-1!==a.indexOf(\"contrast\")&&(a=a.replace(/contrast/g,this.renderer.getContrast(t.style.fill)));var p=a.split(\" \");a=p[p.length-\n1];if((p=p[0])&&\"none\"!==p&&z.svg){this.fakeTS=!0;this.ySetter=this.xSetter;p=p.replace(/(^[\\d\\.]+)(.*?)$/g,function(a,p,t){return 2*Number(p)+t});this.removeTextOutline();var c=v.createElementNS(q,\"tspan\");N(c,{\"class\":\"highcharts-text-outline\",fill:a,stroke:a,\"stroke-width\":p,\"stroke-linejoin\":\"round\"});[].forEach.call(t.childNodes,function(a){var p=a.cloneNode(!0);p.removeAttribute&&[\"fill\",\"stroke\",\"stroke-width\",\"stroke\"].forEach(function(a){return p.removeAttribute(a)});c.appendChild(p)});var g=\nv.createElementNS(q,\"tspan\");g.textContent=\"\\u200b\";[\"x\",\"y\"].forEach(function(a){var p=t.getAttribute(a);p&&g.setAttribute(a,p)});c.appendChild(g);t.insertBefore(c,t.firstChild)}};e.prototype.attr=function(a,t,p,c){var g=this.element,d=this.symbolCustomAttribs,h,r=this,K,m;if(\"string\"===typeof a&&\"undefined\"!==typeof t){var M=a;a={};a[M]=t}\"string\"===typeof a?r=(this[a+\"Getter\"]||this._defaultGetter).call(this,a,g):(y(a,function(p,t){K=!1;c||x(this,t);this.symbolName&&-1!==d.indexOf(t)&&(h||(this.symbolAttr(a),\nh=!0),K=!0);!this.rotation||\"x\"!==t&&\"y\"!==t||(this.doTransform=!0);K||(m=this[t+\"Setter\"]||this._defaultSetter,m.call(this,p,t,g),!this.styledMode&&this.shadows&&/^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(t)&&this.updateShadows(t,p,m))},this),this.afterSetters());p&&p.call(this);return r};e.prototype.clip=function(a){return this.attr(\"clip-path\",a?\"url(\"+this.renderer.url+\"#\"+a.id+\")\":\"none\")};e.prototype.crisp=function(a,t){t=t||a.strokeWidth||0;var p=Math.round(t)%2/2;a.x=Math.floor(a.x||\nthis.x||0)+p;a.y=Math.floor(a.y||this.y||0)+p;a.width=Math.floor((a.width||this.width||0)-2*p);a.height=Math.floor((a.height||this.height||0)-2*p);J(a.strokeWidth)&&(a.strokeWidth=t);return a};e.prototype.complexColor=function(a,t,p){var d=this.renderer,h,r,F,m,K,M,f,b,l,n,u=[],q;c(this.renderer,\"complexColor\",{args:arguments},function(){a.radialGradient?r=\"radialGradient\":a.linearGradient&&(r=\"linearGradient\");if(r){F=a[r];K=d.gradients;M=a.stops;l=p.radialReference;g(F)&&(a[r]=F={x1:F[0],y1:F[1],\nx2:F[2],y2:F[3],gradientUnits:\"userSpaceOnUse\"});\"radialGradient\"===r&&l&&!J(F.gradientUnits)&&(m=F,F=A(F,d.getRadialAttr(l,m),{gradientUnits:\"userSpaceOnUse\"}));y(F,function(a,p){\"id\"!==p&&u.push(p,a)});y(M,function(a){u.push(a)});u=u.join(\",\");if(K[u])n=K[u].attr(\"id\");else{F.id=n=V();var c=K[u]=d.createElement(r).attr(F).add(d.defs);c.radAttr=m;c.stops=[];M.forEach(function(a){0===a[1].indexOf(\"rgba\")?(h=I.parse(a[1]),f=h.get(\"rgb\"),b=h.get(\"a\")):(f=a[1],b=1);a=d.createElement(\"stop\").attr({offset:a[0],\n\"stop-color\":f,\"stop-opacity\":b}).add(c);c.stops.push(a)})}q=\"url(\"+d.url+\"#\"+n+\")\";p.setAttribute(t,q);p.gradient=u;a.toString=function(){return q}}})};e.prototype.css=function(a){var t=this.styles,p={},c=this.element,g=[\"textOutline\",\"textOverflow\",\"width\"],h=\"\",F=!t;a&&a.color&&(a.fill=a.color);t&&y(a,function(a,c){t&&t[c]!==a&&(p[c]=a,F=!0)});if(F){t&&(a=m(t,p));if(a)if(null===a.width||\"auto\"===a.width)delete this.textWidth;else if(\"text\"===c.nodeName.toLowerCase()&&a.width)var r=this.textWidth=\nP(a.width);this.styles=a;r&&!d&&this.renderer.forExport&&delete a.width;if(c.namespaceURI===this.SVG_NS){var K=function(a,p){return\"-\"+p.toLowerCase()};y(a,function(a,p){-1===g.indexOf(p)&&(h+=p.replace(/([A-Z])/g,K)+\":\"+a+\";\")});h&&N(c,\"style\",h)}else n(c,a);this.added&&(\"text\"===this.element.nodeName&&this.renderer.buildText(this),a&&a.textOutline&&this.applyTextOutline(a.textOutline))}return this};e.prototype.dashstyleSetter=function(a){var t=this[\"stroke-width\"];\"inherit\"===t&&(t=1);if(a=a&&a.toLowerCase()){var p=\na.replace(\"shortdashdotdot\",\"3,1,1,1,1,1,\").replace(\"shortdashdot\",\"3,1,1,1\").replace(\"shortdot\",\"1,1,\").replace(\"shortdash\",\"3,1,\").replace(\"longdash\",\"8,3,\").replace(/dot/g,\"1,3,\").replace(\"dash\",\"4,3,\").replace(/,$/,\"\").split(\",\");for(a=p.length;a--;)p[a]=\"\"+P(p[a])*L(t,NaN);a=p.join(\",\").replace(/NaN/g,\"none\");this.element.setAttribute(\"stroke-dasharray\",a)}};e.prototype.destroy=function(){var a=this,t=a.element||{},p=a.renderer,c=t.ownerSVGElement,g=p.isSVG&&\"SPAN\"===t.nodeName&&a.parentGroup||\nvoid 0;t.onclick=t.onmouseout=t.onmouseover=t.onmousemove=t.point=null;x(a);if(a.clipPath&&c){var d=a.clipPath;[].forEach.call(c.querySelectorAll(\"[clip-path],[CLIP-PATH]\"),function(a){-1<a.getAttribute(\"clip-path\").indexOf(d.element.id)&&a.removeAttribute(\"clip-path\")});a.clipPath=d.destroy()}if(a.stops){for(c=0;c<a.stops.length;c++)a.stops[c].destroy();a.stops.length=0;a.stops=void 0}a.safeRemoveChild(t);for(p.styledMode||a.destroyShadows();g&&g.div&&0===g.div.childNodes.length;)t=g.parentGroup,\na.safeRemoveChild(g.div),delete g.div,g=t;a.alignTo&&E(p.alignedObjects,a);y(a,function(p,c){a[c]&&a[c].parentGroup===a&&a[c].destroy&&a[c].destroy();delete a[c]})};e.prototype.destroyShadows=function(){(this.shadows||[]).forEach(function(a){this.safeRemoveChild(a)},this);this.shadows=void 0};e.prototype.destroyTextPath=function(a,c){var p=a.getElementsByTagName(\"text\")[0];if(p){if(p.removeAttribute(\"dx\"),p.removeAttribute(\"dy\"),c.element.setAttribute(\"id\",\"\"),this.textPathWrapper&&p.getElementsByTagName(\"textPath\").length){for(a=\nthis.textPathWrapper.element.childNodes;a.length;)p.appendChild(a[0]);p.removeChild(this.textPathWrapper.element)}}else if(a.getAttribute(\"dx\")||a.getAttribute(\"dy\"))a.removeAttribute(\"dx\"),a.removeAttribute(\"dy\");this.textPathWrapper&&(this.textPathWrapper=this.textPathWrapper.destroy())};e.prototype.dSetter=function(a,c,p){g(a)&&(\"string\"===typeof a[0]&&(a=this.renderer.pathToSegments(a)),this.pathArray=a,a=a.reduce(function(a,p,c){return p&&p.join?(c?a+\" \":\"\")+p.join(\" \"):(p||\"\").toString()},\"\"));\n/(NaN| {2}|^$)/.test(a)&&(a=\"M 0 0\");this[c]!==a&&(p.setAttribute(c,a),this[c]=a)};e.prototype.fadeOut=function(a){var c=this;c.animate({opacity:0},{duration:L(a,150),complete:function(){c.attr({y:-9999}).hide()}})};e.prototype.fillSetter=function(a,c,p){\"string\"===typeof a?p.setAttribute(c,a):a&&this.complexColor(a,c,p)};e.prototype.getBBox=function(c,t){var p=this.renderer,g=this.element,d=this.styles,h=this.textStr,F=p.cache,r=p.cacheKeys,K=g.namespaceURI===this.SVG_NS;t=L(t,this.rotation,0);var A=\np.styledMode?g&&e.prototype.getStyle.call(g,\"font-size\"):d&&d.fontSize,f;if(J(h)){var b=h.toString();-1===b.indexOf(\"<\")&&(b=b.replace(/[0-9]/g,\"0\"));b+=[\"\",t,A,this.textWidth,d&&d.textOverflow,d&&d.fontWeight].join()}b&&!c&&(f=F[b]);if(!f){if(K||p.forExport){try{var y=this.fakeTS&&function(a){var p=g.querySelector(\".highcharts-text-outline\");p&&n(p,{display:a})};a(y)&&y(\"none\");f=g.getBBox?m({},g.getBBox()):{width:g.offsetWidth,height:g.offsetHeight};a(y)&&y(\"\")}catch(Y){\"\"}if(!f||0>f.width)f={width:0,\nheight:0}}else f=this.htmlGetBBox();p.isSVG&&(c=f.width,p=f.height,K&&(f.height=p={\"11px,17\":14,\"13px,20\":16}[d&&d.fontSize+\",\"+Math.round(p)]||p),t&&(d=t*w,f.width=Math.abs(p*Math.sin(d))+Math.abs(c*Math.cos(d)),f.height=Math.abs(p*Math.cos(d))+Math.abs(c*Math.sin(d))));if(b&&0<f.height){for(;250<r.length;)delete F[r.shift()];F[b]||r.push(b);F[b]=f}}return f};e.prototype.getStyle=function(a){return k.getComputedStyle(this.element||this,\"\").getPropertyValue(a)};e.prototype.hasClass=function(a){return-1!==\n(\"\"+this.attr(\"class\")).split(\" \").indexOf(a)};e.prototype.hide=function(a){a?this.attr({y:-9999}):this.attr({visibility:\"hidden\"});return this};e.prototype.htmlGetBBox=function(){return{height:0,width:0,x:0,y:0}};e.prototype.init=function(a,t){this.element=\"span\"===t?u(t):v.createElementNS(this.SVG_NS,t);this.renderer=a;c(this,\"afterInit\")};e.prototype.invert=function(a){this.inverted=a;this.updateTransform();return this};e.prototype.on=function(a,c){var p=this.onEvents;if(p[a])p[a]();p[a]=l(this.element,\na,c);return this};e.prototype.opacitySetter=function(a,c,p){this.opacity=a=Number(Number(a).toFixed(3));p.setAttribute(c,a)};e.prototype.removeClass=function(a){return this.attr(\"class\",(\"\"+this.attr(\"class\")).replace(r(a)?new RegExp(\"(^| )\"+a+\"( |$)\"):a,\" \").replace(/ +/g,\" \").trim())};e.prototype.removeTextOutline=function(){var a=this.element.querySelector(\"tspan.highcharts-text-outline\");a&&this.safeRemoveChild(a)};e.prototype.safeRemoveChild=function(a){var c=a.parentNode;c&&c.removeChild(a)};\ne.prototype.setRadialReference=function(a){var c=this.element.gradient&&this.renderer.gradients[this.element.gradient];this.element.radialReference=a;c&&c.radAttr&&c.animate(this.renderer.getRadialAttr(a,c.radAttr));return this};e.prototype.setTextPath=function(a,c){var p=this.element,t=this.text?this.text.element:p,g={textAnchor:\"text-anchor\"},d=!1,F=this.textPathWrapper,r=!F;c=A(!0,{enabled:!0,attributes:{dy:-5,startOffset:\"50%\",textAnchor:\"middle\"}},c);var K=b.filterUserAttributes(c.attributes);\nif(a&&c&&c.enabled){F&&null===F.element.parentNode?(r=!0,F=F.destroy()):F&&this.removeTextOutline.call(F.parentGroup);this.options&&this.options.padding&&(K.dx=-this.options.padding);F||(this.textPathWrapper=F=this.renderer.createElement(\"textPath\"),d=!0);var m=F.element;(c=a.element.getAttribute(\"id\"))||a.element.setAttribute(\"id\",c=V());if(r)for(t.setAttribute(\"y\",0),h(K.dx)&&t.setAttribute(\"x\",-K.dx),a=[].slice.call(t.childNodes),r=0;r<a.length;r++){var l=a[r];l.nodeType!==Node.TEXT_NODE&&\"tspan\"!==\nl.nodeName||m.appendChild(l)}d&&F&&F.add({element:t});m.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"href\",this.renderer.url+\"#\"+c);J(K.dy)&&(m.parentNode.setAttribute(\"dy\",K.dy),delete K.dy);J(K.dx)&&(m.parentNode.setAttribute(\"dx\",K.dx),delete K.dx);y(K,function(a,p){m.setAttribute(g[p]||p,a)});p.removeAttribute(\"transform\");this.removeTextOutline.call(F);this.text&&!this.renderer.styledMode&&this.attr({fill:\"none\",\"stroke-width\":0});this.applyTextOutline=this.updateTransform=f}else F&&(delete this.updateTransform,\ndelete this.applyTextOutline,this.destroyTextPath(p,a),this.updateTransform(),this.options&&this.options.rotation&&this.applyTextOutline(this.options.style.textOutline));return this};e.prototype.shadow=function(a,c,p){var t=[],g=this.element,d=this.oldShadowOptions,h={color:H.neutralColor100,offsetX:1,offsetY:1,opacity:.15,width:3},r=!1,K;!0===a?K=h:\"object\"===typeof a&&(K=m(h,a));K&&(K&&d&&y(K,function(a,p){a!==d[p]&&(r=!0)}),r&&this.destroyShadows(),this.oldShadowOptions=K);if(!K)this.destroyShadows();\nelse if(!this.shadows){var A=K.opacity/K.width;var f=this.parentInverted?\"translate(-1,-1)\":\"translate(\"+K.offsetX+\", \"+K.offsetY+\")\";for(h=1;h<=K.width;h++){var b=g.cloneNode(!1);var l=2*K.width+1-2*h;N(b,{stroke:a.color||H.neutralColor100,\"stroke-opacity\":A*h,\"stroke-width\":l,transform:f,fill:\"none\"});b.setAttribute(\"class\",(b.getAttribute(\"class\")||\"\")+\" highcharts-shadow\");p&&(N(b,\"height\",Math.max(N(b,\"height\")-l,0)),b.cutHeight=l);c?c.element.appendChild(b):g.parentNode&&g.parentNode.insertBefore(b,\ng);t.push(b)}this.shadows=t}return this};e.prototype.show=function(a){return this.attr({visibility:a?\"inherit\":\"visible\"})};e.prototype.strokeSetter=function(a,c,p){this[c]=a;this.stroke&&this[\"stroke-width\"]?(e.prototype.fillSetter.call(this,this.stroke,\"stroke\",p),p.setAttribute(\"stroke-width\",this[\"stroke-width\"]),this.hasStroke=!0):\"stroke-width\"===c&&0===a&&this.hasStroke?(p.removeAttribute(\"stroke\"),this.hasStroke=!1):this.renderer.styledMode&&this[\"stroke-width\"]&&(p.setAttribute(\"stroke-width\",\nthis[\"stroke-width\"]),this.hasStroke=!0)};e.prototype.strokeWidth=function(){if(!this.renderer.styledMode)return this[\"stroke-width\"]||0;var a=this.getStyle(\"stroke-width\"),c=0;if(a.indexOf(\"px\")===a.length-2)c=P(a);else if(\"\"!==a){var p=v.createElementNS(q,\"rect\");N(p,{width:a,\"stroke-width\":0});this.element.parentNode.appendChild(p);c=p.getBBox().width;p.parentNode.removeChild(p)}return c};e.prototype.symbolAttr=function(a){var c=this;\"x y r start end width height innerR anchorX anchorY clockwise\".split(\" \").forEach(function(p){c[p]=\nL(a[p],c[p])});c.attr({d:c.renderer.symbols[c.symbolName](c.x,c.y,c.width,c.height,c)})};e.prototype.textSetter=function(a){a!==this.textStr&&(delete this.textPxLength,this.textStr=a,this.added&&this.renderer.buildText(this))};e.prototype.titleSetter=function(a){var c=this.element,p=c.getElementsByTagName(\"title\")[0]||v.createElementNS(this.SVG_NS,\"title\");c.insertBefore?c.insertBefore(p,c.firstChild):c.appendChild(p);p.textContent=String(L(a,\"\")).replace(/<[^>]*>/g,\"\").replace(/&lt;/g,\"<\").replace(/&gt;/g,\n\">\")};e.prototype.toFront=function(){var a=this.element;a.parentNode.appendChild(a);return this};e.prototype.translate=function(a,c){return this.attr({translateX:a,translateY:c})};e.prototype.updateShadows=function(a,c,p){var t=this.shadows;if(t)for(var g=t.length;g--;)p.call(t[g],\"height\"===a?Math.max(c-(t[g].cutHeight||0),0):\"d\"===a?this.d:c,a,t[g])};e.prototype.updateTransform=function(){var a=this.scaleX,c=this.scaleY,p=this.inverted,g=this.rotation,d=this.matrix,h=this.element,F=this.translateX||\n0,r=this.translateY||0;p&&(F+=this.width,r+=this.height);F=[\"translate(\"+F+\",\"+r+\")\"];J(d)&&F.push(\"matrix(\"+d.join(\",\")+\")\");p?F.push(\"rotate(90) scale(-1,1)\"):g&&F.push(\"rotate(\"+g+\" \"+L(this.rotationOriginX,h.getAttribute(\"x\"),0)+\" \"+L(this.rotationOriginY,h.getAttribute(\"y\")||0)+\")\");(J(a)||J(c))&&F.push(\"scale(\"+L(a,1)+\" \"+L(c,1)+\")\");F.length&&h.setAttribute(\"transform\",F.join(\" \"))};e.prototype.visibilitySetter=function(a,c,p){\"inherit\"===a?p.removeAttribute(c):this[c]!==a&&p.setAttribute(c,\na);this[c]=a};e.prototype.xGetter=function(a){\"circle\"===this.element.nodeName&&(\"x\"===a?a=\"cx\":\"y\"===a&&(a=\"cy\"));return this._defaultGetter(a)};e.prototype.zIndexSetter=function(a,c){var p=this.renderer,g=this.parentGroup,t=(g||p).element||p.box,d=this.element;p=t===p.box;var h=!1;var r=this.added;var K;J(a)?(d.setAttribute(\"data-z-index\",a),a=+a,this[c]===a&&(r=!1)):J(this[c])&&d.removeAttribute(\"data-z-index\");this[c]=a;if(r){(a=this.zIndex)&&g&&(g.handleZ=!0);c=t.childNodes;for(K=c.length-1;0<=\nK&&!h;K--){g=c[K];r=g.getAttribute(\"data-z-index\");var m=!J(r);if(g!==d)if(0>a&&m&&!p&&!K)t.insertBefore(d,c[K]),h=!0;else if(P(r)<=a||m&&(!J(a)||0<=a))t.insertBefore(d,c[K+1]||null),h=!0}h||(t.insertBefore(d,c[p?3:0]||null),h=!0)}return h};return e}();e.prototype[\"stroke-widthSetter\"]=e.prototype.strokeSetter;e.prototype.yGetter=e.prototype.xGetter;e.prototype.matrixSetter=e.prototype.rotationOriginXSetter=e.prototype.rotationOriginYSetter=e.prototype.rotationSetter=e.prototype.scaleXSetter=e.prototype.scaleYSetter=\ne.prototype.translateXSetter=e.prototype.translateYSetter=e.prototype.verticalAlignSetter=function(a,c){this[c]=a;this.doTransform=!0};\"\";return e});O(e,\"Core/Renderer/SVG/SVGLabel.js\",[e[\"Core/Renderer/SVG/SVGElement.js\"],e[\"Core/Utilities.js\"]],function(e,b){function D(b,f){C(b)?b!==this[f]&&(this[f]=b,this.updateTextPadding()):this[f]=void 0}var z=this&&this.__extends||function(){var b=function(f,d){b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b}||function(d,\nb){for(var f in b)b.hasOwnProperty(f)&&(d[f]=b[f])};return b(f,d)};return function(f,d){function q(){this.constructor=f}b(f,d);f.prototype=null===d?Object.create(d):(q.prototype=d.prototype,new q)}}(),H=b.defined,G=b.extend,C=b.isNumber,B=b.merge,x=b.pick,w=b.removeEvent;return function(b){function f(d,q,k,l,e,u,n,v,E,m){var c=b.call(this)||this;c.paddingSetter=D;c.paddingLeftSetter=D;c.paddingRightSetter=D;c.init(d,\"g\");c.textStr=q;c.x=k;c.y=l;c.anchorX=u;c.anchorY=n;c.baseline=E;c.className=m;\"button\"!==\nm&&c.addClass(\"highcharts-label\");m&&c.addClass(\"highcharts-\"+m);c.text=d.text(\"\",0,0,v).attr({zIndex:1});if(\"string\"===typeof e){var g=/^url\\((.*?)\\)$/.test(e);if(c.renderer.symbols[e]||g)c.symbolKey=e}c.bBox=f.emptyBBox;c.padding=3;c.baselineOffset=0;c.needsBox=d.styledMode||g;c.deferredAttr={};c.alignFactor=0;return c}z(f,b);f.prototype.alignSetter=function(d){d={left:0,center:.5,right:1}[d];d!==this.alignFactor&&(this.alignFactor=d,this.bBox&&C(this.xSetting)&&this.attr({x:this.xSetting}))};f.prototype.anchorXSetter=\nfunction(d,b){this.anchorX=d;this.boxAttr(b,Math.round(d)-this.getCrispAdjust()-this.xSetting)};f.prototype.anchorYSetter=function(d,b){this.anchorY=d;this.boxAttr(b,d-this.ySetting)};f.prototype.boxAttr=function(d,b){this.box?this.box.attr(d,b):this.deferredAttr[d]=b};f.prototype.css=function(d){if(d){var b={},k=void 0;d=B(d);f.textProps.forEach(function(f){\"undefined\"!==typeof d[f]&&(b[f]=d[f],delete d[f])});this.text.css(b);k=\"width\"in b;\"fontSize\"in b||\"fontWeight\"in b?this.updateTextPadding():\nk&&this.updateBoxSize()}return e.prototype.css.call(this,d)};f.prototype.destroy=function(){w(this.element,\"mouseenter\");w(this.element,\"mouseleave\");this.text&&this.text.destroy();this.box&&(this.box=this.box.destroy());e.prototype.destroy.call(this)};f.prototype.fillSetter=function(d,b){d&&(this.needsBox=!0);this.fill=d;this.boxAttr(b,d)};f.prototype.getBBox=function(){this.textStr&&0===this.bBox.width&&0===this.bBox.height&&this.updateBoxSize();var d=this.padding,b=x(this.paddingLeft,d);return{width:this.width,\nheight:this.height,x:this.bBox.x-b,y:this.bBox.y-d}};f.prototype.getCrispAdjust=function(){return this.renderer.styledMode&&this.box?this.box.strokeWidth()%2/2:(this[\"stroke-width\"]?parseInt(this[\"stroke-width\"],10):0)%2/2};f.prototype.heightSetter=function(d){this.heightSetting=d};f.prototype.on=function(d,b){var f=this,l=f.text,q=l&&\"SPAN\"===l.element.tagName?l:void 0;if(q){var u=function(l){(\"mouseenter\"===d||\"mouseleave\"===d)&&l.relatedTarget instanceof Element&&(f.element.compareDocumentPosition(l.relatedTarget)&\nNode.DOCUMENT_POSITION_CONTAINED_BY||q.element.compareDocumentPosition(l.relatedTarget)&Node.DOCUMENT_POSITION_CONTAINED_BY)||b.call(f.element,l)};q.on(d,u)}e.prototype.on.call(f,d,u||b);return f};f.prototype.onAdd=function(){var d=this.textStr;this.text.add(this);this.attr({text:H(d)?d:\"\",x:this.x,y:this.y});this.box&&H(this.anchorX)&&this.attr({anchorX:this.anchorX,anchorY:this.anchorY})};f.prototype.rSetter=function(d,b){this.boxAttr(b,d)};f.prototype.shadow=function(d){d&&!this.renderer.styledMode&&\n(this.updateBoxSize(),this.box&&this.box.shadow(d));return this};f.prototype.strokeSetter=function(d,b){this.stroke=d;this.boxAttr(b,d)};f.prototype[\"stroke-widthSetter\"]=function(d,b){d&&(this.needsBox=!0);this[\"stroke-width\"]=d;this.boxAttr(b,d)};f.prototype[\"text-alignSetter\"]=function(d){this.textAlign=d};f.prototype.textSetter=function(d){\"undefined\"!==typeof d&&this.text.attr({text:d});this.updateTextPadding()};f.prototype.updateBoxSize=function(){var d=this.text.element.style,b={},e=this.padding,\nl=this.bBox=C(this.widthSetting)&&C(this.heightSetting)&&!this.textAlign||!H(this.text.textStr)?f.emptyBBox:this.text.getBBox();this.width=this.getPaddedWidth();this.height=(this.heightSetting||l.height||0)+2*e;this.baselineOffset=e+Math.min(this.renderer.fontMetrics(d&&d.fontSize,this.text).b,l.height||Infinity);this.needsBox&&(this.box||(d=this.box=this.symbolKey?this.renderer.symbol(this.symbolKey):this.renderer.rect(),d.addClass((\"button\"===this.className?\"\":\"highcharts-label-box\")+(this.className?\n\" highcharts-\"+this.className+\"-box\":\"\")),d.add(this)),d=this.getCrispAdjust(),b.x=d,b.y=(this.baseline?-this.baselineOffset:0)+d,b.width=Math.round(this.width),b.height=Math.round(this.height),this.box.attr(G(b,this.deferredAttr)),this.deferredAttr={})};f.prototype.updateTextPadding=function(){var d=this.text;this.updateBoxSize();var b=this.baseline?0:this.baselineOffset,f=x(this.paddingLeft,this.padding);H(this.widthSetting)&&this.bBox&&(\"center\"===this.textAlign||\"right\"===this.textAlign)&&(f+=\n{center:.5,right:1}[this.textAlign]*(this.widthSetting-this.bBox.width));if(f!==d.x||b!==d.y)d.attr(\"x\",f),d.hasBoxWidthChanged&&(this.bBox=d.getBBox(!0)),\"undefined\"!==typeof b&&d.attr(\"y\",b);d.x=f;d.y=b};f.prototype.widthSetter=function(d){this.widthSetting=C(d)?d:void 0};f.prototype.getPaddedWidth=function(){var d=this.padding,b=x(this.paddingLeft,d);d=x(this.paddingRight,d);return(this.widthSetting||this.bBox.width||0)+b+d};f.prototype.xSetter=function(d){this.x=d;this.alignFactor&&(d-=this.alignFactor*\nthis.getPaddedWidth(),this[\"forceAnimate:x\"]=!0);this.xSetting=Math.round(d);this.attr(\"translateX\",this.xSetting)};f.prototype.ySetter=function(d){this.ySetting=this.y=Math.round(d);this.attr(\"translateY\",this.ySetting)};f.emptyBBox={width:0,height:0,x:0,y:0};f.textProps=\"color direction fontFamily fontSize fontStyle fontWeight lineHeight textAlign textDecoration textOutline textOverflow width\".split(\" \");return f}(e)});O(e,\"Core/Renderer/SVG/TextBuilder.js\",[e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"],\ne[\"Core/Renderer/HTML/AST.js\"]],function(e,b,I){var D=e.doc,H=e.SVG_NS,G=b.attr,C=b.isString,B=b.objectEach,x=b.pick;return function(){function b(b){var f=b.styles;this.renderer=b.renderer;this.svgElement=b;this.width=b.textWidth;this.textLineHeight=f&&f.lineHeight;this.textOutline=f&&f.textOutline;this.ellipsis=!(!f||\"ellipsis\"!==f.textOverflow);this.noWrap=!(!f||\"nowrap\"!==f.whiteSpace);this.fontSize=f&&f.fontSize}b.prototype.buildSVG=function(){var b=this.svgElement,f=b.element,d=b.renderer,e=\nx(b.textStr,\"\").toString(),k=-1!==e.indexOf(\"<\"),l=f.childNodes,N=l.length;d=this.width&&!b.added&&d.box;var u=/<br.*?>/g;var n=[e,this.ellipsis,this.noWrap,this.textLineHeight,this.textOutline,this.fontSize,this.width].join();if(n!==b.textCache){b.textCache=n;for(delete b.actualWidth;N--;)f.removeChild(l[N]);k||this.ellipsis||this.width||-1!==e.indexOf(\" \")&&(!this.noWrap||u.test(e))?\"\"!==e&&(d&&d.appendChild(f),e=new I(e),this.modifyTree(e.nodes),e.addToDOM(b.element),this.modifyDOM(),this.ellipsis&&\n-1!==(f.textContent||\"\").indexOf(\"\\u2026\")&&b.attr(\"title\",this.unescapeEntities(b.textStr||\"\",[\"&lt;\",\"&gt;\"])),d&&d.removeChild(f)):f.appendChild(D.createTextNode(this.unescapeEntities(e)));C(this.textOutline)&&b.applyTextOutline&&b.applyTextOutline(this.textOutline)}};b.prototype.modifyDOM=function(){var b=this,f=this.svgElement,d=G(f.element,\"x\");[].forEach.call(f.element.querySelectorAll(\"tspan.highcharts-br\"),function(f){f.nextSibling&&f.previousSibling&&G(f,{dy:b.getLineHeight(f.nextSibling),\nx:d})});var e=this.width||0;if(e){var k=function(l,u){var n=l.textContent||\"\",k=n.replace(/([^\\^])-/g,\"$1- \").split(\" \"),q=!b.noWrap&&(1<k.length||1<f.element.childNodes.length),m=b.getLineHeight(u),c=0,g=f.actualWidth;if(b.ellipsis)n&&b.truncate(l,n,void 0,0,Math.max(0,e-parseInt(b.fontSize||12,10)),function(a,c){return a.substring(0,c)+\"\\u2026\"});else if(q){n=[];for(q=[];u.firstChild&&u.firstChild!==l;)q.push(u.firstChild),u.removeChild(u.firstChild);for(;k.length;)k.length&&!b.noWrap&&0<c&&(n.push(l.textContent||\n\"\"),l.textContent=k.join(\" \").replace(/- /g,\"-\")),b.truncate(l,void 0,k,0===c?g||0:0,e,function(a,c){return k.slice(0,c).join(\" \").replace(/- /g,\"-\")}),g=f.actualWidth,c++;q.forEach(function(a){u.insertBefore(a,l)});n.forEach(function(a){u.insertBefore(D.createTextNode(a),l);a=D.createElementNS(H,\"tspan\");a.textContent=\"\\u200b\";G(a,{dy:m,x:d});u.insertBefore(a,l)})}},l=function(d){[].slice.call(d.childNodes).forEach(function(b){b.nodeType===Node.TEXT_NODE?k(b,d):(-1!==b.className.baseVal.indexOf(\"highcharts-br\")&&\n(f.actualWidth=0),l(b))})};l(f.element)}};b.prototype.getLineHeight=function(b){var f;b=b.nodeType===Node.TEXT_NODE?b.parentElement:b;this.renderer.styledMode||(f=b&&/(px|em)$/.test(b.style.fontSize)?b.style.fontSize:this.fontSize||this.renderer.style.fontSize||12);return this.textLineHeight?parseInt(this.textLineHeight.toString(),10):this.renderer.fontMetrics(f,b||this.svgElement.element).h};b.prototype.modifyTree=function(b){var f=this,d=function(e,k){var l=e.tagName,q=f.renderer.styledMode,u=e.attributes||\n{};if(\"b\"===l||\"strong\"===l)q?u[\"class\"]=\"highcharts-strong\":u.style=\"font-weight:bold;\"+(u.style||\"\");else if(\"i\"===l||\"em\"===l)q?u[\"class\"]=\"highcharts-emphasized\":u.style=\"font-style:italic;\"+(u.style||\"\");C(u.style)&&(u.style=u.style.replace(/(;| |^)color([ :])/,\"$1fill$2\"));\"br\"===l&&(u[\"class\"]=\"highcharts-br\",e.textContent=\"\\u200b\",(k=b[k+1])&&k.textContent&&(k.textContent=k.textContent.replace(/^ +/gm,\"\")));\"#text\"!==l&&\"a\"!==l&&(e.tagName=\"tspan\");e.attributes=u;e.children&&e.children.filter(function(d){return\"#text\"!==\nd.tagName}).forEach(d)};for(b.forEach(d);b[0]&&\"tspan\"===b[0].tagName&&!b[0].children;)b.splice(0,1)};b.prototype.truncate=function(b,f,d,e,k,l){var q=this.svgElement,u=q.renderer,n=q.rotation,J=[],E=d?1:0,m=(f||d||\"\").length,c=m,g,a=function(a,c){c=c||a;var g=b.parentNode;if(g&&\"undefined\"===typeof J[c])if(g.getSubStringLength)try{J[c]=e+g.getSubStringLength(0,d?c+1:c)}catch(L){\"\"}else u.getSpanWidth&&(b.textContent=l(f||d,a),J[c]=e+u.getSpanWidth(q,b));return J[c]};q.rotation=0;var h=a(b.textContent.length);\nif(e+h>k){for(;E<=m;)c=Math.ceil((E+m)/2),d&&(g=l(d,c)),h=a(c,g&&g.length-1),E===m?E=m+1:h>k?m=c-1:E=c;0===m?b.textContent=\"\":f&&m===f.length-1||(b.textContent=g||l(f||d,c))}d&&d.splice(0,c);q.actualWidth=h;q.rotation=n};b.prototype.unescapeEntities=function(b,f){B(this.renderer.escapes,function(d,e){f&&-1!==f.indexOf(d)||(b=b.toString().replace(new RegExp(d,\"g\"),e))});return b};return b}()});O(e,\"Core/Renderer/SVG/SVGRenderer.js\",[e[\"Core/Color/Color.js\"],e[\"Core/Globals.js\"],e[\"Core/Color/Palette.js\"],\ne[\"Core/Renderer/SVG/SVGElement.js\"],e[\"Core/Renderer/SVG/SVGLabel.js\"],e[\"Core/Renderer/HTML/AST.js\"],e[\"Core/Renderer/SVG/TextBuilder.js\"],e[\"Core/Utilities.js\"]],function(e,b,I,z,H,G,C,B){var x=B.addEvent,w=B.attr,v=B.createElement,f=B.css,d=B.defined,q=B.destroyObjectProperties,k=B.extend,l=B.isArray,N=B.isNumber,u=B.isObject,n=B.isString,J=B.merge,E=B.pick,m=B.pInt,c=B.uniqueKey,g=b.charts,a=b.deg2rad,h=b.doc,r=b.isFirefox,A=b.isMS,y=b.isWebKit,L=b.noop,P=b.SVG_NS,R=b.symbolSizes,V=b.win,Q;B=\nfunction(){function t(a,c,g,t,d,h,r){this.width=this.url=this.style=this.isSVG=this.imgCount=this.height=this.gradients=this.globalAnimation=this.defs=this.chartIndex=this.cacheKeys=this.cache=this.boxWrapper=this.box=this.alignedObjects=void 0;this.init(a,c,g,t,d,h,r)}t.prototype.init=function(a,c,g,t,d,b,K){var p=this.createElement(\"svg\").attr({version:\"1.1\",\"class\":\"highcharts-root\"});K||p.css(this.getStyle(t));t=p.element;a.appendChild(t);w(a,\"dir\",\"ltr\");-1===a.innerHTML.indexOf(\"xmlns\")&&w(t,\n\"xmlns\",this.SVG_NS);this.isSVG=!0;this.box=t;this.boxWrapper=p;this.alignedObjects=[];this.url=this.getReferenceURL();this.createElement(\"desc\").add().element.appendChild(h.createTextNode(\"Created with Highcharts 9.1.0\"));this.defs=this.createElement(\"defs\").add();this.allowHTML=b;this.forExport=d;this.styledMode=K;this.gradients={};this.cache={};this.cacheKeys=[];this.imgCount=0;this.setSize(c,g,!1);var F;r&&a.getBoundingClientRect&&(c=function(){f(a,{left:0,top:0});F=a.getBoundingClientRect();\nf(a,{left:Math.ceil(F.left)-F.left+\"px\",top:Math.ceil(F.top)-F.top+\"px\"})},c(),this.unSubPixelFix=x(V,\"resize\",c))};t.prototype.definition=function(a){return(new G([a])).addToDOM(this.defs.element)};t.prototype.getReferenceURL=function(){if((r||y)&&h.getElementsByTagName(\"base\").length){if(!d(Q)){var a=c();a=(new G([{tagName:\"svg\",attributes:{width:8,height:8},children:[{tagName:\"defs\",children:[{tagName:\"clipPath\",attributes:{id:a},children:[{tagName:\"rect\",attributes:{width:4,height:4}}]}]},{tagName:\"rect\",\nattributes:{id:\"hitme\",width:8,height:8,\"clip-path\":\"url(#\"+a+\")\",fill:\"rgba(0,0,0,0.001)\"}}]}])).addToDOM(h.body);f(a,{position:\"fixed\",top:0,left:0,zIndex:9E5});var g=h.elementFromPoint(6,6);Q=\"hitme\"===(g&&g.id);h.body.removeChild(a)}if(Q)return V.location.href.split(\"#\")[0].replace(/<[^>]*>/g,\"\").replace(/([\\('\\)])/g,\"\\\\$1\").replace(/ /g,\"%20\")}return\"\"};t.prototype.getStyle=function(a){return this.style=k({fontFamily:'\"Lucida Grande\", \"Lucida Sans Unicode\", Arial, Helvetica, sans-serif',fontSize:\"12px\"},\na)};t.prototype.setStyle=function(a){this.boxWrapper.css(this.getStyle(a))};t.prototype.isHidden=function(){return!this.boxWrapper.getBBox().width};t.prototype.destroy=function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();q(this.gradients||{});this.gradients=null;a&&(this.defs=a.destroy());this.unSubPixelFix&&this.unSubPixelFix();return this.alignedObjects=null};t.prototype.createElement=function(a){var c=new this.Element;c.init(this,a);return c};t.prototype.getRadialAttr=\nfunction(a,c){return{cx:a[0]-a[2]/2+(c.cx||0)*a[2],cy:a[1]-a[2]/2+(c.cy||0)*a[2],r:(c.r||0)*a[2]}};t.prototype.buildText=function(a){(new C(a)).buildSVG()};t.prototype.getContrast=function(a){a=e.parse(a).rgba;a[0]*=1;a[1]*=1.2;a[2]*=.5;return 459<a[0]+a[1]+a[2]?\"#000000\":\"#FFFFFF\"};t.prototype.button=function(a,c,g,t,d,h,r,b,m,f){var p=this.label(a,c,g,m,void 0,void 0,f,void 0,\"button\"),F=0,K=this.styledMode,y=d?J(d):{};a=y&&y.style||{};y=G.filterUserAttributes(y);p.attr(J({padding:8,r:2},y));if(!K){y=\nJ({fill:I.neutralColor3,stroke:I.neutralColor20,\"stroke-width\":1,style:{color:I.neutralColor80,cursor:\"pointer\",fontWeight:\"normal\"}},{style:a},y);var l=y.style;delete y.style;h=J(y,{fill:I.neutralColor10},G.filterUserAttributes(h||{}));var S=h.style;delete h.style;r=J(y,{fill:I.highlightColor10,style:{color:I.neutralColor100,fontWeight:\"bold\"}},G.filterUserAttributes(r||{}));var u=r.style;delete r.style;b=J(y,{style:{color:I.neutralColor20}},G.filterUserAttributes(b||{}));var n=b.style;delete b.style}x(p.element,\nA?\"mouseover\":\"mouseenter\",function(){3!==F&&p.setState(1)});x(p.element,A?\"mouseout\":\"mouseleave\",function(){3!==F&&p.setState(F)});p.setState=function(a){1!==a&&(p.state=F=a);p.removeClass(/highcharts-button-(normal|hover|pressed|disabled)/).addClass(\"highcharts-button-\"+[\"normal\",\"hover\",\"pressed\",\"disabled\"][a||0]);K||p.attr([y,h,r,b][a||0]).css([l,S,u,n][a||0])};K||p.attr(y).css(k({cursor:\"default\"},l));return p.on(\"touchstart\",function(a){return a.stopPropagation()}).on(\"click\",function(a){3!==\nF&&t.call(p,a)})};t.prototype.crispLine=function(a,c,g){void 0===g&&(g=\"round\");var p=a[0],t=a[1];p[1]===t[1]&&(p[1]=t[1]=Math[g](p[1])-c%2/2);p[2]===t[2]&&(p[2]=t[2]=Math[g](p[2])+c%2/2);return a};t.prototype.path=function(a){var c=this.styledMode?{}:{fill:\"none\"};l(a)?c.d=a:u(a)&&k(c,a);return this.createElement(\"path\").attr(c)};t.prototype.circle=function(a,c,g){a=u(a)?a:\"undefined\"===typeof a?{}:{x:a,y:c,r:g};c=this.createElement(\"circle\");c.xSetter=c.ySetter=function(a,c,p){p.setAttribute(\"c\"+\nc,a)};return c.attr(a)};t.prototype.arc=function(a,c,g,t,d,h){u(a)?(t=a,c=t.y,g=t.r,a=t.x):t={innerR:t,start:d,end:h};a=this.symbol(\"arc\",a,c,g,g,t);a.r=g;return a};t.prototype.rect=function(a,c,g,t,d,h){d=u(a)?a.r:d;var p=this.createElement(\"rect\");a=u(a)?a:\"undefined\"===typeof a?{}:{x:a,y:c,width:Math.max(g,0),height:Math.max(t,0)};this.styledMode||(\"undefined\"!==typeof h&&(a[\"stroke-width\"]=h,a=p.crisp(a)),a.fill=\"none\");d&&(a.r=d);p.rSetter=function(a,c,g){p.r=a;w(g,{rx:a,ry:a})};p.rGetter=function(){return p.r||\n0};return p.attr(a)};t.prototype.setSize=function(a,c,g){this.width=a;this.height=c;this.boxWrapper.animate({width:a,height:c},{step:function(){this.attr({viewBox:\"0 0 \"+this.attr(\"width\")+\" \"+this.attr(\"height\")})},duration:E(g,!0)?void 0:0});this.alignElements()};t.prototype.g=function(a){var c=this.createElement(\"g\");return a?c.attr({\"class\":\"highcharts-\"+a}):c};t.prototype.image=function(a,c,g,t,d,h){var p={preserveAspectRatio:\"none\"},r=function(a,c){a.setAttributeNS?a.setAttributeNS(\"http://www.w3.org/1999/xlink\",\n\"href\",c):a.setAttribute(\"hc-svg-href\",c)},F=function(c){r(b.element,a);h.call(b,c)};1<arguments.length&&k(p,{x:c,y:g,width:t,height:d});var b=this.createElement(\"image\").attr(p);h?(r(b.element,\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\"),p=new V.Image,x(p,\"load\",F),p.src=a,p.complete&&F({})):r(b.element,a);return b};t.prototype.symbol=function(a,c,t,r,F,b){var p=this,m=/^url\\((.*?)\\)$/,A=m.test(a),y=!A&&(this.symbols[a]?a:\"circle\"),l=y&&this.symbols[y],u;if(l){\"number\"===\ntypeof c&&(u=l.call(this.symbols,Math.round(c||0),Math.round(t||0),r||0,F||0,b));var n=this.path(u);p.styledMode||n.attr(\"fill\",\"none\");k(n,{symbolName:y,x:c,y:t,width:r,height:F});b&&k(n,b)}else if(A){var e=a.match(m)[1];n=this.image(e);n.imgwidth=E(R[e]&&R[e].width,b&&b.width);n.imgheight=E(R[e]&&R[e].height,b&&b.height);var S=function(){n.attr({width:n.width,height:n.height})};[\"width\",\"height\"].forEach(function(a){n[a+\"Setter\"]=function(a,c){var p=this[\"img\"+c];this[c]=a;d(p)&&(b&&\"within\"===\nb.backgroundSize&&this.width&&this.height&&(p=Math.round(p*Math.min(this.width/this.imgwidth,this.height/this.imgheight))),this.element&&this.element.setAttribute(c,p),this.alignByTranslate||(a=((this[c]||0)-p)/2,this.attr(\"width\"===c?{translateX:a}:{translateY:a})))}});d(c)&&n.attr({x:c,y:t});n.isImg=!0;d(n.imgwidth)&&d(n.imgheight)?S():(n.attr({width:0,height:0}),v(\"img\",{onload:function(){var a=g[p.chartIndex];0===this.width&&(f(this,{position:\"absolute\",top:\"-999em\"}),h.body.appendChild(this));\nR[e]={width:this.width,height:this.height};n.imgwidth=this.width;n.imgheight=this.height;n.element&&S();this.parentNode&&this.parentNode.removeChild(this);p.imgCount--;if(!p.imgCount&&a&&!a.hasLoaded)a.onload()},src:e}),this.imgCount++)}return n};t.prototype.clipRect=function(a,g,t,d){var p=c()+\"-\",h=this.createElement(\"clipPath\").attr({id:p}).add(this.defs);a=this.rect(a,g,t,d,0).add(h);a.id=p;a.clipPath=h;a.count=0;return a};t.prototype.text=function(a,c,g,t){var p={};if(t&&(this.allowHTML||!this.forExport))return this.html(a,\nc,g);p.x=Math.round(c||0);g&&(p.y=Math.round(g));d(a)&&(p.text=a);a=this.createElement(\"text\").attr(p);t||(a.xSetter=function(a,c,p){var g=p.getElementsByTagName(\"tspan\"),t=p.getAttribute(c),d;for(d=0;d<g.length;d++){var h=g[d];h.getAttribute(c)===t&&h.setAttribute(c,a)}p.setAttribute(c,a)});return a};t.prototype.fontMetrics=function(a,c){a=!this.styledMode&&/px/.test(a)||!V.getComputedStyle?a||c&&c.style&&c.style.fontSize||this.style&&this.style.fontSize:c&&z.prototype.getStyle.call(c,\"font-size\");\na=/px/.test(a)?m(a):12;c=24>a?a+3:Math.round(1.2*a);return{h:c,b:Math.round(.8*c),f:a}};t.prototype.rotCorr=function(c,g,t){var p=c;g&&t&&(p=Math.max(p*Math.cos(g*a),4));return{x:-c/3*Math.sin(g*a),y:p}};t.prototype.pathToSegments=function(a){for(var c=[],g=[],p={A:8,C:7,H:2,L:3,M:3,Q:5,S:5,T:3,V:2},t=0;t<a.length;t++)n(g[0])&&N(a[t])&&g.length===p[g[0].toUpperCase()]&&a.splice(t,0,g[0].replace(\"M\",\"L\").replace(\"m\",\"l\")),\"string\"===typeof a[t]&&(g.length&&c.push(g.slice(0)),g.length=0),g.push(a[t]);\nc.push(g.slice(0));return c};t.prototype.label=function(a,c,g,t,d,h,r,b,m){return new H(this,a,c,g,t,d,h,r,b,m)};t.prototype.alignElements=function(){this.alignedObjects.forEach(function(a){return a.align()})};return t}();B.prototype.Element=z;B.prototype.SVG_NS=P;B.prototype.draw=L;B.prototype.escapes={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",\"'\":\"&#39;\",'\"':\"&quot;\"};var M=function(a,c,g,d,h){h=h&&h.r||0;return[[\"M\",a+h,c],[\"L\",a+g-h,c],[\"C\",a+g,c,a+g,c,a+g,c+h],[\"L\",a+g,c+d-h],[\"C\",a+g,c+d,a+g,c+d,a+\ng-h,c+d],[\"L\",a+h,c+d],[\"C\",a,c+d,a,c+d,a,c+d-h],[\"L\",a,c+h],[\"C\",a,c,a,c,a+h,c]]};L=function(a,c,g,d,h){return h&&h.r?M(a,c,g,d,h):[[\"M\",a,c],[\"L\",a+g,c],[\"L\",a+g,c+d],[\"L\",a,c+d],[\"Z\"]]};B.prototype.symbols={circle:function(a,c,g,d){return this.arc(a+g/2,c+d/2,g/2,d/2,{start:.5*Math.PI,end:2.5*Math.PI,open:!1})},rect:L,square:L,triangle:function(a,c,g,d){return[[\"M\",a+g/2,c],[\"L\",a+g,c+d],[\"L\",a,c+d],[\"Z\"]]},\"triangle-down\":function(a,c,g,d){return[[\"M\",a,c],[\"L\",a+g,c],[\"L\",a+g/2,c+d],[\"Z\"]]},\ndiamond:function(a,c,g,d){return[[\"M\",a+g/2,c],[\"L\",a+g,c+d/2],[\"L\",a+g/2,c+d],[\"L\",a,c+d/2],[\"Z\"]]},arc:function(a,c,g,h,r){var t=[];if(r){var p=r.start||0,b=E(r.r,g);g=E(r.r,h||g);var m=(r.end||0)-.001;h=r.innerR;var f=E(r.open,.001>Math.abs((r.end||0)-p-2*Math.PI)),A=Math.cos(p),y=Math.sin(p),l=Math.cos(m),n=Math.sin(m);p=E(r.longArc,.001>m-p-Math.PI?0:1);t.push([\"M\",a+b*A,c+g*y],[\"A\",b,g,0,p,E(r.clockwise,1),a+b*l,c+g*n]);d(h)&&t.push(f?[\"M\",a+h*l,c+h*n]:[\"L\",a+h*l,c+h*n],[\"A\",h,h,0,p,d(r.clockwise)?\n1-r.clockwise:0,a+h*A,c+h*y]);f||t.push([\"Z\"])}return t},callout:function(a,c,g,d,h){var p=Math.min(h&&h.r||0,g,d),t=p+6,r=h&&h.anchorX;h=h&&h.anchorY||0;var b=M(a,c,g,d,{r:p});if(!N(r))return b;a+r>=g?h>c+t&&h<c+d-t?b.splice(3,1,[\"L\",a+g,h-6],[\"L\",a+g+6,h],[\"L\",a+g,h+6],[\"L\",a+g,c+d-p]):b.splice(3,1,[\"L\",a+g,d/2],[\"L\",r,h],[\"L\",a+g,d/2],[\"L\",a+g,c+d-p]):0>=a+r?h>c+t&&h<c+d-t?b.splice(7,1,[\"L\",a,h+6],[\"L\",a-6,h],[\"L\",a,h-6],[\"L\",a,c+p]):b.splice(7,1,[\"L\",a,d/2],[\"L\",r,h],[\"L\",a,d/2],[\"L\",a,c+p]):\nh&&h>d&&r>a+t&&r<a+g-t?b.splice(5,1,[\"L\",r+6,c+d],[\"L\",r,c+d+6],[\"L\",r-6,c+d],[\"L\",a+p,c+d]):h&&0>h&&r>a+t&&r<a+g-t&&b.splice(1,1,[\"L\",r-6,c],[\"L\",r,c-6],[\"L\",r+6,c],[\"L\",g-p,c]);return b}};b.SVGRenderer=B;b.Renderer=b.SVGRenderer;return b.Renderer});O(e,\"Core/Renderer/HTML/HTMLElement.js\",[e[\"Core/Globals.js\"],e[\"Core/Renderer/SVG/SVGElement.js\"],e[\"Core/Utilities.js\"]],function(e,b,I){var D=e.isFirefox,H=e.isMS,G=e.isWebKit,C=e.win,B=I.css,x=I.defined,w=I.extend,v=I.pick,f=I.pInt;w(b.prototype,\n{htmlCss:function(d){var b=\"SPAN\"===this.element.tagName&&d&&\"width\"in d,f=v(b&&d.width,void 0);if(b){delete d.width;this.textWidth=f;var l=!0}d&&\"ellipsis\"===d.textOverflow&&(d.whiteSpace=\"nowrap\",d.overflow=\"hidden\");this.styles=w(this.styles,d);B(this.element,d);l&&this.htmlUpdateTransform();return this},htmlGetBBox:function(){var d=this.element;return{x:d.offsetLeft,y:d.offsetTop,width:d.offsetWidth,height:d.offsetHeight}},htmlUpdateTransform:function(){if(this.added){var d=this.renderer,b=this.element,\ne=this.translateX||0,l=this.translateY||0,N=this.x||0,u=this.y||0,n=this.textAlign||\"left\",J={left:0,center:.5,right:1}[n],E=this.styles;E=E&&E.whiteSpace;B(b,{marginLeft:e,marginTop:l});!d.styledMode&&this.shadows&&this.shadows.forEach(function(a){B(a,{marginLeft:e+1,marginTop:l+1})});this.inverted&&[].forEach.call(b.childNodes,function(a){d.invertChild(a,b)});if(\"SPAN\"===b.tagName){var m=this.rotation,c=void 0;c=this.textWidth&&f(this.textWidth);var g=[m,n,b.innerHTML,this.textWidth,this.textAlign].join(),\na;(a=c!==this.oldTextWidth)&&!(a=c>this.oldTextWidth)&&((a=this.textPxLength)||(B(b,{width:\"\",whiteSpace:E||\"nowrap\"}),a=b.offsetWidth),a=a>c);a&&(/[ \\-]/.test(b.textContent||b.innerText)||\"ellipsis\"===b.style.textOverflow)?(B(b,{width:c+\"px\",display:\"block\",whiteSpace:E||\"normal\"}),this.oldTextWidth=c,this.hasBoxWidthChanged=!0):this.hasBoxWidthChanged=!1;g!==this.cTT&&(c=d.fontMetrics(b.style.fontSize,b).b,!x(m)||m===(this.oldRotation||0)&&n===this.oldAlign||this.setSpanRotation(m,J,c),this.getSpanCorrection(!x(m)&&\nthis.textPxLength||b.offsetWidth,c,J,m,n));B(b,{left:N+(this.xCorr||0)+\"px\",top:u+(this.yCorr||0)+\"px\"});this.cTT=g;this.oldRotation=m;this.oldAlign=n}}else this.alignOnAdd=!0},setSpanRotation:function(d,b,f){var l={},e=H&&!/Edge/.test(C.navigator.userAgent)?\"-ms-transform\":G?\"-webkit-transform\":D?\"MozTransform\":C.opera?\"-o-transform\":void 0;e&&(l[e]=l.transform=\"rotate(\"+d+\"deg)\",l[e+(D?\"Origin\":\"-origin\")]=l.transformOrigin=100*b+\"% \"+f+\"px\",B(this.element,l))},getSpanCorrection:function(d,b,f){this.xCorr=\n-d*f;this.yCorr=-b}});return b});O(e,\"Core/Renderer/HTML/HTMLRenderer.js\",[e[\"Core/Renderer/HTML/AST.js\"],e[\"Core/Renderer/SVG/SVGElement.js\"],e[\"Core/Renderer/SVG/SVGRenderer.js\"],e[\"Core/Utilities.js\"]],function(e,b,I,z){var D=z.attr,G=z.createElement,C=z.extend,B=z.pick;C(I.prototype,{html:function(x,w,v){var f=this.createElement(\"span\"),d=f.element,q=f.renderer,k=q.isSVG,l=function(d,f){[\"opacity\",\"visibility\"].forEach(function(l){d[l+\"Setter\"]=function(n,e,m){var c=d.div?d.div.style:f;b.prototype[l+\n\"Setter\"].call(this,n,e,m);c&&(c[e]=n)}});d.addedSetters=!0};f.textSetter=function(d){d!==this.textStr&&(delete this.bBox,delete this.oldTextWidth,e.setElementHTML(this.element,B(d,\"\")),this.textStr=d,f.doTransform=!0)};k&&l(f,f.element.style);f.xSetter=f.ySetter=f.alignSetter=f.rotationSetter=function(d,b){\"align\"===b?f.alignValue=f.textAlign=d:f[b]=d;f.doTransform=!0};f.afterSetters=function(){this.doTransform&&(this.htmlUpdateTransform(),this.doTransform=!1)};f.attr({text:x,x:Math.round(w),y:Math.round(v)}).css({position:\"absolute\"});\nq.styledMode||f.css({fontFamily:this.style.fontFamily,fontSize:this.style.fontSize});d.style.whiteSpace=\"nowrap\";f.css=f.htmlCss;k&&(f.add=function(b){var e=q.box.parentNode,n=[];if(this.parentGroup=b){var k=b.div;if(!k){for(;b;)n.push(b),b=b.parentGroup;n.reverse().forEach(function(d){function b(c,g){d[g]=c;\"translateX\"===g?a.left=c+\"px\":a.top=c+\"px\";d.doTransform=!0}var c=D(d.element,\"class\"),g=d.styles||{};k=d.div=d.div||G(\"div\",c?{className:c}:void 0,{position:\"absolute\",left:(d.translateX||0)+\n\"px\",top:(d.translateY||0)+\"px\",display:d.display,opacity:d.opacity,cursor:g.cursor,pointerEvents:g.pointerEvents},k||e);var a=k.style;C(d,{classSetter:function(a){return function(c){this.element.setAttribute(\"class\",c);a.className=c}}(k),on:function(){n[0].div&&f.on.apply({element:n[0].div,onEvents:f.onEvents},arguments);return d},translateXSetter:b,translateYSetter:b});d.addedSetters||l(d)})}}else k=e;k.appendChild(d);f.added=!0;f.alignOnAdd&&f.htmlUpdateTransform();return f});return f}});return I});\nO(e,\"Core/Axis/Tick.js\",[e[\"Core/FormatUtilities.js\"],e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(e,b,I){var D=b.deg2rad,H=I.clamp,G=I.correctFloat,C=I.defined,B=I.destroyObjectProperties,x=I.extend,w=I.fireEvent,v=I.isNumber,f=I.merge,d=I.objectEach,q=I.pick;\"\";I=function(){function b(d,b,f,e,k){this.isNewLabel=this.isNew=!0;this.axis=d;this.pos=b;this.type=f||\"\";this.parameters=k||{};this.tickmarkOffset=this.parameters.tickmarkOffset;this.options=this.parameters.options;w(this,\"init\");\nf||e||this.addLabel()}b.prototype.addLabel=function(){var d=this,b=d.axis,f=b.options,n=b.chart,k=b.categories,E=b.logarithmic,m=b.names,c=d.pos,g=q(d.options&&d.options.labels,f.labels),a=b.tickPositions,h=c===a[0],r=c===a[a.length-1],A=d.label,y=(!g.step||1===g.step)&&1===b.tickInterval;a=a.info;var L,P;k=this.parameters.category||(k?q(k[c],m[c],c):c);E&&v(k)&&(k=G(E.lin2log(k)));if(b.dateTime&&a){var R=n.time.resolveDTLFormat(f.dateTimeLabelFormats[!f.grid&&a.higherRanks[c]||a.unitName]);var V=\nR.main}d.isFirst=h;d.isLast=r;var Q={axis:b,chart:n,dateTimeLabelFormat:V,isFirst:h,isLast:r,pos:c,tick:d,tickPositionInfo:a,value:k};w(this,\"labelFormat\",Q);var M=function(a){return g.formatter?g.formatter.call(a,a):g.format?(a.text=b.defaultLabelFormatter.call(a),e.format(g.format,a,n)):b.defaultLabelFormatter.call(a,a)};f=M.call(Q,Q);if(P=R&&R.list)d.shortenLabel=function(){for(L=0;L<P.length;L++)if(x(Q,{dateTimeLabelFormat:P[L]}),A.attr({text:M.call(Q,Q)}),A.getBBox().width<b.getSlotWidth(d)-\n2*g.padding)return;A.attr({text:\"\"})};y&&b._addedPlotLB&&d.moveLabel(f,g);C(A)||d.movedLabel?A&&A.textStr!==f&&!y&&(!A.textWidth||g.style.width||A.styles.width||A.css({width:null}),A.attr({text:f}),A.textPxLength=A.getBBox().width):(d.label=A=d.createLabel({x:0,y:0},f,g),d.rotation=0)};b.prototype.createLabel=function(d,b,e){var n=this.axis,l=n.chart;if(d=C(b)&&e.enabled?l.renderer.text(b,d.x,d.y,e.useHTML).add(n.labelGroup):null)l.styledMode||d.css(f(e.style)),d.textPxLength=d.getBBox().width;return d};\nb.prototype.destroy=function(){B(this,this.axis)};b.prototype.getPosition=function(d,b,f,e){var n=this.axis,l=n.chart,m=e&&l.oldChartHeight||l.chartHeight;d={x:d?G(n.translate(b+f,null,null,e)+n.transB):n.left+n.offset+(n.opposite?(e&&l.oldChartWidth||l.chartWidth)-n.right-n.left:0),y:d?m-n.bottom+n.offset-(n.opposite?n.height:0):G(m-n.translate(b+f,null,null,e)-n.transB)};d.y=H(d.y,-1E5,1E5);w(this,\"afterGetPosition\",{pos:d});return d};b.prototype.getLabelPosition=function(d,b,f,e,k,q,m,c){var g=\nthis.axis,a=g.transA,h=g.isLinked&&g.linkedParent?g.linkedParent.reversed:g.reversed,r=g.staggerLines,A=g.tickRotCorr||{x:0,y:0},y=k.y,n=e||g.reserveSpaceDefault?0:-g.labelOffset*(\"center\"===g.labelAlign?.5:1),l={};C(y)||(y=0===g.side?f.rotation?-8:-f.getBBox().height:2===g.side?A.y+8:Math.cos(f.rotation*D)*(A.y-f.getBBox(!1,0).height/2));d=d+k.x+n+A.x-(q&&e?q*a*(h?-1:1):0);b=b+y-(q&&!e?q*a*(h?1:-1):0);r&&(f=m/(c||1)%r,g.opposite&&(f=r-f-1),b+=g.labelOffset/r*f);l.x=d;l.y=Math.round(b);w(this,\"afterGetLabelPosition\",\n{pos:l,tickmarkOffset:q,index:m});return l};b.prototype.getLabelSize=function(){return this.label?this.label.getBBox()[this.axis.horiz?\"height\":\"width\"]:0};b.prototype.getMarkPath=function(d,b,f,e,k,q){return q.crispLine([[\"M\",d,b],[\"L\",d+(k?0:-f),b+(k?f:0)]],e)};b.prototype.handleOverflow=function(d){var b=this.axis,f=b.options.labels,e=d.x,l=b.chart.chartWidth,k=b.chart.spacing,m=q(b.labelLeft,Math.min(b.pos,k[3]));k=q(b.labelRight,Math.max(b.isRadial?0:b.pos+b.len,l-k[1]));var c=this.label,g=this.rotation,\na={left:0,center:.5,right:1}[b.labelAlign||c.attr(\"align\")],h=c.getBBox().width,r=b.getSlotWidth(this),A=r,y=1,L,P={};if(g||\"justify\"!==f.overflow)0>g&&e-a*h<m?L=Math.round(e/Math.cos(g*D)-m):0<g&&e+a*h>k&&(L=Math.round((l-e)/Math.cos(g*D)));else if(l=e+(1-a)*h,e-a*h<m?A=d.x+A*(1-a)-m:l>k&&(A=k-d.x+A*a,y=-1),A=Math.min(r,A),A<r&&\"center\"===b.labelAlign&&(d.x+=y*(r-A-a*(r-Math.min(h,A)))),h>A||b.autoRotation&&(c.styles||{}).width)L=A;L&&(this.shortenLabel?this.shortenLabel():(P.width=Math.floor(L)+\n\"px\",(f.style||{}).textOverflow||(P.textOverflow=\"ellipsis\"),c.css(P)))};b.prototype.moveLabel=function(b,f){var e=this,n=e.label,l=!1,k=e.axis,m=k.reversed;n&&n.textStr===b?(e.movedLabel=n,l=!0,delete e.label):d(k.ticks,function(c){l||c.isNew||c===e||!c.label||c.label.textStr!==b||(e.movedLabel=c.label,l=!0,c.labelPos=e.movedLabel.xy,delete c.label)});if(!l&&(e.labelPos||n)){var c=e.labelPos||n.xy;n=k.horiz?m?0:k.width+k.left:c.x;k=k.horiz?c.y:m?k.width+k.left:0;e.movedLabel=e.createLabel({x:n,y:k},\nb,f);e.movedLabel&&e.movedLabel.attr({opacity:0})}};b.prototype.render=function(d,b,f){var e=this.axis,l=e.horiz,k=this.pos,m=q(this.tickmarkOffset,e.tickmarkOffset);k=this.getPosition(l,k,m,b);m=k.x;var c=k.y;e=l&&m===e.pos+e.len||!l&&c===e.pos?-1:1;l=q(f,this.label&&this.label.newOpacity,1);f=q(f,1);this.isActive=!0;this.renderGridLine(b,f,e);this.renderMark(k,f,e);this.renderLabel(k,b,l,d);this.isNew=!1;w(this,\"afterRender\")};b.prototype.renderGridLine=function(d,b,f){var e=this.axis,l=e.options,\nk=this.gridLine,m={},c=this.pos,g=this.type,a=q(this.tickmarkOffset,e.tickmarkOffset),h=e.chart.renderer,r=l.gridLineWidth,A=l.gridLineColor,y=l.gridLineDashStyle;\"minor\"===this.type&&(r=l.minorGridLineWidth,A=l.minorGridLineColor,y=l.minorGridLineDashStyle);k||(e.chart.styledMode||(m.stroke=A,m[\"stroke-width\"]=r||0,m.dashstyle=y),g||(m.zIndex=1),d&&(b=0),this.gridLine=k=h.path().attr(m).addClass(\"highcharts-\"+(g?g+\"-\":\"\")+\"grid-line\").add(e.gridGroup));if(k&&(f=e.getPlotLinePath({value:c+a,lineWidth:k.strokeWidth()*\nf,force:\"pass\",old:d})))k[d||this.isNew?\"attr\":\"animate\"]({d:f,opacity:b})};b.prototype.renderMark=function(d,b,f){var e=this.axis,l=e.options,k=e.chart.renderer,m=this.type,c=e.tickSize(m?m+\"Tick\":\"tick\"),g=this.mark,a=!g,h=d.x;d=d.y;var r=q(l[\"minor\"!==m?\"tickWidth\":\"minorTickWidth\"],!m&&e.isXAxis?1:0);l=l[\"minor\"!==m?\"tickColor\":\"minorTickColor\"];c&&(e.opposite&&(c[0]=-c[0]),a&&(this.mark=g=k.path().addClass(\"highcharts-\"+(m?m+\"-\":\"\")+\"tick\").add(e.axisGroup),e.chart.styledMode||g.attr({stroke:l,\n\"stroke-width\":r})),g[a?\"attr\":\"animate\"]({d:this.getMarkPath(h,d,c[0],g.strokeWidth()*f,e.horiz,k),opacity:b}))};b.prototype.renderLabel=function(d,b,f,e){var l=this.axis,n=l.horiz,m=l.options,c=this.label,g=m.labels,a=g.step;l=q(this.tickmarkOffset,l.tickmarkOffset);var h=!0,r=d.x;d=d.y;c&&v(r)&&(c.xy=d=this.getLabelPosition(r,d,c,n,g,l,e,a),this.isFirst&&!this.isLast&&!m.showFirstLabel||this.isLast&&!this.isFirst&&!m.showLastLabel?h=!1:!n||g.step||g.rotation||b||0===f||this.handleOverflow(d),a&&\ne%a&&(h=!1),h&&v(d.y)?(d.opacity=f,c[this.isNewLabel?\"attr\":\"animate\"](d),this.isNewLabel=!1):(c.attr(\"y\",-9999),this.isNewLabel=!0))};b.prototype.replaceMovedLabel=function(){var d=this.label,b=this.axis,f=b.reversed;if(d&&!this.isNew){var e=b.horiz?f?b.left:b.width+b.left:d.xy.x;f=b.horiz?d.xy.y:f?b.width+b.top:b.top;d.animate({x:e,y:f,opacity:0},void 0,d.destroy);delete this.label}b.isDirty=!0;this.label=this.movedLabel;delete this.movedLabel};return b}();b.Tick=I;return b.Tick});O(e,\"Core/Axis/Axis.js\",\n[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Color/Color.js\"],e[\"Core/Globals.js\"],e[\"Core/Color/Palette.js\"],e[\"Core/Options.js\"],e[\"Core/Axis/Tick.js\"],e[\"Core/Utilities.js\"]],function(e,b,I,z,H,G,C){var B=e.animObject,x=H.defaultOptions,w=C.addEvent,v=C.arrayMax,f=C.arrayMin,d=C.clamp,q=C.correctFloat,k=C.defined,l=C.destroyObjectProperties,N=C.erase,u=C.error,n=C.extend,J=C.fireEvent,E=C.getMagnitude,m=C.isArray,c=C.isFunction,g=C.isNumber,a=C.isString,h=C.merge,r=C.normalizeTickInterval,\nA=C.objectEach,y=C.pick,L=C.relativeLength,P=C.removeEvent,R=C.splat,V=C.syncTimeout;\"\";var Q=I.deg2rad;e=function(){function e(a,c){this.zoomEnabled=this.width=this.visible=this.userOptions=this.translationSlope=this.transB=this.transA=this.top=this.ticks=this.tickRotCorr=this.tickPositions=this.tickmarkOffset=this.tickInterval=this.tickAmount=this.side=this.series=this.right=this.positiveValuesOnly=this.pos=this.pointRangePadding=this.pointRange=this.plotLinesAndBandsGroups=this.plotLinesAndBands=\nthis.paddedTicks=this.overlap=this.options=this.offset=this.names=this.minPixelPadding=this.minorTicks=this.minorTickInterval=this.min=this.maxLabelLength=this.max=this.len=this.left=this.labelFormatter=this.labelEdge=this.isLinked=this.height=this.hasVisibleSeries=this.hasNames=this.coll=this.closestPointRange=this.chart=this.categories=this.bottom=this.alternateBands=void 0;this.init(a,c)}e.prototype.init=function(a,d){var b=d.isX,h=this;h.chart=a;h.horiz=a.inverted&&!h.isZAxis?!b:b;h.isXAxis=b;\nh.coll=h.coll||(b?\"xAxis\":\"yAxis\");J(this,\"init\",{userOptions:d});h.opposite=y(d.opposite,h.opposite);h.side=y(d.side,h.side,h.horiz?h.opposite?0:2:h.opposite?1:3);h.setOptions(d);var p=this.options,t=p.labels,r=p.type;h.userOptions=d;h.minPixelPadding=0;h.reversed=y(p.reversed,h.reversed);h.visible=p.visible;h.zoomEnabled=p.zoomEnabled;h.hasNames=\"category\"===r||!0===p.categories;h.categories=p.categories||h.hasNames;h.names||(h.names=[],h.names.keys={});h.plotLinesAndBandsGroups={};h.positiveValuesOnly=\n!!h.logarithmic;h.isLinked=k(p.linkedTo);h.ticks={};h.labelEdge=[];h.minorTicks={};h.plotLinesAndBands=[];h.alternateBands={};h.len=0;h.minRange=h.userMinRange=p.minRange||p.maxZoom;h.range=p.range;h.offset=p.offset||0;h.max=null;h.min=null;d=y(p.crosshair,R(a.options.tooltip.crosshairs)[b?0:1]);h.crosshair=!0===d?{}:d;d=h.options.events;-1===a.axes.indexOf(h)&&(b?a.axes.splice(a.xAxis.length,0,h):a.axes.push(h),a[h.coll].push(h));h.series=h.series||[];a.inverted&&!h.isZAxis&&b&&\"undefined\"===typeof h.reversed&&\n(h.reversed=!0);h.labelRotation=g(t.rotation)?t.rotation:void 0;A(d,function(a,d){c(a)&&w(h,d,a)});J(this,\"afterInit\")};e.prototype.setOptions=function(a){this.options=h(e.defaultOptions,\"yAxis\"===this.coll&&e.defaultYAxisOptions,[e.defaultTopAxisOptions,e.defaultRightAxisOptions,e.defaultBottomAxisOptions,e.defaultLeftAxisOptions][this.side],h(x[this.coll],a));J(this,\"afterSetOptions\",{userOptions:a})};e.prototype.defaultLabelFormatter=function(){var a=this.axis,c=g(this.value)?this.value:NaN,d=\na.chart.time,h=this.dateTimeLabelFormat,b=x.lang,r=b.numericSymbols;b=b.numericSymbolMagnitude||1E3;var e=r&&r.length,f=a.logarithmic?Math.abs(c):a.tickInterval,m=this.chart.numberFormatter;if(a.categories)var A=\"\"+this.value;else if(h)A=d.dateFormat(h,c);else if(e&&1E3<=f)for(;e--&&\"undefined\"===typeof A;)a=Math.pow(b,e+1),f>=a&&0===10*c%a&&null!==r[e]&&0!==c&&(A=m(c/a,-1)+r[e]);\"undefined\"===typeof A&&(A=1E4<=Math.abs(c)?m(c,-1):m(c,-1,void 0,\"\"));return A};e.prototype.getSeriesExtremes=function(){var a=\nthis,c=a.chart,d;J(this,\"getSeriesExtremes\",null,function(){a.hasVisibleSeries=!1;a.dataMin=a.dataMax=a.threshold=null;a.softThreshold=!a.isXAxis;a.stacking&&a.stacking.buildStacks();a.series.forEach(function(h){if(h.visible||!c.options.chart.ignoreHiddenSeries){var b=h.options,p=b.threshold;a.hasVisibleSeries=!0;a.positiveValuesOnly&&0>=p&&(p=null);if(a.isXAxis){if(b=h.xData,b.length){b=a.logarithmic?b.filter(a.validatePositiveValue):b;d=h.getXExtremes(b);var t=d.min;var r=d.max;g(t)||t instanceof\nDate||(b=b.filter(g),d=h.getXExtremes(b),t=d.min,r=d.max);b.length&&(a.dataMin=Math.min(y(a.dataMin,t),t),a.dataMax=Math.max(y(a.dataMax,r),r))}}else if(h=h.applyExtremes(),g(h.dataMin)&&(t=h.dataMin,a.dataMin=Math.min(y(a.dataMin,t),t)),g(h.dataMax)&&(r=h.dataMax,a.dataMax=Math.max(y(a.dataMax,r),r)),k(p)&&(a.threshold=p),!b.softThreshold||a.positiveValuesOnly)a.softThreshold=!1}})});J(this,\"afterGetSeriesExtremes\")};e.prototype.translate=function(a,c,d,h,b,r){var p=this.linkedParent||this,t=1,e=\n0,f=h&&p.old?p.old.transA:p.transA;h=h&&p.old?p.old.min:p.min;var F=p.minPixelPadding;b=(p.isOrdinal||p.brokenAxis&&p.brokenAxis.hasBreaks||p.logarithmic&&b)&&p.lin2val;f||(f=p.transA);d&&(t*=-1,e=p.len);p.reversed&&(t*=-1,e-=t*(p.sector||p.len));c?(a=(a*t+e-F)/f+h,b&&(a=p.lin2val(a))):(b&&(a=p.val2lin(a)),a=g(h)?t*(a-h)*f+e+t*F+(g(r)?f*r:0):void 0);return a};e.prototype.toPixels=function(a,c){return this.translate(a,!1,!this.horiz,null,!0)+(c?0:this.pos)};e.prototype.toValue=function(a,c){return this.translate(a-\n(c?0:this.pos),!0,!this.horiz,null,!0)};e.prototype.getPlotLinePath=function(a){function c(a,c,g){if(\"pass\"!==l&&a<c||a>g)l?a=d(a,c,g):v=!0;return a}var h=this,b=h.chart,t=h.left,r=h.top,e=a.old,f=a.value,m=a.translatedValue,A=a.lineWidth,l=a.force,n,k,u,L,q=e&&b.oldChartHeight||b.chartHeight,P=e&&b.oldChartWidth||b.chartWidth,v,da=h.transB;a={value:f,lineWidth:A,old:e,force:l,acrossPanes:a.acrossPanes,translatedValue:m};J(this,\"getPlotLinePath\",a,function(a){m=y(m,h.translate(f,null,null,e));m=d(m,\n-1E5,1E5);n=u=Math.round(m+da);k=L=Math.round(q-m-da);g(m)?h.horiz?(k=r,L=q-h.bottom,n=u=c(n,t,t+h.width)):(n=t,u=P-h.right,k=L=c(k,r,r+h.height)):(v=!0,l=!1);a.path=v&&!l?null:b.renderer.crispLine([[\"M\",n,k],[\"L\",u,L]],A||1)});return a.path};e.prototype.getLinearTickPositions=function(a,c,d){var g=q(Math.floor(c/a)*a);d=q(Math.ceil(d/a)*a);var h=[],b;q(g+a)===g&&(b=20);if(this.single)return[c];for(c=g;c<=d;){h.push(c);c=q(c+a,b);if(c===p)break;var p=c}return h};e.prototype.getMinorTickInterval=function(){var a=\nthis.options;return!0===a.minorTicks?y(a.minorTickInterval,\"auto\"):!1===a.minorTicks?null:a.minorTickInterval};e.prototype.getMinorTickPositions=function(){var a=this.options,c=this.tickPositions,d=this.minorTickInterval,g=[],h=this.pointRangePadding||0,b=this.min-h;h=this.max+h;var r=h-b;if(r&&r/d<this.len/3){var e=this.logarithmic;if(e)this.paddedTicks.forEach(function(a,c,h){c&&g.push.apply(g,e.getLogTickPositions(d,h[c-1],h[c],!0))});else if(this.dateTime&&\"auto\"===this.getMinorTickInterval())g=\ng.concat(this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(d),b,h,a.startOfWeek));else for(a=b+(c[0]-b)%d;a<=h&&a!==g[0];a+=d)g.push(a)}0!==g.length&&this.trimTicks(g);return g};e.prototype.adjustForMinRange=function(){var a=this.options,c=this.min,d=this.max,g=this.logarithmic,h=0,b,r,e,m;this.isXAxis&&\"undefined\"===typeof this.minRange&&!g&&(k(a.min)||k(a.max)?this.minRange=null:(this.series.forEach(function(a){e=a.xData;m=a.xIncrement?1:e.length-1;if(1<e.length)for(b=m;0<b;b--)if(r=e[b]-\ne[b-1],!h||r<h)h=r}),this.minRange=Math.min(5*h,this.dataMax-this.dataMin)));if(d-c<this.minRange){var A=this.dataMax-this.dataMin>=this.minRange;var l=this.minRange;var n=(l-d+c)/2;n=[c-n,y(a.min,c-n)];A&&(n[2]=this.logarithmic?this.logarithmic.log2lin(this.dataMin):this.dataMin);c=v(n);d=[c+l,y(a.max,c+l)];A&&(d[2]=g?g.log2lin(this.dataMax):this.dataMax);d=f(d);d-c<l&&(n[0]=d-l,n[1]=y(a.min,d-l),c=v(n))}this.min=c;this.max=d};e.prototype.getClosest=function(){var a;this.categories?a=1:this.series.forEach(function(c){var d=\nc.closestPointRange,g=c.visible||!c.chart.options.chart.ignoreHiddenSeries;!c.noSharedTooltip&&k(d)&&g&&(a=k(a)?Math.min(a,d):d)});return a};e.prototype.nameToX=function(a){var c=m(this.categories),d=c?this.categories:this.names,g=a.options.x;a.series.requireSorting=!1;k(g)||(g=this.options.uniqueNames?c?d.indexOf(a.name):y(d.keys[a.name],-1):a.series.autoIncrement());if(-1===g){if(!c)var h=d.length}else h=g;\"undefined\"!==typeof h&&(this.names[h]=a.name,this.names.keys[a.name]=h);return h};e.prototype.updateNames=\nfunction(){var a=this,c=this.names;0<c.length&&(Object.keys(c.keys).forEach(function(a){delete c.keys[a]}),c.length=0,this.minRange=this.userMinRange,(this.series||[]).forEach(function(c){c.xIncrement=null;if(!c.points||c.isDirtyData)a.max=Math.max(a.max,c.xData.length-1),c.processData(),c.generatePoints();c.data.forEach(function(d,g){if(d&&d.options&&\"undefined\"!==typeof d.name){var h=a.nameToX(d);\"undefined\"!==typeof h&&h!==d.x&&(d.x=h,c.xData[g]=h)}})}))};e.prototype.setAxisTranslation=function(){var c=\nthis,d=c.max-c.min,g=c.axisPointRange||0,h=0,b=0,r=c.linkedParent,e=!!c.categories,f=c.transA,m=c.isXAxis;if(m||e||g){var A=c.getClosest();r?(h=r.minPointOffset,b=r.pointRangePadding):c.series.forEach(function(d){var p=e?1:m?y(d.options.pointRange,A,0):c.axisPointRange||0,r=d.options.pointPlacement;g=Math.max(g,p);if(!c.single||e)d=d.is(\"xrange\")?!m:m,h=Math.max(h,d&&a(r)?0:p/2),b=Math.max(b,d&&\"on\"===r?0:p)});r=c.ordinal&&c.ordinal.slope&&A?c.ordinal.slope/A:1;c.minPointOffset=h*=r;c.pointRangePadding=\nb*=r;c.pointRange=Math.min(g,c.single&&e?1:d);m&&(c.closestPointRange=A)}c.translationSlope=c.transA=f=c.staticScale||c.len/(d+b||1);c.transB=c.horiz?c.left:c.bottom;c.minPixelPadding=f*h;J(this,\"afterSetAxisTranslation\")};e.prototype.minFromRange=function(){return this.max-this.range};e.prototype.setTickInterval=function(a){var c=this,d=c.chart,h=c.logarithmic,b=c.options,e=c.isXAxis,t=c.isLinked,f=b.maxPadding,m=b.minPadding,A=b.tickInterval,l=b.tickPixelInterval,n=c.categories,L=g(c.threshold)?\nc.threshold:null,P=c.softThreshold;c.dateTime||n||t||this.getTickAmount();var v=y(c.userMin,b.min);var w=y(c.userMax,b.max);if(t){c.linkedParent=d[c.coll][b.linkedTo];var R=c.linkedParent.getExtremes();c.min=y(R.min,R.dataMin);c.max=y(R.max,R.dataMax);b.type!==c.linkedParent.options.type&&u(11,1,d)}else{if(P&&k(L))if(c.dataMin>=L)R=L,m=0;else if(c.dataMax<=L){var Q=L;f=0}c.min=y(v,R,c.dataMin);c.max=y(w,Q,c.dataMax)}h&&(c.positiveValuesOnly&&!a&&0>=Math.min(c.min,y(c.dataMin,c.min))&&u(10,1,d),c.min=\nq(h.log2lin(c.min),16),c.max=q(h.log2lin(c.max),16));c.range&&k(c.max)&&(c.userMin=c.min=v=Math.max(c.dataMin,c.minFromRange()),c.userMax=w=c.max,c.range=null);J(c,\"foundExtremes\");c.beforePadding&&c.beforePadding();c.adjustForMinRange();!(n||c.axisPointRange||c.stacking&&c.stacking.usePercentage||t)&&k(c.min)&&k(c.max)&&(d=c.max-c.min)&&(!k(v)&&m&&(c.min-=d*m),!k(w)&&f&&(c.max+=d*f));g(c.userMin)||(g(b.softMin)&&b.softMin<c.min&&(c.min=v=b.softMin),g(b.floor)&&(c.min=Math.max(c.min,b.floor)));g(c.userMax)||\n(g(b.softMax)&&b.softMax>c.max&&(c.max=w=b.softMax),g(b.ceiling)&&(c.max=Math.min(c.max,b.ceiling)));P&&k(c.dataMin)&&(L=L||0,!k(v)&&c.min<L&&c.dataMin>=L?c.min=c.options.minRange?Math.min(L,c.max-c.minRange):L:!k(w)&&c.max>L&&c.dataMax<=L&&(c.max=c.options.minRange?Math.max(L,c.min+c.minRange):L));g(c.min)&&g(c.max)&&!this.chart.polar&&c.min>c.max&&(k(c.options.min)?c.max=c.min:k(c.options.max)&&(c.min=c.max));c.tickInterval=c.min===c.max||\"undefined\"===typeof c.min||\"undefined\"===typeof c.max?1:\nt&&c.linkedParent&&!A&&l===c.linkedParent.options.tickPixelInterval?A=c.linkedParent.tickInterval:y(A,this.tickAmount?(c.max-c.min)/Math.max(this.tickAmount-1,1):void 0,n?1:(c.max-c.min)*l/Math.max(c.len,l));e&&!a&&c.series.forEach(function(a){a.processData(c.min!==(c.old&&c.old.min)||c.max!==(c.old&&c.old.max))});c.setAxisTranslation();J(this,\"initialAxisTranslation\");c.pointRange&&!A&&(c.tickInterval=Math.max(c.pointRange,c.tickInterval));a=y(b.minTickInterval,c.dateTime&&!c.series.some(function(a){return a.noSharedTooltip})?\nc.closestPointRange:0);!A&&c.tickInterval<a&&(c.tickInterval=a);c.dateTime||c.logarithmic||A||(c.tickInterval=r(c.tickInterval,void 0,E(c.tickInterval),y(b.allowDecimals,.5>c.tickInterval||void 0!==this.tickAmount),!!this.tickAmount));this.tickAmount||(c.tickInterval=c.unsquish());this.setTickPositions()};e.prototype.setTickPositions=function(){var a=this.options,c=a.tickPositions;var d=this.getMinorTickInterval();var g=a.tickPositioner,h=this.hasVerticalPanning(),b=\"colorAxis\"===this.coll,r=(b||\n!h)&&a.startOnTick;h=(b||!h)&&a.endOnTick;this.tickmarkOffset=this.categories&&\"between\"===a.tickmarkPlacement&&1===this.tickInterval?.5:0;this.minorTickInterval=\"auto\"===d&&this.tickInterval?this.tickInterval/5:d;this.single=this.min===this.max&&k(this.min)&&!this.tickAmount&&(parseInt(this.min,10)===this.min||!1!==a.allowDecimals);this.tickPositions=d=c&&c.slice();!d&&(this.ordinal&&this.ordinal.positions||!((this.max-this.min)/this.tickInterval>Math.max(2*this.len,200))?d=this.dateTime?this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(this.tickInterval,\na.units),this.min,this.max,a.startOfWeek,this.ordinal&&this.ordinal.positions,this.closestPointRange,!0):this.logarithmic?this.logarithmic.getLogTickPositions(this.tickInterval,this.min,this.max):this.getLinearTickPositions(this.tickInterval,this.min,this.max):(d=[this.min,this.max],u(19,!1,this.chart)),d.length>this.len&&(d=[d[0],d.pop()],d[0]===d[1]&&(d.length=1)),this.tickPositions=d,g&&(g=g.apply(this,[this.min,this.max])))&&(this.tickPositions=d=g);this.paddedTicks=d.slice(0);this.trimTicks(d,\nr,h);this.isLinked||(this.single&&2>d.length&&!this.categories&&!this.series.some(function(a){return a.is(\"heatmap\")&&\"between\"===a.options.pointPlacement})&&(this.min-=.5,this.max+=.5),c||g||this.adjustTickAmount());J(this,\"afterSetTickPositions\")};e.prototype.trimTicks=function(a,c,d){var g=a[0],h=a[a.length-1],b=!this.isOrdinal&&this.minPointOffset||0;J(this,\"trimTicks\");if(!this.isLinked){if(c&&-Infinity!==g)this.min=g;else for(;this.min-b>a[0];)a.shift();if(d)this.max=h;else for(;this.max+b<\na[a.length-1];)a.pop();0===a.length&&k(g)&&!this.options.tickPositions&&a.push((h+g)/2)}};e.prototype.alignToOthers=function(){var a={},c,d=this.options;!1!==this.chart.options.chart.alignTicks&&d.alignTicks&&!1!==d.startOnTick&&!1!==d.endOnTick&&!this.logarithmic&&this.chart[this.coll].forEach(function(d){var g=d.options;g=[d.horiz?g.left:g.top,g.width,g.height,g.pane].join();d.series.length&&(a[g]?c=!0:a[g]=1)});return c};e.prototype.getTickAmount=function(){var a=this.options,c=a.tickAmount,d=\na.tickPixelInterval;!k(a.tickInterval)&&!c&&this.len<d&&!this.isRadial&&!this.logarithmic&&a.startOnTick&&a.endOnTick&&(c=2);!c&&this.alignToOthers()&&(c=Math.ceil(this.len/d)+1);4>c&&(this.finalTickAmt=c,c=5);this.tickAmount=c};e.prototype.adjustTickAmount=function(){var a=this.options,c=this.tickInterval,d=this.tickPositions,h=this.tickAmount,b=this.finalTickAmt,r=d&&d.length,e=y(this.threshold,this.softThreshold?0:null);if(this.hasData()&&g(this.min)&&g(this.max)){if(r<h){for(;d.length<h;)d.length%\n2||this.min===e?d.push(q(d[d.length-1]+c)):d.unshift(q(d[0]-c));this.transA*=(r-1)/(h-1);this.min=a.startOnTick?d[0]:Math.min(this.min,d[0]);this.max=a.endOnTick?d[d.length-1]:Math.max(this.max,d[d.length-1])}else r>h&&(this.tickInterval*=2,this.setTickPositions());if(k(b)){for(c=a=d.length;c--;)(3===b&&1===c%2||2>=b&&0<c&&c<a-1)&&d.splice(c,1);this.finalTickAmt=void 0}}};e.prototype.setScale=function(){var a,c=!1,d=!1;this.series.forEach(function(a){c=c||a.isDirtyData||a.isDirty;d=d||a.xAxis&&a.xAxis.isDirty||\n!1});this.setAxisSize();(a=this.len!==(this.old&&this.old.len))||c||d||this.isLinked||this.forceRedraw||this.userMin!==(this.old&&this.old.userMin)||this.userMax!==(this.old&&this.old.userMax)||this.alignToOthers()?(this.stacking&&this.stacking.resetStacks(),this.forceRedraw=!1,this.getSeriesExtremes(),this.setTickInterval(),this.isDirty||(this.isDirty=a||this.min!==(this.old&&this.old.min)||this.max!==(this.old&&this.old.max))):this.stacking&&this.stacking.cleanStacks();c&&this.panningState&&(this.panningState.isDirty=\n!0);J(this,\"afterSetScale\")};e.prototype.setExtremes=function(a,c,d,g,h){var b=this,r=b.chart;d=y(d,!0);b.series.forEach(function(a){delete a.kdTree});h=n(h,{min:a,max:c});J(b,\"setExtremes\",h,function(){b.userMin=a;b.userMax=c;b.eventArgs=h;d&&r.redraw(g)})};e.prototype.zoom=function(a,c){var d=this,g=this.dataMin,h=this.dataMax,b=this.options,r=Math.min(g,y(b.min,g)),e=Math.max(h,y(b.max,h));a={newMin:a,newMax:c};J(this,\"zoom\",a,function(a){var c=a.newMin,b=a.newMax;if(c!==d.min||b!==d.max)d.allowZoomOutside||\n(k(g)&&(c<r&&(c=r),c>e&&(c=e)),k(h)&&(b<r&&(b=r),b>e&&(b=e))),d.displayBtn=\"undefined\"!==typeof c||\"undefined\"!==typeof b,d.setExtremes(c,b,!1,void 0,{trigger:\"zoom\"});a.zoomed=!0});return a.zoomed};e.prototype.setAxisSize=function(){var a=this.chart,c=this.options,d=c.offsets||[0,0,0,0],g=this.horiz,h=this.width=Math.round(L(y(c.width,a.plotWidth-d[3]+d[1]),a.plotWidth)),b=this.height=Math.round(L(y(c.height,a.plotHeight-d[0]+d[2]),a.plotHeight)),r=this.top=Math.round(L(y(c.top,a.plotTop+d[0]),a.plotHeight,\na.plotTop));c=this.left=Math.round(L(y(c.left,a.plotLeft+d[3]),a.plotWidth,a.plotLeft));this.bottom=a.chartHeight-b-r;this.right=a.chartWidth-h-c;this.len=Math.max(g?h:b,0);this.pos=g?c:r};e.prototype.getExtremes=function(){var a=this.logarithmic;return{min:a?q(a.lin2log(this.min)):this.min,max:a?q(a.lin2log(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}};e.prototype.getThreshold=function(a){var c=this.logarithmic,d=c?c.lin2log(this.min):this.min;\nc=c?c.lin2log(this.max):this.max;null===a||-Infinity===a?a=d:Infinity===a?a=c:d>a?a=d:c<a&&(a=c);return this.translate(a,0,1,0,1)};e.prototype.autoLabelAlign=function(a){var c=(y(a,0)-90*this.side+720)%360;a={align:\"center\"};J(this,\"autoLabelAlign\",a,function(a){15<c&&165>c?a.align=\"right\":195<c&&345>c&&(a.align=\"left\")});return a.align};e.prototype.tickSize=function(a){var c=this.options,d=c[\"tick\"===a?\"tickLength\":\"minorTickLength\"],g=y(c[\"tick\"===a?\"tickWidth\":\"minorTickWidth\"],\"tick\"===a&&this.isXAxis&&\n!this.categories?1:0);if(g&&d){\"inside\"===c[a+\"Position\"]&&(d=-d);var h=[d,g]}a={tickSize:h};J(this,\"afterTickSize\",a);return a.tickSize};e.prototype.labelMetrics=function(){var a=this.tickPositions&&this.tickPositions[0]||0;return this.chart.renderer.fontMetrics(this.options.labels.style.fontSize,this.ticks[a]&&this.ticks[a].label)};e.prototype.unsquish=function(){var a=this.options.labels,c=this.horiz,d=this.tickInterval,h=d,b=this.len/(((this.categories?1:0)+this.max-this.min)/d),r,e=a.rotation,\nf=this.labelMetrics(),m,A=Number.MAX_VALUE,l=Math.max(this.max-this.min,0),n=function(a){var c=a/(b||1);c=1<c?Math.ceil(c):1;c*d>l&&Infinity!==a&&Infinity!==b&&l&&(c=Math.ceil(l/d));return q(c*d)};if(c){if(!a.staggerLines&&!a.step)if(g(e))var k=[e];else b<a.autoRotationLimit&&(k=a.autoRotation);k&&k.forEach(function(a){if(a===e||a&&-90<=a&&90>=a){m=n(Math.abs(f.h/Math.sin(Q*a)));var c=m+Math.abs(a/360);c<A&&(A=c,r=a,h=m)}})}else a.step||(h=n(f.h));this.autoRotation=k;this.labelRotation=y(r,g(e)?e:\n0);return h};e.prototype.getSlotWidth=function(a){var c=this.chart,d=this.horiz,h=this.options.labels,b=Math.max(this.tickPositions.length-(this.categories?0:1),1),r=c.margin[3];if(a&&g(a.slotWidth))return a.slotWidth;if(d&&2>h.step)return h.rotation?0:(this.staggerLines||1)*this.len/b;if(!d){a=h.style.width;if(void 0!==a)return parseInt(String(a),10);if(r)return r-c.spacing[3]}return.33*c.chartWidth};e.prototype.renderUnsquish=function(){var c=this.chart,d=c.renderer,g=this.tickPositions,h=this.ticks,\nb=this.options.labels,r=b.style,e=this.horiz,f=this.getSlotWidth(),m=Math.max(1,Math.round(f-2*b.padding)),A={},y=this.labelMetrics(),l=r.textOverflow,n=0;a(b.rotation)||(A.rotation=b.rotation||0);g.forEach(function(a){a=h[a];a.movedLabel&&a.replaceMovedLabel();a&&a.label&&a.label.textPxLength>n&&(n=a.label.textPxLength)});this.maxLabelLength=n;if(this.autoRotation)n>m&&n>y.h?A.rotation=this.labelRotation:this.labelRotation=0;else if(f){var k=m;if(!l){var L=\"clip\";for(m=g.length;!e&&m--;){var u=g[m];\nif(u=h[u].label)u.styles&&\"ellipsis\"===u.styles.textOverflow?u.css({textOverflow:\"clip\"}):u.textPxLength>f&&u.css({width:f+\"px\"}),u.getBBox().height>this.len/g.length-(y.h-y.f)&&(u.specificTextOverflow=\"ellipsis\")}}}A.rotation&&(k=n>.5*c.chartHeight?.33*c.chartHeight:n,l||(L=\"ellipsis\"));if(this.labelAlign=b.align||this.autoLabelAlign(this.labelRotation))A.align=this.labelAlign;g.forEach(function(a){var c=(a=h[a])&&a.label,d=r.width,g={};c&&(c.attr(A),a.shortenLabel?a.shortenLabel():k&&!d&&\"nowrap\"!==\nr.whiteSpace&&(k<c.textPxLength||\"SPAN\"===c.element.tagName)?(g.width=k+\"px\",l||(g.textOverflow=c.specificTextOverflow||L),c.css(g)):c.styles&&c.styles.width&&!g.width&&!d&&c.css({width:null}),delete c.specificTextOverflow,a.rotation=A.rotation)},this);this.tickRotCorr=d.rotCorr(y.b,this.labelRotation||0,0!==this.side)};e.prototype.hasData=function(){return this.series.some(function(a){return a.hasData()})||this.options.showEmpty&&k(this.min)&&k(this.max)};e.prototype.addTitle=function(a){var c=this.chart.renderer,\nd=this.horiz,g=this.opposite,b=this.options.title,r,e=this.chart.styledMode;this.axisTitle||((r=b.textAlign)||(r=(d?{low:\"left\",middle:\"center\",high:\"right\"}:{low:g?\"right\":\"left\",middle:\"center\",high:g?\"left\":\"right\"})[b.align]),this.axisTitle=c.text(b.text||\"\",0,0,b.useHTML).attr({zIndex:7,rotation:b.rotation,align:r}).addClass(\"highcharts-axis-title\"),e||this.axisTitle.css(h(b.style)),this.axisTitle.add(this.axisGroup),this.axisTitle.isNew=!0);e||b.style.width||this.isRadial||this.axisTitle.css({width:this.len+\n\"px\"});this.axisTitle[a?\"show\":\"hide\"](a)};e.prototype.generateTick=function(a){var c=this.ticks;c[a]?c[a].addLabel():c[a]=new G(this,a)};e.prototype.getOffset=function(){var a=this,c=this,d=c.chart,g=d.renderer,h=c.options,b=c.tickPositions,r=c.ticks,e=c.horiz,f=c.side,m=d.inverted&&!c.isZAxis?[1,0,3,2][f]:f,l,n=0,L=0,u=h.title,P=h.labels,q=0,v=d.axisOffset;d=d.clipOffset;var w=[-1,1,1,-1][f],da=h.className,ia=c.axisParent;var E=c.hasData();c.showAxis=l=E||h.showEmpty;c.staggerLines=c.horiz&&P.staggerLines||\nvoid 0;if(!c.axisGroup){var R=function(c,d,h){return g.g(c).attr({zIndex:h}).addClass(\"highcharts-\"+a.coll.toLowerCase()+d+\" \"+(a.isRadial?\"highcharts-radial-axis\"+d+\" \":\"\")+(da||\"\")).add(ia)};c.gridGroup=R(\"grid\",\"-grid\",h.gridZIndex);c.axisGroup=R(\"axis\",\"\",h.zIndex);c.labelGroup=R(\"axis-labels\",\"-labels\",P.zIndex)}E||c.isLinked?(b.forEach(function(a,d){c.generateTick(a,d)}),c.renderUnsquish(),c.reserveSpaceDefault=0===f||2===f||{1:\"left\",3:\"right\"}[f]===c.labelAlign,y(P.reserveSpace,\"center\"===\nc.labelAlign?!0:null,c.reserveSpaceDefault)&&b.forEach(function(a){q=Math.max(r[a].getLabelSize(),q)}),c.staggerLines&&(q*=c.staggerLines),c.labelOffset=q*(c.opposite?-1:1)):A(r,function(a,c){a.destroy();delete r[c]});if(u&&u.text&&!1!==u.enabled&&(c.addTitle(l),l&&!1!==u.reserveSpace)){c.titleOffset=n=c.axisTitle.getBBox()[e?\"height\":\"width\"];var Q=u.offset;L=k(Q)?0:y(u.margin,e?5:10)}c.renderLine();c.offset=w*y(h.offset,v[f]?v[f]+(h.margin||0):0);c.tickRotCorr=c.tickRotCorr||{x:0,y:0};u=0===f?-c.labelMetrics().h:\n2===f?c.tickRotCorr.y:0;L=Math.abs(q)+L;q&&(L=L-u+w*(e?y(P.y,c.tickRotCorr.y+8*w):P.x));c.axisTitleMargin=y(Q,L);c.getMaxLabelDimensions&&(c.maxLabelDimensions=c.getMaxLabelDimensions(r,b));e=this.tickSize(\"tick\");v[f]=Math.max(v[f],(c.axisTitleMargin||0)+n+w*c.offset,L,b&&b.length&&e?e[0]+w*c.offset:0);h=h.offset?0:2*Math.floor(c.axisLine.strokeWidth()/2);d[m]=Math.max(d[m],h);J(this,\"afterGetOffset\")};e.prototype.getLinePath=function(a){var c=this.chart,d=this.opposite,g=this.offset,h=this.horiz,\nb=this.left+(d?this.width:0)+g;g=c.chartHeight-this.bottom-(d?this.height:0)+g;d&&(a*=-1);return c.renderer.crispLine([[\"M\",h?this.left:b,h?g:this.top],[\"L\",h?c.chartWidth-this.right:b,h?g:c.chartHeight-this.bottom]],a)};e.prototype.renderLine=function(){this.axisLine||(this.axisLine=this.chart.renderer.path().addClass(\"highcharts-axis-line\").add(this.axisGroup),this.chart.styledMode||this.axisLine.attr({stroke:this.options.lineColor,\"stroke-width\":this.options.lineWidth,zIndex:7}))};e.prototype.getTitlePosition=\nfunction(){var a=this.horiz,c=this.left,d=this.top,g=this.len,h=this.options.title,b=a?c:d,r=this.opposite,e=this.offset,f=h.x,m=h.y,A=this.axisTitle,y=this.chart.renderer.fontMetrics(h.style.fontSize,A);A=Math.max(A.getBBox(null,0).height-y.h-1,0);g={low:b+(a?0:g),middle:b+g/2,high:b+(a?g:0)}[h.align];c=(a?d+this.height:c)+(a?1:-1)*(r?-1:1)*this.axisTitleMargin+[-A,A,y.f,-A][this.side];a={x:a?g+f:c+(r?this.width:0)+e+f,y:a?c+m-(r?this.height:0)+e:g+m};J(this,\"afterGetTitlePosition\",{titlePosition:a});\nreturn a};e.prototype.renderMinorTick=function(a){var c=this.chart.hasRendered&&this.old,d=this.minorTicks;d[a]||(d[a]=new G(this,a,\"minor\"));c&&d[a].isNew&&d[a].render(null,!0);d[a].render(null,!1,1)};e.prototype.renderTick=function(a,c){var d=this.ticks,g=this.chart.hasRendered&&this.old;if(!this.isLinked||a>=this.min&&a<=this.max||this.grid&&this.grid.isColumn)d[a]||(d[a]=new G(this,a)),g&&d[a].isNew&&d[a].render(c,!0,-1),d[a].render(c)};e.prototype.render=function(){var a=this,c=a.chart,d=a.logarithmic,\nh=a.options,b=a.isLinked,r=a.tickPositions,e=a.axisTitle,f=a.ticks,m=a.minorTicks,y=a.alternateBands,l=h.stackLabels,n=h.alternateGridColor,k=a.tickmarkOffset,L=a.axisLine,u=a.showAxis,q=B(c.renderer.globalAnimation),P,v;a.labelEdge.length=0;a.overlap=!1;[f,m,y].forEach(function(a){A(a,function(a){a.isActive=!1})});if(a.hasData()||b)a.minorTickInterval&&!a.categories&&a.getMinorTickPositions().forEach(function(c){a.renderMinorTick(c)}),r.length&&(r.forEach(function(c,d){a.renderTick(c,d)}),k&&(0===\na.min||a.single)&&(f[-1]||(f[-1]=new G(a,-1,null,!0)),f[-1].render(-1))),n&&r.forEach(function(g,h){v=\"undefined\"!==typeof r[h+1]?r[h+1]+k:a.max-k;0===h%2&&g<a.max&&v<=a.max+(c.polar?-k:k)&&(y[g]||(y[g]=new I.PlotLineOrBand(a)),P=g+k,y[g].options={from:d?d.lin2log(P):P,to:d?d.lin2log(v):v,color:n,className:\"highcharts-alternate-grid\"},y[g].render(),y[g].isActive=!0)}),a._addedPlotLB||(a._addedPlotLB=!0,(h.plotLines||[]).concat(h.plotBands||[]).forEach(function(c){a.addPlotBandOrLine(c)}));[f,m,y].forEach(function(a){var d,\ng=[],h=q.duration;A(a,function(a,c){a.isActive||(a.render(c,!1,0),a.isActive=!1,g.push(c))});V(function(){for(d=g.length;d--;)a[g[d]]&&!a[g[d]].isActive&&(a[g[d]].destroy(),delete a[g[d]])},a!==y&&c.hasRendered&&h?h:0)});L&&(L[L.isPlaced?\"animate\":\"attr\"]({d:this.getLinePath(L.strokeWidth())}),L.isPlaced=!0,L[u?\"show\":\"hide\"](u));e&&u&&(h=a.getTitlePosition(),g(h.y)?(e[e.isNew?\"attr\":\"animate\"](h),e.isNew=!1):(e.attr(\"y\",-9999),e.isNew=!0));l&&l.enabled&&a.stacking&&a.stacking.renderStackTotals();\na.old={len:a.len,max:a.max,min:a.min,transA:a.transA,userMax:a.userMax,userMin:a.userMin};a.isDirty=!1;J(this,\"afterRender\")};e.prototype.redraw=function(){this.visible&&(this.render(),this.plotLinesAndBands.forEach(function(a){a.render()}));this.series.forEach(function(a){a.isDirty=!0})};e.prototype.getKeepProps=function(){return this.keepProps||e.keepProps};e.prototype.destroy=function(a){var c=this,d=c.plotLinesAndBands,g;J(this,\"destroy\",{keepEvents:a});a||P(c);[c.ticks,c.minorTicks,c.alternateBands].forEach(function(a){l(a)});\nif(d)for(a=d.length;a--;)d[a].destroy();\"axisLine axisTitle axisGroup gridGroup labelGroup cross scrollbar\".split(\" \").forEach(function(a){c[a]&&(c[a]=c[a].destroy())});for(g in c.plotLinesAndBandsGroups)c.plotLinesAndBandsGroups[g]=c.plotLinesAndBandsGroups[g].destroy();A(c,function(a,d){-1===c.getKeepProps().indexOf(d)&&delete c[d]})};e.prototype.drawCrosshair=function(a,c){var d=this.crosshair,g=y(d&&d.snap,!0),h,r=this.cross,e=this.chart;J(this,\"drawCrosshair\",{e:a,point:c});a||(a=this.cross&&\nthis.cross.e);if(d&&!1!==(k(c)||!g)){g?k(c)&&(h=y(\"colorAxis\"!==this.coll?c.crosshairPos:null,this.isXAxis?c.plotX:this.len-c.plotY)):h=a&&(this.horiz?a.chartX-this.pos:this.len-a.chartY+this.pos);if(k(h)){var f={value:c&&(this.isXAxis?c.x:y(c.stackY,c.y)),translatedValue:h};e.polar&&n(f,{isCrosshair:!0,chartX:a&&a.chartX,chartY:a&&a.chartY,point:c});f=this.getPlotLinePath(f)||null}if(!k(f)){this.hideCrosshair();return}g=this.categories&&!this.isRadial;r||(this.cross=r=e.renderer.path().addClass(\"highcharts-crosshair highcharts-crosshair-\"+\n(g?\"category \":\"thin \")+(d.className||\"\")).attr({zIndex:y(d.zIndex,2)}).add(),e.styledMode||(r.attr({stroke:d.color||(g?b.parse(z.highlightColor20).setOpacity(.25).get():z.neutralColor20),\"stroke-width\":y(d.width,1)}).css({\"pointer-events\":\"none\"}),d.dashStyle&&r.attr({dashstyle:d.dashStyle})));r.show().attr({d:f});g&&!d.width&&r.attr({\"stroke-width\":this.transA});this.cross.e=a}else this.hideCrosshair();J(this,\"afterDrawCrosshair\",{e:a,point:c})};e.prototype.hideCrosshair=function(){this.cross&&\nthis.cross.hide();J(this,\"afterHideCrosshair\")};e.prototype.hasVerticalPanning=function(){var a=this.chart.options.chart.panning;return!!(a&&a.enabled&&/y/.test(a.type))};e.prototype.validatePositiveValue=function(a){return g(a)&&0<a};e.prototype.update=function(a,c){var d=this.chart,g=a&&a.events||{};a=h(this.userOptions,a);A(d.options[this.coll].events,function(a,c){\"undefined\"===typeof g[c]&&(g[c]=void 0)});this.destroy(!0);this.init(d,n(a,{events:g}));d.isDirtyBox=!0;y(c,!0)&&d.redraw()};e.prototype.remove=\nfunction(a){for(var c=this.chart,d=this.coll,g=this.series,h=g.length;h--;)g[h]&&g[h].remove(!1);N(c.axes,this);N(c[d],this);c[d].forEach(function(a,c){a.options.index=a.userOptions.index=c});this.destroy();c.isDirtyBox=!0;y(a,!0)&&c.redraw()};e.prototype.setTitle=function(a,c){this.update({title:a},c)};e.prototype.setCategories=function(a,c){this.update({categories:a},c)};e.defaultOptions={alignTicks:!0,allowDecimals:void 0,zIndex:2,zoomEnabled:!0,dateTimeLabelFormats:{millisecond:{main:\"%H:%M:%S.%L\",\nrange:!1},second:{main:\"%H:%M:%S\",range:!1},minute:{main:\"%H:%M\",range:!1},hour:{main:\"%H:%M\",range:!1},day:{main:\"%e. %b\"},week:{main:\"%e. %b\"},month:{main:\"%b '%y\"},year:{main:\"%Y\"}},endOnTick:!1,gridLineDashStyle:\"Solid\",gridZIndex:1,labels:{autoRotation:void 0,autoRotationLimit:80,distance:void 0,enabled:!0,indentation:10,overflow:\"justify\",padding:5,reserveSpace:void 0,rotation:void 0,staggerLines:0,step:0,useHTML:!1,x:0,zIndex:7,style:{color:z.neutralColor60,cursor:\"default\",fontSize:\"11px\"}},\nmaxPadding:.01,minorGridLineDashStyle:\"Solid\",minorTickLength:2,minorTickPosition:\"outside\",minPadding:.01,offset:void 0,opposite:!1,reversed:void 0,reversedStacks:!1,showEmpty:!0,showFirstLabel:!0,showLastLabel:!0,startOfWeek:1,startOnTick:!1,tickLength:10,tickPixelInterval:100,tickmarkPlacement:\"between\",tickPosition:\"outside\",title:{align:\"middle\",rotation:0,useHTML:!1,x:0,y:0,style:{color:z.neutralColor60}},type:\"linear\",uniqueNames:!0,visible:!0,minorGridLineColor:z.neutralColor5,minorGridLineWidth:1,\nminorTickColor:z.neutralColor40,lineColor:z.highlightColor20,lineWidth:1,gridLineColor:z.neutralColor10,gridLineWidth:void 0,tickColor:z.highlightColor20};e.defaultYAxisOptions={reversedStacks:!0,endOnTick:!0,maxPadding:.05,minPadding:.05,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8},startOnTick:!0,title:{rotation:270,text:\"Values\"},stackLabels:{animation:{},allowOverlap:!1,enabled:!1,crop:!0,overflow:\"justify\",formatter:function(){var a=this.axis.chart.numberFormatter;return a(this.total,-1)},\nstyle:{color:z.neutralColor100,fontSize:\"11px\",fontWeight:\"bold\",textOutline:\"1px contrast\"}},gridLineWidth:1,lineWidth:0};e.defaultLeftAxisOptions={labels:{x:-15},title:{rotation:270}};e.defaultRightAxisOptions={labels:{x:15},title:{rotation:90}};e.defaultBottomAxisOptions={labels:{autoRotation:[-45],x:0},margin:15,title:{rotation:0}};e.defaultTopAxisOptions={labels:{autoRotation:[-45],x:0},margin:15,title:{rotation:0}};e.keepProps=\"extKey hcEvents names series userMax userMin\".split(\" \");return e}();\nI.Axis=e;return I.Axis});O(e,\"Core/Axis/DateTimeAxis.js\",[e[\"Core/Axis/Axis.js\"],e[\"Core/Utilities.js\"]],function(e,b){var D=b.addEvent,z=b.getMagnitude,H=b.normalizeTickInterval,G=b.timeUnits,C=function(){function b(b){this.axis=b}b.prototype.normalizeTimeTickInterval=function(b,e){var v=e||[[\"millisecond\",[1,2,5,10,20,25,50,100,200,500]],[\"second\",[1,2,5,10,15,30]],[\"minute\",[1,2,5,10,15,30]],[\"hour\",[1,2,3,4,6,8,12]],[\"day\",[1,2]],[\"week\",[1,2]],[\"month\",[1,2,3,4,6]],[\"year\",null]];e=v[v.length-\n1];var f=G[e[0]],d=e[1],q;for(q=0;q<v.length&&!(e=v[q],f=G[e[0]],d=e[1],v[q+1]&&b<=(f*d[d.length-1]+G[v[q+1][0]])/2);q++);f===G.year&&b<5*f&&(d=[1,2,5]);b=H(b/f,d,\"year\"===e[0]?Math.max(z(b/f),1):1);return{unitRange:f,count:b,unitName:e[0]}};return b}();b=function(){function b(){}b.compose=function(b){b.keepProps.push(\"dateTime\");b.prototype.getTimeTicks=function(){return this.chart.time.getTimeTicks.apply(this.chart.time,arguments)};D(b,\"init\",function(b){\"datetime\"!==b.userOptions.type?this.dateTime=\nvoid 0:this.dateTime||(this.dateTime=new C(this))})};b.AdditionsClass=C;return b}();b.compose(e);return b});O(e,\"Core/Axis/LogarithmicAxis.js\",[e[\"Core/Axis/Axis.js\"],e[\"Core/Utilities.js\"]],function(e,b){var D=b.addEvent,z=b.getMagnitude,H=b.normalizeTickInterval,G=b.pick,C=function(){function b(b){this.axis=b}b.prototype.getLogTickPositions=function(b,e,v,f){var d=this.axis,q=d.len,k=d.options,l=[];f||(this.minorAutoInterval=void 0);if(.5<=b)b=Math.round(b),l=d.getLinearTickPositions(b,e,v);else if(.08<=\nb){var w=Math.floor(e),u,n=k=void 0;for(q=.3<b?[1,2,4]:.15<b?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];w<v+1&&!n;w++){var J=q.length;for(u=0;u<J&&!n;u++){var E=this.log2lin(this.lin2log(w)*q[u]);E>e&&(!f||k<=v)&&\"undefined\"!==typeof k&&l.push(k);k>v&&(n=!0);k=E}}}else e=this.lin2log(e),v=this.lin2log(v),b=f?d.getMinorTickInterval():k.tickInterval,b=G(\"auto\"===b?null:b,this.minorAutoInterval,k.tickPixelInterval/(f?5:1)*(v-e)/((f?q/d.tickPositions.length:q)||1)),b=H(b,void 0,z(b)),l=d.getLinearTickPositions(b,\ne,v).map(this.log2lin),f||(this.minorAutoInterval=b/5);f||(d.tickInterval=b);return l};b.prototype.lin2log=function(b){return Math.pow(10,b)};b.prototype.log2lin=function(b){return Math.log(b)/Math.LN10};return b}();b=function(){function b(){}b.compose=function(b){b.keepProps.push(\"logarithmic\");D(b,\"init\",function(b){var e=this.logarithmic;\"logarithmic\"!==b.userOptions.type?this.logarithmic=void 0:e||(this.logarithmic=new C(this))});D(b,\"afterInit\",function(){var b=this.logarithmic;b&&(this.lin2val=\nfunction(e){return b.lin2log(e)},this.val2lin=function(e){return b.log2lin(e)})})};return b}();b.compose(e);return b});O(e,\"Core/Axis/PlotLineOrBand.js\",[e[\"Core/Axis/Axis.js\"],e[\"Core/Globals.js\"],e[\"Core/Color/Palette.js\"],e[\"Core/Utilities.js\"]],function(e,b,I,z){var D=z.arrayMax,G=z.arrayMin,C=z.defined,B=z.destroyObjectProperties,x=z.erase,w=z.extend,v=z.fireEvent,f=z.isNumber,d=z.merge,q=z.objectEach,k=z.pick;z=function(){function b(d,b){this.axis=d;b&&(this.options=b,this.id=b.id)}b.prototype.render=\nfunction(){v(this,\"render\");var b=this,e=b.axis,f=e.horiz,l=e.logarithmic,E=b.options,m=E.label,c=b.label,g=E.to,a=E.from,h=E.value,r=C(a)&&C(g),A=C(h),y=b.svgElem,L=!y,P=[],R=E.color,w=k(E.zIndex,0),Q=E.events;P={\"class\":\"highcharts-plot-\"+(r?\"band \":\"line \")+(E.className||\"\")};var M={},t=e.chart.renderer,p=r?\"bands\":\"lines\";l&&(a=l.log2lin(a),g=l.log2lin(g),h=l.log2lin(h));e.chart.styledMode||(A?(P.stroke=R||I.neutralColor40,P[\"stroke-width\"]=k(E.width,1),E.dashStyle&&(P.dashstyle=E.dashStyle)):\nr&&(P.fill=R||I.highlightColor10,E.borderWidth&&(P.stroke=E.borderColor,P[\"stroke-width\"]=E.borderWidth)));M.zIndex=w;p+=\"-\"+w;(l=e.plotLinesAndBandsGroups[p])||(e.plotLinesAndBandsGroups[p]=l=t.g(\"plot-\"+p).attr(M).add());L&&(b.svgElem=y=t.path().attr(P).add(l));if(A)P=e.getPlotLinePath({value:h,lineWidth:y.strokeWidth(),acrossPanes:E.acrossPanes});else if(r)P=e.getPlotBandPath(a,g,E);else return;!b.eventsAdded&&Q&&(q(Q,function(a,c){y.on(c,function(a){Q[c].apply(b,[a])})}),b.eventsAdded=!0);(L||\n!y.d)&&P&&P.length?y.attr({d:P}):y&&(P?(y.show(!0),y.animate({d:P})):y.d&&(y.hide(),c&&(b.label=c=c.destroy())));m&&(C(m.text)||C(m.formatter))&&P&&P.length&&0<e.width&&0<e.height&&!P.isFlat?(m=d({align:f&&r&&\"center\",x:f?!r&&4:10,verticalAlign:!f&&r&&\"middle\",y:f?r?16:10:r?6:-4,rotation:f&&!r&&90},m),this.renderLabel(m,P,r,w)):c&&c.hide();return b};b.prototype.renderLabel=function(d,b,e,f){var l=this.label,m=this.axis.chart.renderer;l||(l={align:d.textAlign||d.align,rotation:d.rotation,\"class\":\"highcharts-plot-\"+\n(e?\"band\":\"line\")+\"-label \"+(d.className||\"\")},l.zIndex=f,f=this.getLabelText(d),this.label=l=m.text(f,0,0,d.useHTML).attr(l).add(),this.axis.chart.styledMode||l.css(d.style));m=b.xBounds||[b[0][1],b[1][1],e?b[2][1]:b[0][1]];b=b.yBounds||[b[0][2],b[1][2],e?b[2][2]:b[0][2]];e=G(m);f=G(b);l.align(d,!1,{x:e,y:f,width:D(m)-e,height:D(b)-f});l.show(!0)};b.prototype.getLabelText=function(d){return C(d.formatter)?d.formatter.call(this):d.text};b.prototype.destroy=function(){x(this.axis.plotLinesAndBands,\nthis);delete this.axis;B(this)};return b}();w(e.prototype,{getPlotBandPath:function(d,b,e){void 0===e&&(e=this.options);var l=this.getPlotLinePath({value:b,force:!0,acrossPanes:e.acrossPanes});e=this.getPlotLinePath({value:d,force:!0,acrossPanes:e.acrossPanes});var k=[],q=this.horiz,m=1;d=!f(this.min)||!f(this.max)||d<this.min&&b<this.min||d>this.max&&b>this.max;if(e&&l){if(d){var c=e.toString()===l.toString();m=0}for(d=0;d<e.length;d+=2){b=e[d];var g=e[d+1],a=l[d],h=l[d+1];\"M\"!==b[0]&&\"L\"!==b[0]||\n\"M\"!==g[0]&&\"L\"!==g[0]||\"M\"!==a[0]&&\"L\"!==a[0]||\"M\"!==h[0]&&\"L\"!==h[0]||(q&&a[1]===b[1]?(a[1]+=m,h[1]+=m):q||a[2]!==b[2]||(a[2]+=m,h[2]+=m),k.push([\"M\",b[1],b[2]],[\"L\",g[1],g[2]],[\"L\",h[1],h[2]],[\"L\",a[1],a[2]],[\"Z\"]));k.isFlat=c}}return k},addPlotBand:function(d){return this.addPlotBandOrLine(d,\"plotBands\")},addPlotLine:function(d){return this.addPlotBandOrLine(d,\"plotLines\")},addPlotBandOrLine:function(d,e){var f=this,l=new b.PlotLineOrBand(this,d),k=this.userOptions;this.visible&&(l=l.render());\nif(l){this._addedPlotLB||(this._addedPlotLB=!0,(k.plotLines||[]).concat(k.plotBands||[]).forEach(function(d){f.addPlotBandOrLine(d)}));if(e){var q=k[e]||[];q.push(d);k[e]=q}this.plotLinesAndBands.push(l)}return l},removePlotBandOrLine:function(d){for(var b=this.plotLinesAndBands,e=this.options,f=this.userOptions,l=b.length;l--;)b[l].id===d&&b[l].destroy();[e.plotLines||[],f.plotLines||[],e.plotBands||[],f.plotBands||[]].forEach(function(b){for(l=b.length;l--;)(b[l]||{}).id===d&&x(b,b[l])})},removePlotBand:function(d){this.removePlotBandOrLine(d)},\nremovePlotLine:function(d){this.removePlotBandOrLine(d)}});b.PlotLineOrBand=z;return b.PlotLineOrBand});O(e,\"Core/Tooltip.js\",[e[\"Core/FormatUtilities.js\"],e[\"Core/Globals.js\"],e[\"Core/Color/Palette.js\"],e[\"Core/Utilities.js\"]],function(e,b,I,z){var D=e.format,G=b.doc,C=z.clamp,B=z.css,x=z.defined,w=z.discardElement,v=z.extend,f=z.fireEvent,d=z.isArray,q=z.isNumber,k=z.isString,l=z.merge,N=z.pick,u=z.splat,n=z.syncTimeout,J=z.timeUnits;\"\";e=function(){function e(d,c){this.container=void 0;this.crosshairs=\n[];this.distance=0;this.isHidden=!0;this.isSticky=!1;this.now={};this.options={};this.outside=!1;this.chart=d;this.init(d,c)}e.prototype.applyFilter=function(){var d=this.chart;d.renderer.definition({tagName:\"filter\",attributes:{id:\"drop-shadow-\"+d.index,opacity:.5},children:[{tagName:\"feGaussianBlur\",attributes:{\"in\":\"SourceAlpha\",stdDeviation:1}},{tagName:\"feOffset\",attributes:{dx:1,dy:1}},{tagName:\"feComponentTransfer\",children:[{tagName:\"feFuncA\",attributes:{type:\"linear\",slope:.3}}]},{tagName:\"feMerge\",\nchildren:[{tagName:\"feMergeNode\"},{tagName:\"feMergeNode\",attributes:{\"in\":\"SourceGraphic\"}}]}]});d.renderer.definition({tagName:\"style\",textContent:\".highcharts-tooltip-\"+d.index+\"{filter:url(#drop-shadow-\"+d.index+\")}\"})};e.prototype.bodyFormatter=function(d){return d.map(function(c){var d=c.series.tooltipOptions;return(d[(c.point.formatPrefix||\"point\")+\"Formatter\"]||c.point.tooltipFormatter).call(c.point,d[(c.point.formatPrefix||\"point\")+\"Format\"]||\"\")})};e.prototype.cleanSplit=function(d){this.chart.series.forEach(function(c){var b=\nc&&c.tt;b&&(!b.isActive||d?c.tt=b.destroy():b.isActive=!1)})};e.prototype.defaultFormatter=function(d){var c=this.points||u(this);var b=[d.tooltipFooterHeaderFormatter(c[0])];b=b.concat(d.bodyFormatter(c));b.push(d.tooltipFooterHeaderFormatter(c[0],!0));return b};e.prototype.destroy=function(){this.label&&(this.label=this.label.destroy());this.split&&this.tt&&(this.cleanSplit(this.chart,!0),this.tt=this.tt.destroy());this.renderer&&(this.renderer=this.renderer.destroy(),w(this.container));z.clearTimeout(this.hideTimer);\nz.clearTimeout(this.tooltipTimeout)};e.prototype.getAnchor=function(d,c){var b=this.chart;var a=b.pointer;var h=b.inverted,e=b.plotTop,f=b.plotLeft,m=0,l=0,k,n;d=u(d);this.followPointer&&c?(\"undefined\"===typeof c.chartX&&(c=a.normalize(c)),a=[c.chartX-f,c.chartY-e]):d[0].tooltipPos?a=d[0].tooltipPos:(d.forEach(function(a){k=a.series.yAxis;n=a.series.xAxis;m+=a.plotX||0;l+=a.plotLow?(a.plotLow+(a.plotHigh||0))/2:a.plotY||0;n&&k&&(h?(m+=e+b.plotHeight-n.len-n.pos,l+=f+b.plotWidth-k.len-k.pos):(m+=n.pos-\nf,l+=k.pos-e))}),m/=d.length,l/=d.length,a=[h?b.plotWidth-l:m,h?b.plotHeight-m:l],this.shared&&1<d.length&&c&&(h?a[0]=c.chartX-f:a[1]=c.chartY-e));return a.map(Math.round)};e.prototype.getDateFormat=function(d,c,b,a){var h=this.chart.time,g=h.dateFormat(\"%m-%d %H:%M:%S.%L\",c),e={millisecond:15,second:12,minute:9,hour:6,day:3},f=\"millisecond\";for(m in J){if(d===J.week&&+h.dateFormat(\"%w\",c)===b&&\"00:00:00.000\"===g.substr(6)){var m=\"week\";break}if(J[m]>d){m=f;break}if(e[m]&&g.substr(e[m])!==\"01-01 00:00:00.000\".substr(e[m]))break;\n\"week\"!==m&&(f=m)}if(m)var l=h.resolveDTLFormat(a[m]).main;return l};e.prototype.getLabel=function(){var d=this,c=this.chart.renderer,g=this.chart.styledMode,a=this.options,h=\"tooltip\"+(x(a.className)?\" \"+a.className:\"\"),e=a.style&&a.style.pointerEvents||(!this.followPointer&&a.stickOnContact?\"auto\":\"none\"),f,y=function(){d.inContact=!0},l=function(){var a=d.chart.hoverSeries;d.inContact=!1;if(a&&a.onMouseOut)a.onMouseOut()};if(!this.label){if(this.outside){var k=this.chart.options.chart.style;this.container=\nf=b.doc.createElement(\"div\");f.className=\"highcharts-tooltip-container\";B(f,{position:\"absolute\",top:\"1px\",pointerEvents:e,zIndex:Math.max(this.options.style&&this.options.style.zIndex||0,(k&&k.zIndex||0)+3)});b.doc.body.appendChild(f);this.renderer=c=new b.Renderer(f,0,0,k,void 0,void 0,c.styledMode)}this.split?this.label=c.g(h):(this.label=c.label(\"\",0,0,a.shape||\"callout\",null,null,a.useHTML,null,h).attr({padding:a.padding,r:a.borderRadius}),g||this.label.attr({fill:a.backgroundColor,\"stroke-width\":a.borderWidth}).css(a.style).css({pointerEvents:e}).shadow(a.shadow));\ng&&(this.applyFilter(),this.label.addClass(\"highcharts-tooltip-\"+this.chart.index));if(d.outside&&!d.split){var n=this.label,q=n.xSetter,u=n.ySetter;n.xSetter=function(a){q.call(n,d.distance);f.style.left=a+\"px\"};n.ySetter=function(a){u.call(n,d.distance);f.style.top=a+\"px\"}}this.label.on(\"mouseenter\",y).on(\"mouseleave\",l).attr({zIndex:8}).add()}return this.label};e.prototype.getPosition=function(d,c,b){var a=this.chart,h=this.distance,g={},e=a.inverted&&b.h||0,f,m=this.outside,l=m?G.documentElement.clientWidth-\n2*h:a.chartWidth,k=m?Math.max(G.body.scrollHeight,G.documentElement.scrollHeight,G.body.offsetHeight,G.documentElement.offsetHeight,G.documentElement.clientHeight):a.chartHeight,n=a.pointer.getChartPosition(),q=function(g){var e=\"x\"===g;return[g,e?l:k,e?d:c].concat(m?[e?d*n.scaleX:c*n.scaleY,e?n.left-h+(b.plotX+a.plotLeft)*n.scaleX:n.top-h+(b.plotY+a.plotTop)*n.scaleY,0,e?l:k]:[e?d:c,e?b.plotX+a.plotLeft:b.plotY+a.plotTop,e?a.plotLeft:a.plotTop,e?a.plotLeft+a.plotWidth:a.plotTop+a.plotHeight])},u=\nq(\"y\"),t=q(\"x\"),p=!this.followPointer&&N(b.ttBelow,!a.inverted===!!b.negative),v=function(a,c,d,b,r,f,A){var y=m?\"y\"===a?h*n.scaleY:h*n.scaleX:h,l=(d-b)/2,F=b<r-h,k=r+h+b<c,K=r-y-d+l;r=r+y-l;if(p&&k)g[a]=r;else if(!p&&F)g[a]=K;else if(F)g[a]=Math.min(A-b,0>K-e?K:K-e);else if(k)g[a]=Math.max(f,r+e+d>c?r:r+e);else return!1},w=function(a,c,d,b,e){var r;e<h||e>c-h?r=!1:g[a]=e<d/2?1:e>c-b/2?c-b-2:e-d/2;return r},E=function(a){var c=u;u=t;t=c;f=a},F=function(){!1!==v.apply(0,u)?!1!==w.apply(0,t)||f||(E(!0),\nF()):f?g.x=g.y=0:(E(!0),F())};(a.inverted||1<this.len)&&E();F();return g};e.prototype.getXDateFormat=function(d,c,b){c=c.dateTimeLabelFormats;var a=b&&b.closestPointRange;return(a?this.getDateFormat(a,d.x,b.options.startOfWeek,c):c.day)||c.year};e.prototype.hide=function(d){var c=this;z.clearTimeout(this.hideTimer);d=N(d,this.options.hideDelay,500);this.isHidden||(this.hideTimer=n(function(){c.getLabel().fadeOut(d?void 0:d);c.isHidden=!0},d))};e.prototype.init=function(d,c){this.chart=d;this.options=\nc;this.crosshairs=[];this.now={x:0,y:0};this.isHidden=!0;this.split=c.split&&!d.inverted&&!d.polar;this.shared=c.shared||this.split;this.outside=N(c.outside,!(!d.scrollablePixelsX&&!d.scrollablePixelsY))};e.prototype.isStickyOnContact=function(){return!(this.followPointer||!this.options.stickOnContact||!this.inContact)};e.prototype.move=function(d,c,b,a){var h=this,g=h.now,e=!1!==h.options.animation&&!h.isHidden&&(1<Math.abs(d-g.x)||1<Math.abs(c-g.y)),f=h.followPointer||1<h.len;v(g,{x:e?(2*g.x+d)/\n3:d,y:e?(g.y+c)/2:c,anchorX:f?void 0:e?(2*g.anchorX+b)/3:b,anchorY:f?void 0:e?(g.anchorY+a)/2:a});h.getLabel().attr(g);h.drawTracker();e&&(z.clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){h&&h.move(d,c,b,a)},32))};e.prototype.refresh=function(b,c){var g=this.chart,a=this.options,h=u(b),e=h[0],m={},y=[],l=a.formatter||this.defaultFormatter;m=this.shared;var k=g.styledMode;if(a.enabled){z.clearTimeout(this.hideTimer);this.followPointer=!this.split&&e.series.tooltipOptions.followPointer;\nvar n=this.getAnchor(b,c);var q=n[0];var v=n[1];!m||!d(b)&&b.series&&b.series.noSharedTooltip?m=e.getLabelConfig():(g.pointer.applyInactiveState(h),h.forEach(function(a){a.setState(\"hover\");y.push(a.getLabelConfig())}),m={x:e.category,y:e.y},m.points=y);this.len=y.length;b=l.call(m,this);l=e.series;this.distance=N(l.tooltipOptions.distance,16);if(!1===b)this.hide();else{if(this.split)this.renderSplit(b,h);else if(h=q,m=v,c&&g.pointer.isDirectTouch&&(h=c.chartX-g.plotLeft,m=c.chartY-g.plotTop),g.polar||\n!1===l.options.clip||l.shouldShowTooltip(h,m))c=this.getLabel(),a.style.width&&!k||c.css({width:this.chart.spacingBox.width+\"px\"}),c.attr({text:b&&b.join?b.join(\"\"):b}),c.removeClass(/highcharts-color-[\\d]+/g).addClass(\"highcharts-color-\"+N(e.colorIndex,l.colorIndex)),k||c.attr({stroke:a.borderColor||e.color||l.color||I.neutralColor60}),this.updatePosition({plotX:q,plotY:v,negative:e.negative,ttBelow:e.ttBelow,h:n[2]||0});else{this.hide();return}this.isHidden&&this.label&&this.label.attr({opacity:1}).show();\nthis.isHidden=!1}f(this,\"refresh\")}};e.prototype.renderSplit=function(d,c){function g(c,d,b,g,h){void 0===h&&(h=!0);b?(d=X?0:ba,c=C(c-g/2,S.left,S.right-g-(a.outside?U:0))):(d-=B,c=h?c-g-J:c+J,c=C(c,h?c:S.left,S.right));return{x:c,y:d}}var a=this,h=a.chart,e=a.chart,f=e.chartWidth,m=e.chartHeight,l=e.plotHeight,n=e.plotLeft,q=e.plotTop,u=e.pointer,w=e.scrollablePixelsY;w=void 0===w?0:w;var E=e.scrollablePixelsX,t=e.scrollingContainer;t=void 0===t?{scrollLeft:0,scrollTop:0}:t;var p=t.scrollLeft;t=\nt.scrollTop;var x=e.styledMode,J=a.distance,D=a.options,F=a.options.positioner,S=a.outside&&\"number\"!==typeof E?G.documentElement.getBoundingClientRect():{left:p,right:p+f,top:t,bottom:t+m},K=a.getLabel(),T=this.renderer||h.renderer,X=!(!h.xAxis[0]||!h.xAxis[0].opposite);h=u.getChartPosition();var U=h.left;h=h.top;var B=q+t,z=0,ba=l-w;k(d)&&(d=[!1,d]);d=d.slice(0,c.length+1).reduce(function(d,b,h){if(!1!==b&&\"\"!==b){h=c[h-1]||{isHeader:!0,plotX:c[0].plotX,plotY:l,series:{}};var e=h.isHeader,r=e?a:\nh.series;b=b.toString();var f=r.tt,m=h.isHeader;var A=h.series;var y=\"highcharts-color-\"+N(h.colorIndex,A.colorIndex,\"none\");f||(f={padding:D.padding,r:D.borderRadius},x||(f.fill=D.backgroundColor,f[\"stroke-width\"]=D.borderWidth),f=T.label(\"\",0,0,D[m?\"headerShape\":\"shape\"]||\"callout\",void 0,void 0,D.useHTML).addClass((m?\"highcharts-tooltip-header \":\"\")+\"highcharts-tooltip-box \"+y).attr(f).add(K));f.isActive=!0;f.attr({text:b});x||f.css(D.style).shadow(D.shadow).attr({stroke:D.borderColor||h.color||\nA.color||I.neutralColor80});r=r.tt=f;m=r.getBBox();b=m.width+r.strokeWidth();e&&(z=m.height,ba+=z,X&&(B-=z));A=h.plotX;A=void 0===A?0:A;y=h.plotY;y=void 0===y?0:y;f=h.series;if(h.isHeader){A=n+A;var k=q+l/2}else{var p=f.xAxis,t=f.yAxis;A=p.pos+C(A,-J,p.len+J);f.shouldShowTooltip(0,t.pos-q+y,{ignoreX:!0})&&(k=t.pos+y)}A=C(A,S.left-J,S.right+J);\"number\"===typeof k?(m=m.height+1,y=F?F.call(a,b,m,h):g(A,k,e,b),d.push({align:F?0:void 0,anchorX:A,anchorY:k,boxWidth:b,point:h,rank:N(y.rank,e?1:0),size:m,\ntarget:y.y,tt:r,x:y.x})):r.isActive=!1}return d},[]);!F&&d.some(function(c){var d=(a.outside?U:0)+c.anchorX;return d<S.left&&d+c.boxWidth<S.right?!0:d<U-S.left+c.boxWidth&&S.right-d>d})&&(d=d.map(function(a){var c=g(a.anchorX,a.anchorY,a.point.isHeader,a.boxWidth,!1);return v(a,{target:c.y,x:c.x})}));a.cleanSplit();b.distribute(d,ba);var H=U,ca=U;d.forEach(function(c){var d=c.x,b=c.boxWidth;c=c.isHeader;c||(a.outside&&U+d<H&&(H=U+d),!c&&a.outside&&H+b>ca&&(ca=U+d))});d.forEach(function(c){var d=c.x,\nb=c.anchorX,h=c.pos,g=c.point.isHeader;h={visibility:\"undefined\"===typeof h?\"hidden\":\"inherit\",x:d,y:h+B,anchorX:b,anchorY:c.anchorY};if(a.outside&&d<b){var e=U-H;0<e&&(g||(h.x=d+e,h.anchorX=b+e),g&&(h.x=(ca-H)/2,h.anchorX=b+e))}c.tt.attr(h)});d=a.container;w=a.renderer;a.outside&&d&&w&&(e=K.getBBox(),w.setSize(e.width+e.x,e.height+e.y,!1),d.style.left=H+\"px\",d.style.top=h+\"px\")};e.prototype.drawTracker=function(){if(this.followPointer||!this.options.stickOnContact)this.tracker&&this.tracker.destroy();\nelse{var d=this.chart,c=this.label,b=d.hoverPoint;if(c&&b){var a={x:0,y:0,width:0,height:0};b=this.getAnchor(b);var h=c.getBBox();b[0]+=d.plotLeft-c.translateX;b[1]+=d.plotTop-c.translateY;a.x=Math.min(0,b[0]);a.y=Math.min(0,b[1]);a.width=0>b[0]?Math.max(Math.abs(b[0]),h.width-b[0]):Math.max(Math.abs(b[0]),h.width);a.height=0>b[1]?Math.max(Math.abs(b[1]),h.height-Math.abs(b[1])):Math.max(Math.abs(b[1]),h.height);this.tracker?this.tracker.attr(a):(this.tracker=c.renderer.rect(a).addClass(\"highcharts-tracker\").add(c),\nd.styledMode||this.tracker.attr({fill:\"rgba(0,0,0,0)\"}))}}};e.prototype.styledModeFormat=function(d){return d.replace('style=\"font-size: 10px\"','class=\"highcharts-header\"').replace(/style=\"color:{(point|series)\\.color}\"/g,'class=\"highcharts-color-{$1.colorIndex}\"')};e.prototype.tooltipFooterHeaderFormatter=function(d,c){var b=c?\"footer\":\"header\",a=d.series,h=a.tooltipOptions,e=h.xDateFormat,m=a.xAxis,l=m&&\"datetime\"===m.options.type&&q(d.key),k=h[b+\"Format\"];c={isFooter:c,labelConfig:d};f(this,\"headerFormatter\",\nc,function(c){l&&!e&&(e=this.getXDateFormat(d,h,m));l&&e&&(d.point&&d.point.tooltipDateKeys||[\"key\"]).forEach(function(a){k=k.replace(\"{point.\"+a+\"}\",\"{point.\"+a+\":\"+e+\"}\")});a.chart.styledMode&&(k=this.styledModeFormat(k));c.text=D(k,{point:d,series:a},this.chart)});return c.text};e.prototype.update=function(d){this.destroy();l(!0,this.chart.options.tooltip.userOptions,d);this.init(this.chart,l(!0,this.options,d))};e.prototype.updatePosition=function(d){var c=this.chart,b=c.pointer,a=this.getLabel(),\nh=d.plotX+c.plotLeft;c=d.plotY+c.plotTop;b=b.getChartPosition();d=(this.options.positioner||this.getPosition).call(this,a.width,a.height,d);if(this.outside){var e=(this.options.borderWidth||0)+2*this.distance;this.renderer.setSize(a.width+e,a.height+e,!1);if(1!==b.scaleX||1!==b.scaleY)B(this.container,{transform:\"scale(\"+b.scaleX+\", \"+b.scaleY+\")\"}),h*=b.scaleX,c*=b.scaleY;h+=b.left-d.x;c+=b.top-d.y}this.move(Math.round(d.x),Math.round(d.y||0),h,c)};return e}();b.Tooltip=e;return b.Tooltip});O(e,\n\"Core/Pointer.js\",[e[\"Core/Color/Color.js\"],e[\"Core/Globals.js\"],e[\"Core/Color/Palette.js\"],e[\"Core/Tooltip.js\"],e[\"Core/Utilities.js\"]],function(e,b,I,z,H){var D=e.parse,C=b.charts,B=b.noop,x=H.addEvent,w=H.attr,v=H.css,f=H.defined,d=H.extend,q=H.find,k=H.fireEvent,l=H.isNumber,N=H.isObject,u=H.objectEach,n=H.offset,J=H.pick,E=H.splat;\"\";e=function(){function e(c,d){this.lastValidTouch={};this.pinchDown=[];this.runChartClick=!1;this.eventsToUnbind=[];this.chart=c;this.hasDragged=!1;this.options=\nd;this.init(c,d)}e.prototype.applyInactiveState=function(c){var d=[],a;(c||[]).forEach(function(c){a=c.series;d.push(a);a.linkedParent&&d.push(a.linkedParent);a.linkedSeries&&(d=d.concat(a.linkedSeries));a.navigatorSeries&&d.push(a.navigatorSeries)});this.chart.series.forEach(function(a){-1===d.indexOf(a)?a.setState(\"inactive\",!0):a.options.inactiveOtherPoints&&a.setAllPointsToState(\"inactive\")})};e.prototype.destroy=function(){var c=this;this.eventsToUnbind.forEach(function(c){return c()});this.eventsToUnbind=\n[];b.chartCount||(b.unbindDocumentMouseUp&&(b.unbindDocumentMouseUp=b.unbindDocumentMouseUp()),b.unbindDocumentTouchEnd&&(b.unbindDocumentTouchEnd=b.unbindDocumentTouchEnd()));clearInterval(c.tooltipTimeout);u(c,function(d,a){c[a]=void 0})};e.prototype.drag=function(c){var d=this.chart,a=d.options.chart,b=c.chartX,e=c.chartY,f=this.zoomHor,l=this.zoomVert,m=d.plotLeft,k=d.plotTop,n=d.plotWidth,q=d.plotHeight,u=this.selectionMarker,v=this.mouseDownX||0,t=this.mouseDownY||0,p=N(a.panning)?a.panning&&\na.panning.enabled:a.panning,w=a.panKey&&c[a.panKey+\"Key\"];if(!u||!u.touch)if(b<m?b=m:b>m+n&&(b=m+n),e<k?e=k:e>k+q&&(e=k+q),this.hasDragged=Math.sqrt(Math.pow(v-b,2)+Math.pow(t-e,2)),10<this.hasDragged){var E=d.isInsidePlot(v-m,t-k,{visiblePlotOnly:!0});d.hasCartesianSeries&&(this.zoomX||this.zoomY)&&E&&!w&&!u&&(this.selectionMarker=u=d.renderer.rect(m,k,f?1:n,l?1:q,0).attr({\"class\":\"highcharts-selection-marker\",zIndex:7}).add(),d.styledMode||u.attr({fill:a.selectionMarkerFill||D(I.highlightColor80).setOpacity(.25).get()}));\nu&&f&&(b-=v,u.attr({width:Math.abs(b),x:(0<b?0:b)+v}));u&&l&&(b=e-t,u.attr({height:Math.abs(b),y:(0<b?0:b)+t}));E&&!u&&p&&d.pan(c,a.panning)}};e.prototype.dragStart=function(c){var d=this.chart;d.mouseIsDown=c.type;d.cancelClick=!1;d.mouseDownX=this.mouseDownX=c.chartX;d.mouseDownY=this.mouseDownY=c.chartY};e.prototype.drop=function(c){var b=this,a=this.chart,h=this.hasPinched;if(this.selectionMarker){var e={originalEvent:c,xAxis:[],yAxis:[]},A=this.selectionMarker,m=A.attr?A.attr(\"x\"):A.x,n=A.attr?\nA.attr(\"y\"):A.y,q=A.attr?A.attr(\"width\"):A.width,u=A.attr?A.attr(\"height\"):A.height,w;if(this.hasDragged||h)a.axes.forEach(function(a){if(a.zoomEnabled&&f(a.min)&&(h||b[{xAxis:\"zoomX\",yAxis:\"zoomY\"}[a.coll]])&&l(m)&&l(n)){var d=a.horiz,g=\"touchend\"===c.type?a.minPixelPadding:0,r=a.toValue((d?m:n)+g);d=a.toValue((d?m+q:n+u)-g);e[a.coll].push({axis:a,min:Math.min(r,d),max:Math.max(r,d)});w=!0}}),w&&k(a,\"selection\",e,function(c){a.zoom(d(c,h?{animation:!1}:null))});l(a.index)&&(this.selectionMarker=\nthis.selectionMarker.destroy());h&&this.scaleGroups()}a&&l(a.index)&&(v(a.container,{cursor:a._cursor}),a.cancelClick=10<this.hasDragged,a.mouseIsDown=this.hasDragged=this.hasPinched=!1,this.pinchDown=[])};e.prototype.findNearestKDPoint=function(c,d,a){var b=this.chart,g=b.hoverPoint;b=b.tooltip;if(g&&b&&b.isStickyOnContact())return g;var e;c.forEach(function(c){var b=!(c.noSharedTooltip&&d)&&0>c.options.findNearestPointBy.indexOf(\"y\");c=c.searchPoint(a,b);if((b=N(c,!0)&&c.series)&&!(b=!N(e,!0))){b=\ne.distX-c.distX;var h=e.dist-c.dist,g=(c.series.group&&c.series.group.zIndex)-(e.series.group&&e.series.group.zIndex);b=0<(0!==b&&d?b:0!==h?h:0!==g?g:e.series.index>c.series.index?-1:1)}b&&(e=c)});return e};e.prototype.getChartCoordinatesFromPoint=function(c,d){var a=c.series,b=a.xAxis;a=a.yAxis;var g=c.shapeArgs;if(b&&a){var e=J(c.clientX,c.plotX),f=c.plotY||0;c.isNode&&g&&l(g.x)&&l(g.y)&&(e=g.x,f=g.y);return d?{chartX:a.len+a.pos-f,chartY:b.len+b.pos-e}:{chartX:e+b.pos,chartY:f+a.pos}}if(g&&g.x&&\ng.y)return{chartX:g.x,chartY:g.y}};e.prototype.getChartPosition=function(){if(this.chartPosition)return this.chartPosition;var c=this.chart.container,d=n(c);this.chartPosition={left:d.left,top:d.top,scaleX:1,scaleY:1};var a=c.offsetWidth;c=c.offsetHeight;2<a&&2<c&&(this.chartPosition.scaleX=d.width/a,this.chartPosition.scaleY=d.height/c);return this.chartPosition};e.prototype.getCoordinates=function(c){var d={xAxis:[],yAxis:[]};this.chart.axes.forEach(function(a){d[a.isXAxis?\"xAxis\":\"yAxis\"].push({axis:a,\nvalue:a.toValue(c[a.horiz?\"chartX\":\"chartY\"])})});return d};e.prototype.getHoverData=function(c,d,a,b,e,f){var h,g=[];b=!(!b||!c);var r=d&&!d.stickyTracking,l={chartX:f?f.chartX:void 0,chartY:f?f.chartY:void 0,shared:e};k(this,\"beforeGetHoverData\",l);r=r?[d]:a.filter(function(a){return l.filter?l.filter(a):a.visible&&!(!e&&a.directTouch)&&J(a.options.enableMouseTracking,!0)&&a.stickyTracking});d=(h=b||!f?c:this.findNearestKDPoint(r,e,f))&&h.series;h&&(e&&!d.noSharedTooltip?(r=a.filter(function(a){return l.filter?\nl.filter(a):a.visible&&!(!e&&a.directTouch)&&J(a.options.enableMouseTracking,!0)&&!a.noSharedTooltip}),r.forEach(function(a){var c=q(a.points,function(a){return a.x===h.x&&!a.isNull});N(c)&&(a.chart.isBoosting&&(c=a.getPoint(c)),g.push(c))})):g.push(h));l={hoverPoint:h};k(this,\"afterGetHoverData\",l);return{hoverPoint:l.hoverPoint,hoverSeries:d,hoverPoints:g}};e.prototype.getPointFromEvent=function(c){c=c.target;for(var d;c&&!d;)d=c.point,c=c.parentNode;return d};e.prototype.onTrackerMouseOut=function(c){c=\nc.relatedTarget||c.toElement;var d=this.chart.hoverSeries;this.isDirectTouch=!1;if(!(!d||!c||d.stickyTracking||this.inClass(c,\"highcharts-tooltip\")||this.inClass(c,\"highcharts-series-\"+d.index)&&this.inClass(c,\"highcharts-tracker\")))d.onMouseOut()};e.prototype.inClass=function(c,d){for(var a;c;){if(a=w(c,\"class\")){if(-1!==a.indexOf(d))return!0;if(-1!==a.indexOf(\"highcharts-container\"))return!1}c=c.parentNode}};e.prototype.init=function(c,d){this.options=d;this.chart=c;this.runChartClick=!(!d.chart.events||\n!d.chart.events.click);this.pinchDown=[];this.lastValidTouch={};z&&(c.tooltip=new z(c,d.tooltip),this.followTouchMove=J(d.tooltip.followTouchMove,!0));this.setDOMEvents()};e.prototype.normalize=function(c,b){var a=c.touches,h=a?a.length?a.item(0):J(a.changedTouches,c.changedTouches)[0]:c;b||(b=this.getChartPosition());a=h.pageX-b.left;h=h.pageY-b.top;a/=b.scaleX;h/=b.scaleY;return d(c,{chartX:Math.round(a),chartY:Math.round(h)})};e.prototype.onContainerClick=function(c){var b=this.chart,a=b.hoverPoint;\nc=this.normalize(c);var h=b.plotLeft,e=b.plotTop;b.cancelClick||(a&&this.inClass(c.target,\"highcharts-tracker\")?(k(a.series,\"click\",d(c,{point:a})),b.hoverPoint&&a.firePointEvent(\"click\",c)):(d(c,this.getCoordinates(c)),b.isInsidePlot(c.chartX-h,c.chartY-e,{visiblePlotOnly:!0})&&k(b,\"click\",c)))};e.prototype.onContainerMouseDown=function(c){var d=1===((c.buttons||c.button)&1);c=this.normalize(c);if(b.isFirefox&&0!==c.button)this.onContainerMouseMove(c);if(\"undefined\"===typeof c.button||d)this.zoomOption(c),\nd&&c.preventDefault&&c.preventDefault(),this.dragStart(c)};e.prototype.onContainerMouseLeave=function(c){var d=C[J(b.hoverChartIndex,-1)],a=this.chart.tooltip;c=this.normalize(c);d&&(c.relatedTarget||c.toElement)&&(d.pointer.reset(),d.pointer.chartPosition=void 0);a&&!a.isHidden&&this.reset()};e.prototype.onContainerMouseEnter=function(c){delete this.chartPosition};e.prototype.onContainerMouseMove=function(c){var d=this.chart;c=this.normalize(c);this.setHoverChartIndex();c.preventDefault||(c.returnValue=\n!1);(\"mousedown\"===d.mouseIsDown||this.touchSelect(c))&&this.drag(c);d.openMenu||!this.inClass(c.target,\"highcharts-tracker\")&&!d.isInsidePlot(c.chartX-d.plotLeft,c.chartY-d.plotTop,{visiblePlotOnly:!0})||this.runPointActions(c)};e.prototype.onDocumentTouchEnd=function(c){C[b.hoverChartIndex]&&C[b.hoverChartIndex].pointer.drop(c)};e.prototype.onContainerTouchMove=function(c){if(this.touchSelect(c))this.onContainerMouseMove(c);else this.touch(c)};e.prototype.onContainerTouchStart=function(c){if(this.touchSelect(c))this.onContainerMouseDown(c);\nelse this.zoomOption(c),this.touch(c,!0)};e.prototype.onDocumentMouseMove=function(c){var d=this.chart,a=this.chartPosition;c=this.normalize(c,a);var b=d.tooltip;!a||b&&b.isStickyOnContact()||d.isInsidePlot(c.chartX-d.plotLeft,c.chartY-d.plotTop,{visiblePlotOnly:!0})||this.inClass(c.target,\"highcharts-tracker\")||this.reset()};e.prototype.onDocumentMouseUp=function(c){var d=C[J(b.hoverChartIndex,-1)];d&&d.pointer.drop(c)};e.prototype.pinch=function(c){var b=this,a=b.chart,h=b.pinchDown,e=c.touches||\n[],f=e.length,l=b.lastValidTouch,m=b.hasZoom,k=b.selectionMarker,n={},q=1===f&&(b.inClass(c.target,\"highcharts-tracker\")&&a.runTrackerClick||b.runChartClick),u={};1<f&&(b.initiated=!0);m&&b.initiated&&!q&&!1!==c.cancelable&&c.preventDefault();[].map.call(e,function(a){return b.normalize(a)});\"touchstart\"===c.type?([].forEach.call(e,function(a,c){h[c]={chartX:a.chartX,chartY:a.chartY}}),l.x=[h[0].chartX,h[1]&&h[1].chartX],l.y=[h[0].chartY,h[1]&&h[1].chartY],a.axes.forEach(function(c){if(c.zoomEnabled){var d=\na.bounds[c.horiz?\"h\":\"v\"],b=c.minPixelPadding,h=c.toPixels(Math.min(J(c.options.min,c.dataMin),c.dataMin)),e=c.toPixels(Math.max(J(c.options.max,c.dataMax),c.dataMax)),g=Math.max(h,e);d.min=Math.min(c.pos,Math.min(h,e)-b);d.max=Math.max(c.pos+c.len,g+b)}}),b.res=!0):b.followTouchMove&&1===f?this.runPointActions(b.normalize(c)):h.length&&(k||(b.selectionMarker=k=d({destroy:B,touch:!0},a.plotBox)),b.pinchTranslate(h,e,n,k,u,l),b.hasPinched=m,b.scaleGroups(n,u),b.res&&(b.res=!1,this.reset(!1,0)))};e.prototype.pinchTranslate=\nfunction(c,d,a,b,e,f){this.zoomHor&&this.pinchTranslateDirection(!0,c,d,a,b,e,f);this.zoomVert&&this.pinchTranslateDirection(!1,c,d,a,b,e,f)};e.prototype.pinchTranslateDirection=function(c,d,a,b,e,f,l,m){var h=this.chart,g=c?\"x\":\"y\",r=c?\"X\":\"Y\",k=\"chart\"+r,n=c?\"width\":\"height\",A=h[\"plot\"+(c?\"Left\":\"Top\")],y,q,u=m||1,L=h.inverted,F=h.bounds[c?\"h\":\"v\"],v=1===d.length,K=d[0][k],w=a[0][k],E=!v&&d[1][k],x=!v&&a[1][k];a=function(){\"number\"===typeof x&&20<Math.abs(K-E)&&(u=m||Math.abs(w-x)/Math.abs(K-E));\nq=(A-w)/u+K;y=h[\"plot\"+(c?\"Width\":\"Height\")]/u};a();d=q;if(d<F.min){d=F.min;var J=!0}else d+y>F.max&&(d=F.max-y,J=!0);J?(w-=.8*(w-l[g][0]),\"number\"===typeof x&&(x-=.8*(x-l[g][1])),a()):l[g]=[w,x];L||(f[g]=q-A,f[n]=y);f=L?1/u:u;e[n]=y;e[g]=d;b[L?c?\"scaleY\":\"scaleX\":\"scale\"+r]=u;b[\"translate\"+r]=f*A+(w-f*K)};e.prototype.reset=function(c,d){var a=this.chart,b=a.hoverSeries,e=a.hoverPoint,g=a.hoverPoints,f=a.tooltip,l=f&&f.shared?g:e;c&&l&&E(l).forEach(function(a){a.series.isCartesian&&\"undefined\"===\ntypeof a.plotX&&(c=!1)});if(c)f&&l&&E(l).length&&(f.refresh(l),f.shared&&g?g.forEach(function(a){a.setState(a.state,!0);a.series.isCartesian&&(a.series.xAxis.crosshair&&a.series.xAxis.drawCrosshair(null,a),a.series.yAxis.crosshair&&a.series.yAxis.drawCrosshair(null,a))}):e&&(e.setState(e.state,!0),a.axes.forEach(function(a){a.crosshair&&e.series[a.coll]===a&&a.drawCrosshair(null,e)})));else{if(e)e.onMouseOut();g&&g.forEach(function(a){a.setState()});if(b)b.onMouseOut();f&&f.hide(d);this.unDocMouseMove&&\n(this.unDocMouseMove=this.unDocMouseMove());a.axes.forEach(function(a){a.hideCrosshair()});this.hoverX=a.hoverPoints=a.hoverPoint=null}};e.prototype.runPointActions=function(c,d){var a=this.chart,h=a.tooltip&&a.tooltip.options.enabled?a.tooltip:void 0,e=h?h.shared:!1,g=d||a.hoverPoint,f=g&&g.series||a.hoverSeries;f=this.getHoverData(g,f,a.series,(!c||\"touchmove\"!==c.type)&&(!!d||f&&f.directTouch&&this.isDirectTouch),e,c);g=f.hoverPoint;var l=f.hoverPoints;d=(f=f.hoverSeries)&&f.tooltipOptions.followPointer&&\n!f.tooltipOptions.split;e=e&&f&&!f.noSharedTooltip;if(g&&(g!==a.hoverPoint||h&&h.isHidden)){(a.hoverPoints||[]).forEach(function(a){-1===l.indexOf(a)&&a.setState()});if(a.hoverSeries!==f)f.onMouseOver();this.applyInactiveState(l);(l||[]).forEach(function(a){a.setState(\"hover\")});a.hoverPoint&&a.hoverPoint.firePointEvent(\"mouseOut\");if(!g.series)return;a.hoverPoints=l;a.hoverPoint=g;g.firePointEvent(\"mouseOver\");h&&h.refresh(e?l:g,c)}else d&&h&&!h.isHidden&&(g=h.getAnchor([{}],c),a.isInsidePlot(g[0],\ng[1],{visiblePlotOnly:!0})&&h.updatePosition({plotX:g[0],plotY:g[1]}));this.unDocMouseMove||(this.unDocMouseMove=x(a.container.ownerDocument,\"mousemove\",function(a){var c=C[b.hoverChartIndex];if(c)c.pointer.onDocumentMouseMove(a)}),this.eventsToUnbind.push(this.unDocMouseMove));a.axes.forEach(function(d){var b=J((d.crosshair||{}).snap,!0),h;b&&((h=a.hoverPoint)&&h.series[d.coll]===d||(h=q(l,function(a){return a.series[d.coll]===d})));h||!b?d.drawCrosshair(c,h):d.hideCrosshair()})};e.prototype.scaleGroups=\nfunction(c,d){var a=this.chart,b;a.series.forEach(function(h){b=c||h.getPlotBox();h.xAxis&&h.xAxis.zoomEnabled&&h.group&&(h.group.attr(b),h.markerGroup&&(h.markerGroup.attr(b),h.markerGroup.clip(d?a.clipRect:null)),h.dataLabelsGroup&&h.dataLabelsGroup.attr(b))});a.clipRect.attr(d||a.clipBox)};e.prototype.setDOMEvents=function(){var c=this,d=this.chart.container,a=d.ownerDocument;d.onmousedown=this.onContainerMouseDown.bind(this);d.onmousemove=this.onContainerMouseMove.bind(this);d.onclick=this.onContainerClick.bind(this);\nthis.eventsToUnbind.push(x(d,\"mouseenter\",this.onContainerMouseEnter.bind(this)));this.eventsToUnbind.push(x(d,\"mouseleave\",this.onContainerMouseLeave.bind(this)));b.unbindDocumentMouseUp||(b.unbindDocumentMouseUp=x(a,\"mouseup\",this.onDocumentMouseUp.bind(this)));for(var h=this.chart.renderTo.parentElement;h&&\"BODY\"!==h.tagName;)this.eventsToUnbind.push(x(h,\"scroll\",function(){delete c.chartPosition})),h=h.parentElement;b.hasTouch&&(this.eventsToUnbind.push(x(d,\"touchstart\",this.onContainerTouchStart.bind(this),\n{passive:!1})),this.eventsToUnbind.push(x(d,\"touchmove\",this.onContainerTouchMove.bind(this),{passive:!1})),b.unbindDocumentTouchEnd||(b.unbindDocumentTouchEnd=x(a,\"touchend\",this.onDocumentTouchEnd.bind(this),{passive:!1})))};e.prototype.setHoverChartIndex=function(){var c=this.chart,d=b.charts[J(b.hoverChartIndex,-1)];if(d&&d!==c)d.pointer.onContainerMouseLeave({relatedTarget:!0});d&&d.mouseIsDown||(b.hoverChartIndex=c.index)};e.prototype.touch=function(c,d){var a=this.chart,b;this.setHoverChartIndex();\nif(1===c.touches.length)if(c=this.normalize(c),(b=a.isInsidePlot(c.chartX-a.plotLeft,c.chartY-a.plotTop,{visiblePlotOnly:!0}))&&!a.openMenu){d&&this.runPointActions(c);if(\"touchmove\"===c.type){d=this.pinchDown;var e=d[0]?4<=Math.sqrt(Math.pow(d[0].chartX-c.chartX,2)+Math.pow(d[0].chartY-c.chartY,2)):!1}J(e,!0)&&this.pinch(c)}else d&&this.reset();else 2===c.touches.length&&this.pinch(c)};e.prototype.touchSelect=function(c){return!(!this.chart.options.chart.zoomBySingleTouch||!c.touches||1!==c.touches.length)};\ne.prototype.zoomOption=function(c){var d=this.chart,a=d.options.chart,b=a.zoomType||\"\";d=d.inverted;/touch/.test(c.type)&&(b=J(a.pinchType,b));this.zoomX=c=/x/.test(b);this.zoomY=b=/y/.test(b);this.zoomHor=c&&!d||b&&d;this.zoomVert=b&&!d||c&&d;this.hasZoom=c||b};return e}();return b.Pointer=e});O(e,\"Core/MSPointer.js\",[e[\"Core/Globals.js\"],e[\"Core/Pointer.js\"],e[\"Core/Utilities.js\"]],function(e,b,I){function D(){var d=[];d.item=function(d){return this[d]};f(q,function(b){d.push({pageX:b.pageX,pageY:b.pageY,\ntarget:b.target})});return d}function H(d,b,f,k){\"touch\"!==d.pointerType&&d.pointerType!==d.MSPOINTER_TYPE_TOUCH||!C[e.hoverChartIndex]||(k(d),k=C[e.hoverChartIndex].pointer,k[b]({type:f,target:d.currentTarget,preventDefault:x,touches:D()}))}var G=this&&this.__extends||function(){var d=function(b,e){d=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(d,b){d.__proto__=b}||function(d,b){for(var e in b)b.hasOwnProperty(e)&&(d[e]=b[e])};return d(b,e)};return function(b,e){function f(){this.constructor=\nb}d(b,e);b.prototype=null===e?Object.create(e):(f.prototype=e.prototype,new f)}}(),C=e.charts,B=e.doc,x=e.noop,w=I.addEvent,v=I.css,f=I.objectEach,d=I.removeEvent,q={},k=!!e.win.PointerEvent;return function(b){function e(){return null!==b&&b.apply(this,arguments)||this}G(e,b);e.prototype.batchMSEvents=function(d){d(this.chart.container,k?\"pointerdown\":\"MSPointerDown\",this.onContainerPointerDown);d(this.chart.container,k?\"pointermove\":\"MSPointerMove\",this.onContainerPointerMove);d(B,k?\"pointerup\":\n\"MSPointerUp\",this.onDocumentPointerUp)};e.prototype.destroy=function(){this.batchMSEvents(d);b.prototype.destroy.call(this)};e.prototype.init=function(d,e){b.prototype.init.call(this,d,e);this.hasZoom&&v(d.container,{\"-ms-touch-action\":\"none\",\"touch-action\":\"none\"})};e.prototype.onContainerPointerDown=function(d){H(d,\"onContainerTouchStart\",\"touchstart\",function(d){q[d.pointerId]={pageX:d.pageX,pageY:d.pageY,target:d.currentTarget}})};e.prototype.onContainerPointerMove=function(d){H(d,\"onContainerTouchMove\",\n\"touchmove\",function(d){q[d.pointerId]={pageX:d.pageX,pageY:d.pageY};q[d.pointerId].target||(q[d.pointerId].target=d.currentTarget)})};e.prototype.onDocumentPointerUp=function(d){H(d,\"onDocumentTouchEnd\",\"touchend\",function(d){delete q[d.pointerId]})};e.prototype.setDOMEvents=function(){b.prototype.setDOMEvents.call(this);(this.hasZoom||this.followTouchMove)&&this.batchMSEvents(w)};return e}(b)});O(e,\"Core/Series/Point.js\",[e[\"Core/Renderer/HTML/AST.js\"],e[\"Core/Animation/AnimationUtilities.js\"],\ne[\"Core/FormatUtilities.js\"],e[\"Core/Globals.js\"],e[\"Core/Options.js\"],e[\"Core/Utilities.js\"]],function(e,b,I,z,H,G){var D=b.animObject,B=I.format,x=H.defaultOptions,w=G.addEvent,v=G.defined,f=G.erase,d=G.extend,q=G.fireEvent,k=G.getNestedProperty,l=G.isArray,N=G.isFunction,u=G.isNumber,n=G.isObject,J=G.merge,E=G.objectEach,m=G.pick,c=G.syncTimeout,g=G.removeEvent,a=G.uniqueKey;\"\";b=function(){function b(){this.colorIndex=this.category=void 0;this.formatPrefix=\"point\";this.id=void 0;this.isNull=!1;\nthis.percentage=this.options=this.name=void 0;this.selected=!1;this.total=this.series=void 0;this.visible=!0;this.x=void 0}b.prototype.animateBeforeDestroy=function(){var a=this,c={x:a.startXPos,opacity:0},b,e=a.getGraphicalProps();e.singular.forEach(function(d){b=\"dataLabel\"===d;a[d]=a[d].animate(b?{x:a[d].startXPos,y:a[d].startYPos,opacity:0}:c)});e.plural.forEach(function(c){a[c].forEach(function(c){c.element&&c.animate(d({x:a.startXPos},c.startYPos?{x:c.startXPos,y:c.startYPos}:{}))})})};b.prototype.applyOptions=\nfunction(a,c){var e=this.series,h=e.options.pointValKey||e.pointValKey;a=b.prototype.optionsToObject.call(this,a);d(this,a);this.options=this.options?d(this.options,a):a;a.group&&delete this.group;a.dataLabels&&delete this.dataLabels;h&&(this.y=b.prototype.getNestedProperty.call(this,h));this.formatPrefix=(this.isNull=m(this.isValid&&!this.isValid(),null===this.x||!u(this.y)))?\"null\":\"point\";this.selected&&(this.state=\"select\");\"name\"in this&&\"undefined\"===typeof c&&e.xAxis&&e.xAxis.hasNames&&(this.x=\ne.xAxis.nameToX(this));\"undefined\"===typeof this.x&&e&&(this.x=\"undefined\"===typeof c?e.autoIncrement(this):c);return this};b.prototype.destroy=function(){function a(){if(d.graphic||d.dataLabel||d.dataLabels)g(d),d.destroyElements();for(m in d)d[m]=null}var d=this,b=d.series,e=b.chart;b=b.options.dataSorting;var h=e.hoverPoints,l=D(d.series.chart.renderer.globalAnimation),m;d.legendItem&&e.legend.destroyItem(d);h&&(d.setState(),f(h,d),h.length||(e.hoverPoints=null));if(d===e.hoverPoint)d.onMouseOut();\nb&&b.enabled?(this.animateBeforeDestroy(),c(a,l.duration)):a();e.pointCount--};b.prototype.destroyElements=function(a){var c=this;a=c.getGraphicalProps(a);a.singular.forEach(function(a){c[a]=c[a].destroy()});a.plural.forEach(function(a){c[a].forEach(function(a){a.element&&a.destroy()});delete c[a]})};b.prototype.firePointEvent=function(a,c,d){var b=this,e=this.series.options;(e.point.events[a]||b.options&&b.options.events&&b.options.events[a])&&b.importEvents();\"click\"===a&&e.allowPointSelect&&(d=\nfunction(a){b.select&&b.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});q(b,a,c,d)};b.prototype.getClassName=function(){return\"highcharts-point\"+(this.selected?\" highcharts-point-select\":\"\")+(this.negative?\" highcharts-negative\":\"\")+(this.isNull?\" highcharts-null-point\":\"\")+(\"undefined\"!==typeof this.colorIndex?\" highcharts-color-\"+this.colorIndex:\"\")+(this.options.className?\" \"+this.options.className:\"\")+(this.zone&&this.zone.className?\" \"+this.zone.className.replace(\"highcharts-negative\",\"\"):\"\")};\nb.prototype.getGraphicalProps=function(a){var c=this,d=[],b,e={singular:[],plural:[]};a=a||{graphic:1,dataLabel:1};a.graphic&&d.push(\"graphic\",\"upperGraphic\",\"shadowGroup\");a.dataLabel&&d.push(\"dataLabel\",\"dataLabelUpper\",\"connector\");for(b=d.length;b--;){var h=d[b];c[h]&&e.singular.push(h)}[\"dataLabel\",\"connector\"].forEach(function(d){var b=d+\"s\";a[d]&&c[b]&&e.plural.push(b)});return e};b.prototype.getLabelConfig=function(){return{x:this.category,y:this.y,color:this.color,colorIndex:this.colorIndex,\nkey:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}};b.prototype.getNestedProperty=function(a){if(a)return 0===a.indexOf(\"custom.\")?k(a,this.options):this[a]};b.prototype.getZone=function(){var a=this.series,c=a.zones;a=a.zoneAxis||\"y\";var d=0,b;for(b=c[d];this[a]>=b.value;)b=c[++d];this.nonZonedColor||(this.nonZonedColor=this.color);this.color=b&&b.color&&!this.options.color?b.color:this.nonZonedColor;return b};b.prototype.hasNewShapeType=\nfunction(){return(this.graphic&&(this.graphic.symbolName||this.graphic.element.nodeName))!==this.shapeType};b.prototype.init=function(c,d,b){this.series=c;this.applyOptions(d,b);this.id=v(this.id)?this.id:a();this.resolveColor();c.chart.pointCount++;q(this,\"afterInit\");return this};b.prototype.optionsToObject=function(a){var c={},d=this.series,e=d.options.keys,h=e||d.pointArrayMap||[\"y\"],g=h.length,f=0,r=0;if(u(a)||null===a)c[h[0]]=a;else if(l(a))for(!e&&a.length>g&&(d=typeof a[0],\"string\"===d?c.name=\na[0]:\"number\"===d&&(c.x=a[0]),f++);r<g;)e&&\"undefined\"===typeof a[f]||(0<h[r].indexOf(\".\")?b.prototype.setNestedProperty(c,a[f],h[r]):c[h[r]]=a[f]),f++,r++;else\"object\"===typeof a&&(c=a,a.dataLabels&&(d._hasPointLabels=!0),a.marker&&(d._hasPointMarkers=!0));return c};b.prototype.resolveColor=function(){var a=this.series;var c=a.chart.options.chart.colorCount;var d=a.chart.styledMode;delete this.nonZonedColor;if(a.options.colorByPoint){if(!d){c=a.options.colors||a.chart.options.colors;var b=c[a.colorCounter];\nc=c.length}d=a.colorCounter;a.colorCounter++;a.colorCounter===c&&(a.colorCounter=0)}else d||(b=a.color),d=a.colorIndex;this.colorIndex=m(this.options.colorIndex,d);this.color=m(this.options.color,b)};b.prototype.setNestedProperty=function(a,c,d){d.split(\".\").reduce(function(a,d,b,e){a[d]=e.length-1===b?c:n(a[d],!0)?a[d]:{};return a[d]},a);return a};b.prototype.tooltipFormatter=function(a){var c=this.series,d=c.tooltipOptions,b=m(d.valueDecimals,\"\"),e=d.valuePrefix||\"\",h=d.valueSuffix||\"\";c.chart.styledMode&&\n(a=c.chart.tooltip.styledModeFormat(a));(c.pointArrayMap||[\"y\"]).forEach(function(c){c=\"{point.\"+c;if(e||h)a=a.replace(RegExp(c+\"}\",\"g\"),e+c+\"}\"+h);a=a.replace(RegExp(c+\"}\",\"g\"),c+\":,.\"+b+\"f}\")});return B(a,{point:this,series:this.series},c.chart)};b.prototype.update=function(a,c,d,b){function e(){h.applyOptions(a);var b=f&&h.hasDummyGraphic;b=null===h.y?!b:b;f&&b&&(h.graphic=f.destroy(),delete h.hasDummyGraphic);n(a,!0)&&(f&&f.element&&a&&a.marker&&\"undefined\"!==typeof a.marker.symbol&&(h.graphic=\nf.destroy()),a&&a.dataLabels&&h.dataLabel&&(h.dataLabel=h.dataLabel.destroy()),h.connector&&(h.connector=h.connector.destroy()));r=h.index;g.updateParallelArrays(h,r);k.data[r]=n(k.data[r],!0)||n(a,!0)?h.options:m(a,k.data[r]);g.isDirty=g.isDirtyData=!0;!g.fixedBox&&g.hasCartesianSeries&&(l.isDirtyBox=!0);\"point\"===k.legendType&&(l.isDirtyLegend=!0);c&&l.redraw(d)}var h=this,g=h.series,f=h.graphic,r,l=g.chart,k=g.options;c=m(c,!0);!1===b?e():h.firePointEvent(\"update\",{options:a},e)};b.prototype.remove=\nfunction(a,c){this.series.removePoint(this.series.data.indexOf(this),a,c)};b.prototype.select=function(a,c){var d=this,b=d.series,e=b.chart;this.selectedStaging=a=m(a,!d.selected);d.firePointEvent(a?\"select\":\"unselect\",{accumulate:c},function(){d.selected=d.options.selected=a;b.options.data[b.data.indexOf(d)]=d.options;d.setState(a&&\"select\");c||e.getSelectedPoints().forEach(function(a){var c=a.series;a.selected&&a!==d&&(a.selected=a.options.selected=!1,c.options.data[c.data.indexOf(a)]=a.options,\na.setState(e.hoverPoints&&c.options.inactiveOtherPoints?\"inactive\":\"\"),a.firePointEvent(\"unselect\"))})});delete this.selectedStaging};b.prototype.onMouseOver=function(a){var c=this.series.chart,d=c.pointer;a=a?d.normalize(a):d.getChartCoordinatesFromPoint(this,c.inverted);d.runPointActions(a,this)};b.prototype.onMouseOut=function(){var a=this.series.chart;this.firePointEvent(\"mouseOut\");this.series.options.inactiveOtherPoints||(a.hoverPoints||[]).forEach(function(a){a.setState()});a.hoverPoints=a.hoverPoint=\nnull};b.prototype.importEvents=function(){if(!this.hasImportedEvents){var a=this,c=J(a.series.options.point,a.options).events;a.events=c;E(c,function(c,d){N(c)&&w(a,d,c)});this.hasImportedEvents=!0}};b.prototype.setState=function(a,c){var b=this.series,h=this.state,g=b.options.states[a||\"normal\"]||{},f=x.plotOptions[b.type].marker&&b.options.marker,r=f&&!1===f.enabled,l=f&&f.states&&f.states[a||\"normal\"]||{},k=!1===l.enabled,n=b.stateMarkerGraphic,p=this.marker||{},A=b.chart,v=b.halo,w,F=f&&b.markerAttribs;\na=a||\"\";if(!(a===this.state&&!c||this.selected&&\"select\"!==a||!1===g.enabled||a&&(k||r&&!1===l.enabled)||a&&p.states&&p.states[a]&&!1===p.states[a].enabled)){this.state=a;F&&(w=b.markerAttribs(this,a));if(this.graphic&&!this.hasDummyGraphic){h&&this.graphic.removeClass(\"highcharts-point-\"+h);a&&this.graphic.addClass(\"highcharts-point-\"+a);if(!A.styledMode){var S=b.pointAttribs(this,a);var K=m(A.options.chart.animation,g.animation);b.options.inactiveOtherPoints&&u(S.opacity)&&((this.dataLabels||[]).forEach(function(a){a&&\na.animate({opacity:S.opacity},K)}),this.connector&&this.connector.animate({opacity:S.opacity},K));this.graphic.animate(S,K)}w&&this.graphic.animate(w,m(A.options.chart.animation,l.animation,f.animation));n&&n.hide()}else{if(a&&l){h=p.symbol||b.symbol;n&&n.currentSymbol!==h&&(n=n.destroy());if(w)if(n)n[c?\"animate\":\"attr\"]({x:w.x,y:w.y});else h&&(b.stateMarkerGraphic=n=A.renderer.symbol(h,w.x,w.y,w.width,w.height).add(b.markerGroup),n.currentSymbol=h);!A.styledMode&&n&&n.attr(b.pointAttribs(this,a))}n&&\n(n[a&&this.isInside?\"show\":\"hide\"](),n.element.point=this)}g=g.halo;w=(n=this.graphic||n)&&n.visibility||\"inherit\";g&&g.size&&n&&\"hidden\"!==w&&!this.isCluster?(v||(b.halo=v=A.renderer.path().add(n.parentGroup)),v.show()[c?\"animate\":\"attr\"]({d:this.haloPath(g.size)}),v.attr({\"class\":\"highcharts-halo highcharts-color-\"+m(this.colorIndex,b.colorIndex)+(this.className?\" \"+this.className:\"\"),visibility:w,zIndex:-1}),v.point=this,A.styledMode||v.attr(d({fill:this.color||b.color,\"fill-opacity\":g.opacity},\ne.filterUserAttributes(g.attributes||{})))):v&&v.point&&v.point.haloPath&&v.animate({d:v.point.haloPath(0)},null,v.hide);q(this,\"afterSetState\",{state:a})}};b.prototype.haloPath=function(a){return this.series.chart.renderer.symbols.circle(Math.floor(this.plotX)-a,this.plotY-a,2*a,2*a)};return b}();return z.Point=b});O(e,\"Core/Legend.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/FormatUtilities.js\"],e[\"Core/Globals.js\"],e[\"Core/Series/Point.js\"],e[\"Core/Utilities.js\"]],function(e,b,I,z,H){var D=\ne.animObject,C=e.setAnimation,B=b.format;e=I.isFirefox;var x=I.marginNames;b=I.win;var w=H.addEvent,v=H.createElement,f=H.css,d=H.defined,q=H.discardElement,k=H.find,l=H.fireEvent,N=H.isNumber,u=H.merge,n=H.pick,J=H.relativeLength,E=H.stableSort,m=H.syncTimeout;H=H.wrap;var c=function(){function c(a,c){this.allItems=[];this.contentGroup=this.box=void 0;this.display=!1;this.group=void 0;this.offsetWidth=this.maxLegendWidth=this.maxItemWidth=this.legendWidth=this.legendHeight=this.lastLineHeight=this.lastItemY=\nthis.itemY=this.itemX=this.itemMarginTop=this.itemMarginBottom=this.itemHeight=this.initialItemY=0;this.options={};this.padding=0;this.pages=[];this.proximate=!1;this.scrollGroup=void 0;this.widthOption=this.totalItemWidth=this.titleHeight=this.symbolWidth=this.symbolHeight=0;this.chart=a;this.init(a,c)}c.prototype.init=function(a,c){this.chart=a;this.setOptions(c);c.enabled&&(this.render(),w(this.chart,\"endResize\",function(){this.legend.positionCheckboxes()}),this.proximate?this.unchartrender=w(this.chart,\n\"render\",function(){this.legend.proximatePositions();this.legend.positionItems()}):this.unchartrender&&this.unchartrender())};c.prototype.setOptions=function(a){var c=n(a.padding,8);this.options=a;this.chart.styledMode||(this.itemStyle=a.itemStyle,this.itemHiddenStyle=u(this.itemStyle,a.itemHiddenStyle));this.itemMarginTop=a.itemMarginTop||0;this.itemMarginBottom=a.itemMarginBottom||0;this.padding=c;this.initialItemY=c-5;this.symbolWidth=n(a.symbolWidth,16);this.pages=[];this.proximate=\"proximate\"===\na.layout&&!this.chart.inverted;this.baseline=void 0};c.prototype.update=function(a,c){var d=this.chart;this.setOptions(u(!0,this.options,a));this.destroy();d.isDirtyLegend=d.isDirtyBox=!0;n(c,!0)&&d.redraw();l(this,\"afterUpdate\")};c.prototype.colorizeItem=function(a,c){a.legendGroup[c?\"removeClass\":\"addClass\"](\"highcharts-legend-item-hidden\");if(!this.chart.styledMode){var d=this.options,b=a.legendItem,e=a.legendLine,h=a.legendSymbol,g=this.itemHiddenStyle.color;d=c?d.itemStyle.color:g;var f=c?a.color||\ng:g,m=a.options&&a.options.marker,k={fill:f};b&&b.css({fill:d,color:d});e&&e.attr({stroke:f});h&&(m&&h.isMarker&&(k=a.pointAttribs(),c||(k.stroke=k.fill=g)),h.attr(k))}l(this,\"afterColorizeItem\",{item:a,visible:c})};c.prototype.positionItems=function(){this.allItems.forEach(this.positionItem,this);this.chart.isResizing||this.positionCheckboxes()};c.prototype.positionItem=function(a){var c=this,b=this.options,e=b.symbolPadding,g=!b.rtl,f=a._legendItemPos;b=f[0];f=f[1];var k=a.checkbox,m=a.legendGroup;\nm&&m.element&&(e={translateX:g?b:this.legendWidth-b-2*e-4,translateY:f},g=function(){l(c,\"afterPositionItem\",{item:a})},d(m.translateY)?m.animate(e,void 0,g):(m.attr(e),g()));k&&(k.x=b,k.y=f)};c.prototype.destroyItem=function(a){var c=a.checkbox;[\"legendItem\",\"legendLine\",\"legendSymbol\",\"legendGroup\"].forEach(function(c){a[c]&&(a[c]=a[c].destroy())});c&&q(a.checkbox)};c.prototype.destroy=function(){function a(a){this[a]&&(this[a]=this[a].destroy())}this.getAllItems().forEach(function(c){[\"legendItem\",\n\"legendGroup\"].forEach(a,c)});\"clipRect up down pager nav box title group\".split(\" \").forEach(a,this);this.display=null};c.prototype.positionCheckboxes=function(){var a=this.group&&this.group.alignAttr,c=this.clipHeight||this.legendHeight,d=this.titleHeight;if(a){var b=a.translateY;this.allItems.forEach(function(e){var h=e.checkbox;if(h){var g=b+d+h.y+(this.scrollOffset||0)+3;f(h,{left:a.translateX+e.checkboxOffset+h.x-20+\"px\",top:g+\"px\",display:this.proximate||g>b-6&&g<b+c-6?\"\":\"none\"})}},this)}};\nc.prototype.renderTitle=function(){var a=this.options,c=this.padding,d=a.title,b=0;d.text&&(this.title||(this.title=this.chart.renderer.label(d.text,c-3,c-4,null,null,null,a.useHTML,null,\"legend-title\").attr({zIndex:1}),this.chart.styledMode||this.title.css(d.style),this.title.add(this.group)),d.width||this.title.css({width:this.maxLegendWidth+\"px\"}),a=this.title.getBBox(),b=a.height,this.offsetWidth=a.width,this.contentGroup.attr({translateY:b}));this.titleHeight=b};c.prototype.setText=function(a){var c=\nthis.options;a.legendItem.attr({text:c.labelFormat?B(c.labelFormat,a,this.chart):c.labelFormatter.call(a)})};c.prototype.renderItem=function(a){var c=this.chart,d=c.renderer,b=this.options,e=this.symbolWidth,g=b.symbolPadding||0,f=this.itemStyle,l=this.itemHiddenStyle,k=\"horizontal\"===b.layout?n(b.itemDistance,20):0,m=!b.rtl,q=a.legendItem,t=!a.series,p=!t&&a.series.drawLegendSymbol?a.series:a,v=p.options,w=this.createCheckboxForItem&&v&&v.showCheckbox;v=e+g+k+(w?20:0);var E=b.useHTML,F=a.options.className;\nq||(a.legendGroup=d.g(\"legend-item\").addClass(\"highcharts-\"+p.type+\"-series highcharts-color-\"+a.colorIndex+(F?\" \"+F:\"\")+(t?\" highcharts-series-\"+a.index:\"\")).attr({zIndex:1}).add(this.scrollGroup),a.legendItem=q=d.text(\"\",m?e+g:-g,this.baseline||0,E),c.styledMode||q.css(u(a.visible?f:l)),q.attr({align:m?\"left\":\"right\",zIndex:2}).add(a.legendGroup),this.baseline||(this.fontMetrics=d.fontMetrics(c.styledMode?12:f.fontSize,q),this.baseline=this.fontMetrics.f+3+this.itemMarginTop,q.attr(\"y\",this.baseline),\nthis.symbolHeight=b.symbolHeight||this.fontMetrics.f,b.squareSymbol&&(this.symbolWidth=n(b.symbolWidth,Math.max(this.symbolHeight,16)),v=this.symbolWidth+g+k+(w?20:0),m&&q.attr(\"x\",this.symbolWidth+g))),p.drawLegendSymbol(this,a),this.setItemEvents&&this.setItemEvents(a,q,E));w&&!a.checkbox&&this.createCheckboxForItem&&this.createCheckboxForItem(a);this.colorizeItem(a,a.visible);!c.styledMode&&f.width||q.css({width:(b.itemWidth||this.widthOption||c.spacingBox.width)-v+\"px\"});this.setText(a);c=q.getBBox();\na.itemWidth=a.checkboxOffset=b.itemWidth||a.legendItemWidth||c.width+v;this.maxItemWidth=Math.max(this.maxItemWidth,a.itemWidth);this.totalItemWidth+=a.itemWidth;this.itemHeight=a.itemHeight=Math.round(a.legendItemHeight||c.height||this.symbolHeight)};c.prototype.layoutItem=function(a){var c=this.options,d=this.padding,b=\"horizontal\"===c.layout,e=a.itemHeight,g=this.itemMarginBottom,f=this.itemMarginTop,l=b?n(c.itemDistance,20):0,m=this.maxLegendWidth;c=c.alignColumns&&this.totalItemWidth>m?this.maxItemWidth:\na.itemWidth;b&&this.itemX-d+c>m&&(this.itemX=d,this.lastLineHeight&&(this.itemY+=f+this.lastLineHeight+g),this.lastLineHeight=0);this.lastItemY=f+this.itemY+g;this.lastLineHeight=Math.max(e,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];b?this.itemX+=c:(this.itemY+=f+e+g,this.lastLineHeight=e);this.offsetWidth=this.widthOption||Math.max((b?this.itemX-d-(a.checkbox?0:l):c)+d,this.offsetWidth)};c.prototype.getAllItems=function(){var a=[];this.chart.series.forEach(function(c){var b=c&&\nc.options;c&&n(b.showInLegend,d(b.linkedTo)?!1:void 0,!0)&&(a=a.concat(c.legendItems||(\"point\"===b.legendType?c.data:c)))});l(this,\"afterGetAllItems\",{allItems:a});return a};c.prototype.getAlignment=function(){var a=this.options;return this.proximate?a.align.charAt(0)+\"tv\":a.floating?\"\":a.align.charAt(0)+a.verticalAlign.charAt(0)+a.layout.charAt(0)};c.prototype.adjustMargins=function(a,c){var b=this.chart,e=this.options,h=this.getAlignment();h&&[/(lth|ct|rth)/,/(rtv|rm|rbv)/,/(rbh|cb|lbh)/,/(lbv|lm|ltv)/].forEach(function(g,\nf){g.test(h)&&!d(a[f])&&(b[x[f]]=Math.max(b[x[f]],b.legend[(f+1)%2?\"legendHeight\":\"legendWidth\"]+[1,-1,-1,1][f]*e[f%2?\"x\":\"y\"]+n(e.margin,12)+c[f]+(b.titleOffset[f]||0)))})};c.prototype.proximatePositions=function(){var a=this.chart,c=[],d=\"left\"===this.options.align;this.allItems.forEach(function(b){var e;var h=d;if(b.yAxis){b.xAxis.options.reversed&&(h=!h);b.points&&(e=k(h?b.points:b.points.slice(0).reverse(),function(a){return N(a.plotY)}));h=this.itemMarginTop+b.legendItem.getBBox().height+this.itemMarginBottom;\nvar g=b.yAxis.top-a.plotTop;b.visible?(e=e?e.plotY:b.yAxis.height,e+=g-.3*h):e=g+b.yAxis.height;c.push({target:e,size:h,item:b})}},this);I.distribute(c,a.plotHeight);c.forEach(function(c){c.item._legendItemPos[1]=a.plotTop-a.spacing[0]+c.pos})};c.prototype.render=function(){var a=this.chart,c=a.renderer,d=this.group,b=this.box,e=this.options,g=this.padding;this.itemX=g;this.itemY=this.initialItemY;this.lastItemY=this.offsetWidth=0;this.widthOption=J(e.width,a.spacingBox.width-g);var f=a.spacingBox.width-\n2*g-e.x;-1<[\"rm\",\"lm\"].indexOf(this.getAlignment().substring(0,2))&&(f/=2);this.maxLegendWidth=this.widthOption||f;d||(this.group=d=c.g(\"legend\").attr({zIndex:7}).add(),this.contentGroup=c.g().attr({zIndex:1}).add(d),this.scrollGroup=c.g().add(this.contentGroup));this.renderTitle();var m=this.getAllItems();E(m,function(a,c){return(a.options&&a.options.legendIndex||0)-(c.options&&c.options.legendIndex||0)});e.reversed&&m.reverse();this.allItems=m;this.display=f=!!m.length;this.itemHeight=this.totalItemWidth=\nthis.maxItemWidth=this.lastLineHeight=0;m.forEach(this.renderItem,this);m.forEach(this.layoutItem,this);m=(this.widthOption||this.offsetWidth)+g;var k=this.lastItemY+this.lastLineHeight+this.titleHeight;k=this.handleOverflow(k);k+=g;b||(this.box=b=c.rect().addClass(\"highcharts-legend-box\").attr({r:e.borderRadius}).add(d),b.isNew=!0);a.styledMode||b.attr({stroke:e.borderColor,\"stroke-width\":e.borderWidth||0,fill:e.backgroundColor||\"none\"}).shadow(e.shadow);0<m&&0<k&&(b[b.isNew?\"attr\":\"animate\"](b.crisp.call({},\n{x:0,y:0,width:m,height:k},b.strokeWidth())),b.isNew=!1);b[f?\"show\":\"hide\"]();a.styledMode&&\"none\"===d.getStyle(\"display\")&&(m=k=0);this.legendWidth=m;this.legendHeight=k;f&&this.align();this.proximate||this.positionItems();l(this,\"afterRender\")};c.prototype.align=function(a){void 0===a&&(a=this.chart.spacingBox);var c=this.chart,d=this.options,b=a.y;/(lth|ct|rth)/.test(this.getAlignment())&&0<c.titleOffset[0]?b+=c.titleOffset[0]:/(lbh|cb|rbh)/.test(this.getAlignment())&&0<c.titleOffset[2]&&(b-=c.titleOffset[2]);\nb!==a.y&&(a=u(a,{y:b}));this.group.align(u(d,{width:this.legendWidth,height:this.legendHeight,verticalAlign:this.proximate?\"top\":d.verticalAlign}),!0,a)};c.prototype.handleOverflow=function(a){var c=this,d=this.chart,b=d.renderer,e=this.options,g=e.y,f=this.padding;g=d.spacingBox.height+(\"top\"===e.verticalAlign?-g:g)-f;var m=e.maxHeight,k,l=this.clipRect,q=e.navigation,t=n(q.animation,!0),p=q.arrowSize||12,u=this.nav,v=this.pages,w,F=this.allItems,S=function(a){\"number\"===typeof a?l.attr({height:a}):\nl&&(c.clipRect=l.destroy(),c.contentGroup.clip());c.contentGroup.div&&(c.contentGroup.div.style.clip=a?\"rect(\"+f+\"px,9999px,\"+(f+a)+\"px,0)\":\"auto\")},K=function(a){c[a]=b.circle(0,0,1.3*p).translate(p/2,p/2).add(u);d.styledMode||c[a].attr(\"fill\",\"rgba(0,0,0,0.0001)\");return c[a]};\"horizontal\"!==e.layout||\"middle\"===e.verticalAlign||e.floating||(g/=2);m&&(g=Math.min(g,m));v.length=0;a&&0<g&&a>g&&!1!==q.enabled?(this.clipHeight=k=Math.max(g-20-this.titleHeight-f,0),this.currentPage=n(this.currentPage,\n1),this.fullHeight=a,F.forEach(function(a,c){var d=a._legendItemPos[1],b=Math.round(a.legendItem.getBBox().height),e=v.length;if(!e||d-v[e-1]>k&&(w||d)!==v[e-1])v.push(w||d),e++;a.pageIx=e-1;w&&(F[c-1].pageIx=e-1);c===F.length-1&&d+b-v[e-1]>k&&d!==w&&(v.push(d),a.pageIx=e);d!==w&&(w=d)}),l||(l=c.clipRect=b.clipRect(0,f,9999,0),c.contentGroup.clip(l)),S(k),u||(this.nav=u=b.g().attr({zIndex:1}).add(this.group),this.up=b.symbol(\"triangle\",0,0,p,p).add(u),K(\"upTracker\").on(\"click\",function(){c.scroll(-1,\nt)}),this.pager=b.text(\"\",15,10).addClass(\"highcharts-legend-navigation\"),d.styledMode||this.pager.css(q.style),this.pager.add(u),this.down=b.symbol(\"triangle-down\",0,0,p,p).add(u),K(\"downTracker\").on(\"click\",function(){c.scroll(1,t)})),c.scroll(0),a=g):u&&(S(),this.nav=u.destroy(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0);return a};c.prototype.scroll=function(a,c){var d=this,b=this.chart,e=this.pages,h=e.length,g=this.currentPage+a;a=this.clipHeight;var f=this.options.navigation,k=\nthis.pager,q=this.padding;g>h&&(g=h);0<g&&(\"undefined\"!==typeof c&&C(c,b),this.nav.attr({translateX:q,translateY:a+this.padding+7+this.titleHeight,visibility:\"visible\"}),[this.up,this.upTracker].forEach(function(a){a.attr({\"class\":1===g?\"highcharts-legend-nav-inactive\":\"highcharts-legend-nav-active\"})}),k.attr({text:g+\"/\"+h}),[this.down,this.downTracker].forEach(function(a){a.attr({x:18+this.pager.getBBox().width,\"class\":g===h?\"highcharts-legend-nav-inactive\":\"highcharts-legend-nav-active\"})},this),\nb.styledMode||(this.up.attr({fill:1===g?f.inactiveColor:f.activeColor}),this.upTracker.css({cursor:1===g?\"default\":\"pointer\"}),this.down.attr({fill:g===h?f.inactiveColor:f.activeColor}),this.downTracker.css({cursor:g===h?\"default\":\"pointer\"})),this.scrollOffset=-e[g-1]+this.initialItemY,this.scrollGroup.animate({translateY:this.scrollOffset}),this.currentPage=g,this.positionCheckboxes(),c=D(n(c,b.renderer.globalAnimation,!0)),m(function(){l(d,\"afterScroll\",{currentPage:g})},c.duration))};c.prototype.setItemEvents=\nfunction(a,c,d){var b=this,e=b.chart.renderer.boxWrapper,h=a instanceof z,g=\"highcharts-legend-\"+(h?\"point\":\"series\")+\"-active\",f=b.chart.styledMode;(d?[c,a.legendSymbol]:[a.legendGroup]).forEach(function(d){if(d)d.on(\"mouseover\",function(){a.visible&&b.allItems.forEach(function(c){a!==c&&c.setState(\"inactive\",!h)});a.setState(\"hover\");a.visible&&e.addClass(g);f||c.css(b.options.itemHoverStyle)}).on(\"mouseout\",function(){b.chart.styledMode||c.css(u(a.visible?b.itemStyle:b.itemHiddenStyle));b.allItems.forEach(function(c){a!==\nc&&c.setState(\"\",!h)});e.removeClass(g);a.setState()}).on(\"click\",function(c){var d=function(){a.setVisible&&a.setVisible();b.allItems.forEach(function(c){a!==c&&c.setState(a.visible?\"inactive\":\"\",!h)})};e.removeClass(g);c={browserEvent:c};a.firePointEvent?a.firePointEvent(\"legendItemClick\",c,d):l(a,\"legendItemClick\",c,d)})})};c.prototype.createCheckboxForItem=function(a){a.checkbox=v(\"input\",{type:\"checkbox\",className:\"highcharts-legend-checkbox\",checked:a.selected,defaultChecked:a.selected},this.options.itemCheckboxStyle,\nthis.chart.container);w(a.checkbox,\"click\",function(c){l(a.series||a,\"checkboxClick\",{checked:c.target.checked,item:a},function(){a.select()})})};return c}();(/Trident\\/7\\.0/.test(b.navigator&&b.navigator.userAgent)||e)&&H(c.prototype,\"positionItem\",function(c,a){var d=this,b=function(){a._legendItemPos&&c.call(d,a)};b();d.bubbleLegend||setTimeout(b)});I.Legend=c;return I.Legend});O(e,\"Core/Series/SeriesRegistry.js\",[e[\"Core/Globals.js\"],e[\"Core/Options.js\"],e[\"Core/Series/Point.js\"],e[\"Core/Utilities.js\"]],\nfunction(e,b,I,z){var D=b.defaultOptions,G=z.error,C=z.extendClass,B=z.merge,x;(function(b){function v(e,d){var f=D.plotOptions||{},k=d.defaultOptions;d.prototype.pointClass||(d.prototype.pointClass=I);d.prototype.type=e;k&&(f[e]=k);b.seriesTypes[e]=d}b.seriesTypes=e.seriesTypes;b.getSeries=function(e,d){void 0===d&&(d={});var f=e.options.chart;f=d.type||f.type||f.defaultSeriesType||\"\";var k=b.seriesTypes[f];b||G(17,!0,e,{missingModuleFor:f});f=new k;\"function\"===typeof f.init&&f.init(e,d);return f};\nb.registerSeriesType=v;b.seriesType=function(e,d,q,k,l){var f=D.plotOptions||{};d=d||\"\";f[e]=B(f[d],q);v(e,C(b.seriesTypes[d]||function(){},k));b.seriesTypes[e].prototype.type=e;l&&(b.seriesTypes[e].prototype.pointClass=C(I,l));return b.seriesTypes[e]}})(x||(x={}));e.seriesType=x.seriesType;return x});O(e,\"Core/Chart/Chart.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Axis/Axis.js\"],e[\"Core/FormatUtilities.js\"],e[\"Core/Globals.js\"],e[\"Core/Legend.js\"],e[\"Core/MSPointer.js\"],e[\"Core/Options.js\"],\ne[\"Core/Color/Palette.js\"],e[\"Core/Pointer.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Time.js\"],e[\"Core/Utilities.js\"],e[\"Core/Renderer/HTML/AST.js\"]],function(e,b,I,z,H,G,C,B,x,w,v,f,d){var q=e.animate,k=e.animObject,l=e.setAnimation,D=I.numberFormat,u=z.charts,n=z.doc,J=z.win,E=C.defaultOptions,m=C.defaultTime,c=w.seriesTypes,g=f.addEvent,a=f.attr,h=f.cleanRecursively,r=f.createElement,A=f.css,y=f.defined,L=f.discardElement,P=f.erase,R=f.error,V=f.extend,Q=f.find,M=f.fireEvent,t=f.getStyle,\np=f.isArray,O=f.isFunction,Z=f.isNumber,ea=f.isObject,F=f.isString,S=f.merge,K=f.objectEach,T=f.pick,X=f.pInt,U=f.relativeLength,fa=f.removeEvent,Y=f.splat,ba=f.syncTimeout,ha=f.uniqueKey,ca=z.marginNames,aa=function(){function e(a,c,d){this.series=this.renderTo=this.renderer=this.pointer=this.pointCount=this.plotWidth=this.plotTop=this.plotLeft=this.plotHeight=this.plotBox=this.options=this.numberFormatter=this.margin=this.legend=this.labelCollectors=this.isResizing=this.index=this.container=this.colorCounter=\nthis.clipBox=this.chartWidth=this.chartHeight=this.bounds=this.axisOffset=this.axes=void 0;this.sharedClips={};this.yAxis=this.xAxis=this.userOptions=this.titleOffset=this.time=this.symbolCounter=this.spacingBox=this.spacing=void 0;this.getArgs(a,c,d)}e.prototype.getArgs=function(a,c,d){F(a)||a.nodeName?(this.renderTo=a,this.init(c,d)):this.init(a,c)};e.prototype.init=function(a,c){var d=a.plotOptions||{};M(this,\"init\",{args:arguments},function(){var b=S(E,a),e=b.chart;K(b.plotOptions,function(a,\nc){ea(a)&&(a.tooltip=d[c]&&S(d[c].tooltip)||void 0)});b.tooltip.userOptions=a.chart&&a.chart.forExport&&a.tooltip.userOptions||a.tooltip;this.userOptions=a;var h=e.events;this.margin=[];this.spacing=[];this.bounds={h:{},v:{}};this.labelCollectors=[];this.callback=c;this.isResizing=0;this.options=b;this.axes=[];this.series=[];this.time=a.time&&Object.keys(a.time).length?new v(a.time):z.time;this.numberFormatter=e.numberFormatter||D;this.styledMode=e.styledMode;this.hasCartesianSeries=e.showAxes;var f=\nthis;f.index=u.length;u.push(f);z.chartCount++;h&&K(h,function(a,c){O(a)&&g(f,c,a)});f.xAxis=[];f.yAxis=[];f.pointCount=f.colorCounter=f.symbolCounter=0;M(f,\"afterInit\");f.firstRender()})};e.prototype.initSeries=function(a){var d=this.options.chart;d=a.type||d.type||d.defaultSeriesType;var b=c[d];b||R(17,!0,this,{missingModuleFor:d});d=new b;\"function\"===typeof d.init&&d.init(this,a);return d};e.prototype.setSeriesData=function(){this.getSeriesOrderByLinks().forEach(function(a){a.points||a.data||\n!a.enabledDataSorting||a.setData(a.options.data,!1)})};e.prototype.getSeriesOrderByLinks=function(){return this.series.concat().sort(function(a,c){return a.linkedSeries.length||c.linkedSeries.length?c.linkedSeries.length-a.linkedSeries.length:0})};e.prototype.orderSeries=function(a){var c=this.series;for(a=a||0;a<c.length;a++)c[a]&&(c[a].index=a,c[a].name=c[a].getName())};e.prototype.isInsidePlot=function(a,c,d){void 0===d&&(d={});var b=this.inverted,e=this.plotBox,h=this.plotLeft,g=this.plotTop,\nf=this.scrollablePlotBox,m=this.scrollingContainer;m=void 0===m?{scrollLeft:0,scrollTop:0}:m;var k=m.scrollLeft;m=m.scrollTop;var l=d.series;e=d.visiblePlotOnly&&f||e;f=d.inverted?c:a;c=d.inverted?a:c;a={x:f,y:c,isInsidePlot:!0};if(!d.ignoreX){var F=l&&(b?l.yAxis:l.xAxis)||{pos:h,len:Infinity};f=d.paneCoordinates?F.pos+f:h+f;f>=Math.max(k+h,F.pos)&&f<=Math.min(k+h+e.width,F.pos+F.len)||(a.isInsidePlot=!1)}!d.ignoreY&&a.isInsidePlot&&(b=l&&(b?l.xAxis:l.yAxis)||{pos:g,len:Infinity},d=d.paneCoordinates?\nb.pos+c:g+c,d>=Math.max(m+g,b.pos)&&d<=Math.min(m+g+e.height,b.pos+b.len)||(a.isInsidePlot=!1));M(this,\"afterIsInsidePlot\",a);return a.isInsidePlot};e.prototype.redraw=function(a){M(this,\"beforeRedraw\");var c=this.hasCartesianSeries?this.axes:this.colorAxis||[],d=this.series,b=this.pointer,e=this.legend,h=this.userOptions.legend,g=this.isDirtyLegend,f=this.isDirtyBox,m=this.renderer,k=m.isHidden(),F=[];this.setResponsive&&this.setResponsive(!1);l(this.hasRendered?a:!1,this);k&&this.temporaryDisplay();\nthis.layOutTitles();for(a=d.length;a--;){var n=d[a];if(n.options.stacking||n.options.centerInCategory){var r=!0;if(n.isDirty){var K=!0;break}}}if(K)for(a=d.length;a--;)n=d[a],n.options.stacking&&(n.isDirty=!0);d.forEach(function(a){a.isDirty&&(\"point\"===a.options.legendType?(\"function\"===typeof a.updateTotals&&a.updateTotals(),g=!0):h&&(h.labelFormatter||h.labelFormat)&&(g=!0));a.isDirtyData&&M(a,\"updatedData\")});g&&e&&e.options.enabled&&(e.render(),this.isDirtyLegend=!1);r&&this.getStacks();c.forEach(function(a){a.updateNames();\na.setScale()});this.getMargins();c.forEach(function(a){a.isDirty&&(f=!0)});c.forEach(function(a){var c=a.min+\",\"+a.max;a.extKey!==c&&(a.extKey=c,F.push(function(){M(a,\"afterSetExtremes\",V(a.eventArgs,a.getExtremes()));delete a.eventArgs}));(f||r)&&a.redraw()});f&&this.drawChartBox();M(this,\"predraw\");d.forEach(function(a){(f||a.isDirty)&&a.visible&&a.redraw();a.isDirtyData=!1});b&&b.reset(!0);m.draw();M(this,\"redraw\");M(this,\"render\");k&&this.temporaryDisplay(!0);F.forEach(function(a){a.call()})};\ne.prototype.get=function(a){function c(c){return c.id===a||c.options&&c.options.id===a}var d=this.series,b;var e=Q(this.axes,c)||Q(this.series,c);for(b=0;!e&&b<d.length;b++)e=Q(d[b].points||[],c);return e};e.prototype.getAxes=function(){var a=this,c=this.options,d=c.xAxis=Y(c.xAxis||{});c=c.yAxis=Y(c.yAxis||{});M(this,\"getAxes\");d.forEach(function(a,c){a.index=c;a.isX=!0});c.forEach(function(a,c){a.index=c});d.concat(c).forEach(function(c){new b(a,c)});M(this,\"afterGetAxes\")};e.prototype.getSelectedPoints=\nfunction(){var a=[];this.series.forEach(function(c){a=a.concat(c.getPointsCollection().filter(function(a){return T(a.selectedStaging,a.selected)}))});return a};e.prototype.getSelectedSeries=function(){return this.series.filter(function(a){return a.selected})};e.prototype.setTitle=function(a,c,d){this.applyDescription(\"title\",a);this.applyDescription(\"subtitle\",c);this.applyDescription(\"caption\",void 0);this.layOutTitles(d)};e.prototype.applyDescription=function(a,c){var d=this,b=\"title\"===a?{color:B.neutralColor80,\nfontSize:this.options.isStock?\"16px\":\"18px\"}:{color:B.neutralColor60};b=this.options[a]=S(!this.styledMode&&{style:b},this.options[a],c);var e=this[a];e&&c&&(this[a]=e=e.destroy());b&&!e&&(e=this.renderer.text(b.text,0,0,b.useHTML).attr({align:b.align,\"class\":\"highcharts-\"+a,zIndex:b.zIndex||4}).add(),e.update=function(c){d[{title:\"setTitle\",subtitle:\"setSubtitle\",caption:\"setCaption\"}[a]](c)},this.styledMode||e.css(b.style),this[a]=e)};e.prototype.layOutTitles=function(a){var c=[0,0,0],d=this.renderer,\nb=this.spacingBox;[\"title\",\"subtitle\",\"caption\"].forEach(function(a){var e=this[a],h=this.options[a],g=h.verticalAlign||\"top\";a=\"title\"===a?-3:\"top\"===g?c[0]+2:0;if(e){if(!this.styledMode)var f=h.style.fontSize;f=d.fontMetrics(f,e).b;e.css({width:(h.width||b.width+(h.widthAdjust||0))+\"px\"});var m=Math.round(e.getBBox(h.useHTML).height);e.align(V({y:\"bottom\"===g?f:a+f,height:m},h),!1,\"spacingBox\");h.floating||(\"top\"===g?c[0]=Math.ceil(c[0]+m):\"bottom\"===g&&(c[2]=Math.ceil(c[2]+m)))}},this);c[0]&&\"top\"===\n(this.options.title.verticalAlign||\"top\")&&(c[0]+=this.options.title.margin);c[2]&&\"bottom\"===this.options.caption.verticalAlign&&(c[2]+=this.options.caption.margin);var e=!this.titleOffset||this.titleOffset.join(\",\")!==c.join(\",\");this.titleOffset=c;M(this,\"afterLayOutTitles\");!this.isDirtyBox&&e&&(this.isDirtyBox=this.isDirtyLegend=e,this.hasRendered&&T(a,!0)&&this.isDirtyBox&&this.redraw())};e.prototype.getChartSize=function(){var a=this.options.chart,c=a.width;a=a.height;var d=this.renderTo;y(c)||\n(this.containerWidth=t(d,\"width\"));y(a)||(this.containerHeight=t(d,\"height\"));this.chartWidth=Math.max(0,c||this.containerWidth||600);this.chartHeight=Math.max(0,U(a,this.chartWidth)||(1<this.containerHeight?this.containerHeight:400))};e.prototype.temporaryDisplay=function(a){var c=this.renderTo;if(a)for(;c&&c.style;)c.hcOrigStyle&&(A(c,c.hcOrigStyle),delete c.hcOrigStyle),c.hcOrigDetached&&(n.body.removeChild(c),c.hcOrigDetached=!1),c=c.parentNode;else for(;c&&c.style;){n.body.contains(c)||c.parentNode||\n(c.hcOrigDetached=!0,n.body.appendChild(c));if(\"none\"===t(c,\"display\",!1)||c.hcOricDetached)c.hcOrigStyle={display:c.style.display,height:c.style.height,overflow:c.style.overflow},a={display:\"block\",overflow:\"hidden\"},c!==this.renderTo&&(a.height=0),A(c,a),c.offsetWidth||c.style.setProperty(\"display\",\"block\",\"important\");c=c.parentNode;if(c===n.body)break}};e.prototype.setClassName=function(a){this.container.className=\"highcharts-container \"+(a||\"\")};e.prototype.getContainer=function(){var c=this.options,\nd=c.chart;var b=this.renderTo;var e=ha(),h,g;b||(this.renderTo=b=d.renderTo);F(b)&&(this.renderTo=b=n.getElementById(b));b||R(13,!0,this);var f=X(a(b,\"data-highcharts-chart\"));Z(f)&&u[f]&&u[f].hasRendered&&u[f].destroy();a(b,\"data-highcharts-chart\",this.index);b.innerHTML=\"\";d.skipClone||b.offsetWidth||this.temporaryDisplay();this.getChartSize();f=this.chartWidth;var m=this.chartHeight;A(b,{overflow:\"hidden\"});this.styledMode||(h=V({position:\"relative\",overflow:\"hidden\",width:f+\"px\",height:m+\"px\",\ntextAlign:\"left\",lineHeight:\"normal\",zIndex:0,\"-webkit-tap-highlight-color\":\"rgba(0,0,0,0)\",userSelect:\"none\",\"touch-action\":\"manipulation\",outline:\"none\"},d.style||{}));this.container=b=r(\"div\",{id:e},h,b);this._cursor=b.style.cursor;this.renderer=new (z[d.renderer]||z.Renderer)(b,f,m,null,d.forExport,c.exporting&&c.exporting.allowHTML,this.styledMode);l(void 0,this);this.setClassName(d.className);if(this.styledMode)for(g in c.defs)this.renderer.definition(c.defs[g]);else this.renderer.setStyle(d.style);\nthis.renderer.chartIndex=this.index;M(this,\"afterGetContainer\")};e.prototype.getMargins=function(a){var c=this.spacing,d=this.margin,b=this.titleOffset;this.resetMargins();b[0]&&!y(d[0])&&(this.plotTop=Math.max(this.plotTop,b[0]+c[0]));b[2]&&!y(d[2])&&(this.marginBottom=Math.max(this.marginBottom,b[2]+c[2]));this.legend&&this.legend.display&&this.legend.adjustMargins(d,c);M(this,\"getMargins\");a||this.getAxisMargins()};e.prototype.getAxisMargins=function(){var a=this,c=a.axisOffset=[0,0,0,0],d=a.colorAxis,\nb=a.margin,e=function(a){a.forEach(function(a){a.visible&&a.getOffset()})};a.hasCartesianSeries?e(a.axes):d&&d.length&&e(d);ca.forEach(function(d,e){y(b[e])||(a[d]+=c[e])});a.setChartSize()};e.prototype.reflow=function(a){var c=this,d=c.options.chart,b=c.renderTo,e=y(d.width)&&y(d.height),h=d.width||t(b,\"width\");d=d.height||t(b,\"height\");b=a?a.target:J;delete c.pointer.chartPosition;if(!e&&!c.isPrinting&&h&&d&&(b===J||b===n)){if(h!==c.containerWidth||d!==c.containerHeight)f.clearTimeout(c.reflowTimeout),\nc.reflowTimeout=ba(function(){c.container&&c.setSize(void 0,void 0,!1)},a?100:0);c.containerWidth=h;c.containerHeight=d}};e.prototype.setReflow=function(a){var c=this;!1===a||this.unbindReflow?!1===a&&this.unbindReflow&&(this.unbindReflow=this.unbindReflow()):(this.unbindReflow=g(J,\"resize\",function(a){c.options&&c.reflow(a)}),g(this,\"destroy\",this.unbindReflow))};e.prototype.setSize=function(a,c,d){var b=this,e=b.renderer;b.isResizing+=1;l(d,b);d=e.globalAnimation;b.oldChartHeight=b.chartHeight;\nb.oldChartWidth=b.chartWidth;\"undefined\"!==typeof a&&(b.options.chart.width=a);\"undefined\"!==typeof c&&(b.options.chart.height=c);b.getChartSize();b.styledMode||(d?q:A)(b.container,{width:b.chartWidth+\"px\",height:b.chartHeight+\"px\"},d);b.setChartSize(!0);e.setSize(b.chartWidth,b.chartHeight,d);b.axes.forEach(function(a){a.isDirty=!0;a.setScale()});b.isDirtyLegend=!0;b.isDirtyBox=!0;b.layOutTitles();b.getMargins();b.redraw(d);b.oldChartHeight=null;M(b,\"resize\");ba(function(){b&&M(b,\"endResize\",null,\nfunction(){--b.isResizing})},k(d).duration)};e.prototype.setChartSize=function(a){var c=this.inverted,d=this.renderer,b=this.chartWidth,e=this.chartHeight,h=this.options.chart,g=this.spacing,f=this.clipOffset,m,l,k,F;this.plotLeft=m=Math.round(this.plotLeft);this.plotTop=l=Math.round(this.plotTop);this.plotWidth=k=Math.max(0,Math.round(b-m-this.marginRight));this.plotHeight=F=Math.max(0,Math.round(e-l-this.marginBottom));this.plotSizeX=c?F:k;this.plotSizeY=c?k:F;this.plotBorderWidth=h.plotBorderWidth||\n0;this.spacingBox=d.spacingBox={x:g[3],y:g[0],width:b-g[3]-g[1],height:e-g[0]-g[2]};this.plotBox=d.plotBox={x:m,y:l,width:k,height:F};e=2*Math.floor(this.plotBorderWidth/2);c=Math.ceil(Math.max(e,f[3])/2);b=Math.ceil(Math.max(e,f[0])/2);this.clipBox={x:c,y:b,width:Math.floor(this.plotSizeX-Math.max(e,f[1])/2-c),height:Math.max(0,Math.floor(this.plotSizeY-Math.max(e,f[2])/2-b))};a||(this.axes.forEach(function(a){a.setAxisSize();a.setAxisTranslation()}),d.alignElements());M(this,\"afterSetChartSize\",\n{skipAxes:a})};e.prototype.resetMargins=function(){M(this,\"resetMargins\");var a=this,c=a.options.chart;[\"margin\",\"spacing\"].forEach(function(d){var b=c[d],e=ea(b)?b:[b,b,b,b];[\"Top\",\"Right\",\"Bottom\",\"Left\"].forEach(function(b,h){a[d][h]=T(c[d+b],e[h])})});ca.forEach(function(c,d){a[c]=T(a.margin[d],a.spacing[d])});a.axisOffset=[0,0,0,0];a.clipOffset=[0,0,0,0]};e.prototype.drawChartBox=function(){var a=this.options.chart,c=this.renderer,d=this.chartWidth,b=this.chartHeight,e=this.chartBackground,h=\nthis.plotBackground,g=this.plotBorder,f=this.styledMode,m=this.plotBGImage,k=a.backgroundColor,l=a.plotBackgroundColor,F=a.plotBackgroundImage,n,r=this.plotLeft,K=this.plotTop,q=this.plotWidth,p=this.plotHeight,u=this.plotBox,v=this.clipRect,t=this.clipBox,w=\"animate\";e||(this.chartBackground=e=c.rect().addClass(\"highcharts-background\").add(),w=\"attr\");if(f)var y=n=e.strokeWidth();else{y=a.borderWidth||0;n=y+(a.shadow?8:0);k={fill:k||\"none\"};if(y||e[\"stroke-width\"])k.stroke=a.borderColor,k[\"stroke-width\"]=\ny;e.attr(k).shadow(a.shadow)}e[w]({x:n/2,y:n/2,width:d-n-y%2,height:b-n-y%2,r:a.borderRadius});w=\"animate\";h||(w=\"attr\",this.plotBackground=h=c.rect().addClass(\"highcharts-plot-background\").add());h[w](u);f||(h.attr({fill:l||\"none\"}).shadow(a.plotShadow),F&&(m?(F!==m.attr(\"href\")&&m.attr(\"href\",F),m.animate(u)):this.plotBGImage=c.image(F,r,K,q,p).add()));v?v.animate({width:t.width,height:t.height}):this.clipRect=c.clipRect(t);w=\"animate\";g||(w=\"attr\",this.plotBorder=g=c.rect().addClass(\"highcharts-plot-border\").attr({zIndex:1}).add());\nf||g.attr({stroke:a.plotBorderColor,\"stroke-width\":a.plotBorderWidth||0,fill:\"none\"});g[w](g.crisp({x:r,y:K,width:q,height:p},-g.strokeWidth()));this.isDirtyBox=!1;M(this,\"afterDrawChartBox\")};e.prototype.propFromSeries=function(){var a=this,d=a.options.chart,b,e=a.options.series,h,g;[\"inverted\",\"angular\",\"polar\"].forEach(function(f){b=c[d.type||d.defaultSeriesType];g=d[f]||b&&b.prototype[f];for(h=e&&e.length;!g&&h--;)(b=c[e[h].type])&&b.prototype[f]&&(g=!0);a[f]=g})};e.prototype.linkSeries=function(){var a=\nthis,c=a.series;c.forEach(function(a){a.linkedSeries.length=0});c.forEach(function(c){var d=c.options.linkedTo;F(d)&&(d=\":previous\"===d?a.series[c.index-1]:a.get(d))&&d.linkedParent!==c&&(d.linkedSeries.push(c),c.linkedParent=d,d.enabledDataSorting&&c.setDataSortingOptions(),c.visible=T(c.options.visible,d.options.visible,c.visible))});M(this,\"afterLinkSeries\")};e.prototype.renderSeries=function(){this.series.forEach(function(a){a.translate();a.render()})};e.prototype.renderLabels=function(){var a=\nthis,c=a.options.labels;c.items&&c.items.forEach(function(d){var b=V(c.style,d.style),e=X(b.left)+a.plotLeft,h=X(b.top)+a.plotTop+12;delete b.left;delete b.top;a.renderer.text(d.html,e,h).attr({zIndex:2}).css(b).add()})};e.prototype.render=function(){var a=this.axes,c=this.colorAxis,d=this.renderer,b=this.options,e=0,h=function(a){a.forEach(function(a){a.visible&&a.render()})};this.setTitle();this.legend=new H(this,b.legend);this.getStacks&&this.getStacks();this.getMargins(!0);this.setChartSize();\nb=this.plotWidth;a.some(function(a){if(a.horiz&&a.visible&&a.options.labels.enabled&&a.series.length)return e=21,!0});var g=this.plotHeight=Math.max(this.plotHeight-e,0);a.forEach(function(a){a.setScale()});this.getAxisMargins();var f=1.1<b/this.plotWidth;var m=1.05<g/this.plotHeight;if(f||m)a.forEach(function(a){(a.horiz&&f||!a.horiz&&m)&&a.setTickInterval(!0)}),this.getMargins();this.drawChartBox();this.hasCartesianSeries?h(a):c&&c.length&&h(c);this.seriesGroup||(this.seriesGroup=d.g(\"series-group\").attr({zIndex:3}).add());\nthis.renderSeries();this.renderLabels();this.addCredits();this.setResponsive&&this.setResponsive();this.hasRendered=!0};e.prototype.addCredits=function(a){var c=this,d=S(!0,this.options.credits,a);d.enabled&&!this.credits&&(this.credits=this.renderer.text(d.text+(this.mapCredits||\"\"),0,0).addClass(\"highcharts-credits\").on(\"click\",function(){d.href&&(J.location.href=d.href)}).attr({align:d.position.align,zIndex:8}),c.styledMode||this.credits.css(d.style),this.credits.add().align(d.position),this.credits.update=\nfunction(a){c.credits=c.credits.destroy();c.addCredits(a)})};e.prototype.destroy=function(){var a=this,c=a.axes,d=a.series,b=a.container,e,h=b&&b.parentNode;M(a,\"destroy\");a.renderer.forExport?P(u,a):u[a.index]=void 0;z.chartCount--;a.renderTo.removeAttribute(\"data-highcharts-chart\");fa(a);for(e=c.length;e--;)c[e]=c[e].destroy();this.scroller&&this.scroller.destroy&&this.scroller.destroy();for(e=d.length;e--;)d[e]=d[e].destroy();\"title subtitle chartBackground plotBackground plotBGImage plotBorder seriesGroup clipRect credits pointer rangeSelector legend resetZoomButton tooltip renderer\".split(\" \").forEach(function(c){var d=\na[c];d&&d.destroy&&(a[c]=d.destroy())});b&&(b.innerHTML=\"\",fa(b),h&&L(b));K(a,function(c,d){delete a[d]})};e.prototype.firstRender=function(){var a=this,c=a.options;if(!a.isReadyToRender||a.isReadyToRender()){a.getContainer();a.resetMargins();a.setChartSize();a.propFromSeries();a.getAxes();(p(c.series)?c.series:[]).forEach(function(c){a.initSeries(c)});a.linkSeries();a.setSeriesData();M(a,\"beforeRender\");x&&(a.pointer=z.hasTouch||!J.PointerEvent&&!J.MSPointerEvent?new x(a,c):new G(a,c));a.render();\na.pointer.getChartPosition();if(!a.renderer.imgCount&&!a.hasLoaded)a.onload();a.temporaryDisplay(!0)}};e.prototype.onload=function(){this.callbacks.concat([this.callback]).forEach(function(a){a&&\"undefined\"!==typeof this.index&&a.apply(this,[this])},this);M(this,\"load\");M(this,\"render\");y(this.index)&&this.setReflow(this.options.chart.reflow);this.hasLoaded=!0};e.prototype.addSeries=function(a,c,d){var b,e=this;a&&(c=T(c,!0),M(e,\"addSeries\",{options:a},function(){b=e.initSeries(a);e.isDirtyLegend=\n!0;e.linkSeries();b.enabledDataSorting&&b.setData(a.data,!1);M(e,\"afterAddSeries\",{series:b});c&&e.redraw(d)}));return b};e.prototype.addAxis=function(a,c,d,b){return this.createAxis(c?\"xAxis\":\"yAxis\",{axis:a,redraw:d,animation:b})};e.prototype.addColorAxis=function(a,c,d){return this.createAxis(\"colorAxis\",{axis:a,redraw:c,animation:d})};e.prototype.createAxis=function(a,c){var d=\"colorAxis\"===a,e=c.redraw,h=c.animation;a=S(c.axis,{index:this[a].length,isX:\"xAxis\"===a});a=d?new z.ColorAxis(this,\na):new b(this,a);d&&(this.isDirtyLegend=!0,this.axes.forEach(function(a){a.series=[]}),this.series.forEach(function(a){a.bindAxes();a.isDirtyData=!0}));T(e,!0)&&this.redraw(h);return a};e.prototype.showLoading=function(a){var c=this,b=c.options,e=c.loadingDiv,h=c.loadingSpan,f=b.loading,m=function(){e&&A(e,{left:c.plotLeft+\"px\",top:c.plotTop+\"px\",width:c.plotWidth+\"px\",height:c.plotHeight+\"px\"})};e||(c.loadingDiv=e=r(\"div\",{className:\"highcharts-loading highcharts-loading-hidden\"},null,c.container));\nh||(c.loadingSpan=h=r(\"span\",{className:\"highcharts-loading-inner\"},null,e),g(c,\"redraw\",m));e.className=\"highcharts-loading\";d.setElementHTML(h,T(a,b.lang.loading,\"\"));c.styledMode||(A(e,V(f.style,{zIndex:10})),A(h,f.labelStyle),c.loadingShown||(A(e,{opacity:0,display:\"\"}),q(e,{opacity:f.style.opacity||.5},{duration:f.showDuration||0})));c.loadingShown=!0;m()};e.prototype.hideLoading=function(){var a=this.options,c=this.loadingDiv;c&&(c.className=\"highcharts-loading highcharts-loading-hidden\",this.styledMode||\nq(c,{opacity:0},{duration:a.loading.hideDuration||100,complete:function(){A(c,{display:\"none\"})}}));this.loadingShown=!1};e.prototype.update=function(a,c,d,b){var e=this,g={credits:\"addCredits\",title:\"setTitle\",subtitle:\"setSubtitle\",caption:\"setCaption\"},f,k,l,n=a.isResponsiveOptions,r=[];M(e,\"update\",{options:a});n||e.setResponsive(!1,!0);a=h(a,e.options);e.userOptions=S(e.userOptions,a);if(f=a.chart){S(!0,e.options.chart,f);\"className\"in f&&e.setClassName(f.className);\"reflow\"in f&&e.setReflow(f.reflow);\nif(\"inverted\"in f||\"polar\"in f||\"type\"in f){e.propFromSeries();var q=!0}\"alignTicks\"in f&&(q=!0);K(f,function(a,c){-1!==e.propsRequireUpdateSeries.indexOf(\"chart.\"+c)&&(k=!0);-1!==e.propsRequireDirtyBox.indexOf(c)&&(e.isDirtyBox=!0);-1!==e.propsRequireReflow.indexOf(c)&&(n?e.isDirtyBox=!0:l=!0)});!e.styledMode&&\"style\"in f&&e.renderer.setStyle(f.style)}!e.styledMode&&a.colors&&(this.options.colors=a.colors);a.time&&(this.time===m&&(this.time=new v(a.time)),S(!0,e.options.time,a.time));K(a,function(c,\nd){if(e[d]&&\"function\"===typeof e[d].update)e[d].update(c,!1);else if(\"function\"===typeof e[g[d]])e[g[d]](c);else\"colors\"!==d&&-1===e.collectionsWithUpdate.indexOf(d)&&S(!0,e.options[d],a[d]);\"chart\"!==d&&-1!==e.propsRequireUpdateSeries.indexOf(d)&&(k=!0)});this.collectionsWithUpdate.forEach(function(c){if(a[c]){var b=[];e[c].forEach(function(a,c){a.options.isInternal||b.push(T(a.options.index,c))});Y(a[c]).forEach(function(a,h){var g=y(a.id),f;g&&(f=e.get(a.id));!f&&e[c]&&(f=e[c][b?b[h]:h])&&g&&\ny(f.options.id)&&(f=void 0);f&&f.coll===c&&(f.update(a,!1),d&&(f.touched=!0));!f&&d&&e.collectionsWithInit[c]&&(e.collectionsWithInit[c][0].apply(e,[a].concat(e.collectionsWithInit[c][1]||[]).concat([!1])).touched=!0)});d&&e[c].forEach(function(a){a.touched||a.options.isInternal?delete a.touched:r.push(a)})}});r.forEach(function(a){a.chart&&a.remove(!1)});q&&e.axes.forEach(function(a){a.update({},!1)});k&&e.getSeriesOrderByLinks().forEach(function(a){a.chart&&a.update({},!1)},this);q=f&&f.width;f=\nf&&f.height;F(f)&&(f=U(f,q||e.chartWidth));l||Z(q)&&q!==e.chartWidth||Z(f)&&f!==e.chartHeight?e.setSize(q,f,b):T(c,!0)&&e.redraw(b);M(e,\"afterUpdate\",{options:a,redraw:c,animation:b})};e.prototype.setSubtitle=function(a,c){this.applyDescription(\"subtitle\",a);this.layOutTitles(c)};e.prototype.setCaption=function(a,c){this.applyDescription(\"caption\",a);this.layOutTitles(c)};e.prototype.showResetZoom=function(){function a(){c.zoomOut()}var c=this,d=E.lang,b=c.options.chart.resetZoomButton,e=b.theme,\nh=e.states,g=\"chart\"===b.relativeTo||\"spacingBox\"===b.relativeTo?null:\"scrollablePlotBox\";M(this,\"beforeShowResetZoom\",null,function(){c.resetZoomButton=c.renderer.button(d.resetZoom,null,null,a,e,h&&h.hover).attr({align:b.position.align,title:d.resetZoomTitle}).addClass(\"highcharts-reset-zoom\").add().align(b.position,!1,g)});M(this,\"afterShowResetZoom\")};e.prototype.zoomOut=function(){M(this,\"selection\",{resetSelection:!0},this.zoom)};e.prototype.zoom=function(a){var c=this,d,b=c.pointer,e=!1,h=\nc.inverted?b.mouseDownX:b.mouseDownY;!a||a.resetSelection?(c.axes.forEach(function(a){d=a.zoom()}),b.initiated=!1):a.xAxis.concat(a.yAxis).forEach(function(a){var g=a.axis,f=c.inverted?g.left:g.top,m=c.inverted?f+g.width:f+g.height,k=g.isXAxis,l=!1;if(!k&&h>=f&&h<=m||k||!y(h))l=!0;b[k?\"zoomX\":\"zoomY\"]&&l&&(d=g.zoom(a.min,a.max),g.displayBtn&&(e=!0))});var g=c.resetZoomButton;e&&!g?c.showResetZoom():!e&&ea(g)&&(c.resetZoomButton=g.destroy());d&&c.redraw(T(c.options.chart.animation,a&&a.animation,100>\nc.pointCount))};e.prototype.pan=function(a,c){var d=this,b=d.hoverPoints,e=d.options.chart,h=d.options.mapNavigation&&d.options.mapNavigation.enabled,g;c=\"object\"===typeof c?c:{enabled:c,type:\"x\"};e&&e.panning&&(e.panning=c);var f=c.type;M(this,\"pan\",{originalEvent:a},function(){b&&b.forEach(function(a){a.setState()});var c=[1];\"xy\"===f?c=[1,0]:\"y\"===f&&(c=[0]);c.forEach(function(c){var b=d[c?\"xAxis\":\"yAxis\"][0],e=b.horiz,m=a[e?\"chartX\":\"chartY\"];e=e?\"mouseDownX\":\"mouseDownY\";var k=d[e],l=(b.pointRange||\n0)/2,F=b.reversed&&!d.inverted||!b.reversed&&d.inverted?-1:1,n=b.getExtremes(),r=b.toValue(k-m,!0)+l*F;F=b.toValue(k+b.len-m,!0)-l*F;var K=F<r;k=K?F:r;r=K?r:F;F=b.hasVerticalPanning();var q=b.panningState;!F||c||q&&!q.isDirty||b.series.forEach(function(a){var c=a.getProcessedData(!0);c=a.getExtremes(c.yData,!0);q||(q={startMin:Number.MAX_VALUE,startMax:-Number.MAX_VALUE});Z(c.dataMin)&&Z(c.dataMax)&&(q.startMin=Math.min(T(a.options.threshold,Infinity),c.dataMin,q.startMin),q.startMax=Math.max(T(a.options.threshold,\n-Infinity),c.dataMax,q.startMax))});c=Math.min(T(q&&q.startMin,n.dataMin),l?n.min:b.toValue(b.toPixels(n.min)-b.minPixelPadding));l=Math.max(T(q&&q.startMax,n.dataMax),l?n.max:b.toValue(b.toPixels(n.max)+b.minPixelPadding));b.panningState=q;b.isOrdinal||(F=c-k,0<F&&(r+=F,k=c),F=r-l,0<F&&(r=l,k-=F),b.series.length&&k!==n.min&&r!==n.max&&k>=c&&r<=l&&(b.setExtremes(k,r,!1,!1,{trigger:\"pan\"}),d.resetZoomButton||h||k===c||r===l||!f.match(\"y\")||(d.showResetZoom(),b.displayBtn=!1),g=!0),d[e]=m)});g&&d.redraw(!1);\nA(d.container,{cursor:\"move\"})})};return e}();V(aa.prototype,{callbacks:[],collectionsWithInit:{xAxis:[aa.prototype.addAxis,[!0]],yAxis:[aa.prototype.addAxis,[!1]],series:[aa.prototype.addSeries]},collectionsWithUpdate:[\"xAxis\",\"yAxis\",\"zAxis\",\"series\"],propsRequireDirtyBox:\"backgroundColor borderColor borderWidth borderRadius plotBackgroundColor plotBackgroundImage plotBorderColor plotBorderWidth plotShadow shadow\".split(\" \"),propsRequireReflow:\"margin marginTop marginRight marginBottom marginLeft spacing spacingTop spacingRight spacingBottom spacingLeft\".split(\" \"),\npropsRequireUpdateSeries:\"chart.inverted chart.polar chart.ignoreHiddenSeries chart.type colors plotOptions time tooltip\".split(\" \")});z.chart=function(a,c,d){return new aa(a,c,d)};z.Chart=aa;\"\";return aa});O(e,\"Mixins/LegendSymbol.js\",[e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(e,b){var D=b.merge,z=b.pick;return e.LegendSymbolMixin={drawRectangle:function(b,e){var D=b.symbolHeight,B=b.options.squareSymbol;e.legendSymbol=this.chart.renderer.rect(B?(b.symbolWidth-D)/2:0,b.baseline-D+1,B?\nD:b.symbolWidth,D,z(b.options.symbolRadius,D/2)).addClass(\"highcharts-point\").attr({zIndex:3}).add(e.legendGroup)},drawLineMarker:function(b){var e=this.options,C=e.marker,B=b.symbolWidth,x=b.symbolHeight,w=x/2,v=this.chart.renderer,f=this.legendGroup;b=b.baseline-Math.round(.3*b.fontMetrics.b);var d={};this.chart.styledMode||(d={\"stroke-width\":e.lineWidth||0},e.dashStyle&&(d.dashstyle=e.dashStyle));this.legendLine=v.path([[\"M\",0,b],[\"L\",B,b]]).addClass(\"highcharts-graph\").attr(d).add(f);C&&!1!==\nC.enabled&&B&&(e=Math.min(z(C.radius,w),w),0===this.symbol.indexOf(\"url\")&&(C=D(C,{width:x,height:x}),e=0),this.legendSymbol=C=v.symbol(this.symbol,B/2-e,b-e,2*e,2*e,C).addClass(\"highcharts-point\").add(f),C.isMarker=!0)}}});O(e,\"Core/Series/Series.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Globals.js\"],e[\"Mixins/LegendSymbol.js\"],e[\"Core/Options.js\"],e[\"Core/Color/Palette.js\"],e[\"Core/Series/Point.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Renderer/SVG/SVGElement.js\"],e[\"Core/Utilities.js\"]],\nfunction(e,b,I,z,H,G,C,B,x){var w=e.animObject,v=e.setAnimation,f=b.hasTouch,d=b.svg,q=b.win,k=z.defaultOptions,l=C.seriesTypes,D=x.addEvent,u=x.arrayMax,n=x.arrayMin,J=x.clamp,E=x.cleanRecursively,m=x.correctFloat,c=x.defined,g=x.erase,a=x.error,h=x.extend,r=x.find,A=x.fireEvent,y=x.getNestedProperty,L=x.isArray,P=x.isFunction,R=x.isNumber,V=x.isString,Q=x.merge,M=x.objectEach,t=x.pick,p=x.removeEvent,O=x.splat,Z=x.syncTimeout;e=function(){function b(){this.zones=this.yAxis=this.xAxis=this.userOptions=\nthis.tooltipOptions=this.processedYData=this.processedXData=this.points=this.options=this.linkedSeries=this.index=this.eventsToUnbind=this.eventOptions=this.data=this.chart=this._i=void 0}b.prototype.init=function(a,c){A(this,\"init\",{options:c});var d=this,b=a.series,e;this.eventOptions=this.eventOptions||{};this.eventsToUnbind=[];d.chart=a;d.options=d.setOptions(c);var g=d.options;d.linkedSeries=[];d.bindAxes();h(d,{name:g.name,state:\"\",visible:!1!==g.visible,selected:!0===g.selected});c=g.events;\nM(c,function(a,c){P(a)&&d.eventOptions[c]!==a&&(P(d.eventOptions[c])&&p(d,c,d.eventOptions[c]),d.eventOptions[c]=a,D(d,c,a))});if(c&&c.click||g.point&&g.point.events&&g.point.events.click||g.allowPointSelect)a.runTrackerClick=!0;d.getColor();d.getSymbol();d.parallelArrays.forEach(function(a){d[a+\"Data\"]||(d[a+\"Data\"]=[])});d.isCartesian&&(a.hasCartesianSeries=!0);b.length&&(e=b[b.length-1]);d._i=t(e&&e._i,-1)+1;d.opacity=d.options.opacity;a.orderSeries(this.insert(b));g.dataSorting&&g.dataSorting.enabled?\nd.setDataSortingOptions():d.points||d.data||d.setData(g.data,!1);A(this,\"afterInit\")};b.prototype.is=function(a){return l[a]&&this instanceof l[a]};b.prototype.insert=function(a){var c=this.options.index,d;if(R(c)){for(d=a.length;d--;)if(c>=t(a[d].options.index,a[d]._i)){a.splice(d+1,0,this);break}-1===d&&a.unshift(this);d+=1}else a.push(this);return t(d,a.length-1)};b.prototype.bindAxes=function(){var c=this,d=c.options,b=c.chart,e;A(this,\"bindAxes\",null,function(){(c.axisTypes||[]).forEach(function(h){var g=\n0;b[h].forEach(function(a){e=a.options;if(d[h]===g&&!e.isInternal||\"undefined\"!==typeof d[h]&&d[h]===e.id||\"undefined\"===typeof d[h]&&0===e.index)c.insert(a.series),c[h]=a,a.isDirty=!0;e.isInternal||g++});c[h]||c.optionalAxis===h||a(18,!0,b)})});A(this,\"afterBindAxes\")};b.prototype.updateParallelArrays=function(a,c){var d=a.series,b=arguments,e=R(c)?function(b){var e=\"y\"===b&&d.toYData?d.toYData(a):a[b];d[b+\"Data\"][c]=e}:function(a){Array.prototype[c].apply(d[a+\"Data\"],Array.prototype.slice.call(b,\n2))};d.parallelArrays.forEach(e)};b.prototype.hasData=function(){return this.visible&&\"undefined\"!==typeof this.dataMax&&\"undefined\"!==typeof this.dataMin||this.visible&&this.yData&&0<this.yData.length};b.prototype.autoIncrement=function(){var a=this.options,c=this.xIncrement,d,b=a.pointIntervalUnit,e=this.chart.time;c=t(c,a.pointStart,0);this.pointInterval=d=t(this.pointInterval,a.pointInterval,1);b&&(a=new e.Date(c),\"day\"===b?e.set(\"Date\",a,e.get(\"Date\",a)+d):\"month\"===b?e.set(\"Month\",a,e.get(\"Month\",\na)+d):\"year\"===b&&e.set(\"FullYear\",a,e.get(\"FullYear\",a)+d),d=a.getTime()-c);this.xIncrement=c+d;return c};b.prototype.setDataSortingOptions=function(){var a=this.options;h(this,{requireSorting:!1,sorted:!1,enabledDataSorting:!0,allowDG:!1});c(a.pointRange)||(a.pointRange=1)};b.prototype.setOptions=function(a){var d=this.chart,b=d.options,e=b.plotOptions,h=d.userOptions||{};a=Q(a);d=d.styledMode;var g={plotOptions:e,userOptions:a};A(this,\"setOptions\",g);var f=g.plotOptions[this.type],m=h.plotOptions||\n{};this.userOptions=g.userOptions;h=Q(f,e.series,h.plotOptions&&h.plotOptions[this.type],a);this.tooltipOptions=Q(k.tooltip,k.plotOptions.series&&k.plotOptions.series.tooltip,k.plotOptions[this.type].tooltip,b.tooltip.userOptions,e.series&&e.series.tooltip,e[this.type].tooltip,a.tooltip);this.stickyTracking=t(a.stickyTracking,m[this.type]&&m[this.type].stickyTracking,m.series&&m.series.stickyTracking,this.tooltipOptions.shared&&!this.noSharedTooltip?!0:h.stickyTracking);null===f.marker&&delete h.marker;\nthis.zoneAxis=h.zoneAxis;b=this.zones=(h.zones||[]).slice();!h.negativeColor&&!h.negativeFillColor||h.zones||(e={value:h[this.zoneAxis+\"Threshold\"]||h.threshold||0,className:\"highcharts-negative\"},d||(e.color=h.negativeColor,e.fillColor=h.negativeFillColor),b.push(e));b.length&&c(b[b.length-1].value)&&b.push(d?{}:{color:this.color,fillColor:this.fillColor});A(this,\"afterSetOptions\",{options:h});return h};b.prototype.getName=function(){return t(this.options.name,\"Series \"+(this.index+1))};b.prototype.getCyclic=\nfunction(a,d,b){var e=this.chart,h=this.userOptions,g=a+\"Index\",f=a+\"Counter\",m=b?b.length:t(e.options.chart[a+\"Count\"],e[a+\"Count\"]);if(!d){var k=t(h[g],h[\"_\"+g]);c(k)||(e.series.length||(e[f]=0),h[\"_\"+g]=k=e[f]%m,e[f]+=1);b&&(d=b[k])}\"undefined\"!==typeof k&&(this[g]=k);this[a]=d};b.prototype.getColor=function(){this.chart.styledMode?this.getCyclic(\"color\"):this.options.colorByPoint?this.color=H.neutralColor20:this.getCyclic(\"color\",this.options.color||k.plotOptions[this.type].color,this.chart.options.colors)};\nb.prototype.getPointsCollection=function(){return(this.hasGroupedData?this.points:this.data)||[]};b.prototype.getSymbol=function(){this.getCyclic(\"symbol\",this.options.marker.symbol,this.chart.options.symbols)};b.prototype.findPointIndex=function(a,c){var d=a.id,b=a.x,e=this.points,h,g=this.options.dataSorting;if(d)var f=this.chart.get(d);else if(this.linkedParent||this.enabledDataSorting){var m=g&&g.matchByName?\"name\":\"index\";f=r(e,function(c){return!c.touched&&c[m]===a[m]});if(!f)return}if(f){var k=\nf&&f.index;\"undefined\"!==typeof k&&(h=!0)}\"undefined\"===typeof k&&R(b)&&(k=this.xData.indexOf(b,c));-1!==k&&\"undefined\"!==typeof k&&this.cropped&&(k=k>=this.cropStart?k-this.cropStart:k);!h&&e[k]&&e[k].touched&&(k=void 0);return k};b.prototype.updateData=function(a,d){var b=this.options,e=b.dataSorting,h=this.points,g=[],f,k,m,l=this.requireSorting,n=a.length===h.length,r=!0;this.xIncrement=null;a.forEach(function(a,d){var k=c(a)&&this.pointClass.prototype.optionsToObject.call({series:this},a)||{};\nvar r=k.x;if(k.id||R(r)){if(r=this.findPointIndex(k,m),-1===r||\"undefined\"===typeof r?g.push(a):h[r]&&a!==b.data[r]?(h[r].update(a,!1,null,!1),h[r].touched=!0,l&&(m=r+1)):h[r]&&(h[r].touched=!0),!n||d!==r||e&&e.enabled||this.hasDerivedData)f=!0}else g.push(a)},this);if(f)for(a=h.length;a--;)(k=h[a])&&!k.touched&&k.remove&&k.remove(!1,d);else!n||e&&e.enabled?r=!1:(a.forEach(function(a,c){h[c].update&&a!==h[c].y&&h[c].update(a,!1,null,!1)}),g.length=0);h.forEach(function(a){a&&(a.touched=!1)});if(!r)return!1;\ng.forEach(function(a){this.addPoint(a,!1,null,null,!1)},this);null===this.xIncrement&&this.xData&&this.xData.length&&(this.xIncrement=u(this.xData),this.autoIncrement());return!0};b.prototype.setData=function(c,d,b,e){var h=this,g=h.points,f=g&&g.length||0,k,m=h.options,l=h.chart,r=m.dataSorting,n=null,q=h.xAxis;n=m.turboThreshold;var F=this.xData,p=this.yData,u=(k=h.pointArrayMap)&&k.length,v=m.keys,K=0,w=1,y;c=c||[];k=c.length;d=t(d,!0);r&&r.enabled&&(c=this.sortData(c));!1!==e&&k&&f&&!h.cropped&&\n!h.hasGroupedData&&h.visible&&!h.isSeriesBoosting&&(y=this.updateData(c,b));if(!y){h.xIncrement=null;h.colorCounter=0;this.parallelArrays.forEach(function(a){h[a+\"Data\"].length=0});if(n&&k>n)if(n=h.getFirstValidPoint(c),R(n))for(b=0;b<k;b++)F[b]=this.autoIncrement(),p[b]=c[b];else if(L(n))if(u)for(b=0;b<k;b++)e=c[b],F[b]=e[0],p[b]=e.slice(1,u+1);else for(v&&(K=v.indexOf(\"x\"),w=v.indexOf(\"y\"),K=0<=K?K:0,w=0<=w?w:1),b=0;b<k;b++)e=c[b],F[b]=e[K],p[b]=e[w];else a(12,!1,l);else for(b=0;b<k;b++)\"undefined\"!==\ntypeof c[b]&&(e={series:h},h.pointClass.prototype.applyOptions.apply(e,[c[b]]),h.updateParallelArrays(e,b));p&&V(p[0])&&a(14,!0,l);h.data=[];h.options.data=h.userOptions.data=c;for(b=f;b--;)g[b]&&g[b].destroy&&g[b].destroy();q&&(q.minRange=q.userMinRange);h.isDirty=l.isDirtyBox=!0;h.isDirtyData=!!g;b=!1}\"point\"===m.legendType&&(this.processData(),this.generatePoints());d&&l.redraw(b)};b.prototype.sortData=function(a){var d=this,b=d.options.dataSorting.sortKey||\"y\",e=function(a,d){return c(d)&&a.pointClass.prototype.optionsToObject.call({series:a},\nd)||{}};a.forEach(function(c,b){a[b]=e(d,c);a[b].index=b},this);a.concat().sort(function(a,c){a=y(b,a);c=y(b,c);return c<a?-1:c>a?1:0}).forEach(function(a,c){a.x=c},this);d.linkedSeries&&d.linkedSeries.forEach(function(c){var d=c.options,b=d.data;d.dataSorting&&d.dataSorting.enabled||!b||(b.forEach(function(d,h){b[h]=e(c,d);a[h]&&(b[h].x=a[h].x,b[h].index=h)}),c.setData(b,!1))});return a};b.prototype.getProcessedData=function(c){var d=this.xData,b=this.yData,e=d.length;var h=0;var g=this.xAxis,f=\nthis.options;var k=f.cropThreshold;var m=c||this.getExtremesFromAll||f.getExtremesFromAll,l=this.isCartesian;c=g&&g.val2lin;f=!(!g||!g.logarithmic);var n=this.requireSorting;if(g){g=g.getExtremes();var r=g.min;var q=g.max}if(l&&this.sorted&&!m&&(!k||e>k||this.forceCrop))if(d[e-1]<r||d[0]>q)d=[],b=[];else if(this.yData&&(d[0]<r||d[e-1]>q)){h=this.cropData(this.xData,this.yData,r,q);d=h.xData;b=h.yData;h=h.start;var F=!0}for(k=d.length||1;--k;)if(e=f?c(d[k])-c(d[k-1]):d[k]-d[k-1],0<e&&(\"undefined\"===\ntypeof p||e<p))var p=e;else 0>e&&n&&(a(15,!1,this.chart),n=!1);return{xData:d,yData:b,cropped:F,cropStart:h,closestPointRange:p}};b.prototype.processData=function(a){var c=this.xAxis;if(this.isCartesian&&!this.isDirty&&!c.isDirty&&!this.yAxis.isDirty&&!a)return!1;a=this.getProcessedData();this.cropped=a.cropped;this.cropStart=a.cropStart;this.processedXData=a.xData;this.processedYData=a.yData;this.closestPointRange=this.basePointRange=a.closestPointRange};b.prototype.cropData=function(a,c,d,b,e){var h=\na.length,g=0,f=h,k;e=t(e,this.cropShoulder);for(k=0;k<h;k++)if(a[k]>=d){g=Math.max(0,k-e);break}for(d=k;d<h;d++)if(a[d]>b){f=d+e;break}return{xData:a.slice(g,f),yData:c.slice(g,f),start:g,end:f}};b.prototype.generatePoints=function(){var a=this.options,c=a.data,d=this.data,b,e=this.processedXData,g=this.processedYData,f=this.pointClass,k=e.length,m=this.cropStart||0,l=this.hasGroupedData,n=a.keys,r=[],q;a=a.dataGrouping&&a.dataGrouping.groupAll?m:0;d||l||(d=[],d.length=c.length,d=this.data=d);n&&\nl&&(this.options.keys=!1);for(q=0;q<k;q++){var p=m+q;if(l){var u=(new f).init(this,[e[q]].concat(O(g[q])));u.dataGroup=this.groupMap[a+q];u.dataGroup.options&&(u.options=u.dataGroup.options,h(u,u.dataGroup.options),delete u.dataLabels)}else(u=d[p])||\"undefined\"===typeof c[p]||(d[p]=u=(new f).init(this,c[p],e[q]));u&&(u.index=l?a+q:p,r[q]=u)}this.options.keys=n;if(d&&(k!==(b=d.length)||l))for(q=0;q<b;q++)q!==m||l||(q+=k),d[q]&&(d[q].destroyElements(),d[q].plotX=void 0);this.data=d;this.points=r;A(this,\n\"afterGeneratePoints\")};b.prototype.getXExtremes=function(a){return{min:n(a),max:u(a)}};b.prototype.getExtremes=function(a,c){var d=this.xAxis,b=this.yAxis,e=this.processedXData||this.xData,h=[],g=0,f=0;var k=0;var m=this.requireSorting?this.cropShoulder:0,l=b?b.positiveValuesOnly:!1,r;a=a||this.stackedYData||this.processedYData||[];b=a.length;d&&(k=d.getExtremes(),f=k.min,k=k.max);for(r=0;r<b;r++){var q=e[r];var p=a[r];var F=(R(p)||L(p))&&(p.length||0<p||!l);q=c||this.getExtremesFromAll||this.options.getExtremesFromAll||\nthis.cropped||!d||(e[r+m]||q)>=f&&(e[r-m]||q)<=k;if(F&&q)if(F=p.length)for(;F--;)R(p[F])&&(h[g++]=p[F]);else h[g++]=p}a={dataMin:n(h),dataMax:u(h)};A(this,\"afterGetExtremes\",{dataExtremes:a});return a};b.prototype.applyExtremes=function(){var a=this.getExtremes();this.dataMin=a.dataMin;this.dataMax=a.dataMax;return a};b.prototype.getFirstValidPoint=function(a){for(var c=null,d=a.length,b=0;null===c&&b<d;)c=a[b],b++;return c};b.prototype.translate=function(){this.processedXData||this.processData();\nthis.generatePoints();var a=this.options,d=a.stacking,b=this.xAxis,e=b.categories,h=this.enabledDataSorting,g=this.yAxis,f=this.points,k=f.length,l=!!this.modifyValue,r,n=this.pointPlacementToXValue(),q=!!n,p=a.threshold,u=a.startFromThreshold?p:0,v,w=this.zoneAxis||\"y\",y=Number.MAX_VALUE;for(r=0;r<k;r++){var E=f[r],x=E.x,D=E.y,B=E.low,P=d&&g.stacking&&g.stacking.stacks[(this.negStacks&&D<(u?0:p)?\"-\":\"\")+this.stackKey],N=void 0,C=void 0;if(g.positiveValuesOnly&&!g.validatePositiveValue(D)||b.positiveValuesOnly&&\n!b.validatePositiveValue(x))E.isNull=!0;E.plotX=v=m(J(b.translate(x,0,0,0,1,n,\"flags\"===this.type),-1E5,1E5));if(d&&this.visible&&P&&P[x]){var z=this.getStackIndicator(z,x,this.index);E.isNull||(N=P[x],C=N.points[z.key])}L(C)&&(B=C[0],D=C[1],B===u&&z.key===P[x].base&&(B=t(R(p)&&p,g.min)),g.positiveValuesOnly&&0>=B&&(B=null),E.total=E.stackTotal=N.total,E.percentage=N.total&&E.y/N.total*100,E.stackY=D,this.irregularWidths||N.setOffset(this.pointXOffset||0,this.barW||0));E.yBottom=c(B)?J(g.translate(B,\n0,1,0,1),-1E5,1E5):null;l&&(D=this.modifyValue(D,E));E.plotY=void 0;R(D)&&(D=g.translate(D,!1,!0,!1,!0),\"undefined\"!==typeof D&&(E.plotY=J(D,-1E5,1E5)));E.isInside=this.isPointInside(E);E.clientX=q?m(b.translate(x,0,0,0,1,n)):v;E.negative=E[w]<(a[w+\"Threshold\"]||p||0);E.category=e&&\"undefined\"!==typeof e[E.x]?e[E.x]:E.x;if(!E.isNull&&!1!==E.visible){\"undefined\"!==typeof M&&(y=Math.min(y,Math.abs(v-M)));var M=v}E.zone=this.zones.length&&E.getZone();!E.graphic&&this.group&&h&&(E.isNew=!0)}this.closestPointRangePx=\ny;A(this,\"afterTranslate\")};b.prototype.getValidPoints=function(a,c,d){var b=this.chart;return(a||this.points||[]).filter(function(a){return c&&!b.isInsidePlot(a.plotX,a.plotY,{inverted:b.inverted})?!1:!1!==a.visible&&(d||!a.isNull)})};b.prototype.getClipBox=function(a,c){var d=this.options,b=this.chart,e=b.inverted,h=this.xAxis,g=h&&this.yAxis,f=b.options.chart.scrollablePlotArea||{};a&&!1===d.clip&&g?a=e?{y:-b.chartWidth+g.len+g.pos,height:b.chartWidth,width:b.chartHeight,x:-b.chartHeight+h.len+\nh.pos}:{y:-g.pos,height:b.chartHeight,width:b.chartWidth,x:-h.pos}:(a=this.clipBox||b.clipBox,c&&(a.width=b.plotSizeX,a.x=(b.scrollablePixelsX||0)*(f.scrollPositionX||0)));return c?{width:a.width,x:a.x}:a};b.prototype.getSharedClipKey=function(a){if(this.sharedClipKey)return this.sharedClipKey;var c=[a&&a.duration,a&&a.easing,a&&a.defer,this.getClipBox(a).height,this.options.xAxis,this.options.yAxis].join();if(!1!==this.options.clip||a)this.sharedClipKey=c;return c};b.prototype.setClip=function(a){var c=\nthis.chart,d=this.options,b=c.renderer,e=c.inverted,h=this.clipBox,g=this.getClipBox(a),f=this.getSharedClipKey(a),k=c.sharedClips[f],m=c.sharedClips[f+\"m\"];a&&(g.width=0,e&&(g.x=c.plotHeight+(!1!==d.clip?0:c.plotTop)));k?c.hasLoaded||k.attr(g):(a&&(c.sharedClips[f+\"m\"]=m=b.clipRect(e?(c.plotSizeX||0)+99:-99,e?-c.plotLeft:-c.plotTop,99,e?c.chartWidth:c.chartHeight)),c.sharedClips[f]=k=b.clipRect(g),k.count={length:0});a&&!k.count[this.index]&&(k.count[this.index]=!0,k.count.length+=1);if(!1!==d.clip||\na)this.group.clip(a||h?k:c.clipRect),this.markerGroup.clip(m);a||(k.count[this.index]&&(delete k.count[this.index],--k.count.length),0===k.count.length&&(h||(c.sharedClips[f]=k.destroy()),m&&(c.sharedClips[f+\"m\"]=m.destroy())))};b.prototype.animate=function(a){var c=this.chart,d=w(this.options.animation),b=this.sharedClipKey;if(a)this.setClip(d);else if(b){a=c.sharedClips[b];b=c.sharedClips[b+\"m\"];var e=this.getClipBox(d,!0);a&&a.animate(e,d);b&&b.animate({width:e.width+99,x:e.x-(c.inverted?0:99)},\nd)}};b.prototype.afterAnimate=function(){this.setClip();A(this,\"afterAnimate\");this.finishedAnimating=!0};b.prototype.drawPoints=function(){var a=this.points,c=this.chart,d,b,e=this.options.marker,h=this[this.specialGroup]||this.markerGroup,g=this.xAxis,f=t(e.enabled,!g||g.isRadial?!0:null,this.closestPointRangePx>=e.enabledThreshold*e.radius);if(!1!==e.enabled||this._hasPointMarkers)for(d=0;d<a.length;d++){var k=a[d];var m=(b=k.graphic)?\"animate\":\"attr\";var l=k.marker||{};var r=!!k.marker;if((f&&\n\"undefined\"===typeof l.enabled||l.enabled)&&!k.isNull&&!1!==k.visible){var n=t(l.symbol,this.symbol);var q=this.markerAttribs(k,k.selected&&\"select\");this.enabledDataSorting&&(k.startXPos=g.reversed?-(q.width||0):g.width);var p=!1!==k.isInside;b?b[p?\"show\":\"hide\"](p).animate(q):p&&(0<(q.width||0)||k.hasImage)&&(k.graphic=b=c.renderer.symbol(n,q.x,q.y,q.width,q.height,r?l:e).add(h),this.enabledDataSorting&&c.hasRendered&&(b.attr({x:k.startXPos}),m=\"animate\"));b&&\"animate\"===m&&b[p?\"show\":\"hide\"](p).animate(q);\nif(b&&!c.styledMode)b[m](this.pointAttribs(k,k.selected&&\"select\"));b&&b.addClass(k.getClassName(),!0)}else b&&(k.graphic=b.destroy())}};b.prototype.markerAttribs=function(a,c){var d=this.options,b=d.marker,e=a.marker||{},h=e.symbol||b.symbol,g=t(e.radius,b.radius);c&&(b=b.states[c],c=e.states&&e.states[c],g=t(c&&c.radius,b&&b.radius,g+(b&&b.radiusPlus||0)));a.hasImage=h&&0===h.indexOf(\"url\");a.hasImage&&(g=0);a={x:d.crisp?Math.floor(a.plotX-g):a.plotX-g,y:a.plotY-g};g&&(a.width=a.height=2*g);return a};\nb.prototype.pointAttribs=function(a,c){var d=this.options.marker,b=a&&a.options,e=b&&b.marker||{},h=this.color,g=b&&b.color,f=a&&a.color;b=t(e.lineWidth,d.lineWidth);var k=a&&a.zone&&a.zone.color;a=1;h=g||k||f||h;g=e.fillColor||d.fillColor||h;h=e.lineColor||d.lineColor||h;c=c||\"normal\";d=d.states[c];c=e.states&&e.states[c]||{};b=t(c.lineWidth,d.lineWidth,b+t(c.lineWidthPlus,d.lineWidthPlus,0));g=c.fillColor||d.fillColor||g;h=c.lineColor||d.lineColor||h;a=t(c.opacity,d.opacity,a);return{stroke:h,\"stroke-width\":b,\nfill:g,opacity:a}};b.prototype.destroy=function(a){var c=this,d=c.chart,b=/AppleWebKit\\/533/.test(q.navigator.userAgent),e,h,f=c.data||[],k,m;A(c,\"destroy\");this.removeEvents(a);(c.axisTypes||[]).forEach(function(a){(m=c[a])&&m.series&&(g(m.series,c),m.isDirty=m.forceRedraw=!0)});c.legendItem&&c.chart.legend.destroyItem(c);for(h=f.length;h--;)(k=f[h])&&k.destroy&&k.destroy();c.clips&&c.clips.forEach(function(a){return a.destroy()});x.clearTimeout(c.animationTimeout);M(c,function(a,c){a instanceof\nB&&!a.survive&&(e=b&&\"group\"===c?\"hide\":\"destroy\",a[e]())});d.hoverSeries===c&&(d.hoverSeries=void 0);g(d.series,c);d.orderSeries();M(c,function(d,b){a&&\"hcEvents\"===b||delete c[b]})};b.prototype.applyZones=function(){var a=this,c=this.chart,d=c.renderer,b=this.zones,e,h,g=this.clips||[],f,k=this.graph,m=this.area,l=Math.max(c.chartWidth,c.chartHeight),r=this[(this.zoneAxis||\"y\")+\"Axis\"],n=c.inverted,q,p,u,v=!1,w,y;if(b.length&&(k||m)&&r&&\"undefined\"!==typeof r.min){var E=r.reversed;var A=r.horiz;\nk&&!this.showLine&&k.hide();m&&m.hide();var x=r.getExtremes();b.forEach(function(b,F){e=E?A?c.plotWidth:0:A?0:r.toPixels(x.min)||0;e=J(t(h,e),0,l);h=J(Math.round(r.toPixels(t(b.value,x.max),!0)||0),0,l);v&&(e=h=r.toPixels(x.max));q=Math.abs(e-h);p=Math.min(e,h);u=Math.max(e,h);r.isXAxis?(f={x:n?u:p,y:0,width:q,height:l},A||(f.x=c.plotHeight-f.x)):(f={x:0,y:n?u:p,width:l,height:q},A&&(f.y=c.plotWidth-f.y));n&&d.isVML&&(f=r.isXAxis?{x:0,y:E?p:u,height:f.width,width:c.chartWidth}:{x:f.y-c.plotLeft-c.spacingBox.x,\ny:0,width:f.height,height:c.chartHeight});g[F]?g[F].animate(f):g[F]=d.clipRect(f);w=a[\"zone-area-\"+F];y=a[\"zone-graph-\"+F];k&&y&&y.clip(g[F]);m&&w&&w.clip(g[F]);v=b.value>x.max;a.resetZones&&0===h&&(h=void 0)});this.clips=g}else a.visible&&(k&&k.show(!0),m&&m.show(!0))};b.prototype.invertGroups=function(a){function c(){[\"group\",\"markerGroup\"].forEach(function(c){d[c]&&(b.renderer.isVML&&d[c].attr({width:d.yAxis.len,height:d.xAxis.len}),d[c].width=d.yAxis.len,d[c].height=d.xAxis.len,d[c].invert(d.isRadialSeries?\n!1:a))})}var d=this,b=d.chart;d.xAxis&&(d.eventsToUnbind.push(D(b,\"resize\",c)),c(),d.invertGroups=c)};b.prototype.plotGroup=function(a,d,b,e,h){var g=this[a],f=!g;b={visibility:b,zIndex:e||.1};\"undefined\"===typeof this.opacity||this.chart.styledMode||\"inactive\"===this.state||(b.opacity=this.opacity);f&&(this[a]=g=this.chart.renderer.g().add(h));g.addClass(\"highcharts-\"+d+\" highcharts-series-\"+this.index+\" highcharts-\"+this.type+\"-series \"+(c(this.colorIndex)?\"highcharts-color-\"+this.colorIndex+\" \":\n\"\")+(this.options.className||\"\")+(g.hasClass(\"highcharts-tracker\")?\" highcharts-tracker\":\"\"),!0);g.attr(b)[f?\"attr\":\"animate\"](this.getPlotBox());return g};b.prototype.getPlotBox=function(){var a=this.chart,c=this.xAxis,d=this.yAxis;a.inverted&&(c=d,d=this.xAxis);return{translateX:c?c.left:a.plotLeft,translateY:d?d.top:a.plotTop,scaleX:1,scaleY:1}};b.prototype.removeEvents=function(a){a||p(this);this.eventsToUnbind.length&&(this.eventsToUnbind.forEach(function(a){a()}),this.eventsToUnbind.length=\n0)};b.prototype.render=function(){var a=this,c=a.chart,d=a.options,b=w(d.animation),e=!a.finishedAnimating&&c.renderer.isSVG&&b.duration,h=a.visible?\"inherit\":\"hidden\",g=d.zIndex,f=a.hasRendered,k=c.seriesGroup,m=c.inverted;A(this,\"render\");var l=a.plotGroup(\"group\",\"series\",h,g,k);a.markerGroup=a.plotGroup(\"markerGroup\",\"markers\",h,g,k);e&&a.animate&&a.animate(!0);l.inverted=t(a.invertible,a.isCartesian)?m:!1;a.drawGraph&&(a.drawGraph(),a.applyZones());a.visible&&a.drawPoints();a.drawDataLabels&&\na.drawDataLabels();a.redrawPoints&&a.redrawPoints();a.drawTracker&&!1!==a.options.enableMouseTracking&&a.drawTracker();a.invertGroups(m);!1===d.clip||a.sharedClipKey||f||l.clip(c.clipRect);e&&a.animate&&a.animate();f||(e&&b.defer&&(e+=b.defer),a.animationTimeout=Z(function(){a.afterAnimate()},e||0));a.isDirty=!1;a.hasRendered=!0;A(a,\"afterRender\")};b.prototype.redraw=function(){var a=this.chart,c=this.isDirty||this.isDirtyData,d=this.group,b=this.xAxis,e=this.yAxis;d&&(a.inverted&&d.attr({width:a.plotWidth,\nheight:a.plotHeight}),d.animate({translateX:t(b&&b.left,a.plotLeft),translateY:t(e&&e.top,a.plotTop)}));this.translate();this.render();c&&delete this.kdTree};b.prototype.searchPoint=function(a,c){var d=this.xAxis,b=this.yAxis,e=this.chart.inverted;return this.searchKDTree({clientX:e?d.len-a.chartY+d.pos:a.chartX-d.pos,plotY:e?b.len-a.chartX+b.pos:a.chartY-b.pos},c,a)};b.prototype.buildKDTree=function(a){function c(a,b,e){var h;if(h=a&&a.length){var g=d.kdAxisArray[b%e];a.sort(function(a,c){return a[g]-\nc[g]});h=Math.floor(h/2);return{point:a[h],left:c(a.slice(0,h),b+1,e),right:c(a.slice(h+1),b+1,e)}}}this.buildingKdTree=!0;var d=this,b=-1<d.options.findNearestPointBy.indexOf(\"y\")?2:1;delete d.kdTree;Z(function(){d.kdTree=c(d.getValidPoints(null,!d.directTouch),b,b);d.buildingKdTree=!1},d.options.kdNow||a&&\"touchstart\"===a.type?0:1)};b.prototype.searchKDTree=function(a,d,b){function e(a,d,b,m){var l=d.point,r=h.kdAxisArray[b%m],n=l;var q=c(a[g])&&c(l[g])?Math.pow(a[g]-l[g],2):null;var p=c(a[f])&&\nc(l[f])?Math.pow(a[f]-l[f],2):null;p=(q||0)+(p||0);l.dist=c(p)?Math.sqrt(p):Number.MAX_VALUE;l.distX=c(q)?Math.sqrt(q):Number.MAX_VALUE;r=a[r]-l[r];p=0>r?\"left\":\"right\";q=0>r?\"right\":\"left\";d[p]&&(p=e(a,d[p],b+1,m),n=p[k]<n[k]?p:l);d[q]&&Math.sqrt(r*r)<n[k]&&(a=e(a,d[q],b+1,m),n=a[k]<n[k]?a:n);return n}var h=this,g=this.kdAxisArray[0],f=this.kdAxisArray[1],k=d?\"distX\":\"dist\";d=-1<h.options.findNearestPointBy.indexOf(\"y\")?2:1;this.kdTree||this.buildingKdTree||this.buildKDTree(b);if(this.kdTree)return e(a,\nthis.kdTree,d,d)};b.prototype.pointPlacementToXValue=function(){var a=this.options,c=a.pointRange,d=this.xAxis;a=a.pointPlacement;\"between\"===a&&(a=d.reversed?-.5:.5);return R(a)?a*(c||d.pointRange):0};b.prototype.isPointInside=function(a){return\"undefined\"!==typeof a.plotY&&\"undefined\"!==typeof a.plotX&&0<=a.plotY&&a.plotY<=this.yAxis.len&&0<=a.plotX&&a.plotX<=this.xAxis.len};b.prototype.drawTracker=function(){var a=this,c=a.options,b=c.trackByArea,e=[].concat(b?a.areaPath:a.graphPath),h=a.chart,\ng=h.pointer,k=h.renderer,m=h.options.tooltip.snap,l=a.tracker,r=function(c){if(h.hoverSeries!==a)a.onMouseOver()},n=\"rgba(192,192,192,\"+(d?.0001:.002)+\")\";l?l.attr({d:e}):a.graph&&(a.tracker=k.path(e).attr({visibility:a.visible?\"visible\":\"hidden\",zIndex:2}).addClass(b?\"highcharts-tracker-area\":\"highcharts-tracker-line\").add(a.group),h.styledMode||a.tracker.attr({\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\",stroke:n,fill:b?n:\"none\",\"stroke-width\":a.graph.strokeWidth()+(b?0:2*m)}),[a.tracker,\na.markerGroup,a.dataLabelsGroup].forEach(function(a){if(a&&(a.addClass(\"highcharts-tracker\").on(\"mouseover\",r).on(\"mouseout\",function(a){g.onTrackerMouseOut(a)}),c.cursor&&!h.styledMode&&a.css({cursor:c.cursor}),f))a.on(\"touchstart\",r)}));A(this,\"afterDrawTracker\")};b.prototype.addPoint=function(a,c,d,b,e){var h=this.options,g=this.data,f=this.chart,k=this.xAxis;k=k&&k.hasNames&&k.names;var m=h.data,l=this.xData,r;c=t(c,!0);var n={series:this};this.pointClass.prototype.applyOptions.apply(n,[a]);var q=\nn.x;var p=l.length;if(this.requireSorting&&q<l[p-1])for(r=!0;p&&l[p-1]>q;)p--;this.updateParallelArrays(n,\"splice\",p,0,0);this.updateParallelArrays(n,p);k&&n.name&&(k[q]=n.name);m.splice(p,0,a);r&&(this.data.splice(p,0,null),this.processData());\"point\"===h.legendType&&this.generatePoints();d&&(g[0]&&g[0].remove?g[0].remove(!1):(g.shift(),this.updateParallelArrays(n,\"shift\"),m.shift()));!1!==e&&A(this,\"addPoint\",{point:n});this.isDirtyData=this.isDirty=!0;c&&f.redraw(b)};b.prototype.removePoint=function(a,\nc,d){var b=this,e=b.data,h=e[a],g=b.points,f=b.chart,k=function(){g&&g.length===e.length&&g.splice(a,1);e.splice(a,1);b.options.data.splice(a,1);b.updateParallelArrays(h||{series:b},\"splice\",a,1);h&&h.destroy();b.isDirty=!0;b.isDirtyData=!0;c&&f.redraw()};v(d,f);c=t(c,!0);h?h.firePointEvent(\"remove\",null,k):k()};b.prototype.remove=function(a,c,d,b){function e(){h.destroy(b);g.isDirtyLegend=g.isDirtyBox=!0;g.linkSeries();t(a,!0)&&g.redraw(c)}var h=this,g=h.chart;!1!==d?A(h,\"remove\",null,e):e()};b.prototype.update=\nfunction(c,d){c=E(c,this.userOptions);A(this,\"update\",{options:c});var b=this,e=b.chart,g=b.userOptions,f=b.initialType||b.type,k=e.options.plotOptions,m=c.type||g.type||e.options.chart.type,r=!(this.hasDerivedData||m&&m!==this.type||\"undefined\"!==typeof c.pointStart||\"undefined\"!==typeof c.pointInterval||b.hasOptionChanged(\"dataGrouping\")||b.hasOptionChanged(\"pointStart\")||b.hasOptionChanged(\"pointInterval\")||b.hasOptionChanged(\"pointIntervalUnit\")||b.hasOptionChanged(\"keys\")),n=l[f].prototype,q,\np=[\"eventOptions\",\"navigatorSeries\",\"baseSeries\"],u=b.finishedAnimating&&{animation:!1},v={};m=m||f;r&&(p.push(\"data\",\"isDirtyData\",\"points\",\"processedXData\",\"processedYData\",\"xIncrement\",\"cropped\",\"_hasPointMarkers\",\"_hasPointLabels\",\"clips\",\"nodes\",\"layout\",\"mapMap\",\"mapData\",\"minY\",\"maxY\",\"minX\",\"maxX\"),!1!==c.visible&&p.push(\"area\",\"graph\"),b.parallelArrays.forEach(function(a){p.push(a+\"Data\")}),c.data&&(c.dataSorting&&h(b.options.dataSorting,c.dataSorting),this.setData(c.data,!1)));c=Q(g,u,{index:\"undefined\"===\ntypeof g.index?b.index:g.index,pointStart:t(k&&k.series&&k.series.pointStart,g.pointStart,b.xData[0])},!r&&{data:b.options.data},c);r&&c.data&&(c.data=b.options.data);p=[\"group\",\"markerGroup\",\"dataLabelsGroup\",\"transformGroup\"].concat(p);p.forEach(function(a){p[a]=b[a];delete b[a]});g=!1;if(l[m]){if(g=m!==b.type,b.remove(!1,!1,!1,!0),g)if(Object.setPrototypeOf)Object.setPrototypeOf(b,l[m].prototype);else{k=Object.hasOwnProperty.call(b,\"hcEvents\")&&b.hcEvents;for(q in n)b[q]=void 0;h(b,l[m].prototype);\nk?b.hcEvents=k:delete b.hcEvents}}else a(17,!0,e,{missingModuleFor:m});p.forEach(function(a){b[a]=p[a]});b.init(e,c);if(r&&this.points){var w=b.options;!1===w.visible?(v.graphic=1,v.dataLabel=1):b._hasPointLabels||(c=w.marker,m=w.dataLabels,c&&(!1===c.enabled||\"symbol\"in c)&&(v.graphic=1),m&&!1===m.enabled&&(v.dataLabel=1));this.points.forEach(function(a){a&&a.series&&(a.resolveColor(),Object.keys(v).length&&a.destroyElements(v),!1===w.showInLegend&&a.legendItem&&e.legend.destroyItem(a))},this)}b.initialType=\nf;e.linkSeries();g&&b.linkedSeries.length&&(b.isDirtyData=!0);A(this,\"afterUpdate\");t(d,!0)&&e.redraw(r?void 0:!1)};b.prototype.setName=function(a){this.name=this.options.name=this.userOptions.name=a;this.chart.isDirtyLegend=!0};b.prototype.hasOptionChanged=function(a){var c=this.options[a],d=this.chart.options.plotOptions,b=this.userOptions[a];return b?c!==b:c!==t(d&&d[this.type]&&d[this.type][a],d&&d.series&&d.series[a],c)};b.prototype.onMouseOver=function(){var a=this.chart,c=a.hoverSeries;a.pointer.setHoverChartIndex();\nif(c&&c!==this)c.onMouseOut();this.options.events.mouseOver&&A(this,\"mouseOver\");this.setState(\"hover\");a.hoverSeries=this};b.prototype.onMouseOut=function(){var a=this.options,c=this.chart,d=c.tooltip,b=c.hoverPoint;c.hoverSeries=null;if(b)b.onMouseOut();this&&a.events.mouseOut&&A(this,\"mouseOut\");!d||this.stickyTracking||d.shared&&!this.noSharedTooltip||d.hide();c.series.forEach(function(a){a.setState(\"\",!0)})};b.prototype.setState=function(a,c){var d=this,b=d.options,e=d.graph,h=b.inactiveOtherPoints,\ng=b.states,f=b.lineWidth,k=b.opacity,m=t(g[a||\"normal\"]&&g[a||\"normal\"].animation,d.chart.options.chart.animation);b=0;a=a||\"\";if(d.state!==a&&([d.group,d.markerGroup,d.dataLabelsGroup].forEach(function(c){c&&(d.state&&c.removeClass(\"highcharts-series-\"+d.state),a&&c.addClass(\"highcharts-series-\"+a))}),d.state=a,!d.chart.styledMode)){if(g[a]&&!1===g[a].enabled)return;a&&(f=g[a].lineWidth||f+(g[a].lineWidthPlus||0),k=t(g[a].opacity,k));if(e&&!e.dashstyle)for(g={\"stroke-width\":f},e.animate(g,m);d[\"zone-graph-\"+\nb];)d[\"zone-graph-\"+b].animate(g,m),b+=1;h||[d.group,d.markerGroup,d.dataLabelsGroup,d.labelBySeries].forEach(function(a){a&&a.animate({opacity:k},m)})}c&&h&&d.points&&d.setAllPointsToState(a||void 0)};b.prototype.setAllPointsToState=function(a){this.points.forEach(function(c){c.setState&&c.setState(a)})};b.prototype.setVisible=function(a,c){var d=this,b=d.chart,e=d.legendItem,h=b.options.chart.ignoreHiddenSeries,g=d.visible;var f=(d.visible=a=d.options.visible=d.userOptions.visible=\"undefined\"===\ntypeof a?!g:a)?\"show\":\"hide\";[\"group\",\"dataLabelsGroup\",\"markerGroup\",\"tracker\",\"tt\"].forEach(function(a){if(d[a])d[a][f]()});if(b.hoverSeries===d||(b.hoverPoint&&b.hoverPoint.series)===d)d.onMouseOut();e&&b.legend.colorizeItem(d,a);d.isDirty=!0;d.options.stacking&&b.series.forEach(function(a){a.options.stacking&&a.visible&&(a.isDirty=!0)});d.linkedSeries.forEach(function(c){c.setVisible(a,!1)});h&&(b.isDirtyBox=!0);A(d,f);!1!==c&&b.redraw()};b.prototype.show=function(){this.setVisible(!0)};b.prototype.hide=\nfunction(){this.setVisible(!1)};b.prototype.select=function(a){this.selected=a=this.options.selected=\"undefined\"===typeof a?!this.selected:a;this.checkbox&&(this.checkbox.checked=a);A(this,a?\"select\":\"unselect\")};b.prototype.shouldShowTooltip=function(a,c,d){void 0===d&&(d={});d.series=this;d.visiblePlotOnly=!0;return this.chart.isInsidePlot(a,c,d)};b.defaultOptions={lineWidth:2,allowPointSelect:!1,crisp:!0,showCheckbox:!1,animation:{duration:1E3},events:{},marker:{enabledThreshold:2,lineColor:H.backgroundColor,\nlineWidth:0,radius:4,states:{normal:{animation:!0},hover:{animation:{duration:50},enabled:!0,radiusPlus:2,lineWidthPlus:1},select:{fillColor:H.neutralColor20,lineColor:H.neutralColor100,lineWidth:2}}},point:{events:{}},dataLabels:{animation:{},align:\"center\",defer:!0,formatter:function(){var a=this.series.chart.numberFormatter;return\"number\"!==typeof this.y?\"\":a(this.y,-1)},padding:5,style:{fontSize:\"11px\",fontWeight:\"bold\",color:\"contrast\",textOutline:\"1px contrast\"},verticalAlign:\"bottom\",x:0,y:0},\ncropThreshold:300,opacity:1,pointRange:0,softThreshold:!0,states:{normal:{animation:!0},hover:{animation:{duration:50},lineWidthPlus:1,marker:{},halo:{size:10,opacity:.25}},select:{animation:{duration:0}},inactive:{animation:{duration:50},opacity:.2}},stickyTracking:!0,turboThreshold:1E3,findNearestPointBy:\"x\"};return b}();h(e.prototype,{axisTypes:[\"xAxis\",\"yAxis\"],coll:\"series\",colorCounter:0,cropShoulder:1,directTouch:!1,drawLegendSymbol:I.drawLineMarker,isCartesian:!0,kdAxisArray:[\"clientX\",\"plotY\"],\nparallelArrays:[\"x\",\"y\"],pointClass:G,requireSorting:!0,sorted:!0});C.series=e;\"\";\"\";return e});O(e,\"Extensions/ScrollablePlotArea.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Axis/Axis.js\"],e[\"Core/Chart/Chart.js\"],e[\"Core/Series/Series.js\"],e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"]],function(e,b,I,z,H,G){var D=e.stop,B=G.addEvent,x=G.createElement,w=G.merge,v=G.pick;\"\";B(I,\"afterSetChartSize\",function(b){var d=this.options.chart.scrollablePlotArea,e=d&&d.minWidth;d=d&&d.minHeight;if(!this.renderer.forExport){if(e){if(this.scrollablePixelsX=\ne=Math.max(0,e-this.chartWidth)){this.scrollablePlotBox=this.renderer.scrollablePlotBox=w(this.plotBox);this.plotBox.width=this.plotWidth+=e;this.inverted?this.clipBox.height+=e:this.clipBox.width+=e;var f={1:{name:\"right\",value:e}}}}else d&&(this.scrollablePixelsY=e=Math.max(0,d-this.chartHeight))&&(this.scrollablePlotBox=this.renderer.scrollablePlotBox=w(this.plotBox),this.plotBox.height=this.plotHeight+=e,this.inverted?this.clipBox.width+=e:this.clipBox.height+=e,f={2:{name:\"bottom\",value:e}});\nf&&!b.skipAxes&&this.axes.forEach(function(d){f[d.side]?d.getPlotLinePath=function(){var b=f[d.side].name,e=this[b];this[b]=e-f[d.side].value;var k=H.Axis.prototype.getPlotLinePath.apply(this,arguments);this[b]=e;return k}:(d.setAxisSize(),d.setAxisTranslation())})}});B(I,\"render\",function(){this.scrollablePixelsX||this.scrollablePixelsY?(this.setUpScrolling&&this.setUpScrolling(),this.applyFixed()):this.fixedDiv&&this.applyFixed()});I.prototype.setUpScrolling=function(){var b=this,d={WebkitOverflowScrolling:\"touch\",\noverflowX:\"hidden\",overflowY:\"hidden\"};this.scrollablePixelsX&&(d.overflowX=\"auto\");this.scrollablePixelsY&&(d.overflowY=\"auto\");this.scrollingParent=x(\"div\",{className:\"highcharts-scrolling-parent\"},{position:\"relative\"},this.renderTo);this.scrollingContainer=x(\"div\",{className:\"highcharts-scrolling\"},d,this.scrollingParent);B(this.scrollingContainer,\"scroll\",function(){b.pointer&&delete b.pointer.chartPosition});this.innerContainer=x(\"div\",{className:\"highcharts-inner-container\"},null,this.scrollingContainer);\nthis.innerContainer.appendChild(this.container);this.setUpScrolling=null};I.prototype.moveFixedElements=function(){var b=this.container,d=this.fixedRenderer,e=\".highcharts-contextbutton .highcharts-credits .highcharts-legend .highcharts-legend-checkbox .highcharts-navigator-series .highcharts-navigator-xaxis .highcharts-navigator-yaxis .highcharts-navigator .highcharts-reset-zoom .highcharts-drillup-button .highcharts-scrollbar .highcharts-subtitle .highcharts-title\".split(\" \"),k;this.scrollablePixelsX&&\n!this.inverted?k=\".highcharts-yaxis\":this.scrollablePixelsX&&this.inverted?k=\".highcharts-xaxis\":this.scrollablePixelsY&&!this.inverted?k=\".highcharts-xaxis\":this.scrollablePixelsY&&this.inverted&&(k=\".highcharts-yaxis\");k&&e.push(k+\":not(.highcharts-radial-axis)\",k+\"-labels:not(.highcharts-radial-axis-labels)\");e.forEach(function(e){[].forEach.call(b.querySelectorAll(e),function(b){(b.namespaceURI===d.SVG_NS?d.box:d.box.parentNode).appendChild(b);b.style.pointerEvents=\"auto\"})})};I.prototype.applyFixed=\nfunction(){var b=!this.fixedDiv;var d=this.options.chart;var e=d.scrollablePlotArea;b?(this.fixedDiv=x(\"div\",{className:\"highcharts-fixed\"},{position:\"absolute\",overflow:\"hidden\",pointerEvents:\"none\",zIndex:(d.style&&d.style.zIndex||0)+2,top:0},null,!0),this.scrollingContainer&&this.scrollingContainer.parentNode.insertBefore(this.fixedDiv,this.scrollingContainer),this.renderTo.style.overflow=\"visible\",this.fixedRenderer=d=new H.Renderer(this.fixedDiv,this.chartWidth,this.chartHeight,this.options.chart.style),\nthis.scrollableMask=d.path().attr({fill:this.options.chart.backgroundColor||\"#fff\",\"fill-opacity\":v(e.opacity,.85),zIndex:-1}).addClass(\"highcharts-scrollable-mask\").add(),B(this,\"afterShowResetZoom\",this.moveFixedElements),B(this,\"afterDrilldown\",this.moveFixedElements),B(this,\"afterLayOutTitles\",this.moveFixedElements)):this.fixedRenderer.setSize(this.chartWidth,this.chartHeight);if(this.scrollableDirty||b)this.scrollableDirty=!1,this.moveFixedElements();d=this.chartWidth+(this.scrollablePixelsX||\n0);var k=this.chartHeight+(this.scrollablePixelsY||0);D(this.container);this.container.style.width=d+\"px\";this.container.style.height=k+\"px\";this.renderer.boxWrapper.attr({width:d,height:k,viewBox:[0,0,d,k].join(\" \")});this.chartBackground.attr({width:d,height:k});this.scrollingContainer.style.height=this.chartHeight+\"px\";b&&(e.scrollPositionX&&(this.scrollingContainer.scrollLeft=this.scrollablePixelsX*e.scrollPositionX),e.scrollPositionY&&(this.scrollingContainer.scrollTop=this.scrollablePixelsY*\ne.scrollPositionY));k=this.axisOffset;b=this.plotTop-k[0]-1;e=this.plotLeft-k[3]-1;d=this.plotTop+this.plotHeight+k[2]+1;k=this.plotLeft+this.plotWidth+k[1]+1;var l=this.plotLeft+this.plotWidth-(this.scrollablePixelsX||0),w=this.plotTop+this.plotHeight-(this.scrollablePixelsY||0);b=this.scrollablePixelsX?[[\"M\",0,b],[\"L\",this.plotLeft-1,b],[\"L\",this.plotLeft-1,d],[\"L\",0,d],[\"Z\"],[\"M\",l,b],[\"L\",this.chartWidth,b],[\"L\",this.chartWidth,d],[\"L\",l,d],[\"Z\"]]:this.scrollablePixelsY?[[\"M\",e,0],[\"L\",e,this.plotTop-\n1],[\"L\",k,this.plotTop-1],[\"L\",k,0],[\"Z\"],[\"M\",e,w],[\"L\",e,this.chartHeight],[\"L\",k,this.chartHeight],[\"L\",k,w],[\"Z\"]]:[[\"M\",0,0]];\"adjustHeight\"!==this.redrawTrigger&&this.scrollableMask.attr({d:b})};B(b,\"afterInit\",function(){this.chart.scrollableDirty=!0});B(z,\"show\",function(){this.chart.scrollableDirty=!0})});O(e,\"Core/Axis/StackingAxis.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Utilities.js\"]],function(e,b){var D=e.getDeferredAnimation,z=b.addEvent,H=b.destroyObjectProperties,G=\nb.fireEvent,C=b.isNumber,B=b.objectEach,x=function(){function b(b){this.oldStacks={};this.stacks={};this.stacksTouched=0;this.axis=b}b.prototype.buildStacks=function(){var b=this.axis,e=b.series,d=b.options.reversedStacks,q=e.length,k;if(!b.isXAxis){this.usePercentage=!1;for(k=q;k--;){var l=e[d?k:q-k-1];l.setStackedPoints();l.setGroupedPoints()}for(k=0;k<q;k++)e[k].modifyStacks();G(b,\"afterBuildStacks\")}};b.prototype.cleanStacks=function(){if(!this.axis.isXAxis){if(this.oldStacks)var b=this.stacks=\nthis.oldStacks;B(b,function(b){B(b,function(d){d.cumulative=d.total})})}};b.prototype.resetStacks=function(){var b=this,e=this.stacks;this.axis.isXAxis||B(e,function(d){B(d,function(e,f){C(e.touched)&&e.touched<b.stacksTouched?(e.destroy(),delete d[f]):(e.total=null,e.cumulative=null)})})};b.prototype.renderStackTotals=function(){var b=this.axis,e=b.chart,d=e.renderer,q=this.stacks;b=D(e,b.options.stackLabels&&b.options.stackLabels.animation||!1);var k=this.stackTotalGroup=this.stackTotalGroup||d.g(\"stack-labels\").attr({visibility:\"visible\",\nzIndex:6,opacity:0}).add();k.translate(e.plotLeft,e.plotTop);B(q,function(d){B(d,function(d){d.render(k)})});k.animate({opacity:1},b)};return b}();return function(){function b(){}b.compose=function(e){z(e,\"init\",b.onInit);z(e,\"destroy\",b.onDestroy)};b.onDestroy=function(){var b=this.stacking;if(b){var e=b.stacks;B(e,function(d,b){H(d);e[b]=null});b&&b.stackTotalGroup&&b.stackTotalGroup.destroy()}};b.onInit=function(){this.stacking||(this.stacking=new x(this))};return b}()});O(e,\"Extensions/Stacking.js\",\n[e[\"Core/Axis/Axis.js\"],e[\"Core/Chart/Chart.js\"],e[\"Core/FormatUtilities.js\"],e[\"Core/Globals.js\"],e[\"Core/Series/Series.js\"],e[\"Core/Axis/StackingAxis.js\"],e[\"Core/Utilities.js\"]],function(e,b,I,z,H,G,C){var D=I.format,x=C.correctFloat,w=C.defined,v=C.destroyObjectProperties,f=C.isArray,d=C.isNumber,q=C.objectEach,k=C.pick;\"\";var l=function(){function b(d,b,e,f,k){var c=d.chart.inverted;this.axis=d;this.isNegative=e;this.options=b=b||{};this.x=f;this.total=null;this.points={};this.hasValidPoints=\n!1;this.stack=k;this.rightCliff=this.leftCliff=0;this.alignOptions={align:b.align||(c?e?\"left\":\"right\":\"center\"),verticalAlign:b.verticalAlign||(c?\"middle\":e?\"bottom\":\"top\"),y:b.y,x:b.x};this.textAlign=b.textAlign||(c?e?\"right\":\"left\":\"center\")}b.prototype.destroy=function(){v(this,this.axis)};b.prototype.render=function(d){var b=this.axis.chart,e=this.options,f=e.format;f=f?D(f,this,b):e.formatter.call(this);this.label?this.label.attr({text:f,visibility:\"hidden\"}):(this.label=b.renderer.label(f,\nnull,null,e.shape,null,null,e.useHTML,!1,\"stack-labels\"),f={r:e.borderRadius||0,text:f,rotation:e.rotation,padding:k(e.padding,5),visibility:\"hidden\"},b.styledMode||(f.fill=e.backgroundColor,f.stroke=e.borderColor,f[\"stroke-width\"]=e.borderWidth,this.label.css(e.style)),this.label.attr(f),this.label.added||this.label.add(d));this.label.labelrank=b.plotSizeY};b.prototype.setOffset=function(b,e,f,l,m){var c=this.axis,g=c.chart;l=c.translate(c.stacking.usePercentage?100:l?l:this.total,0,0,0,1);f=c.translate(f?\nf:0);f=w(l)&&Math.abs(l-f);b=k(m,g.xAxis[0].translate(this.x))+b;c=w(l)&&this.getStackBox(g,this,b,l,e,f,c);e=this.label;f=this.isNegative;b=\"justify\"===k(this.options.overflow,\"justify\");var a=this.textAlign;e&&c&&(m=e.getBBox(),l=e.padding,a=\"left\"===a?g.inverted?-l:l:\"right\"===a?m.width:g.inverted&&\"center\"===a?m.width/2:g.inverted?f?m.width+l:-l:m.width/2,f=g.inverted?m.height/2:f?-l:m.height,this.alignOptions.x=k(this.options.x,0),this.alignOptions.y=k(this.options.y,0),c.x-=a,c.y-=f,e.align(this.alignOptions,\nnull,c),g.isInsidePlot(e.alignAttr.x+a-this.alignOptions.x,e.alignAttr.y+f-this.alignOptions.y)?e.show():(e.alignAttr.y=-9999,b=!1),b&&H.prototype.justifyDataLabel.call(this.axis,e,this.alignOptions,e.alignAttr,m,c),e.attr({x:e.alignAttr.x,y:e.alignAttr.y}),k(!b&&this.options.crop,!0)&&((g=d(e.x)&&d(e.y)&&g.isInsidePlot(e.x-l+e.width,e.y)&&g.isInsidePlot(e.x+l,e.y))||e.hide()))};b.prototype.getStackBox=function(d,b,e,f,k,c,g){var a=b.axis.reversed,h=d.inverted,m=g.height+g.pos-(h?d.plotLeft:d.plotTop);\nb=b.isNegative&&!a||!b.isNegative&&a;return{x:h?b?f-g.right:f-c+g.pos-d.plotLeft:e+d.xAxis[0].transB-d.plotLeft,y:h?g.height-e-k:b?m-f-c:m-f,width:h?c:k,height:h?k:c}};return b}();b.prototype.getStacks=function(){var d=this,b=d.inverted;d.yAxis.forEach(function(d){d.stacking&&d.stacking.stacks&&d.hasVisibleSeries&&(d.stacking.oldStacks=d.stacking.stacks)});d.series.forEach(function(e){var f=e.xAxis&&e.xAxis.options||{};!e.options.stacking||!0!==e.visible&&!1!==d.options.chart.ignoreHiddenSeries||\n(e.stackKey=[e.type,k(e.options.stack,\"\"),b?f.top:f.left,b?f.height:f.width].join())})};G.compose(e);H.prototype.setGroupedPoints=function(){var d=this.yAxis.stacking;this.options.centerInCategory&&(this.is(\"column\")||this.is(\"columnrange\"))&&!this.options.stacking&&1<this.chart.series.length?H.prototype.setStackedPoints.call(this,\"group\"):d&&q(d.stacks,function(b,e){\"group\"===e.slice(-5)&&(q(b,function(d){return d.destroy()}),delete d.stacks[e])})};H.prototype.setStackedPoints=function(d){var b=\nd||this.options.stacking;if(b&&(!0===this.visible||!1===this.chart.options.chart.ignoreHiddenSeries)){var e=this.processedXData,q=this.processedYData,v=[],m=q.length,c=this.options,g=c.threshold,a=k(c.startFromThreshold&&g,0);c=c.stack;d=d?this.type+\",\"+b:this.stackKey;var h=\"-\"+d,r=this.negStacks,A=this.yAxis,y=A.stacking.stacks,D=A.stacking.oldStacks,B,C;A.stacking.stacksTouched+=1;for(C=0;C<m;C++){var z=e[C];var Q=q[C];var M=this.getStackIndicator(M,z,this.index);var t=M.key;var p=(B=r&&Q<(a?0:\ng))?h:d;y[p]||(y[p]={});y[p][z]||(D[p]&&D[p][z]?(y[p][z]=D[p][z],y[p][z].total=null):y[p][z]=new l(A,A.options.stackLabels,B,z,c));p=y[p][z];null!==Q?(p.points[t]=p.points[this.index]=[k(p.cumulative,a)],w(p.cumulative)||(p.base=t),p.touched=A.stacking.stacksTouched,0<M.index&&!1===this.singleStacks&&(p.points[t][0]=p.points[this.index+\",\"+z+\",0\"][0])):p.points[t]=p.points[this.index]=null;\"percent\"===b?(B=B?d:h,r&&y[B]&&y[B][z]?(B=y[B][z],p.total=B.total=Math.max(B.total,p.total)+Math.abs(Q)||0):\np.total=x(p.total+(Math.abs(Q)||0))):\"group\"===b?(f(Q)&&(Q=Q[0]),null!==Q&&(p.total=(p.total||0)+1)):p.total=x(p.total+(Q||0));p.cumulative=\"group\"===b?(p.total||1)-1:k(p.cumulative,a)+(Q||0);null!==Q&&(p.points[t].push(p.cumulative),v[C]=p.cumulative,p.hasValidPoints=!0)}\"percent\"===b&&(A.stacking.usePercentage=!0);\"group\"!==b&&(this.stackedYData=v);A.stacking.oldStacks={}}};H.prototype.modifyStacks=function(){var d=this,b=d.stackKey,e=d.yAxis.stacking.stacks,f=d.processedXData,k,m=d.options.stacking;\nd[m+\"Stacker\"]&&[b,\"-\"+b].forEach(function(c){for(var b=f.length,a,h;b--;)if(a=f[b],k=d.getStackIndicator(k,a,d.index,c),h=(a=e[c]&&e[c][a])&&a.points[k.key])d[m+\"Stacker\"](h,a,b)})};H.prototype.percentStacker=function(d,b,e){b=b.total?100/b.total:0;d[0]=x(d[0]*b);d[1]=x(d[1]*b);this.stackedYData[e]=d[1]};H.prototype.getStackIndicator=function(d,b,e,f){!w(d)||d.x!==b||f&&d.key!==f?d={x:b,index:0,key:f}:d.index++;d.key=[e,b,d.index].join();return d};z.StackItem=l;return z.StackItem});O(e,\"Series/Line/LineSeries.js\",\n[e[\"Core/Color/Palette.js\"],e[\"Core/Series/Series.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(e,b,I,z){var D=this&&this.__extends||function(){var b=function(e,w){b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(b,e){b.__proto__=e}||function(b,e){for(var d in e)e.hasOwnProperty(d)&&(b[d]=e[d])};return b(e,w)};return function(e,w){function v(){this.constructor=e}b(e,w);e.prototype=null===w?Object.create(w):(v.prototype=w.prototype,new v)}}(),G=z.defined,\nC=z.merge;z=function(B){function x(){var b=null!==B&&B.apply(this,arguments)||this;b.data=void 0;b.options=void 0;b.points=void 0;return b}D(x,B);x.prototype.drawGraph=function(){var b=this,v=this.options,f=(this.gappedPath||this.getGraphPath).call(this),d=this.chart.styledMode,q=[[\"graph\",\"highcharts-graph\"]];d||q[0].push(v.lineColor||this.color||e.neutralColor20,v.dashStyle);q=b.getZonesGraphs(q);q.forEach(function(e,l){var k=e[0],q=b[k],n=q?\"animate\":\"attr\";q?(q.endX=b.preventGraphAnimation?null:\nf.xMap,q.animate({d:f})):f.length&&(b[k]=q=b.chart.renderer.path(f).addClass(e[1]).attr({zIndex:1}).add(b.group));q&&!d&&(k={stroke:e[2],\"stroke-width\":v.lineWidth,fill:b.fillGraph&&b.color||\"none\"},e[3]?k.dashstyle=e[3]:\"square\"!==v.linecap&&(k[\"stroke-linecap\"]=k[\"stroke-linejoin\"]=\"round\"),q[n](k).shadow(2>l&&v.shadow));q&&(q.startX=f.xMap,q.isArea=f.isArea)})};x.prototype.getGraphPath=function(b,e,f){var d=this,q=d.options,k=q.step,l,v=[],u=[],n;b=b||d.points;(l=b.reversed)&&b.reverse();(k={right:1,\ncenter:2}[k]||k&&3)&&l&&(k=4-k);b=this.getValidPoints(b,!1,!(q.connectNulls&&!e&&!f));b.forEach(function(l,w){var m=l.plotX,c=l.plotY,g=b[w-1];(l.leftCliff||g&&g.rightCliff)&&!f&&(n=!0);l.isNull&&!G(e)&&0<w?n=!q.connectNulls:l.isNull&&!e?n=!0:(0===w||n?w=[[\"M\",l.plotX,l.plotY]]:d.getPointSpline?w=[d.getPointSpline(b,l,w)]:k?(w=1===k?[[\"L\",g.plotX,c]]:2===k?[[\"L\",(g.plotX+m)/2,g.plotY],[\"L\",(g.plotX+m)/2,c]]:[[\"L\",m,g.plotY]],w.push([\"L\",m,c])):w=[[\"L\",m,c]],u.push(l.x),k&&(u.push(l.x),2===k&&u.push(l.x)),\nv.push.apply(v,w),n=!1)});v.xMap=u;return d.graphPath=v};x.prototype.getZonesGraphs=function(b){this.zones.forEach(function(e,f){f=[\"zone-graph-\"+f,\"highcharts-graph highcharts-zone-graph-\"+f+\" \"+(e.className||\"\")];this.chart.styledMode||f.push(e.color||this.color,e.dashStyle||this.options.dashStyle);b.push(f)},this);return b};x.defaultOptions=C(b.defaultOptions,{});return x}(b);I.registerSeriesType(\"line\",z);\"\";return z});O(e,\"Series/Area/AreaSeries.js\",[e[\"Core/Color/Color.js\"],e[\"Mixins/LegendSymbol.js\"],\ne[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(e,b,I,z){var D=this&&this.__extends||function(){var b=function(e,d){b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(b,d){b.__proto__=d}||function(b,d){for(var e in d)d.hasOwnProperty(e)&&(b[e]=d[e])};return b(e,d)};return function(e,d){function f(){this.constructor=e}b(e,d);e.prototype=null===d?Object.create(d):(f.prototype=d.prototype,new f)}}(),G=e.parse,C=I.seriesTypes.line;e=z.extend;var B=z.merge,x=z.objectEach,\nw=z.pick;z=function(b){function e(){var d=null!==b&&b.apply(this,arguments)||this;d.data=void 0;d.options=void 0;d.points=void 0;return d}D(e,b);e.prototype.drawGraph=function(){this.areaPath=[];b.prototype.drawGraph.apply(this);var d=this,e=this.areaPath,f=this.options,l=[[\"area\",\"highcharts-area\",this.color,f.fillColor]];this.zones.forEach(function(b,e){l.push([\"zone-area-\"+e,\"highcharts-area highcharts-zone-area-\"+e+\" \"+b.className,b.color||d.color,b.fillColor||f.fillColor])});l.forEach(function(b){var k=\nb[0],l=d[k],q=l?\"animate\":\"attr\",v={};l?(l.endX=d.preventGraphAnimation?null:e.xMap,l.animate({d:e})):(v.zIndex=0,l=d[k]=d.chart.renderer.path(e).addClass(b[1]).add(d.group),l.isArea=!0);d.chart.styledMode||(v.fill=w(b[3],G(b[2]).setOpacity(w(f.fillOpacity,.75)).get()));l[q](v);l.startX=e.xMap;l.shiftUnit=f.step?2:1})};e.prototype.getGraphPath=function(b){var d=C.prototype.getGraphPath,e=this.options,f=e.stacking,v=this.yAxis,u,n=[],x=[],E=this.index,m=v.stacking.stacks[this.stackKey],c=e.threshold,\ng=Math.round(v.getThreshold(e.threshold));e=w(e.connectNulls,\"percent\"===f);var a=function(a,d,e){var h=b[a];a=f&&m[h.x].points[E];var k=h[e+\"Null\"]||0;e=h[e+\"Cliff\"]||0;h=!0;if(e||k){var l=(k?a[0]:a[1])+e;var q=a[0]+e;h=!!k}else!f&&b[d]&&b[d].isNull&&(l=q=c);\"undefined\"!==typeof l&&(x.push({plotX:r,plotY:null===l?g:v.getThreshold(l),isNull:h,isCliff:!0}),n.push({plotX:r,plotY:null===q?g:v.getThreshold(q),doCurve:!1}))};b=b||this.points;f&&(b=this.getStackPoints(b));for(u=0;u<b.length;u++){f||(b[u].leftCliff=\nb[u].rightCliff=b[u].leftNull=b[u].rightNull=void 0);var h=b[u].isNull;var r=w(b[u].rectPlotX,b[u].plotX);var A=f?w(b[u].yBottom,g):g;if(!h||e)e||a(u,u-1,\"left\"),h&&!f&&e||(x.push(b[u]),n.push({x:u,plotX:r,plotY:A})),e||a(u,u+1,\"right\")}u=d.call(this,x,!0,!0);n.reversed=!0;h=d.call(this,n,!0,!0);(A=h[0])&&\"M\"===A[0]&&(h[0]=[\"L\",A[1],A[2]]);h=u.concat(h);h.length&&h.push([\"Z\"]);d=d.call(this,x,!1,e);h.xMap=u.xMap;this.areaPath=h;return d};e.prototype.getStackPoints=function(b){var d=this,e=[],f=[],\nv=this.xAxis,u=this.yAxis,n=u.stacking.stacks[this.stackKey],D={},E=u.series,m=E.length,c=u.options.reversedStacks?1:-1,g=E.indexOf(d);b=b||this.points;if(this.options.stacking){for(var a=0;a<b.length;a++)b[a].leftNull=b[a].rightNull=void 0,D[b[a].x]=b[a];x(n,function(a,c){null!==a.total&&f.push(c)});f.sort(function(a,c){return a-c});var h=E.map(function(a){return a.visible});f.forEach(function(a,b){var k=0,l,r;if(D[a]&&!D[a].isNull)e.push(D[a]),[-1,1].forEach(function(e){var k=1===e?\"rightNull\":\n\"leftNull\",q=0,t=n[f[b+e]];if(t)for(var p=g;0<=p&&p<m;){var v=E[p].index;l=t.points[v];l||(v===d.index?D[a][k]=!0:h[p]&&(r=n[a].points[v])&&(q-=r[1]-r[0]));p+=c}D[a][1===e?\"rightCliff\":\"leftCliff\"]=q});else{for(var q=g;0<=q&&q<m;){if(l=n[a].points[E[q].index]){k=l[1];break}q+=c}k=w(k,0);k=u.translate(k,0,1,0,1);e.push({isNull:!0,plotX:v.translate(a,0,0,0,1),x:a,plotY:k,yBottom:k})}})}return e};e.defaultOptions=B(C.defaultOptions,{threshold:0});return e}(C);e(z.prototype,{singleStacks:!1,drawLegendSymbol:b.drawRectangle});\nI.registerSeriesType(\"area\",z);\"\";return z});O(e,\"Series/Spline/SplineSeries.js\",[e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(e,b){var D=this&&this.__extends||function(){var b=function(e,x){b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(b,e){b.__proto__=e}||function(b,e){for(var f in e)e.hasOwnProperty(f)&&(b[f]=e[f])};return b(e,x)};return function(e,x){function w(){this.constructor=e}b(e,x);e.prototype=null===x?Object.create(x):(w.prototype=x.prototype,\nnew w)}}(),z=e.seriesTypes.line,H=b.merge,G=b.pick;b=function(b){function e(){var e=null!==b&&b.apply(this,arguments)||this;e.data=void 0;e.options=void 0;e.points=void 0;return e}D(e,b);e.prototype.getPointSpline=function(b,e,v){var f=e.plotX||0,d=e.plotY||0,q=b[v-1];v=b[v+1];if(q&&!q.isNull&&!1!==q.doCurve&&!e.isCliff&&v&&!v.isNull&&!1!==v.doCurve&&!e.isCliff){b=q.plotY||0;var k=v.plotX||0;v=v.plotY||0;var l=0;var w=(1.5*f+(q.plotX||0))/2.5;var u=(1.5*d+b)/2.5;k=(1.5*f+k)/2.5;var n=(1.5*d+v)/2.5;\nk!==w&&(l=(n-u)*(k-f)/(k-w)+d-n);u+=l;n+=l;u>b&&u>d?(u=Math.max(b,d),n=2*d-u):u<b&&u<d&&(u=Math.min(b,d),n=2*d-u);n>v&&n>d?(n=Math.max(v,d),u=2*d-n):n<v&&n<d&&(n=Math.min(v,d),u=2*d-n);e.rightContX=k;e.rightContY=n}e=[\"C\",G(q.rightContX,q.plotX,0),G(q.rightContY,q.plotY,0),G(w,f,0),G(u,d,0),f,d];q.rightContX=q.rightContY=void 0;return e};e.defaultOptions=H(z.defaultOptions);return e}(z);e.registerSeriesType(\"spline\",b);\"\";return b});O(e,\"Series/AreaSpline/AreaSplineSeries.js\",[e[\"Series/Area/AreaSeries.js\"],\ne[\"Series/Spline/SplineSeries.js\"],e[\"Mixins/LegendSymbol.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(e,b,I,z,H){var D=this&&this.__extends||function(){var b=function(e,f){b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(b,e){b.__proto__=e}||function(b,e){for(var d in e)e.hasOwnProperty(d)&&(b[d]=e[d])};return b(e,f)};return function(e,f){function d(){this.constructor=e}b(e,f);e.prototype=null===f?Object.create(f):(d.prototype=f.prototype,new d)}}(),C=\ne.prototype,B=H.extend,x=H.merge;H=function(w){function v(){var b=null!==w&&w.apply(this,arguments)||this;b.data=void 0;b.points=void 0;b.options=void 0;return b}D(v,w);v.defaultOptions=x(b.defaultOptions,e.defaultOptions);return v}(b);B(H.prototype,{getGraphPath:C.getGraphPath,getStackPoints:C.getStackPoints,drawGraph:C.drawGraph,drawLegendSymbol:I.drawRectangle});z.registerSeriesType(\"areaspline\",H);\"\";return H});O(e,\"Series/Column/ColumnSeries.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Color/Color.js\"],\ne[\"Core/Globals.js\"],e[\"Mixins/LegendSymbol.js\"],e[\"Core/Color/Palette.js\"],e[\"Core/Series/Series.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(e,b,I,z,H,G,C,B){var x=this&&this.__extends||function(){var c=function(b,a){c=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(a,c){a.__proto__=c}||function(a,c){for(var b in c)c.hasOwnProperty(b)&&(a[b]=c[b])};return c(b,a)};return function(b,a){function d(){this.constructor=b}c(b,a);b.prototype=null===a?Object.create(a):\n(d.prototype=a.prototype,new d)}}(),w=e.animObject,v=b.parse,f=I.hasTouch;e=I.noop;var d=B.clamp,q=B.css,k=B.defined,l=B.extend,D=B.fireEvent,u=B.isArray,n=B.isNumber,J=B.merge,E=B.pick,m=B.objectEach;B=function(c){function b(){var a=null!==c&&c.apply(this,arguments)||this;a.borderWidth=void 0;a.data=void 0;a.group=void 0;a.options=void 0;a.points=void 0;return a}x(b,c);b.prototype.animate=function(a){var c=this,b=this.yAxis,e=c.options,g=this.chart.inverted,f={},k=g?\"translateX\":\"translateY\";if(a)f.scaleY=\n.001,a=d(b.toPixels(e.threshold),b.pos,b.pos+b.len),g?f.translateX=a-b.len:f.translateY=a,c.clipBox&&c.setClip(),c.group.attr(f);else{var m=Number(c.group.attr(k));c.group.animate({scaleY:1},l(w(c.options.animation),{step:function(a,d){c.group&&(f[k]=m+d.pos*(b.pos-m),c.group.attr(f))}}))}};b.prototype.init=function(a,b){c.prototype.init.apply(this,arguments);var d=this;a=d.chart;a.hasRendered&&a.series.forEach(function(a){a.type===d.type&&(a.isDirty=!0)})};b.prototype.getColumnMetrics=function(){var a=\nthis,c=a.options,b=a.xAxis,d=a.yAxis,e=b.options.reversedStacks;e=b.reversed&&!e||!b.reversed&&e;var g,f={},k=0;!1===c.grouping?k=1:a.chart.series.forEach(function(c){var b=c.yAxis,e=c.options;if(c.type===a.type&&(c.visible||!a.chart.options.chart.ignoreHiddenSeries)&&d.len===b.len&&d.pos===b.pos){if(e.stacking&&\"group\"!==e.stacking){g=c.stackKey;\"undefined\"===typeof f[g]&&(f[g]=k++);var h=f[g]}else!1!==e.grouping&&(h=k++);c.columnIndex=h}});var m=Math.min(Math.abs(b.transA)*(b.ordinal&&b.ordinal.slope||\nc.pointRange||b.closestPointRange||b.tickInterval||1),b.len),l=m*c.groupPadding,n=(m-2*l)/(k||1);c=Math.min(c.maxPointWidth||b.len,E(c.pointWidth,n*(1-2*c.pointPadding)));a.columnMetrics={width:c,offset:(n-c)/2+(l+((a.columnIndex||0)+(e?1:0))*n-m/2)*(e?-1:1),paddedWidth:n,columnCount:k};return a.columnMetrics};b.prototype.crispCol=function(a,c,b,d){var e=this.chart,h=this.borderWidth,g=-(h%2?.5:0);h=h%2?.5:1;e.inverted&&e.renderer.isVML&&(h+=1);this.options.crisp&&(b=Math.round(a+b)+g,a=Math.round(a)+\ng,b-=a);d=Math.round(c+d)+h;g=.5>=Math.abs(c)&&.5<d;c=Math.round(c)+h;d-=c;g&&d&&(--c,d+=1);return{x:a,y:c,width:b,height:d}};b.prototype.adjustForMissingColumns=function(a,c,b,d){var e=this,h=this.options.stacking;if(!b.isNull&&1<d.columnCount){var g=0,f=0;m(this.yAxis.stacking&&this.yAxis.stacking.stacks,function(a){if(\"number\"===typeof b.x&&(a=a[b.x.toString()])){var c=a.points[e.index],d=a.total;h?(c&&(g=f),a.hasValidPoints&&f++):u(c)&&(g=c[1],f=d||0)}});a=(b.plotX||0)+((f-1)*d.paddedWidth+c)/\n2-c-g*d.paddedWidth}return a};b.prototype.translate=function(){var a=this,c=a.chart,b=a.options,e=a.dense=2>a.closestPointRange*a.xAxis.transA;e=a.borderWidth=E(b.borderWidth,e?0:1);var g=a.xAxis,f=a.yAxis,m=b.threshold,l=a.translatedThreshold=f.getThreshold(m),q=E(b.minPointLength,5),v=a.getColumnMetrics(),u=v.width,t=a.barW=Math.max(u,1+2*e),p=a.pointXOffset=v.offset,w=a.dataMin,x=a.dataMax;c.inverted&&(l-=.5);b.pointPadding&&(t=Math.ceil(t));G.prototype.translate.apply(a);a.points.forEach(function(e){var h=\nE(e.yBottom,l),r=999+Math.abs(h),y=u,A=e.plotX||0;r=d(e.plotY,-r,f.len+r);A+=p;var D=t,B=Math.min(r,h),z=Math.max(r,h)-B;if(q&&Math.abs(z)<q){z=q;var C=!f.reversed&&!e.negative||f.reversed&&e.negative;n(m)&&n(x)&&e.y===m&&x<=m&&(f.min||0)<m&&(w!==x||(f.max||0)<=m)&&(C=!C);B=Math.abs(B-l)>q?h-q:l-(C?q:0)}k(e.options.pointWidth)&&(y=D=Math.ceil(e.options.pointWidth),A-=Math.round((y-u)/2));b.centerInCategory&&(A=a.adjustForMissingColumns(A,y,e,v));e.barX=A;e.pointWidth=y;e.tooltipPos=c.inverted?[d(f.len+\nf.pos-c.plotLeft-r,f.pos-c.plotLeft,f.len+f.pos-c.plotLeft),g.len+g.pos-c.plotTop-A-D/2,z]:[g.left-c.plotLeft+A+D/2,d(r+f.pos-c.plotTop,f.pos-c.plotTop,f.len+f.pos-c.plotTop),z];e.shapeType=a.pointClass.prototype.shapeType||\"rect\";e.shapeArgs=a.crispCol.apply(a,e.isNull?[A,l,D,0]:[A,B,D,z])})};b.prototype.drawGraph=function(){this.group[this.dense?\"addClass\":\"removeClass\"](\"highcharts-dense-data\")};b.prototype.pointAttribs=function(a,c){var b=this.options,d=this.pointAttrToOptions||{};var e=d.stroke||\n\"borderColor\";var h=d[\"stroke-width\"]||\"borderWidth\",g=a&&a.color||this.color,f=a&&a[e]||b[e]||g,k=a&&a[h]||b[h]||this[h]||0;d=a&&a.options.dashStyle||b.dashStyle;var m=E(a&&a.opacity,b.opacity,1);if(a&&this.zones.length){var l=a.getZone();g=a.options.color||l&&(l.color||a.nonZonedColor)||this.color;l&&(f=l.borderColor||f,d=l.dashStyle||d,k=l.borderWidth||k)}c&&a&&(a=J(b.states[c],a.options.states&&a.options.states[c]||{}),c=a.brightness,g=a.color||\"undefined\"!==typeof c&&v(g).brighten(a.brightness).get()||\ng,f=a[e]||f,k=a[h]||k,d=a.dashStyle||d,m=E(a.opacity,m));e={fill:g,stroke:f,\"stroke-width\":k,opacity:m};d&&(e.dashstyle=d);return e};b.prototype.drawPoints=function(){var a=this,c=this.chart,b=a.options,d=c.renderer,e=b.animationLimit||250,g;a.points.forEach(function(h){var f=h.graphic,k=!!f,m=f&&c.pointCount<e?\"animate\":\"attr\";if(n(h.plotY)&&null!==h.y){g=h.shapeArgs;f&&h.hasNewShapeType()&&(f=f.destroy());a.enabledDataSorting&&(h.startXPos=a.xAxis.reversed?-(g?g.width||0:0):a.xAxis.width);f||(h.graphic=\nf=d[h.shapeType](g).add(h.group||a.group))&&a.enabledDataSorting&&c.hasRendered&&c.pointCount<e&&(f.attr({x:h.startXPos}),k=!0,m=\"animate\");if(f&&k)f[m](J(g));if(b.borderRadius)f[m]({r:b.borderRadius});c.styledMode||f[m](a.pointAttribs(h,h.selected&&\"select\")).shadow(!1!==h.allowShadow&&b.shadow,null,b.stacking&&!b.borderRadius);f&&(f.addClass(h.getClassName(),!0),f.attr({visibility:h.visible?\"inherit\":\"hidden\"}))}else f&&(h.graphic=f.destroy())})};b.prototype.drawTracker=function(){var a=this,c=\na.chart,b=c.pointer,d=function(a){var c=b.getPointFromEvent(a);\"undefined\"!==typeof c&&(b.isDirectTouch=!0,c.onMouseOver(a))},e;a.points.forEach(function(a){e=u(a.dataLabels)?a.dataLabels:a.dataLabel?[a.dataLabel]:[];a.graphic&&(a.graphic.element.point=a);e.forEach(function(c){c.div?c.div.point=a:c.element.point=a})});a._hasTracking||(a.trackerGroups.forEach(function(e){if(a[e]){a[e].addClass(\"highcharts-tracker\").on(\"mouseover\",d).on(\"mouseout\",function(a){b.onTrackerMouseOut(a)});if(f)a[e].on(\"touchstart\",\nd);!c.styledMode&&a.options.cursor&&a[e].css(q).css({cursor:a.options.cursor})}}),a._hasTracking=!0);D(this,\"afterDrawTracker\")};b.prototype.remove=function(){var a=this,c=a.chart;c.hasRendered&&c.series.forEach(function(c){c.type===a.type&&(c.isDirty=!0)});G.prototype.remove.apply(a,arguments)};b.defaultOptions=J(G.defaultOptions,{borderRadius:0,centerInCategory:!1,groupPadding:.2,marker:null,pointPadding:.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{halo:!1,brightness:.1},\nselect:{color:H.neutralColor20,borderColor:H.neutralColor100}},dataLabels:{align:void 0,verticalAlign:void 0,y:void 0},startFromThreshold:!0,stickyTracking:!1,tooltip:{distance:6},threshold:0,borderColor:H.backgroundColor});return b}(G);l(B.prototype,{cropShoulder:0,directTouch:!0,drawLegendSymbol:z.drawRectangle,getSymbol:e,negStacks:!0,trackerGroups:[\"group\",\"dataLabelsGroup\"]});C.registerSeriesType(\"column\",B);\"\";\"\";return B});O(e,\"Series/Bar/BarSeries.js\",[e[\"Series/Column/ColumnSeries.js\"],e[\"Core/Series/SeriesRegistry.js\"],\ne[\"Core/Utilities.js\"]],function(e,b,I){var D=this&&this.__extends||function(){var b=function(e,x){b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(b,e){b.__proto__=e}||function(b,e){for(var f in e)e.hasOwnProperty(f)&&(b[f]=e[f])};return b(e,x)};return function(e,x){function w(){this.constructor=e}b(e,x);e.prototype=null===x?Object.create(x):(w.prototype=x.prototype,new w)}}(),H=I.extend,G=I.merge;I=function(b){function B(){var e=null!==b&&b.apply(this,arguments)||this;e.data=void 0;\ne.options=void 0;e.points=void 0;return e}D(B,b);B.defaultOptions=G(e.defaultOptions,{});return B}(e);H(I.prototype,{inverted:!0});b.registerSeriesType(\"bar\",I);\"\";return I});O(e,\"Series/Scatter/ScatterSeries.js\",[e[\"Series/Column/ColumnSeries.js\"],e[\"Series/Line/LineSeries.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(e,b,I,z){var D=this&&this.__extends||function(){var b=function(e,v){b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(b,d){b.__proto__=d}||\nfunction(b,d){for(var e in d)d.hasOwnProperty(e)&&(b[e]=d[e])};return b(e,v)};return function(e,v){function f(){this.constructor=e}b(e,v);e.prototype=null===v?Object.create(v):(f.prototype=v.prototype,new f)}}(),G=z.addEvent,C=z.extend,B=z.merge;z=function(e){function w(){var b=null!==e&&e.apply(this,arguments)||this;b.data=void 0;b.options=void 0;b.points=void 0;return b}D(w,e);w.prototype.applyJitter=function(){var b=this,e=this.options.jitter,d=this.points.length;e&&this.points.forEach(function(f,\nk){[\"x\",\"y\"].forEach(function(l,q){var v=\"plot\"+l.toUpperCase();if(e[l]&&!f.isNull){var n=b[l+\"Axis\"];var w=e[l]*n.transA;if(n&&!n.isLog){var E=Math.max(0,f[v]-w);n=Math.min(n.len,f[v]+w);q=1E4*Math.sin(k+q*d);f[v]=E+(n-E)*(q-Math.floor(q));\"x\"===l&&(f.clientX=f.plotX)}}})})};w.prototype.drawGraph=function(){(this.options.lineWidth||0===this.options.lineWidth&&this.graph&&this.graph.strokeWidth())&&e.prototype.drawGraph.call(this)};w.defaultOptions=B(b.defaultOptions,{lineWidth:0,findNearestPointBy:\"xy\",\njitter:{x:0,y:0},marker:{enabled:!0},tooltip:{headerFormat:'<span style=\"color:{point.color}\">\\u25cf</span> <span style=\"font-size: 10px\"> {series.name}</span><br/>',pointFormat:\"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>\"}});return w}(b);C(z.prototype,{drawTracker:e.prototype.drawTracker,sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:[\"group\",\"markerGroup\",\"dataLabelsGroup\"],takeOrdinalPosition:!1});G(z,\"afterTranslate\",function(){this.applyJitter()});I.registerSeriesType(\"scatter\",\nz);\"\";return z});O(e,\"Mixins/CenteredSeries.js\",[e[\"Core/Globals.js\"],e[\"Core/Series/Series.js\"],e[\"Core/Utilities.js\"]],function(e,b,I){var D=I.isNumber,H=I.pick,G=I.relativeLength,C=e.deg2rad;return e.CenteredSeriesMixin={getCenter:function(){var e=this.options,D=this.chart,w=2*(e.slicedOffset||0),v=D.plotWidth-2*w,f=D.plotHeight-2*w,d=e.center,q=Math.min(v,f),k=e.size,l=e.innerSize||0;\"string\"===typeof k&&(k=parseFloat(k));\"string\"===typeof l&&(l=parseFloat(l));e=[H(d[0],\"50%\"),H(d[1],\"50%\"),H(k&&\n0>k?void 0:e.size,\"100%\"),H(l&&0>l?void 0:e.innerSize||0,\"0%\")];!D.angular||this instanceof b||(e[3]=0);for(d=0;4>d;++d)k=e[d],D=2>d||2===d&&/%$/.test(k),e[d]=G(k,[v,f,q,e[2]][d])+(D?w:0);e[3]>e[2]&&(e[3]=e[2]);return e},getStartAndEndRadians:function(b,e){b=D(b)?b:0;e=D(e)&&e>b&&360>e-b?e:b+360;return{start:C*(b+-90),end:C*(e+-90)}}}});O(e,\"Series/Pie/PiePoint.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Series/Point.js\"],e[\"Core/Utilities.js\"]],function(e,b,I){var D=this&&this.__extends||\nfunction(){var b=function(e,d){b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(b,d){b.__proto__=d}||function(b,d){for(var e in d)d.hasOwnProperty(e)&&(b[e]=d[e])};return b(e,d)};return function(e,d){function f(){this.constructor=e}b(e,d);e.prototype=null===d?Object.create(d):(f.prototype=d.prototype,new f)}}(),H=e.setAnimation,G=I.addEvent,C=I.defined;e=I.extend;var B=I.isNumber,x=I.pick,w=I.relativeLength;I=function(e){function f(){var b=null!==e&&e.apply(this,arguments)||this;\nb.labelDistance=void 0;b.options=void 0;b.series=void 0;return b}D(f,e);f.prototype.getConnectorPath=function(){var b=this.labelPosition,e=this.series.options.dataLabels,f=e.connectorShape,l=this.connectorShapes;l[f]&&(f=l[f]);return f.call(this,{x:b.final.x,y:b.final.y,alignment:b.alignment},b.connectorPosition,e)};f.prototype.getTranslate=function(){return this.sliced?this.slicedTranslation:{translateX:0,translateY:0}};f.prototype.haloPath=function(b){var d=this.shapeArgs;return this.sliced||!this.visible?\n[]:this.series.chart.renderer.symbols.arc(d.x,d.y,d.r+b,d.r+b,{innerR:d.r-1,start:d.start,end:d.end})};f.prototype.init=function(){b.prototype.init.apply(this,arguments);var d=this;d.name=x(d.name,\"Slice\");var e=function(b){d.slice(\"select\"===b.type)};G(d,\"select\",e);G(d,\"unselect\",e);return d};f.prototype.isValid=function(){return B(this.y)&&0<=this.y};f.prototype.setVisible=function(b,e){var d=this,f=d.series,q=f.chart,v=f.options.ignoreHiddenPoint;e=x(e,v);b!==d.visible&&(d.visible=d.options.visible=\nb=\"undefined\"===typeof b?!d.visible:b,f.options.data[f.data.indexOf(d)]=d.options,[\"graphic\",\"dataLabel\",\"connector\",\"shadowGroup\"].forEach(function(e){if(d[e])d[e][b?\"show\":\"hide\"](b)}),d.legendItem&&q.legend.colorizeItem(d,b),b||\"hover\"!==d.state||d.setState(\"\"),v&&(f.isDirty=!0),e&&q.redraw())};f.prototype.slice=function(b,e,f){var d=this.series;H(f,d.chart);x(e,!0);this.sliced=this.options.sliced=C(b)?b:!this.sliced;d.options.data[d.data.indexOf(this)]=this.options;this.graphic&&this.graphic.animate(this.getTranslate());\nthis.shadowGroup&&this.shadowGroup.animate(this.getTranslate())};return f}(b);e(I.prototype,{connectorShapes:{fixedOffset:function(b,e,d){var f=e.breakAt;e=e.touchingSliceAt;return[[\"M\",b.x,b.y],d.softConnector?[\"C\",b.x+(\"left\"===b.alignment?-5:5),b.y,2*f.x-e.x,2*f.y-e.y,f.x,f.y]:[\"L\",f.x,f.y],[\"L\",e.x,e.y]]},straight:function(b,e){e=e.touchingSliceAt;return[[\"M\",b.x,b.y],[\"L\",e.x,e.y]]},crookedLine:function(b,e,d){e=e.touchingSliceAt;var f=this.series,k=f.center[0],l=f.chart.plotWidth,v=f.chart.plotLeft;\nf=b.alignment;var u=this.shapeArgs.r;d=w(d.crookDistance,1);l=\"left\"===f?k+u+(l+v-k-u)*(1-d):v+(k-u)*d;d=[\"L\",l,b.y];k=!0;if(\"left\"===f?l>b.x||l<e.x:l<b.x||l>e.x)k=!1;b=[[\"M\",b.x,b.y]];k&&b.push(d);b.push([\"L\",e.x,e.y]);return b}}});return I});O(e,\"Series/Pie/PieSeries.js\",[e[\"Mixins/CenteredSeries.js\"],e[\"Series/Column/ColumnSeries.js\"],e[\"Core/Globals.js\"],e[\"Mixins/LegendSymbol.js\"],e[\"Core/Color/Palette.js\"],e[\"Series/Pie/PiePoint.js\"],e[\"Core/Series/Series.js\"],e[\"Core/Series/SeriesRegistry.js\"],\ne[\"Core/Renderer/SVG/SVGRenderer.js\"],e[\"Core/Utilities.js\"]],function(e,b,I,z,H,G,C,B,x,w){var v=this&&this.__extends||function(){var b=function(d,e){b=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(b,c){b.__proto__=c}||function(b,c){for(var d in c)c.hasOwnProperty(d)&&(b[d]=c[d])};return b(d,e)};return function(d,e){function f(){this.constructor=d}b(d,e);d.prototype=null===e?Object.create(e):(f.prototype=e.prototype,new f)}}(),f=e.getStartAndEndRadians;I=I.noop;var d=w.clamp,q=\nw.extend,k=w.fireEvent,l=w.merge,D=w.pick,u=w.relativeLength;w=function(b){function e(){var d=null!==b&&b.apply(this,arguments)||this;d.center=void 0;d.data=void 0;d.maxLabelDistance=void 0;d.options=void 0;d.points=void 0;return d}v(e,b);e.prototype.animate=function(b){var d=this,c=d.points,e=d.startAngleRad;b||c.forEach(function(a){var c=a.graphic,b=a.shapeArgs;c&&b&&(c.attr({r:D(a.startR,d.center&&d.center[3]/2),start:e,end:e}),c.animate({r:b.r,start:b.start,end:b.end},d.options.animation))})};\ne.prototype.drawEmpty=function(){var b=this.startAngleRad,d=this.endAngleRad,c=this.options;if(0===this.total&&this.center){var e=this.center[0];var a=this.center[1];this.graph||(this.graph=this.chart.renderer.arc(e,a,this.center[1]/2,0,b,d).addClass(\"highcharts-empty-series\").add(this.group));this.graph.attr({d:x.prototype.symbols.arc(e,a,this.center[2]/2,0,{start:b,end:d,innerR:this.center[3]/2})});this.chart.styledMode||this.graph.attr({\"stroke-width\":c.borderWidth,fill:c.fillColor||\"none\",stroke:c.color||\nH.neutralColor20})}else this.graph&&(this.graph=this.graph.destroy())};e.prototype.drawPoints=function(){var b=this.chart.renderer;this.points.forEach(function(d){d.graphic&&d.hasNewShapeType()&&(d.graphic=d.graphic.destroy());d.graphic||(d.graphic=b[d.shapeType](d.shapeArgs).add(d.series.group),d.delayedRendering=!0)})};e.prototype.generatePoints=function(){b.prototype.generatePoints.call(this);this.updateTotals()};e.prototype.getX=function(b,e,c){var g=this.center,a=this.radii?this.radii[c.index]||\n0:g[2]/2;b=Math.asin(d((b-g[1])/(a+c.labelDistance),-1,1));return g[0]+(e?-1:1)*Math.cos(b)*(a+c.labelDistance)+(0<c.labelDistance?(e?-1:1)*this.options.dataLabels.padding:0)};e.prototype.hasData=function(){return!!this.processedXData.length};e.prototype.redrawPoints=function(){var b=this,d=b.chart,c=d.renderer,e,a,h,f,k=b.options.shadow;this.drawEmpty();!k||b.shadowGroup||d.styledMode||(b.shadowGroup=c.g(\"shadow\").attr({zIndex:-1}).add(b.group));b.points.forEach(function(g){var m={};a=g.graphic;\nif(!g.isNull&&a){var r=void 0;f=g.shapeArgs;e=g.getTranslate();d.styledMode||(r=g.shadowGroup,k&&!r&&(r=g.shadowGroup=c.g(\"shadow\").add(b.shadowGroup)),r&&r.attr(e),h=b.pointAttribs(g,g.selected&&\"select\"));g.delayedRendering?(a.setRadialReference(b.center).attr(f).attr(e),d.styledMode||a.attr(h).attr({\"stroke-linejoin\":\"round\"}).shadow(k,r),g.delayedRendering=!1):(a.setRadialReference(b.center),d.styledMode||l(!0,m,h),l(!0,m,f,e),a.animate(m));a.attr({visibility:g.visible?\"inherit\":\"hidden\"});a.addClass(g.getClassName(),\n!0)}else a&&(g.graphic=a.destroy())})};e.prototype.sortByAngle=function(b,d){b.sort(function(c,b){return\"undefined\"!==typeof c.angle&&(b.angle-c.angle)*d})};e.prototype.translate=function(b){this.generatePoints();var d=0,c=this.options,e=c.slicedOffset,a=e+(c.borderWidth||0),h=f(c.startAngle,c.endAngle),l=this.startAngleRad=h.start;h=(this.endAngleRad=h.end)-l;var n=this.points,q=c.dataLabels.distance;c=c.ignoreHiddenPoint;var v,w=n.length;b||(this.center=b=this.getCenter());for(v=0;v<w;v++){var x=\nn[v];var E=l+d*h;!x.isValid()||c&&!x.visible||(d+=x.percentage/100);var z=l+d*h;var B={x:b[0],y:b[1],r:b[2]/2,innerR:b[3]/2,start:Math.round(1E3*E)/1E3,end:Math.round(1E3*z)/1E3};x.shapeType=\"arc\";x.shapeArgs=B;x.labelDistance=D(x.options.dataLabels&&x.options.dataLabels.distance,q);x.labelDistance=u(x.labelDistance,B.r);this.maxLabelDistance=Math.max(this.maxLabelDistance||0,x.labelDistance);z=(z+E)/2;z>1.5*Math.PI?z-=2*Math.PI:z<-Math.PI/2&&(z+=2*Math.PI);x.slicedTranslation={translateX:Math.round(Math.cos(z)*\ne),translateY:Math.round(Math.sin(z)*e)};B=Math.cos(z)*b[2]/2;var t=Math.sin(z)*b[2]/2;x.tooltipPos=[b[0]+.7*B,b[1]+.7*t];x.half=z<-Math.PI/2||z>Math.PI/2?1:0;x.angle=z;E=Math.min(a,x.labelDistance/5);x.labelPosition={natural:{x:b[0]+B+Math.cos(z)*x.labelDistance,y:b[1]+t+Math.sin(z)*x.labelDistance},\"final\":{},alignment:0>x.labelDistance?\"center\":x.half?\"right\":\"left\",connectorPosition:{breakAt:{x:b[0]+B+Math.cos(z)*E,y:b[1]+t+Math.sin(z)*E},touchingSliceAt:{x:b[0]+B,y:b[1]+t}}}}k(this,\"afterTranslate\")};\ne.prototype.updateTotals=function(){var b,d=0,c=this.points,e=c.length,a=this.options.ignoreHiddenPoint;for(b=0;b<e;b++){var h=c[b];!h.isValid()||a&&!h.visible||(d+=h.y)}this.total=d;for(b=0;b<e;b++)h=c[b],h.percentage=0<d&&(h.visible||!a)?h.y/d*100:0,h.total=d};e.defaultOptions=l(C.defaultOptions,{center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{allowOverlap:!0,connectorPadding:5,connectorShape:\"fixedOffset\",crookDistance:\"70%\",distance:30,enabled:!0,formatter:function(){return this.point.isNull?\nvoid 0:this.point.name},softConnector:!0,x:0},fillColor:void 0,ignoreHiddenPoint:!0,inactiveOtherPoints:!0,legendType:\"point\",marker:null,size:null,showInLegend:!1,slicedOffset:10,stickyTracking:!1,tooltip:{followPointer:!0},borderColor:H.backgroundColor,borderWidth:1,lineWidth:void 0,states:{hover:{brightness:.1}}});return e}(C);q(w.prototype,{axisTypes:[],directTouch:!0,drawGraph:void 0,drawLegendSymbol:z.drawRectangle,drawTracker:b.prototype.drawTracker,getCenter:e.getCenter,getSymbol:I,isCartesian:!1,\nnoSharedTooltip:!0,pointAttribs:b.prototype.pointAttribs,pointClass:G,requireSorting:!1,searchPoint:I,trackerGroups:[\"group\",\"dataLabelsGroup\"]});B.registerSeriesType(\"pie\",w);\"\";return w});O(e,\"Core/Series/DataLabels.js\",[e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/FormatUtilities.js\"],e[\"Core/Globals.js\"],e[\"Core/Color/Palette.js\"],e[\"Core/Series/Series.js\"],e[\"Core/Series/SeriesRegistry.js\"],e[\"Core/Utilities.js\"]],function(e,b,I,z,H,G,C){var D=e.getDeferredAnimation,x=b.format;e=I.noop;\nG=G.seriesTypes;var w=C.arrayMax,v=C.clamp,f=C.defined,d=C.extend,q=C.fireEvent,k=C.isArray,l=C.merge,N=C.objectEach,u=C.pick,n=C.relativeLength,J=C.splat,E=C.stableSort;\"\";I.distribute=function(b,c,d){function a(a,c){return a.target-c.target}var e,g=!0,f=b,k=[];var l=0;var m=f.reducedLen||c;for(e=b.length;e--;)l+=b[e].size;if(l>m){E(b,function(a,c){return(c.rank||0)-(a.rank||0)});for(l=e=0;l<=m;)l+=b[e].size,e++;k=b.splice(e-1,b.length)}E(b,a);for(b=b.map(function(a){return{size:a.size,targets:[a.target],\nalign:u(a.align,.5)}});g;){for(e=b.length;e--;)g=b[e],l=(Math.min.apply(0,g.targets)+Math.max.apply(0,g.targets))/2,g.pos=v(l-g.size*g.align,0,c-g.size);e=b.length;for(g=!1;e--;)0<e&&b[e-1].pos+b[e-1].size>b[e].pos&&(b[e-1].size+=b[e].size,b[e-1].targets=b[e-1].targets.concat(b[e].targets),b[e-1].align=.5,b[e-1].pos+b[e-1].size>c&&(b[e-1].pos=c-b[e-1].size),b.splice(e,1),g=!0)}f.push.apply(f,k);e=0;b.some(function(a){var b=0;if(a.targets.some(function(){f[e].pos=a.pos+b;if(\"undefined\"!==typeof d&&\nMath.abs(f[e].pos-f[e].target)>d)return f.slice(0,e+1).forEach(function(a){delete a.pos}),f.reducedLen=(f.reducedLen||c)-.1*c,f.reducedLen>.1*c&&I.distribute(f,c,d),!0;b+=f[e].size;e++}))return!0});E(f,a)};H.prototype.drawDataLabels=function(){function b(a,c){var b=c.filter;return b?(c=b.operator,a=a[b.property],b=b.value,\">\"===c&&a>b||\"<\"===c&&a<b||\">=\"===c&&a>=b||\"<=\"===c&&a<=b||\"==\"===c&&a==b||\"===\"===c&&a===b?!0:!1):!0}function c(a,c){var b=[],d;if(k(a)&&!k(c))b=a.map(function(a){return l(a,c)});\nelse if(k(c)&&!k(a))b=c.map(function(c){return l(a,c)});else if(k(a)||k(c))for(d=Math.max(a.length,c.length);d--;)b[d]=l(a[d],c[d]);else b=l(a,c);return b}var d=this,a=d.chart,e=d.options,r=e.dataLabels,n=d.points,v,w=d.hasRendered||0,E=r.animation;E=r.defer?D(a,E,d):{defer:0,duration:0};var B=a.renderer;r=c(c(a.options.plotOptions&&a.options.plotOptions.series&&a.options.plotOptions.series.dataLabels,a.options.plotOptions&&a.options.plotOptions[d.type]&&a.options.plotOptions[d.type].dataLabels),\nr);q(this,\"drawDataLabels\");if(k(r)||r.enabled||d._hasPointLabels){var C=d.plotGroup(\"dataLabelsGroup\",\"data-labels\",w?\"inherit\":\"hidden\",r.zIndex||6);C.attr({opacity:+w});!w&&(w=d.dataLabelsGroup)&&(d.visible&&C.show(!0),w[e.animation?\"animate\":\"attr\"]({opacity:1},E));n.forEach(function(g){v=J(c(r,g.dlOptions||g.options&&g.options.dataLabels));v.forEach(function(c,h){var k=c.enabled&&(!g.isNull||g.dataLabelOnNull)&&b(g,c),l=g.dataLabels?g.dataLabels[h]:g.dataLabel,m=g.connectors?g.connectors[h]:\ng.connector,r=u(c.distance,g.labelDistance),n=!l;if(k){var q=g.getLabelConfig();var t=u(c[g.formatPrefix+\"Format\"],c.format);q=f(t)?x(t,q,a):(c[g.formatPrefix+\"Formatter\"]||c.formatter).call(q,c);t=c.style;var v=c.rotation;a.styledMode||(t.color=u(c.color,t.color,d.color,z.neutralColor100),\"contrast\"===t.color?(g.contrastColor=B.getContrast(g.color||d.color),t.color=!f(r)&&c.inside||0>r||e.stacking?g.contrastColor:z.neutralColor100):delete g.contrastColor,e.cursor&&(t.cursor=e.cursor));var w={r:c.borderRadius||\n0,rotation:v,padding:c.padding,zIndex:1};a.styledMode||(w.fill=c.backgroundColor,w.stroke=c.borderColor,w[\"stroke-width\"]=c.borderWidth);N(w,function(a,c){\"undefined\"===typeof a&&delete w[c]})}!l||k&&f(q)?k&&f(q)&&(l?w.text=q:(g.dataLabels=g.dataLabels||[],l=g.dataLabels[h]=v?B.text(q,0,-9999,c.useHTML).addClass(\"highcharts-data-label\"):B.label(q,0,-9999,c.shape,null,null,c.useHTML,null,\"data-label\"),h||(g.dataLabel=l),l.addClass(\" highcharts-data-label-color-\"+g.colorIndex+\" \"+(c.className||\"\")+\n(c.useHTML?\" highcharts-tracker\":\"\"))),l.options=c,l.attr(w),a.styledMode||l.css(t).shadow(c.shadow),l.added||l.add(C),c.textPath&&!c.useHTML&&(l.setTextPath(g.getDataLabelPath&&g.getDataLabelPath(l)||g.graphic,c.textPath),g.dataLabelPath&&!c.textPath.enabled&&(g.dataLabelPath=g.dataLabelPath.destroy())),d.alignDataLabel(g,l,c,null,n)):(g.dataLabel=g.dataLabel&&g.dataLabel.destroy(),g.dataLabels&&(1===g.dataLabels.length?delete g.dataLabels:delete g.dataLabels[h]),h||delete g.dataLabel,m&&(g.connector=\ng.connector.destroy(),g.connectors&&(1===g.connectors.length?delete g.connectors:delete g.connectors[h])))})})}q(this,\"afterDrawDataLabels\")};H.prototype.alignDataLabel=function(b,c,e,a,f){var g=this,h=this.chart,k=this.isCartesian&&h.inverted,l=this.enabledDataSorting,m=u(b.dlBox&&b.dlBox.centerX,b.plotX,-9999),n=u(b.plotY,-9999),q=c.getBBox(),v=e.rotation,w=e.align,t=h.isInsidePlot(m,Math.round(n),{inverted:k,paneCoordinates:!0,series:g}),p=\"justify\"===u(e.overflow,l?\"none\":\"justify\"),D=this.visible&&\n!1!==b.visible&&(b.series.forceDL||l&&!p||t||u(e.inside,!!this.options.stacking)&&a&&h.isInsidePlot(m,k?a.x+1:a.y+a.height-1,{inverted:k,paneCoordinates:!0,series:g}));var x=function(a){l&&g.xAxis&&!p&&g.setDataLabelStartPos(b,c,f,t,a)};if(D){var z=h.renderer.fontMetrics(h.styledMode?void 0:e.style.fontSize,c).b;a=d({x:k?this.yAxis.len-n:m,y:Math.round(k?this.xAxis.len-m:n),width:0,height:0},a);d(e,{width:q.width,height:q.height});v?(p=!1,m=h.renderer.rotCorr(z,v),m={x:a.x+(e.x||0)+a.width/2+m.x,\ny:a.y+(e.y||0)+{top:0,middle:.5,bottom:1}[e.verticalAlign]*a.height},x(m),c[f?\"attr\":\"animate\"](m).attr({align:w}),x=(v+720)%360,x=180<x&&360>x,\"left\"===w?m.y-=x?q.height:0:\"center\"===w?(m.x-=q.width/2,m.y-=q.height/2):\"right\"===w&&(m.x-=q.width,m.y-=x?0:q.height),c.placed=!0,c.alignAttr=m):(x(a),c.align(e,void 0,a),m=c.alignAttr);p&&0<=a.height?this.justifyDataLabel(c,e,m,q,a,f):u(e.crop,!0)&&(D=h.isInsidePlot(m.x,m.y,{paneCoordinates:!0,series:g})&&h.isInsidePlot(m.x+q.width,m.y+q.height,{paneCoordinates:!0,\nseries:g}));if(e.shape&&!v)c[f?\"attr\":\"animate\"]({anchorX:k?h.plotWidth-b.plotY:b.plotX,anchorY:k?h.plotHeight-b.plotX:b.plotY})}f&&l&&(c.placed=!1);D||l&&!p||(c.hide(!0),c.placed=!1)};H.prototype.setDataLabelStartPos=function(b,c,d,a,e){var g=this.chart,f=g.inverted,h=this.xAxis,k=h.reversed,l=f?c.height/2:c.width/2;b=(b=b.pointWidth)?b/2:0;h=f?e.x:k?-l-b:h.width-l+b;e=f?k?this.yAxis.height-l+b:-l-b:e.y;c.startXPos=h;c.startYPos=e;a?\"hidden\"===c.visibility&&(c.show(),c.attr({opacity:0}).animate({opacity:1})):\nc.attr({opacity:1}).animate({opacity:0},void 0,c.hide);g.hasRendered&&(d&&c.attr({x:c.startXPos,y:c.startYPos}),c.placed=!0)};H.prototype.justifyDataLabel=function(b,c,d,a,e,f){var g=this.chart,h=c.align,k=c.verticalAlign,l=b.box?0:b.padding||0,m=c.x;m=void 0===m?0:m;var n=c.y;var r=void 0===n?0:n;n=(d.x||0)+l;if(0>n){\"right\"===h&&0<=m?(c.align=\"left\",c.inside=!0):m-=n;var q=!0}n=(d.x||0)+a.width-l;n>g.plotWidth&&(\"left\"===h&&0>=m?(c.align=\"right\",c.inside=!0):m+=g.plotWidth-n,q=!0);n=d.y+l;0>n&&\n(\"bottom\"===k&&0<=r?(c.verticalAlign=\"top\",c.inside=!0):r-=n,q=!0);n=(d.y||0)+a.height-l;n>g.plotHeight&&(\"top\"===k&&0>=r?(c.verticalAlign=\"bottom\",c.inside=!0):r+=g.plotHeight-n,q=!0);q&&(c.x=m,c.y=r,b.placed=!f,b.align(c,void 0,e));return q};G.pie&&(G.pie.prototype.dataLabelPositioners={radialDistributionY:function(b){return b.top+b.distributeBox.pos},radialDistributionX:function(b,c,d,a){return b.getX(d<c.top+2||d>c.bottom-2?a:d,c.half,c)},justify:function(b,c,d){return d[0]+(b.half?-1:1)*(c+b.labelDistance)},\nalignToPlotEdges:function(b,c,d,a){b=b.getBBox().width;return c?b+a:d-b-a},alignToConnectors:function(b,c,d,a){var e=0,g;b.forEach(function(a){g=a.dataLabel.getBBox().width;g>e&&(e=g)});return c?e+a:d-e-a}},G.pie.prototype.drawDataLabels=function(){var b=this,c=b.data,d,a=b.chart,e=b.options.dataLabels||{},k=e.connectorPadding,n,q=a.plotWidth,v=a.plotHeight,x=a.plotLeft,D=Math.round(a.chartWidth/3),E,B=b.center,C=B[2]/2,t=B[1],p,G,J,N,F=[[],[]],O,K,T,X,U=[0,0,0,0],W=b.dataLabelPositioners,Y;b.visible&&\n(e.enabled||b._hasPointLabels)&&(c.forEach(function(a){a.dataLabel&&a.visible&&a.dataLabel.shortened&&(a.dataLabel.attr({width:\"auto\"}).css({width:\"auto\",textOverflow:\"clip\"}),a.dataLabel.shortened=!1)}),H.prototype.drawDataLabels.apply(b),c.forEach(function(a){a.dataLabel&&(a.visible?(F[a.half].push(a),a.dataLabel._pos=null,!f(e.style.width)&&!f(a.options.dataLabels&&a.options.dataLabels.style&&a.options.dataLabels.style.width)&&a.dataLabel.getBBox().width>D&&(a.dataLabel.css({width:Math.round(.7*\nD)+\"px\"}),a.dataLabel.shortened=!0)):(a.dataLabel=a.dataLabel.destroy(),a.dataLabels&&1===a.dataLabels.length&&delete a.dataLabels))}),F.forEach(function(c,g){var h=c.length,l=[],m;if(h){b.sortByAngle(c,g-.5);if(0<b.maxLabelDistance){var n=Math.max(0,t-C-b.maxLabelDistance);var r=Math.min(t+C+b.maxLabelDistance,a.plotHeight);c.forEach(function(b){0<b.labelDistance&&b.dataLabel&&(b.top=Math.max(0,t-C-b.labelDistance),b.bottom=Math.min(t+C+b.labelDistance,a.plotHeight),m=b.dataLabel.getBBox().height||\n21,b.distributeBox={target:b.labelPosition.natural.y-b.top+m/2,size:m,rank:b.y},l.push(b.distributeBox))});n=r+m-n;I.distribute(l,n,n/5)}for(X=0;X<h;X++){d=c[X];J=d.labelPosition;p=d.dataLabel;T=!1===d.visible?\"hidden\":\"inherit\";K=n=J.natural.y;l&&f(d.distributeBox)&&(\"undefined\"===typeof d.distributeBox.pos?T=\"hidden\":(N=d.distributeBox.size,K=W.radialDistributionY(d)));delete d.positionIndex;if(e.justify)O=W.justify(d,C,B);else switch(e.alignTo){case \"connectors\":O=W.alignToConnectors(c,g,q,x);\nbreak;case \"plotEdges\":O=W.alignToPlotEdges(p,g,q,x);break;default:O=W.radialDistributionX(b,d,K,n)}p._attr={visibility:T,align:J.alignment};Y=d.options.dataLabels||{};p._pos={x:O+u(Y.x,e.x)+({left:k,right:-k}[J.alignment]||0),y:K+u(Y.y,e.y)-10};J.final.x=O;J.final.y=K;u(e.crop,!0)&&(G=p.getBBox().width,n=null,O-G<k&&1===g?(n=Math.round(G-O+k),U[3]=Math.max(n,U[3])):O+G>q-k&&0===g&&(n=Math.round(O+G-q+k),U[1]=Math.max(n,U[1])),0>K-N/2?U[0]=Math.max(Math.round(-K+N/2),U[0]):K+N/2>v&&(U[2]=Math.max(Math.round(K+\nN/2-v),U[2])),p.sideOverflow=n)}}}),0===w(U)||this.verifyDataLabelOverflow(U))&&(this.placeDataLabels(),this.points.forEach(function(c){Y=l(e,c.options.dataLabels);if(n=u(Y.connectorWidth,1)){var d;E=c.connector;if((p=c.dataLabel)&&p._pos&&c.visible&&0<c.labelDistance){T=p._attr.visibility;if(d=!E)c.connector=E=a.renderer.path().addClass(\"highcharts-data-label-connector highcharts-color-\"+c.colorIndex+(c.className?\" \"+c.className:\"\")).add(b.dataLabelsGroup),a.styledMode||E.attr({\"stroke-width\":n,\nstroke:Y.connectorColor||c.color||z.neutralColor60});E[d?\"attr\":\"animate\"]({d:c.getConnectorPath()});E.attr(\"visibility\",T)}else E&&(c.connector=E.destroy())}}))},G.pie.prototype.placeDataLabels=function(){this.points.forEach(function(b){var c=b.dataLabel,d;c&&b.visible&&((d=c._pos)?(c.sideOverflow&&(c._attr.width=Math.max(c.getBBox().width-c.sideOverflow,0),c.css({width:c._attr.width+\"px\",textOverflow:(this.options.dataLabels.style||{}).textOverflow||\"ellipsis\"}),c.shortened=!0),c.attr(c._attr),\nc[c.moved?\"animate\":\"attr\"](d),c.moved=!0):c&&c.attr({y:-9999}));delete b.distributeBox},this)},G.pie.prototype.alignDataLabel=e,G.pie.prototype.verifyDataLabelOverflow=function(b){var c=this.center,d=this.options,a=d.center,e=d.minSize||80,f=null!==d.size;if(!f){if(null!==a[0])var k=Math.max(c[2]-Math.max(b[1],b[3]),e);else k=Math.max(c[2]-b[1]-b[3],e),c[0]+=(b[3]-b[1])/2;null!==a[1]?k=v(k,e,c[2]-Math.max(b[0],b[2])):(k=v(k,e,c[2]-b[0]-b[2]),c[1]+=(b[0]-b[2])/2);k<c[2]?(c[2]=k,c[3]=Math.min(n(d.innerSize||\n0,k),k),this.translate(c),this.drawDataLabels&&this.drawDataLabels()):f=!0}return f});G.column&&(G.column.prototype.alignDataLabel=function(b,c,d,a,e){var f=this.chart.inverted,g=b.series,h=b.dlBox||b.shapeArgs,k=u(b.below,b.plotY>u(this.translatedThreshold,g.yAxis.len)),m=u(d.inside,!!this.options.stacking);h&&(a=l(h),0>a.y&&(a.height+=a.y,a.y=0),h=a.y+a.height-g.yAxis.len,0<h&&h<a.height&&(a.height-=h),f&&(a={x:g.yAxis.len-a.y-a.height,y:g.xAxis.len-a.x-a.width,width:a.height,height:a.width}),m||\n(f?(a.x+=k?0:a.width,a.width=0):(a.y+=k?a.height:0,a.height=0)));d.align=u(d.align,!f||m?\"center\":k?\"right\":\"left\");d.verticalAlign=u(d.verticalAlign,f||m?\"middle\":k?\"top\":\"bottom\");H.prototype.alignDataLabel.call(this,b,c,d,a,e);d.inside&&b.contrastColor&&c.css({color:b.contrastColor})})});O(e,\"Extensions/OverlappingDataLabels.js\",[e[\"Core/Chart/Chart.js\"],e[\"Core/Utilities.js\"]],function(e,b){function D(b,e){var f=!1;if(b){var d=b.newOpacity;b.oldOpacity!==d&&(b.alignAttr&&b.placed?(b[d?\"removeClass\":\n\"addClass\"](\"highcharts-data-label-hidden\"),f=!0,b.alignAttr.opacity=d,b[b.isOld?\"animate\":\"attr\"](b.alignAttr,null,function(){e.styledMode||b.css({pointerEvents:d?\"auto\":\"none\"});b.visibility=d?\"inherit\":\"hidden\"}),H(e,\"afterHideOverlappingLabel\")):b.attr({opacity:d}));b.isOld=!0}return f}var z=b.addEvent,H=b.fireEvent,G=b.isArray,C=b.isNumber,B=b.objectEach,x=b.pick;z(e,\"render\",function(){var b=this,e=[];(this.labelCollectors||[]).forEach(function(b){e=e.concat(b())});(this.yAxis||[]).forEach(function(b){b.stacking&&\nb.options.stackLabels&&!b.options.stackLabels.allowOverlap&&B(b.stacking.stacks,function(b){B(b,function(b){e.push(b.label)})})});(this.series||[]).forEach(function(f){var d=f.options.dataLabels;f.visible&&(!1!==d.enabled||f._hasPointLabels)&&(d=function(d){return d.forEach(function(d){d.visible&&(G(d.dataLabels)?d.dataLabels:d.dataLabel?[d.dataLabel]:[]).forEach(function(f){var k=f.options;f.labelrank=x(k.labelrank,d.labelrank,d.shapeArgs&&d.shapeArgs.height);k.allowOverlap?(f.oldOpacity=f.opacity,\nf.newOpacity=1,D(f,b)):e.push(f)})})},d(f.nodes||[]),d(f.points))});this.hideOverlappingLabels(e)});e.prototype.hideOverlappingLabels=function(b){var e=this,f=b.length,d=e.renderer,q,k,l,w=!1;var u=function(b){var e,c=b.box?0:b.padding||0,f=e=0,a;if(b&&(!b.alignAttr||b.placed)){var h=b.alignAttr||{x:b.attr(\"x\"),y:b.attr(\"y\")};var k=b.parentGroup;b.width||(e=b.getBBox(),b.width=e.width,b.height=e.height,e=d.fontMetrics(null,b.element).h);var l=b.width-2*c;(a={left:\"0\",center:\"0.5\",right:\"1\"}[b.alignValue])?\nf=+a*l:C(b.x)&&Math.round(b.x)!==b.translateX&&(f=b.x-b.translateX);return{x:h.x+(k.translateX||0)+c-(f||0),y:h.y+(k.translateY||0)+c-e,width:b.width-2*c,height:b.height-2*c}}};for(k=0;k<f;k++)if(q=b[k])q.oldOpacity=q.opacity,q.newOpacity=1,q.absoluteBox=u(q);b.sort(function(b,d){return(d.labelrank||0)-(b.labelrank||0)});for(k=0;k<f;k++){var n=(u=b[k])&&u.absoluteBox;for(q=k+1;q<f;++q){var x=(l=b[q])&&l.absoluteBox;!n||!x||u===l||0===u.newOpacity||0===l.newOpacity||x.x>=n.x+n.width||x.x+x.width<=\nn.x||x.y>=n.y+n.height||x.y+x.height<=n.y||((u.labelrank<l.labelrank?u:l).newOpacity=0)}}b.forEach(function(b){D(b,e)&&(w=!0)});w&&H(e,\"afterHideAllOverlappingLabels\")}});O(e,\"Core/Responsive.js\",[e[\"Core/Chart/Chart.js\"],e[\"Core/Utilities.js\"]],function(e,b){var D=b.find,z=b.isArray,H=b.isObject,G=b.merge,C=b.objectEach,B=b.pick,x=b.splat,w=b.uniqueKey;e.prototype.setResponsive=function(b,e){var d=this.options.responsive,f=[],k=this.currentResponsive;!e&&d&&d.rules&&d.rules.forEach(function(b){\"undefined\"===\ntypeof b._id&&(b._id=w());this.matchResponsiveRule(b,f)},this);e=G.apply(0,f.map(function(b){return D(d.rules,function(d){return d._id===b}).chartOptions}));e.isResponsiveOptions=!0;f=f.toString()||void 0;f!==(k&&k.ruleIds)&&(k&&this.update(k.undoOptions,b,!0),f?(k=this.currentOptions(e),k.isResponsiveOptions=!0,this.currentResponsive={ruleIds:f,mergedOptions:e,undoOptions:k},this.update(e,b,!0)):this.currentResponsive=void 0)};e.prototype.matchResponsiveRule=function(b,e){var d=b.condition;(d.callback||\nfunction(){return this.chartWidth<=B(d.maxWidth,Number.MAX_VALUE)&&this.chartHeight<=B(d.maxHeight,Number.MAX_VALUE)&&this.chartWidth>=B(d.minWidth,0)&&this.chartHeight>=B(d.minHeight,0)}).call(this)&&e.push(b._id)};e.prototype.currentOptions=function(b){function e(b,f,q,u){var k;C(b,function(b,l){if(!u&&-1<d.collectionsWithUpdate.indexOf(l)&&f[l])for(b=x(b),q[l]=[],k=0;k<Math.max(b.length,f[l].length);k++)f[l][k]&&(void 0===b[k]?q[l][k]=f[l][k]:(q[l][k]={},e(b[k],f[l][k],q[l][k],u+1)));else H(b)?\n(q[l]=z(b)?[]:{},e(b,f[l]||{},q[l],u+1)):q[l]=\"undefined\"===typeof f[l]?null:f[l]})}var d=this,q={};e(b,this.options,q,0);return q}});O(e,\"masters/highcharts.src.js\",[e[\"Core/Globals.js\"],e[\"Core/Utilities.js\"],e[\"Core/Options.js\"],e[\"Core/Animation/Fx.js\"],e[\"Core/Animation/AnimationUtilities.js\"],e[\"Core/Renderer/HTML/AST.js\"],e[\"Core/FormatUtilities.js\"],e[\"Core/Renderer/SVG/SVGElement.js\"],e[\"Core/Series/Series.js\"]],function(e,b,I,z,H,G,C,B,x){e.animate=H.animate;e.animObject=H.animObject;e.getDeferredAnimation=\nH.getDeferredAnimation;e.setAnimation=H.setAnimation;e.stop=H.stop;e.timers=z.timers;e.AST=G;e.Fx=z;e.Series=x;e.SVGElement=B;e.dateFormat=C.dateFormat;e.format=C.format;e.numberFormat=C.numberFormat;e.defaultOptions=I.defaultOptions;e.getOptions=I.getOptions;e.time=I.defaultTime;e.setOptions=I.setOptions;e.addEvent=b.addEvent;e.arrayMax=b.arrayMax;e.arrayMin=b.arrayMin;e.attr=b.attr;e.clearTimeout=b.clearTimeout;e.correctFloat=b.correctFloat;e.createElement=b.createElement;e.css=b.css;e.defined=\nb.defined;e.destroyObjectProperties=b.destroyObjectProperties;e.discardElement=b.discardElement;e.erase=b.erase;e.error=b.error;e.extend=b.extend;e.extendClass=b.extendClass;e.find=b.find;e.fireEvent=b.fireEvent;e.getMagnitude=b.getMagnitude;e.getStyle=b.getStyle;e.inArray=b.inArray;e.isArray=b.isArray;e.isClass=b.isClass;e.isDOMElement=b.isDOMElement;e.isFunction=b.isFunction;e.isNumber=b.isNumber;e.isObject=b.isObject;e.isString=b.isString;e.keys=b.keys;e.merge=b.merge;e.normalizeTickInterval=b.normalizeTickInterval;\ne.objectEach=b.objectEach;e.offset=b.offset;e.pad=b.pad;e.pick=b.pick;e.pInt=b.pInt;e.relativeLength=b.relativeLength;e.removeEvent=b.removeEvent;e.splat=b.splat;e.stableSort=b.stableSort;e.syncTimeout=b.syncTimeout;e.timeUnits=b.timeUnits;e.uniqueKey=b.uniqueKey;e.useSerialIds=b.useSerialIds;e.wrap=b.wrap;return e});e[\"masters/highcharts.src.js\"]._modules=e;return e[\"masters/highcharts.src.js\"]});\n//# sourceMappingURL=highcharts.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2hpZ2hjaGFydHMvaGlnaGNoYXJ0cy5qcy5qcyIsInNvdXJjZXMiOlsiZmlsZTovL0M6L0NsaWNrVmlldyBQcm9qZWN0cy9AY2xpY2t2aWV3L25vZGVfbW9kdWxlcy9oaWdoY2hhcnRzL2hpZ2hjaGFydHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiBIaWdoY2hhcnRzIEpTIHY5LjEuMCAoMjAyMS0wNS0wMylcblxuIChjKSAyMDA5LTIwMjEgVG9yc3RlaW4gSG9uc2lcblxuIExpY2Vuc2U6IHd3dy5oaWdoY2hhcnRzLmNvbS9saWNlbnNlXG4qL1xuKGZ1bmN0aW9uKFcsTyl7XCJvYmplY3RcIj09PXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzPyhPW1wiZGVmYXVsdFwiXT1PLG1vZHVsZS5leHBvcnRzPVcuZG9jdW1lbnQ/TyhXKTpPKTpcImZ1bmN0aW9uXCI9PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShcImhpZ2hjaGFydHMvaGlnaGNoYXJ0c1wiLGZ1bmN0aW9uKCl7cmV0dXJuIE8oVyl9KTooVy5IaWdoY2hhcnRzJiZXLkhpZ2hjaGFydHMuZXJyb3IoMTYsITApLFcuSGlnaGNoYXJ0cz1PKFcpKX0pKFwidW5kZWZpbmVkXCIhPT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKFcpe2Z1bmN0aW9uIE8oRCxiLGUseil7RC5oYXNPd25Qcm9wZXJ0eShiKXx8KERbYl09ei5hcHBseShudWxsLGUpKX12YXIgZT17fTtPKGUsXCJDb3JlL0dsb2JhbHMuanNcIixbXSxmdW5jdGlvbigpe3ZhciBEPVwidW5kZWZpbmVkXCIhPT10eXBlb2YgVz9XOlwidW5kZWZpbmVkXCIhPT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSxiOyhmdW5jdGlvbihiKXtiLlNWR19OUz1cblwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtiLnByb2R1Y3Q9XCJIaWdoY2hhcnRzXCI7Yi52ZXJzaW9uPVwiOS4xLjBcIjtiLndpbj1EO2IuZG9jPWIud2luLmRvY3VtZW50O2Iuc3ZnPWIuZG9jJiZiLmRvYy5jcmVhdGVFbGVtZW50TlMmJiEhYi5kb2MuY3JlYXRlRWxlbWVudE5TKGIuU1ZHX05TLFwic3ZnXCIpLmNyZWF0ZVNWR1JlY3Q7Yi51c2VyQWdlbnQ9Yi53aW4ubmF2aWdhdG9yJiZiLndpbi5uYXZpZ2F0b3IudXNlckFnZW50fHxcIlwiO2IuaXNDaHJvbWU9LTEhPT1iLnVzZXJBZ2VudC5pbmRleE9mKFwiQ2hyb21lXCIpO2IuaXNGaXJlZm94PS0xIT09Yi51c2VyQWdlbnQuaW5kZXhPZihcIkZpcmVmb3hcIik7Yi5pc01TPS8oZWRnZXxtc2llfHRyaWRlbnQpL2kudGVzdChiLnVzZXJBZ2VudCkmJiFiLndpbi5vcGVyYTtiLmlzU2FmYXJpPSFiLmlzQ2hyb21lJiYtMSE9PWIudXNlckFnZW50LmluZGV4T2YoXCJTYWZhcmlcIik7Yi5pc1RvdWNoRGV2aWNlPS8oTW9iaWxlfEFuZHJvaWR8V2luZG93cyBQaG9uZSkvLnRlc3QoYi51c2VyQWdlbnQpO1xuYi5pc1dlYktpdD0tMSE9PWIudXNlckFnZW50LmluZGV4T2YoXCJBcHBsZVdlYktpdFwiKTtiLmRlZzJyYWQ9MipNYXRoLlBJLzM2MDtiLmhhc0JpZGlCdWc9Yi5pc0ZpcmVmb3gmJjQ+cGFyc2VJbnQoYi51c2VyQWdlbnQuc3BsaXQoXCJGaXJlZm94L1wiKVsxXSwxMCk7Yi5oYXNUb3VjaD0hIWIud2luLlRvdWNoRXZlbnQ7Yi5tYXJnaW5OYW1lcz1bXCJwbG90VG9wXCIsXCJtYXJnaW5SaWdodFwiLFwibWFyZ2luQm90dG9tXCIsXCJwbG90TGVmdFwiXTtiLm5vb3A9ZnVuY3Rpb24oKXt9O2Iuc3VwcG9ydHNQYXNzaXZlRXZlbnRzPWZ1bmN0aW9uKCl7dmFyIEQ9ITE7aWYoIWIuaXNNUyl7dmFyIGU9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwicGFzc2l2ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtEPSEwfX0pO2Iud2luLmFkZEV2ZW50TGlzdGVuZXImJmIud2luLnJlbW92ZUV2ZW50TGlzdGVuZXImJihiLndpbi5hZGRFdmVudExpc3RlbmVyKFwidGVzdFBhc3NpdmVcIixiLm5vb3AsZSksYi53aW4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRlc3RQYXNzaXZlXCIsXG5iLm5vb3AsZSkpfXJldHVybiBEfSgpO2IuY2hhcnRzPVtdO2IuZGF0ZUZvcm1hdHM9e307Yi5zZXJpZXNUeXBlcz17fTtiLnN5bWJvbFNpemVzPXt9fSkoYnx8KGI9e30pKTtyZXR1cm4gYn0pO08oZSxcIkNvcmUvVXRpbGl0aWVzLmpzXCIsW2VbXCJDb3JlL0dsb2JhbHMuanNcIl1dLGZ1bmN0aW9uKEQpe2Z1bmN0aW9uIGIoYSxjLGgscil7dmFyIHk9Yz9cIkhpZ2hjaGFydHMgZXJyb3JcIjpcIkhpZ2hjaGFydHMgd2FybmluZ1wiOzMyPT09YSYmKGE9eStcIjogRGVwcmVjYXRlZCBtZW1iZXJcIik7dmFyIGQ9dyhhKSxNPWQ/eStcIiAjXCIrYStcIjogd3d3LmhpZ2hjaGFydHMuY29tL2Vycm9ycy9cIithK1wiL1wiOmEudG9TdHJpbmcoKTtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIHIpe3ZhciB0PVwiXCI7ZCYmKE0rPVwiP1wiKTtuKHIsZnVuY3Rpb24ocCxhKXt0Kz1cIlxcbiAtIFwiK2ErXCI6IFwiK3A7ZCYmKE0rPWVuY29kZVVSSShhKStcIj1cIitlbmNvZGVVUkkocCkpfSk7TSs9dH1FKEhpZ2hjaGFydHMsXCJkaXNwbGF5RXJyb3JcIixcbntjaGFydDpoLGNvZGU6YSxtZXNzYWdlOk0scGFyYW1zOnJ9LGZ1bmN0aW9uKCl7aWYoYyl0aHJvdyBFcnJvcihNKTtnLmNvbnNvbGUmJi0xPT09Yi5tZXNzYWdlcy5pbmRleE9mKE0pJiZjb25zb2xlLndhcm4oTSl9KTtiLm1lc3NhZ2VzLnB1c2goTSl9ZnVuY3Rpb24gZShhLGMpe3ZhciB5PXt9O24oYSxmdW5jdGlvbihnLGgpe2lmKEMoYVtoXSwhMCkmJiFhLm5vZGVUeXBlJiZjW2hdKWc9ZShhW2hdLGNbaF0pLE9iamVjdC5rZXlzKGcpLmxlbmd0aCYmKHlbaF09Zyk7ZWxzZSBpZihDKGFbaF0pfHxhW2hdIT09Y1toXSl5W2hdPWFbaF19KTtyZXR1cm4geX1mdW5jdGlvbiB6KGEsYyl7cmV0dXJuIHBhcnNlSW50KGEsY3x8MTApfWZ1bmN0aW9uIEgoYSl7cmV0dXJuXCJzdHJpbmdcIj09PXR5cGVvZiBhfWZ1bmN0aW9uIEcoYSl7YT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSk7cmV0dXJuXCJbb2JqZWN0IEFycmF5XVwiPT09YXx8XCJbb2JqZWN0IEFycmF5IEl0ZXJhdG9yXVwiPT09XG5hfWZ1bmN0aW9uIEMoYSxjKXtyZXR1cm4hIWEmJlwib2JqZWN0XCI9PT10eXBlb2YgYSYmKCFjfHwhRyhhKSl9ZnVuY3Rpb24gQihhKXtyZXR1cm4gQyhhKSYmXCJudW1iZXJcIj09PXR5cGVvZiBhLm5vZGVUeXBlfWZ1bmN0aW9uIHgoYSl7dmFyIGM9YSYmYS5jb25zdHJ1Y3RvcjtyZXR1cm4hKCFDKGEsITApfHxCKGEpfHwhY3x8IWMubmFtZXx8XCJPYmplY3RcIj09PWMubmFtZSl9ZnVuY3Rpb24gdyhhKXtyZXR1cm5cIm51bWJlclwiPT09dHlwZW9mIGEmJiFpc05hTihhKSYmSW5maW5pdHk+YSYmLUluZmluaXR5PGF9ZnVuY3Rpb24gdihhKXtyZXR1cm5cInVuZGVmaW5lZFwiIT09dHlwZW9mIGEmJm51bGwhPT1hfWZ1bmN0aW9uIGYoYSxjLGcpe3ZhciB5O0goYyk/dihnKT9hLnNldEF0dHJpYnV0ZShjLGcpOmEmJmEuZ2V0QXR0cmlidXRlJiYoKHk9YS5nZXRBdHRyaWJ1dGUoYykpfHxcImNsYXNzXCIhPT1jfHwoeT1hLmdldEF0dHJpYnV0ZShjK1wiTmFtZVwiKSkpOm4oYyxmdW5jdGlvbihjLHkpe2Euc2V0QXR0cmlidXRlKHksXG5jKX0pO3JldHVybiB5fWZ1bmN0aW9uIGQoYSxjKXt2YXIgeTthfHwoYT17fSk7Zm9yKHkgaW4gYylhW3ldPWNbeV07cmV0dXJuIGF9ZnVuY3Rpb24gcSgpe2Zvcih2YXIgYT1hcmd1bWVudHMsYz1hLmxlbmd0aCxnPTA7ZzxjO2crKyl7dmFyIGg9YVtnXTtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIGgmJm51bGwhPT1oKXJldHVybiBofX1mdW5jdGlvbiBrKGEsYyl7RC5pc01TJiYhRC5zdmcmJmMmJlwidW5kZWZpbmVkXCIhPT10eXBlb2YgYy5vcGFjaXR5JiYoYy5maWx0ZXI9XCJhbHBoYShvcGFjaXR5PVwiKzEwMCpjLm9wYWNpdHkrXCIpXCIpO2QoYS5zdHlsZSxjKX1mdW5jdGlvbiBsKGEsZyxoLHIsbSl7YT1jLmNyZWF0ZUVsZW1lbnQoYSk7ZyYmZChhLGcpO20mJmsoYSx7cGFkZGluZzpcIjBcIixib3JkZXI6XCJub25lXCIsbWFyZ2luOlwiMFwifSk7aCYmayhhLGgpO3ImJnIuYXBwZW5kQ2hpbGQoYSk7cmV0dXJuIGF9ZnVuY3Rpb24gTihhLGMpe3JldHVybiBwYXJzZUZsb2F0KGEudG9QcmVjaXNpb24oY3x8XG4xNCkpfWZ1bmN0aW9uIHUoYSxjLGgpe3ZhciB5PUQuZ2V0U3R5bGV8fHU7aWYoXCJ3aWR0aFwiPT09YylyZXR1cm4gYz1NYXRoLm1pbihhLm9mZnNldFdpZHRoLGEuc2Nyb2xsV2lkdGgpLGg9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QmJmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgsaDxjJiZoPj1jLTEmJihjPU1hdGguZmxvb3IoaCkpLE1hdGgubWF4KDAsYy0oeShhLFwicGFkZGluZy1sZWZ0XCIsITApfHwwKS0oeShhLFwicGFkZGluZy1yaWdodFwiLCEwKXx8MCkpO2lmKFwiaGVpZ2h0XCI9PT1jKXJldHVybiBNYXRoLm1heCgwLE1hdGgubWluKGEub2Zmc2V0SGVpZ2h0LGEuc2Nyb2xsSGVpZ2h0KS0oeShhLFwicGFkZGluZy10b3BcIiwhMCl8fDApLSh5KGEsXCJwYWRkaW5nLWJvdHRvbVwiLCEwKXx8MCkpO2cuZ2V0Q29tcHV0ZWRTdHlsZXx8YigyNywhMCk7aWYoYT1nLmdldENvbXB1dGVkU3R5bGUoYSx2b2lkIDApKXt2YXIgcj1hLmdldFByb3BlcnR5VmFsdWUoYyk7cShoLFwib3BhY2l0eVwiIT09XG5jKSYmKHI9eihyKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gbihhLGMsZyl7Zm9yKHZhciBoIGluIGEpT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoYSxoKSYmYy5jYWxsKGd8fGFbaF0sYVtoXSxoLGEpfWZ1bmN0aW9uIEooYSxjLGcpe2Z1bmN0aW9uIGgodCxwKXt2YXIgYz1hLnJlbW92ZUV2ZW50TGlzdGVuZXJ8fEQucmVtb3ZlRXZlbnRMaXN0ZW5lclBvbHlmaWxsO2MmJmMuY2FsbChhLHQscCwhMSl9ZnVuY3Rpb24geSh0KXt2YXIgcDtpZihhLm5vZGVOYW1lKXtpZihjKXt2YXIgZz17fTtnW2NdPSEwfWVsc2UgZz10O24oZyxmdW5jdGlvbihhLGMpe2lmKHRbY10pZm9yKHA9dFtjXS5sZW5ndGg7cC0tOyloKGMsdFtjXVtwXS5mbil9KX19dmFyIHI9XCJmdW5jdGlvblwiPT09dHlwZW9mIGEmJmEucHJvdG90eXBlfHxhO2lmKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsXCJoY0V2ZW50c1wiKSl7dmFyIE09ci5oY0V2ZW50cztjPyhyPU1bY118fFtdLGc/KE1bY109ci5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIGchPT1cbmEuZm59KSxoKGMsZykpOih5KE0pLE1bY109W10pKTooeShNKSxkZWxldGUgci5oY0V2ZW50cyl9fWZ1bmN0aW9uIEUoYSxnLGgscil7aD1ofHx7fTtpZihjLmNyZWF0ZUV2ZW50JiYoYS5kaXNwYXRjaEV2ZW50fHxhLmZpcmVFdmVudCYmYSE9PUQpKXt2YXIgeT1jLmNyZWF0ZUV2ZW50KFwiRXZlbnRzXCIpO3kuaW5pdEV2ZW50KGcsITAsITApO2g9ZCh5LGgpO2EuZGlzcGF0Y2hFdmVudD9hLmRpc3BhdGNoRXZlbnQoaCk6YS5maXJlRXZlbnQoZyxoKX1lbHNlIGlmKGEuaGNFdmVudHMpe2gudGFyZ2V0fHxkKGgse3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7aC5kZWZhdWx0UHJldmVudGVkPSEwfSx0YXJnZXQ6YSx0eXBlOmd9KTt5PVtdO2Zvcih2YXIgbT1hLE09ITE7bS5oY0V2ZW50czspT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobSxcImhjRXZlbnRzXCIpJiZtLmhjRXZlbnRzW2ddJiYoeS5sZW5ndGgmJihNPSEwKSx5LnVuc2hpZnQuYXBwbHkoeSxtLmhjRXZlbnRzW2ddKSksbT1cbk9iamVjdC5nZXRQcm90b3R5cGVPZihtKTtNJiZ5LnNvcnQoZnVuY3Rpb24oYSxwKXtyZXR1cm4gYS5vcmRlci1wLm9yZGVyfSk7eS5mb3JFYWNoKGZ1bmN0aW9uKHQpeyExPT09dC5mbi5jYWxsKGEsaCkmJmgucHJldmVudERlZmF1bHQoKX0pfXImJiFoLmRlZmF1bHRQcmV2ZW50ZWQmJnIuY2FsbChhLGgpfXZhciBtPUQuY2hhcnRzLGM9RC5kb2MsZz1ELndpbjtcIlwiOyhifHwoYj17fSkpLm1lc3NhZ2VzPVtdO3ZhciBhO01hdGguZWFzZUluT3V0U2luZT1mdW5jdGlvbihhKXtyZXR1cm4tLjUqKE1hdGguY29zKE1hdGguUEkqYSktMSl9O3ZhciBoPUFycmF5LnByb3RvdHlwZS5maW5kP2Z1bmN0aW9uKGEsYyl7cmV0dXJuIGEuZmluZChjKX06ZnVuY3Rpb24oYSxjKXt2YXIgZyxoPWEubGVuZ3RoO2ZvcihnPTA7ZzxoO2crKylpZihjKGFbZ10sZykpcmV0dXJuIGFbZ119O24oe21hcDpcIm1hcFwiLGVhY2g6XCJmb3JFYWNoXCIsZ3JlcDpcImZpbHRlclwiLHJlZHVjZTpcInJlZHVjZVwiLHNvbWU6XCJzb21lXCJ9LFxuZnVuY3Rpb24oYSxjKXtEW2NdPWZ1bmN0aW9uKGcpe3ZhciBoO2IoMzIsITEsdm9pZCAwLChoPXt9LGhbXCJIaWdoY2hhcnRzLlwiK2NdPVwidXNlIEFycmF5LlwiK2EsaCkpO3JldHVybiBBcnJheS5wcm90b3R5cGVbYV0uYXBwbHkoZyxbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSl9fSk7dmFyIHIsQT1mdW5jdGlvbigpe3ZhciBhPU1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLDkpK1wiLVwiLGM9MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm5cImhpZ2hjaGFydHMtXCIrKHI/XCJcIjphKStjKyt9fSgpO2cualF1ZXJ5JiYoZy5qUXVlcnkuZm4uaGlnaGNoYXJ0cz1mdW5jdGlvbigpe3ZhciBhPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtpZih0aGlzWzBdKXJldHVybiBhWzBdPyhuZXcgKERbSChhWzBdKT9hLnNoaWZ0KCk6XCJDaGFydFwiXSkodGhpc1swXSxhWzBdLGFbMV0pLHRoaXMpOm1bZih0aGlzWzBdLFwiZGF0YS1oaWdoY2hhcnRzLWNoYXJ0XCIpXX0pO3JldHVybnthZGRFdmVudDpmdW5jdGlvbihhLFxuYyxnLGgpe3ZvaWQgMD09PWgmJihoPXt9KTt2YXIgcj1cImZ1bmN0aW9uXCI9PT10eXBlb2YgYSYmYS5wcm90b3R5cGV8fGE7T2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwocixcImhjRXZlbnRzXCIpfHwoci5oY0V2ZW50cz17fSk7cj1yLmhjRXZlbnRzO0QuUG9pbnQmJmEgaW5zdGFuY2VvZiBELlBvaW50JiZhLnNlcmllcyYmYS5zZXJpZXMuY2hhcnQmJihhLnNlcmllcy5jaGFydC5ydW5UcmFja2VyQ2xpY2s9ITApO3ZhciB5PWEuYWRkRXZlbnRMaXN0ZW5lcnx8RC5hZGRFdmVudExpc3RlbmVyUG9seWZpbGw7eSYmeS5jYWxsKGEsYyxnLEQuc3VwcG9ydHNQYXNzaXZlRXZlbnRzP3twYXNzaXZlOnZvaWQgMD09PWgucGFzc2l2ZT8tMSE9PWMuaW5kZXhPZihcInRvdWNoXCIpOmgucGFzc2l2ZSxjYXB0dXJlOiExfTohMSk7cltjXXx8KHJbY109W10pO3JbY10ucHVzaCh7Zm46ZyxvcmRlcjpcIm51bWJlclwiPT09dHlwZW9mIGgub3JkZXI/aC5vcmRlcjpJbmZpbml0eX0pO3JbY10uc29ydChmdW5jdGlvbihhLFxudCl7cmV0dXJuIGEub3JkZXItdC5vcmRlcn0pO3JldHVybiBmdW5jdGlvbigpe0ooYSxjLGcpfX0sYXJyYXlNYXg6ZnVuY3Rpb24oYSl7Zm9yKHZhciBjPWEubGVuZ3RoLGc9YVswXTtjLS07KWFbY10+ZyYmKGc9YVtjXSk7cmV0dXJuIGd9LGFycmF5TWluOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYz1hLmxlbmd0aCxnPWFbMF07Yy0tOylhW2NdPGcmJihnPWFbY10pO3JldHVybiBnfSxhdHRyOmYsY2xhbXA6ZnVuY3Rpb24oYSxjLGcpe3JldHVybiBhPmM/YTxnP2E6ZzpjfSxjbGVhblJlY3Vyc2l2ZWx5OmUsY2xlYXJUaW1lb3V0OmZ1bmN0aW9uKGEpe3YoYSkmJmNsZWFyVGltZW91dChhKX0sY29ycmVjdEZsb2F0Ok4sY3JlYXRlRWxlbWVudDpsLGNzczprLGRlZmluZWQ6dixkZXN0cm95T2JqZWN0UHJvcGVydGllczpmdW5jdGlvbihhLGMpe24oYSxmdW5jdGlvbihnLGgpe2cmJmchPT1jJiZnLmRlc3Ryb3kmJmcuZGVzdHJveSgpO2RlbGV0ZSBhW2hdfSl9LGRpc2NhcmRFbGVtZW50OmZ1bmN0aW9uKGMpe2F8fFxuKGE9bChcImRpdlwiKSk7YyYmYS5hcHBlbmRDaGlsZChjKTthLmlubmVySFRNTD1cIlwifSxlcmFzZTpmdW5jdGlvbihhLGMpe2Zvcih2YXIgZz1hLmxlbmd0aDtnLS07KWlmKGFbZ109PT1jKXthLnNwbGljZShnLDEpO2JyZWFrfX0sZXJyb3I6YixleHRlbmQ6ZCxleHRlbmRDbGFzczpmdW5jdGlvbihhLGMpe3ZhciBnPWZ1bmN0aW9uKCl7fTtnLnByb3RvdHlwZT1uZXcgYTtkKGcucHJvdG90eXBlLGMpO3JldHVybiBnfSxmaW5kOmgsZmlyZUV2ZW50OkUsZ2V0TWFnbml0dWRlOmZ1bmN0aW9uKGEpe3JldHVybiBNYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGEpL01hdGguTE4xMCkpfSxnZXROZXN0ZWRQcm9wZXJ0eTpmdW5jdGlvbihhLGMpe2ZvcihhPWEuc3BsaXQoXCIuXCIpO2EubGVuZ3RoJiZ2KGMpOyl7dmFyIGg9YS5zaGlmdCgpO2lmKFwidW5kZWZpbmVkXCI9PT10eXBlb2YgaHx8XCJfX3Byb3RvX19cIj09PWgpcmV0dXJuO2M9Y1toXTtpZighdihjKXx8XCJmdW5jdGlvblwiPT09dHlwZW9mIGN8fFxuXCJudW1iZXJcIj09PXR5cGVvZiBjLm5vZGVUeXBlfHxjPT09ZylyZXR1cm59cmV0dXJuIGN9LGdldFN0eWxlOnUsaW5BcnJheTpmdW5jdGlvbihhLGMsZyl7YigzMiwhMSx2b2lkIDAse1wiSGlnaGNoYXJ0cy5pbkFycmF5XCI6XCJ1c2UgQXJyYXkuaW5kZXhPZlwifSk7cmV0dXJuIGMuaW5kZXhPZihhLGcpfSxpc0FycmF5OkcsaXNDbGFzczp4LGlzRE9NRWxlbWVudDpCLGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuXCJmdW5jdGlvblwiPT09dHlwZW9mIGF9LGlzTnVtYmVyOncsaXNPYmplY3Q6Qyxpc1N0cmluZzpILGtleXM6ZnVuY3Rpb24oYSl7YigzMiwhMSx2b2lkIDAse1wiSGlnaGNoYXJ0cy5rZXlzXCI6XCJ1c2UgT2JqZWN0LmtleXNcIn0pO3JldHVybiBPYmplY3Qua2V5cyhhKX0sbWVyZ2U6ZnVuY3Rpb24oKXt2YXIgYSxjPWFyZ3VtZW50cyxnPXt9LGg9ZnVuY3Rpb24oYSxjKXtcIm9iamVjdFwiIT09dHlwZW9mIGEmJihhPXt9KTtuKGMsZnVuY3Rpb24odCxwKXtcIl9fcHJvdG9fX1wiIT09cCYmXG5cImNvbnN0cnVjdG9yXCIhPT1wJiYoIUModCwhMCl8fHgodCl8fEIodCk/YVtwXT1jW3BdOmFbcF09aChhW3BdfHx7fSx0KSl9KTtyZXR1cm4gYX07ITA9PT1jWzBdJiYoZz1jWzFdLGM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYywyKSk7dmFyIHI9Yy5sZW5ndGg7Zm9yKGE9MDthPHI7YSsrKWc9aChnLGNbYV0pO3JldHVybiBnfSxub3JtYWxpemVUaWNrSW50ZXJ2YWw6ZnVuY3Rpb24oYSxjLGcsaCxyKXt2YXIgZD1hO2c9cShnLDEpO3ZhciBNPWEvZztjfHwoYz1yP1sxLDEuMiwxLjUsMiwyLjUsMyw0LDUsNiw4LDEwXTpbMSwyLDIuNSw1LDEwXSwhMT09PWgmJigxPT09Zz9jPWMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiAwPT09YSUxfSk6LjE+PWcmJihjPVsxL2ddKSkpO2ZvcihoPTA7aDxjLmxlbmd0aCYmIShkPWNbaF0sciYmZCpnPj1hfHwhciYmTTw9KGNbaF0rKGNbaCsxXXx8Y1toXSkpLzIpO2grKyk7cmV0dXJuIGQ9TihkKmcsLU1hdGgucm91bmQoTWF0aC5sb2coLjAwMSkvXG5NYXRoLkxOMTApKX0sb2JqZWN0RWFjaDpuLG9mZnNldDpmdW5jdGlvbihhKXt2YXIgaD1jLmRvY3VtZW50RWxlbWVudDthPWEucGFyZW50RWxlbWVudHx8YS5wYXJlbnROb2RlP2EuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6e3RvcDowLGxlZnQ6MCx3aWR0aDowLGhlaWdodDowfTtyZXR1cm57dG9wOmEudG9wKyhnLnBhZ2VZT2Zmc2V0fHxoLnNjcm9sbFRvcCktKGguY2xpZW50VG9wfHwwKSxsZWZ0OmEubGVmdCsoZy5wYWdlWE9mZnNldHx8aC5zY3JvbGxMZWZ0KS0oaC5jbGllbnRMZWZ0fHwwKSx3aWR0aDphLndpZHRoLGhlaWdodDphLmhlaWdodH19LHBhZDpmdW5jdGlvbihhLGMsZyl7cmV0dXJuIEFycmF5KChjfHwyKSsxLVN0cmluZyhhKS5yZXBsYWNlKFwiLVwiLFwiXCIpLmxlbmd0aCkuam9pbihnfHxcIjBcIikrYX0scGljazpxLHBJbnQ6eixyZWxhdGl2ZUxlbmd0aDpmdW5jdGlvbihhLGMsZyl7cmV0dXJuLyUkLy50ZXN0KGEpP2MqcGFyc2VGbG9hdChhKS8xMDArKGd8fDApOnBhcnNlRmxvYXQoYSl9LFxucmVtb3ZlRXZlbnQ6SixzcGxhdDpmdW5jdGlvbihhKXtyZXR1cm4gRyhhKT9hOlthXX0sc3RhYmxlU29ydDpmdW5jdGlvbihhLGMpe3ZhciBnPWEubGVuZ3RoLGgscjtmb3Iocj0wO3I8ZztyKyspYVtyXS5zYWZlST1yO2Euc29ydChmdW5jdGlvbihhLGcpe2g9YyhhLGcpO3JldHVybiAwPT09aD9hLnNhZmVJLWcuc2FmZUk6aH0pO2ZvcihyPTA7cjxnO3IrKylkZWxldGUgYVtyXS5zYWZlSX0sc3luY1RpbWVvdXQ6ZnVuY3Rpb24oYSxjLGcpe2lmKDA8YylyZXR1cm4gc2V0VGltZW91dChhLGMsZyk7YS5jYWxsKDAsZyk7cmV0dXJuLTF9LHRpbWVVbml0czp7bWlsbGlzZWNvbmQ6MSxzZWNvbmQ6MUUzLG1pbnV0ZTo2RTQsaG91cjozNkU1LGRheTo4NjRFNSx3ZWVrOjYwNDhFNSxtb250aDoyNDE5MkU1LHllYXI6MzE0NDk2RTV9LHVuaXF1ZUtleTpBLHVzZVNlcmlhbElkczpmdW5jdGlvbihhKXtyZXR1cm4gcj1xKGEscil9LHdyYXA6ZnVuY3Rpb24oYSxjLGcpe3ZhciBoPWFbY107YVtjXT1cbmZ1bmN0aW9uKCl7dmFyIGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxjPWFyZ3VtZW50cyxyPXRoaXM7ci5wcm9jZWVkPWZ1bmN0aW9uKCl7aC5hcHBseShyLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzOmMpfTthLnVuc2hpZnQoaCk7YT1nLmFwcGx5KHRoaXMsYSk7ci5wcm9jZWVkPW51bGw7cmV0dXJuIGF9fX19KTtPKGUsXCJDb3JlL0NvbG9yL0NvbG9yLmpzXCIsW2VbXCJDb3JlL0dsb2JhbHMuanNcIl0sZVtcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihELGIpe3ZhciBlPWIuaXNOdW1iZXIsej1iLm1lcmdlLEg9Yi5wSW50O1wiXCI7Yj1mdW5jdGlvbigpe2Z1bmN0aW9uIGIoZSl7dGhpcy5wYXJzZXJzPVt7cmVnZXg6L3JnYmFcXChcXHMqKFswLTldezEsM30pXFxzKixcXHMqKFswLTldezEsM30pXFxzKixcXHMqKFswLTldezEsM30pXFxzKixcXHMqKFswLTldPyg/OlxcLlswLTldKyk/KVxccypcXCkvLHBhcnNlOmZ1bmN0aW9uKGIpe3JldHVybltIKGJbMV0pLEgoYlsyXSksXG5IKGJbM10pLHBhcnNlRmxvYXQoYls0XSwxMCldfX0se3JlZ2V4Oi9yZ2JcXChcXHMqKFswLTldezEsM30pXFxzKixcXHMqKFswLTldezEsM30pXFxzKixcXHMqKFswLTldezEsM30pXFxzKlxcKS8scGFyc2U6ZnVuY3Rpb24oYil7cmV0dXJuW0goYlsxXSksSChiWzJdKSxIKGJbM10pLDFdfX1dO3RoaXMucmdiYT1bXTtpZihELkNvbG9yIT09YilyZXR1cm4gbmV3IEQuQ29sb3IoZSk7aWYoISh0aGlzIGluc3RhbmNlb2YgYikpcmV0dXJuIG5ldyBiKGUpO3RoaXMuaW5pdChlKX1iLnBhcnNlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgYihlKX07Yi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihlKXt2YXIgQix4O2lmKCh0aGlzLmlucHV0PWU9Yi5uYW1lc1tlJiZlLnRvTG93ZXJDYXNlP2UudG9Mb3dlckNhc2UoKTpcIlwiXXx8ZSkmJmUuc3RvcHMpdGhpcy5zdG9wcz1lLnN0b3BzLm1hcChmdW5jdGlvbihmKXtyZXR1cm4gbmV3IGIoZlsxXSl9KTtlbHNle2lmKGUmJmUuY2hhckF0JiZcIiNcIj09PWUuY2hhckF0KCkpe3ZhciB3PVxuZS5sZW5ndGg7ZT1wYXJzZUludChlLnN1YnN0cigxKSwxNik7Nz09PXc/Qj1bKGUmMTY3MTE2ODApPj4xNiwoZSY2NTI4MCk+PjgsZSYyNTUsMV06ND09PXcmJihCPVsoZSYzODQwKT4+NHwoZSYzODQwKT4+OCwoZSYyNDApPj40fGUmMjQwLChlJjE1KTw8NHxlJjE1LDFdKX1pZighQilmb3IoeD10aGlzLnBhcnNlcnMubGVuZ3RoO3gtLSYmIUI7KXt2YXIgdj10aGlzLnBhcnNlcnNbeF07KHc9di5yZWdleC5leGVjKGUpKSYmKEI9di5wYXJzZSh3KSl9fXRoaXMucmdiYT1CfHxbXX07Yi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGIpe3ZhciBCPXRoaXMuaW5wdXQseD10aGlzLnJnYmE7aWYoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiB0aGlzLnN0b3BzKXt2YXIgdz16KEIpO3cuc3RvcHM9W10uY29uY2F0KHcuc3RvcHMpO3RoaXMuc3RvcHMuZm9yRWFjaChmdW5jdGlvbih2LGYpe3cuc3RvcHNbZl09W3cuc3RvcHNbZl1bMF0sdi5nZXQoYildfSl9ZWxzZSB3PXgmJmUoeFswXSk/XCJyZ2JcIj09PVxuYnx8IWImJjE9PT14WzNdP1wicmdiKFwiK3hbMF0rXCIsXCIreFsxXStcIixcIit4WzJdK1wiKVwiOlwiYVwiPT09Yj94WzNdOlwicmdiYShcIit4LmpvaW4oXCIsXCIpK1wiKVwiOkI7cmV0dXJuIHd9O2IucHJvdG90eXBlLmJyaWdodGVuPWZ1bmN0aW9uKGIpe3ZhciBCLHg9dGhpcy5yZ2JhO2lmKHRoaXMuc3RvcHMpdGhpcy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKHcpe3cuYnJpZ2h0ZW4oYil9KTtlbHNlIGlmKGUoYikmJjAhPT1iKWZvcihCPTA7Mz5CO0IrKyl4W0JdKz1IKDI1NSpiKSwwPnhbQl0mJih4W0JdPTApLDI1NTx4W0JdJiYoeFtCXT0yNTUpO3JldHVybiB0aGlzfTtiLnByb3RvdHlwZS5zZXRPcGFjaXR5PWZ1bmN0aW9uKGIpe3RoaXMucmdiYVszXT1iO3JldHVybiB0aGlzfTtiLnByb3RvdHlwZS50d2VlblRvPWZ1bmN0aW9uKGIsZSl7dmFyIHg9dGhpcy5yZ2JhLHc9Yi5yZ2JhO3cubGVuZ3RoJiZ4JiZ4Lmxlbmd0aD8oYj0xIT09d1szXXx8MSE9PXhbM10sZT0oYj9cInJnYmEoXCI6XCJyZ2IoXCIpK01hdGgucm91bmQod1swXStcbih4WzBdLXdbMF0pKigxLWUpKStcIixcIitNYXRoLnJvdW5kKHdbMV0rKHhbMV0td1sxXSkqKDEtZSkpK1wiLFwiK01hdGgucm91bmQod1syXSsoeFsyXS13WzJdKSooMS1lKSkrKGI/XCIsXCIrKHdbM10rKHhbM10td1szXSkqKDEtZSkpOlwiXCIpK1wiKVwiKTplPWIuaW5wdXR8fFwibm9uZVwiO3JldHVybiBlfTtiLm5hbWVzPXt3aGl0ZTpcIiNmZmZmZmZcIixibGFjazpcIiMwMDAwMDBcIn07cmV0dXJuIGJ9KCk7RC5Db2xvcj1iO0QuY29sb3I9Yi5wYXJzZTtyZXR1cm4gYn0pO08oZSxcIkNvcmUvQ29sb3IvUGFsZXR0ZS5qc1wiLFtdLGZ1bmN0aW9uKCl7cmV0dXJue2NvbG9yczpcIiM3Y2I1ZWMgIzQzNDM0OCAjOTBlZDdkICNmN2EzNWMgIzgwODVlOSAjZjE1YzgwICNlNGQzNTQgIzJiOTA4ZiAjZjQ1YjViICM5MWU4ZTFcIi5zcGxpdChcIiBcIiksYmFja2dyb3VuZENvbG9yOlwiI2ZmZmZmZlwiLG5ldXRyYWxDb2xvcjEwMDpcIiMwMDAwMDBcIixuZXV0cmFsQ29sb3I4MDpcIiMzMzMzMzNcIixuZXV0cmFsQ29sb3I2MDpcIiM2NjY2NjZcIixcbm5ldXRyYWxDb2xvcjQwOlwiIzk5OTk5OVwiLG5ldXRyYWxDb2xvcjIwOlwiI2NjY2NjY1wiLG5ldXRyYWxDb2xvcjEwOlwiI2U2ZTZlNlwiLG5ldXRyYWxDb2xvcjU6XCIjZjJmMmYyXCIsbmV1dHJhbENvbG9yMzpcIiNmN2Y3ZjdcIixoaWdobGlnaHRDb2xvcjEwMDpcIiMwMDMzOTlcIixoaWdobGlnaHRDb2xvcjgwOlwiIzMzNWNhZFwiLGhpZ2hsaWdodENvbG9yNjA6XCIjNjY4NWMyXCIsaGlnaGxpZ2h0Q29sb3IyMDpcIiNjY2Q2ZWJcIixoaWdobGlnaHRDb2xvcjEwOlwiI2U2ZWJmNVwiLHBvc2l0aXZlQ29sb3I6XCIjMDZiNTM1XCIsbmVnYXRpdmVDb2xvcjpcIiNmMjEzMTNcIn19KTtPKGUsXCJDb3JlL1RpbWUuanNcIixbZVtcIkNvcmUvR2xvYmFscy5qc1wiXSxlW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGUsYil7dmFyIEQ9ZS53aW4sej1iLmRlZmluZWQsSD1iLmVycm9yLEc9Yi5leHRlbmQsQz1iLmlzT2JqZWN0LEI9Yi5tZXJnZSx4PWIub2JqZWN0RWFjaCx3PWIucGFkLHY9Yi5waWNrLGY9Yi5zcGxhdCxkPVxuYi50aW1lVW5pdHM7XCJcIjtiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcShkKXt0aGlzLm9wdGlvbnM9e307dGhpcy52YXJpYWJsZVRpbWV6b25lPXRoaXMudXNlVVRDPSExO3RoaXMuRGF0ZT1ELkRhdGU7dGhpcy5nZXRUaW1lem9uZU9mZnNldD10aGlzLnRpbWV6b25lT2Zmc2V0RnVuY3Rpb24oKTt0aGlzLnVwZGF0ZShkKX1xLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZCxsKXtpZih0aGlzLnZhcmlhYmxlVGltZXpvbmV8fHRoaXMudGltZXpvbmVPZmZzZXQpe3ZhciBrPWwuZ2V0VGltZSgpLHU9ay10aGlzLmdldFRpbWV6b25lT2Zmc2V0KGwpO2wuc2V0VGltZSh1KTtkPWxbXCJnZXRVVENcIitkXSgpO2wuc2V0VGltZShrKTtyZXR1cm4gZH1yZXR1cm4gdGhpcy51c2VVVEM/bFtcImdldFVUQ1wiK2RdKCk6bFtcImdldFwiK2RdKCl9O3EucHJvdG90eXBlLnNldD1mdW5jdGlvbihkLGwsZil7aWYodGhpcy52YXJpYWJsZVRpbWV6b25lfHx0aGlzLnRpbWV6b25lT2Zmc2V0KXtpZihcIk1pbGxpc2Vjb25kc1wiPT09XG5kfHxcIlNlY29uZHNcIj09PWR8fFwiTWludXRlc1wiPT09ZCYmMD09PXRoaXMuZ2V0VGltZXpvbmVPZmZzZXQobCklMzZFNSlyZXR1cm4gbFtcInNldFVUQ1wiK2RdKGYpO3ZhciB1PXRoaXMuZ2V0VGltZXpvbmVPZmZzZXQobCk7dT1sLmdldFRpbWUoKS11O2wuc2V0VGltZSh1KTtsW1wic2V0VVRDXCIrZF0oZik7ZD10aGlzLmdldFRpbWV6b25lT2Zmc2V0KGwpO3U9bC5nZXRUaW1lKCkrZDtyZXR1cm4gbC5zZXRUaW1lKHUpfXJldHVybiB0aGlzLnVzZVVUQz9sW1wic2V0VVRDXCIrZF0oZik6bFtcInNldFwiK2RdKGYpfTtxLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZCl7dmFyIGw9dihkJiZkLnVzZVVUQywhMCk7dGhpcy5vcHRpb25zPWQ9QighMCx0aGlzLm9wdGlvbnN8fHt9LGQpO3RoaXMuRGF0ZT1kLkRhdGV8fEQuRGF0ZXx8RGF0ZTt0aGlzLnRpbWV6b25lT2Zmc2V0PSh0aGlzLnVzZVVUQz1sKSYmZC50aW1lem9uZU9mZnNldDt0aGlzLmdldFRpbWV6b25lT2Zmc2V0PXRoaXMudGltZXpvbmVPZmZzZXRGdW5jdGlvbigpO1xudGhpcy52YXJpYWJsZVRpbWV6b25lPWwmJiEoIWQuZ2V0VGltZXpvbmVPZmZzZXQmJiFkLnRpbWV6b25lKX07cS5wcm90b3R5cGUubWFrZVRpbWU9ZnVuY3Rpb24oZCxsLGYsdSxuLHEpe2lmKHRoaXMudXNlVVRDKXt2YXIgaz10aGlzLkRhdGUuVVRDLmFwcGx5KDAsYXJndW1lbnRzKTt2YXIgbT10aGlzLmdldFRpbWV6b25lT2Zmc2V0KGspO2srPW07dmFyIGM9dGhpcy5nZXRUaW1lem9uZU9mZnNldChrKTttIT09Yz9rKz1jLW06bS0zNkU1IT09dGhpcy5nZXRUaW1lem9uZU9mZnNldChrLTM2RTUpfHxlLmlzU2FmYXJpfHwoay09MzZFNSl9ZWxzZSBrPShuZXcgdGhpcy5EYXRlKGQsbCx2KGYsMSksdih1LDApLHYobiwwKSx2KHEsMCkpKS5nZXRUaW1lKCk7cmV0dXJuIGt9O3EucHJvdG90eXBlLnRpbWV6b25lT2Zmc2V0RnVuY3Rpb249ZnVuY3Rpb24oKXt2YXIgZD10aGlzLGw9dGhpcy5vcHRpb25zLGY9bC5tb21lbnR8fEQubW9tZW50O2lmKCF0aGlzLnVzZVVUQylyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuIDZFNCpcbihuZXcgRGF0ZShkLnRvU3RyaW5nKCkpKS5nZXRUaW1lem9uZU9mZnNldCgpfTtpZihsLnRpbWV6b25lKXtpZihmKXJldHVybiBmdW5jdGlvbihkKXtyZXR1cm4gNkU0Ki1mLnR6KGQsbC50aW1lem9uZSkudXRjT2Zmc2V0KCl9O0goMjUpfXJldHVybiB0aGlzLnVzZVVUQyYmbC5nZXRUaW1lem9uZU9mZnNldD9mdW5jdGlvbihkKXtyZXR1cm4gNkU0KmwuZ2V0VGltZXpvbmVPZmZzZXQoZC52YWx1ZU9mKCkpfTpmdW5jdGlvbigpe3JldHVybiA2RTQqKGQudGltZXpvbmVPZmZzZXR8fDApfX07cS5wcm90b3R5cGUuZGF0ZUZvcm1hdD1mdW5jdGlvbihkLGYscSl7aWYoIXooZil8fGlzTmFOKGYpKXJldHVybiBlLmRlZmF1bHRPcHRpb25zLmxhbmcmJmUuZGVmYXVsdE9wdGlvbnMubGFuZy5pbnZhbGlkRGF0ZXx8XCJcIjtkPXYoZCxcIiVZLSVtLSVkICVIOiVNOiVTXCIpO3ZhciBsPXRoaXMsbj1uZXcgdGhpcy5EYXRlKGYpLGs9dGhpcy5nZXQoXCJIb3Vyc1wiLG4pLE49dGhpcy5nZXQoXCJEYXlcIixuKSxcbm09dGhpcy5nZXQoXCJEYXRlXCIsbiksYz10aGlzLmdldChcIk1vbnRoXCIsbiksZz10aGlzLmdldChcIkZ1bGxZZWFyXCIsbiksYT1lLmRlZmF1bHRPcHRpb25zLmxhbmcsaD1hJiZhLndlZWtkYXlzLHI9YSYmYS5zaG9ydFdlZWtkYXlzO249Ryh7YTpyP3JbTl06aFtOXS5zdWJzdHIoMCwzKSxBOmhbTl0sZDp3KG0pLGU6dyhtLDIsXCIgXCIpLHc6TixiOmEuc2hvcnRNb250aHNbY10sQjphLm1vbnRoc1tjXSxtOncoYysxKSxvOmMrMSx5OmcudG9TdHJpbmcoKS5zdWJzdHIoMiwyKSxZOmcsSDp3KGspLGs6ayxJOncoayUxMnx8MTIpLGw6ayUxMnx8MTIsTTp3KHRoaXMuZ2V0KFwiTWludXRlc1wiLG4pKSxwOjEyPms/XCJBTVwiOlwiUE1cIixQOjEyPms/XCJhbVwiOlwicG1cIixTOncobi5nZXRTZWNvbmRzKCkpLEw6dyhNYXRoLmZsb29yKGYlMUUzKSwzKX0sZS5kYXRlRm9ybWF0cyk7eChuLGZ1bmN0aW9uKGEsYyl7Zm9yKDstMSE9PWQuaW5kZXhPZihcIiVcIitjKTspZD1kLnJlcGxhY2UoXCIlXCIrYyxcImZ1bmN0aW9uXCI9PT1cbnR5cGVvZiBhP2EuY2FsbChsLGYpOmEpfSk7cmV0dXJuIHE/ZC5zdWJzdHIoMCwxKS50b1VwcGVyQ2FzZSgpK2Quc3Vic3RyKDEpOmR9O3EucHJvdG90eXBlLnJlc29sdmVEVExGb3JtYXQ9ZnVuY3Rpb24oZCl7cmV0dXJuIEMoZCwhMCk/ZDooZD1mKGQpLHttYWluOmRbMF0sZnJvbTpkWzFdLHRvOmRbMl19KX07cS5wcm90b3R5cGUuZ2V0VGltZVRpY2tzPWZ1bmN0aW9uKGYsbCxxLHUpe3ZhciBuPXRoaXMsaz1bXSxOPXt9O3ZhciBtPW5ldyBuLkRhdGUobCk7dmFyIGM9Zi51bml0UmFuZ2UsZz1mLmNvdW50fHwxLGE7dT12KHUsMSk7aWYoeihsKSl7bi5zZXQoXCJNaWxsaXNlY29uZHNcIixtLGM+PWQuc2Vjb25kPzA6ZypNYXRoLmZsb29yKG4uZ2V0KFwiTWlsbGlzZWNvbmRzXCIsbSkvZykpO2M+PWQuc2Vjb25kJiZuLnNldChcIlNlY29uZHNcIixtLGM+PWQubWludXRlPzA6ZypNYXRoLmZsb29yKG4uZ2V0KFwiU2Vjb25kc1wiLG0pL2cpKTtjPj1kLm1pbnV0ZSYmbi5zZXQoXCJNaW51dGVzXCIsbSxcbmM+PWQuaG91cj8wOmcqTWF0aC5mbG9vcihuLmdldChcIk1pbnV0ZXNcIixtKS9nKSk7Yz49ZC5ob3VyJiZuLnNldChcIkhvdXJzXCIsbSxjPj1kLmRheT8wOmcqTWF0aC5mbG9vcihuLmdldChcIkhvdXJzXCIsbSkvZykpO2M+PWQuZGF5JiZuLnNldChcIkRhdGVcIixtLGM+PWQubW9udGg/MTpNYXRoLm1heCgxLGcqTWF0aC5mbG9vcihuLmdldChcIkRhdGVcIixtKS9nKSkpO2lmKGM+PWQubW9udGgpe24uc2V0KFwiTW9udGhcIixtLGM+PWQueWVhcj8wOmcqTWF0aC5mbG9vcihuLmdldChcIk1vbnRoXCIsbSkvZykpO3ZhciBoPW4uZ2V0KFwiRnVsbFllYXJcIixtKX1jPj1kLnllYXImJm4uc2V0KFwiRnVsbFllYXJcIixtLGgtaCVnKTtjPT09ZC53ZWVrJiYoaD1uLmdldChcIkRheVwiLG0pLG4uc2V0KFwiRGF0ZVwiLG0sbi5nZXQoXCJEYXRlXCIsbSktaCt1KyhoPHU/LTc6MCkpKTtoPW4uZ2V0KFwiRnVsbFllYXJcIixtKTt1PW4uZ2V0KFwiTW9udGhcIixtKTt2YXIgcj1uLmdldChcIkRhdGVcIixtKSxBPW4uZ2V0KFwiSG91cnNcIixtKTtcbmw9bS5nZXRUaW1lKCk7IW4udmFyaWFibGVUaW1lem9uZSYmbi51c2VVVEN8fCF6KHEpfHwoYT1xLWw+NCpkLm1vbnRofHxuLmdldFRpbWV6b25lT2Zmc2V0KGwpIT09bi5nZXRUaW1lem9uZU9mZnNldChxKSk7bD1tLmdldFRpbWUoKTtmb3IobT0xO2w8cTspay5wdXNoKGwpLGw9Yz09PWQueWVhcj9uLm1ha2VUaW1lKGgrbSpnLDApOmM9PT1kLm1vbnRoP24ubWFrZVRpbWUoaCx1K20qZyk6IWF8fGMhPT1kLmRheSYmYyE9PWQud2Vlaz9hJiZjPT09ZC5ob3VyJiYxPGc/bi5tYWtlVGltZShoLHUscixBK20qZyk6bCtjKmc6bi5tYWtlVGltZShoLHUscittKmcqKGM9PT1kLmRheT8xOjcpKSxtKys7ay5wdXNoKGwpO2M8PWQuaG91ciYmMUU0PmsubGVuZ3RoJiZrLmZvckVhY2goZnVuY3Rpb24oYSl7MD09PWElMThFNSYmXCIwMDAwMDAwMDBcIj09PW4uZGF0ZUZvcm1hdChcIiVIJU0lUyVMXCIsYSkmJihOW2FdPVwiZGF5XCIpfSl9ay5pbmZvPUcoZix7aGlnaGVyUmFua3M6Tix0b3RhbFJhbmdlOmMqXG5nfSk7cmV0dXJuIGt9O3JldHVybiBxfSgpO2UuVGltZT1iO3JldHVybiBlLlRpbWV9KTtPKGUsXCJDb3JlL09wdGlvbnMuanNcIixbZVtcIkNvcmUvR2xvYmFscy5qc1wiXSxlW1wiQ29yZS9Db2xvci9Db2xvci5qc1wiXSxlW1wiQ29yZS9Db2xvci9QYWxldHRlLmpzXCJdLGVbXCJDb3JlL1RpbWUuanNcIl0sZVtcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihlLGIsSSx6LEgpe3ZhciBEPWUuaXNUb3VjaERldmljZSxDPWUuc3ZnO2I9Yi5wYXJzZTt2YXIgQj1ILm1lcmdlO1wiXCI7dmFyIHg9e2NvbG9yczpJLmNvbG9ycyxzeW1ib2xzOltcImNpcmNsZVwiLFwiZGlhbW9uZFwiLFwic3F1YXJlXCIsXCJ0cmlhbmdsZVwiLFwidHJpYW5nbGUtZG93blwiXSxsYW5nOntsb2FkaW5nOlwiTG9hZGluZy4uLlwiLG1vbnRoczpcIkphbnVhcnkgRmVicnVhcnkgTWFyY2ggQXByaWwgTWF5IEp1bmUgSnVseSBBdWd1c3QgU2VwdGVtYmVyIE9jdG9iZXIgTm92ZW1iZXIgRGVjZW1iZXJcIi5zcGxpdChcIiBcIiksc2hvcnRNb250aHM6XCJKYW4gRmViIE1hciBBcHIgTWF5IEp1biBKdWwgQXVnIFNlcCBPY3QgTm92IERlY1wiLnNwbGl0KFwiIFwiKSxcbndlZWtkYXlzOlwiU3VuZGF5IE1vbmRheSBUdWVzZGF5IFdlZG5lc2RheSBUaHVyc2RheSBGcmlkYXkgU2F0dXJkYXlcIi5zcGxpdChcIiBcIiksZGVjaW1hbFBvaW50OlwiLlwiLG51bWVyaWNTeW1ib2xzOlwia01HVFBFXCIuc3BsaXQoXCJcIikscmVzZXRab29tOlwiUmVzZXQgem9vbVwiLHJlc2V0Wm9vbVRpdGxlOlwiUmVzZXQgem9vbSBsZXZlbCAxOjFcIix0aG91c2FuZHNTZXA6XCIgXCJ9LGdsb2JhbDp7fSx0aW1lOntEYXRlOnZvaWQgMCxnZXRUaW1lem9uZU9mZnNldDp2b2lkIDAsdGltZXpvbmU6dm9pZCAwLHRpbWV6b25lT2Zmc2V0OjAsdXNlVVRDOiEwfSxjaGFydDp7cGFubmluZzp7ZW5hYmxlZDohMSx0eXBlOlwieFwifSxzdHlsZWRNb2RlOiExLGJvcmRlclJhZGl1czowLGNvbG9yQ291bnQ6MTAsZGVmYXVsdFNlcmllc1R5cGU6XCJsaW5lXCIsaWdub3JlSGlkZGVuU2VyaWVzOiEwLHNwYWNpbmc6WzEwLDEwLDE1LDEwXSxyZXNldFpvb21CdXR0b246e3RoZW1lOnt6SW5kZXg6Nn0scG9zaXRpb246e2FsaWduOlwicmlnaHRcIixcbng6LTEwLHk6MTB9fSx6b29tQnlTaW5nbGVUb3VjaDohMSx3aWR0aDpudWxsLGhlaWdodDpudWxsLGJvcmRlckNvbG9yOkkuaGlnaGxpZ2h0Q29sb3I4MCxiYWNrZ3JvdW5kQ29sb3I6SS5iYWNrZ3JvdW5kQ29sb3IscGxvdEJvcmRlckNvbG9yOkkubmV1dHJhbENvbG9yMjB9LHRpdGxlOnt0ZXh0OlwiQ2hhcnQgdGl0bGVcIixhbGlnbjpcImNlbnRlclwiLG1hcmdpbjoxNSx3aWR0aEFkanVzdDotNDR9LHN1YnRpdGxlOnt0ZXh0OlwiXCIsYWxpZ246XCJjZW50ZXJcIix3aWR0aEFkanVzdDotNDR9LGNhcHRpb246e21hcmdpbjoxNSx0ZXh0OlwiXCIsYWxpZ246XCJsZWZ0XCIsdmVydGljYWxBbGlnbjpcImJvdHRvbVwifSxwbG90T3B0aW9uczp7fSxsYWJlbHM6e3N0eWxlOntwb3NpdGlvbjpcImFic29sdXRlXCIsY29sb3I6SS5uZXV0cmFsQ29sb3I4MH19LGxlZ2VuZDp7ZW5hYmxlZDohMCxhbGlnbjpcImNlbnRlclwiLGFsaWduQ29sdW1uczohMCxsYXlvdXQ6XCJob3Jpem9udGFsXCIsbGFiZWxGb3JtYXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lfSxcbmJvcmRlckNvbG9yOkkubmV1dHJhbENvbG9yNDAsYm9yZGVyUmFkaXVzOjAsbmF2aWdhdGlvbjp7YWN0aXZlQ29sb3I6SS5oaWdobGlnaHRDb2xvcjEwMCxpbmFjdGl2ZUNvbG9yOkkubmV1dHJhbENvbG9yMjB9LGl0ZW1TdHlsZTp7Y29sb3I6SS5uZXV0cmFsQ29sb3I4MCxjdXJzb3I6XCJwb2ludGVyXCIsZm9udFNpemU6XCIxMnB4XCIsZm9udFdlaWdodDpcImJvbGRcIix0ZXh0T3ZlcmZsb3c6XCJlbGxpcHNpc1wifSxpdGVtSG92ZXJTdHlsZTp7Y29sb3I6SS5uZXV0cmFsQ29sb3IxMDB9LGl0ZW1IaWRkZW5TdHlsZTp7Y29sb3I6SS5uZXV0cmFsQ29sb3IyMH0sc2hhZG93OiExLGl0ZW1DaGVja2JveFN0eWxlOntwb3NpdGlvbjpcImFic29sdXRlXCIsd2lkdGg6XCIxM3B4XCIsaGVpZ2h0OlwiMTNweFwifSxzcXVhcmVTeW1ib2w6ITAsc3ltYm9sUGFkZGluZzo1LHZlcnRpY2FsQWxpZ246XCJib3R0b21cIix4OjAseTowLHRpdGxlOntzdHlsZTp7Zm9udFdlaWdodDpcImJvbGRcIn19fSxsb2FkaW5nOntsYWJlbFN0eWxlOntmb250V2VpZ2h0OlwiYm9sZFwiLFxucG9zaXRpb246XCJyZWxhdGl2ZVwiLHRvcDpcIjQ1JVwifSxzdHlsZTp7cG9zaXRpb246XCJhYnNvbHV0ZVwiLGJhY2tncm91bmRDb2xvcjpJLmJhY2tncm91bmRDb2xvcixvcGFjaXR5Oi41LHRleHRBbGlnbjpcImNlbnRlclwifX0sdG9vbHRpcDp7ZW5hYmxlZDohMCxhbmltYXRpb246Qyxib3JkZXJSYWRpdXM6MyxkYXRlVGltZUxhYmVsRm9ybWF0czp7bWlsbGlzZWNvbmQ6XCIlQSwgJWIgJWUsICVIOiVNOiVTLiVMXCIsc2Vjb25kOlwiJUEsICViICVlLCAlSDolTTolU1wiLG1pbnV0ZTpcIiVBLCAlYiAlZSwgJUg6JU1cIixob3VyOlwiJUEsICViICVlLCAlSDolTVwiLGRheTpcIiVBLCAlYiAlZSwgJVlcIix3ZWVrOlwiV2VlayBmcm9tICVBLCAlYiAlZSwgJVlcIixtb250aDpcIiVCICVZXCIseWVhcjpcIiVZXCJ9LGZvb3RlckZvcm1hdDpcIlwiLHBhZGRpbmc6OCxzbmFwOkQ/MjU6MTAsaGVhZGVyRm9ybWF0Oic8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogMTBweFwiPntwb2ludC5rZXl9PC9zcGFuPjxici8+Jyxwb2ludEZvcm1hdDonPHNwYW4gc3R5bGU9XCJjb2xvcjp7cG9pbnQuY29sb3J9XCI+XFx1MjVjZjwvc3Bhbj4ge3Nlcmllcy5uYW1lfTogPGI+e3BvaW50Lnl9PC9iPjxici8+JyxcbmJhY2tncm91bmRDb2xvcjpiKEkubmV1dHJhbENvbG9yMykuc2V0T3BhY2l0eSguODUpLmdldCgpLGJvcmRlcldpZHRoOjEsc2hhZG93OiEwLHN0eWxlOntjb2xvcjpJLm5ldXRyYWxDb2xvcjgwLGN1cnNvcjpcImRlZmF1bHRcIixmb250U2l6ZTpcIjEycHhcIix3aGl0ZVNwYWNlOlwibm93cmFwXCJ9fSxjcmVkaXRzOntlbmFibGVkOiEwLGhyZWY6XCJodHRwczovL3d3dy5oaWdoY2hhcnRzLmNvbT9jcmVkaXRzXCIscG9zaXRpb246e2FsaWduOlwicmlnaHRcIix4Oi0xMCx2ZXJ0aWNhbEFsaWduOlwiYm90dG9tXCIseTotNX0sc3R5bGU6e2N1cnNvcjpcInBvaW50ZXJcIixjb2xvcjpJLm5ldXRyYWxDb2xvcjQwLGZvbnRTaXplOlwiOXB4XCJ9LHRleHQ6XCJIaWdoY2hhcnRzLmNvbVwifX07eC5jaGFydC5zdHlsZWRNb2RlPSExO1wiXCI7dmFyIHc9bmV3IHooQih4Lmdsb2JhbCx4LnRpbWUpKTtyZXR1cm57ZGVmYXVsdE9wdGlvbnM6eCxkZWZhdWx0VGltZTp3LGdldE9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm4geH0sXG5zZXRPcHRpb25zOmZ1bmN0aW9uKHYpe0IoITAseCx2KTtpZih2LnRpbWV8fHYuZ2xvYmFsKWUudGltZT9lLnRpbWUudXBkYXRlKEIoeC5nbG9iYWwseC50aW1lLHYuZ2xvYmFsLHYudGltZSkpOmUudGltZT13O3JldHVybiB4fX19KTtPKGUsXCJDb3JlL0FuaW1hdGlvbi9GeC5qc1wiLFtlW1wiQ29yZS9Db2xvci9Db2xvci5qc1wiXSxlW1wiQ29yZS9HbG9iYWxzLmpzXCJdLGVbXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oZSxiLEkpe3ZhciBEPWUucGFyc2UsSD1iLndpbixHPUkuaXNOdW1iZXIsQz1JLm9iamVjdEVhY2g7cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihiLHcsdil7dGhpcy5wb3M9TmFOO3RoaXMub3B0aW9ucz13O3RoaXMuZWxlbT1iO3RoaXMucHJvcD12fWIucHJvdG90eXBlLmRTZXR0ZXI9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnBhdGhzLHc9YiYmYlswXTtiPWImJmJbMV07dmFyIHY9dGhpcy5ub3d8fDAsZj1bXTtpZigxIT09diYmdyYmYilpZih3Lmxlbmd0aD09PVxuYi5sZW5ndGgmJjE+dilmb3IodmFyIGQ9MDtkPGIubGVuZ3RoO2QrKyl7Zm9yKHZhciBxPXdbZF0saz1iW2RdLGw9W10sTj0wO048ay5sZW5ndGg7TisrKXt2YXIgdT1xW05dLG49a1tOXTtHKHUpJiZHKG4pJiYoXCJBXCIhPT1rWzBdfHw0IT09TiYmNSE9PU4pP2xbTl09dSt2KihuLXUpOmxbTl09bn1mLnB1c2gobCl9ZWxzZSBmPWI7ZWxzZSBmPXRoaXMudG9EfHxbXTt0aGlzLmVsZW0uYXR0cihcImRcIixmLHZvaWQgMCwhMCl9O2IucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbigpe3ZhciBiPXRoaXMuZWxlbSx3PXRoaXMucHJvcCx2PXRoaXMubm93LGY9dGhpcy5vcHRpb25zLnN0ZXA7aWYodGhpc1t3K1wiU2V0dGVyXCJdKXRoaXNbdytcIlNldHRlclwiXSgpO2Vsc2UgYi5hdHRyP2IuZWxlbWVudCYmYi5hdHRyKHcsdixudWxsLCEwKTpiLnN0eWxlW3ddPXYrdGhpcy51bml0O2YmJmYuY2FsbChiLHYsdGhpcyl9O2IucHJvdG90eXBlLnJ1bj1mdW5jdGlvbihlLHcsdil7dmFyIGY9dGhpcyxkPWYub3B0aW9ucyxcbnE9ZnVuY3Rpb24oZCl7cmV0dXJuIHEuc3RvcHBlZD8hMTpmLnN0ZXAoZCl9LGs9SC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fGZ1bmN0aW9uKGQpe3NldFRpbWVvdXQoZCwxMyl9LGw9ZnVuY3Rpb24oKXtmb3IodmFyIGQ9MDtkPGIudGltZXJzLmxlbmd0aDtkKyspYi50aW1lcnNbZF0oKXx8Yi50aW1lcnMuc3BsaWNlKGQtLSwxKTtiLnRpbWVycy5sZW5ndGgmJmsobCl9O2UhPT13fHx0aGlzLmVsZW1bXCJmb3JjZUFuaW1hdGU6XCIrdGhpcy5wcm9wXT8odGhpcy5zdGFydFRpbWU9K25ldyBEYXRlLHRoaXMuc3RhcnQ9ZSx0aGlzLmVuZD13LHRoaXMudW5pdD12LHRoaXMubm93PXRoaXMuc3RhcnQsdGhpcy5wb3M9MCxxLmVsZW09dGhpcy5lbGVtLHEucHJvcD10aGlzLnByb3AscSgpJiYxPT09Yi50aW1lcnMucHVzaChxKSYmayhsKSk6KGRlbGV0ZSBkLmN1ckFuaW1bdGhpcy5wcm9wXSxkLmNvbXBsZXRlJiYwPT09T2JqZWN0LmtleXMoZC5jdXJBbmltKS5sZW5ndGgmJmQuY29tcGxldGUuY2FsbCh0aGlzLmVsZW0pKX07XG5iLnByb3RvdHlwZS5zdGVwPWZ1bmN0aW9uKGIpe3ZhciB3PStuZXcgRGF0ZSx2PXRoaXMub3B0aW9ucyxmPXRoaXMuZWxlbSxkPXYuY29tcGxldGUscT12LmR1cmF0aW9uLGs9di5jdXJBbmltO2lmKGYuYXR0ciYmIWYuZWxlbWVudCliPSExO2Vsc2UgaWYoYnx8dz49cSt0aGlzLnN0YXJ0VGltZSl7dGhpcy5ub3c9dGhpcy5lbmQ7dGhpcy5wb3M9MTt0aGlzLnVwZGF0ZSgpO3ZhciBsPWtbdGhpcy5wcm9wXT0hMDtDKGssZnVuY3Rpb24oZCl7ITAhPT1kJiYobD0hMSl9KTtsJiZkJiZkLmNhbGwoZik7Yj0hMX1lbHNlIHRoaXMucG9zPXYuZWFzaW5nKCh3LXRoaXMuc3RhcnRUaW1lKS9xKSx0aGlzLm5vdz10aGlzLnN0YXJ0Kyh0aGlzLmVuZC10aGlzLnN0YXJ0KSp0aGlzLnBvcyx0aGlzLnVwZGF0ZSgpLGI9ITA7cmV0dXJuIGJ9O2IucHJvdG90eXBlLmluaXRQYXRoPWZ1bmN0aW9uKGIsdyx2KXtmdW5jdGlvbiBmKGQsbSl7Zm9yKDtkLmxlbmd0aDxKOyl7dmFyIGM9ZFswXSxnPW1bSi1cbmQubGVuZ3RoXTtnJiZcIk1cIj09PWNbMF0mJihkWzBdPVwiQ1wiPT09Z1swXT9bXCJDXCIsY1sxXSxjWzJdLGNbMV0sY1syXSxjWzFdLGNbMl1dOltcIkxcIixjWzFdLGNbMl1dKTtkLnVuc2hpZnQoYyk7bCYmKGM9ZC5wb3AoKSxkLnB1c2goZFtkLmxlbmd0aC0xXSxjKSl9fWZ1bmN0aW9uIGQoZCxtKXtmb3IoO2QubGVuZ3RoPEo7KWlmKG09ZFtNYXRoLmZsb29yKGQubGVuZ3RoL04pLTFdLnNsaWNlKCksXCJDXCI9PT1tWzBdJiYobVsxXT1tWzVdLG1bMl09bVs2XSksbCl7dmFyIGM9ZFtNYXRoLmZsb29yKGQubGVuZ3RoL04pXS5zbGljZSgpO2Quc3BsaWNlKGQubGVuZ3RoLzIsMCxtLGMpfWVsc2UgZC5wdXNoKG0pfXZhciBxPWIuc3RhcnRYLGs9Yi5lbmRYO3Y9di5zbGljZSgpO3ZhciBsPWIuaXNBcmVhLE49bD8yOjE7dz13JiZ3LnNsaWNlKCk7aWYoIXcpcmV0dXJuW3Ysdl07aWYocSYmayYmay5sZW5ndGgpe2ZvcihiPTA7YjxxLmxlbmd0aDtiKyspaWYocVtiXT09PWtbMF0pe3ZhciB1PWI7YnJlYWt9ZWxzZSBpZihxWzBdPT09XG5rW2subGVuZ3RoLXEubGVuZ3RoK2JdKXt1PWI7dmFyIG49ITA7YnJlYWt9ZWxzZSBpZihxW3EubGVuZ3RoLTFdPT09a1trLmxlbmd0aC1xLmxlbmd0aCtiXSl7dT1xLmxlbmd0aC1iO2JyZWFrfVwidW5kZWZpbmVkXCI9PT10eXBlb2YgdSYmKHc9W10pfWlmKHcubGVuZ3RoJiZHKHUpKXt2YXIgSj12Lmxlbmd0aCt1Kk47bj8oZih3LHYpLGQodix3KSk6KGYodix3KSxkKHcsdikpfXJldHVyblt3LHZdfTtiLnByb3RvdHlwZS5maWxsU2V0dGVyPWZ1bmN0aW9uKCl7Yi5wcm90b3R5cGUuc3Ryb2tlU2V0dGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Yi5wcm90b3R5cGUuc3Ryb2tlU2V0dGVyPWZ1bmN0aW9uKCl7dGhpcy5lbGVtLmF0dHIodGhpcy5wcm9wLEQodGhpcy5zdGFydCkudHdlZW5UbyhEKHRoaXMuZW5kKSx0aGlzLnBvcyksbnVsbCwhMCl9O2IudGltZXJzPVtdO3JldHVybiBifSgpfSk7TyhlLFwiQ29yZS9BbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmpzXCIsW2VbXCJDb3JlL0FuaW1hdGlvbi9GeC5qc1wiXSxcbmVbXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oZSxiKXtmdW5jdGlvbiBEKGQpe3JldHVybiB4KGQpP3coe2R1cmF0aW9uOjUwMCxkZWZlcjowfSxkKTp7ZHVyYXRpb246ZD81MDA6MCxkZWZlcjowfX1mdW5jdGlvbiB6KGQsZil7Zm9yKHZhciBxPWUudGltZXJzLmxlbmd0aDtxLS07KWUudGltZXJzW3FdLmVsZW0hPT1kfHxmJiZmIT09ZS50aW1lcnNbcV0ucHJvcHx8KGUudGltZXJzW3FdLnN0b3BwZWQ9ITApfXZhciBIPWIuZGVmaW5lZCxHPWIuZ2V0U3R5bGUsQz1iLmlzQXJyYXksQj1iLmlzTnVtYmVyLHg9Yi5pc09iamVjdCx3PWIubWVyZ2Usdj1iLm9iamVjdEVhY2gsZj1iLnBpY2s7cmV0dXJue2FuaW1hdGU6ZnVuY3Rpb24oZCxmLGspe3ZhciBsLHE9XCJcIix1LG47aWYoIXgoaykpe3ZhciBiPWFyZ3VtZW50cztrPXtkdXJhdGlvbjpiWzJdLGVhc2luZzpiWzNdLGNvbXBsZXRlOmJbNF19fUIoay5kdXJhdGlvbil8fChrLmR1cmF0aW9uPTQwMCk7ay5lYXNpbmc9XCJmdW5jdGlvblwiPT09XG50eXBlb2Ygay5lYXNpbmc/ay5lYXNpbmc6TWF0aFtrLmVhc2luZ118fE1hdGguZWFzZUluT3V0U2luZTtrLmN1ckFuaW09dyhmKTt2KGYsZnVuY3Rpb24oYixtKXt6KGQsbSk7bj1uZXcgZShkLGssbSk7dT12b2lkIDA7XCJkXCI9PT1tJiZDKGYuZCk/KG4ucGF0aHM9bi5pbml0UGF0aChkLGQucGF0aEFycmF5LGYuZCksbi50b0Q9Zi5kLGw9MCx1PTEpOmQuYXR0cj9sPWQuYXR0cihtKToobD1wYXJzZUZsb2F0KEcoZCxtKSl8fDAsXCJvcGFjaXR5XCIhPT1tJiYocT1cInB4XCIpKTt1fHwodT1iKTtcInN0cmluZ1wiPT09dHlwZW9mIHUmJnUubWF0Y2goXCJweFwiKSYmKHU9dS5yZXBsYWNlKC9weC9nLFwiXCIpKTtuLnJ1bihsLHUscSl9KX0sYW5pbU9iamVjdDpELGdldERlZmVycmVkQW5pbWF0aW9uOmZ1bmN0aW9uKGQsZixiKXt2YXIgbD1EKGYpLHE9MCx1PTA7KGI/W2JdOmQuc2VyaWVzKS5mb3JFYWNoKGZ1bmN0aW9uKGQpe2Q9RChkLm9wdGlvbnMuYW5pbWF0aW9uKTtxPWYmJkgoZi5kZWZlcik/bC5kZWZlcjpcbk1hdGgubWF4KHEsZC5kdXJhdGlvbitkLmRlZmVyKTt1PU1hdGgubWluKGwuZHVyYXRpb24sZC5kdXJhdGlvbil9KTtkLnJlbmRlcmVyLmZvckV4cG9ydCYmKHE9MCk7cmV0dXJue2RlZmVyOk1hdGgubWF4KDAscS11KSxkdXJhdGlvbjpNYXRoLm1pbihxLHUpfX0sc2V0QW5pbWF0aW9uOmZ1bmN0aW9uKGQscSl7cS5yZW5kZXJlci5nbG9iYWxBbmltYXRpb249ZihkLHEub3B0aW9ucy5jaGFydC5hbmltYXRpb24sITApfSxzdG9wOnp9fSk7TyhlLFwiQ29yZS9SZW5kZXJlci9IVE1ML0FTVC5qc1wiLFtlW1wiQ29yZS9HbG9iYWxzLmpzXCJdLGVbXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oZSxiKXt2YXIgRD1lLlNWR19OUyx6PWIuYXR0cixIPWIuY3JlYXRlRWxlbWVudCxHPWIuZGlzY2FyZEVsZW1lbnQsQz1iLmVycm9yLEI9Yi5pc1N0cmluZyx4PWIub2JqZWN0RWFjaCx3PWIuc3BsYXQ7XCJcIjt2YXIgdj0hMTt0cnl7dj0hIShuZXcgRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoXCJcIixcblwidGV4dC9odG1sXCIpfWNhdGNoKGYpe31yZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiBmKGQpe3RoaXMubm9kZXM9XCJzdHJpbmdcIj09PXR5cGVvZiBkP3RoaXMucGFyc2VNYXJrdXAoZCk6ZH1mLmZpbHRlclVzZXJBdHRyaWJ1dGVzPWZ1bmN0aW9uKGQpe3goZCxmdW5jdGlvbihxLGIpe3ZhciBsPSEwOy0xPT09Zi5hbGxvd2VkQXR0cmlidXRlcy5pbmRleE9mKGIpJiYobD0hMSk7LTEhPT1bXCJiYWNrZ3JvdW5kXCIsXCJkeW5zcmNcIixcImhyZWZcIixcImxvd3NyY1wiLFwic3JjXCJdLmluZGV4T2YoYikmJihsPUIocSkmJmYuYWxsb3dlZFJlZmVyZW5jZXMuc29tZShmdW5jdGlvbihkKXtyZXR1cm4gMD09PXEuaW5kZXhPZihkKX0pKTtsfHwoQyhcIkhpZ2hjaGFydHMgd2FybmluZzogSW52YWxpZCBhdHRyaWJ1dGUgJ1wiK2IrXCInIGluIGNvbmZpZ1wiKSxkZWxldGUgZFtiXSl9KTtyZXR1cm4gZH07Zi5zZXRFbGVtZW50SFRNTD1mdW5jdGlvbihkLHEpe2QuaW5uZXJIVE1MPVwiXCI7cSYmKG5ldyBmKHEpKS5hZGRUb0RPTShkKX07XG5mLnByb3RvdHlwZS5hZGRUb0RPTT1mdW5jdGlvbihkKXtmdW5jdGlvbiBxKGQsbCl7dmFyIGI7dyhkKS5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZhciBuPWQudGFnTmFtZSx1PWQudGV4dENvbnRlbnQ/ZS5kb2MuY3JlYXRlVGV4dE5vZGUoZC50ZXh0Q29udGVudCk6dm9pZCAwO2lmKG4paWYoXCIjdGV4dFwiPT09bil2YXIgaz11O2Vsc2UgaWYoLTEhPT1mLmFsbG93ZWRUYWdzLmluZGV4T2Yobikpe249ZS5kb2MuY3JlYXRlRWxlbWVudE5TKFwic3ZnXCI9PT1uP0Q6bC5uYW1lc3BhY2VVUkl8fEQsbik7dmFyIG09ZC5hdHRyaWJ1dGVzfHx7fTt4KGQsZnVuY3Rpb24oYyxnKXtcInRhZ05hbWVcIiE9PWcmJlwiYXR0cmlidXRlc1wiIT09ZyYmXCJjaGlsZHJlblwiIT09ZyYmXCJ0ZXh0Q29udGVudFwiIT09ZyYmKG1bZ109Yyl9KTt6KG4sZi5maWx0ZXJVc2VyQXR0cmlidXRlcyhtKSk7dSYmbi5hcHBlbmRDaGlsZCh1KTtxKGQuY2hpbGRyZW58fFtdLG4pO2s9bn1lbHNlIEMoXCJIaWdoY2hhcnRzIHdhcm5pbmc6IEludmFsaWQgdGFnTmFtZSAnXCIrXG5uK1wiJyBpbiBjb25maWdcIik7ayYmbC5hcHBlbmRDaGlsZChrKTtiPWt9KTtyZXR1cm4gYn1yZXR1cm4gcSh0aGlzLm5vZGVzLGQpfTtmLnByb3RvdHlwZS5wYXJzZU1hcmt1cD1mdW5jdGlvbihkKXt2YXIgZj1bXTtpZih2KWQ9KG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhkLFwidGV4dC9odG1sXCIpO2Vsc2V7dmFyIGI9SChcImRpdlwiKTtiLmlubmVySFRNTD1kO2Q9e2JvZHk6Yn19dmFyIGw9ZnVuY3Rpb24oZCxmKXt2YXIgbj1kLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksYj17dGFnTmFtZTpufTtpZihcIiN0ZXh0XCI9PT1uKXtuPWQudGV4dENvbnRlbnR8fFwiXCI7aWYoL15bXFxzXSokLy50ZXN0KG4pKXJldHVybjtiLnRleHRDb250ZW50PW59aWYobj1kLmF0dHJpYnV0ZXMpe3ZhciB1PXt9O1tdLmZvckVhY2guY2FsbChuLGZ1bmN0aW9uKGMpe3VbYy5uYW1lXT1jLnZhbHVlfSk7Yi5hdHRyaWJ1dGVzPXV9aWYoZC5jaGlsZE5vZGVzLmxlbmd0aCl7dmFyIG09W107W10uZm9yRWFjaC5jYWxsKGQuY2hpbGROb2RlcyxcbmZ1bmN0aW9uKGMpe2woYyxtKX0pO20ubGVuZ3RoJiYoYi5jaGlsZHJlbj1tKX1mLnB1c2goYil9O1tdLmZvckVhY2guY2FsbChkLmJvZHkuY2hpbGROb2RlcyxmdW5jdGlvbihkKXtyZXR1cm4gbChkLGYpfSk7YiYmRyhiKTtyZXR1cm4gZn07Zi5hbGxvd2VkVGFncz1cImEgYiBiciBidXR0b24gY2FwdGlvbiBjaXJjbGUgY2xpcFBhdGggY29kZSBkZCBkZWZzIGRpdiBkbCBkdCBlbSBmZUNvbXBvbmVudFRyYW5zZmVyIGZlRnVuY0EgZmVGdW5jQiBmZUZ1bmNHIGZlRnVuY1IgZmVHYXVzc2lhbkJsdXIgZmVPZmZzZXQgZmVNZXJnZSBmZU1lcmdlTm9kZSBmaWx0ZXIgaDEgaDIgaDMgaDQgaDUgaDYgaHIgaSBpbWcgbGkgbGluZWFyR3JhZGllbnQgbWFya2VyIG9sIHAgcGF0aCBwYXR0ZXJuIHByZSByZWN0IHNtYWxsIHNwYW4gc3RvcCBzdHJvbmcgc3R5bGUgc3ViIHN1cCBzdmcgdGFibGUgdGV4dCB0aGVhZCB0Ym9keSB0c3BhbiB0ZCB0aCB0ciB1IHVsICN0ZXh0XCIuc3BsaXQoXCIgXCIpO2YuYWxsb3dlZEF0dHJpYnV0ZXM9XG5cImFyaWEtY29udHJvbHMgYXJpYS1kZXNjcmliZWRieSBhcmlhLWV4cGFuZGVkIGFyaWEtaGFzcG9wdXAgYXJpYS1oaWRkZW4gYXJpYS1sYWJlbCBhcmlhLWxhYmVsbGVkYnkgYXJpYS1saXZlIGFyaWEtcHJlc3NlZCBhcmlhLXJlYWRvbmx5IGFyaWEtcm9sZWRlc2NyaXB0aW9uIGFyaWEtc2VsZWN0ZWQgY2xhc3MgY2xpcC1wYXRoIGNvbG9yIGNvbHNwYW4gY3ggY3kgZCBkeCBkeSBkaXNhYmxlZCBmaWxsIGhlaWdodCBocmVmIGlkIGluIG1hcmtlckhlaWdodCBtYXJrZXJXaWR0aCBvZmZzZXQgb3BhY2l0eSBvcmllbnQgcGFkZGluZyBwYWRkaW5nTGVmdCBwYXR0ZXJuVW5pdHMgciByZWZYIHJlZlkgcm9sZSBzY29wZSBzbG9wZSBzcmMgc3RhcnRPZmZzZXQgc3RkRGV2aWF0aW9uIHN0cm9rZSBzdHJva2UtbGluZWNhcCBzdHJva2Utd2lkdGggc3R5bGUgcmVzdWx0IHJvd3NwYW4gc3VtbWFyeSB0YXJnZXQgdGFiaW5kZXggdGV4dC1hbGlnbiB0ZXh0QW5jaG9yIHRleHRMZW5ndGggdHlwZSB2YWxpZ24gd2lkdGggeCB4MSB4MiB5IHkxIHkyIHpJbmRleFwiLnNwbGl0KFwiIFwiKTtcbmYuYWxsb3dlZFJlZmVyZW5jZXM9XCJodHRwczovLyBodHRwOi8vIG1haWx0bzogLyAuLi8gLi8gI1wiLnNwbGl0KFwiIFwiKTtyZXR1cm4gZn0oKX0pO08oZSxcIkNvcmUvRm9ybWF0VXRpbGl0aWVzLmpzXCIsW2VbXCJDb3JlL09wdGlvbnMuanNcIl0sZVtcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihlLGIpe2Z1bmN0aW9uIEQoYix2LGYsZCl7Yj0rYnx8MDt2PSt2O3ZhciBxPXoubGFuZyxrPShiLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpWzFdfHxcIlwiKS5zcGxpdChcImVcIilbMF0ubGVuZ3RoLGw9Yi50b1N0cmluZygpLnNwbGl0KFwiZVwiKSxOPXY7aWYoLTE9PT12KXY9TWF0aC5taW4oaywyMCk7ZWxzZSBpZighQyh2KSl2PTI7ZWxzZSBpZih2JiZsWzFdJiYwPmxbMV0pe3ZhciB1PXYrICtsWzFdOzA8PXU/KGxbMF09KCtsWzBdKS50b0V4cG9uZW50aWFsKHUpLnNwbGl0KFwiZVwiKVswXSx2PXUpOihsWzBdPWxbMF0uc3BsaXQoXCIuXCIpWzBdfHwwLGI9MjA+dj8obFswXSpNYXRoLnBvdygxMCxsWzFdKSkudG9GaXhlZCh2KTpcbjAsbFsxXT0wKX11PShNYXRoLmFicyhsWzFdP2xbMF06YikrTWF0aC5wb3coMTAsLU1hdGgubWF4KHYsayktMSkpLnRvRml4ZWQodik7az1TdHJpbmcoeCh1KSk7dmFyIG49MzxrLmxlbmd0aD9rLmxlbmd0aCUzOjA7Zj1CKGYscS5kZWNpbWFsUG9pbnQpO2Q9QihkLHEudGhvdXNhbmRzU2VwKTtiPSgwPmI/XCItXCI6XCJcIikrKG4/ay5zdWJzdHIoMCxuKStkOlwiXCIpO2I9MD4rbFsxXSYmIU4/XCIwXCI6YitrLnN1YnN0cihuKS5yZXBsYWNlKC8oXFxkezN9KSg/PVxcZCkvZyxcIiQxXCIrZCk7diYmKGIrPWYrdS5zbGljZSgtdikpO2xbMV0mJjAhPT0rYiYmKGIrPVwiZVwiK2xbMV0pO3JldHVybiBifXZhciB6PWUuZGVmYXVsdE9wdGlvbnMsSD1lLmRlZmF1bHRUaW1lLEc9Yi5nZXROZXN0ZWRQcm9wZXJ0eSxDPWIuaXNOdW1iZXIsQj1iLnBpY2sseD1iLnBJbnQ7cmV0dXJue2RhdGVGb3JtYXQ6ZnVuY3Rpb24oYix2LGYpe3JldHVybiBILmRhdGVGb3JtYXQoYix2LGYpfSxmb3JtYXQ6ZnVuY3Rpb24oYix2LFxuZil7dmFyIGQ9XCJ7XCIscT0hMSxrPS9mJC8sbD0vXFwuKFswLTldKS8sTj16LmxhbmcsdT1mJiZmLnRpbWV8fEg7Zj1mJiZmLm51bWJlckZvcm1hdHRlcnx8RDtmb3IodmFyIG49W107Yjspe3ZhciBKPWIuaW5kZXhPZihkKTtpZigtMT09PUopYnJlYWs7dmFyIEU9Yi5zbGljZSgwLEopO2lmKHEpe0U9RS5zcGxpdChcIjpcIik7ZD1HKEUuc2hpZnQoKXx8XCJcIix2KTtpZihFLmxlbmd0aCYmXCJudW1iZXJcIj09PXR5cGVvZiBkKWlmKEU9RS5qb2luKFwiOlwiKSxrLnRlc3QoRSkpe3ZhciBtPXBhcnNlSW50KChFLm1hdGNoKGwpfHxbXCJcIixcIi0xXCJdKVsxXSwxMCk7bnVsbCE9PWQmJihkPWYoZCxtLE4uZGVjaW1hbFBvaW50LC0xPEUuaW5kZXhPZihcIixcIik/Ti50aG91c2FuZHNTZXA6XCJcIikpfWVsc2UgZD11LmRhdGVGb3JtYXQoRSxkKTtuLnB1c2goZCl9ZWxzZSBuLnB1c2goRSk7Yj1iLnNsaWNlKEorMSk7ZD0ocT0hcSk/XCJ9XCI6XCJ7XCJ9bi5wdXNoKGIpO3JldHVybiBuLmpvaW4oXCJcIil9LG51bWJlckZvcm1hdDpEfX0pO1xuTyhlLFwiQ29yZS9SZW5kZXJlci9TVkcvU1ZHRWxlbWVudC5qc1wiLFtlW1wiQ29yZS9BbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmpzXCJdLGVbXCJDb3JlL1JlbmRlcmVyL0hUTUwvQVNULmpzXCJdLGVbXCJDb3JlL0NvbG9yL0NvbG9yLmpzXCJdLGVbXCJDb3JlL0dsb2JhbHMuanNcIl0sZVtcIkNvcmUvQ29sb3IvUGFsZXR0ZS5qc1wiXSxlW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGUsYixJLHosSCxHKXt2YXIgRD1lLmFuaW1hdGUsQj1lLmFuaW1PYmplY3QseD1lLnN0b3Asdz16LmRlZzJyYWQsdj16LmRvYyxmPXoubm9vcCxkPXouc3ZnLHE9ei5TVkdfTlMsaz16LndpbixsPUcuYWRkRXZlbnQsTj1HLmF0dHIsdT1HLmNyZWF0ZUVsZW1lbnQsbj1HLmNzcyxKPUcuZGVmaW5lZCxFPUcuZXJhc2UsbT1HLmV4dGVuZCxjPUcuZmlyZUV2ZW50LGc9Ry5pc0FycmF5LGE9Ry5pc0Z1bmN0aW9uLGg9Ry5pc051bWJlcixyPUcuaXNTdHJpbmcsQT1HLm1lcmdlLHk9Ry5vYmplY3RFYWNoLEw9XG5HLnBpY2ssUD1HLnBJbnQsUj1HLnN5bmNUaW1lb3V0LFY9Ry51bmlxdWVLZXk7ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmVsZW1lbnQ9dm9pZCAwO3RoaXMub25FdmVudHM9e307dGhpcy5vcGFjaXR5PTE7dGhpcy5yZW5kZXJlcj12b2lkIDA7dGhpcy5TVkdfTlM9cTt0aGlzLnN5bWJvbEN1c3RvbUF0dHJpYnM9XCJ4IHkgd2lkdGggaGVpZ2h0IHIgc3RhcnQgZW5kIGlubmVyUiBhbmNob3JYIGFuY2hvclkgcm91bmRlZFwiLnNwbGl0KFwiIFwiKX1lLnByb3RvdHlwZS5fZGVmYXVsdEdldHRlcj1mdW5jdGlvbihhKXthPUwodGhpc1thK1wiVmFsdWVcIl0sdGhpc1thXSx0aGlzLmVsZW1lbnQ/dGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZShhKTpudWxsLDApOy9eW1xcLTAtOVxcLl0rJC8udGVzdChhKSYmKGE9cGFyc2VGbG9hdChhKSk7cmV0dXJuIGF9O2UucHJvdG90eXBlLl9kZWZhdWx0U2V0dGVyPWZ1bmN0aW9uKGEsdCxwKXtwLnNldEF0dHJpYnV0ZSh0LGEpfTtlLnByb3RvdHlwZS5hZGQ9XG5mdW5jdGlvbihhKXt2YXIgdD10aGlzLnJlbmRlcmVyLHA9dGhpcy5lbGVtZW50O2EmJih0aGlzLnBhcmVudEdyb3VwPWEpO3RoaXMucGFyZW50SW52ZXJ0ZWQ9YSYmYS5pbnZlcnRlZDtcInVuZGVmaW5lZFwiIT09dHlwZW9mIHRoaXMudGV4dFN0ciYmXCJ0ZXh0XCI9PT10aGlzLmVsZW1lbnQubm9kZU5hbWUmJnQuYnVpbGRUZXh0KHRoaXMpO3RoaXMuYWRkZWQ9ITA7aWYoIWF8fGEuaGFuZGxlWnx8dGhpcy56SW5kZXgpdmFyIGM9dGhpcy56SW5kZXhTZXR0ZXIoKTtjfHwoYT9hLmVsZW1lbnQ6dC5ib3gpLmFwcGVuZENoaWxkKHApO2lmKHRoaXMub25BZGQpdGhpcy5vbkFkZCgpO3JldHVybiB0aGlzfTtlLnByb3RvdHlwZS5hZGRDbGFzcz1mdW5jdGlvbihhLHQpe3ZhciBwPXQ/XCJcIjp0aGlzLmF0dHIoXCJjbGFzc1wiKXx8XCJcIjthPShhfHxcIlwiKS5zcGxpdCgvIC9nKS5yZWR1Y2UoZnVuY3Rpb24oYSx0KXstMT09PXAuaW5kZXhPZih0KSYmYS5wdXNoKHQpO3JldHVybiBhfSxwP1twXTpbXSkuam9pbihcIiBcIik7XG5hIT09cCYmdGhpcy5hdHRyKFwiY2xhc3NcIixhKTtyZXR1cm4gdGhpc307ZS5wcm90b3R5cGUuYWZ0ZXJTZXR0ZXJzPWZ1bmN0aW9uKCl7dGhpcy5kb1RyYW5zZm9ybSYmKHRoaXMudXBkYXRlVHJhbnNmb3JtKCksdGhpcy5kb1RyYW5zZm9ybT0hMSl9O2UucHJvdG90eXBlLmFsaWduPWZ1bmN0aW9uKGEsdCxwKXt2YXIgYz17fSxnPXRoaXMucmVuZGVyZXIsZD1nLmFsaWduZWRPYmplY3RzLEYsaCxLO2lmKGEpe2lmKHRoaXMuYWxpZ25PcHRpb25zPWEsdGhpcy5hbGlnbkJ5VHJhbnNsYXRlPXQsIXB8fHIocCkpdGhpcy5hbGlnblRvPUY9cHx8XCJyZW5kZXJlclwiLEUoZCx0aGlzKSxkLnB1c2godGhpcykscD12b2lkIDB9ZWxzZSBhPXRoaXMuYWxpZ25PcHRpb25zLHQ9dGhpcy5hbGlnbkJ5VHJhbnNsYXRlLEY9dGhpcy5hbGlnblRvO3A9TChwLGdbRl0sXCJzY3JvbGxhYmxlUGxvdEJveFwiPT09Rj9nLnBsb3RCb3g6dm9pZCAwLGcpO0Y9YS5hbGlnbjt2YXIgTT1hLnZlcnRpY2FsQWxpZ247Zz1cbihwLnh8fDApKyhhLnh8fDApO2Q9KHAueXx8MCkrKGEueXx8MCk7XCJyaWdodFwiPT09Rj9oPTE6XCJjZW50ZXJcIj09PUYmJihoPTIpO2gmJihnKz0ocC53aWR0aC0oYS53aWR0aHx8MCkpL2gpO2NbdD9cInRyYW5zbGF0ZVhcIjpcInhcIl09TWF0aC5yb3VuZChnKTtcImJvdHRvbVwiPT09TT9LPTE6XCJtaWRkbGVcIj09PU0mJihLPTIpO0smJihkKz0ocC5oZWlnaHQtKGEuaGVpZ2h0fHwwKSkvSyk7Y1t0P1widHJhbnNsYXRlWVwiOlwieVwiXT1NYXRoLnJvdW5kKGQpO3RoaXNbdGhpcy5wbGFjZWQ/XCJhbmltYXRlXCI6XCJhdHRyXCJdKGMpO3RoaXMucGxhY2VkPSEwO3RoaXMuYWxpZ25BdHRyPWM7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLmFsaWduU2V0dGVyPWZ1bmN0aW9uKGEpe3ZhciB0PXtsZWZ0Olwic3RhcnRcIixjZW50ZXI6XCJtaWRkbGVcIixyaWdodDpcImVuZFwifTt0W2FdJiYodGhpcy5hbGlnblZhbHVlPWEsdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcInRleHQtYW5jaG9yXCIsdFthXSkpfTtlLnByb3RvdHlwZS5hbmltYXRlPVxuZnVuY3Rpb24oYSx0LHApe3ZhciBjPXRoaXMsZz1CKEwodCx0aGlzLnJlbmRlcmVyLmdsb2JhbEFuaW1hdGlvbiwhMCkpO3Q9Zy5kZWZlcjtMKHYuaGlkZGVuLHYubXNIaWRkZW4sdi53ZWJraXRIaWRkZW4sITEpJiYoZy5kdXJhdGlvbj0wKTswIT09Zy5kdXJhdGlvbj8ocCYmKGcuY29tcGxldGU9cCksUihmdW5jdGlvbigpe2MuZWxlbWVudCYmRChjLGEsZyl9LHQpKToodGhpcy5hdHRyKGEsdm9pZCAwLHApLHkoYSxmdW5jdGlvbihhLHApe2cuc3RlcCYmZy5zdGVwLmNhbGwodGhpcyxhLHtwcm9wOnAscG9zOjEsZWxlbTp0aGlzfSl9LHRoaXMpKTtyZXR1cm4gdGhpc307ZS5wcm90b3R5cGUuYXBwbHlUZXh0T3V0bGluZT1mdW5jdGlvbihhKXt2YXIgdD10aGlzLmVsZW1lbnQ7LTEhPT1hLmluZGV4T2YoXCJjb250cmFzdFwiKSYmKGE9YS5yZXBsYWNlKC9jb250cmFzdC9nLHRoaXMucmVuZGVyZXIuZ2V0Q29udHJhc3QodC5zdHlsZS5maWxsKSkpO3ZhciBwPWEuc3BsaXQoXCIgXCIpO2E9cFtwLmxlbmd0aC1cbjFdO2lmKChwPXBbMF0pJiZcIm5vbmVcIiE9PXAmJnouc3ZnKXt0aGlzLmZha2VUUz0hMDt0aGlzLnlTZXR0ZXI9dGhpcy54U2V0dGVyO3A9cC5yZXBsYWNlKC8oXltcXGRcXC5dKykoLio/KSQvZyxmdW5jdGlvbihhLHAsdCl7cmV0dXJuIDIqTnVtYmVyKHApK3R9KTt0aGlzLnJlbW92ZVRleHRPdXRsaW5lKCk7dmFyIGM9di5jcmVhdGVFbGVtZW50TlMocSxcInRzcGFuXCIpO04oYyx7XCJjbGFzc1wiOlwiaGlnaGNoYXJ0cy10ZXh0LW91dGxpbmVcIixmaWxsOmEsc3Ryb2tlOmEsXCJzdHJva2Utd2lkdGhcIjpwLFwic3Ryb2tlLWxpbmVqb2luXCI6XCJyb3VuZFwifSk7W10uZm9yRWFjaC5jYWxsKHQuY2hpbGROb2RlcyxmdW5jdGlvbihhKXt2YXIgcD1hLmNsb25lTm9kZSghMCk7cC5yZW1vdmVBdHRyaWJ1dGUmJltcImZpbGxcIixcInN0cm9rZVwiLFwic3Ryb2tlLXdpZHRoXCIsXCJzdHJva2VcIl0uZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gcC5yZW1vdmVBdHRyaWJ1dGUoYSl9KTtjLmFwcGVuZENoaWxkKHApfSk7dmFyIGc9XG52LmNyZWF0ZUVsZW1lbnROUyhxLFwidHNwYW5cIik7Zy50ZXh0Q29udGVudD1cIlxcdTIwMGJcIjtbXCJ4XCIsXCJ5XCJdLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIHA9dC5nZXRBdHRyaWJ1dGUoYSk7cCYmZy5zZXRBdHRyaWJ1dGUoYSxwKX0pO2MuYXBwZW5kQ2hpbGQoZyk7dC5pbnNlcnRCZWZvcmUoYyx0LmZpcnN0Q2hpbGQpfX07ZS5wcm90b3R5cGUuYXR0cj1mdW5jdGlvbihhLHQscCxjKXt2YXIgZz10aGlzLmVsZW1lbnQsZD10aGlzLnN5bWJvbEN1c3RvbUF0dHJpYnMsaCxyPXRoaXMsSyxtO2lmKFwic3RyaW5nXCI9PT10eXBlb2YgYSYmXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiB0KXt2YXIgTT1hO2E9e307YVtNXT10fVwic3RyaW5nXCI9PT10eXBlb2YgYT9yPSh0aGlzW2ErXCJHZXR0ZXJcIl18fHRoaXMuX2RlZmF1bHRHZXR0ZXIpLmNhbGwodGhpcyxhLGcpOih5KGEsZnVuY3Rpb24ocCx0KXtLPSExO2N8fHgodGhpcyx0KTt0aGlzLnN5bWJvbE5hbWUmJi0xIT09ZC5pbmRleE9mKHQpJiYoaHx8KHRoaXMuc3ltYm9sQXR0cihhKSxcbmg9ITApLEs9ITApOyF0aGlzLnJvdGF0aW9ufHxcInhcIiE9PXQmJlwieVwiIT09dHx8KHRoaXMuZG9UcmFuc2Zvcm09ITApO0t8fChtPXRoaXNbdCtcIlNldHRlclwiXXx8dGhpcy5fZGVmYXVsdFNldHRlcixtLmNhbGwodGhpcyxwLHQsZyksIXRoaXMuc3R5bGVkTW9kZSYmdGhpcy5zaGFkb3dzJiYvXih3aWR0aHxoZWlnaHR8dmlzaWJpbGl0eXx4fHl8ZHx0cmFuc2Zvcm18Y3h8Y3l8cikkLy50ZXN0KHQpJiZ0aGlzLnVwZGF0ZVNoYWRvd3ModCxwLG0pKX0sdGhpcyksdGhpcy5hZnRlclNldHRlcnMoKSk7cCYmcC5jYWxsKHRoaXMpO3JldHVybiByfTtlLnByb3RvdHlwZS5jbGlwPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmF0dHIoXCJjbGlwLXBhdGhcIixhP1widXJsKFwiK3RoaXMucmVuZGVyZXIudXJsK1wiI1wiK2EuaWQrXCIpXCI6XCJub25lXCIpfTtlLnByb3RvdHlwZS5jcmlzcD1mdW5jdGlvbihhLHQpe3Q9dHx8YS5zdHJva2VXaWR0aHx8MDt2YXIgcD1NYXRoLnJvdW5kKHQpJTIvMjthLng9TWF0aC5mbG9vcihhLnh8fFxudGhpcy54fHwwKStwO2EueT1NYXRoLmZsb29yKGEueXx8dGhpcy55fHwwKStwO2Eud2lkdGg9TWF0aC5mbG9vcigoYS53aWR0aHx8dGhpcy53aWR0aHx8MCktMipwKTthLmhlaWdodD1NYXRoLmZsb29yKChhLmhlaWdodHx8dGhpcy5oZWlnaHR8fDApLTIqcCk7SihhLnN0cm9rZVdpZHRoKSYmKGEuc3Ryb2tlV2lkdGg9dCk7cmV0dXJuIGF9O2UucHJvdG90eXBlLmNvbXBsZXhDb2xvcj1mdW5jdGlvbihhLHQscCl7dmFyIGQ9dGhpcy5yZW5kZXJlcixoLHIsRixtLEssTSxmLGIsbCxuLHU9W10scTtjKHRoaXMucmVuZGVyZXIsXCJjb21wbGV4Q29sb3JcIix7YXJnczphcmd1bWVudHN9LGZ1bmN0aW9uKCl7YS5yYWRpYWxHcmFkaWVudD9yPVwicmFkaWFsR3JhZGllbnRcIjphLmxpbmVhckdyYWRpZW50JiYocj1cImxpbmVhckdyYWRpZW50XCIpO2lmKHIpe0Y9YVtyXTtLPWQuZ3JhZGllbnRzO009YS5zdG9wcztsPXAucmFkaWFsUmVmZXJlbmNlO2coRikmJihhW3JdPUY9e3gxOkZbMF0seTE6RlsxXSxcbngyOkZbMl0seTI6RlszXSxncmFkaWVudFVuaXRzOlwidXNlclNwYWNlT25Vc2VcIn0pO1wicmFkaWFsR3JhZGllbnRcIj09PXImJmwmJiFKKEYuZ3JhZGllbnRVbml0cykmJihtPUYsRj1BKEYsZC5nZXRSYWRpYWxBdHRyKGwsbSkse2dyYWRpZW50VW5pdHM6XCJ1c2VyU3BhY2VPblVzZVwifSkpO3koRixmdW5jdGlvbihhLHApe1wiaWRcIiE9PXAmJnUucHVzaChwLGEpfSk7eShNLGZ1bmN0aW9uKGEpe3UucHVzaChhKX0pO3U9dS5qb2luKFwiLFwiKTtpZihLW3VdKW49S1t1XS5hdHRyKFwiaWRcIik7ZWxzZXtGLmlkPW49VigpO3ZhciBjPUtbdV09ZC5jcmVhdGVFbGVtZW50KHIpLmF0dHIoRikuYWRkKGQuZGVmcyk7Yy5yYWRBdHRyPW07Yy5zdG9wcz1bXTtNLmZvckVhY2goZnVuY3Rpb24oYSl7MD09PWFbMV0uaW5kZXhPZihcInJnYmFcIik/KGg9SS5wYXJzZShhWzFdKSxmPWguZ2V0KFwicmdiXCIpLGI9aC5nZXQoXCJhXCIpKTooZj1hWzFdLGI9MSk7YT1kLmNyZWF0ZUVsZW1lbnQoXCJzdG9wXCIpLmF0dHIoe29mZnNldDphWzBdLFxuXCJzdG9wLWNvbG9yXCI6ZixcInN0b3Atb3BhY2l0eVwiOmJ9KS5hZGQoYyk7Yy5zdG9wcy5wdXNoKGEpfSl9cT1cInVybChcIitkLnVybCtcIiNcIituK1wiKVwiO3Auc2V0QXR0cmlidXRlKHQscSk7cC5ncmFkaWVudD11O2EudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gcX19fSl9O2UucHJvdG90eXBlLmNzcz1mdW5jdGlvbihhKXt2YXIgdD10aGlzLnN0eWxlcyxwPXt9LGM9dGhpcy5lbGVtZW50LGc9W1widGV4dE91dGxpbmVcIixcInRleHRPdmVyZmxvd1wiLFwid2lkdGhcIl0saD1cIlwiLEY9IXQ7YSYmYS5jb2xvciYmKGEuZmlsbD1hLmNvbG9yKTt0JiZ5KGEsZnVuY3Rpb24oYSxjKXt0JiZ0W2NdIT09YSYmKHBbY109YSxGPSEwKX0pO2lmKEYpe3QmJihhPW0odCxwKSk7aWYoYSlpZihudWxsPT09YS53aWR0aHx8XCJhdXRvXCI9PT1hLndpZHRoKWRlbGV0ZSB0aGlzLnRleHRXaWR0aDtlbHNlIGlmKFwidGV4dFwiPT09Yy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiZhLndpZHRoKXZhciByPXRoaXMudGV4dFdpZHRoPVxuUChhLndpZHRoKTt0aGlzLnN0eWxlcz1hO3ImJiFkJiZ0aGlzLnJlbmRlcmVyLmZvckV4cG9ydCYmZGVsZXRlIGEud2lkdGg7aWYoYy5uYW1lc3BhY2VVUkk9PT10aGlzLlNWR19OUyl7dmFyIEs9ZnVuY3Rpb24oYSxwKXtyZXR1cm5cIi1cIitwLnRvTG93ZXJDYXNlKCl9O3koYSxmdW5jdGlvbihhLHApey0xPT09Zy5pbmRleE9mKHApJiYoaCs9cC5yZXBsYWNlKC8oW0EtWl0pL2csSykrXCI6XCIrYStcIjtcIil9KTtoJiZOKGMsXCJzdHlsZVwiLGgpfWVsc2UgbihjLGEpO3RoaXMuYWRkZWQmJihcInRleHRcIj09PXRoaXMuZWxlbWVudC5ub2RlTmFtZSYmdGhpcy5yZW5kZXJlci5idWlsZFRleHQodGhpcyksYSYmYS50ZXh0T3V0bGluZSYmdGhpcy5hcHBseVRleHRPdXRsaW5lKGEudGV4dE91dGxpbmUpKX1yZXR1cm4gdGhpc307ZS5wcm90b3R5cGUuZGFzaHN0eWxlU2V0dGVyPWZ1bmN0aW9uKGEpe3ZhciB0PXRoaXNbXCJzdHJva2Utd2lkdGhcIl07XCJpbmhlcml0XCI9PT10JiYodD0xKTtpZihhPWEmJmEudG9Mb3dlckNhc2UoKSl7dmFyIHA9XG5hLnJlcGxhY2UoXCJzaG9ydGRhc2hkb3Rkb3RcIixcIjMsMSwxLDEsMSwxLFwiKS5yZXBsYWNlKFwic2hvcnRkYXNoZG90XCIsXCIzLDEsMSwxXCIpLnJlcGxhY2UoXCJzaG9ydGRvdFwiLFwiMSwxLFwiKS5yZXBsYWNlKFwic2hvcnRkYXNoXCIsXCIzLDEsXCIpLnJlcGxhY2UoXCJsb25nZGFzaFwiLFwiOCwzLFwiKS5yZXBsYWNlKC9kb3QvZyxcIjEsMyxcIikucmVwbGFjZShcImRhc2hcIixcIjQsMyxcIikucmVwbGFjZSgvLCQvLFwiXCIpLnNwbGl0KFwiLFwiKTtmb3IoYT1wLmxlbmd0aDthLS07KXBbYV09XCJcIitQKHBbYV0pKkwodCxOYU4pO2E9cC5qb2luKFwiLFwiKS5yZXBsYWNlKC9OYU4vZyxcIm5vbmVcIik7dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZShcInN0cm9rZS1kYXNoYXJyYXlcIixhKX19O2UucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLHQ9YS5lbGVtZW50fHx7fSxwPWEucmVuZGVyZXIsYz10Lm93bmVyU1ZHRWxlbWVudCxnPXAuaXNTVkcmJlwiU1BBTlwiPT09dC5ub2RlTmFtZSYmYS5wYXJlbnRHcm91cHx8XG52b2lkIDA7dC5vbmNsaWNrPXQub25tb3VzZW91dD10Lm9ubW91c2VvdmVyPXQub25tb3VzZW1vdmU9dC5wb2ludD1udWxsO3goYSk7aWYoYS5jbGlwUGF0aCYmYyl7dmFyIGQ9YS5jbGlwUGF0aDtbXS5mb3JFYWNoLmNhbGwoYy5xdWVyeVNlbGVjdG9yQWxsKFwiW2NsaXAtcGF0aF0sW0NMSVAtUEFUSF1cIiksZnVuY3Rpb24oYSl7LTE8YS5nZXRBdHRyaWJ1dGUoXCJjbGlwLXBhdGhcIikuaW5kZXhPZihkLmVsZW1lbnQuaWQpJiZhLnJlbW92ZUF0dHJpYnV0ZShcImNsaXAtcGF0aFwiKX0pO2EuY2xpcFBhdGg9ZC5kZXN0cm95KCl9aWYoYS5zdG9wcyl7Zm9yKGM9MDtjPGEuc3RvcHMubGVuZ3RoO2MrKylhLnN0b3BzW2NdLmRlc3Ryb3koKTthLnN0b3BzLmxlbmd0aD0wO2Euc3RvcHM9dm9pZCAwfWEuc2FmZVJlbW92ZUNoaWxkKHQpO2ZvcihwLnN0eWxlZE1vZGV8fGEuZGVzdHJveVNoYWRvd3MoKTtnJiZnLmRpdiYmMD09PWcuZGl2LmNoaWxkTm9kZXMubGVuZ3RoOyl0PWcucGFyZW50R3JvdXAsXG5hLnNhZmVSZW1vdmVDaGlsZChnLmRpdiksZGVsZXRlIGcuZGl2LGc9dDthLmFsaWduVG8mJkUocC5hbGlnbmVkT2JqZWN0cyxhKTt5KGEsZnVuY3Rpb24ocCxjKXthW2NdJiZhW2NdLnBhcmVudEdyb3VwPT09YSYmYVtjXS5kZXN0cm95JiZhW2NdLmRlc3Ryb3koKTtkZWxldGUgYVtjXX0pfTtlLnByb3RvdHlwZS5kZXN0cm95U2hhZG93cz1mdW5jdGlvbigpeyh0aGlzLnNoYWRvd3N8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3RoaXMuc2FmZVJlbW92ZUNoaWxkKGEpfSx0aGlzKTt0aGlzLnNoYWRvd3M9dm9pZCAwfTtlLnByb3RvdHlwZS5kZXN0cm95VGV4dFBhdGg9ZnVuY3Rpb24oYSxjKXt2YXIgcD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidGV4dFwiKVswXTtpZihwKXtpZihwLnJlbW92ZUF0dHJpYnV0ZShcImR4XCIpLHAucmVtb3ZlQXR0cmlidXRlKFwiZHlcIiksYy5lbGVtZW50LnNldEF0dHJpYnV0ZShcImlkXCIsXCJcIiksdGhpcy50ZXh0UGF0aFdyYXBwZXImJnAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ0ZXh0UGF0aFwiKS5sZW5ndGgpe2ZvcihhPVxudGhpcy50ZXh0UGF0aFdyYXBwZXIuZWxlbWVudC5jaGlsZE5vZGVzO2EubGVuZ3RoOylwLmFwcGVuZENoaWxkKGFbMF0pO3AucmVtb3ZlQ2hpbGQodGhpcy50ZXh0UGF0aFdyYXBwZXIuZWxlbWVudCl9fWVsc2UgaWYoYS5nZXRBdHRyaWJ1dGUoXCJkeFwiKXx8YS5nZXRBdHRyaWJ1dGUoXCJkeVwiKSlhLnJlbW92ZUF0dHJpYnV0ZShcImR4XCIpLGEucmVtb3ZlQXR0cmlidXRlKFwiZHlcIik7dGhpcy50ZXh0UGF0aFdyYXBwZXImJih0aGlzLnRleHRQYXRoV3JhcHBlcj10aGlzLnRleHRQYXRoV3JhcHBlci5kZXN0cm95KCkpfTtlLnByb3RvdHlwZS5kU2V0dGVyPWZ1bmN0aW9uKGEsYyxwKXtnKGEpJiYoXCJzdHJpbmdcIj09PXR5cGVvZiBhWzBdJiYoYT10aGlzLnJlbmRlcmVyLnBhdGhUb1NlZ21lbnRzKGEpKSx0aGlzLnBhdGhBcnJheT1hLGE9YS5yZWR1Y2UoZnVuY3Rpb24oYSxwLGMpe3JldHVybiBwJiZwLmpvaW4/KGM/YStcIiBcIjpcIlwiKStwLmpvaW4oXCIgXCIpOihwfHxcIlwiKS50b1N0cmluZygpfSxcIlwiKSk7XG4vKE5hTnwgezJ9fF4kKS8udGVzdChhKSYmKGE9XCJNIDAgMFwiKTt0aGlzW2NdIT09YSYmKHAuc2V0QXR0cmlidXRlKGMsYSksdGhpc1tjXT1hKX07ZS5wcm90b3R5cGUuZmFkZU91dD1mdW5jdGlvbihhKXt2YXIgYz10aGlzO2MuYW5pbWF0ZSh7b3BhY2l0eTowfSx7ZHVyYXRpb246TChhLDE1MCksY29tcGxldGU6ZnVuY3Rpb24oKXtjLmF0dHIoe3k6LTk5OTl9KS5oaWRlKCl9fSl9O2UucHJvdG90eXBlLmZpbGxTZXR0ZXI9ZnVuY3Rpb24oYSxjLHApe1wic3RyaW5nXCI9PT10eXBlb2YgYT9wLnNldEF0dHJpYnV0ZShjLGEpOmEmJnRoaXMuY29tcGxleENvbG9yKGEsYyxwKX07ZS5wcm90b3R5cGUuZ2V0QkJveD1mdW5jdGlvbihjLHQpe3ZhciBwPXRoaXMucmVuZGVyZXIsZz10aGlzLmVsZW1lbnQsZD10aGlzLnN0eWxlcyxoPXRoaXMudGV4dFN0cixGPXAuY2FjaGUscj1wLmNhY2hlS2V5cyxLPWcubmFtZXNwYWNlVVJJPT09dGhpcy5TVkdfTlM7dD1MKHQsdGhpcy5yb3RhdGlvbiwwKTt2YXIgQT1cbnAuc3R5bGVkTW9kZT9nJiZlLnByb3RvdHlwZS5nZXRTdHlsZS5jYWxsKGcsXCJmb250LXNpemVcIik6ZCYmZC5mb250U2l6ZSxmO2lmKEooaCkpe3ZhciBiPWgudG9TdHJpbmcoKTstMT09PWIuaW5kZXhPZihcIjxcIikmJihiPWIucmVwbGFjZSgvWzAtOV0vZyxcIjBcIikpO2IrPVtcIlwiLHQsQSx0aGlzLnRleHRXaWR0aCxkJiZkLnRleHRPdmVyZmxvdyxkJiZkLmZvbnRXZWlnaHRdLmpvaW4oKX1iJiYhYyYmKGY9RltiXSk7aWYoIWYpe2lmKEt8fHAuZm9yRXhwb3J0KXt0cnl7dmFyIHk9dGhpcy5mYWtlVFMmJmZ1bmN0aW9uKGEpe3ZhciBwPWcucXVlcnlTZWxlY3RvcihcIi5oaWdoY2hhcnRzLXRleHQtb3V0bGluZVwiKTtwJiZuKHAse2Rpc3BsYXk6YX0pfTthKHkpJiZ5KFwibm9uZVwiKTtmPWcuZ2V0QkJveD9tKHt9LGcuZ2V0QkJveCgpKTp7d2lkdGg6Zy5vZmZzZXRXaWR0aCxoZWlnaHQ6Zy5vZmZzZXRIZWlnaHR9O2EoeSkmJnkoXCJcIil9Y2F0Y2goWSl7XCJcIn1pZighZnx8MD5mLndpZHRoKWY9e3dpZHRoOjAsXG5oZWlnaHQ6MH19ZWxzZSBmPXRoaXMuaHRtbEdldEJCb3goKTtwLmlzU1ZHJiYoYz1mLndpZHRoLHA9Zi5oZWlnaHQsSyYmKGYuaGVpZ2h0PXA9e1wiMTFweCwxN1wiOjE0LFwiMTNweCwyMFwiOjE2fVtkJiZkLmZvbnRTaXplK1wiLFwiK01hdGgucm91bmQocCldfHxwKSx0JiYoZD10KncsZi53aWR0aD1NYXRoLmFicyhwKk1hdGguc2luKGQpKStNYXRoLmFicyhjKk1hdGguY29zKGQpKSxmLmhlaWdodD1NYXRoLmFicyhwKk1hdGguY29zKGQpKStNYXRoLmFicyhjKk1hdGguc2luKGQpKSkpO2lmKGImJjA8Zi5oZWlnaHQpe2Zvcig7MjUwPHIubGVuZ3RoOylkZWxldGUgRltyLnNoaWZ0KCldO0ZbYl18fHIucHVzaChiKTtGW2JdPWZ9fXJldHVybiBmfTtlLnByb3RvdHlwZS5nZXRTdHlsZT1mdW5jdGlvbihhKXtyZXR1cm4gay5nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudHx8dGhpcyxcIlwiKS5nZXRQcm9wZXJ0eVZhbHVlKGEpfTtlLnByb3RvdHlwZS5oYXNDbGFzcz1mdW5jdGlvbihhKXtyZXR1cm4tMSE9PVxuKFwiXCIrdGhpcy5hdHRyKFwiY2xhc3NcIikpLnNwbGl0KFwiIFwiKS5pbmRleE9mKGEpfTtlLnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKGEpe2E/dGhpcy5hdHRyKHt5Oi05OTk5fSk6dGhpcy5hdHRyKHt2aXNpYmlsaXR5OlwiaGlkZGVuXCJ9KTtyZXR1cm4gdGhpc307ZS5wcm90b3R5cGUuaHRtbEdldEJCb3g9ZnVuY3Rpb24oKXtyZXR1cm57aGVpZ2h0OjAsd2lkdGg6MCx4OjAseTowfX07ZS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihhLHQpe3RoaXMuZWxlbWVudD1cInNwYW5cIj09PXQ/dSh0KTp2LmNyZWF0ZUVsZW1lbnROUyh0aGlzLlNWR19OUyx0KTt0aGlzLnJlbmRlcmVyPWE7Yyh0aGlzLFwiYWZ0ZXJJbml0XCIpfTtlLnByb3RvdHlwZS5pbnZlcnQ9ZnVuY3Rpb24oYSl7dGhpcy5pbnZlcnRlZD1hO3RoaXMudXBkYXRlVHJhbnNmb3JtKCk7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLm9uPWZ1bmN0aW9uKGEsYyl7dmFyIHA9dGhpcy5vbkV2ZW50cztpZihwW2FdKXBbYV0oKTtwW2FdPWwodGhpcy5lbGVtZW50LFxuYSxjKTtyZXR1cm4gdGhpc307ZS5wcm90b3R5cGUub3BhY2l0eVNldHRlcj1mdW5jdGlvbihhLGMscCl7dGhpcy5vcGFjaXR5PWE9TnVtYmVyKE51bWJlcihhKS50b0ZpeGVkKDMpKTtwLnNldEF0dHJpYnV0ZShjLGEpfTtlLnByb3RvdHlwZS5yZW1vdmVDbGFzcz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hdHRyKFwiY2xhc3NcIiwoXCJcIit0aGlzLmF0dHIoXCJjbGFzc1wiKSkucmVwbGFjZShyKGEpP25ldyBSZWdFeHAoXCIoXnwgKVwiK2ErXCIoIHwkKVwiKTphLFwiIFwiKS5yZXBsYWNlKC8gKy9nLFwiIFwiKS50cmltKCkpfTtlLnByb3RvdHlwZS5yZW1vdmVUZXh0T3V0bGluZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwidHNwYW4uaGlnaGNoYXJ0cy10ZXh0LW91dGxpbmVcIik7YSYmdGhpcy5zYWZlUmVtb3ZlQ2hpbGQoYSl9O2UucHJvdG90eXBlLnNhZmVSZW1vdmVDaGlsZD1mdW5jdGlvbihhKXt2YXIgYz1hLnBhcmVudE5vZGU7YyYmYy5yZW1vdmVDaGlsZChhKX07XG5lLnByb3RvdHlwZS5zZXRSYWRpYWxSZWZlcmVuY2U9ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5lbGVtZW50LmdyYWRpZW50JiZ0aGlzLnJlbmRlcmVyLmdyYWRpZW50c1t0aGlzLmVsZW1lbnQuZ3JhZGllbnRdO3RoaXMuZWxlbWVudC5yYWRpYWxSZWZlcmVuY2U9YTtjJiZjLnJhZEF0dHImJmMuYW5pbWF0ZSh0aGlzLnJlbmRlcmVyLmdldFJhZGlhbEF0dHIoYSxjLnJhZEF0dHIpKTtyZXR1cm4gdGhpc307ZS5wcm90b3R5cGUuc2V0VGV4dFBhdGg9ZnVuY3Rpb24oYSxjKXt2YXIgcD10aGlzLmVsZW1lbnQsdD10aGlzLnRleHQ/dGhpcy50ZXh0LmVsZW1lbnQ6cCxnPXt0ZXh0QW5jaG9yOlwidGV4dC1hbmNob3JcIn0sZD0hMSxGPXRoaXMudGV4dFBhdGhXcmFwcGVyLHI9IUY7Yz1BKCEwLHtlbmFibGVkOiEwLGF0dHJpYnV0ZXM6e2R5Oi01LHN0YXJ0T2Zmc2V0OlwiNTAlXCIsdGV4dEFuY2hvcjpcIm1pZGRsZVwifX0sYyk7dmFyIEs9Yi5maWx0ZXJVc2VyQXR0cmlidXRlcyhjLmF0dHJpYnV0ZXMpO1xuaWYoYSYmYyYmYy5lbmFibGVkKXtGJiZudWxsPT09Ri5lbGVtZW50LnBhcmVudE5vZGU/KHI9ITAsRj1GLmRlc3Ryb3koKSk6RiYmdGhpcy5yZW1vdmVUZXh0T3V0bGluZS5jYWxsKEYucGFyZW50R3JvdXApO3RoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLnBhZGRpbmcmJihLLmR4PS10aGlzLm9wdGlvbnMucGFkZGluZyk7Rnx8KHRoaXMudGV4dFBhdGhXcmFwcGVyPUY9dGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KFwidGV4dFBhdGhcIiksZD0hMCk7dmFyIG09Ri5lbGVtZW50OyhjPWEuZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJpZFwiKSl8fGEuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJpZFwiLGM9VigpKTtpZihyKWZvcih0LnNldEF0dHJpYnV0ZShcInlcIiwwKSxoKEsuZHgpJiZ0LnNldEF0dHJpYnV0ZShcInhcIiwtSy5keCksYT1bXS5zbGljZS5jYWxsKHQuY2hpbGROb2Rlcykscj0wO3I8YS5sZW5ndGg7cisrKXt2YXIgbD1hW3JdO2wubm9kZVR5cGUhPT1Ob2RlLlRFWFRfTk9ERSYmXCJ0c3BhblwiIT09XG5sLm5vZGVOYW1lfHxtLmFwcGVuZENoaWxkKGwpfWQmJkYmJkYuYWRkKHtlbGVtZW50OnR9KTttLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLFwiaHJlZlwiLHRoaXMucmVuZGVyZXIudXJsK1wiI1wiK2MpO0ooSy5keSkmJihtLnBhcmVudE5vZGUuc2V0QXR0cmlidXRlKFwiZHlcIixLLmR5KSxkZWxldGUgSy5keSk7SihLLmR4KSYmKG0ucGFyZW50Tm9kZS5zZXRBdHRyaWJ1dGUoXCJkeFwiLEsuZHgpLGRlbGV0ZSBLLmR4KTt5KEssZnVuY3Rpb24oYSxwKXttLnNldEF0dHJpYnV0ZShnW3BdfHxwLGEpfSk7cC5yZW1vdmVBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIik7dGhpcy5yZW1vdmVUZXh0T3V0bGluZS5jYWxsKEYpO3RoaXMudGV4dCYmIXRoaXMucmVuZGVyZXIuc3R5bGVkTW9kZSYmdGhpcy5hdHRyKHtmaWxsOlwibm9uZVwiLFwic3Ryb2tlLXdpZHRoXCI6MH0pO3RoaXMuYXBwbHlUZXh0T3V0bGluZT10aGlzLnVwZGF0ZVRyYW5zZm9ybT1mfWVsc2UgRiYmKGRlbGV0ZSB0aGlzLnVwZGF0ZVRyYW5zZm9ybSxcbmRlbGV0ZSB0aGlzLmFwcGx5VGV4dE91dGxpbmUsdGhpcy5kZXN0cm95VGV4dFBhdGgocCxhKSx0aGlzLnVwZGF0ZVRyYW5zZm9ybSgpLHRoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLnJvdGF0aW9uJiZ0aGlzLmFwcGx5VGV4dE91dGxpbmUodGhpcy5vcHRpb25zLnN0eWxlLnRleHRPdXRsaW5lKSk7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLnNoYWRvdz1mdW5jdGlvbihhLGMscCl7dmFyIHQ9W10sZz10aGlzLmVsZW1lbnQsZD10aGlzLm9sZFNoYWRvd09wdGlvbnMsaD17Y29sb3I6SC5uZXV0cmFsQ29sb3IxMDAsb2Zmc2V0WDoxLG9mZnNldFk6MSxvcGFjaXR5Oi4xNSx3aWR0aDozfSxyPSExLEs7ITA9PT1hP0s9aDpcIm9iamVjdFwiPT09dHlwZW9mIGEmJihLPW0oaCxhKSk7SyYmKEsmJmQmJnkoSyxmdW5jdGlvbihhLHApe2EhPT1kW3BdJiYocj0hMCl9KSxyJiZ0aGlzLmRlc3Ryb3lTaGFkb3dzKCksdGhpcy5vbGRTaGFkb3dPcHRpb25zPUspO2lmKCFLKXRoaXMuZGVzdHJveVNoYWRvd3MoKTtcbmVsc2UgaWYoIXRoaXMuc2hhZG93cyl7dmFyIEE9Sy5vcGFjaXR5L0sud2lkdGg7dmFyIGY9dGhpcy5wYXJlbnRJbnZlcnRlZD9cInRyYW5zbGF0ZSgtMSwtMSlcIjpcInRyYW5zbGF0ZShcIitLLm9mZnNldFgrXCIsIFwiK0sub2Zmc2V0WStcIilcIjtmb3IoaD0xO2g8PUsud2lkdGg7aCsrKXt2YXIgYj1nLmNsb25lTm9kZSghMSk7dmFyIGw9MipLLndpZHRoKzEtMipoO04oYix7c3Ryb2tlOmEuY29sb3J8fEgubmV1dHJhbENvbG9yMTAwLFwic3Ryb2tlLW9wYWNpdHlcIjpBKmgsXCJzdHJva2Utd2lkdGhcIjpsLHRyYW5zZm9ybTpmLGZpbGw6XCJub25lXCJ9KTtiLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsKGIuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCIpK1wiIGhpZ2hjaGFydHMtc2hhZG93XCIpO3AmJihOKGIsXCJoZWlnaHRcIixNYXRoLm1heChOKGIsXCJoZWlnaHRcIiktbCwwKSksYi5jdXRIZWlnaHQ9bCk7Yz9jLmVsZW1lbnQuYXBwZW5kQ2hpbGQoYik6Zy5wYXJlbnROb2RlJiZnLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGIsXG5nKTt0LnB1c2goYil9dGhpcy5zaGFkb3dzPXR9cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYXR0cih7dmlzaWJpbGl0eTphP1wiaW5oZXJpdFwiOlwidmlzaWJsZVwifSl9O2UucHJvdG90eXBlLnN0cm9rZVNldHRlcj1mdW5jdGlvbihhLGMscCl7dGhpc1tjXT1hO3RoaXMuc3Ryb2tlJiZ0aGlzW1wic3Ryb2tlLXdpZHRoXCJdPyhlLnByb3RvdHlwZS5maWxsU2V0dGVyLmNhbGwodGhpcyx0aGlzLnN0cm9rZSxcInN0cm9rZVwiLHApLHAuc2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIsdGhpc1tcInN0cm9rZS13aWR0aFwiXSksdGhpcy5oYXNTdHJva2U9ITApOlwic3Ryb2tlLXdpZHRoXCI9PT1jJiYwPT09YSYmdGhpcy5oYXNTdHJva2U/KHAucmVtb3ZlQXR0cmlidXRlKFwic3Ryb2tlXCIpLHRoaXMuaGFzU3Ryb2tlPSExKTp0aGlzLnJlbmRlcmVyLnN0eWxlZE1vZGUmJnRoaXNbXCJzdHJva2Utd2lkdGhcIl0mJihwLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLFxudGhpc1tcInN0cm9rZS13aWR0aFwiXSksdGhpcy5oYXNTdHJva2U9ITApfTtlLnByb3RvdHlwZS5zdHJva2VXaWR0aD1mdW5jdGlvbigpe2lmKCF0aGlzLnJlbmRlcmVyLnN0eWxlZE1vZGUpcmV0dXJuIHRoaXNbXCJzdHJva2Utd2lkdGhcIl18fDA7dmFyIGE9dGhpcy5nZXRTdHlsZShcInN0cm9rZS13aWR0aFwiKSxjPTA7aWYoYS5pbmRleE9mKFwicHhcIik9PT1hLmxlbmd0aC0yKWM9UChhKTtlbHNlIGlmKFwiXCIhPT1hKXt2YXIgcD12LmNyZWF0ZUVsZW1lbnROUyhxLFwicmVjdFwiKTtOKHAse3dpZHRoOmEsXCJzdHJva2Utd2lkdGhcIjowfSk7dGhpcy5lbGVtZW50LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQocCk7Yz1wLmdldEJCb3goKS53aWR0aDtwLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocCl9cmV0dXJuIGN9O2UucHJvdG90eXBlLnN5bWJvbEF0dHI9ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcztcInggeSByIHN0YXJ0IGVuZCB3aWR0aCBoZWlnaHQgaW5uZXJSIGFuY2hvclggYW5jaG9yWSBjbG9ja3dpc2VcIi5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbihwKXtjW3BdPVxuTChhW3BdLGNbcF0pfSk7Yy5hdHRyKHtkOmMucmVuZGVyZXIuc3ltYm9sc1tjLnN5bWJvbE5hbWVdKGMueCxjLnksYy53aWR0aCxjLmhlaWdodCxjKX0pfTtlLnByb3RvdHlwZS50ZXh0U2V0dGVyPWZ1bmN0aW9uKGEpe2EhPT10aGlzLnRleHRTdHImJihkZWxldGUgdGhpcy50ZXh0UHhMZW5ndGgsdGhpcy50ZXh0U3RyPWEsdGhpcy5hZGRlZCYmdGhpcy5yZW5kZXJlci5idWlsZFRleHQodGhpcykpfTtlLnByb3RvdHlwZS50aXRsZVNldHRlcj1mdW5jdGlvbihhKXt2YXIgYz10aGlzLmVsZW1lbnQscD1jLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidGl0bGVcIilbMF18fHYuY3JlYXRlRWxlbWVudE5TKHRoaXMuU1ZHX05TLFwidGl0bGVcIik7Yy5pbnNlcnRCZWZvcmU/Yy5pbnNlcnRCZWZvcmUocCxjLmZpcnN0Q2hpbGQpOmMuYXBwZW5kQ2hpbGQocCk7cC50ZXh0Q29udGVudD1TdHJpbmcoTChhLFwiXCIpKS5yZXBsYWNlKC88W14+XSo+L2csXCJcIikucmVwbGFjZSgvJmx0Oy9nLFwiPFwiKS5yZXBsYWNlKC8mZ3Q7L2csXG5cIj5cIil9O2UucHJvdG90eXBlLnRvRnJvbnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmVsZW1lbnQ7YS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGEpO3JldHVybiB0aGlzfTtlLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYSxjKXtyZXR1cm4gdGhpcy5hdHRyKHt0cmFuc2xhdGVYOmEsdHJhbnNsYXRlWTpjfSl9O2UucHJvdG90eXBlLnVwZGF0ZVNoYWRvd3M9ZnVuY3Rpb24oYSxjLHApe3ZhciB0PXRoaXMuc2hhZG93cztpZih0KWZvcih2YXIgZz10Lmxlbmd0aDtnLS07KXAuY2FsbCh0W2ddLFwiaGVpZ2h0XCI9PT1hP01hdGgubWF4KGMtKHRbZ10uY3V0SGVpZ2h0fHwwKSwwKTpcImRcIj09PWE/dGhpcy5kOmMsYSx0W2ddKX07ZS5wcm90b3R5cGUudXBkYXRlVHJhbnNmb3JtPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zY2FsZVgsYz10aGlzLnNjYWxlWSxwPXRoaXMuaW52ZXJ0ZWQsZz10aGlzLnJvdGF0aW9uLGQ9dGhpcy5tYXRyaXgsaD10aGlzLmVsZW1lbnQsRj10aGlzLnRyYW5zbGF0ZVh8fFxuMCxyPXRoaXMudHJhbnNsYXRlWXx8MDtwJiYoRis9dGhpcy53aWR0aCxyKz10aGlzLmhlaWdodCk7Rj1bXCJ0cmFuc2xhdGUoXCIrRitcIixcIityK1wiKVwiXTtKKGQpJiZGLnB1c2goXCJtYXRyaXgoXCIrZC5qb2luKFwiLFwiKStcIilcIik7cD9GLnB1c2goXCJyb3RhdGUoOTApIHNjYWxlKC0xLDEpXCIpOmcmJkYucHVzaChcInJvdGF0ZShcIitnK1wiIFwiK0wodGhpcy5yb3RhdGlvbk9yaWdpblgsaC5nZXRBdHRyaWJ1dGUoXCJ4XCIpLDApK1wiIFwiK0wodGhpcy5yb3RhdGlvbk9yaWdpblksaC5nZXRBdHRyaWJ1dGUoXCJ5XCIpfHwwKStcIilcIik7KEooYSl8fEooYykpJiZGLnB1c2goXCJzY2FsZShcIitMKGEsMSkrXCIgXCIrTChjLDEpK1wiKVwiKTtGLmxlbmd0aCYmaC5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIixGLmpvaW4oXCIgXCIpKX07ZS5wcm90b3R5cGUudmlzaWJpbGl0eVNldHRlcj1mdW5jdGlvbihhLGMscCl7XCJpbmhlcml0XCI9PT1hP3AucmVtb3ZlQXR0cmlidXRlKGMpOnRoaXNbY10hPT1hJiZwLnNldEF0dHJpYnV0ZShjLFxuYSk7dGhpc1tjXT1hfTtlLnByb3RvdHlwZS54R2V0dGVyPWZ1bmN0aW9uKGEpe1wiY2lyY2xlXCI9PT10aGlzLmVsZW1lbnQubm9kZU5hbWUmJihcInhcIj09PWE/YT1cImN4XCI6XCJ5XCI9PT1hJiYoYT1cImN5XCIpKTtyZXR1cm4gdGhpcy5fZGVmYXVsdEdldHRlcihhKX07ZS5wcm90b3R5cGUuekluZGV4U2V0dGVyPWZ1bmN0aW9uKGEsYyl7dmFyIHA9dGhpcy5yZW5kZXJlcixnPXRoaXMucGFyZW50R3JvdXAsdD0oZ3x8cCkuZWxlbWVudHx8cC5ib3gsZD10aGlzLmVsZW1lbnQ7cD10PT09cC5ib3g7dmFyIGg9ITE7dmFyIHI9dGhpcy5hZGRlZDt2YXIgSztKKGEpPyhkLnNldEF0dHJpYnV0ZShcImRhdGEtei1pbmRleFwiLGEpLGE9K2EsdGhpc1tjXT09PWEmJihyPSExKSk6Sih0aGlzW2NdKSYmZC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXotaW5kZXhcIik7dGhpc1tjXT1hO2lmKHIpeyhhPXRoaXMuekluZGV4KSYmZyYmKGcuaGFuZGxlWj0hMCk7Yz10LmNoaWxkTm9kZXM7Zm9yKEs9Yy5sZW5ndGgtMTswPD1cbksmJiFoO0stLSl7Zz1jW0tdO3I9Zy5nZXRBdHRyaWJ1dGUoXCJkYXRhLXotaW5kZXhcIik7dmFyIG09IUoocik7aWYoZyE9PWQpaWYoMD5hJiZtJiYhcCYmIUspdC5pbnNlcnRCZWZvcmUoZCxjW0tdKSxoPSEwO2Vsc2UgaWYoUChyKTw9YXx8bSYmKCFKKGEpfHwwPD1hKSl0Lmluc2VydEJlZm9yZShkLGNbSysxXXx8bnVsbCksaD0hMH1ofHwodC5pbnNlcnRCZWZvcmUoZCxjW3A/MzowXXx8bnVsbCksaD0hMCl9cmV0dXJuIGh9O3JldHVybiBlfSgpO2UucHJvdG90eXBlW1wic3Ryb2tlLXdpZHRoU2V0dGVyXCJdPWUucHJvdG90eXBlLnN0cm9rZVNldHRlcjtlLnByb3RvdHlwZS55R2V0dGVyPWUucHJvdG90eXBlLnhHZXR0ZXI7ZS5wcm90b3R5cGUubWF0cml4U2V0dGVyPWUucHJvdG90eXBlLnJvdGF0aW9uT3JpZ2luWFNldHRlcj1lLnByb3RvdHlwZS5yb3RhdGlvbk9yaWdpbllTZXR0ZXI9ZS5wcm90b3R5cGUucm90YXRpb25TZXR0ZXI9ZS5wcm90b3R5cGUuc2NhbGVYU2V0dGVyPWUucHJvdG90eXBlLnNjYWxlWVNldHRlcj1cbmUucHJvdG90eXBlLnRyYW5zbGF0ZVhTZXR0ZXI9ZS5wcm90b3R5cGUudHJhbnNsYXRlWVNldHRlcj1lLnByb3RvdHlwZS52ZXJ0aWNhbEFsaWduU2V0dGVyPWZ1bmN0aW9uKGEsYyl7dGhpc1tjXT1hO3RoaXMuZG9UcmFuc2Zvcm09ITB9O1wiXCI7cmV0dXJuIGV9KTtPKGUsXCJDb3JlL1JlbmRlcmVyL1NWRy9TVkdMYWJlbC5qc1wiLFtlW1wiQ29yZS9SZW5kZXJlci9TVkcvU1ZHRWxlbWVudC5qc1wiXSxlW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGUsYil7ZnVuY3Rpb24gRChiLGYpe0MoYik/YiE9PXRoaXNbZl0mJih0aGlzW2ZdPWIsdGhpcy51cGRhdGVUZXh0UGFkZGluZygpKTp0aGlzW2ZdPXZvaWQgMH12YXIgej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgYj1mdW5jdGlvbihmLGQpe2I9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGQsYil7ZC5fX3Byb3RvX189Yn18fGZ1bmN0aW9uKGQsXG5iKXtmb3IodmFyIGYgaW4gYiliLmhhc093blByb3BlcnR5KGYpJiYoZFtmXT1iW2ZdKX07cmV0dXJuIGIoZixkKX07cmV0dXJuIGZ1bmN0aW9uKGYsZCl7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9Zn1iKGYsZCk7Zi5wcm90b3R5cGU9bnVsbD09PWQ/T2JqZWN0LmNyZWF0ZShkKToocS5wcm90b3R5cGU9ZC5wcm90b3R5cGUsbmV3IHEpfX0oKSxIPWIuZGVmaW5lZCxHPWIuZXh0ZW5kLEM9Yi5pc051bWJlcixCPWIubWVyZ2UseD1iLnBpY2ssdz1iLnJlbW92ZUV2ZW50O3JldHVybiBmdW5jdGlvbihiKXtmdW5jdGlvbiBmKGQscSxrLGwsZSx1LG4sdixFLG0pe3ZhciBjPWIuY2FsbCh0aGlzKXx8dGhpcztjLnBhZGRpbmdTZXR0ZXI9RDtjLnBhZGRpbmdMZWZ0U2V0dGVyPUQ7Yy5wYWRkaW5nUmlnaHRTZXR0ZXI9RDtjLmluaXQoZCxcImdcIik7Yy50ZXh0U3RyPXE7Yy54PWs7Yy55PWw7Yy5hbmNob3JYPXU7Yy5hbmNob3JZPW47Yy5iYXNlbGluZT1FO2MuY2xhc3NOYW1lPW07XCJidXR0b25cIiE9PVxubSYmYy5hZGRDbGFzcyhcImhpZ2hjaGFydHMtbGFiZWxcIik7bSYmYy5hZGRDbGFzcyhcImhpZ2hjaGFydHMtXCIrbSk7Yy50ZXh0PWQudGV4dChcIlwiLDAsMCx2KS5hdHRyKHt6SW5kZXg6MX0pO2lmKFwic3RyaW5nXCI9PT10eXBlb2YgZSl7dmFyIGc9L151cmxcXCgoLio/KVxcKSQvLnRlc3QoZSk7aWYoYy5yZW5kZXJlci5zeW1ib2xzW2VdfHxnKWMuc3ltYm9sS2V5PWV9Yy5iQm94PWYuZW1wdHlCQm94O2MucGFkZGluZz0zO2MuYmFzZWxpbmVPZmZzZXQ9MDtjLm5lZWRzQm94PWQuc3R5bGVkTW9kZXx8ZztjLmRlZmVycmVkQXR0cj17fTtjLmFsaWduRmFjdG9yPTA7cmV0dXJuIGN9eihmLGIpO2YucHJvdG90eXBlLmFsaWduU2V0dGVyPWZ1bmN0aW9uKGQpe2Q9e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MX1bZF07ZCE9PXRoaXMuYWxpZ25GYWN0b3ImJih0aGlzLmFsaWduRmFjdG9yPWQsdGhpcy5iQm94JiZDKHRoaXMueFNldHRpbmcpJiZ0aGlzLmF0dHIoe3g6dGhpcy54U2V0dGluZ30pKX07Zi5wcm90b3R5cGUuYW5jaG9yWFNldHRlcj1cbmZ1bmN0aW9uKGQsYil7dGhpcy5hbmNob3JYPWQ7dGhpcy5ib3hBdHRyKGIsTWF0aC5yb3VuZChkKS10aGlzLmdldENyaXNwQWRqdXN0KCktdGhpcy54U2V0dGluZyl9O2YucHJvdG90eXBlLmFuY2hvcllTZXR0ZXI9ZnVuY3Rpb24oZCxiKXt0aGlzLmFuY2hvclk9ZDt0aGlzLmJveEF0dHIoYixkLXRoaXMueVNldHRpbmcpfTtmLnByb3RvdHlwZS5ib3hBdHRyPWZ1bmN0aW9uKGQsYil7dGhpcy5ib3g/dGhpcy5ib3guYXR0cihkLGIpOnRoaXMuZGVmZXJyZWRBdHRyW2RdPWJ9O2YucHJvdG90eXBlLmNzcz1mdW5jdGlvbihkKXtpZihkKXt2YXIgYj17fSxrPXZvaWQgMDtkPUIoZCk7Zi50ZXh0UHJvcHMuZm9yRWFjaChmdW5jdGlvbihmKXtcInVuZGVmaW5lZFwiIT09dHlwZW9mIGRbZl0mJihiW2ZdPWRbZl0sZGVsZXRlIGRbZl0pfSk7dGhpcy50ZXh0LmNzcyhiKTtrPVwid2lkdGhcImluIGI7XCJmb250U2l6ZVwiaW4gYnx8XCJmb250V2VpZ2h0XCJpbiBiP3RoaXMudXBkYXRlVGV4dFBhZGRpbmcoKTpcbmsmJnRoaXMudXBkYXRlQm94U2l6ZSgpfXJldHVybiBlLnByb3RvdHlwZS5jc3MuY2FsbCh0aGlzLGQpfTtmLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dyh0aGlzLmVsZW1lbnQsXCJtb3VzZWVudGVyXCIpO3codGhpcy5lbGVtZW50LFwibW91c2VsZWF2ZVwiKTt0aGlzLnRleHQmJnRoaXMudGV4dC5kZXN0cm95KCk7dGhpcy5ib3gmJih0aGlzLmJveD10aGlzLmJveC5kZXN0cm95KCkpO2UucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKX07Zi5wcm90b3R5cGUuZmlsbFNldHRlcj1mdW5jdGlvbihkLGIpe2QmJih0aGlzLm5lZWRzQm94PSEwKTt0aGlzLmZpbGw9ZDt0aGlzLmJveEF0dHIoYixkKX07Zi5wcm90b3R5cGUuZ2V0QkJveD1mdW5jdGlvbigpe3RoaXMudGV4dFN0ciYmMD09PXRoaXMuYkJveC53aWR0aCYmMD09PXRoaXMuYkJveC5oZWlnaHQmJnRoaXMudXBkYXRlQm94U2l6ZSgpO3ZhciBkPXRoaXMucGFkZGluZyxiPXgodGhpcy5wYWRkaW5nTGVmdCxkKTtyZXR1cm57d2lkdGg6dGhpcy53aWR0aCxcbmhlaWdodDp0aGlzLmhlaWdodCx4OnRoaXMuYkJveC54LWIseTp0aGlzLmJCb3gueS1kfX07Zi5wcm90b3R5cGUuZ2V0Q3Jpc3BBZGp1c3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5zdHlsZWRNb2RlJiZ0aGlzLmJveD90aGlzLmJveC5zdHJva2VXaWR0aCgpJTIvMjoodGhpc1tcInN0cm9rZS13aWR0aFwiXT9wYXJzZUludCh0aGlzW1wic3Ryb2tlLXdpZHRoXCJdLDEwKTowKSUyLzJ9O2YucHJvdG90eXBlLmhlaWdodFNldHRlcj1mdW5jdGlvbihkKXt0aGlzLmhlaWdodFNldHRpbmc9ZH07Zi5wcm90b3R5cGUub249ZnVuY3Rpb24oZCxiKXt2YXIgZj10aGlzLGw9Zi50ZXh0LHE9bCYmXCJTUEFOXCI9PT1sLmVsZW1lbnQudGFnTmFtZT9sOnZvaWQgMDtpZihxKXt2YXIgdT1mdW5jdGlvbihsKXsoXCJtb3VzZWVudGVyXCI9PT1kfHxcIm1vdXNlbGVhdmVcIj09PWQpJiZsLnJlbGF0ZWRUYXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50JiYoZi5lbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGwucmVsYXRlZFRhcmdldCkmXG5Ob2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWXx8cS5lbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGwucmVsYXRlZFRhcmdldCkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpfHxiLmNhbGwoZi5lbGVtZW50LGwpfTtxLm9uKGQsdSl9ZS5wcm90b3R5cGUub24uY2FsbChmLGQsdXx8Yik7cmV0dXJuIGZ9O2YucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy50ZXh0U3RyO3RoaXMudGV4dC5hZGQodGhpcyk7dGhpcy5hdHRyKHt0ZXh0OkgoZCk/ZDpcIlwiLHg6dGhpcy54LHk6dGhpcy55fSk7dGhpcy5ib3gmJkgodGhpcy5hbmNob3JYKSYmdGhpcy5hdHRyKHthbmNob3JYOnRoaXMuYW5jaG9yWCxhbmNob3JZOnRoaXMuYW5jaG9yWX0pfTtmLnByb3RvdHlwZS5yU2V0dGVyPWZ1bmN0aW9uKGQsYil7dGhpcy5ib3hBdHRyKGIsZCl9O2YucHJvdG90eXBlLnNoYWRvdz1mdW5jdGlvbihkKXtkJiYhdGhpcy5yZW5kZXJlci5zdHlsZWRNb2RlJiZcbih0aGlzLnVwZGF0ZUJveFNpemUoKSx0aGlzLmJveCYmdGhpcy5ib3guc2hhZG93KGQpKTtyZXR1cm4gdGhpc307Zi5wcm90b3R5cGUuc3Ryb2tlU2V0dGVyPWZ1bmN0aW9uKGQsYil7dGhpcy5zdHJva2U9ZDt0aGlzLmJveEF0dHIoYixkKX07Zi5wcm90b3R5cGVbXCJzdHJva2Utd2lkdGhTZXR0ZXJcIl09ZnVuY3Rpb24oZCxiKXtkJiYodGhpcy5uZWVkc0JveD0hMCk7dGhpc1tcInN0cm9rZS13aWR0aFwiXT1kO3RoaXMuYm94QXR0cihiLGQpfTtmLnByb3RvdHlwZVtcInRleHQtYWxpZ25TZXR0ZXJcIl09ZnVuY3Rpb24oZCl7dGhpcy50ZXh0QWxpZ249ZH07Zi5wcm90b3R5cGUudGV4dFNldHRlcj1mdW5jdGlvbihkKXtcInVuZGVmaW5lZFwiIT09dHlwZW9mIGQmJnRoaXMudGV4dC5hdHRyKHt0ZXh0OmR9KTt0aGlzLnVwZGF0ZVRleHRQYWRkaW5nKCl9O2YucHJvdG90eXBlLnVwZGF0ZUJveFNpemU9ZnVuY3Rpb24oKXt2YXIgZD10aGlzLnRleHQuZWxlbWVudC5zdHlsZSxiPXt9LGU9dGhpcy5wYWRkaW5nLFxubD10aGlzLmJCb3g9Qyh0aGlzLndpZHRoU2V0dGluZykmJkModGhpcy5oZWlnaHRTZXR0aW5nKSYmIXRoaXMudGV4dEFsaWdufHwhSCh0aGlzLnRleHQudGV4dFN0cik/Zi5lbXB0eUJCb3g6dGhpcy50ZXh0LmdldEJCb3goKTt0aGlzLndpZHRoPXRoaXMuZ2V0UGFkZGVkV2lkdGgoKTt0aGlzLmhlaWdodD0odGhpcy5oZWlnaHRTZXR0aW5nfHxsLmhlaWdodHx8MCkrMiplO3RoaXMuYmFzZWxpbmVPZmZzZXQ9ZStNYXRoLm1pbih0aGlzLnJlbmRlcmVyLmZvbnRNZXRyaWNzKGQmJmQuZm9udFNpemUsdGhpcy50ZXh0KS5iLGwuaGVpZ2h0fHxJbmZpbml0eSk7dGhpcy5uZWVkc0JveCYmKHRoaXMuYm94fHwoZD10aGlzLmJveD10aGlzLnN5bWJvbEtleT90aGlzLnJlbmRlcmVyLnN5bWJvbCh0aGlzLnN5bWJvbEtleSk6dGhpcy5yZW5kZXJlci5yZWN0KCksZC5hZGRDbGFzcygoXCJidXR0b25cIj09PXRoaXMuY2xhc3NOYW1lP1wiXCI6XCJoaWdoY2hhcnRzLWxhYmVsLWJveFwiKSsodGhpcy5jbGFzc05hbWU/XG5cIiBoaWdoY2hhcnRzLVwiK3RoaXMuY2xhc3NOYW1lK1wiLWJveFwiOlwiXCIpKSxkLmFkZCh0aGlzKSksZD10aGlzLmdldENyaXNwQWRqdXN0KCksYi54PWQsYi55PSh0aGlzLmJhc2VsaW5lPy10aGlzLmJhc2VsaW5lT2Zmc2V0OjApK2QsYi53aWR0aD1NYXRoLnJvdW5kKHRoaXMud2lkdGgpLGIuaGVpZ2h0PU1hdGgucm91bmQodGhpcy5oZWlnaHQpLHRoaXMuYm94LmF0dHIoRyhiLHRoaXMuZGVmZXJyZWRBdHRyKSksdGhpcy5kZWZlcnJlZEF0dHI9e30pfTtmLnByb3RvdHlwZS51cGRhdGVUZXh0UGFkZGluZz1mdW5jdGlvbigpe3ZhciBkPXRoaXMudGV4dDt0aGlzLnVwZGF0ZUJveFNpemUoKTt2YXIgYj10aGlzLmJhc2VsaW5lPzA6dGhpcy5iYXNlbGluZU9mZnNldCxmPXgodGhpcy5wYWRkaW5nTGVmdCx0aGlzLnBhZGRpbmcpO0godGhpcy53aWR0aFNldHRpbmcpJiZ0aGlzLmJCb3gmJihcImNlbnRlclwiPT09dGhpcy50ZXh0QWxpZ258fFwicmlnaHRcIj09PXRoaXMudGV4dEFsaWduKSYmKGYrPVxue2NlbnRlcjouNSxyaWdodDoxfVt0aGlzLnRleHRBbGlnbl0qKHRoaXMud2lkdGhTZXR0aW5nLXRoaXMuYkJveC53aWR0aCkpO2lmKGYhPT1kLnh8fGIhPT1kLnkpZC5hdHRyKFwieFwiLGYpLGQuaGFzQm94V2lkdGhDaGFuZ2VkJiYodGhpcy5iQm94PWQuZ2V0QkJveCghMCkpLFwidW5kZWZpbmVkXCIhPT10eXBlb2YgYiYmZC5hdHRyKFwieVwiLGIpO2QueD1mO2QueT1ifTtmLnByb3RvdHlwZS53aWR0aFNldHRlcj1mdW5jdGlvbihkKXt0aGlzLndpZHRoU2V0dGluZz1DKGQpP2Q6dm9pZCAwfTtmLnByb3RvdHlwZS5nZXRQYWRkZWRXaWR0aD1mdW5jdGlvbigpe3ZhciBkPXRoaXMucGFkZGluZyxiPXgodGhpcy5wYWRkaW5nTGVmdCxkKTtkPXgodGhpcy5wYWRkaW5nUmlnaHQsZCk7cmV0dXJuKHRoaXMud2lkdGhTZXR0aW5nfHx0aGlzLmJCb3gud2lkdGh8fDApK2IrZH07Zi5wcm90b3R5cGUueFNldHRlcj1mdW5jdGlvbihkKXt0aGlzLng9ZDt0aGlzLmFsaWduRmFjdG9yJiYoZC09dGhpcy5hbGlnbkZhY3RvcipcbnRoaXMuZ2V0UGFkZGVkV2lkdGgoKSx0aGlzW1wiZm9yY2VBbmltYXRlOnhcIl09ITApO3RoaXMueFNldHRpbmc9TWF0aC5yb3VuZChkKTt0aGlzLmF0dHIoXCJ0cmFuc2xhdGVYXCIsdGhpcy54U2V0dGluZyl9O2YucHJvdG90eXBlLnlTZXR0ZXI9ZnVuY3Rpb24oZCl7dGhpcy55U2V0dGluZz10aGlzLnk9TWF0aC5yb3VuZChkKTt0aGlzLmF0dHIoXCJ0cmFuc2xhdGVZXCIsdGhpcy55U2V0dGluZyl9O2YuZW1wdHlCQm94PXt3aWR0aDowLGhlaWdodDowLHg6MCx5OjB9O2YudGV4dFByb3BzPVwiY29sb3IgZGlyZWN0aW9uIGZvbnRGYW1pbHkgZm9udFNpemUgZm9udFN0eWxlIGZvbnRXZWlnaHQgbGluZUhlaWdodCB0ZXh0QWxpZ24gdGV4dERlY29yYXRpb24gdGV4dE91dGxpbmUgdGV4dE92ZXJmbG93IHdpZHRoXCIuc3BsaXQoXCIgXCIpO3JldHVybiBmfShlKX0pO08oZSxcIkNvcmUvUmVuZGVyZXIvU1ZHL1RleHRCdWlsZGVyLmpzXCIsW2VbXCJDb3JlL0dsb2JhbHMuanNcIl0sZVtcIkNvcmUvVXRpbGl0aWVzLmpzXCJdLFxuZVtcIkNvcmUvUmVuZGVyZXIvSFRNTC9BU1QuanNcIl1dLGZ1bmN0aW9uKGUsYixJKXt2YXIgRD1lLmRvYyxIPWUuU1ZHX05TLEc9Yi5hdHRyLEM9Yi5pc1N0cmluZyxCPWIub2JqZWN0RWFjaCx4PWIucGljaztyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiBiKGIpe3ZhciBmPWIuc3R5bGVzO3RoaXMucmVuZGVyZXI9Yi5yZW5kZXJlcjt0aGlzLnN2Z0VsZW1lbnQ9Yjt0aGlzLndpZHRoPWIudGV4dFdpZHRoO3RoaXMudGV4dExpbmVIZWlnaHQ9ZiYmZi5saW5lSGVpZ2h0O3RoaXMudGV4dE91dGxpbmU9ZiYmZi50ZXh0T3V0bGluZTt0aGlzLmVsbGlwc2lzPSEoIWZ8fFwiZWxsaXBzaXNcIiE9PWYudGV4dE92ZXJmbG93KTt0aGlzLm5vV3JhcD0hKCFmfHxcIm5vd3JhcFwiIT09Zi53aGl0ZVNwYWNlKTt0aGlzLmZvbnRTaXplPWYmJmYuZm9udFNpemV9Yi5wcm90b3R5cGUuYnVpbGRTVkc9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnN2Z0VsZW1lbnQsZj1iLmVsZW1lbnQsZD1iLnJlbmRlcmVyLGU9XG54KGIudGV4dFN0cixcIlwiKS50b1N0cmluZygpLGs9LTEhPT1lLmluZGV4T2YoXCI8XCIpLGw9Zi5jaGlsZE5vZGVzLE49bC5sZW5ndGg7ZD10aGlzLndpZHRoJiYhYi5hZGRlZCYmZC5ib3g7dmFyIHU9Lzxici4qPz4vZzt2YXIgbj1bZSx0aGlzLmVsbGlwc2lzLHRoaXMubm9XcmFwLHRoaXMudGV4dExpbmVIZWlnaHQsdGhpcy50ZXh0T3V0bGluZSx0aGlzLmZvbnRTaXplLHRoaXMud2lkdGhdLmpvaW4oKTtpZihuIT09Yi50ZXh0Q2FjaGUpe2IudGV4dENhY2hlPW47Zm9yKGRlbGV0ZSBiLmFjdHVhbFdpZHRoO04tLTspZi5yZW1vdmVDaGlsZChsW05dKTtrfHx0aGlzLmVsbGlwc2lzfHx0aGlzLndpZHRofHwtMSE9PWUuaW5kZXhPZihcIiBcIikmJighdGhpcy5ub1dyYXB8fHUudGVzdChlKSk/XCJcIiE9PWUmJihkJiZkLmFwcGVuZENoaWxkKGYpLGU9bmV3IEkoZSksdGhpcy5tb2RpZnlUcmVlKGUubm9kZXMpLGUuYWRkVG9ET00oYi5lbGVtZW50KSx0aGlzLm1vZGlmeURPTSgpLHRoaXMuZWxsaXBzaXMmJlxuLTEhPT0oZi50ZXh0Q29udGVudHx8XCJcIikuaW5kZXhPZihcIlxcdTIwMjZcIikmJmIuYXR0cihcInRpdGxlXCIsdGhpcy51bmVzY2FwZUVudGl0aWVzKGIudGV4dFN0cnx8XCJcIixbXCImbHQ7XCIsXCImZ3Q7XCJdKSksZCYmZC5yZW1vdmVDaGlsZChmKSk6Zi5hcHBlbmRDaGlsZChELmNyZWF0ZVRleHROb2RlKHRoaXMudW5lc2NhcGVFbnRpdGllcyhlKSkpO0ModGhpcy50ZXh0T3V0bGluZSkmJmIuYXBwbHlUZXh0T3V0bGluZSYmYi5hcHBseVRleHRPdXRsaW5lKHRoaXMudGV4dE91dGxpbmUpfX07Yi5wcm90b3R5cGUubW9kaWZ5RE9NPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxmPXRoaXMuc3ZnRWxlbWVudCxkPUcoZi5lbGVtZW50LFwieFwiKTtbXS5mb3JFYWNoLmNhbGwoZi5lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ0c3Bhbi5oaWdoY2hhcnRzLWJyXCIpLGZ1bmN0aW9uKGYpe2YubmV4dFNpYmxpbmcmJmYucHJldmlvdXNTaWJsaW5nJiZHKGYse2R5OmIuZ2V0TGluZUhlaWdodChmLm5leHRTaWJsaW5nKSxcbng6ZH0pfSk7dmFyIGU9dGhpcy53aWR0aHx8MDtpZihlKXt2YXIgaz1mdW5jdGlvbihsLHUpe3ZhciBuPWwudGV4dENvbnRlbnR8fFwiXCIsaz1uLnJlcGxhY2UoLyhbXlxcXl0pLS9nLFwiJDEtIFwiKS5zcGxpdChcIiBcIikscT0hYi5ub1dyYXAmJigxPGsubGVuZ3RofHwxPGYuZWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCksbT1iLmdldExpbmVIZWlnaHQodSksYz0wLGc9Zi5hY3R1YWxXaWR0aDtpZihiLmVsbGlwc2lzKW4mJmIudHJ1bmNhdGUobCxuLHZvaWQgMCwwLE1hdGgubWF4KDAsZS1wYXJzZUludChiLmZvbnRTaXplfHwxMiwxMCkpLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGEuc3Vic3RyaW5nKDAsYykrXCJcXHUyMDI2XCJ9KTtlbHNlIGlmKHEpe249W107Zm9yKHE9W107dS5maXJzdENoaWxkJiZ1LmZpcnN0Q2hpbGQhPT1sOylxLnB1c2godS5maXJzdENoaWxkKSx1LnJlbW92ZUNoaWxkKHUuZmlyc3RDaGlsZCk7Zm9yKDtrLmxlbmd0aDspay5sZW5ndGgmJiFiLm5vV3JhcCYmMDxjJiYobi5wdXNoKGwudGV4dENvbnRlbnR8fFxuXCJcIiksbC50ZXh0Q29udGVudD1rLmpvaW4oXCIgXCIpLnJlcGxhY2UoLy0gL2csXCItXCIpKSxiLnRydW5jYXRlKGwsdm9pZCAwLGssMD09PWM/Z3x8MDowLGUsZnVuY3Rpb24oYSxjKXtyZXR1cm4gay5zbGljZSgwLGMpLmpvaW4oXCIgXCIpLnJlcGxhY2UoLy0gL2csXCItXCIpfSksZz1mLmFjdHVhbFdpZHRoLGMrKztxLmZvckVhY2goZnVuY3Rpb24oYSl7dS5pbnNlcnRCZWZvcmUoYSxsKX0pO24uZm9yRWFjaChmdW5jdGlvbihhKXt1Lmluc2VydEJlZm9yZShELmNyZWF0ZVRleHROb2RlKGEpLGwpO2E9RC5jcmVhdGVFbGVtZW50TlMoSCxcInRzcGFuXCIpO2EudGV4dENvbnRlbnQ9XCJcXHUyMDBiXCI7RyhhLHtkeTptLHg6ZH0pO3UuaW5zZXJ0QmVmb3JlKGEsbCl9KX19LGw9ZnVuY3Rpb24oZCl7W10uc2xpY2UuY2FsbChkLmNoaWxkTm9kZXMpLmZvckVhY2goZnVuY3Rpb24oYil7Yi5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFP2soYixkKTooLTEhPT1iLmNsYXNzTmFtZS5iYXNlVmFsLmluZGV4T2YoXCJoaWdoY2hhcnRzLWJyXCIpJiZcbihmLmFjdHVhbFdpZHRoPTApLGwoYikpfSl9O2woZi5lbGVtZW50KX19O2IucHJvdG90eXBlLmdldExpbmVIZWlnaHQ9ZnVuY3Rpb24oYil7dmFyIGY7Yj1iLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU/Yi5wYXJlbnRFbGVtZW50OmI7dGhpcy5yZW5kZXJlci5zdHlsZWRNb2RlfHwoZj1iJiYvKHB4fGVtKSQvLnRlc3QoYi5zdHlsZS5mb250U2l6ZSk/Yi5zdHlsZS5mb250U2l6ZTp0aGlzLmZvbnRTaXplfHx0aGlzLnJlbmRlcmVyLnN0eWxlLmZvbnRTaXplfHwxMik7cmV0dXJuIHRoaXMudGV4dExpbmVIZWlnaHQ/cGFyc2VJbnQodGhpcy50ZXh0TGluZUhlaWdodC50b1N0cmluZygpLDEwKTp0aGlzLnJlbmRlcmVyLmZvbnRNZXRyaWNzKGYsYnx8dGhpcy5zdmdFbGVtZW50LmVsZW1lbnQpLmh9O2IucHJvdG90eXBlLm1vZGlmeVRyZWU9ZnVuY3Rpb24oYil7dmFyIGY9dGhpcyxkPWZ1bmN0aW9uKGUsayl7dmFyIGw9ZS50YWdOYW1lLHE9Zi5yZW5kZXJlci5zdHlsZWRNb2RlLHU9ZS5hdHRyaWJ1dGVzfHxcbnt9O2lmKFwiYlwiPT09bHx8XCJzdHJvbmdcIj09PWwpcT91W1wiY2xhc3NcIl09XCJoaWdoY2hhcnRzLXN0cm9uZ1wiOnUuc3R5bGU9XCJmb250LXdlaWdodDpib2xkO1wiKyh1LnN0eWxlfHxcIlwiKTtlbHNlIGlmKFwiaVwiPT09bHx8XCJlbVwiPT09bClxP3VbXCJjbGFzc1wiXT1cImhpZ2hjaGFydHMtZW1waGFzaXplZFwiOnUuc3R5bGU9XCJmb250LXN0eWxlOml0YWxpYztcIisodS5zdHlsZXx8XCJcIik7Qyh1LnN0eWxlKSYmKHUuc3R5bGU9dS5zdHlsZS5yZXBsYWNlKC8oO3wgfF4pY29sb3IoWyA6XSkvLFwiJDFmaWxsJDJcIikpO1wiYnJcIj09PWwmJih1W1wiY2xhc3NcIl09XCJoaWdoY2hhcnRzLWJyXCIsZS50ZXh0Q29udGVudD1cIlxcdTIwMGJcIiwoaz1iW2srMV0pJiZrLnRleHRDb250ZW50JiYoay50ZXh0Q29udGVudD1rLnRleHRDb250ZW50LnJlcGxhY2UoL14gKy9nbSxcIlwiKSkpO1wiI3RleHRcIiE9PWwmJlwiYVwiIT09bCYmKGUudGFnTmFtZT1cInRzcGFuXCIpO2UuYXR0cmlidXRlcz11O2UuY2hpbGRyZW4mJmUuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKGQpe3JldHVyblwiI3RleHRcIiE9PVxuZC50YWdOYW1lfSkuZm9yRWFjaChkKX07Zm9yKGIuZm9yRWFjaChkKTtiWzBdJiZcInRzcGFuXCI9PT1iWzBdLnRhZ05hbWUmJiFiWzBdLmNoaWxkcmVuOyliLnNwbGljZSgwLDEpfTtiLnByb3RvdHlwZS50cnVuY2F0ZT1mdW5jdGlvbihiLGYsZCxlLGssbCl7dmFyIHE9dGhpcy5zdmdFbGVtZW50LHU9cS5yZW5kZXJlcixuPXEucm90YXRpb24sSj1bXSxFPWQ/MTowLG09KGZ8fGR8fFwiXCIpLmxlbmd0aCxjPW0sZyxhPWZ1bmN0aW9uKGEsYyl7Yz1jfHxhO3ZhciBnPWIucGFyZW50Tm9kZTtpZihnJiZcInVuZGVmaW5lZFwiPT09dHlwZW9mIEpbY10paWYoZy5nZXRTdWJTdHJpbmdMZW5ndGgpdHJ5e0pbY109ZStnLmdldFN1YlN0cmluZ0xlbmd0aCgwLGQ/YysxOmMpfWNhdGNoKEwpe1wiXCJ9ZWxzZSB1LmdldFNwYW5XaWR0aCYmKGIudGV4dENvbnRlbnQ9bChmfHxkLGEpLEpbY109ZSt1LmdldFNwYW5XaWR0aChxLGIpKTtyZXR1cm4gSltjXX07cS5yb3RhdGlvbj0wO3ZhciBoPWEoYi50ZXh0Q29udGVudC5sZW5ndGgpO1xuaWYoZStoPmspe2Zvcig7RTw9bTspYz1NYXRoLmNlaWwoKEUrbSkvMiksZCYmKGc9bChkLGMpKSxoPWEoYyxnJiZnLmxlbmd0aC0xKSxFPT09bT9FPW0rMTpoPms/bT1jLTE6RT1jOzA9PT1tP2IudGV4dENvbnRlbnQ9XCJcIjpmJiZtPT09Zi5sZW5ndGgtMXx8KGIudGV4dENvbnRlbnQ9Z3x8bChmfHxkLGMpKX1kJiZkLnNwbGljZSgwLGMpO3EuYWN0dWFsV2lkdGg9aDtxLnJvdGF0aW9uPW59O2IucHJvdG90eXBlLnVuZXNjYXBlRW50aXRpZXM9ZnVuY3Rpb24oYixmKXtCKHRoaXMucmVuZGVyZXIuZXNjYXBlcyxmdW5jdGlvbihkLGUpe2YmJi0xIT09Zi5pbmRleE9mKGQpfHwoYj1iLnRvU3RyaW5nKCkucmVwbGFjZShuZXcgUmVnRXhwKGQsXCJnXCIpLGUpKX0pO3JldHVybiBifTtyZXR1cm4gYn0oKX0pO08oZSxcIkNvcmUvUmVuZGVyZXIvU1ZHL1NWR1JlbmRlcmVyLmpzXCIsW2VbXCJDb3JlL0NvbG9yL0NvbG9yLmpzXCJdLGVbXCJDb3JlL0dsb2JhbHMuanNcIl0sZVtcIkNvcmUvQ29sb3IvUGFsZXR0ZS5qc1wiXSxcbmVbXCJDb3JlL1JlbmRlcmVyL1NWRy9TVkdFbGVtZW50LmpzXCJdLGVbXCJDb3JlL1JlbmRlcmVyL1NWRy9TVkdMYWJlbC5qc1wiXSxlW1wiQ29yZS9SZW5kZXJlci9IVE1ML0FTVC5qc1wiXSxlW1wiQ29yZS9SZW5kZXJlci9TVkcvVGV4dEJ1aWxkZXIuanNcIl0sZVtcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihlLGIsSSx6LEgsRyxDLEIpe3ZhciB4PUIuYWRkRXZlbnQsdz1CLmF0dHIsdj1CLmNyZWF0ZUVsZW1lbnQsZj1CLmNzcyxkPUIuZGVmaW5lZCxxPUIuZGVzdHJveU9iamVjdFByb3BlcnRpZXMsaz1CLmV4dGVuZCxsPUIuaXNBcnJheSxOPUIuaXNOdW1iZXIsdT1CLmlzT2JqZWN0LG49Qi5pc1N0cmluZyxKPUIubWVyZ2UsRT1CLnBpY2ssbT1CLnBJbnQsYz1CLnVuaXF1ZUtleSxnPWIuY2hhcnRzLGE9Yi5kZWcycmFkLGg9Yi5kb2Mscj1iLmlzRmlyZWZveCxBPWIuaXNNUyx5PWIuaXNXZWJLaXQsTD1iLm5vb3AsUD1iLlNWR19OUyxSPWIuc3ltYm9sU2l6ZXMsVj1iLndpbixRO0I9XG5mdW5jdGlvbigpe2Z1bmN0aW9uIHQoYSxjLGcsdCxkLGgscil7dGhpcy53aWR0aD10aGlzLnVybD10aGlzLnN0eWxlPXRoaXMuaXNTVkc9dGhpcy5pbWdDb3VudD10aGlzLmhlaWdodD10aGlzLmdyYWRpZW50cz10aGlzLmdsb2JhbEFuaW1hdGlvbj10aGlzLmRlZnM9dGhpcy5jaGFydEluZGV4PXRoaXMuY2FjaGVLZXlzPXRoaXMuY2FjaGU9dGhpcy5ib3hXcmFwcGVyPXRoaXMuYm94PXRoaXMuYWxpZ25lZE9iamVjdHM9dm9pZCAwO3RoaXMuaW5pdChhLGMsZyx0LGQsaCxyKX10LnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGEsYyxnLHQsZCxiLEspe3ZhciBwPXRoaXMuY3JlYXRlRWxlbWVudChcInN2Z1wiKS5hdHRyKHt2ZXJzaW9uOlwiMS4xXCIsXCJjbGFzc1wiOlwiaGlnaGNoYXJ0cy1yb290XCJ9KTtLfHxwLmNzcyh0aGlzLmdldFN0eWxlKHQpKTt0PXAuZWxlbWVudDthLmFwcGVuZENoaWxkKHQpO3coYSxcImRpclwiLFwibHRyXCIpOy0xPT09YS5pbm5lckhUTUwuaW5kZXhPZihcInhtbG5zXCIpJiZ3KHQsXG5cInhtbG5zXCIsdGhpcy5TVkdfTlMpO3RoaXMuaXNTVkc9ITA7dGhpcy5ib3g9dDt0aGlzLmJveFdyYXBwZXI9cDt0aGlzLmFsaWduZWRPYmplY3RzPVtdO3RoaXMudXJsPXRoaXMuZ2V0UmVmZXJlbmNlVVJMKCk7dGhpcy5jcmVhdGVFbGVtZW50KFwiZGVzY1wiKS5hZGQoKS5lbGVtZW50LmFwcGVuZENoaWxkKGguY3JlYXRlVGV4dE5vZGUoXCJDcmVhdGVkIHdpdGggSGlnaGNoYXJ0cyA5LjEuMFwiKSk7dGhpcy5kZWZzPXRoaXMuY3JlYXRlRWxlbWVudChcImRlZnNcIikuYWRkKCk7dGhpcy5hbGxvd0hUTUw9Yjt0aGlzLmZvckV4cG9ydD1kO3RoaXMuc3R5bGVkTW9kZT1LO3RoaXMuZ3JhZGllbnRzPXt9O3RoaXMuY2FjaGU9e307dGhpcy5jYWNoZUtleXM9W107dGhpcy5pbWdDb3VudD0wO3RoaXMuc2V0U2l6ZShjLGcsITEpO3ZhciBGO3ImJmEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0JiYoYz1mdW5jdGlvbigpe2YoYSx7bGVmdDowLHRvcDowfSk7Rj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuZihhLHtsZWZ0Ok1hdGguY2VpbChGLmxlZnQpLUYubGVmdCtcInB4XCIsdG9wOk1hdGguY2VpbChGLnRvcCktRi50b3ArXCJweFwifSl9LGMoKSx0aGlzLnVuU3ViUGl4ZWxGaXg9eChWLFwicmVzaXplXCIsYykpfTt0LnByb3RvdHlwZS5kZWZpbml0aW9uPWZ1bmN0aW9uKGEpe3JldHVybihuZXcgRyhbYV0pKS5hZGRUb0RPTSh0aGlzLmRlZnMuZWxlbWVudCl9O3QucHJvdG90eXBlLmdldFJlZmVyZW5jZVVSTD1mdW5jdGlvbigpe2lmKChyfHx5KSYmaC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJhc2VcIikubGVuZ3RoKXtpZighZChRKSl7dmFyIGE9YygpO2E9KG5ldyBHKFt7dGFnTmFtZTpcInN2Z1wiLGF0dHJpYnV0ZXM6e3dpZHRoOjgsaGVpZ2h0Ojh9LGNoaWxkcmVuOlt7dGFnTmFtZTpcImRlZnNcIixjaGlsZHJlbjpbe3RhZ05hbWU6XCJjbGlwUGF0aFwiLGF0dHJpYnV0ZXM6e2lkOmF9LGNoaWxkcmVuOlt7dGFnTmFtZTpcInJlY3RcIixhdHRyaWJ1dGVzOnt3aWR0aDo0LGhlaWdodDo0fX1dfV19LHt0YWdOYW1lOlwicmVjdFwiLFxuYXR0cmlidXRlczp7aWQ6XCJoaXRtZVwiLHdpZHRoOjgsaGVpZ2h0OjgsXCJjbGlwLXBhdGhcIjpcInVybCgjXCIrYStcIilcIixmaWxsOlwicmdiYSgwLDAsMCwwLjAwMSlcIn19XX1dKSkuYWRkVG9ET00oaC5ib2R5KTtmKGEse3Bvc2l0aW9uOlwiZml4ZWRcIix0b3A6MCxsZWZ0OjAsekluZGV4OjlFNX0pO3ZhciBnPWguZWxlbWVudEZyb21Qb2ludCg2LDYpO1E9XCJoaXRtZVwiPT09KGcmJmcuaWQpO2guYm9keS5yZW1vdmVDaGlsZChhKX1pZihRKXJldHVybiBWLmxvY2F0aW9uLmhyZWYuc3BsaXQoXCIjXCIpWzBdLnJlcGxhY2UoLzxbXj5dKj4vZyxcIlwiKS5yZXBsYWNlKC8oW1xcKCdcXCldKS9nLFwiXFxcXCQxXCIpLnJlcGxhY2UoLyAvZyxcIiUyMFwiKX1yZXR1cm5cIlwifTt0LnByb3RvdHlwZS5nZXRTdHlsZT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zdHlsZT1rKHtmb250RmFtaWx5OidcIkx1Y2lkYSBHcmFuZGVcIiwgXCJMdWNpZGEgU2FucyBVbmljb2RlXCIsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYnLGZvbnRTaXplOlwiMTJweFwifSxcbmEpfTt0LnByb3RvdHlwZS5zZXRTdHlsZT1mdW5jdGlvbihhKXt0aGlzLmJveFdyYXBwZXIuY3NzKHRoaXMuZ2V0U3R5bGUoYSkpfTt0LnByb3RvdHlwZS5pc0hpZGRlbj1mdW5jdGlvbigpe3JldHVybiF0aGlzLmJveFdyYXBwZXIuZ2V0QkJveCgpLndpZHRofTt0LnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5kZWZzO3RoaXMuYm94PW51bGw7dGhpcy5ib3hXcmFwcGVyPXRoaXMuYm94V3JhcHBlci5kZXN0cm95KCk7cSh0aGlzLmdyYWRpZW50c3x8e30pO3RoaXMuZ3JhZGllbnRzPW51bGw7YSYmKHRoaXMuZGVmcz1hLmRlc3Ryb3koKSk7dGhpcy51blN1YlBpeGVsRml4JiZ0aGlzLnVuU3ViUGl4ZWxGaXgoKTtyZXR1cm4gdGhpcy5hbGlnbmVkT2JqZWN0cz1udWxsfTt0LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGEpe3ZhciBjPW5ldyB0aGlzLkVsZW1lbnQ7Yy5pbml0KHRoaXMsYSk7cmV0dXJuIGN9O3QucHJvdG90eXBlLmdldFJhZGlhbEF0dHI9XG5mdW5jdGlvbihhLGMpe3JldHVybntjeDphWzBdLWFbMl0vMisoYy5jeHx8MCkqYVsyXSxjeTphWzFdLWFbMl0vMisoYy5jeXx8MCkqYVsyXSxyOihjLnJ8fDApKmFbMl19fTt0LnByb3RvdHlwZS5idWlsZFRleHQ9ZnVuY3Rpb24oYSl7KG5ldyBDKGEpKS5idWlsZFNWRygpfTt0LnByb3RvdHlwZS5nZXRDb250cmFzdD1mdW5jdGlvbihhKXthPWUucGFyc2UoYSkucmdiYTthWzBdKj0xO2FbMV0qPTEuMjthWzJdKj0uNTtyZXR1cm4gNDU5PGFbMF0rYVsxXSthWzJdP1wiIzAwMDAwMFwiOlwiI0ZGRkZGRlwifTt0LnByb3RvdHlwZS5idXR0b249ZnVuY3Rpb24oYSxjLGcsdCxkLGgscixiLG0sZil7dmFyIHA9dGhpcy5sYWJlbChhLGMsZyxtLHZvaWQgMCx2b2lkIDAsZix2b2lkIDAsXCJidXR0b25cIiksRj0wLEs9dGhpcy5zdHlsZWRNb2RlLHk9ZD9KKGQpOnt9O2E9eSYmeS5zdHlsZXx8e307eT1HLmZpbHRlclVzZXJBdHRyaWJ1dGVzKHkpO3AuYXR0cihKKHtwYWRkaW5nOjgscjoyfSx5KSk7aWYoIUspe3k9XG5KKHtmaWxsOkkubmV1dHJhbENvbG9yMyxzdHJva2U6SS5uZXV0cmFsQ29sb3IyMCxcInN0cm9rZS13aWR0aFwiOjEsc3R5bGU6e2NvbG9yOkkubmV1dHJhbENvbG9yODAsY3Vyc29yOlwicG9pbnRlclwiLGZvbnRXZWlnaHQ6XCJub3JtYWxcIn19LHtzdHlsZTphfSx5KTt2YXIgbD15LnN0eWxlO2RlbGV0ZSB5LnN0eWxlO2g9Sih5LHtmaWxsOkkubmV1dHJhbENvbG9yMTB9LEcuZmlsdGVyVXNlckF0dHJpYnV0ZXMoaHx8e30pKTt2YXIgUz1oLnN0eWxlO2RlbGV0ZSBoLnN0eWxlO3I9Sih5LHtmaWxsOkkuaGlnaGxpZ2h0Q29sb3IxMCxzdHlsZTp7Y29sb3I6SS5uZXV0cmFsQ29sb3IxMDAsZm9udFdlaWdodDpcImJvbGRcIn19LEcuZmlsdGVyVXNlckF0dHJpYnV0ZXMocnx8e30pKTt2YXIgdT1yLnN0eWxlO2RlbGV0ZSByLnN0eWxlO2I9Sih5LHtzdHlsZTp7Y29sb3I6SS5uZXV0cmFsQ29sb3IyMH19LEcuZmlsdGVyVXNlckF0dHJpYnV0ZXMoYnx8e30pKTt2YXIgbj1iLnN0eWxlO2RlbGV0ZSBiLnN0eWxlfXgocC5lbGVtZW50LFxuQT9cIm1vdXNlb3ZlclwiOlwibW91c2VlbnRlclwiLGZ1bmN0aW9uKCl7MyE9PUYmJnAuc2V0U3RhdGUoMSl9KTt4KHAuZWxlbWVudCxBP1wibW91c2VvdXRcIjpcIm1vdXNlbGVhdmVcIixmdW5jdGlvbigpezMhPT1GJiZwLnNldFN0YXRlKEYpfSk7cC5zZXRTdGF0ZT1mdW5jdGlvbihhKXsxIT09YSYmKHAuc3RhdGU9Rj1hKTtwLnJlbW92ZUNsYXNzKC9oaWdoY2hhcnRzLWJ1dHRvbi0obm9ybWFsfGhvdmVyfHByZXNzZWR8ZGlzYWJsZWQpLykuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWJ1dHRvbi1cIitbXCJub3JtYWxcIixcImhvdmVyXCIsXCJwcmVzc2VkXCIsXCJkaXNhYmxlZFwiXVthfHwwXSk7S3x8cC5hdHRyKFt5LGgscixiXVthfHwwXSkuY3NzKFtsLFMsdSxuXVthfHwwXSl9O0t8fHAuYXR0cih5KS5jc3Moayh7Y3Vyc29yOlwiZGVmYXVsdFwifSxsKSk7cmV0dXJuIHAub24oXCJ0b3VjaHN0YXJ0XCIsZnVuY3Rpb24oYSl7cmV0dXJuIGEuc3RvcFByb3BhZ2F0aW9uKCl9KS5vbihcImNsaWNrXCIsZnVuY3Rpb24oYSl7MyE9PVxuRiYmdC5jYWxsKHAsYSl9KX07dC5wcm90b3R5cGUuY3Jpc3BMaW5lPWZ1bmN0aW9uKGEsYyxnKXt2b2lkIDA9PT1nJiYoZz1cInJvdW5kXCIpO3ZhciBwPWFbMF0sdD1hWzFdO3BbMV09PT10WzFdJiYocFsxXT10WzFdPU1hdGhbZ10ocFsxXSktYyUyLzIpO3BbMl09PT10WzJdJiYocFsyXT10WzJdPU1hdGhbZ10ocFsyXSkrYyUyLzIpO3JldHVybiBhfTt0LnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuc3R5bGVkTW9kZT97fTp7ZmlsbDpcIm5vbmVcIn07bChhKT9jLmQ9YTp1KGEpJiZrKGMsYSk7cmV0dXJuIHRoaXMuY3JlYXRlRWxlbWVudChcInBhdGhcIikuYXR0cihjKX07dC5wcm90b3R5cGUuY2lyY2xlPWZ1bmN0aW9uKGEsYyxnKXthPXUoYSk/YTpcInVuZGVmaW5lZFwiPT09dHlwZW9mIGE/e306e3g6YSx5OmMscjpnfTtjPXRoaXMuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiKTtjLnhTZXR0ZXI9Yy55U2V0dGVyPWZ1bmN0aW9uKGEsYyxwKXtwLnNldEF0dHJpYnV0ZShcImNcIitcbmMsYSl9O3JldHVybiBjLmF0dHIoYSl9O3QucHJvdG90eXBlLmFyYz1mdW5jdGlvbihhLGMsZyx0LGQsaCl7dShhKT8odD1hLGM9dC55LGc9dC5yLGE9dC54KTp0PXtpbm5lclI6dCxzdGFydDpkLGVuZDpofTthPXRoaXMuc3ltYm9sKFwiYXJjXCIsYSxjLGcsZyx0KTthLnI9ZztyZXR1cm4gYX07dC5wcm90b3R5cGUucmVjdD1mdW5jdGlvbihhLGMsZyx0LGQsaCl7ZD11KGEpP2EucjpkO3ZhciBwPXRoaXMuY3JlYXRlRWxlbWVudChcInJlY3RcIik7YT11KGEpP2E6XCJ1bmRlZmluZWRcIj09PXR5cGVvZiBhP3t9Ont4OmEseTpjLHdpZHRoOk1hdGgubWF4KGcsMCksaGVpZ2h0Ok1hdGgubWF4KHQsMCl9O3RoaXMuc3R5bGVkTW9kZXx8KFwidW5kZWZpbmVkXCIhPT10eXBlb2YgaCYmKGFbXCJzdHJva2Utd2lkdGhcIl09aCxhPXAuY3Jpc3AoYSkpLGEuZmlsbD1cIm5vbmVcIik7ZCYmKGEucj1kKTtwLnJTZXR0ZXI9ZnVuY3Rpb24oYSxjLGcpe3Aucj1hO3coZyx7cng6YSxyeTphfSl9O3AuckdldHRlcj1mdW5jdGlvbigpe3JldHVybiBwLnJ8fFxuMH07cmV0dXJuIHAuYXR0cihhKX07dC5wcm90b3R5cGUuc2V0U2l6ZT1mdW5jdGlvbihhLGMsZyl7dGhpcy53aWR0aD1hO3RoaXMuaGVpZ2h0PWM7dGhpcy5ib3hXcmFwcGVyLmFuaW1hdGUoe3dpZHRoOmEsaGVpZ2h0OmN9LHtzdGVwOmZ1bmN0aW9uKCl7dGhpcy5hdHRyKHt2aWV3Qm94OlwiMCAwIFwiK3RoaXMuYXR0cihcIndpZHRoXCIpK1wiIFwiK3RoaXMuYXR0cihcImhlaWdodFwiKX0pfSxkdXJhdGlvbjpFKGcsITApP3ZvaWQgMDowfSk7dGhpcy5hbGlnbkVsZW1lbnRzKCl9O3QucHJvdG90eXBlLmc9ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5jcmVhdGVFbGVtZW50KFwiZ1wiKTtyZXR1cm4gYT9jLmF0dHIoe1wiY2xhc3NcIjpcImhpZ2hjaGFydHMtXCIrYX0pOmN9O3QucHJvdG90eXBlLmltYWdlPWZ1bmN0aW9uKGEsYyxnLHQsZCxoKXt2YXIgcD17cHJlc2VydmVBc3BlY3RSYXRpbzpcIm5vbmVcIn0scj1mdW5jdGlvbihhLGMpe2Euc2V0QXR0cmlidXRlTlM/YS5zZXRBdHRyaWJ1dGVOUyhcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcblwiaHJlZlwiLGMpOmEuc2V0QXR0cmlidXRlKFwiaGMtc3ZnLWhyZWZcIixjKX0sRj1mdW5jdGlvbihjKXtyKGIuZWxlbWVudCxhKTtoLmNhbGwoYixjKX07MTxhcmd1bWVudHMubGVuZ3RoJiZrKHAse3g6Yyx5Omcsd2lkdGg6dCxoZWlnaHQ6ZH0pO3ZhciBiPXRoaXMuY3JlYXRlRWxlbWVudChcImltYWdlXCIpLmF0dHIocCk7aD8ocihiLmVsZW1lbnQsXCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUFBQUFDSDVCQUVLQUFFQUxBQUFBQUFCQUFFQUFBSUNUQUVBT3c9PVwiKSxwPW5ldyBWLkltYWdlLHgocCxcImxvYWRcIixGKSxwLnNyYz1hLHAuY29tcGxldGUmJkYoe30pKTpyKGIuZWxlbWVudCxhKTtyZXR1cm4gYn07dC5wcm90b3R5cGUuc3ltYm9sPWZ1bmN0aW9uKGEsYyx0LHIsRixiKXt2YXIgcD10aGlzLG09L151cmxcXCgoLio/KVxcKSQvLEE9bS50ZXN0KGEpLHk9IUEmJih0aGlzLnN5bWJvbHNbYV0/YTpcImNpcmNsZVwiKSxsPXkmJnRoaXMuc3ltYm9sc1t5XSx1O2lmKGwpe1wibnVtYmVyXCI9PT1cbnR5cGVvZiBjJiYodT1sLmNhbGwodGhpcy5zeW1ib2xzLE1hdGgucm91bmQoY3x8MCksTWF0aC5yb3VuZCh0fHwwKSxyfHwwLEZ8fDAsYikpO3ZhciBuPXRoaXMucGF0aCh1KTtwLnN0eWxlZE1vZGV8fG4uYXR0cihcImZpbGxcIixcIm5vbmVcIik7ayhuLHtzeW1ib2xOYW1lOnkseDpjLHk6dCx3aWR0aDpyLGhlaWdodDpGfSk7YiYmayhuLGIpfWVsc2UgaWYoQSl7dmFyIGU9YS5tYXRjaChtKVsxXTtuPXRoaXMuaW1hZ2UoZSk7bi5pbWd3aWR0aD1FKFJbZV0mJlJbZV0ud2lkdGgsYiYmYi53aWR0aCk7bi5pbWdoZWlnaHQ9RShSW2VdJiZSW2VdLmhlaWdodCxiJiZiLmhlaWdodCk7dmFyIFM9ZnVuY3Rpb24oKXtuLmF0dHIoe3dpZHRoOm4ud2lkdGgsaGVpZ2h0Om4uaGVpZ2h0fSl9O1tcIndpZHRoXCIsXCJoZWlnaHRcIl0uZm9yRWFjaChmdW5jdGlvbihhKXtuW2ErXCJTZXR0ZXJcIl09ZnVuY3Rpb24oYSxjKXt2YXIgcD10aGlzW1wiaW1nXCIrY107dGhpc1tjXT1hO2QocCkmJihiJiZcIndpdGhpblwiPT09XG5iLmJhY2tncm91bmRTaXplJiZ0aGlzLndpZHRoJiZ0aGlzLmhlaWdodCYmKHA9TWF0aC5yb3VuZChwKk1hdGgubWluKHRoaXMud2lkdGgvdGhpcy5pbWd3aWR0aCx0aGlzLmhlaWdodC90aGlzLmltZ2hlaWdodCkpKSx0aGlzLmVsZW1lbnQmJnRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoYyxwKSx0aGlzLmFsaWduQnlUcmFuc2xhdGV8fChhPSgodGhpc1tjXXx8MCktcCkvMix0aGlzLmF0dHIoXCJ3aWR0aFwiPT09Yz97dHJhbnNsYXRlWDphfTp7dHJhbnNsYXRlWTphfSkpKX19KTtkKGMpJiZuLmF0dHIoe3g6Yyx5OnR9KTtuLmlzSW1nPSEwO2Qobi5pbWd3aWR0aCkmJmQobi5pbWdoZWlnaHQpP1MoKToobi5hdHRyKHt3aWR0aDowLGhlaWdodDowfSksdihcImltZ1wiLHtvbmxvYWQ6ZnVuY3Rpb24oKXt2YXIgYT1nW3AuY2hhcnRJbmRleF07MD09PXRoaXMud2lkdGgmJihmKHRoaXMse3Bvc2l0aW9uOlwiYWJzb2x1dGVcIix0b3A6XCItOTk5ZW1cIn0pLGguYm9keS5hcHBlbmRDaGlsZCh0aGlzKSk7XG5SW2VdPXt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH07bi5pbWd3aWR0aD10aGlzLndpZHRoO24uaW1naGVpZ2h0PXRoaXMuaGVpZ2h0O24uZWxlbWVudCYmUygpO3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpO3AuaW1nQ291bnQtLTtpZighcC5pbWdDb3VudCYmYSYmIWEuaGFzTG9hZGVkKWEub25sb2FkKCl9LHNyYzplfSksdGhpcy5pbWdDb3VudCsrKX1yZXR1cm4gbn07dC5wcm90b3R5cGUuY2xpcFJlY3Q9ZnVuY3Rpb24oYSxnLHQsZCl7dmFyIHA9YygpK1wiLVwiLGg9dGhpcy5jcmVhdGVFbGVtZW50KFwiY2xpcFBhdGhcIikuYXR0cih7aWQ6cH0pLmFkZCh0aGlzLmRlZnMpO2E9dGhpcy5yZWN0KGEsZyx0LGQsMCkuYWRkKGgpO2EuaWQ9cDthLmNsaXBQYXRoPWg7YS5jb3VudD0wO3JldHVybiBhfTt0LnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKGEsYyxnLHQpe3ZhciBwPXt9O2lmKHQmJih0aGlzLmFsbG93SFRNTHx8IXRoaXMuZm9yRXhwb3J0KSlyZXR1cm4gdGhpcy5odG1sKGEsXG5jLGcpO3AueD1NYXRoLnJvdW5kKGN8fDApO2cmJihwLnk9TWF0aC5yb3VuZChnKSk7ZChhKSYmKHAudGV4dD1hKTthPXRoaXMuY3JlYXRlRWxlbWVudChcInRleHRcIikuYXR0cihwKTt0fHwoYS54U2V0dGVyPWZ1bmN0aW9uKGEsYyxwKXt2YXIgZz1wLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidHNwYW5cIiksdD1wLmdldEF0dHJpYnV0ZShjKSxkO2ZvcihkPTA7ZDxnLmxlbmd0aDtkKyspe3ZhciBoPWdbZF07aC5nZXRBdHRyaWJ1dGUoYyk9PT10JiZoLnNldEF0dHJpYnV0ZShjLGEpfXAuc2V0QXR0cmlidXRlKGMsYSl9KTtyZXR1cm4gYX07dC5wcm90b3R5cGUuZm9udE1ldHJpY3M9ZnVuY3Rpb24oYSxjKXthPSF0aGlzLnN0eWxlZE1vZGUmJi9weC8udGVzdChhKXx8IVYuZ2V0Q29tcHV0ZWRTdHlsZT9hfHxjJiZjLnN0eWxlJiZjLnN0eWxlLmZvbnRTaXplfHx0aGlzLnN0eWxlJiZ0aGlzLnN0eWxlLmZvbnRTaXplOmMmJnoucHJvdG90eXBlLmdldFN0eWxlLmNhbGwoYyxcImZvbnQtc2l6ZVwiKTtcbmE9L3B4Ly50ZXN0KGEpP20oYSk6MTI7Yz0yND5hP2ErMzpNYXRoLnJvdW5kKDEuMiphKTtyZXR1cm57aDpjLGI6TWF0aC5yb3VuZCguOCpjKSxmOmF9fTt0LnByb3RvdHlwZS5yb3RDb3JyPWZ1bmN0aW9uKGMsZyx0KXt2YXIgcD1jO2cmJnQmJihwPU1hdGgubWF4KHAqTWF0aC5jb3MoZyphKSw0KSk7cmV0dXJue3g6LWMvMypNYXRoLnNpbihnKmEpLHk6cH19O3QucHJvdG90eXBlLnBhdGhUb1NlZ21lbnRzPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYz1bXSxnPVtdLHA9e0E6OCxDOjcsSDoyLEw6MyxNOjMsUTo1LFM6NSxUOjMsVjoyfSx0PTA7dDxhLmxlbmd0aDt0KyspbihnWzBdKSYmTihhW3RdKSYmZy5sZW5ndGg9PT1wW2dbMF0udG9VcHBlckNhc2UoKV0mJmEuc3BsaWNlKHQsMCxnWzBdLnJlcGxhY2UoXCJNXCIsXCJMXCIpLnJlcGxhY2UoXCJtXCIsXCJsXCIpKSxcInN0cmluZ1wiPT09dHlwZW9mIGFbdF0mJihnLmxlbmd0aCYmYy5wdXNoKGcuc2xpY2UoMCkpLGcubGVuZ3RoPTApLGcucHVzaChhW3RdKTtcbmMucHVzaChnLnNsaWNlKDApKTtyZXR1cm4gY307dC5wcm90b3R5cGUubGFiZWw9ZnVuY3Rpb24oYSxjLGcsdCxkLGgscixiLG0pe3JldHVybiBuZXcgSCh0aGlzLGEsYyxnLHQsZCxoLHIsYixtKX07dC5wcm90b3R5cGUuYWxpZ25FbGVtZW50cz1mdW5jdGlvbigpe3RoaXMuYWxpZ25lZE9iamVjdHMuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gYS5hbGlnbigpfSl9O3JldHVybiB0fSgpO0IucHJvdG90eXBlLkVsZW1lbnQ9ejtCLnByb3RvdHlwZS5TVkdfTlM9UDtCLnByb3RvdHlwZS5kcmF3PUw7Qi5wcm90b3R5cGUuZXNjYXBlcz17XCImXCI6XCImYW1wO1wiLFwiPFwiOlwiJmx0O1wiLFwiPlwiOlwiJmd0O1wiLFwiJ1wiOlwiJiMzOTtcIiwnXCInOlwiJnF1b3Q7XCJ9O3ZhciBNPWZ1bmN0aW9uKGEsYyxnLGQsaCl7aD1oJiZoLnJ8fDA7cmV0dXJuW1tcIk1cIixhK2gsY10sW1wiTFwiLGErZy1oLGNdLFtcIkNcIixhK2csYyxhK2csYyxhK2csYytoXSxbXCJMXCIsYStnLGMrZC1oXSxbXCJDXCIsYStnLGMrZCxhK2csYytkLGErXG5nLWgsYytkXSxbXCJMXCIsYStoLGMrZF0sW1wiQ1wiLGEsYytkLGEsYytkLGEsYytkLWhdLFtcIkxcIixhLGMraF0sW1wiQ1wiLGEsYyxhLGMsYStoLGNdXX07TD1mdW5jdGlvbihhLGMsZyxkLGgpe3JldHVybiBoJiZoLnI/TShhLGMsZyxkLGgpOltbXCJNXCIsYSxjXSxbXCJMXCIsYStnLGNdLFtcIkxcIixhK2csYytkXSxbXCJMXCIsYSxjK2RdLFtcIlpcIl1dfTtCLnByb3RvdHlwZS5zeW1ib2xzPXtjaXJjbGU6ZnVuY3Rpb24oYSxjLGcsZCl7cmV0dXJuIHRoaXMuYXJjKGErZy8yLGMrZC8yLGcvMixkLzIse3N0YXJ0Oi41Kk1hdGguUEksZW5kOjIuNSpNYXRoLlBJLG9wZW46ITF9KX0scmVjdDpMLHNxdWFyZTpMLHRyaWFuZ2xlOmZ1bmN0aW9uKGEsYyxnLGQpe3JldHVybltbXCJNXCIsYStnLzIsY10sW1wiTFwiLGErZyxjK2RdLFtcIkxcIixhLGMrZF0sW1wiWlwiXV19LFwidHJpYW5nbGUtZG93blwiOmZ1bmN0aW9uKGEsYyxnLGQpe3JldHVybltbXCJNXCIsYSxjXSxbXCJMXCIsYStnLGNdLFtcIkxcIixhK2cvMixjK2RdLFtcIlpcIl1dfSxcbmRpYW1vbmQ6ZnVuY3Rpb24oYSxjLGcsZCl7cmV0dXJuW1tcIk1cIixhK2cvMixjXSxbXCJMXCIsYStnLGMrZC8yXSxbXCJMXCIsYStnLzIsYytkXSxbXCJMXCIsYSxjK2QvMl0sW1wiWlwiXV19LGFyYzpmdW5jdGlvbihhLGMsZyxoLHIpe3ZhciB0PVtdO2lmKHIpe3ZhciBwPXIuc3RhcnR8fDAsYj1FKHIucixnKTtnPUUoci5yLGh8fGcpO3ZhciBtPShyLmVuZHx8MCktLjAwMTtoPXIuaW5uZXJSO3ZhciBmPUUoci5vcGVuLC4wMDE+TWF0aC5hYnMoKHIuZW5kfHwwKS1wLTIqTWF0aC5QSSkpLEE9TWF0aC5jb3MocCkseT1NYXRoLnNpbihwKSxsPU1hdGguY29zKG0pLG49TWF0aC5zaW4obSk7cD1FKHIubG9uZ0FyYywuMDAxPm0tcC1NYXRoLlBJPzA6MSk7dC5wdXNoKFtcIk1cIixhK2IqQSxjK2cqeV0sW1wiQVwiLGIsZywwLHAsRShyLmNsb2Nrd2lzZSwxKSxhK2IqbCxjK2cqbl0pO2QoaCkmJnQucHVzaChmP1tcIk1cIixhK2gqbCxjK2gqbl06W1wiTFwiLGEraCpsLGMraCpuXSxbXCJBXCIsaCxoLDAscCxkKHIuY2xvY2t3aXNlKT9cbjEtci5jbG9ja3dpc2U6MCxhK2gqQSxjK2gqeV0pO2Z8fHQucHVzaChbXCJaXCJdKX1yZXR1cm4gdH0sY2FsbG91dDpmdW5jdGlvbihhLGMsZyxkLGgpe3ZhciBwPU1hdGgubWluKGgmJmgucnx8MCxnLGQpLHQ9cCs2LHI9aCYmaC5hbmNob3JYO2g9aCYmaC5hbmNob3JZfHwwO3ZhciBiPU0oYSxjLGcsZCx7cjpwfSk7aWYoIU4ocikpcmV0dXJuIGI7YStyPj1nP2g+Yyt0JiZoPGMrZC10P2Iuc3BsaWNlKDMsMSxbXCJMXCIsYStnLGgtNl0sW1wiTFwiLGErZys2LGhdLFtcIkxcIixhK2csaCs2XSxbXCJMXCIsYStnLGMrZC1wXSk6Yi5zcGxpY2UoMywxLFtcIkxcIixhK2csZC8yXSxbXCJMXCIscixoXSxbXCJMXCIsYStnLGQvMl0sW1wiTFwiLGErZyxjK2QtcF0pOjA+PWErcj9oPmMrdCYmaDxjK2QtdD9iLnNwbGljZSg3LDEsW1wiTFwiLGEsaCs2XSxbXCJMXCIsYS02LGhdLFtcIkxcIixhLGgtNl0sW1wiTFwiLGEsYytwXSk6Yi5zcGxpY2UoNywxLFtcIkxcIixhLGQvMl0sW1wiTFwiLHIsaF0sW1wiTFwiLGEsZC8yXSxbXCJMXCIsYSxjK3BdKTpcbmgmJmg+ZCYmcj5hK3QmJnI8YStnLXQ/Yi5zcGxpY2UoNSwxLFtcIkxcIixyKzYsYytkXSxbXCJMXCIscixjK2QrNl0sW1wiTFwiLHItNixjK2RdLFtcIkxcIixhK3AsYytkXSk6aCYmMD5oJiZyPmErdCYmcjxhK2ctdCYmYi5zcGxpY2UoMSwxLFtcIkxcIixyLTYsY10sW1wiTFwiLHIsYy02XSxbXCJMXCIscis2LGNdLFtcIkxcIixnLXAsY10pO3JldHVybiBifX07Yi5TVkdSZW5kZXJlcj1CO2IuUmVuZGVyZXI9Yi5TVkdSZW5kZXJlcjtyZXR1cm4gYi5SZW5kZXJlcn0pO08oZSxcIkNvcmUvUmVuZGVyZXIvSFRNTC9IVE1MRWxlbWVudC5qc1wiLFtlW1wiQ29yZS9HbG9iYWxzLmpzXCJdLGVbXCJDb3JlL1JlbmRlcmVyL1NWRy9TVkdFbGVtZW50LmpzXCJdLGVbXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oZSxiLEkpe3ZhciBEPWUuaXNGaXJlZm94LEg9ZS5pc01TLEc9ZS5pc1dlYktpdCxDPWUud2luLEI9SS5jc3MseD1JLmRlZmluZWQsdz1JLmV4dGVuZCx2PUkucGljayxmPUkucEludDt3KGIucHJvdG90eXBlLFxue2h0bWxDc3M6ZnVuY3Rpb24oZCl7dmFyIGI9XCJTUEFOXCI9PT10aGlzLmVsZW1lbnQudGFnTmFtZSYmZCYmXCJ3aWR0aFwiaW4gZCxmPXYoYiYmZC53aWR0aCx2b2lkIDApO2lmKGIpe2RlbGV0ZSBkLndpZHRoO3RoaXMudGV4dFdpZHRoPWY7dmFyIGw9ITB9ZCYmXCJlbGxpcHNpc1wiPT09ZC50ZXh0T3ZlcmZsb3cmJihkLndoaXRlU3BhY2U9XCJub3dyYXBcIixkLm92ZXJmbG93PVwiaGlkZGVuXCIpO3RoaXMuc3R5bGVzPXcodGhpcy5zdHlsZXMsZCk7Qih0aGlzLmVsZW1lbnQsZCk7bCYmdGhpcy5odG1sVXBkYXRlVHJhbnNmb3JtKCk7cmV0dXJuIHRoaXN9LGh0bWxHZXRCQm94OmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5lbGVtZW50O3JldHVybnt4OmQub2Zmc2V0TGVmdCx5OmQub2Zmc2V0VG9wLHdpZHRoOmQub2Zmc2V0V2lkdGgsaGVpZ2h0OmQub2Zmc2V0SGVpZ2h0fX0saHRtbFVwZGF0ZVRyYW5zZm9ybTpmdW5jdGlvbigpe2lmKHRoaXMuYWRkZWQpe3ZhciBkPXRoaXMucmVuZGVyZXIsYj10aGlzLmVsZW1lbnQsXG5lPXRoaXMudHJhbnNsYXRlWHx8MCxsPXRoaXMudHJhbnNsYXRlWXx8MCxOPXRoaXMueHx8MCx1PXRoaXMueXx8MCxuPXRoaXMudGV4dEFsaWdufHxcImxlZnRcIixKPXtsZWZ0OjAsY2VudGVyOi41LHJpZ2h0OjF9W25dLEU9dGhpcy5zdHlsZXM7RT1FJiZFLndoaXRlU3BhY2U7QihiLHttYXJnaW5MZWZ0OmUsbWFyZ2luVG9wOmx9KTshZC5zdHlsZWRNb2RlJiZ0aGlzLnNoYWRvd3MmJnRoaXMuc2hhZG93cy5mb3JFYWNoKGZ1bmN0aW9uKGEpe0IoYSx7bWFyZ2luTGVmdDplKzEsbWFyZ2luVG9wOmwrMX0pfSk7dGhpcy5pbnZlcnRlZCYmW10uZm9yRWFjaC5jYWxsKGIuY2hpbGROb2RlcyxmdW5jdGlvbihhKXtkLmludmVydENoaWxkKGEsYil9KTtpZihcIlNQQU5cIj09PWIudGFnTmFtZSl7dmFyIG09dGhpcy5yb3RhdGlvbixjPXZvaWQgMDtjPXRoaXMudGV4dFdpZHRoJiZmKHRoaXMudGV4dFdpZHRoKTt2YXIgZz1bbSxuLGIuaW5uZXJIVE1MLHRoaXMudGV4dFdpZHRoLHRoaXMudGV4dEFsaWduXS5qb2luKCksXG5hOyhhPWMhPT10aGlzLm9sZFRleHRXaWR0aCkmJiEoYT1jPnRoaXMub2xkVGV4dFdpZHRoKSYmKChhPXRoaXMudGV4dFB4TGVuZ3RoKXx8KEIoYix7d2lkdGg6XCJcIix3aGl0ZVNwYWNlOkV8fFwibm93cmFwXCJ9KSxhPWIub2Zmc2V0V2lkdGgpLGE9YT5jKTthJiYoL1sgXFwtXS8udGVzdChiLnRleHRDb250ZW50fHxiLmlubmVyVGV4dCl8fFwiZWxsaXBzaXNcIj09PWIuc3R5bGUudGV4dE92ZXJmbG93KT8oQihiLHt3aWR0aDpjK1wicHhcIixkaXNwbGF5OlwiYmxvY2tcIix3aGl0ZVNwYWNlOkV8fFwibm9ybWFsXCJ9KSx0aGlzLm9sZFRleHRXaWR0aD1jLHRoaXMuaGFzQm94V2lkdGhDaGFuZ2VkPSEwKTp0aGlzLmhhc0JveFdpZHRoQ2hhbmdlZD0hMTtnIT09dGhpcy5jVFQmJihjPWQuZm9udE1ldHJpY3MoYi5zdHlsZS5mb250U2l6ZSxiKS5iLCF4KG0pfHxtPT09KHRoaXMub2xkUm90YXRpb258fDApJiZuPT09dGhpcy5vbGRBbGlnbnx8dGhpcy5zZXRTcGFuUm90YXRpb24obSxKLGMpLHRoaXMuZ2V0U3BhbkNvcnJlY3Rpb24oIXgobSkmJlxudGhpcy50ZXh0UHhMZW5ndGh8fGIub2Zmc2V0V2lkdGgsYyxKLG0sbikpO0IoYix7bGVmdDpOKyh0aGlzLnhDb3JyfHwwKStcInB4XCIsdG9wOnUrKHRoaXMueUNvcnJ8fDApK1wicHhcIn0pO3RoaXMuY1RUPWc7dGhpcy5vbGRSb3RhdGlvbj1tO3RoaXMub2xkQWxpZ249bn19ZWxzZSB0aGlzLmFsaWduT25BZGQ9ITB9LHNldFNwYW5Sb3RhdGlvbjpmdW5jdGlvbihkLGIsZil7dmFyIGw9e30sZT1IJiYhL0VkZ2UvLnRlc3QoQy5uYXZpZ2F0b3IudXNlckFnZW50KT9cIi1tcy10cmFuc2Zvcm1cIjpHP1wiLXdlYmtpdC10cmFuc2Zvcm1cIjpEP1wiTW96VHJhbnNmb3JtXCI6Qy5vcGVyYT9cIi1vLXRyYW5zZm9ybVwiOnZvaWQgMDtlJiYobFtlXT1sLnRyYW5zZm9ybT1cInJvdGF0ZShcIitkK1wiZGVnKVwiLGxbZSsoRD9cIk9yaWdpblwiOlwiLW9yaWdpblwiKV09bC50cmFuc2Zvcm1PcmlnaW49MTAwKmIrXCIlIFwiK2YrXCJweFwiLEIodGhpcy5lbGVtZW50LGwpKX0sZ2V0U3BhbkNvcnJlY3Rpb246ZnVuY3Rpb24oZCxiLGYpe3RoaXMueENvcnI9XG4tZCpmO3RoaXMueUNvcnI9LWJ9fSk7cmV0dXJuIGJ9KTtPKGUsXCJDb3JlL1JlbmRlcmVyL0hUTUwvSFRNTFJlbmRlcmVyLmpzXCIsW2VbXCJDb3JlL1JlbmRlcmVyL0hUTUwvQVNULmpzXCJdLGVbXCJDb3JlL1JlbmRlcmVyL1NWRy9TVkdFbGVtZW50LmpzXCJdLGVbXCJDb3JlL1JlbmRlcmVyL1NWRy9TVkdSZW5kZXJlci5qc1wiXSxlW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGUsYixJLHope3ZhciBEPXouYXR0cixHPXouY3JlYXRlRWxlbWVudCxDPXouZXh0ZW5kLEI9ei5waWNrO0MoSS5wcm90b3R5cGUse2h0bWw6ZnVuY3Rpb24oeCx3LHYpe3ZhciBmPXRoaXMuY3JlYXRlRWxlbWVudChcInNwYW5cIiksZD1mLmVsZW1lbnQscT1mLnJlbmRlcmVyLGs9cS5pc1NWRyxsPWZ1bmN0aW9uKGQsZil7W1wib3BhY2l0eVwiLFwidmlzaWJpbGl0eVwiXS5mb3JFYWNoKGZ1bmN0aW9uKGwpe2RbbCtcIlNldHRlclwiXT1mdW5jdGlvbihuLGUsbSl7dmFyIGM9ZC5kaXY/ZC5kaXYuc3R5bGU6ZjtiLnByb3RvdHlwZVtsK1xuXCJTZXR0ZXJcIl0uY2FsbCh0aGlzLG4sZSxtKTtjJiYoY1tlXT1uKX19KTtkLmFkZGVkU2V0dGVycz0hMH07Zi50ZXh0U2V0dGVyPWZ1bmN0aW9uKGQpe2QhPT10aGlzLnRleHRTdHImJihkZWxldGUgdGhpcy5iQm94LGRlbGV0ZSB0aGlzLm9sZFRleHRXaWR0aCxlLnNldEVsZW1lbnRIVE1MKHRoaXMuZWxlbWVudCxCKGQsXCJcIikpLHRoaXMudGV4dFN0cj1kLGYuZG9UcmFuc2Zvcm09ITApfTtrJiZsKGYsZi5lbGVtZW50LnN0eWxlKTtmLnhTZXR0ZXI9Zi55U2V0dGVyPWYuYWxpZ25TZXR0ZXI9Zi5yb3RhdGlvblNldHRlcj1mdW5jdGlvbihkLGIpe1wiYWxpZ25cIj09PWI/Zi5hbGlnblZhbHVlPWYudGV4dEFsaWduPWQ6ZltiXT1kO2YuZG9UcmFuc2Zvcm09ITB9O2YuYWZ0ZXJTZXR0ZXJzPWZ1bmN0aW9uKCl7dGhpcy5kb1RyYW5zZm9ybSYmKHRoaXMuaHRtbFVwZGF0ZVRyYW5zZm9ybSgpLHRoaXMuZG9UcmFuc2Zvcm09ITEpfTtmLmF0dHIoe3RleHQ6eCx4Ok1hdGgucm91bmQodykseTpNYXRoLnJvdW5kKHYpfSkuY3NzKHtwb3NpdGlvbjpcImFic29sdXRlXCJ9KTtcbnEuc3R5bGVkTW9kZXx8Zi5jc3Moe2ZvbnRGYW1pbHk6dGhpcy5zdHlsZS5mb250RmFtaWx5LGZvbnRTaXplOnRoaXMuc3R5bGUuZm9udFNpemV9KTtkLnN0eWxlLndoaXRlU3BhY2U9XCJub3dyYXBcIjtmLmNzcz1mLmh0bWxDc3M7ayYmKGYuYWRkPWZ1bmN0aW9uKGIpe3ZhciBlPXEuYm94LnBhcmVudE5vZGUsbj1bXTtpZih0aGlzLnBhcmVudEdyb3VwPWIpe3ZhciBrPWIuZGl2O2lmKCFrKXtmb3IoO2I7KW4ucHVzaChiKSxiPWIucGFyZW50R3JvdXA7bi5yZXZlcnNlKCkuZm9yRWFjaChmdW5jdGlvbihkKXtmdW5jdGlvbiBiKGMsZyl7ZFtnXT1jO1widHJhbnNsYXRlWFwiPT09Zz9hLmxlZnQ9YytcInB4XCI6YS50b3A9YytcInB4XCI7ZC5kb1RyYW5zZm9ybT0hMH12YXIgYz1EKGQuZWxlbWVudCxcImNsYXNzXCIpLGc9ZC5zdHlsZXN8fHt9O2s9ZC5kaXY9ZC5kaXZ8fEcoXCJkaXZcIixjP3tjbGFzc05hbWU6Y306dm9pZCAwLHtwb3NpdGlvbjpcImFic29sdXRlXCIsbGVmdDooZC50cmFuc2xhdGVYfHwwKStcblwicHhcIix0b3A6KGQudHJhbnNsYXRlWXx8MCkrXCJweFwiLGRpc3BsYXk6ZC5kaXNwbGF5LG9wYWNpdHk6ZC5vcGFjaXR5LGN1cnNvcjpnLmN1cnNvcixwb2ludGVyRXZlbnRzOmcucG9pbnRlckV2ZW50c30sa3x8ZSk7dmFyIGE9ay5zdHlsZTtDKGQse2NsYXNzU2V0dGVyOmZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihjKXt0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixjKTthLmNsYXNzTmFtZT1jfX0oayksb246ZnVuY3Rpb24oKXtuWzBdLmRpdiYmZi5vbi5hcHBseSh7ZWxlbWVudDpuWzBdLmRpdixvbkV2ZW50czpmLm9uRXZlbnRzfSxhcmd1bWVudHMpO3JldHVybiBkfSx0cmFuc2xhdGVYU2V0dGVyOmIsdHJhbnNsYXRlWVNldHRlcjpifSk7ZC5hZGRlZFNldHRlcnN8fGwoZCl9KX19ZWxzZSBrPWU7ay5hcHBlbmRDaGlsZChkKTtmLmFkZGVkPSEwO2YuYWxpZ25PbkFkZCYmZi5odG1sVXBkYXRlVHJhbnNmb3JtKCk7cmV0dXJuIGZ9KTtyZXR1cm4gZn19KTtyZXR1cm4gSX0pO1xuTyhlLFwiQ29yZS9BeGlzL1RpY2suanNcIixbZVtcIkNvcmUvRm9ybWF0VXRpbGl0aWVzLmpzXCJdLGVbXCJDb3JlL0dsb2JhbHMuanNcIl0sZVtcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihlLGIsSSl7dmFyIEQ9Yi5kZWcycmFkLEg9SS5jbGFtcCxHPUkuY29ycmVjdEZsb2F0LEM9SS5kZWZpbmVkLEI9SS5kZXN0cm95T2JqZWN0UHJvcGVydGllcyx4PUkuZXh0ZW5kLHc9SS5maXJlRXZlbnQsdj1JLmlzTnVtYmVyLGY9SS5tZXJnZSxkPUkub2JqZWN0RWFjaCxxPUkucGljaztcIlwiO0k9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKGQsYixmLGUsayl7dGhpcy5pc05ld0xhYmVsPXRoaXMuaXNOZXc9ITA7dGhpcy5heGlzPWQ7dGhpcy5wb3M9Yjt0aGlzLnR5cGU9Znx8XCJcIjt0aGlzLnBhcmFtZXRlcnM9a3x8e307dGhpcy50aWNrbWFya09mZnNldD10aGlzLnBhcmFtZXRlcnMudGlja21hcmtPZmZzZXQ7dGhpcy5vcHRpb25zPXRoaXMucGFyYW1ldGVycy5vcHRpb25zO3codGhpcyxcImluaXRcIik7XG5mfHxlfHx0aGlzLmFkZExhYmVsKCl9Yi5wcm90b3R5cGUuYWRkTGFiZWw9ZnVuY3Rpb24oKXt2YXIgZD10aGlzLGI9ZC5heGlzLGY9Yi5vcHRpb25zLG49Yi5jaGFydCxrPWIuY2F0ZWdvcmllcyxFPWIubG9nYXJpdGhtaWMsbT1iLm5hbWVzLGM9ZC5wb3MsZz1xKGQub3B0aW9ucyYmZC5vcHRpb25zLmxhYmVscyxmLmxhYmVscyksYT1iLnRpY2tQb3NpdGlvbnMsaD1jPT09YVswXSxyPWM9PT1hW2EubGVuZ3RoLTFdLEE9ZC5sYWJlbCx5PSghZy5zdGVwfHwxPT09Zy5zdGVwKSYmMT09PWIudGlja0ludGVydmFsO2E9YS5pbmZvO3ZhciBMLFA7az10aGlzLnBhcmFtZXRlcnMuY2F0ZWdvcnl8fChrP3Eoa1tjXSxtW2NdLGMpOmMpO0UmJnYoaykmJihrPUcoRS5saW4ybG9nKGspKSk7aWYoYi5kYXRlVGltZSYmYSl7dmFyIFI9bi50aW1lLnJlc29sdmVEVExGb3JtYXQoZi5kYXRlVGltZUxhYmVsRm9ybWF0c1shZi5ncmlkJiZhLmhpZ2hlclJhbmtzW2NdfHxhLnVuaXROYW1lXSk7dmFyIFY9XG5SLm1haW59ZC5pc0ZpcnN0PWg7ZC5pc0xhc3Q9cjt2YXIgUT17YXhpczpiLGNoYXJ0Om4sZGF0ZVRpbWVMYWJlbEZvcm1hdDpWLGlzRmlyc3Q6aCxpc0xhc3Q6cixwb3M6Yyx0aWNrOmQsdGlja1Bvc2l0aW9uSW5mbzphLHZhbHVlOmt9O3codGhpcyxcImxhYmVsRm9ybWF0XCIsUSk7dmFyIE09ZnVuY3Rpb24oYSl7cmV0dXJuIGcuZm9ybWF0dGVyP2cuZm9ybWF0dGVyLmNhbGwoYSxhKTpnLmZvcm1hdD8oYS50ZXh0PWIuZGVmYXVsdExhYmVsRm9ybWF0dGVyLmNhbGwoYSksZS5mb3JtYXQoZy5mb3JtYXQsYSxuKSk6Yi5kZWZhdWx0TGFiZWxGb3JtYXR0ZXIuY2FsbChhLGEpfTtmPU0uY2FsbChRLFEpO2lmKFA9UiYmUi5saXN0KWQuc2hvcnRlbkxhYmVsPWZ1bmN0aW9uKCl7Zm9yKEw9MDtMPFAubGVuZ3RoO0wrKylpZih4KFEse2RhdGVUaW1lTGFiZWxGb3JtYXQ6UFtMXX0pLEEuYXR0cih7dGV4dDpNLmNhbGwoUSxRKX0pLEEuZ2V0QkJveCgpLndpZHRoPGIuZ2V0U2xvdFdpZHRoKGQpLVxuMipnLnBhZGRpbmcpcmV0dXJuO0EuYXR0cih7dGV4dDpcIlwifSl9O3kmJmIuX2FkZGVkUGxvdExCJiZkLm1vdmVMYWJlbChmLGcpO0MoQSl8fGQubW92ZWRMYWJlbD9BJiZBLnRleHRTdHIhPT1mJiYheSYmKCFBLnRleHRXaWR0aHx8Zy5zdHlsZS53aWR0aHx8QS5zdHlsZXMud2lkdGh8fEEuY3NzKHt3aWR0aDpudWxsfSksQS5hdHRyKHt0ZXh0OmZ9KSxBLnRleHRQeExlbmd0aD1BLmdldEJCb3goKS53aWR0aCk6KGQubGFiZWw9QT1kLmNyZWF0ZUxhYmVsKHt4OjAseTowfSxmLGcpLGQucm90YXRpb249MCl9O2IucHJvdG90eXBlLmNyZWF0ZUxhYmVsPWZ1bmN0aW9uKGQsYixlKXt2YXIgbj10aGlzLmF4aXMsbD1uLmNoYXJ0O2lmKGQ9QyhiKSYmZS5lbmFibGVkP2wucmVuZGVyZXIudGV4dChiLGQueCxkLnksZS51c2VIVE1MKS5hZGQobi5sYWJlbEdyb3VwKTpudWxsKWwuc3R5bGVkTW9kZXx8ZC5jc3MoZihlLnN0eWxlKSksZC50ZXh0UHhMZW5ndGg9ZC5nZXRCQm94KCkud2lkdGg7cmV0dXJuIGR9O1xuYi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe0IodGhpcyx0aGlzLmF4aXMpfTtiLnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbihkLGIsZixlKXt2YXIgbj10aGlzLmF4aXMsbD1uLmNoYXJ0LG09ZSYmbC5vbGRDaGFydEhlaWdodHx8bC5jaGFydEhlaWdodDtkPXt4OmQ/RyhuLnRyYW5zbGF0ZShiK2YsbnVsbCxudWxsLGUpK24udHJhbnNCKTpuLmxlZnQrbi5vZmZzZXQrKG4ub3Bwb3NpdGU/KGUmJmwub2xkQ2hhcnRXaWR0aHx8bC5jaGFydFdpZHRoKS1uLnJpZ2h0LW4ubGVmdDowKSx5OmQ/bS1uLmJvdHRvbStuLm9mZnNldC0obi5vcHBvc2l0ZT9uLmhlaWdodDowKTpHKG0tbi50cmFuc2xhdGUoYitmLG51bGwsbnVsbCxlKS1uLnRyYW5zQil9O2QueT1IKGQueSwtMUU1LDFFNSk7dyh0aGlzLFwiYWZ0ZXJHZXRQb3NpdGlvblwiLHtwb3M6ZH0pO3JldHVybiBkfTtiLnByb3RvdHlwZS5nZXRMYWJlbFBvc2l0aW9uPWZ1bmN0aW9uKGQsYixmLGUsayxxLG0sYyl7dmFyIGc9XG50aGlzLmF4aXMsYT1nLnRyYW5zQSxoPWcuaXNMaW5rZWQmJmcubGlua2VkUGFyZW50P2cubGlua2VkUGFyZW50LnJldmVyc2VkOmcucmV2ZXJzZWQscj1nLnN0YWdnZXJMaW5lcyxBPWcudGlja1JvdENvcnJ8fHt4OjAseTowfSx5PWsueSxuPWV8fGcucmVzZXJ2ZVNwYWNlRGVmYXVsdD8wOi1nLmxhYmVsT2Zmc2V0KihcImNlbnRlclwiPT09Zy5sYWJlbEFsaWduPy41OjEpLGw9e307Qyh5KXx8KHk9MD09PWcuc2lkZT9mLnJvdGF0aW9uPy04Oi1mLmdldEJCb3goKS5oZWlnaHQ6Mj09PWcuc2lkZT9BLnkrODpNYXRoLmNvcyhmLnJvdGF0aW9uKkQpKihBLnktZi5nZXRCQm94KCExLDApLmhlaWdodC8yKSk7ZD1kK2sueCtuK0EueC0ocSYmZT9xKmEqKGg/LTE6MSk6MCk7Yj1iK3ktKHEmJiFlP3EqYSooaD8xOi0xKTowKTtyJiYoZj1tLyhjfHwxKSVyLGcub3Bwb3NpdGUmJihmPXItZi0xKSxiKz1nLmxhYmVsT2Zmc2V0L3IqZik7bC54PWQ7bC55PU1hdGgucm91bmQoYik7dyh0aGlzLFwiYWZ0ZXJHZXRMYWJlbFBvc2l0aW9uXCIsXG57cG9zOmwsdGlja21hcmtPZmZzZXQ6cSxpbmRleDptfSk7cmV0dXJuIGx9O2IucHJvdG90eXBlLmdldExhYmVsU2l6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxhYmVsP3RoaXMubGFiZWwuZ2V0QkJveCgpW3RoaXMuYXhpcy5ob3Jpej9cImhlaWdodFwiOlwid2lkdGhcIl06MH07Yi5wcm90b3R5cGUuZ2V0TWFya1BhdGg9ZnVuY3Rpb24oZCxiLGYsZSxrLHEpe3JldHVybiBxLmNyaXNwTGluZShbW1wiTVwiLGQsYl0sW1wiTFwiLGQrKGs/MDotZiksYisoaz9mOjApXV0sZSl9O2IucHJvdG90eXBlLmhhbmRsZU92ZXJmbG93PWZ1bmN0aW9uKGQpe3ZhciBiPXRoaXMuYXhpcyxmPWIub3B0aW9ucy5sYWJlbHMsZT1kLngsbD1iLmNoYXJ0LmNoYXJ0V2lkdGgsaz1iLmNoYXJ0LnNwYWNpbmcsbT1xKGIubGFiZWxMZWZ0LE1hdGgubWluKGIucG9zLGtbM10pKTtrPXEoYi5sYWJlbFJpZ2h0LE1hdGgubWF4KGIuaXNSYWRpYWw/MDpiLnBvcytiLmxlbixsLWtbMV0pKTt2YXIgYz10aGlzLmxhYmVsLGc9dGhpcy5yb3RhdGlvbixcbmE9e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MX1bYi5sYWJlbEFsaWdufHxjLmF0dHIoXCJhbGlnblwiKV0saD1jLmdldEJCb3goKS53aWR0aCxyPWIuZ2V0U2xvdFdpZHRoKHRoaXMpLEE9cix5PTEsTCxQPXt9O2lmKGd8fFwianVzdGlmeVwiIT09Zi5vdmVyZmxvdykwPmcmJmUtYSpoPG0/TD1NYXRoLnJvdW5kKGUvTWF0aC5jb3MoZypEKS1tKTowPGcmJmUrYSpoPmsmJihMPU1hdGgucm91bmQoKGwtZSkvTWF0aC5jb3MoZypEKSkpO2Vsc2UgaWYobD1lKygxLWEpKmgsZS1hKmg8bT9BPWQueCtBKigxLWEpLW06bD5rJiYoQT1rLWQueCtBKmEseT0tMSksQT1NYXRoLm1pbihyLEEpLEE8ciYmXCJjZW50ZXJcIj09PWIubGFiZWxBbGlnbiYmKGQueCs9eSooci1BLWEqKHItTWF0aC5taW4oaCxBKSkpKSxoPkF8fGIuYXV0b1JvdGF0aW9uJiYoYy5zdHlsZXN8fHt9KS53aWR0aClMPUE7TCYmKHRoaXMuc2hvcnRlbkxhYmVsP3RoaXMuc2hvcnRlbkxhYmVsKCk6KFAud2lkdGg9TWF0aC5mbG9vcihMKStcblwicHhcIiwoZi5zdHlsZXx8e30pLnRleHRPdmVyZmxvd3x8KFAudGV4dE92ZXJmbG93PVwiZWxsaXBzaXNcIiksYy5jc3MoUCkpKX07Yi5wcm90b3R5cGUubW92ZUxhYmVsPWZ1bmN0aW9uKGIsZil7dmFyIGU9dGhpcyxuPWUubGFiZWwsbD0hMSxrPWUuYXhpcyxtPWsucmV2ZXJzZWQ7biYmbi50ZXh0U3RyPT09Yj8oZS5tb3ZlZExhYmVsPW4sbD0hMCxkZWxldGUgZS5sYWJlbCk6ZChrLnRpY2tzLGZ1bmN0aW9uKGMpe2x8fGMuaXNOZXd8fGM9PT1lfHwhYy5sYWJlbHx8Yy5sYWJlbC50ZXh0U3RyIT09Ynx8KGUubW92ZWRMYWJlbD1jLmxhYmVsLGw9ITAsYy5sYWJlbFBvcz1lLm1vdmVkTGFiZWwueHksZGVsZXRlIGMubGFiZWwpfSk7aWYoIWwmJihlLmxhYmVsUG9zfHxuKSl7dmFyIGM9ZS5sYWJlbFBvc3x8bi54eTtuPWsuaG9yaXo/bT8wOmsud2lkdGgray5sZWZ0OmMueDtrPWsuaG9yaXo/Yy55Om0/ay53aWR0aCtrLmxlZnQ6MDtlLm1vdmVkTGFiZWw9ZS5jcmVhdGVMYWJlbCh7eDpuLHk6a30sXG5iLGYpO2UubW92ZWRMYWJlbCYmZS5tb3ZlZExhYmVsLmF0dHIoe29wYWNpdHk6MH0pfX07Yi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGQsYixmKXt2YXIgZT10aGlzLmF4aXMsbD1lLmhvcml6LGs9dGhpcy5wb3MsbT1xKHRoaXMudGlja21hcmtPZmZzZXQsZS50aWNrbWFya09mZnNldCk7az10aGlzLmdldFBvc2l0aW9uKGwsayxtLGIpO209ay54O3ZhciBjPWsueTtlPWwmJm09PT1lLnBvcytlLmxlbnx8IWwmJmM9PT1lLnBvcz8tMToxO2w9cShmLHRoaXMubGFiZWwmJnRoaXMubGFiZWwubmV3T3BhY2l0eSwxKTtmPXEoZiwxKTt0aGlzLmlzQWN0aXZlPSEwO3RoaXMucmVuZGVyR3JpZExpbmUoYixmLGUpO3RoaXMucmVuZGVyTWFyayhrLGYsZSk7dGhpcy5yZW5kZXJMYWJlbChrLGIsbCxkKTt0aGlzLmlzTmV3PSExO3codGhpcyxcImFmdGVyUmVuZGVyXCIpfTtiLnByb3RvdHlwZS5yZW5kZXJHcmlkTGluZT1mdW5jdGlvbihkLGIsZil7dmFyIGU9dGhpcy5heGlzLGw9ZS5vcHRpb25zLFxuaz10aGlzLmdyaWRMaW5lLG09e30sYz10aGlzLnBvcyxnPXRoaXMudHlwZSxhPXEodGhpcy50aWNrbWFya09mZnNldCxlLnRpY2ttYXJrT2Zmc2V0KSxoPWUuY2hhcnQucmVuZGVyZXIscj1sLmdyaWRMaW5lV2lkdGgsQT1sLmdyaWRMaW5lQ29sb3IseT1sLmdyaWRMaW5lRGFzaFN0eWxlO1wibWlub3JcIj09PXRoaXMudHlwZSYmKHI9bC5taW5vckdyaWRMaW5lV2lkdGgsQT1sLm1pbm9yR3JpZExpbmVDb2xvcix5PWwubWlub3JHcmlkTGluZURhc2hTdHlsZSk7a3x8KGUuY2hhcnQuc3R5bGVkTW9kZXx8KG0uc3Ryb2tlPUEsbVtcInN0cm9rZS13aWR0aFwiXT1yfHwwLG0uZGFzaHN0eWxlPXkpLGd8fChtLnpJbmRleD0xKSxkJiYoYj0wKSx0aGlzLmdyaWRMaW5lPWs9aC5wYXRoKCkuYXR0cihtKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtXCIrKGc/ZytcIi1cIjpcIlwiKStcImdyaWQtbGluZVwiKS5hZGQoZS5ncmlkR3JvdXApKTtpZihrJiYoZj1lLmdldFBsb3RMaW5lUGF0aCh7dmFsdWU6YythLGxpbmVXaWR0aDprLnN0cm9rZVdpZHRoKCkqXG5mLGZvcmNlOlwicGFzc1wiLG9sZDpkfSkpKWtbZHx8dGhpcy5pc05ldz9cImF0dHJcIjpcImFuaW1hdGVcIl0oe2Q6ZixvcGFjaXR5OmJ9KX07Yi5wcm90b3R5cGUucmVuZGVyTWFyaz1mdW5jdGlvbihkLGIsZil7dmFyIGU9dGhpcy5heGlzLGw9ZS5vcHRpb25zLGs9ZS5jaGFydC5yZW5kZXJlcixtPXRoaXMudHlwZSxjPWUudGlja1NpemUobT9tK1wiVGlja1wiOlwidGlja1wiKSxnPXRoaXMubWFyayxhPSFnLGg9ZC54O2Q9ZC55O3ZhciByPXEobFtcIm1pbm9yXCIhPT1tP1widGlja1dpZHRoXCI6XCJtaW5vclRpY2tXaWR0aFwiXSwhbSYmZS5pc1hBeGlzPzE6MCk7bD1sW1wibWlub3JcIiE9PW0/XCJ0aWNrQ29sb3JcIjpcIm1pbm9yVGlja0NvbG9yXCJdO2MmJihlLm9wcG9zaXRlJiYoY1swXT0tY1swXSksYSYmKHRoaXMubWFyaz1nPWsucGF0aCgpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1cIisobT9tK1wiLVwiOlwiXCIpK1widGlja1wiKS5hZGQoZS5heGlzR3JvdXApLGUuY2hhcnQuc3R5bGVkTW9kZXx8Zy5hdHRyKHtzdHJva2U6bCxcblwic3Ryb2tlLXdpZHRoXCI6cn0pKSxnW2E/XCJhdHRyXCI6XCJhbmltYXRlXCJdKHtkOnRoaXMuZ2V0TWFya1BhdGgoaCxkLGNbMF0sZy5zdHJva2VXaWR0aCgpKmYsZS5ob3JpeixrKSxvcGFjaXR5OmJ9KSl9O2IucHJvdG90eXBlLnJlbmRlckxhYmVsPWZ1bmN0aW9uKGQsYixmLGUpe3ZhciBsPXRoaXMuYXhpcyxuPWwuaG9yaXosbT1sLm9wdGlvbnMsYz10aGlzLmxhYmVsLGc9bS5sYWJlbHMsYT1nLnN0ZXA7bD1xKHRoaXMudGlja21hcmtPZmZzZXQsbC50aWNrbWFya09mZnNldCk7dmFyIGg9ITAscj1kLng7ZD1kLnk7YyYmdihyKSYmKGMueHk9ZD10aGlzLmdldExhYmVsUG9zaXRpb24ocixkLGMsbixnLGwsZSxhKSx0aGlzLmlzRmlyc3QmJiF0aGlzLmlzTGFzdCYmIW0uc2hvd0ZpcnN0TGFiZWx8fHRoaXMuaXNMYXN0JiYhdGhpcy5pc0ZpcnN0JiYhbS5zaG93TGFzdExhYmVsP2g9ITE6IW58fGcuc3RlcHx8Zy5yb3RhdGlvbnx8Ynx8MD09PWZ8fHRoaXMuaGFuZGxlT3ZlcmZsb3coZCksYSYmXG5lJWEmJihoPSExKSxoJiZ2KGQueSk/KGQub3BhY2l0eT1mLGNbdGhpcy5pc05ld0xhYmVsP1wiYXR0clwiOlwiYW5pbWF0ZVwiXShkKSx0aGlzLmlzTmV3TGFiZWw9ITEpOihjLmF0dHIoXCJ5XCIsLTk5OTkpLHRoaXMuaXNOZXdMYWJlbD0hMCkpfTtiLnByb3RvdHlwZS5yZXBsYWNlTW92ZWRMYWJlbD1mdW5jdGlvbigpe3ZhciBkPXRoaXMubGFiZWwsYj10aGlzLmF4aXMsZj1iLnJldmVyc2VkO2lmKGQmJiF0aGlzLmlzTmV3KXt2YXIgZT1iLmhvcml6P2Y/Yi5sZWZ0OmIud2lkdGgrYi5sZWZ0OmQueHkueDtmPWIuaG9yaXo/ZC54eS55OmY/Yi53aWR0aCtiLnRvcDpiLnRvcDtkLmFuaW1hdGUoe3g6ZSx5OmYsb3BhY2l0eTowfSx2b2lkIDAsZC5kZXN0cm95KTtkZWxldGUgdGhpcy5sYWJlbH1iLmlzRGlydHk9ITA7dGhpcy5sYWJlbD10aGlzLm1vdmVkTGFiZWw7ZGVsZXRlIHRoaXMubW92ZWRMYWJlbH07cmV0dXJuIGJ9KCk7Yi5UaWNrPUk7cmV0dXJuIGIuVGlja30pO08oZSxcIkNvcmUvQXhpcy9BeGlzLmpzXCIsXG5bZVtcIkNvcmUvQW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5qc1wiXSxlW1wiQ29yZS9Db2xvci9Db2xvci5qc1wiXSxlW1wiQ29yZS9HbG9iYWxzLmpzXCJdLGVbXCJDb3JlL0NvbG9yL1BhbGV0dGUuanNcIl0sZVtcIkNvcmUvT3B0aW9ucy5qc1wiXSxlW1wiQ29yZS9BeGlzL1RpY2suanNcIl0sZVtcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihlLGIsSSx6LEgsRyxDKXt2YXIgQj1lLmFuaW1PYmplY3QseD1ILmRlZmF1bHRPcHRpb25zLHc9Qy5hZGRFdmVudCx2PUMuYXJyYXlNYXgsZj1DLmFycmF5TWluLGQ9Qy5jbGFtcCxxPUMuY29ycmVjdEZsb2F0LGs9Qy5kZWZpbmVkLGw9Qy5kZXN0cm95T2JqZWN0UHJvcGVydGllcyxOPUMuZXJhc2UsdT1DLmVycm9yLG49Qy5leHRlbmQsSj1DLmZpcmVFdmVudCxFPUMuZ2V0TWFnbml0dWRlLG09Qy5pc0FycmF5LGM9Qy5pc0Z1bmN0aW9uLGc9Qy5pc051bWJlcixhPUMuaXNTdHJpbmcsaD1DLm1lcmdlLHI9Qy5ub3JtYWxpemVUaWNrSW50ZXJ2YWwsXG5BPUMub2JqZWN0RWFjaCx5PUMucGljayxMPUMucmVsYXRpdmVMZW5ndGgsUD1DLnJlbW92ZUV2ZW50LFI9Qy5zcGxhdCxWPUMuc3luY1RpbWVvdXQ7XCJcIjt2YXIgUT1JLmRlZzJyYWQ7ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoYSxjKXt0aGlzLnpvb21FbmFibGVkPXRoaXMud2lkdGg9dGhpcy52aXNpYmxlPXRoaXMudXNlck9wdGlvbnM9dGhpcy50cmFuc2xhdGlvblNsb3BlPXRoaXMudHJhbnNCPXRoaXMudHJhbnNBPXRoaXMudG9wPXRoaXMudGlja3M9dGhpcy50aWNrUm90Q29ycj10aGlzLnRpY2tQb3NpdGlvbnM9dGhpcy50aWNrbWFya09mZnNldD10aGlzLnRpY2tJbnRlcnZhbD10aGlzLnRpY2tBbW91bnQ9dGhpcy5zaWRlPXRoaXMuc2VyaWVzPXRoaXMucmlnaHQ9dGhpcy5wb3NpdGl2ZVZhbHVlc09ubHk9dGhpcy5wb3M9dGhpcy5wb2ludFJhbmdlUGFkZGluZz10aGlzLnBvaW50UmFuZ2U9dGhpcy5wbG90TGluZXNBbmRCYW5kc0dyb3Vwcz10aGlzLnBsb3RMaW5lc0FuZEJhbmRzPVxudGhpcy5wYWRkZWRUaWNrcz10aGlzLm92ZXJsYXA9dGhpcy5vcHRpb25zPXRoaXMub2Zmc2V0PXRoaXMubmFtZXM9dGhpcy5taW5QaXhlbFBhZGRpbmc9dGhpcy5taW5vclRpY2tzPXRoaXMubWlub3JUaWNrSW50ZXJ2YWw9dGhpcy5taW49dGhpcy5tYXhMYWJlbExlbmd0aD10aGlzLm1heD10aGlzLmxlbj10aGlzLmxlZnQ9dGhpcy5sYWJlbEZvcm1hdHRlcj10aGlzLmxhYmVsRWRnZT10aGlzLmlzTGlua2VkPXRoaXMuaGVpZ2h0PXRoaXMuaGFzVmlzaWJsZVNlcmllcz10aGlzLmhhc05hbWVzPXRoaXMuY29sbD10aGlzLmNsb3Nlc3RQb2ludFJhbmdlPXRoaXMuY2hhcnQ9dGhpcy5jYXRlZ29yaWVzPXRoaXMuYm90dG9tPXRoaXMuYWx0ZXJuYXRlQmFuZHM9dm9pZCAwO3RoaXMuaW5pdChhLGMpfWUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYSxkKXt2YXIgYj1kLmlzWCxoPXRoaXM7aC5jaGFydD1hO2guaG9yaXo9YS5pbnZlcnRlZCYmIWguaXNaQXhpcz8hYjpiO2guaXNYQXhpcz1iO1xuaC5jb2xsPWguY29sbHx8KGI/XCJ4QXhpc1wiOlwieUF4aXNcIik7Sih0aGlzLFwiaW5pdFwiLHt1c2VyT3B0aW9uczpkfSk7aC5vcHBvc2l0ZT15KGQub3Bwb3NpdGUsaC5vcHBvc2l0ZSk7aC5zaWRlPXkoZC5zaWRlLGguc2lkZSxoLmhvcml6P2gub3Bwb3NpdGU/MDoyOmgub3Bwb3NpdGU/MTozKTtoLnNldE9wdGlvbnMoZCk7dmFyIHA9dGhpcy5vcHRpb25zLHQ9cC5sYWJlbHMscj1wLnR5cGU7aC51c2VyT3B0aW9ucz1kO2gubWluUGl4ZWxQYWRkaW5nPTA7aC5yZXZlcnNlZD15KHAucmV2ZXJzZWQsaC5yZXZlcnNlZCk7aC52aXNpYmxlPXAudmlzaWJsZTtoLnpvb21FbmFibGVkPXAuem9vbUVuYWJsZWQ7aC5oYXNOYW1lcz1cImNhdGVnb3J5XCI9PT1yfHwhMD09PXAuY2F0ZWdvcmllcztoLmNhdGVnb3JpZXM9cC5jYXRlZ29yaWVzfHxoLmhhc05hbWVzO2gubmFtZXN8fChoLm5hbWVzPVtdLGgubmFtZXMua2V5cz17fSk7aC5wbG90TGluZXNBbmRCYW5kc0dyb3Vwcz17fTtoLnBvc2l0aXZlVmFsdWVzT25seT1cbiEhaC5sb2dhcml0aG1pYztoLmlzTGlua2VkPWsocC5saW5rZWRUbyk7aC50aWNrcz17fTtoLmxhYmVsRWRnZT1bXTtoLm1pbm9yVGlja3M9e307aC5wbG90TGluZXNBbmRCYW5kcz1bXTtoLmFsdGVybmF0ZUJhbmRzPXt9O2gubGVuPTA7aC5taW5SYW5nZT1oLnVzZXJNaW5SYW5nZT1wLm1pblJhbmdlfHxwLm1heFpvb207aC5yYW5nZT1wLnJhbmdlO2gub2Zmc2V0PXAub2Zmc2V0fHwwO2gubWF4PW51bGw7aC5taW49bnVsbDtkPXkocC5jcm9zc2hhaXIsUihhLm9wdGlvbnMudG9vbHRpcC5jcm9zc2hhaXJzKVtiPzA6MV0pO2guY3Jvc3NoYWlyPSEwPT09ZD97fTpkO2Q9aC5vcHRpb25zLmV2ZW50czstMT09PWEuYXhlcy5pbmRleE9mKGgpJiYoYj9hLmF4ZXMuc3BsaWNlKGEueEF4aXMubGVuZ3RoLDAsaCk6YS5heGVzLnB1c2goaCksYVtoLmNvbGxdLnB1c2goaCkpO2guc2VyaWVzPWguc2VyaWVzfHxbXTthLmludmVydGVkJiYhaC5pc1pBeGlzJiZiJiZcInVuZGVmaW5lZFwiPT09dHlwZW9mIGgucmV2ZXJzZWQmJlxuKGgucmV2ZXJzZWQ9ITApO2gubGFiZWxSb3RhdGlvbj1nKHQucm90YXRpb24pP3Qucm90YXRpb246dm9pZCAwO0EoZCxmdW5jdGlvbihhLGQpe2MoYSkmJncoaCxkLGEpfSk7Sih0aGlzLFwiYWZ0ZXJJbml0XCIpfTtlLnByb3RvdHlwZS5zZXRPcHRpb25zPWZ1bmN0aW9uKGEpe3RoaXMub3B0aW9ucz1oKGUuZGVmYXVsdE9wdGlvbnMsXCJ5QXhpc1wiPT09dGhpcy5jb2xsJiZlLmRlZmF1bHRZQXhpc09wdGlvbnMsW2UuZGVmYXVsdFRvcEF4aXNPcHRpb25zLGUuZGVmYXVsdFJpZ2h0QXhpc09wdGlvbnMsZS5kZWZhdWx0Qm90dG9tQXhpc09wdGlvbnMsZS5kZWZhdWx0TGVmdEF4aXNPcHRpb25zXVt0aGlzLnNpZGVdLGgoeFt0aGlzLmNvbGxdLGEpKTtKKHRoaXMsXCJhZnRlclNldE9wdGlvbnNcIix7dXNlck9wdGlvbnM6YX0pfTtlLnByb3RvdHlwZS5kZWZhdWx0TGFiZWxGb3JtYXR0ZXI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmF4aXMsYz1nKHRoaXMudmFsdWUpP3RoaXMudmFsdWU6TmFOLGQ9XG5hLmNoYXJ0LnRpbWUsaD10aGlzLmRhdGVUaW1lTGFiZWxGb3JtYXQsYj14Lmxhbmcscj1iLm51bWVyaWNTeW1ib2xzO2I9Yi5udW1lcmljU3ltYm9sTWFnbml0dWRlfHwxRTM7dmFyIGU9ciYmci5sZW5ndGgsZj1hLmxvZ2FyaXRobWljP01hdGguYWJzKGMpOmEudGlja0ludGVydmFsLG09dGhpcy5jaGFydC5udW1iZXJGb3JtYXR0ZXI7aWYoYS5jYXRlZ29yaWVzKXZhciBBPVwiXCIrdGhpcy52YWx1ZTtlbHNlIGlmKGgpQT1kLmRhdGVGb3JtYXQoaCxjKTtlbHNlIGlmKGUmJjFFMzw9Zilmb3IoO2UtLSYmXCJ1bmRlZmluZWRcIj09PXR5cGVvZiBBOylhPU1hdGgucG93KGIsZSsxKSxmPj1hJiYwPT09MTAqYyVhJiZudWxsIT09cltlXSYmMCE9PWMmJihBPW0oYy9hLC0xKStyW2VdKTtcInVuZGVmaW5lZFwiPT09dHlwZW9mIEEmJihBPTFFNDw9TWF0aC5hYnMoYyk/bShjLC0xKTptKGMsLTEsdm9pZCAwLFwiXCIpKTtyZXR1cm4gQX07ZS5wcm90b3R5cGUuZ2V0U2VyaWVzRXh0cmVtZXM9ZnVuY3Rpb24oKXt2YXIgYT1cbnRoaXMsYz1hLmNoYXJ0LGQ7Sih0aGlzLFwiZ2V0U2VyaWVzRXh0cmVtZXNcIixudWxsLGZ1bmN0aW9uKCl7YS5oYXNWaXNpYmxlU2VyaWVzPSExO2EuZGF0YU1pbj1hLmRhdGFNYXg9YS50aHJlc2hvbGQ9bnVsbDthLnNvZnRUaHJlc2hvbGQ9IWEuaXNYQXhpczthLnN0YWNraW5nJiZhLnN0YWNraW5nLmJ1aWxkU3RhY2tzKCk7YS5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihoKXtpZihoLnZpc2libGV8fCFjLm9wdGlvbnMuY2hhcnQuaWdub3JlSGlkZGVuU2VyaWVzKXt2YXIgYj1oLm9wdGlvbnMscD1iLnRocmVzaG9sZDthLmhhc1Zpc2libGVTZXJpZXM9ITA7YS5wb3NpdGl2ZVZhbHVlc09ubHkmJjA+PXAmJihwPW51bGwpO2lmKGEuaXNYQXhpcyl7aWYoYj1oLnhEYXRhLGIubGVuZ3RoKXtiPWEubG9nYXJpdGhtaWM/Yi5maWx0ZXIoYS52YWxpZGF0ZVBvc2l0aXZlVmFsdWUpOmI7ZD1oLmdldFhFeHRyZW1lcyhiKTt2YXIgdD1kLm1pbjt2YXIgcj1kLm1heDtnKHQpfHx0IGluc3RhbmNlb2ZcbkRhdGV8fChiPWIuZmlsdGVyKGcpLGQ9aC5nZXRYRXh0cmVtZXMoYiksdD1kLm1pbixyPWQubWF4KTtiLmxlbmd0aCYmKGEuZGF0YU1pbj1NYXRoLm1pbih5KGEuZGF0YU1pbix0KSx0KSxhLmRhdGFNYXg9TWF0aC5tYXgoeShhLmRhdGFNYXgscikscikpfX1lbHNlIGlmKGg9aC5hcHBseUV4dHJlbWVzKCksZyhoLmRhdGFNaW4pJiYodD1oLmRhdGFNaW4sYS5kYXRhTWluPU1hdGgubWluKHkoYS5kYXRhTWluLHQpLHQpKSxnKGguZGF0YU1heCkmJihyPWguZGF0YU1heCxhLmRhdGFNYXg9TWF0aC5tYXgoeShhLmRhdGFNYXgscikscikpLGsocCkmJihhLnRocmVzaG9sZD1wKSwhYi5zb2Z0VGhyZXNob2xkfHxhLnBvc2l0aXZlVmFsdWVzT25seSlhLnNvZnRUaHJlc2hvbGQ9ITF9fSl9KTtKKHRoaXMsXCJhZnRlckdldFNlcmllc0V4dHJlbWVzXCIpfTtlLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oYSxjLGQsaCxiLHIpe3ZhciBwPXRoaXMubGlua2VkUGFyZW50fHx0aGlzLHQ9MSxlPVxuMCxmPWgmJnAub2xkP3Aub2xkLnRyYW5zQTpwLnRyYW5zQTtoPWgmJnAub2xkP3Aub2xkLm1pbjpwLm1pbjt2YXIgRj1wLm1pblBpeGVsUGFkZGluZztiPShwLmlzT3JkaW5hbHx8cC5icm9rZW5BeGlzJiZwLmJyb2tlbkF4aXMuaGFzQnJlYWtzfHxwLmxvZ2FyaXRobWljJiZiKSYmcC5saW4ydmFsO2Z8fChmPXAudHJhbnNBKTtkJiYodCo9LTEsZT1wLmxlbik7cC5yZXZlcnNlZCYmKHQqPS0xLGUtPXQqKHAuc2VjdG9yfHxwLmxlbikpO2M/KGE9KGEqdCtlLUYpL2YraCxiJiYoYT1wLmxpbjJ2YWwoYSkpKTooYiYmKGE9cC52YWwybGluKGEpKSxhPWcoaCk/dCooYS1oKSpmK2UrdCpGKyhnKHIpP2YqcjowKTp2b2lkIDApO3JldHVybiBhfTtlLnByb3RvdHlwZS50b1BpeGVscz1mdW5jdGlvbihhLGMpe3JldHVybiB0aGlzLnRyYW5zbGF0ZShhLCExLCF0aGlzLmhvcml6LG51bGwsITApKyhjPzA6dGhpcy5wb3MpfTtlLnByb3RvdHlwZS50b1ZhbHVlPWZ1bmN0aW9uKGEsYyl7cmV0dXJuIHRoaXMudHJhbnNsYXRlKGEtXG4oYz8wOnRoaXMucG9zKSwhMCwhdGhpcy5ob3JpeixudWxsLCEwKX07ZS5wcm90b3R5cGUuZ2V0UGxvdExpbmVQYXRoPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMoYSxjLGcpe2lmKFwicGFzc1wiIT09bCYmYTxjfHxhPmcpbD9hPWQoYSxjLGcpOnY9ITA7cmV0dXJuIGF9dmFyIGg9dGhpcyxiPWguY2hhcnQsdD1oLmxlZnQscj1oLnRvcCxlPWEub2xkLGY9YS52YWx1ZSxtPWEudHJhbnNsYXRlZFZhbHVlLEE9YS5saW5lV2lkdGgsbD1hLmZvcmNlLG4sayx1LEwscT1lJiZiLm9sZENoYXJ0SGVpZ2h0fHxiLmNoYXJ0SGVpZ2h0LFA9ZSYmYi5vbGRDaGFydFdpZHRofHxiLmNoYXJ0V2lkdGgsdixkYT1oLnRyYW5zQjthPXt2YWx1ZTpmLGxpbmVXaWR0aDpBLG9sZDplLGZvcmNlOmwsYWNyb3NzUGFuZXM6YS5hY3Jvc3NQYW5lcyx0cmFuc2xhdGVkVmFsdWU6bX07Sih0aGlzLFwiZ2V0UGxvdExpbmVQYXRoXCIsYSxmdW5jdGlvbihhKXttPXkobSxoLnRyYW5zbGF0ZShmLG51bGwsbnVsbCxlKSk7bT1kKG0sXG4tMUU1LDFFNSk7bj11PU1hdGgucm91bmQobStkYSk7az1MPU1hdGgucm91bmQocS1tLWRhKTtnKG0pP2guaG9yaXo/KGs9cixMPXEtaC5ib3R0b20sbj11PWMobix0LHQraC53aWR0aCkpOihuPXQsdT1QLWgucmlnaHQsaz1MPWMoayxyLHIraC5oZWlnaHQpKToodj0hMCxsPSExKTthLnBhdGg9diYmIWw/bnVsbDpiLnJlbmRlcmVyLmNyaXNwTGluZShbW1wiTVwiLG4sa10sW1wiTFwiLHUsTF1dLEF8fDEpfSk7cmV0dXJuIGEucGF0aH07ZS5wcm90b3R5cGUuZ2V0TGluZWFyVGlja1Bvc2l0aW9ucz1mdW5jdGlvbihhLGMsZCl7dmFyIGc9cShNYXRoLmZsb29yKGMvYSkqYSk7ZD1xKE1hdGguY2VpbChkL2EpKmEpO3ZhciBoPVtdLGI7cShnK2EpPT09ZyYmKGI9MjApO2lmKHRoaXMuc2luZ2xlKXJldHVybltjXTtmb3IoYz1nO2M8PWQ7KXtoLnB1c2goYyk7Yz1xKGMrYSxiKTtpZihjPT09cClicmVhazt2YXIgcD1jfXJldHVybiBofTtlLnByb3RvdHlwZS5nZXRNaW5vclRpY2tJbnRlcnZhbD1mdW5jdGlvbigpe3ZhciBhPVxudGhpcy5vcHRpb25zO3JldHVybiEwPT09YS5taW5vclRpY2tzP3koYS5taW5vclRpY2tJbnRlcnZhbCxcImF1dG9cIik6ITE9PT1hLm1pbm9yVGlja3M/bnVsbDphLm1pbm9yVGlja0ludGVydmFsfTtlLnByb3RvdHlwZS5nZXRNaW5vclRpY2tQb3NpdGlvbnM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnMsYz10aGlzLnRpY2tQb3NpdGlvbnMsZD10aGlzLm1pbm9yVGlja0ludGVydmFsLGc9W10saD10aGlzLnBvaW50UmFuZ2VQYWRkaW5nfHwwLGI9dGhpcy5taW4taDtoPXRoaXMubWF4K2g7dmFyIHI9aC1iO2lmKHImJnIvZDx0aGlzLmxlbi8zKXt2YXIgZT10aGlzLmxvZ2FyaXRobWljO2lmKGUpdGhpcy5wYWRkZWRUaWNrcy5mb3JFYWNoKGZ1bmN0aW9uKGEsYyxoKXtjJiZnLnB1c2guYXBwbHkoZyxlLmdldExvZ1RpY2tQb3NpdGlvbnMoZCxoW2MtMV0saFtjXSwhMCkpfSk7ZWxzZSBpZih0aGlzLmRhdGVUaW1lJiZcImF1dG9cIj09PXRoaXMuZ2V0TWlub3JUaWNrSW50ZXJ2YWwoKSlnPVxuZy5jb25jYXQodGhpcy5nZXRUaW1lVGlja3ModGhpcy5kYXRlVGltZS5ub3JtYWxpemVUaW1lVGlja0ludGVydmFsKGQpLGIsaCxhLnN0YXJ0T2ZXZWVrKSk7ZWxzZSBmb3IoYT1iKyhjWzBdLWIpJWQ7YTw9aCYmYSE9PWdbMF07YSs9ZClnLnB1c2goYSl9MCE9PWcubGVuZ3RoJiZ0aGlzLnRyaW1UaWNrcyhnKTtyZXR1cm4gZ307ZS5wcm90b3R5cGUuYWRqdXN0Rm9yTWluUmFuZ2U9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnMsYz10aGlzLm1pbixkPXRoaXMubWF4LGc9dGhpcy5sb2dhcml0aG1pYyxoPTAsYixyLGUsbTt0aGlzLmlzWEF4aXMmJlwidW5kZWZpbmVkXCI9PT10eXBlb2YgdGhpcy5taW5SYW5nZSYmIWcmJihrKGEubWluKXx8ayhhLm1heCk/dGhpcy5taW5SYW5nZT1udWxsOih0aGlzLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2U9YS54RGF0YTttPWEueEluY3JlbWVudD8xOmUubGVuZ3RoLTE7aWYoMTxlLmxlbmd0aClmb3IoYj1tOzA8YjtiLS0paWYocj1lW2JdLVxuZVtiLTFdLCFofHxyPGgpaD1yfSksdGhpcy5taW5SYW5nZT1NYXRoLm1pbig1KmgsdGhpcy5kYXRhTWF4LXRoaXMuZGF0YU1pbikpKTtpZihkLWM8dGhpcy5taW5SYW5nZSl7dmFyIEE9dGhpcy5kYXRhTWF4LXRoaXMuZGF0YU1pbj49dGhpcy5taW5SYW5nZTt2YXIgbD10aGlzLm1pblJhbmdlO3ZhciBuPShsLWQrYykvMjtuPVtjLW4seShhLm1pbixjLW4pXTtBJiYoblsyXT10aGlzLmxvZ2FyaXRobWljP3RoaXMubG9nYXJpdGhtaWMubG9nMmxpbih0aGlzLmRhdGFNaW4pOnRoaXMuZGF0YU1pbik7Yz12KG4pO2Q9W2MrbCx5KGEubWF4LGMrbCldO0EmJihkWzJdPWc/Zy5sb2cybGluKHRoaXMuZGF0YU1heCk6dGhpcy5kYXRhTWF4KTtkPWYoZCk7ZC1jPGwmJihuWzBdPWQtbCxuWzFdPXkoYS5taW4sZC1sKSxjPXYobikpfXRoaXMubWluPWM7dGhpcy5tYXg9ZH07ZS5wcm90b3R5cGUuZ2V0Q2xvc2VzdD1mdW5jdGlvbigpe3ZhciBhO3RoaXMuY2F0ZWdvcmllcz9hPTE6dGhpcy5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgZD1cbmMuY2xvc2VzdFBvaW50UmFuZ2UsZz1jLnZpc2libGV8fCFjLmNoYXJ0Lm9wdGlvbnMuY2hhcnQuaWdub3JlSGlkZGVuU2VyaWVzOyFjLm5vU2hhcmVkVG9vbHRpcCYmayhkKSYmZyYmKGE9ayhhKT9NYXRoLm1pbihhLGQpOmQpfSk7cmV0dXJuIGF9O2UucHJvdG90eXBlLm5hbWVUb1g9ZnVuY3Rpb24oYSl7dmFyIGM9bSh0aGlzLmNhdGVnb3JpZXMpLGQ9Yz90aGlzLmNhdGVnb3JpZXM6dGhpcy5uYW1lcyxnPWEub3B0aW9ucy54O2Euc2VyaWVzLnJlcXVpcmVTb3J0aW5nPSExO2soZyl8fChnPXRoaXMub3B0aW9ucy51bmlxdWVOYW1lcz9jP2QuaW5kZXhPZihhLm5hbWUpOnkoZC5rZXlzW2EubmFtZV0sLTEpOmEuc2VyaWVzLmF1dG9JbmNyZW1lbnQoKSk7aWYoLTE9PT1nKXtpZighYyl2YXIgaD1kLmxlbmd0aH1lbHNlIGg9ZztcInVuZGVmaW5lZFwiIT09dHlwZW9mIGgmJih0aGlzLm5hbWVzW2hdPWEubmFtZSx0aGlzLm5hbWVzLmtleXNbYS5uYW1lXT1oKTtyZXR1cm4gaH07ZS5wcm90b3R5cGUudXBkYXRlTmFtZXM9XG5mdW5jdGlvbigpe3ZhciBhPXRoaXMsYz10aGlzLm5hbWVzOzA8Yy5sZW5ndGgmJihPYmplY3Qua2V5cyhjLmtleXMpLmZvckVhY2goZnVuY3Rpb24oYSl7ZGVsZXRlIGMua2V5c1thXX0pLGMubGVuZ3RoPTAsdGhpcy5taW5SYW5nZT10aGlzLnVzZXJNaW5SYW5nZSwodGhpcy5zZXJpZXN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGMpe2MueEluY3JlbWVudD1udWxsO2lmKCFjLnBvaW50c3x8Yy5pc0RpcnR5RGF0YSlhLm1heD1NYXRoLm1heChhLm1heCxjLnhEYXRhLmxlbmd0aC0xKSxjLnByb2Nlc3NEYXRhKCksYy5nZW5lcmF0ZVBvaW50cygpO2MuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGQsZyl7aWYoZCYmZC5vcHRpb25zJiZcInVuZGVmaW5lZFwiIT09dHlwZW9mIGQubmFtZSl7dmFyIGg9YS5uYW1lVG9YKGQpO1widW5kZWZpbmVkXCIhPT10eXBlb2YgaCYmaCE9PWQueCYmKGQueD1oLGMueERhdGFbZ109aCl9fSl9KSl9O2UucHJvdG90eXBlLnNldEF4aXNUcmFuc2xhdGlvbj1mdW5jdGlvbigpe3ZhciBjPVxudGhpcyxkPWMubWF4LWMubWluLGc9Yy5heGlzUG9pbnRSYW5nZXx8MCxoPTAsYj0wLHI9Yy5saW5rZWRQYXJlbnQsZT0hIWMuY2F0ZWdvcmllcyxmPWMudHJhbnNBLG09Yy5pc1hBeGlzO2lmKG18fGV8fGcpe3ZhciBBPWMuZ2V0Q2xvc2VzdCgpO3I/KGg9ci5taW5Qb2ludE9mZnNldCxiPXIucG9pbnRSYW5nZVBhZGRpbmcpOmMuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oZCl7dmFyIHA9ZT8xOm0/eShkLm9wdGlvbnMucG9pbnRSYW5nZSxBLDApOmMuYXhpc1BvaW50UmFuZ2V8fDAscj1kLm9wdGlvbnMucG9pbnRQbGFjZW1lbnQ7Zz1NYXRoLm1heChnLHApO2lmKCFjLnNpbmdsZXx8ZSlkPWQuaXMoXCJ4cmFuZ2VcIik/IW06bSxoPU1hdGgubWF4KGgsZCYmYShyKT8wOnAvMiksYj1NYXRoLm1heChiLGQmJlwib25cIj09PXI/MDpwKX0pO3I9Yy5vcmRpbmFsJiZjLm9yZGluYWwuc2xvcGUmJkE/Yy5vcmRpbmFsLnNsb3BlL0E6MTtjLm1pblBvaW50T2Zmc2V0PWgqPXI7Yy5wb2ludFJhbmdlUGFkZGluZz1cbmIqPXI7Yy5wb2ludFJhbmdlPU1hdGgubWluKGcsYy5zaW5nbGUmJmU/MTpkKTttJiYoYy5jbG9zZXN0UG9pbnRSYW5nZT1BKX1jLnRyYW5zbGF0aW9uU2xvcGU9Yy50cmFuc0E9Zj1jLnN0YXRpY1NjYWxlfHxjLmxlbi8oZCtifHwxKTtjLnRyYW5zQj1jLmhvcml6P2MubGVmdDpjLmJvdHRvbTtjLm1pblBpeGVsUGFkZGluZz1mKmg7Sih0aGlzLFwiYWZ0ZXJTZXRBeGlzVHJhbnNsYXRpb25cIil9O2UucHJvdG90eXBlLm1pbkZyb21SYW5nZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1heC10aGlzLnJhbmdlfTtlLnByb3RvdHlwZS5zZXRUaWNrSW50ZXJ2YWw9ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcyxkPWMuY2hhcnQsaD1jLmxvZ2FyaXRobWljLGI9Yy5vcHRpb25zLGU9Yy5pc1hBeGlzLHQ9Yy5pc0xpbmtlZCxmPWIubWF4UGFkZGluZyxtPWIubWluUGFkZGluZyxBPWIudGlja0ludGVydmFsLGw9Yi50aWNrUGl4ZWxJbnRlcnZhbCxuPWMuY2F0ZWdvcmllcyxMPWcoYy50aHJlc2hvbGQpP1xuYy50aHJlc2hvbGQ6bnVsbCxQPWMuc29mdFRocmVzaG9sZDtjLmRhdGVUaW1lfHxufHx0fHx0aGlzLmdldFRpY2tBbW91bnQoKTt2YXIgdj15KGMudXNlck1pbixiLm1pbik7dmFyIHc9eShjLnVzZXJNYXgsYi5tYXgpO2lmKHQpe2MubGlua2VkUGFyZW50PWRbYy5jb2xsXVtiLmxpbmtlZFRvXTt2YXIgUj1jLmxpbmtlZFBhcmVudC5nZXRFeHRyZW1lcygpO2MubWluPXkoUi5taW4sUi5kYXRhTWluKTtjLm1heD15KFIubWF4LFIuZGF0YU1heCk7Yi50eXBlIT09Yy5saW5rZWRQYXJlbnQub3B0aW9ucy50eXBlJiZ1KDExLDEsZCl9ZWxzZXtpZihQJiZrKEwpKWlmKGMuZGF0YU1pbj49TClSPUwsbT0wO2Vsc2UgaWYoYy5kYXRhTWF4PD1MKXt2YXIgUT1MO2Y9MH1jLm1pbj15KHYsUixjLmRhdGFNaW4pO2MubWF4PXkodyxRLGMuZGF0YU1heCl9aCYmKGMucG9zaXRpdmVWYWx1ZXNPbmx5JiYhYSYmMD49TWF0aC5taW4oYy5taW4seShjLmRhdGFNaW4sYy5taW4pKSYmdSgxMCwxLGQpLGMubWluPVxucShoLmxvZzJsaW4oYy5taW4pLDE2KSxjLm1heD1xKGgubG9nMmxpbihjLm1heCksMTYpKTtjLnJhbmdlJiZrKGMubWF4KSYmKGMudXNlck1pbj1jLm1pbj12PU1hdGgubWF4KGMuZGF0YU1pbixjLm1pbkZyb21SYW5nZSgpKSxjLnVzZXJNYXg9dz1jLm1heCxjLnJhbmdlPW51bGwpO0ooYyxcImZvdW5kRXh0cmVtZXNcIik7Yy5iZWZvcmVQYWRkaW5nJiZjLmJlZm9yZVBhZGRpbmcoKTtjLmFkanVzdEZvck1pblJhbmdlKCk7IShufHxjLmF4aXNQb2ludFJhbmdlfHxjLnN0YWNraW5nJiZjLnN0YWNraW5nLnVzZVBlcmNlbnRhZ2V8fHQpJiZrKGMubWluKSYmayhjLm1heCkmJihkPWMubWF4LWMubWluKSYmKCFrKHYpJiZtJiYoYy5taW4tPWQqbSksIWsodykmJmYmJihjLm1heCs9ZCpmKSk7ZyhjLnVzZXJNaW4pfHwoZyhiLnNvZnRNaW4pJiZiLnNvZnRNaW48Yy5taW4mJihjLm1pbj12PWIuc29mdE1pbiksZyhiLmZsb29yKSYmKGMubWluPU1hdGgubWF4KGMubWluLGIuZmxvb3IpKSk7ZyhjLnVzZXJNYXgpfHxcbihnKGIuc29mdE1heCkmJmIuc29mdE1heD5jLm1heCYmKGMubWF4PXc9Yi5zb2Z0TWF4KSxnKGIuY2VpbGluZykmJihjLm1heD1NYXRoLm1pbihjLm1heCxiLmNlaWxpbmcpKSk7UCYmayhjLmRhdGFNaW4pJiYoTD1MfHwwLCFrKHYpJiZjLm1pbjxMJiZjLmRhdGFNaW4+PUw/Yy5taW49Yy5vcHRpb25zLm1pblJhbmdlP01hdGgubWluKEwsYy5tYXgtYy5taW5SYW5nZSk6TDohayh3KSYmYy5tYXg+TCYmYy5kYXRhTWF4PD1MJiYoYy5tYXg9Yy5vcHRpb25zLm1pblJhbmdlP01hdGgubWF4KEwsYy5taW4rYy5taW5SYW5nZSk6TCkpO2coYy5taW4pJiZnKGMubWF4KSYmIXRoaXMuY2hhcnQucG9sYXImJmMubWluPmMubWF4JiYoayhjLm9wdGlvbnMubWluKT9jLm1heD1jLm1pbjprKGMub3B0aW9ucy5tYXgpJiYoYy5taW49Yy5tYXgpKTtjLnRpY2tJbnRlcnZhbD1jLm1pbj09PWMubWF4fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIGMubWlufHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIGMubWF4PzE6XG50JiZjLmxpbmtlZFBhcmVudCYmIUEmJmw9PT1jLmxpbmtlZFBhcmVudC5vcHRpb25zLnRpY2tQaXhlbEludGVydmFsP0E9Yy5saW5rZWRQYXJlbnQudGlja0ludGVydmFsOnkoQSx0aGlzLnRpY2tBbW91bnQ/KGMubWF4LWMubWluKS9NYXRoLm1heCh0aGlzLnRpY2tBbW91bnQtMSwxKTp2b2lkIDAsbj8xOihjLm1heC1jLm1pbikqbC9NYXRoLm1heChjLmxlbixsKSk7ZSYmIWEmJmMuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oYSl7YS5wcm9jZXNzRGF0YShjLm1pbiE9PShjLm9sZCYmYy5vbGQubWluKXx8Yy5tYXghPT0oYy5vbGQmJmMub2xkLm1heCkpfSk7Yy5zZXRBeGlzVHJhbnNsYXRpb24oKTtKKHRoaXMsXCJpbml0aWFsQXhpc1RyYW5zbGF0aW9uXCIpO2MucG9pbnRSYW5nZSYmIUEmJihjLnRpY2tJbnRlcnZhbD1NYXRoLm1heChjLnBvaW50UmFuZ2UsYy50aWNrSW50ZXJ2YWwpKTthPXkoYi5taW5UaWNrSW50ZXJ2YWwsYy5kYXRlVGltZSYmIWMuc2VyaWVzLnNvbWUoZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9TaGFyZWRUb29sdGlwfSk/XG5jLmNsb3Nlc3RQb2ludFJhbmdlOjApOyFBJiZjLnRpY2tJbnRlcnZhbDxhJiYoYy50aWNrSW50ZXJ2YWw9YSk7Yy5kYXRlVGltZXx8Yy5sb2dhcml0aG1pY3x8QXx8KGMudGlja0ludGVydmFsPXIoYy50aWNrSW50ZXJ2YWwsdm9pZCAwLEUoYy50aWNrSW50ZXJ2YWwpLHkoYi5hbGxvd0RlY2ltYWxzLC41PmMudGlja0ludGVydmFsfHx2b2lkIDAhPT10aGlzLnRpY2tBbW91bnQpLCEhdGhpcy50aWNrQW1vdW50KSk7dGhpcy50aWNrQW1vdW50fHwoYy50aWNrSW50ZXJ2YWw9Yy51bnNxdWlzaCgpKTt0aGlzLnNldFRpY2tQb3NpdGlvbnMoKX07ZS5wcm90b3R5cGUuc2V0VGlja1Bvc2l0aW9ucz1mdW5jdGlvbigpe3ZhciBhPXRoaXMub3B0aW9ucyxjPWEudGlja1Bvc2l0aW9uczt2YXIgZD10aGlzLmdldE1pbm9yVGlja0ludGVydmFsKCk7dmFyIGc9YS50aWNrUG9zaXRpb25lcixoPXRoaXMuaGFzVmVydGljYWxQYW5uaW5nKCksYj1cImNvbG9yQXhpc1wiPT09dGhpcy5jb2xsLHI9KGJ8fFxuIWgpJiZhLnN0YXJ0T25UaWNrO2g9KGJ8fCFoKSYmYS5lbmRPblRpY2s7dGhpcy50aWNrbWFya09mZnNldD10aGlzLmNhdGVnb3JpZXMmJlwiYmV0d2VlblwiPT09YS50aWNrbWFya1BsYWNlbWVudCYmMT09PXRoaXMudGlja0ludGVydmFsPy41OjA7dGhpcy5taW5vclRpY2tJbnRlcnZhbD1cImF1dG9cIj09PWQmJnRoaXMudGlja0ludGVydmFsP3RoaXMudGlja0ludGVydmFsLzU6ZDt0aGlzLnNpbmdsZT10aGlzLm1pbj09PXRoaXMubWF4JiZrKHRoaXMubWluKSYmIXRoaXMudGlja0Ftb3VudCYmKHBhcnNlSW50KHRoaXMubWluLDEwKT09PXRoaXMubWlufHwhMSE9PWEuYWxsb3dEZWNpbWFscyk7dGhpcy50aWNrUG9zaXRpb25zPWQ9YyYmYy5zbGljZSgpOyFkJiYodGhpcy5vcmRpbmFsJiZ0aGlzLm9yZGluYWwucG9zaXRpb25zfHwhKCh0aGlzLm1heC10aGlzLm1pbikvdGhpcy50aWNrSW50ZXJ2YWw+TWF0aC5tYXgoMip0aGlzLmxlbiwyMDApKT9kPXRoaXMuZGF0ZVRpbWU/dGhpcy5nZXRUaW1lVGlja3ModGhpcy5kYXRlVGltZS5ub3JtYWxpemVUaW1lVGlja0ludGVydmFsKHRoaXMudGlja0ludGVydmFsLFxuYS51bml0cyksdGhpcy5taW4sdGhpcy5tYXgsYS5zdGFydE9mV2Vlayx0aGlzLm9yZGluYWwmJnRoaXMub3JkaW5hbC5wb3NpdGlvbnMsdGhpcy5jbG9zZXN0UG9pbnRSYW5nZSwhMCk6dGhpcy5sb2dhcml0aG1pYz90aGlzLmxvZ2FyaXRobWljLmdldExvZ1RpY2tQb3NpdGlvbnModGhpcy50aWNrSW50ZXJ2YWwsdGhpcy5taW4sdGhpcy5tYXgpOnRoaXMuZ2V0TGluZWFyVGlja1Bvc2l0aW9ucyh0aGlzLnRpY2tJbnRlcnZhbCx0aGlzLm1pbix0aGlzLm1heCk6KGQ9W3RoaXMubWluLHRoaXMubWF4XSx1KDE5LCExLHRoaXMuY2hhcnQpKSxkLmxlbmd0aD50aGlzLmxlbiYmKGQ9W2RbMF0sZC5wb3AoKV0sZFswXT09PWRbMV0mJihkLmxlbmd0aD0xKSksdGhpcy50aWNrUG9zaXRpb25zPWQsZyYmKGc9Zy5hcHBseSh0aGlzLFt0aGlzLm1pbix0aGlzLm1heF0pKSkmJih0aGlzLnRpY2tQb3NpdGlvbnM9ZD1nKTt0aGlzLnBhZGRlZFRpY2tzPWQuc2xpY2UoMCk7dGhpcy50cmltVGlja3MoZCxcbnIsaCk7dGhpcy5pc0xpbmtlZHx8KHRoaXMuc2luZ2xlJiYyPmQubGVuZ3RoJiYhdGhpcy5jYXRlZ29yaWVzJiYhdGhpcy5zZXJpZXMuc29tZShmdW5jdGlvbihhKXtyZXR1cm4gYS5pcyhcImhlYXRtYXBcIikmJlwiYmV0d2VlblwiPT09YS5vcHRpb25zLnBvaW50UGxhY2VtZW50fSkmJih0aGlzLm1pbi09LjUsdGhpcy5tYXgrPS41KSxjfHxnfHx0aGlzLmFkanVzdFRpY2tBbW91bnQoKSk7Sih0aGlzLFwiYWZ0ZXJTZXRUaWNrUG9zaXRpb25zXCIpfTtlLnByb3RvdHlwZS50cmltVGlja3M9ZnVuY3Rpb24oYSxjLGQpe3ZhciBnPWFbMF0saD1hW2EubGVuZ3RoLTFdLGI9IXRoaXMuaXNPcmRpbmFsJiZ0aGlzLm1pblBvaW50T2Zmc2V0fHwwO0oodGhpcyxcInRyaW1UaWNrc1wiKTtpZighdGhpcy5pc0xpbmtlZCl7aWYoYyYmLUluZmluaXR5IT09Zyl0aGlzLm1pbj1nO2Vsc2UgZm9yKDt0aGlzLm1pbi1iPmFbMF07KWEuc2hpZnQoKTtpZihkKXRoaXMubWF4PWg7ZWxzZSBmb3IoO3RoaXMubWF4K2I8XG5hW2EubGVuZ3RoLTFdOylhLnBvcCgpOzA9PT1hLmxlbmd0aCYmayhnKSYmIXRoaXMub3B0aW9ucy50aWNrUG9zaXRpb25zJiZhLnB1c2goKGgrZykvMil9fTtlLnByb3RvdHlwZS5hbGlnblRvT3RoZXJzPWZ1bmN0aW9uKCl7dmFyIGE9e30sYyxkPXRoaXMub3B0aW9uczshMSE9PXRoaXMuY2hhcnQub3B0aW9ucy5jaGFydC5hbGlnblRpY2tzJiZkLmFsaWduVGlja3MmJiExIT09ZC5zdGFydE9uVGljayYmITEhPT1kLmVuZE9uVGljayYmIXRoaXMubG9nYXJpdGhtaWMmJnRoaXMuY2hhcnRbdGhpcy5jb2xsXS5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZhciBnPWQub3B0aW9ucztnPVtkLmhvcml6P2cubGVmdDpnLnRvcCxnLndpZHRoLGcuaGVpZ2h0LGcucGFuZV0uam9pbigpO2Quc2VyaWVzLmxlbmd0aCYmKGFbZ10/Yz0hMDphW2ddPTEpfSk7cmV0dXJuIGN9O2UucHJvdG90eXBlLmdldFRpY2tBbW91bnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnMsYz1hLnRpY2tBbW91bnQsZD1cbmEudGlja1BpeGVsSW50ZXJ2YWw7IWsoYS50aWNrSW50ZXJ2YWwpJiYhYyYmdGhpcy5sZW48ZCYmIXRoaXMuaXNSYWRpYWwmJiF0aGlzLmxvZ2FyaXRobWljJiZhLnN0YXJ0T25UaWNrJiZhLmVuZE9uVGljayYmKGM9Mik7IWMmJnRoaXMuYWxpZ25Ub090aGVycygpJiYoYz1NYXRoLmNlaWwodGhpcy5sZW4vZCkrMSk7ND5jJiYodGhpcy5maW5hbFRpY2tBbXQ9YyxjPTUpO3RoaXMudGlja0Ftb3VudD1jfTtlLnByb3RvdHlwZS5hZGp1c3RUaWNrQW1vdW50PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcHRpb25zLGM9dGhpcy50aWNrSW50ZXJ2YWwsZD10aGlzLnRpY2tQb3NpdGlvbnMsaD10aGlzLnRpY2tBbW91bnQsYj10aGlzLmZpbmFsVGlja0FtdCxyPWQmJmQubGVuZ3RoLGU9eSh0aGlzLnRocmVzaG9sZCx0aGlzLnNvZnRUaHJlc2hvbGQ/MDpudWxsKTtpZih0aGlzLmhhc0RhdGEoKSYmZyh0aGlzLm1pbikmJmcodGhpcy5tYXgpKXtpZihyPGgpe2Zvcig7ZC5sZW5ndGg8aDspZC5sZW5ndGglXG4yfHx0aGlzLm1pbj09PWU/ZC5wdXNoKHEoZFtkLmxlbmd0aC0xXStjKSk6ZC51bnNoaWZ0KHEoZFswXS1jKSk7dGhpcy50cmFuc0EqPShyLTEpLyhoLTEpO3RoaXMubWluPWEuc3RhcnRPblRpY2s/ZFswXTpNYXRoLm1pbih0aGlzLm1pbixkWzBdKTt0aGlzLm1heD1hLmVuZE9uVGljaz9kW2QubGVuZ3RoLTFdOk1hdGgubWF4KHRoaXMubWF4LGRbZC5sZW5ndGgtMV0pfWVsc2Ugcj5oJiYodGhpcy50aWNrSW50ZXJ2YWwqPTIsdGhpcy5zZXRUaWNrUG9zaXRpb25zKCkpO2lmKGsoYikpe2ZvcihjPWE9ZC5sZW5ndGg7Yy0tOykoMz09PWImJjE9PT1jJTJ8fDI+PWImJjA8YyYmYzxhLTEpJiZkLnNwbGljZShjLDEpO3RoaXMuZmluYWxUaWNrQW10PXZvaWQgMH19fTtlLnByb3RvdHlwZS5zZXRTY2FsZT1mdW5jdGlvbigpe3ZhciBhLGM9ITEsZD0hMTt0aGlzLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2M9Y3x8YS5pc0RpcnR5RGF0YXx8YS5pc0RpcnR5O2Q9ZHx8YS54QXhpcyYmYS54QXhpcy5pc0RpcnR5fHxcbiExfSk7dGhpcy5zZXRBeGlzU2l6ZSgpOyhhPXRoaXMubGVuIT09KHRoaXMub2xkJiZ0aGlzLm9sZC5sZW4pKXx8Y3x8ZHx8dGhpcy5pc0xpbmtlZHx8dGhpcy5mb3JjZVJlZHJhd3x8dGhpcy51c2VyTWluIT09KHRoaXMub2xkJiZ0aGlzLm9sZC51c2VyTWluKXx8dGhpcy51c2VyTWF4IT09KHRoaXMub2xkJiZ0aGlzLm9sZC51c2VyTWF4KXx8dGhpcy5hbGlnblRvT3RoZXJzKCk/KHRoaXMuc3RhY2tpbmcmJnRoaXMuc3RhY2tpbmcucmVzZXRTdGFja3MoKSx0aGlzLmZvcmNlUmVkcmF3PSExLHRoaXMuZ2V0U2VyaWVzRXh0cmVtZXMoKSx0aGlzLnNldFRpY2tJbnRlcnZhbCgpLHRoaXMuaXNEaXJ0eXx8KHRoaXMuaXNEaXJ0eT1hfHx0aGlzLm1pbiE9PSh0aGlzLm9sZCYmdGhpcy5vbGQubWluKXx8dGhpcy5tYXghPT0odGhpcy5vbGQmJnRoaXMub2xkLm1heCkpKTp0aGlzLnN0YWNraW5nJiZ0aGlzLnN0YWNraW5nLmNsZWFuU3RhY2tzKCk7YyYmdGhpcy5wYW5uaW5nU3RhdGUmJih0aGlzLnBhbm5pbmdTdGF0ZS5pc0RpcnR5PVxuITApO0oodGhpcyxcImFmdGVyU2V0U2NhbGVcIil9O2UucHJvdG90eXBlLnNldEV4dHJlbWVzPWZ1bmN0aW9uKGEsYyxkLGcsaCl7dmFyIGI9dGhpcyxyPWIuY2hhcnQ7ZD15KGQsITApO2Iuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oYSl7ZGVsZXRlIGEua2RUcmVlfSk7aD1uKGgse21pbjphLG1heDpjfSk7SihiLFwic2V0RXh0cmVtZXNcIixoLGZ1bmN0aW9uKCl7Yi51c2VyTWluPWE7Yi51c2VyTWF4PWM7Yi5ldmVudEFyZ3M9aDtkJiZyLnJlZHJhdyhnKX0pfTtlLnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9dGhpcyxnPXRoaXMuZGF0YU1pbixoPXRoaXMuZGF0YU1heCxiPXRoaXMub3B0aW9ucyxyPU1hdGgubWluKGcseShiLm1pbixnKSksZT1NYXRoLm1heChoLHkoYi5tYXgsaCkpO2E9e25ld01pbjphLG5ld01heDpjfTtKKHRoaXMsXCJ6b29tXCIsYSxmdW5jdGlvbihhKXt2YXIgYz1hLm5ld01pbixiPWEubmV3TWF4O2lmKGMhPT1kLm1pbnx8YiE9PWQubWF4KWQuYWxsb3dab29tT3V0c2lkZXx8XG4oayhnKSYmKGM8ciYmKGM9ciksYz5lJiYoYz1lKSksayhoKSYmKGI8ciYmKGI9ciksYj5lJiYoYj1lKSkpLGQuZGlzcGxheUJ0bj1cInVuZGVmaW5lZFwiIT09dHlwZW9mIGN8fFwidW5kZWZpbmVkXCIhPT10eXBlb2YgYixkLnNldEV4dHJlbWVzKGMsYiwhMSx2b2lkIDAse3RyaWdnZXI6XCJ6b29tXCJ9KTthLnpvb21lZD0hMH0pO3JldHVybiBhLnpvb21lZH07ZS5wcm90b3R5cGUuc2V0QXhpc1NpemU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNoYXJ0LGM9dGhpcy5vcHRpb25zLGQ9Yy5vZmZzZXRzfHxbMCwwLDAsMF0sZz10aGlzLmhvcml6LGg9dGhpcy53aWR0aD1NYXRoLnJvdW5kKEwoeShjLndpZHRoLGEucGxvdFdpZHRoLWRbM10rZFsxXSksYS5wbG90V2lkdGgpKSxiPXRoaXMuaGVpZ2h0PU1hdGgucm91bmQoTCh5KGMuaGVpZ2h0LGEucGxvdEhlaWdodC1kWzBdK2RbMl0pLGEucGxvdEhlaWdodCkpLHI9dGhpcy50b3A9TWF0aC5yb3VuZChMKHkoYy50b3AsYS5wbG90VG9wK2RbMF0pLGEucGxvdEhlaWdodCxcbmEucGxvdFRvcCkpO2M9dGhpcy5sZWZ0PU1hdGgucm91bmQoTCh5KGMubGVmdCxhLnBsb3RMZWZ0K2RbM10pLGEucGxvdFdpZHRoLGEucGxvdExlZnQpKTt0aGlzLmJvdHRvbT1hLmNoYXJ0SGVpZ2h0LWItcjt0aGlzLnJpZ2h0PWEuY2hhcnRXaWR0aC1oLWM7dGhpcy5sZW49TWF0aC5tYXgoZz9oOmIsMCk7dGhpcy5wb3M9Zz9jOnJ9O2UucHJvdG90eXBlLmdldEV4dHJlbWVzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5sb2dhcml0aG1pYztyZXR1cm57bWluOmE/cShhLmxpbjJsb2codGhpcy5taW4pKTp0aGlzLm1pbixtYXg6YT9xKGEubGluMmxvZyh0aGlzLm1heCkpOnRoaXMubWF4LGRhdGFNaW46dGhpcy5kYXRhTWluLGRhdGFNYXg6dGhpcy5kYXRhTWF4LHVzZXJNaW46dGhpcy51c2VyTWluLHVzZXJNYXg6dGhpcy51c2VyTWF4fX07ZS5wcm90b3R5cGUuZ2V0VGhyZXNob2xkPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMubG9nYXJpdGhtaWMsZD1jP2MubGluMmxvZyh0aGlzLm1pbik6dGhpcy5taW47XG5jPWM/Yy5saW4ybG9nKHRoaXMubWF4KTp0aGlzLm1heDtudWxsPT09YXx8LUluZmluaXR5PT09YT9hPWQ6SW5maW5pdHk9PT1hP2E9YzpkPmE/YT1kOmM8YSYmKGE9Yyk7cmV0dXJuIHRoaXMudHJhbnNsYXRlKGEsMCwxLDAsMSl9O2UucHJvdG90eXBlLmF1dG9MYWJlbEFsaWduPWZ1bmN0aW9uKGEpe3ZhciBjPSh5KGEsMCktOTAqdGhpcy5zaWRlKzcyMCklMzYwO2E9e2FsaWduOlwiY2VudGVyXCJ9O0oodGhpcyxcImF1dG9MYWJlbEFsaWduXCIsYSxmdW5jdGlvbihhKXsxNTxjJiYxNjU+Yz9hLmFsaWduPVwicmlnaHRcIjoxOTU8YyYmMzQ1PmMmJihhLmFsaWduPVwibGVmdFwiKX0pO3JldHVybiBhLmFsaWdufTtlLnByb3RvdHlwZS50aWNrU2l6ZT1mdW5jdGlvbihhKXt2YXIgYz10aGlzLm9wdGlvbnMsZD1jW1widGlja1wiPT09YT9cInRpY2tMZW5ndGhcIjpcIm1pbm9yVGlja0xlbmd0aFwiXSxnPXkoY1tcInRpY2tcIj09PWE/XCJ0aWNrV2lkdGhcIjpcIm1pbm9yVGlja1dpZHRoXCJdLFwidGlja1wiPT09YSYmdGhpcy5pc1hBeGlzJiZcbiF0aGlzLmNhdGVnb3JpZXM/MTowKTtpZihnJiZkKXtcImluc2lkZVwiPT09Y1thK1wiUG9zaXRpb25cIl0mJihkPS1kKTt2YXIgaD1bZCxnXX1hPXt0aWNrU2l6ZTpofTtKKHRoaXMsXCJhZnRlclRpY2tTaXplXCIsYSk7cmV0dXJuIGEudGlja1NpemV9O2UucHJvdG90eXBlLmxhYmVsTWV0cmljcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMudGlja1Bvc2l0aW9ucyYmdGhpcy50aWNrUG9zaXRpb25zWzBdfHwwO3JldHVybiB0aGlzLmNoYXJ0LnJlbmRlcmVyLmZvbnRNZXRyaWNzKHRoaXMub3B0aW9ucy5sYWJlbHMuc3R5bGUuZm9udFNpemUsdGhpcy50aWNrc1thXSYmdGhpcy50aWNrc1thXS5sYWJlbCl9O2UucHJvdG90eXBlLnVuc3F1aXNoPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcHRpb25zLmxhYmVscyxjPXRoaXMuaG9yaXosZD10aGlzLnRpY2tJbnRlcnZhbCxoPWQsYj10aGlzLmxlbi8oKCh0aGlzLmNhdGVnb3JpZXM/MTowKSt0aGlzLm1heC10aGlzLm1pbikvZCkscixlPWEucm90YXRpb24sXG5mPXRoaXMubGFiZWxNZXRyaWNzKCksbSxBPU51bWJlci5NQVhfVkFMVUUsbD1NYXRoLm1heCh0aGlzLm1heC10aGlzLm1pbiwwKSxuPWZ1bmN0aW9uKGEpe3ZhciBjPWEvKGJ8fDEpO2M9MTxjP01hdGguY2VpbChjKToxO2MqZD5sJiZJbmZpbml0eSE9PWEmJkluZmluaXR5IT09YiYmbCYmKGM9TWF0aC5jZWlsKGwvZCkpO3JldHVybiBxKGMqZCl9O2lmKGMpe2lmKCFhLnN0YWdnZXJMaW5lcyYmIWEuc3RlcClpZihnKGUpKXZhciBrPVtlXTtlbHNlIGI8YS5hdXRvUm90YXRpb25MaW1pdCYmKGs9YS5hdXRvUm90YXRpb24pO2smJmsuZm9yRWFjaChmdW5jdGlvbihhKXtpZihhPT09ZXx8YSYmLTkwPD1hJiY5MD49YSl7bT1uKE1hdGguYWJzKGYuaC9NYXRoLnNpbihRKmEpKSk7dmFyIGM9bStNYXRoLmFicyhhLzM2MCk7YzxBJiYoQT1jLHI9YSxoPW0pfX0pfWVsc2UgYS5zdGVwfHwoaD1uKGYuaCkpO3RoaXMuYXV0b1JvdGF0aW9uPWs7dGhpcy5sYWJlbFJvdGF0aW9uPXkocixnKGUpP2U6XG4wKTtyZXR1cm4gaH07ZS5wcm90b3R5cGUuZ2V0U2xvdFdpZHRoPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuY2hhcnQsZD10aGlzLmhvcml6LGg9dGhpcy5vcHRpb25zLmxhYmVscyxiPU1hdGgubWF4KHRoaXMudGlja1Bvc2l0aW9ucy5sZW5ndGgtKHRoaXMuY2F0ZWdvcmllcz8wOjEpLDEpLHI9Yy5tYXJnaW5bM107aWYoYSYmZyhhLnNsb3RXaWR0aCkpcmV0dXJuIGEuc2xvdFdpZHRoO2lmKGQmJjI+aC5zdGVwKXJldHVybiBoLnJvdGF0aW9uPzA6KHRoaXMuc3RhZ2dlckxpbmVzfHwxKSp0aGlzLmxlbi9iO2lmKCFkKXthPWguc3R5bGUud2lkdGg7aWYodm9pZCAwIT09YSlyZXR1cm4gcGFyc2VJbnQoU3RyaW5nKGEpLDEwKTtpZihyKXJldHVybiByLWMuc3BhY2luZ1szXX1yZXR1cm4uMzMqYy5jaGFydFdpZHRofTtlLnByb3RvdHlwZS5yZW5kZXJVbnNxdWlzaD1mdW5jdGlvbigpe3ZhciBjPXRoaXMuY2hhcnQsZD1jLnJlbmRlcmVyLGc9dGhpcy50aWNrUG9zaXRpb25zLGg9dGhpcy50aWNrcyxcbmI9dGhpcy5vcHRpb25zLmxhYmVscyxyPWIuc3R5bGUsZT10aGlzLmhvcml6LGY9dGhpcy5nZXRTbG90V2lkdGgoKSxtPU1hdGgubWF4KDEsTWF0aC5yb3VuZChmLTIqYi5wYWRkaW5nKSksQT17fSx5PXRoaXMubGFiZWxNZXRyaWNzKCksbD1yLnRleHRPdmVyZmxvdyxuPTA7YShiLnJvdGF0aW9uKXx8KEEucm90YXRpb249Yi5yb3RhdGlvbnx8MCk7Zy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2E9aFthXTthLm1vdmVkTGFiZWwmJmEucmVwbGFjZU1vdmVkTGFiZWwoKTthJiZhLmxhYmVsJiZhLmxhYmVsLnRleHRQeExlbmd0aD5uJiYobj1hLmxhYmVsLnRleHRQeExlbmd0aCl9KTt0aGlzLm1heExhYmVsTGVuZ3RoPW47aWYodGhpcy5hdXRvUm90YXRpb24pbj5tJiZuPnkuaD9BLnJvdGF0aW9uPXRoaXMubGFiZWxSb3RhdGlvbjp0aGlzLmxhYmVsUm90YXRpb249MDtlbHNlIGlmKGYpe3ZhciBrPW07aWYoIWwpe3ZhciBMPVwiY2xpcFwiO2ZvcihtPWcubGVuZ3RoOyFlJiZtLS07KXt2YXIgdT1nW21dO1xuaWYodT1oW3VdLmxhYmVsKXUuc3R5bGVzJiZcImVsbGlwc2lzXCI9PT11LnN0eWxlcy50ZXh0T3ZlcmZsb3c/dS5jc3Moe3RleHRPdmVyZmxvdzpcImNsaXBcIn0pOnUudGV4dFB4TGVuZ3RoPmYmJnUuY3NzKHt3aWR0aDpmK1wicHhcIn0pLHUuZ2V0QkJveCgpLmhlaWdodD50aGlzLmxlbi9nLmxlbmd0aC0oeS5oLXkuZikmJih1LnNwZWNpZmljVGV4dE92ZXJmbG93PVwiZWxsaXBzaXNcIil9fX1BLnJvdGF0aW9uJiYoaz1uPi41KmMuY2hhcnRIZWlnaHQ/LjMzKmMuY2hhcnRIZWlnaHQ6bixsfHwoTD1cImVsbGlwc2lzXCIpKTtpZih0aGlzLmxhYmVsQWxpZ249Yi5hbGlnbnx8dGhpcy5hdXRvTGFiZWxBbGlnbih0aGlzLmxhYmVsUm90YXRpb24pKUEuYWxpZ249dGhpcy5sYWJlbEFsaWduO2cuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYz0oYT1oW2FdKSYmYS5sYWJlbCxkPXIud2lkdGgsZz17fTtjJiYoYy5hdHRyKEEpLGEuc2hvcnRlbkxhYmVsP2Euc2hvcnRlbkxhYmVsKCk6ayYmIWQmJlwibm93cmFwXCIhPT1cbnIud2hpdGVTcGFjZSYmKGs8Yy50ZXh0UHhMZW5ndGh8fFwiU1BBTlwiPT09Yy5lbGVtZW50LnRhZ05hbWUpPyhnLndpZHRoPWsrXCJweFwiLGx8fChnLnRleHRPdmVyZmxvdz1jLnNwZWNpZmljVGV4dE92ZXJmbG93fHxMKSxjLmNzcyhnKSk6Yy5zdHlsZXMmJmMuc3R5bGVzLndpZHRoJiYhZy53aWR0aCYmIWQmJmMuY3NzKHt3aWR0aDpudWxsfSksZGVsZXRlIGMuc3BlY2lmaWNUZXh0T3ZlcmZsb3csYS5yb3RhdGlvbj1BLnJvdGF0aW9uKX0sdGhpcyk7dGhpcy50aWNrUm90Q29ycj1kLnJvdENvcnIoeS5iLHRoaXMubGFiZWxSb3RhdGlvbnx8MCwwIT09dGhpcy5zaWRlKX07ZS5wcm90b3R5cGUuaGFzRGF0YT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlcmllcy5zb21lKGZ1bmN0aW9uKGEpe3JldHVybiBhLmhhc0RhdGEoKX0pfHx0aGlzLm9wdGlvbnMuc2hvd0VtcHR5JiZrKHRoaXMubWluKSYmayh0aGlzLm1heCl9O2UucHJvdG90eXBlLmFkZFRpdGxlPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuY2hhcnQucmVuZGVyZXIsXG5kPXRoaXMuaG9yaXosZz10aGlzLm9wcG9zaXRlLGI9dGhpcy5vcHRpb25zLnRpdGxlLHIsZT10aGlzLmNoYXJ0LnN0eWxlZE1vZGU7dGhpcy5heGlzVGl0bGV8fCgocj1iLnRleHRBbGlnbil8fChyPShkP3tsb3c6XCJsZWZ0XCIsbWlkZGxlOlwiY2VudGVyXCIsaGlnaDpcInJpZ2h0XCJ9Ontsb3c6Zz9cInJpZ2h0XCI6XCJsZWZ0XCIsbWlkZGxlOlwiY2VudGVyXCIsaGlnaDpnP1wibGVmdFwiOlwicmlnaHRcIn0pW2IuYWxpZ25dKSx0aGlzLmF4aXNUaXRsZT1jLnRleHQoYi50ZXh0fHxcIlwiLDAsMCxiLnVzZUhUTUwpLmF0dHIoe3pJbmRleDo3LHJvdGF0aW9uOmIucm90YXRpb24sYWxpZ246cn0pLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1heGlzLXRpdGxlXCIpLGV8fHRoaXMuYXhpc1RpdGxlLmNzcyhoKGIuc3R5bGUpKSx0aGlzLmF4aXNUaXRsZS5hZGQodGhpcy5heGlzR3JvdXApLHRoaXMuYXhpc1RpdGxlLmlzTmV3PSEwKTtlfHxiLnN0eWxlLndpZHRofHx0aGlzLmlzUmFkaWFsfHx0aGlzLmF4aXNUaXRsZS5jc3Moe3dpZHRoOnRoaXMubGVuK1xuXCJweFwifSk7dGhpcy5heGlzVGl0bGVbYT9cInNob3dcIjpcImhpZGVcIl0oYSl9O2UucHJvdG90eXBlLmdlbmVyYXRlVGljaz1mdW5jdGlvbihhKXt2YXIgYz10aGlzLnRpY2tzO2NbYV0/Y1thXS5hZGRMYWJlbCgpOmNbYV09bmV3IEcodGhpcyxhKX07ZS5wcm90b3R5cGUuZ2V0T2Zmc2V0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxjPXRoaXMsZD1jLmNoYXJ0LGc9ZC5yZW5kZXJlcixoPWMub3B0aW9ucyxiPWMudGlja1Bvc2l0aW9ucyxyPWMudGlja3MsZT1jLmhvcml6LGY9Yy5zaWRlLG09ZC5pbnZlcnRlZCYmIWMuaXNaQXhpcz9bMSwwLDMsMl1bZl06ZixsLG49MCxMPTAsdT1oLnRpdGxlLFA9aC5sYWJlbHMscT0wLHY9ZC5heGlzT2Zmc2V0O2Q9ZC5jbGlwT2Zmc2V0O3ZhciB3PVstMSwxLDEsLTFdW2ZdLGRhPWguY2xhc3NOYW1lLGlhPWMuYXhpc1BhcmVudDt2YXIgRT1jLmhhc0RhdGEoKTtjLnNob3dBeGlzPWw9RXx8aC5zaG93RW1wdHk7Yy5zdGFnZ2VyTGluZXM9Yy5ob3JpeiYmUC5zdGFnZ2VyTGluZXN8fFxudm9pZCAwO2lmKCFjLmF4aXNHcm91cCl7dmFyIFI9ZnVuY3Rpb24oYyxkLGgpe3JldHVybiBnLmcoYykuYXR0cih7ekluZGV4Omh9KS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtXCIrYS5jb2xsLnRvTG93ZXJDYXNlKCkrZCtcIiBcIisoYS5pc1JhZGlhbD9cImhpZ2hjaGFydHMtcmFkaWFsLWF4aXNcIitkK1wiIFwiOlwiXCIpKyhkYXx8XCJcIikpLmFkZChpYSl9O2MuZ3JpZEdyb3VwPVIoXCJncmlkXCIsXCItZ3JpZFwiLGguZ3JpZFpJbmRleCk7Yy5heGlzR3JvdXA9UihcImF4aXNcIixcIlwiLGguekluZGV4KTtjLmxhYmVsR3JvdXA9UihcImF4aXMtbGFiZWxzXCIsXCItbGFiZWxzXCIsUC56SW5kZXgpfUV8fGMuaXNMaW5rZWQ/KGIuZm9yRWFjaChmdW5jdGlvbihhLGQpe2MuZ2VuZXJhdGVUaWNrKGEsZCl9KSxjLnJlbmRlclVuc3F1aXNoKCksYy5yZXNlcnZlU3BhY2VEZWZhdWx0PTA9PT1mfHwyPT09Znx8ezE6XCJsZWZ0XCIsMzpcInJpZ2h0XCJ9W2ZdPT09Yy5sYWJlbEFsaWduLHkoUC5yZXNlcnZlU3BhY2UsXCJjZW50ZXJcIj09PVxuYy5sYWJlbEFsaWduPyEwOm51bGwsYy5yZXNlcnZlU3BhY2VEZWZhdWx0KSYmYi5mb3JFYWNoKGZ1bmN0aW9uKGEpe3E9TWF0aC5tYXgoclthXS5nZXRMYWJlbFNpemUoKSxxKX0pLGMuc3RhZ2dlckxpbmVzJiYocSo9Yy5zdGFnZ2VyTGluZXMpLGMubGFiZWxPZmZzZXQ9cSooYy5vcHBvc2l0ZT8tMToxKSk6QShyLGZ1bmN0aW9uKGEsYyl7YS5kZXN0cm95KCk7ZGVsZXRlIHJbY119KTtpZih1JiZ1LnRleHQmJiExIT09dS5lbmFibGVkJiYoYy5hZGRUaXRsZShsKSxsJiYhMSE9PXUucmVzZXJ2ZVNwYWNlKSl7Yy50aXRsZU9mZnNldD1uPWMuYXhpc1RpdGxlLmdldEJCb3goKVtlP1wiaGVpZ2h0XCI6XCJ3aWR0aFwiXTt2YXIgUT11Lm9mZnNldDtMPWsoUSk/MDp5KHUubWFyZ2luLGU/NToxMCl9Yy5yZW5kZXJMaW5lKCk7Yy5vZmZzZXQ9dyp5KGgub2Zmc2V0LHZbZl0/dltmXSsoaC5tYXJnaW58fDApOjApO2MudGlja1JvdENvcnI9Yy50aWNrUm90Q29ycnx8e3g6MCx5OjB9O3U9MD09PWY/LWMubGFiZWxNZXRyaWNzKCkuaDpcbjI9PT1mP2MudGlja1JvdENvcnIueTowO0w9TWF0aC5hYnMocSkrTDtxJiYoTD1MLXUrdyooZT95KFAueSxjLnRpY2tSb3RDb3JyLnkrOCp3KTpQLngpKTtjLmF4aXNUaXRsZU1hcmdpbj15KFEsTCk7Yy5nZXRNYXhMYWJlbERpbWVuc2lvbnMmJihjLm1heExhYmVsRGltZW5zaW9ucz1jLmdldE1heExhYmVsRGltZW5zaW9ucyhyLGIpKTtlPXRoaXMudGlja1NpemUoXCJ0aWNrXCIpO3ZbZl09TWF0aC5tYXgodltmXSwoYy5heGlzVGl0bGVNYXJnaW58fDApK24rdypjLm9mZnNldCxMLGImJmIubGVuZ3RoJiZlP2VbMF0rdypjLm9mZnNldDowKTtoPWgub2Zmc2V0PzA6MipNYXRoLmZsb29yKGMuYXhpc0xpbmUuc3Ryb2tlV2lkdGgoKS8yKTtkW21dPU1hdGgubWF4KGRbbV0saCk7Sih0aGlzLFwiYWZ0ZXJHZXRPZmZzZXRcIil9O2UucHJvdG90eXBlLmdldExpbmVQYXRoPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuY2hhcnQsZD10aGlzLm9wcG9zaXRlLGc9dGhpcy5vZmZzZXQsaD10aGlzLmhvcml6LFxuYj10aGlzLmxlZnQrKGQ/dGhpcy53aWR0aDowKStnO2c9Yy5jaGFydEhlaWdodC10aGlzLmJvdHRvbS0oZD90aGlzLmhlaWdodDowKStnO2QmJihhKj0tMSk7cmV0dXJuIGMucmVuZGVyZXIuY3Jpc3BMaW5lKFtbXCJNXCIsaD90aGlzLmxlZnQ6YixoP2c6dGhpcy50b3BdLFtcIkxcIixoP2MuY2hhcnRXaWR0aC10aGlzLnJpZ2h0OmIsaD9nOmMuY2hhcnRIZWlnaHQtdGhpcy5ib3R0b21dXSxhKX07ZS5wcm90b3R5cGUucmVuZGVyTGluZT1mdW5jdGlvbigpe3RoaXMuYXhpc0xpbmV8fCh0aGlzLmF4aXNMaW5lPXRoaXMuY2hhcnQucmVuZGVyZXIucGF0aCgpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1heGlzLWxpbmVcIikuYWRkKHRoaXMuYXhpc0dyb3VwKSx0aGlzLmNoYXJ0LnN0eWxlZE1vZGV8fHRoaXMuYXhpc0xpbmUuYXR0cih7c3Ryb2tlOnRoaXMub3B0aW9ucy5saW5lQ29sb3IsXCJzdHJva2Utd2lkdGhcIjp0aGlzLm9wdGlvbnMubGluZVdpZHRoLHpJbmRleDo3fSkpfTtlLnByb3RvdHlwZS5nZXRUaXRsZVBvc2l0aW9uPVxuZnVuY3Rpb24oKXt2YXIgYT10aGlzLmhvcml6LGM9dGhpcy5sZWZ0LGQ9dGhpcy50b3AsZz10aGlzLmxlbixoPXRoaXMub3B0aW9ucy50aXRsZSxiPWE/YzpkLHI9dGhpcy5vcHBvc2l0ZSxlPXRoaXMub2Zmc2V0LGY9aC54LG09aC55LEE9dGhpcy5heGlzVGl0bGUseT10aGlzLmNoYXJ0LnJlbmRlcmVyLmZvbnRNZXRyaWNzKGguc3R5bGUuZm9udFNpemUsQSk7QT1NYXRoLm1heChBLmdldEJCb3gobnVsbCwwKS5oZWlnaHQteS5oLTEsMCk7Zz17bG93OmIrKGE/MDpnKSxtaWRkbGU6YitnLzIsaGlnaDpiKyhhP2c6MCl9W2guYWxpZ25dO2M9KGE/ZCt0aGlzLmhlaWdodDpjKSsoYT8xOi0xKSoocj8tMToxKSp0aGlzLmF4aXNUaXRsZU1hcmdpbitbLUEsQSx5LmYsLUFdW3RoaXMuc2lkZV07YT17eDphP2crZjpjKyhyP3RoaXMud2lkdGg6MCkrZStmLHk6YT9jK20tKHI/dGhpcy5oZWlnaHQ6MCkrZTpnK219O0oodGhpcyxcImFmdGVyR2V0VGl0bGVQb3NpdGlvblwiLHt0aXRsZVBvc2l0aW9uOmF9KTtcbnJldHVybiBhfTtlLnByb3RvdHlwZS5yZW5kZXJNaW5vclRpY2s9ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5jaGFydC5oYXNSZW5kZXJlZCYmdGhpcy5vbGQsZD10aGlzLm1pbm9yVGlja3M7ZFthXXx8KGRbYV09bmV3IEcodGhpcyxhLFwibWlub3JcIikpO2MmJmRbYV0uaXNOZXcmJmRbYV0ucmVuZGVyKG51bGwsITApO2RbYV0ucmVuZGVyKG51bGwsITEsMSl9O2UucHJvdG90eXBlLnJlbmRlclRpY2s9ZnVuY3Rpb24oYSxjKXt2YXIgZD10aGlzLnRpY2tzLGc9dGhpcy5jaGFydC5oYXNSZW5kZXJlZCYmdGhpcy5vbGQ7aWYoIXRoaXMuaXNMaW5rZWR8fGE+PXRoaXMubWluJiZhPD10aGlzLm1heHx8dGhpcy5ncmlkJiZ0aGlzLmdyaWQuaXNDb2x1bW4pZFthXXx8KGRbYV09bmV3IEcodGhpcyxhKSksZyYmZFthXS5pc05ldyYmZFthXS5yZW5kZXIoYywhMCwtMSksZFthXS5yZW5kZXIoYyl9O2UucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYz1hLmNoYXJ0LGQ9YS5sb2dhcml0aG1pYyxcbmg9YS5vcHRpb25zLGI9YS5pc0xpbmtlZCxyPWEudGlja1Bvc2l0aW9ucyxlPWEuYXhpc1RpdGxlLGY9YS50aWNrcyxtPWEubWlub3JUaWNrcyx5PWEuYWx0ZXJuYXRlQmFuZHMsbD1oLnN0YWNrTGFiZWxzLG49aC5hbHRlcm5hdGVHcmlkQ29sb3Isaz1hLnRpY2ttYXJrT2Zmc2V0LEw9YS5heGlzTGluZSx1PWEuc2hvd0F4aXMscT1CKGMucmVuZGVyZXIuZ2xvYmFsQW5pbWF0aW9uKSxQLHY7YS5sYWJlbEVkZ2UubGVuZ3RoPTA7YS5vdmVybGFwPSExO1tmLG0seV0uZm9yRWFjaChmdW5jdGlvbihhKXtBKGEsZnVuY3Rpb24oYSl7YS5pc0FjdGl2ZT0hMX0pfSk7aWYoYS5oYXNEYXRhKCl8fGIpYS5taW5vclRpY2tJbnRlcnZhbCYmIWEuY2F0ZWdvcmllcyYmYS5nZXRNaW5vclRpY2tQb3NpdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uKGMpe2EucmVuZGVyTWlub3JUaWNrKGMpfSksci5sZW5ndGgmJihyLmZvckVhY2goZnVuY3Rpb24oYyxkKXthLnJlbmRlclRpY2soYyxkKX0pLGsmJigwPT09XG5hLm1pbnx8YS5zaW5nbGUpJiYoZlstMV18fChmWy0xXT1uZXcgRyhhLC0xLG51bGwsITApKSxmWy0xXS5yZW5kZXIoLTEpKSksbiYmci5mb3JFYWNoKGZ1bmN0aW9uKGcsaCl7dj1cInVuZGVmaW5lZFwiIT09dHlwZW9mIHJbaCsxXT9yW2grMV0razphLm1heC1rOzA9PT1oJTImJmc8YS5tYXgmJnY8PWEubWF4KyhjLnBvbGFyPy1rOmspJiYoeVtnXXx8KHlbZ109bmV3IEkuUGxvdExpbmVPckJhbmQoYSkpLFA9ZytrLHlbZ10ub3B0aW9ucz17ZnJvbTpkP2QubGluMmxvZyhQKTpQLHRvOmQ/ZC5saW4ybG9nKHYpOnYsY29sb3I6bixjbGFzc05hbWU6XCJoaWdoY2hhcnRzLWFsdGVybmF0ZS1ncmlkXCJ9LHlbZ10ucmVuZGVyKCkseVtnXS5pc0FjdGl2ZT0hMCl9KSxhLl9hZGRlZFBsb3RMQnx8KGEuX2FkZGVkUGxvdExCPSEwLChoLnBsb3RMaW5lc3x8W10pLmNvbmNhdChoLnBsb3RCYW5kc3x8W10pLmZvckVhY2goZnVuY3Rpb24oYyl7YS5hZGRQbG90QmFuZE9yTGluZShjKX0pKTtbZixtLHldLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGQsXG5nPVtdLGg9cS5kdXJhdGlvbjtBKGEsZnVuY3Rpb24oYSxjKXthLmlzQWN0aXZlfHwoYS5yZW5kZXIoYywhMSwwKSxhLmlzQWN0aXZlPSExLGcucHVzaChjKSl9KTtWKGZ1bmN0aW9uKCl7Zm9yKGQ9Zy5sZW5ndGg7ZC0tOylhW2dbZF1dJiYhYVtnW2RdXS5pc0FjdGl2ZSYmKGFbZ1tkXV0uZGVzdHJveSgpLGRlbGV0ZSBhW2dbZF1dKX0sYSE9PXkmJmMuaGFzUmVuZGVyZWQmJmg/aDowKX0pO0wmJihMW0wuaXNQbGFjZWQ/XCJhbmltYXRlXCI6XCJhdHRyXCJdKHtkOnRoaXMuZ2V0TGluZVBhdGgoTC5zdHJva2VXaWR0aCgpKX0pLEwuaXNQbGFjZWQ9ITAsTFt1P1wic2hvd1wiOlwiaGlkZVwiXSh1KSk7ZSYmdSYmKGg9YS5nZXRUaXRsZVBvc2l0aW9uKCksZyhoLnkpPyhlW2UuaXNOZXc/XCJhdHRyXCI6XCJhbmltYXRlXCJdKGgpLGUuaXNOZXc9ITEpOihlLmF0dHIoXCJ5XCIsLTk5OTkpLGUuaXNOZXc9ITApKTtsJiZsLmVuYWJsZWQmJmEuc3RhY2tpbmcmJmEuc3RhY2tpbmcucmVuZGVyU3RhY2tUb3RhbHMoKTtcbmEub2xkPXtsZW46YS5sZW4sbWF4OmEubWF4LG1pbjphLm1pbix0cmFuc0E6YS50cmFuc0EsdXNlck1heDphLnVzZXJNYXgsdXNlck1pbjphLnVzZXJNaW59O2EuaXNEaXJ0eT0hMTtKKHRoaXMsXCJhZnRlclJlbmRlclwiKX07ZS5wcm90b3R5cGUucmVkcmF3PWZ1bmN0aW9uKCl7dGhpcy52aXNpYmxlJiYodGhpcy5yZW5kZXIoKSx0aGlzLnBsb3RMaW5lc0FuZEJhbmRzLmZvckVhY2goZnVuY3Rpb24oYSl7YS5yZW5kZXIoKX0pKTt0aGlzLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuaXNEaXJ0eT0hMH0pfTtlLnByb3RvdHlwZS5nZXRLZWVwUHJvcHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rZWVwUHJvcHN8fGUua2VlcFByb3BzfTtlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMsZD1jLnBsb3RMaW5lc0FuZEJhbmRzLGc7Sih0aGlzLFwiZGVzdHJveVwiLHtrZWVwRXZlbnRzOmF9KTthfHxQKGMpO1tjLnRpY2tzLGMubWlub3JUaWNrcyxjLmFsdGVybmF0ZUJhbmRzXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2woYSl9KTtcbmlmKGQpZm9yKGE9ZC5sZW5ndGg7YS0tOylkW2FdLmRlc3Ryb3koKTtcImF4aXNMaW5lIGF4aXNUaXRsZSBheGlzR3JvdXAgZ3JpZEdyb3VwIGxhYmVsR3JvdXAgY3Jvc3Mgc2Nyb2xsYmFyXCIuc3BsaXQoXCIgXCIpLmZvckVhY2goZnVuY3Rpb24oYSl7Y1thXSYmKGNbYV09Y1thXS5kZXN0cm95KCkpfSk7Zm9yKGcgaW4gYy5wbG90TGluZXNBbmRCYW5kc0dyb3VwcyljLnBsb3RMaW5lc0FuZEJhbmRzR3JvdXBzW2ddPWMucGxvdExpbmVzQW5kQmFuZHNHcm91cHNbZ10uZGVzdHJveSgpO0EoYyxmdW5jdGlvbihhLGQpey0xPT09Yy5nZXRLZWVwUHJvcHMoKS5pbmRleE9mKGQpJiZkZWxldGUgY1tkXX0pfTtlLnByb3RvdHlwZS5kcmF3Q3Jvc3NoYWlyPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9dGhpcy5jcm9zc2hhaXIsZz15KGQmJmQuc25hcCwhMCksaCxyPXRoaXMuY3Jvc3MsZT10aGlzLmNoYXJ0O0oodGhpcyxcImRyYXdDcm9zc2hhaXJcIix7ZTphLHBvaW50OmN9KTthfHwoYT10aGlzLmNyb3NzJiZcbnRoaXMuY3Jvc3MuZSk7aWYoZCYmITEhPT0oayhjKXx8IWcpKXtnP2soYykmJihoPXkoXCJjb2xvckF4aXNcIiE9PXRoaXMuY29sbD9jLmNyb3NzaGFpclBvczpudWxsLHRoaXMuaXNYQXhpcz9jLnBsb3RYOnRoaXMubGVuLWMucGxvdFkpKTpoPWEmJih0aGlzLmhvcml6P2EuY2hhcnRYLXRoaXMucG9zOnRoaXMubGVuLWEuY2hhcnRZK3RoaXMucG9zKTtpZihrKGgpKXt2YXIgZj17dmFsdWU6YyYmKHRoaXMuaXNYQXhpcz9jLng6eShjLnN0YWNrWSxjLnkpKSx0cmFuc2xhdGVkVmFsdWU6aH07ZS5wb2xhciYmbihmLHtpc0Nyb3NzaGFpcjohMCxjaGFydFg6YSYmYS5jaGFydFgsY2hhcnRZOmEmJmEuY2hhcnRZLHBvaW50OmN9KTtmPXRoaXMuZ2V0UGxvdExpbmVQYXRoKGYpfHxudWxsfWlmKCFrKGYpKXt0aGlzLmhpZGVDcm9zc2hhaXIoKTtyZXR1cm59Zz10aGlzLmNhdGVnb3JpZXMmJiF0aGlzLmlzUmFkaWFsO3J8fCh0aGlzLmNyb3NzPXI9ZS5yZW5kZXJlci5wYXRoKCkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWNyb3NzaGFpciBoaWdoY2hhcnRzLWNyb3NzaGFpci1cIitcbihnP1wiY2F0ZWdvcnkgXCI6XCJ0aGluIFwiKSsoZC5jbGFzc05hbWV8fFwiXCIpKS5hdHRyKHt6SW5kZXg6eShkLnpJbmRleCwyKX0pLmFkZCgpLGUuc3R5bGVkTW9kZXx8KHIuYXR0cih7c3Ryb2tlOmQuY29sb3J8fChnP2IucGFyc2Uoei5oaWdobGlnaHRDb2xvcjIwKS5zZXRPcGFjaXR5KC4yNSkuZ2V0KCk6ei5uZXV0cmFsQ29sb3IyMCksXCJzdHJva2Utd2lkdGhcIjp5KGQud2lkdGgsMSl9KS5jc3Moe1wicG9pbnRlci1ldmVudHNcIjpcIm5vbmVcIn0pLGQuZGFzaFN0eWxlJiZyLmF0dHIoe2Rhc2hzdHlsZTpkLmRhc2hTdHlsZX0pKSk7ci5zaG93KCkuYXR0cih7ZDpmfSk7ZyYmIWQud2lkdGgmJnIuYXR0cih7XCJzdHJva2Utd2lkdGhcIjp0aGlzLnRyYW5zQX0pO3RoaXMuY3Jvc3MuZT1hfWVsc2UgdGhpcy5oaWRlQ3Jvc3NoYWlyKCk7Sih0aGlzLFwiYWZ0ZXJEcmF3Q3Jvc3NoYWlyXCIse2U6YSxwb2ludDpjfSl9O2UucHJvdG90eXBlLmhpZGVDcm9zc2hhaXI9ZnVuY3Rpb24oKXt0aGlzLmNyb3NzJiZcbnRoaXMuY3Jvc3MuaGlkZSgpO0oodGhpcyxcImFmdGVySGlkZUNyb3NzaGFpclwiKX07ZS5wcm90b3R5cGUuaGFzVmVydGljYWxQYW5uaW5nPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jaGFydC5vcHRpb25zLmNoYXJ0LnBhbm5pbmc7cmV0dXJuISEoYSYmYS5lbmFibGVkJiYveS8udGVzdChhLnR5cGUpKX07ZS5wcm90b3R5cGUudmFsaWRhdGVQb3NpdGl2ZVZhbHVlPWZ1bmN0aW9uKGEpe3JldHVybiBnKGEpJiYwPGF9O2UucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihhLGMpe3ZhciBkPXRoaXMuY2hhcnQsZz1hJiZhLmV2ZW50c3x8e307YT1oKHRoaXMudXNlck9wdGlvbnMsYSk7QShkLm9wdGlvbnNbdGhpcy5jb2xsXS5ldmVudHMsZnVuY3Rpb24oYSxjKXtcInVuZGVmaW5lZFwiPT09dHlwZW9mIGdbY10mJihnW2NdPXZvaWQgMCl9KTt0aGlzLmRlc3Ryb3koITApO3RoaXMuaW5pdChkLG4oYSx7ZXZlbnRzOmd9KSk7ZC5pc0RpcnR5Qm94PSEwO3koYywhMCkmJmQucmVkcmF3KCl9O2UucHJvdG90eXBlLnJlbW92ZT1cbmZ1bmN0aW9uKGEpe2Zvcih2YXIgYz10aGlzLmNoYXJ0LGQ9dGhpcy5jb2xsLGc9dGhpcy5zZXJpZXMsaD1nLmxlbmd0aDtoLS07KWdbaF0mJmdbaF0ucmVtb3ZlKCExKTtOKGMuYXhlcyx0aGlzKTtOKGNbZF0sdGhpcyk7Y1tkXS5mb3JFYWNoKGZ1bmN0aW9uKGEsYyl7YS5vcHRpb25zLmluZGV4PWEudXNlck9wdGlvbnMuaW5kZXg9Y30pO3RoaXMuZGVzdHJveSgpO2MuaXNEaXJ0eUJveD0hMDt5KGEsITApJiZjLnJlZHJhdygpfTtlLnByb3RvdHlwZS5zZXRUaXRsZT1mdW5jdGlvbihhLGMpe3RoaXMudXBkYXRlKHt0aXRsZTphfSxjKX07ZS5wcm90b3R5cGUuc2V0Q2F0ZWdvcmllcz1mdW5jdGlvbihhLGMpe3RoaXMudXBkYXRlKHtjYXRlZ29yaWVzOmF9LGMpfTtlLmRlZmF1bHRPcHRpb25zPXthbGlnblRpY2tzOiEwLGFsbG93RGVjaW1hbHM6dm9pZCAwLHpJbmRleDoyLHpvb21FbmFibGVkOiEwLGRhdGVUaW1lTGFiZWxGb3JtYXRzOnttaWxsaXNlY29uZDp7bWFpbjpcIiVIOiVNOiVTLiVMXCIsXG5yYW5nZTohMX0sc2Vjb25kOnttYWluOlwiJUg6JU06JVNcIixyYW5nZTohMX0sbWludXRlOnttYWluOlwiJUg6JU1cIixyYW5nZTohMX0saG91cjp7bWFpbjpcIiVIOiVNXCIscmFuZ2U6ITF9LGRheTp7bWFpbjpcIiVlLiAlYlwifSx3ZWVrOnttYWluOlwiJWUuICViXCJ9LG1vbnRoOnttYWluOlwiJWIgJyV5XCJ9LHllYXI6e21haW46XCIlWVwifX0sZW5kT25UaWNrOiExLGdyaWRMaW5lRGFzaFN0eWxlOlwiU29saWRcIixncmlkWkluZGV4OjEsbGFiZWxzOnthdXRvUm90YXRpb246dm9pZCAwLGF1dG9Sb3RhdGlvbkxpbWl0OjgwLGRpc3RhbmNlOnZvaWQgMCxlbmFibGVkOiEwLGluZGVudGF0aW9uOjEwLG92ZXJmbG93OlwianVzdGlmeVwiLHBhZGRpbmc6NSxyZXNlcnZlU3BhY2U6dm9pZCAwLHJvdGF0aW9uOnZvaWQgMCxzdGFnZ2VyTGluZXM6MCxzdGVwOjAsdXNlSFRNTDohMSx4OjAsekluZGV4Ojcsc3R5bGU6e2NvbG9yOnoubmV1dHJhbENvbG9yNjAsY3Vyc29yOlwiZGVmYXVsdFwiLGZvbnRTaXplOlwiMTFweFwifX0sXG5tYXhQYWRkaW5nOi4wMSxtaW5vckdyaWRMaW5lRGFzaFN0eWxlOlwiU29saWRcIixtaW5vclRpY2tMZW5ndGg6MixtaW5vclRpY2tQb3NpdGlvbjpcIm91dHNpZGVcIixtaW5QYWRkaW5nOi4wMSxvZmZzZXQ6dm9pZCAwLG9wcG9zaXRlOiExLHJldmVyc2VkOnZvaWQgMCxyZXZlcnNlZFN0YWNrczohMSxzaG93RW1wdHk6ITAsc2hvd0ZpcnN0TGFiZWw6ITAsc2hvd0xhc3RMYWJlbDohMCxzdGFydE9mV2VlazoxLHN0YXJ0T25UaWNrOiExLHRpY2tMZW5ndGg6MTAsdGlja1BpeGVsSW50ZXJ2YWw6MTAwLHRpY2ttYXJrUGxhY2VtZW50OlwiYmV0d2VlblwiLHRpY2tQb3NpdGlvbjpcIm91dHNpZGVcIix0aXRsZTp7YWxpZ246XCJtaWRkbGVcIixyb3RhdGlvbjowLHVzZUhUTUw6ITEseDowLHk6MCxzdHlsZTp7Y29sb3I6ei5uZXV0cmFsQ29sb3I2MH19LHR5cGU6XCJsaW5lYXJcIix1bmlxdWVOYW1lczohMCx2aXNpYmxlOiEwLG1pbm9yR3JpZExpbmVDb2xvcjp6Lm5ldXRyYWxDb2xvcjUsbWlub3JHcmlkTGluZVdpZHRoOjEsXG5taW5vclRpY2tDb2xvcjp6Lm5ldXRyYWxDb2xvcjQwLGxpbmVDb2xvcjp6LmhpZ2hsaWdodENvbG9yMjAsbGluZVdpZHRoOjEsZ3JpZExpbmVDb2xvcjp6Lm5ldXRyYWxDb2xvcjEwLGdyaWRMaW5lV2lkdGg6dm9pZCAwLHRpY2tDb2xvcjp6LmhpZ2hsaWdodENvbG9yMjB9O2UuZGVmYXVsdFlBeGlzT3B0aW9ucz17cmV2ZXJzZWRTdGFja3M6ITAsZW5kT25UaWNrOiEwLG1heFBhZGRpbmc6LjA1LG1pblBhZGRpbmc6LjA1LHRpY2tQaXhlbEludGVydmFsOjcyLHNob3dMYXN0TGFiZWw6ITAsbGFiZWxzOnt4Oi04fSxzdGFydE9uVGljazohMCx0aXRsZTp7cm90YXRpb246MjcwLHRleHQ6XCJWYWx1ZXNcIn0sc3RhY2tMYWJlbHM6e2FuaW1hdGlvbjp7fSxhbGxvd092ZXJsYXA6ITEsZW5hYmxlZDohMSxjcm9wOiEwLG92ZXJmbG93OlwianVzdGlmeVwiLGZvcm1hdHRlcjpmdW5jdGlvbigpe3ZhciBhPXRoaXMuYXhpcy5jaGFydC5udW1iZXJGb3JtYXR0ZXI7cmV0dXJuIGEodGhpcy50b3RhbCwtMSl9LFxuc3R5bGU6e2NvbG9yOnoubmV1dHJhbENvbG9yMTAwLGZvbnRTaXplOlwiMTFweFwiLGZvbnRXZWlnaHQ6XCJib2xkXCIsdGV4dE91dGxpbmU6XCIxcHggY29udHJhc3RcIn19LGdyaWRMaW5lV2lkdGg6MSxsaW5lV2lkdGg6MH07ZS5kZWZhdWx0TGVmdEF4aXNPcHRpb25zPXtsYWJlbHM6e3g6LTE1fSx0aXRsZTp7cm90YXRpb246MjcwfX07ZS5kZWZhdWx0UmlnaHRBeGlzT3B0aW9ucz17bGFiZWxzOnt4OjE1fSx0aXRsZTp7cm90YXRpb246OTB9fTtlLmRlZmF1bHRCb3R0b21BeGlzT3B0aW9ucz17bGFiZWxzOnthdXRvUm90YXRpb246Wy00NV0seDowfSxtYXJnaW46MTUsdGl0bGU6e3JvdGF0aW9uOjB9fTtlLmRlZmF1bHRUb3BBeGlzT3B0aW9ucz17bGFiZWxzOnthdXRvUm90YXRpb246Wy00NV0seDowfSxtYXJnaW46MTUsdGl0bGU6e3JvdGF0aW9uOjB9fTtlLmtlZXBQcm9wcz1cImV4dEtleSBoY0V2ZW50cyBuYW1lcyBzZXJpZXMgdXNlck1heCB1c2VyTWluXCIuc3BsaXQoXCIgXCIpO3JldHVybiBlfSgpO1xuSS5BeGlzPWU7cmV0dXJuIEkuQXhpc30pO08oZSxcIkNvcmUvQXhpcy9EYXRlVGltZUF4aXMuanNcIixbZVtcIkNvcmUvQXhpcy9BeGlzLmpzXCJdLGVbXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oZSxiKXt2YXIgRD1iLmFkZEV2ZW50LHo9Yi5nZXRNYWduaXR1ZGUsSD1iLm5vcm1hbGl6ZVRpY2tJbnRlcnZhbCxHPWIudGltZVVuaXRzLEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKGIpe3RoaXMuYXhpcz1ifWIucHJvdG90eXBlLm5vcm1hbGl6ZVRpbWVUaWNrSW50ZXJ2YWw9ZnVuY3Rpb24oYixlKXt2YXIgdj1lfHxbW1wibWlsbGlzZWNvbmRcIixbMSwyLDUsMTAsMjAsMjUsNTAsMTAwLDIwMCw1MDBdXSxbXCJzZWNvbmRcIixbMSwyLDUsMTAsMTUsMzBdXSxbXCJtaW51dGVcIixbMSwyLDUsMTAsMTUsMzBdXSxbXCJob3VyXCIsWzEsMiwzLDQsNiw4LDEyXV0sW1wiZGF5XCIsWzEsMl1dLFtcIndlZWtcIixbMSwyXV0sW1wibW9udGhcIixbMSwyLDMsNCw2XV0sW1wieWVhclwiLG51bGxdXTtlPXZbdi5sZW5ndGgtXG4xXTt2YXIgZj1HW2VbMF1dLGQ9ZVsxXSxxO2ZvcihxPTA7cTx2Lmxlbmd0aCYmIShlPXZbcV0sZj1HW2VbMF1dLGQ9ZVsxXSx2W3ErMV0mJmI8PShmKmRbZC5sZW5ndGgtMV0rR1t2W3ErMV1bMF1dKS8yKTtxKyspO2Y9PT1HLnllYXImJmI8NSpmJiYoZD1bMSwyLDVdKTtiPUgoYi9mLGQsXCJ5ZWFyXCI9PT1lWzBdP01hdGgubWF4KHooYi9mKSwxKToxKTtyZXR1cm57dW5pdFJhbmdlOmYsY291bnQ6Yix1bml0TmFtZTplWzBdfX07cmV0dXJuIGJ9KCk7Yj1mdW5jdGlvbigpe2Z1bmN0aW9uIGIoKXt9Yi5jb21wb3NlPWZ1bmN0aW9uKGIpe2Iua2VlcFByb3BzLnB1c2goXCJkYXRlVGltZVwiKTtiLnByb3RvdHlwZS5nZXRUaW1lVGlja3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGFydC50aW1lLmdldFRpbWVUaWNrcy5hcHBseSh0aGlzLmNoYXJ0LnRpbWUsYXJndW1lbnRzKX07RChiLFwiaW5pdFwiLGZ1bmN0aW9uKGIpe1wiZGF0ZXRpbWVcIiE9PWIudXNlck9wdGlvbnMudHlwZT90aGlzLmRhdGVUaW1lPVxudm9pZCAwOnRoaXMuZGF0ZVRpbWV8fCh0aGlzLmRhdGVUaW1lPW5ldyBDKHRoaXMpKX0pfTtiLkFkZGl0aW9uc0NsYXNzPUM7cmV0dXJuIGJ9KCk7Yi5jb21wb3NlKGUpO3JldHVybiBifSk7TyhlLFwiQ29yZS9BeGlzL0xvZ2FyaXRobWljQXhpcy5qc1wiLFtlW1wiQ29yZS9BeGlzL0F4aXMuanNcIl0sZVtcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihlLGIpe3ZhciBEPWIuYWRkRXZlbnQsej1iLmdldE1hZ25pdHVkZSxIPWIubm9ybWFsaXplVGlja0ludGVydmFsLEc9Yi5waWNrLEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKGIpe3RoaXMuYXhpcz1ifWIucHJvdG90eXBlLmdldExvZ1RpY2tQb3NpdGlvbnM9ZnVuY3Rpb24oYixlLHYsZil7dmFyIGQ9dGhpcy5heGlzLHE9ZC5sZW4saz1kLm9wdGlvbnMsbD1bXTtmfHwodGhpcy5taW5vckF1dG9JbnRlcnZhbD12b2lkIDApO2lmKC41PD1iKWI9TWF0aC5yb3VuZChiKSxsPWQuZ2V0TGluZWFyVGlja1Bvc2l0aW9ucyhiLGUsdik7ZWxzZSBpZiguMDg8PVxuYil7dmFyIHc9TWF0aC5mbG9vcihlKSx1LG49az12b2lkIDA7Zm9yKHE9LjM8Yj9bMSwyLDRdOi4xNTxiP1sxLDIsNCw2LDhdOlsxLDIsMyw0LDUsNiw3LDgsOV07dzx2KzEmJiFuO3crKyl7dmFyIEo9cS5sZW5ndGg7Zm9yKHU9MDt1PEomJiFuO3UrKyl7dmFyIEU9dGhpcy5sb2cybGluKHRoaXMubGluMmxvZyh3KSpxW3VdKTtFPmUmJighZnx8azw9dikmJlwidW5kZWZpbmVkXCIhPT10eXBlb2YgayYmbC5wdXNoKGspO2s+diYmKG49ITApO2s9RX19fWVsc2UgZT10aGlzLmxpbjJsb2coZSksdj10aGlzLmxpbjJsb2codiksYj1mP2QuZ2V0TWlub3JUaWNrSW50ZXJ2YWwoKTprLnRpY2tJbnRlcnZhbCxiPUcoXCJhdXRvXCI9PT1iP251bGw6Yix0aGlzLm1pbm9yQXV0b0ludGVydmFsLGsudGlja1BpeGVsSW50ZXJ2YWwvKGY/NToxKSoodi1lKS8oKGY/cS9kLnRpY2tQb3NpdGlvbnMubGVuZ3RoOnEpfHwxKSksYj1IKGIsdm9pZCAwLHooYikpLGw9ZC5nZXRMaW5lYXJUaWNrUG9zaXRpb25zKGIsXG5lLHYpLm1hcCh0aGlzLmxvZzJsaW4pLGZ8fCh0aGlzLm1pbm9yQXV0b0ludGVydmFsPWIvNSk7Znx8KGQudGlja0ludGVydmFsPWIpO3JldHVybiBsfTtiLnByb3RvdHlwZS5saW4ybG9nPWZ1bmN0aW9uKGIpe3JldHVybiBNYXRoLnBvdygxMCxiKX07Yi5wcm90b3R5cGUubG9nMmxpbj1mdW5jdGlvbihiKXtyZXR1cm4gTWF0aC5sb2coYikvTWF0aC5MTjEwfTtyZXR1cm4gYn0oKTtiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYigpe31iLmNvbXBvc2U9ZnVuY3Rpb24oYil7Yi5rZWVwUHJvcHMucHVzaChcImxvZ2FyaXRobWljXCIpO0QoYixcImluaXRcIixmdW5jdGlvbihiKXt2YXIgZT10aGlzLmxvZ2FyaXRobWljO1wibG9nYXJpdGhtaWNcIiE9PWIudXNlck9wdGlvbnMudHlwZT90aGlzLmxvZ2FyaXRobWljPXZvaWQgMDplfHwodGhpcy5sb2dhcml0aG1pYz1uZXcgQyh0aGlzKSl9KTtEKGIsXCJhZnRlckluaXRcIixmdW5jdGlvbigpe3ZhciBiPXRoaXMubG9nYXJpdGhtaWM7YiYmKHRoaXMubGluMnZhbD1cbmZ1bmN0aW9uKGUpe3JldHVybiBiLmxpbjJsb2coZSl9LHRoaXMudmFsMmxpbj1mdW5jdGlvbihlKXtyZXR1cm4gYi5sb2cybGluKGUpfSl9KX07cmV0dXJuIGJ9KCk7Yi5jb21wb3NlKGUpO3JldHVybiBifSk7TyhlLFwiQ29yZS9BeGlzL1Bsb3RMaW5lT3JCYW5kLmpzXCIsW2VbXCJDb3JlL0F4aXMvQXhpcy5qc1wiXSxlW1wiQ29yZS9HbG9iYWxzLmpzXCJdLGVbXCJDb3JlL0NvbG9yL1BhbGV0dGUuanNcIl0sZVtcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihlLGIsSSx6KXt2YXIgRD16LmFycmF5TWF4LEc9ei5hcnJheU1pbixDPXouZGVmaW5lZCxCPXouZGVzdHJveU9iamVjdFByb3BlcnRpZXMseD16LmVyYXNlLHc9ei5leHRlbmQsdj16LmZpcmVFdmVudCxmPXouaXNOdW1iZXIsZD16Lm1lcmdlLHE9ei5vYmplY3RFYWNoLGs9ei5waWNrO3o9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiKGQsYil7dGhpcy5heGlzPWQ7YiYmKHRoaXMub3B0aW9ucz1iLHRoaXMuaWQ9Yi5pZCl9Yi5wcm90b3R5cGUucmVuZGVyPVxuZnVuY3Rpb24oKXt2KHRoaXMsXCJyZW5kZXJcIik7dmFyIGI9dGhpcyxlPWIuYXhpcyxmPWUuaG9yaXosbD1lLmxvZ2FyaXRobWljLEU9Yi5vcHRpb25zLG09RS5sYWJlbCxjPWIubGFiZWwsZz1FLnRvLGE9RS5mcm9tLGg9RS52YWx1ZSxyPUMoYSkmJkMoZyksQT1DKGgpLHk9Yi5zdmdFbGVtLEw9IXksUD1bXSxSPUUuY29sb3Isdz1rKEUuekluZGV4LDApLFE9RS5ldmVudHM7UD17XCJjbGFzc1wiOlwiaGlnaGNoYXJ0cy1wbG90LVwiKyhyP1wiYmFuZCBcIjpcImxpbmUgXCIpKyhFLmNsYXNzTmFtZXx8XCJcIil9O3ZhciBNPXt9LHQ9ZS5jaGFydC5yZW5kZXJlcixwPXI/XCJiYW5kc1wiOlwibGluZXNcIjtsJiYoYT1sLmxvZzJsaW4oYSksZz1sLmxvZzJsaW4oZyksaD1sLmxvZzJsaW4oaCkpO2UuY2hhcnQuc3R5bGVkTW9kZXx8KEE/KFAuc3Ryb2tlPVJ8fEkubmV1dHJhbENvbG9yNDAsUFtcInN0cm9rZS13aWR0aFwiXT1rKEUud2lkdGgsMSksRS5kYXNoU3R5bGUmJihQLmRhc2hzdHlsZT1FLmRhc2hTdHlsZSkpOlxuciYmKFAuZmlsbD1SfHxJLmhpZ2hsaWdodENvbG9yMTAsRS5ib3JkZXJXaWR0aCYmKFAuc3Ryb2tlPUUuYm9yZGVyQ29sb3IsUFtcInN0cm9rZS13aWR0aFwiXT1FLmJvcmRlcldpZHRoKSkpO00uekluZGV4PXc7cCs9XCItXCIrdzsobD1lLnBsb3RMaW5lc0FuZEJhbmRzR3JvdXBzW3BdKXx8KGUucGxvdExpbmVzQW5kQmFuZHNHcm91cHNbcF09bD10LmcoXCJwbG90LVwiK3ApLmF0dHIoTSkuYWRkKCkpO0wmJihiLnN2Z0VsZW09eT10LnBhdGgoKS5hdHRyKFApLmFkZChsKSk7aWYoQSlQPWUuZ2V0UGxvdExpbmVQYXRoKHt2YWx1ZTpoLGxpbmVXaWR0aDp5LnN0cm9rZVdpZHRoKCksYWNyb3NzUGFuZXM6RS5hY3Jvc3NQYW5lc30pO2Vsc2UgaWYocilQPWUuZ2V0UGxvdEJhbmRQYXRoKGEsZyxFKTtlbHNlIHJldHVybjshYi5ldmVudHNBZGRlZCYmUSYmKHEoUSxmdW5jdGlvbihhLGMpe3kub24oYyxmdW5jdGlvbihhKXtRW2NdLmFwcGx5KGIsW2FdKX0pfSksYi5ldmVudHNBZGRlZD0hMCk7KEx8fFxuIXkuZCkmJlAmJlAubGVuZ3RoP3kuYXR0cih7ZDpQfSk6eSYmKFA/KHkuc2hvdyghMCkseS5hbmltYXRlKHtkOlB9KSk6eS5kJiYoeS5oaWRlKCksYyYmKGIubGFiZWw9Yz1jLmRlc3Ryb3koKSkpKTttJiYoQyhtLnRleHQpfHxDKG0uZm9ybWF0dGVyKSkmJlAmJlAubGVuZ3RoJiYwPGUud2lkdGgmJjA8ZS5oZWlnaHQmJiFQLmlzRmxhdD8obT1kKHthbGlnbjpmJiZyJiZcImNlbnRlclwiLHg6Zj8hciYmNDoxMCx2ZXJ0aWNhbEFsaWduOiFmJiZyJiZcIm1pZGRsZVwiLHk6Zj9yPzE2OjEwOnI/NjotNCxyb3RhdGlvbjpmJiYhciYmOTB9LG0pLHRoaXMucmVuZGVyTGFiZWwobSxQLHIsdykpOmMmJmMuaGlkZSgpO3JldHVybiBifTtiLnByb3RvdHlwZS5yZW5kZXJMYWJlbD1mdW5jdGlvbihkLGIsZSxmKXt2YXIgbD10aGlzLmxhYmVsLG09dGhpcy5heGlzLmNoYXJ0LnJlbmRlcmVyO2x8fChsPXthbGlnbjpkLnRleHRBbGlnbnx8ZC5hbGlnbixyb3RhdGlvbjpkLnJvdGF0aW9uLFwiY2xhc3NcIjpcImhpZ2hjaGFydHMtcGxvdC1cIitcbihlP1wiYmFuZFwiOlwibGluZVwiKStcIi1sYWJlbCBcIisoZC5jbGFzc05hbWV8fFwiXCIpfSxsLnpJbmRleD1mLGY9dGhpcy5nZXRMYWJlbFRleHQoZCksdGhpcy5sYWJlbD1sPW0udGV4dChmLDAsMCxkLnVzZUhUTUwpLmF0dHIobCkuYWRkKCksdGhpcy5heGlzLmNoYXJ0LnN0eWxlZE1vZGV8fGwuY3NzKGQuc3R5bGUpKTttPWIueEJvdW5kc3x8W2JbMF1bMV0sYlsxXVsxXSxlP2JbMl1bMV06YlswXVsxXV07Yj1iLnlCb3VuZHN8fFtiWzBdWzJdLGJbMV1bMl0sZT9iWzJdWzJdOmJbMF1bMl1dO2U9RyhtKTtmPUcoYik7bC5hbGlnbihkLCExLHt4OmUseTpmLHdpZHRoOkQobSktZSxoZWlnaHQ6RChiKS1mfSk7bC5zaG93KCEwKX07Yi5wcm90b3R5cGUuZ2V0TGFiZWxUZXh0PWZ1bmN0aW9uKGQpe3JldHVybiBDKGQuZm9ybWF0dGVyKT9kLmZvcm1hdHRlci5jYWxsKHRoaXMpOmQudGV4dH07Yi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3godGhpcy5heGlzLnBsb3RMaW5lc0FuZEJhbmRzLFxudGhpcyk7ZGVsZXRlIHRoaXMuYXhpcztCKHRoaXMpfTtyZXR1cm4gYn0oKTt3KGUucHJvdG90eXBlLHtnZXRQbG90QmFuZFBhdGg6ZnVuY3Rpb24oZCxiLGUpe3ZvaWQgMD09PWUmJihlPXRoaXMub3B0aW9ucyk7dmFyIGw9dGhpcy5nZXRQbG90TGluZVBhdGgoe3ZhbHVlOmIsZm9yY2U6ITAsYWNyb3NzUGFuZXM6ZS5hY3Jvc3NQYW5lc30pO2U9dGhpcy5nZXRQbG90TGluZVBhdGgoe3ZhbHVlOmQsZm9yY2U6ITAsYWNyb3NzUGFuZXM6ZS5hY3Jvc3NQYW5lc30pO3ZhciBrPVtdLHE9dGhpcy5ob3JpeixtPTE7ZD0hZih0aGlzLm1pbil8fCFmKHRoaXMubWF4KXx8ZDx0aGlzLm1pbiYmYjx0aGlzLm1pbnx8ZD50aGlzLm1heCYmYj50aGlzLm1heDtpZihlJiZsKXtpZihkKXt2YXIgYz1lLnRvU3RyaW5nKCk9PT1sLnRvU3RyaW5nKCk7bT0wfWZvcihkPTA7ZDxlLmxlbmd0aDtkKz0yKXtiPWVbZF07dmFyIGc9ZVtkKzFdLGE9bFtkXSxoPWxbZCsxXTtcIk1cIiE9PWJbMF0mJlwiTFwiIT09YlswXXx8XG5cIk1cIiE9PWdbMF0mJlwiTFwiIT09Z1swXXx8XCJNXCIhPT1hWzBdJiZcIkxcIiE9PWFbMF18fFwiTVwiIT09aFswXSYmXCJMXCIhPT1oWzBdfHwocSYmYVsxXT09PWJbMV0/KGFbMV0rPW0saFsxXSs9bSk6cXx8YVsyXSE9PWJbMl18fChhWzJdKz1tLGhbMl0rPW0pLGsucHVzaChbXCJNXCIsYlsxXSxiWzJdXSxbXCJMXCIsZ1sxXSxnWzJdXSxbXCJMXCIsaFsxXSxoWzJdXSxbXCJMXCIsYVsxXSxhWzJdXSxbXCJaXCJdKSk7ay5pc0ZsYXQ9Y319cmV0dXJuIGt9LGFkZFBsb3RCYW5kOmZ1bmN0aW9uKGQpe3JldHVybiB0aGlzLmFkZFBsb3RCYW5kT3JMaW5lKGQsXCJwbG90QmFuZHNcIil9LGFkZFBsb3RMaW5lOmZ1bmN0aW9uKGQpe3JldHVybiB0aGlzLmFkZFBsb3RCYW5kT3JMaW5lKGQsXCJwbG90TGluZXNcIil9LGFkZFBsb3RCYW5kT3JMaW5lOmZ1bmN0aW9uKGQsZSl7dmFyIGY9dGhpcyxsPW5ldyBiLlBsb3RMaW5lT3JCYW5kKHRoaXMsZCksaz10aGlzLnVzZXJPcHRpb25zO3RoaXMudmlzaWJsZSYmKGw9bC5yZW5kZXIoKSk7XG5pZihsKXt0aGlzLl9hZGRlZFBsb3RMQnx8KHRoaXMuX2FkZGVkUGxvdExCPSEwLChrLnBsb3RMaW5lc3x8W10pLmNvbmNhdChrLnBsb3RCYW5kc3x8W10pLmZvckVhY2goZnVuY3Rpb24oZCl7Zi5hZGRQbG90QmFuZE9yTGluZShkKX0pKTtpZihlKXt2YXIgcT1rW2VdfHxbXTtxLnB1c2goZCk7a1tlXT1xfXRoaXMucGxvdExpbmVzQW5kQmFuZHMucHVzaChsKX1yZXR1cm4gbH0scmVtb3ZlUGxvdEJhbmRPckxpbmU6ZnVuY3Rpb24oZCl7Zm9yKHZhciBiPXRoaXMucGxvdExpbmVzQW5kQmFuZHMsZT10aGlzLm9wdGlvbnMsZj10aGlzLnVzZXJPcHRpb25zLGw9Yi5sZW5ndGg7bC0tOyliW2xdLmlkPT09ZCYmYltsXS5kZXN0cm95KCk7W2UucGxvdExpbmVzfHxbXSxmLnBsb3RMaW5lc3x8W10sZS5wbG90QmFuZHN8fFtdLGYucGxvdEJhbmRzfHxbXV0uZm9yRWFjaChmdW5jdGlvbihiKXtmb3IobD1iLmxlbmd0aDtsLS07KShiW2xdfHx7fSkuaWQ9PT1kJiZ4KGIsYltsXSl9KX0scmVtb3ZlUGxvdEJhbmQ6ZnVuY3Rpb24oZCl7dGhpcy5yZW1vdmVQbG90QmFuZE9yTGluZShkKX0sXG5yZW1vdmVQbG90TGluZTpmdW5jdGlvbihkKXt0aGlzLnJlbW92ZVBsb3RCYW5kT3JMaW5lKGQpfX0pO2IuUGxvdExpbmVPckJhbmQ9ejtyZXR1cm4gYi5QbG90TGluZU9yQmFuZH0pO08oZSxcIkNvcmUvVG9vbHRpcC5qc1wiLFtlW1wiQ29yZS9Gb3JtYXRVdGlsaXRpZXMuanNcIl0sZVtcIkNvcmUvR2xvYmFscy5qc1wiXSxlW1wiQ29yZS9Db2xvci9QYWxldHRlLmpzXCJdLGVbXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oZSxiLEkseil7dmFyIEQ9ZS5mb3JtYXQsRz1iLmRvYyxDPXouY2xhbXAsQj16LmNzcyx4PXouZGVmaW5lZCx3PXouZGlzY2FyZEVsZW1lbnQsdj16LmV4dGVuZCxmPXouZmlyZUV2ZW50LGQ9ei5pc0FycmF5LHE9ei5pc051bWJlcixrPXouaXNTdHJpbmcsbD16Lm1lcmdlLE49ei5waWNrLHU9ei5zcGxhdCxuPXouc3luY1RpbWVvdXQsSj16LnRpbWVVbml0cztcIlwiO2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGQsYyl7dGhpcy5jb250YWluZXI9dm9pZCAwO3RoaXMuY3Jvc3NoYWlycz1cbltdO3RoaXMuZGlzdGFuY2U9MDt0aGlzLmlzSGlkZGVuPSEwO3RoaXMuaXNTdGlja3k9ITE7dGhpcy5ub3c9e307dGhpcy5vcHRpb25zPXt9O3RoaXMub3V0c2lkZT0hMTt0aGlzLmNoYXJ0PWQ7dGhpcy5pbml0KGQsYyl9ZS5wcm90b3R5cGUuYXBwbHlGaWx0ZXI9ZnVuY3Rpb24oKXt2YXIgZD10aGlzLmNoYXJ0O2QucmVuZGVyZXIuZGVmaW5pdGlvbih7dGFnTmFtZTpcImZpbHRlclwiLGF0dHJpYnV0ZXM6e2lkOlwiZHJvcC1zaGFkb3ctXCIrZC5pbmRleCxvcGFjaXR5Oi41fSxjaGlsZHJlbjpbe3RhZ05hbWU6XCJmZUdhdXNzaWFuQmx1clwiLGF0dHJpYnV0ZXM6e1wiaW5cIjpcIlNvdXJjZUFscGhhXCIsc3RkRGV2aWF0aW9uOjF9fSx7dGFnTmFtZTpcImZlT2Zmc2V0XCIsYXR0cmlidXRlczp7ZHg6MSxkeToxfX0se3RhZ05hbWU6XCJmZUNvbXBvbmVudFRyYW5zZmVyXCIsY2hpbGRyZW46W3t0YWdOYW1lOlwiZmVGdW5jQVwiLGF0dHJpYnV0ZXM6e3R5cGU6XCJsaW5lYXJcIixzbG9wZTouM319XX0se3RhZ05hbWU6XCJmZU1lcmdlXCIsXG5jaGlsZHJlbjpbe3RhZ05hbWU6XCJmZU1lcmdlTm9kZVwifSx7dGFnTmFtZTpcImZlTWVyZ2VOb2RlXCIsYXR0cmlidXRlczp7XCJpblwiOlwiU291cmNlR3JhcGhpY1wifX1dfV19KTtkLnJlbmRlcmVyLmRlZmluaXRpb24oe3RhZ05hbWU6XCJzdHlsZVwiLHRleHRDb250ZW50OlwiLmhpZ2hjaGFydHMtdG9vbHRpcC1cIitkLmluZGV4K1wie2ZpbHRlcjp1cmwoI2Ryb3Atc2hhZG93LVwiK2QuaW5kZXgrXCIpfVwifSl9O2UucHJvdG90eXBlLmJvZHlGb3JtYXR0ZXI9ZnVuY3Rpb24oZCl7cmV0dXJuIGQubWFwKGZ1bmN0aW9uKGMpe3ZhciBkPWMuc2VyaWVzLnRvb2x0aXBPcHRpb25zO3JldHVybihkWyhjLnBvaW50LmZvcm1hdFByZWZpeHx8XCJwb2ludFwiKStcIkZvcm1hdHRlclwiXXx8Yy5wb2ludC50b29sdGlwRm9ybWF0dGVyKS5jYWxsKGMucG9pbnQsZFsoYy5wb2ludC5mb3JtYXRQcmVmaXh8fFwicG9pbnRcIikrXCJGb3JtYXRcIl18fFwiXCIpfSl9O2UucHJvdG90eXBlLmNsZWFuU3BsaXQ9ZnVuY3Rpb24oZCl7dGhpcy5jaGFydC5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgYj1cbmMmJmMudHQ7YiYmKCFiLmlzQWN0aXZlfHxkP2MudHQ9Yi5kZXN0cm95KCk6Yi5pc0FjdGl2ZT0hMSl9KX07ZS5wcm90b3R5cGUuZGVmYXVsdEZvcm1hdHRlcj1mdW5jdGlvbihkKXt2YXIgYz10aGlzLnBvaW50c3x8dSh0aGlzKTt2YXIgYj1bZC50b29sdGlwRm9vdGVySGVhZGVyRm9ybWF0dGVyKGNbMF0pXTtiPWIuY29uY2F0KGQuYm9keUZvcm1hdHRlcihjKSk7Yi5wdXNoKGQudG9vbHRpcEZvb3RlckhlYWRlckZvcm1hdHRlcihjWzBdLCEwKSk7cmV0dXJuIGJ9O2UucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxhYmVsJiYodGhpcy5sYWJlbD10aGlzLmxhYmVsLmRlc3Ryb3koKSk7dGhpcy5zcGxpdCYmdGhpcy50dCYmKHRoaXMuY2xlYW5TcGxpdCh0aGlzLmNoYXJ0LCEwKSx0aGlzLnR0PXRoaXMudHQuZGVzdHJveSgpKTt0aGlzLnJlbmRlcmVyJiYodGhpcy5yZW5kZXJlcj10aGlzLnJlbmRlcmVyLmRlc3Ryb3koKSx3KHRoaXMuY29udGFpbmVyKSk7ei5jbGVhclRpbWVvdXQodGhpcy5oaWRlVGltZXIpO1xuei5jbGVhclRpbWVvdXQodGhpcy50b29sdGlwVGltZW91dCl9O2UucHJvdG90eXBlLmdldEFuY2hvcj1mdW5jdGlvbihkLGMpe3ZhciBiPXRoaXMuY2hhcnQ7dmFyIGE9Yi5wb2ludGVyO3ZhciBoPWIuaW52ZXJ0ZWQsZT1iLnBsb3RUb3AsZj1iLnBsb3RMZWZ0LG09MCxsPTAsayxuO2Q9dShkKTt0aGlzLmZvbGxvd1BvaW50ZXImJmM/KFwidW5kZWZpbmVkXCI9PT10eXBlb2YgYy5jaGFydFgmJihjPWEubm9ybWFsaXplKGMpKSxhPVtjLmNoYXJ0WC1mLGMuY2hhcnRZLWVdKTpkWzBdLnRvb2x0aXBQb3M/YT1kWzBdLnRvb2x0aXBQb3M6KGQuZm9yRWFjaChmdW5jdGlvbihhKXtrPWEuc2VyaWVzLnlBeGlzO249YS5zZXJpZXMueEF4aXM7bSs9YS5wbG90WHx8MDtsKz1hLnBsb3RMb3c/KGEucGxvdExvdysoYS5wbG90SGlnaHx8MCkpLzI6YS5wbG90WXx8MDtuJiZrJiYoaD8obSs9ZStiLnBsb3RIZWlnaHQtbi5sZW4tbi5wb3MsbCs9ZitiLnBsb3RXaWR0aC1rLmxlbi1rLnBvcyk6KG0rPW4ucG9zLVxuZixsKz1rLnBvcy1lKSl9KSxtLz1kLmxlbmd0aCxsLz1kLmxlbmd0aCxhPVtoP2IucGxvdFdpZHRoLWw6bSxoP2IucGxvdEhlaWdodC1tOmxdLHRoaXMuc2hhcmVkJiYxPGQubGVuZ3RoJiZjJiYoaD9hWzBdPWMuY2hhcnRYLWY6YVsxXT1jLmNoYXJ0WS1lKSk7cmV0dXJuIGEubWFwKE1hdGgucm91bmQpfTtlLnByb3RvdHlwZS5nZXREYXRlRm9ybWF0PWZ1bmN0aW9uKGQsYyxiLGEpe3ZhciBoPXRoaXMuY2hhcnQudGltZSxnPWguZGF0ZUZvcm1hdChcIiVtLSVkICVIOiVNOiVTLiVMXCIsYyksZT17bWlsbGlzZWNvbmQ6MTUsc2Vjb25kOjEyLG1pbnV0ZTo5LGhvdXI6NixkYXk6M30sZj1cIm1pbGxpc2Vjb25kXCI7Zm9yKG0gaW4gSil7aWYoZD09PUoud2VlayYmK2guZGF0ZUZvcm1hdChcIiV3XCIsYyk9PT1iJiZcIjAwOjAwOjAwLjAwMFwiPT09Zy5zdWJzdHIoNikpe3ZhciBtPVwid2Vla1wiO2JyZWFrfWlmKEpbbV0+ZCl7bT1mO2JyZWFrfWlmKGVbbV0mJmcuc3Vic3RyKGVbbV0pIT09XCIwMS0wMSAwMDowMDowMC4wMDBcIi5zdWJzdHIoZVttXSkpYnJlYWs7XG5cIndlZWtcIiE9PW0mJihmPW0pfWlmKG0pdmFyIGw9aC5yZXNvbHZlRFRMRm9ybWF0KGFbbV0pLm1haW47cmV0dXJuIGx9O2UucHJvdG90eXBlLmdldExhYmVsPWZ1bmN0aW9uKCl7dmFyIGQ9dGhpcyxjPXRoaXMuY2hhcnQucmVuZGVyZXIsZz10aGlzLmNoYXJ0LnN0eWxlZE1vZGUsYT10aGlzLm9wdGlvbnMsaD1cInRvb2x0aXBcIisoeChhLmNsYXNzTmFtZSk/XCIgXCIrYS5jbGFzc05hbWU6XCJcIiksZT1hLnN0eWxlJiZhLnN0eWxlLnBvaW50ZXJFdmVudHN8fCghdGhpcy5mb2xsb3dQb2ludGVyJiZhLnN0aWNrT25Db250YWN0P1wiYXV0b1wiOlwibm9uZVwiKSxmLHk9ZnVuY3Rpb24oKXtkLmluQ29udGFjdD0hMH0sbD1mdW5jdGlvbigpe3ZhciBhPWQuY2hhcnQuaG92ZXJTZXJpZXM7ZC5pbkNvbnRhY3Q9ITE7aWYoYSYmYS5vbk1vdXNlT3V0KWEub25Nb3VzZU91dCgpfTtpZighdGhpcy5sYWJlbCl7aWYodGhpcy5vdXRzaWRlKXt2YXIgaz10aGlzLmNoYXJ0Lm9wdGlvbnMuY2hhcnQuc3R5bGU7dGhpcy5jb250YWluZXI9XG5mPWIuZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7Zi5jbGFzc05hbWU9XCJoaWdoY2hhcnRzLXRvb2x0aXAtY29udGFpbmVyXCI7QihmLHtwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOlwiMXB4XCIscG9pbnRlckV2ZW50czplLHpJbmRleDpNYXRoLm1heCh0aGlzLm9wdGlvbnMuc3R5bGUmJnRoaXMub3B0aW9ucy5zdHlsZS56SW5kZXh8fDAsKGsmJmsuekluZGV4fHwwKSszKX0pO2IuZG9jLmJvZHkuYXBwZW5kQ2hpbGQoZik7dGhpcy5yZW5kZXJlcj1jPW5ldyBiLlJlbmRlcmVyKGYsMCwwLGssdm9pZCAwLHZvaWQgMCxjLnN0eWxlZE1vZGUpfXRoaXMuc3BsaXQ/dGhpcy5sYWJlbD1jLmcoaCk6KHRoaXMubGFiZWw9Yy5sYWJlbChcIlwiLDAsMCxhLnNoYXBlfHxcImNhbGxvdXRcIixudWxsLG51bGwsYS51c2VIVE1MLG51bGwsaCkuYXR0cih7cGFkZGluZzphLnBhZGRpbmcscjphLmJvcmRlclJhZGl1c30pLGd8fHRoaXMubGFiZWwuYXR0cih7ZmlsbDphLmJhY2tncm91bmRDb2xvcixcInN0cm9rZS13aWR0aFwiOmEuYm9yZGVyV2lkdGh9KS5jc3MoYS5zdHlsZSkuY3NzKHtwb2ludGVyRXZlbnRzOmV9KS5zaGFkb3coYS5zaGFkb3cpKTtcbmcmJih0aGlzLmFwcGx5RmlsdGVyKCksdGhpcy5sYWJlbC5hZGRDbGFzcyhcImhpZ2hjaGFydHMtdG9vbHRpcC1cIit0aGlzLmNoYXJ0LmluZGV4KSk7aWYoZC5vdXRzaWRlJiYhZC5zcGxpdCl7dmFyIG49dGhpcy5sYWJlbCxxPW4ueFNldHRlcix1PW4ueVNldHRlcjtuLnhTZXR0ZXI9ZnVuY3Rpb24oYSl7cS5jYWxsKG4sZC5kaXN0YW5jZSk7Zi5zdHlsZS5sZWZ0PWErXCJweFwifTtuLnlTZXR0ZXI9ZnVuY3Rpb24oYSl7dS5jYWxsKG4sZC5kaXN0YW5jZSk7Zi5zdHlsZS50b3A9YStcInB4XCJ9fXRoaXMubGFiZWwub24oXCJtb3VzZWVudGVyXCIseSkub24oXCJtb3VzZWxlYXZlXCIsbCkuYXR0cih7ekluZGV4Ojh9KS5hZGQoKX1yZXR1cm4gdGhpcy5sYWJlbH07ZS5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oZCxjLGIpe3ZhciBhPXRoaXMuY2hhcnQsaD10aGlzLmRpc3RhbmNlLGc9e30sZT1hLmludmVydGVkJiZiLmh8fDAsZixtPXRoaXMub3V0c2lkZSxsPW0/Ry5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgtXG4yKmg6YS5jaGFydFdpZHRoLGs9bT9NYXRoLm1heChHLmJvZHkuc2Nyb2xsSGVpZ2h0LEcuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCxHLmJvZHkub2Zmc2V0SGVpZ2h0LEcuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEhlaWdodCxHLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpOmEuY2hhcnRIZWlnaHQsbj1hLnBvaW50ZXIuZ2V0Q2hhcnRQb3NpdGlvbigpLHE9ZnVuY3Rpb24oZyl7dmFyIGU9XCJ4XCI9PT1nO3JldHVybltnLGU/bDprLGU/ZDpjXS5jb25jYXQobT9bZT9kKm4uc2NhbGVYOmMqbi5zY2FsZVksZT9uLmxlZnQtaCsoYi5wbG90WCthLnBsb3RMZWZ0KSpuLnNjYWxlWDpuLnRvcC1oKyhiLnBsb3RZK2EucGxvdFRvcCkqbi5zY2FsZVksMCxlP2w6a106W2U/ZDpjLGU/Yi5wbG90WCthLnBsb3RMZWZ0OmIucGxvdFkrYS5wbG90VG9wLGU/YS5wbG90TGVmdDphLnBsb3RUb3AsZT9hLnBsb3RMZWZ0K2EucGxvdFdpZHRoOmEucGxvdFRvcCthLnBsb3RIZWlnaHRdKX0sdT1cbnEoXCJ5XCIpLHQ9cShcInhcIikscD0hdGhpcy5mb2xsb3dQb2ludGVyJiZOKGIudHRCZWxvdywhYS5pbnZlcnRlZD09PSEhYi5uZWdhdGl2ZSksdj1mdW5jdGlvbihhLGMsZCxiLHIsZixBKXt2YXIgeT1tP1wieVwiPT09YT9oKm4uc2NhbGVZOmgqbi5zY2FsZVg6aCxsPShkLWIpLzIsRj1iPHItaCxrPXIraCtiPGMsSz1yLXktZCtsO3I9cit5LWw7aWYocCYmaylnW2FdPXI7ZWxzZSBpZighcCYmRilnW2FdPUs7ZWxzZSBpZihGKWdbYV09TWF0aC5taW4oQS1iLDA+Sy1lP0s6Sy1lKTtlbHNlIGlmKGspZ1thXT1NYXRoLm1heChmLHIrZStkPmM/cjpyK2UpO2Vsc2UgcmV0dXJuITF9LHc9ZnVuY3Rpb24oYSxjLGQsYixlKXt2YXIgcjtlPGh8fGU+Yy1oP3I9ITE6Z1thXT1lPGQvMj8xOmU+Yy1iLzI/Yy1iLTI6ZS1kLzI7cmV0dXJuIHJ9LEU9ZnVuY3Rpb24oYSl7dmFyIGM9dTt1PXQ7dD1jO2Y9YX0sRj1mdW5jdGlvbigpeyExIT09di5hcHBseSgwLHUpPyExIT09dy5hcHBseSgwLHQpfHxmfHwoRSghMCksXG5GKCkpOmY/Zy54PWcueT0wOihFKCEwKSxGKCkpfTsoYS5pbnZlcnRlZHx8MTx0aGlzLmxlbikmJkUoKTtGKCk7cmV0dXJuIGd9O2UucHJvdG90eXBlLmdldFhEYXRlRm9ybWF0PWZ1bmN0aW9uKGQsYyxiKXtjPWMuZGF0ZVRpbWVMYWJlbEZvcm1hdHM7dmFyIGE9YiYmYi5jbG9zZXN0UG9pbnRSYW5nZTtyZXR1cm4oYT90aGlzLmdldERhdGVGb3JtYXQoYSxkLngsYi5vcHRpb25zLnN0YXJ0T2ZXZWVrLGMpOmMuZGF5KXx8Yy55ZWFyfTtlLnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKGQpe3ZhciBjPXRoaXM7ei5jbGVhclRpbWVvdXQodGhpcy5oaWRlVGltZXIpO2Q9TihkLHRoaXMub3B0aW9ucy5oaWRlRGVsYXksNTAwKTt0aGlzLmlzSGlkZGVufHwodGhpcy5oaWRlVGltZXI9bihmdW5jdGlvbigpe2MuZ2V0TGFiZWwoKS5mYWRlT3V0KGQ/dm9pZCAwOmQpO2MuaXNIaWRkZW49ITB9LGQpKX07ZS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihkLGMpe3RoaXMuY2hhcnQ9ZDt0aGlzLm9wdGlvbnM9XG5jO3RoaXMuY3Jvc3NoYWlycz1bXTt0aGlzLm5vdz17eDowLHk6MH07dGhpcy5pc0hpZGRlbj0hMDt0aGlzLnNwbGl0PWMuc3BsaXQmJiFkLmludmVydGVkJiYhZC5wb2xhcjt0aGlzLnNoYXJlZD1jLnNoYXJlZHx8dGhpcy5zcGxpdDt0aGlzLm91dHNpZGU9TihjLm91dHNpZGUsISghZC5zY3JvbGxhYmxlUGl4ZWxzWCYmIWQuc2Nyb2xsYWJsZVBpeGVsc1kpKX07ZS5wcm90b3R5cGUuaXNTdGlja3lPbkNvbnRhY3Q9ZnVuY3Rpb24oKXtyZXR1cm4hKHRoaXMuZm9sbG93UG9pbnRlcnx8IXRoaXMub3B0aW9ucy5zdGlja09uQ29udGFjdHx8IXRoaXMuaW5Db250YWN0KX07ZS5wcm90b3R5cGUubW92ZT1mdW5jdGlvbihkLGMsYixhKXt2YXIgaD10aGlzLGc9aC5ub3csZT0hMSE9PWgub3B0aW9ucy5hbmltYXRpb24mJiFoLmlzSGlkZGVuJiYoMTxNYXRoLmFicyhkLWcueCl8fDE8TWF0aC5hYnMoYy1nLnkpKSxmPWguZm9sbG93UG9pbnRlcnx8MTxoLmxlbjt2KGcse3g6ZT8oMipnLngrZCkvXG4zOmQseTplPyhnLnkrYykvMjpjLGFuY2hvclg6Zj92b2lkIDA6ZT8oMipnLmFuY2hvclgrYikvMzpiLGFuY2hvclk6Zj92b2lkIDA6ZT8oZy5hbmNob3JZK2EpLzI6YX0pO2guZ2V0TGFiZWwoKS5hdHRyKGcpO2guZHJhd1RyYWNrZXIoKTtlJiYoei5jbGVhclRpbWVvdXQodGhpcy50b29sdGlwVGltZW91dCksdGhpcy50b29sdGlwVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aCYmaC5tb3ZlKGQsYyxiLGEpfSwzMikpfTtlLnByb3RvdHlwZS5yZWZyZXNoPWZ1bmN0aW9uKGIsYyl7dmFyIGc9dGhpcy5jaGFydCxhPXRoaXMub3B0aW9ucyxoPXUoYiksZT1oWzBdLG09e30seT1bXSxsPWEuZm9ybWF0dGVyfHx0aGlzLmRlZmF1bHRGb3JtYXR0ZXI7bT10aGlzLnNoYXJlZDt2YXIgaz1nLnN0eWxlZE1vZGU7aWYoYS5lbmFibGVkKXt6LmNsZWFyVGltZW91dCh0aGlzLmhpZGVUaW1lcik7dGhpcy5mb2xsb3dQb2ludGVyPSF0aGlzLnNwbGl0JiZlLnNlcmllcy50b29sdGlwT3B0aW9ucy5mb2xsb3dQb2ludGVyO1xudmFyIG49dGhpcy5nZXRBbmNob3IoYixjKTt2YXIgcT1uWzBdO3ZhciB2PW5bMV07IW18fCFkKGIpJiZiLnNlcmllcyYmYi5zZXJpZXMubm9TaGFyZWRUb29sdGlwP209ZS5nZXRMYWJlbENvbmZpZygpOihnLnBvaW50ZXIuYXBwbHlJbmFjdGl2ZVN0YXRlKGgpLGguZm9yRWFjaChmdW5jdGlvbihhKXthLnNldFN0YXRlKFwiaG92ZXJcIik7eS5wdXNoKGEuZ2V0TGFiZWxDb25maWcoKSl9KSxtPXt4OmUuY2F0ZWdvcnkseTplLnl9LG0ucG9pbnRzPXkpO3RoaXMubGVuPXkubGVuZ3RoO2I9bC5jYWxsKG0sdGhpcyk7bD1lLnNlcmllczt0aGlzLmRpc3RhbmNlPU4obC50b29sdGlwT3B0aW9ucy5kaXN0YW5jZSwxNik7aWYoITE9PT1iKXRoaXMuaGlkZSgpO2Vsc2V7aWYodGhpcy5zcGxpdCl0aGlzLnJlbmRlclNwbGl0KGIsaCk7ZWxzZSBpZihoPXEsbT12LGMmJmcucG9pbnRlci5pc0RpcmVjdFRvdWNoJiYoaD1jLmNoYXJ0WC1nLnBsb3RMZWZ0LG09Yy5jaGFydFktZy5wbG90VG9wKSxnLnBvbGFyfHxcbiExPT09bC5vcHRpb25zLmNsaXB8fGwuc2hvdWxkU2hvd1Rvb2x0aXAoaCxtKSljPXRoaXMuZ2V0TGFiZWwoKSxhLnN0eWxlLndpZHRoJiYha3x8Yy5jc3Moe3dpZHRoOnRoaXMuY2hhcnQuc3BhY2luZ0JveC53aWR0aCtcInB4XCJ9KSxjLmF0dHIoe3RleHQ6YiYmYi5qb2luP2Iuam9pbihcIlwiKTpifSksYy5yZW1vdmVDbGFzcygvaGlnaGNoYXJ0cy1jb2xvci1bXFxkXSsvZykuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWNvbG9yLVwiK04oZS5jb2xvckluZGV4LGwuY29sb3JJbmRleCkpLGt8fGMuYXR0cih7c3Ryb2tlOmEuYm9yZGVyQ29sb3J8fGUuY29sb3J8fGwuY29sb3J8fEkubmV1dHJhbENvbG9yNjB9KSx0aGlzLnVwZGF0ZVBvc2l0aW9uKHtwbG90WDpxLHBsb3RZOnYsbmVnYXRpdmU6ZS5uZWdhdGl2ZSx0dEJlbG93OmUudHRCZWxvdyxoOm5bMl18fDB9KTtlbHNle3RoaXMuaGlkZSgpO3JldHVybn10aGlzLmlzSGlkZGVuJiZ0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmF0dHIoe29wYWNpdHk6MX0pLnNob3coKTtcbnRoaXMuaXNIaWRkZW49ITF9Zih0aGlzLFwicmVmcmVzaFwiKX19O2UucHJvdG90eXBlLnJlbmRlclNwbGl0PWZ1bmN0aW9uKGQsYyl7ZnVuY3Rpb24gZyhjLGQsYixnLGgpe3ZvaWQgMD09PWgmJihoPSEwKTtiPyhkPVg/MDpiYSxjPUMoYy1nLzIsUy5sZWZ0LFMucmlnaHQtZy0oYS5vdXRzaWRlP1U6MCkpKTooZC09QixjPWg/Yy1nLUo6YytKLGM9QyhjLGg/YzpTLmxlZnQsUy5yaWdodCkpO3JldHVybnt4OmMseTpkfX12YXIgYT10aGlzLGg9YS5jaGFydCxlPWEuY2hhcnQsZj1lLmNoYXJ0V2lkdGgsbT1lLmNoYXJ0SGVpZ2h0LGw9ZS5wbG90SGVpZ2h0LG49ZS5wbG90TGVmdCxxPWUucGxvdFRvcCx1PWUucG9pbnRlcix3PWUuc2Nyb2xsYWJsZVBpeGVsc1k7dz12b2lkIDA9PT13PzA6dzt2YXIgRT1lLnNjcm9sbGFibGVQaXhlbHNYLHQ9ZS5zY3JvbGxpbmdDb250YWluZXI7dD12b2lkIDA9PT10P3tzY3JvbGxMZWZ0OjAsc2Nyb2xsVG9wOjB9OnQ7dmFyIHA9dC5zY3JvbGxMZWZ0O3Q9XG50LnNjcm9sbFRvcDt2YXIgeD1lLnN0eWxlZE1vZGUsSj1hLmRpc3RhbmNlLEQ9YS5vcHRpb25zLEY9YS5vcHRpb25zLnBvc2l0aW9uZXIsUz1hLm91dHNpZGUmJlwibnVtYmVyXCIhPT10eXBlb2YgRT9HLmRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTp7bGVmdDpwLHJpZ2h0OnArZix0b3A6dCxib3R0b206dCttfSxLPWEuZ2V0TGFiZWwoKSxUPXRoaXMucmVuZGVyZXJ8fGgucmVuZGVyZXIsWD0hKCFoLnhBeGlzWzBdfHwhaC54QXhpc1swXS5vcHBvc2l0ZSk7aD11LmdldENoYXJ0UG9zaXRpb24oKTt2YXIgVT1oLmxlZnQ7aD1oLnRvcDt2YXIgQj1xK3Qsej0wLGJhPWwtdztrKGQpJiYoZD1bITEsZF0pO2Q9ZC5zbGljZSgwLGMubGVuZ3RoKzEpLnJlZHVjZShmdW5jdGlvbihkLGIsaCl7aWYoITEhPT1iJiZcIlwiIT09Yil7aD1jW2gtMV18fHtpc0hlYWRlcjohMCxwbG90WDpjWzBdLnBsb3RYLHBsb3RZOmwsc2VyaWVzOnt9fTt2YXIgZT1oLmlzSGVhZGVyLHI9ZT9hOlxuaC5zZXJpZXM7Yj1iLnRvU3RyaW5nKCk7dmFyIGY9ci50dCxtPWguaXNIZWFkZXI7dmFyIEE9aC5zZXJpZXM7dmFyIHk9XCJoaWdoY2hhcnRzLWNvbG9yLVwiK04oaC5jb2xvckluZGV4LEEuY29sb3JJbmRleCxcIm5vbmVcIik7Znx8KGY9e3BhZGRpbmc6RC5wYWRkaW5nLHI6RC5ib3JkZXJSYWRpdXN9LHh8fChmLmZpbGw9RC5iYWNrZ3JvdW5kQ29sb3IsZltcInN0cm9rZS13aWR0aFwiXT1ELmJvcmRlcldpZHRoKSxmPVQubGFiZWwoXCJcIiwwLDAsRFttP1wiaGVhZGVyU2hhcGVcIjpcInNoYXBlXCJdfHxcImNhbGxvdXRcIix2b2lkIDAsdm9pZCAwLEQudXNlSFRNTCkuYWRkQ2xhc3MoKG0/XCJoaWdoY2hhcnRzLXRvb2x0aXAtaGVhZGVyIFwiOlwiXCIpK1wiaGlnaGNoYXJ0cy10b29sdGlwLWJveCBcIit5KS5hdHRyKGYpLmFkZChLKSk7Zi5pc0FjdGl2ZT0hMDtmLmF0dHIoe3RleHQ6Yn0pO3h8fGYuY3NzKEQuc3R5bGUpLnNoYWRvdyhELnNoYWRvdykuYXR0cih7c3Ryb2tlOkQuYm9yZGVyQ29sb3J8fGguY29sb3J8fFxuQS5jb2xvcnx8SS5uZXV0cmFsQ29sb3I4MH0pO3I9ci50dD1mO209ci5nZXRCQm94KCk7Yj1tLndpZHRoK3Iuc3Ryb2tlV2lkdGgoKTtlJiYoej1tLmhlaWdodCxiYSs9eixYJiYoQi09eikpO0E9aC5wbG90WDtBPXZvaWQgMD09PUE/MDpBO3k9aC5wbG90WTt5PXZvaWQgMD09PXk/MDp5O2Y9aC5zZXJpZXM7aWYoaC5pc0hlYWRlcil7QT1uK0E7dmFyIGs9cStsLzJ9ZWxzZXt2YXIgcD1mLnhBeGlzLHQ9Zi55QXhpcztBPXAucG9zK0MoQSwtSixwLmxlbitKKTtmLnNob3VsZFNob3dUb29sdGlwKDAsdC5wb3MtcSt5LHtpZ25vcmVYOiEwfSkmJihrPXQucG9zK3kpfUE9QyhBLFMubGVmdC1KLFMucmlnaHQrSik7XCJudW1iZXJcIj09PXR5cGVvZiBrPyhtPW0uaGVpZ2h0KzEseT1GP0YuY2FsbChhLGIsbSxoKTpnKEEsayxlLGIpLGQucHVzaCh7YWxpZ246Rj8wOnZvaWQgMCxhbmNob3JYOkEsYW5jaG9yWTprLGJveFdpZHRoOmIscG9pbnQ6aCxyYW5rOk4oeS5yYW5rLGU/MTowKSxzaXplOm0sXG50YXJnZXQ6eS55LHR0OnIseDp5Lnh9KSk6ci5pc0FjdGl2ZT0hMX1yZXR1cm4gZH0sW10pOyFGJiZkLnNvbWUoZnVuY3Rpb24oYyl7dmFyIGQ9KGEub3V0c2lkZT9VOjApK2MuYW5jaG9yWDtyZXR1cm4gZDxTLmxlZnQmJmQrYy5ib3hXaWR0aDxTLnJpZ2h0PyEwOmQ8VS1TLmxlZnQrYy5ib3hXaWR0aCYmUy5yaWdodC1kPmR9KSYmKGQ9ZC5tYXAoZnVuY3Rpb24oYSl7dmFyIGM9ZyhhLmFuY2hvclgsYS5hbmNob3JZLGEucG9pbnQuaXNIZWFkZXIsYS5ib3hXaWR0aCwhMSk7cmV0dXJuIHYoYSx7dGFyZ2V0OmMueSx4OmMueH0pfSkpO2EuY2xlYW5TcGxpdCgpO2IuZGlzdHJpYnV0ZShkLGJhKTt2YXIgSD1VLGNhPVU7ZC5mb3JFYWNoKGZ1bmN0aW9uKGMpe3ZhciBkPWMueCxiPWMuYm94V2lkdGg7Yz1jLmlzSGVhZGVyO2N8fChhLm91dHNpZGUmJlUrZDxIJiYoSD1VK2QpLCFjJiZhLm91dHNpZGUmJkgrYj5jYSYmKGNhPVUrZCkpfSk7ZC5mb3JFYWNoKGZ1bmN0aW9uKGMpe3ZhciBkPWMueCxcbmI9Yy5hbmNob3JYLGg9Yy5wb3MsZz1jLnBvaW50LmlzSGVhZGVyO2g9e3Zpc2liaWxpdHk6XCJ1bmRlZmluZWRcIj09PXR5cGVvZiBoP1wiaGlkZGVuXCI6XCJpbmhlcml0XCIseDpkLHk6aCtCLGFuY2hvclg6YixhbmNob3JZOmMuYW5jaG9yWX07aWYoYS5vdXRzaWRlJiZkPGIpe3ZhciBlPVUtSDswPGUmJihnfHwoaC54PWQrZSxoLmFuY2hvclg9YitlKSxnJiYoaC54PShjYS1IKS8yLGguYW5jaG9yWD1iK2UpKX1jLnR0LmF0dHIoaCl9KTtkPWEuY29udGFpbmVyO3c9YS5yZW5kZXJlcjthLm91dHNpZGUmJmQmJncmJihlPUsuZ2V0QkJveCgpLHcuc2V0U2l6ZShlLndpZHRoK2UueCxlLmhlaWdodCtlLnksITEpLGQuc3R5bGUubGVmdD1IK1wicHhcIixkLnN0eWxlLnRvcD1oK1wicHhcIil9O2UucHJvdG90eXBlLmRyYXdUcmFja2VyPWZ1bmN0aW9uKCl7aWYodGhpcy5mb2xsb3dQb2ludGVyfHwhdGhpcy5vcHRpb25zLnN0aWNrT25Db250YWN0KXRoaXMudHJhY2tlciYmdGhpcy50cmFja2VyLmRlc3Ryb3koKTtcbmVsc2V7dmFyIGQ9dGhpcy5jaGFydCxjPXRoaXMubGFiZWwsYj1kLmhvdmVyUG9pbnQ7aWYoYyYmYil7dmFyIGE9e3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH07Yj10aGlzLmdldEFuY2hvcihiKTt2YXIgaD1jLmdldEJCb3goKTtiWzBdKz1kLnBsb3RMZWZ0LWMudHJhbnNsYXRlWDtiWzFdKz1kLnBsb3RUb3AtYy50cmFuc2xhdGVZO2EueD1NYXRoLm1pbigwLGJbMF0pO2EueT1NYXRoLm1pbigwLGJbMV0pO2Eud2lkdGg9MD5iWzBdP01hdGgubWF4KE1hdGguYWJzKGJbMF0pLGgud2lkdGgtYlswXSk6TWF0aC5tYXgoTWF0aC5hYnMoYlswXSksaC53aWR0aCk7YS5oZWlnaHQ9MD5iWzFdP01hdGgubWF4KE1hdGguYWJzKGJbMV0pLGguaGVpZ2h0LU1hdGguYWJzKGJbMV0pKTpNYXRoLm1heChNYXRoLmFicyhiWzFdKSxoLmhlaWdodCk7dGhpcy50cmFja2VyP3RoaXMudHJhY2tlci5hdHRyKGEpOih0aGlzLnRyYWNrZXI9Yy5yZW5kZXJlci5yZWN0KGEpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy10cmFja2VyXCIpLmFkZChjKSxcbmQuc3R5bGVkTW9kZXx8dGhpcy50cmFja2VyLmF0dHIoe2ZpbGw6XCJyZ2JhKDAsMCwwLDApXCJ9KSl9fX07ZS5wcm90b3R5cGUuc3R5bGVkTW9kZUZvcm1hdD1mdW5jdGlvbihkKXtyZXR1cm4gZC5yZXBsYWNlKCdzdHlsZT1cImZvbnQtc2l6ZTogMTBweFwiJywnY2xhc3M9XCJoaWdoY2hhcnRzLWhlYWRlclwiJykucmVwbGFjZSgvc3R5bGU9XCJjb2xvcjp7KHBvaW50fHNlcmllcylcXC5jb2xvcn1cIi9nLCdjbGFzcz1cImhpZ2hjaGFydHMtY29sb3IteyQxLmNvbG9ySW5kZXh9XCInKX07ZS5wcm90b3R5cGUudG9vbHRpcEZvb3RlckhlYWRlckZvcm1hdHRlcj1mdW5jdGlvbihkLGMpe3ZhciBiPWM/XCJmb290ZXJcIjpcImhlYWRlclwiLGE9ZC5zZXJpZXMsaD1hLnRvb2x0aXBPcHRpb25zLGU9aC54RGF0ZUZvcm1hdCxtPWEueEF4aXMsbD1tJiZcImRhdGV0aW1lXCI9PT1tLm9wdGlvbnMudHlwZSYmcShkLmtleSksaz1oW2IrXCJGb3JtYXRcIl07Yz17aXNGb290ZXI6YyxsYWJlbENvbmZpZzpkfTtmKHRoaXMsXCJoZWFkZXJGb3JtYXR0ZXJcIixcbmMsZnVuY3Rpb24oYyl7bCYmIWUmJihlPXRoaXMuZ2V0WERhdGVGb3JtYXQoZCxoLG0pKTtsJiZlJiYoZC5wb2ludCYmZC5wb2ludC50b29sdGlwRGF0ZUtleXN8fFtcImtleVwiXSkuZm9yRWFjaChmdW5jdGlvbihhKXtrPWsucmVwbGFjZShcIntwb2ludC5cIithK1wifVwiLFwie3BvaW50LlwiK2ErXCI6XCIrZStcIn1cIil9KTthLmNoYXJ0LnN0eWxlZE1vZGUmJihrPXRoaXMuc3R5bGVkTW9kZUZvcm1hdChrKSk7Yy50ZXh0PUQoayx7cG9pbnQ6ZCxzZXJpZXM6YX0sdGhpcy5jaGFydCl9KTtyZXR1cm4gYy50ZXh0fTtlLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZCl7dGhpcy5kZXN0cm95KCk7bCghMCx0aGlzLmNoYXJ0Lm9wdGlvbnMudG9vbHRpcC51c2VyT3B0aW9ucyxkKTt0aGlzLmluaXQodGhpcy5jaGFydCxsKCEwLHRoaXMub3B0aW9ucyxkKSl9O2UucHJvdG90eXBlLnVwZGF0ZVBvc2l0aW9uPWZ1bmN0aW9uKGQpe3ZhciBjPXRoaXMuY2hhcnQsYj1jLnBvaW50ZXIsYT10aGlzLmdldExhYmVsKCksXG5oPWQucGxvdFgrYy5wbG90TGVmdDtjPWQucGxvdFkrYy5wbG90VG9wO2I9Yi5nZXRDaGFydFBvc2l0aW9uKCk7ZD0odGhpcy5vcHRpb25zLnBvc2l0aW9uZXJ8fHRoaXMuZ2V0UG9zaXRpb24pLmNhbGwodGhpcyxhLndpZHRoLGEuaGVpZ2h0LGQpO2lmKHRoaXMub3V0c2lkZSl7dmFyIGU9KHRoaXMub3B0aW9ucy5ib3JkZXJXaWR0aHx8MCkrMip0aGlzLmRpc3RhbmNlO3RoaXMucmVuZGVyZXIuc2V0U2l6ZShhLndpZHRoK2UsYS5oZWlnaHQrZSwhMSk7aWYoMSE9PWIuc2NhbGVYfHwxIT09Yi5zY2FsZVkpQih0aGlzLmNvbnRhaW5lcix7dHJhbnNmb3JtOlwic2NhbGUoXCIrYi5zY2FsZVgrXCIsIFwiK2Iuc2NhbGVZK1wiKVwifSksaCo9Yi5zY2FsZVgsYyo9Yi5zY2FsZVk7aCs9Yi5sZWZ0LWQueDtjKz1iLnRvcC1kLnl9dGhpcy5tb3ZlKE1hdGgucm91bmQoZC54KSxNYXRoLnJvdW5kKGQueXx8MCksaCxjKX07cmV0dXJuIGV9KCk7Yi5Ub29sdGlwPWU7cmV0dXJuIGIuVG9vbHRpcH0pO08oZSxcblwiQ29yZS9Qb2ludGVyLmpzXCIsW2VbXCJDb3JlL0NvbG9yL0NvbG9yLmpzXCJdLGVbXCJDb3JlL0dsb2JhbHMuanNcIl0sZVtcIkNvcmUvQ29sb3IvUGFsZXR0ZS5qc1wiXSxlW1wiQ29yZS9Ub29sdGlwLmpzXCJdLGVbXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oZSxiLEkseixIKXt2YXIgRD1lLnBhcnNlLEM9Yi5jaGFydHMsQj1iLm5vb3AseD1ILmFkZEV2ZW50LHc9SC5hdHRyLHY9SC5jc3MsZj1ILmRlZmluZWQsZD1ILmV4dGVuZCxxPUguZmluZCxrPUguZmlyZUV2ZW50LGw9SC5pc051bWJlcixOPUguaXNPYmplY3QsdT1ILm9iamVjdEVhY2gsbj1ILm9mZnNldCxKPUgucGljayxFPUguc3BsYXQ7XCJcIjtlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShjLGQpe3RoaXMubGFzdFZhbGlkVG91Y2g9e307dGhpcy5waW5jaERvd249W107dGhpcy5ydW5DaGFydENsaWNrPSExO3RoaXMuZXZlbnRzVG9VbmJpbmQ9W107dGhpcy5jaGFydD1jO3RoaXMuaGFzRHJhZ2dlZD0hMTt0aGlzLm9wdGlvbnM9XG5kO3RoaXMuaW5pdChjLGQpfWUucHJvdG90eXBlLmFwcGx5SW5hY3RpdmVTdGF0ZT1mdW5jdGlvbihjKXt2YXIgZD1bXSxhOyhjfHxbXSkuZm9yRWFjaChmdW5jdGlvbihjKXthPWMuc2VyaWVzO2QucHVzaChhKTthLmxpbmtlZFBhcmVudCYmZC5wdXNoKGEubGlua2VkUGFyZW50KTthLmxpbmtlZFNlcmllcyYmKGQ9ZC5jb25jYXQoYS5saW5rZWRTZXJpZXMpKTthLm5hdmlnYXRvclNlcmllcyYmZC5wdXNoKGEubmF2aWdhdG9yU2VyaWVzKX0pO3RoaXMuY2hhcnQuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oYSl7LTE9PT1kLmluZGV4T2YoYSk/YS5zZXRTdGF0ZShcImluYWN0aXZlXCIsITApOmEub3B0aW9ucy5pbmFjdGl2ZU90aGVyUG9pbnRzJiZhLnNldEFsbFBvaW50c1RvU3RhdGUoXCJpbmFjdGl2ZVwiKX0pfTtlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIGM9dGhpczt0aGlzLmV2ZW50c1RvVW5iaW5kLmZvckVhY2goZnVuY3Rpb24oYyl7cmV0dXJuIGMoKX0pO3RoaXMuZXZlbnRzVG9VbmJpbmQ9XG5bXTtiLmNoYXJ0Q291bnR8fChiLnVuYmluZERvY3VtZW50TW91c2VVcCYmKGIudW5iaW5kRG9jdW1lbnRNb3VzZVVwPWIudW5iaW5kRG9jdW1lbnRNb3VzZVVwKCkpLGIudW5iaW5kRG9jdW1lbnRUb3VjaEVuZCYmKGIudW5iaW5kRG9jdW1lbnRUb3VjaEVuZD1iLnVuYmluZERvY3VtZW50VG91Y2hFbmQoKSkpO2NsZWFySW50ZXJ2YWwoYy50b29sdGlwVGltZW91dCk7dShjLGZ1bmN0aW9uKGQsYSl7Y1thXT12b2lkIDB9KX07ZS5wcm90b3R5cGUuZHJhZz1mdW5jdGlvbihjKXt2YXIgZD10aGlzLmNoYXJ0LGE9ZC5vcHRpb25zLmNoYXJ0LGI9Yy5jaGFydFgsZT1jLmNoYXJ0WSxmPXRoaXMuem9vbUhvcixsPXRoaXMuem9vbVZlcnQsbT1kLnBsb3RMZWZ0LGs9ZC5wbG90VG9wLG49ZC5wbG90V2lkdGgscT1kLnBsb3RIZWlnaHQsdT10aGlzLnNlbGVjdGlvbk1hcmtlcix2PXRoaXMubW91c2VEb3duWHx8MCx0PXRoaXMubW91c2VEb3duWXx8MCxwPU4oYS5wYW5uaW5nKT9hLnBhbm5pbmcmJlxuYS5wYW5uaW5nLmVuYWJsZWQ6YS5wYW5uaW5nLHc9YS5wYW5LZXkmJmNbYS5wYW5LZXkrXCJLZXlcIl07aWYoIXV8fCF1LnRvdWNoKWlmKGI8bT9iPW06Yj5tK24mJihiPW0rbiksZTxrP2U9azplPmsrcSYmKGU9aytxKSx0aGlzLmhhc0RyYWdnZWQ9TWF0aC5zcXJ0KE1hdGgucG93KHYtYiwyKStNYXRoLnBvdyh0LWUsMikpLDEwPHRoaXMuaGFzRHJhZ2dlZCl7dmFyIEU9ZC5pc0luc2lkZVBsb3Qodi1tLHQtayx7dmlzaWJsZVBsb3RPbmx5OiEwfSk7ZC5oYXNDYXJ0ZXNpYW5TZXJpZXMmJih0aGlzLnpvb21YfHx0aGlzLnpvb21ZKSYmRSYmIXcmJiF1JiYodGhpcy5zZWxlY3Rpb25NYXJrZXI9dT1kLnJlbmRlcmVyLnJlY3QobSxrLGY/MTpuLGw/MTpxLDApLmF0dHIoe1wiY2xhc3NcIjpcImhpZ2hjaGFydHMtc2VsZWN0aW9uLW1hcmtlclwiLHpJbmRleDo3fSkuYWRkKCksZC5zdHlsZWRNb2RlfHx1LmF0dHIoe2ZpbGw6YS5zZWxlY3Rpb25NYXJrZXJGaWxsfHxEKEkuaGlnaGxpZ2h0Q29sb3I4MCkuc2V0T3BhY2l0eSguMjUpLmdldCgpfSkpO1xudSYmZiYmKGItPXYsdS5hdHRyKHt3aWR0aDpNYXRoLmFicyhiKSx4OigwPGI/MDpiKSt2fSkpO3UmJmwmJihiPWUtdCx1LmF0dHIoe2hlaWdodDpNYXRoLmFicyhiKSx5OigwPGI/MDpiKSt0fSkpO0UmJiF1JiZwJiZkLnBhbihjLGEucGFubmluZyl9fTtlLnByb3RvdHlwZS5kcmFnU3RhcnQ9ZnVuY3Rpb24oYyl7dmFyIGQ9dGhpcy5jaGFydDtkLm1vdXNlSXNEb3duPWMudHlwZTtkLmNhbmNlbENsaWNrPSExO2QubW91c2VEb3duWD10aGlzLm1vdXNlRG93blg9Yy5jaGFydFg7ZC5tb3VzZURvd25ZPXRoaXMubW91c2VEb3duWT1jLmNoYXJ0WX07ZS5wcm90b3R5cGUuZHJvcD1mdW5jdGlvbihjKXt2YXIgYj10aGlzLGE9dGhpcy5jaGFydCxoPXRoaXMuaGFzUGluY2hlZDtpZih0aGlzLnNlbGVjdGlvbk1hcmtlcil7dmFyIGU9e29yaWdpbmFsRXZlbnQ6Yyx4QXhpczpbXSx5QXhpczpbXX0sQT10aGlzLnNlbGVjdGlvbk1hcmtlcixtPUEuYXR0cj9BLmF0dHIoXCJ4XCIpOkEueCxuPUEuYXR0cj9cbkEuYXR0cihcInlcIik6QS55LHE9QS5hdHRyP0EuYXR0cihcIndpZHRoXCIpOkEud2lkdGgsdT1BLmF0dHI/QS5hdHRyKFwiaGVpZ2h0XCIpOkEuaGVpZ2h0LHc7aWYodGhpcy5oYXNEcmFnZ2VkfHxoKWEuYXhlcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2lmKGEuem9vbUVuYWJsZWQmJmYoYS5taW4pJiYoaHx8Ylt7eEF4aXM6XCJ6b29tWFwiLHlBeGlzOlwiem9vbVlcIn1bYS5jb2xsXV0pJiZsKG0pJiZsKG4pKXt2YXIgZD1hLmhvcml6LGc9XCJ0b3VjaGVuZFwiPT09Yy50eXBlP2EubWluUGl4ZWxQYWRkaW5nOjAscj1hLnRvVmFsdWUoKGQ/bTpuKStnKTtkPWEudG9WYWx1ZSgoZD9tK3E6bit1KS1nKTtlW2EuY29sbF0ucHVzaCh7YXhpczphLG1pbjpNYXRoLm1pbihyLGQpLG1heDpNYXRoLm1heChyLGQpfSk7dz0hMH19KSx3JiZrKGEsXCJzZWxlY3Rpb25cIixlLGZ1bmN0aW9uKGMpe2Euem9vbShkKGMsaD97YW5pbWF0aW9uOiExfTpudWxsKSl9KTtsKGEuaW5kZXgpJiYodGhpcy5zZWxlY3Rpb25NYXJrZXI9XG50aGlzLnNlbGVjdGlvbk1hcmtlci5kZXN0cm95KCkpO2gmJnRoaXMuc2NhbGVHcm91cHMoKX1hJiZsKGEuaW5kZXgpJiYodihhLmNvbnRhaW5lcix7Y3Vyc29yOmEuX2N1cnNvcn0pLGEuY2FuY2VsQ2xpY2s9MTA8dGhpcy5oYXNEcmFnZ2VkLGEubW91c2VJc0Rvd249dGhpcy5oYXNEcmFnZ2VkPXRoaXMuaGFzUGluY2hlZD0hMSx0aGlzLnBpbmNoRG93bj1bXSl9O2UucHJvdG90eXBlLmZpbmROZWFyZXN0S0RQb2ludD1mdW5jdGlvbihjLGQsYSl7dmFyIGI9dGhpcy5jaGFydCxnPWIuaG92ZXJQb2ludDtiPWIudG9vbHRpcDtpZihnJiZiJiZiLmlzU3RpY2t5T25Db250YWN0KCkpcmV0dXJuIGc7dmFyIGU7Yy5mb3JFYWNoKGZ1bmN0aW9uKGMpe3ZhciBiPSEoYy5ub1NoYXJlZFRvb2x0aXAmJmQpJiYwPmMub3B0aW9ucy5maW5kTmVhcmVzdFBvaW50QnkuaW5kZXhPZihcInlcIik7Yz1jLnNlYXJjaFBvaW50KGEsYik7aWYoKGI9TihjLCEwKSYmYy5zZXJpZXMpJiYhKGI9IU4oZSwhMCkpKXtiPVxuZS5kaXN0WC1jLmRpc3RYO3ZhciBoPWUuZGlzdC1jLmRpc3QsZz0oYy5zZXJpZXMuZ3JvdXAmJmMuc2VyaWVzLmdyb3VwLnpJbmRleCktKGUuc2VyaWVzLmdyb3VwJiZlLnNlcmllcy5ncm91cC56SW5kZXgpO2I9MDwoMCE9PWImJmQ/YjowIT09aD9oOjAhPT1nP2c6ZS5zZXJpZXMuaW5kZXg+Yy5zZXJpZXMuaW5kZXg/LTE6MSl9YiYmKGU9Yyl9KTtyZXR1cm4gZX07ZS5wcm90b3R5cGUuZ2V0Q2hhcnRDb29yZGluYXRlc0Zyb21Qb2ludD1mdW5jdGlvbihjLGQpe3ZhciBhPWMuc2VyaWVzLGI9YS54QXhpczthPWEueUF4aXM7dmFyIGc9Yy5zaGFwZUFyZ3M7aWYoYiYmYSl7dmFyIGU9SihjLmNsaWVudFgsYy5wbG90WCksZj1jLnBsb3RZfHwwO2MuaXNOb2RlJiZnJiZsKGcueCkmJmwoZy55KSYmKGU9Zy54LGY9Zy55KTtyZXR1cm4gZD97Y2hhcnRYOmEubGVuK2EucG9zLWYsY2hhcnRZOmIubGVuK2IucG9zLWV9OntjaGFydFg6ZStiLnBvcyxjaGFydFk6ZithLnBvc319aWYoZyYmZy54JiZcbmcueSlyZXR1cm57Y2hhcnRYOmcueCxjaGFydFk6Zy55fX07ZS5wcm90b3R5cGUuZ2V0Q2hhcnRQb3NpdGlvbj1mdW5jdGlvbigpe2lmKHRoaXMuY2hhcnRQb3NpdGlvbilyZXR1cm4gdGhpcy5jaGFydFBvc2l0aW9uO3ZhciBjPXRoaXMuY2hhcnQuY29udGFpbmVyLGQ9bihjKTt0aGlzLmNoYXJ0UG9zaXRpb249e2xlZnQ6ZC5sZWZ0LHRvcDpkLnRvcCxzY2FsZVg6MSxzY2FsZVk6MX07dmFyIGE9Yy5vZmZzZXRXaWR0aDtjPWMub2Zmc2V0SGVpZ2h0OzI8YSYmMjxjJiYodGhpcy5jaGFydFBvc2l0aW9uLnNjYWxlWD1kLndpZHRoL2EsdGhpcy5jaGFydFBvc2l0aW9uLnNjYWxlWT1kLmhlaWdodC9jKTtyZXR1cm4gdGhpcy5jaGFydFBvc2l0aW9ufTtlLnByb3RvdHlwZS5nZXRDb29yZGluYXRlcz1mdW5jdGlvbihjKXt2YXIgZD17eEF4aXM6W10seUF4aXM6W119O3RoaXMuY2hhcnQuYXhlcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2RbYS5pc1hBeGlzP1wieEF4aXNcIjpcInlBeGlzXCJdLnB1c2goe2F4aXM6YSxcbnZhbHVlOmEudG9WYWx1ZShjW2EuaG9yaXo/XCJjaGFydFhcIjpcImNoYXJ0WVwiXSl9KX0pO3JldHVybiBkfTtlLnByb3RvdHlwZS5nZXRIb3ZlckRhdGE9ZnVuY3Rpb24oYyxkLGEsYixlLGYpe3ZhciBoLGc9W107Yj0hKCFifHwhYyk7dmFyIHI9ZCYmIWQuc3RpY2t5VHJhY2tpbmcsbD17Y2hhcnRYOmY/Zi5jaGFydFg6dm9pZCAwLGNoYXJ0WTpmP2YuY2hhcnRZOnZvaWQgMCxzaGFyZWQ6ZX07ayh0aGlzLFwiYmVmb3JlR2V0SG92ZXJEYXRhXCIsbCk7cj1yP1tkXTphLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gbC5maWx0ZXI/bC5maWx0ZXIoYSk6YS52aXNpYmxlJiYhKCFlJiZhLmRpcmVjdFRvdWNoKSYmSihhLm9wdGlvbnMuZW5hYmxlTW91c2VUcmFja2luZywhMCkmJmEuc3RpY2t5VHJhY2tpbmd9KTtkPShoPWJ8fCFmP2M6dGhpcy5maW5kTmVhcmVzdEtEUG9pbnQocixlLGYpKSYmaC5zZXJpZXM7aCYmKGUmJiFkLm5vU2hhcmVkVG9vbHRpcD8ocj1hLmZpbHRlcihmdW5jdGlvbihhKXtyZXR1cm4gbC5maWx0ZXI/XG5sLmZpbHRlcihhKTphLnZpc2libGUmJiEoIWUmJmEuZGlyZWN0VG91Y2gpJiZKKGEub3B0aW9ucy5lbmFibGVNb3VzZVRyYWNraW5nLCEwKSYmIWEubm9TaGFyZWRUb29sdGlwfSksci5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBjPXEoYS5wb2ludHMsZnVuY3Rpb24oYSl7cmV0dXJuIGEueD09PWgueCYmIWEuaXNOdWxsfSk7TihjKSYmKGEuY2hhcnQuaXNCb29zdGluZyYmKGM9YS5nZXRQb2ludChjKSksZy5wdXNoKGMpKX0pKTpnLnB1c2goaCkpO2w9e2hvdmVyUG9pbnQ6aH07ayh0aGlzLFwiYWZ0ZXJHZXRIb3ZlckRhdGFcIixsKTtyZXR1cm57aG92ZXJQb2ludDpsLmhvdmVyUG9pbnQsaG92ZXJTZXJpZXM6ZCxob3ZlclBvaW50czpnfX07ZS5wcm90b3R5cGUuZ2V0UG9pbnRGcm9tRXZlbnQ9ZnVuY3Rpb24oYyl7Yz1jLnRhcmdldDtmb3IodmFyIGQ7YyYmIWQ7KWQ9Yy5wb2ludCxjPWMucGFyZW50Tm9kZTtyZXR1cm4gZH07ZS5wcm90b3R5cGUub25UcmFja2VyTW91c2VPdXQ9ZnVuY3Rpb24oYyl7Yz1cbmMucmVsYXRlZFRhcmdldHx8Yy50b0VsZW1lbnQ7dmFyIGQ9dGhpcy5jaGFydC5ob3ZlclNlcmllczt0aGlzLmlzRGlyZWN0VG91Y2g9ITE7aWYoISghZHx8IWN8fGQuc3RpY2t5VHJhY2tpbmd8fHRoaXMuaW5DbGFzcyhjLFwiaGlnaGNoYXJ0cy10b29sdGlwXCIpfHx0aGlzLmluQ2xhc3MoYyxcImhpZ2hjaGFydHMtc2VyaWVzLVwiK2QuaW5kZXgpJiZ0aGlzLmluQ2xhc3MoYyxcImhpZ2hjaGFydHMtdHJhY2tlclwiKSkpZC5vbk1vdXNlT3V0KCl9O2UucHJvdG90eXBlLmluQ2xhc3M9ZnVuY3Rpb24oYyxkKXtmb3IodmFyIGE7Yzspe2lmKGE9dyhjLFwiY2xhc3NcIikpe2lmKC0xIT09YS5pbmRleE9mKGQpKXJldHVybiEwO2lmKC0xIT09YS5pbmRleE9mKFwiaGlnaGNoYXJ0cy1jb250YWluZXJcIikpcmV0dXJuITF9Yz1jLnBhcmVudE5vZGV9fTtlLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGMsZCl7dGhpcy5vcHRpb25zPWQ7dGhpcy5jaGFydD1jO3RoaXMucnVuQ2hhcnRDbGljaz0hKCFkLmNoYXJ0LmV2ZW50c3x8XG4hZC5jaGFydC5ldmVudHMuY2xpY2spO3RoaXMucGluY2hEb3duPVtdO3RoaXMubGFzdFZhbGlkVG91Y2g9e307eiYmKGMudG9vbHRpcD1uZXcgeihjLGQudG9vbHRpcCksdGhpcy5mb2xsb3dUb3VjaE1vdmU9SihkLnRvb2x0aXAuZm9sbG93VG91Y2hNb3ZlLCEwKSk7dGhpcy5zZXRET01FdmVudHMoKX07ZS5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKGMsYil7dmFyIGE9Yy50b3VjaGVzLGg9YT9hLmxlbmd0aD9hLml0ZW0oMCk6SihhLmNoYW5nZWRUb3VjaGVzLGMuY2hhbmdlZFRvdWNoZXMpWzBdOmM7Ynx8KGI9dGhpcy5nZXRDaGFydFBvc2l0aW9uKCkpO2E9aC5wYWdlWC1iLmxlZnQ7aD1oLnBhZ2VZLWIudG9wO2EvPWIuc2NhbGVYO2gvPWIuc2NhbGVZO3JldHVybiBkKGMse2NoYXJ0WDpNYXRoLnJvdW5kKGEpLGNoYXJ0WTpNYXRoLnJvdW5kKGgpfSl9O2UucHJvdG90eXBlLm9uQ29udGFpbmVyQ2xpY2s9ZnVuY3Rpb24oYyl7dmFyIGI9dGhpcy5jaGFydCxhPWIuaG92ZXJQb2ludDtcbmM9dGhpcy5ub3JtYWxpemUoYyk7dmFyIGg9Yi5wbG90TGVmdCxlPWIucGxvdFRvcDtiLmNhbmNlbENsaWNrfHwoYSYmdGhpcy5pbkNsYXNzKGMudGFyZ2V0LFwiaGlnaGNoYXJ0cy10cmFja2VyXCIpPyhrKGEuc2VyaWVzLFwiY2xpY2tcIixkKGMse3BvaW50OmF9KSksYi5ob3ZlclBvaW50JiZhLmZpcmVQb2ludEV2ZW50KFwiY2xpY2tcIixjKSk6KGQoYyx0aGlzLmdldENvb3JkaW5hdGVzKGMpKSxiLmlzSW5zaWRlUGxvdChjLmNoYXJ0WC1oLGMuY2hhcnRZLWUse3Zpc2libGVQbG90T25seTohMH0pJiZrKGIsXCJjbGlja1wiLGMpKSl9O2UucHJvdG90eXBlLm9uQ29udGFpbmVyTW91c2VEb3duPWZ1bmN0aW9uKGMpe3ZhciBkPTE9PT0oKGMuYnV0dG9uc3x8Yy5idXR0b24pJjEpO2M9dGhpcy5ub3JtYWxpemUoYyk7aWYoYi5pc0ZpcmVmb3gmJjAhPT1jLmJ1dHRvbil0aGlzLm9uQ29udGFpbmVyTW91c2VNb3ZlKGMpO2lmKFwidW5kZWZpbmVkXCI9PT10eXBlb2YgYy5idXR0b258fGQpdGhpcy56b29tT3B0aW9uKGMpLFxuZCYmYy5wcmV2ZW50RGVmYXVsdCYmYy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZHJhZ1N0YXJ0KGMpfTtlLnByb3RvdHlwZS5vbkNvbnRhaW5lck1vdXNlTGVhdmU9ZnVuY3Rpb24oYyl7dmFyIGQ9Q1tKKGIuaG92ZXJDaGFydEluZGV4LC0xKV0sYT10aGlzLmNoYXJ0LnRvb2x0aXA7Yz10aGlzLm5vcm1hbGl6ZShjKTtkJiYoYy5yZWxhdGVkVGFyZ2V0fHxjLnRvRWxlbWVudCkmJihkLnBvaW50ZXIucmVzZXQoKSxkLnBvaW50ZXIuY2hhcnRQb3NpdGlvbj12b2lkIDApO2EmJiFhLmlzSGlkZGVuJiZ0aGlzLnJlc2V0KCl9O2UucHJvdG90eXBlLm9uQ29udGFpbmVyTW91c2VFbnRlcj1mdW5jdGlvbihjKXtkZWxldGUgdGhpcy5jaGFydFBvc2l0aW9ufTtlLnByb3RvdHlwZS5vbkNvbnRhaW5lck1vdXNlTW92ZT1mdW5jdGlvbihjKXt2YXIgZD10aGlzLmNoYXJ0O2M9dGhpcy5ub3JtYWxpemUoYyk7dGhpcy5zZXRIb3ZlckNoYXJ0SW5kZXgoKTtjLnByZXZlbnREZWZhdWx0fHwoYy5yZXR1cm5WYWx1ZT1cbiExKTsoXCJtb3VzZWRvd25cIj09PWQubW91c2VJc0Rvd258fHRoaXMudG91Y2hTZWxlY3QoYykpJiZ0aGlzLmRyYWcoYyk7ZC5vcGVuTWVudXx8IXRoaXMuaW5DbGFzcyhjLnRhcmdldCxcImhpZ2hjaGFydHMtdHJhY2tlclwiKSYmIWQuaXNJbnNpZGVQbG90KGMuY2hhcnRYLWQucGxvdExlZnQsYy5jaGFydFktZC5wbG90VG9wLHt2aXNpYmxlUGxvdE9ubHk6ITB9KXx8dGhpcy5ydW5Qb2ludEFjdGlvbnMoYyl9O2UucHJvdG90eXBlLm9uRG9jdW1lbnRUb3VjaEVuZD1mdW5jdGlvbihjKXtDW2IuaG92ZXJDaGFydEluZGV4XSYmQ1tiLmhvdmVyQ2hhcnRJbmRleF0ucG9pbnRlci5kcm9wKGMpfTtlLnByb3RvdHlwZS5vbkNvbnRhaW5lclRvdWNoTW92ZT1mdW5jdGlvbihjKXtpZih0aGlzLnRvdWNoU2VsZWN0KGMpKXRoaXMub25Db250YWluZXJNb3VzZU1vdmUoYyk7ZWxzZSB0aGlzLnRvdWNoKGMpfTtlLnByb3RvdHlwZS5vbkNvbnRhaW5lclRvdWNoU3RhcnQ9ZnVuY3Rpb24oYyl7aWYodGhpcy50b3VjaFNlbGVjdChjKSl0aGlzLm9uQ29udGFpbmVyTW91c2VEb3duKGMpO1xuZWxzZSB0aGlzLnpvb21PcHRpb24oYyksdGhpcy50b3VjaChjLCEwKX07ZS5wcm90b3R5cGUub25Eb2N1bWVudE1vdXNlTW92ZT1mdW5jdGlvbihjKXt2YXIgZD10aGlzLmNoYXJ0LGE9dGhpcy5jaGFydFBvc2l0aW9uO2M9dGhpcy5ub3JtYWxpemUoYyxhKTt2YXIgYj1kLnRvb2x0aXA7IWF8fGImJmIuaXNTdGlja3lPbkNvbnRhY3QoKXx8ZC5pc0luc2lkZVBsb3QoYy5jaGFydFgtZC5wbG90TGVmdCxjLmNoYXJ0WS1kLnBsb3RUb3Ase3Zpc2libGVQbG90T25seTohMH0pfHx0aGlzLmluQ2xhc3MoYy50YXJnZXQsXCJoaWdoY2hhcnRzLXRyYWNrZXJcIil8fHRoaXMucmVzZXQoKX07ZS5wcm90b3R5cGUub25Eb2N1bWVudE1vdXNlVXA9ZnVuY3Rpb24oYyl7dmFyIGQ9Q1tKKGIuaG92ZXJDaGFydEluZGV4LC0xKV07ZCYmZC5wb2ludGVyLmRyb3AoYyl9O2UucHJvdG90eXBlLnBpbmNoPWZ1bmN0aW9uKGMpe3ZhciBiPXRoaXMsYT1iLmNoYXJ0LGg9Yi5waW5jaERvd24sZT1jLnRvdWNoZXN8fFxuW10sZj1lLmxlbmd0aCxsPWIubGFzdFZhbGlkVG91Y2gsbT1iLmhhc1pvb20saz1iLnNlbGVjdGlvbk1hcmtlcixuPXt9LHE9MT09PWYmJihiLmluQ2xhc3MoYy50YXJnZXQsXCJoaWdoY2hhcnRzLXRyYWNrZXJcIikmJmEucnVuVHJhY2tlckNsaWNrfHxiLnJ1bkNoYXJ0Q2xpY2spLHU9e307MTxmJiYoYi5pbml0aWF0ZWQ9ITApO20mJmIuaW5pdGlhdGVkJiYhcSYmITEhPT1jLmNhbmNlbGFibGUmJmMucHJldmVudERlZmF1bHQoKTtbXS5tYXAuY2FsbChlLGZ1bmN0aW9uKGEpe3JldHVybiBiLm5vcm1hbGl6ZShhKX0pO1widG91Y2hzdGFydFwiPT09Yy50eXBlPyhbXS5mb3JFYWNoLmNhbGwoZSxmdW5jdGlvbihhLGMpe2hbY109e2NoYXJ0WDphLmNoYXJ0WCxjaGFydFk6YS5jaGFydFl9fSksbC54PVtoWzBdLmNoYXJ0WCxoWzFdJiZoWzFdLmNoYXJ0WF0sbC55PVtoWzBdLmNoYXJ0WSxoWzFdJiZoWzFdLmNoYXJ0WV0sYS5heGVzLmZvckVhY2goZnVuY3Rpb24oYyl7aWYoYy56b29tRW5hYmxlZCl7dmFyIGQ9XG5hLmJvdW5kc1tjLmhvcml6P1wiaFwiOlwidlwiXSxiPWMubWluUGl4ZWxQYWRkaW5nLGg9Yy50b1BpeGVscyhNYXRoLm1pbihKKGMub3B0aW9ucy5taW4sYy5kYXRhTWluKSxjLmRhdGFNaW4pKSxlPWMudG9QaXhlbHMoTWF0aC5tYXgoSihjLm9wdGlvbnMubWF4LGMuZGF0YU1heCksYy5kYXRhTWF4KSksZz1NYXRoLm1heChoLGUpO2QubWluPU1hdGgubWluKGMucG9zLE1hdGgubWluKGgsZSktYik7ZC5tYXg9TWF0aC5tYXgoYy5wb3MrYy5sZW4sZytiKX19KSxiLnJlcz0hMCk6Yi5mb2xsb3dUb3VjaE1vdmUmJjE9PT1mP3RoaXMucnVuUG9pbnRBY3Rpb25zKGIubm9ybWFsaXplKGMpKTpoLmxlbmd0aCYmKGt8fChiLnNlbGVjdGlvbk1hcmtlcj1rPWQoe2Rlc3Ryb3k6Qix0b3VjaDohMH0sYS5wbG90Qm94KSksYi5waW5jaFRyYW5zbGF0ZShoLGUsbixrLHUsbCksYi5oYXNQaW5jaGVkPW0sYi5zY2FsZUdyb3VwcyhuLHUpLGIucmVzJiYoYi5yZXM9ITEsdGhpcy5yZXNldCghMSwwKSkpfTtlLnByb3RvdHlwZS5waW5jaFRyYW5zbGF0ZT1cbmZ1bmN0aW9uKGMsZCxhLGIsZSxmKXt0aGlzLnpvb21Ib3ImJnRoaXMucGluY2hUcmFuc2xhdGVEaXJlY3Rpb24oITAsYyxkLGEsYixlLGYpO3RoaXMuem9vbVZlcnQmJnRoaXMucGluY2hUcmFuc2xhdGVEaXJlY3Rpb24oITEsYyxkLGEsYixlLGYpfTtlLnByb3RvdHlwZS5waW5jaFRyYW5zbGF0ZURpcmVjdGlvbj1mdW5jdGlvbihjLGQsYSxiLGUsZixsLG0pe3ZhciBoPXRoaXMuY2hhcnQsZz1jP1wieFwiOlwieVwiLHI9Yz9cIlhcIjpcIllcIixrPVwiY2hhcnRcIityLG49Yz9cIndpZHRoXCI6XCJoZWlnaHRcIixBPWhbXCJwbG90XCIrKGM/XCJMZWZ0XCI6XCJUb3BcIildLHkscSx1PW18fDEsTD1oLmludmVydGVkLEY9aC5ib3VuZHNbYz9cImhcIjpcInZcIl0sdj0xPT09ZC5sZW5ndGgsSz1kWzBdW2tdLHc9YVswXVtrXSxFPSF2JiZkWzFdW2tdLHg9IXYmJmFbMV1ba107YT1mdW5jdGlvbigpe1wibnVtYmVyXCI9PT10eXBlb2YgeCYmMjA8TWF0aC5hYnMoSy1FKSYmKHU9bXx8TWF0aC5hYnMody14KS9NYXRoLmFicyhLLUUpKTtcbnE9KEEtdykvdStLO3k9aFtcInBsb3RcIisoYz9cIldpZHRoXCI6XCJIZWlnaHRcIildL3V9O2EoKTtkPXE7aWYoZDxGLm1pbil7ZD1GLm1pbjt2YXIgSj0hMH1lbHNlIGQreT5GLm1heCYmKGQ9Ri5tYXgteSxKPSEwKTtKPyh3LT0uOCoody1sW2ddWzBdKSxcIm51bWJlclwiPT09dHlwZW9mIHgmJih4LT0uOCooeC1sW2ddWzFdKSksYSgpKTpsW2ddPVt3LHhdO0x8fChmW2ddPXEtQSxmW25dPXkpO2Y9TD8xL3U6dTtlW25dPXk7ZVtnXT1kO2JbTD9jP1wic2NhbGVZXCI6XCJzY2FsZVhcIjpcInNjYWxlXCIrcl09dTtiW1widHJhbnNsYXRlXCIrcl09ZipBKyh3LWYqSyl9O2UucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKGMsZCl7dmFyIGE9dGhpcy5jaGFydCxiPWEuaG92ZXJTZXJpZXMsZT1hLmhvdmVyUG9pbnQsZz1hLmhvdmVyUG9pbnRzLGY9YS50b29sdGlwLGw9ZiYmZi5zaGFyZWQ/ZzplO2MmJmwmJkUobCkuZm9yRWFjaChmdW5jdGlvbihhKXthLnNlcmllcy5pc0NhcnRlc2lhbiYmXCJ1bmRlZmluZWRcIj09PVxudHlwZW9mIGEucGxvdFgmJihjPSExKX0pO2lmKGMpZiYmbCYmRShsKS5sZW5ndGgmJihmLnJlZnJlc2gobCksZi5zaGFyZWQmJmc/Zy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Euc2V0U3RhdGUoYS5zdGF0ZSwhMCk7YS5zZXJpZXMuaXNDYXJ0ZXNpYW4mJihhLnNlcmllcy54QXhpcy5jcm9zc2hhaXImJmEuc2VyaWVzLnhBeGlzLmRyYXdDcm9zc2hhaXIobnVsbCxhKSxhLnNlcmllcy55QXhpcy5jcm9zc2hhaXImJmEuc2VyaWVzLnlBeGlzLmRyYXdDcm9zc2hhaXIobnVsbCxhKSl9KTplJiYoZS5zZXRTdGF0ZShlLnN0YXRlLCEwKSxhLmF4ZXMuZm9yRWFjaChmdW5jdGlvbihhKXthLmNyb3NzaGFpciYmZS5zZXJpZXNbYS5jb2xsXT09PWEmJmEuZHJhd0Nyb3NzaGFpcihudWxsLGUpfSkpKTtlbHNle2lmKGUpZS5vbk1vdXNlT3V0KCk7ZyYmZy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Euc2V0U3RhdGUoKX0pO2lmKGIpYi5vbk1vdXNlT3V0KCk7ZiYmZi5oaWRlKGQpO3RoaXMudW5Eb2NNb3VzZU1vdmUmJlxuKHRoaXMudW5Eb2NNb3VzZU1vdmU9dGhpcy51bkRvY01vdXNlTW92ZSgpKTthLmF4ZXMuZm9yRWFjaChmdW5jdGlvbihhKXthLmhpZGVDcm9zc2hhaXIoKX0pO3RoaXMuaG92ZXJYPWEuaG92ZXJQb2ludHM9YS5ob3ZlclBvaW50PW51bGx9fTtlLnByb3RvdHlwZS5ydW5Qb2ludEFjdGlvbnM9ZnVuY3Rpb24oYyxkKXt2YXIgYT10aGlzLmNoYXJ0LGg9YS50b29sdGlwJiZhLnRvb2x0aXAub3B0aW9ucy5lbmFibGVkP2EudG9vbHRpcDp2b2lkIDAsZT1oP2guc2hhcmVkOiExLGc9ZHx8YS5ob3ZlclBvaW50LGY9ZyYmZy5zZXJpZXN8fGEuaG92ZXJTZXJpZXM7Zj10aGlzLmdldEhvdmVyRGF0YShnLGYsYS5zZXJpZXMsKCFjfHxcInRvdWNobW92ZVwiIT09Yy50eXBlKSYmKCEhZHx8ZiYmZi5kaXJlY3RUb3VjaCYmdGhpcy5pc0RpcmVjdFRvdWNoKSxlLGMpO2c9Zi5ob3ZlclBvaW50O3ZhciBsPWYuaG92ZXJQb2ludHM7ZD0oZj1mLmhvdmVyU2VyaWVzKSYmZi50b29sdGlwT3B0aW9ucy5mb2xsb3dQb2ludGVyJiZcbiFmLnRvb2x0aXBPcHRpb25zLnNwbGl0O2U9ZSYmZiYmIWYubm9TaGFyZWRUb29sdGlwO2lmKGcmJihnIT09YS5ob3ZlclBvaW50fHxoJiZoLmlzSGlkZGVuKSl7KGEuaG92ZXJQb2ludHN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGEpey0xPT09bC5pbmRleE9mKGEpJiZhLnNldFN0YXRlKCl9KTtpZihhLmhvdmVyU2VyaWVzIT09ZilmLm9uTW91c2VPdmVyKCk7dGhpcy5hcHBseUluYWN0aXZlU3RhdGUobCk7KGx8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Euc2V0U3RhdGUoXCJob3ZlclwiKX0pO2EuaG92ZXJQb2ludCYmYS5ob3ZlclBvaW50LmZpcmVQb2ludEV2ZW50KFwibW91c2VPdXRcIik7aWYoIWcuc2VyaWVzKXJldHVybjthLmhvdmVyUG9pbnRzPWw7YS5ob3ZlclBvaW50PWc7Zy5maXJlUG9pbnRFdmVudChcIm1vdXNlT3ZlclwiKTtoJiZoLnJlZnJlc2goZT9sOmcsYyl9ZWxzZSBkJiZoJiYhaC5pc0hpZGRlbiYmKGc9aC5nZXRBbmNob3IoW3t9XSxjKSxhLmlzSW5zaWRlUGxvdChnWzBdLFxuZ1sxXSx7dmlzaWJsZVBsb3RPbmx5OiEwfSkmJmgudXBkYXRlUG9zaXRpb24oe3Bsb3RYOmdbMF0scGxvdFk6Z1sxXX0pKTt0aGlzLnVuRG9jTW91c2VNb3ZlfHwodGhpcy51bkRvY01vdXNlTW92ZT14KGEuY29udGFpbmVyLm93bmVyRG9jdW1lbnQsXCJtb3VzZW1vdmVcIixmdW5jdGlvbihhKXt2YXIgYz1DW2IuaG92ZXJDaGFydEluZGV4XTtpZihjKWMucG9pbnRlci5vbkRvY3VtZW50TW91c2VNb3ZlKGEpfSksdGhpcy5ldmVudHNUb1VuYmluZC5wdXNoKHRoaXMudW5Eb2NNb3VzZU1vdmUpKTthLmF4ZXMuZm9yRWFjaChmdW5jdGlvbihkKXt2YXIgYj1KKChkLmNyb3NzaGFpcnx8e30pLnNuYXAsITApLGg7YiYmKChoPWEuaG92ZXJQb2ludCkmJmguc2VyaWVzW2QuY29sbF09PT1kfHwoaD1xKGwsZnVuY3Rpb24oYSl7cmV0dXJuIGEuc2VyaWVzW2QuY29sbF09PT1kfSkpKTtofHwhYj9kLmRyYXdDcm9zc2hhaXIoYyxoKTpkLmhpZGVDcm9zc2hhaXIoKX0pfTtlLnByb3RvdHlwZS5zY2FsZUdyb3Vwcz1cbmZ1bmN0aW9uKGMsZCl7dmFyIGE9dGhpcy5jaGFydCxiO2Euc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oaCl7Yj1jfHxoLmdldFBsb3RCb3goKTtoLnhBeGlzJiZoLnhBeGlzLnpvb21FbmFibGVkJiZoLmdyb3VwJiYoaC5ncm91cC5hdHRyKGIpLGgubWFya2VyR3JvdXAmJihoLm1hcmtlckdyb3VwLmF0dHIoYiksaC5tYXJrZXJHcm91cC5jbGlwKGQ/YS5jbGlwUmVjdDpudWxsKSksaC5kYXRhTGFiZWxzR3JvdXAmJmguZGF0YUxhYmVsc0dyb3VwLmF0dHIoYikpfSk7YS5jbGlwUmVjdC5hdHRyKGR8fGEuY2xpcEJveCl9O2UucHJvdG90eXBlLnNldERPTUV2ZW50cz1mdW5jdGlvbigpe3ZhciBjPXRoaXMsZD10aGlzLmNoYXJ0LmNvbnRhaW5lcixhPWQub3duZXJEb2N1bWVudDtkLm9ubW91c2Vkb3duPXRoaXMub25Db250YWluZXJNb3VzZURvd24uYmluZCh0aGlzKTtkLm9ubW91c2Vtb3ZlPXRoaXMub25Db250YWluZXJNb3VzZU1vdmUuYmluZCh0aGlzKTtkLm9uY2xpY2s9dGhpcy5vbkNvbnRhaW5lckNsaWNrLmJpbmQodGhpcyk7XG50aGlzLmV2ZW50c1RvVW5iaW5kLnB1c2goeChkLFwibW91c2VlbnRlclwiLHRoaXMub25Db250YWluZXJNb3VzZUVudGVyLmJpbmQodGhpcykpKTt0aGlzLmV2ZW50c1RvVW5iaW5kLnB1c2goeChkLFwibW91c2VsZWF2ZVwiLHRoaXMub25Db250YWluZXJNb3VzZUxlYXZlLmJpbmQodGhpcykpKTtiLnVuYmluZERvY3VtZW50TW91c2VVcHx8KGIudW5iaW5kRG9jdW1lbnRNb3VzZVVwPXgoYSxcIm1vdXNldXBcIix0aGlzLm9uRG9jdW1lbnRNb3VzZVVwLmJpbmQodGhpcykpKTtmb3IodmFyIGg9dGhpcy5jaGFydC5yZW5kZXJUby5wYXJlbnRFbGVtZW50O2gmJlwiQk9EWVwiIT09aC50YWdOYW1lOyl0aGlzLmV2ZW50c1RvVW5iaW5kLnB1c2goeChoLFwic2Nyb2xsXCIsZnVuY3Rpb24oKXtkZWxldGUgYy5jaGFydFBvc2l0aW9ufSkpLGg9aC5wYXJlbnRFbGVtZW50O2IuaGFzVG91Y2gmJih0aGlzLmV2ZW50c1RvVW5iaW5kLnB1c2goeChkLFwidG91Y2hzdGFydFwiLHRoaXMub25Db250YWluZXJUb3VjaFN0YXJ0LmJpbmQodGhpcyksXG57cGFzc2l2ZTohMX0pKSx0aGlzLmV2ZW50c1RvVW5iaW5kLnB1c2goeChkLFwidG91Y2htb3ZlXCIsdGhpcy5vbkNvbnRhaW5lclRvdWNoTW92ZS5iaW5kKHRoaXMpLHtwYXNzaXZlOiExfSkpLGIudW5iaW5kRG9jdW1lbnRUb3VjaEVuZHx8KGIudW5iaW5kRG9jdW1lbnRUb3VjaEVuZD14KGEsXCJ0b3VjaGVuZFwiLHRoaXMub25Eb2N1bWVudFRvdWNoRW5kLmJpbmQodGhpcykse3Bhc3NpdmU6ITF9KSkpfTtlLnByb3RvdHlwZS5zZXRIb3ZlckNoYXJ0SW5kZXg9ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmNoYXJ0LGQ9Yi5jaGFydHNbSihiLmhvdmVyQ2hhcnRJbmRleCwtMSldO2lmKGQmJmQhPT1jKWQucG9pbnRlci5vbkNvbnRhaW5lck1vdXNlTGVhdmUoe3JlbGF0ZWRUYXJnZXQ6ITB9KTtkJiZkLm1vdXNlSXNEb3dufHwoYi5ob3ZlckNoYXJ0SW5kZXg9Yy5pbmRleCl9O2UucHJvdG90eXBlLnRvdWNoPWZ1bmN0aW9uKGMsZCl7dmFyIGE9dGhpcy5jaGFydCxiO3RoaXMuc2V0SG92ZXJDaGFydEluZGV4KCk7XG5pZigxPT09Yy50b3VjaGVzLmxlbmd0aClpZihjPXRoaXMubm9ybWFsaXplKGMpLChiPWEuaXNJbnNpZGVQbG90KGMuY2hhcnRYLWEucGxvdExlZnQsYy5jaGFydFktYS5wbG90VG9wLHt2aXNpYmxlUGxvdE9ubHk6ITB9KSkmJiFhLm9wZW5NZW51KXtkJiZ0aGlzLnJ1blBvaW50QWN0aW9ucyhjKTtpZihcInRvdWNobW92ZVwiPT09Yy50eXBlKXtkPXRoaXMucGluY2hEb3duO3ZhciBlPWRbMF0/NDw9TWF0aC5zcXJ0KE1hdGgucG93KGRbMF0uY2hhcnRYLWMuY2hhcnRYLDIpK01hdGgucG93KGRbMF0uY2hhcnRZLWMuY2hhcnRZLDIpKTohMX1KKGUsITApJiZ0aGlzLnBpbmNoKGMpfWVsc2UgZCYmdGhpcy5yZXNldCgpO2Vsc2UgMj09PWMudG91Y2hlcy5sZW5ndGgmJnRoaXMucGluY2goYyl9O2UucHJvdG90eXBlLnRvdWNoU2VsZWN0PWZ1bmN0aW9uKGMpe3JldHVybiEoIXRoaXMuY2hhcnQub3B0aW9ucy5jaGFydC56b29tQnlTaW5nbGVUb3VjaHx8IWMudG91Y2hlc3x8MSE9PWMudG91Y2hlcy5sZW5ndGgpfTtcbmUucHJvdG90eXBlLnpvb21PcHRpb249ZnVuY3Rpb24oYyl7dmFyIGQ9dGhpcy5jaGFydCxhPWQub3B0aW9ucy5jaGFydCxiPWEuem9vbVR5cGV8fFwiXCI7ZD1kLmludmVydGVkOy90b3VjaC8udGVzdChjLnR5cGUpJiYoYj1KKGEucGluY2hUeXBlLGIpKTt0aGlzLnpvb21YPWM9L3gvLnRlc3QoYik7dGhpcy56b29tWT1iPS95Ly50ZXN0KGIpO3RoaXMuem9vbUhvcj1jJiYhZHx8YiYmZDt0aGlzLnpvb21WZXJ0PWImJiFkfHxjJiZkO3RoaXMuaGFzWm9vbT1jfHxifTtyZXR1cm4gZX0oKTtyZXR1cm4gYi5Qb2ludGVyPWV9KTtPKGUsXCJDb3JlL01TUG9pbnRlci5qc1wiLFtlW1wiQ29yZS9HbG9iYWxzLmpzXCJdLGVbXCJDb3JlL1BvaW50ZXIuanNcIl0sZVtcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihlLGIsSSl7ZnVuY3Rpb24gRCgpe3ZhciBkPVtdO2QuaXRlbT1mdW5jdGlvbihkKXtyZXR1cm4gdGhpc1tkXX07ZihxLGZ1bmN0aW9uKGIpe2QucHVzaCh7cGFnZVg6Yi5wYWdlWCxwYWdlWTpiLnBhZ2VZLFxudGFyZ2V0OmIudGFyZ2V0fSl9KTtyZXR1cm4gZH1mdW5jdGlvbiBIKGQsYixmLGspe1widG91Y2hcIiE9PWQucG9pbnRlclR5cGUmJmQucG9pbnRlclR5cGUhPT1kLk1TUE9JTlRFUl9UWVBFX1RPVUNIfHwhQ1tlLmhvdmVyQ2hhcnRJbmRleF18fChrKGQpLGs9Q1tlLmhvdmVyQ2hhcnRJbmRleF0ucG9pbnRlcixrW2JdKHt0eXBlOmYsdGFyZ2V0OmQuY3VycmVudFRhcmdldCxwcmV2ZW50RGVmYXVsdDp4LHRvdWNoZXM6RCgpfSkpfXZhciBHPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbigpe3ZhciBkPWZ1bmN0aW9uKGIsZSl7ZD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZCxiKXtkLl9fcHJvdG9fXz1ifXx8ZnVuY3Rpb24oZCxiKXtmb3IodmFyIGUgaW4gYiliLmhhc093blByb3BlcnR5KGUpJiYoZFtlXT1iW2VdKX07cmV0dXJuIGQoYixlKX07cmV0dXJuIGZ1bmN0aW9uKGIsZSl7ZnVuY3Rpb24gZigpe3RoaXMuY29uc3RydWN0b3I9XG5ifWQoYixlKTtiLnByb3RvdHlwZT1udWxsPT09ZT9PYmplY3QuY3JlYXRlKGUpOihmLnByb3RvdHlwZT1lLnByb3RvdHlwZSxuZXcgZil9fSgpLEM9ZS5jaGFydHMsQj1lLmRvYyx4PWUubm9vcCx3PUkuYWRkRXZlbnQsdj1JLmNzcyxmPUkub2JqZWN0RWFjaCxkPUkucmVtb3ZlRXZlbnQscT17fSxrPSEhZS53aW4uUG9pbnRlckV2ZW50O3JldHVybiBmdW5jdGlvbihiKXtmdW5jdGlvbiBlKCl7cmV0dXJuIG51bGwhPT1iJiZiLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31HKGUsYik7ZS5wcm90b3R5cGUuYmF0Y2hNU0V2ZW50cz1mdW5jdGlvbihkKXtkKHRoaXMuY2hhcnQuY29udGFpbmVyLGs/XCJwb2ludGVyZG93blwiOlwiTVNQb2ludGVyRG93blwiLHRoaXMub25Db250YWluZXJQb2ludGVyRG93bik7ZCh0aGlzLmNoYXJ0LmNvbnRhaW5lcixrP1wicG9pbnRlcm1vdmVcIjpcIk1TUG9pbnRlck1vdmVcIix0aGlzLm9uQ29udGFpbmVyUG9pbnRlck1vdmUpO2QoQixrP1wicG9pbnRlcnVwXCI6XG5cIk1TUG9pbnRlclVwXCIsdGhpcy5vbkRvY3VtZW50UG9pbnRlclVwKX07ZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuYmF0Y2hNU0V2ZW50cyhkKTtiLnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyl9O2UucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oZCxlKXtiLnByb3RvdHlwZS5pbml0LmNhbGwodGhpcyxkLGUpO3RoaXMuaGFzWm9vbSYmdihkLmNvbnRhaW5lcix7XCItbXMtdG91Y2gtYWN0aW9uXCI6XCJub25lXCIsXCJ0b3VjaC1hY3Rpb25cIjpcIm5vbmVcIn0pfTtlLnByb3RvdHlwZS5vbkNvbnRhaW5lclBvaW50ZXJEb3duPWZ1bmN0aW9uKGQpe0goZCxcIm9uQ29udGFpbmVyVG91Y2hTdGFydFwiLFwidG91Y2hzdGFydFwiLGZ1bmN0aW9uKGQpe3FbZC5wb2ludGVySWRdPXtwYWdlWDpkLnBhZ2VYLHBhZ2VZOmQucGFnZVksdGFyZ2V0OmQuY3VycmVudFRhcmdldH19KX07ZS5wcm90b3R5cGUub25Db250YWluZXJQb2ludGVyTW92ZT1mdW5jdGlvbihkKXtIKGQsXCJvbkNvbnRhaW5lclRvdWNoTW92ZVwiLFxuXCJ0b3VjaG1vdmVcIixmdW5jdGlvbihkKXtxW2QucG9pbnRlcklkXT17cGFnZVg6ZC5wYWdlWCxwYWdlWTpkLnBhZ2VZfTtxW2QucG9pbnRlcklkXS50YXJnZXR8fChxW2QucG9pbnRlcklkXS50YXJnZXQ9ZC5jdXJyZW50VGFyZ2V0KX0pfTtlLnByb3RvdHlwZS5vbkRvY3VtZW50UG9pbnRlclVwPWZ1bmN0aW9uKGQpe0goZCxcIm9uRG9jdW1lbnRUb3VjaEVuZFwiLFwidG91Y2hlbmRcIixmdW5jdGlvbihkKXtkZWxldGUgcVtkLnBvaW50ZXJJZF19KX07ZS5wcm90b3R5cGUuc2V0RE9NRXZlbnRzPWZ1bmN0aW9uKCl7Yi5wcm90b3R5cGUuc2V0RE9NRXZlbnRzLmNhbGwodGhpcyk7KHRoaXMuaGFzWm9vbXx8dGhpcy5mb2xsb3dUb3VjaE1vdmUpJiZ0aGlzLmJhdGNoTVNFdmVudHModyl9O3JldHVybiBlfShiKX0pO08oZSxcIkNvcmUvU2VyaWVzL1BvaW50LmpzXCIsW2VbXCJDb3JlL1JlbmRlcmVyL0hUTUwvQVNULmpzXCJdLGVbXCJDb3JlL0FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuanNcIl0sXG5lW1wiQ29yZS9Gb3JtYXRVdGlsaXRpZXMuanNcIl0sZVtcIkNvcmUvR2xvYmFscy5qc1wiXSxlW1wiQ29yZS9PcHRpb25zLmpzXCJdLGVbXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oZSxiLEkseixILEcpe3ZhciBEPWIuYW5pbU9iamVjdCxCPUkuZm9ybWF0LHg9SC5kZWZhdWx0T3B0aW9ucyx3PUcuYWRkRXZlbnQsdj1HLmRlZmluZWQsZj1HLmVyYXNlLGQ9Ry5leHRlbmQscT1HLmZpcmVFdmVudCxrPUcuZ2V0TmVzdGVkUHJvcGVydHksbD1HLmlzQXJyYXksTj1HLmlzRnVuY3Rpb24sdT1HLmlzTnVtYmVyLG49Ry5pc09iamVjdCxKPUcubWVyZ2UsRT1HLm9iamVjdEVhY2gsbT1HLnBpY2ssYz1HLnN5bmNUaW1lb3V0LGc9Ry5yZW1vdmVFdmVudCxhPUcudW5pcXVlS2V5O1wiXCI7Yj1mdW5jdGlvbigpe2Z1bmN0aW9uIGIoKXt0aGlzLmNvbG9ySW5kZXg9dGhpcy5jYXRlZ29yeT12b2lkIDA7dGhpcy5mb3JtYXRQcmVmaXg9XCJwb2ludFwiO3RoaXMuaWQ9dm9pZCAwO3RoaXMuaXNOdWxsPSExO1xudGhpcy5wZXJjZW50YWdlPXRoaXMub3B0aW9ucz10aGlzLm5hbWU9dm9pZCAwO3RoaXMuc2VsZWN0ZWQ9ITE7dGhpcy50b3RhbD10aGlzLnNlcmllcz12b2lkIDA7dGhpcy52aXNpYmxlPSEwO3RoaXMueD12b2lkIDB9Yi5wcm90b3R5cGUuYW5pbWF0ZUJlZm9yZURlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGM9e3g6YS5zdGFydFhQb3Msb3BhY2l0eTowfSxiLGU9YS5nZXRHcmFwaGljYWxQcm9wcygpO2Uuc2luZ3VsYXIuZm9yRWFjaChmdW5jdGlvbihkKXtiPVwiZGF0YUxhYmVsXCI9PT1kO2FbZF09YVtkXS5hbmltYXRlKGI/e3g6YVtkXS5zdGFydFhQb3MseTphW2RdLnN0YXJ0WVBvcyxvcGFjaXR5OjB9OmMpfSk7ZS5wbHVyYWwuZm9yRWFjaChmdW5jdGlvbihjKXthW2NdLmZvckVhY2goZnVuY3Rpb24oYyl7Yy5lbGVtZW50JiZjLmFuaW1hdGUoZCh7eDphLnN0YXJ0WFBvc30sYy5zdGFydFlQb3M/e3g6Yy5zdGFydFhQb3MseTpjLnN0YXJ0WVBvc306e30pKX0pfSl9O2IucHJvdG90eXBlLmFwcGx5T3B0aW9ucz1cbmZ1bmN0aW9uKGEsYyl7dmFyIGU9dGhpcy5zZXJpZXMsaD1lLm9wdGlvbnMucG9pbnRWYWxLZXl8fGUucG9pbnRWYWxLZXk7YT1iLnByb3RvdHlwZS5vcHRpb25zVG9PYmplY3QuY2FsbCh0aGlzLGEpO2QodGhpcyxhKTt0aGlzLm9wdGlvbnM9dGhpcy5vcHRpb25zP2QodGhpcy5vcHRpb25zLGEpOmE7YS5ncm91cCYmZGVsZXRlIHRoaXMuZ3JvdXA7YS5kYXRhTGFiZWxzJiZkZWxldGUgdGhpcy5kYXRhTGFiZWxzO2gmJih0aGlzLnk9Yi5wcm90b3R5cGUuZ2V0TmVzdGVkUHJvcGVydHkuY2FsbCh0aGlzLGgpKTt0aGlzLmZvcm1hdFByZWZpeD0odGhpcy5pc051bGw9bSh0aGlzLmlzVmFsaWQmJiF0aGlzLmlzVmFsaWQoKSxudWxsPT09dGhpcy54fHwhdSh0aGlzLnkpKSk/XCJudWxsXCI6XCJwb2ludFwiO3RoaXMuc2VsZWN0ZWQmJih0aGlzLnN0YXRlPVwic2VsZWN0XCIpO1wibmFtZVwiaW4gdGhpcyYmXCJ1bmRlZmluZWRcIj09PXR5cGVvZiBjJiZlLnhBeGlzJiZlLnhBeGlzLmhhc05hbWVzJiYodGhpcy54PVxuZS54QXhpcy5uYW1lVG9YKHRoaXMpKTtcInVuZGVmaW5lZFwiPT09dHlwZW9mIHRoaXMueCYmZSYmKHRoaXMueD1cInVuZGVmaW5lZFwiPT09dHlwZW9mIGM/ZS5hdXRvSW5jcmVtZW50KHRoaXMpOmMpO3JldHVybiB0aGlzfTtiLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe2lmKGQuZ3JhcGhpY3x8ZC5kYXRhTGFiZWx8fGQuZGF0YUxhYmVscylnKGQpLGQuZGVzdHJveUVsZW1lbnRzKCk7Zm9yKG0gaW4gZClkW21dPW51bGx9dmFyIGQ9dGhpcyxiPWQuc2VyaWVzLGU9Yi5jaGFydDtiPWIub3B0aW9ucy5kYXRhU29ydGluZzt2YXIgaD1lLmhvdmVyUG9pbnRzLGw9RChkLnNlcmllcy5jaGFydC5yZW5kZXJlci5nbG9iYWxBbmltYXRpb24pLG07ZC5sZWdlbmRJdGVtJiZlLmxlZ2VuZC5kZXN0cm95SXRlbShkKTtoJiYoZC5zZXRTdGF0ZSgpLGYoaCxkKSxoLmxlbmd0aHx8KGUuaG92ZXJQb2ludHM9bnVsbCkpO2lmKGQ9PT1lLmhvdmVyUG9pbnQpZC5vbk1vdXNlT3V0KCk7XG5iJiZiLmVuYWJsZWQ/KHRoaXMuYW5pbWF0ZUJlZm9yZURlc3Ryb3koKSxjKGEsbC5kdXJhdGlvbikpOmEoKTtlLnBvaW50Q291bnQtLX07Yi5wcm90b3R5cGUuZGVzdHJveUVsZW1lbnRzPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXM7YT1jLmdldEdyYXBoaWNhbFByb3BzKGEpO2Euc2luZ3VsYXIuZm9yRWFjaChmdW5jdGlvbihhKXtjW2FdPWNbYV0uZGVzdHJveSgpfSk7YS5wbHVyYWwuZm9yRWFjaChmdW5jdGlvbihhKXtjW2FdLmZvckVhY2goZnVuY3Rpb24oYSl7YS5lbGVtZW50JiZhLmRlc3Ryb3koKX0pO2RlbGV0ZSBjW2FdfSl9O2IucHJvdG90eXBlLmZpcmVQb2ludEV2ZW50PWZ1bmN0aW9uKGEsYyxkKXt2YXIgYj10aGlzLGU9dGhpcy5zZXJpZXMub3B0aW9uczsoZS5wb2ludC5ldmVudHNbYV18fGIub3B0aW9ucyYmYi5vcHRpb25zLmV2ZW50cyYmYi5vcHRpb25zLmV2ZW50c1thXSkmJmIuaW1wb3J0RXZlbnRzKCk7XCJjbGlja1wiPT09YSYmZS5hbGxvd1BvaW50U2VsZWN0JiYoZD1cbmZ1bmN0aW9uKGEpe2Iuc2VsZWN0JiZiLnNlbGVjdChudWxsLGEuY3RybEtleXx8YS5tZXRhS2V5fHxhLnNoaWZ0S2V5KX0pO3EoYixhLGMsZCl9O2IucHJvdG90eXBlLmdldENsYXNzTmFtZT1mdW5jdGlvbigpe3JldHVyblwiaGlnaGNoYXJ0cy1wb2ludFwiKyh0aGlzLnNlbGVjdGVkP1wiIGhpZ2hjaGFydHMtcG9pbnQtc2VsZWN0XCI6XCJcIikrKHRoaXMubmVnYXRpdmU/XCIgaGlnaGNoYXJ0cy1uZWdhdGl2ZVwiOlwiXCIpKyh0aGlzLmlzTnVsbD9cIiBoaWdoY2hhcnRzLW51bGwtcG9pbnRcIjpcIlwiKSsoXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiB0aGlzLmNvbG9ySW5kZXg/XCIgaGlnaGNoYXJ0cy1jb2xvci1cIit0aGlzLmNvbG9ySW5kZXg6XCJcIikrKHRoaXMub3B0aW9ucy5jbGFzc05hbWU/XCIgXCIrdGhpcy5vcHRpb25zLmNsYXNzTmFtZTpcIlwiKSsodGhpcy56b25lJiZ0aGlzLnpvbmUuY2xhc3NOYW1lP1wiIFwiK3RoaXMuem9uZS5jbGFzc05hbWUucmVwbGFjZShcImhpZ2hjaGFydHMtbmVnYXRpdmVcIixcIlwiKTpcIlwiKX07XG5iLnByb3RvdHlwZS5nZXRHcmFwaGljYWxQcm9wcz1mdW5jdGlvbihhKXt2YXIgYz10aGlzLGQ9W10sYixlPXtzaW5ndWxhcjpbXSxwbHVyYWw6W119O2E9YXx8e2dyYXBoaWM6MSxkYXRhTGFiZWw6MX07YS5ncmFwaGljJiZkLnB1c2goXCJncmFwaGljXCIsXCJ1cHBlckdyYXBoaWNcIixcInNoYWRvd0dyb3VwXCIpO2EuZGF0YUxhYmVsJiZkLnB1c2goXCJkYXRhTGFiZWxcIixcImRhdGFMYWJlbFVwcGVyXCIsXCJjb25uZWN0b3JcIik7Zm9yKGI9ZC5sZW5ndGg7Yi0tOyl7dmFyIGg9ZFtiXTtjW2hdJiZlLnNpbmd1bGFyLnB1c2goaCl9W1wiZGF0YUxhYmVsXCIsXCJjb25uZWN0b3JcIl0uZm9yRWFjaChmdW5jdGlvbihkKXt2YXIgYj1kK1wic1wiO2FbZF0mJmNbYl0mJmUucGx1cmFsLnB1c2goYil9KTtyZXR1cm4gZX07Yi5wcm90b3R5cGUuZ2V0TGFiZWxDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57eDp0aGlzLmNhdGVnb3J5LHk6dGhpcy55LGNvbG9yOnRoaXMuY29sb3IsY29sb3JJbmRleDp0aGlzLmNvbG9ySW5kZXgsXG5rZXk6dGhpcy5uYW1lfHx0aGlzLmNhdGVnb3J5LHNlcmllczp0aGlzLnNlcmllcyxwb2ludDp0aGlzLHBlcmNlbnRhZ2U6dGhpcy5wZXJjZW50YWdlLHRvdGFsOnRoaXMudG90YWx8fHRoaXMuc3RhY2tUb3RhbH19O2IucHJvdG90eXBlLmdldE5lc3RlZFByb3BlcnR5PWZ1bmN0aW9uKGEpe2lmKGEpcmV0dXJuIDA9PT1hLmluZGV4T2YoXCJjdXN0b20uXCIpP2soYSx0aGlzLm9wdGlvbnMpOnRoaXNbYV19O2IucHJvdG90eXBlLmdldFpvbmU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnNlcmllcyxjPWEuem9uZXM7YT1hLnpvbmVBeGlzfHxcInlcIjt2YXIgZD0wLGI7Zm9yKGI9Y1tkXTt0aGlzW2FdPj1iLnZhbHVlOyliPWNbKytkXTt0aGlzLm5vblpvbmVkQ29sb3J8fCh0aGlzLm5vblpvbmVkQ29sb3I9dGhpcy5jb2xvcik7dGhpcy5jb2xvcj1iJiZiLmNvbG9yJiYhdGhpcy5vcHRpb25zLmNvbG9yP2IuY29sb3I6dGhpcy5ub25ab25lZENvbG9yO3JldHVybiBifTtiLnByb3RvdHlwZS5oYXNOZXdTaGFwZVR5cGU9XG5mdW5jdGlvbigpe3JldHVybih0aGlzLmdyYXBoaWMmJih0aGlzLmdyYXBoaWMuc3ltYm9sTmFtZXx8dGhpcy5ncmFwaGljLmVsZW1lbnQubm9kZU5hbWUpKSE9PXRoaXMuc2hhcGVUeXBlfTtiLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGMsZCxiKXt0aGlzLnNlcmllcz1jO3RoaXMuYXBwbHlPcHRpb25zKGQsYik7dGhpcy5pZD12KHRoaXMuaWQpP3RoaXMuaWQ6YSgpO3RoaXMucmVzb2x2ZUNvbG9yKCk7Yy5jaGFydC5wb2ludENvdW50Kys7cSh0aGlzLFwiYWZ0ZXJJbml0XCIpO3JldHVybiB0aGlzfTtiLnByb3RvdHlwZS5vcHRpb25zVG9PYmplY3Q9ZnVuY3Rpb24oYSl7dmFyIGM9e30sZD10aGlzLnNlcmllcyxlPWQub3B0aW9ucy5rZXlzLGg9ZXx8ZC5wb2ludEFycmF5TWFwfHxbXCJ5XCJdLGc9aC5sZW5ndGgsZj0wLHI9MDtpZih1KGEpfHxudWxsPT09YSljW2hbMF1dPWE7ZWxzZSBpZihsKGEpKWZvcighZSYmYS5sZW5ndGg+ZyYmKGQ9dHlwZW9mIGFbMF0sXCJzdHJpbmdcIj09PWQ/Yy5uYW1lPVxuYVswXTpcIm51bWJlclwiPT09ZCYmKGMueD1hWzBdKSxmKyspO3I8ZzspZSYmXCJ1bmRlZmluZWRcIj09PXR5cGVvZiBhW2ZdfHwoMDxoW3JdLmluZGV4T2YoXCIuXCIpP2IucHJvdG90eXBlLnNldE5lc3RlZFByb3BlcnR5KGMsYVtmXSxoW3JdKTpjW2hbcl1dPWFbZl0pLGYrKyxyKys7ZWxzZVwib2JqZWN0XCI9PT10eXBlb2YgYSYmKGM9YSxhLmRhdGFMYWJlbHMmJihkLl9oYXNQb2ludExhYmVscz0hMCksYS5tYXJrZXImJihkLl9oYXNQb2ludE1hcmtlcnM9ITApKTtyZXR1cm4gY307Yi5wcm90b3R5cGUucmVzb2x2ZUNvbG9yPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZXJpZXM7dmFyIGM9YS5jaGFydC5vcHRpb25zLmNoYXJ0LmNvbG9yQ291bnQ7dmFyIGQ9YS5jaGFydC5zdHlsZWRNb2RlO2RlbGV0ZSB0aGlzLm5vblpvbmVkQ29sb3I7aWYoYS5vcHRpb25zLmNvbG9yQnlQb2ludCl7aWYoIWQpe2M9YS5vcHRpb25zLmNvbG9yc3x8YS5jaGFydC5vcHRpb25zLmNvbG9yczt2YXIgYj1jW2EuY29sb3JDb3VudGVyXTtcbmM9Yy5sZW5ndGh9ZD1hLmNvbG9yQ291bnRlcjthLmNvbG9yQ291bnRlcisrO2EuY29sb3JDb3VudGVyPT09YyYmKGEuY29sb3JDb3VudGVyPTApfWVsc2UgZHx8KGI9YS5jb2xvciksZD1hLmNvbG9ySW5kZXg7dGhpcy5jb2xvckluZGV4PW0odGhpcy5vcHRpb25zLmNvbG9ySW5kZXgsZCk7dGhpcy5jb2xvcj1tKHRoaXMub3B0aW9ucy5jb2xvcixiKX07Yi5wcm90b3R5cGUuc2V0TmVzdGVkUHJvcGVydHk9ZnVuY3Rpb24oYSxjLGQpe2Quc3BsaXQoXCIuXCIpLnJlZHVjZShmdW5jdGlvbihhLGQsYixlKXthW2RdPWUubGVuZ3RoLTE9PT1iP2M6bihhW2RdLCEwKT9hW2RdOnt9O3JldHVybiBhW2RdfSxhKTtyZXR1cm4gYX07Yi5wcm90b3R5cGUudG9vbHRpcEZvcm1hdHRlcj1mdW5jdGlvbihhKXt2YXIgYz10aGlzLnNlcmllcyxkPWMudG9vbHRpcE9wdGlvbnMsYj1tKGQudmFsdWVEZWNpbWFscyxcIlwiKSxlPWQudmFsdWVQcmVmaXh8fFwiXCIsaD1kLnZhbHVlU3VmZml4fHxcIlwiO2MuY2hhcnQuc3R5bGVkTW9kZSYmXG4oYT1jLmNoYXJ0LnRvb2x0aXAuc3R5bGVkTW9kZUZvcm1hdChhKSk7KGMucG9pbnRBcnJheU1hcHx8W1wieVwiXSkuZm9yRWFjaChmdW5jdGlvbihjKXtjPVwie3BvaW50LlwiK2M7aWYoZXx8aClhPWEucmVwbGFjZShSZWdFeHAoYytcIn1cIixcImdcIiksZStjK1wifVwiK2gpO2E9YS5yZXBsYWNlKFJlZ0V4cChjK1wifVwiLFwiZ1wiKSxjK1wiOiwuXCIrYitcImZ9XCIpfSk7cmV0dXJuIEIoYSx7cG9pbnQ6dGhpcyxzZXJpZXM6dGhpcy5zZXJpZXN9LGMuY2hhcnQpfTtiLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oYSxjLGQsYil7ZnVuY3Rpb24gZSgpe2guYXBwbHlPcHRpb25zKGEpO3ZhciBiPWYmJmguaGFzRHVtbXlHcmFwaGljO2I9bnVsbD09PWgueT8hYjpiO2YmJmImJihoLmdyYXBoaWM9Zi5kZXN0cm95KCksZGVsZXRlIGguaGFzRHVtbXlHcmFwaGljKTtuKGEsITApJiYoZiYmZi5lbGVtZW50JiZhJiZhLm1hcmtlciYmXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBhLm1hcmtlci5zeW1ib2wmJihoLmdyYXBoaWM9XG5mLmRlc3Ryb3koKSksYSYmYS5kYXRhTGFiZWxzJiZoLmRhdGFMYWJlbCYmKGguZGF0YUxhYmVsPWguZGF0YUxhYmVsLmRlc3Ryb3koKSksaC5jb25uZWN0b3ImJihoLmNvbm5lY3Rvcj1oLmNvbm5lY3Rvci5kZXN0cm95KCkpKTtyPWguaW5kZXg7Zy51cGRhdGVQYXJhbGxlbEFycmF5cyhoLHIpO2suZGF0YVtyXT1uKGsuZGF0YVtyXSwhMCl8fG4oYSwhMCk/aC5vcHRpb25zOm0oYSxrLmRhdGFbcl0pO2cuaXNEaXJ0eT1nLmlzRGlydHlEYXRhPSEwOyFnLmZpeGVkQm94JiZnLmhhc0NhcnRlc2lhblNlcmllcyYmKGwuaXNEaXJ0eUJveD0hMCk7XCJwb2ludFwiPT09ay5sZWdlbmRUeXBlJiYobC5pc0RpcnR5TGVnZW5kPSEwKTtjJiZsLnJlZHJhdyhkKX12YXIgaD10aGlzLGc9aC5zZXJpZXMsZj1oLmdyYXBoaWMscixsPWcuY2hhcnQsaz1nLm9wdGlvbnM7Yz1tKGMsITApOyExPT09Yj9lKCk6aC5maXJlUG9pbnRFdmVudChcInVwZGF0ZVwiLHtvcHRpb25zOmF9LGUpfTtiLnByb3RvdHlwZS5yZW1vdmU9XG5mdW5jdGlvbihhLGMpe3RoaXMuc2VyaWVzLnJlbW92ZVBvaW50KHRoaXMuc2VyaWVzLmRhdGEuaW5kZXhPZih0aGlzKSxhLGMpfTtiLnByb3RvdHlwZS5zZWxlY3Q9ZnVuY3Rpb24oYSxjKXt2YXIgZD10aGlzLGI9ZC5zZXJpZXMsZT1iLmNoYXJ0O3RoaXMuc2VsZWN0ZWRTdGFnaW5nPWE9bShhLCFkLnNlbGVjdGVkKTtkLmZpcmVQb2ludEV2ZW50KGE/XCJzZWxlY3RcIjpcInVuc2VsZWN0XCIse2FjY3VtdWxhdGU6Y30sZnVuY3Rpb24oKXtkLnNlbGVjdGVkPWQub3B0aW9ucy5zZWxlY3RlZD1hO2Iub3B0aW9ucy5kYXRhW2IuZGF0YS5pbmRleE9mKGQpXT1kLm9wdGlvbnM7ZC5zZXRTdGF0ZShhJiZcInNlbGVjdFwiKTtjfHxlLmdldFNlbGVjdGVkUG9pbnRzKCkuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYz1hLnNlcmllczthLnNlbGVjdGVkJiZhIT09ZCYmKGEuc2VsZWN0ZWQ9YS5vcHRpb25zLnNlbGVjdGVkPSExLGMub3B0aW9ucy5kYXRhW2MuZGF0YS5pbmRleE9mKGEpXT1hLm9wdGlvbnMsXG5hLnNldFN0YXRlKGUuaG92ZXJQb2ludHMmJmMub3B0aW9ucy5pbmFjdGl2ZU90aGVyUG9pbnRzP1wiaW5hY3RpdmVcIjpcIlwiKSxhLmZpcmVQb2ludEV2ZW50KFwidW5zZWxlY3RcIikpfSl9KTtkZWxldGUgdGhpcy5zZWxlY3RlZFN0YWdpbmd9O2IucHJvdG90eXBlLm9uTW91c2VPdmVyPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuc2VyaWVzLmNoYXJ0LGQ9Yy5wb2ludGVyO2E9YT9kLm5vcm1hbGl6ZShhKTpkLmdldENoYXJ0Q29vcmRpbmF0ZXNGcm9tUG9pbnQodGhpcyxjLmludmVydGVkKTtkLnJ1blBvaW50QWN0aW9ucyhhLHRoaXMpfTtiLnByb3RvdHlwZS5vbk1vdXNlT3V0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5zZXJpZXMuY2hhcnQ7dGhpcy5maXJlUG9pbnRFdmVudChcIm1vdXNlT3V0XCIpO3RoaXMuc2VyaWVzLm9wdGlvbnMuaW5hY3RpdmVPdGhlclBvaW50c3x8KGEuaG92ZXJQb2ludHN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Euc2V0U3RhdGUoKX0pO2EuaG92ZXJQb2ludHM9YS5ob3ZlclBvaW50PVxubnVsbH07Yi5wcm90b3R5cGUuaW1wb3J0RXZlbnRzPWZ1bmN0aW9uKCl7aWYoIXRoaXMuaGFzSW1wb3J0ZWRFdmVudHMpe3ZhciBhPXRoaXMsYz1KKGEuc2VyaWVzLm9wdGlvbnMucG9pbnQsYS5vcHRpb25zKS5ldmVudHM7YS5ldmVudHM9YztFKGMsZnVuY3Rpb24oYyxkKXtOKGMpJiZ3KGEsZCxjKX0pO3RoaXMuaGFzSW1wb3J0ZWRFdmVudHM9ITB9fTtiLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihhLGMpe3ZhciBiPXRoaXMuc2VyaWVzLGg9dGhpcy5zdGF0ZSxnPWIub3B0aW9ucy5zdGF0ZXNbYXx8XCJub3JtYWxcIl18fHt9LGY9eC5wbG90T3B0aW9uc1tiLnR5cGVdLm1hcmtlciYmYi5vcHRpb25zLm1hcmtlcixyPWYmJiExPT09Zi5lbmFibGVkLGw9ZiYmZi5zdGF0ZXMmJmYuc3RhdGVzW2F8fFwibm9ybWFsXCJdfHx7fSxrPSExPT09bC5lbmFibGVkLG49Yi5zdGF0ZU1hcmtlckdyYXBoaWMscD10aGlzLm1hcmtlcnx8e30sQT1iLmNoYXJ0LHY9Yi5oYWxvLHcsRj1mJiZiLm1hcmtlckF0dHJpYnM7XG5hPWF8fFwiXCI7aWYoIShhPT09dGhpcy5zdGF0ZSYmIWN8fHRoaXMuc2VsZWN0ZWQmJlwic2VsZWN0XCIhPT1hfHwhMT09PWcuZW5hYmxlZHx8YSYmKGt8fHImJiExPT09bC5lbmFibGVkKXx8YSYmcC5zdGF0ZXMmJnAuc3RhdGVzW2FdJiYhMT09PXAuc3RhdGVzW2FdLmVuYWJsZWQpKXt0aGlzLnN0YXRlPWE7RiYmKHc9Yi5tYXJrZXJBdHRyaWJzKHRoaXMsYSkpO2lmKHRoaXMuZ3JhcGhpYyYmIXRoaXMuaGFzRHVtbXlHcmFwaGljKXtoJiZ0aGlzLmdyYXBoaWMucmVtb3ZlQ2xhc3MoXCJoaWdoY2hhcnRzLXBvaW50LVwiK2gpO2EmJnRoaXMuZ3JhcGhpYy5hZGRDbGFzcyhcImhpZ2hjaGFydHMtcG9pbnQtXCIrYSk7aWYoIUEuc3R5bGVkTW9kZSl7dmFyIFM9Yi5wb2ludEF0dHJpYnModGhpcyxhKTt2YXIgSz1tKEEub3B0aW9ucy5jaGFydC5hbmltYXRpb24sZy5hbmltYXRpb24pO2Iub3B0aW9ucy5pbmFjdGl2ZU90aGVyUG9pbnRzJiZ1KFMub3BhY2l0eSkmJigodGhpcy5kYXRhTGFiZWxzfHxbXSkuZm9yRWFjaChmdW5jdGlvbihhKXthJiZcbmEuYW5pbWF0ZSh7b3BhY2l0eTpTLm9wYWNpdHl9LEspfSksdGhpcy5jb25uZWN0b3ImJnRoaXMuY29ubmVjdG9yLmFuaW1hdGUoe29wYWNpdHk6Uy5vcGFjaXR5fSxLKSk7dGhpcy5ncmFwaGljLmFuaW1hdGUoUyxLKX13JiZ0aGlzLmdyYXBoaWMuYW5pbWF0ZSh3LG0oQS5vcHRpb25zLmNoYXJ0LmFuaW1hdGlvbixsLmFuaW1hdGlvbixmLmFuaW1hdGlvbikpO24mJm4uaGlkZSgpfWVsc2V7aWYoYSYmbCl7aD1wLnN5bWJvbHx8Yi5zeW1ib2w7biYmbi5jdXJyZW50U3ltYm9sIT09aCYmKG49bi5kZXN0cm95KCkpO2lmKHcpaWYobiluW2M/XCJhbmltYXRlXCI6XCJhdHRyXCJdKHt4OncueCx5OncueX0pO2Vsc2UgaCYmKGIuc3RhdGVNYXJrZXJHcmFwaGljPW49QS5yZW5kZXJlci5zeW1ib2woaCx3Lngsdy55LHcud2lkdGgsdy5oZWlnaHQpLmFkZChiLm1hcmtlckdyb3VwKSxuLmN1cnJlbnRTeW1ib2w9aCk7IUEuc3R5bGVkTW9kZSYmbiYmbi5hdHRyKGIucG9pbnRBdHRyaWJzKHRoaXMsYSkpfW4mJlxuKG5bYSYmdGhpcy5pc0luc2lkZT9cInNob3dcIjpcImhpZGVcIl0oKSxuLmVsZW1lbnQucG9pbnQ9dGhpcyl9Zz1nLmhhbG87dz0obj10aGlzLmdyYXBoaWN8fG4pJiZuLnZpc2liaWxpdHl8fFwiaW5oZXJpdFwiO2cmJmcuc2l6ZSYmbiYmXCJoaWRkZW5cIiE9PXcmJiF0aGlzLmlzQ2x1c3Rlcj8odnx8KGIuaGFsbz12PUEucmVuZGVyZXIucGF0aCgpLmFkZChuLnBhcmVudEdyb3VwKSksdi5zaG93KClbYz9cImFuaW1hdGVcIjpcImF0dHJcIl0oe2Q6dGhpcy5oYWxvUGF0aChnLnNpemUpfSksdi5hdHRyKHtcImNsYXNzXCI6XCJoaWdoY2hhcnRzLWhhbG8gaGlnaGNoYXJ0cy1jb2xvci1cIittKHRoaXMuY29sb3JJbmRleCxiLmNvbG9ySW5kZXgpKyh0aGlzLmNsYXNzTmFtZT9cIiBcIit0aGlzLmNsYXNzTmFtZTpcIlwiKSx2aXNpYmlsaXR5OncsekluZGV4Oi0xfSksdi5wb2ludD10aGlzLEEuc3R5bGVkTW9kZXx8di5hdHRyKGQoe2ZpbGw6dGhpcy5jb2xvcnx8Yi5jb2xvcixcImZpbGwtb3BhY2l0eVwiOmcub3BhY2l0eX0sXG5lLmZpbHRlclVzZXJBdHRyaWJ1dGVzKGcuYXR0cmlidXRlc3x8e30pKSkpOnYmJnYucG9pbnQmJnYucG9pbnQuaGFsb1BhdGgmJnYuYW5pbWF0ZSh7ZDp2LnBvaW50LmhhbG9QYXRoKDApfSxudWxsLHYuaGlkZSk7cSh0aGlzLFwiYWZ0ZXJTZXRTdGF0ZVwiLHtzdGF0ZTphfSl9fTtiLnByb3RvdHlwZS5oYWxvUGF0aD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5zZXJpZXMuY2hhcnQucmVuZGVyZXIuc3ltYm9scy5jaXJjbGUoTWF0aC5mbG9vcih0aGlzLnBsb3RYKS1hLHRoaXMucGxvdFktYSwyKmEsMiphKX07cmV0dXJuIGJ9KCk7cmV0dXJuIHouUG9pbnQ9Yn0pO08oZSxcIkNvcmUvTGVnZW5kLmpzXCIsW2VbXCJDb3JlL0FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuanNcIl0sZVtcIkNvcmUvRm9ybWF0VXRpbGl0aWVzLmpzXCJdLGVbXCJDb3JlL0dsb2JhbHMuanNcIl0sZVtcIkNvcmUvU2VyaWVzL1BvaW50LmpzXCJdLGVbXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oZSxiLEkseixIKXt2YXIgRD1cbmUuYW5pbU9iamVjdCxDPWUuc2V0QW5pbWF0aW9uLEI9Yi5mb3JtYXQ7ZT1JLmlzRmlyZWZveDt2YXIgeD1JLm1hcmdpbk5hbWVzO2I9SS53aW47dmFyIHc9SC5hZGRFdmVudCx2PUguY3JlYXRlRWxlbWVudCxmPUguY3NzLGQ9SC5kZWZpbmVkLHE9SC5kaXNjYXJkRWxlbWVudCxrPUguZmluZCxsPUguZmlyZUV2ZW50LE49SC5pc051bWJlcix1PUgubWVyZ2Usbj1ILnBpY2ssSj1ILnJlbGF0aXZlTGVuZ3RoLEU9SC5zdGFibGVTb3J0LG09SC5zeW5jVGltZW91dDtIPUgud3JhcDt2YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGMoYSxjKXt0aGlzLmFsbEl0ZW1zPVtdO3RoaXMuY29udGVudEdyb3VwPXRoaXMuYm94PXZvaWQgMDt0aGlzLmRpc3BsYXk9ITE7dGhpcy5ncm91cD12b2lkIDA7dGhpcy5vZmZzZXRXaWR0aD10aGlzLm1heExlZ2VuZFdpZHRoPXRoaXMubWF4SXRlbVdpZHRoPXRoaXMubGVnZW5kV2lkdGg9dGhpcy5sZWdlbmRIZWlnaHQ9dGhpcy5sYXN0TGluZUhlaWdodD10aGlzLmxhc3RJdGVtWT1cbnRoaXMuaXRlbVk9dGhpcy5pdGVtWD10aGlzLml0ZW1NYXJnaW5Ub3A9dGhpcy5pdGVtTWFyZ2luQm90dG9tPXRoaXMuaXRlbUhlaWdodD10aGlzLmluaXRpYWxJdGVtWT0wO3RoaXMub3B0aW9ucz17fTt0aGlzLnBhZGRpbmc9MDt0aGlzLnBhZ2VzPVtdO3RoaXMucHJveGltYXRlPSExO3RoaXMuc2Nyb2xsR3JvdXA9dm9pZCAwO3RoaXMud2lkdGhPcHRpb249dGhpcy50b3RhbEl0ZW1XaWR0aD10aGlzLnRpdGxlSGVpZ2h0PXRoaXMuc3ltYm9sV2lkdGg9dGhpcy5zeW1ib2xIZWlnaHQ9MDt0aGlzLmNoYXJ0PWE7dGhpcy5pbml0KGEsYyl9Yy5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihhLGMpe3RoaXMuY2hhcnQ9YTt0aGlzLnNldE9wdGlvbnMoYyk7Yy5lbmFibGVkJiYodGhpcy5yZW5kZXIoKSx3KHRoaXMuY2hhcnQsXCJlbmRSZXNpemVcIixmdW5jdGlvbigpe3RoaXMubGVnZW5kLnBvc2l0aW9uQ2hlY2tib3hlcygpfSksdGhpcy5wcm94aW1hdGU/dGhpcy51bmNoYXJ0cmVuZGVyPXcodGhpcy5jaGFydCxcblwicmVuZGVyXCIsZnVuY3Rpb24oKXt0aGlzLmxlZ2VuZC5wcm94aW1hdGVQb3NpdGlvbnMoKTt0aGlzLmxlZ2VuZC5wb3NpdGlvbkl0ZW1zKCl9KTp0aGlzLnVuY2hhcnRyZW5kZXImJnRoaXMudW5jaGFydHJlbmRlcigpKX07Yy5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbihhKXt2YXIgYz1uKGEucGFkZGluZyw4KTt0aGlzLm9wdGlvbnM9YTt0aGlzLmNoYXJ0LnN0eWxlZE1vZGV8fCh0aGlzLml0ZW1TdHlsZT1hLml0ZW1TdHlsZSx0aGlzLml0ZW1IaWRkZW5TdHlsZT11KHRoaXMuaXRlbVN0eWxlLGEuaXRlbUhpZGRlblN0eWxlKSk7dGhpcy5pdGVtTWFyZ2luVG9wPWEuaXRlbU1hcmdpblRvcHx8MDt0aGlzLml0ZW1NYXJnaW5Cb3R0b209YS5pdGVtTWFyZ2luQm90dG9tfHwwO3RoaXMucGFkZGluZz1jO3RoaXMuaW5pdGlhbEl0ZW1ZPWMtNTt0aGlzLnN5bWJvbFdpZHRoPW4oYS5zeW1ib2xXaWR0aCwxNik7dGhpcy5wYWdlcz1bXTt0aGlzLnByb3hpbWF0ZT1cInByb3hpbWF0ZVwiPT09XG5hLmxheW91dCYmIXRoaXMuY2hhcnQuaW52ZXJ0ZWQ7dGhpcy5iYXNlbGluZT12b2lkIDB9O2MucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihhLGMpe3ZhciBkPXRoaXMuY2hhcnQ7dGhpcy5zZXRPcHRpb25zKHUoITAsdGhpcy5vcHRpb25zLGEpKTt0aGlzLmRlc3Ryb3koKTtkLmlzRGlydHlMZWdlbmQ9ZC5pc0RpcnR5Qm94PSEwO24oYywhMCkmJmQucmVkcmF3KCk7bCh0aGlzLFwiYWZ0ZXJVcGRhdGVcIil9O2MucHJvdG90eXBlLmNvbG9yaXplSXRlbT1mdW5jdGlvbihhLGMpe2EubGVnZW5kR3JvdXBbYz9cInJlbW92ZUNsYXNzXCI6XCJhZGRDbGFzc1wiXShcImhpZ2hjaGFydHMtbGVnZW5kLWl0ZW0taGlkZGVuXCIpO2lmKCF0aGlzLmNoYXJ0LnN0eWxlZE1vZGUpe3ZhciBkPXRoaXMub3B0aW9ucyxiPWEubGVnZW5kSXRlbSxlPWEubGVnZW5kTGluZSxoPWEubGVnZW5kU3ltYm9sLGc9dGhpcy5pdGVtSGlkZGVuU3R5bGUuY29sb3I7ZD1jP2QuaXRlbVN0eWxlLmNvbG9yOmc7dmFyIGY9Yz9hLmNvbG9yfHxcbmc6ZyxtPWEub3B0aW9ucyYmYS5vcHRpb25zLm1hcmtlcixrPXtmaWxsOmZ9O2ImJmIuY3NzKHtmaWxsOmQsY29sb3I6ZH0pO2UmJmUuYXR0cih7c3Ryb2tlOmZ9KTtoJiYobSYmaC5pc01hcmtlciYmKGs9YS5wb2ludEF0dHJpYnMoKSxjfHwoay5zdHJva2U9ay5maWxsPWcpKSxoLmF0dHIoaykpfWwodGhpcyxcImFmdGVyQ29sb3JpemVJdGVtXCIse2l0ZW06YSx2aXNpYmxlOmN9KX07Yy5wcm90b3R5cGUucG9zaXRpb25JdGVtcz1mdW5jdGlvbigpe3RoaXMuYWxsSXRlbXMuZm9yRWFjaCh0aGlzLnBvc2l0aW9uSXRlbSx0aGlzKTt0aGlzLmNoYXJ0LmlzUmVzaXppbmd8fHRoaXMucG9zaXRpb25DaGVja2JveGVzKCl9O2MucHJvdG90eXBlLnBvc2l0aW9uSXRlbT1mdW5jdGlvbihhKXt2YXIgYz10aGlzLGI9dGhpcy5vcHRpb25zLGU9Yi5zeW1ib2xQYWRkaW5nLGc9IWIucnRsLGY9YS5fbGVnZW5kSXRlbVBvcztiPWZbMF07Zj1mWzFdO3ZhciBrPWEuY2hlY2tib3gsbT1hLmxlZ2VuZEdyb3VwO1xubSYmbS5lbGVtZW50JiYoZT17dHJhbnNsYXRlWDpnP2I6dGhpcy5sZWdlbmRXaWR0aC1iLTIqZS00LHRyYW5zbGF0ZVk6Zn0sZz1mdW5jdGlvbigpe2woYyxcImFmdGVyUG9zaXRpb25JdGVtXCIse2l0ZW06YX0pfSxkKG0udHJhbnNsYXRlWSk/bS5hbmltYXRlKGUsdm9pZCAwLGcpOihtLmF0dHIoZSksZygpKSk7ayYmKGsueD1iLGsueT1mKX07Yy5wcm90b3R5cGUuZGVzdHJveUl0ZW09ZnVuY3Rpb24oYSl7dmFyIGM9YS5jaGVja2JveDtbXCJsZWdlbmRJdGVtXCIsXCJsZWdlbmRMaW5lXCIsXCJsZWdlbmRTeW1ib2xcIixcImxlZ2VuZEdyb3VwXCJdLmZvckVhY2goZnVuY3Rpb24oYyl7YVtjXSYmKGFbY109YVtjXS5kZXN0cm95KCkpfSk7YyYmcShhLmNoZWNrYm94KX07Yy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEoYSl7dGhpc1thXSYmKHRoaXNbYV09dGhpc1thXS5kZXN0cm95KCkpfXRoaXMuZ2V0QWxsSXRlbXMoKS5mb3JFYWNoKGZ1bmN0aW9uKGMpe1tcImxlZ2VuZEl0ZW1cIixcblwibGVnZW5kR3JvdXBcIl0uZm9yRWFjaChhLGMpfSk7XCJjbGlwUmVjdCB1cCBkb3duIHBhZ2VyIG5hdiBib3ggdGl0bGUgZ3JvdXBcIi5zcGxpdChcIiBcIikuZm9yRWFjaChhLHRoaXMpO3RoaXMuZGlzcGxheT1udWxsfTtjLnByb3RvdHlwZS5wb3NpdGlvbkNoZWNrYm94ZXM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmdyb3VwJiZ0aGlzLmdyb3VwLmFsaWduQXR0cixjPXRoaXMuY2xpcEhlaWdodHx8dGhpcy5sZWdlbmRIZWlnaHQsZD10aGlzLnRpdGxlSGVpZ2h0O2lmKGEpe3ZhciBiPWEudHJhbnNsYXRlWTt0aGlzLmFsbEl0ZW1zLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIGg9ZS5jaGVja2JveDtpZihoKXt2YXIgZz1iK2QraC55Kyh0aGlzLnNjcm9sbE9mZnNldHx8MCkrMztmKGgse2xlZnQ6YS50cmFuc2xhdGVYK2UuY2hlY2tib3hPZmZzZXQraC54LTIwK1wicHhcIix0b3A6ZytcInB4XCIsZGlzcGxheTp0aGlzLnByb3hpbWF0ZXx8Zz5iLTYmJmc8YitjLTY/XCJcIjpcIm5vbmVcIn0pfX0sdGhpcyl9fTtcbmMucHJvdG90eXBlLnJlbmRlclRpdGxlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcHRpb25zLGM9dGhpcy5wYWRkaW5nLGQ9YS50aXRsZSxiPTA7ZC50ZXh0JiYodGhpcy50aXRsZXx8KHRoaXMudGl0bGU9dGhpcy5jaGFydC5yZW5kZXJlci5sYWJlbChkLnRleHQsYy0zLGMtNCxudWxsLG51bGwsbnVsbCxhLnVzZUhUTUwsbnVsbCxcImxlZ2VuZC10aXRsZVwiKS5hdHRyKHt6SW5kZXg6MX0pLHRoaXMuY2hhcnQuc3R5bGVkTW9kZXx8dGhpcy50aXRsZS5jc3MoZC5zdHlsZSksdGhpcy50aXRsZS5hZGQodGhpcy5ncm91cCkpLGQud2lkdGh8fHRoaXMudGl0bGUuY3NzKHt3aWR0aDp0aGlzLm1heExlZ2VuZFdpZHRoK1wicHhcIn0pLGE9dGhpcy50aXRsZS5nZXRCQm94KCksYj1hLmhlaWdodCx0aGlzLm9mZnNldFdpZHRoPWEud2lkdGgsdGhpcy5jb250ZW50R3JvdXAuYXR0cih7dHJhbnNsYXRlWTpifSkpO3RoaXMudGl0bGVIZWlnaHQ9Yn07Yy5wcm90b3R5cGUuc2V0VGV4dD1mdW5jdGlvbihhKXt2YXIgYz1cbnRoaXMub3B0aW9uczthLmxlZ2VuZEl0ZW0uYXR0cih7dGV4dDpjLmxhYmVsRm9ybWF0P0IoYy5sYWJlbEZvcm1hdCxhLHRoaXMuY2hhcnQpOmMubGFiZWxGb3JtYXR0ZXIuY2FsbChhKX0pfTtjLnByb3RvdHlwZS5yZW5kZXJJdGVtPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuY2hhcnQsZD1jLnJlbmRlcmVyLGI9dGhpcy5vcHRpb25zLGU9dGhpcy5zeW1ib2xXaWR0aCxnPWIuc3ltYm9sUGFkZGluZ3x8MCxmPXRoaXMuaXRlbVN0eWxlLGw9dGhpcy5pdGVtSGlkZGVuU3R5bGUsaz1cImhvcml6b250YWxcIj09PWIubGF5b3V0P24oYi5pdGVtRGlzdGFuY2UsMjApOjAsbT0hYi5ydGwscT1hLmxlZ2VuZEl0ZW0sdD0hYS5zZXJpZXMscD0hdCYmYS5zZXJpZXMuZHJhd0xlZ2VuZFN5bWJvbD9hLnNlcmllczphLHY9cC5vcHRpb25zLHc9dGhpcy5jcmVhdGVDaGVja2JveEZvckl0ZW0mJnYmJnYuc2hvd0NoZWNrYm94O3Y9ZStnK2srKHc/MjA6MCk7dmFyIEU9Yi51c2VIVE1MLEY9YS5vcHRpb25zLmNsYXNzTmFtZTtcbnF8fChhLmxlZ2VuZEdyb3VwPWQuZyhcImxlZ2VuZC1pdGVtXCIpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1cIitwLnR5cGUrXCItc2VyaWVzIGhpZ2hjaGFydHMtY29sb3ItXCIrYS5jb2xvckluZGV4KyhGP1wiIFwiK0Y6XCJcIikrKHQ/XCIgaGlnaGNoYXJ0cy1zZXJpZXMtXCIrYS5pbmRleDpcIlwiKSkuYXR0cih7ekluZGV4OjF9KS5hZGQodGhpcy5zY3JvbGxHcm91cCksYS5sZWdlbmRJdGVtPXE9ZC50ZXh0KFwiXCIsbT9lK2c6LWcsdGhpcy5iYXNlbGluZXx8MCxFKSxjLnN0eWxlZE1vZGV8fHEuY3NzKHUoYS52aXNpYmxlP2Y6bCkpLHEuYXR0cih7YWxpZ246bT9cImxlZnRcIjpcInJpZ2h0XCIsekluZGV4OjJ9KS5hZGQoYS5sZWdlbmRHcm91cCksdGhpcy5iYXNlbGluZXx8KHRoaXMuZm9udE1ldHJpY3M9ZC5mb250TWV0cmljcyhjLnN0eWxlZE1vZGU/MTI6Zi5mb250U2l6ZSxxKSx0aGlzLmJhc2VsaW5lPXRoaXMuZm9udE1ldHJpY3MuZiszK3RoaXMuaXRlbU1hcmdpblRvcCxxLmF0dHIoXCJ5XCIsdGhpcy5iYXNlbGluZSksXG50aGlzLnN5bWJvbEhlaWdodD1iLnN5bWJvbEhlaWdodHx8dGhpcy5mb250TWV0cmljcy5mLGIuc3F1YXJlU3ltYm9sJiYodGhpcy5zeW1ib2xXaWR0aD1uKGIuc3ltYm9sV2lkdGgsTWF0aC5tYXgodGhpcy5zeW1ib2xIZWlnaHQsMTYpKSx2PXRoaXMuc3ltYm9sV2lkdGgrZytrKyh3PzIwOjApLG0mJnEuYXR0cihcInhcIix0aGlzLnN5bWJvbFdpZHRoK2cpKSkscC5kcmF3TGVnZW5kU3ltYm9sKHRoaXMsYSksdGhpcy5zZXRJdGVtRXZlbnRzJiZ0aGlzLnNldEl0ZW1FdmVudHMoYSxxLEUpKTt3JiYhYS5jaGVja2JveCYmdGhpcy5jcmVhdGVDaGVja2JveEZvckl0ZW0mJnRoaXMuY3JlYXRlQ2hlY2tib3hGb3JJdGVtKGEpO3RoaXMuY29sb3JpemVJdGVtKGEsYS52aXNpYmxlKTshYy5zdHlsZWRNb2RlJiZmLndpZHRofHxxLmNzcyh7d2lkdGg6KGIuaXRlbVdpZHRofHx0aGlzLndpZHRoT3B0aW9ufHxjLnNwYWNpbmdCb3gud2lkdGgpLXYrXCJweFwifSk7dGhpcy5zZXRUZXh0KGEpO2M9cS5nZXRCQm94KCk7XG5hLml0ZW1XaWR0aD1hLmNoZWNrYm94T2Zmc2V0PWIuaXRlbVdpZHRofHxhLmxlZ2VuZEl0ZW1XaWR0aHx8Yy53aWR0aCt2O3RoaXMubWF4SXRlbVdpZHRoPU1hdGgubWF4KHRoaXMubWF4SXRlbVdpZHRoLGEuaXRlbVdpZHRoKTt0aGlzLnRvdGFsSXRlbVdpZHRoKz1hLml0ZW1XaWR0aDt0aGlzLml0ZW1IZWlnaHQ9YS5pdGVtSGVpZ2h0PU1hdGgucm91bmQoYS5sZWdlbmRJdGVtSGVpZ2h0fHxjLmhlaWdodHx8dGhpcy5zeW1ib2xIZWlnaHQpfTtjLnByb3RvdHlwZS5sYXlvdXRJdGVtPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMub3B0aW9ucyxkPXRoaXMucGFkZGluZyxiPVwiaG9yaXpvbnRhbFwiPT09Yy5sYXlvdXQsZT1hLml0ZW1IZWlnaHQsZz10aGlzLml0ZW1NYXJnaW5Cb3R0b20sZj10aGlzLml0ZW1NYXJnaW5Ub3AsbD1iP24oYy5pdGVtRGlzdGFuY2UsMjApOjAsbT10aGlzLm1heExlZ2VuZFdpZHRoO2M9Yy5hbGlnbkNvbHVtbnMmJnRoaXMudG90YWxJdGVtV2lkdGg+bT90aGlzLm1heEl0ZW1XaWR0aDpcbmEuaXRlbVdpZHRoO2ImJnRoaXMuaXRlbVgtZCtjPm0mJih0aGlzLml0ZW1YPWQsdGhpcy5sYXN0TGluZUhlaWdodCYmKHRoaXMuaXRlbVkrPWYrdGhpcy5sYXN0TGluZUhlaWdodCtnKSx0aGlzLmxhc3RMaW5lSGVpZ2h0PTApO3RoaXMubGFzdEl0ZW1ZPWYrdGhpcy5pdGVtWStnO3RoaXMubGFzdExpbmVIZWlnaHQ9TWF0aC5tYXgoZSx0aGlzLmxhc3RMaW5lSGVpZ2h0KTthLl9sZWdlbmRJdGVtUG9zPVt0aGlzLml0ZW1YLHRoaXMuaXRlbVldO2I/dGhpcy5pdGVtWCs9YzoodGhpcy5pdGVtWSs9ZitlK2csdGhpcy5sYXN0TGluZUhlaWdodD1lKTt0aGlzLm9mZnNldFdpZHRoPXRoaXMud2lkdGhPcHRpb258fE1hdGgubWF4KChiP3RoaXMuaXRlbVgtZC0oYS5jaGVja2JveD8wOmwpOmMpK2QsdGhpcy5vZmZzZXRXaWR0aCl9O2MucHJvdG90eXBlLmdldEFsbEl0ZW1zPWZ1bmN0aW9uKCl7dmFyIGE9W107dGhpcy5jaGFydC5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgYj1jJiZcbmMub3B0aW9ucztjJiZuKGIuc2hvd0luTGVnZW5kLGQoYi5saW5rZWRUbyk/ITE6dm9pZCAwLCEwKSYmKGE9YS5jb25jYXQoYy5sZWdlbmRJdGVtc3x8KFwicG9pbnRcIj09PWIubGVnZW5kVHlwZT9jLmRhdGE6YykpKX0pO2wodGhpcyxcImFmdGVyR2V0QWxsSXRlbXNcIix7YWxsSXRlbXM6YX0pO3JldHVybiBhfTtjLnByb3RvdHlwZS5nZXRBbGlnbm1lbnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMucHJveGltYXRlP2EuYWxpZ24uY2hhckF0KDApK1widHZcIjphLmZsb2F0aW5nP1wiXCI6YS5hbGlnbi5jaGFyQXQoMCkrYS52ZXJ0aWNhbEFsaWduLmNoYXJBdCgwKSthLmxheW91dC5jaGFyQXQoMCl9O2MucHJvdG90eXBlLmFkanVzdE1hcmdpbnM9ZnVuY3Rpb24oYSxjKXt2YXIgYj10aGlzLmNoYXJ0LGU9dGhpcy5vcHRpb25zLGg9dGhpcy5nZXRBbGlnbm1lbnQoKTtoJiZbLyhsdGh8Y3R8cnRoKS8sLyhydHZ8cm18cmJ2KS8sLyhyYmh8Y2J8bGJoKS8sLyhsYnZ8bG18bHR2KS9dLmZvckVhY2goZnVuY3Rpb24oZyxcbmYpe2cudGVzdChoKSYmIWQoYVtmXSkmJihiW3hbZl1dPU1hdGgubWF4KGJbeFtmXV0sYi5sZWdlbmRbKGYrMSklMj9cImxlZ2VuZEhlaWdodFwiOlwibGVnZW5kV2lkdGhcIl0rWzEsLTEsLTEsMV1bZl0qZVtmJTI/XCJ4XCI6XCJ5XCJdK24oZS5tYXJnaW4sMTIpK2NbZl0rKGIudGl0bGVPZmZzZXRbZl18fDApKSl9KX07Yy5wcm90b3R5cGUucHJveGltYXRlUG9zaXRpb25zPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jaGFydCxjPVtdLGQ9XCJsZWZ0XCI9PT10aGlzLm9wdGlvbnMuYWxpZ247dGhpcy5hbGxJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGIpe3ZhciBlO3ZhciBoPWQ7aWYoYi55QXhpcyl7Yi54QXhpcy5vcHRpb25zLnJldmVyc2VkJiYoaD0haCk7Yi5wb2ludHMmJihlPWsoaD9iLnBvaW50czpiLnBvaW50cy5zbGljZSgwKS5yZXZlcnNlKCksZnVuY3Rpb24oYSl7cmV0dXJuIE4oYS5wbG90WSl9KSk7aD10aGlzLml0ZW1NYXJnaW5Ub3ArYi5sZWdlbmRJdGVtLmdldEJCb3goKS5oZWlnaHQrdGhpcy5pdGVtTWFyZ2luQm90dG9tO1xudmFyIGc9Yi55QXhpcy50b3AtYS5wbG90VG9wO2IudmlzaWJsZT8oZT1lP2UucGxvdFk6Yi55QXhpcy5oZWlnaHQsZSs9Zy0uMypoKTplPWcrYi55QXhpcy5oZWlnaHQ7Yy5wdXNoKHt0YXJnZXQ6ZSxzaXplOmgsaXRlbTpifSl9fSx0aGlzKTtJLmRpc3RyaWJ1dGUoYyxhLnBsb3RIZWlnaHQpO2MuZm9yRWFjaChmdW5jdGlvbihjKXtjLml0ZW0uX2xlZ2VuZEl0ZW1Qb3NbMV09YS5wbG90VG9wLWEuc3BhY2luZ1swXStjLnBvc30pfTtjLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNoYXJ0LGM9YS5yZW5kZXJlcixkPXRoaXMuZ3JvdXAsYj10aGlzLmJveCxlPXRoaXMub3B0aW9ucyxnPXRoaXMucGFkZGluZzt0aGlzLml0ZW1YPWc7dGhpcy5pdGVtWT10aGlzLmluaXRpYWxJdGVtWTt0aGlzLmxhc3RJdGVtWT10aGlzLm9mZnNldFdpZHRoPTA7dGhpcy53aWR0aE9wdGlvbj1KKGUud2lkdGgsYS5zcGFjaW5nQm94LndpZHRoLWcpO3ZhciBmPWEuc3BhY2luZ0JveC53aWR0aC1cbjIqZy1lLng7LTE8W1wicm1cIixcImxtXCJdLmluZGV4T2YodGhpcy5nZXRBbGlnbm1lbnQoKS5zdWJzdHJpbmcoMCwyKSkmJihmLz0yKTt0aGlzLm1heExlZ2VuZFdpZHRoPXRoaXMud2lkdGhPcHRpb258fGY7ZHx8KHRoaXMuZ3JvdXA9ZD1jLmcoXCJsZWdlbmRcIikuYXR0cih7ekluZGV4Ojd9KS5hZGQoKSx0aGlzLmNvbnRlbnRHcm91cD1jLmcoKS5hdHRyKHt6SW5kZXg6MX0pLmFkZChkKSx0aGlzLnNjcm9sbEdyb3VwPWMuZygpLmFkZCh0aGlzLmNvbnRlbnRHcm91cCkpO3RoaXMucmVuZGVyVGl0bGUoKTt2YXIgbT10aGlzLmdldEFsbEl0ZW1zKCk7RShtLGZ1bmN0aW9uKGEsYyl7cmV0dXJuKGEub3B0aW9ucyYmYS5vcHRpb25zLmxlZ2VuZEluZGV4fHwwKS0oYy5vcHRpb25zJiZjLm9wdGlvbnMubGVnZW5kSW5kZXh8fDApfSk7ZS5yZXZlcnNlZCYmbS5yZXZlcnNlKCk7dGhpcy5hbGxJdGVtcz1tO3RoaXMuZGlzcGxheT1mPSEhbS5sZW5ndGg7dGhpcy5pdGVtSGVpZ2h0PXRoaXMudG90YWxJdGVtV2lkdGg9XG50aGlzLm1heEl0ZW1XaWR0aD10aGlzLmxhc3RMaW5lSGVpZ2h0PTA7bS5mb3JFYWNoKHRoaXMucmVuZGVySXRlbSx0aGlzKTttLmZvckVhY2godGhpcy5sYXlvdXRJdGVtLHRoaXMpO209KHRoaXMud2lkdGhPcHRpb258fHRoaXMub2Zmc2V0V2lkdGgpK2c7dmFyIGs9dGhpcy5sYXN0SXRlbVkrdGhpcy5sYXN0TGluZUhlaWdodCt0aGlzLnRpdGxlSGVpZ2h0O2s9dGhpcy5oYW5kbGVPdmVyZmxvdyhrKTtrKz1nO2J8fCh0aGlzLmJveD1iPWMucmVjdCgpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1sZWdlbmQtYm94XCIpLmF0dHIoe3I6ZS5ib3JkZXJSYWRpdXN9KS5hZGQoZCksYi5pc05ldz0hMCk7YS5zdHlsZWRNb2RlfHxiLmF0dHIoe3N0cm9rZTplLmJvcmRlckNvbG9yLFwic3Ryb2tlLXdpZHRoXCI6ZS5ib3JkZXJXaWR0aHx8MCxmaWxsOmUuYmFja2dyb3VuZENvbG9yfHxcIm5vbmVcIn0pLnNoYWRvdyhlLnNoYWRvdyk7MDxtJiYwPGsmJihiW2IuaXNOZXc/XCJhdHRyXCI6XCJhbmltYXRlXCJdKGIuY3Jpc3AuY2FsbCh7fSxcbnt4OjAseTowLHdpZHRoOm0saGVpZ2h0Omt9LGIuc3Ryb2tlV2lkdGgoKSkpLGIuaXNOZXc9ITEpO2JbZj9cInNob3dcIjpcImhpZGVcIl0oKTthLnN0eWxlZE1vZGUmJlwibm9uZVwiPT09ZC5nZXRTdHlsZShcImRpc3BsYXlcIikmJihtPWs9MCk7dGhpcy5sZWdlbmRXaWR0aD1tO3RoaXMubGVnZW5kSGVpZ2h0PWs7ZiYmdGhpcy5hbGlnbigpO3RoaXMucHJveGltYXRlfHx0aGlzLnBvc2l0aW9uSXRlbXMoKTtsKHRoaXMsXCJhZnRlclJlbmRlclwiKX07Yy5wcm90b3R5cGUuYWxpZ249ZnVuY3Rpb24oYSl7dm9pZCAwPT09YSYmKGE9dGhpcy5jaGFydC5zcGFjaW5nQm94KTt2YXIgYz10aGlzLmNoYXJ0LGQ9dGhpcy5vcHRpb25zLGI9YS55Oy8obHRofGN0fHJ0aCkvLnRlc3QodGhpcy5nZXRBbGlnbm1lbnQoKSkmJjA8Yy50aXRsZU9mZnNldFswXT9iKz1jLnRpdGxlT2Zmc2V0WzBdOi8obGJofGNifHJiaCkvLnRlc3QodGhpcy5nZXRBbGlnbm1lbnQoKSkmJjA8Yy50aXRsZU9mZnNldFsyXSYmKGItPWMudGl0bGVPZmZzZXRbMl0pO1xuYiE9PWEueSYmKGE9dShhLHt5OmJ9KSk7dGhpcy5ncm91cC5hbGlnbih1KGQse3dpZHRoOnRoaXMubGVnZW5kV2lkdGgsaGVpZ2h0OnRoaXMubGVnZW5kSGVpZ2h0LHZlcnRpY2FsQWxpZ246dGhpcy5wcm94aW1hdGU/XCJ0b3BcIjpkLnZlcnRpY2FsQWxpZ259KSwhMCxhKX07Yy5wcm90b3R5cGUuaGFuZGxlT3ZlcmZsb3c9ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcyxkPXRoaXMuY2hhcnQsYj1kLnJlbmRlcmVyLGU9dGhpcy5vcHRpb25zLGc9ZS55LGY9dGhpcy5wYWRkaW5nO2c9ZC5zcGFjaW5nQm94LmhlaWdodCsoXCJ0b3BcIj09PWUudmVydGljYWxBbGlnbj8tZzpnKS1mO3ZhciBtPWUubWF4SGVpZ2h0LGssbD10aGlzLmNsaXBSZWN0LHE9ZS5uYXZpZ2F0aW9uLHQ9bihxLmFuaW1hdGlvbiwhMCkscD1xLmFycm93U2l6ZXx8MTIsdT10aGlzLm5hdix2PXRoaXMucGFnZXMsdyxGPXRoaXMuYWxsSXRlbXMsUz1mdW5jdGlvbihhKXtcIm51bWJlclwiPT09dHlwZW9mIGE/bC5hdHRyKHtoZWlnaHQ6YX0pOlxubCYmKGMuY2xpcFJlY3Q9bC5kZXN0cm95KCksYy5jb250ZW50R3JvdXAuY2xpcCgpKTtjLmNvbnRlbnRHcm91cC5kaXYmJihjLmNvbnRlbnRHcm91cC5kaXYuc3R5bGUuY2xpcD1hP1wicmVjdChcIitmK1wicHgsOTk5OXB4LFwiKyhmK2EpK1wicHgsMClcIjpcImF1dG9cIil9LEs9ZnVuY3Rpb24oYSl7Y1thXT1iLmNpcmNsZSgwLDAsMS4zKnApLnRyYW5zbGF0ZShwLzIscC8yKS5hZGQodSk7ZC5zdHlsZWRNb2RlfHxjW2FdLmF0dHIoXCJmaWxsXCIsXCJyZ2JhKDAsMCwwLDAuMDAwMSlcIik7cmV0dXJuIGNbYV19O1wiaG9yaXpvbnRhbFwiIT09ZS5sYXlvdXR8fFwibWlkZGxlXCI9PT1lLnZlcnRpY2FsQWxpZ258fGUuZmxvYXRpbmd8fChnLz0yKTttJiYoZz1NYXRoLm1pbihnLG0pKTt2Lmxlbmd0aD0wO2EmJjA8ZyYmYT5nJiYhMSE9PXEuZW5hYmxlZD8odGhpcy5jbGlwSGVpZ2h0PWs9TWF0aC5tYXgoZy0yMC10aGlzLnRpdGxlSGVpZ2h0LWYsMCksdGhpcy5jdXJyZW50UGFnZT1uKHRoaXMuY3VycmVudFBhZ2UsXG4xKSx0aGlzLmZ1bGxIZWlnaHQ9YSxGLmZvckVhY2goZnVuY3Rpb24oYSxjKXt2YXIgZD1hLl9sZWdlbmRJdGVtUG9zWzFdLGI9TWF0aC5yb3VuZChhLmxlZ2VuZEl0ZW0uZ2V0QkJveCgpLmhlaWdodCksZT12Lmxlbmd0aDtpZighZXx8ZC12W2UtMV0+ayYmKHd8fGQpIT09dltlLTFdKXYucHVzaCh3fHxkKSxlKys7YS5wYWdlSXg9ZS0xO3cmJihGW2MtMV0ucGFnZUl4PWUtMSk7Yz09PUYubGVuZ3RoLTEmJmQrYi12W2UtMV0+ayYmZCE9PXcmJih2LnB1c2goZCksYS5wYWdlSXg9ZSk7ZCE9PXcmJih3PWQpfSksbHx8KGw9Yy5jbGlwUmVjdD1iLmNsaXBSZWN0KDAsZiw5OTk5LDApLGMuY29udGVudEdyb3VwLmNsaXAobCkpLFMoayksdXx8KHRoaXMubmF2PXU9Yi5nKCkuYXR0cih7ekluZGV4OjF9KS5hZGQodGhpcy5ncm91cCksdGhpcy51cD1iLnN5bWJvbChcInRyaWFuZ2xlXCIsMCwwLHAscCkuYWRkKHUpLEsoXCJ1cFRyYWNrZXJcIikub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7Yy5zY3JvbGwoLTEsXG50KX0pLHRoaXMucGFnZXI9Yi50ZXh0KFwiXCIsMTUsMTApLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1sZWdlbmQtbmF2aWdhdGlvblwiKSxkLnN0eWxlZE1vZGV8fHRoaXMucGFnZXIuY3NzKHEuc3R5bGUpLHRoaXMucGFnZXIuYWRkKHUpLHRoaXMuZG93bj1iLnN5bWJvbChcInRyaWFuZ2xlLWRvd25cIiwwLDAscCxwKS5hZGQodSksSyhcImRvd25UcmFja2VyXCIpLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpe2Muc2Nyb2xsKDEsdCl9KSksYy5zY3JvbGwoMCksYT1nKTp1JiYoUygpLHRoaXMubmF2PXUuZGVzdHJveSgpLHRoaXMuc2Nyb2xsR3JvdXAuYXR0cih7dHJhbnNsYXRlWToxfSksdGhpcy5jbGlwSGVpZ2h0PTApO3JldHVybiBhfTtjLnByb3RvdHlwZS5zY3JvbGw9ZnVuY3Rpb24oYSxjKXt2YXIgZD10aGlzLGI9dGhpcy5jaGFydCxlPXRoaXMucGFnZXMsaD1lLmxlbmd0aCxnPXRoaXMuY3VycmVudFBhZ2UrYTthPXRoaXMuY2xpcEhlaWdodDt2YXIgZj10aGlzLm9wdGlvbnMubmF2aWdhdGlvbixrPVxudGhpcy5wYWdlcixxPXRoaXMucGFkZGluZztnPmgmJihnPWgpOzA8ZyYmKFwidW5kZWZpbmVkXCIhPT10eXBlb2YgYyYmQyhjLGIpLHRoaXMubmF2LmF0dHIoe3RyYW5zbGF0ZVg6cSx0cmFuc2xhdGVZOmErdGhpcy5wYWRkaW5nKzcrdGhpcy50aXRsZUhlaWdodCx2aXNpYmlsaXR5OlwidmlzaWJsZVwifSksW3RoaXMudXAsdGhpcy51cFRyYWNrZXJdLmZvckVhY2goZnVuY3Rpb24oYSl7YS5hdHRyKHtcImNsYXNzXCI6MT09PWc/XCJoaWdoY2hhcnRzLWxlZ2VuZC1uYXYtaW5hY3RpdmVcIjpcImhpZ2hjaGFydHMtbGVnZW5kLW5hdi1hY3RpdmVcIn0pfSksay5hdHRyKHt0ZXh0OmcrXCIvXCIraH0pLFt0aGlzLmRvd24sdGhpcy5kb3duVHJhY2tlcl0uZm9yRWFjaChmdW5jdGlvbihhKXthLmF0dHIoe3g6MTgrdGhpcy5wYWdlci5nZXRCQm94KCkud2lkdGgsXCJjbGFzc1wiOmc9PT1oP1wiaGlnaGNoYXJ0cy1sZWdlbmQtbmF2LWluYWN0aXZlXCI6XCJoaWdoY2hhcnRzLWxlZ2VuZC1uYXYtYWN0aXZlXCJ9KX0sdGhpcyksXG5iLnN0eWxlZE1vZGV8fCh0aGlzLnVwLmF0dHIoe2ZpbGw6MT09PWc/Zi5pbmFjdGl2ZUNvbG9yOmYuYWN0aXZlQ29sb3J9KSx0aGlzLnVwVHJhY2tlci5jc3Moe2N1cnNvcjoxPT09Zz9cImRlZmF1bHRcIjpcInBvaW50ZXJcIn0pLHRoaXMuZG93bi5hdHRyKHtmaWxsOmc9PT1oP2YuaW5hY3RpdmVDb2xvcjpmLmFjdGl2ZUNvbG9yfSksdGhpcy5kb3duVHJhY2tlci5jc3Moe2N1cnNvcjpnPT09aD9cImRlZmF1bHRcIjpcInBvaW50ZXJcIn0pKSx0aGlzLnNjcm9sbE9mZnNldD0tZVtnLTFdK3RoaXMuaW5pdGlhbEl0ZW1ZLHRoaXMuc2Nyb2xsR3JvdXAuYW5pbWF0ZSh7dHJhbnNsYXRlWTp0aGlzLnNjcm9sbE9mZnNldH0pLHRoaXMuY3VycmVudFBhZ2U9Zyx0aGlzLnBvc2l0aW9uQ2hlY2tib3hlcygpLGM9RChuKGMsYi5yZW5kZXJlci5nbG9iYWxBbmltYXRpb24sITApKSxtKGZ1bmN0aW9uKCl7bChkLFwiYWZ0ZXJTY3JvbGxcIix7Y3VycmVudFBhZ2U6Z30pfSxjLmR1cmF0aW9uKSl9O2MucHJvdG90eXBlLnNldEl0ZW1FdmVudHM9XG5mdW5jdGlvbihhLGMsZCl7dmFyIGI9dGhpcyxlPWIuY2hhcnQucmVuZGVyZXIuYm94V3JhcHBlcixoPWEgaW5zdGFuY2VvZiB6LGc9XCJoaWdoY2hhcnRzLWxlZ2VuZC1cIisoaD9cInBvaW50XCI6XCJzZXJpZXNcIikrXCItYWN0aXZlXCIsZj1iLmNoYXJ0LnN0eWxlZE1vZGU7KGQ/W2MsYS5sZWdlbmRTeW1ib2xdOlthLmxlZ2VuZEdyb3VwXSkuZm9yRWFjaChmdW5jdGlvbihkKXtpZihkKWQub24oXCJtb3VzZW92ZXJcIixmdW5jdGlvbigpe2EudmlzaWJsZSYmYi5hbGxJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGMpe2EhPT1jJiZjLnNldFN0YXRlKFwiaW5hY3RpdmVcIiwhaCl9KTthLnNldFN0YXRlKFwiaG92ZXJcIik7YS52aXNpYmxlJiZlLmFkZENsYXNzKGcpO2Z8fGMuY3NzKGIub3B0aW9ucy5pdGVtSG92ZXJTdHlsZSl9KS5vbihcIm1vdXNlb3V0XCIsZnVuY3Rpb24oKXtiLmNoYXJ0LnN0eWxlZE1vZGV8fGMuY3NzKHUoYS52aXNpYmxlP2IuaXRlbVN0eWxlOmIuaXRlbUhpZGRlblN0eWxlKSk7Yi5hbGxJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGMpe2EhPT1cbmMmJmMuc2V0U3RhdGUoXCJcIiwhaCl9KTtlLnJlbW92ZUNsYXNzKGcpO2Euc2V0U3RhdGUoKX0pLm9uKFwiY2xpY2tcIixmdW5jdGlvbihjKXt2YXIgZD1mdW5jdGlvbigpe2Euc2V0VmlzaWJsZSYmYS5zZXRWaXNpYmxlKCk7Yi5hbGxJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uKGMpe2EhPT1jJiZjLnNldFN0YXRlKGEudmlzaWJsZT9cImluYWN0aXZlXCI6XCJcIiwhaCl9KX07ZS5yZW1vdmVDbGFzcyhnKTtjPXticm93c2VyRXZlbnQ6Y307YS5maXJlUG9pbnRFdmVudD9hLmZpcmVQb2ludEV2ZW50KFwibGVnZW5kSXRlbUNsaWNrXCIsYyxkKTpsKGEsXCJsZWdlbmRJdGVtQ2xpY2tcIixjLGQpfSl9KX07Yy5wcm90b3R5cGUuY3JlYXRlQ2hlY2tib3hGb3JJdGVtPWZ1bmN0aW9uKGEpe2EuY2hlY2tib3g9dihcImlucHV0XCIse3R5cGU6XCJjaGVja2JveFwiLGNsYXNzTmFtZTpcImhpZ2hjaGFydHMtbGVnZW5kLWNoZWNrYm94XCIsY2hlY2tlZDphLnNlbGVjdGVkLGRlZmF1bHRDaGVja2VkOmEuc2VsZWN0ZWR9LHRoaXMub3B0aW9ucy5pdGVtQ2hlY2tib3hTdHlsZSxcbnRoaXMuY2hhcnQuY29udGFpbmVyKTt3KGEuY2hlY2tib3gsXCJjbGlja1wiLGZ1bmN0aW9uKGMpe2woYS5zZXJpZXN8fGEsXCJjaGVja2JveENsaWNrXCIse2NoZWNrZWQ6Yy50YXJnZXQuY2hlY2tlZCxpdGVtOmF9LGZ1bmN0aW9uKCl7YS5zZWxlY3QoKX0pfSl9O3JldHVybiBjfSgpOygvVHJpZGVudFxcLzdcXC4wLy50ZXN0KGIubmF2aWdhdG9yJiZiLm5hdmlnYXRvci51c2VyQWdlbnQpfHxlKSYmSChjLnByb3RvdHlwZSxcInBvc2l0aW9uSXRlbVwiLGZ1bmN0aW9uKGMsYSl7dmFyIGQ9dGhpcyxiPWZ1bmN0aW9uKCl7YS5fbGVnZW5kSXRlbVBvcyYmYy5jYWxsKGQsYSl9O2IoKTtkLmJ1YmJsZUxlZ2VuZHx8c2V0VGltZW91dChiKX0pO0kuTGVnZW5kPWM7cmV0dXJuIEkuTGVnZW5kfSk7TyhlLFwiQ29yZS9TZXJpZXMvU2VyaWVzUmVnaXN0cnkuanNcIixbZVtcIkNvcmUvR2xvYmFscy5qc1wiXSxlW1wiQ29yZS9PcHRpb25zLmpzXCJdLGVbXCJDb3JlL1Nlcmllcy9Qb2ludC5qc1wiXSxlW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLFxuZnVuY3Rpb24oZSxiLEkseil7dmFyIEQ9Yi5kZWZhdWx0T3B0aW9ucyxHPXouZXJyb3IsQz16LmV4dGVuZENsYXNzLEI9ei5tZXJnZSx4OyhmdW5jdGlvbihiKXtmdW5jdGlvbiB2KGUsZCl7dmFyIGY9RC5wbG90T3B0aW9uc3x8e30saz1kLmRlZmF1bHRPcHRpb25zO2QucHJvdG90eXBlLnBvaW50Q2xhc3N8fChkLnByb3RvdHlwZS5wb2ludENsYXNzPUkpO2QucHJvdG90eXBlLnR5cGU9ZTtrJiYoZltlXT1rKTtiLnNlcmllc1R5cGVzW2VdPWR9Yi5zZXJpZXNUeXBlcz1lLnNlcmllc1R5cGVzO2IuZ2V0U2VyaWVzPWZ1bmN0aW9uKGUsZCl7dm9pZCAwPT09ZCYmKGQ9e30pO3ZhciBmPWUub3B0aW9ucy5jaGFydDtmPWQudHlwZXx8Zi50eXBlfHxmLmRlZmF1bHRTZXJpZXNUeXBlfHxcIlwiO3ZhciBrPWIuc2VyaWVzVHlwZXNbZl07Ynx8RygxNywhMCxlLHttaXNzaW5nTW9kdWxlRm9yOmZ9KTtmPW5ldyBrO1wiZnVuY3Rpb25cIj09PXR5cGVvZiBmLmluaXQmJmYuaW5pdChlLGQpO3JldHVybiBmfTtcbmIucmVnaXN0ZXJTZXJpZXNUeXBlPXY7Yi5zZXJpZXNUeXBlPWZ1bmN0aW9uKGUsZCxxLGssbCl7dmFyIGY9RC5wbG90T3B0aW9uc3x8e307ZD1kfHxcIlwiO2ZbZV09QihmW2RdLHEpO3YoZSxDKGIuc2VyaWVzVHlwZXNbZF18fGZ1bmN0aW9uKCl7fSxrKSk7Yi5zZXJpZXNUeXBlc1tlXS5wcm90b3R5cGUudHlwZT1lO2wmJihiLnNlcmllc1R5cGVzW2VdLnByb3RvdHlwZS5wb2ludENsYXNzPUMoSSxsKSk7cmV0dXJuIGIuc2VyaWVzVHlwZXNbZV19fSkoeHx8KHg9e30pKTtlLnNlcmllc1R5cGU9eC5zZXJpZXNUeXBlO3JldHVybiB4fSk7TyhlLFwiQ29yZS9DaGFydC9DaGFydC5qc1wiLFtlW1wiQ29yZS9BbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmpzXCJdLGVbXCJDb3JlL0F4aXMvQXhpcy5qc1wiXSxlW1wiQ29yZS9Gb3JtYXRVdGlsaXRpZXMuanNcIl0sZVtcIkNvcmUvR2xvYmFscy5qc1wiXSxlW1wiQ29yZS9MZWdlbmQuanNcIl0sZVtcIkNvcmUvTVNQb2ludGVyLmpzXCJdLGVbXCJDb3JlL09wdGlvbnMuanNcIl0sXG5lW1wiQ29yZS9Db2xvci9QYWxldHRlLmpzXCJdLGVbXCJDb3JlL1BvaW50ZXIuanNcIl0sZVtcIkNvcmUvU2VyaWVzL1Nlcmllc1JlZ2lzdHJ5LmpzXCJdLGVbXCJDb3JlL1RpbWUuanNcIl0sZVtcIkNvcmUvVXRpbGl0aWVzLmpzXCJdLGVbXCJDb3JlL1JlbmRlcmVyL0hUTUwvQVNULmpzXCJdXSxmdW5jdGlvbihlLGIsSSx6LEgsRyxDLEIseCx3LHYsZixkKXt2YXIgcT1lLmFuaW1hdGUsaz1lLmFuaW1PYmplY3QsbD1lLnNldEFuaW1hdGlvbixEPUkubnVtYmVyRm9ybWF0LHU9ei5jaGFydHMsbj16LmRvYyxKPXoud2luLEU9Qy5kZWZhdWx0T3B0aW9ucyxtPUMuZGVmYXVsdFRpbWUsYz13LnNlcmllc1R5cGVzLGc9Zi5hZGRFdmVudCxhPWYuYXR0cixoPWYuY2xlYW5SZWN1cnNpdmVseSxyPWYuY3JlYXRlRWxlbWVudCxBPWYuY3NzLHk9Zi5kZWZpbmVkLEw9Zi5kaXNjYXJkRWxlbWVudCxQPWYuZXJhc2UsUj1mLmVycm9yLFY9Zi5leHRlbmQsUT1mLmZpbmQsTT1mLmZpcmVFdmVudCx0PWYuZ2V0U3R5bGUsXG5wPWYuaXNBcnJheSxPPWYuaXNGdW5jdGlvbixaPWYuaXNOdW1iZXIsZWE9Zi5pc09iamVjdCxGPWYuaXNTdHJpbmcsUz1mLm1lcmdlLEs9Zi5vYmplY3RFYWNoLFQ9Zi5waWNrLFg9Zi5wSW50LFU9Zi5yZWxhdGl2ZUxlbmd0aCxmYT1mLnJlbW92ZUV2ZW50LFk9Zi5zcGxhdCxiYT1mLnN5bmNUaW1lb3V0LGhhPWYudW5pcXVlS2V5LGNhPXoubWFyZ2luTmFtZXMsYWE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGEsYyxkKXt0aGlzLnNlcmllcz10aGlzLnJlbmRlclRvPXRoaXMucmVuZGVyZXI9dGhpcy5wb2ludGVyPXRoaXMucG9pbnRDb3VudD10aGlzLnBsb3RXaWR0aD10aGlzLnBsb3RUb3A9dGhpcy5wbG90TGVmdD10aGlzLnBsb3RIZWlnaHQ9dGhpcy5wbG90Qm94PXRoaXMub3B0aW9ucz10aGlzLm51bWJlckZvcm1hdHRlcj10aGlzLm1hcmdpbj10aGlzLmxlZ2VuZD10aGlzLmxhYmVsQ29sbGVjdG9ycz10aGlzLmlzUmVzaXppbmc9dGhpcy5pbmRleD10aGlzLmNvbnRhaW5lcj10aGlzLmNvbG9yQ291bnRlcj1cbnRoaXMuY2xpcEJveD10aGlzLmNoYXJ0V2lkdGg9dGhpcy5jaGFydEhlaWdodD10aGlzLmJvdW5kcz10aGlzLmF4aXNPZmZzZXQ9dGhpcy5heGVzPXZvaWQgMDt0aGlzLnNoYXJlZENsaXBzPXt9O3RoaXMueUF4aXM9dGhpcy54QXhpcz10aGlzLnVzZXJPcHRpb25zPXRoaXMudGl0bGVPZmZzZXQ9dGhpcy50aW1lPXRoaXMuc3ltYm9sQ291bnRlcj10aGlzLnNwYWNpbmdCb3g9dGhpcy5zcGFjaW5nPXZvaWQgMDt0aGlzLmdldEFyZ3MoYSxjLGQpfWUucHJvdG90eXBlLmdldEFyZ3M9ZnVuY3Rpb24oYSxjLGQpe0YoYSl8fGEubm9kZU5hbWU/KHRoaXMucmVuZGVyVG89YSx0aGlzLmluaXQoYyxkKSk6dGhpcy5pbml0KGEsYyl9O2UucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYSxjKXt2YXIgZD1hLnBsb3RPcHRpb25zfHx7fTtNKHRoaXMsXCJpbml0XCIse2FyZ3M6YXJndW1lbnRzfSxmdW5jdGlvbigpe3ZhciBiPVMoRSxhKSxlPWIuY2hhcnQ7SyhiLnBsb3RPcHRpb25zLGZ1bmN0aW9uKGEsXG5jKXtlYShhKSYmKGEudG9vbHRpcD1kW2NdJiZTKGRbY10udG9vbHRpcCl8fHZvaWQgMCl9KTtiLnRvb2x0aXAudXNlck9wdGlvbnM9YS5jaGFydCYmYS5jaGFydC5mb3JFeHBvcnQmJmEudG9vbHRpcC51c2VyT3B0aW9uc3x8YS50b29sdGlwO3RoaXMudXNlck9wdGlvbnM9YTt2YXIgaD1lLmV2ZW50czt0aGlzLm1hcmdpbj1bXTt0aGlzLnNwYWNpbmc9W107dGhpcy5ib3VuZHM9e2g6e30sdjp7fX07dGhpcy5sYWJlbENvbGxlY3RvcnM9W107dGhpcy5jYWxsYmFjaz1jO3RoaXMuaXNSZXNpemluZz0wO3RoaXMub3B0aW9ucz1iO3RoaXMuYXhlcz1bXTt0aGlzLnNlcmllcz1bXTt0aGlzLnRpbWU9YS50aW1lJiZPYmplY3Qua2V5cyhhLnRpbWUpLmxlbmd0aD9uZXcgdihhLnRpbWUpOnoudGltZTt0aGlzLm51bWJlckZvcm1hdHRlcj1lLm51bWJlckZvcm1hdHRlcnx8RDt0aGlzLnN0eWxlZE1vZGU9ZS5zdHlsZWRNb2RlO3RoaXMuaGFzQ2FydGVzaWFuU2VyaWVzPWUuc2hvd0F4ZXM7dmFyIGY9XG50aGlzO2YuaW5kZXg9dS5sZW5ndGg7dS5wdXNoKGYpO3ouY2hhcnRDb3VudCsrO2gmJksoaCxmdW5jdGlvbihhLGMpe08oYSkmJmcoZixjLGEpfSk7Zi54QXhpcz1bXTtmLnlBeGlzPVtdO2YucG9pbnRDb3VudD1mLmNvbG9yQ291bnRlcj1mLnN5bWJvbENvdW50ZXI9MDtNKGYsXCJhZnRlckluaXRcIik7Zi5maXJzdFJlbmRlcigpfSl9O2UucHJvdG90eXBlLmluaXRTZXJpZXM9ZnVuY3Rpb24oYSl7dmFyIGQ9dGhpcy5vcHRpb25zLmNoYXJ0O2Q9YS50eXBlfHxkLnR5cGV8fGQuZGVmYXVsdFNlcmllc1R5cGU7dmFyIGI9Y1tkXTtifHxSKDE3LCEwLHRoaXMse21pc3NpbmdNb2R1bGVGb3I6ZH0pO2Q9bmV3IGI7XCJmdW5jdGlvblwiPT09dHlwZW9mIGQuaW5pdCYmZC5pbml0KHRoaXMsYSk7cmV0dXJuIGR9O2UucHJvdG90eXBlLnNldFNlcmllc0RhdGE9ZnVuY3Rpb24oKXt0aGlzLmdldFNlcmllc09yZGVyQnlMaW5rcygpLmZvckVhY2goZnVuY3Rpb24oYSl7YS5wb2ludHN8fGEuZGF0YXx8XG4hYS5lbmFibGVkRGF0YVNvcnRpbmd8fGEuc2V0RGF0YShhLm9wdGlvbnMuZGF0YSwhMSl9KX07ZS5wcm90b3R5cGUuZ2V0U2VyaWVzT3JkZXJCeUxpbmtzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2VyaWVzLmNvbmNhdCgpLnNvcnQoZnVuY3Rpb24oYSxjKXtyZXR1cm4gYS5saW5rZWRTZXJpZXMubGVuZ3RofHxjLmxpbmtlZFNlcmllcy5sZW5ndGg/Yy5saW5rZWRTZXJpZXMubGVuZ3RoLWEubGlua2VkU2VyaWVzLmxlbmd0aDowfSl9O2UucHJvdG90eXBlLm9yZGVyU2VyaWVzPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuc2VyaWVzO2ZvcihhPWF8fDA7YTxjLmxlbmd0aDthKyspY1thXSYmKGNbYV0uaW5kZXg9YSxjW2FdLm5hbWU9Y1thXS5nZXROYW1lKCkpfTtlLnByb3RvdHlwZS5pc0luc2lkZVBsb3Q9ZnVuY3Rpb24oYSxjLGQpe3ZvaWQgMD09PWQmJihkPXt9KTt2YXIgYj10aGlzLmludmVydGVkLGU9dGhpcy5wbG90Qm94LGg9dGhpcy5wbG90TGVmdCxnPXRoaXMucGxvdFRvcCxcbmY9dGhpcy5zY3JvbGxhYmxlUGxvdEJveCxtPXRoaXMuc2Nyb2xsaW5nQ29udGFpbmVyO209dm9pZCAwPT09bT97c2Nyb2xsTGVmdDowLHNjcm9sbFRvcDowfTptO3ZhciBrPW0uc2Nyb2xsTGVmdDttPW0uc2Nyb2xsVG9wO3ZhciBsPWQuc2VyaWVzO2U9ZC52aXNpYmxlUGxvdE9ubHkmJmZ8fGU7Zj1kLmludmVydGVkP2M6YTtjPWQuaW52ZXJ0ZWQ/YTpjO2E9e3g6Zix5OmMsaXNJbnNpZGVQbG90OiEwfTtpZighZC5pZ25vcmVYKXt2YXIgRj1sJiYoYj9sLnlBeGlzOmwueEF4aXMpfHx7cG9zOmgsbGVuOkluZmluaXR5fTtmPWQucGFuZUNvb3JkaW5hdGVzP0YucG9zK2Y6aCtmO2Y+PU1hdGgubWF4KGsraCxGLnBvcykmJmY8PU1hdGgubWluKGsraCtlLndpZHRoLEYucG9zK0YubGVuKXx8KGEuaXNJbnNpZGVQbG90PSExKX0hZC5pZ25vcmVZJiZhLmlzSW5zaWRlUGxvdCYmKGI9bCYmKGI/bC54QXhpczpsLnlBeGlzKXx8e3BvczpnLGxlbjpJbmZpbml0eX0sZD1kLnBhbmVDb29yZGluYXRlcz9cbmIucG9zK2M6ZytjLGQ+PU1hdGgubWF4KG0rZyxiLnBvcykmJmQ8PU1hdGgubWluKG0rZytlLmhlaWdodCxiLnBvcytiLmxlbil8fChhLmlzSW5zaWRlUGxvdD0hMSkpO00odGhpcyxcImFmdGVySXNJbnNpZGVQbG90XCIsYSk7cmV0dXJuIGEuaXNJbnNpZGVQbG90fTtlLnByb3RvdHlwZS5yZWRyYXc9ZnVuY3Rpb24oYSl7TSh0aGlzLFwiYmVmb3JlUmVkcmF3XCIpO3ZhciBjPXRoaXMuaGFzQ2FydGVzaWFuU2VyaWVzP3RoaXMuYXhlczp0aGlzLmNvbG9yQXhpc3x8W10sZD10aGlzLnNlcmllcyxiPXRoaXMucG9pbnRlcixlPXRoaXMubGVnZW5kLGg9dGhpcy51c2VyT3B0aW9ucy5sZWdlbmQsZz10aGlzLmlzRGlydHlMZWdlbmQsZj10aGlzLmlzRGlydHlCb3gsbT10aGlzLnJlbmRlcmVyLGs9bS5pc0hpZGRlbigpLEY9W107dGhpcy5zZXRSZXNwb25zaXZlJiZ0aGlzLnNldFJlc3BvbnNpdmUoITEpO2wodGhpcy5oYXNSZW5kZXJlZD9hOiExLHRoaXMpO2smJnRoaXMudGVtcG9yYXJ5RGlzcGxheSgpO1xudGhpcy5sYXlPdXRUaXRsZXMoKTtmb3IoYT1kLmxlbmd0aDthLS07KXt2YXIgbj1kW2FdO2lmKG4ub3B0aW9ucy5zdGFja2luZ3x8bi5vcHRpb25zLmNlbnRlckluQ2F0ZWdvcnkpe3ZhciByPSEwO2lmKG4uaXNEaXJ0eSl7dmFyIEs9ITA7YnJlYWt9fX1pZihLKWZvcihhPWQubGVuZ3RoO2EtLTspbj1kW2FdLG4ub3B0aW9ucy5zdGFja2luZyYmKG4uaXNEaXJ0eT0hMCk7ZC5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuaXNEaXJ0eSYmKFwicG9pbnRcIj09PWEub3B0aW9ucy5sZWdlbmRUeXBlPyhcImZ1bmN0aW9uXCI9PT10eXBlb2YgYS51cGRhdGVUb3RhbHMmJmEudXBkYXRlVG90YWxzKCksZz0hMCk6aCYmKGgubGFiZWxGb3JtYXR0ZXJ8fGgubGFiZWxGb3JtYXQpJiYoZz0hMCkpO2EuaXNEaXJ0eURhdGEmJk0oYSxcInVwZGF0ZWREYXRhXCIpfSk7ZyYmZSYmZS5vcHRpb25zLmVuYWJsZWQmJihlLnJlbmRlcigpLHRoaXMuaXNEaXJ0eUxlZ2VuZD0hMSk7ciYmdGhpcy5nZXRTdGFja3MoKTtjLmZvckVhY2goZnVuY3Rpb24oYSl7YS51cGRhdGVOYW1lcygpO1xuYS5zZXRTY2FsZSgpfSk7dGhpcy5nZXRNYXJnaW5zKCk7Yy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuaXNEaXJ0eSYmKGY9ITApfSk7Yy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBjPWEubWluK1wiLFwiK2EubWF4O2EuZXh0S2V5IT09YyYmKGEuZXh0S2V5PWMsRi5wdXNoKGZ1bmN0aW9uKCl7TShhLFwiYWZ0ZXJTZXRFeHRyZW1lc1wiLFYoYS5ldmVudEFyZ3MsYS5nZXRFeHRyZW1lcygpKSk7ZGVsZXRlIGEuZXZlbnRBcmdzfSkpOyhmfHxyKSYmYS5yZWRyYXcoKX0pO2YmJnRoaXMuZHJhd0NoYXJ0Qm94KCk7TSh0aGlzLFwicHJlZHJhd1wiKTtkLmZvckVhY2goZnVuY3Rpb24oYSl7KGZ8fGEuaXNEaXJ0eSkmJmEudmlzaWJsZSYmYS5yZWRyYXcoKTthLmlzRGlydHlEYXRhPSExfSk7YiYmYi5yZXNldCghMCk7bS5kcmF3KCk7TSh0aGlzLFwicmVkcmF3XCIpO00odGhpcyxcInJlbmRlclwiKTtrJiZ0aGlzLnRlbXBvcmFyeURpc3BsYXkoITApO0YuZm9yRWFjaChmdW5jdGlvbihhKXthLmNhbGwoKX0pfTtcbmUucHJvdG90eXBlLmdldD1mdW5jdGlvbihhKXtmdW5jdGlvbiBjKGMpe3JldHVybiBjLmlkPT09YXx8Yy5vcHRpb25zJiZjLm9wdGlvbnMuaWQ9PT1hfXZhciBkPXRoaXMuc2VyaWVzLGI7dmFyIGU9USh0aGlzLmF4ZXMsYyl8fFEodGhpcy5zZXJpZXMsYyk7Zm9yKGI9MDshZSYmYjxkLmxlbmd0aDtiKyspZT1RKGRbYl0ucG9pbnRzfHxbXSxjKTtyZXR1cm4gZX07ZS5wcm90b3R5cGUuZ2V0QXhlcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYz10aGlzLm9wdGlvbnMsZD1jLnhBeGlzPVkoYy54QXhpc3x8e30pO2M9Yy55QXhpcz1ZKGMueUF4aXN8fHt9KTtNKHRoaXMsXCJnZXRBeGVzXCIpO2QuZm9yRWFjaChmdW5jdGlvbihhLGMpe2EuaW5kZXg9YzthLmlzWD0hMH0pO2MuZm9yRWFjaChmdW5jdGlvbihhLGMpe2EuaW5kZXg9Y30pO2QuY29uY2F0KGMpLmZvckVhY2goZnVuY3Rpb24oYyl7bmV3IGIoYSxjKX0pO00odGhpcyxcImFmdGVyR2V0QXhlc1wiKX07ZS5wcm90b3R5cGUuZ2V0U2VsZWN0ZWRQb2ludHM9XG5mdW5jdGlvbigpe3ZhciBhPVtdO3RoaXMuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oYyl7YT1hLmNvbmNhdChjLmdldFBvaW50c0NvbGxlY3Rpb24oKS5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIFQoYS5zZWxlY3RlZFN0YWdpbmcsYS5zZWxlY3RlZCl9KSl9KTtyZXR1cm4gYX07ZS5wcm90b3R5cGUuZ2V0U2VsZWN0ZWRTZXJpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZXJpZXMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBhLnNlbGVjdGVkfSl9O2UucHJvdG90eXBlLnNldFRpdGxlPWZ1bmN0aW9uKGEsYyxkKXt0aGlzLmFwcGx5RGVzY3JpcHRpb24oXCJ0aXRsZVwiLGEpO3RoaXMuYXBwbHlEZXNjcmlwdGlvbihcInN1YnRpdGxlXCIsYyk7dGhpcy5hcHBseURlc2NyaXB0aW9uKFwiY2FwdGlvblwiLHZvaWQgMCk7dGhpcy5sYXlPdXRUaXRsZXMoZCl9O2UucHJvdG90eXBlLmFwcGx5RGVzY3JpcHRpb249ZnVuY3Rpb24oYSxjKXt2YXIgZD10aGlzLGI9XCJ0aXRsZVwiPT09YT97Y29sb3I6Qi5uZXV0cmFsQ29sb3I4MCxcbmZvbnRTaXplOnRoaXMub3B0aW9ucy5pc1N0b2NrP1wiMTZweFwiOlwiMThweFwifTp7Y29sb3I6Qi5uZXV0cmFsQ29sb3I2MH07Yj10aGlzLm9wdGlvbnNbYV09UyghdGhpcy5zdHlsZWRNb2RlJiZ7c3R5bGU6Yn0sdGhpcy5vcHRpb25zW2FdLGMpO3ZhciBlPXRoaXNbYV07ZSYmYyYmKHRoaXNbYV09ZT1lLmRlc3Ryb3koKSk7YiYmIWUmJihlPXRoaXMucmVuZGVyZXIudGV4dChiLnRleHQsMCwwLGIudXNlSFRNTCkuYXR0cih7YWxpZ246Yi5hbGlnbixcImNsYXNzXCI6XCJoaWdoY2hhcnRzLVwiK2EsekluZGV4OmIuekluZGV4fHw0fSkuYWRkKCksZS51cGRhdGU9ZnVuY3Rpb24oYyl7ZFt7dGl0bGU6XCJzZXRUaXRsZVwiLHN1YnRpdGxlOlwic2V0U3VidGl0bGVcIixjYXB0aW9uOlwic2V0Q2FwdGlvblwifVthXV0oYyl9LHRoaXMuc3R5bGVkTW9kZXx8ZS5jc3MoYi5zdHlsZSksdGhpc1thXT1lKX07ZS5wcm90b3R5cGUubGF5T3V0VGl0bGVzPWZ1bmN0aW9uKGEpe3ZhciBjPVswLDAsMF0sZD10aGlzLnJlbmRlcmVyLFxuYj10aGlzLnNwYWNpbmdCb3g7W1widGl0bGVcIixcInN1YnRpdGxlXCIsXCJjYXB0aW9uXCJdLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIGU9dGhpc1thXSxoPXRoaXMub3B0aW9uc1thXSxnPWgudmVydGljYWxBbGlnbnx8XCJ0b3BcIjthPVwidGl0bGVcIj09PWE/LTM6XCJ0b3BcIj09PWc/Y1swXSsyOjA7aWYoZSl7aWYoIXRoaXMuc3R5bGVkTW9kZSl2YXIgZj1oLnN0eWxlLmZvbnRTaXplO2Y9ZC5mb250TWV0cmljcyhmLGUpLmI7ZS5jc3Moe3dpZHRoOihoLndpZHRofHxiLndpZHRoKyhoLndpZHRoQWRqdXN0fHwwKSkrXCJweFwifSk7dmFyIG09TWF0aC5yb3VuZChlLmdldEJCb3goaC51c2VIVE1MKS5oZWlnaHQpO2UuYWxpZ24oVih7eTpcImJvdHRvbVwiPT09Zz9mOmErZixoZWlnaHQ6bX0saCksITEsXCJzcGFjaW5nQm94XCIpO2guZmxvYXRpbmd8fChcInRvcFwiPT09Zz9jWzBdPU1hdGguY2VpbChjWzBdK20pOlwiYm90dG9tXCI9PT1nJiYoY1syXT1NYXRoLmNlaWwoY1syXSttKSkpfX0sdGhpcyk7Y1swXSYmXCJ0b3BcIj09PVxuKHRoaXMub3B0aW9ucy50aXRsZS52ZXJ0aWNhbEFsaWdufHxcInRvcFwiKSYmKGNbMF0rPXRoaXMub3B0aW9ucy50aXRsZS5tYXJnaW4pO2NbMl0mJlwiYm90dG9tXCI9PT10aGlzLm9wdGlvbnMuY2FwdGlvbi52ZXJ0aWNhbEFsaWduJiYoY1syXSs9dGhpcy5vcHRpb25zLmNhcHRpb24ubWFyZ2luKTt2YXIgZT0hdGhpcy50aXRsZU9mZnNldHx8dGhpcy50aXRsZU9mZnNldC5qb2luKFwiLFwiKSE9PWMuam9pbihcIixcIik7dGhpcy50aXRsZU9mZnNldD1jO00odGhpcyxcImFmdGVyTGF5T3V0VGl0bGVzXCIpOyF0aGlzLmlzRGlydHlCb3gmJmUmJih0aGlzLmlzRGlydHlCb3g9dGhpcy5pc0RpcnR5TGVnZW5kPWUsdGhpcy5oYXNSZW5kZXJlZCYmVChhLCEwKSYmdGhpcy5pc0RpcnR5Qm94JiZ0aGlzLnJlZHJhdygpKX07ZS5wcm90b3R5cGUuZ2V0Q2hhcnRTaXplPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcHRpb25zLmNoYXJ0LGM9YS53aWR0aDthPWEuaGVpZ2h0O3ZhciBkPXRoaXMucmVuZGVyVG87eShjKXx8XG4odGhpcy5jb250YWluZXJXaWR0aD10KGQsXCJ3aWR0aFwiKSk7eShhKXx8KHRoaXMuY29udGFpbmVySGVpZ2h0PXQoZCxcImhlaWdodFwiKSk7dGhpcy5jaGFydFdpZHRoPU1hdGgubWF4KDAsY3x8dGhpcy5jb250YWluZXJXaWR0aHx8NjAwKTt0aGlzLmNoYXJ0SGVpZ2h0PU1hdGgubWF4KDAsVShhLHRoaXMuY2hhcnRXaWR0aCl8fCgxPHRoaXMuY29udGFpbmVySGVpZ2h0P3RoaXMuY29udGFpbmVySGVpZ2h0OjQwMCkpfTtlLnByb3RvdHlwZS50ZW1wb3JhcnlEaXNwbGF5PWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMucmVuZGVyVG87aWYoYSlmb3IoO2MmJmMuc3R5bGU7KWMuaGNPcmlnU3R5bGUmJihBKGMsYy5oY09yaWdTdHlsZSksZGVsZXRlIGMuaGNPcmlnU3R5bGUpLGMuaGNPcmlnRGV0YWNoZWQmJihuLmJvZHkucmVtb3ZlQ2hpbGQoYyksYy5oY09yaWdEZXRhY2hlZD0hMSksYz1jLnBhcmVudE5vZGU7ZWxzZSBmb3IoO2MmJmMuc3R5bGU7KXtuLmJvZHkuY29udGFpbnMoYyl8fGMucGFyZW50Tm9kZXx8XG4oYy5oY09yaWdEZXRhY2hlZD0hMCxuLmJvZHkuYXBwZW5kQ2hpbGQoYykpO2lmKFwibm9uZVwiPT09dChjLFwiZGlzcGxheVwiLCExKXx8Yy5oY09yaWNEZXRhY2hlZCljLmhjT3JpZ1N0eWxlPXtkaXNwbGF5OmMuc3R5bGUuZGlzcGxheSxoZWlnaHQ6Yy5zdHlsZS5oZWlnaHQsb3ZlcmZsb3c6Yy5zdHlsZS5vdmVyZmxvd30sYT17ZGlzcGxheTpcImJsb2NrXCIsb3ZlcmZsb3c6XCJoaWRkZW5cIn0sYyE9PXRoaXMucmVuZGVyVG8mJihhLmhlaWdodD0wKSxBKGMsYSksYy5vZmZzZXRXaWR0aHx8Yy5zdHlsZS5zZXRQcm9wZXJ0eShcImRpc3BsYXlcIixcImJsb2NrXCIsXCJpbXBvcnRhbnRcIik7Yz1jLnBhcmVudE5vZGU7aWYoYz09PW4uYm9keSlicmVha319O2UucHJvdG90eXBlLnNldENsYXNzTmFtZT1mdW5jdGlvbihhKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9XCJoaWdoY2hhcnRzLWNvbnRhaW5lciBcIisoYXx8XCJcIil9O2UucHJvdG90eXBlLmdldENvbnRhaW5lcj1mdW5jdGlvbigpe3ZhciBjPXRoaXMub3B0aW9ucyxcbmQ9Yy5jaGFydDt2YXIgYj10aGlzLnJlbmRlclRvO3ZhciBlPWhhKCksaCxnO2J8fCh0aGlzLnJlbmRlclRvPWI9ZC5yZW5kZXJUbyk7RihiKSYmKHRoaXMucmVuZGVyVG89Yj1uLmdldEVsZW1lbnRCeUlkKGIpKTtifHxSKDEzLCEwLHRoaXMpO3ZhciBmPVgoYShiLFwiZGF0YS1oaWdoY2hhcnRzLWNoYXJ0XCIpKTtaKGYpJiZ1W2ZdJiZ1W2ZdLmhhc1JlbmRlcmVkJiZ1W2ZdLmRlc3Ryb3koKTthKGIsXCJkYXRhLWhpZ2hjaGFydHMtY2hhcnRcIix0aGlzLmluZGV4KTtiLmlubmVySFRNTD1cIlwiO2Quc2tpcENsb25lfHxiLm9mZnNldFdpZHRofHx0aGlzLnRlbXBvcmFyeURpc3BsYXkoKTt0aGlzLmdldENoYXJ0U2l6ZSgpO2Y9dGhpcy5jaGFydFdpZHRoO3ZhciBtPXRoaXMuY2hhcnRIZWlnaHQ7QShiLHtvdmVyZmxvdzpcImhpZGRlblwifSk7dGhpcy5zdHlsZWRNb2RlfHwoaD1WKHtwb3NpdGlvbjpcInJlbGF0aXZlXCIsb3ZlcmZsb3c6XCJoaWRkZW5cIix3aWR0aDpmK1wicHhcIixoZWlnaHQ6bStcInB4XCIsXG50ZXh0QWxpZ246XCJsZWZ0XCIsbGluZUhlaWdodDpcIm5vcm1hbFwiLHpJbmRleDowLFwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yXCI6XCJyZ2JhKDAsMCwwLDApXCIsdXNlclNlbGVjdDpcIm5vbmVcIixcInRvdWNoLWFjdGlvblwiOlwibWFuaXB1bGF0aW9uXCIsb3V0bGluZTpcIm5vbmVcIn0sZC5zdHlsZXx8e30pKTt0aGlzLmNvbnRhaW5lcj1iPXIoXCJkaXZcIix7aWQ6ZX0saCxiKTt0aGlzLl9jdXJzb3I9Yi5zdHlsZS5jdXJzb3I7dGhpcy5yZW5kZXJlcj1uZXcgKHpbZC5yZW5kZXJlcl18fHouUmVuZGVyZXIpKGIsZixtLG51bGwsZC5mb3JFeHBvcnQsYy5leHBvcnRpbmcmJmMuZXhwb3J0aW5nLmFsbG93SFRNTCx0aGlzLnN0eWxlZE1vZGUpO2wodm9pZCAwLHRoaXMpO3RoaXMuc2V0Q2xhc3NOYW1lKGQuY2xhc3NOYW1lKTtpZih0aGlzLnN0eWxlZE1vZGUpZm9yKGcgaW4gYy5kZWZzKXRoaXMucmVuZGVyZXIuZGVmaW5pdGlvbihjLmRlZnNbZ10pO2Vsc2UgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShkLnN0eWxlKTtcbnRoaXMucmVuZGVyZXIuY2hhcnRJbmRleD10aGlzLmluZGV4O00odGhpcyxcImFmdGVyR2V0Q29udGFpbmVyXCIpfTtlLnByb3RvdHlwZS5nZXRNYXJnaW5zPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuc3BhY2luZyxkPXRoaXMubWFyZ2luLGI9dGhpcy50aXRsZU9mZnNldDt0aGlzLnJlc2V0TWFyZ2lucygpO2JbMF0mJiF5KGRbMF0pJiYodGhpcy5wbG90VG9wPU1hdGgubWF4KHRoaXMucGxvdFRvcCxiWzBdK2NbMF0pKTtiWzJdJiYheShkWzJdKSYmKHRoaXMubWFyZ2luQm90dG9tPU1hdGgubWF4KHRoaXMubWFyZ2luQm90dG9tLGJbMl0rY1syXSkpO3RoaXMubGVnZW5kJiZ0aGlzLmxlZ2VuZC5kaXNwbGF5JiZ0aGlzLmxlZ2VuZC5hZGp1c3RNYXJnaW5zKGQsYyk7TSh0aGlzLFwiZ2V0TWFyZ2luc1wiKTthfHx0aGlzLmdldEF4aXNNYXJnaW5zKCl9O2UucHJvdG90eXBlLmdldEF4aXNNYXJnaW5zPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxjPWEuYXhpc09mZnNldD1bMCwwLDAsMF0sZD1hLmNvbG9yQXhpcyxcbmI9YS5tYXJnaW4sZT1mdW5jdGlvbihhKXthLmZvckVhY2goZnVuY3Rpb24oYSl7YS52aXNpYmxlJiZhLmdldE9mZnNldCgpfSl9O2EuaGFzQ2FydGVzaWFuU2VyaWVzP2UoYS5heGVzKTpkJiZkLmxlbmd0aCYmZShkKTtjYS5mb3JFYWNoKGZ1bmN0aW9uKGQsZSl7eShiW2VdKXx8KGFbZF0rPWNbZV0pfSk7YS5zZXRDaGFydFNpemUoKX07ZS5wcm90b3R5cGUucmVmbG93PWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMsZD1jLm9wdGlvbnMuY2hhcnQsYj1jLnJlbmRlclRvLGU9eShkLndpZHRoKSYmeShkLmhlaWdodCksaD1kLndpZHRofHx0KGIsXCJ3aWR0aFwiKTtkPWQuaGVpZ2h0fHx0KGIsXCJoZWlnaHRcIik7Yj1hP2EudGFyZ2V0Oko7ZGVsZXRlIGMucG9pbnRlci5jaGFydFBvc2l0aW9uO2lmKCFlJiYhYy5pc1ByaW50aW5nJiZoJiZkJiYoYj09PUp8fGI9PT1uKSl7aWYoaCE9PWMuY29udGFpbmVyV2lkdGh8fGQhPT1jLmNvbnRhaW5lckhlaWdodClmLmNsZWFyVGltZW91dChjLnJlZmxvd1RpbWVvdXQpLFxuYy5yZWZsb3dUaW1lb3V0PWJhKGZ1bmN0aW9uKCl7Yy5jb250YWluZXImJmMuc2V0U2l6ZSh2b2lkIDAsdm9pZCAwLCExKX0sYT8xMDA6MCk7Yy5jb250YWluZXJXaWR0aD1oO2MuY29udGFpbmVySGVpZ2h0PWR9fTtlLnByb3RvdHlwZS5zZXRSZWZsb3c9ZnVuY3Rpb24oYSl7dmFyIGM9dGhpczshMT09PWF8fHRoaXMudW5iaW5kUmVmbG93PyExPT09YSYmdGhpcy51bmJpbmRSZWZsb3cmJih0aGlzLnVuYmluZFJlZmxvdz10aGlzLnVuYmluZFJlZmxvdygpKToodGhpcy51bmJpbmRSZWZsb3c9ZyhKLFwicmVzaXplXCIsZnVuY3Rpb24oYSl7Yy5vcHRpb25zJiZjLnJlZmxvdyhhKX0pLGcodGhpcyxcImRlc3Ryb3lcIix0aGlzLnVuYmluZFJlZmxvdykpfTtlLnByb3RvdHlwZS5zZXRTaXplPWZ1bmN0aW9uKGEsYyxkKXt2YXIgYj10aGlzLGU9Yi5yZW5kZXJlcjtiLmlzUmVzaXppbmcrPTE7bChkLGIpO2Q9ZS5nbG9iYWxBbmltYXRpb247Yi5vbGRDaGFydEhlaWdodD1iLmNoYXJ0SGVpZ2h0O1xuYi5vbGRDaGFydFdpZHRoPWIuY2hhcnRXaWR0aDtcInVuZGVmaW5lZFwiIT09dHlwZW9mIGEmJihiLm9wdGlvbnMuY2hhcnQud2lkdGg9YSk7XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBjJiYoYi5vcHRpb25zLmNoYXJ0LmhlaWdodD1jKTtiLmdldENoYXJ0U2l6ZSgpO2Iuc3R5bGVkTW9kZXx8KGQ/cTpBKShiLmNvbnRhaW5lcix7d2lkdGg6Yi5jaGFydFdpZHRoK1wicHhcIixoZWlnaHQ6Yi5jaGFydEhlaWdodCtcInB4XCJ9LGQpO2Iuc2V0Q2hhcnRTaXplKCEwKTtlLnNldFNpemUoYi5jaGFydFdpZHRoLGIuY2hhcnRIZWlnaHQsZCk7Yi5heGVzLmZvckVhY2goZnVuY3Rpb24oYSl7YS5pc0RpcnR5PSEwO2Euc2V0U2NhbGUoKX0pO2IuaXNEaXJ0eUxlZ2VuZD0hMDtiLmlzRGlydHlCb3g9ITA7Yi5sYXlPdXRUaXRsZXMoKTtiLmdldE1hcmdpbnMoKTtiLnJlZHJhdyhkKTtiLm9sZENoYXJ0SGVpZ2h0PW51bGw7TShiLFwicmVzaXplXCIpO2JhKGZ1bmN0aW9uKCl7YiYmTShiLFwiZW5kUmVzaXplXCIsbnVsbCxcbmZ1bmN0aW9uKCl7LS1iLmlzUmVzaXppbmd9KX0sayhkKS5kdXJhdGlvbil9O2UucHJvdG90eXBlLnNldENoYXJ0U2l6ZT1mdW5jdGlvbihhKXt2YXIgYz10aGlzLmludmVydGVkLGQ9dGhpcy5yZW5kZXJlcixiPXRoaXMuY2hhcnRXaWR0aCxlPXRoaXMuY2hhcnRIZWlnaHQsaD10aGlzLm9wdGlvbnMuY2hhcnQsZz10aGlzLnNwYWNpbmcsZj10aGlzLmNsaXBPZmZzZXQsbSxsLGssRjt0aGlzLnBsb3RMZWZ0PW09TWF0aC5yb3VuZCh0aGlzLnBsb3RMZWZ0KTt0aGlzLnBsb3RUb3A9bD1NYXRoLnJvdW5kKHRoaXMucGxvdFRvcCk7dGhpcy5wbG90V2lkdGg9az1NYXRoLm1heCgwLE1hdGgucm91bmQoYi1tLXRoaXMubWFyZ2luUmlnaHQpKTt0aGlzLnBsb3RIZWlnaHQ9Rj1NYXRoLm1heCgwLE1hdGgucm91bmQoZS1sLXRoaXMubWFyZ2luQm90dG9tKSk7dGhpcy5wbG90U2l6ZVg9Yz9GOms7dGhpcy5wbG90U2l6ZVk9Yz9rOkY7dGhpcy5wbG90Qm9yZGVyV2lkdGg9aC5wbG90Qm9yZGVyV2lkdGh8fFxuMDt0aGlzLnNwYWNpbmdCb3g9ZC5zcGFjaW5nQm94PXt4OmdbM10seTpnWzBdLHdpZHRoOmItZ1szXS1nWzFdLGhlaWdodDplLWdbMF0tZ1syXX07dGhpcy5wbG90Qm94PWQucGxvdEJveD17eDptLHk6bCx3aWR0aDprLGhlaWdodDpGfTtlPTIqTWF0aC5mbG9vcih0aGlzLnBsb3RCb3JkZXJXaWR0aC8yKTtjPU1hdGguY2VpbChNYXRoLm1heChlLGZbM10pLzIpO2I9TWF0aC5jZWlsKE1hdGgubWF4KGUsZlswXSkvMik7dGhpcy5jbGlwQm94PXt4OmMseTpiLHdpZHRoOk1hdGguZmxvb3IodGhpcy5wbG90U2l6ZVgtTWF0aC5tYXgoZSxmWzFdKS8yLWMpLGhlaWdodDpNYXRoLm1heCgwLE1hdGguZmxvb3IodGhpcy5wbG90U2l6ZVktTWF0aC5tYXgoZSxmWzJdKS8yLWIpKX07YXx8KHRoaXMuYXhlcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Euc2V0QXhpc1NpemUoKTthLnNldEF4aXNUcmFuc2xhdGlvbigpfSksZC5hbGlnbkVsZW1lbnRzKCkpO00odGhpcyxcImFmdGVyU2V0Q2hhcnRTaXplXCIsXG57c2tpcEF4ZXM6YX0pfTtlLnByb3RvdHlwZS5yZXNldE1hcmdpbnM9ZnVuY3Rpb24oKXtNKHRoaXMsXCJyZXNldE1hcmdpbnNcIik7dmFyIGE9dGhpcyxjPWEub3B0aW9ucy5jaGFydDtbXCJtYXJnaW5cIixcInNwYWNpbmdcIl0uZm9yRWFjaChmdW5jdGlvbihkKXt2YXIgYj1jW2RdLGU9ZWEoYik/YjpbYixiLGIsYl07W1wiVG9wXCIsXCJSaWdodFwiLFwiQm90dG9tXCIsXCJMZWZ0XCJdLmZvckVhY2goZnVuY3Rpb24oYixoKXthW2RdW2hdPVQoY1tkK2JdLGVbaF0pfSl9KTtjYS5mb3JFYWNoKGZ1bmN0aW9uKGMsZCl7YVtjXT1UKGEubWFyZ2luW2RdLGEuc3BhY2luZ1tkXSl9KTthLmF4aXNPZmZzZXQ9WzAsMCwwLDBdO2EuY2xpcE9mZnNldD1bMCwwLDAsMF19O2UucHJvdG90eXBlLmRyYXdDaGFydEJveD1mdW5jdGlvbigpe3ZhciBhPXRoaXMub3B0aW9ucy5jaGFydCxjPXRoaXMucmVuZGVyZXIsZD10aGlzLmNoYXJ0V2lkdGgsYj10aGlzLmNoYXJ0SGVpZ2h0LGU9dGhpcy5jaGFydEJhY2tncm91bmQsaD1cbnRoaXMucGxvdEJhY2tncm91bmQsZz10aGlzLnBsb3RCb3JkZXIsZj10aGlzLnN0eWxlZE1vZGUsbT10aGlzLnBsb3RCR0ltYWdlLGs9YS5iYWNrZ3JvdW5kQ29sb3IsbD1hLnBsb3RCYWNrZ3JvdW5kQ29sb3IsRj1hLnBsb3RCYWNrZ3JvdW5kSW1hZ2UsbixyPXRoaXMucGxvdExlZnQsSz10aGlzLnBsb3RUb3AscT10aGlzLnBsb3RXaWR0aCxwPXRoaXMucGxvdEhlaWdodCx1PXRoaXMucGxvdEJveCx2PXRoaXMuY2xpcFJlY3QsdD10aGlzLmNsaXBCb3gsdz1cImFuaW1hdGVcIjtlfHwodGhpcy5jaGFydEJhY2tncm91bmQ9ZT1jLnJlY3QoKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtYmFja2dyb3VuZFwiKS5hZGQoKSx3PVwiYXR0clwiKTtpZihmKXZhciB5PW49ZS5zdHJva2VXaWR0aCgpO2Vsc2V7eT1hLmJvcmRlcldpZHRofHwwO249eSsoYS5zaGFkb3c/ODowKTtrPXtmaWxsOmt8fFwibm9uZVwifTtpZih5fHxlW1wic3Ryb2tlLXdpZHRoXCJdKWsuc3Ryb2tlPWEuYm9yZGVyQ29sb3Isa1tcInN0cm9rZS13aWR0aFwiXT1cbnk7ZS5hdHRyKGspLnNoYWRvdyhhLnNoYWRvdyl9ZVt3XSh7eDpuLzIseTpuLzIsd2lkdGg6ZC1uLXklMixoZWlnaHQ6Yi1uLXklMixyOmEuYm9yZGVyUmFkaXVzfSk7dz1cImFuaW1hdGVcIjtofHwodz1cImF0dHJcIix0aGlzLnBsb3RCYWNrZ3JvdW5kPWg9Yy5yZWN0KCkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLXBsb3QtYmFja2dyb3VuZFwiKS5hZGQoKSk7aFt3XSh1KTtmfHwoaC5hdHRyKHtmaWxsOmx8fFwibm9uZVwifSkuc2hhZG93KGEucGxvdFNoYWRvdyksRiYmKG0/KEYhPT1tLmF0dHIoXCJocmVmXCIpJiZtLmF0dHIoXCJocmVmXCIsRiksbS5hbmltYXRlKHUpKTp0aGlzLnBsb3RCR0ltYWdlPWMuaW1hZ2UoRixyLEsscSxwKS5hZGQoKSkpO3Y/di5hbmltYXRlKHt3aWR0aDp0LndpZHRoLGhlaWdodDp0LmhlaWdodH0pOnRoaXMuY2xpcFJlY3Q9Yy5jbGlwUmVjdCh0KTt3PVwiYW5pbWF0ZVwiO2d8fCh3PVwiYXR0clwiLHRoaXMucGxvdEJvcmRlcj1nPWMucmVjdCgpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1wbG90LWJvcmRlclwiKS5hdHRyKHt6SW5kZXg6MX0pLmFkZCgpKTtcbmZ8fGcuYXR0cih7c3Ryb2tlOmEucGxvdEJvcmRlckNvbG9yLFwic3Ryb2tlLXdpZHRoXCI6YS5wbG90Qm9yZGVyV2lkdGh8fDAsZmlsbDpcIm5vbmVcIn0pO2dbd10oZy5jcmlzcCh7eDpyLHk6Syx3aWR0aDpxLGhlaWdodDpwfSwtZy5zdHJva2VXaWR0aCgpKSk7dGhpcy5pc0RpcnR5Qm94PSExO00odGhpcyxcImFmdGVyRHJhd0NoYXJ0Qm94XCIpfTtlLnByb3RvdHlwZS5wcm9wRnJvbVNlcmllcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMsZD1hLm9wdGlvbnMuY2hhcnQsYixlPWEub3B0aW9ucy5zZXJpZXMsaCxnO1tcImludmVydGVkXCIsXCJhbmd1bGFyXCIsXCJwb2xhclwiXS5mb3JFYWNoKGZ1bmN0aW9uKGYpe2I9Y1tkLnR5cGV8fGQuZGVmYXVsdFNlcmllc1R5cGVdO2c9ZFtmXXx8YiYmYi5wcm90b3R5cGVbZl07Zm9yKGg9ZSYmZS5sZW5ndGg7IWcmJmgtLTspKGI9Y1tlW2hdLnR5cGVdKSYmYi5wcm90b3R5cGVbZl0mJihnPSEwKTthW2ZdPWd9KX07ZS5wcm90b3R5cGUubGlua1Nlcmllcz1mdW5jdGlvbigpe3ZhciBhPVxudGhpcyxjPWEuc2VyaWVzO2MuZm9yRWFjaChmdW5jdGlvbihhKXthLmxpbmtlZFNlcmllcy5sZW5ndGg9MH0pO2MuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgZD1jLm9wdGlvbnMubGlua2VkVG87RihkKSYmKGQ9XCI6cHJldmlvdXNcIj09PWQ/YS5zZXJpZXNbYy5pbmRleC0xXTphLmdldChkKSkmJmQubGlua2VkUGFyZW50IT09YyYmKGQubGlua2VkU2VyaWVzLnB1c2goYyksYy5saW5rZWRQYXJlbnQ9ZCxkLmVuYWJsZWREYXRhU29ydGluZyYmYy5zZXREYXRhU29ydGluZ09wdGlvbnMoKSxjLnZpc2libGU9VChjLm9wdGlvbnMudmlzaWJsZSxkLm9wdGlvbnMudmlzaWJsZSxjLnZpc2libGUpKX0pO00odGhpcyxcImFmdGVyTGlua1Nlcmllc1wiKX07ZS5wcm90b3R5cGUucmVuZGVyU2VyaWVzPWZ1bmN0aW9uKCl7dGhpcy5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihhKXthLnRyYW5zbGF0ZSgpO2EucmVuZGVyKCl9KX07ZS5wcm90b3R5cGUucmVuZGVyTGFiZWxzPWZ1bmN0aW9uKCl7dmFyIGE9XG50aGlzLGM9YS5vcHRpb25zLmxhYmVscztjLml0ZW1zJiZjLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oZCl7dmFyIGI9VihjLnN0eWxlLGQuc3R5bGUpLGU9WChiLmxlZnQpK2EucGxvdExlZnQsaD1YKGIudG9wKSthLnBsb3RUb3ArMTI7ZGVsZXRlIGIubGVmdDtkZWxldGUgYi50b3A7YS5yZW5kZXJlci50ZXh0KGQuaHRtbCxlLGgpLmF0dHIoe3pJbmRleDoyfSkuY3NzKGIpLmFkZCgpfSl9O2UucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuYXhlcyxjPXRoaXMuY29sb3JBeGlzLGQ9dGhpcy5yZW5kZXJlcixiPXRoaXMub3B0aW9ucyxlPTAsaD1mdW5jdGlvbihhKXthLmZvckVhY2goZnVuY3Rpb24oYSl7YS52aXNpYmxlJiZhLnJlbmRlcigpfSl9O3RoaXMuc2V0VGl0bGUoKTt0aGlzLmxlZ2VuZD1uZXcgSCh0aGlzLGIubGVnZW5kKTt0aGlzLmdldFN0YWNrcyYmdGhpcy5nZXRTdGFja3MoKTt0aGlzLmdldE1hcmdpbnMoITApO3RoaXMuc2V0Q2hhcnRTaXplKCk7XG5iPXRoaXMucGxvdFdpZHRoO2Euc29tZShmdW5jdGlvbihhKXtpZihhLmhvcml6JiZhLnZpc2libGUmJmEub3B0aW9ucy5sYWJlbHMuZW5hYmxlZCYmYS5zZXJpZXMubGVuZ3RoKXJldHVybiBlPTIxLCEwfSk7dmFyIGc9dGhpcy5wbG90SGVpZ2h0PU1hdGgubWF4KHRoaXMucGxvdEhlaWdodC1lLDApO2EuZm9yRWFjaChmdW5jdGlvbihhKXthLnNldFNjYWxlKCl9KTt0aGlzLmdldEF4aXNNYXJnaW5zKCk7dmFyIGY9MS4xPGIvdGhpcy5wbG90V2lkdGg7dmFyIG09MS4wNTxnL3RoaXMucGxvdEhlaWdodDtpZihmfHxtKWEuZm9yRWFjaChmdW5jdGlvbihhKXsoYS5ob3JpeiYmZnx8IWEuaG9yaXomJm0pJiZhLnNldFRpY2tJbnRlcnZhbCghMCl9KSx0aGlzLmdldE1hcmdpbnMoKTt0aGlzLmRyYXdDaGFydEJveCgpO3RoaXMuaGFzQ2FydGVzaWFuU2VyaWVzP2goYSk6YyYmYy5sZW5ndGgmJmgoYyk7dGhpcy5zZXJpZXNHcm91cHx8KHRoaXMuc2VyaWVzR3JvdXA9ZC5nKFwic2VyaWVzLWdyb3VwXCIpLmF0dHIoe3pJbmRleDozfSkuYWRkKCkpO1xudGhpcy5yZW5kZXJTZXJpZXMoKTt0aGlzLnJlbmRlckxhYmVscygpO3RoaXMuYWRkQ3JlZGl0cygpO3RoaXMuc2V0UmVzcG9uc2l2ZSYmdGhpcy5zZXRSZXNwb25zaXZlKCk7dGhpcy5oYXNSZW5kZXJlZD0hMH07ZS5wcm90b3R5cGUuYWRkQ3JlZGl0cz1mdW5jdGlvbihhKXt2YXIgYz10aGlzLGQ9UyghMCx0aGlzLm9wdGlvbnMuY3JlZGl0cyxhKTtkLmVuYWJsZWQmJiF0aGlzLmNyZWRpdHMmJih0aGlzLmNyZWRpdHM9dGhpcy5yZW5kZXJlci50ZXh0KGQudGV4dCsodGhpcy5tYXBDcmVkaXRzfHxcIlwiKSwwLDApLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1jcmVkaXRzXCIpLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpe2QuaHJlZiYmKEoubG9jYXRpb24uaHJlZj1kLmhyZWYpfSkuYXR0cih7YWxpZ246ZC5wb3NpdGlvbi5hbGlnbix6SW5kZXg6OH0pLGMuc3R5bGVkTW9kZXx8dGhpcy5jcmVkaXRzLmNzcyhkLnN0eWxlKSx0aGlzLmNyZWRpdHMuYWRkKCkuYWxpZ24oZC5wb3NpdGlvbiksdGhpcy5jcmVkaXRzLnVwZGF0ZT1cbmZ1bmN0aW9uKGEpe2MuY3JlZGl0cz1jLmNyZWRpdHMuZGVzdHJveSgpO2MuYWRkQ3JlZGl0cyhhKX0pfTtlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxjPWEuYXhlcyxkPWEuc2VyaWVzLGI9YS5jb250YWluZXIsZSxoPWImJmIucGFyZW50Tm9kZTtNKGEsXCJkZXN0cm95XCIpO2EucmVuZGVyZXIuZm9yRXhwb3J0P1AodSxhKTp1W2EuaW5kZXhdPXZvaWQgMDt6LmNoYXJ0Q291bnQtLTthLnJlbmRlclRvLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtaGlnaGNoYXJ0cy1jaGFydFwiKTtmYShhKTtmb3IoZT1jLmxlbmd0aDtlLS07KWNbZV09Y1tlXS5kZXN0cm95KCk7dGhpcy5zY3JvbGxlciYmdGhpcy5zY3JvbGxlci5kZXN0cm95JiZ0aGlzLnNjcm9sbGVyLmRlc3Ryb3koKTtmb3IoZT1kLmxlbmd0aDtlLS07KWRbZV09ZFtlXS5kZXN0cm95KCk7XCJ0aXRsZSBzdWJ0aXRsZSBjaGFydEJhY2tncm91bmQgcGxvdEJhY2tncm91bmQgcGxvdEJHSW1hZ2UgcGxvdEJvcmRlciBzZXJpZXNHcm91cCBjbGlwUmVjdCBjcmVkaXRzIHBvaW50ZXIgcmFuZ2VTZWxlY3RvciBsZWdlbmQgcmVzZXRab29tQnV0dG9uIHRvb2x0aXAgcmVuZGVyZXJcIi5zcGxpdChcIiBcIikuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgZD1cbmFbY107ZCYmZC5kZXN0cm95JiYoYVtjXT1kLmRlc3Ryb3koKSl9KTtiJiYoYi5pbm5lckhUTUw9XCJcIixmYShiKSxoJiZMKGIpKTtLKGEsZnVuY3Rpb24oYyxkKXtkZWxldGUgYVtkXX0pfTtlLnByb3RvdHlwZS5maXJzdFJlbmRlcj1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYz1hLm9wdGlvbnM7aWYoIWEuaXNSZWFkeVRvUmVuZGVyfHxhLmlzUmVhZHlUb1JlbmRlcigpKXthLmdldENvbnRhaW5lcigpO2EucmVzZXRNYXJnaW5zKCk7YS5zZXRDaGFydFNpemUoKTthLnByb3BGcm9tU2VyaWVzKCk7YS5nZXRBeGVzKCk7KHAoYy5zZXJpZXMpP2Muc2VyaWVzOltdKS5mb3JFYWNoKGZ1bmN0aW9uKGMpe2EuaW5pdFNlcmllcyhjKX0pO2EubGlua1NlcmllcygpO2Euc2V0U2VyaWVzRGF0YSgpO00oYSxcImJlZm9yZVJlbmRlclwiKTt4JiYoYS5wb2ludGVyPXouaGFzVG91Y2h8fCFKLlBvaW50ZXJFdmVudCYmIUouTVNQb2ludGVyRXZlbnQ/bmV3IHgoYSxjKTpuZXcgRyhhLGMpKTthLnJlbmRlcigpO1xuYS5wb2ludGVyLmdldENoYXJ0UG9zaXRpb24oKTtpZighYS5yZW5kZXJlci5pbWdDb3VudCYmIWEuaGFzTG9hZGVkKWEub25sb2FkKCk7YS50ZW1wb3JhcnlEaXNwbGF5KCEwKX19O2UucHJvdG90eXBlLm9ubG9hZD1mdW5jdGlvbigpe3RoaXMuY2FsbGJhY2tzLmNvbmNhdChbdGhpcy5jYWxsYmFja10pLmZvckVhY2goZnVuY3Rpb24oYSl7YSYmXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiB0aGlzLmluZGV4JiZhLmFwcGx5KHRoaXMsW3RoaXNdKX0sdGhpcyk7TSh0aGlzLFwibG9hZFwiKTtNKHRoaXMsXCJyZW5kZXJcIik7eSh0aGlzLmluZGV4KSYmdGhpcy5zZXRSZWZsb3codGhpcy5vcHRpb25zLmNoYXJ0LnJlZmxvdyk7dGhpcy5oYXNMb2FkZWQ9ITB9O2UucHJvdG90eXBlLmFkZFNlcmllcz1mdW5jdGlvbihhLGMsZCl7dmFyIGIsZT10aGlzO2EmJihjPVQoYywhMCksTShlLFwiYWRkU2VyaWVzXCIse29wdGlvbnM6YX0sZnVuY3Rpb24oKXtiPWUuaW5pdFNlcmllcyhhKTtlLmlzRGlydHlMZWdlbmQ9XG4hMDtlLmxpbmtTZXJpZXMoKTtiLmVuYWJsZWREYXRhU29ydGluZyYmYi5zZXREYXRhKGEuZGF0YSwhMSk7TShlLFwiYWZ0ZXJBZGRTZXJpZXNcIix7c2VyaWVzOmJ9KTtjJiZlLnJlZHJhdyhkKX0pKTtyZXR1cm4gYn07ZS5wcm90b3R5cGUuYWRkQXhpcz1mdW5jdGlvbihhLGMsZCxiKXtyZXR1cm4gdGhpcy5jcmVhdGVBeGlzKGM/XCJ4QXhpc1wiOlwieUF4aXNcIix7YXhpczphLHJlZHJhdzpkLGFuaW1hdGlvbjpifSl9O2UucHJvdG90eXBlLmFkZENvbG9yQXhpcz1mdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuY3JlYXRlQXhpcyhcImNvbG9yQXhpc1wiLHtheGlzOmEscmVkcmF3OmMsYW5pbWF0aW9uOmR9KX07ZS5wcm90b3R5cGUuY3JlYXRlQXhpcz1mdW5jdGlvbihhLGMpe3ZhciBkPVwiY29sb3JBeGlzXCI9PT1hLGU9Yy5yZWRyYXcsaD1jLmFuaW1hdGlvbjthPVMoYy5heGlzLHtpbmRleDp0aGlzW2FdLmxlbmd0aCxpc1g6XCJ4QXhpc1wiPT09YX0pO2E9ZD9uZXcgei5Db2xvckF4aXModGhpcyxcbmEpOm5ldyBiKHRoaXMsYSk7ZCYmKHRoaXMuaXNEaXJ0eUxlZ2VuZD0hMCx0aGlzLmF4ZXMuZm9yRWFjaChmdW5jdGlvbihhKXthLnNlcmllcz1bXX0pLHRoaXMuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oYSl7YS5iaW5kQXhlcygpO2EuaXNEaXJ0eURhdGE9ITB9KSk7VChlLCEwKSYmdGhpcy5yZWRyYXcoaCk7cmV0dXJuIGF9O2UucHJvdG90eXBlLnNob3dMb2FkaW5nPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMsYj1jLm9wdGlvbnMsZT1jLmxvYWRpbmdEaXYsaD1jLmxvYWRpbmdTcGFuLGY9Yi5sb2FkaW5nLG09ZnVuY3Rpb24oKXtlJiZBKGUse2xlZnQ6Yy5wbG90TGVmdCtcInB4XCIsdG9wOmMucGxvdFRvcCtcInB4XCIsd2lkdGg6Yy5wbG90V2lkdGgrXCJweFwiLGhlaWdodDpjLnBsb3RIZWlnaHQrXCJweFwifSl9O2V8fChjLmxvYWRpbmdEaXY9ZT1yKFwiZGl2XCIse2NsYXNzTmFtZTpcImhpZ2hjaGFydHMtbG9hZGluZyBoaWdoY2hhcnRzLWxvYWRpbmctaGlkZGVuXCJ9LG51bGwsYy5jb250YWluZXIpKTtcbmh8fChjLmxvYWRpbmdTcGFuPWg9cihcInNwYW5cIix7Y2xhc3NOYW1lOlwiaGlnaGNoYXJ0cy1sb2FkaW5nLWlubmVyXCJ9LG51bGwsZSksZyhjLFwicmVkcmF3XCIsbSkpO2UuY2xhc3NOYW1lPVwiaGlnaGNoYXJ0cy1sb2FkaW5nXCI7ZC5zZXRFbGVtZW50SFRNTChoLFQoYSxiLmxhbmcubG9hZGluZyxcIlwiKSk7Yy5zdHlsZWRNb2RlfHwoQShlLFYoZi5zdHlsZSx7ekluZGV4OjEwfSkpLEEoaCxmLmxhYmVsU3R5bGUpLGMubG9hZGluZ1Nob3dufHwoQShlLHtvcGFjaXR5OjAsZGlzcGxheTpcIlwifSkscShlLHtvcGFjaXR5OmYuc3R5bGUub3BhY2l0eXx8LjV9LHtkdXJhdGlvbjpmLnNob3dEdXJhdGlvbnx8MH0pKSk7Yy5sb2FkaW5nU2hvd249ITA7bSgpfTtlLnByb3RvdHlwZS5oaWRlTG9hZGluZz1mdW5jdGlvbigpe3ZhciBhPXRoaXMub3B0aW9ucyxjPXRoaXMubG9hZGluZ0RpdjtjJiYoYy5jbGFzc05hbWU9XCJoaWdoY2hhcnRzLWxvYWRpbmcgaGlnaGNoYXJ0cy1sb2FkaW5nLWhpZGRlblwiLHRoaXMuc3R5bGVkTW9kZXx8XG5xKGMse29wYWNpdHk6MH0se2R1cmF0aW9uOmEubG9hZGluZy5oaWRlRHVyYXRpb258fDEwMCxjb21wbGV0ZTpmdW5jdGlvbigpe0EoYyx7ZGlzcGxheTpcIm5vbmVcIn0pfX0pKTt0aGlzLmxvYWRpbmdTaG93bj0hMX07ZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGEsYyxkLGIpe3ZhciBlPXRoaXMsZz17Y3JlZGl0czpcImFkZENyZWRpdHNcIix0aXRsZTpcInNldFRpdGxlXCIsc3VidGl0bGU6XCJzZXRTdWJ0aXRsZVwiLGNhcHRpb246XCJzZXRDYXB0aW9uXCJ9LGYsayxsLG49YS5pc1Jlc3BvbnNpdmVPcHRpb25zLHI9W107TShlLFwidXBkYXRlXCIse29wdGlvbnM6YX0pO258fGUuc2V0UmVzcG9uc2l2ZSghMSwhMCk7YT1oKGEsZS5vcHRpb25zKTtlLnVzZXJPcHRpb25zPVMoZS51c2VyT3B0aW9ucyxhKTtpZihmPWEuY2hhcnQpe1MoITAsZS5vcHRpb25zLmNoYXJ0LGYpO1wiY2xhc3NOYW1lXCJpbiBmJiZlLnNldENsYXNzTmFtZShmLmNsYXNzTmFtZSk7XCJyZWZsb3dcImluIGYmJmUuc2V0UmVmbG93KGYucmVmbG93KTtcbmlmKFwiaW52ZXJ0ZWRcImluIGZ8fFwicG9sYXJcImluIGZ8fFwidHlwZVwiaW4gZil7ZS5wcm9wRnJvbVNlcmllcygpO3ZhciBxPSEwfVwiYWxpZ25UaWNrc1wiaW4gZiYmKHE9ITApO0soZixmdW5jdGlvbihhLGMpey0xIT09ZS5wcm9wc1JlcXVpcmVVcGRhdGVTZXJpZXMuaW5kZXhPZihcImNoYXJ0LlwiK2MpJiYoaz0hMCk7LTEhPT1lLnByb3BzUmVxdWlyZURpcnR5Qm94LmluZGV4T2YoYykmJihlLmlzRGlydHlCb3g9ITApOy0xIT09ZS5wcm9wc1JlcXVpcmVSZWZsb3cuaW5kZXhPZihjKSYmKG4/ZS5pc0RpcnR5Qm94PSEwOmw9ITApfSk7IWUuc3R5bGVkTW9kZSYmXCJzdHlsZVwiaW4gZiYmZS5yZW5kZXJlci5zZXRTdHlsZShmLnN0eWxlKX0hZS5zdHlsZWRNb2RlJiZhLmNvbG9ycyYmKHRoaXMub3B0aW9ucy5jb2xvcnM9YS5jb2xvcnMpO2EudGltZSYmKHRoaXMudGltZT09PW0mJih0aGlzLnRpbWU9bmV3IHYoYS50aW1lKSksUyghMCxlLm9wdGlvbnMudGltZSxhLnRpbWUpKTtLKGEsZnVuY3Rpb24oYyxcbmQpe2lmKGVbZF0mJlwiZnVuY3Rpb25cIj09PXR5cGVvZiBlW2RdLnVwZGF0ZSllW2RdLnVwZGF0ZShjLCExKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09PXR5cGVvZiBlW2dbZF1dKWVbZ1tkXV0oYyk7ZWxzZVwiY29sb3JzXCIhPT1kJiYtMT09PWUuY29sbGVjdGlvbnNXaXRoVXBkYXRlLmluZGV4T2YoZCkmJlMoITAsZS5vcHRpb25zW2RdLGFbZF0pO1wiY2hhcnRcIiE9PWQmJi0xIT09ZS5wcm9wc1JlcXVpcmVVcGRhdGVTZXJpZXMuaW5kZXhPZihkKSYmKGs9ITApfSk7dGhpcy5jb2xsZWN0aW9uc1dpdGhVcGRhdGUuZm9yRWFjaChmdW5jdGlvbihjKXtpZihhW2NdKXt2YXIgYj1bXTtlW2NdLmZvckVhY2goZnVuY3Rpb24oYSxjKXthLm9wdGlvbnMuaXNJbnRlcm5hbHx8Yi5wdXNoKFQoYS5vcHRpb25zLmluZGV4LGMpKX0pO1koYVtjXSkuZm9yRWFjaChmdW5jdGlvbihhLGgpe3ZhciBnPXkoYS5pZCksZjtnJiYoZj1lLmdldChhLmlkKSk7IWYmJmVbY10mJihmPWVbY11bYj9iW2hdOmhdKSYmZyYmXG55KGYub3B0aW9ucy5pZCkmJihmPXZvaWQgMCk7ZiYmZi5jb2xsPT09YyYmKGYudXBkYXRlKGEsITEpLGQmJihmLnRvdWNoZWQ9ITApKTshZiYmZCYmZS5jb2xsZWN0aW9uc1dpdGhJbml0W2NdJiYoZS5jb2xsZWN0aW9uc1dpdGhJbml0W2NdWzBdLmFwcGx5KGUsW2FdLmNvbmNhdChlLmNvbGxlY3Rpb25zV2l0aEluaXRbY11bMV18fFtdKS5jb25jYXQoWyExXSkpLnRvdWNoZWQ9ITApfSk7ZCYmZVtjXS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EudG91Y2hlZHx8YS5vcHRpb25zLmlzSW50ZXJuYWw/ZGVsZXRlIGEudG91Y2hlZDpyLnB1c2goYSl9KX19KTtyLmZvckVhY2goZnVuY3Rpb24oYSl7YS5jaGFydCYmYS5yZW1vdmUoITEpfSk7cSYmZS5heGVzLmZvckVhY2goZnVuY3Rpb24oYSl7YS51cGRhdGUoe30sITEpfSk7ayYmZS5nZXRTZXJpZXNPcmRlckJ5TGlua3MoKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EuY2hhcnQmJmEudXBkYXRlKHt9LCExKX0sdGhpcyk7cT1mJiZmLndpZHRoO2Y9XG5mJiZmLmhlaWdodDtGKGYpJiYoZj1VKGYscXx8ZS5jaGFydFdpZHRoKSk7bHx8WihxKSYmcSE9PWUuY2hhcnRXaWR0aHx8WihmKSYmZiE9PWUuY2hhcnRIZWlnaHQ/ZS5zZXRTaXplKHEsZixiKTpUKGMsITApJiZlLnJlZHJhdyhiKTtNKGUsXCJhZnRlclVwZGF0ZVwiLHtvcHRpb25zOmEscmVkcmF3OmMsYW5pbWF0aW9uOmJ9KX07ZS5wcm90b3R5cGUuc2V0U3VidGl0bGU9ZnVuY3Rpb24oYSxjKXt0aGlzLmFwcGx5RGVzY3JpcHRpb24oXCJzdWJ0aXRsZVwiLGEpO3RoaXMubGF5T3V0VGl0bGVzKGMpfTtlLnByb3RvdHlwZS5zZXRDYXB0aW9uPWZ1bmN0aW9uKGEsYyl7dGhpcy5hcHBseURlc2NyaXB0aW9uKFwiY2FwdGlvblwiLGEpO3RoaXMubGF5T3V0VGl0bGVzKGMpfTtlLnByb3RvdHlwZS5zaG93UmVzZXRab29tPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe2Muem9vbU91dCgpfXZhciBjPXRoaXMsZD1FLmxhbmcsYj1jLm9wdGlvbnMuY2hhcnQucmVzZXRab29tQnV0dG9uLGU9Yi50aGVtZSxcbmg9ZS5zdGF0ZXMsZz1cImNoYXJ0XCI9PT1iLnJlbGF0aXZlVG98fFwic3BhY2luZ0JveFwiPT09Yi5yZWxhdGl2ZVRvP251bGw6XCJzY3JvbGxhYmxlUGxvdEJveFwiO00odGhpcyxcImJlZm9yZVNob3dSZXNldFpvb21cIixudWxsLGZ1bmN0aW9uKCl7Yy5yZXNldFpvb21CdXR0b249Yy5yZW5kZXJlci5idXR0b24oZC5yZXNldFpvb20sbnVsbCxudWxsLGEsZSxoJiZoLmhvdmVyKS5hdHRyKHthbGlnbjpiLnBvc2l0aW9uLmFsaWduLHRpdGxlOmQucmVzZXRab29tVGl0bGV9KS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtcmVzZXQtem9vbVwiKS5hZGQoKS5hbGlnbihiLnBvc2l0aW9uLCExLGcpfSk7TSh0aGlzLFwiYWZ0ZXJTaG93UmVzZXRab29tXCIpfTtlLnByb3RvdHlwZS56b29tT3V0PWZ1bmN0aW9uKCl7TSh0aGlzLFwic2VsZWN0aW9uXCIse3Jlc2V0U2VsZWN0aW9uOiEwfSx0aGlzLnpvb20pfTtlLnByb3RvdHlwZS56b29tPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMsZCxiPWMucG9pbnRlcixlPSExLGg9XG5jLmludmVydGVkP2IubW91c2VEb3duWDpiLm1vdXNlRG93blk7IWF8fGEucmVzZXRTZWxlY3Rpb24/KGMuYXhlcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Q9YS56b29tKCl9KSxiLmluaXRpYXRlZD0hMSk6YS54QXhpcy5jb25jYXQoYS55QXhpcykuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgZz1hLmF4aXMsZj1jLmludmVydGVkP2cubGVmdDpnLnRvcCxtPWMuaW52ZXJ0ZWQ/ZitnLndpZHRoOmYrZy5oZWlnaHQsaz1nLmlzWEF4aXMsbD0hMTtpZighayYmaD49ZiYmaDw9bXx8a3x8IXkoaCkpbD0hMDtiW2s/XCJ6b29tWFwiOlwiem9vbVlcIl0mJmwmJihkPWcuem9vbShhLm1pbixhLm1heCksZy5kaXNwbGF5QnRuJiYoZT0hMCkpfSk7dmFyIGc9Yy5yZXNldFpvb21CdXR0b247ZSYmIWc/Yy5zaG93UmVzZXRab29tKCk6IWUmJmVhKGcpJiYoYy5yZXNldFpvb21CdXR0b249Zy5kZXN0cm95KCkpO2QmJmMucmVkcmF3KFQoYy5vcHRpb25zLmNoYXJ0LmFuaW1hdGlvbixhJiZhLmFuaW1hdGlvbiwxMDA+XG5jLnBvaW50Q291bnQpKX07ZS5wcm90b3R5cGUucGFuPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9dGhpcyxiPWQuaG92ZXJQb2ludHMsZT1kLm9wdGlvbnMuY2hhcnQsaD1kLm9wdGlvbnMubWFwTmF2aWdhdGlvbiYmZC5vcHRpb25zLm1hcE5hdmlnYXRpb24uZW5hYmxlZCxnO2M9XCJvYmplY3RcIj09PXR5cGVvZiBjP2M6e2VuYWJsZWQ6Yyx0eXBlOlwieFwifTtlJiZlLnBhbm5pbmcmJihlLnBhbm5pbmc9Yyk7dmFyIGY9Yy50eXBlO00odGhpcyxcInBhblwiLHtvcmlnaW5hbEV2ZW50OmF9LGZ1bmN0aW9uKCl7YiYmYi5mb3JFYWNoKGZ1bmN0aW9uKGEpe2Euc2V0U3RhdGUoKX0pO3ZhciBjPVsxXTtcInh5XCI9PT1mP2M9WzEsMF06XCJ5XCI9PT1mJiYoYz1bMF0pO2MuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgYj1kW2M/XCJ4QXhpc1wiOlwieUF4aXNcIl1bMF0sZT1iLmhvcml6LG09YVtlP1wiY2hhcnRYXCI6XCJjaGFydFlcIl07ZT1lP1wibW91c2VEb3duWFwiOlwibW91c2VEb3duWVwiO3ZhciBrPWRbZV0sbD0oYi5wb2ludFJhbmdlfHxcbjApLzIsRj1iLnJldmVyc2VkJiYhZC5pbnZlcnRlZHx8IWIucmV2ZXJzZWQmJmQuaW52ZXJ0ZWQ/LTE6MSxuPWIuZ2V0RXh0cmVtZXMoKSxyPWIudG9WYWx1ZShrLW0sITApK2wqRjtGPWIudG9WYWx1ZShrK2IubGVuLW0sITApLWwqRjt2YXIgSz1GPHI7az1LP0Y6cjtyPUs/cjpGO0Y9Yi5oYXNWZXJ0aWNhbFBhbm5pbmcoKTt2YXIgcT1iLnBhbm5pbmdTdGF0ZTshRnx8Y3x8cSYmIXEuaXNEaXJ0eXx8Yi5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYz1hLmdldFByb2Nlc3NlZERhdGEoITApO2M9YS5nZXRFeHRyZW1lcyhjLnlEYXRhLCEwKTtxfHwocT17c3RhcnRNaW46TnVtYmVyLk1BWF9WQUxVRSxzdGFydE1heDotTnVtYmVyLk1BWF9WQUxVRX0pO1ooYy5kYXRhTWluKSYmWihjLmRhdGFNYXgpJiYocS5zdGFydE1pbj1NYXRoLm1pbihUKGEub3B0aW9ucy50aHJlc2hvbGQsSW5maW5pdHkpLGMuZGF0YU1pbixxLnN0YXJ0TWluKSxxLnN0YXJ0TWF4PU1hdGgubWF4KFQoYS5vcHRpb25zLnRocmVzaG9sZCxcbi1JbmZpbml0eSksYy5kYXRhTWF4LHEuc3RhcnRNYXgpKX0pO2M9TWF0aC5taW4oVChxJiZxLnN0YXJ0TWluLG4uZGF0YU1pbiksbD9uLm1pbjpiLnRvVmFsdWUoYi50b1BpeGVscyhuLm1pbiktYi5taW5QaXhlbFBhZGRpbmcpKTtsPU1hdGgubWF4KFQocSYmcS5zdGFydE1heCxuLmRhdGFNYXgpLGw/bi5tYXg6Yi50b1ZhbHVlKGIudG9QaXhlbHMobi5tYXgpK2IubWluUGl4ZWxQYWRkaW5nKSk7Yi5wYW5uaW5nU3RhdGU9cTtiLmlzT3JkaW5hbHx8KEY9Yy1rLDA8RiYmKHIrPUYsaz1jKSxGPXItbCwwPEYmJihyPWwsay09RiksYi5zZXJpZXMubGVuZ3RoJiZrIT09bi5taW4mJnIhPT1uLm1heCYmaz49YyYmcjw9bCYmKGIuc2V0RXh0cmVtZXMoayxyLCExLCExLHt0cmlnZ2VyOlwicGFuXCJ9KSxkLnJlc2V0Wm9vbUJ1dHRvbnx8aHx8az09PWN8fHI9PT1sfHwhZi5tYXRjaChcInlcIil8fChkLnNob3dSZXNldFpvb20oKSxiLmRpc3BsYXlCdG49ITEpLGc9ITApLGRbZV09bSl9KTtnJiZkLnJlZHJhdyghMSk7XG5BKGQuY29udGFpbmVyLHtjdXJzb3I6XCJtb3ZlXCJ9KX0pfTtyZXR1cm4gZX0oKTtWKGFhLnByb3RvdHlwZSx7Y2FsbGJhY2tzOltdLGNvbGxlY3Rpb25zV2l0aEluaXQ6e3hBeGlzOlthYS5wcm90b3R5cGUuYWRkQXhpcyxbITBdXSx5QXhpczpbYWEucHJvdG90eXBlLmFkZEF4aXMsWyExXV0sc2VyaWVzOlthYS5wcm90b3R5cGUuYWRkU2VyaWVzXX0sY29sbGVjdGlvbnNXaXRoVXBkYXRlOltcInhBeGlzXCIsXCJ5QXhpc1wiLFwiekF4aXNcIixcInNlcmllc1wiXSxwcm9wc1JlcXVpcmVEaXJ0eUJveDpcImJhY2tncm91bmRDb2xvciBib3JkZXJDb2xvciBib3JkZXJXaWR0aCBib3JkZXJSYWRpdXMgcGxvdEJhY2tncm91bmRDb2xvciBwbG90QmFja2dyb3VuZEltYWdlIHBsb3RCb3JkZXJDb2xvciBwbG90Qm9yZGVyV2lkdGggcGxvdFNoYWRvdyBzaGFkb3dcIi5zcGxpdChcIiBcIikscHJvcHNSZXF1aXJlUmVmbG93OlwibWFyZ2luIG1hcmdpblRvcCBtYXJnaW5SaWdodCBtYXJnaW5Cb3R0b20gbWFyZ2luTGVmdCBzcGFjaW5nIHNwYWNpbmdUb3Agc3BhY2luZ1JpZ2h0IHNwYWNpbmdCb3R0b20gc3BhY2luZ0xlZnRcIi5zcGxpdChcIiBcIiksXG5wcm9wc1JlcXVpcmVVcGRhdGVTZXJpZXM6XCJjaGFydC5pbnZlcnRlZCBjaGFydC5wb2xhciBjaGFydC5pZ25vcmVIaWRkZW5TZXJpZXMgY2hhcnQudHlwZSBjb2xvcnMgcGxvdE9wdGlvbnMgdGltZSB0b29sdGlwXCIuc3BsaXQoXCIgXCIpfSk7ei5jaGFydD1mdW5jdGlvbihhLGMsZCl7cmV0dXJuIG5ldyBhYShhLGMsZCl9O3ouQ2hhcnQ9YWE7XCJcIjtyZXR1cm4gYWF9KTtPKGUsXCJNaXhpbnMvTGVnZW5kU3ltYm9sLmpzXCIsW2VbXCJDb3JlL0dsb2JhbHMuanNcIl0sZVtcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihlLGIpe3ZhciBEPWIubWVyZ2Usej1iLnBpY2s7cmV0dXJuIGUuTGVnZW5kU3ltYm9sTWl4aW49e2RyYXdSZWN0YW5nbGU6ZnVuY3Rpb24oYixlKXt2YXIgRD1iLnN5bWJvbEhlaWdodCxCPWIub3B0aW9ucy5zcXVhcmVTeW1ib2w7ZS5sZWdlbmRTeW1ib2w9dGhpcy5jaGFydC5yZW5kZXJlci5yZWN0KEI/KGIuc3ltYm9sV2lkdGgtRCkvMjowLGIuYmFzZWxpbmUtRCsxLEI/XG5EOmIuc3ltYm9sV2lkdGgsRCx6KGIub3B0aW9ucy5zeW1ib2xSYWRpdXMsRC8yKSkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLXBvaW50XCIpLmF0dHIoe3pJbmRleDozfSkuYWRkKGUubGVnZW5kR3JvdXApfSxkcmF3TGluZU1hcmtlcjpmdW5jdGlvbihiKXt2YXIgZT10aGlzLm9wdGlvbnMsQz1lLm1hcmtlcixCPWIuc3ltYm9sV2lkdGgseD1iLnN5bWJvbEhlaWdodCx3PXgvMix2PXRoaXMuY2hhcnQucmVuZGVyZXIsZj10aGlzLmxlZ2VuZEdyb3VwO2I9Yi5iYXNlbGluZS1NYXRoLnJvdW5kKC4zKmIuZm9udE1ldHJpY3MuYik7dmFyIGQ9e307dGhpcy5jaGFydC5zdHlsZWRNb2RlfHwoZD17XCJzdHJva2Utd2lkdGhcIjplLmxpbmVXaWR0aHx8MH0sZS5kYXNoU3R5bGUmJihkLmRhc2hzdHlsZT1lLmRhc2hTdHlsZSkpO3RoaXMubGVnZW5kTGluZT12LnBhdGgoW1tcIk1cIiwwLGJdLFtcIkxcIixCLGJdXSkuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLWdyYXBoXCIpLmF0dHIoZCkuYWRkKGYpO0MmJiExIT09XG5DLmVuYWJsZWQmJkImJihlPU1hdGgubWluKHooQy5yYWRpdXMsdyksdyksMD09PXRoaXMuc3ltYm9sLmluZGV4T2YoXCJ1cmxcIikmJihDPUQoQyx7d2lkdGg6eCxoZWlnaHQ6eH0pLGU9MCksdGhpcy5sZWdlbmRTeW1ib2w9Qz12LnN5bWJvbCh0aGlzLnN5bWJvbCxCLzItZSxiLWUsMiplLDIqZSxDKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtcG9pbnRcIikuYWRkKGYpLEMuaXNNYXJrZXI9ITApfX19KTtPKGUsXCJDb3JlL1Nlcmllcy9TZXJpZXMuanNcIixbZVtcIkNvcmUvQW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5qc1wiXSxlW1wiQ29yZS9HbG9iYWxzLmpzXCJdLGVbXCJNaXhpbnMvTGVnZW5kU3ltYm9sLmpzXCJdLGVbXCJDb3JlL09wdGlvbnMuanNcIl0sZVtcIkNvcmUvQ29sb3IvUGFsZXR0ZS5qc1wiXSxlW1wiQ29yZS9TZXJpZXMvUG9pbnQuanNcIl0sZVtcIkNvcmUvU2VyaWVzL1Nlcmllc1JlZ2lzdHJ5LmpzXCJdLGVbXCJDb3JlL1JlbmRlcmVyL1NWRy9TVkdFbGVtZW50LmpzXCJdLGVbXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sXG5mdW5jdGlvbihlLGIsSSx6LEgsRyxDLEIseCl7dmFyIHc9ZS5hbmltT2JqZWN0LHY9ZS5zZXRBbmltYXRpb24sZj1iLmhhc1RvdWNoLGQ9Yi5zdmcscT1iLndpbixrPXouZGVmYXVsdE9wdGlvbnMsbD1DLnNlcmllc1R5cGVzLEQ9eC5hZGRFdmVudCx1PXguYXJyYXlNYXgsbj14LmFycmF5TWluLEo9eC5jbGFtcCxFPXguY2xlYW5SZWN1cnNpdmVseSxtPXguY29ycmVjdEZsb2F0LGM9eC5kZWZpbmVkLGc9eC5lcmFzZSxhPXguZXJyb3IsaD14LmV4dGVuZCxyPXguZmluZCxBPXguZmlyZUV2ZW50LHk9eC5nZXROZXN0ZWRQcm9wZXJ0eSxMPXguaXNBcnJheSxQPXguaXNGdW5jdGlvbixSPXguaXNOdW1iZXIsVj14LmlzU3RyaW5nLFE9eC5tZXJnZSxNPXgub2JqZWN0RWFjaCx0PXgucGljayxwPXgucmVtb3ZlRXZlbnQsTz14LnNwbGF0LFo9eC5zeW5jVGltZW91dDtlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYigpe3RoaXMuem9uZXM9dGhpcy55QXhpcz10aGlzLnhBeGlzPXRoaXMudXNlck9wdGlvbnM9XG50aGlzLnRvb2x0aXBPcHRpb25zPXRoaXMucHJvY2Vzc2VkWURhdGE9dGhpcy5wcm9jZXNzZWRYRGF0YT10aGlzLnBvaW50cz10aGlzLm9wdGlvbnM9dGhpcy5saW5rZWRTZXJpZXM9dGhpcy5pbmRleD10aGlzLmV2ZW50c1RvVW5iaW5kPXRoaXMuZXZlbnRPcHRpb25zPXRoaXMuZGF0YT10aGlzLmNoYXJ0PXRoaXMuX2k9dm9pZCAwfWIucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYSxjKXtBKHRoaXMsXCJpbml0XCIse29wdGlvbnM6Y30pO3ZhciBkPXRoaXMsYj1hLnNlcmllcyxlO3RoaXMuZXZlbnRPcHRpb25zPXRoaXMuZXZlbnRPcHRpb25zfHx7fTt0aGlzLmV2ZW50c1RvVW5iaW5kPVtdO2QuY2hhcnQ9YTtkLm9wdGlvbnM9ZC5zZXRPcHRpb25zKGMpO3ZhciBnPWQub3B0aW9ucztkLmxpbmtlZFNlcmllcz1bXTtkLmJpbmRBeGVzKCk7aChkLHtuYW1lOmcubmFtZSxzdGF0ZTpcIlwiLHZpc2libGU6ITEhPT1nLnZpc2libGUsc2VsZWN0ZWQ6ITA9PT1nLnNlbGVjdGVkfSk7Yz1nLmV2ZW50cztcbk0oYyxmdW5jdGlvbihhLGMpe1AoYSkmJmQuZXZlbnRPcHRpb25zW2NdIT09YSYmKFAoZC5ldmVudE9wdGlvbnNbY10pJiZwKGQsYyxkLmV2ZW50T3B0aW9uc1tjXSksZC5ldmVudE9wdGlvbnNbY109YSxEKGQsYyxhKSl9KTtpZihjJiZjLmNsaWNrfHxnLnBvaW50JiZnLnBvaW50LmV2ZW50cyYmZy5wb2ludC5ldmVudHMuY2xpY2t8fGcuYWxsb3dQb2ludFNlbGVjdClhLnJ1blRyYWNrZXJDbGljaz0hMDtkLmdldENvbG9yKCk7ZC5nZXRTeW1ib2woKTtkLnBhcmFsbGVsQXJyYXlzLmZvckVhY2goZnVuY3Rpb24oYSl7ZFthK1wiRGF0YVwiXXx8KGRbYStcIkRhdGFcIl09W10pfSk7ZC5pc0NhcnRlc2lhbiYmKGEuaGFzQ2FydGVzaWFuU2VyaWVzPSEwKTtiLmxlbmd0aCYmKGU9YltiLmxlbmd0aC0xXSk7ZC5faT10KGUmJmUuX2ksLTEpKzE7ZC5vcGFjaXR5PWQub3B0aW9ucy5vcGFjaXR5O2Eub3JkZXJTZXJpZXModGhpcy5pbnNlcnQoYikpO2cuZGF0YVNvcnRpbmcmJmcuZGF0YVNvcnRpbmcuZW5hYmxlZD9cbmQuc2V0RGF0YVNvcnRpbmdPcHRpb25zKCk6ZC5wb2ludHN8fGQuZGF0YXx8ZC5zZXREYXRhKGcuZGF0YSwhMSk7QSh0aGlzLFwiYWZ0ZXJJbml0XCIpfTtiLnByb3RvdHlwZS5pcz1mdW5jdGlvbihhKXtyZXR1cm4gbFthXSYmdGhpcyBpbnN0YW5jZW9mIGxbYV19O2IucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbihhKXt2YXIgYz10aGlzLm9wdGlvbnMuaW5kZXgsZDtpZihSKGMpKXtmb3IoZD1hLmxlbmd0aDtkLS07KWlmKGM+PXQoYVtkXS5vcHRpb25zLmluZGV4LGFbZF0uX2kpKXthLnNwbGljZShkKzEsMCx0aGlzKTticmVha30tMT09PWQmJmEudW5zaGlmdCh0aGlzKTtkKz0xfWVsc2UgYS5wdXNoKHRoaXMpO3JldHVybiB0KGQsYS5sZW5ndGgtMSl9O2IucHJvdG90eXBlLmJpbmRBeGVzPWZ1bmN0aW9uKCl7dmFyIGM9dGhpcyxkPWMub3B0aW9ucyxiPWMuY2hhcnQsZTtBKHRoaXMsXCJiaW5kQXhlc1wiLG51bGwsZnVuY3Rpb24oKXsoYy5heGlzVHlwZXN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGgpe3ZhciBnPVxuMDtiW2hdLmZvckVhY2goZnVuY3Rpb24oYSl7ZT1hLm9wdGlvbnM7aWYoZFtoXT09PWcmJiFlLmlzSW50ZXJuYWx8fFwidW5kZWZpbmVkXCIhPT10eXBlb2YgZFtoXSYmZFtoXT09PWUuaWR8fFwidW5kZWZpbmVkXCI9PT10eXBlb2YgZFtoXSYmMD09PWUuaW5kZXgpYy5pbnNlcnQoYS5zZXJpZXMpLGNbaF09YSxhLmlzRGlydHk9ITA7ZS5pc0ludGVybmFsfHxnKyt9KTtjW2hdfHxjLm9wdGlvbmFsQXhpcz09PWh8fGEoMTgsITAsYil9KX0pO0EodGhpcyxcImFmdGVyQmluZEF4ZXNcIil9O2IucHJvdG90eXBlLnVwZGF0ZVBhcmFsbGVsQXJyYXlzPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9YS5zZXJpZXMsYj1hcmd1bWVudHMsZT1SKGMpP2Z1bmN0aW9uKGIpe3ZhciBlPVwieVwiPT09YiYmZC50b1lEYXRhP2QudG9ZRGF0YShhKTphW2JdO2RbYitcIkRhdGFcIl1bY109ZX06ZnVuY3Rpb24oYSl7QXJyYXkucHJvdG90eXBlW2NdLmFwcGx5KGRbYStcIkRhdGFcIl0sQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYixcbjIpKX07ZC5wYXJhbGxlbEFycmF5cy5mb3JFYWNoKGUpfTtiLnByb3RvdHlwZS5oYXNEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlzaWJsZSYmXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiB0aGlzLmRhdGFNYXgmJlwidW5kZWZpbmVkXCIhPT10eXBlb2YgdGhpcy5kYXRhTWlufHx0aGlzLnZpc2libGUmJnRoaXMueURhdGEmJjA8dGhpcy55RGF0YS5sZW5ndGh9O2IucHJvdG90eXBlLmF1dG9JbmNyZW1lbnQ9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9wdGlvbnMsYz10aGlzLnhJbmNyZW1lbnQsZCxiPWEucG9pbnRJbnRlcnZhbFVuaXQsZT10aGlzLmNoYXJ0LnRpbWU7Yz10KGMsYS5wb2ludFN0YXJ0LDApO3RoaXMucG9pbnRJbnRlcnZhbD1kPXQodGhpcy5wb2ludEludGVydmFsLGEucG9pbnRJbnRlcnZhbCwxKTtiJiYoYT1uZXcgZS5EYXRlKGMpLFwiZGF5XCI9PT1iP2Uuc2V0KFwiRGF0ZVwiLGEsZS5nZXQoXCJEYXRlXCIsYSkrZCk6XCJtb250aFwiPT09Yj9lLnNldChcIk1vbnRoXCIsYSxlLmdldChcIk1vbnRoXCIsXG5hKStkKTpcInllYXJcIj09PWImJmUuc2V0KFwiRnVsbFllYXJcIixhLGUuZ2V0KFwiRnVsbFllYXJcIixhKStkKSxkPWEuZ2V0VGltZSgpLWMpO3RoaXMueEluY3JlbWVudD1jK2Q7cmV0dXJuIGN9O2IucHJvdG90eXBlLnNldERhdGFTb3J0aW5nT3B0aW9ucz1mdW5jdGlvbigpe3ZhciBhPXRoaXMub3B0aW9ucztoKHRoaXMse3JlcXVpcmVTb3J0aW5nOiExLHNvcnRlZDohMSxlbmFibGVkRGF0YVNvcnRpbmc6ITAsYWxsb3dERzohMX0pO2MoYS5wb2ludFJhbmdlKXx8KGEucG9pbnRSYW5nZT0xKX07Yi5wcm90b3R5cGUuc2V0T3B0aW9ucz1mdW5jdGlvbihhKXt2YXIgZD10aGlzLmNoYXJ0LGI9ZC5vcHRpb25zLGU9Yi5wbG90T3B0aW9ucyxoPWQudXNlck9wdGlvbnN8fHt9O2E9UShhKTtkPWQuc3R5bGVkTW9kZTt2YXIgZz17cGxvdE9wdGlvbnM6ZSx1c2VyT3B0aW9uczphfTtBKHRoaXMsXCJzZXRPcHRpb25zXCIsZyk7dmFyIGY9Zy5wbG90T3B0aW9uc1t0aGlzLnR5cGVdLG09aC5wbG90T3B0aW9uc3x8XG57fTt0aGlzLnVzZXJPcHRpb25zPWcudXNlck9wdGlvbnM7aD1RKGYsZS5zZXJpZXMsaC5wbG90T3B0aW9ucyYmaC5wbG90T3B0aW9uc1t0aGlzLnR5cGVdLGEpO3RoaXMudG9vbHRpcE9wdGlvbnM9UShrLnRvb2x0aXAsay5wbG90T3B0aW9ucy5zZXJpZXMmJmsucGxvdE9wdGlvbnMuc2VyaWVzLnRvb2x0aXAsay5wbG90T3B0aW9uc1t0aGlzLnR5cGVdLnRvb2x0aXAsYi50b29sdGlwLnVzZXJPcHRpb25zLGUuc2VyaWVzJiZlLnNlcmllcy50b29sdGlwLGVbdGhpcy50eXBlXS50b29sdGlwLGEudG9vbHRpcCk7dGhpcy5zdGlja3lUcmFja2luZz10KGEuc3RpY2t5VHJhY2tpbmcsbVt0aGlzLnR5cGVdJiZtW3RoaXMudHlwZV0uc3RpY2t5VHJhY2tpbmcsbS5zZXJpZXMmJm0uc2VyaWVzLnN0aWNreVRyYWNraW5nLHRoaXMudG9vbHRpcE9wdGlvbnMuc2hhcmVkJiYhdGhpcy5ub1NoYXJlZFRvb2x0aXA/ITA6aC5zdGlja3lUcmFja2luZyk7bnVsbD09PWYubWFya2VyJiZkZWxldGUgaC5tYXJrZXI7XG50aGlzLnpvbmVBeGlzPWguem9uZUF4aXM7Yj10aGlzLnpvbmVzPShoLnpvbmVzfHxbXSkuc2xpY2UoKTshaC5uZWdhdGl2ZUNvbG9yJiYhaC5uZWdhdGl2ZUZpbGxDb2xvcnx8aC56b25lc3x8KGU9e3ZhbHVlOmhbdGhpcy56b25lQXhpcytcIlRocmVzaG9sZFwiXXx8aC50aHJlc2hvbGR8fDAsY2xhc3NOYW1lOlwiaGlnaGNoYXJ0cy1uZWdhdGl2ZVwifSxkfHwoZS5jb2xvcj1oLm5lZ2F0aXZlQ29sb3IsZS5maWxsQ29sb3I9aC5uZWdhdGl2ZUZpbGxDb2xvciksYi5wdXNoKGUpKTtiLmxlbmd0aCYmYyhiW2IubGVuZ3RoLTFdLnZhbHVlKSYmYi5wdXNoKGQ/e306e2NvbG9yOnRoaXMuY29sb3IsZmlsbENvbG9yOnRoaXMuZmlsbENvbG9yfSk7QSh0aGlzLFwiYWZ0ZXJTZXRPcHRpb25zXCIse29wdGlvbnM6aH0pO3JldHVybiBofTtiLnByb3RvdHlwZS5nZXROYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcy5vcHRpb25zLm5hbWUsXCJTZXJpZXMgXCIrKHRoaXMuaW5kZXgrMSkpfTtiLnByb3RvdHlwZS5nZXRDeWNsaWM9XG5mdW5jdGlvbihhLGQsYil7dmFyIGU9dGhpcy5jaGFydCxoPXRoaXMudXNlck9wdGlvbnMsZz1hK1wiSW5kZXhcIixmPWErXCJDb3VudGVyXCIsbT1iP2IubGVuZ3RoOnQoZS5vcHRpb25zLmNoYXJ0W2ErXCJDb3VudFwiXSxlW2ErXCJDb3VudFwiXSk7aWYoIWQpe3ZhciBrPXQoaFtnXSxoW1wiX1wiK2ddKTtjKGspfHwoZS5zZXJpZXMubGVuZ3RofHwoZVtmXT0wKSxoW1wiX1wiK2ddPWs9ZVtmXSVtLGVbZl0rPTEpO2ImJihkPWJba10pfVwidW5kZWZpbmVkXCIhPT10eXBlb2YgayYmKHRoaXNbZ109ayk7dGhpc1thXT1kfTtiLnByb3RvdHlwZS5nZXRDb2xvcj1mdW5jdGlvbigpe3RoaXMuY2hhcnQuc3R5bGVkTW9kZT90aGlzLmdldEN5Y2xpYyhcImNvbG9yXCIpOnRoaXMub3B0aW9ucy5jb2xvckJ5UG9pbnQ/dGhpcy5jb2xvcj1ILm5ldXRyYWxDb2xvcjIwOnRoaXMuZ2V0Q3ljbGljKFwiY29sb3JcIix0aGlzLm9wdGlvbnMuY29sb3J8fGsucGxvdE9wdGlvbnNbdGhpcy50eXBlXS5jb2xvcix0aGlzLmNoYXJ0Lm9wdGlvbnMuY29sb3JzKX07XG5iLnByb3RvdHlwZS5nZXRQb2ludHNDb2xsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuaGFzR3JvdXBlZERhdGE/dGhpcy5wb2ludHM6dGhpcy5kYXRhKXx8W119O2IucHJvdG90eXBlLmdldFN5bWJvbD1mdW5jdGlvbigpe3RoaXMuZ2V0Q3ljbGljKFwic3ltYm9sXCIsdGhpcy5vcHRpb25zLm1hcmtlci5zeW1ib2wsdGhpcy5jaGFydC5vcHRpb25zLnN5bWJvbHMpfTtiLnByb3RvdHlwZS5maW5kUG9pbnRJbmRleD1mdW5jdGlvbihhLGMpe3ZhciBkPWEuaWQsYj1hLngsZT10aGlzLnBvaW50cyxoLGc9dGhpcy5vcHRpb25zLmRhdGFTb3J0aW5nO2lmKGQpdmFyIGY9dGhpcy5jaGFydC5nZXQoZCk7ZWxzZSBpZih0aGlzLmxpbmtlZFBhcmVudHx8dGhpcy5lbmFibGVkRGF0YVNvcnRpbmcpe3ZhciBtPWcmJmcubWF0Y2hCeU5hbWU/XCJuYW1lXCI6XCJpbmRleFwiO2Y9cihlLGZ1bmN0aW9uKGMpe3JldHVybiFjLnRvdWNoZWQmJmNbbV09PT1hW21dfSk7aWYoIWYpcmV0dXJufWlmKGYpe3ZhciBrPVxuZiYmZi5pbmRleDtcInVuZGVmaW5lZFwiIT09dHlwZW9mIGsmJihoPSEwKX1cInVuZGVmaW5lZFwiPT09dHlwZW9mIGsmJlIoYikmJihrPXRoaXMueERhdGEuaW5kZXhPZihiLGMpKTstMSE9PWsmJlwidW5kZWZpbmVkXCIhPT10eXBlb2YgayYmdGhpcy5jcm9wcGVkJiYoaz1rPj10aGlzLmNyb3BTdGFydD9rLXRoaXMuY3JvcFN0YXJ0OmspOyFoJiZlW2tdJiZlW2tdLnRvdWNoZWQmJihrPXZvaWQgMCk7cmV0dXJuIGt9O2IucHJvdG90eXBlLnVwZGF0ZURhdGE9ZnVuY3Rpb24oYSxkKXt2YXIgYj10aGlzLm9wdGlvbnMsZT1iLmRhdGFTb3J0aW5nLGg9dGhpcy5wb2ludHMsZz1bXSxmLGssbSxsPXRoaXMucmVxdWlyZVNvcnRpbmcsbj1hLmxlbmd0aD09PWgubGVuZ3RoLHI9ITA7dGhpcy54SW5jcmVtZW50PW51bGw7YS5mb3JFYWNoKGZ1bmN0aW9uKGEsZCl7dmFyIGs9YyhhKSYmdGhpcy5wb2ludENsYXNzLnByb3RvdHlwZS5vcHRpb25zVG9PYmplY3QuY2FsbCh7c2VyaWVzOnRoaXN9LGEpfHx7fTtcbnZhciByPWsueDtpZihrLmlkfHxSKHIpKXtpZihyPXRoaXMuZmluZFBvaW50SW5kZXgoayxtKSwtMT09PXJ8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygcj9nLnB1c2goYSk6aFtyXSYmYSE9PWIuZGF0YVtyXT8oaFtyXS51cGRhdGUoYSwhMSxudWxsLCExKSxoW3JdLnRvdWNoZWQ9ITAsbCYmKG09cisxKSk6aFtyXSYmKGhbcl0udG91Y2hlZD0hMCksIW58fGQhPT1yfHxlJiZlLmVuYWJsZWR8fHRoaXMuaGFzRGVyaXZlZERhdGEpZj0hMH1lbHNlIGcucHVzaChhKX0sdGhpcyk7aWYoZilmb3IoYT1oLmxlbmd0aDthLS07KShrPWhbYV0pJiYhay50b3VjaGVkJiZrLnJlbW92ZSYmay5yZW1vdmUoITEsZCk7ZWxzZSFufHxlJiZlLmVuYWJsZWQ/cj0hMTooYS5mb3JFYWNoKGZ1bmN0aW9uKGEsYyl7aFtjXS51cGRhdGUmJmEhPT1oW2NdLnkmJmhbY10udXBkYXRlKGEsITEsbnVsbCwhMSl9KSxnLmxlbmd0aD0wKTtoLmZvckVhY2goZnVuY3Rpb24oYSl7YSYmKGEudG91Y2hlZD0hMSl9KTtpZighcilyZXR1cm4hMTtcbmcuZm9yRWFjaChmdW5jdGlvbihhKXt0aGlzLmFkZFBvaW50KGEsITEsbnVsbCxudWxsLCExKX0sdGhpcyk7bnVsbD09PXRoaXMueEluY3JlbWVudCYmdGhpcy54RGF0YSYmdGhpcy54RGF0YS5sZW5ndGgmJih0aGlzLnhJbmNyZW1lbnQ9dSh0aGlzLnhEYXRhKSx0aGlzLmF1dG9JbmNyZW1lbnQoKSk7cmV0dXJuITB9O2IucHJvdG90eXBlLnNldERhdGE9ZnVuY3Rpb24oYyxkLGIsZSl7dmFyIGg9dGhpcyxnPWgucG9pbnRzLGY9ZyYmZy5sZW5ndGh8fDAsayxtPWgub3B0aW9ucyxsPWguY2hhcnQscj1tLmRhdGFTb3J0aW5nLG49bnVsbCxxPWgueEF4aXM7bj1tLnR1cmJvVGhyZXNob2xkO3ZhciBGPXRoaXMueERhdGEscD10aGlzLnlEYXRhLHU9KGs9aC5wb2ludEFycmF5TWFwKSYmay5sZW5ndGgsdj1tLmtleXMsSz0wLHc9MSx5O2M9Y3x8W107az1jLmxlbmd0aDtkPXQoZCwhMCk7ciYmci5lbmFibGVkJiYoYz10aGlzLnNvcnREYXRhKGMpKTshMSE9PWUmJmsmJmYmJiFoLmNyb3BwZWQmJlxuIWguaGFzR3JvdXBlZERhdGEmJmgudmlzaWJsZSYmIWguaXNTZXJpZXNCb29zdGluZyYmKHk9dGhpcy51cGRhdGVEYXRhKGMsYikpO2lmKCF5KXtoLnhJbmNyZW1lbnQ9bnVsbDtoLmNvbG9yQ291bnRlcj0wO3RoaXMucGFyYWxsZWxBcnJheXMuZm9yRWFjaChmdW5jdGlvbihhKXtoW2ErXCJEYXRhXCJdLmxlbmd0aD0wfSk7aWYobiYmaz5uKWlmKG49aC5nZXRGaXJzdFZhbGlkUG9pbnQoYyksUihuKSlmb3IoYj0wO2I8aztiKyspRltiXT10aGlzLmF1dG9JbmNyZW1lbnQoKSxwW2JdPWNbYl07ZWxzZSBpZihMKG4pKWlmKHUpZm9yKGI9MDtiPGs7YisrKWU9Y1tiXSxGW2JdPWVbMF0scFtiXT1lLnNsaWNlKDEsdSsxKTtlbHNlIGZvcih2JiYoSz12LmluZGV4T2YoXCJ4XCIpLHc9di5pbmRleE9mKFwieVwiKSxLPTA8PUs/SzowLHc9MDw9dz93OjEpLGI9MDtiPGs7YisrKWU9Y1tiXSxGW2JdPWVbS10scFtiXT1lW3ddO2Vsc2UgYSgxMiwhMSxsKTtlbHNlIGZvcihiPTA7YjxrO2IrKylcInVuZGVmaW5lZFwiIT09XG50eXBlb2YgY1tiXSYmKGU9e3NlcmllczpofSxoLnBvaW50Q2xhc3MucHJvdG90eXBlLmFwcGx5T3B0aW9ucy5hcHBseShlLFtjW2JdXSksaC51cGRhdGVQYXJhbGxlbEFycmF5cyhlLGIpKTtwJiZWKHBbMF0pJiZhKDE0LCEwLGwpO2guZGF0YT1bXTtoLm9wdGlvbnMuZGF0YT1oLnVzZXJPcHRpb25zLmRhdGE9Yztmb3IoYj1mO2ItLTspZ1tiXSYmZ1tiXS5kZXN0cm95JiZnW2JdLmRlc3Ryb3koKTtxJiYocS5taW5SYW5nZT1xLnVzZXJNaW5SYW5nZSk7aC5pc0RpcnR5PWwuaXNEaXJ0eUJveD0hMDtoLmlzRGlydHlEYXRhPSEhZztiPSExfVwicG9pbnRcIj09PW0ubGVnZW5kVHlwZSYmKHRoaXMucHJvY2Vzc0RhdGEoKSx0aGlzLmdlbmVyYXRlUG9pbnRzKCkpO2QmJmwucmVkcmF3KGIpfTtiLnByb3RvdHlwZS5zb3J0RGF0YT1mdW5jdGlvbihhKXt2YXIgZD10aGlzLGI9ZC5vcHRpb25zLmRhdGFTb3J0aW5nLnNvcnRLZXl8fFwieVwiLGU9ZnVuY3Rpb24oYSxkKXtyZXR1cm4gYyhkKSYmYS5wb2ludENsYXNzLnByb3RvdHlwZS5vcHRpb25zVG9PYmplY3QuY2FsbCh7c2VyaWVzOmF9LFxuZCl8fHt9fTthLmZvckVhY2goZnVuY3Rpb24oYyxiKXthW2JdPWUoZCxjKTthW2JdLmluZGV4PWJ9LHRoaXMpO2EuY29uY2F0KCkuc29ydChmdW5jdGlvbihhLGMpe2E9eShiLGEpO2M9eShiLGMpO3JldHVybiBjPGE/LTE6Yz5hPzE6MH0pLmZvckVhY2goZnVuY3Rpb24oYSxjKXthLng9Y30sdGhpcyk7ZC5saW5rZWRTZXJpZXMmJmQubGlua2VkU2VyaWVzLmZvckVhY2goZnVuY3Rpb24oYyl7dmFyIGQ9Yy5vcHRpb25zLGI9ZC5kYXRhO2QuZGF0YVNvcnRpbmcmJmQuZGF0YVNvcnRpbmcuZW5hYmxlZHx8IWJ8fChiLmZvckVhY2goZnVuY3Rpb24oZCxoKXtiW2hdPWUoYyxkKTthW2hdJiYoYltoXS54PWFbaF0ueCxiW2hdLmluZGV4PWgpfSksYy5zZXREYXRhKGIsITEpKX0pO3JldHVybiBhfTtiLnByb3RvdHlwZS5nZXRQcm9jZXNzZWREYXRhPWZ1bmN0aW9uKGMpe3ZhciBkPXRoaXMueERhdGEsYj10aGlzLnlEYXRhLGU9ZC5sZW5ndGg7dmFyIGg9MDt2YXIgZz10aGlzLnhBeGlzLGY9XG50aGlzLm9wdGlvbnM7dmFyIGs9Zi5jcm9wVGhyZXNob2xkO3ZhciBtPWN8fHRoaXMuZ2V0RXh0cmVtZXNGcm9tQWxsfHxmLmdldEV4dHJlbWVzRnJvbUFsbCxsPXRoaXMuaXNDYXJ0ZXNpYW47Yz1nJiZnLnZhbDJsaW47Zj0hKCFnfHwhZy5sb2dhcml0aG1pYyk7dmFyIG49dGhpcy5yZXF1aXJlU29ydGluZztpZihnKXtnPWcuZ2V0RXh0cmVtZXMoKTt2YXIgcj1nLm1pbjt2YXIgcT1nLm1heH1pZihsJiZ0aGlzLnNvcnRlZCYmIW0mJigha3x8ZT5rfHx0aGlzLmZvcmNlQ3JvcCkpaWYoZFtlLTFdPHJ8fGRbMF0+cSlkPVtdLGI9W107ZWxzZSBpZih0aGlzLnlEYXRhJiYoZFswXTxyfHxkW2UtMV0+cSkpe2g9dGhpcy5jcm9wRGF0YSh0aGlzLnhEYXRhLHRoaXMueURhdGEscixxKTtkPWgueERhdGE7Yj1oLnlEYXRhO2g9aC5zdGFydDt2YXIgRj0hMH1mb3Ioaz1kLmxlbmd0aHx8MTstLWs7KWlmKGU9Zj9jKGRba10pLWMoZFtrLTFdKTpkW2tdLWRbay0xXSwwPGUmJihcInVuZGVmaW5lZFwiPT09XG50eXBlb2YgcHx8ZTxwKSl2YXIgcD1lO2Vsc2UgMD5lJiZuJiYoYSgxNSwhMSx0aGlzLmNoYXJ0KSxuPSExKTtyZXR1cm57eERhdGE6ZCx5RGF0YTpiLGNyb3BwZWQ6Rixjcm9wU3RhcnQ6aCxjbG9zZXN0UG9pbnRSYW5nZTpwfX07Yi5wcm90b3R5cGUucHJvY2Vzc0RhdGE9ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy54QXhpcztpZih0aGlzLmlzQ2FydGVzaWFuJiYhdGhpcy5pc0RpcnR5JiYhYy5pc0RpcnR5JiYhdGhpcy55QXhpcy5pc0RpcnR5JiYhYSlyZXR1cm4hMTthPXRoaXMuZ2V0UHJvY2Vzc2VkRGF0YSgpO3RoaXMuY3JvcHBlZD1hLmNyb3BwZWQ7dGhpcy5jcm9wU3RhcnQ9YS5jcm9wU3RhcnQ7dGhpcy5wcm9jZXNzZWRYRGF0YT1hLnhEYXRhO3RoaXMucHJvY2Vzc2VkWURhdGE9YS55RGF0YTt0aGlzLmNsb3Nlc3RQb2ludFJhbmdlPXRoaXMuYmFzZVBvaW50UmFuZ2U9YS5jbG9zZXN0UG9pbnRSYW5nZX07Yi5wcm90b3R5cGUuY3JvcERhdGE9ZnVuY3Rpb24oYSxjLGQsYixlKXt2YXIgaD1cbmEubGVuZ3RoLGc9MCxmPWgsaztlPXQoZSx0aGlzLmNyb3BTaG91bGRlcik7Zm9yKGs9MDtrPGg7aysrKWlmKGFba10+PWQpe2c9TWF0aC5tYXgoMCxrLWUpO2JyZWFrfWZvcihkPWs7ZDxoO2QrKylpZihhW2RdPmIpe2Y9ZCtlO2JyZWFrfXJldHVybnt4RGF0YTphLnNsaWNlKGcsZikseURhdGE6Yy5zbGljZShnLGYpLHN0YXJ0OmcsZW5kOmZ9fTtiLnByb3RvdHlwZS5nZW5lcmF0ZVBvaW50cz1mdW5jdGlvbigpe3ZhciBhPXRoaXMub3B0aW9ucyxjPWEuZGF0YSxkPXRoaXMuZGF0YSxiLGU9dGhpcy5wcm9jZXNzZWRYRGF0YSxnPXRoaXMucHJvY2Vzc2VkWURhdGEsZj10aGlzLnBvaW50Q2xhc3Msaz1lLmxlbmd0aCxtPXRoaXMuY3JvcFN0YXJ0fHwwLGw9dGhpcy5oYXNHcm91cGVkRGF0YSxuPWEua2V5cyxyPVtdLHE7YT1hLmRhdGFHcm91cGluZyYmYS5kYXRhR3JvdXBpbmcuZ3JvdXBBbGw/bTowO2R8fGx8fChkPVtdLGQubGVuZ3RoPWMubGVuZ3RoLGQ9dGhpcy5kYXRhPWQpO24mJlxubCYmKHRoaXMub3B0aW9ucy5rZXlzPSExKTtmb3IocT0wO3E8aztxKyspe3ZhciBwPW0rcTtpZihsKXt2YXIgdT0obmV3IGYpLmluaXQodGhpcyxbZVtxXV0uY29uY2F0KE8oZ1txXSkpKTt1LmRhdGFHcm91cD10aGlzLmdyb3VwTWFwW2ErcV07dS5kYXRhR3JvdXAub3B0aW9ucyYmKHUub3B0aW9ucz11LmRhdGFHcm91cC5vcHRpb25zLGgodSx1LmRhdGFHcm91cC5vcHRpb25zKSxkZWxldGUgdS5kYXRhTGFiZWxzKX1lbHNlKHU9ZFtwXSl8fFwidW5kZWZpbmVkXCI9PT10eXBlb2YgY1twXXx8KGRbcF09dT0obmV3IGYpLmluaXQodGhpcyxjW3BdLGVbcV0pKTt1JiYodS5pbmRleD1sP2ErcTpwLHJbcV09dSl9dGhpcy5vcHRpb25zLmtleXM9bjtpZihkJiYoayE9PShiPWQubGVuZ3RoKXx8bCkpZm9yKHE9MDtxPGI7cSsrKXEhPT1tfHxsfHwocSs9ayksZFtxXSYmKGRbcV0uZGVzdHJveUVsZW1lbnRzKCksZFtxXS5wbG90WD12b2lkIDApO3RoaXMuZGF0YT1kO3RoaXMucG9pbnRzPXI7QSh0aGlzLFxuXCJhZnRlckdlbmVyYXRlUG9pbnRzXCIpfTtiLnByb3RvdHlwZS5nZXRYRXh0cmVtZXM9ZnVuY3Rpb24oYSl7cmV0dXJue21pbjpuKGEpLG1heDp1KGEpfX07Yi5wcm90b3R5cGUuZ2V0RXh0cmVtZXM9ZnVuY3Rpb24oYSxjKXt2YXIgZD10aGlzLnhBeGlzLGI9dGhpcy55QXhpcyxlPXRoaXMucHJvY2Vzc2VkWERhdGF8fHRoaXMueERhdGEsaD1bXSxnPTAsZj0wO3ZhciBrPTA7dmFyIG09dGhpcy5yZXF1aXJlU29ydGluZz90aGlzLmNyb3BTaG91bGRlcjowLGw9Yj9iLnBvc2l0aXZlVmFsdWVzT25seTohMSxyO2E9YXx8dGhpcy5zdGFja2VkWURhdGF8fHRoaXMucHJvY2Vzc2VkWURhdGF8fFtdO2I9YS5sZW5ndGg7ZCYmKGs9ZC5nZXRFeHRyZW1lcygpLGY9ay5taW4saz1rLm1heCk7Zm9yKHI9MDtyPGI7cisrKXt2YXIgcT1lW3JdO3ZhciBwPWFbcl07dmFyIEY9KFIocCl8fEwocCkpJiYocC5sZW5ndGh8fDA8cHx8IWwpO3E9Y3x8dGhpcy5nZXRFeHRyZW1lc0Zyb21BbGx8fHRoaXMub3B0aW9ucy5nZXRFeHRyZW1lc0Zyb21BbGx8fFxudGhpcy5jcm9wcGVkfHwhZHx8KGVbcittXXx8cSk+PWYmJihlW3ItbV18fHEpPD1rO2lmKEYmJnEpaWYoRj1wLmxlbmd0aClmb3IoO0YtLTspUihwW0ZdKSYmKGhbZysrXT1wW0ZdKTtlbHNlIGhbZysrXT1wfWE9e2RhdGFNaW46bihoKSxkYXRhTWF4OnUoaCl9O0EodGhpcyxcImFmdGVyR2V0RXh0cmVtZXNcIix7ZGF0YUV4dHJlbWVzOmF9KTtyZXR1cm4gYX07Yi5wcm90b3R5cGUuYXBwbHlFeHRyZW1lcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuZ2V0RXh0cmVtZXMoKTt0aGlzLmRhdGFNaW49YS5kYXRhTWluO3RoaXMuZGF0YU1heD1hLmRhdGFNYXg7cmV0dXJuIGF9O2IucHJvdG90eXBlLmdldEZpcnN0VmFsaWRQb2ludD1mdW5jdGlvbihhKXtmb3IodmFyIGM9bnVsbCxkPWEubGVuZ3RoLGI9MDtudWxsPT09YyYmYjxkOyljPWFbYl0sYisrO3JldHVybiBjfTtiLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oKXt0aGlzLnByb2Nlc3NlZFhEYXRhfHx0aGlzLnByb2Nlc3NEYXRhKCk7XG50aGlzLmdlbmVyYXRlUG9pbnRzKCk7dmFyIGE9dGhpcy5vcHRpb25zLGQ9YS5zdGFja2luZyxiPXRoaXMueEF4aXMsZT1iLmNhdGVnb3JpZXMsaD10aGlzLmVuYWJsZWREYXRhU29ydGluZyxnPXRoaXMueUF4aXMsZj10aGlzLnBvaW50cyxrPWYubGVuZ3RoLGw9ISF0aGlzLm1vZGlmeVZhbHVlLHIsbj10aGlzLnBvaW50UGxhY2VtZW50VG9YVmFsdWUoKSxxPSEhbixwPWEudGhyZXNob2xkLHU9YS5zdGFydEZyb21UaHJlc2hvbGQ/cDowLHYsdz10aGlzLnpvbmVBeGlzfHxcInlcIix5PU51bWJlci5NQVhfVkFMVUU7Zm9yKHI9MDtyPGs7cisrKXt2YXIgRT1mW3JdLHg9RS54LEQ9RS55LEI9RS5sb3csUD1kJiZnLnN0YWNraW5nJiZnLnN0YWNraW5nLnN0YWNrc1sodGhpcy5uZWdTdGFja3MmJkQ8KHU/MDpwKT9cIi1cIjpcIlwiKSt0aGlzLnN0YWNrS2V5XSxOPXZvaWQgMCxDPXZvaWQgMDtpZihnLnBvc2l0aXZlVmFsdWVzT25seSYmIWcudmFsaWRhdGVQb3NpdGl2ZVZhbHVlKEQpfHxiLnBvc2l0aXZlVmFsdWVzT25seSYmXG4hYi52YWxpZGF0ZVBvc2l0aXZlVmFsdWUoeCkpRS5pc051bGw9ITA7RS5wbG90WD12PW0oSihiLnRyYW5zbGF0ZSh4LDAsMCwwLDEsbixcImZsYWdzXCI9PT10aGlzLnR5cGUpLC0xRTUsMUU1KSk7aWYoZCYmdGhpcy52aXNpYmxlJiZQJiZQW3hdKXt2YXIgej10aGlzLmdldFN0YWNrSW5kaWNhdG9yKHoseCx0aGlzLmluZGV4KTtFLmlzTnVsbHx8KE49UFt4XSxDPU4ucG9pbnRzW3oua2V5XSl9TChDKSYmKEI9Q1swXSxEPUNbMV0sQj09PXUmJnoua2V5PT09UFt4XS5iYXNlJiYoQj10KFIocCkmJnAsZy5taW4pKSxnLnBvc2l0aXZlVmFsdWVzT25seSYmMD49QiYmKEI9bnVsbCksRS50b3RhbD1FLnN0YWNrVG90YWw9Ti50b3RhbCxFLnBlcmNlbnRhZ2U9Ti50b3RhbCYmRS55L04udG90YWwqMTAwLEUuc3RhY2tZPUQsdGhpcy5pcnJlZ3VsYXJXaWR0aHN8fE4uc2V0T2Zmc2V0KHRoaXMucG9pbnRYT2Zmc2V0fHwwLHRoaXMuYmFyV3x8MCkpO0UueUJvdHRvbT1jKEIpP0ooZy50cmFuc2xhdGUoQixcbjAsMSwwLDEpLC0xRTUsMUU1KTpudWxsO2wmJihEPXRoaXMubW9kaWZ5VmFsdWUoRCxFKSk7RS5wbG90WT12b2lkIDA7UihEKSYmKEQ9Zy50cmFuc2xhdGUoRCwhMSwhMCwhMSwhMCksXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBEJiYoRS5wbG90WT1KKEQsLTFFNSwxRTUpKSk7RS5pc0luc2lkZT10aGlzLmlzUG9pbnRJbnNpZGUoRSk7RS5jbGllbnRYPXE/bShiLnRyYW5zbGF0ZSh4LDAsMCwwLDEsbikpOnY7RS5uZWdhdGl2ZT1FW3ddPChhW3crXCJUaHJlc2hvbGRcIl18fHB8fDApO0UuY2F0ZWdvcnk9ZSYmXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBlW0UueF0/ZVtFLnhdOkUueDtpZighRS5pc051bGwmJiExIT09RS52aXNpYmxlKXtcInVuZGVmaW5lZFwiIT09dHlwZW9mIE0mJih5PU1hdGgubWluKHksTWF0aC5hYnModi1NKSkpO3ZhciBNPXZ9RS56b25lPXRoaXMuem9uZXMubGVuZ3RoJiZFLmdldFpvbmUoKTshRS5ncmFwaGljJiZ0aGlzLmdyb3VwJiZoJiYoRS5pc05ldz0hMCl9dGhpcy5jbG9zZXN0UG9pbnRSYW5nZVB4PVxueTtBKHRoaXMsXCJhZnRlclRyYW5zbGF0ZVwiKX07Yi5wcm90b3R5cGUuZ2V0VmFsaWRQb2ludHM9ZnVuY3Rpb24oYSxjLGQpe3ZhciBiPXRoaXMuY2hhcnQ7cmV0dXJuKGF8fHRoaXMucG9pbnRzfHxbXSkuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBjJiYhYi5pc0luc2lkZVBsb3QoYS5wbG90WCxhLnBsb3RZLHtpbnZlcnRlZDpiLmludmVydGVkfSk/ITE6ITEhPT1hLnZpc2libGUmJihkfHwhYS5pc051bGwpfSl9O2IucHJvdG90eXBlLmdldENsaXBCb3g9ZnVuY3Rpb24oYSxjKXt2YXIgZD10aGlzLm9wdGlvbnMsYj10aGlzLmNoYXJ0LGU9Yi5pbnZlcnRlZCxoPXRoaXMueEF4aXMsZz1oJiZ0aGlzLnlBeGlzLGY9Yi5vcHRpb25zLmNoYXJ0LnNjcm9sbGFibGVQbG90QXJlYXx8e307YSYmITE9PT1kLmNsaXAmJmc/YT1lP3t5Oi1iLmNoYXJ0V2lkdGgrZy5sZW4rZy5wb3MsaGVpZ2h0OmIuY2hhcnRXaWR0aCx3aWR0aDpiLmNoYXJ0SGVpZ2h0LHg6LWIuY2hhcnRIZWlnaHQraC5sZW4rXG5oLnBvc306e3k6LWcucG9zLGhlaWdodDpiLmNoYXJ0SGVpZ2h0LHdpZHRoOmIuY2hhcnRXaWR0aCx4Oi1oLnBvc306KGE9dGhpcy5jbGlwQm94fHxiLmNsaXBCb3gsYyYmKGEud2lkdGg9Yi5wbG90U2l6ZVgsYS54PShiLnNjcm9sbGFibGVQaXhlbHNYfHwwKSooZi5zY3JvbGxQb3NpdGlvblh8fDApKSk7cmV0dXJuIGM/e3dpZHRoOmEud2lkdGgseDphLnh9OmF9O2IucHJvdG90eXBlLmdldFNoYXJlZENsaXBLZXk9ZnVuY3Rpb24oYSl7aWYodGhpcy5zaGFyZWRDbGlwS2V5KXJldHVybiB0aGlzLnNoYXJlZENsaXBLZXk7dmFyIGM9W2EmJmEuZHVyYXRpb24sYSYmYS5lYXNpbmcsYSYmYS5kZWZlcix0aGlzLmdldENsaXBCb3goYSkuaGVpZ2h0LHRoaXMub3B0aW9ucy54QXhpcyx0aGlzLm9wdGlvbnMueUF4aXNdLmpvaW4oKTtpZighMSE9PXRoaXMub3B0aW9ucy5jbGlwfHxhKXRoaXMuc2hhcmVkQ2xpcEtleT1jO3JldHVybiBjfTtiLnByb3RvdHlwZS5zZXRDbGlwPWZ1bmN0aW9uKGEpe3ZhciBjPVxudGhpcy5jaGFydCxkPXRoaXMub3B0aW9ucyxiPWMucmVuZGVyZXIsZT1jLmludmVydGVkLGg9dGhpcy5jbGlwQm94LGc9dGhpcy5nZXRDbGlwQm94KGEpLGY9dGhpcy5nZXRTaGFyZWRDbGlwS2V5KGEpLGs9Yy5zaGFyZWRDbGlwc1tmXSxtPWMuc2hhcmVkQ2xpcHNbZitcIm1cIl07YSYmKGcud2lkdGg9MCxlJiYoZy54PWMucGxvdEhlaWdodCsoITEhPT1kLmNsaXA/MDpjLnBsb3RUb3ApKSk7az9jLmhhc0xvYWRlZHx8ay5hdHRyKGcpOihhJiYoYy5zaGFyZWRDbGlwc1tmK1wibVwiXT1tPWIuY2xpcFJlY3QoZT8oYy5wbG90U2l6ZVh8fDApKzk5Oi05OSxlPy1jLnBsb3RMZWZ0Oi1jLnBsb3RUb3AsOTksZT9jLmNoYXJ0V2lkdGg6Yy5jaGFydEhlaWdodCkpLGMuc2hhcmVkQ2xpcHNbZl09az1iLmNsaXBSZWN0KGcpLGsuY291bnQ9e2xlbmd0aDowfSk7YSYmIWsuY291bnRbdGhpcy5pbmRleF0mJihrLmNvdW50W3RoaXMuaW5kZXhdPSEwLGsuY291bnQubGVuZ3RoKz0xKTtpZighMSE9PWQuY2xpcHx8XG5hKXRoaXMuZ3JvdXAuY2xpcChhfHxoP2s6Yy5jbGlwUmVjdCksdGhpcy5tYXJrZXJHcm91cC5jbGlwKG0pO2F8fChrLmNvdW50W3RoaXMuaW5kZXhdJiYoZGVsZXRlIGsuY291bnRbdGhpcy5pbmRleF0sLS1rLmNvdW50Lmxlbmd0aCksMD09PWsuY291bnQubGVuZ3RoJiYoaHx8KGMuc2hhcmVkQ2xpcHNbZl09ay5kZXN0cm95KCkpLG0mJihjLnNoYXJlZENsaXBzW2YrXCJtXCJdPW0uZGVzdHJveSgpKSkpfTtiLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuY2hhcnQsZD13KHRoaXMub3B0aW9ucy5hbmltYXRpb24pLGI9dGhpcy5zaGFyZWRDbGlwS2V5O2lmKGEpdGhpcy5zZXRDbGlwKGQpO2Vsc2UgaWYoYil7YT1jLnNoYXJlZENsaXBzW2JdO2I9Yy5zaGFyZWRDbGlwc1tiK1wibVwiXTt2YXIgZT10aGlzLmdldENsaXBCb3goZCwhMCk7YSYmYS5hbmltYXRlKGUsZCk7YiYmYi5hbmltYXRlKHt3aWR0aDplLndpZHRoKzk5LHg6ZS54LShjLmludmVydGVkPzA6OTkpfSxcbmQpfX07Yi5wcm90b3R5cGUuYWZ0ZXJBbmltYXRlPWZ1bmN0aW9uKCl7dGhpcy5zZXRDbGlwKCk7QSh0aGlzLFwiYWZ0ZXJBbmltYXRlXCIpO3RoaXMuZmluaXNoZWRBbmltYXRpbmc9ITB9O2IucHJvdG90eXBlLmRyYXdQb2ludHM9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnBvaW50cyxjPXRoaXMuY2hhcnQsZCxiLGU9dGhpcy5vcHRpb25zLm1hcmtlcixoPXRoaXNbdGhpcy5zcGVjaWFsR3JvdXBdfHx0aGlzLm1hcmtlckdyb3VwLGc9dGhpcy54QXhpcyxmPXQoZS5lbmFibGVkLCFnfHxnLmlzUmFkaWFsPyEwOm51bGwsdGhpcy5jbG9zZXN0UG9pbnRSYW5nZVB4Pj1lLmVuYWJsZWRUaHJlc2hvbGQqZS5yYWRpdXMpO2lmKCExIT09ZS5lbmFibGVkfHx0aGlzLl9oYXNQb2ludE1hcmtlcnMpZm9yKGQ9MDtkPGEubGVuZ3RoO2QrKyl7dmFyIGs9YVtkXTt2YXIgbT0oYj1rLmdyYXBoaWMpP1wiYW5pbWF0ZVwiOlwiYXR0clwiO3ZhciBsPWsubWFya2VyfHx7fTt2YXIgcj0hIWsubWFya2VyO2lmKChmJiZcblwidW5kZWZpbmVkXCI9PT10eXBlb2YgbC5lbmFibGVkfHxsLmVuYWJsZWQpJiYhay5pc051bGwmJiExIT09ay52aXNpYmxlKXt2YXIgbj10KGwuc3ltYm9sLHRoaXMuc3ltYm9sKTt2YXIgcT10aGlzLm1hcmtlckF0dHJpYnMoayxrLnNlbGVjdGVkJiZcInNlbGVjdFwiKTt0aGlzLmVuYWJsZWREYXRhU29ydGluZyYmKGsuc3RhcnRYUG9zPWcucmV2ZXJzZWQ/LShxLndpZHRofHwwKTpnLndpZHRoKTt2YXIgcD0hMSE9PWsuaXNJbnNpZGU7Yj9iW3A/XCJzaG93XCI6XCJoaWRlXCJdKHApLmFuaW1hdGUocSk6cCYmKDA8KHEud2lkdGh8fDApfHxrLmhhc0ltYWdlKSYmKGsuZ3JhcGhpYz1iPWMucmVuZGVyZXIuc3ltYm9sKG4scS54LHEueSxxLndpZHRoLHEuaGVpZ2h0LHI/bDplKS5hZGQoaCksdGhpcy5lbmFibGVkRGF0YVNvcnRpbmcmJmMuaGFzUmVuZGVyZWQmJihiLmF0dHIoe3g6ay5zdGFydFhQb3N9KSxtPVwiYW5pbWF0ZVwiKSk7YiYmXCJhbmltYXRlXCI9PT1tJiZiW3A/XCJzaG93XCI6XCJoaWRlXCJdKHApLmFuaW1hdGUocSk7XG5pZihiJiYhYy5zdHlsZWRNb2RlKWJbbV0odGhpcy5wb2ludEF0dHJpYnMoayxrLnNlbGVjdGVkJiZcInNlbGVjdFwiKSk7YiYmYi5hZGRDbGFzcyhrLmdldENsYXNzTmFtZSgpLCEwKX1lbHNlIGImJihrLmdyYXBoaWM9Yi5kZXN0cm95KCkpfX07Yi5wcm90b3R5cGUubWFya2VyQXR0cmlicz1mdW5jdGlvbihhLGMpe3ZhciBkPXRoaXMub3B0aW9ucyxiPWQubWFya2VyLGU9YS5tYXJrZXJ8fHt9LGg9ZS5zeW1ib2x8fGIuc3ltYm9sLGc9dChlLnJhZGl1cyxiLnJhZGl1cyk7YyYmKGI9Yi5zdGF0ZXNbY10sYz1lLnN0YXRlcyYmZS5zdGF0ZXNbY10sZz10KGMmJmMucmFkaXVzLGImJmIucmFkaXVzLGcrKGImJmIucmFkaXVzUGx1c3x8MCkpKTthLmhhc0ltYWdlPWgmJjA9PT1oLmluZGV4T2YoXCJ1cmxcIik7YS5oYXNJbWFnZSYmKGc9MCk7YT17eDpkLmNyaXNwP01hdGguZmxvb3IoYS5wbG90WC1nKTphLnBsb3RYLWcseTphLnBsb3RZLWd9O2cmJihhLndpZHRoPWEuaGVpZ2h0PTIqZyk7cmV0dXJuIGF9O1xuYi5wcm90b3R5cGUucG9pbnRBdHRyaWJzPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9dGhpcy5vcHRpb25zLm1hcmtlcixiPWEmJmEub3B0aW9ucyxlPWImJmIubWFya2VyfHx7fSxoPXRoaXMuY29sb3IsZz1iJiZiLmNvbG9yLGY9YSYmYS5jb2xvcjtiPXQoZS5saW5lV2lkdGgsZC5saW5lV2lkdGgpO3ZhciBrPWEmJmEuem9uZSYmYS56b25lLmNvbG9yO2E9MTtoPWd8fGt8fGZ8fGg7Zz1lLmZpbGxDb2xvcnx8ZC5maWxsQ29sb3J8fGg7aD1lLmxpbmVDb2xvcnx8ZC5saW5lQ29sb3J8fGg7Yz1jfHxcIm5vcm1hbFwiO2Q9ZC5zdGF0ZXNbY107Yz1lLnN0YXRlcyYmZS5zdGF0ZXNbY118fHt9O2I9dChjLmxpbmVXaWR0aCxkLmxpbmVXaWR0aCxiK3QoYy5saW5lV2lkdGhQbHVzLGQubGluZVdpZHRoUGx1cywwKSk7Zz1jLmZpbGxDb2xvcnx8ZC5maWxsQ29sb3J8fGc7aD1jLmxpbmVDb2xvcnx8ZC5saW5lQ29sb3J8fGg7YT10KGMub3BhY2l0eSxkLm9wYWNpdHksYSk7cmV0dXJue3N0cm9rZTpoLFwic3Ryb2tlLXdpZHRoXCI6YixcbmZpbGw6ZyxvcGFjaXR5OmF9fTtiLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMsZD1jLmNoYXJ0LGI9L0FwcGxlV2ViS2l0XFwvNTMzLy50ZXN0KHEubmF2aWdhdG9yLnVzZXJBZ2VudCksZSxoLGY9Yy5kYXRhfHxbXSxrLG07QShjLFwiZGVzdHJveVwiKTt0aGlzLnJlbW92ZUV2ZW50cyhhKTsoYy5heGlzVHlwZXN8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGEpeyhtPWNbYV0pJiZtLnNlcmllcyYmKGcobS5zZXJpZXMsYyksbS5pc0RpcnR5PW0uZm9yY2VSZWRyYXc9ITApfSk7Yy5sZWdlbmRJdGVtJiZjLmNoYXJ0LmxlZ2VuZC5kZXN0cm95SXRlbShjKTtmb3IoaD1mLmxlbmd0aDtoLS07KShrPWZbaF0pJiZrLmRlc3Ryb3kmJmsuZGVzdHJveSgpO2MuY2xpcHMmJmMuY2xpcHMuZm9yRWFjaChmdW5jdGlvbihhKXtyZXR1cm4gYS5kZXN0cm95KCl9KTt4LmNsZWFyVGltZW91dChjLmFuaW1hdGlvblRpbWVvdXQpO00oYyxmdW5jdGlvbihhLGMpe2EgaW5zdGFuY2VvZlxuQiYmIWEuc3Vydml2ZSYmKGU9YiYmXCJncm91cFwiPT09Yz9cImhpZGVcIjpcImRlc3Ryb3lcIixhW2VdKCkpfSk7ZC5ob3ZlclNlcmllcz09PWMmJihkLmhvdmVyU2VyaWVzPXZvaWQgMCk7ZyhkLnNlcmllcyxjKTtkLm9yZGVyU2VyaWVzKCk7TShjLGZ1bmN0aW9uKGQsYil7YSYmXCJoY0V2ZW50c1wiPT09Ynx8ZGVsZXRlIGNbYl19KX07Yi5wcm90b3R5cGUuYXBwbHlab25lcz1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYz10aGlzLmNoYXJ0LGQ9Yy5yZW5kZXJlcixiPXRoaXMuem9uZXMsZSxoLGc9dGhpcy5jbGlwc3x8W10sZixrPXRoaXMuZ3JhcGgsbT10aGlzLmFyZWEsbD1NYXRoLm1heChjLmNoYXJ0V2lkdGgsYy5jaGFydEhlaWdodCkscj10aGlzWyh0aGlzLnpvbmVBeGlzfHxcInlcIikrXCJBeGlzXCJdLG49Yy5pbnZlcnRlZCxxLHAsdSx2PSExLHcseTtpZihiLmxlbmd0aCYmKGt8fG0pJiZyJiZcInVuZGVmaW5lZFwiIT09dHlwZW9mIHIubWluKXt2YXIgRT1yLnJldmVyc2VkO3ZhciBBPXIuaG9yaXo7XG5rJiYhdGhpcy5zaG93TGluZSYmay5oaWRlKCk7bSYmbS5oaWRlKCk7dmFyIHg9ci5nZXRFeHRyZW1lcygpO2IuZm9yRWFjaChmdW5jdGlvbihiLEYpe2U9RT9BP2MucGxvdFdpZHRoOjA6QT8wOnIudG9QaXhlbHMoeC5taW4pfHwwO2U9Sih0KGgsZSksMCxsKTtoPUooTWF0aC5yb3VuZChyLnRvUGl4ZWxzKHQoYi52YWx1ZSx4Lm1heCksITApfHwwKSwwLGwpO3YmJihlPWg9ci50b1BpeGVscyh4Lm1heCkpO3E9TWF0aC5hYnMoZS1oKTtwPU1hdGgubWluKGUsaCk7dT1NYXRoLm1heChlLGgpO3IuaXNYQXhpcz8oZj17eDpuP3U6cCx5OjAsd2lkdGg6cSxoZWlnaHQ6bH0sQXx8KGYueD1jLnBsb3RIZWlnaHQtZi54KSk6KGY9e3g6MCx5Om4/dTpwLHdpZHRoOmwsaGVpZ2h0OnF9LEEmJihmLnk9Yy5wbG90V2lkdGgtZi55KSk7biYmZC5pc1ZNTCYmKGY9ci5pc1hBeGlzP3t4OjAseTpFP3A6dSxoZWlnaHQ6Zi53aWR0aCx3aWR0aDpjLmNoYXJ0V2lkdGh9Ont4OmYueS1jLnBsb3RMZWZ0LWMuc3BhY2luZ0JveC54LFxueTowLHdpZHRoOmYuaGVpZ2h0LGhlaWdodDpjLmNoYXJ0SGVpZ2h0fSk7Z1tGXT9nW0ZdLmFuaW1hdGUoZik6Z1tGXT1kLmNsaXBSZWN0KGYpO3c9YVtcInpvbmUtYXJlYS1cIitGXTt5PWFbXCJ6b25lLWdyYXBoLVwiK0ZdO2smJnkmJnkuY2xpcChnW0ZdKTttJiZ3JiZ3LmNsaXAoZ1tGXSk7dj1iLnZhbHVlPngubWF4O2EucmVzZXRab25lcyYmMD09PWgmJihoPXZvaWQgMCl9KTt0aGlzLmNsaXBzPWd9ZWxzZSBhLnZpc2libGUmJihrJiZrLnNob3coITApLG0mJm0uc2hvdyghMCkpfTtiLnByb3RvdHlwZS5pbnZlcnRHcm91cHM9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYygpe1tcImdyb3VwXCIsXCJtYXJrZXJHcm91cFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGMpe2RbY10mJihiLnJlbmRlcmVyLmlzVk1MJiZkW2NdLmF0dHIoe3dpZHRoOmQueUF4aXMubGVuLGhlaWdodDpkLnhBeGlzLmxlbn0pLGRbY10ud2lkdGg9ZC55QXhpcy5sZW4sZFtjXS5oZWlnaHQ9ZC54QXhpcy5sZW4sZFtjXS5pbnZlcnQoZC5pc1JhZGlhbFNlcmllcz9cbiExOmEpKX0pfXZhciBkPXRoaXMsYj1kLmNoYXJ0O2QueEF4aXMmJihkLmV2ZW50c1RvVW5iaW5kLnB1c2goRChiLFwicmVzaXplXCIsYykpLGMoKSxkLmludmVydEdyb3Vwcz1jKX07Yi5wcm90b3R5cGUucGxvdEdyb3VwPWZ1bmN0aW9uKGEsZCxiLGUsaCl7dmFyIGc9dGhpc1thXSxmPSFnO2I9e3Zpc2liaWxpdHk6Yix6SW5kZXg6ZXx8LjF9O1widW5kZWZpbmVkXCI9PT10eXBlb2YgdGhpcy5vcGFjaXR5fHx0aGlzLmNoYXJ0LnN0eWxlZE1vZGV8fFwiaW5hY3RpdmVcIj09PXRoaXMuc3RhdGV8fChiLm9wYWNpdHk9dGhpcy5vcGFjaXR5KTtmJiYodGhpc1thXT1nPXRoaXMuY2hhcnQucmVuZGVyZXIuZygpLmFkZChoKSk7Zy5hZGRDbGFzcyhcImhpZ2hjaGFydHMtXCIrZCtcIiBoaWdoY2hhcnRzLXNlcmllcy1cIit0aGlzLmluZGV4K1wiIGhpZ2hjaGFydHMtXCIrdGhpcy50eXBlK1wiLXNlcmllcyBcIisoYyh0aGlzLmNvbG9ySW5kZXgpP1wiaGlnaGNoYXJ0cy1jb2xvci1cIit0aGlzLmNvbG9ySW5kZXgrXCIgXCI6XG5cIlwiKSsodGhpcy5vcHRpb25zLmNsYXNzTmFtZXx8XCJcIikrKGcuaGFzQ2xhc3MoXCJoaWdoY2hhcnRzLXRyYWNrZXJcIik/XCIgaGlnaGNoYXJ0cy10cmFja2VyXCI6XCJcIiksITApO2cuYXR0cihiKVtmP1wiYXR0clwiOlwiYW5pbWF0ZVwiXSh0aGlzLmdldFBsb3RCb3goKSk7cmV0dXJuIGd9O2IucHJvdG90eXBlLmdldFBsb3RCb3g9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmNoYXJ0LGM9dGhpcy54QXhpcyxkPXRoaXMueUF4aXM7YS5pbnZlcnRlZCYmKGM9ZCxkPXRoaXMueEF4aXMpO3JldHVybnt0cmFuc2xhdGVYOmM/Yy5sZWZ0OmEucGxvdExlZnQsdHJhbnNsYXRlWTpkP2QudG9wOmEucGxvdFRvcCxzY2FsZVg6MSxzY2FsZVk6MX19O2IucHJvdG90eXBlLnJlbW92ZUV2ZW50cz1mdW5jdGlvbihhKXthfHxwKHRoaXMpO3RoaXMuZXZlbnRzVG9VbmJpbmQubGVuZ3RoJiYodGhpcy5ldmVudHNUb1VuYmluZC5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EoKX0pLHRoaXMuZXZlbnRzVG9VbmJpbmQubGVuZ3RoPVxuMCl9O2IucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYz1hLmNoYXJ0LGQ9YS5vcHRpb25zLGI9dyhkLmFuaW1hdGlvbiksZT0hYS5maW5pc2hlZEFuaW1hdGluZyYmYy5yZW5kZXJlci5pc1NWRyYmYi5kdXJhdGlvbixoPWEudmlzaWJsZT9cImluaGVyaXRcIjpcImhpZGRlblwiLGc9ZC56SW5kZXgsZj1hLmhhc1JlbmRlcmVkLGs9Yy5zZXJpZXNHcm91cCxtPWMuaW52ZXJ0ZWQ7QSh0aGlzLFwicmVuZGVyXCIpO3ZhciBsPWEucGxvdEdyb3VwKFwiZ3JvdXBcIixcInNlcmllc1wiLGgsZyxrKTthLm1hcmtlckdyb3VwPWEucGxvdEdyb3VwKFwibWFya2VyR3JvdXBcIixcIm1hcmtlcnNcIixoLGcsayk7ZSYmYS5hbmltYXRlJiZhLmFuaW1hdGUoITApO2wuaW52ZXJ0ZWQ9dChhLmludmVydGlibGUsYS5pc0NhcnRlc2lhbik/bTohMTthLmRyYXdHcmFwaCYmKGEuZHJhd0dyYXBoKCksYS5hcHBseVpvbmVzKCkpO2EudmlzaWJsZSYmYS5kcmF3UG9pbnRzKCk7YS5kcmF3RGF0YUxhYmVscyYmXG5hLmRyYXdEYXRhTGFiZWxzKCk7YS5yZWRyYXdQb2ludHMmJmEucmVkcmF3UG9pbnRzKCk7YS5kcmF3VHJhY2tlciYmITEhPT1hLm9wdGlvbnMuZW5hYmxlTW91c2VUcmFja2luZyYmYS5kcmF3VHJhY2tlcigpO2EuaW52ZXJ0R3JvdXBzKG0pOyExPT09ZC5jbGlwfHxhLnNoYXJlZENsaXBLZXl8fGZ8fGwuY2xpcChjLmNsaXBSZWN0KTtlJiZhLmFuaW1hdGUmJmEuYW5pbWF0ZSgpO2Z8fChlJiZiLmRlZmVyJiYoZSs9Yi5kZWZlciksYS5hbmltYXRpb25UaW1lb3V0PVooZnVuY3Rpb24oKXthLmFmdGVyQW5pbWF0ZSgpfSxlfHwwKSk7YS5pc0RpcnR5PSExO2EuaGFzUmVuZGVyZWQ9ITA7QShhLFwiYWZ0ZXJSZW5kZXJcIil9O2IucHJvdG90eXBlLnJlZHJhdz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuY2hhcnQsYz10aGlzLmlzRGlydHl8fHRoaXMuaXNEaXJ0eURhdGEsZD10aGlzLmdyb3VwLGI9dGhpcy54QXhpcyxlPXRoaXMueUF4aXM7ZCYmKGEuaW52ZXJ0ZWQmJmQuYXR0cih7d2lkdGg6YS5wbG90V2lkdGgsXG5oZWlnaHQ6YS5wbG90SGVpZ2h0fSksZC5hbmltYXRlKHt0cmFuc2xhdGVYOnQoYiYmYi5sZWZ0LGEucGxvdExlZnQpLHRyYW5zbGF0ZVk6dChlJiZlLnRvcCxhLnBsb3RUb3ApfSkpO3RoaXMudHJhbnNsYXRlKCk7dGhpcy5yZW5kZXIoKTtjJiZkZWxldGUgdGhpcy5rZFRyZWV9O2IucHJvdG90eXBlLnNlYXJjaFBvaW50PWZ1bmN0aW9uKGEsYyl7dmFyIGQ9dGhpcy54QXhpcyxiPXRoaXMueUF4aXMsZT10aGlzLmNoYXJ0LmludmVydGVkO3JldHVybiB0aGlzLnNlYXJjaEtEVHJlZSh7Y2xpZW50WDplP2QubGVuLWEuY2hhcnRZK2QucG9zOmEuY2hhcnRYLWQucG9zLHBsb3RZOmU/Yi5sZW4tYS5jaGFydFgrYi5wb3M6YS5jaGFydFktYi5wb3N9LGMsYSl9O2IucHJvdG90eXBlLmJ1aWxkS0RUcmVlPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMoYSxiLGUpe3ZhciBoO2lmKGg9YSYmYS5sZW5ndGgpe3ZhciBnPWQua2RBeGlzQXJyYXlbYiVlXTthLnNvcnQoZnVuY3Rpb24oYSxjKXtyZXR1cm4gYVtnXS1cbmNbZ119KTtoPU1hdGguZmxvb3IoaC8yKTtyZXR1cm57cG9pbnQ6YVtoXSxsZWZ0OmMoYS5zbGljZSgwLGgpLGIrMSxlKSxyaWdodDpjKGEuc2xpY2UoaCsxKSxiKzEsZSl9fX10aGlzLmJ1aWxkaW5nS2RUcmVlPSEwO3ZhciBkPXRoaXMsYj0tMTxkLm9wdGlvbnMuZmluZE5lYXJlc3RQb2ludEJ5LmluZGV4T2YoXCJ5XCIpPzI6MTtkZWxldGUgZC5rZFRyZWU7WihmdW5jdGlvbigpe2Qua2RUcmVlPWMoZC5nZXRWYWxpZFBvaW50cyhudWxsLCFkLmRpcmVjdFRvdWNoKSxiLGIpO2QuYnVpbGRpbmdLZFRyZWU9ITF9LGQub3B0aW9ucy5rZE5vd3x8YSYmXCJ0b3VjaHN0YXJ0XCI9PT1hLnR5cGU/MDoxKX07Yi5wcm90b3R5cGUuc2VhcmNoS0RUcmVlPWZ1bmN0aW9uKGEsZCxiKXtmdW5jdGlvbiBlKGEsZCxiLG0pe3ZhciBsPWQucG9pbnQscj1oLmtkQXhpc0FycmF5W2IlbV0sbj1sO3ZhciBxPWMoYVtnXSkmJmMobFtnXSk/TWF0aC5wb3coYVtnXS1sW2ddLDIpOm51bGw7dmFyIHA9YyhhW2ZdKSYmXG5jKGxbZl0pP01hdGgucG93KGFbZl0tbFtmXSwyKTpudWxsO3A9KHF8fDApKyhwfHwwKTtsLmRpc3Q9YyhwKT9NYXRoLnNxcnQocCk6TnVtYmVyLk1BWF9WQUxVRTtsLmRpc3RYPWMocSk/TWF0aC5zcXJ0KHEpOk51bWJlci5NQVhfVkFMVUU7cj1hW3JdLWxbcl07cD0wPnI/XCJsZWZ0XCI6XCJyaWdodFwiO3E9MD5yP1wicmlnaHRcIjpcImxlZnRcIjtkW3BdJiYocD1lKGEsZFtwXSxiKzEsbSksbj1wW2tdPG5ba10/cDpsKTtkW3FdJiZNYXRoLnNxcnQocipyKTxuW2tdJiYoYT1lKGEsZFtxXSxiKzEsbSksbj1hW2tdPG5ba10/YTpuKTtyZXR1cm4gbn12YXIgaD10aGlzLGc9dGhpcy5rZEF4aXNBcnJheVswXSxmPXRoaXMua2RBeGlzQXJyYXlbMV0saz1kP1wiZGlzdFhcIjpcImRpc3RcIjtkPS0xPGgub3B0aW9ucy5maW5kTmVhcmVzdFBvaW50QnkuaW5kZXhPZihcInlcIik/MjoxO3RoaXMua2RUcmVlfHx0aGlzLmJ1aWxkaW5nS2RUcmVlfHx0aGlzLmJ1aWxkS0RUcmVlKGIpO2lmKHRoaXMua2RUcmVlKXJldHVybiBlKGEsXG50aGlzLmtkVHJlZSxkLGQpfTtiLnByb3RvdHlwZS5wb2ludFBsYWNlbWVudFRvWFZhbHVlPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcHRpb25zLGM9YS5wb2ludFJhbmdlLGQ9dGhpcy54QXhpczthPWEucG9pbnRQbGFjZW1lbnQ7XCJiZXR3ZWVuXCI9PT1hJiYoYT1kLnJldmVyc2VkPy0uNTouNSk7cmV0dXJuIFIoYSk/YSooY3x8ZC5wb2ludFJhbmdlKTowfTtiLnByb3RvdHlwZS5pc1BvaW50SW5zaWRlPWZ1bmN0aW9uKGEpe3JldHVyblwidW5kZWZpbmVkXCIhPT10eXBlb2YgYS5wbG90WSYmXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBhLnBsb3RYJiYwPD1hLnBsb3RZJiZhLnBsb3RZPD10aGlzLnlBeGlzLmxlbiYmMDw9YS5wbG90WCYmYS5wbG90WDw9dGhpcy54QXhpcy5sZW59O2IucHJvdG90eXBlLmRyYXdUcmFja2VyPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxjPWEub3B0aW9ucyxiPWMudHJhY2tCeUFyZWEsZT1bXS5jb25jYXQoYj9hLmFyZWFQYXRoOmEuZ3JhcGhQYXRoKSxoPWEuY2hhcnQsXG5nPWgucG9pbnRlcixrPWgucmVuZGVyZXIsbT1oLm9wdGlvbnMudG9vbHRpcC5zbmFwLGw9YS50cmFja2VyLHI9ZnVuY3Rpb24oYyl7aWYoaC5ob3ZlclNlcmllcyE9PWEpYS5vbk1vdXNlT3ZlcigpfSxuPVwicmdiYSgxOTIsMTkyLDE5MixcIisoZD8uMDAwMTouMDAyKStcIilcIjtsP2wuYXR0cih7ZDplfSk6YS5ncmFwaCYmKGEudHJhY2tlcj1rLnBhdGgoZSkuYXR0cih7dmlzaWJpbGl0eTphLnZpc2libGU/XCJ2aXNpYmxlXCI6XCJoaWRkZW5cIix6SW5kZXg6Mn0pLmFkZENsYXNzKGI/XCJoaWdoY2hhcnRzLXRyYWNrZXItYXJlYVwiOlwiaGlnaGNoYXJ0cy10cmFja2VyLWxpbmVcIikuYWRkKGEuZ3JvdXApLGguc3R5bGVkTW9kZXx8YS50cmFja2VyLmF0dHIoe1wic3Ryb2tlLWxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2UtbGluZWpvaW5cIjpcInJvdW5kXCIsc3Ryb2tlOm4sZmlsbDpiP246XCJub25lXCIsXCJzdHJva2Utd2lkdGhcIjphLmdyYXBoLnN0cm9rZVdpZHRoKCkrKGI/MDoyKm0pfSksW2EudHJhY2tlcixcbmEubWFya2VyR3JvdXAsYS5kYXRhTGFiZWxzR3JvdXBdLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoYSYmKGEuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLXRyYWNrZXJcIikub24oXCJtb3VzZW92ZXJcIixyKS5vbihcIm1vdXNlb3V0XCIsZnVuY3Rpb24oYSl7Zy5vblRyYWNrZXJNb3VzZU91dChhKX0pLGMuY3Vyc29yJiYhaC5zdHlsZWRNb2RlJiZhLmNzcyh7Y3Vyc29yOmMuY3Vyc29yfSksZikpYS5vbihcInRvdWNoc3RhcnRcIixyKX0pKTtBKHRoaXMsXCJhZnRlckRyYXdUcmFja2VyXCIpfTtiLnByb3RvdHlwZS5hZGRQb2ludD1mdW5jdGlvbihhLGMsZCxiLGUpe3ZhciBoPXRoaXMub3B0aW9ucyxnPXRoaXMuZGF0YSxmPXRoaXMuY2hhcnQsaz10aGlzLnhBeGlzO2s9ayYmay5oYXNOYW1lcyYmay5uYW1lczt2YXIgbT1oLmRhdGEsbD10aGlzLnhEYXRhLHI7Yz10KGMsITApO3ZhciBuPXtzZXJpZXM6dGhpc307dGhpcy5wb2ludENsYXNzLnByb3RvdHlwZS5hcHBseU9wdGlvbnMuYXBwbHkobixbYV0pO3ZhciBxPVxubi54O3ZhciBwPWwubGVuZ3RoO2lmKHRoaXMucmVxdWlyZVNvcnRpbmcmJnE8bFtwLTFdKWZvcihyPSEwO3AmJmxbcC0xXT5xOylwLS07dGhpcy51cGRhdGVQYXJhbGxlbEFycmF5cyhuLFwic3BsaWNlXCIscCwwLDApO3RoaXMudXBkYXRlUGFyYWxsZWxBcnJheXMobixwKTtrJiZuLm5hbWUmJihrW3FdPW4ubmFtZSk7bS5zcGxpY2UocCwwLGEpO3ImJih0aGlzLmRhdGEuc3BsaWNlKHAsMCxudWxsKSx0aGlzLnByb2Nlc3NEYXRhKCkpO1wicG9pbnRcIj09PWgubGVnZW5kVHlwZSYmdGhpcy5nZW5lcmF0ZVBvaW50cygpO2QmJihnWzBdJiZnWzBdLnJlbW92ZT9nWzBdLnJlbW92ZSghMSk6KGcuc2hpZnQoKSx0aGlzLnVwZGF0ZVBhcmFsbGVsQXJyYXlzKG4sXCJzaGlmdFwiKSxtLnNoaWZ0KCkpKTshMSE9PWUmJkEodGhpcyxcImFkZFBvaW50XCIse3BvaW50Om59KTt0aGlzLmlzRGlydHlEYXRhPXRoaXMuaXNEaXJ0eT0hMDtjJiZmLnJlZHJhdyhiKX07Yi5wcm90b3R5cGUucmVtb3ZlUG9pbnQ9ZnVuY3Rpb24oYSxcbmMsZCl7dmFyIGI9dGhpcyxlPWIuZGF0YSxoPWVbYV0sZz1iLnBvaW50cyxmPWIuY2hhcnQsaz1mdW5jdGlvbigpe2cmJmcubGVuZ3RoPT09ZS5sZW5ndGgmJmcuc3BsaWNlKGEsMSk7ZS5zcGxpY2UoYSwxKTtiLm9wdGlvbnMuZGF0YS5zcGxpY2UoYSwxKTtiLnVwZGF0ZVBhcmFsbGVsQXJyYXlzKGh8fHtzZXJpZXM6Yn0sXCJzcGxpY2VcIixhLDEpO2gmJmguZGVzdHJveSgpO2IuaXNEaXJ0eT0hMDtiLmlzRGlydHlEYXRhPSEwO2MmJmYucmVkcmF3KCl9O3YoZCxmKTtjPXQoYywhMCk7aD9oLmZpcmVQb2ludEV2ZW50KFwicmVtb3ZlXCIsbnVsbCxrKTprKCl9O2IucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbihhLGMsZCxiKXtmdW5jdGlvbiBlKCl7aC5kZXN0cm95KGIpO2cuaXNEaXJ0eUxlZ2VuZD1nLmlzRGlydHlCb3g9ITA7Zy5saW5rU2VyaWVzKCk7dChhLCEwKSYmZy5yZWRyYXcoYyl9dmFyIGg9dGhpcyxnPWguY2hhcnQ7ITEhPT1kP0EoaCxcInJlbW92ZVwiLG51bGwsZSk6ZSgpfTtiLnByb3RvdHlwZS51cGRhdGU9XG5mdW5jdGlvbihjLGQpe2M9RShjLHRoaXMudXNlck9wdGlvbnMpO0EodGhpcyxcInVwZGF0ZVwiLHtvcHRpb25zOmN9KTt2YXIgYj10aGlzLGU9Yi5jaGFydCxnPWIudXNlck9wdGlvbnMsZj1iLmluaXRpYWxUeXBlfHxiLnR5cGUsaz1lLm9wdGlvbnMucGxvdE9wdGlvbnMsbT1jLnR5cGV8fGcudHlwZXx8ZS5vcHRpb25zLmNoYXJ0LnR5cGUscj0hKHRoaXMuaGFzRGVyaXZlZERhdGF8fG0mJm0hPT10aGlzLnR5cGV8fFwidW5kZWZpbmVkXCIhPT10eXBlb2YgYy5wb2ludFN0YXJ0fHxcInVuZGVmaW5lZFwiIT09dHlwZW9mIGMucG9pbnRJbnRlcnZhbHx8Yi5oYXNPcHRpb25DaGFuZ2VkKFwiZGF0YUdyb3VwaW5nXCIpfHxiLmhhc09wdGlvbkNoYW5nZWQoXCJwb2ludFN0YXJ0XCIpfHxiLmhhc09wdGlvbkNoYW5nZWQoXCJwb2ludEludGVydmFsXCIpfHxiLmhhc09wdGlvbkNoYW5nZWQoXCJwb2ludEludGVydmFsVW5pdFwiKXx8Yi5oYXNPcHRpb25DaGFuZ2VkKFwia2V5c1wiKSksbj1sW2ZdLnByb3RvdHlwZSxxLFxucD1bXCJldmVudE9wdGlvbnNcIixcIm5hdmlnYXRvclNlcmllc1wiLFwiYmFzZVNlcmllc1wiXSx1PWIuZmluaXNoZWRBbmltYXRpbmcmJnthbmltYXRpb246ITF9LHY9e307bT1tfHxmO3ImJihwLnB1c2goXCJkYXRhXCIsXCJpc0RpcnR5RGF0YVwiLFwicG9pbnRzXCIsXCJwcm9jZXNzZWRYRGF0YVwiLFwicHJvY2Vzc2VkWURhdGFcIixcInhJbmNyZW1lbnRcIixcImNyb3BwZWRcIixcIl9oYXNQb2ludE1hcmtlcnNcIixcIl9oYXNQb2ludExhYmVsc1wiLFwiY2xpcHNcIixcIm5vZGVzXCIsXCJsYXlvdXRcIixcIm1hcE1hcFwiLFwibWFwRGF0YVwiLFwibWluWVwiLFwibWF4WVwiLFwibWluWFwiLFwibWF4WFwiKSwhMSE9PWMudmlzaWJsZSYmcC5wdXNoKFwiYXJlYVwiLFwiZ3JhcGhcIiksYi5wYXJhbGxlbEFycmF5cy5mb3JFYWNoKGZ1bmN0aW9uKGEpe3AucHVzaChhK1wiRGF0YVwiKX0pLGMuZGF0YSYmKGMuZGF0YVNvcnRpbmcmJmgoYi5vcHRpb25zLmRhdGFTb3J0aW5nLGMuZGF0YVNvcnRpbmcpLHRoaXMuc2V0RGF0YShjLmRhdGEsITEpKSk7Yz1RKGcsdSx7aW5kZXg6XCJ1bmRlZmluZWRcIj09PVxudHlwZW9mIGcuaW5kZXg/Yi5pbmRleDpnLmluZGV4LHBvaW50U3RhcnQ6dChrJiZrLnNlcmllcyYmay5zZXJpZXMucG9pbnRTdGFydCxnLnBvaW50U3RhcnQsYi54RGF0YVswXSl9LCFyJiZ7ZGF0YTpiLm9wdGlvbnMuZGF0YX0sYyk7ciYmYy5kYXRhJiYoYy5kYXRhPWIub3B0aW9ucy5kYXRhKTtwPVtcImdyb3VwXCIsXCJtYXJrZXJHcm91cFwiLFwiZGF0YUxhYmVsc0dyb3VwXCIsXCJ0cmFuc2Zvcm1Hcm91cFwiXS5jb25jYXQocCk7cC5mb3JFYWNoKGZ1bmN0aW9uKGEpe3BbYV09YlthXTtkZWxldGUgYlthXX0pO2c9ITE7aWYobFttXSl7aWYoZz1tIT09Yi50eXBlLGIucmVtb3ZlKCExLCExLCExLCEwKSxnKWlmKE9iamVjdC5zZXRQcm90b3R5cGVPZilPYmplY3Quc2V0UHJvdG90eXBlT2YoYixsW21dLnByb3RvdHlwZSk7ZWxzZXtrPU9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsXCJoY0V2ZW50c1wiKSYmYi5oY0V2ZW50cztmb3IocSBpbiBuKWJbcV09dm9pZCAwO2goYixsW21dLnByb3RvdHlwZSk7XG5rP2IuaGNFdmVudHM9azpkZWxldGUgYi5oY0V2ZW50c319ZWxzZSBhKDE3LCEwLGUse21pc3NpbmdNb2R1bGVGb3I6bX0pO3AuZm9yRWFjaChmdW5jdGlvbihhKXtiW2FdPXBbYV19KTtiLmluaXQoZSxjKTtpZihyJiZ0aGlzLnBvaW50cyl7dmFyIHc9Yi5vcHRpb25zOyExPT09dy52aXNpYmxlPyh2LmdyYXBoaWM9MSx2LmRhdGFMYWJlbD0xKTpiLl9oYXNQb2ludExhYmVsc3x8KGM9dy5tYXJrZXIsbT13LmRhdGFMYWJlbHMsYyYmKCExPT09Yy5lbmFibGVkfHxcInN5bWJvbFwiaW4gYykmJih2LmdyYXBoaWM9MSksbSYmITE9PT1tLmVuYWJsZWQmJih2LmRhdGFMYWJlbD0xKSk7dGhpcy5wb2ludHMuZm9yRWFjaChmdW5jdGlvbihhKXthJiZhLnNlcmllcyYmKGEucmVzb2x2ZUNvbG9yKCksT2JqZWN0LmtleXModikubGVuZ3RoJiZhLmRlc3Ryb3lFbGVtZW50cyh2KSwhMT09PXcuc2hvd0luTGVnZW5kJiZhLmxlZ2VuZEl0ZW0mJmUubGVnZW5kLmRlc3Ryb3lJdGVtKGEpKX0sdGhpcyl9Yi5pbml0aWFsVHlwZT1cbmY7ZS5saW5rU2VyaWVzKCk7ZyYmYi5saW5rZWRTZXJpZXMubGVuZ3RoJiYoYi5pc0RpcnR5RGF0YT0hMCk7QSh0aGlzLFwiYWZ0ZXJVcGRhdGVcIik7dChkLCEwKSYmZS5yZWRyYXcocj92b2lkIDA6ITEpfTtiLnByb3RvdHlwZS5zZXROYW1lPWZ1bmN0aW9uKGEpe3RoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZT10aGlzLnVzZXJPcHRpb25zLm5hbWU9YTt0aGlzLmNoYXJ0LmlzRGlydHlMZWdlbmQ9ITB9O2IucHJvdG90eXBlLmhhc09wdGlvbkNoYW5nZWQ9ZnVuY3Rpb24oYSl7dmFyIGM9dGhpcy5vcHRpb25zW2FdLGQ9dGhpcy5jaGFydC5vcHRpb25zLnBsb3RPcHRpb25zLGI9dGhpcy51c2VyT3B0aW9uc1thXTtyZXR1cm4gYj9jIT09YjpjIT09dChkJiZkW3RoaXMudHlwZV0mJmRbdGhpcy50eXBlXVthXSxkJiZkLnNlcmllcyYmZC5zZXJpZXNbYV0sYyl9O2IucHJvdG90eXBlLm9uTW91c2VPdmVyPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5jaGFydCxjPWEuaG92ZXJTZXJpZXM7YS5wb2ludGVyLnNldEhvdmVyQ2hhcnRJbmRleCgpO1xuaWYoYyYmYyE9PXRoaXMpYy5vbk1vdXNlT3V0KCk7dGhpcy5vcHRpb25zLmV2ZW50cy5tb3VzZU92ZXImJkEodGhpcyxcIm1vdXNlT3ZlclwiKTt0aGlzLnNldFN0YXRlKFwiaG92ZXJcIik7YS5ob3ZlclNlcmllcz10aGlzfTtiLnByb3RvdHlwZS5vbk1vdXNlT3V0PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vcHRpb25zLGM9dGhpcy5jaGFydCxkPWMudG9vbHRpcCxiPWMuaG92ZXJQb2ludDtjLmhvdmVyU2VyaWVzPW51bGw7aWYoYiliLm9uTW91c2VPdXQoKTt0aGlzJiZhLmV2ZW50cy5tb3VzZU91dCYmQSh0aGlzLFwibW91c2VPdXRcIik7IWR8fHRoaXMuc3RpY2t5VHJhY2tpbmd8fGQuc2hhcmVkJiYhdGhpcy5ub1NoYXJlZFRvb2x0aXB8fGQuaGlkZSgpO2Muc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oYSl7YS5zZXRTdGF0ZShcIlwiLCEwKX0pfTtiLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihhLGMpe3ZhciBkPXRoaXMsYj1kLm9wdGlvbnMsZT1kLmdyYXBoLGg9Yi5pbmFjdGl2ZU90aGVyUG9pbnRzLFxuZz1iLnN0YXRlcyxmPWIubGluZVdpZHRoLGs9Yi5vcGFjaXR5LG09dChnW2F8fFwibm9ybWFsXCJdJiZnW2F8fFwibm9ybWFsXCJdLmFuaW1hdGlvbixkLmNoYXJ0Lm9wdGlvbnMuY2hhcnQuYW5pbWF0aW9uKTtiPTA7YT1hfHxcIlwiO2lmKGQuc3RhdGUhPT1hJiYoW2QuZ3JvdXAsZC5tYXJrZXJHcm91cCxkLmRhdGFMYWJlbHNHcm91cF0uZm9yRWFjaChmdW5jdGlvbihjKXtjJiYoZC5zdGF0ZSYmYy5yZW1vdmVDbGFzcyhcImhpZ2hjaGFydHMtc2VyaWVzLVwiK2Quc3RhdGUpLGEmJmMuYWRkQ2xhc3MoXCJoaWdoY2hhcnRzLXNlcmllcy1cIithKSl9KSxkLnN0YXRlPWEsIWQuY2hhcnQuc3R5bGVkTW9kZSkpe2lmKGdbYV0mJiExPT09Z1thXS5lbmFibGVkKXJldHVybjthJiYoZj1nW2FdLmxpbmVXaWR0aHx8ZisoZ1thXS5saW5lV2lkdGhQbHVzfHwwKSxrPXQoZ1thXS5vcGFjaXR5LGspKTtpZihlJiYhZS5kYXNoc3R5bGUpZm9yKGc9e1wic3Ryb2tlLXdpZHRoXCI6Zn0sZS5hbmltYXRlKGcsbSk7ZFtcInpvbmUtZ3JhcGgtXCIrXG5iXTspZFtcInpvbmUtZ3JhcGgtXCIrYl0uYW5pbWF0ZShnLG0pLGIrPTE7aHx8W2QuZ3JvdXAsZC5tYXJrZXJHcm91cCxkLmRhdGFMYWJlbHNHcm91cCxkLmxhYmVsQnlTZXJpZXNdLmZvckVhY2goZnVuY3Rpb24oYSl7YSYmYS5hbmltYXRlKHtvcGFjaXR5Omt9LG0pfSl9YyYmaCYmZC5wb2ludHMmJmQuc2V0QWxsUG9pbnRzVG9TdGF0ZShhfHx2b2lkIDApfTtiLnByb3RvdHlwZS5zZXRBbGxQb2ludHNUb1N0YXRlPWZ1bmN0aW9uKGEpe3RoaXMucG9pbnRzLmZvckVhY2goZnVuY3Rpb24oYyl7Yy5zZXRTdGF0ZSYmYy5zZXRTdGF0ZShhKX0pfTtiLnByb3RvdHlwZS5zZXRWaXNpYmxlPWZ1bmN0aW9uKGEsYyl7dmFyIGQ9dGhpcyxiPWQuY2hhcnQsZT1kLmxlZ2VuZEl0ZW0saD1iLm9wdGlvbnMuY2hhcnQuaWdub3JlSGlkZGVuU2VyaWVzLGc9ZC52aXNpYmxlO3ZhciBmPShkLnZpc2libGU9YT1kLm9wdGlvbnMudmlzaWJsZT1kLnVzZXJPcHRpb25zLnZpc2libGU9XCJ1bmRlZmluZWRcIj09PVxudHlwZW9mIGE/IWc6YSk/XCJzaG93XCI6XCJoaWRlXCI7W1wiZ3JvdXBcIixcImRhdGFMYWJlbHNHcm91cFwiLFwibWFya2VyR3JvdXBcIixcInRyYWNrZXJcIixcInR0XCJdLmZvckVhY2goZnVuY3Rpb24oYSl7aWYoZFthXSlkW2FdW2ZdKCl9KTtpZihiLmhvdmVyU2VyaWVzPT09ZHx8KGIuaG92ZXJQb2ludCYmYi5ob3ZlclBvaW50LnNlcmllcyk9PT1kKWQub25Nb3VzZU91dCgpO2UmJmIubGVnZW5kLmNvbG9yaXplSXRlbShkLGEpO2QuaXNEaXJ0eT0hMDtkLm9wdGlvbnMuc3RhY2tpbmcmJmIuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oYSl7YS5vcHRpb25zLnN0YWNraW5nJiZhLnZpc2libGUmJihhLmlzRGlydHk9ITApfSk7ZC5saW5rZWRTZXJpZXMuZm9yRWFjaChmdW5jdGlvbihjKXtjLnNldFZpc2libGUoYSwhMSl9KTtoJiYoYi5pc0RpcnR5Qm94PSEwKTtBKGQsZik7ITEhPT1jJiZiLnJlZHJhdygpfTtiLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dGhpcy5zZXRWaXNpYmxlKCEwKX07Yi5wcm90b3R5cGUuaGlkZT1cbmZ1bmN0aW9uKCl7dGhpcy5zZXRWaXNpYmxlKCExKX07Yi5wcm90b3R5cGUuc2VsZWN0PWZ1bmN0aW9uKGEpe3RoaXMuc2VsZWN0ZWQ9YT10aGlzLm9wdGlvbnMuc2VsZWN0ZWQ9XCJ1bmRlZmluZWRcIj09PXR5cGVvZiBhPyF0aGlzLnNlbGVjdGVkOmE7dGhpcy5jaGVja2JveCYmKHRoaXMuY2hlY2tib3guY2hlY2tlZD1hKTtBKHRoaXMsYT9cInNlbGVjdFwiOlwidW5zZWxlY3RcIil9O2IucHJvdG90eXBlLnNob3VsZFNob3dUb29sdGlwPWZ1bmN0aW9uKGEsYyxkKXt2b2lkIDA9PT1kJiYoZD17fSk7ZC5zZXJpZXM9dGhpcztkLnZpc2libGVQbG90T25seT0hMDtyZXR1cm4gdGhpcy5jaGFydC5pc0luc2lkZVBsb3QoYSxjLGQpfTtiLmRlZmF1bHRPcHRpb25zPXtsaW5lV2lkdGg6MixhbGxvd1BvaW50U2VsZWN0OiExLGNyaXNwOiEwLHNob3dDaGVja2JveDohMSxhbmltYXRpb246e2R1cmF0aW9uOjFFM30sZXZlbnRzOnt9LG1hcmtlcjp7ZW5hYmxlZFRocmVzaG9sZDoyLGxpbmVDb2xvcjpILmJhY2tncm91bmRDb2xvcixcbmxpbmVXaWR0aDowLHJhZGl1czo0LHN0YXRlczp7bm9ybWFsOnthbmltYXRpb246ITB9LGhvdmVyOnthbmltYXRpb246e2R1cmF0aW9uOjUwfSxlbmFibGVkOiEwLHJhZGl1c1BsdXM6MixsaW5lV2lkdGhQbHVzOjF9LHNlbGVjdDp7ZmlsbENvbG9yOkgubmV1dHJhbENvbG9yMjAsbGluZUNvbG9yOkgubmV1dHJhbENvbG9yMTAwLGxpbmVXaWR0aDoyfX19LHBvaW50OntldmVudHM6e319LGRhdGFMYWJlbHM6e2FuaW1hdGlvbjp7fSxhbGlnbjpcImNlbnRlclwiLGRlZmVyOiEwLGZvcm1hdHRlcjpmdW5jdGlvbigpe3ZhciBhPXRoaXMuc2VyaWVzLmNoYXJ0Lm51bWJlckZvcm1hdHRlcjtyZXR1cm5cIm51bWJlclwiIT09dHlwZW9mIHRoaXMueT9cIlwiOmEodGhpcy55LC0xKX0scGFkZGluZzo1LHN0eWxlOntmb250U2l6ZTpcIjExcHhcIixmb250V2VpZ2h0OlwiYm9sZFwiLGNvbG9yOlwiY29udHJhc3RcIix0ZXh0T3V0bGluZTpcIjFweCBjb250cmFzdFwifSx2ZXJ0aWNhbEFsaWduOlwiYm90dG9tXCIseDowLHk6MH0sXG5jcm9wVGhyZXNob2xkOjMwMCxvcGFjaXR5OjEscG9pbnRSYW5nZTowLHNvZnRUaHJlc2hvbGQ6ITAsc3RhdGVzOntub3JtYWw6e2FuaW1hdGlvbjohMH0saG92ZXI6e2FuaW1hdGlvbjp7ZHVyYXRpb246NTB9LGxpbmVXaWR0aFBsdXM6MSxtYXJrZXI6e30saGFsbzp7c2l6ZToxMCxvcGFjaXR5Oi4yNX19LHNlbGVjdDp7YW5pbWF0aW9uOntkdXJhdGlvbjowfX0saW5hY3RpdmU6e2FuaW1hdGlvbjp7ZHVyYXRpb246NTB9LG9wYWNpdHk6LjJ9fSxzdGlja3lUcmFja2luZzohMCx0dXJib1RocmVzaG9sZDoxRTMsZmluZE5lYXJlc3RQb2ludEJ5OlwieFwifTtyZXR1cm4gYn0oKTtoKGUucHJvdG90eXBlLHtheGlzVHlwZXM6W1wieEF4aXNcIixcInlBeGlzXCJdLGNvbGw6XCJzZXJpZXNcIixjb2xvckNvdW50ZXI6MCxjcm9wU2hvdWxkZXI6MSxkaXJlY3RUb3VjaDohMSxkcmF3TGVnZW5kU3ltYm9sOkkuZHJhd0xpbmVNYXJrZXIsaXNDYXJ0ZXNpYW46ITAsa2RBeGlzQXJyYXk6W1wiY2xpZW50WFwiLFwicGxvdFlcIl0sXG5wYXJhbGxlbEFycmF5czpbXCJ4XCIsXCJ5XCJdLHBvaW50Q2xhc3M6RyxyZXF1aXJlU29ydGluZzohMCxzb3J0ZWQ6ITB9KTtDLnNlcmllcz1lO1wiXCI7XCJcIjtyZXR1cm4gZX0pO08oZSxcIkV4dGVuc2lvbnMvU2Nyb2xsYWJsZVBsb3RBcmVhLmpzXCIsW2VbXCJDb3JlL0FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuanNcIl0sZVtcIkNvcmUvQXhpcy9BeGlzLmpzXCJdLGVbXCJDb3JlL0NoYXJ0L0NoYXJ0LmpzXCJdLGVbXCJDb3JlL1Nlcmllcy9TZXJpZXMuanNcIl0sZVtcIkNvcmUvR2xvYmFscy5qc1wiXSxlW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGUsYixJLHosSCxHKXt2YXIgRD1lLnN0b3AsQj1HLmFkZEV2ZW50LHg9Ry5jcmVhdGVFbGVtZW50LHc9Ry5tZXJnZSx2PUcucGljaztcIlwiO0IoSSxcImFmdGVyU2V0Q2hhcnRTaXplXCIsZnVuY3Rpb24oYil7dmFyIGQ9dGhpcy5vcHRpb25zLmNoYXJ0LnNjcm9sbGFibGVQbG90QXJlYSxlPWQmJmQubWluV2lkdGg7ZD1kJiZkLm1pbkhlaWdodDtpZighdGhpcy5yZW5kZXJlci5mb3JFeHBvcnQpe2lmKGUpe2lmKHRoaXMuc2Nyb2xsYWJsZVBpeGVsc1g9XG5lPU1hdGgubWF4KDAsZS10aGlzLmNoYXJ0V2lkdGgpKXt0aGlzLnNjcm9sbGFibGVQbG90Qm94PXRoaXMucmVuZGVyZXIuc2Nyb2xsYWJsZVBsb3RCb3g9dyh0aGlzLnBsb3RCb3gpO3RoaXMucGxvdEJveC53aWR0aD10aGlzLnBsb3RXaWR0aCs9ZTt0aGlzLmludmVydGVkP3RoaXMuY2xpcEJveC5oZWlnaHQrPWU6dGhpcy5jbGlwQm94LndpZHRoKz1lO3ZhciBmPXsxOntuYW1lOlwicmlnaHRcIix2YWx1ZTplfX19fWVsc2UgZCYmKHRoaXMuc2Nyb2xsYWJsZVBpeGVsc1k9ZT1NYXRoLm1heCgwLGQtdGhpcy5jaGFydEhlaWdodCkpJiYodGhpcy5zY3JvbGxhYmxlUGxvdEJveD10aGlzLnJlbmRlcmVyLnNjcm9sbGFibGVQbG90Qm94PXcodGhpcy5wbG90Qm94KSx0aGlzLnBsb3RCb3guaGVpZ2h0PXRoaXMucGxvdEhlaWdodCs9ZSx0aGlzLmludmVydGVkP3RoaXMuY2xpcEJveC53aWR0aCs9ZTp0aGlzLmNsaXBCb3guaGVpZ2h0Kz1lLGY9ezI6e25hbWU6XCJib3R0b21cIix2YWx1ZTplfX0pO1xuZiYmIWIuc2tpcEF4ZXMmJnRoaXMuYXhlcy5mb3JFYWNoKGZ1bmN0aW9uKGQpe2ZbZC5zaWRlXT9kLmdldFBsb3RMaW5lUGF0aD1mdW5jdGlvbigpe3ZhciBiPWZbZC5zaWRlXS5uYW1lLGU9dGhpc1tiXTt0aGlzW2JdPWUtZltkLnNpZGVdLnZhbHVlO3ZhciBrPUguQXhpcy5wcm90b3R5cGUuZ2V0UGxvdExpbmVQYXRoLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzW2JdPWU7cmV0dXJuIGt9OihkLnNldEF4aXNTaXplKCksZC5zZXRBeGlzVHJhbnNsYXRpb24oKSl9KX19KTtCKEksXCJyZW5kZXJcIixmdW5jdGlvbigpe3RoaXMuc2Nyb2xsYWJsZVBpeGVsc1h8fHRoaXMuc2Nyb2xsYWJsZVBpeGVsc1k/KHRoaXMuc2V0VXBTY3JvbGxpbmcmJnRoaXMuc2V0VXBTY3JvbGxpbmcoKSx0aGlzLmFwcGx5Rml4ZWQoKSk6dGhpcy5maXhlZERpdiYmdGhpcy5hcHBseUZpeGVkKCl9KTtJLnByb3RvdHlwZS5zZXRVcFNjcm9sbGluZz1mdW5jdGlvbigpe3ZhciBiPXRoaXMsZD17V2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6XCJ0b3VjaFwiLFxub3ZlcmZsb3dYOlwiaGlkZGVuXCIsb3ZlcmZsb3dZOlwiaGlkZGVuXCJ9O3RoaXMuc2Nyb2xsYWJsZVBpeGVsc1gmJihkLm92ZXJmbG93WD1cImF1dG9cIik7dGhpcy5zY3JvbGxhYmxlUGl4ZWxzWSYmKGQub3ZlcmZsb3dZPVwiYXV0b1wiKTt0aGlzLnNjcm9sbGluZ1BhcmVudD14KFwiZGl2XCIse2NsYXNzTmFtZTpcImhpZ2hjaGFydHMtc2Nyb2xsaW5nLXBhcmVudFwifSx7cG9zaXRpb246XCJyZWxhdGl2ZVwifSx0aGlzLnJlbmRlclRvKTt0aGlzLnNjcm9sbGluZ0NvbnRhaW5lcj14KFwiZGl2XCIse2NsYXNzTmFtZTpcImhpZ2hjaGFydHMtc2Nyb2xsaW5nXCJ9LGQsdGhpcy5zY3JvbGxpbmdQYXJlbnQpO0IodGhpcy5zY3JvbGxpbmdDb250YWluZXIsXCJzY3JvbGxcIixmdW5jdGlvbigpe2IucG9pbnRlciYmZGVsZXRlIGIucG9pbnRlci5jaGFydFBvc2l0aW9ufSk7dGhpcy5pbm5lckNvbnRhaW5lcj14KFwiZGl2XCIse2NsYXNzTmFtZTpcImhpZ2hjaGFydHMtaW5uZXItY29udGFpbmVyXCJ9LG51bGwsdGhpcy5zY3JvbGxpbmdDb250YWluZXIpO1xudGhpcy5pbm5lckNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lcik7dGhpcy5zZXRVcFNjcm9sbGluZz1udWxsfTtJLnByb3RvdHlwZS5tb3ZlRml4ZWRFbGVtZW50cz1mdW5jdGlvbigpe3ZhciBiPXRoaXMuY29udGFpbmVyLGQ9dGhpcy5maXhlZFJlbmRlcmVyLGU9XCIuaGlnaGNoYXJ0cy1jb250ZXh0YnV0dG9uIC5oaWdoY2hhcnRzLWNyZWRpdHMgLmhpZ2hjaGFydHMtbGVnZW5kIC5oaWdoY2hhcnRzLWxlZ2VuZC1jaGVja2JveCAuaGlnaGNoYXJ0cy1uYXZpZ2F0b3Itc2VyaWVzIC5oaWdoY2hhcnRzLW5hdmlnYXRvci14YXhpcyAuaGlnaGNoYXJ0cy1uYXZpZ2F0b3IteWF4aXMgLmhpZ2hjaGFydHMtbmF2aWdhdG9yIC5oaWdoY2hhcnRzLXJlc2V0LXpvb20gLmhpZ2hjaGFydHMtZHJpbGx1cC1idXR0b24gLmhpZ2hjaGFydHMtc2Nyb2xsYmFyIC5oaWdoY2hhcnRzLXN1YnRpdGxlIC5oaWdoY2hhcnRzLXRpdGxlXCIuc3BsaXQoXCIgXCIpLGs7dGhpcy5zY3JvbGxhYmxlUGl4ZWxzWCYmXG4hdGhpcy5pbnZlcnRlZD9rPVwiLmhpZ2hjaGFydHMteWF4aXNcIjp0aGlzLnNjcm9sbGFibGVQaXhlbHNYJiZ0aGlzLmludmVydGVkP2s9XCIuaGlnaGNoYXJ0cy14YXhpc1wiOnRoaXMuc2Nyb2xsYWJsZVBpeGVsc1kmJiF0aGlzLmludmVydGVkP2s9XCIuaGlnaGNoYXJ0cy14YXhpc1wiOnRoaXMuc2Nyb2xsYWJsZVBpeGVsc1kmJnRoaXMuaW52ZXJ0ZWQmJihrPVwiLmhpZ2hjaGFydHMteWF4aXNcIik7ayYmZS5wdXNoKGsrXCI6bm90KC5oaWdoY2hhcnRzLXJhZGlhbC1heGlzKVwiLGsrXCItbGFiZWxzOm5vdCguaGlnaGNoYXJ0cy1yYWRpYWwtYXhpcy1sYWJlbHMpXCIpO2UuZm9yRWFjaChmdW5jdGlvbihlKXtbXS5mb3JFYWNoLmNhbGwoYi5xdWVyeVNlbGVjdG9yQWxsKGUpLGZ1bmN0aW9uKGIpeyhiLm5hbWVzcGFjZVVSST09PWQuU1ZHX05TP2QuYm94OmQuYm94LnBhcmVudE5vZGUpLmFwcGVuZENoaWxkKGIpO2Iuc3R5bGUucG9pbnRlckV2ZW50cz1cImF1dG9cIn0pfSl9O0kucHJvdG90eXBlLmFwcGx5Rml4ZWQ9XG5mdW5jdGlvbigpe3ZhciBiPSF0aGlzLmZpeGVkRGl2O3ZhciBkPXRoaXMub3B0aW9ucy5jaGFydDt2YXIgZT1kLnNjcm9sbGFibGVQbG90QXJlYTtiPyh0aGlzLmZpeGVkRGl2PXgoXCJkaXZcIix7Y2xhc3NOYW1lOlwiaGlnaGNoYXJ0cy1maXhlZFwifSx7cG9zaXRpb246XCJhYnNvbHV0ZVwiLG92ZXJmbG93OlwiaGlkZGVuXCIscG9pbnRlckV2ZW50czpcIm5vbmVcIix6SW5kZXg6KGQuc3R5bGUmJmQuc3R5bGUuekluZGV4fHwwKSsyLHRvcDowfSxudWxsLCEwKSx0aGlzLnNjcm9sbGluZ0NvbnRhaW5lciYmdGhpcy5zY3JvbGxpbmdDb250YWluZXIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5maXhlZERpdix0aGlzLnNjcm9sbGluZ0NvbnRhaW5lciksdGhpcy5yZW5kZXJUby5zdHlsZS5vdmVyZmxvdz1cInZpc2libGVcIix0aGlzLmZpeGVkUmVuZGVyZXI9ZD1uZXcgSC5SZW5kZXJlcih0aGlzLmZpeGVkRGl2LHRoaXMuY2hhcnRXaWR0aCx0aGlzLmNoYXJ0SGVpZ2h0LHRoaXMub3B0aW9ucy5jaGFydC5zdHlsZSksXG50aGlzLnNjcm9sbGFibGVNYXNrPWQucGF0aCgpLmF0dHIoe2ZpbGw6dGhpcy5vcHRpb25zLmNoYXJ0LmJhY2tncm91bmRDb2xvcnx8XCIjZmZmXCIsXCJmaWxsLW9wYWNpdHlcIjp2KGUub3BhY2l0eSwuODUpLHpJbmRleDotMX0pLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1zY3JvbGxhYmxlLW1hc2tcIikuYWRkKCksQih0aGlzLFwiYWZ0ZXJTaG93UmVzZXRab29tXCIsdGhpcy5tb3ZlRml4ZWRFbGVtZW50cyksQih0aGlzLFwiYWZ0ZXJEcmlsbGRvd25cIix0aGlzLm1vdmVGaXhlZEVsZW1lbnRzKSxCKHRoaXMsXCJhZnRlckxheU91dFRpdGxlc1wiLHRoaXMubW92ZUZpeGVkRWxlbWVudHMpKTp0aGlzLmZpeGVkUmVuZGVyZXIuc2V0U2l6ZSh0aGlzLmNoYXJ0V2lkdGgsdGhpcy5jaGFydEhlaWdodCk7aWYodGhpcy5zY3JvbGxhYmxlRGlydHl8fGIpdGhpcy5zY3JvbGxhYmxlRGlydHk9ITEsdGhpcy5tb3ZlRml4ZWRFbGVtZW50cygpO2Q9dGhpcy5jaGFydFdpZHRoKyh0aGlzLnNjcm9sbGFibGVQaXhlbHNYfHxcbjApO3ZhciBrPXRoaXMuY2hhcnRIZWlnaHQrKHRoaXMuc2Nyb2xsYWJsZVBpeGVsc1l8fDApO0QodGhpcy5jb250YWluZXIpO3RoaXMuY29udGFpbmVyLnN0eWxlLndpZHRoPWQrXCJweFwiO3RoaXMuY29udGFpbmVyLnN0eWxlLmhlaWdodD1rK1wicHhcIjt0aGlzLnJlbmRlcmVyLmJveFdyYXBwZXIuYXR0cih7d2lkdGg6ZCxoZWlnaHQ6ayx2aWV3Qm94OlswLDAsZCxrXS5qb2luKFwiIFwiKX0pO3RoaXMuY2hhcnRCYWNrZ3JvdW5kLmF0dHIoe3dpZHRoOmQsaGVpZ2h0Omt9KTt0aGlzLnNjcm9sbGluZ0NvbnRhaW5lci5zdHlsZS5oZWlnaHQ9dGhpcy5jaGFydEhlaWdodCtcInB4XCI7YiYmKGUuc2Nyb2xsUG9zaXRpb25YJiYodGhpcy5zY3JvbGxpbmdDb250YWluZXIuc2Nyb2xsTGVmdD10aGlzLnNjcm9sbGFibGVQaXhlbHNYKmUuc2Nyb2xsUG9zaXRpb25YKSxlLnNjcm9sbFBvc2l0aW9uWSYmKHRoaXMuc2Nyb2xsaW5nQ29udGFpbmVyLnNjcm9sbFRvcD10aGlzLnNjcm9sbGFibGVQaXhlbHNZKlxuZS5zY3JvbGxQb3NpdGlvblkpKTtrPXRoaXMuYXhpc09mZnNldDtiPXRoaXMucGxvdFRvcC1rWzBdLTE7ZT10aGlzLnBsb3RMZWZ0LWtbM10tMTtkPXRoaXMucGxvdFRvcCt0aGlzLnBsb3RIZWlnaHQra1syXSsxO2s9dGhpcy5wbG90TGVmdCt0aGlzLnBsb3RXaWR0aCtrWzFdKzE7dmFyIGw9dGhpcy5wbG90TGVmdCt0aGlzLnBsb3RXaWR0aC0odGhpcy5zY3JvbGxhYmxlUGl4ZWxzWHx8MCksdz10aGlzLnBsb3RUb3ArdGhpcy5wbG90SGVpZ2h0LSh0aGlzLnNjcm9sbGFibGVQaXhlbHNZfHwwKTtiPXRoaXMuc2Nyb2xsYWJsZVBpeGVsc1g/W1tcIk1cIiwwLGJdLFtcIkxcIix0aGlzLnBsb3RMZWZ0LTEsYl0sW1wiTFwiLHRoaXMucGxvdExlZnQtMSxkXSxbXCJMXCIsMCxkXSxbXCJaXCJdLFtcIk1cIixsLGJdLFtcIkxcIix0aGlzLmNoYXJ0V2lkdGgsYl0sW1wiTFwiLHRoaXMuY2hhcnRXaWR0aCxkXSxbXCJMXCIsbCxkXSxbXCJaXCJdXTp0aGlzLnNjcm9sbGFibGVQaXhlbHNZP1tbXCJNXCIsZSwwXSxbXCJMXCIsZSx0aGlzLnBsb3RUb3AtXG4xXSxbXCJMXCIsayx0aGlzLnBsb3RUb3AtMV0sW1wiTFwiLGssMF0sW1wiWlwiXSxbXCJNXCIsZSx3XSxbXCJMXCIsZSx0aGlzLmNoYXJ0SGVpZ2h0XSxbXCJMXCIsayx0aGlzLmNoYXJ0SGVpZ2h0XSxbXCJMXCIsayx3XSxbXCJaXCJdXTpbW1wiTVwiLDAsMF1dO1wiYWRqdXN0SGVpZ2h0XCIhPT10aGlzLnJlZHJhd1RyaWdnZXImJnRoaXMuc2Nyb2xsYWJsZU1hc2suYXR0cih7ZDpifSl9O0IoYixcImFmdGVySW5pdFwiLGZ1bmN0aW9uKCl7dGhpcy5jaGFydC5zY3JvbGxhYmxlRGlydHk9ITB9KTtCKHosXCJzaG93XCIsZnVuY3Rpb24oKXt0aGlzLmNoYXJ0LnNjcm9sbGFibGVEaXJ0eT0hMH0pfSk7TyhlLFwiQ29yZS9BeGlzL1N0YWNraW5nQXhpcy5qc1wiLFtlW1wiQ29yZS9BbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmpzXCJdLGVbXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oZSxiKXt2YXIgRD1lLmdldERlZmVycmVkQW5pbWF0aW9uLHo9Yi5hZGRFdmVudCxIPWIuZGVzdHJveU9iamVjdFByb3BlcnRpZXMsRz1cbmIuZmlyZUV2ZW50LEM9Yi5pc051bWJlcixCPWIub2JqZWN0RWFjaCx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYihiKXt0aGlzLm9sZFN0YWNrcz17fTt0aGlzLnN0YWNrcz17fTt0aGlzLnN0YWNrc1RvdWNoZWQ9MDt0aGlzLmF4aXM9Yn1iLnByb3RvdHlwZS5idWlsZFN0YWNrcz1mdW5jdGlvbigpe3ZhciBiPXRoaXMuYXhpcyxlPWIuc2VyaWVzLGQ9Yi5vcHRpb25zLnJldmVyc2VkU3RhY2tzLHE9ZS5sZW5ndGgsaztpZighYi5pc1hBeGlzKXt0aGlzLnVzZVBlcmNlbnRhZ2U9ITE7Zm9yKGs9cTtrLS07KXt2YXIgbD1lW2Q/azpxLWstMV07bC5zZXRTdGFja2VkUG9pbnRzKCk7bC5zZXRHcm91cGVkUG9pbnRzKCl9Zm9yKGs9MDtrPHE7aysrKWVba10ubW9kaWZ5U3RhY2tzKCk7RyhiLFwiYWZ0ZXJCdWlsZFN0YWNrc1wiKX19O2IucHJvdG90eXBlLmNsZWFuU3RhY2tzPWZ1bmN0aW9uKCl7aWYoIXRoaXMuYXhpcy5pc1hBeGlzKXtpZih0aGlzLm9sZFN0YWNrcyl2YXIgYj10aGlzLnN0YWNrcz1cbnRoaXMub2xkU3RhY2tzO0IoYixmdW5jdGlvbihiKXtCKGIsZnVuY3Rpb24oZCl7ZC5jdW11bGF0aXZlPWQudG90YWx9KX0pfX07Yi5wcm90b3R5cGUucmVzZXRTdGFja3M9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLGU9dGhpcy5zdGFja3M7dGhpcy5heGlzLmlzWEF4aXN8fEIoZSxmdW5jdGlvbihkKXtCKGQsZnVuY3Rpb24oZSxmKXtDKGUudG91Y2hlZCkmJmUudG91Y2hlZDxiLnN0YWNrc1RvdWNoZWQ/KGUuZGVzdHJveSgpLGRlbGV0ZSBkW2ZdKTooZS50b3RhbD1udWxsLGUuY3VtdWxhdGl2ZT1udWxsKX0pfSl9O2IucHJvdG90eXBlLnJlbmRlclN0YWNrVG90YWxzPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5heGlzLGU9Yi5jaGFydCxkPWUucmVuZGVyZXIscT10aGlzLnN0YWNrcztiPUQoZSxiLm9wdGlvbnMuc3RhY2tMYWJlbHMmJmIub3B0aW9ucy5zdGFja0xhYmVscy5hbmltYXRpb258fCExKTt2YXIgaz10aGlzLnN0YWNrVG90YWxHcm91cD10aGlzLnN0YWNrVG90YWxHcm91cHx8ZC5nKFwic3RhY2stbGFiZWxzXCIpLmF0dHIoe3Zpc2liaWxpdHk6XCJ2aXNpYmxlXCIsXG56SW5kZXg6NixvcGFjaXR5OjB9KS5hZGQoKTtrLnRyYW5zbGF0ZShlLnBsb3RMZWZ0LGUucGxvdFRvcCk7QihxLGZ1bmN0aW9uKGQpe0IoZCxmdW5jdGlvbihkKXtkLnJlbmRlcihrKX0pfSk7ay5hbmltYXRlKHtvcGFjaXR5OjF9LGIpfTtyZXR1cm4gYn0oKTtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiBiKCl7fWIuY29tcG9zZT1mdW5jdGlvbihlKXt6KGUsXCJpbml0XCIsYi5vbkluaXQpO3ooZSxcImRlc3Ryb3lcIixiLm9uRGVzdHJveSl9O2Iub25EZXN0cm95PWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5zdGFja2luZztpZihiKXt2YXIgZT1iLnN0YWNrcztCKGUsZnVuY3Rpb24oZCxiKXtIKGQpO2VbYl09bnVsbH0pO2ImJmIuc3RhY2tUb3RhbEdyb3VwJiZiLnN0YWNrVG90YWxHcm91cC5kZXN0cm95KCl9fTtiLm9uSW5pdD1mdW5jdGlvbigpe3RoaXMuc3RhY2tpbmd8fCh0aGlzLnN0YWNraW5nPW5ldyB4KHRoaXMpKX07cmV0dXJuIGJ9KCl9KTtPKGUsXCJFeHRlbnNpb25zL1N0YWNraW5nLmpzXCIsXG5bZVtcIkNvcmUvQXhpcy9BeGlzLmpzXCJdLGVbXCJDb3JlL0NoYXJ0L0NoYXJ0LmpzXCJdLGVbXCJDb3JlL0Zvcm1hdFV0aWxpdGllcy5qc1wiXSxlW1wiQ29yZS9HbG9iYWxzLmpzXCJdLGVbXCJDb3JlL1Nlcmllcy9TZXJpZXMuanNcIl0sZVtcIkNvcmUvQXhpcy9TdGFja2luZ0F4aXMuanNcIl0sZVtcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihlLGIsSSx6LEgsRyxDKXt2YXIgRD1JLmZvcm1hdCx4PUMuY29ycmVjdEZsb2F0LHc9Qy5kZWZpbmVkLHY9Qy5kZXN0cm95T2JqZWN0UHJvcGVydGllcyxmPUMuaXNBcnJheSxkPUMuaXNOdW1iZXIscT1DLm9iamVjdEVhY2gsaz1DLnBpY2s7XCJcIjt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGIoZCxiLGUsZixrKXt2YXIgYz1kLmNoYXJ0LmludmVydGVkO3RoaXMuYXhpcz1kO3RoaXMuaXNOZWdhdGl2ZT1lO3RoaXMub3B0aW9ucz1iPWJ8fHt9O3RoaXMueD1mO3RoaXMudG90YWw9bnVsbDt0aGlzLnBvaW50cz17fTt0aGlzLmhhc1ZhbGlkUG9pbnRzPVxuITE7dGhpcy5zdGFjaz1rO3RoaXMucmlnaHRDbGlmZj10aGlzLmxlZnRDbGlmZj0wO3RoaXMuYWxpZ25PcHRpb25zPXthbGlnbjpiLmFsaWdufHwoYz9lP1wibGVmdFwiOlwicmlnaHRcIjpcImNlbnRlclwiKSx2ZXJ0aWNhbEFsaWduOmIudmVydGljYWxBbGlnbnx8KGM/XCJtaWRkbGVcIjplP1wiYm90dG9tXCI6XCJ0b3BcIikseTpiLnkseDpiLnh9O3RoaXMudGV4dEFsaWduPWIudGV4dEFsaWdufHwoYz9lP1wicmlnaHRcIjpcImxlZnRcIjpcImNlbnRlclwiKX1iLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dih0aGlzLHRoaXMuYXhpcyl9O2IucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihkKXt2YXIgYj10aGlzLmF4aXMuY2hhcnQsZT10aGlzLm9wdGlvbnMsZj1lLmZvcm1hdDtmPWY/RChmLHRoaXMsYik6ZS5mb3JtYXR0ZXIuY2FsbCh0aGlzKTt0aGlzLmxhYmVsP3RoaXMubGFiZWwuYXR0cih7dGV4dDpmLHZpc2liaWxpdHk6XCJoaWRkZW5cIn0pOih0aGlzLmxhYmVsPWIucmVuZGVyZXIubGFiZWwoZixcbm51bGwsbnVsbCxlLnNoYXBlLG51bGwsbnVsbCxlLnVzZUhUTUwsITEsXCJzdGFjay1sYWJlbHNcIiksZj17cjplLmJvcmRlclJhZGl1c3x8MCx0ZXh0OmYscm90YXRpb246ZS5yb3RhdGlvbixwYWRkaW5nOmsoZS5wYWRkaW5nLDUpLHZpc2liaWxpdHk6XCJoaWRkZW5cIn0sYi5zdHlsZWRNb2RlfHwoZi5maWxsPWUuYmFja2dyb3VuZENvbG9yLGYuc3Ryb2tlPWUuYm9yZGVyQ29sb3IsZltcInN0cm9rZS13aWR0aFwiXT1lLmJvcmRlcldpZHRoLHRoaXMubGFiZWwuY3NzKGUuc3R5bGUpKSx0aGlzLmxhYmVsLmF0dHIoZiksdGhpcy5sYWJlbC5hZGRlZHx8dGhpcy5sYWJlbC5hZGQoZCkpO3RoaXMubGFiZWwubGFiZWxyYW5rPWIucGxvdFNpemVZfTtiLnByb3RvdHlwZS5zZXRPZmZzZXQ9ZnVuY3Rpb24oYixlLGYsbCxtKXt2YXIgYz10aGlzLmF4aXMsZz1jLmNoYXJ0O2w9Yy50cmFuc2xhdGUoYy5zdGFja2luZy51c2VQZXJjZW50YWdlPzEwMDpsP2w6dGhpcy50b3RhbCwwLDAsMCwxKTtmPWMudHJhbnNsYXRlKGY/XG5mOjApO2Y9dyhsKSYmTWF0aC5hYnMobC1mKTtiPWsobSxnLnhBeGlzWzBdLnRyYW5zbGF0ZSh0aGlzLngpKStiO2M9dyhsKSYmdGhpcy5nZXRTdGFja0JveChnLHRoaXMsYixsLGUsZixjKTtlPXRoaXMubGFiZWw7Zj10aGlzLmlzTmVnYXRpdmU7Yj1cImp1c3RpZnlcIj09PWsodGhpcy5vcHRpb25zLm92ZXJmbG93LFwianVzdGlmeVwiKTt2YXIgYT10aGlzLnRleHRBbGlnbjtlJiZjJiYobT1lLmdldEJCb3goKSxsPWUucGFkZGluZyxhPVwibGVmdFwiPT09YT9nLmludmVydGVkPy1sOmw6XCJyaWdodFwiPT09YT9tLndpZHRoOmcuaW52ZXJ0ZWQmJlwiY2VudGVyXCI9PT1hP20ud2lkdGgvMjpnLmludmVydGVkP2Y/bS53aWR0aCtsOi1sOm0ud2lkdGgvMixmPWcuaW52ZXJ0ZWQ/bS5oZWlnaHQvMjpmPy1sOm0uaGVpZ2h0LHRoaXMuYWxpZ25PcHRpb25zLng9ayh0aGlzLm9wdGlvbnMueCwwKSx0aGlzLmFsaWduT3B0aW9ucy55PWsodGhpcy5vcHRpb25zLnksMCksYy54LT1hLGMueS09ZixlLmFsaWduKHRoaXMuYWxpZ25PcHRpb25zLFxubnVsbCxjKSxnLmlzSW5zaWRlUGxvdChlLmFsaWduQXR0ci54K2EtdGhpcy5hbGlnbk9wdGlvbnMueCxlLmFsaWduQXR0ci55K2YtdGhpcy5hbGlnbk9wdGlvbnMueSk/ZS5zaG93KCk6KGUuYWxpZ25BdHRyLnk9LTk5OTksYj0hMSksYiYmSC5wcm90b3R5cGUuanVzdGlmeURhdGFMYWJlbC5jYWxsKHRoaXMuYXhpcyxlLHRoaXMuYWxpZ25PcHRpb25zLGUuYWxpZ25BdHRyLG0sYyksZS5hdHRyKHt4OmUuYWxpZ25BdHRyLngseTplLmFsaWduQXR0ci55fSksayghYiYmdGhpcy5vcHRpb25zLmNyb3AsITApJiYoKGc9ZChlLngpJiZkKGUueSkmJmcuaXNJbnNpZGVQbG90KGUueC1sK2Uud2lkdGgsZS55KSYmZy5pc0luc2lkZVBsb3QoZS54K2wsZS55KSl8fGUuaGlkZSgpKSl9O2IucHJvdG90eXBlLmdldFN0YWNrQm94PWZ1bmN0aW9uKGQsYixlLGYsayxjLGcpe3ZhciBhPWIuYXhpcy5yZXZlcnNlZCxoPWQuaW52ZXJ0ZWQsbT1nLmhlaWdodCtnLnBvcy0oaD9kLnBsb3RMZWZ0OmQucGxvdFRvcCk7XG5iPWIuaXNOZWdhdGl2ZSYmIWF8fCFiLmlzTmVnYXRpdmUmJmE7cmV0dXJue3g6aD9iP2YtZy5yaWdodDpmLWMrZy5wb3MtZC5wbG90TGVmdDplK2QueEF4aXNbMF0udHJhbnNCLWQucGxvdExlZnQseTpoP2cuaGVpZ2h0LWUtazpiP20tZi1jOm0tZix3aWR0aDpoP2M6ayxoZWlnaHQ6aD9rOmN9fTtyZXR1cm4gYn0oKTtiLnByb3RvdHlwZS5nZXRTdGFja3M9ZnVuY3Rpb24oKXt2YXIgZD10aGlzLGI9ZC5pbnZlcnRlZDtkLnlBeGlzLmZvckVhY2goZnVuY3Rpb24oZCl7ZC5zdGFja2luZyYmZC5zdGFja2luZy5zdGFja3MmJmQuaGFzVmlzaWJsZVNlcmllcyYmKGQuc3RhY2tpbmcub2xkU3RhY2tzPWQuc3RhY2tpbmcuc3RhY2tzKX0pO2Quc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIGY9ZS54QXhpcyYmZS54QXhpcy5vcHRpb25zfHx7fTshZS5vcHRpb25zLnN0YWNraW5nfHwhMCE9PWUudmlzaWJsZSYmITEhPT1kLm9wdGlvbnMuY2hhcnQuaWdub3JlSGlkZGVuU2VyaWVzfHxcbihlLnN0YWNrS2V5PVtlLnR5cGUsayhlLm9wdGlvbnMuc3RhY2ssXCJcIiksYj9mLnRvcDpmLmxlZnQsYj9mLmhlaWdodDpmLndpZHRoXS5qb2luKCkpfSl9O0cuY29tcG9zZShlKTtILnByb3RvdHlwZS5zZXRHcm91cGVkUG9pbnRzPWZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy55QXhpcy5zdGFja2luZzt0aGlzLm9wdGlvbnMuY2VudGVySW5DYXRlZ29yeSYmKHRoaXMuaXMoXCJjb2x1bW5cIil8fHRoaXMuaXMoXCJjb2x1bW5yYW5nZVwiKSkmJiF0aGlzLm9wdGlvbnMuc3RhY2tpbmcmJjE8dGhpcy5jaGFydC5zZXJpZXMubGVuZ3RoP0gucHJvdG90eXBlLnNldFN0YWNrZWRQb2ludHMuY2FsbCh0aGlzLFwiZ3JvdXBcIik6ZCYmcShkLnN0YWNrcyxmdW5jdGlvbihiLGUpe1wiZ3JvdXBcIj09PWUuc2xpY2UoLTUpJiYocShiLGZ1bmN0aW9uKGQpe3JldHVybiBkLmRlc3Ryb3koKX0pLGRlbGV0ZSBkLnN0YWNrc1tlXSl9KX07SC5wcm90b3R5cGUuc2V0U3RhY2tlZFBvaW50cz1mdW5jdGlvbihkKXt2YXIgYj1cbmR8fHRoaXMub3B0aW9ucy5zdGFja2luZztpZihiJiYoITA9PT10aGlzLnZpc2libGV8fCExPT09dGhpcy5jaGFydC5vcHRpb25zLmNoYXJ0Lmlnbm9yZUhpZGRlblNlcmllcykpe3ZhciBlPXRoaXMucHJvY2Vzc2VkWERhdGEscT10aGlzLnByb2Nlc3NlZFlEYXRhLHY9W10sbT1xLmxlbmd0aCxjPXRoaXMub3B0aW9ucyxnPWMudGhyZXNob2xkLGE9ayhjLnN0YXJ0RnJvbVRocmVzaG9sZCYmZywwKTtjPWMuc3RhY2s7ZD1kP3RoaXMudHlwZStcIixcIitiOnRoaXMuc3RhY2tLZXk7dmFyIGg9XCItXCIrZCxyPXRoaXMubmVnU3RhY2tzLEE9dGhpcy55QXhpcyx5PUEuc3RhY2tpbmcuc3RhY2tzLEQ9QS5zdGFja2luZy5vbGRTdGFja3MsQixDO0Euc3RhY2tpbmcuc3RhY2tzVG91Y2hlZCs9MTtmb3IoQz0wO0M8bTtDKyspe3ZhciB6PWVbQ107dmFyIFE9cVtDXTt2YXIgTT10aGlzLmdldFN0YWNrSW5kaWNhdG9yKE0seix0aGlzLmluZGV4KTt2YXIgdD1NLmtleTt2YXIgcD0oQj1yJiZRPChhPzA6XG5nKSk/aDpkO3lbcF18fCh5W3BdPXt9KTt5W3BdW3pdfHwoRFtwXSYmRFtwXVt6XT8oeVtwXVt6XT1EW3BdW3pdLHlbcF1bel0udG90YWw9bnVsbCk6eVtwXVt6XT1uZXcgbChBLEEub3B0aW9ucy5zdGFja0xhYmVscyxCLHosYykpO3A9eVtwXVt6XTtudWxsIT09UT8ocC5wb2ludHNbdF09cC5wb2ludHNbdGhpcy5pbmRleF09W2socC5jdW11bGF0aXZlLGEpXSx3KHAuY3VtdWxhdGl2ZSl8fChwLmJhc2U9dCkscC50b3VjaGVkPUEuc3RhY2tpbmcuc3RhY2tzVG91Y2hlZCwwPE0uaW5kZXgmJiExPT09dGhpcy5zaW5nbGVTdGFja3MmJihwLnBvaW50c1t0XVswXT1wLnBvaW50c1t0aGlzLmluZGV4K1wiLFwiK3orXCIsMFwiXVswXSkpOnAucG9pbnRzW3RdPXAucG9pbnRzW3RoaXMuaW5kZXhdPW51bGw7XCJwZXJjZW50XCI9PT1iPyhCPUI/ZDpoLHImJnlbQl0mJnlbQl1bel0/KEI9eVtCXVt6XSxwLnRvdGFsPUIudG90YWw9TWF0aC5tYXgoQi50b3RhbCxwLnRvdGFsKStNYXRoLmFicyhRKXx8MCk6XG5wLnRvdGFsPXgocC50b3RhbCsoTWF0aC5hYnMoUSl8fDApKSk6XCJncm91cFwiPT09Yj8oZihRKSYmKFE9UVswXSksbnVsbCE9PVEmJihwLnRvdGFsPShwLnRvdGFsfHwwKSsxKSk6cC50b3RhbD14KHAudG90YWwrKFF8fDApKTtwLmN1bXVsYXRpdmU9XCJncm91cFwiPT09Yj8ocC50b3RhbHx8MSktMTprKHAuY3VtdWxhdGl2ZSxhKSsoUXx8MCk7bnVsbCE9PVEmJihwLnBvaW50c1t0XS5wdXNoKHAuY3VtdWxhdGl2ZSksdltDXT1wLmN1bXVsYXRpdmUscC5oYXNWYWxpZFBvaW50cz0hMCl9XCJwZXJjZW50XCI9PT1iJiYoQS5zdGFja2luZy51c2VQZXJjZW50YWdlPSEwKTtcImdyb3VwXCIhPT1iJiYodGhpcy5zdGFja2VkWURhdGE9dik7QS5zdGFja2luZy5vbGRTdGFja3M9e319fTtILnByb3RvdHlwZS5tb2RpZnlTdGFja3M9ZnVuY3Rpb24oKXt2YXIgZD10aGlzLGI9ZC5zdGFja0tleSxlPWQueUF4aXMuc3RhY2tpbmcuc3RhY2tzLGY9ZC5wcm9jZXNzZWRYRGF0YSxrLG09ZC5vcHRpb25zLnN0YWNraW5nO1xuZFttK1wiU3RhY2tlclwiXSYmW2IsXCItXCIrYl0uZm9yRWFjaChmdW5jdGlvbihjKXtmb3IodmFyIGI9Zi5sZW5ndGgsYSxoO2ItLTspaWYoYT1mW2JdLGs9ZC5nZXRTdGFja0luZGljYXRvcihrLGEsZC5pbmRleCxjKSxoPShhPWVbY10mJmVbY11bYV0pJiZhLnBvaW50c1trLmtleV0pZFttK1wiU3RhY2tlclwiXShoLGEsYil9KX07SC5wcm90b3R5cGUucGVyY2VudFN0YWNrZXI9ZnVuY3Rpb24oZCxiLGUpe2I9Yi50b3RhbD8xMDAvYi50b3RhbDowO2RbMF09eChkWzBdKmIpO2RbMV09eChkWzFdKmIpO3RoaXMuc3RhY2tlZFlEYXRhW2VdPWRbMV19O0gucHJvdG90eXBlLmdldFN0YWNrSW5kaWNhdG9yPWZ1bmN0aW9uKGQsYixlLGYpeyF3KGQpfHxkLnghPT1ifHxmJiZkLmtleSE9PWY/ZD17eDpiLGluZGV4OjAsa2V5OmZ9OmQuaW5kZXgrKztkLmtleT1bZSxiLGQuaW5kZXhdLmpvaW4oKTtyZXR1cm4gZH07ei5TdGFja0l0ZW09bDtyZXR1cm4gei5TdGFja0l0ZW19KTtPKGUsXCJTZXJpZXMvTGluZS9MaW5lU2VyaWVzLmpzXCIsXG5bZVtcIkNvcmUvQ29sb3IvUGFsZXR0ZS5qc1wiXSxlW1wiQ29yZS9TZXJpZXMvU2VyaWVzLmpzXCJdLGVbXCJDb3JlL1Nlcmllcy9TZXJpZXNSZWdpc3RyeS5qc1wiXSxlW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGUsYixJLHope3ZhciBEPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbigpe3ZhciBiPWZ1bmN0aW9uKGUsdyl7Yj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oYixlKXtiLl9fcHJvdG9fXz1lfXx8ZnVuY3Rpb24oYixlKXtmb3IodmFyIGQgaW4gZSllLmhhc093blByb3BlcnR5KGQpJiYoYltkXT1lW2RdKX07cmV0dXJuIGIoZSx3KX07cmV0dXJuIGZ1bmN0aW9uKGUsdyl7ZnVuY3Rpb24gdigpe3RoaXMuY29uc3RydWN0b3I9ZX1iKGUsdyk7ZS5wcm90b3R5cGU9bnVsbD09PXc/T2JqZWN0LmNyZWF0ZSh3KToodi5wcm90b3R5cGU9dy5wcm90b3R5cGUsbmV3IHYpfX0oKSxHPXouZGVmaW5lZCxcbkM9ei5tZXJnZTt6PWZ1bmN0aW9uKEIpe2Z1bmN0aW9uIHgoKXt2YXIgYj1udWxsIT09QiYmQi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7Yi5kYXRhPXZvaWQgMDtiLm9wdGlvbnM9dm9pZCAwO2IucG9pbnRzPXZvaWQgMDtyZXR1cm4gYn1EKHgsQik7eC5wcm90b3R5cGUuZHJhd0dyYXBoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcyx2PXRoaXMub3B0aW9ucyxmPSh0aGlzLmdhcHBlZFBhdGh8fHRoaXMuZ2V0R3JhcGhQYXRoKS5jYWxsKHRoaXMpLGQ9dGhpcy5jaGFydC5zdHlsZWRNb2RlLHE9W1tcImdyYXBoXCIsXCJoaWdoY2hhcnRzLWdyYXBoXCJdXTtkfHxxWzBdLnB1c2godi5saW5lQ29sb3J8fHRoaXMuY29sb3J8fGUubmV1dHJhbENvbG9yMjAsdi5kYXNoU3R5bGUpO3E9Yi5nZXRab25lc0dyYXBocyhxKTtxLmZvckVhY2goZnVuY3Rpb24oZSxsKXt2YXIgaz1lWzBdLHE9YltrXSxuPXE/XCJhbmltYXRlXCI6XCJhdHRyXCI7cT8ocS5lbmRYPWIucHJldmVudEdyYXBoQW5pbWF0aW9uP251bGw6XG5mLnhNYXAscS5hbmltYXRlKHtkOmZ9KSk6Zi5sZW5ndGgmJihiW2tdPXE9Yi5jaGFydC5yZW5kZXJlci5wYXRoKGYpLmFkZENsYXNzKGVbMV0pLmF0dHIoe3pJbmRleDoxfSkuYWRkKGIuZ3JvdXApKTtxJiYhZCYmKGs9e3N0cm9rZTplWzJdLFwic3Ryb2tlLXdpZHRoXCI6di5saW5lV2lkdGgsZmlsbDpiLmZpbGxHcmFwaCYmYi5jb2xvcnx8XCJub25lXCJ9LGVbM10/ay5kYXNoc3R5bGU9ZVszXTpcInNxdWFyZVwiIT09di5saW5lY2FwJiYoa1tcInN0cm9rZS1saW5lY2FwXCJdPWtbXCJzdHJva2UtbGluZWpvaW5cIl09XCJyb3VuZFwiKSxxW25dKGspLnNoYWRvdygyPmwmJnYuc2hhZG93KSk7cSYmKHEuc3RhcnRYPWYueE1hcCxxLmlzQXJlYT1mLmlzQXJlYSl9KX07eC5wcm90b3R5cGUuZ2V0R3JhcGhQYXRoPWZ1bmN0aW9uKGIsZSxmKXt2YXIgZD10aGlzLHE9ZC5vcHRpb25zLGs9cS5zdGVwLGwsdj1bXSx1PVtdLG47Yj1ifHxkLnBvaW50czsobD1iLnJldmVyc2VkKSYmYi5yZXZlcnNlKCk7KGs9e3JpZ2h0OjEsXG5jZW50ZXI6Mn1ba118fGsmJjMpJiZsJiYoaz00LWspO2I9dGhpcy5nZXRWYWxpZFBvaW50cyhiLCExLCEocS5jb25uZWN0TnVsbHMmJiFlJiYhZikpO2IuZm9yRWFjaChmdW5jdGlvbihsLHcpe3ZhciBtPWwucGxvdFgsYz1sLnBsb3RZLGc9Ylt3LTFdOyhsLmxlZnRDbGlmZnx8ZyYmZy5yaWdodENsaWZmKSYmIWYmJihuPSEwKTtsLmlzTnVsbCYmIUcoZSkmJjA8dz9uPSFxLmNvbm5lY3ROdWxsczpsLmlzTnVsbCYmIWU/bj0hMDooMD09PXd8fG4/dz1bW1wiTVwiLGwucGxvdFgsbC5wbG90WV1dOmQuZ2V0UG9pbnRTcGxpbmU/dz1bZC5nZXRQb2ludFNwbGluZShiLGwsdyldOms/KHc9MT09PWs/W1tcIkxcIixnLnBsb3RYLGNdXToyPT09az9bW1wiTFwiLChnLnBsb3RYK20pLzIsZy5wbG90WV0sW1wiTFwiLChnLnBsb3RYK20pLzIsY11dOltbXCJMXCIsbSxnLnBsb3RZXV0sdy5wdXNoKFtcIkxcIixtLGNdKSk6dz1bW1wiTFwiLG0sY11dLHUucHVzaChsLngpLGsmJih1LnB1c2gobC54KSwyPT09ayYmdS5wdXNoKGwueCkpLFxudi5wdXNoLmFwcGx5KHYsdyksbj0hMSl9KTt2LnhNYXA9dTtyZXR1cm4gZC5ncmFwaFBhdGg9dn07eC5wcm90b3R5cGUuZ2V0Wm9uZXNHcmFwaHM9ZnVuY3Rpb24oYil7dGhpcy56b25lcy5mb3JFYWNoKGZ1bmN0aW9uKGUsZil7Zj1bXCJ6b25lLWdyYXBoLVwiK2YsXCJoaWdoY2hhcnRzLWdyYXBoIGhpZ2hjaGFydHMtem9uZS1ncmFwaC1cIitmK1wiIFwiKyhlLmNsYXNzTmFtZXx8XCJcIildO3RoaXMuY2hhcnQuc3R5bGVkTW9kZXx8Zi5wdXNoKGUuY29sb3J8fHRoaXMuY29sb3IsZS5kYXNoU3R5bGV8fHRoaXMub3B0aW9ucy5kYXNoU3R5bGUpO2IucHVzaChmKX0sdGhpcyk7cmV0dXJuIGJ9O3guZGVmYXVsdE9wdGlvbnM9QyhiLmRlZmF1bHRPcHRpb25zLHt9KTtyZXR1cm4geH0oYik7SS5yZWdpc3RlclNlcmllc1R5cGUoXCJsaW5lXCIseik7XCJcIjtyZXR1cm4gen0pO08oZSxcIlNlcmllcy9BcmVhL0FyZWFTZXJpZXMuanNcIixbZVtcIkNvcmUvQ29sb3IvQ29sb3IuanNcIl0sZVtcIk1peGlucy9MZWdlbmRTeW1ib2wuanNcIl0sXG5lW1wiQ29yZS9TZXJpZXMvU2VyaWVzUmVnaXN0cnkuanNcIl0sZVtcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihlLGIsSSx6KXt2YXIgRD10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgYj1mdW5jdGlvbihlLGQpe2I9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGIsZCl7Yi5fX3Byb3RvX189ZH18fGZ1bmN0aW9uKGIsZCl7Zm9yKHZhciBlIGluIGQpZC5oYXNPd25Qcm9wZXJ0eShlKSYmKGJbZV09ZFtlXSl9O3JldHVybiBiKGUsZCl9O3JldHVybiBmdW5jdGlvbihlLGQpe2Z1bmN0aW9uIGYoKXt0aGlzLmNvbnN0cnVjdG9yPWV9YihlLGQpO2UucHJvdG90eXBlPW51bGw9PT1kP09iamVjdC5jcmVhdGUoZCk6KGYucHJvdG90eXBlPWQucHJvdG90eXBlLG5ldyBmKX19KCksRz1lLnBhcnNlLEM9SS5zZXJpZXNUeXBlcy5saW5lO2U9ei5leHRlbmQ7dmFyIEI9ei5tZXJnZSx4PXoub2JqZWN0RWFjaCxcbnc9ei5waWNrO3o9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gZSgpe3ZhciBkPW51bGwhPT1iJiZiLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztkLmRhdGE9dm9pZCAwO2Qub3B0aW9ucz12b2lkIDA7ZC5wb2ludHM9dm9pZCAwO3JldHVybiBkfUQoZSxiKTtlLnByb3RvdHlwZS5kcmF3R3JhcGg9ZnVuY3Rpb24oKXt0aGlzLmFyZWFQYXRoPVtdO2IucHJvdG90eXBlLmRyYXdHcmFwaC5hcHBseSh0aGlzKTt2YXIgZD10aGlzLGU9dGhpcy5hcmVhUGF0aCxmPXRoaXMub3B0aW9ucyxsPVtbXCJhcmVhXCIsXCJoaWdoY2hhcnRzLWFyZWFcIix0aGlzLmNvbG9yLGYuZmlsbENvbG9yXV07dGhpcy56b25lcy5mb3JFYWNoKGZ1bmN0aW9uKGIsZSl7bC5wdXNoKFtcInpvbmUtYXJlYS1cIitlLFwiaGlnaGNoYXJ0cy1hcmVhIGhpZ2hjaGFydHMtem9uZS1hcmVhLVwiK2UrXCIgXCIrYi5jbGFzc05hbWUsYi5jb2xvcnx8ZC5jb2xvcixiLmZpbGxDb2xvcnx8Zi5maWxsQ29sb3JdKX0pO2wuZm9yRWFjaChmdW5jdGlvbihiKXt2YXIgaz1cbmJbMF0sbD1kW2tdLHE9bD9cImFuaW1hdGVcIjpcImF0dHJcIix2PXt9O2w/KGwuZW5kWD1kLnByZXZlbnRHcmFwaEFuaW1hdGlvbj9udWxsOmUueE1hcCxsLmFuaW1hdGUoe2Q6ZX0pKToodi56SW5kZXg9MCxsPWRba109ZC5jaGFydC5yZW5kZXJlci5wYXRoKGUpLmFkZENsYXNzKGJbMV0pLmFkZChkLmdyb3VwKSxsLmlzQXJlYT0hMCk7ZC5jaGFydC5zdHlsZWRNb2RlfHwodi5maWxsPXcoYlszXSxHKGJbMl0pLnNldE9wYWNpdHkodyhmLmZpbGxPcGFjaXR5LC43NSkpLmdldCgpKSk7bFtxXSh2KTtsLnN0YXJ0WD1lLnhNYXA7bC5zaGlmdFVuaXQ9Zi5zdGVwPzI6MX0pfTtlLnByb3RvdHlwZS5nZXRHcmFwaFBhdGg9ZnVuY3Rpb24oYil7dmFyIGQ9Qy5wcm90b3R5cGUuZ2V0R3JhcGhQYXRoLGU9dGhpcy5vcHRpb25zLGY9ZS5zdGFja2luZyx2PXRoaXMueUF4aXMsdSxuPVtdLHg9W10sRT10aGlzLmluZGV4LG09di5zdGFja2luZy5zdGFja3NbdGhpcy5zdGFja0tleV0sYz1lLnRocmVzaG9sZCxcbmc9TWF0aC5yb3VuZCh2LmdldFRocmVzaG9sZChlLnRocmVzaG9sZCkpO2U9dyhlLmNvbm5lY3ROdWxscyxcInBlcmNlbnRcIj09PWYpO3ZhciBhPWZ1bmN0aW9uKGEsZCxlKXt2YXIgaD1iW2FdO2E9ZiYmbVtoLnhdLnBvaW50c1tFXTt2YXIgaz1oW2UrXCJOdWxsXCJdfHwwO2U9aFtlK1wiQ2xpZmZcIl18fDA7aD0hMDtpZihlfHxrKXt2YXIgbD0oaz9hWzBdOmFbMV0pK2U7dmFyIHE9YVswXStlO2g9ISFrfWVsc2UhZiYmYltkXSYmYltkXS5pc051bGwmJihsPXE9Yyk7XCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBsJiYoeC5wdXNoKHtwbG90WDpyLHBsb3RZOm51bGw9PT1sP2c6di5nZXRUaHJlc2hvbGQobCksaXNOdWxsOmgsaXNDbGlmZjohMH0pLG4ucHVzaCh7cGxvdFg6cixwbG90WTpudWxsPT09cT9nOnYuZ2V0VGhyZXNob2xkKHEpLGRvQ3VydmU6ITF9KSl9O2I9Ynx8dGhpcy5wb2ludHM7ZiYmKGI9dGhpcy5nZXRTdGFja1BvaW50cyhiKSk7Zm9yKHU9MDt1PGIubGVuZ3RoO3UrKyl7Znx8KGJbdV0ubGVmdENsaWZmPVxuYlt1XS5yaWdodENsaWZmPWJbdV0ubGVmdE51bGw9Ylt1XS5yaWdodE51bGw9dm9pZCAwKTt2YXIgaD1iW3VdLmlzTnVsbDt2YXIgcj13KGJbdV0ucmVjdFBsb3RYLGJbdV0ucGxvdFgpO3ZhciBBPWY/dyhiW3VdLnlCb3R0b20sZyk6ZztpZighaHx8ZSllfHxhKHUsdS0xLFwibGVmdFwiKSxoJiYhZiYmZXx8KHgucHVzaChiW3VdKSxuLnB1c2goe3g6dSxwbG90WDpyLHBsb3RZOkF9KSksZXx8YSh1LHUrMSxcInJpZ2h0XCIpfXU9ZC5jYWxsKHRoaXMseCwhMCwhMCk7bi5yZXZlcnNlZD0hMDtoPWQuY2FsbCh0aGlzLG4sITAsITApOyhBPWhbMF0pJiZcIk1cIj09PUFbMF0mJihoWzBdPVtcIkxcIixBWzFdLEFbMl1dKTtoPXUuY29uY2F0KGgpO2gubGVuZ3RoJiZoLnB1c2goW1wiWlwiXSk7ZD1kLmNhbGwodGhpcyx4LCExLGUpO2gueE1hcD11LnhNYXA7dGhpcy5hcmVhUGF0aD1oO3JldHVybiBkfTtlLnByb3RvdHlwZS5nZXRTdGFja1BvaW50cz1mdW5jdGlvbihiKXt2YXIgZD10aGlzLGU9W10sZj1bXSxcbnY9dGhpcy54QXhpcyx1PXRoaXMueUF4aXMsbj11LnN0YWNraW5nLnN0YWNrc1t0aGlzLnN0YWNrS2V5XSxEPXt9LEU9dS5zZXJpZXMsbT1FLmxlbmd0aCxjPXUub3B0aW9ucy5yZXZlcnNlZFN0YWNrcz8xOi0xLGc9RS5pbmRleE9mKGQpO2I9Ynx8dGhpcy5wb2ludHM7aWYodGhpcy5vcHRpb25zLnN0YWNraW5nKXtmb3IodmFyIGE9MDthPGIubGVuZ3RoO2ErKyliW2FdLmxlZnROdWxsPWJbYV0ucmlnaHROdWxsPXZvaWQgMCxEW2JbYV0ueF09YlthXTt4KG4sZnVuY3Rpb24oYSxjKXtudWxsIT09YS50b3RhbCYmZi5wdXNoKGMpfSk7Zi5zb3J0KGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGEtY30pO3ZhciBoPUUubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLnZpc2libGV9KTtmLmZvckVhY2goZnVuY3Rpb24oYSxiKXt2YXIgaz0wLGwscjtpZihEW2FdJiYhRFthXS5pc051bGwpZS5wdXNoKERbYV0pLFstMSwxXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBrPTE9PT1lP1wicmlnaHROdWxsXCI6XG5cImxlZnROdWxsXCIscT0wLHQ9bltmW2IrZV1dO2lmKHQpZm9yKHZhciBwPWc7MDw9cCYmcDxtOyl7dmFyIHY9RVtwXS5pbmRleDtsPXQucG9pbnRzW3ZdO2x8fCh2PT09ZC5pbmRleD9EW2FdW2tdPSEwOmhbcF0mJihyPW5bYV0ucG9pbnRzW3ZdKSYmKHEtPXJbMV0tclswXSkpO3ArPWN9RFthXVsxPT09ZT9cInJpZ2h0Q2xpZmZcIjpcImxlZnRDbGlmZlwiXT1xfSk7ZWxzZXtmb3IodmFyIHE9ZzswPD1xJiZxPG07KXtpZihsPW5bYV0ucG9pbnRzW0VbcV0uaW5kZXhdKXtrPWxbMV07YnJlYWt9cSs9Y31rPXcoaywwKTtrPXUudHJhbnNsYXRlKGssMCwxLDAsMSk7ZS5wdXNoKHtpc051bGw6ITAscGxvdFg6di50cmFuc2xhdGUoYSwwLDAsMCwxKSx4OmEscGxvdFk6ayx5Qm90dG9tOmt9KX19KX1yZXR1cm4gZX07ZS5kZWZhdWx0T3B0aW9ucz1CKEMuZGVmYXVsdE9wdGlvbnMse3RocmVzaG9sZDowfSk7cmV0dXJuIGV9KEMpO2Uoei5wcm90b3R5cGUse3NpbmdsZVN0YWNrczohMSxkcmF3TGVnZW5kU3ltYm9sOmIuZHJhd1JlY3RhbmdsZX0pO1xuSS5yZWdpc3RlclNlcmllc1R5cGUoXCJhcmVhXCIseik7XCJcIjtyZXR1cm4gen0pO08oZSxcIlNlcmllcy9TcGxpbmUvU3BsaW5lU2VyaWVzLmpzXCIsW2VbXCJDb3JlL1Nlcmllcy9TZXJpZXNSZWdpc3RyeS5qc1wiXSxlW1wiQ29yZS9VdGlsaXRpZXMuanNcIl1dLGZ1bmN0aW9uKGUsYil7dmFyIEQ9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIGI9ZnVuY3Rpb24oZSx4KXtiPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihiLGUpe2IuX19wcm90b19fPWV9fHxmdW5jdGlvbihiLGUpe2Zvcih2YXIgZiBpbiBlKWUuaGFzT3duUHJvcGVydHkoZikmJihiW2ZdPWVbZl0pfTtyZXR1cm4gYihlLHgpfTtyZXR1cm4gZnVuY3Rpb24oZSx4KXtmdW5jdGlvbiB3KCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfWIoZSx4KTtlLnByb3RvdHlwZT1udWxsPT09eD9PYmplY3QuY3JlYXRlKHgpOih3LnByb3RvdHlwZT14LnByb3RvdHlwZSxcbm5ldyB3KX19KCksej1lLnNlcmllc1R5cGVzLmxpbmUsSD1iLm1lcmdlLEc9Yi5waWNrO2I9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gZSgpe3ZhciBlPW51bGwhPT1iJiZiLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztlLmRhdGE9dm9pZCAwO2Uub3B0aW9ucz12b2lkIDA7ZS5wb2ludHM9dm9pZCAwO3JldHVybiBlfUQoZSxiKTtlLnByb3RvdHlwZS5nZXRQb2ludFNwbGluZT1mdW5jdGlvbihiLGUsdil7dmFyIGY9ZS5wbG90WHx8MCxkPWUucGxvdFl8fDAscT1iW3YtMV07dj1iW3YrMV07aWYocSYmIXEuaXNOdWxsJiYhMSE9PXEuZG9DdXJ2ZSYmIWUuaXNDbGlmZiYmdiYmIXYuaXNOdWxsJiYhMSE9PXYuZG9DdXJ2ZSYmIWUuaXNDbGlmZil7Yj1xLnBsb3RZfHwwO3ZhciBrPXYucGxvdFh8fDA7dj12LnBsb3RZfHwwO3ZhciBsPTA7dmFyIHc9KDEuNSpmKyhxLnBsb3RYfHwwKSkvMi41O3ZhciB1PSgxLjUqZCtiKS8yLjU7az0oMS41KmYraykvMi41O3ZhciBuPSgxLjUqZCt2KS8yLjU7XG5rIT09dyYmKGw9KG4tdSkqKGstZikvKGstdykrZC1uKTt1Kz1sO24rPWw7dT5iJiZ1PmQ/KHU9TWF0aC5tYXgoYixkKSxuPTIqZC11KTp1PGImJnU8ZCYmKHU9TWF0aC5taW4oYixkKSxuPTIqZC11KTtuPnYmJm4+ZD8obj1NYXRoLm1heCh2LGQpLHU9MipkLW4pOm48diYmbjxkJiYobj1NYXRoLm1pbih2LGQpLHU9MipkLW4pO2UucmlnaHRDb250WD1rO2UucmlnaHRDb250WT1ufWU9W1wiQ1wiLEcocS5yaWdodENvbnRYLHEucGxvdFgsMCksRyhxLnJpZ2h0Q29udFkscS5wbG90WSwwKSxHKHcsZiwwKSxHKHUsZCwwKSxmLGRdO3EucmlnaHRDb250WD1xLnJpZ2h0Q29udFk9dm9pZCAwO3JldHVybiBlfTtlLmRlZmF1bHRPcHRpb25zPUgoei5kZWZhdWx0T3B0aW9ucyk7cmV0dXJuIGV9KHopO2UucmVnaXN0ZXJTZXJpZXNUeXBlKFwic3BsaW5lXCIsYik7XCJcIjtyZXR1cm4gYn0pO08oZSxcIlNlcmllcy9BcmVhU3BsaW5lL0FyZWFTcGxpbmVTZXJpZXMuanNcIixbZVtcIlNlcmllcy9BcmVhL0FyZWFTZXJpZXMuanNcIl0sXG5lW1wiU2VyaWVzL1NwbGluZS9TcGxpbmVTZXJpZXMuanNcIl0sZVtcIk1peGlucy9MZWdlbmRTeW1ib2wuanNcIl0sZVtcIkNvcmUvU2VyaWVzL1Nlcmllc1JlZ2lzdHJ5LmpzXCJdLGVbXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oZSxiLEkseixIKXt2YXIgRD10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgYj1mdW5jdGlvbihlLGYpe2I9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGIsZSl7Yi5fX3Byb3RvX189ZX18fGZ1bmN0aW9uKGIsZSl7Zm9yKHZhciBkIGluIGUpZS5oYXNPd25Qcm9wZXJ0eShkKSYmKGJbZF09ZVtkXSl9O3JldHVybiBiKGUsZil9O3JldHVybiBmdW5jdGlvbihlLGYpe2Z1bmN0aW9uIGQoKXt0aGlzLmNvbnN0cnVjdG9yPWV9YihlLGYpO2UucHJvdG90eXBlPW51bGw9PT1mP09iamVjdC5jcmVhdGUoZik6KGQucHJvdG90eXBlPWYucHJvdG90eXBlLG5ldyBkKX19KCksQz1cbmUucHJvdG90eXBlLEI9SC5leHRlbmQseD1ILm1lcmdlO0g9ZnVuY3Rpb24odyl7ZnVuY3Rpb24gdigpe3ZhciBiPW51bGwhPT13JiZ3LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztiLmRhdGE9dm9pZCAwO2IucG9pbnRzPXZvaWQgMDtiLm9wdGlvbnM9dm9pZCAwO3JldHVybiBifUQodix3KTt2LmRlZmF1bHRPcHRpb25zPXgoYi5kZWZhdWx0T3B0aW9ucyxlLmRlZmF1bHRPcHRpb25zKTtyZXR1cm4gdn0oYik7QihILnByb3RvdHlwZSx7Z2V0R3JhcGhQYXRoOkMuZ2V0R3JhcGhQYXRoLGdldFN0YWNrUG9pbnRzOkMuZ2V0U3RhY2tQb2ludHMsZHJhd0dyYXBoOkMuZHJhd0dyYXBoLGRyYXdMZWdlbmRTeW1ib2w6SS5kcmF3UmVjdGFuZ2xlfSk7ei5yZWdpc3RlclNlcmllc1R5cGUoXCJhcmVhc3BsaW5lXCIsSCk7XCJcIjtyZXR1cm4gSH0pO08oZSxcIlNlcmllcy9Db2x1bW4vQ29sdW1uU2VyaWVzLmpzXCIsW2VbXCJDb3JlL0FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuanNcIl0sZVtcIkNvcmUvQ29sb3IvQ29sb3IuanNcIl0sXG5lW1wiQ29yZS9HbG9iYWxzLmpzXCJdLGVbXCJNaXhpbnMvTGVnZW5kU3ltYm9sLmpzXCJdLGVbXCJDb3JlL0NvbG9yL1BhbGV0dGUuanNcIl0sZVtcIkNvcmUvU2VyaWVzL1Nlcmllcy5qc1wiXSxlW1wiQ29yZS9TZXJpZXMvU2VyaWVzUmVnaXN0cnkuanNcIl0sZVtcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihlLGIsSSx6LEgsRyxDLEIpe3ZhciB4PXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbigpe3ZhciBjPWZ1bmN0aW9uKGIsYSl7Yz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oYSxjKXthLl9fcHJvdG9fXz1jfXx8ZnVuY3Rpb24oYSxjKXtmb3IodmFyIGIgaW4gYyljLmhhc093blByb3BlcnR5KGIpJiYoYVtiXT1jW2JdKX07cmV0dXJuIGMoYixhKX07cmV0dXJuIGZ1bmN0aW9uKGIsYSl7ZnVuY3Rpb24gZCgpe3RoaXMuY29uc3RydWN0b3I9Yn1jKGIsYSk7Yi5wcm90b3R5cGU9bnVsbD09PWE/T2JqZWN0LmNyZWF0ZShhKTpcbihkLnByb3RvdHlwZT1hLnByb3RvdHlwZSxuZXcgZCl9fSgpLHc9ZS5hbmltT2JqZWN0LHY9Yi5wYXJzZSxmPUkuaGFzVG91Y2g7ZT1JLm5vb3A7dmFyIGQ9Qi5jbGFtcCxxPUIuY3NzLGs9Qi5kZWZpbmVkLGw9Qi5leHRlbmQsRD1CLmZpcmVFdmVudCx1PUIuaXNBcnJheSxuPUIuaXNOdW1iZXIsSj1CLm1lcmdlLEU9Qi5waWNrLG09Qi5vYmplY3RFYWNoO0I9ZnVuY3Rpb24oYyl7ZnVuY3Rpb24gYigpe3ZhciBhPW51bGwhPT1jJiZjLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpczthLmJvcmRlcldpZHRoPXZvaWQgMDthLmRhdGE9dm9pZCAwO2EuZ3JvdXA9dm9pZCAwO2Eub3B0aW9ucz12b2lkIDA7YS5wb2ludHM9dm9pZCAwO3JldHVybiBhfXgoYixjKTtiLnByb3RvdHlwZS5hbmltYXRlPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMsYj10aGlzLnlBeGlzLGU9Yy5vcHRpb25zLGc9dGhpcy5jaGFydC5pbnZlcnRlZCxmPXt9LGs9Zz9cInRyYW5zbGF0ZVhcIjpcInRyYW5zbGF0ZVlcIjtpZihhKWYuc2NhbGVZPVxuLjAwMSxhPWQoYi50b1BpeGVscyhlLnRocmVzaG9sZCksYi5wb3MsYi5wb3MrYi5sZW4pLGc/Zi50cmFuc2xhdGVYPWEtYi5sZW46Zi50cmFuc2xhdGVZPWEsYy5jbGlwQm94JiZjLnNldENsaXAoKSxjLmdyb3VwLmF0dHIoZik7ZWxzZXt2YXIgbT1OdW1iZXIoYy5ncm91cC5hdHRyKGspKTtjLmdyb3VwLmFuaW1hdGUoe3NjYWxlWToxfSxsKHcoYy5vcHRpb25zLmFuaW1hdGlvbikse3N0ZXA6ZnVuY3Rpb24oYSxkKXtjLmdyb3VwJiYoZltrXT1tK2QucG9zKihiLnBvcy1tKSxjLmdyb3VwLmF0dHIoZikpfX0pKX19O2IucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oYSxiKXtjLnByb3RvdHlwZS5pbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgZD10aGlzO2E9ZC5jaGFydDthLmhhc1JlbmRlcmVkJiZhLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKGEpe2EudHlwZT09PWQudHlwZSYmKGEuaXNEaXJ0eT0hMCl9KX07Yi5wcm90b3R5cGUuZ2V0Q29sdW1uTWV0cmljcz1mdW5jdGlvbigpe3ZhciBhPVxudGhpcyxjPWEub3B0aW9ucyxiPWEueEF4aXMsZD1hLnlBeGlzLGU9Yi5vcHRpb25zLnJldmVyc2VkU3RhY2tzO2U9Yi5yZXZlcnNlZCYmIWV8fCFiLnJldmVyc2VkJiZlO3ZhciBnLGY9e30saz0wOyExPT09Yy5ncm91cGluZz9rPTE6YS5jaGFydC5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihjKXt2YXIgYj1jLnlBeGlzLGU9Yy5vcHRpb25zO2lmKGMudHlwZT09PWEudHlwZSYmKGMudmlzaWJsZXx8IWEuY2hhcnQub3B0aW9ucy5jaGFydC5pZ25vcmVIaWRkZW5TZXJpZXMpJiZkLmxlbj09PWIubGVuJiZkLnBvcz09PWIucG9zKXtpZihlLnN0YWNraW5nJiZcImdyb3VwXCIhPT1lLnN0YWNraW5nKXtnPWMuc3RhY2tLZXk7XCJ1bmRlZmluZWRcIj09PXR5cGVvZiBmW2ddJiYoZltnXT1rKyspO3ZhciBoPWZbZ119ZWxzZSExIT09ZS5ncm91cGluZyYmKGg9aysrKTtjLmNvbHVtbkluZGV4PWh9fSk7dmFyIG09TWF0aC5taW4oTWF0aC5hYnMoYi50cmFuc0EpKihiLm9yZGluYWwmJmIub3JkaW5hbC5zbG9wZXx8XG5jLnBvaW50UmFuZ2V8fGIuY2xvc2VzdFBvaW50UmFuZ2V8fGIudGlja0ludGVydmFsfHwxKSxiLmxlbiksbD1tKmMuZ3JvdXBQYWRkaW5nLG49KG0tMipsKS8oa3x8MSk7Yz1NYXRoLm1pbihjLm1heFBvaW50V2lkdGh8fGIubGVuLEUoYy5wb2ludFdpZHRoLG4qKDEtMipjLnBvaW50UGFkZGluZykpKTthLmNvbHVtbk1ldHJpY3M9e3dpZHRoOmMsb2Zmc2V0OihuLWMpLzIrKGwrKChhLmNvbHVtbkluZGV4fHwwKSsoZT8xOjApKSpuLW0vMikqKGU/LTE6MSkscGFkZGVkV2lkdGg6bixjb2x1bW5Db3VudDprfTtyZXR1cm4gYS5jb2x1bW5NZXRyaWNzfTtiLnByb3RvdHlwZS5jcmlzcENvbD1mdW5jdGlvbihhLGMsYixkKXt2YXIgZT10aGlzLmNoYXJ0LGg9dGhpcy5ib3JkZXJXaWR0aCxnPS0oaCUyPy41OjApO2g9aCUyPy41OjE7ZS5pbnZlcnRlZCYmZS5yZW5kZXJlci5pc1ZNTCYmKGgrPTEpO3RoaXMub3B0aW9ucy5jcmlzcCYmKGI9TWF0aC5yb3VuZChhK2IpK2csYT1NYXRoLnJvdW5kKGEpK1xuZyxiLT1hKTtkPU1hdGgucm91bmQoYytkKStoO2c9LjU+PU1hdGguYWJzKGMpJiYuNTxkO2M9TWF0aC5yb3VuZChjKStoO2QtPWM7ZyYmZCYmKC0tYyxkKz0xKTtyZXR1cm57eDphLHk6Yyx3aWR0aDpiLGhlaWdodDpkfX07Yi5wcm90b3R5cGUuYWRqdXN0Rm9yTWlzc2luZ0NvbHVtbnM9ZnVuY3Rpb24oYSxjLGIsZCl7dmFyIGU9dGhpcyxoPXRoaXMub3B0aW9ucy5zdGFja2luZztpZighYi5pc051bGwmJjE8ZC5jb2x1bW5Db3VudCl7dmFyIGc9MCxmPTA7bSh0aGlzLnlBeGlzLnN0YWNraW5nJiZ0aGlzLnlBeGlzLnN0YWNraW5nLnN0YWNrcyxmdW5jdGlvbihhKXtpZihcIm51bWJlclwiPT09dHlwZW9mIGIueCYmKGE9YVtiLngudG9TdHJpbmcoKV0pKXt2YXIgYz1hLnBvaW50c1tlLmluZGV4XSxkPWEudG90YWw7aD8oYyYmKGc9ZiksYS5oYXNWYWxpZFBvaW50cyYmZisrKTp1KGMpJiYoZz1jWzFdLGY9ZHx8MCl9fSk7YT0oYi5wbG90WHx8MCkrKChmLTEpKmQucGFkZGVkV2lkdGgrYykvXG4yLWMtZypkLnBhZGRlZFdpZHRofXJldHVybiBhfTtiLnByb3RvdHlwZS50cmFuc2xhdGU9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGM9YS5jaGFydCxiPWEub3B0aW9ucyxlPWEuZGVuc2U9Mj5hLmNsb3Nlc3RQb2ludFJhbmdlKmEueEF4aXMudHJhbnNBO2U9YS5ib3JkZXJXaWR0aD1FKGIuYm9yZGVyV2lkdGgsZT8wOjEpO3ZhciBnPWEueEF4aXMsZj1hLnlBeGlzLG09Yi50aHJlc2hvbGQsbD1hLnRyYW5zbGF0ZWRUaHJlc2hvbGQ9Zi5nZXRUaHJlc2hvbGQobSkscT1FKGIubWluUG9pbnRMZW5ndGgsNSksdj1hLmdldENvbHVtbk1ldHJpY3MoKSx1PXYud2lkdGgsdD1hLmJhclc9TWF0aC5tYXgodSwxKzIqZSkscD1hLnBvaW50WE9mZnNldD12Lm9mZnNldCx3PWEuZGF0YU1pbix4PWEuZGF0YU1heDtjLmludmVydGVkJiYobC09LjUpO2IucG9pbnRQYWRkaW5nJiYodD1NYXRoLmNlaWwodCkpO0cucHJvdG90eXBlLnRyYW5zbGF0ZS5hcHBseShhKTthLnBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBoPVxuRShlLnlCb3R0b20sbCkscj05OTkrTWF0aC5hYnMoaCkseT11LEE9ZS5wbG90WHx8MDtyPWQoZS5wbG90WSwtcixmLmxlbityKTtBKz1wO3ZhciBEPXQsQj1NYXRoLm1pbihyLGgpLHo9TWF0aC5tYXgocixoKS1CO2lmKHEmJk1hdGguYWJzKHopPHEpe3o9cTt2YXIgQz0hZi5yZXZlcnNlZCYmIWUubmVnYXRpdmV8fGYucmV2ZXJzZWQmJmUubmVnYXRpdmU7bihtKSYmbih4KSYmZS55PT09bSYmeDw9bSYmKGYubWlufHwwKTxtJiYodyE9PXh8fChmLm1heHx8MCk8PW0pJiYoQz0hQyk7Qj1NYXRoLmFicyhCLWwpPnE/aC1xOmwtKEM/cTowKX1rKGUub3B0aW9ucy5wb2ludFdpZHRoKSYmKHk9RD1NYXRoLmNlaWwoZS5vcHRpb25zLnBvaW50V2lkdGgpLEEtPU1hdGgucm91bmQoKHktdSkvMikpO2IuY2VudGVySW5DYXRlZ29yeSYmKEE9YS5hZGp1c3RGb3JNaXNzaW5nQ29sdW1ucyhBLHksZSx2KSk7ZS5iYXJYPUE7ZS5wb2ludFdpZHRoPXk7ZS50b29sdGlwUG9zPWMuaW52ZXJ0ZWQ/W2QoZi5sZW4rXG5mLnBvcy1jLnBsb3RMZWZ0LXIsZi5wb3MtYy5wbG90TGVmdCxmLmxlbitmLnBvcy1jLnBsb3RMZWZ0KSxnLmxlbitnLnBvcy1jLnBsb3RUb3AtQS1ELzIsel06W2cubGVmdC1jLnBsb3RMZWZ0K0ErRC8yLGQocitmLnBvcy1jLnBsb3RUb3AsZi5wb3MtYy5wbG90VG9wLGYubGVuK2YucG9zLWMucGxvdFRvcCksel07ZS5zaGFwZVR5cGU9YS5wb2ludENsYXNzLnByb3RvdHlwZS5zaGFwZVR5cGV8fFwicmVjdFwiO2Uuc2hhcGVBcmdzPWEuY3Jpc3BDb2wuYXBwbHkoYSxlLmlzTnVsbD9bQSxsLEQsMF06W0EsQixELHpdKX0pfTtiLnByb3RvdHlwZS5kcmF3R3JhcGg9ZnVuY3Rpb24oKXt0aGlzLmdyb3VwW3RoaXMuZGVuc2U/XCJhZGRDbGFzc1wiOlwicmVtb3ZlQ2xhc3NcIl0oXCJoaWdoY2hhcnRzLWRlbnNlLWRhdGFcIil9O2IucHJvdG90eXBlLnBvaW50QXR0cmlicz1mdW5jdGlvbihhLGMpe3ZhciBiPXRoaXMub3B0aW9ucyxkPXRoaXMucG9pbnRBdHRyVG9PcHRpb25zfHx7fTt2YXIgZT1kLnN0cm9rZXx8XG5cImJvcmRlckNvbG9yXCI7dmFyIGg9ZFtcInN0cm9rZS13aWR0aFwiXXx8XCJib3JkZXJXaWR0aFwiLGc9YSYmYS5jb2xvcnx8dGhpcy5jb2xvcixmPWEmJmFbZV18fGJbZV18fGcsaz1hJiZhW2hdfHxiW2hdfHx0aGlzW2hdfHwwO2Q9YSYmYS5vcHRpb25zLmRhc2hTdHlsZXx8Yi5kYXNoU3R5bGU7dmFyIG09RShhJiZhLm9wYWNpdHksYi5vcGFjaXR5LDEpO2lmKGEmJnRoaXMuem9uZXMubGVuZ3RoKXt2YXIgbD1hLmdldFpvbmUoKTtnPWEub3B0aW9ucy5jb2xvcnx8bCYmKGwuY29sb3J8fGEubm9uWm9uZWRDb2xvcil8fHRoaXMuY29sb3I7bCYmKGY9bC5ib3JkZXJDb2xvcnx8ZixkPWwuZGFzaFN0eWxlfHxkLGs9bC5ib3JkZXJXaWR0aHx8ayl9YyYmYSYmKGE9SihiLnN0YXRlc1tjXSxhLm9wdGlvbnMuc3RhdGVzJiZhLm9wdGlvbnMuc3RhdGVzW2NdfHx7fSksYz1hLmJyaWdodG5lc3MsZz1hLmNvbG9yfHxcInVuZGVmaW5lZFwiIT09dHlwZW9mIGMmJnYoZykuYnJpZ2h0ZW4oYS5icmlnaHRuZXNzKS5nZXQoKXx8XG5nLGY9YVtlXXx8ZixrPWFbaF18fGssZD1hLmRhc2hTdHlsZXx8ZCxtPUUoYS5vcGFjaXR5LG0pKTtlPXtmaWxsOmcsc3Ryb2tlOmYsXCJzdHJva2Utd2lkdGhcIjprLG9wYWNpdHk6bX07ZCYmKGUuZGFzaHN0eWxlPWQpO3JldHVybiBlfTtiLnByb3RvdHlwZS5kcmF3UG9pbnRzPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxjPXRoaXMuY2hhcnQsYj1hLm9wdGlvbnMsZD1jLnJlbmRlcmVyLGU9Yi5hbmltYXRpb25MaW1pdHx8MjUwLGc7YS5wb2ludHMuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgZj1oLmdyYXBoaWMsaz0hIWYsbT1mJiZjLnBvaW50Q291bnQ8ZT9cImFuaW1hdGVcIjpcImF0dHJcIjtpZihuKGgucGxvdFkpJiZudWxsIT09aC55KXtnPWguc2hhcGVBcmdzO2YmJmguaGFzTmV3U2hhcGVUeXBlKCkmJihmPWYuZGVzdHJveSgpKTthLmVuYWJsZWREYXRhU29ydGluZyYmKGguc3RhcnRYUG9zPWEueEF4aXMucmV2ZXJzZWQ/LShnP2cud2lkdGh8fDA6MCk6YS54QXhpcy53aWR0aCk7Znx8KGguZ3JhcGhpYz1cbmY9ZFtoLnNoYXBlVHlwZV0oZykuYWRkKGguZ3JvdXB8fGEuZ3JvdXApKSYmYS5lbmFibGVkRGF0YVNvcnRpbmcmJmMuaGFzUmVuZGVyZWQmJmMucG9pbnRDb3VudDxlJiYoZi5hdHRyKHt4Omguc3RhcnRYUG9zfSksaz0hMCxtPVwiYW5pbWF0ZVwiKTtpZihmJiZrKWZbbV0oSihnKSk7aWYoYi5ib3JkZXJSYWRpdXMpZlttXSh7cjpiLmJvcmRlclJhZGl1c30pO2Muc3R5bGVkTW9kZXx8ZlttXShhLnBvaW50QXR0cmlicyhoLGguc2VsZWN0ZWQmJlwic2VsZWN0XCIpKS5zaGFkb3coITEhPT1oLmFsbG93U2hhZG93JiZiLnNoYWRvdyxudWxsLGIuc3RhY2tpbmcmJiFiLmJvcmRlclJhZGl1cyk7ZiYmKGYuYWRkQ2xhc3MoaC5nZXRDbGFzc05hbWUoKSwhMCksZi5hdHRyKHt2aXNpYmlsaXR5OmgudmlzaWJsZT9cImluaGVyaXRcIjpcImhpZGRlblwifSkpfWVsc2UgZiYmKGguZ3JhcGhpYz1mLmRlc3Ryb3koKSl9KX07Yi5wcm90b3R5cGUuZHJhd1RyYWNrZXI9ZnVuY3Rpb24oKXt2YXIgYT10aGlzLGM9XG5hLmNoYXJ0LGI9Yy5wb2ludGVyLGQ9ZnVuY3Rpb24oYSl7dmFyIGM9Yi5nZXRQb2ludEZyb21FdmVudChhKTtcInVuZGVmaW5lZFwiIT09dHlwZW9mIGMmJihiLmlzRGlyZWN0VG91Y2g9ITAsYy5vbk1vdXNlT3ZlcihhKSl9LGU7YS5wb2ludHMuZm9yRWFjaChmdW5jdGlvbihhKXtlPXUoYS5kYXRhTGFiZWxzKT9hLmRhdGFMYWJlbHM6YS5kYXRhTGFiZWw/W2EuZGF0YUxhYmVsXTpbXTthLmdyYXBoaWMmJihhLmdyYXBoaWMuZWxlbWVudC5wb2ludD1hKTtlLmZvckVhY2goZnVuY3Rpb24oYyl7Yy5kaXY/Yy5kaXYucG9pbnQ9YTpjLmVsZW1lbnQucG9pbnQ9YX0pfSk7YS5faGFzVHJhY2tpbmd8fChhLnRyYWNrZXJHcm91cHMuZm9yRWFjaChmdW5jdGlvbihlKXtpZihhW2VdKXthW2VdLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy10cmFja2VyXCIpLm9uKFwibW91c2VvdmVyXCIsZCkub24oXCJtb3VzZW91dFwiLGZ1bmN0aW9uKGEpe2Iub25UcmFja2VyTW91c2VPdXQoYSl9KTtpZihmKWFbZV0ub24oXCJ0b3VjaHN0YXJ0XCIsXG5kKTshYy5zdHlsZWRNb2RlJiZhLm9wdGlvbnMuY3Vyc29yJiZhW2VdLmNzcyhxKS5jc3Moe2N1cnNvcjphLm9wdGlvbnMuY3Vyc29yfSl9fSksYS5faGFzVHJhY2tpbmc9ITApO0QodGhpcyxcImFmdGVyRHJhd1RyYWNrZXJcIil9O2IucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYz1hLmNoYXJ0O2MuaGFzUmVuZGVyZWQmJmMuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oYyl7Yy50eXBlPT09YS50eXBlJiYoYy5pc0RpcnR5PSEwKX0pO0cucHJvdG90eXBlLnJlbW92ZS5hcHBseShhLGFyZ3VtZW50cyl9O2IuZGVmYXVsdE9wdGlvbnM9SihHLmRlZmF1bHRPcHRpb25zLHtib3JkZXJSYWRpdXM6MCxjZW50ZXJJbkNhdGVnb3J5OiExLGdyb3VwUGFkZGluZzouMixtYXJrZXI6bnVsbCxwb2ludFBhZGRpbmc6LjEsbWluUG9pbnRMZW5ndGg6MCxjcm9wVGhyZXNob2xkOjUwLHBvaW50UmFuZ2U6bnVsbCxzdGF0ZXM6e2hvdmVyOntoYWxvOiExLGJyaWdodG5lc3M6LjF9LFxuc2VsZWN0Ontjb2xvcjpILm5ldXRyYWxDb2xvcjIwLGJvcmRlckNvbG9yOkgubmV1dHJhbENvbG9yMTAwfX0sZGF0YUxhYmVsczp7YWxpZ246dm9pZCAwLHZlcnRpY2FsQWxpZ246dm9pZCAwLHk6dm9pZCAwfSxzdGFydEZyb21UaHJlc2hvbGQ6ITAsc3RpY2t5VHJhY2tpbmc6ITEsdG9vbHRpcDp7ZGlzdGFuY2U6Nn0sdGhyZXNob2xkOjAsYm9yZGVyQ29sb3I6SC5iYWNrZ3JvdW5kQ29sb3J9KTtyZXR1cm4gYn0oRyk7bChCLnByb3RvdHlwZSx7Y3JvcFNob3VsZGVyOjAsZGlyZWN0VG91Y2g6ITAsZHJhd0xlZ2VuZFN5bWJvbDp6LmRyYXdSZWN0YW5nbGUsZ2V0U3ltYm9sOmUsbmVnU3RhY2tzOiEwLHRyYWNrZXJHcm91cHM6W1wiZ3JvdXBcIixcImRhdGFMYWJlbHNHcm91cFwiXX0pO0MucmVnaXN0ZXJTZXJpZXNUeXBlKFwiY29sdW1uXCIsQik7XCJcIjtcIlwiO3JldHVybiBCfSk7TyhlLFwiU2VyaWVzL0Jhci9CYXJTZXJpZXMuanNcIixbZVtcIlNlcmllcy9Db2x1bW4vQ29sdW1uU2VyaWVzLmpzXCJdLGVbXCJDb3JlL1Nlcmllcy9TZXJpZXNSZWdpc3RyeS5qc1wiXSxcbmVbXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oZSxiLEkpe3ZhciBEPXRoaXMmJnRoaXMuX19leHRlbmRzfHxmdW5jdGlvbigpe3ZhciBiPWZ1bmN0aW9uKGUseCl7Yj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oYixlKXtiLl9fcHJvdG9fXz1lfXx8ZnVuY3Rpb24oYixlKXtmb3IodmFyIGYgaW4gZSllLmhhc093blByb3BlcnR5KGYpJiYoYltmXT1lW2ZdKX07cmV0dXJuIGIoZSx4KX07cmV0dXJuIGZ1bmN0aW9uKGUseCl7ZnVuY3Rpb24gdygpe3RoaXMuY29uc3RydWN0b3I9ZX1iKGUseCk7ZS5wcm90b3R5cGU9bnVsbD09PXg/T2JqZWN0LmNyZWF0ZSh4KToody5wcm90b3R5cGU9eC5wcm90b3R5cGUsbmV3IHcpfX0oKSxIPUkuZXh0ZW5kLEc9SS5tZXJnZTtJPWZ1bmN0aW9uKGIpe2Z1bmN0aW9uIEIoKXt2YXIgZT1udWxsIT09YiYmYi5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7ZS5kYXRhPXZvaWQgMDtcbmUub3B0aW9ucz12b2lkIDA7ZS5wb2ludHM9dm9pZCAwO3JldHVybiBlfUQoQixiKTtCLmRlZmF1bHRPcHRpb25zPUcoZS5kZWZhdWx0T3B0aW9ucyx7fSk7cmV0dXJuIEJ9KGUpO0goSS5wcm90b3R5cGUse2ludmVydGVkOiEwfSk7Yi5yZWdpc3RlclNlcmllc1R5cGUoXCJiYXJcIixJKTtcIlwiO3JldHVybiBJfSk7TyhlLFwiU2VyaWVzL1NjYXR0ZXIvU2NhdHRlclNlcmllcy5qc1wiLFtlW1wiU2VyaWVzL0NvbHVtbi9Db2x1bW5TZXJpZXMuanNcIl0sZVtcIlNlcmllcy9MaW5lL0xpbmVTZXJpZXMuanNcIl0sZVtcIkNvcmUvU2VyaWVzL1Nlcmllc1JlZ2lzdHJ5LmpzXCJdLGVbXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oZSxiLEkseil7dmFyIEQ9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIGI9ZnVuY3Rpb24oZSx2KXtiPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihiLGQpe2IuX19wcm90b19fPWR9fHxcbmZ1bmN0aW9uKGIsZCl7Zm9yKHZhciBlIGluIGQpZC5oYXNPd25Qcm9wZXJ0eShlKSYmKGJbZV09ZFtlXSl9O3JldHVybiBiKGUsdil9O3JldHVybiBmdW5jdGlvbihlLHYpe2Z1bmN0aW9uIGYoKXt0aGlzLmNvbnN0cnVjdG9yPWV9YihlLHYpO2UucHJvdG90eXBlPW51bGw9PT12P09iamVjdC5jcmVhdGUodik6KGYucHJvdG90eXBlPXYucHJvdG90eXBlLG5ldyBmKX19KCksRz16LmFkZEV2ZW50LEM9ei5leHRlbmQsQj16Lm1lcmdlO3o9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdygpe3ZhciBiPW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztiLmRhdGE9dm9pZCAwO2Iub3B0aW9ucz12b2lkIDA7Yi5wb2ludHM9dm9pZCAwO3JldHVybiBifUQodyxlKTt3LnByb3RvdHlwZS5hcHBseUppdHRlcj1mdW5jdGlvbigpe3ZhciBiPXRoaXMsZT10aGlzLm9wdGlvbnMuaml0dGVyLGQ9dGhpcy5wb2ludHMubGVuZ3RoO2UmJnRoaXMucG9pbnRzLmZvckVhY2goZnVuY3Rpb24oZixcbmspe1tcInhcIixcInlcIl0uZm9yRWFjaChmdW5jdGlvbihsLHEpe3ZhciB2PVwicGxvdFwiK2wudG9VcHBlckNhc2UoKTtpZihlW2xdJiYhZi5pc051bGwpe3ZhciBuPWJbbCtcIkF4aXNcIl07dmFyIHc9ZVtsXSpuLnRyYW5zQTtpZihuJiYhbi5pc0xvZyl7dmFyIEU9TWF0aC5tYXgoMCxmW3ZdLXcpO249TWF0aC5taW4obi5sZW4sZlt2XSt3KTtxPTFFNCpNYXRoLnNpbihrK3EqZCk7Zlt2XT1FKyhuLUUpKihxLU1hdGguZmxvb3IocSkpO1wieFwiPT09bCYmKGYuY2xpZW50WD1mLnBsb3RYKX19fSl9KX07dy5wcm90b3R5cGUuZHJhd0dyYXBoPWZ1bmN0aW9uKCl7KHRoaXMub3B0aW9ucy5saW5lV2lkdGh8fDA9PT10aGlzLm9wdGlvbnMubGluZVdpZHRoJiZ0aGlzLmdyYXBoJiZ0aGlzLmdyYXBoLnN0cm9rZVdpZHRoKCkpJiZlLnByb3RvdHlwZS5kcmF3R3JhcGguY2FsbCh0aGlzKX07dy5kZWZhdWx0T3B0aW9ucz1CKGIuZGVmYXVsdE9wdGlvbnMse2xpbmVXaWR0aDowLGZpbmROZWFyZXN0UG9pbnRCeTpcInh5XCIsXG5qaXR0ZXI6e3g6MCx5OjB9LG1hcmtlcjp7ZW5hYmxlZDohMH0sdG9vbHRpcDp7aGVhZGVyRm9ybWF0Oic8c3BhbiBzdHlsZT1cImNvbG9yOntwb2ludC5jb2xvcn1cIj5cXHUyNWNmPC9zcGFuPiA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogMTBweFwiPiB7c2VyaWVzLm5hbWV9PC9zcGFuPjxici8+Jyxwb2ludEZvcm1hdDpcIng6IDxiPntwb2ludC54fTwvYj48YnIvPnk6IDxiPntwb2ludC55fTwvYj48YnIvPlwifX0pO3JldHVybiB3fShiKTtDKHoucHJvdG90eXBlLHtkcmF3VHJhY2tlcjplLnByb3RvdHlwZS5kcmF3VHJhY2tlcixzb3J0ZWQ6ITEscmVxdWlyZVNvcnRpbmc6ITEsbm9TaGFyZWRUb29sdGlwOiEwLHRyYWNrZXJHcm91cHM6W1wiZ3JvdXBcIixcIm1hcmtlckdyb3VwXCIsXCJkYXRhTGFiZWxzR3JvdXBcIl0sdGFrZU9yZGluYWxQb3NpdGlvbjohMX0pO0coeixcImFmdGVyVHJhbnNsYXRlXCIsZnVuY3Rpb24oKXt0aGlzLmFwcGx5Sml0dGVyKCl9KTtJLnJlZ2lzdGVyU2VyaWVzVHlwZShcInNjYXR0ZXJcIixcbnopO1wiXCI7cmV0dXJuIHp9KTtPKGUsXCJNaXhpbnMvQ2VudGVyZWRTZXJpZXMuanNcIixbZVtcIkNvcmUvR2xvYmFscy5qc1wiXSxlW1wiQ29yZS9TZXJpZXMvU2VyaWVzLmpzXCJdLGVbXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oZSxiLEkpe3ZhciBEPUkuaXNOdW1iZXIsSD1JLnBpY2ssRz1JLnJlbGF0aXZlTGVuZ3RoLEM9ZS5kZWcycmFkO3JldHVybiBlLkNlbnRlcmVkU2VyaWVzTWl4aW49e2dldENlbnRlcjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucyxEPXRoaXMuY2hhcnQsdz0yKihlLnNsaWNlZE9mZnNldHx8MCksdj1ELnBsb3RXaWR0aC0yKncsZj1ELnBsb3RIZWlnaHQtMip3LGQ9ZS5jZW50ZXIscT1NYXRoLm1pbih2LGYpLGs9ZS5zaXplLGw9ZS5pbm5lclNpemV8fDA7XCJzdHJpbmdcIj09PXR5cGVvZiBrJiYoaz1wYXJzZUZsb2F0KGspKTtcInN0cmluZ1wiPT09dHlwZW9mIGwmJihsPXBhcnNlRmxvYXQobCkpO2U9W0goZFswXSxcIjUwJVwiKSxIKGRbMV0sXCI1MCVcIiksSChrJiZcbjA+az92b2lkIDA6ZS5zaXplLFwiMTAwJVwiKSxIKGwmJjA+bD92b2lkIDA6ZS5pbm5lclNpemV8fDAsXCIwJVwiKV07IUQuYW5ndWxhcnx8dGhpcyBpbnN0YW5jZW9mIGJ8fChlWzNdPTApO2ZvcihkPTA7ND5kOysrZClrPWVbZF0sRD0yPmR8fDI9PT1kJiYvJSQvLnRlc3QoayksZVtkXT1HKGssW3YsZixxLGVbMl1dW2RdKSsoRD93OjApO2VbM10+ZVsyXSYmKGVbM109ZVsyXSk7cmV0dXJuIGV9LGdldFN0YXJ0QW5kRW5kUmFkaWFuczpmdW5jdGlvbihiLGUpe2I9RChiKT9iOjA7ZT1EKGUpJiZlPmImJjM2MD5lLWI/ZTpiKzM2MDtyZXR1cm57c3RhcnQ6QyooYistOTApLGVuZDpDKihlKy05MCl9fX19KTtPKGUsXCJTZXJpZXMvUGllL1BpZVBvaW50LmpzXCIsW2VbXCJDb3JlL0FuaW1hdGlvbi9BbmltYXRpb25VdGlsaXRpZXMuanNcIl0sZVtcIkNvcmUvU2VyaWVzL1BvaW50LmpzXCJdLGVbXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oZSxiLEkpe3ZhciBEPXRoaXMmJnRoaXMuX19leHRlbmRzfHxcbmZ1bmN0aW9uKCl7dmFyIGI9ZnVuY3Rpb24oZSxkKXtiPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihiLGQpe2IuX19wcm90b19fPWR9fHxmdW5jdGlvbihiLGQpe2Zvcih2YXIgZSBpbiBkKWQuaGFzT3duUHJvcGVydHkoZSkmJihiW2VdPWRbZV0pfTtyZXR1cm4gYihlLGQpfTtyZXR1cm4gZnVuY3Rpb24oZSxkKXtmdW5jdGlvbiBmKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfWIoZSxkKTtlLnByb3RvdHlwZT1udWxsPT09ZD9PYmplY3QuY3JlYXRlKGQpOihmLnByb3RvdHlwZT1kLnByb3RvdHlwZSxuZXcgZil9fSgpLEg9ZS5zZXRBbmltYXRpb24sRz1JLmFkZEV2ZW50LEM9SS5kZWZpbmVkO2U9SS5leHRlbmQ7dmFyIEI9SS5pc051bWJlcix4PUkucGljayx3PUkucmVsYXRpdmVMZW5ndGg7ST1mdW5jdGlvbihlKXtmdW5jdGlvbiBmKCl7dmFyIGI9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO1xuYi5sYWJlbERpc3RhbmNlPXZvaWQgMDtiLm9wdGlvbnM9dm9pZCAwO2Iuc2VyaWVzPXZvaWQgMDtyZXR1cm4gYn1EKGYsZSk7Zi5wcm90b3R5cGUuZ2V0Q29ubmVjdG9yUGF0aD1mdW5jdGlvbigpe3ZhciBiPXRoaXMubGFiZWxQb3NpdGlvbixlPXRoaXMuc2VyaWVzLm9wdGlvbnMuZGF0YUxhYmVscyxmPWUuY29ubmVjdG9yU2hhcGUsbD10aGlzLmNvbm5lY3RvclNoYXBlcztsW2ZdJiYoZj1sW2ZdKTtyZXR1cm4gZi5jYWxsKHRoaXMse3g6Yi5maW5hbC54LHk6Yi5maW5hbC55LGFsaWdubWVudDpiLmFsaWdubWVudH0sYi5jb25uZWN0b3JQb3NpdGlvbixlKX07Zi5wcm90b3R5cGUuZ2V0VHJhbnNsYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2xpY2VkP3RoaXMuc2xpY2VkVHJhbnNsYXRpb246e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjB9fTtmLnByb3RvdHlwZS5oYWxvUGF0aD1mdW5jdGlvbihiKXt2YXIgZD10aGlzLnNoYXBlQXJncztyZXR1cm4gdGhpcy5zbGljZWR8fCF0aGlzLnZpc2libGU/XG5bXTp0aGlzLnNlcmllcy5jaGFydC5yZW5kZXJlci5zeW1ib2xzLmFyYyhkLngsZC55LGQucitiLGQucitiLHtpbm5lclI6ZC5yLTEsc3RhcnQ6ZC5zdGFydCxlbmQ6ZC5lbmR9KX07Zi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe2IucHJvdG90eXBlLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBkPXRoaXM7ZC5uYW1lPXgoZC5uYW1lLFwiU2xpY2VcIik7dmFyIGU9ZnVuY3Rpb24oYil7ZC5zbGljZShcInNlbGVjdFwiPT09Yi50eXBlKX07RyhkLFwic2VsZWN0XCIsZSk7RyhkLFwidW5zZWxlY3RcIixlKTtyZXR1cm4gZH07Zi5wcm90b3R5cGUuaXNWYWxpZD1mdW5jdGlvbigpe3JldHVybiBCKHRoaXMueSkmJjA8PXRoaXMueX07Zi5wcm90b3R5cGUuc2V0VmlzaWJsZT1mdW5jdGlvbihiLGUpe3ZhciBkPXRoaXMsZj1kLnNlcmllcyxxPWYuY2hhcnQsdj1mLm9wdGlvbnMuaWdub3JlSGlkZGVuUG9pbnQ7ZT14KGUsdik7YiE9PWQudmlzaWJsZSYmKGQudmlzaWJsZT1kLm9wdGlvbnMudmlzaWJsZT1cbmI9XCJ1bmRlZmluZWRcIj09PXR5cGVvZiBiPyFkLnZpc2libGU6YixmLm9wdGlvbnMuZGF0YVtmLmRhdGEuaW5kZXhPZihkKV09ZC5vcHRpb25zLFtcImdyYXBoaWNcIixcImRhdGFMYWJlbFwiLFwiY29ubmVjdG9yXCIsXCJzaGFkb3dHcm91cFwiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe2lmKGRbZV0pZFtlXVtiP1wic2hvd1wiOlwiaGlkZVwiXShiKX0pLGQubGVnZW5kSXRlbSYmcS5sZWdlbmQuY29sb3JpemVJdGVtKGQsYiksYnx8XCJob3ZlclwiIT09ZC5zdGF0ZXx8ZC5zZXRTdGF0ZShcIlwiKSx2JiYoZi5pc0RpcnR5PSEwKSxlJiZxLnJlZHJhdygpKX07Zi5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oYixlLGYpe3ZhciBkPXRoaXMuc2VyaWVzO0goZixkLmNoYXJ0KTt4KGUsITApO3RoaXMuc2xpY2VkPXRoaXMub3B0aW9ucy5zbGljZWQ9QyhiKT9iOiF0aGlzLnNsaWNlZDtkLm9wdGlvbnMuZGF0YVtkLmRhdGEuaW5kZXhPZih0aGlzKV09dGhpcy5vcHRpb25zO3RoaXMuZ3JhcGhpYyYmdGhpcy5ncmFwaGljLmFuaW1hdGUodGhpcy5nZXRUcmFuc2xhdGUoKSk7XG50aGlzLnNoYWRvd0dyb3VwJiZ0aGlzLnNoYWRvd0dyb3VwLmFuaW1hdGUodGhpcy5nZXRUcmFuc2xhdGUoKSl9O3JldHVybiBmfShiKTtlKEkucHJvdG90eXBlLHtjb25uZWN0b3JTaGFwZXM6e2ZpeGVkT2Zmc2V0OmZ1bmN0aW9uKGIsZSxkKXt2YXIgZj1lLmJyZWFrQXQ7ZT1lLnRvdWNoaW5nU2xpY2VBdDtyZXR1cm5bW1wiTVwiLGIueCxiLnldLGQuc29mdENvbm5lY3Rvcj9bXCJDXCIsYi54KyhcImxlZnRcIj09PWIuYWxpZ25tZW50Py01OjUpLGIueSwyKmYueC1lLngsMipmLnktZS55LGYueCxmLnldOltcIkxcIixmLngsZi55XSxbXCJMXCIsZS54LGUueV1dfSxzdHJhaWdodDpmdW5jdGlvbihiLGUpe2U9ZS50b3VjaGluZ1NsaWNlQXQ7cmV0dXJuW1tcIk1cIixiLngsYi55XSxbXCJMXCIsZS54LGUueV1dfSxjcm9va2VkTGluZTpmdW5jdGlvbihiLGUsZCl7ZT1lLnRvdWNoaW5nU2xpY2VBdDt2YXIgZj10aGlzLnNlcmllcyxrPWYuY2VudGVyWzBdLGw9Zi5jaGFydC5wbG90V2lkdGgsdj1mLmNoYXJ0LnBsb3RMZWZ0O1xuZj1iLmFsaWdubWVudDt2YXIgdT10aGlzLnNoYXBlQXJncy5yO2Q9dyhkLmNyb29rRGlzdGFuY2UsMSk7bD1cImxlZnRcIj09PWY/ayt1KyhsK3Ytay11KSooMS1kKTp2KyhrLXUpKmQ7ZD1bXCJMXCIsbCxiLnldO2s9ITA7aWYoXCJsZWZ0XCI9PT1mP2w+Yi54fHxsPGUueDpsPGIueHx8bD5lLngpaz0hMTtiPVtbXCJNXCIsYi54LGIueV1dO2smJmIucHVzaChkKTtiLnB1c2goW1wiTFwiLGUueCxlLnldKTtyZXR1cm4gYn19fSk7cmV0dXJuIEl9KTtPKGUsXCJTZXJpZXMvUGllL1BpZVNlcmllcy5qc1wiLFtlW1wiTWl4aW5zL0NlbnRlcmVkU2VyaWVzLmpzXCJdLGVbXCJTZXJpZXMvQ29sdW1uL0NvbHVtblNlcmllcy5qc1wiXSxlW1wiQ29yZS9HbG9iYWxzLmpzXCJdLGVbXCJNaXhpbnMvTGVnZW5kU3ltYm9sLmpzXCJdLGVbXCJDb3JlL0NvbG9yL1BhbGV0dGUuanNcIl0sZVtcIlNlcmllcy9QaWUvUGllUG9pbnQuanNcIl0sZVtcIkNvcmUvU2VyaWVzL1Nlcmllcy5qc1wiXSxlW1wiQ29yZS9TZXJpZXMvU2VyaWVzUmVnaXN0cnkuanNcIl0sXG5lW1wiQ29yZS9SZW5kZXJlci9TVkcvU1ZHUmVuZGVyZXIuanNcIl0sZVtcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihlLGIsSSx6LEgsRyxDLEIseCx3KXt2YXIgdj10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8ZnVuY3Rpb24oKXt2YXIgYj1mdW5jdGlvbihkLGUpe2I9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGIsYyl7Yi5fX3Byb3RvX189Y318fGZ1bmN0aW9uKGIsYyl7Zm9yKHZhciBkIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShkKSYmKGJbZF09Y1tkXSl9O3JldHVybiBiKGQsZSl9O3JldHVybiBmdW5jdGlvbihkLGUpe2Z1bmN0aW9uIGYoKXt0aGlzLmNvbnN0cnVjdG9yPWR9YihkLGUpO2QucHJvdG90eXBlPW51bGw9PT1lP09iamVjdC5jcmVhdGUoZSk6KGYucHJvdG90eXBlPWUucHJvdG90eXBlLG5ldyBmKX19KCksZj1lLmdldFN0YXJ0QW5kRW5kUmFkaWFucztJPUkubm9vcDt2YXIgZD13LmNsYW1wLHE9XG53LmV4dGVuZCxrPXcuZmlyZUV2ZW50LGw9dy5tZXJnZSxEPXcucGljayx1PXcucmVsYXRpdmVMZW5ndGg7dz1mdW5jdGlvbihiKXtmdW5jdGlvbiBlKCl7dmFyIGQ9bnVsbCE9PWImJmIuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO2QuY2VudGVyPXZvaWQgMDtkLmRhdGE9dm9pZCAwO2QubWF4TGFiZWxEaXN0YW5jZT12b2lkIDA7ZC5vcHRpb25zPXZvaWQgMDtkLnBvaW50cz12b2lkIDA7cmV0dXJuIGR9dihlLGIpO2UucHJvdG90eXBlLmFuaW1hdGU9ZnVuY3Rpb24oYil7dmFyIGQ9dGhpcyxjPWQucG9pbnRzLGU9ZC5zdGFydEFuZ2xlUmFkO2J8fGMuZm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYz1hLmdyYXBoaWMsYj1hLnNoYXBlQXJncztjJiZiJiYoYy5hdHRyKHtyOkQoYS5zdGFydFIsZC5jZW50ZXImJmQuY2VudGVyWzNdLzIpLHN0YXJ0OmUsZW5kOmV9KSxjLmFuaW1hdGUoe3I6Yi5yLHN0YXJ0OmIuc3RhcnQsZW5kOmIuZW5kfSxkLm9wdGlvbnMuYW5pbWF0aW9uKSl9KX07XG5lLnByb3RvdHlwZS5kcmF3RW1wdHk9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLnN0YXJ0QW5nbGVSYWQsZD10aGlzLmVuZEFuZ2xlUmFkLGM9dGhpcy5vcHRpb25zO2lmKDA9PT10aGlzLnRvdGFsJiZ0aGlzLmNlbnRlcil7dmFyIGU9dGhpcy5jZW50ZXJbMF07dmFyIGE9dGhpcy5jZW50ZXJbMV07dGhpcy5ncmFwaHx8KHRoaXMuZ3JhcGg9dGhpcy5jaGFydC5yZW5kZXJlci5hcmMoZSxhLHRoaXMuY2VudGVyWzFdLzIsMCxiLGQpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1lbXB0eS1zZXJpZXNcIikuYWRkKHRoaXMuZ3JvdXApKTt0aGlzLmdyYXBoLmF0dHIoe2Q6eC5wcm90b3R5cGUuc3ltYm9scy5hcmMoZSxhLHRoaXMuY2VudGVyWzJdLzIsMCx7c3RhcnQ6YixlbmQ6ZCxpbm5lclI6dGhpcy5jZW50ZXJbM10vMn0pfSk7dGhpcy5jaGFydC5zdHlsZWRNb2RlfHx0aGlzLmdyYXBoLmF0dHIoe1wic3Ryb2tlLXdpZHRoXCI6Yy5ib3JkZXJXaWR0aCxmaWxsOmMuZmlsbENvbG9yfHxcIm5vbmVcIixzdHJva2U6Yy5jb2xvcnx8XG5ILm5ldXRyYWxDb2xvcjIwfSl9ZWxzZSB0aGlzLmdyYXBoJiYodGhpcy5ncmFwaD10aGlzLmdyYXBoLmRlc3Ryb3koKSl9O2UucHJvdG90eXBlLmRyYXdQb2ludHM9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLmNoYXJ0LnJlbmRlcmVyO3RoaXMucG9pbnRzLmZvckVhY2goZnVuY3Rpb24oZCl7ZC5ncmFwaGljJiZkLmhhc05ld1NoYXBlVHlwZSgpJiYoZC5ncmFwaGljPWQuZ3JhcGhpYy5kZXN0cm95KCkpO2QuZ3JhcGhpY3x8KGQuZ3JhcGhpYz1iW2Quc2hhcGVUeXBlXShkLnNoYXBlQXJncykuYWRkKGQuc2VyaWVzLmdyb3VwKSxkLmRlbGF5ZWRSZW5kZXJpbmc9ITApfSl9O2UucHJvdG90eXBlLmdlbmVyYXRlUG9pbnRzPWZ1bmN0aW9uKCl7Yi5wcm90b3R5cGUuZ2VuZXJhdGVQb2ludHMuY2FsbCh0aGlzKTt0aGlzLnVwZGF0ZVRvdGFscygpfTtlLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKGIsZSxjKXt2YXIgZz10aGlzLmNlbnRlcixhPXRoaXMucmFkaWk/dGhpcy5yYWRpaVtjLmluZGV4XXx8XG4wOmdbMl0vMjtiPU1hdGguYXNpbihkKChiLWdbMV0pLyhhK2MubGFiZWxEaXN0YW5jZSksLTEsMSkpO3JldHVybiBnWzBdKyhlPy0xOjEpKk1hdGguY29zKGIpKihhK2MubGFiZWxEaXN0YW5jZSkrKDA8Yy5sYWJlbERpc3RhbmNlPyhlPy0xOjEpKnRoaXMub3B0aW9ucy5kYXRhTGFiZWxzLnBhZGRpbmc6MCl9O2UucHJvdG90eXBlLmhhc0RhdGE9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMucHJvY2Vzc2VkWERhdGEubGVuZ3RofTtlLnByb3RvdHlwZS5yZWRyYXdQb2ludHM9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLGQ9Yi5jaGFydCxjPWQucmVuZGVyZXIsZSxhLGgsZixrPWIub3B0aW9ucy5zaGFkb3c7dGhpcy5kcmF3RW1wdHkoKTsha3x8Yi5zaGFkb3dHcm91cHx8ZC5zdHlsZWRNb2RlfHwoYi5zaGFkb3dHcm91cD1jLmcoXCJzaGFkb3dcIikuYXR0cih7ekluZGV4Oi0xfSkuYWRkKGIuZ3JvdXApKTtiLnBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKGcpe3ZhciBtPXt9O2E9Zy5ncmFwaGljO1xuaWYoIWcuaXNOdWxsJiZhKXt2YXIgcj12b2lkIDA7Zj1nLnNoYXBlQXJncztlPWcuZ2V0VHJhbnNsYXRlKCk7ZC5zdHlsZWRNb2RlfHwocj1nLnNoYWRvd0dyb3VwLGsmJiFyJiYocj1nLnNoYWRvd0dyb3VwPWMuZyhcInNoYWRvd1wiKS5hZGQoYi5zaGFkb3dHcm91cCkpLHImJnIuYXR0cihlKSxoPWIucG9pbnRBdHRyaWJzKGcsZy5zZWxlY3RlZCYmXCJzZWxlY3RcIikpO2cuZGVsYXllZFJlbmRlcmluZz8oYS5zZXRSYWRpYWxSZWZlcmVuY2UoYi5jZW50ZXIpLmF0dHIoZikuYXR0cihlKSxkLnN0eWxlZE1vZGV8fGEuYXR0cihoKS5hdHRyKHtcInN0cm9rZS1saW5lam9pblwiOlwicm91bmRcIn0pLnNoYWRvdyhrLHIpLGcuZGVsYXllZFJlbmRlcmluZz0hMSk6KGEuc2V0UmFkaWFsUmVmZXJlbmNlKGIuY2VudGVyKSxkLnN0eWxlZE1vZGV8fGwoITAsbSxoKSxsKCEwLG0sZixlKSxhLmFuaW1hdGUobSkpO2EuYXR0cih7dmlzaWJpbGl0eTpnLnZpc2libGU/XCJpbmhlcml0XCI6XCJoaWRkZW5cIn0pO2EuYWRkQ2xhc3MoZy5nZXRDbGFzc05hbWUoKSxcbiEwKX1lbHNlIGEmJihnLmdyYXBoaWM9YS5kZXN0cm95KCkpfSl9O2UucHJvdG90eXBlLnNvcnRCeUFuZ2xlPWZ1bmN0aW9uKGIsZCl7Yi5zb3J0KGZ1bmN0aW9uKGMsYil7cmV0dXJuXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBjLmFuZ2xlJiYoYi5hbmdsZS1jLmFuZ2xlKSpkfSl9O2UucHJvdG90eXBlLnRyYW5zbGF0ZT1mdW5jdGlvbihiKXt0aGlzLmdlbmVyYXRlUG9pbnRzKCk7dmFyIGQ9MCxjPXRoaXMub3B0aW9ucyxlPWMuc2xpY2VkT2Zmc2V0LGE9ZSsoYy5ib3JkZXJXaWR0aHx8MCksaD1mKGMuc3RhcnRBbmdsZSxjLmVuZEFuZ2xlKSxsPXRoaXMuc3RhcnRBbmdsZVJhZD1oLnN0YXJ0O2g9KHRoaXMuZW5kQW5nbGVSYWQ9aC5lbmQpLWw7dmFyIG49dGhpcy5wb2ludHMscT1jLmRhdGFMYWJlbHMuZGlzdGFuY2U7Yz1jLmlnbm9yZUhpZGRlblBvaW50O3ZhciB2LHc9bi5sZW5ndGg7Ynx8KHRoaXMuY2VudGVyPWI9dGhpcy5nZXRDZW50ZXIoKSk7Zm9yKHY9MDt2PHc7disrKXt2YXIgeD1cbm5bdl07dmFyIEU9bCtkKmg7IXguaXNWYWxpZCgpfHxjJiYheC52aXNpYmxlfHwoZCs9eC5wZXJjZW50YWdlLzEwMCk7dmFyIHo9bCtkKmg7dmFyIEI9e3g6YlswXSx5OmJbMV0scjpiWzJdLzIsaW5uZXJSOmJbM10vMixzdGFydDpNYXRoLnJvdW5kKDFFMypFKS8xRTMsZW5kOk1hdGgucm91bmQoMUUzKnopLzFFM307eC5zaGFwZVR5cGU9XCJhcmNcIjt4LnNoYXBlQXJncz1CO3gubGFiZWxEaXN0YW5jZT1EKHgub3B0aW9ucy5kYXRhTGFiZWxzJiZ4Lm9wdGlvbnMuZGF0YUxhYmVscy5kaXN0YW5jZSxxKTt4LmxhYmVsRGlzdGFuY2U9dSh4LmxhYmVsRGlzdGFuY2UsQi5yKTt0aGlzLm1heExhYmVsRGlzdGFuY2U9TWF0aC5tYXgodGhpcy5tYXhMYWJlbERpc3RhbmNlfHwwLHgubGFiZWxEaXN0YW5jZSk7ej0oeitFKS8yO3o+MS41Kk1hdGguUEk/ei09MipNYXRoLlBJOno8LU1hdGguUEkvMiYmKHorPTIqTWF0aC5QSSk7eC5zbGljZWRUcmFuc2xhdGlvbj17dHJhbnNsYXRlWDpNYXRoLnJvdW5kKE1hdGguY29zKHopKlxuZSksdHJhbnNsYXRlWTpNYXRoLnJvdW5kKE1hdGguc2luKHopKmUpfTtCPU1hdGguY29zKHopKmJbMl0vMjt2YXIgdD1NYXRoLnNpbih6KSpiWzJdLzI7eC50b29sdGlwUG9zPVtiWzBdKy43KkIsYlsxXSsuNyp0XTt4LmhhbGY9ejwtTWF0aC5QSS8yfHx6Pk1hdGguUEkvMj8xOjA7eC5hbmdsZT16O0U9TWF0aC5taW4oYSx4LmxhYmVsRGlzdGFuY2UvNSk7eC5sYWJlbFBvc2l0aW9uPXtuYXR1cmFsOnt4OmJbMF0rQitNYXRoLmNvcyh6KSp4LmxhYmVsRGlzdGFuY2UseTpiWzFdK3QrTWF0aC5zaW4oeikqeC5sYWJlbERpc3RhbmNlfSxcImZpbmFsXCI6e30sYWxpZ25tZW50OjA+eC5sYWJlbERpc3RhbmNlP1wiY2VudGVyXCI6eC5oYWxmP1wicmlnaHRcIjpcImxlZnRcIixjb25uZWN0b3JQb3NpdGlvbjp7YnJlYWtBdDp7eDpiWzBdK0IrTWF0aC5jb3MoeikqRSx5OmJbMV0rdCtNYXRoLnNpbih6KSpFfSx0b3VjaGluZ1NsaWNlQXQ6e3g6YlswXStCLHk6YlsxXSt0fX19fWsodGhpcyxcImFmdGVyVHJhbnNsYXRlXCIpfTtcbmUucHJvdG90eXBlLnVwZGF0ZVRvdGFscz1mdW5jdGlvbigpe3ZhciBiLGQ9MCxjPXRoaXMucG9pbnRzLGU9Yy5sZW5ndGgsYT10aGlzLm9wdGlvbnMuaWdub3JlSGlkZGVuUG9pbnQ7Zm9yKGI9MDtiPGU7YisrKXt2YXIgaD1jW2JdOyFoLmlzVmFsaWQoKXx8YSYmIWgudmlzaWJsZXx8KGQrPWgueSl9dGhpcy50b3RhbD1kO2ZvcihiPTA7YjxlO2IrKyloPWNbYl0saC5wZXJjZW50YWdlPTA8ZCYmKGgudmlzaWJsZXx8IWEpP2gueS9kKjEwMDowLGgudG90YWw9ZH07ZS5kZWZhdWx0T3B0aW9ucz1sKEMuZGVmYXVsdE9wdGlvbnMse2NlbnRlcjpbbnVsbCxudWxsXSxjbGlwOiExLGNvbG9yQnlQb2ludDohMCxkYXRhTGFiZWxzOnthbGxvd092ZXJsYXA6ITAsY29ubmVjdG9yUGFkZGluZzo1LGNvbm5lY3RvclNoYXBlOlwiZml4ZWRPZmZzZXRcIixjcm9va0Rpc3RhbmNlOlwiNzAlXCIsZGlzdGFuY2U6MzAsZW5hYmxlZDohMCxmb3JtYXR0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb2ludC5pc051bGw/XG52b2lkIDA6dGhpcy5wb2ludC5uYW1lfSxzb2Z0Q29ubmVjdG9yOiEwLHg6MH0sZmlsbENvbG9yOnZvaWQgMCxpZ25vcmVIaWRkZW5Qb2ludDohMCxpbmFjdGl2ZU90aGVyUG9pbnRzOiEwLGxlZ2VuZFR5cGU6XCJwb2ludFwiLG1hcmtlcjpudWxsLHNpemU6bnVsbCxzaG93SW5MZWdlbmQ6ITEsc2xpY2VkT2Zmc2V0OjEwLHN0aWNreVRyYWNraW5nOiExLHRvb2x0aXA6e2ZvbGxvd1BvaW50ZXI6ITB9LGJvcmRlckNvbG9yOkguYmFja2dyb3VuZENvbG9yLGJvcmRlcldpZHRoOjEsbGluZVdpZHRoOnZvaWQgMCxzdGF0ZXM6e2hvdmVyOnticmlnaHRuZXNzOi4xfX19KTtyZXR1cm4gZX0oQyk7cSh3LnByb3RvdHlwZSx7YXhpc1R5cGVzOltdLGRpcmVjdFRvdWNoOiEwLGRyYXdHcmFwaDp2b2lkIDAsZHJhd0xlZ2VuZFN5bWJvbDp6LmRyYXdSZWN0YW5nbGUsZHJhd1RyYWNrZXI6Yi5wcm90b3R5cGUuZHJhd1RyYWNrZXIsZ2V0Q2VudGVyOmUuZ2V0Q2VudGVyLGdldFN5bWJvbDpJLGlzQ2FydGVzaWFuOiExLFxubm9TaGFyZWRUb29sdGlwOiEwLHBvaW50QXR0cmliczpiLnByb3RvdHlwZS5wb2ludEF0dHJpYnMscG9pbnRDbGFzczpHLHJlcXVpcmVTb3J0aW5nOiExLHNlYXJjaFBvaW50OkksdHJhY2tlckdyb3VwczpbXCJncm91cFwiLFwiZGF0YUxhYmVsc0dyb3VwXCJdfSk7Qi5yZWdpc3RlclNlcmllc1R5cGUoXCJwaWVcIix3KTtcIlwiO3JldHVybiB3fSk7TyhlLFwiQ29yZS9TZXJpZXMvRGF0YUxhYmVscy5qc1wiLFtlW1wiQ29yZS9BbmltYXRpb24vQW5pbWF0aW9uVXRpbGl0aWVzLmpzXCJdLGVbXCJDb3JlL0Zvcm1hdFV0aWxpdGllcy5qc1wiXSxlW1wiQ29yZS9HbG9iYWxzLmpzXCJdLGVbXCJDb3JlL0NvbG9yL1BhbGV0dGUuanNcIl0sZVtcIkNvcmUvU2VyaWVzL1Nlcmllcy5qc1wiXSxlW1wiQ29yZS9TZXJpZXMvU2VyaWVzUmVnaXN0cnkuanNcIl0sZVtcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihlLGIsSSx6LEgsRyxDKXt2YXIgRD1lLmdldERlZmVycmVkQW5pbWF0aW9uLHg9Yi5mb3JtYXQ7ZT1JLm5vb3A7XG5HPUcuc2VyaWVzVHlwZXM7dmFyIHc9Qy5hcnJheU1heCx2PUMuY2xhbXAsZj1DLmRlZmluZWQsZD1DLmV4dGVuZCxxPUMuZmlyZUV2ZW50LGs9Qy5pc0FycmF5LGw9Qy5tZXJnZSxOPUMub2JqZWN0RWFjaCx1PUMucGljayxuPUMucmVsYXRpdmVMZW5ndGgsSj1DLnNwbGF0LEU9Qy5zdGFibGVTb3J0O1wiXCI7SS5kaXN0cmlidXRlPWZ1bmN0aW9uKGIsYyxkKXtmdW5jdGlvbiBhKGEsYyl7cmV0dXJuIGEudGFyZ2V0LWMudGFyZ2V0fXZhciBlLGc9ITAsZj1iLGs9W107dmFyIGw9MDt2YXIgbT1mLnJlZHVjZWRMZW58fGM7Zm9yKGU9Yi5sZW5ndGg7ZS0tOylsKz1iW2VdLnNpemU7aWYobD5tKXtFKGIsZnVuY3Rpb24oYSxjKXtyZXR1cm4oYy5yYW5rfHwwKS0oYS5yYW5rfHwwKX0pO2ZvcihsPWU9MDtsPD1tOylsKz1iW2VdLnNpemUsZSsrO2s9Yi5zcGxpY2UoZS0xLGIubGVuZ3RoKX1FKGIsYSk7Zm9yKGI9Yi5tYXAoZnVuY3Rpb24oYSl7cmV0dXJue3NpemU6YS5zaXplLHRhcmdldHM6W2EudGFyZ2V0XSxcbmFsaWduOnUoYS5hbGlnbiwuNSl9fSk7Zzspe2ZvcihlPWIubGVuZ3RoO2UtLTspZz1iW2VdLGw9KE1hdGgubWluLmFwcGx5KDAsZy50YXJnZXRzKStNYXRoLm1heC5hcHBseSgwLGcudGFyZ2V0cykpLzIsZy5wb3M9dihsLWcuc2l6ZSpnLmFsaWduLDAsYy1nLnNpemUpO2U9Yi5sZW5ndGg7Zm9yKGc9ITE7ZS0tOykwPGUmJmJbZS0xXS5wb3MrYltlLTFdLnNpemU+YltlXS5wb3MmJihiW2UtMV0uc2l6ZSs9YltlXS5zaXplLGJbZS0xXS50YXJnZXRzPWJbZS0xXS50YXJnZXRzLmNvbmNhdChiW2VdLnRhcmdldHMpLGJbZS0xXS5hbGlnbj0uNSxiW2UtMV0ucG9zK2JbZS0xXS5zaXplPmMmJihiW2UtMV0ucG9zPWMtYltlLTFdLnNpemUpLGIuc3BsaWNlKGUsMSksZz0hMCl9Zi5wdXNoLmFwcGx5KGYsayk7ZT0wO2Iuc29tZShmdW5jdGlvbihhKXt2YXIgYj0wO2lmKGEudGFyZ2V0cy5zb21lKGZ1bmN0aW9uKCl7ZltlXS5wb3M9YS5wb3MrYjtpZihcInVuZGVmaW5lZFwiIT09dHlwZW9mIGQmJlxuTWF0aC5hYnMoZltlXS5wb3MtZltlXS50YXJnZXQpPmQpcmV0dXJuIGYuc2xpY2UoMCxlKzEpLmZvckVhY2goZnVuY3Rpb24oYSl7ZGVsZXRlIGEucG9zfSksZi5yZWR1Y2VkTGVuPShmLnJlZHVjZWRMZW58fGMpLS4xKmMsZi5yZWR1Y2VkTGVuPi4xKmMmJkkuZGlzdHJpYnV0ZShmLGMsZCksITA7Yis9ZltlXS5zaXplO2UrK30pKXJldHVybiEwfSk7RShmLGEpfTtILnByb3RvdHlwZS5kcmF3RGF0YUxhYmVscz1mdW5jdGlvbigpe2Z1bmN0aW9uIGIoYSxjKXt2YXIgYj1jLmZpbHRlcjtyZXR1cm4gYj8oYz1iLm9wZXJhdG9yLGE9YVtiLnByb3BlcnR5XSxiPWIudmFsdWUsXCI+XCI9PT1jJiZhPmJ8fFwiPFwiPT09YyYmYTxifHxcIj49XCI9PT1jJiZhPj1ifHxcIjw9XCI9PT1jJiZhPD1ifHxcIj09XCI9PT1jJiZhPT1ifHxcIj09PVwiPT09YyYmYT09PWI/ITA6ITEpOiEwfWZ1bmN0aW9uIGMoYSxjKXt2YXIgYj1bXSxkO2lmKGsoYSkmJiFrKGMpKWI9YS5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGwoYSxjKX0pO1xuZWxzZSBpZihrKGMpJiYhayhhKSliPWMubWFwKGZ1bmN0aW9uKGMpe3JldHVybiBsKGEsYyl9KTtlbHNlIGlmKGsoYSl8fGsoYykpZm9yKGQ9TWF0aC5tYXgoYS5sZW5ndGgsYy5sZW5ndGgpO2QtLTspYltkXT1sKGFbZF0sY1tkXSk7ZWxzZSBiPWwoYSxjKTtyZXR1cm4gYn12YXIgZD10aGlzLGE9ZC5jaGFydCxlPWQub3B0aW9ucyxyPWUuZGF0YUxhYmVscyxuPWQucG9pbnRzLHYsdz1kLmhhc1JlbmRlcmVkfHwwLEU9ci5hbmltYXRpb247RT1yLmRlZmVyP0QoYSxFLGQpOntkZWZlcjowLGR1cmF0aW9uOjB9O3ZhciBCPWEucmVuZGVyZXI7cj1jKGMoYS5vcHRpb25zLnBsb3RPcHRpb25zJiZhLm9wdGlvbnMucGxvdE9wdGlvbnMuc2VyaWVzJiZhLm9wdGlvbnMucGxvdE9wdGlvbnMuc2VyaWVzLmRhdGFMYWJlbHMsYS5vcHRpb25zLnBsb3RPcHRpb25zJiZhLm9wdGlvbnMucGxvdE9wdGlvbnNbZC50eXBlXSYmYS5vcHRpb25zLnBsb3RPcHRpb25zW2QudHlwZV0uZGF0YUxhYmVscyksXG5yKTtxKHRoaXMsXCJkcmF3RGF0YUxhYmVsc1wiKTtpZihrKHIpfHxyLmVuYWJsZWR8fGQuX2hhc1BvaW50TGFiZWxzKXt2YXIgQz1kLnBsb3RHcm91cChcImRhdGFMYWJlbHNHcm91cFwiLFwiZGF0YS1sYWJlbHNcIix3P1wiaW5oZXJpdFwiOlwiaGlkZGVuXCIsci56SW5kZXh8fDYpO0MuYXR0cih7b3BhY2l0eTord30pOyF3JiYodz1kLmRhdGFMYWJlbHNHcm91cCkmJihkLnZpc2libGUmJkMuc2hvdyghMCksd1tlLmFuaW1hdGlvbj9cImFuaW1hdGVcIjpcImF0dHJcIl0oe29wYWNpdHk6MX0sRSkpO24uZm9yRWFjaChmdW5jdGlvbihnKXt2PUooYyhyLGcuZGxPcHRpb25zfHxnLm9wdGlvbnMmJmcub3B0aW9ucy5kYXRhTGFiZWxzKSk7di5mb3JFYWNoKGZ1bmN0aW9uKGMsaCl7dmFyIGs9Yy5lbmFibGVkJiYoIWcuaXNOdWxsfHxnLmRhdGFMYWJlbE9uTnVsbCkmJmIoZyxjKSxsPWcuZGF0YUxhYmVscz9nLmRhdGFMYWJlbHNbaF06Zy5kYXRhTGFiZWwsbT1nLmNvbm5lY3RvcnM/Zy5jb25uZWN0b3JzW2hdOlxuZy5jb25uZWN0b3Iscj11KGMuZGlzdGFuY2UsZy5sYWJlbERpc3RhbmNlKSxuPSFsO2lmKGspe3ZhciBxPWcuZ2V0TGFiZWxDb25maWcoKTt2YXIgdD11KGNbZy5mb3JtYXRQcmVmaXgrXCJGb3JtYXRcIl0sYy5mb3JtYXQpO3E9Zih0KT94KHQscSxhKTooY1tnLmZvcm1hdFByZWZpeCtcIkZvcm1hdHRlclwiXXx8Yy5mb3JtYXR0ZXIpLmNhbGwocSxjKTt0PWMuc3R5bGU7dmFyIHY9Yy5yb3RhdGlvbjthLnN0eWxlZE1vZGV8fCh0LmNvbG9yPXUoYy5jb2xvcix0LmNvbG9yLGQuY29sb3Isei5uZXV0cmFsQ29sb3IxMDApLFwiY29udHJhc3RcIj09PXQuY29sb3I/KGcuY29udHJhc3RDb2xvcj1CLmdldENvbnRyYXN0KGcuY29sb3J8fGQuY29sb3IpLHQuY29sb3I9IWYocikmJmMuaW5zaWRlfHwwPnJ8fGUuc3RhY2tpbmc/Zy5jb250cmFzdENvbG9yOnoubmV1dHJhbENvbG9yMTAwKTpkZWxldGUgZy5jb250cmFzdENvbG9yLGUuY3Vyc29yJiYodC5jdXJzb3I9ZS5jdXJzb3IpKTt2YXIgdz17cjpjLmJvcmRlclJhZGl1c3x8XG4wLHJvdGF0aW9uOnYscGFkZGluZzpjLnBhZGRpbmcsekluZGV4OjF9O2Euc3R5bGVkTW9kZXx8KHcuZmlsbD1jLmJhY2tncm91bmRDb2xvcix3LnN0cm9rZT1jLmJvcmRlckNvbG9yLHdbXCJzdHJva2Utd2lkdGhcIl09Yy5ib3JkZXJXaWR0aCk7Tih3LGZ1bmN0aW9uKGEsYyl7XCJ1bmRlZmluZWRcIj09PXR5cGVvZiBhJiZkZWxldGUgd1tjXX0pfSFsfHxrJiZmKHEpP2smJmYocSkmJihsP3cudGV4dD1xOihnLmRhdGFMYWJlbHM9Zy5kYXRhTGFiZWxzfHxbXSxsPWcuZGF0YUxhYmVsc1toXT12P0IudGV4dChxLDAsLTk5OTksYy51c2VIVE1MKS5hZGRDbGFzcyhcImhpZ2hjaGFydHMtZGF0YS1sYWJlbFwiKTpCLmxhYmVsKHEsMCwtOTk5OSxjLnNoYXBlLG51bGwsbnVsbCxjLnVzZUhUTUwsbnVsbCxcImRhdGEtbGFiZWxcIiksaHx8KGcuZGF0YUxhYmVsPWwpLGwuYWRkQ2xhc3MoXCIgaGlnaGNoYXJ0cy1kYXRhLWxhYmVsLWNvbG9yLVwiK2cuY29sb3JJbmRleCtcIiBcIisoYy5jbGFzc05hbWV8fFwiXCIpK1xuKGMudXNlSFRNTD9cIiBoaWdoY2hhcnRzLXRyYWNrZXJcIjpcIlwiKSkpLGwub3B0aW9ucz1jLGwuYXR0cih3KSxhLnN0eWxlZE1vZGV8fGwuY3NzKHQpLnNoYWRvdyhjLnNoYWRvdyksbC5hZGRlZHx8bC5hZGQoQyksYy50ZXh0UGF0aCYmIWMudXNlSFRNTCYmKGwuc2V0VGV4dFBhdGgoZy5nZXREYXRhTGFiZWxQYXRoJiZnLmdldERhdGFMYWJlbFBhdGgobCl8fGcuZ3JhcGhpYyxjLnRleHRQYXRoKSxnLmRhdGFMYWJlbFBhdGgmJiFjLnRleHRQYXRoLmVuYWJsZWQmJihnLmRhdGFMYWJlbFBhdGg9Zy5kYXRhTGFiZWxQYXRoLmRlc3Ryb3koKSkpLGQuYWxpZ25EYXRhTGFiZWwoZyxsLGMsbnVsbCxuKSk6KGcuZGF0YUxhYmVsPWcuZGF0YUxhYmVsJiZnLmRhdGFMYWJlbC5kZXN0cm95KCksZy5kYXRhTGFiZWxzJiYoMT09PWcuZGF0YUxhYmVscy5sZW5ndGg/ZGVsZXRlIGcuZGF0YUxhYmVsczpkZWxldGUgZy5kYXRhTGFiZWxzW2hdKSxofHxkZWxldGUgZy5kYXRhTGFiZWwsbSYmKGcuY29ubmVjdG9yPVxuZy5jb25uZWN0b3IuZGVzdHJveSgpLGcuY29ubmVjdG9ycyYmKDE9PT1nLmNvbm5lY3RvcnMubGVuZ3RoP2RlbGV0ZSBnLmNvbm5lY3RvcnM6ZGVsZXRlIGcuY29ubmVjdG9yc1toXSkpKX0pfSl9cSh0aGlzLFwiYWZ0ZXJEcmF3RGF0YUxhYmVsc1wiKX07SC5wcm90b3R5cGUuYWxpZ25EYXRhTGFiZWw9ZnVuY3Rpb24oYixjLGUsYSxmKXt2YXIgZz10aGlzLGg9dGhpcy5jaGFydCxrPXRoaXMuaXNDYXJ0ZXNpYW4mJmguaW52ZXJ0ZWQsbD10aGlzLmVuYWJsZWREYXRhU29ydGluZyxtPXUoYi5kbEJveCYmYi5kbEJveC5jZW50ZXJYLGIucGxvdFgsLTk5OTkpLG49dShiLnBsb3RZLC05OTk5KSxxPWMuZ2V0QkJveCgpLHY9ZS5yb3RhdGlvbix3PWUuYWxpZ24sdD1oLmlzSW5zaWRlUGxvdChtLE1hdGgucm91bmQobikse2ludmVydGVkOmsscGFuZUNvb3JkaW5hdGVzOiEwLHNlcmllczpnfSkscD1cImp1c3RpZnlcIj09PXUoZS5vdmVyZmxvdyxsP1wibm9uZVwiOlwianVzdGlmeVwiKSxEPXRoaXMudmlzaWJsZSYmXG4hMSE9PWIudmlzaWJsZSYmKGIuc2VyaWVzLmZvcmNlREx8fGwmJiFwfHx0fHx1KGUuaW5zaWRlLCEhdGhpcy5vcHRpb25zLnN0YWNraW5nKSYmYSYmaC5pc0luc2lkZVBsb3QobSxrP2EueCsxOmEueSthLmhlaWdodC0xLHtpbnZlcnRlZDprLHBhbmVDb29yZGluYXRlczohMCxzZXJpZXM6Z30pKTt2YXIgeD1mdW5jdGlvbihhKXtsJiZnLnhBeGlzJiYhcCYmZy5zZXREYXRhTGFiZWxTdGFydFBvcyhiLGMsZix0LGEpfTtpZihEKXt2YXIgej1oLnJlbmRlcmVyLmZvbnRNZXRyaWNzKGguc3R5bGVkTW9kZT92b2lkIDA6ZS5zdHlsZS5mb250U2l6ZSxjKS5iO2E9ZCh7eDprP3RoaXMueUF4aXMubGVuLW46bSx5Ok1hdGgucm91bmQoaz90aGlzLnhBeGlzLmxlbi1tOm4pLHdpZHRoOjAsaGVpZ2h0OjB9LGEpO2QoZSx7d2lkdGg6cS53aWR0aCxoZWlnaHQ6cS5oZWlnaHR9KTt2PyhwPSExLG09aC5yZW5kZXJlci5yb3RDb3JyKHosdiksbT17eDphLngrKGUueHx8MCkrYS53aWR0aC8yK20ueCxcbnk6YS55KyhlLnl8fDApK3t0b3A6MCxtaWRkbGU6LjUsYm90dG9tOjF9W2UudmVydGljYWxBbGlnbl0qYS5oZWlnaHR9LHgobSksY1tmP1wiYXR0clwiOlwiYW5pbWF0ZVwiXShtKS5hdHRyKHthbGlnbjp3fSkseD0odis3MjApJTM2MCx4PTE4MDx4JiYzNjA+eCxcImxlZnRcIj09PXc/bS55LT14P3EuaGVpZ2h0OjA6XCJjZW50ZXJcIj09PXc/KG0ueC09cS53aWR0aC8yLG0ueS09cS5oZWlnaHQvMik6XCJyaWdodFwiPT09dyYmKG0ueC09cS53aWR0aCxtLnktPXg/MDpxLmhlaWdodCksYy5wbGFjZWQ9ITAsYy5hbGlnbkF0dHI9bSk6KHgoYSksYy5hbGlnbihlLHZvaWQgMCxhKSxtPWMuYWxpZ25BdHRyKTtwJiYwPD1hLmhlaWdodD90aGlzLmp1c3RpZnlEYXRhTGFiZWwoYyxlLG0scSxhLGYpOnUoZS5jcm9wLCEwKSYmKEQ9aC5pc0luc2lkZVBsb3QobS54LG0ueSx7cGFuZUNvb3JkaW5hdGVzOiEwLHNlcmllczpnfSkmJmguaXNJbnNpZGVQbG90KG0ueCtxLndpZHRoLG0ueStxLmhlaWdodCx7cGFuZUNvb3JkaW5hdGVzOiEwLFxuc2VyaWVzOmd9KSk7aWYoZS5zaGFwZSYmIXYpY1tmP1wiYXR0clwiOlwiYW5pbWF0ZVwiXSh7YW5jaG9yWDprP2gucGxvdFdpZHRoLWIucGxvdFk6Yi5wbG90WCxhbmNob3JZOms/aC5wbG90SGVpZ2h0LWIucGxvdFg6Yi5wbG90WX0pfWYmJmwmJihjLnBsYWNlZD0hMSk7RHx8bCYmIXB8fChjLmhpZGUoITApLGMucGxhY2VkPSExKX07SC5wcm90b3R5cGUuc2V0RGF0YUxhYmVsU3RhcnRQb3M9ZnVuY3Rpb24oYixjLGQsYSxlKXt2YXIgZz10aGlzLmNoYXJ0LGY9Zy5pbnZlcnRlZCxoPXRoaXMueEF4aXMsaz1oLnJldmVyc2VkLGw9Zj9jLmhlaWdodC8yOmMud2lkdGgvMjtiPShiPWIucG9pbnRXaWR0aCk/Yi8yOjA7aD1mP2UueDprPy1sLWI6aC53aWR0aC1sK2I7ZT1mP2s/dGhpcy55QXhpcy5oZWlnaHQtbCtiOi1sLWI6ZS55O2Muc3RhcnRYUG9zPWg7Yy5zdGFydFlQb3M9ZTthP1wiaGlkZGVuXCI9PT1jLnZpc2liaWxpdHkmJihjLnNob3coKSxjLmF0dHIoe29wYWNpdHk6MH0pLmFuaW1hdGUoe29wYWNpdHk6MX0pKTpcbmMuYXR0cih7b3BhY2l0eToxfSkuYW5pbWF0ZSh7b3BhY2l0eTowfSx2b2lkIDAsYy5oaWRlKTtnLmhhc1JlbmRlcmVkJiYoZCYmYy5hdHRyKHt4OmMuc3RhcnRYUG9zLHk6Yy5zdGFydFlQb3N9KSxjLnBsYWNlZD0hMCl9O0gucHJvdG90eXBlLmp1c3RpZnlEYXRhTGFiZWw9ZnVuY3Rpb24oYixjLGQsYSxlLGYpe3ZhciBnPXRoaXMuY2hhcnQsaD1jLmFsaWduLGs9Yy52ZXJ0aWNhbEFsaWduLGw9Yi5ib3g/MDpiLnBhZGRpbmd8fDAsbT1jLng7bT12b2lkIDA9PT1tPzA6bTt2YXIgbj1jLnk7dmFyIHI9dm9pZCAwPT09bj8wOm47bj0oZC54fHwwKStsO2lmKDA+bil7XCJyaWdodFwiPT09aCYmMDw9bT8oYy5hbGlnbj1cImxlZnRcIixjLmluc2lkZT0hMCk6bS09bjt2YXIgcT0hMH1uPShkLnh8fDApK2Eud2lkdGgtbDtuPmcucGxvdFdpZHRoJiYoXCJsZWZ0XCI9PT1oJiYwPj1tPyhjLmFsaWduPVwicmlnaHRcIixjLmluc2lkZT0hMCk6bSs9Zy5wbG90V2lkdGgtbixxPSEwKTtuPWQueStsOzA+biYmXG4oXCJib3R0b21cIj09PWsmJjA8PXI/KGMudmVydGljYWxBbGlnbj1cInRvcFwiLGMuaW5zaWRlPSEwKTpyLT1uLHE9ITApO249KGQueXx8MCkrYS5oZWlnaHQtbDtuPmcucGxvdEhlaWdodCYmKFwidG9wXCI9PT1rJiYwPj1yPyhjLnZlcnRpY2FsQWxpZ249XCJib3R0b21cIixjLmluc2lkZT0hMCk6cis9Zy5wbG90SGVpZ2h0LW4scT0hMCk7cSYmKGMueD1tLGMueT1yLGIucGxhY2VkPSFmLGIuYWxpZ24oYyx2b2lkIDAsZSkpO3JldHVybiBxfTtHLnBpZSYmKEcucGllLnByb3RvdHlwZS5kYXRhTGFiZWxQb3NpdGlvbmVycz17cmFkaWFsRGlzdHJpYnV0aW9uWTpmdW5jdGlvbihiKXtyZXR1cm4gYi50b3ArYi5kaXN0cmlidXRlQm94LnBvc30scmFkaWFsRGlzdHJpYnV0aW9uWDpmdW5jdGlvbihiLGMsZCxhKXtyZXR1cm4gYi5nZXRYKGQ8Yy50b3ArMnx8ZD5jLmJvdHRvbS0yP2E6ZCxjLmhhbGYsYyl9LGp1c3RpZnk6ZnVuY3Rpb24oYixjLGQpe3JldHVybiBkWzBdKyhiLmhhbGY/LTE6MSkqKGMrYi5sYWJlbERpc3RhbmNlKX0sXG5hbGlnblRvUGxvdEVkZ2VzOmZ1bmN0aW9uKGIsYyxkLGEpe2I9Yi5nZXRCQm94KCkud2lkdGg7cmV0dXJuIGM/YithOmQtYi1hfSxhbGlnblRvQ29ubmVjdG9yczpmdW5jdGlvbihiLGMsZCxhKXt2YXIgZT0wLGc7Yi5mb3JFYWNoKGZ1bmN0aW9uKGEpe2c9YS5kYXRhTGFiZWwuZ2V0QkJveCgpLndpZHRoO2c+ZSYmKGU9Zyl9KTtyZXR1cm4gYz9lK2E6ZC1lLWF9fSxHLnBpZS5wcm90b3R5cGUuZHJhd0RhdGFMYWJlbHM9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLGM9Yi5kYXRhLGQsYT1iLmNoYXJ0LGU9Yi5vcHRpb25zLmRhdGFMYWJlbHN8fHt9LGs9ZS5jb25uZWN0b3JQYWRkaW5nLG4scT1hLnBsb3RXaWR0aCx2PWEucGxvdEhlaWdodCx4PWEucGxvdExlZnQsRD1NYXRoLnJvdW5kKGEuY2hhcnRXaWR0aC8zKSxFLEI9Yi5jZW50ZXIsQz1CWzJdLzIsdD1CWzFdLHAsRyxKLE4sRj1bW10sW11dLE8sSyxULFgsVT1bMCwwLDAsMF0sVz1iLmRhdGFMYWJlbFBvc2l0aW9uZXJzLFk7Yi52aXNpYmxlJiZcbihlLmVuYWJsZWR8fGIuX2hhc1BvaW50TGFiZWxzKSYmKGMuZm9yRWFjaChmdW5jdGlvbihhKXthLmRhdGFMYWJlbCYmYS52aXNpYmxlJiZhLmRhdGFMYWJlbC5zaG9ydGVuZWQmJihhLmRhdGFMYWJlbC5hdHRyKHt3aWR0aDpcImF1dG9cIn0pLmNzcyh7d2lkdGg6XCJhdXRvXCIsdGV4dE92ZXJmbG93OlwiY2xpcFwifSksYS5kYXRhTGFiZWwuc2hvcnRlbmVkPSExKX0pLEgucHJvdG90eXBlLmRyYXdEYXRhTGFiZWxzLmFwcGx5KGIpLGMuZm9yRWFjaChmdW5jdGlvbihhKXthLmRhdGFMYWJlbCYmKGEudmlzaWJsZT8oRlthLmhhbGZdLnB1c2goYSksYS5kYXRhTGFiZWwuX3Bvcz1udWxsLCFmKGUuc3R5bGUud2lkdGgpJiYhZihhLm9wdGlvbnMuZGF0YUxhYmVscyYmYS5vcHRpb25zLmRhdGFMYWJlbHMuc3R5bGUmJmEub3B0aW9ucy5kYXRhTGFiZWxzLnN0eWxlLndpZHRoKSYmYS5kYXRhTGFiZWwuZ2V0QkJveCgpLndpZHRoPkQmJihhLmRhdGFMYWJlbC5jc3Moe3dpZHRoOk1hdGgucm91bmQoLjcqXG5EKStcInB4XCJ9KSxhLmRhdGFMYWJlbC5zaG9ydGVuZWQ9ITApKTooYS5kYXRhTGFiZWw9YS5kYXRhTGFiZWwuZGVzdHJveSgpLGEuZGF0YUxhYmVscyYmMT09PWEuZGF0YUxhYmVscy5sZW5ndGgmJmRlbGV0ZSBhLmRhdGFMYWJlbHMpKX0pLEYuZm9yRWFjaChmdW5jdGlvbihjLGcpe3ZhciBoPWMubGVuZ3RoLGw9W10sbTtpZihoKXtiLnNvcnRCeUFuZ2xlKGMsZy0uNSk7aWYoMDxiLm1heExhYmVsRGlzdGFuY2Upe3ZhciBuPU1hdGgubWF4KDAsdC1DLWIubWF4TGFiZWxEaXN0YW5jZSk7dmFyIHI9TWF0aC5taW4odCtDK2IubWF4TGFiZWxEaXN0YW5jZSxhLnBsb3RIZWlnaHQpO2MuZm9yRWFjaChmdW5jdGlvbihiKXswPGIubGFiZWxEaXN0YW5jZSYmYi5kYXRhTGFiZWwmJihiLnRvcD1NYXRoLm1heCgwLHQtQy1iLmxhYmVsRGlzdGFuY2UpLGIuYm90dG9tPU1hdGgubWluKHQrQytiLmxhYmVsRGlzdGFuY2UsYS5wbG90SGVpZ2h0KSxtPWIuZGF0YUxhYmVsLmdldEJCb3goKS5oZWlnaHR8fFxuMjEsYi5kaXN0cmlidXRlQm94PXt0YXJnZXQ6Yi5sYWJlbFBvc2l0aW9uLm5hdHVyYWwueS1iLnRvcCttLzIsc2l6ZTptLHJhbms6Yi55fSxsLnB1c2goYi5kaXN0cmlidXRlQm94KSl9KTtuPXIrbS1uO0kuZGlzdHJpYnV0ZShsLG4sbi81KX1mb3IoWD0wO1g8aDtYKyspe2Q9Y1tYXTtKPWQubGFiZWxQb3NpdGlvbjtwPWQuZGF0YUxhYmVsO1Q9ITE9PT1kLnZpc2libGU/XCJoaWRkZW5cIjpcImluaGVyaXRcIjtLPW49Si5uYXR1cmFsLnk7bCYmZihkLmRpc3RyaWJ1dGVCb3gpJiYoXCJ1bmRlZmluZWRcIj09PXR5cGVvZiBkLmRpc3RyaWJ1dGVCb3gucG9zP1Q9XCJoaWRkZW5cIjooTj1kLmRpc3RyaWJ1dGVCb3guc2l6ZSxLPVcucmFkaWFsRGlzdHJpYnV0aW9uWShkKSkpO2RlbGV0ZSBkLnBvc2l0aW9uSW5kZXg7aWYoZS5qdXN0aWZ5KU89Vy5qdXN0aWZ5KGQsQyxCKTtlbHNlIHN3aXRjaChlLmFsaWduVG8pe2Nhc2UgXCJjb25uZWN0b3JzXCI6Tz1XLmFsaWduVG9Db25uZWN0b3JzKGMsZyxxLHgpO1xuYnJlYWs7Y2FzZSBcInBsb3RFZGdlc1wiOk89Vy5hbGlnblRvUGxvdEVkZ2VzKHAsZyxxLHgpO2JyZWFrO2RlZmF1bHQ6Tz1XLnJhZGlhbERpc3RyaWJ1dGlvblgoYixkLEssbil9cC5fYXR0cj17dmlzaWJpbGl0eTpULGFsaWduOkouYWxpZ25tZW50fTtZPWQub3B0aW9ucy5kYXRhTGFiZWxzfHx7fTtwLl9wb3M9e3g6Tyt1KFkueCxlLngpKyh7bGVmdDprLHJpZ2h0Oi1rfVtKLmFsaWdubWVudF18fDApLHk6Syt1KFkueSxlLnkpLTEwfTtKLmZpbmFsLng9TztKLmZpbmFsLnk9Szt1KGUuY3JvcCwhMCkmJihHPXAuZ2V0QkJveCgpLndpZHRoLG49bnVsbCxPLUc8ayYmMT09PWc/KG49TWF0aC5yb3VuZChHLU8rayksVVszXT1NYXRoLm1heChuLFVbM10pKTpPK0c+cS1rJiYwPT09ZyYmKG49TWF0aC5yb3VuZChPK0ctcStrKSxVWzFdPU1hdGgubWF4KG4sVVsxXSkpLDA+Sy1OLzI/VVswXT1NYXRoLm1heChNYXRoLnJvdW5kKC1LK04vMiksVVswXSk6SytOLzI+diYmKFVbMl09TWF0aC5tYXgoTWF0aC5yb3VuZChLK1xuTi8yLXYpLFVbMl0pKSxwLnNpZGVPdmVyZmxvdz1uKX19fSksMD09PXcoVSl8fHRoaXMudmVyaWZ5RGF0YUxhYmVsT3ZlcmZsb3coVSkpJiYodGhpcy5wbGFjZURhdGFMYWJlbHMoKSx0aGlzLnBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKGMpe1k9bChlLGMub3B0aW9ucy5kYXRhTGFiZWxzKTtpZihuPXUoWS5jb25uZWN0b3JXaWR0aCwxKSl7dmFyIGQ7RT1jLmNvbm5lY3RvcjtpZigocD1jLmRhdGFMYWJlbCkmJnAuX3BvcyYmYy52aXNpYmxlJiYwPGMubGFiZWxEaXN0YW5jZSl7VD1wLl9hdHRyLnZpc2liaWxpdHk7aWYoZD0hRSljLmNvbm5lY3Rvcj1FPWEucmVuZGVyZXIucGF0aCgpLmFkZENsYXNzKFwiaGlnaGNoYXJ0cy1kYXRhLWxhYmVsLWNvbm5lY3RvciAgaGlnaGNoYXJ0cy1jb2xvci1cIitjLmNvbG9ySW5kZXgrKGMuY2xhc3NOYW1lP1wiIFwiK2MuY2xhc3NOYW1lOlwiXCIpKS5hZGQoYi5kYXRhTGFiZWxzR3JvdXApLGEuc3R5bGVkTW9kZXx8RS5hdHRyKHtcInN0cm9rZS13aWR0aFwiOm4sXG5zdHJva2U6WS5jb25uZWN0b3JDb2xvcnx8Yy5jb2xvcnx8ei5uZXV0cmFsQ29sb3I2MH0pO0VbZD9cImF0dHJcIjpcImFuaW1hdGVcIl0oe2Q6Yy5nZXRDb25uZWN0b3JQYXRoKCl9KTtFLmF0dHIoXCJ2aXNpYmlsaXR5XCIsVCl9ZWxzZSBFJiYoYy5jb25uZWN0b3I9RS5kZXN0cm95KCkpfX0pKX0sRy5waWUucHJvdG90eXBlLnBsYWNlRGF0YUxhYmVscz1mdW5jdGlvbigpe3RoaXMucG9pbnRzLmZvckVhY2goZnVuY3Rpb24oYil7dmFyIGM9Yi5kYXRhTGFiZWwsZDtjJiZiLnZpc2libGUmJigoZD1jLl9wb3MpPyhjLnNpZGVPdmVyZmxvdyYmKGMuX2F0dHIud2lkdGg9TWF0aC5tYXgoYy5nZXRCQm94KCkud2lkdGgtYy5zaWRlT3ZlcmZsb3csMCksYy5jc3Moe3dpZHRoOmMuX2F0dHIud2lkdGgrXCJweFwiLHRleHRPdmVyZmxvdzoodGhpcy5vcHRpb25zLmRhdGFMYWJlbHMuc3R5bGV8fHt9KS50ZXh0T3ZlcmZsb3d8fFwiZWxsaXBzaXNcIn0pLGMuc2hvcnRlbmVkPSEwKSxjLmF0dHIoYy5fYXR0ciksXG5jW2MubW92ZWQ/XCJhbmltYXRlXCI6XCJhdHRyXCJdKGQpLGMubW92ZWQ9ITApOmMmJmMuYXR0cih7eTotOTk5OX0pKTtkZWxldGUgYi5kaXN0cmlidXRlQm94fSx0aGlzKX0sRy5waWUucHJvdG90eXBlLmFsaWduRGF0YUxhYmVsPWUsRy5waWUucHJvdG90eXBlLnZlcmlmeURhdGFMYWJlbE92ZXJmbG93PWZ1bmN0aW9uKGIpe3ZhciBjPXRoaXMuY2VudGVyLGQ9dGhpcy5vcHRpb25zLGE9ZC5jZW50ZXIsZT1kLm1pblNpemV8fDgwLGY9bnVsbCE9PWQuc2l6ZTtpZighZil7aWYobnVsbCE9PWFbMF0pdmFyIGs9TWF0aC5tYXgoY1syXS1NYXRoLm1heChiWzFdLGJbM10pLGUpO2Vsc2Ugaz1NYXRoLm1heChjWzJdLWJbMV0tYlszXSxlKSxjWzBdKz0oYlszXS1iWzFdKS8yO251bGwhPT1hWzFdP2s9dihrLGUsY1syXS1NYXRoLm1heChiWzBdLGJbMl0pKTooaz12KGssZSxjWzJdLWJbMF0tYlsyXSksY1sxXSs9KGJbMF0tYlsyXSkvMik7azxjWzJdPyhjWzJdPWssY1szXT1NYXRoLm1pbihuKGQuaW5uZXJTaXplfHxcbjAsayksayksdGhpcy50cmFuc2xhdGUoYyksdGhpcy5kcmF3RGF0YUxhYmVscyYmdGhpcy5kcmF3RGF0YUxhYmVscygpKTpmPSEwfXJldHVybiBmfSk7Ry5jb2x1bW4mJihHLmNvbHVtbi5wcm90b3R5cGUuYWxpZ25EYXRhTGFiZWw9ZnVuY3Rpb24oYixjLGQsYSxlKXt2YXIgZj10aGlzLmNoYXJ0LmludmVydGVkLGc9Yi5zZXJpZXMsaD1iLmRsQm94fHxiLnNoYXBlQXJncyxrPXUoYi5iZWxvdyxiLnBsb3RZPnUodGhpcy50cmFuc2xhdGVkVGhyZXNob2xkLGcueUF4aXMubGVuKSksbT11KGQuaW5zaWRlLCEhdGhpcy5vcHRpb25zLnN0YWNraW5nKTtoJiYoYT1sKGgpLDA+YS55JiYoYS5oZWlnaHQrPWEueSxhLnk9MCksaD1hLnkrYS5oZWlnaHQtZy55QXhpcy5sZW4sMDxoJiZoPGEuaGVpZ2h0JiYoYS5oZWlnaHQtPWgpLGYmJihhPXt4OmcueUF4aXMubGVuLWEueS1hLmhlaWdodCx5OmcueEF4aXMubGVuLWEueC1hLndpZHRoLHdpZHRoOmEuaGVpZ2h0LGhlaWdodDphLndpZHRofSksbXx8XG4oZj8oYS54Kz1rPzA6YS53aWR0aCxhLndpZHRoPTApOihhLnkrPWs/YS5oZWlnaHQ6MCxhLmhlaWdodD0wKSkpO2QuYWxpZ249dShkLmFsaWduLCFmfHxtP1wiY2VudGVyXCI6az9cInJpZ2h0XCI6XCJsZWZ0XCIpO2QudmVydGljYWxBbGlnbj11KGQudmVydGljYWxBbGlnbixmfHxtP1wibWlkZGxlXCI6az9cInRvcFwiOlwiYm90dG9tXCIpO0gucHJvdG90eXBlLmFsaWduRGF0YUxhYmVsLmNhbGwodGhpcyxiLGMsZCxhLGUpO2QuaW5zaWRlJiZiLmNvbnRyYXN0Q29sb3ImJmMuY3NzKHtjb2xvcjpiLmNvbnRyYXN0Q29sb3J9KX0pfSk7TyhlLFwiRXh0ZW5zaW9ucy9PdmVybGFwcGluZ0RhdGFMYWJlbHMuanNcIixbZVtcIkNvcmUvQ2hhcnQvQ2hhcnQuanNcIl0sZVtcIkNvcmUvVXRpbGl0aWVzLmpzXCJdXSxmdW5jdGlvbihlLGIpe2Z1bmN0aW9uIEQoYixlKXt2YXIgZj0hMTtpZihiKXt2YXIgZD1iLm5ld09wYWNpdHk7Yi5vbGRPcGFjaXR5IT09ZCYmKGIuYWxpZ25BdHRyJiZiLnBsYWNlZD8oYltkP1wicmVtb3ZlQ2xhc3NcIjpcblwiYWRkQ2xhc3NcIl0oXCJoaWdoY2hhcnRzLWRhdGEtbGFiZWwtaGlkZGVuXCIpLGY9ITAsYi5hbGlnbkF0dHIub3BhY2l0eT1kLGJbYi5pc09sZD9cImFuaW1hdGVcIjpcImF0dHJcIl0oYi5hbGlnbkF0dHIsbnVsbCxmdW5jdGlvbigpe2Uuc3R5bGVkTW9kZXx8Yi5jc3Moe3BvaW50ZXJFdmVudHM6ZD9cImF1dG9cIjpcIm5vbmVcIn0pO2IudmlzaWJpbGl0eT1kP1wiaW5oZXJpdFwiOlwiaGlkZGVuXCJ9KSxIKGUsXCJhZnRlckhpZGVPdmVybGFwcGluZ0xhYmVsXCIpKTpiLmF0dHIoe29wYWNpdHk6ZH0pKTtiLmlzT2xkPSEwfXJldHVybiBmfXZhciB6PWIuYWRkRXZlbnQsSD1iLmZpcmVFdmVudCxHPWIuaXNBcnJheSxDPWIuaXNOdW1iZXIsQj1iLm9iamVjdEVhY2gseD1iLnBpY2s7eihlLFwicmVuZGVyXCIsZnVuY3Rpb24oKXt2YXIgYj10aGlzLGU9W107KHRoaXMubGFiZWxDb2xsZWN0b3JzfHxbXSkuZm9yRWFjaChmdW5jdGlvbihiKXtlPWUuY29uY2F0KGIoKSl9KTsodGhpcy55QXhpc3x8W10pLmZvckVhY2goZnVuY3Rpb24oYil7Yi5zdGFja2luZyYmXG5iLm9wdGlvbnMuc3RhY2tMYWJlbHMmJiFiLm9wdGlvbnMuc3RhY2tMYWJlbHMuYWxsb3dPdmVybGFwJiZCKGIuc3RhY2tpbmcuc3RhY2tzLGZ1bmN0aW9uKGIpe0IoYixmdW5jdGlvbihiKXtlLnB1c2goYi5sYWJlbCl9KX0pfSk7KHRoaXMuc2VyaWVzfHxbXSkuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgZD1mLm9wdGlvbnMuZGF0YUxhYmVscztmLnZpc2libGUmJighMSE9PWQuZW5hYmxlZHx8Zi5faGFzUG9pbnRMYWJlbHMpJiYoZD1mdW5jdGlvbihkKXtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKGQpe2QudmlzaWJsZSYmKEcoZC5kYXRhTGFiZWxzKT9kLmRhdGFMYWJlbHM6ZC5kYXRhTGFiZWw/W2QuZGF0YUxhYmVsXTpbXSkuZm9yRWFjaChmdW5jdGlvbihmKXt2YXIgaz1mLm9wdGlvbnM7Zi5sYWJlbHJhbms9eChrLmxhYmVscmFuayxkLmxhYmVscmFuayxkLnNoYXBlQXJncyYmZC5zaGFwZUFyZ3MuaGVpZ2h0KTtrLmFsbG93T3ZlcmxhcD8oZi5vbGRPcGFjaXR5PWYub3BhY2l0eSxcbmYubmV3T3BhY2l0eT0xLEQoZixiKSk6ZS5wdXNoKGYpfSl9KX0sZChmLm5vZGVzfHxbXSksZChmLnBvaW50cykpfSk7dGhpcy5oaWRlT3ZlcmxhcHBpbmdMYWJlbHMoZSl9KTtlLnByb3RvdHlwZS5oaWRlT3ZlcmxhcHBpbmdMYWJlbHM9ZnVuY3Rpb24oYil7dmFyIGU9dGhpcyxmPWIubGVuZ3RoLGQ9ZS5yZW5kZXJlcixxLGssbCx3PSExO3ZhciB1PWZ1bmN0aW9uKGIpe3ZhciBlLGM9Yi5ib3g/MDpiLnBhZGRpbmd8fDAsZj1lPTAsYTtpZihiJiYoIWIuYWxpZ25BdHRyfHxiLnBsYWNlZCkpe3ZhciBoPWIuYWxpZ25BdHRyfHx7eDpiLmF0dHIoXCJ4XCIpLHk6Yi5hdHRyKFwieVwiKX07dmFyIGs9Yi5wYXJlbnRHcm91cDtiLndpZHRofHwoZT1iLmdldEJCb3goKSxiLndpZHRoPWUud2lkdGgsYi5oZWlnaHQ9ZS5oZWlnaHQsZT1kLmZvbnRNZXRyaWNzKG51bGwsYi5lbGVtZW50KS5oKTt2YXIgbD1iLndpZHRoLTIqYzsoYT17bGVmdDpcIjBcIixjZW50ZXI6XCIwLjVcIixyaWdodDpcIjFcIn1bYi5hbGlnblZhbHVlXSk/XG5mPSthKmw6QyhiLngpJiZNYXRoLnJvdW5kKGIueCkhPT1iLnRyYW5zbGF0ZVgmJihmPWIueC1iLnRyYW5zbGF0ZVgpO3JldHVybnt4OmgueCsoay50cmFuc2xhdGVYfHwwKStjLShmfHwwKSx5OmgueSsoay50cmFuc2xhdGVZfHwwKStjLWUsd2lkdGg6Yi53aWR0aC0yKmMsaGVpZ2h0OmIuaGVpZ2h0LTIqY319fTtmb3Ioaz0wO2s8ZjtrKyspaWYocT1iW2tdKXEub2xkT3BhY2l0eT1xLm9wYWNpdHkscS5uZXdPcGFjaXR5PTEscS5hYnNvbHV0ZUJveD11KHEpO2Iuc29ydChmdW5jdGlvbihiLGQpe3JldHVybihkLmxhYmVscmFua3x8MCktKGIubGFiZWxyYW5rfHwwKX0pO2ZvcihrPTA7azxmO2srKyl7dmFyIG49KHU9YltrXSkmJnUuYWJzb2x1dGVCb3g7Zm9yKHE9aysxO3E8ZjsrK3Epe3ZhciB4PShsPWJbcV0pJiZsLmFic29sdXRlQm94OyFufHwheHx8dT09PWx8fDA9PT11Lm5ld09wYWNpdHl8fDA9PT1sLm5ld09wYWNpdHl8fHgueD49bi54K24ud2lkdGh8fHgueCt4LndpZHRoPD1cbm4ueHx8eC55Pj1uLnkrbi5oZWlnaHR8fHgueSt4LmhlaWdodDw9bi55fHwoKHUubGFiZWxyYW5rPGwubGFiZWxyYW5rP3U6bCkubmV3T3BhY2l0eT0wKX19Yi5mb3JFYWNoKGZ1bmN0aW9uKGIpe0QoYixlKSYmKHc9ITApfSk7dyYmSChlLFwiYWZ0ZXJIaWRlQWxsT3ZlcmxhcHBpbmdMYWJlbHNcIil9fSk7TyhlLFwiQ29yZS9SZXNwb25zaXZlLmpzXCIsW2VbXCJDb3JlL0NoYXJ0L0NoYXJ0LmpzXCJdLGVbXCJDb3JlL1V0aWxpdGllcy5qc1wiXV0sZnVuY3Rpb24oZSxiKXt2YXIgRD1iLmZpbmQsej1iLmlzQXJyYXksSD1iLmlzT2JqZWN0LEc9Yi5tZXJnZSxDPWIub2JqZWN0RWFjaCxCPWIucGljayx4PWIuc3BsYXQsdz1iLnVuaXF1ZUtleTtlLnByb3RvdHlwZS5zZXRSZXNwb25zaXZlPWZ1bmN0aW9uKGIsZSl7dmFyIGQ9dGhpcy5vcHRpb25zLnJlc3BvbnNpdmUsZj1bXSxrPXRoaXMuY3VycmVudFJlc3BvbnNpdmU7IWUmJmQmJmQucnVsZXMmJmQucnVsZXMuZm9yRWFjaChmdW5jdGlvbihiKXtcInVuZGVmaW5lZFwiPT09XG50eXBlb2YgYi5faWQmJihiLl9pZD13KCkpO3RoaXMubWF0Y2hSZXNwb25zaXZlUnVsZShiLGYpfSx0aGlzKTtlPUcuYXBwbHkoMCxmLm1hcChmdW5jdGlvbihiKXtyZXR1cm4gRChkLnJ1bGVzLGZ1bmN0aW9uKGQpe3JldHVybiBkLl9pZD09PWJ9KS5jaGFydE9wdGlvbnN9KSk7ZS5pc1Jlc3BvbnNpdmVPcHRpb25zPSEwO2Y9Zi50b1N0cmluZygpfHx2b2lkIDA7ZiE9PShrJiZrLnJ1bGVJZHMpJiYoayYmdGhpcy51cGRhdGUoay51bmRvT3B0aW9ucyxiLCEwKSxmPyhrPXRoaXMuY3VycmVudE9wdGlvbnMoZSksay5pc1Jlc3BvbnNpdmVPcHRpb25zPSEwLHRoaXMuY3VycmVudFJlc3BvbnNpdmU9e3J1bGVJZHM6ZixtZXJnZWRPcHRpb25zOmUsdW5kb09wdGlvbnM6a30sdGhpcy51cGRhdGUoZSxiLCEwKSk6dGhpcy5jdXJyZW50UmVzcG9uc2l2ZT12b2lkIDApfTtlLnByb3RvdHlwZS5tYXRjaFJlc3BvbnNpdmVSdWxlPWZ1bmN0aW9uKGIsZSl7dmFyIGQ9Yi5jb25kaXRpb247KGQuY2FsbGJhY2t8fFxuZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jaGFydFdpZHRoPD1CKGQubWF4V2lkdGgsTnVtYmVyLk1BWF9WQUxVRSkmJnRoaXMuY2hhcnRIZWlnaHQ8PUIoZC5tYXhIZWlnaHQsTnVtYmVyLk1BWF9WQUxVRSkmJnRoaXMuY2hhcnRXaWR0aD49QihkLm1pbldpZHRoLDApJiZ0aGlzLmNoYXJ0SGVpZ2h0Pj1CKGQubWluSGVpZ2h0LDApfSkuY2FsbCh0aGlzKSYmZS5wdXNoKGIuX2lkKX07ZS5wcm90b3R5cGUuY3VycmVudE9wdGlvbnM9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gZShiLGYscSx1KXt2YXIgaztDKGIsZnVuY3Rpb24oYixsKXtpZighdSYmLTE8ZC5jb2xsZWN0aW9uc1dpdGhVcGRhdGUuaW5kZXhPZihsKSYmZltsXSlmb3IoYj14KGIpLHFbbF09W10saz0wO2s8TWF0aC5tYXgoYi5sZW5ndGgsZltsXS5sZW5ndGgpO2srKylmW2xdW2tdJiYodm9pZCAwPT09YltrXT9xW2xdW2tdPWZbbF1ba106KHFbbF1ba109e30sZShiW2tdLGZbbF1ba10scVtsXVtrXSx1KzEpKSk7ZWxzZSBIKGIpP1xuKHFbbF09eihiKT9bXTp7fSxlKGIsZltsXXx8e30scVtsXSx1KzEpKTpxW2xdPVwidW5kZWZpbmVkXCI9PT10eXBlb2YgZltsXT9udWxsOmZbbF19KX12YXIgZD10aGlzLHE9e307ZShiLHRoaXMub3B0aW9ucyxxLDApO3JldHVybiBxfX0pO08oZSxcIm1hc3RlcnMvaGlnaGNoYXJ0cy5zcmMuanNcIixbZVtcIkNvcmUvR2xvYmFscy5qc1wiXSxlW1wiQ29yZS9VdGlsaXRpZXMuanNcIl0sZVtcIkNvcmUvT3B0aW9ucy5qc1wiXSxlW1wiQ29yZS9BbmltYXRpb24vRnguanNcIl0sZVtcIkNvcmUvQW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5qc1wiXSxlW1wiQ29yZS9SZW5kZXJlci9IVE1ML0FTVC5qc1wiXSxlW1wiQ29yZS9Gb3JtYXRVdGlsaXRpZXMuanNcIl0sZVtcIkNvcmUvUmVuZGVyZXIvU1ZHL1NWR0VsZW1lbnQuanNcIl0sZVtcIkNvcmUvU2VyaWVzL1Nlcmllcy5qc1wiXV0sZnVuY3Rpb24oZSxiLEkseixILEcsQyxCLHgpe2UuYW5pbWF0ZT1ILmFuaW1hdGU7ZS5hbmltT2JqZWN0PUguYW5pbU9iamVjdDtlLmdldERlZmVycmVkQW5pbWF0aW9uPVxuSC5nZXREZWZlcnJlZEFuaW1hdGlvbjtlLnNldEFuaW1hdGlvbj1ILnNldEFuaW1hdGlvbjtlLnN0b3A9SC5zdG9wO2UudGltZXJzPXoudGltZXJzO2UuQVNUPUc7ZS5GeD16O2UuU2VyaWVzPXg7ZS5TVkdFbGVtZW50PUI7ZS5kYXRlRm9ybWF0PUMuZGF0ZUZvcm1hdDtlLmZvcm1hdD1DLmZvcm1hdDtlLm51bWJlckZvcm1hdD1DLm51bWJlckZvcm1hdDtlLmRlZmF1bHRPcHRpb25zPUkuZGVmYXVsdE9wdGlvbnM7ZS5nZXRPcHRpb25zPUkuZ2V0T3B0aW9ucztlLnRpbWU9SS5kZWZhdWx0VGltZTtlLnNldE9wdGlvbnM9SS5zZXRPcHRpb25zO2UuYWRkRXZlbnQ9Yi5hZGRFdmVudDtlLmFycmF5TWF4PWIuYXJyYXlNYXg7ZS5hcnJheU1pbj1iLmFycmF5TWluO2UuYXR0cj1iLmF0dHI7ZS5jbGVhclRpbWVvdXQ9Yi5jbGVhclRpbWVvdXQ7ZS5jb3JyZWN0RmxvYXQ9Yi5jb3JyZWN0RmxvYXQ7ZS5jcmVhdGVFbGVtZW50PWIuY3JlYXRlRWxlbWVudDtlLmNzcz1iLmNzcztlLmRlZmluZWQ9XG5iLmRlZmluZWQ7ZS5kZXN0cm95T2JqZWN0UHJvcGVydGllcz1iLmRlc3Ryb3lPYmplY3RQcm9wZXJ0aWVzO2UuZGlzY2FyZEVsZW1lbnQ9Yi5kaXNjYXJkRWxlbWVudDtlLmVyYXNlPWIuZXJhc2U7ZS5lcnJvcj1iLmVycm9yO2UuZXh0ZW5kPWIuZXh0ZW5kO2UuZXh0ZW5kQ2xhc3M9Yi5leHRlbmRDbGFzcztlLmZpbmQ9Yi5maW5kO2UuZmlyZUV2ZW50PWIuZmlyZUV2ZW50O2UuZ2V0TWFnbml0dWRlPWIuZ2V0TWFnbml0dWRlO2UuZ2V0U3R5bGU9Yi5nZXRTdHlsZTtlLmluQXJyYXk9Yi5pbkFycmF5O2UuaXNBcnJheT1iLmlzQXJyYXk7ZS5pc0NsYXNzPWIuaXNDbGFzcztlLmlzRE9NRWxlbWVudD1iLmlzRE9NRWxlbWVudDtlLmlzRnVuY3Rpb249Yi5pc0Z1bmN0aW9uO2UuaXNOdW1iZXI9Yi5pc051bWJlcjtlLmlzT2JqZWN0PWIuaXNPYmplY3Q7ZS5pc1N0cmluZz1iLmlzU3RyaW5nO2Uua2V5cz1iLmtleXM7ZS5tZXJnZT1iLm1lcmdlO2Uubm9ybWFsaXplVGlja0ludGVydmFsPWIubm9ybWFsaXplVGlja0ludGVydmFsO1xuZS5vYmplY3RFYWNoPWIub2JqZWN0RWFjaDtlLm9mZnNldD1iLm9mZnNldDtlLnBhZD1iLnBhZDtlLnBpY2s9Yi5waWNrO2UucEludD1iLnBJbnQ7ZS5yZWxhdGl2ZUxlbmd0aD1iLnJlbGF0aXZlTGVuZ3RoO2UucmVtb3ZlRXZlbnQ9Yi5yZW1vdmVFdmVudDtlLnNwbGF0PWIuc3BsYXQ7ZS5zdGFibGVTb3J0PWIuc3RhYmxlU29ydDtlLnN5bmNUaW1lb3V0PWIuc3luY1RpbWVvdXQ7ZS50aW1lVW5pdHM9Yi50aW1lVW5pdHM7ZS51bmlxdWVLZXk9Yi51bmlxdWVLZXk7ZS51c2VTZXJpYWxJZHM9Yi51c2VTZXJpYWxJZHM7ZS53cmFwPWIud3JhcDtyZXR1cm4gZX0pO2VbXCJtYXN0ZXJzL2hpZ2hjaGFydHMuc3JjLmpzXCJdLl9tb2R1bGVzPWU7cmV0dXJuIGVbXCJtYXN0ZXJzL2hpZ2hjaGFydHMuc3JjLmpzXCJdfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oaWdoY2hhcnRzLmpzLm1hcCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/highcharts/highcharts.js\n");
14
-
15
- /***/ })
16
-
17
- }]);